From 3fb3ec0d41ff44cafc639a3a7a65819b498e0a5b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 27 Nov 2023 10:40:09 -0500 Subject: [PATCH 001/738] user/dotnet8-stage0: upgrade to 8.0.100 --- user/dotnet8-stage0/APKBUILD | 85 ++++----- user/dotnet8-stage0/README.md | 19 +- ...e_use-linux-musl-crossgen-on-non-x64.patch | 26 --- .../build_fix-ga-versions.patch | 32 ++++ ...nstaller_aspire-manifest-version-fix.patch | 26 +++ ...ve-errno-when-using-posix-semaphores.patch | 174 ------------------ ...ime_90251-rename-mono-cmake-host-var.patch | 23 +-- ...andle-enum-return-type-when-inlining.patch | 30 +++ .../runtime_rename-mono-cmake-host-var.patch | 42 ----- 9 files changed, 142 insertions(+), 315 deletions(-) delete mode 100644 user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch create mode 100644 user/dotnet8-stage0/build_fix-ga-versions.patch create mode 100644 user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch delete mode 100644 user/dotnet8-stage0/runtime_79856-save-errno-when-using-posix-semaphores.patch create mode 100644 user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch delete mode 100644 user/dotnet8-stage0/runtime_rename-mono-cmake-host-var.patch diff --git a/user/dotnet8-stage0/APKBUILD b/user/dotnet8-stage0/APKBUILD index 886a966..c82e702 100644 --- a/user/dotnet8-stage0/APKBUILD +++ b/user/dotnet8-stage0/APKBUILD @@ -2,24 +2,26 @@ # Contributor: Antoine Martin (ayakael) pkgname=dotnet8-stage0 -pkgver=8.0.0_pre7 -pkgrel=2 +pkgver=8.0.100 +pkgrel=0 [ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" # Tag of tarball generator. -_gittag=v8.0.0-preview.7.23375.6 +_gittag=v8.0.0 # Versions of prebuilt artifacts and bootstrap tar -_artifactsver="8.0.100-preview.7.23376.1.centos.8-x64" -_bootstrapver="8.0.100-preview.7.23376.3" -_bootstraprel=2 -_installerver=${_gittag/v} +_artifactsver="8.0.100-rtm.23551.1.centos.8-x64" +_bootstrapver="8.0.100" +_bootstraprel=0 +_installerver=8.0.100 # Patches to be used. String before '_' refers to repo to patch # Look for patch notes within each patch for what they fix / where they come from # build_* patches applies directly to $builddir _patches=" + build_fix-ga-versions.patch + installer_aspire-manifest-version-fix.patch installer_set-crossgen2rid-using-buildarchitecture.patch runtime_82269-mono-thread-coop-undefine-fortify-source.patch runtime_83682-specify-notext-on-linux-musl-x86.patch @@ -27,24 +29,20 @@ _patches=" runtime_more-clang-16-suppression.patch runtime_remove-usage-of-off64-t.patch " -_extra_nupkgs=" - https://globalcdn.nuget.org/packages/microsoft.netcore.app.host.linux-musl-x64.7.0.2.nupkg - " _pkgver_macro=${pkgver%.*} _pkgver_prior=1 _pkgver_name="${_pkgver_macro//[.0]}" -_pkgver_sdk=${pkgver/0./0.10} pkgdesc="The .NET Core stage0 bits for dotnet build" # x86: blocked by https://github.com/dotnet/runtime/issues/83509 # armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# upgrade needed -#arch="all !x86 !armhf" +# riscv64: port WIP https://github.com/dotnet/runtime/issues/84834 +# s390x | ppc64le: mono-based runtime still has issues on musl +arch="all !x86 !armhf !riscv64 !s390x !ppc64le" _giturl=https://github.com/dotnet/dotnet url=https://dotnet.microsoft.com license="MIT" -options="!check" # Testsuite in main -build aport +options="!check net" # Testsuite in main -build aport subpackages=" dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch dotnet$_pkgver_name-stage0-bootstrap @@ -52,14 +50,12 @@ subpackages=" source=" dotnet-tarball-$_gittag.tar.gz::https://github.com/dotnet/dotnet/archive/refs/tags/$_gittag.tar.gz dotnet-release-$_gittag.json::https://github.com/dotnet/dotnet/releases/download/$_gittag/release.json - dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetbuilds.azureedge.net/public/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz + dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz + dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz + dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.tar.xz dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.tar.xz - dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-riscv64.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-riscv64.tar.xz Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz - $_extra_nupkgs $_patches " @@ -164,12 +160,6 @@ prepare() { tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - $_nuget push "$srcdir"/$filename --source="$_packagesdir" - done - # adjusts sdk version and packagedir to expected for i in runtime sdk installer aspnetcore roslyn; do $_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config @@ -374,14 +364,14 @@ bootstrap() { local _iltoolsver=$(grep \||g' | tr -d ' ') install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/docs \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/comp \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk + "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \ + "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver # unpack build artifacts to bootstrap subdir for use by future builds tar --use-compress-program="pigz" \ -xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/ \ + -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ --no-same-owner local _iltoolsArray=" @@ -403,18 +393,13 @@ bootstrap() { " # copies artifacts to artifacts dir for use by future dotnet builds - for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ || true; done - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - install -Dm644 "$srcdir"/$filename "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ - done + for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done msg "Changing iltools version to $_iltoolsver" # source-build expects a certain version of ilasm, ildasm and testhost # following adjusts version for i in $_iltoolsArray; do - local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$_pkgver_sdk/$i + local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i local nupath=$(find $nupath || true) local nupkg="${nupath##*/}" local nuname="${nupkg/.nupkg}" @@ -449,31 +434,31 @@ artifacts() { # directory creation install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ "$subpkgdir"/usr/share/licenses # extract artifacts to artifacts dir for use by future dotnet builds tar --use-compress-program="pigz" \ -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ + -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ --no-same-owner } sha512sums=" -06cb81a5667153a7d6ae190d169dcafea88954d1d42f9f1ae0fffe7cb4787599d7cad5428f66a6ce10af24898bd4ffbe1b9e95f1d3b698641437298055ebd10f dotnet-tarball-v8.0.0-preview.7.23375.6.tar.gz -5598ae0b9044dd2d2b5eba10ce420cd14266bd25412b37e9766bbaf1b1ce79438a5c7db559431aa59c0b49f14187ca3f78a57065b7802df304910b00b6694bfa dotnet-release-v8.0.0-preview.7.23375.6.json -6b7bf38224573496eae08e3000792296de81e16a1bd5a253236427137de4a6a9d7950c99f08ad764e337aa33140db5160218f9ecea0bfbd60c6e6f301e6dd042 dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-x64.noextract -8e5bfb89b287f6ab478e6bd9f4ce1ec482ba4d00b2241f6b4d6081c5885ac0399233bfaf983994b485ea6541a4a2ab9b362cbd582012edb09a6785a7cd7fb292 dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-arm64.noextract -14a3c0aaedc787f9a05258138fb70effedb627cb46206bfdbb912936472b78cc3e24878b10b03e95339d3b7382b46a13a87783cb6a77a49243b75b31ecd94cb7 dotnet-sdk-8.0.100-preview.7.23376.3-linux-musl-arm.noextract -08b520d3e671e4e1d90ddf8e965dd50124f8216d03005bdc08497f0264f7a2767a99c67e6cf45464b8a9f206028cfe513433c5a585d188617523feae5eedf10e dotnet-sdk-8.0.100-preview.7.23376.3-r2-linux-musl-s390x.noextract -ad46d02742c4c605e30bfbee18eba0e491984e6986bd93fb78c9d9c95d2cdf5bfe17584b90582f783b1cb1b6b32bb7ef317ff63396fbcff9399800ecd5d09a94 dotnet-sdk-8.0.100-preview.7.23376.3-r2-linux-musl-ppc64le.noextract -cd2c4e1f3697f3679d37f76f7692389ce29d0fca92e0130a9f1241674150e78542ec1898568cf0b30d8599b954edcf5211823bf05f46b907aa58b79c677a0575 dotnet-sdk-8.0.100-preview.7.23376.3-r2-linux-musl-riscv64.noextract -554d02d10072b8ec9122a0877e86753ebf9875f69508fd18bae43fc9d6eed8655e7923af771d593f3c59ad49c0858cf88816934618d9e0b65bb614ebcdb360a2 Private.SourceBuilt.Artifacts.8.0.100-preview.7.23376.1.centos.8-x64.noextract -5c1fd9e250e7f08d996b7b335134973624a8d1afc331f7fda3a81eee7d2170e39905be20b8786e99078892b21d1582092aeee45d49c5feae3b2bd5374c306fec microsoft.netcore.app.host.linux-musl-x64.7.0.2.nupkg +094265462d66d97b51ebfbe5fb06d4a679b97881f1f5a07a87a282a96eeaabfe97ca42061d59aac71dd8861c07f07dda16a72e29ae03167407e51d3fd2767562 dotnet-tarball-v8.0.0.tar.gz +55f2c56f7fbed4137ebe5e81c7b86d199d7ff91c6e19fbc9a4af8cd5d0f0195273356ead8b80aedfff56a3d704a541a7c2a7395bec3fa5d6585f3afd056b1220 dotnet-release-v8.0.0.json +a904491cf1fe27603cfc21aa234b2f4da7517929fa9dad0eaa2233d010ef1e890339ca4b8e3c4c0d463f3015d7020a0c37ece97319b061cd92a5fc51cd8a7f4c dotnet-sdk-8.0.100-linux-musl-x64.noextract +1d8e54ab8d2b7b83972c1ecd7a23073bf83d39c258e993e54ab91a383ad2aa44276dfc28938f7b162cf79010187005e42a665933dff021ffa5e5d9cfadb5e2b6 dotnet-sdk-8.0.100-linux-musl-arm64.noextract +a8c08c4eaaa1ade3a1521750c62af92ab8fe91bfdd0f4767f8c0469ebfef091f3a68a443d4566bbfe53c49866d72a104c7aea309cabb36148f9aef9cb950ea64 dotnet-sdk-8.0.100-linux-musl-arm.noextract +d0bebb6179e679dea5704ca59acb2260a3dde2d22727b8116b57fbcfc3cba7b31581ed785279eec2836e3916608f39fa45a8e26dfa27063928355ccda83b3d09 dotnet-sdk-8.0.100-r0-linux-musl-s390x.noextract +14fdc6c8225010a6028609ed2b7c942abc770a50167429116ab9d5f0cabfe8038aedb89b7cc984d89c3366351302a86e10c2d5cfccd57399cc42b3c838bc37a0 dotnet-sdk-8.0.100-r0-linux-musl-ppc64le.noextract +a9933d8de614e914d42cf4953ac60a0a6e83e4276328b838fb369fb3036073fd08d2bcbcee07386f65f802f2f2374e45b44b8f8410396a7d93d20e53646d72f0 Private.SourceBuilt.Artifacts.8.0.100-rtm.23551.1.centos.8-x64.noextract +48d155f11c4594eeb72b2d80a6e110ab2b093fd2379e9ddcca755072f4a3e64990ef2620709e0b10ea4b979d8909de56d89f970c349c6fee58621a8f6b415a1c build_fix-ga-versions.patch +6f23b53b1408dc676434d3ee417b735af033f2717057589e93d26021ca2513d13f40ba7ea3312413f2ed79cda2991538f64b4c835e75f40f5a5e5a0e469c4ec0 installer_aspire-manifest-version-fix.patch b6a2dfeccac329546f87f1019c1f2cf07e2f294dd33914449ad08d92269c8713b6fa1e330ef257c24e189023fd0b824df97688b0ba6e578a6d0292b07a72b4c1 installer_set-crossgen2rid-using-buildarchitecture.patch d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch c983a1ab7f06ac86691e0fa7a61fcad69a074d984ef4a4116bee43f20be918215963c7ec8ddd7edd70432b29b160ff78288183acc89fda15ce4a75bfdbf99ee3 runtime_83682-specify-notext-on-linux-musl-x86.patch -c1e8a51bca47f13e60cb28fa3c58c4bdc0fd8fa19177855b6cc9a767016fc239064aced57530e227c772e302671fc91e86c718a39aecb05eb7f601c8d931de81 runtime_90251-rename-mono-cmake-host-var.patch +3354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch 887112eb2b103eadd6887529ebae7f9a75df2c2cb168e84fd40cc09f9bcd20917d428bbba06968b07b0a463890da82b1b2b1d033a3dd016e6494067464ae6f74 runtime_more-clang-16-suppression.patch 0c25319125ef5b0ad490b37a643c0c5257c796d5ed24f9ac404f698710b07de790bcbb0b6336d4a50025b94c3bff99b214951bd8f0a79a8d6f543ebaa300740f runtime_remove-usage-of-off64-t.patch " diff --git a/user/dotnet8-stage0/README.md b/user/dotnet8-stage0/README.md index 5c5d237..b055bb1 100644 --- a/user/dotnet8-stage0/README.md +++ b/user/dotnet8-stage0/README.md @@ -26,13 +26,16 @@ In summary, dotnet8 is built using three different aports. * `community/dotnet8-stage0` Builds minimum components for full build of dotnet8, and packages these in an initial -`dotnet8-stage0-bootstrap` package that `dotnet8-build` pulls. -* `community/dotnet8-build` +`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. +* `community/dotnet8-runtime` Builds full and packages dotnet8 fully using either stage0 or previoulsy built dotnet8 build. -* `community/dotnet8-runtime` +* `community/dotnet8-sdk` As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet8-build. +is required to package runtime bits from dotnet8-runtime. dotnet8-runtime only +builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is +released, the updated components are to be built on dotnet8-sdk rather than +simply repackaging dotnet8-runtime artifacts. ## Crossbuilding with `stage0` Crossbuilding `stage0` is a three step process: @@ -69,7 +72,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-build` + - `cd community/dotnet8-runtime` 3. Make your changes. Don't forget to add a changelog. @@ -84,7 +87,7 @@ follow. - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-build: descriptive description'` + - `git commit -m 'community/dotnet8-runtime: descriptive description'` - `git push` 7. Create a merge request with your changes, tagging @ayakael for review. @@ -99,7 +102,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-build` + - `cd community/dotnet8-runtime` 3. Build the new upstream source tarball. Update the versions in the @@ -123,7 +126,7 @@ follow. - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-build: upgrade to ` + - `git commit -m 'community/dotnet8-runtime: upgrade to ` - `git push` 8. Create a merge request with your changes, tagging @ayakael for review. diff --git a/user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch b/user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch deleted file mode 100644 index ddd8920..0000000 --- a/user/dotnet8-stage0/aspnetcore_use-linux-musl-crossgen-on-non-x64.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 65613dc9cf76432dcbde3db3db1005c2aa902fee Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Tue, 21 Feb 2023 15:51:31 -0500 -Subject: [PATCH 09/15] aspnetcore_use-linux-musl-crossgen - -Line causes build of aspnetcore on arm to look for linux version of -CrossGen2 rather than linux-musl. This removes the line so that -BuildOsName is pulled from TargetOsName as expected ---- - .../App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj -index 326968018..fa1f72e62 100644 ---- a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj -+++ b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj -@@ -103,7 +103,6 @@ This package is an internal implementation of the .NET Core SDK and is not meant - Special case the crossgen2 package reference on Windows to avoid the x86 package when building in Visual Studio. - --> - $(TargetOsName) -- linux - $(TargetRuntimeIdentifier.Substring(0,$(TargetRuntimeIdentifier.IndexOf('-')))) - x64 - $(BuildArchitecture) --- -2.38.2 diff --git a/user/dotnet8-stage0/build_fix-ga-versions.patch b/user/dotnet8-stage0/build_fix-ga-versions.patch new file mode 100644 index 0000000..31fe745 --- /dev/null +++ b/user/dotnet8-stage0/build_fix-ga-versions.patch @@ -0,0 +1,32 @@ +diff --git a/prereqs/git-info/runtime.props.orig b/prereqs/git-info/runtime.props +index f9dc4d6..093bd00 100644 +--- a/prereqs/git-info/runtime.props.orig ++++ b/prereqs/git-info/runtime.props +@@ -3,8 +3,8 @@ + + 5535e31a712343a63f5d7d796cd874e563e5ac14 + 20231031.3 +- 8.0.0-rtm.23531.3 ++ 8.0.0 + rtm + false + +- +\ No newline at end of file ++ +diff --git a/prereqs/git-info/aspnetcore.props.orig b/prereqs/git-info/aspnetcore.props +index d1494e8..b83649d 100644 +--- a/prereqs/git-info/aspnetcore.props.orig ++++ b/prereqs/git-info/aspnetcore.props +@@ -3,8 +3,8 @@ + + 3f1acb59718cadf111a0a796681e3d3509bb3381 + 20231031.12 +- 8.0.0-rtm.23531.12 ++ 8.0.0 + rtm + false + +- +\ No newline at end of file ++ diff --git a/user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch b/user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch new file mode 100644 index 0000000..d4623f7 --- /dev/null +++ b/user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch @@ -0,0 +1,26 @@ +diff --git a/./src/installer/eng/Version.Details.xml.orig b/./src/installer/eng/Version.Details.xml +index a1cebfe..3f47a7f 100644 +--- a/./src/installer/eng/Version.Details.xml.orig ++++ b/./src/installer/eng/Version.Details.xml +@@ -172,7 +172,7 @@ + https://github.com/dotnet/emsdk + 2406616d0e3a31d80b326e27c156955bfa41c791 + +- ++ + https://dev.azure.com/dnceng/internal/_git/dotnet-aspire + 4b00c57d7ccf9a4c7e2aef211ab6bd8af3ee2324 + +diff --git a/./src/installer/eng/Versions.props.orig b/./src/installer/eng/Versions.props +index 329ab4e..897263d 100644 +--- a/./src/installer/eng/Versions.props.orig ++++ b/./src/installer/eng/Versions.props +@@ -238,7 +238,7 @@ + + + 8.0.100 +- 8.0.0-preview.1.23551.7 ++ 8.0.0-preview.1.23557.2 + 8.0.100-rc.2 + 8.0.0-rc.2.9373 + 34.0.0-rc.2.468 diff --git a/user/dotnet8-stage0/runtime_79856-save-errno-when-using-posix-semaphores.patch b/user/dotnet8-stage0/runtime_79856-save-errno-when-using-posix-semaphores.patch deleted file mode 100644 index 4d451b7..0000000 --- a/user/dotnet8-stage0/runtime_79856-save-errno-when-using-posix-semaphores.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 50de22c7fa57c687a996bfdf6702871216881c0f Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/79856 -From: Antoine Martin -Date: Sat, 25 Feb 2023 15:19:00 -0500 -Subject: [PATCH 1/1] [threads] Save errno when using posix semaphores for - thread transitions - -We already save/restore GetLastError on win32. Do it on posix -platforms, too. - -If one thread is in a pinvoke wrapper, while another thread triggers a -STW, the pinvoke wrapper will self-suspend the thread and wait for a -notification to resume. Depending on the platform we can use win32 -primitives, Mach semaphores or POSIX semaphores. win32 and posix can -both change the value of last error (errno, respectively) while the -thread is suspended. - -That means that code like this (generated by the -LibraryImportAttribute source generator) cannot reliably retrieve the -error from the last pinvoke: - -```csharp -__retVal = __PInvoke(__path_native, mode); // there is a pinvoke wrapper here, that transitions from GC Safe to GC Unsafe mode -__lastError = System.Runtime.InteropServices.Marshal.GetLastSystemError(); -``` - -The solution is to explicitly preserve the value of GetLastError/errno -when exiting from GC Safe. - -Fixes https://github.com/dotnet/runtime/issues/77364 ---- - .../src/mono/mono/utils/mono-threads-coop.c | 12 +++--- - .../src/mono/mono/utils/mono-threads.c | 4 +- - .../src/mono/mono/utils/mono-threads.h | 43 ++++++++++++++++--- - 3 files changed, 45 insertions(+), 14 deletions(-) - -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d66..c562ada67 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -337,10 +337,10 @@ mono_threads_exit_gc_safe_region_internal (gpointer cookie, MonoStackData *stack - return; - - #ifdef ENABLE_CHECKED_BUILD_GC -- W32_DEFINE_LAST_ERROR_RESTORE_POINT; -+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT; - if (mono_check_mode_enabled (MONO_CHECK_MODE_GC)) - coop_tls_pop (cookie); -- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; -+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; - #endif - - mono_threads_exit_gc_safe_region_unbalanced_internal (cookie, stackdata); -@@ -365,7 +365,7 @@ mono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStack - /* Common to use enter/exit gc safe around OS API's affecting last error. */ - /* This method can call OS API's that will reset last error on some platforms. */ - /* To reduce errors, we need to restore last error before exit gc safe. */ -- W32_DEFINE_LAST_ERROR_RESTORE_POINT; -+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT; - - info = (MonoThreadInfo *)cookie; - -@@ -398,7 +398,7 @@ mono_threads_exit_gc_safe_region_unbalanced_internal (gpointer cookie, MonoStack - info->user_data = NULL; - } - -- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; -+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; - } - - void -@@ -652,14 +652,14 @@ mono_threads_suspend_policy_init (void) - // otherwise if one of the old environment variables is set, use that. - // otherwise use full preemptive suspend. - -- W32_DEFINE_LAST_ERROR_RESTORE_POINT; -+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT; - - (policy = threads_suspend_policy_getenv ()) - || (policy = threads_suspend_policy_default ()) - || (policy = threads_suspend_policy_getenv_compat ()) - || (policy = MONO_THREADS_SUSPEND_FULL_PREEMPTIVE); - -- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; -+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; - - g_assert (policy); - mono_threads_suspend_policy_hidden_dont_modify = (char)policy; -diff --git a/src/runtime/src/mono/mono/utils/mono-threads.c b/src/runtime/src/mono/mono/utils/mono-threads.c -index 2ef2fe45b..41dbf3032 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads.c -@@ -1894,7 +1894,7 @@ mono_thread_info_uninstall_interrupt (gboolean *interrupted) - /* Common to uninstall interrupt handler around OS API's affecting last error. */ - /* This method could call OS API's on some platforms that will reset last error so make sure to restore */ - /* last error before exit. */ -- W32_DEFINE_LAST_ERROR_RESTORE_POINT; -+ MONO_DEFINE_LAST_ERROR_RESTORE_POINT; - - g_assert (interrupted); - *interrupted = FALSE; -@@ -1917,7 +1917,7 @@ mono_thread_info_uninstall_interrupt (gboolean *interrupted) - THREADS_INTERRUPT_DEBUG ("interrupt uninstall tid %p previous_token %p interrupted %s\n", - mono_thread_info_get_tid (info), previous_token, *interrupted ? "TRUE" : "FALSE"); - -- W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; -+ MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT; - } - - static MonoThreadInfoInterruptToken* -diff --git a/src/runtime/src/mono/mono/utils/mono-threads.h b/src/runtime/src/mono/mono/utils/mono-threads.h -index 6a548b183..45353db4e 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads.h -+++ b/src/runtime/src/mono/mono/utils/mono-threads.h -@@ -866,19 +866,50 @@ mono_win32_interrupt_wait (PVOID thread_info, HANDLE native_thread_handle, DWORD - void - mono_win32_abort_blocking_io_call (THREAD_INFO_TYPE *info); - --#define W32_DEFINE_LAST_ERROR_RESTORE_POINT \ -+#else -+ -+ -+#endif -+ -+#ifdef USE_WINDOWS_BACKEND -+ -+/* APC calls can change GetLastError while a thread is suspended. Save/restore it when doing thread -+ state transitions (for example in m2n wrappers) in order to protect the result of the last -+ pinvoke */ -+ -+#define MONO_DEFINE_LAST_ERROR_RESTORE_POINT \ - const DWORD _last_error_restore_point = GetLastError (); - --#define W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \ -+#define MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \ - /* Only restore if changed to prevent unnecessary writes. */ \ - if (GetLastError () != _last_error_restore_point) \ - mono_SetLastError (_last_error_restore_point); - -+#elif defined(USE_WASM_BACKEND) || defined (USE_POSIX_BACKEND) -+ -+#define MONO_DEFINE_LAST_ERROR_RESTORE_POINT \ -+ int _last_errno_restore_point = errno; -+ -+#define MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT \ -+ if (errno != _last_errno_restore_point) \ -+ errno = _last_errno_restore_point; -+ -+/* Posix semaphores set errno on failure and sporadic wakeup. GC state transitions are done in n2m -+ * and m2n wrappers and may change the value of errno from the last pinvoke. Use these macros to -+ * save/restore errno when doing thread state transitions. */ -+ -+#elif defined(USE_MACH_BACKEND) -+ -+/* Mach semaphores don't set errno on failure. Change this to be the same as POSIX if some other primitives used -+ in thread state transitions pollute errno. */ -+ -+#define MONO_DEFINE_LAST_ERROR_RESTORE_POINT /* nothing */ -+#define MONO_RESTORE_LAST_ERROR_FROM_RESTORE_POINT /* nothing */ -+ - #else -- --#define W32_DEFINE_LAST_ERROR_RESTORE_POINT /* nothing */ --#define W32_RESTORE_LAST_ERROR_FROM_RESTORE_POINT /* nothing */ -- -+#error "unknown threads backend, not sure how to save/restore last error" - #endif - -+ -+ - #endif /* __MONO_THREADS_H__ */ --- -2.38.4 - diff --git a/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch b/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch index ebd905e..6a5fadd 100644 --- a/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch +++ b/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch @@ -48,25 +48,23 @@ index e04d9e9d364..00e54a25d69 100644 # larger than the initial committed stack size. add_definitions(-DENSURE_PRIMARY_STACK_SIZE) endif() -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index d23b7985802..b5f63fc638c 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt +diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig b/src/runtime/src/mono/mono/mini/CMakeLists.txt +index 5d6ef3d..c3e5414 100644 +--- a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig +++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -378,10 +378,10 @@ if(NOT DISABLE_SHARED_LIBS) - add_library(monosgen-shared SHARED $) - target_compile_definitions(monosgen-objects PRIVATE -DMONO_DLL_EXPORT) +@@ -400,9 +400,9 @@ if(NOT DISABLE_SHARED_LIBS) endif() -- # Alpine Linux implements ucontext in a different library + target_compile_definitions(monosgen-shared PRIVATE -DMONO_DLL_EXPORT) + # Alpine Linux implements ucontext in a different library - if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ # musl-libc implements ucontext in a different library + if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) target_link_libraries(monosgen-shared PRIVATE ucontext) - endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL TARGET_S390X) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) if(MONO_SET_RPATH_ORIGIN) set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") -@@ -560,10 +560,10 @@ if(NOT DISABLE_EXECUTABLES) +@@ -601,10 +601,10 @@ if(NOT DISABLE_EXECUTABLES) target_link_libraries(mono-sgen PRIVATE icu_shim_objects) endif() target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) @@ -80,8 +78,3 @@ index d23b7985802..b5f63fc638c 100644 if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) # if components are built statically, link them into runtime. target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/coreclr/pgosupport.cmake.orig b/src/runtime/src/coreclr/pgosupport.cmake -index 719ac14..34a4278 100644 ---- a/src/runtime/src/coreclr/pgosupport.cmake.orig -+++ b/src/runtime/src/coreclr/pgosupport.cmake - diff --git a/user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch b/user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch new file mode 100644 index 0000000..c72bc6b --- /dev/null +++ b/user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch @@ -0,0 +1,30 @@ +From a73b8bacfcc5819926bc05173ab2f7850eb00da3 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/pull/91008 +From: Ulrich Weigand +Date: Wed, 23 Aug 2023 21:11:37 +0200 +Subject: [PATCH] [mono] Handle enum return type when inlining CreateInstance + +Use underlying base type when deciding how to inline a +CreateInstance invocation in mini_emit_inst_for_method. + +Fixes https://github.com/dotnet/runtime/issues/90292 +(Mono abort causing .NET 8 msbuild regression). +--- + src/mono/mono/mini/intrinsics.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/runtime/src/mono/mono/mini/intrinsics.c b/src/runtime/src/mono/mono/mini/intrinsics.c +index b1e5e76723147..ef77b7dc89f2e 100644 +--- a/src/runtime/src/mono/mono/mini/intrinsics.c ++++ b/src/runtime/src/mono/mono/mini/intrinsics.c +@@ -2079,7 +2079,9 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign + MonoType *t = method_context->method_inst->type_argv [0]; + MonoClass *arg0 = mono_class_from_mono_type_internal (t); + if (m_class_is_valuetype (arg0) && !mono_class_has_default_constructor (arg0, FALSE)) { +- if (m_class_is_primitive (arg0)) { ++ if (m_class_is_primitive (arg0) || m_class_is_enumtype (arg0)) { ++ if (m_class_is_enumtype (arg0)) ++ t = mono_class_enum_basetype_internal (arg0); + int dreg = alloc_dreg (cfg, mini_type_to_stack_type (cfg, t)); + mini_emit_init_rvar (cfg, dreg, t); + ins = cfg->cbb->last_ins; diff --git a/user/dotnet8-stage0/runtime_rename-mono-cmake-host-var.patch b/user/dotnet8-stage0/runtime_rename-mono-cmake-host-var.patch deleted file mode 100644 index 935bf67..0000000 --- a/user/dotnet8-stage0/runtime_rename-mono-cmake-host-var.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index fad619577bf..91a4a545c42 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -943,7 +943,7 @@ else() - set(DISABLE_DLLMAP 1) - endif() - --if(CLR_CMAKE_HOST_ALPINE_LINUX) -+if(CLR_CMAKE_TARGET_LINUX_MUSL) - # Setting RLIMIT_NOFILE breaks debugging of coreclr on Alpine Linux for some reason - add_definitions(-DDONT_SET_RLIMIT_NOFILE) - # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index d23b7985802..da7563ac4d3 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -379,9 +379,9 @@ if(NOT DISABLE_SHARED_LIBS) - target_compile_definitions(monosgen-objects PRIVATE -DMONO_DLL_EXPORT) - endif() - # Alpine Linux implements ucontext in a different library -- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - target_link_libraries(monosgen-shared PRIVATE ucontext) -- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - if(MONO_SET_RPATH_ORIGIN) - set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") -@@ -561,9 +561,9 @@ if(NOT DISABLE_EXECUTABLES) - endif() - target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) - # Alpine Linux implements ucontext in a different library -- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - target_link_libraries(mono-sgen PRIVATE ucontext) -- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") - From 5ab3dafdd18255deed72f2e78cb0bda2a8afc6b7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 27 Nov 2023 10:40:30 -0500 Subject: [PATCH 002/738] user/dotnet8-runtime: upgrade to 8.0.0 --- user/dotnet8-runtime/APKBUILD | 69 +++++++++++-------- user/dotnet8-runtime/README.md | 21 +++--- .../aspire_fix-gitinfo-target.patch | 20 ++++++ ...ime_90251-rename-mono-cmake-host-var.patch | 23 +++---- 4 files changed, 82 insertions(+), 51 deletions(-) create mode 100644 user/dotnet8-runtime/aspire_fix-gitinfo-target.patch diff --git a/user/dotnet8-runtime/APKBUILD b/user/dotnet8-runtime/APKBUILD index f064bc5..247b315 100644 --- a/user/dotnet8-runtime/APKBUILD +++ b/user/dotnet8-runtime/APKBUILD @@ -2,15 +2,16 @@ # Contributor: Antoine Martin (ayakael) pkgname=dotnet8-runtime -pkgver=8.0.0_pre7 -pkgrel=2 -_gittag=v8.0.0-preview.7.23375.6 +pkgver=8.0.0 +pkgrel=0 +_gittag=v8.0.0 _giturl="https://github.com/dotnet/dotnet" -_testtag=e1cc0f181ffd4d755756d30d985513897d592ba4 -_bunnytag=v12 -_stage0ver=8.0.0_pre7-r2 +_testtag=d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0 +_bunnytag=v15 +_stage0ver=8.0.100-r0 _patches=" aspnetcore_portable-build-workaround.patch + aspire_fix-gitinfo-target.patch build_enable-timestamps.patch installer_hard-dereference-tar-gz.patch roslyn-analyzer_disable-apphost.patch @@ -29,8 +30,9 @@ _pkgver_sdk=${pkgver/0./0.10} pkgdesc="The .NET $_pkgver_macro Core runtime" # x86: blocked by https://github.com/dotnet/runtime/issues/77667 # armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# upgrade needed -#arch="all !x86 !armhf" +# riscv64: blocked by https://github.com/dotnet/runtime/issues/84834 +# s390x | ppc64le: mono-based runtime still has issues on musl +arch="all !x86 !armhf !riscv64 !s390x !ppc64le" url=https://dotnet.microsoft.com license="MIT" provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" @@ -203,7 +205,7 @@ build() { ulimit -n 4096 - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken + # Disable use of LTTng as tracing on lttng <=2.13.0 is broken # See https://github.com/dotnet/runtime/issues/57784. if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then export DOTNET_LTTng=0 @@ -236,8 +238,21 @@ build() { riscv64|s390x|ppc64le) local args="$args /p:SourceBuildUseMonoRuntime=true";; esac - # Source-Build now builds using portable RID - local args="$args /p:PortableBuild=true /p:PortableRid=linux-musl-$_dotnet_arch /p:_portableRidOverridden=true" + # Sets TargetRid manually as dotnet cannot be trusted to reliably compute + # the machine's runtime ID between releases. + # shellcheck disable=SC2034 + . /etc/os-release + local VERSION_ID_DOT="${VERSION_ID//[^.]}" + while [ ${#VERSION_ID_DOT} -gt 1 ]; do + local VERSION_ID="${VERSION_ID%.*}" + local VERSION_ID_DOT="${VERSION_ID//[^.]}" + done + local VERSION_ID_DASH="${VERSION_ID//[^_]}" + while [ ${#VERSION_ID_DASH} -ge 1 ]; do + local VERSION_ID="${VERSION_ID%_*}" + local VERSION_ID_DASH="${VERSION_ID//[^_]}" + done + local args="$args /p:TargetRid=$ID.$VERSION_ID-$_dotnet_arch" ./build.sh \ --with-sdk "$_cli_root" \ @@ -252,12 +267,13 @@ check() { local _tests_timeout=1000 # Test suite disable flags # following tests can only work after packaging step - local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane" + local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane managed-symbols-available tools-in-path" # test broken: permission issue on lxc / pipelines - local _disabled_tests="$_disabled_tests createdump-aspnet workload" - # liblttng-ust_sys-sdt.h: no 'NT_STAPSDT' on Alpine's lttng-ust package - # lttng: known issue, see https://github.com/dotnet/runtime/issues/57784 - local _disabled_tests="$_disabled_tests liblttng-ust_sys-sdt.h lttng" + local _disabled_tests="$_disabled_tests createdump-aspnet" + # test broken: cannot pg_ctl can't create postgresql server + local _disabled_tests="$_disabled_tests system-data-odbc" + # test broken: no such file or directory bug + local _disabled_tests="$_disabled_tests limits" # {bundled,system}-libunwind: use system version on all but aarch64/armv7, as broken # see https://github.com/redhat-developer/dotnet-regular-tests/issues/113 # disable on mono-flavored runtime as mono does not use libunwind @@ -266,14 +282,10 @@ check() { s390x|ppc64le|armhf) local _disabled_tests="$_disabled_tests bundled-libunwind system-libunwind";; *) local _disabled_tests="$_disabled_tests bundled-libunwind";; esac - # test unit broken currently - _disabled_tests="$_disabled_tests system-libunwind" # nativeaot is not supported on armv7 case $CARCH in armv7) local _disabled_tests="$_disabled_tests nativeaot" esac - # debugging-via-dotnet-dump hangs - local _disabled_tests="$_disabled_tests debugging-via-dotnet-dump" msg "Unpacking produced dotnet" export DOTNET_ROOT="$_checkdir/release" @@ -295,7 +307,7 @@ check() { fi if [ ! -d "$_checkdir"/turkey ]; then cd "$_checkdir"/Turkey - dotnet publish -bl:"$_logdir"/check/turkey.binlog -f netcoreapp3.1 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey + dotnet publish -bl:"$_logdir"/check/turkey.binlog -f net6.0 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey fi msg "Running test suite" @@ -347,7 +359,7 @@ artifacts() { -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ --no-same-owner \ --exclude '*Intermediate*' \ - --exclude '*linux-musl*' + --exclude '*alpine*' } bootstrap() { @@ -375,7 +387,7 @@ bootstrap() { -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ --no-same-owner \ --wildcards \ - '*linux-musl*' + '*alpine*' # assemble docs find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/docs/. \; @@ -500,17 +512,18 @@ aspnetcore_targeting_pack() { } sha512sums=" -06cb81a5667153a7d6ae190d169dcafea88954d1d42f9f1ae0fffe7cb4787599d7cad5428f66a6ce10af24898bd4ffbe1b9e95f1d3b698641437298055ebd10f dotnet-tarball-v8.0.0-preview.7.23375.6.tar.gz -5598ae0b9044dd2d2b5eba10ce420cd14266bd25412b37e9766bbaf1b1ce79438a5c7db559431aa59c0b49f14187ca3f78a57065b7802df304910b00b6694bfa dotnet-release-v8.0.0-preview.7.23375.6.json -e9f3df13d093fac214778c1137857e065f58d4e0d2a48d540d8ed7bb41e2fd73b2b3f62a0aa5b0e80fa80a5b58ba77ff19b9d10a492802f8539e3a6ed79d299d dotnet-testsuite-e1cc0f181ffd4d755756d30d985513897d592ba4.tar.gz -0028d5d97b814b122d73137b4e0d64ca5d788aa0ae5fde500de722e23522827f2538f06e75acb17cc39b8917961ee78d1f0bbc84b2b624ae0e9bf88adca2ba6f dotnet-bunny-v12.tar.gz +094265462d66d97b51ebfbe5fb06d4a679b97881f1f5a07a87a282a96eeaabfe97ca42061d59aac71dd8861c07f07dda16a72e29ae03167407e51d3fd2767562 dotnet-tarball-v8.0.0.tar.gz +55f2c56f7fbed4137ebe5e81c7b86d199d7ff91c6e19fbc9a4af8cd5d0f0195273356ead8b80aedfff56a3d704a541a7c2a7395bec3fa5d6585f3afd056b1220 dotnet-release-v8.0.0.json +8fe41ddd03c1b98dc9eec5e337ca0dcc8fbeff65b67ac1a383bd7d1e5fd3c21b820dacd498d1c2268445bb634cfb9dba3e8924e71a98f2ccd8221b17fb079044 dotnet-testsuite-d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0.tar.gz +7f59b10878aa90a6953ee4d88d08fa932910a24018dace92b173ee87c847d14734f93dc5fc031982a3d0a5cb4ac223b83d0e548531c23c4e3326dc83510989a9 dotnet-bunny-v15.tar.gz c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in ad7373a112acc07a6a7bbc522d417b26d90b3e3ae9c1e66a6cc70af16af7e7111d9764e7758062d0a5e67f026cc44f2b111051c3d484bd56917f2144db88588b aspnetcore_portable-build-workaround.patch +e5b9b947226456844f705e66f3f19d4519ce88f360e3f3413999c2867c31d9008db78f5806bfee7185d7548c6279ef6492a40ff24c20ed9d58b6ef66b167d7a8 aspire_fix-gitinfo-target.patch eed7a7481a967f6938de956a6df485efa6dd61bf36ae4a768493cb1f7da0296dc91e0f2f89f7c302083ba9cf0c778e28228ec1b52e902077a00072d7d9957ef3 build_enable-timestamps.patch ab362bdbbea8d8116b6bf7bf58e330ce6d7d171b42613ac03514f76afa2574b75d6566148d1b72047fbfe61b40ac67b3f2d8af87a7074c790bf882a5b7e73960 installer_hard-dereference-tar-gz.patch 097db705c787501782a1b203e8c453453075dfcadc4f5282849c6ffdda4d7832f75c56089bced4542cc83704fe33842cc725084dac2ba261cacdaf54ae468b3c roslyn-analyzer_disable-apphost.patch d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -c1e8a51bca47f13e60cb28fa3c58c4bdc0fd8fa19177855b6cc9a767016fc239064aced57530e227c772e302671fc91e86c718a39aecb05eb7f601c8d931de81 runtime_90251-rename-mono-cmake-host-var.patch +3354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch 39e1b848d1ae81e4b81758522de7d3e36b11d2ab626565efb8e4cceae8da29018277709f0af8fcfa75be8da79f8d6432eb6aac49a5e82510c3aca34632df4d8e runtime_enable-system-libunwind.diff 887112eb2b103eadd6887529ebae7f9a75df2c2cb168e84fd40cc09f9bcd20917d428bbba06968b07b0a463890da82b1b2b1d033a3dd016e6494067464ae6f74 runtime_more-clang-16-suppression.patch 0c25319125ef5b0ad490b37a643c0c5257c796d5ed24f9ac404f698710b07de790bcbb0b6336d4a50025b94c3bff99b214951bd8f0a79a8d6f543ebaa300740f runtime_remove-usage-of-off64-t.patch diff --git a/user/dotnet8-runtime/README.md b/user/dotnet8-runtime/README.md index de3edb7..14cde12 100644 --- a/user/dotnet8-runtime/README.md +++ b/user/dotnet8-runtime/README.md @@ -12,6 +12,8 @@ Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/ap * `dotnet8-apphost-pack` (used by dotnet8-runtime) * `dotnet8-hostfxr` (used by dotnet-host) * `dotnet8-runtime` +* `dotnet8-runtime-artifacts` (aimed for internal use as bootstrap) +* `dotnet8-runtime-bootstrap` (aimed for internal use as bootstrap) * `dotnet8-targeting-pack` * `dotnet-host` @@ -30,13 +32,16 @@ In summary, dotnet8 is built using three different aports. * `community/dotnet8-stage0` Builds minimum components for full build of dotnet8, and packages these in an initial -`dotnet8-stage0-bootstrap` package that `dotnet8-build` pulls. -* `community/dotnet8-build` +`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. +* `community/dotnet8-runtime` Builds full and packages dotnet8 fully using either stage0 or previoulsy built dotnet8 build. -* `community/dotnet8-runtime` +* `community/dotnet8-sdk` As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet8-build. +is required to package sdk bits from dotnet8-runtime. dotnet8-runtime only +builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is +released, the updated components are to be built on dotnet8-sdk rather than +simply repackaging dotnet8-runtime artifacts. ## Crossbuilding with `stage0` Crossbuilding `stage0` is a three step process: @@ -73,7 +78,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-build` + - `cd community/dotnet8-runtime` 3. Make your changes. Don't forget to add a changelog. @@ -88,7 +93,7 @@ follow. - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-build: descriptive description'` + - `git commit -m 'community/dotnet8-runtime: descriptive description'` - `git push` 7. Create a merge request with your changes, tagging @ayakael for review. @@ -103,7 +108,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-build` + - `cd community/dotnet8-runtime` 3. Build the new upstream source tarball. Update the versions in the @@ -127,7 +132,7 @@ follow. - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-build: upgrade to ` + - `git commit -m 'community/dotnet8-runtime: upgrade to ` - `git push` 8. Create a merge request with your changes, tagging @ayakael for review. diff --git a/user/dotnet8-runtime/aspire_fix-gitinfo-target.patch b/user/dotnet8-runtime/aspire_fix-gitinfo-target.patch new file mode 100644 index 0000000..7066d02 --- /dev/null +++ b/user/dotnet8-runtime/aspire_fix-gitinfo-target.patch @@ -0,0 +1,20 @@ +diff --git a/src/aspire/Directory.Build.targets.orig b/src/aspire/Directory.Build.targets +index 511adb03a5d..d62a050caab 100644 +--- a/src/aspire/Directory.Build.targets.orig ++++ b/src/aspire/Directory.Build.targets +@@ -6,13 +6,12 @@ + README.md + + +- +- ++ + + + + + + +- ++ + diff --git a/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch b/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch index ebd905e..6a5fadd 100644 --- a/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch +++ b/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch @@ -48,25 +48,23 @@ index e04d9e9d364..00e54a25d69 100644 # larger than the initial committed stack size. add_definitions(-DENSURE_PRIMARY_STACK_SIZE) endif() -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index d23b7985802..b5f63fc638c 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt +diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig b/src/runtime/src/mono/mono/mini/CMakeLists.txt +index 5d6ef3d..c3e5414 100644 +--- a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig +++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -378,10 +378,10 @@ if(NOT DISABLE_SHARED_LIBS) - add_library(monosgen-shared SHARED $) - target_compile_definitions(monosgen-objects PRIVATE -DMONO_DLL_EXPORT) +@@ -400,9 +400,9 @@ if(NOT DISABLE_SHARED_LIBS) endif() -- # Alpine Linux implements ucontext in a different library + target_compile_definitions(monosgen-shared PRIVATE -DMONO_DLL_EXPORT) + # Alpine Linux implements ucontext in a different library - if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ # musl-libc implements ucontext in a different library + if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) target_link_libraries(monosgen-shared PRIVATE ucontext) - endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL TARGET_S390X) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) if(MONO_SET_RPATH_ORIGIN) set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") -@@ -560,10 +560,10 @@ if(NOT DISABLE_EXECUTABLES) +@@ -601,10 +601,10 @@ if(NOT DISABLE_EXECUTABLES) target_link_libraries(mono-sgen PRIVATE icu_shim_objects) endif() target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) @@ -80,8 +78,3 @@ index d23b7985802..b5f63fc638c 100644 if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) # if components are built statically, link them into runtime. target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/coreclr/pgosupport.cmake.orig b/src/runtime/src/coreclr/pgosupport.cmake -index 719ac14..34a4278 100644 ---- a/src/runtime/src/coreclr/pgosupport.cmake.orig -+++ b/src/runtime/src/coreclr/pgosupport.cmake - From 737709d1f5d8fa57d2f94c926af611330e3d045d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 27 Nov 2023 10:40:44 -0500 Subject: [PATCH 003/738] user/dotnet8-sdk: upgrade to 8.0.100 --- user/dotnet8-sdk/APKBUILD | 12 ++++++------ user/dotnet8-sdk/README.md | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/user/dotnet8-sdk/APKBUILD b/user/dotnet8-sdk/APKBUILD index 13d6e0e..c832da8 100644 --- a/user/dotnet8-sdk/APKBUILD +++ b/user/dotnet8-sdk/APKBUILD @@ -2,9 +2,9 @@ # Contributor: Antoine Martin (ayakael) pkgname=dotnet8-sdk -pkgver=8.0.100_pre7 -_bldver=8.0.0_pre7-r2 -pkgrel=2 +pkgver=8.0.100 +_bldver=8.0.0-r0 +pkgrel=0 # Following for dotnet build version 6.0 and up _pkgver_macro=${pkgver%.*} @@ -14,8 +14,9 @@ _bldver_ver=${_bldver_ver/0./0.10} pkgdesc="The .NET $_pkgver_macro SDK" # x86: blocked by https://github.com/dotnet/runtime/issues/77667 # armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# upgrade needed -#arch="all !x86 !armhf" +# riscv64: blocked by https://github.com/dotnet/runtime/issues/84834 +# s390x | ppc64le: mono-based runtime still has issues on musl +arch="all !x86 !armhf !riscv64 !s390x !ppc64le" url=https://dotnet.microsoft.com license="MIT" makedepends="dotnet$_pkgver_name-runtime-bootstrap=$_bldver" @@ -119,7 +120,6 @@ doc() { default_doc pkgdesc="Docs for .NET" - # licenses install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/LICENSE.txt "$subpkgdir"/usr/share/licenses/dotnet/. diff --git a/user/dotnet8-sdk/README.md b/user/dotnet8-sdk/README.md index 1a55eda..26d3107 100644 --- a/user/dotnet8-sdk/README.md +++ b/user/dotnet8-sdk/README.md @@ -7,8 +7,6 @@ Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/ap # Building info ## Generated packages -* `dotnet8-build` (aimed for internal use as bootstrap) -* `dotnet8-build-artifacts` (aimed for internal use as bootstrap) * `dotnet8-sdk` * `dotnet8-templates` (required by sdk) * `dotnet-zsh-completion` @@ -31,13 +29,18 @@ In summary, dotnet8 is built using three different aports. * `community/dotnet8-stage0` Builds minimum components for full build of dotnet8, and packages these in an initial -`dotnet8-stage0-bootstrap` package that `dotnet8-build` pulls. -* `community/dotnet8-build` +`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. +* `community/dotnet8-runtime Builds full and packages dotnet8 fully using either stage0 or previoulsy built dotnet8 build. -* `community/dotnet8-runtime` +* `community/dotnet8-sdk` As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet8-build. +is required to package runtime bits from dotnet8-runtime. dotnet8-runtime only +builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is +released, the updated components are to be built on dotnet8-sdk rather than +simply repackaging dotnet8-runtime artifacts. + + ## Crossbuilding with `stage0` Crossbuilding `stage0` is a three step process: @@ -74,7 +77,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-build` + - `cd community/dotnet8-sdk` 3. Make your changes. Don't forget to add a changelog. @@ -89,7 +92,7 @@ follow. - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-build: descriptive description'` + - `git commit -m 'community/dotnet8-sdk: descriptive description'` - `git push` 7. Create a merge request with your changes, tagging @ayakael for review. @@ -104,7 +107,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-build` + - `cd community/dotnet8-sdk` 3. Build the new upstream source tarball. Update the versions in the @@ -128,7 +131,7 @@ follow. - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-build: upgrade to ` + - `git commit -m 'community/dotnet8-sdk: upgrade to ` - `git push` 8. Create a merge request with your changes, tagging @ayakael for review. From 209fdf2282c1e8fcacb206a6bba03368f4a8a7b9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:02:32 -0500 Subject: [PATCH 004/738] unmaintained/freshrss*: move from user --- {user => unmaintained}/freshrss-auto-refresh/APKBUILD | 0 {user => unmaintained}/freshrss-customcss/APKBUILD | 0 {user => unmaintained}/freshrss-customjs/APKBUILD | 0 {user => unmaintained}/freshrss-fixednavmenu/APKBUILD | 0 {user => unmaintained}/freshrss-imageproxy/APKBUILD | 0 {user => unmaintained}/freshrss-keepfolderstate/APKBUILD | 0 {user => unmaintained}/freshrss-latex/APKBUILD | 0 {user => unmaintained}/freshrss-mobilescrollmenu/APKBUILD | 0 {user => unmaintained}/freshrss-quickcollapse/APKBUILD | 0 {user => unmaintained}/freshrss-readingtime/APKBUILD | 0 {user => unmaintained}/freshrss-redditimage/APKBUILD | 0 {user => unmaintained}/freshrss-sharebyemail/APKBUILD | 0 {user => unmaintained}/freshrss-smartmobilemenu/APKBUILD | 0 {user => unmaintained}/freshrss-threepanesview/APKBUILD | 0 {user => unmaintained}/freshrss-titlewrap/APKBUILD | 0 {user => unmaintained}/freshrss-touchcontrol/APKBUILD | 0 {user => unmaintained}/freshrss-ttrss-api/APKBUILD | 0 {user => unmaintained}/freshrss-wallabag/APKBUILD | 0 {user => unmaintained}/freshrss-youtube/APKBUILD | 0 {user => unmaintained}/freshrss-youtubechannel2rssfeed/APKBUILD | 0 {user => unmaintained}/freshrss/APKBUILD | 0 21 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/freshrss-auto-refresh/APKBUILD (100%) rename {user => unmaintained}/freshrss-customcss/APKBUILD (100%) rename {user => unmaintained}/freshrss-customjs/APKBUILD (100%) rename {user => unmaintained}/freshrss-fixednavmenu/APKBUILD (100%) rename {user => unmaintained}/freshrss-imageproxy/APKBUILD (100%) rename {user => unmaintained}/freshrss-keepfolderstate/APKBUILD (100%) rename {user => unmaintained}/freshrss-latex/APKBUILD (100%) rename {user => unmaintained}/freshrss-mobilescrollmenu/APKBUILD (100%) rename {user => unmaintained}/freshrss-quickcollapse/APKBUILD (100%) rename {user => unmaintained}/freshrss-readingtime/APKBUILD (100%) rename {user => unmaintained}/freshrss-redditimage/APKBUILD (100%) rename {user => unmaintained}/freshrss-sharebyemail/APKBUILD (100%) rename {user => unmaintained}/freshrss-smartmobilemenu/APKBUILD (100%) rename {user => unmaintained}/freshrss-threepanesview/APKBUILD (100%) rename {user => unmaintained}/freshrss-titlewrap/APKBUILD (100%) rename {user => unmaintained}/freshrss-touchcontrol/APKBUILD (100%) rename {user => unmaintained}/freshrss-ttrss-api/APKBUILD (100%) rename {user => unmaintained}/freshrss-wallabag/APKBUILD (100%) rename {user => unmaintained}/freshrss-youtube/APKBUILD (100%) rename {user => unmaintained}/freshrss-youtubechannel2rssfeed/APKBUILD (100%) rename {user => unmaintained}/freshrss/APKBUILD (100%) diff --git a/user/freshrss-auto-refresh/APKBUILD b/unmaintained/freshrss-auto-refresh/APKBUILD similarity index 100% rename from user/freshrss-auto-refresh/APKBUILD rename to unmaintained/freshrss-auto-refresh/APKBUILD diff --git a/user/freshrss-customcss/APKBUILD b/unmaintained/freshrss-customcss/APKBUILD similarity index 100% rename from user/freshrss-customcss/APKBUILD rename to unmaintained/freshrss-customcss/APKBUILD diff --git a/user/freshrss-customjs/APKBUILD b/unmaintained/freshrss-customjs/APKBUILD similarity index 100% rename from user/freshrss-customjs/APKBUILD rename to unmaintained/freshrss-customjs/APKBUILD diff --git a/user/freshrss-fixednavmenu/APKBUILD b/unmaintained/freshrss-fixednavmenu/APKBUILD similarity index 100% rename from user/freshrss-fixednavmenu/APKBUILD rename to unmaintained/freshrss-fixednavmenu/APKBUILD diff --git a/user/freshrss-imageproxy/APKBUILD b/unmaintained/freshrss-imageproxy/APKBUILD similarity index 100% rename from user/freshrss-imageproxy/APKBUILD rename to unmaintained/freshrss-imageproxy/APKBUILD diff --git a/user/freshrss-keepfolderstate/APKBUILD b/unmaintained/freshrss-keepfolderstate/APKBUILD similarity index 100% rename from user/freshrss-keepfolderstate/APKBUILD rename to unmaintained/freshrss-keepfolderstate/APKBUILD diff --git a/user/freshrss-latex/APKBUILD b/unmaintained/freshrss-latex/APKBUILD similarity index 100% rename from user/freshrss-latex/APKBUILD rename to unmaintained/freshrss-latex/APKBUILD diff --git a/user/freshrss-mobilescrollmenu/APKBUILD b/unmaintained/freshrss-mobilescrollmenu/APKBUILD similarity index 100% rename from user/freshrss-mobilescrollmenu/APKBUILD rename to unmaintained/freshrss-mobilescrollmenu/APKBUILD diff --git a/user/freshrss-quickcollapse/APKBUILD b/unmaintained/freshrss-quickcollapse/APKBUILD similarity index 100% rename from user/freshrss-quickcollapse/APKBUILD rename to unmaintained/freshrss-quickcollapse/APKBUILD diff --git a/user/freshrss-readingtime/APKBUILD b/unmaintained/freshrss-readingtime/APKBUILD similarity index 100% rename from user/freshrss-readingtime/APKBUILD rename to unmaintained/freshrss-readingtime/APKBUILD diff --git a/user/freshrss-redditimage/APKBUILD b/unmaintained/freshrss-redditimage/APKBUILD similarity index 100% rename from user/freshrss-redditimage/APKBUILD rename to unmaintained/freshrss-redditimage/APKBUILD diff --git a/user/freshrss-sharebyemail/APKBUILD b/unmaintained/freshrss-sharebyemail/APKBUILD similarity index 100% rename from user/freshrss-sharebyemail/APKBUILD rename to unmaintained/freshrss-sharebyemail/APKBUILD diff --git a/user/freshrss-smartmobilemenu/APKBUILD b/unmaintained/freshrss-smartmobilemenu/APKBUILD similarity index 100% rename from user/freshrss-smartmobilemenu/APKBUILD rename to unmaintained/freshrss-smartmobilemenu/APKBUILD diff --git a/user/freshrss-threepanesview/APKBUILD b/unmaintained/freshrss-threepanesview/APKBUILD similarity index 100% rename from user/freshrss-threepanesview/APKBUILD rename to unmaintained/freshrss-threepanesview/APKBUILD diff --git a/user/freshrss-titlewrap/APKBUILD b/unmaintained/freshrss-titlewrap/APKBUILD similarity index 100% rename from user/freshrss-titlewrap/APKBUILD rename to unmaintained/freshrss-titlewrap/APKBUILD diff --git a/user/freshrss-touchcontrol/APKBUILD b/unmaintained/freshrss-touchcontrol/APKBUILD similarity index 100% rename from user/freshrss-touchcontrol/APKBUILD rename to unmaintained/freshrss-touchcontrol/APKBUILD diff --git a/user/freshrss-ttrss-api/APKBUILD b/unmaintained/freshrss-ttrss-api/APKBUILD similarity index 100% rename from user/freshrss-ttrss-api/APKBUILD rename to unmaintained/freshrss-ttrss-api/APKBUILD diff --git a/user/freshrss-wallabag/APKBUILD b/unmaintained/freshrss-wallabag/APKBUILD similarity index 100% rename from user/freshrss-wallabag/APKBUILD rename to unmaintained/freshrss-wallabag/APKBUILD diff --git a/user/freshrss-youtube/APKBUILD b/unmaintained/freshrss-youtube/APKBUILD similarity index 100% rename from user/freshrss-youtube/APKBUILD rename to unmaintained/freshrss-youtube/APKBUILD diff --git a/user/freshrss-youtubechannel2rssfeed/APKBUILD b/unmaintained/freshrss-youtubechannel2rssfeed/APKBUILD similarity index 100% rename from user/freshrss-youtubechannel2rssfeed/APKBUILD rename to unmaintained/freshrss-youtubechannel2rssfeed/APKBUILD diff --git a/user/freshrss/APKBUILD b/unmaintained/freshrss/APKBUILD similarity index 100% rename from user/freshrss/APKBUILD rename to unmaintained/freshrss/APKBUILD From 9a0cf88fba9e225289f5cdf179168e1615caefac Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:04:17 -0500 Subject: [PATCH 005/738] unmaintained/papermc: move from user --- {user => unmaintained}/papermc/APKBUILD | 0 {user => unmaintained}/papermc/APKBUILD.orig | 0 {user => unmaintained}/papermc/APKBUILD.rej | 0 {user => unmaintained}/papermc/papermc.conf | 0 {user => unmaintained}/papermc/papermc.initd | 0 {user => unmaintained}/papermc/papermc.post-install | 0 {user => unmaintained}/papermc/papermc.service | 0 {user => unmaintained}/papermc/papermc.sh | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/papermc/APKBUILD (100%) rename {user => unmaintained}/papermc/APKBUILD.orig (100%) rename {user => unmaintained}/papermc/APKBUILD.rej (100%) rename {user => unmaintained}/papermc/papermc.conf (100%) rename {user => unmaintained}/papermc/papermc.initd (100%) rename {user => unmaintained}/papermc/papermc.post-install (100%) rename {user => unmaintained}/papermc/papermc.service (100%) rename {user => unmaintained}/papermc/papermc.sh (100%) diff --git a/user/papermc/APKBUILD b/unmaintained/papermc/APKBUILD similarity index 100% rename from user/papermc/APKBUILD rename to unmaintained/papermc/APKBUILD diff --git a/user/papermc/APKBUILD.orig b/unmaintained/papermc/APKBUILD.orig similarity index 100% rename from user/papermc/APKBUILD.orig rename to unmaintained/papermc/APKBUILD.orig diff --git a/user/papermc/APKBUILD.rej b/unmaintained/papermc/APKBUILD.rej similarity index 100% rename from user/papermc/APKBUILD.rej rename to unmaintained/papermc/APKBUILD.rej diff --git a/user/papermc/papermc.conf b/unmaintained/papermc/papermc.conf similarity index 100% rename from user/papermc/papermc.conf rename to unmaintained/papermc/papermc.conf diff --git a/user/papermc/papermc.initd b/unmaintained/papermc/papermc.initd similarity index 100% rename from user/papermc/papermc.initd rename to unmaintained/papermc/papermc.initd diff --git a/user/papermc/papermc.post-install b/unmaintained/papermc/papermc.post-install similarity index 100% rename from user/papermc/papermc.post-install rename to unmaintained/papermc/papermc.post-install diff --git a/user/papermc/papermc.service b/unmaintained/papermc/papermc.service similarity index 100% rename from user/papermc/papermc.service rename to unmaintained/papermc/papermc.service diff --git a/user/papermc/papermc.sh b/unmaintained/papermc/papermc.sh similarity index 100% rename from user/papermc/papermc.sh rename to unmaintained/papermc/papermc.sh From 9d4a64117fd0791239965270f3d1a87736250d80 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:04:31 -0500 Subject: [PATCH 006/738] unmaintained/mumble-web: move from user --- {user => unmaintained}/mumble-web/APKBUILD | 0 {user => unmaintained}/mumble-web/LICENSE | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/mumble-web/APKBUILD (100%) rename {user => unmaintained}/mumble-web/LICENSE (100%) diff --git a/user/mumble-web/APKBUILD b/unmaintained/mumble-web/APKBUILD similarity index 100% rename from user/mumble-web/APKBUILD rename to unmaintained/mumble-web/APKBUILD diff --git a/user/mumble-web/LICENSE b/unmaintained/mumble-web/LICENSE similarity index 100% rename from user/mumble-web/LICENSE rename to unmaintained/mumble-web/LICENSE From a008c21e1287e3f08fe5a5885bda51d36d99e27f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:04:44 -0500 Subject: [PATCH 007/738] unmaintained/grumble: move from user --- {user => unmaintained}/grumble/APKBUILD | 0 {user => unmaintained}/grumble/LICENSE | 0 {user => unmaintained}/grumble/grumble.initd | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/grumble/APKBUILD (100%) rename {user => unmaintained}/grumble/LICENSE (100%) rename {user => unmaintained}/grumble/grumble.initd (100%) diff --git a/user/grumble/APKBUILD b/unmaintained/grumble/APKBUILD similarity index 100% rename from user/grumble/APKBUILD rename to unmaintained/grumble/APKBUILD diff --git a/user/grumble/LICENSE b/unmaintained/grumble/LICENSE similarity index 100% rename from user/grumble/LICENSE rename to unmaintained/grumble/LICENSE diff --git a/user/grumble/grumble.initd b/unmaintained/grumble/grumble.initd similarity index 100% rename from user/grumble/grumble.initd rename to unmaintained/grumble/grumble.initd From 2ab914d26f25edeb818d9a410b734edaefb83e9a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:05:05 -0500 Subject: [PATCH 008/738] unmaintained/craftbukkit-plugin*: move from user --- {user => unmaintained}/craftbukkit-plugin-customtime/APKBUILD | 0 {user => unmaintained}/craftbukkit-plugin-dynmap/APKBUILD | 0 {user => unmaintained}/craftbukkit-plugin-essentialsx/APKBUILD | 0 {user => unmaintained}/craftbukkit-plugin-luckperms/APKBUILD | 0 {user => unmaintained}/craftbukkit-plugin-worldedit/APKBUILD | 0 {user => unmaintained}/craftbukkit-plugin-worldguard/APKBUILD | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/craftbukkit-plugin-customtime/APKBUILD (100%) rename {user => unmaintained}/craftbukkit-plugin-dynmap/APKBUILD (100%) rename {user => unmaintained}/craftbukkit-plugin-essentialsx/APKBUILD (100%) rename {user => unmaintained}/craftbukkit-plugin-luckperms/APKBUILD (100%) rename {user => unmaintained}/craftbukkit-plugin-worldedit/APKBUILD (100%) rename {user => unmaintained}/craftbukkit-plugin-worldguard/APKBUILD (100%) diff --git a/user/craftbukkit-plugin-customtime/APKBUILD b/unmaintained/craftbukkit-plugin-customtime/APKBUILD similarity index 100% rename from user/craftbukkit-plugin-customtime/APKBUILD rename to unmaintained/craftbukkit-plugin-customtime/APKBUILD diff --git a/user/craftbukkit-plugin-dynmap/APKBUILD b/unmaintained/craftbukkit-plugin-dynmap/APKBUILD similarity index 100% rename from user/craftbukkit-plugin-dynmap/APKBUILD rename to unmaintained/craftbukkit-plugin-dynmap/APKBUILD diff --git a/user/craftbukkit-plugin-essentialsx/APKBUILD b/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD similarity index 100% rename from user/craftbukkit-plugin-essentialsx/APKBUILD rename to unmaintained/craftbukkit-plugin-essentialsx/APKBUILD diff --git a/user/craftbukkit-plugin-luckperms/APKBUILD b/unmaintained/craftbukkit-plugin-luckperms/APKBUILD similarity index 100% rename from user/craftbukkit-plugin-luckperms/APKBUILD rename to unmaintained/craftbukkit-plugin-luckperms/APKBUILD diff --git a/user/craftbukkit-plugin-worldedit/APKBUILD b/unmaintained/craftbukkit-plugin-worldedit/APKBUILD similarity index 100% rename from user/craftbukkit-plugin-worldedit/APKBUILD rename to unmaintained/craftbukkit-plugin-worldedit/APKBUILD diff --git a/user/craftbukkit-plugin-worldguard/APKBUILD b/unmaintained/craftbukkit-plugin-worldguard/APKBUILD similarity index 100% rename from user/craftbukkit-plugin-worldguard/APKBUILD rename to unmaintained/craftbukkit-plugin-worldguard/APKBUILD From c5069e73b799d34e3f1bbba5f4f088b8e28c8bd2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:06:49 -0500 Subject: [PATCH 009/738] unmaintained/gconf: move from user --- {user => unmaintained}/gconf/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/gconf/APKBUILD (100%) diff --git a/user/gconf/APKBUILD b/unmaintained/gconf/APKBUILD similarity index 100% rename from user/gconf/APKBUILD rename to unmaintained/gconf/APKBUILD From ae23e477e821bc6d9e6d2a79969a207abed7c227 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 19:55:10 -0500 Subject: [PATCH 010/738] user/rstudio: enable --- user/rstudio-desktop/APKBUILD | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/user/rstudio-desktop/APKBUILD b/user/rstudio-desktop/APKBUILD index 7a07049..0993211 100644 --- a/user/rstudio-desktop/APKBUILD +++ b/user/rstudio-desktop/APKBUILD @@ -7,8 +7,7 @@ _gittag=v2023.03.0+386 _panmirrortag=aea3027882718af657d60221818c3ff35f413219 pkgrel=0 pkgdesc="A powerful and productive integrated development environment (IDE) for R programming language" -# fix later -#arch="x86_64" +arch="x86_64" url="https://www.rstudio.com/products/rstudio/" license='AGPL3' options="!check" # No testsuite From 70fa91ab14ee60f051caa5fac9420a2f93f8b9b1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 20:09:22 -0500 Subject: [PATCH 011/738] user/rmfakecloud: upgrade to 0.0.16 --- user/rmfakecloud/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index df7ce04..d23e626 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.13.2 +pkgver=0.0.16 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" @@ -51,7 +51,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -8b7861a93baa070ef6fed65f14d54cd89c7881052ecc950ff19a1361770337bc496c1d5b4c7a44d146e2a0e1af677b92937b1336e8acd825c4ead3d61799bd59 rmfakecloud-0.0.13.2.tar.gz +f752aaf22b5904523636fe21e8ed99a1d0a279e36e4b16aaa2a4ae0e0fd4531f0e64f035cec56f2141894e18ce05a732e73aba32a731a93fe8c563520dfe1f6e rmfakecloud-0.0.16.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " From a04c921a0ba602c5da6a1eb63a8b7d02f3f299df Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 19:50:01 -0500 Subject: [PATCH 012/738] testing/ikiwki: move from user --- {user => testing}/ikiwiki/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => testing}/ikiwiki/APKBUILD (100%) diff --git a/user/ikiwiki/APKBUILD b/testing/ikiwiki/APKBUILD similarity index 100% rename from user/ikiwiki/APKBUILD rename to testing/ikiwiki/APKBUILD From 3befac4b9afd5959a7229e2db51f329062fbaffa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 18:47:03 -0500 Subject: [PATCH 013/738] user/protobuf: new aport --- user/protobuf/APKBUILD | 168 +++++++++++++++++++++++++ user/protobuf/exclude.patch | 40 ++++++ user/protobuf/protoc-cmake.patch | 27 ++++ user/protobuf/ruby-fix-cflags.patch | 18 +++ user/protobuf/skip-failing-tests.patch | 99 +++++++++++++++ user/protobuf/soversion.patch | 39 ++++++ user/protobuf/trim-rakefile.patch | 79 ++++++++++++ 7 files changed, 470 insertions(+) create mode 100644 user/protobuf/APKBUILD create mode 100644 user/protobuf/exclude.patch create mode 100644 user/protobuf/protoc-cmake.patch create mode 100644 user/protobuf/ruby-fix-cflags.patch create mode 100644 user/protobuf/skip-failing-tests.patch create mode 100644 user/protobuf/soversion.patch create mode 100644 user/protobuf/trim-rakefile.patch diff --git a/user/protobuf/APKBUILD b/user/protobuf/APKBUILD new file mode 100644 index 0000000..12aae5e --- /dev/null +++ b/user/protobuf/APKBUILD @@ -0,0 +1,168 @@ +# Contributor: Sheila Aman +# Maintainer: Natanael Copa +pkgname=protobuf +_gemname=google-protobuf +pkgver=23.4 +_rubyver=3.23.4 +pkgrel=1 +pkgdesc="Library for extensible, efficient structure packing" +url="https://github.com/protocolbuffers/protobuf" +arch="all" +license="BSD-3-Clause" +depends=" + protoc=$pkgver-r$pkgrel + libprotoc=$pkgver-r$pkgrel + libprotobuf=$pkgver-r$pkgrel + libprotobuf-lite=$pkgver-r$pkgrel + " +depends_dev=" + protoc=$pkgver-r$pkgrel + zlib-dev + " +makedepends=" + $depends_dev + abseil-cpp-dev + cmake + ruby3.0 + ruby3.0-dev + ruby3.0-rake + samurai + " +checkdepends="gtest-dev" +subpackages=" + ruby3.0-$_gemname:_ruby + $pkgname-dev + $pkgname-vim::noarch + protoc + libprotoc + libprotobuf + libprotobuf-lite + " + # exclude.patch +source="$pkgname-$pkgver.tar.gz::https://github.com/protocolbuffers/protobuf/archive/refs/tags/v$pkgver.tar.gz + exclude.patch + protoc-cmake.patch + ruby-fix-cflags.patch + skip-failing-tests.patch + soversion.patch + trim-rakefile.patch + " + +# fails some +case "$CARCH" in +armhf) options="$options !check" ;; +esac + +build() { + export CFLAGS="$CFLAGS -DNDEBUG -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -DNDEBUG -O2 -flto=auto -Wno-deprecated-declarations" + + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=ON \ + -Dprotobuf_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \ + -Dprotobuf_BUILD_LIBPROTOC=ON \ + -Dprotobuf_ABSL_PROVIDER="package" \ + -Dprotobuf_ALLOW_CCACHE=ON \ + -Dprotobuf_USE_EXTERNAL_GTEST=ON + cmake --build build + + cd "$builddir"/ruby + + export PATH="$PATH:$builddir/build" + + # Generate proto files for built-in protocols. + rake genproto + + gem build $_gemname.gemspec + gem install --local \ + --install-dir dist \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname +} + +# TODO: Run tests for ruby gem. +check() { + ctest --test-dir build --output-on-failure +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + sed -i \ + -e "/Requires:/s|;| |g" \ + -e "/Requires:/s|::|_|g" \ + "$pkgdir"/usr/lib/pkgconfig/protobuf.pc + + install -Dm644 editors/proto.vim \ + "$pkgdir"/usr/share/vim/vimfiles/syntax/proto.vim + + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + cd ruby/dist + + mkdir -p "$gemdir" + cp -r extensions gems specifications "$gemdir"/ + + # Remove duplicated .so libs (should be only in extensions directory). + find "$gemdir"/gems/ -name "*.so" -delete + + # Remove unnecessary files. + cd "$gemdir"/gems/$_gemname-$_rubyver + rm -r ext/ +} + +_ruby() { + depends="" + pkgdesc="Ruby bindings to Google's data interchange format" + + amove usr/lib/ruby/gems +} + +vim() { + pkgdesc="Vim syntax for $pkgname" + depends="" + install_if="$pkgname=$pkgver-r$pkgrel vim" + + amove usr/share/vim/vimfiles/syntax/proto.vim +} + +libprotoc() { + depends="" + pkgdesc="Runtime library for Protocol Buffer compiler" + + amove usr/lib/libprotoc.so.* +} + +protoc() { + depends="" + pkgdesc="Protocol buffer compiler binary and library" + + amove usr/bin/protoc* +} + +libprotobuf() { + depends="" + pkgdesc="Runtime library for C++ users of protocol buffers" + + amove usr/lib/libprotobuf.so.* +} + +lite() { + depends="" + pkgdesc="Runtime library for C++ users with 'lite runtime' setting of protocol buffers" + + amove usr/lib/libprotobuf-lite.so.* +} + +sha512sums=" +b93a4e0339ecbe085796de5b6c61feae35229d40db9019c043090bcaa483a1cce78a99487c5638482c68832fcede5579a0e5ec731221a88359b80db9bb6dc566 protobuf-23.4.tar.gz +0d46d105a0670ab5cfcb04ed534927a71613234a88efede0b20d426e1caaa708e6ff275a09c5dab7786fe26e69e0882f022b893302e4869006b4ac55fc6172e5 exclude.patch +16b8ee0e50dbb2144ddb83654a63e410b4218e667b6b8b77c7b6f9797508f63c3e8be0f9711841bb6ebbed0883cda2394b219a62b468240f65f4dac418b5a56e protoc-cmake.patch +0cb202a6151ae3746c09e85f2e4ce9abb0d810d4a3c84cb647fde407cf8d13894d3c9b340e06d7a3a85669da1899db265d26d8309d59249f841a40a66e045c83 ruby-fix-cflags.patch +b5070f8e150920c316130ba40f46c66eefddc634844f5d6b8ee11f6824a3707b3e74f68aa0612c16305bf096050214c6120e693225e07e0cea80e68a7830f863 skip-failing-tests.patch +850dc1d6fd3ea01f1689fd700ac35e7da0882092ab34c616702e01bdf4b5327b8ab27381ecf291431a94f54c89d31707a4a171929937e880543974cb64f9e685 soversion.patch +13514a456a50d7243baa23fe43586fc4544cda87b9e2a5afe9d2fac8afca8e8853f9b42232c3fff4c5cf2df443af32f944f451daa1d604d80fd03ee4e7abed3e trim-rakefile.patch +" diff --git a/user/protobuf/exclude.patch b/user/protobuf/exclude.patch new file mode 100644 index 0000000..9c63c0a --- /dev/null +++ b/user/protobuf/exclude.patch @@ -0,0 +1,40 @@ +don't install the utf8_range lib into disk. +also remove it from .pc/cmake, it's statically linked into protobuf and never needed on disk after +-- +diff --git a/cmake/install.cmake b/cmake/install.cmake +index e7eb210..73e1897 100644 +--- a/cmake/install.cmake ++++ b/cmake/install.cmake +@@ -4,7 +4,6 @@ foreach(_target IN LISTS protobuf_ABSL_USED_TARGETS) + string(REPLACE :: _ _modified_target ${_target}) + list(APPEND _pc_targets ${_modified_target}) + endforeach() +-list(APPEND _pc_targets "utf8_range") + + set(_protobuf_PC_REQUIRES "") + set(_sep "") +diff --git a/cmake/protobuf-config.cmake.in b/cmake/protobuf-config.cmake.in +index 44805c7..1a8d243 100644 +--- a/cmake/protobuf-config.cmake.in ++++ b/cmake/protobuf-config.cmake.in +@@ -4,7 +4,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake") + # Depend packages + @_protobuf_FIND_ZLIB@ + @_protobuf_FIND_ABSL@ +-@_protobuf_FIND_UTF8_RANGE@ + + # Imported targets + include("${CMAKE_CURRENT_LIST_DIR}/protobuf-targets.cmake") +diff --git a/cmake/utf8_range.cmake b/cmake/utf8_range.cmake +index f411a8c..770f94c 100644 +--- a/cmake/utf8_range.cmake ++++ b/cmake/utf8_range.cmake +@@ -8,7 +8,7 @@ if (NOT TARGET utf8_range) + endif() + + set(utf8_range_ENABLE_INSTALL ${protobuf_INSTALL} CACHE BOOL "Set install") +- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range) ++ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range EXCLUDE_FROM_ALL) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range) + endif () + diff --git a/user/protobuf/protoc-cmake.patch b/user/protobuf/protoc-cmake.patch new file mode 100644 index 0000000..4c1ae7a --- /dev/null +++ b/user/protobuf/protoc-cmake.patch @@ -0,0 +1,27 @@ +Patch-Source: https://github.com/protocolbuffers/protobuf/pull/13206 +-- +From 2e62ef1eaa2e712afc5f87aa2c55d478fe96230d Mon Sep 17 00:00:00 2001 +From: Antonio Rojas +Date: Wed, 5 Jul 2023 13:03:11 +0200 +Subject: [PATCH] Handle BUILD_TYPE=None in protobuf-module.cmake + +Fixes Protobuf_PROTOC_EXECUTABLE being undefined in that case. +--- + cmake/protobuf-module.cmake.in | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/cmake/protobuf-module.cmake.in b/cmake/protobuf-module.cmake.in +index 0bb05e38fad..e5b2b2e4b3a 100644 +--- a/cmake/protobuf-module.cmake.in ++++ b/cmake/protobuf-module.cmake.in +@@ -153,6 +153,10 @@ if(NOT Protobuf_PROTOC_EXECUTABLE AND TARGET protobuf::protoc) + get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc + IMPORTED_LOCATION_NOCONFIG) + endif() ++ if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") ++ get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc ++ IMPORTED_LOCATION_NONE) ++ endif() + endif() + + # Version info variable diff --git a/user/protobuf/ruby-fix-cflags.patch b/user/protobuf/ruby-fix-cflags.patch new file mode 100644 index 0000000..24b1d57 --- /dev/null +++ b/user/protobuf/ruby-fix-cflags.patch @@ -0,0 +1,18 @@ +Using builder flags + +diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb +index b7c439b..0bbc15c 100755 +--- a/ruby/ext/google/protobuf_c/extconf.rb ++++ b/ruby/ext/google/protobuf_c/extconf.rb +@@ -7,9 +7,9 @@ ext_name = "google/protobuf_c" + dir_config(ext_name) + + if RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/ || RUBY_PLATFORM =~ /freebsd/ +- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" ++ $CFLAGS += " -std=gnu99 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" + else +- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG" ++ $CFLAGS += " -std=gnu99 -DNDEBUG" + end + + if RUBY_PLATFORM =~ /linux/ diff --git a/user/protobuf/skip-failing-tests.patch b/user/protobuf/skip-failing-tests.patch new file mode 100644 index 0000000..be0c71b --- /dev/null +++ b/user/protobuf/skip-failing-tests.patch @@ -0,0 +1,99 @@ +diff --git a/src/google/protobuf/any_test.cc b/src/google/protobuf/any_test.cc +index 8b544d9..0f27dbe 100644 +--- a/src/google/protobuf/any_test.cc ++++ b/src/google/protobuf/any_test.cc +@@ -62,13 +62,6 @@ TEST(AnyTest, TestPackAndUnpack) { + EXPECT_EQ(12345, submessage.int32_value()); + } + +-TEST(AnyTest, TestPackFromSerializationExceedsSizeLimit) { +- protobuf_unittest::TestAny submessage; +- submessage.mutable_text()->resize(INT_MAX, 'a'); +- protobuf_unittest::TestAny message; +- EXPECT_FALSE(message.mutable_any_value()->PackFrom(submessage)); +-} +- + TEST(AnyTest, TestUnpackWithTypeMismatch) { + protobuf_unittest::TestAny payload; + payload.set_int32_value(13); +diff --git a/src/google/protobuf/arena_unittest.cc b/src/google/protobuf/arena_unittest.cc +index 4832cff..aa45a25 100644 +--- a/src/google/protobuf/arena_unittest.cc ++++ b/src/google/protobuf/arena_unittest.cc +@@ -1392,11 +1392,11 @@ TEST(ArenaTest, SpaceAllocated_and_Used) { + options.initial_block_size = arena_block.size(); + Arena arena_2(options); + EXPECT_EQ(1024, arena_2.SpaceAllocated()); +- EXPECT_EQ(0, arena_2.SpaceUsed()); ++// EXPECT_EQ(0, arena_2.SpaceUsed()); + EXPECT_EQ(1024, arena_2.Reset()); + Arena::CreateArray(&arena_2, 55); + EXPECT_EQ(1024, arena_2.SpaceAllocated()); +- EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); ++// EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); + EXPECT_EQ(1024, arena_2.Reset()); + } + +@@ -1460,11 +1460,11 @@ TEST(ArenaTest, BlockSizeSmallerThanAllocation) { + + *Arena::Create(&arena) = 42; + EXPECT_GE(arena.SpaceAllocated(), 8); +- EXPECT_EQ(8, arena.SpaceUsed()); ++// EXPECT_EQ(8, arena.SpaceUsed()); + + *Arena::Create(&arena) = 42; + EXPECT_GE(arena.SpaceAllocated(), 16); +- EXPECT_EQ(16, arena.SpaceUsed()); ++// EXPECT_EQ(16, arena.SpaceUsed()); + } + } + +diff --git a/src/google/protobuf/extension_set_unittest.cc b/src/google/protobuf/extension_set_unittest.cc +index ccd1c9b..f420da3 100644 +--- a/src/google/protobuf/extension_set_unittest.cc ++++ b/src/google/protobuf/extension_set_unittest.cc +@@ -871,17 +871,17 @@ TEST(ExtensionSetTest, SpaceUsedExcludingSelf) { + } while (0) + + TEST_REPEATED_EXTENSIONS_SPACE_USED(int32, int32_t, 101); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); + TEST_REPEATED_EXTENSIONS_SPACE_USED(uint32, uint32_t, 103); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); + TEST_REPEATED_EXTENSIONS_SPACE_USED(sint32, int32_t, 105); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); + TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed32, uint32_t, 107); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); + TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed32, int32_t, 109); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); + TEST_REPEATED_EXTENSIONS_SPACE_USED(float, float, 111); +- TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); ++ //TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); + TEST_REPEATED_EXTENSIONS_SPACE_USED(bool, bool, true); + TEST_REPEATED_EXTENSIONS_SPACE_USED(nested_enum, int, + unittest::TestAllTypes::FOO); +diff --git a/src/google/protobuf/wire_format_unittest.inc b/src/google/protobuf/wire_format_unittest.inc +index 4c7d047..7906cfa 100644 +--- a/src/google/protobuf/wire_format_unittest.inc ++++ b/src/google/protobuf/wire_format_unittest.inc +@@ -1537,6 +1537,7 @@ TEST_F(Utf8ValidationTest, ParseRepeatedString) { + + // Test the old VerifyUTF8String() function, which may still be called by old + // generated code. ++#if 0 + TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { + std::string data(kInvalidUTF8String); + +@@ -1555,7 +1556,7 @@ TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { + WireFormat::SERIALIZE); + } + } +- ++#endif + + TEST(RepeatedVarint, Int32) { + RepeatedField v; diff --git a/user/protobuf/soversion.patch b/user/protobuf/soversion.patch new file mode 100644 index 0000000..25d6959 --- /dev/null +++ b/user/protobuf/soversion.patch @@ -0,0 +1,39 @@ +Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/protobuf/-/blob/e93df92fead2d46cc2825a866af3f402d498439c/soversion.patch +use an soversion that actually makes sense and not just the full pkgver +-- +diff --git a/cmake/libprotobuf-lite.cmake b/cmake/libprotobuf-lite.cmake +index 9b1de677b4f..276c99c489e 100644 +--- a/cmake/libprotobuf-lite.cmake ++++ b/cmake/libprotobuf-lite.cmake +@@ -30,6 +30,7 @@ if(protobuf_BUILD_SHARED_LIBS) + endif() + set_target_properties(libprotobuf-lite PROPERTIES + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protobuf-lite + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotobuf-lite ALIAS libprotobuf-lite) +diff --git a/cmake/libprotobuf.cmake b/cmake/libprotobuf.cmake +index aa3efc9a68a..0f34d20b97d 100644 +--- a/cmake/libprotobuf.cmake ++++ b/cmake/libprotobuf.cmake +@@ -33,6 +33,7 @@ if(protobuf_BUILD_SHARED_LIBS) + endif() + set_target_properties(libprotobuf PROPERTIES + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protobuf + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotobuf ALIAS libprotobuf) +diff --git a/cmake/libprotoc.cmake b/cmake/libprotoc.cmake +index 72b4a1abb92..91e8bbeb04e 100644 +--- a/cmake/libprotoc.cmake ++++ b/cmake/libprotoc.cmake +@@ -24,6 +24,7 @@ endif() + set_target_properties(libprotoc PROPERTIES + COMPILE_DEFINITIONS LIBPROTOC_EXPORTS + VERSION ${protobuf_VERSION} ++ SOVERSION ${protobuf_VERSION_MINOR} + OUTPUT_NAME ${LIB_PREFIX}protoc + DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") + add_library(protobuf::libprotoc ALIAS libprotoc) diff --git a/user/protobuf/trim-rakefile.patch b/user/protobuf/trim-rakefile.patch new file mode 100644 index 0000000..d8a3b87 --- /dev/null +++ b/user/protobuf/trim-rakefile.patch @@ -0,0 +1,79 @@ +diff --git a/ruby/Rakefile b/ruby/Rakefile +index c05e115..20144b7 100644 +--- a/ruby/Rakefile ++++ b/ruby/Rakefile +@@ -1,6 +1,4 @@ + require "rubygems" +-require "rubygems/package_task" +-require "rake/extensiontask" unless RUBY_PLATFORM == "java" + require "rake/testtask" + + spec = Gem::Specification.load("google-protobuf.gemspec") +@@ -95,57 +93,6 @@ else + FileUtils.cp(utf8_root+"/range2-neon.c", "ext/google/protobuf_c") + FileUtils.cp(utf8_root+"/range2-sse.c", "ext/google/protobuf_c") + end +- +- Rake::ExtensionTask.new("protobuf_c", spec) do |ext| +- unless RUBY_PLATFORM =~ /darwin/ +- # TODO: also set "no_native to true" for mac if possible. As is, +- # "no_native" can only be set if the RUBY_PLATFORM doing +- # cross-compilation is contained in the "ext.cross_platform" array. +- ext.no_native = true +- end +- ext.ext_dir = "ext/google/protobuf_c" +- ext.lib_dir = "lib/google" +- ext.cross_compile = true +- ext.cross_platform = [ +- 'x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', +- 'x86_64-linux', 'x86-linux', +- 'x86_64-darwin', 'arm64-darwin', +- ] +- end +- +- task 'gem:java' do +- sh "rm Gemfile.lock" +- require 'rake_compiler_dock' +- # Specify the repo root as the working and mount directory to provide access +- # to the java directory +- repo_root = File.realdirpath File.join(Dir.pwd, '..') +- RakeCompilerDock.sh <<-"EOT", platform: 'jruby', rubyvm: :jruby, mountdir: repo_root, workdir: repo_root +- sudo apt-get install maven -y && \ +- cd java && mvn install -Dmaven.test.skip=true && cd ../ruby && \ +- bundle && \ +- IN_DOCKER=true rake compile gem +- EOT +- end +- +- task 'gem:windows' do +- sh "rm Gemfile.lock" +- require 'rake_compiler_dock' +- ['x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', 'x86_64-linux', 'x86-linux'].each do |plat| +- RakeCompilerDock.sh <<-"EOT", platform: plat +- bundle && \ +- IN_DOCKER=true rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0 +- EOT +- end +- end +- +- if RUBY_PLATFORM =~ /darwin/ +- task 'gem:native' do +- system "rake genproto" +- system "rake cross native gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0" +- end +- else +- task 'gem:native' => [:genproto, 'gem:windows', 'gem:java'] +- end + end + + task :genproto => genproto_output +@@ -154,9 +101,6 @@ task :clean do + sh "rm -f #{genproto_output.join(' ')}" + end + +-Gem::PackageTask.new(spec) do |pkg| +-end +- + # Skip build/genproto in Bazel builds, where we expect this to + # be done already. + Rake::TestTask.new(:test => ENV['BAZEL'] == 'true' ? [] : [:build, :genproto]) do |t| From 92ad6ea5a6358ba60e40b0fb39c8eabd4f53a73e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 18:47:28 -0500 Subject: [PATCH 014/738] user/grpc: upgrade to 1.58.0 --- user/grpc/APKBUILD | 94 ++++++++++--------- user/grpc/find-dependency.patch | 13 +++ user/grpc/fix-compiler-error.patch | 23 ----- .../grpc/makefile-add-wrap-memcpy-flags.patch | 15 --- user/grpc/makefile-use-system-abseil.patch | 12 +-- ...invalid-implicit-absl-string_view-nu.patch | 45 --------- user/grpc/ruby-dont-strip-library.patch | 30 ------ user/grpc/ruby-use-shared-libs.patch | 64 +++++++++---- 8 files changed, 113 insertions(+), 183 deletions(-) create mode 100644 user/grpc/find-dependency.patch delete mode 100644 user/grpc/fix-compiler-error.patch delete mode 100644 user/grpc/makefile-add-wrap-memcpy-flags.patch delete mode 100644 user/grpc/minimal-fix-for-invalid-implicit-absl-string_view-nu.patch delete mode 100644 user/grpc/ruby-dont-strip-library.patch diff --git a/user/grpc/APKBUILD b/user/grpc/APKBUILD index 49b11db..4e69d21 100644 --- a/user/grpc/APKBUILD +++ b/user/grpc/APKBUILD @@ -1,16 +1,12 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) # Contributor: Keith Maxwell # Contributor: wener - +# Maintainer: wener pkgname=grpc -# This version is used in gitlab-foss 15.2.2. -pkgver=1.42.0 -pkgrel=3 +pkgver=1.58.0 +pkgrel=0 pkgdesc="The C based gRPC" url="https://grpc.io/" -# will fix later -#arch="all" +arch="all" # BSD-3-Clause: third_party/upb, third_party/address_sorting # MIT: third_party/upb/third_party/utf8_range license="Apache-2.0 AND BSD-3-Clause AND MIT" @@ -24,23 +20,22 @@ _pythondepends=" python3-dev py3-setuptools " -# XXX: should also depend on ruby-google-protobuf=3.18 _rubydepends=" $pkgname=$pkgver-r$pkgrel - ruby3.0-etc + ruby3.0-google-protobuf>=3.19 " makedepends=" - abseil-cpp abseil-cpp-dev autoconf automake + benchmark-dev c-ares-dev chrpath cmake libstdc++ libtool linux-headers - openssl-dev + openssl-dev>3 protobuf-dev re2-dev ruby3.0-dev @@ -57,22 +52,29 @@ subpackages=" $pkgname-cpp $pkgname-plugins $pkgname-doc + py3-grpcio-pyc + py3-grpcio:grpcio ruby3.0-grpc:_ruby + libaddress_sorting:lib + libgpr:lib + libgrpc:lib + libgrpc_authorization_provider:lib + libgrpc_unsecure:lib + libupb:lib " _googletest_rev=0e402173c97aea7a00749e825b194bfede4f2e45 + +# ruby-dont-strip-library.patch: abuild will dot the strip source="https://github.com/grpc/grpc/archive/v$pkgver/grpc-v$pkgver.tar.gz googletest-$_googletest_rev.tar.gz::https://github.com/google/googletest/archive/$_googletest_rev.tar.gz - fix-compiler-error.patch - minimal-fix-for-invalid-implicit-absl-string_view-nu.patch 01-chttp2-maybe-uninitialized.patch - ruby-use-shared-libs.patch - ruby-dont-strip-library.patch + find-dependency.patch ruby-fix-protoc-path.patch + ruby-use-shared-libs.patch ruby-use-system-certs.patch makefile-use-system-abseil.patch - makefile-add-wrap-memcpy-flags.patch " -options="!check" # sometimes hang indefinitely on builders +options="net !check" # sometimes hang indefinitely on builders prepare() { rm -r third_party/googletest @@ -109,11 +111,11 @@ prepare() { } build() { - cmake -B _build \ - -DCMAKE_BUILD_TYPE=MinSizeRel \ + export CFLAGS="$CFLAGS -flto=auto -DNDEBUG -O2" + export CXXFLAGS="$CXXFLAGS -flto=auto -DNDEBUG -O2" + cmake -B _build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -w" \ - -DCMAKE_C_FLAGS="$CFLAGS -w" \ -DCMAKE_CXX_STANDARD=17 \ -DBUILD_SHARED_LIBS=True \ -DgRPC_INSTALL=ON \ @@ -122,25 +124,24 @@ build() { -DgRPC_SSL_PROVIDER=package \ -DgRPC_ZLIB_PROVIDER=package \ -DgRPC_ABSL_PROVIDER=package \ + -DgRPC_BENCHMARK_PROVIDER=package \ -DgRPC_RE2_PROVIDER=package \ -DgRPC_BACKWARDS_COMPATIBILITY_MODE=OFF \ - -DgRPC_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \ - -G Ninja + -DgRPC_BUILD_TESTS="$(want_check && echo ON || echo OFF)" cmake --build _build - # XXX: Fails to build and I don't need it here, so screw it. - #GRPC_PYTHON_CFLAGS="-std=c++17" \ - #GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 \ - #GRPC_PYTHON_BUILD_SYSTEM_CARES=1 \ - #GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ - #GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 \ - #GRPC_PYTHON_BUILD_SYSTEM_RE2=1 \ - #GRPC_PYTHON_BUILD_SYSTEM_ABSL=1 \ - #python3 setup.py build + GRPC_PYTHON_CFLAGS="-std=c++17" \ + GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 \ + GRPC_PYTHON_BUILD_SYSTEM_CARES=1 \ + GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ + GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 \ + GRPC_PYTHON_BUILD_SYSTEM_RE2=1 \ + GRPC_PYTHON_BUILD_SYSTEM_ABSL=1 \ + python3 setup.py build # grpcio-tools - #cd tools/distrib/python - #python3 make_grpcio_tools.py + cd tools/distrib/python + python3 make_grpcio_tools.py cd "$builddir" gem build grpc.gemspec @@ -174,6 +175,7 @@ check() { package() { DESTDIR="$pkgdir" cmake --install _build + python3 setup.py install --skip-build --root="$pkgdir" cd doc find ./ -type f -print -exec install -Dm644 {} "$pkgdir"/usr/share/doc/grpc/{} \; @@ -213,8 +215,8 @@ cli() { grpcio() { pkgdesc="gRPC Python HTTP/2-based RPC framework" depends="py3-six" - cd "$builddir" - python3 setup.py install --skip-build --prefix=/usr --root="$subpkgdir" + + amove usr/lib/python3* } _ruby() { @@ -250,16 +252,20 @@ _ruby() { spec/ } +lib() { + pkgdesc="$pkgdesc ($subpkgname library)" + depends="$pkgname=$pkgver-r$pkgrel" + + amove usr/lib/$subpkgname.so.* +} + sha512sums=" -39f37a41d1df6015dc36344f1b5e634be7f0edbc99723de73de8b81cdab6aa3e09cef6b3c6c9ecb2c9c9db9b8454474b2ac7fbe49fe23d17a6c78f999b459ce5 grpc-v1.42.0.tar.gz +fb2fd211a22dd777cf4df39a9dd72e5c8014f1546a89d3910b006503aac80a74d5797705e02911e9c07316ed973f71110b94cc0e86225f648d4ff91773748a43 grpc-v1.58.0.tar.gz 5c5eaf6ff9f3c1bca025b7ef0234ba97232ba85b43e6354a92f49b7208f5c47581ebaf18bf58618498e5d264f2620c2b6676e81bb0f7df77112b96ba271ececf googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz -ce7b72169b22e6e92f31b74cacf6edf6395aeb7c70fd42d7e9eaa188395b4e6e4b3acad5edfbe75c8304b049049cee76ce5ceaaeed824bffb7defc103ef23580 fix-compiler-error.patch -95a88beb681616a9d793c3118c8e25473d9a8cb29733db38edc8b7af205ffea964dc27dc48d268f735f27fee84782be3eda0b7f398c2e568116e679febe563b7 minimal-fix-for-invalid-implicit-absl-string_view-nu.patch 7fa146ce86ddd4f160bb1ca9ff01cb7aca6b2b8c9aa50e4fa6b84504b9117b104be0d1e31ccb452d846549dfe1e9012ceccfcdc1f2357ed567621d71fb8b08c5 01-chttp2-maybe-uninitialized.patch -0bf65cca05b6d41c8259a5a59573e16a3f40913aa1c1a185b7dcd295d4ae7f1cedbbd465fcff33d6f8d8ee8735a77f744708a097a32a4598b9bfc4ecaf9414df ruby-use-shared-libs.patch -0a2560d22df71abbeea33a37f0cb42a811b244af25284d7fb564cb8ea0b944d23acf6601413bdb2613bcb87011340334489f1b40ab2f9024db013adde0d094e8 ruby-dont-strip-library.patch +6702e39c6a3c065fe4ff5ae48898057135c09bf6851e35fc958cf95ee5d77e9dd34e8c34d978efe60682384e46c4c4b2e51156d546b06a0eb1feed89adcc024b find-dependency.patch 4ea72d2acd8bee9c9022a4412aa0af0477faca7b0810d14decb3ad5d4da044247f51189512323bfee855b9b260a7f82b812310391451e5d8ee718297800d7a73 ruby-fix-protoc-path.patch +7123bf1bbc48ceb303ce1e9820ea45a06dabd25e20e3c1c116ef68e629e80f229cf20314c415d74f0c5c1725f23a00b446656e0cffba3dcd3cc766ae29d8fb2f ruby-use-shared-libs.patch 631af4b9ac29c1ebabb2c88394ea2993e36cec1beda38195e1587dbd9d3c8c9eef75a17d2326d3cd2e682de551401216075ba08fdc501c098b8092d718ded381 ruby-use-system-certs.patch -3c7e8e9a6c6009278569dccdf3e79fabdb266336b894a7fe65f2a57d3cfbef72364c331ec46d9e3a05bb0deaeb841194a39d6f77d98f9e9ce609de0636f675bd makefile-use-system-abseil.patch -66b709cd1fb291ab140ec87e584db13d15c308c0ea9f2ee0fa10ddb00cf33641f559235b1445137ff071dfbda9d7279bd482411fbf2f33dacbc5b14cd7f9ffa5 makefile-add-wrap-memcpy-flags.patch +89e260934da83eb45fa6b73884cba1b1c30f99c0eb883a726e2d36ee4788246f4c6fa1b201077038af956bcb58e625f83bedba4f186c711785ec240373ce4fc5 makefile-use-system-abseil.patch " diff --git a/user/grpc/find-dependency.patch b/user/grpc/find-dependency.patch new file mode 100644 index 0000000..f846e16 --- /dev/null +++ b/user/grpc/find-dependency.patch @@ -0,0 +1,13 @@ +without this find_dependency() doesn't exist +-- +diff --git a/cmake/gRPCConfig.cmake.in b/cmake/gRPCConfig.cmake.in +index 98d8c6d..5500ca2 100644 +--- a/cmake/gRPCConfig.cmake.in ++++ b/cmake/gRPCConfig.cmake.in +@@ -1,5 +1,6 @@ + # Module path + list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules) ++include(CMakeFindDependencyMacro) + + # Depend packages + @_gRPC_FIND_ZLIB@ diff --git a/user/grpc/fix-compiler-error.patch b/user/grpc/fix-compiler-error.patch deleted file mode 100644 index 2023cee..0000000 --- a/user/grpc/fix-compiler-error.patch +++ /dev/null @@ -1,23 +0,0 @@ -Patch-Source: https://github.com/grpc/grpc/pull/28196 --- -From 3991a4c0bcf57e5058a93c4c8255cc80cd0482ca Mon Sep 17 00:00:00 2001 -From: Runming Wu -Date: Tue, 23 Nov 2021 12:10:43 -0800 -Subject: [PATCH] Fix compiler error for certain gcc version. - ---- - src/core/ext/xds/xds_api.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/core/ext/xds/xds_api.h b/src/core/ext/xds/xds_api.h -index 643febdf2203..f25a21f8f831 100644 ---- a/src/core/ext/xds/xds_api.h -+++ b/src/core/ext/xds/xds_api.h -@@ -55,6 +55,7 @@ class XdsApi { - static const char* kEdsTypeUrl; - - struct Duration { -+ Duration() {} - int64_t seconds = 0; - int32_t nanos = 0; - bool operator==(const Duration& other) const { diff --git a/user/grpc/makefile-add-wrap-memcpy-flags.patch b/user/grpc/makefile-add-wrap-memcpy-flags.patch deleted file mode 100644 index 3cc8bba..0000000 --- a/user/grpc/makefile-add-wrap-memcpy-flags.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/Makefile b/Makefile -index 6c9f22d..6f21708 100644 ---- a/Makefile -+++ b/Makefile -@@ -1672,7 +1672,7 @@ $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE): $(LIBGRPC_ - ifeq ($(SYSTEM),Darwin) - $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -install_name $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) -dynamiclib -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(RE2_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) - else -- $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc.so.20 -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(RE2_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) -+ $(Q) $(LDXX) $(LDFLAGS) -L$(LIBDIR)/$(CONFIG) -shared -Wl,-soname,libgrpc.so.20 -Wl,-wrap,memcpy -o $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBGRPC_OBJS) $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libaddress_sorting.a $(OPENSSL_MERGE_LIBS) $(LDLIBS_SECURE) $(ZLIB_MERGE_LIBS) $(CARES_MERGE_LIBS) $(ADDRESS_SORTING_MERGE_LIBS) $(RE2_MERGE_LIBS) $(UPB_MERGE_LIBS) $(GRPC_ABSEIL_MERGE_LIBS) $(LDLIBS) - $(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).so.20 - $(Q) ln -sf $(SHARED_PREFIX)grpc$(SHARED_VERSION_CORE).$(SHARED_EXT_CORE) $(LIBDIR)/$(CONFIG)/libgrpc$(SHARED_VERSION_CORE).so - endif - - diff --git a/user/grpc/makefile-use-system-abseil.patch b/user/grpc/makefile-use-system-abseil.patch index e551f00..ac4f9fc 100644 --- a/user/grpc/makefile-use-system-abseil.patch +++ b/user/grpc/makefile-use-system-abseil.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -576,8 +576,8 @@ +@@ -575,8 +575,8 @@ # Setup abseil dependency @@ -8,15 +8,15 @@ -GRPC_ABSEIL_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a +GRPC_ABSEIL_DEP = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal +GRPC_ABSEIL_MERGE_LIBS = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal - ifeq ($(HOST_IS_X86_64),true) - ABSL_RANDOM_HWAES_FLAGS = -maes - else -@@ -2675,7 +2675,7 @@ + + # Setup re2 dependency + +@@ -2809,7 +2809,7 @@ third_party/abseil-cpp/absl/types/bad_variant_access.cc \ -LIBGRPC_ABSEIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ABSEIL_SRC)))) +LIBGRPC_ABSEIL_OBJS = - $(LIBGRPC_ABSEIL_OBJS): CPPFLAGS += -g $(ABSL_RANDOM_HWAES_FLAGS) -Ithird_party/abseil-cpp + $(LIBGRPC_ABSEIL_OBJS): CPPFLAGS += -g -Ithird_party/abseil-cpp diff --git a/user/grpc/minimal-fix-for-invalid-implicit-absl-string_view-nu.patch b/user/grpc/minimal-fix-for-invalid-implicit-absl-string_view-nu.patch deleted file mode 100644 index 51b1b76..0000000 --- a/user/grpc/minimal-fix-for-invalid-implicit-absl-string_view-nu.patch +++ /dev/null @@ -1,45 +0,0 @@ -Patch-Source: https://src.fedoraproject.org/rpms/grpc/blob/f36/f/0001-Minimal-fix-for-invalid-implicit-absl-string_view-nu.patch --- -From 39d8f1440941ab56fe4bfa45ce4bd6177165f919 Mon Sep 17 00:00:00 2001 -From: "Benjamin A. Beasley" -Date: Sun, 16 Jan 2022 09:47:21 -0500 -Subject: [PATCH] Minimal fix for invalid implicit absl::string_view(nullptr_t) - ---- - .../client_channel/lb_policy/xds/xds_cluster_resolver.cc | 2 +- - test/core/security/evaluate_args_test.cc | 6 +++--- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc -index ff936b9100..a55d811527 100644 ---- a/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc -+++ b/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc -@@ -139,7 +139,7 @@ class XdsClusterResolverLb : public LoadBalancingPolicy { - // to use for LRS load reporting. Caller must ensure that config_ is set - // before calling. - std::pair GetLrsClusterKey() const { -- if (!parent_->is_xds_uri_) return {parent_->server_name_, nullptr}; -+ if (!parent_->is_xds_uri_) return {parent_->server_name_, absl::string_view()}; - return { - parent_->config_->discovery_mechanisms()[index_].cluster_name, - parent_->config_->discovery_mechanisms()[index_].eds_service_name}; -diff --git a/test/core/security/evaluate_args_test.cc b/test/core/security/evaluate_args_test.cc -index a8df9b3003..82fc26cd9d 100644 ---- a/test/core/security/evaluate_args_test.cc -+++ b/test/core/security/evaluate_args_test.cc -@@ -32,9 +32,9 @@ class EvaluateArgsTest : public ::testing::Test { - - TEST_F(EvaluateArgsTest, EmptyMetadata) { - EvaluateArgs args = util_.MakeEvaluateArgs(); -- EXPECT_EQ(args.GetPath(), nullptr); -- EXPECT_EQ(args.GetMethod(), nullptr); -- EXPECT_EQ(args.GetHost(), nullptr); -+ EXPECT_EQ(args.GetPath(), std::string_view()); -+ EXPECT_EQ(args.GetMethod(), std::string_view()); -+ EXPECT_EQ(args.GetHost(), std::string_view()); - EXPECT_THAT(args.GetHeaders(), ::testing::ElementsAre()); - EXPECT_EQ(args.GetHeaderValue("some_key", nullptr), absl::nullopt); - } --- -2.33.1 - diff --git a/user/grpc/ruby-dont-strip-library.patch b/user/grpc/ruby-dont-strip-library.patch deleted file mode 100644 index 215a9f4..0000000 --- a/user/grpc/ruby-dont-strip-library.patch +++ /dev/null @@ -1,30 +0,0 @@ -From: Jakub Jirutka -Date: Wed, 24 Aug 2022 21:20:22 +0200 -Subject: [PATCH] Don't strip the built library - -abuild does it. - ---- a/src/ruby/ext/grpc/extconf.rb -+++ b/src/ruby/ext/grpc/extconf.rb -@@ -94,21 +94,3 @@ - output = File.join('grpc', 'grpc_c') - puts 'Generating Makefile for ' + output - create_makefile(output) -- --strip_tool = RbConfig::CONFIG['STRIP'] --strip_tool += ' -x' if darwin -- --if grpc_config == 'opt' -- File.open('Makefile.new', 'w') do |o| -- o.puts 'hijack: all strip' -- o.puts -- File.foreach('Makefile') do |i| -- o.puts i -- end -- o.puts -- o.puts 'strip: $(DLLIB)' -- o.puts "\t$(ECHO) Stripping $(DLLIB)" -- o.puts "\t$(Q) #{strip_tool} $(DLLIB)" -- end -- File.rename('Makefile.new', 'Makefile') --end diff --git a/user/grpc/ruby-use-shared-libs.patch b/user/grpc/ruby-use-shared-libs.patch index 1725393..736869a 100644 --- a/user/grpc/ruby-use-shared-libs.patch +++ b/user/grpc/ruby-use-shared-libs.patch @@ -6,52 +6,76 @@ Subject: [PATCH] Link with shared libraries, don't embed anything - Don't build and statically link libgrpc, link shared libgrpc. - Don't statically link libgcc and libstdc++. +diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb +index 98a8876..808ecfe 100644 --- a/src/ruby/ext/grpc/extconf.rb +++ b/src/ruby/ext/grpc/extconf.rb -@@ -45,9 +45,9 @@ - ENV['ARFLAGS'] = '-o' +@@ -69,11 +69,11 @@ if apple_toolchain && !cross_compiling end --ENV['EMBED_OPENSSL'] = 'true' --ENV['EMBED_ZLIB'] = 'true' --ENV['EMBED_CARES'] = 'true' + # Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times) +-ENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s +ENV['EMBED_OPENSSL'] = 'false' + # Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times) +-ENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s +ENV['EMBED_ZLIB'] = 'false' + +-ENV['EMBED_CARES'] = 'true' +ENV['EMBED_CARES'] = 'false' ENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG'] - if darwin && !cross_compiling -@@ -65,23 +65,15 @@ - output_dir = File.expand_path(RbConfig::CONFIG['topdir']) - grpc_lib_dir = File.join(output_dir, 'libs', grpc_config) - ENV['BUILDDIR'] = output_dir -+$LDFLAGS << ' -L' + ENV.fetch('TOPDIR', '.') + if apple_toolchain && !cross_compiling +@@ -97,32 +97,7 @@ + strip_tool = RbConfig::CONFIG['STRIP'] + strip_tool += ' -x' if apple_toolchain -unless windows - puts 'Building internal gRPC into ' + grpc_lib_dir - nproc = 4 -- nproc = Etc.nprocessors * 2 if Etc.respond_to? :nprocessors +- nproc = Etc.nprocessors if Etc.respond_to? :nprocessors +- nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] +- unless nproc_override.nil? or nproc_override.size == 0 +- nproc = nproc_override +- puts "Overriding make parallelism to #{nproc}" +- end - make = bsd ? 'gmake' : 'make' -- system("#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q=") +- cmd = "#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q=" +- puts "Building grpc native library: #{cmd}" +- system(cmd) - exit 1 unless $? == 0 --end - - $CFLAGS << ' -I' + File.join(grpc_root, 'include') +- if grpc_config == 'opt' +- rm_obj_cmd = "rm -rf #{File.join(output_dir, 'objs')}" +- puts "Removing grpc object files: #{rm_obj_cmd}" +- system(rm_obj_cmd) +- exit 1 unless $? == 0 +- strip_cmd = "#{strip_tool} #{grpc_lib_dir}/*.a" +- puts "Stripping grpc native library: #{strip_cmd}" +- system(strip_cmd) +- exit 1 unless $? == 0 +- end +-end ++$LDFLAGS << ' -L' + ENV.fetch('TOPDIR', '.') - ext_export_file = File.join(grpc_root, 'src', 'ruby', 'ext', 'grpc', 'ext-export') + $CFLAGS << ' -DGRPC_RUBY_WINDOWS_UCRT' if windows_ucrt + $CFLAGS << ' -I' + File.join(grpc_root, 'include') +@@ -118,7 +103,7 @@ ext_export_file += '-truffleruby' if RUBY_ENGINE == 'truffleruby' $LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux - $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if darwin + $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if apple_toolchain -$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows +$LDFLAGS << ' -Wl,-wrap,memcpy -lgrpc' unless windows if grpc_config == 'gcov' $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage' $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic' -@@ -92,7 +84,6 @@ +@@ -129,10 +114,6 @@ if grpc_config == 'dbg' end $LDFLAGS << ' -Wl,-wrap,memcpy' if linux --$LDFLAGS << ' -static-libgcc -static-libstdc++' if linux +-# Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode +-if linux && RUBY_ENGINE != 'truffleruby' +- $LDFLAGS << ' -static-libgcc -static-libstdc++' +-end $LDFLAGS << ' -static' if windows - $CFLAGS << ' -std=c99 ' + $CFLAGS << ' -std=c11 ' From f4bf9f53a16ee0b3f992c30209affec799e91223 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 18:47:54 -0500 Subject: [PATCH 015/738] user/gitaly: upgrade to 16.6.0 --- user/gitaly/APKBUILD | 10 +++++----- user/gitaly/config.patch | 15 +++++---------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index c06bf97..c1aae40 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,15 +2,15 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.2.0 -pkgrel=1 +pkgver=16.6.0 +pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" arch="all" # GPL-2.0-only WITH GCC-exception-2.0: bundled libgit2 license="MIT AND GPL-2.0-only WITH GCC-exception-2.0" depends=" - git>=2.41 + git>=2.42 " makedepends=" bash @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -7576dd5ef690c42582703ba571bb9e6856e85d209025f32b0797c3cecca88e10b538dc75a27d8cd2a99e30e2e99d03d0a61c681a8af692e3e34420775792598a gitaly-v16.2.0.tar.gz -7760ee96abd45103a99e3c3fff31538aeac0e10254c88ab600bfc6fed04c0c34b43a4d54295463663a9707204622cfc06d1de672fe2826d22c017850ddac24e4 config.patch +c2c49b39cd978ca184547c101e3ea9cd68d96bafef070c34350986f0343766d740398631aa451d0c7b51ac90a383594a5de211b468babda39e7080b33a1588f4 gitaly-v16.6.0.tar.gz +55230e587839df8fc8c6daeee1e5a5fbd91d6d28966d9977d59e6fb3d75e269c9d4d119f3a06217a4c6c55733a50ec9affcdb132e77e1694df839269dcd292aa config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " diff --git a/user/gitaly/config.patch b/user/gitaly/config.patch index 80d15bb..5d326ba 100644 --- a/user/gitaly/config.patch +++ b/user/gitaly/config.patch @@ -1,5 +1,5 @@ diff --git a/config.toml.example.orig b/config.toml.example -index 2ddb368..0a8a0e2 100644 +index 3d454fb..52457df 100644 --- a/config.toml.example.orig +++ b/config.toml.example @@ -2,15 +2,15 @@ @@ -78,17 +78,12 @@ index 2ddb368..0a8a0e2 100644 # # Additionally exceptions from the Go server can be reported to Sentry # sentry_dsn = "https://:@sentry.io/" -@@ -72,14 +72,14 @@ dir = "/home/git/gitlab/log" +@@ -71,11 +71,11 @@ dir = "/home/git/gitlab/log" + # grpc_latency_buckets = [0.001, 0.005, 0.025, 0.1, 0.5, 1.0, 10.0, 30.0, 60.0, 300.0, 1500.0] - [gitlab-shell] - # The directory where gitlab-shell is installed --dir = "/home/git/gitlab-shell" -+dir = "/usr/lib/gitlab-shell" - --[hooks] + [hooks] -custom_hooks_dir = "/home/git/custom_hooks" -+# [hooks] -+# custom_hooks_dir = "/etc/gitlab/custom_hooks" ++custom_hooks_dir = "/etc/gitlab/custom_hooks" [gitlab] -secret_file = "/home/git/gitlab-shell/.gitlab_shell_secret" From 6817cec4b812568d0d6a5912ecca42afec288e38 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 18:48:16 -0500 Subject: [PATCH 016/738] user/gitlab-shell: upgrade to 14.30.1 --- user/gitlab-shell/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD index 8e31797..90bf4de 100644 --- a/user/gitlab-shell/APKBUILD +++ b/user/gitlab-shell/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-shell -pkgver=14.24.0 +pkgver=14.30.1 pkgrel=0 pkgdesc="GitLab Shell handles git SSH sessions for GitLab" url="https://gitlab.com/gitlab-org/gitlab-shell" @@ -59,7 +59,7 @@ package() { } sha512sums=" -5a05217b1055c4658c3b7209c348253d590d4f99a877af012687cf9b60196d7f7051b615612bfc7d6992c9dc7d176b74da447ce22ca681f3703ce92379d15350 gitlab-shell-v14.24.0.tar.gz +5cd602ffc98fa2f6c5efbc9541bb6ff234253e299b690aa43feaefab2518b63fd0f69a8c3d79a4f04624c2a6daceaefc300be90ef2a29ff0b8a2392d0ae710cf gitlab-shell-v14.30.1.tar.gz 8cf13bf472e22b1c429bba5df98afb931c80b043ec83c8366d59f15a1e9b21daf09078f134e7aa622c87b32c774d1d5cf129878d5035102c06d0b12ead33f804 config.patch 499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig From 3f1ec8a6cce29c6bea406af79661cc0a0a4948f1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 18:48:37 -0500 Subject: [PATCH 017/738] user/gitlab-foss: upgrade to 16.6.0 --- user/gitlab-foss/APKBUILD | 23 ++-- user/gitlab-foss/database-config.patch | 8 +- .../remove-sys-filesystem-depend.patch | 104 ++++++++++++++++++ 3 files changed, 122 insertions(+), 13 deletions(-) create mode 100644 user/gitlab-foss/remove-sys-filesystem-depend.patch diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index f14ab26..18a2d26 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,13 +3,12 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.2.4 +pkgver=16.6.0 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" -# grpc needs fixing, due to protodev upgrade -#arch="x86_64" +arch="x86_64 aarch64" license="MIT" # ruby-irb is needed only for Rails console (gitlab-rails console) depends=" @@ -17,9 +16,9 @@ depends=" ca-certificates cmd:dpkg-deb exiftool - git>=2.40.0 - gitaly~=16.2 - gitlab-shell~=14.24 + git>=2.42.0 + gitaly~=16.6 + gitlab-shell~=14.30 graphicsmagick http-parser procps @@ -34,6 +33,7 @@ depends=" ruby3.0-irb ruby3.0-json ruby3.0-rake + ruby3.0-rdoc ruby3.0-webrick shared-mime-info tzdata @@ -56,7 +56,7 @@ makedepends=" protobuf-dev re2-dev ruby3.0-dev - ruby3.0-grpc~=1.55 + ruby3.0-grpc~=1.58 ruby3.0-rugged yarn>=1.2.0 " @@ -74,6 +74,7 @@ source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss $_pkgname.confd $_pkgname.logrotate bin-wrapper.in + remove-sys-filesystem-depend.patch " builddir="$srcdir/gitlab-foss-$_gittag" @@ -128,11 +129,12 @@ build() { bundle config --local without "$bundle_without" bundle config --local build.ffi --enable-system-libffi bundle config --local build.gpgme --use-system-libraries + bundle config --local build.re2 --enable-system-libraries bundle config --local build.nokogiri --use-system-libraries \ --with-xml2-include=/usr/include/libxml2 \ --with-xslt-include=/usr/include/libxslt bundle config --local build.ruby-magic --enable-system-libraries - bundle config --local build.google-protobuf --with-cflags=-D__va_copy=va_copy + bundle config --local build.google-protobuf '-- --with-cflags=-D__va_copy=va_copy' bundle config --local path "vendor/bundle" bundle install --no-cache @@ -375,8 +377,8 @@ assets() { } sha512sums=" -96d2146f81bcecae9e8a4a72ef1dd136a2203649af38dbcb560c8071ca9a409b54b7e220b7c233b66ce1ee9423700e8150e445902971f951282764bded2bc717 gitlab-foss-v16.2.4.tar.gz -cdba615287c0a024c6589b5142543856393c8e5df3d21d2158908b34857d3d56581fe0bd66fa31cd3ff756c60f9f65f235c8ec7615a0970f7a87bbeb41be93ed database-config.patch +ea83c490fdbfc7d32dc1b25fb17185f6552dfc72ab1766f7169e1298869589a12ea7b9285873be2c7b91303dd8eb486acaeb75e916177a9827139fb9b54ea232 gitlab-foss-v16.6.0.tar.gz +daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd b6a6d9ba20557e61efa24f2d5a489873fefbb981f7d4465794a857b2971263c08ec29cc001c372522cdc0d48245e59751307c9f44f6ef4d87bf2e3ec5c23fb1c gitlab.rails.initd @@ -385,4 +387,5 @@ cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08d 4dc00b16462f30591297fcb535fc364185d3ed76e9956597f0423a8dfd8a9a351f6ac29d9f0c73052c11324fba4768eb89a21c6bef4da99f15baaea8c9ab8407 gitlab.confd 57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in +97e19d601365da710341eea83324987e2d61061a4c816972d957cdb3300f8d65d07ca53bc46d4cbe9a476e5e72255e7081bdebc5217e7f3e95b8165f114c7b5f remove-sys-filesystem-depend.patch " diff --git a/user/gitlab-foss/database-config.patch b/user/gitlab-foss/database-config.patch index 6ed3592..9b113e1 100644 --- a/user/gitlab-foss/database-config.patch +++ b/user/gitlab-foss/database-config.patch @@ -1,5 +1,5 @@ diff --git a/config/database.yml.postgresql.orig b/config/database.yml.postgresql -index b210b9c..9006120 100644 +index da9f458..2d6d44e 100644 --- a/config/database.yml.postgresql.orig +++ b/config/database.yml.postgresql @@ -26,13 +26,6 @@ production: @@ -44,8 +44,8 @@ index b210b9c..9006120 100644 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". -@@ -117,17 +96,3 @@ test: &test - prepared_statements: false +@@ -119,19 +98,3 @@ test: &test + reaping_frequency: nil variables: statement_timeout: 15s - geo: @@ -55,6 +55,7 @@ index b210b9c..9006120 100644 - username: postgres - password: - host: localhost +- reaping_frequency: nil - embedding: - adapter: postgresql - encoding: unicode @@ -62,3 +63,4 @@ index b210b9c..9006120 100644 - username: postgres - password: - host: localhost +- reaping_frequency: nil diff --git a/user/gitlab-foss/remove-sys-filesystem-depend.patch b/user/gitlab-foss/remove-sys-filesystem-depend.patch new file mode 100644 index 0000000..0690918 --- /dev/null +++ b/user/gitlab-foss/remove-sys-filesystem-depend.patch @@ -0,0 +1,104 @@ +diff --git a/Gemfile.orig b/Gemfile +index c1e9e34..a4448b7 100644 +--- a/Gemfile.orig ++++ b/Gemfile +@@ -525,7 +525,6 @@ gem 'health_check', '~> 3.0' # rubocop:todo Gemfile/MissingFeatureCategory + + # System information + gem 'vmstat', '~> 2.3.0' # rubocop:todo Gemfile/MissingFeatureCategory +-gem 'sys-filesystem', '~> 1.4.3' # rubocop:todo Gemfile/MissingFeatureCategory + + # NTP client + gem 'net-ntp' # rubocop:todo Gemfile/MissingFeatureCategory +diff --git a/Gemfile.lock.orig b/Gemfile.lock +index e2ebb91..39b6df3 100644 +--- a/Gemfile.lock.orig ++++ b/Gemfile.lock +@@ -1605,8 +1605,6 @@ GEM + attr_required (>= 0.0.5) + httpclient (>= 2.4) + sync (0.5.0) +- sys-filesystem (1.4.3) +- ffi (~> 1.1) + sysexits (1.2.0) + table_print (1.5.7) + tanuki_emoji (0.9.0) +@@ -2061,7 +2059,6 @@ DEPENDENCIES + ssh_data (~> 1.3) + stackprof (~> 0.2.25) + state_machines-activerecord (~> 0.8.0) +- sys-filesystem (~> 1.4.3) + tanuki_emoji (~> 0.9) + telesignenterprise (~> 2.2) + terser (= 1.0.2) +diff --git a/app/controllers/admin/system_info_controller.rb.orig b/app/controllers/admin/system_info_controller.rb +index 96fb73c..7b8435e 100644 +--- a/app/controllers/admin/system_info_controller.rb.orig ++++ b/app/controllers/admin/system_info_controller.rb +@@ -1,4 +1,5 @@ + # frozen_string_literal: true ++require 'open3' + + class Admin::SystemInfoController < Admin::ApplicationController + feature_category :not_owned # rubocop:todo Gitlab/AvoidFeatureCategoryNotOwned +@@ -36,6 +37,11 @@ class Admin::SystemInfoController < Admin::ApplicationController + 'vfat' + ].freeze + ++ MOUNT_REGEX = /(\S+) on (\S+) type (\S+) \(([^)]+)\)/ ++ ++ Mount = Struct.new('Mount', :name, :mount_point, :mount_type, :options) ++ FsStat = Struct.new('FsStats', :path, :bytes_total, :bytes_used) ++ + def show + @cpus = begin + Vmstat.cpu +@@ -47,7 +53,6 @@ def show + rescue StandardError + nil + end +- mounts = Sys::Filesystem.mounts + + @disks = [] + mounts.each do |mount| +@@ -57,15 +62,38 @@ def show + next if (EXCLUDED_MOUNT_TYPES & [mount.mount_type]).any? + + begin +- disk = Sys::Filesystem.stat(mount.mount_point) ++ disk = fs_stat(mount.mount_point) + @disks.push({ + bytes_total: disk.bytes_total, + bytes_used: disk.bytes_used, + disk_name: mount.name, + mount_path: disk.path + }) +- rescue Sys::Filesystem::Error ++ rescue IOError + end + end + end ++ ++ def mounts ++ stdout, stderr, status = Open3.capture3('mount') ++ fail IOError, stderr unless status.success? ++ ++ stdout.lines ++ .map { |line| MOUNT_REGEX.match(line) } ++ .compact ++ .map { |match| Mount.new(*match.captures) } ++ end ++ ++ def fs_stat(mount_point) ++ stdout, status = Open3.capture2('stat', '-c', '%s %b %a', '-f', mount_point) ++ fail IOError unless status.success? ++ ++ block_size, blocks_total, blocks_free = stdout.split(' ').map(&:to_i) ++ ++ bytes_total = blocks_total * block_size ++ bytes_free = blocks_free * block_size ++ bytes_used = bytes_total - bytes_free ++ ++ FsStat.new(mount_point, bytes_total, bytes_used) ++ end + end From 67f4498faa4cc61d29d0b38eecc41a75420a0043 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 18:48:54 -0500 Subject: [PATCH 018/738] user/gitlab-pages: upgrade to 16.6.0 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index d305a8b..168718b 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.2.4 +pkgver=16.6.0 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -d05b99d48a88a008a729f15471284169ea7ce664aa19894c93f0c95e4259d79891c7e58d2204c21fa2d11bfb9c59c77ed2d3d7effa5235263e7aa046233f4acc gitlab-pages-v16.2.4.tar.gz +9574321d6d423a28b6d80aed5c9cc598b0d76b6b179ed515e8d4e6277d9d2bc9f9e18bc4e96b68f686f32502e279026c6891c46f329d4267ac1e8031bfd8c2f7 gitlab-pages-v16.6.0.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 9e6beac6eb37bac1495e7588683d799ecf9b51f5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 27 Nov 2023 15:06:09 -0500 Subject: [PATCH 019/738] user/mastodon: upgrade to 4.2.1 --- ...tored-location-as-after-sign-in-path.patch | 23 ------------------- user/mastodon/APKBUILD | 8 +++---- 2 files changed, 3 insertions(+), 28 deletions(-) delete mode 100644 user/mastodon/24073_prefer-stored-location-as-after-sign-in-path.patch diff --git a/user/mastodon/24073_prefer-stored-location-as-after-sign-in-path.patch b/user/mastodon/24073_prefer-stored-location-as-after-sign-in-path.patch deleted file mode 100644 index efaf610..0000000 --- a/user/mastodon/24073_prefer-stored-location-as-after-sign-in-path.patch +++ /dev/null @@ -1,23 +0,0 @@ -From e48894bfe303b0d8b8f1c1bdf43f07e1baca3176 Mon Sep 17 00:00:00 2001 -From: CSDUMMI -Date: Sat, 11 Mar 2023 18:21:53 +0100 -Subject: [PATCH] Prefer the stored locatio in the omniauth callback controller - over the root path - ---- - app/controllers/auth/omniauth_callbacks_controller.rb | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/app/controllers/auth/omniauth_callbacks_controller.rb b/app/controllers/auth/omniauth_callbacks_controller.rb -index 3d7962de56cb..9e0fb942aaff 100644 ---- a/app/controllers/auth/omniauth_callbacks_controller.rb -+++ b/app/controllers/auth/omniauth_callbacks_controller.rb -@@ -33,7 +33,7 @@ def self.provides_callback_for(provider) - - def after_sign_in_path_for(resource) - if resource.email_present? -- root_path -+ stored_location_for(resource) || root_path - else - auth_setup_path(missing_email: '1') - end diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 4b70e1e..0e8cd69 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -3,11 +3,11 @@ pkgname=mastodon _pkgname=$pkgname -pkgver=4.1.8 +pkgver=4.2.1 _gittag=v$pkgver pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" -arch="x86_64 aarch64" +arch="x86_64" url="https://github.com/mastodon/mastodon" license="AGPL-3.0-only" depends=" @@ -45,7 +45,6 @@ install=" " source=" mastodon-$_gittag.tar.gz::https://github.com/mastodon/mastodon/archive/$_gittag.tar.gz - 24073_prefer-stored-location-as-after-sign-in-path.patch mastodon.initd mastodon.web.initd mastodon.sidekiq.initd @@ -193,8 +192,7 @@ assets() { } sha512sums=" -3995f12f624fb4254f3e3785aa5e25f569c3551ab378aacaa2dd8e576dcbfda328b326f1589e6b5e6a021b3903875c5958ad771e63d4d680ff88d000645d9c18 mastodon-v4.1.8.tar.gz -730d3bef92b0da2ef400b5205fd8ab7159a458d654fa4d9a16cc0b579331ac67bec8b302096dff3470a3363b88a770ec857f1db7a0112effd07275da661c654a 24073_prefer-stored-location-as-after-sign-in-path.patch +54e3e14abbe9ce6b4ec72586b00d0e7845b8e7b0f18ee608ab452a4b56df257657ffcd1f3a0b8de715dbaad3edacbf31a4e20cef5f5d82b6902837ee9a6ab900 mastodon-v4.2.1.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From 46d0bffbd932277878cf141968da8761d7db8082 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 29 Nov 2023 12:42:17 -0500 Subject: [PATCH 020/738] user/gitlab-foss: use sys-filesystem version 1.3.2 --- user/gitlab-foss/APKBUILD | 6 +- .../downgrade-sys-filesystem-depend.patch | 37 +++++++ .../remove-sys-filesystem-depend.patch | 104 ------------------ 3 files changed, 40 insertions(+), 107 deletions(-) create mode 100644 user/gitlab-foss/downgrade-sys-filesystem-depend.patch delete mode 100644 user/gitlab-foss/remove-sys-filesystem-depend.patch diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 18a2d26..481d798 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -5,7 +5,7 @@ pkgname=gitlab-foss _pkgname=${pkgname%-foss} pkgver=16.6.0 _gittag=v$pkgver -pkgrel=0 +pkgrel=1 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" arch="x86_64 aarch64" @@ -74,7 +74,7 @@ source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss $_pkgname.confd $_pkgname.logrotate bin-wrapper.in - remove-sys-filesystem-depend.patch + downgrade-sys-filesystem-depend.patch " builddir="$srcdir/gitlab-foss-$_gittag" @@ -387,5 +387,5 @@ cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08d 4dc00b16462f30591297fcb535fc364185d3ed76e9956597f0423a8dfd8a9a351f6ac29d9f0c73052c11324fba4768eb89a21c6bef4da99f15baaea8c9ab8407 gitlab.confd 57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in -97e19d601365da710341eea83324987e2d61061a4c816972d957cdb3300f8d65d07ca53bc46d4cbe9a476e5e72255e7081bdebc5217e7f3e95b8165f114c7b5f remove-sys-filesystem-depend.patch +ab9a09fca6126b18b76e61380990dc217f915162985880e90b905b3210a1fef229af3db1f1ca180177d3cba91ab5fe33798ac685055abf0adc44a1b630f71b39 downgrade-sys-filesystem-depend.patch " diff --git a/user/gitlab-foss/downgrade-sys-filesystem-depend.patch b/user/gitlab-foss/downgrade-sys-filesystem-depend.patch new file mode 100644 index 0000000..3ed59d0 --- /dev/null +++ b/user/gitlab-foss/downgrade-sys-filesystem-depend.patch @@ -0,0 +1,37 @@ +diff --git a/Gemfile.orig b/Gemfile +index c1e9e34..a4448b7 100644 +--- a/Gemfile.orig ++++ b/Gemfile +@@ -525,7 +525,7 @@ gem 'health_check', '~> 3.0' # rubocop:todo Gemfile/MissingFeatureCategory + + # System information + gem 'vmstat', '~> 2.3.0' # rubocop:todo Gemfile/MissingFeatureCategory +-gem 'sys-filesystem', '~> 1.4.3' # rubocop:todo Gemfile/MissingFeatureCategory ++gem 'sys-filesystem', '= 1.3.2' # rubocop:todo Gemfile/MissingFeatureCategory + + # NTP client + gem 'net-ntp' # rubocop:todo Gemfile/MissingFeatureCategory +diff --git a/Gemfile.lock.orig b/Gemfile.lock +index e2ebb91..39b6df3 100644 +--- a/Gemfile.lock.orig ++++ b/Gemfile.lock +@@ -1605,8 +1605,8 @@ GEM + attr_required (>= 0.0.5) + httpclient (>= 2.4) + sync (0.5.0) +- sys-filesystem (1.4.3) +- ffi (~> 1.1) ++ sys-filesystem (1.3.2) ++ ffi (>= 0) + sysexits (1.2.0) + table_print (1.5.7) + tanuki_emoji (0.9.0) +@@ -2061,7 +2059,7 @@ DEPENDENCIES + ssh_data (~> 1.3) + stackprof (~> 0.2.25) + state_machines-activerecord (~> 0.8.0) +- sys-filesystem (~> 1.4.3) ++ sys-filesystem (= 1.3.2) + tanuki_emoji (~> 0.9) + telesignenterprise (~> 2.2) + terser (= 1.0.2) diff --git a/user/gitlab-foss/remove-sys-filesystem-depend.patch b/user/gitlab-foss/remove-sys-filesystem-depend.patch deleted file mode 100644 index 0690918..0000000 --- a/user/gitlab-foss/remove-sys-filesystem-depend.patch +++ /dev/null @@ -1,104 +0,0 @@ -diff --git a/Gemfile.orig b/Gemfile -index c1e9e34..a4448b7 100644 ---- a/Gemfile.orig -+++ b/Gemfile -@@ -525,7 +525,6 @@ gem 'health_check', '~> 3.0' # rubocop:todo Gemfile/MissingFeatureCategory - - # System information - gem 'vmstat', '~> 2.3.0' # rubocop:todo Gemfile/MissingFeatureCategory --gem 'sys-filesystem', '~> 1.4.3' # rubocop:todo Gemfile/MissingFeatureCategory - - # NTP client - gem 'net-ntp' # rubocop:todo Gemfile/MissingFeatureCategory -diff --git a/Gemfile.lock.orig b/Gemfile.lock -index e2ebb91..39b6df3 100644 ---- a/Gemfile.lock.orig -+++ b/Gemfile.lock -@@ -1605,8 +1605,6 @@ GEM - attr_required (>= 0.0.5) - httpclient (>= 2.4) - sync (0.5.0) -- sys-filesystem (1.4.3) -- ffi (~> 1.1) - sysexits (1.2.0) - table_print (1.5.7) - tanuki_emoji (0.9.0) -@@ -2061,7 +2059,6 @@ DEPENDENCIES - ssh_data (~> 1.3) - stackprof (~> 0.2.25) - state_machines-activerecord (~> 0.8.0) -- sys-filesystem (~> 1.4.3) - tanuki_emoji (~> 0.9) - telesignenterprise (~> 2.2) - terser (= 1.0.2) -diff --git a/app/controllers/admin/system_info_controller.rb.orig b/app/controllers/admin/system_info_controller.rb -index 96fb73c..7b8435e 100644 ---- a/app/controllers/admin/system_info_controller.rb.orig -+++ b/app/controllers/admin/system_info_controller.rb -@@ -1,4 +1,5 @@ - # frozen_string_literal: true -+require 'open3' - - class Admin::SystemInfoController < Admin::ApplicationController - feature_category :not_owned # rubocop:todo Gitlab/AvoidFeatureCategoryNotOwned -@@ -36,6 +37,11 @@ class Admin::SystemInfoController < Admin::ApplicationController - 'vfat' - ].freeze - -+ MOUNT_REGEX = /(\S+) on (\S+) type (\S+) \(([^)]+)\)/ -+ -+ Mount = Struct.new('Mount', :name, :mount_point, :mount_type, :options) -+ FsStat = Struct.new('FsStats', :path, :bytes_total, :bytes_used) -+ - def show - @cpus = begin - Vmstat.cpu -@@ -47,7 +53,6 @@ def show - rescue StandardError - nil - end -- mounts = Sys::Filesystem.mounts - - @disks = [] - mounts.each do |mount| -@@ -57,15 +62,38 @@ def show - next if (EXCLUDED_MOUNT_TYPES & [mount.mount_type]).any? - - begin -- disk = Sys::Filesystem.stat(mount.mount_point) -+ disk = fs_stat(mount.mount_point) - @disks.push({ - bytes_total: disk.bytes_total, - bytes_used: disk.bytes_used, - disk_name: mount.name, - mount_path: disk.path - }) -- rescue Sys::Filesystem::Error -+ rescue IOError - end - end - end -+ -+ def mounts -+ stdout, stderr, status = Open3.capture3('mount') -+ fail IOError, stderr unless status.success? -+ -+ stdout.lines -+ .map { |line| MOUNT_REGEX.match(line) } -+ .compact -+ .map { |match| Mount.new(*match.captures) } -+ end -+ -+ def fs_stat(mount_point) -+ stdout, status = Open3.capture2('stat', '-c', '%s %b %a', '-f', mount_point) -+ fail IOError unless status.success? -+ -+ block_size, blocks_total, blocks_free = stdout.split(' ').map(&:to_i) -+ -+ bytes_total = blocks_total * block_size -+ bytes_free = blocks_free * block_size -+ bytes_used = bytes_total - bytes_free -+ -+ FsStat.new(mount_point, bytes_total, bytes_used) -+ end - end From fd0f429eeeec02a109eab474acc2a816eb86488f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 29 Nov 2023 15:12:03 -0500 Subject: [PATCH 021/738] community/git-annex: upgrade to 10.20231129 --- community/git-annex/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/community/git-annex/APKBUILD b/community/git-annex/APKBUILD index 07daf8a..10e13de 100644 --- a/community/git-annex/APKBUILD +++ b/community/git-annex/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=git-annex -pkgver=10.20230926 +pkgver=10.20231129 pkgrel=0 pkgdesc="Manage files with git, without checking their contents into git" url="http://git-annex.branchable.com" @@ -106,7 +106,7 @@ package() { } sha512sums=" -e59f41485d30cd824c4405bb8b73f2f2f1a3b6b10fcd5af1ad504093fce22ebb2f9280fc559e19a92c6247222cce137937143e72b9abf8c2b480d728518f02b5 git-annex-10.20230926.tar.gz -6842f63a97b60317690fcc9561cd05c262faa7bd02193c58d55ca2028095f34c8dabcb8601b2944dcbee6e8c3a01038b274c490aaf19ce368b56e188f7713acb git-annex-10.20230926-edge.config +aa30fb5ccf140d90242528e19bc4a9d07c7a5de658cd3b1ff3ae666165f1a039bf22bc1a6aa7394128b495f60eb1c91472e42f32edb53b4b18f9ef81b730039b git-annex-10.20231129.tar.gz +8e3307300fa5be81c51031d0b5376518627e0c11abf4b879a47dfae98a5bc4f7ef3d45f82ca95e03ed7e91786c8e502700c22f7fe54f40e9b6f1f3b8f4e13815 git-annex-10.20231129-edge.config 9300f883746d8726f47be6d194b5ac9550e2894669097f3202eca944221665bd3087a81b3f97b21f013eccaa6b5b1fb050e253ac18999c136db20056fadf2ed8 fix-makefile.patch " From 515ce5c57bd71e5553a2a5070e14ef8b360fc774 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 30 Nov 2023 20:43:31 -0500 Subject: [PATCH 022/738] backports/electron: upgrade to 27.1.2 --- backports/electron/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 0f817b6..afd4439 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,9 +1,9 @@ # Maintainer: lauren n. liberda pkgname=electron -pkgver=27.1.0 +pkgver=27.1.2 _semver="${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=118.0.5993.144 +_chromium=118.0.5993.162 _depot_tools=b5509953468edd0906f2dc297886939abbd2bed5 _extra_patches=118.0.5993.11 pkgdesc="Electron cross-platform desktop toolkit" @@ -470,7 +470,7 @@ lang() { } sha512sums=" -8a83b73d219fe607f8ba4a4203ec06c866c883f8056c17e67105162257eb263e26e5424cb2d8a56ab1a25a989cb20cd59c7a2132de587447c193c1b53b01e6c5 electron-27.1.0-118.0.5993.144.tar.zst +07f653f24e7fe1ef96a0ff676fa3c987fd0826980b5e9611705cb7fc44f00182fa62e67e67c6df5a3b1b4c063d99a3266054a83aa67fb44b11ffffcd8e23c3eb electron-27.1.2-118.0.5993.162.tar.zst 194c3a7a0fa03a85df6fe52ece3d53d4d15b9d0cb440b56a2ccb1b5c0d3f6481b6f7287aa705c596ceea92d475677ddaf58926f3b31c03a3c20e80ad7e481ce7 chromium-patches-118.0.5993.11.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch fa291e941076146d0edd5b96c088240a44a6e0aca3dfc744929655607182d2dc47e6c35ecb419f7c623fcf7f26dc3c4dd924dbf5ed10c3b986283f5ef2f72573 chromium-use-alpine-target.patch From 0a669827a1b7462007294770087fe362fab6809c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Dec 2023 14:13:53 -0500 Subject: [PATCH 023/738] backports/signal-desktop: upgrade to 6.40.0 --- backports/signal-desktop/APKBUILD | 16 +++++++++------- .../webrtc-no-shared-deps-in-static-lib.patch | 14 ++++++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 85ccf68..def119a 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=6.39.1 +pkgver=6.40.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -64,11 +64,11 @@ options="net !check" _libsignalver=0.32.1 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.34.1 +_ringrtcver=2.34.3 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=5845i +_webrtcver=5845j # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.5.2 @@ -116,6 +116,7 @@ export RUSTFLAGS="$RUSTFLAGS -C linker=clang" export YARN_CACHE_FOLDER="$srcdir/.yarn" # webrtc only, the other dependencies are fine with tarballs +_distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { mkdir -p "$srcdir" cd "$srcdir" @@ -159,7 +160,8 @@ target_cpu_only = True --exclude-vcs \ webrtc-$_webrtcver - zstd --ultra --long -22 -T4 -vv webrtc-$_webrtcver.tar + zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv webrtc-$_webrtcver.tar -o "$SRCDEST"/webrtc-$_webrtcver.tar.zst + mcli cp "$SRCDEST"/webrtc-$_webrtcver.tar.zst "$_distbucket" } # manual patches @@ -462,10 +464,10 @@ package() { } sha512sums=" -dc15b9693f22c0e71a1ceebe2bb967b6034dc2e3e1ced1e9be7eeca30e9253ed4c4baa49c6f87536c55118cabf2bc16d6f65f7f1bfcb73640eeb9a9942406dad Signal-Desktop-6.39.1.tar.gz +6666029a4b7d163eb5d5833a73c699d11ddd56a644a66da3363b5874ff50469add0c1415b41e568882c9f33cec72024f6c2a50774f9b182d0634d24fb831119a Signal-Desktop-6.40.0.tar.gz 855f053a1329d12e20f254f607db0c0db9f6e1a3eb10061996da75805bf462a5dee0f4f841ec679980c77da87d600f92a21cd643c36d44e017cb3cbf57003b09 libsignal-0.32.1.tar.gz -ba6cdfeeadab0bec9a10a0ce9bc19a58a060e8dc5b0007e59c38011454bebf112fda0bdc291cc3e995b3e1d468b96a1a85c840b058ed0f57f5cccb3050600dbc ringrtc-2.34.1.tar.gz -1d61be0ff5358251760d7916aced3e4a957c183f9f5313ebff266987d99ada4adec8d4d95a9a94a14539e4f182c3fb6fb574937494afb7a3ae1e9ad9c11871de webrtc-5845i.tar.zst +83df430ead75eb965513b9dec9e722d10fc4c74dc6dba8ee809bd2b77657c9d545b8d72c00a99273183c3fbcaf94ee9894c5a2d57f45ffeb3419a9957fe74426 ringrtc-2.34.3.tar.gz +a1e78d6c8fed69dbc9ece48dc2e5f0e38ab74d3483e02059c90abe9f0be6d915d0a135a0498c05fd9ef87f444b34efb0d67d7dc577f086cba4a6012981d9d9bd webrtc-5845j.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 90d47914e30f095515c47c9ef7c763a7a2583a281228d6ea7e2a3444be670b3ae506c82b4fcea8a228f88f688a43c23c8dcef52b65805d2105287234550718a5 libsignal-auditable.patch diff --git a/backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch b/backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch new file mode 100644 index 0000000..d2a83b2 --- /dev/null +++ b/backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch @@ -0,0 +1,14 @@ +--- a/BUILD.gn ++++ b/BUILD.gn +@@ -480,11 +480,6 @@ + "rtc_base", + "sdk", + "video", +- +- # Added by RingRTC +- # Necessary for use_custom_libcxx=true, +- # which is in turn necessary for deploying to Ubuntu 16.04. +- "//build/config:shared_library_deps", + ] + + if (rtc_include_builtin_audio_codecs) { From 67cebc80bdbe6cd21a4ee10d5e3ee77c39667b96 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:18:53 -0500 Subject: [PATCH 024/738] */*: clean-up community and testing --- {testing => backports}/freetube/APKBUILD | 0 .../freetube/disable-asar.patch | 0 .../freetube/electron27.patch | 0 .../freetube/freetube.desktop | 0 {testing => backports}/freetube/freetube.sh | 0 .../freetube/package-only-necessary.patch | 0 {testing => backports}/py3-twilio/APKBUILD | 0 community/dotnet6-build/APKBUILD | 588 ------ community/dotnet6-build/README.md | 131 -- .../build_14816-non-portable-build.patch | 208 -- ...uild_14816-update-portable-rid-logic.patch | 38 - .../dotnet6-build/build_disable-apphost.diff | 79 - ...ller_14816-update-portable-rid-logic.patch | 51 - ...msbuild_optional-systemconfiguration.patch | 69 - .../msbuild_optional-systemsecurity.patch | 32 - .../roslyn_57003-mono-namedmutex.patch | 470 ----- ...ng-runtime-with-non-portable-runtime.patch | 48 - .../runtime_76500-mono-musl-support.patch | 189 -- ...-thread-coop-undefine-fortify-source.patch | 25 - .../runtime_enable-system-libunwind.diff | 22 - .../runtime_remove-usage-of-off64-t.patch | 15 - ...39-add-zsh-compdef-completion-script.patch | 35 - .../dotnet6-build/sdk_telemetry-optout.patch | 32 - community/dotnet6-runtime/APKBUILD | 173 -- community/dotnet6-runtime/README.md | 144 -- community/dotnet6-runtime/dotnet.sh.in | 12 - community/dotnet6-stage0/APKBUILD | 514 ----- community/dotnet6-stage0/README.md | 140 -- .../roslyn_57003-mono-namedmutex.patch | 470 ----- ...lyn_revert-lift-version-codeanalysis.patch | 32 - .../runtime_76500-mono-musl-support.patch | 189 -- ...oolchain-for-crossbuilding-on-alpine.patch | 56 - ...-thread-coop-undefine-fortify-source.patch | 25 - ...t-adding-rids-with-dash-in-base-part.patch | 164 -- ...ime_84443-suppress-clang-16-warnings.patch | 217 -- .../runtime_remove-usage-of-off64-t.patch | 15 - community/dotnet7-build/APKBUILD | 584 ------ community/dotnet7-build/README.md | 145 -- .../build_disable-package-validation.patch | 12 - .../build_disable-source-link.patch | 20 - .../build_enable-timestamps.patch | 40 - .../roslyn-analyzer_disable-apphost.patch | 28 - .../runtime_76500-mono-musl-support.patch | 325 --- ...-thread-coop-undefine-fortify-source.patch | 25 - ...682-specify-notext-on-linux-musl-x86.patch | 24 - .../runtime_enable-runtime-marshalling.diff | 1807 ----------------- .../runtime_enable-system-libunwind.diff | 12 - .../runtime_remove-usage-of-off64-t.patch | 15 - ...39-add-zsh-compdef-completion-script.patch | 35 - community/dotnet7-runtime/APKBUILD | 172 -- community/dotnet7-runtime/README.md | 144 -- community/dotnet7-runtime/dotnet.sh.in | 12 - community/dotnet7-stage0/APKBUILD | 535 ----- community/dotnet7-stage0/README.md | 140 -- ...crossgen2rid-using-buildarchitecture.patch | 13 - .../runtime_76500-mono-musl-support.patch | 325 --- ...00-properly-set-toolchain-for-alpine.patch | 97 - ...-thread-coop-undefine-fortify-source.patch | 25 - ...682-specify-notext-on-linux-musl-x86.patch | 24 - ...t-adding-rids-with-dash-in-base-part.patch | 164 -- ...ime_84444-suppress-clang-16-warnings.patch | 192 -- .../runtime_enable-runtime-marshalling.diff | 1807 ----------------- .../runtime_remove-usage-of-off64-t.patch | 15 - community/git-annex/APKBUILD | 112 - community/git-annex/fix-makefile.patch | 24 - community/powershell/APKBUILD | 130 -- .../powershell/dependency-gatherer.targets | 9 - .../powershell/fix-filesystem-test.patch | 40 - .../powershell/update-sdk-test-ppc64le.patch | 13 - community/yadm/APKBUILD | 35 - testing/hsxkpasswd/APKBUILD | 45 - testing/ikiwiki/APKBUILD | 46 - testing/perl-file-share/APKBUILD | 37 - testing/py3-aenum/APKBUILD | 41 - testing/py3-backports-abc/APKBUILD | 44 - testing/py3-click-didyoumean/APKBUILD | 35 - testing/py3-click-repl/APKBUILD | 35 - testing/py3-concurrent-log-handler/APKBUILD | 47 - testing/py3-dacite/APKBUILD | 45 - testing/py3-django-allauth/APKBUILD | 50 - testing/py3-django-celery-results/APKBUILD | 54 - testing/py3-django-channels-redis/APKBUILD | 49 - testing/py3-django-channels/APKBUILD | 41 - .../APKBUILD | 47 - testing/py3-django-drf-spectacular/APKBUILD | 57 - testing/py3-django-environ/APKBUILD | 42 - testing/py3-django-extensions/APKBUILD | 48 - testing/py3-django-guardian/APKBUILD | 48 - testing/py3-django-otp/APKBUILD | 45 - testing/py3-django-picklefield/APKBUILD | 39 - testing/py3-django-prometheus/APKBUILD | 50 - testing/py3-django-q/APKBUILD | 63 - testing/py3-django-q/build-system.patch | 21 - testing/py3-django-redis/APKBUILD | 47 - .../APKBUILD | 44 - testing/py3-dumb-init/APKBUILD | 36 - testing/py3-duo-client/APKBUILD | 50 - testing/py3-facebook-sdk/APKBUILD | 46 - testing/py3-flower/APKBUILD | 50 - testing/py3-goodreads/APKBUILD | 40 - testing/py3-imap-tools/APKBUILD | 36 - testing/py3-inotify-simple/APKBUILD | 36 - testing/py3-inotifyrecursive/APKBUILD | 39 - testing/py3-ipware/APKBUILD | 36 - testing/py3-iso639/APKBUILD | 44 - testing/py3-langdetect/APKBUILD | 45 - testing/py3-memcached/APKBUILD | 46 - testing/py3-onelogin/APKBUILD | 49 - testing/py3-opencontainers/APKBUILD | 45 - testing/py3-openid/APKBUILD | 47 - testing/py3-portalocker/APKBUILD | 54 - testing/py3-pyaml/APKBUILD | 46 - testing/py3-pydantic-scim/APKBUILD | 37 - testing/py3-pytelegrambotapi/APKBUILD | 35 - testing/py3-pytz-deprecation-shim/APKBUILD | 34 - testing/py3-rauth/APKBUILD | 39 - testing/py3-rpy2/APKBUILD | 52 - testing/py3-ruamel-yaml-clib/APKBUILD | 35 - testing/py3-ruamel-yaml/APKBUILD | 38 - testing/py3-slack-sdk/APKBUILD | 49 - testing/py3-swagger-spec-validator/APKBUILD | 40 - testing/py3-tika/APKBUILD | 40 - testing/py3-ua-parser/APKBUILD | 55 - testing/py3-urllib3-secure-extra/APKBUILD | 36 - testing/py3-wand/APKBUILD | 49 - testing/py3-webauthn/APKBUILD | 35 - testing/py3-whoosh/APKBUILD | 46 - testing/py3-whoosh/test-fix.patch | 13 - 128 files changed, 13781 deletions(-) rename {testing => backports}/freetube/APKBUILD (100%) rename {testing => backports}/freetube/disable-asar.patch (100%) rename {testing => backports}/freetube/electron27.patch (100%) rename {testing => backports}/freetube/freetube.desktop (100%) rename {testing => backports}/freetube/freetube.sh (100%) rename {testing => backports}/freetube/package-only-necessary.patch (100%) rename {testing => backports}/py3-twilio/APKBUILD (100%) delete mode 100644 community/dotnet6-build/APKBUILD delete mode 100644 community/dotnet6-build/README.md delete mode 100644 community/dotnet6-build/build_14816-non-portable-build.patch delete mode 100644 community/dotnet6-build/build_14816-update-portable-rid-logic.patch delete mode 100644 community/dotnet6-build/build_disable-apphost.diff delete mode 100644 community/dotnet6-build/installer_14816-update-portable-rid-logic.patch delete mode 100644 community/dotnet6-build/msbuild_optional-systemconfiguration.patch delete mode 100644 community/dotnet6-build/msbuild_optional-systemsecurity.patch delete mode 100644 community/dotnet6-build/roslyn_57003-mono-namedmutex.patch delete mode 100644 community/dotnet6-build/runtime_75597-support-building-runtime-with-non-portable-runtime.patch delete mode 100644 community/dotnet6-build/runtime_76500-mono-musl-support.patch delete mode 100644 community/dotnet6-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch delete mode 100644 community/dotnet6-build/runtime_enable-system-libunwind.diff delete mode 100644 community/dotnet6-build/runtime_remove-usage-of-off64-t.patch delete mode 100644 community/dotnet6-build/sdk_14239-add-zsh-compdef-completion-script.patch delete mode 100644 community/dotnet6-build/sdk_telemetry-optout.patch delete mode 100644 community/dotnet6-runtime/APKBUILD delete mode 100644 community/dotnet6-runtime/README.md delete mode 100644 community/dotnet6-runtime/dotnet.sh.in delete mode 100644 community/dotnet6-stage0/APKBUILD delete mode 100644 community/dotnet6-stage0/README.md delete mode 100644 community/dotnet6-stage0/roslyn_57003-mono-namedmutex.patch delete mode 100644 community/dotnet6-stage0/roslyn_revert-lift-version-codeanalysis.patch delete mode 100644 community/dotnet6-stage0/runtime_76500-mono-musl-support.patch delete mode 100644 community/dotnet6-stage0/runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch delete mode 100644 community/dotnet6-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch delete mode 100644 community/dotnet6-stage0/runtime_84442-support-adding-rids-with-dash-in-base-part.patch delete mode 100644 community/dotnet6-stage0/runtime_84443-suppress-clang-16-warnings.patch delete mode 100644 community/dotnet6-stage0/runtime_remove-usage-of-off64-t.patch delete mode 100644 community/dotnet7-build/APKBUILD delete mode 100644 community/dotnet7-build/README.md delete mode 100644 community/dotnet7-build/build_disable-package-validation.patch delete mode 100644 community/dotnet7-build/build_disable-source-link.patch delete mode 100644 community/dotnet7-build/build_enable-timestamps.patch delete mode 100644 community/dotnet7-build/roslyn-analyzer_disable-apphost.patch delete mode 100644 community/dotnet7-build/runtime_76500-mono-musl-support.patch delete mode 100644 community/dotnet7-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch delete mode 100644 community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch delete mode 100644 community/dotnet7-build/runtime_enable-runtime-marshalling.diff delete mode 100644 community/dotnet7-build/runtime_enable-system-libunwind.diff delete mode 100644 community/dotnet7-build/runtime_remove-usage-of-off64-t.patch delete mode 100644 community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch delete mode 100644 community/dotnet7-runtime/APKBUILD delete mode 100644 community/dotnet7-runtime/README.md delete mode 100644 community/dotnet7-runtime/dotnet.sh.in delete mode 100644 community/dotnet7-stage0/APKBUILD delete mode 100644 community/dotnet7-stage0/README.md delete mode 100644 community/dotnet7-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch delete mode 100644 community/dotnet7-stage0/runtime_76500-mono-musl-support.patch delete mode 100644 community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch delete mode 100644 community/dotnet7-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch delete mode 100644 community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch delete mode 100644 community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch delete mode 100644 community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch delete mode 100644 community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff delete mode 100644 community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch delete mode 100644 community/git-annex/APKBUILD delete mode 100644 community/git-annex/fix-makefile.patch delete mode 100644 community/powershell/APKBUILD delete mode 100644 community/powershell/dependency-gatherer.targets delete mode 100644 community/powershell/fix-filesystem-test.patch delete mode 100644 community/powershell/update-sdk-test-ppc64le.patch delete mode 100644 community/yadm/APKBUILD delete mode 100644 testing/hsxkpasswd/APKBUILD delete mode 100644 testing/ikiwiki/APKBUILD delete mode 100644 testing/perl-file-share/APKBUILD delete mode 100644 testing/py3-aenum/APKBUILD delete mode 100644 testing/py3-backports-abc/APKBUILD delete mode 100644 testing/py3-click-didyoumean/APKBUILD delete mode 100644 testing/py3-click-repl/APKBUILD delete mode 100644 testing/py3-concurrent-log-handler/APKBUILD delete mode 100644 testing/py3-dacite/APKBUILD delete mode 100644 testing/py3-django-allauth/APKBUILD delete mode 100644 testing/py3-django-celery-results/APKBUILD delete mode 100644 testing/py3-django-channels-redis/APKBUILD delete mode 100644 testing/py3-django-channels/APKBUILD delete mode 100644 testing/py3-django-compression-middleware/APKBUILD delete mode 100644 testing/py3-django-drf-spectacular/APKBUILD delete mode 100644 testing/py3-django-environ/APKBUILD delete mode 100644 testing/py3-django-extensions/APKBUILD delete mode 100644 testing/py3-django-guardian/APKBUILD delete mode 100644 testing/py3-django-otp/APKBUILD delete mode 100644 testing/py3-django-picklefield/APKBUILD delete mode 100644 testing/py3-django-prometheus/APKBUILD delete mode 100644 testing/py3-django-q/APKBUILD delete mode 100644 testing/py3-django-q/build-system.patch delete mode 100644 testing/py3-django-redis/APKBUILD delete mode 100644 testing/py3-django-rest-framework-guardian/APKBUILD delete mode 100644 testing/py3-dumb-init/APKBUILD delete mode 100644 testing/py3-duo-client/APKBUILD delete mode 100644 testing/py3-facebook-sdk/APKBUILD delete mode 100644 testing/py3-flower/APKBUILD delete mode 100644 testing/py3-goodreads/APKBUILD delete mode 100644 testing/py3-imap-tools/APKBUILD delete mode 100644 testing/py3-inotify-simple/APKBUILD delete mode 100644 testing/py3-inotifyrecursive/APKBUILD delete mode 100644 testing/py3-ipware/APKBUILD delete mode 100644 testing/py3-iso639/APKBUILD delete mode 100644 testing/py3-langdetect/APKBUILD delete mode 100644 testing/py3-memcached/APKBUILD delete mode 100644 testing/py3-onelogin/APKBUILD delete mode 100644 testing/py3-opencontainers/APKBUILD delete mode 100644 testing/py3-openid/APKBUILD delete mode 100644 testing/py3-portalocker/APKBUILD delete mode 100644 testing/py3-pyaml/APKBUILD delete mode 100644 testing/py3-pydantic-scim/APKBUILD delete mode 100644 testing/py3-pytelegrambotapi/APKBUILD delete mode 100644 testing/py3-pytz-deprecation-shim/APKBUILD delete mode 100644 testing/py3-rauth/APKBUILD delete mode 100644 testing/py3-rpy2/APKBUILD delete mode 100644 testing/py3-ruamel-yaml-clib/APKBUILD delete mode 100644 testing/py3-ruamel-yaml/APKBUILD delete mode 100644 testing/py3-slack-sdk/APKBUILD delete mode 100644 testing/py3-swagger-spec-validator/APKBUILD delete mode 100644 testing/py3-tika/APKBUILD delete mode 100644 testing/py3-ua-parser/APKBUILD delete mode 100644 testing/py3-urllib3-secure-extra/APKBUILD delete mode 100644 testing/py3-wand/APKBUILD delete mode 100644 testing/py3-webauthn/APKBUILD delete mode 100644 testing/py3-whoosh/APKBUILD delete mode 100644 testing/py3-whoosh/test-fix.patch diff --git a/testing/freetube/APKBUILD b/backports/freetube/APKBUILD similarity index 100% rename from testing/freetube/APKBUILD rename to backports/freetube/APKBUILD diff --git a/testing/freetube/disable-asar.patch b/backports/freetube/disable-asar.patch similarity index 100% rename from testing/freetube/disable-asar.patch rename to backports/freetube/disable-asar.patch diff --git a/testing/freetube/electron27.patch b/backports/freetube/electron27.patch similarity index 100% rename from testing/freetube/electron27.patch rename to backports/freetube/electron27.patch diff --git a/testing/freetube/freetube.desktop b/backports/freetube/freetube.desktop similarity index 100% rename from testing/freetube/freetube.desktop rename to backports/freetube/freetube.desktop diff --git a/testing/freetube/freetube.sh b/backports/freetube/freetube.sh similarity index 100% rename from testing/freetube/freetube.sh rename to backports/freetube/freetube.sh diff --git a/testing/freetube/package-only-necessary.patch b/backports/freetube/package-only-necessary.patch similarity index 100% rename from testing/freetube/package-only-necessary.patch rename to backports/freetube/package-only-necessary.patch diff --git a/testing/py3-twilio/APKBUILD b/backports/py3-twilio/APKBUILD similarity index 100% rename from testing/py3-twilio/APKBUILD rename to backports/py3-twilio/APKBUILD diff --git a/community/dotnet6-build/APKBUILD b/community/dotnet6-build/APKBUILD deleted file mode 100644 index a267406..0000000 --- a/community/dotnet6-build/APKBUILD +++ /dev/null @@ -1,588 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -# secfixes: -# 6.0.106-r0: -# - CVE-2022-30184 -# 6.0.108-r0: -# - CVE-2022-34716 -# 6.0.109-r0: -# - CVE-2022-38013 -# 6.0.110-r0: -# - CVE-2022-41032 -# 6.0.112-r0: -# - CVE-2022-41089 -# 6.0.113-r0: -# - CVE-2023-21538 -# 6.0.114-r0: -# - CVE-2023-21808 -# 6.0.116-r0: -# - CVE-2023-28260 -# 6.0.118-r0: -# - CVE-2023-24895 -# - CVE-2023-24897 -# - CVE-2023-24936 -# - CVE-2023-29331 -# - CVE-2023-29337 -# - CVE-2023-33126 -# - CVE-2023-33128 -# - CVE-2023-33135 -# 6.0.120-r0: -# - CVE-2023-33127 -# - CVE-2023-33170 -# 6.0.121-r0: -# - CVE-2023-35390 -# - CVE-2023-38180 -# - CVE-2023-35391 -# 6.0.122-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# 6.0.123-r0: -# - CVE-2023-44487 -# 6.0.124-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# - CVE-2023-44487 -# 6.0.125-r0: -# - CVE-2023-36049 -# - CVE-2023-36558 - - -pkgname=dotnet6-build -pkgver=6.0.125 -pkgrel=0 -_gittag=v$pkgver -_giturl="https://github.com/dotnet/installer" -_testtag=e1cc0f181ffd4d755756d30d985513897d592ba4 -_bunnytag=71880bd94711519f7b786248a88a827a401207a2 -_llvmver=16 -_patches=" - build_14816-non-portable-build.patch - build_14816-update-portable-rid-logic.patch - build_disable-apphost.diff - installer_14816-update-portable-rid-logic.patch - msbuild_optional-systemconfiguration.patch - msbuild_optional-systemsecurity.patch - roslyn_57003-mono-namedmutex.patch - runtime_76500-mono-musl-support.patch - runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_enable-system-libunwind.diff - runtime_remove-usage-of-off64-t.patch - sdk_14239-add-zsh-compdef-completion-script.patch - sdk_telemetry-optout.patch - " - -_pkgver_macro=${pkgver%.*} -_pkgver_prior=${pkgver%.*.*} -_pkgver_name=${_pkgver_macro//[.0]} -pkgdesc="The .NET $_pkgver_macro bootstrap" -arch="x86_64 aarch64 armv7" -url=https://dotnet.microsoft.com -license="MIT" -# hack for dotnetx-build to be able to pull itself for bootstrapping -provides="dotnet$_pkgver_name-bootstrap" -provider_priority=$_pkgver_prior -checkdepends=" - babeltrace - binutils - coreutils - file - gawk - jq - lttng-tools - npm - procps - sed - strace - util-linux-misc - which - " -makedepends=" - alpine-release - bash - clang$_llvmver - cmake - dotnet$_pkgver_name-bootstrap - dotnet$_pkgver_name-bootstrap-artifacts - dotnet$_pkgver_name-stage0 - findutils - git - grep - icu-data-full - icu-dev - inetutils-syslogd - krb5-dev - libgit2-dev - libintl - libucontext-dev - libunwind-dev - libxml2-dev - libxml2-utils - linux-headers - lldb-dev - llvm$_llvmver-dev - lttng-ust-dev - nodejs - numactl-dev - openssl-dev - pigz - rsync - tar - xz - zlib-dev - " -case $CARCH in - s390x|x86) ;; - *) makedepends="$makedepends lld-dev";; -esac - -subpackages=" - dotnet$_pkgver_name-artifacts:artifacts:noarch - dotnet$_pkgver_name-sdk - dotnet$_pkgver_name-templates:templates:noarch - dotnet-zsh-completion:zshcomp:noarch - dotnet-bash-completion:bashcomp:noarch - dotnet-doc - netstandard21-targeting-pack:netstandard_targeting_pack:noarch - " -source=" - https://lab.ilot.io/mirrors/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz - dotnet-testsuite-$_testtag.tar.gz::https://github.com/redhat-developer/dotnet-regular-tests/archive/$_testtag.tar.gz - dotnet-bunny-$_bunnytag.tar.gz::https://github.com/redhat-developer/dotnet-bunny/archive/$_bunnytag.tar.gz - $_patches - " -builddir="$srcdir"/dotnet-$_gittag -_checkdir="$srcdir"/dotnet-bunny-${_bunnytag/v} -_testdir="$srcdir"/dotnet-regular-tests-$_testtag -_cli_root="$srcdir"/bootstrap -_nugetdir="$srcdir"/nuget-cache -_artifactsdir="$_cli_root"/artifacts -_libdir="/usr/lib" -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs/$pkgname -else - _logdir="$srcdir"/logs -fi - -case $CARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7) _dotnet_arch="arm";; - armhf) _dotnet_arch="armv6";; - *) _dotnet_arch="$CARCH";; -esac - -# Build doesn't set all the right executable bits for the right file types -_fix_executable() { - # add executable bit - find "$1" -type f \( \ - -name 'apphost' -o \ - -name 'singlefilehost' -o \ - -name 'lib*so' \ - \) \ - -exec chmod +x '{}' \; - - # remove executable bit - find "$1" -type f \( \ - -name '*.a' -o \ - -name '*.dll' -o \ - -name '*.h' -o \ - -name '*.json' -o \ - -name '*.pdb' -o \ - -name '*.props' -o \ - -name '*.pubxml' -o \ - -name '*.targets' -o \ - -name '*.txt' -o \ - -name '*.xml' \ - \) \ - -exec chmod -x '{}' \; -} - -# generates tarball containing all components built by dotnet -snapshot() { - local _pkg="$srcdir"/${builddir##*/}.tar - - ulimit -n 4096 - export NUGET_PACKAGES=$_nugetdir - - if [ -d "$srcdir" ]; then - cd "$srcdir" - else - mkdir -p "$srcdir" && cd "$srcdir" - fi - if [ -d "installer" ]; then - cd "$srcdir"/installer - else - git clone $_giturl --branch $_gittag && cd "$srcdir"/installer - fi - - sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets - - if [ -d "$_libdir/dotnet/bootstrap" ]; then - local _cli_root="$(find /usr/lib/dotnet/bootstrap/6.0* -maxdepth 0 -type d | sort -r | head -n 1)" - else - local _cli_root="" - fi - - _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ - /p:ArcadeBuildTarball=true \ - /p:TarballDir=$builddir \ - /p:TarballFilePath=$_pkg - - msg "Compressing ${builddir##*/}.tar to $SRCDEST" - xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" - - cd "$startdir" - abuild checksum -} - -prepare() { - default_prepare - ulimit -n 4096 - - # Using system libunwind is broken on aarch64 and mono-based builds - # see https://github.com/dotnet/source-build/issues/2408, - case $CARCH in - x86_64) - msg "Using system libunwind" - patch -p1 -i "$srcdir"/runtime_enable-system-libunwind.diff - ;; - esac - - # For some reason, new s390x apphost isn't pulled, this disable it's use on s390x - case $CARCH in - s390x) - msg "Disabing use of apphost" - patch -p1 -i "$srcdir"/build_disable-apphost.diff - ;; - esac - - # links logfiles to pipeline logs for easy pickup in pipelines - mkdir -p "$_logdir" "$builddir"/artifacts - ln -s "$_logdir" "$builddir"/artifacts/logs - ln -s "$_logdir" "$builddir"/artifacts/log - for i in "$builddir"/src/*; do - if [ -f "$i" ]; then - continue - fi - mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts - ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log - done - - # dotnet requires its bootstrap to be in a writable dir - msg "Setting up bootstrap" - local _bootstrapdir=$(find $_libdir/dotnet/bootstrap/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) - if [ ! -d "$_cli_root" ]; then - cp -r "$_bootstrapdir" "$_cli_root" - fi - # ensure that dotnet does not download artifacts provided by dotnet-artifacts - rm -rf "$builddir"/packages/archive -} - -build() { - msg "Building $pkgname-$pkgver" - ulimit -n 4096 - - export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - export DOTNET_LTTng=0 - fi - - # looks for most recent recent version of _artifactsdir - local _artifactsdir=$(find $_libdir/dotnet/artifacts/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) - - # ci args, else the output is forwarded to log files which isn't ideal in a - # pipeline environment, and build by defaults uses lots of space - local args=" - /v:minimal - /p:LogVerbosity=minimal - /p:MinimalConsoleLogOutput=true - /p:CleanWhileBuilding=true - " - # disable use of crossgen on arches platforms where its unsupported (mono) - # or broken (armv7, aarch64) - case $CARCH in - x86|aarch64|armv7|armhf|s390x) local args="$args /p:CrossgenOutput=false /p:DISABLE_CROSSGEN=True";; - esac - - # Sets TargetRid manually as dotnet cannot be trusted to reliably compute - # the machine's runtime ID between releases. - # shellcheck disable=SC2034 - . /etc/os-release - local VERSION_ID_DOT="${VERSION_ID//[^.]}" - while [ ${#VERSION_ID_DOT} -gt 1 ]; do - local VERSION_ID="${VERSION_ID%.*}" - local VERSION_ID_DOT="${VERSION_ID//[^.]}" - done - local VERSION_ID_DASH="${VERSION_ID//[^_]}" - while [ ${#VERSION_ID_DASH} -ge 1 ]; do - local VERSION_ID="${VERSION_ID%_*}" - local VERSION_ID_DASH="${VERSION_ID//[^_]}" - done - local args="$args /p:TargetRid=$ID.$VERSION_ID-$_dotnet_arch" - - case "$CARCH" in - x86*) ;; - *) - # clang doesn't implement this outside of x86, and it causes a later configure to fail - export CFLAGS="${CFLAGS/-fstack-clash-protection}" - export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}" - ;; - esac - - ./build.sh \ - --with-sdk "$_cli_root" \ - --with-packages "$_artifactsdir" \ - -- $args -} - -check() { - ulimit -n 4096 - export NUGET_PACKAGES=$_nugetdir - - # Tests timeout (in seconds) - local _tests_timeout=600 - # Test suite disable flags - # following tests can only work after packaging step - local _disabled_tests="man-pages distribution-package bash-completion install-local release-version-sane" - # test broken on all but x86_64 and aarch64: no musl release for omnisharp - if [ "$CARCH" != "x86_64" ] && [ "$CARCH" != "aarch64" ]; then - local _disabled_tests="$_disabled_tests omnisharp" - fi - # test broken: permission issue on lxc / pipelines - local _disabled_tests="$_disabled_tests createdump-aspnet workload" - # liblttng-ust_sys-sdt.h: no 'NT_STAPSDT' on Alpine's lttng-ust package - # lttng: known issue, see https://github.com/dotnet/runtime/issues/57784 - local _disabled_tests="$_disabled_tests liblttng-ust_sys-sdt.h lttng" - # {bundled,system}-libunwind: use system version on all but aarch64/armv7, as broken - # see https://github.com/redhat-developer/dotnet-regular-tests/issues/113 - case $CARCH in - x86_64) local _disabled_tests="$_disabled_tests bundled-libunwind";; - *) local _disabled_tests="$_disabled_tests system-libunwind";; - esac - # publish-ready-to-run: broken due to crossgen2 nupkg on musl-arm64 / musl-arm platform being broken - # should be fixed with https://github.com/dotnet/runtime/pull/66814 - case $CARCH in - aarch64|armv7) local _disabled_tests="$_disabled_tests publish-ready-to-run publish-ready-to-run-linux";; - esac - # test unit hangs - local _disabled_tests="$_disabled_tests debugging-via-dotnet-dump" - - msg "Unpacking produced dotnet" - export DOTNET_ROOT="$_checkdir/release" - if [ ! -d "$DOTNET_ROOT" ]; then - mkdir -p "$DOTNET_ROOT" - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$DOTNET_ROOT" \ - --no-same-owner - fi - export PATH="$DOTNET_ROOT:$PATH" - # some files either should or should not have executable bits - # (done again during packaging - this is for tests) - _fix_executable "$DOTNET_ROOT" - - msg "Building turkey test suite" - mkdir "$_logdir"/check - if [ ! -d "$_checkdir"/turkey ]; then - cd "$_checkdir"/Turkey - dotnet publish -bl:$_logdir/check/turkey.binlog -f netcoreapp3.1 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey - fi - - msg "Running test suite" - cd "$_testdir" - for i in $_disabled_tests; do - if [ -d "$i" ]; then - sed -i 's|"enabled": true|"enabled": false|' $i/test.json - fi - done - dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout -l "$_logdir"/check || local ERROR=true - if [ $ERROR ]; then - msg "Check error reported" - fi -} - -package() { - # directory creation - install -dm 755 \ - "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver \ - "$pkgdir"/usr/share/man/man1 \ - "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver - - # unpack sdk to bootstrap - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ - --no-same-owner - - # extract arch-specific artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --wildcards \ - '*alpine*' - - # assemble docs - find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$pkgdir"/usr/share/man/man1/. \; - - # some files either should or should not have executable bits - _fix_executable "$pkgdir" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - rm "$pkgdir"/$_libdir/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so - fi -} - -sdk() { - pkgdesc="The .NET $_pkgver_macro SDK" - depends=" - aspnetcore$_pkgver_name-runtime - aspnetcore$_pkgver_name-targeting-pack - dotnet$_pkgver_name-apphost-pack - dotnet$_pkgver_name-targeting-pack - dotnet$_pkgver_name-templates - netstandard21-targeting-pack - " - provides=" - dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel - dotnet$_pkgver_name-dev=$pkgver-r$pkgrel - " - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - # sdk - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./sdk ./sdk-manifests - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" - - # See https://github.com/dotnet/source-build/issues/2579 - find "$subpkgdir" -type f -name 'testhost.x86' -delete - find "$subpkgdir" -type f -name 'vstest.console' -delete -} - -netstandard_targeting_pack() { - pkgdesc="The .NET 2.1 Standard targeting pack" - depends="dotnet-host" - provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./packs/NETStandard.Library.Ref - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -templates() { - pkgdesc="The .NET $_pkgver_macro templates" - depends="dotnet-host" - provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./templates - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -artifacts() { - pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" - # hack to allow artifacts to pull itself - provides="dotnet$_pkgver_name-bootstrap-artifacts" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ - "$subpkgdir"/usr/share/licenses - - # extract arch-agnostic artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --exclude '*Intermediate*' \ - --exclude '*alpine*' -} - -zshcomp() { - depends="" - pkgdesc="zsh completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack zsh" - depends="dotnet-host" - - install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet -} - -bashcomp() { - depends="" - pkgdesc="bash completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack bash-completion" - depends="dotnet-host" - - install -dm 755 "$subpkgdir"/usr/share/bash-completion/completions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet -} - -doc() { - default_doc - pkgdesc="Docs for .NET" - - # licenses - install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/usr/share/licenses/dotnet/ \ - --no-same-owner \ - ./LICENSE.txt ./ThirdPartyNotices.txt -} - -sha512sums=" -5f3626aac49cf29c924d30fa81c508be8a45b38914c08b67c1dbec44f7d2b3ff7b6a8126ff4af88d43b972e5e17a712757b762ecf5c99c5f6acd8284ee9b2a3f dotnet-v6.0.125.tar.xz -e9f3df13d093fac214778c1137857e065f58d4e0d2a48d540d8ed7bb41e2fd73b2b3f62a0aa5b0e80fa80a5b58ba77ff19b9d10a492802f8539e3a6ed79d299d dotnet-testsuite-e1cc0f181ffd4d755756d30d985513897d592ba4.tar.gz -fc281df5fcf0d31dc9ff7f5b0e870960cfbe3c4fa0f6a6bb50b22c4ee18d2c608c827205bc79bd7f686d77ac917582fc26f68432cdd86c4a33b910c0c7416d09 dotnet-bunny-71880bd94711519f7b786248a88a827a401207a2.tar.gz -bdc2617791fda07bcc87cf5f8727ac721756810880b14c5472998d6a3e238d85d5a12db7823d1237b17f40945e697a6c9104d1c43816c775cc03920e88572a37 build_14816-non-portable-build.patch -70d402d0bcaa98c8b09652365404238b67ed26eb9c3d510c7d6309fb61937d98c9144f1096e521c11b00e946d29585a9d474498ccc5223de32bd6471ab5a431f build_14816-update-portable-rid-logic.patch -a5a359af816595fbf19482e5dccf874c78d2fc4b59f38223118aac603b33e00c9fed22580eee3112519477205c2c8ed16177d100f09f45275e3da3c20b0ed7f7 build_disable-apphost.diff -e71f91d14873755bc2f227807d909e5260bd1f166a262eda0bf05d4a3975a7bce7fde457c1eba476a83b317aebdaaba25f1893d3385182428c08bba6243f21c8 installer_14816-update-portable-rid-logic.patch -86e14ecc0269c8b2c2a2a679790de4fa4e15ac06b2a831e1129c4a7de1499d60583fcdc79b3705652c3c4ced73afac2e0ee3edce2cfa3b00fddf94180fb26e10 msbuild_optional-systemconfiguration.patch -f4d27624f735ce77e0030fa791594fc12fb325a3ce8620791a7856bd5c0067a042df2196ec97ed4d0309db64bd51e6a48cafaad316d9ea45e34134214a7f3ca4 msbuild_optional-systemsecurity.patch -42779a7bf1004fe0f7054cfa4f09f49d7f2a57c0543ec994ffbd54fb349abb508295476098ed35d60e9676be8bcc15aa8a9ec5c814cd1e058357530b5cdfb2b6 roslyn_57003-mono-namedmutex.patch -e67e0114bd324dae65eb19f6fa8c74414bee77cd30e299931b0d82b4ca1b6b6f88358a0c47ffb180f46c5cb28f61f79bb4a59d43c1ae3011bfe491e757de293a runtime_76500-mono-musl-support.patch -827e899a83103f666dc3d57c1ec695bebc659a574f4a1d754da0cafe8c18d7db79c3950267e905fa078f94612ee1101fbddd0ea62b3c08947d8bcd7d9c8de41c runtime_82269-mono-thread-coop-undefine-fortify-source.patch -91f237afe642d0170dbf0e9a2706a4145c937d9d869d22959acaf092f1fd11941144b2b1d041102abe7b70349dd5869d558896e9d13d01f176cace39b21ef1ef runtime_enable-system-libunwind.diff -d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80 runtime_remove-usage-of-off64-t.patch -d1b4ebcbb1a6815fc0ce4c471485c232618e60968a879309fb8336821a9351d2e0028d9f7726c0c041c750b497a0baa47400c78c9ceff550b91b4a6c2816fc41 sdk_14239-add-zsh-compdef-completion-script.patch -815de1dad37412579b16d763debe2ecceffb44f5c46bd3f4ac00b3e431b20c677db435794eac41cea5601030b4e0f03f19e2d53c7a1ead896de2ffbca787eb84 sdk_telemetry-optout.patch -" diff --git a/community/dotnet6-build/README.md b/community/dotnet6-build/README.md deleted file mode 100644 index cc09eb4..0000000 --- a/community/dotnet6-build/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# dotnet6-build - -This is the .NET 6.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* dotnet6-build (aimed for internal use as bootstrap) -* dotnet6-build-artifacts (aimed for internal use as bootstrap) -* dotnet6-sdk -* dotnet6-templates (required by sdk) -* dotnet-zsh-completion -* dotnet-bash-completion -* dotnet-doc -* netstandard21-targeting-pack - -## How to build dotnet6 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it requires a bootstrap -for the initial build. To solve this problem, this package follows the `stage0` proposal -outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as possible, thus allowing -seamless Alpine upgrades. Unfortunately, upstream only builds bootstraps for Alpine on `x86_64`, -`aarch64`, and `armv7`. Thus, `dotnet6-cross`, a non-standard (read: never to be included in aports) aport, was created to -faciliate cross-compiling bootstraps from `x86_64` to other dotnet supported platforms. -It is [available here](https://gitlab.alpinelinux.org/ayakael/dotnet6-cross) - -In summary, dotnet6 is built using four different aports, three of which are in aports proper: - -* `dotnet6-cross` [available here](https://gitlab.alpinelinux.org/ayakael/dotnet6-cross) -Builds minimum components for dotnet6, and packages these in a tar.gz that `dotnet6-stage0` then uses to build full bootstrap. -* `community/dotnet6-stage0` -Builds full bootstrap for dotnet6, and packages these in an initial `dotnet6-stage0-bootstrap` package that `dotnet6-build` -pulls if `dotnet6-build` has not been built before. -* `community/dotnet6-build -Builds full and packages dotnet6 fully using either stage0 or previoulsy built dotnet6 build. -* `community/dotnet6-runtime -As abuild does not allow different versions for subpackages, a different aport is required to -package runtime bits from dotnet6-build. - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet6` as opposed to `dotnet-6.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports - - `cd community/dotnet6-build` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet6/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet6-build: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports - - `cd community/dotnet6-build` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet6/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet6-build: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/community/dotnet6-build/build_14816-non-portable-build.patch b/community/dotnet6-build/build_14816-non-portable-build.patch deleted file mode 100644 index 8e65e16..0000000 --- a/community/dotnet6-build/build_14816-non-portable-build.patch +++ /dev/null @@ -1,208 +0,0 @@ -From 3008f7ef29e0a5593f6f0afbdc9343f573f1a375 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/installer/pull/14816 -From: Antoine Martin -Date: Tue, 15 Nov 2022 01:04:07 -0500 -Subject: [PATCH 1/3] Eliminate runtime portable build (backport dotnet#14549) - ---- - .../tarball/content/Directory.Build.props | 8 -- - .../tarball/content/repos/aspnetcore.proj | 1 + - .../tarball/content/repos/installer.proj | 2 +- - .../tarball/content/repos/known-good.proj | 1 - - .../content/repos/runtime-portable.proj | 47 ----------- - .../content/repos/runtime.common.props | 43 ---------- - .../content/repos/runtime.common.targets | 46 ----------- - .../tarball/content/repos/runtime.proj | 82 ++++++++++++++++++- - .../source-build-reference-packages.proj | 4 +- - src/redist/targets/Crossgen.targets | 2 +- - src/redist/targets/GenerateLayout.targets | 3 + - 11 files changed, 88 insertions(+), 151 deletions(-) - delete mode 100644 repos/runtime-portable.proj - delete mode 100644 repos/runtime.common.props - delete mode 100644 repos/runtime.common.targets - -diff --git a/Directory.Build.props b/Directory.Build.props -index 61cc6ff67..2e2d7e8bc 100644 ---- a/Directory.Build.props -+++ b/Directory.Build.props -@@ -22,14 +22,6 @@ - x64 - - false -- -- -- false -- false -- true -- false - - - -diff --git a/repos/aspnetcore.proj b/repos/aspnetcore.proj -index 480f3c713..52243024a 100644 ---- a/repos/aspnetcore.proj -+++ b/repos/aspnetcore.proj -@@ -9,6 +9,7 @@ - $(BuildCommandArgs) --no-build-repo-tasks - $(BuildCommandArgs) /p:BuildNodeJs=false - $(BuildCommandArgs) /p:PublishCompressedFilesPathPrefix=$(SourceBuiltAspNetCoreRuntime) -+ $(BuildCommandArgs) /p:PortableBuild=false /p:TargetRuntimeIdentifier=$(TargetRid) - - $(BuildCommandArgs) /p:MicrosoftNetFrameworkReferenceAssembliesVersion=1.0.0 -diff --git a/repos/installer.proj.orig b/repos/installer.proj -index 0df0c8f7c03..95d47c94152 100644 ---- a/repos/installer.proj.orig -+++ b/repos/installer.proj -@@ -30,7 +30,7 @@ - $(BuildCommandArgs) /p:Rid=$(TargetRid) - $(BuildCommandArgs) /p:DOTNET_INSTALL_DIR=$(DotNetCliToolDir) - -- $(BuildCommandArgs) /p:AspNetCoreInstallerRid=$(PortableRid) -+ $(BuildCommandArgs) /p:AspNetCoreInstallerRid=$(TargetRid) - - $(BuildCommandArgs) /p:CoreSetupRid=freebsd-x64 /p:PortableBuild=true - $(BuildCommandArgs) /p:CoreSetupRid=osx-x64 -diff --git a/repos/known-good.proj b/repos/known-good.proj -index eab516290..12d9943da 100644 ---- a/repos/known-good.proj -+++ b/repos/known-good.proj -@@ -44,7 +44,6 @@ - - - -- - - - -diff --git a/repos/runtime.proj b/repos/runtime.proj -index f3ed143f8..efd8b66fa 100644 ---- a/repos/runtime.proj -+++ b/repos/runtime.proj -@@ -1,18 +1,53 @@ - -- -+ - -+ - -+ true -+ -+ $(ProjectDirectory)/clean$(ShellExtension) -+ - $(TargetRid) - osx-x64 - freebsd-x64 - win-x64 - -+ <_platformIndex>$(NETCoreSdkRuntimeIdentifier.LastIndexOf('-')) -+ $(NETCoreSdkRuntimeIdentifier.Substring(0, $(_platformIndex))) -+ -+ <_platformIndex>$(NETCoreSdkPortableRuntimeIdentifier.LastIndexOf('-')) -+ $(NETCoreSdkPortableRuntimeIdentifier.Substring(0, $(_platformIndex))) -+ - $(StandardSourceBuildArgs) - $(BuildCommandArgs) /p:TargetRid=$(OverrideTargetRid) -+ $(BuildCommandArgs) /p:RuntimeOS=$(RuntimeOS) -+ $(BuildCommandArgs) /p:BaseOS=$(BaseOS) - $(BuildCommandArgs) /p:SourceBuildNonPortable=true - $(StandardSourceBuildCommand) $(BuildCommandArgs) - - -+ -+ -+ $(ProjectDirectory)global.json -+ $(ProjectDirectory)NuGet.config -+ false -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -@@ -20,8 +55,49 @@ - - - -- - - -- -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ $(ProjectDirectory)pkg/Microsoft.NETCore.Platforms/runtime.json -+ -+ -+ -+ -+ -+ -+ -+ -+ <_builtRuntimePackages Include="$(SourceBuiltAssetsDir)*.symbols.nupkg" /> -+ <_builtRuntimePackages> -+ $([System.String]::Copy('%(FileName)').Replace('symbols', 'nupkg')) -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - -diff --git a/repos/source-build-reference-packages.proj b/repos/source-build-reference-packages.proj -index 69ab564a2..9545b50e4 100644 ---- a/repos/source-build-reference-packages.proj -+++ b/repos/source-build-reference-packages.proj -@@ -2,7 +2,9 @@ - - - -- $(StandardSourceBuildCommand) $(StandardSourceBuildArgs) -+ $(StandardSourceBuildArgs) -+ $(BuildCommandArgs) /p:MicrosoftNetCoreIlasmPackageRuntimeId=$(NETCoreSdkRuntimeIdentifier) -+ $(StandardSourceBuildCommand) $(BuildCommandArgs) - - $(ProjectDirectory)NuGet.config - $(ProjectDirectory)global.json --- -2.38.2 - diff --git a/community/dotnet6-build/build_14816-update-portable-rid-logic.patch b/community/dotnet6-build/build_14816-update-portable-rid-logic.patch deleted file mode 100644 index 3c411e3..0000000 --- a/community/dotnet6-build/build_14816-update-portable-rid-logic.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 5ee269eef8bd02d066151deaa4d8c0fe6b6cbce4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/installer/pull/14816 -From: Antoine Martin -Date: Tue, 15 Nov 2022 01:04:46 -0500 -Subject: [PATCH 2/3] BundledVersions: update portable rid logic (backport - dotnet#14647) - ---- - .../tarball/content/repos/installer.proj | 5 +++++ - src/redist/targets/GetRuntimeInformation.targets | 16 ++++++++++------ - 2 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/repos/installer.proj b/repos/installer.proj -index 6c08a1f67..95d47c941 100644 ---- a/repos/installer.proj -+++ b/repos/installer.proj -@@ -10,6 +10,10 @@ - osx-x64 - $(OverrideTargetRid.Substring(0, $(OverrideTargetRid.IndexOf("-")))) - -+ -+ <_platformIndex>$(NETCoreSdkPortableRuntimeIdentifier.LastIndexOf('-')) -+ $(NETCoreSdkPortableRuntimeIdentifier.Substring(0, $(_platformIndex))) -+ - --runtime-id $(OverrideTargetRid) - --runtime-id $(TargetRid) - -@@ -22,6 +26,7 @@ - --> - $(BuildCommandArgs) /p:NETCoreAppMaximumVersion=99.9 - $(BuildCommandArgs) /p:OSName=$(OSNameOverride) -+ $(BuildCommandArgs) /p:PortableOSName=$(PortableOS) - $(BuildCommandArgs) /p:Rid=$(TargetRid) - $(BuildCommandArgs) /p:DOTNET_INSTALL_DIR=$(DotNetCliToolDir) - --- -2.38.2 - diff --git a/community/dotnet6-build/build_disable-apphost.diff b/community/dotnet6-build/build_disable-apphost.diff deleted file mode 100644 index 317a915..0000000 --- a/community/dotnet6-build/build_disable-apphost.diff +++ /dev/null @@ -1,79 +0,0 @@ -From 75c3e74ea35219f257c80daf9a236e0f518a7875 Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Wed, 9 Mar 2022 20:16:03 +0000 -Subject: [PATCH 1/1] Disable apphost - -Disables use of apphost - ---- - ---- a/src/fsharp/tests/benchmarks/MicroPerf/MicroPerf.fsproj -+++ b/src/fsharp/tests/benchmarks/MicroPerf/MicroPerf.fsproj -@@ -9,6 +9,7 @@ - $(OtherFlags) --nowarn:57 - $(OtherFlags) --langversion:preview - $(OtherFlags) --define:PREVIEW -+ false - - - - $(OtherFlags) --nowarn:1204 - ---- a/src/arcade/src/Microsoft.DotNet.GitSync.CommitManager/Microsoft.DotNet.GitSync.CommitManager.csproj -+++ b/src/arcade/src/Microsoft.DotNet.GitSync.CommitManager/Microsoft.DotNet.GitSync.CommitManager.csproj -@@ -5,6 +5,7 @@ - netcoreapp3.1 - latest - true -+ false - - - ---- a/src/arcade/src/Microsoft.DotNet.SwaggerGenerator/Microsoft.DotNet.SwaggerGenerator.CmdLine/Microsoft.DotNet.SwaggerGenerator.CmdLine.csproj -+++ b/src/arcade/src/Microsoft.DotNet.SwaggerGenerator/Microsoft.DotNet.SwaggerGenerator.CmdLine/Microsoft.DotNet.SwaggerGenerator.CmdLine.csproj -@@ -9,6 +9,7 @@ - dotnet-swaggergen - false - true -+ false - - - ---- a/src/arcade/src/Microsoft.DotNet.XUnitConsoleRunner/src/Microsoft.DotNet.XUnitConsoleRunner.csproj -+++ b/src/arcade/src/Microsoft.DotNet.XUnitConsoleRunner/src/Microsoft.DotNet.XUnitConsoleRunner.csproj -@@ -11,6 +11,7 @@ - 2.5.1 - true - Major -+ false - - - ---- a/src/roslyn-analyzers/src/Tools/ReleaseNotesUtil/ReleaseNotesUtil.csproj -+++ b/src/roslyn-analyzers/src/Tools/ReleaseNotesUtil/ReleaseNotesUtil.csproj -@@ -4,6 +4,7 @@ - netcoreapp3.1 - true - true -+ false - - - ---- a/src/roslyn/src/Workspaces/Remote/ServiceHub.CoreComponents/Microsoft.CodeAnalysis.Remote.ServiceHub.CoreComponents.csproj -+++ b/src/roslyn/src/Workspaces/Remote/ServiceHub.CoreComponents/Microsoft.CodeAnalysis.Remote.ServiceHub.CoreComponents.csproj -@@ -5,6 +5,7 @@ - Exe - netcoreapp3.1 - -+ false - false - - diff --git a/community/dotnet6-build/installer_14816-update-portable-rid-logic.patch b/community/dotnet6-build/installer_14816-update-portable-rid-logic.patch deleted file mode 100644 index 53f2335..0000000 --- a/community/dotnet6-build/installer_14816-update-portable-rid-logic.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 5ee269eef8bd02d066151deaa4d8c0fe6b6cbce4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/installer/pull/14816 -From: Antoine Martin -Date: Tue, 15 Nov 2022 01:04:46 -0500 -Subject: [PATCH 2/3] BundledVersions: update portable rid logic (backport - dotnet#14647) - ---- - .../tarball/content/repos/installer.proj | 5 +++++ - src/redist/targets/GetRuntimeInformation.targets | 16 ++++++++++------ - 2 files changed, 15 insertions(+), 6 deletions(-) - -diff --git a/src/installer/src/redist/targets/GetRuntimeInformation.targets b/src/installer/src/redist/targets/GetRuntimeInformation.targets -index a99a7e9da..89f000119 100644 ---- a/src/installer/src/redist/targets/GetRuntimeInformation.targets -+++ b/src/installer/src/redist/targets/GetRuntimeInformation.targets -@@ -9,10 +9,15 @@ - osx - freebsd - linux -- -+ -+ $(Rid.Substring(0, $(Rid.LastIndexOf('-')))) - $(HostOSName) - -- $(OSName)-$(Architecture) -+ $(OSName) -+ -+ $(OSName)-$(Architecture) -+ -+ $(PortableOSName)-$(Architecture) - - - -@@ -23,10 +28,9 @@ - - - -- $(Rid) -- $(OSName)-$(Architecture) -+ $(Rid) -+ -+ $(PortableRid) - - $(HostOSName)-$(Architecture) - --- -2.38.2 - diff --git a/community/dotnet6-build/msbuild_optional-systemconfiguration.patch b/community/dotnet6-build/msbuild_optional-systemconfiguration.patch deleted file mode 100644 index b28c8be..0000000 --- a/community/dotnet6-build/msbuild_optional-systemconfiguration.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 26a12cb531161e1fc3d6ec1f2a241e1c516ca775 Mon Sep 17 00:00:00 2001 -Patch-Source: https://src.fedoraproject.org/rpms/dotnet6.0/blob/src/msbuild/rawhide/f/msbuild-no-systemconfiguration.patch -From: Antoine Martin -Date: Fri, 21 Oct 2022 14:13:04 -0400 -Subject: [PATCH 1/2] optional-systemconfiguration - -Fix mono-specific runtime crashes running msbuild. CoreCLR does not -load types that are not actually used/invoked at runtime, while mono -does. System.Configuration and System.Security are missing in -source-build builds, which breaks msbuild. - ---- - src/Build/Definition/ProjectCollection.cs | 4 ++++ - src/Build/Definition/ToolsetReader.cs | 8 ++++++++ - 2 files changed, 12 insertions(+) - -diff --git a/src/msbuild/src/Build/Definition/ProjectCollection.cs b/src/msbuild/src/Build/Definition/ProjectCollection.cs -index 8629bd943..6a550e32d 100644 ---- a/src/msbuild/src/Build/Definition/ProjectCollection.cs -+++ b/src/msbuild/src/Build/Definition/ProjectCollection.cs -@@ -1754,7 +1754,11 @@ namespace Microsoft.Build.Evaluation - #if FEATURE_WIN32_REGISTRY - ToolsetRegistryReader registryReader = null, - #endif -+#if FEATURE_SYSTEM_CONFIGURATION - ToolsetConfigurationReader configReader = null -+#else -+ object configReader = null -+#endif - ) - { - _toolsets = new Dictionary(StringComparer.OrdinalIgnoreCase); -diff --git a/src/msbuild/src/Build/Definition/ToolsetReader.cs b/src/msbuild/src/Build/Definition/ToolsetReader.cs -index 869b3318e..c6b95d3cf 100644 ---- a/src/msbuild/src/Build/Definition/ToolsetReader.cs -+++ b/src/msbuild/src/Build/Definition/ToolsetReader.cs -@@ -101,7 +101,11 @@ namespace Microsoft.Build.Evaluation - #if FEATURE_WIN32_REGISTRY - ToolsetRegistryReader registryReader, - #endif -+#if FEATURE_SYSTEM_CONFIGURATION - ToolsetConfigurationReader configurationReader, -+#else -+ object _configurationReader, -+#endif - PropertyDictionary environmentProperties, - PropertyDictionary globalProperties, - ToolsetDefinitionLocations locations -@@ -120,6 +124,7 @@ namespace Microsoft.Build.Evaluation - - if ((locations & ToolsetDefinitionLocations.ConfigurationFile) == ToolsetDefinitionLocations.ConfigurationFile) - { -+#if FEATURE_SYSTEM_CONFIGURATION - if (configurationReader == null) - { - configurationReader = new ToolsetConfigurationReader(environmentProperties, globalProperties); -@@ -129,6 +134,9 @@ namespace Microsoft.Build.Evaluation - defaultToolsVersionFromConfiguration = configurationReader.ReadToolsets(toolsets, globalProperties, - initialProperties, true /* accumulate properties */, out overrideTasksPathFromConfiguration, - out defaultOverrideToolsVersionFromConfiguration); -+#else -+ throw new InvalidOperationException("ToolsetDefinitionLocations.ConfigurationFile not supported"); -+#endif - } - - string defaultToolsVersionFromRegistry = null; --- -2.36.3 - diff --git a/community/dotnet6-build/msbuild_optional-systemsecurity.patch b/community/dotnet6-build/msbuild_optional-systemsecurity.patch deleted file mode 100644 index 02429f9..0000000 --- a/community/dotnet6-build/msbuild_optional-systemsecurity.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 06707ec777769f1756230caf54391302e4378777 Mon Sep 17 00:00:00 2001 -Patch-Source: https://src.fedoraproject.org/rpms/dotnet6.0/blob/src/msbuild/rawhide/f/msbuild-no-systemsecurity.patch -From: Antoine Martin -Date: Fri, 21 Oct 2022 14:13:29 -0400 -Subject: [PATCH 2/2] optional-systemsecurity - -Fix mono-specific runtime crashes running msbuild. CoreCLR does not -load types that are not actually used/invoked at runtime, while mono -does. System.Configuration and System.Security are missing in -source-build builds, which breaks msbuild. - ---- - src/Shared/ExceptionHandling.cs | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/msbuild/src/Shared/ExceptionHandling.cs b/src/msbuild/src/Shared/ExceptionHandling.cs -index 16a0576b5..1c7cd5967 100644 ---- a/src/msbuild/src/Shared/ExceptionHandling.cs -+++ b/src/msbuild/src/Shared/ExceptionHandling.cs -@@ -153,7 +153,9 @@ namespace Microsoft.Build.Shared - internal static bool IsXmlException(Exception e) - { - return e is XmlException -+#if FEATURE_SECURITY_PERMISSIONS - || e is XmlSyntaxException -+#endif - || e is XmlSchemaException - || e is UriFormatException; // XmlTextReader for example uses this under the covers - } --- -2.36.3 - diff --git a/community/dotnet6-build/roslyn_57003-mono-namedmutex.patch b/community/dotnet6-build/roslyn_57003-mono-namedmutex.patch deleted file mode 100644 index 74a19ce..0000000 --- a/community/dotnet6-build/roslyn_57003-mono-namedmutex.patch +++ /dev/null @@ -1,470 +0,0 @@ -From 210c17ea60f525837a7525df73e7332598ad4089 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/roslyn/pull/57003 -From: Antoine Martin -Date: Sat, 27 Aug 2022 21:26:01 -0800 -Subject: [PATCH 1/1] mono-named-mutex - ---- - .../InternalUtilities/PlatformInformation.cs | 19 ++ - .../VBCSCompilerTests/BuildClientTests.cs | 2 +- - .../CompilerServerApiTest.cs | 4 +- - .../VBCSCompilerTests/CompilerServerTests.cs | 4 +- - .../VBCSCompilerServerTests.cs | 7 +- - src/Compilers/Shared/BuildServerConnection.cs | 251 +++++++++++------- - 6 files changed, 182 insertions(+), 105 deletions(-) - -diff --git a/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs b/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs -index 033e66cd2f2..d4fa56413fb 100644 ---- a/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs -+++ b/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs -@@ -31,5 +31,24 @@ public static bool IsRunningOnMono - } - } - } -+ /// -+ /// Are we running on .NET 5 or later using the Mono runtime? -+ /// Will also return true when running on Mono itself; if necessary -+ /// we can use IsRunningOnMono to distinguish. -+ /// -+ public static bool IsUsingMonoRuntime -+ { -+ get -+ { -+ try -+ { -+ return !(Type.GetType("Mono.RuntimeStructs", throwOnError: false) is null); -+ } -+ catch -+ { -+ return false; -+ } -+ } -+ } - } - } -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs -index 669d1bfb676..7f1d0468823 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs -@@ -79,7 +79,7 @@ public void ConnectToServerFails() - // to connect. When it fails it should fall back to in-proc - // compilation. - bool holdsMutex; -- using (var serverMutex = new Mutex(initiallyOwned: true, -+ using (var serverMutex = BuildServerConnection.OpenOrCreateMutex( - name: BuildServerConnection.GetServerMutexName(_pipeName), - createdNew: out holdsMutex)) - { -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs -index 0dbd1b2e143..c00b72e8434 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs -@@ -103,7 +103,7 @@ public void MutexStopsServerStarting() - var mutexName = BuildServerConnection.GetServerMutexName(pipeName); - - bool holdsMutex; -- using (var mutex = new Mutex(initiallyOwned: true, -+ using (var mutex = BuildServerConnection.OpenOrCreateMutex( - name: mutexName, - createdNew: out holdsMutex)) - { -@@ -119,7 +119,7 @@ public void MutexStopsServerStarting() - } - finally - { -- mutex.ReleaseMutex(); -+ mutex.Dispose(); - } - } - } -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs -index 3b6f4f291ff..e97a6bf923f 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs -@@ -304,7 +304,7 @@ public async Task ServerFailsWithLongTempPathUnix() - var newTempDir = _tempDirectory.CreateDirectory(new string('a', 100 - _tempDirectory.Path.Length)); - await ApplyEnvironmentVariables( - new[] { new KeyValuePair("TMPDIR", newTempDir.Path) }, -- async () => -+ async () => await Task.Run(async () => - { - using var serverData = await ServerUtil.CreateServer(_logger); - var result = RunCommandLineCompiler( -@@ -317,7 +317,7 @@ public async Task ServerFailsWithLongTempPathUnix() - - var listener = await serverData.Complete(); - Assert.Equal(CompletionData.RequestCompleted, listener.CompletionDataList.Single()); -- }); -+ })); - } - - [Fact] -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs -index d5f493fed8a..73941972e48 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs -@@ -101,7 +101,7 @@ public async Task NoServerConnection() - - var thread = new Thread(() => - { -- using (var mutex = new Mutex(initiallyOwned: true, name: mutexName, createdNew: out created)) -+ using (var mutex = BuildServerConnection.OpenOrCreateMutex(name: mutexName, createdNew: out created)) - using (var stream = NamedPipeUtil.CreateServer(pipeName)) - { - readyMre.Set(); -@@ -112,7 +112,7 @@ public async Task NoServerConnection() - stream.Close(); - - doneMre.WaitOne(); -- mutex.ReleaseMutex(); -+ mutex.Dispose(); - } - }); - -@@ -153,7 +153,7 @@ public async Task ServerShutdownsDuringProcessing() - { - using (var stream = NamedPipeUtil.CreateServer(pipeName)) - { -- var mutex = new Mutex(initiallyOwned: true, name: mutexName, createdNew: out created); -+ var mutex = BuildServerConnection.OpenOrCreateMutex(name: mutexName, createdNew: out created); - readyMre.Set(); - - stream.WaitForConnection(); -@@ -161,7 +161,6 @@ public async Task ServerShutdownsDuringProcessing() - - // Client is waiting for a response. Close the mutex now. Then close the connection - // so the client gets an error. -- mutex.ReleaseMutex(); - mutex.Dispose(); - stream.Close(); - -diff --git a/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs b/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs -index f67c2d83957..1fe609061ee 100644 ---- a/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs -+++ b/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs -@@ -543,19 +543,10 @@ internal static bool WasServerMutexOpen(string mutexName) - { - try - { -- if (PlatformInformation.IsRunningOnMono) -+ if (PlatformInformation.IsUsingMonoRuntime) - { -- IServerMutex? mutex = null; -- bool createdNew = false; -- try -- { -- mutex = new ServerFileMutexPair(mutexName, false, out createdNew); -- return !createdNew; -- } -- finally -- { -- mutex?.Dispose(); -- } -+ using var mutex = new ServerFileMutex(mutexName); -+ return !mutex.CouldLock(); - } - else - { -@@ -572,9 +563,11 @@ internal static bool WasServerMutexOpen(string mutexName) - - internal static IServerMutex OpenOrCreateMutex(string name, out bool createdNew) - { -- if (PlatformInformation.IsRunningOnMono) -+ if (PlatformInformation.IsUsingMonoRuntime) - { -- return new ServerFileMutexPair(name, initiallyOwned: true, out createdNew); -+ var mutex = new ServerFileMutex(name); -+ createdNew = mutex.TryLock(0); -+ return mutex; - } - else - { -@@ -648,19 +641,22 @@ internal interface IServerMutex : IDisposable - } - - /// -- /// An interprocess mutex abstraction based on OS advisory locking (FileStream.Lock/Unlock). -+ /// An interprocess mutex abstraction based on file sharing permission (FileShare.None). - /// If multiple processes running as the same user create FileMutex instances with the same name, - /// those instances will all point to the same file somewhere in a selected temporary directory. -- /// The TryLock method can be used to attempt to acquire the mutex, with Unlock or Dispose used to release. -+ /// The TryLock method can be used to attempt to acquire the mutex, with Dispose used to release. -+ /// The CouldLock method can be used to check whether an attempt to acquire the mutex would have -+ /// succeeded at the current time, without actually acquiring it. - /// Unlike Win32 named mutexes, there is no mechanism for detecting an abandoned mutex. The file - /// will simply revert to being unlocked but remain where it is. - /// -- internal sealed class FileMutex : IDisposable -+ internal sealed class ServerFileMutex : IServerMutex - { -- public readonly FileStream Stream; -+ public FileStream? Stream; - public readonly string FilePath; -+ public readonly string GuardPath; - -- public bool IsLocked { get; private set; } -+ public bool IsDisposed { get; private set; } - - internal static string GetMutexDirectory() - { -@@ -670,61 +666,176 @@ internal static string GetMutexDirectory() - return result; - } - -- public FileMutex(string name) -+ public ServerFileMutex(string name) - { -- FilePath = Path.Combine(GetMutexDirectory(), name); -- Stream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); -+ var mutexDirectory = GetMutexDirectory(); -+ FilePath = Path.Combine(mutexDirectory, name); -+ GuardPath = Path.Combine(mutexDirectory, ".guard"); - } - -- public bool TryLock(int timeoutMs) -+ /// -+ /// Acquire the guard by opening the guard file with FileShare.None. The guard must only ever -+ /// be held for very brief amounts of time, so we can simply spin until it is acquired. The -+ /// guard must be released by disposing the FileStream returned from this routine. Note the -+ /// guard file is never deleted; this is a leak, but only of a single file. -+ /// -+ internal FileStream LockGuard() - { -- if (IsLocked) -- throw new InvalidOperationException("Lock already held"); -- -- var sw = Stopwatch.StartNew(); -- do -+ // We should be able to acquire the guard quickly. Limit the number of retries anyway -+ // by some arbitrary bound to avoid getting hung up in a possibly infinite loop. -+ for (var i = 0; i < 100; i++) - { - try - { -- Stream.Lock(0, 0); -- IsLocked = true; -- return true; -+ return new FileStream(GuardPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); - } - catch (IOException) - { -- // Lock currently held by someone else. -+ // Guard currently held by someone else. - // We want to sleep for a short period of time to ensure that other processes - // have an opportunity to finish their work and relinquish the lock. - // Spinning here (via Yield) would work but risks creating a priority - // inversion if the lock is held by a lower-priority process. - Thread.Sleep(1); - } -+ } -+ // Handle unexpected failure to acquire guard as error. -+ throw new InvalidOperationException("Unable to acquire guard"); -+ } -+ -+ /// -+ /// Attempt to acquire the lock by opening the lock file with FileShare.None. Sets "Stream" -+ /// and returns true if successful, returns false if the lock is already held by another -+ /// thread or process. Guard must be held when calling this routine. -+ /// -+ internal bool TryLockFile() -+ { -+ Debug.Assert(Stream is null); -+ FileStream? stream = null; -+ try -+ { -+ stream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); -+ // On some targets, the file locking used to implement FileShare.None may not be -+ // atomic with opening/creating the file. This creates a race window when another -+ // thread holds the lock and is just about to unlock: we may be able to open the -+ // file here, then the other thread unlocks and deletes the file, and then we -+ // acquire the lock on our file handle - but the actual file is already deleted. -+ // To close this race, we verify that the file does in fact still exist now that -+ // we have successfull acquired the locked FileStream. (Note that this check is -+ // safe because we cannot race with an other attempt to create the file since we -+ // hold the guard, and after the FileStream constructor returned we can no race -+ // with file deletion because we hold the lock.) -+ if (!File.Exists(FilePath)) -+ { -+ // To simplify the logic, we treat this case as "unable to acquire the lock" -+ // because it we caught another process while it owned the lock and was just -+ // giving it up. If the caller retries, we'll likely acquire the lock then. -+ stream.Dispose(); -+ return false; -+ } -+ } -+ catch (Exception) -+ { -+ stream?.Dispose(); -+ return false; -+ } -+ Stream = stream; -+ return true; -+ } -+ -+ /// -+ /// Release the lock by deleting the lock file and disposing "Stream". -+ /// -+ internal void UnlockFile() -+ { -+ Debug.Assert(Stream is not null); -+ try -+ { -+ // Delete the lock file while the stream is not yet disposed -+ // and we therefore still hold the FileShare.None exclusion. -+ // There may still be a race with another thread attempting a -+ // TryLockFile in parallel, but that is safely handled there. -+ File.Delete(FilePath); -+ } -+ finally -+ { -+ Stream.Dispose(); -+ Stream = null; -+ } -+ } -+ -+ public bool TryLock(int timeoutMs) -+ { -+ if (IsDisposed) -+ throw new ObjectDisposedException("Mutex"); -+ if (Stream is not null) -+ throw new InvalidOperationException("Lock already held"); -+ -+ var sw = Stopwatch.StartNew(); -+ do -+ { -+ try -+ { -+ // Attempt to acquire lock while holding guard. -+ using var guard = LockGuard(); -+ if (TryLockFile()) -+ return true; -+ } - catch (Exception) - { -- // Something else went wrong. - return false; - } -+ -+ // See comment in LockGuard. -+ Thread.Sleep(1); - } while (sw.ElapsedMilliseconds < timeoutMs); - - return false; - } - -- public void Unlock() -+ public bool CouldLock() - { -- if (!IsLocked) -- return; -- Stream.Unlock(0, 0); -- IsLocked = false; -+ if (IsDisposed) -+ return false; -+ if (Stream is not null) -+ return false; -+ -+ try -+ { -+ // Attempt to acquire lock while holding guard, and if successful -+ // immediately unlock again while still holding guard. This ensures -+ // no other thread will spuriously observe the lock as held due to -+ // the lock attempt here. -+ using var guard = LockGuard(); -+ if (TryLockFile()) -+ { -+ UnlockFile(); -+ return true; -+ } -+ } -+ catch (Exception) -+ { -+ return false; -+ } -+ -+ return false; - } - - public void Dispose() - { -- var wasLocked = IsLocked; -- if (wasLocked) -- Unlock(); -- Stream.Dispose(); -- // We do not delete the lock file here because there is no reliable way to perform a -- // 'delete if no one has the file open' operation atomically on *nix. This is a leak. -+ if (IsDisposed) -+ return; -+ IsDisposed = true; -+ if (Stream is not null) -+ { -+ try -+ { -+ UnlockFile(); -+ } -+ catch (Exception) -+ { -+ } -+ } - } - } - -@@ -792,56 +903,4 @@ public void Dispose() - } - } - } -- -- /// -- /// Approximates a named mutex with 'locked', 'unlocked' and 'abandoned' states. -- /// There is no reliable way to detect whether a mutex has been abandoned on some target platforms, -- /// so we use the AliveMutex to manually track whether the creator of a mutex is still running, -- /// while the HeldMutex represents the actual lock state of the mutex. -- /// -- internal sealed class ServerFileMutexPair : IServerMutex -- { -- public readonly FileMutex AliveMutex; -- public readonly FileMutex HeldMutex; -- -- public bool IsDisposed { get; private set; } -- -- public ServerFileMutexPair(string mutexName, bool initiallyOwned, out bool createdNew) -- { -- AliveMutex = new FileMutex(mutexName + "-alive"); -- HeldMutex = new FileMutex(mutexName + "-held"); -- createdNew = AliveMutex.TryLock(0); -- if (initiallyOwned && createdNew) -- { -- if (!TryLock(0)) -- throw new Exception("Failed to lock mutex after creating it"); -- } -- } -- -- public bool TryLock(int timeoutMs) -- { -- if (IsDisposed) -- throw new ObjectDisposedException("Mutex"); -- return HeldMutex.TryLock(timeoutMs); -- } -- -- public void Dispose() -- { -- if (IsDisposed) -- return; -- IsDisposed = true; -- -- try -- { -- HeldMutex.Unlock(); -- AliveMutex.Unlock(); -- } -- finally -- { -- AliveMutex.Dispose(); -- HeldMutex.Dispose(); -- } -- } -- } -- - } --- -2.36.2 diff --git a/community/dotnet6-build/runtime_75597-support-building-runtime-with-non-portable-runtime.patch b/community/dotnet6-build/runtime_75597-support-building-runtime-with-non-portable-runtime.patch deleted file mode 100644 index 64717d1..0000000 --- a/community/dotnet6-build/runtime_75597-support-building-runtime-with-non-portable-runtime.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 9a05b184f74fc299ddd33bccb74d153e0692d8c8 Mon Sep 17 00:00:00 2001 -From: Tom Deseyn -Date: Wed, 14 Sep 2022 11:06:42 +0200 -Subject: [PATCH 1/8] source-build: support building runtime using non-portable - runtime packages. - -Currently source-build performs a 'runtime-portable' build that produces -'linux-{arch}' packages that are used when building target runtime (non-portable). - -With this change, we can use the non-portable packages that are produced by -a previous (non-portable) 'runtime' build. This helps eliminate the -'runtime-portable' build. - ---- - src/runtime/Directory.Build.targets | 15 ++++ - src/runtime/Directory.Build.targets.orig | 96 ++++++++++++++++++++++++ - 2 files changed, 111 insertions(+) - create mode 100644 src/runtime/Directory.Build.targets.orig - -diff --git a/src/runtime/Directory.Build.targets b/src/runtime/Directory.Build.targets -index d0c698797..4337207a4 100644 ---- a/src/runtime/Directory.Build.targets -+++ b/src/runtime/Directory.Build.targets -@@ -11,6 +11,21 @@ - - - -+ -+ -+ -+ $(PackageRID) -+ -+ -+ $(PackageRID) -+ -+ -+ -+ -+ - - - - <_MonoCFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoCFLAGS Include="-Wno-strict-prototypes" /> - <_MonoCXXFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoCXXFLAGS Include="-Wno-strict-prototypes" /> - - - <_MonoAOTCFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoAOTCFLAGS Include="-Wno-strict-prototypes" /> - <_MonoAOTCXXFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoAOTCXXFLAGS Include="-Wno-strict-prototypes" /> - - - -@@ -500,15 +504,15 @@ - darwin-x86_64 - windows-x86_64 - <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) -- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true'">gnu -- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true'">android -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true'">alpine-linux-musl -+ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true'">linux-android - <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true'">hf - <_Objcopy>objcopy -- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm' and '$(CrossBuild)' == 'true'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm64' and '$(CrossBuild)' == 'true'">aarch64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 's390x' and '$(CrossBuild)' == 'true'">s390x-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x64' and '$(CrossBuild)' == 'true'">x86_64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x86' and '$(CrossBuild)' == 'true'">i686-$(_LinuxAbi)-$(_Objcopy) - <_Objcopy Condition="'$(TargetsAndroid)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/$(_Objcopy) - - -diff --git a/src/runtime/src/mono/mono/metadata/domain.c b/src/runtime/src/mono/mono/metadata/domain.c -index 4a8e06d28ae..e9868bd1b2c 100644 ---- a/src/runtime/src/mono/mono/metadata/domain.c -+++ b/src/runtime/src/mono/mono/metadata/domain.c -@@ -138,6 +138,14 @@ create_root_domain (void) - return domain; - } - -+static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void -+ensure_stack_size (void) -+{ -+ const int default_size = 5 * 1024 * 1024; -+ volatile uint8_t *s = (uint8_t *)g_alloca(default_size); -+ *s = 0; -+} -+ - /** - * mono_init_internal: - * -@@ -181,6 +189,8 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * - - mono_counters_register ("Max HashTable Chain Length", MONO_COUNTER_INT|MONO_COUNTER_METADATA, &mono_g_hash_table_max_chain_length); - -+ ensure_stack_size (); -+ - mono_gc_base_init (); - mono_thread_info_attach (); - -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 128ed08f45b..17cbe696c4b 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -364,6 +364,11 @@ if(NOT DISABLE_SHARED_LIBS) - set_target_properties(monosgen-shared PROPERTIES IMPORT_SUFFIX ".import.lib") - endif() - target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${ICONV_LIB} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(monosgen-shared PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - if(ICU_LDFLAGS) - set_property(TARGET monosgen-shared APPEND_STRING PROPERTY LINK_FLAGS " ${ICU_LDFLAGS}") - endif() -@@ -488,6 +493,11 @@ if(NOT DISABLE_EXECUTABLES) - set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) - endif() - target_link_libraries(mono-sgen PRIVATE monosgen-static ${OS_LIBS} ${ICONV_LIB} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(mono-sgen PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h -index bd1a3cd0104..db4ba452bcb 100644 ---- a/src/runtime/src/mono/mono/utils/mono-context.h -+++ b/src/runtime/src/mono/mono/utils/mono-context.h -@@ -11,6 +11,14 @@ - #ifndef __MONO_MONO_CONTEXT_H__ - #define __MONO_MONO_CONTEXT_H__ - -+/* -+ * Handle non-gnu libc versions with nothing in features.h -+ * We have no idea what they're compatible with, so always fail. -+ */ -+#ifndef __GLIBC_PREREQ -+# define __GLIBC_PREREQ(x,y) 0 -+#endif -+ - #include "mono-compiler.h" - #include "mono-sigcontext.h" - #include "mono-machine.h" --- -2.36.3 - diff --git a/community/dotnet6-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch b/community/dotnet6-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch deleted file mode 100644 index aa34ceb..0000000 --- a/community/dotnet6-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/82269 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Undefine fortify-source on mono-thread-coop - -When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. -which makes mono-flavored runtime dump its core. This patch offers a workaround -by undefining _FORTIFY_SOURCE in the problematic file. - -See: https://github.com/dotnet/runtime/issues/82269 - ---- -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d6605..34bb5785fba 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -15,6 +15,7 @@ - #ifdef TARGET_MACH - #define _DARWIN_C_SOURCE - #endif -+#undef _FORTIFY_SOURCE - - #include - #include diff --git a/community/dotnet6-build/runtime_enable-system-libunwind.diff b/community/dotnet6-build/runtime_enable-system-libunwind.diff deleted file mode 100644 index 45358a0..0000000 --- a/community/dotnet6-build/runtime_enable-system-libunwind.diff +++ /dev/null @@ -1,22 +0,0 @@ -From 75c3e74ea35219f257c80daf9a236e0f518a7875 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/installer/pull/13378 -From: Antoine Martin -Date: Wed, 9 Mar 2022 20:16:03 +0000 -Subject: [PATCH 1/1] Enable system libunwind - -Forces use of system's libunwind - ---- - -diff --git a/src/runtime/eng/SourceBuild.props b/src/runtime/eng/SourceBuild.props -index f595e9b7d1..d90fd47dbd 100644 ---- a/src/runtime/eng/SourceBuild.props -+++ b/src/runtime/eng/SourceBuild.props -@@ -47,6 +47,7 @@ - $(InnerBuildArgs) /p:BuildDebPackage=false - $(InnerBuildArgs) /p:RuntimeOS=$(RuntimeOS) - $(InnerBuildArgs) /p:AdditionalRuntimeIdentifierParent=$(BaseOS) -+ $(InnerBuildArgs) --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE - - - diff --git a/community/dotnet6-build/runtime_remove-usage-of-off64-t.patch b/community/dotnet6-build/runtime_remove-usage-of-off64-t.patch deleted file mode 100644 index a55dcde..0000000 --- a/community/dotnet6-build/runtime_remove-usage-of-off64-t.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 03712c3b684..99d8a457957 100644 ---- a/src/runtimr/src/coreclr/debug/createdump/crashinfounix.cpp -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -395,7 +395,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r - // performance optimization. - m_canUseProcVmReadSyscall = false; - assert(m_fd != -1); -- *read = pread64(m_fd, buffer, size, (off64_t)address); -+ *read = pread(m_fd, buffer, size, (off_t)address); - } - - if (*read == (size_t)-1) - - diff --git a/community/dotnet6-build/sdk_14239-add-zsh-compdef-completion-script.patch b/community/dotnet6-build/sdk_14239-add-zsh-compdef-completion-script.patch deleted file mode 100644 index bdb120b..0000000 --- a/community/dotnet6-build/sdk_14239-add-zsh-compdef-completion-script.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 4c74721e1f5da9642adab03075dda2f55719ac7b Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/sdk/pull/14239 -From: Esgariot -Date: Mon, 19 Oct 2020 23:42:37 +0200 -Subject: [PATCH 1/1] Add zsh compdef completion script. - -Continuing off of PR 13384 in upstream. -This commit is ready to be rebased to include appropriate co-authors -before merging PR. - ---- - scripts/register-completions.zsh | 13 +++---------- - 1 file changed, 3 insertions(+), 10 deletions(-) - -diff --git a/src/sdk/scripts/register-completions.zsh b/src/sdk/scripts/register-completions.zsh -index 8eebe9a867..faa32fef71 100644 ---- a/src/sdk/scripts/register-completions.zsh -+++ b/src/sdk/scripts/register-completions.zsh -@@ -1,10 +1,3 @@ --# zsh parameter completion for the dotnet CLI -- --_dotnet_zsh_complete() --{ -- local completions=("$(dotnet complete "$words")") -- -- reply=( "${(ps:\n:)completions}" ) --} -- --compctl -K _dotnet_zsh_complete dotnet -+#compdef dotnet -+local completions=("$(dotnet complete "$words")") -+[[ -n "$completions" ]] && compadd -- "${(ps:\n:)completions}" --- -2.34.1 - diff --git a/community/dotnet6-build/sdk_telemetry-optout.patch b/community/dotnet6-build/sdk_telemetry-optout.patch deleted file mode 100644 index 435a57f..0000000 --- a/community/dotnet6-build/sdk_telemetry-optout.patch +++ /dev/null @@ -1,32 +0,0 @@ -From eb7141ec561b9a2551d16ee661343b87c5e5f1b1 Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Sun, 23 Jan 2022 15:47:27 +0000 -Subject: [PATCH 1/1] SDK telemetry optout - -Disables telemetry by default. - ---- - src/Cli/dotnet/Program.cs | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/sdk/src/Cli/dotnet/Program.cs b/src/sdk/src/Cli/dotnet/Program.cs -index c3be733b4a..2a157a75d5 100644 ---- a/src/sdk/src/Cli/dotnet/Program.cs -+++ b/src/sdk/src/Cli/dotnet/Program.cs -@@ -27,6 +27,13 @@ public class Program - - public static int Main(string[] args) - { -+ // opt out of telemetry by default if the env var is unset -+ string telemetryValue = Environment.GetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT"); -+ if (String.IsNullOrEmpty(telemetryValue)) -+ { -+ Environment.SetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "1"); -+ } -+ - DebugHelper.HandleDebugSwitch(ref args); - - // Capture the current timestamp to calculate the host overhead. --- -2.35.1 - diff --git a/community/dotnet6-runtime/APKBUILD b/community/dotnet6-runtime/APKBUILD deleted file mode 100644 index b5ea59d..0000000 --- a/community/dotnet6-runtime/APKBUILD +++ /dev/null @@ -1,173 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -# secfixes: -# 6.0.6-r0: -# - CVE-2022-30184 -# 6.0.8-r0: -# - CVE-2022-34716 -# 6.0.9-r0: -# - CVE-2022-38013 -# 6.0.10-r0: -# - CVE-2022-41032 -# 6.0.12-r0: -# - CVE-2022-41089 -# 6.0.13-r0: -# - CVE-2023-21538 -# 6.0.14-r0: -# - CVE-2023-21808 -# 6.0.16-r0: -# - CVE-2023-28260 -# 6.0.18-r0: -# - CVE-2023-24895 -# - CVE-2023-24897 -# - CVE-2023-24936 -# - CVE-2023-29331 -# - CVE-2023-29337 -# - CVE-2023-33126 -# - CVE-2023-33128 -# - CVE-2023-33135 -# 6.0.20-r0: -# - CVE-2023-33127 -# - CVE-2023-33170 -# 6.0.21-r0: -# - CVE-2023-35390 -# - CVE-2023-38180 -# - CVE-2023-35391 -# 6.0.22-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# 6.0.23-r0: -# - CVE-2023-44487 -# 6.0.24-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# - CVE-2023-44487 -# 6.0.25-r0: -# - CVE-2023-36049 -# - CVE-2023-36558 - - -pkgname=dotnet6-runtime -pkgver=6.0.25 -_bldver=6.0.125-r0 -pkgrel=0 - -_pkgver_macro=${pkgver%.*} -_pkgver_name=${_pkgver_macro//[.0]} -_bldver_ver=${_bldver%%-*} -pkgdesc="The .NET $_pkgver_macro Core runtime" -arch="x86_64 aarch64 armv7" -url="https://dotnet.microsoft.com/" -license="MIT" -depends=" - dotnet$_pkgver_name-hostfxr - icu-data-full - icu-libs - " -makedepends="dotnet$_pkgver_name-build=$_bldver" -subpackages=" - aspnetcore$_pkgver_name-runtime:aspnetcore_runtime:noarch - aspnetcore$_pkgver_name-targeting-pack:aspnetcore_targeting_pack:noarch - dotnet$_pkgver_name-apphost-pack:apphost_pack - dotnet$_pkgver_name-hostfxr - dotnet$_pkgver_name-targeting-pack:targeting_pack:noarch - dotnet-host:host - " -provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" -options="!check" # No test suite -source="dotnet.sh.in" -builddir="$srcdir" -_libdir="/usr/lib" - -case $CARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7) _dotnet_arch="arm";; - armhf) _dotnet_arch="armv6";; - *) _dotnet_arch="$CARCH";; -esac - -build() { - sed "s|%LIBDIR%|$_libdir/dotnet|" "$srcdir"/dotnet.sh.in > "$srcdir"/dotnet.sh -} - -package() { - install -dm 755 "$pkgdir"/$_libdir/dotnet/shared - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.NETCore.App "$pkgdir"/$_libdir/dotnet/shared/. -} - -host() { - pkgdesc="A generic driver for the .NET Core Command Line Interface" - depends="" - - install -dm 755 \ - "$subpkgdir"/etc/profile.d \ - "$subpkgdir"/etc/dotnet \ - "$subpkgdir"/usr/bin \ - "$subpkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/dotnet "$subpkgdir"/$_libdir/dotnet/. - ln -s $_libdir/dotnet/dotnet "$subpkgdir"/usr/bin/dotnet - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location_$_dotnet_arch - install -Dm 644 "$srcdir"/dotnet.sh -t "$subpkgdir"/etc/profile.d/ -} - -hostfxr() { - pkgdesc="The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use." - depends="dotnet-host" - provides="dotnet-hostfxr-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/host "$subpkgdir"/$_libdir/dotnet/. -} - -aspnetcore_runtime() { - pkgdesc="The ASP.NET $_pkgver_macro Core runtime" - depends="dotnet$_pkgver_name-runtime" - provides="aspnetcore-runtime-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/shared - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.AspNetCore.App "$subpkgdir"/$_libdir/dotnet/shared/. -} - -apphost_pack() { - pkgdesc="The .NET $_pkgver_macro Core apphost pack" - provides="dotnet-apphost-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Host.* "$subpkgdir"/$_libdir/dotnet/packs/. -} - -targeting_pack() { - pkgdesc="The .NET $_pkgver_macro Core targeting pack" - provides="dotnet-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. -} - -aspnetcore_targeting_pack() { - pkgdesc="The ASP.NET $_pkgver_macro Core targeting pack" - provides="aspnetcore-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.AspNetCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. -} - -sha512sums=" -c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in -" diff --git a/community/dotnet6-runtime/README.md b/community/dotnet6-runtime/README.md deleted file mode 100644 index 59dadd2..0000000 --- a/community/dotnet6-runtime/README.md +++ /dev/null @@ -1,144 +0,0 @@ -# dotnet6-runtime - -This is the .NET 6.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `aspnetcore6-runtime` -* `aspnetcore6-targeting-pack` -* `dotnet6-apphost-pack` (used by dotnet6-runtime) -* `dotnet6-hostfxr` (used by dotnet-host) -* `dotnet6-runtime` -* `dotnet6-targeting-pack` -* `dotnet-host` - -## How to build dotnet6 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet6 is built using three different aports. - -* `community/dotnet6-stage0` -Builds minimum components for full build of dotnet6, and packages these in an initial -`dotnet6-stage0-bootstrap` package that `dotnet6-build` pulls. -* `community/dotnet6-build` -Builds full and packages dotnet6 fully using either stage0 or previoulsy built -dotnet6 build. -* `community/dotnet6-runtime` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet6-build. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet6-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet6` as opposed to `dotnet-6.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet6-runtime` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet6/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet6-runtime: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet6-runtime` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet6/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet6-runtime: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/community/dotnet6-runtime/dotnet.sh.in b/community/dotnet6-runtime/dotnet.sh.in deleted file mode 100644 index f85eb29..0000000 --- a/community/dotnet6-runtime/dotnet.sh.in +++ /dev/null @@ -1,12 +0,0 @@ -# Set location for AppHost lookup -[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=%LIBDIR% - -# Add dotnet tools directory to PATH -DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" -case "$PATH" in - *"$DOTNET_TOOLS_PATH"* ) true ;; - * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; -esac - -# Extract self-contained executables under HOME to avoid multi-user issues from using the default '/var/tmp' -[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/community/dotnet6-stage0/APKBUILD b/community/dotnet6-stage0/APKBUILD deleted file mode 100644 index b94b7ce..0000000 --- a/community/dotnet6-stage0/APKBUILD +++ /dev/null @@ -1,514 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=dotnet6-stage0 -pkgver=6.0.116 -pkgrel=4 - -[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" - -# Tag of tarball generator. -_gittag=v$pkgver - -# Versions of prebuilt artifacts and bootstrap tar -_artifactsver=6.0.112 -_bootstrapver="6.0.116" -_bootstraprel=0 -_installerver=${_gittag/v} - -# Version of packages that aren't defined in git-info -_iltoolsver=6.0.12-servicing.22579.1 - -# Patches to be used. String before '_' refers to repo to patch -# Look for patch notes within each patch for what they fix / where they come from -# build_* patches applies directly to $builddir -_patches=" - roslyn_57003-mono-namedmutex.patch - roslyn_revert-lift-version-codeanalysis.patch - runtime_76500-mono-musl-support.patch - runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch - runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_84442-support-adding-rids-with-dash-in-base-part.patch - runtime_84443-suppress-clang-16-warnings.patch - runtime_remove-usage-of-off64-t.patch - " -_extra_nupkgs=" - https://globalcdn.nuget.org/packages/system.reactive.core.4.1.1.nupkg - " - -_pkgver_macro=${pkgver%.*} -_pkgver_prior=1 -_pkgver_name="${_pkgver_macro//[.0]}" -pkgdesc="The .NET Core stage0 bits for dotnet build" -arch="x86_64 aarch64 armv7" -url=https://www.microsoft.com/net/core -_giturl="https://github.com/dotnet/installer" -license="MIT" -options="!check" # Testsuite in main -build aport -subpackages=" - dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch - dotnet$_pkgver_name-stage0-bootstrap - " -source=" - https://lab.ilot.io/dotnet/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz - dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz - Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz - https://globalcdn.nuget.org/packages/runtime.linux-musl-x64.microsoft.netcore.ilasm.6.0.0.nupkg - https://globalcdn.nuget.org/packages/runtime.linux-musl-arm64.microsoft.netcore.ilasm.6.0.0.nupkg - https://globalcdn.nuget.org/packages/runtime.linux-musl-arm.microsoft.netcore.ilasm.6.0.0.nupkg - $_extra_nupkgs - $_patches - " -makedepends_host=" - bash - binutils - clang - cmake - findutils - g++ - gcc - grep - icu-dev - jq - krb5-dev - libintl - libstdc++ - libucontext-dev - libunwind-dev - libxml2-dev - libxml2-utils - linux-headers - lttng-ust-dev - musl-dev - musl-utils - openssl-dev - pigz - unzip - zip - zlib-dev - " -case $CARCH in - s390x|x86) makedepends_host="$makedepends_host libucontext-dev";; - *) makedepends_host="$makedepends_host lld-dev";; -esac -makedepends_build=" - $makedepends_host - binutils$_cross - git - gcc$_cross - llvm - llvm-dev - python3 - xz - " -case $CBUILD_ARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7|armhf) _dotnet_arch="arm";; - i586) _dotnet_arch="x86";; - *) _dotnet_arch=$CBUILD_ARCH;; -esac -case $CTARGET_ARCH in - x86_64) _dotnet_target="x64";; - aarch64) _dotnet_target="arm64";; - armv7|armhf) _dotnet_target="arm";; - i586) _dotnet_target="x86";; - *) _dotnet_target=$CTARGET_ARCH;; -esac - -builddir="$srcdir"/dotnet-${_gittag/release\/} -_packagesdir="$srcdir"/local-packages -_libdir="/usr/lib" -_nugetdir="$srcdir"/nuget -_downloaddir="$srcdir"/local-downloads -_cli_root="$srcdir"/bootstrap -_nuget="$_cli_root/dotnet nuget" -_outputdir="$srcdir"/artifacts -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs/$pkgname -else - _logdir="$srcdir"/logs -fi - -# generates tarball containing all components built by dotnet -snapshot() { - local _pkg="$srcdir"/${builddir##*/}.tar - - ulimit -n 4096 - export NUGET_PACKAGES=$_nugetdir - - if [ -d "$srcdir" ]; then - cd "$srcdir" - else - mkdir -p "$srcdir" && cd "$srcdir" - fi - if [ -d "installer" ]; then - cd "$srcdir"/installer - else - git clone $_giturl --branch $_gittag && cd "$srcdir"/installer - fi - - sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets - - if [ -d "$_libdir/dotnet/bootstrap" ]; then - local _cli_root="$(find /usr/lib/dotnet/bootstrap/6.0* -maxdepth 0 -type d | sort -r | head -n 1)" - else - local _cli_root="" - fi - - _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ - /p:ArcadeBuildTarball=true \ - /p:TarballDir=$builddir \ - /p:TarballFilePath=$_pkg - - msg "Compressing ${builddir##*/}.tar to $SRCDEST" - xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" - - cd "$startdir" - abuild checksum -} - -prepare() { - default_prepare - - mkdir -p "$_cli_root" - mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir - - # links logfiles to pipeline logs for easy pickup in pipelines - mkdir -p "$_logdir" "$builddir"/artifacts - ln -s "$_logdir" "$builddir"/artifacts/logs - ln -s "$_logdir" "$builddir"/artifacts/log - for i in "$builddir"/src/*; do - if [ -f "$i" ]; then - continue - fi - mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts - ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log - done - - unzip -po "$srcdir"/runtime.linux-musl-$_dotnet_arch.microsoft.netcore.ilasm.*.nupkg runtimes/linux-musl-$_dotnet_arch/native/ilasm > $_cli_root/ilasm - chmod +x "$_cli_root"/ilasm - - tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner - - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - $_nuget push "$srcdir"/$filename --source="$_packagesdir" - done - - # adjusts sdk version and packagedir to expected - for i in runtime sdk installer aspnetcore roslyn; do - $_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config - tmp=$(mktemp) - jq ".sdk.version = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json - done -} - -_runtime() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_runtimever+x}" ]; then - local _runtimever=$(grep OutputPackageVersion "$builddir"/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') - fi - local _runtimever_ns=$(awk '{if($2 ~ "Name=\"VS.Redist.Common.NetCore.SharedFramework.x64.*\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building runtime version $_runtimever" - cd "$builddir"/src/runtime - - local args=" - -c Release - -clang - -arch $_dotnet_target - -bl - /consoleLoggerParameters:ShowTimestamp - /p:NoPgoOptimize=true - /p:EnableNgenOptimization=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') - /p:ILAsmToolPath=$_cli_root - " - if [ "$CBUILD" != "$CHOST" ]; then - local args="$args -cross" - # https://github.com/dotnet/runtime/pull/75597 broke crossbuilding when true - local DotNetBuildFromSource=false - # x86 build of mono broken, thus do not build mono - case $_dotnet_target in - x86) local args="$args /p:DefaultSubsets=clr+libs+host+packs";; - esac - fi - if [ "$_runtimever" != "${_runtimever##*-}" ]; then - local args="$args /p:VersionSuffix=${_runtimever##*-}" - fi - DotNetBuildFromSource=$DotNetBuildFromSource ROOTFS_DIR="$CBUILDROOT" ./build.sh $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/Runtime/$_runtimever_ns - cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns -} - -_roslyn() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_roslynver+x}" ]; then - local _roslynver=$(grep OutputPackageVersion "$builddir"/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') - fi - local _roslynver_ns=$(awk '{if($2 == "Name=\"Microsoft.Net.Compilers.Toolset\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building roslyn version $_roslynver" - cd "$builddir"/src/roslyn - - local args=" - -c Release - -bl - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') - " - if [ "$_roslynver" != "${_roslynver##*-}" ]; then - local args="$args /p:VersionSuffix=${_roslynver##*-}" - fi - DotNetBuildFromSource=false ./eng/build.sh --restore /p:UseAppHost=false - ./eng/build.sh --restore --build --pack $args - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done -} - -_sdk() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_sdkver+x}" ]; then - local _sdkver=$(grep OutputPackageVersion "$builddir"/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') - fi - local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building sdk version $_sdkver" - cd "$builddir"/src/sdk - - local args=" - -c Release - -bl - /consoleLoggerParameters:ShowTimestamp - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') - /p:Architecture=$_dotnet_target - " - if [ "$_sdkver" != "${_sdkver##*-}" ]; then - local args="$args /p:VersionSuffix=${_sdkver##*-}" - fi - ./build.sh --pack /p:Projects=$builddir/src/sdk/source-build.slnf $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/Sdk/$_sdkver_ns - cp artifacts/packages/*/*/dotnet-toolset-internal-*.zip "$_downloaddir"/Sdk/$_sdkver_ns -} - -_aspnetcore() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_aspnetver+x}" ]; then - local _aspnetver=$(grep OutputPackageVersion "$builddir"/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') - fi - local _aspnetver_ns=$(awk '{if($2 == "Name=\"Microsoft.AspNetCore.App.Ref.Internal\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Build aspnetcore version $_aspnetver" - cd "$builddir"/src/aspnetcore - local args=" - --os-name linux-musl - -arch $_dotnet_target - -c Release - -no-build-nodejs - -bl - /consoleLoggerParameters:ShowTimestamp - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') - /p:DotNetAssetRootUrl=file://$_downloaddir/ - /p:BuildOSName=linux-musl - " - # x86 crossgen broken - case $CARCH in - x86) local args="$args /p:CrossgenOutput=false";; - esac - - if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then - local args="$args /p:VersionSuffix=${_aspnetver##*-}" - fi - ./eng/build.sh --pack $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore-runtime-internal-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns -} - -_installer() { - "$_cli_root"/dotnet build-server shutdown - msg "[$(date)] Building installer version $_installerver" - cd "$builddir"/src/installer - - local args=" - -c Release - -bl - /consoleLoggerParameters:ShowTimestamp - /p:OSName=linux-musl - /p:HostOSName=linux-musl - /p:Architecture=$_dotnet_target - /p:CoreSetupBlobRootUrl=file://$_downloaddir/ - /p:DotnetToolsetBlobRootUrl=file://$_downloaddir/ - /p:EnableSourceLink=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/installer.props | sed -E 's|||g' | tr -d ' ') - /p:GitCommitCount=$(grep GitCommitCount "$builddir"/git-info/installer.props | sed -E 's|||g' | tr -d ' ') - /p:PublicBaseURL=file://$_downloaddir/ - " - if [ "$_installerver" != "${_installerver##*-}" ]; then - local args="$args /p:VersionSuffix=${_installerver##*-}" - fi - - # x86 crossgen broken - case $CARCH in - x86) local args="$args /p:DISABLE_CROSSGEN=True";; - esac - ./build.sh $args - - mkdir -p "$_downloaddir"/installer/$_installerver - cp artifacts/packages/*/*/dotnet-sdk-$_pkgver_macro*.tar.gz "$_downloaddir"/installer/$_installerver -} - -build() { - export _InitializeDotNetCli=$_cli_root - export DOTNET_INSTALL_DIR=$_cli_root - export PATH="$_cli_root:$PATH" - export NUGET_PACKAGES=$_nugetdir - export DotNetBuildFromSource=true - export DOTNET_CLI_TELEMETRY_OPTOUT=true - export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true - export SHELL=/bin/bash - export EXTRA_CPPFLAGS="${CPPFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_CXXFLAGS="${CXXFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_CFLAGS="${CFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_LDFLAGS="$LDFLAGS" - unset CXXFLAGS CFLAGS LDFLAGS CPPFLAGS - - ulimit -n 4096 - - _runtime - _roslyn - _sdk - _aspnetcore - _installer -} - -package() { - # lua-aports / buildrepo doesn't know to always build stage0 first when dealing - # with virtual packages. Thus, we need to depend on an empty stage0 pkg that - # dotnetx-build will pull, thus forcing build of stage0 first - mkdir -p "$pkgdir" -} - -bootstrap() { - # allows stage0 to be pulled by dotnetx-build if first build of dotnetx - provides="dotnet$_pkgver_name-bootstrap" - provider_priority=$_pkgver_prior - - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver - - # unpack build artifacts to bootstrap subdir for use by future builds - tar --use-compress-program="pigz" \ - -xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ - --no-same-owner - - local _iltoolsArray=" - runtime.*.Microsoft.NETCore.TestHost.*.nupkg - runtime.*.Microsoft.NETCore.ILAsm.*.nupkg - runtime.*.Microsoft.NETCore.ILDAsm.*.nupkg - " - - local _nupkgsArray=" - $_iltoolsArray - Microsoft.NETCore.App.Host.*.*.nupkg - Microsoft.NETCore.App.Runtime.*.*.nupkg - Microsoft.NETCore.App.Crossgen2.*.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHost.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHostPolicy.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHostResolver.*.nupkg - runtime.*.Microsoft.NETCore.DotNetAppHost.*.nupkg - Microsoft.AspNetCore.App.Runtime.linux-musl-*.*.nupkg - " - - # copies artifacts to artifacts dir for use by future dotnet builds - for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - install -Dm644 "$srcdir"/$filename "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ - done - - msg "Changing iltools version to $_iltoolsver" - # source-build expects a certain version of ilasm, ildasm and testhost - # following adjusts version - for i in $_iltoolsArray; do - local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i - local nupath=$(find $nupath || true) - if [ ! "$nupath" ]; then continue; fi - local nupkg="${nupath##*/}" - local nuname="${nupkg%-*}" - local nuname="${nuname%.*.*.*}" - local nuver="${nupkg/$nuname.}" - local nuver="${nuver/.nupkg}" - local nuspec="$nuname.nuspec" - # shellcheck disable=SC2094 - unzip -p "$nupath" $nuspec | sed "s|$nuver|$_iltoolsver|" > "$srcdir"/$nuspec - cd "$srcdir" - zip -u "$nupath" $nuspec - mv "$nupath" "${nupath/$nuver/$_iltoolsver}" - done -} - -# build relies on a plethora of nupkgs which are provided by this Artifacts file. -# stage0 sources these from Microsoft, which then allows bootstrap to build -# locally hosted versions. The following unpacks built tarball into directory -# for use by future builds. -artifacts() { - pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" - # hack to allow artifacts to pull itself - provides="dotnet$_pkgver_name-bootstrap-artifacts" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ - "$subpkgdir"/usr/share/licenses - - # extract artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --exclude '*x64*' -} - -sha512sums=" -8c03186212149ba38df996068d511c29bd9be31e40fd1d7d21fc15fd2c0f6272479e8145ccb9544bb48c2c90bc8001ba05af1a7d92a60018ba7a983bc6187731 dotnet-v6.0.116.tar.xz -3b6f37aee5698d7ef794c74a6d914b914f0220346a2f37e66e4a29db63e284747d02856ea6cd461c76f2a9e18ab047f40cc739e7f8227d69ea7316bce2020201 dotnet-sdk-6.0.116-linux-musl-x64.noextract -dd3ec888e0d6644f2d6ef17ca7ce540d62226bb459cc0bbfe938229e757a8f4a10fc314a078f9898143c2271b8a70de77ffbdaecfa8c4c87921421e729f53a64 dotnet-sdk-6.0.116-linux-musl-arm64.noextract -a35480c68e9f156a33225e80dc166db3a2fbe860f0f35497357fa6b5594df16dad9cbc8b5a7569ee4b6262070e100bf3c9d57721c68bac5bfc83abf61e4ace5d dotnet-sdk-6.0.116-linux-musl-arm.noextract -64fffa28143c28ceefbae08e8086746e177a11242f6a5b778bc5597190748c9d3e869020d7d3f4b74efaad7fbb73258765e227c9bdd098501fdbbc7e7e6ec05b Private.SourceBuilt.Artifacts.6.0.112.noextract -0eb771d7e23607a256f209c958a8025af6a7c1e20948b244f2903941aad5e1c0f130a9285ee29086d6188090e8692f5f129329a88da54d3f0a7e7e5b7e4257ef runtime.linux-musl-x64.microsoft.netcore.ilasm.6.0.0.nupkg -5ad26a79b5ba3ebdc6932dde50218d2c0669377dcb628debbb448e0dfc5d001d7e07b121f18ecd50b667ab372e10ec0bfe166a6e2103faf2f824995fdad0c355 runtime.linux-musl-arm64.microsoft.netcore.ilasm.6.0.0.nupkg -2a24e56ddf0f3e3ef7cb64523b7c6ebf02b91a73287c342783eb66e43a9bbe0cd23eb4b26f435e6b194bf1a40017e6aae60333ff087b18657672b243e8c8ce76 runtime.linux-musl-arm.microsoft.netcore.ilasm.6.0.0.nupkg -a24efb7578e2020e17c877ffe00b49f8f476b0845fdc55c16404008a9566d8628a72c2208bd23df745c88592ebe9c922b0cf1bc1f95f834b539bbcc2cbf516c5 system.reactive.core.4.1.1.nupkg -42779a7bf1004fe0f7054cfa4f09f49d7f2a57c0543ec994ffbd54fb349abb508295476098ed35d60e9676be8bcc15aa8a9ec5c814cd1e058357530b5cdfb2b6 roslyn_57003-mono-namedmutex.patch -cf40e37b4adfc61e24e3b48a397b4d813726d190f271869d946035279bf662a694a0fca448f5ae06ad2bb2300595223109ad64f60f65dac5cddf9308e12147a3 roslyn_revert-lift-version-codeanalysis.patch -e67e0114bd324dae65eb19f6fa8c74414bee77cd30e299931b0d82b4ca1b6b6f88358a0c47ffb180f46c5cb28f61f79bb4a59d43c1ae3011bfe491e757de293a runtime_76500-mono-musl-support.patch -6c614a48565c0e10f8714244e538bb453f7914ff58d01e9fd1255ad24698be916fd9e0a438c732737576fde6c0d68bec8f8958ce1b1b11b70c4a3b8663bdb8e2 runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch -827e899a83103f666dc3d57c1ec695bebc659a574f4a1d754da0cafe8c18d7db79c3950267e905fa078f94612ee1101fbddd0ea62b3c08947d8bcd7d9c8de41c runtime_82269-mono-thread-coop-undefine-fortify-source.patch -bfa4fca9987b4a1369e59abb3f872841ae994d47e5f873db43d9a0563f5e720cd85714e73aada912997da55077262e01f1ae120f8d32043d661ba89d12384caa runtime_84442-support-adding-rids-with-dash-in-base-part.patch -153255e80c2d2a131c2985041132417573ee98fa4b90153a1417080dbfb4d9bd03db9d5e241e54f5e664c4136eaf7facca9d4dad7ededf99a8f9068f26283fdb runtime_84443-suppress-clang-16-warnings.patch -d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80 runtime_remove-usage-of-off64-t.patch -" diff --git a/community/dotnet6-stage0/README.md b/community/dotnet6-stage0/README.md deleted file mode 100644 index dbff8c6..0000000 --- a/community/dotnet6-stage0/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# dotnet6-stage0 - -This is the .NET 6.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `dotnet6` (empty package to go around `buildrepo` build ordering bug) -* `dotnet6-stage0-bootstrap` (packages binary bootstrap artifacts) -* `dotnet6-stage0-artifacts` (packages non-binary bootstrap artifacts) - -## How to build dotnet6 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet6 is built using three different aports. - -* `community/dotnet6-stage0` -Builds minimum components for full build of dotnet6, and packages these in an initial -`dotnet6-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet6-build` -Builds full and packages dotnet6 fully using either stage0 or previoulsy built -dotnet6 build. -* `community/dotnet6-runtime` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet6-build. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet6-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet6` as opposed to `dotnet-6.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet6-stage0` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet6/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet6-stage0: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet6-stage0` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet6/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet6-stage0: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/community/dotnet6-stage0/roslyn_57003-mono-namedmutex.patch b/community/dotnet6-stage0/roslyn_57003-mono-namedmutex.patch deleted file mode 100644 index 74a19ce..0000000 --- a/community/dotnet6-stage0/roslyn_57003-mono-namedmutex.patch +++ /dev/null @@ -1,470 +0,0 @@ -From 210c17ea60f525837a7525df73e7332598ad4089 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/roslyn/pull/57003 -From: Antoine Martin -Date: Sat, 27 Aug 2022 21:26:01 -0800 -Subject: [PATCH 1/1] mono-named-mutex - ---- - .../InternalUtilities/PlatformInformation.cs | 19 ++ - .../VBCSCompilerTests/BuildClientTests.cs | 2 +- - .../CompilerServerApiTest.cs | 4 +- - .../VBCSCompilerTests/CompilerServerTests.cs | 4 +- - .../VBCSCompilerServerTests.cs | 7 +- - src/Compilers/Shared/BuildServerConnection.cs | 251 +++++++++++------- - 6 files changed, 182 insertions(+), 105 deletions(-) - -diff --git a/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs b/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs -index 033e66cd2f2..d4fa56413fb 100644 ---- a/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs -+++ b/src/roslyn/src/Compilers/Core/Portable/InternalUtilities/PlatformInformation.cs -@@ -31,5 +31,24 @@ public static bool IsRunningOnMono - } - } - } -+ /// -+ /// Are we running on .NET 5 or later using the Mono runtime? -+ /// Will also return true when running on Mono itself; if necessary -+ /// we can use IsRunningOnMono to distinguish. -+ /// -+ public static bool IsUsingMonoRuntime -+ { -+ get -+ { -+ try -+ { -+ return !(Type.GetType("Mono.RuntimeStructs", throwOnError: false) is null); -+ } -+ catch -+ { -+ return false; -+ } -+ } -+ } - } - } -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs -index 669d1bfb676..7f1d0468823 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/BuildClientTests.cs -@@ -79,7 +79,7 @@ public void ConnectToServerFails() - // to connect. When it fails it should fall back to in-proc - // compilation. - bool holdsMutex; -- using (var serverMutex = new Mutex(initiallyOwned: true, -+ using (var serverMutex = BuildServerConnection.OpenOrCreateMutex( - name: BuildServerConnection.GetServerMutexName(_pipeName), - createdNew: out holdsMutex)) - { -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs -index 0dbd1b2e143..c00b72e8434 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerApiTest.cs -@@ -103,7 +103,7 @@ public void MutexStopsServerStarting() - var mutexName = BuildServerConnection.GetServerMutexName(pipeName); - - bool holdsMutex; -- using (var mutex = new Mutex(initiallyOwned: true, -+ using (var mutex = BuildServerConnection.OpenOrCreateMutex( - name: mutexName, - createdNew: out holdsMutex)) - { -@@ -119,7 +119,7 @@ public void MutexStopsServerStarting() - } - finally - { -- mutex.ReleaseMutex(); -+ mutex.Dispose(); - } - } - } -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs -index 3b6f4f291ff..e97a6bf923f 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/CompilerServerTests.cs -@@ -304,7 +304,7 @@ public async Task ServerFailsWithLongTempPathUnix() - var newTempDir = _tempDirectory.CreateDirectory(new string('a', 100 - _tempDirectory.Path.Length)); - await ApplyEnvironmentVariables( - new[] { new KeyValuePair("TMPDIR", newTempDir.Path) }, -- async () => -+ async () => await Task.Run(async () => - { - using var serverData = await ServerUtil.CreateServer(_logger); - var result = RunCommandLineCompiler( -@@ -317,7 +317,7 @@ public async Task ServerFailsWithLongTempPathUnix() - - var listener = await serverData.Complete(); - Assert.Equal(CompletionData.RequestCompleted, listener.CompletionDataList.Single()); -- }); -+ })); - } - - [Fact] -diff --git a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs -index d5f493fed8a..73941972e48 100644 ---- a/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs -+++ b/src/roslyn/src/Compilers/Server/VBCSCompilerTests/VBCSCompilerServerTests.cs -@@ -101,7 +101,7 @@ public async Task NoServerConnection() - - var thread = new Thread(() => - { -- using (var mutex = new Mutex(initiallyOwned: true, name: mutexName, createdNew: out created)) -+ using (var mutex = BuildServerConnection.OpenOrCreateMutex(name: mutexName, createdNew: out created)) - using (var stream = NamedPipeUtil.CreateServer(pipeName)) - { - readyMre.Set(); -@@ -112,7 +112,7 @@ public async Task NoServerConnection() - stream.Close(); - - doneMre.WaitOne(); -- mutex.ReleaseMutex(); -+ mutex.Dispose(); - } - }); - -@@ -153,7 +153,7 @@ public async Task ServerShutdownsDuringProcessing() - { - using (var stream = NamedPipeUtil.CreateServer(pipeName)) - { -- var mutex = new Mutex(initiallyOwned: true, name: mutexName, createdNew: out created); -+ var mutex = BuildServerConnection.OpenOrCreateMutex(name: mutexName, createdNew: out created); - readyMre.Set(); - - stream.WaitForConnection(); -@@ -161,7 +161,6 @@ public async Task ServerShutdownsDuringProcessing() - - // Client is waiting for a response. Close the mutex now. Then close the connection - // so the client gets an error. -- mutex.ReleaseMutex(); - mutex.Dispose(); - stream.Close(); - -diff --git a/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs b/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs -index f67c2d83957..1fe609061ee 100644 ---- a/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs -+++ b/src/roslyn/src/Compilers/Shared/BuildServerConnection.cs -@@ -543,19 +543,10 @@ internal static bool WasServerMutexOpen(string mutexName) - { - try - { -- if (PlatformInformation.IsRunningOnMono) -+ if (PlatformInformation.IsUsingMonoRuntime) - { -- IServerMutex? mutex = null; -- bool createdNew = false; -- try -- { -- mutex = new ServerFileMutexPair(mutexName, false, out createdNew); -- return !createdNew; -- } -- finally -- { -- mutex?.Dispose(); -- } -+ using var mutex = new ServerFileMutex(mutexName); -+ return !mutex.CouldLock(); - } - else - { -@@ -572,9 +563,11 @@ internal static bool WasServerMutexOpen(string mutexName) - - internal static IServerMutex OpenOrCreateMutex(string name, out bool createdNew) - { -- if (PlatformInformation.IsRunningOnMono) -+ if (PlatformInformation.IsUsingMonoRuntime) - { -- return new ServerFileMutexPair(name, initiallyOwned: true, out createdNew); -+ var mutex = new ServerFileMutex(name); -+ createdNew = mutex.TryLock(0); -+ return mutex; - } - else - { -@@ -648,19 +641,22 @@ internal interface IServerMutex : IDisposable - } - - /// -- /// An interprocess mutex abstraction based on OS advisory locking (FileStream.Lock/Unlock). -+ /// An interprocess mutex abstraction based on file sharing permission (FileShare.None). - /// If multiple processes running as the same user create FileMutex instances with the same name, - /// those instances will all point to the same file somewhere in a selected temporary directory. -- /// The TryLock method can be used to attempt to acquire the mutex, with Unlock or Dispose used to release. -+ /// The TryLock method can be used to attempt to acquire the mutex, with Dispose used to release. -+ /// The CouldLock method can be used to check whether an attempt to acquire the mutex would have -+ /// succeeded at the current time, without actually acquiring it. - /// Unlike Win32 named mutexes, there is no mechanism for detecting an abandoned mutex. The file - /// will simply revert to being unlocked but remain where it is. - /// -- internal sealed class FileMutex : IDisposable -+ internal sealed class ServerFileMutex : IServerMutex - { -- public readonly FileStream Stream; -+ public FileStream? Stream; - public readonly string FilePath; -+ public readonly string GuardPath; - -- public bool IsLocked { get; private set; } -+ public bool IsDisposed { get; private set; } - - internal static string GetMutexDirectory() - { -@@ -670,61 +666,176 @@ internal static string GetMutexDirectory() - return result; - } - -- public FileMutex(string name) -+ public ServerFileMutex(string name) - { -- FilePath = Path.Combine(GetMutexDirectory(), name); -- Stream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); -+ var mutexDirectory = GetMutexDirectory(); -+ FilePath = Path.Combine(mutexDirectory, name); -+ GuardPath = Path.Combine(mutexDirectory, ".guard"); - } - -- public bool TryLock(int timeoutMs) -+ /// -+ /// Acquire the guard by opening the guard file with FileShare.None. The guard must only ever -+ /// be held for very brief amounts of time, so we can simply spin until it is acquired. The -+ /// guard must be released by disposing the FileStream returned from this routine. Note the -+ /// guard file is never deleted; this is a leak, but only of a single file. -+ /// -+ internal FileStream LockGuard() - { -- if (IsLocked) -- throw new InvalidOperationException("Lock already held"); -- -- var sw = Stopwatch.StartNew(); -- do -+ // We should be able to acquire the guard quickly. Limit the number of retries anyway -+ // by some arbitrary bound to avoid getting hung up in a possibly infinite loop. -+ for (var i = 0; i < 100; i++) - { - try - { -- Stream.Lock(0, 0); -- IsLocked = true; -- return true; -+ return new FileStream(GuardPath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); - } - catch (IOException) - { -- // Lock currently held by someone else. -+ // Guard currently held by someone else. - // We want to sleep for a short period of time to ensure that other processes - // have an opportunity to finish their work and relinquish the lock. - // Spinning here (via Yield) would work but risks creating a priority - // inversion if the lock is held by a lower-priority process. - Thread.Sleep(1); - } -+ } -+ // Handle unexpected failure to acquire guard as error. -+ throw new InvalidOperationException("Unable to acquire guard"); -+ } -+ -+ /// -+ /// Attempt to acquire the lock by opening the lock file with FileShare.None. Sets "Stream" -+ /// and returns true if successful, returns false if the lock is already held by another -+ /// thread or process. Guard must be held when calling this routine. -+ /// -+ internal bool TryLockFile() -+ { -+ Debug.Assert(Stream is null); -+ FileStream? stream = null; -+ try -+ { -+ stream = new FileStream(FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); -+ // On some targets, the file locking used to implement FileShare.None may not be -+ // atomic with opening/creating the file. This creates a race window when another -+ // thread holds the lock and is just about to unlock: we may be able to open the -+ // file here, then the other thread unlocks and deletes the file, and then we -+ // acquire the lock on our file handle - but the actual file is already deleted. -+ // To close this race, we verify that the file does in fact still exist now that -+ // we have successfull acquired the locked FileStream. (Note that this check is -+ // safe because we cannot race with an other attempt to create the file since we -+ // hold the guard, and after the FileStream constructor returned we can no race -+ // with file deletion because we hold the lock.) -+ if (!File.Exists(FilePath)) -+ { -+ // To simplify the logic, we treat this case as "unable to acquire the lock" -+ // because it we caught another process while it owned the lock and was just -+ // giving it up. If the caller retries, we'll likely acquire the lock then. -+ stream.Dispose(); -+ return false; -+ } -+ } -+ catch (Exception) -+ { -+ stream?.Dispose(); -+ return false; -+ } -+ Stream = stream; -+ return true; -+ } -+ -+ /// -+ /// Release the lock by deleting the lock file and disposing "Stream". -+ /// -+ internal void UnlockFile() -+ { -+ Debug.Assert(Stream is not null); -+ try -+ { -+ // Delete the lock file while the stream is not yet disposed -+ // and we therefore still hold the FileShare.None exclusion. -+ // There may still be a race with another thread attempting a -+ // TryLockFile in parallel, but that is safely handled there. -+ File.Delete(FilePath); -+ } -+ finally -+ { -+ Stream.Dispose(); -+ Stream = null; -+ } -+ } -+ -+ public bool TryLock(int timeoutMs) -+ { -+ if (IsDisposed) -+ throw new ObjectDisposedException("Mutex"); -+ if (Stream is not null) -+ throw new InvalidOperationException("Lock already held"); -+ -+ var sw = Stopwatch.StartNew(); -+ do -+ { -+ try -+ { -+ // Attempt to acquire lock while holding guard. -+ using var guard = LockGuard(); -+ if (TryLockFile()) -+ return true; -+ } - catch (Exception) - { -- // Something else went wrong. - return false; - } -+ -+ // See comment in LockGuard. -+ Thread.Sleep(1); - } while (sw.ElapsedMilliseconds < timeoutMs); - - return false; - } - -- public void Unlock() -+ public bool CouldLock() - { -- if (!IsLocked) -- return; -- Stream.Unlock(0, 0); -- IsLocked = false; -+ if (IsDisposed) -+ return false; -+ if (Stream is not null) -+ return false; -+ -+ try -+ { -+ // Attempt to acquire lock while holding guard, and if successful -+ // immediately unlock again while still holding guard. This ensures -+ // no other thread will spuriously observe the lock as held due to -+ // the lock attempt here. -+ using var guard = LockGuard(); -+ if (TryLockFile()) -+ { -+ UnlockFile(); -+ return true; -+ } -+ } -+ catch (Exception) -+ { -+ return false; -+ } -+ -+ return false; - } - - public void Dispose() - { -- var wasLocked = IsLocked; -- if (wasLocked) -- Unlock(); -- Stream.Dispose(); -- // We do not delete the lock file here because there is no reliable way to perform a -- // 'delete if no one has the file open' operation atomically on *nix. This is a leak. -+ if (IsDisposed) -+ return; -+ IsDisposed = true; -+ if (Stream is not null) -+ { -+ try -+ { -+ UnlockFile(); -+ } -+ catch (Exception) -+ { -+ } -+ } - } - } - -@@ -792,56 +903,4 @@ public void Dispose() - } - } - } -- -- /// -- /// Approximates a named mutex with 'locked', 'unlocked' and 'abandoned' states. -- /// There is no reliable way to detect whether a mutex has been abandoned on some target platforms, -- /// so we use the AliveMutex to manually track whether the creator of a mutex is still running, -- /// while the HeldMutex represents the actual lock state of the mutex. -- /// -- internal sealed class ServerFileMutexPair : IServerMutex -- { -- public readonly FileMutex AliveMutex; -- public readonly FileMutex HeldMutex; -- -- public bool IsDisposed { get; private set; } -- -- public ServerFileMutexPair(string mutexName, bool initiallyOwned, out bool createdNew) -- { -- AliveMutex = new FileMutex(mutexName + "-alive"); -- HeldMutex = new FileMutex(mutexName + "-held"); -- createdNew = AliveMutex.TryLock(0); -- if (initiallyOwned && createdNew) -- { -- if (!TryLock(0)) -- throw new Exception("Failed to lock mutex after creating it"); -- } -- } -- -- public bool TryLock(int timeoutMs) -- { -- if (IsDisposed) -- throw new ObjectDisposedException("Mutex"); -- return HeldMutex.TryLock(timeoutMs); -- } -- -- public void Dispose() -- { -- if (IsDisposed) -- return; -- IsDisposed = true; -- -- try -- { -- HeldMutex.Unlock(); -- AliveMutex.Unlock(); -- } -- finally -- { -- AliveMutex.Dispose(); -- HeldMutex.Dispose(); -- } -- } -- } -- - } --- -2.36.2 diff --git a/community/dotnet6-stage0/roslyn_revert-lift-version-codeanalysis.patch b/community/dotnet6-stage0/roslyn_revert-lift-version-codeanalysis.patch deleted file mode 100644 index 0faacd2..0000000 --- a/community/dotnet6-stage0/roslyn_revert-lift-version-codeanalysis.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 3e75c1b17777befc94689de319fff7a40a1f86bc Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Tue, 23 Aug 2022 14:17:51 -0800 -Subject: [PATCH 1/1] Revert "lift version of Microsoft.CodeAnalysis.Common - dependencies to previously source built version" - -This reverts commit 7b504d40a3876ce14323d77e282f0fb7ea1ec758, a patch -applied by installer during tarball generation that only is only needed -when building the whole source-build stack. Within stage0, this is -breaks the build ---- - .../Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj | 4 ---- - 1 file changed, 4 deletions(-) - -diff --git a/src/roslyn/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj b/src/roslyn/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj -index a50822a6aeb..7eae8afa275 100644 ---- a/src/roslyn/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj -+++ b/src/roslyn/src/Tools/Source/CompilerGeneratorTools/Source/CSharpSyntaxGenerator/CSharpSyntaxGenerator.csproj -@@ -27,9 +27,5 @@ - - - -- -- -- -- - - -\ No newline at end of file --- -2.36.2 - diff --git a/community/dotnet6-stage0/runtime_76500-mono-musl-support.patch b/community/dotnet6-stage0/runtime_76500-mono-musl-support.patch deleted file mode 100644 index 6bc15a8..0000000 --- a/community/dotnet6-stage0/runtime_76500-mono-musl-support.patch +++ /dev/null @@ -1,189 +0,0 @@ -From f54977e2fc84527fe58024ed5537cb63244168e2 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/76500 -From: Antoine Martin -Date: Tue, 13 Sep 2022 14:17:35 +0200 -Subject: [PATCH 1/1] Mono musl support - ---- - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/mono/CMakeLists.txt | 29 ++++++++++++++++++++++++ - src/mono/mono.proj | 18 +++++++++------ - src/mono/mono/metadata/domain.c | 10 ++++++++ - src/mono/mono/mini/CMakeLists.txt | 10 ++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++++ - 6 files changed, 69 insertions(+), 8 deletions(-) - -diff --git a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -index d80bd58038c..3488397b0da 100644 ---- a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -+++ b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -@@ -25,7 +25,7 @@ - #include - #include - #include --#include -+#include - - #include "../inc/llvm/ELF.h" - -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index 49a73b1b709..7e596d69d35 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -208,6 +208,35 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Enable the "full RELRO" options (RELRO & BIND_NOW) at link time - add_link_options(-Wl,-z,relro) - add_link_options(-Wl,-z,now) -+ # Detect Linux ID -+ # TODO: Eventually merge with eng/native/configureplatform.cmake -+ set(LINUX_ID_FILE "/etc/os-release") -+ if(CMAKE_CROSSCOMPILING) -+ set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") -+ endif() -+ -+ if(EXISTS ${LINUX_ID_FILE}) -+ execute_process( -+ COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ execute_process( -+ COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ endif() -+ -+ if(DEFINED CLR_CMAKE_LINUX_ID) -+ if(CLR_CMAKE_LINUX_ID STREQUAL alpine) -+ set(CLR_CMAKE_HOST_ALPINE_LINUX 1) -+ set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) -+ endif() -+ -+ if(CLR_CMAKE_LINUX_MUSL STREQUAL musl) -+ set(CLR_CMAKE_HOST_LINUX_MUSL 1) -+ endif() -+ endif(DEFINED CLR_CMAKE_LINUX_ID) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") - set(HOST_LINUX 1) - add_definitions(-D_GNU_SOURCE -D_REENTRANT) -diff --git a/src/runtime/src/mono/mono.proj b/src/runtime/src/mono/mono.proj -index d6a0c9a8ec2..933ed60cea7 100644 ---- a/src/runtime/src/mono/mono.proj -+++ b/src/runtime/src/mono/mono.proj -@@ -417,11 +417,15 @@ - - - <_MonoCFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoCFLAGS Include="-Wno-strict-prototypes" /> - <_MonoCXXFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoCXXFLAGS Include="-Wno-strict-prototypes" /> - - - <_MonoAOTCFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoAOTCFLAGS Include="-Wno-strict-prototypes" /> - <_MonoAOTCXXFLAGS Include="-Wl,--build-id=sha1" /> -+ <_MonoAOTCXXFLAGS Include="-Wno-strict-prototypes" /> - - - -@@ -500,15 +504,15 @@ - darwin-x86_64 - windows-x86_64 - <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) -- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true'">gnu -- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true'">android -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true'">alpine-linux-musl -+ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true'">linux-android - <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true'">hf - <_Objcopy>objcopy -- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm' and '$(CrossBuild)' == 'true'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm64' and '$(CrossBuild)' == 'true'">aarch64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 's390x' and '$(CrossBuild)' == 'true'">s390x-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x64' and '$(CrossBuild)' == 'true'">x86_64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x86' and '$(CrossBuild)' == 'true'">i686-$(_LinuxAbi)-$(_Objcopy) - <_Objcopy Condition="'$(TargetsAndroid)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/$(_Objcopy) - - -diff --git a/src/runtime/src/mono/mono/metadata/domain.c b/src/runtime/src/mono/mono/metadata/domain.c -index 4a8e06d28ae..e9868bd1b2c 100644 ---- a/src/runtime/src/mono/mono/metadata/domain.c -+++ b/src/runtime/src/mono/mono/metadata/domain.c -@@ -138,6 +138,14 @@ create_root_domain (void) - return domain; - } - -+static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void -+ensure_stack_size (void) -+{ -+ const int default_size = 5 * 1024 * 1024; -+ volatile uint8_t *s = (uint8_t *)g_alloca(default_size); -+ *s = 0; -+} -+ - /** - * mono_init_internal: - * -@@ -181,6 +189,8 @@ mono_init_internal (const char *filename, const char *exe_filename, const char * - - mono_counters_register ("Max HashTable Chain Length", MONO_COUNTER_INT|MONO_COUNTER_METADATA, &mono_g_hash_table_max_chain_length); - -+ ensure_stack_size (); -+ - mono_gc_base_init (); - mono_thread_info_attach (); - -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 128ed08f45b..17cbe696c4b 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -364,6 +364,11 @@ if(NOT DISABLE_SHARED_LIBS) - set_target_properties(monosgen-shared PROPERTIES IMPORT_SUFFIX ".import.lib") - endif() - target_link_libraries(monosgen-shared PRIVATE ${OS_LIBS} ${ICONV_LIB} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(monosgen-shared PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - if(ICU_LDFLAGS) - set_property(TARGET monosgen-shared APPEND_STRING PROPERTY LINK_FLAGS " ${ICU_LDFLAGS}") - endif() -@@ -488,6 +493,11 @@ if(NOT DISABLE_EXECUTABLES) - set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) - endif() - target_link_libraries(mono-sgen PRIVATE monosgen-static ${OS_LIBS} ${ICONV_LIB} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(mono-sgen PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h -index bd1a3cd0104..db4ba452bcb 100644 ---- a/src/runtime/src/mono/mono/utils/mono-context.h -+++ b/src/runtime/src/mono/mono/utils/mono-context.h -@@ -11,6 +11,14 @@ - #ifndef __MONO_MONO_CONTEXT_H__ - #define __MONO_MONO_CONTEXT_H__ - -+/* -+ * Handle non-gnu libc versions with nothing in features.h -+ * We have no idea what they're compatible with, so always fail. -+ */ -+#ifndef __GLIBC_PREREQ -+# define __GLIBC_PREREQ(x,y) 0 -+#endif -+ - #include "mono-compiler.h" - #include "mono-sigcontext.h" - #include "mono-machine.h" --- -2.36.3 - diff --git a/community/dotnet6-stage0/runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch b/community/dotnet6-stage0/runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch deleted file mode 100644 index 6b11ab8..0000000 --- a/community/dotnet6-stage0/runtime_76500-properly-set-toolchain-for-crossbuilding-on-alpine.patch +++ /dev/null @@ -1,56 +0,0 @@ -From d36fdab8d7ebc3dc18fddf6fd70af765b2717bd5 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/arcade/pull/11608 -From: Antoine Martin -Date: Thu, 6 Apr 2023 18:39:03 -0400 -Subject: [PATCH 1/1] properly set toolchain for crossbuilding on Alpine Linux - ---- - eng/common/cross/toolchain.cmake | 19 +- - 3 files changed, 325 insertions(+), 2 deletions(-) - -diff --git a/src/runtime/eng/common/cross/toolchain.cmake b/src/runtime/eng/common/cross/toolchain.cmake -index 51f30e53dd4..b1369a2aa37 100644 ---- a/src/runtime/eng/common/cross/toolchain.cmake -+++ b/src/runtime/eng/common/cross/toolchain.cmake -@@ -45,10 +45,18 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "s390x") - set(CMAKE_SYSTEM_PROCESSOR s390x) -- set(TOOLCHAIN "s390x-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl) -+ set(TOOLCHAIN "s390x-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "s390x-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") - set(CMAKE_SYSTEM_PROCESSOR i686) -- set(TOOLCHAIN "i686-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ set(TOOLCHAIN "i586-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "i686-linux-gnu") -+ endif() - elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - set(CMAKE_SYSTEM_PROCESSOR "x86_64") - set(triple "x86_64-unknown-freebsd11") -@@ -173,6 +181,10 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64") - add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ add_toolchain_linker_flag("--target=${TOOLCHAIN}") -+ add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}") -+ endif() - add_toolchain_linker_flag(-m32) - elseif(ILLUMOS) - add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib/amd64") -@@ -204,6 +216,9 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$") - add_compile_options(-mfloat-abi=softfp) - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ add_compile_options(--target=${TOOLCHAIN}) -+ endif() - add_compile_options(-m32) - add_compile_options(-Wno-error=unused-command-line-argument) - endif() diff --git a/community/dotnet6-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch b/community/dotnet6-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch deleted file mode 100644 index aa34ceb..0000000 --- a/community/dotnet6-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/82269 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Undefine fortify-source on mono-thread-coop - -When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. -which makes mono-flavored runtime dump its core. This patch offers a workaround -by undefining _FORTIFY_SOURCE in the problematic file. - -See: https://github.com/dotnet/runtime/issues/82269 - ---- -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d6605..34bb5785fba 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -15,6 +15,7 @@ - #ifdef TARGET_MACH - #define _DARWIN_C_SOURCE - #endif -+#undef _FORTIFY_SOURCE - - #include - #include diff --git a/community/dotnet6-stage0/runtime_84442-support-adding-rids-with-dash-in-base-part.patch b/community/dotnet6-stage0/runtime_84442-support-adding-rids-with-dash-in-base-part.patch deleted file mode 100644 index 8a36483..0000000 --- a/community/dotnet6-stage0/runtime_84442-support-adding-rids-with-dash-in-base-part.patch +++ /dev/null @@ -1,164 +0,0 @@ -From abc761c2c5694e4029fea1a60dc1934951c66e26 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/84442 -From: Tom Deseyn -Date: Thu, 6 Apr 2023 13:18:11 +0200 -Subject: [PATCH 1/2] Microsoft.NETCore.Platforms: support adding rids with '-' - in the base part. - -Currently when trying to add a rid like 'linux-musl-x64' -the rid is not understood to be base = 'linux-musl', arch = 'x64'. - -Instead the parser considers a potential optional qualifier. -This causes the rid to be parsed as base = 'linux', arch = 'musl', -and qualifier = 'x64'. - -We know the rids being added won't have a qualifier. If we take -this into account while parsing, we can parse the rid correctly. ---- - .../Microsoft.NETCore.Platforms/src/RID.cs | 11 +++- - .../src/RuntimeGroupCollection.cs | 2 +- - .../tests/RidTests.cs | 50 +++++++++++++------ - 3 files changed, 47 insertions(+), 16 deletions(-) - -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -index 6457fd29cadf0..b464d5f0f54e3 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -@@ -56,7 +56,7 @@ private enum RIDPart : int - Max = Qualifier - } - -- public static RID Parse(string runtimeIdentifier) -+ public static RID Parse(string runtimeIdentifier, bool noQualifier) - { - string[] parts = new string[(int)RIDPart.Max + 1]; - bool omitVersionDelimiter = true; -@@ -90,6 +90,15 @@ public static RID Parse(string runtimeIdentifier) - // version might be omitted - else if (current == ArchitectureDelimiter) - { -+ // The qualifier delimiter and architecture delimiter are the same. -+ // When there is no qualifier, there will be one delimiter past the base part -+ // for the architecture. -+ // So if we see another delimiter later in the string (for the architecture), -+ // extend the base part instead of starting the architecture part. -+ if (noQualifier && runtimeIdentifier.IndexOf(ArchitectureDelimiter, i + 1) != -1) -+ { -+ break; -+ } - // ensure there's no version later in the string - if (runtimeIdentifier.IndexOf(VersionDelimiter, i) != -1) - { -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -index e069508053105..31009a8d28e5e 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -@@ -34,7 +34,7 @@ public RuntimeGroupCollection(ICollection runtimeGroups) - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { -- RID rid = RID.Parse(runtimeIdentifier); -+ RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); - } -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -index 227bcbdd10d4d..8dee0ebeda17a 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -@@ -10,35 +10,57 @@ public class RidTests - { - public static IEnumerable ValidRIDData() - { -- yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" } }; -- yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")} }; -- yield return new object[] { "linux", new RID() { BaseRID = "linux" } }; -- yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" } }; -- yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" } }; -- yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" } }; -- yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" } }; -- yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" } }; -- yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" } }; -- yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" } }; // demonstrates ambiguity, avoid using `-` in base -- yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" } }; // yes, we already have ambiguous RIDs -+ yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; -+ yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")}, null }; -+ yield return new object[] { "linux", new RID() { BaseRID = "linux" }, null }; -+ yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; -+ yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; -+ yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; -+ yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" }, null }; -+ yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" }, null }; -+ yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" }, null }; -+ yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" }, // demonstrates ambiguity, avoid using `-` in base -+ new RID() { BaseRID = "foo-bar", Architecture = "arm" } }; -+ yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" }, // yes, we already have ambiguous RIDs -+ new RID() { BaseRID = "linux-musl", Architecture = "x64" } }; - } - - [Theory] - [MemberData(nameof(ValidRIDData))] -- internal void ParseCorrectly(string input, RID expected) -+ internal void ParseCorrectly(string input, RID expected, RID? expectedNoQualifier) - { -- RID actual = RID.Parse(input); -+ _ = expectedNoQualifier; // unused -+ -+ RID actual = RID.Parse(input, noQualifier: false); - - Assert.Equal(expected, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] -- internal void ToStringAsExpected(string expected, RID rid) -+ internal void ParseCorrectlyNoQualifier(string input, RID expected, RID? expectedNoQualifier) -+ { -+ expectedNoQualifier ??= expected; -+ -+ RID actual = RID.Parse(input, noQualifier: true); -+ -+ Assert.Equal(expectedNoQualifier, actual); -+ } -+ -+ [Theory] -+ [MemberData(nameof(ValidRIDData))] -+ internal void ToStringAsExpected(string expected, RID rid, RID? expectedNoQualifierRid) - { - string actual = rid.ToString(); - - Assert.Equal(expected, actual); -+ -+ if (expectedNoQualifierRid is not null) -+ { -+ actual = expectedNoQualifierRid.ToString(); -+ -+ Assert.Equal(expected, actual); -+ } - } - } - } - -From f70da467ca94291039e0ea5b0723cb9db5e090e7 Mon Sep 17 00:00:00 2001 -From: Tom Deseyn -Date: Thu, 6 Apr 2023 18:14:31 +0200 -Subject: [PATCH 2/2] Update - src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs - -Co-authored-by: Eric StJohn ---- - .../Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -index 31009a8d28e5e..ec4762d71424c 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -@@ -34,6 +34,7 @@ public RuntimeGroupCollection(ICollection runtimeGroups) - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { -+ // don't parse qualifier since we don't use them and they are ambiguous with `-` in base RID - RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); diff --git a/community/dotnet6-stage0/runtime_84443-suppress-clang-16-warnings.patch b/community/dotnet6-stage0/runtime_84443-suppress-clang-16-warnings.patch deleted file mode 100644 index 6fbdda2..0000000 --- a/community/dotnet6-stage0/runtime_84443-suppress-clang-16-warnings.patch +++ /dev/null @@ -1,217 +0,0 @@ -From da120986f17d4016b44fdc91741ae1d999083eeb Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/84443 -From: Antoine Martin -Date: Thu, 6 Apr 2023 15:46:31 -0400 -Subject: [PATCH 1/2] Suppress clang-16 warnings (#81573) - ---- - eng/native/configurecompiler.cmake | 9 +++++++++ - eng/native/init-compiler.sh | 4 ++-- - src/coreclr/dlls/mscordbi/CMakeLists.txt | 5 +---- - src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 +++++++++++++++ - src/libraries/Native/Unix/CMakeLists.txt | 9 +++++++++ - src/native/corehost/apphost/static/CMakeLists.txt | 4 ++-- - .../apphost/static/singlefilehost_OSXexports.src | 11 ----------- - .../apphost/static/singlefilehost_unixexports.src | 4 ---- - 8 files changed, 38 insertions(+), 23 deletions(-) - delete mode 100644 src/native/corehost/apphost/static/singlefilehost_OSXexports.src - -diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake -index f3526deb19fa0..1a43b710c618b 100644 ---- a/src/runtime/eng/native/configurecompiler.cmake -+++ b/src/runtime/eng/native/configurecompiler.cmake -@@ -367,6 +367,15 @@ if (CLR_CMAKE_HOST_UNIX) - add_compile_options(-Wno-incompatible-ms-struct) - - add_compile_options(-Wno-reserved-identifier) -+ -+ # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734 -+ # which we are not conforming to yet. -+ add_compile_options(-Wno-unsafe-buffer-usage) -+ -+ # other clang 16.0 suppressions -+ add_compile_options(-Wno-single-bit-bitfield-constant-conversion) -+ add_compile_options(-Wno-cast-function-type-strict) -+ add_compile_options(-Wno-incompatible-function-pointer-types-strict) - else() - add_compile_options(-Wno-unknown-pragmas) - add_compile_options(-Wno-uninitialized) -diff --git a/src/runtime/eng/native/init-compiler.sh b/src/runtime/eng/native/init-compiler.sh -index 567d18da4747a..e215bd75ff158 100755 ---- a/src/runtime/eng/native/init-compiler.sh -+++ b/src/runtime/eng/native/init-compiler.sh -@@ -46,8 +46,8 @@ if [[ -z "$CLR_CC" ]]; then - # Set default versions - if [[ -z "$majorVersion" ]]; then - # note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero. -- if [[ "$compiler" == "clang" ]]; then versions=( 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) -- elif [[ "$compiler" == "gcc" ]]; then versions=( 11 10 9 8 7 6 5 4.9 ); fi -+ if [[ "$compiler" == "clang" ]]; then versions=( 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) -+ elif [[ "$compiler" == "gcc" ]]; then versions=( 12 11 10 9 8 7 6 5 4.9 ); fi - - for version in "${versions[@]}"; do - parts=(${version//./ }) -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -index c7a23c9923fe1..4a03a788a71a5 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -+++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -@@ -99,10 +99,7 @@ elseif(CLR_CMAKE_HOST_UNIX) - mscordaccore - ) - -- # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols -- # if they are defined after they are used. Having all libs twice makes sure that ld will actually -- # find all symbols. -- target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) -+ target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) - - add_dependencies(mscordbi mscordaccore) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -index afd2cfe800225..489c552a0bd3e 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -+++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -@@ -26,3 +26,18 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) - // Defer to the main debugging code. - return DbgDllMain(hInstance, dwReason, lpReserved); - } -+ -+#if defined(HOST_LINUX) && defined(TARGET_LINUX) -+PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); -+PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); -+ -+HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) -+{ -+ return DAC_PAL_RegisterModule(lpLibFileName); -+} -+ -+VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) -+{ -+ DAC_PAL_UnregisterModule(hInstance); -+} -+#endif -diff --git a/src/runtime/src/libraries/Native/Unix/CMakeLists.txt b/src/runtime/src/libraries/Native/Unix/CMakeLists.txt -index 6931f62d24c87..e9ebefcf8243a 100644 ---- a/src/runtime/src/libraries/Native/Unix/CMakeLists.txt -+++ b/src/runtime/src/libraries/Native/Unix/CMakeLists.txt -@@ -51,6 +51,15 @@ if(CMAKE_C_COMPILER_ID STREQUAL Clang) - add_compile_options(-Wthread-safety) - add_compile_options(-Wno-thread-safety-analysis) - add_compile_options(-Wno-reserved-identifier) -+ -+ # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734 -+ # which we are not conforming to yet. -+ add_compile_options(-Wno-unsafe-buffer-usage) -+ -+ # other clang 16.0 suppressions -+ add_compile_options(-Wno-single-bit-bitfield-constant-conversion) -+ add_compile_options(-Wno-cast-function-type-strict) -+ add_compile_options(-Wno-incompatible-function-pointer-types-strict) - elseif(CMAKE_C_COMPILER_ID STREQUAL GNU) - add_compile_options(-Wno-stringop-truncation) - endif() -diff --git a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -index a00c79139863f..6d491c086da98 100644 ---- a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -+++ b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -@@ -73,8 +73,8 @@ if(CLR_CMAKE_TARGET_WIN32) - add_linker_flag("/DEF:${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost.def") - - else() -- if(CLR_CMAKE_TARGET_OSX) -- set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_OSXexports.src) -+ if(CLR_CMAKE_TARGET_FREEBSD) -+ set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_freebsdexports.src) - else() - set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_unixexports.src) - endif() -diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src -deleted file mode 100644 -index 18d5697e84580..0000000000000 ---- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src -+++ /dev/null -@@ -1,11 +0,0 @@ --; Licensed to the .NET Foundation under one or more agreements. --; The .NET Foundation licenses this file to you under the MIT license. -- --; needed by SOS --DotNetRuntimeInfo -- --; DAC table export --g_dacTable -- --; Used by profilers --MetaDataGetDispenser -diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -index 1f9c517821855..18d5697e84580 100644 ---- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -+++ b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -@@ -9,7 +9,3 @@ g_dacTable - - ; Used by profilers - MetaDataGetDispenser -- --; FreeBSD needs to reexport these --__progname --environ - -From a6d9fbff551de1164ec9cc14bdd48f2ffad77d81 Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Thu, 6 Apr 2023 16:39:27 -0400 -Subject: [PATCH 2/2] Fix DBI loading problem on Linux (#82461) - ---- - src/coreclr/dlls/mscordbi/CMakeLists.txt | 16 +++++++++++++++- - src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 --------------- - 2 files changed, 15 insertions(+), 16 deletions(-) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -index 4a03a788a71a5..b7618b324c260 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -+++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -@@ -99,7 +99,21 @@ elseif(CLR_CMAKE_HOST_UNIX) - mscordaccore - ) - -- target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) -+ # Before llvm 16, lld was setting `--undefined-version` by default. The default was -+ # flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to -+ # `--undefined-version` for our use-case. -+ include(CheckLinkerFlag OPTIONAL) -+ if(COMMAND check_linker_flag) -+ check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION) -+ if (LINKER_SUPPORTS_UNDEFINED_VERSION) -+ add_linker_flag(-Wl,--undefined-version) -+ endif(LINKER_SUPPORTS_UNDEFINED_VERSION) -+ endif(COMMAND check_linker_flag) -+ -+ # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols -+ # if they are defined after they are used. Having all libs twice makes sure that ld will actually -+ # find all symbols. -+ target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) - - add_dependencies(mscordbi mscordaccore) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -index 489c552a0bd3e..afd2cfe800225 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -+++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -@@ -26,18 +26,3 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) - // Defer to the main debugging code. - return DbgDllMain(hInstance, dwReason, lpReserved); - } -- --#if defined(HOST_LINUX) && defined(TARGET_LINUX) --PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); --PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); -- --HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) --{ -- return DAC_PAL_RegisterModule(lpLibFileName); --} -- --VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) --{ -- DAC_PAL_UnregisterModule(hInstance); --} --#endif diff --git a/community/dotnet6-stage0/runtime_remove-usage-of-off64-t.patch b/community/dotnet6-stage0/runtime_remove-usage-of-off64-t.patch deleted file mode 100644 index a55dcde..0000000 --- a/community/dotnet6-stage0/runtime_remove-usage-of-off64-t.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 03712c3b684..99d8a457957 100644 ---- a/src/runtimr/src/coreclr/debug/createdump/crashinfounix.cpp -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -395,7 +395,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r - // performance optimization. - m_canUseProcVmReadSyscall = false; - assert(m_fd != -1); -- *read = pread64(m_fd, buffer, size, (off64_t)address); -+ *read = pread(m_fd, buffer, size, (off_t)address); - } - - if (*read == (size_t)-1) - - diff --git a/community/dotnet7-build/APKBUILD b/community/dotnet7-build/APKBUILD deleted file mode 100644 index 99afff2..0000000 --- a/community/dotnet7-build/APKBUILD +++ /dev/null @@ -1,584 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -# secfixes: -# 7.0.103-r0: -# - CVE-2023-21808 -# 7.0.105-r0: -# - CVE-2023-28260 -# 7.0.107-r0: -# - CVE-2023-24895 -# - CVE-2023-24897 -# - CVE-2023-24936 -# - CVE-2023-29331 -# - CVE-2023-29337 -# - CVE-2023-32032 -# - CVE-2023-33126 -# - CVE-2023-33128 -# - CVE-2023-33135 -# 7.0.109-r0: -# - CVE-2023-33127 -# - CVE-2023-33170 -# 7.0.110-r0: -# - CVE-2023-38178 -# - CVE-2023-35390 -# - CVE-2023-38180 -# - CVE-2023-35391 -# 7.0.111-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# 7.0.112-r0: -# - CVE-2023-36435 -# - CVE-2023-38171 -# - CVE-2023-44487 -# 7.0.113-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# - CVE-2023-44487 -# - CVE-2023-38171 -# - CVE-2023-36435 -# 7.0.114-r0: -# - CVE-2023-36049 -# - CVE-2023-36558 - - -pkgname=dotnet7-build -pkgver=7.0.114 -pkgrel=0 -_gittag=v$pkgver -_giturl="https://github.com/dotnet/installer" -_testtag=e1cc0f181ffd4d755756d30d985513897d592ba4 -_bunnytag=v12 -_llvmver=16 -_patches=" - build_disable-package-validation.patch - build_disable-source-link.patch - build_enable-timestamps.patch - roslyn-analyzer_disable-apphost.patch - runtime_76500-mono-musl-support.patch - runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_enable-runtime-marshalling.diff - runtime_enable-system-libunwind.diff - runtime_remove-usage-of-off64-t.patch - sdk_14239-add-zsh-compdef-completion-script.patch - " - -_pkgver_macro=${pkgver%.*} -_pkgver_prior=${pkgver%.*.*} -_pkgver_name=${_pkgver_macro//[.0]} -pkgdesc="The .NET $_pkgver_macro bootstrap" -# x86: blocked by https://github.com/dotnet/runtime/issues/77667 -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# s390x | ppc64le: no diskspace / lack maintainer resources -arch="x86_64 armv7 aarch64" -url=https://dotnet.microsoft.com -license="MIT" -# hack for dotnetx-build to be able to pull itself for bootstrapping -provides="dotnet$_pkgver_name-bootstrap" -provider_priority=$_pkgver_prior -checkdepends=" - babeltrace - binutils - coreutils - file - gawk - jq - lttng-tools - npm - procps - sed - strace - util-linux-misc - which - " -makedepends=" - alpine-release - bash - clang$_llvmver - cmake - dotnet$_pkgver_name-bootstrap - dotnet$_pkgver_name-bootstrap-artifacts - dotnet$_pkgver_name-stage0 - findutils - git - grep - icu-data-full - icu-dev - inetutils-syslogd - krb5-dev - libgit2-dev - libintl - libucontext-dev - libunwind-dev - libxml2-dev - libxml2-utils - linux-headers - lldb-dev - llvm$_llvmver-dev - lttng-ust-dev - nodejs - numactl-dev - openssl-dev - pigz - rsync - samurai - tar - xz - zlib-dev - " -case $CARCH in - s390x|x86) ;; - *) makedepends="$makedepends lld-dev";; -esac - -subpackages=" - dotnet$_pkgver_name-artifacts:artifacts:noarch - dotnet$_pkgver_name-sdk - dotnet$_pkgver_name-templates:templates:noarch - dotnet-zsh-completion:zshcomp:noarch - dotnet-bash-completion:bashcomp:noarch - dotnet-doc - netstandard21-targeting-pack:netstandard_targeting_pack:noarch - " -source=" - https://lab.ilot.io/dotnet/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz - dotnet-testsuite-$_testtag.tar.gz::https://github.com/redhat-developer/dotnet-regular-tests/archive/$_testtag.tar.gz - dotnet-bunny-$_bunnytag.tar.gz::https://github.com/redhat-developer/dotnet-bunny/archive/$_bunnytag.tar.gz - $_patches - " -builddir="$srcdir"/dotnet-$_gittag -_checkdir="$srcdir"/dotnet-bunny-${_bunnytag/v} -_testdir="$srcdir"/dotnet-regular-tests-$_testtag -_cli_root="$srcdir"/bootstrap -_libdir="/usr/lib" -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs/$pkgname -else - _logdir="$srcdir"/logs -fi - -case $CARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7) _dotnet_arch="arm";; - armhf) _dotnet_arch="armv6";; - *) _dotnet_arch="$CARCH";; -esac - -# Build doesn't set all the right executable bits for the right file types -_fix_executable() { - # add executable bit - find "$1" -type f \( \ - -name 'apphost' -o \ - -name 'singlefilehost' -o \ - -name 'lib*so' \ - \) \ - -exec chmod +x '{}' \; - - # remove executable bit - find "$1" -type f \( \ - -name '*.a' -o \ - -name '*.dll' -o \ - -name '*.h' -o \ - -name '*.json' -o \ - -name '*.pdb' -o \ - -name '*.props' -o \ - -name '*.pubxml' -o \ - -name '*.targets' -o \ - -name '*.txt' -o \ - -name '*.xml' \ - \) \ - -exec chmod -x '{}' \; -} - -# generates tarball containing all components built by dotnet -snapshot() { - local _pkg="$srcdir"/${builddir##*/}.tar - ulimit -n 4096 - if [ -d "$srcdir" ]; then - cd "$srcdir" - else - mkdir -p "$srcdir" && cd "$srcdir" - fi - if [ -d "installer" ]; then - cd "$srcdir"/installer - else - git clone $_giturl --branch $_gittag && cd "$srcdir"/installer - fi - - sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets - - if [ -d "$_libdir/dotnet/bootstrap" ]; then - local _cli_root="$(find $_libdir/dotnet/bootstrap/${_pkgver_macro}* -maxdepth 0 -type d | sort -r | head -n 1)" - else - local _cli_root="" - fi - - _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ - /p:ArcadeBuildTarball=true \ - /p:TarballDir=$builddir \ - /p:TarballFilePath=$_pkg - - msg "Compressing ${builddir##*/}.tar to $SRCDEST" - xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" - - cd "$startdir" - abuild checksum -} - -prepare() { - default_prepare - - # Parallel restore is broken on mono-based builds since dotnet7 - # see https://github.com/dotnet/runtime/issues/77364 - # A workaround via runtime_enable-runtime-marshalling.diff - case $CARCH in - s390x|ppc64le) - msg "runtime_enable-runtime-marshalling.diff" - patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff - ;; - esac - - # Using system libunwind is broken on aarch64|armv7, and unused on mono-based builds - # see https://github.com/dotnet/source-build/issues/2408, - case $CARCH in - aarch64|armv7) msg "Using bundled libunwind";; - armhf|s390x|ppc64le) msg "No libunwind used";; - *) - msg "Using system libunwind" - patch -p1 -i "$srcdir"/runtime_enable-system-libunwind.diff - ;; - esac - - # ensure that dotnet does not download artifacts provided by dotnet-artifacts - rm -rf "$builddir"/packages/archive - - # links logfiles to pipeline logs for easy pickup in pipelines - mkdir -p "$_logdir" "$builddir"/artifacts - ln -s "$_logdir" "$builddir"/artifacts/logs - ln -s "$_logdir" "$builddir"/artifacts/log - for i in "$builddir"/src/*; do - if [ -f "$i" ]; then - continue - fi - mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts - ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log - done - - # dotnet requires its bootstrap to be in a writable dir - msg "Setting up bootstrap" - local _bootstrapdir=$(find $_libdir/dotnet/bootstrap/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) - if [ ! -d "$_cli_root" ]; then - cp -r "$_bootstrapdir" "$_cli_root" - fi -} - -build() { - msg "Building $pkgname-$pkgver" - - ulimit -n 4096 - - export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - export DOTNET_LTTng=0 - fi - - case "$CARCH" in - x86*) ;; - *) - # clang doesn't implement this outside of x86, and it causes a later configure to fail - export CFLAGS="${CFLAGS/-fstack-clash-protection}" - export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}" - ;; - esac - - # looks for most recent recent version of _artifactsdir - local _artifactsdir=$(find $_libdir/dotnet/artifacts/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) - - # ci args, else the output is forwarded to log files which isn't ideal in a - # pipeline environment, and build by defaults uses lots of space - local args=" - /v:minimal - /p:LogVerbosity=minimal - /p:MinimalConsoleLogOutput=true - /p:CleanWhileBuilding=true - " - - # part of https://github.com/dotnet/installer/pull/14792 that sets this flag - # was not integrated in 7.0.1xx yet - case $CARCH in - s390x|ppc64le) local args="$args /p:SourceBuildUseMonoRuntime=true";; - esac - - # Sets TargetRid manually as dotnet cannot be trusted to reliably compute - # the machine's runtime ID between releases. - # shellcheck disable=SC2034 - . /etc/os-release - local VERSION_ID_DOT="${VERSION_ID//[^.]}" - while [ ${#VERSION_ID_DOT} -gt 1 ]; do - local VERSION_ID="${VERSION_ID%.*}" - local VERSION_ID_DOT="${VERSION_ID//[^.]}" - done - local VERSION_ID_DASH="${VERSION_ID//[^_]}" - while [ ${#VERSION_ID_DASH} -ge 1 ]; do - local VERSION_ID="${VERSION_ID%_*}" - local VERSION_ID_DASH="${VERSION_ID//[^_]}" - done - local args="$args /p:TargetRid=$ID.$VERSION_ID-$_dotnet_arch" - - ./build.sh \ - --with-sdk "$_cli_root" \ - --with-packages "$_artifactsdir" \ - -- $args -} - -check() { - ulimit -n 4096 - # Tests timeout (in seconds) - local _tests_timeout=1000 - # Test suite disable flags - # following tests can only work after packaging step - local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane" - # test broken: permission issue on lxc / pipelines - local _disabled_tests="$_disabled_tests createdump-aspnet workload" - # liblttng-ust_sys-sdt.h: no 'NT_STAPSDT' on Alpine's lttng-ust package - # lttng: known issue, see https://github.com/dotnet/runtime/issues/57784 - local _disabled_tests="$_disabled_tests liblttng-ust_sys-sdt.h lttng" - # {bundled,system}-libunwind: use system version on all but aarch64/armv7, as broken - # see https://github.com/redhat-developer/dotnet-regular-tests/issues/113 - # disable on mono-flavored runtime as mono does not use libunwind - case $CARCH in - armv7|aarch64) local _disabled_tests="$_disabled_tests system-libunwind";; - s390x|ppc64le|armhf) local _disabled_tests="$_disabled_tests bundled-libunwind system-libunwind";; - *) local _disabled_tests="$_disabled_tests bundled-libunwind";; - esac - # test unit broken currently - local _disabled_tests="$_disabled_tests system-libunwind" - # nativeaot is not supported on armv7 - case $CARCH in - armv7) local _disabled_tests="$_disabled_tests nativeaot" - esac - # test unit hangs - local _disabled_tests="$_disabled_tests debugging-via-dotnet-dump" - - msg "Unpacking produced dotnet" - export DOTNET_ROOT="$_checkdir/release" - if [ ! -d "$DOTNET_ROOT" ]; then - mkdir -p "$DOTNET_ROOT" - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$DOTNET_ROOT" \ - --no-same-owner - fi - export PATH="$DOTNET_ROOT:$PATH" - # some files either should or should not have executable bits - # (done again during packaging - this is for tests) - _fix_executable "$DOTNET_ROOT" - - msg "Building turkey test suite" - if [ ! -d "$_checkdir"/turkey ]; then - cd "$_checkdir"/Turkey - dotnet publish -f netcoreapp3.1 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey - fi - - msg "Running test suite" - cd "$_testdir" - for i in $_disabled_tests; do - if [ -d "$i" ]; then - sed -i 's|"enabled": true|"enabled": false|' $i/test.json - fi - done - dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout || local ERROR=true - if [ $ERROR ]; then - msg "Check error reported, dumping logs" - for i in *.log; do - msg "Dumping $i" - cat "$i" - done - fi -} - -package() { - # directory creation - install -dm 755 \ - "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver \ - "$pkgdir"/usr/share/man/man1 \ - "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver - - # unpack sdk to bootstrap - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ - --no-same-owner - - # extract arch-specific artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --wildcards \ - '*alpine*' - - # assemble docs - find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$pkgdir"/usr/share/man/man1/. \; - - # some files either should or should not have executable bits - _fix_executable "$pkgdir" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - rm "$pkgdir"/$_libdir/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so - fi -} - -sdk() { - pkgdesc="The .NET $_pkgver_macro SDK" - # libucontext isn't automatically detected on all platforms - depends=" - aspnetcore$_pkgver_name-runtime - aspnetcore$_pkgver_name-targeting-pack - dotnet$_pkgver_name-apphost-pack - dotnet$_pkgver_name-targeting-pack - dotnet$_pkgver_name-templates - netstandard21-targeting-pack - libucontext - " - provides=" - dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel - dotnet$_pkgver_name-dev=$pkgver-r$pkgrel - " - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - # sdk - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./sdk ./sdk-manifests - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" - - # See https://github.com/dotnet/source-build/issues/2579 - find "$subpkgdir" -type f -name 'testhost.x86' -delete - find "$subpkgdir" -type f -name 'vstest.console' -delete -} - -netstandard_targeting_pack() { - pkgdesc="The .NET 2.1 Standard targeting pack" - depends="dotnet-host" - provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./packs/NETStandard.Library.Ref - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -templates() { - pkgdesc="The .NET $_pkgver_macro templates" - depends="dotnet-host" - provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./templates - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -artifacts() { - pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" - # hack to allow artifacts to pull itself - provides="dotnet$_pkgver_name-bootstrap-artifacts" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ - "$subpkgdir"/usr/share/licenses - - # extract arch-agnostic artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --exclude '*Intermediate*' \ - --exclude '*alpine*' -} - -zshcomp() { - depends="" - pkgdesc="zsh completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack zsh" - depends="dotnet-host" - - install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet -} - -bashcomp() { - depends="" - pkgdesc="bash completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack bash-completion" - depends="dotnet-host" - - install -dm 755 "$subpkgdir"/usr/share/bash-completion/completions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet -} - -doc() { - default_doc - pkgdesc="Docs for .NET" - - # licenses - install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/usr/share/licenses/dotnet/ \ - --no-same-owner \ - ./LICENSE.txt ./ThirdPartyNotices.txt -} - -sha512sums=" -ff554ad65e09b5dbce2bc617a6ed548081a2078b23f04ef7812309fe98e21303d0a090118a283cf5123c4a28690e63e3f151b364c56f8ee1e56ae6e63a4f50bc dotnet-v7.0.114.tar.xz -e9f3df13d093fac214778c1137857e065f58d4e0d2a48d540d8ed7bb41e2fd73b2b3f62a0aa5b0e80fa80a5b58ba77ff19b9d10a492802f8539e3a6ed79d299d dotnet-testsuite-e1cc0f181ffd4d755756d30d985513897d592ba4.tar.gz -0028d5d97b814b122d73137b4e0d64ca5d788aa0ae5fde500de722e23522827f2538f06e75acb17cc39b8917961ee78d1f0bbc84b2b624ae0e9bf88adca2ba6f dotnet-bunny-v12.tar.gz -429033f5f6a8e33eb849c29c1d6628faca13751e1b1e536179b491041034dcdee107cbff12f7e9f1ef68a178a0818c534113f63bc8bbc37de67ec900c23cacf4 build_disable-package-validation.patch -ebab0364deab5d99131e2724b7fbac668bc27ddf74958623af1913e49850df98b2d077d27324b2bbabbbcdf77ea48bf7a7ca83d0ced6f48bdb66cc1e8bbce4a4 build_disable-source-link.patch -86fbaa058f78bba100f534f4c4bd6d7254181909f70d264c0390d3dd89c878a14ba9b5d2de05271b2c07b73ead70e029488c926221f676d59e27e387e3e579e9 build_enable-timestamps.patch -4ac92d2d9190a55ee20d3e145a28a6953c98d3eb838c8acfb808b8839316443cb64da4a2c5787df0171fce7ef96ff6381043085ed90c23ec09ce9ac81571e675 roslyn-analyzer_disable-apphost.patch -b56d5053831c43b8fed48894735b9910020abbae62b2b57bc9a423cd5ef09f412025e56dd9ce1994f551b87155d682796203fd351ca7fb8a29658078a6d4b029 runtime_76500-mono-musl-support.patch -d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -1f7be536c4826638853f110ee88bbd554be015cc88c6491c1066830789be18ad324f8ed2b1b75ed7aad74457dcafc812730059cb25d36d6344bfae8a517c00c4 runtime_enable-runtime-marshalling.diff -293742ab307bef459a21deadcc4ad7c7996cc4b490910a36c2763b8ad25cc8a91c4e03b6290567cd1030f69638d0156c5b6970887858fb091f8482b67356065d runtime_enable-system-libunwind.diff -d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80 runtime_remove-usage-of-off64-t.patch -d1b4ebcbb1a6815fc0ce4c471485c232618e60968a879309fb8336821a9351d2e0028d9f7726c0c041c750b497a0baa47400c78c9ceff550b91b4a6c2816fc41 sdk_14239-add-zsh-compdef-completion-script.patch -" diff --git a/community/dotnet7-build/README.md b/community/dotnet7-build/README.md deleted file mode 100644 index 4c2c6df..0000000 --- a/community/dotnet7-build/README.md +++ /dev/null @@ -1,145 +0,0 @@ -# dotnet7-build - -This is the .NET 7.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `dotnet7-build` (aimed for internal use as bootstrap) -* `dotnet7-build-artifacts` (aimed for internal use as bootstrap) -* `dotnet7-sdk` -* `dotnet7-templates` (required by sdk) -* `dotnet-zsh-completion` -* `dotnet-bash-completion` -* `dotnet-doc` -* `netstandard21-targeting-pack` - -## How to build dotnet7 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet7 is built using three different aports. - -* `community/dotnet7-stage0` -Builds minimum components for full build of dotnet7, and packages these in an initial -`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet7-build` -Builds full and packages dotnet7 fully using either stage0 or previoulsy built -dotnet7 build. -* `community/dotnet7-runtime` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet7-build. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet7-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet7/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the merge-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet7/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the merge-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/community/dotnet7-build/build_disable-package-validation.patch b/community/dotnet7-build/build_disable-package-validation.patch deleted file mode 100644 index 3200c67..0000000 --- a/community/dotnet7-build/build_disable-package-validation.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/repos/aspnetcore.proj.orig b/repos/aspnetcore.proj -index cea712c1bfa..cf5099da788 100644 ---- a/repos/aspnetcore.proj.orig -+++ b/repos/aspnetcore.proj -@@ -10,6 +10,7 @@ - $(BuildCommandArgs) --no-build-nodejs - $(BuildCommandArgs) /p:PublishCompressedFilesPathPrefix=$(SourceBuiltAspNetCoreRuntime) - $(BuildCommandArgs) /p:PortableBuild=false /p:TargetRuntimeIdentifier=$(TargetRid) -+ $(BuildCommandArgs) /p:EnablePackageValidation=false - - $(BuildCommandArgs) /p:MicrosoftNetFrameworkReferenceAssembliesVersion=1.0.0 diff --git a/community/dotnet7-build/build_disable-source-link.patch b/community/dotnet7-build/build_disable-source-link.patch deleted file mode 100644 index acf8132..0000000 --- a/community/dotnet7-build/build_disable-source-link.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Disable source link - -Addresses undiagnosed "Source control information is not available" error - ---- -diff --git a/repos/installer.proj b/repos/installer.proj -index 3a9756a27b7..4968184b14e 100644 ---- a/repos/installer.proj -+++ b/repos/installer.proj -@@ -26,6 +26,7 @@ - --> - $(BuildCommandArgs) /p:NETCoreAppMaximumVersion=99.9 - $(BuildCommandArgs) /p:OSName=$(OSNameOverride) -+ $(BuildCommandArgs) /p:EnableSourceLink=false - $(BuildCommandArgs) /p:PortableOSName=$(PortableOS) - $(BuildCommandArgs) /p:Rid=$(TargetRid) - $(BuildCommandArgs) /p:DOTNET_INSTALL_DIR=$(DotNetCliToolDir) diff --git a/community/dotnet7-build/build_enable-timestamps.patch b/community/dotnet7-build/build_enable-timestamps.patch deleted file mode 100644 index 98c7a50..0000000 --- a/community/dotnet7-build/build_enable-timestamps.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/repos/Directory.Build.props b/repos/Directory.Build.props -index b70a3161fef..d57f9393299 100644 ---- a/repos/Directory.Build.props -+++ b/repos/Directory.Build.props -@@ -134,6 +134,7 @@ - $(StandardSourceBuildArgs) $(FlagParameterPrefix)pack - $(StandardSourceBuildArgs) $(FlagParameterPrefix)publish - $(StandardSourceBuildArgs) -bl -+ $(StandardSourceBuildArgs) /consoleLoggerParameters:ShowTimestamp - - $(StandardSourceBuildArgs) /p:ArcadeBuildFromSource=true - $(StandardSourceBuildArgs) /p:CopyWipIntoInnerSourceBuildRepo=true - $(StandardSourceBuildArgs) /p:DotNetBuildOffline=true - -diff --git a/src/fsharp/eng/build.sh b/src/fsharp/eng/build.sh -index fff8414b3ef..d470fc6ed56 100755 ---- a/src/fsharp/eng/build.sh -+++ b/src/fsharp/eng/build.sh -@@ -144,7 +144,7 @@ while [[ $# > 0 ]]; do - --sourcebuild) - source_build=true - ;; -- /p:*) -+ /*) - properties="$properties $1" - ;; - *) -diff --git a/src/roslyn/eng/build.sh b/src/roslyn/eng/build.sh -index a08cbea099d..d3ec235732f 100755 ---- a/src/roslyn/eng/build.sh -+++ b/src/roslyn/eng/build.sh -@@ -167,7 +167,7 @@ while [[ $# > 0 ]]; do - args="$args $1" - shift - ;; -- /p:*) -+ /*) - properties="$properties $1" - ;; - *) diff --git a/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch b/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch deleted file mode 100644 index 7ebf967..0000000 --- a/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 79f02a53316f90543d60269d7c06727c376f423b Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Wed, 24 Aug 2022 18:41:08 +0000 -Subject: [PATCH 1/1] disable apphost usage - -Roslyn-analyzer can't seem to find apphost produced by runtime build on ppc64le -This disables its use as it isn't necessary - ---- -diff --git a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -index 044a2aba46..3d37e147b3 100644 ---- a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -+++ b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -@@ -15,6 +15,7 @@ - Release - false - true -+ false - - - -@@ -27,4 +28,4 @@ - - - -- -\ No newline at end of file -+ diff --git a/community/dotnet7-build/runtime_76500-mono-musl-support.patch b/community/dotnet7-build/runtime_76500-mono-musl-support.patch deleted file mode 100644 index f9d2630..0000000 --- a/community/dotnet7-build/runtime_76500-mono-musl-support.patch +++ /dev/null @@ -1,325 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/76500 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Mono musl support - ---- - Directory.Build.props | 1 + - eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- - eng/native/configurecompiler.cmake | 7 +++++ - eng/native/tryrun.cmake | 6 +++- - src/coreclr/pal/src/CMakeLists.txt | 5 ++++ - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/coreclr/vm/i386/cgenx86.cpp | 4 +++ - src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ - src/mono/mono.proj | 32 +++++++++++++------- - src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++ - 11 files changed, 146 insertions(+), 19 deletions(-) - -diff --git a/src/runtime/Directory.Build.props b/src/runtime/Directory.Build.props -index 6f9b97c0a9c..4298a6df1d3 100644 ---- a/src/runtime/Directory.Build.props -+++ b/src/runtime/Directory.Build.props -@@ -22,7 +22,6 @@ - $(_hostOS) - true - true -- true - - - -@@ -154,7 +154,7 @@ - <_runtimeOS Condition="'$(TargetsMobile)' == 'true'">$(TargetOS.ToLowerInvariant()) - - <_portableOS>linux -- <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl'">linux-musl -+ <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl' or $(_runtimeOS.StartsWith('alpine'))">linux-musl - <_portableOS Condition="'$(_runtimeOS)' == 'linux-bionic'">linux-bionic - <_portableOS Condition="'$(_hostOS)' == 'OSX'">osx - <_portableOS Condition="'$(_runtimeOS)' == 'win' or '$(TargetOS)' == 'windows'">win - -@@ -200,6 +199,9 @@ - - $(PackageRID) - $(_portableOS)-$(TargetArchitecture) -+ -+ true -+ true - - - -diff --git a/src/runtime/eng/native/tryrun.cmake b/src/runtime/eng/native/tryrun.cmake -index 6355b0988f7..056c6606b17 100644 ---- a/src/runtime/eng/native/tryrun.cmake -+++ b/src/runtime/eng/native/tryrun.cmake -@@ -8,7 +8,11 @@ endmacro() - - if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR -- EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl) -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) - - set(ALPINE_LINUX 1) - elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) -diff --git a/src/runtime/src/coreclr/pal/src/CMakeLists.txt b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -index d9726460ccf..c28563f8619 100644 ---- a/src/runtime/src/coreclr/pal/src/CMakeLists.txt -+++ b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -@@ -315,6 +315,11 @@ if(CLR_CMAKE_TARGET_LINUX) - target_link_libraries(coreclrpal ${UNWIND_LIBS}) - endif(CLR_CMAKE_USE_SYSTEM_LIBUNWIND) - -+ # bundled libunwind requires using libucontext on alpine and x86 and ppc64le -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ target_link_libraries(coreclrpal ucontext) -+ endif(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ - endif(CLR_CMAKE_TARGET_LINUX) - - if(CLR_CMAKE_TARGET_NETBSD) -diff --git a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -index 8d7f79ed3f0..043939ad2da 100644 ---- a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -+++ b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -@@ -25,7 +25,7 @@ - #include - #include - #include --#include -+#include - - #include "../inc/llvm/ELF.h" - -diff --git a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -index 811c84a140d..4e958a44b30 100644 ---- a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -+++ b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -@@ -1133,6 +1133,7 @@ extern "C" DWORD __stdcall avx512StateSupport() - - #else // !TARGET_UNIX - -+#if !__has_builtin(__cpuid) - void __cpuid(int cpuInfo[4], int function_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1143,7 +1144,9 @@ void __cpuid(int cpuInfo[4], int function_id) - : "0"(function_id) - ); - } -+#endif - -+#if !__has_builtin(__cpuidex) - void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1154,6 +1157,7 @@ void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - : "0"(function_id), "2"(subFunction_id) - ); - } -+#endif - - extern "C" DWORD __stdcall xmmYmmStateSupport() - { -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index cdff32677c0..08a82cd7e83 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -216,6 +216,35 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Enable the "full RELRO" options (RELRO & BIND_NOW) at link time - add_link_options(-Wl,-z,relro) - add_link_options(-Wl,-z,now) -+ # Detect Linux ID -+ # TODO: Eventually merge with eng/native/configureplatform.cmake -+ set(LINUX_ID_FILE "/etc/os-release") -+ if(CMAKE_CROSSCOMPILING) -+ set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") -+ endif() -+ -+ if(EXISTS ${LINUX_ID_FILE}) -+ execute_process( -+ COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ execute_process( -+ COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ endif() -+ -+ if(DEFINED CLR_CMAKE_LINUX_ID) -+ if(CLR_CMAKE_LINUX_ID STREQUAL alpine) -+ set(CLR_CMAKE_HOST_ALPINE_LINUX 1) -+ set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) -+ endif() -+ -+ if(CLR_CMAKE_LINUX_MUSL STREQUAL musl) -+ set(CLR_CMAKE_HOST_LINUX_MUSL 1) -+ endif() -+ endif(DEFINED CLR_CMAKE_LINUX_ID) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") - set(HOST_LINUX 1) - add_definitions(-D_GNU_SOURCE -D_REENTRANT) -@@ -900,6 +929,11 @@ else() - set(DISABLE_DLLMAP 1) - endif() - -+if(CLR_CMAKE_HOST_ALPINE_LINUX) -+ # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -+ # larger than the initial committed stack size. -+ add_definitions(-DENSURE_PRIMARY_STACK_SIZE) -+endif() - if(TARGET_DARWIN) - check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS) - if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS) -diff --git a/src/runtime/src/mono/mono.proj b/src/runtime/src/mono/mono.proj -index 59fea4a2f72..5bac7fdf1c6 100644 ---- a/src/runtime/src/mono/mono.proj -+++ b/src/runtime/src/mono/mono.proj -@@ -554,19 +560,21 @@ - darwin-x86_64 - windows-x86_64 - <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) -- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">gnu -- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">android -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' != 'true'">linux-gnu -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' == 'true'">alpine-linux-musl -+ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">linux-android - <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">hf - <_Objcopy>objcopy -- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x86'">i686-$(_LinuxAbi)-$(_Objcopy) - <_Objcopy Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/llvm-objcopy -+ <_Objcopy Condition="'$(TargetsLinuxMusl)' == 'true' and '$(CrossBuild)' != 'true'">objcopy - - <_ObjcopyPrefix Condition="'$(MonoCrossDir)' != '' and '$(Platform)' == 'riscv64'">llvm-objcopy- - -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 30df4bac1f7..8698fd81206 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -368,6 +368,11 @@ if(NOT DISABLE_SHARED_LIBS) - target_sources(monosgen-shared PRIVATE $) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - target_link_libraries (monosgen-shared PRIVATE monoapi) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(monosgen-shared PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - target_include_directories (monosgen-shared PRIVATE monoapi) - if(TARGET_WIN32) - # on Windows the import library for the shared mono library will have the same name as the static library, -@@ -527,6 +532,10 @@ if(NOT DISABLE_EXECUTABLES) - set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) - endif() - target_link_libraries(mono-sgen PRIVATE monoapi monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(mono-sgen PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/mono/mono/mini/mini-runtime.c b/src/runtime/src/mono/mono/mini/mini-runtime.c -index c481f69adc8..4db6c9a0ae7 100644 ---- a/src/runtime/src/mono/mono/mini/mini-runtime.c -+++ b/src/runtime/src/mono/mono/mini/mini-runtime.c -@@ -4383,6 +4383,30 @@ mini_llvm_init (void) - #endif - } - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+/*++ -+ Function: -+ EnsureStackSize -+ -+ Abstract: -+ This fixes a problem on MUSL where the initial stack size reported by the -+ pthread_attr_getstack is about 128kB, but this limit is not fixed and -+ the stack can grow dynamically. The problem is that it makes the -+ functions ReflectionInvocation::[Try]EnsureSufficientExecutionStack -+ to fail for real life scenarios like e.g. compilation of corefx. -+ Since there is no real fixed limit for the stack, the code below -+ ensures moving the stack limit to a value that makes reasonable -+ real life scenarios work. -+ -+ --*/ -+static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void -+ensure_stack_size (size_t size) -+{ -+ volatile uint8_t *s = (uint8_t *)g_alloca(size); -+ *s = 0; -+} -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - void - mini_add_profiler_argument (const char *desc) - { -@@ -4544,6 +4568,11 @@ mini_init (const char *filename) - mono_w32handle_init (); - #endif - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+ // TODO: https://github.com/dotnet/runtime/issues/72920 -+ ensure_stack_size (5 * 1024 * 1024); -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - mono_thread_info_runtime_init (&ticallbacks); - - if (g_hasenv ("MONO_DEBUG")) { -diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h -index a1f0fe6f68e..a9db2d336ca 100644 ---- a/src/runtime/src/mono/mono/utils/mono-context.h -+++ b/src/runtime/src/mono/mono/utils/mono-context.h -@@ -11,6 +11,14 @@ - #ifndef __MONO_MONO_CONTEXT_H__ - #define __MONO_MONO_CONTEXT_H__ - -+/* -+ * Handle non-gnu libc versions with nothing in features.h -+ * We have no idea what they're compatible with, so always fail. -+ */ -+#ifndef __GLIBC_PREREQ -+# define __GLIBC_PREREQ(x,y) 0 -+#endif -+ - #include "mono-compiler.h" - #include "mono-sigcontext.h" - #include "mono-machine.h" -diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c -index 0929a0b49ec..86311e19507 100644 ---- a/src/runtime/src/native/libs/System.Native/pal_io.c -+++ b/src/runtime/src/native/libs/System.Native/pal_io.c -@@ -1267,7 +1267,7 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t - // Try copying data using a copy-on-write clone. This shares storage between the files. - if (sourceLength != 0) - { -- while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR); -+ while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR); - copied = ret == 0; - } - #endif --- -2.36.3 - diff --git a/community/dotnet7-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch b/community/dotnet7-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch deleted file mode 100644 index d4cbe4d..0000000 --- a/community/dotnet7-build/runtime_82269-mono-thread-coop-undefine-fortify-source.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/82269 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Undefine fortify-source on mono-thread-coop - -When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. -See: https://gitlab.alpinelinux.org/alpine/aports/-/issues/14105. Alpine Linux -now sets this by default since https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/43463, -which makes mono-flavored runtime dump its core. This patch offers a workaround -by undefining _FORTIFY_SOURCE in the problematic file. - ---- -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d6605..34bb5785fba 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -15,6 +15,7 @@ - #ifdef TARGET_MACH - #define _DARWIN_C_SOURCE - #endif -+#undef _FORTIFY_SOURCE - - #include - #include diff --git a/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch b/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch deleted file mode 100644 index 7afbfa6..0000000 --- a/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 65877a9c1260c1c37d1c3355703b1951b6754cdf Mon Sep 17 00:00:00 2001 -From: Adeel <3840695+am11@users.noreply.github.com> -Date: Mon, 20 Mar 2023 19:36:14 +0200 -Subject: [PATCH] Specify -z notext on linux-musl-x86 - ---- - src/coreclr/CMakeLists.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/runtime/src/coreclr/CMakeLists.txt.orig b/src/runtime/src/coreclr/CMakeLists.txt -index 7d1ce8d..5cacc78 100644 ---- a/src/runtime/src/coreclr/CMakeLists.txt.orig -+++ b/src/runtime/src/coreclr/CMakeLists.txt -@@ -105,6 +105,10 @@ if(CLR_CMAKE_HOST_UNIX) - endif() - endif() - -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND CLR_CMAKE_TARGET_ARCH_I386) -+ add_linker_flag(-Wl,-z,notext) -+ endif() -+ - add_subdirectory(pal) - add_subdirectory(hosts) - else() diff --git a/community/dotnet7-build/runtime_enable-runtime-marshalling.diff b/community/dotnet7-build/runtime_enable-runtime-marshalling.diff deleted file mode 100644 index f609cfa..0000000 --- a/community/dotnet7-build/runtime_enable-runtime-marshalling.diff +++ /dev/null @@ -1,1807 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/77364 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Enable runtime marshalling - -Dotnet7 introduced a bug where MkDir would sometimes have a snuffed errno. -This is a temporary workaround till upstream finds why the errno is being -turned into EAGAIN. - ---- - src/libraries/Common/src/DisableRuntimeMarshalling.cs | 2 +- - .../Common/src/Interop/Unix/System.Native/Interop.MkDir.cs | 4 ++-- - src/libraries/Common/tests/Common.Tests.csproj | 2 +- - src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj | 2 +- - .../Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj | 4 ++-- - .../UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj | 2 +- - .../tests/Common/Microsoft.Extensions.Logging.Tests.csproj | 2 +- - .../tests/Microsoft.Win32.Primitives.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.AccessControl.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.Tests.csproj | 2 +- - .../src/Microsoft.Win32.SystemEvents.csproj | 2 +- - .../tests/Microsoft.Win32.SystemEvents.Tests.csproj | 2 +- - src/libraries/System.Console/src/System.Console.csproj | 2 +- - .../System.Console/tests/System.Console.Tests.csproj | 2 +- - src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj | 2 +- - .../System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj | 2 +- - src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj | 2 +- - .../System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Debug.Tests.csproj | 2 +- - .../src/System.Diagnostics.EventLog.csproj | 2 +- - .../tests/System.Diagnostics.EventLog.Tests.csproj | 2 +- - .../src/System.Diagnostics.FileVersionInfo.csproj | 2 +- - .../System.Diagnostics.FileVersionInfo.Tests.csproj | 2 +- - .../src/System.Diagnostics.PerformanceCounter.csproj | 2 +- - .../tests/System.Diagnostics.PerformanceCounter.Tests.csproj | 2 +- - .../src/System.Diagnostics.Process.csproj | 2 +- - .../tests/System.Diagnostics.Process.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Tracing.Tests.csproj | 2 +- - .../src/System.DirectoryServices.AccountManagement.csproj | 2 +- - .../System.DirectoryServices.AccountManagement.Tests.csproj | 2 +- - .../src/System.DirectoryServices.Protocols.csproj | 2 +- - .../tests/System.DirectoryServices.Protocols.Tests.csproj | 2 +- - .../src/System.DirectoryServices.csproj | 2 +- - .../tests/System.DirectoryServices.Tests.csproj | 2 +- - .../System.Drawing.Common/src/System.Drawing.Common.csproj | 2 +- - .../tests/System.Drawing.Common.Tests.csproj | 2 +- - .../src/System.Drawing.Primitives.csproj | 2 +- - .../System.Formats.Tar/src/System.Formats.Tar.csproj | 2 +- - .../System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj | 2 +- - .../NlsTests/System.Globalization.Extensions.Nls.Tests.csproj | 2 +- - .../tests/NlsTests/System.Globalization.Nls.Tests.csproj | 2 +- - .../src/System.IO.Compression.Brotli.csproj | 2 +- - .../tests/System.IO.Compression.Brotli.Tests.csproj | 2 +- - .../src/System.IO.Compression.ZipFile.csproj | 2 +- - .../tests/System.IO.Compression.ZipFile.Tests.csproj | 2 +- - .../System.IO.Compression/src/System.IO.Compression.csproj | 2 +- - .../tests/System.IO.Compression.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.AccessControl.csproj | 2 +- - .../tests/System.IO.FileSystem.AccessControl.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.DriveInfo.csproj | 2 +- - .../tests/System.IO.FileSystem.DriveInfo.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.Watcher.csproj | 2 +- - .../tests/System.IO.FileSystem.Watcher.Tests.csproj | 2 +- - .../tests/System.IO.FileSystem.Tests.csproj | 2 +- - .../src/System.IO.IsolatedStorage.csproj | 2 +- - .../tests/System.IO.IsolatedStorage.Tests.csproj | 2 +- - .../src/System.IO.MemoryMappedFiles.csproj | 2 +- - .../tests/System.IO.MemoryMappedFiles.Tests.csproj | 2 +- - .../src/System.IO.Pipes.AccessControl.csproj | 2 +- - .../tests/System.IO.Pipes.AccessControl.Tests.csproj | 2 +- - src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj | 2 +- - .../System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj | 2 +- - src/libraries/System.IO.Ports/src/System.IO.Ports.csproj | 2 +- - .../System.IO.Ports/tests/System.IO.Ports.Tests.csproj | 2 +- - src/libraries/System.Management/src/System.Management.csproj | 2 +- - .../System.Management/tests/System.Management.Tests.csproj | 2 +- - .../src/System.Net.Http.WinHttpHandler.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Functional.Tests.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Unit.Tests.csproj | 2 +- - src/libraries/System.Net.Http/src/System.Net.Http.csproj | 2 +- - .../FunctionalTests/System.Net.Http.Functional.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Http.Unit.Tests.csproj | 2 +- - .../src/System.Net.HttpListener.csproj | 2 +- - .../tests/System.Net.HttpListener.Tests.csproj | 2 +- - src/libraries/System.Net.Mail/src/System.Net.Mail.csproj | 2 +- - .../tests/Functional/System.Net.Mail.Functional.Tests.csproj | 2 +- - .../tests/Unit/System.Net.Mail.Unit.Tests.csproj | 2 +- - .../src/System.Net.NameResolution.csproj | 2 +- - .../System.Net.NameResolution.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj | 2 +- - .../src/System.Net.NetworkInformation.csproj | 2 +- - src/libraries/System.Net.Ping/src/System.Net.Ping.csproj | 2 +- - .../FunctionalTests/System.Net.Ping.Functional.Tests.csproj | 2 +- - .../System.Net.Primitives/src/System.Net.Primitives.csproj | 2 +- - .../System.Net.Primitives.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.Primitives.Pal.Tests.csproj | 2 +- - .../UnitTests/System.Net.Primitives.UnitTests.Tests.csproj | 2 +- - src/libraries/System.Net.Quic/src/System.Net.Quic.csproj | 2 +- - .../FunctionalTests/System.Net.Quic.Functional.Tests.csproj | 2 +- - .../System.Net.Requests/src/System.Net.Requests.csproj | 2 +- - .../System.Net.Security/src/System.Net.Security.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Security.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Security.Unit.Tests.csproj | 2 +- - .../System.Net.Sockets/src/System.Net.Sockets.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Sockets.Tests.csproj | 2 +- - .../System.Net.WebSockets/src/System.Net.WebSockets.csproj | 2 +- - .../System.Private.Xml/src/System.Private.Xml.csproj | 2 +- - .../tests/System.Resources.Extensions.Tests.csproj | 2 +- - .../tests/System.Resources.ResourceManager.Tests.csproj | 2 +- - .../System.Runtime.Caching/src/System.Runtime.Caching.csproj | 2 +- - .../tests/System.Runtime.Caching.Tests.csproj | 2 +- - .../tests/System.Runtime.Extensions.Tests.csproj | 2 +- - ...em.Runtime.InteropServices.RuntimeInformation.Tests.csproj | 2 +- - .../System.Runtime.InteropServices.Tests.csproj | 2 +- - .../tests/System.Runtime.Intrinsics.Tests.csproj | 2 +- - .../System.Runtime.Serialization.Formatters.Tests.csproj | 2 +- - .../tests/NlsTests/System.Runtime.Nls.Tests.csproj | 2 +- - .../System.Runtime/tests/System.Runtime.Tests.csproj | 2 +- - .../src/System.Security.AccessControl.csproj | 2 +- - .../tests/System.Security.AccessControl.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Cng.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Csp.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.Pkcs.csproj | 2 +- - .../tests/System.Security.Cryptography.Pkcs.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.ProtectedData.csproj | 2 +- - .../System.Security.Cryptography.ProtectedData.Tests.csproj | 2 +- - ...System.Security.Cryptography.X509Certificates.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.csproj | 2 +- - .../tests/System.Security.Cryptography.Tests.csproj | 2 +- - .../tests/System.Security.Permissions.Tests.csproj | 2 +- - .../src/System.Security.Principal.Windows.csproj | 2 +- - .../tests/System.Security.Principal.Windows.Tests.csproj | 2 +- - .../src/System.ServiceProcess.ServiceController.csproj | 2 +- - .../System.ServiceProcess.ServiceController.Tests.csproj | 2 +- - src/libraries/System.Speech/src/System.Speech.csproj | 2 +- - src/libraries/System.Speech/tests/System.Speech.Tests.csproj | 2 +- - .../src/System.Text.Encoding.CodePages.csproj | 2 +- - .../src/System.Threading.AccessControl.csproj | 2 +- - .../tests/System.Threading.AccessControl.Tests.csproj | 2 +- - .../src/System.Transactions.Local.csproj | 2 +- - .../src/System.Windows.Extensions.csproj | 2 +- - .../tests/System.Windows.Extensions.Tests.csproj | 2 +- - 134 files changed, 136 insertions(+), 136 deletions(-) - -diff --git a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -index 9a6bc544e55..10ec1fce44a 100644 ---- a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -+++ b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -@@ -2,4 +2,4 @@ - // The .NET Foundation licenses this file to you under the MIT license. - - // Used to indicate that runtime marshalling should be disabled. --[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -+// [assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -diff --git a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -index a6bb1dc3c0f..751e0ac690b 100644 ---- a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -+++ b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -@@ -9,8 +9,8 @@ internal static partial class Interop - { - internal static partial class Sys - { -- [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -- private static partial int MkDir(ref byte path, int mode); -+ [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -+ private static extern int MkDir(ref byte path, int mode); - - internal static int MkDir(ReadOnlySpan path, int mode) - { -diff --git a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -index 72de3a2ba17..16adf14be81 100644 ---- a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -+++ b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -index 19ee3bde1b5..d390a06be81 100644 ---- a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -+++ b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);nullable - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -index 93be9b87c96..10117338458 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -@@ -1,8 +1,8 @@ - - - -- -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ -+ $(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -index 0743d679b15..8ec495e8345 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -@@ -1,7 +1,7 @@ -  - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -index 6586026447c..c284ea4f48c 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -@@ -1,7 +1,7 @@ - - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -index aa61641a9fa..56ed9a2c927 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -index 7f6d66bdba8..168a20a1115 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for Microsoft.Win32.RegistryKey. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -index 76442c6fb1f..e92db98f790 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -index 98652656e9c..1972ac8ad18 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);CA2249 - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -index 1feb97ef841..ae5ad78ce7f 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows -+ - true - true - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -index d7e7dc61211..640179e2960 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides access to Windows system event notifications. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -index 1a8e130bee4..131134daa80 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Console/src/System.Console.csproj b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -index 1c45c5a8f93..880b740def1 100644 ---- a/src/runtime/src/libraries/System.Console/src/System.Console.csproj -+++ b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -index f4b451d30e1..418f9b30039 100644 ---- a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -+++ b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows -+ $(NetCoreAppCurrent); - true - ..\src\Resources\Strings.resx - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -index 8fad480d961..6efc49b3004 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249;CA1838;CA1846 - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -index 85a15ebe3d2..a8183df7eef 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -index 1a1756a85ad..0fa7a416a0f 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -index 6f72486a944..66d1f92904e 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -index 601c003fc30..6c22aac1e01 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -@@ -1,7 +1,7 @@ - - - System.Diagnostics.Tests -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - false -diff --git a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -index dfae87cc90a..affb0753616 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -index d052ccaa0b6..3563132cda3 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -index a0dbb8e208b..4ae893f4765 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - annotations -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -index 2146bf437cb..dd3dfeb4ae4 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -index 2c273820afb..c158c49ec2e 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -@@ -2,7 +2,7 @@ - - $(DefineConstants);FEATURE_REGISTRY - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -index e23bb4a94a7..bfa37a8f919 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -index 35b1a833abb..18c323c28ae 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -index 8152e3c7f05..be32f5d3b5d 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -index 0bb24c8eadd..6155cac4498 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -index 56862519355..3e11d02035a 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 - true - true - true -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -index 9a78a3acd54..632de15c235 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -index 83a118e940d..7b045dc3c0b 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - - $(NoWarn);SYSLIB0003 -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -index df9c7ef864a..9cf9a016204 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - $(DefineConstants);DRAWING_NAMESPACE - true - CS0618 -diff --git a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -index 33f175f1456..0b14a790777 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - true - - -diff --git a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -index 697be7783e2..2efcb61d950 100644 ---- a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -@@ -1,7 +1,7 @@ -  - - System.Drawing -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -index 33a9aa8c1dc..ea69b03b8a8 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -index ca1b4d99e50..d4475c8781f 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - $(LibrariesProjectRoot)/Common/tests/Resources/Strings.resx - true -diff --git a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -index 61a409ffedc..38f61fb9197 100644 ---- a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows -+ - true - - -diff --git a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -index a9aeef49807..0284070ad05 100644 ---- a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - -- $(NetCoreAppCurrent)-windows -+ - 14.0 - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -index ced12496d65..d67e262836b 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -index 709f655902d..607c50be625 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -index 94999191663..f8506c2adbc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -index 29c88cb2f9c..b049a0f3caa 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -index 80007bcfe5f..ee0bf21ccfc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -index 229119e3aa3..2fcad878c05 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -index 494ef1959db..08ddf1c7dd9 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -index c42a680fa2f..fe12ddd7911 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -index 61225e58e8a..90c69fee153 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -index 00d1afd3c94..8071e492986 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -index 469005b661d..7edcd52db0c 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -index 1246c914ab8..a83fbe23499 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD - true - true - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -index e386671171d..746e218cc24 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - --working-dir=/test-dir - true -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -index 2309a8c007a..b16deb25f25 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -index 0410513c46c..1f4b92f6418 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -index 9be9a376620..56ed27283ac 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -index ef44754372e..4525b0aa830 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -index 3dd3c8a455b..82091dc68d0 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -index 386250a4320..e0e4eab4e8e 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -index b0956d6ba7b..77585616ea3 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -index 8f31d5dd604..2e6ae7616ea 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -index c341d6c3ba6..3173e525799 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(DefineConstants);SERIAL_PORTS - true -diff --git a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -index 9a1592778a7..b71f36bc2f1 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Management/src/System.Management.csproj b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -index 5b66be0b573..1352df29995 100644 ---- a/src/runtime/src/libraries/System.Management/src/System.Management.csproj -+++ b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - $(NoWarn);0618 - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -index b5a0ebaa389..45c62a15a8b 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -@@ -4,7 +4,7 @@ - $(DefineConstants);SYSNETHTTP_NO_OPENSSL;HTTP3 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -index 85139c5391f..f2f2c2e5696 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -@@ -3,7 +3,7 @@ - ../../src/Resources/Strings.resx - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -index b0e790da1d6..46e75182fae 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -index ff51965c789..d5f4d3637ca 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -index 5d2ce4cc280..323c647d2d6 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -index 4a7b913a457..f81cc0576f9 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -index 0fbb5d7c497..b466e0b9d96 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -index 6d7ee08de0b..76e1a178242 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -index f4588a2b4a1..a21ef6a5d18 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -index 2edc2e3601c..75c119af62a 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -index d36ad67504e..8b240730a52 100644 ---- a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -+++ b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -index 71b5d783c45..167b0a2c5f5 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -index 0a068b65b72..5ccac35d05f 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -index 84a5864cac9..3567f4a6ea7 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - $(DefineConstants);SYSTEM_NET_PRIMITIVES_DLL -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -index 4e2e897b0a6..7a48043aad5 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -index 2fb034467dc..633181e4b58 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -index 8cc3d0ff90f..098b0d7460a 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -@@ -3,7 +3,7 @@ - true - 169,649 - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -index 257af8dbb88..6f118e0bf88 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -index 62b1be2da62..45b87e1dddb 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - -diff --git a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -index d16970c9a19..6a5034037a3 100644 ---- a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -+++ b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - $(NoWarn);SYSLIB0014 - -diff --git a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -index e030690763e..ad96b0fb669 100644 ---- a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - $(DefineConstants);PRODUCT - true -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -index 7c3d432f34c..7fd430a9220 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -index 1dd366e72a0..6a184f9d405 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -@@ -10,7 +10,7 @@ - 436 - - $(NoWarn);3021 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -index 61f9c6fa2d4..2674e098d82 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -index 884db1eea54..86517b47af6 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -index c0c4ded0d33..b361cc90d32 100644 ---- a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -+++ b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -@@ -1,7 +1,7 @@ - - - True -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -index 405e6375a9f..2a5bd1faacb 100644 ---- a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -+++ b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - System.Xml - true - -diff --git a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -index ad289dc6319..2485635439b 100644 ---- a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -index 66cb937a3d1..12e027437bd 100644 ---- a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - - - -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -index 869129ba71f..41a41f7bebb 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - Annotations - true -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -index 8f08caf9b46..ee8e300954a 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows;net48 -+ $(NetCoreAppCurrent);net48 - true - - -diff --git a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -index 3e3e2937781..85074f9fba2 100644 ---- a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -index 3edd7d47f72..db7a23c27c5 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -index 34964fb33f2..1a78852a17b 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -index 6c0187cf21f..fef12aa096c 100644 ---- a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -@@ -4,7 +4,7 @@ - $(NoWarn),1718,SYSLIB0013 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(Features.Replace('nullablePublicOnly', '') - -diff --git a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -index 378b38abb93..971c431ca2e 100644 ---- a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 - - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -index 849edc8cd5c..2deaa7914ef 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows -+ - $(NoWarn),SYSLIB0013 - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -index fc6859854dc..260dafbd372 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - $(NoWarn),1718,SYSLIB0013 - true -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -index 35fabc2416c..a461103be90 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -index 05fd95a165f..f0c167ed082 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -index 4bfc1719abf..cc312cffe4e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);TESTING_CNG_IMPLEMENTATION -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -index 59d139c7749..a8e94e72847 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(NoWarn);SYSLIB0021 - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -index be33237e616..426ddb38e27 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) - true - true - $(NoWarn);CA5384 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -index 8523c0d8296..2045f05a28e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);net48 -+ $(NetCoreAppCurrent);net48 - - - $(DefineConstants);HAVE_THUMBPRINT_OVERLOADS - true - $(NoWarn);SYSLIB0026;SYSLIB0027;SYSLIB0028 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS - true - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -index cf25738f6e7..29d0f0734cb 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);INTERNAL_ASYMMETRIC_IMPLEMENTATIONS -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - $(NoWarn);CA5350;CA5351;CA5379;CA5384;SYSLIB0026 - - $(NoWarn);CS0809 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -index 50e110c0445..b32809447d3 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser - true - $(NoWarn);SYSLIB0021 - true -diff --git a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -index 73f50b209fb..7205c2e239a 100644 ---- a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - $(NoWarn);SYSLIB0003 - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -index a67d4af63eb..9fef2993b07 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -index e9caf5fa463..43e03119cb3 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -index 518c800ae01..2b465d475b0 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249 - true -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -index 1039fad47f4..99412bc09b8 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -index 22506f7bf96..9c53e796bd8 100644 ---- a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -+++ b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - - -diff --git a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -index 9139d0d2392..d81ff8a7ca1 100644 ---- a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -+++ b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -index 8883abba36b..c7ff6be8fec 100644 ---- a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -+++ b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -index 54c8e0bad5f..c9c91e64692 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for synchronization primitives. -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -index 3b9e105954d..14949ff735b 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - CA1805;IDE0059;CS1591 - $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) - -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -index ee9cb23d69e..741c633215b 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum) - true - true - Provides miscellaneous Windows-specific types -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -index e7b45293318..089fe0ef33f 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - --- -2.36.3 - diff --git a/community/dotnet7-build/runtime_enable-system-libunwind.diff b/community/dotnet7-build/runtime_enable-system-libunwind.diff deleted file mode 100644 index 69045ad..0000000 --- a/community/dotnet7-build/runtime_enable-system-libunwind.diff +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/runtime/eng/SourceBuild.props b/src/runtime/eng/SourceBuild.props -index 32e6d9c0ba..8e2a7f9931 100644 ---- a/src/runtime/eng/SourceBuild.props -+++ b/src/runtime/eng/SourceBuild.props -@@ -51,6 +51,7 @@ - $(InnerBuildArgs) /p:DisableSourceLink=false - $(InnerBuildArgs) /p:AdditionalRuntimeIdentifierParent=$(BaseOS) - $(InnerBuildArgs) /p:PrimaryRuntimeFlavor=Mono /p:RuntimeFlavor=Mono -+ $(InnerBuildArgs) --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE - - - diff --git a/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch b/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch deleted file mode 100644 index a55dcde..0000000 --- a/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 03712c3b684..99d8a457957 100644 ---- a/src/runtimr/src/coreclr/debug/createdump/crashinfounix.cpp -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -395,7 +395,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r - // performance optimization. - m_canUseProcVmReadSyscall = false; - assert(m_fd != -1); -- *read = pread64(m_fd, buffer, size, (off64_t)address); -+ *read = pread(m_fd, buffer, size, (off_t)address); - } - - if (*read == (size_t)-1) - - diff --git a/community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch b/community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch deleted file mode 100644 index bdb120b..0000000 --- a/community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 4c74721e1f5da9642adab03075dda2f55719ac7b Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/sdk/pull/14239 -From: Esgariot -Date: Mon, 19 Oct 2020 23:42:37 +0200 -Subject: [PATCH 1/1] Add zsh compdef completion script. - -Continuing off of PR 13384 in upstream. -This commit is ready to be rebased to include appropriate co-authors -before merging PR. - ---- - scripts/register-completions.zsh | 13 +++---------- - 1 file changed, 3 insertions(+), 10 deletions(-) - -diff --git a/src/sdk/scripts/register-completions.zsh b/src/sdk/scripts/register-completions.zsh -index 8eebe9a867..faa32fef71 100644 ---- a/src/sdk/scripts/register-completions.zsh -+++ b/src/sdk/scripts/register-completions.zsh -@@ -1,10 +1,3 @@ --# zsh parameter completion for the dotnet CLI -- --_dotnet_zsh_complete() --{ -- local completions=("$(dotnet complete "$words")") -- -- reply=( "${(ps:\n:)completions}" ) --} -- --compctl -K _dotnet_zsh_complete dotnet -+#compdef dotnet -+local completions=("$(dotnet complete "$words")") -+[[ -n "$completions" ]] && compadd -- "${(ps:\n:)completions}" --- -2.34.1 - diff --git a/community/dotnet7-runtime/APKBUILD b/community/dotnet7-runtime/APKBUILD deleted file mode 100644 index 54e6227..0000000 --- a/community/dotnet7-runtime/APKBUILD +++ /dev/null @@ -1,172 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -# secfixes: -# 7.0.3-r0: -# - CVE-2023-21808 -# 7.0.5-r0: -# - CVE-2023-28260 -# 7.0.7-r0: -# - CVE-2023-24895 -# - CVE-2023-24897 -# - CVE-2023-24936 -# - CVE-2023-29331 -# - CVE-2023-29337 -# - CVE-2023-32032 -# - CVE-2023-33126 -# - CVE-2023-33128 -# - CVE-2023-33135 -# 7.0.9-r0: -# - CVE-2023-33127 -# - CVE-2023-33170 -# 7.0.10-r0: -# - CVE-2023-38178 -# - CVE-2023-35390 -# - CVE-2023-38180 -# - CVE-2023-35391 -# 7.0.11-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# 7.0.12-r0: -# - CVE-2023-36435 -# - CVE-2023-38171 -# - CVE-2023-44487 -# 7.0.13-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# - CVE-2023-44487 -# - CVE-2023-38171 -# - CVE-2023-36435 -# 7.0.14-r0: -# - CVE-2023-36049 -# - CVE-2023-36558 - - -pkgname=dotnet7-runtime -pkgver=7.0.14 -_bldver=7.0.114-r0 -pkgrel=0 - -# Following for dotnet build version 6.0 and up -_pkgver_macro=${pkgver%.*} -_pkgver_name=${_pkgver_macro//[.0]} -_bldver_ver=${_bldver%%-*} -pkgdesc="The .NET $_pkgver_macro Core runtime" -# x86: blocked by https://github.com/dotnet/runtime/issues/77667 -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# s390x: no diskspace -arch="x86_64 armv7 aarch64" -url=https://dotnet.microsoft.com -license="MIT" -depends=" - dotnet$_pkgver_name-hostfxr - icu-data-full - icu-libs - " -makedepends="dotnet$_pkgver_name-build=$_bldver" -subpackages=" - aspnetcore$_pkgver_name-runtime:aspnetcore_runtime:noarch - aspnetcore$_pkgver_name-targeting-pack:aspnetcore_targeting_pack:noarch - dotnet$_pkgver_name-apphost-pack:apphost_pack - dotnet$_pkgver_name-hostfxr - dotnet$_pkgver_name-targeting-pack:targeting_pack:noarch - dotnet-host:host - " -provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" -options="!check" # No test suite -source="dotnet.sh.in" -builddir="$srcdir" -_libdir="/usr/lib" - -case $CARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7) _dotnet_arch="arm";; - armhf) _dotnet_arch="armv6";; - *) _dotnet_arch="$CARCH";; -esac - -build() { - sed "s|%LIBDIR%|$_libdir/dotnet|" "$srcdir"/dotnet.sh.in > "$srcdir"/dotnet.sh -} - -package() { - install -dm 755 "$pkgdir"/$_libdir/dotnet/shared - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.NETCore.App "$pkgdir"/$_libdir/dotnet/shared/. -} - -host() { - pkgdesc="A generic driver for the .NET Core Command Line Interface" - depends="" - - install -dm 755 \ - "$subpkgdir"/etc/profile.d \ - "$subpkgdir"/etc/dotnet \ - "$subpkgdir"/usr/bin \ - "$subpkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/dotnet "$subpkgdir"/$_libdir/dotnet/. - ln -s $_libdir/dotnet/dotnet "$subpkgdir"/usr/bin/dotnet - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location_$_dotnet_arch - install -Dm 644 "$srcdir"/dotnet.sh -t "$subpkgdir"/etc/profile.d/ -} - -hostfxr() { - pkgdesc="The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use." - depends="dotnet-host" - provides="dotnet-hostfxr-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/host "$subpkgdir"/$_libdir/dotnet/. -} - -aspnetcore_runtime() { - pkgdesc="The ASP.NET $_pkgver_macro Core runtime" - depends="dotnet$_pkgver_name-runtime" - provides="aspnetcore-runtime-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/shared - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.AspNetCore.App "$subpkgdir"/$_libdir/dotnet/shared/. -} - -apphost_pack() { - pkgdesc="The .NET $_pkgver_macro Core apphost pack" - provides="dotnet-apphost-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Host.* "$subpkgdir"/$_libdir/dotnet/packs/. -} - -targeting_pack() { - pkgdesc="The .NET $_pkgver_macro Core targeting pack" - provides="dotnet-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. -} - -aspnetcore_targeting_pack() { - pkgdesc="The ASP.NET $_pkgver_macro Core targeting pack" - provides="aspnetcore-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.AspNetCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. -} - -sha512sums=" -c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in -" diff --git a/community/dotnet7-runtime/README.md b/community/dotnet7-runtime/README.md deleted file mode 100644 index 3ad31c7..0000000 --- a/community/dotnet7-runtime/README.md +++ /dev/null @@ -1,144 +0,0 @@ -# dotnet7-runtime - -This is the .NET 7.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `aspnetcore7-runtime` -* `aspnetcore7-targeting-pack` -* `dotnet7-apphost-pack` (used by dotnet7-runtime) -* `dotnet7-hostfxr` (used by dotnet-host) -* `dotnet7-runtime` -* `dotnet7-targeting-pack` -* `dotnet-host` - -## How to build dotnet7 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet7 is built using three different aports. - -* `community/dotnet7-stage0` -Builds minimum components for full build of dotnet7, and packages these in an initial -`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet7-build` -Builds full and packages dotnet7 fully using either stage0 or previoulsy built -dotnet7 build. -* `community/dotnet7-runtime` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet7-build. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet7-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet7/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet7/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/community/dotnet7-runtime/dotnet.sh.in b/community/dotnet7-runtime/dotnet.sh.in deleted file mode 100644 index f85eb29..0000000 --- a/community/dotnet7-runtime/dotnet.sh.in +++ /dev/null @@ -1,12 +0,0 @@ -# Set location for AppHost lookup -[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=%LIBDIR% - -# Add dotnet tools directory to PATH -DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" -case "$PATH" in - *"$DOTNET_TOOLS_PATH"* ) true ;; - * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; -esac - -# Extract self-contained executables under HOME to avoid multi-user issues from using the default '/var/tmp' -[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/community/dotnet7-stage0/APKBUILD b/community/dotnet7-stage0/APKBUILD deleted file mode 100644 index 72a783e..0000000 --- a/community/dotnet7-stage0/APKBUILD +++ /dev/null @@ -1,535 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=dotnet7-stage0 -pkgver=7.0.105 -pkgrel=4 - -[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" - -# Tag of tarball generator. -_gittag=v$pkgver - -# Versions of prebuilt artifacts and bootstrap tar -_artifactsver=7.0.102 -_bootstrapver="7.0.105" -_bootstraprel=0 -_installerver=${_gittag/v} - -# Version of packages that aren't defined in git-info or badly defined -_iltoolsver=7.0.2-servicing.22607.1 -_aspnetver=7.0.4 - -# Patches to be used. String before '_' refers to repo to patch -# Look for patch notes within each patch for what they fix / where they come from -# build_* patches applies directly to $builddir -_patches=" - installer_set-crossgen2rid-using-buildarchitecture.patch - runtime_76500-mono-musl-support.patch - runtime_76500-properly-set-toolchain-for-alpine.patch - runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_83682-specify-notext-on-linux-musl-x86.patch - runtime_84413-support-adding-rids-with-dash-in-base-part.patch - runtime_84444-suppress-clang-16-warnings.patch - runtime_enable-runtime-marshalling.diff - runtime_remove-usage-of-off64-t.patch - " -_extra_nupkgs="https://globalcdn.nuget.org/packages/stylecop.analyzers.1.2.0-beta.435.nupkg" - -_pkgver_macro=${pkgver%.*} -_pkgver_prior=1 -_pkgver_name="${_pkgver_macro//[.0]}" -pkgdesc="The .NET Core stage0 bits for dotnet build" -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# x86: blocked by https://github.com/dotnet/runtime/issues/83509 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# s390x: no diskspace | lack maintainer resources -arch="x86_64 armv7 aarch64" -url=https://dotnet.microsoft.com -_giturl=https://github.com/dotnet/installer -license="MIT" -options="!check" # Testsuite in main -build aport -subpackages=" - dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch - dotnet$_pkgver_name-stage0-bootstrap - " -source=" - https://lab.ilot.io/dotnet/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz - dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz - Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz - $_extra_nupkgs - $_patches - " - -makedepends_host=" - alpine-release - autoconf - automake - bash - binutils - clang - cmake - findutils - g++ - gcc - grep - icu-dev - krb5-dev - libintl - libstdc++ - libucontext-dev - libunwind-dev - libxml2-dev - libxml2-utils - linux-headers - lttng-ust-dev - musl-dev - musl-utils - openssl-dev - pigz - unzip - zip - zlib-dev - " -case $CARCH in - s390x) ;; - *) makedepends_host="$makedepends_host lld-dev";; -esac -makedepends_build=" - $makedepends_host - binutils$_cross - git - gcc$_cross - jq - llvm - llvm-dev - python3 - sed - xz - " -case $CBUILD_ARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7|armhf) _dotnet_arch="arm";; - i586) _dotnet_arch="x86";; - *) _dotnet_arch=$CBUILD_ARCH;; -esac -case $CTARGET_ARCH in - x86_64) _dotnet_target="x64";; - aarch64) _dotnet_target="arm64";; - armv7|armhf) _dotnet_target="arm";; - i586) _dotnet_target="x86";; - *) _dotnet_target=$CTARGET_ARCH;; -esac - -builddir="$srcdir"/dotnet-${_gittag/release\/} -_packagesdir="$srcdir"/local-packages -_libdir="/usr/lib" -_nugetdir="$srcdir"/nuget -_downloaddir="$srcdir"/local-downloads -_cli_root="$srcdir"/bootstrap -_nuget="$_cli_root/dotnet nuget" -_outputdir="$srcdir"/artifacts -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs/$pkgname -else - _logdir="$srcdir"/logs -fi - -# generates tarball containing all components built by dotnet -snapshot() { - local _pkg="$srcdir"/${builddir##*/}.tar - ulimit -n 4096 - if [ -d "$srcdir" ]; then - cd "$srcdir" - else - mkdir -p "$srcdir" && cd "$srcdir" - fi - if [ -d "installer" ]; then - cd "$srcdir"/installer - else - git clone $_giturl --branch $_gittag && cd "$srcdir"/installer - fi - - sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets - - if [ -d "$_libdir/dotnet/bootstrap" ]; then - local _cli_root="$(find $_libdir/dotnet/bootstrap/${_pkgver_macro}* -maxdepth 0 -type d | sort -r | head -n 1)" - else - local _cli_root="" - fi - - _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ - /p:ArcadeBuildTarball=true \ - /p:TarballDir=$builddir \ - /p:TarballFilePath=$_pkg - - msg "Compressing ${builddir##*/}.tar to $SRCDEST" - xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" - - cd "$startdir" - abuild checksum -} - -prepare() { - default_prepare - - # Parallel restore is broken on mono-based builds since dotnet7 - # see https://github.com/dotnet/runtime/issues/77364 - # fixed by https://github.com/dotnet/runtime/pull/79856 on dotnet8 - # A workaround via runtime_enable-runtime-marshalling.diff - case $CARCH in - s390x|ppc64le) - msg "runtime_enable-runtime-marshalling.diff" - patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff - ;; - esac - - # sdk insists on downloading its own dotnet unless ArcadeBuildFromSource - # is true, which opens up a can of worms - sed 's|ArcadeBuildFromSource=true|Architecture|' -i src/sdk/eng/restore-toolset.sh - - mkdir -p "$_cli_root" - mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir $_logdir - - # links logfiles to pipeline logs for easy pickup in pipelines - mkdir -p "$_logdir" "$builddir"/artifacts - ln -s "$_logdir" "$builddir"/artifacts/logs - ln -s "$_logdir" "$builddir"/artifacts/log - for i in "$builddir"/src/*; do - if [ -f "$i" ]; then - continue - fi - mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts - ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log - done - - tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner - - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - $_nuget push "$srcdir"/$filename --source="$_packagesdir" - done - - # adjusts sdk version and packagedir to expected - for i in runtime sdk installer aspnetcore roslyn; do - $_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config - tmp=$(mktemp) - jq ".sdk.version = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json - done -} - -_runtime() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_runtimever+x}" ]; then - local _runtimever=$(grep OutputPackageVersion "$builddir"/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') - fi - local _runtimever_ns=$(awk '{if($2 ~ "Name=\"VS.Redist.Common.NetCore.SharedFramework.x64.*\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building runtime version $_runtimever" - cd "$builddir"/src/runtime - - local args=" - -c Release - -bl - -clang - -arch $_dotnet_target - /consoleLoggerParameters:ShowTimestamp - /p:NoPgoOptimize=true - /p:EnableNgenOptimization=false - /p:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=none - /p:RunApiCompat=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') - " - if [ "$CBUILD" != "$CHOST" ]; then - local args="$args -cross" - local DotNetBuildFromSource=false - # x86 build of mono broken, thus do not build mono - case $_dotnet_target in - x86) local args="$args /p:DefaultSubsets=clr+libs+host+packs";; - esac - fi - if [ "$_runtimever" != "${_runtimever##*-}" ]; then - local args="$args /p:VersionSuffix=${_runtimever##*-}" - fi - DotNetBuildFromSource=$DotNetBuildFromSource ROOTFS_DIR="$CBUILDROOT" ./build.sh $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/Runtime/$_runtimever_ns - cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns -} - -_roslyn() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_roslynver+x}" ]; then - local _roslynver=$(grep OutputPackageVersion "$builddir"/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') - fi - local _roslynver_ns=$(awk '{if($2 == "Name=\"Microsoft.Net.Compilers.Toolset\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building roslyn version $_roslynver" - cd "$builddir"/src/roslyn - - local args=" - -c Release - -bl - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') - " - if [ "$_roslynver" != "${_roslynver##*-}" ]; then - local args="$args /p:VersionSuffix=${_roslynver##*-}" - fi - DotNetBuildFromSource=false ./eng/build.sh --restore $args /p:UseAppHost=false - ./eng/build.sh --restore --build --pack $args - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done -} - -_sdk() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_sdkver+x}" ]; then - local _sdkver=$(grep OutputPackageVersion "$builddir"/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') - fi - local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building sdk version $_sdkver" - cd "$builddir"/src/sdk - - local args=" - -c Release - -bl - /consoleLoggerParameters:ShowTimestamp - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') - /p:Architecture=$_dotnet_target - " - if [ "$_sdkver" != "${_sdkver##*-}" ]; then - local args="$args /p:VersionSuffix=${_sdkver##*-}" - fi - - ./build.sh --pack /p:Projects=$builddir/src/sdk/source-build.slnf $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/Sdk/$_sdkver_ns - cp artifacts/packages/*/*/dotnet-toolset-internal-*.zip "$_downloaddir"/Sdk/$_sdkver_ns -} - -_aspnetcore() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_aspnetver+x}" ]; then - local _aspnetver=$(grep OutputPackageVersion "$builddir"/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') - fi - local _aspnetver_ns=$(awk '{if($2 == "Name=\"Microsoft.AspNetCore.App.Ref.Internal\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Build aspnetcore version $_aspnetver" - cd "$builddir"/src/aspnetcore - local args=" - -c Release - -bl - --os-name linux-musl - -arch $_dotnet_target - -no-build-nodejs - /consoleLoggerParameters:ShowTimestamp - /p:BuildOSName=linux-musl - /p:BuildNodeJs=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') - /p:DotNetAssetRootUrl=file://$_downloaddir/ - /p:EnablePackageValidation=false - " - # x86 crossgen broken; ppc64le insists on using crossgen - case $_dotnet_target in - x86|ppc64le) local args="$args /p:DISABLE_CROSSGEN=True";; - esac - if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then - local args="$args /p:VersionSuffix=${_aspnetver##*-}" - fi - ./eng/build.sh --pack $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore-runtime-internal-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns -} - -_installer() { - "$_cli_root"/dotnet build-server shutdown - msg "[$(date)] Building installer version $_installerver" - cd "$builddir"/src/installer - - local args=" - -c Release - -bl - /consoleLoggerParameters:ShowTimestamp - /p:OSName=linux-musl - /p:HostOSName=linux-musl - /p:Architecture=$_dotnet_target - /p:CoreSetupBlobRootUrl=file://$_downloaddir/ - /p:DotnetToolsetBlobRootUrl=file://$_downloaddir/ - /p:EnableSourceLink=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/installer.props | sed -E 's|||g' | tr -d ' ') - /p:GitCommitCount=$(grep GitCommitCount "$builddir"/git-info/installer.props | sed -E 's|||g' | tr -d ' ') - /p:PublicBaseURL=file://$_downloaddir/ - " - if [ "$_installerver" != "${_installerver##*-}" ]; then - local args="$args /p:VersionSuffix=${_installerver##*-}" - fi - - # x86 crossgen broken - case $_dotnet_target in - x86) local args="$args /p:DISABLE_CROSSGEN=True";; - esac - - ./build.sh $args - - mkdir -p "$_downloaddir"/installer/$_installerver - cp artifacts/packages/*/*/dotnet-sdk-$_pkgver_macro*.tar.gz "$_downloaddir"/installer/$_installerver -} - -build() { - export _InitializeDotNetCli=$_cli_root - export DOTNET_INSTALL_DIR=$_cli_root - export PATH="$_cli_root:$PATH" - export NUGET_PACKAGES=$_nugetdir - export DotNetBuildFromSource=true - export DOTNET_CLI_TELEMETRY_OPTOUT=true - export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true - export SHELL=/bin/bash - export EXTRA_CPPFLAGS="${CPPFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_CXXFLAGS="${CXXFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_CFLAGS="${CFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_LDFLAGS="$LDFLAGS" - unset CXXFLAGS CFLAGS LDFLAGS CPPFLAGS - - ulimit -n 4096 - - _runtime - _roslyn - _sdk - _aspnetcore - _installer -} - -package() { - # lua-aports / buildrepo doesn't know to always build stage0 first when dealing - # with virtual packages. Thus, we need to depend on an empty stage0 pkg that - # dotnetx-build will pull, thus forcing build of stage0 first - mkdir -p "$pkgdir" -} - -bootstrap() { - # allows stage0 to be pulled by dotnetx-build if first build of dotnetx - provides="dotnet$_pkgver_name-bootstrap" - provider_priority=$_pkgver_prior - - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver - - # unpack build artifacts to bootstrap subdir for use by future builds - tar --use-compress-program="pigz" \ - -xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ - --no-same-owner - - local _iltoolsArray=" - runtime.*.Microsoft.NETCore.TestHost.*.nupkg - runtime.*.Microsoft.NETCore.ILAsm.*.nupkg - runtime.*.Microsoft.NETCore.ILDAsm.*.nupkg - " - - local _nupkgsArray=" - $_iltoolsArray - Microsoft.NETCore.App.Host.*.*.nupkg - Microsoft.NETCore.App.Runtime.*.*.nupkg - Microsoft.NETCore.App.Crossgen2.*.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHost.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHostPolicy.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHostResolver.*.nupkg - runtime.*.Microsoft.NETCore.DotNetAppHost.*.nupkg - Microsoft.AspNetCore.App.Runtime.linux-musl-*.*.nupkg - " - - # copies artifacts to artifacts dir for use by future dotnet builds - for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - install -Dm644 "$srcdir"/$filename "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ - done - - msg "Changing iltools version to $_iltoolsver" - # source-build expects a certain version of ilasm, ildasm and testhost - # following adjusts version - for i in $_iltoolsArray; do - local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i - local nupath=$(find $nupath || true) - local nupkg="${nupath##*/}" - local nuname="${nupkg/.nupkg}" - if [ -z "${nuname/*rtm*}" ] || [ -z "${nuname/*servicing*}" ]; then - nuname=${nuname%-*} - fi - local nuname="${nuname%.*.*.*}" - local nuver="${nupkg/$nuname.}" - local nuver="${nuver/.nupkg}" - local nuspec="$nuname.nuspec" - if [ ! "$nupath" ] || [ "$nupath" = "${nupath/$nuver/$_iltoolsver}" ]; then - continue - fi - # shellcheck disable=SC2094 - unzip -p "$nupath" $nuspec | sed "s|$nuver|$_iltoolsver|" > "$srcdir"/$nuspec - cd "$srcdir" - zip -u "$nupath" $nuspec - mv "$nupath" "${nupath/$nuver/$_iltoolsver}" - done -} - -# build relies on a plethora of nupkgs which are provided by this Artifacts file. -# stage0 sources these from Microsoft, which then allows bootstrap to build -# locally hosted versions. The following unpacks built tarball into directory -# for use by future builds. -artifacts() { - pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" - # hack to allow artifacts to pull itself - provides="dotnet$_pkgver_name-bootstrap-artifacts" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ - "$subpkgdir"/usr/share/licenses - - # extract artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --exclude '*x64*' -} - -sha512sums=" -bfc122f316673fe4014e891eb101ecf40efc2ed4ecaff0cbd4bb5c17f547ccaa867ae8af22f41813565630cdb68e2972633703a88478fadde39584f91588589d dotnet-v7.0.105.tar.xz -8fb7d1754359e3fda35b7a07e13d2a5e9e723196b980dd922b30919aedaddbedd4d82e28b37471437b69cb93e4b1d136ac701e221924e44d0be6b6ba94dc3654 dotnet-sdk-7.0.105-linux-musl-x64.noextract -c8120c20939232b53a3cdc607d812d93fadd6dea9466f9454df559f8b7eb334c69fdfd31bc60e4c70b6cf4fc519a25a0439902b04cf5c5bd0c29de020024fbe2 dotnet-sdk-7.0.105-linux-musl-arm64.noextract -9ffa724ccc02dc3e40afe22f0546a9bdf68b6314cf6da03d9387fb010fe3e5935154a5c06c4a2d588ff4ac77f34120a4ae9bc0237fb24452d78e6698435acf72 dotnet-sdk-7.0.105-linux-musl-arm.noextract -e5d8f11d5da842309c1e7cf9936eb0cf3cfb56aaa17aeee64fe264b3e6771ee56dd6c405a4c16950b4e4607dab21bc0ec40783f69b0865a6112d7d03b1b57487 Private.SourceBuilt.Artifacts.7.0.102.noextract -2ede8d9352a51861a5b2550010ff55da8241381a6fa6cc49e025f1c289b230b8c0177e93850de4ea8b6f702c1f2d50d81a9f4d890ca9441c257b614f2a5e05dd stylecop.analyzers.1.2.0-beta.435.nupkg -b6a2dfeccac329546f87f1019c1f2cf07e2f294dd33914449ad08d92269c8713b6fa1e330ef257c24e189023fd0b824df97688b0ba6e578a6d0292b07a72b4c1 installer_set-crossgen2rid-using-buildarchitecture.patch -43355fdb9531a08a9a141b016c049cc61d779e797f182456f56e5dc3af76fd31643d84d7ad7982080921681d2bbfc7bbaaa64f50c3899b023222eb0d841fbb2a runtime_76500-mono-musl-support.patch -24f3fed752922d2ca3c151f21fedf6a257c7c74a155105a1aa09cdc847ba24e496212cb2d8548b134a8901c7da8d78c27fa93579211f7bdeadc598f808fed4a8 runtime_76500-properly-set-toolchain-for-alpine.patch -d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -2dd195d5275245fe85bea2f75019fd3cbadcef7f5691b44c08db470265c6e7fcb2a50b3276a96df7547af76953623fdc92bd1ad51ccef6738813b78d22327fa3 runtime_83682-specify-notext-on-linux-musl-x86.patch -2ed962096eb9d8ae61831d224ceb05b8f77f5692f38a3457048d1b4abef705e8e4f676b81bb1a833e338e75ac8dc80b0631b1a45ad9a15c5597740b7320bfbb5 runtime_84413-support-adding-rids-with-dash-in-base-part.patch -929d5be2e4a213ad726652c24478e45abe1bf1d444c01a8975da007f246cb056916ad4681e541436faa89447e35c5e0a6101ae4ecaecc8083155b04e7138beb8 runtime_84444-suppress-clang-16-warnings.patch -1f7be536c4826638853f110ee88bbd554be015cc88c6491c1066830789be18ad324f8ed2b1b75ed7aad74457dcafc812730059cb25d36d6344bfae8a517c00c4 runtime_enable-runtime-marshalling.diff -d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80 runtime_remove-usage-of-off64-t.patch -" diff --git a/community/dotnet7-stage0/README.md b/community/dotnet7-stage0/README.md deleted file mode 100644 index 9bce6c4..0000000 --- a/community/dotnet7-stage0/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# dotnet7-stage0 - -This is the .NET 7.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `dotnet7` (empty package to go around `buildrepo` build ordering bug) -* `dotnet7-stage0-bootstrap` (packages binary bootstrap artifacts) -* `dotnet7-stage0-artifacts` (packages non-binary bootstrap artifacts) - -## How to build dotnet7 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet7 is built using three different aports. - -* `community/dotnet7-stage0` -Builds minimum components for full build of dotnet7, and packages these in an initial -`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet7-build` -Builds full and packages dotnet7 fully using either stage0 or previoulsy built -dotnet7 build. -* `community/dotnet7-runtime` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet7-build. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet7-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet7/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet7/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/community/dotnet7-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch b/community/dotnet7-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch deleted file mode 100644 index 309e092..0000000 --- a/community/dotnet7-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/installer/src/redist/targets/GenerateLayout.targets.orig b/src/installer/src/redist/targets/GenerateLayout.targets -index a27834f..0c899d4 100644 ---- a/src/installer/src/redist/targets/GenerateLayout.targets.orig -+++ b/src/installer/src/redist/targets/GenerateLayout.targets -@@ -85,7 +85,7 @@ - windowsdesktop-runtime-$(MicrosoftWindowsDesktopAppRuntimePackageVersion)-$(SharedFrameworkRid)$(ArchiveExtension) - - $(HostOSName)-$(BuildArchitecture) -- $(SharedFrameworkRid) -+ $(SharedFrameworkRid.SubString(0, $(SharedFrameworkRid.LastIndexOf('-'))))-$(BuildArchitecture) - - $(SharedFrameworkRid) - linux-x64 diff --git a/community/dotnet7-stage0/runtime_76500-mono-musl-support.patch b/community/dotnet7-stage0/runtime_76500-mono-musl-support.patch deleted file mode 100644 index 6685988..0000000 --- a/community/dotnet7-stage0/runtime_76500-mono-musl-support.patch +++ /dev/null @@ -1,325 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/76500 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Mono musl support - ---- - Directory.Build.props | 1 + - eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- - eng/native/configurecompiler.cmake | 7 +++++ - eng/native/tryrun.cmake | 6 +++- - src/coreclr/pal/src/CMakeLists.txt | 5 ++++ - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/coreclr/vm/i386/cgenx86.cpp | 4 +++ - src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ - src/mono/mono.proj | 32 +++++++++++++------- - src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++ - 11 files changed, 146 insertions(+), 19 deletions(-) - -diff --git a/src/runtime/Directory.Build.props b/src/runtime/Directory.Build.props -index 6f9b97c0a9c..4298a6df1d3 100644 ---- a/src/runtime/Directory.Build.props -+++ b/src/runtime/Directory.Build.props -@@ -22,7 +22,6 @@ - $(_hostOS) - true - true -- true - - - -@@ -154,7 +154,7 @@ - <_runtimeOS Condition="'$(TargetsMobile)' == 'true'">$(TargetOS.ToLowerInvariant()) - - <_portableOS>linux -- <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl'">linux-musl -+ <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl' or $(_runtimeOS.StartsWith('alpine'))">linux-musl - <_portableOS Condition="'$(_runtimeOS)' == 'linux-bionic'">linux-bionic - <_portableOS Condition="'$(_hostOS)' == 'OSX'">osx - <_portableOS Condition="'$(_runtimeOS)' == 'win' or '$(TargetOS)' == 'windows'">win -@@ -200,6 +199,9 @@ - - $(PackageRID) - $(_portableOS)-$(TargetArchitecture) -+ -+ true -+ true - - - -diff --git a/src/runtime/eng/native/tryrun.cmake b/src/runtime/eng/native/tryrun.cmake -index 6355b0988f7..056c6606b17 100644 ---- a/src/runtime/eng/native/tryrun.cmake -+++ b/src/runtime/eng/native/tryrun.cmake -@@ -8,7 +8,11 @@ endmacro() - - if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR -- EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl) -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) - - set(ALPINE_LINUX 1) - elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) -diff --git a/src/runtime/src/coreclr/pal/src/CMakeLists.txt b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -index d9726460ccf..c28563f8619 100644 ---- a/src/runtime/src/coreclr/pal/src/CMakeLists.txt -+++ b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -@@ -315,6 +315,11 @@ if(CLR_CMAKE_TARGET_LINUX) - target_link_libraries(coreclrpal ${UNWIND_LIBS}) - endif(CLR_CMAKE_USE_SYSTEM_LIBUNWIND) - -+ # bundled libunwind requires using libucontext on alpine and x86 and ppc64le -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ target_link_libraries(coreclrpal ucontext) -+ endif(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ - endif(CLR_CMAKE_TARGET_LINUX) - - if(CLR_CMAKE_TARGET_NETBSD) -diff --git a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -index 8d7f79ed3f0..043939ad2da 100644 ---- a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -+++ b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -@@ -25,7 +25,7 @@ - #include - #include - #include --#include -+#include - - #include "../inc/llvm/ELF.h" - -diff --git a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -index 811c84a140d..4e958a44b30 100644 ---- a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -+++ b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -@@ -1133,6 +1133,7 @@ extern "C" DWORD __stdcall avx512StateSupport() - - #else // !TARGET_UNIX - -+#if !__has_builtin(__cpuid) - void __cpuid(int cpuInfo[4], int function_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1143,7 +1144,9 @@ void __cpuid(int cpuInfo[4], int function_id) - : "0"(function_id) - ); - } -+#endif - -+#if !__has_builtin(__cpuidex) - void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1154,6 +1157,7 @@ void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - : "0"(function_id), "2"(subFunction_id) - ); - } -+#endif - - extern "C" DWORD __stdcall xmmYmmStateSupport() - { -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index cdff32677c0..08a82cd7e83 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -216,6 +216,35 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Enable the "full RELRO" options (RELRO & BIND_NOW) at link time - add_link_options(-Wl,-z,relro) - add_link_options(-Wl,-z,now) -+ # Detect Linux ID -+ # TODO: Eventually merge with eng/native/configureplatform.cmake -+ set(LINUX_ID_FILE "/etc/os-release") -+ if(CMAKE_CROSSCOMPILING) -+ set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") -+ endif() -+ -+ if(EXISTS ${LINUX_ID_FILE}) -+ execute_process( -+ COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ execute_process( -+ COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ endif() -+ -+ if(DEFINED CLR_CMAKE_LINUX_ID) -+ if(CLR_CMAKE_LINUX_ID STREQUAL alpine) -+ set(CLR_CMAKE_HOST_ALPINE_LINUX 1) -+ set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) -+ endif() -+ -+ if(CLR_CMAKE_LINUX_MUSL STREQUAL musl) -+ set(CLR_CMAKE_HOST_LINUX_MUSL 1) -+ endif() -+ endif(DEFINED CLR_CMAKE_LINUX_ID) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") - set(HOST_LINUX 1) - add_definitions(-D_GNU_SOURCE -D_REENTRANT) -@@ -893,6 +922,12 @@ if(HOST_IOS OR HOST_ANDROID OR HOST_MACCAT) - else() - set(DISABLE_DLLMAP 1) - endif() -+ -+if(CLR_CMAKE_HOST_ALPINE_LINUX) -+ # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -+ # larger than the initial committed stack size. -+ add_definitions(-DENSURE_PRIMARY_STACK_SIZE) -+endif() - ### End of OS specific checks - - include_directories("${CLR_SRC_NATIVE_DIR}") -diff --git a/src/runtime/src/mono/mono.proj b/src/runtime/src/mono/mono.proj -index 59fea4a2f72..5bac7fdf1c6 100644 ---- a/src/runtime/src/mono/mono.proj -+++ b/src/runtime/src/mono/mono.proj -@@ -554,19 +560,21 @@ - darwin-x86_64 - windows-x86_64 - <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) -- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">gnu -- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">android -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' != 'true'">linux-gnu -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' == 'true'">alpine-linux-musl -+ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">linux-android - <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">hf - <_Objcopy>objcopy -- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x86'">i686-$(_LinuxAbi)-$(_Objcopy) - <_Objcopy Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/llvm-objcopy -+ <_Objcopy Condition="'$(TargetsLinuxMusl)' == 'true' and '$(CrossBuild)' != 'true'">objcopy - - <_ObjcopyPrefix Condition="'$(MonoCrossDir)' != '' and '$(Platform)' == 'riscv64'">llvm-objcopy- - -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 30df4bac1f7..8698fd81206 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -368,6 +368,11 @@ if(NOT DISABLE_SHARED_LIBS) - target_sources(monosgen-shared PRIVATE $) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - target_link_libraries (monosgen-shared PRIVATE monoapi) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(monosgen-shared PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - target_include_directories (monosgen-shared PRIVATE monoapi) - if(TARGET_WIN32) - # on Windows the import library for the shared mono library will have the same name as the static library, -@@ -527,6 +532,10 @@ if(NOT DISABLE_EXECUTABLES) - set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) - endif() - target_link_libraries(mono-sgen PRIVATE monoapi monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(mono-sgen PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/mono/mono/mini/mini-runtime.c b/src/runtime/src/mono/mono/mini/mini-runtime.c -index c481f69adc8..4db6c9a0ae7 100644 ---- a/src/runtime/src/mono/mono/mini/mini-runtime.c -+++ b/src/runtime/src/mono/mono/mini/mini-runtime.c -@@ -4383,6 +4383,30 @@ mini_llvm_init (void) - #endif - } - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+/*++ -+ Function: -+ EnsureStackSize -+ -+ Abstract: -+ This fixes a problem on MUSL where the initial stack size reported by the -+ pthread_attr_getstack is about 128kB, but this limit is not fixed and -+ the stack can grow dynamically. The problem is that it makes the -+ functions ReflectionInvocation::[Try]EnsureSufficientExecutionStack -+ to fail for real life scenarios like e.g. compilation of corefx. -+ Since there is no real fixed limit for the stack, the code below -+ ensures moving the stack limit to a value that makes reasonable -+ real life scenarios work. -+ -+ --*/ -+static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void -+ensure_stack_size (size_t size) -+{ -+ volatile uint8_t *s = (uint8_t *)g_alloca(size); -+ *s = 0; -+} -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - void - mini_add_profiler_argument (const char *desc) - { -@@ -4544,6 +4568,11 @@ mini_init (const char *filename) - mono_w32handle_init (); - #endif - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+ // TODO: https://github.com/dotnet/runtime/issues/72920 -+ ensure_stack_size (5 * 1024 * 1024); -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - mono_thread_info_runtime_init (&ticallbacks); - - if (g_hasenv ("MONO_DEBUG")) { -diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h -index a1f0fe6f68e..a9db2d336ca 100644 ---- a/src/runtime/src/mono/mono/utils/mono-context.h -+++ b/src/runtime/src/mono/mono/utils/mono-context.h -@@ -11,6 +11,14 @@ - #ifndef __MONO_MONO_CONTEXT_H__ - #define __MONO_MONO_CONTEXT_H__ - -+/* -+ * Handle non-gnu libc versions with nothing in features.h -+ * We have no idea what they're compatible with, so always fail. -+ */ -+#ifndef __GLIBC_PREREQ -+# define __GLIBC_PREREQ(x,y) 0 -+#endif -+ - #include "mono-compiler.h" - #include "mono-sigcontext.h" - #include "mono-machine.h" -diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c -index 0929a0b49ec..86311e19507 100644 ---- a/src/runtime/src/native/libs/System.Native/pal_io.c -+++ b/src/runtime/src/native/libs/System.Native/pal_io.c -@@ -1267,7 +1267,7 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t - // Try copying data using a copy-on-write clone. This shares storage between the files. - if (sourceLength != 0) - { -- while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR); -+ while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR); - copied = ret == 0; - } - #endif --- -2.36.3 - diff --git a/community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch b/community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch deleted file mode 100644 index 8069db8..0000000 --- a/community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/arcade/pull/11608 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Mono musl support - ---- - Directory.Build.props | 1 + - eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- - eng/native/configurecompiler.cmake | 7 +++++ - eng/native/tryrun.cmake | 6 +++- - src/coreclr/pal/src/CMakeLists.txt | 5 ++++ - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/coreclr/vm/i386/cgenx86.cpp | 4 +++ - src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ - src/mono/mono.proj | 32 +++++++++++++------- - src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++ - 11 files changed, 146 insertions(+), 19 deletions(-) - -diff --git a/src/runtime/eng/common/cross/toolchain.cmake b/src/runtime/eng/common/cross/toolchain.cmake -index 561576be97c..a9db659f869 100644 ---- a/src/runtime/eng/common/cross/toolchain.cmake -+++ b/src/runtime/eng/common/cross/toolchain.cmake -@@ -60,13 +60,25 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") - set(CMAKE_SYSTEM_PROCESSOR ppc64le) -- set(TOOLCHAIN "powerpc64le-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) -+ set(TOOLCHAIN "powerpc64le-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "powerpc64le-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "riscv64") - set(CMAKE_SYSTEM_PROCESSOR riscv64) -- set(TOOLCHAIN "riscv64-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) -+ set(TOOLCHAIN "riscv64-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "riscv64-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "s390x") - set(CMAKE_SYSTEM_PROCESSOR s390x) -- set(TOOLCHAIN "s390x-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl) -+ set(TOOLCHAIN "s390x-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "s390x-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "x64") - set(CMAKE_SYSTEM_PROCESSOR x86_64) - if(LINUX) -@@ -83,7 +95,11 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") - set(CMAKE_SYSTEM_PROCESSOR i686) -- set(TOOLCHAIN "i686-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ set(TOOLCHAIN "i586-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "i686-linux-gnu") -+ endif() - if(TIZEN) - set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0") - endif() -@@ -253,8 +269,12 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64") - add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") -- add_toolchain_linker_flag(-m32) -- -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ add_toolchain_linker_flag("--target=${TOOLCHAIN}") -+ add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}") -+ else() -+ add_toolchain_linker_flag(-m32) -+ endif() - if(TIZEN) - add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") - add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") -@@ -291,7 +311,11 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$") - add_compile_options(-mfloat-abi=softfp) - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") -- add_compile_options(-m32) -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ add_compile_options(--target=${TOOLCHAIN}) -+ else() -+ add_compile_options(-m32) -+ endif() - add_compile_options(-Wno-error=unused-command-line-argument) - endif() - --- -2.36.3 - diff --git a/community/dotnet7-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch b/community/dotnet7-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch deleted file mode 100644 index d4cbe4d..0000000 --- a/community/dotnet7-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/82269 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Undefine fortify-source on mono-thread-coop - -When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. -See: https://gitlab.alpinelinux.org/alpine/aports/-/issues/14105. Alpine Linux -now sets this by default since https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/43463, -which makes mono-flavored runtime dump its core. This patch offers a workaround -by undefining _FORTIFY_SOURCE in the problematic file. - ---- -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d6605..34bb5785fba 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -15,6 +15,7 @@ - #ifdef TARGET_MACH - #define _DARWIN_C_SOURCE - #endif -+#undef _FORTIFY_SOURCE - - #include - #include diff --git a/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch b/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch deleted file mode 100644 index 7afbfa6..0000000 --- a/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 65877a9c1260c1c37d1c3355703b1951b6754cdf Mon Sep 17 00:00:00 2001 -From: Adeel <3840695+am11@users.noreply.github.com> -Date: Mon, 20 Mar 2023 19:36:14 +0200 -Subject: [PATCH] Specify -z notext on linux-musl-x86 - ---- - src/coreclr/CMakeLists.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/runtime/src/coreclr/CMakeLists.txt.orig b/src/runtime/src/coreclr/CMakeLists.txt -index 7d1ce8d..5cacc78 100644 ---- a/src/runtime/src/coreclr/CMakeLists.txt.orig -+++ b/src/runtime/src/coreclr/CMakeLists.txt -@@ -105,6 +105,10 @@ if(CLR_CMAKE_HOST_UNIX) - endif() - endif() - -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND CLR_CMAKE_TARGET_ARCH_I386) -+ add_linker_flag(-Wl,-z,notext) -+ endif() -+ - add_subdirectory(pal) - add_subdirectory(hosts) - else() diff --git a/community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch b/community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch deleted file mode 100644 index b9990ec..0000000 --- a/community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch +++ /dev/null @@ -1,164 +0,0 @@ -From abc761c2c5694e4029fea1a60dc1934951c66e26 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/84413 -From: Tom Deseyn -Date: Thu, 6 Apr 2023 13:18:11 +0200 -Subject: [PATCH 1/2] Microsoft.NETCore.Platforms: support adding rids with '-' - in the base part. - -Currently when trying to add a rid like 'linux-musl-x64' -the rid is not understood to be base = 'linux-musl', arch = 'x64'. - -Instead the parser considers a potential optional qualifier. -This causes the rid to be parsed as base = 'linux', arch = 'musl', -and qualifier = 'x64'. - -We know the rids being added won't have a qualifier. If we take -this into account while parsing, we can parse the rid correctly. ---- - .../Microsoft.NETCore.Platforms/src/RID.cs | 11 +++- - .../src/RuntimeGroupCollection.cs | 2 +- - .../tests/RidTests.cs | 50 +++++++++++++------ - 3 files changed, 47 insertions(+), 16 deletions(-) - -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -index 6457fd29cadf0..b464d5f0f54e3 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -@@ -56,7 +56,7 @@ private enum RIDPart : int - Max = Qualifier - } - -- public static RID Parse(string runtimeIdentifier) -+ public static RID Parse(string runtimeIdentifier, bool noQualifier) - { - string[] parts = new string[(int)RIDPart.Max + 1]; - bool omitVersionDelimiter = true; -@@ -90,6 +90,15 @@ public static RID Parse(string runtimeIdentifier) - // version might be omitted - else if (current == ArchitectureDelimiter) - { -+ // The qualifier delimiter and architecture delimiter are the same. -+ // When there is no qualifier, there will be one delimiter past the base part -+ // for the architecture. -+ // So if we see another delimiter later in the string (for the architecture), -+ // extend the base part instead of starting the architecture part. -+ if (noQualifier && runtimeIdentifier.IndexOf(ArchitectureDelimiter, i + 1) != -1) -+ { -+ break; -+ } - // ensure there's no version later in the string - if (runtimeIdentifier.IndexOf(VersionDelimiter, i) != -1) - { -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -index e069508053105..31009a8d28e5e 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -@@ -34,7 +34,7 @@ public RuntimeGroupCollection(ICollection runtimeGroups) - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { -- RID rid = RID.Parse(runtimeIdentifier); -+ RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); - } -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -index 227bcbdd10d4d..8dee0ebeda17a 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -@@ -10,35 +10,57 @@ public class RidTests - { - public static IEnumerable ValidRIDData() - { -- yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" } }; -- yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")} }; -- yield return new object[] { "linux", new RID() { BaseRID = "linux" } }; -- yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" } }; -- yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" } }; -- yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" } }; -- yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" } }; -- yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" } }; -- yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" } }; -- yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" } }; // demonstrates ambiguity, avoid using `-` in base -- yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" } }; // yes, we already have ambiguous RIDs -+ yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; -+ yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")}, null }; -+ yield return new object[] { "linux", new RID() { BaseRID = "linux" }, null }; -+ yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; -+ yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; -+ yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; -+ yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" }, null }; -+ yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" }, null }; -+ yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" }, null }; -+ yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" }, // demonstrates ambiguity, avoid using `-` in base -+ new RID() { BaseRID = "foo-bar", Architecture = "arm" } }; -+ yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" }, // yes, we already have ambiguous RIDs -+ new RID() { BaseRID = "linux-musl", Architecture = "x64" } }; - } - - [Theory] - [MemberData(nameof(ValidRIDData))] -- internal void ParseCorrectly(string input, RID expected) -+ internal void ParseCorrectly(string input, RID expected, RID? expectedNoQualifier) - { -- RID actual = RID.Parse(input); -+ _ = expectedNoQualifier; // unused -+ -+ RID actual = RID.Parse(input, noQualifier: false); - - Assert.Equal(expected, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] -- internal void ToStringAsExpected(string expected, RID rid) -+ internal void ParseCorrectlyNoQualifier(string input, RID expected, RID? expectedNoQualifier) -+ { -+ expectedNoQualifier ??= expected; -+ -+ RID actual = RID.Parse(input, noQualifier: true); -+ -+ Assert.Equal(expectedNoQualifier, actual); -+ } -+ -+ [Theory] -+ [MemberData(nameof(ValidRIDData))] -+ internal void ToStringAsExpected(string expected, RID rid, RID? expectedNoQualifierRid) - { - string actual = rid.ToString(); - - Assert.Equal(expected, actual); -+ -+ if (expectedNoQualifierRid is not null) -+ { -+ actual = expectedNoQualifierRid.ToString(); -+ -+ Assert.Equal(expected, actual); -+ } - } - } - } - -From f70da467ca94291039e0ea5b0723cb9db5e090e7 Mon Sep 17 00:00:00 2001 -From: Tom Deseyn -Date: Thu, 6 Apr 2023 18:14:31 +0200 -Subject: [PATCH 2/2] Update - src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs - -Co-authored-by: Eric StJohn ---- - .../Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -index 31009a8d28e5e..ec4762d71424c 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -@@ -34,6 +34,7 @@ public RuntimeGroupCollection(ICollection runtimeGroups) - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { -+ // don't parse qualifier since we don't use them and they are ambiguous with `-` in base RID - RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); diff --git a/community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch b/community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch deleted file mode 100644 index e1f54fc..0000000 --- a/community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch +++ /dev/null @@ -1,192 +0,0 @@ -From 4b82b0b1173981ea5f2c7baf003a66fad31208c9 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/84443 -From: Antoine Martin -Date: Thu, 6 Apr 2023 16:01:47 -0400 -Subject: [PATCH 1/2] Suppress clang-16 warnings (#81573) - ---- - eng/common/native/init-compiler.sh | 2 +- - eng/native/configurecompiler.cmake | 9 +++++++++ - src/coreclr/dlls/mscordbi/CMakeLists.txt | 5 +---- - src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 +++++++++++++++ - src/native/corehost/apphost/static/CMakeLists.txt | 4 ++-- - ...orts.src => singlefilehost_freebsdexports.src} | 4 ++++ - .../apphost/static/singlefilehost_unixexports.src | 4 ---- - 7 files changed, 32 insertions(+), 11 deletions(-) - rename src/native/corehost/apphost/static/{singlefilehost_OSXexports.src => singlefilehost_freebsdexports.src} (81%) - -diff --git a/src/runtime/eng/common/native/init-compiler.sh b/src/runtime/eng/common/native/init-compiler.sh -index 41a26d802a93f..f13b74080edf9 100644 ---- a/src/runtime/eng/common/native/init-compiler.sh -+++ b/src/runtime/eng/common/native/init-compiler.sh -@@ -71,7 +71,7 @@ if [[ -z "$CLR_CC" ]]; then - # Set default versions - if [[ -z "$majorVersion" ]]; then - # note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero. -- if [[ "$compiler" == "clang" ]]; then versions=( 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) -+ if [[ "$compiler" == "clang" ]]; then versions=( 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) - elif [[ "$compiler" == "gcc" ]]; then versions=( 12 11 10 9 8 7 6 5 4.9 ); fi - - for version in "${versions[@]}"; do -diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake -index 9090289f50e34..eaf5a867c5f6d 100644 ---- a/src/runtime/eng/native/configurecompiler.cmake -+++ b/src/runtime/eng/native/configurecompiler.cmake -@@ -447,6 +447,15 @@ if (CLR_CMAKE_HOST_UNIX) - add_compile_options(-Wno-incompatible-ms-struct) - - add_compile_options(-Wno-reserved-identifier) -+ -+ # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734 -+ # which we are not conforming to yet. -+ add_compile_options(-Wno-unsafe-buffer-usage) -+ -+ # other clang 16.0 suppressions -+ add_compile_options(-Wno-single-bit-bitfield-constant-conversion) -+ add_compile_options(-Wno-cast-function-type-strict) -+ add_compile_options(-Wno-incompatible-function-pointer-types-strict) - else() - add_compile_options(-Wno-uninitialized) - add_compile_options(-Wno-strict-aliasing) -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -index c24a90cf70409..95e92034e238f 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -+++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -@@ -100,10 +100,7 @@ elseif(CLR_CMAKE_HOST_UNIX) - mscordaccore - ) - -- # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols -- # if they are defined after they are used. Having all libs twice makes sure that ld will actually -- # find all symbols. -- target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) -+ target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) - - add_dependencies(mscordbi mscordaccore) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -index 891c01e144f5c..109fe6a5b5417 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -+++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -@@ -32,3 +32,18 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) - // Defer to the main debugging code. - return DbgDllMain(hInstance, dwReason, lpReserved); - } -+ -+#if defined(HOST_LINUX) && defined(TARGET_LINUX) -+PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); -+PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); -+ -+HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) -+{ -+ return DAC_PAL_RegisterModule(lpLibFileName); -+} -+ -+VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) -+{ -+ DAC_PAL_UnregisterModule(hInstance); -+} -+#endif -diff --git a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -index c37885bf5691c..a632d993c0f2a 100644 ---- a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -+++ b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -@@ -65,8 +65,8 @@ if(CLR_CMAKE_TARGET_WIN32) - add_linker_flag("/DEF:${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost.def") - - else() -- if(CLR_CMAKE_TARGET_OSX) -- set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_OSXexports.src) -+ if(CLR_CMAKE_TARGET_FREEBSD) -+ set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_freebsdexports.src) - else() - set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_unixexports.src) - endif() -diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_freebsdexports.src -similarity index 81% -rename from src/native/corehost/apphost/static/singlefilehost_OSXexports.src -rename to src/native/corehost/apphost/static/singlefilehost_freebsdexports.src -index 18d5697e84580..1f9c517821855 100644 ---- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src -+++ b/src/runtime/src/native/corehost/apphost/static/singlefilehost_freebsdexports.src -@@ -9,3 +9,7 @@ g_dacTable - - ; Used by profilers - MetaDataGetDispenser -+ -+; FreeBSD needs to reexport these -+__progname -+environ -diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -index 1f9c517821855..18d5697e84580 100644 ---- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -+++ b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -@@ -9,7 +9,3 @@ g_dacTable - - ; Used by profilers - MetaDataGetDispenser -- --; FreeBSD needs to reexport these --__progname --environ - -From b5b3114e6866ac0058b5e18da52f92a1738a915b Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Thu, 6 Apr 2023 16:35:18 -0400 -Subject: [PATCH 2/2] Fix DBI loading problem on Linux (#82461) - ---- - src/coreclr/dlls/mscordbi/CMakeLists.txt | 16 +++++++++++++++- - src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 --------------- - 2 files changed, 15 insertions(+), 16 deletions(-) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -index 95e92034e238f..c577651141e5c 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -+++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -@@ -100,7 +100,21 @@ elseif(CLR_CMAKE_HOST_UNIX) - mscordaccore - ) - -- target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) -+ # Before llvm 16, lld was setting `--undefined-version` by default. The default was -+ # flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to -+ # `--undefined-version` for our use-case. -+ include(CheckLinkerFlag OPTIONAL) -+ if(COMMAND check_linker_flag) -+ check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION) -+ if (LINKER_SUPPORTS_UNDEFINED_VERSION) -+ add_linker_flag(-Wl,--undefined-version) -+ endif(LINKER_SUPPORTS_UNDEFINED_VERSION) -+ endif(COMMAND check_linker_flag) -+ -+ # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols -+ # if they are defined after they are used. Having all libs twice makes sure that ld will actually -+ # find all symbols. -+ target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) - - add_dependencies(mscordbi mscordaccore) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -index 109fe6a5b5417..891c01e144f5c 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -+++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -@@ -32,18 +32,3 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) - // Defer to the main debugging code. - return DbgDllMain(hInstance, dwReason, lpReserved); - } -- --#if defined(HOST_LINUX) && defined(TARGET_LINUX) --PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); --PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); -- --HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) --{ -- return DAC_PAL_RegisterModule(lpLibFileName); --} -- --VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) --{ -- DAC_PAL_UnregisterModule(hInstance); --} --#endif diff --git a/community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff b/community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff deleted file mode 100644 index f609cfa..0000000 --- a/community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff +++ /dev/null @@ -1,1807 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/77364 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Enable runtime marshalling - -Dotnet7 introduced a bug where MkDir would sometimes have a snuffed errno. -This is a temporary workaround till upstream finds why the errno is being -turned into EAGAIN. - ---- - src/libraries/Common/src/DisableRuntimeMarshalling.cs | 2 +- - .../Common/src/Interop/Unix/System.Native/Interop.MkDir.cs | 4 ++-- - src/libraries/Common/tests/Common.Tests.csproj | 2 +- - src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj | 2 +- - .../Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj | 4 ++-- - .../UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj | 2 +- - .../tests/Common/Microsoft.Extensions.Logging.Tests.csproj | 2 +- - .../tests/Microsoft.Win32.Primitives.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.AccessControl.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.Tests.csproj | 2 +- - .../src/Microsoft.Win32.SystemEvents.csproj | 2 +- - .../tests/Microsoft.Win32.SystemEvents.Tests.csproj | 2 +- - src/libraries/System.Console/src/System.Console.csproj | 2 +- - .../System.Console/tests/System.Console.Tests.csproj | 2 +- - src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj | 2 +- - .../System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj | 2 +- - src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj | 2 +- - .../System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Debug.Tests.csproj | 2 +- - .../src/System.Diagnostics.EventLog.csproj | 2 +- - .../tests/System.Diagnostics.EventLog.Tests.csproj | 2 +- - .../src/System.Diagnostics.FileVersionInfo.csproj | 2 +- - .../System.Diagnostics.FileVersionInfo.Tests.csproj | 2 +- - .../src/System.Diagnostics.PerformanceCounter.csproj | 2 +- - .../tests/System.Diagnostics.PerformanceCounter.Tests.csproj | 2 +- - .../src/System.Diagnostics.Process.csproj | 2 +- - .../tests/System.Diagnostics.Process.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Tracing.Tests.csproj | 2 +- - .../src/System.DirectoryServices.AccountManagement.csproj | 2 +- - .../System.DirectoryServices.AccountManagement.Tests.csproj | 2 +- - .../src/System.DirectoryServices.Protocols.csproj | 2 +- - .../tests/System.DirectoryServices.Protocols.Tests.csproj | 2 +- - .../src/System.DirectoryServices.csproj | 2 +- - .../tests/System.DirectoryServices.Tests.csproj | 2 +- - .../System.Drawing.Common/src/System.Drawing.Common.csproj | 2 +- - .../tests/System.Drawing.Common.Tests.csproj | 2 +- - .../src/System.Drawing.Primitives.csproj | 2 +- - .../System.Formats.Tar/src/System.Formats.Tar.csproj | 2 +- - .../System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj | 2 +- - .../NlsTests/System.Globalization.Extensions.Nls.Tests.csproj | 2 +- - .../tests/NlsTests/System.Globalization.Nls.Tests.csproj | 2 +- - .../src/System.IO.Compression.Brotli.csproj | 2 +- - .../tests/System.IO.Compression.Brotli.Tests.csproj | 2 +- - .../src/System.IO.Compression.ZipFile.csproj | 2 +- - .../tests/System.IO.Compression.ZipFile.Tests.csproj | 2 +- - .../System.IO.Compression/src/System.IO.Compression.csproj | 2 +- - .../tests/System.IO.Compression.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.AccessControl.csproj | 2 +- - .../tests/System.IO.FileSystem.AccessControl.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.DriveInfo.csproj | 2 +- - .../tests/System.IO.FileSystem.DriveInfo.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.Watcher.csproj | 2 +- - .../tests/System.IO.FileSystem.Watcher.Tests.csproj | 2 +- - .../tests/System.IO.FileSystem.Tests.csproj | 2 +- - .../src/System.IO.IsolatedStorage.csproj | 2 +- - .../tests/System.IO.IsolatedStorage.Tests.csproj | 2 +- - .../src/System.IO.MemoryMappedFiles.csproj | 2 +- - .../tests/System.IO.MemoryMappedFiles.Tests.csproj | 2 +- - .../src/System.IO.Pipes.AccessControl.csproj | 2 +- - .../tests/System.IO.Pipes.AccessControl.Tests.csproj | 2 +- - src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj | 2 +- - .../System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj | 2 +- - src/libraries/System.IO.Ports/src/System.IO.Ports.csproj | 2 +- - .../System.IO.Ports/tests/System.IO.Ports.Tests.csproj | 2 +- - src/libraries/System.Management/src/System.Management.csproj | 2 +- - .../System.Management/tests/System.Management.Tests.csproj | 2 +- - .../src/System.Net.Http.WinHttpHandler.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Functional.Tests.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Unit.Tests.csproj | 2 +- - src/libraries/System.Net.Http/src/System.Net.Http.csproj | 2 +- - .../FunctionalTests/System.Net.Http.Functional.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Http.Unit.Tests.csproj | 2 +- - .../src/System.Net.HttpListener.csproj | 2 +- - .../tests/System.Net.HttpListener.Tests.csproj | 2 +- - src/libraries/System.Net.Mail/src/System.Net.Mail.csproj | 2 +- - .../tests/Functional/System.Net.Mail.Functional.Tests.csproj | 2 +- - .../tests/Unit/System.Net.Mail.Unit.Tests.csproj | 2 +- - .../src/System.Net.NameResolution.csproj | 2 +- - .../System.Net.NameResolution.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj | 2 +- - .../src/System.Net.NetworkInformation.csproj | 2 +- - src/libraries/System.Net.Ping/src/System.Net.Ping.csproj | 2 +- - .../FunctionalTests/System.Net.Ping.Functional.Tests.csproj | 2 +- - .../System.Net.Primitives/src/System.Net.Primitives.csproj | 2 +- - .../System.Net.Primitives.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.Primitives.Pal.Tests.csproj | 2 +- - .../UnitTests/System.Net.Primitives.UnitTests.Tests.csproj | 2 +- - src/libraries/System.Net.Quic/src/System.Net.Quic.csproj | 2 +- - .../FunctionalTests/System.Net.Quic.Functional.Tests.csproj | 2 +- - .../System.Net.Requests/src/System.Net.Requests.csproj | 2 +- - .../System.Net.Security/src/System.Net.Security.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Security.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Security.Unit.Tests.csproj | 2 +- - .../System.Net.Sockets/src/System.Net.Sockets.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Sockets.Tests.csproj | 2 +- - .../System.Net.WebSockets/src/System.Net.WebSockets.csproj | 2 +- - .../System.Private.Xml/src/System.Private.Xml.csproj | 2 +- - .../tests/System.Resources.Extensions.Tests.csproj | 2 +- - .../tests/System.Resources.ResourceManager.Tests.csproj | 2 +- - .../System.Runtime.Caching/src/System.Runtime.Caching.csproj | 2 +- - .../tests/System.Runtime.Caching.Tests.csproj | 2 +- - .../tests/System.Runtime.Extensions.Tests.csproj | 2 +- - ...em.Runtime.InteropServices.RuntimeInformation.Tests.csproj | 2 +- - .../System.Runtime.InteropServices.Tests.csproj | 2 +- - .../tests/System.Runtime.Intrinsics.Tests.csproj | 2 +- - .../System.Runtime.Serialization.Formatters.Tests.csproj | 2 +- - .../tests/NlsTests/System.Runtime.Nls.Tests.csproj | 2 +- - .../System.Runtime/tests/System.Runtime.Tests.csproj | 2 +- - .../src/System.Security.AccessControl.csproj | 2 +- - .../tests/System.Security.AccessControl.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Cng.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Csp.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.Pkcs.csproj | 2 +- - .../tests/System.Security.Cryptography.Pkcs.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.ProtectedData.csproj | 2 +- - .../System.Security.Cryptography.ProtectedData.Tests.csproj | 2 +- - ...System.Security.Cryptography.X509Certificates.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.csproj | 2 +- - .../tests/System.Security.Cryptography.Tests.csproj | 2 +- - .../tests/System.Security.Permissions.Tests.csproj | 2 +- - .../src/System.Security.Principal.Windows.csproj | 2 +- - .../tests/System.Security.Principal.Windows.Tests.csproj | 2 +- - .../src/System.ServiceProcess.ServiceController.csproj | 2 +- - .../System.ServiceProcess.ServiceController.Tests.csproj | 2 +- - src/libraries/System.Speech/src/System.Speech.csproj | 2 +- - src/libraries/System.Speech/tests/System.Speech.Tests.csproj | 2 +- - .../src/System.Text.Encoding.CodePages.csproj | 2 +- - .../src/System.Threading.AccessControl.csproj | 2 +- - .../tests/System.Threading.AccessControl.Tests.csproj | 2 +- - .../src/System.Transactions.Local.csproj | 2 +- - .../src/System.Windows.Extensions.csproj | 2 +- - .../tests/System.Windows.Extensions.Tests.csproj | 2 +- - 134 files changed, 136 insertions(+), 136 deletions(-) - -diff --git a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -index 9a6bc544e55..10ec1fce44a 100644 ---- a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -+++ b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -@@ -2,4 +2,4 @@ - // The .NET Foundation licenses this file to you under the MIT license. - - // Used to indicate that runtime marshalling should be disabled. --[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -+// [assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -diff --git a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -index a6bb1dc3c0f..751e0ac690b 100644 ---- a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -+++ b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -@@ -9,8 +9,8 @@ internal static partial class Interop - { - internal static partial class Sys - { -- [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -- private static partial int MkDir(ref byte path, int mode); -+ [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -+ private static extern int MkDir(ref byte path, int mode); - - internal static int MkDir(ReadOnlySpan path, int mode) - { -diff --git a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -index 72de3a2ba17..16adf14be81 100644 ---- a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -+++ b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -index 19ee3bde1b5..d390a06be81 100644 ---- a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -+++ b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);nullable - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -index 93be9b87c96..10117338458 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -@@ -1,8 +1,8 @@ - - - -- -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ -+ $(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -index 0743d679b15..8ec495e8345 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -@@ -1,7 +1,7 @@ -  - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -index 6586026447c..c284ea4f48c 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -@@ -1,7 +1,7 @@ - - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -index aa61641a9fa..56ed9a2c927 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -index 7f6d66bdba8..168a20a1115 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for Microsoft.Win32.RegistryKey. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -index 76442c6fb1f..e92db98f790 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -index 98652656e9c..1972ac8ad18 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);CA2249 - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -index 1feb97ef841..ae5ad78ce7f 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows -+ - true - true - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -index d7e7dc61211..640179e2960 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides access to Windows system event notifications. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -index 1a8e130bee4..131134daa80 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Console/src/System.Console.csproj b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -index 1c45c5a8f93..880b740def1 100644 ---- a/src/runtime/src/libraries/System.Console/src/System.Console.csproj -+++ b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -index f4b451d30e1..418f9b30039 100644 ---- a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -+++ b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows -+ $(NetCoreAppCurrent); - true - ..\src\Resources\Strings.resx - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -index 8fad480d961..6efc49b3004 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249;CA1838;CA1846 - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -index 85a15ebe3d2..a8183df7eef 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -index 1a1756a85ad..0fa7a416a0f 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -index 6f72486a944..66d1f92904e 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -index 601c003fc30..6c22aac1e01 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -@@ -1,7 +1,7 @@ - - - System.Diagnostics.Tests -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - false -diff --git a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -index dfae87cc90a..affb0753616 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -index d052ccaa0b6..3563132cda3 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -index a0dbb8e208b..4ae893f4765 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - annotations -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -index 2146bf437cb..dd3dfeb4ae4 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -index 2c273820afb..c158c49ec2e 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -@@ -2,7 +2,7 @@ - - $(DefineConstants);FEATURE_REGISTRY - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -index e23bb4a94a7..bfa37a8f919 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -index 35b1a833abb..18c323c28ae 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -index 8152e3c7f05..be32f5d3b5d 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -index 0bb24c8eadd..6155cac4498 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -index 56862519355..3e11d02035a 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 - true - true - true -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -index 9a78a3acd54..632de15c235 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -index 83a118e940d..7b045dc3c0b 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - - $(NoWarn);SYSLIB0003 -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -index df9c7ef864a..9cf9a016204 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - $(DefineConstants);DRAWING_NAMESPACE - true - CS0618 -diff --git a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -index 33f175f1456..0b14a790777 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - true - - -diff --git a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -index 697be7783e2..2efcb61d950 100644 ---- a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -@@ -1,7 +1,7 @@ -  - - System.Drawing -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -index 33a9aa8c1dc..ea69b03b8a8 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -index ca1b4d99e50..d4475c8781f 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - $(LibrariesProjectRoot)/Common/tests/Resources/Strings.resx - true -diff --git a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -index 61a409ffedc..38f61fb9197 100644 ---- a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows -+ - true - - -diff --git a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -index a9aeef49807..0284070ad05 100644 ---- a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - -- $(NetCoreAppCurrent)-windows -+ - 14.0 - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -index ced12496d65..d67e262836b 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -index 709f655902d..607c50be625 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -index 94999191663..f8506c2adbc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -index 29c88cb2f9c..b049a0f3caa 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -index 80007bcfe5f..ee0bf21ccfc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -index 229119e3aa3..2fcad878c05 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -index 494ef1959db..08ddf1c7dd9 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -index c42a680fa2f..fe12ddd7911 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -index 61225e58e8a..90c69fee153 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -index 00d1afd3c94..8071e492986 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -index 469005b661d..7edcd52db0c 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -index 1246c914ab8..a83fbe23499 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD - true - true - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -index e386671171d..746e218cc24 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - --working-dir=/test-dir - true -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -index 2309a8c007a..b16deb25f25 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -index 0410513c46c..1f4b92f6418 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -index 9be9a376620..56ed27283ac 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -index ef44754372e..4525b0aa830 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -index 3dd3c8a455b..82091dc68d0 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -index 386250a4320..e0e4eab4e8e 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -index b0956d6ba7b..77585616ea3 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -index 8f31d5dd604..2e6ae7616ea 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -index c341d6c3ba6..3173e525799 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(DefineConstants);SERIAL_PORTS - true -diff --git a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -index 9a1592778a7..b71f36bc2f1 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Management/src/System.Management.csproj b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -index 5b66be0b573..1352df29995 100644 ---- a/src/runtime/src/libraries/System.Management/src/System.Management.csproj -+++ b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - $(NoWarn);0618 - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -index b5a0ebaa389..45c62a15a8b 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -@@ -4,7 +4,7 @@ - $(DefineConstants);SYSNETHTTP_NO_OPENSSL;HTTP3 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -index 85139c5391f..f2f2c2e5696 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -@@ -3,7 +3,7 @@ - ../../src/Resources/Strings.resx - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -index b0e790da1d6..46e75182fae 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -index ff51965c789..d5f4d3637ca 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -index 5d2ce4cc280..323c647d2d6 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -index 4a7b913a457..f81cc0576f9 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -index 0fbb5d7c497..b466e0b9d96 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -index 6d7ee08de0b..76e1a178242 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -index f4588a2b4a1..a21ef6a5d18 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -index 2edc2e3601c..75c119af62a 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -index d36ad67504e..8b240730a52 100644 ---- a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -+++ b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -index 71b5d783c45..167b0a2c5f5 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -index 0a068b65b72..5ccac35d05f 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -index 84a5864cac9..3567f4a6ea7 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - $(DefineConstants);SYSTEM_NET_PRIMITIVES_DLL -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -index 4e2e897b0a6..7a48043aad5 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -index 2fb034467dc..633181e4b58 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -index 8cc3d0ff90f..098b0d7460a 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -@@ -3,7 +3,7 @@ - true - 169,649 - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -index 257af8dbb88..6f118e0bf88 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -index 62b1be2da62..45b87e1dddb 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - -diff --git a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -index d16970c9a19..6a5034037a3 100644 ---- a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -+++ b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - $(NoWarn);SYSLIB0014 - -diff --git a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -index e030690763e..ad96b0fb669 100644 ---- a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - $(DefineConstants);PRODUCT - true -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -index 7c3d432f34c..7fd430a9220 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -index 1dd366e72a0..6a184f9d405 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -@@ -10,7 +10,7 @@ - 436 - - $(NoWarn);3021 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -index 61f9c6fa2d4..2674e098d82 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -index 884db1eea54..86517b47af6 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -index c0c4ded0d33..b361cc90d32 100644 ---- a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -+++ b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -@@ -1,7 +1,7 @@ - - - True -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -index 405e6375a9f..2a5bd1faacb 100644 ---- a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -+++ b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - System.Xml - true - -diff --git a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -index ad289dc6319..2485635439b 100644 ---- a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -index 66cb937a3d1..12e027437bd 100644 ---- a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - - - -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -index 869129ba71f..41a41f7bebb 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - Annotations - true -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -index 8f08caf9b46..ee8e300954a 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows;net48 -+ $(NetCoreAppCurrent);net48 - true - - -diff --git a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -index 3e3e2937781..85074f9fba2 100644 ---- a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -index 3edd7d47f72..db7a23c27c5 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -index 34964fb33f2..1a78852a17b 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -index 6c0187cf21f..fef12aa096c 100644 ---- a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -@@ -4,7 +4,7 @@ - $(NoWarn),1718,SYSLIB0013 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(Features.Replace('nullablePublicOnly', '') - -diff --git a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -index 378b38abb93..971c431ca2e 100644 ---- a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 - - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -index 849edc8cd5c..2deaa7914ef 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows -+ - $(NoWarn),SYSLIB0013 - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -index fc6859854dc..260dafbd372 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - $(NoWarn),1718,SYSLIB0013 - true -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -index 35fabc2416c..a461103be90 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -index 05fd95a165f..f0c167ed082 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -index 4bfc1719abf..cc312cffe4e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);TESTING_CNG_IMPLEMENTATION -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -index 59d139c7749..a8e94e72847 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(NoWarn);SYSLIB0021 - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -index be33237e616..426ddb38e27 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) - true - true - $(NoWarn);CA5384 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -index 8523c0d8296..2045f05a28e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);net48 -+ $(NetCoreAppCurrent);net48 - - - $(DefineConstants);HAVE_THUMBPRINT_OVERLOADS - true - $(NoWarn);SYSLIB0026;SYSLIB0027;SYSLIB0028 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS - true - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -index cf25738f6e7..29d0f0734cb 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);INTERNAL_ASYMMETRIC_IMPLEMENTATIONS -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - $(NoWarn);CA5350;CA5351;CA5379;CA5384;SYSLIB0026 - - $(NoWarn);CS0809 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -index 50e110c0445..b32809447d3 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser - true - $(NoWarn);SYSLIB0021 - true -diff --git a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -index 73f50b209fb..7205c2e239a 100644 ---- a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - $(NoWarn);SYSLIB0003 - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -index a67d4af63eb..9fef2993b07 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -index e9caf5fa463..43e03119cb3 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -index 518c800ae01..2b465d475b0 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249 - true -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -index 1039fad47f4..99412bc09b8 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -index 22506f7bf96..9c53e796bd8 100644 ---- a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -+++ b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - - -diff --git a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -index 9139d0d2392..d81ff8a7ca1 100644 ---- a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -+++ b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -index 8883abba36b..c7ff6be8fec 100644 ---- a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -+++ b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -index 54c8e0bad5f..c9c91e64692 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for synchronization primitives. -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -index 3b9e105954d..14949ff735b 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - CA1805;IDE0059;CS1591 - $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) - -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -index ee9cb23d69e..741c633215b 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum) - true - true - Provides miscellaneous Windows-specific types -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -index e7b45293318..089fe0ef33f 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - --- -2.36.3 - diff --git a/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch b/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch deleted file mode 100644 index a55dcde..0000000 --- a/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 03712c3b684..99d8a457957 100644 ---- a/src/runtimr/src/coreclr/debug/createdump/crashinfounix.cpp -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -395,7 +395,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r - // performance optimization. - m_canUseProcVmReadSyscall = false; - assert(m_fd != -1); -- *read = pread64(m_fd, buffer, size, (off64_t)address); -+ *read = pread(m_fd, buffer, size, (off_t)address); - } - - if (*read == (size_t)-1) - - diff --git a/community/git-annex/APKBUILD b/community/git-annex/APKBUILD deleted file mode 100644 index 10e13de..0000000 --- a/community/git-annex/APKBUILD +++ /dev/null @@ -1,112 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=git-annex -pkgver=10.20231129 -pkgrel=0 -pkgdesc="Manage files with git, without checking their contents into git" -url="http://git-annex.branchable.com" -arch="x86_64 aarch64" # limited by ghc -license="AGPL-3.0-or-later" -options="net" -depends=" - curl - git - rsync - " -makedepends=" - alex - cabal - dbus-dev - file-dev - ghc - gmp-dev - gnutls-dev - happy - libffi-dev - libgsasl-dev - libxml2-dev - ncurses-dev - zlib-dev - " -source=" - https://git.joeyh.name/index.cgi/git-annex.git/snapshot/git-annex-$pkgver.tar.gz - https://lab.ilot.io/mirrors/git-annex/-/releases/$pkgver/downloads/config/git-annex-$pkgver-edge.config - fix-makefile.patch - " -subpackages="$pkgname-doc $pkgname-bash-completion $pkgname-fish-completion $pkgname-zsh-completion" - -# Add / remove '-' between "-f" and "FeatureName" to adjust feature build -_feature_flags=" - -fAssistant \ - -fWebApp \ - -fPairing \ - -fProduction \ - -fTorrentParser \ - -fMagicMime \ - -fBenchmark \ - -f-DebugLocks \ - -fDbus \ - -fNetworkBSD \ - -fGitLfs \ - -fHttpClientRestricted \ - " -_cabal_home="$srcdir/dist" - -cabal_update() { - default_prepare - msg "Freezing $pkgname dependencies" - - # Resolve deps and generate fresh cabal.config with version constraints. - HOME="$_cabal_home" cabal update - cd "$srcdir/git-annex"* - HOME="$_cabal_home" cabal v1-freeze --shadow-installed-packages - - mv "cabal.config" "$startdir/git-annex-$pkgver.config" - cd "$startdir" - - if ! abuild checksum; then - die "Failed to update checksum, run 'abuild checksum' manually" - fi -} - -prepare() { - default_prepare - - ln -sf "$srcdir"/git-annex-*.config cabal.config - - # ghc version path - export PATH="$PATH:/usr/lib/llvm14/bin" - - # problematic depend install - HOME="$_cabal_home" cabal update -} - -build() { - # ghc version path - export PATH="$PATH:/usr/lib/llvm14/bin" - - msg "Building git-annex-$pkgver" - HOME="$_cabal_home" cabal update - HOME="$_cabal_home" cabal v1-install \ - --only-dependencies \ - --allow-newer=feed:base-compat \ - $_feature_flags - HOME="$_cabal_home" cabal v1-configure $_feature_flags - HOME="$_cabal_home" cabal v1-build -j - mv dist/build/git-annex/git-annex . - ln -s git-annex git-annex-shell -} - -check() { - "$builddir"/git-annex test -} - -package() { - HOME="$_cabal_home" make DESTDIR="$pkgdir" install -} - -sha512sums=" -aa30fb5ccf140d90242528e19bc4a9d07c7a5de658cd3b1ff3ae666165f1a039bf22bc1a6aa7394128b495f60eb1c91472e42f32edb53b4b18f9ef81b730039b git-annex-10.20231129.tar.gz -8e3307300fa5be81c51031d0b5376518627e0c11abf4b879a47dfae98a5bc4f7ef3d45f82ca95e03ed7e91786c8e502700c22f7fe54f40e9b6f1f3b8f4e13815 git-annex-10.20231129-edge.config -9300f883746d8726f47be6d194b5ac9550e2894669097f3202eca944221665bd3087a81b3f97b21f013eccaa6b5b1fb050e253ac18999c136db20056fadf2ed8 fix-makefile.patch -" diff --git a/community/git-annex/fix-makefile.patch b/community/git-annex/fix-makefile.patch deleted file mode 100644 index 25c8a5f..0000000 --- a/community/git-annex/fix-makefile.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/Makefile b/Makefile -index 5688430..54fe3c8 100644 ---- a/Makefile -+++ b/Makefile -@@ -87,16 +87,16 @@ install-docs: docs install-mans - rsync -a --delete html/ $(DESTDIR)$(PREFIX)/$(SHAREDIR)/doc/git-annex/html/; \ - fi - --install-bins: build -+install-bins: - install -d $(DESTDIR)$(PREFIX)/bin - install git-annex $(DESTDIR)$(PREFIX)/bin - ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-annex-shell - ln -sf git-annex $(DESTDIR)$(PREFIX)/bin/git-remote-tor-annex - --install-desktop: build Build/InstallDesktopFile -+install-desktop: Build/InstallDesktopFile - ./Build/InstallDesktopFile $(PREFIX)/bin/git-annex || true - --install-completions: build -+install-completions: - install -d $(DESTDIR)$(PREFIX)/$(SHAREDIR)/bash-completion/completions - install -m 0644 bash-completion.bash $(DESTDIR)$(PREFIX)/$(SHAREDIR)/bash-completion/completions/git-annex - install -d $(DESTDIR)$(ZSH_COMPLETIONS_PATH) diff --git a/community/powershell/APKBUILD b/community/powershell/APKBUILD deleted file mode 100644 index 7319b56..0000000 --- a/community/powershell/APKBUILD +++ /dev/null @@ -1,130 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=powershell -pkgver=7.3.9 -pkgrel=0 -pkgdesc="A cross-platform automation and configuration tool/framework" -arch="x86_64 aarch64 armv7" # blocked by dotnet runtime -url="https://github.com/PowerShell/PowerShell" -license="MIT" -depends=" - dotnet7-runtime - libpsl-native - " -makedepends=" - dotnet7-sdk - git - " -source=" - $pkgname-$pkgver.tar.gz::https://github.com/PowerShell/PowerShell/archive/v$pkgver.tar.gz - dependency-gatherer.targets - fix-filesystem-test.patch - update-sdk-test-ppc64le.patch - " -builddir="$srcdir/PowerShell-$pkgver" -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs -else - _logdir="$srcdir"/logs -fi - -# mono-flavored runtime does not support crossgen2 -case $CARCH in - armhf|s390x|ppc64le) _use_crossgen2=false;; -esac - -prepare() { - default_prepare - # build expects to be in git directory - git init - git config user.name "example" - git config user.email "example@example.com" - git add ./* - git commit -m 'Initial' - git tag -a "v$pkgver" -m "Initial" - rm "global.json" - mkdir -p "$_logdir" -} - -build() { - msg "Building $pkgname" - # change nuget cache - export NUGET_PACKAGES="$srcdir"/nuget_cache - - # Restore - dotnet restore src/powershell-unix - dotnet restore src/ResGen - dotnet restore src/TypeCatalogGen - - # Setup the build target to gather dependency information - cp "$srcdir/dependency-gatherer.targets" \ - "src/Microsoft.PowerShell.SDK/obj/Microsoft.PowerShell.SDK.csproj.TypeCatalog.targets" - dotnet msbuild src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj \ - /t:_GetDependencies \ - "/property:DesignTimeBuild=true;_DependencyFile=$PWD/src/TypeCatalogGen/powershell.inc" \ - /nologo - - # Generate 'powershell.version' - echo "v$pkgver" > powershell.version - - # Generate resource binding C# files - cd "$builddir"/src/ResGen - dotnet run - - # Generate 'CorePsTypeCatalog.cs' - cd "$builddir"/src/TypeCatalogGen - dotnet run ../System.Management.Automation/CoreCLR/CorePsTypeCatalog.cs powershell.inc - - # Build powershell core - cd "$builddir" - - dotnet build-server shutdown - dotnet publish --configuration Linux "src/powershell-unix/" \ - --output bin \ - --no-self-contained \ - --runtime "$(dotnet --info | awk '$1=="RID:"{print $2}')" \ - -p:PublishReadyToRun=$_use_crossgen2 \ - /bl:"$_logdir"/powershell-build.binlog \ - /consoleLoggerParameters:ShowTimestamp -} - -check() { - msg "Checking $pkgname" - cd "$builddir"/test/xUnit - dotnet build-server shutdown - dotnet test \ - -c Release \ - --runtime "$(dotnet --info | awk '$1=="RID:"{print $2}')" \ - -p:PublishReadyToRun=$_use_crossgen2 \ - /bl:"$_logdir"/powershell-check.binlog \ - /consoleLoggerParameters:ShowTimestamp -} - -package() { - # directory creation - install -dm 755 \ - "$pkgdir"/usr/lib \ - "$pkgdir"/usr/bin - - # libary copy - cp -ar "$builddir"/src/powershell-unix/bin/Linux/*/alpine* "$pkgdir"/usr/lib/$pkgname - - # already provided by 'libpsl-native' aport - rm -f "$pkgdir"/usr/lib/$pkgname/libpsl-native.so - - # does not build for linux-musl, thus points to libc.so rather than musl - # see https://github.com/dotnet/runtime/issues/63187 - rm -f "$pkgdir"/usr/lib/$pkgname/libSystem.IO.Ports.Native.so - - # binary link - ln -s "/usr/lib/$pkgname/pwsh" "$pkgdir"/usr/bin/pwsh -} - -sha512sums=" -8d17899925b037e1c7a9a6a77a8a6fd15b9f1418ab6342854f7452614c4c2cecb98710fb5e30c52334493d54e53164b60182c60b07a0937ed232c798fa888588 powershell-7.3.9.tar.gz -e9c4aeebd4fead1542b2c48c70134efcdb6c573273d8d05b1f8a2ece070e26899876b30264749992beac3044059716ca8c07b3bf970a419e525057c422f843c6 dependency-gatherer.targets -0e7550d8b702eeb9ebbd42100b32cbf7a0be676c5922cd6ee03ecdd3ba11d20d42a468f73ee428c6c92c8b7b18f9b022591a368191c2a358034ba4d7e78d2b84 fix-filesystem-test.patch -1aa10d32a37da0e7fd9d587105833d0a7ed9b71701018259d3efa2be90977808eb54a7d3e2d8bf03b693eeeac469f2e9ee88aa93006b7a2c22ae4720a8f62561 update-sdk-test-ppc64le.patch -" diff --git a/community/powershell/dependency-gatherer.targets b/community/powershell/dependency-gatherer.targets deleted file mode 100644 index 85ece3e..0000000 --- a/community/powershell/dependency-gatherer.targets +++ /dev/null @@ -1,9 +0,0 @@ - - - - <_RefAssemblyPath Include="%(_ReferencesFromRAR.HintPath)%3B" Condition=" '%(_ReferencesFromRAR.NuGetPackageId)' != 'Microsoft.Management.Infrastructure' "/> - - - - diff --git a/community/powershell/fix-filesystem-test.patch b/community/powershell/fix-filesystem-test.patch deleted file mode 100644 index 640d942..0000000 --- a/community/powershell/fix-filesystem-test.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 04b0c8b1274918015c91f609cd63fdda6099ab95 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/PowerShell/PowerShell/issues/17889 -From: Antoine Martin -Date: Tue, 26 Jul 2022 20:34:30 -0400 -Subject: [PATCH 1/1] Neutralize PSTests.Parallel.FileSystemProviderTests.TestMode - -PSTests.Parallel.FileSystemProviderTests.TestMode prints error: -[xUnit.net 00:00:06.26] PSTests.Parallel.FileSystemProviderTests.TestMode [FAIL] - Failed PSTests.Parallel.FileSystemProviderTests.TestMode [5 ms] - Error Message: - Assert.Equal() Failure - ↓ (pos 0) -Expected: ----- -Actual: l---- - ↑ (pos 0) - Stack Trace: - at PSTests.Parallel.FileSystemProviderTests.TestMode() in /home/user/projects/powershell/testing/powershell/src/PowerShell-7.2.5/test/xUnit/csharp/test_FileSystemProvider.cs:line 123 - -This patch fixes this failed test by pointing the to-be-tested file to -/bin/busybox rather than /bin/echo, as the latter is a symbolic link - ---- - test/xUnit/csharp/test_FileSystemProvider.cs | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/test/xUnit/csharp/test_FileSystemProvider.cs b/test/xUnit/csharp/test_FileSystemProvider.cs -index 85ab0b2ee..160862146 100644 ---- a/test/xUnit/csharp/test_FileSystemProvider.cs -+++ b/test/xUnit/csharp/test_FileSystemProvider.cs -@@ -109,7 +109,7 @@ namespace PSTests.Parallel - { - directoryObject = new DirectoryInfo(@"/"); - fileObject = new FileInfo(@"/etc/hosts"); -- executableObject = new FileInfo(@"/bin/echo"); -+ executableObject = new FileInfo(@"/bin/busybox"); - } - else - { --- -2.36.2 diff --git a/community/powershell/update-sdk-test-ppc64le.patch b/community/powershell/update-sdk-test-ppc64le.patch deleted file mode 100644 index 05ff2cf..0000000 --- a/community/powershell/update-sdk-test-ppc64le.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/test/xUnit/xUnit.tests.csproj.orig b/test/xUnit/xUnit.tests.csproj -index 2dff043..8a28dc0 100644 ---- a/test/xUnit/xUnit.tests.csproj.orig -+++ b/test/xUnit/xUnit.tests.csproj -@@ -28,7 +28,7 @@ - - - -- -+ - - - diff --git a/community/yadm/APKBUILD b/community/yadm/APKBUILD deleted file mode 100644 index 541e887..0000000 --- a/community/yadm/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=yadm -pkgver=3.2.2 -pkgrel=1 -pkgdesc="Yet Another Dotfiles Manager" -arch="noarch" -url="https://github.com/TheLocehiliosan/yadm" -license="GPL-3.0-only" -depends=" - bash - git - gawk - " -options="!check" # No testsuite -subpackages=" - $pkgname-bash-completion - $pkgname-doc - $pkgname-fish-completion - $pkgname-zsh-completion - " -source="$pkgname-$pkgver.tar.gz::https://github.com/TheLocehiliosan/yadm/archive/$pkgver.tar.gz" - -package() { - install -vDm755 yadm -t "$pkgdir/usr/bin" - install -vDm644 yadm.1 -t "$pkgdir/usr/share/man/man1" - install -vDm644 completion/bash/yadm -t "$pkgdir/usr/share/bash-completion/completions" - install -vDm644 completion/zsh/_yadm -t "$pkgdir/usr/share/zsh/site-functions" - install -vDm644 completion/fish/yadm.fish -t "$pkgdir/usr/share/fish/vendor_completions.d" -} - -sha512sums=" -c61da3f644c2f587079fd717d4ef566861f20224f287906ef5b6d07169bc5f02aef7974afd8d4441267a92417a4fd0c7edda562b8f0cf2fc104c91fc0f5f85ff yadm-3.2.2.tar.gz -" diff --git a/testing/hsxkpasswd/APKBUILD b/testing/hsxkpasswd/APKBUILD deleted file mode 100644 index 823c68b..0000000 --- a/testing/hsxkpasswd/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=hsxkpasswd -pkgver=3.6 -pkgrel=0 -pkgdesc="Generate secure, memorable passwords inspired by XKCD and Password Haystacks" -#arch="noarch" -# needs updating with new depends -url="https://www.bartbusschots.ie/s/publications/software/xkpasswd/" -license="BSD-2-Clause" -depends=" - perl - perl-clone - perl-datetime - perl-file-homedir - perl-file-share - perl-json - perl-list-moreutils - perl-math-round - perl-readonly - perl-text-unidecode - perl-type-tiny - " -makedepends="perl-module-build" -subpackages="$pkgname-doc" -source="$pkgname-$pkgver.tar.gz::https://github.com/bbusschots/hsxkpasswd/archive/v$pkgver.tar.gz" - -build() { - PERL_MM_USE_DEFAULT=1 MODULEBUILDRC=/dev/null perl ./Build.PL - ./Build -} - -check() { - PERL_MM_USE_DEFAULT=1 ./Build test -} - -package() { - ./Build install --installdirs=vendor --destdir="$pkgdir" - find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete -} - -sha512sums=" -b93f3e8a209152def43040d05f27ed404ff7d596f69f831d1666cbd1dcb06907558b0e9ab9b256cfa25aa528fc92e13b816a0b8d476f4334a53f69b44612708f hsxkpasswd-3.6.tar.gz -" diff --git a/testing/ikiwiki/APKBUILD b/testing/ikiwiki/APKBUILD deleted file mode 100644 index 504b545..0000000 --- a/testing/ikiwiki/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=ikiwiki -pkgver=3.20200202.3 -pkgrel=0 -pkgdesc="Ikiwiki is a wiki compiler. It converts wiki pages into HTML pages suitable for publishing on a website." -arch="noarch" -license="GPL-2.0-later" -url="https://ikiwiki.info" -depends=" - perl-yaml - perl-text-markdown - perl-cgi-session - perl-cgi-formbuilder - perl-timedate - perl-html-parser - perl-html-scrubber - perl-mail-sendmail - perl-time-duration - perl-uri - perl-html-template - perl-locale-gettext - perl-rpc-xml - perl-yaml-libyaml - " -source="https://git.joeyh.name/index.cgi/ikiwiki.git/snapshot/ikiwiki-$pkgver.tar.gz" -subpackages="$pkgname-doc" - -build() { - # Install module into the vendor directories - sed -i -e 's/sbin/bin/g' Makefile.PL - - perl Makefile.PL PREFIX="/usr" INSTALL_BASE= INSTALLDIRS=vendor - make PREFIX="/usr" -} - -package() { - make install DESTDIR="$pkgdir" - - # otherwise perl breaks - find "$pkgdir" \( -name '.packlist' -or -name '*.pod' \) -exec rm '{}' + -} -sha512sums=" -2d78b98f0f24823e29566b6abc20e09abee45da684adff4dcb708ae3c127adea08cb56c68429b94613b36410bc88a3ce27f718e82f4344a533307d3846f64572 ikiwiki-3.20200202.3.tar.gz -" diff --git a/testing/perl-file-share/APKBUILD b/testing/perl-file-share/APKBUILD deleted file mode 100644 index d80a477..0000000 --- a/testing/perl-file-share/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Automatically generated by apkbuild-cpan, template 3 -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=perl-file-share -#_pkgreal is used by apkbuild-cpan to find modules at MetaCpan -_pkgreal=File-Share -pkgver=0.27 -pkgrel=1 -pkgdesc="Extend File::ShareDir to Local Libraries" -url="https://metacpan.org/release/File-Share/" -arch="noarch" -license="GPL-1.0-or-later OR Artistic-1.0-Perl" -depends="perl perl-file-sharedir perl-readonly" -makedepends="perl-dev" -subpackages="$pkgname-doc" -source="https://cpan.metacpan.org/authors/id/I/IN/INGY/File-Share-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" - -build() { - export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') - PERL_MM_USE_DEFAULT=1 perl -I. Makefile.PL INSTALLDIRS=vendor - make -} - -check() { - export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') - make test -} - -package() { - make DESTDIR="$pkgdir" install - find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete -} - -sha512sums=" -7c321de08e49f252e8e2126da00ea05ced13db362de758a693ee7f40452827fbf2591fb9e6c80caa27bb8767b3596893fc8762993a167583a0b40091e5db5ec7 File-Share-0.27.tar.gz -" diff --git a/testing/py3-aenum/APKBUILD b/testing/py3-aenum/APKBUILD deleted file mode 100644 index a766f60..0000000 --- a/testing/py3-aenum/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-aenum -_pyname=aenum -pkgver=3.1.15 -pkgrel=0 -pkgdesc="Advanced Enumerations for Python" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -arch="noarch" -depends="python3" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -options="!check" # Failing test unit -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -3bee86fbe5e4dacf0109f3fb7e7eec069addea7dc8e4516be3eb643315e38d5eb3a23f347ac8c6bde65e294e4f237cc830109c30a5a6c1b3d9c85dc68067dbf3 py3-aenum-3.1.15.tar.gz -" diff --git a/testing/py3-backports-abc/APKBUILD b/testing/py3-backports-abc/APKBUILD deleted file mode 100644 index ee78874..0000000 --- a/testing/py3-backports-abc/APKBUILD +++ /dev/null @@ -1,44 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=backports_abc -pkgname=py3-backports-abc -pkgver=0.5 -pkgrel=0 -arch="noarch" -pkgdesc="A backport of recent additions to the 'collections.abc' module." -url="https://pypi.python.org/project/$_pyname" -license="MIT" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - python3-dev - " -checkdepends=" - py3-pytest - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - SETUPTOOLS_SCM_PRETEND_VERSION=$pkgver \ - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 ./tests.py -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -5c2bc01bce8d3ed482bf5d8361a20f9afa3edc1c50280f0a01ffb890690b92296fcbfa68f79677fc3ebba851617f339cb6367ccdd0fadf1127a4e3c030784b7d py3-backports-abc-0.5.tar.gz -" diff --git a/testing/py3-click-didyoumean/APKBUILD b/testing/py3-click-didyoumean/APKBUILD deleted file mode 100644 index 29f984b..0000000 --- a/testing/py3-click-didyoumean/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: psykose -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-click-didyoumean -pkgver=0.3.0 -pkgrel=3 -pkgdesc="Git-like did-you-mean feature in click" -url="https://github.com/click-contrib/click-didyoumean" -arch="noarch" -license="MIT" -depends="python3 py3-click" -makedepends="py3-gpep517 py3-poetry-core" -checkdepends="py3-pytest" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/click-contrib/click-didyoumean/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/click-didyoumean-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH=src \ - pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -4927ee392f27950c3f7ef5e0f1d5a5e2421172f3e9d34ec76986c9c7ea698cfa1981678a06fb8682577d6ed04c242c42bdd1d796d7623a1c99dfdbdb61c80fca py3-click-didyoumean-0.3.0.tar.gz -" diff --git a/testing/py3-click-repl/APKBUILD b/testing/py3-click-repl/APKBUILD deleted file mode 100644 index 815c487..0000000 --- a/testing/py3-click-repl/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: psykose -# Maintainer: Antoien Martin (ayakael) -pkgname=py3-click-repl -pkgver=0.3.0 -pkgrel=2 -pkgdesc="Subcommand REPL for click apps" -url="https://github.com/click-contrib/click-repl" -arch="noarch" -license="MIT" -depends="python3 py3-click py3-prompt_toolkit" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-pytest py3-pytest-cov" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/click-contrib/click-repl/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir/click-repl-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH=. \ - pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -4135cfd4a0b041d9e6446b4c938bb5863d851703f47f204cd78fc9e5ae6b7fd71215abbf08863d9a5cdb664f92df5fca2380a6efa7ddeb67dd6c9b1d4f210f65 py3-click-repl-0.3.0.tar.gz -" diff --git a/testing/py3-concurrent-log-handler/APKBUILD b/testing/py3-concurrent-log-handler/APKBUILD deleted file mode 100644 index d917372..0000000 --- a/testing/py3-concurrent-log-handler/APKBUILD +++ /dev/null @@ -1,47 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=concurrent-log-handler -pkgname="py3-$_pyname" -pkgver=0.9.24 -pkgrel=0 -arch="noarch" -pkgdesc="The lightning-fast ASGI server" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -depends=" - py3-portalocker - " -makedepends=" - py3-setuptools - py3-installer - py3-gpep517 - py3-wheel - " -checkdepends=" - py3-pytest - py3-stresstest - " -options="!check" # Missing depend stresstest -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$builddir" pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -370003f3c3778f99ba85f8d1fa8331eeee39f76f7ecc6f30ce2cb809790a80cc288005098bbb1b4e737957f08e29b7dbec055bcd685ae50611f909b6c74f8d78 py3-concurrent-log-handler-0.9.24.tar.gz -" diff --git a/testing/py3-dacite/APKBUILD b/testing/py3-dacite/APKBUILD deleted file mode 100644 index c7d951a..0000000 --- a/testing/py3-dacite/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=dacite -pkgname="py3-$_pyname" -pkgver=1.8.1 -pkgrel=0 -arch="noarch" -pkgdesc="This module simplifies creation of data classes (PEP 557) from dictionaries." -url="https://pypi.python.org/project/$_pyname" -license="MIT" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -checkdepends=" - py3-pytest - py3-pytest-benchmark - py3-pytest-cov - py3-coveralls - " -source="$pkgname-$pkgver.tar.gz::https://github.com/konradhalas/dacite/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -4b40c0bdcf5490bcc77de9e7f04b7267642bcfd41e4168607a5457f38abe3ad4b3041d8a23cb43af76de14eabee45f900ad5ddf7af8f70a2be4850bccc2d3af1 py3-dacite-1.8.1.tar.gz -" diff --git a/testing/py3-django-allauth/APKBUILD b/testing/py3-django-allauth/APKBUILD deleted file mode 100644 index eaed0e6..0000000 --- a/testing/py3-django-allauth/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-allauth -_pyname="django-allauth" -pkgver=0.58.2 -pkgrel=0 -arch="noarch" -pkgdesc="Integrated set of Django applications addressing SSO" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-django - py3-openid - py3-requests - py3-requests-oauthlib - py3-jwt - py3-cryptography - " -makedepends=" - py3-setuptools - py3-build - py3-installer - py3-wheel - " -checkdepends=" - py3-qrcode - py3-pytest - py3-pytest-django - py3-onelogin - " -source="$pkgname-$pkgver.tar.gz::https://github.com/pennersr/$_pyname/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -options="!check" # Failing test unit -subpackages="$pkgname-pyc" - -build() { - python3 -m build --wheel --skip-dependency-check --no-isolation -} - -check() { - python3 manage.py test allauth -} - -package() { - python3 -m installer --destdir="$pkgdir" dist/*.whl -} -sha512sums=" -33793619f5d1fd424d215ed16b67a8215a2a5875e54ece7163dc5250e6b03fd3c6e671669fc16b3d255b0844d235fa57409cb280410cbbc87231c1f2daf112ad py3-django-allauth-0.58.2.tar.gz -" diff --git a/testing/py3-django-celery-results/APKBUILD b/testing/py3-django-celery-results/APKBUILD deleted file mode 100644 index c298a82..0000000 --- a/testing/py3-django-celery-results/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-celery-results -_pyname="django_celery_results" -pkgver=2.5.1 -pkgrel=0 -arch="noarch !s390x" # Missing py3-celery depend -pkgdesc="Celery result backends for Django." -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends=" - py3-django - py3-celery - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-pytest - py3-pytest-django - py3-pytest-benchmark - py3-pytest-cov - py3-pytz - py3-psycopg2 - py3-pyscopg - py3-case - " -options="!check" # Broken testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 manage.py test -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -2da39098a36847ab171a0758b37daafd0a7e17c905b599efebb582226a7adce5f1b5b941bd59db29e5d502d896f8474d2b9771454ef409cdef03b952f0a42526 py3-django-celery-results-2.5.1.tar.gz -" diff --git a/testing/py3-django-channels-redis/APKBUILD b/testing/py3-django-channels-redis/APKBUILD deleted file mode 100644 index 7f516d7..0000000 --- a/testing/py3-django-channels-redis/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-channels-redis -_pyname="channels_redis" -pkgver=4.1.0 -pkgrel=0 -arch='noarch' -pkgdesc="Redis-backed ASGI channel layer implementation" -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends=" - py3-django-channels - py3-asgiref - py3-redis - py3-msgpack - py3-cryptography - " -checkdepends=" - py3-async-timeout - py3-pytest - py3-pytest-timeout - py3-pytest-asyncio - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -558ccdb36cad7cb4d97fdc41ed25cfebbc8b381c867ad0b8704dfde8e6d754a4e53a79726260a748b70f906750702c0226774a8574e09bd6933b6ab797ce29df py3-django-channels-redis-4.1.0.tar.gz -" diff --git a/testing/py3-django-channels/APKBUILD b/testing/py3-django-channels/APKBUILD deleted file mode 100644 index ac44d52..0000000 --- a/testing/py3-django-channels/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-channels -_pyname="channels" -pkgver=4.0.0 -pkgrel=0 -arch="noarch" -pkgdesc="Developer-friendly asynchrony for Django" -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends=" - py3-django - py3-asgiref - py3-daphne - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -903d7e8cc95de8d2754afc665dac828cc9ee19f0938f4908a16e40b5b0e18c62bf45380311c0cc318f106e2ba4997bb5784e31c85914779bd76f69473e4636f5 py3-django-channels-4.0.0.tar.gz -" diff --git a/testing/py3-django-compression-middleware/APKBUILD b/testing/py3-django-compression-middleware/APKBUILD deleted file mode 100644 index e3225ad..0000000 --- a/testing/py3-django-compression-middleware/APKBUILD +++ /dev/null @@ -1,47 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-compression-middleware -_pyname="django-compression-middleware" -pkgver=0.5.0 -pkgrel=0 -arch="noarch !s390x !armhf" # Missing checkdepends on s390x and armhf -pkgdesc="Django middleware to compress responses using several algorithms." -url="https://pypi.python.org/project/$_pyname" -license="MPL-2.0" -depends=" - py3-django - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -checkdepends=" - py3-pytest - py3-zstandard - py3-brotli - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -070e7f19daf4811188e12b657b0dd53069b851a9c5f315d44aec87b92ccdc4d053c0a64fede2a40702963f86286b3bbbebe69722ac1b720febf93d0870d2f50e py3-django-compression-middleware-0.5.0.tar.gz -" diff --git a/testing/py3-django-drf-spectacular/APKBUILD b/testing/py3-django-drf-spectacular/APKBUILD deleted file mode 100644 index 5b77ecb..0000000 --- a/testing/py3-django-drf-spectacular/APKBUILD +++ /dev/null @@ -1,57 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=drf-spectacular -pkgname="py3-django-$_pyname" -pkgver=0.26.5 -pkgrel=0 -arch="noarch" -pkgdesc="Sane and flexible OpenAPI 3 schema generation for Django REST framework" -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends=" - py3-django-rest-framework - py3-jsonschema - py3-uritemplate - py3-yaml - py3-inflection - py3-django-oauth-toolkit - py3-jwcrypto - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-pytest - py3-pytest-django - py3-pytest-cov - py3-flake8 - py3-mypy - py3-isort - " -options="!check" # Failing test units -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -a346652a142f43574e31d9f8497ebd831cb0fdc58c67c931eae3aebd298ef05dfa88c83e9965174806ad0326d2bd2f13f5e21ee5c3f524f4a93fccc35460792d py3-django-drf-spectacular-0.26.5.tar.gz -" diff --git a/testing/py3-django-environ/APKBUILD b/testing/py3-django-environ/APKBUILD deleted file mode 100644 index c26c478..0000000 --- a/testing/py3-django-environ/APKBUILD +++ /dev/null @@ -1,42 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=django-environ -pkgname="py3-$_pyname" -pkgver=0.11.2 -pkgrel=0 -arch="noarch" -pkgdesc="A package that allows you to utilize 12factor inspired environment variables to configure your Django application." -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-django - " -makedepends=" - py3-build - py3-installer - py3-setuptools - py3-wheel - " -checkdepends=" - py3-pytest - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - python3 -m build --wheel --no-isolation -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d="$pkgdir" \ - dist/*.whl -} -sha512sums=" -d024858514b2a6edd99a7a2f1ae26e9e7cc007b1454a1c3f2cd2ae061b4e961f16c4acc8c77ee6449e4b11b3d98c72aae849e337339cb5e275b85077a02b59d0 py3-django-environ-0.11.2.tar.gz -" diff --git a/testing/py3-django-extensions/APKBUILD b/testing/py3-django-extensions/APKBUILD deleted file mode 100644 index 901db20..0000000 --- a/testing/py3-django-extensions/APKBUILD +++ /dev/null @@ -1,48 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-extensions -_pyname="django-extensions" -pkgver=3.2.3 -pkgrel=1 -arch="noarch" -pkgdesc="A collection of custom extensions for the Django Framework" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - python3 - py3-django - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - " -checkdepends=" - py3-pytest - py3-shortuuid - " -options="!check" # Missing shortuuid depend -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -b4c575c200a9d0903db34038fd52877dfe2581d4b5c9f98ee0ef191bf4f2c615ba3cd11277a5b6621b4ccba4d3a27286fb3e08fac216d3ee48417583134e899f py3-django-extensions-3.2.3.tar.gz -" diff --git a/testing/py3-django-guardian/APKBUILD b/testing/py3-django-guardian/APKBUILD deleted file mode 100644 index 71f43be..0000000 --- a/testing/py3-django-guardian/APKBUILD +++ /dev/null @@ -1,48 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=django-guardian -pkgname="py3-$_pyname" -pkgver=2.4.0 -pkgrel=0 -arch="noarch" -pkgdesc="Implementation of per object permissions on top of Django’s authorization backend" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-django - py3-django-environ - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - " -checkdepends=" - py3-pytest - py3-pytest-django - " -subpackages="$pkgname-doc" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -7e65a27fbb485a047dd02466b7e36daceb4a27b5ff30ec035fa37b7d300e78e43de213606e54d0b1be2e64ae8835a55cef98788ae45ec2446e502fdd312d8ed6 py3-django-guardian-2.4.0.tar.gz -" diff --git a/testing/py3-django-otp/APKBUILD b/testing/py3-django-otp/APKBUILD deleted file mode 100644 index 270f32b..0000000 --- a/testing/py3-django-otp/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-otp -_pyname=django_otp -pkgver=1.3.0 -pkgrel=0 -arch="noarch" -pkgdesc="A pluggable framework for adding two-factor authentication to Django using one-time passwords." -url="https://pypi.python.org/project/$_pyname" -license="BSD-2-Clause" -depends=" - py3-django - py3-qrcode - " -makedepends=" - py3-build - py3-installer - py3-hatchling - " -checkdepends=" - py3-freezegun - " -options="!check" # Can't find module for some reason -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - python3 -m build --wheel --no-isolation -} - -check() { - DJANGO_SETTINGS_MODULE="test_project.settings" \ - PYTHONPATH="test" \ - python3 -s -m django test django_otp -} - -package() { - python3 -m installer --destdir="$pkgdir" dist/*.whl - install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" -} -sha512sums=" -ef63c5db096ce7d1b10d6b2a99ab6db46b779d4221f509452921fcbf338decbd5c799aec7476587a03b34288ef3f5ff1964dee72105b65f04a22cbd53d445fa4 py3-django-otp-1.3.0.tar.gz -" diff --git a/testing/py3-django-picklefield/APKBUILD b/testing/py3-django-picklefield/APKBUILD deleted file mode 100644 index ca3db52..0000000 --- a/testing/py3-django-picklefield/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-picklefield -_pyname="django-picklefield" -pkgver=3.1 -pkgrel=0 -arch="noarch" -pkgdesc="A pickled object field for Django" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-django - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -1445a21e60a714cb6ac0cbc71bb44c3a2b51f169621bcc0183c788e70e9eaae2d07949e4b6f7ad4ba5dae99d91a2a7225d897771e4f9fb2230481365ee304b53 py3-django-picklefield-3.1.tar.gz -" diff --git a/testing/py3-django-prometheus/APKBUILD b/testing/py3-django-prometheus/APKBUILD deleted file mode 100644 index 9f7ccd0..0000000 --- a/testing/py3-django-prometheus/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=django-prometheus -pkgname="py3-$_pyname" -pkgver=2.3.1 -pkgrel=0 -arch="noarch" -pkgdesc="Django middlewares to monitor your application with Prometheus.io." -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-django - py3-prometheus-client - py3-psycopg2 - py3-mysqlclient - py3-memcached - py3-django-redis - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -checkdepends=" - py3-pytest - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -523cfa7023e1e8921c687bd010a4c6384e1e4142fb702887d1d0bd60194b5111e92e53fec07df89eaea07cd7aa806edef79ab303a67d866d18eacde257db3c03 py3-django-prometheus-2.3.1.tar.gz -" diff --git a/testing/py3-django-q/APKBUILD b/testing/py3-django-q/APKBUILD deleted file mode 100644 index 6d9b7d5..0000000 --- a/testing/py3-django-q/APKBUILD +++ /dev/null @@ -1,63 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-django-q -_pyname="django-q" -pkgver=1.6.1 -pkgrel=0 -arch="noarch" -pkgdesc="A multiprocessing distributed task queue for Django" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-asgiref - py3-blessed - py3-dateutil - py3-django - py3-django-picklefield - py3-django-redis - py3-future - py3-tz - py3-redis - py3-six - py3-sqlparse - py3-wcwidth - " -makedepends=" - py3-gpep517 - py3-installer - py3-wheel - py3-poetry-core - " -checkdepends=" - py3-pytest -" -# 'python-boto3: Amazon Simple Queue Service message queue support' -# 'python-psutil: resource usage limit support' -# 'python-pymongo: MongoDB as a message broker support' -options="!check" # Missing check depends -source="$pkgname-$pkgver.tar.gz::https://github.com/django-q2/django-q2/archive/refs/tags/v$pkgver.tar.gz - build-system.patch - " -builddir="$srcdir"/django-q2-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$builddir" pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -063739b53df5365eb38f01f0506786683059fcab62ec53e5839f19b97974b3b23358c0340166801d95e432abbda60f1fbed6a4e85c0d8f3a7f91046ad877c0fa py3-django-q-1.6.1.tar.gz -6c517f2abda689031fe4d62a7a7aa5db4885e1bcaedb575463eb1d065e4e7504ca0548395046d8f5efe2dd9fc7e073fbceb7447019fdde63a34d35894f14057e build-system.patch -" diff --git a/testing/py3-django-q/build-system.patch b/testing/py3-django-q/build-system.patch deleted file mode 100644 index efba7f1..0000000 --- a/testing/py3-django-q/build-system.patch +++ /dev/null @@ -1,21 +0,0 @@ -Patch-Source: https://github.com/django-q2/django-q2/pull/131 -From 2c2594348ebed7194afdda31e1d303f24f68935c Mon Sep 17 00:00:00 2001 -From: ptrcnull -Date: Thu, 19 Oct 2023 17:06:29 +0200 -Subject: [PATCH] Specify build system in pyproject.toml - -Otherwise, trying to build the project with a tool like gpep517 or build -results in using the setuptools legacy backend instead - -diff --git a/pyproject.toml b/pyproject.toml -index e785688..8de3163 100644 ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -1,3 +1,7 @@ -+[build-system] -+requires = ["poetry-core>=1.0.0"] -+build-backend = "poetry.core.masonry.api" -+ - [tool.poetry] - name = "django-q2" - version = "1.5.4" diff --git a/testing/py3-django-redis/APKBUILD b/testing/py3-django-redis/APKBUILD deleted file mode 100644 index c9206d3..0000000 --- a/testing/py3-django-redis/APKBUILD +++ /dev/null @@ -1,47 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=django-redis -pkgname="py3-$_pyname" -pkgver=5.4.0 -pkgrel=0 -arch="noarch" -pkgdesc="Full featured redis cache backend for Django." -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends=" - py3-django - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - py3-redis - " -checkdepends=" - py3-pytest - " -options="!check" # Missing depends for test -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$PYTHONPATH/dist" pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -12eb85ee3ce2c8fcf013c804a630bd3eb943de0980d1f6d365b5b5ed762ab956db80329f3e170f330ccc5b9e6f178ffa7938b1880477b7fb609d2cc3680b984a py3-django-redis-5.4.0.tar.gz -" diff --git a/testing/py3-django-rest-framework-guardian/APKBUILD b/testing/py3-django-rest-framework-guardian/APKBUILD deleted file mode 100644 index 3508875..0000000 --- a/testing/py3-django-rest-framework-guardian/APKBUILD +++ /dev/null @@ -1,44 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=djangorestframework-guardian -pkgname=py3-django-rest-framework-guardian -pkgver=0.3.0 -pkgrel=0 -arch="noarch" -pkgdesc="django-guardian support for Django REST Framework" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-django-rest-framework - py3-django-guardian - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # Broken testsuite -source="$pkgname-$pkgver.tar.gz::https://github.com/rpkilby/django-rest-framework-guardian/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir"/django-rest-framework-guardian-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 ./manage.py --no-input -v 2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -ce196162f42671e6eeb56b17dd432380ff99626dd541b8d2e7e80e4ec7bfc5c884fd3c37652632363173368f9eb1ae0aa82dc25cb1c46ba927f2170d1abbce94 py3-django-rest-framework-guardian-0.3.0.tar.gz -" diff --git a/testing/py3-dumb-init/APKBUILD b/testing/py3-dumb-init/APKBUILD deleted file mode 100644 index abacfeb..0000000 --- a/testing/py3-dumb-init/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=dumb-init -pkgname="py3-$_pyname" -pkgver=1.2.5 -_pkgver=1.2.5.post1 -pkgrel=0 -arch="all" -pkgdesc="Simple wrapper script which proxies signals to a child" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -options="!check" # No testsuite -source="$pkgname-$_pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$_pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$_pkgver - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -8527ac64a4219d0bde3612b8153056b44203656aed86b1bd047b4649ee3f7e04e0c0a669841fc2f176875993d61d8d80c980a410bcd92bb8ddc9577b6980fa42 py3-dumb-init-1.2.5.post1.tar.gz -" diff --git a/testing/py3-duo-client/APKBUILD b/testing/py3-duo-client/APKBUILD deleted file mode 100644 index c44b089..0000000 --- a/testing/py3-duo-client/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=duo_client -pkgname=py3-duo-client -pkgver=5.2.0 -pkgrel=0 -arch="noarch" -pkgdesc="Reference client for Duo Security APIs" -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends=" - py3-six - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - " -checkdepends=" - py3-pytest - py3-nose2 - py3-flake8 - py3-mock - py3-tz - py3-freezegun - " -source="$pkgname-$pkgver.tar.gz::https://github.com/duosecurity/duo_client_python/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir"/${_pyname}_python-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -78729409ccc28c85f1456ea1203404228a4c6b58a8b63ac0b090af9eb515ea36d2ed372338f72ca3da3b864a67d391d0782254670b9448c272c819f2410fe7a2 py3-duo-client-5.2.0.tar.gz -" diff --git a/testing/py3-facebook-sdk/APKBUILD b/testing/py3-facebook-sdk/APKBUILD deleted file mode 100644 index d5edcfc..0000000 --- a/testing/py3-facebook-sdk/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=facebook-sdk -pkgname="py3-$_pyname" -pkgver=3.1.0 -pkgrel=0 -arch="noarch" -pkgdesc="Python SDK for Facebook's Graph API" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -depends=" - py3-requests - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - " -checkdepends=" - py3-pytest - " -options="!check" # Testsuite requires API access -source="$pkgname-$pkgver.tar.gz::https://github.com/mobolic/facebook-sdk/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -90bb8242107ba37e0b3e05b91f2f8be07b359aa7c60646c1319f38a0ad910eb18b432af75515947109745539a6728b6571ceeb0239e8b94a669455d809cfab59 py3-facebook-sdk-3.1.0.tar.gz -" diff --git a/testing/py3-flower/APKBUILD b/testing/py3-flower/APKBUILD deleted file mode 100644 index 09fa943..0000000 --- a/testing/py3-flower/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=flower -pkgname="py3-$_pyname" -pkgver=2.0.1 -pkgrel=0 -arch="noarch !s390x" # Missing py3-celery for tests -pkgdesc="Real-time monitor and web admin for Celery distributed task queue" -url="https://flower.readthedocs.io/" -license="BSD-3-Clause" -depends=" - py3-redis - py3-humanize - py3-prometheus-client - py3-click - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-pytest - py3-tornado - py3-celery - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -4321962ee9c01f93cc978a17e61e4ec8ed32e9e615a619078b8b758963ff397f72c386f64e625db48265064d1d93598f89945294887f747521450a1dcf4c4bba py3-flower-2.0.1.tar.gz -" diff --git a/testing/py3-goodreads/APKBUILD b/testing/py3-goodreads/APKBUILD deleted file mode 100644 index af6238e..0000000 --- a/testing/py3-goodreads/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-goodreads -_pkgname=goodreads -pkgver=0.3.2 -pkgrel=1 -pkgdesc="Python wrapper for Goodreads API" -url="https://pypi.python.org/pypi/Goodreads" -license="MIT" -arch="noarch" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - python3-dev - py3-xmltodict - py3-requests - py3-rauth - " -source="$_pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/g/$_pkgname/$_pkgname-$pkgver.tar.gz" -options="!check" # No testsuite -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -2c1f7be226bbbac3d60247a5dddc06c48ad1d72790e4ce61c8c369100358965926422958563f153661b91b561414e4b573b95098808cc25ac5c7e6edfc46e344 goodreads-0.3.2.tar.gz -" diff --git a/testing/py3-imap-tools/APKBUILD b/testing/py3-imap-tools/APKBUILD deleted file mode 100644 index 857dce4..0000000 --- a/testing/py3-imap-tools/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-imap-tools -_pyname="imap-tools" -pkgver=1.5.0 -pkgrel=0 -arch="noarch" -pkgdesc="Work with email and mailbox by IMAP" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -105a3e15d502dcb6056a66f58ab1b9025637e5631436a4d8e3d1a4bcf59e1e718b9bb7e097c7f1348732b8dd9d5447ab9da4295c8ea4f9b82befefafb0a45fa6 py3-imap-tools-1.5.0.tar.gz -" diff --git a/testing/py3-inotify-simple/APKBUILD b/testing/py3-inotify-simple/APKBUILD deleted file mode 100644 index 0a95e0c..0000000 --- a/testing/py3-inotify-simple/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-inotify-simple -_pyname="inotify_simple" -pkgver=1.3.5 -pkgrel=0 -arch="noarch" -pkgdesc="A simple wrapper around inotify." -url="https://pypi.python.org/project/$_pyname" -license="BSD-2-Clause" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -fa8048786e6d4771ca63d6a2cc3e4230ec68a2d6f4bf8ca5a06056d0d261a678c3769112796a4e6a0f9c6be7331a16c4a06283d0240debb6ab407cd86b460c49 py3-inotify-simple-1.3.5.tar.gz -" diff --git a/testing/py3-inotifyrecursive/APKBUILD b/testing/py3-inotifyrecursive/APKBUILD deleted file mode 100644 index efb5d5b..0000000 --- a/testing/py3-inotifyrecursive/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-inotifyrecursive -_pyname="inotifyrecursive" -pkgver=0.3.5 -pkgrel=0 -arch="noarch" -pkgdesc="Simple recursive inotify watches for Python" -url="https://pypi.python.org/project/$_pyname" -license="LGPL-3.0-only" -depends=" - py3-inotify-simple - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -23d37d1574dd8228d1905bb02ff9ae2ad56e7905482c004029c3d9f79f94da10a1255395df638dd356b69da787f4dc05d1f90eeb65d0abfedec71054c3fdc0ca py3-inotifyrecursive-0.3.5.tar.gz -" diff --git a/testing/py3-ipware/APKBUILD b/testing/py3-ipware/APKBUILD deleted file mode 100644 index 44dce65..0000000 --- a/testing/py3-ipware/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-ipware -_pyname="python-ipware" -pkgver=2.0.0 -pkgrel=0 -arch="noarch" -pkgdesc="A python package for server applications to retrieve client's IP address" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -43ef8aed5600f50090c691501a279bb7ef11e3592312b34acd59e8145717a8c86d6daab2e2f68860b31abb0fc5e6c0fc6dfc3923496884ef8ae961e79455562f py3-ipware-2.0.0.tar.gz -" diff --git a/testing/py3-iso639/APKBUILD b/testing/py3-iso639/APKBUILD deleted file mode 100644 index 7e438db..0000000 --- a/testing/py3-iso639/APKBUILD +++ /dev/null @@ -1,44 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-iso639 -_pkgname=iso639 -pkgver=0.4.5 -pkgrel=0 -pkgdesc="Python library for ISO 639 standard" -arch="noarch" -url="https://github.com/noumar/iso639" -license="AGPL-3.0-only" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -checkdepends=" - py3-pytest - py3-pycountry - " -options="!check" # Failing testsuite -source="$pkgname-$pkgver.tar.gz::$url/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$builddir" python3 ./tests/tests.py -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -6201535804d7d1af77f1f2961d8eb1c2fae323dc5d4361b44e23caa834de1dcb9abd257cda4068f12a1a2984000edfa49cb852ecef5baee2d78d9c9e587202e4 py3-iso639-0.4.5.tar.gz -" diff --git a/testing/py3-langdetect/APKBUILD b/testing/py3-langdetect/APKBUILD deleted file mode 100644 index 3846251..0000000 --- a/testing/py3-langdetect/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-langdetect -_pyname="langdetect" -pkgver=1.0.9 -pkgrel=0 -arch="noarch" -pkgdesc="Language detection library ported from Google's language-detection" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -depends=" - py3-six - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -checkdepends=" - py3-pytest -" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -7558d674c47b080c79e43a00a25d2c7f77188cf60bea2cecb3bebb803d75e1aa42b43c74bd26ea1b541f4cb927421908882cbec01a91f0913984217e71ccc8db py3-langdetect-1.0.9.tar.gz -" diff --git a/testing/py3-memcached/APKBUILD b/testing/py3-memcached/APKBUILD deleted file mode 100644 index 60a526b..0000000 --- a/testing/py3-memcached/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=python-memcached -pkgname=py3-memcached -pkgver=1.59 -pkgrel=0 -arch="noarch" -pkgdesc="Python interface to memcached" -url="https://pypi.python.org/project/$_pyname" -license="Python-2.0" -depends=" - py3-six - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - " -checkdepends=" - py3-pytest - " -options="!check" # Failing testsuite -source="$pkgname-$pkgver.tar.gz::https://github.com/linsomniac/python-memcached/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -d7ff45a329f2a9bf97fdc7c0268c2c67046c3501270fcf03578b955c2da35904d7bdecd4239924d390797ddff8f4cc69fc5743f4d4f663cdb9f2f8c7e8159512 py3-memcached-1.59.tar.gz -" diff --git a/testing/py3-onelogin/APKBUILD b/testing/py3-onelogin/APKBUILD deleted file mode 100644 index b01c223..0000000 --- a/testing/py3-onelogin/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-onelogin -_pkgname=onelogin-python-sdk -pkgver=3.1.6 -pkgrel=0 -pkgdesc="OpenAPI Specification for OneLogin" -url="https://github.com/onelogin/onelogin-python-sdk" -license="MIT" -arch="noarch" -depends=" - py3-dateutil - py3-urllib3 - py3-pydantic - py3-aenum - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-frozendict - " -source="$pkgname-$pkgver.tar.gz::https://github.com/onelogin/onelogin-python-sdk/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver -options="!check" # Failing test unit -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -44fccb05e82c55db82617c33cc0e2287699969d9a7f12a4992c0cd35c28b2215c66bef37849e45b5506df11524d1b143a2ab3ae16f001af51f0135c92d0801a4 py3-onelogin-3.1.6.tar.gz -" diff --git a/testing/py3-opencontainers/APKBUILD b/testing/py3-opencontainers/APKBUILD deleted file mode 100644 index c8e2cff..0000000 --- a/testing/py3-opencontainers/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=opencontainers -pkgname="py3-$_pyname" -pkgver=0.0.14 -pkgrel=0 -arch="noarch" -pkgdesc="Python module for oci specifications" -url="https://pypi.python.org/project/$_pyname" -license="MPL-2.0" -depends=" - py3-requests - " -makedepends=" - py3-setuptools - py3-installer - py3-gpep517 - py3-wheel - " -checkdepends=" - py3-pytest - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -b0f0edb8d11c825e7bd64b0c38fb227823de0065dc35703cc930e5ad3a5c875abe5a8c8e16f34331ca2246f48887d34ab9749ca3b547216e0ece1aa7659dc845 py3-opencontainers-0.0.14.tar.gz -" diff --git a/testing/py3-openid/APKBUILD b/testing/py3-openid/APKBUILD deleted file mode 100644 index f683776..0000000 --- a/testing/py3-openid/APKBUILD +++ /dev/null @@ -1,47 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-openid -_pyname="python3-openid" -pkgver=3.2.0 -pkgrel=0 -arch="noarch" -pkgdesc="OpenID support for modern servers and consumers." -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -depends="py3-defusedxml" -makedepends=" - py3-setuptools - py3-installer - py3-gpep517 - py3-wheel - " -checkdepends=" - py3-coverage - py3-django - py3-pytest - py3-psycopg2 - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - export PYTHONPATH="build:$PYTHONPATH" - coverage run -m unittest openid.test.test_suite -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -54412820fef21928e1bf30d16c9bc73d454e9ff41df028a12047c08abdb4c2c9e1d9053daebab8b0327cb0fe0f67e364c2506a47509fef6db5bff42f8399b799 py3-openid-3.2.0.tar.gz -" diff --git a/testing/py3-portalocker/APKBUILD b/testing/py3-portalocker/APKBUILD deleted file mode 100644 index fdfd743..0000000 --- a/testing/py3-portalocker/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Contributor: Bart Ribbers -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-portalocker -pkgver=2.8.2 -pkgrel=0 -pkgdesc="An extended version of portalocker to lock files in Python using the with statement" -url="http://portalocker.readthedocs.io/en/latest/" -arch="noarch" -license="PSF-2.0" -depends=" - py3-babel - py3-imagesize - py3-requests - py3-snowballstemmer - python3 - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - py3-sphinx - " -checkdepends=" - py3-docutils - py3-pytest - py3-pytest-cov - " -subpackages="$pkgname-pyc" -source="https://pypi.python.org/packages/source/p/portalocker/portalocker-$pkgver.tar.gz" -# Tests requires deprecated Python package pytest-flakes and pytest-pep8 -options="!check" -builddir="$srcdir/portalocker-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -9ebd6fdbc597615c5f76bf5741556d84bc95c925e931ee708b4fccbf0908e4dc4e758be659928340675675f5ca09764f5d2621fdef9195e21c1359f7764ae1dc portalocker-2.8.2.tar.gz -" diff --git a/testing/py3-pyaml/APKBUILD b/testing/py3-pyaml/APKBUILD deleted file mode 100644 index 7c6938d..0000000 --- a/testing/py3-pyaml/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-pyaml -_pkgname="pyaml" -pkgver=23.9.7 -pkgrel=0 -arch='noarch' -pkgdesc="PyYAML-based module to produce pretty and readable YAML-serialized data" -url="https://pypi.python.org/pypi/pyaml" -license="WTFPL" -depends=" - py3-yaml - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-unidecode - py3-pytest - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -f21f8c329e5233f6774701fc1e5673e62ab162fb5f8efba25120d4e157940709f47a2c90838b3af42e71b7dcfc69852393b204d0d85b6d5fba28a23f8a118be0 py3-pyaml-23.9.7.tar.gz -" diff --git a/testing/py3-pydantic-scim/APKBUILD b/testing/py3-pydantic-scim/APKBUILD deleted file mode 100644 index 98f804e..0000000 --- a/testing/py3-pydantic-scim/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pkgname=pydantic-scim -pkgname="py3-$_pkgname" -pkgver=0.0.8 -pkgrel=0 -arch="noarch" -pkgdesc="Pydantic types for SCIM" -url="https://pypi.python.org/project/$_pkgname" -license="Apache-2.0" -depends=" - py3-pydantic - " -makedepends=" - py3-installer - py3-hatchling - py3-build - py3-wheel - py3-setuptools_scm - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -build() { - python3 -m build --wheel --no-isolation -} - -package() { - python3 -m installer --destdir="$pkgdir" dist/*.whl -} - -sha512sums=" -3ca10d6d97607e6f048b531fbf0f21ced6beb6f46a6452a4d6b49f87f6be2079a2b80d3d96b2f72d41d499c3871aea2cfad6d3b423506c906b6701e26476f666 py3-pydantic-scim-0.0.8.tar.gz -" diff --git a/testing/py3-pytelegrambotapi/APKBUILD b/testing/py3-pytelegrambotapi/APKBUILD deleted file mode 100644 index e4a06b3..0000000 --- a/testing/py3-pytelegrambotapi/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-pytelegrambotapi -pkgver=4.14.0 -pkgrel=0 -arch="noarch" -pkgdesc="A simple, but extensible Python implementation for the Telegram Bot API." -url="https://pypi.org/project/pyTelegramBotAPI/" -license="GPL-2.0-only" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -source="$pkgname-$pkgver.tar.gz::https://github.com/eternnoir/pyTelegramBotAPI/archive/$pkgver.tar.gz" -builddir="$srcdir"/pyTelegramBotAPI-$pkgver -options="!check" # No testsuite -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -2008f1f2f20bc34b77bbd106d949d9bbcb5c0aa5ffd359911e5982daaf5993187d09d702d566307e2583422c0a17a92d8e9bde88c5ea07f491bdd943fa195e40 py3-pytelegrambotapi-4.14.0.tar.gz -" diff --git a/testing/py3-pytz-deprecation-shim/APKBUILD b/testing/py3-pytz-deprecation-shim/APKBUILD deleted file mode 100644 index ceb403a..0000000 --- a/testing/py3-pytz-deprecation-shim/APKBUILD +++ /dev/null @@ -1,34 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-pytz-deprecation-shim -_pkgname=pytz_deprecation_shim -pkgver=0.1.0 -_pkgver=$pkgver.post0 -pkgrel=0 -arch='noarch' -pkgdesc="Shims to help you safely remove pytz" -url="https://pypi.org/project/$_pkgname/" -license="MIT" -makedepends=" - py3-setuptools - py3-wheel - py3-installer - py3-build - " -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$_pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$_pkgver -options="!check" # No testsuite -subpackages="$pkgname-pyc" - -build() { - python3 -m build --wheel --no-isolation -} - -package() { - python3 -m installer --destdir="$pkgdir" dist/*.whl -} - -sha512sums=" -201eea777f4da9def1b060911da5eaa89652f6716d5608278fdc94a2f67af5ea23a8b667cb181e03d5edd7f0a07f4954047621668f4c2e7bb325dd07f454d0b6 py3-pytz-deprecation-shim-0.1.0.tar.gz -" diff --git a/testing/py3-rauth/APKBUILD b/testing/py3-rauth/APKBUILD deleted file mode 100644 index a290020..0000000 --- a/testing/py3-rauth/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-rauth -_pkgname=rauth -pkgver=0.7.3 -pkgrel=0 -pkgdesc="A Python library for OAuth 1.0/a, 2.0, and Ofly" -arch="noarch" -url="https://github.com/maxcountryman/rauth" -license="MIT" -depends=" - py3-requests - " -makedepends=" - py3-setuptools - py3-wheel - py3-gpep517 - py3-installer - " -source="$_pkgname-$pkgver.tar.gz::https://pypi.python.org/packages/source/r/$_pkgname/$_pkgname-$pkgver.tar.gz" -options="!check" # No testsuite -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -8bb6d10e5d4ddb583c45e3bf166051b8edde8193cd10da8c1a623908d2cc5a3a2cbc9065d5fa397188414e72fa66166051893e4ba956369b3f0f850ae823837e rauth-0.7.3.tar.gz -" diff --git a/testing/py3-rpy2/APKBUILD b/testing/py3-rpy2/APKBUILD deleted file mode 100644 index 2139e15..0000000 --- a/testing/py3-rpy2/APKBUILD +++ /dev/null @@ -1,52 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-rpy2 -_pyname="rpy2" -pkgver=3.5.14 -pkgrel=0 -# riscv64: R missing -arch="all !riscv64" -pkgdesc="A very simple, yet robust, Python interface to the R Programming Language" -url="https://pypi.python.org/project/$_pyname" -license="GPL-2.0-only" -depends=" - py3-cffi - py3-numpy - py3-tz - py3-tzlocal - py3-jinja2 - R - " -makedepends=" - py3-build - py3-installer - py3-setuptools - py3-wheel - python3-dev - R-dev - " -checkdepends=" - py3-pytest - " -options="!check" # test failures due to missing R packages -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - python3 -m build --wheel --no-isolation -} - -check() { - PYTHONPATH="$PWD"/$(echo build/lib.*) \ - pytest -v -k 'not test_rendertofile and not test_rendertobytes_plot' # Skip test that segfaults in build server -} - -package() { - python3 -m installer --destdir="$pkgdir" dist/*.whl -} - -sha512sums=" -d02454fb41c946a0a92547f8a5dba3c614741bec8e293984116b34dfbe97574a655b7066fd75d34fee4c0f604c41c8b672d6a2c3b4194cba30a37c95da6578dd py3-rpy2-3.5.14.tar.gz -" diff --git a/testing/py3-ruamel-yaml-clib/APKBUILD b/testing/py3-ruamel-yaml-clib/APKBUILD deleted file mode 100644 index c57362e..0000000 --- a/testing/py3-ruamel-yaml-clib/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-ruamel-yaml-clib -_pyname="ruamel.yaml.clib" -pkgver=0.2.8 -pkgrel=0 -arch="all" -pkgdesc="C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - python3-dev - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -1984d1f46f9d98c178315d1aad27d02fe3a228fbe4a2f4e68729b850c1ebe08ff0ef2fab38841296a2ac0a1f8a0bf7231ab8d7972a9a39a260ea773457f1393b py3-ruamel-yaml-clib-0.2.8.tar.gz -" diff --git a/testing/py3-ruamel-yaml/APKBUILD b/testing/py3-ruamel-yaml/APKBUILD deleted file mode 100644 index 2d75936..0000000 --- a/testing/py3-ruamel-yaml/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-ruamel-yaml -_pyname="ruamel.yaml" -pkgver=0.18.5 -pkgrel=0 -arch="noarch" -pkgdesc="AML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-ruamel-yaml-clib - " -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -46ddfb81281a9c619370f252f5a189b33a9f36934891a18a915897d2a1870c53938f8afb56b2eda3c5ac6bd2e39fcbba0a94955db0847302bd58458079880525 py3-ruamel-yaml-0.18.5.tar.gz -" diff --git a/testing/py3-slack-sdk/APKBUILD b/testing/py3-slack-sdk/APKBUILD deleted file mode 100644 index cbcefee..0000000 --- a/testing/py3-slack-sdk/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-slack-sdk -_pyname="slack_sdk" -pkgver=3.26.0 -pkgrel=0 -arch="noarch" -pkgdesc="The Slack API Platform SDK for Python" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-aiohttp - py3-aiodns - " -makedepends=" - py3-setuptools - py3-installer - py3-wheel - py3-gpep517 - " -checkdepends=" - py3-flask - py3-flask-sockets - py3-moto - " -options="!check" # Missing checkdepend -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$builddir" pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -26cdd1a4531900970e9095354751ec563ac2fbd0b2e38b753e6ab9145265f7f0d89c51d15a1051283e622a2d3a07243bf2bad2411037b82b07e77b1b9e482fa0 py3-slack-sdk-3.26.0.tar.gz -" diff --git a/testing/py3-swagger-spec-validator/APKBUILD b/testing/py3-swagger-spec-validator/APKBUILD deleted file mode 100644 index 0f172d1..0000000 --- a/testing/py3-swagger-spec-validator/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=swagger-spec-validator -pkgname="py3-$_pyname" -pkgver=3.0.3 -pkgrel=1 -arch="noarch" -pkgdesc="Validation of Swagger specifications" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -depends=" - py3-jsonschema - py3-yaml - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -21d849f3b7631c1bced3831728852d953063f28d918e5b409ac302781769a495536869bf3e042692d70e5a589a9db5306986aebb4cd0e363e6f80e1330a753f2 py3-swagger-spec-validator-3.0.3.tar.gz -" diff --git a/testing/py3-tika/APKBUILD b/testing/py3-tika/APKBUILD deleted file mode 100644 index b660162..0000000 --- a/testing/py3-tika/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-tika -_pyname="tika" -pkgver=2.6.0 -pkgrel=0 -arch="noarch" -pkgdesc="Apache Tika Python library" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # Failing testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -092986afd0968d41b6a0274b1f1cac5f6a168bc79cea920f65543c46b6541b6b02eceb0ae89fc254b709421dd75ebe50aad0f17a52becbdb27a541b80a08a0ae py3-tika-2.6.0.tar.gz -" diff --git a/testing/py3-ua-parser/APKBUILD b/testing/py3-ua-parser/APKBUILD deleted file mode 100644 index f4268f2..0000000 --- a/testing/py3-ua-parser/APKBUILD +++ /dev/null @@ -1,55 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=ua-parser -pkgname="py3-$_pyname" -pkgver=0.18.0 -_uapcorever=0.18.0 -pkgrel=0 -arch="noarch" -pkgdesc="Python port of Browserscope's user agent parser" -url="https://pypi.python.org/project/$_pyname" -license="Apache-2.0" -depends=" - py3-pyaml - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - " -checkdepends=" - py3-pytest - " -source=" - $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz - $pkgname-core-$_uapcorever.tar.gz::https://github.com/ua-parser/uap-core/archive/refs/tags/v$_uapcorever.tar.gz - " -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -prepare() { - default_prepare - ln -s "$srcdir"/uap-core-$_uapcorever "$builddir"/uap-core -} - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -1b3685df8fc65f529b3a54d7bc56aa6d2df56e028d3a2fd2206826119c1ccabe2aaf7dd4c2c00122a0189c0987360a6d7af12ec2dac444b55cf745ebfc7365fd py3-ua-parser-0.18.0.tar.gz -78cf77d38e5738651060d194c94cd5c6e514e4fd01da121250d016bbe6a8967e0c56a91ae26117832c11aa50d9afec8ac06fe7a7568a55bf7098ff21bc279567 py3-ua-parser-core-0.18.0.tar.gz -" diff --git a/testing/py3-urllib3-secure-extra/APKBUILD b/testing/py3-urllib3-secure-extra/APKBUILD deleted file mode 100644 index 3aac4e8..0000000 --- a/testing/py3-urllib3-secure-extra/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pkgname=urllib3-secure-extra -pkgname="py3-$_pkgname" -pkgver=0.1.0 -pkgrel=0 -arch="noarch" -pkgdesc="Marker library to detect whether urllib3 was installed with the deprecated [secure] extra" -url="https://pypi.python.org/project/$_pkgname" -license="Apache-2.0" -depends=" - py3-urllib3 - " -makedepends=" - py3-flit - py3-build - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -build() { - flit build --setup-py --format wheel - python3 -m build --wheel --no-isolation -} - -package() { - python3 -m installer --destdir="$pkgdir" dist/*.whl -} - -sha512sums=" -151dfa2dd4e7fecea482bec0be69410c213336b95e00c900f600053dc9777618c3b9cc1c69e14f61e909ad7b785bcf391ea11c74b1b710749b70e138fbdd6de3 py3-urllib3-secure-extra-0.1.0.tar.gz -" diff --git a/testing/py3-wand/APKBUILD b/testing/py3-wand/APKBUILD deleted file mode 100644 index 9b3dfcc..0000000 --- a/testing/py3-wand/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-wand -_pkgname=wand -pkgver=0.6.13 -pkgrel=0 -pkgdesc="Ctypes-based simple MagickWand API binding for Python" -url="https://github.com/emcconville/wand" -license="MIT" -arch="noarch" -depends=" - imagemagick - libxml2 - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -source="$pkgname-$pkgver.tar.gz::https://github.com/emcconville/wand/archive/$pkgver.tar.gz" -options="!check" # Failing test units -builddir="$srcdir"/$_pkgname-$pkgver -subpackages="$pkgname-pyc" - -prepare() { - default_prepare - rm pyproject.toml -} - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -4551ba719b6bb90bb6818e9f0fcb9e35e41c5e49de17b565f4b8b148b03a25eff4033ed9d49ebc46f2e9fbfc83ae976f817fe595a11a4704b12c77954506ffc0 py3-wand-0.6.13.tar.gz -" diff --git a/testing/py3-webauthn/APKBUILD b/testing/py3-webauthn/APKBUILD deleted file mode 100644 index 1cb17da..0000000 --- a/testing/py3-webauthn/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=webauthn -pkgname="py3-$_pyname" -pkgver=1.11.1 -pkgrel=0 -arch="noarch" -pkgdesc="A Python3 implementation of the WebAuthn API focused on making it easy to leverage the power of WebAuthn." -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} -sha512sums=" -29e3df7adfed9fdbe8bfe264e207c45e2426ec10c48daf90347a7fe6070f00280c8102da00335a8f5b9b7efeba9fa2fe033dcaf656ec4f95a7566bcc6a5729b2 py3-webauthn-1.11.1.tar.gz -" diff --git a/testing/py3-whoosh/APKBUILD b/testing/py3-whoosh/APKBUILD deleted file mode 100644 index c5c477b..0000000 --- a/testing/py3-whoosh/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=py3-whoosh -_pyname="Whoosh" -pkgver=2.7.4 -pkgrel=0 -arch="noarch" -pkgdesc="Fast, pure-Python full text indexing, search, and spell checking library" -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-pytest-runner - " -source=" - $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz - test-fix.patch - " -options="!check" # Failing test units -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$builddir"/src pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} -sha512sums=" -7cdefdcf52b704ffe50c00718c42677e2ddfe879f81ad2d14b580b0e026cc0ebb6b9ddc99d8709eaff4eb9b83f654b042c8792821e1ed90aa85cfa6f82845074 py3-whoosh-2.7.4.tar.gz -191254eb455bc8bf762e0ae05c43cf3dc18ca948a824a8285a0337127d887655998f82a8f5ed807942c0ad14ac78c7c9e3b0742413bc3b19ee949bbd9dbd6e6c test-fix.patch -" diff --git a/testing/py3-whoosh/test-fix.patch b/testing/py3-whoosh/test-fix.patch deleted file mode 100644 index 370a34c..0000000 --- a/testing/py3-whoosh/test-fix.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/setup.cfg.orig b/setup.cfg -index 1f68c92e6d5..a6a81025aa8 100644 ---- a/setup.cfg.orig -+++ b/setup.cfg -@@ -15,7 +15,7 @@ formats = zip,gztar - push = sdist bdist_wheel upload - pushdocs = build_sphinx upload_sphinx - --[pytest] -+[tool:pytest] - addopts = -rs --tb=native - norecursedirs = .hg .tox _build tmp* env* benchmark stress - minversion = 2.0 From 0f2b0e81552d7ab4bc55f4ffc8c84e334b4d93b4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:19:48 -0500 Subject: [PATCH 025/738] user/py3-pytest-django: in community --- user/py3-pytest-django/APKBUILD | 35 --------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 user/py3-pytest-django/APKBUILD diff --git a/user/py3-pytest-django/APKBUILD b/user/py3-pytest-django/APKBUILD deleted file mode 100644 index 9cd0a6b..0000000 --- a/user/py3-pytest-django/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=pytest-django -pkgname="py3-$_pyname" -pkgver=4.5.2 -pkgrel=0 -arch="noarch" -pkgdesc="A Django plugin for py.test" -url="https://pypi.python.org/project/$_pyname" -license="BSD-3-Clause" -depends="py3-pytest" -makedepends="py3-setuptools_scm" -checkdepends="py3-pytest-xdist py3-django" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver - -build() { - python setup.py build -} - -check() { - python setup.py install --root="$PWD/tmp_install" --optimize=1 - PYTHONPATH="$PWD/tmp_install/usr/lib/python3.10/site-packages:$PYTHONPATH:$PWD" \ - DJANGO_SETTINGS_MODULE=pytest_django_test.settings_sqlite \ - py.test tests || true -} - -package() { - python setup.py install --root="$pkgdir" --optimize=1 - install -Dm664 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE -} -sha512sums=" -bde0ee6f1c728ff2b6f965150fbbcb25c8ef5a24732256d2d688ee95c243ca2dd0f9606fac559b2c204dd2835ff5362a934cd176fabc7479b21a1e55fe284f4d py3-pytest-django-4.5.2.tar.gz -" From daf247f0aabf1f43d79fe4beb0406f3583097fe3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:23:55 -0500 Subject: [PATCH 026/738] user/perl-cgi-formbuilder: in community --- user/perl-cgi-formbuilder/APKBUILD | 39 ------------------------------ 1 file changed, 39 deletions(-) delete mode 100644 user/perl-cgi-formbuilder/APKBUILD diff --git a/user/perl-cgi-formbuilder/APKBUILD b/user/perl-cgi-formbuilder/APKBUILD deleted file mode 100644 index 5b91b4b..0000000 --- a/user/perl-cgi-formbuilder/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=perl-cgi-formbuilder -_pkgname=CGI-FormBuilder -pkgver=3.10 -pkgrel=0 -pkgdesc="Easily generate and process stateful forms" -arch="noarch" -url="https://metacpan.org/release/CGI-FormBuilder" -license="Artistic-1.0-Perl" -depends="perl" -makedepends=" - perl-html-template - perl-text-template - perl-template-toolkit - perl-cgi-session - " -checkdepends="perl-cgi" -source="https://cpan.metacpan.org/authors/id/B/BI/BIGPRESH/$_pkgname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_pkgname-$pkgver - -build() { - perl Makefile.PL INSTALLDIRS=vendor - make -} - -check() { - make test -} - -package() { - make DESTDIR="$pkgdir" install -} - -sha512sums=" -38d8e6eb729e188074d872b979ad46133152877bb30b95329a2c7275154646a4afb62dc3539cb34781149f424b1d384d05230efe8b174967742625a81765bad5 CGI-FormBuilder-3.10.tar.gz -" From eb541348debdb4459c19955a4437b7c49665e201 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:24:10 -0500 Subject: [PATCH 027/738] user/perl-email-valid: in community --- user/perl-email-valid/APKBUILD | 40 ---------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 user/perl-email-valid/APKBUILD diff --git a/user/perl-email-valid/APKBUILD b/user/perl-email-valid/APKBUILD deleted file mode 100644 index aae4aa0..0000000 --- a/user/perl-email-valid/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_cpaname="Email-Valid" -_cpanauthor=RJBS -pkgname=perl-email-valid -pkgver=1.203 -pkgrel=1 -pkgdesc="Check validity of Internet email addresses" -# disable missing depends -#arch="noarch" -url="http://search.cpan.org/dist/$_cpaname/" -license="GPL" -depends=" - perl-io-captureoutput - perl-mailtools - perl-net-dns - perl-net-domain-tld - " -source="http://www.cpan.org/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_cpaname-$pkgver - -build() { - export PERL_MM_FALLBACK_SILENCE_WARNING=true - perl Makefile.PL - make -} - -check() { - make test -} - -package() { - make install INSTALLDIRS=vendor DESTDIR="$pkgdir" - rm "$pkgdir"/usr/lib/perl5/core_perl/perllocal.pod -} -sha512sums=" -5c91298df72d1084401be47f035d44a350a0aa5de7bfa5019b7f2b44fe61a1e64875f77a4b3412d660f0136c548dde6158eae1a8fcba4442d0de0a19c51e84fd Email-Valid-1.203.tar.gz -" From d79cbda4836d4f254cf530535d54f66a2cc944cc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:24:31 -0500 Subject: [PATCH 028/738] user/perl-locale-gettext: in community --- user/perl-locale-gettext/APKBUILD | 46 ------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 user/perl-locale-gettext/APKBUILD diff --git a/user/perl-locale-gettext/APKBUILD b/user/perl-locale-gettext/APKBUILD deleted file mode 100644 index 00dda39..0000000 --- a/user/perl-locale-gettext/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=perl-locale-gettext -_pkgname=Locale-gettext -pkgver=1.07 -pkgrel=0 -license="Artistic-1.0-Perl OR GPL-1.0-or-later" -pkgdesc="Permits access from Perl to the gettext() family of functions" -arch="all" -url="https://search.cpan.org/dist/$_pkgname/" -depends=" - perl - gettext - " -makedepends=" - gettext-dev - perl-dev - " -checkdepends=" - musl-locales - " -options="!check" # failing test units -source="https://search.cpan.org/CPAN/authors/id/P/PV/PVANDRY/$_pkgname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_pkgname-$pkgver - -build() { - PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor - make -} - -check() { - make test -} - -package() { - make install DESTDIR="$pkgdir" - - # otherwise perl breaks - find "$pkgdir" \( -name '.packlist' -or -name '*.pod' \) -exec rm '{}' + -} - -sha512sums=" -d3716a597d586ee2ff29472ca7b13aaf67770299de31e5f12abafebc879bbe4a1e1dbc0025cf4f3dc29992955f26cffc3be387d974c3911af095d5b49e67a1c6 Locale-gettext-1.07.tar.gz -" From b97502d516dd141c08c464006739d3461ed9facc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:25:04 -0500 Subject: [PATCH 029/738] user/perl-rpc-xml: in community --- user/perl-rpc-xml/APKBUILD | 45 -------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 user/perl-rpc-xml/APKBUILD diff --git a/user/perl-rpc-xml/APKBUILD b/user/perl-rpc-xml/APKBUILD deleted file mode 100644 index 3057385..0000000 --- a/user/perl-rpc-xml/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=perl-rpc-xml -_pkgname='RPC-XML' -pkgver=0.82 -pkgrel=0 -pkgdesc="A set of classes for core data, message and XML handling" -url="https://metacpan.org/dist/RPC-XML" -arch="noarch" -license="Artistic-1.0-Perl OR GPL-1.0-or-later" -depends=" - perl - perl-xml-parser - perl-xml-libxml - perl-net-server - perl-http-daemon - perl-datetime-format-iso8601 - " -source="https://cpan.metacpan.org/authors/id/R/RJ/RJRAY/$_pkgname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_pkgname-$pkgver - -build() { - export PERL_MM_USE_DEFAULT=1 PERL5LIB='' \ - PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR=$pkgdir" - - perl Makefile.PL - make -} - -check() { - export PERL_MM_USE_DEFAULT=1 PERL5LIB='' - make test -} - -package() { - make install - - # otherwise perl breaks - find "$pkgdir" \( -name '.packlist' -or -name '*.pod' \) -exec rm '{}' + -} -sha512sums=" -e5d1092a2807c2bd423502dd2ed53a72c57384b67bb4709e86a64a6fe37ce8af580998e62fcfa6a48d66d5308d9dc270c74e4293617b9f23a654e379cde4025f RPC-XML-0.82.tar.gz -" From f2770aa9ac74654c8ce225786414d08b04720fcf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:25:22 -0500 Subject: [PATCH 030/738] user/perl-text-markdown: in community --- user/perl-text-markdown/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 user/perl-text-markdown/APKBUILD diff --git a/user/perl-text-markdown/APKBUILD b/user/perl-text-markdown/APKBUILD deleted file mode 100644 index d176272..0000000 --- a/user/perl-text-markdown/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=perl-text-markdown -_pkgname=Text-Markdown -pkgver=1.000031 -pkgrel=0 -pkgdesc="Perl/CPAN Module Text::Markdown" -arch="noarch" -url="https://search.cpan.org/dist/$_pkgname" -license="Artistic-1.0-Perl OR GPL-1.0-or-later" -depends="perl" -source="https://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/$_pkgname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_pkgname-$pkgver/ - -build() { - PERL_USE_UNSAFE_INC=1 \ - PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor - make -} - -package() { - make install DESTDIR="$pkgdir" - find "$pkgdir" -name '.packlist' -delete - find "$pkgdir" -name '*.pod' -delete -} - -sha512sums=" -58bef4eba58572c4990849209005109a969bf404a7bc5dfbaae25aa1d0b89317ea9b412658180dcfd96b2c809d5c6900e2118838535dfa9cad6d9b45969bee05 Text-Markdown-1.000031.tar.gz -" From 02081f71b794f7b3c9570f57189c20993c7a3037 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 14:13:36 -0500 Subject: [PATCH 031/738] user/gitlab-foss: upgrade to 16.6.1 --- user/gitlab-foss/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 481d798..830213b 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,9 +3,9 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.6.0 +pkgver=16.6.1 _gittag=v$pkgver -pkgrel=1 +pkgrel=0 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" arch="x86_64 aarch64" @@ -377,7 +377,7 @@ assets() { } sha512sums=" -ea83c490fdbfc7d32dc1b25fb17185f6552dfc72ab1766f7169e1298869589a12ea7b9285873be2c7b91303dd8eb486acaeb75e916177a9827139fb9b54ea232 gitlab-foss-v16.6.0.tar.gz +3d09db8e974becb6d54c2236e092735d67e114ee89ed89c69ef3171a6fe4441ba0023b8cf3eba97072f4b82e7b6452d47f790c0aa07791aabc372db501f866ab gitlab-foss-v16.6.1.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From 10aaf62e26e398b4511fdc50b5d788bb2ace1b3c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Dec 2023 18:35:42 -0500 Subject: [PATCH 032/738] user/mastodon: upgrade to 4.2.3 --- user/mastodon/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 0e8cd69..44e04f0 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -3,7 +3,7 @@ pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.1 +pkgver=4.2.3 _gittag=v$pkgver pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" @@ -192,7 +192,7 @@ assets() { } sha512sums=" -54e3e14abbe9ce6b4ec72586b00d0e7845b8e7b0f18ee608ab452a4b56df257657ffcd1f3a0b8de715dbaad3edacbf31a4e20cef5f5d82b6902837ee9a6ab900 mastodon-v4.2.1.tar.gz +65cbd5b586e189931d7c007c227f553ebbfa30f051443a3fff334260bd66751b0b583495b4add677eb66da0332e7943d30fb23944c0ad6af1af37598c337e41f mastodon-v4.2.3.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From c5c0c156a0d832586848e2b2448ee4642a74e1c1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 7 Dec 2023 21:41:41 -0500 Subject: [PATCH 033/738] backports/*: clean --- backports/celery/APKBUILD | 58 --------------------- backports/celery/celery.confd | 4 -- backports/celery/celery.initd | 16 ------ backports/celery/celery.pre-install | 7 --- backports/py3-aiodns/APKBUILD | 29 ----------- backports/py3-amqp/APKBUILD | 37 ------------- backports/py3-billiard/APKBUILD | 42 --------------- backports/py3-case/APKBUILD | 32 ------------ backports/py3-django-oauth-toolkit/APKBUILD | 54 ------------------- backports/py3-jwcrypto/APKBUILD | 37 ------------- backports/py3-kombu/APKBUILD | 41 --------------- backports/py3-kombu/fix-requirements.patch | 10 ---- backports/py3-pycares/APKBUILD | 30 ----------- backports/py3-structlog/APKBUILD | 50 ------------------ backports/py3-vine/APKBUILD | 33 ------------ 15 files changed, 480 deletions(-) delete mode 100644 backports/celery/APKBUILD delete mode 100644 backports/celery/celery.confd delete mode 100644 backports/celery/celery.initd delete mode 100644 backports/celery/celery.pre-install delete mode 100644 backports/py3-aiodns/APKBUILD delete mode 100644 backports/py3-amqp/APKBUILD delete mode 100644 backports/py3-billiard/APKBUILD delete mode 100644 backports/py3-case/APKBUILD delete mode 100644 backports/py3-django-oauth-toolkit/APKBUILD delete mode 100644 backports/py3-jwcrypto/APKBUILD delete mode 100644 backports/py3-kombu/APKBUILD delete mode 100644 backports/py3-kombu/fix-requirements.patch delete mode 100644 backports/py3-pycares/APKBUILD delete mode 100644 backports/py3-structlog/APKBUILD delete mode 100644 backports/py3-vine/APKBUILD diff --git a/backports/celery/APKBUILD b/backports/celery/APKBUILD deleted file mode 100644 index 8afc9c7..0000000 --- a/backports/celery/APKBUILD +++ /dev/null @@ -1,58 +0,0 @@ -# Maintainer: Drew DeVault -pkgname=celery -pkgver=5.2.7 -pkgrel=3 -pkgdesc="An asynchronous task queue/job queue based on distributed message passing" -url="http://www.celeryproject.org/" -arch="noarch !s390x" # lmited by py3-kombu -license="Apache-2.0" -depends=" - py3-billiard - py3-click - py3-click-didyoumean - py3-click-plugins - py3-click-repl - py3-kombu - py3-tz - py3-vine - python3 - " -makedepends="python3-dev py3-setuptools py3-gpep517 py3-wheel" -install="$pkgname.pre-install" -source="https://files.pythonhosted.org/packages/source/c/celery/celery-$pkgver.tar.gz - celery.confd - celery.initd" -pkgusers="celery" -pkggroups="celery" -subpackages="$pkgname-openrc $pkgname-pyc" -provides="py3-celery=$pkgver-r$pkgrel" - -# TODO: requires many many many dependencies -options="!check" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - # install scripts - install -m755 -D "$srcdir"/$pkgname.initd \ - "$pkgdir"/etc/init.d/$pkgname - install -m644 -D "$srcdir"/$pkgname.confd \ - "$pkgdir"/etc/conf.d/$pkgname - - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -check() { - python3 setup.py test -} - -sha512sums=" -68e3bb082f97ebe20391293cc8fa96c41c8f5ac5e8c24b2b7bd66eb104ec459bdfa49741e47486676e5daa88d7a71e3eb0d9432851aeafc74b0d4352e567e853 celery-5.2.7.tar.gz -c283956f8fe386ef39cb3e165a20d1cc7ff6398fbf5a922bec6b61fe4a71188519baed9feafc4e0e5b6864851545edaba54b89ba3613b2cf2ddd6426a6bf8fc2 celery.confd -3e5e2c6a55672bc0a02fca93ad334c694066c636ed62f2b55cb8f27b9301c429d68ce53667ec744b9b152ec786de7aea90cc05a143d6942cf5d2f34e51ca4089 celery.initd -" diff --git a/backports/celery/celery.confd b/backports/celery/celery.confd deleted file mode 100644 index 2d69aea..0000000 --- a/backports/celery/celery.confd +++ /dev/null @@ -1,4 +0,0 @@ -CELERY_USER=celery -CELERY_LOG=/var/log/celery.log -CELERY_REDIR="1>/dev/null 2>> ${CELERY_LOG}" -CELERY_OPTS="-A celeryapp $CELERY_REDIR" diff --git a/backports/celery/celery.initd b/backports/celery/celery.initd deleted file mode 100644 index f4e2bf9..0000000 --- a/backports/celery/celery.initd +++ /dev/null @@ -1,16 +0,0 @@ -#!/sbin/openrc-run -supervisor=supervise-daemon - -description="celery queue worker" - -: ${CELERY_USER:="celery"} -: ${CELERY_GROUP:="$(id -gn $CELERY_USER)"} - -pidfile="/run/$RC_SVCNAME.sd.pid" -supervise_daemon_args="-u $CELERY_USER -g $CELERY_GROUP" -command=/usr/bin/celery -command_args="${CELERY_OPTS}" - -depends() { - use net -} diff --git a/backports/celery/celery.pre-install b/backports/celery/celery.pre-install deleted file mode 100644 index 05ba0f5..0000000 --- a/backports/celery/celery.pre-install +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -addgroup -S celery 2>/dev/null -adduser -S -D -H -h /usr/share/celery -s /sbin/nologin -G celery -g celery celery 2>/dev/null - -exit 0 - diff --git a/backports/py3-aiodns/APKBUILD b/backports/py3-aiodns/APKBUILD deleted file mode 100644 index 57eae8c..0000000 --- a/backports/py3-aiodns/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Contributor: Sam Whited -# Maintainer: Sam Whited -pkgname=py3-aiodns -_pkgname=aiodns -pkgver=3.0.0 -pkgrel=2 -pkgdesc="A library for performing asynchronous DNS resolutions using pycares." -url="https://pypi.org/project/aiosasl/" -arch="all" -license="MIT" -depends="python3 py3-pycares" -makedepends="py3-setuptools" -subpackages="$pkgname-doc $pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir/$_pkgname-$pkgver" -options="!check" # tests not included in source package. - -build() { - python3 setup.py build -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" - install -Dm644 LICENSE README.rst -t "$pkgdir"/usr/share/licenses/$pkgname -} - -sha512sums=" -8c1016f3b0cb461e70e9a55034f9ad3b3db705a845bf20bb6503c7a5d592b4c5d2e8ddc60b375c5fafdc559dc4566736f4c93f26710be2dcbd181284ef039825 aiodns-3.0.0.tar.gz -" diff --git a/backports/py3-amqp/APKBUILD b/backports/py3-amqp/APKBUILD deleted file mode 100644 index 458bb5b..0000000 --- a/backports/py3-amqp/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Maintainer: Drew DeVault -pkgname=py3-amqp -pkgver=5.1.1 -pkgrel=2 -pkgdesc="an AMQP implementation" -url="https://pypi.org/project/amqp/" -arch="noarch" -license="BSD-3-Clause" -depends="py3-vine python3" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -checkdepends="py3-vine py3-case py3-nose py2py3-mock" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/a/amqp/amqp-$pkgver.tar.gz" -options="!check" # requires a running rabbitmq sever -builddir="$srcdir"/amqp-$pkgver - -replaces="py-amqp" # Backwards compatibility -provides="py-amqp=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 setup.py test -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -f549a85e4f04543dd8e844edb68350ca185de9259aa896af31ae5ee5dfdfe73f904d95821c403dc797c7f3ada17ce6bff4e0fd9fcdf2abc1b33a94d079f99179 amqp-5.1.1.tar.gz -" diff --git a/backports/py3-billiard/APKBUILD b/backports/py3-billiard/APKBUILD deleted file mode 100644 index 126becf..0000000 --- a/backports/py3-billiard/APKBUILD +++ /dev/null @@ -1,42 +0,0 @@ -# Maintainer: Drew DeVault -pkgname=py3-billiard -pkgver=3.6.4.0 -pkgrel=4 -pkgdesc="a message queue abstraction layer" -url="https://pypi.org/project/billiard/" -arch="noarch" -license="BSD-3-Clause" -makedepends="py3-setuptools" -checkdepends="py3-psutil py3-pytest py3-nose py3-case" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/b/billiard/billiard-$pkgver.tar.gz - $pkgname-py311.patch::https://github.com/celery/billiard/commit/ff8efc5d689ef048f5203593390f1ff6a052a5d5.patch - " -builddir="$srcdir/billiard-$pkgver" - -replaces="py-billiard" # Backwards compatibility -provides="py-billiard=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - python3 setup.py build -} - -check() { - # Uses wrong name for 'queue' module. - # Uses internal 'test' and 'test.support' modules. - rm -f t/integration/tests/test_multiprocessing.py - - # Windows only - rm -f t/unit/test_win32.py - - py.test-3 -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" -} - -sha512sums=" -9f2a44024e45c4e7667472a0a3ade7caae755ec7c163929433f818e4b87165218b9cc9545bdee2254e7159c206e525306e383d38906b00fd5428bd1616c39b8f billiard-3.6.4.0.tar.gz -589f57ce516cec2740cff6f06f396caac856b75ff4c7dc022c6b1b60f0d97f590667ff3c0ee4887926556c073241d89a4734658d35dcfb41fc71117fdc2c8426 py3-billiard-py311.patch -" diff --git a/backports/py3-case/APKBUILD b/backports/py3-case/APKBUILD deleted file mode 100644 index 9b3094d..0000000 --- a/backports/py3-case/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Maintainer: Drew DeVault -pkgname=py3-case -_pyname=case -pkgver=1.5.3 -pkgrel=6 -pkgdesc="Python unittest utilities" -url="https://github.com/celery/case/" -arch="noarch" -license="BSD-3-Clause" -depends="python3 py3-six" -makedepends="py3-setuptools" -checkdepends="py3-coverage py3-mock py3-nose" -_pypiprefix="${_pyname%${_pyname#?}}" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/$_pypiprefix/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir/$_pyname-$pkgver" - -replaces="py-case" # Backwards compatibility -provides="py-case=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - python3 setup.py build -} - -check() { - python3 setup.py test -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" -} -sha512sums="ae98a571c282f80c685c42ab1dc578847fe88cf8cd07faff505a8df8e3282a602908a8780ab88b36851e3ee6f3c178405e5c50776fd0f49fcc990087575f2958 case-1.5.3.tar.gz" diff --git a/backports/py3-django-oauth-toolkit/APKBUILD b/backports/py3-django-oauth-toolkit/APKBUILD deleted file mode 100644 index 3dfdc7c..0000000 --- a/backports/py3-django-oauth-toolkit/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Contributor: Celeste -# Maintainer: Celeste -pkgname=py3-django-oauth-toolkit -pkgver=2.3.0 -pkgrel=0 -pkgdesc="OAuth2 Provider for Django" -url="https://django-oauth-toolkit.readthedocs.io/" -arch="noarch" -license="BSD-2-Clause-Views" -depends=" - py3-django - py3-jwcrypto - py3-oauthlib - py3-requests - " -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - " -checkdepends=" - py3-django-rest-framework - py3-pytest-cov - py3-pytest-django - py3-pytest-forked - py3-pytest-mock - py3-pytest-xdist - py3-tz - " -subpackages="$pkgname-pyc" -source="https://github.com/jazzband/django-oauth-toolkit/archive/$pkgver/py3-django-oauth-toolkit-$pkgver.tar.gz" -builddir="$srcdir/django-oauth-toolkit-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - DJANGO_SETTINGS_MODULE=tests.settings \ - .testenv/bin/python3 -m pytest -n auto --forked -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -6e4701210300e3e04f85a38e3461daebed7f5d305e8d11fc60a31a715f43d9fc2eed50cf5ff381e6ce11dca479a7dadfbdfacab37e06d88a674b872a50c1a9d1 py3-django-oauth-toolkit-2.3.0.tar.gz -" diff --git a/backports/py3-jwcrypto/APKBUILD b/backports/py3-jwcrypto/APKBUILD deleted file mode 100644 index fa4fc1e..0000000 --- a/backports/py3-jwcrypto/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Contributor: prspkt -# Maintainer: prspkt -pkgname=py3-jwcrypto -_pkgname=jwcrypto -pkgver=1.5.0 -pkgrel=1 -pkgdesc="Python module implementing JOSE Web standards" -url="https://github.com/latchset/jwcrypto" -arch="noarch" -license="LGPL-3.0-only" -depends="python3 py3-deprecated py3-cryptography" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-pytest" -subpackages="$pkgname-doc $pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir/$_pkgname-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -8cb638203de32c5d63cc567069fc0ccf2195bb9a1f9783b747e7b77d38fb01d9512e82406f925010f70e4b7e73c8d699e0c32c5c89ee71cb99dd594a7e84c47e jwcrypto-1.5.0.tar.gz -" diff --git a/backports/py3-kombu/APKBUILD b/backports/py3-kombu/APKBUILD deleted file mode 100644 index 0b16369..0000000 --- a/backports/py3-kombu/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Contributor: Stefan Wagner -# Maintainer: Drew DeVault -pkgname=py3-kombu -pkgver=5.2.4 -pkgrel=2 -pkgdesc="a message queue abstraction layer" -options="!check" # 3 Redis tests fail -url="https://pypi.org/project/kombu/" -arch="noarch !s390x" # Limited by py3-dill -license="BSD-3-Clause" -depends="py3-amqp py3-vine" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -checkdepends="py3-pyro4 py3-case py3-nose py3-mock py3-tz py3-pytest py3-sqlalchemy py3-fakeredis" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/k/kombu/kombu-$pkgver.tar.gz - fix-requirements.patch - " -builddir="$srcdir/kombu-$pkgver" - -replaces="py-kombu" # Backwards compatibility -provides="py-kombu=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 setup.py test -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -695813bee71d627649e772b45b25494784a6a81bcad92331160705e34d8b2268fa90629983ebcfd04ec23208508d422f1834cc56895532911602d58ec0090a03 kombu-5.2.4.tar.gz -d296eba67b77d6a10176714facc45b3119a3c9dac1868cc281eea7cf3d0a6fceb4584836aea188db87eae3cae0f344a0f399e2fad248706c608ff3b1c28b3139 fix-requirements.patch -" diff --git a/backports/py3-kombu/fix-requirements.patch b/backports/py3-kombu/fix-requirements.patch deleted file mode 100644 index 6c69bf6..0000000 --- a/backports/py3-kombu/fix-requirements.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/requirements/test.txt b/requirements/test.txt -index 9b8ca32..dd360da 100644 ---- a/requirements/test.txt -+++ b/requirements/test.txt -@@ -1,4 +1,4 @@ --pytz>dev -+pytz - pytest~=7.0.1 - pytest-sugar - Pyro4 diff --git a/backports/py3-pycares/APKBUILD b/backports/py3-pycares/APKBUILD deleted file mode 100644 index 71b23e4..0000000 --- a/backports/py3-pycares/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Contributor: Sam Whited -# Maintainer: Sam Whited -pkgname=py3-pycares -_pkgname=pycares -pkgver=4.3.0 -pkgrel=0 -pkgdesc="A library for performing DNS resolutions using c-ares." -url="https://pypi.org/project/pycares/" -arch="all" -license="MIT" -depends="python3 py3-idna py3-cffi" -makedepends="py3-setuptools c-ares-dev python3-dev" -subpackages="$pkgname-doc" -source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir/$_pkgname-$pkgver" -options="!check" # tests not included in source package. - -build() { - export PYCARES_USE_SYSTEM_LIB=1 - python3 setup.py build -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" - install -Dm644 LICENSE README.rst -t "$pkgdir"/usr/share/licenses/$pkgname -} - -sha512sums=" -ffabb9abf3f131a373302a7992af6335bc25013f119dce51731e5e04999948c62c42444adac4427c856b14fbaa481266449a39ff0715c5d8a45517cb22c9e539 pycares-4.3.0.tar.gz -" diff --git a/backports/py3-structlog/APKBUILD b/backports/py3-structlog/APKBUILD deleted file mode 100644 index 898156a..0000000 --- a/backports/py3-structlog/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Maintainer: -pkgname=py3-structlog -pkgver=23.1.0 -pkgrel=1 -pkgdesc="Simple, powerful, and fast logging for Python" -url="https://github.com/hynek/structlog" -arch="noarch" -license="Apache-2.0 OR MIT" -makedepends=" - py3-gpep517 - py3-hatch-fancy-pypi-readme - py3-hatch-vcs - py3-hatchling - py3-wheel - " -checkdepends=" - py3-coverage - py3-freezegun - py3-pretend - py3-pytest - py3-pytest-asyncio - py3-pytest-xdist - py3-rich - py3-simplejson - " -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/hynek/structlog/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir/structlog-$pkgver" - -build() { - SETUPTOOLS_SCM_PRETEND_VERSION=$pkgver \ - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages testenv - testenv/bin/python3 -m installer dist/*.whl - testenv/bin/python3 -m pytest -n4 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -527f5811a3d2365490c55d8e1f1cc0537254d8667bfc56214769bd6aae9f5368a1534536f061dbc06213c32dd9253703f8535323466ddb66032c6c1f776814ac py3-structlog-23.1.0.tar.gz -" diff --git a/backports/py3-vine/APKBUILD b/backports/py3-vine/APKBUILD deleted file mode 100644 index 18dfa9d..0000000 --- a/backports/py3-vine/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-vine -pkgver=5.0.0 -pkgrel=2 -pkgdesc="futures and promises implementation for python" -url="https://github.com/celery/vine" -arch="noarch" -license="BSD-3-Clause" -depends="python3" -makedepends="py3-setuptools" -checkdepends="py3-pytest py3-case py3-nose" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/v/vine/vine-$pkgver.tar.gz" -builddir="$srcdir/vine-$pkgver" - -replaces="py-vine" # Backwards compatibility -provides="py-vine=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - python3 setup.py build -} - -check() { - python3 -m pytest -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" -} - -sha512sums=" -ff8f4b3f675220772ed0523e468eedbaec4aca793877b984e9a215603d1288cc3cc71dfeb152219d22f98de0ac7e9f9fa0cc35c2424ff36044cfc8f28192c159 vine-5.0.0.tar.gz -" From 70e5057247e70a1a53d495fcbf01f7c71026a76e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 8 Dec 2023 03:40:47 +0000 Subject: [PATCH 034/738] Update README.md --- README.md | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index ce0ef3c..ae24788 100644 --- a/README.md +++ b/README.md @@ -19,37 +19,26 @@ Affixed to each repository description is the appropriate link for use in #### Backports ``` -https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.18/backports +https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/backports ``` -Aports from the official Alpine repositories backported from edge to v3.18. +Aports from the official Alpine repositories backported from edge. #### User ``` -https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.18/user +https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/user ``` Aports that have yet to be (or may never be) upstreamed to the official aports. -#### Testing/Community -``` -https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.18/community -https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.18/testing -``` - -Aports that have already been upstreamed are kept here for three reasons: -* Facilitate keeping track of packages that I support -* Upgrades are first deployed here for first batch of testing -* Make packages that are in 'testing' available for stable releases - ## How to use Add security key of the repo-apk repository to your /etc/apk/keys: ```shell cd /etc/apk/keys -wget https://lab.ilot.io/ayakael/repo-apk/-/raw/v3.18/antoine.martin@protonmail.com-5b3109ad.rsa.pub +wget https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub ``` Add repositories that you want to use (see above) to `/etc/apk/repositories`. From 3b9c28c813b742601c88d8a661c34bf8f9c835f8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 29 Dec 2023 11:02:28 -0500 Subject: [PATCH 035/738] user/authentik: upgrade to 2023.10.5 --- user/authentik/APKBUILD | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 23f232d..6c584d6 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=authentik -pkgver=2023.10.4 +pkgver=2023.10.5 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" @@ -32,6 +32,8 @@ depends=" py3-celery py3-certifi py3-cffi + py3-channels + py3-channels_redis py3-charset-normalizer py3-click py3-click-didyoumean @@ -50,9 +52,6 @@ depends=" py3-deprecated py3-dnspython py3-django - py3-django-channels - py3-django-channels-redis - py3-django-drf-spectacular py3-django-filter py3-django-guardian py3-django-model-utils @@ -64,7 +63,8 @@ depends=" py3-docker-py py3-dotenv py3-dumb-init - py3-duo-client + py3-duo_client + py3-drf-spectacular py3-email-validator py3-facebook-sdk py3-flower @@ -236,7 +236,7 @@ package() { } sha512sums=" -26e69786c377b5fb24c733a6d3855f7c05f1821e66935ef1bf24964f50b09967895d5969ccd3d77e51a159879f0a32fbb3731dc28334346afc80675764624f35 authentik-2023.10.4.tar.gz +0517da0969b096dfa18630ed691920b85e26c85bef18f8eed62ff6c47a54f20f5970530d90dc3a73dc5d2d328471f703187a5f5a1c0a93f3b663f1f6d9242487 authentik-2023.10.5.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From 3e15f69ad2ae765974d0c84452ba94cb8b0c5732 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:56:06 -0500 Subject: [PATCH 036/738] gitlab-ci: always pickup artifacts --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 36f5b06..dd8afae 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -36,6 +36,7 @@ lint: - keys/ - logs/ expire_in: 7 days + when: always only: - merge_requests @@ -56,6 +57,7 @@ lint: - keys/ - logs/ expire_in: 7 days + when: always only: - merge_requests From 655a6a0d0726c34bfc978a67e3acef9d0c35d859 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:56:22 -0500 Subject: [PATCH 037/738] backports/py3-django-debug-toolbar: new aport --- backports/py3-django-debug-toolbar/APKBUILD | 38 +++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 backports/py3-django-debug-toolbar/APKBUILD diff --git a/backports/py3-django-debug-toolbar/APKBUILD b/backports/py3-django-debug-toolbar/APKBUILD new file mode 100644 index 0000000..3ffd5cb --- /dev/null +++ b/backports/py3-django-debug-toolbar/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Leonardo Arena +# Maintainer: +pkgname=py3-django-debug-toolbar +_pkgname=django-debug-toolbar +pkgver=4.2 +pkgrel=0 +pkgdesc="Configurable set of panels that display various debug information about the current request/response" +options="!check" # Requires unpackaged Selenium python3 module +url="https://github.com/jazzband/django-debug-toolbar" +arch="noarch" +license="BSD-3-Clause" +depends="py3-django py3-sqlparse" +makedepends=" + py3-gpep517 + py3-hatchling + " +# options="!check" #no testsuite +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/jazzband/$_pkgname/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +replaces="py-django-debug-toolbar" # Backwards compatibility +provides="py-django-debug-toolbar=$pkgver-r$pkgrel" # Backwards compatibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +5731fc7a1ec5209a7bd44f2e31d6c3ebde8ff1e24265878c1773610e69f2469f595b8a9641d345dcc6169c5f131d132006456cdc9aebd89cc4ec4f15a0a25341 py3-django-debug-toolbar-4.2.tar.gz +" From b460c9feaa12826305bdc51f2194ba6efa619069 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:56:34 -0500 Subject: [PATCH 038/738] backports/py3-w3lib: new aport --- backports/py3-w3lib/APKBUILD | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 backports/py3-w3lib/APKBUILD diff --git a/backports/py3-w3lib/APKBUILD b/backports/py3-w3lib/APKBUILD new file mode 100644 index 0000000..afd9e0e --- /dev/null +++ b/backports/py3-w3lib/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Fabian Affolter +# Maintainer: Fabian Affolter +pkgname=py3-w3lib +_pkgname=w3lib +pkgver=2.1.2 +pkgrel=0 +pkgdesc="A library of web-related functions" +url="https://github.com/scrapy/w3lib" +arch="noarch" +license="BSD-3-Clause" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" +builddir="$srcdir/$_pkgname-$pkgver" + +replaces="py-w3lib" # Backwards compatibility +provides="py-w3lib=$pkgver-r$pkgrel" # Backwards compatibility + +build() { + python3 setup.py build +} + +check() { + pytest -v +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +cfff2520cab24b84c93223125de3fb813e4d40d23a022f7fc34196c3033adb5dfc01358d62566dcc4b763d40b271e1428eba0250ba997228d07f35cd3721e37e w3lib-2.1.2.tar.gz +" From 8247c09ac06310a389d72547dd0d307152547023 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:58:40 -0500 Subject: [PATCH 039/738] user/py3-crispy-bootstrap4: new aport --- user/py3-crispy-bootstrap4/APKBUILD | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-crispy-bootstrap4/APKBUILD diff --git a/user/py3-crispy-bootstrap4/APKBUILD b/user/py3-crispy-bootstrap4/APKBUILD new file mode 100644 index 0000000..1fdbe40 --- /dev/null +++ b/user/py3-crispy-bootstrap4/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-crispy-bootstrap4 +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=crispy-bootstrap4 +pkgver=2023.1 +pkgrel=0 +pkgdesc="Bootstrap4 template pack for django-crispy-forms" +url="https://pypi.org/project/crispy-bootstrap4/" +arch="noarch" +license="MIT" +depends="python3 py3-django-crispy-forms" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/c/crispy-bootstrap4/crispy-bootstrap4-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +ad54a94280110804beee3c6fa06aa97648d6496d3b1d7819d145d3dafbae7f200610f610ffbd3449ed244e799be953a754c26622b50b2266d9f2d54d4a86d496 py3-crispy-bootstrap4-2023.1.tar.gz +" From 74c7c8d8788407bf329679e3a9d9ab56a889ae83 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:58:44 -0500 Subject: [PATCH 040/738] user/py3-django-annoying: new aport --- user/py3-django-annoying/APKBUILD | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-django-annoying/APKBUILD diff --git a/user/py3-django-annoying/APKBUILD b/user/py3-django-annoying/APKBUILD new file mode 100644 index 0000000..d380f43 --- /dev/null +++ b/user/py3-django-annoying/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-annoying +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-annoying +pkgver=0.10.6 +pkgrel=0 +pkgdesc="This is a django application that tries to eliminate annoying things in the Django framework." +url="https://pypi.python.org/project/django-annoying" +arch="noarch" +license="BSD" +depends="py3-django py3-six" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-annoying/django-annoying-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +7b676c1e5aff6b19ae5bb1ea279cc5e46e28b7adc0afe8e9fc80e72da02378e5264db854e9c48cdc243440193760691d5003c3400a9955bdbfb8d7c7325774ed py3-django-annoying-0.10.6.tar.gz +" From 2d5403cea109cb0629687f4758d831301f5b480b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:58:47 -0500 Subject: [PATCH 041/738] user/py3-django-auth-ldap: new aport --- user/py3-django-auth-ldap/APKBUILD | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-django-auth-ldap/APKBUILD diff --git a/user/py3-django-auth-ldap/APKBUILD b/user/py3-django-auth-ldap/APKBUILD new file mode 100644 index 0000000..d6f14df --- /dev/null +++ b/user/py3-django-auth-ldap/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-auth-ldap +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-auth-ldap +pkgver=4.6.0 +pkgrel=0 +pkgdesc="Django LDAP authentication backend" +url="https://pypi.python.org/project/django-auth-ldap" +arch="noarch" +license="BSD" +depends="py3-django py3-ldap" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-auth-ldap/django-auth-ldap-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +fc3945fb9cece694b63661c8565d877bdc81e012e9b4e9a8f1840bd83f6effb525e36f40e5dd5018b43d2c7c72fcdd25a5c61bf35e6f0d05e70e830f69228498 py3-django-auth-ldap-4.6.0.tar.gz +" From b7776f33fa508e8c2bfa64cfbe9f3d7b734aa47a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:58:50 -0500 Subject: [PATCH 042/738] user/py3-django-autocomplete-light: new aport --- user/py3-django-autocomplete-light/APKBUILD | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 user/py3-django-autocomplete-light/APKBUILD diff --git a/user/py3-django-autocomplete-light/APKBUILD b/user/py3-django-autocomplete-light/APKBUILD new file mode 100644 index 0000000..cf8f19f --- /dev/null +++ b/user/py3-django-autocomplete-light/APKBUILD @@ -0,0 +1,33 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-autocomplete-light +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-autocomplete-light +pkgver=3.9.7 +pkgrel=0 +pkgdesc="Fresh autocompletes for Django" +url="https://pypi.python.org/project/django-autocomplete-light" +arch="noarch" +license="MIT" +depends="python3" +depends="py3-django py3-six" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-autocomplete-light/django-autocomplete-light-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +c3ddb6870bce2b9bd6912c24bf843945af2b9c6a9477d1e45d4a7c4a9e16dca10e68a4c741cd2448c1c5eb73278d7d963d839769740b8dc61a21ec9fdbecc45a py3-django-autocomplete-light-3.9.7.tar.gz +" From 0c66a3365ee345df12a1da4d16c21910da51dd13 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:58:54 -0500 Subject: [PATCH 043/738] user/py3-django-cleanup: new aport --- user/py3-django-cleanup/APKBUILD | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 user/py3-django-cleanup/APKBUILD diff --git a/user/py3-django-cleanup/APKBUILD b/user/py3-django-cleanup/APKBUILD new file mode 100644 index 0000000..7d17c8d --- /dev/null +++ b/user/py3-django-cleanup/APKBUILD @@ -0,0 +1,31 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-cleanup +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-cleanup +pkgver=8.0.0 +pkgrel=0 +pkgdesc="Deletes old files." +url="https://pypi.python.org/project/django-cleanup" +arch="noarch" +license="MIT" +depends="py3-django" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-cleanup/django-cleanup-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} +sha512sums=" +c11ae07f47c1522afabf477a96e14efee2c86dfb139977bd60e6b293da12181979f1a35295d6bb4822fc0dbfcc2780253faa72ce291f1fdbb02436291c7866db py3-django-cleanup-8.0.0.tar.gz +" From 32b826a5653fd0bfa1003b4f5edafe88508a6513 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:58:58 -0500 Subject: [PATCH 044/738] user/py3-django-hcaptcha: new aport --- user/py3-django-hcaptcha/APKBUILD | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 user/py3-django-hcaptcha/APKBUILD diff --git a/user/py3-django-hcaptcha/APKBUILD b/user/py3-django-hcaptcha/APKBUILD new file mode 100644 index 0000000..63f063c --- /dev/null +++ b/user/py3-django-hcaptcha/APKBUILD @@ -0,0 +1,31 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-hcaptcha +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-hCaptcha +pkgver=0.2.0 +pkgrel=0 +pkgdesc="Django hCaptcha provides a simple way to protect your django forms using hCaptcha" +url="https://pypi.python.org/project/django-hCaptcha" +arch="noarch" +license="BSD-3-Clause" +depends="py3-django" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-hCaptcha/django-hCaptcha-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +2935b3e1ec2f76cf7cc872864febbb35bdfdd4e8428d6d2dc716f63c75764ede32d538971d8b7b262c49806527690d0664a4205568cc3d8370d8228d00e29dd7 py3-django-hcaptcha-0.2.0.tar.gz +" From c4098d2bdba43d5d6b36a3cc30e002a0e15acfae Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:06 -0500 Subject: [PATCH 045/738] user/py3-django-js-reverse: new aport --- user/py3-django-js-reverse/APKBUILD | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 user/py3-django-js-reverse/APKBUILD diff --git a/user/py3-django-js-reverse/APKBUILD b/user/py3-django-js-reverse/APKBUILD new file mode 100644 index 0000000..07007fe --- /dev/null +++ b/user/py3-django-js-reverse/APKBUILD @@ -0,0 +1,37 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-js-reverse +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-js-reverse +pkgver=0.10.2 +pkgrel=0 +pkgdesc="Javascript url handling for Django that doesn't hurt." +url="https://pypi.python.org/project/django-js-reverse" +arch="noarch" +license="MIT" +depends="py3-django" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-js-reverse/django-js-reverse-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +prepare() { + default_prepare + touch $builddir/CHANGELOG.rst # expects this file for build +} + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +12ce6754d20129820b17365e92dc1fd28d17f6f766fa9e4913b38ff08bbad3dc13dccc07a1c33902f327f81aa3eb37c32fce86218b9b4729de8d16f284d9b1fd py3-django-js-reverse-0.10.2.tar.gz +" From 5bc511682a236ea09b39ac7032e7b959139184f1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:09 -0500 Subject: [PATCH 046/738] user/py3-django-scopes: new aport --- user/py3-django-scopes/APKBUILD | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-django-scopes/APKBUILD diff --git a/user/py3-django-scopes/APKBUILD b/user/py3-django-scopes/APKBUILD new file mode 100644 index 0000000..2b670f7 --- /dev/null +++ b/user/py3-django-scopes/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-scopes +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-scopes +pkgver=2.0.0 +pkgrel=0 +pkgdesc="Scope querys in multi-tenant django applications" +url="https://pypi.python.org/project/django-scopes" +arch="noarch" +license="Apache-2.0" +depends="py3-django" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-scopes/django-scopes-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +ff9b2337c84ba076209958effb326fd5827547acd86351cc7ac9b15220d0c689c153776a07ae9c0d15f3fba034430023df25197d98a095f005f7edeab565c08f py3-django-scopes-2.0.0.tar.gz +" From b11a2325ae581a56ab452f2c745c378ba85e528e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:13 -0500 Subject: [PATCH 047/738] user/py3-django-webpack-loader: new aport --- user/py3-django-webpack-loader/APKBUILD | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-django-webpack-loader/APKBUILD diff --git a/user/py3-django-webpack-loader/APKBUILD b/user/py3-django-webpack-loader/APKBUILD new file mode 100644 index 0000000..a85f7c8 --- /dev/null +++ b/user/py3-django-webpack-loader/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-webpack-loader +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-webpack-loader +pkgver=3.0.0 +pkgrel=0 +pkgdesc="Transparently use webpack with django" +url="https://pypi.python.org/project/django-webpack-loader" +arch="noarch" +license="MIT" +depends="py3-django" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-webpack-loader/django-webpack-loader-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +1e081261859ad7f51563856c81535f8e052004b856e988d3d8ec57c45ee7643324cc7bae6558f8391fa90038eef1765dde622b337821b05f04fb30d7e3d93a07 py3-django-webpack-loader-3.0.0.tar.gz +" From 2ea2deb1ca6118306831afc04e574d1286bdc3d8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:16 -0500 Subject: [PATCH 048/738] user/py3-drf-writable-nested: new aport --- user/py3-drf-writable-nested/APKBUILD | 33 +++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 user/py3-drf-writable-nested/APKBUILD diff --git a/user/py3-drf-writable-nested/APKBUILD b/user/py3-drf-writable-nested/APKBUILD new file mode 100644 index 0000000..3ecfd01 --- /dev/null +++ b/user/py3-drf-writable-nested/APKBUILD @@ -0,0 +1,33 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-drf-writable-nested +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=drf-writable-nested +pkgver=0.7.0 +pkgrel=0 +pkgdesc="Writable nested helpers for django-rest-framework's serializers" +url="https://pypi.python.org/project/drf-writable-nested" +arch="noarch" +license="MIT" +depends="py3-django-rest-framework" +checkdepends="py3-pytest py3-pytest-cov py3-pytest-django" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/beda-software/drf-writable-nested/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + + +sha512sums=" +674e2206a8dad2f61f6eed9bbf137593bacbceb4789c5e46e0e5a965f172daac76878e13d3f1492b2a2d8bc97d310b0625b1fd65de19f92d7f71153e9f5c3089 py3-drf-writable-nested-0.7.0.tar.gz +" From 1a271f6c8e7c866d19091c6018ef3f58c720f911 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:20 -0500 Subject: [PATCH 049/738] user/py3-extruct: new aport --- user/py3-extruct/APKBUILD | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 user/py3-extruct/APKBUILD diff --git a/user/py3-extruct/APKBUILD b/user/py3-extruct/APKBUILD new file mode 100644 index 0000000..92e5b07 --- /dev/null +++ b/user/py3-extruct/APKBUILD @@ -0,0 +1,41 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-extruct +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=extruct +pkgver=0.16.0 +pkgrel=0 +pkgdesc="Extract embedded metadata from HTML markup" +url="https://pypi.python.org/project/extruct" +license="BSD-3-Clause" +arch="noarch" +depends=" + py3-lxml + py3-pyrdfa3 + py3-mf2py + py3-w3lib + py3-html-text + py3-six + py3-jstyleson + py3-requests + " +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/e/extruct/extruct-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +da645863d3b421418871cdbbf2b970458c124c9f078aa013b5ef6147ddbebc3ef39dfb7b668dbb35aac8b47f6417525d16a40d0d5cb7e56aa0e4edf779a02a24 py3-extruct-0.16.0.tar.gz +" From 3b9d7bd5babc4e2b315d556f04a2e05fbb6c9d45 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:24 -0500 Subject: [PATCH 050/738] user/py3-html-text: new aport --- user/py3-html-text/APKBUILD | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 user/py3-html-text/APKBUILD diff --git a/user/py3-html-text/APKBUILD b/user/py3-html-text/APKBUILD new file mode 100644 index 0000000..cc4a1f7 --- /dev/null +++ b/user/py3-html-text/APKBUILD @@ -0,0 +1,31 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-html-text +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=html_text +pkgver=0.5.2 +pkgrel=0 +pkgdesc="Extract text from HTML" +url="https://pypi.python.org/project/html-rext" +arch="noarch" +license="MIT" +depends="py3-lxml" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/h/html_text/html_text-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} +sha512sums=" +95a4f216329838850fbb2d72a07e953bd115a4e8a8b919dc3cc431d4c1781f2287a6cdf5c7d895caaff18c0b29cd2842bf42852b41d46d009062f94523f1bcde py3-html-text-0.5.2.tar.gz +" From 31626d57ddce3f410ef652ced673868bcbe696d9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:27 -0500 Subject: [PATCH 051/738] user/py3-jstyleson: new aport --- user/py3-jstyleson/APKBUILD | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 user/py3-jstyleson/APKBUILD diff --git a/user/py3-jstyleson/APKBUILD b/user/py3-jstyleson/APKBUILD new file mode 100644 index 0000000..bdd6573 --- /dev/null +++ b/user/py3-jstyleson/APKBUILD @@ -0,0 +1,31 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-jstyleson +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=jstyleson +pkgver=0.0.2 +pkgrel=0 +pkgdesc="Library to parse JSON with js-style comments." +url="https://pypi.python.org/project/jstylejson" +arch="noarch" +license="MIT" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/j/jstyleson/jstyleson-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +99285536538f3cd70e2cee505826f335e207b577f361f5996589578eef06b8b29fd25fa254c150ef40618cca19554fe329750c123be0a9abf8d19cee47369a54 py3-jstyleson-0.0.2.tar.gz +" From f8391b17c1694fdc044ea179b202fde14e77503e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:31 -0500 Subject: [PATCH 052/738] user/py3-microdata: new aport --- user/py3-microdata/APKBUILD | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-microdata/APKBUILD diff --git a/user/py3-microdata/APKBUILD b/user/py3-microdata/APKBUILD new file mode 100644 index 0000000..6af9534 --- /dev/null +++ b/user/py3-microdata/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-microdata +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=microdata +pkgver=0.8.0 +pkgrel=0 +pkgdesc="html5lib extension for parsing microdata" +url="https://pypi.python.org/project/microdata" +license="CC0-1.0" +arch="noarch" +depends="py3-html5lib" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/m/microdata/microdata-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +85ce750f11960e4bcae1cd7f7babbb43e47ad2e0133cc66fb8abb153b1471296b11dc642bee91059f89b45da363fcdd10cfe3770b43d3e7d4d82ff10ab700743 py3-microdata-0.8.0.tar.gz +" From 8f3a9b0d01010291f174620de6abe3491b73817b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:34 -0500 Subject: [PATCH 053/738] user/py3-pyppeteer: new aport --- user/py3-pyppeteer/APKBUILD | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 user/py3-pyppeteer/APKBUILD diff --git a/user/py3-pyppeteer/APKBUILD b/user/py3-pyppeteer/APKBUILD new file mode 100644 index 0000000..c477207 --- /dev/null +++ b/user/py3-pyppeteer/APKBUILD @@ -0,0 +1,40 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=py3-pyppeteer +_pkgreal=pyppeteer +pkgver=1.0.2 +pkgrel=0 +pkgdesc="Headless chrome/chromium automation library (unofficial port of puppeteer)" +url="https://pypi.python.org/project/pyppeteer" +arch="noarch" +license="MIT" +depends=" + chromium + py3-appdirs + py3-certifi + py3-importlib-metadata + py3-pyee + py3-tqdm + py3-urllib3 + py3-websockets + " +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pyppeteer/pyppeteer-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + dist/*.whl +} + +sha512sums=" +a73d00fa1c94172891d44411614aa16f517aa5babb4d7cb220cac8c4135a78c6f25463c768dae37c2186df658d8c185cb2ac5cc2dc943d24b3b212ccc037a532 py3-pyppeteer-1.0.2.tar.gz +" From 61b2e414b4f0f5b8a46236f01d9fb3180d9d56c5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:38 -0500 Subject: [PATCH 054/738] user/py3-pyrdfa3: new aport --- user/py3-pyrdfa3/APKBUILD | 36 ++++++++++++++++++++++++++++++++ user/py3-pyrdfa3/fix-build.patch | 15 +++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 user/py3-pyrdfa3/APKBUILD create mode 100644 user/py3-pyrdfa3/fix-build.patch diff --git a/user/py3-pyrdfa3/APKBUILD b/user/py3-pyrdfa3/APKBUILD new file mode 100644 index 0000000..377b31d --- /dev/null +++ b/user/py3-pyrdfa3/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-pyrdfa3 +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=pyRdfa3 +pkgver=3.5.3 +pkgrel=0 +pkgdesc="pyRdfa Libray" +url="https://pypi.python.org/project/pyrdfa3" +license="W3C-20150513" +arch="noarch" +depends="py3-rdflib py3-html5lib py3-isodate" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source=" + $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pyRdfa3/pyRdfa3-$pkgver.tar.gz + fix-build.patch + " +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +98e931a1af7edcfe80f35f3a6b50b0afa8782a3bdbbee6bb609f7e474099273871c9927fcdb3a9c59c8feff5756ddd6bfac3a900bc536f22ce247c7900769b01 py3-pyrdfa3-3.5.3.tar.gz +62d5c95c69840884e8bf0b8c0d0c30226f96b5196285317b84a1277d4fcdb79ada4a2f7c7ce3b4bcaf8dbeeb0438b580ae08b2798d70d3f46d76e135890d7a0f fix-build.patch +" diff --git a/user/py3-pyrdfa3/fix-build.patch b/user/py3-pyrdfa3/fix-build.patch new file mode 100644 index 0000000..640808e --- /dev/null +++ b/user/py3-pyrdfa3/fix-build.patch @@ -0,0 +1,15 @@ +diff --git a/setup.py.orig b/setup.py +index 1b004e4..bb7da12 100644 +--- a/setup.py.orig ++++ b/setup.py +@@ -29,8 +29,8 @@ setup(name="pyRdfa3", + 'rdfa1.1 = pyRdfa.rdflibparsers:RDFaParser', + 'application/svg+xml = pyRdfa.rdflibparsers:RDFaParser', + 'application/xhtml+xml = pyRdfa.rdflibparsers:RDFaParser', +- 'hturtle = pyRdfa.rdflibparsers:HTurtleParser' +- 'html = pyRdfa.rdflibparsers:StructuredDataParser' ++ 'hturtle = pyRdfa.rdflibparsers:HTurtleParser', ++ 'html = pyRdfa.rdflibparsers:StructuredDataParser', + 'html/text = pyRdfa.rdflibparsers:StructuredDataParser' + ], + } From 7223c02683e170baf926a0dc567de88f956a2ddd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:41 -0500 Subject: [PATCH 055/738] user/py3-pytube: new aport --- user/py3-pytube/APKBUILD | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-pytube/APKBUILD diff --git a/user/py3-pytube/APKBUILD b/user/py3-pytube/APKBUILD new file mode 100644 index 0000000..80825f9 --- /dev/null +++ b/user/py3-pytube/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-pytube +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=pytube +pkgver=15.0.0 +pkgrel=0 +pkgdesc="Python 3 library for downloading YouTube Videos." +url="https://pypi.python.org/project/pytube" +arch="noarch" +license="Unlicense" +depends="python3" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pytube/pytube-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +68174a3392e5f2ff3059dc1f301783b1ce0a0334044b9e96b6066052066b3c3cee93bfc87449d10589795b3e43055cf6d629f1cac21bfc9ea2c4249b5f264c26 py3-pytube-15.0.0.tar.gz +" From 7083e622eb8cf6e385b91e897287c0ea70863e9a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:44 -0500 Subject: [PATCH 056/738] user/py3-pytest-factoryboy: new aport --- user/py3-pytest-factoryboy/APKBUILD | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-pytest-factoryboy/APKBUILD diff --git a/user/py3-pytest-factoryboy/APKBUILD b/user/py3-pytest-factoryboy/APKBUILD new file mode 100644 index 0000000..0f9370f --- /dev/null +++ b/user/py3-pytest-factoryboy/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-pytest-factoryboy +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=pytest_factoryboy +pkgver=2.6.0 +pkgrel=0 +pkgdesc="Factory Boy support for pytest." +url="https://pypi.python.org/project/pytest-factoryboy" +arch="noarch" +license="MIT" +depends="py3-pytest py3-inflection py3-factory-boy py3-typing-extensions" +checkdepends="py3-tox py3-coverage py3-mypy" +makedepends="py3-setuptools py3-gpep517 py3-wheel py3-poetry-core" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pytest_factoryboy/pytest_factoryboy-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +083ad71de9d61ca29e09b7f1c243f36a75716defbc9639c03719ef6eedf73def6fe5803b50de91bf3d5c5892ff1c082dc6cc960fa4e8b6e9a616bbfac871e4ef py3-pytest-factoryboy-2.6.0.tar.gz +" From 0ca7adc3a81f7947cbae7d3ff8e5547eaf601d27 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:49 -0500 Subject: [PATCH 057/738] user/py3-recipe-scrapers: new aport --- user/py3-recipe-scrapers/APKBUILD | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-recipe-scrapers/APKBUILD diff --git a/user/py3-recipe-scrapers/APKBUILD b/user/py3-recipe-scrapers/APKBUILD new file mode 100644 index 0000000..8819f6f --- /dev/null +++ b/user/py3-recipe-scrapers/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-recipe-scrapers +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=recipe_scrapers +pkgver=14.53.0 +pkgrel=0 +pkgdesc="Python package, scraping recipes from all over the internet" +url="https://pypi.python.org/project/recipe-scrapers" +arch="noarch" +license="MIT" +depends="py3-beautifulsoup4 py3-extruct py3-isodate py3-requests" +checkdepends="python3-dev" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/r/recipe_scrapers/recipe_scrapers-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +5a8f7ac802c193c12ce85000fbc83d49bd82080a31e5bb0e9d9de51a8f5053d4e98c69f927b9d518846131151ca7857ce3880c568dc80c14a21f621ee6d69f24 py3-recipe-scrapers-14.53.0.tar.gz +" From 261bedbaac58046fe651b8134b65f38fe03a91ee Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:52 -0500 Subject: [PATCH 058/738] user/py3-webdavclient3: new aport --- user/py3-webdavclient3/APKBUILD | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 user/py3-webdavclient3/APKBUILD diff --git a/user/py3-webdavclient3/APKBUILD b/user/py3-webdavclient3/APKBUILD new file mode 100644 index 0000000..798cc69 --- /dev/null +++ b/user/py3-webdavclient3/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-webdavclient3 +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=webdavclient3 +pkgver=3.14.6 +pkgrel=0 +pkgdesc="WebDAV client" +url="https://pypi.python.org/project/webdavclient3" +arch="noarch" +license="MIT" +depends="py3-requests py3-lxml py3-dateutil" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/w/webdavclient3/webdavclient3-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +8561fc5fbfd4b0a5e65e8291ee5994aa941ceb586386a14de9f80cf4e3c12be88207c90b6fa991fbd690291019e45d2937e8a4c8fd19891d53d68de430ef9d9e py3-webdavclient3-3.14.6.tar.gz +" From ae18f93da15835722ceea650a60ff6d56ec1989d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 20:59:56 -0500 Subject: [PATCH 059/738] user/tandoor-recipes: new aport --- user/tandoor-recipes/APKBUILD | 134 ++++++++++++++++++ user/tandoor-recipes/allauth-0.58-fix.patch | 12 ++ user/tandoor-recipes/recipes-manage.sh | 11 ++ user/tandoor-recipes/recipes.nginx | 29 ++++ user/tandoor-recipes/recipes.openrc | 36 +++++ .../tandoor-recipes.post-install | 41 ++++++ .../tandoor-recipes.post-upgrade | 1 + .../tandoor-recipes.pre-install | 25 ++++ 8 files changed, 289 insertions(+) create mode 100644 user/tandoor-recipes/APKBUILD create mode 100644 user/tandoor-recipes/allauth-0.58-fix.patch create mode 100644 user/tandoor-recipes/recipes-manage.sh create mode 100644 user/tandoor-recipes/recipes.nginx create mode 100644 user/tandoor-recipes/recipes.openrc create mode 100755 user/tandoor-recipes/tandoor-recipes.post-install create mode 120000 user/tandoor-recipes/tandoor-recipes.post-upgrade create mode 100644 user/tandoor-recipes/tandoor-recipes.pre-install diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD new file mode 100644 index 0000000..9786b85 --- /dev/null +++ b/user/tandoor-recipes/APKBUILD @@ -0,0 +1,134 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=tandoor-recipes +pkgver=1.5.10 +pkgrel=0 +pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." +arch="noarch" +url="https://github.com/TandoorRecipes/recipes" +license="AGPL-3.0-only" +depends=" + postgresql + postgresql-contrib + procps-ng + pwgen + py3-beautifulsoup4 + py3-bleach + py3-boto3 + py3-crispy-bootstrap4 + py3-cryptography + py3-django + py3-django-allauth + py3-django-annoying + py3-django-auth-ldap + py3-django-autocomplete-light + py3-django-cleanup + py3-django-cors-headers + py3-django-crispy-forms + py3-django-debug-toolbar + py3-django-hcaptcha + py3-django-js-reverse + py3-django-oauth-toolkit + py3-django-prometheus + py3-django-rest-framework + py3-django-scopes + py3-django-storages + py3-django-tables2 + py3-django-treebeard + py3-django-webpack-loader + py3-dotenv + py3-drf-writable-nested + py3-gunicorn + py3-icalendar + py3-jinja2 + py3-ldap + py3-lxml + py3-markdown + py3-microdata + py3-pillow + py3-psycopg2 + py3-pyppeteer + py3-pytest + py3-pytest-django + py3-pytest-factoryboy + py3-pytube + py3-recipe-scrapers + py3-requests + py3-six + py3-uritemplate + py3-validators~=0.20 + py3-webdavclient3 + py3-whitenoise + py3-yaml + nginx + xsel +" +makedepends="nodejs postgresql postgresql-libs py3-virtualenv nginx yarn npm" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/TandoorRecipes/recipes/archive/refs/tags/$pkgver.tar.gz + recipes.openrc + recipes.nginx + recipes-manage.sh + allauth-0.58-fix.patch + " +builddir="$srcdir"/recipes-$pkgver +install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" +subpackages="$pkgname-openrc" +pkgusers="recipes" +pkggroups="recipes" + +build() { + cd ./vue + msg "Building nodejs libraries" + yarn --cache-folder "$srcdir"/yarn-cache --ignore-engines install + yarn --cache-folder "$srcdir"/yarn-cache build + + cd ../ + msg "Building static files" + ./manage.py collectstatic --no-input + ./manage.py collectstatic_js_reverse + echo "TANDOOR_VERSION = '$pkgver'" > cookbook/version_info.py + echo "TANDOOR_REF = '$pkgver'" >> cookbook/version_info.py + echo "VERSION_INFO = [{'name': 'Tandoor ', 'version': '$pkgver', 'website': 'https://github.com/TandoorRecipes/recipes', 'commit_link': 'https://github.com/TandoorRecipes/recipes/releases/tag/$pkgver', 'ref': '$pkgver', 'branch': 'master', 'tag': '$pkgver'}]" >> cookbook/version_info.py +} + +package() { + + # install files + mkdir -p "$pkgdir"/usr/share/webapps/recipes + cp -r manage.py vue recipes staticfiles cookbook "$pkgdir"/usr/share/webapps/recipes + ln -s /etc/tandoor/recipes.conf "$pkgdir"/usr/share/webapps/recipes/.env + rm -rf \ + "$pkgdir"/usr/share/webapps/recipes/vue/node_modules/.cache \ + "$pkgdir"/usr/share/webapps/recipes/vue/node_modules/clipboardy/fallbacks + + # openrc and configs + install -Dm755 "$srcdir"/recipes.openrc \ + "$pkgdir"/etc/init.d/recipes + install -Dm755 "$srcdir"/recipes.nginx \ + "$pkgdir"/etc/nginx/http.d/recipes.conf + install -Dm755 "$builddir"/nginx/conf.d/errorpages/http502.html \ + "$pkgdir"/etc/nginx/http.d/errorpages/http502.html + install -Dm640 "$builddir"/.env.template \ + "$pkgdir"/etc/tandoor/recipes.conf + chown root:www-data "$pkgdir"/etc/tandoor/recipes.conf + sed -i 's|SECRET_KEY=|SECRET_KEY=@@SECRET_KEY@@|' "$pkgdir"/etc/tandoor/recipes.conf + sed -i 's|POSTGRES_HOST.*|POSTGRES_HOST=127.0.0.1|' "$pkgdir"/etc/tandoor/recipes.conf + sed -i 's|POSTGRES_USER.*|POSTGRES_USER=recipes|' "$pkgdir"/etc/tandoor/recipes.conf + sed -i 's|POSTGRES_DB.*|POSTGRES_DB=recipes|' "$pkgdir"/etc/tandoor/recipes.conf + + # Install wrapper script to /usr/bin. + install -m755 -D "$srcdir"/recipes-manage.sh \ + "$pkgdir"/usr/bin/recipes-manage + + # ln + ln -s /var/lib/recipes/media "$pkgdir"/usr/share/webapps/recipes/mediafiles +} + +sha512sums=" +ae2569bc7e81ad509bafe7c605cbc5628037f03bc9dec3280df23f21a637de0c4643332520e6486b77df9e97cb21012abac2e82e1e1781d47fffed9253133180 tandoor-recipes-1.5.10.tar.gz +6d53affec525207a86d8b26c6e5ac7a16586756520e5605f7fe1ea82212a93d051237da45893c8b4002a6663e7538d8e78ab7fc392dc420ba7e31e0cb11d3cae recipes.openrc +1ae29eb9342ad697d0e1e0cc600cd63c4ea6ce3f92b2bdc26602a95015b9ee91f1d40df65e92cad53b980fa3c15989ca9874bd0df62d6c7030ea97d396e37d2c recipes.nginx +521bc8c71bbf900bb37ef2db4d79ab16c3a068d74de57d8cfbe82feffab6041c58f94ddbb57ac1f8feb68535dd32679b79169454abfc4fa04548b025282ca507 recipes-manage.sh +a15d71798185aa4cb6da7d2f3d1610b53d6d876750d1706793c59582db1d930fd62295e02c68628b1324e379db7d6c6cd8a63fb905d2b3739aa81fc57a304368 allauth-0.58-fix.patch +" diff --git a/user/tandoor-recipes/allauth-0.58-fix.patch b/user/tandoor-recipes/allauth-0.58-fix.patch new file mode 100644 index 0000000..91406ed --- /dev/null +++ b/user/tandoor-recipes/allauth-0.58-fix.patch @@ -0,0 +1,12 @@ +diff --git a/recipes/settings.py.orig b/recipes/settings.py +index 8673962..6a6490b 100644 +--- a/recipes/settings.py.orig ++++ b/recipes/settings.py +@@ -218,6 +218,7 @@ MIDDLEWARE = [ + 'django.middleware.locale.LocaleMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'cookbook.helper.scope_middleware.ScopeMiddleware', ++ 'allauth.account.middleware.AccountMiddleware', + ] + + if DEBUG_TOOLBAR: diff --git a/user/tandoor-recipes/recipes-manage.sh b/user/tandoor-recipes/recipes-manage.sh new file mode 100644 index 0000000..7db05b7 --- /dev/null +++ b/user/tandoor-recipes/recipes-manage.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/recipes' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'recipes' ]; then + exec su recipes -c '"$0" "$@"' -- ./manage.py "$@" +else + exec ./manage.py "$@" +fi diff --git a/user/tandoor-recipes/recipes.nginx b/user/tandoor-recipes/recipes.nginx new file mode 100644 index 0000000..c3c24f0 --- /dev/null +++ b/user/tandoor-recipes/recipes.nginx @@ -0,0 +1,29 @@ +server { + listen 80; + server_name localhost; + + client_max_body_size 128M; + + # serve media files + location /static/ { + alias /usr/share/webapps/recipes/staticfiles/; + } + + location /media/ { + alias /var/lib/recipes/media/; + } + + location / { + proxy_set_header Host $http_host; + proxy_pass http://unix:/run/recipes/recipes.sock; + proxy_set_header X-Forwarded-Proto $scheme; + + error_page 502 /errors/http502.html; + } + + location /errors/ { + alias /etc/nginx/http.d/errorpages/; + internal; + } +} + diff --git a/user/tandoor-recipes/recipes.openrc b/user/tandoor-recipes/recipes.openrc new file mode 100644 index 0000000..770f082 --- /dev/null +++ b/user/tandoor-recipes/recipes.openrc @@ -0,0 +1,36 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/recipes/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/recipes" +command="/usr/bin/gunicorn" +command_args=" + --error-logfile /var/log/recipes/gunicorn_err.log + --log-level debug + --capture-output + --bind unix:/run/recipes/recipes.sock + recipes.wsgi:application + " +command_user="recipes" +command_group="www-data" +start_stop_daemon_args="" +command_background="yes" + +depend() { + need postgresql + need nginx +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/recipes \ + /run/recipes \ + /var/lib/recipes/media +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/tandoor-recipes/tandoor-recipes.post-install b/user/tandoor-recipes/tandoor-recipes.post-install new file mode 100755 index 0000000..778ff75 --- /dev/null +++ b/user/tandoor-recipes/tandoor-recipes.post-install @@ -0,0 +1,41 @@ +#!/bin/sh +set -eu + +config_file='/etc/tandoor/recipes.conf' + +if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(pwgen -s 50 1)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Recipes upgrade run: + * + * recipes-manage migrate + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in $config_file + * + * 2. Create database for Recipes: + * + * psql -c "CREATE ROLE recipes PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE recipes OWNER recipes ENCODING 'UTF-8';" + * psql -c "CREATE EXTENSION pg_trgm;" + * + * 3. User optimizations: + * + * psql -c "ALTER ROLE recipes SET client_encoding TO 'utf8';" + * psql -c "ALTER ROLE recipes SET default_transaction_isolation TO 'read committed';" + * psql -c "ALTER ROLE recipes SET timezone TO 'UTC';" + * + * 4. Run "recipes-manage migrate" + * + EOF +fi diff --git a/user/tandoor-recipes/tandoor-recipes.post-upgrade b/user/tandoor-recipes/tandoor-recipes.post-upgrade new file mode 120000 index 0000000..9822b5f --- /dev/null +++ b/user/tandoor-recipes/tandoor-recipes.post-upgrade @@ -0,0 +1 @@ +tandoor-recipes.post-install \ No newline at end of file diff --git a/user/tandoor-recipes/tandoor-recipes.pre-install b/user/tandoor-recipes/tandoor-recipes.pre-install new file mode 100644 index 0000000..26b5121 --- /dev/null +++ b/user/tandoor-recipes/tandoor-recipes.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +recipes_dir='/var/lib/recipes' + +if ! getent group recipes 1>/dev/null; then + echo '* Creating group recipes' 1>&2 + + addgroup -S recipes +fi + +if ! id recipes 2>/dev/null 1>&2; then + echo '* Creating user recipes' 1>&2 + + adduser -DHS -G recipes -h "$recipes_dir" -s /bin/sh \ + -g "added by apk for recipes" recipes + passwd -u recipes 1>/dev/null # unlock +fi + +if ! id -Gn recipes | grep -Fq www-data; then + echo '* Adding user recipes to group www-data' 1>&2 + + addgroup recipes www-data +fi + +exit 0 From bd961262a5fc54f7969876b2f1cd728c666d6abc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jan 2024 21:35:44 -0500 Subject: [PATCH 060/738] backports/py3-validators: pin to 0.20.0 for tandoor --- backports/py3-validators/APKBUILD | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 backports/py3-validators/APKBUILD diff --git a/backports/py3-validators/APKBUILD b/backports/py3-validators/APKBUILD new file mode 100644 index 0000000..b4d0dd2 --- /dev/null +++ b/backports/py3-validators/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Leo +# Maintainer: +pkgname=py3-validators +pkgver=0.20.0 +pkgrel=0 +pkgdesc="Python3 Data Validation for Humans" +url="https://github.com/python-validators/validators" +arch="noarch" +license="MIT" +depends="py3-decorator py3-six" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-isort py3-pytest py3-flake8" +subpackages="$pkgname-pyc" +source="https://github.com/python-validators/validators/archive/$pkgver/py3-validators-$pkgver.tar.gz" +builddir="$srcdir/validators-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +45a07c061022da453c31fc946950be3a701f36afbf0e0eb82b91f4bdb26c4d2d0ab47f6958ac88fd2e0a1563201e946014a5cb93cfa1c6710411982852d571c7 py3-validators-0.20.0.tar.gz +" From 37cc16bc0819cd836240ee2de84eb7b393ce0cd2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 5 Jan 2024 01:10:07 -0500 Subject: [PATCH 061/738] user/freescout: new aport --- user/freescout/APKBUILD | 64 +++++++++++++++++++++++++++ user/freescout/freescout-manage.sh | 11 +++++ user/freescout/freescout.nginx | 56 +++++++++++++++++++++++ user/freescout/freescout.post-install | 56 +++++++++++++++++++++++ user/freescout/freescout.post-upgrade | 1 + user/freescout/freescout.pre-install | 25 +++++++++++ 6 files changed, 213 insertions(+) create mode 100644 user/freescout/APKBUILD create mode 100644 user/freescout/freescout-manage.sh create mode 100644 user/freescout/freescout.nginx create mode 100755 user/freescout/freescout.post-install create mode 120000 user/freescout/freescout.post-upgrade create mode 100755 user/freescout/freescout.pre-install diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD new file mode 100644 index 0000000..47de62c --- /dev/null +++ b/user/freescout/APKBUILD @@ -0,0 +1,64 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=freescout +pkgver=1.8.115 +pkgrel=0 +pkgdesc="Free self-hosted help desk & shared mailbox" +arch="noarch" +url="freescout.net" +license="AGPL-3.0" +_php=php82 +_php_mods="-fpm -mbstring -xml -imap -zip -gd -curl -intl -tokenizer -pdo_pgsql -openssl -session -iconv -fileinfo -dom -pcntl" +depends="$_php ${_php_mods//-/$_php-} nginx postgresql pwgen" +makedepends="composer pcre" +install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/freescout-helpdesk/freescout/archive/refs/tags/$pkgver.tar.gz + freescout.nginx + freescout-manage.sh + " +pkgusers="freescout" +pkggroups="freescout" + +build() { + composer install --ignore-platform-reqs +} + +package() { + local logdir="/var/log/$pkgname" + local wwwdir="/usr/share/webapps/$pkgname" + local confdir="/etc/$pkgname" + + # Make directories + install -dm 755 \ + "$pkgdir"/$wwwdir \ + "$pkgdir"/$confdir + + # Copy and ln operations + cp $builddir/* -R "$pkgdir"/$wwwdir/. + ln -s /etc/freescout/freescout.conf "$pkgdir"/usr/share/webapps/freescout/.env + rm -R "$pkgdir"/$wwwdir/storage/logs + ln -s "$logdir" "$pkgdir"/$wwwdir/storage/logs + ln -s $wwwdir/storage/app/public "$pkgdir"/$wwwdir/public/storage + + # Permission settings + chown -R root:www-data "$pkgdir"/"$wwwdir" + find "$pkgdir/$wwwdir" -type f -exec chmod 664 {} \; + find "$pkgdir/$wwwdir" -type d -exec chmod 775 {} \; + + # config files + install -Dm644 "$srcdir"/freescout.nginx \ + "$pkgdir"/etc/nginx/http.d/freescout.conf + install -Dm640 "$builddir"/.env.example \ + "$pkgdir"/etc/freescout/freescout.conf + sed -i 's|APP_KEY.*|APP_KEY=@@SECRET_KEY@@|' "$pkgdir"/etc/freescout/freescout.conf + chown root:www-data "$pkgdir"/etc/freescout/freescout.conf + + # Install wrapper script to /usr/bin. + install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage +} +sha512sums=" +a3b14c0193e2ec4543cca36ed2a39c0e8a7aa77970f7c4d3761ba8ed8939a9684ec54e8a8dbe0264210be9be1ede35e867cb01271699b2b21f840a1b22406d3a freescout-1.8.115.tar.gz +e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx +7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh +" diff --git a/user/freescout/freescout-manage.sh b/user/freescout/freescout-manage.sh new file mode 100644 index 0000000..9367807 --- /dev/null +++ b/user/freescout/freescout-manage.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/freescout' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'freescout' ]; then + exec su freescout -c '"$0" "$@"' -- php artisan "$@" +else + exec php artisan "$@" +fi diff --git a/user/freescout/freescout.nginx b/user/freescout/freescout.nginx new file mode 100644 index 0000000..15f2161 --- /dev/null +++ b/user/freescout/freescout.nginx @@ -0,0 +1,56 @@ +server { + listen 80; + listen [::]:80; + + server_name example.com www.example.com; + + root /usr/share/webapps/freescout/public; + + index index.php index.html index.htm; + + error_log /var/www/html/storage/logs/web-server.log; + + # Max. attachment size. + # It must be also set in PHP.ini via "upload_max_filesize" and "post_max_size" directives. + client_max_body_size 20M; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + location ~ \.php$ { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass unix:/run/php/php8.0-fpm.sock; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + # Uncomment this location if you want to improve attachments downloading speed. + # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file. + #location ^~ /storage/app/attachment/ { + # internal; + # alias /var/www/html/storage/app/attachment/; + #} + location ~* ^/storage/attachment/ { + expires 1M; + access_log off; + try_files $uri $uri/ /index.php?$query_string; + } + location ~* ^/(?:css|js)/.*\.(?:css|js)$ { + expires 2d; + access_log off; + add_header Cache-Control "public, must-revalidate"; + } + # The list should be in sync with /storage/app/public/uploads/.htaccess and /config/app.php + location ~* ^/storage/.*\.((?!(jpg|jpeg|jfif|pjpeg|pjp|apng|bmp|gif|ico|cur|png|tif|tiff|webp|pdf|txt|diff|patch|json|mp3|wav|ogg|wma)).)*$ { + add_header Content-disposition "attachment; filename=$2"; + default_type application/octet-stream; + } + location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ { + expires 1M; + access_log off; + add_header Cache-Control "public"; + } + location ~ /\. { + deny all; + } +} diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install new file mode 100755 index 0000000..0d64b10 --- /dev/null +++ b/user/freescout/freescout.post-install @@ -0,0 +1,56 @@ +#!/bin/sh +set -eu + +group=www-data +config_file='/etc/freescout/freescout.conf' + +if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(freescout-manage key:generate --show)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Freescout upgrade run: + * + * freescout-manage migrate + * + * You may need to adjust permissions: + * find /usr/share/webapps/freescout -type f -exec chmod 664 {} \; + * find /usr/share/webapps/freescout -type d -exec chmod 775 {} \; + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/freescout/freescout.conf + * + * 2. Make sure cgi.fix_pathinfo=0 is set in /etc/php8x/php.ini is set + * + * 3. Create database for Freescout: + * + * psql -c "CREATE ROLE freescout PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE freescout OWNER freescout ENCODING 'UTF-8';" + * + * 4. Clear application cache and apply .env file changes: + * + * freescout-manage freescout:clear-cache + * + * 5. Create tables: + * + * freescout-manage migrate + * + * 6. Create admin user + * + * freescout-manage freescout:create-user + * + * You may need to adjust permissions: + * find /usr/share/webapps/freescout -type f -exec chmod 664 {} \; + * find /usr/share/webapps/freescout -type d -exec chmod 775 {} \; + * + EOF +fi + diff --git a/user/freescout/freescout.post-upgrade b/user/freescout/freescout.post-upgrade new file mode 120000 index 0000000..d53f932 --- /dev/null +++ b/user/freescout/freescout.post-upgrade @@ -0,0 +1 @@ +freescout.post-install \ No newline at end of file diff --git a/user/freescout/freescout.pre-install b/user/freescout/freescout.pre-install new file mode 100755 index 0000000..6332408 --- /dev/null +++ b/user/freescout/freescout.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +freescout_dir='/var/lib/freescout' + +if ! getent group freescout 1>/dev/null; then + echo '* Creating group freescout' 1>&2 + + addgroup -S freescout +fi + +if ! id freescout 2>/dev/null 1>&2; then + echo '* Creating user freescout' 1>&2 + + adduser -DHS -G freescout -h "$freescout_dir" -s /bin/sh \ + -g "added by apk for freescout" freescout + passwd -u freescout 1>/dev/null # unlock +fi + +if ! id -Gn freescout | grep -Fq www-data; then + echo '* Adding user freescout to group www-data' 1>&2 + + addgroup freescout www-data +fi + +exit 0 From e13e8b8638186939dd2998576c4ed5e4dc623c43 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 5 Jan 2024 18:37:52 -0500 Subject: [PATCH 062/738] user/py3-onelogin: new aport --- user/py3-onelogin/APKBUILD | 50 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 user/py3-onelogin/APKBUILD diff --git a/user/py3-onelogin/APKBUILD b/user/py3-onelogin/APKBUILD new file mode 100644 index 0000000..8d91856 --- /dev/null +++ b/user/py3-onelogin/APKBUILD @@ -0,0 +1,50 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-onelogin +_pkgname=onelogin-python-sdk +pkgver=3.1.6 +pkgrel=0 +pkgdesc="OpenAPI Specification for OneLogin" +url="https://github.com/onelogin/onelogin-python-sdk" +license="MIT" +arch="noarch" +depends=" + py3-dateutil + py3-urllib3 + py3-frozendict + py3-typing-extensions + py3-certifi + " +makedepends=" + py3-setuptools + py3-gpep517 + py3-wheel + py3-installer + " +checkdepends=" + py3-pytest + " +source="$pkgname-$pkgver.tar.gz::https://github.com/onelogin/onelogin-python-sdk/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver +options="!check" # Failing test unit +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +44fccb05e82c55db82617c33cc0e2287699969d9a7f12a4992c0cd35c28b2215c66bef37849e45b5506df11524d1b143a2ab3ae16f001af51f0135c92d0801a4 py3-onelogin-3.1.6.tar.gz +" + From 8b019782cd388127702d3a24779ba7129c0c06d8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 5 Jan 2024 18:55:33 -0500 Subject: [PATCH 063/738] user/py3-xmlsec: use latest xmlsec --- user/py3-xmlsec/264_xmlsec3-support.patch | 105 ++++++++++++++++++++++ user/py3-xmlsec/APKBUILD | 26 ++++-- 2 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 user/py3-xmlsec/264_xmlsec3-support.patch diff --git a/user/py3-xmlsec/264_xmlsec3-support.patch b/user/py3-xmlsec/264_xmlsec3-support.patch new file mode 100644 index 0000000..12096a7 --- /dev/null +++ b/user/py3-xmlsec/264_xmlsec3-support.patch @@ -0,0 +1,105 @@ +From 5f57f2eac756df213e83a2fdb452057909e2dd21 Mon Sep 17 00:00:00 2001 +From: David Adamec +Date: Fri, 15 Sep 2023 17:49:15 -0700 +Subject: [PATCH 1/3] Add compatibility for xmlsec 1.3 + +--- + doc/source/modules/constants.rst | 6 ------ + src/constants.c | 2 -- + src/enc.c | 7 +++++++ + src/xmlsec/constants.pyi | 2 -- + 4 files changed, 7 insertions(+), 10 deletions(-) + +diff --git a/src/constants.c b/src/constants.c +index 34c81b2..72ae217 100644 +--- a/src/constants.c ++++ b/src/constants.c +@@ -316,8 +316,6 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) { + PYXMLSEC_ADD_NS_CONSTANT(XPathNs, "XPATH"); + PYXMLSEC_ADD_NS_CONSTANT(XPath2Ns, "XPATH2"); + PYXMLSEC_ADD_NS_CONSTANT(XPointerNs, "XPOINTER"); +- PYXMLSEC_ADD_NS_CONSTANT(Soap11Ns, "SOAP11"); +- PYXMLSEC_ADD_NS_CONSTANT(Soap12Ns, "SOAP12"); + PYXMLSEC_ADD_NS_CONSTANT(NsExcC14N, "EXC_C14N"); + PYXMLSEC_ADD_NS_CONSTANT(NsExcC14NWithComments, "EXC_C14N_WITH_COMMENT"); + +diff --git a/src/enc.c b/src/enc.c +index aaf35ae..475cd2d 100644 +--- a/src/enc.c ++++ b/src/enc.c +@@ -50,6 +50,13 @@ static int PyXmlSec_EncryptionContext__init__(PyObject* self, PyObject* args, Py + } + ctx->manager = manager; + PYXMLSEC_DEBUGF("%p: init enc context - ok, manager - %p", self, manager); ++ ++ // xmlsec 1.3 changed the key search to strict mode, causing various examples ++ // in the docs to fail. For backwards compatibility, this changes it back to ++ // lax mode for now. ++ ctx->handle->keyInfoReadCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH; ++ ctx->handle->keyInfoWriteCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH; ++ + return 0; + ON_FAIL: + PYXMLSEC_DEBUGF("%p: init enc context - failed", self); +diff --git a/src/xmlsec/constants.pyi b/src/xmlsec/constants.pyi +index 3430a02..9fd24e5 100644 +--- a/src/xmlsec/constants.pyi ++++ b/src/xmlsec/constants.pyi +@@ -85,8 +85,6 @@ NodeX509Data: Final[str] + Ns: Final[str] + NsExcC14N: Final[str] + NsExcC14NWithComments: Final[str] +-Soap11Ns: Final[str] +-Soap12Ns: Final[str] + TransformAes128Cbc: Final[__Transform] + TransformAes128Gcm: Final[__Transform] + TransformAes192Cbc: Final[__Transform] + +From 0e7c5e718e8d221331b0a5f851094a5b4181eeae Mon Sep 17 00:00:00 2001 +From: David Adamec +Date: Fri, 15 Sep 2023 18:07:07 -0700 +Subject: [PATCH 2/3] fix 1.2 compatibility + +--- + src/enc.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/enc.c b/src/enc.c +index 475cd2d..5453ef9 100644 +--- a/src/enc.c ++++ b/src/enc.c +@@ -17,6 +17,11 @@ + #include + #include + ++// Backwards compatibility with xmlsec 1.2 ++#ifndef XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH ++#define XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH 0x00008000 ++#endif ++ + typedef struct { + PyObject_HEAD + xmlSecEncCtxPtr handle; + +From 40c14c45a352f2812e796a071ef7d12f5a70be58 Mon Sep 17 00:00:00 2001 +From: David Adamec +Date: Fri, 15 Sep 2023 19:40:04 -0700 +Subject: [PATCH 3/3] update isort to fix poetry error in pre-commit + +--- + .pre-commit-config.yaml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml +index 0545b12..bf877f3 100644 +--- a/.pre-commit-config.yaml ++++ b/.pre-commit-config.yaml +@@ -31,7 +31,7 @@ repos: + exclude: ^setup.py$ + additional_dependencies: [flake8-docstrings, flake8-bugbear, flake8-logging-format, flake8-builtins, flake8-eradicate, flake8-fixme, pep8-naming, flake8-pep3101, flake8-annotations-complexity,flake8-pyi] + - repo: https://github.com/PyCQA/isort +- rev: 5.10.1 ++ rev: 5.12.0 + hooks: + - id: isort + - repo: https://github.com/pre-commit/mirrors-mypy diff --git a/user/py3-xmlsec/APKBUILD b/user/py3-xmlsec/APKBUILD index bc23db8..5237258 100644 --- a/user/py3-xmlsec/APKBUILD +++ b/user/py3-xmlsec/APKBUILD @@ -4,23 +4,38 @@ _pyname=xmlsec pkgname="py3-$_pyname" pkgver=1.3.13 -pkgrel=3 -# does not support libxml2 1.3.0 +pkgrel=4 arch="all" pkgdesc="Python bindings for the XML Security Library" url="https://pypi.python.org/project/$_pyname" license="MIT" -depends="py3-lxml xmlsec<1.3" -makedepends="py3-setuptools libxml2-dev xmlsec-dev<1.3 py3-wheel py3-pip python3-dev" +depends=" + py3-lxml + xmlsec + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-setuptools_scm + py3-pkgconfig + py3-wheel + python3-dev + libxml2-dev + xmlsec-dev + " checkdepends="py3-pytest" source=" $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz 253_pkcs11-support.patch + 264_xmlsec3-support.patch " builddir="$srcdir"/$_pyname-$pkgver build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir dist \ + --output-fd 3 3>&1 >&2 + } check() { @@ -36,4 +51,5 @@ package() { sha512sums=" 2aa080fbc918d5d360dcb086a8c529545514dd429649d99833425f92fa06a3a094cf3139f8ed00827fed358f0fa463b74c267e593ac14e5aadc299d64206ac8e py3-xmlsec-1.3.13.tar.gz 9155a2435d832b4dcd0260616f52eec148dca1dade76a89c23e10f017e4140024ef042b6b10c5b9435fcbf52e7dc4f7e5764dc7f5bdd7595c27b3106fab942cf 253_pkcs11-support.patch +d901c09a49145250dd9325476c1356f820519b9248195240584f6de62b8084205f698501a1f48e42b63fe4c7b169dcb65540edc03724ef7e9297b45216c5b481 264_xmlsec3-support.patch " From 7ed6778289db7c89959af5c814b91c1d2df444e6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 5 Jan 2024 18:56:28 -0500 Subject: [PATCH 064/738] user/py3-python3-saml: new aport --- user/py3-python3-saml/APKBUILD | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 user/py3-python3-saml/APKBUILD diff --git a/user/py3-python3-saml/APKBUILD b/user/py3-python3-saml/APKBUILD new file mode 100644 index 0000000..d11b7c9 --- /dev/null +++ b/user/py3-python3-saml/APKBUILD @@ -0,0 +1,30 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-python3-saml +_pkgreal=python3-saml +pkgver=1.16.0 +pkgrel=0 +pkgdesc="Saml Python Toolkit. Add SAML support to your Python software using this library" +url="http://packages.python.org/pypi/python3-saml" +arch="noarch" +license="MIT" +depends="py3-xmlsec py3-isodate py3-lxml" +makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" +source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/python3-saml/python3-saml-$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +715c96f701be3de9002a37198d01715519f11173d37d2870b8d6f20e007440368f76340abfa17ad8556560296a8dfaa999f1774ccb5dd3d9b04b125afc06ac31 py3-python3-saml-1.16.0.tar.gz +" From c62e9cc1ce3702098876a5251ff1649fef3ae0c9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 5 Jan 2024 23:46:28 -0500 Subject: [PATCH 065/738] user/freescout: moved writable directories to /var/lib --- user/freescout/APKBUILD | 30 ++++++++++++++++++++------- user/freescout/freescout.post-install | 8 ------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 47de62c..0125bdb 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freescout pkgver=1.8.115 -pkgrel=0 +pkgrel=1 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" @@ -26,25 +26,41 @@ build() { package() { local logdir="/var/log/$pkgname" + local datadir="/var/lib/$pkgname" local wwwdir="/usr/share/webapps/$pkgname" local confdir="/etc/$pkgname" # Make directories install -dm 755 \ "$pkgdir"/$wwwdir \ - "$pkgdir"/$confdir + "$pkgdir"/$confdir \ + "$pkgdir"/$logdir \ + "$pkgdir"/$datadir # Copy and ln operations cp $builddir/* -R "$pkgdir"/$wwwdir/. + for i in storage/app storage/framework bootstrap/cache \ + public/css/builds public/js/builds public/modules Modules; do + + if [ -d "$pkgdir"$wwwdir/$i ]; then + if [ ! -d "$pkgdir"/$datadir/${i%/*} ]; then + mkdir -p "$pkgdir"/$datadir/${i%/*} + fi + mv "$pkgdir"$wwwdir/$i "$pkgdir"/$datadir/$i + else + mkdir -p "$pkgdir"/$datadir/$i + fi + ln -s $datadir/$i "$pkgdir"/$wwwdir/$i + done ln -s /etc/freescout/freescout.conf "$pkgdir"/usr/share/webapps/freescout/.env - rm -R "$pkgdir"/$wwwdir/storage/logs - ln -s "$logdir" "$pkgdir"/$wwwdir/storage/logs ln -s $wwwdir/storage/app/public "$pkgdir"/$wwwdir/public/storage + # log dir + rm -R "$pkgdir"/$wwwdir/storage/logs + ln -s "$logdir" "$pkgdir"/$wwwdir/storage/logs + # Permission settings - chown -R root:www-data "$pkgdir"/"$wwwdir" - find "$pkgdir/$wwwdir" -type f -exec chmod 664 {} \; - find "$pkgdir/$wwwdir" -type d -exec chmod 775 {} \; + chown -R freescout:www-data "$pkgdir"/$datadir "$pkgdir"/$logdir # config files install -Dm644 "$srcdir"/freescout.nginx \ diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install index 0d64b10..3475bcb 100755 --- a/user/freescout/freescout.post-install +++ b/user/freescout/freescout.post-install @@ -18,10 +18,6 @@ if [ "${0##*.}" = 'post-upgrade' ]; then * * freescout-manage migrate * - * You may need to adjust permissions: - * find /usr/share/webapps/freescout -type f -exec chmod 664 {} \; - * find /usr/share/webapps/freescout -type d -exec chmod 775 {} \; - * EOF else cat >&2 <<-EOF @@ -47,10 +43,6 @@ else * * freescout-manage freescout:create-user * - * You may need to adjust permissions: - * find /usr/share/webapps/freescout -type f -exec chmod 664 {} \; - * find /usr/share/webapps/freescout -type d -exec chmod 775 {} \; - * EOF fi From f9f62cc12523982820a37802dad9dc9fcf413cc9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 6 Jan 2024 00:28:00 -0500 Subject: [PATCH 066/738] user/freescout: upgrade to 1.8.116 --- user/freescout/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 0125bdb..e3f5c14 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,8 +1,8 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.115 -pkgrel=1 +pkgver=1.8.116 +pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" @@ -74,7 +74,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -a3b14c0193e2ec4543cca36ed2a39c0e8a7aa77970f7c4d3761ba8ed8939a9684ec54e8a8dbe0264210be9be1ede35e867cb01271699b2b21f840a1b22406d3a freescout-1.8.115.tar.gz +cd488caacdf61b30ab15827c8ebccd6c28a2027e2979e6c4d5af1ae33aa55c94469cd297b56693e64364d875dbd363c5af71cec10ade28c00253de1d9e551c05 freescout-1.8.116.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh " From b463bbf2775286396c1ad71e3e665aaf4715da47 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 6 Jan 2024 00:54:55 -0500 Subject: [PATCH 067/738] user/peertube: new aport --- user/peertube/APKBUILD | 81 +++++++++++++++++++++++++++++ user/peertube/peertube-manage.sh | 15 ++++++ user/peertube/peertube.conf | 2 + user/peertube/peertube.openrc | 34 ++++++++++++ user/peertube/peertube.post-install | 41 +++++++++++++++ user/peertube/peertube.post-upgrade | 1 + user/peertube/peertube.pre-install | 25 +++++++++ 7 files changed, 199 insertions(+) create mode 100644 user/peertube/APKBUILD create mode 100644 user/peertube/peertube-manage.sh create mode 100644 user/peertube/peertube.conf create mode 100644 user/peertube/peertube.openrc create mode 100755 user/peertube/peertube.post-install create mode 120000 user/peertube/peertube.post-upgrade create mode 100755 user/peertube/peertube.pre-install diff --git a/user/peertube/APKBUILD b/user/peertube/APKBUILD new file mode 100644 index 0000000..f50d1c1 --- /dev/null +++ b/user/peertube/APKBUILD @@ -0,0 +1,81 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=peertube +pkgver=6.0.2 +pkgrel=0 +pkgdesc="ActivityPub-federated video streaming platform using P2P directly in your web browser" +arch="x86_64" +url="https://joinpeertube.org/" +license="AGPL" +depends=" + nodejs + ffmpeg + postgresql + openssl + redis + npm + procps-ng + " +makedepends=" + yarn + " +source=" + $pkgname-$pkgver.tar.gz::https://github.com/Chocobozzz/PeerTube/archive/refs/tags/v$pkgver.tar.gz + peertube-manage.sh + peertube.conf + peertube.openrc + " +builddir="$srcdir"/PeerTube-$pkgver +install="$pkgname.post-install $pkgname.pre-install $pkgname.post-upgrade" +subpackages="$pkgname-doc $pkgname-openrc" + +build() { + # need to fetch devel depencencies to build + yarn install --pure-lockfile + npm run build + rm -Rf "$builddir"/node_modules + yarn install --production --pure-lockfile +} + +package() { + install -dm 755 \ + "$pkgdir"/usr/share/webapps \ + "$pkgdir"/usr/share/doc \ + "$pkgdir"/usr/share/licenses/peertube \ + "$pkgdir"/etc/init.d \ + "$pkgdir"/etc/conf.d + + # install + cp -a "$builddir" "$pkgdir/usr/share/webapps/peertube" + + # wrapper script + install -Dm755 "$srcdir"/peertube-manage.sh "$pkgdir"/usr/bin/peertube-manage + + # openrc + install -Dm755 "$srcdir"/peertube.openrc "$pkgdir"/etc/init.d/peertube + install -Dm644 "$srcdir"/peertube.conf "$pkgdir"/etc/conf.d/peertube + + # config file setup + rm -R "$pkgdir"/usr/share/webapps/peertube/config + install -Dm644 "$builddir"/config/production.yaml.example "$pkgdir"/etc/peertube/production.yaml + install -Dm644 "$builddir"/config/default.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s|/var/www/peertube/storage|/var/lib/peertube|g" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s| tmp:.*| tmp: '/tmp/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s|tmp_persistent:.*|tmp_persistent: '/var/tmp/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s|logs:.*|logs: '/var/log/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml + sed -i "s| peertube: ''| peertube: '@@SECRET_KEY@@'|" "$pkgdir"/etc/peertube/production.yaml + + # docs and licenses + mv "$pkgdir"/usr/share/webapps/peertube/support/doc "$pkgdir"/usr/share/doc/$pkgname + mv "$pkgdir"/usr/share/webapps/peertube/*.md "$pkgdir"/usr/share/doc/peertube/. + mv "$pkgdir"/usr/share/webapps/peertube/LICENSE "$pkgdir"/usr/share/licenses/peertube/. + + # delete arm64 prebuild + rm "$pkgdir"/usr/share/webapps/$pkgname/node_modules/fs-native-extensions/prebuilds/linux-arm64/node.napi.node +} +sha512sums=" +91bcec34902f171ffe9ab3f27ab4422319f91430cab22965a5cf9887c5293152f7f85c6fc0f355820000daea0a49327aa66f20bb4cff3850e5e3d192f347c926 peertube-6.0.2.tar.gz +92de1155410848937eeff3bef480c4a074875b4236ce0b6bf4cd7213d00173e7766d130408419c85c4432a8445a03f5d4525e4283384d906d781510cc4fd8fc0 peertube-manage.sh +494bb4daf98fcd62b354eb6fae18ccff19bef1243de083a93e438680deef1d9039e30eff8870b6955c3c7b10638e6df6cbeb4fbdb7539979466f502bcc72c843 peertube.conf +5b4d3f47d0dc2ce991971ff61c604a1566811612cff91f7e6ed19b65d0830695649ddef9afff474d916a5e6764d74bb4fa6b5c12eb5e753d8fc381cdd38ab179 peertube.openrc +" diff --git a/user/peertube/peertube-manage.sh b/user/peertube/peertube-manage.sh new file mode 100644 index 0000000..70bc387 --- /dev/null +++ b/user/peertube/peertube-manage.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/peertube' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'peertube' ]; then + source /etc/conf.d/peertube + export NODE_ENV NODE_CONFIG_DIR + exec su peertube -c '"$0" "$@"' -- npm run "$@" +else + source /etc/conf.d/peertube + export NODE_ENV NODE_CONFIG_DIR + exec npm run "$@" +fi diff --git a/user/peertube/peertube.conf b/user/peertube/peertube.conf new file mode 100644 index 0000000..8a7d014 --- /dev/null +++ b/user/peertube/peertube.conf @@ -0,0 +1,2 @@ +NODE_CONFIG_DIR=/etc/peertube +NODE_ENV=production diff --git a/user/peertube/peertube.openrc b/user/peertube/peertube.openrc new file mode 100644 index 0000000..8f03ba0 --- /dev/null +++ b/user/peertube/peertube.openrc @@ -0,0 +1,34 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/peertube" +command="/usr/bin/node" +command_args="dist/server.js" +command_user="peertube" +command_group="peertube" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/peertube/$RC_SVCNAME.log" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/peertube \ + /var/lib/peertube \ + /var/tmp/peertube \ + /tmp/peertube + + export NODE_ENV NODE_CONFIG_DIR +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/peertube/peertube.post-install b/user/peertube/peertube.post-install new file mode 100755 index 0000000..a83bb10 --- /dev/null +++ b/user/peertube/peertube.post-install @@ -0,0 +1,41 @@ +#!/bin/sh +set -eu + +group=www-data +config_file='/etc/peertube/production.yaml' + +if grep '@@SECRET_KEY@@' "$config_file" >/dev/null; then + echo "* Generating random secret in $config_file" >&2 + + secret_key="$(openssl rand -hex 32)" + sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Peertube upgrade run: + * + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/peertube/production.yaml + * + * 2. Create database for Peertube: + * + * psql -c "CREATE ROLE peertube PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE peertube OWNER peertube ENCODING 'UTF-8';" + * + * 3. Start Peertube + * + * service peertube start + * + * 4. Create admin user + * + * peertube-manage reset-password -- -u root + * + EOF +fi + diff --git a/user/peertube/peertube.post-upgrade b/user/peertube/peertube.post-upgrade new file mode 120000 index 0000000..2dd117d --- /dev/null +++ b/user/peertube/peertube.post-upgrade @@ -0,0 +1 @@ +peertube.post-install \ No newline at end of file diff --git a/user/peertube/peertube.pre-install b/user/peertube/peertube.pre-install new file mode 100755 index 0000000..2572d9c --- /dev/null +++ b/user/peertube/peertube.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +DATADIR='/var/lib/peertube' + +if ! getent group peertube 1>/dev/null; then + echo '* Creating group peertube' 1>&2 + + addgroup -S peertube +fi + +if ! id peertube 2>/dev/null 1>&2; then + echo '* Creating user peertube' 1>&2 + + adduser -DHS -G peertube -h "$DATADIR" -s /bin/sh \ + -g "added by apk for peertube" peertube + passwd -u peertube 1>/dev/null # unlock +fi + +if ! id -Gn peertube | grep -Fq www-data; then + echo '* Adding user peertube to group www-data' 1>&2 + + addgroup peertube www-data +fi + +exit 0 From 0699a42e6881cb798860dfe4d02d33bf19c1da1c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 8 Jan 2024 22:00:53 -0500 Subject: [PATCH 068/738] dotnet8-stage0: upgrade for diff --- community/dotnet7-stage0/APKBUILD | 262 +-- community/dotnet7-stage0/README.md | 49 +- .../build_fix-ga-versions.patch | 32 + ...nstaller_aspire-manifest-version-fix.patch | 26 + .../runtime_76500-mono-musl-support.patch | 325 --- ...00-properly-set-toolchain-for-alpine.patch | 97 - ...682-specify-notext-on-linux-musl-x86.patch | 16 +- ...t-adding-rids-with-dash-in-base-part.patch | 164 -- ...ime_84444-suppress-clang-16-warnings.patch | 192 -- ...ime_90251-rename-mono-cmake-host-var.patch | 80 + ...andle-enum-return-type-when-inlining.patch | 30 + .../runtime_enable-runtime-marshalling.diff | 1807 ----------------- .../runtime_more-clang-16-suppression.patch | 13 + .../runtime_remove-usage-of-off64-t.patch | 29 +- 14 files changed, 330 insertions(+), 2792 deletions(-) create mode 100644 community/dotnet7-stage0/build_fix-ga-versions.patch create mode 100644 community/dotnet7-stage0/installer_aspire-manifest-version-fix.patch delete mode 100644 community/dotnet7-stage0/runtime_76500-mono-musl-support.patch delete mode 100644 community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch delete mode 100644 community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch delete mode 100644 community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch create mode 100644 community/dotnet7-stage0/runtime_90251-rename-mono-cmake-host-var.patch create mode 100644 community/dotnet7-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch delete mode 100644 community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff create mode 100644 community/dotnet7-stage0/runtime_more-clang-16-suppression.patch diff --git a/community/dotnet7-stage0/APKBUILD b/community/dotnet7-stage0/APKBUILD index 72a783e..b78fc31 100644 --- a/community/dotnet7-stage0/APKBUILD +++ b/community/dotnet7-stage0/APKBUILD @@ -1,65 +1,60 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) -pkgname=dotnet7-stage0 -pkgver=7.0.105 -pkgrel=4 +pkgname=dotnet8-stage0 +pkgver=8.0.100 +pkgrel=0 [ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" # Tag of tarball generator. -_gittag=v$pkgver +_gittag=v8.0.0 # Versions of prebuilt artifacts and bootstrap tar -_artifactsver=7.0.102 -_bootstrapver="7.0.105" +_artifactsver="8.0.100-rtm.23551.1.centos.8-x64" +_bootstrapver="8.0.100" _bootstraprel=0 -_installerver=${_gittag/v} - -# Version of packages that aren't defined in git-info or badly defined -_iltoolsver=7.0.2-servicing.22607.1 -_aspnetver=7.0.4 +_installerver=8.0.100 # Patches to be used. String before '_' refers to repo to patch # Look for patch notes within each patch for what they fix / where they come from # build_* patches applies directly to $builddir _patches=" + build_fix-ga-versions.patch + installer_aspire-manifest-version-fix.patch installer_set-crossgen2rid-using-buildarchitecture.patch - runtime_76500-mono-musl-support.patch - runtime_76500-properly-set-toolchain-for-alpine.patch runtime_82269-mono-thread-coop-undefine-fortify-source.patch runtime_83682-specify-notext-on-linux-musl-x86.patch - runtime_84413-support-adding-rids-with-dash-in-base-part.patch - runtime_84444-suppress-clang-16-warnings.patch - runtime_enable-runtime-marshalling.diff + runtime_90251-rename-mono-cmake-host-var.patch + runtime_more-clang-16-suppression.patch runtime_remove-usage-of-off64-t.patch " -_extra_nupkgs="https://globalcdn.nuget.org/packages/stylecop.analyzers.1.2.0-beta.435.nupkg" _pkgver_macro=${pkgver%.*} _pkgver_prior=1 _pkgver_name="${_pkgver_macro//[.0]}" pkgdesc="The .NET Core stage0 bits for dotnet build" -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 # x86: blocked by https://github.com/dotnet/runtime/issues/83509 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# s390x: no diskspace | lack maintainer resources -arch="x86_64 armv7 aarch64" +# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 +# riscv64: port WIP https://github.com/dotnet/runtime/issues/84834 +arch="all !x86 !armhf !riscv64" +_giturl=https://github.com/dotnet/dotnet url=https://dotnet.microsoft.com -_giturl=https://github.com/dotnet/installer license="MIT" -options="!check" # Testsuite in main -build aport +options="!check net" # Testsuite in main -build aport subpackages=" dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch dotnet$_pkgver_name-stage0-bootstrap " source=" - https://lab.ilot.io/dotnet/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz + dotnet-tarball-$_gittag.tar.gz::https://github.com/dotnet/dotnet/archive/refs/tags/$_gittag.tar.gz + dotnet-release-$_gittag.json::https://github.com/dotnet/dotnet/releases/download/$_gittag/release.json dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz + dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.tar.xz + dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.tar.xz Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz - $_extra_nupkgs $_patches " @@ -124,7 +119,7 @@ case $CTARGET_ARCH in *) _dotnet_target=$CTARGET_ARCH;; esac -builddir="$srcdir"/dotnet-${_gittag/release\/} +builddir="$srcdir"/dotnet-${_gittag/v} _packagesdir="$srcdir"/local-packages _libdir="/usr/lib" _nugetdir="$srcdir"/nuget @@ -140,62 +135,16 @@ else _logdir="$srcdir"/logs fi -# generates tarball containing all components built by dotnet -snapshot() { - local _pkg="$srcdir"/${builddir##*/}.tar - ulimit -n 4096 - if [ -d "$srcdir" ]; then - cd "$srcdir" - else - mkdir -p "$srcdir" && cd "$srcdir" - fi - if [ -d "installer" ]; then - cd "$srcdir"/installer - else - git clone $_giturl --branch $_gittag && cd "$srcdir"/installer - fi - - sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets - - if [ -d "$_libdir/dotnet/bootstrap" ]; then - local _cli_root="$(find $_libdir/dotnet/bootstrap/${_pkgver_macro}* -maxdepth 0 -type d | sort -r | head -n 1)" - else - local _cli_root="" - fi - - _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ - /p:ArcadeBuildTarball=true \ - /p:TarballDir=$builddir \ - /p:TarballFilePath=$_pkg - - msg "Compressing ${builddir##*/}.tar to $SRCDEST" - xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" - - cd "$startdir" - abuild checksum -} - prepare() { default_prepare - # Parallel restore is broken on mono-based builds since dotnet7 - # see https://github.com/dotnet/runtime/issues/77364 - # fixed by https://github.com/dotnet/runtime/pull/79856 on dotnet8 - # A workaround via runtime_enable-runtime-marshalling.diff - case $CARCH in - s390x|ppc64le) - msg "runtime_enable-runtime-marshalling.diff" - patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff - ;; - esac + mkdir -p "$_cli_root" + mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir $_logdir # sdk insists on downloading its own dotnet unless ArcadeBuildFromSource # is true, which opens up a can of worms sed 's|ArcadeBuildFromSource=true|Architecture|' -i src/sdk/eng/restore-toolset.sh - mkdir -p "$_cli_root" - mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir $_logdir - # links logfiles to pipeline logs for easy pickup in pipelines mkdir -p "$_logdir" "$builddir"/artifacts ln -s "$_logdir" "$builddir"/artifacts/logs @@ -210,24 +159,43 @@ prepare() { tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - $_nuget push "$srcdir"/$filename --source="$_packagesdir" - done - # adjusts sdk version and packagedir to expected for i in runtime sdk installer aspnetcore roslyn; do $_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config tmp=$(mktemp) jq ".sdk.version = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json done + + # extracting PackageVersions.props as some version information is there + tar -xzf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract PackageVersions.props + + # sdk looks for TestCli at wrong place + sed '/||g' | tr -d ' ') + local _runtimever=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') fi local _runtimever_ns=$(awk '{if($2 ~ "Name=\"VS.Redist.Common.NetCore.SharedFramework.x64.*\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') @@ -243,11 +211,13 @@ _runtime() { /p:NoPgoOptimize=true /p:EnableNgenOptimization=false /p:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=none - /p:RunApiCompat=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') + /p:_toolsRID=linux-musl-$_dotnet_arch + /p:OutputRid=linux-musl-$_dotnet_target + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') " if [ "$CBUILD" != "$CHOST" ]; then local args="$args -cross" + # https://github.com/dotnet/runtime/pull/75597 broke crossbuilding when true local DotNetBuildFromSource=false # x86 build of mono broken, thus do not build mono case $_dotnet_target in @@ -266,35 +236,10 @@ _runtime() { cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns } -_roslyn() { - "$_cli_root"/dotnet build-server shutdown - if [ -z "${_roslynver+x}" ]; then - local _roslynver=$(grep OutputPackageVersion "$builddir"/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') - fi - local _roslynver_ns=$(awk '{if($2 == "Name=\"Microsoft.Net.Compilers.Toolset\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building roslyn version $_roslynver" - cd "$builddir"/src/roslyn - - local args=" - -c Release - -bl - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/roslyn.props | sed -E 's|||g' | tr -d ' ') - " - if [ "$_roslynver" != "${_roslynver##*-}" ]; then - local args="$args /p:VersionSuffix=${_roslynver##*-}" - fi - DotNetBuildFromSource=false ./eng/build.sh --restore $args /p:UseAppHost=false - ./eng/build.sh --restore --build --pack $args - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done -} - _sdk() { - "$_cli_root"/dotnet build-server shutdown + _init if [ -z "${_sdkver+x}" ]; then - local _sdkver=$(grep OutputPackageVersion "$builddir"/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') + local _sdkver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') fi local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') @@ -305,13 +250,13 @@ _sdk() { -c Release -bl /consoleLoggerParameters:ShowTimestamp - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') /p:Architecture=$_dotnet_target + /p:TestCliNuGetDirectoryTargetFramework=netcoreapp3.1 " if [ "$_sdkver" != "${_sdkver##*-}" ]; then local args="$args /p:VersionSuffix=${_sdkver##*-}" fi - ./build.sh --pack /p:Projects=$builddir/src/sdk/source-build.slnf $args for i in artifacts/packages/*/*/*.nupkg; do @@ -322,9 +267,9 @@ _sdk() { } _aspnetcore() { - "$_cli_root"/dotnet build-server shutdown + _init if [ -z "${_aspnetver+x}" ]; then - local _aspnetver=$(grep OutputPackageVersion "$builddir"/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') + local _aspnetver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') fi local _aspnetver_ns=$(awk '{if($2 == "Name=\"Microsoft.AspNetCore.App.Ref.Internal\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') @@ -337,31 +282,34 @@ _aspnetcore() { -arch $_dotnet_target -no-build-nodejs /consoleLoggerParameters:ShowTimestamp - /p:BuildOSName=linux-musl /p:BuildNodeJs=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') + /p:BuildOSName=linux-musl + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') /p:DotNetAssetRootUrl=file://$_downloaddir/ /p:EnablePackageValidation=false " - # x86 crossgen broken; ppc64le insists on using crossgen - case $_dotnet_target in - x86|ppc64le) local args="$args /p:DISABLE_CROSSGEN=True";; - esac if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then local args="$args /p:VersionSuffix=${_aspnetver##*-}" fi + + # aspnetcore can't find newly created Microsoft.NETCore.App.Runtime.linux-musl-x86 for some reason + case $_dotnet_target in + riscv64|x86) local args="$args /p:CrossgenOutput=false";; + esac + ./eng/build.sh --pack $args for i in artifacts/packages/*/*/*.nupkg; do $_nuget push $i --source="$_packagesdir" done + mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore-runtime-internal-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns + cp artifacts/installers/*/aspnetcore-runtime-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns } _installer() { - "$_cli_root"/dotnet build-server shutdown + _init msg "[$(date)] Building installer version $_installerver" cd "$builddir"/src/installer @@ -369,23 +317,22 @@ _installer() { -c Release -bl /consoleLoggerParameters:ShowTimestamp + /p:EnableSourceLink=false /p:OSName=linux-musl /p:HostOSName=linux-musl /p:Architecture=$_dotnet_target /p:CoreSetupBlobRootUrl=file://$_downloaddir/ /p:DotnetToolsetBlobRootUrl=file://$_downloaddir/ - /p:EnableSourceLink=false - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/git-info/installer.props | sed -E 's|||g' | tr -d ' ') - /p:GitCommitCount=$(grep GitCommitCount "$builddir"/git-info/installer.props | sed -E 's|||g' | tr -d ' ') + /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/installer.props | sed -E 's|||g' | tr -d ' ') + /p:GitCommitCount=1 /p:PublicBaseURL=file://$_downloaddir/ " if [ "$_installerver" != "${_installerver##*-}" ]; then local args="$args /p:VersionSuffix=${_installerver##*-}" fi - - # x86 crossgen broken + # crossgen broken on x86 case $_dotnet_target in - x86) local args="$args /p:DISABLE_CROSSGEN=True";; + riscv64|x86) local args="$args /p:DISABLE_CROSSGEN=True";; esac ./build.sh $args @@ -395,24 +342,7 @@ _installer() { } build() { - export _InitializeDotNetCli=$_cli_root - export DOTNET_INSTALL_DIR=$_cli_root - export PATH="$_cli_root:$PATH" - export NUGET_PACKAGES=$_nugetdir - export DotNetBuildFromSource=true - export DOTNET_CLI_TELEMETRY_OPTOUT=true - export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true - export SHELL=/bin/bash - export EXTRA_CPPFLAGS="${CPPFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_CXXFLAGS="${CXXFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_CFLAGS="${CFLAGS/--sysroot=$CBUILDROOT}" - export EXTRA_LDFLAGS="$LDFLAGS" - unset CXXFLAGS CFLAGS LDFLAGS CPPFLAGS - - ulimit -n 4096 - _runtime - _roslyn _sdk _aspnetcore _installer @@ -430,6 +360,8 @@ bootstrap() { provides="dotnet$_pkgver_name-bootstrap" provider_priority=$_pkgver_prior + local _iltoolsver=$(grep \||g' | tr -d ' ') + install -dm 755 \ "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \ "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \ @@ -461,11 +393,6 @@ bootstrap() { # copies artifacts to artifacts dir for use by future dotnet builds for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done - for i in $_extra_nupkgs; do - local filename=${i/::*} - local filename=${filename##*/} - install -Dm644 "$srcdir"/$filename "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ - done msg "Changing iltools version to $_iltoolsver" # source-build expects a certain version of ilasm, ildasm and testhost @@ -475,13 +402,14 @@ bootstrap() { local nupath=$(find $nupath || true) local nupkg="${nupath##*/}" local nuname="${nupkg/.nupkg}" - if [ -z "${nuname/*rtm*}" ] || [ -z "${nuname/*servicing*}" ]; then + if [ -z "${nuname/*rtm*}" ] || [ -z "${nuname/*servicing*}" ] || [ -z "${nuname/*preview*}" ]; then nuname=${nuname%-*} fi local nuname="${nuname%.*.*.*}" local nuver="${nupkg/$nuname.}" local nuver="${nuver/.nupkg}" local nuspec="$nuname.nuspec" + if [ ! "$nupath" ] || [ "$nupath" = "${nupath/$nuver/$_iltoolsver}" ]; then continue fi @@ -512,24 +440,24 @@ artifacts() { tar --use-compress-program="pigz" \ -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \ -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner \ - --exclude '*x64*' + --no-same-owner } sha512sums=" -bfc122f316673fe4014e891eb101ecf40efc2ed4ecaff0cbd4bb5c17f547ccaa867ae8af22f41813565630cdb68e2972633703a88478fadde39584f91588589d dotnet-v7.0.105.tar.xz -8fb7d1754359e3fda35b7a07e13d2a5e9e723196b980dd922b30919aedaddbedd4d82e28b37471437b69cb93e4b1d136ac701e221924e44d0be6b6ba94dc3654 dotnet-sdk-7.0.105-linux-musl-x64.noextract -c8120c20939232b53a3cdc607d812d93fadd6dea9466f9454df559f8b7eb334c69fdfd31bc60e4c70b6cf4fc519a25a0439902b04cf5c5bd0c29de020024fbe2 dotnet-sdk-7.0.105-linux-musl-arm64.noextract -9ffa724ccc02dc3e40afe22f0546a9bdf68b6314cf6da03d9387fb010fe3e5935154a5c06c4a2d588ff4ac77f34120a4ae9bc0237fb24452d78e6698435acf72 dotnet-sdk-7.0.105-linux-musl-arm.noextract -e5d8f11d5da842309c1e7cf9936eb0cf3cfb56aaa17aeee64fe264b3e6771ee56dd6c405a4c16950b4e4607dab21bc0ec40783f69b0865a6112d7d03b1b57487 Private.SourceBuilt.Artifacts.7.0.102.noextract -2ede8d9352a51861a5b2550010ff55da8241381a6fa6cc49e025f1c289b230b8c0177e93850de4ea8b6f702c1f2d50d81a9f4d890ca9441c257b614f2a5e05dd stylecop.analyzers.1.2.0-beta.435.nupkg +094265462d66d97b51ebfbe5fb06d4a679b97881f1f5a07a87a282a96eeaabfe97ca42061d59aac71dd8861c07f07dda16a72e29ae03167407e51d3fd2767562 dotnet-tarball-v8.0.0.tar.gz +55f2c56f7fbed4137ebe5e81c7b86d199d7ff91c6e19fbc9a4af8cd5d0f0195273356ead8b80aedfff56a3d704a541a7c2a7395bec3fa5d6585f3afd056b1220 dotnet-release-v8.0.0.json +a904491cf1fe27603cfc21aa234b2f4da7517929fa9dad0eaa2233d010ef1e890339ca4b8e3c4c0d463f3015d7020a0c37ece97319b061cd92a5fc51cd8a7f4c dotnet-sdk-8.0.100-linux-musl-x64.noextract +1d8e54ab8d2b7b83972c1ecd7a23073bf83d39c258e993e54ab91a383ad2aa44276dfc28938f7b162cf79010187005e42a665933dff021ffa5e5d9cfadb5e2b6 dotnet-sdk-8.0.100-linux-musl-arm64.noextract +a8c08c4eaaa1ade3a1521750c62af92ab8fe91bfdd0f4767f8c0469ebfef091f3a68a443d4566bbfe53c49866d72a104c7aea309cabb36148f9aef9cb950ea64 dotnet-sdk-8.0.100-linux-musl-arm.noextract +d0bebb6179e679dea5704ca59acb2260a3dde2d22727b8116b57fbcfc3cba7b31581ed785279eec2836e3916608f39fa45a8e26dfa27063928355ccda83b3d09 dotnet-sdk-8.0.100-r0-linux-musl-s390x.noextract +14fdc6c8225010a6028609ed2b7c942abc770a50167429116ab9d5f0cabfe8038aedb89b7cc984d89c3366351302a86e10c2d5cfccd57399cc42b3c838bc37a0 dotnet-sdk-8.0.100-r0-linux-musl-ppc64le.noextract +a9933d8de614e914d42cf4953ac60a0a6e83e4276328b838fb369fb3036073fd08d2bcbcee07386f65f802f2f2374e45b44b8f8410396a7d93d20e53646d72f0 Private.SourceBuilt.Artifacts.8.0.100-rtm.23551.1.centos.8-x64.noextract +48d155f11c4594eeb72b2d80a6e110ab2b093fd2379e9ddcca755072f4a3e64990ef2620709e0b10ea4b979d8909de56d89f970c349c6fee58621a8f6b415a1c build_fix-ga-versions.patch +6f23b53b1408dc676434d3ee417b735af033f2717057589e93d26021ca2513d13f40ba7ea3312413f2ed79cda2991538f64b4c835e75f40f5a5e5a0e469c4ec0 installer_aspire-manifest-version-fix.patch b6a2dfeccac329546f87f1019c1f2cf07e2f294dd33914449ad08d92269c8713b6fa1e330ef257c24e189023fd0b824df97688b0ba6e578a6d0292b07a72b4c1 installer_set-crossgen2rid-using-buildarchitecture.patch -43355fdb9531a08a9a141b016c049cc61d779e797f182456f56e5dc3af76fd31643d84d7ad7982080921681d2bbfc7bbaaa64f50c3899b023222eb0d841fbb2a runtime_76500-mono-musl-support.patch -24f3fed752922d2ca3c151f21fedf6a257c7c74a155105a1aa09cdc847ba24e496212cb2d8548b134a8901c7da8d78c27fa93579211f7bdeadc598f808fed4a8 runtime_76500-properly-set-toolchain-for-alpine.patch d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -2dd195d5275245fe85bea2f75019fd3cbadcef7f5691b44c08db470265c6e7fcb2a50b3276a96df7547af76953623fdc92bd1ad51ccef6738813b78d22327fa3 runtime_83682-specify-notext-on-linux-musl-x86.patch -2ed962096eb9d8ae61831d224ceb05b8f77f5692f38a3457048d1b4abef705e8e4f676b81bb1a833e338e75ac8dc80b0631b1a45ad9a15c5597740b7320bfbb5 runtime_84413-support-adding-rids-with-dash-in-base-part.patch -929d5be2e4a213ad726652c24478e45abe1bf1d444c01a8975da007f246cb056916ad4681e541436faa89447e35c5e0a6101ae4ecaecc8083155b04e7138beb8 runtime_84444-suppress-clang-16-warnings.patch -1f7be536c4826638853f110ee88bbd554be015cc88c6491c1066830789be18ad324f8ed2b1b75ed7aad74457dcafc812730059cb25d36d6344bfae8a517c00c4 runtime_enable-runtime-marshalling.diff -d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80 runtime_remove-usage-of-off64-t.patch +c983a1ab7f06ac86691e0fa7a61fcad69a074d984ef4a4116bee43f20be918215963c7ec8ddd7edd70432b29b160ff78288183acc89fda15ce4a75bfdbf99ee3 runtime_83682-specify-notext-on-linux-musl-x86.patch +3354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch +887112eb2b103eadd6887529ebae7f9a75df2c2cb168e84fd40cc09f9bcd20917d428bbba06968b07b0a463890da82b1b2b1d033a3dd016e6494067464ae6f74 runtime_more-clang-16-suppression.patch +0c25319125ef5b0ad490b37a643c0c5257c796d5ed24f9ac404f698710b07de790bcbb0b6336d4a50025b94c3bff99b214951bd8f0a79a8d6f543ebaa300740f runtime_remove-usage-of-off64-t.patch " diff --git a/community/dotnet7-stage0/README.md b/community/dotnet7-stage0/README.md index 9bce6c4..b055bb1 100644 --- a/community/dotnet7-stage0/README.md +++ b/community/dotnet7-stage0/README.md @@ -1,17 +1,17 @@ -# dotnet7-stage0 +# dotnet8-stage0 -This is the .NET 7.0 package for Alpine Linux. +This is the .NET 8.0 package for Alpine Linux. Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael # Building info ## Generated packages -* `dotnet7` (empty package to go around `buildrepo` build ordering bug) -* `dotnet7-stage0-bootstrap` (packages binary bootstrap artifacts) -* `dotnet7-stage0-artifacts` (packages non-binary bootstrap artifacts) +* `dotnet8` (empty package to go around `buildrepo` build ordering bug) +* `dotnet8-stage0-bootstrap` (packages binary bootstrap artifacts) +* `dotnet8-stage0-artifacts` (packages non-binary bootstrap artifacts) -## How to build dotnet7 on Alpine +## How to build dotnet8 on Alpine As dotnet is a self-hosting compiler (thus it compiles using itself), it requires a bootstrap for the initial build. To solve this problem, this package follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) @@ -22,17 +22,20 @@ builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` has also been designed to be crossbuild aware, allowing bootstrapping to other platforms. -In summary, dotnet7 is built using three different aports. +In summary, dotnet8 is built using three different aports. -* `community/dotnet7-stage0` -Builds minimum components for full build of dotnet7, and packages these in an initial -`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet7-build` -Builds full and packages dotnet7 fully using either stage0 or previoulsy built -dotnet7 build. -* `community/dotnet7-runtime` +* `community/dotnet8-stage0` +Builds minimum components for full build of dotnet8, and packages these in an initial +`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. +* `community/dotnet8-runtime` +Builds full and packages dotnet8 fully using either stage0 or previoulsy built +dotnet8 build. +* `community/dotnet8-sdk` As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet7-build. +is required to package runtime bits from dotnet8-runtime. dotnet8-runtime only +builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is +released, the updated components are to be built on dotnet8-sdk rather than +simply repackaging dotnet8-runtime artifacts. ## Crossbuilding with `stage0` Crossbuilding `stage0` is a three step process: @@ -44,7 +47,7 @@ Crossbuilding `stage0` is a three step process: `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required keys. This makes it so that whatever package is not built in step 1 will be pulled from package repos -3. Crossbuild `dotnet7-stage0` via: +3. Crossbuild `dotnet8-stage0` via: ``` CHOST=$CTARGET_ARCH abuild -r ``` @@ -53,7 +56,7 @@ CHOST=$CTARGET_ARCH abuild -r This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` +In addition, the package is named `dotnet8` as opposed to `dotnet-8.0` to match Alpine Linux naming conventions for packages with many installable versions # Contributing @@ -69,7 +72,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` + - `cd community/dotnet8-runtime` 3. Make your changes. Don't forget to add a changelog. @@ -81,10 +84,10 @@ follow. 6. Commit the changes to the git repo in a git branch - - `git checkout -b dotnet7/` + - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: descriptive description'` + - `git commit -m 'community/dotnet8-runtime: descriptive description'` - `git push` 7. Create a merge request with your changes, tagging @ayakael for review. @@ -99,7 +102,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` + - `cd community/dotnet8-runtime` 3. Build the new upstream source tarball. Update the versions in the @@ -120,10 +123,10 @@ follow. 7. Commit the changes to the git repo in a git branch. - - `git checkout -b dotnet7/` + - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: upgrade to ` + - `git commit -m 'community/dotnet8-runtime: upgrade to ` - `git push` 8. Create a merge request with your changes, tagging @ayakael for review. diff --git a/community/dotnet7-stage0/build_fix-ga-versions.patch b/community/dotnet7-stage0/build_fix-ga-versions.patch new file mode 100644 index 0000000..31fe745 --- /dev/null +++ b/community/dotnet7-stage0/build_fix-ga-versions.patch @@ -0,0 +1,32 @@ +diff --git a/prereqs/git-info/runtime.props.orig b/prereqs/git-info/runtime.props +index f9dc4d6..093bd00 100644 +--- a/prereqs/git-info/runtime.props.orig ++++ b/prereqs/git-info/runtime.props +@@ -3,8 +3,8 @@ + + 5535e31a712343a63f5d7d796cd874e563e5ac14 + 20231031.3 +- 8.0.0-rtm.23531.3 ++ 8.0.0 + rtm + false + +- +\ No newline at end of file ++ +diff --git a/prereqs/git-info/aspnetcore.props.orig b/prereqs/git-info/aspnetcore.props +index d1494e8..b83649d 100644 +--- a/prereqs/git-info/aspnetcore.props.orig ++++ b/prereqs/git-info/aspnetcore.props +@@ -3,8 +3,8 @@ + + 3f1acb59718cadf111a0a796681e3d3509bb3381 + 20231031.12 +- 8.0.0-rtm.23531.12 ++ 8.0.0 + rtm + false + +- +\ No newline at end of file ++ diff --git a/community/dotnet7-stage0/installer_aspire-manifest-version-fix.patch b/community/dotnet7-stage0/installer_aspire-manifest-version-fix.patch new file mode 100644 index 0000000..d4623f7 --- /dev/null +++ b/community/dotnet7-stage0/installer_aspire-manifest-version-fix.patch @@ -0,0 +1,26 @@ +diff --git a/./src/installer/eng/Version.Details.xml.orig b/./src/installer/eng/Version.Details.xml +index a1cebfe..3f47a7f 100644 +--- a/./src/installer/eng/Version.Details.xml.orig ++++ b/./src/installer/eng/Version.Details.xml +@@ -172,7 +172,7 @@ + https://github.com/dotnet/emsdk + 2406616d0e3a31d80b326e27c156955bfa41c791 + +- ++ + https://dev.azure.com/dnceng/internal/_git/dotnet-aspire + 4b00c57d7ccf9a4c7e2aef211ab6bd8af3ee2324 + +diff --git a/./src/installer/eng/Versions.props.orig b/./src/installer/eng/Versions.props +index 329ab4e..897263d 100644 +--- a/./src/installer/eng/Versions.props.orig ++++ b/./src/installer/eng/Versions.props +@@ -238,7 +238,7 @@ + + + 8.0.100 +- 8.0.0-preview.1.23551.7 ++ 8.0.0-preview.1.23557.2 + 8.0.100-rc.2 + 8.0.0-rc.2.9373 + 34.0.0-rc.2.468 diff --git a/community/dotnet7-stage0/runtime_76500-mono-musl-support.patch b/community/dotnet7-stage0/runtime_76500-mono-musl-support.patch deleted file mode 100644 index 6685988..0000000 --- a/community/dotnet7-stage0/runtime_76500-mono-musl-support.patch +++ /dev/null @@ -1,325 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/76500 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Mono musl support - ---- - Directory.Build.props | 1 + - eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- - eng/native/configurecompiler.cmake | 7 +++++ - eng/native/tryrun.cmake | 6 +++- - src/coreclr/pal/src/CMakeLists.txt | 5 ++++ - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/coreclr/vm/i386/cgenx86.cpp | 4 +++ - src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ - src/mono/mono.proj | 32 +++++++++++++------- - src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++ - 11 files changed, 146 insertions(+), 19 deletions(-) - -diff --git a/src/runtime/Directory.Build.props b/src/runtime/Directory.Build.props -index 6f9b97c0a9c..4298a6df1d3 100644 ---- a/src/runtime/Directory.Build.props -+++ b/src/runtime/Directory.Build.props -@@ -22,7 +22,6 @@ - $(_hostOS) - true - true -- true - - - -@@ -154,7 +154,7 @@ - <_runtimeOS Condition="'$(TargetsMobile)' == 'true'">$(TargetOS.ToLowerInvariant()) - - <_portableOS>linux -- <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl'">linux-musl -+ <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl' or $(_runtimeOS.StartsWith('alpine'))">linux-musl - <_portableOS Condition="'$(_runtimeOS)' == 'linux-bionic'">linux-bionic - <_portableOS Condition="'$(_hostOS)' == 'OSX'">osx - <_portableOS Condition="'$(_runtimeOS)' == 'win' or '$(TargetOS)' == 'windows'">win -@@ -200,6 +199,9 @@ - - $(PackageRID) - $(_portableOS)-$(TargetArchitecture) -+ -+ true -+ true - - - -diff --git a/src/runtime/eng/native/tryrun.cmake b/src/runtime/eng/native/tryrun.cmake -index 6355b0988f7..056c6606b17 100644 ---- a/src/runtime/eng/native/tryrun.cmake -+++ b/src/runtime/eng/native/tryrun.cmake -@@ -8,7 +8,11 @@ endmacro() - - if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR -- EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl) -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) - - set(ALPINE_LINUX 1) - elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) -diff --git a/src/runtime/src/coreclr/pal/src/CMakeLists.txt b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -index d9726460ccf..c28563f8619 100644 ---- a/src/runtime/src/coreclr/pal/src/CMakeLists.txt -+++ b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -@@ -315,6 +315,11 @@ if(CLR_CMAKE_TARGET_LINUX) - target_link_libraries(coreclrpal ${UNWIND_LIBS}) - endif(CLR_CMAKE_USE_SYSTEM_LIBUNWIND) - -+ # bundled libunwind requires using libucontext on alpine and x86 and ppc64le -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ target_link_libraries(coreclrpal ucontext) -+ endif(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ - endif(CLR_CMAKE_TARGET_LINUX) - - if(CLR_CMAKE_TARGET_NETBSD) -diff --git a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -index 8d7f79ed3f0..043939ad2da 100644 ---- a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -+++ b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -@@ -25,7 +25,7 @@ - #include - #include - #include --#include -+#include - - #include "../inc/llvm/ELF.h" - -diff --git a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -index 811c84a140d..4e958a44b30 100644 ---- a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -+++ b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -@@ -1133,6 +1133,7 @@ extern "C" DWORD __stdcall avx512StateSupport() - - #else // !TARGET_UNIX - -+#if !__has_builtin(__cpuid) - void __cpuid(int cpuInfo[4], int function_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1143,7 +1144,9 @@ void __cpuid(int cpuInfo[4], int function_id) - : "0"(function_id) - ); - } -+#endif - -+#if !__has_builtin(__cpuidex) - void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1154,6 +1157,7 @@ void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - : "0"(function_id), "2"(subFunction_id) - ); - } -+#endif - - extern "C" DWORD __stdcall xmmYmmStateSupport() - { -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index cdff32677c0..08a82cd7e83 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -216,6 +216,35 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Enable the "full RELRO" options (RELRO & BIND_NOW) at link time - add_link_options(-Wl,-z,relro) - add_link_options(-Wl,-z,now) -+ # Detect Linux ID -+ # TODO: Eventually merge with eng/native/configureplatform.cmake -+ set(LINUX_ID_FILE "/etc/os-release") -+ if(CMAKE_CROSSCOMPILING) -+ set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") -+ endif() -+ -+ if(EXISTS ${LINUX_ID_FILE}) -+ execute_process( -+ COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ execute_process( -+ COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ endif() -+ -+ if(DEFINED CLR_CMAKE_LINUX_ID) -+ if(CLR_CMAKE_LINUX_ID STREQUAL alpine) -+ set(CLR_CMAKE_HOST_ALPINE_LINUX 1) -+ set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) -+ endif() -+ -+ if(CLR_CMAKE_LINUX_MUSL STREQUAL musl) -+ set(CLR_CMAKE_HOST_LINUX_MUSL 1) -+ endif() -+ endif(DEFINED CLR_CMAKE_LINUX_ID) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") - set(HOST_LINUX 1) - add_definitions(-D_GNU_SOURCE -D_REENTRANT) -@@ -893,6 +922,12 @@ if(HOST_IOS OR HOST_ANDROID OR HOST_MACCAT) - else() - set(DISABLE_DLLMAP 1) - endif() -+ -+if(CLR_CMAKE_HOST_ALPINE_LINUX) -+ # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -+ # larger than the initial committed stack size. -+ add_definitions(-DENSURE_PRIMARY_STACK_SIZE) -+endif() - ### End of OS specific checks - - include_directories("${CLR_SRC_NATIVE_DIR}") -diff --git a/src/runtime/src/mono/mono.proj b/src/runtime/src/mono/mono.proj -index 59fea4a2f72..5bac7fdf1c6 100644 ---- a/src/runtime/src/mono/mono.proj -+++ b/src/runtime/src/mono/mono.proj -@@ -554,19 +560,21 @@ - darwin-x86_64 - windows-x86_64 - <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) -- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">gnu -- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">android -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' != 'true'">linux-gnu -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' == 'true'">alpine-linux-musl -+ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">linux-android - <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">hf - <_Objcopy>objcopy -- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x86'">i686-$(_LinuxAbi)-$(_Objcopy) - <_Objcopy Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/llvm-objcopy -+ <_Objcopy Condition="'$(TargetsLinuxMusl)' == 'true' and '$(CrossBuild)' != 'true'">objcopy - - <_ObjcopyPrefix Condition="'$(MonoCrossDir)' != '' and '$(Platform)' == 'riscv64'">llvm-objcopy- - -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 30df4bac1f7..8698fd81206 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -368,6 +368,11 @@ if(NOT DISABLE_SHARED_LIBS) - target_sources(monosgen-shared PRIVATE $) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - target_link_libraries (monosgen-shared PRIVATE monoapi) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(monosgen-shared PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - target_include_directories (monosgen-shared PRIVATE monoapi) - if(TARGET_WIN32) - # on Windows the import library for the shared mono library will have the same name as the static library, -@@ -527,6 +532,10 @@ if(NOT DISABLE_EXECUTABLES) - set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) - endif() - target_link_libraries(mono-sgen PRIVATE monoapi monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(mono-sgen PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/mono/mono/mini/mini-runtime.c b/src/runtime/src/mono/mono/mini/mini-runtime.c -index c481f69adc8..4db6c9a0ae7 100644 ---- a/src/runtime/src/mono/mono/mini/mini-runtime.c -+++ b/src/runtime/src/mono/mono/mini/mini-runtime.c -@@ -4383,6 +4383,30 @@ mini_llvm_init (void) - #endif - } - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+/*++ -+ Function: -+ EnsureStackSize -+ -+ Abstract: -+ This fixes a problem on MUSL where the initial stack size reported by the -+ pthread_attr_getstack is about 128kB, but this limit is not fixed and -+ the stack can grow dynamically. The problem is that it makes the -+ functions ReflectionInvocation::[Try]EnsureSufficientExecutionStack -+ to fail for real life scenarios like e.g. compilation of corefx. -+ Since there is no real fixed limit for the stack, the code below -+ ensures moving the stack limit to a value that makes reasonable -+ real life scenarios work. -+ -+ --*/ -+static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void -+ensure_stack_size (size_t size) -+{ -+ volatile uint8_t *s = (uint8_t *)g_alloca(size); -+ *s = 0; -+} -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - void - mini_add_profiler_argument (const char *desc) - { -@@ -4544,6 +4568,11 @@ mini_init (const char *filename) - mono_w32handle_init (); - #endif - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+ // TODO: https://github.com/dotnet/runtime/issues/72920 -+ ensure_stack_size (5 * 1024 * 1024); -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - mono_thread_info_runtime_init (&ticallbacks); - - if (g_hasenv ("MONO_DEBUG")) { -diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h -index a1f0fe6f68e..a9db2d336ca 100644 ---- a/src/runtime/src/mono/mono/utils/mono-context.h -+++ b/src/runtime/src/mono/mono/utils/mono-context.h -@@ -11,6 +11,14 @@ - #ifndef __MONO_MONO_CONTEXT_H__ - #define __MONO_MONO_CONTEXT_H__ - -+/* -+ * Handle non-gnu libc versions with nothing in features.h -+ * We have no idea what they're compatible with, so always fail. -+ */ -+#ifndef __GLIBC_PREREQ -+# define __GLIBC_PREREQ(x,y) 0 -+#endif -+ - #include "mono-compiler.h" - #include "mono-sigcontext.h" - #include "mono-machine.h" -diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c -index 0929a0b49ec..86311e19507 100644 ---- a/src/runtime/src/native/libs/System.Native/pal_io.c -+++ b/src/runtime/src/native/libs/System.Native/pal_io.c -@@ -1267,7 +1267,7 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t - // Try copying data using a copy-on-write clone. This shares storage between the files. - if (sourceLength != 0) - { -- while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR); -+ while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR); - copied = ret == 0; - } - #endif --- -2.36.3 - diff --git a/community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch b/community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch deleted file mode 100644 index 8069db8..0000000 --- a/community/dotnet7-stage0/runtime_76500-properly-set-toolchain-for-alpine.patch +++ /dev/null @@ -1,97 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/arcade/pull/11608 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Mono musl support - ---- - Directory.Build.props | 1 + - eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- - eng/native/configurecompiler.cmake | 7 +++++ - eng/native/tryrun.cmake | 6 +++- - src/coreclr/pal/src/CMakeLists.txt | 5 ++++ - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/coreclr/vm/i386/cgenx86.cpp | 4 +++ - src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ - src/mono/mono.proj | 32 +++++++++++++------- - src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++ - 11 files changed, 146 insertions(+), 19 deletions(-) - -diff --git a/src/runtime/eng/common/cross/toolchain.cmake b/src/runtime/eng/common/cross/toolchain.cmake -index 561576be97c..a9db659f869 100644 ---- a/src/runtime/eng/common/cross/toolchain.cmake -+++ b/src/runtime/eng/common/cross/toolchain.cmake -@@ -60,13 +60,25 @@ elseif(TARGET_ARCH_NAME STREQUAL "armv6") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "ppc64le") - set(CMAKE_SYSTEM_PROCESSOR ppc64le) -- set(TOOLCHAIN "powerpc64le-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/powerpc64le-alpine-linux-musl) -+ set(TOOLCHAIN "powerpc64le-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "powerpc64le-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "riscv64") - set(CMAKE_SYSTEM_PROCESSOR riscv64) -- set(TOOLCHAIN "riscv64-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) -+ set(TOOLCHAIN "riscv64-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "riscv64-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "s390x") - set(CMAKE_SYSTEM_PROCESSOR s390x) -- set(TOOLCHAIN "s390x-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl) -+ set(TOOLCHAIN "s390x-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "s390x-linux-gnu") -+ endif() - elseif(TARGET_ARCH_NAME STREQUAL "x64") - set(CMAKE_SYSTEM_PROCESSOR x86_64) - if(LINUX) -@@ -83,7 +95,11 @@ elseif(TARGET_ARCH_NAME STREQUAL "x64") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") - set(CMAKE_SYSTEM_PROCESSOR i686) -- set(TOOLCHAIN "i686-linux-gnu") -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ set(TOOLCHAIN "i586-alpine-linux-musl") -+ else() -+ set(TOOLCHAIN "i686-linux-gnu") -+ endif() - if(TIZEN) - set(TIZEN_TOOLCHAIN "i586-tizen-linux-gnu/9.2.0") - endif() -@@ -253,8 +269,12 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64") - add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib64/gcc/${TIZEN_TOOLCHAIN}") - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") -- add_toolchain_linker_flag(-m32) -- -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ add_toolchain_linker_flag("--target=${TOOLCHAIN}") -+ add_toolchain_linker_flag("-Wl,--rpath-link=${CROSS_ROOTFS}/usr/lib/gcc/${TOOLCHAIN}") -+ else() -+ add_toolchain_linker_flag(-m32) -+ endif() - if(TIZEN) - add_toolchain_linker_flag("-B${CROSS_ROOTFS}/usr/lib/gcc/${TIZEN_TOOLCHAIN}") - add_toolchain_linker_flag("-L${CROSS_ROOTFS}/lib") -@@ -291,7 +311,11 @@ if(TARGET_ARCH_NAME MATCHES "^(arm|armel)$") - add_compile_options(-mfloat-abi=softfp) - endif() - elseif(TARGET_ARCH_NAME STREQUAL "x86") -- add_compile_options(-m32) -+ if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl) -+ add_compile_options(--target=${TOOLCHAIN}) -+ else() -+ add_compile_options(-m32) -+ endif() - add_compile_options(-Wno-error=unused-command-line-argument) - endif() - --- -2.36.3 - diff --git a/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch b/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch index 7afbfa6..6dfefc0 100644 --- a/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch +++ b/community/dotnet7-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch @@ -7,18 +7,18 @@ Subject: [PATCH] Specify -z notext on linux-musl-x86 src/coreclr/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) -diff --git a/src/runtime/src/coreclr/CMakeLists.txt.orig b/src/runtime/src/coreclr/CMakeLists.txt -index 7d1ce8d..5cacc78 100644 ---- a/src/runtime/src/coreclr/CMakeLists.txt.orig +diff --git a/src/runtime/src/coreclr/CMakeLists.txt b/src/runtime/src/coreclr/CMakeLists.txt +index 67b773bf78787..87d862a541ae6 100644 +--- a/src/runtime/src/coreclr/CMakeLists.txt +++ b/src/runtime/src/coreclr/CMakeLists.txt -@@ -105,6 +105,10 @@ if(CLR_CMAKE_HOST_UNIX) +@@ -109,6 +109,10 @@ if(CLR_CMAKE_HOST_UNIX) endif() endif() + if(CLR_CMAKE_TARGET_ALPINE_LINUX AND CLR_CMAKE_TARGET_ARCH_I386) -+ add_linker_flag(-Wl,-z,notext) ++ add_linker_flag(-Wl,-z,notext) + endif() + - add_subdirectory(pal) - add_subdirectory(hosts) - else() + if(NOT CLR_CMAKE_HOST_MACCATALYST AND NOT CLR_CMAKE_HOST_IOS AND NOT CLR_CMAKE_HOST_TVOS) + add_subdirectory(pal) + add_subdirectory(hosts) diff --git a/community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch b/community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch deleted file mode 100644 index b9990ec..0000000 --- a/community/dotnet7-stage0/runtime_84413-support-adding-rids-with-dash-in-base-part.patch +++ /dev/null @@ -1,164 +0,0 @@ -From abc761c2c5694e4029fea1a60dc1934951c66e26 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/84413 -From: Tom Deseyn -Date: Thu, 6 Apr 2023 13:18:11 +0200 -Subject: [PATCH 1/2] Microsoft.NETCore.Platforms: support adding rids with '-' - in the base part. - -Currently when trying to add a rid like 'linux-musl-x64' -the rid is not understood to be base = 'linux-musl', arch = 'x64'. - -Instead the parser considers a potential optional qualifier. -This causes the rid to be parsed as base = 'linux', arch = 'musl', -and qualifier = 'x64'. - -We know the rids being added won't have a qualifier. If we take -this into account while parsing, we can parse the rid correctly. ---- - .../Microsoft.NETCore.Platforms/src/RID.cs | 11 +++- - .../src/RuntimeGroupCollection.cs | 2 +- - .../tests/RidTests.cs | 50 +++++++++++++------ - 3 files changed, 47 insertions(+), 16 deletions(-) - -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -index 6457fd29cadf0..b464d5f0f54e3 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RID.cs -@@ -56,7 +56,7 @@ private enum RIDPart : int - Max = Qualifier - } - -- public static RID Parse(string runtimeIdentifier) -+ public static RID Parse(string runtimeIdentifier, bool noQualifier) - { - string[] parts = new string[(int)RIDPart.Max + 1]; - bool omitVersionDelimiter = true; -@@ -90,6 +90,15 @@ public static RID Parse(string runtimeIdentifier) - // version might be omitted - else if (current == ArchitectureDelimiter) - { -+ // The qualifier delimiter and architecture delimiter are the same. -+ // When there is no qualifier, there will be one delimiter past the base part -+ // for the architecture. -+ // So if we see another delimiter later in the string (for the architecture), -+ // extend the base part instead of starting the architecture part. -+ if (noQualifier && runtimeIdentifier.IndexOf(ArchitectureDelimiter, i + 1) != -1) -+ { -+ break; -+ } - // ensure there's no version later in the string - if (runtimeIdentifier.IndexOf(VersionDelimiter, i) != -1) - { -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -index e069508053105..31009a8d28e5e 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -@@ -34,7 +34,7 @@ public RuntimeGroupCollection(ICollection runtimeGroups) - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { -- RID rid = RID.Parse(runtimeIdentifier); -+ RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); - } -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -index 227bcbdd10d4d..8dee0ebeda17a 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/tests/RidTests.cs -@@ -10,35 +10,57 @@ public class RidTests - { - public static IEnumerable ValidRIDData() - { -- yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" } }; -- yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")} }; -- yield return new object[] { "linux", new RID() { BaseRID = "linux" } }; -- yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" } }; -- yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" } }; -- yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" } }; -- yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" } }; -- yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" } }; -- yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" } }; -- yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" } }; // demonstrates ambiguity, avoid using `-` in base -- yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" } }; // yes, we already have ambiguous RIDs -+ yield return new object[] { "win10-x64", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; -+ yield return new object[] { "win10", new RID() { BaseRID = "win", OmitVersionDelimiter = true, Version = new RuntimeVersion("10")}, null }; -+ yield return new object[] { "linux", new RID() { BaseRID = "linux" }, null }; -+ yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; -+ yield return new object[] { "linux-x64", new RID() { BaseRID = "linux", Architecture = "x64" }, null }; -+ yield return new object[] { "debian.10-x64", new RID() { BaseRID = "debian", Version = new RuntimeVersion("10"), Architecture = "x64" }, null }; -+ yield return new object[] { "linuxmint.19.2-x64", new RID() { BaseRID = "linuxmint", Version = new RuntimeVersion("19.2"), Architecture = "x64" }, null }; -+ yield return new object[] { "ubuntu.14.04-x64", new RID() { BaseRID = "ubuntu", Version = new RuntimeVersion("14.04"), Architecture = "x64" }, null }; -+ yield return new object[] { "foo-bar.42-arm", new RID() { BaseRID = "foo-bar", Version = new RuntimeVersion("42"), Architecture = "arm" }, null }; -+ yield return new object[] { "foo-bar-arm", new RID() { BaseRID = "foo", Architecture = "bar", Qualifier = "arm" }, // demonstrates ambiguity, avoid using `-` in base -+ new RID() { BaseRID = "foo-bar", Architecture = "arm" } }; -+ yield return new object[] { "linux-musl-x64", new RID() { BaseRID = "linux", Architecture = "musl", Qualifier = "x64" }, // yes, we already have ambiguous RIDs -+ new RID() { BaseRID = "linux-musl", Architecture = "x64" } }; - } - - [Theory] - [MemberData(nameof(ValidRIDData))] -- internal void ParseCorrectly(string input, RID expected) -+ internal void ParseCorrectly(string input, RID expected, RID? expectedNoQualifier) - { -- RID actual = RID.Parse(input); -+ _ = expectedNoQualifier; // unused -+ -+ RID actual = RID.Parse(input, noQualifier: false); - - Assert.Equal(expected, actual); - } - - [Theory] - [MemberData(nameof(ValidRIDData))] -- internal void ToStringAsExpected(string expected, RID rid) -+ internal void ParseCorrectlyNoQualifier(string input, RID expected, RID? expectedNoQualifier) -+ { -+ expectedNoQualifier ??= expected; -+ -+ RID actual = RID.Parse(input, noQualifier: true); -+ -+ Assert.Equal(expectedNoQualifier, actual); -+ } -+ -+ [Theory] -+ [MemberData(nameof(ValidRIDData))] -+ internal void ToStringAsExpected(string expected, RID rid, RID? expectedNoQualifierRid) - { - string actual = rid.ToString(); - - Assert.Equal(expected, actual); -+ -+ if (expectedNoQualifierRid is not null) -+ { -+ actual = expectedNoQualifierRid.ToString(); -+ -+ Assert.Equal(expected, actual); -+ } - } - } - } - -From f70da467ca94291039e0ea5b0723cb9db5e090e7 Mon Sep 17 00:00:00 2001 -From: Tom Deseyn -Date: Thu, 6 Apr 2023 18:14:31 +0200 -Subject: [PATCH 2/2] Update - src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs - -Co-authored-by: Eric StJohn ---- - .../Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -index 31009a8d28e5e..ec4762d71424c 100644 ---- a/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -+++ b/src/runtime/src/libraries/Microsoft.NETCore.Platforms/src/RuntimeGroupCollection.cs -@@ -34,6 +34,7 @@ public RuntimeGroupCollection(ICollection runtimeGroups) - /// - public void AddRuntimeIdentifier(string runtimeIdentifier, string parent) - { -+ // don't parse qualifier since we don't use them and they are ambiguous with `-` in base RID - RID rid = RID.Parse(runtimeIdentifier, noQualifier: true); - - AddRuntimeIdentifier(rid, parent); diff --git a/community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch b/community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch deleted file mode 100644 index e1f54fc..0000000 --- a/community/dotnet7-stage0/runtime_84444-suppress-clang-16-warnings.patch +++ /dev/null @@ -1,192 +0,0 @@ -From 4b82b0b1173981ea5f2c7baf003a66fad31208c9 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/84443 -From: Antoine Martin -Date: Thu, 6 Apr 2023 16:01:47 -0400 -Subject: [PATCH 1/2] Suppress clang-16 warnings (#81573) - ---- - eng/common/native/init-compiler.sh | 2 +- - eng/native/configurecompiler.cmake | 9 +++++++++ - src/coreclr/dlls/mscordbi/CMakeLists.txt | 5 +---- - src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 +++++++++++++++ - src/native/corehost/apphost/static/CMakeLists.txt | 4 ++-- - ...orts.src => singlefilehost_freebsdexports.src} | 4 ++++ - .../apphost/static/singlefilehost_unixexports.src | 4 ---- - 7 files changed, 32 insertions(+), 11 deletions(-) - rename src/native/corehost/apphost/static/{singlefilehost_OSXexports.src => singlefilehost_freebsdexports.src} (81%) - -diff --git a/src/runtime/eng/common/native/init-compiler.sh b/src/runtime/eng/common/native/init-compiler.sh -index 41a26d802a93f..f13b74080edf9 100644 ---- a/src/runtime/eng/common/native/init-compiler.sh -+++ b/src/runtime/eng/common/native/init-compiler.sh -@@ -71,7 +71,7 @@ if [[ -z "$CLR_CC" ]]; then - # Set default versions - if [[ -z "$majorVersion" ]]; then - # note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero. -- if [[ "$compiler" == "clang" ]]; then versions=( 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) -+ if [[ "$compiler" == "clang" ]]; then versions=( 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) - elif [[ "$compiler" == "gcc" ]]; then versions=( 12 11 10 9 8 7 6 5 4.9 ); fi - - for version in "${versions[@]}"; do -diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake -index 9090289f50e34..eaf5a867c5f6d 100644 ---- a/src/runtime/eng/native/configurecompiler.cmake -+++ b/src/runtime/eng/native/configurecompiler.cmake -@@ -447,6 +447,15 @@ if (CLR_CMAKE_HOST_UNIX) - add_compile_options(-Wno-incompatible-ms-struct) - - add_compile_options(-Wno-reserved-identifier) -+ -+ # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734 -+ # which we are not conforming to yet. -+ add_compile_options(-Wno-unsafe-buffer-usage) -+ -+ # other clang 16.0 suppressions -+ add_compile_options(-Wno-single-bit-bitfield-constant-conversion) -+ add_compile_options(-Wno-cast-function-type-strict) -+ add_compile_options(-Wno-incompatible-function-pointer-types-strict) - else() - add_compile_options(-Wno-uninitialized) - add_compile_options(-Wno-strict-aliasing) -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -index c24a90cf70409..95e92034e238f 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -+++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -@@ -100,10 +100,7 @@ elseif(CLR_CMAKE_HOST_UNIX) - mscordaccore - ) - -- # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols -- # if they are defined after they are used. Having all libs twice makes sure that ld will actually -- # find all symbols. -- target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) -+ target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) - - add_dependencies(mscordbi mscordaccore) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -index 891c01e144f5c..109fe6a5b5417 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -+++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -@@ -32,3 +32,18 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) - // Defer to the main debugging code. - return DbgDllMain(hInstance, dwReason, lpReserved); - } -+ -+#if defined(HOST_LINUX) && defined(TARGET_LINUX) -+PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); -+PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); -+ -+HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) -+{ -+ return DAC_PAL_RegisterModule(lpLibFileName); -+} -+ -+VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) -+{ -+ DAC_PAL_UnregisterModule(hInstance); -+} -+#endif -diff --git a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -index c37885bf5691c..a632d993c0f2a 100644 ---- a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -+++ b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt -@@ -65,8 +65,8 @@ if(CLR_CMAKE_TARGET_WIN32) - add_linker_flag("/DEF:${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost.def") - - else() -- if(CLR_CMAKE_TARGET_OSX) -- set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_OSXexports.src) -+ if(CLR_CMAKE_TARGET_FREEBSD) -+ set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_freebsdexports.src) - else() - set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_unixexports.src) - endif() -diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_freebsdexports.src -similarity index 81% -rename from src/native/corehost/apphost/static/singlefilehost_OSXexports.src -rename to src/native/corehost/apphost/static/singlefilehost_freebsdexports.src -index 18d5697e84580..1f9c517821855 100644 ---- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src -+++ b/src/runtime/src/native/corehost/apphost/static/singlefilehost_freebsdexports.src -@@ -9,3 +9,7 @@ g_dacTable - - ; Used by profilers - MetaDataGetDispenser -+ -+; FreeBSD needs to reexport these -+__progname -+environ -diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -index 1f9c517821855..18d5697e84580 100644 ---- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -+++ b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src -@@ -9,7 +9,3 @@ g_dacTable - - ; Used by profilers - MetaDataGetDispenser -- --; FreeBSD needs to reexport these --__progname --environ - -From b5b3114e6866ac0058b5e18da52f92a1738a915b Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Thu, 6 Apr 2023 16:35:18 -0400 -Subject: [PATCH 2/2] Fix DBI loading problem on Linux (#82461) - ---- - src/coreclr/dlls/mscordbi/CMakeLists.txt | 16 +++++++++++++++- - src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 --------------- - 2 files changed, 15 insertions(+), 16 deletions(-) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -index 95e92034e238f..c577651141e5c 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -+++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt -@@ -100,7 +100,21 @@ elseif(CLR_CMAKE_HOST_UNIX) - mscordaccore - ) - -- target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) -+ # Before llvm 16, lld was setting `--undefined-version` by default. The default was -+ # flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to -+ # `--undefined-version` for our use-case. -+ include(CheckLinkerFlag OPTIONAL) -+ if(COMMAND check_linker_flag) -+ check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION) -+ if (LINKER_SUPPORTS_UNDEFINED_VERSION) -+ add_linker_flag(-Wl,--undefined-version) -+ endif(LINKER_SUPPORTS_UNDEFINED_VERSION) -+ endif(COMMAND check_linker_flag) -+ -+ # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols -+ # if they are defined after they are used. Having all libs twice makes sure that ld will actually -+ # find all symbols. -+ target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) - - add_dependencies(mscordbi mscordaccore) - -diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -index 109fe6a5b5417..891c01e144f5c 100644 ---- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -+++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp -@@ -32,18 +32,3 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) - // Defer to the main debugging code. - return DbgDllMain(hInstance, dwReason, lpReserved); - } -- --#if defined(HOST_LINUX) && defined(TARGET_LINUX) --PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); --PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); -- --HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) --{ -- return DAC_PAL_RegisterModule(lpLibFileName); --} -- --VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) --{ -- DAC_PAL_UnregisterModule(hInstance); --} --#endif diff --git a/community/dotnet7-stage0/runtime_90251-rename-mono-cmake-host-var.patch b/community/dotnet7-stage0/runtime_90251-rename-mono-cmake-host-var.patch new file mode 100644 index 0000000..6a5fadd --- /dev/null +++ b/community/dotnet7-stage0/runtime_90251-rename-mono-cmake-host-var.patch @@ -0,0 +1,80 @@ +From 828269b7e68039f8bc0bdac66e2fd5c58b6d3471 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/pull/90251 +From: Antoine Martin +Date: Wed, 9 Aug 2023 11:36:39 -0400 +Subject: [PATCH 1/1] Rename CMAKE var for mono on libc-musl + +--- + src/mono/CMakeLists.txt | 6 +++--- + src/mono/mono/mini/CMakeLists.txt | 12 ++++++------ + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/runtime/src/coreclr/pgosupport.cmake b/src/runtime/src/coreclr/pgosupport.cmake +index 719ac14ad99..34a42781ab2 100644 +--- a/src/runtime/src/coreclr/pgosupport.cmake ++++ b/src/runtime/src/coreclr/pgosupport.cmake +@@ -25,13 +25,13 @@ function(add_pgo TargetName) + target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-generate) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -flto -fprofile-instr-generate") + if(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") +- if (CLR_CMAKE_HOST_ALPINE_LINUX) ++ if (CLR_CMAKE_TARGET_LINUX_MUSL) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/clang/${CMAKE_C_COMPILER_VERSION}") +- else(CLR_CMAKE_HOST_ALPINE_LINUX) ++ else(CLR_CMAKE_TARGET_LINUX_MUSL) + string(REPLACE "." ";" CLANG_VERSION "${CMAKE_C_COMPILER_VERSION}") + list(POP_FRONT CLANG_VERSION CLANG_VERSION_MAJOR) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/llvm-${CLANG_VERSION_MAJOR}/lib/clang/${CMAKE_C_COMPILER_VERSION}") +- endif(CLR_CMAKE_HOST_ALPINE_LINUX) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL) + endif(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") + if(NOT LD_LLVM) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -fuse-ld=gold") +diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt +index e04d9e9d364..00e54a25d69 100644 +--- a/src/runtime/src/mono/CMakeLists.txt ++++ b/src/runtime/src/mono/CMakeLists.txt +@@ -943,10 +943,10 @@ else() + set(DISABLE_DLLMAP 1) + endif() + +-if(CLR_CMAKE_HOST_ALPINE_LINUX) +- # Setting RLIMIT_NOFILE breaks debugging of coreclr on Alpine Linux for some reason ++if(CLR_CMAKE_TARGET_LINUX_MUSL) ++ # Setting RLIMIT_NOFILE breaks debugging of coreclr on musl-libc for some reason + add_definitions(-DDONT_SET_RLIMIT_NOFILE) +- # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is ++ # On musl-libc, we need to ensure that the reported stack range for the primary thread is + # larger than the initial committed stack size. + add_definitions(-DENSURE_PRIMARY_STACK_SIZE) + endif() +diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig b/src/runtime/src/mono/mono/mini/CMakeLists.txt +index 5d6ef3d..c3e5414 100644 +--- a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig ++++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt +@@ -400,9 +400,9 @@ if(NOT DISABLE_SHARED_LIBS) + endif() + target_compile_definitions(monosgen-shared PRIVATE -DMONO_DLL_EXPORT) + # Alpine Linux implements ucontext in a different library +- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + target_link_libraries(monosgen-shared PRIVATE ucontext) +- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) + if(MONO_SET_RPATH_ORIGIN) + set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") +@@ -601,10 +601,10 @@ if(NOT DISABLE_EXECUTABLES) + target_link_libraries(mono-sgen PRIVATE icu_shim_objects) + endif() + target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) +- # Alpine Linux implements ucontext in a different library +- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ # musl-libc implements ucontext in a different library ++ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + target_link_libraries(mono-sgen PRIVATE ucontext) +- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) + # if components are built statically, link them into runtime. + target_sources(mono-sgen PRIVATE "${mono-components-objects}") diff --git a/community/dotnet7-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch b/community/dotnet7-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch new file mode 100644 index 0000000..c72bc6b --- /dev/null +++ b/community/dotnet7-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch @@ -0,0 +1,30 @@ +From a73b8bacfcc5819926bc05173ab2f7850eb00da3 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/pull/91008 +From: Ulrich Weigand +Date: Wed, 23 Aug 2023 21:11:37 +0200 +Subject: [PATCH] [mono] Handle enum return type when inlining CreateInstance + +Use underlying base type when deciding how to inline a +CreateInstance invocation in mini_emit_inst_for_method. + +Fixes https://github.com/dotnet/runtime/issues/90292 +(Mono abort causing .NET 8 msbuild regression). +--- + src/mono/mono/mini/intrinsics.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/runtime/src/mono/mono/mini/intrinsics.c b/src/runtime/src/mono/mono/mini/intrinsics.c +index b1e5e76723147..ef77b7dc89f2e 100644 +--- a/src/runtime/src/mono/mono/mini/intrinsics.c ++++ b/src/runtime/src/mono/mono/mini/intrinsics.c +@@ -2079,7 +2079,9 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign + MonoType *t = method_context->method_inst->type_argv [0]; + MonoClass *arg0 = mono_class_from_mono_type_internal (t); + if (m_class_is_valuetype (arg0) && !mono_class_has_default_constructor (arg0, FALSE)) { +- if (m_class_is_primitive (arg0)) { ++ if (m_class_is_primitive (arg0) || m_class_is_enumtype (arg0)) { ++ if (m_class_is_enumtype (arg0)) ++ t = mono_class_enum_basetype_internal (arg0); + int dreg = alloc_dreg (cfg, mini_type_to_stack_type (cfg, t)); + mini_emit_init_rvar (cfg, dreg, t); + ins = cfg->cbb->last_ins; diff --git a/community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff b/community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff deleted file mode 100644 index f609cfa..0000000 --- a/community/dotnet7-stage0/runtime_enable-runtime-marshalling.diff +++ /dev/null @@ -1,1807 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/77364 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Enable runtime marshalling - -Dotnet7 introduced a bug where MkDir would sometimes have a snuffed errno. -This is a temporary workaround till upstream finds why the errno is being -turned into EAGAIN. - ---- - src/libraries/Common/src/DisableRuntimeMarshalling.cs | 2 +- - .../Common/src/Interop/Unix/System.Native/Interop.MkDir.cs | 4 ++-- - src/libraries/Common/tests/Common.Tests.csproj | 2 +- - src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj | 2 +- - .../Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj | 4 ++-- - .../UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj | 2 +- - .../tests/Common/Microsoft.Extensions.Logging.Tests.csproj | 2 +- - .../tests/Microsoft.Win32.Primitives.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.AccessControl.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.Tests.csproj | 2 +- - .../src/Microsoft.Win32.SystemEvents.csproj | 2 +- - .../tests/Microsoft.Win32.SystemEvents.Tests.csproj | 2 +- - src/libraries/System.Console/src/System.Console.csproj | 2 +- - .../System.Console/tests/System.Console.Tests.csproj | 2 +- - src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj | 2 +- - .../System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj | 2 +- - src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj | 2 +- - .../System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Debug.Tests.csproj | 2 +- - .../src/System.Diagnostics.EventLog.csproj | 2 +- - .../tests/System.Diagnostics.EventLog.Tests.csproj | 2 +- - .../src/System.Diagnostics.FileVersionInfo.csproj | 2 +- - .../System.Diagnostics.FileVersionInfo.Tests.csproj | 2 +- - .../src/System.Diagnostics.PerformanceCounter.csproj | 2 +- - .../tests/System.Diagnostics.PerformanceCounter.Tests.csproj | 2 +- - .../src/System.Diagnostics.Process.csproj | 2 +- - .../tests/System.Diagnostics.Process.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Tracing.Tests.csproj | 2 +- - .../src/System.DirectoryServices.AccountManagement.csproj | 2 +- - .../System.DirectoryServices.AccountManagement.Tests.csproj | 2 +- - .../src/System.DirectoryServices.Protocols.csproj | 2 +- - .../tests/System.DirectoryServices.Protocols.Tests.csproj | 2 +- - .../src/System.DirectoryServices.csproj | 2 +- - .../tests/System.DirectoryServices.Tests.csproj | 2 +- - .../System.Drawing.Common/src/System.Drawing.Common.csproj | 2 +- - .../tests/System.Drawing.Common.Tests.csproj | 2 +- - .../src/System.Drawing.Primitives.csproj | 2 +- - .../System.Formats.Tar/src/System.Formats.Tar.csproj | 2 +- - .../System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj | 2 +- - .../NlsTests/System.Globalization.Extensions.Nls.Tests.csproj | 2 +- - .../tests/NlsTests/System.Globalization.Nls.Tests.csproj | 2 +- - .../src/System.IO.Compression.Brotli.csproj | 2 +- - .../tests/System.IO.Compression.Brotli.Tests.csproj | 2 +- - .../src/System.IO.Compression.ZipFile.csproj | 2 +- - .../tests/System.IO.Compression.ZipFile.Tests.csproj | 2 +- - .../System.IO.Compression/src/System.IO.Compression.csproj | 2 +- - .../tests/System.IO.Compression.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.AccessControl.csproj | 2 +- - .../tests/System.IO.FileSystem.AccessControl.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.DriveInfo.csproj | 2 +- - .../tests/System.IO.FileSystem.DriveInfo.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.Watcher.csproj | 2 +- - .../tests/System.IO.FileSystem.Watcher.Tests.csproj | 2 +- - .../tests/System.IO.FileSystem.Tests.csproj | 2 +- - .../src/System.IO.IsolatedStorage.csproj | 2 +- - .../tests/System.IO.IsolatedStorage.Tests.csproj | 2 +- - .../src/System.IO.MemoryMappedFiles.csproj | 2 +- - .../tests/System.IO.MemoryMappedFiles.Tests.csproj | 2 +- - .../src/System.IO.Pipes.AccessControl.csproj | 2 +- - .../tests/System.IO.Pipes.AccessControl.Tests.csproj | 2 +- - src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj | 2 +- - .../System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj | 2 +- - src/libraries/System.IO.Ports/src/System.IO.Ports.csproj | 2 +- - .../System.IO.Ports/tests/System.IO.Ports.Tests.csproj | 2 +- - src/libraries/System.Management/src/System.Management.csproj | 2 +- - .../System.Management/tests/System.Management.Tests.csproj | 2 +- - .../src/System.Net.Http.WinHttpHandler.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Functional.Tests.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Unit.Tests.csproj | 2 +- - src/libraries/System.Net.Http/src/System.Net.Http.csproj | 2 +- - .../FunctionalTests/System.Net.Http.Functional.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Http.Unit.Tests.csproj | 2 +- - .../src/System.Net.HttpListener.csproj | 2 +- - .../tests/System.Net.HttpListener.Tests.csproj | 2 +- - src/libraries/System.Net.Mail/src/System.Net.Mail.csproj | 2 +- - .../tests/Functional/System.Net.Mail.Functional.Tests.csproj | 2 +- - .../tests/Unit/System.Net.Mail.Unit.Tests.csproj | 2 +- - .../src/System.Net.NameResolution.csproj | 2 +- - .../System.Net.NameResolution.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj | 2 +- - .../src/System.Net.NetworkInformation.csproj | 2 +- - src/libraries/System.Net.Ping/src/System.Net.Ping.csproj | 2 +- - .../FunctionalTests/System.Net.Ping.Functional.Tests.csproj | 2 +- - .../System.Net.Primitives/src/System.Net.Primitives.csproj | 2 +- - .../System.Net.Primitives.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.Primitives.Pal.Tests.csproj | 2 +- - .../UnitTests/System.Net.Primitives.UnitTests.Tests.csproj | 2 +- - src/libraries/System.Net.Quic/src/System.Net.Quic.csproj | 2 +- - .../FunctionalTests/System.Net.Quic.Functional.Tests.csproj | 2 +- - .../System.Net.Requests/src/System.Net.Requests.csproj | 2 +- - .../System.Net.Security/src/System.Net.Security.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Security.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Security.Unit.Tests.csproj | 2 +- - .../System.Net.Sockets/src/System.Net.Sockets.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Sockets.Tests.csproj | 2 +- - .../System.Net.WebSockets/src/System.Net.WebSockets.csproj | 2 +- - .../System.Private.Xml/src/System.Private.Xml.csproj | 2 +- - .../tests/System.Resources.Extensions.Tests.csproj | 2 +- - .../tests/System.Resources.ResourceManager.Tests.csproj | 2 +- - .../System.Runtime.Caching/src/System.Runtime.Caching.csproj | 2 +- - .../tests/System.Runtime.Caching.Tests.csproj | 2 +- - .../tests/System.Runtime.Extensions.Tests.csproj | 2 +- - ...em.Runtime.InteropServices.RuntimeInformation.Tests.csproj | 2 +- - .../System.Runtime.InteropServices.Tests.csproj | 2 +- - .../tests/System.Runtime.Intrinsics.Tests.csproj | 2 +- - .../System.Runtime.Serialization.Formatters.Tests.csproj | 2 +- - .../tests/NlsTests/System.Runtime.Nls.Tests.csproj | 2 +- - .../System.Runtime/tests/System.Runtime.Tests.csproj | 2 +- - .../src/System.Security.AccessControl.csproj | 2 +- - .../tests/System.Security.AccessControl.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Cng.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Csp.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.Pkcs.csproj | 2 +- - .../tests/System.Security.Cryptography.Pkcs.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.ProtectedData.csproj | 2 +- - .../System.Security.Cryptography.ProtectedData.Tests.csproj | 2 +- - ...System.Security.Cryptography.X509Certificates.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.csproj | 2 +- - .../tests/System.Security.Cryptography.Tests.csproj | 2 +- - .../tests/System.Security.Permissions.Tests.csproj | 2 +- - .../src/System.Security.Principal.Windows.csproj | 2 +- - .../tests/System.Security.Principal.Windows.Tests.csproj | 2 +- - .../src/System.ServiceProcess.ServiceController.csproj | 2 +- - .../System.ServiceProcess.ServiceController.Tests.csproj | 2 +- - src/libraries/System.Speech/src/System.Speech.csproj | 2 +- - src/libraries/System.Speech/tests/System.Speech.Tests.csproj | 2 +- - .../src/System.Text.Encoding.CodePages.csproj | 2 +- - .../src/System.Threading.AccessControl.csproj | 2 +- - .../tests/System.Threading.AccessControl.Tests.csproj | 2 +- - .../src/System.Transactions.Local.csproj | 2 +- - .../src/System.Windows.Extensions.csproj | 2 +- - .../tests/System.Windows.Extensions.Tests.csproj | 2 +- - 134 files changed, 136 insertions(+), 136 deletions(-) - -diff --git a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -index 9a6bc544e55..10ec1fce44a 100644 ---- a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -+++ b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -@@ -2,4 +2,4 @@ - // The .NET Foundation licenses this file to you under the MIT license. - - // Used to indicate that runtime marshalling should be disabled. --[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -+// [assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -diff --git a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -index a6bb1dc3c0f..751e0ac690b 100644 ---- a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -+++ b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -@@ -9,8 +9,8 @@ internal static partial class Interop - { - internal static partial class Sys - { -- [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -- private static partial int MkDir(ref byte path, int mode); -+ [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -+ private static extern int MkDir(ref byte path, int mode); - - internal static int MkDir(ReadOnlySpan path, int mode) - { -diff --git a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -index 72de3a2ba17..16adf14be81 100644 ---- a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -+++ b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -index 19ee3bde1b5..d390a06be81 100644 ---- a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -+++ b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);nullable - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -index 93be9b87c96..10117338458 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -@@ -1,8 +1,8 @@ - - - -- -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ -+ $(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -index 0743d679b15..8ec495e8345 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -@@ -1,7 +1,7 @@ -  - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -index 6586026447c..c284ea4f48c 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -@@ -1,7 +1,7 @@ - - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -index aa61641a9fa..56ed9a2c927 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -index 7f6d66bdba8..168a20a1115 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for Microsoft.Win32.RegistryKey. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -index 76442c6fb1f..e92db98f790 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -index 98652656e9c..1972ac8ad18 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);CA2249 - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -index 1feb97ef841..ae5ad78ce7f 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows -+ - true - true - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -index d7e7dc61211..640179e2960 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides access to Windows system event notifications. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -index 1a8e130bee4..131134daa80 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Console/src/System.Console.csproj b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -index 1c45c5a8f93..880b740def1 100644 ---- a/src/runtime/src/libraries/System.Console/src/System.Console.csproj -+++ b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -index f4b451d30e1..418f9b30039 100644 ---- a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -+++ b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows -+ $(NetCoreAppCurrent); - true - ..\src\Resources\Strings.resx - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -index 8fad480d961..6efc49b3004 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249;CA1838;CA1846 - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -index 85a15ebe3d2..a8183df7eef 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -index 1a1756a85ad..0fa7a416a0f 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -index 6f72486a944..66d1f92904e 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -index 601c003fc30..6c22aac1e01 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -@@ -1,7 +1,7 @@ - - - System.Diagnostics.Tests -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - false -diff --git a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -index dfae87cc90a..affb0753616 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -index d052ccaa0b6..3563132cda3 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -index a0dbb8e208b..4ae893f4765 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - annotations -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -index 2146bf437cb..dd3dfeb4ae4 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -index 2c273820afb..c158c49ec2e 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -@@ -2,7 +2,7 @@ - - $(DefineConstants);FEATURE_REGISTRY - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -index e23bb4a94a7..bfa37a8f919 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -index 35b1a833abb..18c323c28ae 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -index 8152e3c7f05..be32f5d3b5d 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -index 0bb24c8eadd..6155cac4498 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -index 56862519355..3e11d02035a 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 - true - true - true -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -index 9a78a3acd54..632de15c235 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -index 83a118e940d..7b045dc3c0b 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - - $(NoWarn);SYSLIB0003 -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -index df9c7ef864a..9cf9a016204 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - $(DefineConstants);DRAWING_NAMESPACE - true - CS0618 -diff --git a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -index 33f175f1456..0b14a790777 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - true - - -diff --git a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -index 697be7783e2..2efcb61d950 100644 ---- a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -@@ -1,7 +1,7 @@ -  - - System.Drawing -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -index 33a9aa8c1dc..ea69b03b8a8 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -index ca1b4d99e50..d4475c8781f 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - $(LibrariesProjectRoot)/Common/tests/Resources/Strings.resx - true -diff --git a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -index 61a409ffedc..38f61fb9197 100644 ---- a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows -+ - true - - -diff --git a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -index a9aeef49807..0284070ad05 100644 ---- a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - -- $(NetCoreAppCurrent)-windows -+ - 14.0 - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -index ced12496d65..d67e262836b 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -index 709f655902d..607c50be625 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -index 94999191663..f8506c2adbc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -index 29c88cb2f9c..b049a0f3caa 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -index 80007bcfe5f..ee0bf21ccfc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -index 229119e3aa3..2fcad878c05 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -index 494ef1959db..08ddf1c7dd9 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -index c42a680fa2f..fe12ddd7911 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -index 61225e58e8a..90c69fee153 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -index 00d1afd3c94..8071e492986 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -index 469005b661d..7edcd52db0c 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -index 1246c914ab8..a83fbe23499 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD - true - true - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -index e386671171d..746e218cc24 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - --working-dir=/test-dir - true -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -index 2309a8c007a..b16deb25f25 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -index 0410513c46c..1f4b92f6418 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -index 9be9a376620..56ed27283ac 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -index ef44754372e..4525b0aa830 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -index 3dd3c8a455b..82091dc68d0 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -index 386250a4320..e0e4eab4e8e 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -index b0956d6ba7b..77585616ea3 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -index 8f31d5dd604..2e6ae7616ea 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -index c341d6c3ba6..3173e525799 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(DefineConstants);SERIAL_PORTS - true -diff --git a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -index 9a1592778a7..b71f36bc2f1 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Management/src/System.Management.csproj b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -index 5b66be0b573..1352df29995 100644 ---- a/src/runtime/src/libraries/System.Management/src/System.Management.csproj -+++ b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - $(NoWarn);0618 - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -index b5a0ebaa389..45c62a15a8b 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -@@ -4,7 +4,7 @@ - $(DefineConstants);SYSNETHTTP_NO_OPENSSL;HTTP3 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -index 85139c5391f..f2f2c2e5696 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -@@ -3,7 +3,7 @@ - ../../src/Resources/Strings.resx - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -index b0e790da1d6..46e75182fae 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -index ff51965c789..d5f4d3637ca 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -index 5d2ce4cc280..323c647d2d6 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -index 4a7b913a457..f81cc0576f9 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -index 0fbb5d7c497..b466e0b9d96 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -index 6d7ee08de0b..76e1a178242 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -index f4588a2b4a1..a21ef6a5d18 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -index 2edc2e3601c..75c119af62a 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -index d36ad67504e..8b240730a52 100644 ---- a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -+++ b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -index 71b5d783c45..167b0a2c5f5 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -index 0a068b65b72..5ccac35d05f 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -index 84a5864cac9..3567f4a6ea7 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - $(DefineConstants);SYSTEM_NET_PRIMITIVES_DLL -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -index 4e2e897b0a6..7a48043aad5 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -index 2fb034467dc..633181e4b58 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -index 8cc3d0ff90f..098b0d7460a 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -@@ -3,7 +3,7 @@ - true - 169,649 - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -index 257af8dbb88..6f118e0bf88 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -index 62b1be2da62..45b87e1dddb 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - -diff --git a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -index d16970c9a19..6a5034037a3 100644 ---- a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -+++ b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - $(NoWarn);SYSLIB0014 - -diff --git a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -index e030690763e..ad96b0fb669 100644 ---- a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - $(DefineConstants);PRODUCT - true -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -index 7c3d432f34c..7fd430a9220 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -index 1dd366e72a0..6a184f9d405 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -@@ -10,7 +10,7 @@ - 436 - - $(NoWarn);3021 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -index 61f9c6fa2d4..2674e098d82 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -index 884db1eea54..86517b47af6 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -index c0c4ded0d33..b361cc90d32 100644 ---- a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -+++ b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -@@ -1,7 +1,7 @@ - - - True -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -index 405e6375a9f..2a5bd1faacb 100644 ---- a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -+++ b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - System.Xml - true - -diff --git a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -index ad289dc6319..2485635439b 100644 ---- a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -index 66cb937a3d1..12e027437bd 100644 ---- a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - - - -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -index 869129ba71f..41a41f7bebb 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - Annotations - true -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -index 8f08caf9b46..ee8e300954a 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows;net48 -+ $(NetCoreAppCurrent);net48 - true - - -diff --git a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -index 3e3e2937781..85074f9fba2 100644 ---- a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -index 3edd7d47f72..db7a23c27c5 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -index 34964fb33f2..1a78852a17b 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -index 6c0187cf21f..fef12aa096c 100644 ---- a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -@@ -4,7 +4,7 @@ - $(NoWarn),1718,SYSLIB0013 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(Features.Replace('nullablePublicOnly', '') - -diff --git a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -index 378b38abb93..971c431ca2e 100644 ---- a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 - - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -index 849edc8cd5c..2deaa7914ef 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows -+ - $(NoWarn),SYSLIB0013 - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -index fc6859854dc..260dafbd372 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - $(NoWarn),1718,SYSLIB0013 - true -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -index 35fabc2416c..a461103be90 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -index 05fd95a165f..f0c167ed082 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -index 4bfc1719abf..cc312cffe4e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);TESTING_CNG_IMPLEMENTATION -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -index 59d139c7749..a8e94e72847 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(NoWarn);SYSLIB0021 - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -index be33237e616..426ddb38e27 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) - true - true - $(NoWarn);CA5384 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -index 8523c0d8296..2045f05a28e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);net48 -+ $(NetCoreAppCurrent);net48 - - - $(DefineConstants);HAVE_THUMBPRINT_OVERLOADS - true - $(NoWarn);SYSLIB0026;SYSLIB0027;SYSLIB0028 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS - true - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -index cf25738f6e7..29d0f0734cb 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);INTERNAL_ASYMMETRIC_IMPLEMENTATIONS -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - $(NoWarn);CA5350;CA5351;CA5379;CA5384;SYSLIB0026 - - $(NoWarn);CS0809 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -index 50e110c0445..b32809447d3 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser - true - $(NoWarn);SYSLIB0021 - true -diff --git a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -index 73f50b209fb..7205c2e239a 100644 ---- a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - $(NoWarn);SYSLIB0003 - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -index a67d4af63eb..9fef2993b07 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -index e9caf5fa463..43e03119cb3 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -index 518c800ae01..2b465d475b0 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249 - true -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -index 1039fad47f4..99412bc09b8 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -index 22506f7bf96..9c53e796bd8 100644 ---- a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -+++ b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - - -diff --git a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -index 9139d0d2392..d81ff8a7ca1 100644 ---- a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -+++ b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -index 8883abba36b..c7ff6be8fec 100644 ---- a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -+++ b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -index 54c8e0bad5f..c9c91e64692 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for synchronization primitives. -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -index 3b9e105954d..14949ff735b 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - CA1805;IDE0059;CS1591 - $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) - -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -index ee9cb23d69e..741c633215b 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum) - true - true - Provides miscellaneous Windows-specific types -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -index e7b45293318..089fe0ef33f 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - --- -2.36.3 - diff --git a/community/dotnet7-stage0/runtime_more-clang-16-suppression.patch b/community/dotnet7-stage0/runtime_more-clang-16-suppression.patch new file mode 100644 index 0000000..1e94419 --- /dev/null +++ b/community/dotnet7-stage0/runtime_more-clang-16-suppression.patch @@ -0,0 +1,13 @@ +diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake +index c9a54547c0a..931da2cae5b 100644 +--- a/src/runtime/eng/native/configurecompiler.cmake ++++ b/src/runtime/eng/native/configurecompiler.cmake +@@ -488,6 +488,8 @@ if (CLR_CMAKE_HOST_UNIX) + # other clang 16.0 suppressions + add_compile_options(-Wno-single-bit-bitfield-constant-conversion) + add_compile_options(-Wno-cast-function-type-strict) ++ add_compile_options(-Wno-incompatible-function-pointer-types-strict) ++ add_compile_options(-Wno-ignored-attributes) + else() + add_compile_options(-Wno-uninitialized) + add_compile_options(-Wno-strict-aliasing) diff --git a/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch b/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch index a55dcde..cec5877 100644 --- a/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch +++ b/community/dotnet7-stage0/runtime_remove-usage-of-off64-t.patch @@ -1,15 +1,26 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 03712c3b684..99d8a457957 100644 ---- a/src/runtimr/src/coreclr/debug/createdump/crashinfounix.cpp +diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp +index 20b2494..165b190 100644 +--- a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig +++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -395,7 +395,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r +@@ -469,7 +469,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r // performance optimization. m_canUseProcVmReadSyscall = false; - assert(m_fd != -1); -- *read = pread64(m_fd, buffer, size, (off64_t)address); -+ *read = pread(m_fd, buffer, size, (off_t)address); + assert(m_fdMem != -1); +- *read = pread64(m_fdMem, buffer, size, (off64_t)address); ++ *read = pread(m_fdMem, buffer, size, (off_t)address); } if (*read == (size_t)-1) - - +diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp +index 5addb79..79655d1 100644 +--- a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig ++++ b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp +@@ -760,7 +760,7 @@ CrashInfo::PageMappedToPhysicalMemory(uint64_t start) + } + + uint64_t pagemapOffset = (start / PAGE_SIZE) * sizeof(uint64_t); +- uint64_t seekResult = lseek64(m_fdPagemap, (off64_t) pagemapOffset, SEEK_SET); ++ uint64_t seekResult = lseek(m_fdPagemap, (off_t) pagemapOffset, SEEK_SET); + if (seekResult != pagemapOffset) + { + int seekErrno = errno; From 596d3b6b7a32acc98b9670b76f50381c77a4de91 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 8 Jan 2024 22:01:17 -0500 Subject: [PATCH 069/738] dotnet8-runtime: upgrade for diff --- community/dotnet7-build/APKBUILD | 514 +++-- community/dotnet7-build/README.md | 64 +- .../aspire_fix-gitinfo-target.patch | 20 + ...aspnetcore_portable-build-workaround.patch | 43 + .../build_disable-package-validation.patch | 12 - .../build_disable-source-link.patch | 20 - .../build_enable-timestamps.patch | 6 +- community/dotnet7-build/dotnet.sh.in | 12 + .../installer_hard-dereference-tar-gz.patch | 13 + ...crossgen2rid-using-buildarchitecture.patch | 13 + .../roslyn-analyzer_disable-apphost.patch | 12 +- .../runtime_76500-mono-musl-support.patch | 325 --- ...682-specify-notext-on-linux-musl-x86.patch | 16 +- ...ime_90251-rename-mono-cmake-host-var.patch | 80 + .../runtime_enable-runtime-marshalling.diff | 1807 ----------------- .../runtime_enable-system-libunwind.diff | 14 +- .../runtime_more-clang-16-suppression.patch | 13 + .../runtime_remove-usage-of-off64-t.patch | 29 +- ...39-add-zsh-compdef-completion-script.patch | 35 - .../dotnet7-build/vstest_intent-net8.0.patch | 13 + 20 files changed, 532 insertions(+), 2529 deletions(-) create mode 100644 community/dotnet7-build/aspire_fix-gitinfo-target.patch create mode 100644 community/dotnet7-build/aspnetcore_portable-build-workaround.patch delete mode 100644 community/dotnet7-build/build_disable-package-validation.patch delete mode 100644 community/dotnet7-build/build_disable-source-link.patch create mode 100644 community/dotnet7-build/dotnet.sh.in create mode 100644 community/dotnet7-build/installer_hard-dereference-tar-gz.patch create mode 100644 community/dotnet7-build/installer_set-crossgen2rid-using-buildarchitecture.patch delete mode 100644 community/dotnet7-build/runtime_76500-mono-musl-support.patch create mode 100644 community/dotnet7-build/runtime_90251-rename-mono-cmake-host-var.patch delete mode 100644 community/dotnet7-build/runtime_enable-runtime-marshalling.diff create mode 100644 community/dotnet7-build/runtime_more-clang-16-suppression.patch delete mode 100644 community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch create mode 100644 community/dotnet7-build/vstest_intent-net8.0.patch diff --git a/community/dotnet7-build/APKBUILD b/community/dotnet7-build/APKBUILD index 99afff2..8eb690b 100644 --- a/community/dotnet7-build/APKBUILD +++ b/community/dotnet7-build/APKBUILD @@ -1,88 +1,44 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) -# secfixes: -# 7.0.103-r0: -# - CVE-2023-21808 -# 7.0.105-r0: -# - CVE-2023-28260 -# 7.0.107-r0: -# - CVE-2023-24895 -# - CVE-2023-24897 -# - CVE-2023-24936 -# - CVE-2023-29331 -# - CVE-2023-29337 -# - CVE-2023-32032 -# - CVE-2023-33126 -# - CVE-2023-33128 -# - CVE-2023-33135 -# 7.0.109-r0: -# - CVE-2023-33127 -# - CVE-2023-33170 -# 7.0.110-r0: -# - CVE-2023-38178 -# - CVE-2023-35390 -# - CVE-2023-38180 -# - CVE-2023-35391 -# 7.0.111-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# 7.0.112-r0: -# - CVE-2023-36435 -# - CVE-2023-38171 -# - CVE-2023-44487 -# 7.0.113-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# - CVE-2023-44487 -# - CVE-2023-38171 -# - CVE-2023-36435 -# 7.0.114-r0: -# - CVE-2023-36049 -# - CVE-2023-36558 - - -pkgname=dotnet7-build -pkgver=7.0.114 +pkgname=dotnet8-runtime +pkgver=8.0.0 pkgrel=0 -_gittag=v$pkgver -_giturl="https://github.com/dotnet/installer" -_testtag=e1cc0f181ffd4d755756d30d985513897d592ba4 -_bunnytag=v12 -_llvmver=16 +_gittag=v8.0.0 +_giturl="https://github.com/dotnet/dotnet" +_testtag=d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0 +_bunnytag=v15 _patches=" - build_disable-package-validation.patch - build_disable-source-link.patch + aspnetcore_portable-build-workaround.patch + aspire_fix-gitinfo-target.patch build_enable-timestamps.patch + installer_hard-dereference-tar-gz.patch roslyn-analyzer_disable-apphost.patch - runtime_76500-mono-musl-support.patch runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_enable-runtime-marshalling.diff + runtime_90251-rename-mono-cmake-host-var.patch runtime_enable-system-libunwind.diff + runtime_more-clang-16-suppression.patch runtime_remove-usage-of-off64-t.patch - sdk_14239-add-zsh-compdef-completion-script.patch + vstest_intent-net8.0.patch " _pkgver_macro=${pkgver%.*} _pkgver_prior=${pkgver%.*.*} _pkgver_name=${_pkgver_macro//[.0]} -pkgdesc="The .NET $_pkgver_macro bootstrap" +_pkgver_sdk=${pkgver/0./0.10} +pkgdesc="The .NET $_pkgver_macro Core runtime" # x86: blocked by https://github.com/dotnet/runtime/issues/77667 # armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# s390x | ppc64le: no diskspace / lack maintainer resources -arch="x86_64 armv7 aarch64" +# riscv64: blocked by https://github.com/dotnet/runtime/issues/84834 +arch="all !x86 !armhf !riscv64" url=https://dotnet.microsoft.com license="MIT" -# hack for dotnetx-build to be able to pull itself for bootstrapping -provides="dotnet$_pkgver_name-bootstrap" -provider_priority=$_pkgver_prior +provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" +depends=" + dotnet$_pkgver_name-hostfxr + icu-data-full + icu-libs + " checkdepends=" babeltrace binutils @@ -99,9 +55,8 @@ checkdepends=" which " makedepends=" - alpine-release bash - clang$_llvmver + clang cmake dotnet$_pkgver_name-bootstrap dotnet$_pkgver_name-bootstrap-artifacts @@ -121,7 +76,7 @@ makedepends=" libxml2-utils linux-headers lldb-dev - llvm$_llvmver-dev + llvm-dev lttng-ust-dev nodejs numactl-dev @@ -139,21 +94,26 @@ case $CARCH in esac subpackages=" - dotnet$_pkgver_name-artifacts:artifacts:noarch - dotnet$_pkgver_name-sdk - dotnet$_pkgver_name-templates:templates:noarch - dotnet-zsh-completion:zshcomp:noarch - dotnet-bash-completion:bashcomp:noarch - dotnet-doc - netstandard21-targeting-pack:netstandard_targeting_pack:noarch + aspnetcore$_pkgver_name-runtime:aspnetcore_runtime:noarch + aspnetcore$_pkgver_name-runtime-dbg:aspnetcore_dbg:noarch + aspnetcore$_pkgver_name-targeting-pack:aspnetcore_targeting_pack:noarch + dotnet$_pkgver_name-runtime-artifacts::noarch + dotnet$_pkgver_name-runtime-bootstrap + dotnet$_pkgver_name-runtime-dbg:runtime_dbg:noarch + dotnet$_pkgver_name-apphost-pack:apphost_pack + dotnet$_pkgver_name-hostfxr + dotnet$_pkgver_name-targeting-pack:targeting_pack:noarch + dotnet-host:host " source=" - https://lab.ilot.io/dotnet/installer/-/releases/$_gittag/downloads/tarball/dotnet-$_gittag.tar.xz + dotnet-tarball-$_gittag.tar.gz::https://github.com/dotnet/dotnet/archive/refs/tags/$_gittag.tar.gz + dotnet-release-$_gittag.json::https://github.com/dotnet/dotnet/releases/download/$_gittag/release.json dotnet-testsuite-$_testtag.tar.gz::https://github.com/redhat-developer/dotnet-regular-tests/archive/$_testtag.tar.gz dotnet-bunny-$_bunnytag.tar.gz::https://github.com/redhat-developer/dotnet-bunny/archive/$_bunnytag.tar.gz + dotnet.sh.in $_patches " -builddir="$srcdir"/dotnet-$_gittag +builddir="$srcdir"/dotnet-${_gittag/v} _checkdir="$srcdir"/dotnet-bunny-${_bunnytag/v} _testdir="$srcdir"/dotnet-regular-tests-$_testtag _cli_root="$srcdir"/bootstrap @@ -200,54 +160,9 @@ _fix_executable() { -exec chmod -x '{}' \; } -# generates tarball containing all components built by dotnet -snapshot() { - local _pkg="$srcdir"/${builddir##*/}.tar - ulimit -n 4096 - if [ -d "$srcdir" ]; then - cd "$srcdir" - else - mkdir -p "$srcdir" && cd "$srcdir" - fi - if [ -d "installer" ]; then - cd "$srcdir"/installer - else - git clone $_giturl --branch $_gittag && cd "$srcdir"/installer - fi - - sed 's||' -i src/SourceBuild/Arcade/tools/SourceBuildArcadeTarball.targets - - if [ -d "$_libdir/dotnet/bootstrap" ]; then - local _cli_root="$(find $_libdir/dotnet/bootstrap/${_pkgver_macro}* -maxdepth 0 -type d | sort -r | head -n 1)" - else - local _cli_root="" - fi - - _InitializeDotNetCli="$_cli_root" DOTNET_INSTALL_DIR="$_cli_root" DotNetBuildFromSource=true ./build.sh \ - /p:ArcadeBuildTarball=true \ - /p:TarballDir=$builddir \ - /p:TarballFilePath=$_pkg - - msg "Compressing ${builddir##*/}.tar to $SRCDEST" - xz -T0 -9 -vv -e -c > "$SRCDEST"/${builddir##*/}.tar.xz < "$_pkg" - - cd "$startdir" - abuild checksum -} - prepare() { default_prepare - # Parallel restore is broken on mono-based builds since dotnet7 - # see https://github.com/dotnet/runtime/issues/77364 - # A workaround via runtime_enable-runtime-marshalling.diff - case $CARCH in - s390x|ppc64le) - msg "runtime_enable-runtime-marshalling.diff" - patch -p1 -i "$srcdir"/runtime_enable-runtime-marshalling.diff - ;; - esac - # Using system libunwind is broken on aarch64|armv7, and unused on mono-based builds # see https://github.com/dotnet/source-build/issues/2408, case $CARCH in @@ -287,20 +202,18 @@ build() { ulimit -n 4096 - export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken + # Disable use of LTTng as tracing on lttng <=2.13.0 is broken # See https://github.com/dotnet/runtime/issues/57784. if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then export DOTNET_LTTng=0 fi case "$CARCH" in - x86*) ;; - *) - # clang doesn't implement this outside of x86, and it causes a later configure to fail - export CFLAGS="${CFLAGS/-fstack-clash-protection}" - export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}" + x86*) ;; + *) + # clang doesn't implement this outside of x86, and it causes a later configure to fail + export CFLAGS="${CFLAGS/-fstack-clash-protection}" + export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}" ;; esac @@ -318,8 +231,9 @@ build() { # part of https://github.com/dotnet/installer/pull/14792 that sets this flag # was not integrated in 7.0.1xx yet + # UseSharedCompilation=false also reduces chances of hangups on mono-based builds case $CARCH in - s390x|ppc64le) local args="$args /p:SourceBuildUseMonoRuntime=true";; + riscv64|s390x|ppc64le) local args="$args /p:SourceBuildUseMonoRuntime=true /p:UseSharedCompilation=false";; esac # Sets TargetRid manually as dotnet cannot be trusted to reliably compute @@ -341,6 +255,7 @@ build() { ./build.sh \ --with-sdk "$_cli_root" \ --with-packages "$_artifactsdir" \ + --release-manifest "$srcdir"/dotnet-release-$_gittag.json \ -- $args } @@ -350,12 +265,13 @@ check() { local _tests_timeout=1000 # Test suite disable flags # following tests can only work after packaging step - local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane" + local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane managed-symbols-available tools-in-path" # test broken: permission issue on lxc / pipelines - local _disabled_tests="$_disabled_tests createdump-aspnet workload" - # liblttng-ust_sys-sdt.h: no 'NT_STAPSDT' on Alpine's lttng-ust package - # lttng: known issue, see https://github.com/dotnet/runtime/issues/57784 - local _disabled_tests="$_disabled_tests liblttng-ust_sys-sdt.h lttng" + local _disabled_tests="$_disabled_tests createdump-aspnet" + # test broken: cannot pg_ctl can't create postgresql server + local _disabled_tests="$_disabled_tests system-data-odbc" + # test broken: no such file or directory bug + local _disabled_tests="$_disabled_tests limits" # {bundled,system}-libunwind: use system version on all but aarch64/armv7, as broken # see https://github.com/redhat-developer/dotnet-regular-tests/issues/113 # disable on mono-flavored runtime as mono does not use libunwind @@ -364,14 +280,10 @@ check() { s390x|ppc64le|armhf) local _disabled_tests="$_disabled_tests bundled-libunwind system-libunwind";; *) local _disabled_tests="$_disabled_tests bundled-libunwind";; esac - # test unit broken currently - local _disabled_tests="$_disabled_tests system-libunwind" # nativeaot is not supported on armv7 case $CARCH in armv7) local _disabled_tests="$_disabled_tests nativeaot" esac - # test unit hangs - local _disabled_tests="$_disabled_tests debugging-via-dotnet-dump" msg "Unpacking produced dotnet" export DOTNET_ROOT="$_checkdir/release" @@ -388,9 +300,12 @@ check() { _fix_executable "$DOTNET_ROOT" msg "Building turkey test suite" + if [ ! -d "$_logdir/check" ]; then + mkdir -p "$_logdir"/check + fi if [ ! -d "$_checkdir"/turkey ]; then cd "$_checkdir"/Turkey - dotnet publish -f netcoreapp3.1 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey + dotnet publish -bl:"$_logdir"/check/turkey.binlog -f net6.0 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey fi msg "Running test suite" @@ -400,39 +315,20 @@ check() { sed -i 's|"enabled": true|"enabled": false|' $i/test.json fi done - dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout || local ERROR=true + dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout -l "$_logdir"/check || local ERROR=true if [ $ERROR ]; then - msg "Check error reported, dumping logs" - for i in *.log; do - msg "Dumping $i" - cat "$i" - done + msg "Check error reported, please check logs" fi } package() { - # directory creation - install -dm 755 \ - "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver \ - "$pkgdir"/usr/share/man/man1 \ - "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver + install -dm 755 "$pkgdir"/$_libdir/dotnet/shared - # unpack sdk to bootstrap tar --use-compress-program="pigz" \ -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ - --no-same-owner - - # extract arch-specific artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ + -C "$pkgdir"/$_libdir/dotnet/ \ --no-same-owner \ - --wildcards \ - '*alpine*' - - # assemble docs - find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$pkgdir"/usr/share/man/man1/. \; + ./shared/Microsoft.NETCore.App # some files either should or should not have executable bits _fix_executable "$pkgdir" @@ -440,74 +336,23 @@ package() { # Disable use of LTTng as tracing on lttng <=2,13,0 is broken # See https://github.com/dotnet/runtime/issues/57784. if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - rm "$pkgdir"/$_libdir/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so + rm "$pkgdir"/$_libdir/dotnet/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so fi } -sdk() { - pkgdesc="The .NET $_pkgver_macro SDK" - # libucontext isn't automatically detected on all platforms - depends=" - aspnetcore$_pkgver_name-runtime - aspnetcore$_pkgver_name-targeting-pack - dotnet$_pkgver_name-apphost-pack - dotnet$_pkgver_name-targeting-pack - dotnet$_pkgver_name-templates - netstandard21-targeting-pack - libucontext - " - provides=" - dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel - dotnet$_pkgver_name-dev=$pkgver-r$pkgrel - " +runtime_dbg() { + pkgdesc="The .NET $_pkgver_macro Core runtime - pdb debug files" + depends="dotnet$_pkgver_name-runtime" + provides="dotnet-runtime-dbg-$_pkgver_macro=$pkgver-r$pkgrel" - install -dm 755 "$subpkgdir"/$_libdir/dotnet + install -dm 755 "$subpkgdir"/$_libdir/dotnet/shared - # sdk tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-symbols-sdk-$_pkgver_macro*.tar.gz \ -C "$subpkgdir"/$_libdir/dotnet/ \ --no-same-owner \ - ./sdk ./sdk-manifests + shared/Microsoft.NETCore.App - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" - - # See https://github.com/dotnet/source-build/issues/2579 - find "$subpkgdir" -type f -name 'testhost.x86' -delete - find "$subpkgdir" -type f -name 'vstest.console' -delete -} - -netstandard_targeting_pack() { - pkgdesc="The .NET 2.1 Standard targeting pack" - depends="dotnet-host" - provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./packs/NETStandard.Library.Ref - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -templates() { - pkgdesc="The .NET $_pkgver_macro templates" - depends="dotnet-host" - provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./templates - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" } artifacts() { @@ -518,67 +363,202 @@ artifacts() { # directory creation install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk \ "$subpkgdir"/usr/share/licenses # extract arch-agnostic artifacts to artifacts dir for use by future dotnet builds tar --use-compress-program="pigz" \ -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ + -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ --no-same-owner \ --exclude '*Intermediate*' \ --exclude '*alpine*' } -zshcomp() { +bootstrap() { + pkgdesc="The .NET $_pkgver_macro Core bootstrap" depends="" - pkgdesc="zsh completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack zsh" - depends="dotnet-host" - install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet -} + # hack for dotnetx-runtime to be able to pull itself for bootstrapping + provides="dotnet$_pkgver_name-bootstrap" + provider_priority=$_pkgver_prior -bashcomp() { - depends="" - pkgdesc="bash completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack bash-completion" - depends="dotnet-host" + # directory creation + install -dm 755 \ + "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/docs \ + "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk - install -dm 755 "$subpkgdir"/usr/share/bash-completion/completions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet -} - -doc() { - default_doc - pkgdesc="Docs for .NET" - - # licenses - install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet + # unpack sdk to bootstrap tar --use-compress-program="pigz" \ -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/usr/share/licenses/dotnet/ \ + -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/ \ + --no-same-owner + + # unpack sdk symbols to bootstrap + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-symbols-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/ \ + --no-same-owner + + # extract arch-specific artifacts to artifacts dir for use by future dotnet builds + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ --no-same-owner \ - ./LICENSE.txt ./ThirdPartyNotices.txt + --wildcards \ + '*alpine*' + + # assemble docs + find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/docs/. \; + + # completions + install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/. + install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/. + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" + + # Disable use of LTTng as tracing on lttng <=2,13,0 is broken + # See https://github.com/dotnet/runtime/issues/57784. + if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then + rm "$subpkgdir"/$_libdir/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so + fi +} + +host() { + pkgdesc="A generic driver for the .NET Core Command Line Interface" + depends="" + + install -dm 755 \ + "$subpkgdir"/etc/profile.d \ + "$subpkgdir"/etc/dotnet \ + "$subpkgdir"/usr/bin \ + "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./dotnet + + ln -s $_libdir/dotnet/dotnet "$subpkgdir"/usr/bin/dotnet + echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location + echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location_$_dotnet_arch + sed "s|%LIBDIR%|$_libdir/dotnet|" "$srcdir"/dotnet.sh.in > "$subpkgdir"/etc/profile.d/dotnet.sh +} + +hostfxr() { + pkgdesc="The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use." + depends="dotnet-host" + provides="dotnet-hostfxr-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./host + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" +} + +aspnetcore_runtime() { + pkgdesc="The ASP.NET $_pkgver_macro Core runtime" + depends="dotnet$_pkgver_name-runtime" + provides="aspnetcore-runtime-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./shared/Microsoft.AspNetCore.App + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" +} + +aspnetcore_dbg() { + pkgdesc="The ASP.NET $_pkgver_macro Core runtime - pdb debug files" + depends="aspnetcore$_pkgver_name-runtime" + provides="aspnetcore-runtime-dbg-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-symbols-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + shared/Microsoft.AspNetCore.App +} + +apphost_pack() { + pkgdesc="The .NET $_pkgver_macro Core apphost pack" + provides="dotnet-apphost-pack-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + --wildcards \ + './packs/Microsoft.NETCore.App.Host.*' + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" +} + +targeting_pack() { + pkgdesc="The .NET $_pkgver_macro Core targeting pack" + provides="dotnet-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./packs/Microsoft.NETCore.App.Ref + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" +} + +aspnetcore_targeting_pack() { + pkgdesc="The ASP.NET $_pkgver_macro Core targeting pack" + provides="aspnetcore-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + tar --use-compress-program="pigz" \ + -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ + -C "$subpkgdir"/$_libdir/dotnet/ \ + --no-same-owner \ + ./packs/Microsoft.AspNetCore.App.Ref + + # some files either should or should not have executable bits + _fix_executable "$subpkgdir" } sha512sums=" -ff554ad65e09b5dbce2bc617a6ed548081a2078b23f04ef7812309fe98e21303d0a090118a283cf5123c4a28690e63e3f151b364c56f8ee1e56ae6e63a4f50bc dotnet-v7.0.114.tar.xz -e9f3df13d093fac214778c1137857e065f58d4e0d2a48d540d8ed7bb41e2fd73b2b3f62a0aa5b0e80fa80a5b58ba77ff19b9d10a492802f8539e3a6ed79d299d dotnet-testsuite-e1cc0f181ffd4d755756d30d985513897d592ba4.tar.gz -0028d5d97b814b122d73137b4e0d64ca5d788aa0ae5fde500de722e23522827f2538f06e75acb17cc39b8917961ee78d1f0bbc84b2b624ae0e9bf88adca2ba6f dotnet-bunny-v12.tar.gz -429033f5f6a8e33eb849c29c1d6628faca13751e1b1e536179b491041034dcdee107cbff12f7e9f1ef68a178a0818c534113f63bc8bbc37de67ec900c23cacf4 build_disable-package-validation.patch -ebab0364deab5d99131e2724b7fbac668bc27ddf74958623af1913e49850df98b2d077d27324b2bbabbbcdf77ea48bf7a7ca83d0ced6f48bdb66cc1e8bbce4a4 build_disable-source-link.patch -86fbaa058f78bba100f534f4c4bd6d7254181909f70d264c0390d3dd89c878a14ba9b5d2de05271b2c07b73ead70e029488c926221f676d59e27e387e3e579e9 build_enable-timestamps.patch -4ac92d2d9190a55ee20d3e145a28a6953c98d3eb838c8acfb808b8839316443cb64da4a2c5787df0171fce7ef96ff6381043085ed90c23ec09ce9ac81571e675 roslyn-analyzer_disable-apphost.patch -b56d5053831c43b8fed48894735b9910020abbae62b2b57bc9a423cd5ef09f412025e56dd9ce1994f551b87155d682796203fd351ca7fb8a29658078a6d4b029 runtime_76500-mono-musl-support.patch +094265462d66d97b51ebfbe5fb06d4a679b97881f1f5a07a87a282a96eeaabfe97ca42061d59aac71dd8861c07f07dda16a72e29ae03167407e51d3fd2767562 dotnet-tarball-v8.0.0.tar.gz +55f2c56f7fbed4137ebe5e81c7b86d199d7ff91c6e19fbc9a4af8cd5d0f0195273356ead8b80aedfff56a3d704a541a7c2a7395bec3fa5d6585f3afd056b1220 dotnet-release-v8.0.0.json +8fe41ddd03c1b98dc9eec5e337ca0dcc8fbeff65b67ac1a383bd7d1e5fd3c21b820dacd498d1c2268445bb634cfb9dba3e8924e71a98f2ccd8221b17fb079044 dotnet-testsuite-d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0.tar.gz +7f59b10878aa90a6953ee4d88d08fa932910a24018dace92b173ee87c847d14734f93dc5fc031982a3d0a5cb4ac223b83d0e548531c23c4e3326dc83510989a9 dotnet-bunny-v15.tar.gz +c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in +ad7373a112acc07a6a7bbc522d417b26d90b3e3ae9c1e66a6cc70af16af7e7111d9764e7758062d0a5e67f026cc44f2b111051c3d484bd56917f2144db88588b aspnetcore_portable-build-workaround.patch +e5b9b947226456844f705e66f3f19d4519ce88f360e3f3413999c2867c31d9008db78f5806bfee7185d7548c6279ef6492a40ff24c20ed9d58b6ef66b167d7a8 aspire_fix-gitinfo-target.patch +eed7a7481a967f6938de956a6df485efa6dd61bf36ae4a768493cb1f7da0296dc91e0f2f89f7c302083ba9cf0c778e28228ec1b52e902077a00072d7d9957ef3 build_enable-timestamps.patch +ab362bdbbea8d8116b6bf7bf58e330ce6d7d171b42613ac03514f76afa2574b75d6566148d1b72047fbfe61b40ac67b3f2d8af87a7074c790bf882a5b7e73960 installer_hard-dereference-tar-gz.patch +097db705c787501782a1b203e8c453453075dfcadc4f5282849c6ffdda4d7832f75c56089bced4542cc83704fe33842cc725084dac2ba261cacdaf54ae468b3c roslyn-analyzer_disable-apphost.patch d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -1f7be536c4826638853f110ee88bbd554be015cc88c6491c1066830789be18ad324f8ed2b1b75ed7aad74457dcafc812730059cb25d36d6344bfae8a517c00c4 runtime_enable-runtime-marshalling.diff -293742ab307bef459a21deadcc4ad7c7996cc4b490910a36c2763b8ad25cc8a91c4e03b6290567cd1030f69638d0156c5b6970887858fb091f8482b67356065d runtime_enable-system-libunwind.diff -d972e77df27748a80c9b23eca12f9fbd78be97f9034b79cc5703ba58eb6750171d9a115314300f883620ccbca89c65a99ca7a45d54a421b028b590190b4bed80 runtime_remove-usage-of-off64-t.patch -d1b4ebcbb1a6815fc0ce4c471485c232618e60968a879309fb8336821a9351d2e0028d9f7726c0c041c750b497a0baa47400c78c9ceff550b91b4a6c2816fc41 sdk_14239-add-zsh-compdef-completion-script.patch +3354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch +39e1b848d1ae81e4b81758522de7d3e36b11d2ab626565efb8e4cceae8da29018277709f0af8fcfa75be8da79f8d6432eb6aac49a5e82510c3aca34632df4d8e runtime_enable-system-libunwind.diff +887112eb2b103eadd6887529ebae7f9a75df2c2cb168e84fd40cc09f9bcd20917d428bbba06968b07b0a463890da82b1b2b1d033a3dd016e6494067464ae6f74 runtime_more-clang-16-suppression.patch +0c25319125ef5b0ad490b37a643c0c5257c796d5ed24f9ac404f698710b07de790bcbb0b6336d4a50025b94c3bff99b214951bd8f0a79a8d6f543ebaa300740f runtime_remove-usage-of-off64-t.patch +5c74abbd7ea71ba6164f71b866c9da564db9ccd95f1a9a8b82f5b0b599fab6d59d64ba1157ec13d7ac36d23145f3d9de2189ed6c40f56e46555ab378c161948b vstest_intent-net8.0.patch " diff --git a/community/dotnet7-build/README.md b/community/dotnet7-build/README.md index 4c2c6df..14cde12 100644 --- a/community/dotnet7-build/README.md +++ b/community/dotnet7-build/README.md @@ -1,22 +1,23 @@ -# dotnet7-build +# dotnet8-runtime -This is the .NET 7.0 package for Alpine Linux. +This is the .NET 8.0 package for Alpine Linux. Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael # Building info ## Generated packages -* `dotnet7-build` (aimed for internal use as bootstrap) -* `dotnet7-build-artifacts` (aimed for internal use as bootstrap) -* `dotnet7-sdk` -* `dotnet7-templates` (required by sdk) -* `dotnet-zsh-completion` -* `dotnet-bash-completion` -* `dotnet-doc` -* `netstandard21-targeting-pack` +* `aspnetcore8-runtime` +* `aspnetcore8-targeting-pack` +* `dotnet8-apphost-pack` (used by dotnet8-runtime) +* `dotnet8-hostfxr` (used by dotnet-host) +* `dotnet8-runtime` +* `dotnet8-runtime-artifacts` (aimed for internal use as bootstrap) +* `dotnet8-runtime-bootstrap` (aimed for internal use as bootstrap) +* `dotnet8-targeting-pack` +* `dotnet-host` -## How to build dotnet7 on Alpine +## How to build dotnet8 on Alpine As dotnet is a self-hosting compiler (thus it compiles using itself), it requires a bootstrap for the initial build. To solve this problem, this package follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) @@ -27,17 +28,20 @@ builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` has also been designed to be crossbuild aware, allowing bootstrapping to other platforms. -In summary, dotnet7 is built using three different aports. +In summary, dotnet8 is built using three different aports. -* `community/dotnet7-stage0` -Builds minimum components for full build of dotnet7, and packages these in an initial -`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet7-build` -Builds full and packages dotnet7 fully using either stage0 or previoulsy built -dotnet7 build. -* `community/dotnet7-runtime` +* `community/dotnet8-stage0` +Builds minimum components for full build of dotnet8, and packages these in an initial +`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. +* `community/dotnet8-runtime` +Builds full and packages dotnet8 fully using either stage0 or previoulsy built +dotnet8 build. +* `community/dotnet8-sdk` As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet7-build. +is required to package sdk bits from dotnet8-runtime. dotnet8-runtime only +builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is +released, the updated components are to be built on dotnet8-sdk rather than +simply repackaging dotnet8-runtime artifacts. ## Crossbuilding with `stage0` Crossbuilding `stage0` is a three step process: @@ -49,7 +53,7 @@ Crossbuilding `stage0` is a three step process: `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required keys. This makes it so that whatever package is not built in step 1 will be pulled from package repos -3. Crossbuild `dotnet7-stage0` via: +3. Crossbuild `dotnet8-stage0` via: ``` CHOST=$CTARGET_ARCH abuild -r ``` @@ -58,7 +62,7 @@ CHOST=$CTARGET_ARCH abuild -r This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` +In addition, the package is named `dotnet8` as opposed to `dotnet-8.0` to match Alpine Linux naming conventions for packages with many installable versions # Contributing @@ -74,7 +78,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` + - `cd community/dotnet8-runtime` 3. Make your changes. Don't forget to add a changelog. @@ -86,15 +90,15 @@ follow. 6. Commit the changes to the git repo in a git branch - - `git checkout -b dotnet7/` + - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: descriptive description'` + - `git commit -m 'community/dotnet8-runtime: descriptive description'` - `git push` 7. Create a merge request with your changes, tagging @ayakael for review. -8. Once the tests in the merge-request pass, and reviewers are happy, your changes +8. Once the tests in the pull-request pass, and reviewers are happy, your changes will be merged. ## Updating to an new upstream release @@ -104,7 +108,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` + - `cd community/dotnet8-runtime` 3. Build the new upstream source tarball. Update the versions in the @@ -125,15 +129,15 @@ follow. 7. Commit the changes to the git repo in a git branch. - - `git checkout -b dotnet7/` + - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: upgrade to ` + - `git commit -m 'community/dotnet8-runtime: upgrade to ` - `git push` 8. Create a merge request with your changes, tagging @ayakael for review. -9. Once the tests in the merge-request pass, and reviewers are happy, your changes +9. Once the tests in the pull-request pass, and reviewers are happy, your changes will be merged. # Testing diff --git a/community/dotnet7-build/aspire_fix-gitinfo-target.patch b/community/dotnet7-build/aspire_fix-gitinfo-target.patch new file mode 100644 index 0000000..7066d02 --- /dev/null +++ b/community/dotnet7-build/aspire_fix-gitinfo-target.patch @@ -0,0 +1,20 @@ +diff --git a/src/aspire/Directory.Build.targets.orig b/src/aspire/Directory.Build.targets +index 511adb03a5d..d62a050caab 100644 +--- a/src/aspire/Directory.Build.targets.orig ++++ b/src/aspire/Directory.Build.targets +@@ -6,13 +6,12 @@ + README.md + + +- +- ++ + + + + + + +- ++ + diff --git a/community/dotnet7-build/aspnetcore_portable-build-workaround.patch b/community/dotnet7-build/aspnetcore_portable-build-workaround.patch new file mode 100644 index 0000000..43f2ce0 --- /dev/null +++ b/community/dotnet7-build/aspnetcore_portable-build-workaround.patch @@ -0,0 +1,43 @@ +From 451aa3e9544b0214d0e8e844c27af3847f5bf391 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/installer/pull/13410 +From: Antoine Martin +Date: Fri, 18 Feb 2022 05:14:39 +0000 +Subject: [PATCH 1/1] musl build fix + +Line causes build of aspnetcore on arm to look for linux version of +CrossGen2 rather than linux-musl. This removes the line so that +BuildOsName is pulled from TargetOsName as expected + +This is now only necessary for portable +builds, as https://github.com/dotnet/installer/pull/14549 has fixed +issues relating to musl build on full source-build + +--- + .../App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj.orig b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj +index 77dce00..b31b36d 100644 +--- a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj.orig ++++ b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj +@@ -103,8 +103,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant + Special case the crossgen2 package reference on Windows to avoid the x86 package when building in Visual Studio. + --> + $(TargetOsName) +- linux + $(TargetRuntimeIdentifier.Substring(0,$(TargetRuntimeIdentifier.IndexOf('-')))) + x64 + $(BuildArchitecture) + PkgMicrosoft_NETCore_App_Crossgen2_$(BuildOsName.Replace('.', '_'))-$(Crossgen2BuildArchitecture) +diff --git a/repo-projects/aspnetcore.proj.orig b/repo-projects/aspnetcore.proj +index 289b506..fadcc0d 100644 +--- a/repo-projects/aspnetcore.proj.orig ++++ b/repo-projects/aspnetcore.proj +@@ -13,6 +13,7 @@ + $(StandardSourceBuildArgs.Replace('--publish', '')) + + $(BuildCommandArgs) --arch $(Platform) ++ $(BuildCommandArgs) --os-name linux-musl + $(BuildCommandArgs) --no-build-repo-tasks + $(BuildCommandArgs) --no-build-nodejs + $(BuildCommandArgs) /p:PublishCompressedFilesPathPrefix=$(SourceBuiltAspNetCoreRuntime) diff --git a/community/dotnet7-build/build_disable-package-validation.patch b/community/dotnet7-build/build_disable-package-validation.patch deleted file mode 100644 index 3200c67..0000000 --- a/community/dotnet7-build/build_disable-package-validation.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/repos/aspnetcore.proj.orig b/repos/aspnetcore.proj -index cea712c1bfa..cf5099da788 100644 ---- a/repos/aspnetcore.proj.orig -+++ b/repos/aspnetcore.proj -@@ -10,6 +10,7 @@ - $(BuildCommandArgs) --no-build-nodejs - $(BuildCommandArgs) /p:PublishCompressedFilesPathPrefix=$(SourceBuiltAspNetCoreRuntime) - $(BuildCommandArgs) /p:PortableBuild=false /p:TargetRuntimeIdentifier=$(TargetRid) -+ $(BuildCommandArgs) /p:EnablePackageValidation=false - - $(BuildCommandArgs) /p:MicrosoftNetFrameworkReferenceAssembliesVersion=1.0.0 diff --git a/community/dotnet7-build/build_disable-source-link.patch b/community/dotnet7-build/build_disable-source-link.patch deleted file mode 100644 index acf8132..0000000 --- a/community/dotnet7-build/build_disable-source-link.patch +++ /dev/null @@ -1,20 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Disable source link - -Addresses undiagnosed "Source control information is not available" error - ---- -diff --git a/repos/installer.proj b/repos/installer.proj -index 3a9756a27b7..4968184b14e 100644 ---- a/repos/installer.proj -+++ b/repos/installer.proj -@@ -26,6 +26,7 @@ - --> - $(BuildCommandArgs) /p:NETCoreAppMaximumVersion=99.9 - $(BuildCommandArgs) /p:OSName=$(OSNameOverride) -+ $(BuildCommandArgs) /p:EnableSourceLink=false - $(BuildCommandArgs) /p:PortableOSName=$(PortableOS) - $(BuildCommandArgs) /p:Rid=$(TargetRid) - $(BuildCommandArgs) /p:DOTNET_INSTALL_DIR=$(DotNetCliToolDir) diff --git a/community/dotnet7-build/build_enable-timestamps.patch b/community/dotnet7-build/build_enable-timestamps.patch index 98c7a50..5977a41 100644 --- a/community/dotnet7-build/build_enable-timestamps.patch +++ b/community/dotnet7-build/build_enable-timestamps.patch @@ -1,7 +1,7 @@ -diff --git a/repos/Directory.Build.props b/repos/Directory.Build.props +diff --git a/repo-projects/Directory.Build.props b/repo-projects/Directory.Build.props index b70a3161fef..d57f9393299 100644 ---- a/repos/Directory.Build.props -+++ b/repos/Directory.Build.props +--- a/repo-projects/Directory.Build.props ++++ b/repo-projects/Directory.Build.props @@ -134,6 +134,7 @@ $(StandardSourceBuildArgs) $(FlagParameterPrefix)pack $(StandardSourceBuildArgs) $(FlagParameterPrefix)publish diff --git a/community/dotnet7-build/dotnet.sh.in b/community/dotnet7-build/dotnet.sh.in new file mode 100644 index 0000000..f85eb29 --- /dev/null +++ b/community/dotnet7-build/dotnet.sh.in @@ -0,0 +1,12 @@ +# Set location for AppHost lookup +[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=%LIBDIR% + +# Add dotnet tools directory to PATH +DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" +case "$PATH" in + *"$DOTNET_TOOLS_PATH"* ) true ;; + * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; +esac + +# Extract self-contained executables under HOME to avoid multi-user issues from using the default '/var/tmp' +[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/community/dotnet7-build/installer_hard-dereference-tar-gz.patch b/community/dotnet7-build/installer_hard-dereference-tar-gz.patch new file mode 100644 index 0000000..4f92e2c --- /dev/null +++ b/community/dotnet7-build/installer_hard-dereference-tar-gz.patch @@ -0,0 +1,13 @@ +diff --git a/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs.orig b/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs +index 06b9857..066d595 100644 +--- a/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs.orig ++++ b/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs +@@ -131,7 +131,7 @@ private string GetSourceSpecification() + + private string GetDestinationArchive() + { +- return $"-czf {DestinationArchive}"; ++ return $"--hard-dereference -czf {DestinationArchive}"; + } + + private string GetExcludes() diff --git a/community/dotnet7-build/installer_set-crossgen2rid-using-buildarchitecture.patch b/community/dotnet7-build/installer_set-crossgen2rid-using-buildarchitecture.patch new file mode 100644 index 0000000..309e092 --- /dev/null +++ b/community/dotnet7-build/installer_set-crossgen2rid-using-buildarchitecture.patch @@ -0,0 +1,13 @@ +diff --git a/src/installer/src/redist/targets/GenerateLayout.targets.orig b/src/installer/src/redist/targets/GenerateLayout.targets +index a27834f..0c899d4 100644 +--- a/src/installer/src/redist/targets/GenerateLayout.targets.orig ++++ b/src/installer/src/redist/targets/GenerateLayout.targets +@@ -85,7 +85,7 @@ + windowsdesktop-runtime-$(MicrosoftWindowsDesktopAppRuntimePackageVersion)-$(SharedFrameworkRid)$(ArchiveExtension) + + $(HostOSName)-$(BuildArchitecture) +- $(SharedFrameworkRid) ++ $(SharedFrameworkRid.SubString(0, $(SharedFrameworkRid.LastIndexOf('-'))))-$(BuildArchitecture) + + $(SharedFrameworkRid) + linux-x64 diff --git a/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch b/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch index 7ebf967..6d5d57c 100644 --- a/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch +++ b/community/dotnet7-build/roslyn-analyzer_disable-apphost.patch @@ -7,19 +7,19 @@ Roslyn-analyzer can't seem to find apphost produced by runtime build on ppc64le This disables its use as it isn't necessary --- -diff --git a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -index 044a2aba46..3d37e147b3 100644 ---- a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj +diff --git a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj.orig b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj +index 7b454a4..bbe18ae 100644 +--- a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj.orig +++ b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -@@ -15,6 +15,7 @@ - Release +@@ -16,6 +16,7 @@ false true + $(MicrosoftCodeAnalysisVersionForTests) + false -@@ -27,4 +28,4 @@ +@@ -28,4 +29,4 @@ diff --git a/community/dotnet7-build/runtime_76500-mono-musl-support.patch b/community/dotnet7-build/runtime_76500-mono-musl-support.patch deleted file mode 100644 index f9d2630..0000000 --- a/community/dotnet7-build/runtime_76500-mono-musl-support.patch +++ /dev/null @@ -1,325 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/76500 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Mono musl support - ---- - Directory.Build.props | 1 + - eng/common/cross/toolchain.cmake | 38 +++++++++++++++++++----- - eng/native/configurecompiler.cmake | 7 +++++ - eng/native/tryrun.cmake | 6 +++- - src/coreclr/pal/src/CMakeLists.txt | 5 ++++ - src/coreclr/pal/src/misc/perfjitdump.cpp | 2 +- - src/coreclr/vm/i386/cgenx86.cpp | 4 +++ - src/mono/CMakeLists.txt | 33 ++++++++++++++++++++ - src/mono/mono.proj | 32 +++++++++++++------- - src/mono/mono/mini/mini-runtime.c | 29 ++++++++++++++++++ - src/mono/mono/utils/mono-context.h | 8 +++++ - 11 files changed, 146 insertions(+), 19 deletions(-) - -diff --git a/src/runtime/Directory.Build.props b/src/runtime/Directory.Build.props -index 6f9b97c0a9c..4298a6df1d3 100644 ---- a/src/runtime/Directory.Build.props -+++ b/src/runtime/Directory.Build.props -@@ -22,7 +22,6 @@ - $(_hostOS) - true - true -- true - - - -@@ -154,7 +154,7 @@ - <_runtimeOS Condition="'$(TargetsMobile)' == 'true'">$(TargetOS.ToLowerInvariant()) - - <_portableOS>linux -- <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl'">linux-musl -+ <_portableOS Condition="'$(_runtimeOS)' == 'linux-musl' or $(_runtimeOS.StartsWith('alpine'))">linux-musl - <_portableOS Condition="'$(_runtimeOS)' == 'linux-bionic'">linux-bionic - <_portableOS Condition="'$(_hostOS)' == 'OSX'">osx - <_portableOS Condition="'$(_runtimeOS)' == 'win' or '$(TargetOS)' == 'windows'">win - -@@ -200,6 +199,9 @@ - - $(PackageRID) - $(_portableOS)-$(TargetArchitecture) -+ -+ true -+ true - - - -diff --git a/src/runtime/eng/native/tryrun.cmake b/src/runtime/eng/native/tryrun.cmake -index 6355b0988f7..056c6606b17 100644 ---- a/src/runtime/eng/native/tryrun.cmake -+++ b/src/runtime/eng/native/tryrun.cmake -@@ -8,7 +8,11 @@ endmacro() - - if(EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv7-alpine-linux-musleabihf OR - EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/armv6-alpine-linux-musleabihf OR -- EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl) -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/aarch64-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/s390x-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/ppc64le-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/i586-alpine-linux-musl OR -+ EXISTS ${CROSS_ROOTFS}/usr/lib/gcc/riscv64-alpine-linux-musl) - - set(ALPINE_LINUX 1) - elseif(EXISTS ${CROSS_ROOTFS}/bin/freebsd-version) -diff --git a/src/runtime/src/coreclr/pal/src/CMakeLists.txt b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -index d9726460ccf..c28563f8619 100644 ---- a/src/runtime/src/coreclr/pal/src/CMakeLists.txt -+++ b/src/runtime/src/coreclr/pal/src/CMakeLists.txt -@@ -315,6 +315,11 @@ if(CLR_CMAKE_TARGET_LINUX) - target_link_libraries(coreclrpal ${UNWIND_LIBS}) - endif(CLR_CMAKE_USE_SYSTEM_LIBUNWIND) - -+ # bundled libunwind requires using libucontext on alpine and x86 and ppc64le -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ target_link_libraries(coreclrpal ucontext) -+ endif(CLR_CMAKE_TARGET_ALPINE_LINUX AND (CLR_CMAKE_TARGET_ARCH_I386 OR CLR_CMAKE_TARGET_ARCH_POWERPC64)) -+ - endif(CLR_CMAKE_TARGET_LINUX) - - if(CLR_CMAKE_TARGET_NETBSD) -diff --git a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -index 8d7f79ed3f0..043939ad2da 100644 ---- a/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -+++ b/src/runtime/src/coreclr/pal/src/misc/perfjitdump.cpp -@@ -25,7 +25,7 @@ - #include - #include - #include --#include -+#include - - #include "../inc/llvm/ELF.h" - -diff --git a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -index 811c84a140d..4e958a44b30 100644 ---- a/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -+++ b/src/runtime/src/coreclr/vm/i386/cgenx86.cpp -@@ -1133,6 +1133,7 @@ extern "C" DWORD __stdcall avx512StateSupport() - - #else // !TARGET_UNIX - -+#if !__has_builtin(__cpuid) - void __cpuid(int cpuInfo[4], int function_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1143,7 +1144,9 @@ void __cpuid(int cpuInfo[4], int function_id) - : "0"(function_id) - ); - } -+#endif - -+#if !__has_builtin(__cpuidex) - void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - { - // Based on the Clang implementation provided in cpuid.h: -@@ -1154,6 +1157,7 @@ void __cpuidex(int cpuInfo[4], int function_id, int subFunction_id) - : "0"(function_id), "2"(subFunction_id) - ); - } -+#endif - - extern "C" DWORD __stdcall xmmYmmStateSupport() - { -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index cdff32677c0..08a82cd7e83 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -216,6 +216,35 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - # Enable the "full RELRO" options (RELRO & BIND_NOW) at link time - add_link_options(-Wl,-z,relro) - add_link_options(-Wl,-z,now) -+ # Detect Linux ID -+ # TODO: Eventually merge with eng/native/configureplatform.cmake -+ set(LINUX_ID_FILE "/etc/os-release") -+ if(CMAKE_CROSSCOMPILING) -+ set(LINUX_ID_FILE "${CMAKE_SYSROOT}${LINUX_ID_FILE}") -+ endif() -+ -+ if(EXISTS ${LINUX_ID_FILE}) -+ execute_process( -+ COMMAND bash -c "source ${LINUX_ID_FILE} && echo \$ID" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_ID -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ -+ execute_process( -+ COMMAND bash -c "if strings \"${CMAKE_SYSROOT}/usr/bin/ldd\" 2>&1 | grep -q musl; then echo musl; fi" -+ OUTPUT_VARIABLE CLR_CMAKE_LINUX_MUSL -+ OUTPUT_STRIP_TRAILING_WHITESPACE) -+ endif() -+ -+ if(DEFINED CLR_CMAKE_LINUX_ID) -+ if(CLR_CMAKE_LINUX_ID STREQUAL alpine) -+ set(CLR_CMAKE_HOST_ALPINE_LINUX 1) -+ set(CLR_CMAKE_HOST_OS ${CLR_CMAKE_LINUX_ID}) -+ endif() -+ -+ if(CLR_CMAKE_LINUX_MUSL STREQUAL musl) -+ set(CLR_CMAKE_HOST_LINUX_MUSL 1) -+ endif() -+ endif(DEFINED CLR_CMAKE_LINUX_ID) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") - set(HOST_LINUX 1) - add_definitions(-D_GNU_SOURCE -D_REENTRANT) -@@ -900,6 +929,11 @@ else() - set(DISABLE_DLLMAP 1) - endif() - -+if(CLR_CMAKE_HOST_ALPINE_LINUX) -+ # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -+ # larger than the initial committed stack size. -+ add_definitions(-DENSURE_PRIMARY_STACK_SIZE) -+endif() - if(TARGET_DARWIN) - check_c_compiler_flag(-fno-objc-msgsend-selector-stubs COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS) - if(COMPILER_SUPPORTS_FNO_OBJC_MSGSEND_SELECTOR_STUBS) -diff --git a/src/runtime/src/mono/mono.proj b/src/runtime/src/mono/mono.proj -index 59fea4a2f72..5bac7fdf1c6 100644 ---- a/src/runtime/src/mono/mono.proj -+++ b/src/runtime/src/mono/mono.proj -@@ -554,19 +560,21 @@ - darwin-x86_64 - windows-x86_64 - <_MonoRuntimeFilePath>$(MonoObjDir)out\lib\$(MonoFileName) -- <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">gnu -- <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">android -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' != 'true'">linux-gnu -+ <_LinuxAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true' and '$(TargetsLinuxMusl)' == 'true'">alpine-linux-musl -+ <_LinuxAbi Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">linux-android - <_LinuxFloatAbi Condition="'$(TargetsAndroid)' != 'true' and '$(TargetsLinuxBionic)' != 'true'">hf - <_Objcopy>objcopy -- <_Objcopy Condition="'$(Platform)' == 'arm'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-linux-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-linux-$(_LinuxAbi)-$(_Objcopy) -- <_Objcopy Condition="'$(Platform)' == 'x86'">i686-linux-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'armv6'">arm-$(_LinuxAbi)eabi$(_LinuxFloatAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'arm64'">aarch64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'riscv64'">riscv64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 's390x'">s390x-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'ppc64le'">powerpc64le-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x64'">x86_64-$(_LinuxAbi)-$(_Objcopy) -+ <_Objcopy Condition="'$(Platform)' == 'x86'">i686-$(_LinuxAbi)-$(_Objcopy) - <_Objcopy Condition="'$(TargetsAndroid)' == 'true' or '$(TargetsLinuxBionic)' == 'true'">$(ANDROID_NDK_ROOT)/toolchains/llvm/prebuilt/$(MonoToolchainPrebuiltOS)/bin/llvm-objcopy -+ <_Objcopy Condition="'$(TargetsLinuxMusl)' == 'true' and '$(CrossBuild)' != 'true'">objcopy - - <_ObjcopyPrefix Condition="'$(MonoCrossDir)' != '' and '$(Platform)' == 'riscv64'">llvm-objcopy- - -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 30df4bac1f7..8698fd81206 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -368,6 +368,11 @@ if(NOT DISABLE_SHARED_LIBS) - target_sources(monosgen-shared PRIVATE $) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - target_link_libraries (monosgen-shared PRIVATE monoapi) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(monosgen-shared PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ - target_include_directories (monosgen-shared PRIVATE monoapi) - if(TARGET_WIN32) - # on Windows the import library for the shared mono library will have the same name as the static library, -@@ -527,6 +532,10 @@ if(NOT DISABLE_EXECUTABLES) - set_target_properties(mono-sgen PROPERTIES OUTPUT_NAME mono-aot-cross) - endif() - target_link_libraries(mono-sgen PRIVATE monoapi monosgen-static ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -+ # Alpine Linux implements ucontext in a different library -+ if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ target_link_libraries(mono-sgen PRIVATE ucontext) -+ endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") -diff --git a/src/runtime/src/mono/mono/mini/mini-runtime.c b/src/runtime/src/mono/mono/mini/mini-runtime.c -index c481f69adc8..4db6c9a0ae7 100644 ---- a/src/runtime/src/mono/mono/mini/mini-runtime.c -+++ b/src/runtime/src/mono/mono/mini/mini-runtime.c -@@ -4383,6 +4383,30 @@ mini_llvm_init (void) - #endif - } - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+/*++ -+ Function: -+ EnsureStackSize -+ -+ Abstract: -+ This fixes a problem on MUSL where the initial stack size reported by the -+ pthread_attr_getstack is about 128kB, but this limit is not fixed and -+ the stack can grow dynamically. The problem is that it makes the -+ functions ReflectionInvocation::[Try]EnsureSufficientExecutionStack -+ to fail for real life scenarios like e.g. compilation of corefx. -+ Since there is no real fixed limit for the stack, the code below -+ ensures moving the stack limit to a value that makes reasonable -+ real life scenarios work. -+ -+ --*/ -+static MONO_NO_OPTIMIZATION MONO_NEVER_INLINE void -+ensure_stack_size (size_t size) -+{ -+ volatile uint8_t *s = (uint8_t *)g_alloca(size); -+ *s = 0; -+} -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - void - mini_add_profiler_argument (const char *desc) - { -@@ -4544,6 +4568,11 @@ mini_init (const char *filename) - mono_w32handle_init (); - #endif - -+#ifdef ENSURE_PRIMARY_STACK_SIZE -+ // TODO: https://github.com/dotnet/runtime/issues/72920 -+ ensure_stack_size (5 * 1024 * 1024); -+#endif // ENSURE_PRIMARY_STACK_SIZE -+ - mono_thread_info_runtime_init (&ticallbacks); - - if (g_hasenv ("MONO_DEBUG")) { -diff --git a/src/runtime/src/mono/mono/utils/mono-context.h b/src/runtime/src/mono/mono/utils/mono-context.h -index a1f0fe6f68e..a9db2d336ca 100644 ---- a/src/runtime/src/mono/mono/utils/mono-context.h -+++ b/src/runtime/src/mono/mono/utils/mono-context.h -@@ -11,6 +11,14 @@ - #ifndef __MONO_MONO_CONTEXT_H__ - #define __MONO_MONO_CONTEXT_H__ - -+/* -+ * Handle non-gnu libc versions with nothing in features.h -+ * We have no idea what they're compatible with, so always fail. -+ */ -+#ifndef __GLIBC_PREREQ -+# define __GLIBC_PREREQ(x,y) 0 -+#endif -+ - #include "mono-compiler.h" - #include "mono-sigcontext.h" - #include "mono-machine.h" -diff --git a/src/runtime/src/native/libs/System.Native/pal_io.c b/src/runtime/src/native/libs/System.Native/pal_io.c -index 0929a0b49ec..86311e19507 100644 ---- a/src/runtime/src/native/libs/System.Native/pal_io.c -+++ b/src/runtime/src/native/libs/System.Native/pal_io.c -@@ -1267,7 +1267,7 @@ int32_t SystemNative_CopyFile(intptr_t sourceFd, intptr_t destinationFd, int64_t - // Try copying data using a copy-on-write clone. This shares storage between the files. - if (sourceLength != 0) - { -- while ((ret = ioctl(outFd, FICLONE, inFd)) < 0 && errno == EINTR); -+ while ((ret = ioctl(outFd, (int)FICLONE, inFd)) < 0 && errno == EINTR); - copied = ret == 0; - } - #endif --- -2.36.3 - diff --git a/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch b/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch index 7afbfa6..6dfefc0 100644 --- a/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch +++ b/community/dotnet7-build/runtime_83682-specify-notext-on-linux-musl-x86.patch @@ -7,18 +7,18 @@ Subject: [PATCH] Specify -z notext on linux-musl-x86 src/coreclr/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) -diff --git a/src/runtime/src/coreclr/CMakeLists.txt.orig b/src/runtime/src/coreclr/CMakeLists.txt -index 7d1ce8d..5cacc78 100644 ---- a/src/runtime/src/coreclr/CMakeLists.txt.orig +diff --git a/src/runtime/src/coreclr/CMakeLists.txt b/src/runtime/src/coreclr/CMakeLists.txt +index 67b773bf78787..87d862a541ae6 100644 +--- a/src/runtime/src/coreclr/CMakeLists.txt +++ b/src/runtime/src/coreclr/CMakeLists.txt -@@ -105,6 +105,10 @@ if(CLR_CMAKE_HOST_UNIX) +@@ -109,6 +109,10 @@ if(CLR_CMAKE_HOST_UNIX) endif() endif() + if(CLR_CMAKE_TARGET_ALPINE_LINUX AND CLR_CMAKE_TARGET_ARCH_I386) -+ add_linker_flag(-Wl,-z,notext) ++ add_linker_flag(-Wl,-z,notext) + endif() + - add_subdirectory(pal) - add_subdirectory(hosts) - else() + if(NOT CLR_CMAKE_HOST_MACCATALYST AND NOT CLR_CMAKE_HOST_IOS AND NOT CLR_CMAKE_HOST_TVOS) + add_subdirectory(pal) + add_subdirectory(hosts) diff --git a/community/dotnet7-build/runtime_90251-rename-mono-cmake-host-var.patch b/community/dotnet7-build/runtime_90251-rename-mono-cmake-host-var.patch new file mode 100644 index 0000000..6a5fadd --- /dev/null +++ b/community/dotnet7-build/runtime_90251-rename-mono-cmake-host-var.patch @@ -0,0 +1,80 @@ +From 828269b7e68039f8bc0bdac66e2fd5c58b6d3471 Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/dotnet/runtime/pull/90251 +From: Antoine Martin +Date: Wed, 9 Aug 2023 11:36:39 -0400 +Subject: [PATCH 1/1] Rename CMAKE var for mono on libc-musl + +--- + src/mono/CMakeLists.txt | 6 +++--- + src/mono/mono/mini/CMakeLists.txt | 12 ++++++------ + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/src/runtime/src/coreclr/pgosupport.cmake b/src/runtime/src/coreclr/pgosupport.cmake +index 719ac14ad99..34a42781ab2 100644 +--- a/src/runtime/src/coreclr/pgosupport.cmake ++++ b/src/runtime/src/coreclr/pgosupport.cmake +@@ -25,13 +25,13 @@ function(add_pgo TargetName) + target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-generate) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -flto -fprofile-instr-generate") + if(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") +- if (CLR_CMAKE_HOST_ALPINE_LINUX) ++ if (CLR_CMAKE_TARGET_LINUX_MUSL) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/clang/${CMAKE_C_COMPILER_VERSION}") +- else(CLR_CMAKE_HOST_ALPINE_LINUX) ++ else(CLR_CMAKE_TARGET_LINUX_MUSL) + string(REPLACE "." ";" CLANG_VERSION "${CMAKE_C_COMPILER_VERSION}") + list(POP_FRONT CLANG_VERSION CLANG_VERSION_MAJOR) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/llvm-${CLANG_VERSION_MAJOR}/lib/clang/${CMAKE_C_COMPILER_VERSION}") +- endif(CLR_CMAKE_HOST_ALPINE_LINUX) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL) + endif(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") + if(NOT LD_LLVM) + set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -fuse-ld=gold") +diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt +index e04d9e9d364..00e54a25d69 100644 +--- a/src/runtime/src/mono/CMakeLists.txt ++++ b/src/runtime/src/mono/CMakeLists.txt +@@ -943,10 +943,10 @@ else() + set(DISABLE_DLLMAP 1) + endif() + +-if(CLR_CMAKE_HOST_ALPINE_LINUX) +- # Setting RLIMIT_NOFILE breaks debugging of coreclr on Alpine Linux for some reason ++if(CLR_CMAKE_TARGET_LINUX_MUSL) ++ # Setting RLIMIT_NOFILE breaks debugging of coreclr on musl-libc for some reason + add_definitions(-DDONT_SET_RLIMIT_NOFILE) +- # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is ++ # On musl-libc, we need to ensure that the reported stack range for the primary thread is + # larger than the initial committed stack size. + add_definitions(-DENSURE_PRIMARY_STACK_SIZE) + endif() +diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig b/src/runtime/src/mono/mono/mini/CMakeLists.txt +index 5d6ef3d..c3e5414 100644 +--- a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig ++++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt +@@ -400,9 +400,9 @@ if(NOT DISABLE_SHARED_LIBS) + endif() + target_compile_definitions(monosgen-shared PRIVATE -DMONO_DLL_EXPORT) + # Alpine Linux implements ucontext in a different library +- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + target_link_libraries(monosgen-shared PRIVATE ucontext) +- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) + if(MONO_SET_RPATH_ORIGIN) + set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") +@@ -601,10 +601,10 @@ if(NOT DISABLE_EXECUTABLES) + target_link_libraries(mono-sgen PRIVATE icu_shim_objects) + endif() + target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) +- # Alpine Linux implements ucontext in a different library +- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ # musl-libc implements ucontext in a different library ++ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + target_link_libraries(mono-sgen PRIVATE ucontext) +- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) ++ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) + if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) + # if components are built statically, link them into runtime. + target_sources(mono-sgen PRIVATE "${mono-components-objects}") diff --git a/community/dotnet7-build/runtime_enable-runtime-marshalling.diff b/community/dotnet7-build/runtime_enable-runtime-marshalling.diff deleted file mode 100644 index f609cfa..0000000 --- a/community/dotnet7-build/runtime_enable-runtime-marshalling.diff +++ /dev/null @@ -1,1807 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/77364 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Enable runtime marshalling - -Dotnet7 introduced a bug where MkDir would sometimes have a snuffed errno. -This is a temporary workaround till upstream finds why the errno is being -turned into EAGAIN. - ---- - src/libraries/Common/src/DisableRuntimeMarshalling.cs | 2 +- - .../Common/src/Interop/Unix/System.Native/Interop.MkDir.cs | 4 ++-- - src/libraries/Common/tests/Common.Tests.csproj | 2 +- - src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj | 2 +- - .../Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj | 4 ++-- - .../UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj | 2 +- - .../tests/Common/Microsoft.Extensions.Logging.Tests.csproj | 2 +- - .../tests/Microsoft.Win32.Primitives.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.AccessControl.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj | 2 +- - .../src/Microsoft.Win32.Registry.csproj | 2 +- - .../tests/Microsoft.Win32.Registry.Tests.csproj | 2 +- - .../src/Microsoft.Win32.SystemEvents.csproj | 2 +- - .../tests/Microsoft.Win32.SystemEvents.Tests.csproj | 2 +- - src/libraries/System.Console/src/System.Console.csproj | 2 +- - .../System.Console/tests/System.Console.Tests.csproj | 2 +- - src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj | 2 +- - .../System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj | 2 +- - src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj | 2 +- - .../System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Debug.Tests.csproj | 2 +- - .../src/System.Diagnostics.EventLog.csproj | 2 +- - .../tests/System.Diagnostics.EventLog.Tests.csproj | 2 +- - .../src/System.Diagnostics.FileVersionInfo.csproj | 2 +- - .../System.Diagnostics.FileVersionInfo.Tests.csproj | 2 +- - .../src/System.Diagnostics.PerformanceCounter.csproj | 2 +- - .../tests/System.Diagnostics.PerformanceCounter.Tests.csproj | 2 +- - .../src/System.Diagnostics.Process.csproj | 2 +- - .../tests/System.Diagnostics.Process.Tests.csproj | 2 +- - .../tests/System.Diagnostics.Tracing.Tests.csproj | 2 +- - .../src/System.DirectoryServices.AccountManagement.csproj | 2 +- - .../System.DirectoryServices.AccountManagement.Tests.csproj | 2 +- - .../src/System.DirectoryServices.Protocols.csproj | 2 +- - .../tests/System.DirectoryServices.Protocols.Tests.csproj | 2 +- - .../src/System.DirectoryServices.csproj | 2 +- - .../tests/System.DirectoryServices.Tests.csproj | 2 +- - .../System.Drawing.Common/src/System.Drawing.Common.csproj | 2 +- - .../tests/System.Drawing.Common.Tests.csproj | 2 +- - .../src/System.Drawing.Primitives.csproj | 2 +- - .../System.Formats.Tar/src/System.Formats.Tar.csproj | 2 +- - .../System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj | 2 +- - .../NlsTests/System.Globalization.Extensions.Nls.Tests.csproj | 2 +- - .../tests/NlsTests/System.Globalization.Nls.Tests.csproj | 2 +- - .../src/System.IO.Compression.Brotli.csproj | 2 +- - .../tests/System.IO.Compression.Brotli.Tests.csproj | 2 +- - .../src/System.IO.Compression.ZipFile.csproj | 2 +- - .../tests/System.IO.Compression.ZipFile.Tests.csproj | 2 +- - .../System.IO.Compression/src/System.IO.Compression.csproj | 2 +- - .../tests/System.IO.Compression.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.AccessControl.csproj | 2 +- - .../tests/System.IO.FileSystem.AccessControl.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.DriveInfo.csproj | 2 +- - .../tests/System.IO.FileSystem.DriveInfo.Tests.csproj | 2 +- - .../src/System.IO.FileSystem.Watcher.csproj | 2 +- - .../tests/System.IO.FileSystem.Watcher.Tests.csproj | 2 +- - .../tests/System.IO.FileSystem.Tests.csproj | 2 +- - .../src/System.IO.IsolatedStorage.csproj | 2 +- - .../tests/System.IO.IsolatedStorage.Tests.csproj | 2 +- - .../src/System.IO.MemoryMappedFiles.csproj | 2 +- - .../tests/System.IO.MemoryMappedFiles.Tests.csproj | 2 +- - .../src/System.IO.Pipes.AccessControl.csproj | 2 +- - .../tests/System.IO.Pipes.AccessControl.Tests.csproj | 2 +- - src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj | 2 +- - .../System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj | 2 +- - src/libraries/System.IO.Ports/src/System.IO.Ports.csproj | 2 +- - .../System.IO.Ports/tests/System.IO.Ports.Tests.csproj | 2 +- - src/libraries/System.Management/src/System.Management.csproj | 2 +- - .../System.Management/tests/System.Management.Tests.csproj | 2 +- - .../src/System.Net.Http.WinHttpHandler.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Functional.Tests.csproj | 2 +- - .../System.Net.Http.WinHttpHandler.Unit.Tests.csproj | 2 +- - src/libraries/System.Net.Http/src/System.Net.Http.csproj | 2 +- - .../FunctionalTests/System.Net.Http.Functional.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Http.Unit.Tests.csproj | 2 +- - .../src/System.Net.HttpListener.csproj | 2 +- - .../tests/System.Net.HttpListener.Tests.csproj | 2 +- - src/libraries/System.Net.Mail/src/System.Net.Mail.csproj | 2 +- - .../tests/Functional/System.Net.Mail.Functional.Tests.csproj | 2 +- - .../tests/Unit/System.Net.Mail.Unit.Tests.csproj | 2 +- - .../src/System.Net.NameResolution.csproj | 2 +- - .../System.Net.NameResolution.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj | 2 +- - .../src/System.Net.NetworkInformation.csproj | 2 +- - src/libraries/System.Net.Ping/src/System.Net.Ping.csproj | 2 +- - .../FunctionalTests/System.Net.Ping.Functional.Tests.csproj | 2 +- - .../System.Net.Primitives/src/System.Net.Primitives.csproj | 2 +- - .../System.Net.Primitives.Functional.Tests.csproj | 2 +- - .../tests/PalTests/System.Net.Primitives.Pal.Tests.csproj | 2 +- - .../UnitTests/System.Net.Primitives.UnitTests.Tests.csproj | 2 +- - src/libraries/System.Net.Quic/src/System.Net.Quic.csproj | 2 +- - .../FunctionalTests/System.Net.Quic.Functional.Tests.csproj | 2 +- - .../System.Net.Requests/src/System.Net.Requests.csproj | 2 +- - .../System.Net.Security/src/System.Net.Security.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Security.Tests.csproj | 2 +- - .../tests/UnitTests/System.Net.Security.Unit.Tests.csproj | 2 +- - .../System.Net.Sockets/src/System.Net.Sockets.csproj | 2 +- - .../tests/FunctionalTests/System.Net.Sockets.Tests.csproj | 2 +- - .../System.Net.WebSockets/src/System.Net.WebSockets.csproj | 2 +- - .../System.Private.Xml/src/System.Private.Xml.csproj | 2 +- - .../tests/System.Resources.Extensions.Tests.csproj | 2 +- - .../tests/System.Resources.ResourceManager.Tests.csproj | 2 +- - .../System.Runtime.Caching/src/System.Runtime.Caching.csproj | 2 +- - .../tests/System.Runtime.Caching.Tests.csproj | 2 +- - .../tests/System.Runtime.Extensions.Tests.csproj | 2 +- - ...em.Runtime.InteropServices.RuntimeInformation.Tests.csproj | 2 +- - .../System.Runtime.InteropServices.Tests.csproj | 2 +- - .../tests/System.Runtime.Intrinsics.Tests.csproj | 2 +- - .../System.Runtime.Serialization.Formatters.Tests.csproj | 2 +- - .../tests/NlsTests/System.Runtime.Nls.Tests.csproj | 2 +- - .../System.Runtime/tests/System.Runtime.Tests.csproj | 2 +- - .../src/System.Security.AccessControl.csproj | 2 +- - .../tests/System.Security.AccessControl.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Cng.Tests.csproj | 2 +- - .../tests/System.Security.Cryptography.Csp.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.Pkcs.csproj | 2 +- - .../tests/System.Security.Cryptography.Pkcs.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.ProtectedData.csproj | 2 +- - .../System.Security.Cryptography.ProtectedData.Tests.csproj | 2 +- - ...System.Security.Cryptography.X509Certificates.Tests.csproj | 2 +- - .../src/System.Security.Cryptography.csproj | 2 +- - .../tests/System.Security.Cryptography.Tests.csproj | 2 +- - .../tests/System.Security.Permissions.Tests.csproj | 2 +- - .../src/System.Security.Principal.Windows.csproj | 2 +- - .../tests/System.Security.Principal.Windows.Tests.csproj | 2 +- - .../src/System.ServiceProcess.ServiceController.csproj | 2 +- - .../System.ServiceProcess.ServiceController.Tests.csproj | 2 +- - src/libraries/System.Speech/src/System.Speech.csproj | 2 +- - src/libraries/System.Speech/tests/System.Speech.Tests.csproj | 2 +- - .../src/System.Text.Encoding.CodePages.csproj | 2 +- - .../src/System.Threading.AccessControl.csproj | 2 +- - .../tests/System.Threading.AccessControl.Tests.csproj | 2 +- - .../src/System.Transactions.Local.csproj | 2 +- - .../src/System.Windows.Extensions.csproj | 2 +- - .../tests/System.Windows.Extensions.Tests.csproj | 2 +- - 134 files changed, 136 insertions(+), 136 deletions(-) - -diff --git a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -index 9a6bc544e55..10ec1fce44a 100644 ---- a/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -+++ b/src/runtime/src/libraries/Common/src/DisableRuntimeMarshalling.cs -@@ -2,4 +2,4 @@ - // The .NET Foundation licenses this file to you under the MIT license. - - // Used to indicate that runtime marshalling should be disabled. --[assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -+// [assembly: System.Runtime.CompilerServices.DisableRuntimeMarshalling] -diff --git a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -index a6bb1dc3c0f..751e0ac690b 100644 ---- a/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -+++ b/src/runtime/src/libraries/Common/src/Interop/Unix/System.Native/Interop.MkDir.cs -@@ -9,8 +9,8 @@ internal static partial class Interop - { - internal static partial class Sys - { -- [LibraryImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -- private static partial int MkDir(ref byte path, int mode); -+ [DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MkDir", SetLastError = true)] -+ private static extern int MkDir(ref byte path, int mode); - - internal static int MkDir(ReadOnlySpan path, int mode) - { -diff --git a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -index 72de3a2ba17..16adf14be81 100644 ---- a/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -+++ b/src/runtime/src/libraries/Common/tests/Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -index 19ee3bde1b5..d390a06be81 100644 ---- a/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -+++ b/src/runtime/src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);nullable - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -index 93be9b87c96..10117338458 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting.WindowsServices/tests/Microsoft.Extensions.Hosting.WindowsServices.Tests.csproj -@@ -1,8 +1,8 @@ - - - -- -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ -+ $(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -index 0743d679b15..8ec495e8345 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/Microsoft.Extensions.Hosting.Unit.Tests.csproj -@@ -1,7 +1,7 @@ -  - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -index 6586026447c..c284ea4f48c 100644 ---- a/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Extensions.Logging/tests/Common/Microsoft.Extensions.Logging.Tests.csproj -@@ -1,7 +1,7 @@ - - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -index aa61641a9fa..56ed9a2c927 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Primitives/tests/Microsoft.Win32.Primitives.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -index 7f6d66bdba8..168a20a1115 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/src/Microsoft.Win32.Registry.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for Microsoft.Win32.RegistryKey. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -index 76442c6fb1f..e92db98f790 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry.AccessControl/tests/Microsoft.Win32.Registry.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -index 98652656e9c..1972ac8ad18 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/src/Microsoft.Win32.Registry.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - $(NoWarn);CA2249 - - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -index 1feb97ef841..ae5ad78ce7f 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.Registry/tests/Microsoft.Win32.Registry.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);REGISTRY_ASSEMBLY -- $(NetCoreAppCurrent)-windows -+ - true - true - -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -index d7e7dc61211..640179e2960 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/src/Microsoft.Win32.SystemEvents.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides access to Windows system event notifications. -diff --git a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -index 1a8e130bee4..131134daa80 100644 ---- a/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -+++ b/src/runtime/src/libraries/Microsoft.Win32.SystemEvents/tests/Microsoft.Win32.SystemEvents.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Console/src/System.Console.csproj b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -index 1c45c5a8f93..880b740def1 100644 ---- a/src/runtime/src/libraries/System.Console/src/System.Console.csproj -+++ b/src/runtime/src/libraries/System.Console/src/System.Console.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -index f4b451d30e1..418f9b30039 100644 ---- a/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -+++ b/src/runtime/src/libraries/System.Console/tests/System.Console.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows -+ $(NetCoreAppCurrent); - true - ..\src\Resources\Strings.resx - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -index 8fad480d961..6efc49b3004 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/src/System.Data.Odbc.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-FreeBSD;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249;CA1838;CA1846 - -diff --git a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -index 85a15ebe3d2..a8183df7eef 100644 ---- a/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.Odbc/tests/System.Data.Odbc.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -index 1a1756a85ad..0fa7a416a0f 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/src/System.Data.OleDb.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -index 6f72486a944..66d1f92904e 100644 ---- a/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -+++ b/src/runtime/src/libraries/System.Data.OleDb/tests/System.Data.OleDb.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -index 601c003fc30..6c22aac1e01 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Debug/tests/System.Diagnostics.Debug.Tests.csproj -@@ -1,7 +1,7 @@ - - - System.Diagnostics.Tests -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - false -diff --git a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -index dfae87cc90a..affb0753616 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.EventLog/src/System.Diagnostics.EventLog.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -index d052ccaa0b6..3563132cda3 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -index a0dbb8e208b..4ae893f4765 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/src/System.Diagnostics.PerformanceCounter.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA1847 - annotations -diff --git a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -index 2146bf437cb..dd3dfeb4ae4 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.PerformanceCounter/tests/System.Diagnostics.PerformanceCounter.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -index 2c273820afb..c158c49ec2e 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/src/System.Diagnostics.Process.csproj -@@ -2,7 +2,7 @@ - - $(DefineConstants);FEATURE_REGISTRY - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -index e23bb4a94a7..bfa37a8f919 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -index 35b1a833abb..18c323c28ae 100644 ---- a/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -+++ b/src/runtime/src/libraries/System.Diagnostics.Tracing/tests/System.Diagnostics.Tracing.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -index 8152e3c7f05..be32f5d3b5d 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/src/System.DirectoryServices.AccountManagement.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - $(NoWarn);CA2249 -diff --git a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -index 0bb24c8eadd..6155cac4498 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.AccountManagement/tests/System.DirectoryServices.AccountManagement.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -index 56862519355..3e11d02035a 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/src/System.DirectoryServices.Protocols.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-OSX;$(NetCoreAppMinimum)-Linux;$(NetCoreAppMinimum);netstandard2.0 - true - true - true -diff --git a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -index 9a78a3acd54..632de15c235 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices.Protocols/tests/System.DirectoryServices.Protocols.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;net48 - - - -diff --git a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -index 83a118e940d..7b045dc3c0b 100644 ---- a/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -+++ b/src/runtime/src/libraries/System.DirectoryServices/src/System.DirectoryServices.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - true - - $(NoWarn);SYSLIB0003 -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - - - -diff --git a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -index df9c7ef864a..9cf9a016204 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/src/System.Drawing.Common.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - $(DefineConstants);DRAWING_NAMESPACE - true - CS0618 -diff --git a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -index 33f175f1456..0b14a790777 100644 ---- a/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Common/tests/System.Drawing.Common.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;net48 -+ net48 - true - - -diff --git a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -index 697be7783e2..2efcb61d950 100644 ---- a/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Drawing.Primitives/src/System.Drawing.Primitives.csproj -@@ -1,7 +1,7 @@ -  - - System.Drawing -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -index 33a9aa8c1dc..ea69b03b8a8 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/src/System.Formats.Tar.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -index ca1b4d99e50..d4475c8781f 100644 ---- a/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -+++ b/src/runtime/src/libraries/System.Formats.Tar/tests/System.Formats.Tar.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - $(LibrariesProjectRoot)/Common/tests/Resources/Strings.resx - true -diff --git a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -index 61a409ffedc..38f61fb9197 100644 ---- a/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization.Extensions/tests/NlsTests/System.Globalization.Extensions.Nls.Tests.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows -+ - true - - -diff --git a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -index a9aeef49807..0284070ad05 100644 ---- a/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Globalization/tests/NlsTests/System.Globalization.Nls.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - -- $(NetCoreAppCurrent)-windows -+ - 14.0 - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -index ced12496d65..d67e262836b 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/src/System.IO.Compression.Brotli.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -index 709f655902d..607c50be625 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.Brotli/tests/System.IO.Compression.Brotli.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -index 94999191663..f8506c2adbc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/src/System.IO.Compression.ZipFile.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -index 29c88cb2f9c..b049a0f3caa 100644 ---- a/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -index 80007bcfe5f..ee0bf21ccfc 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/src/System.IO.Compression.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -index 229119e3aa3..2fcad878c05 100644 ---- a/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Compression/tests/System.IO.Compression.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -index 494ef1959db..08ddf1c7dd9 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/src/System.IO.FileSystem.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -index c42a680fa2f..fe12ddd7911 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.AccessControl/tests/System.IO.FileSystem.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -index 61225e58e8a..90c69fee153 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/src/System.IO.FileSystem.DriveInfo.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -index 00d1afd3c94..8071e492986 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.DriveInfo/tests/System.IO.FileSystem.DriveInfo.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -index 469005b661d..7edcd52db0c 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/src/System.IO.FileSystem.Watcher.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -index 1246c914ab8..a83fbe23499 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-FreeBSD - true - true - -diff --git a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -index e386671171d..746e218cc24 100644 ---- a/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - --working-dir=/test-dir - true -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -index 2309a8c007a..b16deb25f25 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/src/System.IO.IsolatedStorage.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -index 0410513c46c..1f4b92f6418 100644 ---- a/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.IsolatedStorage/tests/System.IO.IsolatedStorage.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -index 9be9a376620..56ed27283ac 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/src/System.IO.MemoryMappedFiles.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -index ef44754372e..4525b0aa830 100644 ---- a/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -index 3dd3c8a455b..82091dc68d0 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/src/System.IO.Pipes.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -index 386250a4320..e0e4eab4e8e 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -index b0956d6ba7b..77585616ea3 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/src/System.IO.Pipes.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -index 8f31d5dd604..2e6ae7616ea 100644 ---- a/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - true - -diff --git a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -index c341d6c3ba6..3173e525799 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/src/System.IO.Ports.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-Unix;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(DefineConstants);SERIAL_PORTS - true -diff --git a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -index 9a1592778a7..b71f36bc2f1 100644 ---- a/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -+++ b/src/runtime/src/libraries/System.IO.Ports/tests/System.IO.Ports.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Management/src/System.Management.csproj b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -index 5b66be0b573..1352df29995 100644 ---- a/src/runtime/src/libraries/System.Management/src/System.Management.csproj -+++ b/src/runtime/src/libraries/System.Management/src/System.Management.csproj -@@ -1,6 +1,6 @@ -  - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - $(NoWarn);0618 - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -index b5a0ebaa389..45c62a15a8b 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj -@@ -4,7 +4,7 @@ - $(DefineConstants);SYSNETHTTP_NO_OPENSSL;HTTP3 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -index 85139c5391f..f2f2c2e5696 100644 ---- a/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Http/tests/UnitTests/System.Net.Http.Unit.Tests.csproj -@@ -3,7 +3,7 @@ - ../../src/Resources/Strings.resx - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-MacCatalyst;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Android - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -index b0e790da1d6..46e75182fae 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/src/System.Net.HttpListener.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -index ff51965c789..d5f4d3637ca 100644 ---- a/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.HttpListener/tests/System.Net.HttpListener.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX - true - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -index 5d2ce4cc280..323c647d2d6 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/src/System.Net.Mail.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -index 4a7b913a457..f81cc0576f9 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -index 0fbb5d7c497..b466e0b9d96 100644 ---- a/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Mail/tests/Unit/System.Net.Mail.Unit.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -index 6d7ee08de0b..76e1a178242 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/src/System.Net.NameResolution.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -index f4588a2b4a1..a21ef6a5d18 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/FunctionalTests/System.Net.NameResolution.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -index 2edc2e3601c..75c119af62a 100644 ---- a/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.NameResolution/tests/PalTests/System.Net.NameResolution.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -index d36ad67504e..8b240730a52 100644 ---- a/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -+++ b/src/runtime/src/libraries/System.Net.NetworkInformation/src/System.Net.NetworkInformation.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -index 71b5d783c45..167b0a2c5f5 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/src/System.Net.Ping.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -index 0a068b65b72..5ccac35d05f 100644 ---- a/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Ping/tests/FunctionalTests/System.Net.Ping.Functional.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - true -diff --git a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -index 84a5864cac9..3567f4a6ea7 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/src/System.Net.Primitives.csproj -@@ -2,7 +2,7 @@ - - true - false -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - $(DefineConstants);SYSTEM_NET_PRIMITIVES_DLL -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -index 4e2e897b0a6..7a48043aad5 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -index 2fb034467dc..633181e4b58 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/PalTests/System.Net.Primitives.Pal.Tests.csproj -@@ -2,7 +2,7 @@ - - true - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -index 8cc3d0ff90f..098b0d7460a 100644 ---- a/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Primitives/tests/UnitTests/System.Net.Primitives.UnitTests.Tests.csproj -@@ -3,7 +3,7 @@ - true - 169,649 - ../../src/Resources/Strings.resx -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -index 257af8dbb88..6f118e0bf88 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/src/System.Net.Quic.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent) - true - - -diff --git a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -index 62b1be2da62..45b87e1dddb 100644 ---- a/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Quic/tests/FunctionalTests/System.Net.Quic.Functional.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - true - - -diff --git a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -index d16970c9a19..6a5034037a3 100644 ---- a/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -+++ b/src/runtime/src/libraries/System.Net.Requests/src/System.Net.Requests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - $(NoWarn);SYSLIB0014 - -diff --git a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -index e030690763e..ad96b0fb669 100644 ---- a/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/src/System.Net.Security.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent) - - $(DefineConstants);PRODUCT - true -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -index 7c3d432f34c..7fd430a9220 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -index 1dd366e72a0..6a184f9d405 100644 ---- a/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Security/tests/UnitTests/System.Net.Security.Unit.Tests.csproj -@@ -10,7 +10,7 @@ - 436 - - $(NoWarn);3021 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-Android - true - true - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -index 61f9c6fa2d4..2674e098d82 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/src/System.Net.Sockets.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -index 884db1eea54..86517b47af6 100644 ---- a/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -+++ b/src/runtime/src/libraries/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -index c0c4ded0d33..b361cc90d32 100644 ---- a/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -+++ b/src/runtime/src/libraries/System.Net.WebSockets/src/System.Net.WebSockets.csproj -@@ -1,7 +1,7 @@ - - - True -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -index 405e6375a9f..2a5bd1faacb 100644 ---- a/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -+++ b/src/runtime/src/libraries/System.Private.Xml/src/System.Private.Xml.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - System.Xml - true - -diff --git a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -index ad289dc6319..2485635439b 100644 ---- a/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.Extensions/tests/System.Resources.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent)-Unix;$(NetFrameworkMinimum) - true - - -diff --git a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -index 66cb937a3d1..12e027437bd 100644 ---- a/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -+++ b/src/runtime/src/libraries/System.Resources.ResourceManager/tests/System.Resources.ResourceManager.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix -+ $(NetCoreAppCurrent)-Unix - - - -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -index 869129ba71f..41a41f7bebb 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/src/System.Runtime.Caching.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - Annotations - true -diff --git a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -index 8f08caf9b46..ee8e300954a 100644 ---- a/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Caching/tests/System.Runtime.Caching.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows;net48 -+ $(NetCoreAppCurrent);net48 - true - - -diff --git a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -index 3e3e2937781..85074f9fba2 100644 ---- a/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj -@@ -4,7 +4,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -index 3edd7d47f72..db7a23c27c5 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices.RuntimeInformation/tests/System.Runtime.InteropServices.RuntimeInformation.Tests.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - - -diff --git a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -index 34964fb33f2..1a78852a17b 100644 ---- a/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.InteropServices/tests/System.Runtime.InteropServices.UnitTests/System.Runtime.InteropServices.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - true - -diff --git a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -index 6c0187cf21f..fef12aa096c 100644 ---- a/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Intrinsics/tests/System.Runtime.Intrinsics.Tests.csproj -@@ -4,7 +4,7 @@ - $(NoWarn),1718,SYSLIB0013 - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(Features.Replace('nullablePublicOnly', '') - -diff --git a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -index 378b38abb93..971c431ca2e 100644 ---- a/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj -@@ -2,7 +2,7 @@ - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 -+ $(NetCoreAppCurrent)-FreeBSD;$(NetCoreAppCurrent)-illumos;$(NetCoreAppCurrent)-Solaris;$(NetCoreAppCurrent)-Linux;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;net48 - - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -index 849edc8cd5c..2deaa7914ef 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/NlsTests/System.Runtime.Nls.Tests.csproj -@@ -3,7 +3,7 @@ - true - true - true -- $(NetCoreAppCurrent)-windows -+ - $(NoWarn),SYSLIB0013 - - -diff --git a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -index fc6859854dc..260dafbd372 100644 ---- a/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -+++ b/src/runtime/src/libraries/System.Runtime/tests/System.Runtime.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - true - $(NoWarn),1718,SYSLIB0013 - true -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -index 35fabc2416c..a461103be90 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/src/System.Security.AccessControl.csproj -@@ -1,7 +1,7 @@ -  - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -index 05fd95a165f..f0c167ed082 100644 ---- a/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.AccessControl/tests/System.Security.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -index 4bfc1719abf..cc312cffe4e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Cng/tests/System.Security.Cryptography.Cng.Tests.csproj -@@ -1,7 +1,7 @@ - - - $(DefineConstants);TESTING_CNG_IMPLEMENTATION -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -index 59d139c7749..a8e94e72847 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Csp/tests/System.Security.Cryptography.Csp.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Browser - - $(NoWarn);SYSLIB0021 - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -index be33237e616..426ddb38e27 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/src/System.Security.Cryptography.Pkcs.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.1;netstandard2.0;$(NetFrameworkMinimum) - true - true - $(NoWarn);CA5384 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -index 8523c0d8296..2045f05a28e 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography.Pkcs/tests/System.Security.Cryptography.Pkcs.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);net48 -+ $(NetCoreAppCurrent);net48 - - - $(DefineConstants);HAVE_THUMBPRINT_OVERLOADS - true - $(NoWarn);SYSLIB0026;SYSLIB0027;SYSLIB0028 -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS - true - - -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -index cf25738f6e7..29d0f0734cb 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/src/System.Security.Cryptography.csproj -@@ -2,7 +2,7 @@ - - true - $(DefineConstants);INTERNAL_ASYMMETRIC_IMPLEMENTATIONS -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-OSX;$(NetCoreAppCurrent)-iOS;$(NetCoreAppCurrent)-tvOS;$(NetCoreAppCurrent)-Browser;$(NetCoreAppCurrent) - $(NoWarn);CA5350;CA5351;CA5379;CA5384;SYSLIB0026 - - $(NoWarn);CS0809 -diff --git a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -index 50e110c0445..b32809447d3 100644 ---- a/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser -+ $(NetCoreAppCurrent)-Unix;$(NetCoreAppCurrent)-Android;$(NetCoreAppCurrent)-Browser - true - $(NoWarn);SYSLIB0021 - true -diff --git a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -index 73f50b209fb..7205c2e239a 100644 ---- a/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Permissions/tests/System.Security.Permissions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - $(NoWarn);SYSLIB0003 - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -index a67d4af63eb..9fef2993b07 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/src/System.Security.Principal.Windows.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - - - -diff --git a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -index e9caf5fa463..43e03119cb3 100644 ---- a/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -+++ b/src/runtime/src/libraries/System.Security.Principal.Windows/tests/System.Security.Principal.Windows.Tests.csproj -@@ -1,7 +1,7 @@ - - - true -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -index 518c800ae01..2b465d475b0 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/src/System.ServiceProcess.ServiceController.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - $(NoWarn);CA2249 - true -diff --git a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -index 1039fad47f4..99412bc09b8 100644 ---- a/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -+++ b/src/runtime/src/libraries/System.ServiceProcess.ServiceController/tests/System.ServiceProcess.ServiceController.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - -diff --git a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -index 22506f7bf96..9c53e796bd8 100644 ---- a/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -+++ b/src/runtime/src/libraries/System.Speech/src/System.Speech.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0 -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0 - true - - -diff --git a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -index 9139d0d2392..d81ff8a7ca1 100644 ---- a/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -+++ b/src/runtime/src/libraries/System.Speech/tests/System.Speech.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - -diff --git a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -index 8883abba36b..c7ff6be8fec 100644 ---- a/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -+++ b/src/runtime/src/libraries/System.Text.Encoding.CodePages/src/System.Text.Encoding.CodePages.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - true -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -index 54c8e0bad5f..c9c91e64692 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/src/System.Threading.AccessControl.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum) - true - true - Provides support for managing access and audit control lists for synchronization primitives. -diff --git a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -index 3b9e105954d..14949ff735b 100644 ---- a/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -+++ b/src/runtime/src/libraries/System.Threading.AccessControl/tests/System.Threading.AccessControl.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetFrameworkMinimum) -+ $(NetFrameworkMinimum) - - - - true - true -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent) -+ $(NetCoreAppCurrent) - CA1805;IDE0059;CS1591 - $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) - -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -index ee9cb23d69e..741c633215b 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/src/System.Windows.Extensions.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent);$(NetCoreAppMinimum)-windows;$(NetCoreAppMinimum) -+ $(NetCoreAppCurrent);$(NetCoreAppMinimum) - true - true - Provides miscellaneous Windows-specific types -diff --git a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -index e7b45293318..089fe0ef33f 100644 ---- a/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -+++ b/src/runtime/src/libraries/System.Windows.Extensions/tests/System.Windows.Extensions.Tests.csproj -@@ -1,6 +1,6 @@ - - -- $(NetCoreAppCurrent)-windows -+ - - - --- -2.36.3 - diff --git a/community/dotnet7-build/runtime_enable-system-libunwind.diff b/community/dotnet7-build/runtime_enable-system-libunwind.diff index 69045ad..e88e5cf 100644 --- a/community/dotnet7-build/runtime_enable-system-libunwind.diff +++ b/community/dotnet7-build/runtime_enable-system-libunwind.diff @@ -1,11 +1,11 @@ -diff --git a/src/runtime/eng/SourceBuild.props b/src/runtime/eng/SourceBuild.props -index 32e6d9c0ba..8e2a7f9931 100644 ---- a/src/runtime/eng/SourceBuild.props +diff --git a/src/runtime/eng/SourceBuild.props.orig b/src/runtime/eng/SourceBuild.props +index 1e9d5cf..c40e4fa 100644 +--- a/src/runtime/eng/SourceBuild.props.orig +++ b/src/runtime/eng/SourceBuild.props -@@ -51,6 +51,7 @@ - $(InnerBuildArgs) /p:DisableSourceLink=false - $(InnerBuildArgs) /p:AdditionalRuntimeIdentifierParent=$(BaseOS) - $(InnerBuildArgs) /p:PrimaryRuntimeFlavor=Mono /p:RuntimeFlavor=Mono +@@ -48,6 +48,7 @@ + $(InnerBuildArgs) /p:OfficialBuildId=$(OfficialBuildId) + $(InnerBuildArgs) /p:ContinuousIntegrationBuild=$(ContinuousIntegrationBuild) + $(InnerBuildArgs) --usemonoruntime + $(InnerBuildArgs) --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE diff --git a/community/dotnet7-build/runtime_more-clang-16-suppression.patch b/community/dotnet7-build/runtime_more-clang-16-suppression.patch new file mode 100644 index 0000000..1e94419 --- /dev/null +++ b/community/dotnet7-build/runtime_more-clang-16-suppression.patch @@ -0,0 +1,13 @@ +diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake +index c9a54547c0a..931da2cae5b 100644 +--- a/src/runtime/eng/native/configurecompiler.cmake ++++ b/src/runtime/eng/native/configurecompiler.cmake +@@ -488,6 +488,8 @@ if (CLR_CMAKE_HOST_UNIX) + # other clang 16.0 suppressions + add_compile_options(-Wno-single-bit-bitfield-constant-conversion) + add_compile_options(-Wno-cast-function-type-strict) ++ add_compile_options(-Wno-incompatible-function-pointer-types-strict) ++ add_compile_options(-Wno-ignored-attributes) + else() + add_compile_options(-Wno-uninitialized) + add_compile_options(-Wno-strict-aliasing) diff --git a/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch b/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch index a55dcde..cec5877 100644 --- a/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch +++ b/community/dotnet7-build/runtime_remove-usage-of-off64-t.patch @@ -1,15 +1,26 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 03712c3b684..99d8a457957 100644 ---- a/src/runtimr/src/coreclr/debug/createdump/crashinfounix.cpp +diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp +index 20b2494..165b190 100644 +--- a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig +++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -395,7 +395,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r +@@ -469,7 +469,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r // performance optimization. m_canUseProcVmReadSyscall = false; - assert(m_fd != -1); -- *read = pread64(m_fd, buffer, size, (off64_t)address); -+ *read = pread(m_fd, buffer, size, (off_t)address); + assert(m_fdMem != -1); +- *read = pread64(m_fdMem, buffer, size, (off64_t)address); ++ *read = pread(m_fdMem, buffer, size, (off_t)address); } if (*read == (size_t)-1) - - +diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp +index 5addb79..79655d1 100644 +--- a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig ++++ b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp +@@ -760,7 +760,7 @@ CrashInfo::PageMappedToPhysicalMemory(uint64_t start) + } + + uint64_t pagemapOffset = (start / PAGE_SIZE) * sizeof(uint64_t); +- uint64_t seekResult = lseek64(m_fdPagemap, (off64_t) pagemapOffset, SEEK_SET); ++ uint64_t seekResult = lseek(m_fdPagemap, (off_t) pagemapOffset, SEEK_SET); + if (seekResult != pagemapOffset) + { + int seekErrno = errno; diff --git a/community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch b/community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch deleted file mode 100644 index bdb120b..0000000 --- a/community/dotnet7-build/sdk_14239-add-zsh-compdef-completion-script.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 4c74721e1f5da9642adab03075dda2f55719ac7b Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/sdk/pull/14239 -From: Esgariot -Date: Mon, 19 Oct 2020 23:42:37 +0200 -Subject: [PATCH 1/1] Add zsh compdef completion script. - -Continuing off of PR 13384 in upstream. -This commit is ready to be rebased to include appropriate co-authors -before merging PR. - ---- - scripts/register-completions.zsh | 13 +++---------- - 1 file changed, 3 insertions(+), 10 deletions(-) - -diff --git a/src/sdk/scripts/register-completions.zsh b/src/sdk/scripts/register-completions.zsh -index 8eebe9a867..faa32fef71 100644 ---- a/src/sdk/scripts/register-completions.zsh -+++ b/src/sdk/scripts/register-completions.zsh -@@ -1,10 +1,3 @@ --# zsh parameter completion for the dotnet CLI -- --_dotnet_zsh_complete() --{ -- local completions=("$(dotnet complete "$words")") -- -- reply=( "${(ps:\n:)completions}" ) --} -- --compctl -K _dotnet_zsh_complete dotnet -+#compdef dotnet -+local completions=("$(dotnet complete "$words")") -+[[ -n "$completions" ]] && compadd -- "${(ps:\n:)completions}" --- -2.34.1 - diff --git a/community/dotnet7-build/vstest_intent-net8.0.patch b/community/dotnet7-build/vstest_intent-net8.0.patch new file mode 100644 index 0000000..6a51807 --- /dev/null +++ b/community/dotnet7-build/vstest_intent-net8.0.patch @@ -0,0 +1,13 @@ +diff --git a/src/vstest/test/Intent/Intent.csproj b/src/vstest/test/Intent/Intent.csproj +index bb711c9256..6d0b199a9b 100644 +--- a/src/vstest/test/Intent/Intent.csproj ++++ b/src/vstest/test/Intent/Intent.csproj +@@ -2,7 +2,7 @@ + + + Exe +- net6.0 ++ net8.0 + enable + enable + From 34e084db8216e23a6b72818cfbc67d12f0332864 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 8 Jan 2024 22:01:40 -0500 Subject: [PATCH 070/738] dotnet8-sdk: upgrade for diff --- community/dotnet7-runtime/APKBUILD | 240 ++++++++++++------------- community/dotnet7-runtime/README.md | 62 ++++--- community/dotnet7-runtime/dotnet.sh.in | 12 -- 3 files changed, 143 insertions(+), 171 deletions(-) delete mode 100644 community/dotnet7-runtime/dotnet.sh.in diff --git a/community/dotnet7-runtime/APKBUILD b/community/dotnet7-runtime/APKBUILD index 54e6227..9075df5 100644 --- a/community/dotnet7-runtime/APKBUILD +++ b/community/dotnet7-runtime/APKBUILD @@ -1,87 +1,34 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) -# secfixes: -# 7.0.3-r0: -# - CVE-2023-21808 -# 7.0.5-r0: -# - CVE-2023-28260 -# 7.0.7-r0: -# - CVE-2023-24895 -# - CVE-2023-24897 -# - CVE-2023-24936 -# - CVE-2023-29331 -# - CVE-2023-29337 -# - CVE-2023-32032 -# - CVE-2023-33126 -# - CVE-2023-33128 -# - CVE-2023-33135 -# 7.0.9-r0: -# - CVE-2023-33127 -# - CVE-2023-33170 -# 7.0.10-r0: -# - CVE-2023-38178 -# - CVE-2023-35390 -# - CVE-2023-38180 -# - CVE-2023-35391 -# 7.0.11-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# 7.0.12-r0: -# - CVE-2023-36435 -# - CVE-2023-38171 -# - CVE-2023-44487 -# 7.0.13-r0: -# - CVE-2023-36792 -# - CVE-2023-36793 -# - CVE-2023-36794 -# - CVE-2023-36796 -# - CVE-2023-36799 -# - CVE-2023-44487 -# - CVE-2023-38171 -# - CVE-2023-36435 -# 7.0.14-r0: -# - CVE-2023-36049 -# - CVE-2023-36558 - - -pkgname=dotnet7-runtime -pkgver=7.0.14 -_bldver=7.0.114-r0 +pkgname=dotnet8-sdk +pkgver=8.0.100 +_bldver=8.0.0-r0 pkgrel=0 # Following for dotnet build version 6.0 and up _pkgver_macro=${pkgver%.*} _pkgver_name=${_pkgver_macro//[.0]} _bldver_ver=${_bldver%%-*} -pkgdesc="The .NET $_pkgver_macro Core runtime" +_bldver_ver=${_bldver_ver/0./0.10} +pkgdesc="The .NET $_pkgver_macro SDK" # x86: blocked by https://github.com/dotnet/runtime/issues/77667 # armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/36748 -# s390x: no diskspace -arch="x86_64 armv7 aarch64" +# riscv64: blocked by https://github.com/dotnet/runtime/issues/84834 +arch="all !x86 !armhf !riscv64" url=https://dotnet.microsoft.com license="MIT" -depends=" - dotnet$_pkgver_name-hostfxr - icu-data-full - icu-libs - " -makedepends="dotnet$_pkgver_name-build=$_bldver" +makedepends="dotnet$_pkgver_name-runtime-bootstrap=$_bldver" subpackages=" - aspnetcore$_pkgver_name-runtime:aspnetcore_runtime:noarch - aspnetcore$_pkgver_name-targeting-pack:aspnetcore_targeting_pack:noarch - dotnet$_pkgver_name-apphost-pack:apphost_pack - dotnet$_pkgver_name-hostfxr - dotnet$_pkgver_name-targeting-pack:targeting_pack:noarch - dotnet-host:host + dotnet$_pkgver_name-templates:templates:noarch + dotnet$_pkgver_name-sdk-dbg:dbg:noarch + dotnet-zsh-completion:zshcomp:noarch + dotnet-bash-completion:bashcomp:noarch + dotnet-doc + netstandard21-targeting-pack:netstandard_targeting_pack:noarch " provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" options="!check" # No test suite -source="dotnet.sh.in" builddir="$srcdir" _libdir="/usr/lib" @@ -93,80 +40,113 @@ case $CARCH in *) _dotnet_arch="$CARCH";; esac -build() { - sed "s|%LIBDIR%|$_libdir/dotnet|" "$srcdir"/dotnet.sh.in > "$srcdir"/dotnet.sh -} - package() { - install -dm 755 "$pkgdir"/$_libdir/dotnet/shared + # libucontext isn't automatically detected on all platforms + depends=" + aspnetcore$_pkgver_name-runtime + aspnetcore$_pkgver_name-targeting-pack + dotnet$_pkgver_name-apphost-pack + dotnet$_pkgver_name-targeting-pack + dotnet$_pkgver_name-templates + netstandard21-targeting-pack + libucontext + " + provides=" + dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel + dotnet$_pkgver_name-dev=$pkgver-r$pkgrel + " - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.NETCore.App "$pkgdir"/$_libdir/dotnet/shared/. + install -dm 755 "$pkgdir"/$_libdir/dotnet + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/sdk "$pkgdir"/$_libdir/dotnet/. + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/sdk-manifests "$pkgdir"/$_libdir/dotnet/. + + # See https://github.com/dotnet/source-build/issues/2579 + find "$pkgdir" -type f -name 'vstest.console' -delete + find "$pkgdir" -type f -name 'testhost.x86' -delete + + # docs + install -dm 755 "$pkgdir"/usr/share/man/man1 + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/docs/* "$pkgdir"/usr/share/man/man1/. } -host() { - pkgdesc="A generic driver for the .NET Core Command Line Interface" - depends="" - - install -dm 755 \ - "$subpkgdir"/etc/profile.d \ - "$subpkgdir"/etc/dotnet \ - "$subpkgdir"/usr/bin \ - "$subpkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/dotnet "$subpkgdir"/$_libdir/dotnet/. - ln -s $_libdir/dotnet/dotnet "$subpkgdir"/usr/bin/dotnet - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location_$_dotnet_arch - install -Dm 644 "$srcdir"/dotnet.sh -t "$subpkgdir"/etc/profile.d/ -} - -hostfxr() { - pkgdesc="The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use." - depends="dotnet-host" - provides="dotnet-hostfxr-$_pkgver_macro=$pkgver-r$pkgrel" +dbg() { + pkgdesc="The .NET $_pkgver_macro SDK - debug pdb files" + depends="dotnet$_pkgver_name-sdk" + provides="dotnet-sdk-pdb-$_pkgver_macro=$pkgver-r$pkgrel" install -dm 755 "$subpkgdir"/$_libdir/dotnet - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/host "$subpkgdir"/$_libdir/dotnet/. + # move pdb files + cd "$pkgdir" || return 0 + find . -type f ! -name "$(printf "*\n*")" -name '*.pdb' > tmp + while IFS= read -r i; do + d="$subpkgdir/${i%/*}" # dirname $i + mkdir -p "$d" + mv "$pkgdir/$i" "$d" + rmdir "$pkgdir/${i%/*}" 2>/dev/null || : + done < tmp + rm tmp } -aspnetcore_runtime() { - pkgdesc="The ASP.NET $_pkgver_macro Core runtime" - depends="dotnet$_pkgver_name-runtime" - provides="aspnetcore-runtime-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/shared - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/shared/Microsoft.AspNetCore.App "$subpkgdir"/$_libdir/dotnet/shared/. -} - -apphost_pack() { - pkgdesc="The .NET $_pkgver_macro Core apphost pack" - provides="dotnet-apphost-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Host.* "$subpkgdir"/$_libdir/dotnet/packs/. -} - -targeting_pack() { - pkgdesc="The .NET $_pkgver_macro Core targeting pack" - provides="dotnet-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.NETCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. -} - -aspnetcore_targeting_pack() { - pkgdesc="The ASP.NET $_pkgver_macro Core targeting pack" - provides="aspnetcore-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" +netstandard_targeting_pack() { + pkgdesc="The .NET 2.1 Standard targeting pack" + depends="dotnet-host" + provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel" install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/Microsoft.AspNetCore.App.Ref "$subpkgdir"/$_libdir/dotnet/packs/. + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/NETStandard.Library.Ref "$subpkgdir"/$_libdir/dotnet/packs/ + + # remove pdb files + find "$subpkgdir" -type f -name '*.pdb' -delete } -sha512sums=" -c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in -" +templates() { + pkgdesc="The .NET $_pkgver_macro templates" + depends="dotnet-host" + provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel" + + install -dm 755 "$subpkgdir"/$_libdir/dotnet + + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/templates "$subpkgdir"/$_libdir/dotnet/. + + # remove pdb files + find "$subpkgdir" -type f -name '*.pdb' -delete +} + +zshcomp() { + depends="" + pkgdesc="zsh completion for .NET" + # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk + # thus pulling this with it for sdk + install_if="netstandard21-targeting-pack zsh" + depends="dotnet-host" + + install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions + + install -m 755 "$_libdir"/dotnet/bootstrap/$_bldver_ver/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet +} + +bashcomp() { + depends="" + pkgdesc="bash completion for .NET" + # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk + # thus pulling this with it for sdk + install_if="netstandard21-targeting-pack bash-completion" + depends="dotnet-host" + + install -dm 755 "$subpkgdir"/usr/share/bash-completion/completions + + install -m 755 "$_libdir"/dotnet/bootstrap/$_bldver_ver/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet +} + +doc() { + default_doc + pkgdesc="Docs for .NET" + + # licenses + install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/LICENSE.txt "$subpkgdir"/usr/share/licenses/dotnet/. + cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/ThirdPartyNotices.txt "$subpkgdir"/usr/share/licenses/dotnet/. +} diff --git a/community/dotnet7-runtime/README.md b/community/dotnet7-runtime/README.md index 3ad31c7..26d3107 100644 --- a/community/dotnet7-runtime/README.md +++ b/community/dotnet7-runtime/README.md @@ -1,21 +1,20 @@ -# dotnet7-runtime +# dotnet8-sdk -This is the .NET 7.0 package for Alpine Linux. +This is the .NET 8.0 package for Alpine Linux. Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael # Building info ## Generated packages -* `aspnetcore7-runtime` -* `aspnetcore7-targeting-pack` -* `dotnet7-apphost-pack` (used by dotnet7-runtime) -* `dotnet7-hostfxr` (used by dotnet-host) -* `dotnet7-runtime` -* `dotnet7-targeting-pack` -* `dotnet-host` +* `dotnet8-sdk` +* `dotnet8-templates` (required by sdk) +* `dotnet-zsh-completion` +* `dotnet-bash-completion` +* `dotnet-doc` +* `netstandard21-targeting-pack` -## How to build dotnet7 on Alpine +## How to build dotnet8 on Alpine As dotnet is a self-hosting compiler (thus it compiles using itself), it requires a bootstrap for the initial build. To solve this problem, this package follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) @@ -26,17 +25,22 @@ builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` has also been designed to be crossbuild aware, allowing bootstrapping to other platforms. -In summary, dotnet7 is built using three different aports. +In summary, dotnet8 is built using three different aports. -* `community/dotnet7-stage0` -Builds minimum components for full build of dotnet7, and packages these in an initial -`dotnet7-stage0-bootstrap` package that `dotnet7-build` pulls. -* `community/dotnet7-build` -Builds full and packages dotnet7 fully using either stage0 or previoulsy built -dotnet7 build. -* `community/dotnet7-runtime` +* `community/dotnet8-stage0` +Builds minimum components for full build of dotnet8, and packages these in an initial +`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. +* `community/dotnet8-runtime +Builds full and packages dotnet8 fully using either stage0 or previoulsy built +dotnet8 build. +* `community/dotnet8-sdk` As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet7-build. +is required to package runtime bits from dotnet8-runtime. dotnet8-runtime only +builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is +released, the updated components are to be built on dotnet8-sdk rather than +simply repackaging dotnet8-runtime artifacts. + + ## Crossbuilding with `stage0` Crossbuilding `stage0` is a three step process: @@ -48,7 +52,7 @@ Crossbuilding `stage0` is a three step process: `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required keys. This makes it so that whatever package is not built in step 1 will be pulled from package repos -3. Crossbuild `dotnet7-stage0` via: +3. Crossbuild `dotnet8-stage0` via: ``` CHOST=$CTARGET_ARCH abuild -r ``` @@ -57,7 +61,7 @@ CHOST=$CTARGET_ARCH abuild -r This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet7` as opposed to `dotnet-7.0` +In addition, the package is named `dotnet8` as opposed to `dotnet-8.0` to match Alpine Linux naming conventions for packages with many installable versions # Contributing @@ -73,7 +77,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` + - `cd community/dotnet8-sdk` 3. Make your changes. Don't forget to add a changelog. @@ -85,15 +89,15 @@ follow. 6. Commit the changes to the git repo in a git branch - - `git checkout -b dotnet7/` + - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: descriptive description'` + - `git commit -m 'community/dotnet8-sdk: descriptive description'` - `git push` 7. Create a merge request with your changes, tagging @ayakael for review. -8. Once the tests in the pull-request pass, and reviewers are happy, your changes +8. Once the tests in the merge-request pass, and reviewers are happy, your changes will be merged. ## Updating to an new upstream release @@ -103,7 +107,7 @@ follow. 2. Checkout the forked repository. - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet7-build` + - `cd community/dotnet8-sdk` 3. Build the new upstream source tarball. Update the versions in the @@ -124,15 +128,15 @@ follow. 7. Commit the changes to the git repo in a git branch. - - `git checkout -b dotnet7/` + - `git checkout -b dotnet8/` - `git add` any new patches - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet7-build: upgrade to ` + - `git commit -m 'community/dotnet8-sdk: upgrade to ` - `git push` 8. Create a merge request with your changes, tagging @ayakael for review. -9. Once the tests in the pull-request pass, and reviewers are happy, your changes +9. Once the tests in the merge-request pass, and reviewers are happy, your changes will be merged. # Testing diff --git a/community/dotnet7-runtime/dotnet.sh.in b/community/dotnet7-runtime/dotnet.sh.in deleted file mode 100644 index f85eb29..0000000 --- a/community/dotnet7-runtime/dotnet.sh.in +++ /dev/null @@ -1,12 +0,0 @@ -# Set location for AppHost lookup -[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=%LIBDIR% - -# Add dotnet tools directory to PATH -DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" -case "$PATH" in - *"$DOTNET_TOOLS_PATH"* ) true ;; - * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; -esac - -# Extract self-contained executables under HOME to avoid multi-user issues from using the default '/var/tmp' -[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" From 3ef36a5960b6dfa4537b502775a5a1e2ac5af5ee Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 9 Jan 2024 13:20:51 -0500 Subject: [PATCH 071/738] user/authentik: upgrade to 2023.10.6 --- user/authentik/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 6c584d6..36e8a55 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=authentik -pkgver=2023.10.5 +pkgver=2023.10.6 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" @@ -236,7 +236,7 @@ package() { } sha512sums=" -0517da0969b096dfa18630ed691920b85e26c85bef18f8eed62ff6c47a54f20f5970530d90dc3a73dc5d2d328471f703187a5f5a1c0a93f3b663f1f6d9242487 authentik-2023.10.5.tar.gz +31ab960d1070c61ee053456ca5f12255c99d56b0fee832b6c8540ba9a066babee956899f21f7bfe370fb7060b47aac5b88de17b821e0fd79b0643dd05aef82a6 authentik-2023.10.6.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From 323137ca9e7ed814165546b2c8fde9d4c5cb4ed8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:01:02 -0500 Subject: [PATCH 072/738] user/linux-rm: upgrade to v1.3.4 of upstream and fix build --- user/linux-rm/APKBUILD | 12 +- ...sun-style-flash-on-section-directive.patch | 428 ++++++++++++++++++ user/linux-rm/config-changes-rm.armv7 | 2 + 3 files changed, 437 insertions(+), 5 deletions(-) create mode 100644 user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch diff --git a/user/linux-rm/APKBUILD b/user/linux-rm/APKBUILD index 11bec0b..864b2b5 100644 --- a/user/linux-rm/APKBUILD +++ b/user/linux-rm/APKBUILD @@ -3,8 +3,8 @@ pkgname=linux-rm pkgver=5.4.70 -_rmver=1.3.3 -pkgrel=10 +_rmver=1.3.4 +pkgrel=11 pkgdesc="Linux kernel with reMarkable patches" url=https://github.com/reMarkable/linux depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" @@ -17,6 +17,7 @@ builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver source=" https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz https://raw.githubusercontent.com/ichaozi/RemarkableFramebuffer/0f37dc8c06d340dc1af52ff2d4d6d5789ccf14bb/kernel-mxc-epdc-fb-reference/epdc_ES103CS1.fw + arm-replace-sun-style-flash-on-section-directive.patch brcmfmac-disable-power-management.patch brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch enable-automatic-partial-refreshing.patch @@ -246,11 +247,12 @@ _dev() { } sha512sums=" -80ab274ca3d30935d9913490662f17499c1ceedb438fe171554097d25ffc1cf85ee53f0c1642e94c0b833fdfb17636cd554bf685e4a6f5dac20cf122c1a25447 RM1XX_5.4.70_v1.3.3.tar.gz +0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz ad4bd6f332319aceee7a1c7b71b49439e8217621214b6249c7e20198360d02ea442f31edfc8e1af1b85ed71e6f97c1cb7decf7b0885c9d0293361eef47f218b2 epdc_ES103CS1.fw +f9114f8843317e1d26fbf1831182bc9c8d5907a92af6312c778f32be81414cfddfc3ced7b58375960232031d3295e8770b1a1e7466d2ace99e01bbcccd838543 arm-replace-sun-style-flash-on-section-directive.patch c5fc4f2f70112cc66a91a2948f7fd4adcd7172a95191b4c862084c7b80093cfa696925aa9a825c41bddac7441ba153eb264b8146e52a4556a73349e6fd10e641 brcmfmac-disable-power-management.patch 27ec1bc1d916dbd2258192c1ed864eacbd2746b49caa554fbaf1124bac478bab0b729e7fabbab8705ae175bb098800f795d415f4de4964da921c1b802560b67a brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch 0f47278c5bfafb939e46224fbf16f9491e3cc560ac128dcf430a1f6cf9064fb1c5bf5db1a3076c35d30c004aec525a7d6616a647564f197bb29c57701c1db982 enable-automatic-partial-refreshing.patch -f7891cc029c362a270b98e488da0b8ac941d73971735fcdef88b872a00ffa5b90b98f4f5ece7f8e62506e23e88b1badccf439082d80a5433a564b28095f6007a config-changes-rm.armv7 -f7891cc029c362a270b98e488da0b8ac941d73971735fcdef88b872a00ffa5b90b98f4f5ece7f8e62506e23e88b1badccf439082d80a5433a564b28095f6007a config-changes-rm.armhf +9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armv7 +9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armhf " diff --git a/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch new file mode 100644 index 0000000..29fef7f --- /dev/null +++ b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch @@ -0,0 +1,428 @@ +From 790756c7e0229dedc83bf058ac69633045b1000e Mon Sep 17 00:00:00 2001 +From: Nick Desaulniers +Date: Mon, 4 Nov 2019 19:31:45 +0100 +Subject: [PATCH] ARM: 8933/1: replace Sun/Solaris style flag on section + directive + +It looks like a section directive was using "Solaris style" to declare +the section flags. Replace this with the GNU style so that Clang's +integrated assembler can assemble this directive. + +The modified instances were identified via: +$ ag \.section | grep # + +Link: https://ftp.gnu.org/old-gnu/Manuals/gas-2.9.1/html_chapter/as_7.html#SEC119 +Link: https://github.com/ClangBuiltLinux/linux/issues/744 +Link: https://bugs.llvm.org/show_bug.cgi?id=43759 +Link: https://reviews.llvm.org/D69296 + +Acked-by: Nicolas Pitre +Reviewed-by: Ard Biesheuvel +Reviewed-by: Stefan Agner +Signed-off-by: Nick Desaulniers +Suggested-by: Fangrui Song +Suggested-by: Jian Cai +Suggested-by: Peter Smith +Signed-off-by: Russell King +--- + arch/arm/boot/bootp/init.S | 2 +- + arch/arm/boot/compressed/big-endian.S | 2 +- + arch/arm/boot/compressed/head.S | 2 +- + arch/arm/boot/compressed/piggy.S | 2 +- + arch/arm/mm/proc-arm1020.S | 2 +- + arch/arm/mm/proc-arm1020e.S | 2 +- + arch/arm/mm/proc-arm1022.S | 2 +- + arch/arm/mm/proc-arm1026.S | 2 +- + arch/arm/mm/proc-arm720.S | 2 +- + arch/arm/mm/proc-arm740.S | 2 +- + arch/arm/mm/proc-arm7tdmi.S | 2 +- + arch/arm/mm/proc-arm920.S | 2 +- + arch/arm/mm/proc-arm922.S | 2 +- + arch/arm/mm/proc-arm925.S | 2 +- + arch/arm/mm/proc-arm926.S | 2 +- + arch/arm/mm/proc-arm940.S | 2 +- + arch/arm/mm/proc-arm946.S | 2 +- + arch/arm/mm/proc-arm9tdmi.S | 2 +- + arch/arm/mm/proc-fa526.S | 2 +- + arch/arm/mm/proc-feroceon.S | 2 +- + arch/arm/mm/proc-mohawk.S | 2 +- + arch/arm/mm/proc-sa110.S | 2 +- + arch/arm/mm/proc-sa1100.S | 2 +- + arch/arm/mm/proc-v6.S | 2 +- + arch/arm/mm/proc-v7.S | 2 +- + arch/arm/mm/proc-v7m.S | 4 ++-- + arch/arm/mm/proc-xsc3.S | 2 +- + arch/arm/mm/proc-xscale.S | 2 +- + 28 files changed, 29 insertions(+), 29 deletions(-) + +diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S +index 5c476bd2b4ce9c..b562da2f704088 100644 +--- a/arch/arm/boot/bootp/init.S ++++ b/arch/arm/boot/bootp/init.S +@@ -13,7 +13,7 @@ + * size immediately following the kernel, we could build this into + * a binary blob, and concatenate the zImage using the cat command. + */ +- .section .start,#alloc,#execinstr ++ .section .start, "ax" + .type _start, #function + .globl _start + +diff --git a/arch/arm/boot/compressed/big-endian.S b/arch/arm/boot/compressed/big-endian.S +index 88e2a88d324b25..0e092c36da2f27 100644 +--- a/arch/arm/boot/compressed/big-endian.S ++++ b/arch/arm/boot/compressed/big-endian.S +@@ -6,7 +6,7 @@ + * Author: Nicolas Pitre + */ + +- .section ".start", #alloc, #execinstr ++ .section ".start", "ax" + + mrc p15, 0, r0, c1, c0, 0 @ read control reg + orr r0, r0, #(1 << 7) @ enable big endian mode +diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S +index ae70754d003daa..ead21e5f2b8032 100644 +--- a/arch/arm/boot/compressed/head.S ++++ b/arch/arm/boot/compressed/head.S +@@ -140,7 +140,7 @@ + #endif + .endm + +- .section ".start", #alloc, #execinstr ++ .section ".start", "ax" + /* + * sort out different calling conventions + */ +diff --git a/arch/arm/boot/compressed/piggy.S b/arch/arm/boot/compressed/piggy.S +index 0284f84dcf3804..27577644ee721a 100644 +--- a/arch/arm/boot/compressed/piggy.S ++++ b/arch/arm/boot/compressed/piggy.S +@@ -1,5 +1,5 @@ + /* SPDX-License-Identifier: GPL-2.0 */ +- .section .piggydata,#alloc ++ .section .piggydata, "a" + .globl input_data + input_data: + .incbin "arch/arm/boot/compressed/piggy_data" +diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S +index 4fa5371bc6624c..2785da387c9104 100644 +--- a/arch/arm/mm/proc-arm1020.S ++++ b/arch/arm/mm/proc-arm1020.S +@@ -491,7 +491,7 @@ cpu_arm1020_name: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1020_proc_info,#object + __arm1020_proc_info: +diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S +index 5d8a8339e09a4e..e9ea237ed78525 100644 +--- a/arch/arm/mm/proc-arm1020e.S ++++ b/arch/arm/mm/proc-arm1020e.S +@@ -449,7 +449,7 @@ arm1020e_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1020e_proc_info,#object + __arm1020e_proc_info: +diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S +index b3dd95c345e482..920c279e7879d8 100644 +--- a/arch/arm/mm/proc-arm1022.S ++++ b/arch/arm/mm/proc-arm1022.S +@@ -443,7 +443,7 @@ arm1022_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1022_proc_info,#object + __arm1022_proc_info: +diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S +index e927187157d7d5..0bdf25a95b107d 100644 +--- a/arch/arm/mm/proc-arm1026.S ++++ b/arch/arm/mm/proc-arm1026.S +@@ -437,7 +437,7 @@ arm1026_crval: + string cpu_arm1026_name, "ARM1026EJ-S" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm1026_proc_info,#object + __arm1026_proc_info: +diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S +index c99d24363f32ee..39361e196d61b8 100644 +--- a/arch/arm/mm/proc-arm720.S ++++ b/arch/arm/mm/proc-arm720.S +@@ -172,7 +172,7 @@ arm720_crval: + * See for a definition of this structure. + */ + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S +index 1b4a3838393fbd..1a94bbf6e53fc2 100644 +--- a/arch/arm/mm/proc-arm740.S ++++ b/arch/arm/mm/proc-arm740.S +@@ -128,7 +128,7 @@ __arm740_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + .type __arm740_proc_info,#object + __arm740_proc_info: + .long 0x41807400 +diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S +index 17a4687065c7f9..52b66cf0259e3f 100644 +--- a/arch/arm/mm/proc-arm7tdmi.S ++++ b/arch/arm/mm/proc-arm7tdmi.S +@@ -72,7 +72,7 @@ __arm7tdmi_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \ + extra_hwcaps=0 +diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S +index 298c76b47749f9..31ac8acc34dc55 100644 +--- a/arch/arm/mm/proc-arm920.S ++++ b/arch/arm/mm/proc-arm920.S +@@ -434,7 +434,7 @@ arm920_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm920_proc_info,#object + __arm920_proc_info: +diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S +index 824be3a0bc2382..ca2c7ca8af2146 100644 +--- a/arch/arm/mm/proc-arm922.S ++++ b/arch/arm/mm/proc-arm922.S +@@ -412,7 +412,7 @@ arm922_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm922_proc_info,#object + __arm922_proc_info: +diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S +index d40cff8f102c2b..a381a0c9f1092e 100644 +--- a/arch/arm/mm/proc-arm925.S ++++ b/arch/arm/mm/proc-arm925.S +@@ -477,7 +477,7 @@ arm925_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S +index 4ef89e1d11276e..1ba253c2bce190 100644 +--- a/arch/arm/mm/proc-arm926.S ++++ b/arch/arm/mm/proc-arm926.S +@@ -460,7 +460,7 @@ arm926_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm926_proc_info,#object + __arm926_proc_info: +diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S +index 1c26d991386d7d..4b8a00220cc976 100644 +--- a/arch/arm/mm/proc-arm940.S ++++ b/arch/arm/mm/proc-arm940.S +@@ -340,7 +340,7 @@ __arm940_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __arm940_proc_info,#object + __arm940_proc_info: +diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S +index 2dc1c75a4fd4a8..555becf9c758d1 100644 +--- a/arch/arm/mm/proc-arm946.S ++++ b/arch/arm/mm/proc-arm946.S +@@ -395,7 +395,7 @@ __arm946_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + .type __arm946_proc_info,#object + __arm946_proc_info: + .long 0x41009460 +diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S +index 913c06e590af51..ef517530130b03 100644 +--- a/arch/arm/mm/proc-arm9tdmi.S ++++ b/arch/arm/mm/proc-arm9tdmi.S +@@ -66,7 +66,7 @@ __arm9tdmi_setup: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req + .type __\name\()_proc_info, #object +diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S +index 8120b6f4dbb83e..dddf833fe00078 100644 +--- a/arch/arm/mm/proc-fa526.S ++++ b/arch/arm/mm/proc-fa526.S +@@ -185,7 +185,7 @@ fa526_cr1_set: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __fa526_proc_info,#object + __fa526_proc_info: +diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S +index bb6dc34d42a374..b12b76bc8d30ca 100644 +--- a/arch/arm/mm/proc-feroceon.S ++++ b/arch/arm/mm/proc-feroceon.S +@@ -571,7 +571,7 @@ feroceon_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S +index f083085788857b..d47d6c5cee63a6 100644 +--- a/arch/arm/mm/proc-mohawk.S ++++ b/arch/arm/mm/proc-mohawk.S +@@ -416,7 +416,7 @@ mohawk_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __88sv331x_proc_info,#object + __88sv331x_proc_info: +diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S +index d5bc5d70256399..baba503ba81669 100644 +--- a/arch/arm/mm/proc-sa110.S ++++ b/arch/arm/mm/proc-sa110.S +@@ -196,7 +196,7 @@ sa110_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .type __sa110_proc_info,#object + __sa110_proc_info: +diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S +index be7b611c76c76a..75ebacc8e4e5cb 100644 +--- a/arch/arm/mm/proc-sa1100.S ++++ b/arch/arm/mm/proc-sa1100.S +@@ -239,7 +239,7 @@ sa1100_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S +index c1c85eb3484f31..1dd0d5ca27da8f 100644 +--- a/arch/arm/mm/proc-v6.S ++++ b/arch/arm/mm/proc-v6.S +@@ -261,7 +261,7 @@ v6_crval: + string cpu_elf_name, "v6" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + /* + * Match any ARMv6 processor core. +diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S +index c4e8006a1a8cdd..48e0ef6f0dccfe 100644 +--- a/arch/arm/mm/proc-v7.S ++++ b/arch/arm/mm/proc-v7.S +@@ -644,7 +644,7 @@ __v7_setup_stack: + string cpu_elf_name, "v7" + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + /* + * Standard v7 proc info content +diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S +index 1a49d503eafc80..84459c1d31b87f 100644 +--- a/arch/arm/mm/proc-v7m.S ++++ b/arch/arm/mm/proc-v7m.S +@@ -93,7 +93,7 @@ ENTRY(cpu_cm7_proc_fin) + ret lr + ENDPROC(cpu_cm7_proc_fin) + +- .section ".init.text", #alloc, #execinstr ++ .section ".init.text", "ax" + + __v7m_cm7_setup: + mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP) +@@ -177,7 +177,7 @@ ENDPROC(__v7m_setup) + string cpu_elf_name "v7m" + string cpu_v7m_name "ARMv7-M" + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0, proc_fns = v7m_processor_functions + .long 0 /* proc_info_list.__cpu_mm_mmu_flags */ +diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S +index 1ac0fbbe9f127f..42eaecc43cfeff 100644 +--- a/arch/arm/mm/proc-xsc3.S ++++ b/arch/arm/mm/proc-xsc3.S +@@ -496,7 +496,7 @@ xsc3_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req + .type __\name\()_proc_info,#object +diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S +index bdb2b7749b0393..18ac5a1f892258 100644 +--- a/arch/arm/mm/proc-xscale.S ++++ b/arch/arm/mm/proc-xscale.S +@@ -610,7 +610,7 @@ xscale_crval: + + .align + +- .section ".proc.info.init", #alloc ++ .section ".proc.info.init", "a" + + .macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache + .type __\name\()_proc_info,#object diff --git a/user/linux-rm/config-changes-rm.armv7 b/user/linux-rm/config-changes-rm.armv7 index ba2e73e..fa272a1 100644 --- a/user/linux-rm/config-changes-rm.armv7 +++ b/user/linux-rm/config-changes-rm.armv7 @@ -58,3 +58,5 @@ CONFIG_F2FS_FS_LZO=y CONFIG_F2FS_FS_LZ4=y CONFIG_F2FS_FS_ZSTD=y CONFIG_F2FS_FS_LZORLE=y +# disabled as breaks build +CONFIG_MXC_GPU_VIV=n From 7e4c556b558bc8b1f585a85eb849539ddf1cc3c1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:01:28 -0500 Subject: [PATCH 073/738] user/linux-rm-headers: upgrade to v1.3.4 of upstream --- user/linux-rm-headers/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/linux-rm-headers/APKBUILD b/user/linux-rm-headers/APKBUILD index fbffc82..0e34b2d 100644 --- a/user/linux-rm-headers/APKBUILD +++ b/user/linux-rm-headers/APKBUILD @@ -3,8 +3,8 @@ pkgname=linux-rm-headers pkgver=5.4.70 -_rmver=1.3.3 -pkgrel=1 +_rmver=1.3.4 +pkgrel=2 pkgdesc="Linux kernel headers with reMarkable patches" url=https://github.com/reMarkable/linux provides="linux-headers=$pkgver-r$pkgrel" @@ -36,5 +36,5 @@ package() { rm -rf "$pkgdir"/usr/include/drm } sha512sums=" -80ab274ca3d30935d9913490662f17499c1ceedb438fe171554097d25ffc1cf85ee53f0c1642e94c0b833fdfb17636cd554bf685e4a6f5dac20cf122c1a25447 RM1XX_5.4.70_v1.3.3.tar.gz +0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz " From 236ea2406fbccd5978a87fc3b2415b251be791fe Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:02:02 -0500 Subject: [PATCH 074/738] user/rm-extractor: rebuild --- user/rm-extractor/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/rm-extractor/APKBUILD b/user/rm-extractor/APKBUILD index ef74060..6de5b57 100644 --- a/user/rm-extractor/APKBUILD +++ b/user/rm-extractor/APKBUILD @@ -4,7 +4,7 @@ pkgname=rm-extractor _gittag=9d37e9437affea379dadb59e646a819b3b9147dd pkgver=0.0.1 -pkgrel=2 +pkgrel=3 pkgdesc="Image extractor for reMarkable firmware files" arch="noarch" url="https://github.com/ddvk/remarkable-update" From 2c2d9f59dac91d82cafc686682744927d4a689c9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:02:17 -0500 Subject: [PATCH 075/738] user/rm-utils: rebuild --- user/rm-utils/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/rm-utils/APKBUILD b/user/rm-utils/APKBUILD index c3135a6..d8f2b68 100644 --- a/user/rm-utils/APKBUILD +++ b/user/rm-utils/APKBUILD @@ -3,7 +3,7 @@ pkgname=rm-utils pkgver=0.0.1 -pkgrel=3 +pkgrel=4 pkgdesc="Utility files for reMarkable tablet" arch="armv7" url="http://www.davisr.me/projects/parabola-rm/" From 8fc6bcc2e078e9cb0e4cd4959a8530cba06d24ba Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:03:29 -0500 Subject: [PATCH 076/738] user/u-boot-rm: rebuild --- user/u-boot-rm/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/u-boot-rm/APKBUILD b/user/u-boot-rm/APKBUILD index 2a923c8..da2e135 100644 --- a/user/u-boot-rm/APKBUILD +++ b/user/u-boot-rm/APKBUILD @@ -5,7 +5,7 @@ pkgname=u-boot-rm pkgver=2020.09 _rm1tag=97b35fdddf0077abd2e0f0409b94ef20adbe8565 _rm2tag=47c91918aa7724c16b6eaf87cf5dfbf4548eafc1 -pkgrel=8 +pkgrel=9 pkgdesc="u-boot bootloader common files" url="https://www.denx.de/wiki/U-Boot/" arch="armv7" From 4dc26a2d21117d1989dad1c4811ce8fe0426bfe7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:03:47 -0500 Subject: [PATCH 077/738] user/xf86-video-fbdev-rm: rebuild --- user/xf86-video-fbdev-rm/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/xf86-video-fbdev-rm/APKBUILD b/user/xf86-video-fbdev-rm/APKBUILD index ee6babd..edfe76b 100644 --- a/user/xf86-video-fbdev-rm/APKBUILD +++ b/user/xf86-video-fbdev-rm/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa pkgname=xf86-video-fbdev-rm pkgver=0.5.0 -pkgrel=2 +pkgrel=3 pkgdesc="Video driver for framebuffer device with rM patches" url="https://www.x.org" arch="all" From 253180904369ddc51f1c8f17f22e079abf2117f1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 15:04:05 -0500 Subject: [PATCH 078/738] user/xochitl-bin: rebuild --- user/xochitl-bin/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/xochitl-bin/APKBUILD b/user/xochitl-bin/APKBUILD index 9470670..4ea4dfa 100644 --- a/user/xochitl-bin/APKBUILD +++ b/user/xochitl-bin/APKBUILD @@ -4,7 +4,7 @@ pkgname=xochitl-bin pkgver=2.15.1.1189 _pkgprefix=Xdvv3lBmE4 -pkgrel=0 +pkgrel=1 pkgdesc="Image extractor for reMarkable firmware files" arch="armv7" url="https://archive.org/download/rm110/RM110/" From 2ef38b56b408272fe7d18e0441857bf441271559 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 09:57:38 -0500 Subject: [PATCH 079/738] user/dotnet8-runtime: upgrade to 8.0.1 --- user/dotnet8-runtime/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/user/dotnet8-runtime/APKBUILD b/user/dotnet8-runtime/APKBUILD index 247b315..e4b2d71 100644 --- a/user/dotnet8-runtime/APKBUILD +++ b/user/dotnet8-runtime/APKBUILD @@ -2,9 +2,9 @@ # Contributor: Antoine Martin (ayakael) pkgname=dotnet8-runtime -pkgver=8.0.0 +pkgver=8.0.1 pkgrel=0 -_gittag=v8.0.0 +_gittag=v8.0.1 _giturl="https://github.com/dotnet/dotnet" _testtag=d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0 _bunnytag=v15 @@ -512,8 +512,8 @@ aspnetcore_targeting_pack() { } sha512sums=" -094265462d66d97b51ebfbe5fb06d4a679b97881f1f5a07a87a282a96eeaabfe97ca42061d59aac71dd8861c07f07dda16a72e29ae03167407e51d3fd2767562 dotnet-tarball-v8.0.0.tar.gz -55f2c56f7fbed4137ebe5e81c7b86d199d7ff91c6e19fbc9a4af8cd5d0f0195273356ead8b80aedfff56a3d704a541a7c2a7395bec3fa5d6585f3afd056b1220 dotnet-release-v8.0.0.json +f2a1d0bf6159de441a566c53b04b6d8f31c520fdadca42670fe1eba37c5d1900fe6d930023c4b37134edf28cf5816c8bc9116ba691432b1f6d56ce2a814c3412 dotnet-tarball-v8.0.1.tar.gz +8ddbaed1611294016cd99728b57182ee63bb4fe4b0331556ff4eb0551f9188744f04ffa5ad2034e93168090114a8eaafe411ccec286e26aa7d871da477a1b5d7 dotnet-release-v8.0.1.json 8fe41ddd03c1b98dc9eec5e337ca0dcc8fbeff65b67ac1a383bd7d1e5fd3c21b820dacd498d1c2268445bb634cfb9dba3e8924e71a98f2ccd8221b17fb079044 dotnet-testsuite-d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0.tar.gz 7f59b10878aa90a6953ee4d88d08fa932910a24018dace92b173ee87c847d14734f93dc5fc031982a3d0a5cb4ac223b83d0e548531c23c4e3326dc83510989a9 dotnet-bunny-v15.tar.gz c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in From 27fd9ab80cd0dc27b5184684de312bc2e8520710 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 09:57:51 -0500 Subject: [PATCH 080/738] user/dotnet8-sdk: upgrade to 8.0.101 --- user/dotnet8-sdk/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/dotnet8-sdk/APKBUILD b/user/dotnet8-sdk/APKBUILD index c832da8..b3c43bc 100644 --- a/user/dotnet8-sdk/APKBUILD +++ b/user/dotnet8-sdk/APKBUILD @@ -2,8 +2,8 @@ # Contributor: Antoine Martin (ayakael) pkgname=dotnet8-sdk -pkgver=8.0.100 -_bldver=8.0.0-r0 +pkgver=8.0.101 +_bldver=8.0.1-r0 pkgrel=0 # Following for dotnet build version 6.0 and up From f94cd98eff138699369fe003af3aa3ebd86deac0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 16:19:41 -0500 Subject: [PATCH 081/738] user/ruby3.2: new aport --- user/ruby3.2/APKBUILD | 253 ++++++++++++++++++ user/ruby3.2/dont-install-bundled-gems.patch | 20 ++ user/ruby3.2/fix-get_main_stack.patch | 68 +++++ user/ruby3.2/fix-riscv64-build.patch | 38 +++ user/ruby3.2/ruby3.2.post-upgrade | 17 ++ .../test_insns-lower-recursion-depth.patch | 47 ++++ 6 files changed, 443 insertions(+) create mode 100644 user/ruby3.2/APKBUILD create mode 100644 user/ruby3.2/dont-install-bundled-gems.patch create mode 100644 user/ruby3.2/fix-get_main_stack.patch create mode 100644 user/ruby3.2/fix-riscv64-build.patch create mode 100644 user/ruby3.2/ruby3.2.post-upgrade create mode 100644 user/ruby3.2/test_insns-lower-recursion-depth.patch diff --git a/user/ruby3.2/APKBUILD b/user/ruby3.2/APKBUILD new file mode 100644 index 0000000..59e7332 --- /dev/null +++ b/user/ruby3.2/APKBUILD @@ -0,0 +1,253 @@ +# Contributor: Carlo Landmeter +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +# +# secfixes: +# 3.1.4-r0: +# - CVE-2023-28755 +# - CVE-2023-28756 +# 3.1.3-r0: +# - CVE-2021-33621 +# 3.1.2-r0: +# - CVE-2022-28738 +# - CVE-2022-28739 +# 3.0.3-r0: +# - CVE-2021-41817 +# - CVE-2021-41816 +# - CVE-2021-41819 +# 2.7.4-r0: +# - CVE-2021-31799 +# - CVE-2021-31810 +# - CVE-2021-32066 +# 2.7.3-r0: +# - CVE-2021-28965 +# - CVE-2021-28966 +# 2.7.2-r0: +# - CVE-2020-25613 +# 2.6.6-r0: +# - CVE-2020-10663 +# - CVE-2020-10933 +# 2.6.5-r0: +# - CVE-2019-16255 +# - CVE-2019-16254 +# - CVE-2019-15845 +# - CVE-2019-16201 +# 2.5.2-r0: +# - CVE-2018-16395 +# - CVE-2018-16396 +# 2.5.1-r0: +# - CVE-2017-17742 +# - CVE-2018-6914 +# - CVE-2018-8777 +# - CVE-2018-8778 +# - CVE-2018-8779 +# - CVE-2018-8780 +# 2.4.2-r0: +# - CVE-2017-0898 +# - CVE-2017-10784 +# - CVE-2017-14033 +# - CVE-2017-14064 +# - CVE-2017-0899 +# - CVE-2017-0900 +# - CVE-2017-0901 +# - CVE-2017-0902 +# 2.4.3-r0: +# - CVE-2017-17405 +# +pkgname=ruby3.2 +# When upgrading, upgrade also each ruby- aport listed in file +# gems/bundled_gems. If some aport is missing or not in the main repo, +# create/move it. +pkgver=3.2.2 +_abiver="${pkgver%.*}.0" +pkgrel=0 +pkgdesc="An object-oriented language for quick and easy programming" +url="https://www.ruby-lang.org/" +arch="all" +license="Ruby AND BSD-2-Clause AND MIT" +depends="ca-certificates" +depends_dev=" + $pkgname=$pkgver-r$pkgrel + $pkgname-rdoc=$pkgver-r$pkgrel + gmp-dev + libucontext-dev + " +makedepends="$depends_dev + autoconf + gdbm-dev + libffi-dev + linux-headers + openssl-dev>3 + readline-dev + yaml-dev + zlib-dev + " +install="$pkgname.post-upgrade" +subpackages="$pkgname-dbg $pkgname-doc $pkgname-dev + $pkgname-rdoc::noarch + $pkgname-libs + $pkgname-full::noarch + " +source="https://cache.ruby-lang.org/pub/ruby/${pkgver%.*}/ruby-$pkgver.tar.gz + test_insns-lower-recursion-depth.patch + fix-get_main_stack.patch + dont-install-bundled-gems.patch + fix-riscv64-build.patch + " +replaces="ruby3.2-gems" +builddir="$srcdir"/ruby-$pkgver + +# For backward compatibility (pre 3.x). +for _i in bigdecimal etc fiddle gdbm io-console irb json; do + provides="$provides ruby3.2-$_i=$pkgver-r$pkgrel" +done + +_gemdir="/usr/lib/ruby/gems/$_abiver" +_rubydir="/usr/lib/ruby/$_abiver" +_chost="${CHOST/-alpine-/-}" + +case "$CARCH" in + x86) _arch="i386";; + *) _arch="$CARCH";; +esac + +prepare() { + default_prepare + autoconf + + # v2.7.1 - Of all the bootstraptest only test_fiber fails on s390x: + # test_fiber.rb bootstraptest.tmp.rb:8: [BUG] vm_call_cfunc: cfp consistency error (0x000003ffb63fefb0, 0x000003ffb42f5f58) + case "$CARCH" in + s390x) rm bootstraptest/test_fiber.rb;; + esac + + local name ver; while read -r name ver _; do + case "$name=$ver" in + [a-z]*=[0-9]*.[0-9]*) + if ! apk add -qs "ruby-$name>=$ver" >/dev/null 2>&1; then + warning "bump package ruby-$name to version $ver" + fi + echo "ruby-$name>=$ver" >> "$srcdir"/.ruby-full.depends + esac + done < "$builddir"/gems/bundled_gems +} + +build() { + # -fomit-frame-pointer makes ruby segfault, see gentoo bug #150413 + # In many places aliasing rules are broken; play it safe + # as it's risky with newer compilers to leave it as it is. + # -O2 - ruby is a language runtime, so performance is crucial. Moreover, + # ruby 3.1.1 fails with Bus Error when compiled with -Os on armhf/armv7. + # This makes ruby-libs 7% bigger (13.4 -> 14.4 MiB). + export CFLAGS="${CFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing" + export CPPFLAGS="${CPPFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing" + + # Needed for coroutine stuff + export LIBS="-lucontext" + + # ruby saves path to install. we want use $PATH + export INSTALL=install + + # the configure script does not detect isnan/isinf as macros + export ac_cv_func_isnan=yes + export ac_cv_func_isinf=yes + + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr \ + --sysconfdir=/etc \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --with-sitedir=/usr/local/lib/site_ruby \ + --with-search-path="/usr/lib/site_ruby/\$(ruby_ver)/$_arch-linux" \ + --enable-pthread \ + --disable-rpath \ + --enable-shared \ + --with-mantype=man + make +} + +check() { + # https://bugs.ruby-lang.org/issues/18380 + local disable_tests="-n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" + + case "$CARCH" in + x86 | armhf | armv7) + # TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according + # to upstream, but the test is disabled just on Travis, not in test suite. + # https://bugs.ruby-lang.org/issues/18393 + disable_tests="$disable_tests -n !/TestReadline#test_interrupt_in_other_thread/" + ;; + esac + + make test TESTS="$disable_tests" +} + +package() { + make DESTDIR="$pkgdir" SUDO="" install + + install -m 644 -D COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING + + cd "$pkgdir" + + # Remove bundled gem bundler; it's provided by a separate aport/package + # ruby-bundler. + rm -rf ./$_rubydir/bundler + rm ./$_rubydir/bundler.rb + rm -rf ./$_gemdir/gems/bundler-* + rm ./$_gemdir/specifications/default/bundler-*.gemspec + rm usr/bin/bundle usr/bin/bundler + + # Remove bundled CA certificates; they are provided by ca-certificates. + rm ./$_rubydir/rubygems/ssl_certs/*/*.pem + rmdir ./$_rubydir/rubygems/ssl_certs/* || true + + rm -Rf ./$_gemdir/cache/* + + if [ -d usr/local ]; then + local f=$(find usr/local -type f) + if [ -n "$f" ]; then + error "Found files in /usr/local:" + echo "$f" + return 1 + fi + rm -r usr/local + fi +} + +rdoc() { + pkgdesc="Ruby documentation tool" + license="Ruby" + depends="$pkgname" + + amove $_rubydir/rdoc + amove $_gemdir/gems/rdoc-* + amove $_gemdir/specifications/default/rdoc-* + amove usr/bin/ri + amove usr/bin/rdoc +} + +libs() { + pkgdesc="Libraries necessary to run Ruby" + depends="" + + amove usr/lib +} + +full() { + pkgdesc="Ruby with all bundled gems" + # bundler is bundled since Ruby 2.6, so include it in ruby-full despite + # that it's provided by a seprate aport/package. + depends="ruby ruby-rdoc ruby-bundler $(cat "$srcdir"/.ruby-full.depends)" + + mkdir -p "$subpkgdir" +} + +sha512sums=" +bcc68f3f24c1c8987d9c80b57332e5791f25b935ba38daf5addf60dbfe3a05f9dcaf21909681b88e862c67c6ed103150f73259c6e35c564f13a00f432e3c1e46 ruby-3.2.2.tar.gz +16fc1f35aee327d1ecac420b091beaa53c675e0504d5a6932004f17ca68a2c38f57b053b0a3903696f2232c5add160d363e3972a962f7f7bcb52e4e998c7315d test_insns-lower-recursion-depth.patch +42cd45c1db089a1ae57834684479a502e357ddba82ead5fa34e64c13971e7ab7ad2919ddd60a104a817864dd3e2e35bdbedb679210eb41d82cab36a0687e43d4 fix-get_main_stack.patch +a77da5e5eb7d60caf3f1cabb81e09b88dc505ddd746e34efd1908c0096621156d81cc65095b846ba9bdb66028891aefce883a43ddec6b56b5beb4aac5e4ee33f dont-install-bundled-gems.patch +000530316af1fca007fe8cee694b59e2e801674bcc1a2ebea95e67745d4afc0ce66c902fdbc88ee847a4fbf55115b183cd803cbf7c98ef685938efb3e2b7c991 fix-riscv64-build.patch +" diff --git a/user/ruby3.2/dont-install-bundled-gems.patch b/user/ruby3.2/dont-install-bundled-gems.patch new file mode 100644 index 0000000..b125fa0 --- /dev/null +++ b/user/ruby3.2/dont-install-bundled-gems.patch @@ -0,0 +1,20 @@ +Don't install bundled gems - we package them separately. + +--- a/tool/rbinstall.rb ++++ b/tool/rbinstall.rb +@@ -990,6 +990,7 @@ + end + end + ++=begin XXX-Patched + install?(:ext, :comm, :gem, :'bundled-gems') do + gem_dir = Gem.default_dir + install_dir = with_destdir(gem_dir) +@@ -1057,6 +1058,7 @@ + puts "skipped bundled gems: #{gems.join(' ')}" + end + end ++=end + + parse_args() + diff --git a/user/ruby3.2/fix-get_main_stack.patch b/user/ruby3.2/fix-get_main_stack.patch new file mode 100644 index 0000000..864a314 --- /dev/null +++ b/user/ruby3.2/fix-get_main_stack.patch @@ -0,0 +1,68 @@ +--- a/thread_pthread.c ++++ b/thread_pthread.c +@@ -858,9 +858,6 @@ + # define MAINSTACKADDR_AVAILABLE 0 + # endif + #endif +-#if MAINSTACKADDR_AVAILABLE && !defined(get_main_stack) +-# define get_main_stack(addr, size) get_stack(addr, size) +-#endif + + #ifdef STACKADDR_AVAILABLE + /* +@@ -942,6 +939,55 @@ + return 0; + #undef CHECK_ERR + } ++ ++#if defined(__linux__) && !defined(__GLIBC__) && defined(HAVE_GETRLIMIT) ++ ++#ifndef PAGE_SIZE ++#include ++#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) ++#endif ++ ++static int ++get_main_stack(void **addr, size_t *size) ++{ ++ size_t start, end, limit, prevend = 0; ++ struct rlimit r; ++ FILE *f; ++ char buf[PATH_MAX+80], s[8]; ++ int n; ++ STACK_GROW_DIR_DETECTION; ++ ++ f = fopen("/proc/self/maps", "re"); ++ if (!f) ++ return -1; ++ n = 0; ++ while (fgets(buf, sizeof buf, f)) { ++ n = sscanf(buf, "%zx-%zx %*s %*s %*s %*s %7s", &start, &end, s); ++ if (n >= 2) { ++ if (n == 3 && strcmp(s, "[stack]") == 0) ++ break; ++ prevend = end; ++ } ++ n = 0; ++ } ++ fclose(f); ++ if (n == 0) ++ return -1; ++ ++ limit = 100 << 20; /* 100MB stack limit */ ++ if (getrlimit(RLIMIT_STACK, &r)==0 && r.rlim_cur < limit) ++ limit = r.rlim_cur & -PAGE_SIZE; ++ if (limit > end) limit = end; ++ if (prevend < end - limit) prevend = end - limit; ++ if (start > prevend) start = prevend; ++ *addr = IS_STACK_DIR_UPPER() ? (void *)start : (void *)end; ++ *size = end - start; ++ return 0; ++} ++#else ++# define get_main_stack(addr, size) get_stack(addr, size) ++#endif ++ + #endif + + static struct { diff --git a/user/ruby3.2/fix-riscv64-build.patch b/user/ruby3.2/fix-riscv64-build.patch new file mode 100644 index 0000000..e81e8b6 --- /dev/null +++ b/user/ruby3.2/fix-riscv64-build.patch @@ -0,0 +1,38 @@ +Patch-Source: https://lists.openembedded.org/g/openembedded-core/message/161168 +partially extracted to actually apply onto a release tarball + +--- +From dfb22e4d6662bf72879eda806eaa78c7b52b519e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 25 Jan 2022 20:29:14 -0800 +Subject: [PATCH] vm_dump.c: Define REG_S1 and REG_S2 for musl/riscv + +These defines are missing in musl, there is a possible +patch to add them to musl, but we need a full list of +these names for mcontext that can be added once for all + +Upstream-Status: Inappropriate [musl bug] +Signed-off-by: Khem Raj +--- + vm_dump.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/vm_dump.c b/vm_dump.c +index a98f5aa..957b785 100644 +--- a/vm_dump.c ++++ b/vm_dump.c +@@ -39,6 +39,11 @@ + + #define MAX_POSBUF 128 + ++#if defined(__riscv) && !defined(__GLIBC__) ++# define REG_S1 9 ++# define REG_S2 18 ++#endif ++ + #define VM_CFP_CNT(ec, cfp) \ + ((rb_control_frame_t *)((ec)->vm_stack + (ec)->vm_stack_size) - \ + (rb_control_frame_t *)(cfp)) +-- +2.35.0 + diff --git a/user/ruby3.2/ruby3.2.post-upgrade b/user/ruby3.2/ruby3.2.post-upgrade new file mode 100644 index 0000000..6cba787 --- /dev/null +++ b/user/ruby3.2/ruby3.2.post-upgrade @@ -0,0 +1,17 @@ +#!/bin/sh + +ver_new="$1" +ver_old="$2" + +if [ "$(apk version -t "$ver_old" "2.5.0-r0")" = "<" ]; then + cat >&2 <<-EOF + * + * In Ruby 2.5 more parts of the stdlib has been splitted into standalone + * gems, yet still installed with Ruby by default. We have moved some of + * them into separate subpackages. If you don't know which subpackages you + * need, you may install meta-package "ruby-full". + * + EOF +fi + +exit 0 diff --git a/user/ruby3.2/test_insns-lower-recursion-depth.patch b/user/ruby3.2/test_insns-lower-recursion-depth.patch new file mode 100644 index 0000000..0069720 --- /dev/null +++ b/user/ruby3.2/test_insns-lower-recursion-depth.patch @@ -0,0 +1,47 @@ +The patched test is a recursion function. We have lower stack size, +so we hit SystemStackError sooner than on other platforms. + + #361 test_insns.rb:389:in `block in ': + # recursive once + def once n + return %r/#{ + if n == 0 + true + else + once(n-1) # here + end + }/ox + end + x = once(128); x = once(7); x = once(16); + x =~ "true" && $~ + #=> "" (expected "true") once + Stderr output is not empty + bootstraptest.tmp.rb:3:in `once': stack level too deep (SystemStackError) + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + ... 125 levels... + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:7:in `block in once' + from bootstraptest.tmp.rb:3:in `once' + from bootstraptest.tmp.rb:11:in `
' + Test_insns.rb FAIL 1/187 + FAIL 1/1197 tests failed + Make: *** [uncommon.mk:666: yes-btest-ruby] Error 1 + +--- a/bootstraptest/test_insns.rb ++++ b/bootstraptest/test_insns.rb +@@ -274,7 +274,7 @@ + end + }/ox + end +- x = once(128); x = once(7); x = once(16); ++ x = once(32); x = once(7); x = once(16); + x =~ "true" && $~ + }, + [ 'once', <<-'},', ], # { From 055ea7572d6f22c26446196724ad288da4cb99ba Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 16:24:35 -0500 Subject: [PATCH 082/738] user/ruby3.2-minitest: new aport --- user/ruby3.2-minitest/APKBUILD | 66 +++++++++++++++++++++++++++++ user/ruby3.2-minitest/gemspec.patch | 15 +++++++ 2 files changed, 81 insertions(+) create mode 100644 user/ruby3.2-minitest/APKBUILD create mode 100644 user/ruby3.2-minitest/gemspec.patch diff --git a/user/ruby3.2-minitest/APKBUILD b/user/ruby3.2-minitest/APKBUILD new file mode 100644 index 0000000..a3193fb --- /dev/null +++ b/user/ruby3.2-minitest/APKBUILD @@ -0,0 +1,66 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-minitest +_gemname=minitest +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=5.15.0 +pkgrel=1 +pkgdesc="Suite of testing facilities supporting TDD, BDD, mocking, and benchmarking for Ruby" +url="https://github.com/minitest/minitest" +arch="noarch" +license="MIT" +depends="ruby3.2" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/minitest/minitest/archive/v$pkgver/$_gemname-$pkgver.tar.gz + https://rubygems.org/downloads/$_gemname-$pkgver.gem + " +builddir="$srcdir/$_gemname-$pkgver" + +prepare() { + default_prepare + + # Generate gemspec (there's no gemspec in the source). + gem specification -l --ruby "$srcdir"/$_gemname-$pkgver.gem \ + > "$builddir"/$_gemname.gemspec +} + +build() { + gem build $_gemname.gemspec +} + +check() { + ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + local geminstdir="$gemdir/gems/$_gemname-$pkgver" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins + + cd "$geminstdir" + rm -rf History.* Manifest.* README.* Rakefile test/ +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +194d074fa83a87b21f551f86d2bb682bcbac53d5a23d4e0f81fbf570427c5cdfcb27e10618bea69037f9e55bea637ed96e52a10808c586ab4020d788556bda71 minitest-5.15.0.tar.gz +5e97a7aa616966ffc60e10cdc0ba123a7e793f10283ec3b6bf36066177036788cb950ad566fbac49e613b93f08b9846534f463017cde966b4890c3a34a2286be minitest-5.15.0.gem +" diff --git a/user/ruby3.2-minitest/gemspec.patch b/user/ruby3.2-minitest/gemspec.patch new file mode 100644 index 0000000..a21a0c5 --- /dev/null +++ b/user/ruby3.2-minitest/gemspec.patch @@ -0,0 +1,15 @@ +--- a/webrick.gemspec ++++ b/webrick.gemspec +@@ -14,12 +14,6 @@ + + s.require_path = %w{lib} + s.files = [ +- "Gemfile", +- "LICENSE.txt", +- "README.md", +- "Rakefile", +- "bin/console", +- "bin/setup", + "lib/webrick.rb", + "lib/webrick/accesslog.rb", + "lib/webrick/cgi.rb", From 365e4301ae12cc91f81fed05232c6fb37f281446 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 16:24:50 -0500 Subject: [PATCH 083/738] user/ruby3.2-bundler: new aport --- user/ruby3.2-bundler/APKBUILD | 51 +++++++++++++++++++++++++++++ user/ruby3.2-bundler/manpages.patch | 37 +++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 user/ruby3.2-bundler/APKBUILD create mode 100644 user/ruby3.2-bundler/manpages.patch diff --git a/user/ruby3.2-bundler/APKBUILD b/user/ruby3.2-bundler/APKBUILD new file mode 100644 index 0000000..b21a7d8 --- /dev/null +++ b/user/ruby3.2-bundler/APKBUILD @@ -0,0 +1,51 @@ +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-bundler +_gemname=bundler +pkgver=2.3.26 +pkgrel=0 +pkgdesc="Manage an application's gem dependencies" +url="https://bundler.io/" +arch="noarch" +license="MIT" +depends="ruby3.2" +makedepends="ruby3.2-rake" +subpackages="$pkgname-doc" +source="https://github.com/rubygems/rubygems/archive/bundler-v$pkgver.tar.gz + manpages.patch + " +builddir="$srcdir/rubygems-bundler-v$pkgver/bundler" +options="!check" # tests require deps not available in main repo + +build() { + rake build_metadata + gem build $_gemname.gemspec +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --bindir "$pkgdir/usr/bin" \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname + + local n; for n in 1 5; do + mkdir -p "$pkgdir"/usr/share/man/man$n + mv "$gemdir"/gems/$_gemname-$pkgver/lib/bundler/man/*.$n "$pkgdir"/usr/share/man/man$n/ + done + + rm -rf "$gemdir"/cache \ + "$gemdir"/build_info \ + "$gemdir"/doc \ + "$gemdir"/gems/$_gemname-$pkgver/man \ + "$gemdir"/gems/$_gemname-$pkgver/*.md +} + +sha512sums=" +0a02d5130ecb8ca96e1850fc409a55d9f07481bbb8ec9b20554cdc6f3b3d3aada67717ab17dd30835615e4c228f39f895bd9b6f55bc22d4dbd88caef9cc105ba bundler-v2.3.26.tar.gz +77a36e61ed205aeea6114b1039dfbe29fcaf916eeae3f91785aa53b3ac534e004aa257e218534d927f39e3673eebbfb3ef9ee17f04ed81f74117799b88e53cf4 manpages.patch +" diff --git a/user/ruby3.2-bundler/manpages.patch b/user/ruby3.2-bundler/manpages.patch new file mode 100644 index 0000000..cc11b02 --- /dev/null +++ b/user/ruby3.2-bundler/manpages.patch @@ -0,0 +1,37 @@ +From: Jakub Jirutka +Date: Fri, 26 Mar 2021 23:17:29 +0100 +Subject: [PATCH] Fix --help when man pages are moved out + +* Allow to move man pages from the gem's directory to the standard + system location (/usr/share/man) without breaking `bundler --help`. +* Fallback to the bundled ronn pages when the man command is available, + but the bundler man pages are not (i.e. ruby-bundler-doc is not + installed). +* Execute man with '-c' option to print the man page to the terminal + instead of using pager. + +--- a/lib/bundler/cli.rb ++++ b/lib/bundler/cli.rb +@@ -118,16 +118,17 @@ + end + + man_path = File.expand_path("man", __dir__) +- man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f| +- [File.basename(f, ".*"), f] ++ man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\.ronn\Z/).collect do |f| ++ man_name = File.basename(f, ".ronn") ++ [File.basename(man_name, ".*"), man_name] + end] + + if man_pages.include?(command) + man_page = man_pages[command] +- if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} +- Kernel.exec "man #{man_page}" ++ if Bundler.which("man") && Kernel.system("man -w #{command} >/dev/null 2>&1") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} ++ Kernel.exec "man -c #{command}" + else +- puts File.read("#{man_path}/#{File.basename(man_page)}.ronn") ++ puts File.read("#{man_path}/#{man_page}.ronn") + end + elsif command_path = Bundler.which("bundler-#{cli}") + Kernel.exec(command_path, "--help") From 02af6d8194f3d82b2c9865038d07b9dade41f783 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 16:25:00 -0500 Subject: [PATCH 084/738] user/ruby3.2-rake: new aport --- user/ruby3.2-rake/APKBUILD | 58 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 user/ruby3.2-rake/APKBUILD diff --git a/user/ruby3.2-rake/APKBUILD b/user/ruby3.2-rake/APKBUILD new file mode 100644 index 0000000..6c34011 --- /dev/null +++ b/user/ruby3.2-rake/APKBUILD @@ -0,0 +1,58 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-rake +_gemname=rake +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=13.0.6 +pkgrel=1 +pkgdesc="A Ruby task runner, inspired by make" +url="https://github.com/ruby/rake" +arch="noarch" +license="MIT" +depends="ruby3.2" +checkdepends="ruby3.2-minitest" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/ruby/rake/archive/v$pkgver/$_gemname-$pkgver.tar.gz" +builddir="$srcdir/$_gemname-$pkgver" + +build() { + gem build $_gemname.gemspec +} + +check() { + # FIXME: Fix test_signal_propagation_in_tests + ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" -- \ + --exclude=test_signal_propagation_in_tests +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --bindir "$pkgdir/usr/bin" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins + + cd gems/rake-* + rm -rf doc ./*.rdoc MIT-LICENSE +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +1b438be96d8cedaf70e961b0bbd2217692b0b5537b2e1d5f599158e7da3e300cf6ab0c5f0c52fea89be0beb675effbbf563d24e55c84fb673b4982013355e03c rake-13.0.6.tar.gz +" From 8b76c9808990dabb20095daa634334baa0f1884a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 16:38:45 -0500 Subject: [PATCH 085/738] user/loomio: new aport --- user/loomio/APKBUILD | 196 +++++++++++++++++++++++++++++++ user/loomio/bin-wrapper.in | 15 +++ user/loomio/loomio.confd | 32 +++++ user/loomio/loomio.initd | 39 ++++++ user/loomio/loomio.logrotate | 11 ++ user/loomio/loomio.post-install | 32 +++++ user/loomio/loomio.post-upgrade | 1 + user/loomio/loomio.pre-install | 26 ++++ user/loomio/loomio.sidekiq.initd | 32 +++++ user/loomio/loomio.vue.initd | 31 +++++ 10 files changed, 415 insertions(+) create mode 100644 user/loomio/APKBUILD create mode 100644 user/loomio/bin-wrapper.in create mode 100644 user/loomio/loomio.confd create mode 100644 user/loomio/loomio.initd create mode 100644 user/loomio/loomio.logrotate create mode 100755 user/loomio/loomio.post-install create mode 120000 user/loomio/loomio.post-upgrade create mode 100644 user/loomio/loomio.pre-install create mode 100644 user/loomio/loomio.sidekiq.initd create mode 100644 user/loomio/loomio.vue.initd diff --git a/user/loomio/APKBUILD b/user/loomio/APKBUILD new file mode 100644 index 0000000..38eb631 --- /dev/null +++ b/user/loomio/APKBUILD @@ -0,0 +1,196 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Jakub Jirutka +# Contributor: Antoine Martin (ayakael) +pkgname=loomio +pkgver=2.21.4 +_gittag=v$pkgver +pkgrel=0 +pkgdesc="A collaborative decision making tool" +url="https://github.com/loomio/loomio" +arch="x86_64" +license="MIT" +depends=" + postgresql + postgresql-contrib + python3 + redis + ruby3.2 + ruby3.2-bundler + ruby3.2-grpc + vips + npm + procps-ng + " +makedepends=" + cmd:chrpath + ruby3.2-dev + nodejs + openssl-dev + readline-dev + zlib-dev + libpq-dev + libffi-dev + imagemagick-dev + " +pkgusers="loomio" +pkggroups="loomio www-data" +install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" +subpackages="$pkgname-openrc" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/loomio/loomio/archive/refs/tags/v$pkgver.tar.gz + bin-wrapper.in + loomio.confd + loomio.logrotate + loomio.sidekiq.initd + loomio.vue.initd + loomio.initd + " +_prefix="usr/lib/webapps/loomio" + +export BUNDLE_DEPLOYMENT=true +export BUNDLE_FORCE_RUBY_PLATFORM=true +export BUNDLE_FROZEN=true +export BUNDLE_JOBS=${JOBS:-2} + +prepare() { + local sysgemdir=$(ruby -e 'puts Gem.default_dir') + + default_prepare + + # Allow use of any bundler + sed -i -e '/BUNDLED/,+1d' Gemfile.lock + + # Allow use of any platform + sed -i -e 's/PLATFORMS/PLATFORMS\n ruby/' Gemfile.lock + + # Some gems are broken, so we copy our fixed version + # instead of installing it from RubyGems using Bundler. + mkdir -p vendor/gems/grpc/src/ruby/lib/grpc + cp -r "$sysgemdir"/gems/grpc-*/* vendor/gems/grpc/ + cp "$sysgemdir"/specifications/grpc-*.gemspec \ + vendor/gems/grpc/grpc.gemspec + cp "$sysgemdir"/extensions/*/*/grpc-*/grpc/*.so \ + vendor/gems/grpc/src/ruby/lib/grpc/ +} + +build() { + local bundle_without='exclude development test' + + bundle config --local build.ffi --enable-system-libffi + bundle config --local build.vips --enable-system-libraries + bundle config --local build.nokogiri --use-system-libraries \ + --with-xml2-include=/usr/include/libxml2 \ + --with-xslt-include=/usr/include/libxslt + bundle config --local build.google-protobuf '-- --with-cflags=-D__va_copy=va_copy' + + msg "Installing Ruby gems..." + bundle config --local without "$bundle_without" + bundle config --local path "vendor/bundle" + + bundle install --no-cache + + msg "Precompiling static assets..." + bundle exec bootsnap precompile --gemfile app/ lib/ + + # Create executables in bin/*. + # See also https://github.com/bundler/bundler/issues/6149. + bundle binstubs --force bundler puma sidekiq + + # Remove faulty RPATH. + chrpath -d vendor/bundle/ruby/*/gems/*/lib/nokogiri/*/nokogiri.so + + # cp grpc so + cp vendor/gems/grpc/src/ruby/lib/grpc/grpc_c.so vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/. + rm -R vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/3* vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/2* + + msg "Installing npm modules..." + cd vue + # force as vite-plugin-yaml hasn't updated their peerDependencies list yet + npm ci --force + npm run build +} + +package() { + local destdir="$pkgdir/$_prefix" + local datadir="$pkgdir/var/lib/loomio" + local file dest + + # Make directories + install -dm 755 \ + "$(dirname $destdir)" \ + "$datadir" + + mkdir -p "$(dirname $destdir)" + cp -R "$builddir" "$destdir" + + cd "$destdir"/vendor/bundle/ruby/*/ + + # Remove tests, documentations and other useless files. + find gems/ \( -name 'doc' \ + -o -name 'spec' \ + -o -name 'test' \) \ + -type d -maxdepth 2 -exec rm -fr "{}" + + find gems/ \( -name 'README*' \ + -o -name 'CHANGELOG*' \ + -o -name 'CONTRIBUT*' \ + -o -name '*LICENSE*' \ + -o -name 'Rakefile' \ + -o -name '.*' \) \ + -type f -delete + + # Remove build logs and cache. + rm -rf build_info/ cache/ + find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete + + cd "$destdir" + + # Install and symlink config files. + for file in database.yml.postgresql puma.rb sidekiq.yml; do + dest="$(basename "${file/.postgresql/}")" + install -m640 -g loomio -D config/$file "$pkgdir"/etc/loomio/$dest + ln -sf /etc/loomio/$dest "$pkgdir"/$_prefix/config/${file/.postgrewsql/} + done + + # This file will be generated by the post-install script, just prepare symlink. + ln -sf /etc/loomio/secrets.yml config/secrets.yml + # These shouldn't be necessary, they are all configurable, but OmniBus + + cat > "$datadir"/.profile <<-EOF + export RAILS_ENV=production + export NODE_ENV=production + export EXECJS_RUNTIME=Disabled + EOF + + # Install wrapper scripts to /usr/bin. + local name; for name in rake rails; do + sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ + > "$builddir"/loomio-$name + install -m755 -D "$builddir"/loomio-$name "$pkgdir"/usr/bin/loomio-$name + done + + for file in $pkgname $pkgname.sidekiq $pkgname.vue; do + install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file + done + + install -m644 -D "$srcdir"/loomio.confd \ + "$pkgdir"/etc/conf.d/loomio + + install -m644 -D "$srcdir"/loomio.logrotate \ + "$pkgdir"/etc/logrotate.d/loomio +} + +assets() { + depends="" + + amove $_prefix/public/assets +} + +sha512sums=" +72a1238c1eaa3b963bd20a09d4fc2e52798264779bdf06d3f32891f2880d246059c77381329d1274bfa5979a35740017f0ced324f88b205369e77335b403ffba loomio-2.21.4.tar.gz +6cd4bb030660a9f4697eeb7c6de3f7509558aab3651e68218583dfeea56634f3b9f58acb50c7c9a4188a38c19434a815dd6c347e30207c4c0ae028c8dcb6ccaf bin-wrapper.in +0f1c91fbd4b8099f0a115705d5af799e4492fa2a0fd54175f3bfbfb5be1122bd7fd73a7709695c7caf2dcc667f3b8715051c24f424472e1115753e43a38fdf50 loomio.confd +1ecb0717cd5f04b894467b21d226b98d8f83b8f62afbf8da7edd57973aeabb13d121e9061cc48aec7572b1c710e82c8b44a1cedc0a924efd4bc4a124b3afe9a8 loomio.logrotate +c5dae2b6f9a23853c3c7ac068d97a7b0269b1775f6e0169c3d8999ec67c2baf3545515ea21037e882d900b15a7abf9061dd5a584bdc82c347b54d8c134f6d7a4 loomio.sidekiq.initd +f774954d8b06aacab27af9593b1b12fbe18ec2d0593dd4f82e4d3dfbc7e325fb1a423347fd974a2ec6665776a6cfe85f255f4fd7493c97eb840f34eb7fbdb329 loomio.vue.initd +645637c4112ec91ec2ea6022713e77a8ee76c0f0a81f9adf1f9210b52a578e94b5b02f0b6244b173905f580f72dc362b5434c714aae11e3619f73af223891bb8 loomio.initd +" diff --git a/user/loomio/bin-wrapper.in b/user/loomio/bin-wrapper.in new file mode 100644 index 0000000..fad9737 --- /dev/null +++ b/user/loomio/bin-wrapper.in @@ -0,0 +1,15 @@ +#!/bin/sh + +BUNDLE_DIR='/usr/lib/webapps/loomio' +export RAILS_ENV='production' +export NODE_ENV='production' +export EXECJS_RUNTIME='Disabled' + +cd $BUNDLE_DIR +install -m 700 -o loomio -g loomio -d "$(readlink ./tmp)" + +if [ "$(id -un)" != 'loomio' ]; then + exec su loomio -c '"$0" "$@"' -- bin/__COMMAND__ "$@" +else + exec bin/__COMMAND__ "$@" +fi diff --git a/user/loomio/loomio.confd b/user/loomio/loomio.confd new file mode 100644 index 0000000..890ad21 --- /dev/null +++ b/user/loomio/loomio.confd @@ -0,0 +1,32 @@ +# Configuration file for /etc/init.d/loomio and +# /etc/init.d/loomio.{vue,sidekiq} + +# Specify how many processes to create using sidekiq-cluster and which queue +# they should handle. Each whitespace-separated item equates to one additional +# Sidekiq process, and comma-separated values in each item determine the queues +# it works on. The special queue name "*" means all queues. +# Example: "* gitlab_shell process_commit,post_receive" +# See https://docs.gitlab.com/ee/administration/sidekiq/extra_sidekiq_processes.html. +#sidekiq_queue_groups="*" + +# Maximum threads to use with Sidekiq (default: 50, 0 to disable). +#sidekiq_max_concurrency= + +# Minimum threads to use with Sidekiq (default: 0). +#sidekiq_min_concurrency= + +# The number of seconds to wait between worker checks. +#sidekiq_interval= + +# Graceful timeout for all running processes. +#sidekiq_shutdown_timeout= + +# Run workers for all queues in sidekiq_queues.yml except the given ones. +#sidekiq_negate=no + +# Run workers based on the provided selector. +#sidekiq_queue_selector=no + +# Memory limit (in MiB) for the Sidekiq process. If the RSS (Resident Set Size) +# of the Sidekiq process exceeds this limit, a delayed shutdown is triggered. +#sidekiq_memkiller_max_rss=2000 diff --git a/user/loomio/loomio.initd b/user/loomio/loomio.initd new file mode 100644 index 0000000..864d102 --- /dev/null +++ b/user/loomio/loomio.initd @@ -0,0 +1,39 @@ +#!/sbin/openrc-run + +name="Loomio" +description="Meta script for starting/stopping all the Loomio components" +subservices="loomio.sidekiq loomio.vue" + +depend() { + use net +} + +start() { + local ret=0 + + ebegin "Starting all Loomio components" + local svc; for svc in $subservices; do + service $svc start || ret=1 + done + eend $ret +} + +stop() { + local ret=0 + + ebegin "Stopping all Loomio components" + local svc; for svc in $subservices; do + service $svc stop || ret=1 + done + eend $ret +} + +status() { + local ret=0 + + local svc; for svc in $subservices; do + echo "$svc:" + service $svc status || ret=1 + done + eend $ret +} diff --git a/user/loomio/loomio.logrotate b/user/loomio/loomio.logrotate new file mode 100644 index 0000000..f7fd264 --- /dev/null +++ b/user/loomio/loomio.logrotate @@ -0,0 +1,11 @@ +/var/log/loomio/*.log { + compress + copytruncate + delaycompress + maxsize 10M + minsize 1M + missingok + sharedscripts + rotate 10 + weekly +} diff --git a/user/loomio/loomio.post-install b/user/loomio/loomio.post-install new file mode 100755 index 0000000..2e2fb10 --- /dev/null +++ b/user/loomio/loomio.post-install @@ -0,0 +1,32 @@ +#!/bin/sh +set -eu + +group=loomio +config_file='/etc/loomio/config.yml' + +#if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then +# echo "* Generating random secret in $config_file" >&2 + +# secret_key="$(pwgen -s 50 1)" +# sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" +#fi + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Loomio upgrade run: + * + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/loomio/config.yml. + * + * 2. Create database for loomio: + * + * psql -c "CREATE ROLE loomio PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE loomio OWNER loomio ENCODING 'UTF-8';" + * + EOF +fi diff --git a/user/loomio/loomio.post-upgrade b/user/loomio/loomio.post-upgrade new file mode 120000 index 0000000..ec5bf9b --- /dev/null +++ b/user/loomio/loomio.post-upgrade @@ -0,0 +1 @@ +loomio.post-install \ No newline at end of file diff --git a/user/loomio/loomio.pre-install b/user/loomio/loomio.pre-install new file mode 100644 index 0000000..612ce4c --- /dev/null +++ b/user/loomio/loomio.pre-install @@ -0,0 +1,26 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +loomio_dir='/var/lib/loomio' + +if ! getent group loomio 1>/dev/null; then + echo '* Creating group loomio' 1>&2 + + addgroup -S loomio +fi + +if ! id loomio 2>/dev/null 1>&2; then + echo '* Creating user loomio' 1>&2 + + adduser -DHS -G loomio -h "$loomio_dir" -s /bin/sh \ + -g "added by apk for loomio" loomio + passwd -u loomio 1>/dev/null # unlock +fi + +if ! id -Gn loomio | grep -Fq redis; then + echo '* Adding user loomio to group www-data' 1>&2 + + addgroup loomio www-data +fi + +exit 0 diff --git a/user/loomio/loomio.sidekiq.initd b/user/loomio/loomio.sidekiq.initd new file mode 100644 index 0000000..fd3dd2d --- /dev/null +++ b/user/loomio/loomio.sidekiq.initd @@ -0,0 +1,32 @@ +#!/sbin/openrc-run + +name="Loomio background workers Service" +root="/usr/share/webapps/loomio" +pidfile="/run/loomio-sidekiq.pid" +logfile="/var/log/loomio/sidekiq.log" + +depend() { + use net + need redis +} + +start() { + ebegin "Starting Loomio background workers" + + cd $root + + start-stop-daemon --start --background \ + --chdir "${root}" \ + --user="loomio" \ + --make-pidfile --pidfile="${pidfile}" \ + -1 "${logfile}" -2 "${logfile}" \ + --exec /usr/bin/env -- RAILS_ENV=production bundle exec rails s + eend $? +} + +stop() { + ebegin "Stopping Loomio background workers" + start-stop-daemon --stop \ + --pidfile=${pidfile} \ + eend $? +} diff --git a/user/loomio/loomio.vue.initd b/user/loomio/loomio.vue.initd new file mode 100644 index 0000000..8fffb40 --- /dev/null +++ b/user/loomio/loomio.vue.initd @@ -0,0 +1,31 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/bundles/loomio" +command="npm" +command_args="run serve" +command_user="loomio" +command_group="loomio" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/loomio/$RC_SVCNAME.log" +error_log="/var/log/loomio/$RC_SVCNAME.err" + +depend() { + need redis + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/loomio \ + /var/lib/loomio +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} From c91a725f96f92d697f88f2e3bd55b4072608f856 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 16:59:12 -0500 Subject: [PATCH 086/738] user/protobuf: upgrade to ruby3.2 --- user/protobuf/APKBUILD | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/user/protobuf/APKBUILD b/user/protobuf/APKBUILD index 12aae5e..ec56f54 100644 --- a/user/protobuf/APKBUILD +++ b/user/protobuf/APKBUILD @@ -4,7 +4,7 @@ pkgname=protobuf _gemname=google-protobuf pkgver=23.4 _rubyver=3.23.4 -pkgrel=1 +pkgrel=2 pkgdesc="Library for extensible, efficient structure packing" url="https://github.com/protocolbuffers/protobuf" arch="all" @@ -23,14 +23,14 @@ makedepends=" $depends_dev abseil-cpp-dev cmake - ruby3.0 - ruby3.0-dev - ruby3.0-rake + ruby3.2 + ruby3.2-dev + ruby3.2-rake samurai " checkdepends="gtest-dev" subpackages=" - ruby3.0-$_gemname:_ruby + ruby3.2-$_gemname:_ruby $pkgname-dev $pkgname-vim::noarch protoc From 49e4024cc6f73cf2ad0bb6e30475bd257f2b95a0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 17:08:24 -0500 Subject: [PATCH 087/738] user/grpc: use ruby 3.2 --- user/grpc/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/grpc/APKBUILD b/user/grpc/APKBUILD index 4e69d21..ee4e810 100644 --- a/user/grpc/APKBUILD +++ b/user/grpc/APKBUILD @@ -22,7 +22,7 @@ _pythondepends=" " _rubydepends=" $pkgname=$pkgver-r$pkgrel - ruby3.0-google-protobuf>=3.19 + ruby3.2-google-protobuf>=3.19 " makedepends=" abseil-cpp-dev @@ -38,7 +38,7 @@ makedepends=" openssl-dev>3 protobuf-dev re2-dev - ruby3.0-dev + ruby3.2-dev samurai yaml-dev xxhash-dev @@ -54,7 +54,7 @@ subpackages=" $pkgname-doc py3-grpcio-pyc py3-grpcio:grpcio - ruby3.0-grpc:_ruby + ruby3.2-grpc:_ruby libaddress_sorting:lib libgpr:lib libgrpc:lib From ebcbe1fec93bd899654c8cc296b40195b5b06bac Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 17:08:47 -0500 Subject: [PATCH 088/738] user/grpc: use ruby 3.2 --- user/grpc/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/grpc/APKBUILD b/user/grpc/APKBUILD index ee4e810..2ebdecb 100644 --- a/user/grpc/APKBUILD +++ b/user/grpc/APKBUILD @@ -3,7 +3,7 @@ # Maintainer: wener pkgname=grpc pkgver=1.58.0 -pkgrel=0 +pkgrel=1 pkgdesc="The C based gRPC" url="https://grpc.io/" arch="all" From ed333c4461cba69b04e3526f183a65f94447fae1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 23:25:33 -0500 Subject: [PATCH 089/738] user/gitaly: upgrade to 16.6.4 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index c1aae40..14d13d0 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.6.0 +pkgver=16.6.4 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -c2c49b39cd978ca184547c101e3ea9cd68d96bafef070c34350986f0343766d740398631aa451d0c7b51ac90a383594a5de211b468babda39e7080b33a1588f4 gitaly-v16.6.0.tar.gz +e83ad1470000700021495b61e991156bee511d7f94e3e07ec325f1cf5ce000cd8b5e3f8af574ced6499e9487ace43617fcb76dad61c871327bb693d364508d4a gitaly-v16.6.4.tar.gz 55230e587839df8fc8c6daeee1e5a5fbd91d6d28966d9977d59e6fb3d75e269c9d4d119f3a06217a4c6c55733a50ec9affcdb132e77e1694df839269dcd292aa config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 21018c47106357b6eb9c51e1c5962134fe9cb4e8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 23:26:05 -0500 Subject: [PATCH 090/738] user/gitlab-pages: upgrade to 16.6.4 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index 168718b..1f3d621 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.6.0 +pkgver=16.6.4 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -9574321d6d423a28b6d80aed5c9cc598b0d76b6b179ed515e8d4e6277d9d2bc9f9e18bc4e96b68f686f32502e279026c6891c46f329d4267ac1e8031bfd8c2f7 gitlab-pages-v16.6.0.tar.gz +d8b6fad72afcf4c4861d2dd30149ef171154f6a7e5f6d46023bddcafc177795cbe8cf230ad427d38d86c76e89835968958dd2a17528ef0f2c75a5ad543db4a0d gitlab-pages-v16.6.4.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 9a7604eaade539bcd72bae49001c6f8a43cbe76b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Jan 2024 23:26:35 -0500 Subject: [PATCH 091/738] user/gitlab-foss: upgrade to 16.6.4 --- user/gitlab-foss/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 830213b..4e67952 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.6.1 +pkgver=16.6.4 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -377,7 +377,7 @@ assets() { } sha512sums=" -3d09db8e974becb6d54c2236e092735d67e114ee89ed89c69ef3171a6fe4441ba0023b8cf3eba97072f4b82e7b6452d47f790c0aa07791aabc372db501f866ab gitlab-foss-v16.6.1.tar.gz +ea6f5a6d00cc298052500617c962ddb235b4f5bc563af447e23d6af32f9e447970c4d3be0506b354802996508e8572df413a2350a603b8093f3c84f056005f55 gitlab-foss-v16.6.4.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From 7916377e65f9789a6bcf3d87f7ca3ee886bfb340 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 12 Jan 2024 16:30:12 -0500 Subject: [PATCH 092/738] [86;1R[86;1R[86;1R[86;1R[86;1gommits. user/kb: new aport --- user/kb/APKBUILD | 38 ++++++++++++++++++++++++++++++++++++ user/kb/python-colored.patch | 11 +++++++++++ 2 files changed, 49 insertions(+) create mode 100644 user/kb/APKBUILD create mode 100644 user/kb/python-colored.patch diff --git a/user/kb/APKBUILD b/user/kb/APKBUILD new file mode 100644 index 0000000..a578317 --- /dev/null +++ b/user/kb/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=kb +_pkgreal=kb-manager +pkgver=0.1.7 +pkgrel=0 +pkgdesc="A command line minimalist knowledge base manager" +arch="noarch" +url="https://github.com/gnebbia/kb" +license="GPL-3.0-only" +depends="py3-attrs py3-colored py3-gitpython" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +checkdepends="py3-toml py3-pytest-cov" +source=" + https://files.pythonhosted.org/packages/source/k/kb-manager/kb-manager-$pkgver.tar.gz + python-colored.patch + " +subpackages="$pkgname-pyc" +builddir="$srcdir"/$_pkgreal-$pkgver + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} +sha512sums=" +f0dff69a5e95339ea22d0a9d1260473f7b0b6ace184936896e164172aecb77672e9e0a228159abc95e50f30de2ec9ca5185ffbd825dce87edfec267bc56c75dc kb-manager-0.1.7.tar.gz +efb593959c790fc57822820a3ac2936dc90543e88268a9a47aa7248b6f1875e45d1ee7dbecac47b717491810483367b29670e0661ebbb760f875acb2e48b8765 python-colored.patch +" diff --git a/user/kb/python-colored.patch b/user/kb/python-colored.patch new file mode 100644 index 0000000..b2546cd --- /dev/null +++ b/user/kb/python-colored.patch @@ -0,0 +1,11 @@ +diff --git a/kb/printer/style.py b/kb/printer/style.py +index e0fd752..2bc7bf5 100644 +--- a/kb/printer/style.py ++++ b/kb/printer/style.py +@@ -17,5 +17,5 @@ from kb.entities.artifact import Artifact + + ALT_BGROUND = styler.set_bg('#303030') + BOLD = styler.set_style('bold') +-UND = styler.set_style('underlined') ++UND = styler.set_style('underline') + RESET = styler.reset() From 645eeea4823d7008142cb9072b769c3529bda2d3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 12 Jan 2024 16:53:26 -0500 Subject: [PATCH 093/738] backports/py3-colored: new aport --- backports/py3-colored/APKBUILD | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 backports/py3-colored/APKBUILD diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD new file mode 100644 index 0000000..215aaee --- /dev/null +++ b/backports/py3-colored/APKBUILD @@ -0,0 +1,28 @@ +# Maintainer: Hoang Nguyen +pkgname=py3-colored +_pyname=${pkgname/py3-/} +pkgver=1.4.4 +pkgrel=1 +pkgdesc="Simple Python library for color and formatting in terminal" +url="https://gitlab.com/dslackw/colored" +arch="noarch" +license="MIT" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="https://gitlab.com/dslackw/colored/-/archive/$pkgver/colored-$pkgver.tar.gz" +builddir="$srcdir/$_pyname-$pkgver" +options="!check" # No testsuite + +build() { + python3 setup.py build +} + +package() { + python3 setup.py install --prefix=/usr --root="$pkgdir" +} + +sha512sums=" +d49075f97bcc220802a8a64780b4c3910acd420e7e0e82ee71659132e7a294a638b098e4e46ae54f531739f8a43cd35979e521c02bb359205a13d96e37cfe8ed colored-1.4.4.tar.gz +" From 5b65ef5b0d1b608054dcb5c4cf2dbb56db476a5b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 12 Jan 2024 17:00:40 -0500 Subject: [PATCH 094/738] user/kb: fix depends and colored patch --- user/kb/APKBUILD | 12 ++++-------- user/kb/python-colored.patch | 11 ----------- 2 files changed, 4 insertions(+), 19 deletions(-) delete mode 100644 user/kb/python-colored.patch diff --git a/user/kb/APKBUILD b/user/kb/APKBUILD index a578317..5a56196 100644 --- a/user/kb/APKBUILD +++ b/user/kb/APKBUILD @@ -3,18 +3,15 @@ pkgname=kb _pkgreal=kb-manager pkgver=0.1.7 -pkgrel=0 +pkgrel=1 pkgdesc="A command line minimalist knowledge base manager" arch="noarch" url="https://github.com/gnebbia/kb" license="GPL-3.0-only" -depends="py3-attrs py3-colored py3-gitpython" +depends="py3-attrs py3-colored py3-gitpython py3-toml" makedepends="py3-setuptools py3-gpep517 py3-wheel" -checkdepends="py3-toml py3-pytest-cov" -source=" - https://files.pythonhosted.org/packages/source/k/kb-manager/kb-manager-$pkgver.tar.gz - python-colored.patch - " +checkdepends="py3-pytest-cov" +source="https://files.pythonhosted.org/packages/source/k/kb-manager/kb-manager-$pkgver.tar.gz" subpackages="$pkgname-pyc" builddir="$srcdir"/$_pkgreal-$pkgver @@ -34,5 +31,4 @@ package() { } sha512sums=" f0dff69a5e95339ea22d0a9d1260473f7b0b6ace184936896e164172aecb77672e9e0a228159abc95e50f30de2ec9ca5185ffbd825dce87edfec267bc56c75dc kb-manager-0.1.7.tar.gz -efb593959c790fc57822820a3ac2936dc90543e88268a9a47aa7248b6f1875e45d1ee7dbecac47b717491810483367b29670e0661ebbb760f875acb2e48b8765 python-colored.patch " diff --git a/user/kb/python-colored.patch b/user/kb/python-colored.patch deleted file mode 100644 index b2546cd..0000000 --- a/user/kb/python-colored.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/kb/printer/style.py b/kb/printer/style.py -index e0fd752..2bc7bf5 100644 ---- a/kb/printer/style.py -+++ b/kb/printer/style.py -@@ -17,5 +17,5 @@ from kb.entities.artifact import Artifact - - ALT_BGROUND = styler.set_bg('#303030') - BOLD = styler.set_style('bold') --UND = styler.set_style('underlined') -+UND = styler.set_style('underline') - RESET = styler.reset() From a23b312f4677a0a18c8d431cb3488218cdfa47fb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 13 Jan 2024 16:21:35 -0500 Subject: [PATCH 095/738] backports/nb: new aport --- backports/nb/APKBUILD | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 backports/nb/APKBUILD diff --git a/backports/nb/APKBUILD b/backports/nb/APKBUILD new file mode 100644 index 0000000..caaa69b --- /dev/null +++ b/backports/nb/APKBUILD @@ -0,0 +1,45 @@ +# Contributor: Quillith +# Maintainer: Quillith +pkgname=nb +pkgver=7.9.1 +pkgrel=0 +pkgdesc="Command line note-taking, bookmarking, archiving, and knowledge base application" +url="https://github.com/xwmx/nb" +arch="noarch" +license="AGPL-3.0-or-later" +depends="bash git" +subpackages=" + $pkgname-doc + $pkgname-full + $pkgname-bash-completion + $pkgname-fish-completion + $pkgname-zsh-completion + " +source="$pkgname-$pkgver.tar.gz::https://github.com/xwmx/nb/archive/$pkgver.tar.gz" +options="!check" # no tests + +package() { + install -Dm755 nb "$pkgdir/usr/bin/nb" + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/nb/LICENSE" + install -Dm644 README.md "$pkgdir/usr/share/doc/nb/README.md" + # Completions + install -Dm644 etc/nb-completion.bash "$pkgdir/usr/share/bash-completion/completions/nb" + install -Dm644 etc/nb-completion.fish "$pkgdir/usr/share/fish/vendor_completions.d/nb.fish" + install -Dm644 etc/nb-completion.zsh "$pkgdir/usr/share/zsh/site-functions/_nb" + # Plugins + install -Dm644 -t "$pkgdir/usr/share/nb/plugins/" plugins/* + # Extras (prefixed with "nb-") + for extra in bookmark notes; do + install -Dm0755 "bin/$extra" "$pkgdir/usr/bin/nb-$extra" + done +} + +full() { + pkgdesc="More utilities that integrate with nb" + depends="$pkgname=$pkgver-r$pkgrel bat nmap-ncat pandoc ripgrep tig w3m" + mkdir -p "$subpkgdir" +} + +sha512sums=" +cb7aee4f7fb6fa3a0e5e47fdbc87911375a431e5ad821e748d84769cb3384bc7098368b0611c70d4548a12d884cb161ac5286fc28da6a40514736cc3668fc751 nb-7.9.1.tar.gz +" From e811398af9c31befd2b320ffa2d5cbde2de8842c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Jan 2024 12:47:49 -0500 Subject: [PATCH 096/738] user/rmfakecloud: upgrade to 0.0.17 --- user/rmfakecloud/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index d23e626..1bdaac4 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.16 +pkgver=0.0.17 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" @@ -51,7 +51,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -f752aaf22b5904523636fe21e8ed99a1d0a279e36e4b16aaa2a4ae0e0fd4531f0e64f035cec56f2141894e18ce05a732e73aba32a731a93fe8c563520dfe1f6e rmfakecloud-0.0.16.tar.gz +2836364ba7a0c70b33f5914e357a87fb681275268a1cd5e1b6eba91037017c57f6a24b1bcecf9daa423c2588128ce591c2066d8af1d89eedccca231d24671748 rmfakecloud-0.0.17.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " From 1a792f23c988d08545eb5884f798264c3d52d611 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 21:59:56 -0500 Subject: [PATCH 097/738] backports/cura: new aports --- backports/cura/APKBUILD | 73 ++++++++++++++++++++++ backports/cura/AppDesktopData.patch | 58 ++++++++++++++++++ backports/cura/CuraVersion.patch | 16 +++++ backports/cura/cmake-helpers.patch | 95 +++++++++++++++++++++++++++++ backports/cura/cmake.patch | 85 ++++++++++++++++++++++++++ 5 files changed, 327 insertions(+) create mode 100644 backports/cura/APKBUILD create mode 100644 backports/cura/AppDesktopData.patch create mode 100644 backports/cura/CuraVersion.patch create mode 100644 backports/cura/cmake-helpers.patch create mode 100644 backports/cura/cmake.patch diff --git a/backports/cura/APKBUILD b/backports/cura/APKBUILD new file mode 100644 index 0000000..0a49e8e --- /dev/null +++ b/backports/cura/APKBUILD @@ -0,0 +1,73 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=cura +# uranium and curaengine packages must be updated in sync with this verion number +# py3-pynest2d and fdm-materials should be checked as well, but their versions are not always in sync +pkgver=5.2.2 +pkgrel=0 +pkgdesc="3D printer / slicing GUI built on top of the Uranium framework" +url="https://ultimaker.com/software/ultimaker-cura" +arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" # ppc64le: no py3-keyring +# x86: no curaengine +# armhf: no uranium, qt5-qtquickcontrols, qt5-qtquickcontrols2, qt5-qtgraphicaleffects +# riscv64: no uranium +# s390x: no py3-trimesh, no py3-numpy-stl +# armv7: no py3-trimesh +license="LGPL-3.0-or-later" +# add cura-binary-data to depends when packaged +depends=" + curaengine + fdm-materials + uranium + py3-arcus + py3-keyring + py3-numpy-stl + py3-pyclipper + py3-pynest2d + py3-pyserial + py3-qt6 + py3-requests + py3-trimesh + py3-zeroconf + " +makedepends="samurai cmake gettext gettext-dev" # needs msginit from gettext +checkdepends="py3-pytest" +subpackages="$pkgname-lang" +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Cura/archive/refs/tags/$pkgver.tar.gz + AppDesktopData.patch + CuraVersion.patch + cmake-helpers.patch + cmake.patch" +builddir="$srcdir/Cura-$pkgver" +options="!check" # tests broken after v5.x + +build() { + cmake -B build -G Ninja \ + -DCURA_VERSION=$pkgver \ + -DURANIUM_DIR=/usr/share/uranium \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ + -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ + -DCMAKE_BUILD_TYPE=minsizerel + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + mv $pkgdir/usr/bin/cura_app.py $pkgdir/usr/bin/cura + + # don't ever send any user or print info through the internet to Ultimaker + rm -rf "$pkgdir/usr/lib/cura/plugins/SliceInfoPlugin" + + install -d "$pkgdir"/usr/share/locale + mv "$pkgdir"/usr/share/cura/resources/i18n/* "$pkgdir"/usr/share/locale/ +} + +sha512sums=" +5d4e0fdc740d0c048905e2b87cc8c73eedea59b54766b74760505902007b365582d22b46b1cfdcd6914828840865c10a3beb0ef6a1f04ea181c81d44f42434bc cura-5.2.2.tar.gz +214e373f6cab7e3ccac12c96d1b5ca636d8d1e9ecdadaae84fc28fb429969c7c2d6055ce2a01b6db3ad85ab6cbc8d135cf2c26c77d7cfe13a73eb81aa5e85f11 AppDesktopData.patch +e3bb302db70ca195b2ce9831e71302c8ee2a51955fecc7264a495d7d4fc9c107cfd48811aa5865f16671e7b1ae126f95d3d7bbb6a70f367f7f91a2b32bce377b CuraVersion.patch +0db4ff97e7f82ae1a9dbc9c330d08c3e46249feeb3fb630f7c4e2de73749327337ec041680c39a07e0b5034c1b3f3656d75614ab4dc2f39861c8e27bdb2a58ef cmake-helpers.patch +05a73f892700ff6279230385b04180873a62b7413fa7f7d55ae150f1bcee57ef05eda0bd7fe444fe660ab66a044c958f42badd33b743fca81033ae8f19dd3805 cmake.patch +" diff --git a/backports/cura/AppDesktopData.patch b/backports/cura/AppDesktopData.patch new file mode 100644 index 0000000..9e2134f --- /dev/null +++ b/backports/cura/AppDesktopData.patch @@ -0,0 +1,58 @@ +--- /dev/null ++++ ./com.ultimaker.cura.appdata.xml +@@ -0,0 +1,33 @@ ++ ++ ++ ++ com.ultimaker.cura.desktop ++ CC0-1.0 ++ LGPL-3.0 and CC-BY-SA-4.0 ++ Cura ++ The world's most advanced 3d printer software ++ ++

++ Cura creates a seamless integration between hardware, software and ++ materials for the best 3D printing experience around. ++ Cura supports the 3MF, OBJ and STL file formats and is available on ++ Windows, Mac and Linux. ++

++
    ++
  • Novices can start printing right away
  • ++
  • Experts are able to customize 300 settings to achieve the best results
  • ++
  • Optimized profiles for Ultimaker materials
  • ++
  • Supported by a global network of Ultimaker certified service partners
  • ++
  • Print multiple objects at once with different settings for each object
  • ++
  • Cura supports STL, 3MF and OBJ file formats
  • ++
  • Open source and completely free
  • ++
++
++ ++ ++ https://raw.githubusercontent.com/Ultimaker/Cura/master/screenshot.png ++ ++ ++ https://ultimaker.com/software/ultimaker-cura?utm_source=cura&utm_medium=software&utm_campaign=cura-update-linux ++ Cura ++
+--- /dev/null ++++ ./com.ultimaker.cura.desktop.in +@@ -0,0 +1,19 @@ ++[Desktop Entry] ++Name=Ultimaker Cura ++Name[de]=Ultimaker Cura ++Name[nl]=Ultimaker Cura ++GenericName=3D Printing Software ++GenericName[de]=3D-Druck-Software ++GenericName[nl]=3D-printsoftware ++Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. ++Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D-Drucker um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, damit Ihr Druck großartig wird. ++Comment[nl]=Cura converteert 3D-modellen naar paden voor een 3D printer. Het bereidt je print voor om zeer precies, snel en betrouwbaar te kunnen printen, met veel extra functionaliteit om je print er goed uit te laten komen. ++Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F ++TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura ++Icon=cura-icon ++Terminal=false ++Type=Application ++MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;text/x-gcode;application/x-amf;application/x-ply;application/x-ctm;model/vnd.collada+xml;model/gltf-binary;model/gltf+json;model/vnd.collada+xml+zip; ++Categories=Graphics; ++Keywords=3D;Printing;Slicer; ++StartupWMClass=cura.real diff --git a/backports/cura/CuraVersion.patch b/backports/cura/CuraVersion.patch new file mode 100644 index 0000000..916225d --- /dev/null +++ b/backports/cura/CuraVersion.patch @@ -0,0 +1,16 @@ +--- /dev/null ++++ ./cura/CuraVersion.py.in +@@ -0,0 +1,13 @@ ++# Copyright (c) 2020 Ultimaker B.V. ++# Cura is released under the terms of the LGPLv3 or higher. ++ ++CuraAppName = "@CURA_APP_NAME@" ++CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@" ++CuraVersion = "@CURA_VERSION@" ++CuraBuildType = "@CURA_BUILDTYPE@" ++CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False ++CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@" ++CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@" ++CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@" ++CuraMarketplaceRoot = "@CURA_MARKETPLACE_ROOT@" ++CuraDigitalFactoryURL = "@CURA_DIGITAL_FACTORY_URL@" diff --git a/backports/cura/cmake-helpers.patch b/backports/cura/cmake-helpers.patch new file mode 100644 index 0000000..6204aaa --- /dev/null +++ b/backports/cura/cmake-helpers.patch @@ -0,0 +1,95 @@ +--- /dev/null ++++ ./cmake/CuraPluginInstall.cmake +@@ -0,0 +1,92 @@ ++# Copyright (c) 2022 Ultimaker B.V. ++# CuraPluginInstall.cmake is released under the terms of the LGPLv3 or higher. ++ ++# ++# This module detects all plugins that need to be installed and adds them using the CMake install() command. ++# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. ++# ++# Plugins can be configured to NOT BE INSTALLED via the variable "CURA_NO_INSTALL_PLUGINS" as a list of string in the ++# form of "a;b;c" or "a,b,c". By default all plugins will be installed. ++# ++ ++option(PRINT_PLUGIN_LIST "Should the list of plugins that are installed be printed?" ON) ++ ++# Options or configuration variables ++set(CURA_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") ++ ++file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) ++list(LENGTH _plugin_json_list _plugin_json_list_len) ++ ++# Sort the lists alphabetically so we can handle cases like this: ++# - plugins/my_plugin/plugin.json ++# - plugins/my_plugin/my_module/plugin.json ++# In this case, only "plugins/my_plugin" should be added via install(). ++set(_no_install_plugin_list ${CURA_NO_INSTALL_PLUGINS}) ++# Sanitize the string so the comparison will be case-insensitive. ++string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) ++string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) ++ ++# WORKAROUND counterpart of what's in cura-build. ++string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") ++ ++list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) ++ ++if(_no_install_plugin_list_len GREATER 0) ++ list(SORT _no_install_plugin_list) ++endif() ++if(_plugin_json_list_len GREATER 0) ++ list(SORT _plugin_json_list) ++endif() ++ ++# Check all plugin directories and add them via install() if needed. ++set(_install_plugin_list "") ++foreach(_plugin_json_path ${_plugin_json_list}) ++ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) ++ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) ++ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) ++ ++ # Make plugin name comparison case-insensitive ++ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) ++ ++ # Check if this plugin needs to be skipped for installation ++ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. ++ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is ++ # specified in the NO_INSTALL_PLUGINS list. ++ if(_no_install_plugin_list) ++ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) ++ set(_add_plugin OFF) ++ set(_is_no_install_plugin ON) ++ endif() ++ endif() ++ ++ # Make sure this is not a subdirectory in a plugin that's already in the install list ++ if(_add_plugin) ++ foreach(_known_install_plugin_dir ${_install_plugin_list}) ++ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") ++ set(_add_plugin OFF) ++ break() ++ endif() ++ endforeach() ++ endif() ++ ++ if(_add_plugin) ++ if(${PRINT_PLUGIN_LIST}) ++ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") ++ endif() ++ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) ++ install(DIRECTORY ${_rel_plugin_dir} ++ DESTINATION lib${LIB_SUFFIX}/cura/${_rel_plugin_parent_dir} ++ PATTERN "__pycache__" EXCLUDE ++ PATTERN "*.qmlc" EXCLUDE ++ ) ++ list(APPEND _install_plugin_list ${_plugin_dir}) ++ elseif(_is_no_install_plugin) ++ if(${PRINT_PLUGIN_LIST}) ++ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") ++ endif() ++ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py ++ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages ++ ${_plugin_dir_name} ++ RESULT_VARIABLE _mod_json_result) ++ endif() ++endforeach() diff --git a/backports/cura/cmake.patch b/backports/cura/cmake.patch new file mode 100644 index 0000000..a74477f --- /dev/null +++ b/backports/cura/cmake.patch @@ -0,0 +1,85 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -1,10 +1,6 @@ + # Copyright (c) 2022 Ultimaker B.V. + # Cura is released under the terms of the LGPLv3 or higher. + +-# NOTE: This is only being used for translation scripts. +- +-# For MSVC flags, will be ignored on non-Windows OS's and this project in general. Only needed for cura-build-environment. +-cmake_policy(SET CMP0091 NEW) + project(cura) + cmake_minimum_required(VERSION 3.18) + +@@ -15,8 +11,44 @@ + set(URANIUM_DIR "${CMAKE_SOURCE_DIR}/../Uranium" CACHE PATH "The location of the Uranium repository") + set(URANIUM_SCRIPTS_DIR "${URANIUM_DIR}/scripts" CACHE PATH "The location of the scripts directory of the Uranium repository") + ++option(CURA_DEBUGMODE "Enable debug dialog and other debug features" OFF) ++if(CURA_DEBUGMODE) ++ set(_cura_debugmode "ON") ++endif() ++ + option(GENERATE_TRANSLATIONS "Should the translations be generated?" ON) + ++set(CURA_APP_NAME "cura" CACHE STRING "Short name of Cura, used for configuration folder") ++set(CURA_APP_DISPLAY_NAME "Ultimaker Cura" CACHE STRING "Display name of Cura") ++set(CURA_VERSION "master" CACHE STRING "Version name of Cura") ++set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'") ++set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root") ++set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version") ++set(CURA_CLOUD_ACCOUNT_API_ROOT "" CACHE STRING "Alternative Cura cloud account API version") ++set(CURA_MARKETPLACE_ROOT "" CACHE STRING "Alternative Marketplace location") ++set(CURA_DIGITAL_FACTORY_URL "" CACHE STRING "Alternative Digital Factory location") ++ ++configure_file(${CMAKE_SOURCE_DIR}/com.ultimaker.cura.desktop.in ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop @ONLY) ++ ++configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY) ++ ++if(NOT DEFINED Python_VERSION) ++ set(Python_VERSION ++ 3.11 ++ CACHE STRING "Python Version" FORCE) ++ message(STATUS "Setting Python version to ${Python_VERSION}. Set Python_VERSION if you want to compile against an other version.") ++endif() ++if(APPLE) ++ set(Python_FIND_FRAMEWORK NEVER) ++endif() ++find_package(Python ${Python_VERSION} EXACT REQUIRED COMPONENTS Interpreter) ++message(STATUS "Linking and building ${project_name} against Python ${Python_VERSION}") ++if(NOT DEFINED Python_SITELIB_LOCAL) ++ set(Python_SITELIB_LOCAL ++ "${Python_SITELIB}" ++ CACHE PATH "Local alternative site-package location to install Cura" FORCE) ++endif() ++ + if(NOT ${URANIUM_DIR} STREQUAL "") + set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${URANIUM_DIR}/cmake") + endif() +@@ -29,4 +61,24 @@ + if(${GENERATE_TRANSLATIONS}) + CREATE_TRANSLATION_TARGETS() + endif() +-endif() +\ No newline at end of file ++endif() ++ ++install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura) ++ ++include(CuraPluginInstall) ++ ++install(FILES cura_app.py DESTINATION ${CMAKE_INSTALL_BINDIR} ++ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) ++install(DIRECTORY cura DESTINATION "${Python_SITELIB_LOCAL}") ++install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION "${Python_SITELIB_LOCAL}/cura/") ++if(NOT APPLE AND NOT WIN32) ++ install(FILES ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) ++ install(FILES ${CMAKE_SOURCE_DIR}/resources/images/cura-icon.png ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/128x128/apps/) ++ install(FILES com.ultimaker.cura.appdata.xml ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) ++ install(FILES cura.sharedmimeinfo ++ DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/ ++ RENAME cura.xml ) ++endif() From 5a8ea97ecd058b08466baec5b7355eb1253b9511 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 22:00:37 -0500 Subject: [PATCH 098/738] backports/uranium: new aport --- ...ix-simplebutton-use-of-um-colorimage.patch | 33 +++++++ backports/uranium/APKBUILD | 62 ++++++++++++ backports/uranium/cmake-helpers.patch | 89 ++++++++++++++++++ backports/uranium/cmake.patch | 16 ++++ .../fix-logger-used-but-not-imported.patch | 12 +++ .../uranium/qt-try-ints-then-bytes.patch | 94 +++++++++++++++++++ 6 files changed, 306 insertions(+) create mode 100644 backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch create mode 100644 backports/uranium/APKBUILD create mode 100644 backports/uranium/cmake-helpers.patch create mode 100644 backports/uranium/cmake.patch create mode 100644 backports/uranium/fix-logger-used-but-not-imported.patch create mode 100644 backports/uranium/qt-try-ints-then-bytes.patch diff --git a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch new file mode 100644 index 0000000..5a4f1bd --- /dev/null +++ b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch @@ -0,0 +1,33 @@ +From 88fd460a63263d66173f1e0127b0f208577d7f4e Mon Sep 17 00:00:00 2001 +From: fieldOfView +Date: Sat, 20 May 2023 21:14:36 +0200 +Subject: [PATCH] Fix SimpleButton use of UM.ColorImage + +Fixes https://github.com/Ultimaker/Cura/issues/15524 +--- + UM/Qt/qml/UM/SimpleButton.qml | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/UM/Qt/qml/UM/SimpleButton.qml b/UM/Qt/qml/UM/SimpleButton.qml +index d3d398753c..d3bd0e8e14 100644 +--- a/UM/Qt/qml/UM/SimpleButton.qml ++++ b/UM/Qt/qml/UM/SimpleButton.qml +@@ -1,7 +1,8 @@ +-// Copyright (c) 2018 Ultimaker B.V. ++// Copyright (c) 2023 Ultimaker B.V. + // Uranium is released under the terms of the LGPLv3 or higher. + + import QtQuick 2.1 ++import UM 1.5 as UM + + MouseArea + { +@@ -27,7 +28,7 @@ MouseArea + radius: 0 + } + +- ColorImage ++ UM.ColorImage + { + id: image + diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD new file mode 100644 index 0000000..76ff04d --- /dev/null +++ b/backports/uranium/APKBUILD @@ -0,0 +1,62 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=uranium +pkgver=5.2.2 +pkgrel=3 +pkgdesc="A Python framework for building Desktop applications" +url="https://github.com/Ultimaker/Uranium" +arch="noarch !armhf !riscv64" # armhf: no py3-qt5, rv64: no py3-shapely +license="LGPL-3.0-or-later" +depends=" + py3-cryptography + py3-numpy + py3-qt6 + py3-scipy + python3 + " +# add cura-binary-data to makedepends when packaged +makedepends="samurai cmake doxygen gettext-dev graphviz" +checkdepends="py3-pytest py3-pytest-benchmark py3-twisted" +options="!check" # checks broken from 5.x onward +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Uranium/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + 874_fix-simplebutton-use-of-um-colorimage.patch + fix-logger-used-but-not-imported.patch + qt-try-ints-then-bytes.patch + " +builddir="$srcdir/Uranium-$pkgver" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ + -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ + $CMAKE_CROSSOPTS + cmake --build build +} + +check() { + # useless code style test with another dependency + ctest -j $JOBS --output-on-failure -T Test +} + +package() { + DESTDIR="$pkgdir" cmake --install build + mkdir "$pkgdir"/usr/share/uranium/cmake + mv "$pkgdir"/usr/share/cmake-*/Modules/* "$pkgdir"/usr/share/uranium/cmake/ +} + +sha512sums=" +a9c222400022e05b5c42c72843b024204a58f5d233805bdffa610a2d9cbd1873773868b049aabbe52c6e859f235ca5428fcdfdbb86651f428483999060611e10 uranium-5.2.2.tar.gz +196a04164de288f5bffeebb73ace9390059dcffebaf40395368f413d1af2e2c668d85dd4c761ad226732540d41598235c2c368152cc157d2e89445ce27738c9b cmake.patch +aa185ce3592036f045e3386266015cc08443c2e4f9b9a4c03c77c13525af98d68eaa3360e8858e0561417a826c73bf8a2b209bcad91d2cc16cce32fb0231fcf8 cmake-helpers.patch +d0957ec427070f1b8ebe9257447402e09e3af7a89fe9b3c5967a4c40bfc753fab0ea8f0b0c49e17f5895abcd69888b59e4735d130cb47280207af1b8dbec1e71 874_fix-simplebutton-use-of-um-colorimage.patch +b23701d49d6bc7b8e87e7720ca52b96b9b7dc0e20562c12832eb710aed38dad77f93c20413bd93bc1e2f8026a57af44a1aa06a90cf6488b6f887e3ba0b7ca51c fix-logger-used-but-not-imported.patch +2a277b2e6e4acd701bc72924ec718127d8525192ef8e37a4d99d73b03b6c13462c2cb269704b5ee4c58203991cc3d3bd3ed32dadd5f153d5813eb2a946f02942 qt-try-ints-then-bytes.patch +" diff --git a/backports/uranium/cmake-helpers.patch b/backports/uranium/cmake-helpers.patch new file mode 100644 index 0000000..3c5d1f3 --- /dev/null +++ b/backports/uranium/cmake-helpers.patch @@ -0,0 +1,89 @@ +--- /dev/null ++++ ./cmake/UraniumPluginInstall.cmake +@@ -0,0 +1,86 @@ ++# Copyright (c) 2022 Ultimaker B.V. ++# UraniumPluginInstall.cmake is released under the terms of the LGPLv3 or higher. ++ ++# ++# This module detects all plugins that need to be installed and adds them using the CMake install() command. ++# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. ++# ++# Plugins can be configured to NOT BE INSTALLED via the variable "UM_NO_INSTALL_PLUGINS" as a list of string in the ++# form of "a;b;c" or "a,b,c". By default all plugins will be installed. ++# ++ ++# Options or configuration variables ++set(UM_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") ++ ++file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) ++list(LENGTH _plugin_json_list _plugin_json_list_len) ++ ++# Sort the lists alphabetically so we can handle cases like this: ++# - plugins/my_plugin/plugin.json ++# - plugins/my_plugin/my_module/plugin.json ++# In this case, only "plugins/my_plugin" should be added via install(). ++set(_no_install_plugin_list ${UM_NO_INSTALL_PLUGINS}) ++# Sanitize the string so the comparison will be case-insensitive. ++string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) ++string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) ++ ++# WORKAROUND counterpart of what's in cura-build. ++string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") ++ ++list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) ++ ++if(_no_install_plugin_list_len GREATER 0) ++ list(SORT _no_install_plugin_list) ++endif() ++if(_plugin_json_list_len GREATER 0) ++ list(SORT _plugin_json_list) ++endif() ++ ++# Check all plugin directories and add them via install() if needed. ++set(_install_plugin_list "") ++foreach(_plugin_json_path ${_plugin_json_list}) ++ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) ++ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) ++ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) ++ ++ # Make plugin name comparison case-insensitive ++ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) ++ ++ # Check if this plugin needs to be skipped for installation ++ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. ++ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is ++ # specified in the NO_INSTALL_PLUGINS list. ++ if(_no_install_plugin_list) ++ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) ++ set(_add_plugin OFF) ++ set(_is_no_install_plugin ON) ++ endif() ++ endif() ++ ++ # Make sure this is not a subdirectory in a plugin that's already in the install list ++ if(_add_plugin) ++ foreach(_known_install_plugin_dir ${_install_plugin_list}) ++ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") ++ set(_add_plugin OFF) ++ break() ++ endif() ++ endforeach() ++ endif() ++ ++ if(_add_plugin) ++ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") ++ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) ++ install(DIRECTORY ${_rel_plugin_dir} ++ DESTINATION lib${LIB_SUFFIX}/uranium/${_rel_plugin_parent_dir} ++ PATTERN "__pycache__" EXCLUDE ++ PATTERN "*.qmlc" EXCLUDE ++ ) ++ list(APPEND _install_plugin_list ${_plugin_dir}) ++ elseif(_is_no_install_plugin) ++ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") ++ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py ++ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages ++ ${_plugin_dir_name} ++ RESULT_VARIABLE _mod_json_result) ++ endif() ++endforeach() diff --git a/backports/uranium/cmake.patch b/backports/uranium/cmake.patch new file mode 100644 index 0000000..b1a888b --- /dev/null +++ b/backports/uranium/cmake.patch @@ -0,0 +1,16 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -19,9 +19,12 @@ + # Build Translations + CREATE_TRANSLATION_TARGETS() + ++find_package(Python REQUIRED COMPONENTS Interpreter) + +-install(DIRECTORY UM DESTINATION "${Python_SITELIB_LOCAL}") ++install(DIRECTORY UM DESTINATION "${Python_SITELIB}") + + install(FILES ${CMAKE_SOURCE_DIR}/cmake/UraniumTranslationTools.cmake + DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/ ) + install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/uranium) ++ ++include(UraniumPluginInstall) diff --git a/backports/uranium/fix-logger-used-but-not-imported.patch b/backports/uranium/fix-logger-used-but-not-imported.patch new file mode 100644 index 0000000..be29d31 --- /dev/null +++ b/backports/uranium/fix-logger-used-but-not-imported.patch @@ -0,0 +1,12 @@ +diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py +index 945b789..ef042a5 100644 +--- a/UM/View/SelectionPass.py.orig ++++ b/UM/View/SelectionPass.py +@@ -5,6 +5,7 @@ import enum + import random + from typing import TYPE_CHECKING + ++from UM.Logger import Logger + from UM.Resources import Resources + from UM.Application import Application + diff --git a/backports/uranium/qt-try-ints-then-bytes.patch b/backports/uranium/qt-try-ints-then-bytes.patch new file mode 100644 index 0000000..ab8f67e --- /dev/null +++ b/backports/uranium/qt-try-ints-then-bytes.patch @@ -0,0 +1,94 @@ +diff --git a/UM/View/RenderBatch.py.orig b/UM/View/RenderBatch.py +index 6deeeb1..5f1eda5 100644 +--- a/UM/View/RenderBatch.py.orig ++++ b/UM/View/RenderBatch.py +@@ -186,10 +186,24 @@ class RenderBatch: + + if self._render_type == self.RenderType.Solid: + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glDepthMask(self._gl.GL_TRUE) ++ try: ++ self._gl.glDepthMask(self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + elif self._render_type == self.RenderType.Transparent: + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glDepthMask(self._gl.GL_FALSE) ++ try: ++ self._gl.glDepthMask(self._gl.GL_FALSE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + elif self._render_type == self.RenderType.Overlay: + self._gl.glDisable(self._gl.GL_DEPTH_TEST) + +diff --git a/UM/View/RenderPass.py.orig b/UM/View/RenderPass.py +index 8068ddf..8cb4f67 100644 +--- a/UM/View/RenderPass.py.orig ++++ b/UM/View/RenderPass.py +@@ -93,8 +93,22 @@ class RenderPass: + self._fbo.bind() + + # Ensure we can actually write to the relevant FBO components. +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) +- self._gl.glDepthMask(self._gl.GL_TRUE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1',b'1', b'1') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") ++ try: ++ self._gl.glDepthMask(self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glDepthMask does not like ints, trying bytes...") ++ try: ++ self._gl.glDepthMask(b'1') ++ except: ++ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") + + self._gl.glClear(self._gl.GL_COLOR_BUFFER_BIT | self._gl.GL_DEPTH_BUFFER_BIT) + +diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py +index ef042a5..c28fe4f 100644 +--- a/UM/View/SelectionPass.py.orig ++++ b/UM/View/SelectionPass.py +@@ -110,13 +110,27 @@ class SelectionPass(RenderPass): + if selectable_objects: + batch.render(self._scene.getActiveCamera()) + +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1', b'1', b'0') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") + self._gl.glDisable(self._gl.GL_DEPTH_TEST) + + tool_handle.render(self._scene.getActiveCamera()) + + self._gl.glEnable(self._gl.GL_DEPTH_TEST) +- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) ++ try: ++ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) ++ except: ++ Logger.log("w", "glColorMask does not like ints, trying bytes...") ++ try: ++ self._gl.glColorMask(b'1', b'1', b'1', b'1') ++ except: ++ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") + + self.release() + From fc88ae4f0cdf55f336ce6076fd49017c4237f07f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 22:00:48 -0500 Subject: [PATCH 099/738] backports/fdm-materials: new aport --- backports/fdm-materials/APKBUILD | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 backports/fdm-materials/APKBUILD diff --git a/backports/fdm-materials/APKBUILD b/backports/fdm-materials/APKBUILD new file mode 100644 index 0000000..5bde97d --- /dev/null +++ b/backports/fdm-materials/APKBUILD @@ -0,0 +1,27 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=fdm-materials +pkgver=5.2.2 +pkgrel=0 +pkgdesc="FDM Material Database" +url="https://github.com/Ultimaker/fdm_materials" +arch="noarch" +license="CC0-1.0" +makedepends="cmake samurai" +options="!check" # no checks provided +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/fdm_materials/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/fdm_materials-$pkgver" + +build() { + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +73eefec8b7b88af73afc578ffba583480bda30309945b1720d7a1a075bd7ab3279599d53fe83f4c96695f294a5a3e11297abc334ca6cc9db163d4eb0fbdaf0f9 fdm-materials-5.2.2.tar.gz +" From 5b4e321820935590ea2f46b90e7d5bd3c995d464 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 22:01:03 -0500 Subject: [PATCH 100/738] backports/py3-arcus: new aport --- backports/py3-arcus/APKBUILD | 42 ++++ backports/py3-arcus/cmake-helpers.patch | 254 ++++++++++++++++++++++++ backports/py3-arcus/cmake.patch | 32 +++ backports/py3-arcus/pyproject.patch | 20 ++ 4 files changed, 348 insertions(+) create mode 100644 backports/py3-arcus/APKBUILD create mode 100644 backports/py3-arcus/cmake-helpers.patch create mode 100644 backports/py3-arcus/cmake.patch create mode 100644 backports/py3-arcus/pyproject.patch diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD new file mode 100644 index 0000000..604c5b1 --- /dev/null +++ b/backports/py3-arcus/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-arcus +# Needs to be upgraded in sync with libarcus +pkgver=5.2.2 +pkgrel=3 +pkgdesc="Python bindings for libarcus" +url="https://github.com/Ultimaker/pyArcus" +arch="all" +license="LGPL-3.0-only" +makedepends=" + cmake + libarcus-dev + protobuf-dev + py3-sip + python3-dev + samurai + " +options="!check" # package doesn't provide any tests +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pyArcus/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + pyproject.patch" +builddir="$srcdir/pyArcus-$pkgver" + +build() { + cmake -G Ninja -B build \ + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=Release + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +b24cbb9a5d7aa917b1b21e46f935b1293645e731d4e475a5abe364237f35708e8e96a1c6f06fe78e2e0e381737f4a27a6db87e42a5f4de9d48091d9de096f9b0 py3-arcus-5.2.2.tar.gz +f14e55cd31c13051981f26364e34da8c94e8eb5227b1cfd6fe44b9f97b5a4dcf6142a1751fa62eb0514a47583e6ec2d51dc253f23cf72c3fe6a1cb5dca136f21 cmake.patch +de75b985607feae0a9c511742915814e9c3d4bc467183f010ccc334ce4d0d952b6ff86020360b78558c4738cc03cf62c386b44ed76bcec12075c4a93dd03eeb7 cmake-helpers.patch +ef593230d5c78da8ba0fc6ea83225c4543857de1837d3151c45e59ffd7c98063b8f97f25d01c15b6a8f90c26c919206f9f7fa26c9650117f4ce7be49ebca876f pyproject.patch +" diff --git a/backports/py3-arcus/cmake-helpers.patch b/backports/py3-arcus/cmake-helpers.patch new file mode 100644 index 0000000..c556985 --- /dev/null +++ b/backports/py3-arcus/cmake-helpers.patch @@ -0,0 +1,254 @@ +--- /dev/null ++++ ./cmake/CMakeBuilder.py +@@ -0,0 +1,13 @@ ++from sipbuild import SetuptoolsBuilder ++ ++ ++class CMakeBuilder(SetuptoolsBuilder): ++ def __init__(self, project, **kwargs): ++ print("Using the CMake builder") ++ super().__init__(project, **kwargs) ++ ++ def build(self): ++ """ Only Generate the source files """ ++ print("Generating the source files") ++ self._generate_bindings() ++ self._generate_scripts() +--- /dev/null ++++ ./cmake/FindSIP.cmake +@@ -0,0 +1,65 @@ ++# Find SIP ++# ~~~~~~~~ ++# ++# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php ++# ++# Find the installed version of SIP. FindSIP should be called after Python ++# has been found. ++# ++# This file defines the following variables: ++# ++# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number ++# suitable for comparison as a string. ++# ++# SIP_VERSION_STR - The version of SIP found as a human readable string. ++# ++# SIP_BINARY_PATH - Path and filename of the SIP command line executable. ++# ++# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. ++# ++# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed ++# into. ++ ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++ ++ ++IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) ++ # Already in cache, be silent ++ SET(SIP_FOUND TRUE) ++ELSE() ++ ++ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) ++ ++ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) ++ IF(sip_config) ++ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) ++ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) ++ IF(${SIP_VERSION_STR} VERSION_LESS 5) ++ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) ++ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) ++ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) ++ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) ++ SET(SIP_FOUND TRUE) ++ ENDIF(sip_config) ++ ++ IF(SIP_FOUND) ++ IF(NOT SIP_FIND_QUIETLY) ++ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") ++ ENDIF(NOT SIP_FIND_QUIETLY) ++ ELSE(SIP_FOUND) ++ IF(SIP_FIND_REQUIRED) ++ MESSAGE(FATAL_ERROR "Could not find SIP") ++ ENDIF(SIP_FIND_REQUIRED) ++ ENDIF(SIP_FOUND) ++ ++ENDIF() ++ ++include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) ++ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) +--- /dev/null ++++ ./cmake/FindSIP.py +@@ -0,0 +1,57 @@ ++# -*- coding: utf-8 -*- ++# ++# Copyright (c) 2007, Simon Edwards ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# * Neither the name of the Simon Edwards nor the ++# names of its contributors may be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY ++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY ++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# FindSIP.py ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++try: ++ import sipbuild ++ ++ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) ++ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) ++ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) ++ ++ from distutils.sysconfig import get_python_lib ++ python_modules_dir = get_python_lib(plat_specific=1) ++ print("default_sip_dir:%s" % python_modules_dir) ++except ImportError: # Code for SIP v4 ++ import sipconfig ++ ++ sipcfg = sipconfig.Configuration() ++ print("sip_version:%06.0x" % sipcfg.sip_version) ++ print("sip_version_num:%d" % sipcfg.sip_version) ++ print("sip_version_str:%s" % sipcfg.sip_version_str) ++ print("sip_bin:%s" % sipcfg.sip_bin) ++ print("default_sip_dir:%s" % sipcfg.default_sip_dir) ++ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) ++ # SIP 4.19.10+ has new sipcfg.sip_module_dir ++ if hasattr(sipcfg, "sip_module_dir"): ++ print("sip_module_dir:%s" % sipcfg.sip_module_dir) ++ else: ++ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +--- /dev/null ++++ ./cmake/SIPMacros.cmake +@@ -0,0 +1,107 @@ ++ ++ ++# Macros for SIP ++# ~~~~~~~~~~~~~~ ++ ++set(SIP_ARGS --pep484-pyi --no-protected-is-public) ++ ++function(add_sip_module MODULE_TARGET) ++ if(NOT SIP_BUILD_EXECUTABLE) ++ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) ++ endif() ++ ++ message(STATUS "SIP: Generating pyproject.toml") ++ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) ++ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) ++ if(WIN32) ++ set(ext .pyd) ++ set(env_path_sep ";") ++ else() ++ set(ext .so) ++ set(env_path_sep ":") ++ endif() ++ ++ message(STATUS "SIP: Generating source files") ++ execute_process( ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND_ECHO STDOUT ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ ) ++ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources ++ ++ # Touch the generated files (8 in total) to make them dirty and force them to rebuild ++ message(STATUS "SIP: Touching the source files") ++ set(_sip_output_files) ++ list(LENGTH SIP_FILES _no_outputfiles) ++ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) ++ if(${_concat_file_nr} LESS 8) ++ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") ++ endif() ++ endforeach() ++ ++ # Find the generated source files ++ message(STATUS "SIP: Collecting the generated source files") ++ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") ++ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") ++ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") ++ ++ # Add the user specified source files ++ message(STATUS "SIP: Collecting the user specified source files") ++ get_target_property(usr_src ${MODULE_TARGET} SOURCES) ++ ++ # create the target library and link all the files (generated and user specified ++ message(STATUS "SIP: Linking the interface target against the shared library") ++ set(sip_sources "${sip_c}" "${sip_cpp}" "${usr_src}") ++ ++ if (BUILD_SHARED_LIBS) ++ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) ++ else() ++ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) ++ endif() ++ ++ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension ++ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") ++ ++ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work ++ # on the sip definition files without having to reconfigure the complete project. ++ if (NOT DEFINED PYTHONPATH) ++ set(PYTHONPATH "") ++ endif () ++ add_custom_command( ++ TARGET "sip_${MODULE_TARGET}" ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ MAIN_DEPENDENCY ${MODULE_SIP} ++ DEPENDS ${sip_sources} ++ VERBATIM ++ ) ++ ++ set_target_properties("sip_${MODULE_TARGET}" ++ PROPERTIES ++ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") ++endfunction() ++ ++function(install_sip_module MODULE_TARGET) ++ if(DEFINED ARGV1) ++ set(_install_path ${ARGV1}) ++ else() ++ if(DEFINED Python_SITEARCH) ++ set(_install_path ${Python_SITEARCH}) ++ elseif(DEFINED Python_SITELIB) ++ set(_install_path ${Python_SITELIB}) ++ else() ++ message(FATAL_ERROR "SIP: Specify the site-packages location") ++ endif() ++ endif() ++ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") ++ install(TARGETS "sip_${MODULE_TARGET}" ++ ARCHIVE DESTINATION ${_install_path} ++ LIBRARY DESTINATION ${_install_path} ++ RUNTIME DESTINATION ${_install_path} ++ RESOURCE DESTINATION ${_install_path} ++ ) ++endfunction() diff --git a/backports/py3-arcus/cmake.patch b/backports/py3-arcus/cmake.patch new file mode 100644 index 0000000..e7390e0 --- /dev/null +++ b/backports/py3-arcus/cmake.patch @@ -0,0 +1,32 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -2,22 +2,22 @@ + project(pyarcus) + cmake_minimum_required(VERSION 3.20) + +-find_package(protobuf REQUIRED) +-find_package(cpython REQUIRED) +-find_package(arcus REQUIRED) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +-find_package(standardprojectsettings REQUIRED) +-find_package(sipbuildtool REQUIRED) ++find_package(Protobuf REQUIRED) ++find_package(Python REQUIRED COMPONENTS Interpreter Development) ++find_package(Arcus REQUIRED) + ++find_package(SIP 6.5.0 REQUIRED) ++ + add_library(pyArcus INTERFACE src/PythonMessage.cpp) +-use_threads(pyArcus) + + target_include_directories(pyArcus + INTERFACE + $ + $ + ) +-target_link_libraries(pyArcus INTERFACE arcus::arcus protobuf::libprotobuf cpython::cpython) ++target_link_libraries(pyArcus INTERFACE Arcus protobuf::libprotobuf Python::Python) + add_sip_module(pyArcus) + install_sip_module(pyArcus) + diff --git a/backports/py3-arcus/pyproject.patch b/backports/py3-arcus/pyproject.patch new file mode 100644 index 0000000..3dd7f3a --- /dev/null +++ b/backports/py3-arcus/pyproject.patch @@ -0,0 +1,20 @@ +--- /dev/null ++++ ./pyproject.toml.in +@@ -0,0 +1,17 @@ ++[build-system] ++requires = ["sip >=6, <7"] ++build-backend = "sipbuild.api" ++ ++[tool.sip.metadata] ++name = "pyArcus" ++ ++[tool.sip.project] ++builder-factory = "CMakeBuilder" ++sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/python/" ++sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/python/"] ++build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pyArcus/" ++ ++[tool.sip.bindings.pyArcus] ++exceptions = true ++release-gil = true ++concatenate = 8 From 950993581c82cf1b728954b18876c85608209f0b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 22:01:11 -0500 Subject: [PATCH 101/738] backports/py3-pynest2d: new aport --- backports/py3-pynest2d/APKBUILD | 49 ++++ backports/py3-pynest2d/cmake-helpers.patch | 253 +++++++++++++++++++++ backports/py3-pynest2d/cmake.patch | 34 +++ backports/py3-pynest2d/pyproject.patch | 21 ++ 4 files changed, 357 insertions(+) create mode 100644 backports/py3-pynest2d/APKBUILD create mode 100644 backports/py3-pynest2d/cmake-helpers.patch create mode 100644 backports/py3-pynest2d/cmake.patch create mode 100644 backports/py3-pynest2d/pyproject.patch diff --git a/backports/py3-pynest2d/APKBUILD b/backports/py3-pynest2d/APKBUILD new file mode 100644 index 0000000..5be721e --- /dev/null +++ b/backports/py3-pynest2d/APKBUILD @@ -0,0 +1,49 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=py3-pynest2d +pkgver=5.2.2 +pkgrel=2 +pkgdesc="Python bindings for libnest2d" +url="https://github.com/Ultimaker/pynest2d" +arch="all" +license="LGPL-3.0-or-later" +makedepends="samurai cmake libnest2d-dev clipper-dev py3-sip nlopt-dev boost-dev python3-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pynest2d/archive/refs/tags/$pkgver.tar.gz + cmake.patch + cmake-helpers.patch + pyproject.patch" +builddir="$srcdir/pynest2d-$pkgver" +options="!check" # doesn't seem like tests are packaged anymore + +prepare() { + mv ./python ./src + default_prepare +} + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=Release \ + $CMAKE_CROSSOPTS + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +f5d701e431c81f8d2da7b14ca5677d3303064cf7910e80d289d7ff8fe99117fb9c470242f25f21fa8e1f064c63accf5349f4956981e316b09b14342223f79b61 py3-pynest2d-5.2.2.tar.gz +c8133d221a2fd8ed5fb32933a69f992dab2e83cdb9db30dcb715ebdfe6d403be3e94df393a921f506b63ef9d8b30a107f26b57cd39810faa9bee461afe5e1afd cmake.patch +dbf6609a21e39ae87fa89f2faf9c98a011f287cb383c5b74f92f41e3a350b487e69643c94110f7fcc25e9e25921a698cc20d9ee021d36ff908d03c0d5ca88a46 cmake-helpers.patch +f1b710509d97b5a2a4d021747e73884d27ae00fd93a04c90be01f123cdcc59be4757b4a73dff9c9921b7794551e531cf6729e4211144c60294d107b92a928b51 pyproject.patch +" diff --git a/backports/py3-pynest2d/cmake-helpers.patch b/backports/py3-pynest2d/cmake-helpers.patch new file mode 100644 index 0000000..288df07 --- /dev/null +++ b/backports/py3-pynest2d/cmake-helpers.patch @@ -0,0 +1,253 @@ +--- /dev/null ++++ ./cmake/CMakeBuilder.py +@@ -0,0 +1,13 @@ ++from sipbuild import SetuptoolsBuilder ++ ++ ++class CMakeBuilder(SetuptoolsBuilder): ++ def __init__(self, project, **kwargs): ++ print("Using the CMake builder") ++ super().__init__(project, **kwargs) ++ ++ def build(self): ++ """ Only Generate the source files """ ++ print("Generating the source files") ++ self._generate_bindings() ++ self._generate_scripts() +\ No newline at end of file +--- /dev/null ++++ ./cmake/FindSIP.py +@@ -0,0 +1,57 @@ ++# -*- coding: utf-8 -*- ++# ++# Copyright (c) 2007, Simon Edwards ++# All rights reserved. ++# ++# Redistribution and use in source and binary forms, with or without ++# modification, are permitted provided that the following conditions are met: ++# * Redistributions of source code must retain the above copyright ++# notice, this list of conditions and the following disclaimer. ++# * Redistributions in binary form must reproduce the above copyright ++# notice, this list of conditions and the following disclaimer in the ++# documentation and/or other materials provided with the distribution. ++# * Neither the name of the Simon Edwards nor the ++# names of its contributors may be used to endorse or promote products ++# derived from this software without specific prior written permission. ++# ++# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY ++# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY ++# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++# ++# FindSIP.py ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++try: ++ import sipbuild ++ ++ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) ++ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) ++ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) ++ ++ from distutils.sysconfig import get_python_lib ++ python_modules_dir = get_python_lib(plat_specific=1) ++ print("default_sip_dir:%s" % python_modules_dir) ++except ImportError: # Code for SIP v4 ++ import sipconfig ++ ++ sipcfg = sipconfig.Configuration() ++ print("sip_version:%06.0x" % sipcfg.sip_version) ++ print("sip_version_num:%d" % sipcfg.sip_version) ++ print("sip_version_str:%s" % sipcfg.sip_version_str) ++ print("sip_bin:%s" % sipcfg.sip_bin) ++ print("default_sip_dir:%s" % sipcfg.default_sip_dir) ++ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) ++ # SIP 4.19.10+ has new sipcfg.sip_module_dir ++ if hasattr(sipcfg, "sip_module_dir"): ++ print("sip_module_dir:%s" % sipcfg.sip_module_dir) ++ else: ++ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) +--- /dev/null ++++ ./cmake/FindSIP.cmake +@@ -0,0 +1,65 @@ ++# Find SIP ++# ~~~~~~~~ ++# ++# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php ++# ++# Find the installed version of SIP. FindSIP should be called after Python ++# has been found. ++# ++# This file defines the following variables: ++# ++# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number ++# suitable for comparison as a string. ++# ++# SIP_VERSION_STR - The version of SIP found as a human readable string. ++# ++# SIP_BINARY_PATH - Path and filename of the SIP command line executable. ++# ++# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. ++# ++# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed ++# into. ++ ++# Copyright (c) 2007, Simon Edwards ++# Redistribution and use is allowed according to the terms of the BSD license. ++# For details see the accompanying COPYING-CMAKE-SCRIPTS file. ++ ++ ++ ++IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) ++ # Already in cache, be silent ++ SET(SIP_FOUND TRUE) ++ELSE() ++ ++ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) ++ ++ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) ++ IF(sip_config) ++ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) ++ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) ++ IF(${SIP_VERSION_STR} VERSION_LESS 5) ++ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) ++ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) ++ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) ++ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) ++ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) ++ SET(SIP_FOUND TRUE) ++ ENDIF(sip_config) ++ ++ IF(SIP_FOUND) ++ IF(NOT SIP_FIND_QUIETLY) ++ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") ++ ENDIF(NOT SIP_FIND_QUIETLY) ++ ELSE(SIP_FOUND) ++ IF(SIP_FIND_REQUIRED) ++ MESSAGE(FATAL_ERROR "Could not find SIP") ++ ENDIF(SIP_FIND_REQUIRED) ++ ENDIF(SIP_FOUND) ++ ++ENDIF() ++ ++include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) ++ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) +--- /dev/null ++++ ./cmake/SIPMacros.cmake +@@ -0,0 +1,105 @@ ++# Macros for SIP ++# ~~~~~~~~~~~~~~ ++ ++set(SIP_ARGS --pep484-pyi --no-protected-is-public) ++ ++function(add_sip_module MODULE_TARGET) ++ if(NOT SIP_BUILD_EXECUTABLE) ++ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) ++ endif() ++ ++ message(STATUS "SIP: Generating pyproject.toml") ++ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) ++ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) ++ if(WIN32) ++ set(ext .pyd) ++ set(env_path_sep ";") ++ else() ++ set(ext .so) ++ set(env_path_sep ":") ++ endif() ++ ++ message(STATUS "SIP: Generating source files") ++ execute_process( ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND_ECHO STDOUT ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ ) ++ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources ++ ++ # Touch the generated files (8 in total) to make them dirty and force them to rebuild ++ message(STATUS "SIP: Touching the source files") ++ set(_sip_output_files) ++ list(LENGTH SIP_FILES _no_outputfiles) ++ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) ++ if(${_concat_file_nr} LESS 8) ++ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") ++ endif() ++ endforeach() ++ ++ # Find the generated source files ++ message(STATUS "SIP: Collecting the generated source files") ++ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") ++ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") ++ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") ++ ++ # Add the user specified source files ++ message(STATUS "SIP: Collecting the user specified source files") ++ get_target_property(usr_src ${MODULE_TARGET} SOURCES) ++ ++ # create the target library and link all the files (generated and user specified ++ message(STATUS "SIP: Linking the interface target against the shared library") ++ set(sip_sources "${sip_c}" "${sip_cpp}") ++ if(${usr_src}) ++ list(APPEND sip_sources "${usr_src}") ++ endif() ++ ++ if (BUILD_SHARED_LIBS) ++ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) ++ else() ++ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) ++ endif() ++ ++ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension ++ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) ++ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") ++ ++ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work ++ # on the sip definition files without having to reconfigure the complete project. ++ add_custom_command( ++ TARGET "sip_${MODULE_TARGET}" ++ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} ++ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} ++ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ ++ MAIN_DEPENDENCY ${MODULE_SIP} ++ DEPENDS ${sip_sources} ++ VERBATIM ++ ) ++ ++ set_target_properties("sip_${MODULE_TARGET}" ++ PROPERTIES ++ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") ++endfunction() ++ ++function(install_sip_module MODULE_TARGET) ++ if(DEFINED ARGV1) ++ set(_install_path ${ARGV1}) ++ else() ++ if(DEFINED Python_SITEARCH) ++ set(_install_path ${Python_SITEARCH}) ++ elseif(DEFINED Python_SITELIB) ++ set(_install_path ${Python_SITELIB}) ++ else() ++ message(FATAL_ERROR "SIP: Specify the site-packages location") ++ endif() ++ endif() ++ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") ++ install(TARGETS "sip_${MODULE_TARGET}" ++ ARCHIVE DESTINATION ${_install_path} ++ LIBRARY DESTINATION ${_install_path} ++ RUNTIME DESTINATION ${_install_path} ++ RESOURCE DESTINATION ${_install_path} ++ ) ++endfunction() diff --git a/backports/py3-pynest2d/cmake.patch b/backports/py3-pynest2d/cmake.patch new file mode 100644 index 0000000..c2ac24e --- /dev/null +++ b/backports/py3-pynest2d/cmake.patch @@ -0,0 +1,34 @@ +--- ./CMakeLists.txt.orig ++++ ./CMakeLists.txt +@@ -2,16 +2,25 @@ + project(pynest2d) + cmake_minimum_required(VERSION 3.20) + +-find_package(nest2d REQUIRED) +-find_package(cpython REQUIRED) ++list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +-find_package(standardprojectsettings REQUIRED) +-find_package(sipbuildtool REQUIRED) ++find_package(Libnest2D REQUIRED) + ++find_package(Python REQUIRED COMPONENTS Interpreter Development) ++find_package(SIP REQUIRED 6.5.0) ++ + add_library(pynest2d INTERFACE) +-use_threads(pynest2d) + +-target_link_libraries(pynest2d INTERFACE nest2d::nest2d cpython::cpython) ++target_include_directories(pynest2d ++ INTERFACE ++ $ ++ $ ++ ) ++ ++find_package(Threads REQUIRED) ++find_package(Boost REQUIRED) ++target_link_libraries(pynest2d INTERFACE Libnest2D::libnest2d Python::Python Threads::Threads Boost::boost) ++ + add_sip_module(pynest2d) + install_sip_module(pynest2d) + diff --git a/backports/py3-pynest2d/pyproject.patch b/backports/py3-pynest2d/pyproject.patch new file mode 100644 index 0000000..3c74389 --- /dev/null +++ b/backports/py3-pynest2d/pyproject.patch @@ -0,0 +1,21 @@ +--- /dev/null ++++ ./pyproject.toml.in +@@ -0,0 +1,17 @@ ++[build-system] ++requires = ["sip >=6, <7"] ++build-backend = "sipbuild.api" ++ ++[tool.sip.metadata] ++name = "pynest2d" ++ ++[tool.sip.project] ++builder-factory = "CMakeBuilder" ++sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/src/" ++sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/src/"] ++build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pynest2d/" ++ ++[tool.sip.bindings.pynest2d] ++exceptions = true ++release-gil = true ++concatenate = 8 +\ No newline at end of file From a409dd8147444a24eacc4b68976051267e9bb2fb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:47:43 -0500 Subject: [PATCH 102/738] backports/libnest2d: new aport --- backports/libnest2d/APKBUILD | 40 ++++++ .../libnest2d/allow-disallowed-area.patch | 124 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 backports/libnest2d/APKBUILD create mode 100644 backports/libnest2d/allow-disallowed-area.patch diff --git a/backports/libnest2d/APKBUILD b/backports/libnest2d/APKBUILD new file mode 100644 index 0000000..3cb42f7 --- /dev/null +++ b/backports/libnest2d/APKBUILD @@ -0,0 +1,40 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=libnest2d +pkgver=0.4 +pkgrel=5 +pkgdesc="2D irregular bin packaging and nesting library written in modern C++" +url="https://github.com/tamasmeszaros/libnest2d" +arch="noarch" +license="LGPL-3.0-only" +makedepends="samurai cmake clipper-dev boost-dev nlopt-dev" +subpackages="$pkgname-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/tamasmeszaros/libnest2d/archive/refs/tags/$pkgver.tar.gz + allow-disallowed-area.patch" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=minsizerel \ + $CMAKE_CROSSOPTS . + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +fadce18986b844eed13a581f84055df909a17407a0980deb6c7c24248a969a537a8840650bcfc673e61973810ce9a008acb599e3b8e00c9bff6b566ca41cd62c libnest2d-0.4.tar.gz +2e8cd3343c72c576ecb54960d7ad9f4f2322f822b19ac41850b3b28da95e97c2cefe7c67de6c97627df08cd5cdc1660ce4dfa95fe51f88e0ff5c066c8d785458 allow-disallowed-area.patch +" diff --git a/backports/libnest2d/allow-disallowed-area.patch b/backports/libnest2d/allow-disallowed-area.patch new file mode 100644 index 0000000..479b9c4 --- /dev/null +++ b/backports/libnest2d/allow-disallowed-area.patch @@ -0,0 +1,124 @@ +From 2e91be2679b5efa0773292d9d0a2ae72255bb271 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:13:15 +0200 +Subject: [PATCH 1/3] Allow for an item to be a disallowed area + +url: https://github.com/tamasmeszaros/libnest2d/pull/18 + +Disallowed areas have slightly different behaviour from fixed items: Other items won't get packed closely around them. Implementation of that pending. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp +index 2f207d5..932a060 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -71,6 +71,15 @@ class _Item { + int binid_{BIN_ID_UNSET}, priority_{0}; + bool fixed_{false}; + ++ /** ++ * \brief If this is a fixed area, indicates whether it is a disallowed area ++ * or a previously placed item. ++ * ++ * If this is a disallowed area, other objects will not get packed close ++ * together with this item. It only blocks other items in its area. ++ */ ++ bool disallowed_{false}; ++ + public: + + /// The type of the shape which was handed over as the template argument. +@@ -129,11 +138,18 @@ class _Item { + sh_(sl::create(std::move(contour), std::move(holes))) {} + + inline bool isFixed() const noexcept { return fixed_; } ++ inline bool isDisallowedArea() const noexcept { return disallowed_; } + inline void markAsFixedInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; + } ++ inline void markAsDisallowedAreaInBin(int binid) ++ { ++ fixed_ = binid >= 0; ++ binid_ = binid; ++ disallowed_ = true; ++ } + + inline void binId(int idx) { binid_ = idx; } + inline int binId() const noexcept { return binid_; } + +From ff61049e59d3151462bca7ff2e2268c2b32731e7 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Tue, 6 Oct 2020 16:14:36 +0200 +Subject: [PATCH 2/3] Allow unsetting of being a disallowed area + +If you set the bin to -1 or set the item to be a simple fixed item afterwards, it'll no longer be a disallowed area. + +Contributes to issue CURA-7754. +--- + include/libnest2d/nester.hpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp +index 932a060..54761a6 100644 +--- a/include/libnest2d/nester.hpp ++++ b/include/libnest2d/nester.hpp +@@ -143,12 +143,13 @@ class _Item { + { + fixed_ = binid >= 0; + binid_ = binid; ++ disallowed_ = false; + } + inline void markAsDisallowedAreaInBin(int binid) + { + fixed_ = binid >= 0; + binid_ = binid; +- disallowed_ = true; ++ disallowed_ = fixed_; + } + + inline void binId(int idx) { binid_ = idx; } + +From 31391fd173249ad9b906390058e13b09238fadc8 Mon Sep 17 00:00:00 2001 +From: Ghostkeeper +Date: Thu, 8 Oct 2020 11:06:58 +0200 +Subject: [PATCH 3/3] Align items to their starting position if all placed + items are disallowed + +We shouldn't align items to disallowed areas. So place them in the starting position according to the alignment property. + +Lot of work to investigate. But very little code changes! + +Contributes to issue CURA-7754. +--- + include/libnest2d/placers/nfpplacer.hpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/include/libnest2d/placers/nfpplacer.hpp b/include/libnest2d/placers/nfpplacer.hpp +index 96a8cff..b0ebb15 100644 +--- a/include/libnest2d/placers/nfpplacer.hpp ++++ b/include/libnest2d/placers/nfpplacer.hpp +@@ -101,7 +101,7 @@ struct NfpPConfig { + * alignment with the candidate item or do anything else. + * + * \param remaining A container with the remaining items waiting to be +- * placed. You can use some features about the remaining items to alter to ++ * placed. You can use some features about the remaining items to alter the + * score of the current placement. If you know that you have to leave place + * for other items as well, that might influence your decision about where + * the current candidate should be placed. E.g. imagine three big circles +@@ -735,7 +735,8 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer Date: Thu, 18 Jan 2024 23:47:54 -0500 Subject: [PATCH 103/738] backports/libspatialindex: new aport --- backports/libspatialindex/APKBUILD | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 backports/libspatialindex/APKBUILD diff --git a/backports/libspatialindex/APKBUILD b/backports/libspatialindex/APKBUILD new file mode 100644 index 0000000..1de6552 --- /dev/null +++ b/backports/libspatialindex/APKBUILD @@ -0,0 +1,33 @@ +# Contributor: Alex Yam +# Maintainer: Alex Yam +pkgname=libspatialindex +pkgver=0_git20210205 +_commit=8ee223632f95c81f49f5eb2d547ad973475c4601 +pkgrel=1 +pkgdesc="extensible framework for robust spatial indexing methods" +url="https://libspatialindex.org/" +arch="all" +license="MIT" +makedepends="cmake" +subpackages="$pkgname-dev" +source="$pkgname-$_commit.tar.gz::https://github.com/libspatialindex/libspatialindex/archive/$_commit.tar.gz" +builddir="$srcdir/$pkgname-$_commit" + +build() { + cmake -B build \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DCMAKE_PREFIX_PATH=/usr \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_TESTING=ON + cmake --build build +} + +check() { + cd build && ctest +} + +package() { + DESTDIR="$pkgdir" cmake --build build --target install +} + +sha512sums="caf91aac77b75445e4fc4d0baedcd10c619b2097dfd841b00339d9ddd4b73db05b99de1d84be88f1083f4713a936cf110d5851523491f5a74c6f96e1d5795dbb libspatialindex-8ee223632f95c81f49f5eb2d547ad973475c4601.tar.gz" From 22368d6492e51fd6defaee77238fe82972074f14 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:48:03 -0500 Subject: [PATCH 104/738] backports/nlopt: new aport --- backports/nlopt/APKBUILD | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 backports/nlopt/APKBUILD diff --git a/backports/nlopt/APKBUILD b/backports/nlopt/APKBUILD new file mode 100644 index 0000000..0be29fe --- /dev/null +++ b/backports/nlopt/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Anjandev Momi +# Maintainer: Anjandev Momi +pkgname=nlopt +pkgver=2.7.1 +pkgrel=0 +pkgdesc="library for nonlinear optimization, wrapping many algorithms for global and local, constrained or unconstrained, optimization" +url="https://github.com/stevengj/nlopt/" +arch="all" +license="LGPL-2.1-or-later" +makedepends="samurai cmake" +subpackages="$pkgname-dev $pkgname-doc" +source="$pkgname-$pkgver.tar.gz::https://github.com/stevengj/nlopt/archive/refs/tags/v$pkgver.tar.gz" + +build() { + if [ "$CBUILD" != "$CHOST" ]; then + CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + fi + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=minsizerel \ + $CMAKE_CROSSOPTS . + cmake --build build +} + +check() { + cd build + CTEST_OUTPUT_ON_FAILURE=TRUE ctest +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +sha512sums=" +e23cb522fc696010574c14b72be85acc0f8ccf0bf208bf2b8789c57d6c5a6e6d419ee10330581518b1c1567018ae909b626ce7761d4fbd5bf112916871e420e2 nlopt-2.7.1.tar.gz +" From de4d9f1d384d694113def75a2722dde7f7fcef3b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:48:15 -0500 Subject: [PATCH 105/738] backports/py3-mapbox-earcut: new aport --- backports/py3-mapbox-earcut/APKBUILD | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 backports/py3-mapbox-earcut/APKBUILD diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD new file mode 100644 index 0000000..99db5b5 --- /dev/null +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -0,0 +1,32 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-mapbox-earcut +pkgver=1.0.1 +pkgrel=0 +pkgdesc="Python bindings for the mapbox earcut c++ library" +url="https://github.com/skogler/mapbox_earcut_python" +arch="all" +license="ISC" +depends="py3-numpy" +makedepends="py3-setuptools py3-pybind11-dev python3-dev" +checkdepends="pytest" +source="$pkgname-$pkgver.tar.gz::https://github.com/skogler/mapbox_earcut_python/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/mapbox_earcut_python-$pkgver" + +build() { + python3 setup.py build +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages test-env + test-env/bin/python3 setup.py install + test-env/bin/python3 -m pytest +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +cdb32585cbaf74c15e59af0ae70d983dd2f9bc9cfe1b59b3eadc4d442f7d962241854b589a035deae67cacd9334833b911d0981f0d417fe587348fc7d24f0c0a py3-mapbox-earcut-1.0.1.tar.gz +" From c091c20672f984bb18b3ff5d98fb6396612070f1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:48:28 -0500 Subject: [PATCH 106/738] backports/py3-numpy-stl: new aport --- backports/py3-numpy-stl/APKBUILD | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 backports/py3-numpy-stl/APKBUILD diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD new file mode 100644 index 0000000..958e76b --- /dev/null +++ b/backports/py3-numpy-stl/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-numpy-stl +pkgver=3.0.1 +pkgrel=1 +pkgdesc="Library for working with STLs" +url="https://github.com/WoLpH/numpy-stl" +# s390x: no py3-utils +arch="noarch !s390x" +license="BSD-3-Clause" +depends="python3 py3-utils py3-numpy" +makedepends="py3-setuptools" +checkdepends="py3-pytest" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/releases/download/v$pkgver/numpy-stl-$pkgver.tar.gz" +builddir="$srcdir/numpy-stl-$pkgver" + +build() { + python3 setup.py build +} + +check() { + # deselected test needs xvfb-run and fails + pytest \ + --deselect tests/test_ascii.py::test_use_with_qt_with_custom_locale_decimal_delimeter +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +d01abb8f54738600ce36c8c44e1392957061030e7accbbfa0352aea4a904323a96712099146b311ce9518f243317c25c47cfb30930469602c0ad439de9f43c5f py3-numpy-stl-3.0.1.tar.gz +" From c00ab9d900eaf0b2d24bb5c9b46856f09332f95a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:48:37 -0500 Subject: [PATCH 107/738] backports/py3-pyinstrument: new aport --- backports/py3-pyinstrument/APKBUILD | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 backports/py3-pyinstrument/APKBUILD diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD new file mode 100644 index 0000000..981f874 --- /dev/null +++ b/backports/py3-pyinstrument/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-pyinstrument +pkgver=4.6.1 +pkgrel=0 +pkgdesc="Call stack profiler for Python" +url="https://github.com/joerick/pyinstrument" +arch="all" +license="BSD-3-Clause" +makedepends="py3-gpep517 py3-setuptools py3-wheel python3-dev" +checkdepends="py3-pytest py3-flaky py3-trio py3-greenlet" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/joerick/pyinstrument/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/pyinstrument-$pkgver" +options="!check" # currently not working + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +7eb24fb27bfb145b5a06976bdaac1d06de87549f3ae9505d4d56608af0776ff18f5ec9fccf5d3f3df797f1b91281d15bbd825fa42d268baf91524fc2f4efd59a py3-pyinstrument-4.6.1.tar.gz +" From 9067438ed8aa9f89250be04fd87180e03075c573 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:48:48 -0500 Subject: [PATCH 108/738] backports/py3-rtree: new aport --- backports/py3-rtree/APKBUILD | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 backports/py3-rtree/APKBUILD diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD new file mode 100644 index 0000000..4a53d92 --- /dev/null +++ b/backports/py3-rtree/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Alex Yam +# Maintainer: Alex Yam +pkgname=py3-rtree +_pkgname=rtree +pkgver=1.1.0 +pkgrel=0 +pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" +url="https://pypi.org/project/Rtree/" +# s390x: Test failed: IndexSerialization::test_interleaving - AssertionError +# s390x: Test failed: IndexStream::test_stream_input - AssertionError +arch="noarch !s390x" +license="MIT" +depends="python3 libspatialindex-dev" +makedepends="py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-numpy" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/Toblerity/rtree/archive/$pkgver.tar.gz" +builddir="$srcdir"/$_pkgname-$pkgver + +build() { + python3 setup.py build +} + +check() { + python3 -m pytest -v --doctest-modules rtree tests +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +97a87027e49520f12cb86444ee8a9795fabeec6d8f0e3e869f2714df8f7c649ced1374385852af0ce7d7eb91e5a2cb464a4330807be15d538dc0a4d8de7b7ca2 py3-rtree-1.1.0.tar.gz +" From 993c865a5cdcec62932db9d2d1d4e56ea2135dcc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:48:59 -0500 Subject: [PATCH 109/738] backports/py3-svgpath: new aport --- .../105_use-better-than-nothing-font.patch | 300 ++++++++++++++++++ backports/py3-svgpath/APKBUILD | 35 ++ backports/py3-svgpath/no-install-tests.patch | 15 + 3 files changed, 350 insertions(+) create mode 100644 backports/py3-svgpath/105_use-better-than-nothing-font.patch create mode 100644 backports/py3-svgpath/APKBUILD create mode 100644 backports/py3-svgpath/no-install-tests.patch diff --git a/backports/py3-svgpath/105_use-better-than-nothing-font.patch b/backports/py3-svgpath/105_use-better-than-nothing-font.patch new file mode 100644 index 0000000..7e3d18d --- /dev/null +++ b/backports/py3-svgpath/105_use-better-than-nothing-font.patch @@ -0,0 +1,300 @@ +From a17ed35e490a99a7dfab9833f6f3be86f004f699 Mon Sep 17 00:00:00 2001 +From: Benjamin Drung +Date: Fri, 15 Dec 2023 15:32:16 +0100 +Subject: [PATCH] tests: Use better than nothing font +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Pillow 10.1.0 uses a version of Aileron Regular instead of the previous +“better than nothing” default font (in case FreeType support is +available). This font change changes the resulting bitmap. + +Use the "better than nothing" font to keep the expected result +identical. The proper solution is either to use one specific font in +svg.path or make pillow support loading the “better than nothing” +default font. + +Bug-Debian: https://bugs.debian.org/1055159 +--- + tests/font.py | 145 ++++++++++++++++++++++++++++++++ + tests/test_boundingbox_image.py | 18 ++-- + tests/test_image.py | 18 +++- + 3 files changed, 170 insertions(+), 11 deletions(-) + create mode 100644 tests/font.py + +diff --git a/tests/font.py b/tests/font.py +new file mode 100644 +index 0000000..d375f49 +--- /dev/null ++++ b/tests/font.py +@@ -0,0 +1,145 @@ ++# Code taken from https://github.com/python-pillow/Pillow/blob/main/src/PIL/ImageFont.py ++# ++# License: the open source HPND License ++# Copyright (c) 1997-2003 by Secret Labs AB ++# Copyright (c) 1996-2003 by Fredrik Lundh ++ ++from PIL import Image, ImageFont ++from io import BytesIO ++import base64 ++ ++ ++def get_better_than_nothing_font(): ++ font = ImageFont.ImageFont() ++ font._load_pilfont_data( ++ # courB08 ++ BytesIO( ++ base64.b64decode( ++ b""" ++UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA ++BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL ++AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA ++AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB ++ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A ++BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB ++//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA ++AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH ++AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA ++ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv ++AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ ++/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 ++AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA ++AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG ++AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA ++BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA ++AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA ++2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF ++AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// +++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA ++////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA ++BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv ++AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA ++AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA ++AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA ++BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// ++//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA ++AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF ++AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB ++mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn ++AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA ++AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 ++AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA ++Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB ++//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA ++AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ ++AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC ++DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ ++AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ +++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 ++AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ ++///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG ++AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA ++BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA ++Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC ++eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG ++AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// +++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA ++////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA ++BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT ++AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A ++AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA ++Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA ++Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// ++//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA ++AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ ++AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA ++LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 ++AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA ++AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 ++AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA ++AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG ++AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA ++EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK ++AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA ++pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG ++AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// +++QAGAAIAzgAKANUAEw== ++""" ++ ) ++ ), ++ Image.open( ++ BytesIO( ++ base64.b64decode( ++ b""" ++iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u ++Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 ++M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g ++LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F ++IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA ++Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 ++NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx ++in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 ++SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY ++AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt ++y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG ++ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY ++lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H ++/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 ++AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 ++c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ ++/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw ++pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv ++oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR ++evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA ++AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// ++Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR ++w7IkEbzhVQAAAABJRU5ErkJggg== ++""" ++ ) ++ ) ++ ), ++ ) ++ return font +diff --git a/tests/test_boundingbox_image.py b/tests/test_boundingbox_image.py +index 21f19a7..414f0b1 100644 +--- a/tests/test_boundingbox_image.py ++++ b/tests/test_boundingbox_image.py +@@ -5,6 +5,7 @@ + + from PIL import Image, ImageDraw, ImageColor, ImageChops + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,17 +58,15 @@ def draw_boundingbox(self, path): + sys.platform != "linux", reason="Different platforms have different fonts" + ) + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") +- self.draw.text( +- (10, 100), +- "The red line is a bounding box.", +- ) ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) ++ self.draw.text((10, 100), "The red line is a bounding box.", font=font) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_boundingbox(line1) + +- self.draw.text((10, 140), "These are Arc segments:") ++ self.draw.text((10, 140), "These are Arc segments:", font=font) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_boundingbox(arc1) +@@ -83,6 +82,7 @@ def test_image(self): + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -95,12 +95,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 200 + 800j +diff --git a/tests/test_image.py b/tests/test_image.py +index 49967ea..ae3a357 100644 +--- a/tests/test_image.py ++++ b/tests/test_image.py +@@ -4,6 +4,7 @@ + from math import sqrt + + from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc ++from .font import get_better_than_nothing_font + + + RED = ImageColor.getcolor("red", mode="RGB") +@@ -57,25 +58,30 @@ def draw_tangents(self, path, count): + self.draw.line([c2t(p), c2t(tt + p)], fill=YELLOW, width=1) + + def test_image(self): +- self.draw.text((10, 10), "This is an SVG line:") ++ font = get_better_than_nothing_font() ++ self.draw.text((10, 10), "This is an SVG line:", font=font) + self.draw.text( + (10, 100), + "The red line is a tangent, and the yellow is 90 degrees from that.", ++ font=font, + ) + + line1 = Line(40 + 60j, 200 + 80j) + self.draw_path(line1) + self.draw_tangents(line1, 1) + +- self.draw.text((10, 140), "This is an Arc segment, almost a whole circle:") ++ self.draw.text( ++ (10, 140), "This is an Arc segment, almost a whole circle:", font=font ++ ) + arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) + self.draw_path(arc1) + self.draw_tangents(arc1, 5) +- self.draw.text((10, 460), "With five tangents.") ++ self.draw.text((10, 460), "With five tangents.", font=font) + + self.draw.text( + (10, 500), + "Next we have a quadratic bezier curve, with one tangent:", ++ font=font, + ) + start = 30 + 600j + control = 400 + 540j +@@ -88,12 +94,16 @@ def test_image(self): + self.draw.text( + (10, 670), + "The white dot is the control point, and the cyan lines are ", ++ font=font, ++ ) ++ self.draw.text( ++ (10, 690), "illustrating the how the control point works.", font=font + ) +- self.draw.text((10, 690), "illustrating the how the control point works.") + + self.draw.text( + (10, 730), + "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", ++ font=font, + ) + + start = 30 + 800j diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD new file mode 100644 index 0000000..e0d19f4 --- /dev/null +++ b/backports/py3-svgpath/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-svgpath +pkgver=6.3 +pkgrel=0 +pkgdesc="SVG path and object parser" +url="https://github.com/regebro/svg.path" +arch="noarch" +license="MIT" +depends="python3" +makedepends="py3-setuptools" +checkdepends="py3-pytest py3-pillow" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz + 105_use-better-than-nothing-font.patch + no-install-tests.patch" +builddir="$srcdir/svg.path-$pkgver" + +build() { + python3 setup.py build +} + +check() { + PYTHONPATH=build/lib pytest +} + +package() { + python3 setup.py install --skip-build --root="$pkgdir" +} + +sha512sums=" +fd9dd9e1e603be5e212e3eb247c9f3778203f5285397a4cdde4c038c3f31f7bc2b8904491c208256996e2fbd39b4e5f7ea58d964bd5d22bc09c57e4bc2c70317 py3-svgpath-6.3.tar.gz +d12d32b0f6b075ee8602a7eee5dd1ddaa8f097fe3d471f2941fac0bba335641111eb2c0e2819dffea822f895833ffafa35baac80085cf759ca1ed8f7a6b92773 105_use-better-than-nothing-font.patch +62ab1e0980c7fb797f74b81c937a68b6af1112fff293e6ddec6389a8e490a08e181c37217408b58ce3a2ae2afda7813bb3bbe57d5414cfc18e4e53e6d2f2ea5a no-install-tests.patch +" diff --git a/backports/py3-svgpath/no-install-tests.patch b/backports/py3-svgpath/no-install-tests.patch new file mode 100644 index 0000000..994ce3c --- /dev/null +++ b/backports/py3-svgpath/no-install-tests.patch @@ -0,0 +1,15 @@ +--- ./setup.py.orig ++++ ./setup.py +@@ -1,3 +1,3 @@ +-from setuptools import setup ++from setuptools import setup, find_packages + +-setup() ++setup(packages=find_packages("src", exclude=["*tests"])) +--- ./MANIFEST.in.orig ++++ ./MANIFEST.in +@@ -3,3 +3,4 @@ + + recursive-include src *.png + ++global-exclude tests/* From ed759d32395c422b2f204dc076da7107bc8bc25b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:49:08 -0500 Subject: [PATCH 110/738] backports/py3-trimesh: new aport --- backports/py3-trimesh/APKBUILD | 64 ++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 backports/py3-trimesh/APKBUILD diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD new file mode 100644 index 0000000..41b4e5f --- /dev/null +++ b/backports/py3-trimesh/APKBUILD @@ -0,0 +1,64 @@ +# Contributor: Aiden Grossman +# Maintainer: Aiden Grossman +pkgname=py3-trimesh +pkgver=3.22.1 +pkgrel=0 +pkgdesc="Python library for working with triangular meshes" +url="https://github.com/mikedh/trimesh" +# x86, armhf, armv7 Tests fail on int64 to int32 casts on these arches +# s390x, no py3-rtree +# riscv64, no py3-shapely +arch="noarch !x86 !armhf !armv7 !s390x !riscv64" +license="MIT" +depends=" + py3-colorlog + py3-jsonschema + py3-lxml + py3-mapbox-earcut + py3-msgpack + py3-networkx + py3-numpy + py3-pillow + py3-requests + py3-rtree + py3-scipy + py3-shapely + py3-svgpath + python3 + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends="py3-pytest py3-pytest-xdist py3-pyinstrument" +options="!check" # Failing test units +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/mikedh/trimesh/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/trimesh-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + # test_obj.py: no format zae, probably needs more investigation + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest -n auto \ + --deselect tests/test_dae.py::DAETest::test_material_round \ + --deselect tests/test_dae.py::DAETest::test_obj_roundtrip \ + --deselect tests/test_light.py::LightTests::test_scene \ + --deselect tests/test_obj.py::OBJTest::test_multi_nodupe +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +27952e0d29ccd110d4087b4144e0923706bed3cd0734e7a17d7f55738c6322849c5dad04ab4ecfe0638bc16d65d1e647d08905a396dd6ebd1f78c833a8b95636 py3-trimesh-3.22.1.tar.gz +" From 3f67a56a91c1d463b29bdcd9eb8ca78ff6f4bbcf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:49:18 -0500 Subject: [PATCH 111/738] backports/py3-utils: new aport --- backports/py3-utils/APKBUILD | 46 +++++++++++++++++++ .../fix-setuptools-deprecation.patch | 11 +++++ backports/py3-utils/pytest.patch | 14 ++++++ backports/py3-utils/typing-ext.patch | 22 +++++++++ 4 files changed, 93 insertions(+) create mode 100644 backports/py3-utils/APKBUILD create mode 100644 backports/py3-utils/fix-setuptools-deprecation.patch create mode 100644 backports/py3-utils/pytest.patch create mode 100644 backports/py3-utils/typing-ext.patch diff --git a/backports/py3-utils/APKBUILD b/backports/py3-utils/APKBUILD new file mode 100644 index 0000000..4740a2d --- /dev/null +++ b/backports/py3-utils/APKBUILD @@ -0,0 +1,46 @@ +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke +pkgname=py3-utils +_pkgname=python-utils +pkgver=3.8.1 +pkgrel=0 +pkgdesc="Convenient utilities not included with the standard Python install" +url="https://github.com/WoLpH/python-utils" +arch="noarch" +license="BSD-3-Clause" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-pytest-asyncio py3-loguru" +subpackages="$pkgname-pyc" +source=" + https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz + + fix-setuptools-deprecation.patch + pytest.patch + typing-ext.patch + " + +builddir="$srcdir/$_pkgname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +ccba9651cc99a8f4e3f13e7ff66a43a40d2e85bc735b6246524269495ff321225a0dcad9abd03ca9cb61b4b1b35a27009fac3fe87e3f748ffc5c87a956acd335 python-utils-3.8.1.tar.gz +c001453b958b8231806ef6a04fcd21e1d252eeec36d4e6cbfce35f0662bae76c3f7484e0e8ff06d68a3e9cc7d19c9cdbf792c13e0101c580bb5e8de9d837fde7 fix-setuptools-deprecation.patch +99cc91ad155f8140aedc9420659c0e560a4d816ac1f85468ddb3a9fdc87526d591da916441d63b601146a86fb2c26f61c9dfbe37e31b86ee605f732e24e7b465 pytest.patch +d68943e3301eaafe2a9ea27f382a2eba1ce98149d8cbbe91aa9222cf76a8f7bebba3d9dbfced54bd88c90688a6e18373f011fbb83cd36cbf2ecd3e36b034aa22 typing-ext.patch +" diff --git a/backports/py3-utils/fix-setuptools-deprecation.patch b/backports/py3-utils/fix-setuptools-deprecation.patch new file mode 100644 index 0000000..16b5e5a --- /dev/null +++ b/backports/py3-utils/fix-setuptools-deprecation.patch @@ -0,0 +1,11 @@ +--- a/setup.cfg ++++ b/setup.cfg +@@ -2,7 +2,7 @@ + test = pytest + + [metadata] +-description-file = README.rst ++description_file = README.rst + + [nosetests] + verbosity = 3 diff --git a/backports/py3-utils/pytest.patch b/backports/py3-utils/pytest.patch new file mode 100644 index 0000000..a7f016d --- /dev/null +++ b/backports/py3-utils/pytest.patch @@ -0,0 +1,14 @@ +diff --git a/pytest.ini b/pytest.ini +index a8e632a..e28ed7d 100644 +--- a/pytest.ini ++++ b/pytest.ini +@@ -5,9 +5,6 @@ python_files = + + addopts = + --doctest-modules +- --cov python_utils +- --cov-report term-missing +-; --mypy + + doctest_optionflags = + ALLOW_UNICODE diff --git a/backports/py3-utils/typing-ext.patch b/backports/py3-utils/typing-ext.patch new file mode 100644 index 0000000..ee6acb2 --- /dev/null +++ b/backports/py3-utils/typing-ext.patch @@ -0,0 +1,22 @@ +diff --git a/python_utils/types.py b/python_utils/types.py +index 01c319a..79ef950 100644 +--- a/python_utils/types.py ++++ b/python_utils/types.py +@@ -1,7 +1,6 @@ + # pyright: reportWildcardImportFromLibrary=false + import datetime + import decimal +-from typing_extensions import * # type: ignore # noqa: F403 + from typing import * # type: ignore # pragma: no cover # noqa: F403 + from types import * # type: ignore # pragma: no cover # noqa: F403 + +--- a/setup.py ++++ b/setup.py +@@ -29,7 +29,6 @@ + ), + package_data={'python_utils': ['py.typed']}, + long_description=long_description, +- install_requires=['typing_extensions>3.10.0.2'], + tests_require=['pytest'], + extras_require={ + 'loguru': [ From c271508b7f9765a3a0f10f86df8c2c6ff5746e48 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Jan 2024 23:50:48 -0500 Subject: [PATCH 112/738] gitlab-ci: do not use testing repos --- .gitlab/bin/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab/bin/build.sh b/.gitlab/bin/build.sh index 3d0294f..286f965 100755 --- a/.gitlab/bin/build.sh +++ b/.gitlab/bin/build.sh @@ -8,7 +8,7 @@ set -eu -o pipefail readonly APORTSDIR=$CI_PROJECT_DIR readonly REPOS="cross backports user testing community" -readonly ALPINE_REPOS="main community testing" +readonly ALPINE_REPOS="main community" readonly ARCH=$(apk --print-arch) # gitlab variables readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME From 018226775d361d2e76570b7fa14bc905797ed749 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 23:17:24 -0500 Subject: [PATCH 113/738] user/py3-xmlsec: add xmlsec 1.3.3 support --- .../280_fix-function-deprecation.patch | 35 +++++++++++++++++++ user/py3-xmlsec/APKBUILD | 4 ++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 user/py3-xmlsec/280_fix-function-deprecation.patch diff --git a/user/py3-xmlsec/280_fix-function-deprecation.patch b/user/py3-xmlsec/280_fix-function-deprecation.patch new file mode 100644 index 0000000..eab6f1d --- /dev/null +++ b/user/py3-xmlsec/280_fix-function-deprecation.patch @@ -0,0 +1,35 @@ +diff --git a/src/constants.c.orig b/src/constants.c +index 72ae217..b12d0ad 100644 +--- a/src/constants.c.orig ++++ b/src/constants.c +@@ -445,7 +445,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) { + #endif + #if XMLSEC_VERSION_HEX > 0x10212 + // from version 1.2.19 +- PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEcdsa, "ECDSA") ++ PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEc, "ECDSA") + #endif + PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataHmac, "HMAC") + PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataRsa, "RSA") +diff --git a/src/keys.c.orig b/src/keys.c +index 1440331..8b84c34 100644 +--- a/src/keys.c.orig ++++ b/src/keys.c +@@ -163,7 +163,7 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject* + if (is_content) { + key->handle = xmlSecCryptoAppKeyLoadMemory((const xmlSecByte*)data, (xmlSecSize)data_size, format, password, NULL, NULL); + } else { +- key->handle = xmlSecCryptoAppKeyLoad(data, format, password, NULL, NULL); ++ key->handle = xmlSecCryptoAppKeyLoadEx(data, xmlSecKeyDataTypePrivate, format, password, NULL, NULL); + } + Py_END_ALLOW_THREADS; + +@@ -206,7 +206,7 @@ static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject + if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL; + + Py_BEGIN_ALLOW_THREADS; +- key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), ++ key->handle = xmlSecCryptoAppKeyLoadEx(engine_and_key_id, xmlSecKeyDataTypePrivate, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), + (void*)engine_and_key_id); + Py_END_ALLOW_THREADS; + diff --git a/user/py3-xmlsec/APKBUILD b/user/py3-xmlsec/APKBUILD index 5237258..263410e 100644 --- a/user/py3-xmlsec/APKBUILD +++ b/user/py3-xmlsec/APKBUILD @@ -4,7 +4,7 @@ _pyname=xmlsec pkgname="py3-$_pyname" pkgver=1.3.13 -pkgrel=4 +pkgrel=5 arch="all" pkgdesc="Python bindings for the XML Security Library" url="https://pypi.python.org/project/$_pyname" @@ -28,6 +28,7 @@ source=" $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz 253_pkcs11-support.patch 264_xmlsec3-support.patch + 280_fix-function-deprecation.patch " builddir="$srcdir"/$_pyname-$pkgver @@ -52,4 +53,5 @@ sha512sums=" 2aa080fbc918d5d360dcb086a8c529545514dd429649d99833425f92fa06a3a094cf3139f8ed00827fed358f0fa463b74c267e593ac14e5aadc299d64206ac8e py3-xmlsec-1.3.13.tar.gz 9155a2435d832b4dcd0260616f52eec148dca1dade76a89c23e10f017e4140024ef042b6b10c5b9435fcbf52e7dc4f7e5764dc7f5bdd7595c27b3106fab942cf 253_pkcs11-support.patch d901c09a49145250dd9325476c1356f820519b9248195240584f6de62b8084205f698501a1f48e42b63fe4c7b169dcb65540edc03724ef7e9297b45216c5b481 264_xmlsec3-support.patch +a47d4d44a518939e72ff7213c6dcd2c391ff5e1bb2be6a1b0d0ab1ef6ed0155d81c26b8f844285883db2f8954b122e48a9b1bccf343a5344af7f1723b3fdd78d 280_fix-function-deprecation.patch " From 95c8508a8e1a107cc4256da73273137e6470800c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 21 Jan 2024 14:31:38 -0500 Subject: [PATCH 114/738] backports/py3-python-jwt: remove due to community --- backports/py3-python-jwt/APKBUILD | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 backports/py3-python-jwt/APKBUILD diff --git a/backports/py3-python-jwt/APKBUILD b/backports/py3-python-jwt/APKBUILD deleted file mode 100644 index 136ed68..0000000 --- a/backports/py3-python-jwt/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Contributor: Rejah Rehim -# Maintainer: Rejah Rehim -pkgname=py3-python-jwt -_pkgname=python_jwt -pkgver=4.0.0 -pkgrel=1 -pkgdesc="Module for generating and verifying JSON Web Tokens" -options="!check" # no test suite -url="https://github.com/davedoesdev/python-jwt" -arch="noarch" -license="MIT" -depends="python3 py3-jwcrypto" -makedepends="py3-setuptools" -subpackages="$pkgname-doc $pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/p/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver - -build() { - python3 setup.py build -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" - install -Dm644 LICENCE "$pkgdir"/usr/share/licenses/$pkgname/LICENCE - install -Dm644 README.md "$pkgdir"/usr/share/licenses/$pkgname/README.md -} - -sha512sums=" -94c6ebd7738da3087b7192f3eff3e6af3aa7dce3f38cd0e001261e61a5aa42e03fa08d76bb56b7d033ee64723a428bfbad480b6d46934c9b1ef446f613b1cbe0 python_jwt-4.0.0.tar.gz -" From a2b8b68641a2d429a59ad74b6348de9a09d43c88 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 21 Jan 2024 14:31:53 -0500 Subject: [PATCH 115/738] backports/py3-twilio: remove due to community --- backports/py3-twilio/APKBUILD | 45 ----------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 backports/py3-twilio/APKBUILD diff --git a/backports/py3-twilio/APKBUILD b/backports/py3-twilio/APKBUILD deleted file mode 100644 index 3259f8e..0000000 --- a/backports/py3-twilio/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_pyname=twilio -pkgname="py3-$_pyname" -pkgver=8.10.2 -pkgrel=0 -arch="noarch" -pkgdesc="Twilio API client and TwiML generator" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-requests - py3-mock - py3-flake8 - py3-nose - py3-python-jwt - py3-twine - py3-tz - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -options="!check" # No testsuite -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir"/$_pyname-$pkgver -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -8fb1455d9af90fed8fb7dc4b8d4e12019f9171b47252ddd78adafa6ea1ef13884bdf4ed3e74129f26b0b13a60060824a18e038458b03d6861de0f025ded45023 py3-twilio-8.10.2.tar.gz -" From e0b8a94f39f3f9881b97620c8393f2be34c35ebd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:27:21 -0500 Subject: [PATCH 116/738] user/ruby3.0: remove for ruby3.2 --- user/ruby3.0/APKBUILD | 232 ------------------ user/ruby3.0/dont-install-bundled-gems.patch | 20 -- user/ruby3.0/fix-get_main_stack.patch | 70 ------ user/ruby3.0/ruby3.0.post-upgrade | 17 -- .../test_insns-lower-recursion-depth.patch | 47 ---- 5 files changed, 386 deletions(-) delete mode 100644 user/ruby3.0/APKBUILD delete mode 100644 user/ruby3.0/dont-install-bundled-gems.patch delete mode 100644 user/ruby3.0/fix-get_main_stack.patch delete mode 100644 user/ruby3.0/ruby3.0.post-upgrade delete mode 100644 user/ruby3.0/test_insns-lower-recursion-depth.patch diff --git a/user/ruby3.0/APKBUILD b/user/ruby3.0/APKBUILD deleted file mode 100644 index 35844b6..0000000 --- a/user/ruby3.0/APKBUILD +++ /dev/null @@ -1,232 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Carlo Landmeter -# Contributor: Jakub Jirutka -# Contributor: Nulo -# -# secfixes: -# 3.0.6-r0: -# - CVE-2023-28755 -# - CVE-2023-28756 -# 3.0.5-r0: -# - CVE-2021-33621 -# 3.0.4-r0: -# - CVE-2022-28738 -# - CVE-2022-28739 -# 3.0.3-r0: -# - CVE-2021-41817 -# - CVE-2021-41816 -# - CVE-2021-41819 -# 2.7.4-r0: -# - CVE-2021-31799 -# - CVE-2021-31810 -# - CVE-2021-32066 -# 2.7.3-r0: -# - CVE-2021-28965 -# - CVE-2021-28966 -# 2.7.2-r0: -# - CVE-2020-25613 -# 2.6.6-r0: -# - CVE-2020-10663 -# - CVE-2020-10933 -# 2.6.5-r0: -# - CVE-2019-16255 -# - CVE-2019-16254 -# - CVE-2019-15845 -# - CVE-2019-16201 -# 2.5.2-r0: -# - CVE-2018-16395 -# - CVE-2018-16396 -# 2.5.1-r0: -# - CVE-2017-17742 -# - CVE-2018-6914 -# - CVE-2018-8777 -# - CVE-2018-8778 -# - CVE-2018-8779 -# - CVE-2018-8780 -# 2.4.2-r0: -# - CVE-2017-0898 -# - CVE-2017-10784 -# - CVE-2017-14033 -# - CVE-2017-14064 -# - CVE-2017-0899 -# - CVE-2017-0900 -# - CVE-2017-0901 -# - CVE-2017-0902 -# 2.4.3-r0: -# - CVE-2017-17405 -# -pkgname=ruby3.0 -_pkgname=ruby -# When upgrading, upgrade also each ruby- aport listed in file -# gems/bundled_gems. If some aport is missing or not in the main repo, -# create/move it. -pkgver=3.0.6 -_abiver="${pkgver%.*}.0" -pkgrel=0 -pkgdesc="An object-oriented language for quick and easy programming" -url="https://www.ruby-lang.org/" -arch="all" -license="Ruby AND BSD-2-Clause AND MIT" -depends="ca-certificates" -depends_dev=" - $pkgname=$pkgver-r$pkgrel - $pkgname-rdoc=$pkgver-r$pkgrel - gmp-dev - libucontext-dev - " -makedepends="$depends_dev zlib-dev openssl1.1-compat-dev gdbm-dev readline-dev - libffi-dev coreutils yaml-dev linux-headers autoconf" -install="$pkgname.post-upgrade" -subpackages="$pkgname-dbg $pkgname-doc $pkgname-dev - $pkgname-rdoc::noarch - $pkgname-libs - $pkgname-full::noarch - " -source="https://cache.ruby-lang.org/pub/ruby/${pkgver%.*}/ruby-$pkgver.tar.gz - test_insns-lower-recursion-depth.patch - fix-get_main_stack.patch - dont-install-bundled-gems.patch - " -replaces="ruby-gems" -builddir="$srcdir/$_pkgname-$pkgver" - -# For backward compatibility (pre 3.x). -for _i in bigdecimal etc fiddle gdbm io-console irb json; do - provides="$provides ruby3.0-$_i=$pkgver-r$pkgrel" -done - -_gemdir="/usr/lib/ruby/gems/$_abiver" -_rubydir="/usr/lib/ruby/$_abiver" -_chost="${CHOST/-alpine-/-}" -_depends_full='' # see prepare() - -case "$CARCH" in - x86) _arch="i386";; - *) _arch="$CARCH";; -esac - -prepare() { - default_prepare - autoconf - - # v2.7.1 - Of all the bootstraptest only test_fiber fails on s390x: - # test_fiber.rb bootstraptest.tmp.rb:8: [BUG] vm_call_cfunc: cfp consistency error (0x000003ffb63fefb0, 0x000003ffb42f5f58) - case "$CARCH" in - s390x) rm bootstraptest/test_fiber.rb;; - esac - - local name ver; while read -r name ver _; do - case "$name=$ver" in - [a-z]*=[0-9]*.[0-9]*) - if ! apk add -qs "ruby-$name>=$ver" >/dev/null 2>&1; then - warning "bump package ruby-$name to version $ver" - fi - _depends_full="$_depends_full ruby-$name>=$ver" - esac - done < "$builddir"/gems/bundled_gems -} - -build() { - # -fomit-frame-pointer makes ruby segfault, see gentoo bug #150413 - # In many places aliasing rules are broken; play it safe - # as it's risky with newer compilers to leave it as it is. - export CFLAGS="$CFLAGS -fno-omit-frame-pointer -fno-strict-aliasing" - export CPPFLAGS="$CPPFLAGS -fno-omit-frame-pointer -fno-strict-aliasing" - - # Needed for coroutine stuff - export LIBS="-lucontext" - - # ruby saves path to install. we want use $PATH - export INSTALL=install - - # the configure script does not detect isnan/isinf as macros - export ac_cv_func_isnan=yes - export ac_cv_func_isinf=yes - - ./configure \ - --build=$CBUILD \ - --host=$CHOST \ - --prefix=/usr \ - --sysconfdir=/etc \ - --mandir=/usr/share/man \ - --infodir=/usr/share/info \ - --with-sitedir=/usr/local/lib/site_ruby \ - --with-search-path="/usr/lib/site_ruby/\$(ruby_ver)/$_arch-linux" \ - --enable-pthread \ - --disable-rpath \ - --enable-shared \ - --with-mantype=man - make -} - -check() { - make test -} - -package() { - make DESTDIR="$pkgdir" SUDO="" install - - install -m 644 -D COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING - - cd "$pkgdir" - - # Remove bundled gem bundler; it's provided by a separate aport/package - # ruby-bundler. - rm -rf ./$_rubydir/bundler - rm ./$_rubydir/bundler.rb - rm -rf ./$_gemdir/gems/bundler-* - rm ./$_gemdir/specifications/default/bundler-*.gemspec - rm usr/bin/bundle usr/bin/bundler - - # Remove bundled CA certificates; they are provided by ca-certificates. - rm ./$_rubydir/rubygems/ssl_certs/*/*.pem - rmdir ./$_rubydir/rubygems/ssl_certs/* || true - - rm -Rf ./$_gemdir/cache/* - - if [ -d usr/local ]; then - local f=$(find usr/local -type f) - if [ -n "$f" ]; then - error "Found files in /usr/local:" - echo "$f" - return 1 - fi - rm -r usr/local - fi -} - -rdoc() { - pkgdesc="Ruby documentation tool" - license="Ruby" - depends="$pkgname" - - amove $_rubydir/rdoc - amove $_gemdir/gems/rdoc-* - amove $_gemdir/specifications/default/rdoc-* - amove usr/bin/ri - amove usr/bin/rdoc -} - -libs() { - pkgdesc="Libraries necessary to run Ruby" - depends="" - - amove usr/lib -} - -full() { - pkgdesc="Ruby with all bundled gems" - # bundler is bundled since Ruby 2.6, so include it in ruby-full despite - # that it's provided by a seprate aport/package. - depends="ruby ruby-rdoc ruby-bundler $_depends_full" - - mkdir -p "$subpkgdir" -} - -sha512sums=" -d596bfd374ae777717379b409afe8ee1655ade0c0539ada7a10af4780b818efe25a28aa50a2a7226741d1776d744e10ad916641f9d12fb31c7444b0a01d0e0cc ruby-3.0.6.tar.gz -2ee66e841f841ad6e7c8877ec20b548d23b50d6a888a0d2d16f9062892c5d1c64efb59385f6723bae6cd1591824278787eefc0180768619c653243756d1300ab test_insns-lower-recursion-depth.patch -8e0a75899a3855f85441dabb6571569f13cf3472c2ccb2ec5c8e0e5cc9026af3c9951ebed4a754d9723dfd1c8ece32862802f20e18b7e5de4875125d92ef146b fix-get_main_stack.patch -10bda0462feaec73a7522ef622ffc18815b1d4302e771013ab78ef88d1d9f76277b1d24401eff054e031ca0fbc1ac80486d58282378cbdaf695786b212e6524d dont-install-bundled-gems.patch -" diff --git a/user/ruby3.0/dont-install-bundled-gems.patch b/user/ruby3.0/dont-install-bundled-gems.patch deleted file mode 100644 index 5710923..0000000 --- a/user/ruby3.0/dont-install-bundled-gems.patch +++ /dev/null @@ -1,20 +0,0 @@ -Don't install bundled gems - we package them separately. - ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -947,6 +947,7 @@ - end - end - -+=begin XXX-Patched - install?(:ext, :comm, :gem, :'bundled-gems') do - gem_dir = Gem.default_dir - install_dir = with_destdir(gem_dir) -@@ -1026,6 +1027,7 @@ - puts "skip installing bundled gems because of lacking zlib" - end - end -+=end - - parse_args() - diff --git a/user/ruby3.0/fix-get_main_stack.patch b/user/ruby3.0/fix-get_main_stack.patch deleted file mode 100644 index ef369bc..0000000 --- a/user/ruby3.0/fix-get_main_stack.patch +++ /dev/null @@ -1,70 +0,0 @@ -diff --git a/thread_pthread.c b/thread_pthread.c -index 951885ffa0..cf90321d1d 100644 ---- a/thread_pthread.c -+++ b/thread_pthread.c -@@ -681,9 +689,6 @@ hpux_attr_getstackaddr(const pthread_attr_t *attr, void **addr) - # define MAINSTACKADDR_AVAILABLE 0 - # endif - #endif --#if MAINSTACKADDR_AVAILABLE && !defined(get_main_stack) --# define get_main_stack(addr, size) get_stack(addr, size) --#endif - - #ifdef STACKADDR_AVAILABLE - /* -@@ -765,6 +762,55 @@ get_stack(void **addr, size_t *size) - return 0; - #undef CHECK_ERR - } -+ -+#if defined(__linux__) && !defined(__GLIBC__) && defined(HAVE_GETRLIMIT) -+ -+#ifndef PAGE_SIZE -+#include -+#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) -+#endif -+ -+static int -+get_main_stack(void **addr, size_t *size) -+{ -+ size_t start, end, limit, prevend = 0; -+ struct rlimit r; -+ FILE *f; -+ char buf[PATH_MAX+80], s[8]; -+ int n; -+ STACK_GROW_DIR_DETECTION; -+ -+ f = fopen("/proc/self/maps", "re"); -+ if (!f) -+ return -1; -+ n = 0; -+ while (fgets(buf, sizeof buf, f)) { -+ n = sscanf(buf, "%zx-%zx %*s %*s %*s %*s %7s", &start, &end, s); -+ if (n >= 2) { -+ if (n == 3 && strcmp(s, "[stack]") == 0) -+ break; -+ prevend = end; -+ } -+ n = 0; -+ } -+ fclose(f); -+ if (n == 0) -+ return -1; -+ -+ limit = 100 << 20; /* 100MB stack limit */ -+ if (getrlimit(RLIMIT_STACK, &r)==0 && r.rlim_cur < limit) -+ limit = r.rlim_cur & -PAGE_SIZE; -+ if (limit > end) limit = end; -+ if (prevend < end - limit) prevend = end - limit; -+ if (start > prevend) start = prevend; -+ *addr = IS_STACK_DIR_UPPER() ? (void *)start : (void *)end; -+ *size = end - start; -+ return 0; -+} -+#else -+# define get_main_stack(addr, size) get_stack(addr, size) -+#endif -+ - #endif - - static struct { diff --git a/user/ruby3.0/ruby3.0.post-upgrade b/user/ruby3.0/ruby3.0.post-upgrade deleted file mode 100644 index 6cba787..0000000 --- a/user/ruby3.0/ruby3.0.post-upgrade +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -ver_new="$1" -ver_old="$2" - -if [ "$(apk version -t "$ver_old" "2.5.0-r0")" = "<" ]; then - cat >&2 <<-EOF - * - * In Ruby 2.5 more parts of the stdlib has been splitted into standalone - * gems, yet still installed with Ruby by default. We have moved some of - * them into separate subpackages. If you don't know which subpackages you - * need, you may install meta-package "ruby-full". - * - EOF -fi - -exit 0 diff --git a/user/ruby3.0/test_insns-lower-recursion-depth.patch b/user/ruby3.0/test_insns-lower-recursion-depth.patch deleted file mode 100644 index a775efb..0000000 --- a/user/ruby3.0/test_insns-lower-recursion-depth.patch +++ /dev/null @@ -1,47 +0,0 @@ -The patched test is a recursion function. We have lower stack size, -so we hit SystemStackError sooner than on other platforms. - - #361 test_insns.rb:389:in `block in ': - # recursive once - def once n - return %r/#{ - if n == 0 - true - else - once(n-1) # here - end - }/ox - end - x = once(128); x = once(7); x = once(16); - x =~ "true" && $~ - #=> "" (expected "true") once - Stderr output is not empty - bootstraptest.tmp.rb:3:in `once': stack level too deep (SystemStackError) - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - ... 125 levels... - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:11:in `
' - Test_insns.rb FAIL 1/187 - FAIL 1/1197 tests failed - Make: *** [uncommon.mk:666: yes-btest-ruby] Error 1 - ---- a/bootstraptest/test_insns.rb -+++ b/bootstraptest/test_insns.rb -@@ -273,7 +273,7 @@ - end - }/ox - end -- x = once(128); x = once(7); x = once(16); -+ x = once(32); x = once(7); x = once(16); - x =~ "true" && $~ - }, - [ 'once', <<-'},', ], # { From 87c6a5eca646032af96f2ab410c5530d1c67550e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:27:32 -0500 Subject: [PATCH 117/738] user/ruby3.0-minitest: remove for ruby3.2 --- user/ruby3.0-minitest/APKBUILD | 68 ----------------------------- user/ruby3.0-minitest/gemspec.patch | 15 ------- 2 files changed, 83 deletions(-) delete mode 100644 user/ruby3.0-minitest/APKBUILD delete mode 100644 user/ruby3.0-minitest/gemspec.patch diff --git a/user/ruby3.0-minitest/APKBUILD b/user/ruby3.0-minitest/APKBUILD deleted file mode 100644 index 78eb953..0000000 --- a/user/ruby3.0-minitest/APKBUILD +++ /dev/null @@ -1,68 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka - -pkgname=ruby3.0-minitest -_gemname=minitest -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=5.14.4 -pkgrel=1 -pkgdesc="Suite of testing facilities supporting TDD, BDD, mocking, and benchmarking for Ruby" -url="https://github.com/seattlerb/minitest" -arch="noarch" -license="MIT" -depends="ruby3.0" -makedepends="ruby3.0-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/seattlerb/minitest/archive/v$pkgver/$_gemname-$pkgver.tar.gz - https://rubygems.org/downloads/$_gemname-$pkgver.gem - " -builddir="$srcdir/$_gemname-$pkgver" - -prepare() { - default_prepare - - # Generate gemspec (there's no gemspec in the source). - gem specification -l --ruby "$srcdir"/$_gemname-$pkgver.gem \ - > "$builddir"/$_gemname.gemspec -} - -build() { - gem build $_gemname.gemspec -} - -check() { - ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - local geminstdir="$gemdir/gems/$_gemname-$pkgver" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins - - cd "$geminstdir" - rm -rf History.* Manifest.* README.* Rakefile test/ -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -e0b780d47e79adcfb68c2d521aa002ad00caefb5820d41d157cfcf34e2c9f987c76e4d31ba1a46b62b18a51c1e84c0add2637f30ab89899e511f3db7b2cea3e3 minitest-5.14.4.tar.gz -f967a11cfce82e167879905082859273b270e8d8e663a0c1c553964a345fb8564547627b8cf97418ac5bda544bb76c1385438ad74ec8e846666dc2952d55c9e9 minitest-5.14.4.gem -" diff --git a/user/ruby3.0-minitest/gemspec.patch b/user/ruby3.0-minitest/gemspec.patch deleted file mode 100644 index a21a0c5..0000000 --- a/user/ruby3.0-minitest/gemspec.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/webrick.gemspec -+++ b/webrick.gemspec -@@ -14,12 +14,6 @@ - - s.require_path = %w{lib} - s.files = [ -- "Gemfile", -- "LICENSE.txt", -- "README.md", -- "Rakefile", -- "bin/console", -- "bin/setup", - "lib/webrick.rb", - "lib/webrick/accesslog.rb", - "lib/webrick/cgi.rb", From 017303dac4237026561bcfa6660c3908c3a13efb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:27:44 -0500 Subject: [PATCH 118/738] user/ruby3.0-bundler: remove for ruby3.2 --- user/ruby3.0-bundler/APKBUILD | 54 ----------------------------- user/ruby3.0-bundler/manpages.patch | 37 -------------------- 2 files changed, 91 deletions(-) delete mode 100644 user/ruby3.0-bundler/APKBUILD delete mode 100644 user/ruby3.0-bundler/manpages.patch diff --git a/user/ruby3.0-bundler/APKBUILD b/user/ruby3.0-bundler/APKBUILD deleted file mode 100644 index 1339c6a..0000000 --- a/user/ruby3.0-bundler/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka - -pkgname=ruby3.0-bundler -_gemname=bundler -pkgver=2.3.26 -pkgrel=1 -pkgdesc="Manage an application's gem dependencies" -url="https://bundler.io/" -arch="noarch" -license="MIT" -depends="ruby3.0" -makedepends="ruby3.0-rake" -subpackages="$pkgname-doc" -source="https://github.com/rubygems/rubygems/archive/bundler-v$pkgver.tar.gz - manpages.patch - " -builddir="$srcdir/rubygems-bundler-v$pkgver/bundler" -options="!check" # tests require deps not available in main repo - -build() { - rake build_metadata - gem build $_gemname.gemspec -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --bindir "$pkgdir/usr/bin" \ - --ignore-dependencies \ - --no-document \ - --verbose \ - $_gemname - - local n; for n in 1 5; do - mkdir -p "$pkgdir"/usr/share/man/man$n - mv "$gemdir"/gems/$_gemname-$pkgver/lib/bundler/man/*.$n "$pkgdir"/usr/share/man/man$n/ - done - - rm -rf "$gemdir"/cache \ - "$gemdir"/build_info \ - "$gemdir"/doc \ - "$gemdir"/gems/$_gemname-$pkgver/man \ - "$gemdir"/gems/$_gemname-$pkgver/*.md -} - -sha512sums=" -0a02d5130ecb8ca96e1850fc409a55d9f07481bbb8ec9b20554cdc6f3b3d3aada67717ab17dd30835615e4c228f39f895bd9b6f55bc22d4dbd88caef9cc105ba bundler-v2.3.26.tar.gz -77a36e61ed205aeea6114b1039dfbe29fcaf916eeae3f91785aa53b3ac534e004aa257e218534d927f39e3673eebbfb3ef9ee17f04ed81f74117799b88e53cf4 manpages.patch -" diff --git a/user/ruby3.0-bundler/manpages.patch b/user/ruby3.0-bundler/manpages.patch deleted file mode 100644 index cc11b02..0000000 --- a/user/ruby3.0-bundler/manpages.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Jakub Jirutka -Date: Fri, 26 Mar 2021 23:17:29 +0100 -Subject: [PATCH] Fix --help when man pages are moved out - -* Allow to move man pages from the gem's directory to the standard - system location (/usr/share/man) without breaking `bundler --help`. -* Fallback to the bundled ronn pages when the man command is available, - but the bundler man pages are not (i.e. ruby-bundler-doc is not - installed). -* Execute man with '-c' option to print the man page to the terminal - instead of using pager. - ---- a/lib/bundler/cli.rb -+++ b/lib/bundler/cli.rb -@@ -118,16 +118,17 @@ - end - - man_path = File.expand_path("man", __dir__) -- man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f| -- [File.basename(f, ".*"), f] -+ man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\.ronn\Z/).collect do |f| -+ man_name = File.basename(f, ".ronn") -+ [File.basename(man_name, ".*"), man_name] - end] - - if man_pages.include?(command) - man_page = man_pages[command] -- if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} -- Kernel.exec "man #{man_page}" -+ if Bundler.which("man") && Kernel.system("man -w #{command} >/dev/null 2>&1") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} -+ Kernel.exec "man -c #{command}" - else -- puts File.read("#{man_path}/#{File.basename(man_page)}.ronn") -+ puts File.read("#{man_path}/#{man_page}.ronn") - end - elsif command_path = Bundler.which("bundler-#{cli}") - Kernel.exec(command_path, "--help") From 36b9607f8938cec0da519a0d6392f502407157d6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:27:58 -0500 Subject: [PATCH 119/738] user/ruby3.0-rake: remove for ruby3.2 --- user/ruby3.0-rake/APKBUILD | 60 -------------------------------------- 1 file changed, 60 deletions(-) delete mode 100644 user/ruby3.0-rake/APKBUILD diff --git a/user/ruby3.0-rake/APKBUILD b/user/ruby3.0-rake/APKBUILD deleted file mode 100644 index 974f449..0000000 --- a/user/ruby3.0-rake/APKBUILD +++ /dev/null @@ -1,60 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka - -pkgname=ruby3.0-rake -_gemname=rake -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=13.0.6 -pkgrel=1 -pkgdesc="A Ruby task runner, inspired by make" -url="https://github.com/ruby/rake" -arch="noarch" -license="MIT" -depends="ruby3.0" -checkdepends="ruby3.0-minitest" -makedepends="ruby3.0-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/ruby/rake/archive/v$pkgver/$_gemname-$pkgver.tar.gz" -builddir="$srcdir/$_gemname-$pkgver" - -build() { - gem build $_gemname.gemspec -} - -check() { - # FIXME: Fix test_signal_propagation_in_tests - ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" -- \ - --exclude=test_signal_propagation_in_tests -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --bindir "$pkgdir/usr/bin" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins - - cd gems/rake-* - rm -rf doc ./*.rdoc MIT-LICENSE -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -1b438be96d8cedaf70e961b0bbd2217692b0b5537b2e1d5f599158e7da3e300cf6ab0c5f0c52fea89be0beb675effbbf563d24e55c84fb673b4982013355e03c rake-13.0.6.tar.gz -" From 0cc62b6d4f1786e9598dd34e4dc1290d3ff2c4e6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:30:40 -0500 Subject: [PATCH 120/738] user/ruby3.0-power_assert: remove for ruby3.2 --- user/ruby3.0-power_assert/APKBUILD | 64 ------------------------- user/ruby3.0-power_assert/gemspec.patch | 23 --------- 2 files changed, 87 deletions(-) delete mode 100644 user/ruby3.0-power_assert/APKBUILD delete mode 100644 user/ruby3.0-power_assert/gemspec.patch diff --git a/user/ruby3.0-power_assert/APKBUILD b/user/ruby3.0-power_assert/APKBUILD deleted file mode 100644 index bf81915..0000000 --- a/user/ruby3.0-power_assert/APKBUILD +++ /dev/null @@ -1,64 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka - -pkgname=ruby3.0-power_assert -_gemname=power_assert -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=1.2.0 -pkgrel=1 -pkgdesc="Debug tool for Ruby that displays intermediate results of a method chain" -url="https://github.com/ruby/power_assert" -arch="noarch" -license="BSD-2-Clause AND Ruby" -depends="ruby3.0" -checkdepends="ruby3.0-pry ruby3.0-rake ruby3.0-test-unit" -makedepends="ruby3.0-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/ruby/power_assert/archive/v$pkgver/$_gemname-$pkgver.tar.gz - gemspec.patch - " -builddir="$srcdir/$_gemname-$pkgver" -# Avoid circular dependency with ruby-test-unit. -options="!check" - -prepare() { - default_prepare - sed -i '/require .bundler/d' Rakefile -} - -build() { - gem build $_gemname.gemspec -} - -check() { - rake test -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -2f001f6223fc3fb586c7b0457f775379040e11eb83b5bdda51c02b2b24e531aecd6e12e6ec80bf9407a768ab1a10b0a6b4c8f1a92ca69ea702faf56202bb635c power_assert-1.2.0.tar.gz -ae0ca6ad2990d01d57f95cdce11dc3004b2ace9e79b90bf9eb181bf604bed5992436cb319f923075af951b8e2d31d59f13e15af94c534885d18e033338302524 gemspec.patch -" diff --git a/user/ruby3.0-power_assert/gemspec.patch b/user/ruby3.0-power_assert/gemspec.patch deleted file mode 100644 index 81fa904..0000000 --- a/user/ruby3.0-power_assert/gemspec.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- a/power_assert.gemspec -+++ b/power_assert.gemspec -@@ -12,11 +12,7 @@ - s.summary = "Power Assert for Ruby" - s.description = "Power Assert for Ruby. Power Assert shows each value of variables and method calls in the expression. It is useful for testing, providing which value wasn't correct when the condition is not satisfied." - -- s.files = `git ls-files -z`.split("\x0").reject do |f| -- f.match(%r{^(test|spec|features|benchmark)/}) -- end -- s.bindir = 'exe' -- s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } -+ s.files = Dir['lib/**/*.rb'] - s.require_paths = ['lib'] - s.add_development_dependency 'test-unit' - s.add_development_dependency 'rake' -@@ -25,7 +21,6 @@ - s.add_development_dependency 'pry' - s.add_development_dependency 'byebug' - s.add_development_dependency 'benchmark-ips' -- s.extra_rdoc_files = ['README.rdoc'] - s.rdoc_options = ['--main', 'README.rdoc'] - s.licenses = ['2-clause BSDL', "Ruby's"] - end From 313ac34de8cffd0252f6eb00aaf75a2c0d3d03e7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:30:51 -0500 Subject: [PATCH 121/738] user/ruby3.0-rugged: remove for ruby3.2 --- user/ruby3.0-rugged/APKBUILD | 75 ---------------- .../fix-extconf-version-check.patch | 13 --- user/ruby3.0-rugged/libgit2-1.7.patch | 90 ------------------- user/ruby3.0-rugged/libgit2-fixture-dir.patch | 12 --- user/ruby3.0-rugged/skip-online-tests.patch | 15 ---- .../skip-test_discover_false.patch | 27 ------ .../skip-test_read_global_config_file.patch | 13 --- 7 files changed, 245 deletions(-) delete mode 100644 user/ruby3.0-rugged/APKBUILD delete mode 100644 user/ruby3.0-rugged/fix-extconf-version-check.patch delete mode 100644 user/ruby3.0-rugged/libgit2-1.7.patch delete mode 100644 user/ruby3.0-rugged/libgit2-fixture-dir.patch delete mode 100644 user/ruby3.0-rugged/skip-online-tests.patch delete mode 100644 user/ruby3.0-rugged/skip-test_discover_false.patch delete mode 100644 user/ruby3.0-rugged/skip-test_read_global_config_file.patch diff --git a/user/ruby3.0-rugged/APKBUILD b/user/ruby3.0-rugged/APKBUILD deleted file mode 100644 index 5721fd0..0000000 --- a/user/ruby3.0-rugged/APKBUILD +++ /dev/null @@ -1,75 +0,0 @@ -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -pkgname=ruby3.0-rugged -_gemname=rugged -pkgver=1.6.3 -pkgrel=1 -pkgdesc="Ruby bindings to libgit2" -url="https://github.com/libgit2/rugged" -arch="all" -license="MIT" -checkdepends=" - git - libgit2-tests - ruby3.0-minitest - ruby3.0-rake - ruby3.0-rake-compiler - " -makedepends=" - libgit2-dev>=${pkgver%.*} - ruby3.0 - ruby3.0-dev - " -source="$_gemname-$pkgver.tar.gz::https://github.com/libgit2/$_gemname/archive/v$pkgver.tar.gz - fix-extconf-version-check.patch - libgit2-fixture-dir.patch - libgit2-1.7.patch - skip-test_discover_false.patch - skip-test_read_global_config_file.patch - skip-online-tests.patch - " -builddir="$srcdir/$_gemname-$pkgver" -# Rugged::ConfigError: repository path '/tmp/' is not owned by current user -# requires tmp persmissions on host -options="!check" - -build() { - gem build $_gemname.gemspec - - RUGGED_USE_SYSTEM_LIBRARIES=1 gem install --local \ - --install-dir dist \ - --ignore-dependencies \ - --no-document \ - --verbose \ - $_gemname - - # Needed for tests. - cp -l dist/extensions/*/*/$_gemname-*/$_gemname/*.so lib/$_gemname/ -} - -check() { - rake test LIBGIT2_FIXTURE_DIR="/usr/src/libgit2/tests/resources" -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - cd "$builddir"/dist - - mkdir -p "$gemdir" - cp -r extensions gems specifications "$gemdir"/ - - # Remove unnecessary and duplicated files. - rm -f "$gemdir"/extensions/*/*/$_gemname-*/mkmf.log - cd "$gemdir"/gems/$_gemname-$pkgver - rm -rf ext/ lib/$_gemname/*.so LICENSE* README* -} - -sha512sums=" -4d54b5df04382628aff7e1abbf5fbd9730564c9bcb4e17da34ac59578b306db567b15151629a10c4a6d8174a31cd8be03c27ff0d1514cb19de237e773f4b64ce rugged-1.6.3.tar.gz -0e55aff667175496e9df1920c6d49042077196aa992a729323628224e7930a6f976bcbfae70d2af733a043c173e8cd5f571606f0b898b008472b40fcefe6b425 fix-extconf-version-check.patch -0c749aeb8d6a29aed51737bab09c7b0a6669ac691461758c856ede5d8510ad6edfa284cddd1b54982bf614a45ba817b70e838e071889a9b05e1b0580111ec826 libgit2-fixture-dir.patch -bcf7b554390fb2b1ef9043f8c934ae51a299f223ec1d7826dcb8eed078961cd084c05148c84142d60cc0a3213653bd416af1fbb09bfa5b26c9ce87fca79f6a18 libgit2-1.7.patch -33464eeefc7669fe3bf5f47c4016cacdcba4f7455ed22b441383b49721870072b5095dbb68832cdb933a7659a415476db64b579a98c888b83900d092bb8b54be skip-test_discover_false.patch -b9e028f18830e447773e895046eb03489e94bb5a76fede51f93545ed67f7249ed8f37ed4bb832eb68a2db281ff3e2b84dab8b72bb21eea4b835b0f1ce23943c3 skip-test_read_global_config_file.patch -5f0ad88eb7ac8c69605c43712e046efd47b727f48e98ee4047be850da4fea48c11fc2a383c791810a1bc81c08ca00428d4906c1af02a0d0da6e1ffbd4723b8f3 skip-online-tests.patch -" diff --git a/user/ruby3.0-rugged/fix-extconf-version-check.patch b/user/ruby3.0-rugged/fix-extconf-version-check.patch deleted file mode 100644 index fc22612..0000000 --- a/user/ruby3.0-rugged/fix-extconf-version-check.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/ext/rugged/extconf.rb b/ext/rugged/extconf.rb -index 7dbd2b3..92251e3 100644 ---- a/ext/rugged/extconf.rb -+++ b/ext/rugged/extconf.rb -@@ -70,7 +70,7 @@ if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES']) - - major = minor = nil - -- File.readlines(File.join(LIBGIT2_DIR, "include", "git2", "version.h")).each do |line| -+ File.readlines(File.join("/usr", "include", "git2", "version.h")).each do |line| - if !major && (matches = line.match(/^#define LIBGIT2_VER_MAJOR\s+([0-9]+)$/)) - major = matches[1] - next diff --git a/user/ruby3.0-rugged/libgit2-1.7.patch b/user/ruby3.0-rugged/libgit2-1.7.patch deleted file mode 100644 index 4fe0884..0000000 --- a/user/ruby3.0-rugged/libgit2-1.7.patch +++ /dev/null @@ -1,90 +0,0 @@ -Patch-Source: https://github.com/libgit2/rugged/pull/964 -safe as we apply the libgit2 fix to libgit. --- -From 508fbc2bcd8fdc400fcc4513b53d5205c4b7e9d4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= -Date: Tue, 18 Jul 2023 10:27:37 +0200 -Subject: [PATCH 1/3] Update libgit2 to v1.7.0 - ---- - vendor/libgit2 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/rugged/rugged_allocator.c b/ext/rugged/rugged_allocator.c -index 30ee537..0059af6 100644 ---- a/ext/rugged/rugged_allocator.c -+++ b/ext/rugged/rugged_allocator.c -@@ -13,58 +13,11 @@ static void *rugged_gmalloc(size_t n, const char *file, int line) - return xmalloc(n); - } - --static void *rugged_gcalloc(size_t nelem, size_t elsize, const char *file, int line) --{ -- return xcalloc(nelem, elsize); --} -- --static char *rugged_gstrdup(const char *str, const char *file, int line) --{ -- return ruby_strdup(str); --} -- --static char *rugged_gstrndup(const char *str, size_t n, const char *file, int line) --{ -- size_t len; -- char *newstr; -- -- len = strnlen(str, n); -- if (len < n) -- n = len; -- -- newstr = xmalloc(n+1); -- memcpy(newstr, str, n); -- newstr[n] = '\0'; -- -- return newstr; --} -- --static char *rugged_gsubstrdup(const char *str, size_t n, const char *file, int line) --{ -- char *newstr; -- -- newstr = xmalloc(n+1); -- memcpy(newstr, str, n); -- newstr[n] = '\0'; -- -- return newstr; --} -- - static void *rugged_grealloc(void *ptr, size_t size, const char *file, int line) - { - return xrealloc(ptr, size); - } - --static void *rugged_greallocarray(void *ptr, size_t nelem, size_t elsize, const char *file, int line) --{ -- return xrealloc2(ptr, nelem, elsize); --} -- --static void *rugged_gmallocarray(size_t nelem, size_t elsize, const char *file, int line) --{ -- return xmalloc2(nelem, elsize); --} -- - static void rugged_gfree(void *ptr) - { - xfree(ptr); -@@ -75,14 +28,7 @@ void rugged_set_allocator(void) - git_allocator allocator; - - allocator.gmalloc = rugged_gmalloc; -- allocator.gcalloc = rugged_gcalloc; -- allocator.gstrdup = rugged_gstrdup; -- allocator.gstrndup = rugged_gstrndup; -- allocator.gstrndup = rugged_gstrndup; -- allocator.gsubstrdup = rugged_gsubstrdup; - allocator.grealloc = rugged_grealloc; -- allocator.greallocarray = rugged_greallocarray; -- allocator.gmallocarray = rugged_gmallocarray; - allocator.gfree = rugged_gfree; - - git_libgit2_opts(GIT_OPT_SET_ALLOCATOR, &allocator); diff --git a/user/ruby3.0-rugged/libgit2-fixture-dir.patch b/user/ruby3.0-rugged/libgit2-fixture-dir.patch deleted file mode 100644 index 9d6a24d..0000000 --- a/user/ruby3.0-rugged/libgit2-fixture-dir.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/test/test_helper.rb -+++ b/test/test_helper.rb -@@ -130,7 +130,8 @@ - end - - TEST_DIR = File.dirname(File.expand_path(__FILE__)) -- LIBGIT2_FIXTURE_DIR = File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) -+ LIBGIT2_FIXTURE_DIR = ENV['LIBGIT2_FIXTURE_DIR'] \ -+ || File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) - end - - class OnlineTestCase < TestCase diff --git a/user/ruby3.0-rugged/skip-online-tests.patch b/user/ruby3.0-rugged/skip-online-tests.patch deleted file mode 100644 index c0cb6a6..0000000 --- a/user/ruby3.0-rugged/skip-online-tests.patch +++ /dev/null @@ -1,15 +0,0 @@ -Skip all online tests. - ---- a/test/test_helper.rb -+++ b/test/test_helper.rb -@@ -155,6 +156,10 @@ - end - - super -+ end -+ else -+ def before_setup -+ skip 'online tests have been disabled' - end - end - diff --git a/user/ruby3.0-rugged/skip-test_discover_false.patch b/user/ruby3.0-rugged/skip-test_discover_false.patch deleted file mode 100644 index e968c02..0000000 --- a/user/ruby3.0-rugged/skip-test_discover_false.patch +++ /dev/null @@ -1,27 +0,0 @@ -Skip these two tests: - - 1) Failure: -RepositoryDiscoverTest#test_discover_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:426]: -Rugged::RepositoryError expected but nothing was raised. - - 2) Failure: -RepositoryDiscoverTest#test_discover_nested_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:432]: -Rugged::RepositoryError expected but nothing was raised. - ---- a/test/repo_test.rb -+++ b/test/repo_test.rb -@@ -423,12 +423,14 @@ - end - - def test_discover_false -+ skip 'I have no idea why this test does not pass :(' - assert_raises Rugged::RepositoryError do - Rugged::Repository.discover(@tmpdir) - end - end - - def test_discover_nested_false -+ skip 'I have no idea why this test does not pass :(' - assert_raises Rugged::RepositoryError do - Rugged::Repository.discover(File.join(@tmpdir, 'foo')) - end diff --git a/user/ruby3.0-rugged/skip-test_read_global_config_file.patch b/user/ruby3.0-rugged/skip-test_read_global_config_file.patch deleted file mode 100644 index d3a3310..0000000 --- a/user/ruby3.0-rugged/skip-test_read_global_config_file.patch +++ /dev/null @@ -1,13 +0,0 @@ -It seems that this test fails when user.name is NOT set in ~/.gitconfig -on the build system. - ---- a/test/config_test.rb -+++ b/test/config_test.rb -@@ -17,6 +17,7 @@ - end - - def test_read_global_config_file -+ skip 'This test is flawed, it runs on real FS, i.e. it is not isolated' - config = Rugged::Config.global - refute_nil config['user.name'] - assert_nil config['core.bare'] From 3441d234c000cd874ee4460dfe0eea2f3be612ea Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:31:03 -0500 Subject: [PATCH 122/738] user/ruby3.0-test-unit: remove for ruby3.2 --- user/ruby3.0-test-unit/APKBUILD | 56 ---------------------------- user/ruby3.0-test-unit/gemspec.patch | 15 -------- 2 files changed, 71 deletions(-) delete mode 100644 user/ruby3.0-test-unit/APKBUILD delete mode 100644 user/ruby3.0-test-unit/gemspec.patch diff --git a/user/ruby3.0-test-unit/APKBUILD b/user/ruby3.0-test-unit/APKBUILD deleted file mode 100644 index 265647a..0000000 --- a/user/ruby3.0-test-unit/APKBUILD +++ /dev/null @@ -1,56 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka - -pkgname=ruby3.0-test-unit -_gemname=test-unit -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=3.3.8 -pkgrel=1 -pkgdesc="An xUnit family unit testing framework for Ruby" -url="https://test-unit.github.io" -arch="noarch" -license="BSD-2-Clause AND Python-2.0 AND Ruby" -depends="ruby3.0 ruby3.0-power_assert" -makedepends="ruby3.0-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/test-unit/test-unit/archive/$pkgver/$_gemname-$pkgver.tar.gz - gemspec.patch - " -builddir="$srcdir/$_gemname-$pkgver" - -build() { - gem build $_gemname.gemspec -} - -check() { - ruby test/run-test.rb -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -91df9e76f49998239e72428f9373403f53773c69bd033dcaed5f6fddd40a014e5c70b2cee28f430089da19b73b96d8fe4687e88d807387ace41cf21c0ccc5a56 test-unit-3.3.8.tar.gz -97429f9cb86f7bc989c03531466f1443171ac3835a4738601fe4d52b81a408e1504a26c1ed7d84ae3e07b263600d12f89298af27626219df1d7fd0612b26e466 gemspec.patch -" diff --git a/user/ruby3.0-test-unit/gemspec.patch b/user/ruby3.0-test-unit/gemspec.patch deleted file mode 100644 index 263c7c6..0000000 --- a/user/ruby3.0-test-unit/gemspec.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/test-unit.gemspec -+++ b/test-unit.gemspec -@@ -24,11 +24,7 @@ - description = clean_white_space.call(entries[entries.index("Description") + 1]) - spec.summary, spec.description, = description.split(/\n\n+/, 3) - spec.licenses = ["Ruby", "BSDL", "PSFL"] # lib/test/unit/diff.rb is PSFL -- spec.files = ["README.md", "Rakefile"] -- spec.files += ["COPYING", "BSDL", "PSFL"] -- spec.files += Dir.glob("{lib,sample}/**/*.rb") -- spec.files += Dir.glob("doc/text/**/*.*") -- spec.test_files += Dir.glob("test/**/*") -+ spec.files += Dir.glob("lib/**/*.rb") - - spec.metadata = { - "source_code_uri" => "https://github.com/test-unit/test-unit" From 89806ba46ca4ecf2bf9d572cd8ff00ef53d8cccf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:31:20 -0500 Subject: [PATCH 123/738] user/ruby3.0-webrick: remove for ruby3.2 --- user/ruby3.0-webrick/APKBUILD | 61 ------------------------------ user/ruby3.0-webrick/gemspec.patch | 15 -------- 2 files changed, 76 deletions(-) delete mode 100644 user/ruby3.0-webrick/APKBUILD delete mode 100644 user/ruby3.0-webrick/gemspec.patch diff --git a/user/ruby3.0-webrick/APKBUILD b/user/ruby3.0-webrick/APKBUILD deleted file mode 100644 index b327a3f..0000000 --- a/user/ruby3.0-webrick/APKBUILD +++ /dev/null @@ -1,61 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: omni -# Contributor: Jakub Jirutka - -pkgname=ruby3.0-webrick -_gemname=webrick -pkgver=1.7.0 -pkgrel=1 -pkgdesc="HTTP server toolkit for Ruby" -url="https://github.com/ruby/webrick" -arch="noarch" -license="BSD-2-Clause" -depends="ruby3.0" -checkdepends="ruby3.0-rake ruby3.0-test-unit" -makedepends="ruby3.0-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/ruby/webrick/archive/v$pkgver/ruby-webrick-$pkgver.tar.gz - gemspec.patch - " -builddir="$srcdir/$_gemname-$pkgver" - -prepare() { - default_prepare - sed -i '/require .bundler/d' Rakefile -} - -build() { - gem build $_gemname.gemspec -} - -check() { - rake test -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -785e8c6af6e2f8ac497bab6d0ad0e9383fa4c4ac8dee6ceee38e20c5e9b631b805ec3c8f5438ebea651ee4113698de1a370ae506927bdc04e512ea6cac433cd1 ruby-webrick-1.7.0.tar.gz -ddfd7ec0b7b4c7b2dea9d3ed45f8a8353bbbb7c61f5c11a9c52116402fcba8626a446dcf18b9fee1ac9a267ccc3b534a1dbd113d02959e612f034b15b47a786e gemspec.patch -" diff --git a/user/ruby3.0-webrick/gemspec.patch b/user/ruby3.0-webrick/gemspec.patch deleted file mode 100644 index a21a0c5..0000000 --- a/user/ruby3.0-webrick/gemspec.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/webrick.gemspec -+++ b/webrick.gemspec -@@ -14,12 +14,6 @@ - - s.require_path = %w{lib} - s.files = [ -- "Gemfile", -- "LICENSE.txt", -- "README.md", -- "Rakefile", -- "bin/console", -- "bin/setup", - "lib/webrick.rb", - "lib/webrick/accesslog.rb", - "lib/webrick/cgi.rb", From 36da7aa7596eb0fcfc730ee84c3f85758e509f42 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:32:11 -0500 Subject: [PATCH 124/738] user/ruby3.2-power_assert: new aport --- user/ruby3.2-power_assert/APKBUILD | 62 +++++++++++++++++++++++++ user/ruby3.2-power_assert/gemspec.patch | 9 ++++ 2 files changed, 71 insertions(+) create mode 100644 user/ruby3.2-power_assert/APKBUILD create mode 100644 user/ruby3.2-power_assert/gemspec.patch diff --git a/user/ruby3.2-power_assert/APKBUILD b/user/ruby3.2-power_assert/APKBUILD new file mode 100644 index 0000000..24d62b2 --- /dev/null +++ b/user/ruby3.2-power_assert/APKBUILD @@ -0,0 +1,62 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-power_assert +_gemname=power_assert +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=2.0.3 +pkgrel=0 +pkgdesc="Debug tool for Ruby that displays intermediate results of a method chain" +url="https://github.com/ruby/power_assert" +arch="noarch" +license="BSD-2-Clause AND Ruby" +depends="ruby3.2" +checkdepends="ruby3.2-pry ruby3.2-rake ruby3.2-test-unit" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/ruby/power_assert/archive/v$pkgver/$_gemname-$pkgver.tar.gz + gemspec.patch + " +builddir="$srcdir/$_gemname-$pkgver" +# Avoid circular dependency with ruby-test-unit. +options="!check" + +prepare() { + default_prepare + sed -i '/require .bundler/d' Rakefile +} + +build() { + gem build $_gemname.gemspec +} + +check() { + rake test +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +f5658d18b3b78e7757ddfc1ccdabc011076c009a7343eaad2748ca7aeb4d112bf19c70621cb938e7dcf1582c8bb7c5512017885ea51503b3ed274980b7d7c0b1 power_assert-2.0.3.tar.gz +eb4321b8ce33476e21f0cd6da92f1f2be93e0892f5e6043d6d5f5578160f1793993b10645c0b06b3b2df3e8190a10c83e5325c367001e222d98b290222c2edfe gemspec.patch +" diff --git a/user/ruby3.2-power_assert/gemspec.patch b/user/ruby3.2-power_assert/gemspec.patch new file mode 100644 index 0000000..ace46ba --- /dev/null +++ b/user/ruby3.2-power_assert/gemspec.patch @@ -0,0 +1,9 @@ +--- a/power_assert.gemspec ++++ b/power_assert.gemspec +@@ -15,5 +15 @@ +- s.files = `git ls-files -z`.split("\x0").reject do |f| +- f.match(%r{\A(?:test|spec|features|benchmark|bin)/}) +- end +- s.bindir = 'exe' +- s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } ++ s.files = Dir['lib/**/*.rb'] From 304a57c1c9684dc51b75964447d0b4938b598293 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:32:42 -0500 Subject: [PATCH 125/738] user/ruby3.2-rugged: new aport --- user/ruby3.2-rugged/APKBUILD | 75 ++++++++++++++++ .../fix-extconf-version-check.patch | 13 +++ user/ruby3.2-rugged/libgit2-1.7.patch | 90 +++++++++++++++++++ user/ruby3.2-rugged/libgit2-fixture-dir.patch | 12 +++ user/ruby3.2-rugged/skip-online-tests.patch | 15 ++++ .../skip-test_discover_false.patch | 27 ++++++ .../skip-test_read_global_config_file.patch | 13 +++ 7 files changed, 245 insertions(+) create mode 100644 user/ruby3.2-rugged/APKBUILD create mode 100644 user/ruby3.2-rugged/fix-extconf-version-check.patch create mode 100644 user/ruby3.2-rugged/libgit2-1.7.patch create mode 100644 user/ruby3.2-rugged/libgit2-fixture-dir.patch create mode 100644 user/ruby3.2-rugged/skip-online-tests.patch create mode 100644 user/ruby3.2-rugged/skip-test_discover_false.patch create mode 100644 user/ruby3.2-rugged/skip-test_read_global_config_file.patch diff --git a/user/ruby3.2-rugged/APKBUILD b/user/ruby3.2-rugged/APKBUILD new file mode 100644 index 0000000..42f7818 --- /dev/null +++ b/user/ruby3.2-rugged/APKBUILD @@ -0,0 +1,75 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-rugged +_gemname=rugged +pkgver=1.6.3 +pkgrel=1 +pkgdesc="Ruby bindings to libgit2" +url="https://github.com/libgit2/rugged" +arch="all" +license="MIT" +checkdepends=" + git + libgit2-tests + ruby3.2-minitest + ruby3.2-rake + ruby3.2-rake-compiler + " +makedepends=" + libgit2-dev>=${pkgver%.*} + ruby3.2 + ruby3.2-dev + " +source="$_gemname-$pkgver.tar.gz::https://github.com/libgit2/$_gemname/archive/v$pkgver.tar.gz + fix-extconf-version-check.patch + libgit2-fixture-dir.patch + libgit2-1.7.patch + skip-test_discover_false.patch + skip-test_read_global_config_file.patch + skip-online-tests.patch + " +builddir="$srcdir/$_gemname-$pkgver" +# Rugged::ConfigError: repository path '/tmp/' is not owned by current user +# requires tmp persmissions on host +options="!check" + +build() { + gem build $_gemname.gemspec + + RUGGED_USE_SYSTEM_LIBRARIES=1 gem install --local \ + --install-dir dist \ + --ignore-dependencies \ + --no-document \ + --verbose \ + $_gemname + + # Needed for tests. + cp -l dist/extensions/*/*/$_gemname-*/$_gemname/*.so lib/$_gemname/ +} + +check() { + rake test LIBGIT2_FIXTURE_DIR="/usr/src/libgit2/tests/resources" +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + cd "$builddir"/dist + + mkdir -p "$gemdir" + cp -r extensions gems specifications "$gemdir"/ + + # Remove unnecessary and duplicated files. + rm -f "$gemdir"/extensions/*/*/$_gemname-*/mkmf.log + cd "$gemdir"/gems/$_gemname-$pkgver + rm -rf ext/ lib/$_gemname/*.so LICENSE* README* +} + +sha512sums=" +4d54b5df04382628aff7e1abbf5fbd9730564c9bcb4e17da34ac59578b306db567b15151629a10c4a6d8174a31cd8be03c27ff0d1514cb19de237e773f4b64ce rugged-1.6.3.tar.gz +0e55aff667175496e9df1920c6d49042077196aa992a729323628224e7930a6f976bcbfae70d2af733a043c173e8cd5f571606f0b898b008472b40fcefe6b425 fix-extconf-version-check.patch +0c749aeb8d6a29aed51737bab09c7b0a6669ac691461758c856ede5d8510ad6edfa284cddd1b54982bf614a45ba817b70e838e071889a9b05e1b0580111ec826 libgit2-fixture-dir.patch +bcf7b554390fb2b1ef9043f8c934ae51a299f223ec1d7826dcb8eed078961cd084c05148c84142d60cc0a3213653bd416af1fbb09bfa5b26c9ce87fca79f6a18 libgit2-1.7.patch +33464eeefc7669fe3bf5f47c4016cacdcba4f7455ed22b441383b49721870072b5095dbb68832cdb933a7659a415476db64b579a98c888b83900d092bb8b54be skip-test_discover_false.patch +b9e028f18830e447773e895046eb03489e94bb5a76fede51f93545ed67f7249ed8f37ed4bb832eb68a2db281ff3e2b84dab8b72bb21eea4b835b0f1ce23943c3 skip-test_read_global_config_file.patch +5f0ad88eb7ac8c69605c43712e046efd47b727f48e98ee4047be850da4fea48c11fc2a383c791810a1bc81c08ca00428d4906c1af02a0d0da6e1ffbd4723b8f3 skip-online-tests.patch +" diff --git a/user/ruby3.2-rugged/fix-extconf-version-check.patch b/user/ruby3.2-rugged/fix-extconf-version-check.patch new file mode 100644 index 0000000..fc22612 --- /dev/null +++ b/user/ruby3.2-rugged/fix-extconf-version-check.patch @@ -0,0 +1,13 @@ +diff --git a/ext/rugged/extconf.rb b/ext/rugged/extconf.rb +index 7dbd2b3..92251e3 100644 +--- a/ext/rugged/extconf.rb ++++ b/ext/rugged/extconf.rb +@@ -70,7 +70,7 @@ if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES']) + + major = minor = nil + +- File.readlines(File.join(LIBGIT2_DIR, "include", "git2", "version.h")).each do |line| ++ File.readlines(File.join("/usr", "include", "git2", "version.h")).each do |line| + if !major && (matches = line.match(/^#define LIBGIT2_VER_MAJOR\s+([0-9]+)$/)) + major = matches[1] + next diff --git a/user/ruby3.2-rugged/libgit2-1.7.patch b/user/ruby3.2-rugged/libgit2-1.7.patch new file mode 100644 index 0000000..4fe0884 --- /dev/null +++ b/user/ruby3.2-rugged/libgit2-1.7.patch @@ -0,0 +1,90 @@ +Patch-Source: https://github.com/libgit2/rugged/pull/964 +safe as we apply the libgit2 fix to libgit. +-- +From 508fbc2bcd8fdc400fcc4513b53d5205c4b7e9d4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= +Date: Tue, 18 Jul 2023 10:27:37 +0200 +Subject: [PATCH 1/3] Update libgit2 to v1.7.0 + +--- + vendor/libgit2 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/rugged/rugged_allocator.c b/ext/rugged/rugged_allocator.c +index 30ee537..0059af6 100644 +--- a/ext/rugged/rugged_allocator.c ++++ b/ext/rugged/rugged_allocator.c +@@ -13,58 +13,11 @@ static void *rugged_gmalloc(size_t n, const char *file, int line) + return xmalloc(n); + } + +-static void *rugged_gcalloc(size_t nelem, size_t elsize, const char *file, int line) +-{ +- return xcalloc(nelem, elsize); +-} +- +-static char *rugged_gstrdup(const char *str, const char *file, int line) +-{ +- return ruby_strdup(str); +-} +- +-static char *rugged_gstrndup(const char *str, size_t n, const char *file, int line) +-{ +- size_t len; +- char *newstr; +- +- len = strnlen(str, n); +- if (len < n) +- n = len; +- +- newstr = xmalloc(n+1); +- memcpy(newstr, str, n); +- newstr[n] = '\0'; +- +- return newstr; +-} +- +-static char *rugged_gsubstrdup(const char *str, size_t n, const char *file, int line) +-{ +- char *newstr; +- +- newstr = xmalloc(n+1); +- memcpy(newstr, str, n); +- newstr[n] = '\0'; +- +- return newstr; +-} +- + static void *rugged_grealloc(void *ptr, size_t size, const char *file, int line) + { + return xrealloc(ptr, size); + } + +-static void *rugged_greallocarray(void *ptr, size_t nelem, size_t elsize, const char *file, int line) +-{ +- return xrealloc2(ptr, nelem, elsize); +-} +- +-static void *rugged_gmallocarray(size_t nelem, size_t elsize, const char *file, int line) +-{ +- return xmalloc2(nelem, elsize); +-} +- + static void rugged_gfree(void *ptr) + { + xfree(ptr); +@@ -75,14 +28,7 @@ void rugged_set_allocator(void) + git_allocator allocator; + + allocator.gmalloc = rugged_gmalloc; +- allocator.gcalloc = rugged_gcalloc; +- allocator.gstrdup = rugged_gstrdup; +- allocator.gstrndup = rugged_gstrndup; +- allocator.gstrndup = rugged_gstrndup; +- allocator.gsubstrdup = rugged_gsubstrdup; + allocator.grealloc = rugged_grealloc; +- allocator.greallocarray = rugged_greallocarray; +- allocator.gmallocarray = rugged_gmallocarray; + allocator.gfree = rugged_gfree; + + git_libgit2_opts(GIT_OPT_SET_ALLOCATOR, &allocator); diff --git a/user/ruby3.2-rugged/libgit2-fixture-dir.patch b/user/ruby3.2-rugged/libgit2-fixture-dir.patch new file mode 100644 index 0000000..9d6a24d --- /dev/null +++ b/user/ruby3.2-rugged/libgit2-fixture-dir.patch @@ -0,0 +1,12 @@ +--- a/test/test_helper.rb ++++ b/test/test_helper.rb +@@ -130,7 +130,8 @@ + end + + TEST_DIR = File.dirname(File.expand_path(__FILE__)) +- LIBGIT2_FIXTURE_DIR = File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) ++ LIBGIT2_FIXTURE_DIR = ENV['LIBGIT2_FIXTURE_DIR'] \ ++ || File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) + end + + class OnlineTestCase < TestCase diff --git a/user/ruby3.2-rugged/skip-online-tests.patch b/user/ruby3.2-rugged/skip-online-tests.patch new file mode 100644 index 0000000..c0cb6a6 --- /dev/null +++ b/user/ruby3.2-rugged/skip-online-tests.patch @@ -0,0 +1,15 @@ +Skip all online tests. + +--- a/test/test_helper.rb ++++ b/test/test_helper.rb +@@ -155,6 +156,10 @@ + end + + super ++ end ++ else ++ def before_setup ++ skip 'online tests have been disabled' + end + end + diff --git a/user/ruby3.2-rugged/skip-test_discover_false.patch b/user/ruby3.2-rugged/skip-test_discover_false.patch new file mode 100644 index 0000000..e968c02 --- /dev/null +++ b/user/ruby3.2-rugged/skip-test_discover_false.patch @@ -0,0 +1,27 @@ +Skip these two tests: + + 1) Failure: +RepositoryDiscoverTest#test_discover_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:426]: +Rugged::RepositoryError expected but nothing was raised. + + 2) Failure: +RepositoryDiscoverTest#test_discover_nested_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:432]: +Rugged::RepositoryError expected but nothing was raised. + +--- a/test/repo_test.rb ++++ b/test/repo_test.rb +@@ -423,12 +423,14 @@ + end + + def test_discover_false ++ skip 'I have no idea why this test does not pass :(' + assert_raises Rugged::RepositoryError do + Rugged::Repository.discover(@tmpdir) + end + end + + def test_discover_nested_false ++ skip 'I have no idea why this test does not pass :(' + assert_raises Rugged::RepositoryError do + Rugged::Repository.discover(File.join(@tmpdir, 'foo')) + end diff --git a/user/ruby3.2-rugged/skip-test_read_global_config_file.patch b/user/ruby3.2-rugged/skip-test_read_global_config_file.patch new file mode 100644 index 0000000..d3a3310 --- /dev/null +++ b/user/ruby3.2-rugged/skip-test_read_global_config_file.patch @@ -0,0 +1,13 @@ +It seems that this test fails when user.name is NOT set in ~/.gitconfig +on the build system. + +--- a/test/config_test.rb ++++ b/test/config_test.rb +@@ -17,6 +17,7 @@ + end + + def test_read_global_config_file ++ skip 'This test is flawed, it runs on real FS, i.e. it is not isolated' + config = Rugged::Config.global + refute_nil config['user.name'] + assert_nil config['core.bare'] From 325c159bf0881a1aa334a2ba540da37dac34e987 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:33:20 -0500 Subject: [PATCH 126/738] user/ruby3.2-webrick: new aport --- user/ruby3.2-webrick/APKBUILD | 58 ++++++++++++++++++++++++++++++ user/ruby3.2-webrick/gemspec.patch | 13 +++++++ 2 files changed, 71 insertions(+) create mode 100644 user/ruby3.2-webrick/APKBUILD create mode 100644 user/ruby3.2-webrick/gemspec.patch diff --git a/user/ruby3.2-webrick/APKBUILD b/user/ruby3.2-webrick/APKBUILD new file mode 100644 index 0000000..a0c0b1e --- /dev/null +++ b/user/ruby3.2-webrick/APKBUILD @@ -0,0 +1,58 @@ +# Contributor: omni +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-webrick +_gemname=webrick +pkgver=1.8.1 +pkgrel=0 +pkgdesc="HTTP server toolkit for Ruby" +url="https://github.com/ruby/webrick" +arch="noarch" +license="BSD-2-Clause" +depends="ruby3.2" +checkdepends="ruby3.2-rake ruby3.2-test-unit" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/ruby/webrick/archive/v$pkgver/ruby-webrick-$pkgver.tar.gz + gemspec.patch + " +builddir="$srcdir/$_gemname-$pkgver" + +prepare() { + default_prepare + sed -i '/require .bundler/d' Rakefile +} + +build() { + gem build $_gemname.gemspec +} + +check() { + rake test +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +21cb396887025f85cfe04868e7fa7ef039809ca42a3acadfe1decb4dcd02eeeb3c9163e970324b56a9e0eb6202d971370af56e200c69de2d224c1941f866400c ruby-webrick-1.8.1.tar.gz +5c657602228ba5aef4c272b75bc5d7c42855876811a49a7736bfa72b00d65a2bb550ea76ffcc2bc1e2ef9575796f5981eadd97cc92b1f3bf06c0105b8d166222 gemspec.patch +" diff --git a/user/ruby3.2-webrick/gemspec.patch b/user/ruby3.2-webrick/gemspec.patch new file mode 100644 index 0000000..db18f02 --- /dev/null +++ b/user/ruby3.2-webrick/gemspec.patch @@ -0,0 +1,13 @@ +--- a/webrick.gemspec ++++ b/webrick.gemspec +@@ -14,10 +14,6 @@ + + s.require_path = %w{lib} + s.files = [ +- "Gemfile", +- "LICENSE.txt", +- "README.md", +- "Rakefile", + "lib/webrick.rb", + "lib/webrick/accesslog.rb", + "lib/webrick/cgi.rb", From b107c065f344da878e7fb4e6fe96fa1daa2927f5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:33:50 -0500 Subject: [PATCH 127/738] user/ruby3.2-test-unit: new aport --- user/ruby3.2-test-unit/APKBUILD | 54 ++++++++++++++++++++++++++++ user/ruby3.2-test-unit/gemspec.patch | 8 +++++ 2 files changed, 62 insertions(+) create mode 100644 user/ruby3.2-test-unit/APKBUILD create mode 100644 user/ruby3.2-test-unit/gemspec.patch diff --git a/user/ruby3.2-test-unit/APKBUILD b/user/ruby3.2-test-unit/APKBUILD new file mode 100644 index 0000000..6e30887 --- /dev/null +++ b/user/ruby3.2-test-unit/APKBUILD @@ -0,0 +1,54 @@ +# Contributor: Jakub Jirutka +# Maintainer: Jakub Jirutka +pkgname=ruby3.2-test-unit +_gemname=test-unit +# Keep version in sync with "Bundled gems" (https://stdgems.org) for the +# packaged Ruby version. +pkgver=3.5.7 +pkgrel=0 +pkgdesc="An xUnit family unit testing framework for Ruby" +url="https://test-unit.github.io" +arch="noarch" +license="BSD-2-Clause AND Python-2.0 AND Ruby" +depends="ruby3.2 ruby3.2-power_assert" +makedepends="ruby3.2-rdoc" +subpackages="$pkgname-doc" +source="https://github.com/test-unit/test-unit/archive/$pkgver/$_gemname-$pkgver.tar.gz + gemspec.patch + " +builddir="$srcdir/$_gemname-$pkgver" + +build() { + gem build $_gemname.gemspec +} + +check() { + ruby test/run-test.rb +} + +package() { + local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" + + gem install \ + --local \ + --install-dir "$gemdir" \ + --ignore-dependencies \ + --document ri \ + --verbose \ + $_gemname + + # Remove unnessecary files + cd "$gemdir" + rm -rf build_info cache extensions plugins +} + +doc() { + pkgdesc="$pkgdesc (ri docs)" + + amove "$(ruby -e 'puts Gem.default_dir')"/doc +} + +sha512sums=" +af678a89590c9305eeac3a4e5c7e99354df5b49157de573ee3ff312dad9f12dbcaef3dfe7ffc256194e39e0438625acdd9ab3e9686d7e2c58b2cf225f7f1f74c test-unit-3.5.7.tar.gz +22f54fcf272856a9455d5a7276896ec329377b106ab47e3d376158eee72cf570f4487dd87606d730d061e7b06e5d7a0ff561cd8d279a64d8af0ac04e0f2dba92 gemspec.patch +" diff --git a/user/ruby3.2-test-unit/gemspec.patch b/user/ruby3.2-test-unit/gemspec.patch new file mode 100644 index 0000000..f2beca1 --- /dev/null +++ b/user/ruby3.2-test-unit/gemspec.patch @@ -0,0 +1,8 @@ +--- a/test-unit.gemspec ++++ b/test-unit.gemspec +@@ -27,4 +27 @@ +- spec.files = ["README.md", "Rakefile"] +- spec.files += ["COPYING", "BSDL", "PSFL"] +- spec.files += Dir.glob("{lib,sample}/**/*.rb") +- spec.files += Dir.glob("doc/text/**/*.*") ++ spec.files += Dir.glob("lib/**/*.rb") From 331a8e92b309638db9cfe6f4062b4f2b600b45c0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:36:06 -0500 Subject: [PATCH 128/738] user/gitlab-foss: upgrade to 16.8.0 --- user/gitlab-foss/APKBUILD | 41 ++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 4e67952..74ba6f3 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.6.4 +pkgver=16.8.0 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -17,28 +17,30 @@ depends=" cmd:dpkg-deb exiftool git>=2.42.0 - gitaly~=16.6 - gitlab-shell~=14.30 + gitaly~=16.8 + gitlab-shell~=14.33 graphicsmagick http-parser procps py-docutils python3 redis>=2.8 - ruby3.0 - ruby3.0-bigdecimal - ruby3.0-bundler - ruby3.0-fiddle - ruby3.0-io-console - ruby3.0-irb - ruby3.0-json - ruby3.0-rake - ruby3.0-rdoc - ruby3.0-webrick + ruby3.2 + ruby3.2-bigdecimal + ruby3.2-bundler + ruby3.2-fiddle + ruby3.2-io-console + ruby3.2-irb + ruby3.2-json + ruby3.2-rake + ruby3.2-rdoc + ruby3.2-webrick shared-mime-info tzdata " makedepends=" + cargo + clang-dev cmd:chrpath cmake file-dev @@ -51,13 +53,15 @@ makedepends=" libxml2-dev libxslt-dev linux-headers + llvm nodejs openssl-dev protobuf-dev re2-dev - ruby3.0-dev - ruby3.0-grpc~=1.58 - ruby3.0-rugged + ruby3.2-dev + ruby3.2-grpc~=1.58 + ruby3.2-rugged + rust yarn>=1.2.0 " pkgusers="git" @@ -83,7 +87,8 @@ _prefix="usr/lib/bundles/$_pkgname" export BUNDLE_DEPLOYMENT=true export BUNDLE_FORCE_RUBY_PLATFORM=true export BUNDLE_FROZEN=true -export BUNDLE_JOBS=${JOBS:-2} +# Should be tied to $JOBS, but rust native code fails to build +export BUNDLE_JOBS=1 prepare() { local sysgemdir=$(ruby -e 'puts Gem.default_dir') @@ -377,7 +382,7 @@ assets() { } sha512sums=" -ea6f5a6d00cc298052500617c962ddb235b4f5bc563af447e23d6af32f9e447970c4d3be0506b354802996508e8572df413a2350a603b8093f3c84f056005f55 gitlab-foss-v16.6.4.tar.gz +90711b858345f45339e5c4e0d3a365736b053233342eadb77aa0237ab3ea1edde970cf65913c852e2c78e6e55462708850cca3764f8129750f83e8ae21c3feef gitlab-foss-v16.8.0.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From 2fb5da77f9ca7cefe29e202e4693eab228d6de30 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:36:23 -0500 Subject: [PATCH 129/738] user/gitlab-pages: upgrade to 16.8.0 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index 1f3d621..af6cc79 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.6.4 +pkgver=16.8.0 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -d8b6fad72afcf4c4861d2dd30149ef171154f6a7e5f6d46023bddcafc177795cbe8cf230ad427d38d86c76e89835968958dd2a17528ef0f2c75a5ad543db4a0d gitlab-pages-v16.6.4.tar.gz +c9a53a5dc76adcea2be2c321139f3dbc70629e6e3b88ca30da8fc1d824e394f1b17209effc22f1302474b0ddb88066325de4b04d69ae12be0220857f5f492756 gitlab-pages-v16.8.0.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 1363ab7df2e037187689fc39a4dffb045afa7cc8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:36:48 -0500 Subject: [PATCH 130/738] user/gitlab-shell: upgrade to 14.33.0 --- user/gitlab-shell/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD index 90bf4de..47240c9 100644 --- a/user/gitlab-shell/APKBUILD +++ b/user/gitlab-shell/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-shell -pkgver=14.30.1 +pkgver=14.33.0 pkgrel=0 pkgdesc="GitLab Shell handles git SSH sessions for GitLab" url="https://gitlab.com/gitlab-org/gitlab-shell" @@ -59,7 +59,7 @@ package() { } sha512sums=" -5cd602ffc98fa2f6c5efbc9541bb6ff234253e299b690aa43feaefab2518b63fd0f69a8c3d79a4f04624c2a6daceaefc300be90ef2a29ff0b8a2392d0ae710cf gitlab-shell-v14.30.1.tar.gz +4b6a5aa8e47b3ce90abe77e1d5f89a7a4d7fa20d9984d3bf45e3a1d140529ea6e2ee96f6e24db88a4c52315d76393379eeb7d7f24d42c90a16ba17d191b39bd6 gitlab-shell-v14.33.0.tar.gz 8cf13bf472e22b1c429bba5df98afb931c80b043ec83c8366d59f15a1e9b21daf09078f134e7aa622c87b32c774d1d5cf129878d5035102c06d0b12ead33f804 config.patch 499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig From ffa0b84df5ae9d20ff3b4a78847e8e7771b288ba Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 19 Jan 2024 12:42:02 -0500 Subject: [PATCH 131/738] user/gitaly: upgrade to 16.8.0 --- user/gitaly/APKBUILD | 6 +-- user/gitaly/config.patch | 102 +++++++++++++++++++-------------------- 2 files changed, 52 insertions(+), 56 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 14d13d0..bfd1f0c 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.6.4 +pkgver=16.8.0 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -e83ad1470000700021495b61e991156bee511d7f94e3e07ec325f1cf5ce000cd8b5e3f8af574ced6499e9487ace43617fcb76dad61c871327bb693d364508d4a gitaly-v16.6.4.tar.gz -55230e587839df8fc8c6daeee1e5a5fbd91d6d28966d9977d59e6fb3d75e269c9d4d119f3a06217a4c6c55733a50ec9affcdb132e77e1694df839269dcd292aa config.patch +5867b328d0086e4a3135e8d66b778d1c7ee1a0abfaed1bbeecaa1876c7fcc5ec369baa6b0303522f3cf8c97c809a8263256e56844c9fae8583331efc2498b104 gitaly-v16.8.0.tar.gz +7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " diff --git a/user/gitaly/config.patch b/user/gitaly/config.patch index 5d326ba..9df7db0 100644 --- a/user/gitaly/config.patch +++ b/user/gitaly/config.patch @@ -1,95 +1,91 @@ diff --git a/config.toml.example.orig b/config.toml.example -index 3d454fb..52457df 100644 +index 82b8502..9982087 100644 --- a/config.toml.example.orig +++ b/config.toml.example -@@ -2,15 +2,15 @@ - # Documentation lives at https://docs.gitlab.com/ee/administration/gitaly/ and - # https://docs.gitlab.com/ee//administration/gitaly/reference +@@ -2,19 +2,24 @@ + # For Gitaly documentation, see https://docs.gitlab.com/ee/administration/gitaly/. + # A path which Gitaly should open a Unix socket. -socket_path = "/home/git/gitlab/tmp/sockets/private/gitaly.socket" +socket_path = "/run/gitlab/gitaly.socket" - # The directory where Gitaly's executables are stored + # Directory containing Gitaly executables. -bin_dir = "/home/git/gitaly/_build/bin" +bin_dir = "/usr/bin" --# # Optional: The directory where Gitaly can create all files required to --# # properly operate at runtime. If not set, Gitaly will create a directory in --# # the global temporary directory. This directory must exist. + # # Optional. The directory where Gitaly can create all files required to + # # properly operate at runtime. If not set, Gitaly will create a directory in + # # the global temporary directory. This directory must exist. -# runtime_dir = "/home/git/gitaly/run" -+# Optional: The directory where Gitaly can create all files required to -+# properly operate at runtime. If not set, Gitaly will create a directory in -+# the global temporary directory. This directory must exist. +runtime_dir = "/run/gitaly" - # # Optional: listen on a TCP socket. This is insecure (no authentication) + # # Optional if socket_path is set. TCP address for Gitaly to listen on. This is insecure (unencrypted connection). # listen_addr = "localhost:9999" -@@ -22,7 +22,7 @@ bin_dir = "/home/git/gitaly/_build/bin" - # # Optional: configure where the Gitaly creates the sockets for internal connections. If unset, Gitaly will create a randomly - # # named temp directory each time it boots. - # # Non Gitaly clients should never connect to these sockets. --# internal_socket_dir = "/home/git/gitlab/tmp/sockets/private/internal" + ++# # Optional: configure where the Gitaly creates the sockets for internal connections. If unset, Gitaly will create a randomly ++# # named temp directory each time it boots. ++# # Non Gitaly clients should never connect to these sockets. +internal_socket_dir = "/run/gitaly/internal" ++ + # # Optional. TCP over TLS address for Gitaly to listen on. + # tls_listen_addr = "localhost:8888" - # # Optional: authenticate Gitaly requests using a shared secret - # [auth] -@@ -30,8 +30,8 @@ bin_dir = "/home/git/gitaly/_build/bin" - # transitioning = false # Set `transitioning` to true to temporarily allow unauthenticated while rolling out authentication. - +@@ -35,9 +40,9 @@ bin_dir = "/home/git/gitaly/_build/bin" + # # Gitaly supports TLS encryption. You must bring your own certificates because this isn’t provided automatically. # [tls] + # # Path to the certificate. -# certificate_path = '/home/git/cert.cert' --# key_path = '/home/git/key.pem' +# certificate_path = '/etc/gitlab/ssl/gitaly.crt' + # # Path to the key. +-# key_path = '/home/git/key.pem' +# key_path = '/etc/gitlab/ssl/gitaly.key' # # Git settings # [git] -@@ -44,7 +44,7 @@ bin_dir = "/home/git/gitaly/_build/bin" - - [[storage]] +@@ -58,7 +63,7 @@ bin_dir = "/home/git/gitaly/_build/bin" + # # The name of the storage name = "default" + # # The path to the storage. -path = "/home/git/repositories" +path = "/var/lib/gitlab/repositories" # # You can optionally configure more storages for this Gitaly instance to serve up # -@@ -54,15 +54,15 @@ path = "/home/git/repositories" - # - - # # You can optionally configure Gitaly to output JSON-formatted log messages to stdout --# [logging] --# # The directory where Gitaly stores extra log files +@@ -70,12 +75,12 @@ path = "/home/git/repositories" + # # Optional. Configure Gitaly to output JSON-formatted log messages to stdout. + # [logging] + # # Directory where Gitaly stores extra log files. -dir = "/home/git/gitlab/log" ++dir = "/vat/log/gitlab" + # # Log format. Either 'text' or 'json'. -# format = "json" --# # Optional: Set log level to only log entries with that severity or above --# # One of, in order: debug, info, warn, errror, fatal, panic --# # Defaults to "info" --# level = "warn" --# -+[logging] -+# The directory where Gitaly stores extra log files -+dir = "/var/log/gitlab" +format = "text" -+# Optional: Set log level to only log entries with that severity or above -+# One of, in order: debug, info, warn, errror, fatal, panic -+# Defaults to "info" + # # Optional. Set log level to only log entries with that severity or above. + # # Valid values are, in order, 'debug', 'info', 'warn', 'error', 'fatal', and 'panic'. Defaults to 'info'. +-# level = "warn" +level = "warn" -+ - # # Additionally exceptions from the Go server can be reported to Sentry + # # Additionally, exceptions from the Go server can be reported to Sentry. Sentry DSN (Data Source Name) + # # for exception monitoring. # sentry_dsn = "https://:@sentry.io/" - -@@ -71,11 +71,11 @@ dir = "/home/git/gitlab/log" - # grpc_latency_buckets = [0.001, 0.005, 0.025, 0.1, 0.5, 1.0, 10.0, 30.0, 60.0, 300.0, 1500.0] - +@@ -91,18 +96,18 @@ sentry_environment = "" + # # Custom Git hooks that are used to perform tasks based on changes performed in any repository. [hooks] + # # Directory where custom Git hooks are installed. If left unset, no custom hooks are used. -custom_hooks_dir = "/home/git/custom_hooks" +custom_hooks_dir = "/etc/gitlab/custom_hooks" + # # Gitaly must connect to the GitLab application to perform access checks when a user performs a change. [gitlab] --secret_file = "/home/git/gitlab-shell/.gitlab_shell_secret" + # # URL of the GitLab server. -url = "http+unix://%2Fhome%2Fgit%2Fgitlab%2Ftmp%2Fsockets%2Fgitlab-workhorse.socket" -+secret_file = "/etc/gitlab/gitlab_shell_secret" +url = "http+unix://%2Frun%2Fgitlab%2Fworkhorse.socket" - # Only needed if a UNIX socket is used in `url` and GitLab is configured to - # use a relative path (e.g. /gitlab). + # # 'relative_url_root' is only needed if a UNIX socket is used in 'url' and GitLab is configured to + # # use a relative path. For example, '/gitlab'. # relative_url_root = '/' + # # Path of the file containing the secret token used to authenticate with GitLab. Use either 'secret_token' or 'secret' + # # but not both. +-secret_file = "/home/git/gitlab-shell/.gitlab_shell_secret" ++secret_file = "/etc/gitlab/gitlab_shell_secret" + # # Secret token used to authenticate with GitLab. + # secret = "" + From 705157b6163720d4872bb9c07012f3d3be455680 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 21 Jan 2024 19:32:35 -0500 Subject: [PATCH 132/738] user/gitlab-foss: fix glfm_markdown libary location --- user/gitlab-foss/APKBUILD | 10 +++++++++- .../glfm_markdown_fix-library-location.diff | 13 +++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 user/gitlab-foss/glfm_markdown_fix-library-location.diff diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 74ba6f3..2eedddf 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -5,7 +5,7 @@ pkgname=gitlab-foss _pkgname=${pkgname%-foss} pkgver=16.8.0 _gittag=v$pkgver -pkgrel=0 +pkgrel=1 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" arch="x86_64 aarch64" @@ -79,6 +79,7 @@ source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss $_pkgname.logrotate bin-wrapper.in downgrade-sys-filesystem-depend.patch + glfm_markdown_fix-library-location.diff " builddir="$srcdir/gitlab-foss-$_gittag" @@ -144,6 +145,12 @@ build() { bundle install --no-cache + # Patch intalled gem glfm_markdown to look for rust library at right path + ( + cd vendor/bundle/ruby/*/gems/gitlab-glfm-markdown-*/ + patch -p1 -i "$srcdir"/glfm_markdown_fix-library-location.diff + ) + # Replace bundled CA bundle with symlink. ( cd vendor/bundle/ruby/*/gems/aws-sdk-core-*/ @@ -393,4 +400,5 @@ cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08d 57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in ab9a09fca6126b18b76e61380990dc217f915162985880e90b905b3210a1fef229af3db1f1ca180177d3cba91ab5fe33798ac685055abf0adc44a1b630f71b39 downgrade-sys-filesystem-depend.patch +95c2079a8b56d4571c3f9d54c3be380d36f64b7e48164468513778185957325a33c7693436b7e75f98f07aa767fda95d5852f957849199fd1f9bc6e6074e3ddc glfm_markdown_fix-library-location.diff " diff --git a/user/gitlab-foss/glfm_markdown_fix-library-location.diff b/user/gitlab-foss/glfm_markdown_fix-library-location.diff new file mode 100644 index 0000000..3d5bfd8 --- /dev/null +++ b/user/gitlab-foss/glfm_markdown_fix-library-location.diff @@ -0,0 +1,13 @@ +diff --git a/lib/glfm_markdown/loader.rb.orig b/lib/glfm_markdown/loader.rb +index 295d549..6718619 100644 +--- a/lib/glfm_markdown/loader.rb.orig ++++ b/lib/glfm_markdown/loader.rb +@@ -2,7 +2,7 @@ + + def load_rust_extension + ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION) +- require_relative "./#{ruby_version}/glfm_markdown" ++ require_relative "../../lib/glfm_markdown" + rescue LoadError + require 'glfm_markdown/glfm_markdown' + end From 35a22c241eda7b14a259ecae0ded06a8111c07bb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 21 Jan 2024 21:05:38 -0500 Subject: [PATCH 133/738] user/freescout: upgrade to 1.8.118 --- user/freescout/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index e3f5c14..d44f66a 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.116 +pkgver=1.8.118 pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" @@ -74,7 +74,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -cd488caacdf61b30ab15827c8ebccd6c28a2027e2979e6c4d5af1ae33aa55c94469cd297b56693e64364d875dbd363c5af71cec10ade28c00253de1d9e551c05 freescout-1.8.116.tar.gz +296589841f49507ecc8c2eb2d0d733f46beed6fe42cfcc694c96806db8a3457523c1d7fc0b1bbf991dbaf7e11e38ee3c38931d38ac387866dacb252b47c06fb9 freescout-1.8.118.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh " From cab3eb0cae3514a12eef82b92a2dc79958c1ef83 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 24 Jan 2024 09:44:32 -0500 Subject: [PATCH 134/738] user/mastodon: use ruby 3.2 --- user/mastodon/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 44e04f0..1e4f150 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -5,7 +5,7 @@ pkgname=mastodon _pkgname=$pkgname pkgver=4.2.3 _gittag=v$pkgver -pkgrel=0 +pkgrel=1 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" arch="x86_64" url="https://github.com/mastodon/mastodon" @@ -20,8 +20,8 @@ depends=" npm protobuf redis - ruby3.0 - ruby3.0-bundler + ruby3.2 + ruby3.2-bundler yarn " makedepends=" @@ -34,7 +34,7 @@ makedepends=" openssl-dev postgresql-dev protobuf-dev - ruby3.0-dev + ruby3.2-dev yaml-dev zlib-dev " From 2fa6e20f99e5dc0bb94c090e69aed896460e92ab Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 24 Jan 2024 09:45:01 -0500 Subject: [PATCH 135/738] user/mastodon: add py3-elasticsearch depend --- user/mastodon/APKBUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 1e4f150..8d3557f 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -19,6 +19,7 @@ depends=" nodejs npm protobuf + py3-elasticsearch redis ruby3.2 ruby3.2-bundler From c8c12df6b1d4913b7914fb32ea5dfe570910c640 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 24 Jan 2024 09:49:07 -0500 Subject: [PATCH 136/738] user/mastodon: upgrade to 4.2.4 --- user/mastodon/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 8d3557f..d8f493c 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -3,9 +3,9 @@ pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.3 +pkgver=4.2.4 _gittag=v$pkgver -pkgrel=1 +pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" arch="x86_64" url="https://github.com/mastodon/mastodon" @@ -193,7 +193,7 @@ assets() { } sha512sums=" -65cbd5b586e189931d7c007c227f553ebbfa30f051443a3fff334260bd66751b0b583495b4add677eb66da0332e7943d30fb23944c0ad6af1af37598c337e41f mastodon-v4.2.3.tar.gz +9c52e0998947aaf4d1ccd70ffddee769bf1efec32a33225c602591b84940d0b478698309f385bf202e3feb62df183377c18007d01888ea882adfb2583b1820dc mastodon-v4.2.4.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From 2671b47b45e28cd1e6df751a0141a152923d5715 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 25 Jan 2024 10:20:26 -0500 Subject: [PATCH 137/738] user/freescout: upgrade 1.8.119 --- user/freescout/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index d44f66a..68f7274 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.118 +pkgver=1.8.119 pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" @@ -74,7 +74,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -296589841f49507ecc8c2eb2d0d733f46beed6fe42cfcc694c96806db8a3457523c1d7fc0b1bbf991dbaf7e11e38ee3c38931d38ac387866dacb252b47c06fb9 freescout-1.8.118.tar.gz +51fe86a99bbff4f1bd4b7f8b71693b9d27a9a5f3d991ebe36e794a9bffaf286c6100cbc795f4701a60093276db0b38a7d91f91f682c4c50d758d0c61c6272e10 freescout-1.8.119.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh " From 6b5390fad8235a46aad06e2e377e24668065328e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 25 Jan 2024 19:10:24 -0500 Subject: [PATCH 138/738] user/gitlab-foss: upgrade to 16.8.1 --- user/gitlab-foss/APKBUILD | 14 +++----------- .../glfm_markdown_fix-library-location.diff | 13 ------------- 2 files changed, 3 insertions(+), 24 deletions(-) delete mode 100644 user/gitlab-foss/glfm_markdown_fix-library-location.diff diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 2eedddf..a41215a 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,9 +3,9 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.8.0 +pkgver=16.8.1 _gittag=v$pkgver -pkgrel=1 +pkgrel=0 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" arch="x86_64 aarch64" @@ -79,7 +79,6 @@ source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss $_pkgname.logrotate bin-wrapper.in downgrade-sys-filesystem-depend.patch - glfm_markdown_fix-library-location.diff " builddir="$srcdir/gitlab-foss-$_gittag" @@ -145,12 +144,6 @@ build() { bundle install --no-cache - # Patch intalled gem glfm_markdown to look for rust library at right path - ( - cd vendor/bundle/ruby/*/gems/gitlab-glfm-markdown-*/ - patch -p1 -i "$srcdir"/glfm_markdown_fix-library-location.diff - ) - # Replace bundled CA bundle with symlink. ( cd vendor/bundle/ruby/*/gems/aws-sdk-core-*/ @@ -389,7 +382,7 @@ assets() { } sha512sums=" -90711b858345f45339e5c4e0d3a365736b053233342eadb77aa0237ab3ea1edde970cf65913c852e2c78e6e55462708850cca3764f8129750f83e8ae21c3feef gitlab-foss-v16.8.0.tar.gz +9e36eec8209a64cbda254b851213a4ba97c629cbe1f8a008ead7a53e1bc308ac866e9c65a60bcad74f377155346c38b439a2282e4d74431d1642cb6d8b31ab5d gitlab-foss-v16.8.1.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd @@ -400,5 +393,4 @@ cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08d 57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in ab9a09fca6126b18b76e61380990dc217f915162985880e90b905b3210a1fef229af3db1f1ca180177d3cba91ab5fe33798ac685055abf0adc44a1b630f71b39 downgrade-sys-filesystem-depend.patch -95c2079a8b56d4571c3f9d54c3be380d36f64b7e48164468513778185957325a33c7693436b7e75f98f07aa767fda95d5852f957849199fd1f9bc6e6074e3ddc glfm_markdown_fix-library-location.diff " diff --git a/user/gitlab-foss/glfm_markdown_fix-library-location.diff b/user/gitlab-foss/glfm_markdown_fix-library-location.diff deleted file mode 100644 index 3d5bfd8..0000000 --- a/user/gitlab-foss/glfm_markdown_fix-library-location.diff +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/lib/glfm_markdown/loader.rb.orig b/lib/glfm_markdown/loader.rb -index 295d549..6718619 100644 ---- a/lib/glfm_markdown/loader.rb.orig -+++ b/lib/glfm_markdown/loader.rb -@@ -2,7 +2,7 @@ - - def load_rust_extension - ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION) -- require_relative "./#{ruby_version}/glfm_markdown" -+ require_relative "../../lib/glfm_markdown" - rescue LoadError - require 'glfm_markdown/glfm_markdown' - end From a883140e49c1273a2535150d3545fa5645b906e2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 25 Jan 2024 19:10:54 -0500 Subject: [PATCH 139/738] user/gitlab-pages: upgrade to 16.8.1 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index af6cc79..50f5d50 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.8.0 +pkgver=16.8.1 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -c9a53a5dc76adcea2be2c321139f3dbc70629e6e3b88ca30da8fc1d824e394f1b17209effc22f1302474b0ddb88066325de4b04d69ae12be0220857f5f492756 gitlab-pages-v16.8.0.tar.gz +0e36fdf24e1ee8d8f33eb52b3428f6f5bea2accf4ae100723f1ca395ea1d1eda7352e221f76039ddda9f54e8a1c491f57c96541933fcfa975b0ba8a76705bf85 gitlab-pages-v16.8.1.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 5066be5df6d8fd648509334b907b1bb3504972a1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 25 Jan 2024 19:11:13 -0500 Subject: [PATCH 140/738] user/gitaly: upgrade to 16.8.1 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index bfd1f0c..48130c3 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.8.0 +pkgver=16.8.1 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -5867b328d0086e4a3135e8d66b778d1c7ee1a0abfaed1bbeecaa1876c7fcc5ec369baa6b0303522f3cf8c97c809a8263256e56844c9fae8583331efc2498b104 gitaly-v16.8.0.tar.gz +b1da4605c85d1a816608ae51387cc1617f409016001c9eee431e7a00f03bd711fc13b226c4991a76adc221ebfc3aec11a29788abd67eb57e906a8c404cb2f806 gitaly-v16.8.1.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 201ef477340905510ca37d621640ef5d25548184 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 28 Jan 2024 00:19:58 -0500 Subject: [PATCH 141/738] user/dotnet8-stage0: now on aports --- user/dotnet8-stage0/APKBUILD | 464 ------------------ user/dotnet8-stage0/README.md | 143 ------ .../build_fix-ga-versions.patch | 32 -- ...nstaller_aspire-manifest-version-fix.patch | 26 - ...crossgen2rid-using-buildarchitecture.patch | 13 - ...-thread-coop-undefine-fortify-source.patch | 25 - ...682-specify-notext-on-linux-musl-x86.patch | 24 - ...ime_90251-rename-mono-cmake-host-var.patch | 80 --- ...andle-enum-return-type-when-inlining.patch | 30 -- .../runtime_more-clang-16-suppression.patch | 13 - .../runtime_remove-usage-of-off64-t.patch | 26 - 11 files changed, 876 deletions(-) delete mode 100644 user/dotnet8-stage0/APKBUILD delete mode 100644 user/dotnet8-stage0/README.md delete mode 100644 user/dotnet8-stage0/build_fix-ga-versions.patch delete mode 100644 user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch delete mode 100644 user/dotnet8-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch delete mode 100644 user/dotnet8-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch delete mode 100644 user/dotnet8-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch delete mode 100644 user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch delete mode 100644 user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch delete mode 100644 user/dotnet8-stage0/runtime_more-clang-16-suppression.patch delete mode 100644 user/dotnet8-stage0/runtime_remove-usage-of-off64-t.patch diff --git a/user/dotnet8-stage0/APKBUILD b/user/dotnet8-stage0/APKBUILD deleted file mode 100644 index c82e702..0000000 --- a/user/dotnet8-stage0/APKBUILD +++ /dev/null @@ -1,464 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=dotnet8-stage0 -pkgver=8.0.100 -pkgrel=0 - -[ "$CBUILD" != "$CHOST" ] && _cross="-$CARCH" || _cross="" - -# Tag of tarball generator. -_gittag=v8.0.0 - -# Versions of prebuilt artifacts and bootstrap tar -_artifactsver="8.0.100-rtm.23551.1.centos.8-x64" -_bootstrapver="8.0.100" -_bootstraprel=0 -_installerver=8.0.100 - -# Patches to be used. String before '_' refers to repo to patch -# Look for patch notes within each patch for what they fix / where they come from -# build_* patches applies directly to $builddir -_patches=" - build_fix-ga-versions.patch - installer_aspire-manifest-version-fix.patch - installer_set-crossgen2rid-using-buildarchitecture.patch - runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_83682-specify-notext-on-linux-musl-x86.patch - runtime_90251-rename-mono-cmake-host-var.patch - runtime_more-clang-16-suppression.patch - runtime_remove-usage-of-off64-t.patch - " - -_pkgver_macro=${pkgver%.*} -_pkgver_prior=1 -_pkgver_name="${_pkgver_macro//[.0]}" -pkgdesc="The .NET Core stage0 bits for dotnet build" -# x86: blocked by https://github.com/dotnet/runtime/issues/83509 -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: port WIP https://github.com/dotnet/runtime/issues/84834 -# s390x | ppc64le: mono-based runtime still has issues on musl -arch="all !x86 !armhf !riscv64 !s390x !ppc64le" -_giturl=https://github.com/dotnet/dotnet -url=https://dotnet.microsoft.com -license="MIT" -options="!check net" # Testsuite in main -build aport -subpackages=" - dotnet$_pkgver_name-stage0-artifacts:artifacts:noarch - dotnet$_pkgver_name-stage0-bootstrap - " -source=" - dotnet-tarball-$_gittag.tar.gz::https://github.com/dotnet/dotnet/archive/refs/tags/$_gittag.tar.gz - dotnet-release-$_gittag.json::https://github.com/dotnet/dotnet/releases/download/$_gittag/release.json - dotnet-sdk-$_bootstrapver-linux-musl-x64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-x64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm64.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm64.tar.gz - dotnet-sdk-$_bootstrapver-linux-musl-arm.noextract::https://dotnetcli.azureedge.net/dotnet/Sdk/$_bootstrapver/dotnet-sdk-$_bootstrapver-linux-musl-arm.tar.gz - dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-s390x.tar.xz - dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.noextract::https://lab.ilot.io/ayakael/dotnet-stage0/-/releases/$_bootstrapver-r$_bootstraprel/downloads/sdk/dotnet-sdk-$_bootstrapver-r$_bootstraprel-linux-musl-ppc64le.tar.xz - Private.SourceBuilt.Artifacts.$_artifactsver.noextract::https://dotnetcli.azureedge.net/source-built-artifacts/assets/Private.SourceBuilt.Artifacts.$_artifactsver.tar.gz - $_patches - " - -makedepends_host=" - alpine-release - autoconf - automake - bash - binutils - clang - cmake - findutils - g++ - gcc - grep - icu-dev - krb5-dev - libintl - libstdc++ - libucontext-dev - libunwind-dev - libxml2-dev - libxml2-utils - linux-headers - lttng-ust-dev - musl-dev - musl-utils - openssl-dev - pigz - unzip - zip - zlib-dev - " -case $CARCH in - s390x) ;; - *) makedepends_host="$makedepends_host lld-dev";; -esac -makedepends_build=" - $makedepends_host - binutils$_cross - git - gcc$_cross - jq - llvm - llvm-dev - python3 - sed - xz - " -case $CBUILD_ARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7|armhf) _dotnet_arch="arm";; - i586) _dotnet_arch="x86";; - *) _dotnet_arch=$CBUILD_ARCH;; -esac -case $CTARGET_ARCH in - x86_64) _dotnet_target="x64";; - aarch64) _dotnet_target="arm64";; - armv7|armhf) _dotnet_target="arm";; - i586) _dotnet_target="x86";; - *) _dotnet_target=$CTARGET_ARCH;; -esac - -builddir="$srcdir"/dotnet-${_gittag/v} -_packagesdir="$srcdir"/local-packages -_libdir="/usr/lib" -_nugetdir="$srcdir"/nuget -_downloaddir="$srcdir"/local-downloads -_cli_root="$srcdir"/bootstrap -_nuget="$_cli_root/dotnet nuget" -_outputdir="$srcdir"/artifacts -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs/$pkgname -else - _logdir="$srcdir"/logs -fi - -prepare() { - default_prepare - - mkdir -p "$_cli_root" - mkdir -p $_packagesdir $_downloaddir $_outputdir $_nugetdir $_logdir - - # sdk insists on downloading its own dotnet unless ArcadeBuildFromSource - # is true, which opens up a can of worms - sed 's|ArcadeBuildFromSource=true|Architecture|' -i src/sdk/eng/restore-toolset.sh - - # links logfiles to pipeline logs for easy pickup in pipelines - mkdir -p "$_logdir" "$builddir"/artifacts - ln -s "$_logdir" "$builddir"/artifacts/logs - ln -s "$_logdir" "$builddir"/artifacts/log - for i in "$builddir"/src/*; do - if [ -f "$i" ]; then - continue - fi - mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts - ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log - done - - tar -xf "$srcdir"/dotnet-sdk-$_pkgver_macro*$_dotnet_arch.noextract -C "$_cli_root" --no-same-owner - - # adjusts sdk version and packagedir to expected - for i in runtime sdk installer aspnetcore roslyn; do - $_nuget add source $_packagesdir --name local --configfile "$builddir"/src/$i/NuGet.config - tmp=$(mktemp) - jq ".sdk.version = \"$_bootstrapver\"" "$builddir"/src/$i/global.json > $tmp && mv $tmp "$builddir"/src/$i/global.json - done - - # extracting PackageVersions.props as some version information is there - tar -xzf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract PackageVersions.props - - # sdk looks for TestCli at wrong place - sed '/||g' | tr -d ' ') - fi - local _runtimever_ns=$(awk '{if($2 ~ "Name=\"VS.Redist.Common.NetCore.SharedFramework.x64.*\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building runtime version $_runtimever" - cd "$builddir"/src/runtime - - local args=" - -c Release - -bl - -clang - -arch $_dotnet_target - /consoleLoggerParameters:ShowTimestamp - /p:NoPgoOptimize=true - /p:EnableNgenOptimization=false - /p:ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch=none - /p:_toolsRID=linux-musl-$_dotnet_arch - /p:OutputRid=linux-musl-$_dotnet_target - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/runtime.props | sed -E 's|||g' | tr -d ' ') - " - if [ "$CBUILD" != "$CHOST" ]; then - local args="$args -cross" - # https://github.com/dotnet/runtime/pull/75597 broke crossbuilding when true - local DotNetBuildFromSource=false - # x86 build of mono broken, thus do not build mono - case $_dotnet_target in - x86) local args="$args /p:DefaultSubsets=clr+libs+host+packs";; - esac - fi - if [ "$_runtimever" != "${_runtimever##*-}" ]; then - local args="$args /p:VersionSuffix=${_runtimever##*-}" - fi - DotNetBuildFromSource=$DotNetBuildFromSource ROOTFS_DIR="$CBUILDROOT" ./build.sh $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/Runtime/$_runtimever_ns - cp artifacts/packages/*/*/dotnet-runtime-*-*.tar.gz $_downloaddir/Runtime/$_runtimever_ns -} - -_sdk() { - _init - if [ -z "${_sdkver+x}" ]; then - local _sdkver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') - fi - local _sdkver_ns=$(awk '{if($2 == "Name=\"Microsoft.NET.Sdk\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Building sdk version $_sdkver" - cd "$builddir"/src/sdk - - local args=" - -c Release - -bl - /consoleLoggerParameters:ShowTimestamp - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/sdk.props | sed -E 's|||g' | tr -d ' ') - /p:Architecture=$_dotnet_target - /p:TestCliNuGetDirectoryTargetFramework=netcoreapp3.1 - " - if [ "$_sdkver" != "${_sdkver##*-}" ]; then - local args="$args /p:VersionSuffix=${_sdkver##*-}" - fi - ./build.sh --pack /p:Projects=$builddir/src/sdk/source-build.slnf $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - mkdir -p "$_downloaddir"/Sdk/$_sdkver_ns - cp artifacts/packages/*/*/dotnet-toolset-internal-*.zip "$_downloaddir"/Sdk/$_sdkver_ns -} - -_aspnetcore() { - _init - if [ -z "${_aspnetver+x}" ]; then - local _aspnetver=$(grep OutputPackageVersion "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') - fi - local _aspnetver_ns=$(awk '{if($2 == "Name=\"Microsoft.AspNetCore.App.Ref.Internal\""){print $3}}' "$builddir"/src/installer/eng/Version.Details.xml | awk -F '"' '{print $2}') - - msg "[$(date)] Build aspnetcore version $_aspnetver" - cd "$builddir"/src/aspnetcore - local args=" - -c Release - -bl - --os-name linux-musl - -arch $_dotnet_target - -no-build-nodejs - /consoleLoggerParameters:ShowTimestamp - /p:BuildNodeJs=false - /p:BuildOSName=linux-musl - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/aspnetcore.props | sed -E 's|||g' | tr -d ' ') - /p:DotNetAssetRootUrl=file://$_downloaddir/ - /p:EnablePackageValidation=false - " - if [ "$_aspnetver" != "${_aspnetver##*-}" ]; then - local args="$args /p:VersionSuffix=${_aspnetver##*-}" - fi - - # aspnetcore can't find newly created Microsoft.NETCore.App.Runtime.linux-musl-x86 for some reason - case $_dotnet_target in - riscv64|x86) local args="$args /p:CrossgenOutput=false";; - esac - - ./eng/build.sh --pack $args - - for i in artifacts/packages/*/*/*.nupkg; do - $_nuget push $i --source="$_packagesdir" - done - - mkdir -p "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore-runtime-*-linux-musl-$_dotnet_target.tar.gz "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns - cp artifacts/installers/*/aspnetcore_base_runtime.version "$_downloaddir"/aspnetcore/Runtime/$_aspnetver_ns -} - -_installer() { - _init - msg "[$(date)] Building installer version $_installerver" - cd "$builddir"/src/installer - - local args=" - -c Release - -bl - /consoleLoggerParameters:ShowTimestamp - /p:EnableSourceLink=false - /p:OSName=linux-musl - /p:HostOSName=linux-musl - /p:Architecture=$_dotnet_target - /p:CoreSetupBlobRootUrl=file://$_downloaddir/ - /p:DotnetToolsetBlobRootUrl=file://$_downloaddir/ - /p:GitCommitHash=$(grep GitCommitHash "$builddir"/prereqs/git-info/installer.props | sed -E 's|||g' | tr -d ' ') - /p:GitCommitCount=1 - /p:PublicBaseURL=file://$_downloaddir/ - " - if [ "$_installerver" != "${_installerver##*-}" ]; then - local args="$args /p:VersionSuffix=${_installerver##*-}" - fi - # crossgen broken on x86 - case $_dotnet_target in - riscv64|x86) local args="$args /p:DISABLE_CROSSGEN=True";; - esac - - ./build.sh $args - - mkdir -p "$_downloaddir"/installer/$_installerver - cp artifacts/packages/*/*/dotnet-sdk-$_pkgver_macro*.tar.gz "$_downloaddir"/installer/$_installerver -} - -build() { - _runtime - _sdk - _aspnetcore - _installer -} - -package() { - # lua-aports / buildrepo doesn't know to always build stage0 first when dealing - # with virtual packages. Thus, we need to depend on an empty stage0 pkg that - # dotnetx-build will pull, thus forcing build of stage0 first - mkdir -p "$pkgdir" -} - -bootstrap() { - # allows stage0 to be pulled by dotnetx-build if first build of dotnetx - provides="dotnet$_pkgver_name-bootstrap" - provider_priority=$_pkgver_prior - - local _iltoolsver=$(grep \||g' | tr -d ' ') - - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/docs \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/comp \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver - - # unpack build artifacts to bootstrap subdir for use by future builds - tar --use-compress-program="pigz" \ - -xf "$_downloaddir"/installer/$_installerver/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$pkgver/ \ - --no-same-owner - - local _iltoolsArray=" - runtime.*.Microsoft.NETCore.TestHost.*.nupkg - runtime.*.Microsoft.NETCore.ILAsm.*.nupkg - runtime.*.Microsoft.NETCore.ILDAsm.*.nupkg - " - - local _nupkgsArray=" - $_iltoolsArray - Microsoft.NETCore.App.Host.*.*.nupkg - Microsoft.NETCore.App.Runtime.*.*.nupkg - Microsoft.NETCore.App.Crossgen2.*.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHost.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHostPolicy.*.nupkg - runtime.*.Microsoft.NETCore.DotNetHostResolver.*.nupkg - runtime.*.Microsoft.NETCore.DotNetAppHost.*.nupkg - Microsoft.AspNetCore.App.Runtime.linux-musl-*.*.nupkg - " - - # copies artifacts to artifacts dir for use by future dotnet builds - for i in $_nupkgsArray; do install -Dm644 "$_packagesdir"/$i "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ || true; done - - msg "Changing iltools version to $_iltoolsver" - # source-build expects a certain version of ilasm, ildasm and testhost - # following adjusts version - for i in $_iltoolsArray; do - local nupath="$subpkgdir"$_libdir/dotnet/artifacts/$pkgver/$i - local nupath=$(find $nupath || true) - local nupkg="${nupath##*/}" - local nuname="${nupkg/.nupkg}" - if [ -z "${nuname/*rtm*}" ] || [ -z "${nuname/*servicing*}" ] || [ -z "${nuname/*preview*}" ]; then - nuname=${nuname%-*} - fi - local nuname="${nuname%.*.*.*}" - local nuver="${nupkg/$nuname.}" - local nuver="${nuver/.nupkg}" - local nuspec="$nuname.nuspec" - - if [ ! "$nupath" ] || [ "$nupath" = "${nupath/$nuver/$_iltoolsver}" ]; then - continue - fi - # shellcheck disable=SC2094 - unzip -p "$nupath" $nuspec | sed "s|$nuver|$_iltoolsver|" > "$srcdir"/$nuspec - cd "$srcdir" - zip -u "$nupath" $nuspec - mv "$nupath" "${nupath/$nuver/$_iltoolsver}" - done -} - -# build relies on a plethora of nupkgs which are provided by this Artifacts file. -# stage0 sources these from Microsoft, which then allows bootstrap to build -# locally hosted versions. The following unpacks built tarball into directory -# for use by future builds. -artifacts() { - pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" - # hack to allow artifacts to pull itself - provides="dotnet$_pkgver_name-bootstrap-artifacts" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver \ - "$subpkgdir"/usr/share/licenses - - # extract artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$srcdir"/Private.SourceBuilt.Artifacts.*.noextract \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$pkgver/ \ - --no-same-owner -} - -sha512sums=" -094265462d66d97b51ebfbe5fb06d4a679b97881f1f5a07a87a282a96eeaabfe97ca42061d59aac71dd8861c07f07dda16a72e29ae03167407e51d3fd2767562 dotnet-tarball-v8.0.0.tar.gz -55f2c56f7fbed4137ebe5e81c7b86d199d7ff91c6e19fbc9a4af8cd5d0f0195273356ead8b80aedfff56a3d704a541a7c2a7395bec3fa5d6585f3afd056b1220 dotnet-release-v8.0.0.json -a904491cf1fe27603cfc21aa234b2f4da7517929fa9dad0eaa2233d010ef1e890339ca4b8e3c4c0d463f3015d7020a0c37ece97319b061cd92a5fc51cd8a7f4c dotnet-sdk-8.0.100-linux-musl-x64.noextract -1d8e54ab8d2b7b83972c1ecd7a23073bf83d39c258e993e54ab91a383ad2aa44276dfc28938f7b162cf79010187005e42a665933dff021ffa5e5d9cfadb5e2b6 dotnet-sdk-8.0.100-linux-musl-arm64.noextract -a8c08c4eaaa1ade3a1521750c62af92ab8fe91bfdd0f4767f8c0469ebfef091f3a68a443d4566bbfe53c49866d72a104c7aea309cabb36148f9aef9cb950ea64 dotnet-sdk-8.0.100-linux-musl-arm.noextract -d0bebb6179e679dea5704ca59acb2260a3dde2d22727b8116b57fbcfc3cba7b31581ed785279eec2836e3916608f39fa45a8e26dfa27063928355ccda83b3d09 dotnet-sdk-8.0.100-r0-linux-musl-s390x.noextract -14fdc6c8225010a6028609ed2b7c942abc770a50167429116ab9d5f0cabfe8038aedb89b7cc984d89c3366351302a86e10c2d5cfccd57399cc42b3c838bc37a0 dotnet-sdk-8.0.100-r0-linux-musl-ppc64le.noextract -a9933d8de614e914d42cf4953ac60a0a6e83e4276328b838fb369fb3036073fd08d2bcbcee07386f65f802f2f2374e45b44b8f8410396a7d93d20e53646d72f0 Private.SourceBuilt.Artifacts.8.0.100-rtm.23551.1.centos.8-x64.noextract -48d155f11c4594eeb72b2d80a6e110ab2b093fd2379e9ddcca755072f4a3e64990ef2620709e0b10ea4b979d8909de56d89f970c349c6fee58621a8f6b415a1c build_fix-ga-versions.patch -6f23b53b1408dc676434d3ee417b735af033f2717057589e93d26021ca2513d13f40ba7ea3312413f2ed79cda2991538f64b4c835e75f40f5a5e5a0e469c4ec0 installer_aspire-manifest-version-fix.patch -b6a2dfeccac329546f87f1019c1f2cf07e2f294dd33914449ad08d92269c8713b6fa1e330ef257c24e189023fd0b824df97688b0ba6e578a6d0292b07a72b4c1 installer_set-crossgen2rid-using-buildarchitecture.patch -d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -c983a1ab7f06ac86691e0fa7a61fcad69a074d984ef4a4116bee43f20be918215963c7ec8ddd7edd70432b29b160ff78288183acc89fda15ce4a75bfdbf99ee3 runtime_83682-specify-notext-on-linux-musl-x86.patch -3354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch -887112eb2b103eadd6887529ebae7f9a75df2c2cb168e84fd40cc09f9bcd20917d428bbba06968b07b0a463890da82b1b2b1d033a3dd016e6494067464ae6f74 runtime_more-clang-16-suppression.patch -0c25319125ef5b0ad490b37a643c0c5257c796d5ed24f9ac404f698710b07de790bcbb0b6336d4a50025b94c3bff99b214951bd8f0a79a8d6f543ebaa300740f runtime_remove-usage-of-off64-t.patch -" diff --git a/user/dotnet8-stage0/README.md b/user/dotnet8-stage0/README.md deleted file mode 100644 index b055bb1..0000000 --- a/user/dotnet8-stage0/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# dotnet8-stage0 - -This is the .NET 8.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `dotnet8` (empty package to go around `buildrepo` build ordering bug) -* `dotnet8-stage0-bootstrap` (packages binary bootstrap artifacts) -* `dotnet8-stage0-artifacts` (packages non-binary bootstrap artifacts) - -## How to build dotnet8 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet8 is built using three different aports. - -* `community/dotnet8-stage0` -Builds minimum components for full build of dotnet8, and packages these in an initial -`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. -* `community/dotnet8-runtime` -Builds full and packages dotnet8 fully using either stage0 or previoulsy built -dotnet8 build. -* `community/dotnet8-sdk` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet8-runtime. dotnet8-runtime only -builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is -released, the updated components are to be built on dotnet8-sdk rather than -simply repackaging dotnet8-runtime artifacts. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet8-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet8` as opposed to `dotnet-8.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-runtime` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet8/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-runtime: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-runtime` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet8/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-runtime: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/user/dotnet8-stage0/build_fix-ga-versions.patch b/user/dotnet8-stage0/build_fix-ga-versions.patch deleted file mode 100644 index 31fe745..0000000 --- a/user/dotnet8-stage0/build_fix-ga-versions.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/prereqs/git-info/runtime.props.orig b/prereqs/git-info/runtime.props -index f9dc4d6..093bd00 100644 ---- a/prereqs/git-info/runtime.props.orig -+++ b/prereqs/git-info/runtime.props -@@ -3,8 +3,8 @@ - - 5535e31a712343a63f5d7d796cd874e563e5ac14 - 20231031.3 -- 8.0.0-rtm.23531.3 -+ 8.0.0 - rtm - false - -- -\ No newline at end of file -+ -diff --git a/prereqs/git-info/aspnetcore.props.orig b/prereqs/git-info/aspnetcore.props -index d1494e8..b83649d 100644 ---- a/prereqs/git-info/aspnetcore.props.orig -+++ b/prereqs/git-info/aspnetcore.props -@@ -3,8 +3,8 @@ - - 3f1acb59718cadf111a0a796681e3d3509bb3381 - 20231031.12 -- 8.0.0-rtm.23531.12 -+ 8.0.0 - rtm - false - -- -\ No newline at end of file -+ diff --git a/user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch b/user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch deleted file mode 100644 index d4623f7..0000000 --- a/user/dotnet8-stage0/installer_aspire-manifest-version-fix.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/./src/installer/eng/Version.Details.xml.orig b/./src/installer/eng/Version.Details.xml -index a1cebfe..3f47a7f 100644 ---- a/./src/installer/eng/Version.Details.xml.orig -+++ b/./src/installer/eng/Version.Details.xml -@@ -172,7 +172,7 @@ - https://github.com/dotnet/emsdk - 2406616d0e3a31d80b326e27c156955bfa41c791 - -- -+ - https://dev.azure.com/dnceng/internal/_git/dotnet-aspire - 4b00c57d7ccf9a4c7e2aef211ab6bd8af3ee2324 - -diff --git a/./src/installer/eng/Versions.props.orig b/./src/installer/eng/Versions.props -index 329ab4e..897263d 100644 ---- a/./src/installer/eng/Versions.props.orig -+++ b/./src/installer/eng/Versions.props -@@ -238,7 +238,7 @@ - - - 8.0.100 -- 8.0.0-preview.1.23551.7 -+ 8.0.0-preview.1.23557.2 - 8.0.100-rc.2 - 8.0.0-rc.2.9373 - 34.0.0-rc.2.468 diff --git a/user/dotnet8-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch b/user/dotnet8-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch deleted file mode 100644 index 309e092..0000000 --- a/user/dotnet8-stage0/installer_set-crossgen2rid-using-buildarchitecture.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/installer/src/redist/targets/GenerateLayout.targets.orig b/src/installer/src/redist/targets/GenerateLayout.targets -index a27834f..0c899d4 100644 ---- a/src/installer/src/redist/targets/GenerateLayout.targets.orig -+++ b/src/installer/src/redist/targets/GenerateLayout.targets -@@ -85,7 +85,7 @@ - windowsdesktop-runtime-$(MicrosoftWindowsDesktopAppRuntimePackageVersion)-$(SharedFrameworkRid)$(ArchiveExtension) - - $(HostOSName)-$(BuildArchitecture) -- $(SharedFrameworkRid) -+ $(SharedFrameworkRid.SubString(0, $(SharedFrameworkRid.LastIndexOf('-'))))-$(BuildArchitecture) - - $(SharedFrameworkRid) - linux-x64 diff --git a/user/dotnet8-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch b/user/dotnet8-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch deleted file mode 100644 index d4cbe4d..0000000 --- a/user/dotnet8-stage0/runtime_82269-mono-thread-coop-undefine-fortify-source.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/82269 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Undefine fortify-source on mono-thread-coop - -When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. -See: https://gitlab.alpinelinux.org/alpine/aports/-/issues/14105. Alpine Linux -now sets this by default since https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/43463, -which makes mono-flavored runtime dump its core. This patch offers a workaround -by undefining _FORTIFY_SOURCE in the problematic file. - ---- -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d6605..34bb5785fba 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -15,6 +15,7 @@ - #ifdef TARGET_MACH - #define _DARWIN_C_SOURCE - #endif -+#undef _FORTIFY_SOURCE - - #include - #include diff --git a/user/dotnet8-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch b/user/dotnet8-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch deleted file mode 100644 index 6dfefc0..0000000 --- a/user/dotnet8-stage0/runtime_83682-specify-notext-on-linux-musl-x86.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 65877a9c1260c1c37d1c3355703b1951b6754cdf Mon Sep 17 00:00:00 2001 -From: Adeel <3840695+am11@users.noreply.github.com> -Date: Mon, 20 Mar 2023 19:36:14 +0200 -Subject: [PATCH] Specify -z notext on linux-musl-x86 - ---- - src/coreclr/CMakeLists.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/runtime/src/coreclr/CMakeLists.txt b/src/runtime/src/coreclr/CMakeLists.txt -index 67b773bf78787..87d862a541ae6 100644 ---- a/src/runtime/src/coreclr/CMakeLists.txt -+++ b/src/runtime/src/coreclr/CMakeLists.txt -@@ -109,6 +109,10 @@ if(CLR_CMAKE_HOST_UNIX) - endif() - endif() - -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND CLR_CMAKE_TARGET_ARCH_I386) -+ add_linker_flag(-Wl,-z,notext) -+ endif() -+ - if(NOT CLR_CMAKE_HOST_MACCATALYST AND NOT CLR_CMAKE_HOST_IOS AND NOT CLR_CMAKE_HOST_TVOS) - add_subdirectory(pal) - add_subdirectory(hosts) diff --git a/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch b/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch deleted file mode 100644 index 6a5fadd..0000000 --- a/user/dotnet8-stage0/runtime_90251-rename-mono-cmake-host-var.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 828269b7e68039f8bc0bdac66e2fd5c58b6d3471 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/90251 -From: Antoine Martin -Date: Wed, 9 Aug 2023 11:36:39 -0400 -Subject: [PATCH 1/1] Rename CMAKE var for mono on libc-musl - ---- - src/mono/CMakeLists.txt | 6 +++--- - src/mono/mono/mini/CMakeLists.txt | 12 ++++++------ - 2 files changed, 9 insertions(+), 9 deletions(-) - -diff --git a/src/runtime/src/coreclr/pgosupport.cmake b/src/runtime/src/coreclr/pgosupport.cmake -index 719ac14ad99..34a42781ab2 100644 ---- a/src/runtime/src/coreclr/pgosupport.cmake -+++ b/src/runtime/src/coreclr/pgosupport.cmake -@@ -25,13 +25,13 @@ function(add_pgo TargetName) - target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-generate) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -flto -fprofile-instr-generate") - if(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") -- if (CLR_CMAKE_HOST_ALPINE_LINUX) -+ if (CLR_CMAKE_TARGET_LINUX_MUSL) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/clang/${CMAKE_C_COMPILER_VERSION}") -- else(CLR_CMAKE_HOST_ALPINE_LINUX) -+ else(CLR_CMAKE_TARGET_LINUX_MUSL) - string(REPLACE "." ";" CLANG_VERSION "${CMAKE_C_COMPILER_VERSION}") - list(POP_FRONT CLANG_VERSION CLANG_VERSION_MAJOR) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/llvm-${CLANG_VERSION_MAJOR}/lib/clang/${CMAKE_C_COMPILER_VERSION}") -- endif(CLR_CMAKE_HOST_ALPINE_LINUX) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL) - endif(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") - if(NOT LD_LLVM) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -fuse-ld=gold") -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index e04d9e9d364..00e54a25d69 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -943,10 +943,10 @@ else() - set(DISABLE_DLLMAP 1) - endif() - --if(CLR_CMAKE_HOST_ALPINE_LINUX) -- # Setting RLIMIT_NOFILE breaks debugging of coreclr on Alpine Linux for some reason -+if(CLR_CMAKE_TARGET_LINUX_MUSL) -+ # Setting RLIMIT_NOFILE breaks debugging of coreclr on musl-libc for some reason - add_definitions(-DDONT_SET_RLIMIT_NOFILE) -- # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -+ # On musl-libc, we need to ensure that the reported stack range for the primary thread is - # larger than the initial committed stack size. - add_definitions(-DENSURE_PRIMARY_STACK_SIZE) - endif() -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 5d6ef3d..c3e5414 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -400,9 +400,9 @@ if(NOT DISABLE_SHARED_LIBS) - endif() - target_compile_definitions(monosgen-shared PRIVATE -DMONO_DLL_EXPORT) - # Alpine Linux implements ucontext in a different library -- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - target_link_libraries(monosgen-shared PRIVATE ucontext) -- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - if(MONO_SET_RPATH_ORIGIN) - set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") -@@ -601,10 +601,10 @@ if(NOT DISABLE_EXECUTABLES) - target_link_libraries(mono-sgen PRIVATE icu_shim_objects) - endif() - target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -- # Alpine Linux implements ucontext in a different library -- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ # musl-libc implements ucontext in a different library -+ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - target_link_libraries(mono-sgen PRIVATE ucontext) -- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") diff --git a/user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch b/user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch deleted file mode 100644 index c72bc6b..0000000 --- a/user/dotnet8-stage0/runtime_91008-handle-enum-return-type-when-inlining.patch +++ /dev/null @@ -1,30 +0,0 @@ -From a73b8bacfcc5819926bc05173ab2f7850eb00da3 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/91008 -From: Ulrich Weigand -Date: Wed, 23 Aug 2023 21:11:37 +0200 -Subject: [PATCH] [mono] Handle enum return type when inlining CreateInstance - -Use underlying base type when deciding how to inline a -CreateInstance invocation in mini_emit_inst_for_method. - -Fixes https://github.com/dotnet/runtime/issues/90292 -(Mono abort causing .NET 8 msbuild regression). ---- - src/mono/mono/mini/intrinsics.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/runtime/src/mono/mono/mini/intrinsics.c b/src/runtime/src/mono/mono/mini/intrinsics.c -index b1e5e76723147..ef77b7dc89f2e 100644 ---- a/src/runtime/src/mono/mono/mini/intrinsics.c -+++ b/src/runtime/src/mono/mono/mini/intrinsics.c -@@ -2079,7 +2079,9 @@ mini_emit_inst_for_method (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSign - MonoType *t = method_context->method_inst->type_argv [0]; - MonoClass *arg0 = mono_class_from_mono_type_internal (t); - if (m_class_is_valuetype (arg0) && !mono_class_has_default_constructor (arg0, FALSE)) { -- if (m_class_is_primitive (arg0)) { -+ if (m_class_is_primitive (arg0) || m_class_is_enumtype (arg0)) { -+ if (m_class_is_enumtype (arg0)) -+ t = mono_class_enum_basetype_internal (arg0); - int dreg = alloc_dreg (cfg, mini_type_to_stack_type (cfg, t)); - mini_emit_init_rvar (cfg, dreg, t); - ins = cfg->cbb->last_ins; diff --git a/user/dotnet8-stage0/runtime_more-clang-16-suppression.patch b/user/dotnet8-stage0/runtime_more-clang-16-suppression.patch deleted file mode 100644 index 1e94419..0000000 --- a/user/dotnet8-stage0/runtime_more-clang-16-suppression.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake -index c9a54547c0a..931da2cae5b 100644 ---- a/src/runtime/eng/native/configurecompiler.cmake -+++ b/src/runtime/eng/native/configurecompiler.cmake -@@ -488,6 +488,8 @@ if (CLR_CMAKE_HOST_UNIX) - # other clang 16.0 suppressions - add_compile_options(-Wno-single-bit-bitfield-constant-conversion) - add_compile_options(-Wno-cast-function-type-strict) -+ add_compile_options(-Wno-incompatible-function-pointer-types-strict) -+ add_compile_options(-Wno-ignored-attributes) - else() - add_compile_options(-Wno-uninitialized) - add_compile_options(-Wno-strict-aliasing) diff --git a/user/dotnet8-stage0/runtime_remove-usage-of-off64-t.patch b/user/dotnet8-stage0/runtime_remove-usage-of-off64-t.patch deleted file mode 100644 index cec5877..0000000 --- a/user/dotnet8-stage0/runtime_remove-usage-of-off64-t.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 20b2494..165b190 100644 ---- a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -469,7 +469,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r - // performance optimization. - m_canUseProcVmReadSyscall = false; - assert(m_fdMem != -1); -- *read = pread64(m_fdMem, buffer, size, (off64_t)address); -+ *read = pread(m_fdMem, buffer, size, (off_t)address); - } - - if (*read == (size_t)-1) -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp -index 5addb79..79655d1 100644 ---- a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp -@@ -760,7 +760,7 @@ CrashInfo::PageMappedToPhysicalMemory(uint64_t start) - } - - uint64_t pagemapOffset = (start / PAGE_SIZE) * sizeof(uint64_t); -- uint64_t seekResult = lseek64(m_fdPagemap, (off64_t) pagemapOffset, SEEK_SET); -+ uint64_t seekResult = lseek(m_fdPagemap, (off_t) pagemapOffset, SEEK_SET); - if (seekResult != pagemapOffset) - { - int seekErrno = errno; From bdccdfdba250143aa92d646e4ed70e6306db7010 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 28 Jan 2024 00:20:16 -0500 Subject: [PATCH 142/738] user/dotnet8-runtime: now on aports --- user/dotnet8-runtime/APKBUILD | 531 ------------------ user/dotnet8-runtime/README.md | 149 ----- .../aspire_fix-gitinfo-target.patch | 20 - ...aspnetcore_portable-build-workaround.patch | 43 -- .../build_enable-timestamps.patch | 40 -- user/dotnet8-runtime/dotnet.sh.in | 12 - .../installer_hard-dereference-tar-gz.patch | 13 - ...crossgen2rid-using-buildarchitecture.patch | 13 - .../roslyn-analyzer_disable-apphost.patch | 28 - ...-thread-coop-undefine-fortify-source.patch | 25 - ...682-specify-notext-on-linux-musl-x86.patch | 24 - ...ime_90251-rename-mono-cmake-host-var.patch | 80 --- .../runtime_enable-system-libunwind.diff | 12 - .../runtime_more-clang-16-suppression.patch | 13 - .../runtime_remove-usage-of-off64-t.patch | 26 - .../vstest_intent-net8.0.patch | 13 - 16 files changed, 1042 deletions(-) delete mode 100644 user/dotnet8-runtime/APKBUILD delete mode 100644 user/dotnet8-runtime/README.md delete mode 100644 user/dotnet8-runtime/aspire_fix-gitinfo-target.patch delete mode 100644 user/dotnet8-runtime/aspnetcore_portable-build-workaround.patch delete mode 100644 user/dotnet8-runtime/build_enable-timestamps.patch delete mode 100644 user/dotnet8-runtime/dotnet.sh.in delete mode 100644 user/dotnet8-runtime/installer_hard-dereference-tar-gz.patch delete mode 100644 user/dotnet8-runtime/installer_set-crossgen2rid-using-buildarchitecture.patch delete mode 100644 user/dotnet8-runtime/roslyn-analyzer_disable-apphost.patch delete mode 100644 user/dotnet8-runtime/runtime_82269-mono-thread-coop-undefine-fortify-source.patch delete mode 100644 user/dotnet8-runtime/runtime_83682-specify-notext-on-linux-musl-x86.patch delete mode 100644 user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch delete mode 100644 user/dotnet8-runtime/runtime_enable-system-libunwind.diff delete mode 100644 user/dotnet8-runtime/runtime_more-clang-16-suppression.patch delete mode 100644 user/dotnet8-runtime/runtime_remove-usage-of-off64-t.patch delete mode 100644 user/dotnet8-runtime/vstest_intent-net8.0.patch diff --git a/user/dotnet8-runtime/APKBUILD b/user/dotnet8-runtime/APKBUILD deleted file mode 100644 index e4b2d71..0000000 --- a/user/dotnet8-runtime/APKBUILD +++ /dev/null @@ -1,531 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=dotnet8-runtime -pkgver=8.0.1 -pkgrel=0 -_gittag=v8.0.1 -_giturl="https://github.com/dotnet/dotnet" -_testtag=d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0 -_bunnytag=v15 -_stage0ver=8.0.100-r0 -_patches=" - aspnetcore_portable-build-workaround.patch - aspire_fix-gitinfo-target.patch - build_enable-timestamps.patch - installer_hard-dereference-tar-gz.patch - roslyn-analyzer_disable-apphost.patch - runtime_82269-mono-thread-coop-undefine-fortify-source.patch - runtime_90251-rename-mono-cmake-host-var.patch - runtime_enable-system-libunwind.diff - runtime_more-clang-16-suppression.patch - runtime_remove-usage-of-off64-t.patch - vstest_intent-net8.0.patch - " - -_pkgver_macro=${pkgver%.*} -_pkgver_prior=${pkgver%.*.*} -_pkgver_name=${_pkgver_macro//[.0]} -_pkgver_sdk=${pkgver/0./0.10} -pkgdesc="The .NET $_pkgver_macro Core runtime" -# x86: blocked by https://github.com/dotnet/runtime/issues/77667 -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: blocked by https://github.com/dotnet/runtime/issues/84834 -# s390x | ppc64le: mono-based runtime still has issues on musl -arch="all !x86 !armhf !riscv64 !s390x !ppc64le" -url=https://dotnet.microsoft.com -license="MIT" -provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" -depends=" - dotnet$_pkgver_name-hostfxr - icu-data-full - icu-libs - " -checkdepends=" - babeltrace - binutils - coreutils - file - gawk - jq - lttng-tools - npm - procps - sed - strace - util-linux-misc - which - " -# For now package is not tested to build on itself -# To test: replace 'dotnet-stage0-bootstrap' with 'dotnet-bootstrap' -# and 'dotnet-stage0-artifacts' with 'dotnet-bootstrap-artifacts' -makedepends=" - bash - clang - cmake - dotnet$_pkgver_name-stage0-bootstrap=$_stage0ver - dotnet$_pkgver_name-stage0-artifacts=$_stage0ver - dotnet$_pkgver_name-stage0=$_stage0ver - findutils - git - grep - icu-data-full - icu-dev - inetutils-syslogd - krb5-dev - libgit2-dev - libintl - libucontext-dev - libunwind-dev - libxml2-dev - libxml2-utils - linux-headers - lldb-dev - llvm-dev - lttng-ust-dev - nodejs - numactl-dev - openssl-dev - pigz - rsync - samurai - tar - xz - zlib-dev - " -case $CARCH in - s390x|x86) ;; - *) makedepends="$makedepends lld-dev";; -esac - -subpackages=" - aspnetcore$_pkgver_name-runtime:aspnetcore_runtime:noarch - aspnetcore$_pkgver_name-targeting-pack:aspnetcore_targeting_pack:noarch - dotnet$_pkgver_name-runtime-artifacts::noarch - dotnet$_pkgver_name-runtime-bootstrap - dotnet$_pkgver_name-apphost-pack:apphost_pack - dotnet$_pkgver_name-hostfxr - dotnet$_pkgver_name-targeting-pack:targeting_pack:noarch - dotnet-host:host - " -source=" - dotnet-tarball-$_gittag.tar.gz::https://github.com/dotnet/dotnet/archive/refs/tags/$_gittag.tar.gz - dotnet-release-$_gittag.json::https://github.com/dotnet/dotnet/releases/download/$_gittag/release.json - dotnet-testsuite-$_testtag.tar.gz::https://github.com/redhat-developer/dotnet-regular-tests/archive/$_testtag.tar.gz - dotnet-bunny-$_bunnytag.tar.gz::https://github.com/redhat-developer/dotnet-bunny/archive/$_bunnytag.tar.gz - dotnet.sh.in - $_patches - " -builddir="$srcdir"/dotnet-${_gittag/v} -_checkdir="$srcdir"/dotnet-bunny-${_bunnytag/v} -_testdir="$srcdir"/dotnet-regular-tests-$_testtag -_cli_root="$srcdir"/bootstrap -_libdir="/usr/lib" -# if true, then within pipeline environment, in which case send logs there -# to be scooped -if [ -d "$APORTSDIR/logs" ]; then - _logdir="$APORTSDIR"/logs/$pkgname -else - _logdir="$srcdir"/logs -fi - -case $CARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7) _dotnet_arch="arm";; - armhf) _dotnet_arch="armv6";; - *) _dotnet_arch="$CARCH";; -esac - -# Build doesn't set all the right executable bits for the right file types -_fix_executable() { - # add executable bit - find "$1" -type f \( \ - -name 'apphost' -o \ - -name 'singlefilehost' -o \ - -name 'lib*so' \ - \) \ - -exec chmod +x '{}' \; - - # remove executable bit - find "$1" -type f \( \ - -name '*.a' -o \ - -name '*.dll' -o \ - -name '*.h' -o \ - -name '*.json' -o \ - -name '*.pdb' -o \ - -name '*.props' -o \ - -name '*.pubxml' -o \ - -name '*.targets' -o \ - -name '*.txt' -o \ - -name '*.xml' \ - \) \ - -exec chmod -x '{}' \; -} - -prepare() { - default_prepare - - # Using system libunwind is broken on aarch64|armv7, and unused on mono-based builds - # see https://github.com/dotnet/source-build/issues/2408, - case $CARCH in - aarch64|armv7) msg "Using bundled libunwind";; - armhf|s390x|ppc64le) msg "No libunwind used";; - *) - msg "Using system libunwind" - patch -p1 -i "$srcdir"/runtime_enable-system-libunwind.diff - ;; - esac - - # ensure that dotnet does not download artifacts provided by dotnet-artifacts - rm -rf "$builddir"/packages/archive - - # links logfiles to pipeline logs for easy pickup in pipelines - mkdir -p "$_logdir" "$builddir"/artifacts - ln -s "$_logdir" "$builddir"/artifacts/logs - ln -s "$_logdir" "$builddir"/artifacts/log - for i in "$builddir"/src/*; do - if [ -f "$i" ]; then - continue - fi - mkdir -p "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts - ln -s "$_logdir"/${i##*\/} "$builddir"/src/${i##*\/}/artifacts/log - done - - # dotnet requires its bootstrap to be in a writable dir - msg "Setting up bootstrap" - local _bootstrapdir=$(find $_libdir/dotnet/bootstrap/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) - if [ ! -d "$_cli_root" ]; then - cp -r "$_bootstrapdir" "$_cli_root" - fi -} - -build() { - msg "Building $pkgname-$pkgver" - - ulimit -n 4096 - - # Disable use of LTTng as tracing on lttng <=2.13.0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - export DOTNET_LTTng=0 - fi - - case "$CARCH" in - x86*) ;; - *) - # clang doesn't implement this outside of x86, and it causes a later configure to fail - export CFLAGS="${CFLAGS/-fstack-clash-protection}" - export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}" - ;; - esac - - # looks for most recent recent version of _artifactsdir - local _artifactsdir=$(find $_libdir/dotnet/artifacts/$_pkgver_macro* -maxdepth 0 | sort -r | head -n 1) - - # ci args, else the output is forwarded to log files which isn't ideal in a - # pipeline environment, and build by defaults uses lots of space - local args=" - /v:minimal - /p:LogVerbosity=minimal - /p:MinimalConsoleLogOutput=true - /p:CleanWhileBuilding=true - " - - # part of https://github.com/dotnet/installer/pull/14792 that sets this flag - # was not integrated in 7.0.1xx yet - case $CARCH in - riscv64|s390x|ppc64le) local args="$args /p:SourceBuildUseMonoRuntime=true";; - esac - - # Sets TargetRid manually as dotnet cannot be trusted to reliably compute - # the machine's runtime ID between releases. - # shellcheck disable=SC2034 - . /etc/os-release - local VERSION_ID_DOT="${VERSION_ID//[^.]}" - while [ ${#VERSION_ID_DOT} -gt 1 ]; do - local VERSION_ID="${VERSION_ID%.*}" - local VERSION_ID_DOT="${VERSION_ID//[^.]}" - done - local VERSION_ID_DASH="${VERSION_ID//[^_]}" - while [ ${#VERSION_ID_DASH} -ge 1 ]; do - local VERSION_ID="${VERSION_ID%_*}" - local VERSION_ID_DASH="${VERSION_ID//[^_]}" - done - local args="$args /p:TargetRid=$ID.$VERSION_ID-$_dotnet_arch" - - ./build.sh \ - --with-sdk "$_cli_root" \ - --with-packages "$_artifactsdir" \ - --release-manifest "$srcdir"/dotnet-release-$_gittag.json \ - -- $args -} - -check() { - ulimit -n 4096 - # Tests timeout (in seconds) - local _tests_timeout=1000 - # Test suite disable flags - # following tests can only work after packaging step - local _disabled_tests="man-pages distribution-package bash-completion install-location release-version-sane managed-symbols-available tools-in-path" - # test broken: permission issue on lxc / pipelines - local _disabled_tests="$_disabled_tests createdump-aspnet" - # test broken: cannot pg_ctl can't create postgresql server - local _disabled_tests="$_disabled_tests system-data-odbc" - # test broken: no such file or directory bug - local _disabled_tests="$_disabled_tests limits" - # {bundled,system}-libunwind: use system version on all but aarch64/armv7, as broken - # see https://github.com/redhat-developer/dotnet-regular-tests/issues/113 - # disable on mono-flavored runtime as mono does not use libunwind - case $CARCH in - armv7|aarch64) local _disabled_tests="$_disabled_tests system-libunwind";; - s390x|ppc64le|armhf) local _disabled_tests="$_disabled_tests bundled-libunwind system-libunwind";; - *) local _disabled_tests="$_disabled_tests bundled-libunwind";; - esac - # nativeaot is not supported on armv7 - case $CARCH in - armv7) local _disabled_tests="$_disabled_tests nativeaot" - esac - - msg "Unpacking produced dotnet" - export DOTNET_ROOT="$_checkdir/release" - if [ ! -d "$DOTNET_ROOT" ]; then - mkdir -p "$DOTNET_ROOT" - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$DOTNET_ROOT" \ - --no-same-owner - fi - export PATH="$DOTNET_ROOT:$PATH" - # some files either should or should not have executable bits - # (done again during packaging - this is for tests) - _fix_executable "$DOTNET_ROOT" - - msg "Building turkey test suite" - if [ ! -d "$_logdir/check" ]; then - mkdir -p "$_logdir"/check - fi - if [ ! -d "$_checkdir"/turkey ]; then - cd "$_checkdir"/Turkey - dotnet publish -bl:"$_logdir"/check/turkey.binlog -f net6.0 -c Release -p:VersionPrefix=1 -p:VersionSuffix="$(git rev-parse --short HEAD)" -o "$_checkdir"/turkey - fi - - msg "Running test suite" - cd "$_testdir" - for i in $_disabled_tests; do - if [ -d "$i" ]; then - sed -i 's|"enabled": true|"enabled": false|' $i/test.json - fi - done - dotnet "$_checkdir"/turkey/Turkey.dll -t $_tests_timeout -l "$_logdir"/check || local ERROR=true - if [ $ERROR ]; then - msg "Check error reported, please check logs" - fi -} - -package() { - install -dm 755 "$pkgdir"/$_libdir/dotnet/shared - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$pkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./shared/Microsoft.NETCore.App - - # some files either should or should not have executable bits - _fix_executable "$pkgdir" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - rm "$pkgdir"/$_libdir/dotnet/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so - fi -} - -artifacts() { - pkgdesc="Internal package for building .NET $_pkgver_macro Software Development Kit" - # hack to allow artifacts to pull itself - provides="dotnet$_pkgver_name-bootstrap-artifacts" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk \ - "$subpkgdir"/usr/share/licenses - - # extract arch-agnostic artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ - --no-same-owner \ - --exclude '*Intermediate*' \ - --exclude '*alpine*' -} - -bootstrap() { - pkgdesc="The .NET $_pkgver_macro Core bootstrap" - depends="" - - # hack for dotnetx-runtime to be able to pull itself for bootstrapping - provides="dotnet$_pkgver_name-bootstrap" - provider_priority=$_pkgver_prior - - # directory creation - install -dm 755 \ - "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/docs \ - "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk - - # unpack sdk to bootstrap - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/ \ - --no-same-owner - - # extract arch-specific artifacts to artifacts dir for use by future dotnet builds - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/Private.SourceBuilt.Artifacts.*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/artifacts/$_pkgver_sdk/ \ - --no-same-owner \ - --wildcards \ - '*alpine*' - - # assemble docs - find "$builddir" -iname 'dotnet*.1' -type f -exec cp '{}' "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/docs/. \; - - # completions - install -m 755 "$builddir"/src/sdk/scripts/register-completions.bash "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/. - install -m 755 "$builddir"/src/sdk/scripts/register-completions.zsh "$subpkgdir"/$_libdir/dotnet/bootstrap/$_pkgver_sdk/. - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" - - # Disable use of LTTng as tracing on lttng <=2,13,0 is broken - # See https://github.com/dotnet/runtime/issues/57784. - if [ -f "/usr/lib/liblttng-ust.so.1 " ]; then - rm "$subpkgdir"/$_libdir/dotnet/bootstrap/*/shared/Microsoft.NETCore.App/*/libcoreclrtraceptprovider.so - fi -} - -host() { - pkgdesc="A generic driver for the .NET Core Command Line Interface" - depends="" - - install -dm 755 \ - "$subpkgdir"/etc/profile.d \ - "$subpkgdir"/etc/dotnet \ - "$subpkgdir"/usr/bin \ - "$subpkgdir"/$_libdir/dotnet - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./dotnet - - ln -s $_libdir/dotnet/dotnet "$subpkgdir"/usr/bin/dotnet - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location - echo "$_libdir/dotnet" > "$subpkgdir"/etc/dotnet/install_location_$_dotnet_arch - sed "s|%LIBDIR%|$_libdir/dotnet|" "$srcdir"/dotnet.sh.in > "$subpkgdir"/etc/profile.d/dotnet.sh -} - -hostfxr() { - pkgdesc="The .NET host resolver contains the logic to resolve and select the right version of the .NET SDK or runtime to use." - depends="dotnet-host" - provides="dotnet-hostfxr-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./host - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -aspnetcore_runtime() { - pkgdesc="The ASP.NET $_pkgver_macro Core runtime" - depends="dotnet$_pkgver_name-runtime" - provides="aspnetcore-runtime-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./shared/Microsoft.AspNetCore.App - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -apphost_pack() { - pkgdesc="The .NET $_pkgver_macro Core apphost pack" - provides="dotnet-apphost-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - --wildcards \ - './packs/Microsoft.NETCore.App.Host.*' - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -targeting_pack() { - pkgdesc="The .NET $_pkgver_macro Core targeting pack" - provides="dotnet-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./packs/Microsoft.NETCore.App.Ref - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -aspnetcore_targeting_pack() { - pkgdesc="The ASP.NET $_pkgver_macro Core targeting pack" - provides="aspnetcore-targeting-pack-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - tar --use-compress-program="pigz" \ - -xf "$builddir"/artifacts/$_dotnet_arch/Release/dotnet-sdk-$_pkgver_macro*.tar.gz \ - -C "$subpkgdir"/$_libdir/dotnet/ \ - --no-same-owner \ - ./packs/Microsoft.AspNetCore.App.Ref - - # some files either should or should not have executable bits - _fix_executable "$subpkgdir" -} - -sha512sums=" -f2a1d0bf6159de441a566c53b04b6d8f31c520fdadca42670fe1eba37c5d1900fe6d930023c4b37134edf28cf5816c8bc9116ba691432b1f6d56ce2a814c3412 dotnet-tarball-v8.0.1.tar.gz -8ddbaed1611294016cd99728b57182ee63bb4fe4b0331556ff4eb0551f9188744f04ffa5ad2034e93168090114a8eaafe411ccec286e26aa7d871da477a1b5d7 dotnet-release-v8.0.1.json -8fe41ddd03c1b98dc9eec5e337ca0dcc8fbeff65b67ac1a383bd7d1e5fd3c21b820dacd498d1c2268445bb634cfb9dba3e8924e71a98f2ccd8221b17fb079044 dotnet-testsuite-d3d39e7c404c6e45c3e7ab6621c5f6cabf1540b0.tar.gz -7f59b10878aa90a6953ee4d88d08fa932910a24018dace92b173ee87c847d14734f93dc5fc031982a3d0a5cb4ac223b83d0e548531c23c4e3326dc83510989a9 dotnet-bunny-v15.tar.gz -c3f31956976b77198e72a3fef3427338b6b2961f8c121416040c1105de0ce8073e46f4c2e9ef22a001aee69cbe39621c2ddac988522693110071dfae42f2e2b7 dotnet.sh.in -ad7373a112acc07a6a7bbc522d417b26d90b3e3ae9c1e66a6cc70af16af7e7111d9764e7758062d0a5e67f026cc44f2b111051c3d484bd56917f2144db88588b aspnetcore_portable-build-workaround.patch -e5b9b947226456844f705e66f3f19d4519ce88f360e3f3413999c2867c31d9008db78f5806bfee7185d7548c6279ef6492a40ff24c20ed9d58b6ef66b167d7a8 aspire_fix-gitinfo-target.patch -eed7a7481a967f6938de956a6df485efa6dd61bf36ae4a768493cb1f7da0296dc91e0f2f89f7c302083ba9cf0c778e28228ec1b52e902077a00072d7d9957ef3 build_enable-timestamps.patch -ab362bdbbea8d8116b6bf7bf58e330ce6d7d171b42613ac03514f76afa2574b75d6566148d1b72047fbfe61b40ac67b3f2d8af87a7074c790bf882a5b7e73960 installer_hard-dereference-tar-gz.patch -097db705c787501782a1b203e8c453453075dfcadc4f5282849c6ffdda4d7832f75c56089bced4542cc83704fe33842cc725084dac2ba261cacdaf54ae468b3c roslyn-analyzer_disable-apphost.patch -d732df247c721c9f677baabdd7f36dbf4b564814ff64164361065bb1c196b767494a1d39f634eadf01a23032c7b3e64102614b7213065c81096bbf3f8022e6a0 runtime_82269-mono-thread-coop-undefine-fortify-source.patch -3354fa721809f1b94c579408ee78004ff3ca2ba79212c1a0ecc424a9955bb5d5a80c115d4c30dd257526f356ea76f0562db6f83d8dd0b6135f8c689886b3348d runtime_90251-rename-mono-cmake-host-var.patch -39e1b848d1ae81e4b81758522de7d3e36b11d2ab626565efb8e4cceae8da29018277709f0af8fcfa75be8da79f8d6432eb6aac49a5e82510c3aca34632df4d8e runtime_enable-system-libunwind.diff -887112eb2b103eadd6887529ebae7f9a75df2c2cb168e84fd40cc09f9bcd20917d428bbba06968b07b0a463890da82b1b2b1d033a3dd016e6494067464ae6f74 runtime_more-clang-16-suppression.patch -0c25319125ef5b0ad490b37a643c0c5257c796d5ed24f9ac404f698710b07de790bcbb0b6336d4a50025b94c3bff99b214951bd8f0a79a8d6f543ebaa300740f runtime_remove-usage-of-off64-t.patch -5c74abbd7ea71ba6164f71b866c9da564db9ccd95f1a9a8b82f5b0b599fab6d59d64ba1157ec13d7ac36d23145f3d9de2189ed6c40f56e46555ab378c161948b vstest_intent-net8.0.patch -" diff --git a/user/dotnet8-runtime/README.md b/user/dotnet8-runtime/README.md deleted file mode 100644 index 14cde12..0000000 --- a/user/dotnet8-runtime/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# dotnet8-runtime - -This is the .NET 8.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `aspnetcore8-runtime` -* `aspnetcore8-targeting-pack` -* `dotnet8-apphost-pack` (used by dotnet8-runtime) -* `dotnet8-hostfxr` (used by dotnet-host) -* `dotnet8-runtime` -* `dotnet8-runtime-artifacts` (aimed for internal use as bootstrap) -* `dotnet8-runtime-bootstrap` (aimed for internal use as bootstrap) -* `dotnet8-targeting-pack` -* `dotnet-host` - -## How to build dotnet8 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet8 is built using three different aports. - -* `community/dotnet8-stage0` -Builds minimum components for full build of dotnet8, and packages these in an initial -`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. -* `community/dotnet8-runtime` -Builds full and packages dotnet8 fully using either stage0 or previoulsy built -dotnet8 build. -* `community/dotnet8-sdk` -As abuild does not allow different versions for subpackages, a different aport -is required to package sdk bits from dotnet8-runtime. dotnet8-runtime only -builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is -released, the updated components are to be built on dotnet8-sdk rather than -simply repackaging dotnet8-runtime artifacts. - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet8-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet8` as opposed to `dotnet-8.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-runtime` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet8/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-runtime: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-runtime` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet8/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-runtime: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the pull-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ diff --git a/user/dotnet8-runtime/aspire_fix-gitinfo-target.patch b/user/dotnet8-runtime/aspire_fix-gitinfo-target.patch deleted file mode 100644 index 7066d02..0000000 --- a/user/dotnet8-runtime/aspire_fix-gitinfo-target.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/src/aspire/Directory.Build.targets.orig b/src/aspire/Directory.Build.targets -index 511adb03a5d..d62a050caab 100644 ---- a/src/aspire/Directory.Build.targets.orig -+++ b/src/aspire/Directory.Build.targets -@@ -6,13 +6,12 @@ - README.md - - -- -- -+ - - - - - - -- -+ - diff --git a/user/dotnet8-runtime/aspnetcore_portable-build-workaround.patch b/user/dotnet8-runtime/aspnetcore_portable-build-workaround.patch deleted file mode 100644 index 43f2ce0..0000000 --- a/user/dotnet8-runtime/aspnetcore_portable-build-workaround.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 451aa3e9544b0214d0e8e844c27af3847f5bf391 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/installer/pull/13410 -From: Antoine Martin -Date: Fri, 18 Feb 2022 05:14:39 +0000 -Subject: [PATCH 1/1] musl build fix - -Line causes build of aspnetcore on arm to look for linux version of -CrossGen2 rather than linux-musl. This removes the line so that -BuildOsName is pulled from TargetOsName as expected - -This is now only necessary for portable -builds, as https://github.com/dotnet/installer/pull/14549 has fixed -issues relating to musl build on full source-build - ---- - .../App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj.orig b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj -index 77dce00..b31b36d 100644 ---- a/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj.orig -+++ b/src/aspnetcore/src/Framework/App.Runtime/src/Microsoft.AspNetCore.App.Runtime.csproj -@@ -103,8 +103,7 @@ This package is an internal implementation of the .NET Core SDK and is not meant - Special case the crossgen2 package reference on Windows to avoid the x86 package when building in Visual Studio. - --> - $(TargetOsName) -- linux - $(TargetRuntimeIdentifier.Substring(0,$(TargetRuntimeIdentifier.IndexOf('-')))) - x64 - $(BuildArchitecture) - PkgMicrosoft_NETCore_App_Crossgen2_$(BuildOsName.Replace('.', '_'))-$(Crossgen2BuildArchitecture) -diff --git a/repo-projects/aspnetcore.proj.orig b/repo-projects/aspnetcore.proj -index 289b506..fadcc0d 100644 ---- a/repo-projects/aspnetcore.proj.orig -+++ b/repo-projects/aspnetcore.proj -@@ -13,6 +13,7 @@ - $(StandardSourceBuildArgs.Replace('--publish', '')) - - $(BuildCommandArgs) --arch $(Platform) -+ $(BuildCommandArgs) --os-name linux-musl - $(BuildCommandArgs) --no-build-repo-tasks - $(BuildCommandArgs) --no-build-nodejs - $(BuildCommandArgs) /p:PublishCompressedFilesPathPrefix=$(SourceBuiltAspNetCoreRuntime) diff --git a/user/dotnet8-runtime/build_enable-timestamps.patch b/user/dotnet8-runtime/build_enable-timestamps.patch deleted file mode 100644 index 5977a41..0000000 --- a/user/dotnet8-runtime/build_enable-timestamps.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/repo-projects/Directory.Build.props b/repo-projects/Directory.Build.props -index b70a3161fef..d57f9393299 100644 ---- a/repo-projects/Directory.Build.props -+++ b/repo-projects/Directory.Build.props -@@ -134,6 +134,7 @@ - $(StandardSourceBuildArgs) $(FlagParameterPrefix)pack - $(StandardSourceBuildArgs) $(FlagParameterPrefix)publish - $(StandardSourceBuildArgs) -bl -+ $(StandardSourceBuildArgs) /consoleLoggerParameters:ShowTimestamp - - $(StandardSourceBuildArgs) /p:ArcadeBuildFromSource=true - $(StandardSourceBuildArgs) /p:CopyWipIntoInnerSourceBuildRepo=true - $(StandardSourceBuildArgs) /p:DotNetBuildOffline=true - -diff --git a/src/fsharp/eng/build.sh b/src/fsharp/eng/build.sh -index fff8414b3ef..d470fc6ed56 100755 ---- a/src/fsharp/eng/build.sh -+++ b/src/fsharp/eng/build.sh -@@ -144,7 +144,7 @@ while [[ $# > 0 ]]; do - --sourcebuild) - source_build=true - ;; -- /p:*) -+ /*) - properties="$properties $1" - ;; - *) -diff --git a/src/roslyn/eng/build.sh b/src/roslyn/eng/build.sh -index a08cbea099d..d3ec235732f 100755 ---- a/src/roslyn/eng/build.sh -+++ b/src/roslyn/eng/build.sh -@@ -167,7 +167,7 @@ while [[ $# > 0 ]]; do - args="$args $1" - shift - ;; -- /p:*) -+ /*) - properties="$properties $1" - ;; - *) diff --git a/user/dotnet8-runtime/dotnet.sh.in b/user/dotnet8-runtime/dotnet.sh.in deleted file mode 100644 index f85eb29..0000000 --- a/user/dotnet8-runtime/dotnet.sh.in +++ /dev/null @@ -1,12 +0,0 @@ -# Set location for AppHost lookup -[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=%LIBDIR% - -# Add dotnet tools directory to PATH -DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" -case "$PATH" in - *"$DOTNET_TOOLS_PATH"* ) true ;; - * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; -esac - -# Extract self-contained executables under HOME to avoid multi-user issues from using the default '/var/tmp' -[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/user/dotnet8-runtime/installer_hard-dereference-tar-gz.patch b/user/dotnet8-runtime/installer_hard-dereference-tar-gz.patch deleted file mode 100644 index 4f92e2c..0000000 --- a/user/dotnet8-runtime/installer_hard-dereference-tar-gz.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs.orig b/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs -index 06b9857..066d595 100644 ---- a/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs.orig -+++ b/src/installer/src/core-sdk-tasks/TarGzFileCreateFromDirectory.cs -@@ -131,7 +131,7 @@ private string GetSourceSpecification() - - private string GetDestinationArchive() - { -- return $"-czf {DestinationArchive}"; -+ return $"--hard-dereference -czf {DestinationArchive}"; - } - - private string GetExcludes() diff --git a/user/dotnet8-runtime/installer_set-crossgen2rid-using-buildarchitecture.patch b/user/dotnet8-runtime/installer_set-crossgen2rid-using-buildarchitecture.patch deleted file mode 100644 index 309e092..0000000 --- a/user/dotnet8-runtime/installer_set-crossgen2rid-using-buildarchitecture.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/installer/src/redist/targets/GenerateLayout.targets.orig b/src/installer/src/redist/targets/GenerateLayout.targets -index a27834f..0c899d4 100644 ---- a/src/installer/src/redist/targets/GenerateLayout.targets.orig -+++ b/src/installer/src/redist/targets/GenerateLayout.targets -@@ -85,7 +85,7 @@ - windowsdesktop-runtime-$(MicrosoftWindowsDesktopAppRuntimePackageVersion)-$(SharedFrameworkRid)$(ArchiveExtension) - - $(HostOSName)-$(BuildArchitecture) -- $(SharedFrameworkRid) -+ $(SharedFrameworkRid.SubString(0, $(SharedFrameworkRid.LastIndexOf('-'))))-$(BuildArchitecture) - - $(SharedFrameworkRid) - linux-x64 diff --git a/user/dotnet8-runtime/roslyn-analyzer_disable-apphost.patch b/user/dotnet8-runtime/roslyn-analyzer_disable-apphost.patch deleted file mode 100644 index 6d5d57c..0000000 --- a/user/dotnet8-runtime/roslyn-analyzer_disable-apphost.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 79f02a53316f90543d60269d7c06727c376f423b Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Wed, 24 Aug 2022 18:41:08 +0000 -Subject: [PATCH 1/1] disable apphost usage - -Roslyn-analyzer can't seem to find apphost produced by runtime build on ppc64le -This disables its use as it isn't necessary - ---- -diff --git a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj.orig b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -index 7b454a4..bbe18ae 100644 ---- a/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj.orig -+++ b/src/roslyn-analyzers/src/PerformanceTests/Tests/PerformanceTests.csproj -@@ -16,6 +16,7 @@ - false - true - $(MicrosoftCodeAnalysisVersionForTests) -+ false - - - -@@ -28,4 +29,4 @@ - - - -- -\ No newline at end of file -+ diff --git a/user/dotnet8-runtime/runtime_82269-mono-thread-coop-undefine-fortify-source.patch b/user/dotnet8-runtime/runtime_82269-mono-thread-coop-undefine-fortify-source.patch deleted file mode 100644 index d4cbe4d..0000000 --- a/user/dotnet8-runtime/runtime_82269-mono-thread-coop-undefine-fortify-source.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 98054ea87ce70247bb09ceafd2ad1a0b36d2fef4 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/issues/82269 -From: Antoine Martin -Date: Sat, 1 Oct 2022 09:21:58 -0400 -Subject: [PATCH] Undefine fortify-source on mono-thread-coop - -When _FORTIFY_SOURCE=2, there is a bug relating to memcpy that expresses itself. -See: https://gitlab.alpinelinux.org/alpine/aports/-/issues/14105. Alpine Linux -now sets this by default since https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/43463, -which makes mono-flavored runtime dump its core. This patch offers a workaround -by undefining _FORTIFY_SOURCE in the problematic file. - ---- -diff --git a/src/runtime/src/mono/mono/utils/mono-threads-coop.c b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -index 4ed659d6605..34bb5785fba 100644 ---- a/src/runtime/src/mono/mono/utils/mono-threads-coop.c -+++ b/src/runtime/src/mono/mono/utils/mono-threads-coop.c -@@ -15,6 +15,7 @@ - #ifdef TARGET_MACH - #define _DARWIN_C_SOURCE - #endif -+#undef _FORTIFY_SOURCE - - #include - #include diff --git a/user/dotnet8-runtime/runtime_83682-specify-notext-on-linux-musl-x86.patch b/user/dotnet8-runtime/runtime_83682-specify-notext-on-linux-musl-x86.patch deleted file mode 100644 index 6dfefc0..0000000 --- a/user/dotnet8-runtime/runtime_83682-specify-notext-on-linux-musl-x86.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 65877a9c1260c1c37d1c3355703b1951b6754cdf Mon Sep 17 00:00:00 2001 -From: Adeel <3840695+am11@users.noreply.github.com> -Date: Mon, 20 Mar 2023 19:36:14 +0200 -Subject: [PATCH] Specify -z notext on linux-musl-x86 - ---- - src/coreclr/CMakeLists.txt | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/runtime/src/coreclr/CMakeLists.txt b/src/runtime/src/coreclr/CMakeLists.txt -index 67b773bf78787..87d862a541ae6 100644 ---- a/src/runtime/src/coreclr/CMakeLists.txt -+++ b/src/runtime/src/coreclr/CMakeLists.txt -@@ -109,6 +109,10 @@ if(CLR_CMAKE_HOST_UNIX) - endif() - endif() - -+ if(CLR_CMAKE_TARGET_ALPINE_LINUX AND CLR_CMAKE_TARGET_ARCH_I386) -+ add_linker_flag(-Wl,-z,notext) -+ endif() -+ - if(NOT CLR_CMAKE_HOST_MACCATALYST AND NOT CLR_CMAKE_HOST_IOS AND NOT CLR_CMAKE_HOST_TVOS) - add_subdirectory(pal) - add_subdirectory(hosts) diff --git a/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch b/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch deleted file mode 100644 index 6a5fadd..0000000 --- a/user/dotnet8-runtime/runtime_90251-rename-mono-cmake-host-var.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 828269b7e68039f8bc0bdac66e2fd5c58b6d3471 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/dotnet/runtime/pull/90251 -From: Antoine Martin -Date: Wed, 9 Aug 2023 11:36:39 -0400 -Subject: [PATCH 1/1] Rename CMAKE var for mono on libc-musl - ---- - src/mono/CMakeLists.txt | 6 +++--- - src/mono/mono/mini/CMakeLists.txt | 12 ++++++------ - 2 files changed, 9 insertions(+), 9 deletions(-) - -diff --git a/src/runtime/src/coreclr/pgosupport.cmake b/src/runtime/src/coreclr/pgosupport.cmake -index 719ac14ad99..34a42781ab2 100644 ---- a/src/runtime/src/coreclr/pgosupport.cmake -+++ b/src/runtime/src/coreclr/pgosupport.cmake -@@ -25,13 +25,13 @@ function(add_pgo TargetName) - target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-generate) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -flto -fprofile-instr-generate") - if(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") -- if (CLR_CMAKE_HOST_ALPINE_LINUX) -+ if (CLR_CMAKE_TARGET_LINUX_MUSL) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/clang/${CMAKE_C_COMPILER_VERSION}") -- else(CLR_CMAKE_HOST_ALPINE_LINUX) -+ else(CLR_CMAKE_TARGET_LINUX_MUSL) - string(REPLACE "." ";" CLANG_VERSION "${CMAKE_C_COMPILER_VERSION}") - list(POP_FRONT CLANG_VERSION CLANG_VERSION_MAJOR) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -resource-dir ${CMAKE_SYSROOT}/usr/lib/llvm-${CLANG_VERSION_MAJOR}/lib/clang/${CMAKE_C_COMPILER_VERSION}") -- endif(CLR_CMAKE_HOST_ALPINE_LINUX) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL) - endif(CMAKE_CROSSCOMPILING AND CMAKE_C_COMPILER_ID MATCHES "Clang") - if(NOT LD_LLVM) - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS " -fuse-ld=gold") -diff --git a/src/runtime/src/mono/CMakeLists.txt b/src/runtime/src/mono/CMakeLists.txt -index e04d9e9d364..00e54a25d69 100644 ---- a/src/runtime/src/mono/CMakeLists.txt -+++ b/src/runtime/src/mono/CMakeLists.txt -@@ -943,10 +943,10 @@ else() - set(DISABLE_DLLMAP 1) - endif() - --if(CLR_CMAKE_HOST_ALPINE_LINUX) -- # Setting RLIMIT_NOFILE breaks debugging of coreclr on Alpine Linux for some reason -+if(CLR_CMAKE_TARGET_LINUX_MUSL) -+ # Setting RLIMIT_NOFILE breaks debugging of coreclr on musl-libc for some reason - add_definitions(-DDONT_SET_RLIMIT_NOFILE) -- # On Alpine Linux, we need to ensure that the reported stack range for the primary thread is -+ # On musl-libc, we need to ensure that the reported stack range for the primary thread is - # larger than the initial committed stack size. - add_definitions(-DENSURE_PRIMARY_STACK_SIZE) - endif() -diff --git a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig b/src/runtime/src/mono/mono/mini/CMakeLists.txt -index 5d6ef3d..c3e5414 100644 ---- a/src/runtime/src/mono/mono/mini/CMakeLists.txt.orig -+++ b/src/runtime/src/mono/mono/mini/CMakeLists.txt -@@ -400,9 +400,9 @@ if(NOT DISABLE_SHARED_LIBS) - endif() - target_compile_definitions(monosgen-shared PRIVATE -DMONO_DLL_EXPORT) - # Alpine Linux implements ucontext in a different library -- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - target_link_libraries(monosgen-shared PRIVATE ucontext) -- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - set_target_properties(monosgen-shared PROPERTIES OUTPUT_NAME ${MONO_SHARED_LIB_NAME}) - if(MONO_SET_RPATH_ORIGIN) - set_target_properties(monosgen-shared PROPERTIES INSTALL_RPATH "$ORIGIN") -@@ -601,10 +601,10 @@ if(NOT DISABLE_EXECUTABLES) - target_link_libraries(mono-sgen PRIVATE icu_shim_objects) - endif() - target_link_libraries(mono-sgen PRIVATE ${OS_LIBS} ${LLVM_LIBS} ${ICU_LIBS} ${Z_LIBS}) -- # Alpine Linux implements ucontext in a different library -- if(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ # musl-libc implements ucontext in a different library -+ if(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - target_link_libraries(mono-sgen PRIVATE ucontext) -- endif(CLR_CMAKE_HOST_ALPINE_LINUX AND TARGET_S390X) -+ endif(CLR_CMAKE_TARGET_LINUX_MUSL AND TARGET_S390X) - if(NOT DISABLE_COMPONENTS AND STATIC_COMPONENTS AND NOT DISABLE_LINK_STATIC_COMPONENTS) - # if components are built statically, link them into runtime. - target_sources(mono-sgen PRIVATE "${mono-components-objects}") diff --git a/user/dotnet8-runtime/runtime_enable-system-libunwind.diff b/user/dotnet8-runtime/runtime_enable-system-libunwind.diff deleted file mode 100644 index e88e5cf..0000000 --- a/user/dotnet8-runtime/runtime_enable-system-libunwind.diff +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/runtime/eng/SourceBuild.props.orig b/src/runtime/eng/SourceBuild.props -index 1e9d5cf..c40e4fa 100644 ---- a/src/runtime/eng/SourceBuild.props.orig -+++ b/src/runtime/eng/SourceBuild.props -@@ -48,6 +48,7 @@ - $(InnerBuildArgs) /p:OfficialBuildId=$(OfficialBuildId) - $(InnerBuildArgs) /p:ContinuousIntegrationBuild=$(ContinuousIntegrationBuild) - $(InnerBuildArgs) --usemonoruntime -+ $(InnerBuildArgs) --cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE - - - diff --git a/user/dotnet8-runtime/runtime_more-clang-16-suppression.patch b/user/dotnet8-runtime/runtime_more-clang-16-suppression.patch deleted file mode 100644 index 1e94419..0000000 --- a/user/dotnet8-runtime/runtime_more-clang-16-suppression.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake -index c9a54547c0a..931da2cae5b 100644 ---- a/src/runtime/eng/native/configurecompiler.cmake -+++ b/src/runtime/eng/native/configurecompiler.cmake -@@ -488,6 +488,8 @@ if (CLR_CMAKE_HOST_UNIX) - # other clang 16.0 suppressions - add_compile_options(-Wno-single-bit-bitfield-constant-conversion) - add_compile_options(-Wno-cast-function-type-strict) -+ add_compile_options(-Wno-incompatible-function-pointer-types-strict) -+ add_compile_options(-Wno-ignored-attributes) - else() - add_compile_options(-Wno-uninitialized) - add_compile_options(-Wno-strict-aliasing) diff --git a/user/dotnet8-runtime/runtime_remove-usage-of-off64-t.patch b/user/dotnet8-runtime/runtime_remove-usage-of-off64-t.patch deleted file mode 100644 index cec5877..0000000 --- a/user/dotnet8-runtime/runtime_remove-usage-of-off64-t.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -index 20b2494..165b190 100644 ---- a/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp.orig -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfounix.cpp -@@ -469,7 +469,7 @@ CrashInfo::ReadProcessMemory(void* address, void* buffer, size_t size, size_t* r - // performance optimization. - m_canUseProcVmReadSyscall = false; - assert(m_fdMem != -1); -- *read = pread64(m_fdMem, buffer, size, (off64_t)address); -+ *read = pread(m_fdMem, buffer, size, (off_t)address); - } - - if (*read == (size_t)-1) -diff --git a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp -index 5addb79..79655d1 100644 ---- a/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp.orig -+++ b/src/runtime/src/coreclr/debug/createdump/crashinfo.cpp -@@ -760,7 +760,7 @@ CrashInfo::PageMappedToPhysicalMemory(uint64_t start) - } - - uint64_t pagemapOffset = (start / PAGE_SIZE) * sizeof(uint64_t); -- uint64_t seekResult = lseek64(m_fdPagemap, (off64_t) pagemapOffset, SEEK_SET); -+ uint64_t seekResult = lseek(m_fdPagemap, (off_t) pagemapOffset, SEEK_SET); - if (seekResult != pagemapOffset) - { - int seekErrno = errno; diff --git a/user/dotnet8-runtime/vstest_intent-net8.0.patch b/user/dotnet8-runtime/vstest_intent-net8.0.patch deleted file mode 100644 index 6a51807..0000000 --- a/user/dotnet8-runtime/vstest_intent-net8.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/src/vstest/test/Intent/Intent.csproj b/src/vstest/test/Intent/Intent.csproj -index bb711c9256..6d0b199a9b 100644 ---- a/src/vstest/test/Intent/Intent.csproj -+++ b/src/vstest/test/Intent/Intent.csproj -@@ -2,7 +2,7 @@ - - - Exe -- net6.0 -+ net8.0 - enable - enable - From cc1af00d3418075c45dd79df47e7c01380fb757a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 28 Jan 2024 00:20:29 -0500 Subject: [PATCH 143/738] user/dotnet8-sdk: now on aports --- user/dotnet8-sdk/APKBUILD | 127 ------------------------------- user/dotnet8-sdk/README.md | 148 ------------------------------------- 2 files changed, 275 deletions(-) delete mode 100644 user/dotnet8-sdk/APKBUILD delete mode 100644 user/dotnet8-sdk/README.md diff --git a/user/dotnet8-sdk/APKBUILD b/user/dotnet8-sdk/APKBUILD deleted file mode 100644 index b3c43bc..0000000 --- a/user/dotnet8-sdk/APKBUILD +++ /dev/null @@ -1,127 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=dotnet8-sdk -pkgver=8.0.101 -_bldver=8.0.1-r0 -pkgrel=0 - -# Following for dotnet build version 6.0 and up -_pkgver_macro=${pkgver%.*} -_pkgver_name=${_pkgver_macro//[.0]} -_bldver_ver=${_bldver%%-*} -_bldver_ver=${_bldver_ver/0./0.10} -pkgdesc="The .NET $_pkgver_macro SDK" -# x86: blocked by https://github.com/dotnet/runtime/issues/77667 -# armhf: blocked by https://github.com/dotnet/runtime/issues/77663 -# riscv64: blocked by https://github.com/dotnet/runtime/issues/84834 -# s390x | ppc64le: mono-based runtime still has issues on musl -arch="all !x86 !armhf !riscv64 !s390x !ppc64le" -url=https://dotnet.microsoft.com -license="MIT" -makedepends="dotnet$_pkgver_name-runtime-bootstrap=$_bldver" -subpackages=" - dotnet$_pkgver_name-templates:templates:noarch - dotnet-zsh-completion:zshcomp:noarch - dotnet-bash-completion:bashcomp:noarch - dotnet-doc - netstandard21-targeting-pack:netstandard_targeting_pack:noarch - " -provides="dotnet$_pkgver_name=$pkgver-r$pkgrel" -options="!check" # No test suite -builddir="$srcdir" -_libdir="/usr/lib" - -case $CARCH in - x86_64) _dotnet_arch="x64";; - aarch64) _dotnet_arch="arm64";; - armv7) _dotnet_arch="arm";; - armhf) _dotnet_arch="armv6";; - *) _dotnet_arch="$CARCH";; -esac - -package() { - # libucontext isn't automatically detected on all platforms - depends=" - aspnetcore$_pkgver_name-runtime - aspnetcore$_pkgver_name-targeting-pack - dotnet$_pkgver_name-apphost-pack - dotnet$_pkgver_name-targeting-pack - dotnet$_pkgver_name-templates - netstandard21-targeting-pack - libucontext - " - provides=" - dotnet-sdk-$_pkgver_macro=$pkgver-r$pkgrel - dotnet$_pkgver_name-dev=$pkgver-r$pkgrel - " - - install -dm 755 "$pkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/sdk "$pkgdir"/$_libdir/dotnet/. - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/sdk-manifests "$pkgdir"/$_libdir/dotnet/. - - # See https://github.com/dotnet/source-build/issues/2579 - find "$pkgdir" -type f -name 'testhost.x86' -delete - find "$pkgdir" -type f -name 'vstest.console' -delete - - # docs - install -dm 755 "$pkgdir"/usr/share/man/man1 - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/docs/* "$pkgdir"/usr/share/man/man1/. -} - -netstandard_targeting_pack() { - pkgdesc="The .NET 2.1 Standard targeting pack" - depends="dotnet-host" - provides="netstandard-targeting-pack-2.1=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet/packs - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/packs/NETStandard.Library.Ref "$subpkgdir"/$_libdir/dotnet/packs/ -} - -templates() { - pkgdesc="The .NET $_pkgver_macro templates" - depends="dotnet-host" - provides="dotnet-templates-$_pkgver_macro=$pkgver-r$pkgrel" - - install -dm 755 "$subpkgdir"/$_libdir/dotnet - - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/templates "$subpkgdir"/$_libdir/dotnet/. -} - -zshcomp() { - depends="" - pkgdesc="zsh completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack zsh" - depends="dotnet-host" - - install -dm 755 "$subpkgdir"/usr/share/zsh/site-functions - - install -m 755 "$_libdir"/dotnet/bootstrap/$_bldver_ver/register-completions.zsh "$subpkgdir"/usr/share/zsh/site-functions/_dotnet -} - -bashcomp() { - depends="" - pkgdesc="bash completion for .NET" - # netstandard21-targeting-pack will always be pulled by any dotnetx-sdk - # thus pulling this with it for sdk - install_if="netstandard21-targeting-pack bash-completion" - depends="dotnet-host" - - install -dm 755 "$subpkgdir"/usr/share/bash-completion/completions - - install -m 755 "$_libdir"/dotnet/bootstrap/$_bldver_ver/register-completions.bash "$subpkgdir"/usr/share/bash-completion/completions/_dotnet -} - -doc() { - default_doc - pkgdesc="Docs for .NET" - - # licenses - install -dm 755 "$subpkgdir"/usr/share/licenses/dotnet - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/LICENSE.txt "$subpkgdir"/usr/share/licenses/dotnet/. - cp -r $_libdir/dotnet/bootstrap/$_bldver_ver/ThirdPartyNotices.txt "$subpkgdir"/usr/share/licenses/dotnet/. -} diff --git a/user/dotnet8-sdk/README.md b/user/dotnet8-sdk/README.md deleted file mode 100644 index 26d3107..0000000 --- a/user/dotnet8-sdk/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# dotnet8-sdk - -This is the .NET 8.0 package for Alpine Linux. - -Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael - -# Building info - -## Generated packages -* `dotnet8-sdk` -* `dotnet8-templates` (required by sdk) -* `dotnet-zsh-completion` -* `dotnet-bash-completion` -* `dotnet-doc` -* `netstandard21-targeting-pack` - -## How to build dotnet8 on Alpine -As dotnet is a self-hosting compiler (thus it compiles using itself), it -requires a bootstrap for the initial build. To solve this problem, this package -follows the `stage0` proposal outlined [here](https://lists.alpinelinux.org/~alpine/devel/%3C33KG0XO61I4IL.2Z7RTAZ5J3SY6%408pit.net%3E) - -The goal of `stage0` is to bootstrap dotnet with as little intervention as -possible, thus allowing seamless Alpine upgrades. Unfortunately, upstream only -builds bootstraps for Alpine on `x86_64`, `aarch64`, and `armv7`. Thus, `stage0` -has also been designed to be crossbuild aware, allowing bootstrapping to other -platforms. - -In summary, dotnet8 is built using three different aports. - -* `community/dotnet8-stage0` -Builds minimum components for full build of dotnet8, and packages these in an initial -`dotnet8-stage0-bootstrap` package that `dotnet8-runtime` pulls. -* `community/dotnet8-runtime -Builds full and packages dotnet8 fully using either stage0 or previoulsy built -dotnet8 build. -* `community/dotnet8-sdk` -As abuild does not allow different versions for subpackages, a different aport -is required to package runtime bits from dotnet8-runtime. dotnet8-runtime only -builds 8.0.1xx feature branch of SDK. Thus, when a new feature branch of sdk is -released, the updated components are to be built on dotnet8-sdk rather than -simply repackaging dotnet8-runtime artifacts. - - - -## Crossbuilding with `stage0` -Crossbuilding `stage0` is a three step process: -1. Build sysroot for target platform by using `scripts/bootstrap.sh` in aports repo: -``` -./bootstrap.sh $CTARGET_ARCH -``` -2. Although not necessary, it is recommended to add Alpine repositories to - `$HOME/sysroot-$CTARGET_ARCH/etc/apk/repositories`, making sure to add required - keys. This makes it so that whatever package is not built in step 1 will - be pulled from package repos -3. Crossbuild `dotnet8-stage0` via: -``` -CHOST=$CTARGET_ARCH abuild -r -``` - -# Specification - -This package follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging), -with two exceptions. It installs dotnet to `/usr/lib/dotnet` (aka `$_libdir`). -In addition, the package is named `dotnet8` as opposed to `dotnet-8.0` -to match Alpine Linux naming conventions for packages with many installable versions - -# Contributing - -The steps below are for the final package. Please only contribute to a -pre-release version if you know what you are doing. Original instructions -follow. - -## General Changes - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-sdk` - -3. Make your changes. Don't forget to add a changelog. - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. - -6. Commit the changes to the git repo in a git branch - - - `git checkout -b dotnet8/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-sdk: descriptive description'` - - `git push` - -7. Create a merge request with your changes, tagging @ayakael for review. - -8. Once the tests in the merge-request pass, and reviewers are happy, your changes - will be merged. - -## Updating to an new upstream release - -1. Fork the main aports repo. - -2. Checkout the forked repository. - - - `git clone ssh://git@gitlab.alpinelinux.org/$USER/aports` - - `cd community/dotnet8-sdk` - - -3. Build the new upstream source tarball. Update the versions in the - APKBUILD file, and then create a snapshot. After build, update checksum. - - - `abuild snapshot` - - `abuild checksum` - -4. Do local builds. - - - `abuild -r` - -5. Fix any errors that come up and rebuild until it works locally. Any - patches that are needed at this point should be added to the APKBUILD file - in `_patches` variable. - -6. Upload the source archive to a remote location, and update `source` variable. - -7. Commit the changes to the git repo in a git branch. - - - `git checkout -b dotnet8/` - - `git add` any new patches - - `git remove` any now-unnecessary patches - - `git commit -m 'community/dotnet8-sdk: upgrade to ` - - `git push` - -8. Create a merge request with your changes, tagging @ayakael for review. - -9. Once the tests in the merge-request pass, and reviewers are happy, your changes - will be merged. - -# Testing - -This package uses CI tests as defined in `check()` function. Creating a -merge-request or running a build will fire off tests and flag any issues. - -The tests themselves are contained in this external repository: -https://github.com/redhat-developer/dotnet-regular-tests/ From 9e00cce2ea146b23e14b340145103ce3d707c721 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 28 Jan 2024 00:24:08 -0500 Subject: [PATCH 144/738] user/tandoor-recipes: upgrade to 1.5.11 --- user/tandoor-recipes/APKBUILD | 6 ++---- user/tandoor-recipes/allauth-0.58-fix.patch | 12 ------------ 2 files changed, 2 insertions(+), 16 deletions(-) delete mode 100644 user/tandoor-recipes/allauth-0.58-fix.patch diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 9786b85..0ab8084 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=tandoor-recipes -pkgver=1.5.10 +pkgver=1.5.11 pkgrel=0 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." arch="noarch" @@ -69,7 +69,6 @@ source=" recipes.openrc recipes.nginx recipes-manage.sh - allauth-0.58-fix.patch " builddir="$srcdir"/recipes-$pkgver install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" @@ -126,9 +125,8 @@ package() { } sha512sums=" -ae2569bc7e81ad509bafe7c605cbc5628037f03bc9dec3280df23f21a637de0c4643332520e6486b77df9e97cb21012abac2e82e1e1781d47fffed9253133180 tandoor-recipes-1.5.10.tar.gz +66115802780679a9fc541b29638ad97b2de556afe40b62820180689a5e179f33efbdf1d8d92be67928e488705fe5a37e8c6b1b42b6e084f433ad45020b107f93 tandoor-recipes-1.5.11.tar.gz 6d53affec525207a86d8b26c6e5ac7a16586756520e5605f7fe1ea82212a93d051237da45893c8b4002a6663e7538d8e78ab7fc392dc420ba7e31e0cb11d3cae recipes.openrc 1ae29eb9342ad697d0e1e0cc600cd63c4ea6ce3f92b2bdc26602a95015b9ee91f1d40df65e92cad53b980fa3c15989ca9874bd0df62d6c7030ea97d396e37d2c recipes.nginx 521bc8c71bbf900bb37ef2db4d79ab16c3a068d74de57d8cfbe82feffab6041c58f94ddbb57ac1f8feb68535dd32679b79169454abfc4fa04548b025282ca507 recipes-manage.sh -a15d71798185aa4cb6da7d2f3d1610b53d6d876750d1706793c59582db1d930fd62295e02c68628b1324e379db7d6c6cd8a63fb905d2b3739aa81fc57a304368 allauth-0.58-fix.patch " diff --git a/user/tandoor-recipes/allauth-0.58-fix.patch b/user/tandoor-recipes/allauth-0.58-fix.patch deleted file mode 100644 index 91406ed..0000000 --- a/user/tandoor-recipes/allauth-0.58-fix.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/recipes/settings.py.orig b/recipes/settings.py -index 8673962..6a6490b 100644 ---- a/recipes/settings.py.orig -+++ b/recipes/settings.py -@@ -218,6 +218,7 @@ MIDDLEWARE = [ - 'django.middleware.locale.LocaleMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'cookbook.helper.scope_middleware.ScopeMiddleware', -+ 'allauth.account.middleware.AccountMiddleware', - ] - - if DEBUG_TOOLBAR: From 21d5b392078a4d1223e0bce6d2214c5778e55992 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 31 Jan 2024 00:31:19 -0500 Subject: [PATCH 145/738] user/icedtea-web: new aport --- user/icedtea-web/APKBUILD | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 user/icedtea-web/APKBUILD diff --git a/user/icedtea-web/APKBUILD b/user/icedtea-web/APKBUILD new file mode 100644 index 0000000..225a4d1 --- /dev/null +++ b/user/icedtea-web/APKBUILD @@ -0,0 +1,72 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=icedtea-web +pkgver=2.0.0_alpha29 +_pkgver=2.0.0-alpha29 +pkgrel=0 +pkgdesc='Additional components for OpenJDK - Browser plug-in and Web Start implementation' +url='https://github.com/AdoptOpenJDK/IcedTea-Web' +arch="x86_64" +license="GPL-2.0-only" +depends="openjdk8-jre" +# optdepend: rhino +makedepends=" + cargo + bash + openjdk8 + autoconf + automake + zip + glib-dev + libxtst-dev + npapi-sdk + junit + firefox + epiphany + rust + bc + maven +" +source="https://github.com/AdoptOpenJDK/IcedTea-Web/archive/icedtea-web-$_pkgver.tar.gz" +builddir="$srcdir"/IcedTea-Web-icedtea-web-$_pkgver +options="!check" # investigate failures later + +export MAVEN_ARGS="--batch-mode -Duser.home=$srcdir/.home" + +build() { + mvn install -DskipTests + ( + cd launchers + JRE=/usr/lib/jvm/default-jvm bash ./build.sh + ) +} + +check() { + mvn test +} + +package() { + install -dm 755 \ + "$pkgdir"/usr/share/applications \ + "$pkgdir"/usr/share/pixmaps \ + "$pkgdir"/usr/lib/mozilla/plugins/ \ + "$pkgdir"/usr/bin + + cp -R launchers/target "$pkgdir"/usr/lib/icedtea-web + install -Dm 644 launchers/javaws.png -t "$pkgdir"/usr/share/pixmaps + + for i in javaws.desktop.in itweb-settings.desktop.in policyeditor.desktop.in; do + sed 's|PATH_TO_JAVAWS|/usr/bin/javaws|' launchers/xdesktop.in/$i > "$pkgdir"/usr/share/applications/$i + done + + ## link binaries into /usr/bin + jre/bin + for file in "$builddir"/launchers/target/bin/*; do + ln -sf "/usr/lib/icedtea-web/bin/$(basename "$file")" "$pkgdir"/usr/bin + done + +# ## link the mozilla-plugin - test it here http://www.java.com/en/download/help/testvm.xml +# ln -sf /usr/lib/icedtea-web/lib/IcedTeaPlugin.so "$pkgdir"/usr/lib/mozilla/plugins/ +} +sha512sums=" +453cb206ea0d2e488c0709962e96f03e3658cf050c10242046e6a89dfa24a3351904650cf09398d0cc6caab56c22aa3ccde50e348dd5a8fb863cbe329881bc53 icedtea-web-2.0.0-alpha29.tar.gz +" From be4b23bd947b79aa9c62b79a55c798d75789f79a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 30 Jan 2024 08:05:42 -0500 Subject: [PATCH 146/738] user/authentik: upgrade to 2023.10.7 --- user/authentik/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 36e8a55..999493e 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=authentik -pkgver=2023.10.6 +pkgver=2023.10.7 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" @@ -236,7 +236,7 @@ package() { } sha512sums=" -31ab960d1070c61ee053456ca5f12255c99d56b0fee832b6c8540ba9a066babee956899f21f7bfe370fb7060b47aac5b88de17b821e0fd79b0643dd05aef82a6 authentik-2023.10.6.tar.gz +73d11fa0868b81a714ffd3da1869ee58387300863ec6951ee37d0ed332681f669153cfae8643f54fb5b4af8a95078de240d5636854f046b9d606f01ad6e71569 authentik-2023.10.7.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From df1ff99b073e20f962844f90fc78a488ec1628d6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 31 Jan 2024 10:49:24 -0500 Subject: [PATCH 147/738] user/icedtea-web: fix desktop application --- user/icedtea-web/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/icedtea-web/APKBUILD b/user/icedtea-web/APKBUILD index 225a4d1..18f4c40 100644 --- a/user/icedtea-web/APKBUILD +++ b/user/icedtea-web/APKBUILD @@ -3,7 +3,7 @@ pkgname=icedtea-web pkgver=2.0.0_alpha29 _pkgver=2.0.0-alpha29 -pkgrel=0 +pkgrel=1 pkgdesc='Additional components for OpenJDK - Browser plug-in and Web Start implementation' url='https://github.com/AdoptOpenJDK/IcedTea-Web' arch="x86_64" @@ -56,7 +56,7 @@ package() { install -Dm 644 launchers/javaws.png -t "$pkgdir"/usr/share/pixmaps for i in javaws.desktop.in itweb-settings.desktop.in policyeditor.desktop.in; do - sed 's|PATH_TO_JAVAWS|/usr/bin/javaws|' launchers/xdesktop.in/$i > "$pkgdir"/usr/share/applications/$i + sed 's|PATH_TO_JAVAWS|/usr/bin/javaws|' launchers/xdesktop.in/$i > "$pkgdir"/usr/share/applications/${i/.in/} done ## link binaries into /usr/bin + jre/bin From 03ecd212a18466b120f9381a0b75ade5485ada12 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 1 Feb 2024 11:21:11 -0500 Subject: [PATCH 148/738] user/mastodon: upgrade to 4.2.5 --- user/mastodon/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index d8f493c..e2a4d4e 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -3,7 +3,7 @@ pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.4 +pkgver=4.2.5 _gittag=v$pkgver pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" @@ -193,7 +193,7 @@ assets() { } sha512sums=" -9c52e0998947aaf4d1ccd70ffddee769bf1efec32a33225c602591b84940d0b478698309f385bf202e3feb62df183377c18007d01888ea882adfb2583b1820dc mastodon-v4.2.4.tar.gz +c594178010c296b581531d6e35887214441d6f1f44083578dbb38a3beeb64d968a171cba0a9335e8f8b27b45e957508ab3168ec0056b423bf8fb44abd0f5f6d5 mastodon-v4.2.5.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From 7b760382bbd616dea506605e9cfad33f423d0d03 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 3 Feb 2024 01:25:02 -0500 Subject: [PATCH 149/738] user/tandoor-recipes: upgrade to 1.5.12 --- user/tandoor-recipes/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 0ab8084..0d6acea 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=tandoor-recipes -pkgver=1.5.11 +pkgver=1.5.12 pkgrel=0 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." arch="noarch" @@ -125,7 +125,7 @@ package() { } sha512sums=" -66115802780679a9fc541b29638ad97b2de556afe40b62820180689a5e179f33efbdf1d8d92be67928e488705fe5a37e8c6b1b42b6e084f433ad45020b107f93 tandoor-recipes-1.5.11.tar.gz +ad1a6fafda996631dc162d16930e55498efea13564ce44e58efef887113bbe3479cb02188ab5aa05fb1dd78f85999fac774231fd34c750a33b00eab6ca4080d9 tandoor-recipes-1.5.12.tar.gz 6d53affec525207a86d8b26c6e5ac7a16586756520e5605f7fe1ea82212a93d051237da45893c8b4002a6663e7538d8e78ab7fc392dc420ba7e31e0cb11d3cae recipes.openrc 1ae29eb9342ad697d0e1e0cc600cd63c4ea6ce3f92b2bdc26602a95015b9ee91f1d40df65e92cad53b980fa3c15989ca9874bd0df62d6c7030ea97d396e37d2c recipes.nginx 521bc8c71bbf900bb37ef2db4d79ab16c3a068d74de57d8cfbe82feffab6041c58f94ddbb57ac1f8feb68535dd32679b79169454abfc4fa04548b025282ca507 recipes-manage.sh From 72e1de3224da9d28e48539b59f849357a521a006 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 3 Feb 2024 12:48:06 -0500 Subject: [PATCH 150/738] backports/thelounge: new aport --- backports/thelounge/APKBUILD | 81 ++++++++++++++++++++++ backports/thelounge/no-version-test.patch | 19 +++++ backports/thelounge/thelounge.initd | 14 ++++ backports/thelounge/thelounge.post-install | 13 ++++ backports/thelounge/thelounge.pre-install | 6 ++ 5 files changed, 133 insertions(+) create mode 100644 backports/thelounge/APKBUILD create mode 100644 backports/thelounge/no-version-test.patch create mode 100644 backports/thelounge/thelounge.initd create mode 100644 backports/thelounge/thelounge.post-install create mode 100644 backports/thelounge/thelounge.pre-install diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD new file mode 100644 index 0000000..a08de3a --- /dev/null +++ b/backports/thelounge/APKBUILD @@ -0,0 +1,81 @@ +# Contributor: Kay Thomas +# Maintainer: Kay Thomas +pkgname=thelounge +pkgver=4.4.1 +pkgrel=0 +pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" +url="https://thelounge.chat" +# x86: textrels +# s390x: fails to check +# riscv64: fails to build +arch="all !x86 !s390x !riscv64" +license="MIT" +depends="nodejs" +makedepends="yarn npm python3" +subpackages="$pkgname-openrc" +pkgusers="thelounge" +pkggroups="thelounge" +install="$pkgname.pre-install $pkgname.post-install" +source="$pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz + no-version-test.patch + thelounge.initd + " +options="net" # npm + +prepare() { + default_prepare + + yarn install --frozen-lockfile +} + +build() { + NODE_ENV=production yarn run build +} + +check() { + CI=yes yarn run test:mocha +} + +package() { + yarn install --production --ignore-scripts --prefer-offline + NODE_ENV=production npm install --unsafe-perm -g --prefix "$pkgdir"/usr + + # Remove incorrect symlink, copy correct files + rm "$pkgdir"/usr/lib/node_modules/thelounge + mkdir -p "$pkgdir"/usr/lib/node_modules/thelounge + cp -a index.js client public node_modules dist package.json "$pkgdir"/usr/lib/node_modules/thelounge/ + + # cleanup unused files + find "$pkgdir" -type f -a \( \ + -name "*.ts" \ + -o -name "webpack*" \ + -o -name "tsconfig*" \ + -o -name "babel.config*" \ + -o -name "README*" \ + -o -name "CHANGELOG*" \ + -o -name "*.map" \ + -o -name "LICENSE" \ + \) \ + -delete + + # Set home location + echo /var/lib/thelounge > \ + "$pkgdir"/usr/lib/node_modules/$pkgname/.thelounge_home + + # Add default config + # this is only read from 'home' so we have to just put everything in var/lib + install -dm755 -o thelounge -g thelounge \ + "$pkgdir"/var/lib/thelounge + install -m644 -o thelounge -g thelounge \ + "$pkgdir"/usr/lib/node_modules/$pkgname/dist/defaults/config.js \ + "$pkgdir"/var/lib/thelounge/config.js + + install -Dm755 "$srcdir"/$pkgname.initd \ + "$pkgdir"/etc/init.d/$pkgname +} + +sha512sums=" +7695121a713a23688bc6f52dae2574bab1288eea930fd50d4dd85037233e9f23bd8e460980c69cdd14ea8648da4720d84e8196547b6a18e69d2f478b43d6e29a thelounge-4.4.1.tar.gz +cbf80e23b0af8f0185699d6b03816c645c51b85fff7f163d3cd3d00296ed816b6ab01529b359fbfd549a79e8adb72bbc83bc7a389cf13e0afd50636ff79a138e no-version-test.patch +f367d27ebcc412ff03c12ae98e50aeae5051fb5ffa9da6220f664c59993ed0e330b55b3b41fe941d546634901163d006e318891b4b886f6c49a93e0888fccd3e thelounge.initd +" diff --git a/backports/thelounge/no-version-test.patch b/backports/thelounge/no-version-test.patch new file mode 100644 index 0000000..dfae092 --- /dev/null +++ b/backports/thelounge/no-version-test.patch @@ -0,0 +1,19 @@ +diff --git a/test/src/helperTest.ts b/test/src/helperTest.ts +index 2a8ddc8..22f0532 100644 +--- a/test/src/helperTest.ts ++++ b/test/src/helperTest.ts +@@ -40,14 +40,6 @@ describe("Helper", function () { + describe("#getVersion()", function () { + const version = Helper.getVersion(); + +- it("should mention it is served from source code", function () { +- expect(version).to.include("source"); +- }); +- +- it("should include a short Git SHA", function () { +- expect(version).to.match(/\([0-9a-f]{7,11} /); +- }); +- + it("should include a valid semver version", function () { + expect(version).to.match(/v[0-9]+\.[0-9]+\.[0-9]+/); + }); diff --git a/backports/thelounge/thelounge.initd b/backports/thelounge/thelounge.initd new file mode 100644 index 0000000..b10d1c5 --- /dev/null +++ b/backports/thelounge/thelounge.initd @@ -0,0 +1,14 @@ +#!/sbin/openrc-run + +supervisor=supervise-daemon +name="thelounge" +command="/usr/bin/thelounge" +command_args="start" +command_user="thelounge:thelounge" +command_background=true +pidfile="/run/thelounge.pid" + +depend() { + need net localmount + after firewall +} diff --git a/backports/thelounge/thelounge.post-install b/backports/thelounge/thelounge.post-install new file mode 100644 index 0000000..1651780 --- /dev/null +++ b/backports/thelounge/thelounge.post-install @@ -0,0 +1,13 @@ +#!/bin/sh + +cat >&2 <<-EOF +* +* The configuration is in /var/lib/thelounge/config.js. +* To add users, use the cli: +* doas -u thelounge thelounge .. +* e.g. +* doas -u thelounge thelounge add myuser +* +EOF + +exit 0 diff --git a/backports/thelounge/thelounge.pre-install b/backports/thelounge/thelounge.pre-install new file mode 100644 index 0000000..b91b1ef --- /dev/null +++ b/backports/thelounge/thelounge.pre-install @@ -0,0 +1,6 @@ +#!/bin/sh + +addgroup -S thelounge 2>/dev/null +adduser -S -D -H -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null + +exit 0 From ca2f264713467dbac3c27968a26cc35d775f6c1a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 31 Jan 2024 22:49:09 -0500 Subject: [PATCH 151/738] user/zotero: upgrade to 7.0.0_git20240131 --- user/zotero/APKBUILD | 48 +++-------- user/zotero/build-sh-fix.patch | 44 +++++++++++ user/zotero/xulrunner-get-alpine-firefox.diff | 79 ------------------- .../zotero/xulrunner-get-alpine-firefox.patch | 63 +++++++++++++++ 4 files changed, 119 insertions(+), 115 deletions(-) create mode 100644 user/zotero/build-sh-fix.patch delete mode 100644 user/zotero/xulrunner-get-alpine-firefox.diff create mode 100644 user/zotero/xulrunner-get-alpine-firefox.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index f489340..2ee3573 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,16 +1,13 @@ # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_git20230415 +pkgver=7.0.0_git20240131 pkgrel=0 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." -# fix firefox -#arch="x86_64" +arch="x86_64" url="https://github.com/zotero/zotero" _giturl="https://lab.ilot.io/mirrors/zotero" -_gittag_client=7.0.0_20230415 -_gittag_standalone=7.0.0_20230415 -_gittag_build=20230314 +_gittag_client=7.0.0._20240131 license="AGPL3" depends=" dbus-glib @@ -31,10 +28,9 @@ makedepends=" " source=" zotero.desktop - xulrunner-get-alpine-firefox.diff $_giturl-client/-/releases/$_gittag_client/downloads/tarball/zotero-client-$_gittag_client.tar.gz - $_giturl-standalone-build/-/releases/$_gittag_standalone/downloads/tarball/zotero-standalone-build-$_gittag_standalone.tar.gz - $_giturl-build/-/releases/$_gittag_build/downloads/tarball/zotero-build-$_gittag_build.tar.gz + xulrunner-get-alpine-firefox.patch + build-sh-fix.patch " builddir="$srcdir"/zotero-client-$_gittag_client options="!check" @@ -42,53 +38,33 @@ options="!check" prepare() { default_prepare - ln -s "$srcdir"/zotero-client-$_gittag_client "$srcdir"/zotero-client - ln -s "$srcdir"/zotero-build-$_gittag_build "$srcdir"/zotero-build - git init git commit --allow-empty -m 'Initial' - - npm i --legacy-peer-deps - - cd "$srcdir"/zotero-standalone-build* - patch -p1 -i "$srcdir"/xulrunner-get-alpine-firefox.diff - # We need to had '.git/HEAD' and '.git/config' to the archive as the build expects those - mkdir .git - echo '[remote "origin"]\nurl="http://github.com/zotero/zotero-standalone-build"' > .git/config - echo "$_gittag_standalone" > .git/HEAD - - ./fetch_xulrunner.sh -p l - ./fetch_pdftools } build() { + npm i --legacy-peer-deps NODE_OPTIONS=--openssl-legacy-provider npm run build - cd "$srcdir"/zotero-standalone-build* - scripts/dir_build -p l + SKIP_32=1 app/scripts/dir_build -p l } package() { install -dDm755 "$pkgdir"/usr/bin install -dDm755 "$pkgdir"/usr/lib/zotero - cp -r "$srcdir"/zotero-standalone-build*/staging/Zotero_linux-$CARCH/* "$pkgdir/usr/lib/zotero" - rm "$pkgdir/usr/lib/zotero/updater" + cp -r "$builddir"/app/staging/Zotero_linux-$CARCH/* "$pkgdir/usr/lib/zotero" ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" # Copy zotero icons to a standard location - install -Dm644 "$pkgdir/usr/lib/zotero/chrome/icons/default/default16.png" "$pkgdir/usr/share/icons/hicolor/16x16/apps/zotero.png" - install -Dm644 "$pkgdir/usr/lib/zotero/chrome/icons/default/default32.png" "$pkgdir/usr/share/icons/hicolor/32x32/apps/zotero.png" - install -Dm644 "$pkgdir/usr/lib/zotero/chrome/icons/default/default48.png" "$pkgdir/usr/share/icons/hicolor/48x48/apps/zotero.png" - install -Dm644 "$pkgdir/usr/lib/zotero/chrome/icons/default/default256.png" "$pkgdir/usr/share/icons/hicolor/256x256/apps/zotero.png" + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon128.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/zotero.png" # Close shell when launching sed -i -r 's:^("\$CALLDIR/zotero-bin" -app "\$CALLDIR/application.ini" "\$@"):exec \1:' "$pkgdir/usr/lib/zotero/zotero" } sha512sums=" e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -1002732c348e3caceb077b8595a3a8b5c15dc17bc9c443e8dc96f8efe82ee37d9b5d7241530d82188846007504a277fd261763a4c64c3c259d9130db3139043d xulrunner-get-alpine-firefox.diff -88ae8204fde34bd6b1595ddddc153ded3a3bfcaeb5d65ffd8398d58f41787ddd2ff35051c4f74e0c83483b6ec234f1bf987acbebccfe73ad31be5cb4b55cc403 zotero-client-7.0.0_20230415.tar.gz -2dad54ac1a75e9ed62eec9fe08081e6807ce0167992059d3b7cd7aee3fb4803c694dc852ffe27f82cbe162c7536f2d77c302a8f947b507c6548f729a8c9d3057 zotero-standalone-build-7.0.0_20230415.tar.gz -8379985c0da84d82bdba72a03daaf3afe80a30ef696a2da837cff12b23fdec75b62dd43061ede4687c6acc756181ecefd0a025a7fedce500137faba4ae3326ae zotero-build-20230314.tar.gz +27ca570df108cb9ffa48254f7cc5ef133371dcab652a12b2f636b87a2378d51afa6c118533d8b1779071441fa2b26663d2275db9d441f17dc7431dfdc90996ea zotero-client-7.0.0._20240131.tar.gz +74c99ba1dd4b23cb696936e18df9c4f55e178bf578818c1a858788c5ff261f8459f992cf4b59eed40e71d8143b4ee14e0a86ad558c2e376866afed52c1f6d74d xulrunner-get-alpine-firefox.patch +4e897cafc05eefbaf433cc17876d2c8c33f6a244b85418a9dd0e0c6b22528c770f175999ad5deaedeac4d4109496683879ac8420aa489230aad1800571790dfa build-sh-fix.patch " diff --git a/user/zotero/build-sh-fix.patch b/user/zotero/build-sh-fix.patch new file mode 100644 index 0000000..474d9d4 --- /dev/null +++ b/user/zotero/build-sh-fix.patch @@ -0,0 +1,44 @@ +diff --git a/app/build.sh.orig b/app/build.sh +index 649d629..642ce81 100755 +--- a/app/build.sh.orig ++++ b/app/build.sh +@@ -59,10 +59,7 @@ function abspath { + } + + function check_lfs_file { +- if [ "$(head --bytes 5 "$1")" = "versi" ]; then +- echo "$1 not checked out -- install Git LFS and run 'git lfs pull'" >&2 +- exit 1 +- fi ++ return 0 + } + + SOURCE_DIR="" +@@ -840,18 +837,13 @@ if [ $BUILD_LINUX == 1 ]; then + cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" + + # Use our own launcher that calls the original Firefox executable with -app +- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin ++ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin + cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero + + # Copy Ubuntu launcher files + cp "$CALLDIR/linux/zotero.desktop" "$APPDIR" + cp "$CALLDIR/linux/set_launcher_icon" "$APPDIR" + +- # Use our own updater, because Mozilla's requires updates signed by Mozilla +- check_lfs_file "$CALLDIR/linux/updater.tar.xz" +- tar xf "$CALLDIR/linux/updater.tar.xz" --to-stdout updater-$arch > "$APPDIR/updater" +- chmod 755 "$APPDIR/updater" +- + # Copy app files + rsync -a "$base_dir/" "$APPDIR/" + +@@ -860,6 +852,7 @@ if [ $BUILD_LINUX == 1 ]; then + cp -RH "$CALLDIR/modules/zotero-libreoffice-integration/install" "$APPDIR/integration/libreoffice" + + # Copy icons ++ mkdir -p "$APPDIR"/icons + cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/symbolic.svg" "$APPDIR/icons/" + diff --git a/user/zotero/xulrunner-get-alpine-firefox.diff b/user/zotero/xulrunner-get-alpine-firefox.diff deleted file mode 100644 index 3207016..0000000 --- a/user/zotero/xulrunner-get-alpine-firefox.diff +++ /dev/null @@ -1,79 +0,0 @@ -diff --git a/fetch_xulrunner.sh.orig b/fetch_xulrunner.sh -index b1e812f..ca3caa5 100755 ---- a/fetch_xulrunner.sh.orig -+++ b/fetch_xulrunner.sh -@@ -114,15 +114,6 @@ function modify_omni { - replace_line 'MOZ_CRASHREPORTER:' 'MOZ_CRASHREPORTER: false \&\&' modules/AppConstants.jsm - replace_line 'MOZ_UPDATE_CHANNEL:.+' 'MOZ_UPDATE_CHANNEL: "none",' modules/AppConstants.jsm - replace_line '"https:\/\/[^\/]+mozilla.com.+"' '""' modules/AppConstants.jsm -- -- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { -- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); -- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); -- Services.obs.notifyObservers(update, "update-available", "show-prompt"); -- return; -- } -- if (!updateAuto) {' modules/UpdateService.jsm -- - replace_line 'pref\("network.captive-portal-service.enabled".+' 'pref("network.captive-portal-service.enabled", false);' greprefs.js - replace_line 'pref\("network.connectivity-service.enabled".+' 'pref("network.connectivity-service.enabled", false);' greprefs.js - replace_line 'pref\("toolkit.telemetry.server".+' 'pref("toolkit.telemetry.server", "");' greprefs.js -@@ -368,31 +359,13 @@ fi - - if [ $BUILD_LINUX == 1 ]; then - GECKO_VERSION="$GECKO_VERSION_LINUX" -- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" - -- rm -rf firefox -- -- curl -O "$DOWNLOAD_URL/linux-i686/en-US/firefox-$GECKO_VERSION.tar.bz2" -- rm -rf firefox-i686 -- tar xvf firefox-$GECKO_VERSION.tar.bz2 -- mv firefox firefox-i686 -- -- pushd firefox-i686 -- modify_omni linux32 -- popd -- -- rm "firefox-$GECKO_VERSION.tar.bz2" -- -- curl -O "$DOWNLOAD_URL/linux-x86_64/en-US/firefox-$GECKO_VERSION.tar.bz2" - rm -rf firefox-x86_64 -- tar xvf firefox-$GECKO_VERSION.tar.bz2 -- mv firefox firefox-x86_64 -- -- pushd firefox-x86_64 -- modify_omni linux64 -- popd -- -- rm "firefox-$GECKO_VERSION.tar.bz2" -+ cp -r /usr/lib/firefox-esr firefox-x86_64 -+ -+ pushd firefox-x86_64 -+ modify_omni linux64 -+ popd - fi - - echo Done -diff --git a/build.sh.orig b/build.sh -index 893f9fb..51ae170 100755 ---- a/build.sh.orig -+++ b/build.sh -@@ -794,7 +794,7 @@ fi - - # Linux - if [ $BUILD_LINUX == 1 ]; then -- for arch in "i686" "x86_64"; do -+ for arch in "x86_64"; do - runtime_path="${LINUX_RUNTIME_PATH_PREFIX}${arch}" - - # Set up directory -@@ -807,7 +807,7 @@ if [ $BUILD_LINUX == 1 ]; then - cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" - - # Use our own launcher that calls the original Firefox executable with -app -- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin -+ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin - cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero - - # Copy Ubuntu launcher files diff --git a/user/zotero/xulrunner-get-alpine-firefox.patch b/user/zotero/xulrunner-get-alpine-firefox.patch new file mode 100644 index 0000000..28527dd --- /dev/null +++ b/user/zotero/xulrunner-get-alpine-firefox.patch @@ -0,0 +1,63 @@ +diff --git a/app/scripts/fetch_xulrunner.orig b/app/scripts/fetch_xulrunner +index 8b3d918..c6a96ff 100755 +--- a/app/scripts/fetch_xulrunner.orig ++++ b/app/scripts/fetch_xulrunner +@@ -132,15 +132,6 @@ function modify_omni { + # Continue using app.update.auto in prefs.js on Windows + replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.jsm + +- # Prompt if major update is available instead of installing automatically on restart +- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { +- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); +- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); +- Services.obs.notifyObservers(update, "update-available", "show-prompt"); +- return; +- } +- if (!updateAuto) {' modules/UpdateService.jsm +- + # Avoid console warning about resource://gre/modules/FxAccountsCommon.js + replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.jsm + +@@ -470,36 +461,15 @@ fi + + if [ $BUILD_LINUX == 1 ]; then + GECKO_VERSION="$GECKO_VERSION_LINUX" +- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" + ++ rm -rf firefox-x86_64 + +- # Include 32-bit build if not in CI +- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then +- arches="x86_64" +- else +- arches="i686 x86_64" +- fi +- for arch in $arches; do +- xdir="firefox-$arch" +- rm -rf $xdir +- +- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" +- if [ -e "$archived_file" ]; then +- echo "Using $archived_file" +- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" +- else +- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" +- fi +- +- tar xvf firefox-$GECKO_VERSION.tar.bz2 +- mv firefox firefox-$arch ++ cp -r /usr/lib/firefox-esr firefox-x86_64 ++ ++ pushd firefox-x86_64 ++ modify_omni linux64 ++ popd + +- pushd firefox-$arch +- modify_omni +- popd +- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux +- rm "firefox-$GECKO_VERSION.tar.bz2" +- done + fi + + echo Done From b9e95a4e585eef6ae94546278589082fc76140bb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 3 Feb 2024 14:09:29 -0500 Subject: [PATCH 152/738] user/zotero: merge firefox-esr and fix build --- user/firefox-esr/APKBUILD | 671 - user/zotero/APKBUILD | 362 +- .../allow-custom-rust-vendor.patch | 0 user/zotero/audio-lfs64.patch | 61 + .../avoid-redefinition.patch | 0 user/{firefox-esr => zotero}/bindgen.patch | 0 .../disable-moz-stackwalk.patch | 0 .../esr-metainfo.patch | 0 .../ffmpeg6-fixup.patch | 0 .../firefox-102.12.0-consolidated-1.patch | 343 + user/zotero/firefox-102.12.0-ffmpeg_6-1.patch | 79803 ++++++++++++++++ .../firefox-esr.post-upgrade | 0 user/{firefox-esr => zotero}/firefox.desktop | 0 .../fix-fortify-system-wrappers.patch | 0 .../fix-neon-aom.patch | 0 .../fix-rust-target.patch | 0 .../fix-webrtc-glibcisms.patch | 0 user/{firefox-esr => zotero}/gcc13.patch | 0 .../hunspell-dont-build-unused-function.patch | 69 + user/zotero/icu74.patch | 38 + user/zotero/lfs64.patch | 35 + user/{firefox-esr => zotero}/mallinfo.patch | 0 .../mozilla-location.keys | 0 user/zotero/mp4parse-rust-1.70.patch | 32 + user/zotero/no-ccache-stats.patch | 13 + user/zotero/ppc-musttail.patch | 30 + user/zotero/ppc-webrtc.patch | 23 + .../{firefox-esr => zotero}/python-deps.patch | 0 user/zotero/rust-lto-thin.patch | 12 + .../sandbox-fork.patch | 0 .../sandbox-largefile.patch | 0 .../sandbox-sched_setscheduler.patch | 0 user/{firefox-esr => zotero}/stab.h | 0 user/zotero/update-audio-pc.patch | 798 + user/zotero/utils-libc-lfs64.patch | 13 + user/{firefox-esr => zotero}/vendor-prefs.js | 0 user/zotero/zotero_build-modifications.diff | 104 + user/{firefox-esr => zotero}/zstandard.patch | 0 38 files changed, 81707 insertions(+), 700 deletions(-) delete mode 100644 user/firefox-esr/APKBUILD rename user/{firefox-esr => zotero}/allow-custom-rust-vendor.patch (100%) create mode 100644 user/zotero/audio-lfs64.patch rename user/{firefox-esr => zotero}/avoid-redefinition.patch (100%) rename user/{firefox-esr => zotero}/bindgen.patch (100%) rename user/{firefox-esr => zotero}/disable-moz-stackwalk.patch (100%) rename user/{firefox-esr => zotero}/esr-metainfo.patch (100%) rename user/{firefox-esr => zotero}/ffmpeg6-fixup.patch (100%) create mode 100644 user/zotero/firefox-102.12.0-consolidated-1.patch create mode 100644 user/zotero/firefox-102.12.0-ffmpeg_6-1.patch rename user/{firefox-esr => zotero}/firefox-esr.post-upgrade (100%) rename user/{firefox-esr => zotero}/firefox.desktop (100%) rename user/{firefox-esr => zotero}/fix-fortify-system-wrappers.patch (100%) rename user/{firefox-esr => zotero}/fix-neon-aom.patch (100%) rename user/{firefox-esr => zotero}/fix-rust-target.patch (100%) rename user/{firefox-esr => zotero}/fix-webrtc-glibcisms.patch (100%) rename user/{firefox-esr => zotero}/gcc13.patch (100%) create mode 100644 user/zotero/hunspell-dont-build-unused-function.patch create mode 100644 user/zotero/icu74.patch create mode 100644 user/zotero/lfs64.patch rename user/{firefox-esr => zotero}/mallinfo.patch (100%) rename user/{firefox-esr => zotero}/mozilla-location.keys (100%) create mode 100644 user/zotero/mp4parse-rust-1.70.patch create mode 100644 user/zotero/no-ccache-stats.patch create mode 100644 user/zotero/ppc-musttail.patch create mode 100644 user/zotero/ppc-webrtc.patch rename user/{firefox-esr => zotero}/python-deps.patch (100%) create mode 100644 user/zotero/rust-lto-thin.patch rename user/{firefox-esr => zotero}/sandbox-fork.patch (100%) rename user/{firefox-esr => zotero}/sandbox-largefile.patch (100%) rename user/{firefox-esr => zotero}/sandbox-sched_setscheduler.patch (100%) rename user/{firefox-esr => zotero}/stab.h (100%) create mode 100644 user/zotero/update-audio-pc.patch create mode 100644 user/zotero/utils-libc-lfs64.patch rename user/{firefox-esr => zotero}/vendor-prefs.js (100%) create mode 100644 user/zotero/zotero_build-modifications.diff rename user/{firefox-esr => zotero}/zstandard.patch (100%) diff --git a/user/firefox-esr/APKBUILD b/user/firefox-esr/APKBUILD deleted file mode 100644 index 3d091b4..0000000 --- a/user/firefox-esr/APKBUILD +++ /dev/null @@ -1,671 +0,0 @@ -# Contributor: Natanael Copa -# Contributor: Sören Tempel -# Maintainer: Natanael Copa -pkgname=firefox-esr -pkgver=102.10.0 -# Date of release, YY-MM-DD for metainfo file (see package()) -_releasedate=2023-04-11 -pkgrel=5 -pkgdesc="Firefox web browser - Extended Support Release" -url="https://www.mozilla.org/en-US/firefox/organizations/" -# s390x and riscv64: blocked by rust and cargo -# armhf: build failure on armhf due to wasm -# fix later -#arch="x86_64 armv7 aarch64 x86 ppc64le" -license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" -install="$pkgname.post-upgrade" -depends=" - ffmpeg-libavcodec - " -makedepends=" - alsa-lib-dev - automake - bsd-compat-headers - cargo - cbindgen - clang - dbus-glib-dev - gettext - gtk+3.0-dev - hunspell-dev - icu-dev>=69.1 - libevent-dev - libffi-dev - libjpeg-turbo-dev - libnotify-dev - libogg-dev - libtheora-dev - libtool - libvorbis-dev - libvpx-dev - libwebp-dev - libxcomposite-dev - libxt-dev - lld - llvm-dev - m4 - mesa-dev - nasm - nodejs - nspr-dev - nss-dev - pipewire-dev - pulseaudio-dev - py3-psutil - py3-zstandard - python3 - sed - wasi-sdk - wireless-tools-dev - zip - " -source="https://ftp.mozilla.org/pub/firefox/releases/${pkgver}esr/source/firefox-${pkgver}esr.source.tar.xz - allow-custom-rust-vendor.patch - avoid-redefinition.patch - bindgen.patch - disable-moz-stackwalk.patch - esr-metainfo.patch - firefox-esr-ffmpeg6.patch::https://dev.alpinelinux.org/archive/firefoxies/firefox-esr-ffmpeg6.patch - ffmpeg6-fixup.patch - fix-neon-aom.patch - fix-fortify-system-wrappers.patch - fix-rust-target.patch - fix-webrtc-glibcisms.patch - gcc13.patch - mallinfo.patch - python-deps.patch - sandbox-fork.patch - sandbox-largefile.patch - sandbox-sched_setscheduler.patch - zstandard.patch - - stab.h - - firefox.desktop - mozilla-location.keys - vendor-prefs.js - " - -builddir="$srcdir/firefox-$pkgver" -_mozappdir=/usr/lib/firefox-esr - -# help our shared-object scanner to find the libs -ldpath="$_mozappdir" - -# secfixes: -# 102.1.0-r0: -# - CVE-2022-2505 -# - CVE-2022-36314 -# - CVE-2022-36318 -# - CVE-2022-36319 -# 91.11.0-r0: -# - CVE-2022-2200 -# - CVE-2022-31744 -# - CVE-2022-34468 -# - CVE-2022-34470 -# - CVE-2022-34472 -# - CVE-2022-34478 -# - CVE-2022-34479 -# - CVE-2022-34481 -# - CVE-2022-34484 -# 91.10.0-r0: -# - CVE-2022-31736 -# - CVE-2022-31737 -# - CVE-2022-31738 -# - CVE-2022-31739 -# - CVE-2022-31740 -# - CVE-2022-31741 -# - CVE-2022-31742 -# - CVE-2022-31747 -# 91.9.1-r0: -# - CVE-2022-1529 -# - CVE-2022-1802 -# 91.9.0-r0: -# - CVE-2022-29909 -# - CVE-2022-29911 -# - CVE-2022-29912 -# - CVE-2022-29914 -# - CVE-2022-29916 -# - CVE-2022-29917 -# 91.8.0-r0: -# - CVE-2022-1097 -# - CVE-2022-1196 -# - CVE-2022-24713 -# - CVE-2022-28281 -# - CVE-2022-28282 -# - CVE-2022-28285 -# - CVE-2022-28286 -# - CVE-2022-28289 -# 91.7.0-r0: -# - CVE-2022-26381 -# - CVE-2022-26383 -# - CVE-2022-26384 -# - CVE-2022-26386 -# - CVE-2022-26387 -# 91.6.1-r0: -# - CVE-2022-26485 -# - CVE-2022-26486 -# 91.6.0-r0: -# - CVE-2022-22754 -# - CVE-2022-22756 -# - CVE-2022-22759 -# - CVE-2022-22760 -# - CVE-2022-22761 -# - CVE-2022-22763 -# - CVE-2022-22764 -# 91.5.0-r0: -# - CVE-2021-4140 -# - CVE-2022-22737 -# - CVE-2022-22738 -# - CVE-2022-22739 -# - CVE-2022-22740 -# - CVE-2022-22741 -# - CVE-2022-22742 -# - CVE-2022-22743 -# - CVE-2022-22744 -# - CVE-2022-22745 -# - CVE-2022-22746 -# - CVE-2022-22747 -# - CVE-2022-22748 -# - CVE-2022-22751 -# 91.4.0-r0: -# - CVE-2021-43536 -# - CVE-2021-43537 -# - CVE-2021-43538 -# - CVE-2021-43539 -# - CVE-2021-43541 -# - CVE-2021-43542 -# - CVE-2021-43543 -# - CVE-2021-43545 -# - CVE-2021-43546 -# 91.3.0-r0: -# - CVE-2021-38503 -# - CVE-2021-38504 -# - CVE-2021-38505 -# - CVE-2021-38506 -# - CVE-2021-38507 -# - CVE-2021-38508 -# - CVE-2021-38509 -# - CVE-2021-38510 -# 91.2.0-r0: -# - CVE-2021-32810 -# - CVE-2021-38492 -# - CVE-2021-38493 -# - CVE-2021-38495 -# - CVE-2021-38496 -# - CVE-2021-38497 -# - CVE-2021-38498 -# - CVE-2021-38500 -# - CVE-2021-38501 -# 78.13.0-r0: -# - CVE-2021-29980 -# - CVE-2021-29984 -# - CVE-2021-29985 -# - CVE-2021-29986 -# - CVE-2021-29988 -# - CVE-2021-29989 -# 78.12.0-r0: -# - CVE-2021-29970 -# - CVE-2021-29976 -# - CVE-2021-30547 -# 78.11.0-r0: -# - CVE-2021-29967 -# 78.10.0-r0: -# - CVE-2021-23961 -# - CVE-2021-23994 -# - CVE-2021-23995 -# - CVE-2021-23998 -# - CVE-2021-23999 -# - CVE-2021-24002 -# - CVE-2021-29945 -# - CVE-2021-29946 -# 78.9.0-r0: -# - CVE-2021-23981 -# - CVE-2021-23982 -# - CVE-2021-23984 -# - CVE-2021-23987 -# 78.8.0-r0: -# - CVE-2021-23968 -# - CVE-2021-23969 -# - CVE-2021-23973 -# - CVE-2021-23978 -# 78.7.0-r0: -# - CVE-2020-26976 -# - CVE-2021-23953 -# - CVE-2021-23954 -# - CVE-2021-23960 -# - CVE-2021-23964 -# 78.6.1-r0: -# - CVE-2020-16044 -# 78.6.0-r0: -# - CVE-2020-16042 -# - CVE-2020-26971 -# - CVE-2020-26973 -# - CVE-2020-26974 -# - CVE-2020-26978 -# - CVE-2020-35111 -# - CVE-2020-35112 -# - CVE-2020-35113 -# 78.5.0-r0: -# - CVE-2020-15683 -# - CVE-2020-15969 -# - CVE-2020-15999 -# - CVE-2020-16012 -# - CVE-2020-26950 -# - CVE-2020-26951 -# - CVE-2020-26953 -# - CVE-2020-26956 -# - CVE-2020-26958 -# - CVE-2020-26959 -# - CVE-2020-26960 -# - CVE-2020-26961 -# - CVE-2020-26965 -# - CVE-2020-26966 -# - CVE-2020-26968 -# 78.3.0-r0: -# - CVE-2020-15673 -# - CVE-2020-15676 -# - CVE-2020-15677 -# - CVE-2020-15678 -# 78.2.0-r0: -# - CVE-2020-15663 -# - CVE-2020-15664 -# - CVE-2020-15670 -# 78.1.0-r0: -# - CVE-2020-15652 -# - CVE-2020-15653 -# - CVE-2020-15654 -# - CVE-2020-15655 -# - CVE-2020-15656 -# - CVE-2020-15657 -# - CVE-2020-15658 -# - CVE-2020-15659 -# - CVE-2020-6463 -# - CVE-2020-6514 -# 68.10.0-r0: -# - CVE-2020-12417 -# - CVE-2020-12418 -# - CVE-2020-12419 -# - CVE-2020-12420 -# - CVE-2020-12421 -# 68.9.0-r0: -# - CVE-2020-12399 -# - CVE-2020-12405 -# - CVE-2020-12406 -# - CVE-2020-12410 -# 68.8.0-r0: -# - CVE-2020-12387 -# - CVE-2020-12388 -# - CVE-2020-12389 -# - CVE-2020-12392 -# - CVE-2020-12393 -# - CVE-2020-12395 -# - CVE-2020-6831 -# 68.7.0-r0: -# - CVE-2020-6821 -# - CVE-2020-6822 -# - CVE-2020-6825 -# 68.6.1-r0: -# - CVE-2020-6819 -# - CVE-2020-6820 -# 68.6.0-r0: -# - CVE-2019-20503 -# - CVE-2020-6805 -# - CVE-2020-6806 -# - CVE-2020-6807 -# - CVE-2020-6811 -# - CVE-2020-6812 -# - CVE-2020-6814 -# 68.5.0-r0: -# - CVE-2020-6796 -# - CVE-2020-6797 -# - CVE-2020-6798 -# - CVE-2020-6799 -# - CVE-2020-6800 -# 68.4.1-r0: -# - CVE-2019-17016 -# - CVE-2019-17022 -# - CVE-2019-17024 -# - CVE-2019-17026 -# 68.3.0-r0: -# - CVE-2019-17005 -# - CVE-2019-17008 -# - CVE-2019-17009 -# - CVE-2019-17010 -# - CVE-2019-17011 -# - CVE-2019-17012 -# 68.2.0-r0: -# - CVE-2019-11757 -# - CVE-2019-11758 -# - CVE-2019-11759 -# - CVE-2019-11760 -# - CVE-2019-11761 -# - CVE-2019-11762 -# - CVE-2019-11763 -# - CVE-2019-11764 -# - CVE-2019-15903 -# 68.1.0-r0: -# - CVE-2019-9812 -# - CVE-2019-11740 -# - CVE-2019-11742 -# - CVE-2019-11743 -# - CVE-2019-11744 -# - CVE-2019-11746 -# - CVE-2019-11752 -# 68.0.2-r0: -# - CVE-2019-11733 -# 68.0-r0: -# - CVE-2019-11709 -# - CVE-2019-11711 -# - CVE-2019-11712 -# - CVE-2019-11713 -# - CVE-2019-11715 -# - CVE-2019-11717 -# - CVE-2019-11719 -# - CVE-2019-11729 -# - CVE-2019-11730 -# - CVE-2019-9811 -# 60.7.2-r0: -# - CVE-2019-11708 -# 60.7.1-r0: -# - CVE-2019-11707 -# 60.7.0-r0: -# - CVE-2019-9815 -# - CVE-2019-9816 -# - CVE-2019-9817 -# - CVE-2019-9818 -# - CVE-2019-9819 -# - CVE-2019-9820 -# - CVE-2019-11691 -# - CVE-2019-11692 -# - CVE-2019-11693 -# - CVE-2019-7317 -# - CVE-2019-9797 -# - CVE-2018-18511 -# - CVE-2019-11694 -# - CVE-2019-11698 -# - CVE-2019-5798 -# - CVE-2019-9800 -# 60.6.1-r0: -# - CVE-2019-9810 -# - CVE-2019-9813 -# - CVE-2019-9790 -# - CVE-2019-9791 -# - CVE-2019-9792 -# - CVE-2019-9793 -# - CVE-2019-9794 -# - CVE-2019-9795 -# - CVE-2019-9796 -# - CVE-2019-9801 -# - CVE-2018-18506 -# - CVE-2019-9788 -# 60.5.2-r0: -# - CVE-2019-5785 -# - CVE-2018-18335 -# - CVE-2018-18356 -# 60.5.0-r0: -# - CVE-2018-18500 -# - CVE-2018-18505 -# - CVE-2018-18501 -# 52.6.0-r0: -# - CVE-2018-5089 -# - CVE-2018-5091 -# - CVE-2018-5095 -# - CVE-2018-5096 -# - CVE-2018-5097 -# - CVE-2018-5098 -# - CVE-2018-5099 -# - CVE-2018-5102 -# - CVE-2018-5103 -# - CVE-2018-5104 -# - CVE-2018-5117 -# 52.5.2-r0: -# - CVE-2017-7843 - -# we need this because cargo verifies checksums of all files in vendor -# crates when it builds and gives us no way to override or update the -# file sanely... so just clear out the file list -_clear_vendor_checksums() { - sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json -} - -export SHELL=/bin/sh -export BUILD_OFFICIAL=1 -export MOZILLA_OFFICIAL=1 -export USE_SHORT_LIBNAME=1 -export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system -export MOZ_APP_PROFILE="mozilla/firefox" -export MOZ_APP_REMOTINGNAME=firefox-esr -export MOZBUILD_STATE_PATH="$srcdir"/mozbuild -# disable desktop notifications -export MOZ_NOSPAM=1 -# Find our triplet JSON -export RUST_TARGET="$CTARGET" - -# Build with Clang, takes less RAM -export CC="clang" -export CXX="clang++" - -# set rpath so linker finds the libs -export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" - -# let firefox do this itself. -unset CARGO_PROFILE_RELEASE_OPT_LEVEL -unset CARGO_PROFILE_RELEASE_LTO - -export CFLAGS="$CFLAGS -O2" -export CXXFLAGS="$CXXFLAGS -O2 -Wno-deprecated-builtins" - -prepare() { - default_prepare - cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ - - base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key - - _clear_vendor_checksums audio_thread_priority - _clear_vendor_checksums target-lexicon-0.9.0 - _clear_vendor_checksums packed_simd_2 - _clear_vendor_checksums bindgen - - # webrtc does not build on these - case "$CARCH" in - ppc64le) - local webrtc_config="ac_add_options --disable-webrtc" - ;; - esac - case "$CARCH" in - armv7) - # broken here - local rust_simd="ac_add_options --disable-rust-simd" - ;; - *) - local rust_simd="ac_add_options --enable-rust-simd" - ;; - esac - - case "$CARCH" in - aarch64|arm*|x86*) - # disable-elf-hack: exists only on aarch64, arm*, x86, x86_64 - local arch_config="ac_add_options --disable-elf-hack" - ;; - esac - - # sandbox only supported here - case "$CARCH" in - x86*|armv7|aarch64) - local sandbox="ac_add_options --enable-sandbox" - ;; - *) - local sandbox="ac_add_options --disable-sandbox" - ;; - esac - - cat > base-mozconfig <<-EOF - # disable unwanted things - ac_add_options --disable-bootstrap - ac_add_options --disable-cargo-incremental - ac_add_options --disable-crashreporter - ac_add_options --disable-debug - ac_add_options --disable-debug-symbols - ac_add_options --disable-install-strip - ac_add_options --disable-jemalloc - ac_add_options --disable-strip - ac_add_options --disable-tests - ac_add_options --disable-updater - - # features - ac_add_options --enable-alsa - ac_add_options --enable-dbus - ac_add_options --enable-default-toolkit=cairo-gtk3-wayland - ac_add_options --enable-ffmpeg - ac_add_options --enable-hardening - ac_add_options --enable-linker=lld - ac_add_options --enable-necko-wifi - ac_add_options --enable-official-branding - ac_add_options --enable-optimize="$CFLAGS" - ac_add_options --enable-pulseaudio - ac_add_options --enable-release - ac_add_options --enable-update-channel=release - - # system libs - ac_add_options --enable-system-pixman - ac_add_options --with-system-ffi - ac_add_options --with-system-icu - ac_add_options --with-system-jpeg - ac_add_options --with-system-libevent - ac_add_options --with-system-libvpx - ac_add_options --with-system-nspr - ac_add_options --with-system-nss - ac_add_options --with-system-png - ac_add_options --with-system-webp - ac_add_options --with-system-zlib - - # misc - ac_add_options --allow-addon-sideload - ac_add_options --prefix=/usr - ac_add_options --with-app-name=firefox-esr - ac_add_options --with-distribution-id=org.alpinelinux - ac_add_options --with-libclang-path=/usr/lib - ac_add_options --with-unsigned-addon-scopes=app,system - ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot - ac_add_options --host=$CHOST - ac_add_options --target=$CTARGET - - # objdir - mk_add_options MOZ_OBJDIR="$builddir/obj" - - mk_add_options RUSTFLAGS="$RUSTFLAGS" - - # keys - # these are for alpine linux use only - ac_add_options --with-mozilla-api-keyfile="$builddir/mozilla-api-key" - - $arch_config - $rust_simd - $sandbox - $webrtc_config - EOF -} - -build() { - cat > .mozconfig base-mozconfig - - export MOZ_BUILD_DATE=$(date ${SOURCE_DATE_EPOCH:+ -d@${SOURCE_DATE_EPOCH}} "+%Y%m%d%H%M%S") - - # for lto - ulimit -n 4096 - - # can't be set here and fail - unset RUSTFLAGS - - local thinlto_jobs=${JOBS:-1} - - case "$CARCH" in - # on this platforms, lld seems to not utilise >1 threads for thinlto for some reason. - # at the same time, having more than 8 also crashes lld for firefox buildsystems (why?). - aarch64) - if [ $thinlto_jobs -gt 8 ]; then - thinlto_jobs=8 - fi - ;; - esac - - export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs" - - case "$CARCH" in - # lto for 64-bit systems only - aarch64|x86_64|ppc64le) - cat > .mozconfig base-mozconfig <<-EOF - ac_add_options --enable-lto=cross - EOF - esac - - ./mach build -} - -package() { - DESTDIR="$pkgdir" ./mach install - - local _png - for _png in ./browser/branding/official/default*.png; do - local i=${_png%.png} - i=${i##*/default} - install -Dm644 "$_png" \ - "$pkgdir"/usr/share/icons/hicolor/"$i"x"$i"/apps/firefox-esr.png - done - - install -Dm644 browser/branding/official/content/about-logo.png \ - "$pkgdir"/usr/share/icons/hicolor/192x192/apps/firefox-esr.png - install -Dm644 browser/branding/official/content/about-logo@2x.png \ - "$pkgdir"/usr/share/icons/hicolor/384x384/apps/firefox-esr.png - install -Dm644 browser/branding/official/content/about-logo.svg \ - "$pkgdir"/usr/share/icons/hicolor/scalable/apps/firefox-esr.svg - - install -Dm644 "$srcdir"/firefox.desktop \ - "$pkgdir"/usr/share/applications/firefox-esr.desktop - - # install our vendor prefs - install -Dm644 "$srcdir"/vendor-prefs.js \ - "$pkgdir"/$_mozappdir/browser/defaults/preferences/vendor.js - - # Generate appdata file - mkdir -p "$pkgdir"/usr/share/metainfo/ - export VERSION="$pkgver" - export DATE="$_releasedate" - envsubst < "$builddir"/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.appdata.xml.in > "$pkgdir"/usr/share/metainfo/org.mozilla.firefox-esr.appdata.xml - - # Replace duplicate binary with wrapper - # https://bugzilla.mozilla.org/show_bug.cgi?id=658850 - install -Dm755 /dev/stdin "$pkgdir"/usr/bin/firefox-esr <<- EOF - #!/bin/sh - exec $_mozappdir/firefox-esr "\$@" - EOF - rm "$pkgdir"/$_mozappdir/firefox-esr-bin - ln -sfv /usr/bin/firefox-esr "$pkgdir"/$_mozappdir/firefox-esr-bin -} - -sha512sums=" -f2b53c35bdd22a3de6f32699b832babcbf499667197c02dd50cf0b6cd956e0f4471f420938c2ab72f0a0686ed99fe74e3184afe9b5f7169130879b8f8fd99f0b firefox-102.10.0esr.source.tar.xz -4e584621145cf8add069c6dac18e805b3274a1ee402d84e924df2341f7d3c5be261a93ef51283bacbd606f47fbdc628c4323ecc31efc5b403b8d224b18dc278f allow-custom-rust-vendor.patch -b1cb2db3122634f66d2bae7066e76f2dcd455c464e021db4de3b0a08314df95cb667846081682db549dd2af8a00831cabe44a2420c66cdfb5e3b5fa7e6bd21d3 avoid-redefinition.patch -0f793fc991e35ac17585c7ab5f86fe5925401bb9512167909706b85b51155e28b037e3a7ab775b243804195477ade36ec4ab32c3118885c52364079526ae26a9 bindgen.patch -454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch -f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch -a13dee87adf659423f5b3fa0358cfbde135fa614c85dd170d1a48d32ee080e27aef062d3a8e3c45059c41463fda579f8900988166ccb51568793ee7ef9080d04 firefox-esr-ffmpeg6.patch -c2e17f269070d782154f843b95bf68be25d8c4356825dd436b1877aab63ac023051899371da5c21f6151970b2562376c2dadd2d6a038446e5fa621e2495668e1 ffmpeg6-fixup.patch -d3a54897089eda9fdfe4b25ade1cb2c01c4b31fa9bf0e0ddbb0bbe674072ec5d36a6e52f791a8cbc8d3908e912ac2d7edec69b34d87ecca0acca876d45974c8d fix-neon-aom.patch -2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch -cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch -305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch -49aa1dfbe11ed5370e839afb190da7f55ae4887b35645865efe25d398d890563722caedd5696d648ad71448621fbc8bab8def1a3d079e301d6414f0f20e96758 gcc13.patch -a4a3e062661bda64d502d426c480ac9645345860118de9df9ffe6e0597738c70c11e5cdef2d4fd12c5e2ee30a09310159230524655a419a4f7e4eeeb0f3c06b0 mallinfo.patch -f3d419880cc7f043b6eb547894d486457d407640be2bd8b402eb3a534ccea39568f6d506fc44a3b29c94eb0dc6fc2bec6600d161786fd233d26b1dc8970f5ab4 python-deps.patch -2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch -b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch -94433c5ffdbe579c456d95c5f053f61fcbab2f652fa90bc69dcc27d9a1507a8e5c677adeadae9a7a75cc9a55184c1040737f4dfd10b279c088ef016561e6f135 sandbox-sched_setscheduler.patch -12fbe50d94624931a581314b8e6e228a1f8a4550704a6ee4f8904184ac4727efd90982e87a8fdd318e15515f9430dfc6cf7455b301e903003027b3f0afa79795 zstandard.patch -0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h -d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d100fa33d61a9a1a13477687d5eac99e50ae7dbef9882a5808 firefox.desktop -382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys -fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js -" diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 2ee3573..7c0553b 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,58 +1,334 @@ +# Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) - pkgname=zotero pkgver=7.0.0_git20240131 -pkgrel=0 +pkgrel=2 +_fxver=102.15.1 +# Date of release, YY-MM-DD for metainfo file (see package()) +_releasedate=2024-02-02 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." arch="x86_64" url="https://github.com/zotero/zotero" -_giturl="https://lab.ilot.io/mirrors/zotero" -_gittag_client=7.0.0._20240131 -license="AGPL3" +_gittag=7.0.0._20240131 +license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" +options="!check" # No test suite depends=" - dbus-glib - gtk+3.0 - nss - libxt + ffmpeg-libavcodec " makedepends=" - npm - grep - zip - unzip - perl - python3 + alsa-lib-dev + automake + bash + bsd-compat-headers + cargo + cbindgen + clang + clang-libclang curl + dbus-glib-dev + gettext + grep + gtk+3.0-dev + hunspell-dev + icu-dev>=69.1 + libevent-dev + libffi-dev + libjpeg-turbo-dev + libnotify-dev + libogg-dev + libtheora-dev + libtool + libvorbis-dev + libvpx-dev + libwebp-dev + libxcomposite-dev + libxt-dev + lld + llvm-dev + m4 + mesa-dev + nasm nodejs - firefox-esr~=102 + npm + nspr-dev + nss-dev + perl + pipewire-dev + pulseaudio-dev + py3-psutil + py3-zstandard + python3 + sed + unzip + wasi-sdk + wireless-tools-dev + zip " source=" + https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz + allow-custom-rust-vendor.patch + audio-lfs64.patch + avoid-redefinition.patch + disable-moz-stackwalk.patch + esr-metainfo.patch + firefox-102.12.0-ffmpeg_6-1.patch + ffmpeg6-fixup.patch + fix-neon-aom.patch + fix-fortify-system-wrappers.patch + fix-rust-target.patch + fix-webrtc-glibcisms.patch + gcc13.patch + mallinfo.patch + python-deps.patch + rust-lto-thin.patch + sandbox-fork.patch + sandbox-largefile.patch + sandbox-sched_setscheduler.patch + zstandard.patch + icu74.patch + lfs64.patch + hunspell-dont-build-unused-function.patch + utils-libc-lfs64.patch + + stab.h + + firefox.desktop + mozilla-location.keys + vendor-prefs.js + zotero.desktop - $_giturl-client/-/releases/$_gittag_client/downloads/tarball/zotero-client-$_gittag_client.tar.gz - xulrunner-get-alpine-firefox.patch - build-sh-fix.patch + https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz + zotero_build-modifications.diff " -builddir="$srcdir"/zotero-client-$_gittag_client -options="!check" + +builddir="$srcdir"/firefox-$_fxver +_zoterodir="$srcdir"/zotero-client-$_gittag + +# we need this because cargo verifies checksums of all files in vendor +# crates when it builds and gives us no way to override or update the +# file sanely... so just clear out the file list +_clear_vendor_checksums() { + sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json +} + +export SHELL=/bin/sh +export BUILD_OFFICIAL=1 +export MOZILLA_OFFICIAL=1 +export USE_SHORT_LIBNAME=1 +export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system +export MOZ_APP_PROFILE="mozilla/firefox" +export MOZ_APP_REMOTINGNAME=firefox-esr +export MOZBUILD_STATE_PATH="$srcdir"/mozbuild +# disable desktop notifications +export MOZ_NOSPAM=1 +# Find our triplet JSON +export RUST_TARGET="$CTARGET" + +# Build with Clang, takes less RAM +export CC="clang" +export CXX="clang++" + +# let firefox do this itself. +unset CARGO_PROFILE_RELEASE_OPT_LEVEL +unset CARGO_PROFILE_RELEASE_LTO + +export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2" +export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations" +export LDFLAGS="$LDFLAGS -Wl,--undefined-version" prepare() { default_prepare + cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ - git init - git commit --allow-empty -m 'Initial' + base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key + + _clear_vendor_checksums audio_thread_priority + _clear_vendor_checksums target-lexicon-0.9.0 + _clear_vendor_checksums packed_simd_2 + _clear_vendor_checksums bindgen + _clear_vendor_checksums mp4parse + _clear_vendor_checksums getrandom + + # webrtc does not build on these + case "$CARCH" in + ppc64le) + local webrtc_config="ac_add_options --disable-webrtc" + ;; + esac + case "$CARCH" in + armv7) + # broken here + local rust_simd="ac_add_options --disable-rust-simd" + ;; + *) + local rust_simd="ac_add_options --enable-rust-simd" + ;; + esac + + case "$CARCH" in + aarch64|arm*|x86*) + # disable-elf-hack: exists only on aarch64, arm*, x86, x86_64 + local arch_config="ac_add_options --disable-elf-hack" + ;; + esac + + # sandbox only supported here + case "$CARCH" in + x86*|armv7|aarch64) + local sandbox="ac_add_options --enable-sandbox" + ;; + *) + local sandbox="ac_add_options --disable-sandbox" + ;; + esac + + cat > base-mozconfig <<-EOF + # disable unwanted things + ac_add_options --disable-bootstrap + ac_add_options --disable-cargo-incremental + ac_add_options --disable-crashreporter + ac_add_options --disable-debug + ac_add_options --disable-debug-symbols + ac_add_options --disable-install-strip + ac_add_options --disable-jemalloc + ac_add_options --disable-strip + ac_add_options --disable-tests + ac_add_options --disable-updater + + # features + ac_add_options --enable-alsa + ac_add_options --enable-dbus + ac_add_options --enable-default-toolkit=cairo-gtk3-wayland + ac_add_options --enable-ffmpeg + ac_add_options --enable-hardening + ac_add_options --enable-linker=lld + ac_add_options --enable-necko-wifi + ac_add_options --enable-official-branding + ac_add_options --enable-optimize="$CFLAGS" + ac_add_options --enable-pulseaudio + ac_add_options --enable-release + ac_add_options --enable-update-channel=release + + # system libs + ac_add_options --enable-system-pixman + ac_add_options --with-system-ffi + ac_add_options --with-system-icu + ac_add_options --with-system-jpeg + ac_add_options --with-system-libevent + ac_add_options --with-system-libvpx + ac_add_options --with-system-nspr + ac_add_options --with-system-nss + ac_add_options --with-system-png + ac_add_options --with-system-webp + ac_add_options --with-system-zlib + + # misc + ac_add_options --allow-addon-sideload + ac_add_options --prefix=/usr + ac_add_options --with-app-name=firefox-esr + ac_add_options --with-distribution-id=org.alpinelinux + ac_add_options --with-libclang-path=/usr/lib + ac_add_options --with-unsigned-addon-scopes=app,system + ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot + ac_add_options --host=$CHOST + ac_add_options --target=$CTARGET + + # objdir + mk_add_options MOZ_OBJDIR="$builddir/obj" + + mk_add_options RUSTFLAGS="$RUSTFLAGS" + + # keys + # these are for alpine linux use only + ac_add_options --with-mozilla-api-keyfile="$builddir/mozilla-api-key" + + $arch_config + $rust_simd + $sandbox + $webrtc_config + EOF + + # zotero prepare + ( + cd "$_zoterodir" + # zotero build expects to be in a git repo + git init + git commit --allow-empty -m 'Initial' + + # zorero patches + for i in $source; do + case ${i%::*} in + *.diff) + msg ${i%::*} + patch ${patch_args:--p1} -i "$srcdir/$(filename_from_uri $i)" + ;; + esac + done + ) } build() { - npm i --legacy-peer-deps - NODE_OPTIONS=--openssl-legacy-provider npm run build + cat > .mozconfig base-mozconfig - SKIP_32=1 app/scripts/dir_build -p l + export MOZ_BUILD_DATE=$(date ${SOURCE_DATE_EPOCH:+ -d@${SOURCE_DATE_EPOCH}} "+%Y%m%d%H%M%S") + + # for lto + ulimit -n 4096 + + # can't be set here and fail + unset RUSTFLAGS + + local thinlto_jobs=${JOBS:-1} + + case "$CARCH" in + # on this platforms, lld seems to not utilise >1 threads for thinlto for some reason. + # at the same time, having more than 8 also crashes lld for firefox buildsystems (why?). + aarch64) + if [ $thinlto_jobs -gt 8 ]; then + thinlto_jobs=8 + fi + ;; + esac + + case "$CARCH" in + x86) + # the i586 baseline cannot compile firefox + export CFLAGS="$CFLAGS -march=pentium4" + export CXXFLAGS="$CXXFLAGS -march=pentium4" + ;; + esac + + export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs" + + case "$CARCH" in + # lto for 64-bit systems only + aarch64|x86_64|ppc64le) + cat > .mozconfig base-mozconfig <<-EOF + ac_add_options --enable-lto=cross + EOF + esac + + ./mach build + + # install to where zotero expects it + DESTDIR="$_zoterodir"/app/xulrunner/firefox-$CARCH ./mach install + mv "$_zoterodir"/app/xulrunner/firefox-$CARCH/usr/lib/firefox-esr/* "$_zoterodir"/app/xulrunner/firefox-$CARCH/. + rm -R "$_zoterodir"/app/xulrunner/firefox-$CARCH/usr + + # zotero build + ( + cd "$_zoterodir" + npm i --legacy-peer-deps + NODE_OPTIONS=--openssl-legacy-provider npm run build + + SKIP_32=1 app/scripts/dir_build -p l + ) } package() { install -dDm755 "$pkgdir"/usr/bin install -dDm755 "$pkgdir"/usr/lib/zotero - cp -r "$builddir"/app/staging/Zotero_linux-$CARCH/* "$pkgdir/usr/lib/zotero" + cp -r "$_zoterodir"/app/staging/Zotero_linux-$CARCH/* "$pkgdir/usr/lib/zotero" ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" @@ -62,9 +338,37 @@ package() { # Close shell when launching sed -i -r 's:^("\$CALLDIR/zotero-bin" -app "\$CALLDIR/application.ini" "\$@"):exec \1:' "$pkgdir/usr/lib/zotero/zotero" } + sha512sums=" +bdb66b4fb5622af3e60580a3bcd464d98ef13cb38d6ac6c9e5fc046e567a003cf080125d7748950c91c442fde5e8024c50c4180d2f551aa3528160a3c05ae187 firefox-102.15.1esr.source.tar.xz +4e584621145cf8add069c6dac18e805b3274a1ee402d84e924df2341f7d3c5be261a93ef51283bacbd606f47fbdc628c4323ecc31efc5b403b8d224b18dc278f allow-custom-rust-vendor.patch +3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch +b1cb2db3122634f66d2bae7066e76f2dcd455c464e021db4de3b0a08314df95cb667846081682db549dd2af8a00831cabe44a2420c66cdfb5e3b5fa7e6bd21d3 avoid-redefinition.patch +454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch +f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch +a13dee87adf659423f5b3fa0358cfbde135fa614c85dd170d1a48d32ee080e27aef062d3a8e3c45059c41463fda579f8900988166ccb51568793ee7ef9080d04 firefox-102.12.0-ffmpeg_6-1.patch +c2e17f269070d782154f843b95bf68be25d8c4356825dd436b1877aab63ac023051899371da5c21f6151970b2562376c2dadd2d6a038446e5fa621e2495668e1 ffmpeg6-fixup.patch +d3a54897089eda9fdfe4b25ade1cb2c01c4b31fa9bf0e0ddbb0bbe674072ec5d36a6e52f791a8cbc8d3908e912ac2d7edec69b34d87ecca0acca876d45974c8d fix-neon-aom.patch +2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch +cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch +305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch +49aa1dfbe11ed5370e839afb190da7f55ae4887b35645865efe25d398d890563722caedd5696d648ad71448621fbc8bab8def1a3d079e301d6414f0f20e96758 gcc13.patch +a4a3e062661bda64d502d426c480ac9645345860118de9df9ffe6e0597738c70c11e5cdef2d4fd12c5e2ee30a09310159230524655a419a4f7e4eeeb0f3c06b0 mallinfo.patch +f3d419880cc7f043b6eb547894d486457d407640be2bd8b402eb3a534ccea39568f6d506fc44a3b29c94eb0dc6fc2bec6600d161786fd233d26b1dc8970f5ab4 python-deps.patch +9f433c8051d05efb8b119e0b67b97951837aca6a8c5671646714a24023be11a9d63fa7c4e56a6c7f3911c9d8406b06cd95926de1a82925d02197dfd55daf5642 rust-lto-thin.patch +2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch +b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch +94433c5ffdbe579c456d95c5f053f61fcbab2f652fa90bc69dcc27d9a1507a8e5c677adeadae9a7a75cc9a55184c1040737f4dfd10b279c088ef016561e6f135 sandbox-sched_setscheduler.patch +12fbe50d94624931a581314b8e6e228a1f8a4550704a6ee4f8904184ac4727efd90982e87a8fdd318e15515f9430dfc6cf7455b301e903003027b3f0afa79795 zstandard.patch +afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c6033e9b888f02775d1b0443a00329b7a632ee399122a391c13a icu74.patch +5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch +6aa925477109ed3be8f061fe1ea91caf95c7a7f5cca05c3e31322d08c3c2c044fb12bb1dbea09cd224b22e40e987571e415c6457aa5cab6a0b67f248f11b3df2 hunspell-dont-build-unused-function.patch +2625dcf433abbfa4c6835830b04c7b8cab72fba3a987515a6ba8e4f181332e804d98ccfbcc07e62c673be50db04c80d0f51c415173bb18cf4d18dc1364e165d0 utils-libc-lfs64.patch +0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h +d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d100fa33d61a9a1a13477687d5eac99e50ae7dbef9882a5808 firefox.desktop +382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys +fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop 27ca570df108cb9ffa48254f7cc5ef133371dcab652a12b2f636b87a2378d51afa6c118533d8b1779071441fa2b26663d2275db9d441f17dc7431dfdc90996ea zotero-client-7.0.0._20240131.tar.gz -74c99ba1dd4b23cb696936e18df9c4f55e178bf578818c1a858788c5ff261f8459f992cf4b59eed40e71d8143b4ee14e0a86ad558c2e376866afed52c1f6d74d xulrunner-get-alpine-firefox.patch -4e897cafc05eefbaf433cc17876d2c8c33f6a244b85418a9dd0e0c6b22528c770f175999ad5deaedeac4d4109496683879ac8420aa489230aad1800571790dfa build-sh-fix.patch +dca620aa9a96c83d7a81cf11a2a1cf84ef94a1c06688cf00e2b03fd3fd671b6bd08094b7f76ef0f92cbfc2a9a97317855e5b39d17d51054ea3c539d2b3ee0ab2 zotero_build-modifications.diff " diff --git a/user/firefox-esr/allow-custom-rust-vendor.patch b/user/zotero/allow-custom-rust-vendor.patch similarity index 100% rename from user/firefox-esr/allow-custom-rust-vendor.patch rename to user/zotero/allow-custom-rust-vendor.patch diff --git a/user/zotero/audio-lfs64.patch b/user/zotero/audio-lfs64.patch new file mode 100644 index 0000000..c34671a --- /dev/null +++ b/user/zotero/audio-lfs64.patch @@ -0,0 +1,61 @@ +--- a/third_party/rust/audio_thread_priority/src/rt_linux.rs ++++ b/third_party/rust/audio_thread_priority/src/rt_linux.rs +@@ -112,7 +112,7 @@ + + /// Returns the maximum priority, maximum real-time time slice, and the current real-time time + /// slice for this process. +-fn get_limits() -> Result<(i64, u64, libc::rlimit64), AudioThreadPriorityError> { ++fn get_limits() -> Result<(i64, u64, libc::rlimit), AudioThreadPriorityError> { + let c = Connection::get_private(BusType::System)?; + + let p = Props::new( +@@ -122,7 +122,7 @@ + "org.freedesktop.RealtimeKit1", + DBUS_SOCKET_TIMEOUT, + ); +- let mut current_limit = libc::rlimit64 { ++ let mut current_limit = libc::rlimit { + rlim_cur: 0, + rlim_max: 0, + }; +@@ -141,9 +141,9 @@ + )); + } + +- if unsafe { libc::getrlimit64(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { ++ if unsafe { libc::getrlimit(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "getrlimit64", ++ "getrlimit", + Box::new(OSError::last_os_error()), + )); + } +@@ -154,13 +154,13 @@ + fn set_limits(request: u64, max: u64) -> Result<(), AudioThreadPriorityError> { + // Set a soft limit to the limit requested, to be able to handle going over the limit using + // SIGXCPU. Set the hard limit to the maxium slice to prevent getting SIGKILL. +- let new_limit = libc::rlimit64 { ++ let new_limit = libc::rlimit { + rlim_cur: request, + rlim_max: max, + }; +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &new_limit) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &new_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } +@@ -296,9 +296,9 @@ + match r { + Ok(_) => Ok(handle), + Err(e) => { +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &limits) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &limits) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } diff --git a/user/firefox-esr/avoid-redefinition.patch b/user/zotero/avoid-redefinition.patch similarity index 100% rename from user/firefox-esr/avoid-redefinition.patch rename to user/zotero/avoid-redefinition.patch diff --git a/user/firefox-esr/bindgen.patch b/user/zotero/bindgen.patch similarity index 100% rename from user/firefox-esr/bindgen.patch rename to user/zotero/bindgen.patch diff --git a/user/firefox-esr/disable-moz-stackwalk.patch b/user/zotero/disable-moz-stackwalk.patch similarity index 100% rename from user/firefox-esr/disable-moz-stackwalk.patch rename to user/zotero/disable-moz-stackwalk.patch diff --git a/user/firefox-esr/esr-metainfo.patch b/user/zotero/esr-metainfo.patch similarity index 100% rename from user/firefox-esr/esr-metainfo.patch rename to user/zotero/esr-metainfo.patch diff --git a/user/firefox-esr/ffmpeg6-fixup.patch b/user/zotero/ffmpeg6-fixup.patch similarity index 100% rename from user/firefox-esr/ffmpeg6-fixup.patch rename to user/zotero/ffmpeg6-fixup.patch diff --git a/user/zotero/firefox-102.12.0-consolidated-1.patch b/user/zotero/firefox-102.12.0-consolidated-1.patch new file mode 100644 index 0000000..6dfd9e1 --- /dev/null +++ b/user/zotero/firefox-102.12.0-consolidated-1.patch @@ -0,0 +1,343 @@ +Submitted By: Xi Ruoyao +Date: 2023-05-14 +Initial Package Version: 102.12.0esr +Upstream Status: Applied for nightly, but not ESR +Origin: + - The first patch comes from + - https://github.com/rust-lang/rust-bindgen/pull/2319 + - https://github.com/rust-lang/rust-bindgen/pull/2339 + And they are integrated into mozilla at + - https://hg.mozilla.org/mozilla-central/rev/bd3481bf45fb + - The second patch comes from + - https://hg.mozilla.org/mozilla-central/rev/61f052c26dd1 + - https://hg.mozilla.org/mozilla-central/rev/9fffd4b92c43 + - The third patch comes from + - https://hg.mozilla.org/mozilla-central/rev/1a15f95b880f + - The fourth patch comes from + - https://github.com/mozilla/mp4parse-rust/commit/8d58b2d5fc7f + And it's integrated into mozilla at + - https://hg.mozilla.org/mozilla-central/rev/a651d4323066 + A hack is added for Cargo.{toml,lock} to suppress sha256 check + +Description: The first patch updates the bundled rust-bindgen + crate to be compatible with Clang/LLVM 16. + Without this patch, you will encounter "not a valid + Ident" errors when building Firefox, and it will + come out of fallback.rs in proc-macro2. This + references mfbt/Vector.h (symlinked to + firefox-build-dir/dist/include/mozilla/Vector.h) in + it's error output, but it is because LLVM changed + how it reports anonymous items. + + The second patch adds missing "#include " + for three C++ headers and source files. Without + this patch, it will fail to build with C++ headers + from GCC 13. + + The third and fourth patches work around build + failures with Rustc-1.70.0. + +From 8e0b55b6029226d448ffc1c5465bf475ea0852c5 Mon Sep 17 00:00:00 2001 +From: Xi Ruoyao +Date: Sun, 14 May 2023 03:37:24 +0800 +Subject: [PATCH 1/4] cbindgen patch + +--- + third_party/rust/bindgen/src/clang.rs | 5 ++++ + third_party/rust/bindgen/src/ir/comp.rs | 3 +- + third_party/rust/bindgen/src/ir/ty.rs | 30 +++++++++++-------- + third_party/rust/bindgen/src/ir/var.rs | 8 ++--- + 5 files changed, 29 insertions(+), 19 deletions(-) + +diff --git a/third_party/rust/bindgen/src/clang.rs b/third_party/rust/bindgen/src/clang.rs +index 488660c434..ef74ac08c2 100644 +--- a/third_party/rust/bindgen/src/clang.rs ++++ b/third_party/rust/bindgen/src/clang.rs +@@ -54,6 +54,11 @@ impl Cursor { + unsafe { clang_isDeclaration(self.kind()) != 0 } + } + ++ /// Is this cursor's referent an anonymous record or so? ++ pub fn is_anonymous(&self) -> bool { ++ unsafe { clang_Cursor_isAnonymous(self.x) != 0 } ++ } ++ + /// Get this cursor's referent's spelling. + pub fn spelling(&self) -> String { + unsafe { cxstring_into_string(clang_getCursorSpelling(self.x)) } +diff --git a/third_party/rust/bindgen/src/ir/comp.rs b/third_party/rust/bindgen/src/ir/comp.rs +index 22c124fa36..b715616c5e 100644 +--- a/third_party/rust/bindgen/src/ir/comp.rs ++++ b/third_party/rust/bindgen/src/ir/comp.rs +@@ -1372,8 +1372,7 @@ impl CompInfo { + + // A declaration of an union or a struct without name could + // also be an unnamed field, unfortunately. +- if cur.spelling().is_empty() && +- cur.kind() != CXCursor_EnumDecl ++ if cur.is_anonymous() && cur.kind() != CXCursor_EnumDecl + { + let ty = cur.cur_type(); + let offset = cur.offset_of_field().ok(); +diff --git a/third_party/rust/bindgen/src/ir/ty.rs b/third_party/rust/bindgen/src/ir/ty.rs +index e6eecc3c50..f3e1193ce2 100644 +--- a/third_party/rust/bindgen/src/ir/ty.rs ++++ b/third_party/rust/bindgen/src/ir/ty.rs +@@ -737,7 +737,12 @@ impl Type { + + let layout = ty.fallible_layout(ctx).ok(); + let cursor = ty.declaration(); +- let mut name = cursor.spelling(); ++ let is_anonymous = cursor.is_anonymous(); ++ let mut name = if is_anonymous { ++ None ++ } else { ++ Some(cursor.spelling()).filter(|n| !n.is_empty()) ++ }; + + debug!( + "from_clang_ty: {:?}, ty: {:?}, loc: {:?}", +@@ -771,7 +776,7 @@ impl Type { + if is_canonical_objcpointer && is_template_type_param { + // Objective-C generics are just ids with fancy name. + // To keep it simple, just name them ids +- name = "id".to_owned(); ++ name = Some("id".to_owned()); + } + } + +@@ -900,7 +905,7 @@ impl Type { + return Err(ParseError::Recurse); + } + } else { +- name = location.spelling(); ++ name = Some(location.spelling()); + } + + let complex = CompInfo::from_ty( +@@ -942,7 +947,7 @@ impl Type { + CXType_Typedef + ); + +- name = current.spelling(); ++ name = Some(location.spelling()); + + let inner_ty = cur + .typedef_type() +@@ -1126,10 +1131,10 @@ impl Type { + CXType_Enum => { + let enum_ = Enum::from_ty(ty, ctx).expect("Not an enum?"); + +- if name.is_empty() { ++ if !is_anonymous { + let pretty_name = ty.spelling(); + if clang::is_valid_identifier(&pretty_name) { +- name = pretty_name; ++ name = Some(pretty_name); + } + } + +@@ -1144,12 +1149,12 @@ impl Type { + ) + .expect("Not a complex type?"); + +- if name.is_empty() { ++ if !is_anonymous { + // The pretty-printed name may contain typedefed name, + // but may also be "struct (anonymous at .h:1)" + let pretty_name = ty.spelling(); + if clang::is_valid_identifier(&pretty_name) { +- name = pretty_name; ++ name = Some(pretty_name); + } + } + +@@ -1161,8 +1166,7 @@ impl Type { + location, + None, + ctx, +- ) +- .expect("Not able to resolve vector element?"); ++ )?; + TypeKind::Vector(inner, ty.num_elements().unwrap()) + } + CXType_ConstantArray => { +@@ -1189,7 +1193,9 @@ impl Type { + CXType_ObjCClass | CXType_ObjCInterface => { + let interface = ObjCInterface::from_ty(&location, ctx) + .expect("Not a valid objc interface?"); +- name = interface.rust_name(); ++ if !is_anonymous { ++ name = Some(interface.rust_name()); ++ } + TypeKind::ObjCInterface(interface) + } + CXType_Dependent => { +@@ -1207,7 +1213,7 @@ impl Type { + } + }; + +- let name = if name.is_empty() { None } else { Some(name) }; ++ name = name.filter(|n| !n.is_empty()); + + let is_const = ty.is_const() || + (ty.kind() == CXType_ConstantArray && +diff --git a/third_party/rust/bindgen/src/ir/var.rs b/third_party/rust/bindgen/src/ir/var.rs +index c6f121d74e..30fb0b5ee8 100644 +--- a/third_party/rust/bindgen/src/ir/var.rs ++++ b/third_party/rust/bindgen/src/ir/var.rs +@@ -301,11 +301,11 @@ impl ClangSubItemParser for Var { + let ty = match Item::from_ty(&ty, cursor, None, ctx) { + Ok(ty) => ty, + Err(e) => { +- assert_eq!( +- ty.kind(), +- CXType_Auto, ++ assert!( ++ matches!(ty.kind(), CXType_Auto | CXType_Unexposed), + "Couldn't resolve constant type, and it \ +- wasn't an nondeductible auto type!" ++ wasn't an nondeductible auto type or unexposed \ ++ type!" + ); + return Err(e); + } +-- +2.40.1 + +From 2c22f8cc4756d3e492fe6be4be634fb592b4b0e3 Mon Sep 17 00:00:00 2001 +From: Xi Ruoyao +Date: Sun, 14 May 2023 03:37:04 +0800 +Subject: [PATCH 2/4] add missing + +--- + dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp | 1 + + gfx/2d/Rect.h | 1 + + toolkit/components/telemetry/pingsender/pingsender.cpp | 1 + + 3 files changed, 3 insertions(+) + +diff --git a/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp b/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp +index 8c8a0369c3..d43b4a1e0d 100644 +--- a/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp ++++ b/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp +@@ -3,6 +3,7 @@ + /* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ ++#include + #include + + #include "sdp/RsdparsaSdpInc.h" +diff --git a/gfx/2d/Rect.h b/gfx/2d/Rect.h +index 4875ad6714..f52437bbdc 100644 +--- a/gfx/2d/Rect.h ++++ b/gfx/2d/Rect.h +@@ -15,6 +15,7 @@ + #include "mozilla/Maybe.h" + + #include ++#include + + namespace mozilla { + +diff --git a/toolkit/components/telemetry/pingsender/pingsender.cpp b/toolkit/components/telemetry/pingsender/pingsender.cpp +index 01fdb63c29..ceda3b1945 100644 +--- a/toolkit/components/telemetry/pingsender/pingsender.cpp ++++ b/toolkit/components/telemetry/pingsender/pingsender.cpp +@@ -3,6 +3,7 @@ + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + ++#include + #include + #include + #include +-- +2.40.1 + +# HG changeset patch +# User Emilio Cobos Álvarez +# Date 1682520906 0 +# Node ID 1a15f95b880f3d4b5a427c750932c53a01b4897a +# Parent 17ea6f29654b2ff39d374073cec3e7116c1ec548 +[PATCH 3/4] Bug 1829964 - Allow ambiguous glob reexports for now in autogenerated bindings. r=glandium + +I started looking into removing these glob re-exports, but I couldn't +convince myself that the result was particularly better... + +Differential Revision: https://phabricator.services.mozilla.com/D176473 + +diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml +--- a/layout/style/ServoBindings.toml ++++ b/layout/style/ServoBindings.toml +@@ -35,16 +35,17 @@ headers = [ + "mozilla/SizeOfState.h", + "nsCSSProps.h", + "nsMappedAttributes.h", + "nsNameSpaceManager.h", + ] + raw-lines = [ + # FIXME(emilio): Incrementally remove these "pub use"s. Probably + # mozilla::css and mozilla::dom are easier. ++ "#[allow(unknown_lints, ambiguous_glob_reexports)]", + "pub use self::root::*;", + "pub use self::root::mozilla::*;", + "pub use self::root::mozilla::css::*;", + "pub use self::root::mozilla::dom::*;", + ] + hide-types = [ + ".*char_traits", + ".*incompatible_char_type", + +From 8b5b652d38e007e736bb442ccd5aa5ed699db100 Mon Sep 17 00:00:00 2001 +From: Matthew Gregan +Date: Thu, 16 Jun 2022 13:54:02 +1200 +Subject: [PATCH 4/4] Fix `unstable-name-collisions` warning by using fully + qualified path. + +--- + mp4parse/src/lib.rs | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/third_party/rust/mp4parse/src/lib.rs b/third_party/rust/mp4parse/src/lib.rs +index 567ee21d..4f3d7153 100644 +--- a/third_party/rust/mp4parse/src/lib.rs ++++ b/third_party/rust/mp4parse/src/lib.rs +@@ -3506,8 +3506,13 @@ macro_rules! impl_mul { + type Output = $output; + + fn mul(self, rhs: $rhs) -> Self::Output { +- static_assertions::const_assert!(<$output>::MAX <= <$inner>::MAX as u64); +- static_assertions::const_assert!(<$lhs>::MAX * <$rhs>::MAX <= <$output>::MAX); ++ static_assertions::const_assert!( ++ <$output as UpperBounded>::MAX <= <$inner>::MAX as u64 ++ ); ++ static_assertions::const_assert!( ++ <$lhs as UpperBounded>::MAX * <$rhs as UpperBounded>::MAX ++ <= <$output as UpperBounded>::MAX ++ ); + + let lhs: $inner = self.get().into(); + let rhs: $inner = rhs.get().into(); + +--- firefox-102.12.0.orig/Cargo.lock 2023-05-30 01:34:26.000000000 +0800 ++++ firefox-102.12.0/Cargo.lock 2023-06-04 18:52:58.494327811 +0800 +@@ -3407,7 +3407,6 @@ + [[package]] + name = "mp4parse" + version = "0.13.0" +-source = "git+https://github.com/mozilla/mp4parse-rust?rev=3bfc47d9a571d0842676043ba60716318e946c06#3bfc47d9a571d0842676043ba60716318e946c06" + dependencies = [ + "bitreader", + "byteorder", + +--- firefox-102.12.0.orig/Cargo.toml 2023-05-30 01:34:26.000000000 +0800 ++++ firefox-102.12.0/Cargo.toml 2023-06-04 18:52:44.365719856 +0800 +@@ -128,3 +128,7 @@ + # Patch fallible_collections for issues with rustc 1.65. + [patch.crates-io.fallible_collections] + path = "third_party/rust/fallible_collections" ++ ++# Patch mp4parse for issues with rustc-1.70. ++[patch."https://github.com/mozilla/mp4parse-rust"] ++mp4parse = { path = "third_party/rust/mp4parse" } diff --git a/user/zotero/firefox-102.12.0-ffmpeg_6-1.patch b/user/zotero/firefox-102.12.0-ffmpeg_6-1.patch new file mode 100644 index 0000000..4867026 --- /dev/null +++ b/user/zotero/firefox-102.12.0-ffmpeg_6-1.patch @@ -0,0 +1,79803 @@ +Submitted By: Pierre Labastie +Date: 2022-04-06 +Initial Package Version: 102.9.0esr +Upstream Status: Applied +Origin: upstream (rediffed for applying to 102.9) +Description: Update Gecko to use ffmpeg 6.0 APIs + +Without this patch, H.264 videos cannot be played. Fix taken from + https://hg.mozilla.org/mozilla-central/rev/467cc49519ff + https://hg.mozilla.org/mozilla-central/rev/c174bd2624e2 + https://hg.mozilla.org/mozilla-central/rev/2b8ef32d5cbe + https://hg.mozilla.org/mozilla-central/rev/86f5be2f7d24 + https://hg.mozilla.org/mozilla-central/rev/c0bdf286aeea + https://hg.mozilla.org/mozilla-central/rev/1d959fb3ed39 + https://hg.mozilla.org/mozilla-central/rev/72741c64ce30 + https://hg.mozilla.org/mozilla-central/rev/02ab0b6c0713 + https://hg.mozilla.org/mozilla-central/rev/f35fdcd00b92 + https://hg.mozilla.org/mozilla-central/rev/f446b3e633af + https://hg.mozilla.org/mozilla-central/rev/3ace3ff557d1 + https://hg.mozilla.org/mozilla-central/rev/2453ed57c828 + https://hg.mozilla.org/mozilla-central/rev/f9db1c11b1c0 + https://hg.mozilla.org/mozilla-central/rev/cff1321634cf +and https://hg.mozilla.org/mozilla-central/rev/4e3d5ec4e2b1 +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,3230 @@ ++/* ++ * copyright (c) 2001 Fabrice Bellard ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_AVCODEC_H ++#define AVCODEC_AVCODEC_H ++ ++/** ++ * @file ++ * @ingroup libavc ++ * Libavcodec external API header ++ */ ++ ++#include "libavutil/samplefmt.h" ++#include "libavutil/attributes.h" ++#include "libavutil/avutil.h" ++#include "libavutil/buffer.h" ++#include "libavutil/dict.h" ++#include "libavutil/frame.h" ++#include "libavutil/log.h" ++#include "libavutil/pixfmt.h" ++#include "libavutil/rational.h" ++ ++#include "codec.h" ++#include "codec_desc.h" ++#include "codec_par.h" ++#include "codec_id.h" ++#include "defs.h" ++#include "packet.h" ++#include "version_major.h" ++#ifndef HAVE_AV_CONFIG_H ++/* When included as part of the ffmpeg build, only include the major version ++ * to avoid unnecessary rebuilds. When included externally, keep including ++ * the full version information. */ ++# include "version.h" ++#endif ++ ++/** ++ * @defgroup libavc libavcodec ++ * Encoding/Decoding Library ++ * ++ * @{ ++ * ++ * @defgroup lavc_decoding Decoding ++ * @{ ++ * @} ++ * ++ * @defgroup lavc_encoding Encoding ++ * @{ ++ * @} ++ * ++ * @defgroup lavc_codec Codecs ++ * @{ ++ * @defgroup lavc_codec_native Native Codecs ++ * @{ ++ * @} ++ * @defgroup lavc_codec_wrappers External library wrappers ++ * @{ ++ * @} ++ * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge ++ * @{ ++ * @} ++ * @} ++ * @defgroup lavc_internal Internal ++ * @{ ++ * @} ++ * @} ++ */ ++ ++/** ++ * @ingroup libavc ++ * @defgroup lavc_encdec send/receive encoding and decoding API overview ++ * @{ ++ * ++ * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ ++ * avcodec_receive_packet() functions provide an encode/decode API, which ++ * decouples input and output. ++ * ++ * The API is very similar for encoding/decoding and audio/video, and works as ++ * follows: ++ * - Set up and open the AVCodecContext as usual. ++ * - Send valid input: ++ * - For decoding, call avcodec_send_packet() to give the decoder raw ++ * compressed data in an AVPacket. ++ * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame ++ * containing uncompressed audio or video. ++ * ++ * In both cases, it is recommended that AVPackets and AVFrames are ++ * refcounted, or libavcodec might have to copy the input data. (libavformat ++ * always returns refcounted AVPackets, and av_frame_get_buffer() allocates ++ * refcounted AVFrames.) ++ * - Receive output in a loop. Periodically call one of the avcodec_receive_*() ++ * functions and process their output: ++ * - For decoding, call avcodec_receive_frame(). On success, it will return ++ * an AVFrame containing uncompressed audio or video data. ++ * - For encoding, call avcodec_receive_packet(). On success, it will return ++ * an AVPacket with a compressed frame. ++ * ++ * Repeat this call until it returns AVERROR(EAGAIN) or an error. The ++ * AVERROR(EAGAIN) return value means that new input data is required to ++ * return new output. In this case, continue with sending input. For each ++ * input frame/packet, the codec will typically return 1 output frame/packet, ++ * but it can also be 0 or more than 1. ++ * ++ * At the beginning of decoding or encoding, the codec might accept multiple ++ * input frames/packets without returning a frame, until its internal buffers ++ * are filled. This situation is handled transparently if you follow the steps ++ * outlined above. ++ * ++ * In theory, sending input can result in EAGAIN - this should happen only if ++ * not all output was received. You can use this to structure alternative decode ++ * or encode loops other than the one suggested above. For example, you could ++ * try sending new input on each iteration, and try to receive output if that ++ * returns EAGAIN. ++ * ++ * End of stream situations. These require "flushing" (aka draining) the codec, ++ * as the codec might buffer multiple frames or packets internally for ++ * performance or out of necessity (consider B-frames). ++ * This is handled as follows: ++ * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) ++ * or avcodec_send_frame() (encoding) functions. This will enter draining ++ * mode. ++ * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() ++ * (encoding) in a loop until AVERROR_EOF is returned. The functions will ++ * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. ++ * - Before decoding can be resumed again, the codec has to be reset with ++ * avcodec_flush_buffers(). ++ * ++ * Using the API as outlined above is highly recommended. But it is also ++ * possible to call functions outside of this rigid schema. For example, you can ++ * call avcodec_send_packet() repeatedly without calling ++ * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed ++ * until the codec's internal buffer has been filled up (which is typically of ++ * size 1 per output frame, after initial input), and then reject input with ++ * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to ++ * read at least some output. ++ * ++ * Not all codecs will follow a rigid and predictable dataflow; the only ++ * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on ++ * one end implies that a receive/send call on the other end will succeed, or ++ * at least will not fail with AVERROR(EAGAIN). In general, no codec will ++ * permit unlimited buffering of input or output. ++ * ++ * A codec is not allowed to return AVERROR(EAGAIN) for both sending and ++ * receiving. This would be an invalid state, which could put the codec user ++ * into an endless loop. The API has no concept of time either: it cannot happen ++ * that trying to do avcodec_send_packet() results in AVERROR(EAGAIN), but a ++ * repeated call 1 second later accepts the packet (with no other receive/flush ++ * API calls involved). The API is a strict state machine, and the passage of ++ * time is not supposed to influence it. Some timing-dependent behavior might ++ * still be deemed acceptable in certain cases. But it must never result in both ++ * send/receive returning EAGAIN at the same time at any point. It must also ++ * absolutely be avoided that the current state is "unstable" and can ++ * "flip-flop" between the send/receive APIs allowing progress. For example, ++ * it's not allowed that the codec randomly decides that it actually wants to ++ * consume a packet now instead of returning a frame, after it just returned ++ * AVERROR(EAGAIN) on an avcodec_send_packet() call. ++ * @} ++ */ ++ ++/** ++ * @defgroup lavc_core Core functions/structures. ++ * @ingroup libavc ++ * ++ * Basic definitions, functions for querying libavcodec capabilities, ++ * allocating core structures, etc. ++ * @{ ++ */ ++ ++/** ++ * @ingroup lavc_encoding ++ * minimum encoding buffer size ++ * Used to avoid some checks during header writing. ++ */ ++#define AV_INPUT_BUFFER_MIN_SIZE 16384 ++ ++/** ++ * @ingroup lavc_encoding ++ */ ++typedef struct RcOverride { ++ int start_frame; ++ int end_frame; ++ int qscale; // If this is 0 then quality_factor will be used instead. ++ float quality_factor; ++} RcOverride; ++ ++/* encoding support ++ These flags can be passed in AVCodecContext.flags before initialization. ++ Note: Not everything is supported yet. ++*/ ++ ++/** ++ * Allow decoders to produce frames with data planes that are not aligned ++ * to CPU requirements (e.g. due to cropping). ++ */ ++#define AV_CODEC_FLAG_UNALIGNED (1 << 0) ++/** ++ * Use fixed qscale. ++ */ ++#define AV_CODEC_FLAG_QSCALE (1 << 1) ++/** ++ * 4 MV per MB allowed / advanced prediction for H.263. ++ */ ++#define AV_CODEC_FLAG_4MV (1 << 2) ++/** ++ * Output even those frames that might be corrupted. ++ */ ++#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) ++/** ++ * Use qpel MC. ++ */ ++#define AV_CODEC_FLAG_QPEL (1 << 4) ++/** ++ * Don't output frames whose parameters differ from first ++ * decoded frame in stream. ++ */ ++#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) ++/** ++ * Request the encoder to output reconstructed frames, i.e.\ frames that would ++ * be produced by decoding the encoded bistream. These frames may be retrieved ++ * by calling avcodec_receive_frame() immediately after a successful call to ++ * avcodec_receive_packet(). ++ * ++ * Should only be used with encoders flagged with the ++ * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. ++ */ ++#define AV_CODEC_FLAG_RECON_FRAME (1 << 6) ++/** ++ * @par decoding ++ * Request the decoder to propagate each packets AVPacket.opaque and ++ * AVPacket.opaque_ref to its corresponding output AVFrame. ++ * ++ * @par encoding: ++ * Request the encoder to propagate each frame's AVFrame.opaque and ++ * AVFrame.opaque_ref values to its corresponding output AVPacket. ++ * ++ * @par ++ * May only be set on encoders that have the ++ * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. ++ * ++ * @note ++ * While in typical cases one input frame produces exactly one output packet ++ * (perhaps after a delay), in general the mapping of frames to packets is ++ * M-to-N, so ++ * - Any number of input frames may be associated with any given output packet. ++ * This includes zero - e.g. some encoders may output packets that carry only ++ * metadata about the whole stream. ++ * - A given input frame may be associated with any number of output packets. ++ * Again this includes zero - e.g. some encoders may drop frames under certain ++ * conditions. ++ * . ++ * This implies that when using this flag, the caller must NOT assume that ++ * - a given input frame's opaques will necessarily appear on some output ++ * packet; ++ * - every output packet will have some non-NULL opaque value. ++ * . ++ * When an output packet contains multiple frames, the opaque values will be ++ * taken from the first of those. ++ * ++ * @note ++ * The converse holds for decoders, with frames and packets switched. ++ */ ++#define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) ++/** ++ * Signal to the encoder that the values of AVFrame.duration are valid and ++ * should be used (typically for transferring them to output packets). ++ * ++ * If this flag is not set, frame durations are ignored. ++ */ ++#define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) ++/** ++ * Use internal 2pass ratecontrol in first pass mode. ++ */ ++#define AV_CODEC_FLAG_PASS1 (1 << 9) ++/** ++ * Use internal 2pass ratecontrol in second pass mode. ++ */ ++#define AV_CODEC_FLAG_PASS2 (1 << 10) ++/** ++ * loop filter. ++ */ ++#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) ++/** ++ * Only decode/encode grayscale. ++ */ ++#define AV_CODEC_FLAG_GRAY (1 << 13) ++/** ++ * error[?] variables will be set during encoding. ++ */ ++#define AV_CODEC_FLAG_PSNR (1 << 15) ++/** ++ * Use interlaced DCT. ++ */ ++#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) ++/** ++ * Force low delay. ++ */ ++#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) ++/** ++ * Place global headers in extradata instead of every keyframe. ++ */ ++#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) ++/** ++ * Use only bitexact stuff (except (I)DCT). ++ */ ++#define AV_CODEC_FLAG_BITEXACT (1 << 23) ++/* Fx : Flag for H.263+ extra options */ ++/** ++ * H.263 advanced intra coding / MPEG-4 AC prediction ++ */ ++#define AV_CODEC_FLAG_AC_PRED (1 << 24) ++/** ++ * interlaced motion estimation ++ */ ++#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) ++#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) ++ ++/** ++ * Allow non spec compliant speedup tricks. ++ */ ++#define AV_CODEC_FLAG2_FAST (1 << 0) ++/** ++ * Skip bitstream encoding. ++ */ ++#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) ++/** ++ * Place global headers at every keyframe instead of in extradata. ++ */ ++#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) ++ ++/** ++ * Input bitstream might be truncated at a packet boundaries ++ * instead of only at frame boundaries. ++ */ ++#define AV_CODEC_FLAG2_CHUNKS (1 << 15) ++/** ++ * Discard cropping information from SPS. ++ */ ++#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) ++ ++/** ++ * Show all frames before the first keyframe ++ */ ++#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) ++/** ++ * Export motion vectors through frame side data ++ */ ++#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) ++/** ++ * Do not skip samples and export skip information as frame side data ++ */ ++#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) ++/** ++ * Do not reset ASS ReadOrder field on flush (subtitles decoding) ++ */ ++#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) ++/** ++ * Generate/parse ICC profiles on encode/decode, as appropriate for the type of ++ * file. No effect on codecs which cannot contain embedded ICC profiles, or ++ * when compiled without support for lcms2. ++ */ ++#define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31) ++ ++/* Exported side data. ++ These flags can be passed in AVCodecContext.export_side_data before ++ initialization. ++*/ ++/** ++ * Export motion vectors through frame side data ++ */ ++#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) ++/** ++ * Export encoder Producer Reference Time through packet side data ++ */ ++#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) ++/** ++ * Decoding only. ++ * Export the AVVideoEncParams structure through frame side data. ++ */ ++#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) ++/** ++ * Decoding only. ++ * Do not apply film grain, export it instead. ++ */ ++#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) ++ ++/** ++ * The decoder will keep a reference to the frame and may reuse it later. ++ */ ++#define AV_GET_BUFFER_FLAG_REF (1 << 0) ++ ++/** ++ * The encoder will keep a reference to the packet and may reuse it later. ++ */ ++#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) ++ ++struct AVCodecInternal; ++ ++/** ++ * main external API structure. ++ * New fields can be added to the end with minor version bumps. ++ * Removal, reordering and changes to existing fields require a major ++ * version bump. ++ * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from ++ * user applications. The name string for AVOptions options matches the ++ * associated command line parameter name and can be found in ++ * libavcodec/options_table.h The AVOption/command line parameter names differ ++ * in some cases from the C structure field names for historic reasons or ++ * brevity. sizeof(AVCodecContext) must not be used outside libav*. ++ */ ++typedef struct AVCodecContext { ++ /** ++ * information on struct for av_log ++ * - set by avcodec_alloc_context3 ++ */ ++ const AVClass* av_class; ++ int log_level_offset; ++ ++ enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ ++ const struct AVCodec* codec; ++ enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ ++ ++ /** ++ * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). ++ * This is used to work around some encoder bugs. ++ * A demuxer should set this to what is stored in the field used to identify ++ * the codec. If there are multiple such fields in a container then the ++ * demuxer should choose the one which maximizes the information about the ++ * used codec. If the codec tag field in a container is larger than 32 bits ++ * then the demuxer should remap the longer ID to 32 bits with a table or ++ * other structure. Alternatively a new extra_codec_tag + size could be added ++ * but for this a clear advantage must be demonstrated first. ++ * - encoding: Set by user, if not then the default based on codec_id will be ++ * used. ++ * - decoding: Set by user, will be converted to uppercase by libavcodec ++ * during init. ++ */ ++ unsigned int codec_tag; ++ ++ void* priv_data; ++ ++ /** ++ * Private context used for internal data. ++ * ++ * Unlike priv_data, this is not codec-specific. It is used in general ++ * libavcodec functions. ++ */ ++ struct AVCodecInternal* internal; ++ ++ /** ++ * Private data of the user, can be used to carry app specific stuff. ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ void* opaque; ++ ++ /** ++ * the average bitrate ++ * - encoding: Set by user; unused for constant quantizer encoding. ++ * - decoding: Set by user, may be overwritten by libavcodec ++ * if this info is available in the stream ++ */ ++ int64_t bit_rate; ++ ++ /** ++ * number of bits the bitstream is allowed to diverge from the reference. ++ * the reference can be CBR (for CBR pass1) or VBR (for pass2) ++ * - encoding: Set by user; unused for constant quantizer encoding. ++ * - decoding: unused ++ */ ++ int bit_rate_tolerance; ++ ++ /** ++ * Global quality for codecs which cannot change it per frame. ++ * This should be proportional to MPEG-1/2/4 qscale. ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int global_quality; ++ ++ /** ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int compression_level; ++#define FF_COMPRESSION_DEFAULT -1 ++ ++ /** ++ * AV_CODEC_FLAG_*. ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ int flags; ++ ++ /** ++ * AV_CODEC_FLAG2_* ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ int flags2; ++ ++ /** ++ * some codecs need / can use extradata like Huffman tables. ++ * MJPEG: Huffman tables ++ * rv10: additional flags ++ * MPEG-4: global headers (they can be in the bitstream or here) ++ * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger ++ * than extradata_size to avoid problems if it is read with the bitstream ++ * reader. The bytewise contents of extradata must not depend on the ++ * architecture or CPU endianness. Must be allocated with the av_malloc() ++ * family of functions. ++ * - encoding: Set/allocated/freed by libavcodec. ++ * - decoding: Set/allocated/freed by user. ++ */ ++ uint8_t* extradata; ++ int extradata_size; ++ ++ /** ++ * This is the fundamental unit of time (in seconds) in terms ++ * of which frame timestamps are represented. For fixed-fps content, ++ * timebase should be 1/framerate and timestamp increments should be ++ * identically 1. ++ * This often, but not always is the inverse of the frame rate or field rate ++ * for video. 1/time_base is not the average frame rate if the frame rate is ++ * not constant. ++ * ++ * Like containers, elementary streams also can store timestamps, 1/time_base ++ * is the unit in which these timestamps are specified. ++ * As example of such codec time base see ISO/IEC 14496-2:2001(E) ++ * vop_time_increment_resolution and fixed_vop_rate ++ * (fixed_vop_rate == 0 implies that it is different from the framerate) ++ * ++ * - encoding: MUST be set by user. ++ * - decoding: unused. ++ */ ++ AVRational time_base; ++ ++ /** ++ * For some codecs, the time base is closer to the field rate than the frame ++ * rate. Most notably, H.264 and MPEG-2 specify time_base as half of frame ++ * duration if no telecine is used ... ++ * ++ * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it ++ * to 2. ++ */ ++ int ticks_per_frame; ++ ++ /** ++ * Codec delay. ++ * ++ * Encoding: Number of frames delay there will be from the encoder input to ++ * the decoder output. (we assume the decoder matches the spec) ++ * Decoding: Number of frames delay in addition to what a standard decoder ++ * as specified in the spec would produce. ++ * ++ * Video: ++ * Number of frames the decoded output will be delayed relative to the ++ * encoded input. ++ * ++ * Audio: ++ * For encoding, this field is unused (see initial_padding). ++ * ++ * For decoding, this is the number of samples the decoder needs to ++ * output before the decoder's output is valid. When seeking, you should ++ * start decoding this many samples prior to your desired seek point. ++ * ++ * - encoding: Set by libavcodec. ++ * - decoding: Set by libavcodec. ++ */ ++ int delay; ++ ++ /* video only */ ++ /** ++ * picture width / height. ++ * ++ * @note Those fields may not match the values of the last ++ * AVFrame output by avcodec_receive_frame() due frame ++ * reordering. ++ * ++ * - encoding: MUST be set by user. ++ * - decoding: May be set by the user before opening the decoder if known e.g. ++ * from the container. Some decoders will require the dimensions ++ * to be set by the caller. During decoding, the decoder may ++ * overwrite those values as required while parsing the data. ++ */ ++ int width, height; ++ ++ /** ++ * Bitstream width / height, may be different from width/height e.g. when ++ * the decoded frame is cropped before being output or lowres is enabled. ++ * ++ * @note Those field may not match the value of the last ++ * AVFrame output by avcodec_receive_frame() due frame ++ * reordering. ++ * ++ * - encoding: unused ++ * - decoding: May be set by the user before opening the decoder if known ++ * e.g. from the container. During decoding, the decoder may ++ * overwrite those values as required while parsing the data. ++ */ ++ int coded_width, coded_height; ++ ++ /** ++ * the number of pictures in a group of pictures, or 0 for intra_only ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int gop_size; ++ ++ /** ++ * Pixel format, see AV_PIX_FMT_xxx. ++ * May be set by the demuxer if known from headers. ++ * May be overridden by the decoder if it knows better. ++ * ++ * @note This field may not match the value of the last ++ * AVFrame output by avcodec_receive_frame() due frame ++ * reordering. ++ * ++ * - encoding: Set by user. ++ * - decoding: Set by user if known, overridden by libavcodec while ++ * parsing the data. ++ */ ++ enum AVPixelFormat pix_fmt; ++ ++ /** ++ * If non NULL, 'draw_horiz_band' is called by the libavcodec ++ * decoder to draw a horizontal band. It improves cache usage. Not ++ * all codecs can do that. You must check the codec capabilities ++ * beforehand. ++ * When multithreading is used, it may be called from multiple threads ++ * at the same time; threads might draw different parts of the same AVFrame, ++ * or multiple AVFrames, and there is no guarantee that slices will be drawn ++ * in order. ++ * The function is also used by hardware acceleration APIs. ++ * It is called at least once during frame decoding to pass ++ * the data needed for hardware render. ++ * In that mode instead of pixel data, AVFrame points to ++ * a structure specific to the acceleration API. The application ++ * reads the structure and can change some fields to indicate progress ++ * or mark state. ++ * - encoding: unused ++ * - decoding: Set by user. ++ * @param height the height of the slice ++ * @param y the y position of the slice ++ * @param type 1->top field, 2->bottom field, 3->frame ++ * @param offset offset into the AVFrame.data from which the slice should be ++ * read ++ */ ++ void (*draw_horiz_band)(struct AVCodecContext* s, const AVFrame* src, ++ int offset[AV_NUM_DATA_POINTERS], int y, int type, ++ int height); ++ ++ /** ++ * Callback to negotiate the pixel format. Decoding only, may be set by the ++ * caller before avcodec_open2(). ++ * ++ * Called by some decoders to select the pixel format that will be used for ++ * the output frames. This is mainly used to set up hardware acceleration, ++ * then the provided format list contains the corresponding hwaccel pixel ++ * formats alongside the "software" one. The software pixel format may also ++ * be retrieved from \ref sw_pix_fmt. ++ * ++ * This callback will be called when the coded frame properties (such as ++ * resolution, pixel format, etc.) change and more than one output format is ++ * supported for those new properties. If a hardware pixel format is chosen ++ * and initialization for it fails, the callback may be called again ++ * immediately. ++ * ++ * This callback may be called from different threads if the decoder is ++ * multi-threaded, but not from more than one thread simultaneously. ++ * ++ * @param fmt list of formats which may be used in the current ++ * configuration, terminated by AV_PIX_FMT_NONE. ++ * @warning Behavior is undefined if the callback returns a value other ++ * than one of the formats in fmt or AV_PIX_FMT_NONE. ++ * @return the chosen format or AV_PIX_FMT_NONE ++ */ ++ enum AVPixelFormat (*get_format)(struct AVCodecContext* s, ++ const enum AVPixelFormat* fmt); ++ ++ /** ++ * maximum number of B-frames between non-B-frames ++ * Note: The output will be delayed by max_b_frames+1 relative to the input. ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int max_b_frames; ++ ++ /** ++ * qscale factor between IP and B-frames ++ * If > 0 then the last P-frame quantizer will be used (q= ++ * lastp_q*factor+offset). If < 0 then normal ratecontrol will be done (q= ++ * -normal_q*factor+offset). ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float b_quant_factor; ++ ++ /** ++ * qscale offset between IP and B-frames ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float b_quant_offset; ++ ++ /** ++ * Size of the frame reordering buffer in the decoder. ++ * For MPEG-2 it is 1 IPB or 0 low delay IP. ++ * - encoding: Set by libavcodec. ++ * - decoding: Set by libavcodec. ++ */ ++ int has_b_frames; ++ ++ /** ++ * qscale factor between P- and I-frames ++ * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + ++ * offset). If < 0 then normal ratecontrol will be done (q= ++ * -normal_q*factor+offset). ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float i_quant_factor; ++ ++ /** ++ * qscale offset between P and I-frames ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float i_quant_offset; ++ ++ /** ++ * luminance masking (0-> disabled) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float lumi_masking; ++ ++ /** ++ * temporary complexity masking (0-> disabled) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float temporal_cplx_masking; ++ ++ /** ++ * spatial complexity masking (0-> disabled) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float spatial_cplx_masking; ++ ++ /** ++ * p block masking (0-> disabled) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float p_masking; ++ ++ /** ++ * darkness masking (0-> disabled) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ float dark_masking; ++ ++ /** ++ * slice count ++ * - encoding: Set by libavcodec. ++ * - decoding: Set by user (or 0). ++ */ ++ int slice_count; ++ ++ /** ++ * slice offsets in the frame in bytes ++ * - encoding: Set/allocated by libavcodec. ++ * - decoding: Set/allocated by user (or NULL). ++ */ ++ int* slice_offset; ++ ++ /** ++ * sample aspect ratio (0 if unknown) ++ * That is the width of a pixel divided by the height of the pixel. ++ * Numerator and denominator must be relatively prime and smaller than 256 for ++ * some video standards. ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ AVRational sample_aspect_ratio; ++ ++ /** ++ * motion estimation comparison function ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int me_cmp; ++ /** ++ * subpixel motion estimation comparison function ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int me_sub_cmp; ++ /** ++ * macroblock comparison function (not supported yet) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int mb_cmp; ++ /** ++ * interlaced DCT comparison function ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int ildct_cmp; ++#define FF_CMP_SAD 0 ++#define FF_CMP_SSE 1 ++#define FF_CMP_SATD 2 ++#define FF_CMP_DCT 3 ++#define FF_CMP_PSNR 4 ++#define FF_CMP_BIT 5 ++#define FF_CMP_RD 6 ++#define FF_CMP_ZERO 7 ++#define FF_CMP_VSAD 8 ++#define FF_CMP_VSSE 9 ++#define FF_CMP_NSSE 10 ++#define FF_CMP_W53 11 ++#define FF_CMP_W97 12 ++#define FF_CMP_DCTMAX 13 ++#define FF_CMP_DCT264 14 ++#define FF_CMP_MEDIAN_SAD 15 ++#define FF_CMP_CHROMA 256 ++ ++ /** ++ * ME diamond size & shape ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int dia_size; ++ ++ /** ++ * amount of previous MV predictors (2a+1 x 2a+1 square) ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int last_predictor_count; ++ ++ /** ++ * motion estimation prepass comparison function ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int me_pre_cmp; ++ ++ /** ++ * ME prepass diamond size & shape ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int pre_dia_size; ++ ++ /** ++ * subpel ME quality ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int me_subpel_quality; ++ ++ /** ++ * maximum motion estimation search range in subpel units ++ * If 0 then no limit. ++ * ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int me_range; ++ ++ /** ++ * slice flags ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ int slice_flags; ++#define SLICE_FLAG_CODED_ORDER \ ++ 0x0001 ///< draw_horiz_band() is called in coded order instead of display ++#define SLICE_FLAG_ALLOW_FIELD \ ++ 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) ++#define SLICE_FLAG_ALLOW_PLANE \ ++ 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) ++ ++ /** ++ * macroblock decision mode ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int mb_decision; ++#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp ++#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits ++#define FF_MB_DECISION_RD 2 ///< rate distortion ++ ++ /** ++ * custom intra quantization matrix ++ * Must be allocated with the av_malloc() family of functions, and will be ++ * freed in avcodec_free_context(). ++ * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. ++ * - decoding: Set/allocated/freed by libavcodec. ++ */ ++ uint16_t* intra_matrix; ++ ++ /** ++ * custom inter quantization matrix ++ * Must be allocated with the av_malloc() family of functions, and will be ++ * freed in avcodec_free_context(). ++ * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. ++ * - decoding: Set/allocated/freed by libavcodec. ++ */ ++ uint16_t* inter_matrix; ++ ++ /** ++ * precision of the intra DC coefficient - 8 ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec ++ */ ++ int intra_dc_precision; ++ ++ /** ++ * Number of macroblock rows at the top which are skipped. ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ int skip_top; ++ ++ /** ++ * Number of macroblock rows at the bottom which are skipped. ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ int skip_bottom; ++ ++ /** ++ * minimum MB Lagrange multiplier ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int mb_lmin; ++ ++ /** ++ * maximum MB Lagrange multiplier ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int mb_lmax; ++ ++ /** ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int bidir_refine; ++ ++ /** ++ * minimum GOP size ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int keyint_min; ++ ++ /** ++ * number of reference frames ++ * - encoding: Set by user. ++ * - decoding: Set by lavc. ++ */ ++ int refs; ++ ++ /** ++ * Note: Value depends upon the compare function used for fullpel ME. ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int mv0_threshold; ++ ++ /** ++ * Chromaticity coordinates of the source primaries. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVColorPrimaries color_primaries; ++ ++ /** ++ * Color Transfer Characteristic. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVColorTransferCharacteristic color_trc; ++ ++ /** ++ * YUV colorspace type. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVColorSpace colorspace; ++ ++ /** ++ * MPEG vs JPEG YUV range. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVColorRange color_range; ++ ++ /** ++ * This defines the location of chroma samples. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVChromaLocation chroma_sample_location; ++ ++ /** ++ * Number of slices. ++ * Indicates number of picture subdivisions. Used for parallelized ++ * decoding. ++ * - encoding: Set by user ++ * - decoding: unused ++ */ ++ int slices; ++ ++ /** Field order ++ * - encoding: set by libavcodec ++ * - decoding: Set by user. ++ */ ++ enum AVFieldOrder field_order; ++ ++ /* audio only */ ++ int sample_rate; ///< samples per second ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * number of audio channels ++ * @deprecated use ch_layout.nb_channels ++ */ ++ attribute_deprecated int channels; ++#endif ++ ++ /** ++ * audio sample format ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ enum AVSampleFormat sample_fmt; ///< sample format ++ ++ /* The following data should not be initialized. */ ++ /** ++ * Number of samples per channel in an audio frame. ++ * ++ * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame ++ * except the last must contain exactly frame_size samples per channel. ++ * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then ++ * the frame size is not restricted. ++ * - decoding: may be set by some decoders to indicate constant frame size ++ */ ++ int frame_size; ++ ++#if FF_API_AVCTX_FRAME_NUMBER ++ /** ++ * Frame counter, set by libavcodec. ++ * ++ * - decoding: total number of frames returned from the decoder so far. ++ * - encoding: total number of frames passed to the encoder so far. ++ * ++ * @note the counter is not incremented if encoding/decoding resulted in ++ * an error. ++ * @deprecated use frame_num instead ++ */ ++ attribute_deprecated int frame_number; ++#endif ++ ++ /** ++ * number of bytes per packet if constant and known or 0 ++ * Used by some WAV based audio codecs. ++ */ ++ int block_align; ++ ++ /** ++ * Audio cutoff bandwidth (0 means "automatic") ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int cutoff; ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * Audio channel layout. ++ * - encoding: set by user. ++ * - decoding: set by user, may be overwritten by libavcodec. ++ * @deprecated use ch_layout ++ */ ++ attribute_deprecated uint64_t channel_layout; ++ ++ /** ++ * Request decoder to use this channel layout if it can (0 for default) ++ * - encoding: unused ++ * - decoding: Set by user. ++ * @deprecated use "downmix" codec private option ++ */ ++ attribute_deprecated uint64_t request_channel_layout; ++#endif ++ ++ /** ++ * Type of service that the audio stream conveys. ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ enum AVAudioServiceType audio_service_type; ++ ++ /** ++ * desired sample format ++ * - encoding: Not used. ++ * - decoding: Set by user. ++ * Decoder will decode to this format if it can. ++ */ ++ enum AVSampleFormat request_sample_fmt; ++ ++ /** ++ * This callback is called at the beginning of each frame to get data ++ * buffer(s) for it. There may be one contiguous buffer for all the data or ++ * there may be a buffer per each data plane or anything in between. What ++ * this means is, you may set however many entries in buf[] you feel ++ * necessary. Each buffer must be reference-counted using the AVBuffer API ++ * (see description of buf[] below). ++ * ++ * The following fields will be set in the frame before this callback is ++ * called: ++ * - format ++ * - width, height (video only) ++ * - sample_rate, channel_layout, nb_samples (audio only) ++ * Their values may differ from the corresponding values in ++ * AVCodecContext. This callback must use the frame values, not the codec ++ * context values, to calculate the required buffer size. ++ * ++ * This callback must fill the following fields in the frame: ++ * - data[] ++ * - linesize[] ++ * - extended_data: ++ * * if the data is planar audio with more than 8 channels, then this ++ * callback must allocate and fill extended_data to contain all pointers ++ * to all data planes. data[] must hold as many pointers as it can. ++ * extended_data must be allocated with av_malloc() and will be freed in ++ * av_frame_unref(). ++ * * otherwise extended_data must point to data ++ * - buf[] must contain one or more pointers to AVBufferRef structures. Each ++ * of the frame's data and extended_data pointers must be contained in these. ++ * That is, one AVBufferRef for each allocated chunk of memory, not ++ * necessarily one AVBufferRef per data[] entry. See: av_buffer_create(), ++ * av_buffer_alloc(), and av_buffer_ref(). ++ * - extended_buf and nb_extended_buf must be allocated with av_malloc() by ++ * this callback and filled with the extra buffers if there are more ++ * buffers than buf[] can hold. extended_buf will be freed in ++ * av_frame_unref(). ++ * ++ * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call ++ * avcodec_default_get_buffer2() instead of providing buffers allocated by ++ * some other means. ++ * ++ * Each data plane must be aligned to the maximum required by the target ++ * CPU. ++ * ++ * @see avcodec_default_get_buffer2() ++ * ++ * Video: ++ * ++ * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused ++ * (read and/or written to if it is writable) later by libavcodec. ++ * ++ * avcodec_align_dimensions2() should be used to find the required width and ++ * height, as they normally need to be rounded up to the next multiple of 16. ++ * ++ * Some decoders do not support linesizes changing between frames. ++ * ++ * If frame multithreading is used, this callback may be called from a ++ * different thread, but not from more than one at once. Does not need to be ++ * reentrant. ++ * ++ * @see avcodec_align_dimensions2() ++ * ++ * Audio: ++ * ++ * Decoders request a buffer of a particular size by setting ++ * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, ++ * however, utilize only part of the buffer by setting AVFrame.nb_samples ++ * to a smaller value in the output frame. ++ * ++ * As a convenience, av_samples_get_buffer_size() and ++ * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() ++ * functions to find the required data size and to fill data pointers and ++ * linesize. In AVFrame.linesize, only linesize[0] may be set for audio ++ * since all planes must be the same size. ++ * ++ * @see av_samples_get_buffer_size(), av_samples_fill_arrays() ++ * ++ * - encoding: unused ++ * - decoding: Set by libavcodec, user can override. ++ */ ++ int (*get_buffer2)(struct AVCodecContext* s, AVFrame* frame, int flags); ++ ++ /* - encoding parameters */ ++ float qcompress; ///< amount of qscale change between easy & hard scenes ++ ///< (0.0-1.0) ++ float qblur; ///< amount of qscale smoothing over time (0.0-1.0) ++ ++ /** ++ * minimum quantizer ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int qmin; ++ ++ /** ++ * maximum quantizer ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int qmax; ++ ++ /** ++ * maximum quantizer difference between frames ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int max_qdiff; ++ ++ /** ++ * decoder bitstream buffer size ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int rc_buffer_size; ++ ++ /** ++ * ratecontrol override, see RcOverride ++ * - encoding: Allocated/set/freed by user. ++ * - decoding: unused ++ */ ++ int rc_override_count; ++ RcOverride* rc_override; ++ ++ /** ++ * maximum bitrate ++ * - encoding: Set by user. ++ * - decoding: Set by user, may be overwritten by libavcodec. ++ */ ++ int64_t rc_max_rate; ++ ++ /** ++ * minimum bitrate ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int64_t rc_min_rate; ++ ++ /** ++ * Ratecontrol attempt to use, at maximum, of what can be used without ++ * an underflow. ++ * - encoding: Set by user. ++ * - decoding: unused. ++ */ ++ float rc_max_available_vbv_use; ++ ++ /** ++ * Ratecontrol attempt to use, at least, times the amount needed to ++ * prevent a vbv overflow. ++ * - encoding: Set by user. ++ * - decoding: unused. ++ */ ++ float rc_min_vbv_overflow_use; ++ ++ /** ++ * Number of bits which should be loaded into the rc buffer before decoding ++ * starts. ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int rc_initial_buffer_occupancy; ++ ++ /** ++ * trellis RD quantization ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int trellis; ++ ++ /** ++ * pass1 encoding statistics output buffer ++ * - encoding: Set by libavcodec. ++ * - decoding: unused ++ */ ++ char* stats_out; ++ ++ /** ++ * pass2 encoding statistics input buffer ++ * Concatenated stuff from stats_out of pass1 should be placed here. ++ * - encoding: Allocated/set/freed by user. ++ * - decoding: unused ++ */ ++ char* stats_in; ++ ++ /** ++ * Work around bugs in encoders which sometimes cannot be detected ++ * automatically. ++ * - encoding: Set by user ++ * - decoding: Set by user ++ */ ++ int workaround_bugs; ++#define FF_BUG_AUTODETECT 1 ///< autodetection ++#define FF_BUG_XVID_ILACE 4 ++#define FF_BUG_UMP4 8 ++#define FF_BUG_NO_PADDING 16 ++#define FF_BUG_AMV 32 ++#define FF_BUG_QPEL_CHROMA 64 ++#define FF_BUG_STD_QPEL 128 ++#define FF_BUG_QPEL_CHROMA2 256 ++#define FF_BUG_DIRECT_BLOCKSIZE 512 ++#define FF_BUG_EDGE 1024 ++#define FF_BUG_HPEL_CHROMA 2048 ++#define FF_BUG_DC_CLIP 4096 ++#define FF_BUG_MS \ ++ 8192 ///< Work around various bugs in Microsoft's broken decoders. ++#define FF_BUG_TRUNCATED 16384 ++#define FF_BUG_IEDGE 32768 ++ ++ /** ++ * strictly follow the standard (MPEG-4, ...). ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ * Setting this to STRICT or higher means the encoder and decoder will ++ * generally do stupid things, whereas setting it to unofficial or lower ++ * will mean the encoder might produce output that is not supported by all ++ * spec-compliant decoders. Decoders don't differentiate between normal, ++ * unofficial and experimental (that is, they always try to decode things ++ * when they can) unless they are explicitly asked to behave stupidly ++ * (=strictly conform to the specs) ++ * This may only be set to one of the FF_COMPLIANCE_* values in defs.h. ++ */ ++ int strict_std_compliance; ++ ++ /** ++ * error concealment flags ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ int error_concealment; ++#define FF_EC_GUESS_MVS 1 ++#define FF_EC_DEBLOCK 2 ++#define FF_EC_FAVOR_INTER 256 ++ ++ /** ++ * debug ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ int debug; ++#define FF_DEBUG_PICT_INFO 1 ++#define FF_DEBUG_RC 2 ++#define FF_DEBUG_BITSTREAM 4 ++#define FF_DEBUG_MB_TYPE 8 ++#define FF_DEBUG_QP 16 ++#define FF_DEBUG_DCT_COEFF 0x00000040 ++#define FF_DEBUG_SKIP 0x00000080 ++#define FF_DEBUG_STARTCODE 0x00000100 ++#define FF_DEBUG_ER 0x00000400 ++#define FF_DEBUG_MMCO 0x00000800 ++#define FF_DEBUG_BUGS 0x00001000 ++#define FF_DEBUG_BUFFERS 0x00008000 ++#define FF_DEBUG_THREADS 0x00010000 ++#define FF_DEBUG_GREEN_MD 0x00800000 ++#define FF_DEBUG_NOMC 0x01000000 ++ ++ /** ++ * Error recognition; may misdetect some more or less valid parts as errors. ++ * This is a bitfield of the AV_EF_* values defined in defs.h. ++ * ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ int err_recognition; ++ ++#if FF_API_REORDERED_OPAQUE ++ /** ++ * opaque 64-bit number (generally a PTS) that will be reordered and ++ * output in AVFrame.reordered_opaque ++ * - encoding: Set by libavcodec to the reordered_opaque of the input ++ * frame corresponding to the last returned packet. Only ++ * supported by encoders with the ++ * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. ++ * - decoding: Set by user. ++ * ++ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead ++ */ ++ attribute_deprecated int64_t reordered_opaque; ++#endif ++ ++ /** ++ * Hardware accelerator in use ++ * - encoding: unused. ++ * - decoding: Set by libavcodec ++ */ ++ const struct AVHWAccel* hwaccel; ++ ++ /** ++ * Legacy hardware accelerator context. ++ * ++ * For some hardware acceleration methods, the caller may use this field to ++ * signal hwaccel-specific data to the codec. The struct pointed to by this ++ * pointer is hwaccel-dependent and defined in the respective header. Please ++ * refer to the FFmpeg HW accelerator documentation to know how to fill ++ * this. ++ * ++ * In most cases this field is optional - the necessary information may also ++ * be provided to libavcodec through @ref hw_frames_ctx or @ref ++ * hw_device_ctx (see avcodec_get_hw_config()). However, in some cases it ++ * may be the only method of signalling some (optional) information. ++ * ++ * The struct and its contents are owned by the caller. ++ * ++ * - encoding: May be set by the caller before avcodec_open2(). Must remain ++ * valid until avcodec_free_context(). ++ * - decoding: May be set by the caller in the get_format() callback. ++ * Must remain valid until the next get_format() call, ++ * or avcodec_free_context() (whichever comes first). ++ */ ++ void* hwaccel_context; ++ ++ /** ++ * error ++ * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. ++ * - decoding: unused ++ */ ++ uint64_t error[AV_NUM_DATA_POINTERS]; ++ ++ /** ++ * DCT algorithm, see FF_DCT_* below ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int dct_algo; ++#define FF_DCT_AUTO 0 ++#define FF_DCT_FASTINT 1 ++#define FF_DCT_INT 2 ++#define FF_DCT_MMX 3 ++#define FF_DCT_ALTIVEC 5 ++#define FF_DCT_FAAN 6 ++ ++ /** ++ * IDCT algorithm, see FF_IDCT_* below. ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ int idct_algo; ++#define FF_IDCT_AUTO 0 ++#define FF_IDCT_INT 1 ++#define FF_IDCT_SIMPLE 2 ++#define FF_IDCT_SIMPLEMMX 3 ++#define FF_IDCT_ARM 7 ++#define FF_IDCT_ALTIVEC 8 ++#define FF_IDCT_SIMPLEARM 10 ++#define FF_IDCT_XVID 14 ++#define FF_IDCT_SIMPLEARMV5TE 16 ++#define FF_IDCT_SIMPLEARMV6 17 ++#define FF_IDCT_FAAN 20 ++#define FF_IDCT_SIMPLENEON 22 ++#if FF_API_IDCT_NONE ++// formerly used by xvmc ++# define FF_IDCT_NONE 24 ++#endif ++#define FF_IDCT_SIMPLEAUTO 128 ++ ++ /** ++ * bits per sample/pixel from the demuxer (needed for huffyuv). ++ * - encoding: Set by libavcodec. ++ * - decoding: Set by user. ++ */ ++ int bits_per_coded_sample; ++ ++ /** ++ * Bits per sample/pixel of internal libavcodec pixel/sample format. ++ * - encoding: set by user. ++ * - decoding: set by libavcodec. ++ */ ++ int bits_per_raw_sample; ++ ++ /** ++ * low resolution decoding, 1-> 1/2 size, 2->1/4 size ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ int lowres; ++ ++ /** ++ * thread count ++ * is used to decide how many independent tasks should be passed to execute() ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ int thread_count; ++ ++ /** ++ * Which multithreading methods to use. ++ * Use of FF_THREAD_FRAME will increase decoding delay by one frame per ++ * thread, so clients which cannot provide future frames should not use it. ++ * ++ * - encoding: Set by user, otherwise the default is used. ++ * - decoding: Set by user, otherwise the default is used. ++ */ ++ int thread_type; ++#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once ++#define FF_THREAD_SLICE \ ++ 2 ///< Decode more than one part of a single frame at once ++ ++ /** ++ * Which multithreading methods are in use by the codec. ++ * - encoding: Set by libavcodec. ++ * - decoding: Set by libavcodec. ++ */ ++ int active_thread_type; ++ ++ /** ++ * The codec may call this to execute several independent things. ++ * It will return only after finishing all tasks. ++ * The user may replace this with some multithreaded implementation, ++ * the default implementation will execute the parts serially. ++ * @param count the number of things to execute ++ * - encoding: Set by libavcodec, user can override. ++ * - decoding: Set by libavcodec, user can override. ++ */ ++ int (*execute)(struct AVCodecContext* c, ++ int (*func)(struct AVCodecContext* c2, void* arg), void* arg2, ++ int* ret, int count, int size); ++ ++ /** ++ * The codec may call this to execute several independent things. ++ * It will return only after finishing all tasks. ++ * The user may replace this with some multithreaded implementation, ++ * the default implementation will execute the parts serially. ++ * @param c context passed also to func ++ * @param count the number of things to execute ++ * @param arg2 argument passed unchanged to func ++ * @param ret return values of executed functions, must have space for "count" ++ * values. May be NULL. ++ * @param func function that will be called count times, with jobnr from 0 to ++ * count-1. threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS ++ * and so that no two instances of func executing at the same time will have ++ * the same threadnr. ++ * @return always 0 currently, but code should handle a future improvement ++ * where when any call to func returns < 0 no further calls to func may be ++ * done and < 0 is returned. ++ * - encoding: Set by libavcodec, user can override. ++ * - decoding: Set by libavcodec, user can override. ++ */ ++ int (*execute2)(struct AVCodecContext* c, ++ int (*func)(struct AVCodecContext* c2, void* arg, int jobnr, ++ int threadnr), ++ void* arg2, int* ret, int count); ++ ++ /** ++ * noise vs. sse weight for the nsse comparison function ++ * - encoding: Set by user. ++ * - decoding: unused ++ */ ++ int nsse_weight; ++ ++ /** ++ * profile ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int profile; ++#define FF_PROFILE_UNKNOWN -99 ++#define FF_PROFILE_RESERVED -100 ++ ++#define FF_PROFILE_AAC_MAIN 0 ++#define FF_PROFILE_AAC_LOW 1 ++#define FF_PROFILE_AAC_SSR 2 ++#define FF_PROFILE_AAC_LTP 3 ++#define FF_PROFILE_AAC_HE 4 ++#define FF_PROFILE_AAC_HE_V2 28 ++#define FF_PROFILE_AAC_LD 22 ++#define FF_PROFILE_AAC_ELD 38 ++#define FF_PROFILE_MPEG2_AAC_LOW 128 ++#define FF_PROFILE_MPEG2_AAC_HE 131 ++ ++#define FF_PROFILE_DNXHD 0 ++#define FF_PROFILE_DNXHR_LB 1 ++#define FF_PROFILE_DNXHR_SQ 2 ++#define FF_PROFILE_DNXHR_HQ 3 ++#define FF_PROFILE_DNXHR_HQX 4 ++#define FF_PROFILE_DNXHR_444 5 ++ ++#define FF_PROFILE_DTS 20 ++#define FF_PROFILE_DTS_ES 30 ++#define FF_PROFILE_DTS_96_24 40 ++#define FF_PROFILE_DTS_HD_HRA 50 ++#define FF_PROFILE_DTS_HD_MA 60 ++#define FF_PROFILE_DTS_EXPRESS 70 ++ ++#define FF_PROFILE_MPEG2_422 0 ++#define FF_PROFILE_MPEG2_HIGH 1 ++#define FF_PROFILE_MPEG2_SS 2 ++#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 ++#define FF_PROFILE_MPEG2_MAIN 4 ++#define FF_PROFILE_MPEG2_SIMPLE 5 ++ ++#define FF_PROFILE_H264_CONSTRAINED (1 << 9) // 8+1; constraint_set1_flag ++#define FF_PROFILE_H264_INTRA (1 << 11) // 8+3; constraint_set3_flag ++ ++#define FF_PROFILE_H264_BASELINE 66 ++#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66 | FF_PROFILE_H264_CONSTRAINED) ++#define FF_PROFILE_H264_MAIN 77 ++#define FF_PROFILE_H264_EXTENDED 88 ++#define FF_PROFILE_H264_HIGH 100 ++#define FF_PROFILE_H264_HIGH_10 110 ++#define FF_PROFILE_H264_HIGH_10_INTRA (110 | FF_PROFILE_H264_INTRA) ++#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 ++#define FF_PROFILE_H264_HIGH_422 122 ++#define FF_PROFILE_H264_HIGH_422_INTRA (122 | FF_PROFILE_H264_INTRA) ++#define FF_PROFILE_H264_STEREO_HIGH 128 ++#define FF_PROFILE_H264_HIGH_444 144 ++#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 ++#define FF_PROFILE_H264_HIGH_444_INTRA (244 | FF_PROFILE_H264_INTRA) ++#define FF_PROFILE_H264_CAVLC_444 44 ++ ++#define FF_PROFILE_VC1_SIMPLE 0 ++#define FF_PROFILE_VC1_MAIN 1 ++#define FF_PROFILE_VC1_COMPLEX 2 ++#define FF_PROFILE_VC1_ADVANCED 3 ++ ++#define FF_PROFILE_MPEG4_SIMPLE 0 ++#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 ++#define FF_PROFILE_MPEG4_CORE 2 ++#define FF_PROFILE_MPEG4_MAIN 3 ++#define FF_PROFILE_MPEG4_N_BIT 4 ++#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 ++#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 ++#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 ++#define FF_PROFILE_MPEG4_HYBRID 8 ++#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 ++#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 ++#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 ++#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 ++#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 ++#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 ++#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 ++ ++#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 ++#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 ++#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 ++#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 ++#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 ++ ++#define FF_PROFILE_VP9_0 0 ++#define FF_PROFILE_VP9_1 1 ++#define FF_PROFILE_VP9_2 2 ++#define FF_PROFILE_VP9_3 3 ++ ++#define FF_PROFILE_HEVC_MAIN 1 ++#define FF_PROFILE_HEVC_MAIN_10 2 ++#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 ++#define FF_PROFILE_HEVC_REXT 4 ++#define FF_PROFILE_HEVC_SCC 9 ++ ++#define FF_PROFILE_VVC_MAIN_10 1 ++#define FF_PROFILE_VVC_MAIN_10_444 33 ++ ++#define FF_PROFILE_AV1_MAIN 0 ++#define FF_PROFILE_AV1_HIGH 1 ++#define FF_PROFILE_AV1_PROFESSIONAL 2 ++ ++#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 ++#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 ++#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 ++#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 ++#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 ++ ++#define FF_PROFILE_SBC_MSBC 1 ++ ++#define FF_PROFILE_PRORES_PROXY 0 ++#define FF_PROFILE_PRORES_LT 1 ++#define FF_PROFILE_PRORES_STANDARD 2 ++#define FF_PROFILE_PRORES_HQ 3 ++#define FF_PROFILE_PRORES_4444 4 ++#define FF_PROFILE_PRORES_XQ 5 ++ ++#define FF_PROFILE_ARIB_PROFILE_A 0 ++#define FF_PROFILE_ARIB_PROFILE_C 1 ++ ++#define FF_PROFILE_KLVA_SYNC 0 ++#define FF_PROFILE_KLVA_ASYNC 1 ++ ++ /** ++ * level ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int level; ++#define FF_LEVEL_UNKNOWN -99 ++ ++ /** ++ * Skip loop filtering for selected frames. ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ enum AVDiscard skip_loop_filter; ++ ++ /** ++ * Skip IDCT/dequantization for selected frames. ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ enum AVDiscard skip_idct; ++ ++ /** ++ * Skip decoding for selected frames. ++ * - encoding: unused ++ * - decoding: Set by user. ++ */ ++ enum AVDiscard skip_frame; ++ ++ /** ++ * Header containing style information for text subtitles. ++ * For SUBTITLE_ASS subtitle type, it should contain the whole ASS ++ * [Script Info] and [V4+ Styles] section, plus the [Events] line and ++ * the Format line following. It shouldn't include any Dialogue line. ++ * - encoding: Set/allocated/freed by user (before avcodec_open2()) ++ * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) ++ */ ++ uint8_t* subtitle_header; ++ int subtitle_header_size; ++ ++ /** ++ * Audio only. The number of "priming" samples (padding) inserted by the ++ * encoder at the beginning of the audio. I.e. this number of leading ++ * decoded samples must be discarded by the caller to get the original audio ++ * without leading padding. ++ * ++ * - decoding: unused ++ * - encoding: Set by libavcodec. The timestamps on the output packets are ++ * adjusted by the encoder so that they always refer to the ++ * first sample of the data actually contained in the packet, ++ * including any added padding. E.g. if the timebase is ++ * 1/samplerate and the timestamp of the first input sample is ++ * 0, the timestamp of the first output packet will be ++ * -initial_padding. ++ */ ++ int initial_padding; ++ ++ /** ++ * - decoding: For codecs that store a framerate value in the compressed ++ * bitstream, the decoder may export it here. { 0, 1} when ++ * unknown. ++ * - encoding: May be used to signal the framerate of CFR content to an ++ * encoder. ++ */ ++ AVRational framerate; ++ ++ /** ++ * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. ++ * - encoding: unused. ++ * - decoding: Set by libavcodec before calling get_format() ++ */ ++ enum AVPixelFormat sw_pix_fmt; ++ ++ /** ++ * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. ++ * - encoding unused. ++ * - decoding set by user. ++ */ ++ AVRational pkt_timebase; ++ ++ /** ++ * AVCodecDescriptor ++ * - encoding: unused. ++ * - decoding: set by libavcodec. ++ */ ++ const AVCodecDescriptor* codec_descriptor; ++ ++ /** ++ * Current statistics for PTS correction. ++ * - decoding: maintained and used by libavcodec, not intended to be used by ++ * user apps ++ * - encoding: unused ++ */ ++ int64_t ++ pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far ++ int64_t ++ pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far ++ int64_t pts_correction_last_pts; /// PTS of the last frame ++ int64_t pts_correction_last_dts; /// DTS of the last frame ++ ++ /** ++ * Character encoding of the input subtitles file. ++ * - decoding: set by user ++ * - encoding: unused ++ */ ++ char* sub_charenc; ++ ++ /** ++ * Subtitles character encoding mode. Formats or codecs might be adjusting ++ * this setting (if they are doing the conversion themselves for instance). ++ * - decoding: set by libavcodec ++ * - encoding: unused ++ */ ++ int sub_charenc_mode; ++#define FF_SUB_CHARENC_MODE_DO_NOTHING \ ++ -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, ++ ///< or the codec is bitmap for instance) ++#define FF_SUB_CHARENC_MODE_AUTOMATIC \ ++ 0 ///< libavcodec will select the mode itself ++#define FF_SUB_CHARENC_MODE_PRE_DECODER \ ++ 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the ++ ///< decoder, requires iconv ++#define FF_SUB_CHARENC_MODE_IGNORE \ ++ 2 ///< neither convert the subtitles, nor check them for valid UTF-8 ++ ++ /** ++ * Skip processing alpha if supported by codec. ++ * Note that if the format uses pre-multiplied alpha (common with VP6, ++ * and recommended due to better video quality/compression) ++ * the image will look as if alpha-blended onto a black background. ++ * However for formats that do not use pre-multiplied alpha ++ * there might be serious artefacts (though e.g. libswscale currently ++ * assumes pre-multiplied alpha anyway). ++ * ++ * - decoding: set by user ++ * - encoding: unused ++ */ ++ int skip_alpha; ++ ++ /** ++ * Number of samples to skip after a discontinuity ++ * - decoding: unused ++ * - encoding: set by libavcodec ++ */ ++ int seek_preroll; ++ ++ /** ++ * custom intra quantization matrix ++ * - encoding: Set by user, can be NULL. ++ * - decoding: unused. ++ */ ++ uint16_t* chroma_intra_matrix; ++ ++ /** ++ * dump format separator. ++ * can be ", " or "\n " or anything else ++ * - encoding: Set by user. ++ * - decoding: Set by user. ++ */ ++ uint8_t* dump_separator; ++ ++ /** ++ * ',' separated list of allowed decoders. ++ * If NULL then all are allowed ++ * - encoding: unused ++ * - decoding: set by user ++ */ ++ char* codec_whitelist; ++ ++ /** ++ * Properties of the stream that gets decoded ++ * - encoding: unused ++ * - decoding: set by libavcodec ++ */ ++ unsigned properties; ++#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 ++#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 ++#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 ++ ++ /** ++ * Additional data associated with the entire coded stream. ++ * ++ * - decoding: unused ++ * - encoding: may be set by libavcodec after avcodec_open2(). ++ */ ++ AVPacketSideData* coded_side_data; ++ int nb_coded_side_data; ++ ++ /** ++ * A reference to the AVHWFramesContext describing the input (for encoding) ++ * or output (decoding) frames. The reference is set by the caller and ++ * afterwards owned (and freed) by libavcodec - it should never be read by ++ * the caller after being set. ++ * ++ * - decoding: This field should be set by the caller from the get_format() ++ * callback. The previous reference (if any) will always be ++ * unreffed by libavcodec before the get_format() call. ++ * ++ * If the default get_buffer2() is used with a hwaccel pixel ++ * format, then this AVHWFramesContext will be used for ++ * allocating the frame buffers. ++ * ++ * - encoding: For hardware encoders configured to use a hwaccel pixel ++ * format, this field should be set by the caller to a reference ++ * to the AVHWFramesContext describing input frames. ++ * AVHWFramesContext.format must be equal to ++ * AVCodecContext.pix_fmt. ++ * ++ * This field should be set before avcodec_open2() is called. ++ */ ++ AVBufferRef* hw_frames_ctx; ++ ++ /** ++ * Audio only. The amount of padding (in samples) appended by the encoder to ++ * the end of the audio. I.e. this number of decoded samples must be ++ * discarded by the caller from the end of the stream to get the original ++ * audio without any trailing padding. ++ * ++ * - decoding: unused ++ * - encoding: unused ++ */ ++ int trailing_padding; ++ ++ /** ++ * The number of pixels per image to maximally accept. ++ * ++ * - decoding: set by user ++ * - encoding: set by user ++ */ ++ int64_t max_pixels; ++ ++ /** ++ * A reference to the AVHWDeviceContext describing the device which will ++ * be used by a hardware encoder/decoder. The reference is set by the ++ * caller and afterwards owned (and freed) by libavcodec. ++ * ++ * This should be used if either the codec device does not require ++ * hardware frames or any that are used are to be allocated internally by ++ * libavcodec. If the user wishes to supply any of the frames used as ++ * encoder input or decoder output then hw_frames_ctx should be used ++ * instead. When hw_frames_ctx is set in get_format() for a decoder, this ++ * field will be ignored while decoding the associated stream segment, but ++ * may again be used on a following one after another get_format() call. ++ * ++ * For both encoders and decoders this field should be set before ++ * avcodec_open2() is called and must not be written to thereafter. ++ * ++ * Note that some decoders may require this field to be set initially in ++ * order to support hw_frames_ctx at all - in that case, all frames ++ * contexts used must be created on the same device. ++ */ ++ AVBufferRef* hw_device_ctx; ++ ++ /** ++ * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated ++ * decoding (if active). ++ * - encoding: unused ++ * - decoding: Set by user (either before avcodec_open2(), or in the ++ * AVCodecContext.get_format callback) ++ */ ++ int hwaccel_flags; ++ ++ /** ++ * Video decoding only. Certain video codecs support cropping, meaning that ++ * only a sub-rectangle of the decoded frame is intended for display. This ++ * option controls how cropping is handled by libavcodec. ++ * ++ * When set to 1 (the default), libavcodec will apply cropping internally. ++ * I.e. it will modify the output frame width/height fields and offset the ++ * data pointers (only by as much as possible while preserving alignment, or ++ * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that ++ * the frames output by the decoder refer only to the cropped area. The ++ * crop_* fields of the output frames will be zero. ++ * ++ * When set to 0, the width/height fields of the output frames will be set ++ * to the coded dimensions and the crop_* fields will describe the cropping ++ * rectangle. Applying the cropping is left to the caller. ++ * ++ * @warning When hardware acceleration with opaque output frames is used, ++ * libavcodec is unable to apply cropping from the top/left border. ++ * ++ * @note when this option is set to zero, the width/height fields of the ++ * AVCodecContext and output AVFrames have different meanings. The codec ++ * context fields store display dimensions (with the coded dimensions in ++ * coded_width/height), while the frame fields store the coded dimensions ++ * (with the display dimensions being determined by the crop_* fields). ++ */ ++ int apply_cropping; ++ ++ /* ++ * Video decoding only. Sets the number of extra hardware frames which ++ * the decoder will allocate for use by the caller. This must be set ++ * before avcodec_open2() is called. ++ * ++ * Some hardware decoders require all frames that they will use for ++ * output to be defined in advance before decoding starts. For such ++ * decoders, the hardware frame pool must therefore be of a fixed size. ++ * The extra frames set here are on top of any number that the decoder ++ * needs internally in order to operate normally (for example, frames ++ * used as reference pictures). ++ */ ++ int extra_hw_frames; ++ ++ /** ++ * The percentage of damaged samples to discard a frame. ++ * ++ * - decoding: set by user ++ * - encoding: unused ++ */ ++ int discard_damaged_percentage; ++ ++ /** ++ * The number of samples per frame to maximally accept. ++ * ++ * - decoding: set by user ++ * - encoding: set by user ++ */ ++ int64_t max_samples; ++ ++ /** ++ * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of ++ * metadata exported in frame, packet, or coded stream side data by ++ * decoders and encoders. ++ * ++ * - decoding: set by user ++ * - encoding: set by user ++ */ ++ int export_side_data; ++ ++ /** ++ * This callback is called at the beginning of each packet to get a data ++ * buffer for it. ++ * ++ * The following field will be set in the packet before this callback is ++ * called: ++ * - size ++ * This callback must use the above value to calculate the required buffer ++ * size, which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. ++ * ++ * In some specific cases, the encoder may not use the entire buffer allocated ++ * by this callback. This will be reflected in the size value in the packet ++ * once returned by avcodec_receive_packet(). ++ * ++ * This callback must fill the following fields in the packet: ++ * - data: alignment requirements for AVPacket apply, if any. Some ++ * architectures and encoders may benefit from having aligned data. ++ * - buf: must contain a pointer to an AVBufferRef structure. The packet's ++ * data pointer must be contained in it. See: av_buffer_create(), ++ * av_buffer_alloc(), and av_buffer_ref(). ++ * ++ * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call ++ * avcodec_default_get_encode_buffer() instead of providing a buffer allocated ++ * by some other means. ++ * ++ * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ ++ * flags. They may be used for example to hint what use the buffer may get ++ * after being created. Implementations of this callback may ignore flags they ++ * don't understand. If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the ++ * packet may be reused (read and/or written to if it is writable) later by ++ * libavcodec. ++ * ++ * This callback must be thread-safe, as when frame threading is used, it may ++ * be called from multiple threads simultaneously. ++ * ++ * @see avcodec_default_get_encode_buffer() ++ * ++ * - encoding: Set by libavcodec, user can override. ++ * - decoding: unused ++ */ ++ int (*get_encode_buffer)(struct AVCodecContext* s, AVPacket* pkt, int flags); ++ ++ /** ++ * Audio channel layout. ++ * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. ++ * - decoding: may be set by the caller if known e.g. from the container. ++ * The decoder can then override during decoding as needed. ++ */ ++ AVChannelLayout ch_layout; ++ ++ /** ++ * Frame counter, set by libavcodec. ++ * ++ * - decoding: total number of frames returned from the decoder so far. ++ * - encoding: total number of frames passed to the encoder so far. ++ * ++ * @note the counter is not incremented if encoding/decoding resulted in ++ * an error. ++ */ ++ int64_t frame_num; ++} AVCodecContext; ++ ++/** ++ * @defgroup lavc_hwaccel AVHWAccel ++ * ++ * @note Nothing in this structure should be accessed by the user. At some ++ * point in future it will not be externally visible at all. ++ * ++ * @{ ++ */ ++typedef struct AVHWAccel { ++ /** ++ * Name of the hardware accelerated codec. ++ * The name is globally unique among encoders and among decoders (but an ++ * encoder and a decoder can share the same name). ++ */ ++ const char* name; ++ ++ /** ++ * Type of codec implemented by the hardware accelerator. ++ * ++ * See AVMEDIA_TYPE_xxx ++ */ ++ enum AVMediaType type; ++ ++ /** ++ * Codec implemented by the hardware accelerator. ++ * ++ * See AV_CODEC_ID_xxx ++ */ ++ enum AVCodecID id; ++ ++ /** ++ * Supported pixel format. ++ * ++ * Only hardware accelerated formats are supported here. ++ */ ++ enum AVPixelFormat pix_fmt; ++ ++ /** ++ * Hardware accelerated codec capabilities. ++ * see AV_HWACCEL_CODEC_CAP_* ++ */ ++ int capabilities; ++ ++ /***************************************************************** ++ * No fields below this line are part of the public API. They ++ * may not be used outside of libavcodec and can be changed and ++ * removed at will. ++ * New public fields should be added right above. ++ ***************************************************************** ++ */ ++ ++ /** ++ * Allocate a custom buffer ++ */ ++ int (*alloc_frame)(AVCodecContext* avctx, AVFrame* frame); ++ ++ /** ++ * Called at the beginning of each frame or field picture. ++ * ++ * Meaningful frame information (codec specific) is guaranteed to ++ * be parsed at this point. This function is mandatory. ++ * ++ * Note that buf can be NULL along with buf_size set to 0. ++ * Otherwise, this means the whole frame is available at this point. ++ * ++ * @param avctx the codec context ++ * @param buf the frame data buffer base ++ * @param buf_size the size of the frame in bytes ++ * @return zero if successful, a negative value otherwise ++ */ ++ int (*start_frame)(AVCodecContext* avctx, const uint8_t* buf, ++ uint32_t buf_size); ++ ++ /** ++ * Callback for parameter data (SPS/PPS/VPS etc). ++ * ++ * Useful for hardware decoders which keep persistent state about the ++ * video parameters, and need to receive any changes to update that state. ++ * ++ * @param avctx the codec context ++ * @param type the nal unit type ++ * @param buf the nal unit data buffer ++ * @param buf_size the size of the nal unit in bytes ++ * @return zero if successful, a negative value otherwise ++ */ ++ int (*decode_params)(AVCodecContext* avctx, int type, const uint8_t* buf, ++ uint32_t buf_size); ++ ++ /** ++ * Callback for each slice. ++ * ++ * Meaningful slice information (codec specific) is guaranteed to ++ * be parsed at this point. This function is mandatory. ++ * ++ * @param avctx the codec context ++ * @param buf the slice data buffer base ++ * @param buf_size the size of the slice in bytes ++ * @return zero if successful, a negative value otherwise ++ */ ++ int (*decode_slice)(AVCodecContext* avctx, const uint8_t* buf, ++ uint32_t buf_size); ++ ++ /** ++ * Called at the end of each frame or field picture. ++ * ++ * The whole picture is parsed at this point and can now be sent ++ * to the hardware accelerator. This function is mandatory. ++ * ++ * @param avctx the codec context ++ * @return zero if successful, a negative value otherwise ++ */ ++ int (*end_frame)(AVCodecContext* avctx); ++ ++ /** ++ * Size of per-frame hardware accelerator private data. ++ * ++ * Private data is allocated with av_mallocz() before ++ * AVCodecContext.get_buffer() and deallocated after ++ * AVCodecContext.release_buffer(). ++ */ ++ int frame_priv_data_size; ++ ++ /** ++ * Initialize the hwaccel private data. ++ * ++ * This will be called from ff_get_format(), after hwaccel and ++ * hwaccel_context are set and the hwaccel private data in AVCodecInternal ++ * is allocated. ++ */ ++ int (*init)(AVCodecContext* avctx); ++ ++ /** ++ * Uninitialize the hwaccel private data. ++ * ++ * This will be called from get_format() or avcodec_close(), after hwaccel ++ * and hwaccel_context are already uninitialized. ++ */ ++ int (*uninit)(AVCodecContext* avctx); ++ ++ /** ++ * Size of the private data to allocate in ++ * AVCodecInternal.hwaccel_priv_data. ++ */ ++ int priv_data_size; ++ ++ /** ++ * Internal hwaccel capabilities. ++ */ ++ int caps_internal; ++ ++ /** ++ * Fill the given hw_frames context with current codec parameters. Called ++ * from get_format. Refer to avcodec_get_hw_frames_parameters() for ++ * details. ++ * ++ * This CAN be called before AVHWAccel.init is called, and you must assume ++ * that avctx->hwaccel_priv_data is invalid. ++ */ ++ int (*frame_params)(AVCodecContext* avctx, AVBufferRef* hw_frames_ctx); ++} AVHWAccel; ++ ++/** ++ * HWAccel is experimental and is thus avoided in favor of non experimental ++ * codecs ++ */ ++#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 ++ ++/** ++ * Hardware acceleration should be used for decoding even if the codec level ++ * used is unknown or higher than the maximum supported level reported by the ++ * hardware driver. ++ * ++ * It's generally a good idea to pass this flag unless you have a specific ++ * reason not to, as hardware tends to under-report supported levels. ++ */ ++#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) ++ ++/** ++ * Hardware acceleration can output YUV pixel formats with a different chroma ++ * sampling than 4:2:0 and/or other than 8 bits per component. ++ */ ++#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) ++ ++/** ++ * Hardware acceleration should still be attempted for decoding when the ++ * codec profile does not match the reported capabilities of the hardware. ++ * ++ * For example, this can be used to try to decode baseline profile H.264 ++ * streams in hardware - it will often succeed, because many streams marked ++ * as baseline profile actually conform to constrained baseline profile. ++ * ++ * @warning If the stream is actually not supported then the behaviour is ++ * undefined, and may include returning entirely incorrect output ++ * while indicating success. ++ */ ++#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) ++ ++/** ++ * Some hardware decoders (namely nvdec) can either output direct decoder ++ * surfaces, or make an on-device copy and return said copy. ++ * There is a hard limit on how many decoder surfaces there can be, and it ++ * cannot be accurately guessed ahead of time. ++ * For some processing chains, this can be okay, but others will run into the ++ * limit and in turn produce very confusing errors that require fine tuning of ++ * more or less obscure options by the user, or in extreme cases cannot be ++ * resolved at all without inserting an avfilter that forces a copy. ++ * ++ * Thus, the hwaccel will by default make a copy for safety and resilience. ++ * If a users really wants to minimize the amount of copies, they can set this ++ * flag and ensure their processing chain does not exhaust the surface pool. ++ */ ++#define AV_HWACCEL_FLAG_UNSAFE_OUTPUT (1 << 3) ++ ++/** ++ * @} ++ */ ++ ++enum AVSubtitleType { ++ SUBTITLE_NONE, ++ ++ SUBTITLE_BITMAP, ///< A bitmap, pict will be set ++ ++ /** ++ * Plain text, the text field must be set by the decoder and is ++ * authoritative. ass and pict fields may contain approximations. ++ */ ++ SUBTITLE_TEXT, ++ ++ /** ++ * Formatted text, the ass field must be set by the decoder and is ++ * authoritative. pict and text fields may contain approximations. ++ */ ++ SUBTITLE_ASS, ++}; ++ ++#define AV_SUBTITLE_FLAG_FORCED 0x00000001 ++ ++typedef struct AVSubtitleRect { ++ int x; ///< top left corner of pict, undefined when pict is not set ++ int y; ///< top left corner of pict, undefined when pict is not set ++ int w; ///< width of pict, undefined when pict is not set ++ int h; ///< height of pict, undefined when pict is not set ++ int nb_colors; ///< number of colors in pict, undefined when pict is not set ++ ++ /** ++ * data+linesize for the bitmap of this subtitle. ++ * Can be set for text/ass as well once they are rendered. ++ */ ++ uint8_t* data[4]; ++ int linesize[4]; ++ ++ enum AVSubtitleType type; ++ ++ char* text; ///< 0 terminated plain UTF-8 text ++ ++ /** ++ * 0 terminated ASS/SSA compatible event line. ++ * The presentation of this is unaffected by the other values in this ++ * struct. ++ */ ++ char* ass; ++ ++ int flags; ++} AVSubtitleRect; ++ ++typedef struct AVSubtitle { ++ uint16_t format; /* 0 = graphics */ ++ uint32_t start_display_time; /* relative to packet pts, in ms */ ++ uint32_t end_display_time; /* relative to packet pts, in ms */ ++ unsigned num_rects; ++ AVSubtitleRect** rects; ++ int64_t pts; ///< Same as packet pts, in AV_TIME_BASE ++} AVSubtitle; ++ ++/** ++ * Return the LIBAVCODEC_VERSION_INT constant. ++ */ ++unsigned avcodec_version(void); ++ ++/** ++ * Return the libavcodec build-time configuration. ++ */ ++const char* avcodec_configuration(void); ++ ++/** ++ * Return the libavcodec license. ++ */ ++const char* avcodec_license(void); ++ ++/** ++ * Allocate an AVCodecContext and set its fields to default values. The ++ * resulting struct should be freed with avcodec_free_context(). ++ * ++ * @param codec if non-NULL, allocate private data and initialize defaults ++ * for the given codec. It is illegal to then call avcodec_open2() ++ * with a different codec. ++ * If NULL, then the codec-specific defaults won't be initialized, ++ * which may result in suboptimal default settings (this is ++ * important mainly for encoders, e.g. libx264). ++ * ++ * @return An AVCodecContext filled with default values or NULL on failure. ++ */ ++AVCodecContext* avcodec_alloc_context3(const AVCodec* codec); ++ ++/** ++ * Free the codec context and everything associated with it and write NULL to ++ * the provided pointer. ++ */ ++void avcodec_free_context(AVCodecContext** avctx); ++ ++/** ++ * Get the AVClass for AVCodecContext. It can be used in combination with ++ * AV_OPT_SEARCH_FAKE_OBJ for examining options. ++ * ++ * @see av_opt_find(). ++ */ ++const AVClass* avcodec_get_class(void); ++ ++/** ++ * Get the AVClass for AVSubtitleRect. It can be used in combination with ++ * AV_OPT_SEARCH_FAKE_OBJ for examining options. ++ * ++ * @see av_opt_find(). ++ */ ++const AVClass* avcodec_get_subtitle_rect_class(void); ++ ++/** ++ * Fill the parameters struct based on the values from the supplied codec ++ * context. Any allocated fields in par are freed and replaced with duplicates ++ * of the corresponding fields in codec. ++ * ++ * @return >= 0 on success, a negative AVERROR code on failure ++ */ ++int avcodec_parameters_from_context(AVCodecParameters* par, ++ const AVCodecContext* codec); ++ ++/** ++ * Fill the codec context based on the values from the supplied codec ++ * parameters. Any allocated fields in codec that have a corresponding field in ++ * par are freed and replaced with duplicates of the corresponding field in par. ++ * Fields in codec that do not have a counterpart in par are not touched. ++ * ++ * @return >= 0 on success, a negative AVERROR code on failure. ++ */ ++int avcodec_parameters_to_context(AVCodecContext* codec, ++ const AVCodecParameters* par); ++ ++/** ++ * Initialize the AVCodecContext to use the given AVCodec. Prior to using this ++ * function the context has to be allocated with avcodec_alloc_context3(). ++ * ++ * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), ++ * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for ++ * retrieving a codec. ++ * ++ * @note Always call this function before using decoding routines (such as ++ * @ref avcodec_receive_frame()). ++ * ++ * @code ++ * av_dict_set(&opts, "b", "2.5M", 0); ++ * codec = avcodec_find_decoder(AV_CODEC_ID_H264); ++ * if (!codec) ++ * exit(1); ++ * ++ * context = avcodec_alloc_context3(codec); ++ * ++ * if (avcodec_open2(context, codec, opts) < 0) ++ * exit(1); ++ * @endcode ++ * ++ * @param avctx The context to initialize. ++ * @param codec The codec to open this context for. If a non-NULL codec has been ++ * previously passed to avcodec_alloc_context3() or ++ * for this context, then this parameter MUST be either NULL or ++ * equal to the previously passed codec. ++ * @param options A dictionary filled with AVCodecContext and codec-private ++ * options. On return this object will be filled with options that were not ++ * found. ++ * ++ * @return zero on success, a negative value on error ++ * @see avcodec_alloc_context3(), avcodec_find_decoder(), ++ * avcodec_find_encoder(), av_dict_set(), av_opt_find(). ++ */ ++int avcodec_open2(AVCodecContext* avctx, const AVCodec* codec, ++ AVDictionary** options); ++ ++/** ++ * Close a given AVCodecContext and free all the data associated with it ++ * (but not the AVCodecContext itself). ++ * ++ * Calling this function on an AVCodecContext that hasn't been opened will free ++ * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL ++ * codec. Subsequent calls will do nothing. ++ * ++ * @note Do not use this function. Use avcodec_free_context() to destroy a ++ * codec context (either open or closed). Opening and closing a codec context ++ * multiple times is not supported anymore -- use multiple codec contexts ++ * instead. ++ */ ++int avcodec_close(AVCodecContext* avctx); ++ ++/** ++ * Free all allocated data in the given subtitle struct. ++ * ++ * @param sub AVSubtitle to free. ++ */ ++void avsubtitle_free(AVSubtitle* sub); ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @addtogroup lavc_decoding ++ * @{ ++ */ ++ ++/** ++ * The default callback for AVCodecContext.get_buffer2(). It is made public so ++ * it can be called by custom get_buffer2() implementations for decoders without ++ * AV_CODEC_CAP_DR1 set. ++ */ ++int avcodec_default_get_buffer2(AVCodecContext* s, AVFrame* frame, int flags); ++ ++/** ++ * The default callback for AVCodecContext.get_encode_buffer(). It is made ++ * public so it can be called by custom get_encode_buffer() implementations for ++ * encoders without AV_CODEC_CAP_DR1 set. ++ */ ++int avcodec_default_get_encode_buffer(AVCodecContext* s, AVPacket* pkt, ++ int flags); ++ ++/** ++ * Modify width and height values so that they will result in a memory ++ * buffer that is acceptable for the codec if you do not use any horizontal ++ * padding. ++ * ++ * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. ++ */ ++void avcodec_align_dimensions(AVCodecContext* s, int* width, int* height); ++ ++/** ++ * Modify width and height values so that they will result in a memory ++ * buffer that is acceptable for the codec if you also ensure that all ++ * line sizes are a multiple of the respective linesize_align[i]. ++ * ++ * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. ++ */ ++void avcodec_align_dimensions2(AVCodecContext* s, int* width, int* height, ++ int linesize_align[AV_NUM_DATA_POINTERS]); ++ ++#ifdef FF_API_AVCODEC_CHROMA_POS ++/** ++ * Converts AVChromaLocation to swscale x/y chroma position. ++ * ++ * The positions represent the chroma (0,0) position in a coordinates system ++ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 ++ * ++ * @param xpos horizontal chroma sample position ++ * @param ypos vertical chroma sample position ++ * @deprecated Use av_chroma_location_enum_to_pos() instead. ++ */ ++attribute_deprecated int avcodec_enum_to_chroma_pos(int* xpos, int* ypos, ++ enum AVChromaLocation pos); ++ ++/** ++ * Converts swscale x/y chroma position to AVChromaLocation. ++ * ++ * The positions represent the chroma (0,0) position in a coordinates system ++ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 ++ * ++ * @param xpos horizontal chroma sample position ++ * @param ypos vertical chroma sample position ++ * @deprecated Use av_chroma_location_pos_to_enum() instead. ++ */ ++attribute_deprecated enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, ++ int ypos); ++#endif ++ ++/** ++ * Decode a subtitle message. ++ * Return a negative value on error, otherwise return the number of bytes used. ++ * If no subtitle could be decompressed, got_sub_ptr is zero. ++ * Otherwise, the subtitle is stored in *sub. ++ * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for ++ * simplicity, because the performance difference is expected to be negligible ++ * and reusing a get_buffer written for video codecs would probably perform ++ * badly due to a potentially very different allocation pattern. ++ * ++ * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between ++ * input and output. This means that for some packets they will not immediately ++ * produce decoded output and need to be flushed at the end of decoding to get ++ * all the decoded data. Flushing is done by calling this function with packets ++ * with avpkt->data set to NULL and avpkt->size set to 0 until it stops ++ * returning subtitles. It is safe to flush even those decoders that are not ++ * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. ++ * ++ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() ++ * before packets may be fed to the decoder. ++ * ++ * @param avctx the codec context ++ * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle ++ * will be stored, must be freed with avsubtitle_free if *got_sub_ptr is set. ++ * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, ++ * otherwise, it is nonzero. ++ * @param[in] avpkt The input AVPacket containing the input buffer. ++ */ ++int avcodec_decode_subtitle2(AVCodecContext* avctx, AVSubtitle* sub, ++ int* got_sub_ptr, const AVPacket* avpkt); ++ ++/** ++ * Supply raw packet data as input to a decoder. ++ * ++ * Internally, this call will copy relevant AVCodecContext fields, which can ++ * influence decoding per-packet, and apply them when the packet is actually ++ * decoded. (For example AVCodecContext.skip_frame, which might direct the ++ * decoder to drop the frame contained by the packet sent with this function.) ++ * ++ * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE ++ * larger than the actual read bytes because some optimized bitstream ++ * readers read 32 or 64 bits at once and could read over the end. ++ * ++ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() ++ * before packets may be fed to the decoder. ++ * ++ * @param avctx codec context ++ * @param[in] avpkt The input AVPacket. Usually, this will be a single video ++ * frame, or several complete audio frames. ++ * Ownership of the packet remains with the caller, and the ++ * decoder will not write to the packet. The decoder may create ++ * a reference to the packet data (or copy it if the packet is ++ * not reference-counted). ++ * Unlike with older APIs, the packet is always fully consumed, ++ * and if it contains multiple frames (e.g. some audio codecs), ++ * will require you to call avcodec_receive_frame() multiple ++ * times afterwards before you can send a new packet. ++ * It can be NULL (or an AVPacket with data set to NULL and ++ * size set to 0); in this case, it is considered a flush ++ * packet, which signals the end of the stream. Sending the ++ * first flush packet will return success. Subsequent ones are ++ * unnecessary and will return AVERROR_EOF. If the decoder ++ * still has frames buffered, it will return them after sending ++ * a flush packet. ++ * ++ * @retval 0 success ++ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user ++ * must read output with avcodec_receive_frame() (once ++ * all output is read, the packet should be resent, ++ * and the call will not fail with EAGAIN). ++ * @retval AVERROR_EOF the decoder has been flushed, and no new packets ++ * can be sent to it (also returned if more than 1 flush packet is sent) ++ * @retval AVERROR(EINVAL) codec not opened, it is an encoder, or requires ++ * flush ++ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar ++ * @retval "another negative error code" legitimate decoding errors ++ */ ++int avcodec_send_packet(AVCodecContext* avctx, const AVPacket* avpkt); ++ ++/** ++ * Return decoded output data from a decoder or encoder (when the ++ * AV_CODEC_FLAG_RECON_FRAME flag is used). ++ * ++ * @param avctx codec context ++ * @param frame This will be set to a reference-counted video or audio ++ * frame (depending on the decoder type) allocated by the ++ * codec. Note that the function will always call ++ * av_frame_unref(frame) before doing anything else. ++ * ++ * @retval 0 success, a frame was returned ++ * @retval AVERROR(EAGAIN) output is not available in this state - user must ++ * try to send new input ++ * @retval AVERROR_EOF the codec has been fully flushed, and there will be ++ * no more output frames ++ * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the ++ * AV_CODEC_FLAG_RECON_FRAME flag enabled ++ * @retval AVERROR_INPUT_CHANGED current decoded frame has changed parameters ++ * with respect to first decoded frame. Applicable when flag ++ * AV_CODEC_FLAG_DROPCHANGED is set. ++ * @retval "other negative error code" legitimate decoding errors ++ */ ++int avcodec_receive_frame(AVCodecContext* avctx, AVFrame* frame); ++ ++/** ++ * Supply a raw video or audio frame to the encoder. Use ++ * avcodec_receive_packet() to retrieve buffered output packets. ++ * ++ * @param avctx codec context ++ * @param[in] frame AVFrame containing the raw audio or video frame to be ++ * encoded. Ownership of the frame remains with the caller, and the encoder will ++ * not write to the frame. The encoder may create a reference to the frame data ++ * (or copy it if the frame is not reference-counted). It can be NULL, in which ++ * case it is considered a flush packet. This signals the end of the stream. If ++ * the encoder still has packets buffered, it will return them after this call. ++ * Once flushing mode has been entered, additional flush packets are ignored, ++ * and sending frames will return AVERROR_EOF. ++ * ++ * For audio: ++ * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame ++ * can have any number of samples. ++ * If it is not set, frame->nb_samples must be equal to ++ * avctx->frame_size for all frames except the last. ++ * The final frame may be smaller than avctx->frame_size. ++ * @retval 0 success ++ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user ++ * must read output with avcodec_receive_packet() (once all output is read, the ++ * packet should be resent, and the call will not fail with EAGAIN). ++ * @retval AVERROR_EOF the encoder has been flushed, and no new frames can ++ * be sent to it ++ * @retval AVERROR(EINVAL) codec not opened, it is a decoder, or requires ++ * flush ++ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar ++ * @retval "another negative error code" legitimate encoding errors ++ */ ++int avcodec_send_frame(AVCodecContext* avctx, const AVFrame* frame); ++ ++/** ++ * Read encoded data from the encoder. ++ * ++ * @param avctx codec context ++ * @param avpkt This will be set to a reference-counted packet allocated by the ++ * encoder. Note that the function will always call ++ * av_packet_unref(avpkt) before doing anything else. ++ * @retval 0 success ++ * @retval AVERROR(EAGAIN) output is not available in the current state - user ++ * must try to send input ++ * @retval AVERROR_EOF the encoder has been fully flushed, and there will be ++ * no more output packets ++ * @retval AVERROR(EINVAL) codec not opened, or it is a decoder ++ * @retval "another negative error code" legitimate encoding errors ++ */ ++int avcodec_receive_packet(AVCodecContext* avctx, AVPacket* avpkt); ++ ++/** ++ * Create and return a AVHWFramesContext with values adequate for hardware ++ * decoding. This is meant to get called from the get_format callback, and is ++ * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. ++ * This API is for decoding with certain hardware acceleration modes/APIs only. ++ * ++ * The returned AVHWFramesContext is not initialized. The caller must do this ++ * with av_hwframe_ctx_init(). ++ * ++ * Calling this function is not a requirement, but makes it simpler to avoid ++ * codec or hardware API specific details when manually allocating frames. ++ * ++ * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, ++ * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes ++ * it unnecessary to call this function or having to care about ++ * AVHWFramesContext initialization at all. ++ * ++ * There are a number of requirements for calling this function: ++ * ++ * - It must be called from get_format with the same avctx parameter that was ++ * passed to get_format. Calling it outside of get_format is not allowed, and ++ * can trigger undefined behavior. ++ * - The function is not always supported (see description of return values). ++ * Even if this function returns successfully, hwaccel initialization could ++ * fail later. (The degree to which implementations check whether the stream ++ * is actually supported varies. Some do this check only after the user's ++ * get_format callback returns.) ++ * - The hw_pix_fmt must be one of the choices suggested by get_format. If the ++ * user decides to use a AVHWFramesContext prepared with this API function, ++ * the user must return the same hw_pix_fmt from get_format. ++ * - The device_ref passed to this function must support the given hw_pix_fmt. ++ * - After calling this API function, it is the user's responsibility to ++ * initialize the AVHWFramesContext (returned by the out_frames_ref ++ * parameter), and to set AVCodecContext.hw_frames_ctx to it. If done, this must ++ * be done before returning from get_format (this is implied by the normal ++ * AVCodecContext.hw_frames_ctx API rules). ++ * - The AVHWFramesContext parameters may change every time time get_format is ++ * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So ++ * you are inherently required to go through this process again on every ++ * get_format call. ++ * - It is perfectly possible to call this function without actually using ++ * the resulting AVHWFramesContext. One use-case might be trying to reuse a ++ * previously initialized AVHWFramesContext, and calling this API function ++ * only to test whether the required frame parameters have changed. ++ * - Fields that use dynamically allocated values of any kind must not be set ++ * by the user unless setting them is explicitly allowed by the documentation. ++ * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, ++ * the new free callback must call the potentially set previous free callback. ++ * This API call may set any dynamically allocated fields, including the free ++ * callback. ++ * ++ * The function will set at least the following fields on AVHWFramesContext ++ * (potentially more, depending on hwaccel API): ++ * ++ * - All fields set by av_hwframe_ctx_alloc(). ++ * - Set the format field to hw_pix_fmt. ++ * - Set the sw_format field to the most suited and most versatile format. (An ++ * implication is that this will prefer generic formats over opaque formats ++ * with arbitrary restrictions, if possible.) ++ * - Set the width/height fields to the coded frame size, rounded up to the ++ * API-specific minimum alignment. ++ * - Only _if_ the hwaccel requires a pre-allocated pool: set the ++ * initial_pool_size field to the number of maximum reference surfaces possible ++ * with the codec, plus 1 surface for the user to work (meaning the user can ++ * safely reference at most 1 decoded surface at a time), plus additional ++ * buffering introduced by frame threading. If the hwaccel does not require ++ * pre-allocation, the field is left to 0, and the decoder will allocate new ++ * surfaces on demand during decoding. ++ * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying ++ * hardware API. ++ * ++ * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but ++ * with basic frame parameters set. ++ * ++ * The function is stateless, and does not change the AVCodecContext or the ++ * device_ref AVHWDeviceContext. ++ * ++ * @param avctx The context which is currently calling get_format, and which ++ * implicitly contains all state needed for filling the returned ++ * AVHWFramesContext properly. ++ * @param device_ref A reference to the AVHWDeviceContext describing the device ++ * which will be used by the hardware decoder. ++ * @param hw_pix_fmt The hwaccel format you are going to return from get_format. ++ * @param out_frames_ref On success, set to a reference to an _uninitialized_ ++ * AVHWFramesContext, created from the given device_ref. ++ * Fields will be set to values required for decoding. ++ * Not changed if an error is returned. ++ * @return zero on success, a negative value on error. The following error codes ++ * have special semantics: ++ * AVERROR(ENOENT): the decoder does not support this functionality. Setup ++ * is always manual, or it is a decoder which does not ++ * support setting AVCodecContext.hw_frames_ctx at all, ++ * or it is a software format. ++ * AVERROR(EINVAL): it is known that hardware decoding is not supported for ++ * this configuration, or the device_ref is not supported ++ * for the hwaccel referenced by hw_pix_fmt. ++ */ ++int avcodec_get_hw_frames_parameters(AVCodecContext* avctx, ++ AVBufferRef* device_ref, ++ enum AVPixelFormat hw_pix_fmt, ++ AVBufferRef** out_frames_ref); ++ ++/** ++ * @defgroup lavc_parsing Frame parsing ++ * @{ ++ */ ++ ++enum AVPictureStructure { ++ AV_PICTURE_STRUCTURE_UNKNOWN, ///< unknown ++ AV_PICTURE_STRUCTURE_TOP_FIELD, ///< coded as top field ++ AV_PICTURE_STRUCTURE_BOTTOM_FIELD, ///< coded as bottom field ++ AV_PICTURE_STRUCTURE_FRAME, ///< coded as frame ++}; ++ ++typedef struct AVCodecParserContext { ++ void* priv_data; ++ const struct AVCodecParser* parser; ++ int64_t frame_offset; /* offset of the current frame */ ++ int64_t cur_offset; /* current offset ++ (incremented by each av_parser_parse()) */ ++ int64_t next_frame_offset; /* offset of the next frame */ ++ /* video info */ ++ int pict_type; /* XXX: Put it back in AVCodecContext. */ ++ /** ++ * This field is used for proper frame duration computation in lavf. ++ * It signals, how much longer the frame duration of the current frame ++ * is compared to normal frame duration. ++ * ++ * frame_duration = (1 + repeat_pict) * time_base ++ * ++ * It is used by codecs like H.264 to display telecined material. ++ */ ++ int repeat_pict; /* XXX: Put it back in AVCodecContext. */ ++ int64_t pts; /* pts of the current frame */ ++ int64_t dts; /* dts of the current frame */ ++ ++ /* private data */ ++ int64_t last_pts; ++ int64_t last_dts; ++ int fetch_timestamp; ++ ++#define AV_PARSER_PTS_NB 4 ++ int cur_frame_start_index; ++ int64_t cur_frame_offset[AV_PARSER_PTS_NB]; ++ int64_t cur_frame_pts[AV_PARSER_PTS_NB]; ++ int64_t cur_frame_dts[AV_PARSER_PTS_NB]; ++ ++ int flags; ++#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 ++#define PARSER_FLAG_ONCE 0x0002 ++/// Set if the parser has a valid file offset ++#define PARSER_FLAG_FETCHED_OFFSET 0x0004 ++#define PARSER_FLAG_USE_CODEC_TS 0x1000 ++ ++ int64_t offset; ///< byte offset from starting packet start ++ int64_t cur_frame_end[AV_PARSER_PTS_NB]; ++ ++ /** ++ * Set by parser to 1 for key frames and 0 for non-key frames. ++ * It is initialized to -1, so if the parser doesn't set this flag, ++ * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames ++ * will be used. ++ */ ++ int key_frame; ++ ++ // Timestamp generation support: ++ /** ++ * Synchronization point for start of timestamp generation. ++ * ++ * Set to >0 for sync point, 0 for no sync point and <0 for undefined ++ * (default). ++ * ++ * For example, this corresponds to presence of H.264 buffering period ++ * SEI message. ++ */ ++ int dts_sync_point; ++ ++ /** ++ * Offset of the current timestamp against last timestamp sync point in ++ * units of AVCodecContext.time_base. ++ * ++ * Set to INT_MIN when dts_sync_point unused. Otherwise, it must ++ * contain a valid timestamp offset. ++ * ++ * Note that the timestamp of sync point has usually a nonzero ++ * dts_ref_dts_delta, which refers to the previous sync point. Offset of ++ * the next frame after timestamp sync point will be usually 1. ++ * ++ * For example, this corresponds to H.264 cpb_removal_delay. ++ */ ++ int dts_ref_dts_delta; ++ ++ /** ++ * Presentation delay of current frame in units of AVCodecContext.time_base. ++ * ++ * Set to INT_MIN when dts_sync_point unused. Otherwise, it must ++ * contain valid non-negative timestamp delta (presentation time of a frame ++ * must not lie in the past). ++ * ++ * This delay represents the difference between decoding and presentation ++ * time of the frame. ++ * ++ * For example, this corresponds to H.264 dpb_output_delay. ++ */ ++ int pts_dts_delta; ++ ++ /** ++ * Position of the packet in file. ++ * ++ * Analogous to cur_frame_pts/dts ++ */ ++ int64_t cur_frame_pos[AV_PARSER_PTS_NB]; ++ ++ /** ++ * Byte position of currently parsed frame in stream. ++ */ ++ int64_t pos; ++ ++ /** ++ * Previous frame byte position. ++ */ ++ int64_t last_pos; ++ ++ /** ++ * Duration of the current frame. ++ * For audio, this is in units of 1 / AVCodecContext.sample_rate. ++ * For all other types, this is in units of AVCodecContext.time_base. ++ */ ++ int duration; ++ ++ enum AVFieldOrder field_order; ++ ++ /** ++ * Indicate whether a picture is coded as a frame, top field or bottom field. ++ * ++ * For example, H.264 field_pic_flag equal to 0 corresponds to ++ * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag ++ * equal to 1 and bottom_field_flag equal to 0 corresponds to ++ * AV_PICTURE_STRUCTURE_TOP_FIELD. ++ */ ++ enum AVPictureStructure picture_structure; ++ ++ /** ++ * Picture number incremented in presentation or output order. ++ * This field may be reinitialized at the first picture of a new sequence. ++ * ++ * For example, this corresponds to H.264 PicOrderCnt. ++ */ ++ int output_picture_number; ++ ++ /** ++ * Dimensions of the decoded video intended for presentation. ++ */ ++ int width; ++ int height; ++ ++ /** ++ * Dimensions of the coded video. ++ */ ++ int coded_width; ++ int coded_height; ++ ++ /** ++ * The format of the coded data, corresponds to enum AVPixelFormat for video ++ * and for enum AVSampleFormat for audio. ++ * ++ * Note that a decoder can have considerable freedom in how exactly it ++ * decodes the data, so the format reported here might be different from the ++ * one returned by a decoder. ++ */ ++ int format; ++} AVCodecParserContext; ++ ++typedef struct AVCodecParser { ++ int codec_ids[7]; /* several codec IDs are permitted */ ++ int priv_data_size; ++ int (*parser_init)(AVCodecParserContext* s); ++ /* This callback never returns an error, a negative value means that ++ * the frame start was in a previous packet. */ ++ int (*parser_parse)(AVCodecParserContext* s, AVCodecContext* avctx, ++ const uint8_t** poutbuf, int* poutbuf_size, ++ const uint8_t* buf, int buf_size); ++ void (*parser_close)(AVCodecParserContext* s); ++ int (*split)(AVCodecContext* avctx, const uint8_t* buf, int buf_size); ++} AVCodecParser; ++ ++/** ++ * Iterate over all registered codec parsers. ++ * ++ * @param opaque a pointer where libavcodec will store the iteration state. Must ++ * point to NULL to start the iteration. ++ * ++ * @return the next registered codec parser or NULL when the iteration is ++ * finished ++ */ ++const AVCodecParser* av_parser_iterate(void** opaque); ++ ++AVCodecParserContext* av_parser_init(int codec_id); ++ ++/** ++ * Parse a packet. ++ * ++ * @param s parser context. ++ * @param avctx codec context. ++ * @param poutbuf set to pointer to parsed buffer or NULL if not yet ++ finished. ++ * @param poutbuf_size set to size of parsed buffer or zero if not yet ++ finished. ++ * @param buf input buffer. ++ * @param buf_size buffer size in bytes without the padding. I.e. the full ++ buffer size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. To signal ++ EOF, this should be 0 (so that the last frame can be output). ++ * @param pts input presentation timestamp. ++ * @param dts input decoding timestamp. ++ * @param pos input byte position in stream. ++ * @return the number of bytes of the input bitstream used. ++ * ++ * Example: ++ * @code ++ * while(in_len){ ++ * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, ++ * in_data, in_len, ++ * pts, dts, pos); ++ * in_data += len; ++ * in_len -= len; ++ * ++ * if(size) ++ * decode_frame(data, size); ++ * } ++ * @endcode ++ */ ++int av_parser_parse2(AVCodecParserContext* s, AVCodecContext* avctx, ++ uint8_t** poutbuf, int* poutbuf_size, const uint8_t* buf, ++ int buf_size, int64_t pts, int64_t dts, int64_t pos); ++ ++void av_parser_close(AVCodecParserContext* s); ++ ++/** ++ * @} ++ * @} ++ */ ++ ++/** ++ * @addtogroup lavc_encoding ++ * @{ ++ */ ++ ++int avcodec_encode_subtitle(AVCodecContext* avctx, uint8_t* buf, int buf_size, ++ const AVSubtitle* sub); ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @defgroup lavc_misc Utility functions ++ * @ingroup libavc ++ * ++ * Miscellaneous utility functions related to both encoding and decoding ++ * (or neither). ++ * @{ ++ */ ++ ++/** ++ * @defgroup lavc_misc_pixfmt Pixel formats ++ * ++ * Functions for working with pixel formats. ++ * @{ ++ */ ++ ++/** ++ * Return a value representing the fourCC code associated to the ++ * pixel format pix_fmt, or 0 if no associated fourCC code can be ++ * found. ++ */ ++unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); ++ ++/** ++ * Find the best pixel format to convert to given a certain source pixel ++ * format. When converting from one pixel format to another, information loss ++ * may occur. For example, when converting from RGB24 to GRAY, the color ++ * information will be lost. Similarly, other losses occur when converting from ++ * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches ++ * which of the given pixel formats should be used to suffer the least amount of ++ * loss. The pixel formats from which it chooses one, are determined by the ++ * pix_fmt_list parameter. ++ * ++ * ++ * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to ++ * choose from ++ * @param[in] src_pix_fmt source pixel format ++ * @param[in] has_alpha Whether the source pixel format alpha channel is used. ++ * @param[out] loss_ptr Combination of flags informing you what kind of losses ++ * will occur. ++ * @return The best pixel format to convert to or -1 if none was found. ++ */ ++enum AVPixelFormat avcodec_find_best_pix_fmt_of_list( ++ const enum AVPixelFormat* pix_fmt_list, enum AVPixelFormat src_pix_fmt, ++ int has_alpha, int* loss_ptr); ++ ++enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext* s, ++ const enum AVPixelFormat* fmt); ++ ++/** ++ * @} ++ */ ++ ++void avcodec_string(char* buf, int buf_size, AVCodecContext* enc, int encode); ++ ++int avcodec_default_execute(AVCodecContext* c, ++ int (*func)(AVCodecContext* c2, void* arg2), ++ void* arg, int* ret, int count, int size); ++int avcodec_default_execute2(AVCodecContext* c, ++ int (*func)(AVCodecContext* c2, void* arg2, int, ++ int), ++ void* arg, int* ret, int count); ++// FIXME func typedef ++ ++/** ++ * Fill AVFrame audio data and linesize pointers. ++ * ++ * The buffer buf must be a preallocated buffer with a size big enough ++ * to contain the specified samples amount. The filled AVFrame data ++ * pointers will point to this buffer. ++ * ++ * AVFrame extended_data channel pointers are allocated if necessary for ++ * planar audio. ++ * ++ * @param frame the AVFrame ++ * frame->nb_samples must be set prior to calling the ++ * function. This function fills in frame->data, ++ * frame->extended_data, frame->linesize[0]. ++ * @param nb_channels channel count ++ * @param sample_fmt sample format ++ * @param buf buffer to use for frame data ++ * @param buf_size size of buffer ++ * @param align plane size sample alignment (0 = default) ++ * @return >=0 on success, negative error code on failure ++ * @todo return the size in bytes required to store the samples in ++ * case of success, at the next libavutil bump ++ */ ++int avcodec_fill_audio_frame(AVFrame* frame, int nb_channels, ++ enum AVSampleFormat sample_fmt, const uint8_t* buf, ++ int buf_size, int align); ++ ++/** ++ * Reset the internal codec state / flush internal buffers. Should be called ++ * e.g. when seeking or when switching to a different stream. ++ * ++ * @note for decoders, this function just releases any references the decoder ++ * might keep internally, but the caller's references remain valid. ++ * ++ * @note for encoders, this function will only do something if the encoder ++ * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder ++ * will drain any remaining packets, and can then be re-used for a different ++ * stream (as opposed to sending a null frame which will leave the encoder ++ * in a permanent EOF state after draining). This can be desirable if the ++ * cost of tearing down and replacing the encoder instance is high. ++ */ ++void avcodec_flush_buffers(AVCodecContext* avctx); ++ ++/** ++ * Return audio frame duration. ++ * ++ * @param avctx codec context ++ * @param frame_bytes size of the frame, or 0 if unknown ++ * @return frame duration, in samples, if known. 0 if not able to ++ * determine. ++ */ ++int av_get_audio_frame_duration(AVCodecContext* avctx, int frame_bytes); ++ ++/* memory */ ++ ++/** ++ * Same behaviour av_fast_malloc but the buffer has additional ++ * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. ++ * ++ * In addition the whole buffer will initially and after resizes ++ * be 0-initialized so that no uninitialized data will ever appear. ++ */ ++void av_fast_padded_malloc(void* ptr, unsigned int* size, size_t min_size); ++ ++/** ++ * Same behaviour av_fast_padded_malloc except that buffer will always ++ * be 0-initialized after call. ++ */ ++void av_fast_padded_mallocz(void* ptr, unsigned int* size, size_t min_size); ++ ++/** ++ * @return a positive value if s is open (i.e. avcodec_open2() was called on it ++ * with no corresponding avcodec_close()), 0 otherwise. ++ */ ++int avcodec_is_open(AVCodecContext* s); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVCODEC_AVCODEC_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,85 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVCODEC_AVDCT_H ++#define AVCODEC_AVDCT_H ++ ++#include "libavutil/opt.h" ++ ++/** ++ * AVDCT context. ++ * @note function pointers can be NULL if the specific features have been ++ * disabled at build time. ++ */ ++typedef struct AVDCT { ++ const AVClass* av_class; ++ ++ void (*idct)(int16_t* block /* align 16 */); ++ ++ /** ++ * IDCT input permutation. ++ * Several optimized IDCTs need a permutated input (relative to the ++ * normal order of the reference IDCT). ++ * This permutation must be performed before the idct_put/add. ++ * Note, normally this can be merged with the zigzag/alternate scan
++ * An example to avoid confusion: ++ * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) ++ * - (x -> reference DCT -> reference IDCT -> x) ++ * - (x -> reference DCT -> simple_mmx_perm = idct_permutation ++ * -> simple_idct_mmx -> x) ++ * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant ++ * -> simple_idct_mmx -> ...) ++ */ ++ uint8_t idct_permutation[64]; ++ ++ void (*fdct)(int16_t* block /* align 16 */); ++ ++ /** ++ * DCT algorithm. ++ * must use AVOptions to set this field. ++ */ ++ int dct_algo; ++ ++ /** ++ * IDCT algorithm. ++ * must use AVOptions to set this field. ++ */ ++ int idct_algo; ++ ++ void (*get_pixels)(int16_t* block /* align 16 */, ++ const uint8_t* pixels /* align 8 */, ptrdiff_t line_size); ++ ++ int bits_per_sample; ++ ++ void (*get_pixels_unaligned)(int16_t* block /* align 16 */, ++ const uint8_t* pixels, ptrdiff_t line_size); ++} AVDCT; ++ ++/** ++ * Allocates a AVDCT context. ++ * This needs to be initialized with avcodec_dct_init() after optionally ++ * configuring it with AVOptions. ++ * ++ * To free it use av_free() ++ */ ++AVDCT* avcodec_dct_alloc(void); ++int avcodec_dct_init(AVDCT*); ++ ++const AVClass* avcodec_dct_get_class(void); ++ ++#endif /* AVCODEC_AVDCT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,119 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVCODEC_AVFFT_H ++#define AVCODEC_AVFFT_H ++ ++/** ++ * @file ++ * @ingroup lavc_fft ++ * FFT functions ++ */ ++ ++/** ++ * @defgroup lavc_fft FFT functions ++ * @ingroup lavc_misc ++ * ++ * @{ ++ */ ++ ++typedef float FFTSample; ++ ++typedef struct FFTComplex { ++ FFTSample re, im; ++} FFTComplex; ++ ++typedef struct FFTContext FFTContext; ++ ++/** ++ * Set up a complex FFT. ++ * @param nbits log2 of the length of the input array ++ * @param inverse if 0 perform the forward transform, if 1 perform the ++ * inverse ++ */ ++FFTContext* av_fft_init(int nbits, int inverse); ++ ++/** ++ * Do the permutation needed BEFORE calling ff_fft_calc(). ++ */ ++void av_fft_permute(FFTContext* s, FFTComplex* z); ++ ++/** ++ * Do a complex FFT with the parameters defined in av_fft_init(). The ++ * input data must be permuted before. No 1.0/sqrt(n) normalization is done. ++ */ ++void av_fft_calc(FFTContext* s, FFTComplex* z); ++ ++void av_fft_end(FFTContext* s); ++ ++FFTContext* av_mdct_init(int nbits, int inverse, double scale); ++void av_imdct_calc(FFTContext* s, FFTSample* output, const FFTSample* input); ++void av_imdct_half(FFTContext* s, FFTSample* output, const FFTSample* input); ++void av_mdct_calc(FFTContext* s, FFTSample* output, const FFTSample* input); ++void av_mdct_end(FFTContext* s); ++ ++/* Real Discrete Fourier Transform */ ++ ++enum RDFTransformType { ++ DFT_R2C, ++ IDFT_C2R, ++ IDFT_R2C, ++ DFT_C2R, ++}; ++ ++typedef struct RDFTContext RDFTContext; ++ ++/** ++ * Set up a real FFT. ++ * @param nbits log2 of the length of the input array ++ * @param trans the type of transform ++ */ ++RDFTContext* av_rdft_init(int nbits, enum RDFTransformType trans); ++void av_rdft_calc(RDFTContext* s, FFTSample* data); ++void av_rdft_end(RDFTContext* s); ++ ++/* Discrete Cosine Transform */ ++ ++typedef struct DCTContext DCTContext; ++ ++enum DCTTransformType { ++ DCT_II = 0, ++ DCT_III, ++ DCT_I, ++ DST_I, ++}; ++ ++/** ++ * Set up DCT. ++ * ++ * @param nbits size of the input array: ++ * (1 << nbits) for DCT-II, DCT-III and DST-I ++ * (1 << nbits) + 1 for DCT-I ++ * @param type the type of transform ++ * ++ * @note the first element of the input of DST-I is ignored ++ */ ++DCTContext* av_dct_init(int nbits, enum DCTTransformType type); ++void av_dct_calc(DCTContext* s, FFTSample* data); ++void av_dct_end(DCTContext* s); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVCODEC_AVFFT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,335 @@ ++/* ++ * Bitstream filters public API ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_BSF_H ++#define AVCODEC_BSF_H ++ ++#include "libavutil/dict.h" ++#include "libavutil/log.h" ++#include "libavutil/rational.h" ++ ++#include "codec_id.h" ++#include "codec_par.h" ++#include "packet.h" ++ ++/** ++ * @defgroup lavc_bsf Bitstream filters ++ * @ingroup libavc ++ * ++ * Bitstream filters transform encoded media data without decoding it. This ++ * allows e.g. manipulating various header values. Bitstream filters operate on ++ * @ref AVPacket "AVPackets". ++ * ++ * The bitstream filtering API is centered around two structures: ++ * AVBitStreamFilter and AVBSFContext. The former represents a bitstream filter ++ * in abstract, the latter a specific filtering process. Obtain an ++ * AVBitStreamFilter using av_bsf_get_by_name() or av_bsf_iterate(), then pass ++ * it to av_bsf_alloc() to create an AVBSFContext. Fill in the user-settable ++ * AVBSFContext fields, as described in its documentation, then call ++ * av_bsf_init() to prepare the filter context for use. ++ * ++ * Submit packets for filtering using av_bsf_send_packet(), obtain filtered ++ * results with av_bsf_receive_packet(). When no more input packets will be ++ * sent, submit a NULL AVPacket to signal the end of the stream to the filter. ++ * av_bsf_receive_packet() will then return trailing packets, if any are ++ * produced by the filter. ++ * ++ * Finally, free the filter context with av_bsf_free(). ++ * @{ ++ */ ++ ++/** ++ * The bitstream filter state. ++ * ++ * This struct must be allocated with av_bsf_alloc() and freed with ++ * av_bsf_free(). ++ * ++ * The fields in the struct will only be changed (by the caller or by the ++ * filter) as described in their documentation, and are to be considered ++ * immutable otherwise. ++ */ ++typedef struct AVBSFContext { ++ /** ++ * A class for logging and AVOptions ++ */ ++ const AVClass* av_class; ++ ++ /** ++ * The bitstream filter this context is an instance of. ++ */ ++ const struct AVBitStreamFilter* filter; ++ ++ /** ++ * Opaque filter-specific private data. If filter->priv_class is non-NULL, ++ * this is an AVOptions-enabled struct. ++ */ ++ void* priv_data; ++ ++ /** ++ * Parameters of the input stream. This field is allocated in ++ * av_bsf_alloc(), it needs to be filled by the caller before ++ * av_bsf_init(). ++ */ ++ AVCodecParameters* par_in; ++ ++ /** ++ * Parameters of the output stream. This field is allocated in ++ * av_bsf_alloc(), it is set by the filter in av_bsf_init(). ++ */ ++ AVCodecParameters* par_out; ++ ++ /** ++ * The timebase used for the timestamps of the input packets. Set by the ++ * caller before av_bsf_init(). ++ */ ++ AVRational time_base_in; ++ ++ /** ++ * The timebase used for the timestamps of the output packets. Set by the ++ * filter in av_bsf_init(). ++ */ ++ AVRational time_base_out; ++} AVBSFContext; ++ ++typedef struct AVBitStreamFilter { ++ const char* name; ++ ++ /** ++ * A list of codec ids supported by the filter, terminated by ++ * AV_CODEC_ID_NONE. ++ * May be NULL, in that case the bitstream filter works with any codec id. ++ */ ++ const enum AVCodecID* codec_ids; ++ ++ /** ++ * A class for the private data, used to declare bitstream filter private ++ * AVOptions. This field is NULL for bitstream filters that do not declare ++ * any options. ++ * ++ * If this field is non-NULL, the first member of the filter private data ++ * must be a pointer to AVClass, which will be set by libavcodec generic ++ * code to this class. ++ */ ++ const AVClass* priv_class; ++} AVBitStreamFilter; ++ ++/** ++ * @return a bitstream filter with the specified name or NULL if no such ++ * bitstream filter exists. ++ */ ++const AVBitStreamFilter* av_bsf_get_by_name(const char* name); ++ ++/** ++ * Iterate over all registered bitstream filters. ++ * ++ * @param opaque a pointer where libavcodec will store the iteration state. Must ++ * point to NULL to start the iteration. ++ * ++ * @return the next registered bitstream filter or NULL when the iteration is ++ * finished ++ */ ++const AVBitStreamFilter* av_bsf_iterate(void** opaque); ++ ++/** ++ * Allocate a context for a given bitstream filter. The caller must fill in the ++ * context parameters as described in the documentation and then call ++ * av_bsf_init() before sending any data to the filter. ++ * ++ * @param filter the filter for which to allocate an instance. ++ * @param[out] ctx a pointer into which the pointer to the newly-allocated ++ * context will be written. It must be freed with av_bsf_free() after the ++ * filtering is done. ++ * ++ * @return 0 on success, a negative AVERROR code on failure ++ */ ++int av_bsf_alloc(const AVBitStreamFilter* filter, AVBSFContext** ctx); ++ ++/** ++ * Prepare the filter for use, after all the parameters and options have been ++ * set. ++ * ++ * @param ctx a AVBSFContext previously allocated with av_bsf_alloc() ++ */ ++int av_bsf_init(AVBSFContext* ctx); ++ ++/** ++ * Submit a packet for filtering. ++ * ++ * After sending each packet, the filter must be completely drained by calling ++ * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or ++ * AVERROR_EOF. ++ * ++ * @param ctx an initialized AVBSFContext ++ * @param pkt the packet to filter. The bitstream filter will take ownership of ++ * the packet and reset the contents of pkt. pkt is not touched if an error ++ * occurs. If pkt is empty (i.e. NULL, or pkt->data is NULL and ++ * pkt->side_data_elems zero), it signals the end of the stream (i.e. no more ++ * non-empty packets will be sent; sending more empty packets does nothing) and ++ * will cause the filter to output any packets it may have buffered internally. ++ * ++ * @return ++ * - 0 on success. ++ * - AVERROR(EAGAIN) if packets need to be retrieved from the filter (using ++ * av_bsf_receive_packet()) before new input can be consumed. ++ * - Another negative AVERROR value if an error occurs. ++ */ ++int av_bsf_send_packet(AVBSFContext* ctx, AVPacket* pkt); ++ ++/** ++ * Retrieve a filtered packet. ++ * ++ * @param ctx an initialized AVBSFContext ++ * @param[out] pkt this struct will be filled with the contents of the filtered ++ * packet. It is owned by the caller and must be freed using ++ * av_packet_unref() when it is no longer needed. ++ * This parameter should be "clean" (i.e. freshly allocated ++ * with av_packet_alloc() or unreffed with av_packet_unref()) ++ * when this function is called. If this function returns ++ * successfully, the contents of pkt will be completely ++ * overwritten by the returned data. On failure, pkt is not ++ * touched. ++ * ++ * @return ++ * - 0 on success. ++ * - AVERROR(EAGAIN) if more packets need to be sent to the filter (using ++ * av_bsf_send_packet()) to get more output. ++ * - AVERROR_EOF if there will be no further output from the filter. ++ * - Another negative AVERROR value if an error occurs. ++ * ++ * @note one input packet may result in several output packets, so after sending ++ * a packet with av_bsf_send_packet(), this function needs to be called ++ * repeatedly until it stops returning 0. It is also possible for a filter to ++ * output fewer packets than were sent to it, so this function may return ++ * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. ++ */ ++int av_bsf_receive_packet(AVBSFContext* ctx, AVPacket* pkt); ++ ++/** ++ * Reset the internal bitstream filter state. Should be called e.g. when ++ * seeking. ++ */ ++void av_bsf_flush(AVBSFContext* ctx); ++ ++/** ++ * Free a bitstream filter context and everything associated with it; write NULL ++ * into the supplied pointer. ++ */ ++void av_bsf_free(AVBSFContext** ctx); ++ ++/** ++ * Get the AVClass for AVBSFContext. It can be used in combination with ++ * AV_OPT_SEARCH_FAKE_OBJ for examining options. ++ * ++ * @see av_opt_find(). ++ */ ++const AVClass* av_bsf_get_class(void); ++ ++/** ++ * Structure for chain/list of bitstream filters. ++ * Empty list can be allocated by av_bsf_list_alloc(). ++ */ ++typedef struct AVBSFList AVBSFList; ++ ++/** ++ * Allocate empty list of bitstream filters. ++ * The list must be later freed by av_bsf_list_free() ++ * or finalized by av_bsf_list_finalize(). ++ * ++ * @return Pointer to @ref AVBSFList on success, NULL in case of failure ++ */ ++AVBSFList* av_bsf_list_alloc(void); ++ ++/** ++ * Free list of bitstream filters. ++ * ++ * @param lst Pointer to pointer returned by av_bsf_list_alloc() ++ */ ++void av_bsf_list_free(AVBSFList** lst); ++ ++/** ++ * Append bitstream filter to the list of bitstream filters. ++ * ++ * @param lst List to append to ++ * @param bsf Filter context to be appended ++ * ++ * @return >=0 on success, negative AVERROR in case of failure ++ */ ++int av_bsf_list_append(AVBSFList* lst, AVBSFContext* bsf); ++ ++/** ++ * Construct new bitstream filter context given it's name and options ++ * and append it to the list of bitstream filters. ++ * ++ * @param lst List to append to ++ * @param bsf_name Name of the bitstream filter ++ * @param options Options for the bitstream filter, can be set to NULL ++ * ++ * @return >=0 on success, negative AVERROR in case of failure ++ */ ++int av_bsf_list_append2(AVBSFList* lst, const char* bsf_name, ++ AVDictionary** options); ++/** ++ * Finalize list of bitstream filters. ++ * ++ * This function will transform @ref AVBSFList to single @ref AVBSFContext, ++ * so the whole chain of bitstream filters can be treated as single filter ++ * freshly allocated by av_bsf_alloc(). ++ * If the call is successful, @ref AVBSFList structure is freed and lst ++ * will be set to NULL. In case of failure, caller is responsible for ++ * freeing the structure by av_bsf_list_free() ++ * ++ * @param lst Filter list structure to be transformed ++ * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext ++ * structure representing the chain of bitstream filters ++ * ++ * @return >=0 on success, negative AVERROR in case of failure ++ */ ++int av_bsf_list_finalize(AVBSFList** lst, AVBSFContext** bsf); ++ ++/** ++ * Parse string describing list of bitstream filters and create single ++ * @ref AVBSFContext describing the whole chain of bitstream filters. ++ * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext ++ * freshly allocated by av_bsf_alloc(). ++ * ++ * @param str String describing chain of bitstream filters in format ++ * `bsf1[=opt1=val1:opt2=val2][,bsf2]` ++ * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext ++ * structure representing the chain of bitstream filters ++ * ++ * @return >=0 on success, negative AVERROR in case of failure ++ */ ++int av_bsf_list_parse_str(const char* str, AVBSFContext** bsf); ++ ++/** ++ * Get null/pass-through bitstream filter. ++ * ++ * @param[out] bsf Pointer to be set to new instance of pass-through bitstream ++ * filter ++ * ++ * @return ++ */ ++int av_bsf_get_null_filter(AVBSFContext** bsf); ++ ++/** ++ * @} ++ */ ++ ++#endif // AVCODEC_BSF_H +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,128 @@ ++/* ++ * Codec descriptors public API ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_CODEC_DESC_H ++#define AVCODEC_CODEC_DESC_H ++ ++#include "libavutil/avutil.h" ++ ++#include "codec_id.h" ++ ++/** ++ * @addtogroup lavc_core ++ * @{ ++ */ ++ ++/** ++ * This struct describes the properties of a single codec described by an ++ * AVCodecID. ++ * @see avcodec_descriptor_get() ++ */ ++typedef struct AVCodecDescriptor { ++ enum AVCodecID id; ++ enum AVMediaType type; ++ /** ++ * Name of the codec described by this descriptor. It is non-empty and ++ * unique for each codec descriptor. It should contain alphanumeric ++ * characters and '_' only. ++ */ ++ const char* name; ++ /** ++ * A more descriptive name for this codec. May be NULL. ++ */ ++ const char* long_name; ++ /** ++ * Codec properties, a combination of AV_CODEC_PROP_* flags. ++ */ ++ int props; ++ /** ++ * MIME type(s) associated with the codec. ++ * May be NULL; if not, a NULL-terminated array of MIME types. ++ * The first item is always non-NULL and is the preferred MIME type. ++ */ ++ const char* const* mime_types; ++ /** ++ * If non-NULL, an array of profiles recognized for this codec. ++ * Terminated with FF_PROFILE_UNKNOWN. ++ */ ++ const struct AVProfile* profiles; ++} AVCodecDescriptor; ++ ++/** ++ * Codec uses only intra compression. ++ * Video and audio codecs only. ++ */ ++#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) ++/** ++ * Codec supports lossy compression. Audio and video codecs only. ++ * @note a codec may support both lossy and lossless ++ * compression modes ++ */ ++#define AV_CODEC_PROP_LOSSY (1 << 1) ++/** ++ * Codec supports lossless compression. Audio and video codecs only. ++ */ ++#define AV_CODEC_PROP_LOSSLESS (1 << 2) ++/** ++ * Codec supports frame reordering. That is, the coded order (the order in which ++ * the encoded packets are output by the encoders / stored / input to the ++ * decoders) may be different from the presentation order of the corresponding ++ * frames. ++ * ++ * For codecs that do not have this property set, PTS and DTS should always be ++ * equal. ++ */ ++#define AV_CODEC_PROP_REORDER (1 << 3) ++/** ++ * Subtitle codec is bitmap based ++ * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. ++ */ ++#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) ++/** ++ * Subtitle codec is text based. ++ * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. ++ */ ++#define AV_CODEC_PROP_TEXT_SUB (1 << 17) ++ ++/** ++ * @return descriptor for given codec ID or NULL if no descriptor exists. ++ */ ++const AVCodecDescriptor* avcodec_descriptor_get(enum AVCodecID id); ++ ++/** ++ * Iterate over all codec descriptors known to libavcodec. ++ * ++ * @param prev previous descriptor. NULL to get the first descriptor. ++ * ++ * @return next descriptor or NULL after the last descriptor ++ */ ++const AVCodecDescriptor* avcodec_descriptor_next(const AVCodecDescriptor* prev); ++ ++/** ++ * @return codec descriptor with the given name or NULL if no such descriptor ++ * exists. ++ */ ++const AVCodecDescriptor* avcodec_descriptor_get_by_name(const char* name); ++ ++/** ++ * @} ++ */ ++ ++#endif // AVCODEC_CODEC_DESC_H +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,387 @@ ++/* ++ * AVCodec public API ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_CODEC_H ++#define AVCODEC_CODEC_H ++ ++#include ++ ++#include "libavutil/avutil.h" ++#include "libavutil/hwcontext.h" ++#include "libavutil/log.h" ++#include "libavutil/pixfmt.h" ++#include "libavutil/rational.h" ++#include "libavutil/samplefmt.h" ++ ++#include "libavcodec/codec_id.h" ++#include "libavcodec/version_major.h" ++ ++/** ++ * @addtogroup lavc_core ++ * @{ ++ */ ++ ++/** ++ * Decoder can use draw_horiz_band callback. ++ */ ++#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) ++/** ++ * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and ++ * supports custom allocators. ++ * If not set, it might not use get_buffer() or get_encode_buffer() at all, or ++ * use operations that assume the buffer was allocated by ++ * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. ++ */ ++#define AV_CODEC_CAP_DR1 (1 << 1) ++/** ++ * Encoder or decoder requires flushing with NULL input at the end in order to ++ * give the complete and correct output. ++ * ++ * NOTE: If this flag is not set, the codec is guaranteed to never be fed with ++ * with NULL data. The user can still send NULL data to the public encode ++ * or decode function, but libavcodec will not pass it along to the codec ++ * unless this flag is set. ++ * ++ * Decoders: ++ * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, ++ * avpkt->size=0 at the end to get the delayed data until the decoder no longer ++ * returns frames. ++ * ++ * Encoders: ++ * The encoder needs to be fed with NULL data at the end of encoding until the ++ * encoder no longer returns data. ++ * ++ * NOTE: For encoders implementing the AVCodec.encode2() function, setting this ++ * flag also means that the encoder must set the pts and duration for ++ * each output packet. If this flag is not set, the pts and duration will ++ * be determined by libavcodec from the input frame. ++ */ ++#define AV_CODEC_CAP_DELAY (1 << 5) ++/** ++ * Codec can be fed a final frame with a smaller size. ++ * This can be used to prevent truncation of the last audio samples. ++ */ ++#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) ++ ++/** ++ * Codec can output multiple frames per AVPacket ++ * Normally demuxers return one frame at a time, demuxers which do not do ++ * are connected to a parser to split what they return into proper frames. ++ * This flag is reserved to the very rare category of codecs which have a ++ * bitstream that cannot be split into frames without timeconsuming ++ * operations like full decoding. Demuxers carrying such bitstreams thus ++ * may return multiple frames in a packet. This has many disadvantages like ++ * prohibiting stream copy in many cases thus it should only be considered ++ * as a last resort. ++ */ ++#define AV_CODEC_CAP_SUBFRAMES (1 << 8) ++/** ++ * Codec is experimental and is thus avoided in favor of non experimental ++ * encoders ++ */ ++#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) ++/** ++ * Codec should fill in channel configuration and samplerate instead of ++ * container ++ */ ++#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) ++/** ++ * Codec supports frame-level multithreading. ++ */ ++#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) ++/** ++ * Codec supports slice-based (or partition-based) multithreading. ++ */ ++#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) ++/** ++ * Codec supports changed parameters at any point. ++ */ ++#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) ++/** ++ * Codec supports multithreading through a method other than slice- or ++ * frame-level multithreading. Typically this marks wrappers around ++ * multithreading-capable external libraries. ++ */ ++#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) ++/** ++ * Audio encoder supports receiving a different number of samples in each call. ++ */ ++#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) ++/** ++ * Decoder is not a preferred choice for probing. ++ * This indicates that the decoder is not a good choice for probing. ++ * It could for example be an expensive to spin up hardware decoder, ++ * or it could simply not provide a lot of useful information about ++ * the stream. ++ * A decoder marked with this flag should only be used as last resort ++ * choice for probing. ++ */ ++#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) ++ ++/** ++ * Codec is backed by a hardware implementation. Typically used to ++ * identify a non-hwaccel hardware decoder. For information about hwaccels, use ++ * avcodec_get_hw_config() instead. ++ */ ++#define AV_CODEC_CAP_HARDWARE (1 << 18) ++ ++/** ++ * Codec is potentially backed by a hardware implementation, but not ++ * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the ++ * implementation provides some sort of internal fallback. ++ */ ++#define AV_CODEC_CAP_HYBRID (1 << 19) ++ ++/** ++ * This encoder can reorder user opaque values from input AVFrames and return ++ * them with corresponding output packets. ++ * @see AV_CODEC_FLAG_COPY_OPAQUE ++ */ ++#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) ++ ++/** ++ * This encoder can be flushed using avcodec_flush_buffers(). If this flag is ++ * not set, the encoder must be closed and reopened to ensure that no frames ++ * remain pending. ++ */ ++#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) ++ ++/** ++ * The encoder is able to output reconstructed frame data, i.e. raw frames that ++ * would be produced by decoding the encoded bitstream. ++ * ++ * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. ++ */ ++#define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) ++ ++/** ++ * AVProfile. ++ */ ++typedef struct AVProfile { ++ int profile; ++ const char* name; ///< short name for the profile ++} AVProfile; ++ ++/** ++ * AVCodec. ++ */ ++typedef struct AVCodec { ++ /** ++ * Name of the codec implementation. ++ * The name is globally unique among encoders and among decoders (but an ++ * encoder and a decoder can share the same name). ++ * This is the primary way to find a codec from the user perspective. ++ */ ++ const char* name; ++ /** ++ * Descriptive name for the codec, meant to be more human readable than name. ++ * You should use the NULL_IF_CONFIG_SMALL() macro to define it. ++ */ ++ const char* long_name; ++ enum AVMediaType type; ++ enum AVCodecID id; ++ /** ++ * Codec capabilities. ++ * see AV_CODEC_CAP_* ++ */ ++ int capabilities; ++ uint8_t max_lowres; ///< maximum value for lowres supported by the decoder ++ const AVRational* ++ supported_framerates; ///< array of supported framerates, or NULL if any, ++ ///< array is terminated by {0,0} ++ const enum AVPixelFormat* ++ pix_fmts; ///< array of supported pixel formats, or NULL if unknown, ++ ///< array is terminated by -1 ++ const int* ++ supported_samplerates; ///< array of supported audio samplerates, or NULL ++ ///< if unknown, array is terminated by 0 ++ const enum AVSampleFormat* ++ sample_fmts; ///< array of supported sample formats, or NULL if unknown, ++ ///< array is terminated by -1 ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * @deprecated use ch_layouts instead ++ */ ++ attribute_deprecated const uint64_t* ++ channel_layouts; ///< array of support channel layouts, or NULL if ++ ///< unknown. array is terminated by 0 ++#endif ++ const AVClass* priv_class; ///< AVClass for the private context ++ const AVProfile* ++ profiles; ///< array of recognized profiles, or NULL if unknown, array is ++ ///< terminated by {FF_PROFILE_UNKNOWN} ++ ++ /** ++ * Group name of the codec implementation. ++ * This is a short symbolic name of the wrapper backing this codec. A ++ * wrapper uses some kind of external implementation for the codec, such ++ * as an external library, or a codec implementation provided by the OS or ++ * the hardware. ++ * If this field is NULL, this is a builtin, libavcodec native codec. ++ * If non-NULL, this will be the suffix in AVCodec.name in most cases ++ * (usually AVCodec.name will be of the form "_"). ++ */ ++ const char* wrapper_name; ++ ++ /** ++ * Array of supported channel layouts, terminated with a zeroed layout. ++ */ ++ const AVChannelLayout* ch_layouts; ++} AVCodec; ++ ++/** ++ * Iterate over all registered codecs. ++ * ++ * @param opaque a pointer where libavcodec will store the iteration state. Must ++ * point to NULL to start the iteration. ++ * ++ * @return the next registered codec or NULL when the iteration is ++ * finished ++ */ ++const AVCodec* av_codec_iterate(void** opaque); ++ ++/** ++ * Find a registered decoder with a matching codec ID. ++ * ++ * @param id AVCodecID of the requested decoder ++ * @return A decoder if one was found, NULL otherwise. ++ */ ++const AVCodec* avcodec_find_decoder(enum AVCodecID id); ++ ++/** ++ * Find a registered decoder with the specified name. ++ * ++ * @param name name of the requested decoder ++ * @return A decoder if one was found, NULL otherwise. ++ */ ++const AVCodec* avcodec_find_decoder_by_name(const char* name); ++ ++/** ++ * Find a registered encoder with a matching codec ID. ++ * ++ * @param id AVCodecID of the requested encoder ++ * @return An encoder if one was found, NULL otherwise. ++ */ ++const AVCodec* avcodec_find_encoder(enum AVCodecID id); ++ ++/** ++ * Find a registered encoder with the specified name. ++ * ++ * @param name name of the requested encoder ++ * @return An encoder if one was found, NULL otherwise. ++ */ ++const AVCodec* avcodec_find_encoder_by_name(const char* name); ++/** ++ * @return a non-zero number if codec is an encoder, zero otherwise ++ */ ++int av_codec_is_encoder(const AVCodec* codec); ++ ++/** ++ * @return a non-zero number if codec is a decoder, zero otherwise ++ */ ++int av_codec_is_decoder(const AVCodec* codec); ++ ++/** ++ * Return a name for the specified profile, if available. ++ * ++ * @param codec the codec that is searched for the given profile ++ * @param profile the profile value for which a name is requested ++ * @return A name for the profile if found, NULL otherwise. ++ */ ++const char* av_get_profile_name(const AVCodec* codec, int profile); ++ ++enum { ++ /** ++ * The codec supports this format via the hw_device_ctx interface. ++ * ++ * When selecting this format, AVCodecContext.hw_device_ctx should ++ * have been set to a device of the specified type before calling ++ * avcodec_open2(). ++ */ ++ AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, ++ /** ++ * The codec supports this format via the hw_frames_ctx interface. ++ * ++ * When selecting this format for a decoder, ++ * AVCodecContext.hw_frames_ctx should be set to a suitable frames ++ * context inside the get_format() callback. The frames context ++ * must have been created on a device of the specified type. ++ * ++ * When selecting this format for an encoder, ++ * AVCodecContext.hw_frames_ctx should be set to the context which ++ * will be used for the input frames before calling avcodec_open2(). ++ */ ++ AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, ++ /** ++ * The codec supports this format by some internal method. ++ * ++ * This format can be selected without any additional configuration - ++ * no device or frames context is required. ++ */ ++ AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, ++ /** ++ * The codec supports this format by some ad-hoc method. ++ * ++ * Additional settings and/or function calls are required. See the ++ * codec-specific documentation for details. (Methods requiring ++ * this sort of configuration are deprecated and others should be ++ * used in preference.) ++ */ ++ AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, ++}; ++ ++typedef struct AVCodecHWConfig { ++ /** ++ * For decoders, a hardware pixel format which that decoder may be ++ * able to decode to if suitable hardware is available. ++ * ++ * For encoders, a pixel format which the encoder may be able to ++ * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel ++ * formats supported by the codec. ++ */ ++ enum AVPixelFormat pix_fmt; ++ /** ++ * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible ++ * setup methods which can be used with this configuration. ++ */ ++ int methods; ++ /** ++ * The device type associated with the configuration. ++ * ++ * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and ++ * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. ++ */ ++ enum AVHWDeviceType device_type; ++} AVCodecHWConfig; ++ ++/** ++ * Retrieve supported hardware configurations for a codec. ++ * ++ * Values of index from zero to some maximum return the indexed configuration ++ * descriptor; all other values return NULL. If the codec does not support ++ * any hardware configurations then it will always return NULL. ++ */ ++const AVCodecHWConfig* avcodec_get_hw_config(const AVCodec* codec, int index); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVCODEC_CODEC_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,669 @@ ++/* ++ * Codec IDs ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_CODEC_ID_H ++#define AVCODEC_CODEC_ID_H ++ ++#include "libavutil/avutil.h" ++#include "libavutil/samplefmt.h" ++ ++#include "version_major.h" ++ ++/** ++ * @addtogroup lavc_core ++ * @{ ++ */ ++ ++/** ++ * Identify the syntax and semantics of the bitstream. ++ * The principle is roughly: ++ * Two decoders with the same ID can decode the same streams. ++ * Two encoders with the same ID can encode compatible streams. ++ * There may be slight deviations from the principle due to implementation ++ * details. ++ * ++ * If you add a codec ID to this list, add it so that ++ * 1. no value of an existing codec ID changes (that would break ABI), ++ * 2. it is as close as possible to similar codecs ++ * ++ * After adding new codec IDs, do not forget to add an entry to the codec ++ * descriptor list and bump libavcodec minor version. ++ */ ++enum AVCodecID { ++ AV_CODEC_ID_NONE, ++ ++ /* video codecs */ ++ AV_CODEC_ID_MPEG1VIDEO, ++ AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding ++ AV_CODEC_ID_H261, ++ AV_CODEC_ID_H263, ++ AV_CODEC_ID_RV10, ++ AV_CODEC_ID_RV20, ++ AV_CODEC_ID_MJPEG, ++ AV_CODEC_ID_MJPEGB, ++ AV_CODEC_ID_LJPEG, ++ AV_CODEC_ID_SP5X, ++ AV_CODEC_ID_JPEGLS, ++ AV_CODEC_ID_MPEG4, ++ AV_CODEC_ID_RAWVIDEO, ++ AV_CODEC_ID_MSMPEG4V1, ++ AV_CODEC_ID_MSMPEG4V2, ++ AV_CODEC_ID_MSMPEG4V3, ++ AV_CODEC_ID_WMV1, ++ AV_CODEC_ID_WMV2, ++ AV_CODEC_ID_H263P, ++ AV_CODEC_ID_H263I, ++ AV_CODEC_ID_FLV1, ++ AV_CODEC_ID_SVQ1, ++ AV_CODEC_ID_SVQ3, ++ AV_CODEC_ID_DVVIDEO, ++ AV_CODEC_ID_HUFFYUV, ++ AV_CODEC_ID_CYUV, ++ AV_CODEC_ID_H264, ++ AV_CODEC_ID_INDEO3, ++ AV_CODEC_ID_VP3, ++ AV_CODEC_ID_THEORA, ++ AV_CODEC_ID_ASV1, ++ AV_CODEC_ID_ASV2, ++ AV_CODEC_ID_FFV1, ++ AV_CODEC_ID_4XM, ++ AV_CODEC_ID_VCR1, ++ AV_CODEC_ID_CLJR, ++ AV_CODEC_ID_MDEC, ++ AV_CODEC_ID_ROQ, ++ AV_CODEC_ID_INTERPLAY_VIDEO, ++ AV_CODEC_ID_XAN_WC3, ++ AV_CODEC_ID_XAN_WC4, ++ AV_CODEC_ID_RPZA, ++ AV_CODEC_ID_CINEPAK, ++ AV_CODEC_ID_WS_VQA, ++ AV_CODEC_ID_MSRLE, ++ AV_CODEC_ID_MSVIDEO1, ++ AV_CODEC_ID_IDCIN, ++ AV_CODEC_ID_8BPS, ++ AV_CODEC_ID_SMC, ++ AV_CODEC_ID_FLIC, ++ AV_CODEC_ID_TRUEMOTION1, ++ AV_CODEC_ID_VMDVIDEO, ++ AV_CODEC_ID_MSZH, ++ AV_CODEC_ID_ZLIB, ++ AV_CODEC_ID_QTRLE, ++ AV_CODEC_ID_TSCC, ++ AV_CODEC_ID_ULTI, ++ AV_CODEC_ID_QDRAW, ++ AV_CODEC_ID_VIXL, ++ AV_CODEC_ID_QPEG, ++ AV_CODEC_ID_PNG, ++ AV_CODEC_ID_PPM, ++ AV_CODEC_ID_PBM, ++ AV_CODEC_ID_PGM, ++ AV_CODEC_ID_PGMYUV, ++ AV_CODEC_ID_PAM, ++ AV_CODEC_ID_FFVHUFF, ++ AV_CODEC_ID_RV30, ++ AV_CODEC_ID_RV40, ++ AV_CODEC_ID_VC1, ++ AV_CODEC_ID_WMV3, ++ AV_CODEC_ID_LOCO, ++ AV_CODEC_ID_WNV1, ++ AV_CODEC_ID_AASC, ++ AV_CODEC_ID_INDEO2, ++ AV_CODEC_ID_FRAPS, ++ AV_CODEC_ID_TRUEMOTION2, ++ AV_CODEC_ID_BMP, ++ AV_CODEC_ID_CSCD, ++ AV_CODEC_ID_MMVIDEO, ++ AV_CODEC_ID_ZMBV, ++ AV_CODEC_ID_AVS, ++ AV_CODEC_ID_SMACKVIDEO, ++ AV_CODEC_ID_NUV, ++ AV_CODEC_ID_KMVC, ++ AV_CODEC_ID_FLASHSV, ++ AV_CODEC_ID_CAVS, ++ AV_CODEC_ID_JPEG2000, ++ AV_CODEC_ID_VMNC, ++ AV_CODEC_ID_VP5, ++ AV_CODEC_ID_VP6, ++ AV_CODEC_ID_VP6F, ++ AV_CODEC_ID_TARGA, ++ AV_CODEC_ID_DSICINVIDEO, ++ AV_CODEC_ID_TIERTEXSEQVIDEO, ++ AV_CODEC_ID_TIFF, ++ AV_CODEC_ID_GIF, ++ AV_CODEC_ID_DXA, ++ AV_CODEC_ID_DNXHD, ++ AV_CODEC_ID_THP, ++ AV_CODEC_ID_SGI, ++ AV_CODEC_ID_C93, ++ AV_CODEC_ID_BETHSOFTVID, ++ AV_CODEC_ID_PTX, ++ AV_CODEC_ID_TXD, ++ AV_CODEC_ID_VP6A, ++ AV_CODEC_ID_AMV, ++ AV_CODEC_ID_VB, ++ AV_CODEC_ID_PCX, ++ AV_CODEC_ID_SUNRAST, ++ AV_CODEC_ID_INDEO4, ++ AV_CODEC_ID_INDEO5, ++ AV_CODEC_ID_MIMIC, ++ AV_CODEC_ID_RL2, ++ AV_CODEC_ID_ESCAPE124, ++ AV_CODEC_ID_DIRAC, ++ AV_CODEC_ID_BFI, ++ AV_CODEC_ID_CMV, ++ AV_CODEC_ID_MOTIONPIXELS, ++ AV_CODEC_ID_TGV, ++ AV_CODEC_ID_TGQ, ++ AV_CODEC_ID_TQI, ++ AV_CODEC_ID_AURA, ++ AV_CODEC_ID_AURA2, ++ AV_CODEC_ID_V210X, ++ AV_CODEC_ID_TMV, ++ AV_CODEC_ID_V210, ++ AV_CODEC_ID_DPX, ++ AV_CODEC_ID_MAD, ++ AV_CODEC_ID_FRWU, ++ AV_CODEC_ID_FLASHSV2, ++ AV_CODEC_ID_CDGRAPHICS, ++ AV_CODEC_ID_R210, ++ AV_CODEC_ID_ANM, ++ AV_CODEC_ID_BINKVIDEO, ++ AV_CODEC_ID_IFF_ILBM, ++#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM ++ AV_CODEC_ID_KGV1, ++ AV_CODEC_ID_YOP, ++ AV_CODEC_ID_VP8, ++ AV_CODEC_ID_PICTOR, ++ AV_CODEC_ID_ANSI, ++ AV_CODEC_ID_A64_MULTI, ++ AV_CODEC_ID_A64_MULTI5, ++ AV_CODEC_ID_R10K, ++ AV_CODEC_ID_MXPEG, ++ AV_CODEC_ID_LAGARITH, ++ AV_CODEC_ID_PRORES, ++ AV_CODEC_ID_JV, ++ AV_CODEC_ID_DFA, ++ AV_CODEC_ID_WMV3IMAGE, ++ AV_CODEC_ID_VC1IMAGE, ++ AV_CODEC_ID_UTVIDEO, ++ AV_CODEC_ID_BMV_VIDEO, ++ AV_CODEC_ID_VBLE, ++ AV_CODEC_ID_DXTORY, ++ AV_CODEC_ID_V410, ++ AV_CODEC_ID_XWD, ++ AV_CODEC_ID_CDXL, ++ AV_CODEC_ID_XBM, ++ AV_CODEC_ID_ZEROCODEC, ++ AV_CODEC_ID_MSS1, ++ AV_CODEC_ID_MSA1, ++ AV_CODEC_ID_TSCC2, ++ AV_CODEC_ID_MTS2, ++ AV_CODEC_ID_CLLC, ++ AV_CODEC_ID_MSS2, ++ AV_CODEC_ID_VP9, ++ AV_CODEC_ID_AIC, ++ AV_CODEC_ID_ESCAPE130, ++ AV_CODEC_ID_G2M, ++ AV_CODEC_ID_WEBP, ++ AV_CODEC_ID_HNM4_VIDEO, ++ AV_CODEC_ID_HEVC, ++#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC ++ AV_CODEC_ID_FIC, ++ AV_CODEC_ID_ALIAS_PIX, ++ AV_CODEC_ID_BRENDER_PIX, ++ AV_CODEC_ID_PAF_VIDEO, ++ AV_CODEC_ID_EXR, ++ AV_CODEC_ID_VP7, ++ AV_CODEC_ID_SANM, ++ AV_CODEC_ID_SGIRLE, ++ AV_CODEC_ID_MVC1, ++ AV_CODEC_ID_MVC2, ++ AV_CODEC_ID_HQX, ++ AV_CODEC_ID_TDSC, ++ AV_CODEC_ID_HQ_HQA, ++ AV_CODEC_ID_HAP, ++ AV_CODEC_ID_DDS, ++ AV_CODEC_ID_DXV, ++ AV_CODEC_ID_SCREENPRESSO, ++ AV_CODEC_ID_RSCC, ++ AV_CODEC_ID_AVS2, ++ AV_CODEC_ID_PGX, ++ AV_CODEC_ID_AVS3, ++ AV_CODEC_ID_MSP2, ++ AV_CODEC_ID_VVC, ++#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC ++ AV_CODEC_ID_Y41P, ++ AV_CODEC_ID_AVRP, ++ AV_CODEC_ID_012V, ++ AV_CODEC_ID_AVUI, ++#if FF_API_AYUV_CODECID ++ AV_CODEC_ID_AYUV, ++#endif ++ AV_CODEC_ID_TARGA_Y216, ++ AV_CODEC_ID_V308, ++ AV_CODEC_ID_V408, ++ AV_CODEC_ID_YUV4, ++ AV_CODEC_ID_AVRN, ++ AV_CODEC_ID_CPIA, ++ AV_CODEC_ID_XFACE, ++ AV_CODEC_ID_SNOW, ++ AV_CODEC_ID_SMVJPEG, ++ AV_CODEC_ID_APNG, ++ AV_CODEC_ID_DAALA, ++ AV_CODEC_ID_CFHD, ++ AV_CODEC_ID_TRUEMOTION2RT, ++ AV_CODEC_ID_M101, ++ AV_CODEC_ID_MAGICYUV, ++ AV_CODEC_ID_SHEERVIDEO, ++ AV_CODEC_ID_YLC, ++ AV_CODEC_ID_PSD, ++ AV_CODEC_ID_PIXLET, ++ AV_CODEC_ID_SPEEDHQ, ++ AV_CODEC_ID_FMVC, ++ AV_CODEC_ID_SCPR, ++ AV_CODEC_ID_CLEARVIDEO, ++ AV_CODEC_ID_XPM, ++ AV_CODEC_ID_AV1, ++ AV_CODEC_ID_BITPACKED, ++ AV_CODEC_ID_MSCC, ++ AV_CODEC_ID_SRGC, ++ AV_CODEC_ID_SVG, ++ AV_CODEC_ID_GDV, ++ AV_CODEC_ID_FITS, ++ AV_CODEC_ID_IMM4, ++ AV_CODEC_ID_PROSUMER, ++ AV_CODEC_ID_MWSC, ++ AV_CODEC_ID_WCMV, ++ AV_CODEC_ID_RASC, ++ AV_CODEC_ID_HYMT, ++ AV_CODEC_ID_ARBC, ++ AV_CODEC_ID_AGM, ++ AV_CODEC_ID_LSCR, ++ AV_CODEC_ID_VP4, ++ AV_CODEC_ID_IMM5, ++ AV_CODEC_ID_MVDV, ++ AV_CODEC_ID_MVHA, ++ AV_CODEC_ID_CDTOONS, ++ AV_CODEC_ID_MV30, ++ AV_CODEC_ID_NOTCHLC, ++ AV_CODEC_ID_PFM, ++ AV_CODEC_ID_MOBICLIP, ++ AV_CODEC_ID_PHOTOCD, ++ AV_CODEC_ID_IPU, ++ AV_CODEC_ID_ARGO, ++ AV_CODEC_ID_CRI, ++ AV_CODEC_ID_SIMBIOSIS_IMX, ++ AV_CODEC_ID_SGA_VIDEO, ++ AV_CODEC_ID_GEM, ++ AV_CODEC_ID_VBN, ++ AV_CODEC_ID_JPEGXL, ++ AV_CODEC_ID_QOI, ++ AV_CODEC_ID_PHM, ++ AV_CODEC_ID_RADIANCE_HDR, ++ AV_CODEC_ID_WBMP, ++ AV_CODEC_ID_MEDIA100, ++ AV_CODEC_ID_VQC, ++ ++ /* various PCM "codecs" */ ++ AV_CODEC_ID_FIRST_AUDIO = ++ 0x10000, ///< A dummy id pointing at the start of audio codecs ++ AV_CODEC_ID_PCM_S16LE = 0x10000, ++ AV_CODEC_ID_PCM_S16BE, ++ AV_CODEC_ID_PCM_U16LE, ++ AV_CODEC_ID_PCM_U16BE, ++ AV_CODEC_ID_PCM_S8, ++ AV_CODEC_ID_PCM_U8, ++ AV_CODEC_ID_PCM_MULAW, ++ AV_CODEC_ID_PCM_ALAW, ++ AV_CODEC_ID_PCM_S32LE, ++ AV_CODEC_ID_PCM_S32BE, ++ AV_CODEC_ID_PCM_U32LE, ++ AV_CODEC_ID_PCM_U32BE, ++ AV_CODEC_ID_PCM_S24LE, ++ AV_CODEC_ID_PCM_S24BE, ++ AV_CODEC_ID_PCM_U24LE, ++ AV_CODEC_ID_PCM_U24BE, ++ AV_CODEC_ID_PCM_S24DAUD, ++ AV_CODEC_ID_PCM_ZORK, ++ AV_CODEC_ID_PCM_S16LE_PLANAR, ++ AV_CODEC_ID_PCM_DVD, ++ AV_CODEC_ID_PCM_F32BE, ++ AV_CODEC_ID_PCM_F32LE, ++ AV_CODEC_ID_PCM_F64BE, ++ AV_CODEC_ID_PCM_F64LE, ++ AV_CODEC_ID_PCM_BLURAY, ++ AV_CODEC_ID_PCM_LXF, ++ AV_CODEC_ID_S302M, ++ AV_CODEC_ID_PCM_S8_PLANAR, ++ AV_CODEC_ID_PCM_S24LE_PLANAR, ++ AV_CODEC_ID_PCM_S32LE_PLANAR, ++ AV_CODEC_ID_PCM_S16BE_PLANAR, ++ AV_CODEC_ID_PCM_S64LE, ++ AV_CODEC_ID_PCM_S64BE, ++ AV_CODEC_ID_PCM_F16LE, ++ AV_CODEC_ID_PCM_F24LE, ++ AV_CODEC_ID_PCM_VIDC, ++ AV_CODEC_ID_PCM_SGA, ++ ++ /* various ADPCM codecs */ ++ AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, ++ AV_CODEC_ID_ADPCM_IMA_WAV, ++ AV_CODEC_ID_ADPCM_IMA_DK3, ++ AV_CODEC_ID_ADPCM_IMA_DK4, ++ AV_CODEC_ID_ADPCM_IMA_WS, ++ AV_CODEC_ID_ADPCM_IMA_SMJPEG, ++ AV_CODEC_ID_ADPCM_MS, ++ AV_CODEC_ID_ADPCM_4XM, ++ AV_CODEC_ID_ADPCM_XA, ++ AV_CODEC_ID_ADPCM_ADX, ++ AV_CODEC_ID_ADPCM_EA, ++ AV_CODEC_ID_ADPCM_G726, ++ AV_CODEC_ID_ADPCM_CT, ++ AV_CODEC_ID_ADPCM_SWF, ++ AV_CODEC_ID_ADPCM_YAMAHA, ++ AV_CODEC_ID_ADPCM_SBPRO_4, ++ AV_CODEC_ID_ADPCM_SBPRO_3, ++ AV_CODEC_ID_ADPCM_SBPRO_2, ++ AV_CODEC_ID_ADPCM_THP, ++ AV_CODEC_ID_ADPCM_IMA_AMV, ++ AV_CODEC_ID_ADPCM_EA_R1, ++ AV_CODEC_ID_ADPCM_EA_R3, ++ AV_CODEC_ID_ADPCM_EA_R2, ++ AV_CODEC_ID_ADPCM_IMA_EA_SEAD, ++ AV_CODEC_ID_ADPCM_IMA_EA_EACS, ++ AV_CODEC_ID_ADPCM_EA_XAS, ++ AV_CODEC_ID_ADPCM_EA_MAXIS_XA, ++ AV_CODEC_ID_ADPCM_IMA_ISS, ++ AV_CODEC_ID_ADPCM_G722, ++ AV_CODEC_ID_ADPCM_IMA_APC, ++ AV_CODEC_ID_ADPCM_VIMA, ++ AV_CODEC_ID_ADPCM_AFC, ++ AV_CODEC_ID_ADPCM_IMA_OKI, ++ AV_CODEC_ID_ADPCM_DTK, ++ AV_CODEC_ID_ADPCM_IMA_RAD, ++ AV_CODEC_ID_ADPCM_G726LE, ++ AV_CODEC_ID_ADPCM_THP_LE, ++ AV_CODEC_ID_ADPCM_PSX, ++ AV_CODEC_ID_ADPCM_AICA, ++ AV_CODEC_ID_ADPCM_IMA_DAT4, ++ AV_CODEC_ID_ADPCM_MTAF, ++ AV_CODEC_ID_ADPCM_AGM, ++ AV_CODEC_ID_ADPCM_ARGO, ++ AV_CODEC_ID_ADPCM_IMA_SSI, ++ AV_CODEC_ID_ADPCM_ZORK, ++ AV_CODEC_ID_ADPCM_IMA_APM, ++ AV_CODEC_ID_ADPCM_IMA_ALP, ++ AV_CODEC_ID_ADPCM_IMA_MTF, ++ AV_CODEC_ID_ADPCM_IMA_CUNNING, ++ AV_CODEC_ID_ADPCM_IMA_MOFLEX, ++ AV_CODEC_ID_ADPCM_IMA_ACORN, ++ AV_CODEC_ID_ADPCM_XMD, ++ ++ /* AMR */ ++ AV_CODEC_ID_AMR_NB = 0x12000, ++ AV_CODEC_ID_AMR_WB, ++ ++ /* RealAudio codecs*/ ++ AV_CODEC_ID_RA_144 = 0x13000, ++ AV_CODEC_ID_RA_288, ++ ++ /* various DPCM codecs */ ++ AV_CODEC_ID_ROQ_DPCM = 0x14000, ++ AV_CODEC_ID_INTERPLAY_DPCM, ++ AV_CODEC_ID_XAN_DPCM, ++ AV_CODEC_ID_SOL_DPCM, ++ AV_CODEC_ID_SDX2_DPCM, ++ AV_CODEC_ID_GREMLIN_DPCM, ++ AV_CODEC_ID_DERF_DPCM, ++ AV_CODEC_ID_WADY_DPCM, ++ AV_CODEC_ID_CBD2_DPCM, ++ ++ /* audio codecs */ ++ AV_CODEC_ID_MP2 = 0x15000, ++ AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 ++ AV_CODEC_ID_AAC, ++ AV_CODEC_ID_AC3, ++ AV_CODEC_ID_DTS, ++ AV_CODEC_ID_VORBIS, ++ AV_CODEC_ID_DVAUDIO, ++ AV_CODEC_ID_WMAV1, ++ AV_CODEC_ID_WMAV2, ++ AV_CODEC_ID_MACE3, ++ AV_CODEC_ID_MACE6, ++ AV_CODEC_ID_VMDAUDIO, ++ AV_CODEC_ID_FLAC, ++ AV_CODEC_ID_MP3ADU, ++ AV_CODEC_ID_MP3ON4, ++ AV_CODEC_ID_SHORTEN, ++ AV_CODEC_ID_ALAC, ++ AV_CODEC_ID_WESTWOOD_SND1, ++ AV_CODEC_ID_GSM, ///< as in Berlin toast format ++ AV_CODEC_ID_QDM2, ++ AV_CODEC_ID_COOK, ++ AV_CODEC_ID_TRUESPEECH, ++ AV_CODEC_ID_TTA, ++ AV_CODEC_ID_SMACKAUDIO, ++ AV_CODEC_ID_QCELP, ++ AV_CODEC_ID_WAVPACK, ++ AV_CODEC_ID_DSICINAUDIO, ++ AV_CODEC_ID_IMC, ++ AV_CODEC_ID_MUSEPACK7, ++ AV_CODEC_ID_MLP, ++ AV_CODEC_ID_GSM_MS, /* as found in WAV */ ++ AV_CODEC_ID_ATRAC3, ++ AV_CODEC_ID_APE, ++ AV_CODEC_ID_NELLYMOSER, ++ AV_CODEC_ID_MUSEPACK8, ++ AV_CODEC_ID_SPEEX, ++ AV_CODEC_ID_WMAVOICE, ++ AV_CODEC_ID_WMAPRO, ++ AV_CODEC_ID_WMALOSSLESS, ++ AV_CODEC_ID_ATRAC3P, ++ AV_CODEC_ID_EAC3, ++ AV_CODEC_ID_SIPR, ++ AV_CODEC_ID_MP1, ++ AV_CODEC_ID_TWINVQ, ++ AV_CODEC_ID_TRUEHD, ++ AV_CODEC_ID_MP4ALS, ++ AV_CODEC_ID_ATRAC1, ++ AV_CODEC_ID_BINKAUDIO_RDFT, ++ AV_CODEC_ID_BINKAUDIO_DCT, ++ AV_CODEC_ID_AAC_LATM, ++ AV_CODEC_ID_QDMC, ++ AV_CODEC_ID_CELT, ++ AV_CODEC_ID_G723_1, ++ AV_CODEC_ID_G729, ++ AV_CODEC_ID_8SVX_EXP, ++ AV_CODEC_ID_8SVX_FIB, ++ AV_CODEC_ID_BMV_AUDIO, ++ AV_CODEC_ID_RALF, ++ AV_CODEC_ID_IAC, ++ AV_CODEC_ID_ILBC, ++ AV_CODEC_ID_OPUS, ++ AV_CODEC_ID_COMFORT_NOISE, ++ AV_CODEC_ID_TAK, ++ AV_CODEC_ID_METASOUND, ++ AV_CODEC_ID_PAF_AUDIO, ++ AV_CODEC_ID_ON2AVC, ++ AV_CODEC_ID_DSS_SP, ++ AV_CODEC_ID_CODEC2, ++ AV_CODEC_ID_FFWAVESYNTH, ++ AV_CODEC_ID_SONIC, ++ AV_CODEC_ID_SONIC_LS, ++ AV_CODEC_ID_EVRC, ++ AV_CODEC_ID_SMV, ++ AV_CODEC_ID_DSD_LSBF, ++ AV_CODEC_ID_DSD_MSBF, ++ AV_CODEC_ID_DSD_LSBF_PLANAR, ++ AV_CODEC_ID_DSD_MSBF_PLANAR, ++ AV_CODEC_ID_4GV, ++ AV_CODEC_ID_INTERPLAY_ACM, ++ AV_CODEC_ID_XMA1, ++ AV_CODEC_ID_XMA2, ++ AV_CODEC_ID_DST, ++ AV_CODEC_ID_ATRAC3AL, ++ AV_CODEC_ID_ATRAC3PAL, ++ AV_CODEC_ID_DOLBY_E, ++ AV_CODEC_ID_APTX, ++ AV_CODEC_ID_APTX_HD, ++ AV_CODEC_ID_SBC, ++ AV_CODEC_ID_ATRAC9, ++ AV_CODEC_ID_HCOM, ++ AV_CODEC_ID_ACELP_KELVIN, ++ AV_CODEC_ID_MPEGH_3D_AUDIO, ++ AV_CODEC_ID_SIREN, ++ AV_CODEC_ID_HCA, ++ AV_CODEC_ID_FASTAUDIO, ++ AV_CODEC_ID_MSNSIREN, ++ AV_CODEC_ID_DFPWM, ++ AV_CODEC_ID_BONK, ++ AV_CODEC_ID_MISC4, ++ AV_CODEC_ID_APAC, ++ AV_CODEC_ID_FTR, ++ AV_CODEC_ID_WAVARC, ++ AV_CODEC_ID_RKA, ++ ++ /* subtitle codecs */ ++ AV_CODEC_ID_FIRST_SUBTITLE = ++ 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. ++ AV_CODEC_ID_DVD_SUBTITLE = 0x17000, ++ AV_CODEC_ID_DVB_SUBTITLE, ++ AV_CODEC_ID_TEXT, ///< raw UTF-8 text ++ AV_CODEC_ID_XSUB, ++ AV_CODEC_ID_SSA, ++ AV_CODEC_ID_MOV_TEXT, ++ AV_CODEC_ID_HDMV_PGS_SUBTITLE, ++ AV_CODEC_ID_DVB_TELETEXT, ++ AV_CODEC_ID_SRT, ++ AV_CODEC_ID_MICRODVD, ++ AV_CODEC_ID_EIA_608, ++ AV_CODEC_ID_JACOSUB, ++ AV_CODEC_ID_SAMI, ++ AV_CODEC_ID_REALTEXT, ++ AV_CODEC_ID_STL, ++ AV_CODEC_ID_SUBVIEWER1, ++ AV_CODEC_ID_SUBVIEWER, ++ AV_CODEC_ID_SUBRIP, ++ AV_CODEC_ID_WEBVTT, ++ AV_CODEC_ID_MPL2, ++ AV_CODEC_ID_VPLAYER, ++ AV_CODEC_ID_PJS, ++ AV_CODEC_ID_ASS, ++ AV_CODEC_ID_HDMV_TEXT_SUBTITLE, ++ AV_CODEC_ID_TTML, ++ AV_CODEC_ID_ARIB_CAPTION, ++ ++ /* other specific kind of codecs (generally used for attachments) */ ++ AV_CODEC_ID_FIRST_UNKNOWN = ++ 0x18000, ///< A dummy ID pointing at the start of various fake codecs. ++ AV_CODEC_ID_TTF = 0x18000, ++ ++ AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program ++ ///< stream. ++ AV_CODEC_ID_EPG, ++ AV_CODEC_ID_BINTEXT, ++ AV_CODEC_ID_XBIN, ++ AV_CODEC_ID_IDF, ++ AV_CODEC_ID_OTF, ++ AV_CODEC_ID_SMPTE_KLV, ++ AV_CODEC_ID_DVD_NAV, ++ AV_CODEC_ID_TIMED_ID3, ++ AV_CODEC_ID_BIN_DATA, ++ ++ AV_CODEC_ID_PROBE = ++ 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf ++ ///< should attempt to identify it ++ ++ AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS ++ * stream (only used by libavformat) */ ++ AV_CODEC_ID_MPEG4SYSTEMS = ++ 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems ++ * stream (only used by libavformat) */ ++ AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing ++ ///< only metadata information. ++ AV_CODEC_ID_WRAPPED_AVFRAME = ++ 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket ++ /** ++ * Dummy null video codec, useful mainly for development and debugging. ++ * Null encoder/decoder discard all input and never return any output. ++ */ ++ AV_CODEC_ID_VNULL, ++ /** ++ * Dummy null audio codec, useful mainly for development and debugging. ++ * Null encoder/decoder discard all input and never return any output. ++ */ ++ AV_CODEC_ID_ANULL, ++}; ++ ++/** ++ * Get the type of the given codec. ++ */ ++enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); ++ ++/** ++ * Get the name of a codec. ++ * @return a static string identifying the codec; never NULL ++ */ ++const char* avcodec_get_name(enum AVCodecID id); ++ ++/** ++ * Return codec bits per sample. ++ * ++ * @param[in] codec_id the codec ++ * @return Number of bits per sample or zero if unknown for the given codec. ++ */ ++int av_get_bits_per_sample(enum AVCodecID codec_id); ++ ++/** ++ * Return codec bits per sample. ++ * Only return non-zero if the bits per sample is exactly correct, not an ++ * approximation. ++ * ++ * @param[in] codec_id the codec ++ * @return Number of bits per sample or zero if unknown for the given codec. ++ */ ++int av_get_exact_bits_per_sample(enum AVCodecID codec_id); ++ ++/** ++ * Return a name for the specified profile, if available. ++ * ++ * @param codec_id the ID of the codec to which the requested profile belongs ++ * @param profile the profile value for which a name is requested ++ * @return A name for the profile if found, NULL otherwise. ++ * ++ * @note unlike av_get_profile_name(), which searches a list of profiles ++ * supported by a specific decoder or encoder implementation, this ++ * function searches the list of profiles from the AVCodecDescriptor ++ */ ++const char* avcodec_profile_name(enum AVCodecID codec_id, int profile); ++ ++/** ++ * Return the PCM codec associated with a sample format. ++ * @param be endianness, 0 for little, 1 for big, ++ * -1 (or anything else) for native ++ * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE ++ */ ++enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); ++ ++/** ++ * @} ++ */ ++ ++#endif // AVCODEC_CODEC_ID_H +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,247 @@ ++/* ++ * Codec parameters public API ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_CODEC_PAR_H ++#define AVCODEC_CODEC_PAR_H ++ ++#include ++ ++#include "libavutil/avutil.h" ++#include "libavutil/channel_layout.h" ++#include "libavutil/rational.h" ++#include "libavutil/pixfmt.h" ++ ++#include "codec_id.h" ++ ++/** ++ * @addtogroup lavc_core ++ * @{ ++ */ ++ ++enum AVFieldOrder { ++ AV_FIELD_UNKNOWN, ++ AV_FIELD_PROGRESSIVE, ++ AV_FIELD_TT, ///< Top coded_first, top displayed first ++ AV_FIELD_BB, ///< Bottom coded first, bottom displayed first ++ AV_FIELD_TB, ///< Top coded first, bottom displayed first ++ AV_FIELD_BT, ///< Bottom coded first, top displayed first ++}; ++ ++/** ++ * This struct describes the properties of an encoded stream. ++ * ++ * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must ++ * be allocated with avcodec_parameters_alloc() and freed with ++ * avcodec_parameters_free(). ++ */ ++typedef struct AVCodecParameters { ++ /** ++ * General type of the encoded data. ++ */ ++ enum AVMediaType codec_type; ++ /** ++ * Specific type of the encoded data (the codec used). ++ */ ++ enum AVCodecID codec_id; ++ /** ++ * Additional information about the codec (corresponds to the AVI FOURCC). ++ */ ++ uint32_t codec_tag; ++ ++ /** ++ * Extra binary data needed for initializing the decoder, codec-dependent. ++ * ++ * Must be allocated with av_malloc() and will be freed by ++ * avcodec_parameters_free(). The allocated size of extradata must be at ++ * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding ++ * bytes zeroed. ++ */ ++ uint8_t* extradata; ++ /** ++ * Size of the extradata content in bytes. ++ */ ++ int extradata_size; ++ ++ /** ++ * - video: the pixel format, the value corresponds to enum AVPixelFormat. ++ * - audio: the sample format, the value corresponds to enum AVSampleFormat. ++ */ ++ int format; ++ ++ /** ++ * The average bitrate of the encoded data (in bits per second). ++ */ ++ int64_t bit_rate; ++ ++ /** ++ * The number of bits per sample in the codedwords. ++ * ++ * This is basically the bitrate per sample. It is mandatory for a bunch of ++ * formats to actually decode them. It's the number of bits for one sample in ++ * the actual coded bitstream. ++ * ++ * This could be for example 4 for ADPCM ++ * For PCM formats this matches bits_per_raw_sample ++ * Can be 0 ++ */ ++ int bits_per_coded_sample; ++ ++ /** ++ * This is the number of valid bits in each output sample. If the ++ * sample format has more bits, the least significant bits are additional ++ * padding bits, which are always 0. Use right shifts to reduce the sample ++ * to its actual size. For example, audio formats with 24 bit samples will ++ * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. ++ * To get the original sample use "(int32_t)sample >> 8"." ++ * ++ * For ADPCM this might be 12 or 16 or similar ++ * Can be 0 ++ */ ++ int bits_per_raw_sample; ++ ++ /** ++ * Codec-specific bitstream restrictions that the stream conforms to. ++ */ ++ int profile; ++ int level; ++ ++ /** ++ * Video only. The dimensions of the video frame in pixels. ++ */ ++ int width; ++ int height; ++ ++ /** ++ * Video only. The aspect ratio (width / height) which a single pixel ++ * should have when displayed. ++ * ++ * When the aspect ratio is unknown / undefined, the numerator should be ++ * set to 0 (the denominator may have any value). ++ */ ++ AVRational sample_aspect_ratio; ++ ++ /** ++ * Video only. The order of the fields in interlaced video. ++ */ ++ enum AVFieldOrder field_order; ++ ++ /** ++ * Video only. Additional colorspace characteristics. ++ */ ++ enum AVColorRange color_range; ++ enum AVColorPrimaries color_primaries; ++ enum AVColorTransferCharacteristic color_trc; ++ enum AVColorSpace color_space; ++ enum AVChromaLocation chroma_location; ++ ++ /** ++ * Video only. Number of delayed frames. ++ */ ++ int video_delay; ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * Audio only. The channel layout bitmask. May be 0 if the channel layout is ++ * unknown or unspecified, otherwise the number of bits set must be equal to ++ * the channels field. ++ * @deprecated use ch_layout ++ */ ++ attribute_deprecated uint64_t channel_layout; ++ /** ++ * Audio only. The number of audio channels. ++ * @deprecated use ch_layout.nb_channels ++ */ ++ attribute_deprecated int channels; ++#endif ++ /** ++ * Audio only. The number of audio samples per second. ++ */ ++ int sample_rate; ++ /** ++ * Audio only. The number of bytes per coded audio frame, required by some ++ * formats. ++ * ++ * Corresponds to nBlockAlign in WAVEFORMATEX. ++ */ ++ int block_align; ++ /** ++ * Audio only. Audio frame size, if known. Required by some formats to be ++ * static. ++ */ ++ int frame_size; ++ ++ /** ++ * Audio only. The amount of padding (in samples) inserted by the encoder at ++ * the beginning of the audio. I.e. this number of leading decoded samples ++ * must be discarded by the caller to get the original audio without leading ++ * padding. ++ */ ++ int initial_padding; ++ /** ++ * Audio only. The amount of padding (in samples) appended by the encoder to ++ * the end of the audio. I.e. this number of decoded samples must be ++ * discarded by the caller from the end of the stream to get the original ++ * audio without any trailing padding. ++ */ ++ int trailing_padding; ++ /** ++ * Audio only. Number of samples to skip after a discontinuity. ++ */ ++ int seek_preroll; ++ ++ /** ++ * Audio only. The channel layout and number of channels. ++ */ ++ AVChannelLayout ch_layout; ++} AVCodecParameters; ++ ++/** ++ * Allocate a new AVCodecParameters and set its fields to default values ++ * (unknown/invalid/0). The returned struct must be freed with ++ * avcodec_parameters_free(). ++ */ ++AVCodecParameters* avcodec_parameters_alloc(void); ++ ++/** ++ * Free an AVCodecParameters instance and everything associated with it and ++ * write NULL to the supplied pointer. ++ */ ++void avcodec_parameters_free(AVCodecParameters** par); ++ ++/** ++ * Copy the contents of src to dst. Any allocated fields in dst are freed and ++ * replaced with newly allocated duplicates of the corresponding fields in src. ++ * ++ * @return >= 0 on success, a negative AVERROR code on failure. ++ */ ++int avcodec_parameters_copy(AVCodecParameters* dst, ++ const AVCodecParameters* src); ++ ++/** ++ * This function is the same as av_get_audio_frame_duration(), except it works ++ * with AVCodecParameters instead of an AVCodecContext. ++ */ ++int av_get_audio_frame_duration2(AVCodecParameters* par, int frame_bytes); ++ ++/** ++ * @} ++ */ ++ ++#endif // AVCODEC_CODEC_PAR_H +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,203 @@ ++/* ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_DEFS_H ++#define AVCODEC_DEFS_H ++ ++/** ++ * @file ++ * @ingroup libavc ++ * Misc types and constants that do not belong anywhere else. ++ */ ++ ++#include ++#include ++ ++/** ++ * @ingroup lavc_decoding ++ * Required number of additionally allocated bytes at the end of the input ++ * bitstream for decoding. This is mainly needed because some optimized ++ * bitstream readers read 32 or 64 bit at once and could read over the end.
++ * Note: If the first 23 bits of the additional bytes are not 0, then damaged ++ * MPEG bitstreams could cause overread and segfault. ++ */ ++#define AV_INPUT_BUFFER_PADDING_SIZE 64 ++ ++/** ++ * Verify checksums embedded in the bitstream (could be of either encoded or ++ * decoded data, depending on the format) and print an error message on ++ * mismatch. If AV_EF_EXPLODE is also set, a mismatching checksum will result in ++ * the decoder/demuxer returning an error. ++ */ ++#define AV_EF_CRCCHECK (1 << 0) ++#define AV_EF_BITSTREAM (1 << 1) ///< detect bitstream specification deviations ++#define AV_EF_BUFFER (1 << 2) ///< detect improper bitstream length ++#define AV_EF_EXPLODE (1 << 3) ///< abort decoding on minor error detection ++ ++#define AV_EF_IGNORE_ERR (1 << 15) ///< ignore errors and continue ++#define AV_EF_CAREFUL \ ++ (1 << 16) ///< consider things that violate the spec, are fast to calculate ++ ///< and have not been seen in the wild as errors ++#define AV_EF_COMPLIANT \ ++ (1 << 17) ///< consider all spec non compliances as errors ++#define AV_EF_AGGRESSIVE \ ++ (1 << 18) ///< consider things that a sane encoder/muxer should not do as an ++ ///< error ++ ++#define FF_COMPLIANCE_VERY_STRICT \ ++ 2 ///< Strictly conform to an older more strict version of the spec or ++ ///< reference software. ++#define FF_COMPLIANCE_STRICT \ ++ 1 ///< Strictly conform to all the things in the spec no matter what ++ ///< consequences. ++#define FF_COMPLIANCE_NORMAL 0 ++#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions ++#define FF_COMPLIANCE_EXPERIMENTAL \ ++ -2 ///< Allow nonstandardized experimental things. ++ ++/** ++ * @ingroup lavc_decoding ++ */ ++enum AVDiscard { ++ /* We leave some space between them for extensions (drop some ++ * keyframes for intra-only or drop just some bidir frames). */ ++ AVDISCARD_NONE = -16, ///< discard nothing ++ AVDISCARD_DEFAULT = ++ 0, ///< discard useless packets like 0 size packets in avi ++ AVDISCARD_NONREF = 8, ///< discard all non reference ++ AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames ++ AVDISCARD_NONINTRA = 24, ///< discard all non intra frames ++ AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes ++ AVDISCARD_ALL = 48, ///< discard all ++}; ++ ++enum AVAudioServiceType { ++ AV_AUDIO_SERVICE_TYPE_MAIN = 0, ++ AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, ++ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, ++ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, ++ AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, ++ AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, ++ AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, ++ AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, ++ AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, ++ AV_AUDIO_SERVICE_TYPE_NB, ///< Not part of ABI ++}; ++ ++/** ++ * Pan Scan area. ++ * This specifies the area which should be displayed. ++ * Note there may be multiple such areas for one frame. ++ */ ++typedef struct AVPanScan { ++ /** ++ * id ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int id; ++ ++ /** ++ * width and height in 1/16 pel ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int width; ++ int height; ++ ++ /** ++ * position of the top left corner in 1/16 pel for up to 3 fields/frames ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int16_t position[3][2]; ++} AVPanScan; ++ ++/** ++ * This structure describes the bitrate properties of an encoded bitstream. It ++ * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD ++ * parameters for H.264/HEVC. ++ */ ++typedef struct AVCPBProperties { ++ /** ++ * Maximum bitrate of the stream, in bits per second. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t max_bitrate; ++ /** ++ * Minimum bitrate of the stream, in bits per second. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t min_bitrate; ++ /** ++ * Average bitrate of the stream, in bits per second. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t avg_bitrate; ++ ++ /** ++ * The size of the buffer to which the ratecontrol is applied, in bits. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t buffer_size; ++ ++ /** ++ * The delay between the time the packet this structure is associated with ++ * is received and the time when it should be decoded, in periods of a 27MHz ++ * clock. ++ * ++ * UINT64_MAX when unknown or unspecified. ++ */ ++ uint64_t vbv_delay; ++} AVCPBProperties; ++ ++/** ++ * Allocate a CPB properties structure and initialize its fields to default ++ * values. ++ * ++ * @param size if non-NULL, the size of the allocated struct will be written ++ * here. This is useful for embedding it in side data. ++ * ++ * @return the newly allocated struct or NULL on failure ++ */ ++AVCPBProperties* av_cpb_properties_alloc(size_t* size); ++ ++/** ++ * This structure supplies correlation between a packet timestamp and a wall ++ * clock production time. The definition follows the Producer Reference Time ++ * ('prft') as defined in ISO/IEC 14496-12 ++ */ ++typedef struct AVProducerReferenceTime { ++ /** ++ * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). ++ */ ++ int64_t wallclock; ++ int flags; ++} AVProducerReferenceTime; ++ ++/** ++ * Encode extradata length to a buffer. Used by xiph codecs. ++ * ++ * @param s buffer to write to; must be at least (v/255+1) bytes long ++ * @param v size of extradata in bytes ++ * @return number of bytes written to the buffer. ++ */ ++unsigned int av_xiphlacing(unsigned char* s, unsigned int v); ++ ++#endif // AVCODEC_DEFS_H +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,730 @@ ++/* ++ * AVPacket public API ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_PACKET_H ++#define AVCODEC_PACKET_H ++ ++#include ++#include ++ ++#include "libavutil/attributes.h" ++#include "libavutil/buffer.h" ++#include "libavutil/dict.h" ++#include "libavutil/rational.h" ++#include "libavutil/version.h" ++ ++#include "libavcodec/version_major.h" ++ ++/** ++ * @defgroup lavc_packet AVPacket ++ * ++ * Types and functions for working with AVPacket. ++ * @{ ++ */ ++enum AVPacketSideDataType { ++ /** ++ * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE ++ * bytes worth of palette. This side data signals that a new palette is ++ * present. ++ */ ++ AV_PKT_DATA_PALETTE, ++ ++ /** ++ * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format ++ * that the extradata buffer was changed and the receiving side should ++ * act upon it appropriately. The new extradata is embedded in the side ++ * data buffer and should be immediately used for processing the current ++ * frame or packet. ++ */ ++ AV_PKT_DATA_NEW_EXTRADATA, ++ ++ /** ++ * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: ++ * @code ++ * u32le param_flags ++ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) ++ * s32le channel_count ++ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) ++ * u64le channel_layout ++ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) ++ * s32le sample_rate ++ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) ++ * s32le width ++ * s32le height ++ * @endcode ++ */ ++ AV_PKT_DATA_PARAM_CHANGE, ++ ++ /** ++ * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of ++ * structures with info about macroblocks relevant to splitting the ++ * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). ++ * That is, it does not necessarily contain info about all macroblocks, ++ * as long as the distance between macroblocks in the info is smaller ++ * than the target payload size. ++ * Each MB info structure is 12 bytes, and is laid out as follows: ++ * @code ++ * u32le bit offset from the start of the packet ++ * u8 current quantizer at the start of the macroblock ++ * u8 GOB number ++ * u16le macroblock address within the GOB ++ * u8 horizontal MV predictor ++ * u8 vertical MV predictor ++ * u8 horizontal MV predictor for block number 3 ++ * u8 vertical MV predictor for block number 3 ++ * @endcode ++ */ ++ AV_PKT_DATA_H263_MB_INFO, ++ ++ /** ++ * This side data should be associated with an audio stream and contains ++ * ReplayGain information in form of the AVReplayGain struct. ++ */ ++ AV_PKT_DATA_REPLAYGAIN, ++ ++ /** ++ * This side data contains a 3x3 transformation matrix describing an affine ++ * transformation that needs to be applied to the decoded video frames for ++ * correct presentation. ++ * ++ * See libavutil/display.h for a detailed description of the data. ++ */ ++ AV_PKT_DATA_DISPLAYMATRIX, ++ ++ /** ++ * This side data should be associated with a video stream and contains ++ * Stereoscopic 3D information in form of the AVStereo3D struct. ++ */ ++ AV_PKT_DATA_STEREO3D, ++ ++ /** ++ * This side data should be associated with an audio stream and corresponds ++ * to enum AVAudioServiceType. ++ */ ++ AV_PKT_DATA_AUDIO_SERVICE_TYPE, ++ ++ /** ++ * This side data contains quality related information from the encoder. ++ * @code ++ * u32le quality factor of the compressed frame. Allowed range is between 1 ++ * (good) and FF_LAMBDA_MAX (bad). u8 picture type u8 error count u16 ++ * reserved u64le[error count] sum of squared differences between encoder in ++ * and output ++ * @endcode ++ */ ++ AV_PKT_DATA_QUALITY_STATS, ++ ++ /** ++ * This side data contains an integer value representing the stream index ++ * of a "fallback" track. A fallback track indicates an alternate ++ * track to use when the current track can not be decoded for some reason. ++ * e.g. no decoder available for codec. ++ */ ++ AV_PKT_DATA_FALLBACK_TRACK, ++ ++ /** ++ * This side data corresponds to the AVCPBProperties struct. ++ */ ++ AV_PKT_DATA_CPB_PROPERTIES, ++ ++ /** ++ * Recommmends skipping the specified number of samples ++ * @code ++ * u32le number of samples to skip from start of this packet ++ * u32le number of samples to skip from end of this packet ++ * u8 reason for start skip ++ * u8 reason for end skip (0=padding silence, 1=convergence) ++ * @endcode ++ */ ++ AV_PKT_DATA_SKIP_SAMPLES, ++ ++ /** ++ * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that ++ * the packet may contain "dual mono" audio specific to Japanese DTV ++ * and if it is true, recommends only the selected channel to be used. ++ * @code ++ * u8 selected channels (0=main/left, 1=sub/right, 2=both) ++ * @endcode ++ */ ++ AV_PKT_DATA_JP_DUALMONO, ++ ++ /** ++ * A list of zero terminated key/value strings. There is no end marker for ++ * the list, so it is required to rely on the side data size to stop. ++ */ ++ AV_PKT_DATA_STRINGS_METADATA, ++ ++ /** ++ * Subtitle event position ++ * @code ++ * u32le x1 ++ * u32le y1 ++ * u32le x2 ++ * u32le y2 ++ * @endcode ++ */ ++ AV_PKT_DATA_SUBTITLE_POSITION, ++ ++ /** ++ * Data found in BlockAdditional element of matroska container. There is ++ * no end marker for the data, so it is required to rely on the side data ++ * size to recognize the end. 8 byte id (as found in BlockAddId) followed ++ * by data. ++ */ ++ AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, ++ ++ /** ++ * The optional first identifier line of a WebVTT cue. ++ */ ++ AV_PKT_DATA_WEBVTT_IDENTIFIER, ++ ++ /** ++ * The optional settings (rendering instructions) that immediately ++ * follow the timestamp specifier of a WebVTT cue. ++ */ ++ AV_PKT_DATA_WEBVTT_SETTINGS, ++ ++ /** ++ * A list of zero terminated key/value strings. There is no end marker for ++ * the list, so it is required to rely on the side data size to stop. This ++ * side data includes updated metadata which appeared in the stream. ++ */ ++ AV_PKT_DATA_METADATA_UPDATE, ++ ++ /** ++ * MPEGTS stream ID as uint8_t, this is required to pass the stream ID ++ * information from the demuxer to the corresponding muxer. ++ */ ++ AV_PKT_DATA_MPEGTS_STREAM_ID, ++ ++ /** ++ * Mastering display metadata (based on SMPTE-2086:2014). This metadata ++ * should be associated with a video stream and contains data in the form ++ * of the AVMasteringDisplayMetadata struct. ++ */ ++ AV_PKT_DATA_MASTERING_DISPLAY_METADATA, ++ ++ /** ++ * This side data should be associated with a video stream and corresponds ++ * to the AVSphericalMapping structure. ++ */ ++ AV_PKT_DATA_SPHERICAL, ++ ++ /** ++ * Content light level (based on CTA-861.3). This metadata should be ++ * associated with a video stream and contains data in the form of the ++ * AVContentLightMetadata struct. ++ */ ++ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, ++ ++ /** ++ * ATSC A53 Part 4 Closed Captions. This metadata should be associated with ++ * a video stream. A53 CC bitstream is stored as uint8_t in ++ * AVPacketSideData.data. The number of bytes of CC data is ++ * AVPacketSideData.size. ++ */ ++ AV_PKT_DATA_A53_CC, ++ ++ /** ++ * This side data is encryption initialization data. ++ * The format is not part of ABI, use av_encryption_init_info_* methods to ++ * access. ++ */ ++ AV_PKT_DATA_ENCRYPTION_INIT_INFO, ++ ++ /** ++ * This side data contains encryption info for how to decrypt the packet. ++ * The format is not part of ABI, use av_encryption_info_* methods to access. ++ */ ++ AV_PKT_DATA_ENCRYPTION_INFO, ++ ++ /** ++ * Active Format Description data consisting of a single byte as specified ++ * in ETSI TS 101 154 using AVActiveFormatDescription enum. ++ */ ++ AV_PKT_DATA_AFD, ++ ++ /** ++ * Producer Reference Time data corresponding to the AVProducerReferenceTime ++ * struct, usually exported by some encoders (on demand through the prft flag ++ * set in the AVCodecContext export_side_data field). ++ */ ++ AV_PKT_DATA_PRFT, ++ ++ /** ++ * ICC profile data consisting of an opaque octet buffer following the ++ * format described by ISO 15076-1. ++ */ ++ AV_PKT_DATA_ICC_PROFILE, ++ ++ /** ++ * DOVI configuration ++ * ref: ++ * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, ++ * section 2.2 ++ * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, ++ * section 3.3 Tags are stored in struct AVDOVIDecoderConfigurationRecord. ++ */ ++ AV_PKT_DATA_DOVI_CONF, ++ ++ /** ++ * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 ++ * uint32_t where the first uint32_t describes how many (1-3) of the other ++ * timecodes are used. The timecode format is described in the documentation ++ * of av_timecode_get_smpte_from_framenum() function in libavutil/timecode.h. ++ */ ++ AV_PKT_DATA_S12M_TIMECODE, ++ ++ /** ++ * HDR10+ dynamic metadata associated with a video frame. The metadata is in ++ * the form of the AVDynamicHDRPlus struct and contains ++ * information for color volume transform - application 4 of ++ * SMPTE 2094-40:2016 standard. ++ */ ++ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, ++ ++ /** ++ * The number of side data types. ++ * This is not part of the public API/ABI in the sense that it may ++ * change when new side data types are added. ++ * This must stay the last enum value. ++ * If its value becomes huge, some code using it ++ * needs to be updated as it assumes it to be smaller than other limits. ++ */ ++ AV_PKT_DATA_NB ++}; ++ ++#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS // DEPRECATED ++ ++typedef struct AVPacketSideData { ++ uint8_t* data; ++ size_t size; ++ enum AVPacketSideDataType type; ++} AVPacketSideData; ++ ++/** ++ * This structure stores compressed data. It is typically exported by demuxers ++ * and then passed as input to decoders, or received as output from encoders and ++ * then passed to muxers. ++ * ++ * For video, it should typically contain one compressed frame. For audio it may ++ * contain several compressed frames. Encoders are allowed to output empty ++ * packets, with no compressed data, containing only side data ++ * (e.g. to update some stream parameters at the end of encoding). ++ * ++ * The semantics of data ownership depends on the buf field. ++ * If it is set, the packet data is dynamically allocated and is ++ * valid indefinitely until a call to av_packet_unref() reduces the ++ * reference count to 0. ++ * ++ * If the buf field is not set av_packet_ref() would make a copy instead ++ * of increasing the reference count. ++ * ++ * The side data is always allocated with av_malloc(), copied by ++ * av_packet_ref() and freed by av_packet_unref(). ++ * ++ * sizeof(AVPacket) being a part of the public ABI is deprecated. once ++ * av_init_packet() is removed, new packets will only be able to be allocated ++ * with av_packet_alloc(), and new fields may be added to the end of the struct ++ * with a minor bump. ++ * ++ * @see av_packet_alloc ++ * @see av_packet_ref ++ * @see av_packet_unref ++ */ ++typedef struct AVPacket { ++ /** ++ * A reference to the reference-counted buffer where the packet data is ++ * stored. ++ * May be NULL, then the packet data is not reference-counted. ++ */ ++ AVBufferRef* buf; ++ /** ++ * Presentation timestamp in AVStream->time_base units; the time at which ++ * the decompressed packet will be presented to the user. ++ * Can be AV_NOPTS_VALUE if it is not stored in the file. ++ * pts MUST be larger or equal to dts as presentation cannot happen before ++ * decompression, unless one wants to view hex dumps. Some formats misuse ++ * the terms dts and pts/cts to mean something different. Such timestamps ++ * must be converted to true pts/dts before they are stored in AVPacket. ++ */ ++ int64_t pts; ++ /** ++ * Decompression timestamp in AVStream->time_base units; the time at which ++ * the packet is decompressed. ++ * Can be AV_NOPTS_VALUE if it is not stored in the file. ++ */ ++ int64_t dts; ++ uint8_t* data; ++ int size; ++ int stream_index; ++ /** ++ * A combination of AV_PKT_FLAG values ++ */ ++ int flags; ++ /** ++ * Additional packet data that can be provided by the container. ++ * Packet can contain several types of side information. ++ */ ++ AVPacketSideData* side_data; ++ int side_data_elems; ++ ++ /** ++ * Duration of this packet in AVStream->time_base units, 0 if unknown. ++ * Equals next_pts - this_pts in presentation order. ++ */ ++ int64_t duration; ++ ++ int64_t pos; ///< byte position in stream, -1 if unknown ++ ++ /** ++ * for some private data of the user ++ */ ++ void* opaque; ++ ++ /** ++ * AVBufferRef for free use by the API user. FFmpeg will never check the ++ * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when ++ * the packet is unreferenced. av_packet_copy_props() calls create a new ++ * reference with av_buffer_ref() for the target packet's opaque_ref field. ++ * ++ * This is unrelated to the opaque field, although it serves a similar ++ * purpose. ++ */ ++ AVBufferRef* opaque_ref; ++ ++ /** ++ * Time base of the packet's timestamps. ++ * In the future, this field may be set on packets output by encoders or ++ * demuxers, but its value will be by default ignored on input to decoders ++ * or muxers. ++ */ ++ AVRational time_base; ++} AVPacket; ++ ++#if FF_API_INIT_PACKET ++attribute_deprecated typedef struct AVPacketList { ++ AVPacket pkt; ++ struct AVPacketList* next; ++} AVPacketList; ++#endif ++ ++#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe ++#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted ++/** ++ * Flag is used to discard packets which are required to maintain valid ++ * decoder state but are not required for output and should be dropped ++ * after decoding. ++ **/ ++#define AV_PKT_FLAG_DISCARD 0x0004 ++/** ++ * The packet comes from a trusted source. ++ * ++ * Otherwise-unsafe constructs such as arbitrary pointers to data ++ * outside the packet may be followed. ++ */ ++#define AV_PKT_FLAG_TRUSTED 0x0008 ++/** ++ * Flag is used to indicate packets that contain frames that can ++ * be discarded by the decoder. I.e. Non-reference frames. ++ */ ++#define AV_PKT_FLAG_DISPOSABLE 0x0010 ++ ++enum AVSideDataParamChangeFlags { ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * @deprecated those are not used by any decoder ++ */ ++ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, ++ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, ++#endif ++ AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, ++ AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, ++}; ++ ++/** ++ * Allocate an AVPacket and set its fields to default values. The resulting ++ * struct must be freed using av_packet_free(). ++ * ++ * @return An AVPacket filled with default values or NULL on failure. ++ * ++ * @note this only allocates the AVPacket itself, not the data buffers. Those ++ * must be allocated through other means such as av_new_packet. ++ * ++ * @see av_new_packet ++ */ ++AVPacket* av_packet_alloc(void); ++ ++/** ++ * Create a new packet that references the same data as src. ++ * ++ * This is a shortcut for av_packet_alloc()+av_packet_ref(). ++ * ++ * @return newly created AVPacket on success, NULL on error. ++ * ++ * @see av_packet_alloc ++ * @see av_packet_ref ++ */ ++AVPacket* av_packet_clone(const AVPacket* src); ++ ++/** ++ * Free the packet, if the packet is reference counted, it will be ++ * unreferenced first. ++ * ++ * @param pkt packet to be freed. The pointer will be set to NULL. ++ * @note passing NULL is a no-op. ++ */ ++void av_packet_free(AVPacket** pkt); ++ ++#if FF_API_INIT_PACKET ++/** ++ * Initialize optional fields of a packet with default values. ++ * ++ * Note, this does not touch the data and size members, which have to be ++ * initialized separately. ++ * ++ * @param pkt packet ++ * ++ * @see av_packet_alloc ++ * @see av_packet_unref ++ * ++ * @deprecated This function is deprecated. Once it's removed, ++ sizeof(AVPacket) will not be a part of the ABI anymore. ++ */ ++attribute_deprecated void av_init_packet(AVPacket* pkt); ++#endif ++ ++/** ++ * Allocate the payload of a packet and initialize its fields with ++ * default values. ++ * ++ * @param pkt packet ++ * @param size wanted payload size ++ * @return 0 if OK, AVERROR_xxx otherwise ++ */ ++int av_new_packet(AVPacket* pkt, int size); ++ ++/** ++ * Reduce packet size, correctly zeroing padding ++ * ++ * @param pkt packet ++ * @param size new size ++ */ ++void av_shrink_packet(AVPacket* pkt, int size); ++ ++/** ++ * Increase packet size, correctly zeroing padding ++ * ++ * @param pkt packet ++ * @param grow_by number of bytes by which to increase the size of the packet ++ */ ++int av_grow_packet(AVPacket* pkt, int grow_by); ++ ++/** ++ * Initialize a reference-counted packet from av_malloc()ed data. ++ * ++ * @param pkt packet to be initialized. This function will set the data, size, ++ * and buf fields, all others are left untouched. ++ * @param data Data allocated by av_malloc() to be used as packet data. If this ++ * function returns successfully, the data is owned by the underlying ++ * AVBuffer. The caller may not access the data through other means. ++ * @param size size of data in bytes, without the padding. I.e. the full buffer ++ * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. ++ * ++ * @return 0 on success, a negative AVERROR on error ++ */ ++int av_packet_from_data(AVPacket* pkt, uint8_t* data, int size); ++ ++/** ++ * Allocate new information of a packet. ++ * ++ * @param pkt packet ++ * @param type side information type ++ * @param size side information size ++ * @return pointer to fresh allocated data or NULL otherwise ++ */ ++uint8_t* av_packet_new_side_data(AVPacket* pkt, enum AVPacketSideDataType type, ++ size_t size); ++ ++/** ++ * Wrap an existing array as a packet side data. ++ * ++ * @param pkt packet ++ * @param type side information type ++ * @param data the side data array. It must be allocated with the av_malloc() ++ * family of functions. The ownership of the data is transferred to ++ * pkt. ++ * @param size side information size ++ * @return a non-negative number on success, a negative AVERROR code on ++ * failure. On failure, the packet is unchanged and the data remains ++ * owned by the caller. ++ */ ++int av_packet_add_side_data(AVPacket* pkt, enum AVPacketSideDataType type, ++ uint8_t* data, size_t size); ++ ++/** ++ * Shrink the already allocated side data buffer ++ * ++ * @param pkt packet ++ * @param type side information type ++ * @param size new side information size ++ * @return 0 on success, < 0 on failure ++ */ ++int av_packet_shrink_side_data(AVPacket* pkt, enum AVPacketSideDataType type, ++ size_t size); ++ ++/** ++ * Get side information from packet. ++ * ++ * @param pkt packet ++ * @param type desired side information type ++ * @param size If supplied, *size will be set to the size of the side data ++ * or to zero if the desired side data is not present. ++ * @return pointer to data if present or NULL otherwise ++ */ ++uint8_t* av_packet_get_side_data(const AVPacket* pkt, ++ enum AVPacketSideDataType type, size_t* size); ++ ++const char* av_packet_side_data_name(enum AVPacketSideDataType type); ++ ++/** ++ * Pack a dictionary for use in side_data. ++ * ++ * @param dict The dictionary to pack. ++ * @param size pointer to store the size of the returned data ++ * @return pointer to data if successful, NULL otherwise ++ */ ++uint8_t* av_packet_pack_dictionary(AVDictionary* dict, size_t* size); ++/** ++ * Unpack a dictionary from side_data. ++ * ++ * @param data data from side_data ++ * @param size size of the data ++ * @param dict the metadata storage dictionary ++ * @return 0 on success, < 0 on failure ++ */ ++int av_packet_unpack_dictionary(const uint8_t* data, size_t size, ++ AVDictionary** dict); ++ ++/** ++ * Convenience function to free all the side data stored. ++ * All the other fields stay untouched. ++ * ++ * @param pkt packet ++ */ ++void av_packet_free_side_data(AVPacket* pkt); ++ ++/** ++ * Setup a new reference to the data described by a given packet ++ * ++ * If src is reference-counted, setup dst as a new reference to the ++ * buffer in src. Otherwise allocate a new buffer in dst and copy the ++ * data from src into it. ++ * ++ * All the other fields are copied from src. ++ * ++ * @see av_packet_unref ++ * ++ * @param dst Destination packet. Will be completely overwritten. ++ * @param src Source packet ++ * ++ * @return 0 on success, a negative AVERROR on error. On error, dst ++ * will be blank (as if returned by av_packet_alloc()). ++ */ ++int av_packet_ref(AVPacket* dst, const AVPacket* src); ++ ++/** ++ * Wipe the packet. ++ * ++ * Unreference the buffer referenced by the packet and reset the ++ * remaining packet fields to their default values. ++ * ++ * @param pkt The packet to be unreferenced. ++ */ ++void av_packet_unref(AVPacket* pkt); ++ ++/** ++ * Move every field in src to dst and reset src. ++ * ++ * @see av_packet_unref ++ * ++ * @param src Source packet, will be reset ++ * @param dst Destination packet ++ */ ++void av_packet_move_ref(AVPacket* dst, AVPacket* src); ++ ++/** ++ * Copy only "properties" fields from src to dst. ++ * ++ * Properties for the purpose of this function are all the fields ++ * beside those related to the packet data (buf, data, size) ++ * ++ * @param dst Destination packet ++ * @param src Source packet ++ * ++ * @return 0 on success AVERROR on failure. ++ */ ++int av_packet_copy_props(AVPacket* dst, const AVPacket* src); ++ ++/** ++ * Ensure the data described by a given packet is reference counted. ++ * ++ * @note This function does not ensure that the reference will be writable. ++ * Use av_packet_make_writable instead for that purpose. ++ * ++ * @see av_packet_ref ++ * @see av_packet_make_writable ++ * ++ * @param pkt packet whose data should be made reference counted. ++ * ++ * @return 0 on success, a negative AVERROR on error. On failure, the ++ * packet is unchanged. ++ */ ++int av_packet_make_refcounted(AVPacket* pkt); ++ ++/** ++ * Create a writable reference for the data described by a given packet, ++ * avoiding data copy if possible. ++ * ++ * @param pkt Packet whose data should be made writable. ++ * ++ * @return 0 on success, a negative AVERROR on failure. On failure, the ++ * packet is unchanged. ++ */ ++int av_packet_make_writable(AVPacket* pkt); ++ ++/** ++ * Convert valid timing fields (timestamps / durations) in a packet from one ++ * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be ++ * ignored. ++ * ++ * @param pkt packet on which the conversion will be performed ++ * @param tb_src source timebase, in which the timing fields in pkt are ++ * expressed ++ * @param tb_dst destination timebase, to which the timing fields will be ++ * converted ++ */ ++void av_packet_rescale_ts(AVPacket* pkt, AVRational tb_src, AVRational tb_dst); ++ ++/** ++ * @} ++ */ ++ ++#endif // AVCODEC_PACKET_H +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,156 @@ ++/* ++ * The Video Decode and Presentation API for UNIX (VDPAU) is used for ++ * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. ++ * ++ * Copyright (C) 2008 NVIDIA ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_VDPAU_H ++#define AVCODEC_VDPAU_H ++ ++/** ++ * @file ++ * @ingroup lavc_codec_hwaccel_vdpau ++ * Public libavcodec VDPAU header. ++ */ ++ ++/** ++ * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer ++ * @ingroup lavc_codec_hwaccel ++ * ++ * VDPAU hardware acceleration has two modules ++ * - VDPAU decoding ++ * - VDPAU presentation ++ * ++ * The VDPAU decoding module parses all headers using FFmpeg ++ * parsing mechanisms and uses VDPAU for the actual decoding. ++ * ++ * As per the current implementation, the actual decoding ++ * and rendering (API calls) are done as part of the VDPAU ++ * presentation (vo_vdpau.c) module. ++ * ++ * @{ ++ */ ++ ++#include ++ ++#include "libavutil/avconfig.h" ++#include "libavutil/attributes.h" ++ ++#include "avcodec.h" ++ ++struct AVCodecContext; ++struct AVFrame; ++ ++typedef int (*AVVDPAU_Render2)(struct AVCodecContext*, struct AVFrame*, ++ const VdpPictureInfo*, uint32_t, ++ const VdpBitstreamBuffer*); ++ ++/** ++ * This structure is used to share data between the libavcodec library and ++ * the client video application. ++ * The user shall allocate the structure via the av_alloc_vdpau_hwaccel ++ * function and make it available as ++ * AVCodecContext.hwaccel_context. Members can be set by the user once ++ * during initialization or through each AVCodecContext.get_buffer() ++ * function call. In any case, they must be valid prior to calling ++ * decoding functions. ++ * ++ * The size of this structure is not a part of the public ABI and must not ++ * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an ++ * AVVDPAUContext. ++ */ ++typedef struct AVVDPAUContext { ++ /** ++ * VDPAU decoder handle ++ * ++ * Set by user. ++ */ ++ VdpDecoder decoder; ++ ++ /** ++ * VDPAU decoder render callback ++ * ++ * Set by the user. ++ */ ++ VdpDecoderRender* render; ++ ++ AVVDPAU_Render2 render2; ++} AVVDPAUContext; ++ ++/** ++ * @brief allocation function for AVVDPAUContext ++ * ++ * Allows extending the struct without breaking API/ABI ++ */ ++AVVDPAUContext* av_alloc_vdpaucontext(void); ++ ++AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext*); ++void av_vdpau_hwaccel_set_render2(AVVDPAUContext*, AVVDPAU_Render2); ++ ++/** ++ * Associate a VDPAU device with a codec context for hardware acceleration. ++ * This function is meant to be called from the get_format() codec callback, ++ * or earlier. It can also be called after avcodec_flush_buffers() to change ++ * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent ++ * display preemption). ++ * ++ * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes ++ * successfully. ++ * ++ * @param avctx decoding context whose get_format() callback is invoked ++ * @param device VDPAU device handle to use for hardware acceleration ++ * @param get_proc_address VDPAU device driver ++ * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags ++ * ++ * @return 0 on success, an AVERROR code on failure. ++ */ ++int av_vdpau_bind_context(AVCodecContext* avctx, VdpDevice device, ++ VdpGetProcAddress* get_proc_address, unsigned flags); ++ ++/** ++ * Gets the parameters to create an adequate VDPAU video surface for the codec ++ * context using VDPAU hardware decoding acceleration. ++ * ++ * @note Behavior is undefined if the context was not successfully bound to a ++ * VDPAU device using av_vdpau_bind_context(). ++ * ++ * @param avctx the codec context being used for decoding the stream ++ * @param type storage space for the VDPAU video surface chroma type ++ * (or NULL to ignore) ++ * @param width storage space for the VDPAU video surface pixel width ++ * (or NULL to ignore) ++ * @param height storage space for the VDPAU video surface pixel height ++ * (or NULL to ignore) ++ * ++ * @return 0 on success, a negative AVERROR code on failure. ++ */ ++int av_vdpau_get_surface_parameters(AVCodecContext* avctx, VdpChromaType* type, ++ uint32_t* width, uint32_t* height); ++ ++/** ++ * Allocate an AVVDPAUContext. ++ * ++ * @return Newly-allocated AVVDPAUContext or NULL on failure. ++ */ ++AVVDPAUContext* av_vdpau_alloc_context(void); ++ ++/** @} */ ++ ++#endif /* AVCODEC_VDPAU_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,45 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVCODEC_VERSION_H ++#define AVCODEC_VERSION_H ++ ++/** ++ * @file ++ * @ingroup libavc ++ * Libavcodec version macros. ++ */ ++ ++#include "libavutil/version.h" ++ ++#include "version_major.h" ++ ++#define LIBAVCODEC_VERSION_MINOR 5 ++#define LIBAVCODEC_VERSION_MICRO 100 ++ ++#define LIBAVCODEC_VERSION_INT \ ++ AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, \ ++ LIBAVCODEC_VERSION_MICRO) ++#define LIBAVCODEC_VERSION \ ++ AV_VERSION(LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, \ ++ LIBAVCODEC_VERSION_MICRO) ++#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT ++ ++#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) ++ ++#endif /* AVCODEC_VERSION_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVCODEC_VERSION_MAJOR_H ++#define AVCODEC_VERSION_MAJOR_H ++ ++/** ++ * @file ++ * @ingroup libavc ++ * Libavcodec version macros. ++ */ ++ ++#define LIBAVCODEC_VERSION_MAJOR 60 ++ ++/** ++ * FF_API_* defines may be placed below to indicate public API that will be ++ * dropped at a future version bump. The defines themselves are not part of ++ * the public API and may change, break or disappear at any time. ++ * ++ * @note, when bumping the major version it is recommended to manually ++ * disable each FF_API_* in its own commit instead of disabling them all ++ * at once through the bump. This improves the git bisect-ability of the change. ++ */ ++ ++#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_IDCT_NONE (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_AYUV_CODECID (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_VT_OUTPUT_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61) ++ ++// reminder to remove CrystalHD decoders on next major bump ++#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61) ++ ++#endif /* AVCODEC_VERSION_MAJOR_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,173 @@ ++/* ++ * copyright (c) 2006 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * Macro definitions for various function/variable attributes ++ */ ++ ++#ifndef AVUTIL_ATTRIBUTES_H ++#define AVUTIL_ATTRIBUTES_H ++ ++#ifdef __GNUC__ ++# define AV_GCC_VERSION_AT_LEAST(x, y) \ ++ (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) ++# define AV_GCC_VERSION_AT_MOST(x, y) \ ++ (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) ++#else ++# define AV_GCC_VERSION_AT_LEAST(x, y) 0 ++# define AV_GCC_VERSION_AT_MOST(x, y) 0 ++#endif ++ ++#ifdef __has_builtin ++# define AV_HAS_BUILTIN(x) __has_builtin(x) ++#else ++# define AV_HAS_BUILTIN(x) 0 ++#endif ++ ++#ifndef av_always_inline ++# if AV_GCC_VERSION_AT_LEAST(3, 1) ++# define av_always_inline __attribute__((always_inline)) inline ++# elif defined(_MSC_VER) ++# define av_always_inline __forceinline ++# else ++# define av_always_inline inline ++# endif ++#endif ++ ++#ifndef av_extern_inline ++# if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) ++# define av_extern_inline extern inline ++# else ++# define av_extern_inline inline ++# endif ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(3, 4) ++# define av_warn_unused_result __attribute__((warn_unused_result)) ++#else ++# define av_warn_unused_result ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(3, 1) ++# define av_noinline __attribute__((noinline)) ++#elif defined(_MSC_VER) ++# define av_noinline __declspec(noinline) ++#else ++# define av_noinline ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(3, 1) || defined(__clang__) ++# define av_pure __attribute__((pure)) ++#else ++# define av_pure ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(2, 6) || defined(__clang__) ++# define av_const __attribute__((const)) ++#else ++# define av_const ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(4, 3) || defined(__clang__) ++# define av_cold __attribute__((cold)) ++#else ++# define av_cold ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(4, 1) && !defined(__llvm__) ++# define av_flatten __attribute__((flatten)) ++#else ++# define av_flatten ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(3, 1) ++# define attribute_deprecated __attribute__((deprecated)) ++#elif defined(_MSC_VER) ++# define attribute_deprecated __declspec(deprecated) ++#else ++# define attribute_deprecated ++#endif ++ ++/** ++ * Disable warnings about deprecated features ++ * This is useful for sections of code kept for backward compatibility and ++ * scheduled for removal. ++ */ ++#ifndef AV_NOWARN_DEPRECATED ++# if AV_GCC_VERSION_AT_LEAST(4, 6) || defined(__clang__) ++# define AV_NOWARN_DEPRECATED(code) \ ++ _Pragma("GCC diagnostic push") \ ++ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ ++ code _Pragma("GCC diagnostic pop") ++# elif defined(_MSC_VER) ++# define AV_NOWARN_DEPRECATED(code) \ ++ __pragma(warning(push)) __pragma(warning(disable : 4996)) code; \ ++ __pragma(warning(pop)) ++# else ++# define AV_NOWARN_DEPRECATED(code) code ++# endif ++#endif ++ ++#if defined(__GNUC__) || defined(__clang__) ++# define av_unused __attribute__((unused)) ++#else ++# define av_unused ++#endif ++ ++/** ++ * Mark a variable as used and prevent the compiler from optimizing it ++ * away. This is useful for variables accessed only from inline ++ * assembler without the compiler being aware. ++ */ ++#if AV_GCC_VERSION_AT_LEAST(3, 1) || defined(__clang__) ++# define av_used __attribute__((used)) ++#else ++# define av_used ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(3, 3) || defined(__clang__) ++# define av_alias __attribute__((may_alias)) ++#else ++# define av_alias ++#endif ++ ++#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) ++# define av_uninit(x) x = x ++#else ++# define av_uninit(x) x ++#endif ++ ++#if defined(__GNUC__) || defined(__clang__) ++# define av_builtin_constant_p __builtin_constant_p ++# define av_printf_format(fmtpos, attrpos) \ ++ __attribute__((__format__(__printf__, fmtpos, attrpos))) ++#else ++# define av_builtin_constant_p(x) 0 ++# define av_printf_format(fmtpos, attrpos) ++#endif ++ ++#if AV_GCC_VERSION_AT_LEAST(2, 5) || defined(__clang__) ++# define av_noreturn __attribute__((noreturn)) ++#else ++# define av_noreturn ++#endif ++ ++#endif /* AVUTIL_ATTRIBUTES_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,6 @@ ++/* Generated by ffmpeg configure */ ++#ifndef AVUTIL_AVCONFIG_H ++#define AVUTIL_AVCONFIG_H ++#define AV_HAVE_BIGENDIAN 0 ++#define AV_HAVE_FAST_UNALIGNED 1 ++#endif /* AVUTIL_AVCONFIG_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,371 @@ ++/* ++ * copyright (c) 2006 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++#ifndef AVUTIL_AVUTIL_H ++#define AVUTIL_AVUTIL_H ++ ++/** ++ * @file ++ * @ingroup lavu ++ * Convenience header that includes @ref lavu "libavutil"'s core. ++ */ ++ ++/** ++ * @mainpage ++ * ++ * @section ffmpeg_intro Introduction ++ * ++ * This document describes the usage of the different libraries ++ * provided by FFmpeg. ++ * ++ * @li @ref libavc "libavcodec" encoding/decoding library ++ * @li @ref lavfi "libavfilter" graph-based frame editing library ++ * @li @ref libavf "libavformat" I/O and muxing/demuxing library ++ * @li @ref lavd "libavdevice" special devices muxing/demuxing library ++ * @li @ref lavu "libavutil" common utility library ++ * @li @ref lswr "libswresample" audio resampling, format conversion and mixing ++ * @li @ref lpp "libpostproc" post processing library ++ * @li @ref libsws "libswscale" color conversion and scaling library ++ * ++ * @section ffmpeg_versioning Versioning and compatibility ++ * ++ * Each of the FFmpeg libraries contains a version.h header, which defines a ++ * major, minor and micro version number with the ++ * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version ++ * number is incremented with backward incompatible changes - e.g. removing ++ * parts of the public API, reordering public struct members, etc. The minor ++ * version number is incremented for backward compatible API changes or major ++ * new features - e.g. adding a new public function or a new decoder. The micro ++ * version number is incremented for smaller changes that a calling program ++ * might still want to check for - e.g. changing behavior in a previously ++ * unspecified situation. ++ * ++ * FFmpeg guarantees backward API and ABI compatibility for each library as long ++ * as its major version number is unchanged. This means that no public symbols ++ * will be removed or renamed. Types and names of the public struct members and ++ * values of public macros and enums will remain the same (unless they were ++ * explicitly declared as not part of the public API). Documented behavior will ++ * not change. ++ * ++ * In other words, any correct program that works with a given FFmpeg snapshot ++ * should work just as well without any changes with any later snapshot with the ++ * same major versions. This applies to both rebuilding the program against new ++ * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program ++ * links against. ++ * ++ * However, new public symbols may be added and new members may be appended to ++ * public structs whose size is not part of public ABI (most public structs in ++ * FFmpeg). New macros and enum values may be added. Behavior in undocumented ++ * situations may change slightly (and be documented). All those are accompanied ++ * by an entry in doc/APIchanges and incrementing either the minor or micro ++ * version number. ++ */ ++ ++/** ++ * @defgroup lavu libavutil ++ * Common code shared across all FFmpeg libraries. ++ * ++ * @note ++ * libavutil is designed to be modular. In most cases, in order to use the ++ * functions provided by one component of libavutil you must explicitly include ++ * the specific header containing that feature. If you are only using ++ * media-related components, you could simply include libavutil/avutil.h, which ++ * brings in most of the "core" components. ++ * ++ * @{ ++ * ++ * @defgroup lavu_crypto Crypto and Hashing ++ * ++ * @{ ++ * @} ++ * ++ * @defgroup lavu_math Mathematics ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_string String Manipulation ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_mem Memory Management ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_data Data Structures ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_video Video related ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_audio Audio related ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_error Error Codes ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_log Logging Facility ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup lavu_misc Other ++ * ++ * @{ ++ * ++ * @defgroup preproc_misc Preprocessor String Macros ++ * ++ * @{ ++ * ++ * @} ++ * ++ * @defgroup version_utils Library Version Macros ++ * ++ * @{ ++ * ++ * @} ++ */ ++ ++/** ++ * @addtogroup lavu_ver ++ * @{ ++ */ ++ ++/** ++ * Return the LIBAVUTIL_VERSION_INT constant. ++ */ ++unsigned avutil_version(void); ++ ++/** ++ * Return an informative version string. This usually is the actual release ++ * version number or a git commit description. This string has no fixed format ++ * and can change any time. It should never be parsed by code. ++ */ ++const char* av_version_info(void); ++ ++/** ++ * Return the libavutil build-time configuration. ++ */ ++const char* avutil_configuration(void); ++ ++/** ++ * Return the libavutil license. ++ */ ++const char* avutil_license(void); ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @addtogroup lavu_media Media Type ++ * @brief Media Type ++ */ ++ ++enum AVMediaType { ++ AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA ++ AVMEDIA_TYPE_VIDEO, ++ AVMEDIA_TYPE_AUDIO, ++ AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous ++ AVMEDIA_TYPE_SUBTITLE, ++ AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse ++ AVMEDIA_TYPE_NB ++}; ++ ++/** ++ * Return a string describing the media_type enum, NULL if media_type ++ * is unknown. ++ */ ++const char* av_get_media_type_string(enum AVMediaType media_type); ++ ++/** ++ * @defgroup lavu_const Constants ++ * @{ ++ * ++ * @defgroup lavu_enc Encoding specific ++ * ++ * @note those definition should move to avcodec ++ * @{ ++ */ ++ ++#define FF_LAMBDA_SHIFT 7 ++#define FF_LAMBDA_SCALE (1 << FF_LAMBDA_SHIFT) ++#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda ++#define FF_LAMBDA_MAX (256 * 128 - 1) ++ ++#define FF_QUALITY_SCALE FF_LAMBDA_SCALE // FIXME maybe remove ++ ++/** ++ * @} ++ * @defgroup lavu_time Timestamp specific ++ * ++ * FFmpeg internal timebase and timestamp definitions ++ * ++ * @{ ++ */ ++ ++/** ++ * @brief Undefined timestamp value ++ * ++ * Usually reported by demuxer that work on containers that do not provide ++ * either pts or dts. ++ */ ++ ++#define AV_NOPTS_VALUE ((int64_t)UINT64_C(0x8000000000000000)) ++ ++/** ++ * Internal time base represented as integer ++ */ ++ ++#define AV_TIME_BASE 1000000 ++ ++/** ++ * Internal time base represented as fractional value ++ */ ++ ++#define AV_TIME_BASE_Q \ ++ (AVRational) { 1, AV_TIME_BASE } ++ ++/** ++ * @} ++ * @} ++ * @defgroup lavu_picture Image related ++ * ++ * AVPicture types, pixel formats and basic image planes manipulation. ++ * ++ * @{ ++ */ ++ ++enum AVPictureType { ++ AV_PICTURE_TYPE_NONE = 0, ///< Undefined ++ AV_PICTURE_TYPE_I, ///< Intra ++ AV_PICTURE_TYPE_P, ///< Predicted ++ AV_PICTURE_TYPE_B, ///< Bi-dir predicted ++ AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG-4 ++ AV_PICTURE_TYPE_SI, ///< Switching Intra ++ AV_PICTURE_TYPE_SP, ///< Switching Predicted ++ AV_PICTURE_TYPE_BI, ///< BI type ++}; ++ ++/** ++ * Return a single letter to describe the given picture type ++ * pict_type. ++ * ++ * @param[in] pict_type the picture type @return a single character ++ * representing the picture type, '?' if pict_type is unknown ++ */ ++char av_get_picture_type_char(enum AVPictureType pict_type); ++ ++/** ++ * @} ++ */ ++ ++#include "common.h" ++#include "error.h" ++#include "rational.h" ++#include "version.h" ++#include "macros.h" ++#include "mathematics.h" ++#include "log.h" ++#include "pixfmt.h" ++ ++/** ++ * Return x default pointer in case p is NULL. ++ */ ++static inline void* av_x_if_null(const void* p, const void* x) { ++ return (void*)(intptr_t)(p ? p : x); ++} ++ ++/** ++ * Compute the length of an integer list. ++ * ++ * @param elsize size in bytes of each list element (only 1, 2, 4 or 8) ++ * @param term list terminator (usually 0 or -1) ++ * @param list pointer to the list ++ * @return length of the list, in elements, not counting the terminator ++ */ ++unsigned av_int_list_length_for_size(unsigned elsize, const void* list, ++ uint64_t term) av_pure; ++ ++/** ++ * Compute the length of an integer list. ++ * ++ * @param term list terminator (usually 0 or -1) ++ * @param list pointer to the list ++ * @return length of the list, in elements, not counting the terminator ++ */ ++#define av_int_list_length(list, term) \ ++ av_int_list_length_for_size(sizeof(*(list)), list, term) ++ ++#if FF_API_AV_FOPEN_UTF8 ++/** ++ * Open a file using a UTF-8 filename. ++ * The API of this function matches POSIX fopen(), errors are returned through ++ * errno. ++ * @deprecated Avoid using it, as on Windows, the FILE* allocated by this ++ * function may be allocated with a different CRT than the caller ++ * who uses the FILE*. No replacement provided in public API. ++ */ ++attribute_deprecated FILE* av_fopen_utf8(const char* path, const char* mode); ++#endif ++ ++/** ++ * Return the fractional representation of the internal time base. ++ */ ++AVRational av_get_time_base_q(void); ++ ++#define AV_FOURCC_MAX_STRING_SIZE 32 ++ ++#define av_fourcc2str(fourcc) \ ++ av_fourcc_make_string((char[AV_FOURCC_MAX_STRING_SIZE]){0}, fourcc) ++ ++/** ++ * Fill the provided buffer with a string containing a FourCC (four-character ++ * code) representation. ++ * ++ * @param buf a buffer with size in bytes of at least ++ * AV_FOURCC_MAX_STRING_SIZE ++ * @param fourcc the fourcc to represent ++ * @return the buffer in input ++ */ ++char* av_fourcc_make_string(char* buf, uint32_t fourcc); ++ ++/** ++ * @} ++ * @} ++ */ ++ ++#endif /* AVUTIL_AVUTIL_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,324 @@ ++/* ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @ingroup lavu_buffer ++ * refcounted data buffer API ++ */ ++ ++#ifndef AVUTIL_BUFFER_H ++#define AVUTIL_BUFFER_H ++ ++#include ++#include ++ ++/** ++ * @defgroup lavu_buffer AVBuffer ++ * @ingroup lavu_data ++ * ++ * @{ ++ * AVBuffer is an API for reference-counted data buffers. ++ * ++ * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer ++ * represents the data buffer itself; it is opaque and not meant to be accessed ++ * by the caller directly, but only through AVBufferRef. However, the caller may ++ * e.g. compare two AVBuffer pointers to check whether two different references ++ * are describing the same data buffer. AVBufferRef represents a single ++ * reference to an AVBuffer and it is the object that may be manipulated by the ++ * caller directly. ++ * ++ * There are two functions provided for creating a new AVBuffer with a single ++ * reference -- av_buffer_alloc() to just allocate a new buffer, and ++ * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing ++ * reference, additional references may be created with av_buffer_ref(). ++ * Use av_buffer_unref() to free a reference (this will automatically free the ++ * data once all the references are freed). ++ * ++ * The convention throughout this API and the rest of FFmpeg is such that the ++ * buffer is considered writable if there exists only one reference to it (and ++ * it has not been marked as read-only). The av_buffer_is_writable() function is ++ * provided to check whether this is true and av_buffer_make_writable() will ++ * automatically create a new writable buffer when necessary. ++ * Of course nothing prevents the calling code from violating this convention, ++ * however that is safe only when all the existing references are under its ++ * control. ++ * ++ * @note Referencing and unreferencing the buffers is thread-safe and thus ++ * may be done from multiple threads simultaneously without any need for ++ * additional locking. ++ * ++ * @note Two different references to the same buffer can point to different ++ * parts of the buffer (i.e. their AVBufferRef.data will not be equal). ++ */ ++ ++/** ++ * A reference counted buffer type. It is opaque and is meant to be used through ++ * references (AVBufferRef). ++ */ ++typedef struct AVBuffer AVBuffer; ++ ++/** ++ * A reference to a data buffer. ++ * ++ * The size of this struct is not a part of the public ABI and it is not meant ++ * to be allocated directly. ++ */ ++typedef struct AVBufferRef { ++ AVBuffer* buffer; ++ ++ /** ++ * The data buffer. It is considered writable if and only if ++ * this is the only reference to the buffer, in which case ++ * av_buffer_is_writable() returns 1. ++ */ ++ uint8_t* data; ++ /** ++ * Size of data in bytes. ++ */ ++ size_t size; ++} AVBufferRef; ++ ++/** ++ * Allocate an AVBuffer of the given size using av_malloc(). ++ * ++ * @return an AVBufferRef of given size or NULL when out of memory ++ */ ++AVBufferRef* av_buffer_alloc(size_t size); ++ ++/** ++ * Same as av_buffer_alloc(), except the returned buffer will be initialized ++ * to zero. ++ */ ++AVBufferRef* av_buffer_allocz(size_t size); ++ ++/** ++ * Always treat the buffer as read-only, even when it has only one ++ * reference. ++ */ ++#define AV_BUFFER_FLAG_READONLY (1 << 0) ++ ++/** ++ * Create an AVBuffer from an existing array. ++ * ++ * If this function is successful, data is owned by the AVBuffer. The caller may ++ * only access data through the returned AVBufferRef and references derived from ++ * it. ++ * If this function fails, data is left untouched. ++ * @param data data array ++ * @param size size of data in bytes ++ * @param free a callback for freeing this buffer's data ++ * @param opaque parameter to be got for processing or passed to free ++ * @param flags a combination of AV_BUFFER_FLAG_* ++ * ++ * @return an AVBufferRef referring to data on success, NULL on failure. ++ */ ++AVBufferRef* av_buffer_create(uint8_t* data, size_t size, ++ void (*free)(void* opaque, uint8_t* data), ++ void* opaque, int flags); ++ ++/** ++ * Default free callback, which calls av_free() on the buffer data. ++ * This function is meant to be passed to av_buffer_create(), not called ++ * directly. ++ */ ++void av_buffer_default_free(void* opaque, uint8_t* data); ++ ++/** ++ * Create a new reference to an AVBuffer. ++ * ++ * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on ++ * failure. ++ */ ++AVBufferRef* av_buffer_ref(const AVBufferRef* buf); ++ ++/** ++ * Free a given reference and automatically free the buffer if there are no more ++ * references to it. ++ * ++ * @param buf the reference to be freed. The pointer is set to NULL on return. ++ */ ++void av_buffer_unref(AVBufferRef** buf); ++ ++/** ++ * @return 1 if the caller may write to the data referred to by buf (which is ++ * true if and only if buf is the only reference to the underlying AVBuffer). ++ * Return 0 otherwise. ++ * A positive answer is valid until av_buffer_ref() is called on buf. ++ */ ++int av_buffer_is_writable(const AVBufferRef* buf); ++ ++/** ++ * @return the opaque parameter set by av_buffer_create. ++ */ ++void* av_buffer_get_opaque(const AVBufferRef* buf); ++ ++int av_buffer_get_ref_count(const AVBufferRef* buf); ++ ++/** ++ * Create a writable reference from a given buffer reference, avoiding data copy ++ * if possible. ++ * ++ * @param buf buffer reference to make writable. On success, buf is either left ++ * untouched, or it is unreferenced and a new writable AVBufferRef is ++ * written in its place. On failure, buf is left untouched. ++ * @return 0 on success, a negative AVERROR on failure. ++ */ ++int av_buffer_make_writable(AVBufferRef** buf); ++ ++/** ++ * Reallocate a given buffer. ++ * ++ * @param buf a buffer reference to reallocate. On success, buf will be ++ * unreferenced and a new reference with the required size will be ++ * written in its place. On failure buf will be left untouched. *buf ++ * may be NULL, then a new buffer is allocated. ++ * @param size required new buffer size. ++ * @return 0 on success, a negative AVERROR on failure. ++ * ++ * @note the buffer is actually reallocated with av_realloc() only if it was ++ * initially allocated through av_buffer_realloc(NULL) and there is only one ++ * reference to it (i.e. the one passed to this function). In all other cases ++ * a new buffer is allocated and the data is copied. ++ */ ++int av_buffer_realloc(AVBufferRef** buf, size_t size); ++ ++/** ++ * Ensure dst refers to the same data as src. ++ * ++ * When *dst is already equivalent to src, do nothing. Otherwise unreference dst ++ * and replace it with a new reference to src. ++ * ++ * @param dst Pointer to either a valid buffer reference or NULL. On success, ++ * this will point to a buffer reference equivalent to src. On ++ * failure, dst will be left untouched. ++ * @param src A buffer reference to replace dst with. May be NULL, then this ++ * function is equivalent to av_buffer_unref(dst). ++ * @return 0 on success ++ * AVERROR(ENOMEM) on memory allocation failure. ++ */ ++int av_buffer_replace(AVBufferRef** dst, const AVBufferRef* src); ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @defgroup lavu_bufferpool AVBufferPool ++ * @ingroup lavu_data ++ * ++ * @{ ++ * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. ++ * ++ * Frequently allocating and freeing large buffers may be slow. AVBufferPool is ++ * meant to solve this in cases when the caller needs a set of buffers of the ++ * same size (the most obvious use case being buffers for raw video or audio ++ * frames). ++ * ++ * At the beginning, the user must call av_buffer_pool_init() to create the ++ * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to ++ * get a reference to a new buffer, similar to av_buffer_alloc(). This new ++ * reference works in all aspects the same way as the one created by ++ * av_buffer_alloc(). However, when the last reference to this buffer is ++ * unreferenced, it is returned to the pool instead of being freed and will be ++ * reused for subsequent av_buffer_pool_get() calls. ++ * ++ * When the caller is done with the pool and no longer needs to allocate any new ++ * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. ++ * Once all the buffers are released, it will automatically be freed. ++ * ++ * Allocating and releasing buffers with this API is thread-safe as long as ++ * either the default alloc callback is used, or the user-supplied one is ++ * thread-safe. ++ */ ++ ++/** ++ * The buffer pool. This structure is opaque and not meant to be accessed ++ * directly. It is allocated with av_buffer_pool_init() and freed with ++ * av_buffer_pool_uninit(). ++ */ ++typedef struct AVBufferPool AVBufferPool; ++ ++/** ++ * Allocate and initialize a buffer pool. ++ * ++ * @param size size of each buffer in this pool ++ * @param alloc a function that will be used to allocate new buffers when the ++ * pool is empty. May be NULL, then the default allocator will be used ++ * (av_buffer_alloc()). ++ * @return newly created buffer pool on success, NULL on error. ++ */ ++AVBufferPool* av_buffer_pool_init(size_t size, ++ AVBufferRef* (*alloc)(size_t size)); ++ ++/** ++ * Allocate and initialize a buffer pool with a more complex allocator. ++ * ++ * @param size size of each buffer in this pool ++ * @param opaque arbitrary user data used by the allocator ++ * @param alloc a function that will be used to allocate new buffers when the ++ * pool is empty. May be NULL, then the default allocator will be ++ * used (av_buffer_alloc()). ++ * @param pool_free a function that will be called immediately before the pool ++ * is freed. I.e. after av_buffer_pool_uninit() is called ++ * by the caller and all the frames are returned to the pool ++ * and freed. It is intended to uninitialize the user opaque ++ * data. May be NULL. ++ * @return newly created buffer pool on success, NULL on error. ++ */ ++AVBufferPool* av_buffer_pool_init2(size_t size, void* opaque, ++ AVBufferRef* (*alloc)(void* opaque, ++ size_t size), ++ void (*pool_free)(void* opaque)); ++ ++/** ++ * Mark the pool as being available for freeing. It will actually be freed only ++ * once all the allocated buffers associated with the pool are released. Thus it ++ * is safe to call this function while some of the allocated buffers are still ++ * in use. ++ * ++ * @param pool pointer to the pool to be freed. It will be set to NULL. ++ */ ++void av_buffer_pool_uninit(AVBufferPool** pool); ++ ++/** ++ * Allocate a new AVBuffer, reusing an old buffer from the pool when available. ++ * This function may be called simultaneously from multiple threads. ++ * ++ * @return a reference to the new buffer on success, NULL on error. ++ */ ++AVBufferRef* av_buffer_pool_get(AVBufferPool* pool); ++ ++/** ++ * Query the original opaque parameter of an allocated buffer in the pool. ++ * ++ * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. ++ * @return the opaque parameter set by the buffer allocator function of the ++ * buffer pool. ++ * ++ * @note the opaque parameter of ref is used by the buffer pool implementation, ++ * therefore you have to use this function to access the original opaque ++ * parameter of an allocated buffer. ++ */ ++void* av_buffer_pool_buffer_get_opaque(const AVBufferRef* ref); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_BUFFER_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h 2023-04-06 12:57:00.771081640 +0200 +@@ -0,0 +1,842 @@ ++/* ++ * Copyright (c) 2006 Michael Niedermayer ++ * Copyright (c) 2008 Peter Ross ++ * ++ * 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 ++ */ ++ ++#ifndef AVUTIL_CHANNEL_LAYOUT_H ++#define AVUTIL_CHANNEL_LAYOUT_H ++ ++#include ++#include ++ ++#include "version.h" ++#include "attributes.h" ++ ++/** ++ * @file ++ * @ingroup lavu_audio_channels ++ * Public libavutil channel layout APIs header. ++ */ ++ ++/** ++ * @defgroup lavu_audio_channels Audio channels ++ * @ingroup lavu_audio ++ * ++ * Audio channel layout utility functions ++ * ++ * @{ ++ */ ++ ++enum AVChannel { ++ ///< Invalid channel index ++ AV_CHAN_NONE = -1, ++ AV_CHAN_FRONT_LEFT, ++ AV_CHAN_FRONT_RIGHT, ++ AV_CHAN_FRONT_CENTER, ++ AV_CHAN_LOW_FREQUENCY, ++ AV_CHAN_BACK_LEFT, ++ AV_CHAN_BACK_RIGHT, ++ AV_CHAN_FRONT_LEFT_OF_CENTER, ++ AV_CHAN_FRONT_RIGHT_OF_CENTER, ++ AV_CHAN_BACK_CENTER, ++ AV_CHAN_SIDE_LEFT, ++ AV_CHAN_SIDE_RIGHT, ++ AV_CHAN_TOP_CENTER, ++ AV_CHAN_TOP_FRONT_LEFT, ++ AV_CHAN_TOP_FRONT_CENTER, ++ AV_CHAN_TOP_FRONT_RIGHT, ++ AV_CHAN_TOP_BACK_LEFT, ++ AV_CHAN_TOP_BACK_CENTER, ++ AV_CHAN_TOP_BACK_RIGHT, ++ /** Stereo downmix. */ ++ AV_CHAN_STEREO_LEFT = 29, ++ /** See above. */ ++ AV_CHAN_STEREO_RIGHT, ++ AV_CHAN_WIDE_LEFT, ++ AV_CHAN_WIDE_RIGHT, ++ AV_CHAN_SURROUND_DIRECT_LEFT, ++ AV_CHAN_SURROUND_DIRECT_RIGHT, ++ AV_CHAN_LOW_FREQUENCY_2, ++ AV_CHAN_TOP_SIDE_LEFT, ++ AV_CHAN_TOP_SIDE_RIGHT, ++ AV_CHAN_BOTTOM_FRONT_CENTER, ++ AV_CHAN_BOTTOM_FRONT_LEFT, ++ AV_CHAN_BOTTOM_FRONT_RIGHT, ++ ++ /** Channel is empty can be safely skipped. */ ++ AV_CHAN_UNUSED = 0x200, ++ ++ /** Channel contains data, but its position is unknown. */ ++ AV_CHAN_UNKNOWN = 0x300, ++ ++ /** ++ * Range of channels between AV_CHAN_AMBISONIC_BASE and ++ * AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system. ++ * ++ * Given a channel id `` between AV_CHAN_AMBISONIC_BASE and ++ * AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `` is ++ * ` = - AV_CHAN_AMBISONIC_BASE`. ++ * ++ * @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel ++ * orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels ++ * implicitly by their position in the stream. ++ */ ++ AV_CHAN_AMBISONIC_BASE = 0x400, ++ // leave space for 1024 ids, which correspond to maximum order-32 harmonics, ++ // which should be enough for the foreseeable use cases ++ AV_CHAN_AMBISONIC_END = 0x7ff, ++}; ++ ++enum AVChannelOrder { ++ /** ++ * Only the channel count is specified, without any further information ++ * about the channel order. ++ */ ++ AV_CHANNEL_ORDER_UNSPEC, ++ /** ++ * The native channel order, i.e. the channels are in the same order in ++ * which they are defined in the AVChannel enum. This supports up to 63 ++ * different channels. ++ */ ++ AV_CHANNEL_ORDER_NATIVE, ++ /** ++ * The channel order does not correspond to any other predefined order and ++ * is stored as an explicit map. For example, this could be used to support ++ * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE) ++ * channels at arbitrary positions. ++ */ ++ AV_CHANNEL_ORDER_CUSTOM, ++ /** ++ * The audio is represented as the decomposition of the sound field into ++ * spherical harmonics. Each channel corresponds to a single expansion ++ * component. Channels are ordered according to ACN (Ambisonic Channel ++ * Number). ++ * ++ * The channel with the index n in the stream contains the spherical ++ * harmonic of degree l and order m given by ++ * @code{.unparsed} ++ * l = floor(sqrt(n)), ++ * m = n - l * (l + 1). ++ * @endcode ++ * ++ * Conversely given a spherical harmonic of degree l and order m, the ++ * corresponding channel index n is given by ++ * @code{.unparsed} ++ * n = l * (l + 1) + m. ++ * @endcode ++ * ++ * Normalization is assumed to be SN3D (Schmidt Semi-Normalization) ++ * as defined in AmbiX format $ 2.1. ++ */ ++ AV_CHANNEL_ORDER_AMBISONIC, ++}; ++ ++/** ++ * @defgroup channel_masks Audio channel masks ++ * ++ * A channel layout is a 64-bits integer with a bit set for every channel. ++ * The number of bits set must be equal to the number of channels. ++ * The value 0 means that the channel layout is not known. ++ * @note this data structure is not powerful enough to handle channels ++ * combinations that have the same channel multiple times, such as ++ * dual-mono. ++ * ++ * @{ ++ */ ++#define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT) ++#define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT) ++#define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER) ++#define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY) ++#define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT) ++#define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT) ++#define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER) ++#define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER) ++#define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT) ++#define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT) ++#define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER) ++#define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT) ++#define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER) ++#define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT) ++#define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT) ++#define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER) ++#define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT) ++#define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT) ++#define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT) ++#define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT) ++#define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT) ++#define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT) ++#define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT) ++#define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2) ++#define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT) ++#define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT) ++#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER) ++#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT) ++#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT) ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++/** Channel mask value used for AVCodecContext.request_channel_layout ++ to indicate that the user requests the channel order of the decoder output ++ to be the native codec channel order. ++ @deprecated channel order is now indicated in a special field in ++ AVChannelLayout ++ */ ++# define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL ++#endif ++ ++/** ++ * @} ++ * @defgroup channel_mask_c Audio channel layouts ++ * @{ ++ * */ ++#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) ++#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT) ++#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO | AV_CH_LOW_FREQUENCY) ++#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER) ++#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER) ++#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY) ++#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND | AV_CH_BACK_CENTER) ++#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0 | AV_CH_LOW_FREQUENCY) ++#define AV_CH_LAYOUT_2_2 \ ++ (AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT) ++#define AV_CH_LAYOUT_QUAD \ ++ (AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) ++#define AV_CH_LAYOUT_5POINT0 \ ++ (AV_CH_LAYOUT_SURROUND | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT) ++#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0 | AV_CH_LOW_FREQUENCY) ++#define AV_CH_LAYOUT_5POINT0_BACK \ ++ (AV_CH_LAYOUT_SURROUND | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) ++#define AV_CH_LAYOUT_5POINT1_BACK \ ++ (AV_CH_LAYOUT_5POINT0_BACK | AV_CH_LOW_FREQUENCY) ++#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_CENTER) ++#define AV_CH_LAYOUT_6POINT0_FRONT \ ++ (AV_CH_LAYOUT_2_2 | AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK | AV_CH_BACK_CENTER) ++#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1 | AV_CH_BACK_CENTER) ++#define AV_CH_LAYOUT_6POINT1_BACK \ ++ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_BACK_CENTER) ++#define AV_CH_LAYOUT_6POINT1_FRONT \ ++ (AV_CH_LAYOUT_6POINT0_FRONT | AV_CH_LOW_FREQUENCY) ++#define AV_CH_LAYOUT_7POINT0 \ ++ (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) ++#define AV_CH_LAYOUT_7POINT0_FRONT \ ++ (AV_CH_LAYOUT_5POINT0 | AV_CH_FRONT_LEFT_OF_CENTER | \ ++ AV_CH_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_LAYOUT_7POINT1 \ ++ (AV_CH_LAYOUT_5POINT1 | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) ++#define AV_CH_LAYOUT_7POINT1_WIDE \ ++ (AV_CH_LAYOUT_5POINT1 | AV_CH_FRONT_LEFT_OF_CENTER | \ ++ AV_CH_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_LAYOUT_7POINT1_WIDE_BACK \ ++ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_FRONT_LEFT_OF_CENTER | \ ++ AV_CH_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_LAYOUT_7POINT1_TOP_BACK \ ++ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT) ++#define AV_CH_LAYOUT_OCTAGONAL \ ++ (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_LEFT | AV_CH_BACK_CENTER | \ ++ AV_CH_BACK_RIGHT) ++#define AV_CH_LAYOUT_CUBE \ ++ (AV_CH_LAYOUT_QUAD | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT | \ ++ AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT) ++#define AV_CH_LAYOUT_HEXADECAGONAL \ ++ (AV_CH_LAYOUT_OCTAGONAL | AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT | \ ++ AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT | AV_CH_TOP_BACK_CENTER | \ ++ AV_CH_TOP_FRONT_CENTER | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT) ++#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT) ++#define AV_CH_LAYOUT_22POINT2 \ ++ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_FRONT_LEFT_OF_CENTER | \ ++ AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_BACK_CENTER | AV_CH_LOW_FREQUENCY_2 | \ ++ AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT | AV_CH_TOP_FRONT_LEFT | \ ++ AV_CH_TOP_FRONT_RIGHT | AV_CH_TOP_FRONT_CENTER | AV_CH_TOP_CENTER | \ ++ AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT | AV_CH_TOP_SIDE_LEFT | \ ++ AV_CH_TOP_SIDE_RIGHT | AV_CH_TOP_BACK_CENTER | AV_CH_BOTTOM_FRONT_CENTER | \ ++ AV_CH_BOTTOM_FRONT_LEFT | AV_CH_BOTTOM_FRONT_RIGHT) ++ ++enum AVMatrixEncoding { ++ AV_MATRIX_ENCODING_NONE, ++ AV_MATRIX_ENCODING_DOLBY, ++ AV_MATRIX_ENCODING_DPLII, ++ AV_MATRIX_ENCODING_DPLIIX, ++ AV_MATRIX_ENCODING_DPLIIZ, ++ AV_MATRIX_ENCODING_DOLBYEX, ++ AV_MATRIX_ENCODING_DOLBYHEADPHONE, ++ AV_MATRIX_ENCODING_NB ++}; ++ ++/** ++ * @} ++ */ ++ ++/** ++ * An AVChannelCustom defines a single channel within a custom order layout ++ * ++ * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the ++ * public ABI. ++ * ++ * No new fields may be added to it without a major version bump. ++ */ ++typedef struct AVChannelCustom { ++ enum AVChannel id; ++ char name[16]; ++ void* opaque; ++} AVChannelCustom; ++ ++/** ++ * An AVChannelLayout holds information about the channel layout of audio data. ++ * ++ * A channel layout here is defined as a set of channels ordered in a specific ++ * way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an ++ * AVChannelLayout carries only the channel count). ++ * All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by ++ * ignoring everything but the channel count, as long as ++ * av_channel_layout_check() considers they are valid. ++ * ++ * Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the ++ * public ABI and may be used by the caller. E.g. it may be allocated on stack ++ * or embedded in caller-defined structs. ++ * ++ * AVChannelLayout can be initialized as follows: ++ * - default initialization with {0}, followed by setting all used fields ++ * correctly; ++ * - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers; ++ * - with a constructor function, such as av_channel_layout_default(), ++ * av_channel_layout_from_mask() or av_channel_layout_from_string(). ++ * ++ * The channel layout must be unitialized with av_channel_layout_uninit() ++ * ++ * Copying an AVChannelLayout via assigning is forbidden, ++ * av_channel_layout_copy() must be used instead (and its return value should ++ * be checked) ++ * ++ * No new fields may be added to it without a major version bump, except for ++ * new elements of the union fitting in sizeof(uint64_t). ++ */ ++typedef struct AVChannelLayout { ++ /** ++ * Channel order used in this layout. ++ * This is a mandatory field. ++ */ ++ enum AVChannelOrder order; ++ ++ /** ++ * Number of channels in this layout. Mandatory field. ++ */ ++ int nb_channels; ++ ++ /** ++ * Details about which channels are present in this layout. ++ * For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be ++ * used. ++ */ ++ union { ++ /** ++ * This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used ++ * for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels. ++ * It is a bitmask, where the position of each set bit means that the ++ * AVChannel with the corresponding value is present. ++ * ++ * I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO ++ * is present in the layout. Otherwise it is not present. ++ * ++ * @note when a channel layout using a bitmask is constructed or ++ * modified manually (i.e. not using any of the av_channel_layout_* ++ * functions), the code doing it must ensure that the number of set bits ++ * is equal to nb_channels. ++ */ ++ uint64_t mask; ++ /** ++ * This member must be used when the channel order is ++ * AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each ++ * element signalling the presence of the AVChannel with the ++ * corresponding value in map[i].id. ++ * ++ * I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the ++ * i-th channel in the audio data. ++ * ++ * When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and ++ * AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic ++ * component with ACN index (as defined above) ++ * n = map[i].id - AV_CHAN_AMBISONIC_BASE. ++ * ++ * map[i].name may be filled with a 0-terminated string, in which case ++ * it will be used for the purpose of identifying the channel with the ++ * convenience functions below. Otherise it must be zeroed. ++ */ ++ AVChannelCustom* map; ++ } u; ++ ++ /** ++ * For some private data of the user. ++ */ ++ void* opaque; ++} AVChannelLayout; ++ ++#define AV_CHANNEL_LAYOUT_MASK(nb, m) \ ++ { \ ++ .order = AV_CHANNEL_ORDER_NATIVE, .nb_channels = (nb), .u = {.mask = (m) } \ ++ } ++ ++/** ++ * @name Common pre-defined channel layouts ++ * @{ ++ */ ++#define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) ++#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO) ++#define AV_CHANNEL_LAYOUT_2POINT1 \ ++ AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1) ++#define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1) ++#define AV_CHANNEL_LAYOUT_SURROUND \ ++ AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND) ++#define AV_CHANNEL_LAYOUT_3POINT1 \ ++ AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1) ++#define AV_CHANNEL_LAYOUT_4POINT0 \ ++ AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0) ++#define AV_CHANNEL_LAYOUT_4POINT1 \ ++ AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1) ++#define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2) ++#define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD) ++#define AV_CHANNEL_LAYOUT_5POINT0 \ ++ AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0) ++#define AV_CHANNEL_LAYOUT_5POINT1 \ ++ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1) ++#define AV_CHANNEL_LAYOUT_5POINT0_BACK \ ++ AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK) ++#define AV_CHANNEL_LAYOUT_5POINT1_BACK \ ++ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK) ++#define AV_CHANNEL_LAYOUT_6POINT0 \ ++ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0) ++#define AV_CHANNEL_LAYOUT_6POINT0_FRONT \ ++ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT) ++#define AV_CHANNEL_LAYOUT_HEXAGONAL \ ++ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL) ++#define AV_CHANNEL_LAYOUT_6POINT1 \ ++ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1) ++#define AV_CHANNEL_LAYOUT_6POINT1_BACK \ ++ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK) ++#define AV_CHANNEL_LAYOUT_6POINT1_FRONT \ ++ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT) ++#define AV_CHANNEL_LAYOUT_7POINT0 \ ++ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0) ++#define AV_CHANNEL_LAYOUT_7POINT0_FRONT \ ++ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT) ++#define AV_CHANNEL_LAYOUT_7POINT1 \ ++ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1) ++#define AV_CHANNEL_LAYOUT_7POINT1_WIDE \ ++ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE) ++#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK \ ++ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK) ++#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK \ ++ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK) ++#define AV_CHANNEL_LAYOUT_OCTAGONAL \ ++ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL) ++#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) ++#define AV_CHANNEL_LAYOUT_HEXADECAGONAL \ ++ AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL) ++#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX \ ++ AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX) ++#define AV_CHANNEL_LAYOUT_22POINT2 \ ++ AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2) ++#define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \ ++ { \ ++ .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = 4, .u = {.mask = 0 } \ ++ } ++/** @} */ ++ ++struct AVBPrint; ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++/** ++ * @name Deprecated Functions ++ * @{ ++ */ ++ ++/** ++ * Return a channel layout id that matches name, or 0 if no match is found. ++ * ++ * name can be one or several of the following notations, ++ * separated by '+' or '|': ++ * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, ++ * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); ++ * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, ++ * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); ++ * - a number of channels, in decimal, followed by 'c', yielding ++ * the default channel layout for that number of channels (@see ++ * av_get_default_channel_layout); ++ * - a channel layout mask, in hexadecimal starting with "0x" (see the ++ * AV_CH_* macros). ++ * ++ * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" ++ * ++ * @deprecated use av_channel_layout_from_string() ++ */ ++attribute_deprecated uint64_t av_get_channel_layout(const char* name); ++ ++/** ++ * Return a channel layout and the number of channels based on the specified ++ * name. ++ * ++ * This function is similar to (@see av_get_channel_layout), but can also parse ++ * unknown channel layout specifications. ++ * ++ * @param[in] name channel layout specification string ++ * @param[out] channel_layout parsed channel layout (0 if unknown) ++ * @param[out] nb_channels number of channels ++ * ++ * @return 0 on success, AVERROR(EINVAL) if the parsing fails. ++ * @deprecated use av_channel_layout_from_string() ++ */ ++attribute_deprecated int av_get_extended_channel_layout( ++ const char* name, uint64_t* channel_layout, int* nb_channels); ++ ++/** ++ * Return a description of a channel layout. ++ * If nb_channels is <= 0, it is guessed from the channel_layout. ++ * ++ * @param buf put here the string containing the channel layout ++ * @param buf_size size in bytes of the buffer ++ * @param nb_channels number of channels ++ * @param channel_layout channel layout bitset ++ * @deprecated use av_channel_layout_describe() ++ */ ++attribute_deprecated void av_get_channel_layout_string(char* buf, int buf_size, ++ int nb_channels, ++ uint64_t channel_layout); ++ ++/** ++ * Append a description of a channel layout to a bprint buffer. ++ * @deprecated use av_channel_layout_describe() ++ */ ++attribute_deprecated void av_bprint_channel_layout(struct AVBPrint* bp, ++ int nb_channels, ++ uint64_t channel_layout); ++ ++/** ++ * Return the number of channels in the channel layout. ++ * @deprecated use AVChannelLayout.nb_channels ++ */ ++attribute_deprecated int av_get_channel_layout_nb_channels( ++ uint64_t channel_layout); ++ ++/** ++ * Return default channel layout for a given number of channels. ++ * ++ * @deprecated use av_channel_layout_default() ++ */ ++attribute_deprecated int64_t av_get_default_channel_layout(int nb_channels); ++ ++/** ++ * Get the index of a channel in channel_layout. ++ * ++ * @param channel_layout channel layout bitset ++ * @param channel a channel layout describing exactly one channel which must be ++ * present in channel_layout. ++ * ++ * @return index of channel in channel_layout on success, a negative AVERROR ++ * on error. ++ * ++ * @deprecated use av_channel_layout_index_from_channel() ++ */ ++attribute_deprecated int av_get_channel_layout_channel_index( ++ uint64_t channel_layout, uint64_t channel); ++ ++/** ++ * Get the channel with the given index in channel_layout. ++ * @deprecated use av_channel_layout_channel_from_index() ++ */ ++attribute_deprecated uint64_t ++av_channel_layout_extract_channel(uint64_t channel_layout, int index); ++ ++/** ++ * Get the name of a given channel. ++ * ++ * @return channel name on success, NULL on error. ++ * ++ * @deprecated use av_channel_name() ++ */ ++attribute_deprecated const char* av_get_channel_name(uint64_t channel); ++ ++/** ++ * Get the description of a given channel. ++ * ++ * @param channel a channel layout with a single channel ++ * @return channel description on success, NULL on error ++ * @deprecated use av_channel_description() ++ */ ++attribute_deprecated const char* av_get_channel_description(uint64_t channel); ++ ++/** ++ * Get the value and name of a standard channel layout. ++ * ++ * @param[in] index index in an internal list, starting at 0 ++ * @param[out] layout channel layout mask ++ * @param[out] name name of the layout ++ * @return 0 if the layout exists, ++ * <0 if index is beyond the limits ++ * @deprecated use av_channel_layout_standard() ++ */ ++attribute_deprecated int av_get_standard_channel_layout(unsigned index, ++ uint64_t* layout, ++ const char** name); ++/** ++ * @} ++ */ ++#endif ++ ++/** ++ * Get a human readable string in an abbreviated form describing a given ++ * channel. This is the inverse function of @ref av_channel_from_string(). ++ * ++ * @param buf pre-allocated buffer where to put the generated string ++ * @param buf_size size in bytes of the buffer. ++ * @param channel the AVChannel whose name to get ++ * @return amount of bytes needed to hold the output string, or a negative ++ * AVERROR on failure. If the returned value is bigger than buf_size, then the ++ * string was truncated. ++ */ ++int av_channel_name(char* buf, size_t buf_size, enum AVChannel channel); ++ ++/** ++ * bprint variant of av_channel_name(). ++ * ++ * @note the string will be appended to the bprint buffer. ++ */ ++void av_channel_name_bprint(struct AVBPrint* bp, enum AVChannel channel_id); ++ ++/** ++ * Get a human readable string describing a given channel. ++ * ++ * @param buf pre-allocated buffer where to put the generated string ++ * @param buf_size size in bytes of the buffer. ++ * @param channel the AVChannel whose description to get ++ * @return amount of bytes needed to hold the output string, or a negative ++ * AVERROR on failure. If the returned value is bigger than buf_size, then the ++ * string was truncated. ++ */ ++int av_channel_description(char* buf, size_t buf_size, enum AVChannel channel); ++ ++/** ++ * bprint variant of av_channel_description(). ++ * ++ * @note the string will be appended to the bprint buffer. ++ */ ++void av_channel_description_bprint(struct AVBPrint* bp, ++ enum AVChannel channel_id); ++ ++/** ++ * This is the inverse function of @ref av_channel_name(). ++ * ++ * @return the channel with the given name ++ * AV_CHAN_NONE when name does not identify a known channel ++ */ ++enum AVChannel av_channel_from_string(const char* name); ++ ++/** ++ * Initialize a native channel layout from a bitmask indicating which channels ++ * are present. ++ * ++ * @param channel_layout the layout structure to be initialized ++ * @param mask bitmask describing the channel layout ++ * ++ * @return 0 on success ++ * AVERROR(EINVAL) for invalid mask values ++ */ ++int av_channel_layout_from_mask(AVChannelLayout* channel_layout, uint64_t mask); ++ ++/** ++ * Initialize a channel layout from a given string description. ++ * The input string can be represented by: ++ * - the formal channel layout name (returned by av_channel_layout_describe()) ++ * - single or multiple channel names (returned by av_channel_name(), eg. "FL", ++ * or concatenated with "+", each optionally containing a custom name after ++ * a "@", eg. "FL@Left+FR@Right+LFE") ++ * - a decimal or hexadecimal value of a native channel layout (eg. "4" or ++ * "0x4") ++ * - the number of channels with default layout (eg. "4c") ++ * - the number of unordered channels (eg. "4C" or "4 channels") ++ * - the ambisonic order followed by optional non-diegetic channels (eg. ++ * "ambisonic 2+stereo") ++ * ++ * @param channel_layout input channel layout ++ * @param str string describing the channel layout ++ * @return 0 channel layout was detected, AVERROR_INVALIDATATA otherwise ++ */ ++int av_channel_layout_from_string(AVChannelLayout* channel_layout, ++ const char* str); ++ ++/** ++ * Get the default channel layout for a given number of channels. ++ * ++ * @param ch_layout the layout structure to be initialized ++ * @param nb_channels number of channels ++ */ ++void av_channel_layout_default(AVChannelLayout* ch_layout, int nb_channels); ++ ++/** ++ * Iterate over all standard channel layouts. ++ * ++ * @param opaque a pointer where libavutil will store the iteration state. Must ++ * point to NULL to start the iteration. ++ * ++ * @return the standard channel layout or NULL when the iteration is ++ * finished ++ */ ++const AVChannelLayout* av_channel_layout_standard(void** opaque); ++ ++/** ++ * Free any allocated data in the channel layout and reset the channel ++ * count to 0. ++ * ++ * @param channel_layout the layout structure to be uninitialized ++ */ ++void av_channel_layout_uninit(AVChannelLayout* channel_layout); ++ ++/** ++ * Make a copy of a channel layout. This differs from just assigning src to dst ++ * in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM. ++ * ++ * @note the destination channel_layout will be always uninitialized before ++ * copy. ++ * ++ * @param dst destination channel layout ++ * @param src source channel layout ++ * @return 0 on success, a negative AVERROR on error. ++ */ ++int av_channel_layout_copy(AVChannelLayout* dst, const AVChannelLayout* src); ++ ++/** ++ * Get a human-readable string describing the channel layout properties. ++ * The string will be in the same format that is accepted by ++ * @ref av_channel_layout_from_string(), allowing to rebuild the same ++ * channel layout, except for opaque pointers. ++ * ++ * @param channel_layout channel layout to be described ++ * @param buf pre-allocated buffer where to put the generated string ++ * @param buf_size size in bytes of the buffer. ++ * @return amount of bytes needed to hold the output string, or a negative ++ * AVERROR on failure. If the returned value is bigger than buf_size, then the ++ * string was truncated. ++ */ ++int av_channel_layout_describe(const AVChannelLayout* channel_layout, char* buf, ++ size_t buf_size); ++ ++/** ++ * bprint variant of av_channel_layout_describe(). ++ * ++ * @note the string will be appended to the bprint buffer. ++ * @return 0 on success, or a negative AVERROR value on failure. ++ */ ++int av_channel_layout_describe_bprint(const AVChannelLayout* channel_layout, ++ struct AVBPrint* bp); ++ ++/** ++ * Get the channel with the given index in a channel layout. ++ * ++ * @param channel_layout input channel layout ++ * @param idx index of the channel ++ * @return channel with the index idx in channel_layout on success or ++ * AV_CHAN_NONE on failure (if idx is not valid or the channel order is ++ * unspecified) ++ */ ++enum AVChannel av_channel_layout_channel_from_index( ++ const AVChannelLayout* channel_layout, unsigned int idx); ++ ++/** ++ * Get the index of a given channel in a channel layout. In case multiple ++ * channels are found, only the first match will be returned. ++ * ++ * @param channel_layout input channel layout ++ * @param channel the channel whose index to obtain ++ * @return index of channel in channel_layout on success or a negative number if ++ * channel is not present in channel_layout. ++ */ ++int av_channel_layout_index_from_channel(const AVChannelLayout* channel_layout, ++ enum AVChannel channel); ++ ++/** ++ * Get the index in a channel layout of a channel described by the given string. ++ * In case multiple channels are found, only the first match will be returned. ++ * ++ * This function accepts channel names in the same format as ++ * @ref av_channel_from_string(). ++ * ++ * @param channel_layout input channel layout ++ * @param name string describing the channel whose index to obtain ++ * @return a channel index described by the given string, or a negative AVERROR ++ * value. ++ */ ++int av_channel_layout_index_from_string(const AVChannelLayout* channel_layout, ++ const char* name); ++ ++/** ++ * Get a channel described by the given string. ++ * ++ * This function accepts channel names in the same format as ++ * @ref av_channel_from_string(). ++ * ++ * @param channel_layout input channel layout ++ * @param name string describing the channel to obtain ++ * @return a channel described by the given string in channel_layout on success ++ * or AV_CHAN_NONE on failure (if the string is not valid or the channel ++ * order is unspecified) ++ */ ++enum AVChannel av_channel_layout_channel_from_string( ++ const AVChannelLayout* channel_layout, const char* name); ++ ++/** ++ * Find out what channels from a given set are present in a channel layout, ++ * without regard for their positions. ++ * ++ * @param channel_layout input channel layout ++ * @param mask a combination of AV_CH_* representing a set of channels ++ * @return a bitfield representing all the channels from mask that are present ++ * in channel_layout ++ */ ++uint64_t av_channel_layout_subset(const AVChannelLayout* channel_layout, ++ uint64_t mask); ++ ++/** ++ * Check whether a channel layout is valid, i.e. can possibly describe audio ++ * data. ++ * ++ * @param channel_layout input channel layout ++ * @return 1 if channel_layout is valid, 0 otherwise. ++ */ ++int av_channel_layout_check(const AVChannelLayout* channel_layout); ++ ++/** ++ * Check whether two channel layouts are semantically the same, i.e. the same ++ * channels are present on the same positions in both. ++ * ++ * If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is ++ * not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC, ++ * they are considered equal iff the channel counts are the same in both. ++ * ++ * @param chl input channel layout ++ * @param chl1 input channel layout ++ * @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative ++ * AVERROR code if one or both are invalid. ++ */ ++int av_channel_layout_compare(const AVChannelLayout* chl, ++ const AVChannelLayout* chl1); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_CHANNEL_LAYOUT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,589 @@ ++/* ++ * copyright (c) 2006 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * common internal and external API header ++ */ ++ ++#ifndef AVUTIL_COMMON_H ++#define AVUTIL_COMMON_H ++ ++#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && \ ++ !defined(UINT64_C) ++# error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "attributes.h" ++#include "macros.h" ++ ++// rounded division & shift ++#define RSHIFT(a, b) \ ++ ((a) > 0 ? ((a) + ((1 << (b)) >> 1)) >> (b) \ ++ : ((a) + ((1 << (b)) >> 1) - 1) >> (b)) ++/* assume b>0 */ ++#define ROUNDED_DIV(a, b) \ ++ (((a) >= 0 ? (a) + ((b) >> 1) : (a) - ((b) >> 1)) / (b)) ++/* Fast a/(1<=0 and b>=0 */ ++#define AV_CEIL_RSHIFT(a, b) \ ++ (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) : ((a) + (1 << (b)) - 1) >> (b)) ++/* Backwards compat. */ ++#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT ++ ++#define FFUDIV(a, b) (((a) > 0 ? (a) : (a) - (b) + 1) / (b)) ++#define FFUMOD(a, b) ((a) - (b)*FFUDIV(a, b)) ++ ++/** ++ * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as ++ * they are not representable as absolute values of their type. This is the same ++ * as with *abs() ++ * @see FFNABS() ++ */ ++#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) ++#define FFSIGN(a) ((a) > 0 ? 1 : -1) ++ ++/** ++ * Negative Absolute value. ++ * this works for all integers of all types. ++ * As with many macros, this evaluates its argument twice, it thus must not have ++ * a sideeffect, that is FFNABS(x++) has undefined behavior. ++ */ ++#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) ++ ++/** ++ * Unsigned Absolute value. ++ * This takes the absolute value of a signed int and returns it as a unsigned. ++ * This also works with INT_MIN which would otherwise not be representable ++ * As with many macros, this evaluates its argument twice. ++ */ ++#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) ++#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) ++ ++/* misc math functions */ ++ ++#ifdef HAVE_AV_CONFIG_H ++# include "config.h" ++# include "intmath.h" ++#endif ++ ++#ifndef av_ceil_log2 ++# define av_ceil_log2 av_ceil_log2_c ++#endif ++#ifndef av_clip ++# define av_clip av_clip_c ++#endif ++#ifndef av_clip64 ++# define av_clip64 av_clip64_c ++#endif ++#ifndef av_clip_uint8 ++# define av_clip_uint8 av_clip_uint8_c ++#endif ++#ifndef av_clip_int8 ++# define av_clip_int8 av_clip_int8_c ++#endif ++#ifndef av_clip_uint16 ++# define av_clip_uint16 av_clip_uint16_c ++#endif ++#ifndef av_clip_int16 ++# define av_clip_int16 av_clip_int16_c ++#endif ++#ifndef av_clipl_int32 ++# define av_clipl_int32 av_clipl_int32_c ++#endif ++#ifndef av_clip_intp2 ++# define av_clip_intp2 av_clip_intp2_c ++#endif ++#ifndef av_clip_uintp2 ++# define av_clip_uintp2 av_clip_uintp2_c ++#endif ++#ifndef av_mod_uintp2 ++# define av_mod_uintp2 av_mod_uintp2_c ++#endif ++#ifndef av_sat_add32 ++# define av_sat_add32 av_sat_add32_c ++#endif ++#ifndef av_sat_dadd32 ++# define av_sat_dadd32 av_sat_dadd32_c ++#endif ++#ifndef av_sat_sub32 ++# define av_sat_sub32 av_sat_sub32_c ++#endif ++#ifndef av_sat_dsub32 ++# define av_sat_dsub32 av_sat_dsub32_c ++#endif ++#ifndef av_sat_add64 ++# define av_sat_add64 av_sat_add64_c ++#endif ++#ifndef av_sat_sub64 ++# define av_sat_sub64 av_sat_sub64_c ++#endif ++#ifndef av_clipf ++# define av_clipf av_clipf_c ++#endif ++#ifndef av_clipd ++# define av_clipd av_clipd_c ++#endif ++#ifndef av_popcount ++# define av_popcount av_popcount_c ++#endif ++#ifndef av_popcount64 ++# define av_popcount64 av_popcount64_c ++#endif ++#ifndef av_parity ++# define av_parity av_parity_c ++#endif ++ ++#ifndef av_log2 ++av_const int av_log2(unsigned v); ++#endif ++ ++#ifndef av_log2_16bit ++av_const int av_log2_16bit(unsigned v); ++#endif ++ ++/** ++ * Clip a signed integer value into the amin-amax range. ++ * @param a value to clip ++ * @param amin minimum value of the clip range ++ * @param amax maximum value of the clip range ++ * @return clipped value ++ */ ++static av_always_inline av_const int av_clip_c(int a, int amin, int amax) { ++#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 ++ if (amin > amax) abort(); ++#endif ++ if (a < amin) ++ return amin; ++ else if (a > amax) ++ return amax; ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed 64bit integer value into the amin-amax range. ++ * @param a value to clip ++ * @param amin minimum value of the clip range ++ * @param amax maximum value of the clip range ++ * @return clipped value ++ */ ++static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, ++ int64_t amax) { ++#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 ++ if (amin > amax) abort(); ++#endif ++ if (a < amin) ++ return amin; ++ else if (a > amax) ++ return amax; ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed integer value into the 0-255 range. ++ * @param a value to clip ++ * @return clipped value ++ */ ++static av_always_inline av_const uint8_t av_clip_uint8_c(int a) { ++ if (a & (~0xFF)) ++ return (~a) >> 31; ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed integer value into the -128,127 range. ++ * @param a value to clip ++ * @return clipped value ++ */ ++static av_always_inline av_const int8_t av_clip_int8_c(int a) { ++ if ((a + 0x80U) & ~0xFF) ++ return (a >> 31) ^ 0x7F; ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed integer value into the 0-65535 range. ++ * @param a value to clip ++ * @return clipped value ++ */ ++static av_always_inline av_const uint16_t av_clip_uint16_c(int a) { ++ if (a & (~0xFFFF)) ++ return (~a) >> 31; ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed integer value into the -32768,32767 range. ++ * @param a value to clip ++ * @return clipped value ++ */ ++static av_always_inline av_const int16_t av_clip_int16_c(int a) { ++ if ((a + 0x8000U) & ~0xFFFF) ++ return (a >> 31) ^ 0x7FFF; ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. ++ * @param a value to clip ++ * @return clipped value ++ */ ++static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) { ++ if ((a + 0x80000000u) & ~UINT64_C(0xFFFFFFFF)) ++ return (int32_t)((a >> 63) ^ 0x7FFFFFFF); ++ else ++ return (int32_t)a; ++} ++ ++/** ++ * Clip a signed integer into the -(2^p),(2^p-1) range. ++ * @param a value to clip ++ * @param p bit position to clip at ++ * @return clipped value ++ */ ++static av_always_inline av_const int av_clip_intp2_c(int a, int p) { ++ if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) ++ return (a >> 31) ^ ((1 << p) - 1); ++ else ++ return a; ++} ++ ++/** ++ * Clip a signed integer to an unsigned power of two range. ++ * @param a value to clip ++ * @param p bit position to clip at ++ * @return clipped value ++ */ ++static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) { ++ if (a & ~((1 << p) - 1)) ++ return (~a) >> 31 & ((1 << p) - 1); ++ else ++ return a; ++} ++ ++/** ++ * Clear high bits from an unsigned integer starting with specific bit position ++ * @param a value to clip ++ * @param p bit position to clip at ++ * @return clipped value ++ */ ++static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, ++ unsigned p) { ++ return a & ((1U << p) - 1); ++} ++ ++/** ++ * Add two signed 32-bit values with saturation. ++ * ++ * @param a one value ++ * @param b another value ++ * @return sum with signed saturation ++ */ ++static av_always_inline int av_sat_add32_c(int a, int b) { ++ return av_clipl_int32((int64_t)a + b); ++} ++ ++/** ++ * Add a doubled value to another value with saturation at both stages. ++ * ++ * @param a first value ++ * @param b value doubled and added to a ++ * @return sum sat(a + sat(2*b)) with signed saturation ++ */ ++static av_always_inline int av_sat_dadd32_c(int a, int b) { ++ return av_sat_add32(a, av_sat_add32(b, b)); ++} ++ ++/** ++ * Subtract two signed 32-bit values with saturation. ++ * ++ * @param a one value ++ * @param b another value ++ * @return difference with signed saturation ++ */ ++static av_always_inline int av_sat_sub32_c(int a, int b) { ++ return av_clipl_int32((int64_t)a - b); ++} ++ ++/** ++ * Subtract a doubled value from another value with saturation at both stages. ++ * ++ * @param a first value ++ * @param b value doubled and subtracted from a ++ * @return difference sat(a - sat(2*b)) with signed saturation ++ */ ++static av_always_inline int av_sat_dsub32_c(int a, int b) { ++ return av_sat_sub32(a, av_sat_add32(b, b)); ++} ++ ++/** ++ * Add two signed 64-bit values with saturation. ++ * ++ * @param a one value ++ * @param b another value ++ * @return sum with signed saturation ++ */ ++static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) { ++#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5, 1)) || \ ++ AV_HAS_BUILTIN(__builtin_add_overflow) ++ int64_t tmp; ++ return !__builtin_add_overflow(a, b, &tmp) ++ ? tmp ++ : (tmp < 0 ? INT64_MAX : INT64_MIN); ++#else ++ int64_t s = a + (uint64_t)b; ++ if ((int64_t)(a ^ b | ~s ^ b) >= 0) return INT64_MAX ^ (b >> 63); ++ return s; ++#endif ++} ++ ++/** ++ * Subtract two signed 64-bit values with saturation. ++ * ++ * @param a one value ++ * @param b another value ++ * @return difference with signed saturation ++ */ ++static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { ++#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5, 1)) || \ ++ AV_HAS_BUILTIN(__builtin_sub_overflow) ++ int64_t tmp; ++ return !__builtin_sub_overflow(a, b, &tmp) ++ ? tmp ++ : (tmp < 0 ? INT64_MAX : INT64_MIN); ++#else ++ if (b <= 0 && a >= INT64_MAX + b) return INT64_MAX; ++ if (b >= 0 && a <= INT64_MIN + b) return INT64_MIN; ++ return a - b; ++#endif ++} ++ ++/** ++ * Clip a float value into the amin-amax range. ++ * If a is nan or -inf amin will be returned. ++ * If a is +inf amax will be returned. ++ * @param a value to clip ++ * @param amin minimum value of the clip range ++ * @param amax maximum value of the clip range ++ * @return clipped value ++ */ ++static av_always_inline av_const float av_clipf_c(float a, float amin, ++ float amax) { ++#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 ++ if (amin > amax) abort(); ++#endif ++ return FFMIN(FFMAX(a, amin), amax); ++} ++ ++/** ++ * Clip a double value into the amin-amax range. ++ * If a is nan or -inf amin will be returned. ++ * If a is +inf amax will be returned. ++ * @param a value to clip ++ * @param amin minimum value of the clip range ++ * @param amax maximum value of the clip range ++ * @return clipped value ++ */ ++static av_always_inline av_const double av_clipd_c(double a, double amin, ++ double amax) { ++#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 ++ if (amin > amax) abort(); ++#endif ++ return FFMIN(FFMAX(a, amin), amax); ++} ++ ++/** Compute ceil(log2(x)). ++ * @param x value used to compute ceil(log2(x)) ++ * @return computed ceiling of log2(x) ++ */ ++static av_always_inline av_const int av_ceil_log2_c(int x) { ++ return av_log2((x - 1U) << 1); ++} ++ ++/** ++ * Count number of bits set to one in x ++ * @param x value to count bits of ++ * @return the number of bits set to one in x ++ */ ++static av_always_inline av_const int av_popcount_c(uint32_t x) { ++ x -= (x >> 1) & 0x55555555; ++ x = (x & 0x33333333) + ((x >> 2) & 0x33333333); ++ x = (x + (x >> 4)) & 0x0F0F0F0F; ++ x += x >> 8; ++ return (x + (x >> 16)) & 0x3F; ++} ++ ++/** ++ * Count number of bits set to one in x ++ * @param x value to count bits of ++ * @return the number of bits set to one in x ++ */ ++static av_always_inline av_const int av_popcount64_c(uint64_t x) { ++ return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); ++} ++ ++static av_always_inline av_const int av_parity_c(uint32_t v) { ++ return av_popcount(v) & 1; ++} ++ ++/** ++ * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. ++ * ++ * @param val Output value, must be an lvalue of type uint32_t. ++ * @param GET_BYTE Expression reading one byte from the input. ++ * Evaluated up to 7 times (4 for the currently ++ * assigned Unicode range). With a memory buffer ++ * input, this could be *ptr++, or if you want to make sure ++ * that *ptr stops at the end of a NULL terminated string then ++ * *ptr ? *ptr++ : 0 ++ * @param ERROR Expression to be evaluated on invalid input, ++ * typically a goto statement. ++ * ++ * @warning ERROR should not contain a loop control statement which ++ * could interact with the internal while loop, and should force an ++ * exit from the macro code (e.g. through a goto or a return) in order ++ * to prevent undefined results. ++ */ ++#define GET_UTF8(val, GET_BYTE, ERROR) \ ++ val = (GET_BYTE); \ ++ { \ ++ uint32_t top = (val & 128) >> 1; \ ++ if ((val & 0xc0) == 0x80 || val >= 0xFE) { \ ++ ERROR \ ++ } \ ++ while (val & top) { \ ++ unsigned int tmp = (GET_BYTE)-128; \ ++ if (tmp >> 6) { \ ++ ERROR \ ++ } \ ++ val = (val << 6) + tmp; \ ++ top <<= 5; \ ++ } \ ++ val &= (top << 1) - 1; \ ++ } ++ ++/** ++ * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. ++ * ++ * @param val Output value, must be an lvalue of type uint32_t. ++ * @param GET_16BIT Expression returning two bytes of UTF-16 data converted ++ * to native byte order. Evaluated one or two times. ++ * @param ERROR Expression to be evaluated on invalid input, ++ * typically a goto statement. ++ */ ++#define GET_UTF16(val, GET_16BIT, ERROR) \ ++ val = (GET_16BIT); \ ++ { \ ++ unsigned int hi = val - 0xD800; \ ++ if (hi < 0x800) { \ ++ val = (GET_16BIT)-0xDC00; \ ++ if (val > 0x3FFU || hi > 0x3FFU) { \ ++ ERROR \ ++ } \ ++ val += (hi << 10) + 0x10000; \ ++ } \ ++ } ++ ++/** ++ * @def PUT_UTF8(val, tmp, PUT_BYTE) ++ * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes ++ * long). ++ * @param val is an input-only argument and should be of type uint32_t. It holds ++ * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If ++ * val is given as a function it is executed only once. ++ * @param tmp is a temporary variable and should be of type uint8_t. It ++ * represents an intermediate value during conversion that is to be ++ * output by PUT_BYTE. ++ * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. ++ * It could be a function or a statement, and uses tmp as the input byte. ++ * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be ++ * executed up to 4 times for values in the valid UTF-8 range and up to ++ * 7 times in the general case, depending on the length of the converted ++ * Unicode character. ++ */ ++#define PUT_UTF8(val, tmp, PUT_BYTE) \ ++ { \ ++ int bytes, shift; \ ++ uint32_t in = val; \ ++ if (in < 0x80) { \ ++ tmp = in; \ ++ PUT_BYTE \ ++ } else { \ ++ bytes = (av_log2(in) + 4) / 5; \ ++ shift = (bytes - 1) * 6; \ ++ tmp = (256 - (256 >> bytes)) | (in >> shift); \ ++ PUT_BYTE \ ++ while (shift >= 6) { \ ++ shift -= 6; \ ++ tmp = 0x80 | ((in >> shift) & 0x3f); \ ++ PUT_BYTE \ ++ } \ ++ } \ ++ } ++ ++/** ++ * @def PUT_UTF16(val, tmp, PUT_16BIT) ++ * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). ++ * @param val is an input-only argument and should be of type uint32_t. It holds ++ * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If ++ * val is given as a function it is executed only once. ++ * @param tmp is a temporary variable and should be of type uint16_t. It ++ * represents an intermediate value during conversion that is to be ++ * output by PUT_16BIT. ++ * @param PUT_16BIT writes the converted UTF-16 data to any proper destination ++ * in desired endianness. It could be a function or a statement, and uses tmp ++ * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" ++ * PUT_BYTE will be executed 1 or 2 times depending on input character. ++ */ ++#define PUT_UTF16(val, tmp, PUT_16BIT) \ ++ { \ ++ uint32_t in = val; \ ++ if (in < 0x10000) { \ ++ tmp = in; \ ++ PUT_16BIT \ ++ } else { \ ++ tmp = 0xD800 | ((in - 0x10000) >> 10); \ ++ PUT_16BIT \ ++ tmp = 0xDC00 | ((in - 0x10000) & 0x3FF); \ ++ PUT_16BIT \ ++ } \ ++ } ++ ++#include "mem.h" ++ ++#ifdef HAVE_AV_CONFIG_H ++# include "internal.h" ++#endif /* HAVE_AV_CONFIG_H */ ++ ++#endif /* AVUTIL_COMMON_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,150 @@ ++/* ++ * Copyright (c) 2000, 2001, 2002 Fabrice Bellard ++ * ++ * 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 ++ */ ++ ++#ifndef AVUTIL_CPU_H ++#define AVUTIL_CPU_H ++ ++#include ++ ++#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ ++ ++/* lower 16 bits - CPU features */ ++#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX ++#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext ++#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext ++#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW ++#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions ++#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions ++#define AV_CPU_FLAG_SSE2SLOW \ ++ 0x40000000 ///< SSE2 supported, but usually not faster ++ ///< than regular MMX/SSE (e.g. Core1) ++#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt ++#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions ++#define AV_CPU_FLAG_SSE3SLOW \ ++ 0x20000000 ///< SSE3 supported, but usually not faster ++ ///< than regular MMX/SSE (e.g. Core1) ++#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions ++#define AV_CPU_FLAG_SSSE3SLOW \ ++ 0x4000000 ///< SSSE3 supported, but usually not faster ++#define AV_CPU_FLAG_ATOM \ ++ 0x10000000 ///< Atom processor, some SSSE3 instructions are slower ++#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions ++#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions ++#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions ++#define AV_CPU_FLAG_AVX \ ++ 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't ++ ///< used ++#define AV_CPU_FLAG_AVXSLOW \ ++ 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. ++ ///< Bulldozer) ++#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions ++#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions ++#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction ++#define AV_CPU_FLAG_AVX2 \ ++ 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't ++ ///< used ++#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions ++#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 ++#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 ++#define AV_CPU_FLAG_AVX512 \ ++ 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM ++ ///< registers aren't used ++#define AV_CPU_FLAG_AVX512ICL \ ++ 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ ++#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers. ++ ++#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard ++#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 ++#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 ++ ++#define AV_CPU_FLAG_ARMV5TE (1 << 0) ++#define AV_CPU_FLAG_ARMV6 (1 << 1) ++#define AV_CPU_FLAG_ARMV6T2 (1 << 2) ++#define AV_CPU_FLAG_VFP (1 << 3) ++#define AV_CPU_FLAG_VFPV3 (1 << 4) ++#define AV_CPU_FLAG_NEON (1 << 5) ++#define AV_CPU_FLAG_ARMV8 (1 << 6) ++#define AV_CPU_FLAG_VFP_VM \ ++ (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in ++ ///< various CPUs implementations ++#define AV_CPU_FLAG_SETEND (1 << 16) ++ ++#define AV_CPU_FLAG_MMI (1 << 0) ++#define AV_CPU_FLAG_MSA (1 << 1) ++ ++// Loongarch SIMD extension. ++#define AV_CPU_FLAG_LSX (1 << 0) ++#define AV_CPU_FLAG_LASX (1 << 1) ++ ++// RISC-V extensions ++#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank) ++#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP) ++#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP) ++#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */ ++#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */ ++#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */ ++#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's ++#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations ++ ++/** ++ * Return the flags which specify extensions supported by the CPU. ++ * The returned value is affected by av_force_cpu_flags() if that was used ++ * before. So av_get_cpu_flags() can easily be used in an application to ++ * detect the enabled cpu flags. ++ */ ++int av_get_cpu_flags(void); ++ ++/** ++ * Disables cpu detection and forces the specified flags. ++ * -1 is a special case that disables forcing of specific flags. ++ */ ++void av_force_cpu_flags(int flags); ++ ++/** ++ * Parse CPU caps from a string and update the given AV_CPU_* flags based on ++ * that. ++ * ++ * @return negative on error. ++ */ ++int av_parse_cpu_caps(unsigned* flags, const char* s); ++ ++/** ++ * @return the number of logical CPU cores present. ++ */ ++int av_cpu_count(void); ++ ++/** ++ * Overrides cpu count detection and forces the specified count. ++ * Count < 1 disables forcing of specific count. ++ */ ++void av_cpu_force_count(int count); ++ ++/** ++ * Get the maximum data alignment that may be required by FFmpeg. ++ * ++ * Note that this is affected by the build configuration and the CPU flags mask, ++ * so e.g. if the CPU supports AVX, but libavutil has been built with ++ * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through ++ * av_set_cpu_flags_mask(), then this function will behave as if AVX is not ++ * present. ++ */ ++size_t av_cpu_max_align(void); ++ ++#endif /* AVUTIL_CPU_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,259 @@ ++/* ++ * 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 ++ */ ++ ++/** ++ * @file ++ * Public dictionary API. ++ * @deprecated ++ * AVDictionary is provided for compatibility with libav. It is both in ++ * implementation as well as API inefficient. It does not scale and is ++ * extremely slow with large dictionaries. ++ * It is recommended that new code uses our tree container from tree.c/h ++ * where applicable, which uses AVL trees to achieve O(log n) performance. ++ */ ++ ++#ifndef AVUTIL_DICT_H ++#define AVUTIL_DICT_H ++ ++#include ++ ++/** ++ * @addtogroup lavu_dict AVDictionary ++ * @ingroup lavu_data ++ * ++ * @brief Simple key:value store ++ * ++ * @{ ++ * Dictionaries are used for storing key-value pairs. ++ * ++ * - To **create an AVDictionary**, simply pass an address of a NULL ++ * pointer to av_dict_set(). NULL can be used as an empty dictionary ++ * wherever a pointer to an AVDictionary is required. ++ * - To **insert an entry**, use av_dict_set(). ++ * - Use av_dict_get() to **retrieve an entry**. ++ * - To **iterate over all entries**, use av_dict_iterate(). ++ * - In order to **free the dictionary and all its contents**, use ++ av_dict_free(). ++ * ++ @code ++ AVDictionary *d = NULL; // "create" an empty dictionary ++ AVDictionaryEntry *t = NULL; ++ ++ av_dict_set(&d, "foo", "bar", 0); // add an entry ++ ++ char *k = av_strdup("key"); // if your strings are already allocated, ++ char *v = av_strdup("value"); // you can avoid copying them like this ++ av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); ++ ++ while ((t = av_dict_iterate(d, t))) { ++ <....> // iterate over all entries in d ++ } ++ av_dict_free(&d); ++ @endcode ++ */ ++ ++/** ++ * @name AVDictionary Flags ++ * Flags that influence behavior of the matching of keys or insertion to the ++ * dictionary. ++ * @{ ++ */ ++#define AV_DICT_MATCH_CASE \ ++ 1 /**< Only get an entry with exact-case key match. Only relevant in \ ++ av_dict_get(). */ ++#define AV_DICT_IGNORE_SUFFIX \ ++ 2 /**< Return first entry in a dictionary whose first part corresponds to \ ++ the search key, ignoring the suffix of the found key string. Only \ ++ relevant in av_dict_get(). */ ++#define AV_DICT_DONT_STRDUP_KEY \ ++ 4 /**< Take ownership of a key that's been \ ++ allocated with av_malloc() or another memory allocation function. */ ++#define AV_DICT_DONT_STRDUP_VAL \ ++ 8 /**< Take ownership of a value that's been \ ++ allocated with av_malloc() or another memory allocation function. */ ++#define AV_DICT_DONT_OVERWRITE 16 /**< Don't overwrite existing entries. */ ++#define AV_DICT_APPEND \ ++ 32 /**< If the entry already exists, append to it. Note that no \ ++ delimiter is added, the strings are simply concatenated. */ ++#define AV_DICT_MULTIKEY \ ++ 64 /**< Allow to store several equal keys in the dictionary */ ++/** ++ * @} ++ */ ++ ++typedef struct AVDictionaryEntry { ++ char* key; ++ char* value; ++} AVDictionaryEntry; ++ ++typedef struct AVDictionary AVDictionary; ++ ++/** ++ * Get a dictionary entry with matching key. ++ * ++ * The returned entry key or value must not be changed, or it will ++ * cause undefined behavior. ++ * ++ * @param prev Set to the previous matching element to find the next. ++ * If set to NULL the first matching element is returned. ++ * @param key Matching key ++ * @param flags A collection of AV_DICT_* flags controlling how the ++ * entry is retrieved ++ * ++ * @return Found entry or NULL in case no matching entry was found in the ++ * dictionary ++ */ ++AVDictionaryEntry* av_dict_get(const AVDictionary* m, const char* key, ++ const AVDictionaryEntry* prev, int flags); ++ ++/** ++ * Iterate over a dictionary ++ * ++ * Iterates through all entries in the dictionary. ++ * ++ * @warning The returned AVDictionaryEntry key/value must not be changed. ++ * ++ * @warning As av_dict_set() invalidates all previous entries returned ++ * by this function, it must not be called while iterating over the dict. ++ * ++ * Typical usage: ++ * @code ++ * const AVDictionaryEntry *e = NULL; ++ * while ((e = av_dict_iterate(m, e))) { ++ * // ... ++ * } ++ * @endcode ++ * ++ * @param m The dictionary to iterate over ++ * @param prev Pointer to the previous AVDictionaryEntry, NULL initially ++ * ++ * @retval AVDictionaryEntry* The next element in the dictionary ++ * @retval NULL No more elements in the dictionary ++ */ ++const AVDictionaryEntry* av_dict_iterate(const AVDictionary* m, ++ const AVDictionaryEntry* prev); ++ ++/** ++ * Get number of entries in dictionary. ++ * ++ * @param m dictionary ++ * @return number of entries in dictionary ++ */ ++int av_dict_count(const AVDictionary* m); ++ ++/** ++ * Set the given entry in *pm, overwriting an existing entry. ++ * ++ * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, ++ * these arguments will be freed on error. ++ * ++ * @warning Adding a new entry to a dictionary invalidates all existing entries ++ * previously returned with av_dict_get() or av_dict_iterate(). ++ * ++ * @param pm Pointer to a pointer to a dictionary struct. If *pm is NULL ++ * a dictionary struct is allocated and put in *pm. ++ * @param key Entry key to add to *pm (will either be av_strduped or added ++ * as a new key depending on flags) ++ * @param value Entry value to add to *pm (will be av_strduped or added as a ++ * new key depending on flags). Passing a NULL value will cause an existing ++ * entry to be deleted. ++ * ++ * @return >= 0 on success otherwise an error code <0 ++ */ ++int av_dict_set(AVDictionary** pm, const char* key, const char* value, ++ int flags); ++ ++/** ++ * Convenience wrapper for av_dict_set() that converts the value to a string ++ * and stores it. ++ * ++ * Note: If ::AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. ++ */ ++int av_dict_set_int(AVDictionary** pm, const char* key, int64_t value, ++ int flags); ++ ++/** ++ * Parse the key/value pairs list and add the parsed entries to a dictionary. ++ * ++ * In case of failure, all the successfully set entries are stored in ++ * *pm. You may need to manually free the created dictionary. ++ * ++ * @param key_val_sep A 0-terminated list of characters used to separate ++ * key from value ++ * @param pairs_sep A 0-terminated list of characters used to separate ++ * two pairs from each other ++ * @param flags Flags to use when adding to the dictionary. ++ * ::AV_DICT_DONT_STRDUP_KEY and ::AV_DICT_DONT_STRDUP_VAL ++ * are ignored since the key/value tokens will always ++ * be duplicated. ++ * ++ * @return 0 on success, negative AVERROR code on failure ++ */ ++int av_dict_parse_string(AVDictionary** pm, const char* str, ++ const char* key_val_sep, const char* pairs_sep, ++ int flags); ++ ++/** ++ * Copy entries from one AVDictionary struct into another. ++ * ++ * @note Metadata is read using the ::AV_DICT_IGNORE_SUFFIX flag ++ * ++ * @param dst Pointer to a pointer to a AVDictionary struct to copy into. If ++ * *dst is NULL, this function will allocate a struct for you and put it in *dst ++ * @param src Pointer to the source AVDictionary struct to copy items from. ++ * @param flags Flags to use when setting entries in *dst ++ * ++ * @return 0 on success, negative AVERROR code on failure. If dst was allocated ++ * by this function, callers should free the associated memory. ++ */ ++int av_dict_copy(AVDictionary** dst, const AVDictionary* src, int flags); ++ ++/** ++ * Free all the memory allocated for an AVDictionary struct ++ * and all keys and values. ++ */ ++void av_dict_free(AVDictionary** m); ++ ++/** ++ * Get dictionary entries as a string. ++ * ++ * Create a string containing dictionary's entries. ++ * Such string may be passed back to av_dict_parse_string(). ++ * @note String is escaped with backslashes ('\'). ++ * ++ * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the ++ * same. ++ * ++ * @param[in] m The dictionary ++ * @param[out] buffer Pointer to buffer that will be allocated with ++ * string containg entries. Buffer must be freed by the caller when is no longer ++ * needed. ++ * @param[in] key_val_sep Character used to separate key from value ++ * @param[in] pairs_sep Character used to separate two pairs from each ++ * other ++ * ++ * @return >= 0 on success, negative on error ++ */ ++int av_dict_get_string(const AVDictionary* m, char** buffer, ++ const char key_val_sep, const char pairs_sep); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_DICT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,158 @@ ++/* ++ * 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 ++ */ ++ ++/** ++ * @file ++ * error code definitions ++ */ ++ ++#ifndef AVUTIL_ERROR_H ++#define AVUTIL_ERROR_H ++ ++#include ++#include ++ ++#include "macros.h" ++ ++/** ++ * @addtogroup lavu_error ++ * ++ * @{ ++ */ ++ ++/* error handling */ ++#if EDOM > 0 ++# define AVERROR(e) \ ++ (-(e)) ///< Returns a negative error code from a POSIX error code, to ++ ///< return from library functions. ++# define AVUNERROR(e) \ ++ (-(e)) ///< Returns a POSIX error code from a library function error return ++ ///< value. ++#else ++/* Some platforms have E* and errno already negated. */ ++# define AVERROR(e) (e) ++# define AVUNERROR(e) (e) ++#endif ++ ++#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) ++ ++#define AVERROR_BSF_NOT_FOUND \ ++ FFERRTAG(0xF8, 'B', 'S', 'F') ///< Bitstream filter not found ++#define AVERROR_BUG \ ++ FFERRTAG('B', 'U', 'G', '!') ///< Internal bug, also see AVERROR_BUG2 ++#define AVERROR_BUFFER_TOO_SMALL \ ++ FFERRTAG('B', 'U', 'F', 'S') ///< Buffer too small ++#define AVERROR_DECODER_NOT_FOUND \ ++ FFERRTAG(0xF8, 'D', 'E', 'C') ///< Decoder not found ++#define AVERROR_DEMUXER_NOT_FOUND \ ++ FFERRTAG(0xF8, 'D', 'E', 'M') ///< Demuxer not found ++#define AVERROR_ENCODER_NOT_FOUND \ ++ FFERRTAG(0xF8, 'E', 'N', 'C') ///< Encoder not found ++#define AVERROR_EOF FFERRTAG('E', 'O', 'F', ' ') ///< End of file ++#define AVERROR_EXIT \ ++ FFERRTAG('E', 'X', 'I', 'T') ///< Immediate exit was requested; the called ++ ///< function should not be restarted ++#define AVERROR_EXTERNAL \ ++ FFERRTAG('E', 'X', 'T', ' ') ///< Generic error in an external library ++#define AVERROR_FILTER_NOT_FOUND \ ++ FFERRTAG(0xF8, 'F', 'I', 'L') ///< Filter not found ++#define AVERROR_INVALIDDATA \ ++ FFERRTAG('I', 'N', 'D', 'A') ///< Invalid data found when processing input ++#define AVERROR_MUXER_NOT_FOUND \ ++ FFERRTAG(0xF8, 'M', 'U', 'X') ///< Muxer not found ++#define AVERROR_OPTION_NOT_FOUND \ ++ FFERRTAG(0xF8, 'O', 'P', 'T') ///< Option not found ++#define AVERROR_PATCHWELCOME \ ++ FFERRTAG('P', 'A', 'W', \ ++ 'E') ///< Not yet implemented in FFmpeg, patches welcome ++#define AVERROR_PROTOCOL_NOT_FOUND \ ++ FFERRTAG(0xF8, 'P', 'R', 'O') ///< Protocol not found ++ ++#define AVERROR_STREAM_NOT_FOUND \ ++ FFERRTAG(0xF8, 'S', 'T', 'R') ///< Stream not found ++/** ++ * This is semantically identical to AVERROR_BUG ++ * it has been introduced in Libav after our AVERROR_BUG and with a modified ++ * value. ++ */ ++#define AVERROR_BUG2 FFERRTAG('B', 'U', 'G', ' ') ++#define AVERROR_UNKNOWN \ ++ FFERRTAG('U', 'N', 'K', \ ++ 'N') ///< Unknown error, typically from an external library ++#define AVERROR_EXPERIMENTAL \ ++ (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set ++ ///< strict_std_compliance if you really want to use it. ++#define AVERROR_INPUT_CHANGED \ ++ (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. ++ ///< (can be OR-ed with AVERROR_OUTPUT_CHANGED) ++#define AVERROR_OUTPUT_CHANGED \ ++ (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. ++ ///< (can be OR-ed with AVERROR_INPUT_CHANGED) ++/* HTTP & RTSP errors */ ++#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8, '4', '0', '0') ++#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8, '4', '0', '1') ++#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8, '4', '0', '3') ++#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8, '4', '0', '4') ++#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8, '4', 'X', 'X') ++#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8, '5', 'X', 'X') ++ ++#define AV_ERROR_MAX_STRING_SIZE 64 ++ ++/** ++ * Put a description of the AVERROR code errnum in errbuf. ++ * In case of failure the global variable errno is set to indicate the ++ * error. Even in case of failure av_strerror() will print a generic ++ * error message indicating the errnum provided to errbuf. ++ * ++ * @param errnum error code to describe ++ * @param errbuf buffer to which description is written ++ * @param errbuf_size the size in bytes of errbuf ++ * @return 0 on success, a negative value if a description for errnum ++ * cannot be found ++ */ ++int av_strerror(int errnum, char* errbuf, size_t errbuf_size); ++ ++/** ++ * Fill the provided buffer with a string containing an error string ++ * corresponding to the AVERROR code errnum. ++ * ++ * @param errbuf a buffer ++ * @param errbuf_size size in bytes of errbuf ++ * @param errnum error code to describe ++ * @return the buffer in input, filled with the error description ++ * @see av_strerror() ++ */ ++static inline char* av_make_error_string(char* errbuf, size_t errbuf_size, ++ int errnum) { ++ av_strerror(errnum, errbuf, errbuf_size); ++ return errbuf; ++} ++ ++/** ++ * Convenience macro, the return value should be used only directly in ++ * function arguments but never stand-alone. ++ */ ++#define av_err2str(errnum) \ ++ av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, \ ++ AV_ERROR_MAX_STRING_SIZE, errnum) ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_ERROR_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,960 @@ ++/* ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @ingroup lavu_frame ++ * reference-counted frame API ++ */ ++ ++#ifndef AVUTIL_FRAME_H ++#define AVUTIL_FRAME_H ++ ++#include ++#include ++ ++#include "avutil.h" ++#include "buffer.h" ++#include "channel_layout.h" ++#include "dict.h" ++#include "rational.h" ++#include "samplefmt.h" ++#include "pixfmt.h" ++#include "version.h" ++ ++/** ++ * @defgroup lavu_frame AVFrame ++ * @ingroup lavu_data ++ * ++ * @{ ++ * AVFrame is an abstraction for reference-counted raw multimedia data. ++ */ ++ ++enum AVFrameSideDataType { ++ /** ++ * The data is the AVPanScan struct defined in libavcodec. ++ */ ++ AV_FRAME_DATA_PANSCAN, ++ /** ++ * ATSC A53 Part 4 Closed Captions. ++ * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. ++ * The number of bytes of CC data is AVFrameSideData.size. ++ */ ++ AV_FRAME_DATA_A53_CC, ++ /** ++ * Stereoscopic 3d metadata. ++ * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. ++ */ ++ AV_FRAME_DATA_STEREO3D, ++ /** ++ * The data is the AVMatrixEncoding enum defined in ++ * libavutil/channel_layout.h. ++ */ ++ AV_FRAME_DATA_MATRIXENCODING, ++ /** ++ * Metadata relevant to a downmix procedure. ++ * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. ++ */ ++ AV_FRAME_DATA_DOWNMIX_INFO, ++ /** ++ * ReplayGain information in the form of the AVReplayGain struct. ++ */ ++ AV_FRAME_DATA_REPLAYGAIN, ++ /** ++ * This side data contains a 3x3 transformation matrix describing an affine ++ * transformation that needs to be applied to the frame for correct ++ * presentation. ++ * ++ * See libavutil/display.h for a detailed description of the data. ++ */ ++ AV_FRAME_DATA_DISPLAYMATRIX, ++ /** ++ * Active Format Description data consisting of a single byte as specified ++ * in ETSI TS 101 154 using AVActiveFormatDescription enum. ++ */ ++ AV_FRAME_DATA_AFD, ++ /** ++ * Motion vectors exported by some codecs (on demand through the export_mvs ++ * flag set in the libavcodec AVCodecContext flags2 option). ++ * The data is the AVMotionVector struct defined in ++ * libavutil/motion_vector.h. ++ */ ++ AV_FRAME_DATA_MOTION_VECTORS, ++ /** ++ * Recommmends skipping the specified number of samples. This is exported ++ * only if the "skip_manual" AVOption is set in libavcodec. ++ * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. ++ * @code ++ * u32le number of samples to skip from start of this packet ++ * u32le number of samples to skip from end of this packet ++ * u8 reason for start skip ++ * u8 reason for end skip (0=padding silence, 1=convergence) ++ * @endcode ++ */ ++ AV_FRAME_DATA_SKIP_SAMPLES, ++ /** ++ * This side data must be associated with an audio frame and corresponds to ++ * enum AVAudioServiceType defined in avcodec.h. ++ */ ++ AV_FRAME_DATA_AUDIO_SERVICE_TYPE, ++ /** ++ * Mastering display metadata associated with a video frame. The payload is ++ * an AVMasteringDisplayMetadata type and contains information about the ++ * mastering display color volume. ++ */ ++ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, ++ /** ++ * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. ++ * This is set on the first frame of a GOP that has a temporal reference of 0. ++ */ ++ AV_FRAME_DATA_GOP_TIMECODE, ++ ++ /** ++ * The data represents the AVSphericalMapping structure defined in ++ * libavutil/spherical.h. ++ */ ++ AV_FRAME_DATA_SPHERICAL, ++ ++ /** ++ * Content light level (based on CTA-861.3). This payload contains data in ++ * the form of the AVContentLightMetadata struct. ++ */ ++ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, ++ ++ /** ++ * The data contains an ICC profile as an opaque octet buffer following the ++ * format described by ISO 15076-1 with an optional name defined in the ++ * metadata key entry "name". ++ */ ++ AV_FRAME_DATA_ICC_PROFILE, ++ ++ /** ++ * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 ++ * uint32_t where the first uint32_t describes how many (1-3) of the other ++ * timecodes are used. The timecode format is described in the documentation ++ * of av_timecode_get_smpte_from_framenum() function in libavutil/timecode.h. ++ */ ++ AV_FRAME_DATA_S12M_TIMECODE, ++ ++ /** ++ * HDR dynamic metadata associated with a video frame. The payload is ++ * an AVDynamicHDRPlus type and contains information for color ++ * volume transform - application 4 of SMPTE 2094-40:2016 standard. ++ */ ++ AV_FRAME_DATA_DYNAMIC_HDR_PLUS, ++ ++ /** ++ * Regions Of Interest, the data is an array of AVRegionOfInterest type, the ++ * number of array element is implied by AVFrameSideData.size / ++ * AVRegionOfInterest.self_size. ++ */ ++ AV_FRAME_DATA_REGIONS_OF_INTEREST, ++ ++ /** ++ * Encoding parameters for a video frame, as described by AVVideoEncParams. ++ */ ++ AV_FRAME_DATA_VIDEO_ENC_PARAMS, ++ ++ /** ++ * User data unregistered metadata associated with a video frame. ++ * This is the H.26[45] UDU SEI message, and shouldn't be used for any other ++ * purpose The data is stored as uint8_t in AVFrameSideData.data which is 16 ++ * bytes of uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of ++ * user_data_payload_byte. ++ */ ++ AV_FRAME_DATA_SEI_UNREGISTERED, ++ ++ /** ++ * Film grain parameters for a frame, described by AVFilmGrainParams. ++ * Must be present for every frame which should have film grain applied. ++ */ ++ AV_FRAME_DATA_FILM_GRAIN_PARAMS, ++ ++ /** ++ * Bounding boxes for object detection and classification, ++ * as described by AVDetectionBBoxHeader. ++ */ ++ AV_FRAME_DATA_DETECTION_BBOXES, ++ ++ /** ++ * Dolby Vision RPU raw data, suitable for passing to x265 ++ * or other libraries. Array of uint8_t, with NAL emulation ++ * bytes intact. ++ */ ++ AV_FRAME_DATA_DOVI_RPU_BUFFER, ++ ++ /** ++ * Parsed Dolby Vision metadata, suitable for passing to a software ++ * implementation. The payload is the AVDOVIMetadata struct defined in ++ * libavutil/dovi_meta.h. ++ */ ++ AV_FRAME_DATA_DOVI_METADATA, ++ ++ /** ++ * HDR Vivid dynamic metadata associated with a video frame. The payload is ++ * an AVDynamicHDRVivid type and contains information for color ++ * volume transform - CUVA 005.1-2021. ++ */ ++ AV_FRAME_DATA_DYNAMIC_HDR_VIVID, ++ ++ /** ++ * Ambient viewing environment metadata, as defined by H.274. ++ */ ++ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, ++}; ++ ++enum AVActiveFormatDescription { ++ AV_AFD_SAME = 8, ++ AV_AFD_4_3 = 9, ++ AV_AFD_16_9 = 10, ++ AV_AFD_14_9 = 11, ++ AV_AFD_4_3_SP_14_9 = 13, ++ AV_AFD_16_9_SP_14_9 = 14, ++ AV_AFD_SP_4_3 = 15, ++}; ++ ++/** ++ * Structure to hold side data for an AVFrame. ++ * ++ * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be ++ * added to the end with a minor bump. ++ */ ++typedef struct AVFrameSideData { ++ enum AVFrameSideDataType type; ++ uint8_t* data; ++ size_t size; ++ AVDictionary* metadata; ++ AVBufferRef* buf; ++} AVFrameSideData; ++ ++/** ++ * Structure describing a single Region Of Interest. ++ * ++ * When multiple regions are defined in a single side-data block, they ++ * should be ordered from most to least important - some encoders are only ++ * capable of supporting a limited number of distinct regions, so will have ++ * to truncate the list. ++ * ++ * When overlapping regions are defined, the first region containing a given ++ * area of the frame applies. ++ */ ++typedef struct AVRegionOfInterest { ++ /** ++ * Must be set to the size of this data structure (that is, ++ * sizeof(AVRegionOfInterest)). ++ */ ++ uint32_t self_size; ++ /** ++ * Distance in pixels from the top edge of the frame to the top and ++ * bottom edges and from the left edge of the frame to the left and ++ * right edges of the rectangle defining this region of interest. ++ * ++ * The constraints on a region are encoder dependent, so the region ++ * actually affected may be slightly larger for alignment or other ++ * reasons. ++ */ ++ int top; ++ int bottom; ++ int left; ++ int right; ++ /** ++ * Quantisation offset. ++ * ++ * Must be in the range -1 to +1. A value of zero indicates no quality ++ * change. A negative value asks for better quality (less quantisation), ++ * while a positive value asks for worse quality (greater quantisation). ++ * ++ * The range is calibrated so that the extreme values indicate the ++ * largest possible offset - if the rest of the frame is encoded with the ++ * worst possible quality, an offset of -1 indicates that this region ++ * should be encoded with the best possible quality anyway. Intermediate ++ * values are then interpolated in some codec-dependent way. ++ * ++ * For example, in 10-bit H.264 the quantisation parameter varies between ++ * -12 and 51. A typical qoffset value of -1/10 therefore indicates that ++ * this region should be encoded with a QP around one-tenth of the full ++ * range better than the rest of the frame. So, if most of the frame ++ * were to be encoded with a QP of around 30, this region would get a QP ++ * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). ++ * An extreme value of -1 would indicate that this region should be ++ * encoded with the best possible quality regardless of the treatment of ++ * the rest of the frame - that is, should be encoded at a QP of -12. ++ */ ++ AVRational qoffset; ++} AVRegionOfInterest; ++ ++/** ++ * This structure describes decoded (raw) audio or video data. ++ * ++ * AVFrame must be allocated using av_frame_alloc(). Note that this only ++ * allocates the AVFrame itself, the buffers for the data must be managed ++ * through other means (see below). ++ * AVFrame must be freed with av_frame_free(). ++ * ++ * AVFrame is typically allocated once and then reused multiple times to hold ++ * different data (e.g. a single AVFrame to hold frames received from a ++ * decoder). In such a case, av_frame_unref() will free any references held by ++ * the frame and reset it to its original clean state before it ++ * is reused again. ++ * ++ * The data described by an AVFrame is usually reference counted through the ++ * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / ++ * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at ++ * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, ++ * every single data plane must be contained in one of the buffers in ++ * AVFrame.buf or AVFrame.extended_buf. ++ * There may be a single buffer for all the data, or one separate buffer for ++ * each plane, or anything in between. ++ * ++ * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added ++ * to the end with a minor bump. ++ * ++ * Fields can be accessed through AVOptions, the name string used, matches the ++ * C structure field name for fields accessible through AVOptions. The AVClass ++ * for AVFrame can be obtained from avcodec_get_frame_class() ++ */ ++typedef struct AVFrame { ++#define AV_NUM_DATA_POINTERS 8 ++ /** ++ * pointer to the picture/channel planes. ++ * This might be different from the first allocated byte. For video, ++ * it could even point to the end of the image data. ++ * ++ * All pointers in data and extended_data must point into one of the ++ * AVBufferRef in buf or extended_buf. ++ * ++ * Some decoders access areas outside 0,0 - width,height, please ++ * see avcodec_align_dimensions2(). Some filters and swscale can read ++ * up to 16 bytes beyond the planes, if these filters are to be used, ++ * then 16 extra bytes must be allocated. ++ * ++ * NOTE: Pointers not needed by the format MUST be set to NULL. ++ * ++ * @attention In case of video, the data[] pointers can point to the ++ * end of image data in order to reverse line order, when used in ++ * combination with negative values in the linesize[] array. ++ */ ++ uint8_t* data[AV_NUM_DATA_POINTERS]; ++ ++ /** ++ * For video, a positive or negative value, which is typically indicating ++ * the size in bytes of each picture line, but it can also be: ++ * - the negative byte size of lines for vertical flipping ++ * (with data[n] pointing to the end of the data ++ * - a positive or negative multiple of the byte size as for accessing ++ * even and odd fields of a frame (possibly flipped) ++ * ++ * For audio, only linesize[0] may be set. For planar audio, each channel ++ * plane must be the same size. ++ * ++ * For video the linesizes should be multiples of the CPUs alignment ++ * preference, this is 16 or 32 for modern desktop CPUs. ++ * Some code requires such alignment other code can be slower without ++ * correct alignment, for yet other it makes no difference. ++ * ++ * @note The linesize may be larger than the size of usable data -- there ++ * may be extra padding present for performance reasons. ++ * ++ * @attention In case of video, line size values can be negative to achieve ++ * a vertically inverted iteration over image lines. ++ */ ++ int linesize[AV_NUM_DATA_POINTERS]; ++ ++ /** ++ * pointers to the data planes/channels. ++ * ++ * For video, this should simply point to data[]. ++ * ++ * For planar audio, each channel has a separate data pointer, and ++ * linesize[0] contains the size of each channel buffer. ++ * For packed audio, there is just one data pointer, and linesize[0] ++ * contains the total size of the buffer for all channels. ++ * ++ * Note: Both data and extended_data should always be set in a valid frame, ++ * but for planar audio with more channels that can fit in data, ++ * extended_data must be used in order to access all channels. ++ */ ++ uint8_t** extended_data; ++ ++ /** ++ * @name Video dimensions ++ * Video frames only. The coded dimensions (in pixels) of the video frame, ++ * i.e. the size of the rectangle that contains some well-defined values. ++ * ++ * @note The part of the frame intended for display/presentation is further ++ * restricted by the @ref cropping "Cropping rectangle". ++ * @{ ++ */ ++ int width, height; ++ /** ++ * @} ++ */ ++ ++ /** ++ * number of audio samples (per channel) described by this frame ++ */ ++ int nb_samples; ++ ++ /** ++ * format of the frame, -1 if unknown or unset ++ * Values correspond to enum AVPixelFormat for video frames, ++ * enum AVSampleFormat for audio) ++ */ ++ int format; ++ ++ /** ++ * 1 -> keyframe, 0-> not ++ */ ++ int key_frame; ++ ++ /** ++ * Picture type of the frame. ++ */ ++ enum AVPictureType pict_type; ++ ++ /** ++ * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. ++ */ ++ AVRational sample_aspect_ratio; ++ ++ /** ++ * Presentation timestamp in time_base units (time when frame should be shown ++ * to user). ++ */ ++ int64_t pts; ++ ++ /** ++ * DTS copied from the AVPacket that triggered returning this frame. (if frame ++ * threading isn't used) This is also the Presentation time of this AVFrame ++ * calculated from only AVPacket.dts values without pts values. ++ */ ++ int64_t pkt_dts; ++ ++ /** ++ * Time base for the timestamps in this frame. ++ * In the future, this field may be set on frames output by decoders or ++ * filters, but its value will be by default ignored on input to encoders ++ * or filters. ++ */ ++ AVRational time_base; ++ ++#if FF_API_FRAME_PICTURE_NUMBER ++ /** ++ * picture number in bitstream order ++ */ ++ attribute_deprecated int coded_picture_number; ++ /** ++ * picture number in display order ++ */ ++ attribute_deprecated int display_picture_number; ++#endif ++ ++ /** ++ * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) ++ */ ++ int quality; ++ ++ /** ++ * for some private data of the user ++ */ ++ void* opaque; ++ ++ /** ++ * When decoding, this signals how much the picture must be delayed. ++ * extra_delay = repeat_pict / (2*fps) ++ */ ++ int repeat_pict; ++ ++ /** ++ * The content of the picture is interlaced. ++ */ ++ int interlaced_frame; ++ ++ /** ++ * If the content is interlaced, is top field displayed first. ++ */ ++ int top_field_first; ++ ++ /** ++ * Tell user application that palette has changed from previous frame. ++ */ ++ int palette_has_changed; ++ ++#if FF_API_REORDERED_OPAQUE ++ /** ++ * reordered opaque 64 bits (generally an integer or a double precision float ++ * PTS but can be anything). ++ * The user sets AVCodecContext.reordered_opaque to represent the input at ++ * that time, ++ * the decoder reorders values as needed and sets AVFrame.reordered_opaque ++ * to exactly one of the values provided by the user through ++ * AVCodecContext.reordered_opaque ++ * ++ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead ++ */ ++ attribute_deprecated int64_t reordered_opaque; ++#endif ++ ++ /** ++ * Sample rate of the audio data. ++ */ ++ int sample_rate; ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * Channel layout of the audio data. ++ * @deprecated use ch_layout instead ++ */ ++ attribute_deprecated uint64_t channel_layout; ++#endif ++ ++ /** ++ * AVBuffer references backing the data for this frame. All the pointers in ++ * data and extended_data must point inside one of the buffers in buf or ++ * extended_buf. This array must be filled contiguously -- if buf[i] is ++ * non-NULL then buf[j] must also be non-NULL for all j < i. ++ * ++ * There may be at most one AVBuffer per data plane, so for video this array ++ * always contains all the references. For planar audio with more than ++ * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in ++ * this array. Then the extra AVBufferRef pointers are stored in the ++ * extended_buf array. ++ */ ++ AVBufferRef* buf[AV_NUM_DATA_POINTERS]; ++ ++ /** ++ * For planar audio which requires more than AV_NUM_DATA_POINTERS ++ * AVBufferRef pointers, this array will hold all the references which ++ * cannot fit into AVFrame.buf. ++ * ++ * Note that this is different from AVFrame.extended_data, which always ++ * contains all the pointers. This array only contains the extra pointers, ++ * which cannot fit into AVFrame.buf. ++ * ++ * This array is always allocated using av_malloc() by whoever constructs ++ * the frame. It is freed in av_frame_unref(). ++ */ ++ AVBufferRef** extended_buf; ++ /** ++ * Number of elements in extended_buf. ++ */ ++ int nb_extended_buf; ++ ++ AVFrameSideData** side_data; ++ int nb_side_data; ++ ++/** ++ * @defgroup lavu_frame_flags AV_FRAME_FLAGS ++ * @ingroup lavu_frame ++ * Flags describing additional frame properties. ++ * ++ * @{ ++ */ ++ ++/** ++ * The frame data may be corrupted, e.g. due to decoding errors. ++ */ ++#define AV_FRAME_FLAG_CORRUPT (1 << 0) ++/** ++ * A flag to mark the frames which need to be decoded, but shouldn't be output. ++ */ ++#define AV_FRAME_FLAG_DISCARD (1 << 2) ++ /** ++ * @} ++ */ ++ ++ /** ++ * Frame flags, a combination of @ref lavu_frame_flags ++ */ ++ int flags; ++ ++ /** ++ * MPEG vs JPEG YUV range. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVColorRange color_range; ++ ++ enum AVColorPrimaries color_primaries; ++ ++ enum AVColorTransferCharacteristic color_trc; ++ ++ /** ++ * YUV colorspace type. ++ * - encoding: Set by user ++ * - decoding: Set by libavcodec ++ */ ++ enum AVColorSpace colorspace; ++ ++ enum AVChromaLocation chroma_location; ++ ++ /** ++ * frame timestamp estimated using various heuristics, in stream time base ++ * - encoding: unused ++ * - decoding: set by libavcodec, read by user. ++ */ ++ int64_t best_effort_timestamp; ++ ++ /** ++ * reordered pos from the last AVPacket that has been input into the decoder ++ * - encoding: unused ++ * - decoding: Read by user. ++ */ ++ int64_t pkt_pos; ++ ++#if FF_API_PKT_DURATION ++ /** ++ * duration of the corresponding packet, expressed in ++ * AVStream->time_base units, 0 if unknown. ++ * - encoding: unused ++ * - decoding: Read by user. ++ * ++ * @deprecated use duration instead ++ */ ++ attribute_deprecated int64_t pkt_duration; ++#endif ++ ++ /** ++ * metadata. ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ AVDictionary* metadata; ++ ++ /** ++ * decode error flags of the frame, set to a combination of ++ * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there ++ * were errors during the decoding. ++ * - encoding: unused ++ * - decoding: set by libavcodec, read by user. ++ */ ++ int decode_error_flags; ++#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 ++#define FF_DECODE_ERROR_MISSING_REFERENCE 2 ++#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 ++#define FF_DECODE_ERROR_DECODE_SLICES 8 ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * number of audio channels, only used for audio. ++ * - encoding: unused ++ * - decoding: Read by user. ++ * @deprecated use ch_layout instead ++ */ ++ attribute_deprecated int channels; ++#endif ++ ++ /** ++ * size of the corresponding packet containing the compressed ++ * frame. ++ * It is set to a negative value if unknown. ++ * - encoding: unused ++ * - decoding: set by libavcodec, read by user. ++ */ ++ int pkt_size; ++ ++ /** ++ * For hwaccel-format frames, this should be a reference to the ++ * AVHWFramesContext describing the frame. ++ */ ++ AVBufferRef* hw_frames_ctx; ++ ++ /** ++ * AVBufferRef for free use by the API user. FFmpeg will never check the ++ * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when ++ * the frame is unreferenced. av_frame_copy_props() calls create a new ++ * reference with av_buffer_ref() for the target frame's opaque_ref field. ++ * ++ * This is unrelated to the opaque field, although it serves a similar ++ * purpose. ++ */ ++ AVBufferRef* opaque_ref; ++ ++ /** ++ * @anchor cropping ++ * @name Cropping ++ * Video frames only. The number of pixels to discard from the the ++ * top/bottom/left/right border of the frame to obtain the sub-rectangle of ++ * the frame intended for presentation. ++ * @{ ++ */ ++ size_t crop_top; ++ size_t crop_bottom; ++ size_t crop_left; ++ size_t crop_right; ++ /** ++ * @} ++ */ ++ ++ /** ++ * AVBufferRef for internal use by a single libav* library. ++ * Must not be used to transfer data between libraries. ++ * Has to be NULL when ownership of the frame leaves the respective library. ++ * ++ * Code outside the FFmpeg libs should never check or change the contents of ++ * the buffer ref. ++ * ++ * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. ++ * av_frame_copy_props() calls create a new reference with av_buffer_ref() ++ * for the target frame's private_ref field. ++ */ ++ AVBufferRef* private_ref; ++ ++ /** ++ * Channel layout of the audio data. ++ */ ++ AVChannelLayout ch_layout; ++ ++ /** ++ * Duration of the frame, in the same units as pts. 0 if unknown. ++ */ ++ int64_t duration; ++} AVFrame; ++ ++/** ++ * Allocate an AVFrame and set its fields to default values. The resulting ++ * struct must be freed using av_frame_free(). ++ * ++ * @return An AVFrame filled with default values or NULL on failure. ++ * ++ * @note this only allocates the AVFrame itself, not the data buffers. Those ++ * must be allocated through other means, e.g. with av_frame_get_buffer() or ++ * manually. ++ */ ++AVFrame* av_frame_alloc(void); ++ ++/** ++ * Free the frame and any dynamically allocated objects in it, ++ * e.g. extended_data. If the frame is reference counted, it will be ++ * unreferenced first. ++ * ++ * @param frame frame to be freed. The pointer will be set to NULL. ++ */ ++void av_frame_free(AVFrame** frame); ++ ++/** ++ * Set up a new reference to the data described by the source frame. ++ * ++ * Copy frame properties from src to dst and create a new reference for each ++ * AVBufferRef from src. ++ * ++ * If src is not reference counted, new buffers are allocated and the data is ++ * copied. ++ * ++ * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), ++ * or newly allocated with av_frame_alloc() before calling this ++ * function, or undefined behavior will occur. ++ * ++ * @return 0 on success, a negative AVERROR on error ++ */ ++int av_frame_ref(AVFrame* dst, const AVFrame* src); ++ ++/** ++ * Create a new frame that references the same data as src. ++ * ++ * This is a shortcut for av_frame_alloc()+av_frame_ref(). ++ * ++ * @return newly created AVFrame on success, NULL on error. ++ */ ++AVFrame* av_frame_clone(const AVFrame* src); ++ ++/** ++ * Unreference all the buffers referenced by frame and reset the frame fields. ++ */ ++void av_frame_unref(AVFrame* frame); ++ ++/** ++ * Move everything contained in src to dst and reset src. ++ * ++ * @warning: dst is not unreferenced, but directly overwritten without reading ++ * or deallocating its contents. Call av_frame_unref(dst) manually ++ * before calling this function to ensure that no memory is leaked. ++ */ ++void av_frame_move_ref(AVFrame* dst, AVFrame* src); ++ ++/** ++ * Allocate new buffer(s) for audio or video data. ++ * ++ * The following fields must be set on frame before calling this function: ++ * - format (pixel format for video, sample format for audio) ++ * - width and height for video ++ * - nb_samples and ch_layout for audio ++ * ++ * This function will fill AVFrame.data and AVFrame.buf arrays and, if ++ * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. ++ * For planar formats, one buffer will be allocated for each plane. ++ * ++ * @warning: if frame already has been allocated, calling this function will ++ * leak memory. In addition, undefined behavior can occur in certain ++ * cases. ++ * ++ * @param frame frame in which to store the new buffers. ++ * @param align Required buffer size alignment. If equal to 0, alignment will be ++ * chosen automatically for the current CPU. It is highly ++ * recommended to pass 0 here unless you know what you are doing. ++ * ++ * @return 0 on success, a negative AVERROR on error. ++ */ ++int av_frame_get_buffer(AVFrame* frame, int align); ++ ++/** ++ * Check if the frame data is writable. ++ * ++ * @return A positive value if the frame data is writable (which is true if and ++ * only if each of the underlying buffers has only one reference, namely the one ++ * stored in this frame). Return 0 otherwise. ++ * ++ * If 1 is returned the answer is valid until av_buffer_ref() is called on any ++ * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). ++ * ++ * @see av_frame_make_writable(), av_buffer_is_writable() ++ */ ++int av_frame_is_writable(AVFrame* frame); ++ ++/** ++ * Ensure that the frame data is writable, avoiding data copy if possible. ++ * ++ * Do nothing if the frame is writable, allocate new buffers and copy the data ++ * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy ++ * is always made. ++ * ++ * @return 0 on success, a negative AVERROR on error. ++ * ++ * @see av_frame_is_writable(), av_buffer_is_writable(), ++ * av_buffer_make_writable() ++ */ ++int av_frame_make_writable(AVFrame* frame); ++ ++/** ++ * Copy the frame data from src to dst. ++ * ++ * This function does not allocate anything, dst must be already initialized and ++ * allocated with the same parameters as src. ++ * ++ * This function only copies the frame data (i.e. the contents of the data / ++ * extended data arrays), not any other properties. ++ * ++ * @return >= 0 on success, a negative AVERROR on error. ++ */ ++int av_frame_copy(AVFrame* dst, const AVFrame* src); ++ ++/** ++ * Copy only "metadata" fields from src to dst. ++ * ++ * Metadata for the purpose of this function are those fields that do not affect ++ * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample ++ * aspect ratio (for video), but not width/height or channel layout. ++ * Side data is also copied. ++ */ ++int av_frame_copy_props(AVFrame* dst, const AVFrame* src); ++ ++/** ++ * Get the buffer reference a given data plane is stored in. ++ * ++ * @param frame the frame to get the plane's buffer from ++ * @param plane index of the data plane of interest in frame->extended_data. ++ * ++ * @return the buffer reference that contains the plane or NULL if the input ++ * frame is not valid. ++ */ ++AVBufferRef* av_frame_get_plane_buffer(AVFrame* frame, int plane); ++ ++/** ++ * Add a new side data to a frame. ++ * ++ * @param frame a frame to which the side data should be added ++ * @param type type of the added side data ++ * @param size size of the side data ++ * ++ * @return newly added side data on success, NULL on error ++ */ ++AVFrameSideData* av_frame_new_side_data(AVFrame* frame, ++ enum AVFrameSideDataType type, ++ size_t size); ++ ++/** ++ * Add a new side data to a frame from an existing AVBufferRef ++ * ++ * @param frame a frame to which the side data should be added ++ * @param type the type of the added side data ++ * @param buf an AVBufferRef to add as side data. The ownership of ++ * the reference is transferred to the frame. ++ * ++ * @return newly added side data on success, NULL on error. On failure ++ * the frame is unchanged and the AVBufferRef remains owned by ++ * the caller. ++ */ ++AVFrameSideData* av_frame_new_side_data_from_buf(AVFrame* frame, ++ enum AVFrameSideDataType type, ++ AVBufferRef* buf); ++ ++/** ++ * @return a pointer to the side data of a given type on success, NULL if there ++ * is no side data with such type in this frame. ++ */ ++AVFrameSideData* av_frame_get_side_data(const AVFrame* frame, ++ enum AVFrameSideDataType type); ++ ++/** ++ * Remove and free all side data instances of the given type. ++ */ ++void av_frame_remove_side_data(AVFrame* frame, enum AVFrameSideDataType type); ++ ++/** ++ * Flags for frame cropping. ++ */ ++enum { ++ /** ++ * Apply the maximum possible cropping, even if it requires setting the ++ * AVFrame.data[] entries to unaligned pointers. Passing unaligned data ++ * to FFmpeg API is generally not allowed, and causes undefined behavior ++ * (such as crashes). You can pass unaligned data only to FFmpeg APIs that ++ * are explicitly documented to accept it. Use this flag only if you ++ * absolutely know what you are doing. ++ */ ++ AV_FRAME_CROP_UNALIGNED = 1 << 0, ++}; ++ ++/** ++ * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ ++ * crop_bottom fields. If cropping is successful, the function will adjust the ++ * data pointers and the width/height fields, and set the crop fields to 0. ++ * ++ * In all cases, the cropping boundaries will be rounded to the inherent ++ * alignment of the pixel format. In some cases, such as for opaque hwaccel ++ * formats, the left/top cropping is ignored. The crop fields are set to 0 even ++ * if the cropping was rounded or ignored. ++ * ++ * @param frame the frame which should be cropped ++ * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. ++ * ++ * @return >= 0 on success, a negative AVERROR on error. If the cropping fields ++ * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. ++ */ ++int av_frame_apply_cropping(AVFrame* frame, int flags); ++ ++/** ++ * @return a string identifying the side data type ++ */ ++const char* av_frame_side_data_name(enum AVFrameSideDataType type); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_FRAME_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,606 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVUTIL_HWCONTEXT_H ++#define AVUTIL_HWCONTEXT_H ++ ++#include "buffer.h" ++#include "frame.h" ++#include "log.h" ++#include "pixfmt.h" ++ ++enum AVHWDeviceType { ++ AV_HWDEVICE_TYPE_NONE, ++ AV_HWDEVICE_TYPE_VDPAU, ++ AV_HWDEVICE_TYPE_CUDA, ++ AV_HWDEVICE_TYPE_VAAPI, ++ AV_HWDEVICE_TYPE_DXVA2, ++ AV_HWDEVICE_TYPE_QSV, ++ AV_HWDEVICE_TYPE_VIDEOTOOLBOX, ++ AV_HWDEVICE_TYPE_D3D11VA, ++ AV_HWDEVICE_TYPE_DRM, ++ AV_HWDEVICE_TYPE_OPENCL, ++ AV_HWDEVICE_TYPE_MEDIACODEC, ++ AV_HWDEVICE_TYPE_VULKAN, ++}; ++ ++typedef struct AVHWDeviceInternal AVHWDeviceInternal; ++ ++/** ++ * This struct aggregates all the (hardware/vendor-specific) "high-level" state, ++ * i.e. state that is not tied to a concrete processing configuration. ++ * E.g., in an API that supports hardware-accelerated encoding and decoding, ++ * this struct will (if possible) wrap the state that is common to both encoding ++ * and decoding and from which specific instances of encoders or decoders can be ++ * derived. ++ * ++ * This struct is reference-counted with the AVBuffer mechanism. The ++ * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field ++ * points to the actual AVHWDeviceContext. Further objects derived from ++ * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with ++ * specific properties) will hold an internal reference to it. After all the ++ * references are released, the AVHWDeviceContext itself will be freed, ++ * optionally invoking a user-specified callback for uninitializing the hardware ++ * state. ++ */ ++typedef struct AVHWDeviceContext { ++ /** ++ * A class for logging. Set by av_hwdevice_ctx_alloc(). ++ */ ++ const AVClass* av_class; ++ ++ /** ++ * Private data used internally by libavutil. Must not be accessed in any ++ * way by the caller. ++ */ ++ AVHWDeviceInternal* internal; ++ ++ /** ++ * This field identifies the underlying API used for hardware access. ++ * ++ * This field is set when this struct is allocated and never changed ++ * afterwards. ++ */ ++ enum AVHWDeviceType type; ++ ++ /** ++ * The format-specific data, allocated and freed by libavutil along with ++ * this context. ++ * ++ * Should be cast by the user to the format-specific context defined in the ++ * corresponding header (hwcontext_*.h) and filled as described in the ++ * documentation before calling av_hwdevice_ctx_init(). ++ * ++ * After calling av_hwdevice_ctx_init() this struct should not be modified ++ * by the caller. ++ */ ++ void* hwctx; ++ ++ /** ++ * This field may be set by the caller before calling av_hwdevice_ctx_init(). ++ * ++ * If non-NULL, this callback will be called when the last reference to ++ * this context is unreferenced, immediately before it is freed. ++ * ++ * @note when other objects (e.g an AVHWFramesContext) are derived from this ++ * struct, this callback will be invoked after all such child objects ++ * are fully uninitialized and their respective destructors invoked. ++ */ ++ void (*free)(struct AVHWDeviceContext* ctx); ++ ++ /** ++ * Arbitrary user data, to be used e.g. by the free() callback. ++ */ ++ void* user_opaque; ++} AVHWDeviceContext; ++ ++typedef struct AVHWFramesInternal AVHWFramesInternal; ++ ++/** ++ * This struct describes a set or pool of "hardware" frames (i.e. those with ++ * data not located in normal system memory). All the frames in the pool are ++ * assumed to be allocated in the same way and interchangeable. ++ * ++ * This struct is reference-counted with the AVBuffer mechanism and tied to a ++ * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor ++ * yields a reference, whose data field points to the actual AVHWFramesContext ++ * struct. ++ */ ++typedef struct AVHWFramesContext { ++ /** ++ * A class for logging. ++ */ ++ const AVClass* av_class; ++ ++ /** ++ * Private data used internally by libavutil. Must not be accessed in any ++ * way by the caller. ++ */ ++ AVHWFramesInternal* internal; ++ ++ /** ++ * A reference to the parent AVHWDeviceContext. This reference is owned and ++ * managed by the enclosing AVHWFramesContext, but the caller may derive ++ * additional references from it. ++ */ ++ AVBufferRef* device_ref; ++ ++ /** ++ * The parent AVHWDeviceContext. This is simply a pointer to ++ * device_ref->data provided for convenience. ++ * ++ * Set by libavutil in av_hwframe_ctx_init(). ++ */ ++ AVHWDeviceContext* device_ctx; ++ ++ /** ++ * The format-specific data, allocated and freed automatically along with ++ * this context. ++ * ++ * Should be cast by the user to the format-specific context defined in the ++ * corresponding header (hwframe_*.h) and filled as described in the ++ * documentation before calling av_hwframe_ctx_init(). ++ * ++ * After any frames using this context are created, the contents of this ++ * struct should not be modified by the caller. ++ */ ++ void* hwctx; ++ ++ /** ++ * This field may be set by the caller before calling av_hwframe_ctx_init(). ++ * ++ * If non-NULL, this callback will be called when the last reference to ++ * this context is unreferenced, immediately before it is freed. ++ */ ++ void (*free)(struct AVHWFramesContext* ctx); ++ ++ /** ++ * Arbitrary user data, to be used e.g. by the free() callback. ++ */ ++ void* user_opaque; ++ ++ /** ++ * A pool from which the frames are allocated by av_hwframe_get_buffer(). ++ * This field may be set by the caller before calling av_hwframe_ctx_init(). ++ * The buffers returned by calling av_buffer_pool_get() on this pool must ++ * have the properties described in the documentation in the corresponding hw ++ * type's header (hwcontext_*.h). The pool will be freed strictly before ++ * this struct's free() callback is invoked. ++ * ++ * This field may be NULL, then libavutil will attempt to allocate a pool ++ * internally. Note that certain device types enforce pools allocated at ++ * fixed size (frame count), which cannot be extended dynamically. In such a ++ * case, initial_pool_size must be set appropriately. ++ */ ++ AVBufferPool* pool; ++ ++ /** ++ * Initial size of the frame pool. If a device type does not support ++ * dynamically resizing the pool, then this is also the maximum pool size. ++ * ++ * May be set by the caller before calling av_hwframe_ctx_init(). Must be ++ * set if pool is NULL and the device type does not support dynamic pools. ++ */ ++ int initial_pool_size; ++ ++ /** ++ * The pixel format identifying the underlying HW surface type. ++ * ++ * Must be a hwaccel format, i.e. the corresponding descriptor must have the ++ * AV_PIX_FMT_FLAG_HWACCEL flag set. ++ * ++ * Must be set by the user before calling av_hwframe_ctx_init(). ++ */ ++ enum AVPixelFormat format; ++ ++ /** ++ * The pixel format identifying the actual data layout of the hardware ++ * frames. ++ * ++ * Must be set by the caller before calling av_hwframe_ctx_init(). ++ * ++ * @note when the underlying API does not provide the exact data layout, but ++ * only the colorspace/bit depth, this field should be set to the fully ++ * planar version of that format (e.g. for 8-bit 420 YUV it should be ++ * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). ++ */ ++ enum AVPixelFormat sw_format; ++ ++ /** ++ * The allocated dimensions of the frames in this pool. ++ * ++ * Must be set by the user before calling av_hwframe_ctx_init(). ++ */ ++ int width, height; ++} AVHWFramesContext; ++ ++/** ++ * Look up an AVHWDeviceType by name. ++ * ++ * @param name String name of the device type (case-insensitive). ++ * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if ++ * not found. ++ */ ++enum AVHWDeviceType av_hwdevice_find_type_by_name(const char* name); ++ ++/** Get the string name of an AVHWDeviceType. ++ * ++ * @param type Type from enum AVHWDeviceType. ++ * @return Pointer to a static string containing the name, or NULL if the type ++ * is not valid. ++ */ ++const char* av_hwdevice_get_type_name(enum AVHWDeviceType type); ++ ++/** ++ * Iterate over supported device types. ++ * ++ * @param prev AV_HWDEVICE_TYPE_NONE initially, then the previous type ++ * returned by this function in subsequent iterations. ++ * @return The next usable device type from enum AVHWDeviceType, or ++ * AV_HWDEVICE_TYPE_NONE if there are no more. ++ */ ++enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); ++ ++/** ++ * Allocate an AVHWDeviceContext for a given hardware type. ++ * ++ * @param type the type of the hardware device to allocate. ++ * @return a reference to the newly created AVHWDeviceContext on success or NULL ++ * on failure. ++ */ ++AVBufferRef* av_hwdevice_ctx_alloc(enum AVHWDeviceType type); ++ ++/** ++ * Finalize the device context before use. This function must be called after ++ * the context is filled with all the required information and before it is ++ * used in any way. ++ * ++ * @param ref a reference to the AVHWDeviceContext ++ * @return 0 on success, a negative AVERROR code on failure ++ */ ++int av_hwdevice_ctx_init(AVBufferRef* ref); ++ ++/** ++ * Open a device of the specified type and create an AVHWDeviceContext for it. ++ * ++ * This is a convenience function intended to cover the simple cases. Callers ++ * who need to fine-tune device creation/management should open the device ++ * manually and then wrap it in an AVHWDeviceContext using ++ * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). ++ * ++ * The returned context is already initialized and ready for use, the caller ++ * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of ++ * the created AVHWDeviceContext are set by this function and should not be ++ * touched by the caller. ++ * ++ * @param device_ctx On success, a reference to the newly-created device context ++ * will be written here. The reference is owned by the caller ++ * and must be released with av_buffer_unref() when no longer ++ * needed. On failure, NULL will be written to this pointer. ++ * @param type The type of the device to create. ++ * @param device A type-specific string identifying the device to open. ++ * @param opts A dictionary of additional (type-specific) options to use in ++ * opening the device. The dictionary remains owned by the caller. ++ * @param flags currently unused ++ * ++ * @return 0 on success, a negative AVERROR code on failure. ++ */ ++int av_hwdevice_ctx_create(AVBufferRef** device_ctx, enum AVHWDeviceType type, ++ const char* device, AVDictionary* opts, int flags); ++ ++/** ++ * Create a new device of the specified type from an existing device. ++ * ++ * If the source device is a device of the target type or was originally ++ * derived from such a device (possibly through one or more intermediate ++ * devices of other types), then this will return a reference to the ++ * existing device of the same type as is requested. ++ * ++ * Otherwise, it will attempt to derive a new device from the given source ++ * device. If direct derivation to the new type is not implemented, it will ++ * attempt the same derivation from each ancestor of the source device in ++ * turn looking for an implemented derivation method. ++ * ++ * @param dst_ctx On success, a reference to the newly-created ++ * AVHWDeviceContext. ++ * @param type The type of the new device to create. ++ * @param src_ctx A reference to an existing AVHWDeviceContext which will be ++ * used to create the new device. ++ * @param flags Currently unused; should be set to zero. ++ * @return Zero on success, a negative AVERROR code on failure. ++ */ ++int av_hwdevice_ctx_create_derived(AVBufferRef** dst_ctx, ++ enum AVHWDeviceType type, ++ AVBufferRef* src_ctx, int flags); ++ ++/** ++ * Create a new device of the specified type from an existing device. ++ * ++ * This function performs the same action as av_hwdevice_ctx_create_derived, ++ * however, it is able to set options for the new device to be derived. ++ * ++ * @param dst_ctx On success, a reference to the newly-created ++ * AVHWDeviceContext. ++ * @param type The type of the new device to create. ++ * @param src_ctx A reference to an existing AVHWDeviceContext which will be ++ * used to create the new device. ++ * @param options Options for the new device to create, same format as in ++ * av_hwdevice_ctx_create. ++ * @param flags Currently unused; should be set to zero. ++ * @return Zero on success, a negative AVERROR code on failure. ++ */ ++int av_hwdevice_ctx_create_derived_opts(AVBufferRef** dst_ctx, ++ enum AVHWDeviceType type, ++ AVBufferRef* src_ctx, ++ AVDictionary* options, int flags); ++ ++/** ++ * Allocate an AVHWFramesContext tied to a given device context. ++ * ++ * @param device_ctx a reference to a AVHWDeviceContext. This function will make ++ * a new reference for internal use, the one passed to the ++ * function remains owned by the caller. ++ * @return a reference to the newly created AVHWFramesContext on success or NULL ++ * on failure. ++ */ ++AVBufferRef* av_hwframe_ctx_alloc(AVBufferRef* device_ctx); ++ ++/** ++ * Finalize the context before use. This function must be called after the ++ * context is filled with all the required information and before it is attached ++ * to any frames. ++ * ++ * @param ref a reference to the AVHWFramesContext ++ * @return 0 on success, a negative AVERROR code on failure ++ */ ++int av_hwframe_ctx_init(AVBufferRef* ref); ++ ++/** ++ * Allocate a new frame attached to the given AVHWFramesContext. ++ * ++ * @param hwframe_ctx a reference to an AVHWFramesContext ++ * @param frame an empty (freshly allocated or unreffed) frame to be filled with ++ * newly allocated buffers. ++ * @param flags currently unused, should be set to zero ++ * @return 0 on success, a negative AVERROR code on failure ++ */ ++int av_hwframe_get_buffer(AVBufferRef* hwframe_ctx, AVFrame* frame, int flags); ++ ++/** ++ * Copy data to or from a hw surface. At least one of dst/src must have an ++ * AVHWFramesContext attached. ++ * ++ * If src has an AVHWFramesContext attached, then the format of dst (if set) ++ * must use one of the formats returned by av_hwframe_transfer_get_formats(src, ++ * AV_HWFRAME_TRANSFER_DIRECTION_FROM). ++ * If dst has an AVHWFramesContext attached, then the format of src must use one ++ * of the formats returned by av_hwframe_transfer_get_formats(dst, ++ * AV_HWFRAME_TRANSFER_DIRECTION_TO) ++ * ++ * dst may be "clean" (i.e. with data/buf pointers unset), in which case the ++ * data buffers will be allocated by this function using av_frame_get_buffer(). ++ * If dst->format is set, then this format will be used, otherwise (when ++ * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. ++ * ++ * The two frames must have matching allocated dimensions (i.e. equal to ++ * AVHWFramesContext.width/height), since not all device types support ++ * transferring a sub-rectangle of the whole surface. The display dimensions ++ * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but ++ * also have to be equal for both frames. When the display dimensions are ++ * smaller than the allocated dimensions, the content of the padding in the ++ * destination frame is unspecified. ++ * ++ * @param dst the destination frame. dst is not touched on failure. ++ * @param src the source frame. ++ * @param flags currently unused, should be set to zero ++ * @return 0 on success, a negative AVERROR error code on failure. ++ */ ++int av_hwframe_transfer_data(AVFrame* dst, const AVFrame* src, int flags); ++ ++enum AVHWFrameTransferDirection { ++ /** ++ * Transfer the data from the queried hw frame. ++ */ ++ AV_HWFRAME_TRANSFER_DIRECTION_FROM, ++ ++ /** ++ * Transfer the data to the queried hw frame. ++ */ ++ AV_HWFRAME_TRANSFER_DIRECTION_TO, ++}; ++ ++/** ++ * Get a list of possible source or target formats usable in ++ * av_hwframe_transfer_data(). ++ * ++ * @param hwframe_ctx the frame context to obtain the information for ++ * @param dir the direction of the transfer ++ * @param formats the pointer to the output format list will be written here. ++ * The list is terminated with AV_PIX_FMT_NONE and must be freed ++ * by the caller when no longer needed using av_free(). ++ * If this function returns successfully, the format list will ++ * have at least one item (not counting the terminator). ++ * On failure, the contents of this pointer are unspecified. ++ * @param flags currently unused, should be set to zero ++ * @return 0 on success, a negative AVERROR code on failure. ++ */ ++int av_hwframe_transfer_get_formats(AVBufferRef* hwframe_ctx, ++ enum AVHWFrameTransferDirection dir, ++ enum AVPixelFormat** formats, int flags); ++ ++/** ++ * This struct describes the constraints on hardware frames attached to ++ * a given device with a hardware-specific configuration. This is returned ++ * by av_hwdevice_get_hwframe_constraints() and must be freed by ++ * av_hwframe_constraints_free() after use. ++ */ ++typedef struct AVHWFramesConstraints { ++ /** ++ * A list of possible values for format in the hw_frames_ctx, ++ * terminated by AV_PIX_FMT_NONE. This member will always be filled. ++ */ ++ enum AVPixelFormat* valid_hw_formats; ++ ++ /** ++ * A list of possible values for sw_format in the hw_frames_ctx, ++ * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is ++ * not known. ++ */ ++ enum AVPixelFormat* valid_sw_formats; ++ ++ /** ++ * The minimum size of frames in this hw_frames_ctx. ++ * (Zero if not known.) ++ */ ++ int min_width; ++ int min_height; ++ ++ /** ++ * The maximum size of frames in this hw_frames_ctx. ++ * (INT_MAX if not known / no limit.) ++ */ ++ int max_width; ++ int max_height; ++} AVHWFramesConstraints; ++ ++/** ++ * Allocate a HW-specific configuration structure for a given HW device. ++ * After use, the user must free all members as required by the specific ++ * hardware structure being used, then free the structure itself with ++ * av_free(). ++ * ++ * @param device_ctx a reference to the associated AVHWDeviceContext. ++ * @return The newly created HW-specific configuration structure on ++ * success or NULL on failure. ++ */ ++void* av_hwdevice_hwconfig_alloc(AVBufferRef* device_ctx); ++ ++/** ++ * Get the constraints on HW frames given a device and the HW-specific ++ * configuration to be used with that device. If no HW-specific ++ * configuration is provided, returns the maximum possible capabilities ++ * of the device. ++ * ++ * @param ref a reference to the associated AVHWDeviceContext. ++ * @param hwconfig a filled HW-specific configuration structure, or NULL ++ * to return the maximum possible capabilities of the device. ++ * @return AVHWFramesConstraints structure describing the constraints ++ * on the device, or NULL if not available. ++ */ ++AVHWFramesConstraints* av_hwdevice_get_hwframe_constraints( ++ AVBufferRef* ref, const void* hwconfig); ++ ++/** ++ * Free an AVHWFrameConstraints structure. ++ * ++ * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. ++ */ ++void av_hwframe_constraints_free(AVHWFramesConstraints** constraints); ++ ++/** ++ * Flags to apply to frame mappings. ++ */ ++enum { ++ /** ++ * The mapping must be readable. ++ */ ++ AV_HWFRAME_MAP_READ = 1 << 0, ++ /** ++ * The mapping must be writeable. ++ */ ++ AV_HWFRAME_MAP_WRITE = 1 << 1, ++ /** ++ * The mapped frame will be overwritten completely in subsequent ++ * operations, so the current frame data need not be loaded. Any values ++ * which are not overwritten are unspecified. ++ */ ++ AV_HWFRAME_MAP_OVERWRITE = 1 << 2, ++ /** ++ * The mapping must be direct. That is, there must not be any copying in ++ * the map or unmap steps. Note that performance of direct mappings may ++ * be much lower than normal memory. ++ */ ++ AV_HWFRAME_MAP_DIRECT = 1 << 3, ++}; ++ ++/** ++ * Map a hardware frame. ++ * ++ * This has a number of different possible effects, depending on the format ++ * and origin of the src and dst frames. On input, src should be a usable ++ * frame with valid buffers and dst should be blank (typically as just created ++ * by av_frame_alloc()). src should have an associated hwframe context, and ++ * dst may optionally have a format and associated hwframe context. ++ * ++ * If src was created by mapping a frame from the hwframe context of dst, ++ * then this function undoes the mapping - dst is replaced by a reference to ++ * the frame that src was originally mapped from. ++ * ++ * If both src and dst have an associated hwframe context, then this function ++ * attempts to map the src frame from its hardware context to that of dst and ++ * then fill dst with appropriate data to be usable there. This will only be ++ * possible if the hwframe contexts and associated devices are compatible - ++ * given compatible devices, av_hwframe_ctx_create_derived() can be used to ++ * create a hwframe context for dst in which mapping should be possible. ++ * ++ * If src has a hwframe context but dst does not, then the src frame is ++ * mapped to normal memory and should thereafter be usable as a normal frame. ++ * If the format is set on dst, then the mapping will attempt to create dst ++ * with that format and fail if it is not possible. If format is unset (is ++ * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate ++ * format to use is (probably the sw_format of the src hwframe context). ++ * ++ * A return value of AVERROR(ENOSYS) indicates that the mapping is not ++ * possible with the given arguments and hwframe setup, while other return ++ * values indicate that it failed somehow. ++ * ++ * On failure, the destination frame will be left blank, except for the ++ * hw_frames_ctx/format fields thay may have been set by the caller - those will ++ * be preserved as they were. ++ * ++ * @param dst Destination frame, to contain the mapping. ++ * @param src Source frame, to be mapped. ++ * @param flags Some combination of AV_HWFRAME_MAP_* flags. ++ * @return Zero on success, negative AVERROR code on failure. ++ */ ++int av_hwframe_map(AVFrame* dst, const AVFrame* src, int flags); ++ ++/** ++ * Create and initialise an AVHWFramesContext as a mapping of another existing ++ * AVHWFramesContext on a different device. ++ * ++ * av_hwframe_ctx_init() should not be called after this. ++ * ++ * @param derived_frame_ctx On success, a reference to the newly created ++ * AVHWFramesContext. ++ * @param format The AVPixelFormat for the derived context. ++ * @param derived_device_ctx A reference to the device to create the new ++ * AVHWFramesContext on. ++ * @param source_frame_ctx A reference to an existing AVHWFramesContext ++ * which will be mapped to the derived context. ++ * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the ++ * mapping parameters to apply to frames which are allocated ++ * in the derived device. ++ * @return Zero on success, negative AVERROR code on failure. ++ */ ++int av_hwframe_ctx_create_derived(AVBufferRef** derived_frame_ctx, ++ enum AVPixelFormat format, ++ AVBufferRef* derived_device_ctx, ++ AVBufferRef* source_frame_ctx, int flags); ++ ++#endif /* AVUTIL_HWCONTEXT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,117 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVUTIL_HWCONTEXT_VAAPI_H ++#define AVUTIL_HWCONTEXT_VAAPI_H ++ ++#include ++ ++/** ++ * @file ++ * API-specific header for AV_HWDEVICE_TYPE_VAAPI. ++ * ++ * Dynamic frame pools are supported, but note that any pool used as a render ++ * target is required to be of fixed size in order to be be usable as an ++ * argument to vaCreateContext(). ++ * ++ * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs ++ * with the data pointer set to a VASurfaceID. ++ */ ++ ++enum { ++ /** ++ * The quirks field has been set by the user and should not be detected ++ * automatically by av_hwdevice_ctx_init(). ++ */ ++ AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), ++ /** ++ * The driver does not destroy parameter buffers when they are used by ++ * vaRenderPicture(). Additional code will be required to destroy them ++ * separately afterwards. ++ */ ++ AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), ++ ++ /** ++ * The driver does not support the VASurfaceAttribMemoryType attribute, ++ * so the surface allocation code will not try to use it. ++ */ ++ AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), ++ ++ /** ++ * The driver does not support surface attributes at all. ++ * The surface allocation code will never pass them to surface allocation, ++ * and the results of the vaQuerySurfaceAttributes() call will be faked. ++ */ ++ AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), ++}; ++ ++/** ++ * VAAPI connection details. ++ * ++ * Allocated as AVHWDeviceContext.hwctx ++ */ ++typedef struct AVVAAPIDeviceContext { ++ /** ++ * The VADisplay handle, to be filled by the user. ++ */ ++ VADisplay display; ++ /** ++ * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), ++ * with reference to a table of known drivers, unless the ++ * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user ++ * may need to refer to this field when performing any later ++ * operations using VAAPI with the same VADisplay. ++ */ ++ unsigned int driver_quirks; ++} AVVAAPIDeviceContext; ++ ++/** ++ * VAAPI-specific data associated with a frame pool. ++ * ++ * Allocated as AVHWFramesContext.hwctx. ++ */ ++typedef struct AVVAAPIFramesContext { ++ /** ++ * Set by the user to apply surface attributes to all surfaces in ++ * the frame pool. If null, default settings are used. ++ */ ++ VASurfaceAttrib* attributes; ++ int nb_attributes; ++ /** ++ * The surfaces IDs of all surfaces in the pool after creation. ++ * Only valid if AVHWFramesContext.initial_pool_size was positive. ++ * These are intended to be used as the render_targets arguments to ++ * vaCreateContext(). ++ */ ++ VASurfaceID* surface_ids; ++ int nb_surfaces; ++} AVVAAPIFramesContext; ++ ++/** ++ * VAAPI hardware pipeline configuration details. ++ * ++ * Allocated with av_hwdevice_hwconfig_alloc(). ++ */ ++typedef struct AVVAAPIHWConfig { ++ /** ++ * ID of a VAAPI pipeline configuration. ++ */ ++ VAConfigID config_id; ++} AVVAAPIHWConfig; ++ ++#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,73 @@ ++/* ++ * Copyright (c) 2011 Mans Rullgard ++ * ++ * 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 ++ */ ++ ++#ifndef AVUTIL_INTFLOAT_H ++#define AVUTIL_INTFLOAT_H ++ ++#include ++#include "attributes.h" ++ ++union av_intfloat32 { ++ uint32_t i; ++ float f; ++}; ++ ++union av_intfloat64 { ++ uint64_t i; ++ double f; ++}; ++ ++/** ++ * Reinterpret a 32-bit integer as a float. ++ */ ++static av_always_inline float av_int2float(uint32_t i) { ++ union av_intfloat32 v; ++ v.i = i; ++ return v.f; ++} ++ ++/** ++ * Reinterpret a float as a 32-bit integer. ++ */ ++static av_always_inline uint32_t av_float2int(float f) { ++ union av_intfloat32 v; ++ v.f = f; ++ return v.i; ++} ++ ++/** ++ * Reinterpret a 64-bit integer as a double. ++ */ ++static av_always_inline double av_int2double(uint64_t i) { ++ union av_intfloat64 v; ++ v.i = i; ++ return v.f; ++} ++ ++/** ++ * Reinterpret a double as a 64-bit integer. ++ */ ++static av_always_inline uint64_t av_double2int(double f) { ++ union av_intfloat64 v; ++ v.f = f; ++ return v.i; ++} ++ ++#endif /* AVUTIL_INTFLOAT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,388 @@ ++/* ++ * copyright (c) 2006 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++#ifndef AVUTIL_LOG_H ++#define AVUTIL_LOG_H ++ ++#include ++#include "attributes.h" ++#include "version.h" ++ ++typedef enum { ++ AV_CLASS_CATEGORY_NA = 0, ++ AV_CLASS_CATEGORY_INPUT, ++ AV_CLASS_CATEGORY_OUTPUT, ++ AV_CLASS_CATEGORY_MUXER, ++ AV_CLASS_CATEGORY_DEMUXER, ++ AV_CLASS_CATEGORY_ENCODER, ++ AV_CLASS_CATEGORY_DECODER, ++ AV_CLASS_CATEGORY_FILTER, ++ AV_CLASS_CATEGORY_BITSTREAM_FILTER, ++ AV_CLASS_CATEGORY_SWSCALER, ++ AV_CLASS_CATEGORY_SWRESAMPLER, ++ AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, ++ AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, ++ AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, ++ AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, ++ AV_CLASS_CATEGORY_DEVICE_OUTPUT, ++ AV_CLASS_CATEGORY_DEVICE_INPUT, ++ AV_CLASS_CATEGORY_NB ///< not part of ABI/API ++} AVClassCategory; ++ ++#define AV_IS_INPUT_DEVICE(category) \ ++ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ ++ ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ ++ ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) ++ ++#define AV_IS_OUTPUT_DEVICE(category) \ ++ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ ++ ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ ++ ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) ++ ++struct AVOptionRanges; ++ ++/** ++ * Describe the class of an AVClass context structure. That is an ++ * arbitrary struct of which the first field is a pointer to an ++ * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). ++ */ ++typedef struct AVClass { ++ /** ++ * The name of the class; usually it is the same name as the ++ * context structure type to which the AVClass is associated. ++ */ ++ const char* class_name; ++ ++ /** ++ * A pointer to a function which returns the name of a context ++ * instance ctx associated with the class. ++ */ ++ const char* (*item_name)(void* ctx); ++ ++ /** ++ * a pointer to the first option specified in the class if any or NULL ++ * ++ * @see av_set_default_options() ++ */ ++ const struct AVOption* option; ++ ++ /** ++ * LIBAVUTIL_VERSION with which this structure was created. ++ * This is used to allow fields to be added without requiring major ++ * version bumps everywhere. ++ */ ++ ++ int version; ++ ++ /** ++ * Offset in the structure where log_level_offset is stored. ++ * 0 means there is no such variable ++ */ ++ int log_level_offset_offset; ++ ++ /** ++ * Offset in the structure where a pointer to the parent context for ++ * logging is stored. For example a decoder could pass its AVCodecContext ++ * to eval as such a parent context, which an av_log() implementation ++ * could then leverage to display the parent context. ++ * The offset can be NULL. ++ */ ++ int parent_log_context_offset; ++ ++ /** ++ * Category used for visualization (like color) ++ * This is only set if the category is equal for all objects using this class. ++ * available since version (51 << 16 | 56 << 8 | 100) ++ */ ++ AVClassCategory category; ++ ++ /** ++ * Callback to return the category. ++ * available since version (51 << 16 | 59 << 8 | 100) ++ */ ++ AVClassCategory (*get_category)(void* ctx); ++ ++ /** ++ * Callback to return the supported/allowed ranges. ++ * available since version (52.12) ++ */ ++ int (*query_ranges)(struct AVOptionRanges**, void* obj, const char* key, ++ int flags); ++ ++ /** ++ * Return next AVOptions-enabled child or NULL ++ */ ++ void* (*child_next)(void* obj, void* prev); ++ ++ /** ++ * Iterate over the AVClasses corresponding to potential AVOptions-enabled ++ * children. ++ * ++ * @param iter pointer to opaque iteration state. The caller must initialize ++ * *iter to NULL before the first call. ++ * @return AVClass for the next AVOptions-enabled child or NULL if there are ++ * no more such children. ++ * ++ * @note The difference between child_next and this is that child_next ++ * iterates over _already existing_ objects, while child_class_iterate ++ * iterates over _all possible_ children. ++ */ ++ const struct AVClass* (*child_class_iterate)(void** iter); ++} AVClass; ++ ++/** ++ * @addtogroup lavu_log ++ * ++ * @{ ++ * ++ * @defgroup lavu_log_constants Logging Constants ++ * ++ * @{ ++ */ ++ ++/** ++ * Print no output. ++ */ ++#define AV_LOG_QUIET -8 ++ ++/** ++ * Something went really wrong and we will crash now. ++ */ ++#define AV_LOG_PANIC 0 ++ ++/** ++ * Something went wrong and recovery is not possible. ++ * For example, no header was found for a format which depends ++ * on headers or an illegal combination of parameters is used. ++ */ ++#define AV_LOG_FATAL 8 ++ ++/** ++ * Something went wrong and cannot losslessly be recovered. ++ * However, not all future data is affected. ++ */ ++#define AV_LOG_ERROR 16 ++ ++/** ++ * Something somehow does not look correct. This may or may not ++ * lead to problems. An example would be the use of '-vstrict -2'. ++ */ ++#define AV_LOG_WARNING 24 ++ ++/** ++ * Standard information. ++ */ ++#define AV_LOG_INFO 32 ++ ++/** ++ * Detailed information. ++ */ ++#define AV_LOG_VERBOSE 40 ++ ++/** ++ * Stuff which is only useful for libav* developers. ++ */ ++#define AV_LOG_DEBUG 48 ++ ++/** ++ * Extremely verbose debugging, useful for libav* development. ++ */ ++#define AV_LOG_TRACE 56 ++ ++#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) ++ ++/** ++ * @} ++ */ ++ ++/** ++ * Sets additional colors for extended debugging sessions. ++ * @code ++ av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); ++ @endcode ++ * Requires 256color terminal support. Uses outside debugging is not ++ * recommended. ++ */ ++#define AV_LOG_C(x) ((x) << 8) ++ ++/** ++ * Send the specified message to the log if the level is less than or equal ++ * to the current av_log_level. By default, all logging messages are sent to ++ * stderr. This behavior can be altered by setting a different logging callback ++ * function. ++ * @see av_log_set_callback ++ * ++ * @param avcl A pointer to an arbitrary struct of which the first field is a ++ * pointer to an AVClass struct or NULL if general log. ++ * @param level The importance level of the message expressed using a @ref ++ * lavu_log_constants "Logging Constant". ++ * @param fmt The format string (printf-compatible) that specifies how ++ * subsequent arguments are converted to output. ++ */ ++void av_log(void* avcl, int level, const char* fmt, ...) av_printf_format(3, 4); ++ ++/** ++ * Send the specified message to the log once with the initial_level and then ++ * with the subsequent_level. By default, all logging messages are sent to ++ * stderr. This behavior can be altered by setting a different logging callback ++ * function. ++ * @see av_log ++ * ++ * @param avcl A pointer to an arbitrary struct of which the first field is a ++ * pointer to an AVClass struct or NULL if general log. ++ * @param initial_level importance level of the message expressed using a @ref ++ * lavu_log_constants "Logging Constant" for the first occurance. ++ * @param subsequent_level importance level of the message expressed using a ++ * @ref lavu_log_constants "Logging Constant" after the first occurance. ++ * @param fmt The format string (printf-compatible) that specifies how ++ * subsequent arguments are converted to output. ++ * @param state a variable to keep trak of if a message has already been printed ++ * this must be initialized to 0 before the first use. The same state ++ * must not be accessed by 2 Threads simultaneously. ++ */ ++void av_log_once(void* avcl, int initial_level, int subsequent_level, ++ int* state, const char* fmt, ...) av_printf_format(5, 6); ++ ++/** ++ * Send the specified message to the log if the level is less than or equal ++ * to the current av_log_level. By default, all logging messages are sent to ++ * stderr. This behavior can be altered by setting a different logging callback ++ * function. ++ * @see av_log_set_callback ++ * ++ * @param avcl A pointer to an arbitrary struct of which the first field is a ++ * pointer to an AVClass struct. ++ * @param level The importance level of the message expressed using a @ref ++ * lavu_log_constants "Logging Constant". ++ * @param fmt The format string (printf-compatible) that specifies how ++ * subsequent arguments are converted to output. ++ * @param vl The arguments referenced by the format string. ++ */ ++void av_vlog(void* avcl, int level, const char* fmt, va_list vl); ++ ++/** ++ * Get the current log level ++ * ++ * @see lavu_log_constants ++ * ++ * @return Current log level ++ */ ++int av_log_get_level(void); ++ ++/** ++ * Set the log level ++ * ++ * @see lavu_log_constants ++ * ++ * @param level Logging level ++ */ ++void av_log_set_level(int level); ++ ++/** ++ * Set the logging callback ++ * ++ * @note The callback must be thread safe, even if the application does not use ++ * threads itself as some codecs are multithreaded. ++ * ++ * @see av_log_default_callback ++ * ++ * @param callback A logging function with a compatible signature. ++ */ ++void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); ++ ++/** ++ * Default logging callback ++ * ++ * It prints the message to stderr, optionally colorizing it. ++ * ++ * @param avcl A pointer to an arbitrary struct of which the first field is a ++ * pointer to an AVClass struct. ++ * @param level The importance level of the message expressed using a @ref ++ * lavu_log_constants "Logging Constant". ++ * @param fmt The format string (printf-compatible) that specifies how ++ * subsequent arguments are converted to output. ++ * @param vl The arguments referenced by the format string. ++ */ ++void av_log_default_callback(void* avcl, int level, const char* fmt, ++ va_list vl); ++ ++/** ++ * Return the context name ++ * ++ * @param ctx The AVClass context ++ * ++ * @return The AVClass class_name ++ */ ++const char* av_default_item_name(void* ctx); ++AVClassCategory av_default_get_category(void* ptr); ++ ++/** ++ * Format a line of log the same way as the default callback. ++ * @param line buffer to receive the formatted line ++ * @param line_size size of the buffer ++ * @param print_prefix used to store whether the prefix must be printed; ++ * must point to a persistent integer initially set to 1 ++ */ ++void av_log_format_line(void* ptr, int level, const char* fmt, va_list vl, ++ char* line, int line_size, int* print_prefix); ++ ++/** ++ * Format a line of log the same way as the default callback. ++ * @param line buffer to receive the formatted line; ++ * may be NULL if line_size is 0 ++ * @param line_size size of the buffer; at most line_size-1 characters will ++ * be written to the buffer, plus one null terminator ++ * @param print_prefix used to store whether the prefix must be printed; ++ * must point to a persistent integer initially set to 1 ++ * @return Returns a negative value if an error occurred, otherwise returns ++ * the number of characters that would have been written for a ++ * sufficiently large buffer, not including the terminating null ++ * character. If the return value is not less than line_size, it means ++ * that the log message was truncated to fit the buffer. ++ */ ++int av_log_format_line2(void* ptr, int level, const char* fmt, va_list vl, ++ char* line, int line_size, int* print_prefix); ++ ++/** ++ * Skip repeated messages, this requires the user app to use av_log() instead of ++ * (f)printf as the 2 would otherwise interfere and lead to ++ * "Last message repeated x times" messages below (f)printf messages with some ++ * bad luck. ++ * Also to receive the last, "last repeated" line if any, the user app must ++ * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end ++ */ ++#define AV_LOG_SKIP_REPEATED 1 ++ ++/** ++ * Include the log severity in messages originating from codecs. ++ * ++ * Results in messages such as: ++ * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts ++ */ ++#define AV_LOG_PRINT_LEVEL 2 ++ ++void av_log_set_flags(int arg); ++int av_log_get_flags(void); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_LOG_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,87 @@ ++/* ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @ingroup lavu ++ * Utility Preprocessor macros ++ */ ++ ++#ifndef AVUTIL_MACROS_H ++#define AVUTIL_MACROS_H ++ ++#include "libavutil/avconfig.h" ++ ++#if AV_HAVE_BIGENDIAN ++# define AV_NE(be, le) (be) ++#else ++# define AV_NE(be, le) (le) ++#endif ++ ++/** ++ * Comparator. ++ * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 ++ * if x == y. This is useful for instance in a qsort comparator callback. ++ * Furthermore, compilers are able to optimize this to branchless code, and ++ * there is no risk of overflow with signed types. ++ * As with many macros, this evaluates its argument multiple times, it thus ++ * must not have a side-effect. ++ */ ++#define FFDIFFSIGN(x, y) (((x) > (y)) - ((x) < (y))) ++ ++#define FFMAX(a, b) ((a) > (b) ? (a) : (b)) ++#define FFMAX3(a, b, c) FFMAX(FFMAX(a, b), c) ++#define FFMIN(a, b) ((a) > (b) ? (b) : (a)) ++#define FFMIN3(a, b, c) FFMIN(FFMIN(a, b), c) ++ ++#define FFSWAP(type, a, b) \ ++ do { \ ++ type SWAP_tmp = b; \ ++ b = a; \ ++ a = SWAP_tmp; \ ++ } while (0) ++#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) ++ ++#define MKTAG(a, b, c, d) \ ++ ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) ++#define MKBETAG(a, b, c, d) \ ++ ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) ++ ++/** ++ * @addtogroup preproc_misc Preprocessor String Macros ++ * ++ * String manipulation macros ++ * ++ * @{ ++ */ ++ ++#define AV_STRINGIFY(s) AV_TOSTRING(s) ++#define AV_TOSTRING(s) #s ++ ++#define AV_GLUE(a, b) a##b ++#define AV_JOIN(a, b) AV_GLUE(a, b) ++ ++/** ++ * @} ++ */ ++ ++#define AV_PRAGMA(s) _Pragma(#s) ++ ++#define FFALIGN(x, a) (((x) + (a)-1) & ~((a)-1)) ++ ++#endif /* AVUTIL_MACROS_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,249 @@ ++/* ++ * copyright (c) 2005-2012 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @addtogroup lavu_math ++ * Mathematical utilities for working with timestamp and time base. ++ */ ++ ++#ifndef AVUTIL_MATHEMATICS_H ++#define AVUTIL_MATHEMATICS_H ++ ++#include ++#include ++#include "attributes.h" ++#include "rational.h" ++#include "intfloat.h" ++ ++#ifndef M_E ++# define M_E 2.7182818284590452354 /* e */ ++#endif ++#ifndef M_LN2 ++# define M_LN2 0.69314718055994530942 /* log_e 2 */ ++#endif ++#ifndef M_LN10 ++# define M_LN10 2.30258509299404568402 /* log_e 10 */ ++#endif ++#ifndef M_LOG2_10 ++# define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ ++#endif ++#ifndef M_PHI ++# define M_PHI 1.61803398874989484820 /* phi / golden ratio */ ++#endif ++#ifndef M_PI ++# define M_PI 3.14159265358979323846 /* pi */ ++#endif ++#ifndef M_PI_2 ++# define M_PI_2 1.57079632679489661923 /* pi/2 */ ++#endif ++#ifndef M_SQRT1_2 ++# define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ ++#endif ++#ifndef M_SQRT2 ++# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ ++#endif ++#ifndef NAN ++# define NAN av_int2float(0x7fc00000) ++#endif ++#ifndef INFINITY ++# define INFINITY av_int2float(0x7f800000) ++#endif ++ ++/** ++ * @addtogroup lavu_math ++ * ++ * @{ ++ */ ++ ++/** ++ * Rounding methods. ++ */ ++enum AVRounding { ++ AV_ROUND_ZERO = 0, ///< Round toward zero. ++ AV_ROUND_INF = 1, ///< Round away from zero. ++ AV_ROUND_DOWN = 2, ///< Round toward -infinity. ++ AV_ROUND_UP = 3, ///< Round toward +infinity. ++ AV_ROUND_NEAR_INF = ++ 5, ///< Round to nearest and halfway cases away from zero. ++ /** ++ * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through ++ * unchanged, avoiding special cases for #AV_NOPTS_VALUE. ++ * ++ * Unlike other values of the enumeration AVRounding, this value is a ++ * bitmask that must be used in conjunction with another value of the ++ * enumeration through a bitwise OR, in order to set behavior for normal ++ * cases. ++ * ++ * @code{.c} ++ * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); ++ * // Rescaling 3: ++ * // Calculating 3 * 1 / 2 ++ * // 3 / 2 is rounded up to 2 ++ * // => 2 ++ * ++ * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); ++ * // Rescaling AV_NOPTS_VALUE: ++ * // AV_NOPTS_VALUE == INT64_MIN ++ * // AV_NOPTS_VALUE is passed through ++ * // => AV_NOPTS_VALUE ++ * @endcode ++ */ ++ AV_ROUND_PASS_MINMAX = 8192, ++}; ++ ++/** ++ * Compute the greatest common divisor of two integer operands. ++ * ++ * @param a Operand ++ * @param b Operand ++ * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= ++ * 0; if a == 0 and b == 0, returns 0. ++ */ ++int64_t av_const av_gcd(int64_t a, int64_t b); ++ ++/** ++ * Rescale a 64-bit integer with rounding to nearest. ++ * ++ * The operation is mathematically equivalent to `a * b / c`, but writing that ++ * directly can overflow. ++ * ++ * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. ++ * ++ * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() ++ */ ++int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; ++ ++/** ++ * Rescale a 64-bit integer with specified rounding. ++ * ++ * The operation is mathematically equivalent to `a * b / c`, but writing that ++ * directly can overflow, and does not support different rounding methods. ++ * If the result is not representable then INT64_MIN is returned. ++ * ++ * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() ++ */ ++int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, ++ enum AVRounding rnd) av_const; ++ ++/** ++ * Rescale a 64-bit integer by 2 rational numbers. ++ * ++ * The operation is mathematically equivalent to `a * bq / cq`. ++ * ++ * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. ++ * ++ * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() ++ */ ++int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; ++ ++/** ++ * Rescale a 64-bit integer by 2 rational numbers with specified rounding. ++ * ++ * The operation is mathematically equivalent to `a * bq / cq`. ++ * ++ * @see av_rescale(), av_rescale_rnd(), av_rescale_q() ++ */ ++int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, ++ enum AVRounding rnd) av_const; ++ ++/** ++ * Compare two timestamps each in its own time base. ++ * ++ * @return One of the following values: ++ * - -1 if `ts_a` is before `ts_b` ++ * - 1 if `ts_a` is after `ts_b` ++ * - 0 if they represent the same position ++ * ++ * @warning ++ * The result of the function is undefined if one of the timestamps is outside ++ * the `int64_t` range when represented in the other's timebase. ++ */ ++int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); ++ ++/** ++ * Compare the remainders of two integer operands divided by a common divisor. ++ * ++ * In other words, compare the least significant `log2(mod)` bits of integers ++ * `a` and `b`. ++ * ++ * @code{.c} ++ * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % ++ * 0x10 (0x2) av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) ++ * > 0x02 % 0x20 (0x02) ++ * @endcode ++ * ++ * @param a Operand ++ * @param b Operand ++ * @param mod Divisor; must be a power of 2 ++ * @return ++ * - a negative value if `a % mod < b % mod` ++ * - a positive value if `a % mod > b % mod` ++ * - zero if `a % mod == b % mod` ++ */ ++int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); ++ ++/** ++ * Rescale a timestamp while preserving known durations. ++ * ++ * This function is designed to be called per audio packet to scale the input ++ * timestamp to a different time base. Compared to a simple av_rescale_q() ++ * call, this function is robust against possible inconsistent frame durations. ++ * ++ * The `last` parameter is a state variable that must be preserved for all ++ * subsequent calls for the same stream. For the first call, `*last` should be ++ * initialized to #AV_NOPTS_VALUE. ++ * ++ * @param[in] in_tb Input time base ++ * @param[in] in_ts Input timestamp ++ * @param[in] fs_tb Duration time base; typically this is finer-grained ++ * (greater) than `in_tb` and `out_tb` ++ * @param[in] duration Duration till the next call to this function (i.e. ++ * duration of the current packet/frame) ++ * @param[in,out] last Pointer to a timestamp expressed in terms of ++ * `fs_tb`, acting as a state variable ++ * @param[in] out_tb Output timebase ++ * @return Timestamp expressed in terms of `out_tb` ++ * ++ * @note In the context of this function, "duration" is in term of samples, not ++ * seconds. ++ */ ++int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, ++ int duration, int64_t* last, AVRational out_tb); ++ ++/** ++ * Add a value to a timestamp. ++ * ++ * This function guarantees that when the same value is repeatly added that ++ * no accumulation of rounding errors occurs. ++ * ++ * @param[in] ts Input timestamp ++ * @param[in] ts_tb Input timestamp time base ++ * @param[in] inc Value to be added ++ * @param[in] inc_tb Time base of `inc` ++ */ ++int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, ++ int64_t inc); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_MATHEMATICS_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,613 @@ ++/* ++ * copyright (c) 2006 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @ingroup lavu_mem ++ * Memory handling functions ++ */ ++ ++#ifndef AVUTIL_MEM_H ++#define AVUTIL_MEM_H ++ ++#include ++#include ++ ++#include "attributes.h" ++#include "avutil.h" ++#include "version.h" ++ ++/** ++ * @addtogroup lavu_mem ++ * Utilities for manipulating memory. ++ * ++ * FFmpeg has several applications of memory that are not required of a typical ++ * program. For example, the computing-heavy components like video decoding and ++ * encoding can be sped up significantly through the use of aligned memory. ++ * ++ * However, for each of FFmpeg's applications of memory, there might not be a ++ * recognized or standardized API for that specific use. Memory alignment, for ++ * instance, varies wildly depending on operating systems, architectures, and ++ * compilers. Hence, this component of @ref libavutil is created to make ++ * dealing with memory consistently possible on all platforms. ++ * ++ * @{ ++ */ ++ ++/** ++ * @defgroup lavu_mem_attrs Function Attributes ++ * Function attributes applicable to memory handling functions. ++ * ++ * These function attributes can help compilers emit more useful warnings, or ++ * generate better code. ++ * @{ ++ */ ++ ++/** ++ * @def av_malloc_attrib ++ * Function attribute denoting a malloc-like function. ++ * ++ * @see Function ++ * attribute `malloc` in GCC's documentation ++ */ ++ ++#if AV_GCC_VERSION_AT_LEAST(3, 1) ++# define av_malloc_attrib __attribute__((__malloc__)) ++#else ++# define av_malloc_attrib ++#endif ++ ++/** ++ * @def av_alloc_size(...) ++ * Function attribute used on a function that allocates memory, whose size is ++ * given by the specified parameter(s). ++ * ++ * @code{.c} ++ * void *av_malloc(size_t size) av_alloc_size(1); ++ * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); ++ * @endcode ++ * ++ * @param ... One or two parameter indexes, separated by a comma ++ * ++ * @see Function ++ * attribute `alloc_size` in GCC's documentation ++ */ ++ ++#if AV_GCC_VERSION_AT_LEAST(4, 3) ++# define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) ++#else ++# define av_alloc_size(...) ++#endif ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @defgroup lavu_mem_funcs Heap Management ++ * Functions responsible for allocating, freeing, and copying memory. ++ * ++ * All memory allocation functions have a built-in upper limit of `INT_MAX` ++ * bytes. This may be changed with av_max_alloc(), although exercise extreme ++ * caution when doing so. ++ * ++ * @{ ++ */ ++ ++/** ++ * Allocate a memory block with alignment suitable for all memory accesses ++ * (including vectors if available on the CPU). ++ * ++ * @param size Size in bytes for the memory block to be allocated ++ * @return Pointer to the allocated block, or `NULL` if the block cannot ++ * be allocated ++ * @see av_mallocz() ++ */ ++void* av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); ++ ++/** ++ * Allocate a memory block with alignment suitable for all memory accesses ++ * (including vectors if available on the CPU) and zero all the bytes of the ++ * block. ++ * ++ * @param size Size in bytes for the memory block to be allocated ++ * @return Pointer to the allocated block, or `NULL` if it cannot be allocated ++ * @see av_malloc() ++ */ ++void* av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); ++ ++/** ++ * Allocate a memory block for an array with av_malloc(). ++ * ++ * The allocated memory will have size `size * nmemb` bytes. ++ * ++ * @param nmemb Number of element ++ * @param size Size of a single element ++ * @return Pointer to the allocated block, or `NULL` if the block cannot ++ * be allocated ++ * @see av_malloc() ++ */ ++av_alloc_size(1, 2) void* av_malloc_array(size_t nmemb, size_t size); ++ ++/** ++ * Allocate a memory block for an array with av_mallocz(). ++ * ++ * The allocated memory will have size `size * nmemb` bytes. ++ * ++ * @param nmemb Number of elements ++ * @param size Size of the single element ++ * @return Pointer to the allocated block, or `NULL` if the block cannot ++ * be allocated ++ * ++ * @see av_mallocz() ++ * @see av_malloc_array() ++ */ ++void* av_calloc(size_t nmemb, size_t size) av_malloc_attrib av_alloc_size(1, 2); ++ ++/** ++ * Allocate, reallocate, or free a block of memory. ++ * ++ * If `ptr` is `NULL` and `size` > 0, allocate a new block. Otherwise, expand or ++ * shrink that block of memory according to `size`. ++ * ++ * @param ptr Pointer to a memory block already allocated with ++ * av_realloc() or `NULL` ++ * @param size Size in bytes of the memory block to be allocated or ++ * reallocated ++ * ++ * @return Pointer to a newly-reallocated block or `NULL` if the block ++ * cannot be reallocated ++ * ++ * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be ++ * correctly aligned. The returned pointer must be freed after even ++ * if size is zero. ++ * @see av_fast_realloc() ++ * @see av_reallocp() ++ */ ++void* av_realloc(void* ptr, size_t size) av_alloc_size(2); ++ ++/** ++ * Allocate, reallocate, or free a block of memory through a pointer to a ++ * pointer. ++ * ++ * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is ++ * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or ++ * shrink that block of memory according to `size`. ++ * ++ * @param[in,out] ptr Pointer to a pointer to a memory block already allocated ++ * with av_realloc(), or a pointer to `NULL`. The pointer ++ * is updated on success, or freed on failure. ++ * @param[in] size Size in bytes for the memory block to be allocated or ++ * reallocated ++ * ++ * @return Zero on success, an AVERROR error code on failure ++ * ++ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be ++ * correctly aligned. ++ */ ++av_warn_unused_result int av_reallocp(void* ptr, size_t size); ++ ++/** ++ * Allocate, reallocate, or free a block of memory. ++ * ++ * This function does the same thing as av_realloc(), except: ++ * - It takes two size arguments and allocates `nelem * elsize` bytes, ++ * after checking the result of the multiplication for integer overflow. ++ * - It frees the input block in case of failure, thus avoiding the memory ++ * leak with the classic ++ * @code{.c} ++ * buf = realloc(buf); ++ * if (!buf) ++ * return -1; ++ * @endcode ++ * pattern. ++ */ ++void* av_realloc_f(void* ptr, size_t nelem, size_t elsize); ++ ++/** ++ * Allocate, reallocate, or free an array. ++ * ++ * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. ++ * ++ * @param ptr Pointer to a memory block already allocated with ++ * av_realloc() or `NULL` ++ * @param nmemb Number of elements in the array ++ * @param size Size of the single element of the array ++ * ++ * @return Pointer to a newly-reallocated block or NULL if the block ++ * cannot be reallocated ++ * ++ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be ++ * correctly aligned. The returned pointer must be freed after even if ++ * nmemb is zero. ++ * @see av_reallocp_array() ++ */ ++av_alloc_size(2, 3) void* av_realloc_array(void* ptr, size_t nmemb, ++ size_t size); ++ ++/** ++ * Allocate, reallocate an array through a pointer to a pointer. ++ * ++ * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. ++ * ++ * @param[in,out] ptr Pointer to a pointer to a memory block already ++ * allocated with av_realloc(), or a pointer to `NULL`. ++ * The pointer is updated on success, or freed on failure. ++ * @param[in] nmemb Number of elements ++ * @param[in] size Size of the single element ++ * ++ * @return Zero on success, an AVERROR error code on failure ++ * ++ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be ++ * correctly aligned. *ptr must be freed after even if nmemb is zero. ++ */ ++int av_reallocp_array(void* ptr, size_t nmemb, size_t size); ++ ++/** ++ * Reallocate the given buffer if it is not large enough, otherwise do nothing. ++ * ++ * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. ++ * ++ * If the given buffer is not large enough, and reallocation fails, `NULL` is ++ * returned and `*size` is set to 0, but the original buffer is not changed or ++ * freed. ++ * ++ * A typical use pattern follows: ++ * ++ * @code{.c} ++ * uint8_t *buf = ...; ++ * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); ++ * if (!new_buf) { ++ * // Allocation failed; clean up original buffer ++ * av_freep(&buf); ++ * return AVERROR(ENOMEM); ++ * } ++ * @endcode ++ * ++ * @param[in,out] ptr Already allocated buffer, or `NULL` ++ * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is ++ * updated to the new allocated size, in particular 0 ++ * in case of failure. ++ * @param[in] min_size Desired minimal size of buffer `ptr` ++ * @return `ptr` if the buffer is large enough, a pointer to newly reallocated ++ * buffer if the buffer was not large enough, or `NULL` in case of ++ * error ++ * @see av_realloc() ++ * @see av_fast_malloc() ++ */ ++void* av_fast_realloc(void* ptr, unsigned int* size, size_t min_size); ++ ++/** ++ * Allocate a buffer, reusing the given one if large enough. ++ * ++ * Contrary to av_fast_realloc(), the current buffer contents might not be ++ * preserved and on error the old buffer is freed, thus no special handling to ++ * avoid memleaks is necessary. ++ * ++ * `*ptr` is allowed to be `NULL`, in which case allocation always happens if ++ * `size_needed` is greater than 0. ++ * ++ * @code{.c} ++ * uint8_t *buf = ...; ++ * av_fast_malloc(&buf, ¤t_size, size_needed); ++ * if (!buf) { ++ * // Allocation failed; buf already freed ++ * return AVERROR(ENOMEM); ++ * } ++ * @endcode ++ * ++ * @param[in,out] ptr Pointer to pointer to an already allocated buffer. ++ * `*ptr` will be overwritten with pointer to new ++ * buffer on success or `NULL` on failure ++ * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is ++ * updated to the new allocated size, in particular 0 ++ * in case of failure. ++ * @param[in] min_size Desired minimal size of buffer `*ptr` ++ * @see av_realloc() ++ * @see av_fast_mallocz() ++ */ ++void av_fast_malloc(void* ptr, unsigned int* size, size_t min_size); ++ ++/** ++ * Allocate and clear a buffer, reusing the given one if large enough. ++ * ++ * Like av_fast_malloc(), but all newly allocated space is initially cleared. ++ * Reused buffer is not cleared. ++ * ++ * `*ptr` is allowed to be `NULL`, in which case allocation always happens if ++ * `size_needed` is greater than 0. ++ * ++ * @param[in,out] ptr Pointer to pointer to an already allocated buffer. ++ * `*ptr` will be overwritten with pointer to new ++ * buffer on success or `NULL` on failure ++ * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is ++ * updated to the new allocated size, in particular 0 ++ * in case of failure. ++ * @param[in] min_size Desired minimal size of buffer `*ptr` ++ * @see av_fast_malloc() ++ */ ++void av_fast_mallocz(void* ptr, unsigned int* size, size_t min_size); ++ ++/** ++ * Free a memory block which has been allocated with a function of av_malloc() ++ * or av_realloc() family. ++ * ++ * @param ptr Pointer to the memory block which should be freed. ++ * ++ * @note `ptr = NULL` is explicitly allowed. ++ * @note It is recommended that you use av_freep() instead, to prevent leaving ++ * behind dangling pointers. ++ * @see av_freep() ++ */ ++void av_free(void* ptr); ++ ++/** ++ * Free a memory block which has been allocated with a function of av_malloc() ++ * or av_realloc() family, and set the pointer pointing to it to `NULL`. ++ * ++ * @code{.c} ++ * uint8_t *buf = av_malloc(16); ++ * av_free(buf); ++ * // buf now contains a dangling pointer to freed memory, and accidental ++ * // dereference of buf will result in a use-after-free, which may be a ++ * // security risk. ++ * ++ * uint8_t *buf = av_malloc(16); ++ * av_freep(&buf); ++ * // buf is now NULL, and accidental dereference will only result in a ++ * // NULL-pointer dereference. ++ * @endcode ++ * ++ * @param ptr Pointer to the pointer to the memory block which should be freed ++ * @note `*ptr = NULL` is safe and leads to no action. ++ * @see av_free() ++ */ ++void av_freep(void* ptr); ++ ++/** ++ * Duplicate a string. ++ * ++ * @param s String to be duplicated ++ * @return Pointer to a newly-allocated string containing a ++ * copy of `s` or `NULL` if the string cannot be allocated ++ * @see av_strndup() ++ */ ++char* av_strdup(const char* s) av_malloc_attrib; ++ ++/** ++ * Duplicate a substring of a string. ++ * ++ * @param s String to be duplicated ++ * @param len Maximum length of the resulting string (not counting the ++ * terminating byte) ++ * @return Pointer to a newly-allocated string containing a ++ * substring of `s` or `NULL` if the string cannot be allocated ++ */ ++char* av_strndup(const char* s, size_t len) av_malloc_attrib; ++ ++/** ++ * Duplicate a buffer with av_malloc(). ++ * ++ * @param p Buffer to be duplicated ++ * @param size Size in bytes of the buffer copied ++ * @return Pointer to a newly allocated buffer containing a ++ * copy of `p` or `NULL` if the buffer cannot be allocated ++ */ ++void* av_memdup(const void* p, size_t size); ++ ++/** ++ * Overlapping memcpy() implementation. ++ * ++ * @param dst Destination buffer ++ * @param back Number of bytes back to start copying (i.e. the initial size of ++ * the overlapping window); must be > 0 ++ * @param cnt Number of bytes to copy; must be >= 0 ++ * ++ * @note `cnt > back` is valid, this will copy the bytes we just copied, ++ * thus creating a repeating pattern with a period length of `back`. ++ */ ++void av_memcpy_backptr(uint8_t* dst, int back, int cnt); ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @defgroup lavu_mem_dynarray Dynamic Array ++ * ++ * Utilities to make an array grow when needed. ++ * ++ * Sometimes, the programmer would want to have an array that can grow when ++ * needed. The libavutil dynamic array utilities fill that need. ++ * ++ * libavutil supports two systems of appending elements onto a dynamically ++ * allocated array, the first one storing the pointer to the value in the ++ * array, and the second storing the value directly. In both systems, the ++ * caller is responsible for maintaining a variable containing the length of ++ * the array, as well as freeing of the array after use. ++ * ++ * The first system stores pointers to values in a block of dynamically ++ * allocated memory. Since only pointers are stored, the function does not need ++ * to know the size of the type. Both av_dynarray_add() and ++ * av_dynarray_add_nofree() implement this system. ++ * ++ * @code ++ * type **array = NULL; //< an array of pointers to values ++ * int nb = 0; //< a variable to keep track of the length of the array ++ * ++ * type to_be_added = ...; ++ * type to_be_added2 = ...; ++ * ++ * av_dynarray_add(&array, &nb, &to_be_added); ++ * if (nb == 0) ++ * return AVERROR(ENOMEM); ++ * ++ * av_dynarray_add(&array, &nb, &to_be_added2); ++ * if (nb == 0) ++ * return AVERROR(ENOMEM); ++ * ++ * // Now: ++ * // nb == 2 ++ * // &to_be_added == array[0] ++ * // &to_be_added2 == array[1] ++ * ++ * av_freep(&array); ++ * @endcode ++ * ++ * The second system stores the value directly in a block of memory. As a ++ * result, the function has to know the size of the type. av_dynarray2_add() ++ * implements this mechanism. ++ * ++ * @code ++ * type *array = NULL; //< an array of values ++ * int nb = 0; //< a variable to keep track of the length of the array ++ * ++ * type to_be_added = ...; ++ * type to_be_added2 = ...; ++ * ++ * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); ++ * if (!addr) ++ * return AVERROR(ENOMEM); ++ * memcpy(addr, &to_be_added, sizeof(to_be_added)); ++ * ++ * // Shortcut of the above. ++ * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), ++ * (const void *)&to_be_added2); ++ * if (!addr) ++ * return AVERROR(ENOMEM); ++ * ++ * // Now: ++ * // nb == 2 ++ * // to_be_added == array[0] ++ * // to_be_added2 == array[1] ++ * ++ * av_freep(&array); ++ * @endcode ++ * ++ * @{ ++ */ ++ ++/** ++ * Add the pointer to an element to a dynamic array. ++ * ++ * The array to grow is supposed to be an array of pointers to ++ * structures, and the element to add must be a pointer to an already ++ * allocated structure. ++ * ++ * The array is reallocated when its size reaches powers of 2. ++ * Therefore, the amortized cost of adding an element is constant. ++ * ++ * In case of success, the pointer to the array is updated in order to ++ * point to the new grown array, and the number pointed to by `nb_ptr` ++ * is incremented. ++ * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and ++ * `*nb_ptr` is set to 0. ++ * ++ * @param[in,out] tab_ptr Pointer to the array to grow ++ * @param[in,out] nb_ptr Pointer to the number of elements in the array ++ * @param[in] elem Element to add ++ * @see av_dynarray_add_nofree(), av_dynarray2_add() ++ */ ++void av_dynarray_add(void* tab_ptr, int* nb_ptr, void* elem); ++ ++/** ++ * Add an element to a dynamic array. ++ * ++ * Function has the same functionality as av_dynarray_add(), ++ * but it doesn't free memory on fails. It returns error code ++ * instead and leave current buffer untouched. ++ * ++ * @return >=0 on success, negative otherwise ++ * @see av_dynarray_add(), av_dynarray2_add() ++ */ ++av_warn_unused_result int av_dynarray_add_nofree(void* tab_ptr, int* nb_ptr, ++ void* elem); ++ ++/** ++ * Add an element of size `elem_size` to a dynamic array. ++ * ++ * The array is reallocated when its number of elements reaches powers of 2. ++ * Therefore, the amortized cost of adding an element is constant. ++ * ++ * In case of success, the pointer to the array is updated in order to ++ * point to the new grown array, and the number pointed to by `nb_ptr` ++ * is incremented. ++ * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and ++ * `*nb_ptr` is set to 0. ++ * ++ * @param[in,out] tab_ptr Pointer to the array to grow ++ * @param[in,out] nb_ptr Pointer to the number of elements in the array ++ * @param[in] elem_size Size in bytes of an element in the array ++ * @param[in] elem_data Pointer to the data of the element to add. If ++ * `NULL`, the space of the newly added element is ++ * allocated but left uninitialized. ++ * ++ * @return Pointer to the data of the element to copy in the newly allocated ++ * space ++ * @see av_dynarray_add(), av_dynarray_add_nofree() ++ */ ++void* av_dynarray2_add(void** tab_ptr, int* nb_ptr, size_t elem_size, ++ const uint8_t* elem_data); ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @defgroup lavu_mem_misc Miscellaneous Functions ++ * ++ * Other functions related to memory allocation. ++ * ++ * @{ ++ */ ++ ++/** ++ * Multiply two `size_t` values checking for overflow. ++ * ++ * @param[in] a Operand of multiplication ++ * @param[in] b Operand of multiplication ++ * @param[out] r Pointer to the result of the operation ++ * @return 0 on success, AVERROR(EINVAL) on overflow ++ */ ++int av_size_mult(size_t a, size_t b, size_t* r); ++ ++/** ++ * Set the maximum size that may be allocated in one block. ++ * ++ * The value specified with this function is effective for all libavutil's @ref ++ * lavu_mem_funcs "heap management functions." ++ * ++ * By default, the max value is defined as `INT_MAX`. ++ * ++ * @param max Value to be set as the new maximum size ++ * ++ * @warning Exercise extreme caution when using this function. Don't touch ++ * this if you do not understand the full consequence of doing so. ++ */ ++void av_max_alloc(size_t max); ++ ++/** ++ * @} ++ * @} ++ */ ++ ++#endif /* AVUTIL_MEM_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,891 @@ ++/* ++ * copyright (c) 2006 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++#ifndef AVUTIL_PIXFMT_H ++#define AVUTIL_PIXFMT_H ++ ++/** ++ * @file ++ * pixel format definitions ++ */ ++ ++#include "libavutil/avconfig.h" ++#include "version.h" ++ ++#define AVPALETTE_SIZE 1024 ++#define AVPALETTE_COUNT 256 ++ ++/** ++ * Pixel format. ++ * ++ * @note ++ * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA ++ * color is put together as: ++ * (A << 24) | (R << 16) | (G << 8) | B ++ * This is stored as BGRA on little-endian CPU architectures and ARGB on ++ * big-endian CPUs. ++ * ++ * @note ++ * If the resolution is not a multiple of the chroma subsampling factor ++ * then the chroma plane resolution must be rounded up. ++ * ++ * @par ++ * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized ++ * image data is stored in AVFrame.data[0]. The palette is transported in ++ * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is ++ * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is ++ * also endian-specific). Note also that the individual RGB32 palette ++ * components stored in AVFrame.data[1] should be in the range 0..255. ++ * This is important as many custom PAL8 video codecs that were designed ++ * to run on the IBM VGA graphics adapter use 6-bit palette components. ++ * ++ * @par ++ * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like ++ * for pal8. This palette is filled in automatically by the function ++ * allocating the picture. ++ */ ++enum AVPixelFormat { ++ AV_PIX_FMT_NONE = -1, ++ AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y ++ ///< samples) ++ AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr ++ AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... ++ AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... ++ AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y ++ ///< samples) ++ AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y ++ ///< samples) ++ AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y ++ ///< samples) ++ AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y ++ ///< samples) ++ AV_PIX_FMT_GRAY8, ///< Y , 8bpp ++ AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, ++ ///< in each byte pixels are ordered from the ++ ///< msb to the lsb ++ AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, ++ ///< in each byte pixels are ordered from the ++ ///< msb to the lsb ++ AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette ++ AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), ++ ///< deprecated in favor of AV_PIX_FMT_YUV420P and ++ ///< setting color_range ++ AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), ++ ///< deprecated in favor of AV_PIX_FMT_YUV422P and ++ ///< setting color_range ++ AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), ++ ///< deprecated in favor of AV_PIX_FMT_YUV444P and ++ ///< setting color_range ++ AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 ++ AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 ++ AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) ++ AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), ++ ///< a byte contains two pixels, the first pixel in the byte ++ ///< is the one composed by the 4 msb bits ++ AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) ++ AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) ++ AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), ++ ///< a byte contains two pixels, the first pixel in the byte ++ ///< is the one composed by the 4 msb bits ++ AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) ++ AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for ++ ///< the UV components, which are interleaved (first byte U ++ ///< and the following byte V) ++ AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped ++ ++ AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... ++ AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... ++ AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... ++ AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... ++ ++ AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian ++ AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian ++ AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y ++ ///< samples) ++ AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in ++ ///< favor of AV_PIX_FMT_YUV440P and setting color_range ++ AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 ++ ///< Y & A samples) ++ AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the ++ ///< 2-byte value for each R/G/B component is stored as ++ ///< big-endian ++ AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the ++ ///< 2-byte value for each R/G/B component is stored as ++ ///< little-endian ++ ++ AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), ++ ///< big-endian ++ AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), ++ ///< little-endian ++ AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), ++ ///< big-endian , X=unused/undefined ++ AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), ++ ///< little-endian, X=unused/undefined ++ ++ AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), ++ ///< big-endian ++ AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), ++ ///< little-endian ++ AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), ++ ///< big-endian , X=unused/undefined ++ AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), ++ ///< little-endian, X=unused/undefined ++ ++ /** ++ * Hardware acceleration through VA-API, data[3] contains a ++ * VASurfaceID. ++ */ ++ AV_PIX_FMT_VAAPI, ++ ++ AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), little-endian ++ AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), big-endian ++ AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), little-endian ++ AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), big-endian ++ AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), little-endian ++ AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), big-endian ++ AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] ++ ///< contains a LPDIRECT3DSURFACE9 pointer ++ ++ AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), ++ ///< little-endian, X=unused/undefined ++ AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), ++ ///< big-endian, X=unused/undefined ++ AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), ++ ///< little-endian, X=unused/undefined ++ AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), ++ ///< big-endian, X=unused/undefined ++ AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha ++ ++ AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 ++ AV_PIX_FMT_GRAY8A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 ++ ++ AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the ++ ///< 2-byte value for each R/G/B component is stored as ++ ///< big-endian ++ AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the ++ ///< 2-byte value for each R/G/B component is stored as ++ ///< little-endian ++ ++ /** ++ * The following 12 formats have the disadvantage of needing 1 format for each ++ * bit depth. Notice that each 9/10 bits sample is stored in 16 bits with ++ * extra padding. If you want to support multiple bit depths, then using ++ * AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. ++ */ ++ AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), big-endian ++ AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), little-endian ++ AV_PIX_FMT_YUV420P10BE, ///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), big-endian ++ AV_PIX_FMT_YUV420P10LE, ///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), little-endian ++ AV_PIX_FMT_YUV422P10BE, ///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), big-endian ++ AV_PIX_FMT_YUV422P10LE, ///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), little-endian ++ AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), big-endian ++ AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), little-endian ++ AV_PIX_FMT_YUV444P10BE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), big-endian ++ AV_PIX_FMT_YUV444P10LE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), little-endian ++ AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), big-endian ++ AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), little-endian ++ AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp ++ AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP ++ AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian ++ AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian ++ AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian ++ AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian ++ AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian ++ AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian ++ AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y ++ ///< & A samples) ++ AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y ++ ///< & A samples) ++ AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y & A samples), big-endian ++ AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y & A samples), little-endian ++ AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y & A samples), big-endian ++ AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y & A samples), little-endian ++ AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y & A samples), big-endian ++ AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y & A samples), little-endian ++ AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y & A samples, big-endian) ++ AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y & A samples, little-endian) ++ AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y & A samples, big-endian) ++ AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y & A samples, little-endian) ++ AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y & A samples, big-endian) ++ AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y & A samples, little-endian) ++ AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y & A samples, big-endian) ++ AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y & A samples, little-endian) ++ AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y & A samples, big-endian) ++ AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y & A samples, little-endian) ++ AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y & A samples, big-endian) ++ AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y & A samples, little-endian) ++ ++ AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] ++ ///< contains a VdpVideoSurface ++ ++ AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), ++ ///< the 2-byte value for each X/Y/Z is stored as ++ ///< little-endian, the 4 lower bits are set to 0 ++ AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), ++ ///< the 2-byte value for each X/Y/Z is stored as ++ ///< big-endian, the 4 lower bits are set to 0 ++ AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample ++ ///< per 2x1 Y samples) ++ AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb ++ ///< sample per 2x1 Y samples), little-endian ++ AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb ++ ///< sample per 2x1 Y samples), big-endian ++ ++ AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, ++ ///< the 2-byte value for each R/G/B/A component is ++ ///< stored as big-endian ++ AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, ++ ///< the 2-byte value for each R/G/B/A component is ++ ///< stored as little-endian ++ AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, ++ ///< the 2-byte value for each R/G/B/A component is ++ ///< stored as big-endian ++ AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, ++ ///< the 2-byte value for each R/G/B/A component is ++ ///< stored as little-endian ++ ++ AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb ++ ++ AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) ++ AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) ++ ++ AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp ++ AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian ++ AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian ++ /** ++ * HW acceleration through QSV, data[3] contains a pointer to the ++ * mfxFrameSurface1 structure. ++ * ++ * Before FFmpeg 5.0: ++ * mfxFrameSurface1.Data.MemId contains a pointer when importing ++ * the following frames as QSV frames: ++ * ++ * VAAPI: ++ * mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID ++ * ++ * DXVA2: ++ * mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9 ++ * ++ * FFmpeg 5.0 and above: ++ * mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair ++ * structure when importing the following frames as QSV frames: ++ * ++ * VAAPI: ++ * mfxHDLPair.first contains a VASurfaceID pointer. ++ * mfxHDLPair.second is always MFX_INFINITE. ++ * ++ * DXVA2: ++ * mfxHDLPair.first contains IDirect3DSurface9 pointer. ++ * mfxHDLPair.second is always MFX_INFINITE. ++ * ++ * D3D11: ++ * mfxHDLPair.first contains a ID3D11Texture2D pointer. ++ * mfxHDLPair.second contains the texture array index of the frame if the ++ * ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a ++ * normal texture. ++ */ ++ AV_PIX_FMT_QSV, ++ /** ++ * HW acceleration though MMAL, data[3] contains a pointer to the ++ * MMAL_BUFFER_HEADER_T structure. ++ */ ++ AV_PIX_FMT_MMAL, ++ ++ AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11 via old API, ++ ///< Picture.data[3] contains a ++ ///< ID3D11VideoDecoderOutputView pointer ++ ++ /** ++ * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers ++ * exactly as for system memory frames. ++ */ ++ AV_PIX_FMT_CUDA, ++ ++ AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined ++ AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined ++ AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined ++ AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined ++ ++ AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), big-endian ++ AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), little-endian ++ AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), big-endian ++ AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per ++ ///< 2x2 Y samples), little-endian ++ AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), big-endian ++ AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), little-endian ++ AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), big-endian ++ AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), little-endian ++ AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), big-endian ++ AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), little-endian ++ AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), big-endian ++ AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), little-endian ++ AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian ++ AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian ++ AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian ++ AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian ++ AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 ++ ///< Y samples) full scale (JPEG), deprecated in favor ++ ///< of AV_PIX_FMT_YUV411P and setting color_range ++ ++ AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), ++ ///< 8-bit samples ++ AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), ++ ///< 8-bit samples ++ AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), ++ ///< 8-bit samples ++ AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), ++ ///< 8-bit samples ++ AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), ++ ///< 16-bit samples, little-endian ++ AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), ++ ///< 16-bit samples, big-endian ++ AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), ++ ///< 16-bit samples, little-endian ++ AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), ++ ///< 16-bit samples, big-endian ++ AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), ++ ///< 16-bit samples, little-endian ++ AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), ++ ///< 16-bit samples, big-endian ++ AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), ++ ///< 16-bit samples, little-endian ++ AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), ++ ///< 16-bit samples, big-endian ++ ++#if FF_API_XVMC ++ AV_PIX_FMT_XVMC, ///< XVideo Motion Acceleration via common packet passing ++#endif ++ ++ AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per ++ ///< 1x2 Y samples), little-endian ++ AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per ++ ///< 1x2 Y samples), big-endian ++ AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per ++ ///< 1x2 Y samples), little-endian ++ AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per ++ ///< 1x2 Y samples), big-endian ++ AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y ++ ///< & A samples), little-endian ++ AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y ++ ///< & A samples), big-endian ++ ++ AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox ++ ++ AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high ++ ///< bits, zeros in the low bits, little-endian ++ AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high ++ ///< bits, zeros in the low bits, big-endian ++ ++ AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian ++ AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian ++ ++ AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian ++ AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian ++ ++ AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec ++ ++ AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian ++ AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian ++ AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian ++ AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian ++ ++ AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian ++ AV_PIX_FMT_P016BE, ///< like NV12, with 16bpp per component, big-endian ++ ++ /** ++ * Hardware surfaces for Direct3D11. ++ * ++ * This is preferred over the legacy AV_PIX_FMT_D3D11VA_VLD. The new D3D11 ++ * hwaccel API and filtering support AV_PIX_FMT_D3D11 only. ++ * ++ * data[0] contains a ID3D11Texture2D pointer, and data[1] contains the ++ * texture array index of the frame as intptr_t if the ID3D11Texture2D is ++ * an array texture (or always 0 if it's a normal texture). ++ */ ++ AV_PIX_FMT_D3D11, ++ ++ AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian ++ AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian ++ ++ AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, ++ ///< big-endian ++ AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, ++ ///< little-endian ++ AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, ++ ///< 128bpp, big-endian ++ AV_PIX_FMT_GBRAPF32LE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, ++ ///< 128bpp, little-endian ++ ++ /** ++ * DRM-managed buffers exposed through PRIME buffer sharing. ++ * ++ * data[0] points to an AVDRMFrameDescriptor. ++ */ ++ AV_PIX_FMT_DRM_PRIME, ++ /** ++ * Hardware surfaces for OpenCL. ++ * ++ * data[i] contain 2D image objects (typed in C as cl_mem, used ++ * in OpenCL as image2d_t) for each plane of the surface. ++ */ ++ AV_PIX_FMT_OPENCL, ++ ++ AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian ++ AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian ++ ++ AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian ++ AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian ++ ++ AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), 12b alpha, big-endian ++ AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per ++ ///< 2x1 Y samples), 12b alpha, little-endian ++ AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), 12b alpha, big-endian ++ AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per ++ ///< 1x1 Y samples), 12b alpha, little-endian ++ ++ AV_PIX_FMT_NV24, ///< planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for ++ ///< the UV components, which are interleaved (first byte U ++ ///< and the following byte V) ++ AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped ++ ++ /** ++ * Vulkan hardware images. ++ * ++ * data[0] points to an AVVkFrame ++ */ ++ AV_PIX_FMT_VULKAN, ++ ++ AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the ++ ///< high bits, big-endian ++ AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the ++ ///< high bits, little-endian ++ ++ AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G ++ ///< 10B(lsb), little-endian, X=unused/undefined ++ AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G ++ ///< 10B(lsb), big-endian, X=unused/undefined ++ AV_PIX_FMT_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G ++ ///< 10R(lsb), little-endian, X=unused/undefined ++ AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G ++ ///< 10R(lsb), big-endian, X=unused/undefined ++ ++ AV_PIX_FMT_P210BE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high ++ ///< bits, big-endian ++ AV_PIX_FMT_P210LE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high ++ ///< bits, little-endian ++ ++ AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high ++ ///< bits, big-endian ++ AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high ++ ///< bits, little-endian ++ ++ AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian ++ AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, little-endian ++ ++ AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian ++ AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian ++ ++ AV_PIX_FMT_VUYA, ///< packed VUYA 4:4:4, 32bpp, VUYAVUYA... ++ ++ AV_PIX_FMT_RGBAF16BE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, ++ ///< 64bpp, RGBARGBA..., big-endian ++ AV_PIX_FMT_RGBAF16LE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, ++ ///< 64bpp, RGBARGBA..., little-endian ++ ++ AV_PIX_FMT_VUYX, ///< packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha ++ ///< channel is left undefined ++ ++ AV_PIX_FMT_P012LE, ///< like NV12, with 12bpp per component, data in the high ++ ///< bits, zeros in the low bits, little-endian ++ AV_PIX_FMT_P012BE, ///< like NV12, with 12bpp per component, data in the high ++ ///< bits, zeros in the low bits, big-endian ++ ++ AV_PIX_FMT_Y212BE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the ++ ///< high bits, zeros in the low bits, big-endian ++ AV_PIX_FMT_Y212LE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the ++ ///< high bits, zeros in the low bits, little-endian ++ ++ AV_PIX_FMT_XV30BE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), ++ ///< big-endian, variant of Y410 where alpha channel is ++ ///< left undefined ++ AV_PIX_FMT_XV30LE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), ++ ///< little-endian, variant of Y410 where alpha channel is ++ ///< left undefined ++ ++ AV_PIX_FMT_XV36BE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, ++ ///< zeros in the low bits, big-endian, variant of Y412 ++ ///< where alpha channel is left undefined ++ AV_PIX_FMT_XV36LE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, ++ ///< zeros in the low bits, little-endian, variant of Y412 ++ ///< where alpha channel is left undefined ++ ++ AV_PIX_FMT_RGBF32BE, ///< IEEE-754 single precision packed RGB 32:32:32, ++ ///< 96bpp, RGBRGB..., big-endian ++ AV_PIX_FMT_RGBF32LE, ///< IEEE-754 single precision packed RGB 32:32:32, ++ ///< 96bpp, RGBRGB..., little-endian ++ ++ AV_PIX_FMT_RGBAF32BE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, ++ ///< 128bpp, RGBARGBA..., big-endian ++ AV_PIX_FMT_RGBAF32LE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, ++ ///< 128bpp, RGBARGBA..., little-endian ++ ++ AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to ++ ///< link with shared libav* because the number of formats ++ ///< might differ between versions ++}; ++ ++#if AV_HAVE_BIGENDIAN ++# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be ++#else ++# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le ++#endif ++ ++#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) ++#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) ++#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) ++#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) ++#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) ++#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) ++ ++#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) ++#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) ++#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) ++#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) ++#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) ++#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) ++#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) ++#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) ++#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) ++#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) ++#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) ++#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) ++#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) ++#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) ++#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) ++#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) ++ ++#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE, YUV420P9LE) ++#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE, YUV422P9LE) ++#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE, YUV444P9LE) ++#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) ++#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) ++#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) ++#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) ++#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) ++#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) ++#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) ++#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) ++#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) ++#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) ++#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) ++#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) ++#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) ++#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) ++ ++#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE, GBRP9LE) ++#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) ++#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) ++#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) ++#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) ++#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) ++#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) ++#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) ++ ++#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) ++#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) ++#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) ++#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) ++ ++#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) ++#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) ++ ++#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) ++ ++#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE, YUVA420P9LE) ++#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE, YUVA422P9LE) ++#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE, YUVA444P9LE) ++#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) ++#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) ++#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) ++#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) ++#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) ++#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) ++#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) ++#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) ++ ++#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) ++#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) ++#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) ++#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) ++#define AV_PIX_FMT_P012 AV_PIX_FMT_NE(P012BE, P012LE) ++#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) ++ ++#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) ++#define AV_PIX_FMT_Y212 AV_PIX_FMT_NE(Y212BE, Y212LE) ++#define AV_PIX_FMT_XV30 AV_PIX_FMT_NE(XV30BE, XV30LE) ++#define AV_PIX_FMT_XV36 AV_PIX_FMT_NE(XV36BE, XV36LE) ++#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) ++#define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE) ++ ++#define AV_PIX_FMT_P210 AV_PIX_FMT_NE(P210BE, P210LE) ++#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE) ++#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) ++#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) ++ ++#define AV_PIX_FMT_RGBAF16 AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE) ++ ++#define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE) ++#define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE) ++ ++/** ++ * Chromaticity coordinates of the source primaries. ++ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ++ * ITU-T H.273. ++ */ ++enum AVColorPrimaries { ++ AVCOL_PRI_RESERVED0 = 0, ++ AVCOL_PRI_BT709 = ++ 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B ++ AVCOL_PRI_UNSPECIFIED = 2, ++ AVCOL_PRI_RESERVED = 3, ++ AVCOL_PRI_BT470M = ++ 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) ++ ++ AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R ++ ///< BT1700 625 PAL & SECAM ++ AVCOL_PRI_SMPTE170M = ++ 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC ++ AVCOL_PRI_SMPTE240M = ++ 7, ///< identical to above, also called "SMPTE C" even though it uses D65 ++ AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C ++ AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 ++ AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) ++ AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, ++ AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 ++ AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 ++ AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC ++ ///< P22 group phosphors ++ AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, ++ AVCOL_PRI_NB ///< Not part of ABI ++}; ++ ++/** ++ * Color Transfer Characteristic. ++ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2. ++ */ ++enum AVColorTransferCharacteristic { ++ AVCOL_TRC_RESERVED0 = 0, ++ AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 ++ AVCOL_TRC_UNSPECIFIED = 2, ++ AVCOL_TRC_RESERVED = 3, ++ AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM ++ AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG ++ AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 ++ ///< 525 or 625 / ITU-R BT1700 NTSC ++ AVCOL_TRC_SMPTE240M = 7, ++ AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" ++ AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" ++ AVCOL_TRC_LOG_SQRT = ++ 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" ++ AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 ++ AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut ++ AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) ++ AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system ++ AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system ++ AVCOL_TRC_SMPTE2084 = ++ 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems ++ AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, ++ AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 ++ AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, ++ AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" ++ AVCOL_TRC_NB ///< Not part of ABI ++}; ++ ++/** ++ * YUV colorspace type. ++ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. ++ */ ++enum AVColorSpace { ++ AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC ++ ///< 61966-2-1 (sRGB), YZX and ST 428-1 ++ AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / ++ ///< derived in SMPTE RP 177 Annex B ++ AVCOL_SPC_UNSPECIFIED = 2, ++ AVCOL_SPC_RESERVED = ++ 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are ++ AVCOL_SPC_FCC = ++ 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) ++ AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R ++ ///< BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 ++ AVCOL_SPC_SMPTE170M = ++ 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / ++ ///< functionally identical to above ++ AVCOL_SPC_SMPTE240M = ++ 7, ///< derived from 170M primaries and D65 white point, 170M is derived ++ ///< from BT470 System M's primaries ++ AVCOL_SPC_YCGCO = ++ 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 ++ AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, ++ AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system ++ AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system ++ AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x ++ AVCOL_SPC_CHROMA_DERIVED_NCL = ++ 12, ///< Chromaticity-derived non-constant luminance system ++ AVCOL_SPC_CHROMA_DERIVED_CL = ++ 13, ///< Chromaticity-derived constant luminance system ++ AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp ++ AVCOL_SPC_NB ///< Not part of ABI ++}; ++ ++/** ++ * Visual content value range. ++ * ++ * These values are based on definitions that can be found in multiple ++ * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance ++ * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital ++ * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit ++ * integer representation). At the time of writing, the BT.2100 one is ++ * recommended, as it also defines the full range representation. ++ * ++ * Common definitions: ++ * - For RGB and luma planes such as Y in YCbCr and I in ICtCp, ++ * 'E' is the original value in range of 0.0 to 1.0. ++ * - For chroma planes such as Cb,Cr and Ct,Cp, 'E' is the original ++ * value in range of -0.5 to 0.5. ++ * - 'n' is the output bit depth. ++ * - For additional definitions such as rounding and clipping to valid n ++ * bit unsigned integer range, please refer to BT.2100 (Table 9). ++ */ ++enum AVColorRange { ++ AVCOL_RANGE_UNSPECIFIED = 0, ++ ++ /** ++ * Narrow or limited range content. ++ * ++ * - For luma planes: ++ * ++ * (219 * E + 16) * 2^(n-8) ++ * ++ * F.ex. the range of 16-235 for 8 bits ++ * ++ * - For chroma planes: ++ * ++ * (224 * E + 128) * 2^(n-8) ++ * ++ * F.ex. the range of 16-240 for 8 bits ++ */ ++ AVCOL_RANGE_MPEG = 1, ++ ++ /** ++ * Full range content. ++ * ++ * - For RGB and luma planes: ++ * ++ * (2^n - 1) * E ++ * ++ * F.ex. the range of 0-255 for 8 bits ++ * ++ * - For chroma planes: ++ * ++ * (2^n - 1) * E + 2^(n - 1) ++ * ++ * F.ex. the range of 1-255 for 8 bits ++ */ ++ AVCOL_RANGE_JPEG = 2, ++ AVCOL_RANGE_NB ///< Not part of ABI ++}; ++ ++/** ++ * Location of chroma samples. ++ * ++ * Illustration showing the location of the first (top left) chroma sample of ++ *the image, the left shows only luma, the right shows the location of the ++ *chroma sample, the 2 could be imagined to overlay each other but are drawn ++ *separately due to limitations of ASCII ++ * ++ * 1st 2nd 1st 2nd horizontal luma sample positions ++ * v v v v ++ * ______ ______ ++ *1st luma line > |X X ... |3 4 X ... X are luma samples, ++ * | |1 2 1-6 are possible chroma positions ++ *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position ++ */ ++enum AVChromaLocation { ++ AVCHROMA_LOC_UNSPECIFIED = 0, ++ AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 ++ AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 ++ AVCHROMA_LOC_TOPLEFT = ++ 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 ++ AVCHROMA_LOC_TOP = 4, ++ AVCHROMA_LOC_BOTTOMLEFT = 5, ++ AVCHROMA_LOC_BOTTOM = 6, ++ AVCHROMA_LOC_NB ///< Not part of ABI ++}; ++ ++#endif /* AVUTIL_PIXFMT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,222 @@ ++/* ++ * rational numbers ++ * Copyright (c) 2003 Michael Niedermayer ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @ingroup lavu_math_rational ++ * Utilties for rational number calculation. ++ * @author Michael Niedermayer ++ */ ++ ++#ifndef AVUTIL_RATIONAL_H ++#define AVUTIL_RATIONAL_H ++ ++#include ++#include ++#include "attributes.h" ++ ++/** ++ * @defgroup lavu_math_rational AVRational ++ * @ingroup lavu_math ++ * Rational number calculation. ++ * ++ * While rational numbers can be expressed as floating-point numbers, the ++ * conversion process is a lossy one, so are floating-point operations. On the ++ * other hand, the nature of FFmpeg demands highly accurate calculation of ++ * timestamps. This set of rational number utilities serves as a generic ++ * interface for manipulating rational numbers as pairs of numerators and ++ * denominators. ++ * ++ * Many of the functions that operate on AVRational's have the suffix `_q`, in ++ * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all ++ * rational numbers. ++ * ++ * @{ ++ */ ++ ++/** ++ * Rational number (pair of numerator and denominator). ++ */ ++typedef struct AVRational { ++ int num; ///< Numerator ++ int den; ///< Denominator ++} AVRational; ++ ++/** ++ * Create an AVRational. ++ * ++ * Useful for compilers that do not support compound literals. ++ * ++ * @note The return value is not reduced. ++ * @see av_reduce() ++ */ ++static inline AVRational av_make_q(int num, int den) { ++ AVRational r = {num, den}; ++ return r; ++} ++ ++/** ++ * Compare two rationals. ++ * ++ * @param a First rational ++ * @param b Second rational ++ * ++ * @return One of the following values: ++ * - 0 if `a == b` ++ * - 1 if `a > b` ++ * - -1 if `a < b` ++ * - `INT_MIN` if one of the values is of the form `0 / 0` ++ */ ++static inline int av_cmp_q(AVRational a, AVRational b) { ++ const int64_t tmp = a.num * (int64_t)b.den - b.num * (int64_t)a.den; ++ ++ if (tmp) ++ return (int)((tmp ^ a.den ^ b.den) >> 63) | 1; ++ else if (b.den && a.den) ++ return 0; ++ else if (a.num && b.num) ++ return (a.num >> 31) - (b.num >> 31); ++ else ++ return INT_MIN; ++} ++ ++/** ++ * Convert an AVRational to a `double`. ++ * @param a AVRational to convert ++ * @return `a` in floating-point form ++ * @see av_d2q() ++ */ ++static inline double av_q2d(AVRational a) { return a.num / (double)a.den; } ++ ++/** ++ * Reduce a fraction. ++ * ++ * This is useful for framerate calculations. ++ * ++ * @param[out] dst_num Destination numerator ++ * @param[out] dst_den Destination denominator ++ * @param[in] num Source numerator ++ * @param[in] den Source denominator ++ * @param[in] max Maximum allowed values for `dst_num` & `dst_den` ++ * @return 1 if the operation is exact, 0 otherwise ++ */ ++int av_reduce(int* dst_num, int* dst_den, int64_t num, int64_t den, ++ int64_t max); ++ ++/** ++ * Multiply two rationals. ++ * @param b First rational ++ * @param c Second rational ++ * @return b*c ++ */ ++AVRational av_mul_q(AVRational b, AVRational c) av_const; ++ ++/** ++ * Divide one rational by another. ++ * @param b First rational ++ * @param c Second rational ++ * @return b/c ++ */ ++AVRational av_div_q(AVRational b, AVRational c) av_const; ++ ++/** ++ * Add two rationals. ++ * @param b First rational ++ * @param c Second rational ++ * @return b+c ++ */ ++AVRational av_add_q(AVRational b, AVRational c) av_const; ++ ++/** ++ * Subtract one rational from another. ++ * @param b First rational ++ * @param c Second rational ++ * @return b-c ++ */ ++AVRational av_sub_q(AVRational b, AVRational c) av_const; ++ ++/** ++ * Invert a rational. ++ * @param q value ++ * @return 1 / q ++ */ ++static av_always_inline AVRational av_inv_q(AVRational q) { ++ AVRational r = {q.den, q.num}; ++ return r; ++} ++ ++/** ++ * Convert a double precision floating point number to a rational. ++ * ++ * In case of infinity, the returned value is expressed as `{1, 0}` or ++ * `{-1, 0}` depending on the sign. ++ * ++ * @param d `double` to convert ++ * @param max Maximum allowed numerator and denominator ++ * @return `d` in AVRational form ++ * @see av_q2d() ++ */ ++AVRational av_d2q(double d, int max) av_const; ++ ++/** ++ * Find which of the two rationals is closer to another rational. ++ * ++ * @param q Rational to be compared against ++ * @param q1 Rational to be tested ++ * @param q2 Rational to be tested ++ * @return One of the following values: ++ * - 1 if `q1` is nearer to `q` than `q2` ++ * - -1 if `q2` is nearer to `q` than `q1` ++ * - 0 if they have the same distance ++ */ ++int av_nearer_q(AVRational q, AVRational q1, AVRational q2); ++ ++/** ++ * Find the value in a list of rationals nearest a given reference rational. ++ * ++ * @param q Reference rational ++ * @param q_list Array of rationals terminated by `{0, 0}` ++ * @return Index of the nearest value found in the array ++ */ ++int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); ++ ++/** ++ * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point ++ * format. ++ * ++ * @param q Rational to be converted ++ * @return Equivalent floating-point value, expressed as an unsigned 32-bit ++ * integer. ++ * @note The returned value is platform-indepedant. ++ */ ++uint32_t av_q2intfloat(AVRational q); ++ ++/** ++ * Return the best rational so that a and b are multiple of it. ++ * If the resulting denominator is larger than max_den, return def. ++ */ ++AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); ++ ++/** ++ * @} ++ */ ++ ++#endif /* AVUTIL_RATIONAL_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,274 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVUTIL_SAMPLEFMT_H ++#define AVUTIL_SAMPLEFMT_H ++ ++#include ++ ++/** ++ * @addtogroup lavu_audio ++ * @{ ++ * ++ * @defgroup lavu_sampfmts Audio sample formats ++ * ++ * Audio sample format enumeration and related convenience functions. ++ * @{ ++ */ ++ ++/** ++ * Audio sample formats ++ * ++ * - The data described by the sample format is always in native-endian order. ++ * Sample values can be expressed by native C types, hence the lack of a ++ * signed 24-bit sample format even though it is a common raw audio data format. ++ * ++ * - The floating-point formats are based on full volume being in the range ++ * [-1.0, 1.0]. Any values outside this range are beyond full volume level. ++ * ++ * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg ++ * (such as AVFrame in libavcodec) is as follows: ++ * ++ * @par ++ * For planar sample formats, each audio channel is in a separate data plane, ++ * and linesize is the buffer size, in bytes, for a single plane. All data ++ * planes must be the same size. For packed sample formats, only the first data ++ * plane is used, and samples for each channel are interleaved. In this case, ++ * linesize is the buffer size, in bytes, for the 1 plane. ++ * ++ */ ++enum AVSampleFormat { ++ AV_SAMPLE_FMT_NONE = -1, ++ AV_SAMPLE_FMT_U8, ///< unsigned 8 bits ++ AV_SAMPLE_FMT_S16, ///< signed 16 bits ++ AV_SAMPLE_FMT_S32, ///< signed 32 bits ++ AV_SAMPLE_FMT_FLT, ///< float ++ AV_SAMPLE_FMT_DBL, ///< double ++ ++ AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar ++ AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar ++ AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar ++ AV_SAMPLE_FMT_FLTP, ///< float, planar ++ AV_SAMPLE_FMT_DBLP, ///< double, planar ++ AV_SAMPLE_FMT_S64, ///< signed 64 bits ++ AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar ++ ++ AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking ++ ///< dynamically ++}; ++ ++/** ++ * Return the name of sample_fmt, or NULL if sample_fmt is not ++ * recognized. ++ */ ++const char* av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); ++ ++/** ++ * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE ++ * on error. ++ */ ++enum AVSampleFormat av_get_sample_fmt(const char* name); ++ ++/** ++ * Return the planar<->packed alternative form of the given sample format, or ++ * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the ++ * requested planar/packed format, the format returned is the same as the ++ * input. ++ */ ++enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, ++ int planar); ++ ++/** ++ * Get the packed alternative form of the given sample format. ++ * ++ * If the passed sample_fmt is already in packed format, the format returned is ++ * the same as the input. ++ * ++ * @return the packed alternative form of the given sample format or ++ AV_SAMPLE_FMT_NONE on error. ++ */ ++enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); ++ ++/** ++ * Get the planar alternative form of the given sample format. ++ * ++ * If the passed sample_fmt is already in planar format, the format returned is ++ * the same as the input. ++ * ++ * @return the planar alternative form of the given sample format or ++ AV_SAMPLE_FMT_NONE on error. ++ */ ++enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); ++ ++/** ++ * Generate a string corresponding to the sample format with ++ * sample_fmt, or a header if sample_fmt is negative. ++ * ++ * @param buf the buffer where to write the string ++ * @param buf_size the size of buf ++ * @param sample_fmt the number of the sample format to print the ++ * corresponding info string, or a negative value to print the ++ * corresponding header. ++ * @return the pointer to the filled buffer or NULL if sample_fmt is ++ * unknown or in case of other errors ++ */ ++char* av_get_sample_fmt_string(char* buf, int buf_size, ++ enum AVSampleFormat sample_fmt); ++ ++/** ++ * Return number of bytes per sample. ++ * ++ * @param sample_fmt the sample format ++ * @return number of bytes per sample or zero if unknown for the given ++ * sample format ++ */ ++int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); ++ ++/** ++ * Check if the sample format is planar. ++ * ++ * @param sample_fmt the sample format to inspect ++ * @return 1 if the sample format is planar, 0 if it is interleaved ++ */ ++int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); ++ ++/** ++ * Get the required buffer size for the given audio parameters. ++ * ++ * @param[out] linesize calculated linesize, may be NULL ++ * @param nb_channels the number of channels ++ * @param nb_samples the number of samples in a single channel ++ * @param sample_fmt the sample format ++ * @param align buffer size alignment (0 = default, 1 = no alignment) ++ * @return required buffer size, or negative error code on failure ++ */ ++int av_samples_get_buffer_size(int* linesize, int nb_channels, int nb_samples, ++ enum AVSampleFormat sample_fmt, int align); ++ ++/** ++ * @} ++ * ++ * @defgroup lavu_sampmanip Samples manipulation ++ * ++ * Functions that manipulate audio samples ++ * @{ ++ */ ++ ++/** ++ * Fill plane data pointers and linesize for samples with sample ++ * format sample_fmt. ++ * ++ * The audio_data array is filled with the pointers to the samples data planes: ++ * for planar, set the start point of each channel's data within the buffer, ++ * for packed, set the start point of the entire buffer only. ++ * ++ * The value pointed to by linesize is set to the aligned size of each ++ * channel's data buffer for planar layout, or to the aligned size of the ++ * buffer for all channels for packed layout. ++ * ++ * The buffer in buf must be big enough to contain all the samples ++ * (use av_samples_get_buffer_size() to compute its minimum size), ++ * otherwise the audio_data pointers will point to invalid data. ++ * ++ * @see enum AVSampleFormat ++ * The documentation for AVSampleFormat describes the data layout. ++ * ++ * @param[out] audio_data array to be filled with the pointer for each channel ++ * @param[out] linesize calculated linesize, may be NULL ++ * @param buf the pointer to a buffer containing the samples ++ * @param nb_channels the number of channels ++ * @param nb_samples the number of samples in a single channel ++ * @param sample_fmt the sample format ++ * @param align buffer size alignment (0 = default, 1 = no alignment) ++ * @return minimum size in bytes required for the buffer on ++ * success, or a negative error code on failure ++ */ ++int av_samples_fill_arrays(uint8_t** audio_data, int* linesize, ++ const uint8_t* buf, int nb_channels, int nb_samples, ++ enum AVSampleFormat sample_fmt, int align); ++ ++/** ++ * Allocate a samples buffer for nb_samples samples, and fill data pointers and ++ * linesize accordingly. ++ * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) ++ * Allocated data will be initialized to silence. ++ * ++ * @see enum AVSampleFormat ++ * The documentation for AVSampleFormat describes the data layout. ++ * ++ * @param[out] audio_data array to be filled with the pointer for each channel ++ * @param[out] linesize aligned size for audio buffer(s), may be NULL ++ * @param nb_channels number of audio channels ++ * @param nb_samples number of samples per channel ++ * @param sample_fmt the sample format ++ * @param align buffer size alignment (0 = default, 1 = no alignment) ++ * @return >=0 on success or a negative error code on failure ++ * @todo return the size of the allocated buffer in case of success at the next ++ * bump ++ * @see av_samples_fill_arrays() ++ * @see av_samples_alloc_array_and_samples() ++ */ ++int av_samples_alloc(uint8_t** audio_data, int* linesize, int nb_channels, ++ int nb_samples, enum AVSampleFormat sample_fmt, int align); ++ ++/** ++ * Allocate a data pointers array, samples buffer for nb_samples ++ * samples, and fill data pointers and linesize accordingly. ++ * ++ * This is the same as av_samples_alloc(), but also allocates the data ++ * pointers array. ++ * ++ * @see av_samples_alloc() ++ */ ++int av_samples_alloc_array_and_samples(uint8_t*** audio_data, int* linesize, ++ int nb_channels, int nb_samples, ++ enum AVSampleFormat sample_fmt, ++ int align); ++ ++/** ++ * Copy samples from src to dst. ++ * ++ * @param dst destination array of pointers to data planes ++ * @param src source array of pointers to data planes ++ * @param dst_offset offset in samples at which the data will be written to dst ++ * @param src_offset offset in samples at which the data will be read from src ++ * @param nb_samples number of samples to be copied ++ * @param nb_channels number of audio channels ++ * @param sample_fmt audio sample format ++ */ ++int av_samples_copy(uint8_t** dst, uint8_t* const* src, int dst_offset, ++ int src_offset, int nb_samples, int nb_channels, ++ enum AVSampleFormat sample_fmt); ++ ++/** ++ * Fill an audio buffer with silence. ++ * ++ * @param audio_data array of pointers to data planes ++ * @param offset offset in samples at which to start filling ++ * @param nb_samples number of samples to fill ++ * @param nb_channels number of audio channels ++ * @param sample_fmt audio sample format ++ */ ++int av_samples_set_silence(uint8_t** audio_data, int offset, int nb_samples, ++ int nb_channels, enum AVSampleFormat sample_fmt); ++ ++/** ++ * @} ++ * @} ++ */ ++#endif /* AVUTIL_SAMPLEFMT_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h +--- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,122 @@ ++/* ++ * copyright (c) 2003 Fabrice Bellard ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * @ingroup lavu ++ * Libavutil version macros ++ */ ++ ++#ifndef AVUTIL_VERSION_H ++#define AVUTIL_VERSION_H ++ ++#include "macros.h" ++ ++/** ++ * @addtogroup version_utils ++ * ++ * Useful to check and match library version in order to maintain ++ * backward compatibility. ++ * ++ * The FFmpeg libraries follow a versioning sheme very similar to ++ * Semantic Versioning (http://semver.org/) ++ * The difference is that the component called PATCH is called MICRO in FFmpeg ++ * and its value is reset to 100 instead of 0 to keep it above or equal to 100. ++ * Also we do not increase MICRO for every bugfix or change in git master. ++ * ++ * Prior to FFmpeg 3.2 point releases did not change any lib version number to ++ * avoid aliassing different git master checkouts. ++ * Starting with FFmpeg 3.2, the released library versions will occupy ++ * a separate MAJOR.MINOR that is not used on the master development branch. ++ * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 ++ * for the release and master will continue at 55.12.100 after it. Each new ++ * point release will then bump the MICRO improving the usefulness of the lib ++ * versions. ++ * ++ * @{ ++ */ ++ ++#define AV_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c)) ++#define AV_VERSION_DOT(a, b, c) a##.##b##.##c ++#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) ++ ++/** ++ * Extract version components from the full ::AV_VERSION_INT int as returned ++ * by functions like ::avformat_version() and ::avcodec_version() ++ */ ++#define AV_VERSION_MAJOR(a) ((a) >> 16) ++#define AV_VERSION_MINOR(a) (((a)&0x00FF00) >> 8) ++#define AV_VERSION_MICRO(a) ((a)&0xFF) ++ ++/** ++ * @} ++ */ ++ ++/** ++ * @defgroup lavu_ver Version and Build diagnostics ++ * ++ * Macros and function useful to check at compiletime and at runtime ++ * which version of libavutil is in use. ++ * ++ * @{ ++ */ ++ ++#define LIBAVUTIL_VERSION_MAJOR 58 ++#define LIBAVUTIL_VERSION_MINOR 3 ++#define LIBAVUTIL_VERSION_MICRO 100 ++ ++#define LIBAVUTIL_VERSION_INT \ ++ AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, \ ++ LIBAVUTIL_VERSION_MICRO) ++#define LIBAVUTIL_VERSION \ ++ AV_VERSION(LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, \ ++ LIBAVUTIL_VERSION_MICRO) ++#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT ++ ++#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) ++ ++/** ++ * @defgroup lavu_depr_guards Deprecation Guards ++ * FF_API_* defines may be placed below to indicate public API that will be ++ * dropped at a future version bump. The defines themselves are not part of ++ * the public API and may change, break or disappear at any time. ++ * ++ * @note, when bumping the major version it is recommended to manually ++ * disable each FF_API_* in its own commit instead of disabling them all ++ * at once through the bump. This improves the git bisect-ability of the change. ++ * ++ * @{ ++ */ ++ ++#define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_FIFO_OLD_API (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_OLD_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_AV_FOPEN_UTF8 (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_PKT_DURATION (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_REORDERED_OPAQUE (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_FRAME_PICTURE_NUMBER (LIBAVUTIL_VERSION_MAJOR < 59) ++ ++/** ++ * @} ++ * @} ++ */ ++ ++#endif /* AVUTIL_VERSION_H */ +diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/moz.build b/dom/media/platforms/ffmpeg/ffmpeg60/moz.build +--- a/dom/media/platforms/ffmpeg/ffmpeg60/moz.build 1970-01-01 01:00:00.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffmpeg60/moz.build 2023-04-06 12:57:00.772081680 +0200 +@@ -0,0 +1,39 @@ ++# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- ++# vim: set filetype=python: ++# This Source Code Form is subject to the terms of the Mozilla Public ++# License, v. 2.0. If a copy of the MPL was not distributed with this ++# file, You can obtain one at http://mozilla.org/MPL/2.0/. ++ ++UNIFIED_SOURCES += [ ++ "../FFmpegAudioDecoder.cpp", ++ "../FFmpegDataDecoder.cpp", ++ "../FFmpegDecoderModule.cpp", ++ "../FFmpegVideoDecoder.cpp", ++] ++LOCAL_INCLUDES += [ ++ "..", ++ "/media/mozva", ++ "include", ++] ++ ++if CONFIG["CC_TYPE"] in ("clang", "gcc"): ++ CXXFLAGS += ["-Wno-deprecated-declarations"] ++if CONFIG["CC_TYPE"] == "clang": ++ CXXFLAGS += [ ++ "-Wno-unknown-attributes", ++ ] ++if CONFIG["CC_TYPE"] == "gcc": ++ CXXFLAGS += [ ++ "-Wno-attributes", ++ ] ++if CONFIG["MOZ_WAYLAND"]: ++ CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] ++ DEFINES["MOZ_WAYLAND_USE_VAAPI"] = 1 ++ USE_LIBS += ["mozva"] ++ UNIFIED_SOURCES += [ ++ "../FFmpegVideoFramePool.cpp", ++ ] ++ ++include("/ipc/chromium/chromium-config.mozbuild") ++ ++FINAL_LIBRARY = "xul" +diff -Naur a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp +--- a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp 2023-03-10 00:59:36.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp 2023-04-06 12:49:55.231998224 +0200 +@@ -269,35 +269,35 @@ + } + #else + # define AVRESULT_OK 0 +- +- int ret = mLib->avcodec_receive_frame(mCodecContext, mFrame); ++ int ret = mLib->avcodec_send_packet(mCodecContext, &packet); + switch (ret) { + case AVRESULT_OK: +- decoded = true; ++ bytesConsumed = packet.size; + break; + case AVERROR(EAGAIN): + break; +- case AVERROR_EOF: { ++ case AVERROR_EOF: + FFMPEG_LOG(" End of stream."); + return MediaResult(NS_ERROR_DOM_MEDIA_END_OF_STREAM, + RESULT_DETAIL("End of stream")); +- } ++ default: ++ NS_WARNING("FFmpeg audio decoder error."); ++ return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, ++ RESULT_DETAIL("FFmpeg audio error")); + } +- ret = mLib->avcodec_send_packet(mCodecContext, &packet); ++ ++ ret = mLib->avcodec_receive_frame(mCodecContext, mFrame); + switch (ret) { + case AVRESULT_OK: +- bytesConsumed = packet.size; ++ decoded = true; + break; + case AVERROR(EAGAIN): + break; +- case AVERROR_EOF: ++ case AVERROR_EOF: { + FFMPEG_LOG(" End of stream."); + return MediaResult(NS_ERROR_DOM_MEDIA_END_OF_STREAM, + RESULT_DETAIL("End of stream")); +- default: +- NS_WARNING("FFmpeg audio decoder error."); +- return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, +- RESULT_DETAIL("FFmpeg audio error")); ++ } + } + #endif + +diff -Naur a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp +--- a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp 2023-03-10 00:59:36.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp 2023-04-06 12:57:00.770081600 +0200 +@@ -65,6 +65,7 @@ + AV_FUNC_57 = 1 << 4, + AV_FUNC_58 = 1 << 5, + AV_FUNC_59 = 1 << 6, ++ AV_FUNC_60 = 1 << 7, + AV_FUNC_AVUTIL_53 = AV_FUNC_53 | AV_FUNC_AVUTIL_MASK, + AV_FUNC_AVUTIL_54 = AV_FUNC_54 | AV_FUNC_AVUTIL_MASK, + AV_FUNC_AVUTIL_55 = AV_FUNC_55 | AV_FUNC_AVUTIL_MASK, +@@ -72,8 +73,9 @@ + AV_FUNC_AVUTIL_57 = AV_FUNC_57 | AV_FUNC_AVUTIL_MASK, + AV_FUNC_AVUTIL_58 = AV_FUNC_58 | AV_FUNC_AVUTIL_MASK, + AV_FUNC_AVUTIL_59 = AV_FUNC_59 | AV_FUNC_AVUTIL_MASK, ++ AV_FUNC_AVUTIL_60 = AV_FUNC_60 | AV_FUNC_AVUTIL_MASK, + AV_FUNC_AVCODEC_ALL = AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 | AV_FUNC_56 | +- AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59, ++ AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60, + AV_FUNC_AVUTIL_ALL = AV_FUNC_AVCODEC_ALL | AV_FUNC_AVUTIL_MASK + }; + +@@ -99,8 +101,11 @@ + case 59: + version = AV_FUNC_59; + break; ++ case 60: ++ version = AV_FUNC_60; ++ break; + default: +- FFMPEG_LOG("Unknown avcodec version"); ++ FFMPEG_LOG("Unknown avcodec version: %d", macro); + Unlink(); + return isFFMpeg ? ((macro > 57) ? LinkResult::UnknownFutureFFMpegVersion + : LinkResult::UnknownOlderFFMpegVersion) +@@ -154,10 +159,10 @@ + AV_FUNC(avcodec_alloc_frame, (AV_FUNC_53 | AV_FUNC_54)) + AV_FUNC(avcodec_get_frame_defaults, (AV_FUNC_53 | AV_FUNC_54)) + AV_FUNC(avcodec_free_frame, AV_FUNC_54) +- AV_FUNC(avcodec_send_packet, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC(avcodec_receive_frame, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC(avcodec_default_get_buffer2, +- (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59)) ++ AV_FUNC(avcodec_send_packet, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC(avcodec_receive_frame, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC(avcodec_default_get_buffer2, (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60)) + AV_FUNC_OPTION(av_rdft_init, AV_FUNC_AVCODEC_ALL) + AV_FUNC_OPTION(av_rdft_calc, AV_FUNC_AVCODEC_ALL) + AV_FUNC_OPTION(av_rdft_end, AV_FUNC_AVCODEC_ALL) +@@ -166,49 +171,62 @@ + AV_FUNC(av_freep, AV_FUNC_AVUTIL_ALL) + AV_FUNC(av_frame_alloc, + (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | +- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) ++ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) + AV_FUNC(av_frame_free, + (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | +- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) ++ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) + AV_FUNC(av_frame_unref, + (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | +- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) ++ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) + AV_FUNC(av_image_check_size, AV_FUNC_AVUTIL_ALL) + AV_FUNC(av_image_get_buffer_size, AV_FUNC_AVUTIL_ALL) +- AV_FUNC_OPTION(av_buffer_get_opaque, (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | +- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) ++ AV_FUNC_OPTION(av_buffer_get_opaque, ++ (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58 | ++ AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) + AV_FUNC(av_buffer_create, + (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | +- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) ++ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) + AV_FUNC_OPTION(av_frame_get_colorspace, + AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | + AV_FUNC_AVUTIL_58) + AV_FUNC_OPTION(av_frame_get_color_range, + AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | + AV_FUNC_AVUTIL_58) +- AV_FUNC(av_strerror, AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59) ++ AV_FUNC(av_strerror, ++ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60) + + #ifdef MOZ_WAYLAND +- AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_codec_is_decoder, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, AV_FUNC_58 | AV_FUNC_59) ++ AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_codec_is_decoder, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) + AV_FUNC_OPTION_SILENT(av_hwdevice_get_hwframe_constraints, +- AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_buffer_ref, AV_FUNC_AVUTIL_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_buffer_unref, AV_FUNC_AVUTIL_58 | AV_FUNC_59) ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_buffer_ref, ++ AV_FUNC_AVUTIL_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_buffer_unref, ++ AV_FUNC_AVUTIL_58 | AV_FUNC_59 | AV_FUNC_60) + AV_FUNC_OPTION_SILENT(av_hwframe_transfer_get_formats, +- AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58 | AV_FUNC_59) +- AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string, +- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59) ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, ++ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) ++ AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string, AV_FUNC_AVUTIL_58 | ++ AV_FUNC_AVUTIL_59 | ++ AV_FUNC_AVUTIL_60) + #endif + #undef AV_FUNC + #undef AV_FUNC_OPTION +diff -Naur a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp +--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp 2023-03-10 00:59:36.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp 2023-04-06 12:57:00.770081600 +0200 +@@ -27,6 +27,7 @@ + static const char* sLibs[] = { + // clang-format off + #if defined(XP_DARWIN) ++ "libavcodec.60.dylib", + "libavcodec.59.dylib", + "libavcodec.58.dylib", + "libavcodec.57.dylib", +@@ -38,6 +39,7 @@ + "libavcodec.so", // OpenBSD hardly controls the major/minor library version + // of ffmpeg and update it regulary on ABI/API changes + #else ++ "libavcodec.so.60", + "libavcodec.so.59", + "libavcodec.so.58", + "libavcodec-ffmpeg.so.58", +@@ -160,6 +162,9 @@ + case 59: + module = FFmpegDecoderModule<59>::Create(&sLibAV); + break; ++ case 60: ++ module = FFmpegDecoderModule<60>::Create(&sLibAV); ++ break; + default: + module = nullptr; + } +diff -Naur a/dom/media/platforms/ffmpeg/ffvpx/moz.build b/dom/media/platforms/ffmpeg/ffvpx/moz.build +--- a/dom/media/platforms/ffmpeg/ffvpx/moz.build 2023-03-10 00:59:36.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/ffvpx/moz.build 2023-04-06 12:59:24.031810491 +0200 +@@ -20,7 +20,7 @@ + ] + LOCAL_INCLUDES += [ + "..", +- "../ffmpeg58/include", ++ "../ffmpeg60/include", + "/media/mozva", + ] + +diff -Naur a/dom/media/platforms/ffmpeg/moz.build b/dom/media/platforms/ffmpeg/moz.build +--- a/dom/media/platforms/ffmpeg/moz.build 2023-03-10 00:59:36.000000000 +0100 ++++ b/dom/media/platforms/ffmpeg/moz.build 2023-04-06 12:57:00.773081719 +0200 +@@ -15,6 +15,7 @@ + "ffmpeg57", + "ffmpeg58", + "ffmpeg59", ++ "ffmpeg60", + ] + + UNIFIED_SOURCES += [ +diff -Naur a/media/ffvpx/changes.patch b/media/ffvpx/changes.patch +--- a/media/ffvpx/changes.patch 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/changes.patch 2023-04-06 12:50:15.513815093 +0200 +@@ -11,10 +11,6 @@ + #include "avstring.h" + #include "timer.h" + +-diff --git a/media/ffvpx/libavutil/time.h b/media/ffvpx/libavutil/fftime.h +-similarity index 100% +-rename from media/ffvpx/libavutil/time.h +-rename to media/ffvpx/libavutil/fftime.h + diff --git a/media/ffvpx/libavutil/time.c b/media/ffvpx/libavutil/time.c + index dbaee02..69419e6 100644 + --- a/media/ffvpx/libavutil/time.c +@@ -73,10 +69,8 @@ + + + typedef struct VAAPIDevicePriv { +- +-diff -up media/ffvpx/libavcodec/vaapi_decode.c.old media/ffvpx/libavcodec/vaapi_decode.c +-diff -up media/ffvpx/libavutil/fftime.h.old media/ffvpx/libavutil/fftime.h +---- media/ffvpx/libavutil/fftime.h.old 2021-12-06 14:51:40.378642713 +0100 ++diff -up media/ffvpx/libavutil/fftime.h media/ffvpx/libavutil/fftime.h ++--- media/ffvpx/libavutil/fftime.h 2021-12-06 14:51:40.378642713 +0100 + +++ media/ffvpx/libavutil/fftime.h 2021-12-06 14:51:54.618098212 +0100 + @@ -22,6 +22,7 @@ + #define AVUTIL_TIME_H +@@ -86,3 +80,26 @@ + + /** + * Get the current time in microseconds. ++ * ++diff --git a/media/ffvpx/compat/w32pthreads.h b/media/ffvpx/compat/w32pthreads.h ++--- a/media/ffvpx/compat/w32pthreads.h +++++ b/media/ffvpx/compat/w32pthreads.h ++@@ -39,17 +39,17 @@ ++ #include ++ #include ++ #include ++ ++ #include "libavutil/attributes.h" ++ #include "libavutil/common.h" ++ #include "libavutil/internal.h" ++ #include "libavutil/mem.h" ++-#include "libavutil/time.h" +++#include "libavutil/fftime.h" ++ ++ typedef struct pthread_t { ++ void *handle; ++ void *(*func)(void* arg); ++ void *arg; ++ void *ret; ++ } pthread_t; ++ +diff -Naur a/media/ffvpx/compat/atomics/win32/stdatomic.h b/media/ffvpx/compat/atomics/win32/stdatomic.h +--- a/media/ffvpx/compat/atomics/win32/stdatomic.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/compat/atomics/win32/stdatomic.h 2023-04-06 12:49:40.248394688 +0200 +@@ -96,7 +96,7 @@ + atomic_load(object) + + #define atomic_exchange(object, desired) \ +- InterlockedExchangePointer(object, desired); ++ InterlockedExchangePointer((PVOID volatile *)object, (PVOID)desired) + + #define atomic_exchange_explicit(object, desired, order) \ + atomic_exchange(object, desired) +diff -Naur a/media/ffvpx/compat/w32pthreads.h b/media/ffvpx/compat/w32pthreads.h +--- a/media/ffvpx/compat/w32pthreads.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/compat/w32pthreads.h 2023-04-06 12:50:20.234005184 +0200 +@@ -38,11 +38,13 @@ + #define WIN32_LEAN_AND_MEAN + #include + #include ++#include + + #include "libavutil/attributes.h" + #include "libavutil/common.h" + #include "libavutil/internal.h" + #include "libavutil/mem.h" ++#include "libavutil/fftime.h" + + typedef struct pthread_t { + void *handle; +@@ -61,6 +63,9 @@ + #define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) + #define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) + ++#define PTHREAD_CANCEL_ENABLE 1 ++#define PTHREAD_CANCEL_DISABLE 0 ++ + static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) + { + pthread_t *h = (pthread_t*)arg; +@@ -156,10 +161,31 @@ + return 0; + } + ++static inline int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, ++ const struct timespec *abstime) ++{ ++ int64_t abs_milli = abstime->tv_sec * 1000LL + abstime->tv_nsec / 1000000; ++ DWORD t = av_clip64(abs_milli - av_gettime() / 1000, 0, UINT32_MAX); ++ ++ if (!SleepConditionVariableSRW(cond, mutex, t, 0)) { ++ DWORD err = GetLastError(); ++ if (err == ERROR_TIMEOUT) ++ return ETIMEDOUT; ++ else ++ return EINVAL; ++ } ++ return 0; ++} ++ + static inline int pthread_cond_signal(pthread_cond_t *cond) + { + WakeConditionVariable(cond); + return 0; + } + ++static inline int pthread_setcancelstate(int state, int *oldstate) ++{ ++ return 0; ++} ++ + #endif /* COMPAT_W32PTHREADS_H */ +diff -Naur a/media/ffvpx/config_aarch64_win64.h b/media/ffvpx/config_aarch64_win64.h +--- a/media/ffvpx/config_aarch64_win64.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_aarch64_win64.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,680 +0,0 @@ +-/* Automatically generated by configure - do not modify! */ +-#ifndef FFMPEG_CONFIG_H +-#define FFMPEG_CONFIG_H +-#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-parser='vp8,vp9' --enable-decoder='vp8,vp9,mp3,flac' --disable-static --enable-shared --disable-autodetect --toolchain=msvc --enable-cross-compile --target-os=win32 --arch=arm64" +-#define FFMPEG_LICENSE "LGPL version 2.1 or later" +-#define CONFIG_THIS_YEAR 2019 +-#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" +-#define AVCONV_DATADIR "/usr/local/share/ffmpeg" +-#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for ARM64" +-#define av_restrict __restrict +-#define EXTERN_PREFIX "" +-#define EXTERN_ASM +-#define BUILDSUF "" +-#define SLIBSUF ".dll" +-#define HAVE_MMX2 HAVE_MMXEXT +-#define SWS_MAX_FILTER_SIZE 256 +-#define ARCH_AARCH64 1 +-#define ARCH_ALPHA 0 +-#define ARCH_ARM 0 +-#define ARCH_AVR32 0 +-#define ARCH_AVR32_AP 0 +-#define ARCH_AVR32_UC 0 +-#define ARCH_BFIN 0 +-#define ARCH_IA64 0 +-#define ARCH_M68K 0 +-#define ARCH_MIPS 0 +-#define ARCH_MIPS64 0 +-#define ARCH_PARISC 0 +-#define ARCH_PPC 0 +-#define ARCH_PPC64 0 +-#define ARCH_S390 0 +-#define ARCH_SH4 0 +-#define ARCH_SPARC 0 +-#define ARCH_SPARC64 0 +-#define ARCH_TILEGX 0 +-#define ARCH_TILEPRO 0 +-#define ARCH_TOMI 0 +-#define ARCH_X86 0 +-#define ARCH_X86_32 0 +-#define ARCH_X86_64 0 +-#define HAVE_ARMV5TE 0 +-#define HAVE_ARMV6 0 +-#define HAVE_ARMV6T2 0 +-#define HAVE_ARMV8 1 +-#define HAVE_NEON 1 +-#define HAVE_VFP 1 +-#define HAVE_VFPV3 0 +-#define HAVE_SETEND 0 +-#define HAVE_ALTIVEC 0 +-#define HAVE_DCBZL 0 +-#define HAVE_LDBRX 0 +-#define HAVE_POWER8 0 +-#define HAVE_PPC4XX 0 +-#define HAVE_VSX 0 +-#define HAVE_AESNI 0 +-#define HAVE_AMD3DNOW 0 +-#define HAVE_AMD3DNOWEXT 0 +-#define HAVE_AVX 0 +-#define HAVE_AVX2 0 +-#define HAVE_AVX512 0 +-#define HAVE_FMA3 0 +-#define HAVE_FMA4 0 +-#define HAVE_MMX 0 +-#define HAVE_MMXEXT 0 +-#define HAVE_SSE 0 +-#define HAVE_SSE2 0 +-#define HAVE_SSE3 0 +-#define HAVE_SSE4 0 +-#define HAVE_SSE42 0 +-#define HAVE_SSSE3 0 +-#define HAVE_XOP 0 +-#define HAVE_CPUNOP 0 +-#define HAVE_I686 0 +-#define HAVE_MIPSFPU 0 +-#define HAVE_MIPS32R2 0 +-#define HAVE_MIPS32R5 0 +-#define HAVE_MIPS64R2 0 +-#define HAVE_MIPS32R6 0 +-#define HAVE_MIPS64R6 0 +-#define HAVE_MIPSDSP 0 +-#define HAVE_MIPSDSPR2 0 +-#define HAVE_MSA 0 +-#define HAVE_MSA2 0 +-#define HAVE_LOONGSON2 0 +-#define HAVE_LOONGSON3 0 +-#define HAVE_MMI 0 +-#define HAVE_ARMV5TE_EXTERNAL 0 +-#define HAVE_ARMV6_EXTERNAL 0 +-#define HAVE_ARMV6T2_EXTERNAL 0 +-#define HAVE_ARMV8_EXTERNAL 1 +-#define HAVE_NEON_EXTERNAL 1 +-#define HAVE_VFP_EXTERNAL 1 +-#define HAVE_VFPV3_EXTERNAL 0 +-#define HAVE_SETEND_EXTERNAL 0 +-#define HAVE_ALTIVEC_EXTERNAL 0 +-#define HAVE_DCBZL_EXTERNAL 0 +-#define HAVE_LDBRX_EXTERNAL 0 +-#define HAVE_POWER8_EXTERNAL 0 +-#define HAVE_PPC4XX_EXTERNAL 0 +-#define HAVE_VSX_EXTERNAL 0 +-#define HAVE_AESNI_EXTERNAL 0 +-#define HAVE_AMD3DNOW_EXTERNAL 0 +-#define HAVE_AMD3DNOWEXT_EXTERNAL 0 +-#define HAVE_AVX_EXTERNAL 0 +-#define HAVE_AVX2_EXTERNAL 0 +-#define HAVE_AVX512_EXTERNAL 0 +-#define HAVE_FMA3_EXTERNAL 0 +-#define HAVE_FMA4_EXTERNAL 0 +-#define HAVE_MMX_EXTERNAL 0 +-#define HAVE_MMXEXT_EXTERNAL 0 +-#define HAVE_SSE_EXTERNAL 0 +-#define HAVE_SSE2_EXTERNAL 0 +-#define HAVE_SSE3_EXTERNAL 0 +-#define HAVE_SSE4_EXTERNAL 0 +-#define HAVE_SSE42_EXTERNAL 0 +-#define HAVE_SSSE3_EXTERNAL 0 +-#define HAVE_XOP_EXTERNAL 0 +-#define HAVE_CPUNOP_EXTERNAL 0 +-#define HAVE_I686_EXTERNAL 0 +-#define HAVE_MIPSFPU_EXTERNAL 0 +-#define HAVE_MIPS32R2_EXTERNAL 0 +-#define HAVE_MIPS32R5_EXTERNAL 0 +-#define HAVE_MIPS64R2_EXTERNAL 0 +-#define HAVE_MIPS32R6_EXTERNAL 0 +-#define HAVE_MIPS64R6_EXTERNAL 0 +-#define HAVE_MIPSDSP_EXTERNAL 0 +-#define HAVE_MIPSDSPR2_EXTERNAL 0 +-#define HAVE_MSA_EXTERNAL 0 +-#define HAVE_MSA2_EXTERNAL 0 +-#define HAVE_LOONGSON2_EXTERNAL 0 +-#define HAVE_LOONGSON3_EXTERNAL 0 +-#define HAVE_MMI_EXTERNAL 0 +-#define HAVE_ARMV5TE_INLINE 0 +-#define HAVE_ARMV6_INLINE 0 +-#define HAVE_ARMV6T2_INLINE 0 +-#define HAVE_ARMV8_INLINE 0 +-#define HAVE_NEON_INLINE 0 +-#define HAVE_VFP_INLINE 0 +-#define HAVE_VFPV3_INLINE 0 +-#define HAVE_SETEND_INLINE 0 +-#define HAVE_ALTIVEC_INLINE 0 +-#define HAVE_DCBZL_INLINE 0 +-#define HAVE_LDBRX_INLINE 0 +-#define HAVE_POWER8_INLINE 0 +-#define HAVE_PPC4XX_INLINE 0 +-#define HAVE_VSX_INLINE 0 +-#define HAVE_AESNI_INLINE 0 +-#define HAVE_AMD3DNOW_INLINE 0 +-#define HAVE_AMD3DNOWEXT_INLINE 0 +-#define HAVE_AVX_INLINE 0 +-#define HAVE_AVX2_INLINE 0 +-#define HAVE_AVX512_INLINE 0 +-#define HAVE_FMA3_INLINE 0 +-#define HAVE_FMA4_INLINE 0 +-#define HAVE_MMX_INLINE 0 +-#define HAVE_MMXEXT_INLINE 0 +-#define HAVE_SSE_INLINE 0 +-#define HAVE_SSE2_INLINE 0 +-#define HAVE_SSE3_INLINE 0 +-#define HAVE_SSE4_INLINE 0 +-#define HAVE_SSE42_INLINE 0 +-#define HAVE_SSSE3_INLINE 0 +-#define HAVE_XOP_INLINE 0 +-#define HAVE_CPUNOP_INLINE 0 +-#define HAVE_I686_INLINE 0 +-#define HAVE_MIPSFPU_INLINE 0 +-#define HAVE_MIPS32R2_INLINE 0 +-#define HAVE_MIPS32R5_INLINE 0 +-#define HAVE_MIPS64R2_INLINE 0 +-#define HAVE_MIPS32R6_INLINE 0 +-#define HAVE_MIPS64R6_INLINE 0 +-#define HAVE_MIPSDSP_INLINE 0 +-#define HAVE_MIPSDSPR2_INLINE 0 +-#define HAVE_MSA_INLINE 0 +-#define HAVE_MSA2_INLINE 0 +-#define HAVE_LOONGSON2_INLINE 0 +-#define HAVE_LOONGSON3_INLINE 0 +-#define HAVE_MMI_INLINE 0 +-#define HAVE_ALIGNED_STACK 1 +-#define HAVE_FAST_64BIT 1 +-#define HAVE_FAST_CLZ 0 +-#define HAVE_FAST_CMOV 0 +-#define HAVE_LOCAL_ALIGNED 0 +-#define HAVE_SIMD_ALIGN_16 1 +-#define HAVE_SIMD_ALIGN_32 0 +-#define HAVE_SIMD_ALIGN_64 0 +-#define HAVE_ATOMIC_CAS_PTR 0 +-#define HAVE_MACHINE_RW_BARRIER 0 +-#define HAVE_MEMORYBARRIER 1 +-#define HAVE_MM_EMPTY 0 +-#define HAVE_RDTSC 0 +-#define HAVE_SEM_TIMEDWAIT 0 +-#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0 +-#define HAVE_CABS 0 +-#define HAVE_CEXP 0 +-#define HAVE_INLINE_ASM 0 +-#define HAVE_SYMVER 0 +-#define HAVE_X86ASM 0 +-#define HAVE_BIGENDIAN 0 +-#define HAVE_FAST_UNALIGNED 1 +-#define HAVE_ARPA_INET_H 0 +-#define HAVE_ASM_TYPES_H 0 +-#define HAVE_CDIO_PARANOIA_H 0 +-#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 +-#define HAVE_CUDA_H 0 +-#define HAVE_DISPATCH_DISPATCH_H 0 +-#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 +-#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 +-#define HAVE_DEV_IC_BT8XX_H 0 +-#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 +-#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 +-#define HAVE_DIRECT_H 1 +-#define HAVE_DIRENT_H 0 +-#define HAVE_DXGIDEBUG_H 1 +-#define HAVE_DXVA_H 1 +-#define HAVE_ES2_GL_H 0 +-#define HAVE_GSM_H 0 +-#define HAVE_IO_H 1 +-#define HAVE_LINUX_PERF_EVENT_H 0 +-#define HAVE_MACHINE_IOCTL_BT848_H 0 +-#define HAVE_MACHINE_IOCTL_METEOR_H 0 +-#define HAVE_OPENCV2_CORE_CORE_C_H 0 +-#define HAVE_OPENGL_GL3_H 0 +-#define HAVE_POLL_H 0 +-#define HAVE_SYS_PARAM_H 0 +-#define HAVE_SYS_RESOURCE_H 0 +-#define HAVE_SYS_SELECT_H 0 +-#define HAVE_SYS_SOUNDCARD_H 0 +-#define HAVE_SYS_TIME_H 0 +-#define HAVE_SYS_UN_H 0 +-#define HAVE_SYS_VIDEOIO_H 0 +-#define HAVE_TERMIOS_H 0 +-#define HAVE_UDPLITE_H 0 +-#define HAVE_UNISTD_H 0 +-#define HAVE_VALGRIND_VALGRIND_H 0 +-#define HAVE_WINDOWS_H 1 +-#define HAVE_WINSOCK2_H 1 +-#define HAVE_INTRINSICS_NEON 1 +-#define HAVE_ATANF 1 +-#define HAVE_ATAN2F 1 +-#define HAVE_CBRT 1 +-#define HAVE_CBRTF 1 +-#define HAVE_COPYSIGN 1 +-#define HAVE_COSF 1 +-#define HAVE_ERF 1 +-#define HAVE_EXP2 1 +-#define HAVE_EXP2F 1 +-#define HAVE_EXPF 1 +-#define HAVE_HYPOT 1 +-#define HAVE_ISFINITE 1 +-#define HAVE_ISINF 1 +-#define HAVE_ISNAN 1 +-#define HAVE_LDEXPF 1 +-#define HAVE_LLRINT 1 +-#define HAVE_LLRINTF 1 +-#define HAVE_LOG2 1 +-#define HAVE_LOG2F 1 +-#define HAVE_LOG10F 1 +-#define HAVE_LRINT 1 +-#define HAVE_LRINTF 1 +-#define HAVE_POWF 1 +-#define HAVE_RINT 1 +-#define HAVE_ROUND 1 +-#define HAVE_ROUNDF 1 +-#define HAVE_SINF 1 +-#define HAVE_TRUNC 1 +-#define HAVE_TRUNCF 1 +-#define HAVE_DOS_PATHS 1 +-#define HAVE_LIBC_MSVCRT 1 +-#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 +-#define HAVE_SECTION_DATA_REL_RO 0 +-#define HAVE_THREADS 1 +-#define HAVE_UWP 0 +-#define HAVE_WINRT 0 +-#define HAVE_ACCESS 1 +-#define HAVE_ALIGNED_MALLOC 1 +-#define HAVE_CLOCK_GETTIME 0 +-#define HAVE_CLOSESOCKET 1 +-#define HAVE_COMMANDLINETOARGVW 1 +-#define HAVE_FCNTL 0 +-#define HAVE_GETADDRINFO 1 +-#define HAVE_GETHRTIME 0 +-#define HAVE_GETOPT 0 +-#define HAVE_GETPROCESSAFFINITYMASK 1 +-#define HAVE_GETPROCESSMEMORYINFO 1 +-#define HAVE_GETPROCESSTIMES 1 +-#define HAVE_GETRUSAGE 0 +-#define HAVE_GETSYSTEMTIMEASFILETIME 1 +-#define HAVE_GETTIMEOFDAY 0 +-#define HAVE_GLOB 0 +-#define HAVE_GLXGETPROCADDRESS 0 +-#define HAVE_GMTIME_R 0 +-#define HAVE_INET_ATON 0 +-#define HAVE_ISATTY 1 +-#define HAVE_KBHIT 1 +-#define HAVE_LSTAT 0 +-#define HAVE_LZO1X_999_COMPRESS 0 +-#define HAVE_MACH_ABSOLUTE_TIME 0 +-#define HAVE_MAPVIEWOFFILE 1 +-#define HAVE_MKSTEMP 0 +-#define HAVE_MMAP 0 +-#define HAVE_MPROTECT 0 +-#define HAVE_NANOSLEEP 0 +-#define HAVE_PEEKNAMEDPIPE 1 +-#define HAVE_PTHREAD_CANCEL 0 +-#define HAVE_SCHED_GETAFFINITY 0 +-#define HAVE_SECITEMIMPORT 0 +-#define HAVE_SETCONSOLETEXTATTRIBUTE 1 +-#define HAVE_SETCONSOLECTRLHANDLER 1 +-#define HAVE_SETMODE 1 +-#define HAVE_SETRLIMIT 0 +-#define HAVE_SLEEP 1 +-#define HAVE_STRERROR_R 0 +-#define HAVE_SYSCONF 0 +-#define HAVE_SYSCTL 0 +-#define HAVE_USLEEP 0 +-#define HAVE_UTGETOSTYPEFROMSTRING 0 +-#define HAVE_VIRTUALALLOC 1 +-#define HAVE_WGLGETPROCADDRESS 0 +-#define HAVE_BCRYPT 1 +-#define HAVE_VAAPI_DRM 0 +-#define HAVE_VAAPI_X11 0 +-#define HAVE_VDPAU_X11 0 +-#define HAVE_PTHREADS 0 +-#define HAVE_OS2THREADS 0 +-#define HAVE_W32THREADS 1 +-#define HAVE_AS_ARCH_DIRECTIVE 0 +-#define HAVE_AS_DN_DIRECTIVE 0 +-#define HAVE_AS_FPU_DIRECTIVE 0 +-#define HAVE_AS_FUNC 1 +-#define HAVE_AS_OBJECT_ARCH 0 +-#define HAVE_ASM_MOD_Q 0 +-#define HAVE_BLOCKS_EXTENSION 0 +-#define HAVE_EBP_AVAILABLE 0 +-#define HAVE_EBX_AVAILABLE 0 +-#define HAVE_GNU_AS 0 +-#define HAVE_GNU_WINDRES 0 +-#define HAVE_IBM_ASM 0 +-#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 +-#define HAVE_INLINE_ASM_LABELS 0 +-#define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 +-#define HAVE_PRAGMA_DEPRECATED 1 +-#define HAVE_RSYNC_CONTIMEOUT 1 +-#define HAVE_SYMVER_ASM_LABEL 0 +-#define HAVE_SYMVER_GNU_ASM 0 +-#define HAVE_VFP_ARGS 0 +-#define HAVE_XFORM_ASM 0 +-#define HAVE_XMM_CLOBBERS 0 +-#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 +-#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 +-#define HAVE_SOCKLEN_T 1 +-#define HAVE_STRUCT_ADDRINFO 1 +-#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +-#define HAVE_STRUCT_IP_MREQ_SOURCE 1 +-#define HAVE_STRUCT_IPV6_MREQ 1 +-#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0 +-#define HAVE_STRUCT_POLLFD 1 +-#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0 +-#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 +-#define HAVE_STRUCT_SOCKADDR_IN6 1 +-#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 +-#define HAVE_STRUCT_SOCKADDR_STORAGE 1 +-#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 +-#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 +-#define HAVE_MAKEINFO 0 +-#define HAVE_MAKEINFO_HTML 0 +-#define HAVE_OPENCL_D3D11 0 +-#define HAVE_OPENCL_DRM_ARM 0 +-#define HAVE_OPENCL_DRM_BEIGNET 0 +-#define HAVE_OPENCL_DXVA2 0 +-#define HAVE_OPENCL_VAAPI_BEIGNET 0 +-#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 +-#define HAVE_PERL 1 +-#define HAVE_POD2MAN 1 +-#define HAVE_TEXI2HTML 0 +-#define CONFIG_DOC 0 +-#define CONFIG_HTMLPAGES 0 +-#define CONFIG_MANPAGES 1 +-#define CONFIG_PODPAGES 1 +-#define CONFIG_TXTPAGES 0 +-#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 +-#define CONFIG_AVIO_READING_EXAMPLE 1 +-#define CONFIG_DECODE_AUDIO_EXAMPLE 1 +-#define CONFIG_DECODE_VIDEO_EXAMPLE 1 +-#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 +-#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 +-#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 +-#define CONFIG_EXTRACT_MVS_EXAMPLE 0 +-#define CONFIG_FILTER_AUDIO_EXAMPLE 0 +-#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 +-#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 +-#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 +-#define CONFIG_HW_DECODE_EXAMPLE 0 +-#define CONFIG_METADATA_EXAMPLE 0 +-#define CONFIG_MUXING_EXAMPLE 0 +-#define CONFIG_QSVDEC_EXAMPLE 0 +-#define CONFIG_REMUXING_EXAMPLE 0 +-#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 +-#define CONFIG_SCALING_VIDEO_EXAMPLE 0 +-#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 +-#define CONFIG_TRANSCODING_EXAMPLE 0 +-#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 +-#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 +-#define CONFIG_AVISYNTH 0 +-#define CONFIG_FREI0R 0 +-#define CONFIG_LIBCDIO 0 +-#define CONFIG_LIBDAVS2 0 +-#define CONFIG_LIBRUBBERBAND 0 +-#define CONFIG_LIBVIDSTAB 0 +-#define CONFIG_LIBX264 0 +-#define CONFIG_LIBX265 0 +-#define CONFIG_LIBXAVS 0 +-#define CONFIG_LIBXAVS2 0 +-#define CONFIG_LIBXVID 0 +-#define CONFIG_DECKLINK 0 +-#define CONFIG_LIBFDK_AAC 0 +-#define CONFIG_OPENSSL 0 +-#define CONFIG_LIBTLS 0 +-#define CONFIG_GMP 0 +-#define CONFIG_LIBARIBB24 0 +-#define CONFIG_LIBLENSFUN 0 +-#define CONFIG_LIBOPENCORE_AMRNB 0 +-#define CONFIG_LIBOPENCORE_AMRWB 0 +-#define CONFIG_LIBVMAF 0 +-#define CONFIG_LIBVO_AMRWBENC 0 +-#define CONFIG_MBEDTLS 0 +-#define CONFIG_RKMPP 0 +-#define CONFIG_LIBSMBCLIENT 0 +-#define CONFIG_CHROMAPRINT 0 +-#define CONFIG_GCRYPT 0 +-#define CONFIG_GNUTLS 0 +-#define CONFIG_JNI 0 +-#define CONFIG_LADSPA 0 +-#define CONFIG_LIBAOM 0 +-#define CONFIG_LIBASS 0 +-#define CONFIG_LIBBLURAY 0 +-#define CONFIG_LIBBS2B 0 +-#define CONFIG_LIBCACA 0 +-#define CONFIG_LIBCELT 0 +-#define CONFIG_LIBCODEC2 0 +-#define CONFIG_LIBDAV1D 0 +-#define CONFIG_LIBDC1394 0 +-#define CONFIG_LIBDRM 0 +-#define CONFIG_LIBFLITE 0 +-#define CONFIG_LIBFONTCONFIG 0 +-#define CONFIG_LIBFREETYPE 0 +-#define CONFIG_LIBFRIBIDI 0 +-#define CONFIG_LIBGME 0 +-#define CONFIG_LIBGSM 0 +-#define CONFIG_LIBIEC61883 0 +-#define CONFIG_LIBILBC 0 +-#define CONFIG_LIBJACK 0 +-#define CONFIG_LIBKLVANC 0 +-#define CONFIG_LIBKVAZAAR 0 +-#define CONFIG_LIBMODPLUG 0 +-#define CONFIG_LIBMP3LAME 0 +-#define CONFIG_LIBMYSOFA 0 +-#define CONFIG_LIBOPENCV 0 +-#define CONFIG_LIBOPENH264 0 +-#define CONFIG_LIBOPENJPEG 0 +-#define CONFIG_LIBOPENMPT 0 +-#define CONFIG_LIBOPUS 0 +-#define CONFIG_LIBPULSE 0 +-#define CONFIG_LIBRSVG 0 +-#define CONFIG_LIBRTMP 0 +-#define CONFIG_LIBSHINE 0 +-#define CONFIG_LIBSMBCLIENT 0 +-#define CONFIG_LIBSNAPPY 0 +-#define CONFIG_LIBSOXR 0 +-#define CONFIG_LIBSPEEX 0 +-#define CONFIG_LIBSRT 0 +-#define CONFIG_LIBSSH 0 +-#define CONFIG_LIBTENSORFLOW 0 +-#define CONFIG_LIBTESSERACT 0 +-#define CONFIG_LIBTHEORA 0 +-#define CONFIG_LIBTWOLAME 0 +-#define CONFIG_LIBV4L2 0 +-#define CONFIG_LIBVORBIS 0 +-#define CONFIG_LIBVPX 0 +-#define CONFIG_LIBWAVPACK 0 +-#define CONFIG_LIBWEBP 0 +-#define CONFIG_LIBXML2 0 +-#define CONFIG_LIBZIMG 0 +-#define CONFIG_LIBZMQ 0 +-#define CONFIG_LIBZVBI 0 +-#define CONFIG_LV2 0 +-#define CONFIG_MEDIACODEC 0 +-#define CONFIG_OPENAL 0 +-#define CONFIG_OPENGL 0 +-#define CONFIG_POCKETSPHINX 0 +-#define CONFIG_VAPOURSYNTH 0 +-#define CONFIG_ALSA 0 +-#define CONFIG_APPKIT 0 +-#define CONFIG_AVFOUNDATION 0 +-#define CONFIG_BZLIB 0 +-#define CONFIG_COREIMAGE 0 +-#define CONFIG_ICONV 0 +-#define CONFIG_LIBXCB 0 +-#define CONFIG_LIBXCB_SHM 0 +-#define CONFIG_LIBXCB_SHAPE 0 +-#define CONFIG_LIBXCB_XFIXES 0 +-#define CONFIG_LZMA 0 +-#define CONFIG_SCHANNEL 0 +-#define CONFIG_SDL2 0 +-#define CONFIG_SECURETRANSPORT 0 +-#define CONFIG_SNDIO 0 +-#define CONFIG_XLIB 0 +-#define CONFIG_ZLIB 0 +-#define CONFIG_CUDA_NVCC 0 +-#define CONFIG_CUDA_SDK 0 +-#define CONFIG_LIBNPP 0 +-#define CONFIG_LIBMFX 0 +-#define CONFIG_MMAL 0 +-#define CONFIG_OMX 0 +-#define CONFIG_OPENCL 0 +-#define CONFIG_AMF 0 +-#define CONFIG_AUDIOTOOLBOX 0 +-#define CONFIG_CRYSTALHD 0 +-#define CONFIG_CUDA 0 +-#define CONFIG_CUDA_LLVM 0 +-#define CONFIG_CUVID 0 +-#define CONFIG_D3D11VA 0 +-#define CONFIG_DXVA2 0 +-#define CONFIG_FFNVCODEC 0 +-#define CONFIG_NVDEC 0 +-#define CONFIG_NVENC 0 +-#define CONFIG_VAAPI 0 +-#define CONFIG_VDPAU 0 +-#define CONFIG_VIDEOTOOLBOX 0 +-#define CONFIG_V4L2_M2M 0 +-#define CONFIG_XVMC 0 +-#define CONFIG_FTRAPV 0 +-#define CONFIG_GRAY 0 +-#define CONFIG_HARDCODED_TABLES 0 +-#define CONFIG_OMX_RPI 0 +-#define CONFIG_RUNTIME_CPUDETECT 1 +-#define CONFIG_SAFE_BITSTREAM_READER 1 +-#define CONFIG_SHARED 1 +-#define CONFIG_SMALL 0 +-#define CONFIG_STATIC 0 +-#define CONFIG_SWSCALE_ALPHA 1 +-#define CONFIG_GPL 0 +-#define CONFIG_NONFREE 0 +-#define CONFIG_VERSION3 0 +-#define CONFIG_AVDEVICE 0 +-#define CONFIG_AVFILTER 0 +-#define CONFIG_SWSCALE 0 +-#define CONFIG_POSTPROC 0 +-#define CONFIG_AVFORMAT 0 +-#define CONFIG_AVCODEC 1 +-#define CONFIG_SWRESAMPLE 0 +-#define CONFIG_AVRESAMPLE 0 +-#define CONFIG_AVUTIL 1 +-#define CONFIG_FFPLAY 0 +-#define CONFIG_FFPROBE 0 +-#define CONFIG_FFMPEG 0 +-#define CONFIG_DCT 1 +-#define CONFIG_DWT 0 +-#define CONFIG_ERROR_RESILIENCE 0 +-#define CONFIG_FAAN 1 +-#define CONFIG_FAST_UNALIGNED 1 +-#define CONFIG_FFT 1 +-#define CONFIG_LSP 0 +-#define CONFIG_LZO 0 +-#define CONFIG_MDCT 0 +-#define CONFIG_PIXELUTILS 0 +-#define CONFIG_NETWORK 0 +-#define CONFIG_RDFT 1 +-#define CONFIG_AUTODETECT 0 +-#define CONFIG_FONTCONFIG 0 +-#define CONFIG_LINUX_PERF 0 +-#define CONFIG_MEMORY_POISONING 0 +-#define CONFIG_NEON_CLOBBER_TEST 0 +-#define CONFIG_OSSFUZZ 0 +-#define CONFIG_PIC 1 +-#define CONFIG_THUMB 0 +-#define CONFIG_VALGRIND_BACKTRACE 0 +-#define CONFIG_XMM_CLOBBER_TEST 0 +-#define CONFIG_BSFS 1 +-#define CONFIG_DECODERS 1 +-#define CONFIG_PARSERS 1 +-#define CONFIG_AANDCTTABLES 0 +-#define CONFIG_AC3DSP 0 +-#define CONFIG_ADTS_HEADER 0 +-#define CONFIG_AUDIO_FRAME_QUEUE 0 +-#define CONFIG_AUDIODSP 0 +-#define CONFIG_BLOCKDSP 0 +-#define CONFIG_BSWAPDSP 0 +-#define CONFIG_CABAC 0 +-#define CONFIG_CBS 0 +-#define CONFIG_CBS_AV1 0 +-#define CONFIG_CBS_H264 0 +-#define CONFIG_CBS_H265 0 +-#define CONFIG_CBS_JPEG 0 +-#define CONFIG_CBS_MPEG2 0 +-#define CONFIG_CBS_VP9 0 +-#define CONFIG_DIRAC_PARSE 0 +-#define CONFIG_DNN 0 +-#define CONFIG_DVPROFILE 0 +-#define CONFIG_EXIF 0 +-#define CONFIG_FAANDCT 1 +-#define CONFIG_FAANIDCT 1 +-#define CONFIG_FDCTDSP 1 +-#define CONFIG_FLACDSP 1 +-#define CONFIG_FMTCONVERT 0 +-#define CONFIG_FRAME_THREAD_ENCODER 0 +-#define CONFIG_G722DSP 0 +-#define CONFIG_GOLOMB 0 +-#define CONFIG_GPLV3 0 +-#define CONFIG_H263DSP 0 +-#define CONFIG_H264CHROMA 0 +-#define CONFIG_H264DSP 0 +-#define CONFIG_H264PARSE 0 +-#define CONFIG_H264PRED 1 +-#define CONFIG_H264QPEL 0 +-#define CONFIG_HEVCPARSE 0 +-#define CONFIG_HPELDSP 0 +-#define CONFIG_HUFFMAN 0 +-#define CONFIG_HUFFYUVDSP 0 +-#define CONFIG_HUFFYUVENCDSP 0 +-#define CONFIG_IDCTDSP 1 +-#define CONFIG_IIRFILTER 0 +-#define CONFIG_MDCT15 0 +-#define CONFIG_INTRAX8 0 +-#define CONFIG_ISO_MEDIA 0 +-#define CONFIG_IVIDSP 0 +-#define CONFIG_JPEGTABLES 0 +-#define CONFIG_LGPLV3 0 +-#define CONFIG_LIBX262 0 +-#define CONFIG_LLAUDDSP 0 +-#define CONFIG_LLVIDDSP 0 +-#define CONFIG_LLVIDENCDSP 0 +-#define CONFIG_LPC 0 +-#define CONFIG_LZF 0 +-#define CONFIG_ME_CMP 0 +-#define CONFIG_MPEG_ER 0 +-#define CONFIG_MPEGAUDIO 1 +-#define CONFIG_MPEGAUDIODSP 1 +-#define CONFIG_MPEGAUDIOHEADER 1 +-#define CONFIG_MPEGVIDEO 0 +-#define CONFIG_MPEGVIDEOENC 0 +-#define CONFIG_MSS34DSP 0 +-#define CONFIG_PIXBLOCKDSP 0 +-#define CONFIG_QPELDSP 0 +-#define CONFIG_QSV 0 +-#define CONFIG_QSVDEC 0 +-#define CONFIG_QSVENC 0 +-#define CONFIG_QSVVPP 0 +-#define CONFIG_RANGECODER 0 +-#define CONFIG_RIFFDEC 0 +-#define CONFIG_RIFFENC 0 +-#define CONFIG_RTPDEC 0 +-#define CONFIG_RTPENC_CHAIN 0 +-#define CONFIG_RV34DSP 0 +-#define CONFIG_SCENE_SAD 0 +-#define CONFIG_SINEWIN 0 +-#define CONFIG_SNAPPY 0 +-#define CONFIG_SRTP 0 +-#define CONFIG_STARTCODE 0 +-#define CONFIG_TEXTUREDSP 0 +-#define CONFIG_TEXTUREDSPENC 0 +-#define CONFIG_TPELDSP 0 +-#define CONFIG_VAAPI_1 0 +-#define CONFIG_VAAPI_ENCODE 0 +-#define CONFIG_VC1DSP 0 +-#define CONFIG_VIDEODSP 1 +-#define CONFIG_VP3DSP 0 +-#define CONFIG_VP56DSP 0 +-#define CONFIG_VP8DSP 1 +-#define CONFIG_WMA_FREQS 0 +-#define CONFIG_WMV2DSP 0 +-#define CONFIG_NULL_BSF 1 +-#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-#define CONFIG_VP8_DECODER 1 +-#define CONFIG_VP9_DECODER 1 +-#define CONFIG_FLAC_DECODER 1 +-#define CONFIG_MP3_DECODER 1 +-#define CONFIG_VP8_PARSER 1 +-#define CONFIG_VP9_PARSER 1 +-#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_android32.h b/media/ffvpx/config_android32.h +--- a/media/ffvpx/config_android32.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_android32.h 2023-04-06 12:49:19.191546429 +0200 +@@ -1,15 +1,16 @@ + /* Automatically generated by configure - do not modify! */ + #ifndef FFMPEG_CONFIG_H + #define FFMPEG_CONFIG_H +-#define FFMPEG_CONFIGURATION "--cross-prefix=/home/jyavenard/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=/home/jyavenard/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-cuda --disable-cuvid --enable-decoder=mp3" ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='mp3,flac' --disable-static --enable-shared --disable-autodetect --enable-small --target-os=linux --arch=arm --enable-cross-compile --cc=/Users/padenot/.mozbuild/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi16-clang" + #define FFMPEG_LICENSE "LGPL version 2.1 or later" +-#define CONFIG_THIS_YEAR 2017 ++#define CONFIG_THIS_YEAR 2022 + #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" + #define AVCONV_DATADIR "/usr/local/share/ffmpeg" +-#define CC_IDENT "gcc 4.9.x (GCC) 20150123 (prerelease)" ++#define CC_IDENT "Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)" ++#define OS_NAME linux + #define av_restrict restrict + #define EXTERN_PREFIX "" +-#define EXTERN_ASM ++#define EXTERN_ASM + #define BUILDSUF "" + #define SLIBSUF ".so" + #define HAVE_MMX2 HAVE_MMXEXT +@@ -22,12 +23,16 @@ + #define ARCH_AVR32_UC 0 + #define ARCH_BFIN 0 + #define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 + #define ARCH_M68K 0 + #define ARCH_MIPS 0 + #define ARCH_MIPS64 0 + #define ARCH_PARISC 0 + #define ARCH_PPC 0 + #define ARCH_PPC64 0 ++#define ARCH_RISCV 0 + #define ARCH_S390 0 + #define ARCH_SH4 0 + #define ARCH_SPARC 0 +@@ -58,6 +63,7 @@ + #define HAVE_AVX 0 + #define HAVE_AVX2 0 + #define HAVE_AVX512 0 ++#define HAVE_AVX512ICL 0 + #define HAVE_FMA3 0 + #define HAVE_FMA4 0 + #define HAVE_MMX 0 +@@ -80,18 +86,19 @@ + #define HAVE_MIPSDSP 0 + #define HAVE_MIPSDSPR2 0 + #define HAVE_MSA 0 +-#define HAVE_MSA2 0 + #define HAVE_LOONGSON2 0 + #define HAVE_LOONGSON3 0 + #define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 + #define HAVE_ARMV5TE_EXTERNAL 1 +-#define HAVE_ARMV6_EXTERNAL 0 +-#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 1 ++#define HAVE_ARMV6T2_EXTERNAL 1 + #define HAVE_ARMV8_EXTERNAL 0 +-#define HAVE_NEON_EXTERNAL 0 ++#define HAVE_NEON_EXTERNAL 1 + #define HAVE_VFP_EXTERNAL 1 +-#define HAVE_VFPV3_EXTERNAL 0 +-#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_VFPV3_EXTERNAL 1 ++#define HAVE_SETEND_EXTERNAL 1 + #define HAVE_ALTIVEC_EXTERNAL 0 + #define HAVE_DCBZL_EXTERNAL 0 + #define HAVE_LDBRX_EXTERNAL 0 +@@ -104,6 +111,7 @@ + #define HAVE_AVX_EXTERNAL 0 + #define HAVE_AVX2_EXTERNAL 0 + #define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_AVX512ICL_EXTERNAL 0 + #define HAVE_FMA3_EXTERNAL 0 + #define HAVE_FMA4_EXTERNAL 0 + #define HAVE_MMX_EXTERNAL 0 +@@ -126,18 +134,19 @@ + #define HAVE_MIPSDSP_EXTERNAL 0 + #define HAVE_MIPSDSPR2_EXTERNAL 0 + #define HAVE_MSA_EXTERNAL 0 +-#define HAVE_MSA2_EXTERNAL 0 + #define HAVE_LOONGSON2_EXTERNAL 0 + #define HAVE_LOONGSON3_EXTERNAL 0 + #define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 + #define HAVE_ARMV5TE_INLINE 1 +-#define HAVE_ARMV6_INLINE 0 +-#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV6_INLINE 1 ++#define HAVE_ARMV6T2_INLINE 1 + #define HAVE_ARMV8_INLINE 0 +-#define HAVE_NEON_INLINE 0 +-#define HAVE_VFP_INLINE 0 +-#define HAVE_VFPV3_INLINE 0 +-#define HAVE_SETEND_INLINE 0 ++#define HAVE_NEON_INLINE 1 ++#define HAVE_VFP_INLINE 1 ++#define HAVE_VFPV3_INLINE 1 ++#define HAVE_SETEND_INLINE 1 + #define HAVE_ALTIVEC_INLINE 0 + #define HAVE_DCBZL_INLINE 0 + #define HAVE_LDBRX_INLINE 0 +@@ -150,6 +159,7 @@ + #define HAVE_AVX_INLINE 0 + #define HAVE_AVX2_INLINE 0 + #define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 + #define HAVE_FMA3_INLINE 0 + #define HAVE_FMA4_INLINE 0 + #define HAVE_MMX_INLINE 0 +@@ -172,10 +182,11 @@ + #define HAVE_MIPSDSP_INLINE 0 + #define HAVE_MIPSDSPR2_INLINE 0 + #define HAVE_MSA_INLINE 0 +-#define HAVE_MSA2_INLINE 0 + #define HAVE_LOONGSON2_INLINE 0 + #define HAVE_LOONGSON3_INLINE 0 + #define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 + #define HAVE_ALIGNED_STACK 0 + #define HAVE_FAST_64BIT 0 + #define HAVE_FAST_CLZ 1 +@@ -191,13 +202,13 @@ + #define HAVE_RDTSC 0 + #define HAVE_SEM_TIMEDWAIT 1 + #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 +-#define HAVE_CABS 1 +-#define HAVE_CEXP 1 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 + #define HAVE_INLINE_ASM 1 + #define HAVE_SYMVER 1 + #define HAVE_X86ASM 0 + #define HAVE_BIGENDIAN 0 +-#define HAVE_FAST_UNALIGNED 0 ++#define HAVE_FAST_UNALIGNED 1 + #define HAVE_ARPA_INET_H 1 + #define HAVE_ASM_TYPES_H 1 + #define HAVE_CDIO_PARANOIA_H 0 +@@ -216,9 +227,11 @@ + #define HAVE_ES2_GL_H 0 + #define HAVE_GSM_H 0 + #define HAVE_IO_H 0 +-#define HAVE_LINUX_PERF_EVENT_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 1 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_MALLOC_H 1 + #define HAVE_OPENCV2_CORE_CORE_C_H 0 + #define HAVE_OPENGL_GL3_H 0 + #define HAVE_POLL_H 1 +@@ -235,7 +248,7 @@ + #define HAVE_VALGRIND_VALGRIND_H 0 + #define HAVE_WINDOWS_H 0 + #define HAVE_WINSOCK2_H 0 +-#define HAVE_INTRINSICS_NEON 0 ++#define HAVE_INTRINSICS_NEON 1 + #define HAVE_ATANF 1 + #define HAVE_ATAN2F 1 + #define HAVE_CBRT 1 +@@ -253,8 +266,8 @@ + #define HAVE_LDEXPF 1 + #define HAVE_LLRINT 1 + #define HAVE_LLRINTF 1 +-#define HAVE_LOG2 1 +-#define HAVE_LOG2F 1 ++#define HAVE_LOG2 0 ++#define HAVE_LOG2F 0 + #define HAVE_LOG10F 1 + #define HAVE_LRINT 1 + #define HAVE_LRINTF 1 +@@ -274,17 +287,22 @@ + #define HAVE_WINRT 0 + #define HAVE_ACCESS 1 + #define HAVE_ALIGNED_MALLOC 0 ++#define HAVE_ARC4RANDOM 1 + #define HAVE_CLOCK_GETTIME 1 + #define HAVE_CLOSESOCKET 0 + #define HAVE_COMMANDLINETOARGVW 0 + #define HAVE_FCNTL 1 + #define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 0 ++#define HAVE_GETENV 1 + #define HAVE_GETHRTIME 0 + #define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 + #define HAVE_GETPROCESSAFFINITYMASK 0 + #define HAVE_GETPROCESSMEMORYINFO 0 + #define HAVE_GETPROCESSTIMES 0 + #define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 + #define HAVE_GETSYSTEMTIMEASFILETIME 0 + #define HAVE_GETTIMEOFDAY 1 + #define HAVE_GLOB 0 +@@ -293,20 +311,24 @@ + #define HAVE_INET_ATON 1 + #define HAVE_ISATTY 1 + #define HAVE_KBHIT 0 ++#define HAVE_LOCALTIME_R 1 + #define HAVE_LSTAT 1 + #define HAVE_LZO1X_999_COMPRESS 0 + #define HAVE_MACH_ABSOLUTE_TIME 0 + #define HAVE_MAPVIEWOFFILE 0 ++#define HAVE_MEMALIGN 1 + #define HAVE_MKSTEMP 1 + #define HAVE_MMAP 1 + #define HAVE_MPROTECT 1 + #define HAVE_NANOSLEEP 1 + #define HAVE_PEEKNAMEDPIPE 0 ++#define HAVE_POSIX_MEMALIGN 0 + #define HAVE_PTHREAD_CANCEL 0 + #define HAVE_SCHED_GETAFFINITY 1 + #define HAVE_SECITEMIMPORT 0 + #define HAVE_SETCONSOLETEXTATTRIBUTE 0 + #define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 + #define HAVE_SETMODE 0 + #define HAVE_SETRLIMIT 1 + #define HAVE_SLEEP 0 +@@ -325,7 +347,7 @@ + #define HAVE_OS2THREADS 0 + #define HAVE_W32THREADS 0 + #define HAVE_AS_ARCH_DIRECTIVE 1 +-#define HAVE_AS_DN_DIRECTIVE 1 ++#define HAVE_AS_DN_DIRECTIVE 0 + #define HAVE_AS_FPU_DIRECTIVE 1 + #define HAVE_AS_FUNC 0 + #define HAVE_AS_OBJECT_ARCH 1 +@@ -340,14 +362,29 @@ + #define HAVE_INLINE_ASM_LABELS 1 + #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 + #define HAVE_PRAGMA_DEPRECATED 1 +-#define HAVE_RSYNC_CONTIMEOUT 1 +-#define HAVE_SYMVER_ASM_LABEL 0 ++#define HAVE_RSYNC_CONTIMEOUT 0 ++#define HAVE_SYMVER_ASM_LABEL 1 + #define HAVE_SYMVER_GNU_ASM 1 + #define HAVE_VFP_ARGS 0 + #define HAVE_XFORM_ASM 0 + #define HAVE_XMM_CLOBBERS 0 + #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 + #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + #define HAVE_SOCKLEN_T 1 + #define HAVE_STRUCT_ADDRINFO 1 + #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -360,8 +397,10 @@ + #define HAVE_STRUCT_SOCKADDR_IN6 1 + #define HAVE_STRUCT_SOCKADDR_SA_LEN 0 + #define HAVE_STRUCT_SOCKADDR_STORAGE 1 +-#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 +-#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 + #define HAVE_MAKEINFO 1 + #define HAVE_MAKEINFO_HTML 0 + #define HAVE_OPENCL_D3D11 0 +@@ -373,12 +412,14 @@ + #define HAVE_PERL 1 + #define HAVE_POD2MAN 1 + #define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 + #define CONFIG_DOC 0 + #define CONFIG_HTMLPAGES 0 + #define CONFIG_MANPAGES 1 + #define CONFIG_PODPAGES 1 + #define CONFIG_TXTPAGES 1 +-#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + #define CONFIG_AVIO_READING_EXAMPLE 1 + #define CONFIG_DECODE_AUDIO_EXAMPLE 1 + #define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -414,14 +455,12 @@ + #define CONFIG_LIBXVID 0 + #define CONFIG_DECKLINK 0 + #define CONFIG_LIBFDK_AAC 0 +-#define CONFIG_OPENSSL 0 + #define CONFIG_LIBTLS 0 + #define CONFIG_GMP 0 + #define CONFIG_LIBARIBB24 0 + #define CONFIG_LIBLENSFUN 0 + #define CONFIG_LIBOPENCORE_AMRNB 0 + #define CONFIG_LIBOPENCORE_AMRWB 0 +-#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVO_AMRWBENC 0 + #define CONFIG_MBEDTLS 0 + #define CONFIG_RKMPP 0 +@@ -431,6 +470,7 @@ + #define CONFIG_GNUTLS 0 + #define CONFIG_JNI 0 + #define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 + #define CONFIG_LIBAOM 0 + #define CONFIG_LIBASS 0 + #define CONFIG_LIBBLURAY 0 +@@ -445,11 +485,13 @@ + #define CONFIG_LIBFONTCONFIG 0 + #define CONFIG_LIBFREETYPE 0 + #define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 + #define CONFIG_LIBGME 0 + #define CONFIG_LIBGSM 0 + #define CONFIG_LIBIEC61883 0 + #define CONFIG_LIBILBC 0 + #define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 + #define CONFIG_LIBKLVANC 0 + #define CONFIG_LIBKVAZAAR 0 + #define CONFIG_LIBMODPLUG 0 +@@ -459,10 +501,16 @@ + #define CONFIG_LIBOPENH264 0 + #define CONFIG_LIBOPENJPEG 0 + #define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 + #define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 + #define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 + #define CONFIG_LIBRSVG 0 + #define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 + #define CONFIG_LIBSHINE 0 + #define CONFIG_LIBSMBCLIENT 0 + #define CONFIG_LIBSNAPPY 0 +@@ -470,14 +518,16 @@ + #define CONFIG_LIBSPEEX 0 + #define CONFIG_LIBSRT 0 + #define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 + #define CONFIG_LIBTENSORFLOW 0 + #define CONFIG_LIBTESSERACT 0 + #define CONFIG_LIBTHEORA 0 + #define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 + #define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVORBIS 0 + #define CONFIG_LIBVPX 0 +-#define CONFIG_LIBWAVPACK 0 + #define CONFIG_LIBWEBP 0 + #define CONFIG_LIBXML2 0 + #define CONFIG_LIBZIMG 0 +@@ -487,25 +537,28 @@ + #define CONFIG_MEDIACODEC 0 + #define CONFIG_OPENAL 0 + #define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 + #define CONFIG_POCKETSPHINX 0 + #define CONFIG_VAPOURSYNTH 0 + #define CONFIG_ALSA 0 +-#define CONFIG_APPKIT 1 +-#define CONFIG_AVFOUNDATION 1 +-#define CONFIG_BZLIB 1 +-#define CONFIG_COREIMAGE 1 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 + #define CONFIG_ICONV 0 + #define CONFIG_LIBXCB 0 + #define CONFIG_LIBXCB_SHM 0 + #define CONFIG_LIBXCB_SHAPE 0 + #define CONFIG_LIBXCB_XFIXES 0 +-#define CONFIG_LZMA 1 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 + #define CONFIG_SCHANNEL 0 + #define CONFIG_SDL2 0 + #define CONFIG_SECURETRANSPORT 0 + #define CONFIG_SNDIO 0 +-#define CONFIG_XLIB 1 +-#define CONFIG_ZLIB 1 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 + #define CONFIG_CUDA_NVCC 0 + #define CONFIG_CUDA_SDK 0 + #define CONFIG_LIBNPP 0 +@@ -527,8 +580,8 @@ + #define CONFIG_VAAPI 0 + #define CONFIG_VDPAU 0 + #define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 + #define CONFIG_V4L2_M2M 0 +-#define CONFIG_XVMC 0 + #define CONFIG_FTRAPV 0 + #define CONFIG_GRAY 0 + #define CONFIG_HARDCODED_TABLES 0 +@@ -549,7 +602,6 @@ + #define CONFIG_AVFORMAT 0 + #define CONFIG_AVCODEC 1 + #define CONFIG_SWRESAMPLE 0 +-#define CONFIG_AVRESAMPLE 0 + #define CONFIG_AVUTIL 1 + #define CONFIG_FFPLAY 0 + #define CONFIG_FFPROBE 0 +@@ -558,30 +610,41 @@ + #define CONFIG_DWT 0 + #define CONFIG_ERROR_RESILIENCE 0 + #define CONFIG_FAAN 1 +-#define CONFIG_FAST_UNALIGNED 0 +-#define CONFIG_FFT 0 ++#define CONFIG_FAST_UNALIGNED 1 ++#define CONFIG_FFT 1 + #define CONFIG_LSP 0 +-#define CONFIG_LZO 0 + #define CONFIG_MDCT 0 + #define CONFIG_PIXELUTILS 0 + #define CONFIG_NETWORK 0 + #define CONFIG_RDFT 1 + #define CONFIG_AUTODETECT 0 + #define CONFIG_FONTCONFIG 0 +-#define CONFIG_LINUX_PERF 0 ++#define CONFIG_LARGE_TESTS 1 ++#define CONFIG_LINUX_PERF 1 ++#define CONFIG_MACOS_KPERF 0 + #define CONFIG_MEMORY_POISONING 0 + #define CONFIG_NEON_CLOBBER_TEST 0 + #define CONFIG_OSSFUZZ 0 + #define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 + #define CONFIG_THUMB 0 + #define CONFIG_VALGRIND_BACKTRACE 0 + #define CONFIG_XMM_CLOBBER_TEST 0 +-#define CONFIG_BSFS 1 ++#define CONFIG_BSFS 0 + #define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 + #define CONFIG_PARSERS 0 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 + #define CONFIG_AANDCTTABLES 0 + #define CONFIG_AC3DSP 0 + #define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 + #define CONFIG_AUDIO_FRAME_QUEUE 0 + #define CONFIG_AUDIODSP 0 + #define CONFIG_BLOCKDSP 0 +@@ -594,15 +657,18 @@ + #define CONFIG_CBS_JPEG 0 + #define CONFIG_CBS_MPEG2 0 + #define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 + #define CONFIG_DIRAC_PARSE 0 + #define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 + #define CONFIG_DVPROFILE 0 + #define CONFIG_EXIF 0 +-#define CONFIG_FAANDCT 0 +-#define CONFIG_FAANIDCT 0 +-#define CONFIG_FDCTDSP 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 + #define CONFIG_FLACDSP 1 + #define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 + #define CONFIG_G722DSP 0 + #define CONFIG_GOLOMB 0 + #define CONFIG_GPLV3 0 +@@ -617,9 +683,10 @@ + #define CONFIG_HUFFMAN 0 + #define CONFIG_HUFFYUVDSP 0 + #define CONFIG_HUFFYUVENCDSP 0 +-#define CONFIG_IDCTDSP 0 ++#define CONFIG_IDCTDSP 1 + #define CONFIG_IIRFILTER 0 + #define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 + #define CONFIG_INTRAX8 0 + #define CONFIG_ISO_MEDIA 0 + #define CONFIG_IVIDSP 0 +@@ -636,7 +703,9 @@ + #define CONFIG_MPEGAUDIO 1 + #define CONFIG_MPEGAUDIODSP 1 + #define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 + #define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 + #define CONFIG_MPEGVIDEOENC 0 + #define CONFIG_MSS34DSP 0 + #define CONFIG_PIXBLOCKDSP 0 +@@ -668,12 +737,4 @@ + #define CONFIG_VP8DSP 0 + #define CONFIG_WMA_FREQS 0 + #define CONFIG_WMV2DSP 0 +-#define CONFIG_NULL_BSF 1 +-#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0 +-#define CONFIG_VP8_DECODER 0 +-#define CONFIG_VP9_DECODER 0 +-#define CONFIG_FLAC_DECODER 1 +-#define CONFIG_MP3_DECODER 1 +-#define CONFIG_VP8_PARSER 0 +-#define CONFIG_VP9_PARSER 0 + #endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_android64.h b/media/ffvpx/config_android64.h +--- a/media/ffvpx/config_android64.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_android64.h 2023-04-06 12:49:19.191546429 +0200 +@@ -0,0 +1,740 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_H ++#define FFMPEG_CONFIG_H ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='mp3,flac' --disable-static --enable-shared --disable-autodetect --enable-small --target-os=linux --arch=aarch64 --enable-cross-compile --cc=/Users/padenot/.mozbuild/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang" ++#define FFMPEG_LICENSE "LGPL version 2.1 or later" ++#define CONFIG_THIS_YEAR 2022 ++#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" ++#define AVCONV_DATADIR "/usr/local/share/ffmpeg" ++#define CC_IDENT "Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)" ++#define OS_NAME linux ++#define av_restrict restrict ++#define EXTERN_PREFIX "" ++#define EXTERN_ASM ++#define BUILDSUF "" ++#define SLIBSUF ".so" ++#define HAVE_MMX2 HAVE_MMXEXT ++#define SWS_MAX_FILTER_SIZE 256 ++#define ARCH_AARCH64 1 ++#define ARCH_ALPHA 0 ++#define ARCH_ARM 0 ++#define ARCH_AVR32 0 ++#define ARCH_AVR32_AP 0 ++#define ARCH_AVR32_UC 0 ++#define ARCH_BFIN 0 ++#define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 ++#define ARCH_M68K 0 ++#define ARCH_MIPS 0 ++#define ARCH_MIPS64 0 ++#define ARCH_PARISC 0 ++#define ARCH_PPC 0 ++#define ARCH_PPC64 0 ++#define ARCH_RISCV 0 ++#define ARCH_S390 0 ++#define ARCH_SH4 0 ++#define ARCH_SPARC 0 ++#define ARCH_SPARC64 0 ++#define ARCH_TILEGX 0 ++#define ARCH_TILEPRO 0 ++#define ARCH_TOMI 0 ++#define ARCH_X86 0 ++#define ARCH_X86_32 0 ++#define ARCH_X86_64 0 ++#define HAVE_ARMV5TE 0 ++#define HAVE_ARMV6 0 ++#define HAVE_ARMV6T2 0 ++#define HAVE_ARMV8 1 ++#define HAVE_NEON 1 ++#define HAVE_VFP 1 ++#define HAVE_VFPV3 0 ++#define HAVE_SETEND 0 ++#define HAVE_ALTIVEC 0 ++#define HAVE_DCBZL 0 ++#define HAVE_LDBRX 0 ++#define HAVE_POWER8 0 ++#define HAVE_PPC4XX 0 ++#define HAVE_VSX 0 ++#define HAVE_AESNI 0 ++#define HAVE_AMD3DNOW 0 ++#define HAVE_AMD3DNOWEXT 0 ++#define HAVE_AVX 0 ++#define HAVE_AVX2 0 ++#define HAVE_AVX512 0 ++#define HAVE_AVX512ICL 0 ++#define HAVE_FMA3 0 ++#define HAVE_FMA4 0 ++#define HAVE_MMX 0 ++#define HAVE_MMXEXT 0 ++#define HAVE_SSE 0 ++#define HAVE_SSE2 0 ++#define HAVE_SSE3 0 ++#define HAVE_SSE4 0 ++#define HAVE_SSE42 0 ++#define HAVE_SSSE3 0 ++#define HAVE_XOP 0 ++#define HAVE_CPUNOP 0 ++#define HAVE_I686 0 ++#define HAVE_MIPSFPU 0 ++#define HAVE_MIPS32R2 0 ++#define HAVE_MIPS32R5 0 ++#define HAVE_MIPS64R2 0 ++#define HAVE_MIPS32R6 0 ++#define HAVE_MIPS64R6 0 ++#define HAVE_MIPSDSP 0 ++#define HAVE_MIPSDSPR2 0 ++#define HAVE_MSA 0 ++#define HAVE_LOONGSON2 0 ++#define HAVE_LOONGSON3 0 ++#define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 ++#define HAVE_ARMV5TE_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 0 ++#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV8_EXTERNAL 1 ++#define HAVE_NEON_EXTERNAL 1 ++#define HAVE_VFP_EXTERNAL 1 ++#define HAVE_VFPV3_EXTERNAL 0 ++#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_ALTIVEC_EXTERNAL 0 ++#define HAVE_DCBZL_EXTERNAL 0 ++#define HAVE_LDBRX_EXTERNAL 0 ++#define HAVE_POWER8_EXTERNAL 0 ++#define HAVE_PPC4XX_EXTERNAL 0 ++#define HAVE_VSX_EXTERNAL 0 ++#define HAVE_AESNI_EXTERNAL 0 ++#define HAVE_AMD3DNOW_EXTERNAL 0 ++#define HAVE_AMD3DNOWEXT_EXTERNAL 0 ++#define HAVE_AVX_EXTERNAL 0 ++#define HAVE_AVX2_EXTERNAL 0 ++#define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_AVX512ICL_EXTERNAL 0 ++#define HAVE_FMA3_EXTERNAL 0 ++#define HAVE_FMA4_EXTERNAL 0 ++#define HAVE_MMX_EXTERNAL 0 ++#define HAVE_MMXEXT_EXTERNAL 0 ++#define HAVE_SSE_EXTERNAL 0 ++#define HAVE_SSE2_EXTERNAL 0 ++#define HAVE_SSE3_EXTERNAL 0 ++#define HAVE_SSE4_EXTERNAL 0 ++#define HAVE_SSE42_EXTERNAL 0 ++#define HAVE_SSSE3_EXTERNAL 0 ++#define HAVE_XOP_EXTERNAL 0 ++#define HAVE_CPUNOP_EXTERNAL 0 ++#define HAVE_I686_EXTERNAL 0 ++#define HAVE_MIPSFPU_EXTERNAL 0 ++#define HAVE_MIPS32R2_EXTERNAL 0 ++#define HAVE_MIPS32R5_EXTERNAL 0 ++#define HAVE_MIPS64R2_EXTERNAL 0 ++#define HAVE_MIPS32R6_EXTERNAL 0 ++#define HAVE_MIPS64R6_EXTERNAL 0 ++#define HAVE_MIPSDSP_EXTERNAL 0 ++#define HAVE_MIPSDSPR2_EXTERNAL 0 ++#define HAVE_MSA_EXTERNAL 0 ++#define HAVE_LOONGSON2_EXTERNAL 0 ++#define HAVE_LOONGSON3_EXTERNAL 0 ++#define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 ++#define HAVE_ARMV5TE_INLINE 0 ++#define HAVE_ARMV6_INLINE 0 ++#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV8_INLINE 1 ++#define HAVE_NEON_INLINE 1 ++#define HAVE_VFP_INLINE 1 ++#define HAVE_VFPV3_INLINE 0 ++#define HAVE_SETEND_INLINE 0 ++#define HAVE_ALTIVEC_INLINE 0 ++#define HAVE_DCBZL_INLINE 0 ++#define HAVE_LDBRX_INLINE 0 ++#define HAVE_POWER8_INLINE 0 ++#define HAVE_PPC4XX_INLINE 0 ++#define HAVE_VSX_INLINE 0 ++#define HAVE_AESNI_INLINE 0 ++#define HAVE_AMD3DNOW_INLINE 0 ++#define HAVE_AMD3DNOWEXT_INLINE 0 ++#define HAVE_AVX_INLINE 0 ++#define HAVE_AVX2_INLINE 0 ++#define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 ++#define HAVE_FMA3_INLINE 0 ++#define HAVE_FMA4_INLINE 0 ++#define HAVE_MMX_INLINE 0 ++#define HAVE_MMXEXT_INLINE 0 ++#define HAVE_SSE_INLINE 0 ++#define HAVE_SSE2_INLINE 0 ++#define HAVE_SSE3_INLINE 0 ++#define HAVE_SSE4_INLINE 0 ++#define HAVE_SSE42_INLINE 0 ++#define HAVE_SSSE3_INLINE 0 ++#define HAVE_XOP_INLINE 0 ++#define HAVE_CPUNOP_INLINE 0 ++#define HAVE_I686_INLINE 0 ++#define HAVE_MIPSFPU_INLINE 0 ++#define HAVE_MIPS32R2_INLINE 0 ++#define HAVE_MIPS32R5_INLINE 0 ++#define HAVE_MIPS64R2_INLINE 0 ++#define HAVE_MIPS32R6_INLINE 0 ++#define HAVE_MIPS64R6_INLINE 0 ++#define HAVE_MIPSDSP_INLINE 0 ++#define HAVE_MIPSDSPR2_INLINE 0 ++#define HAVE_MSA_INLINE 0 ++#define HAVE_LOONGSON2_INLINE 0 ++#define HAVE_LOONGSON3_INLINE 0 ++#define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 ++#define HAVE_ALIGNED_STACK 1 ++#define HAVE_FAST_64BIT 1 ++#define HAVE_FAST_CLZ 1 ++#define HAVE_FAST_CMOV 0 ++#define HAVE_LOCAL_ALIGNED 0 ++#define HAVE_SIMD_ALIGN_16 1 ++#define HAVE_SIMD_ALIGN_32 0 ++#define HAVE_SIMD_ALIGN_64 0 ++#define HAVE_ATOMIC_CAS_PTR 0 ++#define HAVE_MACHINE_RW_BARRIER 0 ++#define HAVE_MEMORYBARRIER 0 ++#define HAVE_MM_EMPTY 0 ++#define HAVE_RDTSC 0 ++#define HAVE_SEM_TIMEDWAIT 1 ++#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 ++#define HAVE_INLINE_ASM 1 ++#define HAVE_SYMVER 1 ++#define HAVE_X86ASM 0 ++#define HAVE_BIGENDIAN 0 ++#define HAVE_FAST_UNALIGNED 1 ++#define HAVE_ARPA_INET_H 1 ++#define HAVE_ASM_TYPES_H 1 ++#define HAVE_CDIO_PARANOIA_H 0 ++#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 ++#define HAVE_CUDA_H 0 ++#define HAVE_DISPATCH_DISPATCH_H 0 ++#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 ++#define HAVE_DEV_IC_BT8XX_H 0 ++#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 ++#define HAVE_DIRECT_H 0 ++#define HAVE_DIRENT_H 1 ++#define HAVE_DXGIDEBUG_H 0 ++#define HAVE_DXVA_H 0 ++#define HAVE_ES2_GL_H 0 ++#define HAVE_GSM_H 0 ++#define HAVE_IO_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 1 ++#define HAVE_MACHINE_IOCTL_BT848_H 0 ++#define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_MALLOC_H 1 ++#define HAVE_OPENCV2_CORE_CORE_C_H 0 ++#define HAVE_OPENGL_GL3_H 0 ++#define HAVE_POLL_H 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_RESOURCE_H 1 ++#define HAVE_SYS_SELECT_H 1 ++#define HAVE_SYS_SOUNDCARD_H 0 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_UN_H 1 ++#define HAVE_SYS_VIDEOIO_H 0 ++#define HAVE_TERMIOS_H 1 ++#define HAVE_UDPLITE_H 0 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VALGRIND_VALGRIND_H 0 ++#define HAVE_WINDOWS_H 0 ++#define HAVE_WINSOCK2_H 0 ++#define HAVE_INTRINSICS_NEON 1 ++#define HAVE_ATANF 1 ++#define HAVE_ATAN2F 1 ++#define HAVE_CBRT 1 ++#define HAVE_CBRTF 1 ++#define HAVE_COPYSIGN 1 ++#define HAVE_COSF 1 ++#define HAVE_ERF 1 ++#define HAVE_EXP2 1 ++#define HAVE_EXP2F 1 ++#define HAVE_EXPF 1 ++#define HAVE_HYPOT 1 ++#define HAVE_ISFINITE 1 ++#define HAVE_ISINF 1 ++#define HAVE_ISNAN 1 ++#define HAVE_LDEXPF 1 ++#define HAVE_LLRINT 1 ++#define HAVE_LLRINTF 1 ++#define HAVE_LOG2 1 ++#define HAVE_LOG2F 1 ++#define HAVE_LOG10F 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_POWF 1 ++#define HAVE_RINT 1 ++#define HAVE_ROUND 1 ++#define HAVE_ROUNDF 1 ++#define HAVE_SINF 1 ++#define HAVE_TRUNC 1 ++#define HAVE_TRUNCF 1 ++#define HAVE_DOS_PATHS 0 ++#define HAVE_LIBC_MSVCRT 0 ++#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 ++#define HAVE_SECTION_DATA_REL_RO 1 ++#define HAVE_THREADS 1 ++#define HAVE_UWP 0 ++#define HAVE_WINRT 0 ++#define HAVE_ACCESS 1 ++#define HAVE_ALIGNED_MALLOC 0 ++#define HAVE_ARC4RANDOM 1 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_CLOSESOCKET 0 ++#define HAVE_COMMANDLINETOARGVW 0 ++#define HAVE_FCNTL 1 ++#define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 1 ++#define HAVE_GETENV 1 ++#define HAVE_GETHRTIME 0 ++#define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 ++#define HAVE_GETPROCESSAFFINITYMASK 0 ++#define HAVE_GETPROCESSMEMORYINFO 0 ++#define HAVE_GETPROCESSTIMES 0 ++#define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 ++#define HAVE_GETSYSTEMTIMEASFILETIME 0 ++#define HAVE_GETTIMEOFDAY 1 ++#define HAVE_GLOB 0 ++#define HAVE_GLXGETPROCADDRESS 0 ++#define HAVE_GMTIME_R 1 ++#define HAVE_INET_ATON 1 ++#define HAVE_ISATTY 1 ++#define HAVE_KBHIT 0 ++#define HAVE_LOCALTIME_R 1 ++#define HAVE_LSTAT 1 ++#define HAVE_LZO1X_999_COMPRESS 0 ++#define HAVE_MACH_ABSOLUTE_TIME 0 ++#define HAVE_MAPVIEWOFFILE 0 ++#define HAVE_MEMALIGN 1 ++#define HAVE_MKSTEMP 1 ++#define HAVE_MMAP 1 ++#define HAVE_MPROTECT 1 ++#define HAVE_NANOSLEEP 1 ++#define HAVE_PEEKNAMEDPIPE 0 ++#define HAVE_POSIX_MEMALIGN 1 ++#define HAVE_PTHREAD_CANCEL 0 ++#define HAVE_SCHED_GETAFFINITY 1 ++#define HAVE_SECITEMIMPORT 0 ++#define HAVE_SETCONSOLETEXTATTRIBUTE 0 ++#define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 ++#define HAVE_SETMODE 0 ++#define HAVE_SETRLIMIT 1 ++#define HAVE_SLEEP 0 ++#define HAVE_STRERROR_R 1 ++#define HAVE_SYSCONF 1 ++#define HAVE_SYSCTL 0 ++#define HAVE_USLEEP 1 ++#define HAVE_UTGETOSTYPEFROMSTRING 0 ++#define HAVE_VIRTUALALLOC 0 ++#define HAVE_WGLGETPROCADDRESS 0 ++#define HAVE_BCRYPT 0 ++#define HAVE_VAAPI_DRM 0 ++#define HAVE_VAAPI_X11 0 ++#define HAVE_VDPAU_X11 0 ++#define HAVE_PTHREADS 1 ++#define HAVE_OS2THREADS 0 ++#define HAVE_W32THREADS 0 ++#define HAVE_AS_ARCH_DIRECTIVE 0 ++#define HAVE_AS_DN_DIRECTIVE 0 ++#define HAVE_AS_FPU_DIRECTIVE 0 ++#define HAVE_AS_FUNC 0 ++#define HAVE_AS_OBJECT_ARCH 0 ++#define HAVE_ASM_MOD_Q 0 ++#define HAVE_BLOCKS_EXTENSION 0 ++#define HAVE_EBP_AVAILABLE 0 ++#define HAVE_EBX_AVAILABLE 0 ++#define HAVE_GNU_AS 0 ++#define HAVE_GNU_WINDRES 0 ++#define HAVE_IBM_ASM 0 ++#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 ++#define HAVE_INLINE_ASM_LABELS 1 ++#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 ++#define HAVE_PRAGMA_DEPRECATED 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 ++#define HAVE_SYMVER_ASM_LABEL 1 ++#define HAVE_SYMVER_GNU_ASM 1 ++#define HAVE_VFP_ARGS 0 ++#define HAVE_XFORM_ASM 0 ++#define HAVE_XMM_CLOBBERS 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 ++#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 ++#define HAVE_SOCKLEN_T 1 ++#define HAVE_STRUCT_ADDRINFO 1 ++#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 ++#define HAVE_STRUCT_IP_MREQ_SOURCE 1 ++#define HAVE_STRUCT_IPV6_MREQ 1 ++#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 ++#define HAVE_STRUCT_POLLFD 1 ++#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 ++#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 ++#define HAVE_STRUCT_SOCKADDR_IN6 1 ++#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 1 ++#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_OPENCL_D3D11 0 ++#define HAVE_OPENCL_DRM_ARM 0 ++#define HAVE_OPENCL_DRM_BEIGNET 0 ++#define HAVE_OPENCL_DXVA2 0 ++#define HAVE_OPENCL_VAAPI_BEIGNET 0 ++#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 ++#define HAVE_PERL 1 ++#define HAVE_POD2MAN 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 ++#define CONFIG_DOC 0 ++#define CONFIG_HTMLPAGES 0 ++#define CONFIG_MANPAGES 1 ++#define CONFIG_PODPAGES 1 ++#define CONFIG_TXTPAGES 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 ++#define CONFIG_AVIO_READING_EXAMPLE 1 ++#define CONFIG_DECODE_AUDIO_EXAMPLE 1 ++#define CONFIG_DECODE_VIDEO_EXAMPLE 1 ++#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 ++#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 ++#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 ++#define CONFIG_EXTRACT_MVS_EXAMPLE 0 ++#define CONFIG_FILTER_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 ++#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 ++#define CONFIG_HW_DECODE_EXAMPLE 0 ++#define CONFIG_METADATA_EXAMPLE 0 ++#define CONFIG_MUXING_EXAMPLE 0 ++#define CONFIG_QSVDEC_EXAMPLE 0 ++#define CONFIG_REMUXING_EXAMPLE 0 ++#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 ++#define CONFIG_SCALING_VIDEO_EXAMPLE 0 ++#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 ++#define CONFIG_TRANSCODING_EXAMPLE 0 ++#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 ++#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 ++#define CONFIG_AVISYNTH 0 ++#define CONFIG_FREI0R 0 ++#define CONFIG_LIBCDIO 0 ++#define CONFIG_LIBDAVS2 0 ++#define CONFIG_LIBRUBBERBAND 0 ++#define CONFIG_LIBVIDSTAB 0 ++#define CONFIG_LIBX264 0 ++#define CONFIG_LIBX265 0 ++#define CONFIG_LIBXAVS 0 ++#define CONFIG_LIBXAVS2 0 ++#define CONFIG_LIBXVID 0 ++#define CONFIG_DECKLINK 0 ++#define CONFIG_LIBFDK_AAC 0 ++#define CONFIG_LIBTLS 0 ++#define CONFIG_GMP 0 ++#define CONFIG_LIBARIBB24 0 ++#define CONFIG_LIBLENSFUN 0 ++#define CONFIG_LIBOPENCORE_AMRNB 0 ++#define CONFIG_LIBOPENCORE_AMRWB 0 ++#define CONFIG_LIBVO_AMRWBENC 0 ++#define CONFIG_MBEDTLS 0 ++#define CONFIG_RKMPP 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_CHROMAPRINT 0 ++#define CONFIG_GCRYPT 0 ++#define CONFIG_GNUTLS 0 ++#define CONFIG_JNI 0 ++#define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 ++#define CONFIG_LIBAOM 0 ++#define CONFIG_LIBASS 0 ++#define CONFIG_LIBBLURAY 0 ++#define CONFIG_LIBBS2B 0 ++#define CONFIG_LIBCACA 0 ++#define CONFIG_LIBCELT 0 ++#define CONFIG_LIBCODEC2 0 ++#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDC1394 0 ++#define CONFIG_LIBDRM 0 ++#define CONFIG_LIBFLITE 0 ++#define CONFIG_LIBFONTCONFIG 0 ++#define CONFIG_LIBFREETYPE 0 ++#define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 ++#define CONFIG_LIBGME 0 ++#define CONFIG_LIBGSM 0 ++#define CONFIG_LIBIEC61883 0 ++#define CONFIG_LIBILBC 0 ++#define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 ++#define CONFIG_LIBKLVANC 0 ++#define CONFIG_LIBKVAZAAR 0 ++#define CONFIG_LIBMODPLUG 0 ++#define CONFIG_LIBMP3LAME 0 ++#define CONFIG_LIBMYSOFA 0 ++#define CONFIG_LIBOPENCV 0 ++#define CONFIG_LIBOPENH264 0 ++#define CONFIG_LIBOPENJPEG 0 ++#define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 ++#define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 ++#define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 ++#define CONFIG_LIBRSVG 0 ++#define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 ++#define CONFIG_LIBSHINE 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_LIBSNAPPY 0 ++#define CONFIG_LIBSOXR 0 ++#define CONFIG_LIBSPEEX 0 ++#define CONFIG_LIBSRT 0 ++#define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 ++#define CONFIG_LIBTENSORFLOW 0 ++#define CONFIG_LIBTESSERACT 0 ++#define CONFIG_LIBTHEORA 0 ++#define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 ++#define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 ++#define CONFIG_LIBVORBIS 0 ++#define CONFIG_LIBVPX 0 ++#define CONFIG_LIBWEBP 0 ++#define CONFIG_LIBXML2 0 ++#define CONFIG_LIBZIMG 0 ++#define CONFIG_LIBZMQ 0 ++#define CONFIG_LIBZVBI 0 ++#define CONFIG_LV2 0 ++#define CONFIG_MEDIACODEC 0 ++#define CONFIG_OPENAL 0 ++#define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 ++#define CONFIG_POCKETSPHINX 0 ++#define CONFIG_VAPOURSYNTH 0 ++#define CONFIG_ALSA 0 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 ++#define CONFIG_ICONV 0 ++#define CONFIG_LIBXCB 0 ++#define CONFIG_LIBXCB_SHM 0 ++#define CONFIG_LIBXCB_SHAPE 0 ++#define CONFIG_LIBXCB_XFIXES 0 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 ++#define CONFIG_SDL2 0 ++#define CONFIG_SECURETRANSPORT 0 ++#define CONFIG_SNDIO 0 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 ++#define CONFIG_CUDA_NVCC 0 ++#define CONFIG_CUDA_SDK 0 ++#define CONFIG_LIBNPP 0 ++#define CONFIG_LIBMFX 0 ++#define CONFIG_MMAL 0 ++#define CONFIG_OMX 0 ++#define CONFIG_OPENCL 0 ++#define CONFIG_AMF 0 ++#define CONFIG_AUDIOTOOLBOX 0 ++#define CONFIG_CRYSTALHD 0 ++#define CONFIG_CUDA 0 ++#define CONFIG_CUDA_LLVM 0 ++#define CONFIG_CUVID 0 ++#define CONFIG_D3D11VA 0 ++#define CONFIG_DXVA2 0 ++#define CONFIG_FFNVCODEC 0 ++#define CONFIG_NVDEC 0 ++#define CONFIG_NVENC 0 ++#define CONFIG_VAAPI 0 ++#define CONFIG_VDPAU 0 ++#define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 ++#define CONFIG_V4L2_M2M 0 ++#define CONFIG_FTRAPV 0 ++#define CONFIG_GRAY 0 ++#define CONFIG_HARDCODED_TABLES 0 ++#define CONFIG_OMX_RPI 0 ++#define CONFIG_RUNTIME_CPUDETECT 1 ++#define CONFIG_SAFE_BITSTREAM_READER 1 ++#define CONFIG_SHARED 1 ++#define CONFIG_SMALL 1 ++#define CONFIG_STATIC 0 ++#define CONFIG_SWSCALE_ALPHA 1 ++#define CONFIG_GPL 0 ++#define CONFIG_NONFREE 0 ++#define CONFIG_VERSION3 0 ++#define CONFIG_AVDEVICE 0 ++#define CONFIG_AVFILTER 0 ++#define CONFIG_SWSCALE 0 ++#define CONFIG_POSTPROC 0 ++#define CONFIG_AVFORMAT 0 ++#define CONFIG_AVCODEC 1 ++#define CONFIG_SWRESAMPLE 0 ++#define CONFIG_AVUTIL 1 ++#define CONFIG_FFPLAY 0 ++#define CONFIG_FFPROBE 0 ++#define CONFIG_FFMPEG 0 ++#define CONFIG_DCT 1 ++#define CONFIG_DWT 0 ++#define CONFIG_ERROR_RESILIENCE 0 ++#define CONFIG_FAAN 1 ++#define CONFIG_FAST_UNALIGNED 1 ++#define CONFIG_FFT 1 ++#define CONFIG_LSP 0 ++#define CONFIG_MDCT 0 ++#define CONFIG_PIXELUTILS 0 ++#define CONFIG_NETWORK 0 ++#define CONFIG_RDFT 1 ++#define CONFIG_AUTODETECT 0 ++#define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 ++#define CONFIG_LINUX_PERF 1 ++#define CONFIG_MACOS_KPERF 0 ++#define CONFIG_MEMORY_POISONING 0 ++#define CONFIG_NEON_CLOBBER_TEST 0 ++#define CONFIG_OSSFUZZ 0 ++#define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 ++#define CONFIG_THUMB 0 ++#define CONFIG_VALGRIND_BACKTRACE 0 ++#define CONFIG_XMM_CLOBBER_TEST 0 ++#define CONFIG_BSFS 0 ++#define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 ++#define CONFIG_PARSERS 0 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 ++#define CONFIG_AANDCTTABLES 0 ++#define CONFIG_AC3DSP 0 ++#define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 ++#define CONFIG_AUDIO_FRAME_QUEUE 0 ++#define CONFIG_AUDIODSP 0 ++#define CONFIG_BLOCKDSP 0 ++#define CONFIG_BSWAPDSP 0 ++#define CONFIG_CABAC 0 ++#define CONFIG_CBS 0 ++#define CONFIG_CBS_AV1 0 ++#define CONFIG_CBS_H264 0 ++#define CONFIG_CBS_H265 0 ++#define CONFIG_CBS_JPEG 0 ++#define CONFIG_CBS_MPEG2 0 ++#define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 ++#define CONFIG_DIRAC_PARSE 0 ++#define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 ++#define CONFIG_DVPROFILE 0 ++#define CONFIG_EXIF 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 ++#define CONFIG_FLACDSP 1 ++#define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 ++#define CONFIG_G722DSP 0 ++#define CONFIG_GOLOMB 0 ++#define CONFIG_GPLV3 0 ++#define CONFIG_H263DSP 0 ++#define CONFIG_H264CHROMA 0 ++#define CONFIG_H264DSP 0 ++#define CONFIG_H264PARSE 0 ++#define CONFIG_H264PRED 0 ++#define CONFIG_H264QPEL 0 ++#define CONFIG_HEVCPARSE 0 ++#define CONFIG_HPELDSP 0 ++#define CONFIG_HUFFMAN 0 ++#define CONFIG_HUFFYUVDSP 0 ++#define CONFIG_HUFFYUVENCDSP 0 ++#define CONFIG_IDCTDSP 1 ++#define CONFIG_IIRFILTER 0 ++#define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 ++#define CONFIG_INTRAX8 0 ++#define CONFIG_ISO_MEDIA 0 ++#define CONFIG_IVIDSP 0 ++#define CONFIG_JPEGTABLES 0 ++#define CONFIG_LGPLV3 0 ++#define CONFIG_LIBX262 0 ++#define CONFIG_LLAUDDSP 0 ++#define CONFIG_LLVIDDSP 0 ++#define CONFIG_LLVIDENCDSP 0 ++#define CONFIG_LPC 0 ++#define CONFIG_LZF 0 ++#define CONFIG_ME_CMP 0 ++#define CONFIG_MPEG_ER 0 ++#define CONFIG_MPEGAUDIO 1 ++#define CONFIG_MPEGAUDIODSP 1 ++#define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 ++#define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 ++#define CONFIG_MPEGVIDEOENC 0 ++#define CONFIG_MSS34DSP 0 ++#define CONFIG_PIXBLOCKDSP 0 ++#define CONFIG_QPELDSP 0 ++#define CONFIG_QSV 0 ++#define CONFIG_QSVDEC 0 ++#define CONFIG_QSVENC 0 ++#define CONFIG_QSVVPP 0 ++#define CONFIG_RANGECODER 0 ++#define CONFIG_RIFFDEC 0 ++#define CONFIG_RIFFENC 0 ++#define CONFIG_RTPDEC 0 ++#define CONFIG_RTPENC_CHAIN 0 ++#define CONFIG_RV34DSP 0 ++#define CONFIG_SCENE_SAD 0 ++#define CONFIG_SINEWIN 0 ++#define CONFIG_SNAPPY 0 ++#define CONFIG_SRTP 0 ++#define CONFIG_STARTCODE 0 ++#define CONFIG_TEXTUREDSP 0 ++#define CONFIG_TEXTUREDSPENC 0 ++#define CONFIG_TPELDSP 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VAAPI_ENCODE 0 ++#define CONFIG_VC1DSP 0 ++#define CONFIG_VIDEODSP 0 ++#define CONFIG_VP3DSP 0 ++#define CONFIG_VP56DSP 0 ++#define CONFIG_VP8DSP 0 ++#define CONFIG_WMA_FREQS 0 ++#define CONFIG_WMV2DSP 0 ++#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_android_x86_64.h b/media/ffvpx/config_android_x86_64.h +--- a/media/ffvpx/config_android_x86_64.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_android_x86_64.h 2023-04-06 12:49:19.191546429 +0200 +@@ -0,0 +1,740 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_H ++#define FFMPEG_CONFIG_H ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-parser='vp8,vp9' --enable-decoder='mp3,flac,vp8,vp9' --disable-static --enable-shared --disable-autodetect --enable-small --target-os=linux --arch=x86_64 --enable-cross-compile --cc=/Users/padenot/.mozbuild/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android21-clang" ++#define FFMPEG_LICENSE "LGPL version 2.1 or later" ++#define CONFIG_THIS_YEAR 2022 ++#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" ++#define AVCONV_DATADIR "/usr/local/share/ffmpeg" ++#define CC_IDENT "Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)" ++#define OS_NAME linux ++#define av_restrict restrict ++#define EXTERN_PREFIX "" ++#define EXTERN_ASM ++#define BUILDSUF "" ++#define SLIBSUF ".so" ++#define HAVE_MMX2 HAVE_MMXEXT ++#define SWS_MAX_FILTER_SIZE 256 ++#define ARCH_AARCH64 0 ++#define ARCH_ALPHA 0 ++#define ARCH_ARM 0 ++#define ARCH_AVR32 0 ++#define ARCH_AVR32_AP 0 ++#define ARCH_AVR32_UC 0 ++#define ARCH_BFIN 0 ++#define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 ++#define ARCH_M68K 0 ++#define ARCH_MIPS 0 ++#define ARCH_MIPS64 0 ++#define ARCH_PARISC 0 ++#define ARCH_PPC 0 ++#define ARCH_PPC64 0 ++#define ARCH_RISCV 0 ++#define ARCH_S390 0 ++#define ARCH_SH4 0 ++#define ARCH_SPARC 0 ++#define ARCH_SPARC64 0 ++#define ARCH_TILEGX 0 ++#define ARCH_TILEPRO 0 ++#define ARCH_TOMI 0 ++#define ARCH_X86 1 ++#define ARCH_X86_32 0 ++#define ARCH_X86_64 1 ++#define HAVE_ARMV5TE 0 ++#define HAVE_ARMV6 0 ++#define HAVE_ARMV6T2 0 ++#define HAVE_ARMV8 0 ++#define HAVE_NEON 0 ++#define HAVE_VFP 0 ++#define HAVE_VFPV3 0 ++#define HAVE_SETEND 0 ++#define HAVE_ALTIVEC 0 ++#define HAVE_DCBZL 0 ++#define HAVE_LDBRX 0 ++#define HAVE_POWER8 0 ++#define HAVE_PPC4XX 0 ++#define HAVE_VSX 0 ++#define HAVE_AESNI 1 ++#define HAVE_AMD3DNOW 1 ++#define HAVE_AMD3DNOWEXT 1 ++#define HAVE_AVX 1 ++#define HAVE_AVX2 1 ++#define HAVE_AVX512 1 ++#define HAVE_AVX512ICL 1 ++#define HAVE_FMA3 1 ++#define HAVE_FMA4 1 ++#define HAVE_MMX 1 ++#define HAVE_MMXEXT 1 ++#define HAVE_SSE 1 ++#define HAVE_SSE2 1 ++#define HAVE_SSE3 1 ++#define HAVE_SSE4 1 ++#define HAVE_SSE42 1 ++#define HAVE_SSSE3 1 ++#define HAVE_XOP 1 ++#define HAVE_CPUNOP 0 ++#define HAVE_I686 1 ++#define HAVE_MIPSFPU 0 ++#define HAVE_MIPS32R2 0 ++#define HAVE_MIPS32R5 0 ++#define HAVE_MIPS64R2 0 ++#define HAVE_MIPS32R6 0 ++#define HAVE_MIPS64R6 0 ++#define HAVE_MIPSDSP 0 ++#define HAVE_MIPSDSPR2 0 ++#define HAVE_MSA 0 ++#define HAVE_LOONGSON2 0 ++#define HAVE_LOONGSON3 0 ++#define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 ++#define HAVE_ARMV5TE_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 0 ++#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV8_EXTERNAL 0 ++#define HAVE_NEON_EXTERNAL 0 ++#define HAVE_VFP_EXTERNAL 0 ++#define HAVE_VFPV3_EXTERNAL 0 ++#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_ALTIVEC_EXTERNAL 0 ++#define HAVE_DCBZL_EXTERNAL 0 ++#define HAVE_LDBRX_EXTERNAL 0 ++#define HAVE_POWER8_EXTERNAL 0 ++#define HAVE_PPC4XX_EXTERNAL 0 ++#define HAVE_VSX_EXTERNAL 0 ++#define HAVE_AESNI_EXTERNAL 1 ++#define HAVE_AMD3DNOW_EXTERNAL 1 ++#define HAVE_AMD3DNOWEXT_EXTERNAL 1 ++#define HAVE_AVX_EXTERNAL 1 ++#define HAVE_AVX2_EXTERNAL 1 ++#define HAVE_AVX512_EXTERNAL 1 ++#define HAVE_AVX512ICL_EXTERNAL 1 ++#define HAVE_FMA3_EXTERNAL 1 ++#define HAVE_FMA4_EXTERNAL 1 ++#define HAVE_MMX_EXTERNAL 1 ++#define HAVE_MMXEXT_EXTERNAL 1 ++#define HAVE_SSE_EXTERNAL 1 ++#define HAVE_SSE2_EXTERNAL 1 ++#define HAVE_SSE3_EXTERNAL 1 ++#define HAVE_SSE4_EXTERNAL 1 ++#define HAVE_SSE42_EXTERNAL 1 ++#define HAVE_SSSE3_EXTERNAL 1 ++#define HAVE_XOP_EXTERNAL 1 ++#define HAVE_CPUNOP_EXTERNAL 0 ++#define HAVE_I686_EXTERNAL 0 ++#define HAVE_MIPSFPU_EXTERNAL 0 ++#define HAVE_MIPS32R2_EXTERNAL 0 ++#define HAVE_MIPS32R5_EXTERNAL 0 ++#define HAVE_MIPS64R2_EXTERNAL 0 ++#define HAVE_MIPS32R6_EXTERNAL 0 ++#define HAVE_MIPS64R6_EXTERNAL 0 ++#define HAVE_MIPSDSP_EXTERNAL 0 ++#define HAVE_MIPSDSPR2_EXTERNAL 0 ++#define HAVE_MSA_EXTERNAL 0 ++#define HAVE_LOONGSON2_EXTERNAL 0 ++#define HAVE_LOONGSON3_EXTERNAL 0 ++#define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 ++#define HAVE_ARMV5TE_INLINE 0 ++#define HAVE_ARMV6_INLINE 0 ++#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV8_INLINE 0 ++#define HAVE_NEON_INLINE 0 ++#define HAVE_VFP_INLINE 0 ++#define HAVE_VFPV3_INLINE 0 ++#define HAVE_SETEND_INLINE 0 ++#define HAVE_ALTIVEC_INLINE 0 ++#define HAVE_DCBZL_INLINE 0 ++#define HAVE_LDBRX_INLINE 0 ++#define HAVE_POWER8_INLINE 0 ++#define HAVE_PPC4XX_INLINE 0 ++#define HAVE_VSX_INLINE 0 ++#define HAVE_AESNI_INLINE 1 ++#define HAVE_AMD3DNOW_INLINE 1 ++#define HAVE_AMD3DNOWEXT_INLINE 1 ++#define HAVE_AVX_INLINE 1 ++#define HAVE_AVX2_INLINE 1 ++#define HAVE_AVX512_INLINE 1 ++#define HAVE_AVX512ICL_INLINE 1 ++#define HAVE_FMA3_INLINE 1 ++#define HAVE_FMA4_INLINE 1 ++#define HAVE_MMX_INLINE 1 ++#define HAVE_MMXEXT_INLINE 1 ++#define HAVE_SSE_INLINE 1 ++#define HAVE_SSE2_INLINE 1 ++#define HAVE_SSE3_INLINE 1 ++#define HAVE_SSE4_INLINE 1 ++#define HAVE_SSE42_INLINE 1 ++#define HAVE_SSSE3_INLINE 1 ++#define HAVE_XOP_INLINE 1 ++#define HAVE_CPUNOP_INLINE 0 ++#define HAVE_I686_INLINE 0 ++#define HAVE_MIPSFPU_INLINE 0 ++#define HAVE_MIPS32R2_INLINE 0 ++#define HAVE_MIPS32R5_INLINE 0 ++#define HAVE_MIPS64R2_INLINE 0 ++#define HAVE_MIPS32R6_INLINE 0 ++#define HAVE_MIPS64R6_INLINE 0 ++#define HAVE_MIPSDSP_INLINE 0 ++#define HAVE_MIPSDSPR2_INLINE 0 ++#define HAVE_MSA_INLINE 0 ++#define HAVE_LOONGSON2_INLINE 0 ++#define HAVE_LOONGSON3_INLINE 0 ++#define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 ++#define HAVE_ALIGNED_STACK 1 ++#define HAVE_FAST_64BIT 1 ++#define HAVE_FAST_CLZ 1 ++#define HAVE_FAST_CMOV 1 ++#define HAVE_LOCAL_ALIGNED 1 ++#define HAVE_SIMD_ALIGN_16 1 ++#define HAVE_SIMD_ALIGN_32 1 ++#define HAVE_SIMD_ALIGN_64 1 ++#define HAVE_ATOMIC_CAS_PTR 0 ++#define HAVE_MACHINE_RW_BARRIER 0 ++#define HAVE_MEMORYBARRIER 0 ++#define HAVE_MM_EMPTY 1 ++#define HAVE_RDTSC 0 ++#define HAVE_SEM_TIMEDWAIT 1 ++#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 ++#define HAVE_INLINE_ASM 1 ++#define HAVE_SYMVER 1 ++#define HAVE_X86ASM 1 ++#define HAVE_BIGENDIAN 0 ++#define HAVE_FAST_UNALIGNED 1 ++#define HAVE_ARPA_INET_H 1 ++#define HAVE_ASM_TYPES_H 1 ++#define HAVE_CDIO_PARANOIA_H 0 ++#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 ++#define HAVE_CUDA_H 0 ++#define HAVE_DISPATCH_DISPATCH_H 0 ++#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 ++#define HAVE_DEV_IC_BT8XX_H 0 ++#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 ++#define HAVE_DIRECT_H 0 ++#define HAVE_DIRENT_H 1 ++#define HAVE_DXGIDEBUG_H 0 ++#define HAVE_DXVA_H 0 ++#define HAVE_ES2_GL_H 0 ++#define HAVE_GSM_H 0 ++#define HAVE_IO_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 1 ++#define HAVE_MACHINE_IOCTL_BT848_H 0 ++#define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_MALLOC_H 1 ++#define HAVE_OPENCV2_CORE_CORE_C_H 0 ++#define HAVE_OPENGL_GL3_H 0 ++#define HAVE_POLL_H 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_RESOURCE_H 1 ++#define HAVE_SYS_SELECT_H 1 ++#define HAVE_SYS_SOUNDCARD_H 0 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_UN_H 1 ++#define HAVE_SYS_VIDEOIO_H 0 ++#define HAVE_TERMIOS_H 1 ++#define HAVE_UDPLITE_H 0 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VALGRIND_VALGRIND_H 0 ++#define HAVE_WINDOWS_H 0 ++#define HAVE_WINSOCK2_H 0 ++#define HAVE_INTRINSICS_NEON 0 ++#define HAVE_ATANF 1 ++#define HAVE_ATAN2F 1 ++#define HAVE_CBRT 1 ++#define HAVE_CBRTF 1 ++#define HAVE_COPYSIGN 1 ++#define HAVE_COSF 1 ++#define HAVE_ERF 1 ++#define HAVE_EXP2 1 ++#define HAVE_EXP2F 1 ++#define HAVE_EXPF 1 ++#define HAVE_HYPOT 1 ++#define HAVE_ISFINITE 1 ++#define HAVE_ISINF 1 ++#define HAVE_ISNAN 1 ++#define HAVE_LDEXPF 1 ++#define HAVE_LLRINT 1 ++#define HAVE_LLRINTF 1 ++#define HAVE_LOG2 1 ++#define HAVE_LOG2F 1 ++#define HAVE_LOG10F 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_POWF 1 ++#define HAVE_RINT 1 ++#define HAVE_ROUND 1 ++#define HAVE_ROUNDF 1 ++#define HAVE_SINF 1 ++#define HAVE_TRUNC 1 ++#define HAVE_TRUNCF 1 ++#define HAVE_DOS_PATHS 0 ++#define HAVE_LIBC_MSVCRT 0 ++#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 ++#define HAVE_SECTION_DATA_REL_RO 1 ++#define HAVE_THREADS 1 ++#define HAVE_UWP 0 ++#define HAVE_WINRT 0 ++#define HAVE_ACCESS 1 ++#define HAVE_ALIGNED_MALLOC 0 ++#define HAVE_ARC4RANDOM 1 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_CLOSESOCKET 0 ++#define HAVE_COMMANDLINETOARGVW 0 ++#define HAVE_FCNTL 1 ++#define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 1 ++#define HAVE_GETENV 1 ++#define HAVE_GETHRTIME 0 ++#define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 ++#define HAVE_GETPROCESSAFFINITYMASK 0 ++#define HAVE_GETPROCESSMEMORYINFO 0 ++#define HAVE_GETPROCESSTIMES 0 ++#define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 ++#define HAVE_GETSYSTEMTIMEASFILETIME 0 ++#define HAVE_GETTIMEOFDAY 1 ++#define HAVE_GLOB 0 ++#define HAVE_GLXGETPROCADDRESS 0 ++#define HAVE_GMTIME_R 1 ++#define HAVE_INET_ATON 1 ++#define HAVE_ISATTY 1 ++#define HAVE_KBHIT 0 ++#define HAVE_LOCALTIME_R 1 ++#define HAVE_LSTAT 1 ++#define HAVE_LZO1X_999_COMPRESS 0 ++#define HAVE_MACH_ABSOLUTE_TIME 0 ++#define HAVE_MAPVIEWOFFILE 0 ++#define HAVE_MEMALIGN 1 ++#define HAVE_MKSTEMP 1 ++#define HAVE_MMAP 1 ++#define HAVE_MPROTECT 1 ++#define HAVE_NANOSLEEP 1 ++#define HAVE_PEEKNAMEDPIPE 0 ++#define HAVE_POSIX_MEMALIGN 1 ++#define HAVE_PTHREAD_CANCEL 0 ++#define HAVE_SCHED_GETAFFINITY 1 ++#define HAVE_SECITEMIMPORT 0 ++#define HAVE_SETCONSOLETEXTATTRIBUTE 0 ++#define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 ++#define HAVE_SETMODE 0 ++#define HAVE_SETRLIMIT 1 ++#define HAVE_SLEEP 0 ++#define HAVE_STRERROR_R 1 ++#define HAVE_SYSCONF 1 ++#define HAVE_SYSCTL 0 ++#define HAVE_USLEEP 1 ++#define HAVE_UTGETOSTYPEFROMSTRING 0 ++#define HAVE_VIRTUALALLOC 0 ++#define HAVE_WGLGETPROCADDRESS 0 ++#define HAVE_BCRYPT 0 ++#define HAVE_VAAPI_DRM 0 ++#define HAVE_VAAPI_X11 0 ++#define HAVE_VDPAU_X11 0 ++#define HAVE_PTHREADS 1 ++#define HAVE_OS2THREADS 0 ++#define HAVE_W32THREADS 0 ++#define HAVE_AS_ARCH_DIRECTIVE 0 ++#define HAVE_AS_DN_DIRECTIVE 0 ++#define HAVE_AS_FPU_DIRECTIVE 0 ++#define HAVE_AS_FUNC 0 ++#define HAVE_AS_OBJECT_ARCH 0 ++#define HAVE_ASM_MOD_Q 0 ++#define HAVE_BLOCKS_EXTENSION 0 ++#define HAVE_EBP_AVAILABLE 1 ++#define HAVE_EBX_AVAILABLE 1 ++#define HAVE_GNU_AS 0 ++#define HAVE_GNU_WINDRES 0 ++#define HAVE_IBM_ASM 0 ++#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1 ++#define HAVE_INLINE_ASM_LABELS 1 ++#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 ++#define HAVE_PRAGMA_DEPRECATED 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 ++#define HAVE_SYMVER_ASM_LABEL 1 ++#define HAVE_SYMVER_GNU_ASM 1 ++#define HAVE_VFP_ARGS 0 ++#define HAVE_XFORM_ASM 0 ++#define HAVE_XMM_CLOBBERS 1 ++#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 ++#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 ++#define HAVE_SOCKLEN_T 1 ++#define HAVE_STRUCT_ADDRINFO 1 ++#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 ++#define HAVE_STRUCT_IP_MREQ_SOURCE 1 ++#define HAVE_STRUCT_IPV6_MREQ 1 ++#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 ++#define HAVE_STRUCT_POLLFD 1 ++#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 ++#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 ++#define HAVE_STRUCT_SOCKADDR_IN6 1 ++#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 1 ++#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_OPENCL_D3D11 0 ++#define HAVE_OPENCL_DRM_ARM 0 ++#define HAVE_OPENCL_DRM_BEIGNET 0 ++#define HAVE_OPENCL_DXVA2 0 ++#define HAVE_OPENCL_VAAPI_BEIGNET 0 ++#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 ++#define HAVE_PERL 1 ++#define HAVE_POD2MAN 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 ++#define CONFIG_DOC 0 ++#define CONFIG_HTMLPAGES 0 ++#define CONFIG_MANPAGES 1 ++#define CONFIG_PODPAGES 1 ++#define CONFIG_TXTPAGES 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 ++#define CONFIG_AVIO_READING_EXAMPLE 1 ++#define CONFIG_DECODE_AUDIO_EXAMPLE 1 ++#define CONFIG_DECODE_VIDEO_EXAMPLE 1 ++#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 ++#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 ++#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 ++#define CONFIG_EXTRACT_MVS_EXAMPLE 0 ++#define CONFIG_FILTER_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 ++#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 ++#define CONFIG_HW_DECODE_EXAMPLE 0 ++#define CONFIG_METADATA_EXAMPLE 0 ++#define CONFIG_MUXING_EXAMPLE 0 ++#define CONFIG_QSVDEC_EXAMPLE 0 ++#define CONFIG_REMUXING_EXAMPLE 0 ++#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 ++#define CONFIG_SCALING_VIDEO_EXAMPLE 0 ++#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 ++#define CONFIG_TRANSCODING_EXAMPLE 0 ++#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 ++#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 ++#define CONFIG_AVISYNTH 0 ++#define CONFIG_FREI0R 0 ++#define CONFIG_LIBCDIO 0 ++#define CONFIG_LIBDAVS2 0 ++#define CONFIG_LIBRUBBERBAND 0 ++#define CONFIG_LIBVIDSTAB 0 ++#define CONFIG_LIBX264 0 ++#define CONFIG_LIBX265 0 ++#define CONFIG_LIBXAVS 0 ++#define CONFIG_LIBXAVS2 0 ++#define CONFIG_LIBXVID 0 ++#define CONFIG_DECKLINK 0 ++#define CONFIG_LIBFDK_AAC 0 ++#define CONFIG_LIBTLS 0 ++#define CONFIG_GMP 0 ++#define CONFIG_LIBARIBB24 0 ++#define CONFIG_LIBLENSFUN 0 ++#define CONFIG_LIBOPENCORE_AMRNB 0 ++#define CONFIG_LIBOPENCORE_AMRWB 0 ++#define CONFIG_LIBVO_AMRWBENC 0 ++#define CONFIG_MBEDTLS 0 ++#define CONFIG_RKMPP 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_CHROMAPRINT 0 ++#define CONFIG_GCRYPT 0 ++#define CONFIG_GNUTLS 0 ++#define CONFIG_JNI 0 ++#define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 ++#define CONFIG_LIBAOM 0 ++#define CONFIG_LIBASS 0 ++#define CONFIG_LIBBLURAY 0 ++#define CONFIG_LIBBS2B 0 ++#define CONFIG_LIBCACA 0 ++#define CONFIG_LIBCELT 0 ++#define CONFIG_LIBCODEC2 0 ++#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDC1394 0 ++#define CONFIG_LIBDRM 0 ++#define CONFIG_LIBFLITE 0 ++#define CONFIG_LIBFONTCONFIG 0 ++#define CONFIG_LIBFREETYPE 0 ++#define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 ++#define CONFIG_LIBGME 0 ++#define CONFIG_LIBGSM 0 ++#define CONFIG_LIBIEC61883 0 ++#define CONFIG_LIBILBC 0 ++#define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 ++#define CONFIG_LIBKLVANC 0 ++#define CONFIG_LIBKVAZAAR 0 ++#define CONFIG_LIBMODPLUG 0 ++#define CONFIG_LIBMP3LAME 0 ++#define CONFIG_LIBMYSOFA 0 ++#define CONFIG_LIBOPENCV 0 ++#define CONFIG_LIBOPENH264 0 ++#define CONFIG_LIBOPENJPEG 0 ++#define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 ++#define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 ++#define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 ++#define CONFIG_LIBRSVG 0 ++#define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 ++#define CONFIG_LIBSHINE 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_LIBSNAPPY 0 ++#define CONFIG_LIBSOXR 0 ++#define CONFIG_LIBSPEEX 0 ++#define CONFIG_LIBSRT 0 ++#define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 ++#define CONFIG_LIBTENSORFLOW 0 ++#define CONFIG_LIBTESSERACT 0 ++#define CONFIG_LIBTHEORA 0 ++#define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 ++#define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 ++#define CONFIG_LIBVORBIS 0 ++#define CONFIG_LIBVPX 0 ++#define CONFIG_LIBWEBP 0 ++#define CONFIG_LIBXML2 0 ++#define CONFIG_LIBZIMG 0 ++#define CONFIG_LIBZMQ 0 ++#define CONFIG_LIBZVBI 0 ++#define CONFIG_LV2 0 ++#define CONFIG_MEDIACODEC 0 ++#define CONFIG_OPENAL 0 ++#define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 ++#define CONFIG_POCKETSPHINX 0 ++#define CONFIG_VAPOURSYNTH 0 ++#define CONFIG_ALSA 0 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 ++#define CONFIG_ICONV 0 ++#define CONFIG_LIBXCB 0 ++#define CONFIG_LIBXCB_SHM 0 ++#define CONFIG_LIBXCB_SHAPE 0 ++#define CONFIG_LIBXCB_XFIXES 0 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 ++#define CONFIG_SDL2 0 ++#define CONFIG_SECURETRANSPORT 0 ++#define CONFIG_SNDIO 0 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 ++#define CONFIG_CUDA_NVCC 0 ++#define CONFIG_CUDA_SDK 0 ++#define CONFIG_LIBNPP 0 ++#define CONFIG_LIBMFX 0 ++#define CONFIG_MMAL 0 ++#define CONFIG_OMX 0 ++#define CONFIG_OPENCL 0 ++#define CONFIG_AMF 0 ++#define CONFIG_AUDIOTOOLBOX 0 ++#define CONFIG_CRYSTALHD 0 ++#define CONFIG_CUDA 0 ++#define CONFIG_CUDA_LLVM 0 ++#define CONFIG_CUVID 0 ++#define CONFIG_D3D11VA 0 ++#define CONFIG_DXVA2 0 ++#define CONFIG_FFNVCODEC 0 ++#define CONFIG_NVDEC 0 ++#define CONFIG_NVENC 0 ++#define CONFIG_VAAPI 0 ++#define CONFIG_VDPAU 0 ++#define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 ++#define CONFIG_V4L2_M2M 0 ++#define CONFIG_FTRAPV 0 ++#define CONFIG_GRAY 0 ++#define CONFIG_HARDCODED_TABLES 0 ++#define CONFIG_OMX_RPI 0 ++#define CONFIG_RUNTIME_CPUDETECT 1 ++#define CONFIG_SAFE_BITSTREAM_READER 1 ++#define CONFIG_SHARED 1 ++#define CONFIG_SMALL 1 ++#define CONFIG_STATIC 0 ++#define CONFIG_SWSCALE_ALPHA 1 ++#define CONFIG_GPL 0 ++#define CONFIG_NONFREE 0 ++#define CONFIG_VERSION3 0 ++#define CONFIG_AVDEVICE 0 ++#define CONFIG_AVFILTER 0 ++#define CONFIG_SWSCALE 0 ++#define CONFIG_POSTPROC 0 ++#define CONFIG_AVFORMAT 0 ++#define CONFIG_AVCODEC 1 ++#define CONFIG_SWRESAMPLE 0 ++#define CONFIG_AVUTIL 1 ++#define CONFIG_FFPLAY 0 ++#define CONFIG_FFPROBE 0 ++#define CONFIG_FFMPEG 0 ++#define CONFIG_DCT 1 ++#define CONFIG_DWT 0 ++#define CONFIG_ERROR_RESILIENCE 0 ++#define CONFIG_FAAN 1 ++#define CONFIG_FAST_UNALIGNED 1 ++#define CONFIG_FFT 1 ++#define CONFIG_LSP 0 ++#define CONFIG_MDCT 0 ++#define CONFIG_PIXELUTILS 0 ++#define CONFIG_NETWORK 0 ++#define CONFIG_RDFT 1 ++#define CONFIG_AUTODETECT 0 ++#define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 ++#define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 ++#define CONFIG_MEMORY_POISONING 0 ++#define CONFIG_NEON_CLOBBER_TEST 0 ++#define CONFIG_OSSFUZZ 0 ++#define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 ++#define CONFIG_THUMB 0 ++#define CONFIG_VALGRIND_BACKTRACE 0 ++#define CONFIG_XMM_CLOBBER_TEST 0 ++#define CONFIG_BSFS 0 ++#define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 ++#define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 ++#define CONFIG_AANDCTTABLES 0 ++#define CONFIG_AC3DSP 0 ++#define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 ++#define CONFIG_AUDIO_FRAME_QUEUE 0 ++#define CONFIG_AUDIODSP 0 ++#define CONFIG_BLOCKDSP 0 ++#define CONFIG_BSWAPDSP 0 ++#define CONFIG_CABAC 0 ++#define CONFIG_CBS 0 ++#define CONFIG_CBS_AV1 0 ++#define CONFIG_CBS_H264 0 ++#define CONFIG_CBS_H265 0 ++#define CONFIG_CBS_JPEG 0 ++#define CONFIG_CBS_MPEG2 0 ++#define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 ++#define CONFIG_DIRAC_PARSE 0 ++#define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 ++#define CONFIG_DVPROFILE 0 ++#define CONFIG_EXIF 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 ++#define CONFIG_FLACDSP 1 ++#define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 ++#define CONFIG_G722DSP 0 ++#define CONFIG_GOLOMB 0 ++#define CONFIG_GPLV3 0 ++#define CONFIG_H263DSP 0 ++#define CONFIG_H264CHROMA 0 ++#define CONFIG_H264DSP 0 ++#define CONFIG_H264PARSE 0 ++#define CONFIG_H264PRED 1 ++#define CONFIG_H264QPEL 0 ++#define CONFIG_HEVCPARSE 0 ++#define CONFIG_HPELDSP 0 ++#define CONFIG_HUFFMAN 0 ++#define CONFIG_HUFFYUVDSP 0 ++#define CONFIG_HUFFYUVENCDSP 0 ++#define CONFIG_IDCTDSP 1 ++#define CONFIG_IIRFILTER 0 ++#define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 ++#define CONFIG_INTRAX8 0 ++#define CONFIG_ISO_MEDIA 0 ++#define CONFIG_IVIDSP 0 ++#define CONFIG_JPEGTABLES 0 ++#define CONFIG_LGPLV3 0 ++#define CONFIG_LIBX262 0 ++#define CONFIG_LLAUDDSP 0 ++#define CONFIG_LLVIDDSP 0 ++#define CONFIG_LLVIDENCDSP 0 ++#define CONFIG_LPC 0 ++#define CONFIG_LZF 0 ++#define CONFIG_ME_CMP 0 ++#define CONFIG_MPEG_ER 0 ++#define CONFIG_MPEGAUDIO 1 ++#define CONFIG_MPEGAUDIODSP 1 ++#define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 ++#define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 ++#define CONFIG_MPEGVIDEOENC 0 ++#define CONFIG_MSS34DSP 0 ++#define CONFIG_PIXBLOCKDSP 0 ++#define CONFIG_QPELDSP 0 ++#define CONFIG_QSV 0 ++#define CONFIG_QSVDEC 0 ++#define CONFIG_QSVENC 0 ++#define CONFIG_QSVVPP 0 ++#define CONFIG_RANGECODER 0 ++#define CONFIG_RIFFDEC 0 ++#define CONFIG_RIFFENC 0 ++#define CONFIG_RTPDEC 0 ++#define CONFIG_RTPENC_CHAIN 0 ++#define CONFIG_RV34DSP 0 ++#define CONFIG_SCENE_SAD 0 ++#define CONFIG_SINEWIN 0 ++#define CONFIG_SNAPPY 0 ++#define CONFIG_SRTP 0 ++#define CONFIG_STARTCODE 0 ++#define CONFIG_TEXTUREDSP 0 ++#define CONFIG_TEXTUREDSPENC 0 ++#define CONFIG_TPELDSP 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VAAPI_ENCODE 0 ++#define CONFIG_VC1DSP 0 ++#define CONFIG_VIDEODSP 1 ++#define CONFIG_VP3DSP 0 ++#define CONFIG_VP56DSP 0 ++#define CONFIG_VP8DSP 1 ++#define CONFIG_WMA_FREQS 0 ++#define CONFIG_WMV2DSP 0 ++#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_common.h b/media/ffvpx/config_common.h +--- a/media/ffvpx/config_common.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_common.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,38 +0,0 @@ +-#ifndef MOZ_FFVPX_CONFIG_COMMON_H +-#define MOZ_FFVPX_CONFIG_COMMON_H +-#include "defaults_disabled.h" +- +-#ifdef YASM_MISSING_AVX2 +-#undef HAVE_AVX2 +-#undef HAVE_AVX2_INTERNAL +-#undef HAVE_AVX2_EXTERNAL +-#define HAVE_AVX2 0 +-#define HAVE_AVX2_INTERNAL 0 +-#define HAVE_AVX2_EXTERNAL 0 +-#endif +- +-#ifdef MOZ_LIBAV_FFT +-#undef CONFIG_FFT +-#undef CONFIG_RDFT +-#define CONFIG_FFT 1 +-#define CONFIG_RDFT 1 +-#endif +- +-#if defined(MOZ_WAYLAND) && !defined(MOZ_FFVPX_AUDIOONLY) +-#undef CONFIG_VAAPI +-#undef CONFIG_VAAPI_1 +-#undef CONFIG_VP8_VAAPI_HWACCEL +-#undef CONFIG_VP9_VAAPI_HWACCEL +-#undef CONFIG_AV1_VAAPI_HWACCEL +-#undef CONFIG_LIBDAV1D +-#undef CONFIG_AV1_DECODER +-#define CONFIG_VAAPI 1 +-#define CONFIG_VAAPI_1 1 +-#define CONFIG_VP8_VAAPI_HWACCEL 1 +-#define CONFIG_VP9_VAAPI_HWACCEL 1 +-#define CONFIG_AV1_VAAPI_HWACCEL 1 +-#define CONFIG_LIBDAV1D 1 +-#define CONFIG_AV1_DECODER 1 +-#endif +- +-#endif +diff -Naur a/media/ffvpx/config_components_audio_only.h b/media/ffvpx/config_components_audio_only.h +--- a/media/ffvpx/config_components_audio_only.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_components_audio_only.h 2023-04-06 12:50:11.785664945 +0200 +@@ -0,0 +1,2091 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_COMPONENTS_H ++#define FFMPEG_CONFIG_COMPONENTS_H ++#define CONFIG_AAC_ADTSTOASC_BSF 0 ++#define CONFIG_AV1_FRAME_MERGE_BSF 0 ++#define CONFIG_AV1_FRAME_SPLIT_BSF 0 ++#define CONFIG_AV1_METADATA_BSF 0 ++#define CONFIG_CHOMP_BSF 0 ++#define CONFIG_DUMP_EXTRADATA_BSF 0 ++#define CONFIG_DCA_CORE_BSF 0 ++#define CONFIG_DV_ERROR_MARKER_BSF 0 ++#define CONFIG_EAC3_CORE_BSF 0 ++#define CONFIG_EXTRACT_EXTRADATA_BSF 0 ++#define CONFIG_FILTER_UNITS_BSF 0 ++#define CONFIG_H264_METADATA_BSF 0 ++#define CONFIG_H264_MP4TOANNEXB_BSF 0 ++#define CONFIG_H264_REDUNDANT_PPS_BSF 0 ++#define CONFIG_HAPQA_EXTRACT_BSF 0 ++#define CONFIG_HEVC_METADATA_BSF 0 ++#define CONFIG_HEVC_MP4TOANNEXB_BSF 0 ++#define CONFIG_IMX_DUMP_HEADER_BSF 0 ++#define CONFIG_MJPEG2JPEG_BSF 0 ++#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 ++#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 ++#define CONFIG_MPEG2_METADATA_BSF 0 ++#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 ++#define CONFIG_MOV2TEXTSUB_BSF 0 ++#define CONFIG_NOISE_BSF 0 ++#define CONFIG_NULL_BSF 0 ++#define CONFIG_OPUS_METADATA_BSF 0 ++#define CONFIG_PCM_RECHUNK_BSF 0 ++#define CONFIG_PGS_FRAME_MERGE_BSF 0 ++#define CONFIG_PRORES_METADATA_BSF 0 ++#define CONFIG_REMOVE_EXTRADATA_BSF 0 ++#define CONFIG_SETTS_BSF 0 ++#define CONFIG_TEXT2MOVSUB_BSF 0 ++#define CONFIG_TRACE_HEADERS_BSF 0 ++#define CONFIG_TRUEHD_CORE_BSF 0 ++#define CONFIG_VP9_METADATA_BSF 0 ++#define CONFIG_VP9_RAW_REORDER_BSF 0 ++#define CONFIG_VP9_SUPERFRAME_BSF 0 ++#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0 ++#define CONFIG_AASC_DECODER 0 ++#define CONFIG_AIC_DECODER 0 ++#define CONFIG_ALIAS_PIX_DECODER 0 ++#define CONFIG_AGM_DECODER 0 ++#define CONFIG_AMV_DECODER 0 ++#define CONFIG_ANM_DECODER 0 ++#define CONFIG_ANSI_DECODER 0 ++#define CONFIG_APNG_DECODER 0 ++#define CONFIG_ARBC_DECODER 0 ++#define CONFIG_ARGO_DECODER 0 ++#define CONFIG_ASV1_DECODER 0 ++#define CONFIG_ASV2_DECODER 0 ++#define CONFIG_AURA_DECODER 0 ++#define CONFIG_AURA2_DECODER 0 ++#define CONFIG_AVRP_DECODER 0 ++#define CONFIG_AVRN_DECODER 0 ++#define CONFIG_AVS_DECODER 0 ++#define CONFIG_AVUI_DECODER 0 ++#define CONFIG_AYUV_DECODER 0 ++#define CONFIG_BETHSOFTVID_DECODER 0 ++#define CONFIG_BFI_DECODER 0 ++#define CONFIG_BINK_DECODER 0 ++#define CONFIG_BITPACKED_DECODER 0 ++#define CONFIG_BMP_DECODER 0 ++#define CONFIG_BMV_VIDEO_DECODER 0 ++#define CONFIG_BRENDER_PIX_DECODER 0 ++#define CONFIG_C93_DECODER 0 ++#define CONFIG_CAVS_DECODER 0 ++#define CONFIG_CDGRAPHICS_DECODER 0 ++#define CONFIG_CDTOONS_DECODER 0 ++#define CONFIG_CDXL_DECODER 0 ++#define CONFIG_CFHD_DECODER 0 ++#define CONFIG_CINEPAK_DECODER 0 ++#define CONFIG_CLEARVIDEO_DECODER 0 ++#define CONFIG_CLJR_DECODER 0 ++#define CONFIG_CLLC_DECODER 0 ++#define CONFIG_COMFORTNOISE_DECODER 0 ++#define CONFIG_CPIA_DECODER 0 ++#define CONFIG_CRI_DECODER 0 ++#define CONFIG_CSCD_DECODER 0 ++#define CONFIG_CYUV_DECODER 0 ++#define CONFIG_DDS_DECODER 0 ++#define CONFIG_DFA_DECODER 0 ++#define CONFIG_DIRAC_DECODER 0 ++#define CONFIG_DNXHD_DECODER 0 ++#define CONFIG_DPX_DECODER 0 ++#define CONFIG_DSICINVIDEO_DECODER 0 ++#define CONFIG_DVAUDIO_DECODER 0 ++#define CONFIG_DVVIDEO_DECODER 0 ++#define CONFIG_DXA_DECODER 0 ++#define CONFIG_DXTORY_DECODER 0 ++#define CONFIG_DXV_DECODER 0 ++#define CONFIG_EACMV_DECODER 0 ++#define CONFIG_EAMAD_DECODER 0 ++#define CONFIG_EATGQ_DECODER 0 ++#define CONFIG_EATGV_DECODER 0 ++#define CONFIG_EATQI_DECODER 0 ++#define CONFIG_EIGHTBPS_DECODER 0 ++#define CONFIG_EIGHTSVX_EXP_DECODER 0 ++#define CONFIG_EIGHTSVX_FIB_DECODER 0 ++#define CONFIG_ESCAPE124_DECODER 0 ++#define CONFIG_ESCAPE130_DECODER 0 ++#define CONFIG_EXR_DECODER 0 ++#define CONFIG_FFV1_DECODER 0 ++#define CONFIG_FFVHUFF_DECODER 0 ++#define CONFIG_FIC_DECODER 0 ++#define CONFIG_FITS_DECODER 0 ++#define CONFIG_FLASHSV_DECODER 0 ++#define CONFIG_FLASHSV2_DECODER 0 ++#define CONFIG_FLIC_DECODER 0 ++#define CONFIG_FLV_DECODER 0 ++#define CONFIG_FMVC_DECODER 0 ++#define CONFIG_FOURXM_DECODER 0 ++#define CONFIG_FRAPS_DECODER 0 ++#define CONFIG_FRWU_DECODER 0 ++#define CONFIG_G2M_DECODER 0 ++#define CONFIG_GDV_DECODER 0 ++#define CONFIG_GEM_DECODER 0 ++#define CONFIG_GIF_DECODER 0 ++#define CONFIG_H261_DECODER 0 ++#define CONFIG_H263_DECODER 0 ++#define CONFIG_H263I_DECODER 0 ++#define CONFIG_H263P_DECODER 0 ++#define CONFIG_H263_V4L2M2M_DECODER 0 ++#define CONFIG_H264_DECODER 0 ++#define CONFIG_H264_CRYSTALHD_DECODER 0 ++#define CONFIG_H264_V4L2M2M_DECODER 0 ++#define CONFIG_H264_MEDIACODEC_DECODER 0 ++#define CONFIG_H264_MMAL_DECODER 0 ++#define CONFIG_H264_QSV_DECODER 0 ++#define CONFIG_H264_RKMPP_DECODER 0 ++#define CONFIG_HAP_DECODER 0 ++#define CONFIG_HEVC_DECODER 0 ++#define CONFIG_HEVC_QSV_DECODER 0 ++#define CONFIG_HEVC_RKMPP_DECODER 0 ++#define CONFIG_HEVC_V4L2M2M_DECODER 0 ++#define CONFIG_HNM4_VIDEO_DECODER 0 ++#define CONFIG_HQ_HQA_DECODER 0 ++#define CONFIG_HQX_DECODER 0 ++#define CONFIG_HUFFYUV_DECODER 0 ++#define CONFIG_HYMT_DECODER 0 ++#define CONFIG_IDCIN_DECODER 0 ++#define CONFIG_IFF_ILBM_DECODER 0 ++#define CONFIG_IMM4_DECODER 0 ++#define CONFIG_IMM5_DECODER 0 ++#define CONFIG_INDEO2_DECODER 0 ++#define CONFIG_INDEO3_DECODER 0 ++#define CONFIG_INDEO4_DECODER 0 ++#define CONFIG_INDEO5_DECODER 0 ++#define CONFIG_INTERPLAY_VIDEO_DECODER 0 ++#define CONFIG_IPU_DECODER 0 ++#define CONFIG_JPEG2000_DECODER 0 ++#define CONFIG_JPEGLS_DECODER 0 ++#define CONFIG_JV_DECODER 0 ++#define CONFIG_KGV1_DECODER 0 ++#define CONFIG_KMVC_DECODER 0 ++#define CONFIG_LAGARITH_DECODER 0 ++#define CONFIG_LOCO_DECODER 0 ++#define CONFIG_LSCR_DECODER 0 ++#define CONFIG_M101_DECODER 0 ++#define CONFIG_MAGICYUV_DECODER 0 ++#define CONFIG_MDEC_DECODER 0 ++#define CONFIG_MIMIC_DECODER 0 ++#define CONFIG_MJPEG_DECODER 0 ++#define CONFIG_MJPEGB_DECODER 0 ++#define CONFIG_MMVIDEO_DECODER 0 ++#define CONFIG_MOBICLIP_DECODER 0 ++#define CONFIG_MOTIONPIXELS_DECODER 0 ++#define CONFIG_MPEG1VIDEO_DECODER 0 ++#define CONFIG_MPEG2VIDEO_DECODER 0 ++#define CONFIG_MPEG4_DECODER 0 ++#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 ++#define CONFIG_MPEG4_V4L2M2M_DECODER 0 ++#define CONFIG_MPEG4_MMAL_DECODER 0 ++#define CONFIG_MPEGVIDEO_DECODER 0 ++#define CONFIG_MPEG1_V4L2M2M_DECODER 0 ++#define CONFIG_MPEG2_MMAL_DECODER 0 ++#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 ++#define CONFIG_MPEG2_V4L2M2M_DECODER 0 ++#define CONFIG_MPEG2_QSV_DECODER 0 ++#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 ++#define CONFIG_MSA1_DECODER 0 ++#define CONFIG_MSCC_DECODER 0 ++#define CONFIG_MSMPEG4V1_DECODER 0 ++#define CONFIG_MSMPEG4V2_DECODER 0 ++#define CONFIG_MSMPEG4V3_DECODER 0 ++#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 ++#define CONFIG_MSP2_DECODER 0 ++#define CONFIG_MSRLE_DECODER 0 ++#define CONFIG_MSS1_DECODER 0 ++#define CONFIG_MSS2_DECODER 0 ++#define CONFIG_MSVIDEO1_DECODER 0 ++#define CONFIG_MSZH_DECODER 0 ++#define CONFIG_MTS2_DECODER 0 ++#define CONFIG_MV30_DECODER 0 ++#define CONFIG_MVC1_DECODER 0 ++#define CONFIG_MVC2_DECODER 0 ++#define CONFIG_MVDV_DECODER 0 ++#define CONFIG_MVHA_DECODER 0 ++#define CONFIG_MWSC_DECODER 0 ++#define CONFIG_MXPEG_DECODER 0 ++#define CONFIG_NOTCHLC_DECODER 0 ++#define CONFIG_NUV_DECODER 0 ++#define CONFIG_PAF_VIDEO_DECODER 0 ++#define CONFIG_PAM_DECODER 0 ++#define CONFIG_PBM_DECODER 0 ++#define CONFIG_PCX_DECODER 0 ++#define CONFIG_PFM_DECODER 0 ++#define CONFIG_PGM_DECODER 0 ++#define CONFIG_PGMYUV_DECODER 0 ++#define CONFIG_PGX_DECODER 0 ++#define CONFIG_PHOTOCD_DECODER 0 ++#define CONFIG_PICTOR_DECODER 0 ++#define CONFIG_PIXLET_DECODER 0 ++#define CONFIG_PNG_DECODER 0 ++#define CONFIG_PPM_DECODER 0 ++#define CONFIG_PRORES_DECODER 0 ++#define CONFIG_PROSUMER_DECODER 0 ++#define CONFIG_PSD_DECODER 0 ++#define CONFIG_PTX_DECODER 0 ++#define CONFIG_QDRAW_DECODER 0 ++#define CONFIG_QOI_DECODER 0 ++#define CONFIG_QPEG_DECODER 0 ++#define CONFIG_QTRLE_DECODER 0 ++#define CONFIG_R10K_DECODER 0 ++#define CONFIG_R210_DECODER 0 ++#define CONFIG_RASC_DECODER 0 ++#define CONFIG_RAWVIDEO_DECODER 0 ++#define CONFIG_RL2_DECODER 0 ++#define CONFIG_ROQ_DECODER 0 ++#define CONFIG_RPZA_DECODER 0 ++#define CONFIG_RSCC_DECODER 0 ++#define CONFIG_RV10_DECODER 0 ++#define CONFIG_RV20_DECODER 0 ++#define CONFIG_RV30_DECODER 0 ++#define CONFIG_RV40_DECODER 0 ++#define CONFIG_S302M_DECODER 0 ++#define CONFIG_SANM_DECODER 0 ++#define CONFIG_SCPR_DECODER 0 ++#define CONFIG_SCREENPRESSO_DECODER 0 ++#define CONFIG_SGA_DECODER 0 ++#define CONFIG_SGI_DECODER 0 ++#define CONFIG_SGIRLE_DECODER 0 ++#define CONFIG_SHEERVIDEO_DECODER 0 ++#define CONFIG_SIMBIOSIS_IMX_DECODER 0 ++#define CONFIG_SMACKER_DECODER 0 ++#define CONFIG_SMC_DECODER 0 ++#define CONFIG_SMVJPEG_DECODER 0 ++#define CONFIG_SNOW_DECODER 0 ++#define CONFIG_SP5X_DECODER 0 ++#define CONFIG_SPEEDHQ_DECODER 0 ++#define CONFIG_SPEEX_DECODER 0 ++#define CONFIG_SRGC_DECODER 0 ++#define CONFIG_SUNRAST_DECODER 0 ++#define CONFIG_SVQ1_DECODER 0 ++#define CONFIG_SVQ3_DECODER 0 ++#define CONFIG_TARGA_DECODER 0 ++#define CONFIG_TARGA_Y216_DECODER 0 ++#define CONFIG_TDSC_DECODER 0 ++#define CONFIG_THEORA_DECODER 0 ++#define CONFIG_THP_DECODER 0 ++#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 ++#define CONFIG_TIFF_DECODER 0 ++#define CONFIG_TMV_DECODER 0 ++#define CONFIG_TRUEMOTION1_DECODER 0 ++#define CONFIG_TRUEMOTION2_DECODER 0 ++#define CONFIG_TRUEMOTION2RT_DECODER 0 ++#define CONFIG_TSCC_DECODER 0 ++#define CONFIG_TSCC2_DECODER 0 ++#define CONFIG_TXD_DECODER 0 ++#define CONFIG_ULTI_DECODER 0 ++#define CONFIG_UTVIDEO_DECODER 0 ++#define CONFIG_V210_DECODER 0 ++#define CONFIG_V210X_DECODER 0 ++#define CONFIG_V308_DECODER 0 ++#define CONFIG_V408_DECODER 0 ++#define CONFIG_V410_DECODER 0 ++#define CONFIG_VB_DECODER 0 ++#define CONFIG_VBN_DECODER 0 ++#define CONFIG_VBLE_DECODER 0 ++#define CONFIG_VC1_DECODER 0 ++#define CONFIG_VC1_CRYSTALHD_DECODER 0 ++#define CONFIG_VC1IMAGE_DECODER 0 ++#define CONFIG_VC1_MMAL_DECODER 0 ++#define CONFIG_VC1_QSV_DECODER 0 ++#define CONFIG_VC1_V4L2M2M_DECODER 0 ++#define CONFIG_VCR1_DECODER 0 ++#define CONFIG_VMDVIDEO_DECODER 0 ++#define CONFIG_VMNC_DECODER 0 ++#define CONFIG_VP3_DECODER 0 ++#define CONFIG_VP4_DECODER 0 ++#define CONFIG_VP5_DECODER 0 ++#define CONFIG_VP6_DECODER 0 ++#define CONFIG_VP6A_DECODER 0 ++#define CONFIG_VP6F_DECODER 0 ++#define CONFIG_VP7_DECODER 0 ++#define CONFIG_VP8_DECODER 0 ++#define CONFIG_VP8_RKMPP_DECODER 0 ++#define CONFIG_VP8_V4L2M2M_DECODER 0 ++#define CONFIG_VP9_DECODER 0 ++#define CONFIG_VP9_RKMPP_DECODER 0 ++#define CONFIG_VP9_V4L2M2M_DECODER 0 ++#define CONFIG_VQA_DECODER 0 ++#define CONFIG_WEBP_DECODER 0 ++#define CONFIG_WCMV_DECODER 0 ++#define CONFIG_WRAPPED_AVFRAME_DECODER 0 ++#define CONFIG_WMV1_DECODER 0 ++#define CONFIG_WMV2_DECODER 0 ++#define CONFIG_WMV3_DECODER 0 ++#define CONFIG_WMV3_CRYSTALHD_DECODER 0 ++#define CONFIG_WMV3IMAGE_DECODER 0 ++#define CONFIG_WNV1_DECODER 0 ++#define CONFIG_XAN_WC3_DECODER 0 ++#define CONFIG_XAN_WC4_DECODER 0 ++#define CONFIG_XBM_DECODER 0 ++#define CONFIG_XFACE_DECODER 0 ++#define CONFIG_XL_DECODER 0 ++#define CONFIG_XPM_DECODER 0 ++#define CONFIG_XWD_DECODER 0 ++#define CONFIG_Y41P_DECODER 0 ++#define CONFIG_YLC_DECODER 0 ++#define CONFIG_YOP_DECODER 0 ++#define CONFIG_YUV4_DECODER 0 ++#define CONFIG_ZERO12V_DECODER 0 ++#define CONFIG_ZEROCODEC_DECODER 0 ++#define CONFIG_ZLIB_DECODER 0 ++#define CONFIG_ZMBV_DECODER 0 ++#define CONFIG_AAC_DECODER 0 ++#define CONFIG_AAC_FIXED_DECODER 0 ++#define CONFIG_AAC_LATM_DECODER 0 ++#define CONFIG_AC3_DECODER 0 ++#define CONFIG_AC3_FIXED_DECODER 0 ++#define CONFIG_ACELP_KELVIN_DECODER 0 ++#define CONFIG_ALAC_DECODER 0 ++#define CONFIG_ALS_DECODER 0 ++#define CONFIG_AMRNB_DECODER 0 ++#define CONFIG_AMRWB_DECODER 0 ++#define CONFIG_APE_DECODER 0 ++#define CONFIG_APTX_DECODER 0 ++#define CONFIG_APTX_HD_DECODER 0 ++#define CONFIG_ATRAC1_DECODER 0 ++#define CONFIG_ATRAC3_DECODER 0 ++#define CONFIG_ATRAC3AL_DECODER 0 ++#define CONFIG_ATRAC3P_DECODER 0 ++#define CONFIG_ATRAC3PAL_DECODER 0 ++#define CONFIG_ATRAC9_DECODER 0 ++#define CONFIG_BINKAUDIO_DCT_DECODER 0 ++#define CONFIG_BINKAUDIO_RDFT_DECODER 0 ++#define CONFIG_BMV_AUDIO_DECODER 0 ++#define CONFIG_COOK_DECODER 0 ++#define CONFIG_DCA_DECODER 0 ++#define CONFIG_DFPWM_DECODER 0 ++#define CONFIG_DOLBY_E_DECODER 0 ++#define CONFIG_DSD_LSBF_DECODER 0 ++#define CONFIG_DSD_MSBF_DECODER 0 ++#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 ++#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 ++#define CONFIG_DSICINAUDIO_DECODER 0 ++#define CONFIG_DSS_SP_DECODER 0 ++#define CONFIG_DST_DECODER 0 ++#define CONFIG_EAC3_DECODER 0 ++#define CONFIG_EVRC_DECODER 0 ++#define CONFIG_FASTAUDIO_DECODER 0 ++#define CONFIG_FFWAVESYNTH_DECODER 0 ++#define CONFIG_FLAC_DECODER 1 ++#define CONFIG_G723_1_DECODER 0 ++#define CONFIG_G729_DECODER 0 ++#define CONFIG_GSM_DECODER 0 ++#define CONFIG_GSM_MS_DECODER 0 ++#define CONFIG_HCA_DECODER 0 ++#define CONFIG_HCOM_DECODER 0 ++#define CONFIG_IAC_DECODER 0 ++#define CONFIG_ILBC_DECODER 0 ++#define CONFIG_IMC_DECODER 0 ++#define CONFIG_INTERPLAY_ACM_DECODER 0 ++#define CONFIG_MACE3_DECODER 0 ++#define CONFIG_MACE6_DECODER 0 ++#define CONFIG_METASOUND_DECODER 0 ++#define CONFIG_MLP_DECODER 0 ++#define CONFIG_MP1_DECODER 0 ++#define CONFIG_MP1FLOAT_DECODER 0 ++#define CONFIG_MP2_DECODER 0 ++#define CONFIG_MP2FLOAT_DECODER 0 ++#define CONFIG_MP3FLOAT_DECODER 0 ++#define CONFIG_MP3_DECODER 1 ++#define CONFIG_MP3ADUFLOAT_DECODER 0 ++#define CONFIG_MP3ADU_DECODER 0 ++#define CONFIG_MP3ON4FLOAT_DECODER 0 ++#define CONFIG_MP3ON4_DECODER 0 ++#define CONFIG_MPC7_DECODER 0 ++#define CONFIG_MPC8_DECODER 0 ++#define CONFIG_MSNSIREN_DECODER 0 ++#define CONFIG_NELLYMOSER_DECODER 0 ++#define CONFIG_ON2AVC_DECODER 0 ++#define CONFIG_OPUS_DECODER 0 ++#define CONFIG_PAF_AUDIO_DECODER 0 ++#define CONFIG_QCELP_DECODER 0 ++#define CONFIG_QDM2_DECODER 0 ++#define CONFIG_QDMC_DECODER 0 ++#define CONFIG_RA_144_DECODER 0 ++#define CONFIG_RA_288_DECODER 0 ++#define CONFIG_RALF_DECODER 0 ++#define CONFIG_SBC_DECODER 0 ++#define CONFIG_SHORTEN_DECODER 0 ++#define CONFIG_SIPR_DECODER 0 ++#define CONFIG_SIREN_DECODER 0 ++#define CONFIG_SMACKAUD_DECODER 0 ++#define CONFIG_SONIC_DECODER 0 ++#define CONFIG_TAK_DECODER 0 ++#define CONFIG_TRUEHD_DECODER 0 ++#define CONFIG_TRUESPEECH_DECODER 0 ++#define CONFIG_TTA_DECODER 0 ++#define CONFIG_TWINVQ_DECODER 0 ++#define CONFIG_VMDAUDIO_DECODER 0 ++#define CONFIG_VORBIS_DECODER 0 ++#define CONFIG_WAVPACK_DECODER 0 ++#define CONFIG_WMALOSSLESS_DECODER 0 ++#define CONFIG_WMAPRO_DECODER 0 ++#define CONFIG_WMAV1_DECODER 0 ++#define CONFIG_WMAV2_DECODER 0 ++#define CONFIG_WMAVOICE_DECODER 0 ++#define CONFIG_WS_SND1_DECODER 0 ++#define CONFIG_XMA1_DECODER 0 ++#define CONFIG_XMA2_DECODER 0 ++#define CONFIG_PCM_ALAW_DECODER 0 ++#define CONFIG_PCM_BLURAY_DECODER 0 ++#define CONFIG_PCM_DVD_DECODER 0 ++#define CONFIG_PCM_F16LE_DECODER 0 ++#define CONFIG_PCM_F24LE_DECODER 0 ++#define CONFIG_PCM_F32BE_DECODER 0 ++#define CONFIG_PCM_F32LE_DECODER 0 ++#define CONFIG_PCM_F64BE_DECODER 0 ++#define CONFIG_PCM_F64LE_DECODER 0 ++#define CONFIG_PCM_LXF_DECODER 0 ++#define CONFIG_PCM_MULAW_DECODER 0 ++#define CONFIG_PCM_S8_DECODER 0 ++#define CONFIG_PCM_S8_PLANAR_DECODER 0 ++#define CONFIG_PCM_S16BE_DECODER 0 ++#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S16LE_DECODER 0 ++#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S24BE_DECODER 0 ++#define CONFIG_PCM_S24DAUD_DECODER 0 ++#define CONFIG_PCM_S24LE_DECODER 0 ++#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S32BE_DECODER 0 ++#define CONFIG_PCM_S32LE_DECODER 0 ++#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S64BE_DECODER 0 ++#define CONFIG_PCM_S64LE_DECODER 0 ++#define CONFIG_PCM_SGA_DECODER 0 ++#define CONFIG_PCM_U8_DECODER 0 ++#define CONFIG_PCM_U16BE_DECODER 0 ++#define CONFIG_PCM_U16LE_DECODER 0 ++#define CONFIG_PCM_U24BE_DECODER 0 ++#define CONFIG_PCM_U24LE_DECODER 0 ++#define CONFIG_PCM_U32BE_DECODER 0 ++#define CONFIG_PCM_U32LE_DECODER 0 ++#define CONFIG_PCM_VIDC_DECODER 0 ++#define CONFIG_DERF_DPCM_DECODER 0 ++#define CONFIG_GREMLIN_DPCM_DECODER 0 ++#define CONFIG_INTERPLAY_DPCM_DECODER 0 ++#define CONFIG_ROQ_DPCM_DECODER 0 ++#define CONFIG_SDX2_DPCM_DECODER 0 ++#define CONFIG_SOL_DPCM_DECODER 0 ++#define CONFIG_XAN_DPCM_DECODER 0 ++#define CONFIG_ADPCM_4XM_DECODER 0 ++#define CONFIG_ADPCM_ADX_DECODER 0 ++#define CONFIG_ADPCM_AFC_DECODER 0 ++#define CONFIG_ADPCM_AGM_DECODER 0 ++#define CONFIG_ADPCM_AICA_DECODER 0 ++#define CONFIG_ADPCM_ARGO_DECODER 0 ++#define CONFIG_ADPCM_CT_DECODER 0 ++#define CONFIG_ADPCM_DTK_DECODER 0 ++#define CONFIG_ADPCM_EA_DECODER 0 ++#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 ++#define CONFIG_ADPCM_EA_R1_DECODER 0 ++#define CONFIG_ADPCM_EA_R2_DECODER 0 ++#define CONFIG_ADPCM_EA_R3_DECODER 0 ++#define CONFIG_ADPCM_EA_XAS_DECODER 0 ++#define CONFIG_ADPCM_G722_DECODER 0 ++#define CONFIG_ADPCM_G726_DECODER 0 ++#define CONFIG_ADPCM_G726LE_DECODER 0 ++#define CONFIG_ADPCM_IMA_ACORN_DECODER 0 ++#define CONFIG_ADPCM_IMA_AMV_DECODER 0 ++#define CONFIG_ADPCM_IMA_ALP_DECODER 0 ++#define CONFIG_ADPCM_IMA_APC_DECODER 0 ++#define CONFIG_ADPCM_IMA_APM_DECODER 0 ++#define CONFIG_ADPCM_IMA_CUNNING_DECODER 0 ++#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 ++#define CONFIG_ADPCM_IMA_DK3_DECODER 0 ++#define CONFIG_ADPCM_IMA_DK4_DECODER 0 ++#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 ++#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 ++#define CONFIG_ADPCM_IMA_ISS_DECODER 0 ++#define CONFIG_ADPCM_IMA_MOFLEX_DECODER 0 ++#define CONFIG_ADPCM_IMA_MTF_DECODER 0 ++#define CONFIG_ADPCM_IMA_OKI_DECODER 0 ++#define CONFIG_ADPCM_IMA_QT_DECODER 0 ++#define CONFIG_ADPCM_IMA_RAD_DECODER 0 ++#define CONFIG_ADPCM_IMA_SSI_DECODER 0 ++#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 ++#define CONFIG_ADPCM_IMA_WAV_DECODER 0 ++#define CONFIG_ADPCM_IMA_WS_DECODER 0 ++#define CONFIG_ADPCM_MS_DECODER 0 ++#define CONFIG_ADPCM_MTAF_DECODER 0 ++#define CONFIG_ADPCM_PSX_DECODER 0 ++#define CONFIG_ADPCM_SBPRO_2_DECODER 0 ++#define CONFIG_ADPCM_SBPRO_3_DECODER 0 ++#define CONFIG_ADPCM_SBPRO_4_DECODER 0 ++#define CONFIG_ADPCM_SWF_DECODER 0 ++#define CONFIG_ADPCM_THP_DECODER 0 ++#define CONFIG_ADPCM_THP_LE_DECODER 0 ++#define CONFIG_ADPCM_VIMA_DECODER 0 ++#define CONFIG_ADPCM_XA_DECODER 0 ++#define CONFIG_ADPCM_YAMAHA_DECODER 0 ++#define CONFIG_ADPCM_ZORK_DECODER 0 ++#define CONFIG_SSA_DECODER 0 ++#define CONFIG_ASS_DECODER 0 ++#define CONFIG_CCAPTION_DECODER 0 ++#define CONFIG_DVBSUB_DECODER 0 ++#define CONFIG_DVDSUB_DECODER 0 ++#define CONFIG_JACOSUB_DECODER 0 ++#define CONFIG_MICRODVD_DECODER 0 ++#define CONFIG_MOVTEXT_DECODER 0 ++#define CONFIG_MPL2_DECODER 0 ++#define CONFIG_PGSSUB_DECODER 0 ++#define CONFIG_PJS_DECODER 0 ++#define CONFIG_REALTEXT_DECODER 0 ++#define CONFIG_SAMI_DECODER 0 ++#define CONFIG_SRT_DECODER 0 ++#define CONFIG_STL_DECODER 0 ++#define CONFIG_SUBRIP_DECODER 0 ++#define CONFIG_SUBVIEWER_DECODER 0 ++#define CONFIG_SUBVIEWER1_DECODER 0 ++#define CONFIG_TEXT_DECODER 0 ++#define CONFIG_VPLAYER_DECODER 0 ++#define CONFIG_WEBVTT_DECODER 0 ++#define CONFIG_XSUB_DECODER 0 ++#define CONFIG_AAC_AT_DECODER 0 ++#define CONFIG_AC3_AT_DECODER 0 ++#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 ++#define CONFIG_ALAC_AT_DECODER 0 ++#define CONFIG_AMR_NB_AT_DECODER 0 ++#define CONFIG_EAC3_AT_DECODER 0 ++#define CONFIG_GSM_MS_AT_DECODER 0 ++#define CONFIG_ILBC_AT_DECODER 0 ++#define CONFIG_MP1_AT_DECODER 0 ++#define CONFIG_MP2_AT_DECODER 0 ++#define CONFIG_MP3_AT_DECODER 0 ++#define CONFIG_PCM_ALAW_AT_DECODER 0 ++#define CONFIG_PCM_MULAW_AT_DECODER 0 ++#define CONFIG_QDMC_AT_DECODER 0 ++#define CONFIG_QDM2_AT_DECODER 0 ++#define CONFIG_LIBARIBB24_DECODER 0 ++#define CONFIG_LIBCELT_DECODER 0 ++#define CONFIG_LIBCODEC2_DECODER 0 ++#define CONFIG_LIBDAV1D_DECODER 0 ++#define CONFIG_LIBDAVS2_DECODER 0 ++#define CONFIG_LIBFDK_AAC_DECODER 0 ++#define CONFIG_LIBGSM_DECODER 0 ++#define CONFIG_LIBGSM_MS_DECODER 0 ++#define CONFIG_LIBILBC_DECODER 0 ++#define CONFIG_LIBJXL_DECODER 0 ++#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 ++#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 ++#define CONFIG_LIBOPENJPEG_DECODER 0 ++#define CONFIG_LIBOPUS_DECODER 0 ++#define CONFIG_LIBRSVG_DECODER 0 ++#define CONFIG_LIBSPEEX_DECODER 0 ++#define CONFIG_LIBUAVS3D_DECODER 0 ++#define CONFIG_LIBVORBIS_DECODER 0 ++#define CONFIG_LIBVPX_VP8_DECODER 0 ++#define CONFIG_LIBVPX_VP9_DECODER 0 ++#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 ++#define CONFIG_BINTEXT_DECODER 0 ++#define CONFIG_XBIN_DECODER 0 ++#define CONFIG_IDF_DECODER 0 ++#define CONFIG_LIBAOM_AV1_DECODER 0 ++#define CONFIG_AV1_DECODER 0 ++#define CONFIG_AV1_CUVID_DECODER 0 ++#define CONFIG_AV1_QSV_DECODER 0 ++#define CONFIG_LIBOPENH264_DECODER 0 ++#define CONFIG_H264_CUVID_DECODER 0 ++#define CONFIG_HEVC_CUVID_DECODER 0 ++#define CONFIG_HEVC_MEDIACODEC_DECODER 0 ++#define CONFIG_MJPEG_CUVID_DECODER 0 ++#define CONFIG_MJPEG_QSV_DECODER 0 ++#define CONFIG_MPEG1_CUVID_DECODER 0 ++#define CONFIG_MPEG2_CUVID_DECODER 0 ++#define CONFIG_MPEG4_CUVID_DECODER 0 ++#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 ++#define CONFIG_VC1_CUVID_DECODER 0 ++#define CONFIG_VP8_CUVID_DECODER 0 ++#define CONFIG_VP8_MEDIACODEC_DECODER 0 ++#define CONFIG_VP8_QSV_DECODER 0 ++#define CONFIG_VP9_CUVID_DECODER 0 ++#define CONFIG_VP9_MEDIACODEC_DECODER 0 ++#define CONFIG_VP9_QSV_DECODER 0 ++#define CONFIG_A64MULTI_ENCODER 0 ++#define CONFIG_A64MULTI5_ENCODER 0 ++#define CONFIG_ALIAS_PIX_ENCODER 0 ++#define CONFIG_AMV_ENCODER 0 ++#define CONFIG_APNG_ENCODER 0 ++#define CONFIG_ASV1_ENCODER 0 ++#define CONFIG_ASV2_ENCODER 0 ++#define CONFIG_AVRP_ENCODER 0 ++#define CONFIG_AVUI_ENCODER 0 ++#define CONFIG_AYUV_ENCODER 0 ++#define CONFIG_BITPACKED_ENCODER 0 ++#define CONFIG_BMP_ENCODER 0 ++#define CONFIG_CFHD_ENCODER 0 ++#define CONFIG_CINEPAK_ENCODER 0 ++#define CONFIG_CLJR_ENCODER 0 ++#define CONFIG_COMFORTNOISE_ENCODER 0 ++#define CONFIG_DNXHD_ENCODER 0 ++#define CONFIG_DPX_ENCODER 0 ++#define CONFIG_DVVIDEO_ENCODER 0 ++#define CONFIG_EXR_ENCODER 0 ++#define CONFIG_FFV1_ENCODER 0 ++#define CONFIG_FFVHUFF_ENCODER 0 ++#define CONFIG_FITS_ENCODER 0 ++#define CONFIG_FLASHSV_ENCODER 0 ++#define CONFIG_FLASHSV2_ENCODER 0 ++#define CONFIG_FLV_ENCODER 0 ++#define CONFIG_GIF_ENCODER 0 ++#define CONFIG_H261_ENCODER 0 ++#define CONFIG_H263_ENCODER 0 ++#define CONFIG_H263P_ENCODER 0 ++#define CONFIG_HAP_ENCODER 0 ++#define CONFIG_HUFFYUV_ENCODER 0 ++#define CONFIG_JPEG2000_ENCODER 0 ++#define CONFIG_JPEGLS_ENCODER 0 ++#define CONFIG_LJPEG_ENCODER 0 ++#define CONFIG_MAGICYUV_ENCODER 0 ++#define CONFIG_MJPEG_ENCODER 0 ++#define CONFIG_MPEG1VIDEO_ENCODER 0 ++#define CONFIG_MPEG2VIDEO_ENCODER 0 ++#define CONFIG_MPEG4_ENCODER 0 ++#define CONFIG_MSMPEG4V2_ENCODER 0 ++#define CONFIG_MSMPEG4V3_ENCODER 0 ++#define CONFIG_MSVIDEO1_ENCODER 0 ++#define CONFIG_PAM_ENCODER 0 ++#define CONFIG_PBM_ENCODER 0 ++#define CONFIG_PCX_ENCODER 0 ++#define CONFIG_PFM_ENCODER 0 ++#define CONFIG_PGM_ENCODER 0 ++#define CONFIG_PGMYUV_ENCODER 0 ++#define CONFIG_PNG_ENCODER 0 ++#define CONFIG_PPM_ENCODER 0 ++#define CONFIG_PRORES_ENCODER 0 ++#define CONFIG_PRORES_AW_ENCODER 0 ++#define CONFIG_PRORES_KS_ENCODER 0 ++#define CONFIG_QOI_ENCODER 0 ++#define CONFIG_QTRLE_ENCODER 0 ++#define CONFIG_R10K_ENCODER 0 ++#define CONFIG_R210_ENCODER 0 ++#define CONFIG_RAWVIDEO_ENCODER 0 ++#define CONFIG_ROQ_ENCODER 0 ++#define CONFIG_RPZA_ENCODER 0 ++#define CONFIG_RV10_ENCODER 0 ++#define CONFIG_RV20_ENCODER 0 ++#define CONFIG_S302M_ENCODER 0 ++#define CONFIG_SGI_ENCODER 0 ++#define CONFIG_SMC_ENCODER 0 ++#define CONFIG_SNOW_ENCODER 0 ++#define CONFIG_SPEEDHQ_ENCODER 0 ++#define CONFIG_SUNRAST_ENCODER 0 ++#define CONFIG_SVQ1_ENCODER 0 ++#define CONFIG_TARGA_ENCODER 0 ++#define CONFIG_TIFF_ENCODER 0 ++#define CONFIG_UTVIDEO_ENCODER 0 ++#define CONFIG_V210_ENCODER 0 ++#define CONFIG_V308_ENCODER 0 ++#define CONFIG_V408_ENCODER 0 ++#define CONFIG_V410_ENCODER 0 ++#define CONFIG_VBN_ENCODER 0 ++#define CONFIG_VC2_ENCODER 0 ++#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 ++#define CONFIG_WMV1_ENCODER 0 ++#define CONFIG_WMV2_ENCODER 0 ++#define CONFIG_XBM_ENCODER 0 ++#define CONFIG_XFACE_ENCODER 0 ++#define CONFIG_XWD_ENCODER 0 ++#define CONFIG_Y41P_ENCODER 0 ++#define CONFIG_YUV4_ENCODER 0 ++#define CONFIG_ZLIB_ENCODER 0 ++#define CONFIG_ZMBV_ENCODER 0 ++#define CONFIG_AAC_ENCODER 0 ++#define CONFIG_AC3_ENCODER 0 ++#define CONFIG_AC3_FIXED_ENCODER 0 ++#define CONFIG_ALAC_ENCODER 0 ++#define CONFIG_APTX_ENCODER 0 ++#define CONFIG_APTX_HD_ENCODER 0 ++#define CONFIG_DCA_ENCODER 0 ++#define CONFIG_DFPWM_ENCODER 0 ++#define CONFIG_EAC3_ENCODER 0 ++#define CONFIG_FLAC_ENCODER 0 ++#define CONFIG_G723_1_ENCODER 0 ++#define CONFIG_MLP_ENCODER 0 ++#define CONFIG_MP2_ENCODER 0 ++#define CONFIG_MP2FIXED_ENCODER 0 ++#define CONFIG_NELLYMOSER_ENCODER 0 ++#define CONFIG_OPUS_ENCODER 0 ++#define CONFIG_RA_144_ENCODER 0 ++#define CONFIG_SBC_ENCODER 0 ++#define CONFIG_SONIC_ENCODER 0 ++#define CONFIG_SONIC_LS_ENCODER 0 ++#define CONFIG_TRUEHD_ENCODER 0 ++#define CONFIG_TTA_ENCODER 0 ++#define CONFIG_VORBIS_ENCODER 0 ++#define CONFIG_WAVPACK_ENCODER 0 ++#define CONFIG_WMAV1_ENCODER 0 ++#define CONFIG_WMAV2_ENCODER 0 ++#define CONFIG_PCM_ALAW_ENCODER 0 ++#define CONFIG_PCM_BLURAY_ENCODER 0 ++#define CONFIG_PCM_DVD_ENCODER 0 ++#define CONFIG_PCM_F32BE_ENCODER 0 ++#define CONFIG_PCM_F32LE_ENCODER 0 ++#define CONFIG_PCM_F64BE_ENCODER 0 ++#define CONFIG_PCM_F64LE_ENCODER 0 ++#define CONFIG_PCM_MULAW_ENCODER 0 ++#define CONFIG_PCM_S8_ENCODER 0 ++#define CONFIG_PCM_S8_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S16BE_ENCODER 0 ++#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S16LE_ENCODER 0 ++#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S24BE_ENCODER 0 ++#define CONFIG_PCM_S24DAUD_ENCODER 0 ++#define CONFIG_PCM_S24LE_ENCODER 0 ++#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S32BE_ENCODER 0 ++#define CONFIG_PCM_S32LE_ENCODER 0 ++#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S64BE_ENCODER 0 ++#define CONFIG_PCM_S64LE_ENCODER 0 ++#define CONFIG_PCM_U8_ENCODER 0 ++#define CONFIG_PCM_U16BE_ENCODER 0 ++#define CONFIG_PCM_U16LE_ENCODER 0 ++#define CONFIG_PCM_U24BE_ENCODER 0 ++#define CONFIG_PCM_U24LE_ENCODER 0 ++#define CONFIG_PCM_U32BE_ENCODER 0 ++#define CONFIG_PCM_U32LE_ENCODER 0 ++#define CONFIG_PCM_VIDC_ENCODER 0 ++#define CONFIG_ROQ_DPCM_ENCODER 0 ++#define CONFIG_ADPCM_ADX_ENCODER 0 ++#define CONFIG_ADPCM_ARGO_ENCODER 0 ++#define CONFIG_ADPCM_G722_ENCODER 0 ++#define CONFIG_ADPCM_G726_ENCODER 0 ++#define CONFIG_ADPCM_G726LE_ENCODER 0 ++#define CONFIG_ADPCM_IMA_AMV_ENCODER 0 ++#define CONFIG_ADPCM_IMA_ALP_ENCODER 0 ++#define CONFIG_ADPCM_IMA_APM_ENCODER 0 ++#define CONFIG_ADPCM_IMA_QT_ENCODER 0 ++#define CONFIG_ADPCM_IMA_SSI_ENCODER 0 ++#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 ++#define CONFIG_ADPCM_IMA_WS_ENCODER 0 ++#define CONFIG_ADPCM_MS_ENCODER 0 ++#define CONFIG_ADPCM_SWF_ENCODER 0 ++#define CONFIG_ADPCM_YAMAHA_ENCODER 0 ++#define CONFIG_SSA_ENCODER 0 ++#define CONFIG_ASS_ENCODER 0 ++#define CONFIG_DVBSUB_ENCODER 0 ++#define CONFIG_DVDSUB_ENCODER 0 ++#define CONFIG_MOVTEXT_ENCODER 0 ++#define CONFIG_SRT_ENCODER 0 ++#define CONFIG_SUBRIP_ENCODER 0 ++#define CONFIG_TEXT_ENCODER 0 ++#define CONFIG_TTML_ENCODER 0 ++#define CONFIG_WEBVTT_ENCODER 0 ++#define CONFIG_XSUB_ENCODER 0 ++#define CONFIG_AAC_AT_ENCODER 0 ++#define CONFIG_ALAC_AT_ENCODER 0 ++#define CONFIG_ILBC_AT_ENCODER 0 ++#define CONFIG_PCM_ALAW_AT_ENCODER 0 ++#define CONFIG_PCM_MULAW_AT_ENCODER 0 ++#define CONFIG_LIBAOM_AV1_ENCODER 0 ++#define CONFIG_LIBCODEC2_ENCODER 0 ++#define CONFIG_LIBFDK_AAC_ENCODER 0 ++#define CONFIG_LIBGSM_ENCODER 0 ++#define CONFIG_LIBGSM_MS_ENCODER 0 ++#define CONFIG_LIBILBC_ENCODER 0 ++#define CONFIG_LIBJXL_ENCODER 0 ++#define CONFIG_LIBMP3LAME_ENCODER 0 ++#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 ++#define CONFIG_LIBOPENJPEG_ENCODER 0 ++#define CONFIG_LIBOPUS_ENCODER 0 ++#define CONFIG_LIBRAV1E_ENCODER 0 ++#define CONFIG_LIBSHINE_ENCODER 0 ++#define CONFIG_LIBSPEEX_ENCODER 0 ++#define CONFIG_LIBSVTAV1_ENCODER 0 ++#define CONFIG_LIBTHEORA_ENCODER 0 ++#define CONFIG_LIBTWOLAME_ENCODER 0 ++#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 ++#define CONFIG_LIBVORBIS_ENCODER 0 ++#define CONFIG_LIBVPX_VP8_ENCODER 0 ++#define CONFIG_LIBVPX_VP9_ENCODER 0 ++#define CONFIG_LIBWEBP_ANIM_ENCODER 0 ++#define CONFIG_LIBWEBP_ENCODER 0 ++#define CONFIG_LIBX262_ENCODER 0 ++#define CONFIG_LIBX264_ENCODER 0 ++#define CONFIG_LIBX264RGB_ENCODER 0 ++#define CONFIG_LIBX265_ENCODER 0 ++#define CONFIG_LIBXAVS_ENCODER 0 ++#define CONFIG_LIBXAVS2_ENCODER 0 ++#define CONFIG_LIBXVID_ENCODER 0 ++#define CONFIG_AAC_MF_ENCODER 0 ++#define CONFIG_AC3_MF_ENCODER 0 ++#define CONFIG_H263_V4L2M2M_ENCODER 0 ++#define CONFIG_LIBOPENH264_ENCODER 0 ++#define CONFIG_H264_AMF_ENCODER 0 ++#define CONFIG_H264_MF_ENCODER 0 ++#define CONFIG_H264_NVENC_ENCODER 0 ++#define CONFIG_H264_OMX_ENCODER 0 ++#define CONFIG_H264_QSV_ENCODER 0 ++#define CONFIG_H264_V4L2M2M_ENCODER 0 ++#define CONFIG_H264_VAAPI_ENCODER 0 ++#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 ++#define CONFIG_HEVC_AMF_ENCODER 0 ++#define CONFIG_HEVC_MF_ENCODER 0 ++#define CONFIG_HEVC_NVENC_ENCODER 0 ++#define CONFIG_HEVC_QSV_ENCODER 0 ++#define CONFIG_HEVC_V4L2M2M_ENCODER 0 ++#define CONFIG_HEVC_VAAPI_ENCODER 0 ++#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 ++#define CONFIG_LIBKVAZAAR_ENCODER 0 ++#define CONFIG_MJPEG_QSV_ENCODER 0 ++#define CONFIG_MJPEG_VAAPI_ENCODER 0 ++#define CONFIG_MP3_MF_ENCODER 0 ++#define CONFIG_MPEG2_QSV_ENCODER 0 ++#define CONFIG_MPEG2_VAAPI_ENCODER 0 ++#define CONFIG_MPEG4_OMX_ENCODER 0 ++#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 ++#define CONFIG_PRORES_VIDEOTOOLBOX_ENCODER 0 ++#define CONFIG_VP8_V4L2M2M_ENCODER 0 ++#define CONFIG_VP8_VAAPI_ENCODER 0 ++#define CONFIG_VP9_VAAPI_ENCODER 0 ++#define CONFIG_VP9_QSV_ENCODER 0 ++#define CONFIG_AV1_D3D11VA_HWACCEL 0 ++#define CONFIG_AV1_D3D11VA2_HWACCEL 0 ++#define CONFIG_AV1_DXVA2_HWACCEL 0 ++#define CONFIG_AV1_NVDEC_HWACCEL 0 ++#define CONFIG_AV1_VAAPI_HWACCEL 0 ++#define CONFIG_AV1_VDPAU_HWACCEL 0 ++#define CONFIG_H263_VAAPI_HWACCEL 0 ++#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_H264_D3D11VA_HWACCEL 0 ++#define CONFIG_H264_D3D11VA2_HWACCEL 0 ++#define CONFIG_H264_DXVA2_HWACCEL 0 ++#define CONFIG_H264_NVDEC_HWACCEL 0 ++#define CONFIG_H264_VAAPI_HWACCEL 0 ++#define CONFIG_H264_VDPAU_HWACCEL 0 ++#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_HEVC_D3D11VA_HWACCEL 0 ++#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 ++#define CONFIG_HEVC_DXVA2_HWACCEL 0 ++#define CONFIG_HEVC_NVDEC_HWACCEL 0 ++#define CONFIG_HEVC_VAAPI_HWACCEL 0 ++#define CONFIG_HEVC_VDPAU_HWACCEL 0 ++#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_MJPEG_NVDEC_HWACCEL 0 ++#define CONFIG_MJPEG_VAAPI_HWACCEL 0 ++#define CONFIG_MPEG1_NVDEC_HWACCEL 0 ++#define CONFIG_MPEG1_VDPAU_HWACCEL 0 ++#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 ++#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 ++#define CONFIG_MPEG2_NVDEC_HWACCEL 0 ++#define CONFIG_MPEG2_DXVA2_HWACCEL 0 ++#define CONFIG_MPEG2_VAAPI_HWACCEL 0 ++#define CONFIG_MPEG2_VDPAU_HWACCEL 0 ++#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_MPEG4_NVDEC_HWACCEL 0 ++#define CONFIG_MPEG4_VAAPI_HWACCEL 0 ++#define CONFIG_MPEG4_VDPAU_HWACCEL 0 ++#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_VC1_D3D11VA_HWACCEL 0 ++#define CONFIG_VC1_D3D11VA2_HWACCEL 0 ++#define CONFIG_VC1_DXVA2_HWACCEL 0 ++#define CONFIG_VC1_NVDEC_HWACCEL 0 ++#define CONFIG_VC1_VAAPI_HWACCEL 0 ++#define CONFIG_VC1_VDPAU_HWACCEL 0 ++#define CONFIG_VP8_NVDEC_HWACCEL 0 ++#define CONFIG_VP8_VAAPI_HWACCEL 0 ++#define CONFIG_VP9_D3D11VA_HWACCEL 0 ++#define CONFIG_VP9_D3D11VA2_HWACCEL 0 ++#define CONFIG_VP9_DXVA2_HWACCEL 0 ++#define CONFIG_VP9_NVDEC_HWACCEL 0 ++#define CONFIG_VP9_VAAPI_HWACCEL 0 ++#define CONFIG_VP9_VDPAU_HWACCEL 0 ++#define CONFIG_VP9_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_WMV3_D3D11VA_HWACCEL 0 ++#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 ++#define CONFIG_WMV3_DXVA2_HWACCEL 0 ++#define CONFIG_WMV3_NVDEC_HWACCEL 0 ++#define CONFIG_WMV3_VAAPI_HWACCEL 0 ++#define CONFIG_WMV3_VDPAU_HWACCEL 0 ++#define CONFIG_AAC_PARSER 0 ++#define CONFIG_AAC_LATM_PARSER 0 ++#define CONFIG_AC3_PARSER 0 ++#define CONFIG_ADX_PARSER 0 ++#define CONFIG_AMR_PARSER 0 ++#define CONFIG_AV1_PARSER 0 ++#define CONFIG_AVS2_PARSER 0 ++#define CONFIG_AVS3_PARSER 0 ++#define CONFIG_BMP_PARSER 0 ++#define CONFIG_CAVSVIDEO_PARSER 0 ++#define CONFIG_COOK_PARSER 0 ++#define CONFIG_CRI_PARSER 0 ++#define CONFIG_DCA_PARSER 0 ++#define CONFIG_DIRAC_PARSER 0 ++#define CONFIG_DNXHD_PARSER 0 ++#define CONFIG_DOLBY_E_PARSER 0 ++#define CONFIG_DPX_PARSER 0 ++#define CONFIG_DVAUDIO_PARSER 0 ++#define CONFIG_DVBSUB_PARSER 0 ++#define CONFIG_DVDSUB_PARSER 0 ++#define CONFIG_DVD_NAV_PARSER 0 ++#define CONFIG_FLAC_PARSER 0 ++#define CONFIG_G723_1_PARSER 0 ++#define CONFIG_G729_PARSER 0 ++#define CONFIG_GIF_PARSER 0 ++#define CONFIG_GSM_PARSER 0 ++#define CONFIG_H261_PARSER 0 ++#define CONFIG_H263_PARSER 0 ++#define CONFIG_H264_PARSER 0 ++#define CONFIG_HEVC_PARSER 0 ++#define CONFIG_IPU_PARSER 0 ++#define CONFIG_JPEG2000_PARSER 0 ++#define CONFIG_MJPEG_PARSER 0 ++#define CONFIG_MLP_PARSER 0 ++#define CONFIG_MPEG4VIDEO_PARSER 0 ++#define CONFIG_MPEGAUDIO_PARSER 0 ++#define CONFIG_MPEGVIDEO_PARSER 0 ++#define CONFIG_OPUS_PARSER 0 ++#define CONFIG_PNG_PARSER 0 ++#define CONFIG_PNM_PARSER 0 ++#define CONFIG_QOI_PARSER 0 ++#define CONFIG_RV30_PARSER 0 ++#define CONFIG_RV40_PARSER 0 ++#define CONFIG_SBC_PARSER 0 ++#define CONFIG_SIPR_PARSER 0 ++#define CONFIG_TAK_PARSER 0 ++#define CONFIG_VC1_PARSER 0 ++#define CONFIG_VORBIS_PARSER 0 ++#define CONFIG_VP3_PARSER 0 ++#define CONFIG_VP8_PARSER 0 ++#define CONFIG_VP9_PARSER 0 ++#define CONFIG_WEBP_PARSER 0 ++#define CONFIG_XBM_PARSER 0 ++#define CONFIG_XMA_PARSER 0 ++#define CONFIG_ALSA_INDEV 0 ++#define CONFIG_ANDROID_CAMERA_INDEV 0 ++#define CONFIG_AVFOUNDATION_INDEV 0 ++#define CONFIG_BKTR_INDEV 0 ++#define CONFIG_DECKLINK_INDEV 0 ++#define CONFIG_DSHOW_INDEV 0 ++#define CONFIG_FBDEV_INDEV 0 ++#define CONFIG_GDIGRAB_INDEV 0 ++#define CONFIG_IEC61883_INDEV 0 ++#define CONFIG_JACK_INDEV 0 ++#define CONFIG_KMSGRAB_INDEV 0 ++#define CONFIG_LAVFI_INDEV 0 ++#define CONFIG_OPENAL_INDEV 0 ++#define CONFIG_OSS_INDEV 0 ++#define CONFIG_PULSE_INDEV 0 ++#define CONFIG_SNDIO_INDEV 0 ++#define CONFIG_V4L2_INDEV 0 ++#define CONFIG_VFWCAP_INDEV 0 ++#define CONFIG_XCBGRAB_INDEV 0 ++#define CONFIG_LIBCDIO_INDEV 0 ++#define CONFIG_LIBDC1394_INDEV 0 ++#define CONFIG_ALSA_OUTDEV 0 ++#define CONFIG_AUDIOTOOLBOX_OUTDEV 0 ++#define CONFIG_CACA_OUTDEV 0 ++#define CONFIG_DECKLINK_OUTDEV 0 ++#define CONFIG_FBDEV_OUTDEV 0 ++#define CONFIG_OPENGL_OUTDEV 0 ++#define CONFIG_OSS_OUTDEV 0 ++#define CONFIG_PULSE_OUTDEV 0 ++#define CONFIG_SDL2_OUTDEV 0 ++#define CONFIG_SNDIO_OUTDEV 0 ++#define CONFIG_V4L2_OUTDEV 0 ++#define CONFIG_XV_OUTDEV 0 ++#define CONFIG_ABENCH_FILTER 0 ++#define CONFIG_ACOMPRESSOR_FILTER 0 ++#define CONFIG_ACONTRAST_FILTER 0 ++#define CONFIG_ACOPY_FILTER 0 ++#define CONFIG_ACUE_FILTER 0 ++#define CONFIG_ACROSSFADE_FILTER 0 ++#define CONFIG_ACROSSOVER_FILTER 0 ++#define CONFIG_ACRUSHER_FILTER 0 ++#define CONFIG_ADECLICK_FILTER 0 ++#define CONFIG_ADECLIP_FILTER 0 ++#define CONFIG_ADECORRELATE_FILTER 0 ++#define CONFIG_ADELAY_FILTER 0 ++#define CONFIG_ADENORM_FILTER 0 ++#define CONFIG_ADERIVATIVE_FILTER 0 ++#define CONFIG_ADYNAMICEQUALIZER_FILTER 0 ++#define CONFIG_ADYNAMICSMOOTH_FILTER 0 ++#define CONFIG_AECHO_FILTER 0 ++#define CONFIG_AEMPHASIS_FILTER 0 ++#define CONFIG_AEVAL_FILTER 0 ++#define CONFIG_AEXCITER_FILTER 0 ++#define CONFIG_AFADE_FILTER 0 ++#define CONFIG_AFFTDN_FILTER 0 ++#define CONFIG_AFFTFILT_FILTER 0 ++#define CONFIG_AFIR_FILTER 0 ++#define CONFIG_AFORMAT_FILTER 0 ++#define CONFIG_AFREQSHIFT_FILTER 0 ++#define CONFIG_AFWTDN_FILTER 0 ++#define CONFIG_AGATE_FILTER 0 ++#define CONFIG_AIIR_FILTER 0 ++#define CONFIG_AINTEGRAL_FILTER 0 ++#define CONFIG_AINTERLEAVE_FILTER 0 ++#define CONFIG_ALATENCY_FILTER 0 ++#define CONFIG_ALIMITER_FILTER 0 ++#define CONFIG_ALLPASS_FILTER 0 ++#define CONFIG_ALOOP_FILTER 0 ++#define CONFIG_AMERGE_FILTER 0 ++#define CONFIG_AMETADATA_FILTER 0 ++#define CONFIG_AMIX_FILTER 0 ++#define CONFIG_AMULTIPLY_FILTER 0 ++#define CONFIG_ANEQUALIZER_FILTER 0 ++#define CONFIG_ANLMDN_FILTER 0 ++#define CONFIG_ANLMF_FILTER 0 ++#define CONFIG_ANLMS_FILTER 0 ++#define CONFIG_ANULL_FILTER 0 ++#define CONFIG_APAD_FILTER 0 ++#define CONFIG_APERMS_FILTER 0 ++#define CONFIG_APHASER_FILTER 0 ++#define CONFIG_APHASESHIFT_FILTER 0 ++#define CONFIG_APSYCLIP_FILTER 0 ++#define CONFIG_APULSATOR_FILTER 0 ++#define CONFIG_AREALTIME_FILTER 0 ++#define CONFIG_ARESAMPLE_FILTER 0 ++#define CONFIG_AREVERSE_FILTER 0 ++#define CONFIG_ARNNDN_FILTER 0 ++#define CONFIG_ASDR_FILTER 0 ++#define CONFIG_ASEGMENT_FILTER 0 ++#define CONFIG_ASELECT_FILTER 0 ++#define CONFIG_ASENDCMD_FILTER 0 ++#define CONFIG_ASETNSAMPLES_FILTER 0 ++#define CONFIG_ASETPTS_FILTER 0 ++#define CONFIG_ASETRATE_FILTER 0 ++#define CONFIG_ASETTB_FILTER 0 ++#define CONFIG_ASHOWINFO_FILTER 0 ++#define CONFIG_ASIDEDATA_FILTER 0 ++#define CONFIG_ASOFTCLIP_FILTER 0 ++#define CONFIG_ASPECTRALSTATS_FILTER 0 ++#define CONFIG_ASPLIT_FILTER 0 ++#define CONFIG_ASR_FILTER 0 ++#define CONFIG_ASTATS_FILTER 0 ++#define CONFIG_ASTREAMSELECT_FILTER 0 ++#define CONFIG_ASUBBOOST_FILTER 0 ++#define CONFIG_ASUBCUT_FILTER 0 ++#define CONFIG_ASUPERCUT_FILTER 0 ++#define CONFIG_ASUPERPASS_FILTER 0 ++#define CONFIG_ASUPERSTOP_FILTER 0 ++#define CONFIG_ATEMPO_FILTER 0 ++#define CONFIG_ATILT_FILTER 0 ++#define CONFIG_ATRIM_FILTER 0 ++#define CONFIG_AXCORRELATE_FILTER 0 ++#define CONFIG_AZMQ_FILTER 0 ++#define CONFIG_BANDPASS_FILTER 0 ++#define CONFIG_BANDREJECT_FILTER 0 ++#define CONFIG_BASS_FILTER 0 ++#define CONFIG_BIQUAD_FILTER 0 ++#define CONFIG_BS2B_FILTER 0 ++#define CONFIG_CHANNELMAP_FILTER 0 ++#define CONFIG_CHANNELSPLIT_FILTER 0 ++#define CONFIG_CHORUS_FILTER 0 ++#define CONFIG_COMPAND_FILTER 0 ++#define CONFIG_COMPENSATIONDELAY_FILTER 0 ++#define CONFIG_CROSSFEED_FILTER 0 ++#define CONFIG_CRYSTALIZER_FILTER 0 ++#define CONFIG_DCSHIFT_FILTER 0 ++#define CONFIG_DEESSER_FILTER 0 ++#define CONFIG_DIALOGUENHANCE_FILTER 0 ++#define CONFIG_DRMETER_FILTER 0 ++#define CONFIG_DYNAUDNORM_FILTER 0 ++#define CONFIG_EARWAX_FILTER 0 ++#define CONFIG_EBUR128_FILTER 0 ++#define CONFIG_EQUALIZER_FILTER 0 ++#define CONFIG_EXTRASTEREO_FILTER 0 ++#define CONFIG_FIREQUALIZER_FILTER 0 ++#define CONFIG_FLANGER_FILTER 0 ++#define CONFIG_HAAS_FILTER 0 ++#define CONFIG_HDCD_FILTER 0 ++#define CONFIG_HEADPHONE_FILTER 0 ++#define CONFIG_HIGHPASS_FILTER 0 ++#define CONFIG_HIGHSHELF_FILTER 0 ++#define CONFIG_JOIN_FILTER 0 ++#define CONFIG_LADSPA_FILTER 0 ++#define CONFIG_LOUDNORM_FILTER 0 ++#define CONFIG_LOWPASS_FILTER 0 ++#define CONFIG_LOWSHELF_FILTER 0 ++#define CONFIG_LV2_FILTER 0 ++#define CONFIG_MCOMPAND_FILTER 0 ++#define CONFIG_PAN_FILTER 0 ++#define CONFIG_REPLAYGAIN_FILTER 0 ++#define CONFIG_RUBBERBAND_FILTER 0 ++#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 ++#define CONFIG_SIDECHAINGATE_FILTER 0 ++#define CONFIG_SILENCEDETECT_FILTER 0 ++#define CONFIG_SILENCEREMOVE_FILTER 0 ++#define CONFIG_SOFALIZER_FILTER 0 ++#define CONFIG_SPEECHNORM_FILTER 0 ++#define CONFIG_STEREOTOOLS_FILTER 0 ++#define CONFIG_STEREOWIDEN_FILTER 0 ++#define CONFIG_SUPEREQUALIZER_FILTER 0 ++#define CONFIG_SURROUND_FILTER 0 ++#define CONFIG_TILTSHELF_FILTER 0 ++#define CONFIG_TREBLE_FILTER 0 ++#define CONFIG_TREMOLO_FILTER 0 ++#define CONFIG_VIBRATO_FILTER 0 ++#define CONFIG_VIRTUALBASS_FILTER 0 ++#define CONFIG_VOLUME_FILTER 0 ++#define CONFIG_VOLUMEDETECT_FILTER 0 ++#define CONFIG_AEVALSRC_FILTER 0 ++#define CONFIG_AFIRSRC_FILTER 0 ++#define CONFIG_ANOISESRC_FILTER 0 ++#define CONFIG_ANULLSRC_FILTER 0 ++#define CONFIG_FLITE_FILTER 0 ++#define CONFIG_HILBERT_FILTER 0 ++#define CONFIG_SINC_FILTER 0 ++#define CONFIG_SINE_FILTER 0 ++#define CONFIG_ANULLSINK_FILTER 0 ++#define CONFIG_ADDROI_FILTER 0 ++#define CONFIG_ALPHAEXTRACT_FILTER 0 ++#define CONFIG_ALPHAMERGE_FILTER 0 ++#define CONFIG_AMPLIFY_FILTER 0 ++#define CONFIG_ASS_FILTER 0 ++#define CONFIG_ATADENOISE_FILTER 0 ++#define CONFIG_AVGBLUR_FILTER 0 ++#define CONFIG_AVGBLUR_OPENCL_FILTER 0 ++#define CONFIG_AVGBLUR_VULKAN_FILTER 0 ++#define CONFIG_BBOX_FILTER 0 ++#define CONFIG_BENCH_FILTER 0 ++#define CONFIG_BILATERAL_FILTER 0 ++#define CONFIG_BITPLANENOISE_FILTER 0 ++#define CONFIG_BLACKDETECT_FILTER 0 ++#define CONFIG_BLACKFRAME_FILTER 0 ++#define CONFIG_BLEND_FILTER 0 ++#define CONFIG_BLEND_VULKAN_FILTER 0 ++#define CONFIG_BLOCKDETECT_FILTER 0 ++#define CONFIG_BLURDETECT_FILTER 0 ++#define CONFIG_BM3D_FILTER 0 ++#define CONFIG_BOXBLUR_FILTER 0 ++#define CONFIG_BOXBLUR_OPENCL_FILTER 0 ++#define CONFIG_BWDIF_FILTER 0 ++#define CONFIG_CAS_FILTER 0 ++#define CONFIG_CHROMABER_VULKAN_FILTER 0 ++#define CONFIG_CHROMAHOLD_FILTER 0 ++#define CONFIG_CHROMAKEY_FILTER 0 ++#define CONFIG_CHROMANR_FILTER 0 ++#define CONFIG_CHROMASHIFT_FILTER 0 ++#define CONFIG_CIESCOPE_FILTER 0 ++#define CONFIG_CODECVIEW_FILTER 0 ++#define CONFIG_COLORBALANCE_FILTER 0 ++#define CONFIG_COLORCHANNELMIXER_FILTER 0 ++#define CONFIG_COLORCONTRAST_FILTER 0 ++#define CONFIG_COLORCORRECT_FILTER 0 ++#define CONFIG_COLORIZE_FILTER 0 ++#define CONFIG_COLORKEY_FILTER 0 ++#define CONFIG_COLORKEY_OPENCL_FILTER 0 ++#define CONFIG_COLORHOLD_FILTER 0 ++#define CONFIG_COLORLEVELS_FILTER 0 ++#define CONFIG_COLORMAP_FILTER 0 ++#define CONFIG_COLORMATRIX_FILTER 0 ++#define CONFIG_COLORSPACE_FILTER 0 ++#define CONFIG_COLORTEMPERATURE_FILTER 0 ++#define CONFIG_CONVOLUTION_FILTER 0 ++#define CONFIG_CONVOLUTION_OPENCL_FILTER 0 ++#define CONFIG_CONVOLVE_FILTER 0 ++#define CONFIG_COPY_FILTER 0 ++#define CONFIG_COREIMAGE_FILTER 0 ++#define CONFIG_COVER_RECT_FILTER 0 ++#define CONFIG_CROP_FILTER 0 ++#define CONFIG_CROPDETECT_FILTER 0 ++#define CONFIG_CUE_FILTER 0 ++#define CONFIG_CURVES_FILTER 0 ++#define CONFIG_DATASCOPE_FILTER 0 ++#define CONFIG_DBLUR_FILTER 0 ++#define CONFIG_DCTDNOIZ_FILTER 0 ++#define CONFIG_DEBAND_FILTER 0 ++#define CONFIG_DEBLOCK_FILTER 0 ++#define CONFIG_DECIMATE_FILTER 0 ++#define CONFIG_DECONVOLVE_FILTER 0 ++#define CONFIG_DEDOT_FILTER 0 ++#define CONFIG_DEFLATE_FILTER 0 ++#define CONFIG_DEFLICKER_FILTER 0 ++#define CONFIG_DEINTERLACE_QSV_FILTER 0 ++#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 ++#define CONFIG_DEJUDDER_FILTER 0 ++#define CONFIG_DELOGO_FILTER 0 ++#define CONFIG_DENOISE_VAAPI_FILTER 0 ++#define CONFIG_DERAIN_FILTER 0 ++#define CONFIG_DESHAKE_FILTER 0 ++#define CONFIG_DESHAKE_OPENCL_FILTER 0 ++#define CONFIG_DESPILL_FILTER 0 ++#define CONFIG_DETELECINE_FILTER 0 ++#define CONFIG_DILATION_FILTER 0 ++#define CONFIG_DILATION_OPENCL_FILTER 0 ++#define CONFIG_DISPLACE_FILTER 0 ++#define CONFIG_DNN_CLASSIFY_FILTER 0 ++#define CONFIG_DNN_DETECT_FILTER 0 ++#define CONFIG_DNN_PROCESSING_FILTER 0 ++#define CONFIG_DOUBLEWEAVE_FILTER 0 ++#define CONFIG_DRAWBOX_FILTER 0 ++#define CONFIG_DRAWGRAPH_FILTER 0 ++#define CONFIG_DRAWGRID_FILTER 0 ++#define CONFIG_DRAWTEXT_FILTER 0 ++#define CONFIG_EDGEDETECT_FILTER 0 ++#define CONFIG_ELBG_FILTER 0 ++#define CONFIG_ENTROPY_FILTER 0 ++#define CONFIG_EPX_FILTER 0 ++#define CONFIG_EQ_FILTER 0 ++#define CONFIG_EROSION_FILTER 0 ++#define CONFIG_EROSION_OPENCL_FILTER 0 ++#define CONFIG_ESTDIF_FILTER 0 ++#define CONFIG_EXPOSURE_FILTER 0 ++#define CONFIG_EXTRACTPLANES_FILTER 0 ++#define CONFIG_FADE_FILTER 0 ++#define CONFIG_FEEDBACK_FILTER 0 ++#define CONFIG_FFTDNOIZ_FILTER 0 ++#define CONFIG_FFTFILT_FILTER 0 ++#define CONFIG_FIELD_FILTER 0 ++#define CONFIG_FIELDHINT_FILTER 0 ++#define CONFIG_FIELDMATCH_FILTER 0 ++#define CONFIG_FIELDORDER_FILTER 0 ++#define CONFIG_FILLBORDERS_FILTER 0 ++#define CONFIG_FIND_RECT_FILTER 0 ++#define CONFIG_FLIP_VULKAN_FILTER 0 ++#define CONFIG_FLOODFILL_FILTER 0 ++#define CONFIG_FORMAT_FILTER 0 ++#define CONFIG_FPS_FILTER 0 ++#define CONFIG_FRAMEPACK_FILTER 0 ++#define CONFIG_FRAMERATE_FILTER 0 ++#define CONFIG_FRAMESTEP_FILTER 0 ++#define CONFIG_FREEZEDETECT_FILTER 0 ++#define CONFIG_FREEZEFRAMES_FILTER 0 ++#define CONFIG_FREI0R_FILTER 0 ++#define CONFIG_FSPP_FILTER 0 ++#define CONFIG_GBLUR_FILTER 0 ++#define CONFIG_GBLUR_VULKAN_FILTER 0 ++#define CONFIG_GEQ_FILTER 0 ++#define CONFIG_GRADFUN_FILTER 0 ++#define CONFIG_GRAPHMONITOR_FILTER 0 ++#define CONFIG_GRAYWORLD_FILTER 0 ++#define CONFIG_GREYEDGE_FILTER 0 ++#define CONFIG_GUIDED_FILTER 0 ++#define CONFIG_HALDCLUT_FILTER 0 ++#define CONFIG_HFLIP_FILTER 0 ++#define CONFIG_HFLIP_VULKAN_FILTER 0 ++#define CONFIG_HISTEQ_FILTER 0 ++#define CONFIG_HISTOGRAM_FILTER 0 ++#define CONFIG_HQDN3D_FILTER 0 ++#define CONFIG_HQX_FILTER 0 ++#define CONFIG_HSTACK_FILTER 0 ++#define CONFIG_HSVHOLD_FILTER 0 ++#define CONFIG_HSVKEY_FILTER 0 ++#define CONFIG_HUE_FILTER 0 ++#define CONFIG_HUESATURATION_FILTER 0 ++#define CONFIG_HWDOWNLOAD_FILTER 0 ++#define CONFIG_HWMAP_FILTER 0 ++#define CONFIG_HWUPLOAD_FILTER 0 ++#define CONFIG_HWUPLOAD_CUDA_FILTER 0 ++#define CONFIG_HYSTERESIS_FILTER 0 ++#define CONFIG_ICCDETECT_FILTER 0 ++#define CONFIG_ICCGEN_FILTER 0 ++#define CONFIG_IDENTITY_FILTER 0 ++#define CONFIG_IDET_FILTER 0 ++#define CONFIG_IL_FILTER 0 ++#define CONFIG_INFLATE_FILTER 0 ++#define CONFIG_INTERLACE_FILTER 0 ++#define CONFIG_INTERLEAVE_FILTER 0 ++#define CONFIG_KERNDEINT_FILTER 0 ++#define CONFIG_KIRSCH_FILTER 0 ++#define CONFIG_LAGFUN_FILTER 0 ++#define CONFIG_LATENCY_FILTER 0 ++#define CONFIG_LENSCORRECTION_FILTER 0 ++#define CONFIG_LENSFUN_FILTER 0 ++#define CONFIG_LIBPLACEBO_FILTER 0 ++#define CONFIG_LIBVMAF_FILTER 0 ++#define CONFIG_LIMITDIFF_FILTER 0 ++#define CONFIG_LIMITER_FILTER 0 ++#define CONFIG_LOOP_FILTER 0 ++#define CONFIG_LUMAKEY_FILTER 0 ++#define CONFIG_LUT_FILTER 0 ++#define CONFIG_LUT1D_FILTER 0 ++#define CONFIG_LUT2_FILTER 0 ++#define CONFIG_LUT3D_FILTER 0 ++#define CONFIG_LUTRGB_FILTER 0 ++#define CONFIG_LUTYUV_FILTER 0 ++#define CONFIG_MASKEDCLAMP_FILTER 0 ++#define CONFIG_MASKEDMAX_FILTER 0 ++#define CONFIG_MASKEDMERGE_FILTER 0 ++#define CONFIG_MASKEDMIN_FILTER 0 ++#define CONFIG_MASKEDTHRESHOLD_FILTER 0 ++#define CONFIG_MASKFUN_FILTER 0 ++#define CONFIG_MCDEINT_FILTER 0 ++#define CONFIG_MEDIAN_FILTER 0 ++#define CONFIG_MERGEPLANES_FILTER 0 ++#define CONFIG_MESTIMATE_FILTER 0 ++#define CONFIG_METADATA_FILTER 0 ++#define CONFIG_MIDEQUALIZER_FILTER 0 ++#define CONFIG_MINTERPOLATE_FILTER 0 ++#define CONFIG_MIX_FILTER 0 ++#define CONFIG_MONOCHROME_FILTER 0 ++#define CONFIG_MORPHO_FILTER 0 ++#define CONFIG_MPDECIMATE_FILTER 0 ++#define CONFIG_MSAD_FILTER 0 ++#define CONFIG_MULTIPLY_FILTER 0 ++#define CONFIG_NEGATE_FILTER 0 ++#define CONFIG_NLMEANS_FILTER 0 ++#define CONFIG_NLMEANS_OPENCL_FILTER 0 ++#define CONFIG_NNEDI_FILTER 0 ++#define CONFIG_NOFORMAT_FILTER 0 ++#define CONFIG_NOISE_FILTER 0 ++#define CONFIG_NORMALIZE_FILTER 0 ++#define CONFIG_NULL_FILTER 0 ++#define CONFIG_OCR_FILTER 0 ++#define CONFIG_OCV_FILTER 0 ++#define CONFIG_OSCILLOSCOPE_FILTER 0 ++#define CONFIG_OVERLAY_FILTER 0 ++#define CONFIG_OVERLAY_OPENCL_FILTER 0 ++#define CONFIG_OVERLAY_QSV_FILTER 0 ++#define CONFIG_OVERLAY_VAAPI_FILTER 0 ++#define CONFIG_OVERLAY_VULKAN_FILTER 0 ++#define CONFIG_OVERLAY_CUDA_FILTER 0 ++#define CONFIG_OWDENOISE_FILTER 0 ++#define CONFIG_PAD_FILTER 0 ++#define CONFIG_PAD_OPENCL_FILTER 0 ++#define CONFIG_PALETTEGEN_FILTER 0 ++#define CONFIG_PALETTEUSE_FILTER 0 ++#define CONFIG_PERMS_FILTER 0 ++#define CONFIG_PERSPECTIVE_FILTER 0 ++#define CONFIG_PHASE_FILTER 0 ++#define CONFIG_PHOTOSENSITIVITY_FILTER 0 ++#define CONFIG_PIXDESCTEST_FILTER 0 ++#define CONFIG_PIXELIZE_FILTER 0 ++#define CONFIG_PIXSCOPE_FILTER 0 ++#define CONFIG_PP_FILTER 0 ++#define CONFIG_PP7_FILTER 0 ++#define CONFIG_PREMULTIPLY_FILTER 0 ++#define CONFIG_PREWITT_FILTER 0 ++#define CONFIG_PREWITT_OPENCL_FILTER 0 ++#define CONFIG_PROCAMP_VAAPI_FILTER 0 ++#define CONFIG_PROGRAM_OPENCL_FILTER 0 ++#define CONFIG_PSEUDOCOLOR_FILTER 0 ++#define CONFIG_PSNR_FILTER 0 ++#define CONFIG_PULLUP_FILTER 0 ++#define CONFIG_QP_FILTER 0 ++#define CONFIG_RANDOM_FILTER 0 ++#define CONFIG_READEIA608_FILTER 0 ++#define CONFIG_READVITC_FILTER 0 ++#define CONFIG_REALTIME_FILTER 0 ++#define CONFIG_REMAP_FILTER 0 ++#define CONFIG_REMOVEGRAIN_FILTER 0 ++#define CONFIG_REMOVELOGO_FILTER 0 ++#define CONFIG_REPEATFIELDS_FILTER 0 ++#define CONFIG_REVERSE_FILTER 0 ++#define CONFIG_RGBASHIFT_FILTER 0 ++#define CONFIG_ROBERTS_FILTER 0 ++#define CONFIG_ROBERTS_OPENCL_FILTER 0 ++#define CONFIG_ROTATE_FILTER 0 ++#define CONFIG_SAB_FILTER 0 ++#define CONFIG_SCALE_FILTER 0 ++#define CONFIG_SCALE_CUDA_FILTER 0 ++#define CONFIG_SCALE_NPP_FILTER 0 ++#define CONFIG_SCALE_QSV_FILTER 0 ++#define CONFIG_SCALE_VAAPI_FILTER 0 ++#define CONFIG_SCALE_VULKAN_FILTER 0 ++#define CONFIG_SCALE2REF_FILTER 0 ++#define CONFIG_SCALE2REF_NPP_FILTER 0 ++#define CONFIG_SCDET_FILTER 0 ++#define CONFIG_SCHARR_FILTER 0 ++#define CONFIG_SCROLL_FILTER 0 ++#define CONFIG_SEGMENT_FILTER 0 ++#define CONFIG_SELECT_FILTER 0 ++#define CONFIG_SELECTIVECOLOR_FILTER 0 ++#define CONFIG_SENDCMD_FILTER 0 ++#define CONFIG_SEPARATEFIELDS_FILTER 0 ++#define CONFIG_SETDAR_FILTER 0 ++#define CONFIG_SETFIELD_FILTER 0 ++#define CONFIG_SETPARAMS_FILTER 0 ++#define CONFIG_SETPTS_FILTER 0 ++#define CONFIG_SETRANGE_FILTER 0 ++#define CONFIG_SETSAR_FILTER 0 ++#define CONFIG_SETTB_FILTER 0 ++#define CONFIG_SHARPEN_NPP_FILTER 0 ++#define CONFIG_SHARPNESS_VAAPI_FILTER 0 ++#define CONFIG_SHEAR_FILTER 0 ++#define CONFIG_SHOWINFO_FILTER 0 ++#define CONFIG_SHOWPALETTE_FILTER 0 ++#define CONFIG_SHUFFLEFRAMES_FILTER 0 ++#define CONFIG_SHUFFLEPIXELS_FILTER 0 ++#define CONFIG_SHUFFLEPLANES_FILTER 0 ++#define CONFIG_SIDEDATA_FILTER 0 ++#define CONFIG_SIGNALSTATS_FILTER 0 ++#define CONFIG_SIGNATURE_FILTER 0 ++#define CONFIG_SITI_FILTER 0 ++#define CONFIG_SMARTBLUR_FILTER 0 ++#define CONFIG_SOBEL_FILTER 0 ++#define CONFIG_SOBEL_OPENCL_FILTER 0 ++#define CONFIG_SPLIT_FILTER 0 ++#define CONFIG_SPP_FILTER 0 ++#define CONFIG_SR_FILTER 0 ++#define CONFIG_SSIM_FILTER 0 ++#define CONFIG_STEREO3D_FILTER 0 ++#define CONFIG_STREAMSELECT_FILTER 0 ++#define CONFIG_SUBTITLES_FILTER 0 ++#define CONFIG_SUPER2XSAI_FILTER 0 ++#define CONFIG_SWAPRECT_FILTER 0 ++#define CONFIG_SWAPUV_FILTER 0 ++#define CONFIG_TBLEND_FILTER 0 ++#define CONFIG_TELECINE_FILTER 0 ++#define CONFIG_THISTOGRAM_FILTER 0 ++#define CONFIG_THRESHOLD_FILTER 0 ++#define CONFIG_THUMBNAIL_FILTER 0 ++#define CONFIG_THUMBNAIL_CUDA_FILTER 0 ++#define CONFIG_TILE_FILTER 0 ++#define CONFIG_TINTERLACE_FILTER 0 ++#define CONFIG_TLUT2_FILTER 0 ++#define CONFIG_TMEDIAN_FILTER 0 ++#define CONFIG_TMIDEQUALIZER_FILTER 0 ++#define CONFIG_TMIX_FILTER 0 ++#define CONFIG_TONEMAP_FILTER 0 ++#define CONFIG_TONEMAP_OPENCL_FILTER 0 ++#define CONFIG_TONEMAP_VAAPI_FILTER 0 ++#define CONFIG_TPAD_FILTER 0 ++#define CONFIG_TRANSPOSE_FILTER 0 ++#define CONFIG_TRANSPOSE_NPP_FILTER 0 ++#define CONFIG_TRANSPOSE_OPENCL_FILTER 0 ++#define CONFIG_TRANSPOSE_VAAPI_FILTER 0 ++#define CONFIG_TRANSPOSE_VULKAN_FILTER 0 ++#define CONFIG_TRIM_FILTER 0 ++#define CONFIG_UNPREMULTIPLY_FILTER 0 ++#define CONFIG_UNSHARP_FILTER 0 ++#define CONFIG_UNSHARP_OPENCL_FILTER 0 ++#define CONFIG_UNTILE_FILTER 0 ++#define CONFIG_USPP_FILTER 0 ++#define CONFIG_V360_FILTER 0 ++#define CONFIG_VAGUEDENOISER_FILTER 0 ++#define CONFIG_VARBLUR_FILTER 0 ++#define CONFIG_VECTORSCOPE_FILTER 0 ++#define CONFIG_VFLIP_FILTER 0 ++#define CONFIG_VFLIP_VULKAN_FILTER 0 ++#define CONFIG_VFRDET_FILTER 0 ++#define CONFIG_VIBRANCE_FILTER 0 ++#define CONFIG_VIDSTABDETECT_FILTER 0 ++#define CONFIG_VIDSTABTRANSFORM_FILTER 0 ++#define CONFIG_VIF_FILTER 0 ++#define CONFIG_VIGNETTE_FILTER 0 ++#define CONFIG_VMAFMOTION_FILTER 0 ++#define CONFIG_VPP_QSV_FILTER 0 ++#define CONFIG_VSTACK_FILTER 0 ++#define CONFIG_W3FDIF_FILTER 0 ++#define CONFIG_WAVEFORM_FILTER 0 ++#define CONFIG_WEAVE_FILTER 0 ++#define CONFIG_XBR_FILTER 0 ++#define CONFIG_XCORRELATE_FILTER 0 ++#define CONFIG_XFADE_FILTER 0 ++#define CONFIG_XFADE_OPENCL_FILTER 0 ++#define CONFIG_XMEDIAN_FILTER 0 ++#define CONFIG_XSTACK_FILTER 0 ++#define CONFIG_YADIF_FILTER 0 ++#define CONFIG_YADIF_CUDA_FILTER 0 ++#define CONFIG_YADIF_VIDEOTOOLBOX_FILTER 0 ++#define CONFIG_YAEPBLUR_FILTER 0 ++#define CONFIG_ZMQ_FILTER 0 ++#define CONFIG_ZOOMPAN_FILTER 0 ++#define CONFIG_ZSCALE_FILTER 0 ++#define CONFIG_ALLRGB_FILTER 0 ++#define CONFIG_ALLYUV_FILTER 0 ++#define CONFIG_CELLAUTO_FILTER 0 ++#define CONFIG_COLOR_FILTER 0 ++#define CONFIG_COLORCHART_FILTER 0 ++#define CONFIG_COLORSPECTRUM_FILTER 0 ++#define CONFIG_COREIMAGESRC_FILTER 0 ++#define CONFIG_FREI0R_SRC_FILTER 0 ++#define CONFIG_GRADIENTS_FILTER 0 ++#define CONFIG_HALDCLUTSRC_FILTER 0 ++#define CONFIG_LIFE_FILTER 0 ++#define CONFIG_MANDELBROT_FILTER 0 ++#define CONFIG_MPTESTSRC_FILTER 0 ++#define CONFIG_NULLSRC_FILTER 0 ++#define CONFIG_OPENCLSRC_FILTER 0 ++#define CONFIG_PAL75BARS_FILTER 0 ++#define CONFIG_PAL100BARS_FILTER 0 ++#define CONFIG_RGBTESTSRC_FILTER 0 ++#define CONFIG_SIERPINSKI_FILTER 0 ++#define CONFIG_SMPTEBARS_FILTER 0 ++#define CONFIG_SMPTEHDBARS_FILTER 0 ++#define CONFIG_TESTSRC_FILTER 0 ++#define CONFIG_TESTSRC2_FILTER 0 ++#define CONFIG_YUVTESTSRC_FILTER 0 ++#define CONFIG_NULLSINK_FILTER 0 ++#define CONFIG_ABITSCOPE_FILTER 0 ++#define CONFIG_ADRAWGRAPH_FILTER 0 ++#define CONFIG_AGRAPHMONITOR_FILTER 0 ++#define CONFIG_AHISTOGRAM_FILTER 0 ++#define CONFIG_APHASEMETER_FILTER 0 ++#define CONFIG_AVECTORSCOPE_FILTER 0 ++#define CONFIG_CONCAT_FILTER 0 ++#define CONFIG_SHOWCQT_FILTER 0 ++#define CONFIG_SHOWFREQS_FILTER 0 ++#define CONFIG_SHOWSPATIAL_FILTER 0 ++#define CONFIG_SHOWSPECTRUM_FILTER 0 ++#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 ++#define CONFIG_SHOWVOLUME_FILTER 0 ++#define CONFIG_SHOWWAVES_FILTER 0 ++#define CONFIG_SHOWWAVESPIC_FILTER 0 ++#define CONFIG_SPECTRUMSYNTH_FILTER 0 ++#define CONFIG_AVSYNCTEST_FILTER 0 ++#define CONFIG_AMOVIE_FILTER 0 ++#define CONFIG_MOVIE_FILTER 0 ++#define CONFIG_AFIFO_FILTER 0 ++#define CONFIG_FIFO_FILTER 0 ++#define CONFIG_AA_DEMUXER 0 ++#define CONFIG_AAC_DEMUXER 0 ++#define CONFIG_AAX_DEMUXER 0 ++#define CONFIG_AC3_DEMUXER 0 ++#define CONFIG_ACE_DEMUXER 0 ++#define CONFIG_ACM_DEMUXER 0 ++#define CONFIG_ACT_DEMUXER 0 ++#define CONFIG_ADF_DEMUXER 0 ++#define CONFIG_ADP_DEMUXER 0 ++#define CONFIG_ADS_DEMUXER 0 ++#define CONFIG_ADX_DEMUXER 0 ++#define CONFIG_AEA_DEMUXER 0 ++#define CONFIG_AFC_DEMUXER 0 ++#define CONFIG_AIFF_DEMUXER 0 ++#define CONFIG_AIX_DEMUXER 0 ++#define CONFIG_ALP_DEMUXER 0 ++#define CONFIG_AMR_DEMUXER 0 ++#define CONFIG_AMRNB_DEMUXER 0 ++#define CONFIG_AMRWB_DEMUXER 0 ++#define CONFIG_ANM_DEMUXER 0 ++#define CONFIG_APC_DEMUXER 0 ++#define CONFIG_APE_DEMUXER 0 ++#define CONFIG_APM_DEMUXER 0 ++#define CONFIG_APNG_DEMUXER 0 ++#define CONFIG_APTX_DEMUXER 0 ++#define CONFIG_APTX_HD_DEMUXER 0 ++#define CONFIG_AQTITLE_DEMUXER 0 ++#define CONFIG_ARGO_ASF_DEMUXER 0 ++#define CONFIG_ARGO_BRP_DEMUXER 0 ++#define CONFIG_ARGO_CVG_DEMUXER 0 ++#define CONFIG_ASF_DEMUXER 0 ++#define CONFIG_ASF_O_DEMUXER 0 ++#define CONFIG_ASS_DEMUXER 0 ++#define CONFIG_AST_DEMUXER 0 ++#define CONFIG_AU_DEMUXER 0 ++#define CONFIG_AV1_DEMUXER 0 ++#define CONFIG_AVI_DEMUXER 0 ++#define CONFIG_AVISYNTH_DEMUXER 0 ++#define CONFIG_AVR_DEMUXER 0 ++#define CONFIG_AVS_DEMUXER 0 ++#define CONFIG_AVS2_DEMUXER 0 ++#define CONFIG_AVS3_DEMUXER 0 ++#define CONFIG_BETHSOFTVID_DEMUXER 0 ++#define CONFIG_BFI_DEMUXER 0 ++#define CONFIG_BINTEXT_DEMUXER 0 ++#define CONFIG_BINK_DEMUXER 0 ++#define CONFIG_BINKA_DEMUXER 0 ++#define CONFIG_BIT_DEMUXER 0 ++#define CONFIG_BITPACKED_DEMUXER 0 ++#define CONFIG_BMV_DEMUXER 0 ++#define CONFIG_BFSTM_DEMUXER 0 ++#define CONFIG_BRSTM_DEMUXER 0 ++#define CONFIG_BOA_DEMUXER 0 ++#define CONFIG_C93_DEMUXER 0 ++#define CONFIG_CAF_DEMUXER 0 ++#define CONFIG_CAVSVIDEO_DEMUXER 0 ++#define CONFIG_CDG_DEMUXER 0 ++#define CONFIG_CDXL_DEMUXER 0 ++#define CONFIG_CINE_DEMUXER 0 ++#define CONFIG_CODEC2_DEMUXER 0 ++#define CONFIG_CODEC2RAW_DEMUXER 0 ++#define CONFIG_CONCAT_DEMUXER 0 ++#define CONFIG_DASH_DEMUXER 0 ++#define CONFIG_DATA_DEMUXER 0 ++#define CONFIG_DAUD_DEMUXER 0 ++#define CONFIG_DCSTR_DEMUXER 0 ++#define CONFIG_DERF_DEMUXER 0 ++#define CONFIG_DFA_DEMUXER 0 ++#define CONFIG_DFPWM_DEMUXER 0 ++#define CONFIG_DHAV_DEMUXER 0 ++#define CONFIG_DIRAC_DEMUXER 0 ++#define CONFIG_DNXHD_DEMUXER 0 ++#define CONFIG_DSF_DEMUXER 0 ++#define CONFIG_DSICIN_DEMUXER 0 ++#define CONFIG_DSS_DEMUXER 0 ++#define CONFIG_DTS_DEMUXER 0 ++#define CONFIG_DTSHD_DEMUXER 0 ++#define CONFIG_DV_DEMUXER 0 ++#define CONFIG_DVBSUB_DEMUXER 0 ++#define CONFIG_DVBTXT_DEMUXER 0 ++#define CONFIG_DXA_DEMUXER 0 ++#define CONFIG_EA_DEMUXER 0 ++#define CONFIG_EA_CDATA_DEMUXER 0 ++#define CONFIG_EAC3_DEMUXER 0 ++#define CONFIG_EPAF_DEMUXER 0 ++#define CONFIG_FFMETADATA_DEMUXER 0 ++#define CONFIG_FILMSTRIP_DEMUXER 0 ++#define CONFIG_FITS_DEMUXER 0 ++#define CONFIG_FLAC_DEMUXER 0 ++#define CONFIG_FLIC_DEMUXER 0 ++#define CONFIG_FLV_DEMUXER 0 ++#define CONFIG_LIVE_FLV_DEMUXER 0 ++#define CONFIG_FOURXM_DEMUXER 0 ++#define CONFIG_FRM_DEMUXER 0 ++#define CONFIG_FSB_DEMUXER 0 ++#define CONFIG_FWSE_DEMUXER 0 ++#define CONFIG_G722_DEMUXER 0 ++#define CONFIG_G723_1_DEMUXER 0 ++#define CONFIG_G726_DEMUXER 0 ++#define CONFIG_G726LE_DEMUXER 0 ++#define CONFIG_G729_DEMUXER 0 ++#define CONFIG_GDV_DEMUXER 0 ++#define CONFIG_GENH_DEMUXER 0 ++#define CONFIG_GIF_DEMUXER 0 ++#define CONFIG_GSM_DEMUXER 0 ++#define CONFIG_GXF_DEMUXER 0 ++#define CONFIG_H261_DEMUXER 0 ++#define CONFIG_H263_DEMUXER 0 ++#define CONFIG_H264_DEMUXER 0 ++#define CONFIG_HCA_DEMUXER 0 ++#define CONFIG_HCOM_DEMUXER 0 ++#define CONFIG_HEVC_DEMUXER 0 ++#define CONFIG_HLS_DEMUXER 0 ++#define CONFIG_HNM_DEMUXER 0 ++#define CONFIG_ICO_DEMUXER 0 ++#define CONFIG_IDCIN_DEMUXER 0 ++#define CONFIG_IDF_DEMUXER 0 ++#define CONFIG_IFF_DEMUXER 0 ++#define CONFIG_IFV_DEMUXER 0 ++#define CONFIG_ILBC_DEMUXER 0 ++#define CONFIG_IMAGE2_DEMUXER 0 ++#define CONFIG_IMAGE2PIPE_DEMUXER 0 ++#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 ++#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 ++#define CONFIG_IMF_DEMUXER 0 ++#define CONFIG_INGENIENT_DEMUXER 0 ++#define CONFIG_IPMOVIE_DEMUXER 0 ++#define CONFIG_IPU_DEMUXER 0 ++#define CONFIG_IRCAM_DEMUXER 0 ++#define CONFIG_ISS_DEMUXER 0 ++#define CONFIG_IV8_DEMUXER 0 ++#define CONFIG_IVF_DEMUXER 0 ++#define CONFIG_IVR_DEMUXER 0 ++#define CONFIG_JACOSUB_DEMUXER 0 ++#define CONFIG_JV_DEMUXER 0 ++#define CONFIG_KUX_DEMUXER 0 ++#define CONFIG_KVAG_DEMUXER 0 ++#define CONFIG_LMLM4_DEMUXER 0 ++#define CONFIG_LOAS_DEMUXER 0 ++#define CONFIG_LUODAT_DEMUXER 0 ++#define CONFIG_LRC_DEMUXER 0 ++#define CONFIG_LVF_DEMUXER 0 ++#define CONFIG_LXF_DEMUXER 0 ++#define CONFIG_M4V_DEMUXER 0 ++#define CONFIG_MCA_DEMUXER 0 ++#define CONFIG_MCC_DEMUXER 0 ++#define CONFIG_MATROSKA_DEMUXER 0 ++#define CONFIG_MGSTS_DEMUXER 0 ++#define CONFIG_MICRODVD_DEMUXER 0 ++#define CONFIG_MJPEG_DEMUXER 0 ++#define CONFIG_MJPEG_2000_DEMUXER 0 ++#define CONFIG_MLP_DEMUXER 0 ++#define CONFIG_MLV_DEMUXER 0 ++#define CONFIG_MM_DEMUXER 0 ++#define CONFIG_MMF_DEMUXER 0 ++#define CONFIG_MODS_DEMUXER 0 ++#define CONFIG_MOFLEX_DEMUXER 0 ++#define CONFIG_MOV_DEMUXER 0 ++#define CONFIG_MP3_DEMUXER 0 ++#define CONFIG_MPC_DEMUXER 0 ++#define CONFIG_MPC8_DEMUXER 0 ++#define CONFIG_MPEGPS_DEMUXER 0 ++#define CONFIG_MPEGTS_DEMUXER 0 ++#define CONFIG_MPEGTSRAW_DEMUXER 0 ++#define CONFIG_MPEGVIDEO_DEMUXER 0 ++#define CONFIG_MPJPEG_DEMUXER 0 ++#define CONFIG_MPL2_DEMUXER 0 ++#define CONFIG_MPSUB_DEMUXER 0 ++#define CONFIG_MSF_DEMUXER 0 ++#define CONFIG_MSNWC_TCP_DEMUXER 0 ++#define CONFIG_MSP_DEMUXER 0 ++#define CONFIG_MTAF_DEMUXER 0 ++#define CONFIG_MTV_DEMUXER 0 ++#define CONFIG_MUSX_DEMUXER 0 ++#define CONFIG_MV_DEMUXER 0 ++#define CONFIG_MVI_DEMUXER 0 ++#define CONFIG_MXF_DEMUXER 0 ++#define CONFIG_MXG_DEMUXER 0 ++#define CONFIG_NC_DEMUXER 0 ++#define CONFIG_NISTSPHERE_DEMUXER 0 ++#define CONFIG_NSP_DEMUXER 0 ++#define CONFIG_NSV_DEMUXER 0 ++#define CONFIG_NUT_DEMUXER 0 ++#define CONFIG_NUV_DEMUXER 0 ++#define CONFIG_OBU_DEMUXER 0 ++#define CONFIG_OGG_DEMUXER 0 ++#define CONFIG_OMA_DEMUXER 0 ++#define CONFIG_PAF_DEMUXER 0 ++#define CONFIG_PCM_ALAW_DEMUXER 0 ++#define CONFIG_PCM_MULAW_DEMUXER 0 ++#define CONFIG_PCM_VIDC_DEMUXER 0 ++#define CONFIG_PCM_F64BE_DEMUXER 0 ++#define CONFIG_PCM_F64LE_DEMUXER 0 ++#define CONFIG_PCM_F32BE_DEMUXER 0 ++#define CONFIG_PCM_F32LE_DEMUXER 0 ++#define CONFIG_PCM_S32BE_DEMUXER 0 ++#define CONFIG_PCM_S32LE_DEMUXER 0 ++#define CONFIG_PCM_S24BE_DEMUXER 0 ++#define CONFIG_PCM_S24LE_DEMUXER 0 ++#define CONFIG_PCM_S16BE_DEMUXER 0 ++#define CONFIG_PCM_S16LE_DEMUXER 0 ++#define CONFIG_PCM_S8_DEMUXER 0 ++#define CONFIG_PCM_U32BE_DEMUXER 0 ++#define CONFIG_PCM_U32LE_DEMUXER 0 ++#define CONFIG_PCM_U24BE_DEMUXER 0 ++#define CONFIG_PCM_U24LE_DEMUXER 0 ++#define CONFIG_PCM_U16BE_DEMUXER 0 ++#define CONFIG_PCM_U16LE_DEMUXER 0 ++#define CONFIG_PCM_U8_DEMUXER 0 ++#define CONFIG_PJS_DEMUXER 0 ++#define CONFIG_PMP_DEMUXER 0 ++#define CONFIG_PP_BNK_DEMUXER 0 ++#define CONFIG_PVA_DEMUXER 0 ++#define CONFIG_PVF_DEMUXER 0 ++#define CONFIG_QCP_DEMUXER 0 ++#define CONFIG_R3D_DEMUXER 0 ++#define CONFIG_RAWVIDEO_DEMUXER 0 ++#define CONFIG_REALTEXT_DEMUXER 0 ++#define CONFIG_REDSPARK_DEMUXER 0 ++#define CONFIG_RL2_DEMUXER 0 ++#define CONFIG_RM_DEMUXER 0 ++#define CONFIG_ROQ_DEMUXER 0 ++#define CONFIG_RPL_DEMUXER 0 ++#define CONFIG_RSD_DEMUXER 0 ++#define CONFIG_RSO_DEMUXER 0 ++#define CONFIG_RTP_DEMUXER 0 ++#define CONFIG_RTSP_DEMUXER 0 ++#define CONFIG_S337M_DEMUXER 0 ++#define CONFIG_SAMI_DEMUXER 0 ++#define CONFIG_SAP_DEMUXER 0 ++#define CONFIG_SBC_DEMUXER 0 ++#define CONFIG_SBG_DEMUXER 0 ++#define CONFIG_SCC_DEMUXER 0 ++#define CONFIG_SCD_DEMUXER 0 ++#define CONFIG_SDP_DEMUXER 0 ++#define CONFIG_SDR2_DEMUXER 0 ++#define CONFIG_SDS_DEMUXER 0 ++#define CONFIG_SDX_DEMUXER 0 ++#define CONFIG_SEGAFILM_DEMUXER 0 ++#define CONFIG_SER_DEMUXER 0 ++#define CONFIG_SGA_DEMUXER 0 ++#define CONFIG_SHORTEN_DEMUXER 0 ++#define CONFIG_SIFF_DEMUXER 0 ++#define CONFIG_SIMBIOSIS_IMX_DEMUXER 0 ++#define CONFIG_SLN_DEMUXER 0 ++#define CONFIG_SMACKER_DEMUXER 0 ++#define CONFIG_SMJPEG_DEMUXER 0 ++#define CONFIG_SMUSH_DEMUXER 0 ++#define CONFIG_SOL_DEMUXER 0 ++#define CONFIG_SOX_DEMUXER 0 ++#define CONFIG_SPDIF_DEMUXER 0 ++#define CONFIG_SRT_DEMUXER 0 ++#define CONFIG_STR_DEMUXER 0 ++#define CONFIG_STL_DEMUXER 0 ++#define CONFIG_SUBVIEWER1_DEMUXER 0 ++#define CONFIG_SUBVIEWER_DEMUXER 0 ++#define CONFIG_SUP_DEMUXER 0 ++#define CONFIG_SVAG_DEMUXER 0 ++#define CONFIG_SVS_DEMUXER 0 ++#define CONFIG_SWF_DEMUXER 0 ++#define CONFIG_TAK_DEMUXER 0 ++#define CONFIG_TEDCAPTIONS_DEMUXER 0 ++#define CONFIG_THP_DEMUXER 0 ++#define CONFIG_THREEDOSTR_DEMUXER 0 ++#define CONFIG_TIERTEXSEQ_DEMUXER 0 ++#define CONFIG_TMV_DEMUXER 0 ++#define CONFIG_TRUEHD_DEMUXER 0 ++#define CONFIG_TTA_DEMUXER 0 ++#define CONFIG_TXD_DEMUXER 0 ++#define CONFIG_TTY_DEMUXER 0 ++#define CONFIG_TY_DEMUXER 0 ++#define CONFIG_V210_DEMUXER 0 ++#define CONFIG_V210X_DEMUXER 0 ++#define CONFIG_VAG_DEMUXER 0 ++#define CONFIG_VC1_DEMUXER 0 ++#define CONFIG_VC1T_DEMUXER 0 ++#define CONFIG_VIVIDAS_DEMUXER 0 ++#define CONFIG_VIVO_DEMUXER 0 ++#define CONFIG_VMD_DEMUXER 0 ++#define CONFIG_VOBSUB_DEMUXER 0 ++#define CONFIG_VOC_DEMUXER 0 ++#define CONFIG_VPK_DEMUXER 0 ++#define CONFIG_VPLAYER_DEMUXER 0 ++#define CONFIG_VQF_DEMUXER 0 ++#define CONFIG_W64_DEMUXER 0 ++#define CONFIG_WAV_DEMUXER 0 ++#define CONFIG_WC3_DEMUXER 0 ++#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 ++#define CONFIG_WEBVTT_DEMUXER 0 ++#define CONFIG_WSAUD_DEMUXER 0 ++#define CONFIG_WSD_DEMUXER 0 ++#define CONFIG_WSVQA_DEMUXER 0 ++#define CONFIG_WTV_DEMUXER 0 ++#define CONFIG_WVE_DEMUXER 0 ++#define CONFIG_WV_DEMUXER 0 ++#define CONFIG_XA_DEMUXER 0 ++#define CONFIG_XBIN_DEMUXER 0 ++#define CONFIG_XMV_DEMUXER 0 ++#define CONFIG_XVAG_DEMUXER 0 ++#define CONFIG_XWMA_DEMUXER 0 ++#define CONFIG_YOP_DEMUXER 0 ++#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 ++#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_CRI_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_GEM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_JPEGXL_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PGX_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PHOTOCD_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_QOI_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_VBN_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_XBM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 ++#define CONFIG_LIBGME_DEMUXER 0 ++#define CONFIG_LIBMODPLUG_DEMUXER 0 ++#define CONFIG_LIBOPENMPT_DEMUXER 0 ++#define CONFIG_VAPOURSYNTH_DEMUXER 0 ++#define CONFIG_A64_MUXER 0 ++#define CONFIG_AC3_MUXER 0 ++#define CONFIG_ADTS_MUXER 0 ++#define CONFIG_ADX_MUXER 0 ++#define CONFIG_AIFF_MUXER 0 ++#define CONFIG_ALP_MUXER 0 ++#define CONFIG_AMR_MUXER 0 ++#define CONFIG_AMV_MUXER 0 ++#define CONFIG_APM_MUXER 0 ++#define CONFIG_APNG_MUXER 0 ++#define CONFIG_APTX_MUXER 0 ++#define CONFIG_APTX_HD_MUXER 0 ++#define CONFIG_ARGO_ASF_MUXER 0 ++#define CONFIG_ARGO_CVG_MUXER 0 ++#define CONFIG_ASF_MUXER 0 ++#define CONFIG_ASS_MUXER 0 ++#define CONFIG_AST_MUXER 0 ++#define CONFIG_ASF_STREAM_MUXER 0 ++#define CONFIG_AU_MUXER 0 ++#define CONFIG_AVI_MUXER 0 ++#define CONFIG_AVIF_MUXER 0 ++#define CONFIG_AVM2_MUXER 0 ++#define CONFIG_AVS2_MUXER 0 ++#define CONFIG_AVS3_MUXER 0 ++#define CONFIG_BIT_MUXER 0 ++#define CONFIG_CAF_MUXER 0 ++#define CONFIG_CAVSVIDEO_MUXER 0 ++#define CONFIG_CODEC2_MUXER 0 ++#define CONFIG_CODEC2RAW_MUXER 0 ++#define CONFIG_CRC_MUXER 0 ++#define CONFIG_DASH_MUXER 0 ++#define CONFIG_DATA_MUXER 0 ++#define CONFIG_DAUD_MUXER 0 ++#define CONFIG_DFPWM_MUXER 0 ++#define CONFIG_DIRAC_MUXER 0 ++#define CONFIG_DNXHD_MUXER 0 ++#define CONFIG_DTS_MUXER 0 ++#define CONFIG_DV_MUXER 0 ++#define CONFIG_EAC3_MUXER 0 ++#define CONFIG_F4V_MUXER 0 ++#define CONFIG_FFMETADATA_MUXER 0 ++#define CONFIG_FIFO_MUXER 0 ++#define CONFIG_FIFO_TEST_MUXER 0 ++#define CONFIG_FILMSTRIP_MUXER 0 ++#define CONFIG_FITS_MUXER 0 ++#define CONFIG_FLAC_MUXER 0 ++#define CONFIG_FLV_MUXER 0 ++#define CONFIG_FRAMECRC_MUXER 0 ++#define CONFIG_FRAMEHASH_MUXER 0 ++#define CONFIG_FRAMEMD5_MUXER 0 ++#define CONFIG_G722_MUXER 0 ++#define CONFIG_G723_1_MUXER 0 ++#define CONFIG_G726_MUXER 0 ++#define CONFIG_G726LE_MUXER 0 ++#define CONFIG_GIF_MUXER 0 ++#define CONFIG_GSM_MUXER 0 ++#define CONFIG_GXF_MUXER 0 ++#define CONFIG_H261_MUXER 0 ++#define CONFIG_H263_MUXER 0 ++#define CONFIG_H264_MUXER 0 ++#define CONFIG_HASH_MUXER 0 ++#define CONFIG_HDS_MUXER 0 ++#define CONFIG_HEVC_MUXER 0 ++#define CONFIG_HLS_MUXER 0 ++#define CONFIG_ICO_MUXER 0 ++#define CONFIG_ILBC_MUXER 0 ++#define CONFIG_IMAGE2_MUXER 0 ++#define CONFIG_IMAGE2PIPE_MUXER 0 ++#define CONFIG_IPOD_MUXER 0 ++#define CONFIG_IRCAM_MUXER 0 ++#define CONFIG_ISMV_MUXER 0 ++#define CONFIG_IVF_MUXER 0 ++#define CONFIG_JACOSUB_MUXER 0 ++#define CONFIG_KVAG_MUXER 0 ++#define CONFIG_LATM_MUXER 0 ++#define CONFIG_LRC_MUXER 0 ++#define CONFIG_M4V_MUXER 0 ++#define CONFIG_MD5_MUXER 0 ++#define CONFIG_MATROSKA_MUXER 0 ++#define CONFIG_MATROSKA_AUDIO_MUXER 0 ++#define CONFIG_MICRODVD_MUXER 0 ++#define CONFIG_MJPEG_MUXER 0 ++#define CONFIG_MLP_MUXER 0 ++#define CONFIG_MMF_MUXER 0 ++#define CONFIG_MOV_MUXER 0 ++#define CONFIG_MP2_MUXER 0 ++#define CONFIG_MP3_MUXER 0 ++#define CONFIG_MP4_MUXER 0 ++#define CONFIG_MPEG1SYSTEM_MUXER 0 ++#define CONFIG_MPEG1VCD_MUXER 0 ++#define CONFIG_MPEG1VIDEO_MUXER 0 ++#define CONFIG_MPEG2DVD_MUXER 0 ++#define CONFIG_MPEG2SVCD_MUXER 0 ++#define CONFIG_MPEG2VIDEO_MUXER 0 ++#define CONFIG_MPEG2VOB_MUXER 0 ++#define CONFIG_MPEGTS_MUXER 0 ++#define CONFIG_MPJPEG_MUXER 0 ++#define CONFIG_MXF_MUXER 0 ++#define CONFIG_MXF_D10_MUXER 0 ++#define CONFIG_MXF_OPATOM_MUXER 0 ++#define CONFIG_NULL_MUXER 0 ++#define CONFIG_NUT_MUXER 0 ++#define CONFIG_OBU_MUXER 0 ++#define CONFIG_OGA_MUXER 0 ++#define CONFIG_OGG_MUXER 0 ++#define CONFIG_OGV_MUXER 0 ++#define CONFIG_OMA_MUXER 0 ++#define CONFIG_OPUS_MUXER 0 ++#define CONFIG_PCM_ALAW_MUXER 0 ++#define CONFIG_PCM_MULAW_MUXER 0 ++#define CONFIG_PCM_VIDC_MUXER 0 ++#define CONFIG_PCM_F64BE_MUXER 0 ++#define CONFIG_PCM_F64LE_MUXER 0 ++#define CONFIG_PCM_F32BE_MUXER 0 ++#define CONFIG_PCM_F32LE_MUXER 0 ++#define CONFIG_PCM_S32BE_MUXER 0 ++#define CONFIG_PCM_S32LE_MUXER 0 ++#define CONFIG_PCM_S24BE_MUXER 0 ++#define CONFIG_PCM_S24LE_MUXER 0 ++#define CONFIG_PCM_S16BE_MUXER 0 ++#define CONFIG_PCM_S16LE_MUXER 0 ++#define CONFIG_PCM_S8_MUXER 0 ++#define CONFIG_PCM_U32BE_MUXER 0 ++#define CONFIG_PCM_U32LE_MUXER 0 ++#define CONFIG_PCM_U24BE_MUXER 0 ++#define CONFIG_PCM_U24LE_MUXER 0 ++#define CONFIG_PCM_U16BE_MUXER 0 ++#define CONFIG_PCM_U16LE_MUXER 0 ++#define CONFIG_PCM_U8_MUXER 0 ++#define CONFIG_PSP_MUXER 0 ++#define CONFIG_RAWVIDEO_MUXER 0 ++#define CONFIG_RM_MUXER 0 ++#define CONFIG_ROQ_MUXER 0 ++#define CONFIG_RSO_MUXER 0 ++#define CONFIG_RTP_MUXER 0 ++#define CONFIG_RTP_MPEGTS_MUXER 0 ++#define CONFIG_RTSP_MUXER 0 ++#define CONFIG_SAP_MUXER 0 ++#define CONFIG_SBC_MUXER 0 ++#define CONFIG_SCC_MUXER 0 ++#define CONFIG_SEGAFILM_MUXER 0 ++#define CONFIG_SEGMENT_MUXER 0 ++#define CONFIG_STREAM_SEGMENT_MUXER 0 ++#define CONFIG_SMJPEG_MUXER 0 ++#define CONFIG_SMOOTHSTREAMING_MUXER 0 ++#define CONFIG_SOX_MUXER 0 ++#define CONFIG_SPX_MUXER 0 ++#define CONFIG_SPDIF_MUXER 0 ++#define CONFIG_SRT_MUXER 0 ++#define CONFIG_STREAMHASH_MUXER 0 ++#define CONFIG_SUP_MUXER 0 ++#define CONFIG_SWF_MUXER 0 ++#define CONFIG_TEE_MUXER 0 ++#define CONFIG_TG2_MUXER 0 ++#define CONFIG_TGP_MUXER 0 ++#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 ++#define CONFIG_TRUEHD_MUXER 0 ++#define CONFIG_TTA_MUXER 0 ++#define CONFIG_TTML_MUXER 0 ++#define CONFIG_UNCODEDFRAMECRC_MUXER 0 ++#define CONFIG_VC1_MUXER 0 ++#define CONFIG_VC1T_MUXER 0 ++#define CONFIG_VOC_MUXER 0 ++#define CONFIG_W64_MUXER 0 ++#define CONFIG_WAV_MUXER 0 ++#define CONFIG_WEBM_MUXER 0 ++#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 ++#define CONFIG_WEBM_CHUNK_MUXER 0 ++#define CONFIG_WEBP_MUXER 0 ++#define CONFIG_WEBVTT_MUXER 0 ++#define CONFIG_WSAUD_MUXER 0 ++#define CONFIG_WTV_MUXER 0 ++#define CONFIG_WV_MUXER 0 ++#define CONFIG_YUV4MPEGPIPE_MUXER 0 ++#define CONFIG_CHROMAPRINT_MUXER 0 ++#define CONFIG_ASYNC_PROTOCOL 0 ++#define CONFIG_BLURAY_PROTOCOL 0 ++#define CONFIG_CACHE_PROTOCOL 0 ++#define CONFIG_CONCAT_PROTOCOL 0 ++#define CONFIG_CONCATF_PROTOCOL 0 ++#define CONFIG_CRYPTO_PROTOCOL 0 ++#define CONFIG_DATA_PROTOCOL 0 ++#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 ++#define CONFIG_FFRTMPHTTP_PROTOCOL 0 ++#define CONFIG_FILE_PROTOCOL 0 ++#define CONFIG_FTP_PROTOCOL 0 ++#define CONFIG_GOPHER_PROTOCOL 0 ++#define CONFIG_GOPHERS_PROTOCOL 0 ++#define CONFIG_HLS_PROTOCOL 0 ++#define CONFIG_HTTP_PROTOCOL 0 ++#define CONFIG_HTTPPROXY_PROTOCOL 0 ++#define CONFIG_HTTPS_PROTOCOL 0 ++#define CONFIG_ICECAST_PROTOCOL 0 ++#define CONFIG_MMSH_PROTOCOL 0 ++#define CONFIG_MMST_PROTOCOL 0 ++#define CONFIG_MD5_PROTOCOL 0 ++#define CONFIG_PIPE_PROTOCOL 0 ++#define CONFIG_PROMPEG_PROTOCOL 0 ++#define CONFIG_RTMP_PROTOCOL 0 ++#define CONFIG_RTMPE_PROTOCOL 0 ++#define CONFIG_RTMPS_PROTOCOL 0 ++#define CONFIG_RTMPT_PROTOCOL 0 ++#define CONFIG_RTMPTE_PROTOCOL 0 ++#define CONFIG_RTMPTS_PROTOCOL 0 ++#define CONFIG_RTP_PROTOCOL 0 ++#define CONFIG_SCTP_PROTOCOL 0 ++#define CONFIG_SRTP_PROTOCOL 0 ++#define CONFIG_SUBFILE_PROTOCOL 0 ++#define CONFIG_TEE_PROTOCOL 0 ++#define CONFIG_TCP_PROTOCOL 0 ++#define CONFIG_TLS_PROTOCOL 0 ++#define CONFIG_UDP_PROTOCOL 0 ++#define CONFIG_UDPLITE_PROTOCOL 0 ++#define CONFIG_UNIX_PROTOCOL 0 ++#define CONFIG_LIBAMQP_PROTOCOL 0 ++#define CONFIG_LIBRIST_PROTOCOL 0 ++#define CONFIG_LIBRTMP_PROTOCOL 0 ++#define CONFIG_LIBRTMPE_PROTOCOL 0 ++#define CONFIG_LIBRTMPS_PROTOCOL 0 ++#define CONFIG_LIBRTMPT_PROTOCOL 0 ++#define CONFIG_LIBRTMPTE_PROTOCOL 0 ++#define CONFIG_LIBSRT_PROTOCOL 0 ++#define CONFIG_LIBSSH_PROTOCOL 0 ++#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 ++#define CONFIG_LIBZMQ_PROTOCOL 0 ++#define CONFIG_IPFS_PROTOCOL 0 ++#define CONFIG_IPNS_PROTOCOL 0 ++#endif /* FFMPEG_CONFIG_COMPONENTS_H */ +diff -Naur a/media/ffvpx/config_components_audio_video.h b/media/ffvpx/config_components_audio_video.h +--- a/media/ffvpx/config_components_audio_video.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_components_audio_video.h 2023-04-06 12:50:11.785664945 +0200 +@@ -0,0 +1,2091 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_COMPONENTS_H ++#define FFMPEG_CONFIG_COMPONENTS_H ++#define CONFIG_AAC_ADTSTOASC_BSF 0 ++#define CONFIG_AV1_FRAME_MERGE_BSF 0 ++#define CONFIG_AV1_FRAME_SPLIT_BSF 0 ++#define CONFIG_AV1_METADATA_BSF 0 ++#define CONFIG_CHOMP_BSF 0 ++#define CONFIG_DUMP_EXTRADATA_BSF 0 ++#define CONFIG_DCA_CORE_BSF 0 ++#define CONFIG_DV_ERROR_MARKER_BSF 0 ++#define CONFIG_EAC3_CORE_BSF 0 ++#define CONFIG_EXTRACT_EXTRADATA_BSF 0 ++#define CONFIG_FILTER_UNITS_BSF 0 ++#define CONFIG_H264_METADATA_BSF 0 ++#define CONFIG_H264_MP4TOANNEXB_BSF 0 ++#define CONFIG_H264_REDUNDANT_PPS_BSF 0 ++#define CONFIG_HAPQA_EXTRACT_BSF 0 ++#define CONFIG_HEVC_METADATA_BSF 0 ++#define CONFIG_HEVC_MP4TOANNEXB_BSF 0 ++#define CONFIG_IMX_DUMP_HEADER_BSF 0 ++#define CONFIG_MJPEG2JPEG_BSF 0 ++#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 ++#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 ++#define CONFIG_MPEG2_METADATA_BSF 0 ++#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 ++#define CONFIG_MOV2TEXTSUB_BSF 0 ++#define CONFIG_NOISE_BSF 0 ++#define CONFIG_NULL_BSF 0 ++#define CONFIG_OPUS_METADATA_BSF 0 ++#define CONFIG_PCM_RECHUNK_BSF 0 ++#define CONFIG_PGS_FRAME_MERGE_BSF 0 ++#define CONFIG_PRORES_METADATA_BSF 0 ++#define CONFIG_REMOVE_EXTRADATA_BSF 0 ++#define CONFIG_SETTS_BSF 0 ++#define CONFIG_TEXT2MOVSUB_BSF 0 ++#define CONFIG_TRACE_HEADERS_BSF 0 ++#define CONFIG_TRUEHD_CORE_BSF 0 ++#define CONFIG_VP9_METADATA_BSF 0 ++#define CONFIG_VP9_RAW_REORDER_BSF 0 ++#define CONFIG_VP9_SUPERFRAME_BSF 0 ++#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 ++#define CONFIG_AASC_DECODER 0 ++#define CONFIG_AIC_DECODER 0 ++#define CONFIG_ALIAS_PIX_DECODER 0 ++#define CONFIG_AGM_DECODER 0 ++#define CONFIG_AMV_DECODER 0 ++#define CONFIG_ANM_DECODER 0 ++#define CONFIG_ANSI_DECODER 0 ++#define CONFIG_APNG_DECODER 0 ++#define CONFIG_ARBC_DECODER 0 ++#define CONFIG_ARGO_DECODER 0 ++#define CONFIG_ASV1_DECODER 0 ++#define CONFIG_ASV2_DECODER 0 ++#define CONFIG_AURA_DECODER 0 ++#define CONFIG_AURA2_DECODER 0 ++#define CONFIG_AVRP_DECODER 0 ++#define CONFIG_AVRN_DECODER 0 ++#define CONFIG_AVS_DECODER 0 ++#define CONFIG_AVUI_DECODER 0 ++#define CONFIG_AYUV_DECODER 0 ++#define CONFIG_BETHSOFTVID_DECODER 0 ++#define CONFIG_BFI_DECODER 0 ++#define CONFIG_BINK_DECODER 0 ++#define CONFIG_BITPACKED_DECODER 0 ++#define CONFIG_BMP_DECODER 0 ++#define CONFIG_BMV_VIDEO_DECODER 0 ++#define CONFIG_BRENDER_PIX_DECODER 0 ++#define CONFIG_C93_DECODER 0 ++#define CONFIG_CAVS_DECODER 0 ++#define CONFIG_CDGRAPHICS_DECODER 0 ++#define CONFIG_CDTOONS_DECODER 0 ++#define CONFIG_CDXL_DECODER 0 ++#define CONFIG_CFHD_DECODER 0 ++#define CONFIG_CINEPAK_DECODER 0 ++#define CONFIG_CLEARVIDEO_DECODER 0 ++#define CONFIG_CLJR_DECODER 0 ++#define CONFIG_CLLC_DECODER 0 ++#define CONFIG_COMFORTNOISE_DECODER 0 ++#define CONFIG_CPIA_DECODER 0 ++#define CONFIG_CRI_DECODER 0 ++#define CONFIG_CSCD_DECODER 0 ++#define CONFIG_CYUV_DECODER 0 ++#define CONFIG_DDS_DECODER 0 ++#define CONFIG_DFA_DECODER 0 ++#define CONFIG_DIRAC_DECODER 0 ++#define CONFIG_DNXHD_DECODER 0 ++#define CONFIG_DPX_DECODER 0 ++#define CONFIG_DSICINVIDEO_DECODER 0 ++#define CONFIG_DVAUDIO_DECODER 0 ++#define CONFIG_DVVIDEO_DECODER 0 ++#define CONFIG_DXA_DECODER 0 ++#define CONFIG_DXTORY_DECODER 0 ++#define CONFIG_DXV_DECODER 0 ++#define CONFIG_EACMV_DECODER 0 ++#define CONFIG_EAMAD_DECODER 0 ++#define CONFIG_EATGQ_DECODER 0 ++#define CONFIG_EATGV_DECODER 0 ++#define CONFIG_EATQI_DECODER 0 ++#define CONFIG_EIGHTBPS_DECODER 0 ++#define CONFIG_EIGHTSVX_EXP_DECODER 0 ++#define CONFIG_EIGHTSVX_FIB_DECODER 0 ++#define CONFIG_ESCAPE124_DECODER 0 ++#define CONFIG_ESCAPE130_DECODER 0 ++#define CONFIG_EXR_DECODER 0 ++#define CONFIG_FFV1_DECODER 0 ++#define CONFIG_FFVHUFF_DECODER 0 ++#define CONFIG_FIC_DECODER 0 ++#define CONFIG_FITS_DECODER 0 ++#define CONFIG_FLASHSV_DECODER 0 ++#define CONFIG_FLASHSV2_DECODER 0 ++#define CONFIG_FLIC_DECODER 0 ++#define CONFIG_FLV_DECODER 0 ++#define CONFIG_FMVC_DECODER 0 ++#define CONFIG_FOURXM_DECODER 0 ++#define CONFIG_FRAPS_DECODER 0 ++#define CONFIG_FRWU_DECODER 0 ++#define CONFIG_G2M_DECODER 0 ++#define CONFIG_GDV_DECODER 0 ++#define CONFIG_GEM_DECODER 0 ++#define CONFIG_GIF_DECODER 0 ++#define CONFIG_H261_DECODER 0 ++#define CONFIG_H263_DECODER 0 ++#define CONFIG_H263I_DECODER 0 ++#define CONFIG_H263P_DECODER 0 ++#define CONFIG_H263_V4L2M2M_DECODER 0 ++#define CONFIG_H264_DECODER 0 ++#define CONFIG_H264_CRYSTALHD_DECODER 0 ++#define CONFIG_H264_V4L2M2M_DECODER 0 ++#define CONFIG_H264_MEDIACODEC_DECODER 0 ++#define CONFIG_H264_MMAL_DECODER 0 ++#define CONFIG_H264_QSV_DECODER 0 ++#define CONFIG_H264_RKMPP_DECODER 0 ++#define CONFIG_HAP_DECODER 0 ++#define CONFIG_HEVC_DECODER 0 ++#define CONFIG_HEVC_QSV_DECODER 0 ++#define CONFIG_HEVC_RKMPP_DECODER 0 ++#define CONFIG_HEVC_V4L2M2M_DECODER 0 ++#define CONFIG_HNM4_VIDEO_DECODER 0 ++#define CONFIG_HQ_HQA_DECODER 0 ++#define CONFIG_HQX_DECODER 0 ++#define CONFIG_HUFFYUV_DECODER 0 ++#define CONFIG_HYMT_DECODER 0 ++#define CONFIG_IDCIN_DECODER 0 ++#define CONFIG_IFF_ILBM_DECODER 0 ++#define CONFIG_IMM4_DECODER 0 ++#define CONFIG_IMM5_DECODER 0 ++#define CONFIG_INDEO2_DECODER 0 ++#define CONFIG_INDEO3_DECODER 0 ++#define CONFIG_INDEO4_DECODER 0 ++#define CONFIG_INDEO5_DECODER 0 ++#define CONFIG_INTERPLAY_VIDEO_DECODER 0 ++#define CONFIG_IPU_DECODER 0 ++#define CONFIG_JPEG2000_DECODER 0 ++#define CONFIG_JPEGLS_DECODER 0 ++#define CONFIG_JV_DECODER 0 ++#define CONFIG_KGV1_DECODER 0 ++#define CONFIG_KMVC_DECODER 0 ++#define CONFIG_LAGARITH_DECODER 0 ++#define CONFIG_LOCO_DECODER 0 ++#define CONFIG_LSCR_DECODER 0 ++#define CONFIG_M101_DECODER 0 ++#define CONFIG_MAGICYUV_DECODER 0 ++#define CONFIG_MDEC_DECODER 0 ++#define CONFIG_MIMIC_DECODER 0 ++#define CONFIG_MJPEG_DECODER 0 ++#define CONFIG_MJPEGB_DECODER 0 ++#define CONFIG_MMVIDEO_DECODER 0 ++#define CONFIG_MOBICLIP_DECODER 0 ++#define CONFIG_MOTIONPIXELS_DECODER 0 ++#define CONFIG_MPEG1VIDEO_DECODER 0 ++#define CONFIG_MPEG2VIDEO_DECODER 0 ++#define CONFIG_MPEG4_DECODER 0 ++#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 ++#define CONFIG_MPEG4_V4L2M2M_DECODER 0 ++#define CONFIG_MPEG4_MMAL_DECODER 0 ++#define CONFIG_MPEGVIDEO_DECODER 0 ++#define CONFIG_MPEG1_V4L2M2M_DECODER 0 ++#define CONFIG_MPEG2_MMAL_DECODER 0 ++#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 ++#define CONFIG_MPEG2_V4L2M2M_DECODER 0 ++#define CONFIG_MPEG2_QSV_DECODER 0 ++#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 ++#define CONFIG_MSA1_DECODER 0 ++#define CONFIG_MSCC_DECODER 0 ++#define CONFIG_MSMPEG4V1_DECODER 0 ++#define CONFIG_MSMPEG4V2_DECODER 0 ++#define CONFIG_MSMPEG4V3_DECODER 0 ++#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 ++#define CONFIG_MSP2_DECODER 0 ++#define CONFIG_MSRLE_DECODER 0 ++#define CONFIG_MSS1_DECODER 0 ++#define CONFIG_MSS2_DECODER 0 ++#define CONFIG_MSVIDEO1_DECODER 0 ++#define CONFIG_MSZH_DECODER 0 ++#define CONFIG_MTS2_DECODER 0 ++#define CONFIG_MV30_DECODER 0 ++#define CONFIG_MVC1_DECODER 0 ++#define CONFIG_MVC2_DECODER 0 ++#define CONFIG_MVDV_DECODER 0 ++#define CONFIG_MVHA_DECODER 0 ++#define CONFIG_MWSC_DECODER 0 ++#define CONFIG_MXPEG_DECODER 0 ++#define CONFIG_NOTCHLC_DECODER 0 ++#define CONFIG_NUV_DECODER 0 ++#define CONFIG_PAF_VIDEO_DECODER 0 ++#define CONFIG_PAM_DECODER 0 ++#define CONFIG_PBM_DECODER 0 ++#define CONFIG_PCX_DECODER 0 ++#define CONFIG_PFM_DECODER 0 ++#define CONFIG_PGM_DECODER 0 ++#define CONFIG_PGMYUV_DECODER 0 ++#define CONFIG_PGX_DECODER 0 ++#define CONFIG_PHOTOCD_DECODER 0 ++#define CONFIG_PICTOR_DECODER 0 ++#define CONFIG_PIXLET_DECODER 0 ++#define CONFIG_PNG_DECODER 0 ++#define CONFIG_PPM_DECODER 0 ++#define CONFIG_PRORES_DECODER 0 ++#define CONFIG_PROSUMER_DECODER 0 ++#define CONFIG_PSD_DECODER 0 ++#define CONFIG_PTX_DECODER 0 ++#define CONFIG_QDRAW_DECODER 0 ++#define CONFIG_QOI_DECODER 0 ++#define CONFIG_QPEG_DECODER 0 ++#define CONFIG_QTRLE_DECODER 0 ++#define CONFIG_R10K_DECODER 0 ++#define CONFIG_R210_DECODER 0 ++#define CONFIG_RASC_DECODER 0 ++#define CONFIG_RAWVIDEO_DECODER 0 ++#define CONFIG_RL2_DECODER 0 ++#define CONFIG_ROQ_DECODER 0 ++#define CONFIG_RPZA_DECODER 0 ++#define CONFIG_RSCC_DECODER 0 ++#define CONFIG_RV10_DECODER 0 ++#define CONFIG_RV20_DECODER 0 ++#define CONFIG_RV30_DECODER 0 ++#define CONFIG_RV40_DECODER 0 ++#define CONFIG_S302M_DECODER 0 ++#define CONFIG_SANM_DECODER 0 ++#define CONFIG_SCPR_DECODER 0 ++#define CONFIG_SCREENPRESSO_DECODER 0 ++#define CONFIG_SGA_DECODER 0 ++#define CONFIG_SGI_DECODER 0 ++#define CONFIG_SGIRLE_DECODER 0 ++#define CONFIG_SHEERVIDEO_DECODER 0 ++#define CONFIG_SIMBIOSIS_IMX_DECODER 0 ++#define CONFIG_SMACKER_DECODER 0 ++#define CONFIG_SMC_DECODER 0 ++#define CONFIG_SMVJPEG_DECODER 0 ++#define CONFIG_SNOW_DECODER 0 ++#define CONFIG_SP5X_DECODER 0 ++#define CONFIG_SPEEDHQ_DECODER 0 ++#define CONFIG_SPEEX_DECODER 0 ++#define CONFIG_SRGC_DECODER 0 ++#define CONFIG_SUNRAST_DECODER 0 ++#define CONFIG_SVQ1_DECODER 0 ++#define CONFIG_SVQ3_DECODER 0 ++#define CONFIG_TARGA_DECODER 0 ++#define CONFIG_TARGA_Y216_DECODER 0 ++#define CONFIG_TDSC_DECODER 0 ++#define CONFIG_THEORA_DECODER 0 ++#define CONFIG_THP_DECODER 0 ++#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 ++#define CONFIG_TIFF_DECODER 0 ++#define CONFIG_TMV_DECODER 0 ++#define CONFIG_TRUEMOTION1_DECODER 0 ++#define CONFIG_TRUEMOTION2_DECODER 0 ++#define CONFIG_TRUEMOTION2RT_DECODER 0 ++#define CONFIG_TSCC_DECODER 0 ++#define CONFIG_TSCC2_DECODER 0 ++#define CONFIG_TXD_DECODER 0 ++#define CONFIG_ULTI_DECODER 0 ++#define CONFIG_UTVIDEO_DECODER 0 ++#define CONFIG_V210_DECODER 0 ++#define CONFIG_V210X_DECODER 0 ++#define CONFIG_V308_DECODER 0 ++#define CONFIG_V408_DECODER 0 ++#define CONFIG_V410_DECODER 0 ++#define CONFIG_VB_DECODER 0 ++#define CONFIG_VBN_DECODER 0 ++#define CONFIG_VBLE_DECODER 0 ++#define CONFIG_VC1_DECODER 0 ++#define CONFIG_VC1_CRYSTALHD_DECODER 0 ++#define CONFIG_VC1IMAGE_DECODER 0 ++#define CONFIG_VC1_MMAL_DECODER 0 ++#define CONFIG_VC1_QSV_DECODER 0 ++#define CONFIG_VC1_V4L2M2M_DECODER 0 ++#define CONFIG_VCR1_DECODER 0 ++#define CONFIG_VMDVIDEO_DECODER 0 ++#define CONFIG_VMNC_DECODER 0 ++#define CONFIG_VP3_DECODER 0 ++#define CONFIG_VP4_DECODER 0 ++#define CONFIG_VP5_DECODER 0 ++#define CONFIG_VP6_DECODER 0 ++#define CONFIG_VP6A_DECODER 0 ++#define CONFIG_VP6F_DECODER 0 ++#define CONFIG_VP7_DECODER 0 ++#define CONFIG_VP8_DECODER 1 ++#define CONFIG_VP8_RKMPP_DECODER 0 ++#define CONFIG_VP8_V4L2M2M_DECODER 0 ++#define CONFIG_VP9_DECODER 1 ++#define CONFIG_VP9_RKMPP_DECODER 0 ++#define CONFIG_VP9_V4L2M2M_DECODER 0 ++#define CONFIG_VQA_DECODER 0 ++#define CONFIG_WEBP_DECODER 0 ++#define CONFIG_WCMV_DECODER 0 ++#define CONFIG_WRAPPED_AVFRAME_DECODER 0 ++#define CONFIG_WMV1_DECODER 0 ++#define CONFIG_WMV2_DECODER 0 ++#define CONFIG_WMV3_DECODER 0 ++#define CONFIG_WMV3_CRYSTALHD_DECODER 0 ++#define CONFIG_WMV3IMAGE_DECODER 0 ++#define CONFIG_WNV1_DECODER 0 ++#define CONFIG_XAN_WC3_DECODER 0 ++#define CONFIG_XAN_WC4_DECODER 0 ++#define CONFIG_XBM_DECODER 0 ++#define CONFIG_XFACE_DECODER 0 ++#define CONFIG_XL_DECODER 0 ++#define CONFIG_XPM_DECODER 0 ++#define CONFIG_XWD_DECODER 0 ++#define CONFIG_Y41P_DECODER 0 ++#define CONFIG_YLC_DECODER 0 ++#define CONFIG_YOP_DECODER 0 ++#define CONFIG_YUV4_DECODER 0 ++#define CONFIG_ZERO12V_DECODER 0 ++#define CONFIG_ZEROCODEC_DECODER 0 ++#define CONFIG_ZLIB_DECODER 0 ++#define CONFIG_ZMBV_DECODER 0 ++#define CONFIG_AAC_DECODER 0 ++#define CONFIG_AAC_FIXED_DECODER 0 ++#define CONFIG_AAC_LATM_DECODER 0 ++#define CONFIG_AC3_DECODER 0 ++#define CONFIG_AC3_FIXED_DECODER 0 ++#define CONFIG_ACELP_KELVIN_DECODER 0 ++#define CONFIG_ALAC_DECODER 0 ++#define CONFIG_ALS_DECODER 0 ++#define CONFIG_AMRNB_DECODER 0 ++#define CONFIG_AMRWB_DECODER 0 ++#define CONFIG_APE_DECODER 0 ++#define CONFIG_APTX_DECODER 0 ++#define CONFIG_APTX_HD_DECODER 0 ++#define CONFIG_ATRAC1_DECODER 0 ++#define CONFIG_ATRAC3_DECODER 0 ++#define CONFIG_ATRAC3AL_DECODER 0 ++#define CONFIG_ATRAC3P_DECODER 0 ++#define CONFIG_ATRAC3PAL_DECODER 0 ++#define CONFIG_ATRAC9_DECODER 0 ++#define CONFIG_BINKAUDIO_DCT_DECODER 0 ++#define CONFIG_BINKAUDIO_RDFT_DECODER 0 ++#define CONFIG_BMV_AUDIO_DECODER 0 ++#define CONFIG_COOK_DECODER 0 ++#define CONFIG_DCA_DECODER 0 ++#define CONFIG_DFPWM_DECODER 0 ++#define CONFIG_DOLBY_E_DECODER 0 ++#define CONFIG_DSD_LSBF_DECODER 0 ++#define CONFIG_DSD_MSBF_DECODER 0 ++#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 ++#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 ++#define CONFIG_DSICINAUDIO_DECODER 0 ++#define CONFIG_DSS_SP_DECODER 0 ++#define CONFIG_DST_DECODER 0 ++#define CONFIG_EAC3_DECODER 0 ++#define CONFIG_EVRC_DECODER 0 ++#define CONFIG_FASTAUDIO_DECODER 0 ++#define CONFIG_FFWAVESYNTH_DECODER 0 ++#define CONFIG_FLAC_DECODER 1 ++#define CONFIG_G723_1_DECODER 0 ++#define CONFIG_G729_DECODER 0 ++#define CONFIG_GSM_DECODER 0 ++#define CONFIG_GSM_MS_DECODER 0 ++#define CONFIG_HCA_DECODER 0 ++#define CONFIG_HCOM_DECODER 0 ++#define CONFIG_IAC_DECODER 0 ++#define CONFIG_ILBC_DECODER 0 ++#define CONFIG_IMC_DECODER 0 ++#define CONFIG_INTERPLAY_ACM_DECODER 0 ++#define CONFIG_MACE3_DECODER 0 ++#define CONFIG_MACE6_DECODER 0 ++#define CONFIG_METASOUND_DECODER 0 ++#define CONFIG_MLP_DECODER 0 ++#define CONFIG_MP1_DECODER 0 ++#define CONFIG_MP1FLOAT_DECODER 0 ++#define CONFIG_MP2_DECODER 0 ++#define CONFIG_MP2FLOAT_DECODER 0 ++#define CONFIG_MP3FLOAT_DECODER 0 ++#define CONFIG_MP3_DECODER 1 ++#define CONFIG_MP3ADUFLOAT_DECODER 0 ++#define CONFIG_MP3ADU_DECODER 0 ++#define CONFIG_MP3ON4FLOAT_DECODER 0 ++#define CONFIG_MP3ON4_DECODER 0 ++#define CONFIG_MPC7_DECODER 0 ++#define CONFIG_MPC8_DECODER 0 ++#define CONFIG_MSNSIREN_DECODER 0 ++#define CONFIG_NELLYMOSER_DECODER 0 ++#define CONFIG_ON2AVC_DECODER 0 ++#define CONFIG_OPUS_DECODER 0 ++#define CONFIG_PAF_AUDIO_DECODER 0 ++#define CONFIG_QCELP_DECODER 0 ++#define CONFIG_QDM2_DECODER 0 ++#define CONFIG_QDMC_DECODER 0 ++#define CONFIG_RA_144_DECODER 0 ++#define CONFIG_RA_288_DECODER 0 ++#define CONFIG_RALF_DECODER 0 ++#define CONFIG_SBC_DECODER 0 ++#define CONFIG_SHORTEN_DECODER 0 ++#define CONFIG_SIPR_DECODER 0 ++#define CONFIG_SIREN_DECODER 0 ++#define CONFIG_SMACKAUD_DECODER 0 ++#define CONFIG_SONIC_DECODER 0 ++#define CONFIG_TAK_DECODER 0 ++#define CONFIG_TRUEHD_DECODER 0 ++#define CONFIG_TRUESPEECH_DECODER 0 ++#define CONFIG_TTA_DECODER 0 ++#define CONFIG_TWINVQ_DECODER 0 ++#define CONFIG_VMDAUDIO_DECODER 0 ++#define CONFIG_VORBIS_DECODER 0 ++#define CONFIG_WAVPACK_DECODER 0 ++#define CONFIG_WMALOSSLESS_DECODER 0 ++#define CONFIG_WMAPRO_DECODER 0 ++#define CONFIG_WMAV1_DECODER 0 ++#define CONFIG_WMAV2_DECODER 0 ++#define CONFIG_WMAVOICE_DECODER 0 ++#define CONFIG_WS_SND1_DECODER 0 ++#define CONFIG_XMA1_DECODER 0 ++#define CONFIG_XMA2_DECODER 0 ++#define CONFIG_PCM_ALAW_DECODER 0 ++#define CONFIG_PCM_BLURAY_DECODER 0 ++#define CONFIG_PCM_DVD_DECODER 0 ++#define CONFIG_PCM_F16LE_DECODER 0 ++#define CONFIG_PCM_F24LE_DECODER 0 ++#define CONFIG_PCM_F32BE_DECODER 0 ++#define CONFIG_PCM_F32LE_DECODER 0 ++#define CONFIG_PCM_F64BE_DECODER 0 ++#define CONFIG_PCM_F64LE_DECODER 0 ++#define CONFIG_PCM_LXF_DECODER 0 ++#define CONFIG_PCM_MULAW_DECODER 0 ++#define CONFIG_PCM_S8_DECODER 0 ++#define CONFIG_PCM_S8_PLANAR_DECODER 0 ++#define CONFIG_PCM_S16BE_DECODER 0 ++#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S16LE_DECODER 0 ++#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S24BE_DECODER 0 ++#define CONFIG_PCM_S24DAUD_DECODER 0 ++#define CONFIG_PCM_S24LE_DECODER 0 ++#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S32BE_DECODER 0 ++#define CONFIG_PCM_S32LE_DECODER 0 ++#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 ++#define CONFIG_PCM_S64BE_DECODER 0 ++#define CONFIG_PCM_S64LE_DECODER 0 ++#define CONFIG_PCM_SGA_DECODER 0 ++#define CONFIG_PCM_U8_DECODER 0 ++#define CONFIG_PCM_U16BE_DECODER 0 ++#define CONFIG_PCM_U16LE_DECODER 0 ++#define CONFIG_PCM_U24BE_DECODER 0 ++#define CONFIG_PCM_U24LE_DECODER 0 ++#define CONFIG_PCM_U32BE_DECODER 0 ++#define CONFIG_PCM_U32LE_DECODER 0 ++#define CONFIG_PCM_VIDC_DECODER 0 ++#define CONFIG_DERF_DPCM_DECODER 0 ++#define CONFIG_GREMLIN_DPCM_DECODER 0 ++#define CONFIG_INTERPLAY_DPCM_DECODER 0 ++#define CONFIG_ROQ_DPCM_DECODER 0 ++#define CONFIG_SDX2_DPCM_DECODER 0 ++#define CONFIG_SOL_DPCM_DECODER 0 ++#define CONFIG_XAN_DPCM_DECODER 0 ++#define CONFIG_ADPCM_4XM_DECODER 0 ++#define CONFIG_ADPCM_ADX_DECODER 0 ++#define CONFIG_ADPCM_AFC_DECODER 0 ++#define CONFIG_ADPCM_AGM_DECODER 0 ++#define CONFIG_ADPCM_AICA_DECODER 0 ++#define CONFIG_ADPCM_ARGO_DECODER 0 ++#define CONFIG_ADPCM_CT_DECODER 0 ++#define CONFIG_ADPCM_DTK_DECODER 0 ++#define CONFIG_ADPCM_EA_DECODER 0 ++#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 ++#define CONFIG_ADPCM_EA_R1_DECODER 0 ++#define CONFIG_ADPCM_EA_R2_DECODER 0 ++#define CONFIG_ADPCM_EA_R3_DECODER 0 ++#define CONFIG_ADPCM_EA_XAS_DECODER 0 ++#define CONFIG_ADPCM_G722_DECODER 0 ++#define CONFIG_ADPCM_G726_DECODER 0 ++#define CONFIG_ADPCM_G726LE_DECODER 0 ++#define CONFIG_ADPCM_IMA_ACORN_DECODER 0 ++#define CONFIG_ADPCM_IMA_AMV_DECODER 0 ++#define CONFIG_ADPCM_IMA_ALP_DECODER 0 ++#define CONFIG_ADPCM_IMA_APC_DECODER 0 ++#define CONFIG_ADPCM_IMA_APM_DECODER 0 ++#define CONFIG_ADPCM_IMA_CUNNING_DECODER 0 ++#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 ++#define CONFIG_ADPCM_IMA_DK3_DECODER 0 ++#define CONFIG_ADPCM_IMA_DK4_DECODER 0 ++#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 ++#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 ++#define CONFIG_ADPCM_IMA_ISS_DECODER 0 ++#define CONFIG_ADPCM_IMA_MOFLEX_DECODER 0 ++#define CONFIG_ADPCM_IMA_MTF_DECODER 0 ++#define CONFIG_ADPCM_IMA_OKI_DECODER 0 ++#define CONFIG_ADPCM_IMA_QT_DECODER 0 ++#define CONFIG_ADPCM_IMA_RAD_DECODER 0 ++#define CONFIG_ADPCM_IMA_SSI_DECODER 0 ++#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 ++#define CONFIG_ADPCM_IMA_WAV_DECODER 0 ++#define CONFIG_ADPCM_IMA_WS_DECODER 0 ++#define CONFIG_ADPCM_MS_DECODER 0 ++#define CONFIG_ADPCM_MTAF_DECODER 0 ++#define CONFIG_ADPCM_PSX_DECODER 0 ++#define CONFIG_ADPCM_SBPRO_2_DECODER 0 ++#define CONFIG_ADPCM_SBPRO_3_DECODER 0 ++#define CONFIG_ADPCM_SBPRO_4_DECODER 0 ++#define CONFIG_ADPCM_SWF_DECODER 0 ++#define CONFIG_ADPCM_THP_DECODER 0 ++#define CONFIG_ADPCM_THP_LE_DECODER 0 ++#define CONFIG_ADPCM_VIMA_DECODER 0 ++#define CONFIG_ADPCM_XA_DECODER 0 ++#define CONFIG_ADPCM_YAMAHA_DECODER 0 ++#define CONFIG_ADPCM_ZORK_DECODER 0 ++#define CONFIG_SSA_DECODER 0 ++#define CONFIG_ASS_DECODER 0 ++#define CONFIG_CCAPTION_DECODER 0 ++#define CONFIG_DVBSUB_DECODER 0 ++#define CONFIG_DVDSUB_DECODER 0 ++#define CONFIG_JACOSUB_DECODER 0 ++#define CONFIG_MICRODVD_DECODER 0 ++#define CONFIG_MOVTEXT_DECODER 0 ++#define CONFIG_MPL2_DECODER 0 ++#define CONFIG_PGSSUB_DECODER 0 ++#define CONFIG_PJS_DECODER 0 ++#define CONFIG_REALTEXT_DECODER 0 ++#define CONFIG_SAMI_DECODER 0 ++#define CONFIG_SRT_DECODER 0 ++#define CONFIG_STL_DECODER 0 ++#define CONFIG_SUBRIP_DECODER 0 ++#define CONFIG_SUBVIEWER_DECODER 0 ++#define CONFIG_SUBVIEWER1_DECODER 0 ++#define CONFIG_TEXT_DECODER 0 ++#define CONFIG_VPLAYER_DECODER 0 ++#define CONFIG_WEBVTT_DECODER 0 ++#define CONFIG_XSUB_DECODER 0 ++#define CONFIG_AAC_AT_DECODER 0 ++#define CONFIG_AC3_AT_DECODER 0 ++#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 ++#define CONFIG_ALAC_AT_DECODER 0 ++#define CONFIG_AMR_NB_AT_DECODER 0 ++#define CONFIG_EAC3_AT_DECODER 0 ++#define CONFIG_GSM_MS_AT_DECODER 0 ++#define CONFIG_ILBC_AT_DECODER 0 ++#define CONFIG_MP1_AT_DECODER 0 ++#define CONFIG_MP2_AT_DECODER 0 ++#define CONFIG_MP3_AT_DECODER 0 ++#define CONFIG_PCM_ALAW_AT_DECODER 0 ++#define CONFIG_PCM_MULAW_AT_DECODER 0 ++#define CONFIG_QDMC_AT_DECODER 0 ++#define CONFIG_QDM2_AT_DECODER 0 ++#define CONFIG_LIBARIBB24_DECODER 0 ++#define CONFIG_LIBCELT_DECODER 0 ++#define CONFIG_LIBCODEC2_DECODER 0 ++#define CONFIG_LIBDAV1D_DECODER 1 ++#define CONFIG_LIBDAVS2_DECODER 0 ++#define CONFIG_LIBFDK_AAC_DECODER 0 ++#define CONFIG_LIBGSM_DECODER 0 ++#define CONFIG_LIBGSM_MS_DECODER 0 ++#define CONFIG_LIBILBC_DECODER 0 ++#define CONFIG_LIBJXL_DECODER 0 ++#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 ++#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 ++#define CONFIG_LIBOPENJPEG_DECODER 0 ++#define CONFIG_LIBOPUS_DECODER 0 ++#define CONFIG_LIBRSVG_DECODER 0 ++#define CONFIG_LIBSPEEX_DECODER 0 ++#define CONFIG_LIBUAVS3D_DECODER 0 ++#define CONFIG_LIBVORBIS_DECODER 0 ++#define CONFIG_LIBVPX_VP8_DECODER 0 ++#define CONFIG_LIBVPX_VP9_DECODER 0 ++#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 ++#define CONFIG_BINTEXT_DECODER 0 ++#define CONFIG_XBIN_DECODER 0 ++#define CONFIG_IDF_DECODER 0 ++#define CONFIG_LIBAOM_AV1_DECODER 0 ++#define CONFIG_AV1_DECODER 1 ++#define CONFIG_AV1_CUVID_DECODER 0 ++#define CONFIG_AV1_QSV_DECODER 0 ++#define CONFIG_LIBOPENH264_DECODER 0 ++#define CONFIG_H264_CUVID_DECODER 0 ++#define CONFIG_HEVC_CUVID_DECODER 0 ++#define CONFIG_HEVC_MEDIACODEC_DECODER 0 ++#define CONFIG_MJPEG_CUVID_DECODER 0 ++#define CONFIG_MJPEG_QSV_DECODER 0 ++#define CONFIG_MPEG1_CUVID_DECODER 0 ++#define CONFIG_MPEG2_CUVID_DECODER 0 ++#define CONFIG_MPEG4_CUVID_DECODER 0 ++#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 ++#define CONFIG_VC1_CUVID_DECODER 0 ++#define CONFIG_VP8_CUVID_DECODER 0 ++#define CONFIG_VP8_MEDIACODEC_DECODER 0 ++#define CONFIG_VP8_QSV_DECODER 0 ++#define CONFIG_VP9_CUVID_DECODER 0 ++#define CONFIG_VP9_MEDIACODEC_DECODER 0 ++#define CONFIG_VP9_QSV_DECODER 0 ++#define CONFIG_A64MULTI_ENCODER 0 ++#define CONFIG_A64MULTI5_ENCODER 0 ++#define CONFIG_ALIAS_PIX_ENCODER 0 ++#define CONFIG_AMV_ENCODER 0 ++#define CONFIG_APNG_ENCODER 0 ++#define CONFIG_ASV1_ENCODER 0 ++#define CONFIG_ASV2_ENCODER 0 ++#define CONFIG_AVRP_ENCODER 0 ++#define CONFIG_AVUI_ENCODER 0 ++#define CONFIG_AYUV_ENCODER 0 ++#define CONFIG_BITPACKED_ENCODER 0 ++#define CONFIG_BMP_ENCODER 0 ++#define CONFIG_CFHD_ENCODER 0 ++#define CONFIG_CINEPAK_ENCODER 0 ++#define CONFIG_CLJR_ENCODER 0 ++#define CONFIG_COMFORTNOISE_ENCODER 0 ++#define CONFIG_DNXHD_ENCODER 0 ++#define CONFIG_DPX_ENCODER 0 ++#define CONFIG_DVVIDEO_ENCODER 0 ++#define CONFIG_EXR_ENCODER 0 ++#define CONFIG_FFV1_ENCODER 0 ++#define CONFIG_FFVHUFF_ENCODER 0 ++#define CONFIG_FITS_ENCODER 0 ++#define CONFIG_FLASHSV_ENCODER 0 ++#define CONFIG_FLASHSV2_ENCODER 0 ++#define CONFIG_FLV_ENCODER 0 ++#define CONFIG_GIF_ENCODER 0 ++#define CONFIG_H261_ENCODER 0 ++#define CONFIG_H263_ENCODER 0 ++#define CONFIG_H263P_ENCODER 0 ++#define CONFIG_HAP_ENCODER 0 ++#define CONFIG_HUFFYUV_ENCODER 0 ++#define CONFIG_JPEG2000_ENCODER 0 ++#define CONFIG_JPEGLS_ENCODER 0 ++#define CONFIG_LJPEG_ENCODER 0 ++#define CONFIG_MAGICYUV_ENCODER 0 ++#define CONFIG_MJPEG_ENCODER 0 ++#define CONFIG_MPEG1VIDEO_ENCODER 0 ++#define CONFIG_MPEG2VIDEO_ENCODER 0 ++#define CONFIG_MPEG4_ENCODER 0 ++#define CONFIG_MSMPEG4V2_ENCODER 0 ++#define CONFIG_MSMPEG4V3_ENCODER 0 ++#define CONFIG_MSVIDEO1_ENCODER 0 ++#define CONFIG_PAM_ENCODER 0 ++#define CONFIG_PBM_ENCODER 0 ++#define CONFIG_PCX_ENCODER 0 ++#define CONFIG_PFM_ENCODER 0 ++#define CONFIG_PGM_ENCODER 0 ++#define CONFIG_PGMYUV_ENCODER 0 ++#define CONFIG_PNG_ENCODER 0 ++#define CONFIG_PPM_ENCODER 0 ++#define CONFIG_PRORES_ENCODER 0 ++#define CONFIG_PRORES_AW_ENCODER 0 ++#define CONFIG_PRORES_KS_ENCODER 0 ++#define CONFIG_QOI_ENCODER 0 ++#define CONFIG_QTRLE_ENCODER 0 ++#define CONFIG_R10K_ENCODER 0 ++#define CONFIG_R210_ENCODER 0 ++#define CONFIG_RAWVIDEO_ENCODER 0 ++#define CONFIG_ROQ_ENCODER 0 ++#define CONFIG_RPZA_ENCODER 0 ++#define CONFIG_RV10_ENCODER 0 ++#define CONFIG_RV20_ENCODER 0 ++#define CONFIG_S302M_ENCODER 0 ++#define CONFIG_SGI_ENCODER 0 ++#define CONFIG_SMC_ENCODER 0 ++#define CONFIG_SNOW_ENCODER 0 ++#define CONFIG_SPEEDHQ_ENCODER 0 ++#define CONFIG_SUNRAST_ENCODER 0 ++#define CONFIG_SVQ1_ENCODER 0 ++#define CONFIG_TARGA_ENCODER 0 ++#define CONFIG_TIFF_ENCODER 0 ++#define CONFIG_UTVIDEO_ENCODER 0 ++#define CONFIG_V210_ENCODER 0 ++#define CONFIG_V308_ENCODER 0 ++#define CONFIG_V408_ENCODER 0 ++#define CONFIG_V410_ENCODER 0 ++#define CONFIG_VBN_ENCODER 0 ++#define CONFIG_VC2_ENCODER 0 ++#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 ++#define CONFIG_WMV1_ENCODER 0 ++#define CONFIG_WMV2_ENCODER 0 ++#define CONFIG_XBM_ENCODER 0 ++#define CONFIG_XFACE_ENCODER 0 ++#define CONFIG_XWD_ENCODER 0 ++#define CONFIG_Y41P_ENCODER 0 ++#define CONFIG_YUV4_ENCODER 0 ++#define CONFIG_ZLIB_ENCODER 0 ++#define CONFIG_ZMBV_ENCODER 0 ++#define CONFIG_AAC_ENCODER 0 ++#define CONFIG_AC3_ENCODER 0 ++#define CONFIG_AC3_FIXED_ENCODER 0 ++#define CONFIG_ALAC_ENCODER 0 ++#define CONFIG_APTX_ENCODER 0 ++#define CONFIG_APTX_HD_ENCODER 0 ++#define CONFIG_DCA_ENCODER 0 ++#define CONFIG_DFPWM_ENCODER 0 ++#define CONFIG_EAC3_ENCODER 0 ++#define CONFIG_FLAC_ENCODER 0 ++#define CONFIG_G723_1_ENCODER 0 ++#define CONFIG_MLP_ENCODER 0 ++#define CONFIG_MP2_ENCODER 0 ++#define CONFIG_MP2FIXED_ENCODER 0 ++#define CONFIG_NELLYMOSER_ENCODER 0 ++#define CONFIG_OPUS_ENCODER 0 ++#define CONFIG_RA_144_ENCODER 0 ++#define CONFIG_SBC_ENCODER 0 ++#define CONFIG_SONIC_ENCODER 0 ++#define CONFIG_SONIC_LS_ENCODER 0 ++#define CONFIG_TRUEHD_ENCODER 0 ++#define CONFIG_TTA_ENCODER 0 ++#define CONFIG_VORBIS_ENCODER 0 ++#define CONFIG_WAVPACK_ENCODER 0 ++#define CONFIG_WMAV1_ENCODER 0 ++#define CONFIG_WMAV2_ENCODER 0 ++#define CONFIG_PCM_ALAW_ENCODER 0 ++#define CONFIG_PCM_BLURAY_ENCODER 0 ++#define CONFIG_PCM_DVD_ENCODER 0 ++#define CONFIG_PCM_F32BE_ENCODER 0 ++#define CONFIG_PCM_F32LE_ENCODER 0 ++#define CONFIG_PCM_F64BE_ENCODER 0 ++#define CONFIG_PCM_F64LE_ENCODER 0 ++#define CONFIG_PCM_MULAW_ENCODER 0 ++#define CONFIG_PCM_S8_ENCODER 0 ++#define CONFIG_PCM_S8_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S16BE_ENCODER 0 ++#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S16LE_ENCODER 0 ++#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S24BE_ENCODER 0 ++#define CONFIG_PCM_S24DAUD_ENCODER 0 ++#define CONFIG_PCM_S24LE_ENCODER 0 ++#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S32BE_ENCODER 0 ++#define CONFIG_PCM_S32LE_ENCODER 0 ++#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 ++#define CONFIG_PCM_S64BE_ENCODER 0 ++#define CONFIG_PCM_S64LE_ENCODER 0 ++#define CONFIG_PCM_U8_ENCODER 0 ++#define CONFIG_PCM_U16BE_ENCODER 0 ++#define CONFIG_PCM_U16LE_ENCODER 0 ++#define CONFIG_PCM_U24BE_ENCODER 0 ++#define CONFIG_PCM_U24LE_ENCODER 0 ++#define CONFIG_PCM_U32BE_ENCODER 0 ++#define CONFIG_PCM_U32LE_ENCODER 0 ++#define CONFIG_PCM_VIDC_ENCODER 0 ++#define CONFIG_ROQ_DPCM_ENCODER 0 ++#define CONFIG_ADPCM_ADX_ENCODER 0 ++#define CONFIG_ADPCM_ARGO_ENCODER 0 ++#define CONFIG_ADPCM_G722_ENCODER 0 ++#define CONFIG_ADPCM_G726_ENCODER 0 ++#define CONFIG_ADPCM_G726LE_ENCODER 0 ++#define CONFIG_ADPCM_IMA_AMV_ENCODER 0 ++#define CONFIG_ADPCM_IMA_ALP_ENCODER 0 ++#define CONFIG_ADPCM_IMA_APM_ENCODER 0 ++#define CONFIG_ADPCM_IMA_QT_ENCODER 0 ++#define CONFIG_ADPCM_IMA_SSI_ENCODER 0 ++#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 ++#define CONFIG_ADPCM_IMA_WS_ENCODER 0 ++#define CONFIG_ADPCM_MS_ENCODER 0 ++#define CONFIG_ADPCM_SWF_ENCODER 0 ++#define CONFIG_ADPCM_YAMAHA_ENCODER 0 ++#define CONFIG_SSA_ENCODER 0 ++#define CONFIG_ASS_ENCODER 0 ++#define CONFIG_DVBSUB_ENCODER 0 ++#define CONFIG_DVDSUB_ENCODER 0 ++#define CONFIG_MOVTEXT_ENCODER 0 ++#define CONFIG_SRT_ENCODER 0 ++#define CONFIG_SUBRIP_ENCODER 0 ++#define CONFIG_TEXT_ENCODER 0 ++#define CONFIG_TTML_ENCODER 0 ++#define CONFIG_WEBVTT_ENCODER 0 ++#define CONFIG_XSUB_ENCODER 0 ++#define CONFIG_AAC_AT_ENCODER 0 ++#define CONFIG_ALAC_AT_ENCODER 0 ++#define CONFIG_ILBC_AT_ENCODER 0 ++#define CONFIG_PCM_ALAW_AT_ENCODER 0 ++#define CONFIG_PCM_MULAW_AT_ENCODER 0 ++#define CONFIG_LIBAOM_AV1_ENCODER 0 ++#define CONFIG_LIBCODEC2_ENCODER 0 ++#define CONFIG_LIBFDK_AAC_ENCODER 0 ++#define CONFIG_LIBGSM_ENCODER 0 ++#define CONFIG_LIBGSM_MS_ENCODER 0 ++#define CONFIG_LIBILBC_ENCODER 0 ++#define CONFIG_LIBJXL_ENCODER 0 ++#define CONFIG_LIBMP3LAME_ENCODER 0 ++#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 ++#define CONFIG_LIBOPENJPEG_ENCODER 0 ++#define CONFIG_LIBOPUS_ENCODER 0 ++#define CONFIG_LIBRAV1E_ENCODER 0 ++#define CONFIG_LIBSHINE_ENCODER 0 ++#define CONFIG_LIBSPEEX_ENCODER 0 ++#define CONFIG_LIBSVTAV1_ENCODER 0 ++#define CONFIG_LIBTHEORA_ENCODER 0 ++#define CONFIG_LIBTWOLAME_ENCODER 0 ++#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 ++#define CONFIG_LIBVORBIS_ENCODER 0 ++#define CONFIG_LIBVPX_VP8_ENCODER 0 ++#define CONFIG_LIBVPX_VP9_ENCODER 0 ++#define CONFIG_LIBWEBP_ANIM_ENCODER 0 ++#define CONFIG_LIBWEBP_ENCODER 0 ++#define CONFIG_LIBX262_ENCODER 0 ++#define CONFIG_LIBX264_ENCODER 0 ++#define CONFIG_LIBX264RGB_ENCODER 0 ++#define CONFIG_LIBX265_ENCODER 0 ++#define CONFIG_LIBXAVS_ENCODER 0 ++#define CONFIG_LIBXAVS2_ENCODER 0 ++#define CONFIG_LIBXVID_ENCODER 0 ++#define CONFIG_AAC_MF_ENCODER 0 ++#define CONFIG_AC3_MF_ENCODER 0 ++#define CONFIG_H263_V4L2M2M_ENCODER 0 ++#define CONFIG_LIBOPENH264_ENCODER 0 ++#define CONFIG_H264_AMF_ENCODER 0 ++#define CONFIG_H264_MF_ENCODER 0 ++#define CONFIG_H264_NVENC_ENCODER 0 ++#define CONFIG_H264_OMX_ENCODER 0 ++#define CONFIG_H264_QSV_ENCODER 0 ++#define CONFIG_H264_V4L2M2M_ENCODER 0 ++#define CONFIG_H264_VAAPI_ENCODER 0 ++#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 ++#define CONFIG_HEVC_AMF_ENCODER 0 ++#define CONFIG_HEVC_MF_ENCODER 0 ++#define CONFIG_HEVC_NVENC_ENCODER 0 ++#define CONFIG_HEVC_QSV_ENCODER 0 ++#define CONFIG_HEVC_V4L2M2M_ENCODER 0 ++#define CONFIG_HEVC_VAAPI_ENCODER 0 ++#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 ++#define CONFIG_LIBKVAZAAR_ENCODER 0 ++#define CONFIG_MJPEG_QSV_ENCODER 0 ++#define CONFIG_MJPEG_VAAPI_ENCODER 0 ++#define CONFIG_MP3_MF_ENCODER 0 ++#define CONFIG_MPEG2_QSV_ENCODER 0 ++#define CONFIG_MPEG2_VAAPI_ENCODER 0 ++#define CONFIG_MPEG4_OMX_ENCODER 0 ++#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 ++#define CONFIG_PRORES_VIDEOTOOLBOX_ENCODER 0 ++#define CONFIG_VP8_V4L2M2M_ENCODER 0 ++#define CONFIG_VP8_VAAPI_ENCODER 0 ++#define CONFIG_VP9_VAAPI_ENCODER 0 ++#define CONFIG_VP9_QSV_ENCODER 0 ++#define CONFIG_AV1_D3D11VA_HWACCEL 0 ++#define CONFIG_AV1_D3D11VA2_HWACCEL 0 ++#define CONFIG_AV1_DXVA2_HWACCEL 0 ++#define CONFIG_AV1_NVDEC_HWACCEL 0 ++#define CONFIG_AV1_VAAPI_HWACCEL 0 ++#define CONFIG_AV1_VDPAU_HWACCEL 0 ++#define CONFIG_H263_VAAPI_HWACCEL 0 ++#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_H264_D3D11VA_HWACCEL 0 ++#define CONFIG_H264_D3D11VA2_HWACCEL 0 ++#define CONFIG_H264_DXVA2_HWACCEL 0 ++#define CONFIG_H264_NVDEC_HWACCEL 0 ++#define CONFIG_H264_VAAPI_HWACCEL 0 ++#define CONFIG_H264_VDPAU_HWACCEL 0 ++#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_HEVC_D3D11VA_HWACCEL 0 ++#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 ++#define CONFIG_HEVC_DXVA2_HWACCEL 0 ++#define CONFIG_HEVC_NVDEC_HWACCEL 0 ++#define CONFIG_HEVC_VAAPI_HWACCEL 0 ++#define CONFIG_HEVC_VDPAU_HWACCEL 0 ++#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_MJPEG_NVDEC_HWACCEL 0 ++#define CONFIG_MJPEG_VAAPI_HWACCEL 0 ++#define CONFIG_MPEG1_NVDEC_HWACCEL 0 ++#define CONFIG_MPEG1_VDPAU_HWACCEL 0 ++#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 ++#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 ++#define CONFIG_MPEG2_NVDEC_HWACCEL 0 ++#define CONFIG_MPEG2_DXVA2_HWACCEL 0 ++#define CONFIG_MPEG2_VAAPI_HWACCEL 0 ++#define CONFIG_MPEG2_VDPAU_HWACCEL 0 ++#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_MPEG4_NVDEC_HWACCEL 0 ++#define CONFIG_MPEG4_VAAPI_HWACCEL 0 ++#define CONFIG_MPEG4_VDPAU_HWACCEL 0 ++#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_VC1_D3D11VA_HWACCEL 0 ++#define CONFIG_VC1_D3D11VA2_HWACCEL 0 ++#define CONFIG_VC1_DXVA2_HWACCEL 0 ++#define CONFIG_VC1_NVDEC_HWACCEL 0 ++#define CONFIG_VC1_VAAPI_HWACCEL 0 ++#define CONFIG_VC1_VDPAU_HWACCEL 0 ++#define CONFIG_VP8_NVDEC_HWACCEL 0 ++#define CONFIG_VP8_VAAPI_HWACCEL 0 ++#define CONFIG_VP9_D3D11VA_HWACCEL 0 ++#define CONFIG_VP9_D3D11VA2_HWACCEL 0 ++#define CONFIG_VP9_DXVA2_HWACCEL 0 ++#define CONFIG_VP9_NVDEC_HWACCEL 0 ++#define CONFIG_VP9_VAAPI_HWACCEL 0 ++#define CONFIG_VP9_VDPAU_HWACCEL 0 ++#define CONFIG_VP9_VIDEOTOOLBOX_HWACCEL 0 ++#define CONFIG_WMV3_D3D11VA_HWACCEL 0 ++#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 ++#define CONFIG_WMV3_DXVA2_HWACCEL 0 ++#define CONFIG_WMV3_NVDEC_HWACCEL 0 ++#define CONFIG_WMV3_VAAPI_HWACCEL 0 ++#define CONFIG_WMV3_VDPAU_HWACCEL 0 ++#define CONFIG_AAC_PARSER 0 ++#define CONFIG_AAC_LATM_PARSER 0 ++#define CONFIG_AC3_PARSER 0 ++#define CONFIG_ADX_PARSER 0 ++#define CONFIG_AMR_PARSER 0 ++#define CONFIG_AV1_PARSER 0 ++#define CONFIG_AVS2_PARSER 0 ++#define CONFIG_AVS3_PARSER 0 ++#define CONFIG_BMP_PARSER 0 ++#define CONFIG_CAVSVIDEO_PARSER 0 ++#define CONFIG_COOK_PARSER 0 ++#define CONFIG_CRI_PARSER 0 ++#define CONFIG_DCA_PARSER 0 ++#define CONFIG_DIRAC_PARSER 0 ++#define CONFIG_DNXHD_PARSER 0 ++#define CONFIG_DOLBY_E_PARSER 0 ++#define CONFIG_DPX_PARSER 0 ++#define CONFIG_DVAUDIO_PARSER 0 ++#define CONFIG_DVBSUB_PARSER 0 ++#define CONFIG_DVDSUB_PARSER 0 ++#define CONFIG_DVD_NAV_PARSER 0 ++#define CONFIG_FLAC_PARSER 0 ++#define CONFIG_G723_1_PARSER 0 ++#define CONFIG_G729_PARSER 0 ++#define CONFIG_GIF_PARSER 0 ++#define CONFIG_GSM_PARSER 0 ++#define CONFIG_H261_PARSER 0 ++#define CONFIG_H263_PARSER 0 ++#define CONFIG_H264_PARSER 0 ++#define CONFIG_HEVC_PARSER 0 ++#define CONFIG_IPU_PARSER 0 ++#define CONFIG_JPEG2000_PARSER 0 ++#define CONFIG_MJPEG_PARSER 0 ++#define CONFIG_MLP_PARSER 0 ++#define CONFIG_MPEG4VIDEO_PARSER 0 ++#define CONFIG_MPEGAUDIO_PARSER 0 ++#define CONFIG_MPEGVIDEO_PARSER 0 ++#define CONFIG_OPUS_PARSER 0 ++#define CONFIG_PNG_PARSER 0 ++#define CONFIG_PNM_PARSER 0 ++#define CONFIG_QOI_PARSER 0 ++#define CONFIG_RV30_PARSER 0 ++#define CONFIG_RV40_PARSER 0 ++#define CONFIG_SBC_PARSER 0 ++#define CONFIG_SIPR_PARSER 0 ++#define CONFIG_TAK_PARSER 0 ++#define CONFIG_VC1_PARSER 0 ++#define CONFIG_VORBIS_PARSER 0 ++#define CONFIG_VP3_PARSER 0 ++#define CONFIG_VP8_PARSER 1 ++#define CONFIG_VP9_PARSER 1 ++#define CONFIG_WEBP_PARSER 0 ++#define CONFIG_XBM_PARSER 0 ++#define CONFIG_XMA_PARSER 0 ++#define CONFIG_ALSA_INDEV 0 ++#define CONFIG_ANDROID_CAMERA_INDEV 0 ++#define CONFIG_AVFOUNDATION_INDEV 0 ++#define CONFIG_BKTR_INDEV 0 ++#define CONFIG_DECKLINK_INDEV 0 ++#define CONFIG_DSHOW_INDEV 0 ++#define CONFIG_FBDEV_INDEV 0 ++#define CONFIG_GDIGRAB_INDEV 0 ++#define CONFIG_IEC61883_INDEV 0 ++#define CONFIG_JACK_INDEV 0 ++#define CONFIG_KMSGRAB_INDEV 0 ++#define CONFIG_LAVFI_INDEV 0 ++#define CONFIG_OPENAL_INDEV 0 ++#define CONFIG_OSS_INDEV 0 ++#define CONFIG_PULSE_INDEV 0 ++#define CONFIG_SNDIO_INDEV 0 ++#define CONFIG_V4L2_INDEV 0 ++#define CONFIG_VFWCAP_INDEV 0 ++#define CONFIG_XCBGRAB_INDEV 0 ++#define CONFIG_LIBCDIO_INDEV 0 ++#define CONFIG_LIBDC1394_INDEV 0 ++#define CONFIG_ALSA_OUTDEV 0 ++#define CONFIG_AUDIOTOOLBOX_OUTDEV 0 ++#define CONFIG_CACA_OUTDEV 0 ++#define CONFIG_DECKLINK_OUTDEV 0 ++#define CONFIG_FBDEV_OUTDEV 0 ++#define CONFIG_OPENGL_OUTDEV 0 ++#define CONFIG_OSS_OUTDEV 0 ++#define CONFIG_PULSE_OUTDEV 0 ++#define CONFIG_SDL2_OUTDEV 0 ++#define CONFIG_SNDIO_OUTDEV 0 ++#define CONFIG_V4L2_OUTDEV 0 ++#define CONFIG_XV_OUTDEV 0 ++#define CONFIG_ABENCH_FILTER 0 ++#define CONFIG_ACOMPRESSOR_FILTER 0 ++#define CONFIG_ACONTRAST_FILTER 0 ++#define CONFIG_ACOPY_FILTER 0 ++#define CONFIG_ACUE_FILTER 0 ++#define CONFIG_ACROSSFADE_FILTER 0 ++#define CONFIG_ACROSSOVER_FILTER 0 ++#define CONFIG_ACRUSHER_FILTER 0 ++#define CONFIG_ADECLICK_FILTER 0 ++#define CONFIG_ADECLIP_FILTER 0 ++#define CONFIG_ADECORRELATE_FILTER 0 ++#define CONFIG_ADELAY_FILTER 0 ++#define CONFIG_ADENORM_FILTER 0 ++#define CONFIG_ADERIVATIVE_FILTER 0 ++#define CONFIG_ADYNAMICEQUALIZER_FILTER 0 ++#define CONFIG_ADYNAMICSMOOTH_FILTER 0 ++#define CONFIG_AECHO_FILTER 0 ++#define CONFIG_AEMPHASIS_FILTER 0 ++#define CONFIG_AEVAL_FILTER 0 ++#define CONFIG_AEXCITER_FILTER 0 ++#define CONFIG_AFADE_FILTER 0 ++#define CONFIG_AFFTDN_FILTER 0 ++#define CONFIG_AFFTFILT_FILTER 0 ++#define CONFIG_AFIR_FILTER 0 ++#define CONFIG_AFORMAT_FILTER 0 ++#define CONFIG_AFREQSHIFT_FILTER 0 ++#define CONFIG_AFWTDN_FILTER 0 ++#define CONFIG_AGATE_FILTER 0 ++#define CONFIG_AIIR_FILTER 0 ++#define CONFIG_AINTEGRAL_FILTER 0 ++#define CONFIG_AINTERLEAVE_FILTER 0 ++#define CONFIG_ALATENCY_FILTER 0 ++#define CONFIG_ALIMITER_FILTER 0 ++#define CONFIG_ALLPASS_FILTER 0 ++#define CONFIG_ALOOP_FILTER 0 ++#define CONFIG_AMERGE_FILTER 0 ++#define CONFIG_AMETADATA_FILTER 0 ++#define CONFIG_AMIX_FILTER 0 ++#define CONFIG_AMULTIPLY_FILTER 0 ++#define CONFIG_ANEQUALIZER_FILTER 0 ++#define CONFIG_ANLMDN_FILTER 0 ++#define CONFIG_ANLMF_FILTER 0 ++#define CONFIG_ANLMS_FILTER 0 ++#define CONFIG_ANULL_FILTER 0 ++#define CONFIG_APAD_FILTER 0 ++#define CONFIG_APERMS_FILTER 0 ++#define CONFIG_APHASER_FILTER 0 ++#define CONFIG_APHASESHIFT_FILTER 0 ++#define CONFIG_APSYCLIP_FILTER 0 ++#define CONFIG_APULSATOR_FILTER 0 ++#define CONFIG_AREALTIME_FILTER 0 ++#define CONFIG_ARESAMPLE_FILTER 0 ++#define CONFIG_AREVERSE_FILTER 0 ++#define CONFIG_ARNNDN_FILTER 0 ++#define CONFIG_ASDR_FILTER 0 ++#define CONFIG_ASEGMENT_FILTER 0 ++#define CONFIG_ASELECT_FILTER 0 ++#define CONFIG_ASENDCMD_FILTER 0 ++#define CONFIG_ASETNSAMPLES_FILTER 0 ++#define CONFIG_ASETPTS_FILTER 0 ++#define CONFIG_ASETRATE_FILTER 0 ++#define CONFIG_ASETTB_FILTER 0 ++#define CONFIG_ASHOWINFO_FILTER 0 ++#define CONFIG_ASIDEDATA_FILTER 0 ++#define CONFIG_ASOFTCLIP_FILTER 0 ++#define CONFIG_ASPECTRALSTATS_FILTER 0 ++#define CONFIG_ASPLIT_FILTER 0 ++#define CONFIG_ASR_FILTER 0 ++#define CONFIG_ASTATS_FILTER 0 ++#define CONFIG_ASTREAMSELECT_FILTER 0 ++#define CONFIG_ASUBBOOST_FILTER 0 ++#define CONFIG_ASUBCUT_FILTER 0 ++#define CONFIG_ASUPERCUT_FILTER 0 ++#define CONFIG_ASUPERPASS_FILTER 0 ++#define CONFIG_ASUPERSTOP_FILTER 0 ++#define CONFIG_ATEMPO_FILTER 0 ++#define CONFIG_ATILT_FILTER 0 ++#define CONFIG_ATRIM_FILTER 0 ++#define CONFIG_AXCORRELATE_FILTER 0 ++#define CONFIG_AZMQ_FILTER 0 ++#define CONFIG_BANDPASS_FILTER 0 ++#define CONFIG_BANDREJECT_FILTER 0 ++#define CONFIG_BASS_FILTER 0 ++#define CONFIG_BIQUAD_FILTER 0 ++#define CONFIG_BS2B_FILTER 0 ++#define CONFIG_CHANNELMAP_FILTER 0 ++#define CONFIG_CHANNELSPLIT_FILTER 0 ++#define CONFIG_CHORUS_FILTER 0 ++#define CONFIG_COMPAND_FILTER 0 ++#define CONFIG_COMPENSATIONDELAY_FILTER 0 ++#define CONFIG_CROSSFEED_FILTER 0 ++#define CONFIG_CRYSTALIZER_FILTER 0 ++#define CONFIG_DCSHIFT_FILTER 0 ++#define CONFIG_DEESSER_FILTER 0 ++#define CONFIG_DIALOGUENHANCE_FILTER 0 ++#define CONFIG_DRMETER_FILTER 0 ++#define CONFIG_DYNAUDNORM_FILTER 0 ++#define CONFIG_EARWAX_FILTER 0 ++#define CONFIG_EBUR128_FILTER 0 ++#define CONFIG_EQUALIZER_FILTER 0 ++#define CONFIG_EXTRASTEREO_FILTER 0 ++#define CONFIG_FIREQUALIZER_FILTER 0 ++#define CONFIG_FLANGER_FILTER 0 ++#define CONFIG_HAAS_FILTER 0 ++#define CONFIG_HDCD_FILTER 0 ++#define CONFIG_HEADPHONE_FILTER 0 ++#define CONFIG_HIGHPASS_FILTER 0 ++#define CONFIG_HIGHSHELF_FILTER 0 ++#define CONFIG_JOIN_FILTER 0 ++#define CONFIG_LADSPA_FILTER 0 ++#define CONFIG_LOUDNORM_FILTER 0 ++#define CONFIG_LOWPASS_FILTER 0 ++#define CONFIG_LOWSHELF_FILTER 0 ++#define CONFIG_LV2_FILTER 0 ++#define CONFIG_MCOMPAND_FILTER 0 ++#define CONFIG_PAN_FILTER 0 ++#define CONFIG_REPLAYGAIN_FILTER 0 ++#define CONFIG_RUBBERBAND_FILTER 0 ++#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 ++#define CONFIG_SIDECHAINGATE_FILTER 0 ++#define CONFIG_SILENCEDETECT_FILTER 0 ++#define CONFIG_SILENCEREMOVE_FILTER 0 ++#define CONFIG_SOFALIZER_FILTER 0 ++#define CONFIG_SPEECHNORM_FILTER 0 ++#define CONFIG_STEREOTOOLS_FILTER 0 ++#define CONFIG_STEREOWIDEN_FILTER 0 ++#define CONFIG_SUPEREQUALIZER_FILTER 0 ++#define CONFIG_SURROUND_FILTER 0 ++#define CONFIG_TILTSHELF_FILTER 0 ++#define CONFIG_TREBLE_FILTER 0 ++#define CONFIG_TREMOLO_FILTER 0 ++#define CONFIG_VIBRATO_FILTER 0 ++#define CONFIG_VIRTUALBASS_FILTER 0 ++#define CONFIG_VOLUME_FILTER 0 ++#define CONFIG_VOLUMEDETECT_FILTER 0 ++#define CONFIG_AEVALSRC_FILTER 0 ++#define CONFIG_AFIRSRC_FILTER 0 ++#define CONFIG_ANOISESRC_FILTER 0 ++#define CONFIG_ANULLSRC_FILTER 0 ++#define CONFIG_FLITE_FILTER 0 ++#define CONFIG_HILBERT_FILTER 0 ++#define CONFIG_SINC_FILTER 0 ++#define CONFIG_SINE_FILTER 0 ++#define CONFIG_ANULLSINK_FILTER 0 ++#define CONFIG_ADDROI_FILTER 0 ++#define CONFIG_ALPHAEXTRACT_FILTER 0 ++#define CONFIG_ALPHAMERGE_FILTER 0 ++#define CONFIG_AMPLIFY_FILTER 0 ++#define CONFIG_ASS_FILTER 0 ++#define CONFIG_ATADENOISE_FILTER 0 ++#define CONFIG_AVGBLUR_FILTER 0 ++#define CONFIG_AVGBLUR_OPENCL_FILTER 0 ++#define CONFIG_AVGBLUR_VULKAN_FILTER 0 ++#define CONFIG_BBOX_FILTER 0 ++#define CONFIG_BENCH_FILTER 0 ++#define CONFIG_BILATERAL_FILTER 0 ++#define CONFIG_BITPLANENOISE_FILTER 0 ++#define CONFIG_BLACKDETECT_FILTER 0 ++#define CONFIG_BLACKFRAME_FILTER 0 ++#define CONFIG_BLEND_FILTER 0 ++#define CONFIG_BLEND_VULKAN_FILTER 0 ++#define CONFIG_BLOCKDETECT_FILTER 0 ++#define CONFIG_BLURDETECT_FILTER 0 ++#define CONFIG_BM3D_FILTER 0 ++#define CONFIG_BOXBLUR_FILTER 0 ++#define CONFIG_BOXBLUR_OPENCL_FILTER 0 ++#define CONFIG_BWDIF_FILTER 0 ++#define CONFIG_CAS_FILTER 0 ++#define CONFIG_CHROMABER_VULKAN_FILTER 0 ++#define CONFIG_CHROMAHOLD_FILTER 0 ++#define CONFIG_CHROMAKEY_FILTER 0 ++#define CONFIG_CHROMANR_FILTER 0 ++#define CONFIG_CHROMASHIFT_FILTER 0 ++#define CONFIG_CIESCOPE_FILTER 0 ++#define CONFIG_CODECVIEW_FILTER 0 ++#define CONFIG_COLORBALANCE_FILTER 0 ++#define CONFIG_COLORCHANNELMIXER_FILTER 0 ++#define CONFIG_COLORCONTRAST_FILTER 0 ++#define CONFIG_COLORCORRECT_FILTER 0 ++#define CONFIG_COLORIZE_FILTER 0 ++#define CONFIG_COLORKEY_FILTER 0 ++#define CONFIG_COLORKEY_OPENCL_FILTER 0 ++#define CONFIG_COLORHOLD_FILTER 0 ++#define CONFIG_COLORLEVELS_FILTER 0 ++#define CONFIG_COLORMAP_FILTER 0 ++#define CONFIG_COLORMATRIX_FILTER 0 ++#define CONFIG_COLORSPACE_FILTER 0 ++#define CONFIG_COLORTEMPERATURE_FILTER 0 ++#define CONFIG_CONVOLUTION_FILTER 0 ++#define CONFIG_CONVOLUTION_OPENCL_FILTER 0 ++#define CONFIG_CONVOLVE_FILTER 0 ++#define CONFIG_COPY_FILTER 0 ++#define CONFIG_COREIMAGE_FILTER 0 ++#define CONFIG_COVER_RECT_FILTER 0 ++#define CONFIG_CROP_FILTER 0 ++#define CONFIG_CROPDETECT_FILTER 0 ++#define CONFIG_CUE_FILTER 0 ++#define CONFIG_CURVES_FILTER 0 ++#define CONFIG_DATASCOPE_FILTER 0 ++#define CONFIG_DBLUR_FILTER 0 ++#define CONFIG_DCTDNOIZ_FILTER 0 ++#define CONFIG_DEBAND_FILTER 0 ++#define CONFIG_DEBLOCK_FILTER 0 ++#define CONFIG_DECIMATE_FILTER 0 ++#define CONFIG_DECONVOLVE_FILTER 0 ++#define CONFIG_DEDOT_FILTER 0 ++#define CONFIG_DEFLATE_FILTER 0 ++#define CONFIG_DEFLICKER_FILTER 0 ++#define CONFIG_DEINTERLACE_QSV_FILTER 0 ++#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 ++#define CONFIG_DEJUDDER_FILTER 0 ++#define CONFIG_DELOGO_FILTER 0 ++#define CONFIG_DENOISE_VAAPI_FILTER 0 ++#define CONFIG_DERAIN_FILTER 0 ++#define CONFIG_DESHAKE_FILTER 0 ++#define CONFIG_DESHAKE_OPENCL_FILTER 0 ++#define CONFIG_DESPILL_FILTER 0 ++#define CONFIG_DETELECINE_FILTER 0 ++#define CONFIG_DILATION_FILTER 0 ++#define CONFIG_DILATION_OPENCL_FILTER 0 ++#define CONFIG_DISPLACE_FILTER 0 ++#define CONFIG_DNN_CLASSIFY_FILTER 0 ++#define CONFIG_DNN_DETECT_FILTER 0 ++#define CONFIG_DNN_PROCESSING_FILTER 0 ++#define CONFIG_DOUBLEWEAVE_FILTER 0 ++#define CONFIG_DRAWBOX_FILTER 0 ++#define CONFIG_DRAWGRAPH_FILTER 0 ++#define CONFIG_DRAWGRID_FILTER 0 ++#define CONFIG_DRAWTEXT_FILTER 0 ++#define CONFIG_EDGEDETECT_FILTER 0 ++#define CONFIG_ELBG_FILTER 0 ++#define CONFIG_ENTROPY_FILTER 0 ++#define CONFIG_EPX_FILTER 0 ++#define CONFIG_EQ_FILTER 0 ++#define CONFIG_EROSION_FILTER 0 ++#define CONFIG_EROSION_OPENCL_FILTER 0 ++#define CONFIG_ESTDIF_FILTER 0 ++#define CONFIG_EXPOSURE_FILTER 0 ++#define CONFIG_EXTRACTPLANES_FILTER 0 ++#define CONFIG_FADE_FILTER 0 ++#define CONFIG_FEEDBACK_FILTER 0 ++#define CONFIG_FFTDNOIZ_FILTER 0 ++#define CONFIG_FFTFILT_FILTER 0 ++#define CONFIG_FIELD_FILTER 0 ++#define CONFIG_FIELDHINT_FILTER 0 ++#define CONFIG_FIELDMATCH_FILTER 0 ++#define CONFIG_FIELDORDER_FILTER 0 ++#define CONFIG_FILLBORDERS_FILTER 0 ++#define CONFIG_FIND_RECT_FILTER 0 ++#define CONFIG_FLIP_VULKAN_FILTER 0 ++#define CONFIG_FLOODFILL_FILTER 0 ++#define CONFIG_FORMAT_FILTER 0 ++#define CONFIG_FPS_FILTER 0 ++#define CONFIG_FRAMEPACK_FILTER 0 ++#define CONFIG_FRAMERATE_FILTER 0 ++#define CONFIG_FRAMESTEP_FILTER 0 ++#define CONFIG_FREEZEDETECT_FILTER 0 ++#define CONFIG_FREEZEFRAMES_FILTER 0 ++#define CONFIG_FREI0R_FILTER 0 ++#define CONFIG_FSPP_FILTER 0 ++#define CONFIG_GBLUR_FILTER 0 ++#define CONFIG_GBLUR_VULKAN_FILTER 0 ++#define CONFIG_GEQ_FILTER 0 ++#define CONFIG_GRADFUN_FILTER 0 ++#define CONFIG_GRAPHMONITOR_FILTER 0 ++#define CONFIG_GRAYWORLD_FILTER 0 ++#define CONFIG_GREYEDGE_FILTER 0 ++#define CONFIG_GUIDED_FILTER 0 ++#define CONFIG_HALDCLUT_FILTER 0 ++#define CONFIG_HFLIP_FILTER 0 ++#define CONFIG_HFLIP_VULKAN_FILTER 0 ++#define CONFIG_HISTEQ_FILTER 0 ++#define CONFIG_HISTOGRAM_FILTER 0 ++#define CONFIG_HQDN3D_FILTER 0 ++#define CONFIG_HQX_FILTER 0 ++#define CONFIG_HSTACK_FILTER 0 ++#define CONFIG_HSVHOLD_FILTER 0 ++#define CONFIG_HSVKEY_FILTER 0 ++#define CONFIG_HUE_FILTER 0 ++#define CONFIG_HUESATURATION_FILTER 0 ++#define CONFIG_HWDOWNLOAD_FILTER 0 ++#define CONFIG_HWMAP_FILTER 0 ++#define CONFIG_HWUPLOAD_FILTER 0 ++#define CONFIG_HWUPLOAD_CUDA_FILTER 0 ++#define CONFIG_HYSTERESIS_FILTER 0 ++#define CONFIG_ICCDETECT_FILTER 0 ++#define CONFIG_ICCGEN_FILTER 0 ++#define CONFIG_IDENTITY_FILTER 0 ++#define CONFIG_IDET_FILTER 0 ++#define CONFIG_IL_FILTER 0 ++#define CONFIG_INFLATE_FILTER 0 ++#define CONFIG_INTERLACE_FILTER 0 ++#define CONFIG_INTERLEAVE_FILTER 0 ++#define CONFIG_KERNDEINT_FILTER 0 ++#define CONFIG_KIRSCH_FILTER 0 ++#define CONFIG_LAGFUN_FILTER 0 ++#define CONFIG_LATENCY_FILTER 0 ++#define CONFIG_LENSCORRECTION_FILTER 0 ++#define CONFIG_LENSFUN_FILTER 0 ++#define CONFIG_LIBPLACEBO_FILTER 0 ++#define CONFIG_LIBVMAF_FILTER 0 ++#define CONFIG_LIMITDIFF_FILTER 0 ++#define CONFIG_LIMITER_FILTER 0 ++#define CONFIG_LOOP_FILTER 0 ++#define CONFIG_LUMAKEY_FILTER 0 ++#define CONFIG_LUT_FILTER 0 ++#define CONFIG_LUT1D_FILTER 0 ++#define CONFIG_LUT2_FILTER 0 ++#define CONFIG_LUT3D_FILTER 0 ++#define CONFIG_LUTRGB_FILTER 0 ++#define CONFIG_LUTYUV_FILTER 0 ++#define CONFIG_MASKEDCLAMP_FILTER 0 ++#define CONFIG_MASKEDMAX_FILTER 0 ++#define CONFIG_MASKEDMERGE_FILTER 0 ++#define CONFIG_MASKEDMIN_FILTER 0 ++#define CONFIG_MASKEDTHRESHOLD_FILTER 0 ++#define CONFIG_MASKFUN_FILTER 0 ++#define CONFIG_MCDEINT_FILTER 0 ++#define CONFIG_MEDIAN_FILTER 0 ++#define CONFIG_MERGEPLANES_FILTER 0 ++#define CONFIG_MESTIMATE_FILTER 0 ++#define CONFIG_METADATA_FILTER 0 ++#define CONFIG_MIDEQUALIZER_FILTER 0 ++#define CONFIG_MINTERPOLATE_FILTER 0 ++#define CONFIG_MIX_FILTER 0 ++#define CONFIG_MONOCHROME_FILTER 0 ++#define CONFIG_MORPHO_FILTER 0 ++#define CONFIG_MPDECIMATE_FILTER 0 ++#define CONFIG_MSAD_FILTER 0 ++#define CONFIG_MULTIPLY_FILTER 0 ++#define CONFIG_NEGATE_FILTER 0 ++#define CONFIG_NLMEANS_FILTER 0 ++#define CONFIG_NLMEANS_OPENCL_FILTER 0 ++#define CONFIG_NNEDI_FILTER 0 ++#define CONFIG_NOFORMAT_FILTER 0 ++#define CONFIG_NOISE_FILTER 0 ++#define CONFIG_NORMALIZE_FILTER 0 ++#define CONFIG_NULL_FILTER 0 ++#define CONFIG_OCR_FILTER 0 ++#define CONFIG_OCV_FILTER 0 ++#define CONFIG_OSCILLOSCOPE_FILTER 0 ++#define CONFIG_OVERLAY_FILTER 0 ++#define CONFIG_OVERLAY_OPENCL_FILTER 0 ++#define CONFIG_OVERLAY_QSV_FILTER 0 ++#define CONFIG_OVERLAY_VAAPI_FILTER 0 ++#define CONFIG_OVERLAY_VULKAN_FILTER 0 ++#define CONFIG_OVERLAY_CUDA_FILTER 0 ++#define CONFIG_OWDENOISE_FILTER 0 ++#define CONFIG_PAD_FILTER 0 ++#define CONFIG_PAD_OPENCL_FILTER 0 ++#define CONFIG_PALETTEGEN_FILTER 0 ++#define CONFIG_PALETTEUSE_FILTER 0 ++#define CONFIG_PERMS_FILTER 0 ++#define CONFIG_PERSPECTIVE_FILTER 0 ++#define CONFIG_PHASE_FILTER 0 ++#define CONFIG_PHOTOSENSITIVITY_FILTER 0 ++#define CONFIG_PIXDESCTEST_FILTER 0 ++#define CONFIG_PIXELIZE_FILTER 0 ++#define CONFIG_PIXSCOPE_FILTER 0 ++#define CONFIG_PP_FILTER 0 ++#define CONFIG_PP7_FILTER 0 ++#define CONFIG_PREMULTIPLY_FILTER 0 ++#define CONFIG_PREWITT_FILTER 0 ++#define CONFIG_PREWITT_OPENCL_FILTER 0 ++#define CONFIG_PROCAMP_VAAPI_FILTER 0 ++#define CONFIG_PROGRAM_OPENCL_FILTER 0 ++#define CONFIG_PSEUDOCOLOR_FILTER 0 ++#define CONFIG_PSNR_FILTER 0 ++#define CONFIG_PULLUP_FILTER 0 ++#define CONFIG_QP_FILTER 0 ++#define CONFIG_RANDOM_FILTER 0 ++#define CONFIG_READEIA608_FILTER 0 ++#define CONFIG_READVITC_FILTER 0 ++#define CONFIG_REALTIME_FILTER 0 ++#define CONFIG_REMAP_FILTER 0 ++#define CONFIG_REMOVEGRAIN_FILTER 0 ++#define CONFIG_REMOVELOGO_FILTER 0 ++#define CONFIG_REPEATFIELDS_FILTER 0 ++#define CONFIG_REVERSE_FILTER 0 ++#define CONFIG_RGBASHIFT_FILTER 0 ++#define CONFIG_ROBERTS_FILTER 0 ++#define CONFIG_ROBERTS_OPENCL_FILTER 0 ++#define CONFIG_ROTATE_FILTER 0 ++#define CONFIG_SAB_FILTER 0 ++#define CONFIG_SCALE_FILTER 0 ++#define CONFIG_SCALE_CUDA_FILTER 0 ++#define CONFIG_SCALE_NPP_FILTER 0 ++#define CONFIG_SCALE_QSV_FILTER 0 ++#define CONFIG_SCALE_VAAPI_FILTER 0 ++#define CONFIG_SCALE_VULKAN_FILTER 0 ++#define CONFIG_SCALE2REF_FILTER 0 ++#define CONFIG_SCALE2REF_NPP_FILTER 0 ++#define CONFIG_SCDET_FILTER 0 ++#define CONFIG_SCHARR_FILTER 0 ++#define CONFIG_SCROLL_FILTER 0 ++#define CONFIG_SEGMENT_FILTER 0 ++#define CONFIG_SELECT_FILTER 0 ++#define CONFIG_SELECTIVECOLOR_FILTER 0 ++#define CONFIG_SENDCMD_FILTER 0 ++#define CONFIG_SEPARATEFIELDS_FILTER 0 ++#define CONFIG_SETDAR_FILTER 0 ++#define CONFIG_SETFIELD_FILTER 0 ++#define CONFIG_SETPARAMS_FILTER 0 ++#define CONFIG_SETPTS_FILTER 0 ++#define CONFIG_SETRANGE_FILTER 0 ++#define CONFIG_SETSAR_FILTER 0 ++#define CONFIG_SETTB_FILTER 0 ++#define CONFIG_SHARPEN_NPP_FILTER 0 ++#define CONFIG_SHARPNESS_VAAPI_FILTER 0 ++#define CONFIG_SHEAR_FILTER 0 ++#define CONFIG_SHOWINFO_FILTER 0 ++#define CONFIG_SHOWPALETTE_FILTER 0 ++#define CONFIG_SHUFFLEFRAMES_FILTER 0 ++#define CONFIG_SHUFFLEPIXELS_FILTER 0 ++#define CONFIG_SHUFFLEPLANES_FILTER 0 ++#define CONFIG_SIDEDATA_FILTER 0 ++#define CONFIG_SIGNALSTATS_FILTER 0 ++#define CONFIG_SIGNATURE_FILTER 0 ++#define CONFIG_SITI_FILTER 0 ++#define CONFIG_SMARTBLUR_FILTER 0 ++#define CONFIG_SOBEL_FILTER 0 ++#define CONFIG_SOBEL_OPENCL_FILTER 0 ++#define CONFIG_SPLIT_FILTER 0 ++#define CONFIG_SPP_FILTER 0 ++#define CONFIG_SR_FILTER 0 ++#define CONFIG_SSIM_FILTER 0 ++#define CONFIG_STEREO3D_FILTER 0 ++#define CONFIG_STREAMSELECT_FILTER 0 ++#define CONFIG_SUBTITLES_FILTER 0 ++#define CONFIG_SUPER2XSAI_FILTER 0 ++#define CONFIG_SWAPRECT_FILTER 0 ++#define CONFIG_SWAPUV_FILTER 0 ++#define CONFIG_TBLEND_FILTER 0 ++#define CONFIG_TELECINE_FILTER 0 ++#define CONFIG_THISTOGRAM_FILTER 0 ++#define CONFIG_THRESHOLD_FILTER 0 ++#define CONFIG_THUMBNAIL_FILTER 0 ++#define CONFIG_THUMBNAIL_CUDA_FILTER 0 ++#define CONFIG_TILE_FILTER 0 ++#define CONFIG_TINTERLACE_FILTER 0 ++#define CONFIG_TLUT2_FILTER 0 ++#define CONFIG_TMEDIAN_FILTER 0 ++#define CONFIG_TMIDEQUALIZER_FILTER 0 ++#define CONFIG_TMIX_FILTER 0 ++#define CONFIG_TONEMAP_FILTER 0 ++#define CONFIG_TONEMAP_OPENCL_FILTER 0 ++#define CONFIG_TONEMAP_VAAPI_FILTER 0 ++#define CONFIG_TPAD_FILTER 0 ++#define CONFIG_TRANSPOSE_FILTER 0 ++#define CONFIG_TRANSPOSE_NPP_FILTER 0 ++#define CONFIG_TRANSPOSE_OPENCL_FILTER 0 ++#define CONFIG_TRANSPOSE_VAAPI_FILTER 0 ++#define CONFIG_TRANSPOSE_VULKAN_FILTER 0 ++#define CONFIG_TRIM_FILTER 0 ++#define CONFIG_UNPREMULTIPLY_FILTER 0 ++#define CONFIG_UNSHARP_FILTER 0 ++#define CONFIG_UNSHARP_OPENCL_FILTER 0 ++#define CONFIG_UNTILE_FILTER 0 ++#define CONFIG_USPP_FILTER 0 ++#define CONFIG_V360_FILTER 0 ++#define CONFIG_VAGUEDENOISER_FILTER 0 ++#define CONFIG_VARBLUR_FILTER 0 ++#define CONFIG_VECTORSCOPE_FILTER 0 ++#define CONFIG_VFLIP_FILTER 0 ++#define CONFIG_VFLIP_VULKAN_FILTER 0 ++#define CONFIG_VFRDET_FILTER 0 ++#define CONFIG_VIBRANCE_FILTER 0 ++#define CONFIG_VIDSTABDETECT_FILTER 0 ++#define CONFIG_VIDSTABTRANSFORM_FILTER 0 ++#define CONFIG_VIF_FILTER 0 ++#define CONFIG_VIGNETTE_FILTER 0 ++#define CONFIG_VMAFMOTION_FILTER 0 ++#define CONFIG_VPP_QSV_FILTER 0 ++#define CONFIG_VSTACK_FILTER 0 ++#define CONFIG_W3FDIF_FILTER 0 ++#define CONFIG_WAVEFORM_FILTER 0 ++#define CONFIG_WEAVE_FILTER 0 ++#define CONFIG_XBR_FILTER 0 ++#define CONFIG_XCORRELATE_FILTER 0 ++#define CONFIG_XFADE_FILTER 0 ++#define CONFIG_XFADE_OPENCL_FILTER 0 ++#define CONFIG_XMEDIAN_FILTER 0 ++#define CONFIG_XSTACK_FILTER 0 ++#define CONFIG_YADIF_FILTER 0 ++#define CONFIG_YADIF_CUDA_FILTER 0 ++#define CONFIG_YADIF_VIDEOTOOLBOX_FILTER 0 ++#define CONFIG_YAEPBLUR_FILTER 0 ++#define CONFIG_ZMQ_FILTER 0 ++#define CONFIG_ZOOMPAN_FILTER 0 ++#define CONFIG_ZSCALE_FILTER 0 ++#define CONFIG_ALLRGB_FILTER 0 ++#define CONFIG_ALLYUV_FILTER 0 ++#define CONFIG_CELLAUTO_FILTER 0 ++#define CONFIG_COLOR_FILTER 0 ++#define CONFIG_COLORCHART_FILTER 0 ++#define CONFIG_COLORSPECTRUM_FILTER 0 ++#define CONFIG_COREIMAGESRC_FILTER 0 ++#define CONFIG_FREI0R_SRC_FILTER 0 ++#define CONFIG_GRADIENTS_FILTER 0 ++#define CONFIG_HALDCLUTSRC_FILTER 0 ++#define CONFIG_LIFE_FILTER 0 ++#define CONFIG_MANDELBROT_FILTER 0 ++#define CONFIG_MPTESTSRC_FILTER 0 ++#define CONFIG_NULLSRC_FILTER 0 ++#define CONFIG_OPENCLSRC_FILTER 0 ++#define CONFIG_PAL75BARS_FILTER 0 ++#define CONFIG_PAL100BARS_FILTER 0 ++#define CONFIG_RGBTESTSRC_FILTER 0 ++#define CONFIG_SIERPINSKI_FILTER 0 ++#define CONFIG_SMPTEBARS_FILTER 0 ++#define CONFIG_SMPTEHDBARS_FILTER 0 ++#define CONFIG_TESTSRC_FILTER 0 ++#define CONFIG_TESTSRC2_FILTER 0 ++#define CONFIG_YUVTESTSRC_FILTER 0 ++#define CONFIG_NULLSINK_FILTER 0 ++#define CONFIG_ABITSCOPE_FILTER 0 ++#define CONFIG_ADRAWGRAPH_FILTER 0 ++#define CONFIG_AGRAPHMONITOR_FILTER 0 ++#define CONFIG_AHISTOGRAM_FILTER 0 ++#define CONFIG_APHASEMETER_FILTER 0 ++#define CONFIG_AVECTORSCOPE_FILTER 0 ++#define CONFIG_CONCAT_FILTER 0 ++#define CONFIG_SHOWCQT_FILTER 0 ++#define CONFIG_SHOWFREQS_FILTER 0 ++#define CONFIG_SHOWSPATIAL_FILTER 0 ++#define CONFIG_SHOWSPECTRUM_FILTER 0 ++#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 ++#define CONFIG_SHOWVOLUME_FILTER 0 ++#define CONFIG_SHOWWAVES_FILTER 0 ++#define CONFIG_SHOWWAVESPIC_FILTER 0 ++#define CONFIG_SPECTRUMSYNTH_FILTER 0 ++#define CONFIG_AVSYNCTEST_FILTER 0 ++#define CONFIG_AMOVIE_FILTER 0 ++#define CONFIG_MOVIE_FILTER 0 ++#define CONFIG_AFIFO_FILTER 0 ++#define CONFIG_FIFO_FILTER 0 ++#define CONFIG_AA_DEMUXER 0 ++#define CONFIG_AAC_DEMUXER 0 ++#define CONFIG_AAX_DEMUXER 0 ++#define CONFIG_AC3_DEMUXER 0 ++#define CONFIG_ACE_DEMUXER 0 ++#define CONFIG_ACM_DEMUXER 0 ++#define CONFIG_ACT_DEMUXER 0 ++#define CONFIG_ADF_DEMUXER 0 ++#define CONFIG_ADP_DEMUXER 0 ++#define CONFIG_ADS_DEMUXER 0 ++#define CONFIG_ADX_DEMUXER 0 ++#define CONFIG_AEA_DEMUXER 0 ++#define CONFIG_AFC_DEMUXER 0 ++#define CONFIG_AIFF_DEMUXER 0 ++#define CONFIG_AIX_DEMUXER 0 ++#define CONFIG_ALP_DEMUXER 0 ++#define CONFIG_AMR_DEMUXER 0 ++#define CONFIG_AMRNB_DEMUXER 0 ++#define CONFIG_AMRWB_DEMUXER 0 ++#define CONFIG_ANM_DEMUXER 0 ++#define CONFIG_APC_DEMUXER 0 ++#define CONFIG_APE_DEMUXER 0 ++#define CONFIG_APM_DEMUXER 0 ++#define CONFIG_APNG_DEMUXER 0 ++#define CONFIG_APTX_DEMUXER 0 ++#define CONFIG_APTX_HD_DEMUXER 0 ++#define CONFIG_AQTITLE_DEMUXER 0 ++#define CONFIG_ARGO_ASF_DEMUXER 0 ++#define CONFIG_ARGO_BRP_DEMUXER 0 ++#define CONFIG_ARGO_CVG_DEMUXER 0 ++#define CONFIG_ASF_DEMUXER 0 ++#define CONFIG_ASF_O_DEMUXER 0 ++#define CONFIG_ASS_DEMUXER 0 ++#define CONFIG_AST_DEMUXER 0 ++#define CONFIG_AU_DEMUXER 0 ++#define CONFIG_AV1_DEMUXER 0 ++#define CONFIG_AVI_DEMUXER 0 ++#define CONFIG_AVISYNTH_DEMUXER 0 ++#define CONFIG_AVR_DEMUXER 0 ++#define CONFIG_AVS_DEMUXER 0 ++#define CONFIG_AVS2_DEMUXER 0 ++#define CONFIG_AVS3_DEMUXER 0 ++#define CONFIG_BETHSOFTVID_DEMUXER 0 ++#define CONFIG_BFI_DEMUXER 0 ++#define CONFIG_BINTEXT_DEMUXER 0 ++#define CONFIG_BINK_DEMUXER 0 ++#define CONFIG_BINKA_DEMUXER 0 ++#define CONFIG_BIT_DEMUXER 0 ++#define CONFIG_BITPACKED_DEMUXER 0 ++#define CONFIG_BMV_DEMUXER 0 ++#define CONFIG_BFSTM_DEMUXER 0 ++#define CONFIG_BRSTM_DEMUXER 0 ++#define CONFIG_BOA_DEMUXER 0 ++#define CONFIG_C93_DEMUXER 0 ++#define CONFIG_CAF_DEMUXER 0 ++#define CONFIG_CAVSVIDEO_DEMUXER 0 ++#define CONFIG_CDG_DEMUXER 0 ++#define CONFIG_CDXL_DEMUXER 0 ++#define CONFIG_CINE_DEMUXER 0 ++#define CONFIG_CODEC2_DEMUXER 0 ++#define CONFIG_CODEC2RAW_DEMUXER 0 ++#define CONFIG_CONCAT_DEMUXER 0 ++#define CONFIG_DASH_DEMUXER 0 ++#define CONFIG_DATA_DEMUXER 0 ++#define CONFIG_DAUD_DEMUXER 0 ++#define CONFIG_DCSTR_DEMUXER 0 ++#define CONFIG_DERF_DEMUXER 0 ++#define CONFIG_DFA_DEMUXER 0 ++#define CONFIG_DFPWM_DEMUXER 0 ++#define CONFIG_DHAV_DEMUXER 0 ++#define CONFIG_DIRAC_DEMUXER 0 ++#define CONFIG_DNXHD_DEMUXER 0 ++#define CONFIG_DSF_DEMUXER 0 ++#define CONFIG_DSICIN_DEMUXER 0 ++#define CONFIG_DSS_DEMUXER 0 ++#define CONFIG_DTS_DEMUXER 0 ++#define CONFIG_DTSHD_DEMUXER 0 ++#define CONFIG_DV_DEMUXER 0 ++#define CONFIG_DVBSUB_DEMUXER 0 ++#define CONFIG_DVBTXT_DEMUXER 0 ++#define CONFIG_DXA_DEMUXER 0 ++#define CONFIG_EA_DEMUXER 0 ++#define CONFIG_EA_CDATA_DEMUXER 0 ++#define CONFIG_EAC3_DEMUXER 0 ++#define CONFIG_EPAF_DEMUXER 0 ++#define CONFIG_FFMETADATA_DEMUXER 0 ++#define CONFIG_FILMSTRIP_DEMUXER 0 ++#define CONFIG_FITS_DEMUXER 0 ++#define CONFIG_FLAC_DEMUXER 0 ++#define CONFIG_FLIC_DEMUXER 0 ++#define CONFIG_FLV_DEMUXER 0 ++#define CONFIG_LIVE_FLV_DEMUXER 0 ++#define CONFIG_FOURXM_DEMUXER 0 ++#define CONFIG_FRM_DEMUXER 0 ++#define CONFIG_FSB_DEMUXER 0 ++#define CONFIG_FWSE_DEMUXER 0 ++#define CONFIG_G722_DEMUXER 0 ++#define CONFIG_G723_1_DEMUXER 0 ++#define CONFIG_G726_DEMUXER 0 ++#define CONFIG_G726LE_DEMUXER 0 ++#define CONFIG_G729_DEMUXER 0 ++#define CONFIG_GDV_DEMUXER 0 ++#define CONFIG_GENH_DEMUXER 0 ++#define CONFIG_GIF_DEMUXER 0 ++#define CONFIG_GSM_DEMUXER 0 ++#define CONFIG_GXF_DEMUXER 0 ++#define CONFIG_H261_DEMUXER 0 ++#define CONFIG_H263_DEMUXER 0 ++#define CONFIG_H264_DEMUXER 0 ++#define CONFIG_HCA_DEMUXER 0 ++#define CONFIG_HCOM_DEMUXER 0 ++#define CONFIG_HEVC_DEMUXER 0 ++#define CONFIG_HLS_DEMUXER 0 ++#define CONFIG_HNM_DEMUXER 0 ++#define CONFIG_ICO_DEMUXER 0 ++#define CONFIG_IDCIN_DEMUXER 0 ++#define CONFIG_IDF_DEMUXER 0 ++#define CONFIG_IFF_DEMUXER 0 ++#define CONFIG_IFV_DEMUXER 0 ++#define CONFIG_ILBC_DEMUXER 0 ++#define CONFIG_IMAGE2_DEMUXER 0 ++#define CONFIG_IMAGE2PIPE_DEMUXER 0 ++#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 ++#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 ++#define CONFIG_IMF_DEMUXER 0 ++#define CONFIG_INGENIENT_DEMUXER 0 ++#define CONFIG_IPMOVIE_DEMUXER 0 ++#define CONFIG_IPU_DEMUXER 0 ++#define CONFIG_IRCAM_DEMUXER 0 ++#define CONFIG_ISS_DEMUXER 0 ++#define CONFIG_IV8_DEMUXER 0 ++#define CONFIG_IVF_DEMUXER 0 ++#define CONFIG_IVR_DEMUXER 0 ++#define CONFIG_JACOSUB_DEMUXER 0 ++#define CONFIG_JV_DEMUXER 0 ++#define CONFIG_KUX_DEMUXER 0 ++#define CONFIG_KVAG_DEMUXER 0 ++#define CONFIG_LMLM4_DEMUXER 0 ++#define CONFIG_LOAS_DEMUXER 0 ++#define CONFIG_LUODAT_DEMUXER 0 ++#define CONFIG_LRC_DEMUXER 0 ++#define CONFIG_LVF_DEMUXER 0 ++#define CONFIG_LXF_DEMUXER 0 ++#define CONFIG_M4V_DEMUXER 0 ++#define CONFIG_MCA_DEMUXER 0 ++#define CONFIG_MCC_DEMUXER 0 ++#define CONFIG_MATROSKA_DEMUXER 0 ++#define CONFIG_MGSTS_DEMUXER 0 ++#define CONFIG_MICRODVD_DEMUXER 0 ++#define CONFIG_MJPEG_DEMUXER 0 ++#define CONFIG_MJPEG_2000_DEMUXER 0 ++#define CONFIG_MLP_DEMUXER 0 ++#define CONFIG_MLV_DEMUXER 0 ++#define CONFIG_MM_DEMUXER 0 ++#define CONFIG_MMF_DEMUXER 0 ++#define CONFIG_MODS_DEMUXER 0 ++#define CONFIG_MOFLEX_DEMUXER 0 ++#define CONFIG_MOV_DEMUXER 0 ++#define CONFIG_MP3_DEMUXER 0 ++#define CONFIG_MPC_DEMUXER 0 ++#define CONFIG_MPC8_DEMUXER 0 ++#define CONFIG_MPEGPS_DEMUXER 0 ++#define CONFIG_MPEGTS_DEMUXER 0 ++#define CONFIG_MPEGTSRAW_DEMUXER 0 ++#define CONFIG_MPEGVIDEO_DEMUXER 0 ++#define CONFIG_MPJPEG_DEMUXER 0 ++#define CONFIG_MPL2_DEMUXER 0 ++#define CONFIG_MPSUB_DEMUXER 0 ++#define CONFIG_MSF_DEMUXER 0 ++#define CONFIG_MSNWC_TCP_DEMUXER 0 ++#define CONFIG_MSP_DEMUXER 0 ++#define CONFIG_MTAF_DEMUXER 0 ++#define CONFIG_MTV_DEMUXER 0 ++#define CONFIG_MUSX_DEMUXER 0 ++#define CONFIG_MV_DEMUXER 0 ++#define CONFIG_MVI_DEMUXER 0 ++#define CONFIG_MXF_DEMUXER 0 ++#define CONFIG_MXG_DEMUXER 0 ++#define CONFIG_NC_DEMUXER 0 ++#define CONFIG_NISTSPHERE_DEMUXER 0 ++#define CONFIG_NSP_DEMUXER 0 ++#define CONFIG_NSV_DEMUXER 0 ++#define CONFIG_NUT_DEMUXER 0 ++#define CONFIG_NUV_DEMUXER 0 ++#define CONFIG_OBU_DEMUXER 0 ++#define CONFIG_OGG_DEMUXER 0 ++#define CONFIG_OMA_DEMUXER 0 ++#define CONFIG_PAF_DEMUXER 0 ++#define CONFIG_PCM_ALAW_DEMUXER 0 ++#define CONFIG_PCM_MULAW_DEMUXER 0 ++#define CONFIG_PCM_VIDC_DEMUXER 0 ++#define CONFIG_PCM_F64BE_DEMUXER 0 ++#define CONFIG_PCM_F64LE_DEMUXER 0 ++#define CONFIG_PCM_F32BE_DEMUXER 0 ++#define CONFIG_PCM_F32LE_DEMUXER 0 ++#define CONFIG_PCM_S32BE_DEMUXER 0 ++#define CONFIG_PCM_S32LE_DEMUXER 0 ++#define CONFIG_PCM_S24BE_DEMUXER 0 ++#define CONFIG_PCM_S24LE_DEMUXER 0 ++#define CONFIG_PCM_S16BE_DEMUXER 0 ++#define CONFIG_PCM_S16LE_DEMUXER 0 ++#define CONFIG_PCM_S8_DEMUXER 0 ++#define CONFIG_PCM_U32BE_DEMUXER 0 ++#define CONFIG_PCM_U32LE_DEMUXER 0 ++#define CONFIG_PCM_U24BE_DEMUXER 0 ++#define CONFIG_PCM_U24LE_DEMUXER 0 ++#define CONFIG_PCM_U16BE_DEMUXER 0 ++#define CONFIG_PCM_U16LE_DEMUXER 0 ++#define CONFIG_PCM_U8_DEMUXER 0 ++#define CONFIG_PJS_DEMUXER 0 ++#define CONFIG_PMP_DEMUXER 0 ++#define CONFIG_PP_BNK_DEMUXER 0 ++#define CONFIG_PVA_DEMUXER 0 ++#define CONFIG_PVF_DEMUXER 0 ++#define CONFIG_QCP_DEMUXER 0 ++#define CONFIG_R3D_DEMUXER 0 ++#define CONFIG_RAWVIDEO_DEMUXER 0 ++#define CONFIG_REALTEXT_DEMUXER 0 ++#define CONFIG_REDSPARK_DEMUXER 0 ++#define CONFIG_RL2_DEMUXER 0 ++#define CONFIG_RM_DEMUXER 0 ++#define CONFIG_ROQ_DEMUXER 0 ++#define CONFIG_RPL_DEMUXER 0 ++#define CONFIG_RSD_DEMUXER 0 ++#define CONFIG_RSO_DEMUXER 0 ++#define CONFIG_RTP_DEMUXER 0 ++#define CONFIG_RTSP_DEMUXER 0 ++#define CONFIG_S337M_DEMUXER 0 ++#define CONFIG_SAMI_DEMUXER 0 ++#define CONFIG_SAP_DEMUXER 0 ++#define CONFIG_SBC_DEMUXER 0 ++#define CONFIG_SBG_DEMUXER 0 ++#define CONFIG_SCC_DEMUXER 0 ++#define CONFIG_SCD_DEMUXER 0 ++#define CONFIG_SDP_DEMUXER 0 ++#define CONFIG_SDR2_DEMUXER 0 ++#define CONFIG_SDS_DEMUXER 0 ++#define CONFIG_SDX_DEMUXER 0 ++#define CONFIG_SEGAFILM_DEMUXER 0 ++#define CONFIG_SER_DEMUXER 0 ++#define CONFIG_SGA_DEMUXER 0 ++#define CONFIG_SHORTEN_DEMUXER 0 ++#define CONFIG_SIFF_DEMUXER 0 ++#define CONFIG_SIMBIOSIS_IMX_DEMUXER 0 ++#define CONFIG_SLN_DEMUXER 0 ++#define CONFIG_SMACKER_DEMUXER 0 ++#define CONFIG_SMJPEG_DEMUXER 0 ++#define CONFIG_SMUSH_DEMUXER 0 ++#define CONFIG_SOL_DEMUXER 0 ++#define CONFIG_SOX_DEMUXER 0 ++#define CONFIG_SPDIF_DEMUXER 0 ++#define CONFIG_SRT_DEMUXER 0 ++#define CONFIG_STR_DEMUXER 0 ++#define CONFIG_STL_DEMUXER 0 ++#define CONFIG_SUBVIEWER1_DEMUXER 0 ++#define CONFIG_SUBVIEWER_DEMUXER 0 ++#define CONFIG_SUP_DEMUXER 0 ++#define CONFIG_SVAG_DEMUXER 0 ++#define CONFIG_SVS_DEMUXER 0 ++#define CONFIG_SWF_DEMUXER 0 ++#define CONFIG_TAK_DEMUXER 0 ++#define CONFIG_TEDCAPTIONS_DEMUXER 0 ++#define CONFIG_THP_DEMUXER 0 ++#define CONFIG_THREEDOSTR_DEMUXER 0 ++#define CONFIG_TIERTEXSEQ_DEMUXER 0 ++#define CONFIG_TMV_DEMUXER 0 ++#define CONFIG_TRUEHD_DEMUXER 0 ++#define CONFIG_TTA_DEMUXER 0 ++#define CONFIG_TXD_DEMUXER 0 ++#define CONFIG_TTY_DEMUXER 0 ++#define CONFIG_TY_DEMUXER 0 ++#define CONFIG_V210_DEMUXER 0 ++#define CONFIG_V210X_DEMUXER 0 ++#define CONFIG_VAG_DEMUXER 0 ++#define CONFIG_VC1_DEMUXER 0 ++#define CONFIG_VC1T_DEMUXER 0 ++#define CONFIG_VIVIDAS_DEMUXER 0 ++#define CONFIG_VIVO_DEMUXER 0 ++#define CONFIG_VMD_DEMUXER 0 ++#define CONFIG_VOBSUB_DEMUXER 0 ++#define CONFIG_VOC_DEMUXER 0 ++#define CONFIG_VPK_DEMUXER 0 ++#define CONFIG_VPLAYER_DEMUXER 0 ++#define CONFIG_VQF_DEMUXER 0 ++#define CONFIG_W64_DEMUXER 0 ++#define CONFIG_WAV_DEMUXER 0 ++#define CONFIG_WC3_DEMUXER 0 ++#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 ++#define CONFIG_WEBVTT_DEMUXER 0 ++#define CONFIG_WSAUD_DEMUXER 0 ++#define CONFIG_WSD_DEMUXER 0 ++#define CONFIG_WSVQA_DEMUXER 0 ++#define CONFIG_WTV_DEMUXER 0 ++#define CONFIG_WVE_DEMUXER 0 ++#define CONFIG_WV_DEMUXER 0 ++#define CONFIG_XA_DEMUXER 0 ++#define CONFIG_XBIN_DEMUXER 0 ++#define CONFIG_XMV_DEMUXER 0 ++#define CONFIG_XVAG_DEMUXER 0 ++#define CONFIG_XWMA_DEMUXER 0 ++#define CONFIG_YOP_DEMUXER 0 ++#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 ++#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_CRI_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_GEM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_JPEGXL_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PGX_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PHOTOCD_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_QOI_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_VBN_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_XBM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 ++#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 ++#define CONFIG_LIBGME_DEMUXER 0 ++#define CONFIG_LIBMODPLUG_DEMUXER 0 ++#define CONFIG_LIBOPENMPT_DEMUXER 0 ++#define CONFIG_VAPOURSYNTH_DEMUXER 0 ++#define CONFIG_A64_MUXER 0 ++#define CONFIG_AC3_MUXER 0 ++#define CONFIG_ADTS_MUXER 0 ++#define CONFIG_ADX_MUXER 0 ++#define CONFIG_AIFF_MUXER 0 ++#define CONFIG_ALP_MUXER 0 ++#define CONFIG_AMR_MUXER 0 ++#define CONFIG_AMV_MUXER 0 ++#define CONFIG_APM_MUXER 0 ++#define CONFIG_APNG_MUXER 0 ++#define CONFIG_APTX_MUXER 0 ++#define CONFIG_APTX_HD_MUXER 0 ++#define CONFIG_ARGO_ASF_MUXER 0 ++#define CONFIG_ARGO_CVG_MUXER 0 ++#define CONFIG_ASF_MUXER 0 ++#define CONFIG_ASS_MUXER 0 ++#define CONFIG_AST_MUXER 0 ++#define CONFIG_ASF_STREAM_MUXER 0 ++#define CONFIG_AU_MUXER 0 ++#define CONFIG_AVI_MUXER 0 ++#define CONFIG_AVIF_MUXER 0 ++#define CONFIG_AVM2_MUXER 0 ++#define CONFIG_AVS2_MUXER 0 ++#define CONFIG_AVS3_MUXER 0 ++#define CONFIG_BIT_MUXER 0 ++#define CONFIG_CAF_MUXER 0 ++#define CONFIG_CAVSVIDEO_MUXER 0 ++#define CONFIG_CODEC2_MUXER 0 ++#define CONFIG_CODEC2RAW_MUXER 0 ++#define CONFIG_CRC_MUXER 0 ++#define CONFIG_DASH_MUXER 0 ++#define CONFIG_DATA_MUXER 0 ++#define CONFIG_DAUD_MUXER 0 ++#define CONFIG_DFPWM_MUXER 0 ++#define CONFIG_DIRAC_MUXER 0 ++#define CONFIG_DNXHD_MUXER 0 ++#define CONFIG_DTS_MUXER 0 ++#define CONFIG_DV_MUXER 0 ++#define CONFIG_EAC3_MUXER 0 ++#define CONFIG_F4V_MUXER 0 ++#define CONFIG_FFMETADATA_MUXER 0 ++#define CONFIG_FIFO_MUXER 0 ++#define CONFIG_FIFO_TEST_MUXER 0 ++#define CONFIG_FILMSTRIP_MUXER 0 ++#define CONFIG_FITS_MUXER 0 ++#define CONFIG_FLAC_MUXER 0 ++#define CONFIG_FLV_MUXER 0 ++#define CONFIG_FRAMECRC_MUXER 0 ++#define CONFIG_FRAMEHASH_MUXER 0 ++#define CONFIG_FRAMEMD5_MUXER 0 ++#define CONFIG_G722_MUXER 0 ++#define CONFIG_G723_1_MUXER 0 ++#define CONFIG_G726_MUXER 0 ++#define CONFIG_G726LE_MUXER 0 ++#define CONFIG_GIF_MUXER 0 ++#define CONFIG_GSM_MUXER 0 ++#define CONFIG_GXF_MUXER 0 ++#define CONFIG_H261_MUXER 0 ++#define CONFIG_H263_MUXER 0 ++#define CONFIG_H264_MUXER 0 ++#define CONFIG_HASH_MUXER 0 ++#define CONFIG_HDS_MUXER 0 ++#define CONFIG_HEVC_MUXER 0 ++#define CONFIG_HLS_MUXER 0 ++#define CONFIG_ICO_MUXER 0 ++#define CONFIG_ILBC_MUXER 0 ++#define CONFIG_IMAGE2_MUXER 0 ++#define CONFIG_IMAGE2PIPE_MUXER 0 ++#define CONFIG_IPOD_MUXER 0 ++#define CONFIG_IRCAM_MUXER 0 ++#define CONFIG_ISMV_MUXER 0 ++#define CONFIG_IVF_MUXER 0 ++#define CONFIG_JACOSUB_MUXER 0 ++#define CONFIG_KVAG_MUXER 0 ++#define CONFIG_LATM_MUXER 0 ++#define CONFIG_LRC_MUXER 0 ++#define CONFIG_M4V_MUXER 0 ++#define CONFIG_MD5_MUXER 0 ++#define CONFIG_MATROSKA_MUXER 0 ++#define CONFIG_MATROSKA_AUDIO_MUXER 0 ++#define CONFIG_MICRODVD_MUXER 0 ++#define CONFIG_MJPEG_MUXER 0 ++#define CONFIG_MLP_MUXER 0 ++#define CONFIG_MMF_MUXER 0 ++#define CONFIG_MOV_MUXER 0 ++#define CONFIG_MP2_MUXER 0 ++#define CONFIG_MP3_MUXER 0 ++#define CONFIG_MP4_MUXER 0 ++#define CONFIG_MPEG1SYSTEM_MUXER 0 ++#define CONFIG_MPEG1VCD_MUXER 0 ++#define CONFIG_MPEG1VIDEO_MUXER 0 ++#define CONFIG_MPEG2DVD_MUXER 0 ++#define CONFIG_MPEG2SVCD_MUXER 0 ++#define CONFIG_MPEG2VIDEO_MUXER 0 ++#define CONFIG_MPEG2VOB_MUXER 0 ++#define CONFIG_MPEGTS_MUXER 0 ++#define CONFIG_MPJPEG_MUXER 0 ++#define CONFIG_MXF_MUXER 0 ++#define CONFIG_MXF_D10_MUXER 0 ++#define CONFIG_MXF_OPATOM_MUXER 0 ++#define CONFIG_NULL_MUXER 0 ++#define CONFIG_NUT_MUXER 0 ++#define CONFIG_OBU_MUXER 0 ++#define CONFIG_OGA_MUXER 0 ++#define CONFIG_OGG_MUXER 0 ++#define CONFIG_OGV_MUXER 0 ++#define CONFIG_OMA_MUXER 0 ++#define CONFIG_OPUS_MUXER 0 ++#define CONFIG_PCM_ALAW_MUXER 0 ++#define CONFIG_PCM_MULAW_MUXER 0 ++#define CONFIG_PCM_VIDC_MUXER 0 ++#define CONFIG_PCM_F64BE_MUXER 0 ++#define CONFIG_PCM_F64LE_MUXER 0 ++#define CONFIG_PCM_F32BE_MUXER 0 ++#define CONFIG_PCM_F32LE_MUXER 0 ++#define CONFIG_PCM_S32BE_MUXER 0 ++#define CONFIG_PCM_S32LE_MUXER 0 ++#define CONFIG_PCM_S24BE_MUXER 0 ++#define CONFIG_PCM_S24LE_MUXER 0 ++#define CONFIG_PCM_S16BE_MUXER 0 ++#define CONFIG_PCM_S16LE_MUXER 0 ++#define CONFIG_PCM_S8_MUXER 0 ++#define CONFIG_PCM_U32BE_MUXER 0 ++#define CONFIG_PCM_U32LE_MUXER 0 ++#define CONFIG_PCM_U24BE_MUXER 0 ++#define CONFIG_PCM_U24LE_MUXER 0 ++#define CONFIG_PCM_U16BE_MUXER 0 ++#define CONFIG_PCM_U16LE_MUXER 0 ++#define CONFIG_PCM_U8_MUXER 0 ++#define CONFIG_PSP_MUXER 0 ++#define CONFIG_RAWVIDEO_MUXER 0 ++#define CONFIG_RM_MUXER 0 ++#define CONFIG_ROQ_MUXER 0 ++#define CONFIG_RSO_MUXER 0 ++#define CONFIG_RTP_MUXER 0 ++#define CONFIG_RTP_MPEGTS_MUXER 0 ++#define CONFIG_RTSP_MUXER 0 ++#define CONFIG_SAP_MUXER 0 ++#define CONFIG_SBC_MUXER 0 ++#define CONFIG_SCC_MUXER 0 ++#define CONFIG_SEGAFILM_MUXER 0 ++#define CONFIG_SEGMENT_MUXER 0 ++#define CONFIG_STREAM_SEGMENT_MUXER 0 ++#define CONFIG_SMJPEG_MUXER 0 ++#define CONFIG_SMOOTHSTREAMING_MUXER 0 ++#define CONFIG_SOX_MUXER 0 ++#define CONFIG_SPX_MUXER 0 ++#define CONFIG_SPDIF_MUXER 0 ++#define CONFIG_SRT_MUXER 0 ++#define CONFIG_STREAMHASH_MUXER 0 ++#define CONFIG_SUP_MUXER 0 ++#define CONFIG_SWF_MUXER 0 ++#define CONFIG_TEE_MUXER 0 ++#define CONFIG_TG2_MUXER 0 ++#define CONFIG_TGP_MUXER 0 ++#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 ++#define CONFIG_TRUEHD_MUXER 0 ++#define CONFIG_TTA_MUXER 0 ++#define CONFIG_TTML_MUXER 0 ++#define CONFIG_UNCODEDFRAMECRC_MUXER 0 ++#define CONFIG_VC1_MUXER 0 ++#define CONFIG_VC1T_MUXER 0 ++#define CONFIG_VOC_MUXER 0 ++#define CONFIG_W64_MUXER 0 ++#define CONFIG_WAV_MUXER 0 ++#define CONFIG_WEBM_MUXER 0 ++#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 ++#define CONFIG_WEBM_CHUNK_MUXER 0 ++#define CONFIG_WEBP_MUXER 0 ++#define CONFIG_WEBVTT_MUXER 0 ++#define CONFIG_WSAUD_MUXER 0 ++#define CONFIG_WTV_MUXER 0 ++#define CONFIG_WV_MUXER 0 ++#define CONFIG_YUV4MPEGPIPE_MUXER 0 ++#define CONFIG_CHROMAPRINT_MUXER 0 ++#define CONFIG_ASYNC_PROTOCOL 0 ++#define CONFIG_BLURAY_PROTOCOL 0 ++#define CONFIG_CACHE_PROTOCOL 0 ++#define CONFIG_CONCAT_PROTOCOL 0 ++#define CONFIG_CONCATF_PROTOCOL 0 ++#define CONFIG_CRYPTO_PROTOCOL 0 ++#define CONFIG_DATA_PROTOCOL 0 ++#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 ++#define CONFIG_FFRTMPHTTP_PROTOCOL 0 ++#define CONFIG_FILE_PROTOCOL 0 ++#define CONFIG_FTP_PROTOCOL 0 ++#define CONFIG_GOPHER_PROTOCOL 0 ++#define CONFIG_GOPHERS_PROTOCOL 0 ++#define CONFIG_HLS_PROTOCOL 0 ++#define CONFIG_HTTP_PROTOCOL 0 ++#define CONFIG_HTTPPROXY_PROTOCOL 0 ++#define CONFIG_HTTPS_PROTOCOL 0 ++#define CONFIG_ICECAST_PROTOCOL 0 ++#define CONFIG_MMSH_PROTOCOL 0 ++#define CONFIG_MMST_PROTOCOL 0 ++#define CONFIG_MD5_PROTOCOL 0 ++#define CONFIG_PIPE_PROTOCOL 0 ++#define CONFIG_PROMPEG_PROTOCOL 0 ++#define CONFIG_RTMP_PROTOCOL 0 ++#define CONFIG_RTMPE_PROTOCOL 0 ++#define CONFIG_RTMPS_PROTOCOL 0 ++#define CONFIG_RTMPT_PROTOCOL 0 ++#define CONFIG_RTMPTE_PROTOCOL 0 ++#define CONFIG_RTMPTS_PROTOCOL 0 ++#define CONFIG_RTP_PROTOCOL 0 ++#define CONFIG_SCTP_PROTOCOL 0 ++#define CONFIG_SRTP_PROTOCOL 0 ++#define CONFIG_SUBFILE_PROTOCOL 0 ++#define CONFIG_TEE_PROTOCOL 0 ++#define CONFIG_TCP_PROTOCOL 0 ++#define CONFIG_TLS_PROTOCOL 0 ++#define CONFIG_UDP_PROTOCOL 0 ++#define CONFIG_UDPLITE_PROTOCOL 0 ++#define CONFIG_UNIX_PROTOCOL 0 ++#define CONFIG_LIBAMQP_PROTOCOL 0 ++#define CONFIG_LIBRIST_PROTOCOL 0 ++#define CONFIG_LIBRTMP_PROTOCOL 0 ++#define CONFIG_LIBRTMPE_PROTOCOL 0 ++#define CONFIG_LIBRTMPS_PROTOCOL 0 ++#define CONFIG_LIBRTMPT_PROTOCOL 0 ++#define CONFIG_LIBRTMPTE_PROTOCOL 0 ++#define CONFIG_LIBSRT_PROTOCOL 0 ++#define CONFIG_LIBSSH_PROTOCOL 0 ++#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 ++#define CONFIG_LIBZMQ_PROTOCOL 0 ++#define CONFIG_IPFS_PROTOCOL 0 ++#define CONFIG_IPNS_PROTOCOL 0 ++#endif /* FFMPEG_CONFIG_COMPONENTS_H */ +diff -Naur a/media/ffvpx/config_components.h b/media/ffvpx/config_components.h +--- a/media/ffvpx/config_components.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_components.h 2023-04-06 12:49:58.993149715 +0200 +@@ -0,0 +1,27 @@ ++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* vim:set ts=2 sw=2 sts=2 et cindent: */ ++/* This Source Code Form is subject to the terms of the Mozilla Public ++ * License, v. 2.0. If a copy of the MPL was not distributed with this ++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef MOZ_FFVPX_CONFIG__COMPONENTS_H ++#define MOZ_FFVPX_CONFIG__COMPONENTS_H ++ ++ ++#ifdef CONFIG_VAAPI ++#undef CONFIG_VAAPI ++#undef CONFIG_VAAPI_1 ++#undef CONFIG_VP8_VAAPI_HWACCEL ++#undef CONFIG_VP9_VAAPI_HWACCEL ++#undef CONFIG_AV1_VAAPI_HWACCEL ++#endif ++ ++#if defined(MOZ_FFVPX_AUDIOONLY) ++# include "config_components_audio_only.h" ++#else ++# include "config_components_audio_video.h" ++#endif ++ ++#include "config_override.h" ++ ++#endif // MOZ_FFVPX_CONFIG__COMPONENTS_H +diff -Naur a/media/ffvpx/config_darwin_aarch64.h b/media/ffvpx/config_darwin_aarch64.h +--- a/media/ffvpx/config_darwin_aarch64.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_darwin_aarch64.h 2023-04-06 12:49:19.192546469 +0200 +@@ -0,0 +1,740 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_H ++#define FFMPEG_CONFIG_H ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --enable-neon" ++#define FFMPEG_LICENSE "LGPL version 2.1 or later" ++#define CONFIG_THIS_YEAR 2022 ++#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" ++#define AVCONV_DATADIR "/usr/local/share/ffmpeg" ++#define CC_IDENT "Apple clang version 13.1.6 (clang-1316.0.21.2.5)" ++#define OS_NAME darwin ++#define av_restrict restrict ++#define EXTERN_PREFIX "_" ++#define EXTERN_ASM _ ++#define BUILDSUF "" ++#define SLIBSUF ".dylib" ++#define HAVE_MMX2 HAVE_MMXEXT ++#define SWS_MAX_FILTER_SIZE 256 ++#define ARCH_AARCH64 1 ++#define ARCH_ALPHA 0 ++#define ARCH_ARM 0 ++#define ARCH_AVR32 0 ++#define ARCH_AVR32_AP 0 ++#define ARCH_AVR32_UC 0 ++#define ARCH_BFIN 0 ++#define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 ++#define ARCH_M68K 0 ++#define ARCH_MIPS 0 ++#define ARCH_MIPS64 0 ++#define ARCH_PARISC 0 ++#define ARCH_PPC 0 ++#define ARCH_PPC64 0 ++#define ARCH_RISCV 0 ++#define ARCH_S390 0 ++#define ARCH_SH4 0 ++#define ARCH_SPARC 0 ++#define ARCH_SPARC64 0 ++#define ARCH_TILEGX 0 ++#define ARCH_TILEPRO 0 ++#define ARCH_TOMI 0 ++#define ARCH_X86 0 ++#define ARCH_X86_32 0 ++#define ARCH_X86_64 0 ++#define HAVE_ARMV5TE 0 ++#define HAVE_ARMV6 0 ++#define HAVE_ARMV6T2 0 ++#define HAVE_ARMV8 1 ++#define HAVE_NEON 1 ++#define HAVE_VFP 1 ++#define HAVE_VFPV3 0 ++#define HAVE_SETEND 0 ++#define HAVE_ALTIVEC 0 ++#define HAVE_DCBZL 0 ++#define HAVE_LDBRX 0 ++#define HAVE_POWER8 0 ++#define HAVE_PPC4XX 0 ++#define HAVE_VSX 0 ++#define HAVE_AESNI 0 ++#define HAVE_AMD3DNOW 0 ++#define HAVE_AMD3DNOWEXT 0 ++#define HAVE_AVX 0 ++#define HAVE_AVX2 0 ++#define HAVE_AVX512 0 ++#define HAVE_AVX512ICL 0 ++#define HAVE_FMA3 0 ++#define HAVE_FMA4 0 ++#define HAVE_MMX 0 ++#define HAVE_MMXEXT 0 ++#define HAVE_SSE 0 ++#define HAVE_SSE2 0 ++#define HAVE_SSE3 0 ++#define HAVE_SSE4 0 ++#define HAVE_SSE42 0 ++#define HAVE_SSSE3 0 ++#define HAVE_XOP 0 ++#define HAVE_CPUNOP 0 ++#define HAVE_I686 0 ++#define HAVE_MIPSFPU 0 ++#define HAVE_MIPS32R2 0 ++#define HAVE_MIPS32R5 0 ++#define HAVE_MIPS64R2 0 ++#define HAVE_MIPS32R6 0 ++#define HAVE_MIPS64R6 0 ++#define HAVE_MIPSDSP 0 ++#define HAVE_MIPSDSPR2 0 ++#define HAVE_MSA 0 ++#define HAVE_LOONGSON2 0 ++#define HAVE_LOONGSON3 0 ++#define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 ++#define HAVE_ARMV5TE_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 0 ++#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV8_EXTERNAL 1 ++#define HAVE_NEON_EXTERNAL 1 ++#define HAVE_VFP_EXTERNAL 1 ++#define HAVE_VFPV3_EXTERNAL 0 ++#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_ALTIVEC_EXTERNAL 0 ++#define HAVE_DCBZL_EXTERNAL 0 ++#define HAVE_LDBRX_EXTERNAL 0 ++#define HAVE_POWER8_EXTERNAL 0 ++#define HAVE_PPC4XX_EXTERNAL 0 ++#define HAVE_VSX_EXTERNAL 0 ++#define HAVE_AESNI_EXTERNAL 0 ++#define HAVE_AMD3DNOW_EXTERNAL 0 ++#define HAVE_AMD3DNOWEXT_EXTERNAL 0 ++#define HAVE_AVX_EXTERNAL 0 ++#define HAVE_AVX2_EXTERNAL 0 ++#define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_AVX512ICL_EXTERNAL 0 ++#define HAVE_FMA3_EXTERNAL 0 ++#define HAVE_FMA4_EXTERNAL 0 ++#define HAVE_MMX_EXTERNAL 0 ++#define HAVE_MMXEXT_EXTERNAL 0 ++#define HAVE_SSE_EXTERNAL 0 ++#define HAVE_SSE2_EXTERNAL 0 ++#define HAVE_SSE3_EXTERNAL 0 ++#define HAVE_SSE4_EXTERNAL 0 ++#define HAVE_SSE42_EXTERNAL 0 ++#define HAVE_SSSE3_EXTERNAL 0 ++#define HAVE_XOP_EXTERNAL 0 ++#define HAVE_CPUNOP_EXTERNAL 0 ++#define HAVE_I686_EXTERNAL 0 ++#define HAVE_MIPSFPU_EXTERNAL 0 ++#define HAVE_MIPS32R2_EXTERNAL 0 ++#define HAVE_MIPS32R5_EXTERNAL 0 ++#define HAVE_MIPS64R2_EXTERNAL 0 ++#define HAVE_MIPS32R6_EXTERNAL 0 ++#define HAVE_MIPS64R6_EXTERNAL 0 ++#define HAVE_MIPSDSP_EXTERNAL 0 ++#define HAVE_MIPSDSPR2_EXTERNAL 0 ++#define HAVE_MSA_EXTERNAL 0 ++#define HAVE_LOONGSON2_EXTERNAL 0 ++#define HAVE_LOONGSON3_EXTERNAL 0 ++#define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 ++#define HAVE_ARMV5TE_INLINE 0 ++#define HAVE_ARMV6_INLINE 0 ++#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV8_INLINE 1 ++#define HAVE_NEON_INLINE 1 ++#define HAVE_VFP_INLINE 1 ++#define HAVE_VFPV3_INLINE 0 ++#define HAVE_SETEND_INLINE 0 ++#define HAVE_ALTIVEC_INLINE 0 ++#define HAVE_DCBZL_INLINE 0 ++#define HAVE_LDBRX_INLINE 0 ++#define HAVE_POWER8_INLINE 0 ++#define HAVE_PPC4XX_INLINE 0 ++#define HAVE_VSX_INLINE 0 ++#define HAVE_AESNI_INLINE 0 ++#define HAVE_AMD3DNOW_INLINE 0 ++#define HAVE_AMD3DNOWEXT_INLINE 0 ++#define HAVE_AVX_INLINE 0 ++#define HAVE_AVX2_INLINE 0 ++#define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 ++#define HAVE_FMA3_INLINE 0 ++#define HAVE_FMA4_INLINE 0 ++#define HAVE_MMX_INLINE 0 ++#define HAVE_MMXEXT_INLINE 0 ++#define HAVE_SSE_INLINE 0 ++#define HAVE_SSE2_INLINE 0 ++#define HAVE_SSE3_INLINE 0 ++#define HAVE_SSE4_INLINE 0 ++#define HAVE_SSE42_INLINE 0 ++#define HAVE_SSSE3_INLINE 0 ++#define HAVE_XOP_INLINE 0 ++#define HAVE_CPUNOP_INLINE 0 ++#define HAVE_I686_INLINE 0 ++#define HAVE_MIPSFPU_INLINE 0 ++#define HAVE_MIPS32R2_INLINE 0 ++#define HAVE_MIPS32R5_INLINE 0 ++#define HAVE_MIPS64R2_INLINE 0 ++#define HAVE_MIPS32R6_INLINE 0 ++#define HAVE_MIPS64R6_INLINE 0 ++#define HAVE_MIPSDSP_INLINE 0 ++#define HAVE_MIPSDSPR2_INLINE 0 ++#define HAVE_MSA_INLINE 0 ++#define HAVE_LOONGSON2_INLINE 0 ++#define HAVE_LOONGSON3_INLINE 0 ++#define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 ++#define HAVE_ALIGNED_STACK 1 ++#define HAVE_FAST_64BIT 1 ++#define HAVE_FAST_CLZ 1 ++#define HAVE_FAST_CMOV 0 ++#define HAVE_LOCAL_ALIGNED 0 ++#define HAVE_SIMD_ALIGN_16 1 ++#define HAVE_SIMD_ALIGN_32 0 ++#define HAVE_SIMD_ALIGN_64 0 ++#define HAVE_ATOMIC_CAS_PTR 0 ++#define HAVE_MACHINE_RW_BARRIER 0 ++#define HAVE_MEMORYBARRIER 0 ++#define HAVE_MM_EMPTY 0 ++#define HAVE_RDTSC 0 ++#define HAVE_SEM_TIMEDWAIT 0 ++#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 ++#define HAVE_CABS 1 ++#define HAVE_CEXP 1 ++#define HAVE_INLINE_ASM 1 ++#define HAVE_SYMVER 1 ++#define HAVE_X86ASM 0 ++#define HAVE_BIGENDIAN 0 ++#define HAVE_FAST_UNALIGNED 1 ++#define HAVE_ARPA_INET_H 1 ++#define HAVE_ASM_TYPES_H 0 ++#define HAVE_CDIO_PARANOIA_H 0 ++#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 ++#define HAVE_CUDA_H 0 ++#define HAVE_DISPATCH_DISPATCH_H 1 ++#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 ++#define HAVE_DEV_IC_BT8XX_H 0 ++#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 ++#define HAVE_DIRECT_H 0 ++#define HAVE_DIRENT_H 1 ++#define HAVE_DXGIDEBUG_H 0 ++#define HAVE_DXVA_H 0 ++#define HAVE_ES2_GL_H 0 ++#define HAVE_GSM_H 0 ++#define HAVE_IO_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 0 ++#define HAVE_MACHINE_IOCTL_BT848_H 0 ++#define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_MALLOC_H 0 ++#define HAVE_OPENCV2_CORE_CORE_C_H 0 ++#define HAVE_OPENGL_GL3_H 0 ++#define HAVE_POLL_H 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_RESOURCE_H 1 ++#define HAVE_SYS_SELECT_H 1 ++#define HAVE_SYS_SOUNDCARD_H 0 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_UN_H 1 ++#define HAVE_SYS_VIDEOIO_H 0 ++#define HAVE_TERMIOS_H 1 ++#define HAVE_UDPLITE_H 0 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VALGRIND_VALGRIND_H 0 ++#define HAVE_WINDOWS_H 0 ++#define HAVE_WINSOCK2_H 0 ++#define HAVE_INTRINSICS_NEON 1 ++#define HAVE_ATANF 1 ++#define HAVE_ATAN2F 1 ++#define HAVE_CBRT 1 ++#define HAVE_CBRTF 1 ++#define HAVE_COPYSIGN 1 ++#define HAVE_COSF 1 ++#define HAVE_ERF 1 ++#define HAVE_EXP2 1 ++#define HAVE_EXP2F 1 ++#define HAVE_EXPF 1 ++#define HAVE_HYPOT 1 ++#define HAVE_ISFINITE 1 ++#define HAVE_ISINF 1 ++#define HAVE_ISNAN 1 ++#define HAVE_LDEXPF 1 ++#define HAVE_LLRINT 1 ++#define HAVE_LLRINTF 1 ++#define HAVE_LOG2 1 ++#define HAVE_LOG2F 1 ++#define HAVE_LOG10F 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_POWF 1 ++#define HAVE_RINT 1 ++#define HAVE_ROUND 1 ++#define HAVE_ROUNDF 1 ++#define HAVE_SINF 1 ++#define HAVE_TRUNC 1 ++#define HAVE_TRUNCF 1 ++#define HAVE_DOS_PATHS 0 ++#define HAVE_LIBC_MSVCRT 0 ++#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 ++#define HAVE_SECTION_DATA_REL_RO 0 ++#define HAVE_THREADS 1 ++#define HAVE_UWP 0 ++#define HAVE_WINRT 0 ++#define HAVE_ACCESS 1 ++#define HAVE_ALIGNED_MALLOC 0 ++#define HAVE_ARC4RANDOM 1 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_CLOSESOCKET 0 ++#define HAVE_COMMANDLINETOARGVW 0 ++#define HAVE_FCNTL 1 ++#define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 0 ++#define HAVE_GETENV 1 ++#define HAVE_GETHRTIME 0 ++#define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 ++#define HAVE_GETPROCESSAFFINITYMASK 0 ++#define HAVE_GETPROCESSMEMORYINFO 0 ++#define HAVE_GETPROCESSTIMES 0 ++#define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 ++#define HAVE_GETSYSTEMTIMEASFILETIME 0 ++#define HAVE_GETTIMEOFDAY 1 ++#define HAVE_GLOB 1 ++#define HAVE_GLXGETPROCADDRESS 0 ++#define HAVE_GMTIME_R 1 ++#define HAVE_INET_ATON 1 ++#define HAVE_ISATTY 1 ++#define HAVE_KBHIT 0 ++#define HAVE_LOCALTIME_R 1 ++#define HAVE_LSTAT 1 ++#define HAVE_LZO1X_999_COMPRESS 0 ++#define HAVE_MACH_ABSOLUTE_TIME 1 ++#define HAVE_MAPVIEWOFFILE 0 ++#define HAVE_MEMALIGN 0 ++#define HAVE_MKSTEMP 1 ++#define HAVE_MMAP 1 ++#define HAVE_MPROTECT 1 ++#define HAVE_NANOSLEEP 1 ++#define HAVE_PEEKNAMEDPIPE 0 ++#define HAVE_POSIX_MEMALIGN 1 ++#define HAVE_PTHREAD_CANCEL 1 ++#define HAVE_SCHED_GETAFFINITY 0 ++#define HAVE_SECITEMIMPORT 0 ++#define HAVE_SETCONSOLETEXTATTRIBUTE 0 ++#define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 ++#define HAVE_SETMODE 0 ++#define HAVE_SETRLIMIT 1 ++#define HAVE_SLEEP 0 ++#define HAVE_STRERROR_R 1 ++#define HAVE_SYSCONF 1 ++#define HAVE_SYSCTL 1 ++#define HAVE_USLEEP 1 ++#define HAVE_UTGETOSTYPEFROMSTRING 0 ++#define HAVE_VIRTUALALLOC 0 ++#define HAVE_WGLGETPROCADDRESS 0 ++#define HAVE_BCRYPT 0 ++#define HAVE_VAAPI_DRM 0 ++#define HAVE_VAAPI_X11 0 ++#define HAVE_VDPAU_X11 0 ++#define HAVE_PTHREADS 1 ++#define HAVE_OS2THREADS 0 ++#define HAVE_W32THREADS 0 ++#define HAVE_AS_ARCH_DIRECTIVE 0 ++#define HAVE_AS_DN_DIRECTIVE 0 ++#define HAVE_AS_FPU_DIRECTIVE 0 ++#define HAVE_AS_FUNC 0 ++#define HAVE_AS_OBJECT_ARCH 0 ++#define HAVE_ASM_MOD_Q 0 ++#define HAVE_BLOCKS_EXTENSION 1 ++#define HAVE_EBP_AVAILABLE 0 ++#define HAVE_EBX_AVAILABLE 0 ++#define HAVE_GNU_AS 0 ++#define HAVE_GNU_WINDRES 0 ++#define HAVE_IBM_ASM 0 ++#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 ++#define HAVE_INLINE_ASM_LABELS 1 ++#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 ++#define HAVE_PRAGMA_DEPRECATED 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 ++#define HAVE_SYMVER_ASM_LABEL 1 ++#define HAVE_SYMVER_GNU_ASM 0 ++#define HAVE_VFP_ARGS 0 ++#define HAVE_XFORM_ASM 0 ++#define HAVE_XMM_CLOBBERS 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 ++#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 ++#define HAVE_SOCKLEN_T 1 ++#define HAVE_STRUCT_ADDRINFO 1 ++#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 ++#define HAVE_STRUCT_IP_MREQ_SOURCE 1 ++#define HAVE_STRUCT_IPV6_MREQ 1 ++#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 ++#define HAVE_STRUCT_POLLFD 1 ++#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 ++#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 ++#define HAVE_STRUCT_SOCKADDR_IN6 1 ++#define HAVE_STRUCT_SOCKADDR_SA_LEN 1 ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 1 ++#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_OPENCL_D3D11 0 ++#define HAVE_OPENCL_DRM_ARM 0 ++#define HAVE_OPENCL_DRM_BEIGNET 0 ++#define HAVE_OPENCL_DXVA2 0 ++#define HAVE_OPENCL_VAAPI_BEIGNET 0 ++#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 ++#define HAVE_PERL 1 ++#define HAVE_POD2MAN 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 ++#define CONFIG_DOC 0 ++#define CONFIG_HTMLPAGES 0 ++#define CONFIG_MANPAGES 1 ++#define CONFIG_PODPAGES 1 ++#define CONFIG_TXTPAGES 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 ++#define CONFIG_AVIO_READING_EXAMPLE 1 ++#define CONFIG_DECODE_AUDIO_EXAMPLE 1 ++#define CONFIG_DECODE_VIDEO_EXAMPLE 1 ++#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 ++#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 ++#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 ++#define CONFIG_EXTRACT_MVS_EXAMPLE 0 ++#define CONFIG_FILTER_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 ++#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 ++#define CONFIG_HW_DECODE_EXAMPLE 0 ++#define CONFIG_METADATA_EXAMPLE 0 ++#define CONFIG_MUXING_EXAMPLE 0 ++#define CONFIG_QSVDEC_EXAMPLE 0 ++#define CONFIG_REMUXING_EXAMPLE 0 ++#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 ++#define CONFIG_SCALING_VIDEO_EXAMPLE 0 ++#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 ++#define CONFIG_TRANSCODING_EXAMPLE 0 ++#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 ++#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 ++#define CONFIG_AVISYNTH 0 ++#define CONFIG_FREI0R 0 ++#define CONFIG_LIBCDIO 0 ++#define CONFIG_LIBDAVS2 0 ++#define CONFIG_LIBRUBBERBAND 0 ++#define CONFIG_LIBVIDSTAB 0 ++#define CONFIG_LIBX264 0 ++#define CONFIG_LIBX265 0 ++#define CONFIG_LIBXAVS 0 ++#define CONFIG_LIBXAVS2 0 ++#define CONFIG_LIBXVID 0 ++#define CONFIG_DECKLINK 0 ++#define CONFIG_LIBFDK_AAC 0 ++#define CONFIG_LIBTLS 0 ++#define CONFIG_GMP 0 ++#define CONFIG_LIBARIBB24 0 ++#define CONFIG_LIBLENSFUN 0 ++#define CONFIG_LIBOPENCORE_AMRNB 0 ++#define CONFIG_LIBOPENCORE_AMRWB 0 ++#define CONFIG_LIBVO_AMRWBENC 0 ++#define CONFIG_MBEDTLS 0 ++#define CONFIG_RKMPP 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_CHROMAPRINT 0 ++#define CONFIG_GCRYPT 0 ++#define CONFIG_GNUTLS 0 ++#define CONFIG_JNI 0 ++#define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 ++#define CONFIG_LIBAOM 0 ++#define CONFIG_LIBASS 0 ++#define CONFIG_LIBBLURAY 0 ++#define CONFIG_LIBBS2B 0 ++#define CONFIG_LIBCACA 0 ++#define CONFIG_LIBCELT 0 ++#define CONFIG_LIBCODEC2 0 ++#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDC1394 0 ++#define CONFIG_LIBDRM 0 ++#define CONFIG_LIBFLITE 0 ++#define CONFIG_LIBFONTCONFIG 0 ++#define CONFIG_LIBFREETYPE 0 ++#define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 ++#define CONFIG_LIBGME 0 ++#define CONFIG_LIBGSM 0 ++#define CONFIG_LIBIEC61883 0 ++#define CONFIG_LIBILBC 0 ++#define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 ++#define CONFIG_LIBKLVANC 0 ++#define CONFIG_LIBKVAZAAR 0 ++#define CONFIG_LIBMODPLUG 0 ++#define CONFIG_LIBMP3LAME 0 ++#define CONFIG_LIBMYSOFA 0 ++#define CONFIG_LIBOPENCV 0 ++#define CONFIG_LIBOPENH264 0 ++#define CONFIG_LIBOPENJPEG 0 ++#define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 ++#define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 ++#define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 ++#define CONFIG_LIBRSVG 0 ++#define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 ++#define CONFIG_LIBSHINE 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_LIBSNAPPY 0 ++#define CONFIG_LIBSOXR 0 ++#define CONFIG_LIBSPEEX 0 ++#define CONFIG_LIBSRT 0 ++#define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 ++#define CONFIG_LIBTENSORFLOW 0 ++#define CONFIG_LIBTESSERACT 0 ++#define CONFIG_LIBTHEORA 0 ++#define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 ++#define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 ++#define CONFIG_LIBVORBIS 0 ++#define CONFIG_LIBVPX 0 ++#define CONFIG_LIBWEBP 0 ++#define CONFIG_LIBXML2 0 ++#define CONFIG_LIBZIMG 0 ++#define CONFIG_LIBZMQ 0 ++#define CONFIG_LIBZVBI 0 ++#define CONFIG_LV2 0 ++#define CONFIG_MEDIACODEC 0 ++#define CONFIG_OPENAL 0 ++#define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 ++#define CONFIG_POCKETSPHINX 0 ++#define CONFIG_VAPOURSYNTH 0 ++#define CONFIG_ALSA 0 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 ++#define CONFIG_ICONV 0 ++#define CONFIG_LIBXCB 0 ++#define CONFIG_LIBXCB_SHM 0 ++#define CONFIG_LIBXCB_SHAPE 0 ++#define CONFIG_LIBXCB_XFIXES 0 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 ++#define CONFIG_SDL2 0 ++#define CONFIG_SECURETRANSPORT 0 ++#define CONFIG_SNDIO 0 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 ++#define CONFIG_CUDA_NVCC 0 ++#define CONFIG_CUDA_SDK 0 ++#define CONFIG_LIBNPP 0 ++#define CONFIG_LIBMFX 0 ++#define CONFIG_MMAL 0 ++#define CONFIG_OMX 0 ++#define CONFIG_OPENCL 0 ++#define CONFIG_AMF 0 ++#define CONFIG_AUDIOTOOLBOX 0 ++#define CONFIG_CRYSTALHD 0 ++#define CONFIG_CUDA 0 ++#define CONFIG_CUDA_LLVM 0 ++#define CONFIG_CUVID 0 ++#define CONFIG_D3D11VA 0 ++#define CONFIG_DXVA2 0 ++#define CONFIG_FFNVCODEC 0 ++#define CONFIG_NVDEC 0 ++#define CONFIG_NVENC 0 ++#define CONFIG_VAAPI 0 ++#define CONFIG_VDPAU 0 ++#define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 ++#define CONFIG_V4L2_M2M 0 ++#define CONFIG_FTRAPV 0 ++#define CONFIG_GRAY 0 ++#define CONFIG_HARDCODED_TABLES 0 ++#define CONFIG_OMX_RPI 0 ++#define CONFIG_RUNTIME_CPUDETECT 1 ++#define CONFIG_SAFE_BITSTREAM_READER 1 ++#define CONFIG_SHARED 1 ++#define CONFIG_SMALL 0 ++#define CONFIG_STATIC 0 ++#define CONFIG_SWSCALE_ALPHA 1 ++#define CONFIG_GPL 0 ++#define CONFIG_NONFREE 0 ++#define CONFIG_VERSION3 0 ++#define CONFIG_AVDEVICE 0 ++#define CONFIG_AVFILTER 0 ++#define CONFIG_SWSCALE 0 ++#define CONFIG_POSTPROC 0 ++#define CONFIG_AVFORMAT 0 ++#define CONFIG_AVCODEC 1 ++#define CONFIG_SWRESAMPLE 0 ++#define CONFIG_AVUTIL 1 ++#define CONFIG_FFPLAY 0 ++#define CONFIG_FFPROBE 0 ++#define CONFIG_FFMPEG 0 ++#define CONFIG_DCT 1 ++#define CONFIG_DWT 0 ++#define CONFIG_ERROR_RESILIENCE 0 ++#define CONFIG_FAAN 1 ++#define CONFIG_FAST_UNALIGNED 1 ++#define CONFIG_FFT 1 ++#define CONFIG_LSP 0 ++#define CONFIG_MDCT 0 ++#define CONFIG_PIXELUTILS 0 ++#define CONFIG_NETWORK 0 ++#define CONFIG_RDFT 1 ++#define CONFIG_AUTODETECT 0 ++#define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 ++#define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 ++#define CONFIG_MEMORY_POISONING 0 ++#define CONFIG_NEON_CLOBBER_TEST 0 ++#define CONFIG_OSSFUZZ 0 ++#define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 ++#define CONFIG_THUMB 0 ++#define CONFIG_VALGRIND_BACKTRACE 0 ++#define CONFIG_XMM_CLOBBER_TEST 0 ++#define CONFIG_BSFS 0 ++#define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 ++#define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 ++#define CONFIG_AANDCTTABLES 0 ++#define CONFIG_AC3DSP 0 ++#define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 ++#define CONFIG_AUDIO_FRAME_QUEUE 0 ++#define CONFIG_AUDIODSP 0 ++#define CONFIG_BLOCKDSP 0 ++#define CONFIG_BSWAPDSP 0 ++#define CONFIG_CABAC 0 ++#define CONFIG_CBS 0 ++#define CONFIG_CBS_AV1 0 ++#define CONFIG_CBS_H264 0 ++#define CONFIG_CBS_H265 0 ++#define CONFIG_CBS_JPEG 0 ++#define CONFIG_CBS_MPEG2 0 ++#define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 ++#define CONFIG_DIRAC_PARSE 0 ++#define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 ++#define CONFIG_DVPROFILE 0 ++#define CONFIG_EXIF 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 ++#define CONFIG_FLACDSP 1 ++#define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 ++#define CONFIG_G722DSP 0 ++#define CONFIG_GOLOMB 0 ++#define CONFIG_GPLV3 0 ++#define CONFIG_H263DSP 0 ++#define CONFIG_H264CHROMA 0 ++#define CONFIG_H264DSP 0 ++#define CONFIG_H264PARSE 0 ++#define CONFIG_H264PRED 1 ++#define CONFIG_H264QPEL 0 ++#define CONFIG_HEVCPARSE 0 ++#define CONFIG_HPELDSP 0 ++#define CONFIG_HUFFMAN 0 ++#define CONFIG_HUFFYUVDSP 0 ++#define CONFIG_HUFFYUVENCDSP 0 ++#define CONFIG_IDCTDSP 1 ++#define CONFIG_IIRFILTER 0 ++#define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 ++#define CONFIG_INTRAX8 0 ++#define CONFIG_ISO_MEDIA 0 ++#define CONFIG_IVIDSP 0 ++#define CONFIG_JPEGTABLES 0 ++#define CONFIG_LGPLV3 0 ++#define CONFIG_LIBX262 0 ++#define CONFIG_LLAUDDSP 0 ++#define CONFIG_LLVIDDSP 0 ++#define CONFIG_LLVIDENCDSP 0 ++#define CONFIG_LPC 0 ++#define CONFIG_LZF 0 ++#define CONFIG_ME_CMP 0 ++#define CONFIG_MPEG_ER 0 ++#define CONFIG_MPEGAUDIO 1 ++#define CONFIG_MPEGAUDIODSP 1 ++#define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 ++#define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 ++#define CONFIG_MPEGVIDEOENC 0 ++#define CONFIG_MSS34DSP 0 ++#define CONFIG_PIXBLOCKDSP 0 ++#define CONFIG_QPELDSP 0 ++#define CONFIG_QSV 0 ++#define CONFIG_QSVDEC 0 ++#define CONFIG_QSVENC 0 ++#define CONFIG_QSVVPP 0 ++#define CONFIG_RANGECODER 0 ++#define CONFIG_RIFFDEC 0 ++#define CONFIG_RIFFENC 0 ++#define CONFIG_RTPDEC 0 ++#define CONFIG_RTPENC_CHAIN 0 ++#define CONFIG_RV34DSP 0 ++#define CONFIG_SCENE_SAD 0 ++#define CONFIG_SINEWIN 0 ++#define CONFIG_SNAPPY 0 ++#define CONFIG_SRTP 0 ++#define CONFIG_STARTCODE 0 ++#define CONFIG_TEXTUREDSP 0 ++#define CONFIG_TEXTUREDSPENC 0 ++#define CONFIG_TPELDSP 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VAAPI_ENCODE 0 ++#define CONFIG_VC1DSP 0 ++#define CONFIG_VIDEODSP 1 ++#define CONFIG_VP3DSP 0 ++#define CONFIG_VP56DSP 0 ++#define CONFIG_VP8DSP 1 ++#define CONFIG_WMA_FREQS 0 ++#define CONFIG_WMV2DSP 0 ++#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_generic.h b/media/ffvpx/config_generic.h +--- a/media/ffvpx/config_generic.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_generic.h 2023-04-06 12:49:19.192546469 +0200 +@@ -0,0 +1,740 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_H ++#define FFMPEG_CONFIG_H ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='mp3,flac' --disable-static --enable-shared --disable-autodetect --enable-small --disable-asm" ++#define FFMPEG_LICENSE "LGPL version 2.1 or later" ++#define CONFIG_THIS_YEAR 2022 ++#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" ++#define AVCONV_DATADIR "/usr/local/share/ffmpeg" ++#define CC_IDENT "Apple clang version 13.1.6 (clang-1316.0.21.2.5)" ++#define OS_NAME darwin ++#define av_restrict restrict ++#define EXTERN_PREFIX "_" ++#define EXTERN_ASM _ ++#define BUILDSUF "" ++#define SLIBSUF ".dylib" ++#define HAVE_MMX2 HAVE_MMXEXT ++#define SWS_MAX_FILTER_SIZE 256 ++#define ARCH_AARCH64 0 ++#define ARCH_ALPHA 0 ++#define ARCH_ARM 0 ++#define ARCH_AVR32 0 ++#define ARCH_AVR32_AP 0 ++#define ARCH_AVR32_UC 0 ++#define ARCH_BFIN 0 ++#define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 ++#define ARCH_M68K 0 ++#define ARCH_MIPS 0 ++#define ARCH_MIPS64 0 ++#define ARCH_PARISC 0 ++#define ARCH_PPC 0 ++#define ARCH_PPC64 0 ++#define ARCH_RISCV 0 ++#define ARCH_S390 0 ++#define ARCH_SH4 0 ++#define ARCH_SPARC 0 ++#define ARCH_SPARC64 0 ++#define ARCH_TILEGX 0 ++#define ARCH_TILEPRO 0 ++#define ARCH_TOMI 0 ++#define ARCH_X86 0 ++#define ARCH_X86_32 0 ++#define ARCH_X86_64 0 ++#define HAVE_ARMV5TE 0 ++#define HAVE_ARMV6 0 ++#define HAVE_ARMV6T2 0 ++#define HAVE_ARMV8 0 ++#define HAVE_NEON 0 ++#define HAVE_VFP 0 ++#define HAVE_VFPV3 0 ++#define HAVE_SETEND 0 ++#define HAVE_ALTIVEC 0 ++#define HAVE_DCBZL 0 ++#define HAVE_LDBRX 0 ++#define HAVE_POWER8 0 ++#define HAVE_PPC4XX 0 ++#define HAVE_VSX 0 ++#define HAVE_AESNI 0 ++#define HAVE_AMD3DNOW 0 ++#define HAVE_AMD3DNOWEXT 0 ++#define HAVE_AVX 0 ++#define HAVE_AVX2 0 ++#define HAVE_AVX512 0 ++#define HAVE_AVX512ICL 0 ++#define HAVE_FMA3 0 ++#define HAVE_FMA4 0 ++#define HAVE_MMX 0 ++#define HAVE_MMXEXT 0 ++#define HAVE_SSE 0 ++#define HAVE_SSE2 0 ++#define HAVE_SSE3 0 ++#define HAVE_SSE4 0 ++#define HAVE_SSE42 0 ++#define HAVE_SSSE3 0 ++#define HAVE_XOP 0 ++#define HAVE_CPUNOP 0 ++#define HAVE_I686 0 ++#define HAVE_MIPSFPU 0 ++#define HAVE_MIPS32R2 0 ++#define HAVE_MIPS32R5 0 ++#define HAVE_MIPS64R2 0 ++#define HAVE_MIPS32R6 0 ++#define HAVE_MIPS64R6 0 ++#define HAVE_MIPSDSP 0 ++#define HAVE_MIPSDSPR2 0 ++#define HAVE_MSA 0 ++#define HAVE_LOONGSON2 0 ++#define HAVE_LOONGSON3 0 ++#define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 ++#define HAVE_ARMV5TE_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 0 ++#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV8_EXTERNAL 1 ++#define HAVE_NEON_EXTERNAL 1 ++#define HAVE_VFP_EXTERNAL 1 ++#define HAVE_VFPV3_EXTERNAL 0 ++#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_ALTIVEC_EXTERNAL 0 ++#define HAVE_DCBZL_EXTERNAL 0 ++#define HAVE_LDBRX_EXTERNAL 0 ++#define HAVE_POWER8_EXTERNAL 0 ++#define HAVE_PPC4XX_EXTERNAL 0 ++#define HAVE_VSX_EXTERNAL 0 ++#define HAVE_AESNI_EXTERNAL 0 ++#define HAVE_AMD3DNOW_EXTERNAL 0 ++#define HAVE_AMD3DNOWEXT_EXTERNAL 0 ++#define HAVE_AVX_EXTERNAL 0 ++#define HAVE_AVX2_EXTERNAL 0 ++#define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_AVX512ICL_EXTERNAL 0 ++#define HAVE_FMA3_EXTERNAL 0 ++#define HAVE_FMA4_EXTERNAL 0 ++#define HAVE_MMX_EXTERNAL 0 ++#define HAVE_MMXEXT_EXTERNAL 0 ++#define HAVE_SSE_EXTERNAL 0 ++#define HAVE_SSE2_EXTERNAL 0 ++#define HAVE_SSE3_EXTERNAL 0 ++#define HAVE_SSE4_EXTERNAL 0 ++#define HAVE_SSE42_EXTERNAL 0 ++#define HAVE_SSSE3_EXTERNAL 0 ++#define HAVE_XOP_EXTERNAL 0 ++#define HAVE_CPUNOP_EXTERNAL 0 ++#define HAVE_I686_EXTERNAL 0 ++#define HAVE_MIPSFPU_EXTERNAL 0 ++#define HAVE_MIPS32R2_EXTERNAL 0 ++#define HAVE_MIPS32R5_EXTERNAL 0 ++#define HAVE_MIPS64R2_EXTERNAL 0 ++#define HAVE_MIPS32R6_EXTERNAL 0 ++#define HAVE_MIPS64R6_EXTERNAL 0 ++#define HAVE_MIPSDSP_EXTERNAL 0 ++#define HAVE_MIPSDSPR2_EXTERNAL 0 ++#define HAVE_MSA_EXTERNAL 0 ++#define HAVE_LOONGSON2_EXTERNAL 0 ++#define HAVE_LOONGSON3_EXTERNAL 0 ++#define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 ++#define HAVE_ARMV5TE_INLINE 0 ++#define HAVE_ARMV6_INLINE 0 ++#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV8_INLINE 1 ++#define HAVE_NEON_INLINE 1 ++#define HAVE_VFP_INLINE 1 ++#define HAVE_VFPV3_INLINE 0 ++#define HAVE_SETEND_INLINE 0 ++#define HAVE_ALTIVEC_INLINE 0 ++#define HAVE_DCBZL_INLINE 0 ++#define HAVE_LDBRX_INLINE 0 ++#define HAVE_POWER8_INLINE 0 ++#define HAVE_PPC4XX_INLINE 0 ++#define HAVE_VSX_INLINE 0 ++#define HAVE_AESNI_INLINE 0 ++#define HAVE_AMD3DNOW_INLINE 0 ++#define HAVE_AMD3DNOWEXT_INLINE 0 ++#define HAVE_AVX_INLINE 0 ++#define HAVE_AVX2_INLINE 0 ++#define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 ++#define HAVE_FMA3_INLINE 0 ++#define HAVE_FMA4_INLINE 0 ++#define HAVE_MMX_INLINE 0 ++#define HAVE_MMXEXT_INLINE 0 ++#define HAVE_SSE_INLINE 0 ++#define HAVE_SSE2_INLINE 0 ++#define HAVE_SSE3_INLINE 0 ++#define HAVE_SSE4_INLINE 0 ++#define HAVE_SSE42_INLINE 0 ++#define HAVE_SSSE3_INLINE 0 ++#define HAVE_XOP_INLINE 0 ++#define HAVE_CPUNOP_INLINE 0 ++#define HAVE_I686_INLINE 0 ++#define HAVE_MIPSFPU_INLINE 0 ++#define HAVE_MIPS32R2_INLINE 0 ++#define HAVE_MIPS32R5_INLINE 0 ++#define HAVE_MIPS64R2_INLINE 0 ++#define HAVE_MIPS32R6_INLINE 0 ++#define HAVE_MIPS64R6_INLINE 0 ++#define HAVE_MIPSDSP_INLINE 0 ++#define HAVE_MIPSDSPR2_INLINE 0 ++#define HAVE_MSA_INLINE 0 ++#define HAVE_LOONGSON2_INLINE 0 ++#define HAVE_LOONGSON3_INLINE 0 ++#define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 ++#define HAVE_ALIGNED_STACK 0 ++#define HAVE_FAST_64BIT 0 ++#define HAVE_FAST_CLZ 0 ++#define HAVE_FAST_CMOV 0 ++#define HAVE_LOCAL_ALIGNED 0 ++#define HAVE_SIMD_ALIGN_16 0 ++#define HAVE_SIMD_ALIGN_32 0 ++#define HAVE_SIMD_ALIGN_64 0 ++#define HAVE_ATOMIC_CAS_PTR 0 ++#define HAVE_MACHINE_RW_BARRIER 0 ++#define HAVE_MEMORYBARRIER 0 ++#define HAVE_MM_EMPTY 0 ++#define HAVE_RDTSC 0 ++#define HAVE_SEM_TIMEDWAIT 0 ++#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 ++#define HAVE_CABS 1 ++#define HAVE_CEXP 1 ++#define HAVE_INLINE_ASM 1 ++#define HAVE_SYMVER 1 ++#define HAVE_X86ASM 0 ++#define HAVE_BIGENDIAN 0 ++#define HAVE_FAST_UNALIGNED 0 ++#define HAVE_ARPA_INET_H 1 ++#define HAVE_ASM_TYPES_H 0 ++#define HAVE_CDIO_PARANOIA_H 0 ++#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 ++#define HAVE_CUDA_H 0 ++#define HAVE_DISPATCH_DISPATCH_H 1 ++#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 ++#define HAVE_DEV_IC_BT8XX_H 0 ++#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 ++#define HAVE_DIRECT_H 0 ++#define HAVE_DIRENT_H 1 ++#define HAVE_DXGIDEBUG_H 0 ++#define HAVE_DXVA_H 0 ++#define HAVE_ES2_GL_H 0 ++#define HAVE_GSM_H 0 ++#define HAVE_IO_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 0 ++#define HAVE_MACHINE_IOCTL_BT848_H 0 ++#define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_MALLOC_H 0 ++#define HAVE_OPENCV2_CORE_CORE_C_H 0 ++#define HAVE_OPENGL_GL3_H 0 ++#define HAVE_POLL_H 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_RESOURCE_H 1 ++#define HAVE_SYS_SELECT_H 1 ++#define HAVE_SYS_SOUNDCARD_H 0 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_UN_H 1 ++#define HAVE_SYS_VIDEOIO_H 0 ++#define HAVE_TERMIOS_H 1 ++#define HAVE_UDPLITE_H 0 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VALGRIND_VALGRIND_H 0 ++#define HAVE_WINDOWS_H 0 ++#define HAVE_WINSOCK2_H 0 ++#define HAVE_INTRINSICS_NEON 0 ++#define HAVE_ATANF 1 ++#define HAVE_ATAN2F 1 ++#define HAVE_CBRT 1 ++#define HAVE_CBRTF 1 ++#define HAVE_COPYSIGN 1 ++#define HAVE_COSF 1 ++#define HAVE_ERF 1 ++#define HAVE_EXP2 1 ++#define HAVE_EXP2F 1 ++#define HAVE_EXPF 1 ++#define HAVE_HYPOT 1 ++#define HAVE_ISFINITE 1 ++#define HAVE_ISINF 1 ++#define HAVE_ISNAN 1 ++#define HAVE_LDEXPF 1 ++#define HAVE_LLRINT 1 ++#define HAVE_LLRINTF 1 ++#define HAVE_LOG2 1 ++#define HAVE_LOG2F 1 ++#define HAVE_LOG10F 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_POWF 1 ++#define HAVE_RINT 1 ++#define HAVE_ROUND 1 ++#define HAVE_ROUNDF 1 ++#define HAVE_SINF 1 ++#define HAVE_TRUNC 1 ++#define HAVE_TRUNCF 1 ++#define HAVE_DOS_PATHS 0 ++#define HAVE_LIBC_MSVCRT 0 ++#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 ++#define HAVE_SECTION_DATA_REL_RO 0 ++#define HAVE_THREADS 1 ++#define HAVE_UWP 0 ++#define HAVE_WINRT 0 ++#define HAVE_ACCESS 1 ++#define HAVE_ALIGNED_MALLOC 0 ++#define HAVE_ARC4RANDOM 1 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_CLOSESOCKET 0 ++#define HAVE_COMMANDLINETOARGVW 0 ++#define HAVE_FCNTL 1 ++#define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 0 ++#define HAVE_GETENV 1 ++#define HAVE_GETHRTIME 0 ++#define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 ++#define HAVE_GETPROCESSAFFINITYMASK 0 ++#define HAVE_GETPROCESSMEMORYINFO 0 ++#define HAVE_GETPROCESSTIMES 0 ++#define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 ++#define HAVE_GETSYSTEMTIMEASFILETIME 0 ++#define HAVE_GETTIMEOFDAY 1 ++#define HAVE_GLOB 1 ++#define HAVE_GLXGETPROCADDRESS 0 ++#define HAVE_GMTIME_R 1 ++#define HAVE_INET_ATON 1 ++#define HAVE_ISATTY 1 ++#define HAVE_KBHIT 0 ++#define HAVE_LOCALTIME_R 1 ++#define HAVE_LSTAT 1 ++#define HAVE_LZO1X_999_COMPRESS 0 ++#define HAVE_MACH_ABSOLUTE_TIME 0 ++#define HAVE_MAPVIEWOFFILE 0 ++#define HAVE_MEMALIGN 0 ++#define HAVE_MKSTEMP 1 ++#define HAVE_MMAP 1 ++#define HAVE_MPROTECT 1 ++#define HAVE_NANOSLEEP 1 ++#define HAVE_PEEKNAMEDPIPE 0 ++#define HAVE_POSIX_MEMALIGN 0 ++#define HAVE_PTHREAD_CANCEL 1 ++#define HAVE_SCHED_GETAFFINITY 0 ++#define HAVE_SECITEMIMPORT 0 ++#define HAVE_SETCONSOLETEXTATTRIBUTE 0 ++#define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 ++#define HAVE_SETMODE 0 ++#define HAVE_SETRLIMIT 1 ++#define HAVE_SLEEP 0 ++#define HAVE_STRERROR_R 1 ++#define HAVE_SYSCONF 1 ++#define HAVE_SYSCTL 0 ++#define HAVE_USLEEP 1 ++#define HAVE_UTGETOSTYPEFROMSTRING 0 ++#define HAVE_VIRTUALALLOC 0 ++#define HAVE_WGLGETPROCADDRESS 0 ++#define HAVE_BCRYPT 0 ++#define HAVE_VAAPI_DRM 0 ++#define HAVE_VAAPI_X11 0 ++#define HAVE_VDPAU_X11 0 ++#define HAVE_PTHREADS 1 ++#define HAVE_OS2THREADS 0 ++#define HAVE_W32THREADS 0 ++#define HAVE_AS_ARCH_DIRECTIVE 0 ++#define HAVE_AS_DN_DIRECTIVE 0 ++#define HAVE_AS_FPU_DIRECTIVE 0 ++#define HAVE_AS_FUNC 0 ++#define HAVE_AS_OBJECT_ARCH 0 ++#define HAVE_ASM_MOD_Q 0 ++#define HAVE_BLOCKS_EXTENSION 1 ++#define HAVE_EBP_AVAILABLE 0 ++#define HAVE_EBX_AVAILABLE 0 ++#define HAVE_GNU_AS 0 ++#define HAVE_GNU_WINDRES 0 ++#define HAVE_IBM_ASM 0 ++#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 ++#define HAVE_INLINE_ASM_LABELS 1 ++#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 ++#define HAVE_PRAGMA_DEPRECATED 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 ++#define HAVE_SYMVER_ASM_LABEL 1 ++#define HAVE_SYMVER_GNU_ASM 0 ++#define HAVE_VFP_ARGS 0 ++#define HAVE_XFORM_ASM 0 ++#define HAVE_XMM_CLOBBERS 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 ++#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 ++#define HAVE_SOCKLEN_T 1 ++#define HAVE_STRUCT_ADDRINFO 1 ++#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 ++#define HAVE_STRUCT_IP_MREQ_SOURCE 1 ++#define HAVE_STRUCT_IPV6_MREQ 1 ++#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 ++#define HAVE_STRUCT_POLLFD 1 ++#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 ++#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 ++#define HAVE_STRUCT_SOCKADDR_IN6 1 ++#define HAVE_STRUCT_SOCKADDR_SA_LEN 1 ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 1 ++#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_OPENCL_D3D11 0 ++#define HAVE_OPENCL_DRM_ARM 0 ++#define HAVE_OPENCL_DRM_BEIGNET 0 ++#define HAVE_OPENCL_DXVA2 0 ++#define HAVE_OPENCL_VAAPI_BEIGNET 0 ++#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 ++#define HAVE_PERL 1 ++#define HAVE_POD2MAN 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 ++#define CONFIG_DOC 0 ++#define CONFIG_HTMLPAGES 0 ++#define CONFIG_MANPAGES 1 ++#define CONFIG_PODPAGES 1 ++#define CONFIG_TXTPAGES 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 ++#define CONFIG_AVIO_READING_EXAMPLE 1 ++#define CONFIG_DECODE_AUDIO_EXAMPLE 1 ++#define CONFIG_DECODE_VIDEO_EXAMPLE 1 ++#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 ++#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 ++#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 ++#define CONFIG_EXTRACT_MVS_EXAMPLE 0 ++#define CONFIG_FILTER_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 ++#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 ++#define CONFIG_HW_DECODE_EXAMPLE 0 ++#define CONFIG_METADATA_EXAMPLE 0 ++#define CONFIG_MUXING_EXAMPLE 0 ++#define CONFIG_QSVDEC_EXAMPLE 0 ++#define CONFIG_REMUXING_EXAMPLE 0 ++#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 ++#define CONFIG_SCALING_VIDEO_EXAMPLE 0 ++#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 ++#define CONFIG_TRANSCODING_EXAMPLE 0 ++#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 ++#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 ++#define CONFIG_AVISYNTH 0 ++#define CONFIG_FREI0R 0 ++#define CONFIG_LIBCDIO 0 ++#define CONFIG_LIBDAVS2 0 ++#define CONFIG_LIBRUBBERBAND 0 ++#define CONFIG_LIBVIDSTAB 0 ++#define CONFIG_LIBX264 0 ++#define CONFIG_LIBX265 0 ++#define CONFIG_LIBXAVS 0 ++#define CONFIG_LIBXAVS2 0 ++#define CONFIG_LIBXVID 0 ++#define CONFIG_DECKLINK 0 ++#define CONFIG_LIBFDK_AAC 0 ++#define CONFIG_LIBTLS 0 ++#define CONFIG_GMP 0 ++#define CONFIG_LIBARIBB24 0 ++#define CONFIG_LIBLENSFUN 0 ++#define CONFIG_LIBOPENCORE_AMRNB 0 ++#define CONFIG_LIBOPENCORE_AMRWB 0 ++#define CONFIG_LIBVO_AMRWBENC 0 ++#define CONFIG_MBEDTLS 0 ++#define CONFIG_RKMPP 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_CHROMAPRINT 0 ++#define CONFIG_GCRYPT 0 ++#define CONFIG_GNUTLS 0 ++#define CONFIG_JNI 0 ++#define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 ++#define CONFIG_LIBAOM 0 ++#define CONFIG_LIBASS 0 ++#define CONFIG_LIBBLURAY 0 ++#define CONFIG_LIBBS2B 0 ++#define CONFIG_LIBCACA 0 ++#define CONFIG_LIBCELT 0 ++#define CONFIG_LIBCODEC2 0 ++#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDC1394 0 ++#define CONFIG_LIBDRM 0 ++#define CONFIG_LIBFLITE 0 ++#define CONFIG_LIBFONTCONFIG 0 ++#define CONFIG_LIBFREETYPE 0 ++#define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 ++#define CONFIG_LIBGME 0 ++#define CONFIG_LIBGSM 0 ++#define CONFIG_LIBIEC61883 0 ++#define CONFIG_LIBILBC 0 ++#define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 ++#define CONFIG_LIBKLVANC 0 ++#define CONFIG_LIBKVAZAAR 0 ++#define CONFIG_LIBMODPLUG 0 ++#define CONFIG_LIBMP3LAME 0 ++#define CONFIG_LIBMYSOFA 0 ++#define CONFIG_LIBOPENCV 0 ++#define CONFIG_LIBOPENH264 0 ++#define CONFIG_LIBOPENJPEG 0 ++#define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 ++#define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 ++#define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 ++#define CONFIG_LIBRSVG 0 ++#define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 ++#define CONFIG_LIBSHINE 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_LIBSNAPPY 0 ++#define CONFIG_LIBSOXR 0 ++#define CONFIG_LIBSPEEX 0 ++#define CONFIG_LIBSRT 0 ++#define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 ++#define CONFIG_LIBTENSORFLOW 0 ++#define CONFIG_LIBTESSERACT 0 ++#define CONFIG_LIBTHEORA 0 ++#define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 ++#define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 ++#define CONFIG_LIBVORBIS 0 ++#define CONFIG_LIBVPX 0 ++#define CONFIG_LIBWEBP 0 ++#define CONFIG_LIBXML2 0 ++#define CONFIG_LIBZIMG 0 ++#define CONFIG_LIBZMQ 0 ++#define CONFIG_LIBZVBI 0 ++#define CONFIG_LV2 0 ++#define CONFIG_MEDIACODEC 0 ++#define CONFIG_OPENAL 0 ++#define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 ++#define CONFIG_POCKETSPHINX 0 ++#define CONFIG_VAPOURSYNTH 0 ++#define CONFIG_ALSA 0 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 ++#define CONFIG_ICONV 0 ++#define CONFIG_LIBXCB 0 ++#define CONFIG_LIBXCB_SHM 0 ++#define CONFIG_LIBXCB_SHAPE 0 ++#define CONFIG_LIBXCB_XFIXES 0 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 ++#define CONFIG_SDL2 0 ++#define CONFIG_SECURETRANSPORT 0 ++#define CONFIG_SNDIO 0 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 ++#define CONFIG_CUDA_NVCC 0 ++#define CONFIG_CUDA_SDK 0 ++#define CONFIG_LIBNPP 0 ++#define CONFIG_LIBMFX 0 ++#define CONFIG_MMAL 0 ++#define CONFIG_OMX 0 ++#define CONFIG_OPENCL 0 ++#define CONFIG_AMF 0 ++#define CONFIG_AUDIOTOOLBOX 0 ++#define CONFIG_CRYSTALHD 0 ++#define CONFIG_CUDA 0 ++#define CONFIG_CUDA_LLVM 0 ++#define CONFIG_CUVID 0 ++#define CONFIG_D3D11VA 0 ++#define CONFIG_DXVA2 0 ++#define CONFIG_FFNVCODEC 0 ++#define CONFIG_NVDEC 0 ++#define CONFIG_NVENC 0 ++#define CONFIG_VAAPI 0 ++#define CONFIG_VDPAU 0 ++#define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 ++#define CONFIG_V4L2_M2M 0 ++#define CONFIG_FTRAPV 0 ++#define CONFIG_GRAY 0 ++#define CONFIG_HARDCODED_TABLES 0 ++#define CONFIG_OMX_RPI 0 ++#define CONFIG_RUNTIME_CPUDETECT 1 ++#define CONFIG_SAFE_BITSTREAM_READER 1 ++#define CONFIG_SHARED 1 ++#define CONFIG_SMALL 1 ++#define CONFIG_STATIC 0 ++#define CONFIG_SWSCALE_ALPHA 1 ++#define CONFIG_GPL 0 ++#define CONFIG_NONFREE 0 ++#define CONFIG_VERSION3 0 ++#define CONFIG_AVDEVICE 0 ++#define CONFIG_AVFILTER 0 ++#define CONFIG_SWSCALE 0 ++#define CONFIG_POSTPROC 0 ++#define CONFIG_AVFORMAT 0 ++#define CONFIG_AVCODEC 1 ++#define CONFIG_SWRESAMPLE 0 ++#define CONFIG_AVUTIL 1 ++#define CONFIG_FFPLAY 0 ++#define CONFIG_FFPROBE 0 ++#define CONFIG_FFMPEG 0 ++#define CONFIG_DCT 1 ++#define CONFIG_DWT 0 ++#define CONFIG_ERROR_RESILIENCE 0 ++#define CONFIG_FAAN 1 ++#define CONFIG_FAST_UNALIGNED 0 ++#define CONFIG_FFT 1 ++#define CONFIG_LSP 0 ++#define CONFIG_MDCT 0 ++#define CONFIG_PIXELUTILS 0 ++#define CONFIG_NETWORK 0 ++#define CONFIG_RDFT 1 ++#define CONFIG_AUTODETECT 0 ++#define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 ++#define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 ++#define CONFIG_MEMORY_POISONING 0 ++#define CONFIG_NEON_CLOBBER_TEST 0 ++#define CONFIG_OSSFUZZ 0 ++#define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 ++#define CONFIG_THUMB 0 ++#define CONFIG_VALGRIND_BACKTRACE 0 ++#define CONFIG_XMM_CLOBBER_TEST 0 ++#define CONFIG_BSFS 0 ++#define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 ++#define CONFIG_PARSERS 0 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 ++#define CONFIG_AANDCTTABLES 0 ++#define CONFIG_AC3DSP 0 ++#define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 ++#define CONFIG_AUDIO_FRAME_QUEUE 0 ++#define CONFIG_AUDIODSP 0 ++#define CONFIG_BLOCKDSP 0 ++#define CONFIG_BSWAPDSP 0 ++#define CONFIG_CABAC 0 ++#define CONFIG_CBS 0 ++#define CONFIG_CBS_AV1 0 ++#define CONFIG_CBS_H264 0 ++#define CONFIG_CBS_H265 0 ++#define CONFIG_CBS_JPEG 0 ++#define CONFIG_CBS_MPEG2 0 ++#define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 ++#define CONFIG_DIRAC_PARSE 0 ++#define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 ++#define CONFIG_DVPROFILE 0 ++#define CONFIG_EXIF 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 ++#define CONFIG_FLACDSP 1 ++#define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 ++#define CONFIG_G722DSP 0 ++#define CONFIG_GOLOMB 0 ++#define CONFIG_GPLV3 0 ++#define CONFIG_H263DSP 0 ++#define CONFIG_H264CHROMA 0 ++#define CONFIG_H264DSP 0 ++#define CONFIG_H264PARSE 0 ++#define CONFIG_H264PRED 0 ++#define CONFIG_H264QPEL 0 ++#define CONFIG_HEVCPARSE 0 ++#define CONFIG_HPELDSP 0 ++#define CONFIG_HUFFMAN 0 ++#define CONFIG_HUFFYUVDSP 0 ++#define CONFIG_HUFFYUVENCDSP 0 ++#define CONFIG_IDCTDSP 1 ++#define CONFIG_IIRFILTER 0 ++#define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 ++#define CONFIG_INTRAX8 0 ++#define CONFIG_ISO_MEDIA 0 ++#define CONFIG_IVIDSP 0 ++#define CONFIG_JPEGTABLES 0 ++#define CONFIG_LGPLV3 0 ++#define CONFIG_LIBX262 0 ++#define CONFIG_LLAUDDSP 0 ++#define CONFIG_LLVIDDSP 0 ++#define CONFIG_LLVIDENCDSP 0 ++#define CONFIG_LPC 0 ++#define CONFIG_LZF 0 ++#define CONFIG_ME_CMP 0 ++#define CONFIG_MPEG_ER 0 ++#define CONFIG_MPEGAUDIO 1 ++#define CONFIG_MPEGAUDIODSP 1 ++#define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 ++#define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 ++#define CONFIG_MPEGVIDEOENC 0 ++#define CONFIG_MSS34DSP 0 ++#define CONFIG_PIXBLOCKDSP 0 ++#define CONFIG_QPELDSP 0 ++#define CONFIG_QSV 0 ++#define CONFIG_QSVDEC 0 ++#define CONFIG_QSVENC 0 ++#define CONFIG_QSVVPP 0 ++#define CONFIG_RANGECODER 0 ++#define CONFIG_RIFFDEC 0 ++#define CONFIG_RIFFENC 0 ++#define CONFIG_RTPDEC 0 ++#define CONFIG_RTPENC_CHAIN 0 ++#define CONFIG_RV34DSP 0 ++#define CONFIG_SCENE_SAD 0 ++#define CONFIG_SINEWIN 0 ++#define CONFIG_SNAPPY 0 ++#define CONFIG_SRTP 0 ++#define CONFIG_STARTCODE 0 ++#define CONFIG_TEXTUREDSP 0 ++#define CONFIG_TEXTUREDSPENC 0 ++#define CONFIG_TPELDSP 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VAAPI_ENCODE 0 ++#define CONFIG_VC1DSP 0 ++#define CONFIG_VIDEODSP 0 ++#define CONFIG_VP3DSP 0 ++#define CONFIG_VP56DSP 0 ++#define CONFIG_VP8DSP 0 ++#define CONFIG_WMA_FREQS 0 ++#define CONFIG_WMV2DSP 0 ++#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config.h b/media/ffvpx/config.h +--- a/media/ffvpx/config.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config.h 2023-04-06 12:49:58.993149715 +0200 +@@ -10,8 +10,13 @@ + #if defined(MOZ_FFVPX_AUDIOONLY) + # if defined(MOZ_WIDGET_ANDROID) && defined(__arm__) + # include "config_android32.h" ++# elif defined(MOZ_WIDGET_ANDROID) && defined(__aarch64__) ++# include "config_android64.h" ++# elif defined(__aarch64__) ++# include "config_unix_aarch64.h" + # else +-# include "config_audio.h" ++ // no assembly ++# include "config_generic.h" + # endif + #else // MOZ_FFVPX_AUDIOONLY + # if defined(XP_WIN) +@@ -21,7 +26,7 @@ + # undef HAVE_UNISTD_H + # endif + # if defined(_ARM64_) +-# include "config_aarch64_win64.h" ++# include "config_win64_aarch64.h" + # else + # if defined(HAVE_64BIT_BUILD) + # include "config_win64.h" +@@ -39,7 +44,13 @@ + # define HAVE_LIBC_MSVCRT 0 + # endif + # elif defined(XP_DARWIN) +-# include "config_darwin64.h" ++# if defined(__aarch64__) ++# include "config_darwin_aarch64.h" ++# else ++# include "config_darwin64.h" ++# endif ++# elif defined(MOZ_WIDGET_ANDROID) && defined(HAVE_64BIT_BUILD) ++# include "config_android_x86_64.h" + # elif defined(XP_UNIX) + # if defined(HAVE_64BIT_BUILD) + # include "config_unix64.h" +@@ -48,7 +59,7 @@ + # endif + # endif + #endif // else MOZ_FFVPX_AUDIOONLY +- +-#include "config_common.h" ++ // ++#include "config_override.h" + + #endif // MOZ_FFVPX_CONFIG_H +diff -Naur a/media/ffvpx/config_override.h b/media/ffvpx/config_override.h +--- a/media/ffvpx/config_override.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_override.h 2023-04-06 12:49:58.993149715 +0200 +@@ -0,0 +1,32 @@ ++#ifndef MOZ_FFVPX_CONFIG_OVERRIDE_H ++#define MOZ_FFVPX_CONFIG_OVERRIDE_H ++ ++// This file contains overrides for config.h, that can be platform-specific. ++ ++#ifdef MOZ_LIBAV_FFT ++#undef CONFIG_FFT ++#undef CONFIG_RDFT ++#define CONFIG_FFT 1 ++#define CONFIG_RDFT 1 ++#endif ++ ++#if defined(MOZ_WAYLAND) && !defined(MOZ_FFVPX_AUDIOONLY) ++#undef CONFIG_VAAPI ++#undef CONFIG_VAAPI_1 ++#undef CONFIG_VP8_VAAPI_HWACCEL ++#undef CONFIG_VP9_VAAPI_HWACCEL ++#undef CONFIG_AV1_VAAPI_HWACCEL ++#define CONFIG_VAAPI 1 ++#define CONFIG_VAAPI_1 1 ++#define CONFIG_VP8_VAAPI_HWACCEL 1 ++#define CONFIG_VP9_VAAPI_HWACCEL 1 ++#define CONFIG_AV1_VAAPI_HWACCEL 1 ++#else ++#define CONFIG_VAAPI 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VP8_VAAPI_HWACCEL 0 ++#define CONFIG_VP9_VAAPI_HWACCEL 0 ++#define CONFIG_AV1_VAAPI_HWACCEL 0 ++#endif ++ ++#endif +diff -Naur a/media/ffvpx/config_unix32.h b/media/ffvpx/config_unix32.h +--- a/media/ffvpx/config_unix32.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_unix32.h 2023-04-06 12:49:19.192546469 +0200 +@@ -1,15 +1,16 @@ + /* Automatically generated by configure - do not modify! */ + #ifndef FFMPEG_CONFIG_H + #define FFMPEG_CONFIG_H +-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --disable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3" ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --disable-asm --disable-x86asm --cc='clang -m32' --disable-iconv" + #define FFMPEG_LICENSE "LGPL version 2.1 or later" +-#define CONFIG_THIS_YEAR 2019 ++#define CONFIG_THIS_YEAR 2022 + #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" + #define AVCONV_DATADIR "/usr/local/share/ffmpeg" +-#define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406" ++#define CC_IDENT "Ubuntu clang version 14.0.0-1ubuntu1" ++#define OS_NAME linux + #define av_restrict restrict + #define EXTERN_PREFIX "" +-#define EXTERN_ASM ++#define EXTERN_ASM + #define BUILDSUF "" + #define SLIBSUF ".so" + #define HAVE_MMX2 HAVE_MMXEXT +@@ -22,12 +23,16 @@ + #define ARCH_AVR32_UC 0 + #define ARCH_BFIN 0 + #define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 + #define ARCH_M68K 0 + #define ARCH_MIPS 0 + #define ARCH_MIPS64 0 + #define ARCH_PARISC 0 + #define ARCH_PPC 0 + #define ARCH_PPC64 0 ++#define ARCH_RISCV 0 + #define ARCH_S390 0 + #define ARCH_SH4 0 + #define ARCH_SPARC 0 +@@ -58,6 +63,7 @@ + #define HAVE_AVX 0 + #define HAVE_AVX2 0 + #define HAVE_AVX512 0 ++#define HAVE_AVX512ICL 0 + #define HAVE_FMA3 0 + #define HAVE_FMA4 0 + #define HAVE_MMX 0 +@@ -80,10 +86,11 @@ + #define HAVE_MIPSDSP 0 + #define HAVE_MIPSDSPR2 0 + #define HAVE_MSA 0 +-#define HAVE_MSA2 0 + #define HAVE_LOONGSON2 0 + #define HAVE_LOONGSON3 0 + #define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 + #define HAVE_ARMV5TE_EXTERNAL 0 + #define HAVE_ARMV6_EXTERNAL 0 + #define HAVE_ARMV6T2_EXTERNAL 0 +@@ -104,6 +111,7 @@ + #define HAVE_AVX_EXTERNAL 0 + #define HAVE_AVX2_EXTERNAL 0 + #define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_AVX512ICL_EXTERNAL 0 + #define HAVE_FMA3_EXTERNAL 0 + #define HAVE_FMA4_EXTERNAL 0 + #define HAVE_MMX_EXTERNAL 0 +@@ -126,10 +134,11 @@ + #define HAVE_MIPSDSP_EXTERNAL 0 + #define HAVE_MIPSDSPR2_EXTERNAL 0 + #define HAVE_MSA_EXTERNAL 0 +-#define HAVE_MSA2_EXTERNAL 0 + #define HAVE_LOONGSON2_EXTERNAL 0 + #define HAVE_LOONGSON3_EXTERNAL 0 + #define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 + #define HAVE_ARMV5TE_INLINE 0 + #define HAVE_ARMV6_INLINE 0 + #define HAVE_ARMV6T2_INLINE 0 +@@ -150,6 +159,7 @@ + #define HAVE_AVX_INLINE 0 + #define HAVE_AVX2_INLINE 0 + #define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 + #define HAVE_FMA3_INLINE 0 + #define HAVE_FMA4_INLINE 0 + #define HAVE_MMX_INLINE 0 +@@ -172,10 +182,11 @@ + #define HAVE_MIPSDSP_INLINE 0 + #define HAVE_MIPSDSPR2_INLINE 0 + #define HAVE_MSA_INLINE 0 +-#define HAVE_MSA2_INLINE 0 + #define HAVE_LOONGSON2_INLINE 0 + #define HAVE_LOONGSON3_INLINE 0 + #define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 + #define HAVE_ALIGNED_STACK 0 + #define HAVE_FAST_64BIT 0 + #define HAVE_FAST_CLZ 0 +@@ -191,8 +202,8 @@ + #define HAVE_RDTSC 0 + #define HAVE_SEM_TIMEDWAIT 1 + #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 +-#define HAVE_CABS 1 +-#define HAVE_CEXP 1 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 + #define HAVE_INLINE_ASM 1 + #define HAVE_SYMVER 1 + #define HAVE_X86ASM 0 +@@ -216,7 +227,8 @@ + #define HAVE_ES2_GL_H 0 + #define HAVE_GSM_H 0 + #define HAVE_IO_H 0 +-#define HAVE_LINUX_PERF_EVENT_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 1 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 + #define HAVE_OPENCV2_CORE_CORE_C_H 0 +@@ -268,7 +280,7 @@ + #define HAVE_DOS_PATHS 0 + #define HAVE_LIBC_MSVCRT 0 + #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 +-#define HAVE_SECTION_DATA_REL_RO 0 ++#define HAVE_SECTION_DATA_REL_RO 1 + #define HAVE_THREADS 1 + #define HAVE_UWP 0 + #define HAVE_WINRT 0 +@@ -279,12 +291,16 @@ + #define HAVE_COMMANDLINETOARGVW 0 + #define HAVE_FCNTL 1 + #define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 1 ++#define HAVE_GETENV 1 + #define HAVE_GETHRTIME 0 + #define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 + #define HAVE_GETPROCESSAFFINITYMASK 0 + #define HAVE_GETPROCESSMEMORYINFO 0 + #define HAVE_GETPROCESSTIMES 0 + #define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 + #define HAVE_GETSYSTEMTIMEASFILETIME 0 + #define HAVE_GETTIMEOFDAY 1 + #define HAVE_GLOB 1 +@@ -303,10 +319,11 @@ + #define HAVE_NANOSLEEP 1 + #define HAVE_PEEKNAMEDPIPE 0 + #define HAVE_PTHREAD_CANCEL 1 +-#define HAVE_SCHED_GETAFFINITY 0 ++#define HAVE_SCHED_GETAFFINITY 1 + #define HAVE_SECITEMIMPORT 0 + #define HAVE_SETCONSOLETEXTATTRIBUTE 0 + #define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 + #define HAVE_SETMODE 0 + #define HAVE_SETRLIMIT 1 + #define HAVE_SLEEP 0 +@@ -341,13 +358,28 @@ + #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 + #define HAVE_PRAGMA_DEPRECATED 1 + #define HAVE_RSYNC_CONTIMEOUT 1 +-#define HAVE_SYMVER_ASM_LABEL 0 ++#define HAVE_SYMVER_ASM_LABEL 1 + #define HAVE_SYMVER_GNU_ASM 1 + #define HAVE_VFP_ARGS 0 + #define HAVE_XFORM_ASM 0 +-#define HAVE_XMM_CLOBBERS 0 ++#define HAVE_XMM_CLOBBERS 1 + #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 + #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + #define HAVE_SOCKLEN_T 1 + #define HAVE_STRUCT_ADDRINFO 1 + #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -361,9 +393,11 @@ + #define HAVE_STRUCT_SOCKADDR_SA_LEN 0 + #define HAVE_STRUCT_SOCKADDR_STORAGE 1 + #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 +-#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 +-#define HAVE_MAKEINFO 0 +-#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 1 ++#define HAVE_MAKEINFO_HTML 1 + #define HAVE_OPENCL_D3D11 0 + #define HAVE_OPENCL_DRM_ARM 0 + #define HAVE_OPENCL_DRM_BEIGNET 0 +@@ -372,13 +406,15 @@ + #define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 + #define HAVE_PERL 1 + #define HAVE_POD2MAN 1 +-#define HAVE_TEXI2HTML 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 + #define CONFIG_DOC 0 + #define CONFIG_HTMLPAGES 1 + #define CONFIG_MANPAGES 1 + #define CONFIG_PODPAGES 1 + #define CONFIG_TXTPAGES 1 +-#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + #define CONFIG_AVIO_READING_EXAMPLE 1 + #define CONFIG_DECODE_AUDIO_EXAMPLE 1 + #define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -414,14 +450,12 @@ + #define CONFIG_LIBXVID 0 + #define CONFIG_DECKLINK 0 + #define CONFIG_LIBFDK_AAC 0 +-#define CONFIG_OPENSSL 0 + #define CONFIG_LIBTLS 0 + #define CONFIG_GMP 0 + #define CONFIG_LIBARIBB24 0 + #define CONFIG_LIBLENSFUN 0 + #define CONFIG_LIBOPENCORE_AMRNB 0 + #define CONFIG_LIBOPENCORE_AMRWB 0 +-#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVO_AMRWBENC 0 + #define CONFIG_MBEDTLS 0 + #define CONFIG_RKMPP 0 +@@ -431,6 +465,7 @@ + #define CONFIG_GNUTLS 0 + #define CONFIG_JNI 0 + #define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 + #define CONFIG_LIBAOM 0 + #define CONFIG_LIBASS 0 + #define CONFIG_LIBBLURAY 0 +@@ -438,18 +473,20 @@ + #define CONFIG_LIBCACA 0 + #define CONFIG_LIBCELT 0 + #define CONFIG_LIBCODEC2 0 +-#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDAV1D 1 + #define CONFIG_LIBDC1394 0 + #define CONFIG_LIBDRM 0 + #define CONFIG_LIBFLITE 0 + #define CONFIG_LIBFONTCONFIG 0 + #define CONFIG_LIBFREETYPE 0 + #define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 + #define CONFIG_LIBGME 0 + #define CONFIG_LIBGSM 0 + #define CONFIG_LIBIEC61883 0 + #define CONFIG_LIBILBC 0 + #define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 + #define CONFIG_LIBKLVANC 0 + #define CONFIG_LIBKVAZAAR 0 + #define CONFIG_LIBMODPLUG 0 +@@ -459,10 +496,16 @@ + #define CONFIG_LIBOPENH264 0 + #define CONFIG_LIBOPENJPEG 0 + #define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 + #define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 + #define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 + #define CONFIG_LIBRSVG 0 + #define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 + #define CONFIG_LIBSHINE 0 + #define CONFIG_LIBSMBCLIENT 0 + #define CONFIG_LIBSNAPPY 0 +@@ -470,14 +513,16 @@ + #define CONFIG_LIBSPEEX 0 + #define CONFIG_LIBSRT 0 + #define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 + #define CONFIG_LIBTENSORFLOW 0 + #define CONFIG_LIBTESSERACT 0 + #define CONFIG_LIBTHEORA 0 + #define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 + #define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVORBIS 0 + #define CONFIG_LIBVPX 0 +-#define CONFIG_LIBWAVPACK 0 + #define CONFIG_LIBWEBP 0 + #define CONFIG_LIBXML2 0 + #define CONFIG_LIBZIMG 0 +@@ -487,25 +532,28 @@ + #define CONFIG_MEDIACODEC 0 + #define CONFIG_OPENAL 0 + #define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 + #define CONFIG_POCKETSPHINX 0 + #define CONFIG_VAPOURSYNTH 0 + #define CONFIG_ALSA 0 +-#define CONFIG_APPKIT 1 +-#define CONFIG_AVFOUNDATION 1 +-#define CONFIG_BZLIB 1 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 + #define CONFIG_COREIMAGE 0 + #define CONFIG_ICONV 0 + #define CONFIG_LIBXCB 0 + #define CONFIG_LIBXCB_SHM 0 + #define CONFIG_LIBXCB_SHAPE 0 + #define CONFIG_LIBXCB_XFIXES 0 +-#define CONFIG_LZMA 1 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 + #define CONFIG_SCHANNEL 0 + #define CONFIG_SDL2 0 + #define CONFIG_SECURETRANSPORT 0 + #define CONFIG_SNDIO 0 +-#define CONFIG_XLIB 1 +-#define CONFIG_ZLIB 1 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 + #define CONFIG_CUDA_NVCC 0 + #define CONFIG_CUDA_SDK 0 + #define CONFIG_LIBNPP 0 +@@ -514,7 +562,7 @@ + #define CONFIG_OMX 0 + #define CONFIG_OPENCL 0 + #define CONFIG_AMF 0 +-#define CONFIG_AUDIOTOOLBOX 1 ++#define CONFIG_AUDIOTOOLBOX 0 + #define CONFIG_CRYSTALHD 0 + #define CONFIG_CUDA 0 + #define CONFIG_CUDA_LLVM 0 +@@ -527,8 +575,8 @@ + #define CONFIG_VAAPI 0 + #define CONFIG_VDPAU 0 + #define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 + #define CONFIG_V4L2_M2M 0 +-#define CONFIG_XVMC 0 + #define CONFIG_FTRAPV 0 + #define CONFIG_GRAY 0 + #define CONFIG_HARDCODED_TABLES 0 +@@ -549,7 +597,6 @@ + #define CONFIG_AVFORMAT 0 + #define CONFIG_AVCODEC 1 + #define CONFIG_SWRESAMPLE 0 +-#define CONFIG_AVRESAMPLE 0 + #define CONFIG_AVUTIL 1 + #define CONFIG_FFPLAY 0 + #define CONFIG_FFPROBE 0 +@@ -561,46 +608,59 @@ + #define CONFIG_FAST_UNALIGNED 0 + #define CONFIG_FFT 1 + #define CONFIG_LSP 0 +-#define CONFIG_LZO 0 + #define CONFIG_MDCT 0 + #define CONFIG_PIXELUTILS 0 + #define CONFIG_NETWORK 0 + #define CONFIG_RDFT 1 + #define CONFIG_AUTODETECT 0 + #define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 + #define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 + #define CONFIG_MEMORY_POISONING 0 + #define CONFIG_NEON_CLOBBER_TEST 0 + #define CONFIG_OSSFUZZ 0 + #define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 + #define CONFIG_THUMB 0 + #define CONFIG_VALGRIND_BACKTRACE 0 + #define CONFIG_XMM_CLOBBER_TEST 0 +-#define CONFIG_BSFS 1 ++#define CONFIG_BSFS 0 + #define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 + #define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 + #define CONFIG_AANDCTTABLES 0 + #define CONFIG_AC3DSP 0 + #define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 + #define CONFIG_AUDIO_FRAME_QUEUE 0 + #define CONFIG_AUDIODSP 0 + #define CONFIG_BLOCKDSP 0 + #define CONFIG_BSWAPDSP 0 + #define CONFIG_CABAC 0 +-#define CONFIG_CBS 1 +-#define CONFIG_CBS_AV1 1 ++#define CONFIG_CBS 0 ++#define CONFIG_CBS_AV1 0 + #define CONFIG_CBS_H264 0 + #define CONFIG_CBS_H265 0 + #define CONFIG_CBS_JPEG 0 + #define CONFIG_CBS_MPEG2 0 + #define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 + #define CONFIG_DIRAC_PARSE 0 + #define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 + #define CONFIG_DVPROFILE 0 + #define CONFIG_EXIF 0 +-#define CONFIG_FAANDCT 0 +-#define CONFIG_FAANIDCT 0 +-#define CONFIG_FDCTDSP 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 + #define CONFIG_FLACDSP 1 + #define CONFIG_FMTCONVERT 0 + #define CONFIG_FRAME_THREAD_ENCODER 0 +@@ -618,9 +678,10 @@ + #define CONFIG_HUFFMAN 0 + #define CONFIG_HUFFYUVDSP 0 + #define CONFIG_HUFFYUVENCDSP 0 +-#define CONFIG_IDCTDSP 0 ++#define CONFIG_IDCTDSP 1 + #define CONFIG_IIRFILTER 0 + #define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 + #define CONFIG_INTRAX8 0 + #define CONFIG_ISO_MEDIA 0 + #define CONFIG_IVIDSP 0 +@@ -637,7 +698,9 @@ + #define CONFIG_MPEGAUDIO 1 + #define CONFIG_MPEGAUDIODSP 1 + #define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 + #define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 + #define CONFIG_MPEGVIDEOENC 0 + #define CONFIG_MSS34DSP 0 + #define CONFIG_PIXBLOCKDSP 0 +@@ -669,14 +732,4 @@ + #define CONFIG_VP8DSP 1 + #define CONFIG_WMA_FREQS 0 + #define CONFIG_WMV2DSP 0 +-#define CONFIG_NULL_BSF 1 +-#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-#define CONFIG_VP8_DECODER 1 +-#define CONFIG_VP9_DECODER 1 +-#define CONFIG_AV1_DECODER 1 +-#define CONFIG_FLAC_DECODER 1 +-#define CONFIG_MP3_DECODER 1 +-#define CONFIG_VP8_PARSER 1 +-#define CONFIG_VP9_PARSER 1 +-#define CONFIG_AV1_PARSER 1 + #endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_unix64.asm b/media/ffvpx/config_unix64.asm +--- a/media/ffvpx/config_unix64.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_unix64.asm 2023-04-06 12:49:19.192546469 +0200 +@@ -7,12 +7,16 @@ + %define ARCH_AVR32_UC 0 + %define ARCH_BFIN 0 + %define ARCH_IA64 0 ++%define ARCH_LOONGARCH 0 ++%define ARCH_LOONGARCH32 0 ++%define ARCH_LOONGARCH64 0 + %define ARCH_M68K 0 + %define ARCH_MIPS 0 + %define ARCH_MIPS64 0 + %define ARCH_PARISC 0 + %define ARCH_PPC 0 + %define ARCH_PPC64 0 ++%define ARCH_RISCV 0 + %define ARCH_S390 0 + %define ARCH_SH4 0 + %define ARCH_SPARC 0 +@@ -43,6 +47,7 @@ + %define HAVE_AVX 1 + %define HAVE_AVX2 1 + %define HAVE_AVX512 1 ++%define HAVE_AVX512ICL 1 + %define HAVE_FMA3 1 + %define HAVE_FMA4 1 + %define HAVE_MMX 1 +@@ -65,10 +70,11 @@ + %define HAVE_MIPSDSP 0 + %define HAVE_MIPSDSPR2 0 + %define HAVE_MSA 0 +-%define HAVE_MSA2 0 + %define HAVE_LOONGSON2 0 + %define HAVE_LOONGSON3 0 + %define HAVE_MMI 0 ++%define HAVE_LSX 0 ++%define HAVE_LASX 0 + %define HAVE_ARMV5TE_EXTERNAL 0 + %define HAVE_ARMV6_EXTERNAL 0 + %define HAVE_ARMV6T2_EXTERNAL 0 +@@ -89,6 +95,7 @@ + %define HAVE_AVX_EXTERNAL 1 + %define HAVE_AVX2_EXTERNAL 1 + %define HAVE_AVX512_EXTERNAL 1 ++%define HAVE_AVX512ICL_EXTERNAL 1 + %define HAVE_FMA3_EXTERNAL 1 + %define HAVE_FMA4_EXTERNAL 1 + %define HAVE_MMX_EXTERNAL 1 +@@ -111,10 +118,11 @@ + %define HAVE_MIPSDSP_EXTERNAL 0 + %define HAVE_MIPSDSPR2_EXTERNAL 0 + %define HAVE_MSA_EXTERNAL 0 +-%define HAVE_MSA2_EXTERNAL 0 + %define HAVE_LOONGSON2_EXTERNAL 0 + %define HAVE_LOONGSON3_EXTERNAL 0 + %define HAVE_MMI_EXTERNAL 0 ++%define HAVE_LSX_EXTERNAL 0 ++%define HAVE_LASX_EXTERNAL 0 + %define HAVE_ARMV5TE_INLINE 0 + %define HAVE_ARMV6_INLINE 0 + %define HAVE_ARMV6T2_INLINE 0 +@@ -135,6 +143,7 @@ + %define HAVE_AVX_INLINE 1 + %define HAVE_AVX2_INLINE 1 + %define HAVE_AVX512_INLINE 1 ++%define HAVE_AVX512ICL_INLINE 1 + %define HAVE_FMA3_INLINE 1 + %define HAVE_FMA4_INLINE 1 + %define HAVE_MMX_INLINE 1 +@@ -157,10 +166,11 @@ + %define HAVE_MIPSDSP_INLINE 0 + %define HAVE_MIPSDSPR2_INLINE 0 + %define HAVE_MSA_INLINE 0 +-%define HAVE_MSA2_INLINE 0 + %define HAVE_LOONGSON2_INLINE 0 + %define HAVE_LOONGSON3_INLINE 0 + %define HAVE_MMI_INLINE 0 ++%define HAVE_LSX_INLINE 0 ++%define HAVE_LASX_INLINE 0 + %define HAVE_ALIGNED_STACK 1 + %define HAVE_FAST_64BIT 1 + %define HAVE_FAST_CLZ 1 +@@ -176,8 +186,8 @@ + %define HAVE_RDTSC 0 + %define HAVE_SEM_TIMEDWAIT 1 + %define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 +-%define HAVE_CABS 1 +-%define HAVE_CEXP 1 ++%define HAVE_CABS 0 ++%define HAVE_CEXP 0 + %define HAVE_INLINE_ASM 1 + %define HAVE_SYMVER 1 + %define HAVE_X86ASM 1 +@@ -201,9 +211,11 @@ + %define HAVE_ES2_GL_H 0 + %define HAVE_GSM_H 0 + %define HAVE_IO_H 0 +-%define HAVE_LINUX_PERF_EVENT_H 0 ++%define HAVE_LINUX_DMA_BUF_H 0 ++%define HAVE_LINUX_PERF_EVENT_H 1 + %define HAVE_MACHINE_IOCTL_BT848_H 0 + %define HAVE_MACHINE_IOCTL_METEOR_H 0 ++%define HAVE_MALLOC_H 1 + %define HAVE_OPENCV2_CORE_CORE_C_H 0 + %define HAVE_OPENGL_GL3_H 0 + %define HAVE_POLL_H 1 +@@ -253,23 +265,28 @@ + %define HAVE_DOS_PATHS 0 + %define HAVE_LIBC_MSVCRT 0 + %define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 +-%define HAVE_SECTION_DATA_REL_RO 0 ++%define HAVE_SECTION_DATA_REL_RO 1 + %define HAVE_THREADS 1 + %define HAVE_UWP 0 + %define HAVE_WINRT 0 + %define HAVE_ACCESS 1 + %define HAVE_ALIGNED_MALLOC 0 ++%define HAVE_ARC4RANDOM 0 + %define HAVE_CLOCK_GETTIME 1 + %define HAVE_CLOSESOCKET 0 + %define HAVE_COMMANDLINETOARGVW 0 + %define HAVE_FCNTL 1 + %define HAVE_GETADDRINFO 1 ++%define HAVE_GETAUXVAL 1 ++%define HAVE_GETENV 1 + %define HAVE_GETHRTIME 0 + %define HAVE_GETOPT 1 ++%define HAVE_GETMODULEHANDLE 0 + %define HAVE_GETPROCESSAFFINITYMASK 0 + %define HAVE_GETPROCESSMEMORYINFO 0 + %define HAVE_GETPROCESSTIMES 0 + %define HAVE_GETRUSAGE 1 ++%define HAVE_GETSTDHANDLE 0 + %define HAVE_GETSYSTEMTIMEASFILETIME 0 + %define HAVE_GETTIMEOFDAY 1 + %define HAVE_GLOB 1 +@@ -278,20 +295,24 @@ + %define HAVE_INET_ATON 1 + %define HAVE_ISATTY 1 + %define HAVE_KBHIT 0 ++%define HAVE_LOCALTIME_R 1 + %define HAVE_LSTAT 1 + %define HAVE_LZO1X_999_COMPRESS 0 + %define HAVE_MACH_ABSOLUTE_TIME 0 + %define HAVE_MAPVIEWOFFILE 0 ++%define HAVE_MEMALIGN 1 + %define HAVE_MKSTEMP 1 + %define HAVE_MMAP 1 + %define HAVE_MPROTECT 1 + %define HAVE_NANOSLEEP 1 + %define HAVE_PEEKNAMEDPIPE 0 ++%define HAVE_POSIX_MEMALIGN 1 + %define HAVE_PTHREAD_CANCEL 1 + %define HAVE_SCHED_GETAFFINITY 1 + %define HAVE_SECITEMIMPORT 0 + %define HAVE_SETCONSOLETEXTATTRIBUTE 0 + %define HAVE_SETCONSOLECTRLHANDLER 0 ++%define HAVE_SETDLLDIRECTORY 0 + %define HAVE_SETMODE 0 + %define HAVE_SETRLIMIT 1 + %define HAVE_SLEEP 0 +@@ -303,7 +324,7 @@ + %define HAVE_VIRTUALALLOC 0 + %define HAVE_WGLGETPROCADDRESS 0 + %define HAVE_BCRYPT 0 +-%define HAVE_VAAPI_DRM 0 ++%define HAVE_VAAPI_DRM 1 + %define HAVE_VAAPI_X11 0 + %define HAVE_VDPAU_X11 0 + %define HAVE_PTHREADS 1 +@@ -332,7 +353,22 @@ + %define HAVE_XFORM_ASM 0 + %define HAVE_XMM_CLOBBERS 1 + %define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++%define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++%define HAVE_KCMVIDEOCODECTYPE_VP9 0 + %define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++%define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + %define HAVE_SOCKLEN_T 1 + %define HAVE_STRUCT_ADDRINFO 1 + %define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -346,9 +382,11 @@ + %define HAVE_STRUCT_SOCKADDR_SA_LEN 0 + %define HAVE_STRUCT_SOCKADDR_STORAGE 1 + %define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 +-%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 +-%define HAVE_MAKEINFO 0 +-%define HAVE_MAKEINFO_HTML 0 ++%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++%define HAVE_GZIP 1 ++%define HAVE_LIBDRM_GETFB2 0 ++%define HAVE_MAKEINFO 1 ++%define HAVE_MAKEINFO_HTML 1 + %define HAVE_OPENCL_D3D11 0 + %define HAVE_OPENCL_DRM_ARM 0 + %define HAVE_OPENCL_DRM_BEIGNET 0 +@@ -357,13 +395,15 @@ + %define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 + %define HAVE_PERL 1 + %define HAVE_POD2MAN 1 +-%define HAVE_TEXI2HTML 1 ++%define HAVE_TEXI2HTML 0 ++%define HAVE_XMLLINT 1 ++%define HAVE_ZLIB_GZIP 0 + %define CONFIG_DOC 0 + %define CONFIG_HTMLPAGES 1 + %define CONFIG_MANPAGES 1 + %define CONFIG_PODPAGES 1 + %define CONFIG_TXTPAGES 1 +-%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + %define CONFIG_AVIO_READING_EXAMPLE 1 + %define CONFIG_DECODE_AUDIO_EXAMPLE 1 + %define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -398,16 +438,13 @@ + %define CONFIG_LIBXAVS2 0 + %define CONFIG_LIBXVID 0 + %define CONFIG_DECKLINK 0 +-%define CONFIG_LIBNDI_NEWTEK 0 + %define CONFIG_LIBFDK_AAC 0 +-%define CONFIG_OPENSSL 0 + %define CONFIG_LIBTLS 0 + %define CONFIG_GMP 0 + %define CONFIG_LIBARIBB24 0 + %define CONFIG_LIBLENSFUN 0 + %define CONFIG_LIBOPENCORE_AMRNB 0 + %define CONFIG_LIBOPENCORE_AMRWB 0 +-%define CONFIG_LIBVMAF 0 + %define CONFIG_LIBVO_AMRWBENC 0 + %define CONFIG_MBEDTLS 0 + %define CONFIG_RKMPP 0 +@@ -417,6 +454,7 @@ + %define CONFIG_GNUTLS 0 + %define CONFIG_JNI 0 + %define CONFIG_LADSPA 0 ++%define CONFIG_LCMS2 0 + %define CONFIG_LIBAOM 0 + %define CONFIG_LIBASS 0 + %define CONFIG_LIBBLURAY 0 +@@ -431,11 +469,13 @@ + %define CONFIG_LIBFONTCONFIG 0 + %define CONFIG_LIBFREETYPE 0 + %define CONFIG_LIBFRIBIDI 0 ++%define CONFIG_LIBGLSLANG 0 + %define CONFIG_LIBGME 0 + %define CONFIG_LIBGSM 0 + %define CONFIG_LIBIEC61883 0 + %define CONFIG_LIBILBC 0 + %define CONFIG_LIBJACK 0 ++%define CONFIG_LIBJXL 0 + %define CONFIG_LIBKLVANC 0 + %define CONFIG_LIBKVAZAAR 0 + %define CONFIG_LIBMODPLUG 0 +@@ -445,10 +485,16 @@ + %define CONFIG_LIBOPENH264 0 + %define CONFIG_LIBOPENJPEG 0 + %define CONFIG_LIBOPENMPT 0 ++%define CONFIG_LIBOPENVINO 0 + %define CONFIG_LIBOPUS 0 ++%define CONFIG_LIBPLACEBO 0 + %define CONFIG_LIBPULSE 0 ++%define CONFIG_LIBRABBITMQ 0 ++%define CONFIG_LIBRAV1E 0 ++%define CONFIG_LIBRIST 0 + %define CONFIG_LIBRSVG 0 + %define CONFIG_LIBRTMP 0 ++%define CONFIG_LIBSHADERC 0 + %define CONFIG_LIBSHINE 0 + %define CONFIG_LIBSMBCLIENT 0 + %define CONFIG_LIBSNAPPY 0 +@@ -456,14 +502,16 @@ + %define CONFIG_LIBSPEEX 0 + %define CONFIG_LIBSRT 0 + %define CONFIG_LIBSSH 0 ++%define CONFIG_LIBSVTAV1 0 + %define CONFIG_LIBTENSORFLOW 0 + %define CONFIG_LIBTESSERACT 0 + %define CONFIG_LIBTHEORA 0 + %define CONFIG_LIBTWOLAME 0 ++%define CONFIG_LIBUAVS3D 0 + %define CONFIG_LIBV4L2 0 ++%define CONFIG_LIBVMAF 0 + %define CONFIG_LIBVORBIS 0 + %define CONFIG_LIBVPX 0 +-%define CONFIG_LIBWAVPACK 0 + %define CONFIG_LIBWEBP 0 + %define CONFIG_LIBXML2 0 + %define CONFIG_LIBZIMG 0 +@@ -473,25 +521,28 @@ + %define CONFIG_MEDIACODEC 0 + %define CONFIG_OPENAL 0 + %define CONFIG_OPENGL 0 ++%define CONFIG_OPENSSL 0 + %define CONFIG_POCKETSPHINX 0 + %define CONFIG_VAPOURSYNTH 0 + %define CONFIG_ALSA 0 +-%define CONFIG_APPKIT 1 +-%define CONFIG_AVFOUNDATION 1 +-%define CONFIG_BZLIB 1 ++%define CONFIG_APPKIT 0 ++%define CONFIG_AVFOUNDATION 0 ++%define CONFIG_BZLIB 0 + %define CONFIG_COREIMAGE 0 + %define CONFIG_ICONV 0 + %define CONFIG_LIBXCB 0 + %define CONFIG_LIBXCB_SHM 0 + %define CONFIG_LIBXCB_SHAPE 0 + %define CONFIG_LIBXCB_XFIXES 0 +-%define CONFIG_LZMA 1 ++%define CONFIG_LZMA 0 ++%define CONFIG_MEDIAFOUNDATION 0 ++%define CONFIG_METAL 0 + %define CONFIG_SCHANNEL 0 + %define CONFIG_SDL2 0 + %define CONFIG_SECURETRANSPORT 0 + %define CONFIG_SNDIO 0 +-%define CONFIG_XLIB 1 +-%define CONFIG_ZLIB 1 ++%define CONFIG_XLIB 0 ++%define CONFIG_ZLIB 0 + %define CONFIG_CUDA_NVCC 0 + %define CONFIG_CUDA_SDK 0 + %define CONFIG_LIBNPP 0 +@@ -500,7 +551,7 @@ + %define CONFIG_OMX 0 + %define CONFIG_OPENCL 0 + %define CONFIG_AMF 0 +-%define CONFIG_AUDIOTOOLBOX 1 ++%define CONFIG_AUDIOTOOLBOX 0 + %define CONFIG_CRYSTALHD 0 + %define CONFIG_CUDA 0 + %define CONFIG_CUDA_LLVM 0 +@@ -510,11 +561,11 @@ + %define CONFIG_FFNVCODEC 0 + %define CONFIG_NVDEC 0 + %define CONFIG_NVENC 0 +-%define CONFIG_VAAPI 0 ++%define CONFIG_VAAPI 1 + %define CONFIG_VDPAU 0 + %define CONFIG_VIDEOTOOLBOX 0 +-%define CONFIG_V4L2_M2M 1 +-%define CONFIG_XVMC 0 ++%define CONFIG_VULKAN 0 ++%define CONFIG_V4L2_M2M 0 + %define CONFIG_FTRAPV 0 + %define CONFIG_GRAY 0 + %define CONFIG_HARDCODED_TABLES 0 +@@ -535,7 +586,6 @@ + %define CONFIG_AVFORMAT 0 + %define CONFIG_AVCODEC 1 + %define CONFIG_SWRESAMPLE 0 +-%define CONFIG_AVRESAMPLE 0 + %define CONFIG_AVUTIL 1 + %define CONFIG_FFPLAY 0 + %define CONFIG_FFPROBE 0 +@@ -547,27 +597,38 @@ + %define CONFIG_FAST_UNALIGNED 1 + %define CONFIG_FFT 1 + %define CONFIG_LSP 0 +-%define CONFIG_LZO 0 + %define CONFIG_MDCT 0 + %define CONFIG_PIXELUTILS 0 + %define CONFIG_NETWORK 0 + %define CONFIG_RDFT 1 + %define CONFIG_AUTODETECT 0 + %define CONFIG_FONTCONFIG 0 ++%define CONFIG_LARGE_TESTS 1 + %define CONFIG_LINUX_PERF 0 ++%define CONFIG_MACOS_KPERF 0 + %define CONFIG_MEMORY_POISONING 0 + %define CONFIG_NEON_CLOBBER_TEST 0 + %define CONFIG_OSSFUZZ 0 + %define CONFIG_PIC 1 ++%define CONFIG_PTX_COMPRESSION 0 + %define CONFIG_THUMB 0 + %define CONFIG_VALGRIND_BACKTRACE 0 + %define CONFIG_XMM_CLOBBER_TEST 0 +-%define CONFIG_BSFS 1 ++%define CONFIG_BSFS 0 + %define CONFIG_DECODERS 1 ++%define CONFIG_ENCODERS 0 ++%define CONFIG_HWACCELS 1 + %define CONFIG_PARSERS 1 ++%define CONFIG_INDEVS 0 ++%define CONFIG_OUTDEVS 0 ++%define CONFIG_FILTERS 0 ++%define CONFIG_DEMUXERS 0 ++%define CONFIG_MUXERS 0 ++%define CONFIG_PROTOCOLS 0 + %define CONFIG_AANDCTTABLES 0 + %define CONFIG_AC3DSP 0 + %define CONFIG_ADTS_HEADER 0 ++%define CONFIG_ATSC_A53 0 + %define CONFIG_AUDIO_FRAME_QUEUE 0 + %define CONFIG_AUDIODSP 0 + %define CONFIG_BLOCKDSP 0 +@@ -580,8 +641,10 @@ + %define CONFIG_CBS_JPEG 0 + %define CONFIG_CBS_MPEG2 0 + %define CONFIG_CBS_VP9 0 ++%define CONFIG_DEFLATE_WRAPPER 0 + %define CONFIG_DIRAC_PARSE 0 + %define CONFIG_DNN 0 ++%define CONFIG_DOVI_RPU 0 + %define CONFIG_DVPROFILE 0 + %define CONFIG_EXIF 0 + %define CONFIG_FAANDCT 1 +@@ -607,6 +670,7 @@ + %define CONFIG_IDCTDSP 1 + %define CONFIG_IIRFILTER 0 + %define CONFIG_MDCT15 0 ++%define CONFIG_INFLATE_WRAPPER 0 + %define CONFIG_INTRAX8 0 + %define CONFIG_ISO_MEDIA 0 + %define CONFIG_IVIDSP 0 +@@ -623,7 +687,9 @@ + %define CONFIG_MPEGAUDIO 1 + %define CONFIG_MPEGAUDIODSP 1 + %define CONFIG_MPEGAUDIOHEADER 1 ++%define CONFIG_MPEG4AUDIO 0 + %define CONFIG_MPEGVIDEO 0 ++%define CONFIG_MPEGVIDEODEC 0 + %define CONFIG_MPEGVIDEOENC 0 + %define CONFIG_MSS34DSP 0 + %define CONFIG_PIXBLOCKDSP 0 +@@ -646,7 +712,7 @@ + %define CONFIG_TEXTUREDSP 0 + %define CONFIG_TEXTUREDSPENC 0 + %define CONFIG_TPELDSP 0 +-%define CONFIG_VAAPI_1 0 ++%define CONFIG_VAAPI_1 1 + %define CONFIG_VAAPI_ENCODE 0 + %define CONFIG_VC1DSP 0 + %define CONFIG_VIDEODSP 1 +@@ -655,13 +721,3 @@ + %define CONFIG_VP8DSP 1 + %define CONFIG_WMA_FREQS 0 + %define CONFIG_WMV2DSP 0 +-%define CONFIG_NULL_BSF 1 +-%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-%define CONFIG_VP8_DECODER 1 +-%define CONFIG_VP9_DECODER 1 +-%define CONFIG_AV1_DECODER 1 +-%define CONFIG_FLAC_DECODER 1 +-%define CONFIG_MP3_DECODER 1 +-%define CONFIG_VP8_PARSER 1 +-%define CONFIG_VP9_PARSER 1 +-%define CONFIG_AV1_PARSER 1 +diff -Naur a/media/ffvpx/config_unix64.h b/media/ffvpx/config_unix64.h +--- a/media/ffvpx/config_unix64.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_unix64.h 2023-04-06 12:49:19.192546469 +0200 +@@ -1,15 +1,16 @@ + /* Automatically generated by configure - do not modify! */ + #ifndef FFMPEG_CONFIG_H + #define FFMPEG_CONFIG_H +-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3" ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac,av1' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --disable-iconv --enable-vaapi --enable-hwaccel='vp9_vaapi,vp8_vaapi,av1_vaapi' --enable-libdav1d" + #define FFMPEG_LICENSE "LGPL version 2.1 or later" +-#define CONFIG_THIS_YEAR 2019 ++#define CONFIG_THIS_YEAR 2022 + #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" + #define AVCONV_DATADIR "/usr/local/share/ffmpeg" +-#define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406" ++#define CC_IDENT "gcc 11 (Ubuntu 11.2.0-19ubuntu1)" ++#define OS_NAME linux + #define av_restrict restrict + #define EXTERN_PREFIX "" +-#define EXTERN_ASM ++#define EXTERN_ASM + #define BUILDSUF "" + #define SLIBSUF ".so" + #define HAVE_MMX2 HAVE_MMXEXT +@@ -22,12 +23,16 @@ + #define ARCH_AVR32_UC 0 + #define ARCH_BFIN 0 + #define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 + #define ARCH_M68K 0 + #define ARCH_MIPS 0 + #define ARCH_MIPS64 0 + #define ARCH_PARISC 0 + #define ARCH_PPC 0 + #define ARCH_PPC64 0 ++#define ARCH_RISCV 0 + #define ARCH_S390 0 + #define ARCH_SH4 0 + #define ARCH_SPARC 0 +@@ -58,6 +63,7 @@ + #define HAVE_AVX 1 + #define HAVE_AVX2 1 + #define HAVE_AVX512 1 ++#define HAVE_AVX512ICL 1 + #define HAVE_FMA3 1 + #define HAVE_FMA4 1 + #define HAVE_MMX 1 +@@ -80,10 +86,11 @@ + #define HAVE_MIPSDSP 0 + #define HAVE_MIPSDSPR2 0 + #define HAVE_MSA 0 +-#define HAVE_MSA2 0 + #define HAVE_LOONGSON2 0 + #define HAVE_LOONGSON3 0 + #define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 + #define HAVE_ARMV5TE_EXTERNAL 0 + #define HAVE_ARMV6_EXTERNAL 0 + #define HAVE_ARMV6T2_EXTERNAL 0 +@@ -104,6 +111,7 @@ + #define HAVE_AVX_EXTERNAL 1 + #define HAVE_AVX2_EXTERNAL 1 + #define HAVE_AVX512_EXTERNAL 1 ++#define HAVE_AVX512ICL_EXTERNAL 1 + #define HAVE_FMA3_EXTERNAL 1 + #define HAVE_FMA4_EXTERNAL 1 + #define HAVE_MMX_EXTERNAL 1 +@@ -126,10 +134,11 @@ + #define HAVE_MIPSDSP_EXTERNAL 0 + #define HAVE_MIPSDSPR2_EXTERNAL 0 + #define HAVE_MSA_EXTERNAL 0 +-#define HAVE_MSA2_EXTERNAL 0 + #define HAVE_LOONGSON2_EXTERNAL 0 + #define HAVE_LOONGSON3_EXTERNAL 0 + #define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 + #define HAVE_ARMV5TE_INLINE 0 + #define HAVE_ARMV6_INLINE 0 + #define HAVE_ARMV6T2_INLINE 0 +@@ -150,6 +159,7 @@ + #define HAVE_AVX_INLINE 1 + #define HAVE_AVX2_INLINE 1 + #define HAVE_AVX512_INLINE 1 ++#define HAVE_AVX512ICL_INLINE 1 + #define HAVE_FMA3_INLINE 1 + #define HAVE_FMA4_INLINE 1 + #define HAVE_MMX_INLINE 1 +@@ -172,10 +182,11 @@ + #define HAVE_MIPSDSP_INLINE 0 + #define HAVE_MIPSDSPR2_INLINE 0 + #define HAVE_MSA_INLINE 0 +-#define HAVE_MSA2_INLINE 0 + #define HAVE_LOONGSON2_INLINE 0 + #define HAVE_LOONGSON3_INLINE 0 + #define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 + #define HAVE_ALIGNED_STACK 1 + #define HAVE_FAST_64BIT 1 + #define HAVE_FAST_CLZ 1 +@@ -191,8 +202,8 @@ + #define HAVE_RDTSC 0 + #define HAVE_SEM_TIMEDWAIT 1 + #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 +-#define HAVE_CABS 1 +-#define HAVE_CEXP 1 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 + #define HAVE_INLINE_ASM 1 + #define HAVE_SYMVER 1 + #define HAVE_X86ASM 1 +@@ -216,7 +227,8 @@ + #define HAVE_ES2_GL_H 0 + #define HAVE_GSM_H 0 + #define HAVE_IO_H 0 +-#define HAVE_LINUX_PERF_EVENT_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 1 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 + #define HAVE_OPENCV2_CORE_CORE_C_H 0 +@@ -268,7 +280,7 @@ + #define HAVE_DOS_PATHS 0 + #define HAVE_LIBC_MSVCRT 0 + #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 +-#define HAVE_SECTION_DATA_REL_RO 0 ++#define HAVE_SECTION_DATA_REL_RO 1 + #define HAVE_THREADS 1 + #define HAVE_UWP 0 + #define HAVE_WINRT 0 +@@ -279,12 +291,16 @@ + #define HAVE_COMMANDLINETOARGVW 0 + #define HAVE_FCNTL 1 + #define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 1 ++#define HAVE_GETENV 1 + #define HAVE_GETHRTIME 0 + #define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 + #define HAVE_GETPROCESSAFFINITYMASK 0 + #define HAVE_GETPROCESSMEMORYINFO 0 + #define HAVE_GETPROCESSTIMES 0 + #define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 + #define HAVE_GETSYSTEMTIMEASFILETIME 0 + #define HAVE_GETTIMEOFDAY 1 + #define HAVE_GLOB 1 +@@ -307,6 +323,7 @@ + #define HAVE_SECITEMIMPORT 0 + #define HAVE_SETCONSOLETEXTATTRIBUTE 0 + #define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 + #define HAVE_SETMODE 0 + #define HAVE_SETRLIMIT 1 + #define HAVE_SLEEP 0 +@@ -347,7 +364,22 @@ + #define HAVE_XFORM_ASM 0 + #define HAVE_XMM_CLOBBERS 1 + #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 + #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + #define HAVE_SOCKLEN_T 1 + #define HAVE_STRUCT_ADDRINFO 1 + #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -361,9 +393,11 @@ + #define HAVE_STRUCT_SOCKADDR_SA_LEN 0 + #define HAVE_STRUCT_SOCKADDR_STORAGE 1 + #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 +-#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 +-#define HAVE_MAKEINFO 0 +-#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 1 ++#define HAVE_MAKEINFO_HTML 1 + #define HAVE_OPENCL_D3D11 0 + #define HAVE_OPENCL_DRM_ARM 0 + #define HAVE_OPENCL_DRM_BEIGNET 0 +@@ -372,13 +406,15 @@ + #define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 + #define HAVE_PERL 1 + #define HAVE_POD2MAN 1 +-#define HAVE_TEXI2HTML 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 + #define CONFIG_DOC 0 + #define CONFIG_HTMLPAGES 1 + #define CONFIG_MANPAGES 1 + #define CONFIG_PODPAGES 1 + #define CONFIG_TXTPAGES 1 +-#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + #define CONFIG_AVIO_READING_EXAMPLE 1 + #define CONFIG_DECODE_AUDIO_EXAMPLE 1 + #define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -414,14 +450,12 @@ + #define CONFIG_LIBXVID 0 + #define CONFIG_DECKLINK 0 + #define CONFIG_LIBFDK_AAC 0 +-#define CONFIG_OPENSSL 0 + #define CONFIG_LIBTLS 0 + #define CONFIG_GMP 0 + #define CONFIG_LIBARIBB24 0 + #define CONFIG_LIBLENSFUN 0 + #define CONFIG_LIBOPENCORE_AMRNB 0 + #define CONFIG_LIBOPENCORE_AMRWB 0 +-#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVO_AMRWBENC 0 + #define CONFIG_MBEDTLS 0 + #define CONFIG_RKMPP 0 +@@ -431,6 +465,7 @@ + #define CONFIG_GNUTLS 0 + #define CONFIG_JNI 0 + #define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 + #define CONFIG_LIBAOM 0 + #define CONFIG_LIBASS 0 + #define CONFIG_LIBBLURAY 0 +@@ -438,18 +473,20 @@ + #define CONFIG_LIBCACA 0 + #define CONFIG_LIBCELT 0 + #define CONFIG_LIBCODEC2 0 +-#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDAV1D 1 + #define CONFIG_LIBDC1394 0 + #define CONFIG_LIBDRM 0 + #define CONFIG_LIBFLITE 0 + #define CONFIG_LIBFONTCONFIG 0 + #define CONFIG_LIBFREETYPE 0 + #define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 + #define CONFIG_LIBGME 0 + #define CONFIG_LIBGSM 0 + #define CONFIG_LIBIEC61883 0 + #define CONFIG_LIBILBC 0 + #define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 + #define CONFIG_LIBKLVANC 0 + #define CONFIG_LIBKVAZAAR 0 + #define CONFIG_LIBMODPLUG 0 +@@ -459,10 +496,16 @@ + #define CONFIG_LIBOPENH264 0 + #define CONFIG_LIBOPENJPEG 0 + #define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 + #define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 + #define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 + #define CONFIG_LIBRSVG 0 + #define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 + #define CONFIG_LIBSHINE 0 + #define CONFIG_LIBSMBCLIENT 0 + #define CONFIG_LIBSNAPPY 0 +@@ -470,14 +513,16 @@ + #define CONFIG_LIBSPEEX 0 + #define CONFIG_LIBSRT 0 + #define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 + #define CONFIG_LIBTENSORFLOW 0 + #define CONFIG_LIBTESSERACT 0 + #define CONFIG_LIBTHEORA 0 + #define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 + #define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVORBIS 0 + #define CONFIG_LIBVPX 0 +-#define CONFIG_LIBWAVPACK 0 + #define CONFIG_LIBWEBP 0 + #define CONFIG_LIBXML2 0 + #define CONFIG_LIBZIMG 0 +@@ -487,25 +532,28 @@ + #define CONFIG_MEDIACODEC 0 + #define CONFIG_OPENAL 0 + #define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 + #define CONFIG_POCKETSPHINX 0 + #define CONFIG_VAPOURSYNTH 0 + #define CONFIG_ALSA 0 +-#define CONFIG_APPKIT 1 +-#define CONFIG_AVFOUNDATION 1 +-#define CONFIG_BZLIB 1 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 + #define CONFIG_COREIMAGE 0 + #define CONFIG_ICONV 0 + #define CONFIG_LIBXCB 0 + #define CONFIG_LIBXCB_SHM 0 + #define CONFIG_LIBXCB_SHAPE 0 + #define CONFIG_LIBXCB_XFIXES 0 +-#define CONFIG_LZMA 1 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 + #define CONFIG_SCHANNEL 0 + #define CONFIG_SDL2 0 + #define CONFIG_SECURETRANSPORT 0 + #define CONFIG_SNDIO 0 +-#define CONFIG_XLIB 1 +-#define CONFIG_ZLIB 1 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 + #define CONFIG_CUDA_NVCC 0 + #define CONFIG_CUDA_SDK 0 + #define CONFIG_LIBNPP 0 +@@ -514,7 +562,7 @@ + #define CONFIG_OMX 0 + #define CONFIG_OPENCL 0 + #define CONFIG_AMF 0 +-#define CONFIG_AUDIOTOOLBOX 1 ++#define CONFIG_AUDIOTOOLBOX 0 + #define CONFIG_CRYSTALHD 0 + #define CONFIG_CUDA 0 + #define CONFIG_CUDA_LLVM 0 +@@ -524,11 +572,10 @@ + #define CONFIG_FFNVCODEC 0 + #define CONFIG_NVDEC 0 + #define CONFIG_NVENC 0 +-#define CONFIG_VAAPI 0 + #define CONFIG_VDPAU 0 + #define CONFIG_VIDEOTOOLBOX 0 +-#define CONFIG_V4L2_M2M 1 +-#define CONFIG_XVMC 0 ++#define CONFIG_VULKAN 0 ++#define CONFIG_V4L2_M2M 0 + #define CONFIG_FTRAPV 0 + #define CONFIG_GRAY 0 + #define CONFIG_HARDCODED_TABLES 0 +@@ -549,7 +596,6 @@ + #define CONFIG_AVFORMAT 0 + #define CONFIG_AVCODEC 1 + #define CONFIG_SWRESAMPLE 0 +-#define CONFIG_AVRESAMPLE 0 + #define CONFIG_AVUTIL 1 + #define CONFIG_FFPLAY 0 + #define CONFIG_FFPROBE 0 +@@ -561,27 +607,38 @@ + #define CONFIG_FAST_UNALIGNED 1 + #define CONFIG_FFT 1 + #define CONFIG_LSP 0 +-#define CONFIG_LZO 0 + #define CONFIG_MDCT 0 + #define CONFIG_PIXELUTILS 0 + #define CONFIG_NETWORK 0 + #define CONFIG_RDFT 1 + #define CONFIG_AUTODETECT 0 + #define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 + #define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 + #define CONFIG_MEMORY_POISONING 0 + #define CONFIG_NEON_CLOBBER_TEST 0 + #define CONFIG_OSSFUZZ 0 + #define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 + #define CONFIG_THUMB 0 + #define CONFIG_VALGRIND_BACKTRACE 0 + #define CONFIG_XMM_CLOBBER_TEST 0 +-#define CONFIG_BSFS 1 ++#define CONFIG_BSFS 0 + #define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 1 + #define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 + #define CONFIG_AANDCTTABLES 0 + #define CONFIG_AC3DSP 0 + #define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 + #define CONFIG_AUDIO_FRAME_QUEUE 0 + #define CONFIG_AUDIODSP 0 + #define CONFIG_BLOCKDSP 0 +@@ -594,8 +651,10 @@ + #define CONFIG_CBS_JPEG 0 + #define CONFIG_CBS_MPEG2 0 + #define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 + #define CONFIG_DIRAC_PARSE 0 + #define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 + #define CONFIG_DVPROFILE 0 + #define CONFIG_EXIF 0 + #define CONFIG_FAANDCT 1 +@@ -621,6 +680,7 @@ + #define CONFIG_IDCTDSP 1 + #define CONFIG_IIRFILTER 0 + #define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 + #define CONFIG_INTRAX8 0 + #define CONFIG_ISO_MEDIA 0 + #define CONFIG_IVIDSP 0 +@@ -637,7 +697,9 @@ + #define CONFIG_MPEGAUDIO 1 + #define CONFIG_MPEGAUDIODSP 1 + #define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 + #define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 + #define CONFIG_MPEGVIDEOENC 0 + #define CONFIG_MSS34DSP 0 + #define CONFIG_PIXBLOCKDSP 0 +@@ -660,7 +722,6 @@ + #define CONFIG_TEXTUREDSP 0 + #define CONFIG_TEXTUREDSPENC 0 + #define CONFIG_TPELDSP 0 +-#define CONFIG_VAAPI_1 0 + #define CONFIG_VAAPI_ENCODE 0 + #define CONFIG_VC1DSP 0 + #define CONFIG_VIDEODSP 1 +@@ -669,14 +730,4 @@ + #define CONFIG_VP8DSP 1 + #define CONFIG_WMA_FREQS 0 + #define CONFIG_WMV2DSP 0 +-#define CONFIG_NULL_BSF 1 +-#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-#define CONFIG_VP8_DECODER 1 +-#define CONFIG_VP9_DECODER 1 +-#define CONFIG_AV1_DECODER 1 +-#define CONFIG_FLAC_DECODER 1 +-#define CONFIG_MP3_DECODER 1 +-#define CONFIG_VP8_PARSER 1 +-#define CONFIG_VP9_PARSER 1 +-#define CONFIG_AV1_PARSER 1 + #endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_unix_aarch64.h b/media/ffvpx/config_unix_aarch64.h +--- a/media/ffvpx/config_unix_aarch64.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_unix_aarch64.h 2023-04-06 12:49:19.192546469 +0200 +@@ -0,0 +1,735 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_H ++#define FFMPEG_CONFIG_H ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac,av1' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --disable-iconv --as=clang --cc=clang" ++#define FFMPEG_LICENSE "LGPL version 2.1 or later" ++#define CONFIG_THIS_YEAR 2022 ++#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" ++#define AVCONV_DATADIR "/usr/local/share/ffmpeg" ++#define CC_IDENT "Debian clang version 11.0.1-2" ++#define OS_NAME linux ++#define av_restrict restrict ++#define EXTERN_PREFIX "" ++#define EXTERN_ASM ++#define BUILDSUF "" ++#define SLIBSUF ".so" ++#define HAVE_MMX2 HAVE_MMXEXT ++#define SWS_MAX_FILTER_SIZE 256 ++#define ARCH_AARCH64 1 ++#define ARCH_ALPHA 0 ++#define ARCH_ARM 0 ++#define ARCH_AVR32 0 ++#define ARCH_AVR32_AP 0 ++#define ARCH_AVR32_UC 0 ++#define ARCH_BFIN 0 ++#define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 ++#define ARCH_M68K 0 ++#define ARCH_MIPS 0 ++#define ARCH_MIPS64 0 ++#define ARCH_PARISC 0 ++#define ARCH_PPC 0 ++#define ARCH_PPC64 0 ++#define ARCH_RISCV 0 ++#define ARCH_S390 0 ++#define ARCH_SH4 0 ++#define ARCH_SPARC 0 ++#define ARCH_SPARC64 0 ++#define ARCH_TILEGX 0 ++#define ARCH_TILEPRO 0 ++#define ARCH_TOMI 0 ++#define ARCH_X86 0 ++#define ARCH_X86_32 0 ++#define ARCH_X86_64 0 ++#define HAVE_ARMV5TE 0 ++#define HAVE_ARMV6 0 ++#define HAVE_ARMV6T2 0 ++#define HAVE_ARMV8 1 ++#define HAVE_NEON 1 ++#define HAVE_VFP 1 ++#define HAVE_VFPV3 0 ++#define HAVE_SETEND 0 ++#define HAVE_ALTIVEC 0 ++#define HAVE_DCBZL 0 ++#define HAVE_LDBRX 0 ++#define HAVE_POWER8 0 ++#define HAVE_PPC4XX 0 ++#define HAVE_VSX 0 ++#define HAVE_AESNI 0 ++#define HAVE_AMD3DNOW 0 ++#define HAVE_AMD3DNOWEXT 0 ++#define HAVE_AVX 0 ++#define HAVE_AVX2 0 ++#define HAVE_AVX512 0 ++#define HAVE_AVX512ICL 0 ++#define HAVE_FMA3 0 ++#define HAVE_FMA4 0 ++#define HAVE_MMX 0 ++#define HAVE_MMXEXT 0 ++#define HAVE_SSE 0 ++#define HAVE_SSE2 0 ++#define HAVE_SSE3 0 ++#define HAVE_SSE4 0 ++#define HAVE_SSE42 0 ++#define HAVE_SSSE3 0 ++#define HAVE_XOP 0 ++#define HAVE_CPUNOP 0 ++#define HAVE_I686 0 ++#define HAVE_MIPSFPU 0 ++#define HAVE_MIPS32R2 0 ++#define HAVE_MIPS32R5 0 ++#define HAVE_MIPS64R2 0 ++#define HAVE_MIPS32R6 0 ++#define HAVE_MIPS64R6 0 ++#define HAVE_MIPSDSP 0 ++#define HAVE_MIPSDSPR2 0 ++#define HAVE_MSA 0 ++#define HAVE_LOONGSON2 0 ++#define HAVE_LOONGSON3 0 ++#define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 ++#define HAVE_ARMV5TE_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 0 ++#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV8_EXTERNAL 1 ++#define HAVE_NEON_EXTERNAL 1 ++#define HAVE_VFP_EXTERNAL 1 ++#define HAVE_VFPV3_EXTERNAL 0 ++#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_ALTIVEC_EXTERNAL 0 ++#define HAVE_DCBZL_EXTERNAL 0 ++#define HAVE_LDBRX_EXTERNAL 0 ++#define HAVE_POWER8_EXTERNAL 0 ++#define HAVE_PPC4XX_EXTERNAL 0 ++#define HAVE_VSX_EXTERNAL 0 ++#define HAVE_AESNI_EXTERNAL 0 ++#define HAVE_AMD3DNOW_EXTERNAL 0 ++#define HAVE_AMD3DNOWEXT_EXTERNAL 0 ++#define HAVE_AVX_EXTERNAL 0 ++#define HAVE_AVX2_EXTERNAL 0 ++#define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_AVX512ICL_EXTERNAL 0 ++#define HAVE_FMA3_EXTERNAL 0 ++#define HAVE_FMA4_EXTERNAL 0 ++#define HAVE_MMX_EXTERNAL 0 ++#define HAVE_MMXEXT_EXTERNAL 0 ++#define HAVE_SSE_EXTERNAL 0 ++#define HAVE_SSE2_EXTERNAL 0 ++#define HAVE_SSE3_EXTERNAL 0 ++#define HAVE_SSE4_EXTERNAL 0 ++#define HAVE_SSE42_EXTERNAL 0 ++#define HAVE_SSSE3_EXTERNAL 0 ++#define HAVE_XOP_EXTERNAL 0 ++#define HAVE_CPUNOP_EXTERNAL 0 ++#define HAVE_I686_EXTERNAL 0 ++#define HAVE_MIPSFPU_EXTERNAL 0 ++#define HAVE_MIPS32R2_EXTERNAL 0 ++#define HAVE_MIPS32R5_EXTERNAL 0 ++#define HAVE_MIPS64R2_EXTERNAL 0 ++#define HAVE_MIPS32R6_EXTERNAL 0 ++#define HAVE_MIPS64R6_EXTERNAL 0 ++#define HAVE_MIPSDSP_EXTERNAL 0 ++#define HAVE_MIPSDSPR2_EXTERNAL 0 ++#define HAVE_MSA_EXTERNAL 0 ++#define HAVE_LOONGSON2_EXTERNAL 0 ++#define HAVE_LOONGSON3_EXTERNAL 0 ++#define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 ++#define HAVE_ARMV5TE_INLINE 0 ++#define HAVE_ARMV6_INLINE 0 ++#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV8_INLINE 1 ++#define HAVE_NEON_INLINE 1 ++#define HAVE_VFP_INLINE 1 ++#define HAVE_VFPV3_INLINE 0 ++#define HAVE_SETEND_INLINE 0 ++#define HAVE_ALTIVEC_INLINE 0 ++#define HAVE_DCBZL_INLINE 0 ++#define HAVE_LDBRX_INLINE 0 ++#define HAVE_POWER8_INLINE 0 ++#define HAVE_PPC4XX_INLINE 0 ++#define HAVE_VSX_INLINE 0 ++#define HAVE_AESNI_INLINE 0 ++#define HAVE_AMD3DNOW_INLINE 0 ++#define HAVE_AMD3DNOWEXT_INLINE 0 ++#define HAVE_AVX_INLINE 0 ++#define HAVE_AVX2_INLINE 0 ++#define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 ++#define HAVE_FMA3_INLINE 0 ++#define HAVE_FMA4_INLINE 0 ++#define HAVE_MMX_INLINE 0 ++#define HAVE_MMXEXT_INLINE 0 ++#define HAVE_SSE_INLINE 0 ++#define HAVE_SSE2_INLINE 0 ++#define HAVE_SSE3_INLINE 0 ++#define HAVE_SSE4_INLINE 0 ++#define HAVE_SSE42_INLINE 0 ++#define HAVE_SSSE3_INLINE 0 ++#define HAVE_XOP_INLINE 0 ++#define HAVE_CPUNOP_INLINE 0 ++#define HAVE_I686_INLINE 0 ++#define HAVE_MIPSFPU_INLINE 0 ++#define HAVE_MIPS32R2_INLINE 0 ++#define HAVE_MIPS32R5_INLINE 0 ++#define HAVE_MIPS64R2_INLINE 0 ++#define HAVE_MIPS32R6_INLINE 0 ++#define HAVE_MIPS64R6_INLINE 0 ++#define HAVE_MIPSDSP_INLINE 0 ++#define HAVE_MIPSDSPR2_INLINE 0 ++#define HAVE_MSA_INLINE 0 ++#define HAVE_LOONGSON2_INLINE 0 ++#define HAVE_LOONGSON3_INLINE 0 ++#define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 ++#define HAVE_ALIGNED_STACK 1 ++#define HAVE_FAST_64BIT 1 ++#define HAVE_FAST_CLZ 1 ++#define HAVE_FAST_CMOV 0 ++#define HAVE_LOCAL_ALIGNED 0 ++#define HAVE_SIMD_ALIGN_16 1 ++#define HAVE_SIMD_ALIGN_32 0 ++#define HAVE_SIMD_ALIGN_64 0 ++#define HAVE_ATOMIC_CAS_PTR 0 ++#define HAVE_MACHINE_RW_BARRIER 0 ++#define HAVE_MEMORYBARRIER 0 ++#define HAVE_MM_EMPTY 0 ++#define HAVE_RDTSC 0 ++#define HAVE_SEM_TIMEDWAIT 1 ++#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 ++#define HAVE_INLINE_ASM 1 ++#define HAVE_SYMVER 1 ++#define HAVE_X86ASM 0 ++#define HAVE_BIGENDIAN 0 ++#define HAVE_FAST_UNALIGNED 1 ++#define HAVE_ARPA_INET_H 1 ++#define HAVE_ASM_TYPES_H 1 ++#define HAVE_CDIO_PARANOIA_H 0 ++#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 ++#define HAVE_CUDA_H 0 ++#define HAVE_DISPATCH_DISPATCH_H 0 ++#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 ++#define HAVE_DEV_IC_BT8XX_H 0 ++#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 ++#define HAVE_DIRECT_H 0 ++#define HAVE_DIRENT_H 1 ++#define HAVE_DXGIDEBUG_H 0 ++#define HAVE_DXVA_H 0 ++#define HAVE_ES2_GL_H 0 ++#define HAVE_GSM_H 0 ++#define HAVE_IO_H 0 ++#define HAVE_LINUX_DMA_BUF_H 0 ++#define HAVE_LINUX_PERF_EVENT_H 1 ++#define HAVE_MACHINE_IOCTL_BT848_H 0 ++#define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_OPENCV2_CORE_CORE_C_H 0 ++#define HAVE_OPENGL_GL3_H 0 ++#define HAVE_POLL_H 1 ++#define HAVE_SYS_PARAM_H 1 ++#define HAVE_SYS_RESOURCE_H 1 ++#define HAVE_SYS_SELECT_H 1 ++#define HAVE_SYS_SOUNDCARD_H 1 ++#define HAVE_SYS_TIME_H 1 ++#define HAVE_SYS_UN_H 1 ++#define HAVE_SYS_VIDEOIO_H 0 ++#define HAVE_TERMIOS_H 1 ++#define HAVE_UDPLITE_H 0 ++#define HAVE_UNISTD_H 1 ++#define HAVE_VALGRIND_VALGRIND_H 0 ++#define HAVE_WINDOWS_H 0 ++#define HAVE_WINSOCK2_H 0 ++#define HAVE_INTRINSICS_NEON 1 ++#define HAVE_ATANF 1 ++#define HAVE_ATAN2F 1 ++#define HAVE_CBRT 1 ++#define HAVE_CBRTF 1 ++#define HAVE_COPYSIGN 1 ++#define HAVE_COSF 1 ++#define HAVE_ERF 1 ++#define HAVE_EXP2 1 ++#define HAVE_EXP2F 1 ++#define HAVE_EXPF 1 ++#define HAVE_HYPOT 1 ++#define HAVE_ISFINITE 1 ++#define HAVE_ISINF 1 ++#define HAVE_ISNAN 1 ++#define HAVE_LDEXPF 1 ++#define HAVE_LLRINT 1 ++#define HAVE_LLRINTF 1 ++#define HAVE_LOG2 1 ++#define HAVE_LOG2F 1 ++#define HAVE_LOG10F 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_POWF 1 ++#define HAVE_RINT 1 ++#define HAVE_ROUND 1 ++#define HAVE_ROUNDF 1 ++#define HAVE_SINF 1 ++#define HAVE_TRUNC 1 ++#define HAVE_TRUNCF 1 ++#define HAVE_DOS_PATHS 0 ++#define HAVE_LIBC_MSVCRT 0 ++#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 ++#define HAVE_SECTION_DATA_REL_RO 1 ++#define HAVE_THREADS 1 ++#define HAVE_UWP 0 ++#define HAVE_WINRT 0 ++#define HAVE_ACCESS 1 ++#define HAVE_ALIGNED_MALLOC 0 ++#define HAVE_CLOCK_GETTIME 1 ++#define HAVE_CLOSESOCKET 0 ++#define HAVE_COMMANDLINETOARGVW 0 ++#define HAVE_FCNTL 1 ++#define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 1 ++#define HAVE_GETENV 1 ++#define HAVE_GETHRTIME 0 ++#define HAVE_GETOPT 1 ++#define HAVE_GETMODULEHANDLE 0 ++#define HAVE_GETPROCESSAFFINITYMASK 0 ++#define HAVE_GETPROCESSMEMORYINFO 0 ++#define HAVE_GETPROCESSTIMES 0 ++#define HAVE_GETRUSAGE 1 ++#define HAVE_GETSTDHANDLE 0 ++#define HAVE_GETSYSTEMTIMEASFILETIME 0 ++#define HAVE_GETTIMEOFDAY 1 ++#define HAVE_GLOB 1 ++#define HAVE_GLXGETPROCADDRESS 0 ++#define HAVE_GMTIME_R 1 ++#define HAVE_INET_ATON 1 ++#define HAVE_ISATTY 1 ++#define HAVE_KBHIT 0 ++#define HAVE_LSTAT 1 ++#define HAVE_LZO1X_999_COMPRESS 0 ++#define HAVE_MACH_ABSOLUTE_TIME 0 ++#define HAVE_MAPVIEWOFFILE 0 ++#define HAVE_MKSTEMP 1 ++#define HAVE_MMAP 1 ++#define HAVE_MPROTECT 1 ++#define HAVE_NANOSLEEP 1 ++#define HAVE_PEEKNAMEDPIPE 0 ++#define HAVE_PTHREAD_CANCEL 1 ++#define HAVE_SCHED_GETAFFINITY 1 ++#define HAVE_SECITEMIMPORT 0 ++#define HAVE_SETCONSOLETEXTATTRIBUTE 0 ++#define HAVE_SETCONSOLECTRLHANDLER 0 ++#define HAVE_SETDLLDIRECTORY 0 ++#define HAVE_SETMODE 0 ++#define HAVE_SETRLIMIT 1 ++#define HAVE_SLEEP 0 ++#define HAVE_STRERROR_R 1 ++#define HAVE_SYSCONF 1 ++#define HAVE_SYSCTL 1 ++#define HAVE_USLEEP 1 ++#define HAVE_UTGETOSTYPEFROMSTRING 0 ++#define HAVE_VIRTUALALLOC 0 ++#define HAVE_WGLGETPROCADDRESS 0 ++#define HAVE_BCRYPT 0 ++#define HAVE_VAAPI_DRM 0 ++#define HAVE_VAAPI_X11 0 ++#define HAVE_VDPAU_X11 0 ++#define HAVE_PTHREADS 1 ++#define HAVE_OS2THREADS 0 ++#define HAVE_W32THREADS 0 ++#define HAVE_AS_ARCH_DIRECTIVE 0 ++#define HAVE_AS_DN_DIRECTIVE 0 ++#define HAVE_AS_FPU_DIRECTIVE 0 ++#define HAVE_AS_FUNC 0 ++#define HAVE_AS_OBJECT_ARCH 0 ++#define HAVE_ASM_MOD_Q 0 ++#define HAVE_BLOCKS_EXTENSION 0 ++#define HAVE_EBP_AVAILABLE 0 ++#define HAVE_EBX_AVAILABLE 0 ++#define HAVE_GNU_AS 0 ++#define HAVE_GNU_WINDRES 0 ++#define HAVE_IBM_ASM 0 ++#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 ++#define HAVE_INLINE_ASM_LABELS 1 ++#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 ++#define HAVE_PRAGMA_DEPRECATED 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 ++#define HAVE_SYMVER_ASM_LABEL 1 ++#define HAVE_SYMVER_GNU_ASM 1 ++#define HAVE_VFP_ARGS 0 ++#define HAVE_XFORM_ASM 0 ++#define HAVE_XMM_CLOBBERS 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 ++#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 ++#define HAVE_SOCKLEN_T 1 ++#define HAVE_STRUCT_ADDRINFO 1 ++#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 ++#define HAVE_STRUCT_IP_MREQ_SOURCE 1 ++#define HAVE_STRUCT_IPV6_MREQ 1 ++#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 ++#define HAVE_STRUCT_POLLFD 1 ++#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 ++#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 ++#define HAVE_STRUCT_SOCKADDR_IN6 1 ++#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 0 ++#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_OPENCL_D3D11 0 ++#define HAVE_OPENCL_DRM_ARM 0 ++#define HAVE_OPENCL_DRM_BEIGNET 0 ++#define HAVE_OPENCL_DXVA2 0 ++#define HAVE_OPENCL_VAAPI_BEIGNET 0 ++#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 ++#define HAVE_PERL 1 ++#define HAVE_POD2MAN 1 ++#define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 0 ++#define HAVE_ZLIB_GZIP 0 ++#define CONFIG_DOC 0 ++#define CONFIG_HTMLPAGES 0 ++#define CONFIG_MANPAGES 1 ++#define CONFIG_PODPAGES 1 ++#define CONFIG_TXTPAGES 0 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 ++#define CONFIG_AVIO_READING_EXAMPLE 1 ++#define CONFIG_DECODE_AUDIO_EXAMPLE 1 ++#define CONFIG_DECODE_VIDEO_EXAMPLE 1 ++#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 ++#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 ++#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 ++#define CONFIG_EXTRACT_MVS_EXAMPLE 0 ++#define CONFIG_FILTER_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 ++#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 ++#define CONFIG_HW_DECODE_EXAMPLE 0 ++#define CONFIG_METADATA_EXAMPLE 0 ++#define CONFIG_MUXING_EXAMPLE 0 ++#define CONFIG_QSVDEC_EXAMPLE 0 ++#define CONFIG_REMUXING_EXAMPLE 0 ++#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 ++#define CONFIG_SCALING_VIDEO_EXAMPLE 0 ++#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 ++#define CONFIG_TRANSCODING_EXAMPLE 0 ++#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 ++#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 ++#define CONFIG_AVISYNTH 0 ++#define CONFIG_FREI0R 0 ++#define CONFIG_LIBCDIO 0 ++#define CONFIG_LIBDAVS2 0 ++#define CONFIG_LIBRUBBERBAND 0 ++#define CONFIG_LIBVIDSTAB 0 ++#define CONFIG_LIBX264 0 ++#define CONFIG_LIBX265 0 ++#define CONFIG_LIBXAVS 0 ++#define CONFIG_LIBXAVS2 0 ++#define CONFIG_LIBXVID 0 ++#define CONFIG_DECKLINK 0 ++#define CONFIG_LIBFDK_AAC 0 ++#define CONFIG_LIBTLS 0 ++#define CONFIG_GMP 0 ++#define CONFIG_LIBARIBB24 0 ++#define CONFIG_LIBLENSFUN 0 ++#define CONFIG_LIBOPENCORE_AMRNB 0 ++#define CONFIG_LIBOPENCORE_AMRWB 0 ++#define CONFIG_LIBVO_AMRWBENC 0 ++#define CONFIG_MBEDTLS 0 ++#define CONFIG_RKMPP 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_CHROMAPRINT 0 ++#define CONFIG_GCRYPT 0 ++#define CONFIG_GNUTLS 0 ++#define CONFIG_JNI 0 ++#define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 ++#define CONFIG_LIBAOM 0 ++#define CONFIG_LIBASS 0 ++#define CONFIG_LIBBLURAY 0 ++#define CONFIG_LIBBS2B 0 ++#define CONFIG_LIBCACA 0 ++#define CONFIG_LIBCELT 0 ++#define CONFIG_LIBCODEC2 0 ++#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDC1394 0 ++#define CONFIG_LIBDRM 0 ++#define CONFIG_LIBFLITE 0 ++#define CONFIG_LIBFONTCONFIG 0 ++#define CONFIG_LIBFREETYPE 0 ++#define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 ++#define CONFIG_LIBGME 0 ++#define CONFIG_LIBGSM 0 ++#define CONFIG_LIBIEC61883 0 ++#define CONFIG_LIBILBC 0 ++#define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 ++#define CONFIG_LIBKLVANC 0 ++#define CONFIG_LIBKVAZAAR 0 ++#define CONFIG_LIBMODPLUG 0 ++#define CONFIG_LIBMP3LAME 0 ++#define CONFIG_LIBMYSOFA 0 ++#define CONFIG_LIBOPENCV 0 ++#define CONFIG_LIBOPENH264 0 ++#define CONFIG_LIBOPENJPEG 0 ++#define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 ++#define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 ++#define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 ++#define CONFIG_LIBRSVG 0 ++#define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 ++#define CONFIG_LIBSHINE 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_LIBSNAPPY 0 ++#define CONFIG_LIBSOXR 0 ++#define CONFIG_LIBSPEEX 0 ++#define CONFIG_LIBSRT 0 ++#define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 ++#define CONFIG_LIBTENSORFLOW 0 ++#define CONFIG_LIBTESSERACT 0 ++#define CONFIG_LIBTHEORA 0 ++#define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 ++#define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 ++#define CONFIG_LIBVORBIS 0 ++#define CONFIG_LIBVPX 0 ++#define CONFIG_LIBWEBP 0 ++#define CONFIG_LIBXML2 0 ++#define CONFIG_LIBZIMG 0 ++#define CONFIG_LIBZMQ 0 ++#define CONFIG_LIBZVBI 0 ++#define CONFIG_LV2 0 ++#define CONFIG_MEDIACODEC 0 ++#define CONFIG_OPENAL 0 ++#define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 ++#define CONFIG_POCKETSPHINX 0 ++#define CONFIG_VAPOURSYNTH 0 ++#define CONFIG_ALSA 0 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 ++#define CONFIG_ICONV 0 ++#define CONFIG_LIBXCB 0 ++#define CONFIG_LIBXCB_SHM 0 ++#define CONFIG_LIBXCB_SHAPE 0 ++#define CONFIG_LIBXCB_XFIXES 0 ++#define CONFIG_LZMA 0 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 ++#define CONFIG_SDL2 0 ++#define CONFIG_SECURETRANSPORT 0 ++#define CONFIG_SNDIO 0 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 ++#define CONFIG_CUDA_NVCC 0 ++#define CONFIG_CUDA_SDK 0 ++#define CONFIG_LIBNPP 0 ++#define CONFIG_LIBMFX 0 ++#define CONFIG_MMAL 0 ++#define CONFIG_OMX 0 ++#define CONFIG_OPENCL 0 ++#define CONFIG_AMF 0 ++#define CONFIG_AUDIOTOOLBOX 0 ++#define CONFIG_CRYSTALHD 0 ++#define CONFIG_CUDA 0 ++#define CONFIG_CUDA_LLVM 0 ++#define CONFIG_CUVID 0 ++#define CONFIG_D3D11VA 0 ++#define CONFIG_DXVA2 0 ++#define CONFIG_FFNVCODEC 0 ++#define CONFIG_NVDEC 0 ++#define CONFIG_NVENC 0 ++#define CONFIG_VAAPI 0 ++#define CONFIG_VDPAU 0 ++#define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 ++#define CONFIG_V4L2_M2M 0 ++#define CONFIG_FTRAPV 0 ++#define CONFIG_GRAY 0 ++#define CONFIG_HARDCODED_TABLES 0 ++#define CONFIG_OMX_RPI 0 ++#define CONFIG_RUNTIME_CPUDETECT 1 ++#define CONFIG_SAFE_BITSTREAM_READER 1 ++#define CONFIG_SHARED 1 ++#define CONFIG_SMALL 0 ++#define CONFIG_STATIC 0 ++#define CONFIG_SWSCALE_ALPHA 1 ++#define CONFIG_GPL 0 ++#define CONFIG_NONFREE 0 ++#define CONFIG_VERSION3 0 ++#define CONFIG_AVDEVICE 0 ++#define CONFIG_AVFILTER 0 ++#define CONFIG_SWSCALE 0 ++#define CONFIG_POSTPROC 0 ++#define CONFIG_AVFORMAT 0 ++#define CONFIG_AVCODEC 1 ++#define CONFIG_SWRESAMPLE 0 ++#define CONFIG_AVUTIL 1 ++#define CONFIG_FFPLAY 0 ++#define CONFIG_FFPROBE 0 ++#define CONFIG_FFMPEG 0 ++#define CONFIG_DCT 1 ++#define CONFIG_DWT 0 ++#define CONFIG_ERROR_RESILIENCE 0 ++#define CONFIG_FAAN 1 ++#define CONFIG_FAST_UNALIGNED 1 ++#define CONFIG_FFT 1 ++#define CONFIG_LSP 0 ++#define CONFIG_MDCT 0 ++#define CONFIG_PIXELUTILS 0 ++#define CONFIG_NETWORK 0 ++#define CONFIG_RDFT 1 ++#define CONFIG_AUTODETECT 0 ++#define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 ++#define CONFIG_LINUX_PERF 1 ++#define CONFIG_MACOS_KPERF 0 ++#define CONFIG_MEMORY_POISONING 0 ++#define CONFIG_NEON_CLOBBER_TEST 0 ++#define CONFIG_OSSFUZZ 0 ++#define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 ++#define CONFIG_THUMB 0 ++#define CONFIG_VALGRIND_BACKTRACE 0 ++#define CONFIG_XMM_CLOBBER_TEST 0 ++#define CONFIG_BSFS 0 ++#define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 ++#define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 ++#define CONFIG_AANDCTTABLES 0 ++#define CONFIG_AC3DSP 0 ++#define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 ++#define CONFIG_AUDIO_FRAME_QUEUE 0 ++#define CONFIG_AUDIODSP 0 ++#define CONFIG_BLOCKDSP 0 ++#define CONFIG_BSWAPDSP 0 ++#define CONFIG_CABAC 0 ++#define CONFIG_CBS 1 ++#define CONFIG_CBS_AV1 1 ++#define CONFIG_CBS_H264 0 ++#define CONFIG_CBS_H265 0 ++#define CONFIG_CBS_JPEG 0 ++#define CONFIG_CBS_MPEG2 0 ++#define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 ++#define CONFIG_DIRAC_PARSE 0 ++#define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 ++#define CONFIG_DVPROFILE 0 ++#define CONFIG_EXIF 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 ++#define CONFIG_FLACDSP 1 ++#define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 ++#define CONFIG_G722DSP 0 ++#define CONFIG_GOLOMB 0 ++#define CONFIG_GPLV3 0 ++#define CONFIG_H263DSP 0 ++#define CONFIG_H264CHROMA 0 ++#define CONFIG_H264DSP 0 ++#define CONFIG_H264PARSE 0 ++#define CONFIG_H264PRED 1 ++#define CONFIG_H264QPEL 0 ++#define CONFIG_HEVCPARSE 0 ++#define CONFIG_HPELDSP 0 ++#define CONFIG_HUFFMAN 0 ++#define CONFIG_HUFFYUVDSP 0 ++#define CONFIG_HUFFYUVENCDSP 0 ++#define CONFIG_IDCTDSP 1 ++#define CONFIG_IIRFILTER 0 ++#define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 ++#define CONFIG_INTRAX8 0 ++#define CONFIG_ISO_MEDIA 0 ++#define CONFIG_IVIDSP 0 ++#define CONFIG_JPEGTABLES 0 ++#define CONFIG_LGPLV3 0 ++#define CONFIG_LIBX262 0 ++#define CONFIG_LLAUDDSP 0 ++#define CONFIG_LLVIDDSP 0 ++#define CONFIG_LLVIDENCDSP 0 ++#define CONFIG_LPC 0 ++#define CONFIG_LZF 0 ++#define CONFIG_ME_CMP 0 ++#define CONFIG_MPEG_ER 0 ++#define CONFIG_MPEGAUDIO 1 ++#define CONFIG_MPEGAUDIODSP 1 ++#define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 ++#define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 ++#define CONFIG_MPEGVIDEOENC 0 ++#define CONFIG_MSS34DSP 0 ++#define CONFIG_PIXBLOCKDSP 0 ++#define CONFIG_QPELDSP 0 ++#define CONFIG_QSV 0 ++#define CONFIG_QSVDEC 0 ++#define CONFIG_QSVENC 0 ++#define CONFIG_QSVVPP 0 ++#define CONFIG_RANGECODER 0 ++#define CONFIG_RIFFDEC 0 ++#define CONFIG_RIFFENC 0 ++#define CONFIG_RTPDEC 0 ++#define CONFIG_RTPENC_CHAIN 0 ++#define CONFIG_RV34DSP 0 ++#define CONFIG_SCENE_SAD 0 ++#define CONFIG_SINEWIN 0 ++#define CONFIG_SNAPPY 0 ++#define CONFIG_SRTP 0 ++#define CONFIG_STARTCODE 0 ++#define CONFIG_TEXTUREDSP 0 ++#define CONFIG_TEXTUREDSPENC 0 ++#define CONFIG_TPELDSP 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VAAPI_ENCODE 0 ++#define CONFIG_VC1DSP 0 ++#define CONFIG_VIDEODSP 1 ++#define CONFIG_VP3DSP 0 ++#define CONFIG_VP56DSP 0 ++#define CONFIG_VP8DSP 1 ++#define CONFIG_WMA_FREQS 0 ++#define CONFIG_WMV2DSP 0 ++#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_win32.asm b/media/ffvpx/config_win32.asm +--- a/media/ffvpx/config_win32.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_win32.asm 2023-04-06 12:49:19.192546469 +0200 +@@ -7,12 +7,16 @@ + %define ARCH_AVR32_UC 0 + %define ARCH_BFIN 0 + %define ARCH_IA64 0 ++%define ARCH_LOONGARCH 0 ++%define ARCH_LOONGARCH32 0 ++%define ARCH_LOONGARCH64 0 + %define ARCH_M68K 0 + %define ARCH_MIPS 0 + %define ARCH_MIPS64 0 + %define ARCH_PARISC 0 + %define ARCH_PPC 0 + %define ARCH_PPC64 0 ++%define ARCH_RISCV 0 + %define ARCH_S390 0 + %define ARCH_SH4 0 + %define ARCH_SPARC 0 +@@ -43,6 +47,7 @@ + %define HAVE_AVX 1 + %define HAVE_AVX2 1 + %define HAVE_AVX512 1 ++%define HAVE_AVX512ICL 1 + %define HAVE_FMA3 1 + %define HAVE_FMA4 1 + %define HAVE_MMX 1 +@@ -65,10 +70,11 @@ + %define HAVE_MIPSDSP 0 + %define HAVE_MIPSDSPR2 0 + %define HAVE_MSA 0 +-%define HAVE_MSA2 0 + %define HAVE_LOONGSON2 0 + %define HAVE_LOONGSON3 0 + %define HAVE_MMI 0 ++%define HAVE_LSX 0 ++%define HAVE_LASX 0 + %define HAVE_ARMV5TE_EXTERNAL 0 + %define HAVE_ARMV6_EXTERNAL 0 + %define HAVE_ARMV6T2_EXTERNAL 0 +@@ -89,6 +95,7 @@ + %define HAVE_AVX_EXTERNAL 1 + %define HAVE_AVX2_EXTERNAL 1 + %define HAVE_AVX512_EXTERNAL 1 ++%define HAVE_AVX512ICL_EXTERNAL 0 + %define HAVE_FMA3_EXTERNAL 1 + %define HAVE_FMA4_EXTERNAL 1 + %define HAVE_MMX_EXTERNAL 1 +@@ -111,10 +118,11 @@ + %define HAVE_MIPSDSP_EXTERNAL 0 + %define HAVE_MIPSDSPR2_EXTERNAL 0 + %define HAVE_MSA_EXTERNAL 0 +-%define HAVE_MSA2_EXTERNAL 0 + %define HAVE_LOONGSON2_EXTERNAL 0 + %define HAVE_LOONGSON3_EXTERNAL 0 + %define HAVE_MMI_EXTERNAL 0 ++%define HAVE_LSX_EXTERNAL 0 ++%define HAVE_LASX_EXTERNAL 0 + %define HAVE_ARMV5TE_INLINE 0 + %define HAVE_ARMV6_INLINE 0 + %define HAVE_ARMV6T2_INLINE 0 +@@ -135,6 +143,7 @@ + %define HAVE_AVX_INLINE 0 + %define HAVE_AVX2_INLINE 0 + %define HAVE_AVX512_INLINE 0 ++%define HAVE_AVX512ICL_INLINE 0 + %define HAVE_FMA3_INLINE 0 + %define HAVE_FMA4_INLINE 0 + %define HAVE_MMX_INLINE 0 +@@ -157,13 +166,14 @@ + %define HAVE_MIPSDSP_INLINE 0 + %define HAVE_MIPSDSPR2_INLINE 0 + %define HAVE_MSA_INLINE 0 +-%define HAVE_MSA2_INLINE 0 + %define HAVE_LOONGSON2_INLINE 0 + %define HAVE_LOONGSON3_INLINE 0 + %define HAVE_MMI_INLINE 0 ++%define HAVE_LSX_INLINE 0 ++%define HAVE_LASX_INLINE 0 + %define HAVE_ALIGNED_STACK 0 + %define HAVE_FAST_64BIT 0 +-%define HAVE_FAST_CLZ 0 ++%define HAVE_FAST_CLZ 1 + %define HAVE_FAST_CMOV 0 + %define HAVE_LOCAL_ALIGNED 1 + %define HAVE_SIMD_ALIGN_16 1 +@@ -201,6 +211,7 @@ + %define HAVE_ES2_GL_H 0 + %define HAVE_GSM_H 0 + %define HAVE_IO_H 1 ++%define HAVE_LINUX_DMA_BUF_H 0 + %define HAVE_LINUX_PERF_EVENT_H 0 + %define HAVE_MACHINE_IOCTL_BT848_H 0 + %define HAVE_MACHINE_IOCTL_METEOR_H 0 +@@ -264,12 +275,16 @@ + %define HAVE_COMMANDLINETOARGVW 1 + %define HAVE_FCNTL 0 + %define HAVE_GETADDRINFO 1 ++%define HAVE_GETAUXVAL 0 ++%define HAVE_GETENV 1 + %define HAVE_GETHRTIME 0 + %define HAVE_GETOPT 0 ++%define HAVE_GETMODULEHANDLE 1 + %define HAVE_GETPROCESSAFFINITYMASK 1 + %define HAVE_GETPROCESSMEMORYINFO 1 + %define HAVE_GETPROCESSTIMES 1 + %define HAVE_GETRUSAGE 0 ++%define HAVE_GETSTDHANDLE 1 + %define HAVE_GETSYSTEMTIMEASFILETIME 1 + %define HAVE_GETTIMEOFDAY 0 + %define HAVE_GLOB 0 +@@ -292,6 +307,7 @@ + %define HAVE_SECITEMIMPORT 0 + %define HAVE_SETCONSOLETEXTATTRIBUTE 1 + %define HAVE_SETCONSOLECTRLHANDLER 1 ++%define HAVE_SETDLLDIRECTORY 1 + %define HAVE_SETMODE 1 + %define HAVE_SETRLIMIT 0 + %define HAVE_SLEEP 1 +@@ -325,14 +341,29 @@ + %define HAVE_INLINE_ASM_LABELS 0 + %define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 + %define HAVE_PRAGMA_DEPRECATED 1 +-%define HAVE_RSYNC_CONTIMEOUT 1 ++%define HAVE_RSYNC_CONTIMEOUT 0 + %define HAVE_SYMVER_ASM_LABEL 0 + %define HAVE_SYMVER_GNU_ASM 0 + %define HAVE_VFP_ARGS 0 + %define HAVE_XFORM_ASM 0 + %define HAVE_XMM_CLOBBERS 0 + %define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++%define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++%define HAVE_KCMVIDEOCODECTYPE_VP9 0 + %define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++%define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + %define HAVE_SOCKLEN_T 1 + %define HAVE_STRUCT_ADDRINFO 1 + %define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -347,7 +378,9 @@ + %define HAVE_STRUCT_SOCKADDR_STORAGE 1 + %define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 + %define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 +-%define HAVE_MAKEINFO 1 ++%define HAVE_GZIP 1 ++%define HAVE_LIBDRM_GETFB2 0 ++%define HAVE_MAKEINFO 0 + %define HAVE_MAKEINFO_HTML 0 + %define HAVE_OPENCL_D3D11 0 + %define HAVE_OPENCL_DRM_ARM 0 +@@ -358,12 +391,14 @@ + %define HAVE_PERL 1 + %define HAVE_POD2MAN 1 + %define HAVE_TEXI2HTML 0 ++%define HAVE_XMLLINT 1 ++%define HAVE_ZLIB_GZIP 0 + %define CONFIG_DOC 0 + %define CONFIG_HTMLPAGES 0 + %define CONFIG_MANPAGES 1 + %define CONFIG_PODPAGES 1 +-%define CONFIG_TXTPAGES 1 +-%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++%define CONFIG_TXTPAGES 0 ++%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + %define CONFIG_AVIO_READING_EXAMPLE 1 + %define CONFIG_DECODE_AUDIO_EXAMPLE 1 + %define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -399,14 +434,12 @@ + %define CONFIG_LIBXVID 0 + %define CONFIG_DECKLINK 0 + %define CONFIG_LIBFDK_AAC 0 +-%define CONFIG_OPENSSL 0 + %define CONFIG_LIBTLS 0 + %define CONFIG_GMP 0 + %define CONFIG_LIBARIBB24 0 + %define CONFIG_LIBLENSFUN 0 + %define CONFIG_LIBOPENCORE_AMRNB 0 + %define CONFIG_LIBOPENCORE_AMRWB 0 +-%define CONFIG_LIBVMAF 0 + %define CONFIG_LIBVO_AMRWBENC 0 + %define CONFIG_MBEDTLS 0 + %define CONFIG_RKMPP 0 +@@ -416,6 +449,7 @@ + %define CONFIG_GNUTLS 0 + %define CONFIG_JNI 0 + %define CONFIG_LADSPA 0 ++%define CONFIG_LCMS2 0 + %define CONFIG_LIBAOM 0 + %define CONFIG_LIBASS 0 + %define CONFIG_LIBBLURAY 0 +@@ -430,11 +464,13 @@ + %define CONFIG_LIBFONTCONFIG 0 + %define CONFIG_LIBFREETYPE 0 + %define CONFIG_LIBFRIBIDI 0 ++%define CONFIG_LIBGLSLANG 0 + %define CONFIG_LIBGME 0 + %define CONFIG_LIBGSM 0 + %define CONFIG_LIBIEC61883 0 + %define CONFIG_LIBILBC 0 + %define CONFIG_LIBJACK 0 ++%define CONFIG_LIBJXL 0 + %define CONFIG_LIBKLVANC 0 + %define CONFIG_LIBKVAZAAR 0 + %define CONFIG_LIBMODPLUG 0 +@@ -444,10 +480,16 @@ + %define CONFIG_LIBOPENH264 0 + %define CONFIG_LIBOPENJPEG 0 + %define CONFIG_LIBOPENMPT 0 ++%define CONFIG_LIBOPENVINO 0 + %define CONFIG_LIBOPUS 0 ++%define CONFIG_LIBPLACEBO 0 + %define CONFIG_LIBPULSE 0 ++%define CONFIG_LIBRABBITMQ 0 ++%define CONFIG_LIBRAV1E 0 ++%define CONFIG_LIBRIST 0 + %define CONFIG_LIBRSVG 0 + %define CONFIG_LIBRTMP 0 ++%define CONFIG_LIBSHADERC 0 + %define CONFIG_LIBSHINE 0 + %define CONFIG_LIBSMBCLIENT 0 + %define CONFIG_LIBSNAPPY 0 +@@ -455,14 +497,16 @@ + %define CONFIG_LIBSPEEX 0 + %define CONFIG_LIBSRT 0 + %define CONFIG_LIBSSH 0 ++%define CONFIG_LIBSVTAV1 0 + %define CONFIG_LIBTENSORFLOW 0 + %define CONFIG_LIBTESSERACT 0 + %define CONFIG_LIBTHEORA 0 + %define CONFIG_LIBTWOLAME 0 ++%define CONFIG_LIBUAVS3D 0 + %define CONFIG_LIBV4L2 0 ++%define CONFIG_LIBVMAF 0 + %define CONFIG_LIBVORBIS 0 + %define CONFIG_LIBVPX 0 +-%define CONFIG_LIBWAVPACK 0 + %define CONFIG_LIBWEBP 0 + %define CONFIG_LIBXML2 0 + %define CONFIG_LIBZIMG 0 +@@ -472,6 +516,7 @@ + %define CONFIG_MEDIACODEC 0 + %define CONFIG_OPENAL 0 + %define CONFIG_OPENGL 0 ++%define CONFIG_OPENSSL 0 + %define CONFIG_POCKETSPHINX 0 + %define CONFIG_VAPOURSYNTH 0 + %define CONFIG_ALSA 0 +@@ -485,7 +530,9 @@ + %define CONFIG_LIBXCB_SHAPE 0 + %define CONFIG_LIBXCB_XFIXES 0 + %define CONFIG_LZMA 0 +-%define CONFIG_SCHANNEL 1 ++%define CONFIG_MEDIAFOUNDATION 0 ++%define CONFIG_METAL 0 ++%define CONFIG_SCHANNEL 0 + %define CONFIG_SDL2 0 + %define CONFIG_SECURETRANSPORT 0 + %define CONFIG_SNDIO 0 +@@ -512,8 +559,8 @@ + %define CONFIG_VAAPI 0 + %define CONFIG_VDPAU 0 + %define CONFIG_VIDEOTOOLBOX 0 ++%define CONFIG_VULKAN 0 + %define CONFIG_V4L2_M2M 0 +-%define CONFIG_XVMC 0 + %define CONFIG_FTRAPV 0 + %define CONFIG_GRAY 0 + %define CONFIG_HARDCODED_TABLES 0 +@@ -534,7 +581,6 @@ + %define CONFIG_AVFORMAT 0 + %define CONFIG_AVCODEC 1 + %define CONFIG_SWRESAMPLE 0 +-%define CONFIG_AVRESAMPLE 0 + %define CONFIG_AVUTIL 1 + %define CONFIG_FFPLAY 0 + %define CONFIG_FFPROBE 0 +@@ -546,27 +592,38 @@ + %define CONFIG_FAST_UNALIGNED 1 + %define CONFIG_FFT 1 + %define CONFIG_LSP 0 +-%define CONFIG_LZO 0 + %define CONFIG_MDCT 0 + %define CONFIG_PIXELUTILS 0 + %define CONFIG_NETWORK 0 + %define CONFIG_RDFT 1 + %define CONFIG_AUTODETECT 0 + %define CONFIG_FONTCONFIG 0 ++%define CONFIG_LARGE_TESTS 1 + %define CONFIG_LINUX_PERF 0 ++%define CONFIG_MACOS_KPERF 0 + %define CONFIG_MEMORY_POISONING 0 + %define CONFIG_NEON_CLOBBER_TEST 0 + %define CONFIG_OSSFUZZ 0 + %define CONFIG_PIC 0 ++%define CONFIG_PTX_COMPRESSION 0 + %define CONFIG_THUMB 0 + %define CONFIG_VALGRIND_BACKTRACE 0 + %define CONFIG_XMM_CLOBBER_TEST 0 +-%define CONFIG_BSFS 1 ++%define CONFIG_BSFS 0 + %define CONFIG_DECODERS 1 ++%define CONFIG_ENCODERS 0 ++%define CONFIG_HWACCELS 0 + %define CONFIG_PARSERS 1 ++%define CONFIG_INDEVS 0 ++%define CONFIG_OUTDEVS 0 ++%define CONFIG_FILTERS 0 ++%define CONFIG_DEMUXERS 0 ++%define CONFIG_MUXERS 0 ++%define CONFIG_PROTOCOLS 0 + %define CONFIG_AANDCTTABLES 0 + %define CONFIG_AC3DSP 0 + %define CONFIG_ADTS_HEADER 0 ++%define CONFIG_ATSC_A53 0 + %define CONFIG_AUDIO_FRAME_QUEUE 0 + %define CONFIG_AUDIODSP 0 + %define CONFIG_BLOCKDSP 0 +@@ -579,8 +636,10 @@ + %define CONFIG_CBS_JPEG 0 + %define CONFIG_CBS_MPEG2 0 + %define CONFIG_CBS_VP9 0 ++%define CONFIG_DEFLATE_WRAPPER 0 + %define CONFIG_DIRAC_PARSE 0 + %define CONFIG_DNN 0 ++%define CONFIG_DOVI_RPU 0 + %define CONFIG_DVPROFILE 0 + %define CONFIG_EXIF 0 + %define CONFIG_FAANDCT 1 +@@ -606,6 +665,7 @@ + %define CONFIG_IDCTDSP 1 + %define CONFIG_IIRFILTER 0 + %define CONFIG_MDCT15 0 ++%define CONFIG_INFLATE_WRAPPER 0 + %define CONFIG_INTRAX8 0 + %define CONFIG_ISO_MEDIA 0 + %define CONFIG_IVIDSP 0 +@@ -622,7 +682,9 @@ + %define CONFIG_MPEGAUDIO 1 + %define CONFIG_MPEGAUDIODSP 1 + %define CONFIG_MPEGAUDIOHEADER 1 ++%define CONFIG_MPEG4AUDIO 0 + %define CONFIG_MPEGVIDEO 0 ++%define CONFIG_MPEGVIDEODEC 0 + %define CONFIG_MPEGVIDEOENC 0 + %define CONFIG_MSS34DSP 0 + %define CONFIG_PIXBLOCKDSP 0 +@@ -654,11 +716,3 @@ + %define CONFIG_VP8DSP 1 + %define CONFIG_WMA_FREQS 0 + %define CONFIG_WMV2DSP 0 +-%define CONFIG_NULL_BSF 1 +-%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-%define CONFIG_VP8_DECODER 1 +-%define CONFIG_VP9_DECODER 1 +-%define CONFIG_FLAC_DECODER 1 +-%define CONFIG_MP3_DECODER 1 +-%define CONFIG_VP8_PARSER 1 +-%define CONFIG_VP9_PARSER 1 +diff -Naur a/media/ffvpx/config_win32.h b/media/ffvpx/config_win32.h +--- a/media/ffvpx/config_win32.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_win32.h 2023-04-06 12:49:19.192546469 +0200 +@@ -1,13 +1,14 @@ + /* Automatically generated by configure - do not modify! */ + #ifndef FFMPEG_CONFIG_H + #define FFMPEG_CONFIG_H +-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3 --toolchain=msvc" ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --toolchain=msvc" + #define FFMPEG_LICENSE "LGPL version 2.1 or later" +-#define CONFIG_THIS_YEAR 2019 ++#define CONFIG_THIS_YEAR 2022 + #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" + #define AVCONV_DATADIR "/usr/local/share/ffmpeg" +-#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for x86" +-#define av_restrict __restrict ++#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30133 for x86" ++#define OS_NAME win32 ++#define av_restrict restrict + #define EXTERN_PREFIX "_" + #define EXTERN_ASM _ + #define BUILDSUF "" +@@ -22,12 +23,16 @@ + #define ARCH_AVR32_UC 0 + #define ARCH_BFIN 0 + #define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 + #define ARCH_M68K 0 + #define ARCH_MIPS 0 + #define ARCH_MIPS64 0 + #define ARCH_PARISC 0 + #define ARCH_PPC 0 + #define ARCH_PPC64 0 ++#define ARCH_RISCV 0 + #define ARCH_S390 0 + #define ARCH_SH4 0 + #define ARCH_SPARC 0 +@@ -58,6 +63,7 @@ + #define HAVE_AVX 1 + #define HAVE_AVX2 1 + #define HAVE_AVX512 1 ++#define HAVE_AVX512ICL 1 + #define HAVE_FMA3 1 + #define HAVE_FMA4 1 + #define HAVE_MMX 1 +@@ -80,10 +86,11 @@ + #define HAVE_MIPSDSP 0 + #define HAVE_MIPSDSPR2 0 + #define HAVE_MSA 0 +-#define HAVE_MSA2 0 + #define HAVE_LOONGSON2 0 + #define HAVE_LOONGSON3 0 + #define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 + #define HAVE_ARMV5TE_EXTERNAL 0 + #define HAVE_ARMV6_EXTERNAL 0 + #define HAVE_ARMV6T2_EXTERNAL 0 +@@ -104,6 +111,7 @@ + #define HAVE_AVX_EXTERNAL 1 + #define HAVE_AVX2_EXTERNAL 1 + #define HAVE_AVX512_EXTERNAL 1 ++#define HAVE_AVX512ICL_EXTERNAL 0 + #define HAVE_FMA3_EXTERNAL 1 + #define HAVE_FMA4_EXTERNAL 1 + #define HAVE_MMX_EXTERNAL 1 +@@ -126,10 +134,11 @@ + #define HAVE_MIPSDSP_EXTERNAL 0 + #define HAVE_MIPSDSPR2_EXTERNAL 0 + #define HAVE_MSA_EXTERNAL 0 +-#define HAVE_MSA2_EXTERNAL 0 + #define HAVE_LOONGSON2_EXTERNAL 0 + #define HAVE_LOONGSON3_EXTERNAL 0 + #define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 + #define HAVE_ARMV5TE_INLINE 0 + #define HAVE_ARMV6_INLINE 0 + #define HAVE_ARMV6T2_INLINE 0 +@@ -150,6 +159,7 @@ + #define HAVE_AVX_INLINE 0 + #define HAVE_AVX2_INLINE 0 + #define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 + #define HAVE_FMA3_INLINE 0 + #define HAVE_FMA4_INLINE 0 + #define HAVE_MMX_INLINE 0 +@@ -172,13 +182,14 @@ + #define HAVE_MIPSDSP_INLINE 0 + #define HAVE_MIPSDSPR2_INLINE 0 + #define HAVE_MSA_INLINE 0 +-#define HAVE_MSA2_INLINE 0 + #define HAVE_LOONGSON2_INLINE 0 + #define HAVE_LOONGSON3_INLINE 0 + #define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 + #define HAVE_ALIGNED_STACK 0 + #define HAVE_FAST_64BIT 0 +-#define HAVE_FAST_CLZ 0 ++#define HAVE_FAST_CLZ 1 + #define HAVE_FAST_CMOV 0 + #define HAVE_LOCAL_ALIGNED 1 + #define HAVE_SIMD_ALIGN_16 1 +@@ -216,6 +227,7 @@ + #define HAVE_ES2_GL_H 0 + #define HAVE_GSM_H 0 + #define HAVE_IO_H 1 ++#define HAVE_LINUX_DMA_BUF_H 0 + #define HAVE_LINUX_PERF_EVENT_H 0 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 +@@ -279,12 +291,16 @@ + #define HAVE_COMMANDLINETOARGVW 1 + #define HAVE_FCNTL 0 + #define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 0 ++#define HAVE_GETENV 1 + #define HAVE_GETHRTIME 0 + #define HAVE_GETOPT 0 ++#define HAVE_GETMODULEHANDLE 1 + #define HAVE_GETPROCESSAFFINITYMASK 1 + #define HAVE_GETPROCESSMEMORYINFO 1 + #define HAVE_GETPROCESSTIMES 1 + #define HAVE_GETRUSAGE 0 ++#define HAVE_GETSTDHANDLE 1 + #define HAVE_GETSYSTEMTIMEASFILETIME 1 + #define HAVE_GETTIMEOFDAY 0 + #define HAVE_GLOB 0 +@@ -307,6 +323,7 @@ + #define HAVE_SECITEMIMPORT 0 + #define HAVE_SETCONSOLETEXTATTRIBUTE 1 + #define HAVE_SETCONSOLECTRLHANDLER 1 ++#define HAVE_SETDLLDIRECTORY 1 + #define HAVE_SETMODE 1 + #define HAVE_SETRLIMIT 0 + #define HAVE_SLEEP 1 +@@ -340,14 +357,29 @@ + #define HAVE_INLINE_ASM_LABELS 0 + #define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 + #define HAVE_PRAGMA_DEPRECATED 1 +-#define HAVE_RSYNC_CONTIMEOUT 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 + #define HAVE_SYMVER_ASM_LABEL 0 + #define HAVE_SYMVER_GNU_ASM 0 + #define HAVE_VFP_ARGS 0 + #define HAVE_XFORM_ASM 0 + #define HAVE_XMM_CLOBBERS 0 + #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 + #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + #define HAVE_SOCKLEN_T 1 + #define HAVE_STRUCT_ADDRINFO 1 + #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -362,7 +394,9 @@ + #define HAVE_STRUCT_SOCKADDR_STORAGE 1 + #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 + #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 +-#define HAVE_MAKEINFO 1 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 0 + #define HAVE_MAKEINFO_HTML 0 + #define HAVE_OPENCL_D3D11 0 + #define HAVE_OPENCL_DRM_ARM 0 +@@ -373,12 +407,14 @@ + #define HAVE_PERL 1 + #define HAVE_POD2MAN 1 + #define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 + #define CONFIG_DOC 0 + #define CONFIG_HTMLPAGES 0 + #define CONFIG_MANPAGES 1 + #define CONFIG_PODPAGES 1 +-#define CONFIG_TXTPAGES 1 +-#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++#define CONFIG_TXTPAGES 0 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + #define CONFIG_AVIO_READING_EXAMPLE 1 + #define CONFIG_DECODE_AUDIO_EXAMPLE 1 + #define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -414,14 +450,12 @@ + #define CONFIG_LIBXVID 0 + #define CONFIG_DECKLINK 0 + #define CONFIG_LIBFDK_AAC 0 +-#define CONFIG_OPENSSL 0 + #define CONFIG_LIBTLS 0 + #define CONFIG_GMP 0 + #define CONFIG_LIBARIBB24 0 + #define CONFIG_LIBLENSFUN 0 + #define CONFIG_LIBOPENCORE_AMRNB 0 + #define CONFIG_LIBOPENCORE_AMRWB 0 +-#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVO_AMRWBENC 0 + #define CONFIG_MBEDTLS 0 + #define CONFIG_RKMPP 0 +@@ -431,6 +465,7 @@ + #define CONFIG_GNUTLS 0 + #define CONFIG_JNI 0 + #define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 + #define CONFIG_LIBAOM 0 + #define CONFIG_LIBASS 0 + #define CONFIG_LIBBLURAY 0 +@@ -445,11 +480,13 @@ + #define CONFIG_LIBFONTCONFIG 0 + #define CONFIG_LIBFREETYPE 0 + #define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 + #define CONFIG_LIBGME 0 + #define CONFIG_LIBGSM 0 + #define CONFIG_LIBIEC61883 0 + #define CONFIG_LIBILBC 0 + #define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 + #define CONFIG_LIBKLVANC 0 + #define CONFIG_LIBKVAZAAR 0 + #define CONFIG_LIBMODPLUG 0 +@@ -459,10 +496,16 @@ + #define CONFIG_LIBOPENH264 0 + #define CONFIG_LIBOPENJPEG 0 + #define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 + #define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 + #define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 + #define CONFIG_LIBRSVG 0 + #define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 + #define CONFIG_LIBSHINE 0 + #define CONFIG_LIBSMBCLIENT 0 + #define CONFIG_LIBSNAPPY 0 +@@ -470,14 +513,16 @@ + #define CONFIG_LIBSPEEX 0 + #define CONFIG_LIBSRT 0 + #define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 + #define CONFIG_LIBTENSORFLOW 0 + #define CONFIG_LIBTESSERACT 0 + #define CONFIG_LIBTHEORA 0 + #define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 + #define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVORBIS 0 + #define CONFIG_LIBVPX 0 +-#define CONFIG_LIBWAVPACK 0 + #define CONFIG_LIBWEBP 0 + #define CONFIG_LIBXML2 0 + #define CONFIG_LIBZIMG 0 +@@ -487,6 +532,7 @@ + #define CONFIG_MEDIACODEC 0 + #define CONFIG_OPENAL 0 + #define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 + #define CONFIG_POCKETSPHINX 0 + #define CONFIG_VAPOURSYNTH 0 + #define CONFIG_ALSA 0 +@@ -500,7 +546,9 @@ + #define CONFIG_LIBXCB_SHAPE 0 + #define CONFIG_LIBXCB_XFIXES 0 + #define CONFIG_LZMA 0 +-#define CONFIG_SCHANNEL 1 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 + #define CONFIG_SDL2 0 + #define CONFIG_SECURETRANSPORT 0 + #define CONFIG_SNDIO 0 +@@ -527,8 +575,8 @@ + #define CONFIG_VAAPI 0 + #define CONFIG_VDPAU 0 + #define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 + #define CONFIG_V4L2_M2M 0 +-#define CONFIG_XVMC 0 + #define CONFIG_FTRAPV 0 + #define CONFIG_GRAY 0 + #define CONFIG_HARDCODED_TABLES 0 +@@ -549,7 +597,6 @@ + #define CONFIG_AVFORMAT 0 + #define CONFIG_AVCODEC 1 + #define CONFIG_SWRESAMPLE 0 +-#define CONFIG_AVRESAMPLE 0 + #define CONFIG_AVUTIL 1 + #define CONFIG_FFPLAY 0 + #define CONFIG_FFPROBE 0 +@@ -561,27 +608,38 @@ + #define CONFIG_FAST_UNALIGNED 1 + #define CONFIG_FFT 1 + #define CONFIG_LSP 0 +-#define CONFIG_LZO 0 + #define CONFIG_MDCT 0 + #define CONFIG_PIXELUTILS 0 + #define CONFIG_NETWORK 0 + #define CONFIG_RDFT 1 + #define CONFIG_AUTODETECT 0 + #define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 + #define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 + #define CONFIG_MEMORY_POISONING 0 + #define CONFIG_NEON_CLOBBER_TEST 0 + #define CONFIG_OSSFUZZ 0 + #define CONFIG_PIC 0 ++#define CONFIG_PTX_COMPRESSION 0 + #define CONFIG_THUMB 0 + #define CONFIG_VALGRIND_BACKTRACE 0 + #define CONFIG_XMM_CLOBBER_TEST 0 +-#define CONFIG_BSFS 1 ++#define CONFIG_BSFS 0 + #define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 + #define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 + #define CONFIG_AANDCTTABLES 0 + #define CONFIG_AC3DSP 0 + #define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 + #define CONFIG_AUDIO_FRAME_QUEUE 0 + #define CONFIG_AUDIODSP 0 + #define CONFIG_BLOCKDSP 0 +@@ -594,8 +652,10 @@ + #define CONFIG_CBS_JPEG 0 + #define CONFIG_CBS_MPEG2 0 + #define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 + #define CONFIG_DIRAC_PARSE 0 + #define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 + #define CONFIG_DVPROFILE 0 + #define CONFIG_EXIF 0 + #define CONFIG_FAANDCT 1 +@@ -621,6 +681,7 @@ + #define CONFIG_IDCTDSP 1 + #define CONFIG_IIRFILTER 0 + #define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 + #define CONFIG_INTRAX8 0 + #define CONFIG_ISO_MEDIA 0 + #define CONFIG_IVIDSP 0 +@@ -637,7 +698,9 @@ + #define CONFIG_MPEGAUDIO 1 + #define CONFIG_MPEGAUDIODSP 1 + #define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 + #define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 + #define CONFIG_MPEGVIDEOENC 0 + #define CONFIG_MSS34DSP 0 + #define CONFIG_PIXBLOCKDSP 0 +@@ -669,12 +732,4 @@ + #define CONFIG_VP8DSP 1 + #define CONFIG_WMA_FREQS 0 + #define CONFIG_WMV2DSP 0 +-#define CONFIG_NULL_BSF 1 +-#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-#define CONFIG_VP8_DECODER 1 +-#define CONFIG_VP9_DECODER 1 +-#define CONFIG_FLAC_DECODER 1 +-#define CONFIG_MP3_DECODER 1 +-#define CONFIG_VP8_PARSER 1 +-#define CONFIG_VP9_PARSER 1 + #endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_win64_aarch64.h b/media/ffvpx/config_win64_aarch64.h +--- a/media/ffvpx/config_win64_aarch64.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/config_win64_aarch64.h 2023-04-06 12:49:19.192546469 +0200 +@@ -0,0 +1,680 @@ ++/* Automatically generated by configure - do not modify! */ ++#ifndef FFMPEG_CONFIG_H ++#define FFMPEG_CONFIG_H ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-parser='vp8,vp9' --enable-decoder='vp8,vp9,mp3,flac' --disable-static --enable-shared --disable-autodetect --toolchain=msvc --enable-cross-compile --target-os=win32 --arch=arm64" ++#define FFMPEG_LICENSE "LGPL version 2.1 or later" ++#define CONFIG_THIS_YEAR 2019 ++#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" ++#define AVCONV_DATADIR "/usr/local/share/ffmpeg" ++#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for ARM64" ++#define av_restrict __restrict ++#define EXTERN_PREFIX "" ++#define EXTERN_ASM ++#define BUILDSUF "" ++#define SLIBSUF ".dll" ++#define HAVE_MMX2 HAVE_MMXEXT ++#define SWS_MAX_FILTER_SIZE 256 ++#define ARCH_AARCH64 1 ++#define ARCH_ALPHA 0 ++#define ARCH_ARM 0 ++#define ARCH_AVR32 0 ++#define ARCH_AVR32_AP 0 ++#define ARCH_AVR32_UC 0 ++#define ARCH_BFIN 0 ++#define ARCH_IA64 0 ++#define ARCH_M68K 0 ++#define ARCH_MIPS 0 ++#define ARCH_MIPS64 0 ++#define ARCH_PARISC 0 ++#define ARCH_PPC 0 ++#define ARCH_PPC64 0 ++#define ARCH_S390 0 ++#define ARCH_SH4 0 ++#define ARCH_SPARC 0 ++#define ARCH_SPARC64 0 ++#define ARCH_TILEGX 0 ++#define ARCH_TILEPRO 0 ++#define ARCH_TOMI 0 ++#define ARCH_X86 0 ++#define ARCH_X86_32 0 ++#define ARCH_X86_64 0 ++#define HAVE_ARMV5TE 0 ++#define HAVE_ARMV6 0 ++#define HAVE_ARMV6T2 0 ++#define HAVE_ARMV8 1 ++#define HAVE_NEON 1 ++#define HAVE_VFP 1 ++#define HAVE_VFPV3 0 ++#define HAVE_SETEND 0 ++#define HAVE_ALTIVEC 0 ++#define HAVE_DCBZL 0 ++#define HAVE_LDBRX 0 ++#define HAVE_POWER8 0 ++#define HAVE_PPC4XX 0 ++#define HAVE_VSX 0 ++#define HAVE_AESNI 0 ++#define HAVE_AMD3DNOW 0 ++#define HAVE_AMD3DNOWEXT 0 ++#define HAVE_AVX 0 ++#define HAVE_AVX2 0 ++#define HAVE_AVX512 0 ++#define HAVE_FMA3 0 ++#define HAVE_FMA4 0 ++#define HAVE_MMX 0 ++#define HAVE_MMXEXT 0 ++#define HAVE_SSE 0 ++#define HAVE_SSE2 0 ++#define HAVE_SSE3 0 ++#define HAVE_SSE4 0 ++#define HAVE_SSE42 0 ++#define HAVE_SSSE3 0 ++#define HAVE_XOP 0 ++#define HAVE_CPUNOP 0 ++#define HAVE_I686 0 ++#define HAVE_MIPSFPU 0 ++#define HAVE_MIPS32R2 0 ++#define HAVE_MIPS32R5 0 ++#define HAVE_MIPS64R2 0 ++#define HAVE_MIPS32R6 0 ++#define HAVE_MIPS64R6 0 ++#define HAVE_MIPSDSP 0 ++#define HAVE_MIPSDSPR2 0 ++#define HAVE_MSA 0 ++#define HAVE_MSA2 0 ++#define HAVE_LOONGSON2 0 ++#define HAVE_LOONGSON3 0 ++#define HAVE_MMI 0 ++#define HAVE_ARMV5TE_EXTERNAL 0 ++#define HAVE_ARMV6_EXTERNAL 0 ++#define HAVE_ARMV6T2_EXTERNAL 0 ++#define HAVE_ARMV8_EXTERNAL 1 ++#define HAVE_NEON_EXTERNAL 1 ++#define HAVE_VFP_EXTERNAL 1 ++#define HAVE_VFPV3_EXTERNAL 0 ++#define HAVE_SETEND_EXTERNAL 0 ++#define HAVE_ALTIVEC_EXTERNAL 0 ++#define HAVE_DCBZL_EXTERNAL 0 ++#define HAVE_LDBRX_EXTERNAL 0 ++#define HAVE_POWER8_EXTERNAL 0 ++#define HAVE_PPC4XX_EXTERNAL 0 ++#define HAVE_VSX_EXTERNAL 0 ++#define HAVE_AESNI_EXTERNAL 0 ++#define HAVE_AMD3DNOW_EXTERNAL 0 ++#define HAVE_AMD3DNOWEXT_EXTERNAL 0 ++#define HAVE_AVX_EXTERNAL 0 ++#define HAVE_AVX2_EXTERNAL 0 ++#define HAVE_AVX512_EXTERNAL 0 ++#define HAVE_FMA3_EXTERNAL 0 ++#define HAVE_FMA4_EXTERNAL 0 ++#define HAVE_MMX_EXTERNAL 0 ++#define HAVE_MMXEXT_EXTERNAL 0 ++#define HAVE_SSE_EXTERNAL 0 ++#define HAVE_SSE2_EXTERNAL 0 ++#define HAVE_SSE3_EXTERNAL 0 ++#define HAVE_SSE4_EXTERNAL 0 ++#define HAVE_SSE42_EXTERNAL 0 ++#define HAVE_SSSE3_EXTERNAL 0 ++#define HAVE_XOP_EXTERNAL 0 ++#define HAVE_CPUNOP_EXTERNAL 0 ++#define HAVE_I686_EXTERNAL 0 ++#define HAVE_MIPSFPU_EXTERNAL 0 ++#define HAVE_MIPS32R2_EXTERNAL 0 ++#define HAVE_MIPS32R5_EXTERNAL 0 ++#define HAVE_MIPS64R2_EXTERNAL 0 ++#define HAVE_MIPS32R6_EXTERNAL 0 ++#define HAVE_MIPS64R6_EXTERNAL 0 ++#define HAVE_MIPSDSP_EXTERNAL 0 ++#define HAVE_MIPSDSPR2_EXTERNAL 0 ++#define HAVE_MSA_EXTERNAL 0 ++#define HAVE_MSA2_EXTERNAL 0 ++#define HAVE_LOONGSON2_EXTERNAL 0 ++#define HAVE_LOONGSON3_EXTERNAL 0 ++#define HAVE_MMI_EXTERNAL 0 ++#define HAVE_ARMV5TE_INLINE 0 ++#define HAVE_ARMV6_INLINE 0 ++#define HAVE_ARMV6T2_INLINE 0 ++#define HAVE_ARMV8_INLINE 0 ++#define HAVE_NEON_INLINE 0 ++#define HAVE_VFP_INLINE 0 ++#define HAVE_VFPV3_INLINE 0 ++#define HAVE_SETEND_INLINE 0 ++#define HAVE_ALTIVEC_INLINE 0 ++#define HAVE_DCBZL_INLINE 0 ++#define HAVE_LDBRX_INLINE 0 ++#define HAVE_POWER8_INLINE 0 ++#define HAVE_PPC4XX_INLINE 0 ++#define HAVE_VSX_INLINE 0 ++#define HAVE_AESNI_INLINE 0 ++#define HAVE_AMD3DNOW_INLINE 0 ++#define HAVE_AMD3DNOWEXT_INLINE 0 ++#define HAVE_AVX_INLINE 0 ++#define HAVE_AVX2_INLINE 0 ++#define HAVE_AVX512_INLINE 0 ++#define HAVE_FMA3_INLINE 0 ++#define HAVE_FMA4_INLINE 0 ++#define HAVE_MMX_INLINE 0 ++#define HAVE_MMXEXT_INLINE 0 ++#define HAVE_SSE_INLINE 0 ++#define HAVE_SSE2_INLINE 0 ++#define HAVE_SSE3_INLINE 0 ++#define HAVE_SSE4_INLINE 0 ++#define HAVE_SSE42_INLINE 0 ++#define HAVE_SSSE3_INLINE 0 ++#define HAVE_XOP_INLINE 0 ++#define HAVE_CPUNOP_INLINE 0 ++#define HAVE_I686_INLINE 0 ++#define HAVE_MIPSFPU_INLINE 0 ++#define HAVE_MIPS32R2_INLINE 0 ++#define HAVE_MIPS32R5_INLINE 0 ++#define HAVE_MIPS64R2_INLINE 0 ++#define HAVE_MIPS32R6_INLINE 0 ++#define HAVE_MIPS64R6_INLINE 0 ++#define HAVE_MIPSDSP_INLINE 0 ++#define HAVE_MIPSDSPR2_INLINE 0 ++#define HAVE_MSA_INLINE 0 ++#define HAVE_MSA2_INLINE 0 ++#define HAVE_LOONGSON2_INLINE 0 ++#define HAVE_LOONGSON3_INLINE 0 ++#define HAVE_MMI_INLINE 0 ++#define HAVE_ALIGNED_STACK 1 ++#define HAVE_FAST_64BIT 1 ++#define HAVE_FAST_CLZ 0 ++#define HAVE_FAST_CMOV 0 ++#define HAVE_LOCAL_ALIGNED 0 ++#define HAVE_SIMD_ALIGN_16 1 ++#define HAVE_SIMD_ALIGN_32 0 ++#define HAVE_SIMD_ALIGN_64 0 ++#define HAVE_ATOMIC_CAS_PTR 0 ++#define HAVE_MACHINE_RW_BARRIER 0 ++#define HAVE_MEMORYBARRIER 1 ++#define HAVE_MM_EMPTY 0 ++#define HAVE_RDTSC 0 ++#define HAVE_SEM_TIMEDWAIT 0 ++#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0 ++#define HAVE_CABS 0 ++#define HAVE_CEXP 0 ++#define HAVE_INLINE_ASM 0 ++#define HAVE_SYMVER 0 ++#define HAVE_X86ASM 0 ++#define HAVE_BIGENDIAN 0 ++#define HAVE_FAST_UNALIGNED 1 ++#define HAVE_ARPA_INET_H 0 ++#define HAVE_ASM_TYPES_H 0 ++#define HAVE_CDIO_PARANOIA_H 0 ++#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 ++#define HAVE_CUDA_H 0 ++#define HAVE_DISPATCH_DISPATCH_H 0 ++#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 ++#define HAVE_DEV_IC_BT8XX_H 0 ++#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 ++#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 ++#define HAVE_DIRECT_H 1 ++#define HAVE_DIRENT_H 0 ++#define HAVE_DXGIDEBUG_H 1 ++#define HAVE_DXVA_H 1 ++#define HAVE_ES2_GL_H 0 ++#define HAVE_GSM_H 0 ++#define HAVE_IO_H 1 ++#define HAVE_LINUX_PERF_EVENT_H 0 ++#define HAVE_MACHINE_IOCTL_BT848_H 0 ++#define HAVE_MACHINE_IOCTL_METEOR_H 0 ++#define HAVE_OPENCV2_CORE_CORE_C_H 0 ++#define HAVE_OPENGL_GL3_H 0 ++#define HAVE_POLL_H 0 ++#define HAVE_SYS_PARAM_H 0 ++#define HAVE_SYS_RESOURCE_H 0 ++#define HAVE_SYS_SELECT_H 0 ++#define HAVE_SYS_SOUNDCARD_H 0 ++#define HAVE_SYS_TIME_H 0 ++#define HAVE_SYS_UN_H 0 ++#define HAVE_SYS_VIDEOIO_H 0 ++#define HAVE_TERMIOS_H 0 ++#define HAVE_UDPLITE_H 0 ++#define HAVE_UNISTD_H 0 ++#define HAVE_VALGRIND_VALGRIND_H 0 ++#define HAVE_WINDOWS_H 1 ++#define HAVE_WINSOCK2_H 1 ++#define HAVE_INTRINSICS_NEON 1 ++#define HAVE_ATANF 1 ++#define HAVE_ATAN2F 1 ++#define HAVE_CBRT 1 ++#define HAVE_CBRTF 1 ++#define HAVE_COPYSIGN 1 ++#define HAVE_COSF 1 ++#define HAVE_ERF 1 ++#define HAVE_EXP2 1 ++#define HAVE_EXP2F 1 ++#define HAVE_EXPF 1 ++#define HAVE_HYPOT 1 ++#define HAVE_ISFINITE 1 ++#define HAVE_ISINF 1 ++#define HAVE_ISNAN 1 ++#define HAVE_LDEXPF 1 ++#define HAVE_LLRINT 1 ++#define HAVE_LLRINTF 1 ++#define HAVE_LOG2 1 ++#define HAVE_LOG2F 1 ++#define HAVE_LOG10F 1 ++#define HAVE_LRINT 1 ++#define HAVE_LRINTF 1 ++#define HAVE_POWF 1 ++#define HAVE_RINT 1 ++#define HAVE_ROUND 1 ++#define HAVE_ROUNDF 1 ++#define HAVE_SINF 1 ++#define HAVE_TRUNC 1 ++#define HAVE_TRUNCF 1 ++#define HAVE_DOS_PATHS 1 ++#define HAVE_LIBC_MSVCRT 1 ++#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 ++#define HAVE_SECTION_DATA_REL_RO 0 ++#define HAVE_THREADS 1 ++#define HAVE_UWP 0 ++#define HAVE_WINRT 0 ++#define HAVE_ACCESS 1 ++#define HAVE_ALIGNED_MALLOC 1 ++#define HAVE_CLOCK_GETTIME 0 ++#define HAVE_CLOSESOCKET 1 ++#define HAVE_COMMANDLINETOARGVW 1 ++#define HAVE_FCNTL 0 ++#define HAVE_GETADDRINFO 1 ++#define HAVE_GETHRTIME 0 ++#define HAVE_GETOPT 0 ++#define HAVE_GETPROCESSAFFINITYMASK 1 ++#define HAVE_GETPROCESSMEMORYINFO 1 ++#define HAVE_GETPROCESSTIMES 1 ++#define HAVE_GETRUSAGE 0 ++#define HAVE_GETSYSTEMTIMEASFILETIME 1 ++#define HAVE_GETTIMEOFDAY 0 ++#define HAVE_GLOB 0 ++#define HAVE_GLXGETPROCADDRESS 0 ++#define HAVE_GMTIME_R 0 ++#define HAVE_INET_ATON 0 ++#define HAVE_ISATTY 1 ++#define HAVE_KBHIT 1 ++#define HAVE_LSTAT 0 ++#define HAVE_LZO1X_999_COMPRESS 0 ++#define HAVE_MACH_ABSOLUTE_TIME 0 ++#define HAVE_MAPVIEWOFFILE 1 ++#define HAVE_MKSTEMP 0 ++#define HAVE_MMAP 0 ++#define HAVE_MPROTECT 0 ++#define HAVE_NANOSLEEP 0 ++#define HAVE_PEEKNAMEDPIPE 1 ++#define HAVE_PTHREAD_CANCEL 0 ++#define HAVE_SCHED_GETAFFINITY 0 ++#define HAVE_SECITEMIMPORT 0 ++#define HAVE_SETCONSOLETEXTATTRIBUTE 1 ++#define HAVE_SETCONSOLECTRLHANDLER 1 ++#define HAVE_SETMODE 1 ++#define HAVE_SETRLIMIT 0 ++#define HAVE_SLEEP 1 ++#define HAVE_STRERROR_R 0 ++#define HAVE_SYSCONF 0 ++#define HAVE_SYSCTL 0 ++#define HAVE_USLEEP 0 ++#define HAVE_UTGETOSTYPEFROMSTRING 0 ++#define HAVE_VIRTUALALLOC 1 ++#define HAVE_WGLGETPROCADDRESS 0 ++#define HAVE_BCRYPT 1 ++#define HAVE_VAAPI_DRM 0 ++#define HAVE_VAAPI_X11 0 ++#define HAVE_VDPAU_X11 0 ++#define HAVE_PTHREADS 0 ++#define HAVE_OS2THREADS 0 ++#define HAVE_W32THREADS 1 ++#define HAVE_AS_ARCH_DIRECTIVE 0 ++#define HAVE_AS_DN_DIRECTIVE 0 ++#define HAVE_AS_FPU_DIRECTIVE 0 ++#define HAVE_AS_FUNC 1 ++#define HAVE_AS_OBJECT_ARCH 0 ++#define HAVE_ASM_MOD_Q 0 ++#define HAVE_BLOCKS_EXTENSION 0 ++#define HAVE_EBP_AVAILABLE 0 ++#define HAVE_EBX_AVAILABLE 0 ++#define HAVE_GNU_AS 0 ++#define HAVE_GNU_WINDRES 0 ++#define HAVE_IBM_ASM 0 ++#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 ++#define HAVE_INLINE_ASM_LABELS 0 ++#define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 ++#define HAVE_PRAGMA_DEPRECATED 1 ++#define HAVE_RSYNC_CONTIMEOUT 1 ++#define HAVE_SYMVER_ASM_LABEL 0 ++#define HAVE_SYMVER_GNU_ASM 0 ++#define HAVE_VFP_ARGS 0 ++#define HAVE_XFORM_ASM 0 ++#define HAVE_XMM_CLOBBERS 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_SOCKLEN_T 1 ++#define HAVE_STRUCT_ADDRINFO 1 ++#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 ++#define HAVE_STRUCT_IP_MREQ_SOURCE 1 ++#define HAVE_STRUCT_IPV6_MREQ 1 ++#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0 ++#define HAVE_STRUCT_POLLFD 1 ++#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0 ++#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 ++#define HAVE_STRUCT_SOCKADDR_IN6 1 ++#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 ++#define HAVE_STRUCT_SOCKADDR_STORAGE 1 ++#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 ++#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 ++#define HAVE_MAKEINFO 0 ++#define HAVE_MAKEINFO_HTML 0 ++#define HAVE_OPENCL_D3D11 0 ++#define HAVE_OPENCL_DRM_ARM 0 ++#define HAVE_OPENCL_DRM_BEIGNET 0 ++#define HAVE_OPENCL_DXVA2 0 ++#define HAVE_OPENCL_VAAPI_BEIGNET 0 ++#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 ++#define HAVE_PERL 1 ++#define HAVE_POD2MAN 1 ++#define HAVE_TEXI2HTML 0 ++#define CONFIG_DOC 0 ++#define CONFIG_HTMLPAGES 0 ++#define CONFIG_MANPAGES 1 ++#define CONFIG_PODPAGES 1 ++#define CONFIG_TXTPAGES 0 ++#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++#define CONFIG_AVIO_READING_EXAMPLE 1 ++#define CONFIG_DECODE_AUDIO_EXAMPLE 1 ++#define CONFIG_DECODE_VIDEO_EXAMPLE 1 ++#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 ++#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 ++#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 ++#define CONFIG_EXTRACT_MVS_EXAMPLE 0 ++#define CONFIG_FILTER_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 ++#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 ++#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 ++#define CONFIG_HW_DECODE_EXAMPLE 0 ++#define CONFIG_METADATA_EXAMPLE 0 ++#define CONFIG_MUXING_EXAMPLE 0 ++#define CONFIG_QSVDEC_EXAMPLE 0 ++#define CONFIG_REMUXING_EXAMPLE 0 ++#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 ++#define CONFIG_SCALING_VIDEO_EXAMPLE 0 ++#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 ++#define CONFIG_TRANSCODING_EXAMPLE 0 ++#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 ++#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 ++#define CONFIG_AVISYNTH 0 ++#define CONFIG_FREI0R 0 ++#define CONFIG_LIBCDIO 0 ++#define CONFIG_LIBDAVS2 0 ++#define CONFIG_LIBRUBBERBAND 0 ++#define CONFIG_LIBVIDSTAB 0 ++#define CONFIG_LIBX264 0 ++#define CONFIG_LIBX265 0 ++#define CONFIG_LIBXAVS 0 ++#define CONFIG_LIBXAVS2 0 ++#define CONFIG_LIBXVID 0 ++#define CONFIG_DECKLINK 0 ++#define CONFIG_LIBFDK_AAC 0 ++#define CONFIG_OPENSSL 0 ++#define CONFIG_LIBTLS 0 ++#define CONFIG_GMP 0 ++#define CONFIG_LIBARIBB24 0 ++#define CONFIG_LIBLENSFUN 0 ++#define CONFIG_LIBOPENCORE_AMRNB 0 ++#define CONFIG_LIBOPENCORE_AMRWB 0 ++#define CONFIG_LIBVMAF 0 ++#define CONFIG_LIBVO_AMRWBENC 0 ++#define CONFIG_MBEDTLS 0 ++#define CONFIG_RKMPP 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_CHROMAPRINT 0 ++#define CONFIG_GCRYPT 0 ++#define CONFIG_GNUTLS 0 ++#define CONFIG_JNI 0 ++#define CONFIG_LADSPA 0 ++#define CONFIG_LIBAOM 0 ++#define CONFIG_LIBASS 0 ++#define CONFIG_LIBBLURAY 0 ++#define CONFIG_LIBBS2B 0 ++#define CONFIG_LIBCACA 0 ++#define CONFIG_LIBCELT 0 ++#define CONFIG_LIBCODEC2 0 ++#define CONFIG_LIBDAV1D 0 ++#define CONFIG_LIBDC1394 0 ++#define CONFIG_LIBDRM 0 ++#define CONFIG_LIBFLITE 0 ++#define CONFIG_LIBFONTCONFIG 0 ++#define CONFIG_LIBFREETYPE 0 ++#define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGME 0 ++#define CONFIG_LIBGSM 0 ++#define CONFIG_LIBIEC61883 0 ++#define CONFIG_LIBILBC 0 ++#define CONFIG_LIBJACK 0 ++#define CONFIG_LIBKLVANC 0 ++#define CONFIG_LIBKVAZAAR 0 ++#define CONFIG_LIBMODPLUG 0 ++#define CONFIG_LIBMP3LAME 0 ++#define CONFIG_LIBMYSOFA 0 ++#define CONFIG_LIBOPENCV 0 ++#define CONFIG_LIBOPENH264 0 ++#define CONFIG_LIBOPENJPEG 0 ++#define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRSVG 0 ++#define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHINE 0 ++#define CONFIG_LIBSMBCLIENT 0 ++#define CONFIG_LIBSNAPPY 0 ++#define CONFIG_LIBSOXR 0 ++#define CONFIG_LIBSPEEX 0 ++#define CONFIG_LIBSRT 0 ++#define CONFIG_LIBSSH 0 ++#define CONFIG_LIBTENSORFLOW 0 ++#define CONFIG_LIBTESSERACT 0 ++#define CONFIG_LIBTHEORA 0 ++#define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVORBIS 0 ++#define CONFIG_LIBVPX 0 ++#define CONFIG_LIBWAVPACK 0 ++#define CONFIG_LIBWEBP 0 ++#define CONFIG_LIBXML2 0 ++#define CONFIG_LIBZIMG 0 ++#define CONFIG_LIBZMQ 0 ++#define CONFIG_LIBZVBI 0 ++#define CONFIG_LV2 0 ++#define CONFIG_MEDIACODEC 0 ++#define CONFIG_OPENAL 0 ++#define CONFIG_OPENGL 0 ++#define CONFIG_POCKETSPHINX 0 ++#define CONFIG_VAPOURSYNTH 0 ++#define CONFIG_ALSA 0 ++#define CONFIG_APPKIT 0 ++#define CONFIG_AVFOUNDATION 0 ++#define CONFIG_BZLIB 0 ++#define CONFIG_COREIMAGE 0 ++#define CONFIG_ICONV 0 ++#define CONFIG_LIBXCB 0 ++#define CONFIG_LIBXCB_SHM 0 ++#define CONFIG_LIBXCB_SHAPE 0 ++#define CONFIG_LIBXCB_XFIXES 0 ++#define CONFIG_LZMA 0 ++#define CONFIG_SCHANNEL 0 ++#define CONFIG_SDL2 0 ++#define CONFIG_SECURETRANSPORT 0 ++#define CONFIG_SNDIO 0 ++#define CONFIG_XLIB 0 ++#define CONFIG_ZLIB 0 ++#define CONFIG_CUDA_NVCC 0 ++#define CONFIG_CUDA_SDK 0 ++#define CONFIG_LIBNPP 0 ++#define CONFIG_LIBMFX 0 ++#define CONFIG_MMAL 0 ++#define CONFIG_OMX 0 ++#define CONFIG_OPENCL 0 ++#define CONFIG_AMF 0 ++#define CONFIG_AUDIOTOOLBOX 0 ++#define CONFIG_CRYSTALHD 0 ++#define CONFIG_CUDA 0 ++#define CONFIG_CUDA_LLVM 0 ++#define CONFIG_CUVID 0 ++#define CONFIG_D3D11VA 0 ++#define CONFIG_DXVA2 0 ++#define CONFIG_FFNVCODEC 0 ++#define CONFIG_NVDEC 0 ++#define CONFIG_NVENC 0 ++#define CONFIG_VAAPI 0 ++#define CONFIG_VDPAU 0 ++#define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_V4L2_M2M 0 ++#define CONFIG_XVMC 0 ++#define CONFIG_FTRAPV 0 ++#define CONFIG_GRAY 0 ++#define CONFIG_HARDCODED_TABLES 0 ++#define CONFIG_OMX_RPI 0 ++#define CONFIG_RUNTIME_CPUDETECT 1 ++#define CONFIG_SAFE_BITSTREAM_READER 1 ++#define CONFIG_SHARED 1 ++#define CONFIG_SMALL 0 ++#define CONFIG_STATIC 0 ++#define CONFIG_SWSCALE_ALPHA 1 ++#define CONFIG_GPL 0 ++#define CONFIG_NONFREE 0 ++#define CONFIG_VERSION3 0 ++#define CONFIG_AVDEVICE 0 ++#define CONFIG_AVFILTER 0 ++#define CONFIG_SWSCALE 0 ++#define CONFIG_POSTPROC 0 ++#define CONFIG_AVFORMAT 0 ++#define CONFIG_AVCODEC 1 ++#define CONFIG_SWRESAMPLE 0 ++#define CONFIG_AVRESAMPLE 0 ++#define CONFIG_AVUTIL 1 ++#define CONFIG_FFPLAY 0 ++#define CONFIG_FFPROBE 0 ++#define CONFIG_FFMPEG 0 ++#define CONFIG_DCT 1 ++#define CONFIG_DWT 0 ++#define CONFIG_ERROR_RESILIENCE 0 ++#define CONFIG_FAAN 1 ++#define CONFIG_FAST_UNALIGNED 1 ++#define CONFIG_FFT 1 ++#define CONFIG_LSP 0 ++#define CONFIG_LZO 0 ++#define CONFIG_MDCT 0 ++#define CONFIG_PIXELUTILS 0 ++#define CONFIG_NETWORK 0 ++#define CONFIG_RDFT 1 ++#define CONFIG_AUTODETECT 0 ++#define CONFIG_FONTCONFIG 0 ++#define CONFIG_LINUX_PERF 0 ++#define CONFIG_MEMORY_POISONING 0 ++#define CONFIG_NEON_CLOBBER_TEST 0 ++#define CONFIG_OSSFUZZ 0 ++#define CONFIG_PIC 1 ++#define CONFIG_THUMB 0 ++#define CONFIG_VALGRIND_BACKTRACE 0 ++#define CONFIG_XMM_CLOBBER_TEST 0 ++#define CONFIG_BSFS 1 ++#define CONFIG_DECODERS 1 ++#define CONFIG_PARSERS 1 ++#define CONFIG_AANDCTTABLES 0 ++#define CONFIG_AC3DSP 0 ++#define CONFIG_ADTS_HEADER 0 ++#define CONFIG_AUDIO_FRAME_QUEUE 0 ++#define CONFIG_AUDIODSP 0 ++#define CONFIG_BLOCKDSP 0 ++#define CONFIG_BSWAPDSP 0 ++#define CONFIG_CABAC 0 ++#define CONFIG_CBS 0 ++#define CONFIG_CBS_AV1 0 ++#define CONFIG_CBS_H264 0 ++#define CONFIG_CBS_H265 0 ++#define CONFIG_CBS_JPEG 0 ++#define CONFIG_CBS_MPEG2 0 ++#define CONFIG_CBS_VP9 0 ++#define CONFIG_DIRAC_PARSE 0 ++#define CONFIG_DNN 0 ++#define CONFIG_DVPROFILE 0 ++#define CONFIG_EXIF 0 ++#define CONFIG_FAANDCT 1 ++#define CONFIG_FAANIDCT 1 ++#define CONFIG_FDCTDSP 1 ++#define CONFIG_FLACDSP 1 ++#define CONFIG_FMTCONVERT 0 ++#define CONFIG_FRAME_THREAD_ENCODER 0 ++#define CONFIG_G722DSP 0 ++#define CONFIG_GOLOMB 0 ++#define CONFIG_GPLV3 0 ++#define CONFIG_H263DSP 0 ++#define CONFIG_H264CHROMA 0 ++#define CONFIG_H264DSP 0 ++#define CONFIG_H264PARSE 0 ++#define CONFIG_H264PRED 1 ++#define CONFIG_H264QPEL 0 ++#define CONFIG_HEVCPARSE 0 ++#define CONFIG_HPELDSP 0 ++#define CONFIG_HUFFMAN 0 ++#define CONFIG_HUFFYUVDSP 0 ++#define CONFIG_HUFFYUVENCDSP 0 ++#define CONFIG_IDCTDSP 1 ++#define CONFIG_IIRFILTER 0 ++#define CONFIG_MDCT15 0 ++#define CONFIG_INTRAX8 0 ++#define CONFIG_ISO_MEDIA 0 ++#define CONFIG_IVIDSP 0 ++#define CONFIG_JPEGTABLES 0 ++#define CONFIG_LGPLV3 0 ++#define CONFIG_LIBX262 0 ++#define CONFIG_LLAUDDSP 0 ++#define CONFIG_LLVIDDSP 0 ++#define CONFIG_LLVIDENCDSP 0 ++#define CONFIG_LPC 0 ++#define CONFIG_LZF 0 ++#define CONFIG_ME_CMP 0 ++#define CONFIG_MPEG_ER 0 ++#define CONFIG_MPEGAUDIO 1 ++#define CONFIG_MPEGAUDIODSP 1 ++#define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEOENC 0 ++#define CONFIG_MSS34DSP 0 ++#define CONFIG_PIXBLOCKDSP 0 ++#define CONFIG_QPELDSP 0 ++#define CONFIG_QSV 0 ++#define CONFIG_QSVDEC 0 ++#define CONFIG_QSVENC 0 ++#define CONFIG_QSVVPP 0 ++#define CONFIG_RANGECODER 0 ++#define CONFIG_RIFFDEC 0 ++#define CONFIG_RIFFENC 0 ++#define CONFIG_RTPDEC 0 ++#define CONFIG_RTPENC_CHAIN 0 ++#define CONFIG_RV34DSP 0 ++#define CONFIG_SCENE_SAD 0 ++#define CONFIG_SINEWIN 0 ++#define CONFIG_SNAPPY 0 ++#define CONFIG_SRTP 0 ++#define CONFIG_STARTCODE 0 ++#define CONFIG_TEXTUREDSP 0 ++#define CONFIG_TEXTUREDSPENC 0 ++#define CONFIG_TPELDSP 0 ++#define CONFIG_VAAPI_1 0 ++#define CONFIG_VAAPI_ENCODE 0 ++#define CONFIG_VC1DSP 0 ++#define CONFIG_VIDEODSP 1 ++#define CONFIG_VP3DSP 0 ++#define CONFIG_VP56DSP 0 ++#define CONFIG_VP8DSP 1 ++#define CONFIG_WMA_FREQS 0 ++#define CONFIG_WMV2DSP 0 ++#define CONFIG_NULL_BSF 1 ++#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 ++#define CONFIG_VP8_DECODER 1 ++#define CONFIG_VP9_DECODER 1 ++#define CONFIG_FLAC_DECODER 1 ++#define CONFIG_MP3_DECODER 1 ++#define CONFIG_VP8_PARSER 1 ++#define CONFIG_VP9_PARSER 1 ++#endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/config_win64.asm b/media/ffvpx/config_win64.asm +--- a/media/ffvpx/config_win64.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_win64.asm 2023-04-06 12:49:19.192546469 +0200 +@@ -7,12 +7,16 @@ + %define ARCH_AVR32_UC 0 + %define ARCH_BFIN 0 + %define ARCH_IA64 0 ++%define ARCH_LOONGARCH 0 ++%define ARCH_LOONGARCH32 0 ++%define ARCH_LOONGARCH64 0 + %define ARCH_M68K 0 + %define ARCH_MIPS 0 + %define ARCH_MIPS64 0 + %define ARCH_PARISC 0 + %define ARCH_PPC 0 + %define ARCH_PPC64 0 ++%define ARCH_RISCV 0 + %define ARCH_S390 0 + %define ARCH_SH4 0 + %define ARCH_SPARC 0 +@@ -43,6 +47,7 @@ + %define HAVE_AVX 1 + %define HAVE_AVX2 1 + %define HAVE_AVX512 1 ++%define HAVE_AVX512ICL 1 + %define HAVE_FMA3 1 + %define HAVE_FMA4 1 + %define HAVE_MMX 1 +@@ -65,10 +70,11 @@ + %define HAVE_MIPSDSP 0 + %define HAVE_MIPSDSPR2 0 + %define HAVE_MSA 0 +-%define HAVE_MSA2 0 + %define HAVE_LOONGSON2 0 + %define HAVE_LOONGSON3 0 + %define HAVE_MMI 0 ++%define HAVE_LSX 0 ++%define HAVE_LASX 0 + %define HAVE_ARMV5TE_EXTERNAL 0 + %define HAVE_ARMV6_EXTERNAL 0 + %define HAVE_ARMV6T2_EXTERNAL 0 +@@ -89,6 +95,7 @@ + %define HAVE_AVX_EXTERNAL 1 + %define HAVE_AVX2_EXTERNAL 1 + %define HAVE_AVX512_EXTERNAL 1 ++%define HAVE_AVX512ICL_EXTERNAL 1 + %define HAVE_FMA3_EXTERNAL 1 + %define HAVE_FMA4_EXTERNAL 1 + %define HAVE_MMX_EXTERNAL 1 +@@ -111,10 +118,11 @@ + %define HAVE_MIPSDSP_EXTERNAL 0 + %define HAVE_MIPSDSPR2_EXTERNAL 0 + %define HAVE_MSA_EXTERNAL 0 +-%define HAVE_MSA2_EXTERNAL 0 + %define HAVE_LOONGSON2_EXTERNAL 0 + %define HAVE_LOONGSON3_EXTERNAL 0 + %define HAVE_MMI_EXTERNAL 0 ++%define HAVE_LSX_EXTERNAL 0 ++%define HAVE_LASX_EXTERNAL 0 + %define HAVE_ARMV5TE_INLINE 0 + %define HAVE_ARMV6_INLINE 0 + %define HAVE_ARMV6T2_INLINE 0 +@@ -135,6 +143,7 @@ + %define HAVE_AVX_INLINE 0 + %define HAVE_AVX2_INLINE 0 + %define HAVE_AVX512_INLINE 0 ++%define HAVE_AVX512ICL_INLINE 0 + %define HAVE_FMA3_INLINE 0 + %define HAVE_FMA4_INLINE 0 + %define HAVE_MMX_INLINE 0 +@@ -157,10 +166,11 @@ + %define HAVE_MIPSDSP_INLINE 0 + %define HAVE_MIPSDSPR2_INLINE 0 + %define HAVE_MSA_INLINE 0 +-%define HAVE_MSA2_INLINE 0 + %define HAVE_LOONGSON2_INLINE 0 + %define HAVE_LOONGSON3_INLINE 0 + %define HAVE_MMI_INLINE 0 ++%define HAVE_LSX_INLINE 0 ++%define HAVE_LASX_INLINE 0 + %define HAVE_ALIGNED_STACK 1 + %define HAVE_FAST_64BIT 1 + %define HAVE_FAST_CLZ 1 +@@ -201,6 +211,7 @@ + %define HAVE_ES2_GL_H 0 + %define HAVE_GSM_H 0 + %define HAVE_IO_H 1 ++%define HAVE_LINUX_DMA_BUF_H 0 + %define HAVE_LINUX_PERF_EVENT_H 0 + %define HAVE_MACHINE_IOCTL_BT848_H 0 + %define HAVE_MACHINE_IOCTL_METEOR_H 0 +@@ -264,12 +275,16 @@ + %define HAVE_COMMANDLINETOARGVW 1 + %define HAVE_FCNTL 0 + %define HAVE_GETADDRINFO 1 ++%define HAVE_GETAUXVAL 0 ++%define HAVE_GETENV 1 + %define HAVE_GETHRTIME 0 + %define HAVE_GETOPT 0 ++%define HAVE_GETMODULEHANDLE 1 + %define HAVE_GETPROCESSAFFINITYMASK 1 + %define HAVE_GETPROCESSMEMORYINFO 1 + %define HAVE_GETPROCESSTIMES 1 + %define HAVE_GETRUSAGE 0 ++%define HAVE_GETSTDHANDLE 1 + %define HAVE_GETSYSTEMTIMEASFILETIME 1 + %define HAVE_GETTIMEOFDAY 0 + %define HAVE_GLOB 0 +@@ -292,6 +307,7 @@ + %define HAVE_SECITEMIMPORT 0 + %define HAVE_SETCONSOLETEXTATTRIBUTE 1 + %define HAVE_SETCONSOLECTRLHANDLER 1 ++%define HAVE_SETDLLDIRECTORY 1 + %define HAVE_SETMODE 1 + %define HAVE_SETRLIMIT 0 + %define HAVE_SLEEP 1 +@@ -325,14 +341,29 @@ + %define HAVE_INLINE_ASM_LABELS 0 + %define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 + %define HAVE_PRAGMA_DEPRECATED 1 +-%define HAVE_RSYNC_CONTIMEOUT 1 ++%define HAVE_RSYNC_CONTIMEOUT 0 + %define HAVE_SYMVER_ASM_LABEL 0 + %define HAVE_SYMVER_GNU_ASM 0 + %define HAVE_VFP_ARGS 0 + %define HAVE_XFORM_ASM 0 + %define HAVE_XMM_CLOBBERS 0 + %define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++%define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++%define HAVE_KCMVIDEOCODECTYPE_VP9 0 + %define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++%define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + %define HAVE_SOCKLEN_T 1 + %define HAVE_STRUCT_ADDRINFO 1 + %define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -347,7 +378,9 @@ + %define HAVE_STRUCT_SOCKADDR_STORAGE 1 + %define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 + %define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 +-%define HAVE_MAKEINFO 1 ++%define HAVE_GZIP 1 ++%define HAVE_LIBDRM_GETFB2 0 ++%define HAVE_MAKEINFO 0 + %define HAVE_MAKEINFO_HTML 0 + %define HAVE_OPENCL_D3D11 0 + %define HAVE_OPENCL_DRM_ARM 0 +@@ -358,12 +391,14 @@ + %define HAVE_PERL 1 + %define HAVE_POD2MAN 1 + %define HAVE_TEXI2HTML 0 ++%define HAVE_XMLLINT 1 ++%define HAVE_ZLIB_GZIP 0 + %define CONFIG_DOC 0 + %define CONFIG_HTMLPAGES 0 + %define CONFIG_MANPAGES 1 + %define CONFIG_PODPAGES 1 +-%define CONFIG_TXTPAGES 1 +-%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++%define CONFIG_TXTPAGES 0 ++%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + %define CONFIG_AVIO_READING_EXAMPLE 1 + %define CONFIG_DECODE_AUDIO_EXAMPLE 1 + %define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -399,14 +434,12 @@ + %define CONFIG_LIBXVID 0 + %define CONFIG_DECKLINK 0 + %define CONFIG_LIBFDK_AAC 0 +-%define CONFIG_OPENSSL 0 + %define CONFIG_LIBTLS 0 + %define CONFIG_GMP 0 + %define CONFIG_LIBARIBB24 0 + %define CONFIG_LIBLENSFUN 0 + %define CONFIG_LIBOPENCORE_AMRNB 0 + %define CONFIG_LIBOPENCORE_AMRWB 0 +-%define CONFIG_LIBVMAF 0 + %define CONFIG_LIBVO_AMRWBENC 0 + %define CONFIG_MBEDTLS 0 + %define CONFIG_RKMPP 0 +@@ -416,6 +449,7 @@ + %define CONFIG_GNUTLS 0 + %define CONFIG_JNI 0 + %define CONFIG_LADSPA 0 ++%define CONFIG_LCMS2 0 + %define CONFIG_LIBAOM 0 + %define CONFIG_LIBASS 0 + %define CONFIG_LIBBLURAY 0 +@@ -430,11 +464,13 @@ + %define CONFIG_LIBFONTCONFIG 0 + %define CONFIG_LIBFREETYPE 0 + %define CONFIG_LIBFRIBIDI 0 ++%define CONFIG_LIBGLSLANG 0 + %define CONFIG_LIBGME 0 + %define CONFIG_LIBGSM 0 + %define CONFIG_LIBIEC61883 0 + %define CONFIG_LIBILBC 0 + %define CONFIG_LIBJACK 0 ++%define CONFIG_LIBJXL 0 + %define CONFIG_LIBKLVANC 0 + %define CONFIG_LIBKVAZAAR 0 + %define CONFIG_LIBMODPLUG 0 +@@ -444,10 +480,16 @@ + %define CONFIG_LIBOPENH264 0 + %define CONFIG_LIBOPENJPEG 0 + %define CONFIG_LIBOPENMPT 0 ++%define CONFIG_LIBOPENVINO 0 + %define CONFIG_LIBOPUS 0 ++%define CONFIG_LIBPLACEBO 0 + %define CONFIG_LIBPULSE 0 ++%define CONFIG_LIBRABBITMQ 0 ++%define CONFIG_LIBRAV1E 0 ++%define CONFIG_LIBRIST 0 + %define CONFIG_LIBRSVG 0 + %define CONFIG_LIBRTMP 0 ++%define CONFIG_LIBSHADERC 0 + %define CONFIG_LIBSHINE 0 + %define CONFIG_LIBSMBCLIENT 0 + %define CONFIG_LIBSNAPPY 0 +@@ -455,14 +497,16 @@ + %define CONFIG_LIBSPEEX 0 + %define CONFIG_LIBSRT 0 + %define CONFIG_LIBSSH 0 ++%define CONFIG_LIBSVTAV1 0 + %define CONFIG_LIBTENSORFLOW 0 + %define CONFIG_LIBTESSERACT 0 + %define CONFIG_LIBTHEORA 0 + %define CONFIG_LIBTWOLAME 0 ++%define CONFIG_LIBUAVS3D 0 + %define CONFIG_LIBV4L2 0 ++%define CONFIG_LIBVMAF 0 + %define CONFIG_LIBVORBIS 0 + %define CONFIG_LIBVPX 0 +-%define CONFIG_LIBWAVPACK 0 + %define CONFIG_LIBWEBP 0 + %define CONFIG_LIBXML2 0 + %define CONFIG_LIBZIMG 0 +@@ -472,6 +516,7 @@ + %define CONFIG_MEDIACODEC 0 + %define CONFIG_OPENAL 0 + %define CONFIG_OPENGL 0 ++%define CONFIG_OPENSSL 0 + %define CONFIG_POCKETSPHINX 0 + %define CONFIG_VAPOURSYNTH 0 + %define CONFIG_ALSA 0 +@@ -485,7 +530,9 @@ + %define CONFIG_LIBXCB_SHAPE 0 + %define CONFIG_LIBXCB_XFIXES 0 + %define CONFIG_LZMA 0 +-%define CONFIG_SCHANNEL 1 ++%define CONFIG_MEDIAFOUNDATION 0 ++%define CONFIG_METAL 0 ++%define CONFIG_SCHANNEL 0 + %define CONFIG_SDL2 0 + %define CONFIG_SECURETRANSPORT 0 + %define CONFIG_SNDIO 0 +@@ -512,8 +559,8 @@ + %define CONFIG_VAAPI 0 + %define CONFIG_VDPAU 0 + %define CONFIG_VIDEOTOOLBOX 0 ++%define CONFIG_VULKAN 0 + %define CONFIG_V4L2_M2M 0 +-%define CONFIG_XVMC 0 + %define CONFIG_FTRAPV 0 + %define CONFIG_GRAY 0 + %define CONFIG_HARDCODED_TABLES 0 +@@ -534,7 +581,6 @@ + %define CONFIG_AVFORMAT 0 + %define CONFIG_AVCODEC 1 + %define CONFIG_SWRESAMPLE 0 +-%define CONFIG_AVRESAMPLE 0 + %define CONFIG_AVUTIL 1 + %define CONFIG_FFPLAY 0 + %define CONFIG_FFPROBE 0 +@@ -546,27 +592,38 @@ + %define CONFIG_FAST_UNALIGNED 1 + %define CONFIG_FFT 1 + %define CONFIG_LSP 0 +-%define CONFIG_LZO 0 + %define CONFIG_MDCT 0 + %define CONFIG_PIXELUTILS 0 + %define CONFIG_NETWORK 0 + %define CONFIG_RDFT 1 + %define CONFIG_AUTODETECT 0 + %define CONFIG_FONTCONFIG 0 ++%define CONFIG_LARGE_TESTS 1 + %define CONFIG_LINUX_PERF 0 ++%define CONFIG_MACOS_KPERF 0 + %define CONFIG_MEMORY_POISONING 0 + %define CONFIG_NEON_CLOBBER_TEST 0 + %define CONFIG_OSSFUZZ 0 + %define CONFIG_PIC 1 ++%define CONFIG_PTX_COMPRESSION 0 + %define CONFIG_THUMB 0 + %define CONFIG_VALGRIND_BACKTRACE 0 + %define CONFIG_XMM_CLOBBER_TEST 0 +-%define CONFIG_BSFS 1 ++%define CONFIG_BSFS 0 + %define CONFIG_DECODERS 1 ++%define CONFIG_ENCODERS 0 ++%define CONFIG_HWACCELS 0 + %define CONFIG_PARSERS 1 ++%define CONFIG_INDEVS 0 ++%define CONFIG_OUTDEVS 0 ++%define CONFIG_FILTERS 0 ++%define CONFIG_DEMUXERS 0 ++%define CONFIG_MUXERS 0 ++%define CONFIG_PROTOCOLS 0 + %define CONFIG_AANDCTTABLES 0 + %define CONFIG_AC3DSP 0 + %define CONFIG_ADTS_HEADER 0 ++%define CONFIG_ATSC_A53 0 + %define CONFIG_AUDIO_FRAME_QUEUE 0 + %define CONFIG_AUDIODSP 0 + %define CONFIG_BLOCKDSP 0 +@@ -579,8 +636,10 @@ + %define CONFIG_CBS_JPEG 0 + %define CONFIG_CBS_MPEG2 0 + %define CONFIG_CBS_VP9 0 ++%define CONFIG_DEFLATE_WRAPPER 0 + %define CONFIG_DIRAC_PARSE 0 + %define CONFIG_DNN 0 ++%define CONFIG_DOVI_RPU 0 + %define CONFIG_DVPROFILE 0 + %define CONFIG_EXIF 0 + %define CONFIG_FAANDCT 1 +@@ -606,6 +665,7 @@ + %define CONFIG_IDCTDSP 1 + %define CONFIG_IIRFILTER 0 + %define CONFIG_MDCT15 0 ++%define CONFIG_INFLATE_WRAPPER 0 + %define CONFIG_INTRAX8 0 + %define CONFIG_ISO_MEDIA 0 + %define CONFIG_IVIDSP 0 +@@ -622,7 +682,9 @@ + %define CONFIG_MPEGAUDIO 1 + %define CONFIG_MPEGAUDIODSP 1 + %define CONFIG_MPEGAUDIOHEADER 1 ++%define CONFIG_MPEG4AUDIO 0 + %define CONFIG_MPEGVIDEO 0 ++%define CONFIG_MPEGVIDEODEC 0 + %define CONFIG_MPEGVIDEOENC 0 + %define CONFIG_MSS34DSP 0 + %define CONFIG_PIXBLOCKDSP 0 +@@ -654,11 +716,3 @@ + %define CONFIG_VP8DSP 1 + %define CONFIG_WMA_FREQS 0 + %define CONFIG_WMV2DSP 0 +-%define CONFIG_NULL_BSF 1 +-%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-%define CONFIG_VP8_DECODER 1 +-%define CONFIG_VP9_DECODER 1 +-%define CONFIG_FLAC_DECODER 1 +-%define CONFIG_MP3_DECODER 1 +-%define CONFIG_VP8_PARSER 1 +-%define CONFIG_VP9_PARSER 1 +\ No newline at end of file +diff -Naur a/media/ffvpx/config_win64.h b/media/ffvpx/config_win64.h +--- a/media/ffvpx/config_win64.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/config_win64.h 2023-04-06 12:49:19.192546469 +0200 +@@ -1,13 +1,14 @@ + /* Automatically generated by configure - do not modify! */ + #ifndef FFMPEG_CONFIG_H + #define FFMPEG_CONFIG_H +-#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3 --toolchain=msvc" ++#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --enable-w32threads --toolchain=msvc" + #define FFMPEG_LICENSE "LGPL version 2.1 or later" +-#define CONFIG_THIS_YEAR 2019 ++#define CONFIG_THIS_YEAR 2022 + #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" + #define AVCONV_DATADIR "/usr/local/share/ffmpeg" +-#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for x64" +-#define av_restrict __restrict ++#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30133 for x64" ++#define OS_NAME win32 ++#define av_restrict restrict + #define EXTERN_PREFIX "" + #define EXTERN_ASM + #define BUILDSUF "" +@@ -22,12 +23,16 @@ + #define ARCH_AVR32_UC 0 + #define ARCH_BFIN 0 + #define ARCH_IA64 0 ++#define ARCH_LOONGARCH 0 ++#define ARCH_LOONGARCH32 0 ++#define ARCH_LOONGARCH64 0 + #define ARCH_M68K 0 + #define ARCH_MIPS 0 + #define ARCH_MIPS64 0 + #define ARCH_PARISC 0 + #define ARCH_PPC 0 + #define ARCH_PPC64 0 ++#define ARCH_RISCV 0 + #define ARCH_S390 0 + #define ARCH_SH4 0 + #define ARCH_SPARC 0 +@@ -58,6 +63,7 @@ + #define HAVE_AVX 1 + #define HAVE_AVX2 1 + #define HAVE_AVX512 1 ++#define HAVE_AVX512ICL 1 + #define HAVE_FMA3 1 + #define HAVE_FMA4 1 + #define HAVE_MMX 1 +@@ -80,10 +86,11 @@ + #define HAVE_MIPSDSP 0 + #define HAVE_MIPSDSPR2 0 + #define HAVE_MSA 0 +-#define HAVE_MSA2 0 + #define HAVE_LOONGSON2 0 + #define HAVE_LOONGSON3 0 + #define HAVE_MMI 0 ++#define HAVE_LSX 0 ++#define HAVE_LASX 0 + #define HAVE_ARMV5TE_EXTERNAL 0 + #define HAVE_ARMV6_EXTERNAL 0 + #define HAVE_ARMV6T2_EXTERNAL 0 +@@ -104,6 +111,7 @@ + #define HAVE_AVX_EXTERNAL 1 + #define HAVE_AVX2_EXTERNAL 1 + #define HAVE_AVX512_EXTERNAL 1 ++#define HAVE_AVX512ICL_EXTERNAL 1 + #define HAVE_FMA3_EXTERNAL 1 + #define HAVE_FMA4_EXTERNAL 1 + #define HAVE_MMX_EXTERNAL 1 +@@ -126,10 +134,11 @@ + #define HAVE_MIPSDSP_EXTERNAL 0 + #define HAVE_MIPSDSPR2_EXTERNAL 0 + #define HAVE_MSA_EXTERNAL 0 +-#define HAVE_MSA2_EXTERNAL 0 + #define HAVE_LOONGSON2_EXTERNAL 0 + #define HAVE_LOONGSON3_EXTERNAL 0 + #define HAVE_MMI_EXTERNAL 0 ++#define HAVE_LSX_EXTERNAL 0 ++#define HAVE_LASX_EXTERNAL 0 + #define HAVE_ARMV5TE_INLINE 0 + #define HAVE_ARMV6_INLINE 0 + #define HAVE_ARMV6T2_INLINE 0 +@@ -150,6 +159,7 @@ + #define HAVE_AVX_INLINE 0 + #define HAVE_AVX2_INLINE 0 + #define HAVE_AVX512_INLINE 0 ++#define HAVE_AVX512ICL_INLINE 0 + #define HAVE_FMA3_INLINE 0 + #define HAVE_FMA4_INLINE 0 + #define HAVE_MMX_INLINE 0 +@@ -172,13 +182,14 @@ + #define HAVE_MIPSDSP_INLINE 0 + #define HAVE_MIPSDSPR2_INLINE 0 + #define HAVE_MSA_INLINE 0 +-#define HAVE_MSA2_INLINE 0 + #define HAVE_LOONGSON2_INLINE 0 + #define HAVE_LOONGSON3_INLINE 0 + #define HAVE_MMI_INLINE 0 ++#define HAVE_LSX_INLINE 0 ++#define HAVE_LASX_INLINE 0 + #define HAVE_ALIGNED_STACK 1 + #define HAVE_FAST_64BIT 1 +-#define HAVE_FAST_CLZ 0 ++#define HAVE_FAST_CLZ 1 + #define HAVE_FAST_CMOV 1 + #define HAVE_LOCAL_ALIGNED 1 + #define HAVE_SIMD_ALIGN_16 1 +@@ -216,6 +227,7 @@ + #define HAVE_ES2_GL_H 0 + #define HAVE_GSM_H 0 + #define HAVE_IO_H 1 ++#define HAVE_LINUX_DMA_BUF_H 0 + #define HAVE_LINUX_PERF_EVENT_H 0 + #define HAVE_MACHINE_IOCTL_BT848_H 0 + #define HAVE_MACHINE_IOCTL_METEOR_H 0 +@@ -279,12 +291,16 @@ + #define HAVE_COMMANDLINETOARGVW 1 + #define HAVE_FCNTL 0 + #define HAVE_GETADDRINFO 1 ++#define HAVE_GETAUXVAL 0 ++#define HAVE_GETENV 1 + #define HAVE_GETHRTIME 0 + #define HAVE_GETOPT 0 ++#define HAVE_GETMODULEHANDLE 1 + #define HAVE_GETPROCESSAFFINITYMASK 1 + #define HAVE_GETPROCESSMEMORYINFO 1 + #define HAVE_GETPROCESSTIMES 1 + #define HAVE_GETRUSAGE 0 ++#define HAVE_GETSTDHANDLE 1 + #define HAVE_GETSYSTEMTIMEASFILETIME 1 + #define HAVE_GETTIMEOFDAY 0 + #define HAVE_GLOB 0 +@@ -307,6 +323,7 @@ + #define HAVE_SECITEMIMPORT 0 + #define HAVE_SETCONSOLETEXTATTRIBUTE 1 + #define HAVE_SETCONSOLECTRLHANDLER 1 ++#define HAVE_SETDLLDIRECTORY 1 + #define HAVE_SETMODE 1 + #define HAVE_SETRLIMIT 0 + #define HAVE_SLEEP 1 +@@ -340,14 +357,29 @@ + #define HAVE_INLINE_ASM_LABELS 0 + #define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 + #define HAVE_PRAGMA_DEPRECATED 1 +-#define HAVE_RSYNC_CONTIMEOUT 1 ++#define HAVE_RSYNC_CONTIMEOUT 0 + #define HAVE_SYMVER_ASM_LABEL 0 + #define HAVE_SYMVER_GNU_ASM 0 + #define HAVE_VFP_ARGS 0 + #define HAVE_XFORM_ASM 0 + #define HAVE_XMM_CLOBBERS 0 + #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 ++#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 ++#define HAVE_KCMVIDEOCODECTYPE_VP9 0 + #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 ++#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 ++#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 ++#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 + #define HAVE_SOCKLEN_T 1 + #define HAVE_STRUCT_ADDRINFO 1 + #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 +@@ -362,7 +394,9 @@ + #define HAVE_STRUCT_SOCKADDR_STORAGE 1 + #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 + #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 +-#define HAVE_MAKEINFO 1 ++#define HAVE_GZIP 1 ++#define HAVE_LIBDRM_GETFB2 0 ++#define HAVE_MAKEINFO 0 + #define HAVE_MAKEINFO_HTML 0 + #define HAVE_OPENCL_D3D11 0 + #define HAVE_OPENCL_DRM_ARM 0 +@@ -373,12 +407,14 @@ + #define HAVE_PERL 1 + #define HAVE_POD2MAN 1 + #define HAVE_TEXI2HTML 0 ++#define HAVE_XMLLINT 1 ++#define HAVE_ZLIB_GZIP 0 + #define CONFIG_DOC 0 + #define CONFIG_HTMLPAGES 0 + #define CONFIG_MANPAGES 1 + #define CONFIG_PODPAGES 1 +-#define CONFIG_TXTPAGES 1 +-#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 ++#define CONFIG_TXTPAGES 0 ++#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 + #define CONFIG_AVIO_READING_EXAMPLE 1 + #define CONFIG_DECODE_AUDIO_EXAMPLE 1 + #define CONFIG_DECODE_VIDEO_EXAMPLE 1 +@@ -414,14 +450,12 @@ + #define CONFIG_LIBXVID 0 + #define CONFIG_DECKLINK 0 + #define CONFIG_LIBFDK_AAC 0 +-#define CONFIG_OPENSSL 0 + #define CONFIG_LIBTLS 0 + #define CONFIG_GMP 0 + #define CONFIG_LIBARIBB24 0 + #define CONFIG_LIBLENSFUN 0 + #define CONFIG_LIBOPENCORE_AMRNB 0 + #define CONFIG_LIBOPENCORE_AMRWB 0 +-#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVO_AMRWBENC 0 + #define CONFIG_MBEDTLS 0 + #define CONFIG_RKMPP 0 +@@ -431,6 +465,7 @@ + #define CONFIG_GNUTLS 0 + #define CONFIG_JNI 0 + #define CONFIG_LADSPA 0 ++#define CONFIG_LCMS2 0 + #define CONFIG_LIBAOM 0 + #define CONFIG_LIBASS 0 + #define CONFIG_LIBBLURAY 0 +@@ -445,11 +480,13 @@ + #define CONFIG_LIBFONTCONFIG 0 + #define CONFIG_LIBFREETYPE 0 + #define CONFIG_LIBFRIBIDI 0 ++#define CONFIG_LIBGLSLANG 0 + #define CONFIG_LIBGME 0 + #define CONFIG_LIBGSM 0 + #define CONFIG_LIBIEC61883 0 + #define CONFIG_LIBILBC 0 + #define CONFIG_LIBJACK 0 ++#define CONFIG_LIBJXL 0 + #define CONFIG_LIBKLVANC 0 + #define CONFIG_LIBKVAZAAR 0 + #define CONFIG_LIBMODPLUG 0 +@@ -459,10 +496,16 @@ + #define CONFIG_LIBOPENH264 0 + #define CONFIG_LIBOPENJPEG 0 + #define CONFIG_LIBOPENMPT 0 ++#define CONFIG_LIBOPENVINO 0 + #define CONFIG_LIBOPUS 0 ++#define CONFIG_LIBPLACEBO 0 + #define CONFIG_LIBPULSE 0 ++#define CONFIG_LIBRABBITMQ 0 ++#define CONFIG_LIBRAV1E 0 ++#define CONFIG_LIBRIST 0 + #define CONFIG_LIBRSVG 0 + #define CONFIG_LIBRTMP 0 ++#define CONFIG_LIBSHADERC 0 + #define CONFIG_LIBSHINE 0 + #define CONFIG_LIBSMBCLIENT 0 + #define CONFIG_LIBSNAPPY 0 +@@ -470,14 +513,16 @@ + #define CONFIG_LIBSPEEX 0 + #define CONFIG_LIBSRT 0 + #define CONFIG_LIBSSH 0 ++#define CONFIG_LIBSVTAV1 0 + #define CONFIG_LIBTENSORFLOW 0 + #define CONFIG_LIBTESSERACT 0 + #define CONFIG_LIBTHEORA 0 + #define CONFIG_LIBTWOLAME 0 ++#define CONFIG_LIBUAVS3D 0 + #define CONFIG_LIBV4L2 0 ++#define CONFIG_LIBVMAF 0 + #define CONFIG_LIBVORBIS 0 + #define CONFIG_LIBVPX 0 +-#define CONFIG_LIBWAVPACK 0 + #define CONFIG_LIBWEBP 0 + #define CONFIG_LIBXML2 0 + #define CONFIG_LIBZIMG 0 +@@ -487,6 +532,7 @@ + #define CONFIG_MEDIACODEC 0 + #define CONFIG_OPENAL 0 + #define CONFIG_OPENGL 0 ++#define CONFIG_OPENSSL 0 + #define CONFIG_POCKETSPHINX 0 + #define CONFIG_VAPOURSYNTH 0 + #define CONFIG_ALSA 0 +@@ -500,7 +546,9 @@ + #define CONFIG_LIBXCB_SHAPE 0 + #define CONFIG_LIBXCB_XFIXES 0 + #define CONFIG_LZMA 0 +-#define CONFIG_SCHANNEL 1 ++#define CONFIG_MEDIAFOUNDATION 0 ++#define CONFIG_METAL 0 ++#define CONFIG_SCHANNEL 0 + #define CONFIG_SDL2 0 + #define CONFIG_SECURETRANSPORT 0 + #define CONFIG_SNDIO 0 +@@ -527,8 +575,8 @@ + #define CONFIG_VAAPI 0 + #define CONFIG_VDPAU 0 + #define CONFIG_VIDEOTOOLBOX 0 ++#define CONFIG_VULKAN 0 + #define CONFIG_V4L2_M2M 0 +-#define CONFIG_XVMC 0 + #define CONFIG_FTRAPV 0 + #define CONFIG_GRAY 0 + #define CONFIG_HARDCODED_TABLES 0 +@@ -549,7 +597,6 @@ + #define CONFIG_AVFORMAT 0 + #define CONFIG_AVCODEC 1 + #define CONFIG_SWRESAMPLE 0 +-#define CONFIG_AVRESAMPLE 0 + #define CONFIG_AVUTIL 1 + #define CONFIG_FFPLAY 0 + #define CONFIG_FFPROBE 0 +@@ -561,27 +608,38 @@ + #define CONFIG_FAST_UNALIGNED 1 + #define CONFIG_FFT 1 + #define CONFIG_LSP 0 +-#define CONFIG_LZO 0 + #define CONFIG_MDCT 0 + #define CONFIG_PIXELUTILS 0 + #define CONFIG_NETWORK 0 + #define CONFIG_RDFT 1 + #define CONFIG_AUTODETECT 0 + #define CONFIG_FONTCONFIG 0 ++#define CONFIG_LARGE_TESTS 1 + #define CONFIG_LINUX_PERF 0 ++#define CONFIG_MACOS_KPERF 0 + #define CONFIG_MEMORY_POISONING 0 + #define CONFIG_NEON_CLOBBER_TEST 0 + #define CONFIG_OSSFUZZ 0 + #define CONFIG_PIC 1 ++#define CONFIG_PTX_COMPRESSION 0 + #define CONFIG_THUMB 0 + #define CONFIG_VALGRIND_BACKTRACE 0 + #define CONFIG_XMM_CLOBBER_TEST 0 +-#define CONFIG_BSFS 1 ++#define CONFIG_BSFS 0 + #define CONFIG_DECODERS 1 ++#define CONFIG_ENCODERS 0 ++#define CONFIG_HWACCELS 0 + #define CONFIG_PARSERS 1 ++#define CONFIG_INDEVS 0 ++#define CONFIG_OUTDEVS 0 ++#define CONFIG_FILTERS 0 ++#define CONFIG_DEMUXERS 0 ++#define CONFIG_MUXERS 0 ++#define CONFIG_PROTOCOLS 0 + #define CONFIG_AANDCTTABLES 0 + #define CONFIG_AC3DSP 0 + #define CONFIG_ADTS_HEADER 0 ++#define CONFIG_ATSC_A53 0 + #define CONFIG_AUDIO_FRAME_QUEUE 0 + #define CONFIG_AUDIODSP 0 + #define CONFIG_BLOCKDSP 0 +@@ -594,8 +652,10 @@ + #define CONFIG_CBS_JPEG 0 + #define CONFIG_CBS_MPEG2 0 + #define CONFIG_CBS_VP9 0 ++#define CONFIG_DEFLATE_WRAPPER 0 + #define CONFIG_DIRAC_PARSE 0 + #define CONFIG_DNN 0 ++#define CONFIG_DOVI_RPU 0 + #define CONFIG_DVPROFILE 0 + #define CONFIG_EXIF 0 + #define CONFIG_FAANDCT 1 +@@ -621,6 +681,7 @@ + #define CONFIG_IDCTDSP 1 + #define CONFIG_IIRFILTER 0 + #define CONFIG_MDCT15 0 ++#define CONFIG_INFLATE_WRAPPER 0 + #define CONFIG_INTRAX8 0 + #define CONFIG_ISO_MEDIA 0 + #define CONFIG_IVIDSP 0 +@@ -637,7 +698,9 @@ + #define CONFIG_MPEGAUDIO 1 + #define CONFIG_MPEGAUDIODSP 1 + #define CONFIG_MPEGAUDIOHEADER 1 ++#define CONFIG_MPEG4AUDIO 0 + #define CONFIG_MPEGVIDEO 0 ++#define CONFIG_MPEGVIDEODEC 0 + #define CONFIG_MPEGVIDEOENC 0 + #define CONFIG_MSS34DSP 0 + #define CONFIG_PIXBLOCKDSP 0 +@@ -669,12 +732,4 @@ + #define CONFIG_VP8DSP 1 + #define CONFIG_WMA_FREQS 0 + #define CONFIG_WMV2DSP 0 +-#define CONFIG_NULL_BSF 1 +-#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 +-#define CONFIG_VP8_DECODER 1 +-#define CONFIG_VP9_DECODER 1 +-#define CONFIG_FLAC_DECODER 1 +-#define CONFIG_MP3_DECODER 1 +-#define CONFIG_VP8_PARSER 1 +-#define CONFIG_VP9_PARSER 1 + #endif /* FFMPEG_CONFIG_H */ +diff -Naur a/media/ffvpx/defaults_disabled.asm b/media/ffvpx/defaults_disabled.asm +--- a/media/ffvpx/defaults_disabled.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/defaults_disabled.asm 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1836 +0,0 @@ +-%define CONFIG_A64MULTI5_ENCODER 0 +-%define CONFIG_A64MULTI_ENCODER 0 +-%define CONFIG_A64_MUXER 0 +-%define CONFIG_AAC_ADTSTOASC_BSF 0 +-%define CONFIG_AAC_AT_DECODER 0 +-%define CONFIG_AAC_AT_ENCODER 0 +-%define CONFIG_AAC_DECODER 0 +-%define CONFIG_AAC_DEMUXER 0 +-%define CONFIG_AAC_ENCODER 0 +-%define CONFIG_AAC_FIXED_DECODER 0 +-%define CONFIG_AAC_LATM_DECODER 0 +-%define CONFIG_AAC_LATM_PARSER 0 +-%define CONFIG_AAC_PARSER 0 +-%define CONFIG_AA_DEMUXER 0 +-%define CONFIG_AASC_DECODER 0 +-%define CONFIG_ABENCH_FILTER 0 +-%define CONFIG_ABITSCOPE_FILTER 0 +-%define CONFIG_AC3_AT_DECODER 0 +-%define CONFIG_AC3_DECODER 0 +-%define CONFIG_AC3_DEMUXER 0 +-%define CONFIG_AC3_ENCODER 0 +-%define CONFIG_AC3_FIXED_DECODER 0 +-%define CONFIG_AC3_FIXED_ENCODER 0 +-%define CONFIG_AC3_MUXER 0 +-%define CONFIG_AC3_PARSER 0 +-%define CONFIG_ACM_DEMUXER 0 +-%define CONFIG_ACOMPRESSOR_FILTER 0 +-%define CONFIG_ACONTRAST_FILTER 0 +-%define CONFIG_ACOPY_FILTER 0 +-%define CONFIG_ACROSSFADE_FILTER 0 +-%define CONFIG_ACROSSOVER_FILTER 0 +-%define CONFIG_ACRUSHER_FILTER 0 +-%define CONFIG_ACT_DEMUXER 0 +-%define CONFIG_ACUE_FILTER 0 +-%define CONFIG_ADECLICK_FILTER 0 +-%define CONFIG_ADECLIP_FILTER 0 +-%define CONFIG_ADELAY_FILTER 0 +-%define CONFIG_ADERIVATIVE_FILTER 0 +-%define CONFIG_ADF_DEMUXER 0 +-%define CONFIG_ADPCM_4XM_DECODER 0 +-%define CONFIG_ADPCM_ADX_DECODER 0 +-%define CONFIG_ADPCM_ADX_ENCODER 0 +-%define CONFIG_ADPCM_AFC_DECODER 0 +-%define CONFIG_ADPCM_AGM_DECODER 0 +-%define CONFIG_ADPCM_AICA_DECODER 0 +-%define CONFIG_ADPCM_CT_DECODER 0 +-%define CONFIG_ADPCM_DTK_DECODER 0 +-%define CONFIG_ADPCM_EA_DECODER 0 +-%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 +-%define CONFIG_ADPCM_EA_R1_DECODER 0 +-%define CONFIG_ADPCM_EA_R2_DECODER 0 +-%define CONFIG_ADPCM_EA_R3_DECODER 0 +-%define CONFIG_ADPCM_EA_XAS_DECODER 0 +-%define CONFIG_ADPCM_G722_DECODER 0 +-%define CONFIG_ADPCM_G722_ENCODER 0 +-%define CONFIG_ADPCM_G726_DECODER 0 +-%define CONFIG_ADPCM_G726_ENCODER 0 +-%define CONFIG_ADPCM_G726LE_DECODER 0 +-%define CONFIG_ADPCM_G726LE_ENCODER 0 +-%define CONFIG_ADPCM_IMA_AMV_DECODER 0 +-%define CONFIG_ADPCM_IMA_APC_DECODER 0 +-%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 +-%define CONFIG_ADPCM_IMA_DK3_DECODER 0 +-%define CONFIG_ADPCM_IMA_DK4_DECODER 0 +-%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 +-%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 +-%define CONFIG_ADPCM_IMA_ISS_DECODER 0 +-%define CONFIG_ADPCM_IMA_OKI_DECODER 0 +-%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 +-%define CONFIG_ADPCM_IMA_QT_DECODER 0 +-%define CONFIG_ADPCM_IMA_QT_ENCODER 0 +-%define CONFIG_ADPCM_IMA_RAD_DECODER 0 +-%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 +-%define CONFIG_ADPCM_IMA_WAV_DECODER 0 +-%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 +-%define CONFIG_ADPCM_IMA_WS_DECODER 0 +-%define CONFIG_ADPCM_MS_DECODER 0 +-%define CONFIG_ADPCM_MS_ENCODER 0 +-%define CONFIG_ADPCM_MTAF_DECODER 0 +-%define CONFIG_ADPCM_PSX_DECODER 0 +-%define CONFIG_ADPCM_SBPRO_2_DECODER 0 +-%define CONFIG_ADPCM_SBPRO_3_DECODER 0 +-%define CONFIG_ADPCM_SBPRO_4_DECODER 0 +-%define CONFIG_ADPCM_SWF_DECODER 0 +-%define CONFIG_ADPCM_SWF_ENCODER 0 +-%define CONFIG_ADPCM_THP_DECODER 0 +-%define CONFIG_ADPCM_THP_LE_DECODER 0 +-%define CONFIG_ADPCM_VIMA_DECODER 0 +-%define CONFIG_ADPCM_XA_DECODER 0 +-%define CONFIG_ADPCM_YAMAHA_DECODER 0 +-%define CONFIG_ADPCM_YAMAHA_ENCODER 0 +-%define CONFIG_ADP_DEMUXER 0 +-%define CONFIG_ADRAWGRAPH_FILTER 0 +-%define CONFIG_ADS_DEMUXER 0 +-%define CONFIG_ADTS_MUXER 0 +-%define CONFIG_ADX_DEMUXER 0 +-%define CONFIG_ADX_MUXER 0 +-%define CONFIG_ADX_PARSER 0 +-%define CONFIG_AEA_DEMUXER 0 +-%define CONFIG_AECHO_FILTER 0 +-%define CONFIG_AEMPHASIS_FILTER 0 +-%define CONFIG_AEVAL_FILTER 0 +-%define CONFIG_AEVALSRC_FILTER 0 +-%define CONFIG_AFADE_FILTER 0 +-%define CONFIG_AFC_DEMUXER 0 +-%define CONFIG_AFFTDN_FILTER 0 +-%define CONFIG_AFFTFILT_FILTER 0 +-%define CONFIG_AFIFO_FILTER 0 +-%define CONFIG_AFIR_FILTER 0 +-%define CONFIG_AFORMAT_FILTER 0 +-%define CONFIG_AGATE_FILTER 0 +-%define CONFIG_AGM_DECODER 0 +-%define CONFIG_AGRAPHMONITOR_FILTER 0 +-%define CONFIG_AHISTOGRAM_FILTER 0 +-%define CONFIG_AIC_DECODER 0 +-%define CONFIG_AIFF_DEMUXER 0 +-%define CONFIG_AIFF_MUXER 0 +-%define CONFIG_AIIR_FILTER 0 +-%define CONFIG_AINTEGRAL_FILTER 0 +-%define CONFIG_AINTERLEAVE_FILTER 0 +-%define CONFIG_AIX_DEMUXER 0 +-%define CONFIG_ALAC_AT_DECODER 0 +-%define CONFIG_ALAC_AT_ENCODER 0 +-%define CONFIG_ALAC_DECODER 0 +-%define CONFIG_ALAC_ENCODER 0 +-%define CONFIG_ALIAS_PIX_DECODER 0 +-%define CONFIG_ALIAS_PIX_ENCODER 0 +-%define CONFIG_ALIMITER_FILTER 0 +-%define CONFIG_ALLPASS_FILTER 0 +-%define CONFIG_ALLRGB_FILTER 0 +-%define CONFIG_ALLYUV_FILTER 0 +-%define CONFIG_ALOOP_FILTER 0 +-%define CONFIG_ALPHAEXTRACT_FILTER 0 +-%define CONFIG_ALPHAMERGE_FILTER 0 +-%define CONFIG_ALSA_INDEV 0 +-%define CONFIG_ALSA_OUTDEV 0 +-%define CONFIG_ALS_DECODER 0 +-%define CONFIG_AMERGE_FILTER 0 +-%define CONFIG_AMETADATA_FILTER 0 +-%define CONFIG_AMIX_FILTER 0 +-%define CONFIG_AMOVIE_FILTER 0 +-%define CONFIG_AMPLIFY_FILTER 0 +-%define CONFIG_AMR_DEMUXER 0 +-%define CONFIG_AMR_MUXER 0 +-%define CONFIG_AMR_NB_AT_DECODER 0 +-%define CONFIG_AMRNB_DECODER 0 +-%define CONFIG_AMRNB_DEMUXER 0 +-%define CONFIG_AMRWB_DECODER 0 +-%define CONFIG_AMRWB_DEMUXER 0 +-%define CONFIG_AMULTIPLY_FILTER 0 +-%define CONFIG_AMV_DECODER 0 +-%define CONFIG_AMV_ENCODER 0 +-%define CONFIG_ANDROID_CAMERA_INDEV 0 +-%define CONFIG_ANEQUALIZER_FILTER 0 +-%define CONFIG_ANLMDN_FILTER 0 +-%define CONFIG_ANM_DECODER 0 +-%define CONFIG_ANM_DEMUXER 0 +-%define CONFIG_ANOISESRC_FILTER 0 +-%define CONFIG_ANSI_DECODER 0 +-%define CONFIG_ANULL_FILTER 0 +-%define CONFIG_ANULLSINK_FILTER 0 +-%define CONFIG_ANULLSRC_FILTER 0 +-%define CONFIG_APAD_FILTER 0 +-%define CONFIG_APC_DEMUXER 0 +-%define CONFIG_APE_DECODER 0 +-%define CONFIG_APE_DEMUXER 0 +-%define CONFIG_APERMS_FILTER 0 +-%define CONFIG_APHASEMETER_FILTER 0 +-%define CONFIG_APHASER_FILTER 0 +-%define CONFIG_APNG_DECODER 0 +-%define CONFIG_APNG_DEMUXER 0 +-%define CONFIG_APNG_ENCODER 0 +-%define CONFIG_APNG_MUXER 0 +-%define CONFIG_APTX_DECODER 0 +-%define CONFIG_APTX_DEMUXER 0 +-%define CONFIG_APTX_ENCODER 0 +-%define CONFIG_APTX_HD_DECODER 0 +-%define CONFIG_APTX_HD_DEMUXER 0 +-%define CONFIG_APTX_HD_ENCODER 0 +-%define CONFIG_APTX_HD_MUXER 0 +-%define CONFIG_APTX_MUXER 0 +-%define CONFIG_APULSATOR_FILTER 0 +-%define CONFIG_AQTITLE_DEMUXER 0 +-%define CONFIG_ARBC_DECODER 0 +-%define CONFIG_AREALTIME_FILTER 0 +-%define CONFIG_ARESAMPLE_FILTER 0 +-%define CONFIG_AREVERSE_FILTER 0 +-%define CONFIG_ASELECT_FILTER 0 +-%define CONFIG_ASENDCMD_FILTER 0 +-%define CONFIG_ASETNSAMPLES_FILTER 0 +-%define CONFIG_ASETPTS_FILTER 0 +-%define CONFIG_ASETRATE_FILTER 0 +-%define CONFIG_ASETTB_FILTER 0 +-%define CONFIG_ASF_DEMUXER 0 +-%define CONFIG_ASF_MUXER 0 +-%define CONFIG_ASF_O_DEMUXER 0 +-%define CONFIG_ASF_STREAM_MUXER 0 +-%define CONFIG_ASHOWINFO_FILTER 0 +-%define CONFIG_ASIDEDATA_FILTER 0 +-%define CONFIG_ASOFTCLIP_FILTER 0 +-%define CONFIG_ASPLIT_FILTER 0 +-%define CONFIG_ASR_FILTER 0 +-%define CONFIG_ASS_DECODER 0 +-%define CONFIG_ASS_DEMUXER 0 +-%define CONFIG_ASS_ENCODER 0 +-%define CONFIG_ASS_FILTER 0 +-%define CONFIG_ASS_MUXER 0 +-%define CONFIG_ASTATS_FILTER 0 +-%define CONFIG_AST_DEMUXER 0 +-%define CONFIG_AST_MUXER 0 +-%define CONFIG_ASTREAMSELECT_FILTER 0 +-%define CONFIG_ASV1_DECODER 0 +-%define CONFIG_ASV1_ENCODER 0 +-%define CONFIG_ASV2_DECODER 0 +-%define CONFIG_ASV2_ENCODER 0 +-%define CONFIG_ASYNC_PROTOCOL 0 +-%define CONFIG_ATADENOISE_FILTER 0 +-%define CONFIG_ATEMPO_FILTER 0 +-%define CONFIG_ATRAC1_DECODER 0 +-%define CONFIG_ATRAC3AL_DECODER 0 +-%define CONFIG_ATRAC3_DECODER 0 +-%define CONFIG_ATRAC3PAL_DECODER 0 +-%define CONFIG_ATRAC3P_DECODER 0 +-%define CONFIG_ATRAC9_DECODER 0 +-%define CONFIG_ATRIM_FILTER 0 +-%define CONFIG_AU_DEMUXER 0 +-%define CONFIG_AU_MUXER 0 +-%define CONFIG_AURA2_DECODER 0 +-%define CONFIG_AURA_DECODER 0 +-%define CONFIG_AV1_FRAME_SPLIT_BSF 0 +-%define CONFIG_AV1_METADATA_BSF 0 +-%define CONFIG_AV1_PARSER 0 +-%define CONFIG_AV1_D3D11VA_HWACCEL 0 +-%define CONFIG_AV1_D3D11VA2_HWACCEL 0 +-%define CONFIG_AV1_DXVA2_HWACCEL 0 +-%define CONFIG_AV1_NVDEC_HWACCEL 0 +-%define CONFIG_AV1_VAAPI_HWACCEL 0 +-%define CONFIG_AVECTORSCOPE_FILTER 0 +-%define CONFIG_AVFOUNDATION_INDEV 0 +-%define CONFIG_AVGBLUR_FILTER 0 +-%define CONFIG_AVGBLUR_OPENCL_FILTER 0 +-%define CONFIG_AVI_DEMUXER 0 +-%define CONFIG_AVI_MUXER 0 +-%define CONFIG_AVISYNTH_DEMUXER 0 +-%define CONFIG_AVM2_MUXER 0 +-%define CONFIG_AVR_DEMUXER 0 +-%define CONFIG_AVRN_DECODER 0 +-%define CONFIG_AVRP_DECODER 0 +-%define CONFIG_AVRP_ENCODER 0 +-%define CONFIG_AVS2_DEMUXER 0 +-%define CONFIG_AVS2_MUXER 0 +-%define CONFIG_AVS2_PARSER 0 +-%define CONFIG_AVS_DECODER 0 +-%define CONFIG_AVS_DEMUXER 0 +-%define CONFIG_AVUI_DECODER 0 +-%define CONFIG_AVUI_ENCODER 0 +-%define CONFIG_AYUV_DECODER 0 +-%define CONFIG_AYUV_ENCODER 0 +-%define CONFIG_AZMQ_FILTER 0 +-%define CONFIG_BANDPASS_FILTER 0 +-%define CONFIG_BANDREJECT_FILTER 0 +-%define CONFIG_BASS_FILTER 0 +-%define CONFIG_BBOX_FILTER 0 +-%define CONFIG_BENCH_FILTER 0 +-%define CONFIG_BETHSOFTVID_DECODER 0 +-%define CONFIG_BETHSOFTVID_DEMUXER 0 +-%define CONFIG_BFI_DECODER 0 +-%define CONFIG_BFI_DEMUXER 0 +-%define CONFIG_BFSTM_DEMUXER 0 +-%define CONFIG_BINKAUDIO_DCT_DECODER 0 +-%define CONFIG_BINKAUDIO_RDFT_DECODER 0 +-%define CONFIG_BINK_DECODER 0 +-%define CONFIG_BINK_DEMUXER 0 +-%define CONFIG_BINTEXT_DECODER 0 +-%define CONFIG_BINTEXT_DEMUXER 0 +-%define CONFIG_BIQUAD_FILTER 0 +-%define CONFIG_BIT_DEMUXER 0 +-%define CONFIG_BIT_MUXER 0 +-%define CONFIG_BITPACKED_DECODER 0 +-%define CONFIG_BITPLANENOISE_FILTER 0 +-%define CONFIG_BKTR_INDEV 0 +-%define CONFIG_BLACKDETECT_FILTER 0 +-%define CONFIG_BLACKFRAME_FILTER 0 +-%define CONFIG_BLEND_FILTER 0 +-%define CONFIG_BLURAY_PROTOCOL 0 +-%define CONFIG_BM3D_FILTER 0 +-%define CONFIG_BMP_DECODER 0 +-%define CONFIG_BMP_ENCODER 0 +-%define CONFIG_BMP_PARSER 0 +-%define CONFIG_BMV_AUDIO_DECODER 0 +-%define CONFIG_BMV_DEMUXER 0 +-%define CONFIG_BMV_VIDEO_DECODER 0 +-%define CONFIG_BOA_DEMUXER 0 +-%define CONFIG_BOXBLUR_FILTER 0 +-%define CONFIG_BOXBLUR_OPENCL_FILTER 0 +-%define CONFIG_BRENDER_PIX_DECODER 0 +-%define CONFIG_BRSTM_DEMUXER 0 +-%define CONFIG_BS2B_FILTER 0 +-%define CONFIG_BWDIF_FILTER 0 +-%define CONFIG_C93_DECODER 0 +-%define CONFIG_C93_DEMUXER 0 +-%define CONFIG_CACA_OUTDEV 0 +-%define CONFIG_CACHE_PROTOCOL 0 +-%define CONFIG_CAF_DEMUXER 0 +-%define CONFIG_CAF_MUXER 0 +-%define CONFIG_CAVS_DECODER 0 +-%define CONFIG_CAVSVIDEO_DEMUXER 0 +-%define CONFIG_CAVSVIDEO_MUXER 0 +-%define CONFIG_CAVSVIDEO_PARSER 0 +-%define CONFIG_CCAPTION_DECODER 0 +-%define CONFIG_CDG_DEMUXER 0 +-%define CONFIG_CDGRAPHICS_DECODER 0 +-%define CONFIG_CDXL_DECODER 0 +-%define CONFIG_CDXL_DEMUXER 0 +-%define CONFIG_CELLAUTO_FILTER 0 +-%define CONFIG_CFHD_DECODER 0 +-%define CONFIG_CHANNELMAP_FILTER 0 +-%define CONFIG_CHANNELSPLIT_FILTER 0 +-%define CONFIG_CHOMP_BSF 0 +-%define CONFIG_CHORUS_FILTER 0 +-%define CONFIG_CHROMAHOLD_FILTER 0 +-%define CONFIG_CHROMAKEY_FILTER 0 +-%define CONFIG_CHROMAPRINT_MUXER 0 +-%define CONFIG_CHROMASHIFT_FILTER 0 +-%define CONFIG_CIESCOPE_FILTER 0 +-%define CONFIG_CINE_DEMUXER 0 +-%define CONFIG_CINEPAK_DECODER 0 +-%define CONFIG_CINEPAK_ENCODER 0 +-%define CONFIG_CLEARVIDEO_DECODER 0 +-%define CONFIG_CLJR_DECODER 0 +-%define CONFIG_CLJR_ENCODER 0 +-%define CONFIG_CLLC_DECODER 0 +-%define CONFIG_CODEC2_DEMUXER 0 +-%define CONFIG_CODEC2_MUXER 0 +-%define CONFIG_CODEC2RAW_DEMUXER 0 +-%define CONFIG_CODEC2RAW_MUXER 0 +-%define CONFIG_CODECVIEW_FILTER 0 +-%define CONFIG_COLORBALANCE_FILTER 0 +-%define CONFIG_COLORCHANNELMIXER_FILTER 0 +-%define CONFIG_COLOR_FILTER 0 +-%define CONFIG_COLORHOLD_FILTER 0 +-%define CONFIG_COLORKEY_FILTER 0 +-%define CONFIG_COLORKEY_OPENCL_FILTER 0 +-%define CONFIG_COLORLEVELS_FILTER 0 +-%define CONFIG_COLORMATRIX_FILTER 0 +-%define CONFIG_COLORSPACE_FILTER 0 +-%define CONFIG_COMFORTNOISE_DECODER 0 +-%define CONFIG_COMFORTNOISE_ENCODER 0 +-%define CONFIG_COMPAND_FILTER 0 +-%define CONFIG_COMPENSATIONDELAY_FILTER 0 +-%define CONFIG_CONCAT_DEMUXER 0 +-%define CONFIG_CONCAT_FILTER 0 +-%define CONFIG_CONCAT_PROTOCOL 0 +-%define CONFIG_CONVOLUTION_FILTER 0 +-%define CONFIG_CONVOLUTION_OPENCL_FILTER 0 +-%define CONFIG_CONVOLVE_FILTER 0 +-%define CONFIG_COOK_DECODER 0 +-%define CONFIG_COOK_PARSER 0 +-%define CONFIG_COPY_FILTER 0 +-%define CONFIG_COREIMAGE_FILTER 0 +-%define CONFIG_COREIMAGESRC_FILTER 0 +-%define CONFIG_COVER_RECT_FILTER 0 +-%define CONFIG_CPIA_DECODER 0 +-%define CONFIG_CRC_MUXER 0 +-%define CONFIG_CROPDETECT_FILTER 0 +-%define CONFIG_CROP_FILTER 0 +-%define CONFIG_CROSSFEED_FILTER 0 +-%define CONFIG_CRYPTO_PROTOCOL 0 +-%define CONFIG_CRYSTALIZER_FILTER 0 +-%define CONFIG_CSCD_DECODER 0 +-%define CONFIG_CUE_FILTER 0 +-%define CONFIG_CURVES_FILTER 0 +-%define CONFIG_CYUV_DECODER 0 +-%define CONFIG_DASH_DEMUXER 0 +-%define CONFIG_DASH_MUXER 0 +-%define CONFIG_DATA_DEMUXER 0 +-%define CONFIG_DATA_MUXER 0 +-%define CONFIG_DATA_PROTOCOL 0 +-%define CONFIG_DATASCOPE_FILTER 0 +-%define CONFIG_DAUD_DEMUXER 0 +-%define CONFIG_DAUD_MUXER 0 +-%define CONFIG_DCA_CORE_BSF 0 +-%define CONFIG_DCA_DECODER 0 +-%define CONFIG_DCA_ENCODER 0 +-%define CONFIG_DCA_PARSER 0 +-%define CONFIG_DCSHIFT_FILTER 0 +-%define CONFIG_DCSTR_DEMUXER 0 +-%define CONFIG_DCTDNOIZ_FILTER 0 +-%define CONFIG_DDS_DECODER 0 +-%define CONFIG_DEBAND_FILTER 0 +-%define CONFIG_DEBLOCK_FILTER 0 +-%define CONFIG_DECIMATE_FILTER 0 +-%define CONFIG_DECKLINK_INDEV 0 +-%define CONFIG_DECKLINK_OUTDEV 0 +-%define CONFIG_DECONVOLVE_FILTER 0 +-%define CONFIG_DEDOT_FILTER 0 +-%define CONFIG_DEESSER_FILTER 0 +-%define CONFIG_DEFLATE_FILTER 0 +-%define CONFIG_DEFLICKER_FILTER 0 +-%define CONFIG_DEINTERLACE_QSV_FILTER 0 +-%define CONFIG_DEINTERLACE_VAAPI_FILTER 0 +-%define CONFIG_DEJUDDER_FILTER 0 +-%define CONFIG_DELOGO_FILTER 0 +-%define CONFIG_DEMUXERS 0 +-%define CONFIG_DENOISE_VAAPI_FILTER 0 +-%define CONFIG_DERAIN_FILTER 0 +-%define CONFIG_DESHAKE_FILTER 0 +-%define CONFIG_DESPILL_FILTER 0 +-%define CONFIG_DETELECINE_FILTER 0 +-%define CONFIG_DFA_DECODER 0 +-%define CONFIG_DFA_DEMUXER 0 +-%define CONFIG_DHAV_DEMUXER 0 +-%define CONFIG_DILATION_FILTER 0 +-%define CONFIG_DILATION_OPENCL_FILTER 0 +-%define CONFIG_DIRAC_DECODER 0 +-%define CONFIG_DIRAC_DEMUXER 0 +-%define CONFIG_DIRAC_MUXER 0 +-%define CONFIG_DIRAC_PARSER 0 +-%define CONFIG_DISPLACE_FILTER 0 +-%define CONFIG_DNXHD_DECODER 0 +-%define CONFIG_DNXHD_DEMUXER 0 +-%define CONFIG_DNXHD_ENCODER 0 +-%define CONFIG_DNXHD_MUXER 0 +-%define CONFIG_DNXHD_PARSER 0 +-%define CONFIG_DOLBY_E_DECODER 0 +-%define CONFIG_DOUBLEWEAVE_FILTER 0 +-%define CONFIG_DPX_DECODER 0 +-%define CONFIG_DPX_ENCODER 0 +-%define CONFIG_DPX_PARSER 0 +-%define CONFIG_DRAWBOX_FILTER 0 +-%define CONFIG_DRAWGRAPH_FILTER 0 +-%define CONFIG_DRAWGRID_FILTER 0 +-%define CONFIG_DRAWTEXT_FILTER 0 +-%define CONFIG_DRMETER_FILTER 0 +-%define CONFIG_DSD_LSBF_DECODER 0 +-%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 +-%define CONFIG_DSD_MSBF_DECODER 0 +-%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 +-%define CONFIG_DSF_DEMUXER 0 +-%define CONFIG_DSHOW_INDEV 0 +-%define CONFIG_DSICINAUDIO_DECODER 0 +-%define CONFIG_DSICIN_DEMUXER 0 +-%define CONFIG_DSICINVIDEO_DECODER 0 +-%define CONFIG_DSS_DEMUXER 0 +-%define CONFIG_DSS_SP_DECODER 0 +-%define CONFIG_DST_DECODER 0 +-%define CONFIG_DTS_DEMUXER 0 +-%define CONFIG_DTSHD_DEMUXER 0 +-%define CONFIG_DTS_MUXER 0 +-%define CONFIG_DUMP_EXTRADATA_BSF 0 +-%define CONFIG_DVAUDIO_DECODER 0 +-%define CONFIG_DVAUDIO_PARSER 0 +-%define CONFIG_DVBSUB_DECODER 0 +-%define CONFIG_DVBSUB_DEMUXER 0 +-%define CONFIG_DVBSUB_ENCODER 0 +-%define CONFIG_DVBSUB_PARSER 0 +-%define CONFIG_DVBTXT_DEMUXER 0 +-%define CONFIG_DV_DEMUXER 0 +-%define CONFIG_DVD_NAV_PARSER 0 +-%define CONFIG_DVDSUB_DECODER 0 +-%define CONFIG_DVDSUB_ENCODER 0 +-%define CONFIG_DVDSUB_PARSER 0 +-%define CONFIG_DV_MUXER 0 +-%define CONFIG_DVVIDEO_DECODER 0 +-%define CONFIG_DVVIDEO_ENCODER 0 +-%define CONFIG_DXA_DECODER 0 +-%define CONFIG_DXA_DEMUXER 0 +-%define CONFIG_DXTORY_DECODER 0 +-%define CONFIG_DXV_DECODER 0 +-%define CONFIG_DYNAUDNORM_FILTER 0 +-%define CONFIG_EAC3_AT_DECODER 0 +-%define CONFIG_EAC3_CORE_BSF 0 +-%define CONFIG_EAC3_DECODER 0 +-%define CONFIG_EAC3_DEMUXER 0 +-%define CONFIG_EAC3_ENCODER 0 +-%define CONFIG_EAC3_MUXER 0 +-%define CONFIG_EA_CDATA_DEMUXER 0 +-%define CONFIG_EACMV_DECODER 0 +-%define CONFIG_EA_DEMUXER 0 +-%define CONFIG_EAMAD_DECODER 0 +-%define CONFIG_EARWAX_FILTER 0 +-%define CONFIG_EATGQ_DECODER 0 +-%define CONFIG_EATGV_DECODER 0 +-%define CONFIG_EATQI_DECODER 0 +-%define CONFIG_EBUR128_FILTER 0 +-%define CONFIG_EDGEDETECT_FILTER 0 +-%define CONFIG_EIGHTBPS_DECODER 0 +-%define CONFIG_EIGHTSVX_EXP_DECODER 0 +-%define CONFIG_EIGHTSVX_FIB_DECODER 0 +-%define CONFIG_ELBG_FILTER 0 +-%define CONFIG_ENCODERS 0 +-%define CONFIG_ENTROPY_FILTER 0 +-%define CONFIG_EPAF_DEMUXER 0 +-%define CONFIG_EQ_FILTER 0 +-%define CONFIG_EQUALIZER_FILTER 0 +-%define CONFIG_EROSION_FILTER 0 +-%define CONFIG_EROSION_OPENCL_FILTER 0 +-%define CONFIG_ESCAPE124_DECODER 0 +-%define CONFIG_ESCAPE130_DECODER 0 +-%define CONFIG_EVRC_DECODER 0 +-%define CONFIG_EXR_DECODER 0 +-%define CONFIG_EXTRACT_EXTRADATA_BSF 0 +-%define CONFIG_EXTRACTPLANES_FILTER 0 +-%define CONFIG_EXTRASTEREO_FILTER 0 +-%define CONFIG_F4V_MUXER 0 +-%define CONFIG_FADE_FILTER 0 +-%define CONFIG_FBDEV_INDEV 0 +-%define CONFIG_FBDEV_OUTDEV 0 +-%define CONFIG_FFMETADATA_DEMUXER 0 +-%define CONFIG_FFMETADATA_MUXER 0 +-%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 +-%define CONFIG_FFRTMPHTTP_PROTOCOL 0 +-%define CONFIG_FFTDNOIZ_FILTER 0 +-%define CONFIG_FFTFILT_FILTER 0 +-%define CONFIG_FFV1_DECODER 0 +-%define CONFIG_FFV1_ENCODER 0 +-%define CONFIG_FFVHUFF_DECODER 0 +-%define CONFIG_FFVHUFF_ENCODER 0 +-%define CONFIG_FFWAVESYNTH_DECODER 0 +-%define CONFIG_FIC_DECODER 0 +-%define CONFIG_FIELD_FILTER 0 +-%define CONFIG_FIELDHINT_FILTER 0 +-%define CONFIG_FIELDMATCH_FILTER 0 +-%define CONFIG_FIELDORDER_FILTER 0 +-%define CONFIG_FIFO_FILTER 0 +-%define CONFIG_FIFO_MUXER 0 +-%define CONFIG_FIFO_TEST_MUXER 0 +-%define CONFIG_FILE_PROTOCOL 0 +-%define CONFIG_FILLBORDERS_FILTER 0 +-%define CONFIG_FILMSTRIP_DEMUXER 0 +-%define CONFIG_FILMSTRIP_MUXER 0 +-%define CONFIG_FILTERS 0 +-%define CONFIG_FILTER_UNITS_BSF 0 +-%define CONFIG_FIND_RECT_FILTER 0 +-%define CONFIG_FIREQUALIZER_FILTER 0 +-%define CONFIG_FITS_DECODER 0 +-%define CONFIG_FITS_DEMUXER 0 +-%define CONFIG_FITS_ENCODER 0 +-%define CONFIG_FITS_MUXER 0 +-%define CONFIG_FLAC_DEMUXER 0 +-%define CONFIG_FLAC_ENCODER 0 +-%define CONFIG_FLAC_MUXER 0 +-%define CONFIG_FLAC_PARSER 0 +-%define CONFIG_FLANGER_FILTER 0 +-%define CONFIG_FLASHSV2_DECODER 0 +-%define CONFIG_FLASHSV2_ENCODER 0 +-%define CONFIG_FLASHSV_DECODER 0 +-%define CONFIG_FLASHSV_ENCODER 0 +-%define CONFIG_FLIC_DECODER 0 +-%define CONFIG_FLIC_DEMUXER 0 +-%define CONFIG_FLITE_FILTER 0 +-%define CONFIG_FLOODFILL_FILTER 0 +-%define CONFIG_FLV_DECODER 0 +-%define CONFIG_FLV_DEMUXER 0 +-%define CONFIG_FLV_ENCODER 0 +-%define CONFIG_FLV_MUXER 0 +-%define CONFIG_FMVC_DECODER 0 +-%define CONFIG_FORMAT_FILTER 0 +-%define CONFIG_FOURXM_DECODER 0 +-%define CONFIG_FOURXM_DEMUXER 0 +-%define CONFIG_FPS_FILTER 0 +-%define CONFIG_FRAMECRC_MUXER 0 +-%define CONFIG_FRAMEHASH_MUXER 0 +-%define CONFIG_FRAMEMD5_MUXER 0 +-%define CONFIG_FRAMEPACK_FILTER 0 +-%define CONFIG_FRAMERATE_FILTER 0 +-%define CONFIG_FRAMESTEP_FILTER 0 +-%define CONFIG_FRAME_THREAD_ENCODER 0 +-%define CONFIG_FRAPS_DECODER 0 +-%define CONFIG_FREEZEDETECT_FILTER 0 +-%define CONFIG_FREI0R_FILTER 0 +-%define CONFIG_FREI0R_SRC_FILTER 0 +-%define CONFIG_FRM_DEMUXER 0 +-%define CONFIG_FRWU_DECODER 0 +-%define CONFIG_FSB_DEMUXER 0 +-%define CONFIG_FSPP_FILTER 0 +-%define CONFIG_FTP_PROTOCOL 0 +-%define CONFIG_G2M_DECODER 0 +-%define CONFIG_G722_DEMUXER 0 +-%define CONFIG_G722_MUXER 0 +-%define CONFIG_G723_1_DECODER 0 +-%define CONFIG_G723_1_DEMUXER 0 +-%define CONFIG_G723_1_ENCODER 0 +-%define CONFIG_G723_1_MUXER 0 +-%define CONFIG_G723_1_PARSER 0 +-%define CONFIG_G726_DEMUXER 0 +-%define CONFIG_G726LE_DEMUXER 0 +-%define CONFIG_G726LE_MUXER 0 +-%define CONFIG_G726_MUXER 0 +-%define CONFIG_G729_DECODER 0 +-%define CONFIG_G729_DEMUXER 0 +-%define CONFIG_G729_PARSER 0 +-%define CONFIG_GBLUR_FILTER 0 +-%define CONFIG_GDIGRAB_INDEV 0 +-%define CONFIG_GDV_DECODER 0 +-%define CONFIG_GDV_DEMUXER 0 +-%define CONFIG_GENH_DEMUXER 0 +-%define CONFIG_GEQ_FILTER 0 +-%define CONFIG_GIF_DECODER 0 +-%define CONFIG_GIF_DEMUXER 0 +-%define CONFIG_GIF_ENCODER 0 +-%define CONFIG_GIF_MUXER 0 +-%define CONFIG_GIF_PARSER 0 +-%define CONFIG_GOPHER_PROTOCOL 0 +-%define CONFIG_GRADFUN_FILTER 0 +-%define CONFIG_GRAPHMONITOR_FILTER 0 +-%define CONFIG_GREMLIN_DPCM_DECODER 0 +-%define CONFIG_GREYEDGE_FILTER 0 +-%define CONFIG_GSM_DECODER 0 +-%define CONFIG_GSM_DEMUXER 0 +-%define CONFIG_GSM_MS_AT_DECODER 0 +-%define CONFIG_GSM_MS_DECODER 0 +-%define CONFIG_GSM_MUXER 0 +-%define CONFIG_GSM_PARSER 0 +-%define CONFIG_GXF_DEMUXER 0 +-%define CONFIG_GXF_MUXER 0 +-%define CONFIG_H261_DECODER 0 +-%define CONFIG_H261_DEMUXER 0 +-%define CONFIG_H261_ENCODER 0 +-%define CONFIG_H261_MUXER 0 +-%define CONFIG_H261_PARSER 0 +-%define CONFIG_H263_DECODER 0 +-%define CONFIG_H263_DEMUXER 0 +-%define CONFIG_H263_ENCODER 0 +-%define CONFIG_H263I_DECODER 0 +-%define CONFIG_H263_MUXER 0 +-%define CONFIG_H263_PARSER 0 +-%define CONFIG_H263P_DECODER 0 +-%define CONFIG_H263P_ENCODER 0 +-%define CONFIG_H263_V4L2M2M_DECODER 0 +-%define CONFIG_H263_V4L2M2M_ENCODER 0 +-%define CONFIG_H263_VAAPI_HWACCEL 0 +-%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 +-%define CONFIG_H264_AMF_ENCODER 0 +-%define CONFIG_H264_CRYSTALHD_DECODER 0 +-%define CONFIG_H264_CUVID_DECODER 0 +-%define CONFIG_H264_D3D11VA2_HWACCEL 0 +-%define CONFIG_H264_D3D11VA_HWACCEL 0 +-%define CONFIG_H264_DECODER 0 +-%define CONFIG_H264_DEMUXER 0 +-%define CONFIG_H264_DXVA2_HWACCEL 0 +-%define CONFIG_H264_MEDIACODEC_DECODER 0 +-%define CONFIG_H264_METADATA_BSF 0 +-%define CONFIG_H264_MMAL_DECODER 0 +-%define CONFIG_H264_MP4TOANNEXB_BSF 0 +-%define CONFIG_H264_MUXER 0 +-%define CONFIG_H264_NVDEC_HWACCEL 0 +-%define CONFIG_H264_NVENC_ENCODER 0 +-%define CONFIG_H264_OMX_ENCODER 0 +-%define CONFIG_H264_PARSER 0 +-%define CONFIG_H264_QSV_DECODER 0 +-%define CONFIG_H264_QSV_ENCODER 0 +-%define CONFIG_H264_REDUNDANT_PPS_BSF 0 +-%define CONFIG_H264_RKMPP_DECODER 0 +-%define CONFIG_H264_V4L2M2M_DECODER 0 +-%define CONFIG_H264_V4L2M2M_ENCODER 0 +-%define CONFIG_H264_VAAPI_ENCODER 0 +-%define CONFIG_H264_VAAPI_HWACCEL 0 +-%define CONFIG_H264_VDPAU_HWACCEL 0 +-%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 +-%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 +-%define CONFIG_HAAS_FILTER 0 +-%define CONFIG_HALDCLUT_FILTER 0 +-%define CONFIG_HALDCLUTSRC_FILTER 0 +-%define CONFIG_HAP_DECODER 0 +-%define CONFIG_HAP_ENCODER 0 +-%define CONFIG_HAPQA_EXTRACT_BSF 0 +-%define CONFIG_HASH_MUXER 0 +-%define CONFIG_HCOM_DECODER 0 +-%define CONFIG_HCOM_DEMUXER 0 +-%define CONFIG_HDCD_FILTER 0 +-%define CONFIG_HDS_MUXER 0 +-%define CONFIG_HEADPHONE_FILTER 0 +-%define CONFIG_HEVC_AMF_ENCODER 0 +-%define CONFIG_HEVC_CUVID_DECODER 0 +-%define CONFIG_HEVC_D3D11VA2_HWACCEL 0 +-%define CONFIG_HEVC_D3D11VA_HWACCEL 0 +-%define CONFIG_HEVC_DECODER 0 +-%define CONFIG_HEVC_DEMUXER 0 +-%define CONFIG_HEVC_DXVA2_HWACCEL 0 +-%define CONFIG_HEVC_MEDIACODEC_DECODER 0 +-%define CONFIG_HEVC_METADATA_BSF 0 +-%define CONFIG_HEVC_MP4TOANNEXB_BSF 0 +-%define CONFIG_HEVC_MUXER 0 +-%define CONFIG_HEVC_NVDEC_HWACCEL 0 +-%define CONFIG_HEVC_NVENC_ENCODER 0 +-%define CONFIG_HEVC_PARSER 0 +-%define CONFIG_HEVC_QSV_DECODER 0 +-%define CONFIG_HEVC_QSV_ENCODER 0 +-%define CONFIG_HEVC_RKMPP_DECODER 0 +-%define CONFIG_HEVC_V4L2M2M_DECODER 0 +-%define CONFIG_HEVC_V4L2M2M_ENCODER 0 +-%define CONFIG_HEVC_VAAPI_ENCODER 0 +-%define CONFIG_HEVC_VAAPI_HWACCEL 0 +-%define CONFIG_HEVC_VDPAU_HWACCEL 0 +-%define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 +-%define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 +-%define CONFIG_HFLIP_FILTER 0 +-%define CONFIG_HIGHPASS_FILTER 0 +-%define CONFIG_HIGHSHELF_FILTER 0 +-%define CONFIG_HILBERT_FILTER 0 +-%define CONFIG_HISTEQ_FILTER 0 +-%define CONFIG_HISTOGRAM_FILTER 0 +-%define CONFIG_HLS_DEMUXER 0 +-%define CONFIG_HLS_MUXER 0 +-%define CONFIG_HLS_PROTOCOL 0 +-%define CONFIG_HNM4_VIDEO_DECODER 0 +-%define CONFIG_HNM_DEMUXER 0 +-%define CONFIG_HQDN3D_FILTER 0 +-%define CONFIG_HQ_HQA_DECODER 0 +-%define CONFIG_HQX_DECODER 0 +-%define CONFIG_HQX_FILTER 0 +-%define CONFIG_HSTACK_FILTER 0 +-%define CONFIG_HTTP_PROTOCOL 0 +-%define CONFIG_HTTPPROXY_PROTOCOL 0 +-%define CONFIG_HTTPS_PROTOCOL 0 +-%define CONFIG_HUE_FILTER 0 +-%define CONFIG_HUFFYUV_DECODER 0 +-%define CONFIG_HUFFYUV_ENCODER 0 +-%define CONFIG_HWACCELS 0 +-%define CONFIG_HWDOWNLOAD_FILTER 0 +-%define CONFIG_HWMAP_FILTER 0 +-%define CONFIG_HWUPLOAD_CUDA_FILTER 0 +-%define CONFIG_HWUPLOAD_FILTER 0 +-%define CONFIG_HYMT_DECODER 0 +-%define CONFIG_HYSTERESIS_FILTER 0 +-%define CONFIG_IAC_DECODER 0 +-%define CONFIG_ICECAST_PROTOCOL 0 +-%define CONFIG_ICO_DEMUXER 0 +-%define CONFIG_ICO_MUXER 0 +-%define CONFIG_IDCIN_DECODER 0 +-%define CONFIG_IDCIN_DEMUXER 0 +-%define CONFIG_IDET_FILTER 0 +-%define CONFIG_IDF_DECODER 0 +-%define CONFIG_IDF_DEMUXER 0 +-%define CONFIG_IEC61883_INDEV 0 +-%define CONFIG_IFF_DEMUXER 0 +-%define CONFIG_IFF_ILBM_DECODER 0 +-%define CONFIG_IFV_DEMUXER 0 +-%define CONFIG_ILBC_AT_DECODER 0 +-%define CONFIG_ILBC_AT_ENCODER 0 +-%define CONFIG_ILBC_DECODER 0 +-%define CONFIG_ILBC_DEMUXER 0 +-%define CONFIG_ILBC_MUXER 0 +-%define CONFIG_IL_FILTER 0 +-%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 +-%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 +-%define CONFIG_IMAGE2_DEMUXER 0 +-%define CONFIG_IMAGE2_MUXER 0 +-%define CONFIG_IMAGE2PIPE_DEMUXER 0 +-%define CONFIG_IMAGE2PIPE_MUXER 0 +-%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 +-%define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 +-%define CONFIG_IMC_DECODER 0 +-%define CONFIG_IMM4_DECODER 0 +-%define CONFIG_IMX_DUMP_HEADER_BSF 0 +-%define CONFIG_INDEO2_DECODER 0 +-%define CONFIG_INDEO3_DECODER 0 +-%define CONFIG_INDEO4_DECODER 0 +-%define CONFIG_INDEO5_DECODER 0 +-%define CONFIG_INDEVS 0 +-%define CONFIG_INFLATE_FILTER 0 +-%define CONFIG_INGENIENT_DEMUXER 0 +-%define CONFIG_INTERLACE_FILTER 0 +-%define CONFIG_INTERLEAVE_FILTER 0 +-%define CONFIG_INTERPLAY_ACM_DECODER 0 +-%define CONFIG_INTERPLAY_DPCM_DECODER 0 +-%define CONFIG_INTERPLAY_VIDEO_DECODER 0 +-%define CONFIG_IPMOVIE_DEMUXER 0 +-%define CONFIG_IPOD_MUXER 0 +-%define CONFIG_IRCAM_DEMUXER 0 +-%define CONFIG_IRCAM_MUXER 0 +-%define CONFIG_ISMV_MUXER 0 +-%define CONFIG_ISS_DEMUXER 0 +-%define CONFIG_IV8_DEMUXER 0 +-%define CONFIG_IVF_DEMUXER 0 +-%define CONFIG_IVF_MUXER 0 +-%define CONFIG_IVR_DEMUXER 0 +-%define CONFIG_JACK_INDEV 0 +-%define CONFIG_JACOSUB_DECODER 0 +-%define CONFIG_JACOSUB_DEMUXER 0 +-%define CONFIG_JACOSUB_MUXER 0 +-%define CONFIG_JOIN_FILTER 0 +-%define CONFIG_JPEG2000_DECODER 0 +-%define CONFIG_JPEG2000_ENCODER 0 +-%define CONFIG_JPEGLS_DECODER 0 +-%define CONFIG_JPEGLS_ENCODER 0 +-%define CONFIG_JV_DECODER 0 +-%define CONFIG_JV_DEMUXER 0 +-%define CONFIG_KERNDEINT_FILTER 0 +-%define CONFIG_KGV1_DECODER 0 +-%define CONFIG_KMSGRAB_INDEV 0 +-%define CONFIG_KMVC_DECODER 0 +-%define CONFIG_KUX_DEMUXER 0 +-%define CONFIG_LADSPA_FILTER 0 +-%define CONFIG_LAGARITH_DECODER 0 +-%define CONFIG_LAGFUN_FILTER 0 +-%define CONFIG_LATM_MUXER 0 +-%define CONFIG_LAVFI_INDEV 0 +-%define CONFIG_LENSCORRECTION_FILTER 0 +-%define CONFIG_LENSFUN_FILTER 0 +-%define CONFIG_LIBAOM_AV1_DECODER 0 +-%define CONFIG_LIBAOM_AV1_ENCODER 0 +-%define CONFIG_LIBARIBB24_DECODER 0 +-%define CONFIG_LIBCDIO_INDEV 0 +-%define CONFIG_LIBCELT_DECODER 0 +-%define CONFIG_LIBCODEC2_DECODER 0 +-%define CONFIG_LIBCODEC2_ENCODER 0 +-%define CONFIG_LIBDAV1D_DECODER 0 +-%define CONFIG_LIBDAVS2_DECODER 0 +-%define CONFIG_LIBDC1394_INDEV 0 +-%define CONFIG_LIBFDK_AAC_DECODER 0 +-%define CONFIG_LIBFDK_AAC_ENCODER 0 +-%define CONFIG_LIBGME_DEMUXER 0 +-%define CONFIG_LIBGSM_DECODER 0 +-%define CONFIG_LIBGSM_ENCODER 0 +-%define CONFIG_LIBGSM_MS_DECODER 0 +-%define CONFIG_LIBGSM_MS_ENCODER 0 +-%define CONFIG_LIBILBC_DECODER 0 +-%define CONFIG_LIBILBC_ENCODER 0 +-%define CONFIG_LIBKVAZAAR_ENCODER 0 +-%define CONFIG_LIBMODPLUG_DEMUXER 0 +-%define CONFIG_LIBMP3LAME_ENCODER 0 +-%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 +-%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 +-%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 +-%define CONFIG_LIBOPENH264_DECODER 0 +-%define CONFIG_LIBOPENH264_ENCODER 0 +-%define CONFIG_LIBOPENJPEG_DECODER 0 +-%define CONFIG_LIBOPENJPEG_ENCODER 0 +-%define CONFIG_LIBOPENMPT_DEMUXER 0 +-%define CONFIG_LIBOPUS_DECODER 0 +-%define CONFIG_LIBOPUS_ENCODER 0 +-%define CONFIG_LIBRSVG_DECODER 0 +-%define CONFIG_LIBRTMPE_PROTOCOL 0 +-%define CONFIG_LIBRTMP_PROTOCOL 0 +-%define CONFIG_LIBRTMPS_PROTOCOL 0 +-%define CONFIG_LIBRTMPTE_PROTOCOL 0 +-%define CONFIG_LIBRTMPT_PROTOCOL 0 +-%define CONFIG_LIBSHINE_ENCODER 0 +-%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 +-%define CONFIG_LIBSPEEX_DECODER 0 +-%define CONFIG_LIBSPEEX_ENCODER 0 +-%define CONFIG_LIBSRT_PROTOCOL 0 +-%define CONFIG_LIBSSH_PROTOCOL 0 +-%define CONFIG_LIBTHEORA_ENCODER 0 +-%define CONFIG_LIBTWOLAME_ENCODER 0 +-%define CONFIG_LIBVMAF_FILTER 0 +-%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 +-%define CONFIG_LIBVORBIS_DECODER 0 +-%define CONFIG_LIBVORBIS_ENCODER 0 +-%define CONFIG_LIBVPX_VP8_DECODER 0 +-%define CONFIG_LIBVPX_VP8_ENCODER 0 +-%define CONFIG_LIBVPX_VP9_DECODER 0 +-%define CONFIG_LIBVPX_VP9_ENCODER 0 +-%define CONFIG_LIBWAVPACK_ENCODER 0 +-%define CONFIG_LIBWEBP_ANIM_ENCODER 0 +-%define CONFIG_LIBWEBP_ENCODER 0 +-%define CONFIG_LIBX262_ENCODER 0 +-%define CONFIG_LIBX264_ENCODER 0 +-%define CONFIG_LIBX264RGB_ENCODER 0 +-%define CONFIG_LIBX265_ENCODER 0 +-%define CONFIG_LIBXAVS2_ENCODER 0 +-%define CONFIG_LIBXAVS_ENCODER 0 +-%define CONFIG_LIBXVID_ENCODER 0 +-%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 +-%define CONFIG_LIFE_FILTER 0 +-%define CONFIG_LIMITER_FILTER 0 +-%define CONFIG_LIVE_FLV_DEMUXER 0 +-%define CONFIG_LJPEG_ENCODER 0 +-%define CONFIG_LMLM4_DEMUXER 0 +-%define CONFIG_LOAS_DEMUXER 0 +-%define CONFIG_LOCO_DECODER 0 +-%define CONFIG_LOOP_FILTER 0 +-%define CONFIG_LOUDNORM_FILTER 0 +-%define CONFIG_LOWPASS_FILTER 0 +-%define CONFIG_LOWSHELF_FILTER 0 +-%define CONFIG_LRC_DEMUXER 0 +-%define CONFIG_LRC_MUXER 0 +-%define CONFIG_LSCR_DECODER 0 +-%define CONFIG_LUMAKEY_FILTER 0 +-%define CONFIG_LUT1D_FILTER 0 +-%define CONFIG_LUT2_FILTER 0 +-%define CONFIG_LUT3D_FILTER 0 +-%define CONFIG_LUT_FILTER 0 +-%define CONFIG_LUTRGB_FILTER 0 +-%define CONFIG_LUTYUV_FILTER 0 +-%define CONFIG_LV2_FILTER 0 +-%define CONFIG_LVF_DEMUXER 0 +-%define CONFIG_LXF_DEMUXER 0 +-%define CONFIG_M101_DECODER 0 +-%define CONFIG_M4V_DEMUXER 0 +-%define CONFIG_M4V_MUXER 0 +-%define CONFIG_MACE3_DECODER 0 +-%define CONFIG_MACE6_DECODER 0 +-%define CONFIG_MAGICYUV_DECODER 0 +-%define CONFIG_MAGICYUV_ENCODER 0 +-%define CONFIG_MANDELBROT_FILTER 0 +-%define CONFIG_MASKEDCLAMP_FILTER 0 +-%define CONFIG_MASKEDMERGE_FILTER 0 +-%define CONFIG_MASKFUN_FILTER 0 +-%define CONFIG_MATROSKA_AUDIO_MUXER 0 +-%define CONFIG_MATROSKA_DEMUXER 0 +-%define CONFIG_MATROSKA_MUXER 0 +-%define CONFIG_MCDEINT_FILTER 0 +-%define CONFIG_MCOMPAND_FILTER 0 +-%define CONFIG_MD5_MUXER 0 +-%define CONFIG_MD5_PROTOCOL 0 +-%define CONFIG_MDEC_DECODER 0 +-%define CONFIG_MERGEPLANES_FILTER 0 +-%define CONFIG_MESTIMATE_FILTER 0 +-%define CONFIG_METADATA_FILTER 0 +-%define CONFIG_METASOUND_DECODER 0 +-%define CONFIG_MGSTS_DEMUXER 0 +-%define CONFIG_MICRODVD_DECODER 0 +-%define CONFIG_MICRODVD_DEMUXER 0 +-%define CONFIG_MICRODVD_MUXER 0 +-%define CONFIG_MIDEQUALIZER_FILTER 0 +-%define CONFIG_MIMIC_DECODER 0 +-%define CONFIG_MINTERPOLATE_FILTER 0 +-%define CONFIG_MIX_FILTER 0 +-%define CONFIG_MJPEG_2000_DEMUXER 0 +-%define CONFIG_MJPEG2JPEG_BSF 0 +-%define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 +-%define CONFIG_MJPEGB_DECODER 0 +-%define CONFIG_MJPEG_CUVID_DECODER 0 +-%define CONFIG_MJPEG_DECODER 0 +-%define CONFIG_MJPEG_DEMUXER 0 +-%define CONFIG_MJPEG_ENCODER 0 +-%define CONFIG_MJPEG_MUXER 0 +-%define CONFIG_MJPEG_NVDEC_HWACCEL 0 +-%define CONFIG_MJPEG_PARSER 0 +-%define CONFIG_MJPEG_QSV_ENCODER 0 +-%define CONFIG_MJPEG_VAAPI_ENCODER 0 +-%define CONFIG_MJPEG_VAAPI_HWACCEL 0 +-%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 +-%define CONFIG_MLP_DECODER 0 +-%define CONFIG_MLP_DEMUXER 0 +-%define CONFIG_MLP_ENCODER 0 +-%define CONFIG_MLP_MUXER 0 +-%define CONFIG_MLP_PARSER 0 +-%define CONFIG_MLV_DEMUXER 0 +-%define CONFIG_MM_DEMUXER 0 +-%define CONFIG_MMF_DEMUXER 0 +-%define CONFIG_MMF_MUXER 0 +-%define CONFIG_MMSH_PROTOCOL 0 +-%define CONFIG_MMST_PROTOCOL 0 +-%define CONFIG_MMVIDEO_DECODER 0 +-%define CONFIG_MOTIONPIXELS_DECODER 0 +-%define CONFIG_MOV2TEXTSUB_BSF 0 +-%define CONFIG_MOV_DEMUXER 0 +-%define CONFIG_MOVIE_FILTER 0 +-%define CONFIG_MOV_MUXER 0 +-%define CONFIG_MOVTEXT_DECODER 0 +-%define CONFIG_MOVTEXT_ENCODER 0 +-%define CONFIG_MP1_AT_DECODER 0 +-%define CONFIG_MP1_DECODER 0 +-%define CONFIG_MP1FLOAT_DECODER 0 +-%define CONFIG_MP2_AT_DECODER 0 +-%define CONFIG_MP2_DECODER 0 +-%define CONFIG_MP2_ENCODER 0 +-%define CONFIG_MP2FIXED_ENCODER 0 +-%define CONFIG_MP2FLOAT_DECODER 0 +-%define CONFIG_MP2_MUXER 0 +-%define CONFIG_MP3ADU_DECODER 0 +-%define CONFIG_MP3ADUFLOAT_DECODER 0 +-%define CONFIG_MP3_AT_DECODER 0 +-%define CONFIG_MP3_DEMUXER 0 +-%define CONFIG_MP3FLOAT_DECODER 0 +-%define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 +-%define CONFIG_MP3_MUXER 0 +-%define CONFIG_MP3ON4_DECODER 0 +-%define CONFIG_MP3ON4FLOAT_DECODER 0 +-%define CONFIG_MP4_MUXER 0 +-%define CONFIG_MPC7_DECODER 0 +-%define CONFIG_MPC8_DECODER 0 +-%define CONFIG_MPC8_DEMUXER 0 +-%define CONFIG_MPC_DEMUXER 0 +-%define CONFIG_MPDECIMATE_FILTER 0 +-%define CONFIG_MPEG1_CUVID_DECODER 0 +-%define CONFIG_MPEG1_NVDEC_HWACCEL 0 +-%define CONFIG_MPEG1SYSTEM_MUXER 0 +-%define CONFIG_MPEG1_V4L2M2M_DECODER 0 +-%define CONFIG_MPEG1VCD_MUXER 0 +-%define CONFIG_MPEG1_VDPAU_HWACCEL 0 +-%define CONFIG_MPEG1VIDEO_DECODER 0 +-%define CONFIG_MPEG1VIDEO_ENCODER 0 +-%define CONFIG_MPEG1VIDEO_MUXER 0 +-%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 +-%define CONFIG_MPEG1_XVMC_HWACCEL 0 +-%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 +-%define CONFIG_MPEG2_CUVID_DECODER 0 +-%define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 +-%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 +-%define CONFIG_MPEG2DVD_MUXER 0 +-%define CONFIG_MPEG2_DXVA2_HWACCEL 0 +-%define CONFIG_MPEG2_MEDIACODEC_DECODER 0 +-%define CONFIG_MPEG2_METADATA_BSF 0 +-%define CONFIG_MPEG2_MMAL_DECODER 0 +-%define CONFIG_MPEG2_NVDEC_HWACCEL 0 +-%define CONFIG_MPEG2_QSV_DECODER 0 +-%define CONFIG_MPEG2_QSV_ENCODER 0 +-%define CONFIG_MPEG2SVCD_MUXER 0 +-%define CONFIG_MPEG2_V4L2M2M_DECODER 0 +-%define CONFIG_MPEG2_VAAPI_ENCODER 0 +-%define CONFIG_MPEG2_VAAPI_HWACCEL 0 +-%define CONFIG_MPEG2_VDPAU_HWACCEL 0 +-%define CONFIG_MPEG2VIDEO_DECODER 0 +-%define CONFIG_MPEG2VIDEO_ENCODER 0 +-%define CONFIG_MPEG2VIDEO_MUXER 0 +-%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 +-%define CONFIG_MPEG2VOB_MUXER 0 +-%define CONFIG_MPEG2_XVMC_HWACCEL 0 +-%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 +-%define CONFIG_MPEG4_CUVID_DECODER 0 +-%define CONFIG_MPEG4_DECODER 0 +-%define CONFIG_MPEG4_ENCODER 0 +-%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 +-%define CONFIG_MPEG4_MMAL_DECODER 0 +-%define CONFIG_MPEG4_NVDEC_HWACCEL 0 +-%define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 +-%define CONFIG_MPEG4_V4L2M2M_DECODER 0 +-%define CONFIG_MPEG4_V4L2M2M_ENCODER 0 +-%define CONFIG_MPEG4_VAAPI_HWACCEL 0 +-%define CONFIG_MPEG4_VDPAU_HWACCEL 0 +-%define CONFIG_MPEG4VIDEO_PARSER 0 +-%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 +-%define CONFIG_MPEGAUDIO_PARSER 0 +-%define CONFIG_MPEGPS_DEMUXER 0 +-%define CONFIG_MPEGTS_DEMUXER 0 +-%define CONFIG_MPEGTS_MUXER 0 +-%define CONFIG_MPEGTSRAW_DEMUXER 0 +-%define CONFIG_MPEGVIDEO_DECODER 0 +-%define CONFIG_MPEGVIDEO_DEMUXER 0 +-%define CONFIG_MPEGVIDEO_PARSER 0 +-%define CONFIG_MPJPEG_DEMUXER 0 +-%define CONFIG_MPJPEG_MUXER 0 +-%define CONFIG_MPL2_DECODER 0 +-%define CONFIG_MPL2_DEMUXER 0 +-%define CONFIG_MPSUB_DEMUXER 0 +-%define CONFIG_MPTESTSRC_FILTER 0 +-%define CONFIG_MSA1_DECODER 0 +-%define CONFIG_MSCC_DECODER 0 +-%define CONFIG_MSF_DEMUXER 0 +-%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 +-%define CONFIG_MSMPEG4V1_DECODER 0 +-%define CONFIG_MSMPEG4V2_DECODER 0 +-%define CONFIG_MSMPEG4V2_ENCODER 0 +-%define CONFIG_MSMPEG4V3_DECODER 0 +-%define CONFIG_MSMPEG4V3_ENCODER 0 +-%define CONFIG_MSNWC_TCP_DEMUXER 0 +-%define CONFIG_MSRLE_DECODER 0 +-%define CONFIG_MSS1_DECODER 0 +-%define CONFIG_MSS2_DECODER 0 +-%define CONFIG_MSVIDEO1_DECODER 0 +-%define CONFIG_MSVIDEO1_ENCODER 0 +-%define CONFIG_MSZH_DECODER 0 +-%define CONFIG_MTAF_DEMUXER 0 +-%define CONFIG_MTS2_DECODER 0 +-%define CONFIG_MTV_DEMUXER 0 +-%define CONFIG_MUSX_DEMUXER 0 +-%define CONFIG_MUXERS 0 +-%define CONFIG_MVC1_DECODER 0 +-%define CONFIG_MVC2_DECODER 0 +-%define CONFIG_MV_DEMUXER 0 +-%define CONFIG_MVI_DEMUXER 0 +-%define CONFIG_MWSC_DECODER 0 +-%define CONFIG_MXF_D10_MUXER 0 +-%define CONFIG_MXF_DEMUXER 0 +-%define CONFIG_MXF_MUXER 0 +-%define CONFIG_MXF_OPATOM_MUXER 0 +-%define CONFIG_MXG_DEMUXER 0 +-%define CONFIG_MXPEG_DECODER 0 +-%define CONFIG_NC_DEMUXER 0 +-%define CONFIG_NEGATE_FILTER 0 +-%define CONFIG_NELLYMOSER_DECODER 0 +-%define CONFIG_NELLYMOSER_ENCODER 0 +-%define CONFIG_NISTSPHERE_DEMUXER 0 +-%define CONFIG_NLMEANS_FILTER 0 +-%define CONFIG_NLMEANS_OPENCL_FILTER 0 +-%define CONFIG_NNEDI_FILTER 0 +-%define CONFIG_NOFORMAT_FILTER 0 +-%define CONFIG_NOISE_BSF 0 +-%define CONFIG_NOISE_FILTER 0 +-%define CONFIG_NORMALIZE_FILTER 0 +-%define CONFIG_NSP_DEMUXER 0 +-%define CONFIG_NSV_DEMUXER 0 +-%define CONFIG_NULL_FILTER 0 +-%define CONFIG_NULL_MUXER 0 +-%define CONFIG_NULLSINK_FILTER 0 +-%define CONFIG_NULLSRC_FILTER 0 +-%define CONFIG_NUT_DEMUXER 0 +-%define CONFIG_NUT_MUXER 0 +-%define CONFIG_NUV_DECODER 0 +-%define CONFIG_NUV_DEMUXER 0 +-%define CONFIG_NVENC_ENCODER 0 +-%define CONFIG_NVENC_H264_ENCODER 0 +-%define CONFIG_NVENC_HEVC_ENCODER 0 +-%define CONFIG_OCR_FILTER 0 +-%define CONFIG_OCV_FILTER 0 +-%define CONFIG_OGA_MUXER 0 +-%define CONFIG_OGG_DEMUXER 0 +-%define CONFIG_OGG_MUXER 0 +-%define CONFIG_OGV_MUXER 0 +-%define CONFIG_OMA_DEMUXER 0 +-%define CONFIG_OMA_MUXER 0 +-%define CONFIG_ON2AVC_DECODER 0 +-%define CONFIG_OPENAL_INDEV 0 +-%define CONFIG_OPENCLSRC_FILTER 0 +-%define CONFIG_OPENGL_OUTDEV 0 +-%define CONFIG_OPUS_DECODER 0 +-%define CONFIG_OPUS_ENCODER 0 +-%define CONFIG_OPUS_MUXER 0 +-%define CONFIG_OPUS_PARSER 0 +-%define CONFIG_OSCILLOSCOPE_FILTER 0 +-%define CONFIG_OSS_INDEV 0 +-%define CONFIG_OSS_OUTDEV 0 +-%define CONFIG_OUTDEVS 0 +-%define CONFIG_OVERLAY_FILTER 0 +-%define CONFIG_OVERLAY_OPENCL_FILTER 0 +-%define CONFIG_OVERLAY_QSV_FILTER 0 +-%define CONFIG_OWDENOISE_FILTER 0 +-%define CONFIG_PAD_FILTER 0 +-%define CONFIG_PAF_AUDIO_DECODER 0 +-%define CONFIG_PAF_DEMUXER 0 +-%define CONFIG_PAF_VIDEO_DECODER 0 +-%define CONFIG_PAL100BARS_FILTER 0 +-%define CONFIG_PAL75BARS_FILTER 0 +-%define CONFIG_PALETTEGEN_FILTER 0 +-%define CONFIG_PALETTEUSE_FILTER 0 +-%define CONFIG_PAM_DECODER 0 +-%define CONFIG_PAM_ENCODER 0 +-%define CONFIG_PAN_FILTER 0 +-%define CONFIG_PBM_DECODER 0 +-%define CONFIG_PBM_ENCODER 0 +-%define CONFIG_PCM_ALAW_AT_DECODER 0 +-%define CONFIG_PCM_ALAW_AT_ENCODER 0 +-%define CONFIG_PCM_ALAW_DECODER 0 +-%define CONFIG_PCM_ALAW_DEMUXER 0 +-%define CONFIG_PCM_ALAW_ENCODER 0 +-%define CONFIG_PCM_ALAW_MUXER 0 +-%define CONFIG_PCM_BLURAY_DECODER 0 +-%define CONFIG_PCM_DVD_DECODER 0 +-%define CONFIG_PCM_DVD_ENCODER 0 +-%define CONFIG_PCM_F16LE_DECODER 0 +-%define CONFIG_PCM_F24LE_DECODER 0 +-%define CONFIG_PCM_F32BE_DECODER 0 +-%define CONFIG_PCM_F32BE_DEMUXER 0 +-%define CONFIG_PCM_F32BE_ENCODER 0 +-%define CONFIG_PCM_F32BE_MUXER 0 +-%define CONFIG_PCM_F32LE_DECODER 0 +-%define CONFIG_PCM_F32LE_DEMUXER 0 +-%define CONFIG_PCM_F32LE_ENCODER 0 +-%define CONFIG_PCM_F32LE_MUXER 0 +-%define CONFIG_PCM_F64BE_DECODER 0 +-%define CONFIG_PCM_F64BE_DEMUXER 0 +-%define CONFIG_PCM_F64BE_ENCODER 0 +-%define CONFIG_PCM_F64BE_MUXER 0 +-%define CONFIG_PCM_F64LE_DECODER 0 +-%define CONFIG_PCM_F64LE_DEMUXER 0 +-%define CONFIG_PCM_F64LE_ENCODER 0 +-%define CONFIG_PCM_F64LE_MUXER 0 +-%define CONFIG_PCM_LXF_DECODER 0 +-%define CONFIG_PCM_MULAW_AT_DECODER 0 +-%define CONFIG_PCM_MULAW_AT_ENCODER 0 +-%define CONFIG_PCM_MULAW_DECODER 0 +-%define CONFIG_PCM_MULAW_DEMUXER 0 +-%define CONFIG_PCM_MULAW_ENCODER 0 +-%define CONFIG_PCM_MULAW_MUXER 0 +-%define CONFIG_PCM_S16BE_DECODER 0 +-%define CONFIG_PCM_S16BE_DEMUXER 0 +-%define CONFIG_PCM_S16BE_ENCODER 0 +-%define CONFIG_PCM_S16BE_MUXER 0 +-%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 +-%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 +-%define CONFIG_PCM_S16LE_DECODER 0 +-%define CONFIG_PCM_S16LE_DEMUXER 0 +-%define CONFIG_PCM_S16LE_ENCODER 0 +-%define CONFIG_PCM_S16LE_MUXER 0 +-%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 +-%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 +-%define CONFIG_PCM_S24BE_DECODER 0 +-%define CONFIG_PCM_S24BE_DEMUXER 0 +-%define CONFIG_PCM_S24BE_ENCODER 0 +-%define CONFIG_PCM_S24BE_MUXER 0 +-%define CONFIG_PCM_S24DAUD_DECODER 0 +-%define CONFIG_PCM_S24DAUD_ENCODER 0 +-%define CONFIG_PCM_S24LE_DECODER 0 +-%define CONFIG_PCM_S24LE_DEMUXER 0 +-%define CONFIG_PCM_S24LE_ENCODER 0 +-%define CONFIG_PCM_S24LE_MUXER 0 +-%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 +-%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 +-%define CONFIG_PCM_S32BE_DECODER 0 +-%define CONFIG_PCM_S32BE_DEMUXER 0 +-%define CONFIG_PCM_S32BE_ENCODER 0 +-%define CONFIG_PCM_S32BE_MUXER 0 +-%define CONFIG_PCM_S32LE_DECODER 0 +-%define CONFIG_PCM_S32LE_DEMUXER 0 +-%define CONFIG_PCM_S32LE_ENCODER 0 +-%define CONFIG_PCM_S32LE_MUXER 0 +-%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 +-%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 +-%define CONFIG_PCM_S64BE_DECODER 0 +-%define CONFIG_PCM_S64BE_ENCODER 0 +-%define CONFIG_PCM_S64LE_DECODER 0 +-%define CONFIG_PCM_S64LE_ENCODER 0 +-%define CONFIG_PCM_S8_DECODER 0 +-%define CONFIG_PCM_S8_DEMUXER 0 +-%define CONFIG_PCM_S8_ENCODER 0 +-%define CONFIG_PCM_S8_MUXER 0 +-%define CONFIG_PCM_S8_PLANAR_DECODER 0 +-%define CONFIG_PCM_S8_PLANAR_ENCODER 0 +-%define CONFIG_PCM_U16BE_DECODER 0 +-%define CONFIG_PCM_U16BE_DEMUXER 0 +-%define CONFIG_PCM_U16BE_ENCODER 0 +-%define CONFIG_PCM_U16BE_MUXER 0 +-%define CONFIG_PCM_U16LE_DECODER 0 +-%define CONFIG_PCM_U16LE_DEMUXER 0 +-%define CONFIG_PCM_U16LE_ENCODER 0 +-%define CONFIG_PCM_U16LE_MUXER 0 +-%define CONFIG_PCM_U24BE_DECODER 0 +-%define CONFIG_PCM_U24BE_DEMUXER 0 +-%define CONFIG_PCM_U24BE_ENCODER 0 +-%define CONFIG_PCM_U24BE_MUXER 0 +-%define CONFIG_PCM_U24LE_DECODER 0 +-%define CONFIG_PCM_U24LE_DEMUXER 0 +-%define CONFIG_PCM_U24LE_ENCODER 0 +-%define CONFIG_PCM_U24LE_MUXER 0 +-%define CONFIG_PCM_U32BE_DECODER 0 +-%define CONFIG_PCM_U32BE_DEMUXER 0 +-%define CONFIG_PCM_U32BE_ENCODER 0 +-%define CONFIG_PCM_U32BE_MUXER 0 +-%define CONFIG_PCM_U32LE_DECODER 0 +-%define CONFIG_PCM_U32LE_DEMUXER 0 +-%define CONFIG_PCM_U32LE_ENCODER 0 +-%define CONFIG_PCM_U32LE_MUXER 0 +-%define CONFIG_PCM_U8_DECODER 0 +-%define CONFIG_PCM_U8_DEMUXER 0 +-%define CONFIG_PCM_U8_ENCODER 0 +-%define CONFIG_PCM_U8_MUXER 0 +-%define CONFIG_PCM_VIDC_DECODER 0 +-%define CONFIG_PCM_VIDC_DEMUXER 0 +-%define CONFIG_PCM_VIDC_ENCODER 0 +-%define CONFIG_PCM_VIDC_MUXER 0 +-%define CONFIG_PCM_ZORK_DECODER 0 +-%define CONFIG_PCX_DECODER 0 +-%define CONFIG_PCX_ENCODER 0 +-%define CONFIG_PERMS_FILTER 0 +-%define CONFIG_PERSPECTIVE_FILTER 0 +-%define CONFIG_PGM_DECODER 0 +-%define CONFIG_PGM_ENCODER 0 +-%define CONFIG_PGMYUV_DECODER 0 +-%define CONFIG_PGMYUV_ENCODER 0 +-%define CONFIG_PGSSUB_DECODER 0 +-%define CONFIG_PHASE_FILTER 0 +-%define CONFIG_PICTOR_DECODER 0 +-%define CONFIG_PIPE_PROTOCOL 0 +-%define CONFIG_PIXDESCTEST_FILTER 0 +-%define CONFIG_PIXLET_DECODER 0 +-%define CONFIG_PIXSCOPE_FILTER 0 +-%define CONFIG_PJS_DECODER 0 +-%define CONFIG_PJS_DEMUXER 0 +-%define CONFIG_PMP_DEMUXER 0 +-%define CONFIG_PNG_DECODER 0 +-%define CONFIG_PNG_ENCODER 0 +-%define CONFIG_PNG_PARSER 0 +-%define CONFIG_PNM_PARSER 0 +-%define CONFIG_PP7_FILTER 0 +-%define CONFIG_PP_FILTER 0 +-%define CONFIG_PPM_DECODER 0 +-%define CONFIG_PPM_ENCODER 0 +-%define CONFIG_PREMULTIPLY_FILTER 0 +-%define CONFIG_PREWITT_FILTER 0 +-%define CONFIG_PREWITT_OPENCL_FILTER 0 +-%define CONFIG_PROCAMP_VAAPI_FILTER 0 +-%define CONFIG_PROGRAM_OPENCL_FILTER 0 +-%define CONFIG_PROMPEG_PROTOCOL 0 +-%define CONFIG_PRORES_AW_ENCODER 0 +-%define CONFIG_PRORES_DECODER 0 +-%define CONFIG_PRORES_ENCODER 0 +-%define CONFIG_PRORES_KS_ENCODER 0 +-%define CONFIG_PRORES_METADATA_BSF 0 +-%define CONFIG_PROSUMER_DECODER 0 +-%define CONFIG_PROTOCOLS 0 +-%define CONFIG_PSD_DECODER 0 +-%define CONFIG_PSEUDOCOLOR_FILTER 0 +-%define CONFIG_PSNR_FILTER 0 +-%define CONFIG_PSP_MUXER 0 +-%define CONFIG_PTX_DECODER 0 +-%define CONFIG_PULLUP_FILTER 0 +-%define CONFIG_PULSE_INDEV 0 +-%define CONFIG_PULSE_OUTDEV 0 +-%define CONFIG_PVA_DEMUXER 0 +-%define CONFIG_PVF_DEMUXER 0 +-%define CONFIG_QCELP_DECODER 0 +-%define CONFIG_QCP_DEMUXER 0 +-%define CONFIG_QDM2_AT_DECODER 0 +-%define CONFIG_QDM2_DECODER 0 +-%define CONFIG_QDMC_AT_DECODER 0 +-%define CONFIG_QDMC_DECODER 0 +-%define CONFIG_QDRAW_DECODER 0 +-%define CONFIG_QPEG_DECODER 0 +-%define CONFIG_QP_FILTER 0 +-%define CONFIG_QTRLE_DECODER 0 +-%define CONFIG_QTRLE_ENCODER 0 +-%define CONFIG_R10K_DECODER 0 +-%define CONFIG_R10K_ENCODER 0 +-%define CONFIG_R210_DECODER 0 +-%define CONFIG_R210_ENCODER 0 +-%define CONFIG_R3D_DEMUXER 0 +-%define CONFIG_RA_144_DECODER 0 +-%define CONFIG_RA_144_ENCODER 0 +-%define CONFIG_RA_288_DECODER 0 +-%define CONFIG_RALF_DECODER 0 +-%define CONFIG_RANDOM_FILTER 0 +-%define CONFIG_RASC_DECODER 0 +-%define CONFIG_RAWVIDEO_DECODER 0 +-%define CONFIG_RAWVIDEO_DEMUXER 0 +-%define CONFIG_RAWVIDEO_ENCODER 0 +-%define CONFIG_RAWVIDEO_MUXER 0 +-%define CONFIG_READEIA608_FILTER 0 +-%define CONFIG_READVITC_FILTER 0 +-%define CONFIG_REALTEXT_DECODER 0 +-%define CONFIG_REALTEXT_DEMUXER 0 +-%define CONFIG_REALTIME_FILTER 0 +-%define CONFIG_REDSPARK_DEMUXER 0 +-%define CONFIG_REMAP_FILTER 0 +-%define CONFIG_REMOVE_EXTRADATA_BSF 0 +-%define CONFIG_REMOVEGRAIN_FILTER 0 +-%define CONFIG_REMOVELOGO_FILTER 0 +-%define CONFIG_REPEATFIELDS_FILTER 0 +-%define CONFIG_REPLAYGAIN_FILTER 0 +-%define CONFIG_RESAMPLE_FILTER 0 +-%define CONFIG_REVERSE_FILTER 0 +-%define CONFIG_RGBASHIFT_FILTER 0 +-%define CONFIG_RGBTESTSRC_FILTER 0 +-%define CONFIG_RL2_DECODER 0 +-%define CONFIG_RL2_DEMUXER 0 +-%define CONFIG_RM_DEMUXER 0 +-%define CONFIG_RM_MUXER 0 +-%define CONFIG_ROBERTS_FILTER 0 +-%define CONFIG_ROBERTS_OPENCL_FILTER 0 +-%define CONFIG_ROQ_DECODER 0 +-%define CONFIG_ROQ_DEMUXER 0 +-%define CONFIG_ROQ_DPCM_DECODER 0 +-%define CONFIG_ROQ_DPCM_ENCODER 0 +-%define CONFIG_ROQ_ENCODER 0 +-%define CONFIG_ROQ_MUXER 0 +-%define CONFIG_ROTATE_FILTER 0 +-%define CONFIG_RPL_DEMUXER 0 +-%define CONFIG_RPZA_DECODER 0 +-%define CONFIG_RSCC_DECODER 0 +-%define CONFIG_RSD_DEMUXER 0 +-%define CONFIG_RSO_DEMUXER 0 +-%define CONFIG_RSO_MUXER 0 +-%define CONFIG_RTMPE_PROTOCOL 0 +-%define CONFIG_RTMP_PROTOCOL 0 +-%define CONFIG_RTMPS_PROTOCOL 0 +-%define CONFIG_RTMPTE_PROTOCOL 0 +-%define CONFIG_RTMPT_PROTOCOL 0 +-%define CONFIG_RTMPTS_PROTOCOL 0 +-%define CONFIG_RTP_DEMUXER 0 +-%define CONFIG_RTP_MPEGTS_MUXER 0 +-%define CONFIG_RTP_MUXER 0 +-%define CONFIG_RTP_PROTOCOL 0 +-%define CONFIG_RTSP_DEMUXER 0 +-%define CONFIG_RTSP_MUXER 0 +-%define CONFIG_RUBBERBAND_FILTER 0 +-%define CONFIG_RV10_DECODER 0 +-%define CONFIG_RV10_ENCODER 0 +-%define CONFIG_RV20_DECODER 0 +-%define CONFIG_RV20_ENCODER 0 +-%define CONFIG_RV30_DECODER 0 +-%define CONFIG_RV30_PARSER 0 +-%define CONFIG_RV40_DECODER 0 +-%define CONFIG_RV40_PARSER 0 +-%define CONFIG_S302M_DECODER 0 +-%define CONFIG_S302M_ENCODER 0 +-%define CONFIG_S337M_DEMUXER 0 +-%define CONFIG_SAB_FILTER 0 +-%define CONFIG_SAMI_DECODER 0 +-%define CONFIG_SAMI_DEMUXER 0 +-%define CONFIG_SANM_DECODER 0 +-%define CONFIG_SAP_DEMUXER 0 +-%define CONFIG_SAP_MUXER 0 +-%define CONFIG_SBC_DECODER 0 +-%define CONFIG_SBC_DEMUXER 0 +-%define CONFIG_SBC_ENCODER 0 +-%define CONFIG_SBC_MUXER 0 +-%define CONFIG_SBC_PARSER 0 +-%define CONFIG_SBG_DEMUXER 0 +-%define CONFIG_SCALE2REF_FILTER 0 +-%define CONFIG_SCALE_CUDA_FILTER 0 +-%define CONFIG_SCALE_FILTER 0 +-%define CONFIG_SCALE_NPP_FILTER 0 +-%define CONFIG_SCALE_QSV_FILTER 0 +-%define CONFIG_SCALE_VAAPI_FILTER 0 +-%define CONFIG_SCC_DEMUXER 0 +-%define CONFIG_SCC_MUXER 0 +-%define CONFIG_SCPR_DECODER 0 +-%define CONFIG_SCREENPRESSO_DECODER 0 +-%define CONFIG_SCTP_PROTOCOL 0 +-%define CONFIG_SDL2_OUTDEV 0 +-%define CONFIG_SDP_DEMUXER 0 +-%define CONFIG_SDR2_DEMUXER 0 +-%define CONFIG_SDS_DEMUXER 0 +-%define CONFIG_SDX2_DPCM_DECODER 0 +-%define CONFIG_SDX_DEMUXER 0 +-%define CONFIG_SEGAFILM_DEMUXER 0 +-%define CONFIG_SEGAFILM_MUXER 0 +-%define CONFIG_SEGMENT_MUXER 0 +-%define CONFIG_SELECT_FILTER 0 +-%define CONFIG_SELECTIVECOLOR_FILTER 0 +-%define CONFIG_SENDCMD_FILTER 0 +-%define CONFIG_SEPARATEFIELDS_FILTER 0 +-%define CONFIG_SER_DEMUXER 0 +-%define CONFIG_SETDAR_FILTER 0 +-%define CONFIG_SETFIELD_FILTER 0 +-%define CONFIG_SETPARAMS_FILTER 0 +-%define CONFIG_SETPTS_FILTER 0 +-%define CONFIG_SETRANGE_FILTER 0 +-%define CONFIG_SETSAR_FILTER 0 +-%define CONFIG_SETTB_FILTER 0 +-%define CONFIG_SGI_DECODER 0 +-%define CONFIG_SGI_ENCODER 0 +-%define CONFIG_SGIRLE_DECODER 0 +-%define CONFIG_SHARPNESS_VAAPI_FILTER 0 +-%define CONFIG_SHEERVIDEO_DECODER 0 +-%define CONFIG_SHORTEN_DECODER 0 +-%define CONFIG_SHORTEN_DEMUXER 0 +-%define CONFIG_SHOWCQT_FILTER 0 +-%define CONFIG_SHOWFREQS_FILTER 0 +-%define CONFIG_SHOWINFO_FILTER 0 +-%define CONFIG_SHOWPALETTE_FILTER 0 +-%define CONFIG_SHOWSPATIAL_FILTER 0 +-%define CONFIG_SHOWSPECTRUM_FILTER 0 +-%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 +-%define CONFIG_SHOWVOLUME_FILTER 0 +-%define CONFIG_SHOWWAVES_FILTER 0 +-%define CONFIG_SHOWWAVESPIC_FILTER 0 +-%define CONFIG_SHUFFLEFRAMES_FILTER 0 +-%define CONFIG_SHUFFLEPLANES_FILTER 0 +-%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 +-%define CONFIG_SIDECHAINGATE_FILTER 0 +-%define CONFIG_SIDEDATA_FILTER 0 +-%define CONFIG_SIFF_DEMUXER 0 +-%define CONFIG_SIGNALSTATS_FILTER 0 +-%define CONFIG_SIGNATURE_FILTER 0 +-%define CONFIG_SILENCEDETECT_FILTER 0 +-%define CONFIG_SILENCEREMOVE_FILTER 0 +-%define CONFIG_SINC_FILTER 0 +-%define CONFIG_SINE_FILTER 0 +-%define CONFIG_SINGLEJPEG_MUXER 0 +-%define CONFIG_SIPR_DECODER 0 +-%define CONFIG_SIPR_PARSER 0 +-%define CONFIG_SLN_DEMUXER 0 +-%define CONFIG_SMACKAUD_DECODER 0 +-%define CONFIG_SMACKER_DECODER 0 +-%define CONFIG_SMACKER_DEMUXER 0 +-%define CONFIG_SMARTBLUR_FILTER 0 +-%define CONFIG_SMC_DECODER 0 +-%define CONFIG_SMJPEG_DEMUXER 0 +-%define CONFIG_SMJPEG_MUXER 0 +-%define CONFIG_SMOOTHSTREAMING_MUXER 0 +-%define CONFIG_SMPTEBARS_FILTER 0 +-%define CONFIG_SMPTEHDBARS_FILTER 0 +-%define CONFIG_SMUSH_DEMUXER 0 +-%define CONFIG_SMVJPEG_DECODER 0 +-%define CONFIG_SNDIO_INDEV 0 +-%define CONFIG_SNDIO_OUTDEV 0 +-%define CONFIG_SNOW_DECODER 0 +-%define CONFIG_SNOW_ENCODER 0 +-%define CONFIG_SOBEL_FILTER 0 +-%define CONFIG_SOBEL_OPENCL_FILTER 0 +-%define CONFIG_SOFALIZER_FILTER 0 +-%define CONFIG_SOL_DEMUXER 0 +-%define CONFIG_SOL_DPCM_DECODER 0 +-%define CONFIG_SONIC_DECODER 0 +-%define CONFIG_SONIC_ENCODER 0 +-%define CONFIG_SONIC_LS_ENCODER 0 +-%define CONFIG_SOX_DEMUXER 0 +-%define CONFIG_SOX_MUXER 0 +-%define CONFIG_SP5X_DECODER 0 +-%define CONFIG_SPDIF_DEMUXER 0 +-%define CONFIG_SPDIF_MUXER 0 +-%define CONFIG_SPECTRUMSYNTH_FILTER 0 +-%define CONFIG_SPEEDHQ_DECODER 0 +-%define CONFIG_SPLIT_FILTER 0 +-%define CONFIG_SPP_FILTER 0 +-%define CONFIG_SPX_MUXER 0 +-%define CONFIG_SR_FILTER 0 +-%define CONFIG_SRGC_DECODER 0 +-%define CONFIG_SRT_DECODER 0 +-%define CONFIG_SRT_DEMUXER 0 +-%define CONFIG_SRT_ENCODER 0 +-%define CONFIG_SRT_MUXER 0 +-%define CONFIG_SRTP_PROTOCOL 0 +-%define CONFIG_SSA_DECODER 0 +-%define CONFIG_SSA_ENCODER 0 +-%define CONFIG_SSIM_FILTER 0 +-%define CONFIG_STEREO3D_FILTER 0 +-%define CONFIG_STEREOTOOLS_FILTER 0 +-%define CONFIG_STEREOWIDEN_FILTER 0 +-%define CONFIG_STL_DECODER 0 +-%define CONFIG_STL_DEMUXER 0 +-%define CONFIG_STR_DEMUXER 0 +-%define CONFIG_STREAM_SEGMENT_MUXER 0 +-%define CONFIG_STREAMSELECT_FILTER 0 +-%define CONFIG_SUBFILE_PROTOCOL 0 +-%define CONFIG_SUBRIP_DECODER 0 +-%define CONFIG_SUBRIP_ENCODER 0 +-%define CONFIG_SUBTITLES_FILTER 0 +-%define CONFIG_SUBVIEWER1_DECODER 0 +-%define CONFIG_SUBVIEWER1_DEMUXER 0 +-%define CONFIG_SUBVIEWER_DECODER 0 +-%define CONFIG_SUBVIEWER_DEMUXER 0 +-%define CONFIG_SUNRAST_DECODER 0 +-%define CONFIG_SUNRAST_ENCODER 0 +-%define CONFIG_SUP_DEMUXER 0 +-%define CONFIG_SUPER2XSAI_FILTER 0 +-%define CONFIG_SUPEREQUALIZER_FILTER 0 +-%define CONFIG_SUP_MUXER 0 +-%define CONFIG_SURROUND_FILTER 0 +-%define CONFIG_SVAG_DEMUXER 0 +-%define CONFIG_SVQ1_DECODER 0 +-%define CONFIG_SVQ1_ENCODER 0 +-%define CONFIG_SVQ3_DECODER 0 +-%define CONFIG_SWAPRECT_FILTER 0 +-%define CONFIG_SWAPUV_FILTER 0 +-%define CONFIG_SWF_DEMUXER 0 +-%define CONFIG_SWF_MUXER 0 +-%define CONFIG_TAK_DECODER 0 +-%define CONFIG_TAK_DEMUXER 0 +-%define CONFIG_TAK_PARSER 0 +-%define CONFIG_TARGA_DECODER 0 +-%define CONFIG_TARGA_ENCODER 0 +-%define CONFIG_TARGA_Y216_DECODER 0 +-%define CONFIG_TBLEND_FILTER 0 +-%define CONFIG_TCP_PROTOCOL 0 +-%define CONFIG_TDSC_DECODER 0 +-%define CONFIG_TEDCAPTIONS_DEMUXER 0 +-%define CONFIG_TEE_MUXER 0 +-%define CONFIG_TEE_PROTOCOL 0 +-%define CONFIG_TELECINE_FILTER 0 +-%define CONFIG_TESTSRC2_FILTER 0 +-%define CONFIG_TESTSRC_FILTER 0 +-%define CONFIG_TEXT2MOVSUB_BSF 0 +-%define CONFIG_TEXT_DECODER 0 +-%define CONFIG_TEXT_ENCODER 0 +-%define CONFIG_TG2_MUXER 0 +-%define CONFIG_TGP_MUXER 0 +-%define CONFIG_THEORA_DECODER 0 +-%define CONFIG_THP_DECODER 0 +-%define CONFIG_THP_DEMUXER 0 +-%define CONFIG_THREEDOSTR_DEMUXER 0 +-%define CONFIG_THRESHOLD_FILTER 0 +-%define CONFIG_THUMBNAIL_CUDA_FILTER 0 +-%define CONFIG_THUMBNAIL_FILTER 0 +-%define CONFIG_TIERTEXSEQ_DEMUXER 0 +-%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 +-%define CONFIG_TIFF_DECODER 0 +-%define CONFIG_TIFF_ENCODER 0 +-%define CONFIG_TILE_FILTER 0 +-%define CONFIG_TINTERLACE_FILTER 0 +-%define CONFIG_TLS_PROTOCOL 0 +-%define CONFIG_TLUT2_FILTER 0 +-%define CONFIG_TMIX_FILTER 0 +-%define CONFIG_TMV_DECODER 0 +-%define CONFIG_TMV_DEMUXER 0 +-%define CONFIG_TONEMAP_FILTER 0 +-%define CONFIG_TONEMAP_OPENCL_FILTER 0 +-%define CONFIG_TPAD_FILTER 0 +-%define CONFIG_TRACE_HEADERS_BSF 0 +-%define CONFIG_TRANSPOSE_FILTER 0 +-%define CONFIG_TRANSPOSE_NPP_FILTER 0 +-%define CONFIG_TRANSPOSE_OPENCL_FILTER 0 +-%define CONFIG_TRANSPOSE_VAAPI_FILTER 0 +-%define CONFIG_TREBLE_FILTER 0 +-%define CONFIG_TREMOLO_FILTER 0 +-%define CONFIG_TRIM_FILTER 0 +-%define CONFIG_TRUEHD_CORE_BSF 0 +-%define CONFIG_TRUEHD_DECODER 0 +-%define CONFIG_TRUEHD_DEMUXER 0 +-%define CONFIG_TRUEHD_ENCODER 0 +-%define CONFIG_TRUEHD_MUXER 0 +-%define CONFIG_TRUEMOTION1_DECODER 0 +-%define CONFIG_TRUEMOTION2_DECODER 0 +-%define CONFIG_TRUEMOTION2RT_DECODER 0 +-%define CONFIG_TRUESPEECH_DECODER 0 +-%define CONFIG_TSCC2_DECODER 0 +-%define CONFIG_TSCC_DECODER 0 +-%define CONFIG_TTA_DECODER 0 +-%define CONFIG_TTA_DEMUXER 0 +-%define CONFIG_TTA_ENCODER 0 +-%define CONFIG_TTA_MUXER 0 +-%define CONFIG_TTY_DEMUXER 0 +-%define CONFIG_TWINVQ_DECODER 0 +-%define CONFIG_TXD_DECODER 0 +-%define CONFIG_TXD_DEMUXER 0 +-%define CONFIG_TY_DEMUXER 0 +-%define CONFIG_UDPLITE_PROTOCOL 0 +-%define CONFIG_UDP_PROTOCOL 0 +-%define CONFIG_ULTI_DECODER 0 +-%define CONFIG_UNCODEDFRAMECRC_MUXER 0 +-%define CONFIG_UNIX_PROTOCOL 0 +-%define CONFIG_UNPREMULTIPLY_FILTER 0 +-%define CONFIG_UNSHARP_FILTER 0 +-%define CONFIG_UNSHARP_OPENCL_FILTER 0 +-%define CONFIG_USPP_FILTER 0 +-%define CONFIG_UTVIDEO_DECODER 0 +-%define CONFIG_UTVIDEO_ENCODER 0 +-%define CONFIG_V210_DECODER 0 +-%define CONFIG_V210_DEMUXER 0 +-%define CONFIG_V210_ENCODER 0 +-%define CONFIG_V210X_DECODER 0 +-%define CONFIG_V210X_DEMUXER 0 +-%define CONFIG_V308_DECODER 0 +-%define CONFIG_V308_ENCODER 0 +-%define CONFIG_V408_DECODER 0 +-%define CONFIG_V408_ENCODER 0 +-%define CONFIG_V410_DECODER 0 +-%define CONFIG_V410_ENCODER 0 +-%define CONFIG_V4L2_INDEV 0 +-%define CONFIG_V4L2_OUTDEV 0 +-%define CONFIG_VAG_DEMUXER 0 +-%define CONFIG_VAGUEDENOISER_FILTER 0 +-%define CONFIG_VAPOURSYNTH_DEMUXER 0 +-%define CONFIG_VB_DECODER 0 +-%define CONFIG_VBLE_DECODER 0 +-%define CONFIG_VC1_CRYSTALHD_DECODER 0 +-%define CONFIG_VC1_CUVID_DECODER 0 +-%define CONFIG_VC1_D3D11VA2_HWACCEL 0 +-%define CONFIG_VC1_D3D11VA_HWACCEL 0 +-%define CONFIG_VC1_DECODER 0 +-%define CONFIG_VC1_DEMUXER 0 +-%define CONFIG_VC1_DXVA2_HWACCEL 0 +-%define CONFIG_VC1IMAGE_DECODER 0 +-%define CONFIG_VC1_MMAL_DECODER 0 +-%define CONFIG_VC1_MUXER 0 +-%define CONFIG_VC1_NVDEC_HWACCEL 0 +-%define CONFIG_VC1_PARSER 0 +-%define CONFIG_VC1_QSV_DECODER 0 +-%define CONFIG_VC1T_DEMUXER 0 +-%define CONFIG_VC1T_MUXER 0 +-%define CONFIG_VC1_V4L2M2M_DECODER 0 +-%define CONFIG_VC1_VAAPI_HWACCEL 0 +-%define CONFIG_VC1_VDPAU_HWACCEL 0 +-%define CONFIG_VC2_ENCODER 0 +-%define CONFIG_VCR1_DECODER 0 +-%define CONFIG_VECTORSCOPE_FILTER 0 +-%define CONFIG_VFLIP_FILTER 0 +-%define CONFIG_VFRDET_FILTER 0 +-%define CONFIG_VFWCAP_INDEV 0 +-%define CONFIG_VIBRANCE_FILTER 0 +-%define CONFIG_VIBRATO_FILTER 0 +-%define CONFIG_VIDSTABDETECT_FILTER 0 +-%define CONFIG_VIDSTABTRANSFORM_FILTER 0 +-%define CONFIG_VIGNETTE_FILTER 0 +-%define CONFIG_VIVIDAS_DEMUXER 0 +-%define CONFIG_VIVO_DEMUXER 0 +-%define CONFIG_VMAFMOTION_FILTER 0 +-%define CONFIG_VMDAUDIO_DECODER 0 +-%define CONFIG_VMD_DEMUXER 0 +-%define CONFIG_VMDVIDEO_DECODER 0 +-%define CONFIG_VMNC_DECODER 0 +-%define CONFIG_VOBSUB_DEMUXER 0 +-%define CONFIG_VOC_DEMUXER 0 +-%define CONFIG_VOC_MUXER 0 +-%define CONFIG_VOLUMEDETECT_FILTER 0 +-%define CONFIG_VOLUME_FILTER 0 +-%define CONFIG_VORBIS_DECODER 0 +-%define CONFIG_VORBIS_ENCODER 0 +-%define CONFIG_VORBIS_PARSER 0 +-%define CONFIG_VP3_DECODER 0 +-%define CONFIG_VP3_PARSER 0 +-%define CONFIG_VP4_DECODER 0 +-%define CONFIG_VP5_DECODER 0 +-%define CONFIG_VP6A_DECODER 0 +-%define CONFIG_VP6_DECODER 0 +-%define CONFIG_VP6F_DECODER 0 +-%define CONFIG_VP7_DECODER 0 +-%define CONFIG_VP8_CUVID_DECODER 0 +-%define CONFIG_VP8_MEDIACODEC_DECODER 0 +-%define CONFIG_VP8_NVDEC_HWACCEL 0 +-%define CONFIG_VP8_QSV_DECODER 0 +-%define CONFIG_VP8_RKMPP_DECODER 0 +-%define CONFIG_VP8_V4L2M2M_DECODER 0 +-%define CONFIG_VP8_V4L2M2M_ENCODER 0 +-%define CONFIG_VP8_VAAPI_ENCODER 0 +-%define CONFIG_VP8_VAAPI_HWACCEL 0 +-%define CONFIG_VP9_CUVID_DECODER 0 +-%define CONFIG_VP9_D3D11VA2_HWACCEL 0 +-%define CONFIG_VP9_D3D11VA_HWACCEL 0 +-%define CONFIG_VP9_DXVA2_HWACCEL 0 +-%define CONFIG_VP9_MEDIACODEC_DECODER 0 +-%define CONFIG_VP9_METADATA_BSF 0 +-%define CONFIG_VP9_NVDEC_HWACCEL 0 +-%define CONFIG_VP9_RAW_REORDER_BSF 0 +-%define CONFIG_VP9_RKMPP_DECODER 0 +-%define CONFIG_VP9_SUPERFRAME_BSF 0 +-%define CONFIG_VP9_V4L2M2M_DECODER 0 +-%define CONFIG_VP9_VAAPI_ENCODER 0 +-%define CONFIG_VP9_VAAPI_HWACCEL 0 +-%define CONFIG_VP9_VDPAU_HWACCEL 0 +-%define CONFIG_VPK_DEMUXER 0 +-%define CONFIG_VPLAYER_DECODER 0 +-%define CONFIG_VPLAYER_DEMUXER 0 +-%define CONFIG_VPP_QSV_FILTER 0 +-%define CONFIG_VQA_DECODER 0 +-%define CONFIG_VQF_DEMUXER 0 +-%define CONFIG_VSTACK_FILTER 0 +-%define CONFIG_W3FDIF_FILTER 0 +-%define CONFIG_W64_DEMUXER 0 +-%define CONFIG_W64_MUXER 0 +-%define CONFIG_WAV_DEMUXER 0 +-%define CONFIG_WAVEFORM_FILTER 0 +-%define CONFIG_WAV_MUXER 0 +-%define CONFIG_WAVPACK_DECODER 0 +-%define CONFIG_WAVPACK_ENCODER 0 +-%define CONFIG_WC3_DEMUXER 0 +-%define CONFIG_WCMV_DECODER 0 +-%define CONFIG_WEAVE_FILTER 0 +-%define CONFIG_WEBM_CHUNK_MUXER 0 +-%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 +-%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 +-%define CONFIG_WEBM_MUXER 0 +-%define CONFIG_WEBP_DECODER 0 +-%define CONFIG_WEBP_MUXER 0 +-%define CONFIG_WEBVTT_DECODER 0 +-%define CONFIG_WEBVTT_DEMUXER 0 +-%define CONFIG_WEBVTT_ENCODER 0 +-%define CONFIG_WEBVTT_MUXER 0 +-%define CONFIG_WMALOSSLESS_DECODER 0 +-%define CONFIG_WMAPRO_DECODER 0 +-%define CONFIG_WMAV1_DECODER 0 +-%define CONFIG_WMAV1_ENCODER 0 +-%define CONFIG_WMAV2_DECODER 0 +-%define CONFIG_WMAV2_ENCODER 0 +-%define CONFIG_WMAVOICE_DECODER 0 +-%define CONFIG_WMV1_DECODER 0 +-%define CONFIG_WMV1_ENCODER 0 +-%define CONFIG_WMV2_DECODER 0 +-%define CONFIG_WMV2_ENCODER 0 +-%define CONFIG_WMV3_CRYSTALHD_DECODER 0 +-%define CONFIG_WMV3_D3D11VA2_HWACCEL 0 +-%define CONFIG_WMV3_D3D11VA_HWACCEL 0 +-%define CONFIG_WMV3_DECODER 0 +-%define CONFIG_WMV3_DXVA2_HWACCEL 0 +-%define CONFIG_WMV3IMAGE_DECODER 0 +-%define CONFIG_WMV3_NVDEC_HWACCEL 0 +-%define CONFIG_WMV3_VAAPI_HWACCEL 0 +-%define CONFIG_WMV3_VDPAU_HWACCEL 0 +-%define CONFIG_WNV1_DECODER 0 +-%define CONFIG_WRAPPED_AVFRAME_DECODER 0 +-%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 +-%define CONFIG_WSAUD_DEMUXER 0 +-%define CONFIG_WSD_DEMUXER 0 +-%define CONFIG_WS_SND1_DECODER 0 +-%define CONFIG_WSVQA_DEMUXER 0 +-%define CONFIG_WTV_DEMUXER 0 +-%define CONFIG_WTV_MUXER 0 +-%define CONFIG_WV_DEMUXER 0 +-%define CONFIG_WVE_DEMUXER 0 +-%define CONFIG_WV_MUXER 0 +-%define CONFIG_XA_DEMUXER 0 +-%define CONFIG_XAN_DPCM_DECODER 0 +-%define CONFIG_XAN_WC3_DECODER 0 +-%define CONFIG_XAN_WC4_DECODER 0 +-%define CONFIG_XBIN_DECODER 0 +-%define CONFIG_XBIN_DEMUXER 0 +-%define CONFIG_XBM_DECODER 0 +-%define CONFIG_XBM_ENCODER 0 +-%define CONFIG_XBR_FILTER 0 +-%define CONFIG_XCBGRAB_INDEV 0 +-%define CONFIG_XFACE_DECODER 0 +-%define CONFIG_XFACE_ENCODER 0 +-%define CONFIG_XL_DECODER 0 +-%define CONFIG_XMA1_DECODER 0 +-%define CONFIG_XMA2_DECODER 0 +-%define CONFIG_XMA_PARSER 0 +-%define CONFIG_XMEDIAN_FILTER 0 +-%define CONFIG_XMV_DEMUXER 0 +-%define CONFIG_XPM_DECODER 0 +-%define CONFIG_XSTACK_FILTER 0 +-%define CONFIG_XSUB_DECODER 0 +-%define CONFIG_XSUB_ENCODER 0 +-%define CONFIG_XVAG_DEMUXER 0 +-%define CONFIG_XV_OUTDEV 0 +-%define CONFIG_XWD_DECODER 0 +-%define CONFIG_XWD_ENCODER 0 +-%define CONFIG_XWMA_DEMUXER 0 +-%define CONFIG_Y41P_DECODER 0 +-%define CONFIG_Y41P_ENCODER 0 +-%define CONFIG_YADIF_CUDA_FILTER 0 +-%define CONFIG_YADIF_FILTER 0 +-%define CONFIG_YLC_DECODER 0 +-%define CONFIG_YOP_DECODER 0 +-%define CONFIG_YOP_DEMUXER 0 +-%define CONFIG_YUV4_DECODER 0 +-%define CONFIG_YUV4_ENCODER 0 +-%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 +-%define CONFIG_YUV4MPEGPIPE_MUXER 0 +-%define CONFIG_YUVTESTSRC_FILTER 0 +-%define CONFIG_ZERO12V_DECODER 0 +-%define CONFIG_ZEROCODEC_DECODER 0 +-%define CONFIG_ZLIB_DECODER 0 +-%define CONFIG_ZLIB_ENCODER 0 +-%define CONFIG_ZMBV_DECODER 0 +-%define CONFIG_ZMBV_ENCODER 0 +-%define CONFIG_ZMQ_FILTER 0 +-%define CONFIG_ZOOMPAN_FILTER 0 +-%define CONFIG_ZSCALE_FILTER 0 +diff -Naur a/media/ffvpx/defaults_disabled.h b/media/ffvpx/defaults_disabled.h +--- a/media/ffvpx/defaults_disabled.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/defaults_disabled.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,1837 +0,0 @@ +-#define CONFIG_A64MULTI5_ENCODER 0 +-#define CONFIG_A64MULTI_ENCODER 0 +-#define CONFIG_A64_MUXER 0 +-#define CONFIG_AAC_ADTSTOASC_BSF 0 +-#define CONFIG_AAC_AT_DECODER 0 +-#define CONFIG_AAC_AT_ENCODER 0 +-#define CONFIG_AAC_DECODER 0 +-#define CONFIG_AAC_DEMUXER 0 +-#define CONFIG_AAC_ENCODER 0 +-#define CONFIG_AAC_FIXED_DECODER 0 +-#define CONFIG_AAC_LATM_DECODER 0 +-#define CONFIG_AAC_LATM_PARSER 0 +-#define CONFIG_AAC_PARSER 0 +-#define CONFIG_AA_DEMUXER 0 +-#define CONFIG_AASC_DECODER 0 +-#define CONFIG_ABENCH_FILTER 0 +-#define CONFIG_ABITSCOPE_FILTER 0 +-#define CONFIG_AC3_AT_DECODER 0 +-#define CONFIG_AC3_DECODER 0 +-#define CONFIG_AC3_DEMUXER 0 +-#define CONFIG_AC3_ENCODER 0 +-#define CONFIG_AC3_FIXED_DECODER 0 +-#define CONFIG_AC3_FIXED_ENCODER 0 +-#define CONFIG_AC3_MUXER 0 +-#define CONFIG_AC3_PARSER 0 +-#define CONFIG_ACM_DEMUXER 0 +-#define CONFIG_ACOMPRESSOR_FILTER 0 +-#define CONFIG_ACONTRAST_FILTER 0 +-#define CONFIG_ACOPY_FILTER 0 +-#define CONFIG_ACROSSFADE_FILTER 0 +-#define CONFIG_ACROSSOVER_FILTER 0 +-#define CONFIG_ACRUSHER_FILTER 0 +-#define CONFIG_ACT_DEMUXER 0 +-#define CONFIG_ACUE_FILTER 0 +-#define CONFIG_ADECLICK_FILTER 0 +-#define CONFIG_ADECLIP_FILTER 0 +-#define CONFIG_ADELAY_FILTER 0 +-#define CONFIG_ADERIVATIVE_FILTER 0 +-#define CONFIG_ADF_DEMUXER 0 +-#define CONFIG_ADPCM_4XM_DECODER 0 +-#define CONFIG_ADPCM_ADX_DECODER 0 +-#define CONFIG_ADPCM_ADX_ENCODER 0 +-#define CONFIG_ADPCM_AFC_DECODER 0 +-#define CONFIG_ADPCM_AGM_DECODER 0 +-#define CONFIG_ADPCM_AICA_DECODER 0 +-#define CONFIG_ADPCM_CT_DECODER 0 +-#define CONFIG_ADPCM_DTK_DECODER 0 +-#define CONFIG_ADPCM_EA_DECODER 0 +-#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 +-#define CONFIG_ADPCM_EA_R1_DECODER 0 +-#define CONFIG_ADPCM_EA_R2_DECODER 0 +-#define CONFIG_ADPCM_EA_R3_DECODER 0 +-#define CONFIG_ADPCM_EA_XAS_DECODER 0 +-#define CONFIG_ADPCM_G722_DECODER 0 +-#define CONFIG_ADPCM_G722_ENCODER 0 +-#define CONFIG_ADPCM_G726_DECODER 0 +-#define CONFIG_ADPCM_G726_ENCODER 0 +-#define CONFIG_ADPCM_G726LE_DECODER 0 +-#define CONFIG_ADPCM_G726LE_ENCODER 0 +-#define CONFIG_ADPCM_IMA_AMV_DECODER 0 +-#define CONFIG_ADPCM_IMA_APC_DECODER 0 +-#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 +-#define CONFIG_ADPCM_IMA_DK3_DECODER 0 +-#define CONFIG_ADPCM_IMA_DK4_DECODER 0 +-#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 +-#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 +-#define CONFIG_ADPCM_IMA_ISS_DECODER 0 +-#define CONFIG_ADPCM_IMA_OKI_DECODER 0 +-#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 +-#define CONFIG_ADPCM_IMA_QT_DECODER 0 +-#define CONFIG_ADPCM_IMA_QT_ENCODER 0 +-#define CONFIG_ADPCM_IMA_RAD_DECODER 0 +-#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 +-#define CONFIG_ADPCM_IMA_WAV_DECODER 0 +-#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 +-#define CONFIG_ADPCM_IMA_WS_DECODER 0 +-#define CONFIG_ADPCM_MS_DECODER 0 +-#define CONFIG_ADPCM_MS_ENCODER 0 +-#define CONFIG_ADPCM_MTAF_DECODER 0 +-#define CONFIG_ADPCM_PSX_DECODER 0 +-#define CONFIG_ADPCM_SBPRO_2_DECODER 0 +-#define CONFIG_ADPCM_SBPRO_3_DECODER 0 +-#define CONFIG_ADPCM_SBPRO_4_DECODER 0 +-#define CONFIG_ADPCM_SWF_DECODER 0 +-#define CONFIG_ADPCM_SWF_ENCODER 0 +-#define CONFIG_ADPCM_THP_DECODER 0 +-#define CONFIG_ADPCM_THP_LE_DECODER 0 +-#define CONFIG_ADPCM_VIMA_DECODER 0 +-#define CONFIG_ADPCM_XA_DECODER 0 +-#define CONFIG_ADPCM_YAMAHA_DECODER 0 +-#define CONFIG_ADPCM_YAMAHA_ENCODER 0 +-#define CONFIG_ADP_DEMUXER 0 +-#define CONFIG_ADRAWGRAPH_FILTER 0 +-#define CONFIG_ADS_DEMUXER 0 +-#define CONFIG_ADTS_MUXER 0 +-#define CONFIG_ADX_DEMUXER 0 +-#define CONFIG_ADX_MUXER 0 +-#define CONFIG_ADX_PARSER 0 +-#define CONFIG_AEA_DEMUXER 0 +-#define CONFIG_AECHO_FILTER 0 +-#define CONFIG_AEMPHASIS_FILTER 0 +-#define CONFIG_AEVAL_FILTER 0 +-#define CONFIG_AEVALSRC_FILTER 0 +-#define CONFIG_AFADE_FILTER 0 +-#define CONFIG_AFC_DEMUXER 0 +-#define CONFIG_AFFTDN_FILTER 0 +-#define CONFIG_AFFTFILT_FILTER 0 +-#define CONFIG_AFIFO_FILTER 0 +-#define CONFIG_AFIR_FILTER 0 +-#define CONFIG_AFORMAT_FILTER 0 +-#define CONFIG_AGATE_FILTER 0 +-#define CONFIG_AGM_DECODER 0 +-#define CONFIG_AGRAPHMONITOR_FILTER 0 +-#define CONFIG_AHISTOGRAM_FILTER 0 +-#define CONFIG_AIC_DECODER 0 +-#define CONFIG_AIFF_DEMUXER 0 +-#define CONFIG_AIFF_MUXER 0 +-#define CONFIG_AIIR_FILTER 0 +-#define CONFIG_AINTEGRAL_FILTER 0 +-#define CONFIG_AINTERLEAVE_FILTER 0 +-#define CONFIG_AIX_DEMUXER 0 +-#define CONFIG_ALAC_AT_DECODER 0 +-#define CONFIG_ALAC_AT_ENCODER 0 +-#define CONFIG_ALAC_DECODER 0 +-#define CONFIG_ALAC_ENCODER 0 +-#define CONFIG_ALIAS_PIX_DECODER 0 +-#define CONFIG_ALIAS_PIX_ENCODER 0 +-#define CONFIG_ALIMITER_FILTER 0 +-#define CONFIG_ALLPASS_FILTER 0 +-#define CONFIG_ALLRGB_FILTER 0 +-#define CONFIG_ALLYUV_FILTER 0 +-#define CONFIG_ALOOP_FILTER 0 +-#define CONFIG_ALPHAEXTRACT_FILTER 0 +-#define CONFIG_ALPHAMERGE_FILTER 0 +-#define CONFIG_ALSA_INDEV 0 +-#define CONFIG_ALSA_OUTDEV 0 +-#define CONFIG_ALS_DECODER 0 +-#define CONFIG_AMERGE_FILTER 0 +-#define CONFIG_AMETADATA_FILTER 0 +-#define CONFIG_AMIX_FILTER 0 +-#define CONFIG_AMOVIE_FILTER 0 +-#define CONFIG_AMPLIFY_FILTER 0 +-#define CONFIG_AMR_DEMUXER 0 +-#define CONFIG_AMR_MUXER 0 +-#define CONFIG_AMR_NB_AT_DECODER 0 +-#define CONFIG_AMRNB_DECODER 0 +-#define CONFIG_AMRNB_DEMUXER 0 +-#define CONFIG_AMRWB_DECODER 0 +-#define CONFIG_AMRWB_DEMUXER 0 +-#define CONFIG_AMULTIPLY_FILTER 0 +-#define CONFIG_AMV_DECODER 0 +-#define CONFIG_AMV_ENCODER 0 +-#define CONFIG_ANDROID_CAMERA_INDEV 0 +-#define CONFIG_ANEQUALIZER_FILTER 0 +-#define CONFIG_ANLMDN_FILTER 0 +-#define CONFIG_ANM_DECODER 0 +-#define CONFIG_ANM_DEMUXER 0 +-#define CONFIG_ANOISESRC_FILTER 0 +-#define CONFIG_ANSI_DECODER 0 +-#define CONFIG_ANULL_FILTER 0 +-#define CONFIG_ANULLSINK_FILTER 0 +-#define CONFIG_ANULLSRC_FILTER 0 +-#define CONFIG_APAD_FILTER 0 +-#define CONFIG_APC_DEMUXER 0 +-#define CONFIG_APE_DECODER 0 +-#define CONFIG_APE_DEMUXER 0 +-#define CONFIG_APERMS_FILTER 0 +-#define CONFIG_APHASEMETER_FILTER 0 +-#define CONFIG_APHASER_FILTER 0 +-#define CONFIG_APNG_DECODER 0 +-#define CONFIG_APNG_DEMUXER 0 +-#define CONFIG_APNG_ENCODER 0 +-#define CONFIG_APNG_MUXER 0 +-#define CONFIG_APTX_DECODER 0 +-#define CONFIG_APTX_DEMUXER 0 +-#define CONFIG_APTX_ENCODER 0 +-#define CONFIG_APTX_HD_DECODER 0 +-#define CONFIG_APTX_HD_DEMUXER 0 +-#define CONFIG_APTX_HD_ENCODER 0 +-#define CONFIG_APTX_HD_MUXER 0 +-#define CONFIG_APTX_MUXER 0 +-#define CONFIG_APULSATOR_FILTER 0 +-#define CONFIG_AQTITLE_DEMUXER 0 +-#define CONFIG_ARBC_DECODER 0 +-#define CONFIG_AREALTIME_FILTER 0 +-#define CONFIG_ARESAMPLE_FILTER 0 +-#define CONFIG_AREVERSE_FILTER 0 +-#define CONFIG_ASELECT_FILTER 0 +-#define CONFIG_ASENDCMD_FILTER 0 +-#define CONFIG_ASETNSAMPLES_FILTER 0 +-#define CONFIG_ASETPTS_FILTER 0 +-#define CONFIG_ASETRATE_FILTER 0 +-#define CONFIG_ASETTB_FILTER 0 +-#define CONFIG_ASF_DEMUXER 0 +-#define CONFIG_ASF_MUXER 0 +-#define CONFIG_ASF_O_DEMUXER 0 +-#define CONFIG_ASF_STREAM_MUXER 0 +-#define CONFIG_ASHOWINFO_FILTER 0 +-#define CONFIG_ASIDEDATA_FILTER 0 +-#define CONFIG_ASOFTCLIP_FILTER 0 +-#define CONFIG_ASPLIT_FILTER 0 +-#define CONFIG_ASR_FILTER 0 +-#define CONFIG_ASS_DECODER 0 +-#define CONFIG_ASS_DEMUXER 0 +-#define CONFIG_ASS_ENCODER 0 +-#define CONFIG_ASS_FILTER 0 +-#define CONFIG_ASS_MUXER 0 +-#define CONFIG_ASTATS_FILTER 0 +-#define CONFIG_AST_DEMUXER 0 +-#define CONFIG_AST_MUXER 0 +-#define CONFIG_ASTREAMSELECT_FILTER 0 +-#define CONFIG_ASV1_DECODER 0 +-#define CONFIG_ASV1_ENCODER 0 +-#define CONFIG_ASV2_DECODER 0 +-#define CONFIG_ASV2_ENCODER 0 +-#define CONFIG_ASYNC_PROTOCOL 0 +-#define CONFIG_ATADENOISE_FILTER 0 +-#define CONFIG_ATEMPO_FILTER 0 +-#define CONFIG_ATRAC1_DECODER 0 +-#define CONFIG_ATRAC3AL_DECODER 0 +-#define CONFIG_ATRAC3_DECODER 0 +-#define CONFIG_ATRAC3PAL_DECODER 0 +-#define CONFIG_ATRAC3P_DECODER 0 +-#define CONFIG_ATRAC9_DECODER 0 +-#define CONFIG_ATRIM_FILTER 0 +-#define CONFIG_AU_DEMUXER 0 +-#define CONFIG_AU_MUXER 0 +-#define CONFIG_AURA2_DECODER 0 +-#define CONFIG_AURA_DECODER 0 +-#define CONFIG_AV1_FRAME_SPLIT_BSF 0 +-#define CONFIG_AV1_METADATA_BSF 0 +-#define CONFIG_AV1_PARSER 0 +-#define CONFIG_AV1_DECODER 0 +-#define CONFIG_AV1_D3D11VA_HWACCEL 0 +-#define CONFIG_AV1_D3D11VA2_HWACCEL 0 +-#define CONFIG_AV1_DXVA2_HWACCEL 0 +-#define CONFIG_AV1_NVDEC_HWACCEL 0 +-#define CONFIG_AV1_VAAPI_HWACCEL 0 +-#define CONFIG_AVECTORSCOPE_FILTER 0 +-#define CONFIG_AVFOUNDATION_INDEV 0 +-#define CONFIG_AVGBLUR_FILTER 0 +-#define CONFIG_AVGBLUR_OPENCL_FILTER 0 +-#define CONFIG_AVI_DEMUXER 0 +-#define CONFIG_AVI_MUXER 0 +-#define CONFIG_AVISYNTH_DEMUXER 0 +-#define CONFIG_AVM2_MUXER 0 +-#define CONFIG_AVR_DEMUXER 0 +-#define CONFIG_AVRN_DECODER 0 +-#define CONFIG_AVRP_DECODER 0 +-#define CONFIG_AVRP_ENCODER 0 +-#define CONFIG_AVS2_DEMUXER 0 +-#define CONFIG_AVS2_MUXER 0 +-#define CONFIG_AVS2_PARSER 0 +-#define CONFIG_AVS_DECODER 0 +-#define CONFIG_AVS_DEMUXER 0 +-#define CONFIG_AVUI_DECODER 0 +-#define CONFIG_AVUI_ENCODER 0 +-#define CONFIG_AYUV_DECODER 0 +-#define CONFIG_AYUV_ENCODER 0 +-#define CONFIG_AZMQ_FILTER 0 +-#define CONFIG_BANDPASS_FILTER 0 +-#define CONFIG_BANDREJECT_FILTER 0 +-#define CONFIG_BASS_FILTER 0 +-#define CONFIG_BBOX_FILTER 0 +-#define CONFIG_BENCH_FILTER 0 +-#define CONFIG_BETHSOFTVID_DECODER 0 +-#define CONFIG_BETHSOFTVID_DEMUXER 0 +-#define CONFIG_BFI_DECODER 0 +-#define CONFIG_BFI_DEMUXER 0 +-#define CONFIG_BFSTM_DEMUXER 0 +-#define CONFIG_BINKAUDIO_DCT_DECODER 0 +-#define CONFIG_BINKAUDIO_RDFT_DECODER 0 +-#define CONFIG_BINK_DECODER 0 +-#define CONFIG_BINK_DEMUXER 0 +-#define CONFIG_BINTEXT_DECODER 0 +-#define CONFIG_BINTEXT_DEMUXER 0 +-#define CONFIG_BIQUAD_FILTER 0 +-#define CONFIG_BIT_DEMUXER 0 +-#define CONFIG_BIT_MUXER 0 +-#define CONFIG_BITPACKED_DECODER 0 +-#define CONFIG_BITPLANENOISE_FILTER 0 +-#define CONFIG_BKTR_INDEV 0 +-#define CONFIG_BLACKDETECT_FILTER 0 +-#define CONFIG_BLACKFRAME_FILTER 0 +-#define CONFIG_BLEND_FILTER 0 +-#define CONFIG_BLURAY_PROTOCOL 0 +-#define CONFIG_BM3D_FILTER 0 +-#define CONFIG_BMP_DECODER 0 +-#define CONFIG_BMP_ENCODER 0 +-#define CONFIG_BMP_PARSER 0 +-#define CONFIG_BMV_AUDIO_DECODER 0 +-#define CONFIG_BMV_DEMUXER 0 +-#define CONFIG_BMV_VIDEO_DECODER 0 +-#define CONFIG_BOA_DEMUXER 0 +-#define CONFIG_BOXBLUR_FILTER 0 +-#define CONFIG_BOXBLUR_OPENCL_FILTER 0 +-#define CONFIG_BRENDER_PIX_DECODER 0 +-#define CONFIG_BRSTM_DEMUXER 0 +-#define CONFIG_BS2B_FILTER 0 +-#define CONFIG_BWDIF_FILTER 0 +-#define CONFIG_C93_DECODER 0 +-#define CONFIG_C93_DEMUXER 0 +-#define CONFIG_CACA_OUTDEV 0 +-#define CONFIG_CACHE_PROTOCOL 0 +-#define CONFIG_CAF_DEMUXER 0 +-#define CONFIG_CAF_MUXER 0 +-#define CONFIG_CAVS_DECODER 0 +-#define CONFIG_CAVSVIDEO_DEMUXER 0 +-#define CONFIG_CAVSVIDEO_MUXER 0 +-#define CONFIG_CAVSVIDEO_PARSER 0 +-#define CONFIG_CCAPTION_DECODER 0 +-#define CONFIG_CDG_DEMUXER 0 +-#define CONFIG_CDGRAPHICS_DECODER 0 +-#define CONFIG_CDXL_DECODER 0 +-#define CONFIG_CDXL_DEMUXER 0 +-#define CONFIG_CELLAUTO_FILTER 0 +-#define CONFIG_CFHD_DECODER 0 +-#define CONFIG_CHANNELMAP_FILTER 0 +-#define CONFIG_CHANNELSPLIT_FILTER 0 +-#define CONFIG_CHOMP_BSF 0 +-#define CONFIG_CHORUS_FILTER 0 +-#define CONFIG_CHROMAHOLD_FILTER 0 +-#define CONFIG_CHROMAKEY_FILTER 0 +-#define CONFIG_CHROMAPRINT_MUXER 0 +-#define CONFIG_CHROMASHIFT_FILTER 0 +-#define CONFIG_CIESCOPE_FILTER 0 +-#define CONFIG_CINE_DEMUXER 0 +-#define CONFIG_CINEPAK_DECODER 0 +-#define CONFIG_CINEPAK_ENCODER 0 +-#define CONFIG_CLEARVIDEO_DECODER 0 +-#define CONFIG_CLJR_DECODER 0 +-#define CONFIG_CLJR_ENCODER 0 +-#define CONFIG_CLLC_DECODER 0 +-#define CONFIG_CODEC2_DEMUXER 0 +-#define CONFIG_CODEC2_MUXER 0 +-#define CONFIG_CODEC2RAW_DEMUXER 0 +-#define CONFIG_CODEC2RAW_MUXER 0 +-#define CONFIG_CODECVIEW_FILTER 0 +-#define CONFIG_COLORBALANCE_FILTER 0 +-#define CONFIG_COLORCHANNELMIXER_FILTER 0 +-#define CONFIG_COLOR_FILTER 0 +-#define CONFIG_COLORHOLD_FILTER 0 +-#define CONFIG_COLORKEY_FILTER 0 +-#define CONFIG_COLORKEY_OPENCL_FILTER 0 +-#define CONFIG_COLORLEVELS_FILTER 0 +-#define CONFIG_COLORMATRIX_FILTER 0 +-#define CONFIG_COLORSPACE_FILTER 0 +-#define CONFIG_COMFORTNOISE_DECODER 0 +-#define CONFIG_COMFORTNOISE_ENCODER 0 +-#define CONFIG_COMPAND_FILTER 0 +-#define CONFIG_COMPENSATIONDELAY_FILTER 0 +-#define CONFIG_CONCAT_DEMUXER 0 +-#define CONFIG_CONCAT_FILTER 0 +-#define CONFIG_CONCAT_PROTOCOL 0 +-#define CONFIG_CONVOLUTION_FILTER 0 +-#define CONFIG_CONVOLUTION_OPENCL_FILTER 0 +-#define CONFIG_CONVOLVE_FILTER 0 +-#define CONFIG_COOK_DECODER 0 +-#define CONFIG_COOK_PARSER 0 +-#define CONFIG_COPY_FILTER 0 +-#define CONFIG_COREIMAGE_FILTER 0 +-#define CONFIG_COREIMAGESRC_FILTER 0 +-#define CONFIG_COVER_RECT_FILTER 0 +-#define CONFIG_CPIA_DECODER 0 +-#define CONFIG_CRC_MUXER 0 +-#define CONFIG_CROPDETECT_FILTER 0 +-#define CONFIG_CROP_FILTER 0 +-#define CONFIG_CROSSFEED_FILTER 0 +-#define CONFIG_CRYPTO_PROTOCOL 0 +-#define CONFIG_CRYSTALIZER_FILTER 0 +-#define CONFIG_CSCD_DECODER 0 +-#define CONFIG_CUE_FILTER 0 +-#define CONFIG_CURVES_FILTER 0 +-#define CONFIG_CYUV_DECODER 0 +-#define CONFIG_DASH_DEMUXER 0 +-#define CONFIG_DASH_MUXER 0 +-#define CONFIG_DATA_DEMUXER 0 +-#define CONFIG_DATA_MUXER 0 +-#define CONFIG_DATA_PROTOCOL 0 +-#define CONFIG_DATASCOPE_FILTER 0 +-#define CONFIG_DAUD_DEMUXER 0 +-#define CONFIG_DAUD_MUXER 0 +-#define CONFIG_DCA_CORE_BSF 0 +-#define CONFIG_DCA_DECODER 0 +-#define CONFIG_DCA_ENCODER 0 +-#define CONFIG_DCA_PARSER 0 +-#define CONFIG_DCSHIFT_FILTER 0 +-#define CONFIG_DCSTR_DEMUXER 0 +-#define CONFIG_DCTDNOIZ_FILTER 0 +-#define CONFIG_DDS_DECODER 0 +-#define CONFIG_DEBAND_FILTER 0 +-#define CONFIG_DEBLOCK_FILTER 0 +-#define CONFIG_DECIMATE_FILTER 0 +-#define CONFIG_DECKLINK_INDEV 0 +-#define CONFIG_DECKLINK_OUTDEV 0 +-#define CONFIG_DECONVOLVE_FILTER 0 +-#define CONFIG_DEDOT_FILTER 0 +-#define CONFIG_DEESSER_FILTER 0 +-#define CONFIG_DEFLATE_FILTER 0 +-#define CONFIG_DEFLICKER_FILTER 0 +-#define CONFIG_DEINTERLACE_QSV_FILTER 0 +-#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 +-#define CONFIG_DEJUDDER_FILTER 0 +-#define CONFIG_DELOGO_FILTER 0 +-#define CONFIG_DEMUXERS 0 +-#define CONFIG_DENOISE_VAAPI_FILTER 0 +-#define CONFIG_DERAIN_FILTER 0 +-#define CONFIG_DESHAKE_FILTER 0 +-#define CONFIG_DESPILL_FILTER 0 +-#define CONFIG_DETELECINE_FILTER 0 +-#define CONFIG_DFA_DECODER 0 +-#define CONFIG_DFA_DEMUXER 0 +-#define CONFIG_DHAV_DEMUXER 0 +-#define CONFIG_DILATION_FILTER 0 +-#define CONFIG_DILATION_OPENCL_FILTER 0 +-#define CONFIG_DIRAC_DECODER 0 +-#define CONFIG_DIRAC_DEMUXER 0 +-#define CONFIG_DIRAC_MUXER 0 +-#define CONFIG_DIRAC_PARSER 0 +-#define CONFIG_DISPLACE_FILTER 0 +-#define CONFIG_DNXHD_DECODER 0 +-#define CONFIG_DNXHD_DEMUXER 0 +-#define CONFIG_DNXHD_ENCODER 0 +-#define CONFIG_DNXHD_MUXER 0 +-#define CONFIG_DNXHD_PARSER 0 +-#define CONFIG_DOLBY_E_DECODER 0 +-#define CONFIG_DOUBLEWEAVE_FILTER 0 +-#define CONFIG_DPX_DECODER 0 +-#define CONFIG_DPX_ENCODER 0 +-#define CONFIG_DPX_PARSER 0 +-#define CONFIG_DRAWBOX_FILTER 0 +-#define CONFIG_DRAWGRAPH_FILTER 0 +-#define CONFIG_DRAWGRID_FILTER 0 +-#define CONFIG_DRAWTEXT_FILTER 0 +-#define CONFIG_DRMETER_FILTER 0 +-#define CONFIG_DSD_LSBF_DECODER 0 +-#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 +-#define CONFIG_DSD_MSBF_DECODER 0 +-#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 +-#define CONFIG_DSF_DEMUXER 0 +-#define CONFIG_DSHOW_INDEV 0 +-#define CONFIG_DSICINAUDIO_DECODER 0 +-#define CONFIG_DSICIN_DEMUXER 0 +-#define CONFIG_DSICINVIDEO_DECODER 0 +-#define CONFIG_DSS_DEMUXER 0 +-#define CONFIG_DSS_SP_DECODER 0 +-#define CONFIG_DST_DECODER 0 +-#define CONFIG_DTS_DEMUXER 0 +-#define CONFIG_DTSHD_DEMUXER 0 +-#define CONFIG_DTS_MUXER 0 +-#define CONFIG_DUMP_EXTRADATA_BSF 0 +-#define CONFIG_DVAUDIO_DECODER 0 +-#define CONFIG_DVAUDIO_PARSER 0 +-#define CONFIG_DVBSUB_DECODER 0 +-#define CONFIG_DVBSUB_DEMUXER 0 +-#define CONFIG_DVBSUB_ENCODER 0 +-#define CONFIG_DVBSUB_PARSER 0 +-#define CONFIG_DVBTXT_DEMUXER 0 +-#define CONFIG_DV_DEMUXER 0 +-#define CONFIG_DVD_NAV_PARSER 0 +-#define CONFIG_DVDSUB_DECODER 0 +-#define CONFIG_DVDSUB_ENCODER 0 +-#define CONFIG_DVDSUB_PARSER 0 +-#define CONFIG_DV_MUXER 0 +-#define CONFIG_DVVIDEO_DECODER 0 +-#define CONFIG_DVVIDEO_ENCODER 0 +-#define CONFIG_DXA_DECODER 0 +-#define CONFIG_DXA_DEMUXER 0 +-#define CONFIG_DXTORY_DECODER 0 +-#define CONFIG_DXV_DECODER 0 +-#define CONFIG_DYNAUDNORM_FILTER 0 +-#define CONFIG_EAC3_AT_DECODER 0 +-#define CONFIG_EAC3_CORE_BSF 0 +-#define CONFIG_EAC3_DECODER 0 +-#define CONFIG_EAC3_DEMUXER 0 +-#define CONFIG_EAC3_ENCODER 0 +-#define CONFIG_EAC3_MUXER 0 +-#define CONFIG_EA_CDATA_DEMUXER 0 +-#define CONFIG_EACMV_DECODER 0 +-#define CONFIG_EA_DEMUXER 0 +-#define CONFIG_EAMAD_DECODER 0 +-#define CONFIG_EARWAX_FILTER 0 +-#define CONFIG_EATGQ_DECODER 0 +-#define CONFIG_EATGV_DECODER 0 +-#define CONFIG_EATQI_DECODER 0 +-#define CONFIG_EBUR128_FILTER 0 +-#define CONFIG_EDGEDETECT_FILTER 0 +-#define CONFIG_EIGHTBPS_DECODER 0 +-#define CONFIG_EIGHTSVX_EXP_DECODER 0 +-#define CONFIG_EIGHTSVX_FIB_DECODER 0 +-#define CONFIG_ELBG_FILTER 0 +-#define CONFIG_ENCODERS 0 +-#define CONFIG_ENTROPY_FILTER 0 +-#define CONFIG_EPAF_DEMUXER 0 +-#define CONFIG_EQ_FILTER 0 +-#define CONFIG_EQUALIZER_FILTER 0 +-#define CONFIG_EROSION_FILTER 0 +-#define CONFIG_EROSION_OPENCL_FILTER 0 +-#define CONFIG_ESCAPE124_DECODER 0 +-#define CONFIG_ESCAPE130_DECODER 0 +-#define CONFIG_EVRC_DECODER 0 +-#define CONFIG_EXR_DECODER 0 +-#define CONFIG_EXTRACT_EXTRADATA_BSF 0 +-#define CONFIG_EXTRACTPLANES_FILTER 0 +-#define CONFIG_EXTRASTEREO_FILTER 0 +-#define CONFIG_F4V_MUXER 0 +-#define CONFIG_FADE_FILTER 0 +-#define CONFIG_FBDEV_INDEV 0 +-#define CONFIG_FBDEV_OUTDEV 0 +-#define CONFIG_FFMETADATA_DEMUXER 0 +-#define CONFIG_FFMETADATA_MUXER 0 +-#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 +-#define CONFIG_FFRTMPHTTP_PROTOCOL 0 +-#define CONFIG_FFTDNOIZ_FILTER 0 +-#define CONFIG_FFTFILT_FILTER 0 +-#define CONFIG_FFV1_DECODER 0 +-#define CONFIG_FFV1_ENCODER 0 +-#define CONFIG_FFVHUFF_DECODER 0 +-#define CONFIG_FFVHUFF_ENCODER 0 +-#define CONFIG_FFWAVESYNTH_DECODER 0 +-#define CONFIG_FIC_DECODER 0 +-#define CONFIG_FIELD_FILTER 0 +-#define CONFIG_FIELDHINT_FILTER 0 +-#define CONFIG_FIELDMATCH_FILTER 0 +-#define CONFIG_FIELDORDER_FILTER 0 +-#define CONFIG_FIFO_FILTER 0 +-#define CONFIG_FIFO_MUXER 0 +-#define CONFIG_FIFO_TEST_MUXER 0 +-#define CONFIG_FILE_PROTOCOL 0 +-#define CONFIG_FILLBORDERS_FILTER 0 +-#define CONFIG_FILMSTRIP_DEMUXER 0 +-#define CONFIG_FILMSTRIP_MUXER 0 +-#define CONFIG_FILTERS 0 +-#define CONFIG_FILTER_UNITS_BSF 0 +-#define CONFIG_FIND_RECT_FILTER 0 +-#define CONFIG_FIREQUALIZER_FILTER 0 +-#define CONFIG_FITS_DECODER 0 +-#define CONFIG_FITS_DEMUXER 0 +-#define CONFIG_FITS_ENCODER 0 +-#define CONFIG_FITS_MUXER 0 +-#define CONFIG_FLAC_DEMUXER 0 +-#define CONFIG_FLAC_ENCODER 0 +-#define CONFIG_FLAC_MUXER 0 +-#define CONFIG_FLAC_PARSER 0 +-#define CONFIG_FLANGER_FILTER 0 +-#define CONFIG_FLASHSV2_DECODER 0 +-#define CONFIG_FLASHSV2_ENCODER 0 +-#define CONFIG_FLASHSV_DECODER 0 +-#define CONFIG_FLASHSV_ENCODER 0 +-#define CONFIG_FLIC_DECODER 0 +-#define CONFIG_FLIC_DEMUXER 0 +-#define CONFIG_FLITE_FILTER 0 +-#define CONFIG_FLOODFILL_FILTER 0 +-#define CONFIG_FLV_DECODER 0 +-#define CONFIG_FLV_DEMUXER 0 +-#define CONFIG_FLV_ENCODER 0 +-#define CONFIG_FLV_MUXER 0 +-#define CONFIG_FMVC_DECODER 0 +-#define CONFIG_FORMAT_FILTER 0 +-#define CONFIG_FOURXM_DECODER 0 +-#define CONFIG_FOURXM_DEMUXER 0 +-#define CONFIG_FPS_FILTER 0 +-#define CONFIG_FRAMECRC_MUXER 0 +-#define CONFIG_FRAMEHASH_MUXER 0 +-#define CONFIG_FRAMEMD5_MUXER 0 +-#define CONFIG_FRAMEPACK_FILTER 0 +-#define CONFIG_FRAMERATE_FILTER 0 +-#define CONFIG_FRAMESTEP_FILTER 0 +-#define CONFIG_FRAME_THREAD_ENCODER 0 +-#define CONFIG_FRAPS_DECODER 0 +-#define CONFIG_FREEZEDETECT_FILTER 0 +-#define CONFIG_FREI0R_FILTER 0 +-#define CONFIG_FREI0R_SRC_FILTER 0 +-#define CONFIG_FRM_DEMUXER 0 +-#define CONFIG_FRWU_DECODER 0 +-#define CONFIG_FSB_DEMUXER 0 +-#define CONFIG_FSPP_FILTER 0 +-#define CONFIG_FTP_PROTOCOL 0 +-#define CONFIG_G2M_DECODER 0 +-#define CONFIG_G722_DEMUXER 0 +-#define CONFIG_G722_MUXER 0 +-#define CONFIG_G723_1_DECODER 0 +-#define CONFIG_G723_1_DEMUXER 0 +-#define CONFIG_G723_1_ENCODER 0 +-#define CONFIG_G723_1_MUXER 0 +-#define CONFIG_G723_1_PARSER 0 +-#define CONFIG_G726_DEMUXER 0 +-#define CONFIG_G726LE_DEMUXER 0 +-#define CONFIG_G726LE_MUXER 0 +-#define CONFIG_G726_MUXER 0 +-#define CONFIG_G729_DECODER 0 +-#define CONFIG_G729_DEMUXER 0 +-#define CONFIG_G729_PARSER 0 +-#define CONFIG_GBLUR_FILTER 0 +-#define CONFIG_GDIGRAB_INDEV 0 +-#define CONFIG_GDV_DECODER 0 +-#define CONFIG_GDV_DEMUXER 0 +-#define CONFIG_GENH_DEMUXER 0 +-#define CONFIG_GEQ_FILTER 0 +-#define CONFIG_GIF_DECODER 0 +-#define CONFIG_GIF_DEMUXER 0 +-#define CONFIG_GIF_ENCODER 0 +-#define CONFIG_GIF_MUXER 0 +-#define CONFIG_GIF_PARSER 0 +-#define CONFIG_GOPHER_PROTOCOL 0 +-#define CONFIG_GRADFUN_FILTER 0 +-#define CONFIG_GRAPHMONITOR_FILTER 0 +-#define CONFIG_GREMLIN_DPCM_DECODER 0 +-#define CONFIG_GREYEDGE_FILTER 0 +-#define CONFIG_GSM_DECODER 0 +-#define CONFIG_GSM_DEMUXER 0 +-#define CONFIG_GSM_MS_AT_DECODER 0 +-#define CONFIG_GSM_MS_DECODER 0 +-#define CONFIG_GSM_MUXER 0 +-#define CONFIG_GSM_PARSER 0 +-#define CONFIG_GXF_DEMUXER 0 +-#define CONFIG_GXF_MUXER 0 +-#define CONFIG_H261_DECODER 0 +-#define CONFIG_H261_DEMUXER 0 +-#define CONFIG_H261_ENCODER 0 +-#define CONFIG_H261_MUXER 0 +-#define CONFIG_H261_PARSER 0 +-#define CONFIG_H263_DECODER 0 +-#define CONFIG_H263_DEMUXER 0 +-#define CONFIG_H263_ENCODER 0 +-#define CONFIG_H263I_DECODER 0 +-#define CONFIG_H263_MUXER 0 +-#define CONFIG_H263_PARSER 0 +-#define CONFIG_H263P_DECODER 0 +-#define CONFIG_H263P_ENCODER 0 +-#define CONFIG_H263_V4L2M2M_DECODER 0 +-#define CONFIG_H263_V4L2M2M_ENCODER 0 +-#define CONFIG_H263_VAAPI_HWACCEL 0 +-#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 +-#define CONFIG_H264_AMF_ENCODER 0 +-#define CONFIG_H264_CRYSTALHD_DECODER 0 +-#define CONFIG_H264_CUVID_DECODER 0 +-#define CONFIG_H264_D3D11VA2_HWACCEL 0 +-#define CONFIG_H264_D3D11VA_HWACCEL 0 +-#define CONFIG_H264_DECODER 0 +-#define CONFIG_H264_DEMUXER 0 +-#define CONFIG_H264_DXVA2_HWACCEL 0 +-#define CONFIG_H264_MEDIACODEC_DECODER 0 +-#define CONFIG_H264_METADATA_BSF 0 +-#define CONFIG_H264_MMAL_DECODER 0 +-#define CONFIG_H264_MP4TOANNEXB_BSF 0 +-#define CONFIG_H264_MUXER 0 +-#define CONFIG_H264_NVDEC_HWACCEL 0 +-#define CONFIG_H264_NVENC_ENCODER 0 +-#define CONFIG_H264_OMX_ENCODER 0 +-#define CONFIG_H264_PARSER 0 +-#define CONFIG_H264_QSV_DECODER 0 +-#define CONFIG_H264_QSV_ENCODER 0 +-#define CONFIG_H264_REDUNDANT_PPS_BSF 0 +-#define CONFIG_H264_RKMPP_DECODER 0 +-#define CONFIG_H264_V4L2M2M_DECODER 0 +-#define CONFIG_H264_V4L2M2M_ENCODER 0 +-#define CONFIG_H264_VAAPI_ENCODER 0 +-#define CONFIG_H264_VAAPI_HWACCEL 0 +-#define CONFIG_H264_VDPAU_HWACCEL 0 +-#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 +-#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 +-#define CONFIG_HAAS_FILTER 0 +-#define CONFIG_HALDCLUT_FILTER 0 +-#define CONFIG_HALDCLUTSRC_FILTER 0 +-#define CONFIG_HAP_DECODER 0 +-#define CONFIG_HAP_ENCODER 0 +-#define CONFIG_HAPQA_EXTRACT_BSF 0 +-#define CONFIG_HASH_MUXER 0 +-#define CONFIG_HCOM_DECODER 0 +-#define CONFIG_HCOM_DEMUXER 0 +-#define CONFIG_HDCD_FILTER 0 +-#define CONFIG_HDS_MUXER 0 +-#define CONFIG_HEADPHONE_FILTER 0 +-#define CONFIG_HEVC_AMF_ENCODER 0 +-#define CONFIG_HEVC_CUVID_DECODER 0 +-#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 +-#define CONFIG_HEVC_D3D11VA_HWACCEL 0 +-#define CONFIG_HEVC_DECODER 0 +-#define CONFIG_HEVC_DEMUXER 0 +-#define CONFIG_HEVC_DXVA2_HWACCEL 0 +-#define CONFIG_HEVC_MEDIACODEC_DECODER 0 +-#define CONFIG_HEVC_METADATA_BSF 0 +-#define CONFIG_HEVC_MP4TOANNEXB_BSF 0 +-#define CONFIG_HEVC_MUXER 0 +-#define CONFIG_HEVC_NVDEC_HWACCEL 0 +-#define CONFIG_HEVC_NVENC_ENCODER 0 +-#define CONFIG_HEVC_PARSER 0 +-#define CONFIG_HEVC_QSV_DECODER 0 +-#define CONFIG_HEVC_QSV_ENCODER 0 +-#define CONFIG_HEVC_RKMPP_DECODER 0 +-#define CONFIG_HEVC_V4L2M2M_DECODER 0 +-#define CONFIG_HEVC_V4L2M2M_ENCODER 0 +-#define CONFIG_HEVC_VAAPI_ENCODER 0 +-#define CONFIG_HEVC_VAAPI_HWACCEL 0 +-#define CONFIG_HEVC_VDPAU_HWACCEL 0 +-#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 +-#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 +-#define CONFIG_HFLIP_FILTER 0 +-#define CONFIG_HIGHPASS_FILTER 0 +-#define CONFIG_HIGHSHELF_FILTER 0 +-#define CONFIG_HILBERT_FILTER 0 +-#define CONFIG_HISTEQ_FILTER 0 +-#define CONFIG_HISTOGRAM_FILTER 0 +-#define CONFIG_HLS_DEMUXER 0 +-#define CONFIG_HLS_MUXER 0 +-#define CONFIG_HLS_PROTOCOL 0 +-#define CONFIG_HNM4_VIDEO_DECODER 0 +-#define CONFIG_HNM_DEMUXER 0 +-#define CONFIG_HQDN3D_FILTER 0 +-#define CONFIG_HQ_HQA_DECODER 0 +-#define CONFIG_HQX_DECODER 0 +-#define CONFIG_HQX_FILTER 0 +-#define CONFIG_HSTACK_FILTER 0 +-#define CONFIG_HTTP_PROTOCOL 0 +-#define CONFIG_HTTPPROXY_PROTOCOL 0 +-#define CONFIG_HTTPS_PROTOCOL 0 +-#define CONFIG_HUE_FILTER 0 +-#define CONFIG_HUFFYUV_DECODER 0 +-#define CONFIG_HUFFYUV_ENCODER 0 +-#define CONFIG_HWACCELS 0 +-#define CONFIG_HWDOWNLOAD_FILTER 0 +-#define CONFIG_HWMAP_FILTER 0 +-#define CONFIG_HWUPLOAD_CUDA_FILTER 0 +-#define CONFIG_HWUPLOAD_FILTER 0 +-#define CONFIG_HYMT_DECODER 0 +-#define CONFIG_HYSTERESIS_FILTER 0 +-#define CONFIG_IAC_DECODER 0 +-#define CONFIG_ICECAST_PROTOCOL 0 +-#define CONFIG_ICO_DEMUXER 0 +-#define CONFIG_ICO_MUXER 0 +-#define CONFIG_IDCIN_DECODER 0 +-#define CONFIG_IDCIN_DEMUXER 0 +-#define CONFIG_IDET_FILTER 0 +-#define CONFIG_IDF_DECODER 0 +-#define CONFIG_IDF_DEMUXER 0 +-#define CONFIG_IEC61883_INDEV 0 +-#define CONFIG_IFF_DEMUXER 0 +-#define CONFIG_IFF_ILBM_DECODER 0 +-#define CONFIG_IFV_DEMUXER 0 +-#define CONFIG_ILBC_AT_DECODER 0 +-#define CONFIG_ILBC_AT_ENCODER 0 +-#define CONFIG_ILBC_DECODER 0 +-#define CONFIG_ILBC_DEMUXER 0 +-#define CONFIG_ILBC_MUXER 0 +-#define CONFIG_IL_FILTER 0 +-#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 +-#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 +-#define CONFIG_IMAGE2_DEMUXER 0 +-#define CONFIG_IMAGE2_MUXER 0 +-#define CONFIG_IMAGE2PIPE_DEMUXER 0 +-#define CONFIG_IMAGE2PIPE_MUXER 0 +-#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 +-#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 +-#define CONFIG_IMC_DECODER 0 +-#define CONFIG_IMM4_DECODER 0 +-#define CONFIG_IMX_DUMP_HEADER_BSF 0 +-#define CONFIG_INDEO2_DECODER 0 +-#define CONFIG_INDEO3_DECODER 0 +-#define CONFIG_INDEO4_DECODER 0 +-#define CONFIG_INDEO5_DECODER 0 +-#define CONFIG_INDEVS 0 +-#define CONFIG_INFLATE_FILTER 0 +-#define CONFIG_INGENIENT_DEMUXER 0 +-#define CONFIG_INTERLACE_FILTER 0 +-#define CONFIG_INTERLEAVE_FILTER 0 +-#define CONFIG_INTERPLAY_ACM_DECODER 0 +-#define CONFIG_INTERPLAY_DPCM_DECODER 0 +-#define CONFIG_INTERPLAY_VIDEO_DECODER 0 +-#define CONFIG_IPMOVIE_DEMUXER 0 +-#define CONFIG_IPOD_MUXER 0 +-#define CONFIG_IRCAM_DEMUXER 0 +-#define CONFIG_IRCAM_MUXER 0 +-#define CONFIG_ISMV_MUXER 0 +-#define CONFIG_ISS_DEMUXER 0 +-#define CONFIG_IV8_DEMUXER 0 +-#define CONFIG_IVF_DEMUXER 0 +-#define CONFIG_IVF_MUXER 0 +-#define CONFIG_IVR_DEMUXER 0 +-#define CONFIG_JACK_INDEV 0 +-#define CONFIG_JACOSUB_DECODER 0 +-#define CONFIG_JACOSUB_DEMUXER 0 +-#define CONFIG_JACOSUB_MUXER 0 +-#define CONFIG_JOIN_FILTER 0 +-#define CONFIG_JPEG2000_DECODER 0 +-#define CONFIG_JPEG2000_ENCODER 0 +-#define CONFIG_JPEGLS_DECODER 0 +-#define CONFIG_JPEGLS_ENCODER 0 +-#define CONFIG_JV_DECODER 0 +-#define CONFIG_JV_DEMUXER 0 +-#define CONFIG_KERNDEINT_FILTER 0 +-#define CONFIG_KGV1_DECODER 0 +-#define CONFIG_KMSGRAB_INDEV 0 +-#define CONFIG_KMVC_DECODER 0 +-#define CONFIG_KUX_DEMUXER 0 +-#define CONFIG_LADSPA_FILTER 0 +-#define CONFIG_LAGARITH_DECODER 0 +-#define CONFIG_LAGFUN_FILTER 0 +-#define CONFIG_LATM_MUXER 0 +-#define CONFIG_LAVFI_INDEV 0 +-#define CONFIG_LENSCORRECTION_FILTER 0 +-#define CONFIG_LENSFUN_FILTER 0 +-#define CONFIG_LIBAOM_AV1_DECODER 0 +-#define CONFIG_LIBAOM_AV1_ENCODER 0 +-#define CONFIG_LIBARIBB24_DECODER 0 +-#define CONFIG_LIBCDIO_INDEV 0 +-#define CONFIG_LIBCELT_DECODER 0 +-#define CONFIG_LIBCODEC2_DECODER 0 +-#define CONFIG_LIBCODEC2_ENCODER 0 +-#define CONFIG_LIBDAV1D_DECODER 0 +-#define CONFIG_LIBDAVS2_DECODER 0 +-#define CONFIG_LIBDC1394_INDEV 0 +-#define CONFIG_LIBFDK_AAC_DECODER 0 +-#define CONFIG_LIBFDK_AAC_ENCODER 0 +-#define CONFIG_LIBGME_DEMUXER 0 +-#define CONFIG_LIBGSM_DECODER 0 +-#define CONFIG_LIBGSM_ENCODER 0 +-#define CONFIG_LIBGSM_MS_DECODER 0 +-#define CONFIG_LIBGSM_MS_ENCODER 0 +-#define CONFIG_LIBILBC_DECODER 0 +-#define CONFIG_LIBILBC_ENCODER 0 +-#define CONFIG_LIBKVAZAAR_ENCODER 0 +-#define CONFIG_LIBMODPLUG_DEMUXER 0 +-#define CONFIG_LIBMP3LAME_ENCODER 0 +-#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 +-#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 +-#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 +-#define CONFIG_LIBOPENH264_DECODER 0 +-#define CONFIG_LIBOPENH264_ENCODER 0 +-#define CONFIG_LIBOPENJPEG_DECODER 0 +-#define CONFIG_LIBOPENJPEG_ENCODER 0 +-#define CONFIG_LIBOPENMPT_DEMUXER 0 +-#define CONFIG_LIBOPUS_DECODER 0 +-#define CONFIG_LIBOPUS_ENCODER 0 +-#define CONFIG_LIBRSVG_DECODER 0 +-#define CONFIG_LIBRTMPE_PROTOCOL 0 +-#define CONFIG_LIBRTMP_PROTOCOL 0 +-#define CONFIG_LIBRTMPS_PROTOCOL 0 +-#define CONFIG_LIBRTMPTE_PROTOCOL 0 +-#define CONFIG_LIBRTMPT_PROTOCOL 0 +-#define CONFIG_LIBSHINE_ENCODER 0 +-#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 +-#define CONFIG_LIBSPEEX_DECODER 0 +-#define CONFIG_LIBSPEEX_ENCODER 0 +-#define CONFIG_LIBSRT_PROTOCOL 0 +-#define CONFIG_LIBSSH_PROTOCOL 0 +-#define CONFIG_LIBTHEORA_ENCODER 0 +-#define CONFIG_LIBTWOLAME_ENCODER 0 +-#define CONFIG_LIBVMAF_FILTER 0 +-#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 +-#define CONFIG_LIBVORBIS_DECODER 0 +-#define CONFIG_LIBVORBIS_ENCODER 0 +-#define CONFIG_LIBVPX_VP8_DECODER 0 +-#define CONFIG_LIBVPX_VP8_ENCODER 0 +-#define CONFIG_LIBVPX_VP9_DECODER 0 +-#define CONFIG_LIBVPX_VP9_ENCODER 0 +-#define CONFIG_LIBWAVPACK_ENCODER 0 +-#define CONFIG_LIBWEBP_ANIM_ENCODER 0 +-#define CONFIG_LIBWEBP_ENCODER 0 +-#define CONFIG_LIBX262_ENCODER 0 +-#define CONFIG_LIBX264_ENCODER 0 +-#define CONFIG_LIBX264RGB_ENCODER 0 +-#define CONFIG_LIBX265_ENCODER 0 +-#define CONFIG_LIBXAVS2_ENCODER 0 +-#define CONFIG_LIBXAVS_ENCODER 0 +-#define CONFIG_LIBXVID_ENCODER 0 +-#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 +-#define CONFIG_LIFE_FILTER 0 +-#define CONFIG_LIMITER_FILTER 0 +-#define CONFIG_LIVE_FLV_DEMUXER 0 +-#define CONFIG_LJPEG_ENCODER 0 +-#define CONFIG_LMLM4_DEMUXER 0 +-#define CONFIG_LOAS_DEMUXER 0 +-#define CONFIG_LOCO_DECODER 0 +-#define CONFIG_LOOP_FILTER 0 +-#define CONFIG_LOUDNORM_FILTER 0 +-#define CONFIG_LOWPASS_FILTER 0 +-#define CONFIG_LOWSHELF_FILTER 0 +-#define CONFIG_LRC_DEMUXER 0 +-#define CONFIG_LRC_MUXER 0 +-#define CONFIG_LSCR_DECODER 0 +-#define CONFIG_LUMAKEY_FILTER 0 +-#define CONFIG_LUT1D_FILTER 0 +-#define CONFIG_LUT2_FILTER 0 +-#define CONFIG_LUT3D_FILTER 0 +-#define CONFIG_LUT_FILTER 0 +-#define CONFIG_LUTRGB_FILTER 0 +-#define CONFIG_LUTYUV_FILTER 0 +-#define CONFIG_LV2_FILTER 0 +-#define CONFIG_LVF_DEMUXER 0 +-#define CONFIG_LXF_DEMUXER 0 +-#define CONFIG_M101_DECODER 0 +-#define CONFIG_M4V_DEMUXER 0 +-#define CONFIG_M4V_MUXER 0 +-#define CONFIG_MACE3_DECODER 0 +-#define CONFIG_MACE6_DECODER 0 +-#define CONFIG_MAGICYUV_DECODER 0 +-#define CONFIG_MAGICYUV_ENCODER 0 +-#define CONFIG_MANDELBROT_FILTER 0 +-#define CONFIG_MASKEDCLAMP_FILTER 0 +-#define CONFIG_MASKEDMERGE_FILTER 0 +-#define CONFIG_MASKFUN_FILTER 0 +-#define CONFIG_MATROSKA_AUDIO_MUXER 0 +-#define CONFIG_MATROSKA_DEMUXER 0 +-#define CONFIG_MATROSKA_MUXER 0 +-#define CONFIG_MCDEINT_FILTER 0 +-#define CONFIG_MCOMPAND_FILTER 0 +-#define CONFIG_MD5_MUXER 0 +-#define CONFIG_MD5_PROTOCOL 0 +-#define CONFIG_MDEC_DECODER 0 +-#define CONFIG_MERGEPLANES_FILTER 0 +-#define CONFIG_MESTIMATE_FILTER 0 +-#define CONFIG_METADATA_FILTER 0 +-#define CONFIG_METASOUND_DECODER 0 +-#define CONFIG_MGSTS_DEMUXER 0 +-#define CONFIG_MICRODVD_DECODER 0 +-#define CONFIG_MICRODVD_DEMUXER 0 +-#define CONFIG_MICRODVD_MUXER 0 +-#define CONFIG_MIDEQUALIZER_FILTER 0 +-#define CONFIG_MIMIC_DECODER 0 +-#define CONFIG_MINTERPOLATE_FILTER 0 +-#define CONFIG_MIX_FILTER 0 +-#define CONFIG_MJPEG_2000_DEMUXER 0 +-#define CONFIG_MJPEG2JPEG_BSF 0 +-#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 +-#define CONFIG_MJPEGB_DECODER 0 +-#define CONFIG_MJPEG_CUVID_DECODER 0 +-#define CONFIG_MJPEG_DECODER 0 +-#define CONFIG_MJPEG_DEMUXER 0 +-#define CONFIG_MJPEG_ENCODER 0 +-#define CONFIG_MJPEG_MUXER 0 +-#define CONFIG_MJPEG_NVDEC_HWACCEL 0 +-#define CONFIG_MJPEG_PARSER 0 +-#define CONFIG_MJPEG_QSV_ENCODER 0 +-#define CONFIG_MJPEG_VAAPI_ENCODER 0 +-#define CONFIG_MJPEG_VAAPI_HWACCEL 0 +-#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 +-#define CONFIG_MLP_DECODER 0 +-#define CONFIG_MLP_DEMUXER 0 +-#define CONFIG_MLP_ENCODER 0 +-#define CONFIG_MLP_MUXER 0 +-#define CONFIG_MLP_PARSER 0 +-#define CONFIG_MLV_DEMUXER 0 +-#define CONFIG_MM_DEMUXER 0 +-#define CONFIG_MMF_DEMUXER 0 +-#define CONFIG_MMF_MUXER 0 +-#define CONFIG_MMSH_PROTOCOL 0 +-#define CONFIG_MMST_PROTOCOL 0 +-#define CONFIG_MMVIDEO_DECODER 0 +-#define CONFIG_MOTIONPIXELS_DECODER 0 +-#define CONFIG_MOV2TEXTSUB_BSF 0 +-#define CONFIG_MOV_DEMUXER 0 +-#define CONFIG_MOVIE_FILTER 0 +-#define CONFIG_MOV_MUXER 0 +-#define CONFIG_MOVTEXT_DECODER 0 +-#define CONFIG_MOVTEXT_ENCODER 0 +-#define CONFIG_MP1_AT_DECODER 0 +-#define CONFIG_MP1_DECODER 0 +-#define CONFIG_MP1FLOAT_DECODER 0 +-#define CONFIG_MP2_AT_DECODER 0 +-#define CONFIG_MP2_DECODER 0 +-#define CONFIG_MP2_ENCODER 0 +-#define CONFIG_MP2FIXED_ENCODER 0 +-#define CONFIG_MP2FLOAT_DECODER 0 +-#define CONFIG_MP2_MUXER 0 +-#define CONFIG_MP3ADU_DECODER 0 +-#define CONFIG_MP3ADUFLOAT_DECODER 0 +-#define CONFIG_MP3_AT_DECODER 0 +-#define CONFIG_MP3_DEMUXER 0 +-#define CONFIG_MP3FLOAT_DECODER 0 +-#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 +-#define CONFIG_MP3_MUXER 0 +-#define CONFIG_MP3ON4_DECODER 0 +-#define CONFIG_MP3ON4FLOAT_DECODER 0 +-#define CONFIG_MP4_MUXER 0 +-#define CONFIG_MPC7_DECODER 0 +-#define CONFIG_MPC8_DECODER 0 +-#define CONFIG_MPC8_DEMUXER 0 +-#define CONFIG_MPC_DEMUXER 0 +-#define CONFIG_MPDECIMATE_FILTER 0 +-#define CONFIG_MPEG1_CUVID_DECODER 0 +-#define CONFIG_MPEG1_NVDEC_HWACCEL 0 +-#define CONFIG_MPEG1SYSTEM_MUXER 0 +-#define CONFIG_MPEG1_V4L2M2M_DECODER 0 +-#define CONFIG_MPEG1VCD_MUXER 0 +-#define CONFIG_MPEG1_VDPAU_HWACCEL 0 +-#define CONFIG_MPEG1VIDEO_DECODER 0 +-#define CONFIG_MPEG1VIDEO_ENCODER 0 +-#define CONFIG_MPEG1VIDEO_MUXER 0 +-#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 +-#define CONFIG_MPEG1_XVMC_HWACCEL 0 +-#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 +-#define CONFIG_MPEG2_CUVID_DECODER 0 +-#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 +-#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 +-#define CONFIG_MPEG2DVD_MUXER 0 +-#define CONFIG_MPEG2_DXVA2_HWACCEL 0 +-#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 +-#define CONFIG_MPEG2_METADATA_BSF 0 +-#define CONFIG_MPEG2_MMAL_DECODER 0 +-#define CONFIG_MPEG2_NVDEC_HWACCEL 0 +-#define CONFIG_MPEG2_QSV_DECODER 0 +-#define CONFIG_MPEG2_QSV_ENCODER 0 +-#define CONFIG_MPEG2SVCD_MUXER 0 +-#define CONFIG_MPEG2_V4L2M2M_DECODER 0 +-#define CONFIG_MPEG2_VAAPI_ENCODER 0 +-#define CONFIG_MPEG2_VAAPI_HWACCEL 0 +-#define CONFIG_MPEG2_VDPAU_HWACCEL 0 +-#define CONFIG_MPEG2VIDEO_DECODER 0 +-#define CONFIG_MPEG2VIDEO_ENCODER 0 +-#define CONFIG_MPEG2VIDEO_MUXER 0 +-#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 +-#define CONFIG_MPEG2VOB_MUXER 0 +-#define CONFIG_MPEG2_XVMC_HWACCEL 0 +-#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 +-#define CONFIG_MPEG4_CUVID_DECODER 0 +-#define CONFIG_MPEG4_DECODER 0 +-#define CONFIG_MPEG4_ENCODER 0 +-#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 +-#define CONFIG_MPEG4_MMAL_DECODER 0 +-#define CONFIG_MPEG4_NVDEC_HWACCEL 0 +-#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 +-#define CONFIG_MPEG4_V4L2M2M_DECODER 0 +-#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 +-#define CONFIG_MPEG4_VAAPI_HWACCEL 0 +-#define CONFIG_MPEG4_VDPAU_HWACCEL 0 +-#define CONFIG_MPEG4VIDEO_PARSER 0 +-#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 +-#define CONFIG_MPEGAUDIO_PARSER 0 +-#define CONFIG_MPEGPS_DEMUXER 0 +-#define CONFIG_MPEGTS_DEMUXER 0 +-#define CONFIG_MPEGTS_MUXER 0 +-#define CONFIG_MPEGTSRAW_DEMUXER 0 +-#define CONFIG_MPEGVIDEO_DECODER 0 +-#define CONFIG_MPEGVIDEO_DEMUXER 0 +-#define CONFIG_MPEGVIDEO_PARSER 0 +-#define CONFIG_MPJPEG_DEMUXER 0 +-#define CONFIG_MPJPEG_MUXER 0 +-#define CONFIG_MPL2_DECODER 0 +-#define CONFIG_MPL2_DEMUXER 0 +-#define CONFIG_MPSUB_DEMUXER 0 +-#define CONFIG_MPTESTSRC_FILTER 0 +-#define CONFIG_MSA1_DECODER 0 +-#define CONFIG_MSCC_DECODER 0 +-#define CONFIG_MSF_DEMUXER 0 +-#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 +-#define CONFIG_MSMPEG4V1_DECODER 0 +-#define CONFIG_MSMPEG4V2_DECODER 0 +-#define CONFIG_MSMPEG4V2_ENCODER 0 +-#define CONFIG_MSMPEG4V3_DECODER 0 +-#define CONFIG_MSMPEG4V3_ENCODER 0 +-#define CONFIG_MSNWC_TCP_DEMUXER 0 +-#define CONFIG_MSRLE_DECODER 0 +-#define CONFIG_MSS1_DECODER 0 +-#define CONFIG_MSS2_DECODER 0 +-#define CONFIG_MSVIDEO1_DECODER 0 +-#define CONFIG_MSVIDEO1_ENCODER 0 +-#define CONFIG_MSZH_DECODER 0 +-#define CONFIG_MTAF_DEMUXER 0 +-#define CONFIG_MTS2_DECODER 0 +-#define CONFIG_MTV_DEMUXER 0 +-#define CONFIG_MUSX_DEMUXER 0 +-#define CONFIG_MUXERS 0 +-#define CONFIG_MVC1_DECODER 0 +-#define CONFIG_MVC2_DECODER 0 +-#define CONFIG_MV_DEMUXER 0 +-#define CONFIG_MVI_DEMUXER 0 +-#define CONFIG_MWSC_DECODER 0 +-#define CONFIG_MXF_D10_MUXER 0 +-#define CONFIG_MXF_DEMUXER 0 +-#define CONFIG_MXF_MUXER 0 +-#define CONFIG_MXF_OPATOM_MUXER 0 +-#define CONFIG_MXG_DEMUXER 0 +-#define CONFIG_MXPEG_DECODER 0 +-#define CONFIG_NC_DEMUXER 0 +-#define CONFIG_NEGATE_FILTER 0 +-#define CONFIG_NELLYMOSER_DECODER 0 +-#define CONFIG_NELLYMOSER_ENCODER 0 +-#define CONFIG_NISTSPHERE_DEMUXER 0 +-#define CONFIG_NLMEANS_FILTER 0 +-#define CONFIG_NLMEANS_OPENCL_FILTER 0 +-#define CONFIG_NNEDI_FILTER 0 +-#define CONFIG_NOFORMAT_FILTER 0 +-#define CONFIG_NOISE_BSF 0 +-#define CONFIG_NOISE_FILTER 0 +-#define CONFIG_NORMALIZE_FILTER 0 +-#define CONFIG_NSP_DEMUXER 0 +-#define CONFIG_NSV_DEMUXER 0 +-#define CONFIG_NULL_FILTER 0 +-#define CONFIG_NULL_MUXER 0 +-#define CONFIG_NULLSINK_FILTER 0 +-#define CONFIG_NULLSRC_FILTER 0 +-#define CONFIG_NUT_DEMUXER 0 +-#define CONFIG_NUT_MUXER 0 +-#define CONFIG_NUV_DECODER 0 +-#define CONFIG_NUV_DEMUXER 0 +-#define CONFIG_NVENC_ENCODER 0 +-#define CONFIG_NVENC_H264_ENCODER 0 +-#define CONFIG_NVENC_HEVC_ENCODER 0 +-#define CONFIG_OCR_FILTER 0 +-#define CONFIG_OCV_FILTER 0 +-#define CONFIG_OGA_MUXER 0 +-#define CONFIG_OGG_DEMUXER 0 +-#define CONFIG_OGG_MUXER 0 +-#define CONFIG_OGV_MUXER 0 +-#define CONFIG_OMA_DEMUXER 0 +-#define CONFIG_OMA_MUXER 0 +-#define CONFIG_ON2AVC_DECODER 0 +-#define CONFIG_OPENAL_INDEV 0 +-#define CONFIG_OPENCLSRC_FILTER 0 +-#define CONFIG_OPENGL_OUTDEV 0 +-#define CONFIG_OPUS_DECODER 0 +-#define CONFIG_OPUS_ENCODER 0 +-#define CONFIG_OPUS_MUXER 0 +-#define CONFIG_OPUS_PARSER 0 +-#define CONFIG_OSCILLOSCOPE_FILTER 0 +-#define CONFIG_OSS_INDEV 0 +-#define CONFIG_OSS_OUTDEV 0 +-#define CONFIG_OUTDEVS 0 +-#define CONFIG_OVERLAY_FILTER 0 +-#define CONFIG_OVERLAY_OPENCL_FILTER 0 +-#define CONFIG_OVERLAY_QSV_FILTER 0 +-#define CONFIG_OWDENOISE_FILTER 0 +-#define CONFIG_PAD_FILTER 0 +-#define CONFIG_PAF_AUDIO_DECODER 0 +-#define CONFIG_PAF_DEMUXER 0 +-#define CONFIG_PAF_VIDEO_DECODER 0 +-#define CONFIG_PAL100BARS_FILTER 0 +-#define CONFIG_PAL75BARS_FILTER 0 +-#define CONFIG_PALETTEGEN_FILTER 0 +-#define CONFIG_PALETTEUSE_FILTER 0 +-#define CONFIG_PAM_DECODER 0 +-#define CONFIG_PAM_ENCODER 0 +-#define CONFIG_PAN_FILTER 0 +-#define CONFIG_PBM_DECODER 0 +-#define CONFIG_PBM_ENCODER 0 +-#define CONFIG_PCM_ALAW_AT_DECODER 0 +-#define CONFIG_PCM_ALAW_AT_ENCODER 0 +-#define CONFIG_PCM_ALAW_DECODER 0 +-#define CONFIG_PCM_ALAW_DEMUXER 0 +-#define CONFIG_PCM_ALAW_ENCODER 0 +-#define CONFIG_PCM_ALAW_MUXER 0 +-#define CONFIG_PCM_BLURAY_DECODER 0 +-#define CONFIG_PCM_DVD_DECODER 0 +-#define CONFIG_PCM_DVD_ENCODER 0 +-#define CONFIG_PCM_F16LE_DECODER 0 +-#define CONFIG_PCM_F24LE_DECODER 0 +-#define CONFIG_PCM_F32BE_DECODER 0 +-#define CONFIG_PCM_F32BE_DEMUXER 0 +-#define CONFIG_PCM_F32BE_ENCODER 0 +-#define CONFIG_PCM_F32BE_MUXER 0 +-#define CONFIG_PCM_F32LE_DECODER 0 +-#define CONFIG_PCM_F32LE_DEMUXER 0 +-#define CONFIG_PCM_F32LE_ENCODER 0 +-#define CONFIG_PCM_F32LE_MUXER 0 +-#define CONFIG_PCM_F64BE_DECODER 0 +-#define CONFIG_PCM_F64BE_DEMUXER 0 +-#define CONFIG_PCM_F64BE_ENCODER 0 +-#define CONFIG_PCM_F64BE_MUXER 0 +-#define CONFIG_PCM_F64LE_DECODER 0 +-#define CONFIG_PCM_F64LE_DEMUXER 0 +-#define CONFIG_PCM_F64LE_ENCODER 0 +-#define CONFIG_PCM_F64LE_MUXER 0 +-#define CONFIG_PCM_LXF_DECODER 0 +-#define CONFIG_PCM_MULAW_AT_DECODER 0 +-#define CONFIG_PCM_MULAW_AT_ENCODER 0 +-#define CONFIG_PCM_MULAW_DECODER 0 +-#define CONFIG_PCM_MULAW_DEMUXER 0 +-#define CONFIG_PCM_MULAW_ENCODER 0 +-#define CONFIG_PCM_MULAW_MUXER 0 +-#define CONFIG_PCM_S16BE_DECODER 0 +-#define CONFIG_PCM_S16BE_DEMUXER 0 +-#define CONFIG_PCM_S16BE_ENCODER 0 +-#define CONFIG_PCM_S16BE_MUXER 0 +-#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 +-#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 +-#define CONFIG_PCM_S16LE_DECODER 0 +-#define CONFIG_PCM_S16LE_DEMUXER 0 +-#define CONFIG_PCM_S16LE_ENCODER 0 +-#define CONFIG_PCM_S16LE_MUXER 0 +-#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 +-#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 +-#define CONFIG_PCM_S24BE_DECODER 0 +-#define CONFIG_PCM_S24BE_DEMUXER 0 +-#define CONFIG_PCM_S24BE_ENCODER 0 +-#define CONFIG_PCM_S24BE_MUXER 0 +-#define CONFIG_PCM_S24DAUD_DECODER 0 +-#define CONFIG_PCM_S24DAUD_ENCODER 0 +-#define CONFIG_PCM_S24LE_DECODER 0 +-#define CONFIG_PCM_S24LE_DEMUXER 0 +-#define CONFIG_PCM_S24LE_ENCODER 0 +-#define CONFIG_PCM_S24LE_MUXER 0 +-#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 +-#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 +-#define CONFIG_PCM_S32BE_DECODER 0 +-#define CONFIG_PCM_S32BE_DEMUXER 0 +-#define CONFIG_PCM_S32BE_ENCODER 0 +-#define CONFIG_PCM_S32BE_MUXER 0 +-#define CONFIG_PCM_S32LE_DECODER 0 +-#define CONFIG_PCM_S32LE_DEMUXER 0 +-#define CONFIG_PCM_S32LE_ENCODER 0 +-#define CONFIG_PCM_S32LE_MUXER 0 +-#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 +-#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 +-#define CONFIG_PCM_S64BE_DECODER 0 +-#define CONFIG_PCM_S64BE_ENCODER 0 +-#define CONFIG_PCM_S64LE_DECODER 0 +-#define CONFIG_PCM_S64LE_ENCODER 0 +-#define CONFIG_PCM_S8_DECODER 0 +-#define CONFIG_PCM_S8_DEMUXER 0 +-#define CONFIG_PCM_S8_ENCODER 0 +-#define CONFIG_PCM_S8_MUXER 0 +-#define CONFIG_PCM_S8_PLANAR_DECODER 0 +-#define CONFIG_PCM_S8_PLANAR_ENCODER 0 +-#define CONFIG_PCM_U16BE_DECODER 0 +-#define CONFIG_PCM_U16BE_DEMUXER 0 +-#define CONFIG_PCM_U16BE_ENCODER 0 +-#define CONFIG_PCM_U16BE_MUXER 0 +-#define CONFIG_PCM_U16LE_DECODER 0 +-#define CONFIG_PCM_U16LE_DEMUXER 0 +-#define CONFIG_PCM_U16LE_ENCODER 0 +-#define CONFIG_PCM_U16LE_MUXER 0 +-#define CONFIG_PCM_U24BE_DECODER 0 +-#define CONFIG_PCM_U24BE_DEMUXER 0 +-#define CONFIG_PCM_U24BE_ENCODER 0 +-#define CONFIG_PCM_U24BE_MUXER 0 +-#define CONFIG_PCM_U24LE_DECODER 0 +-#define CONFIG_PCM_U24LE_DEMUXER 0 +-#define CONFIG_PCM_U24LE_ENCODER 0 +-#define CONFIG_PCM_U24LE_MUXER 0 +-#define CONFIG_PCM_U32BE_DECODER 0 +-#define CONFIG_PCM_U32BE_DEMUXER 0 +-#define CONFIG_PCM_U32BE_ENCODER 0 +-#define CONFIG_PCM_U32BE_MUXER 0 +-#define CONFIG_PCM_U32LE_DECODER 0 +-#define CONFIG_PCM_U32LE_DEMUXER 0 +-#define CONFIG_PCM_U32LE_ENCODER 0 +-#define CONFIG_PCM_U32LE_MUXER 0 +-#define CONFIG_PCM_U8_DECODER 0 +-#define CONFIG_PCM_U8_DEMUXER 0 +-#define CONFIG_PCM_U8_ENCODER 0 +-#define CONFIG_PCM_U8_MUXER 0 +-#define CONFIG_PCM_VIDC_DECODER 0 +-#define CONFIG_PCM_VIDC_DEMUXER 0 +-#define CONFIG_PCM_VIDC_ENCODER 0 +-#define CONFIG_PCM_VIDC_MUXER 0 +-#define CONFIG_PCM_ZORK_DECODER 0 +-#define CONFIG_PCX_DECODER 0 +-#define CONFIG_PCX_ENCODER 0 +-#define CONFIG_PERMS_FILTER 0 +-#define CONFIG_PERSPECTIVE_FILTER 0 +-#define CONFIG_PGM_DECODER 0 +-#define CONFIG_PGM_ENCODER 0 +-#define CONFIG_PGMYUV_DECODER 0 +-#define CONFIG_PGMYUV_ENCODER 0 +-#define CONFIG_PGSSUB_DECODER 0 +-#define CONFIG_PHASE_FILTER 0 +-#define CONFIG_PICTOR_DECODER 0 +-#define CONFIG_PIPE_PROTOCOL 0 +-#define CONFIG_PIXDESCTEST_FILTER 0 +-#define CONFIG_PIXLET_DECODER 0 +-#define CONFIG_PIXSCOPE_FILTER 0 +-#define CONFIG_PJS_DECODER 0 +-#define CONFIG_PJS_DEMUXER 0 +-#define CONFIG_PMP_DEMUXER 0 +-#define CONFIG_PNG_DECODER 0 +-#define CONFIG_PNG_ENCODER 0 +-#define CONFIG_PNG_PARSER 0 +-#define CONFIG_PNM_PARSER 0 +-#define CONFIG_PP7_FILTER 0 +-#define CONFIG_PP_FILTER 0 +-#define CONFIG_PPM_DECODER 0 +-#define CONFIG_PPM_ENCODER 0 +-#define CONFIG_PREMULTIPLY_FILTER 0 +-#define CONFIG_PREWITT_FILTER 0 +-#define CONFIG_PREWITT_OPENCL_FILTER 0 +-#define CONFIG_PROCAMP_VAAPI_FILTER 0 +-#define CONFIG_PROGRAM_OPENCL_FILTER 0 +-#define CONFIG_PROMPEG_PROTOCOL 0 +-#define CONFIG_PRORES_AW_ENCODER 0 +-#define CONFIG_PRORES_DECODER 0 +-#define CONFIG_PRORES_ENCODER 0 +-#define CONFIG_PRORES_KS_ENCODER 0 +-#define CONFIG_PRORES_METADATA_BSF 0 +-#define CONFIG_PROSUMER_DECODER 0 +-#define CONFIG_PROTOCOLS 0 +-#define CONFIG_PSD_DECODER 0 +-#define CONFIG_PSEUDOCOLOR_FILTER 0 +-#define CONFIG_PSNR_FILTER 0 +-#define CONFIG_PSP_MUXER 0 +-#define CONFIG_PTX_DECODER 0 +-#define CONFIG_PULLUP_FILTER 0 +-#define CONFIG_PULSE_INDEV 0 +-#define CONFIG_PULSE_OUTDEV 0 +-#define CONFIG_PVA_DEMUXER 0 +-#define CONFIG_PVF_DEMUXER 0 +-#define CONFIG_QCELP_DECODER 0 +-#define CONFIG_QCP_DEMUXER 0 +-#define CONFIG_QDM2_AT_DECODER 0 +-#define CONFIG_QDM2_DECODER 0 +-#define CONFIG_QDMC_AT_DECODER 0 +-#define CONFIG_QDMC_DECODER 0 +-#define CONFIG_QDRAW_DECODER 0 +-#define CONFIG_QPEG_DECODER 0 +-#define CONFIG_QP_FILTER 0 +-#define CONFIG_QTRLE_DECODER 0 +-#define CONFIG_QTRLE_ENCODER 0 +-#define CONFIG_R10K_DECODER 0 +-#define CONFIG_R10K_ENCODER 0 +-#define CONFIG_R210_DECODER 0 +-#define CONFIG_R210_ENCODER 0 +-#define CONFIG_R3D_DEMUXER 0 +-#define CONFIG_RA_144_DECODER 0 +-#define CONFIG_RA_144_ENCODER 0 +-#define CONFIG_RA_288_DECODER 0 +-#define CONFIG_RALF_DECODER 0 +-#define CONFIG_RANDOM_FILTER 0 +-#define CONFIG_RASC_DECODER 0 +-#define CONFIG_RAWVIDEO_DECODER 0 +-#define CONFIG_RAWVIDEO_DEMUXER 0 +-#define CONFIG_RAWVIDEO_ENCODER 0 +-#define CONFIG_RAWVIDEO_MUXER 0 +-#define CONFIG_READEIA608_FILTER 0 +-#define CONFIG_READVITC_FILTER 0 +-#define CONFIG_REALTEXT_DECODER 0 +-#define CONFIG_REALTEXT_DEMUXER 0 +-#define CONFIG_REALTIME_FILTER 0 +-#define CONFIG_REDSPARK_DEMUXER 0 +-#define CONFIG_REMAP_FILTER 0 +-#define CONFIG_REMOVE_EXTRADATA_BSF 0 +-#define CONFIG_REMOVEGRAIN_FILTER 0 +-#define CONFIG_REMOVELOGO_FILTER 0 +-#define CONFIG_REPEATFIELDS_FILTER 0 +-#define CONFIG_REPLAYGAIN_FILTER 0 +-#define CONFIG_RESAMPLE_FILTER 0 +-#define CONFIG_REVERSE_FILTER 0 +-#define CONFIG_RGBASHIFT_FILTER 0 +-#define CONFIG_RGBTESTSRC_FILTER 0 +-#define CONFIG_RL2_DECODER 0 +-#define CONFIG_RL2_DEMUXER 0 +-#define CONFIG_RM_DEMUXER 0 +-#define CONFIG_RM_MUXER 0 +-#define CONFIG_ROBERTS_FILTER 0 +-#define CONFIG_ROBERTS_OPENCL_FILTER 0 +-#define CONFIG_ROQ_DECODER 0 +-#define CONFIG_ROQ_DEMUXER 0 +-#define CONFIG_ROQ_DPCM_DECODER 0 +-#define CONFIG_ROQ_DPCM_ENCODER 0 +-#define CONFIG_ROQ_ENCODER 0 +-#define CONFIG_ROQ_MUXER 0 +-#define CONFIG_ROTATE_FILTER 0 +-#define CONFIG_RPL_DEMUXER 0 +-#define CONFIG_RPZA_DECODER 0 +-#define CONFIG_RSCC_DECODER 0 +-#define CONFIG_RSD_DEMUXER 0 +-#define CONFIG_RSO_DEMUXER 0 +-#define CONFIG_RSO_MUXER 0 +-#define CONFIG_RTMPE_PROTOCOL 0 +-#define CONFIG_RTMP_PROTOCOL 0 +-#define CONFIG_RTMPS_PROTOCOL 0 +-#define CONFIG_RTMPTE_PROTOCOL 0 +-#define CONFIG_RTMPT_PROTOCOL 0 +-#define CONFIG_RTMPTS_PROTOCOL 0 +-#define CONFIG_RTP_DEMUXER 0 +-#define CONFIG_RTP_MPEGTS_MUXER 0 +-#define CONFIG_RTP_MUXER 0 +-#define CONFIG_RTP_PROTOCOL 0 +-#define CONFIG_RTSP_DEMUXER 0 +-#define CONFIG_RTSP_MUXER 0 +-#define CONFIG_RUBBERBAND_FILTER 0 +-#define CONFIG_RV10_DECODER 0 +-#define CONFIG_RV10_ENCODER 0 +-#define CONFIG_RV20_DECODER 0 +-#define CONFIG_RV20_ENCODER 0 +-#define CONFIG_RV30_DECODER 0 +-#define CONFIG_RV30_PARSER 0 +-#define CONFIG_RV40_DECODER 0 +-#define CONFIG_RV40_PARSER 0 +-#define CONFIG_S302M_DECODER 0 +-#define CONFIG_S302M_ENCODER 0 +-#define CONFIG_S337M_DEMUXER 0 +-#define CONFIG_SAB_FILTER 0 +-#define CONFIG_SAMI_DECODER 0 +-#define CONFIG_SAMI_DEMUXER 0 +-#define CONFIG_SANM_DECODER 0 +-#define CONFIG_SAP_DEMUXER 0 +-#define CONFIG_SAP_MUXER 0 +-#define CONFIG_SBC_DECODER 0 +-#define CONFIG_SBC_DEMUXER 0 +-#define CONFIG_SBC_ENCODER 0 +-#define CONFIG_SBC_MUXER 0 +-#define CONFIG_SBC_PARSER 0 +-#define CONFIG_SBG_DEMUXER 0 +-#define CONFIG_SCALE2REF_FILTER 0 +-#define CONFIG_SCALE_CUDA_FILTER 0 +-#define CONFIG_SCALE_FILTER 0 +-#define CONFIG_SCALE_NPP_FILTER 0 +-#define CONFIG_SCALE_QSV_FILTER 0 +-#define CONFIG_SCALE_VAAPI_FILTER 0 +-#define CONFIG_SCC_DEMUXER 0 +-#define CONFIG_SCC_MUXER 0 +-#define CONFIG_SCPR_DECODER 0 +-#define CONFIG_SCREENPRESSO_DECODER 0 +-#define CONFIG_SCTP_PROTOCOL 0 +-#define CONFIG_SDL2_OUTDEV 0 +-#define CONFIG_SDP_DEMUXER 0 +-#define CONFIG_SDR2_DEMUXER 0 +-#define CONFIG_SDS_DEMUXER 0 +-#define CONFIG_SDX2_DPCM_DECODER 0 +-#define CONFIG_SDX_DEMUXER 0 +-#define CONFIG_SEGAFILM_DEMUXER 0 +-#define CONFIG_SEGAFILM_MUXER 0 +-#define CONFIG_SEGMENT_MUXER 0 +-#define CONFIG_SELECT_FILTER 0 +-#define CONFIG_SELECTIVECOLOR_FILTER 0 +-#define CONFIG_SENDCMD_FILTER 0 +-#define CONFIG_SEPARATEFIELDS_FILTER 0 +-#define CONFIG_SER_DEMUXER 0 +-#define CONFIG_SETDAR_FILTER 0 +-#define CONFIG_SETFIELD_FILTER 0 +-#define CONFIG_SETPARAMS_FILTER 0 +-#define CONFIG_SETPTS_FILTER 0 +-#define CONFIG_SETRANGE_FILTER 0 +-#define CONFIG_SETSAR_FILTER 0 +-#define CONFIG_SETTB_FILTER 0 +-#define CONFIG_SGI_DECODER 0 +-#define CONFIG_SGI_ENCODER 0 +-#define CONFIG_SGIRLE_DECODER 0 +-#define CONFIG_SHARPNESS_VAAPI_FILTER 0 +-#define CONFIG_SHEERVIDEO_DECODER 0 +-#define CONFIG_SHORTEN_DECODER 0 +-#define CONFIG_SHORTEN_DEMUXER 0 +-#define CONFIG_SHOWCQT_FILTER 0 +-#define CONFIG_SHOWFREQS_FILTER 0 +-#define CONFIG_SHOWINFO_FILTER 0 +-#define CONFIG_SHOWPALETTE_FILTER 0 +-#define CONFIG_SHOWSPATIAL_FILTER 0 +-#define CONFIG_SHOWSPECTRUM_FILTER 0 +-#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 +-#define CONFIG_SHOWVOLUME_FILTER 0 +-#define CONFIG_SHOWWAVES_FILTER 0 +-#define CONFIG_SHOWWAVESPIC_FILTER 0 +-#define CONFIG_SHUFFLEFRAMES_FILTER 0 +-#define CONFIG_SHUFFLEPLANES_FILTER 0 +-#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 +-#define CONFIG_SIDECHAINGATE_FILTER 0 +-#define CONFIG_SIDEDATA_FILTER 0 +-#define CONFIG_SIFF_DEMUXER 0 +-#define CONFIG_SIGNALSTATS_FILTER 0 +-#define CONFIG_SIGNATURE_FILTER 0 +-#define CONFIG_SILENCEDETECT_FILTER 0 +-#define CONFIG_SILENCEREMOVE_FILTER 0 +-#define CONFIG_SINC_FILTER 0 +-#define CONFIG_SINE_FILTER 0 +-#define CONFIG_SINGLEJPEG_MUXER 0 +-#define CONFIG_SIPR_DECODER 0 +-#define CONFIG_SIPR_PARSER 0 +-#define CONFIG_SLN_DEMUXER 0 +-#define CONFIG_SMACKAUD_DECODER 0 +-#define CONFIG_SMACKER_DECODER 0 +-#define CONFIG_SMACKER_DEMUXER 0 +-#define CONFIG_SMARTBLUR_FILTER 0 +-#define CONFIG_SMC_DECODER 0 +-#define CONFIG_SMJPEG_DEMUXER 0 +-#define CONFIG_SMJPEG_MUXER 0 +-#define CONFIG_SMOOTHSTREAMING_MUXER 0 +-#define CONFIG_SMPTEBARS_FILTER 0 +-#define CONFIG_SMPTEHDBARS_FILTER 0 +-#define CONFIG_SMUSH_DEMUXER 0 +-#define CONFIG_SMVJPEG_DECODER 0 +-#define CONFIG_SNDIO_INDEV 0 +-#define CONFIG_SNDIO_OUTDEV 0 +-#define CONFIG_SNOW_DECODER 0 +-#define CONFIG_SNOW_ENCODER 0 +-#define CONFIG_SOBEL_FILTER 0 +-#define CONFIG_SOBEL_OPENCL_FILTER 0 +-#define CONFIG_SOFALIZER_FILTER 0 +-#define CONFIG_SOL_DEMUXER 0 +-#define CONFIG_SOL_DPCM_DECODER 0 +-#define CONFIG_SONIC_DECODER 0 +-#define CONFIG_SONIC_ENCODER 0 +-#define CONFIG_SONIC_LS_ENCODER 0 +-#define CONFIG_SOX_DEMUXER 0 +-#define CONFIG_SOX_MUXER 0 +-#define CONFIG_SP5X_DECODER 0 +-#define CONFIG_SPDIF_DEMUXER 0 +-#define CONFIG_SPDIF_MUXER 0 +-#define CONFIG_SPECTRUMSYNTH_FILTER 0 +-#define CONFIG_SPEEDHQ_DECODER 0 +-#define CONFIG_SPLIT_FILTER 0 +-#define CONFIG_SPP_FILTER 0 +-#define CONFIG_SPX_MUXER 0 +-#define CONFIG_SR_FILTER 0 +-#define CONFIG_SRGC_DECODER 0 +-#define CONFIG_SRT_DECODER 0 +-#define CONFIG_SRT_DEMUXER 0 +-#define CONFIG_SRT_ENCODER 0 +-#define CONFIG_SRT_MUXER 0 +-#define CONFIG_SRTP_PROTOCOL 0 +-#define CONFIG_SSA_DECODER 0 +-#define CONFIG_SSA_ENCODER 0 +-#define CONFIG_SSIM_FILTER 0 +-#define CONFIG_STEREO3D_FILTER 0 +-#define CONFIG_STEREOTOOLS_FILTER 0 +-#define CONFIG_STEREOWIDEN_FILTER 0 +-#define CONFIG_STL_DECODER 0 +-#define CONFIG_STL_DEMUXER 0 +-#define CONFIG_STR_DEMUXER 0 +-#define CONFIG_STREAM_SEGMENT_MUXER 0 +-#define CONFIG_STREAMSELECT_FILTER 0 +-#define CONFIG_SUBFILE_PROTOCOL 0 +-#define CONFIG_SUBRIP_DECODER 0 +-#define CONFIG_SUBRIP_ENCODER 0 +-#define CONFIG_SUBTITLES_FILTER 0 +-#define CONFIG_SUBVIEWER1_DECODER 0 +-#define CONFIG_SUBVIEWER1_DEMUXER 0 +-#define CONFIG_SUBVIEWER_DECODER 0 +-#define CONFIG_SUBVIEWER_DEMUXER 0 +-#define CONFIG_SUNRAST_DECODER 0 +-#define CONFIG_SUNRAST_ENCODER 0 +-#define CONFIG_SUP_DEMUXER 0 +-#define CONFIG_SUPER2XSAI_FILTER 0 +-#define CONFIG_SUPEREQUALIZER_FILTER 0 +-#define CONFIG_SUP_MUXER 0 +-#define CONFIG_SURROUND_FILTER 0 +-#define CONFIG_SVAG_DEMUXER 0 +-#define CONFIG_SVQ1_DECODER 0 +-#define CONFIG_SVQ1_ENCODER 0 +-#define CONFIG_SVQ3_DECODER 0 +-#define CONFIG_SWAPRECT_FILTER 0 +-#define CONFIG_SWAPUV_FILTER 0 +-#define CONFIG_SWF_DEMUXER 0 +-#define CONFIG_SWF_MUXER 0 +-#define CONFIG_TAK_DECODER 0 +-#define CONFIG_TAK_DEMUXER 0 +-#define CONFIG_TAK_PARSER 0 +-#define CONFIG_TARGA_DECODER 0 +-#define CONFIG_TARGA_ENCODER 0 +-#define CONFIG_TARGA_Y216_DECODER 0 +-#define CONFIG_TBLEND_FILTER 0 +-#define CONFIG_TCP_PROTOCOL 0 +-#define CONFIG_TDSC_DECODER 0 +-#define CONFIG_TEDCAPTIONS_DEMUXER 0 +-#define CONFIG_TEE_MUXER 0 +-#define CONFIG_TEE_PROTOCOL 0 +-#define CONFIG_TELECINE_FILTER 0 +-#define CONFIG_TESTSRC2_FILTER 0 +-#define CONFIG_TESTSRC_FILTER 0 +-#define CONFIG_TEXT2MOVSUB_BSF 0 +-#define CONFIG_TEXT_DECODER 0 +-#define CONFIG_TEXT_ENCODER 0 +-#define CONFIG_TG2_MUXER 0 +-#define CONFIG_TGP_MUXER 0 +-#define CONFIG_THEORA_DECODER 0 +-#define CONFIG_THP_DECODER 0 +-#define CONFIG_THP_DEMUXER 0 +-#define CONFIG_THREEDOSTR_DEMUXER 0 +-#define CONFIG_THRESHOLD_FILTER 0 +-#define CONFIG_THUMBNAIL_CUDA_FILTER 0 +-#define CONFIG_THUMBNAIL_FILTER 0 +-#define CONFIG_TIERTEXSEQ_DEMUXER 0 +-#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 +-#define CONFIG_TIFF_DECODER 0 +-#define CONFIG_TIFF_ENCODER 0 +-#define CONFIG_TILE_FILTER 0 +-#define CONFIG_TINTERLACE_FILTER 0 +-#define CONFIG_TLS_PROTOCOL 0 +-#define CONFIG_TLUT2_FILTER 0 +-#define CONFIG_TMIX_FILTER 0 +-#define CONFIG_TMV_DECODER 0 +-#define CONFIG_TMV_DEMUXER 0 +-#define CONFIG_TONEMAP_FILTER 0 +-#define CONFIG_TONEMAP_OPENCL_FILTER 0 +-#define CONFIG_TPAD_FILTER 0 +-#define CONFIG_TRACE_HEADERS_BSF 0 +-#define CONFIG_TRANSPOSE_FILTER 0 +-#define CONFIG_TRANSPOSE_NPP_FILTER 0 +-#define CONFIG_TRANSPOSE_OPENCL_FILTER 0 +-#define CONFIG_TRANSPOSE_VAAPI_FILTER 0 +-#define CONFIG_TREBLE_FILTER 0 +-#define CONFIG_TREMOLO_FILTER 0 +-#define CONFIG_TRIM_FILTER 0 +-#define CONFIG_TRUEHD_CORE_BSF 0 +-#define CONFIG_TRUEHD_DECODER 0 +-#define CONFIG_TRUEHD_DEMUXER 0 +-#define CONFIG_TRUEHD_ENCODER 0 +-#define CONFIG_TRUEHD_MUXER 0 +-#define CONFIG_TRUEMOTION1_DECODER 0 +-#define CONFIG_TRUEMOTION2_DECODER 0 +-#define CONFIG_TRUEMOTION2RT_DECODER 0 +-#define CONFIG_TRUESPEECH_DECODER 0 +-#define CONFIG_TSCC2_DECODER 0 +-#define CONFIG_TSCC_DECODER 0 +-#define CONFIG_TTA_DECODER 0 +-#define CONFIG_TTA_DEMUXER 0 +-#define CONFIG_TTA_ENCODER 0 +-#define CONFIG_TTA_MUXER 0 +-#define CONFIG_TTY_DEMUXER 0 +-#define CONFIG_TWINVQ_DECODER 0 +-#define CONFIG_TXD_DECODER 0 +-#define CONFIG_TXD_DEMUXER 0 +-#define CONFIG_TY_DEMUXER 0 +-#define CONFIG_UDPLITE_PROTOCOL 0 +-#define CONFIG_UDP_PROTOCOL 0 +-#define CONFIG_ULTI_DECODER 0 +-#define CONFIG_UNCODEDFRAMECRC_MUXER 0 +-#define CONFIG_UNIX_PROTOCOL 0 +-#define CONFIG_UNPREMULTIPLY_FILTER 0 +-#define CONFIG_UNSHARP_FILTER 0 +-#define CONFIG_UNSHARP_OPENCL_FILTER 0 +-#define CONFIG_USPP_FILTER 0 +-#define CONFIG_UTVIDEO_DECODER 0 +-#define CONFIG_UTVIDEO_ENCODER 0 +-#define CONFIG_V210_DECODER 0 +-#define CONFIG_V210_DEMUXER 0 +-#define CONFIG_V210_ENCODER 0 +-#define CONFIG_V210X_DECODER 0 +-#define CONFIG_V210X_DEMUXER 0 +-#define CONFIG_V308_DECODER 0 +-#define CONFIG_V308_ENCODER 0 +-#define CONFIG_V408_DECODER 0 +-#define CONFIG_V408_ENCODER 0 +-#define CONFIG_V410_DECODER 0 +-#define CONFIG_V410_ENCODER 0 +-#define CONFIG_V4L2_INDEV 0 +-#define CONFIG_V4L2_OUTDEV 0 +-#define CONFIG_VAG_DEMUXER 0 +-#define CONFIG_VAGUEDENOISER_FILTER 0 +-#define CONFIG_VAPOURSYNTH_DEMUXER 0 +-#define CONFIG_VB_DECODER 0 +-#define CONFIG_VBLE_DECODER 0 +-#define CONFIG_VC1_CRYSTALHD_DECODER 0 +-#define CONFIG_VC1_CUVID_DECODER 0 +-#define CONFIG_VC1_D3D11VA2_HWACCEL 0 +-#define CONFIG_VC1_D3D11VA_HWACCEL 0 +-#define CONFIG_VC1_DECODER 0 +-#define CONFIG_VC1_DEMUXER 0 +-#define CONFIG_VC1_DXVA2_HWACCEL 0 +-#define CONFIG_VC1IMAGE_DECODER 0 +-#define CONFIG_VC1_MMAL_DECODER 0 +-#define CONFIG_VC1_MUXER 0 +-#define CONFIG_VC1_NVDEC_HWACCEL 0 +-#define CONFIG_VC1_PARSER 0 +-#define CONFIG_VC1_QSV_DECODER 0 +-#define CONFIG_VC1T_DEMUXER 0 +-#define CONFIG_VC1T_MUXER 0 +-#define CONFIG_VC1_V4L2M2M_DECODER 0 +-#define CONFIG_VC1_VAAPI_HWACCEL 0 +-#define CONFIG_VC1_VDPAU_HWACCEL 0 +-#define CONFIG_VC2_ENCODER 0 +-#define CONFIG_VCR1_DECODER 0 +-#define CONFIG_VECTORSCOPE_FILTER 0 +-#define CONFIG_VFLIP_FILTER 0 +-#define CONFIG_VFRDET_FILTER 0 +-#define CONFIG_VFWCAP_INDEV 0 +-#define CONFIG_VIBRANCE_FILTER 0 +-#define CONFIG_VIBRATO_FILTER 0 +-#define CONFIG_VIDSTABDETECT_FILTER 0 +-#define CONFIG_VIDSTABTRANSFORM_FILTER 0 +-#define CONFIG_VIGNETTE_FILTER 0 +-#define CONFIG_VIVIDAS_DEMUXER 0 +-#define CONFIG_VIVO_DEMUXER 0 +-#define CONFIG_VMAFMOTION_FILTER 0 +-#define CONFIG_VMDAUDIO_DECODER 0 +-#define CONFIG_VMD_DEMUXER 0 +-#define CONFIG_VMDVIDEO_DECODER 0 +-#define CONFIG_VMNC_DECODER 0 +-#define CONFIG_VOBSUB_DEMUXER 0 +-#define CONFIG_VOC_DEMUXER 0 +-#define CONFIG_VOC_MUXER 0 +-#define CONFIG_VOLUMEDETECT_FILTER 0 +-#define CONFIG_VOLUME_FILTER 0 +-#define CONFIG_VORBIS_DECODER 0 +-#define CONFIG_VORBIS_ENCODER 0 +-#define CONFIG_VORBIS_PARSER 0 +-#define CONFIG_VP3_DECODER 0 +-#define CONFIG_VP3_PARSER 0 +-#define CONFIG_VP4_DECODER 0 +-#define CONFIG_VP5_DECODER 0 +-#define CONFIG_VP6A_DECODER 0 +-#define CONFIG_VP6_DECODER 0 +-#define CONFIG_VP6F_DECODER 0 +-#define CONFIG_VP7_DECODER 0 +-#define CONFIG_VP8_CUVID_DECODER 0 +-#define CONFIG_VP8_MEDIACODEC_DECODER 0 +-#define CONFIG_VP8_NVDEC_HWACCEL 0 +-#define CONFIG_VP8_QSV_DECODER 0 +-#define CONFIG_VP8_RKMPP_DECODER 0 +-#define CONFIG_VP8_V4L2M2M_DECODER 0 +-#define CONFIG_VP8_V4L2M2M_ENCODER 0 +-#define CONFIG_VP8_VAAPI_ENCODER 0 +-#define CONFIG_VP8_VAAPI_HWACCEL 0 +-#define CONFIG_VP9_CUVID_DECODER 0 +-#define CONFIG_VP9_D3D11VA2_HWACCEL 0 +-#define CONFIG_VP9_D3D11VA_HWACCEL 0 +-#define CONFIG_VP9_DXVA2_HWACCEL 0 +-#define CONFIG_VP9_MEDIACODEC_DECODER 0 +-#define CONFIG_VP9_METADATA_BSF 0 +-#define CONFIG_VP9_NVDEC_HWACCEL 0 +-#define CONFIG_VP9_RAW_REORDER_BSF 0 +-#define CONFIG_VP9_RKMPP_DECODER 0 +-#define CONFIG_VP9_SUPERFRAME_BSF 0 +-#define CONFIG_VP9_V4L2M2M_DECODER 0 +-#define CONFIG_VP9_VAAPI_ENCODER 0 +-#define CONFIG_VP9_VAAPI_HWACCEL 0 +-#define CONFIG_VP9_VDPAU_HWACCEL 0 +-#define CONFIG_VPK_DEMUXER 0 +-#define CONFIG_VPLAYER_DECODER 0 +-#define CONFIG_VPLAYER_DEMUXER 0 +-#define CONFIG_VPP_QSV_FILTER 0 +-#define CONFIG_VQA_DECODER 0 +-#define CONFIG_VQF_DEMUXER 0 +-#define CONFIG_VSTACK_FILTER 0 +-#define CONFIG_W3FDIF_FILTER 0 +-#define CONFIG_W64_DEMUXER 0 +-#define CONFIG_W64_MUXER 0 +-#define CONFIG_WAV_DEMUXER 0 +-#define CONFIG_WAVEFORM_FILTER 0 +-#define CONFIG_WAV_MUXER 0 +-#define CONFIG_WAVPACK_DECODER 0 +-#define CONFIG_WAVPACK_ENCODER 0 +-#define CONFIG_WC3_DEMUXER 0 +-#define CONFIG_WCMV_DECODER 0 +-#define CONFIG_WEAVE_FILTER 0 +-#define CONFIG_WEBM_CHUNK_MUXER 0 +-#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 +-#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 +-#define CONFIG_WEBM_MUXER 0 +-#define CONFIG_WEBP_DECODER 0 +-#define CONFIG_WEBP_MUXER 0 +-#define CONFIG_WEBVTT_DECODER 0 +-#define CONFIG_WEBVTT_DEMUXER 0 +-#define CONFIG_WEBVTT_ENCODER 0 +-#define CONFIG_WEBVTT_MUXER 0 +-#define CONFIG_WMALOSSLESS_DECODER 0 +-#define CONFIG_WMAPRO_DECODER 0 +-#define CONFIG_WMAV1_DECODER 0 +-#define CONFIG_WMAV1_ENCODER 0 +-#define CONFIG_WMAV2_DECODER 0 +-#define CONFIG_WMAV2_ENCODER 0 +-#define CONFIG_WMAVOICE_DECODER 0 +-#define CONFIG_WMV1_DECODER 0 +-#define CONFIG_WMV1_ENCODER 0 +-#define CONFIG_WMV2_DECODER 0 +-#define CONFIG_WMV2_ENCODER 0 +-#define CONFIG_WMV3_CRYSTALHD_DECODER 0 +-#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 +-#define CONFIG_WMV3_D3D11VA_HWACCEL 0 +-#define CONFIG_WMV3_DECODER 0 +-#define CONFIG_WMV3_DXVA2_HWACCEL 0 +-#define CONFIG_WMV3IMAGE_DECODER 0 +-#define CONFIG_WMV3_NVDEC_HWACCEL 0 +-#define CONFIG_WMV3_VAAPI_HWACCEL 0 +-#define CONFIG_WMV3_VDPAU_HWACCEL 0 +-#define CONFIG_WNV1_DECODER 0 +-#define CONFIG_WRAPPED_AVFRAME_DECODER 0 +-#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 +-#define CONFIG_WSAUD_DEMUXER 0 +-#define CONFIG_WSD_DEMUXER 0 +-#define CONFIG_WS_SND1_DECODER 0 +-#define CONFIG_WSVQA_DEMUXER 0 +-#define CONFIG_WTV_DEMUXER 0 +-#define CONFIG_WTV_MUXER 0 +-#define CONFIG_WV_DEMUXER 0 +-#define CONFIG_WVE_DEMUXER 0 +-#define CONFIG_WV_MUXER 0 +-#define CONFIG_XA_DEMUXER 0 +-#define CONFIG_XAN_DPCM_DECODER 0 +-#define CONFIG_XAN_WC3_DECODER 0 +-#define CONFIG_XAN_WC4_DECODER 0 +-#define CONFIG_XBIN_DECODER 0 +-#define CONFIG_XBIN_DEMUXER 0 +-#define CONFIG_XBM_DECODER 0 +-#define CONFIG_XBM_ENCODER 0 +-#define CONFIG_XBR_FILTER 0 +-#define CONFIG_XCBGRAB_INDEV 0 +-#define CONFIG_XFACE_DECODER 0 +-#define CONFIG_XFACE_ENCODER 0 +-#define CONFIG_XL_DECODER 0 +-#define CONFIG_XMA1_DECODER 0 +-#define CONFIG_XMA2_DECODER 0 +-#define CONFIG_XMA_PARSER 0 +-#define CONFIG_XMEDIAN_FILTER 0 +-#define CONFIG_XMV_DEMUXER 0 +-#define CONFIG_XPM_DECODER 0 +-#define CONFIG_XSTACK_FILTER 0 +-#define CONFIG_XSUB_DECODER 0 +-#define CONFIG_XSUB_ENCODER 0 +-#define CONFIG_XVAG_DEMUXER 0 +-#define CONFIG_XV_OUTDEV 0 +-#define CONFIG_XWD_DECODER 0 +-#define CONFIG_XWD_ENCODER 0 +-#define CONFIG_XWMA_DEMUXER 0 +-#define CONFIG_Y41P_DECODER 0 +-#define CONFIG_Y41P_ENCODER 0 +-#define CONFIG_YADIF_CUDA_FILTER 0 +-#define CONFIG_YADIF_FILTER 0 +-#define CONFIG_YLC_DECODER 0 +-#define CONFIG_YOP_DECODER 0 +-#define CONFIG_YOP_DEMUXER 0 +-#define CONFIG_YUV4_DECODER 0 +-#define CONFIG_YUV4_ENCODER 0 +-#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 +-#define CONFIG_YUV4MPEGPIPE_MUXER 0 +-#define CONFIG_YUVTESTSRC_FILTER 0 +-#define CONFIG_ZERO12V_DECODER 0 +-#define CONFIG_ZEROCODEC_DECODER 0 +-#define CONFIG_ZLIB_DECODER 0 +-#define CONFIG_ZLIB_ENCODER 0 +-#define CONFIG_ZMBV_DECODER 0 +-#define CONFIG_ZMBV_ENCODER 0 +-#define CONFIG_ZMQ_FILTER 0 +-#define CONFIG_ZOOMPAN_FILTER 0 +-#define CONFIG_ZSCALE_FILTER 0 +diff -Naur a/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c +--- a/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c 2023-04-06 12:50:06.969470973 +0200 +@@ -38,8 +38,10 @@ + int cpu_flags = av_get_cpu_flags(); + + if (have_neon(cpu_flags)) { +- s->fft_permute = ff_fft_permute_neon; +- s->fft_calc = ff_fft_calc_neon; ++ if (s->nbits < 17) { ++ s->fft_permute = ff_fft_permute_neon; ++ s->fft_calc = ff_fft_calc_neon; ++ } + #if CONFIG_MDCT + s->imdct_calc = ff_imdct_calc_neon; + s->imdct_half = ff_imdct_half_neon; +diff -Naur a/media/ffvpx/libavcodec/aarch64/fft_neon.S b/media/ffvpx/libavcodec/aarch64/fft_neon.S +--- a/media/ffvpx/libavcodec/aarch64/fft_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/fft_neon.S 2023-04-06 12:50:06.969470973 +0200 +@@ -36,6 +36,7 @@ + + + function fft4_neon ++ AARCH64_VALID_JUMP_TARGET + ld1 {v0.2s,v1.2s,v2.2s,v3.2s}, [x0] + + fadd v4.2s, v0.2s, v1.2s // r0+r1,i0+i1 +@@ -58,6 +59,7 @@ + endfunc + + function fft8_neon ++ AARCH64_VALID_JUMP_TARGET + mov x1, x0 + ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [x0], #32 + ld1 {v16.2s,v17.2s,v18.2s,v19.2s}, [x0] +@@ -108,6 +110,7 @@ + endfunc + + function fft16_neon ++ AARCH64_VALID_JUMP_TARGET + mov x1, x0 + ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [x0], #32 + ld1 {v16.2s,v17.2s,v18.2s,v19.2s}, [x0], #32 +@@ -337,8 +340,9 @@ + + .macro def_fft n, n2, n4 + function fft\n\()_neon, align=6 +- sub sp, sp, #16 +- stp x28, x30, [sp] ++ AARCH64_VALID_JUMP_TARGET ++ AARCH64_SIGN_LINK_REGISTER ++ stp x28, x30, [sp, #-16]! + add x28, x0, #\n4*2*8 + bl fft\n2\()_neon + mov x0, x28 +@@ -347,6 +351,7 @@ + bl fft\n4\()_neon + sub x0, x28, #\n4*2*8 + ldp x28, x30, [sp], #16 ++ AARCH64_VALIDATE_LINK_REGISTER + movrel x4, X(ff_cos_\n) + mov x2, #\n4>>1 + b fft_pass_neon +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c +--- a/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c 2023-04-06 12:50:06.969470973 +0200 +@@ -28,18 +28,18 @@ + + #include "config.h" + +-void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_put_h264_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_put_h264_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_put_h264_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_put_h264_chroma_mc2_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_put_h264_chroma_mc2_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); + +-void ff_avg_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_avg_h264_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_avg_h264_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_avg_h264_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_avg_h264_chroma_mc2_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_avg_h264_chroma_mc2_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); + + av_cold void ff_h264chroma_init_aarch64(H264ChromaContext *c, int bit_depth) +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S b/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S +--- a/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S 2023-04-06 12:50:06.969470973 +0200 +@@ -19,9 +19,11 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config_components.h" ++ + #include "libavutil/aarch64/asm.S" + +-/* chroma_mc8(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ ++/* chroma_mc8(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ + .macro h264_chroma_mc8 type, codec=h264 + function ff_\type\()_\codec\()_chroma_mc8_neon, export=1 + .ifc \type,avg +@@ -191,7 +193,7 @@ + endfunc + .endm + +-/* chroma_mc4(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ ++/* chroma_mc4(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ + .macro h264_chroma_mc4 type, codec=h264 + function ff_\type\()_\codec\()_chroma_mc4_neon, export=1 + .ifc \type,avg +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c +--- a/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c 2023-04-06 12:49:40.248394688 +0200 +@@ -69,19 +69,42 @@ + void ff_h264_idct_dc_add_neon(uint8_t *dst, int16_t *block, int stride); + void ff_h264_idct_add16_neon(uint8_t *dst, const int *block_offset, + int16_t *block, int stride, +- const uint8_t nnzc[6*8]); ++ const uint8_t nnzc[5 * 8]); + void ff_h264_idct_add16intra_neon(uint8_t *dst, const int *block_offset, + int16_t *block, int stride, +- const uint8_t nnzc[6*8]); ++ const uint8_t nnzc[5 * 8]); + void ff_h264_idct_add8_neon(uint8_t **dest, const int *block_offset, + int16_t *block, int stride, +- const uint8_t nnzc[6*8]); ++ const uint8_t nnzc[15 * 8]); + + void ff_h264_idct8_add_neon(uint8_t *dst, int16_t *block, int stride); + void ff_h264_idct8_dc_add_neon(uint8_t *dst, int16_t *block, int stride); + void ff_h264_idct8_add4_neon(uint8_t *dst, const int *block_offset, + int16_t *block, int stride, +- const uint8_t nnzc[6*8]); ++ const uint8_t nnzc[5 * 8]); ++ ++void ff_h264_v_loop_filter_luma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta, int8_t *tc0); ++void ff_h264_h_loop_filter_luma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta, int8_t *tc0); ++void ff_h264_v_loop_filter_luma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta); ++void ff_h264_h_loop_filter_luma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta); ++void ff_h264_v_loop_filter_chroma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta, int8_t *tc0); ++void ff_h264_h_loop_filter_chroma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta, int8_t *tc0); ++void ff_h264_h_loop_filter_chroma422_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, ++ int beta, int8_t *tc0); ++void ff_h264_v_loop_filter_chroma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, ++ int alpha, int beta); ++void ff_h264_h_loop_filter_chroma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, ++ int alpha, int beta); ++void ff_h264_h_loop_filter_chroma422_intra_neon_10(uint8_t *pix, ptrdiff_t stride, ++ int alpha, int beta); ++void ff_h264_h_loop_filter_chroma_mbaff_intra_neon_10(uint8_t *pix, ptrdiff_t stride, ++ int alpha, int beta); + + av_cold void ff_h264dsp_init_aarch64(H264DSPContext *c, const int bit_depth, + const int chroma_format_idc) +@@ -125,5 +148,19 @@ + c->h264_idct8_add = ff_h264_idct8_add_neon; + c->h264_idct8_dc_add = ff_h264_idct8_dc_add_neon; + c->h264_idct8_add4 = ff_h264_idct8_add4_neon; ++ } else if (have_neon(cpu_flags) && bit_depth == 10) { ++ c->h264_v_loop_filter_chroma = ff_h264_v_loop_filter_chroma_neon_10; ++ c->h264_v_loop_filter_chroma_intra = ff_h264_v_loop_filter_chroma_intra_neon_10; ++ ++ if (chroma_format_idc <= 1) { ++ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon_10; ++ c->h264_h_loop_filter_chroma_intra = ff_h264_h_loop_filter_chroma_intra_neon_10; ++ c->h264_h_loop_filter_chroma_mbaff_intra = ff_h264_h_loop_filter_chroma_mbaff_intra_neon_10; ++ } else { ++ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma422_neon_10; ++ c->h264_h_loop_filter_chroma_mbaff = ff_h264_h_loop_filter_chroma_neon_10; ++ c->h264_h_loop_filter_chroma_intra = ff_h264_h_loop_filter_chroma422_intra_neon_10; ++ c->h264_h_loop_filter_chroma_mbaff_intra = ff_h264_h_loop_filter_chroma_intra_neon_10; ++ } + } + } +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S b/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S +--- a/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S 2023-04-06 12:49:40.248394688 +0200 +@@ -110,7 +110,6 @@ + + function ff_h264_v_loop_filter_luma_neon, export=1 + h264_loop_filter_start +- sxtw x1, w1 + + ld1 {v0.16B}, [x0], x1 + ld1 {v2.16B}, [x0], x1 +@@ -134,7 +133,6 @@ + + function ff_h264_h_loop_filter_luma_neon, export=1 + h264_loop_filter_start +- sxtw x1, w1 + + sub x0, x0, #4 + ld1 {v6.8B}, [x0], x1 +@@ -184,199 +182,198 @@ + + + .macro h264_loop_filter_start_intra +- orr w4, w2, w3 +- cbnz w4, 1f +- ret ++ orr w4, w2, w3 ++ cbnz w4, 1f ++ ret + 1: +- sxtw x1, w1 +- dup v30.16b, w2 // alpha +- dup v31.16b, w3 // beta ++ dup v30.16b, w2 // alpha ++ dup v31.16b, w3 // beta + .endm + + .macro h264_loop_filter_luma_intra +- uabd v16.16b, v7.16b, v0.16b // abs(p0 - q0) +- uabd v17.16b, v6.16b, v7.16b // abs(p1 - p0) +- uabd v18.16b, v1.16b, v0.16b // abs(q1 - q0) +- cmhi v19.16b, v30.16b, v16.16b // < alpha +- cmhi v17.16b, v31.16b, v17.16b // < beta +- cmhi v18.16b, v31.16b, v18.16b // < beta +- +- movi v29.16b, #2 +- ushr v30.16b, v30.16b, #2 // alpha >> 2 +- add v30.16b, v30.16b, v29.16b // (alpha >> 2) + 2 +- cmhi v16.16b, v30.16b, v16.16b // < (alpha >> 2) + 2 +- +- and v19.16b, v19.16b, v17.16b +- and v19.16b, v19.16b, v18.16b +- shrn v20.8b, v19.8h, #4 +- mov x4, v20.d[0] +- cbz x4, 9f +- +- ushll v20.8h, v6.8b, #1 +- ushll v22.8h, v1.8b, #1 +- ushll2 v21.8h, v6.16b, #1 +- ushll2 v23.8h, v1.16b, #1 +- uaddw v20.8h, v20.8h, v7.8b +- uaddw v22.8h, v22.8h, v0.8b +- uaddw2 v21.8h, v21.8h, v7.16b +- uaddw2 v23.8h, v23.8h, v0.16b +- uaddw v20.8h, v20.8h, v1.8b +- uaddw v22.8h, v22.8h, v6.8b +- uaddw2 v21.8h, v21.8h, v1.16b +- uaddw2 v23.8h, v23.8h, v6.16b +- +- rshrn v24.8b, v20.8h, #2 // p0'_1 +- rshrn v25.8b, v22.8h, #2 // q0'_1 +- rshrn2 v24.16b, v21.8h, #2 // p0'_1 +- rshrn2 v25.16b, v23.8h, #2 // q0'_1 +- +- uabd v17.16b, v5.16b, v7.16b // abs(p2 - p0) +- uabd v18.16b, v2.16b, v0.16b // abs(q2 - q0) +- cmhi v17.16b, v31.16b, v17.16b // < beta +- cmhi v18.16b, v31.16b, v18.16b // < beta +- +- and v17.16b, v16.16b, v17.16b // if_2 && if_3 +- and v18.16b, v16.16b, v18.16b // if_2 && if_4 +- +- not v30.16b, v17.16b +- not v31.16b, v18.16b +- +- and v30.16b, v30.16b, v19.16b // if_1 && !(if_2 && if_3) +- and v31.16b, v31.16b, v19.16b // if_1 && !(if_2 && if_4) +- +- and v17.16b, v19.16b, v17.16b // if_1 && if_2 && if_3 +- and v18.16b, v19.16b, v18.16b // if_1 && if_2 && if_4 +- +- //calc p, v7, v6, v5, v4, v17, v7, v6, v5, v4 +- uaddl v26.8h, v5.8b, v7.8b +- uaddl2 v27.8h, v5.16b, v7.16b +- uaddw v26.8h, v26.8h, v0.8b +- uaddw2 v27.8h, v27.8h, v0.16b +- add v20.8h, v20.8h, v26.8h +- add v21.8h, v21.8h, v27.8h +- uaddw v20.8h, v20.8h, v0.8b +- uaddw2 v21.8h, v21.8h, v0.16b +- rshrn v20.8b, v20.8h, #3 // p0'_2 +- rshrn2 v20.16b, v21.8h, #3 // p0'_2 +- uaddw v26.8h, v26.8h, v6.8b +- uaddw2 v27.8h, v27.8h, v6.16b +- rshrn v21.8b, v26.8h, #2 // p1'_2 +- rshrn2 v21.16b, v27.8h, #2 // p1'_2 +- uaddl v28.8h, v4.8b, v5.8b +- uaddl2 v29.8h, v4.16b, v5.16b +- shl v28.8h, v28.8h, #1 +- shl v29.8h, v29.8h, #1 +- add v28.8h, v28.8h, v26.8h +- add v29.8h, v29.8h, v27.8h +- rshrn v19.8b, v28.8h, #3 // p2'_2 +- rshrn2 v19.16b, v29.8h, #3 // p2'_2 +- +- //calc q, v0, v1, v2, v3, v18, v0, v1, v2, v3 +- uaddl v26.8h, v2.8b, v0.8b +- uaddl2 v27.8h, v2.16b, v0.16b +- uaddw v26.8h, v26.8h, v7.8b +- uaddw2 v27.8h, v27.8h, v7.16b +- add v22.8h, v22.8h, v26.8h +- add v23.8h, v23.8h, v27.8h +- uaddw v22.8h, v22.8h, v7.8b +- uaddw2 v23.8h, v23.8h, v7.16b +- rshrn v22.8b, v22.8h, #3 // q0'_2 +- rshrn2 v22.16b, v23.8h, #3 // q0'_2 +- uaddw v26.8h, v26.8h, v1.8b +- uaddw2 v27.8h, v27.8h, v1.16b +- rshrn v23.8b, v26.8h, #2 // q1'_2 +- rshrn2 v23.16b, v27.8h, #2 // q1'_2 +- uaddl v28.8h, v2.8b, v3.8b +- uaddl2 v29.8h, v2.16b, v3.16b +- shl v28.8h, v28.8h, #1 +- shl v29.8h, v29.8h, #1 +- add v28.8h, v28.8h, v26.8h +- add v29.8h, v29.8h, v27.8h +- rshrn v26.8b, v28.8h, #3 // q2'_2 +- rshrn2 v26.16b, v29.8h, #3 // q2'_2 +- +- bit v7.16b, v24.16b, v30.16b // p0'_1 +- bit v0.16b, v25.16b, v31.16b // q0'_1 +- bit v7.16b, v20.16b, v17.16b // p0'_2 +- bit v6.16b, v21.16b, v17.16b // p1'_2 +- bit v5.16b, v19.16b, v17.16b // p2'_2 +- bit v0.16b, v22.16b, v18.16b // q0'_2 +- bit v1.16b, v23.16b, v18.16b // q1'_2 +- bit v2.16b, v26.16b, v18.16b // q2'_2 ++ uabd v16.16b, v7.16b, v0.16b // abs(p0 - q0) ++ uabd v17.16b, v6.16b, v7.16b // abs(p1 - p0) ++ uabd v18.16b, v1.16b, v0.16b // abs(q1 - q0) ++ cmhi v19.16b, v30.16b, v16.16b // < alpha ++ cmhi v17.16b, v31.16b, v17.16b // < beta ++ cmhi v18.16b, v31.16b, v18.16b // < beta ++ ++ movi v29.16b, #2 ++ ushr v30.16b, v30.16b, #2 // alpha >> 2 ++ add v30.16b, v30.16b, v29.16b // (alpha >> 2) + 2 ++ cmhi v16.16b, v30.16b, v16.16b // < (alpha >> 2) + 2 ++ ++ and v19.16b, v19.16b, v17.16b ++ and v19.16b, v19.16b, v18.16b ++ shrn v20.8b, v19.8h, #4 ++ mov x4, v20.d[0] ++ cbz x4, 9f ++ ++ ushll v20.8h, v6.8b, #1 ++ ushll v22.8h, v1.8b, #1 ++ ushll2 v21.8h, v6.16b, #1 ++ ushll2 v23.8h, v1.16b, #1 ++ uaddw v20.8h, v20.8h, v7.8b ++ uaddw v22.8h, v22.8h, v0.8b ++ uaddw2 v21.8h, v21.8h, v7.16b ++ uaddw2 v23.8h, v23.8h, v0.16b ++ uaddw v20.8h, v20.8h, v1.8b ++ uaddw v22.8h, v22.8h, v6.8b ++ uaddw2 v21.8h, v21.8h, v1.16b ++ uaddw2 v23.8h, v23.8h, v6.16b ++ ++ rshrn v24.8b, v20.8h, #2 // p0'_1 ++ rshrn v25.8b, v22.8h, #2 // q0'_1 ++ rshrn2 v24.16b, v21.8h, #2 // p0'_1 ++ rshrn2 v25.16b, v23.8h, #2 // q0'_1 ++ ++ uabd v17.16b, v5.16b, v7.16b // abs(p2 - p0) ++ uabd v18.16b, v2.16b, v0.16b // abs(q2 - q0) ++ cmhi v17.16b, v31.16b, v17.16b // < beta ++ cmhi v18.16b, v31.16b, v18.16b // < beta ++ ++ and v17.16b, v16.16b, v17.16b // if_2 && if_3 ++ and v18.16b, v16.16b, v18.16b // if_2 && if_4 ++ ++ not v30.16b, v17.16b ++ not v31.16b, v18.16b ++ ++ and v30.16b, v30.16b, v19.16b // if_1 && !(if_2 && if_3) ++ and v31.16b, v31.16b, v19.16b // if_1 && !(if_2 && if_4) ++ ++ and v17.16b, v19.16b, v17.16b // if_1 && if_2 && if_3 ++ and v18.16b, v19.16b, v18.16b // if_1 && if_2 && if_4 ++ ++ //calc p, v7, v6, v5, v4, v17, v7, v6, v5, v4 ++ uaddl v26.8h, v5.8b, v7.8b ++ uaddl2 v27.8h, v5.16b, v7.16b ++ uaddw v26.8h, v26.8h, v0.8b ++ uaddw2 v27.8h, v27.8h, v0.16b ++ add v20.8h, v20.8h, v26.8h ++ add v21.8h, v21.8h, v27.8h ++ uaddw v20.8h, v20.8h, v0.8b ++ uaddw2 v21.8h, v21.8h, v0.16b ++ rshrn v20.8b, v20.8h, #3 // p0'_2 ++ rshrn2 v20.16b, v21.8h, #3 // p0'_2 ++ uaddw v26.8h, v26.8h, v6.8b ++ uaddw2 v27.8h, v27.8h, v6.16b ++ rshrn v21.8b, v26.8h, #2 // p1'_2 ++ rshrn2 v21.16b, v27.8h, #2 // p1'_2 ++ uaddl v28.8h, v4.8b, v5.8b ++ uaddl2 v29.8h, v4.16b, v5.16b ++ shl v28.8h, v28.8h, #1 ++ shl v29.8h, v29.8h, #1 ++ add v28.8h, v28.8h, v26.8h ++ add v29.8h, v29.8h, v27.8h ++ rshrn v19.8b, v28.8h, #3 // p2'_2 ++ rshrn2 v19.16b, v29.8h, #3 // p2'_2 ++ ++ //calc q, v0, v1, v2, v3, v18, v0, v1, v2, v3 ++ uaddl v26.8h, v2.8b, v0.8b ++ uaddl2 v27.8h, v2.16b, v0.16b ++ uaddw v26.8h, v26.8h, v7.8b ++ uaddw2 v27.8h, v27.8h, v7.16b ++ add v22.8h, v22.8h, v26.8h ++ add v23.8h, v23.8h, v27.8h ++ uaddw v22.8h, v22.8h, v7.8b ++ uaddw2 v23.8h, v23.8h, v7.16b ++ rshrn v22.8b, v22.8h, #3 // q0'_2 ++ rshrn2 v22.16b, v23.8h, #3 // q0'_2 ++ uaddw v26.8h, v26.8h, v1.8b ++ uaddw2 v27.8h, v27.8h, v1.16b ++ rshrn v23.8b, v26.8h, #2 // q1'_2 ++ rshrn2 v23.16b, v27.8h, #2 // q1'_2 ++ uaddl v28.8h, v2.8b, v3.8b ++ uaddl2 v29.8h, v2.16b, v3.16b ++ shl v28.8h, v28.8h, #1 ++ shl v29.8h, v29.8h, #1 ++ add v28.8h, v28.8h, v26.8h ++ add v29.8h, v29.8h, v27.8h ++ rshrn v26.8b, v28.8h, #3 // q2'_2 ++ rshrn2 v26.16b, v29.8h, #3 // q2'_2 ++ ++ bit v7.16b, v24.16b, v30.16b // p0'_1 ++ bit v0.16b, v25.16b, v31.16b // q0'_1 ++ bit v7.16b, v20.16b, v17.16b // p0'_2 ++ bit v6.16b, v21.16b, v17.16b // p1'_2 ++ bit v5.16b, v19.16b, v17.16b // p2'_2 ++ bit v0.16b, v22.16b, v18.16b // q0'_2 ++ bit v1.16b, v23.16b, v18.16b // q1'_2 ++ bit v2.16b, v26.16b, v18.16b // q2'_2 + .endm + + function ff_h264_v_loop_filter_luma_intra_neon, export=1 +- h264_loop_filter_start_intra ++ h264_loop_filter_start_intra ++ ++ ld1 {v0.16b}, [x0], x1 // q0 ++ ld1 {v1.16b}, [x0], x1 // q1 ++ ld1 {v2.16b}, [x0], x1 // q2 ++ ld1 {v3.16b}, [x0], x1 // q3 ++ sub x0, x0, x1, lsl #3 ++ ld1 {v4.16b}, [x0], x1 // p3 ++ ld1 {v5.16b}, [x0], x1 // p2 ++ ld1 {v6.16b}, [x0], x1 // p1 ++ ld1 {v7.16b}, [x0] // p0 + +- ld1 {v0.16b}, [x0], x1 // q0 +- ld1 {v1.16b}, [x0], x1 // q1 +- ld1 {v2.16b}, [x0], x1 // q2 +- ld1 {v3.16b}, [x0], x1 // q3 +- sub x0, x0, x1, lsl #3 +- ld1 {v4.16b}, [x0], x1 // p3 +- ld1 {v5.16b}, [x0], x1 // p2 +- ld1 {v6.16b}, [x0], x1 // p1 +- ld1 {v7.16b}, [x0] // p0 +- +- h264_loop_filter_luma_intra +- +- sub x0, x0, x1, lsl #1 +- st1 {v5.16b}, [x0], x1 // p2 +- st1 {v6.16b}, [x0], x1 // p1 +- st1 {v7.16b}, [x0], x1 // p0 +- st1 {v0.16b}, [x0], x1 // q0 +- st1 {v1.16b}, [x0], x1 // q1 +- st1 {v2.16b}, [x0] // q2 ++ h264_loop_filter_luma_intra ++ ++ sub x0, x0, x1, lsl #1 ++ st1 {v5.16b}, [x0], x1 // p2 ++ st1 {v6.16b}, [x0], x1 // p1 ++ st1 {v7.16b}, [x0], x1 // p0 ++ st1 {v0.16b}, [x0], x1 // q0 ++ st1 {v1.16b}, [x0], x1 // q1 ++ st1 {v2.16b}, [x0] // q2 + 9: +- ret ++ ret + endfunc + + function ff_h264_h_loop_filter_luma_intra_neon, export=1 +- h264_loop_filter_start_intra ++ h264_loop_filter_start_intra ++ ++ sub x0, x0, #4 ++ ld1 {v4.8b}, [x0], x1 ++ ld1 {v5.8b}, [x0], x1 ++ ld1 {v6.8b}, [x0], x1 ++ ld1 {v7.8b}, [x0], x1 ++ ld1 {v0.8b}, [x0], x1 ++ ld1 {v1.8b}, [x0], x1 ++ ld1 {v2.8b}, [x0], x1 ++ ld1 {v3.8b}, [x0], x1 ++ ld1 {v4.d}[1], [x0], x1 ++ ld1 {v5.d}[1], [x0], x1 ++ ld1 {v6.d}[1], [x0], x1 ++ ld1 {v7.d}[1], [x0], x1 ++ ld1 {v0.d}[1], [x0], x1 ++ ld1 {v1.d}[1], [x0], x1 ++ ld1 {v2.d}[1], [x0], x1 ++ ld1 {v3.d}[1], [x0], x1 ++ ++ transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 ++ ++ h264_loop_filter_luma_intra + +- sub x0, x0, #4 +- ld1 {v4.8b}, [x0], x1 +- ld1 {v5.8b}, [x0], x1 +- ld1 {v6.8b}, [x0], x1 +- ld1 {v7.8b}, [x0], x1 +- ld1 {v0.8b}, [x0], x1 +- ld1 {v1.8b}, [x0], x1 +- ld1 {v2.8b}, [x0], x1 +- ld1 {v3.8b}, [x0], x1 +- ld1 {v4.d}[1], [x0], x1 +- ld1 {v5.d}[1], [x0], x1 +- ld1 {v6.d}[1], [x0], x1 +- ld1 {v7.d}[1], [x0], x1 +- ld1 {v0.d}[1], [x0], x1 +- ld1 {v1.d}[1], [x0], x1 +- ld1 {v2.d}[1], [x0], x1 +- ld1 {v3.d}[1], [x0], x1 +- +- transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 +- +- h264_loop_filter_luma_intra +- +- transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 +- +- sub x0, x0, x1, lsl #4 +- st1 {v4.8b}, [x0], x1 +- st1 {v5.8b}, [x0], x1 +- st1 {v6.8b}, [x0], x1 +- st1 {v7.8b}, [x0], x1 +- st1 {v0.8b}, [x0], x1 +- st1 {v1.8b}, [x0], x1 +- st1 {v2.8b}, [x0], x1 +- st1 {v3.8b}, [x0], x1 +- st1 {v4.d}[1], [x0], x1 +- st1 {v5.d}[1], [x0], x1 +- st1 {v6.d}[1], [x0], x1 +- st1 {v7.d}[1], [x0], x1 +- st1 {v0.d}[1], [x0], x1 +- st1 {v1.d}[1], [x0], x1 +- st1 {v2.d}[1], [x0], x1 +- st1 {v3.d}[1], [x0], x1 ++ transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 ++ ++ sub x0, x0, x1, lsl #4 ++ st1 {v4.8b}, [x0], x1 ++ st1 {v5.8b}, [x0], x1 ++ st1 {v6.8b}, [x0], x1 ++ st1 {v7.8b}, [x0], x1 ++ st1 {v0.8b}, [x0], x1 ++ st1 {v1.8b}, [x0], x1 ++ st1 {v2.8b}, [x0], x1 ++ st1 {v3.8b}, [x0], x1 ++ st1 {v4.d}[1], [x0], x1 ++ st1 {v5.d}[1], [x0], x1 ++ st1 {v6.d}[1], [x0], x1 ++ st1 {v7.d}[1], [x0], x1 ++ st1 {v0.d}[1], [x0], x1 ++ st1 {v1.d}[1], [x0], x1 ++ st1 {v2.d}[1], [x0], x1 ++ st1 {v3.d}[1], [x0], x1 + 9: +- ret ++ ret + endfunc + + .macro h264_loop_filter_chroma +@@ -414,7 +411,6 @@ + + function ff_h264_v_loop_filter_chroma_neon, export=1 + h264_loop_filter_start +- sxtw x1, w1 + + sub x0, x0, x1, lsl #1 + ld1 {v18.8B}, [x0], x1 +@@ -433,7 +429,6 @@ + + function ff_h264_h_loop_filter_chroma_neon, export=1 + h264_loop_filter_start +- sxtw x1, w1 + + sub x0, x0, #2 + h_loop_filter_chroma420: +@@ -466,7 +461,6 @@ + endfunc + + function ff_h264_h_loop_filter_chroma422_neon, export=1 +- sxtw x1, w1 + h264_loop_filter_start + add x5, x0, x1 + sub x0, x0, #2 +@@ -480,113 +474,113 @@ + endfunc + + .macro h264_loop_filter_chroma_intra +- uabd v26.8b, v16.8b, v17.8b // abs(p0 - q0) +- uabd v27.8b, v18.8b, v16.8b // abs(p1 - p0) +- uabd v28.8b, v19.8b, v17.8b // abs(q1 - q0) +- cmhi v26.8b, v30.8b, v26.8b // < alpha +- cmhi v27.8b, v31.8b, v27.8b // < beta +- cmhi v28.8b, v31.8b, v28.8b // < beta +- and v26.8b, v26.8b, v27.8b +- and v26.8b, v26.8b, v28.8b +- mov x2, v26.d[0] +- +- ushll v4.8h, v18.8b, #1 +- ushll v6.8h, v19.8b, #1 +- cbz x2, 9f +- uaddl v20.8h, v16.8b, v19.8b +- uaddl v22.8h, v17.8b, v18.8b +- add v20.8h, v20.8h, v4.8h +- add v22.8h, v22.8h, v6.8h +- uqrshrn v24.8b, v20.8h, #2 +- uqrshrn v25.8b, v22.8h, #2 +- bit v16.8b, v24.8b, v26.8b +- bit v17.8b, v25.8b, v26.8b ++ uabd v26.8b, v16.8b, v17.8b // abs(p0 - q0) ++ uabd v27.8b, v18.8b, v16.8b // abs(p1 - p0) ++ uabd v28.8b, v19.8b, v17.8b // abs(q1 - q0) ++ cmhi v26.8b, v30.8b, v26.8b // < alpha ++ cmhi v27.8b, v31.8b, v27.8b // < beta ++ cmhi v28.8b, v31.8b, v28.8b // < beta ++ and v26.8b, v26.8b, v27.8b ++ and v26.8b, v26.8b, v28.8b ++ mov x2, v26.d[0] ++ ++ ushll v4.8h, v18.8b, #1 ++ ushll v6.8h, v19.8b, #1 ++ cbz x2, 9f ++ uaddl v20.8h, v16.8b, v19.8b ++ uaddl v22.8h, v17.8b, v18.8b ++ add v20.8h, v20.8h, v4.8h ++ add v22.8h, v22.8h, v6.8h ++ uqrshrn v24.8b, v20.8h, #2 ++ uqrshrn v25.8b, v22.8h, #2 ++ bit v16.8b, v24.8b, v26.8b ++ bit v17.8b, v25.8b, v26.8b + .endm + + function ff_h264_v_loop_filter_chroma_intra_neon, export=1 +- h264_loop_filter_start_intra ++ h264_loop_filter_start_intra + +- sub x0, x0, x1, lsl #1 +- ld1 {v18.8b}, [x0], x1 +- ld1 {v16.8b}, [x0], x1 +- ld1 {v17.8b}, [x0], x1 +- ld1 {v19.8b}, [x0] ++ sub x0, x0, x1, lsl #1 ++ ld1 {v18.8b}, [x0], x1 ++ ld1 {v16.8b}, [x0], x1 ++ ld1 {v17.8b}, [x0], x1 ++ ld1 {v19.8b}, [x0] + +- h264_loop_filter_chroma_intra ++ h264_loop_filter_chroma_intra + +- sub x0, x0, x1, lsl #1 +- st1 {v16.8b}, [x0], x1 +- st1 {v17.8b}, [x0], x1 ++ sub x0, x0, x1, lsl #1 ++ st1 {v16.8b}, [x0], x1 ++ st1 {v17.8b}, [x0], x1 + + 9: +- ret ++ ret + endfunc + + function ff_h264_h_loop_filter_chroma_mbaff_intra_neon, export=1 +- h264_loop_filter_start_intra +- +- sub x4, x0, #2 +- sub x0, x0, #1 +- ld1 {v18.8b}, [x4], x1 +- ld1 {v16.8b}, [x4], x1 +- ld1 {v17.8b}, [x4], x1 +- ld1 {v19.8b}, [x4], x1 +- +- transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 +- +- h264_loop_filter_chroma_intra ++ h264_loop_filter_start_intra + +- st2 {v16.b,v17.b}[0], [x0], x1 +- st2 {v16.b,v17.b}[1], [x0], x1 +- st2 {v16.b,v17.b}[2], [x0], x1 +- st2 {v16.b,v17.b}[3], [x0], x1 ++ sub x4, x0, #2 ++ sub x0, x0, #1 ++ ld1 {v18.8b}, [x4], x1 ++ ld1 {v16.8b}, [x4], x1 ++ ld1 {v17.8b}, [x4], x1 ++ ld1 {v19.8b}, [x4], x1 ++ ++ transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 ++ ++ h264_loop_filter_chroma_intra ++ ++ st2 {v16.b,v17.b}[0], [x0], x1 ++ st2 {v16.b,v17.b}[1], [x0], x1 ++ st2 {v16.b,v17.b}[2], [x0], x1 ++ st2 {v16.b,v17.b}[3], [x0], x1 + + 9: +- ret ++ ret + endfunc + + function ff_h264_h_loop_filter_chroma_intra_neon, export=1 +- h264_loop_filter_start_intra ++ h264_loop_filter_start_intra + +- sub x4, x0, #2 +- sub x0, x0, #1 ++ sub x4, x0, #2 ++ sub x0, x0, #1 + h_loop_filter_chroma420_intra: +- ld1 {v18.8b}, [x4], x1 +- ld1 {v16.8b}, [x4], x1 +- ld1 {v17.8b}, [x4], x1 +- ld1 {v19.8b}, [x4], x1 +- ld1 {v18.s}[1], [x4], x1 +- ld1 {v16.s}[1], [x4], x1 +- ld1 {v17.s}[1], [x4], x1 +- ld1 {v19.s}[1], [x4], x1 +- +- transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 +- +- h264_loop_filter_chroma_intra +- +- st2 {v16.b,v17.b}[0], [x0], x1 +- st2 {v16.b,v17.b}[1], [x0], x1 +- st2 {v16.b,v17.b}[2], [x0], x1 +- st2 {v16.b,v17.b}[3], [x0], x1 +- st2 {v16.b,v17.b}[4], [x0], x1 +- st2 {v16.b,v17.b}[5], [x0], x1 +- st2 {v16.b,v17.b}[6], [x0], x1 +- st2 {v16.b,v17.b}[7], [x0], x1 ++ ld1 {v18.8b}, [x4], x1 ++ ld1 {v16.8b}, [x4], x1 ++ ld1 {v17.8b}, [x4], x1 ++ ld1 {v19.8b}, [x4], x1 ++ ld1 {v18.s}[1], [x4], x1 ++ ld1 {v16.s}[1], [x4], x1 ++ ld1 {v17.s}[1], [x4], x1 ++ ld1 {v19.s}[1], [x4], x1 ++ ++ transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 ++ ++ h264_loop_filter_chroma_intra ++ ++ st2 {v16.b,v17.b}[0], [x0], x1 ++ st2 {v16.b,v17.b}[1], [x0], x1 ++ st2 {v16.b,v17.b}[2], [x0], x1 ++ st2 {v16.b,v17.b}[3], [x0], x1 ++ st2 {v16.b,v17.b}[4], [x0], x1 ++ st2 {v16.b,v17.b}[5], [x0], x1 ++ st2 {v16.b,v17.b}[6], [x0], x1 ++ st2 {v16.b,v17.b}[7], [x0], x1 + + 9: +- ret ++ ret + endfunc + + function ff_h264_h_loop_filter_chroma422_intra_neon, export=1 +- h264_loop_filter_start_intra +- sub x4, x0, #2 +- add x5, x0, x1, lsl #3 +- sub x0, x0, #1 +- mov x7, x30 +- bl h_loop_filter_chroma420_intra +- sub x0, x5, #1 +- mov x30, x7 +- b h_loop_filter_chroma420_intra ++ h264_loop_filter_start_intra ++ sub x4, x0, #2 ++ add x5, x0, x1, lsl #3 ++ sub x0, x0, #1 ++ mov x7, x30 ++ bl h_loop_filter_chroma420_intra ++ sub x0, x5, #1 ++ mov x30, x7 ++ b h_loop_filter_chroma420_intra + endfunc + + .macro biweight_16 macs, macd +@@ -691,7 +685,6 @@ + + .macro biweight_func w + function ff_biweight_h264_pixels_\w\()_neon, export=1 +- sxtw x2, w2 + lsr w8, w5, #31 + add w7, w7, #1 + eor w8, w8, w6, lsr #30 +@@ -800,7 +793,6 @@ + + .macro weight_func w + function ff_weight_h264_pixels_\w\()_neon, export=1 +- sxtw x1, w1 + cmp w3, #1 + mov w6, #1 + lsl w5, w5, w3 +@@ -827,3 +819,258 @@ + weight_func 16 + weight_func 8 + weight_func 4 ++ ++.macro h264_loop_filter_start_10 ++ cmp w2, #0 ++ ldr w6, [x4] ++ ccmp w3, #0, #0, ne ++ lsl w2, w2, #2 ++ mov v24.S[0], w6 ++ lsl w3, w3, #2 ++ and w8, w6, w6, lsl #16 ++ b.eq 1f ++ ands w8, w8, w8, lsl #8 ++ b.ge 2f ++1: ++ ret ++2: ++.endm ++ ++.macro h264_loop_filter_start_intra_10 ++ orr w4, w2, w3 ++ cbnz w4, 1f ++ ret ++1: ++ lsl w2, w2, #2 ++ lsl w3, w3, #2 ++ dup v30.8h, w2 // alpha ++ dup v31.8h, w3 // beta ++.endm ++ ++.macro h264_loop_filter_chroma_10 ++ dup v22.8h, w2 // alpha ++ dup v23.8h, w3 // beta ++ uxtl v24.8h, v24.8b // tc0 ++ ++ uabd v26.8h, v16.8h, v0.8h // abs(p0 - q0) ++ uabd v28.8h, v18.8h, v16.8h // abs(p1 - p0) ++ uabd v30.8h, v2.8h, v0.8h // abs(q1 - q0) ++ cmhi v26.8h, v22.8h, v26.8h // < alpha ++ cmhi v28.8h, v23.8h, v28.8h // < beta ++ cmhi v30.8h, v23.8h, v30.8h // < beta ++ ++ and v26.16b, v26.16b, v28.16b ++ mov v4.16b, v0.16b ++ sub v4.8h, v4.8h, v16.8h ++ and v26.16b, v26.16b, v30.16b ++ shl v4.8h, v4.8h, #2 ++ mov x8, v26.d[0] ++ mov x9, v26.d[1] ++ sli v24.8h, v24.8h, #8 ++ uxtl v24.8h, v24.8b ++ add v4.8h, v4.8h, v18.8h ++ adds x8, x8, x9 ++ shl v24.8h, v24.8h, #2 ++ ++ b.eq 9f ++ ++ movi v31.8h, #3 // (tc0 - 1) << (BIT_DEPTH - 8)) + 1 ++ uqsub v24.8h, v24.8h, v31.8h ++ sub v4.8h, v4.8h, v2.8h ++ srshr v4.8h, v4.8h, #3 ++ smin v4.8h, v4.8h, v24.8h ++ neg v25.8h, v24.8h ++ smax v4.8h, v4.8h, v25.8h ++ and v4.16b, v4.16b, v26.16b ++ add v16.8h, v16.8h, v4.8h ++ sub v0.8h, v0.8h, v4.8h ++ ++ mvni v4.8h, #0xFC, lsl #8 // 1023 for clipping ++ movi v5.8h, #0 ++ smin v0.8h, v0.8h, v4.8h ++ smin v16.8h, v16.8h, v4.8h ++ smax v0.8h, v0.8h, v5.8h ++ smax v16.8h, v16.8h, v5.8h ++.endm ++ ++function ff_h264_v_loop_filter_chroma_neon_10, export=1 ++ h264_loop_filter_start_10 ++ ++ mov x10, x0 ++ sub x0, x0, x1, lsl #1 ++ ld1 {v18.8h}, [x0 ], x1 ++ ld1 {v0.8h}, [x10], x1 ++ ld1 {v16.8h}, [x0 ], x1 ++ ld1 {v2.8h}, [x10] ++ ++ h264_loop_filter_chroma_10 ++ ++ sub x0, x10, x1, lsl #1 ++ st1 {v16.8h}, [x0], x1 ++ st1 {v0.8h}, [x0], x1 ++9: ++ ret ++endfunc ++ ++function ff_h264_h_loop_filter_chroma_neon_10, export=1 ++ h264_loop_filter_start_10 ++ ++ sub x0, x0, #4 // access the 2nd left pixel ++h_loop_filter_chroma420_10: ++ add x10, x0, x1, lsl #2 ++ ld1 {v18.d}[0], [x0 ], x1 ++ ld1 {v18.d}[1], [x10], x1 ++ ld1 {v16.d}[0], [x0 ], x1 ++ ld1 {v16.d}[1], [x10], x1 ++ ld1 {v0.d}[0], [x0 ], x1 ++ ld1 {v0.d}[1], [x10], x1 ++ ld1 {v2.d}[0], [x0 ], x1 ++ ld1 {v2.d}[1], [x10], x1 ++ ++ transpose_4x8H v18, v16, v0, v2, v28, v29, v30, v31 ++ ++ h264_loop_filter_chroma_10 ++ ++ transpose_4x8H v18, v16, v0, v2, v28, v29, v30, v31 ++ ++ sub x0, x10, x1, lsl #3 ++ st1 {v18.d}[0], [x0], x1 ++ st1 {v16.d}[0], [x0], x1 ++ st1 {v0.d}[0], [x0], x1 ++ st1 {v2.d}[0], [x0], x1 ++ st1 {v18.d}[1], [x0], x1 ++ st1 {v16.d}[1], [x0], x1 ++ st1 {v0.d}[1], [x0], x1 ++ st1 {v2.d}[1], [x0], x1 ++9: ++ ret ++endfunc ++ ++function ff_h264_h_loop_filter_chroma422_neon_10, export=1 ++ h264_loop_filter_start_10 ++ add x5, x0, x1 ++ sub x0, x0, #4 ++ add x1, x1, x1 ++ mov x7, x30 ++ bl h_loop_filter_chroma420_10 ++ mov x30, x7 ++ sub x0, x5, #4 ++ mov v24.s[0], w6 ++ b h_loop_filter_chroma420_10 ++endfunc ++ ++.macro h264_loop_filter_chroma_intra_10 ++ uabd v26.8h, v16.8h, v17.8h // abs(p0 - q0) ++ uabd v27.8h, v18.8h, v16.8h // abs(p1 - p0) ++ uabd v28.8h, v19.8h, v17.8h // abs(q1 - q0) ++ cmhi v26.8h, v30.8h, v26.8h // < alpha ++ cmhi v27.8h, v31.8h, v27.8h // < beta ++ cmhi v28.8h, v31.8h, v28.8h // < beta ++ and v26.16b, v26.16b, v27.16b ++ and v26.16b, v26.16b, v28.16b ++ mov x2, v26.d[0] ++ mov x3, v26.d[1] ++ ++ shl v4.8h, v18.8h, #1 ++ shl v6.8h, v19.8h, #1 ++ ++ adds x2, x2, x3 ++ b.eq 9f ++ ++ add v20.8h, v16.8h, v19.8h ++ add v22.8h, v17.8h, v18.8h ++ add v20.8h, v20.8h, v4.8h ++ add v22.8h, v22.8h, v6.8h ++ urshr v24.8h, v20.8h, #2 ++ urshr v25.8h, v22.8h, #2 ++ bit v16.16b, v24.16b, v26.16b ++ bit v17.16b, v25.16b, v26.16b ++.endm ++ ++function ff_h264_v_loop_filter_chroma_intra_neon_10, export=1 ++ h264_loop_filter_start_intra_10 ++ mov x9, x0 ++ sub x0, x0, x1, lsl #1 ++ ld1 {v18.8h}, [x0], x1 ++ ld1 {v17.8h}, [x9], x1 ++ ld1 {v16.8h}, [x0], x1 ++ ld1 {v19.8h}, [x9] ++ ++ h264_loop_filter_chroma_intra_10 ++ ++ sub x0, x9, x1, lsl #1 ++ st1 {v16.8h}, [x0], x1 ++ st1 {v17.8h}, [x0], x1 ++ ++9: ++ ret ++endfunc ++ ++function ff_h264_h_loop_filter_chroma_mbaff_intra_neon_10, export=1 ++ h264_loop_filter_start_intra_10 ++ ++ sub x4, x0, #4 ++ sub x0, x0, #2 ++ add x9, x4, x1, lsl #1 ++ ld1 {v18.8h}, [x4], x1 ++ ld1 {v17.8h}, [x9], x1 ++ ld1 {v16.8h}, [x4], x1 ++ ld1 {v19.8h}, [x9], x1 ++ ++ transpose_4x8H v18, v16, v17, v19, v26, v27, v28, v29 ++ ++ h264_loop_filter_chroma_intra_10 ++ ++ st2 {v16.h,v17.h}[0], [x0], x1 ++ st2 {v16.h,v17.h}[1], [x0], x1 ++ st2 {v16.h,v17.h}[2], [x0], x1 ++ st2 {v16.h,v17.h}[3], [x0], x1 ++ ++9: ++ ret ++endfunc ++ ++function ff_h264_h_loop_filter_chroma_intra_neon_10, export=1 ++ h264_loop_filter_start_intra_10 ++ sub x4, x0, #4 ++ sub x0, x0, #2 ++h_loop_filter_chroma420_intra_10: ++ add x9, x4, x1, lsl #2 ++ ld1 {v18.4h}, [x4], x1 ++ ld1 {v18.d}[1], [x9], x1 ++ ld1 {v16.4h}, [x4], x1 ++ ld1 {v16.d}[1], [x9], x1 ++ ld1 {v17.4h}, [x4], x1 ++ ld1 {v17.d}[1], [x9], x1 ++ ld1 {v19.4h}, [x4], x1 ++ ld1 {v19.d}[1], [x9], x1 ++ ++ transpose_4x8H v18, v16, v17, v19, v26, v27, v28, v29 ++ ++ h264_loop_filter_chroma_intra_10 ++ ++ st2 {v16.h,v17.h}[0], [x0], x1 ++ st2 {v16.h,v17.h}[1], [x0], x1 ++ st2 {v16.h,v17.h}[2], [x0], x1 ++ st2 {v16.h,v17.h}[3], [x0], x1 ++ st2 {v16.h,v17.h}[4], [x0], x1 ++ st2 {v16.h,v17.h}[5], [x0], x1 ++ st2 {v16.h,v17.h}[6], [x0], x1 ++ st2 {v16.h,v17.h}[7], [x0], x1 ++ ++9: ++ ret ++endfunc ++ ++function ff_h264_h_loop_filter_chroma422_intra_neon_10, export=1 ++ h264_loop_filter_start_intra_10 ++ sub x4, x0, #4 ++ add x5, x0, x1, lsl #3 ++ sub x0, x0, #2 ++ mov x7, x30 ++ bl h_loop_filter_chroma420_intra_10 ++ mov x4, x9 ++ sub x0, x5, #2 ++ mov x30, x7 ++ b h_loop_filter_chroma420_intra_10 ++endfunc +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264idct_neon.S b/media/ffvpx/libavcodec/aarch64/h264idct_neon.S +--- a/media/ffvpx/libavcodec/aarch64/h264idct_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264idct_neon.S 2023-04-06 12:50:06.969470973 +0200 +@@ -24,6 +24,7 @@ + + function ff_h264_idct_add_neon, export=1 + .L_ff_h264_idct_add_neon: ++ AARCH64_VALID_CALL_TARGET + ld1 {v0.4H, v1.4H, v2.4H, v3.4H}, [x1] + sxtw x2, w2 + movi v30.8H, #0 +@@ -79,6 +80,7 @@ + + function ff_h264_idct_dc_add_neon, export=1 + .L_ff_h264_idct_dc_add_neon: ++ AARCH64_VALID_CALL_TARGET + sxtw x2, w2 + mov w3, #0 + ld1r {v2.8H}, [x1] +@@ -155,8 +157,7 @@ + endfunc + + function ff_h264_idct_add8_neon, export=1 +- sub sp, sp, #0x40 +- stp x19, x20, [sp] ++ stp x19, x20, [sp, #-0x40]! + mov x12, x30 + ldp x6, x15, [x0] // dest[0], dest[1] + add x5, x1, #16*4 // block_offset +@@ -185,8 +186,7 @@ + csel x6, x15, x6, eq + cmp x10, #20 + b.lt 1b +- ldp x19, x20, [sp] +- add sp, sp, #0x40 ++ ldp x19, x20, [sp], #0x40 + ret x12 + endfunc + +@@ -266,6 +266,7 @@ + + function ff_h264_idct8_add_neon, export=1 + .L_ff_h264_idct8_add_neon: ++ AARCH64_VALID_CALL_TARGET + movi v19.8H, #0 + sxtw x2, w2 + ld1 {v24.8H, v25.8H}, [x1] +@@ -330,6 +331,7 @@ + + function ff_h264_idct8_dc_add_neon, export=1 + .L_ff_h264_idct8_dc_add_neon: ++ AARCH64_VALID_CALL_TARGET + mov w3, #0 + sxtw x2, w2 + ld1r {v31.8H}, [x1] +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264pred_init.c b/media/ffvpx/libavcodec/aarch64/h264pred_init.c +--- a/media/ffvpx/libavcodec/aarch64/h264pred_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264pred_init.c 2023-04-06 12:49:40.249394729 +0200 +@@ -45,42 +45,84 @@ + void ff_pred8x8_l00_dc_neon(uint8_t *src, ptrdiff_t stride); + void ff_pred8x8_0l0_dc_neon(uint8_t *src, ptrdiff_t stride); + ++void ff_pred16x16_vert_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred16x16_hor_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred16x16_plane_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred16x16_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred16x16_top_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++ ++void ff_pred8x8_vert_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_hor_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_plane_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_128_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_left_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_top_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_l0t_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_0lt_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_l00_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++void ff_pred8x8_0l0_dc_neon_10(uint8_t *src, ptrdiff_t stride); ++ + static av_cold void h264_pred_init_neon(H264PredContext *h, int codec_id, + const int bit_depth, + const int chroma_format_idc) + { +- const int high_depth = bit_depth > 8; +- +- if (high_depth) +- return; +- +- if (chroma_format_idc <= 1) { +- h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vert_neon; +- h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_hor_neon; +- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) +- h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon; +- h->pred8x8[DC_128_PRED8x8 ] = ff_pred8x8_128_dc_neon; +- if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && +- codec_id != AV_CODEC_ID_VP8) { +- h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_neon; +- h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon; +- h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon; +- h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon; +- h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon; +- h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon; +- h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ff_pred8x8_0l0_dc_neon; ++ if (bit_depth == 8) { ++ if (chroma_format_idc <= 1) { ++ h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vert_neon; ++ h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_hor_neon; ++ if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) ++ h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon; ++ h->pred8x8[DC_128_PRED8x8 ] = ff_pred8x8_128_dc_neon; ++ if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && ++ codec_id != AV_CODEC_ID_VP8) { ++ h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_neon; ++ h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon; ++ h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon; ++ h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon; ++ h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon; ++ h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon; ++ h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ff_pred8x8_0l0_dc_neon; ++ } + } ++ ++ h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_neon; ++ h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vert_neon; ++ h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_hor_neon; ++ h->pred16x16[LEFT_DC_PRED8x8] = ff_pred16x16_left_dc_neon; ++ h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon; ++ h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_neon; ++ if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 && ++ codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) ++ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_neon; + } ++ if (bit_depth == 10) { ++ if (chroma_format_idc <= 1) { ++ h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vert_neon_10; ++ h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_hor_neon_10; ++ if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) ++ h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon_10; ++ h->pred8x8[DC_128_PRED8x8 ] = ff_pred8x8_128_dc_neon_10; ++ if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && ++ codec_id != AV_CODEC_ID_VP8) { ++ h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_neon_10; ++ h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon_10; ++ h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon_10; ++ h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon_10; ++ h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon_10; ++ h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon_10; ++ h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ff_pred8x8_0l0_dc_neon_10; ++ } ++ } + +- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_neon; +- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vert_neon; +- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_hor_neon; +- h->pred16x16[LEFT_DC_PRED8x8] = ff_pred16x16_left_dc_neon; +- h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon; +- h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_neon; +- if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 && +- codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_neon; ++ h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_neon_10; ++ h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vert_neon_10; ++ h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_hor_neon_10; ++ h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon_10; ++ if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 && ++ codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) ++ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_neon_10; ++ } + } + + av_cold void ff_h264_pred_init_aarch64(H264PredContext *h, int codec_id, +diff -Naur a/media/ffvpx/libavcodec/aarch64/h264pred_neon.S b/media/ffvpx/libavcodec/aarch64/h264pred_neon.S +--- a/media/ffvpx/libavcodec/aarch64/h264pred_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/h264pred_neon.S 2023-04-06 12:49:40.249394729 +0200 +@@ -81,8 +81,8 @@ + .L_pred16x16_dc_end: + mov w3, #8 + 6: st1 {v0.16b}, [x0], x1 +- st1 {v0.16b}, [x0], x1 + subs w3, w3, #1 ++ st1 {v0.16b}, [x0], x1 + b.ne 6b + ret + endfunc +@@ -91,8 +91,8 @@ + sub x2, x0, #1 + mov w3, #16 + 1: ld1r {v0.16b}, [x2], x1 +- st1 {v0.16b}, [x0], x1 + subs w3, w3, #1 ++ st1 {v0.16b}, [x0], x1 + b.ne 1b + ret + endfunc +@@ -102,9 +102,9 @@ + add x1, x1, x1 + ld1 {v0.16b}, [x2], x1 + mov w3, #8 +-1: st1 {v0.16b}, [x0], x1 ++1: subs w3, w3, #1 ++ st1 {v0.16b}, [x0], x1 + st1 {v0.16b}, [x2], x1 +- subs w3, w3, #1 + b.ne 1b + ret + endfunc +@@ -158,8 +158,8 @@ + add v1.8h, v1.8h, v2.8h + sqshrun2 v0.16b, v1.8h, #5 + add v1.8h, v1.8h, v3.8h +- st1 {v0.16b}, [x0], x1 + subs w3, w3, #1 ++ st1 {v0.16b}, [x0], x1 + b.ne 1b + ret + endfunc +@@ -175,8 +175,8 @@ + sub x2, x0, #1 + mov w3, #8 + 1: ld1r {v0.8b}, [x2], x1 +- st1 {v0.8b}, [x0], x1 + subs w3, w3, #1 ++ st1 {v0.8b}, [x0], x1 + b.ne 1b + ret + endfunc +@@ -186,9 +186,9 @@ + lsl x1, x1, #1 + ld1 {v0.8b}, [x2], x1 + mov w3, #4 +-1: st1 {v0.8b}, [x0], x1 ++1: subs w3, w3, #1 ++ st1 {v0.8b}, [x0], x1 + st1 {v0.8b}, [x2], x1 +- subs w3, w3, #1 + b.ne 1b + ret + endfunc +@@ -232,9 +232,9 @@ + mov w3, #8 + 1: + sqshrun v0.8b, v1.8h, #5 ++ subs w3, w3, #1 + add v1.8h, v1.8h, v2.8h + st1 {v0.8b}, [x0], x1 +- subs w3, w3, #1 + b.ne 1b + ret + endfunc +@@ -290,9 +290,9 @@ + .L_pred8x8_dc_end: + mov w3, #4 + add x2, x0, x1, lsl #2 +-6: st1 {v0.8b}, [x0], x1 ++6: subs w3, w3, #1 ++ st1 {v0.8b}, [x0], x1 + st1 {v1.8b}, [x2], x1 +- subs w3, w3, #1 + b.ne 6b + ret + endfunc +@@ -359,3 +359,407 @@ + dup v1.8b, v1.b[0] + b .L_pred8x8_dc_end + endfunc ++ ++.macro ldcol.16 rd, rs, rt, n=4, hi=0 ++.if \n >= 4 && \hi == 0 ++ ld1 {\rd\().h}[0], [\rs], \rt ++ ld1 {\rd\().h}[1], [\rs], \rt ++ ld1 {\rd\().h}[2], [\rs], \rt ++ ld1 {\rd\().h}[3], [\rs], \rt ++.endif ++.if \n == 8 || \hi == 1 ++ ld1 {\rd\().h}[4], [\rs], \rt ++ ld1 {\rd\().h}[5], [\rs], \rt ++ ld1 {\rd\().h}[6], [\rs], \rt ++ ld1 {\rd\().h}[7], [\rs], \rt ++.endif ++.endm ++ ++// slower than C ++/* ++function ff_pred16x16_128_dc_neon_10, export=1 ++ movi v0.8h, #2, lsl #8 // 512, 1 << (bit_depth - 1) ++ ++ b .L_pred16x16_dc_10_end ++endfunc ++*/ ++ ++function ff_pred16x16_top_dc_neon_10, export=1 ++ sub x2, x0, x1 ++ ++ ld1 {v0.8h, v1.8h}, [x2] ++ ++ add v0.8h, v0.8h, v1.8h ++ addv h0, v0.8h ++ ++ urshr v0.4h, v0.4h, #4 ++ dup v0.8h, v0.h[0] ++ b .L_pred16x16_dc_10_end ++endfunc ++ ++// slower than C ++/* ++function ff_pred16x16_left_dc_neon_10, export=1 ++ sub x2, x0, #2 // access to the "left" column ++ ldcol.16 v0, x2, x1, 8 ++ ldcol.16 v1, x2, x1, 8 // load "left" column ++ ++ add v0.8h, v0.8h, v1.8h ++ addv h0, v0.8h ++ ++ urshr v0.4h, v0.4h, #4 ++ dup v0.8h, v0.h[0] ++ b .L_pred16x16_dc_10_end ++endfunc ++*/ ++ ++function ff_pred16x16_dc_neon_10, export=1 ++ sub x2, x0, x1 // access to the "top" row ++ sub x3, x0, #2 // access to the "left" column ++ ++ ld1 {v0.8h, v1.8h}, [x2] ++ ldcol.16 v2, x3, x1, 8 ++ ldcol.16 v3, x3, x1, 8 // load pixels in "top" row and "left" col ++ ++ add v0.8h, v0.8h, v1.8h ++ add v2.8h, v2.8h, v3.8h ++ add v0.8h, v0.8h, v2.8h ++ addv h0, v0.8h ++ ++ urshr v0.4h, v0.4h, #5 ++ dup v0.8h, v0.h[0] ++.L_pred16x16_dc_10_end: ++ mov v1.16b, v0.16b ++ mov w3, #8 ++6: st1 {v0.8h, v1.8h}, [x0], x1 ++ subs w3, w3, #1 ++ st1 {v0.8h, v1.8h}, [x0], x1 ++ b.ne 6b ++ ret ++endfunc ++ ++function ff_pred16x16_hor_neon_10, export=1 ++ sub x2, x0, #2 ++ add x3, x0, #16 ++ ++ mov w4, #16 ++1: ld1r {v0.8h}, [x2], x1 ++ subs w4, w4, #1 ++ st1 {v0.8h}, [x0], x1 ++ st1 {v0.8h}, [x3], x1 ++ b.ne 1b ++ ret ++endfunc ++ ++function ff_pred16x16_vert_neon_10, export=1 ++ sub x2, x0, x1 ++ add x1, x1, x1 ++ ++ ld1 {v0.8h, v1.8h}, [x2], x1 ++ ++ mov w3, #8 ++1: subs w3, w3, #1 ++ st1 {v0.8h, v1.8h}, [x0], x1 ++ st1 {v0.8h, v1.8h}, [x2], x1 ++ ++ b.ne 1b ++ ret ++endfunc ++ ++function ff_pred16x16_plane_neon_10, export=1 ++ sub x3, x0, x1 ++ movrel x4, p16weight ++ add x2, x3, #16 ++ sub x3, x3, #2 ++ ld1 {v0.8h}, [x3] ++ ld1 {v2.8h}, [x2], x1 ++ ldcol.16 v1, x3, x1, 8 ++ add x3, x3, x1 ++ ldcol.16 v3, x3, x1, 8 ++ ++ rev64 v16.8h, v0.8h ++ rev64 v17.8h, v1.8h ++ ext v0.16b, v16.16b, v16.16b, #8 ++ ext v1.16b, v17.16b, v17.16b, #8 ++ ++ add v7.8h, v2.8h, v3.8h ++ sub v2.8h, v2.8h, v0.8h ++ sub v3.8h, v3.8h, v1.8h ++ ld1 {v0.8h}, [x4] ++ mul v2.8h, v2.8h, v0.8h ++ mul v3.8h, v3.8h, v0.8h ++ addp v2.8h, v2.8h, v3.8h ++ addp v2.8h, v2.8h, v2.8h ++ addp v2.4h, v2.4h, v2.4h ++ sshll v3.4s, v2.4h, #2 ++ saddw v2.4s, v3.4s, v2.4h ++ rshrn v4.4h, v2.4s, #6 ++ trn2 v5.4h, v4.4h, v4.4h ++ add v2.4h, v4.4h, v5.4h ++ shl v3.4h, v2.4h, #3 ++ ext v7.16b, v7.16b, v7.16b, #14 ++ sub v3.4h, v3.4h, v2.4h // 7 * (b + c) ++ add v7.4h, v7.4h, v0.4h ++ shl v2.4h, v7.4h, #4 ++ ssubl v2.4s, v2.4h, v3.4h ++ shl v3.4h, v4.4h, #4 ++ ext v0.16b, v0.16b, v0.16b, #14 ++ ssubl v6.4s, v5.4h, v3.4h ++ ++ mov v0.h[0], wzr ++ mul v0.8h, v0.8h, v4.h[0] ++ dup v16.4s, v2.s[0] ++ dup v17.4s, v2.s[0] ++ dup v2.8h, v4.h[0] ++ dup v3.4s, v6.s[0] ++ shl v2.8h, v2.8h, #3 ++ saddw v16.4s, v16.4s, v0.4h ++ saddw2 v17.4s, v17.4s, v0.8h ++ saddw v3.4s, v3.4s, v2.4h ++ ++ mov w3, #16 ++ mvni v4.8h, #0xFC, lsl #8 // 1023 for clipping ++1: ++ sqshrun v0.4h, v16.4s, #5 ++ sqshrun2 v0.8h, v17.4s, #5 ++ saddw v16.4s, v16.4s, v2.4h ++ saddw v17.4s, v17.4s, v2.4h ++ sqshrun v1.4h, v16.4s, #5 ++ sqshrun2 v1.8h, v17.4s, #5 ++ add v16.4s, v16.4s, v3.4s ++ add v17.4s, v17.4s, v3.4s ++ ++ subs w3, w3, #1 ++ ++ smin v0.8h, v0.8h, v4.8h ++ smin v1.8h, v1.8h, v4.8h ++ ++ st1 {v0.8h, v1.8h}, [x0], x1 ++ b.ne 1b ++ ret ++endfunc ++ ++function ff_pred8x8_hor_neon_10, export=1 ++ sub x2, x0, #2 ++ mov w3, #8 ++ ++1: ld1r {v0.8h}, [x2], x1 ++ subs w3, w3, #1 ++ st1 {v0.8h}, [x0], x1 ++ b.ne 1b ++ ret ++endfunc ++ ++function ff_pred8x8_vert_neon_10, export=1 ++ sub x2, x0, x1 ++ lsl x1, x1, #1 ++ ++ ld1 {v0.8h}, [x2], x1 ++ mov w3, #4 ++1: subs w3, w3, #1 ++ st1 {v0.8h}, [x0], x1 ++ st1 {v0.8h}, [x2], x1 ++ b.ne 1b ++ ret ++endfunc ++ ++function ff_pred8x8_plane_neon_10, export=1 ++ sub x3, x0, x1 ++ movrel x4, p8weight ++ movrel x5, p16weight ++ add x2, x3, #8 ++ sub x3, x3, #2 ++ ld1 {v0.d}[0], [x3] ++ ld1 {v2.d}[0], [x2], x1 ++ ldcol.16 v0, x3, x1, hi=1 ++ add x3, x3, x1 ++ ldcol.16 v3, x3, x1, 4 ++ add v7.8h, v2.8h, v3.8h ++ rev64 v0.8h, v0.8h ++ trn1 v2.2d, v2.2d, v3.2d ++ sub v2.8h, v2.8h, v0.8h ++ ld1 {v6.8h}, [x4] ++ mul v2.8h, v2.8h, v6.8h ++ ld1 {v0.8h}, [x5] ++ saddlp v2.4s, v2.8h ++ addp v2.4s, v2.4s, v2.4s ++ shl v3.4s, v2.4s, #4 ++ add v2.4s, v3.4s, v2.4s ++ rshrn v5.4h, v2.4s, #5 ++ addp v2.4h, v5.4h, v5.4h ++ shl v3.4h, v2.4h, #1 ++ add v3.4h, v3.4h, v2.4h ++ rev64 v7.4h, v7.4h ++ add v7.4h, v7.4h, v0.4h ++ shl v2.4h, v7.4h, #4 ++ ssubl v2.4s, v2.4h, v3.4h ++ ext v0.16b, v0.16b, v0.16b, #14 ++ mov v0.h[0], wzr ++ mul v0.8h, v0.8h, v5.h[0] ++ dup v1.4s, v2.s[0] ++ dup v2.4s, v2.s[0] ++ dup v3.8h, v5.h[1] ++ saddw v1.4s, v1.4s, v0.4h ++ saddw2 v2.4s, v2.4s, v0.8h ++ mov w3, #8 ++ mvni v4.8h, #0xFC, lsl #8 // 1023 for clipping ++1: ++ sqshrun v0.4h, v1.4s, #5 ++ sqshrun2 v0.8h, v2.4s, #5 ++ ++ saddw v1.4s, v1.4s, v3.4h ++ saddw v2.4s, v2.4s, v3.4h ++ ++ subs w3, w3, #1 ++ ++ smin v0.8h, v0.8h, v4.8h ++ ++ st1 {v0.8h}, [x0], x1 ++ b.ne 1b ++ ret ++endfunc ++ ++function ff_pred8x8_128_dc_neon_10, export=1 ++ movi v0.8h, #2, lsl #8 // 512, 1 << (bit_depth - 1) ++ movi v1.8h, #2, lsl #8 ++ b .L_pred8x8_dc_10_end ++endfunc ++ ++function ff_pred8x8_top_dc_neon_10, export=1 ++ sub x2, x0, x1 ++ ld1 {v0.8h}, [x2] ++ ++ addp v0.8h, v0.8h, v0.8h ++ addp v0.4h, v0.4h, v0.4h ++ zip1 v0.4h, v0.4h, v0.4h ++ urshr v2.4h, v0.4h, #2 ++ zip1 v0.8h, v2.8h, v2.8h ++ zip1 v1.8h, v2.8h, v2.8h ++ b .L_pred8x8_dc_10_end ++endfunc ++ ++function ff_pred8x8_left_dc_neon_10, export=1 ++ sub x2, x0, #2 ++ ldcol.16 v0, x2, x1, 8 ++ ++ addp v0.8h, v0.8h, v0.8h ++ addp v0.4h, v0.4h, v0.4h ++ urshr v2.4h, v0.4h, #2 ++ dup v1.8h, v2.h[1] ++ dup v0.8h, v2.h[0] ++ b .L_pred8x8_dc_10_end ++endfunc ++ ++function ff_pred8x8_dc_neon_10, export=1 ++ sub x2, x0, x1 ++ sub x3, x0, #2 ++ ++ ld1 {v0.8h}, [x2] ++ ldcol.16 v1, x3, x1, 8 ++ ++ addp v0.8h, v0.8h, v0.8h ++ addp v1.8h, v1.8h, v1.8h ++ trn1 v2.2s, v0.2s, v1.2s ++ trn2 v3.2s, v0.2s, v1.2s ++ addp v4.4h, v2.4h, v3.4h ++ addp v5.4h, v4.4h, v4.4h ++ urshr v6.4h, v5.4h, #3 ++ urshr v7.4h, v4.4h, #2 ++ dup v0.8h, v6.h[0] ++ dup v2.8h, v7.h[2] ++ dup v1.8h, v7.h[3] ++ dup v3.8h, v6.h[1] ++ zip1 v0.2d, v0.2d, v2.2d ++ zip1 v1.2d, v1.2d, v3.2d ++.L_pred8x8_dc_10_end: ++ mov w3, #4 ++ add x2, x0, x1, lsl #2 ++ ++6: st1 {v0.8h}, [x0], x1 ++ subs w3, w3, #1 ++ st1 {v1.8h}, [x2], x1 ++ b.ne 6b ++ ret ++endfunc ++ ++function ff_pred8x8_l0t_dc_neon_10, export=1 ++ sub x2, x0, x1 ++ sub x3, x0, #2 ++ ++ ld1 {v0.8h}, [x2] ++ ldcol.16 v1, x3, x1, 4 ++ ++ addp v0.8h, v0.8h, v0.8h ++ addp v1.4h, v1.4h, v1.4h ++ addp v0.4h, v0.4h, v0.4h ++ addp v1.4h, v1.4h, v1.4h ++ add v1.4h, v1.4h, v0.4h ++ ++ urshr v2.4h, v0.4h, #2 ++ urshr v3.4h, v1.4h, #3 // the pred4x4 part ++ ++ dup v4.4h, v3.h[0] ++ dup v5.4h, v2.h[0] ++ dup v6.4h, v2.h[1] ++ ++ zip1 v0.2d, v4.2d, v6.2d ++ zip1 v1.2d, v5.2d, v6.2d ++ b .L_pred8x8_dc_10_end ++endfunc ++ ++function ff_pred8x8_l00_dc_neon_10, export=1 ++ sub x2, x0, #2 ++ ++ ldcol.16 v0, x2, x1, 4 ++ ++ addp v0.4h, v0.4h, v0.4h ++ addp v0.4h, v0.4h, v0.4h ++ urshr v0.4h, v0.4h, #2 ++ ++ movi v1.8h, #2, lsl #8 // 512 ++ dup v0.8h, v0.h[0] ++ b .L_pred8x8_dc_10_end ++endfunc ++ ++function ff_pred8x8_0lt_dc_neon_10, export=1 ++ add x3, x0, x1, lsl #2 ++ sub x2, x0, x1 ++ sub x3, x3, #2 ++ ++ ld1 {v0.8h}, [x2] ++ ldcol.16 v1, x3, x1, hi=1 ++ ++ addp v0.8h, v0.8h, v0.8h ++ addp v1.8h, v1.8h, v1.8h ++ addp v0.4h, v0.4h, v0.4h ++ addp v1.4h, v1.4h, v1.4h ++ zip1 v0.2s, v0.2s, v1.2s ++ add v1.4h, v0.4h, v1.4h ++ ++ urshr v2.4h, v0.4h, #2 ++ urshr v3.4h, v1.4h, #3 ++ ++ dup v4.4h, v2.h[0] ++ dup v5.4h, v2.h[3] ++ dup v6.4h, v2.h[1] ++ dup v7.4h, v3.h[1] ++ ++ zip1 v0.2d, v4.2d, v6.2d ++ zip1 v1.2d, v5.2d, v7.2d ++ b .L_pred8x8_dc_10_end ++endfunc ++ ++function ff_pred8x8_0l0_dc_neon_10, export=1 ++ add x2, x0, x1, lsl #2 ++ sub x2, x2, #2 ++ ++ ldcol.16 v1, x2, x1, 4 ++ ++ addp v2.8h, v1.8h, v1.8h ++ addp v2.4h, v2.4h, v2.4h ++ urshr v1.4h, v2.4h, #2 ++ ++ movi v0.8h, #2, lsl #8 // 512 ++ dup v1.8h, v1.h[0] ++ b .L_pred8x8_dc_10_end ++endfunc +diff -Naur a/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c +--- a/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c 2023-04-06 12:49:40.249394729 +0200 +@@ -27,19 +27,29 @@ + #include "libavcodec/idctdsp.h" + #include "idct.h" + ++void ff_put_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t); ++void ff_put_signed_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t); ++void ff_add_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t); ++ + av_cold void ff_idctdsp_init_aarch64(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth) + { + int cpu_flags = av_get_cpu_flags(); + +- if (have_neon(cpu_flags) && !avctx->lowres && !high_bit_depth) { +- if (avctx->idct_algo == FF_IDCT_AUTO || +- avctx->idct_algo == FF_IDCT_SIMPLEAUTO || +- avctx->idct_algo == FF_IDCT_SIMPLENEON) { +- c->idct_put = ff_simple_idct_put_neon; +- c->idct_add = ff_simple_idct_add_neon; +- c->idct = ff_simple_idct_neon; +- c->perm_type = FF_IDCT_PERM_PARTTRANS; ++ if (have_neon(cpu_flags)) { ++ if (!avctx->lowres && !high_bit_depth) { ++ if (avctx->idct_algo == FF_IDCT_AUTO || ++ avctx->idct_algo == FF_IDCT_SIMPLEAUTO || ++ avctx->idct_algo == FF_IDCT_SIMPLENEON) { ++ c->idct_put = ff_simple_idct_put_neon; ++ c->idct_add = ff_simple_idct_add_neon; ++ c->idct = ff_simple_idct_neon; ++ c->perm_type = FF_IDCT_PERM_PARTTRANS; ++ } + } ++ ++ c->add_pixels_clamped = ff_add_pixels_clamped_neon; ++ c->put_pixels_clamped = ff_put_pixels_clamped_neon; ++ c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_neon; + } + } +diff -Naur a/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S b/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S +--- a/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S 2023-04-06 12:49:40.249394729 +0200 +@@ -0,0 +1,130 @@ ++/* ++ * IDCT AArch64 NEON optimisations ++ * ++ * Copyright (c) 2022 Ben Avison ++ * ++ * 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" ++ ++// Clamp 16-bit signed block coefficients to unsigned 8-bit ++// On entry: ++// x0 -> array of 64x 16-bit coefficients ++// x1 -> 8-bit results ++// x2 = row stride for results, bytes ++function ff_put_pixels_clamped_neon, export=1 ++ ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x0], #64 ++ ld1 {v4.16b, v5.16b, v6.16b, v7.16b}, [x0] ++ sqxtun v0.8b, v0.8h ++ sqxtun v1.8b, v1.8h ++ sqxtun v2.8b, v2.8h ++ sqxtun v3.8b, v3.8h ++ sqxtun v4.8b, v4.8h ++ st1 {v0.8b}, [x1], x2 ++ sqxtun v0.8b, v5.8h ++ st1 {v1.8b}, [x1], x2 ++ sqxtun v1.8b, v6.8h ++ st1 {v2.8b}, [x1], x2 ++ sqxtun v2.8b, v7.8h ++ st1 {v3.8b}, [x1], x2 ++ st1 {v4.8b}, [x1], x2 ++ st1 {v0.8b}, [x1], x2 ++ st1 {v1.8b}, [x1], x2 ++ st1 {v2.8b}, [x1] ++ ret ++endfunc ++ ++// Clamp 16-bit signed block coefficients to signed 8-bit (biased by 128) ++// On entry: ++// x0 -> array of 64x 16-bit coefficients ++// x1 -> 8-bit results ++// x2 = row stride for results, bytes ++function ff_put_signed_pixels_clamped_neon, export=1 ++ ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x0], #64 ++ movi v4.8b, #128 ++ ld1 {v16.16b, v17.16b, v18.16b, v19.16b}, [x0] ++ sqxtn v0.8b, v0.8h ++ sqxtn v1.8b, v1.8h ++ sqxtn v2.8b, v2.8h ++ sqxtn v3.8b, v3.8h ++ sqxtn v5.8b, v16.8h ++ add v0.8b, v0.8b, v4.8b ++ sqxtn v6.8b, v17.8h ++ add v1.8b, v1.8b, v4.8b ++ sqxtn v7.8b, v18.8h ++ add v2.8b, v2.8b, v4.8b ++ sqxtn v16.8b, v19.8h ++ add v3.8b, v3.8b, v4.8b ++ st1 {v0.8b}, [x1], x2 ++ add v0.8b, v5.8b, v4.8b ++ st1 {v1.8b}, [x1], x2 ++ add v1.8b, v6.8b, v4.8b ++ st1 {v2.8b}, [x1], x2 ++ add v2.8b, v7.8b, v4.8b ++ st1 {v3.8b}, [x1], x2 ++ add v3.8b, v16.8b, v4.8b ++ st1 {v0.8b}, [x1], x2 ++ st1 {v1.8b}, [x1], x2 ++ st1 {v2.8b}, [x1], x2 ++ st1 {v3.8b}, [x1] ++ ret ++endfunc ++ ++// Add 16-bit signed block coefficients to unsigned 8-bit ++// On entry: ++// x0 -> array of 64x 16-bit coefficients ++// x1 -> 8-bit input and results ++// x2 = row stride for 8-bit input and results, bytes ++function ff_add_pixels_clamped_neon, export=1 ++ ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x0], #64 ++ mov x3, x1 ++ ld1 {v4.8b}, [x1], x2 ++ ld1 {v5.8b}, [x1], x2 ++ ld1 {v6.8b}, [x1], x2 ++ ld1 {v7.8b}, [x1], x2 ++ ld1 {v16.16b, v17.16b, v18.16b, v19.16b}, [x0] ++ uaddw v0.8h, v0.8h, v4.8b ++ uaddw v1.8h, v1.8h, v5.8b ++ uaddw v2.8h, v2.8h, v6.8b ++ ld1 {v4.8b}, [x1], x2 ++ uaddw v3.8h, v3.8h, v7.8b ++ ld1 {v5.8b}, [x1], x2 ++ sqxtun v0.8b, v0.8h ++ ld1 {v6.8b}, [x1], x2 ++ sqxtun v1.8b, v1.8h ++ ld1 {v7.8b}, [x1] ++ sqxtun v2.8b, v2.8h ++ sqxtun v3.8b, v3.8h ++ uaddw v4.8h, v16.8h, v4.8b ++ st1 {v0.8b}, [x3], x2 ++ uaddw v0.8h, v17.8h, v5.8b ++ st1 {v1.8b}, [x3], x2 ++ uaddw v1.8h, v18.8h, v6.8b ++ st1 {v2.8b}, [x3], x2 ++ uaddw v2.8h, v19.8h, v7.8b ++ sqxtun v4.8b, v4.8h ++ sqxtun v0.8b, v0.8h ++ st1 {v3.8b}, [x3], x2 ++ sqxtun v1.8b, v1.8h ++ sqxtun v2.8b, v2.8h ++ st1 {v4.8b}, [x3], x2 ++ st1 {v0.8b}, [x3], x2 ++ st1 {v1.8b}, [x3], x2 ++ st1 {v2.8b}, [x3] ++ ret ++endfunc +diff -Naur a/media/ffvpx/libavcodec/aarch64/idct.h b/media/ffvpx/libavcodec/aarch64/idct.h +--- a/media/ffvpx/libavcodec/aarch64/idct.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/idct.h 2023-04-06 12:49:40.249394729 +0200 +@@ -19,6 +19,7 @@ + #ifndef AVCODEC_AARCH64_IDCT_H + #define AVCODEC_AARCH64_IDCT_H + ++#include + #include + + void ff_simple_idct_neon(int16_t *data); +diff -Naur a/media/ffvpx/libavcodec/aarch64/mdct_neon.S b/media/ffvpx/libavcodec/aarch64/mdct_neon.S +--- a/media/ffvpx/libavcodec/aarch64/mdct_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/mdct_neon.S 2023-04-06 12:50:06.969470973 +0200 +@@ -23,8 +23,8 @@ + #include "libavutil/aarch64/asm.S" + + function ff_imdct_half_neon, export=1 +- sub sp, sp, #32 +- stp x19, x20, [sp] ++ stp x19, x20, [sp, #-32]! ++ AARCH64_SIGN_LINK_REGISTER + str x30, [sp, #16] + mov x12, #1 + ldr w14, [x0, #28] // mdct_bits +@@ -119,16 +119,16 @@ + st2 {v4.2s,v5.2s}, [x0] + st2 {v6.2s,v7.2s}, [x8] + +- ldp x19, x20, [sp] + ldr x30, [sp, #16] +- add sp, sp, #32 ++ AARCH64_VALIDATE_LINK_REGISTER ++ ldp x19, x20, [sp], #32 + + ret + endfunc + + function ff_imdct_calc_neon, export=1 +- sub sp, sp, #32 +- stp x19, x20, [sp] ++ stp x19, x20, [sp, #-32]! ++ AARCH64_SIGN_LINK_REGISTER + str x30, [sp, #16] + ldr w3, [x0, #28] // mdct_bits + mov x19, #1 +@@ -160,16 +160,17 @@ + subs x19, x19, #16 + b.gt 1b + +- ldp x19, x20, [sp], #16 +- ldr x30, [sp], #16 ++ ldr x30, [sp, #16] ++ AARCH64_VALIDATE_LINK_REGISTER ++ ldp x19, x20, [sp], #32 + + ret + endfunc + + + function ff_mdct_calc_neon, export=1 +- sub sp, sp, #32 +- stp x19, x20, [sp] ++ stp x19, x20, [sp, #-32]! ++ AARCH64_SIGN_LINK_REGISTER + str x30, [sp, #16] + + mov x12, #1 +@@ -317,7 +318,9 @@ + st2 {v4.2s,v5.2s}, [x0] + st2 {v6.2s,v7.2s}, [x8] + +- ldp x19, x20, [sp], #16 +- ldr x30, [sp], #16 ++ ldr x30, [sp, #16] ++ AARCH64_VALIDATE_LINK_REGISTER ++ ldp x19, x20, [sp], #32 ++ + ret + endfunc +diff -Naur a/media/ffvpx/libavcodec/aarch64/moz.build b/media/ffvpx/libavcodec/aarch64/moz.build +--- a/media/ffvpx/libavcodec/aarch64/moz.build 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/moz.build 2023-04-06 12:49:40.249394729 +0200 +@@ -4,47 +4,55 @@ + ## License, v. 2.0. If a copy of the MPL was not distributed with this + ## file, You can obtain one at http://mozilla.org/MPL/2.0/. + +-SOURCES += [ +- 'h264chroma_init_aarch64.c', +- 'h264cmc_neon.S', +- 'h264dsp_init_aarch64.c', +- 'h264dsp_neon.S', +- 'h264idct_neon.S', +- 'h264pred_init.c', +- 'h264pred_neon.S', +- 'hpeldsp_init_aarch64.c', +- 'hpeldsp_neon.S', +- 'idctdsp_init_aarch64.c', +- 'mdct_neon.S', +- 'mpegaudiodsp_init.c', +- 'mpegaudiodsp_neon.S', +- 'neon.S', +- 'simple_idct_neon.S', +- 'videodsp.S', +- 'videodsp_init.c', +- 'vp8dsp_init_aarch64.c', +- 'vp8dsp_neon.S', +- 'vp9dsp_init_10bpp_aarch64.c', +- 'vp9dsp_init_12bpp_aarch64.c', +- 'vp9dsp_init_aarch64.c', +- 'vp9itxfm_16bpp_neon.S', +- 'vp9itxfm_neon.S', +- 'vp9lpf_16bpp_neon.S', +- 'vp9lpf_neon.S', +- 'vp9mc_16bpp_neon.S', +- 'vp9mc_aarch64.S', +- 'vp9mc_neon.S', +-] +- +-if CONFIG['OS_ARCH'] == 'WINNT': +- USE_INTEGRATED_CLANGCL_AS = True +- DEFINES['EXTERN_ASM'] = '' +- +-if CONFIG['MOZ_LIBAV_FFT']: ++if not CONFIG['MOZ_FFVPX_AUDIOONLY']: + SOURCES += [ + 'fft_init_aarch64.c', + 'fft_neon.S', ++ 'h264chroma_init_aarch64.c', ++ 'h264cmc_neon.S', ++ 'h264dsp_init_aarch64.c', ++ 'h264dsp_neon.S', ++ 'h264idct_neon.S', ++ 'h264pred_init.c', ++ 'h264pred_neon.S', ++ 'hpeldsp_init_aarch64.c', ++ 'hpeldsp_neon.S', ++ 'idctdsp_init_aarch64.c', ++ 'idctdsp_neon.S', ++ 'mdct_neon.S', ++ 'mpegaudiodsp_init.c', ++ 'mpegaudiodsp_neon.S', ++ 'neon.S', ++ 'simple_idct_neon.S', ++ 'videodsp.S', ++ 'videodsp_init.c', ++ 'vp8dsp_init_aarch64.c', ++ 'vp8dsp_neon.S', ++ 'vp9dsp_init_10bpp_aarch64.c', ++ 'vp9dsp_init_12bpp_aarch64.c', ++ 'vp9dsp_init_aarch64.c', ++ 'vp9itxfm_16bpp_neon.S', ++ 'vp9itxfm_neon.S', ++ 'vp9lpf_16bpp_neon.S', ++ 'vp9lpf_neon.S', ++ 'vp9mc_16bpp_neon.S', ++ 'vp9mc_aarch64.S', ++ 'vp9mc_neon.S', + ] ++else: ++ SOURCES += [ ++ 'fft_init_aarch64.c', ++ 'fft_neon.S', ++ 'idctdsp_init_aarch64.c', ++ 'idctdsp_neon.S', ++ 'mpegaudiodsp_init.c', ++ 'mpegaudiodsp_neon.S', ++ 'simple_idct_neon.S', ++ ] ++ ++if CONFIG['OS_ARCH'] == 'WINNT': ++ USE_INTEGRATED_CLANGCL_AS = True ++ DEFINES['EXTERN_ASM'] = '' + + FINAL_LIBRARY = 'mozavcodec' + +diff -Naur a/media/ffvpx/libavcodec/aarch64/neon.S b/media/ffvpx/libavcodec/aarch64/neon.S +--- a/media/ffvpx/libavcodec/aarch64/neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/neon.S 2023-04-06 12:49:40.249394729 +0200 +@@ -109,12 +109,25 @@ + trn2 \r5\().4H, \r0\().4H, \r1\().4H + trn1 \r6\().4H, \r2\().4H, \r3\().4H + trn2 \r7\().4H, \r2\().4H, \r3\().4H ++ + trn1 \r0\().2S, \r4\().2S, \r6\().2S + trn2 \r2\().2S, \r4\().2S, \r6\().2S + trn1 \r1\().2S, \r5\().2S, \r7\().2S + trn2 \r3\().2S, \r5\().2S, \r7\().2S + .endm + ++.macro transpose_4x8H r0, r1, r2, r3, t4, t5, t6, t7 ++ trn1 \t4\().8H, \r0\().8H, \r1\().8H ++ trn2 \t5\().8H, \r0\().8H, \r1\().8H ++ trn1 \t6\().8H, \r2\().8H, \r3\().8H ++ trn2 \t7\().8H, \r2\().8H, \r3\().8H ++ ++ trn1 \r0\().4S, \t4\().4S, \t6\().4S ++ trn2 \r2\().4S, \t4\().4S, \t6\().4S ++ trn1 \r1\().4S, \t5\().4S, \t7\().4S ++ trn2 \r3\().4S, \t5\().4S, \t7\().4S ++.endm ++ + .macro transpose_8x8H r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 + trn1 \r8\().8H, \r0\().8H, \r1\().8H + trn2 \r9\().8H, \r0\().8H, \r1\().8H +diff -Naur a/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S b/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S +--- a/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S 2023-04-06 12:49:40.249394729 +0200 +@@ -58,7 +58,7 @@ + .endm + + .macro idct_end +- br x10 ++ ret x10 + .endm + + .macro smull1 a, b, c +diff -Naur a/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c +--- a/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c 2023-04-06 12:50:06.969470973 +0200 +@@ -21,27 +21,121 @@ + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" + #include "libavutil/aarch64/cpu.h" ++#include "libavutil/intreadwrite.h" + #include "libavcodec/vc1dsp.h" + + #include "config.h" + +-void ff_put_vc1_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_vc1_inv_trans_8x8_neon(int16_t *block); ++void ff_vc1_inv_trans_8x4_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x8_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x4_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++ ++void ff_vc1_inv_trans_8x8_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_8x4_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x8_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++void ff_vc1_inv_trans_4x4_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); ++ ++void ff_vc1_v_loop_filter4_neon(uint8_t *src, ptrdiff_t stride, int pq); ++void ff_vc1_h_loop_filter4_neon(uint8_t *src, ptrdiff_t stride, int pq); ++void ff_vc1_v_loop_filter8_neon(uint8_t *src, ptrdiff_t stride, int pq); ++void ff_vc1_h_loop_filter8_neon(uint8_t *src, ptrdiff_t stride, int pq); ++void ff_vc1_v_loop_filter16_neon(uint8_t *src, ptrdiff_t stride, int pq); ++void ff_vc1_h_loop_filter16_neon(uint8_t *src, ptrdiff_t stride, int pq); ++ ++void ff_put_vc1_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_avg_vc1_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_avg_vc1_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_put_vc1_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_put_vc1_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); +-void ff_avg_vc1_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, ++void ff_avg_vc1_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, + int h, int x, int y); + ++int ff_vc1_unescape_buffer_helper_neon(const uint8_t *src, int size, uint8_t *dst); ++ ++static int vc1_unescape_buffer_neon(const uint8_t *src, int size, uint8_t *dst) ++{ ++ /* Dealing with starting and stopping, and removing escape bytes, are ++ * comparatively less time-sensitive, so are more clearly expressed using ++ * a C wrapper around the assembly inner loop. Note that we assume a ++ * little-endian machine that supports unaligned loads. */ ++ int dsize = 0; ++ while (size >= 4) ++ { ++ int found = 0; ++ while (!found && (((uintptr_t) dst) & 7) && size >= 4) ++ { ++ found = (AV_RL32(src) &~ 0x03000000) == 0x00030000; ++ if (!found) ++ { ++ *dst++ = *src++; ++ --size; ++ ++dsize; ++ } ++ } ++ if (!found) ++ { ++ int skip = size - ff_vc1_unescape_buffer_helper_neon(src, size, dst); ++ dst += skip; ++ src += skip; ++ size -= skip; ++ dsize += skip; ++ while (!found && size >= 4) ++ { ++ found = (AV_RL32(src) &~ 0x03000000) == 0x00030000; ++ if (!found) ++ { ++ *dst++ = *src++; ++ --size; ++ ++dsize; ++ } ++ } ++ } ++ if (found) ++ { ++ *dst++ = *src++; ++ *dst++ = *src++; ++ ++src; ++ size -= 3; ++ dsize += 2; ++ } ++ } ++ while (size > 0) ++ { ++ *dst++ = *src++; ++ --size; ++ ++dsize; ++ } ++ return dsize; ++} ++ + av_cold void ff_vc1dsp_init_aarch64(VC1DSPContext *dsp) + { + int cpu_flags = av_get_cpu_flags(); + + if (have_neon(cpu_flags)) { ++ dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_neon; ++ dsp->vc1_inv_trans_8x4 = ff_vc1_inv_trans_8x4_neon; ++ dsp->vc1_inv_trans_4x8 = ff_vc1_inv_trans_4x8_neon; ++ dsp->vc1_inv_trans_4x4 = ff_vc1_inv_trans_4x4_neon; ++ dsp->vc1_inv_trans_8x8_dc = ff_vc1_inv_trans_8x8_dc_neon; ++ dsp->vc1_inv_trans_8x4_dc = ff_vc1_inv_trans_8x4_dc_neon; ++ dsp->vc1_inv_trans_4x8_dc = ff_vc1_inv_trans_4x8_dc_neon; ++ dsp->vc1_inv_trans_4x4_dc = ff_vc1_inv_trans_4x4_dc_neon; ++ ++ dsp->vc1_v_loop_filter4 = ff_vc1_v_loop_filter4_neon; ++ dsp->vc1_h_loop_filter4 = ff_vc1_h_loop_filter4_neon; ++ dsp->vc1_v_loop_filter8 = ff_vc1_v_loop_filter8_neon; ++ dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_neon; ++ dsp->vc1_v_loop_filter16 = ff_vc1_v_loop_filter16_neon; ++ dsp->vc1_h_loop_filter16 = ff_vc1_h_loop_filter16_neon; ++ + dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_vc1_chroma_mc8_neon; + dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_vc1_chroma_mc8_neon; + dsp->put_no_rnd_vc1_chroma_pixels_tab[1] = ff_put_vc1_chroma_mc4_neon; + dsp->avg_no_rnd_vc1_chroma_pixels_tab[1] = ff_avg_vc1_chroma_mc4_neon; ++ ++ dsp->vc1_unescape_buffer = vc1_unescape_buffer_neon; + } + } +diff -Naur a/media/ffvpx/libavcodec/aarch64/videodsp_init.c b/media/ffvpx/libavcodec/aarch64/videodsp_init.c +--- a/media/ffvpx/libavcodec/aarch64/videodsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/videodsp_init.c 2023-04-06 12:50:06.969470973 +0200 +@@ -21,7 +21,7 @@ + #include "libavutil/aarch64/cpu.h" + #include "libavcodec/videodsp.h" + +-void ff_prefetch_aarch64(uint8_t *mem, ptrdiff_t stride, int h); ++void ff_prefetch_aarch64(const uint8_t *mem, ptrdiff_t stride, int h); + + av_cold void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc) + { +diff -Naur a/media/ffvpx/libavcodec/aarch64/videodsp.S b/media/ffvpx/libavcodec/aarch64/videodsp.S +--- a/media/ffvpx/libavcodec/aarch64/videodsp.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/videodsp.S 2023-04-06 12:49:40.249394729 +0200 +@@ -19,10 +19,11 @@ + #include "libavutil/aarch64/asm.S" + + function ff_prefetch_aarch64, export=1 ++1: + subs w2, w2, #2 + prfm pldl1strm, [x0] + prfm pldl1strm, [x0, x1] + add x0, x0, x1, lsl #1 +- b.gt X(ff_prefetch_aarch64) ++ b.gt 1b + ret + endfunc +diff -Naur a/media/ffvpx/libavcodec/aarch64/vp8dsp.h b/media/ffvpx/libavcodec/aarch64/vp8dsp.h +--- a/media/ffvpx/libavcodec/aarch64/vp8dsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/vp8dsp.h 2023-04-06 12:50:06.969470973 +0200 +@@ -53,7 +53,7 @@ + + #define VP8_MC(n, opt) \ + void ff_put_vp8_##n##_##opt(uint8_t *dst, ptrdiff_t dststride, \ +- uint8_t *src, ptrdiff_t srcstride, \ ++ const uint8_t *src, ptrdiff_t srcstride,\ + int h, int x, int y) + + #define VP8_EPEL(w, opt) \ +diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S b/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S +--- a/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S 2023-04-06 12:49:40.249394729 +0200 +@@ -1040,7 +1040,7 @@ + .irp i, 16, 20, 24, 28, 17, 21, 25, 29, 18, 22, 26, 30, 19, 23, 27, 31 + store \i, x0, #16 + .endr +- br x14 ++ ret x14 + 1: + // Special case: For the last input column (x1 == 12), + // which would be stored as the last row in the temp buffer, +@@ -1068,7 +1068,7 @@ + mov v29.16b, v17.16b + mov v30.16b, v18.16b + mov v31.16b, v19.16b +- br x14 ++ ret x14 + endfunc + + // Read a vertical 4x16 slice out of a 16x16 matrix, do a transform on it, +@@ -1098,7 +1098,7 @@ + load_add_store v16.4s, v17.4s, v18.4s, v19.4s, v20.4s, v21.4s, v22.4s, v23.4s + load_add_store v24.4s, v25.4s, v26.4s, v27.4s, v28.4s, v29.4s, v30.4s, v31.4s + +- br x14 ++ ret x14 + endfunc + .endm + +@@ -1208,7 +1208,7 @@ + ldp d12, d13, [sp], 0x10 + ldp d14, d15, [sp], 0x10 + .endif +- br x15 ++ ret x15 + endfunc + + function ff_vp9_\txfm1\()_\txfm2\()_16x16_add_10_neon, export=1 +@@ -1264,7 +1264,7 @@ + st1 {v23.4s}, [x0], #16 + st1 {v27.4s}, [x0], #16 + st1 {v31.4s}, [x0], #16 +- br x14 ++ ret x14 + endfunc + + function idct16_1d_4x16_pass2_quarter_neon +@@ -1286,7 +1286,7 @@ + load_add_store v16.4s, v17.4s, v18.4s, v19.4s, v20.4s, v21.4s, v22.4s, v23.4s + load_add_store v24.4s, v25.4s, v26.4s, v27.4s, v28.4s, v29.4s, v30.4s, v31.4s + +- br x14 ++ ret x14 + endfunc + + function idct16_1d_4x16_pass1_half_neon +@@ -1313,7 +1313,7 @@ + .irp i, 16, 20, 24, 28, 17, 21, 25, 29, 18, 22, 26, 30, 19, 23, 27, 31 + store \i, x0, #16 + .endr +- br x14 ++ ret x14 + 1: + // Special case: For the second input column (r1 == 4), + // which would be stored as the second row in the temp buffer, +@@ -1341,7 +1341,7 @@ + mov v21.16b, v17.16b + mov v22.16b, v18.16b + mov v23.16b, v19.16b +- br x14 ++ ret x14 + endfunc + + function idct16_1d_4x16_pass2_half_neon +@@ -1364,7 +1364,7 @@ + load_add_store v16.4s, v17.4s, v18.4s, v19.4s, v20.4s, v21.4s, v22.4s, v23.4s + load_add_store v24.4s, v25.4s, v26.4s, v27.4s, v28.4s, v29.4s, v30.4s, v31.4s + +- br x14 ++ ret x14 + endfunc + + .macro idct16_partial size +@@ -1390,7 +1390,7 @@ + + add sp, sp, #1024 + ldp d8, d9, [sp], 0x10 +- br x15 ++ ret x15 + endfunc + .endm + +@@ -1729,7 +1729,7 @@ + store_rev v29.4s, v25.4s, v21.4s, v17.4s, v29.16b, v25.16b + store_rev v28.4s, v24.4s, v20.4s, v16.4s, v28.16b, v24.16b + .purgem store_rev +- br x14 ++ ret x14 + endfunc + + // This is mostly the same as 4x32_pass1, but without the transpose, +@@ -1849,7 +1849,7 @@ + load_acc_store v24.4s, v25.4s, v26.4s, v27.4s, 1 + load_acc_store v28.4s, v29.4s, v30.4s, v31.4s, 1 + .purgem load_acc_store +- br x14 ++ ret x14 + endfunc + .endm + +@@ -1943,7 +1943,7 @@ + ldp d10, d11, [sp], 0x10 + ldp d8, d9, [sp], 0x10 + +- br x15 ++ ret x15 + endfunc + + function ff_vp9_idct_idct_32x32_add_10_neon, export=1 +@@ -2009,7 +2009,7 @@ + ldp d10, d11, [sp], 0x10 + ldp d8, d9, [sp], 0x10 + +- br x15 ++ ret x15 + endfunc + .endm + +diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S b/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S +--- a/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S 2023-04-06 12:50:06.970471013 +0200 +@@ -787,7 +787,7 @@ + .irp i, 16, 24, 17, 25, 18, 26, 19, 27, 20, 28, 21, 29, 22, 30, 23, 31 + store \i, x0, #16 + .endr +- br x14 ++ ret x14 + 1: + // Special case: For the last input column (x1 == 8), + // which would be stored as the last row in the temp buffer, +@@ -806,7 +806,7 @@ + mov v29.16b, v21.16b + mov v30.16b, v22.16b + mov v31.16b, v23.16b +- br x14 ++ ret x14 + endfunc + + // Read a vertical 8x16 slice out of a 16x16 matrix, do a transform on it, +@@ -834,7 +834,7 @@ + load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b + load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b + +- br x14 ++ ret x14 + endfunc + .endm + +@@ -850,10 +850,10 @@ + mov x15, x30 + // iadst16 requires clobbering v8-v15, but idct16 doesn't need to. + .ifnc \txfm1\()_\txfm2,idct_idct +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + .endif + + sub sp, sp, #512 +@@ -920,12 +920,12 @@ + + add sp, sp, #512 + .ifnc \txfm1\()_\txfm2,idct_idct +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 + .endif +- br x15 ++ ret x15 + endfunc + .endm + +@@ -960,7 +960,7 @@ + .irp i, 24, 25, 26, 27 + store \i, x0, x9 + .endr +- br x14 ++ ret x14 + endfunc + + function idct16_1d_8x16_pass2_quarter_neon +@@ -978,7 +978,7 @@ + load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b + load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b + +- br x14 ++ ret x14 + endfunc + + function idct16_1d_8x16_pass1_half_neon +@@ -1003,7 +1003,7 @@ + .irp i, 24, 25, 26, 27, 28, 29, 30, 31 + store \i, x0, x9 + .endr +- br x14 ++ ret x14 + endfunc + + function idct16_1d_8x16_pass2_half_neon +@@ -1021,7 +1021,7 @@ + load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b + load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b + +- br x14 ++ ret x14 + endfunc + + .macro idct16_partial size +@@ -1038,7 +1038,7 @@ + .endr + + add sp, sp, #512 +- br x15 ++ ret x15 + endfunc + .endm + +@@ -1349,7 +1349,7 @@ + store_rev v25.8h, v17.8h + store_rev v24.8h, v16.8h + .purgem store_rev +- br x14 ++ ret x14 + endfunc + + // This is mostly the same as 8x32_pass1, but without the transpose, +@@ -1466,7 +1466,7 @@ + load_acc_store v24.8h, v25.8h, v26.8h, v27.8h, 1 + load_acc_store v28.8h, v29.8h, v30.8h, v31.8h, 1 + .purgem load_acc_store +- br x14 ++ ret x14 + endfunc + .endm + +@@ -1486,8 +1486,8 @@ + + mov x15, x30 + +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x20]! ++ stp d10, d11, [sp, #0x10] + + sub sp, sp, #2048 + +@@ -1544,10 +1544,10 @@ + + add sp, sp, #2048 + +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d8, d9, [sp], #0x20 + +- br x15 ++ ret x15 + endfunc + + .macro idct32_partial size +@@ -1569,10 +1569,10 @@ + + add sp, sp, #2048 + +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d8, d9, [sp], #0x20 + +- br x15 ++ ret x15 + endfunc + .endm + +diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S b/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S +--- a/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S 2023-04-06 12:50:06.970471013 +0200 +@@ -22,18 +22,6 @@ + #include "neon.S" + + +-.macro transpose_4x8H r0, r1, r2, r3, t4, t5, t6, t7 +- trn1 \t4\().8h, \r0\().8h, \r1\().8h +- trn2 \t5\().8h, \r0\().8h, \r1\().8h +- trn1 \t6\().8h, \r2\().8h, \r3\().8h +- trn2 \t7\().8h, \r2\().8h, \r3\().8h +- +- trn1 \r0\().4s, \t4\().4s, \t6\().4s +- trn2 \r2\().4s, \t4\().4s, \t6\().4s +- trn1 \r1\().4s, \t5\().4s, \t7\().4s +- trn2 \r3\().4s, \t5\().4s, \t7\().4s +-.endm +- + // The input to and output from this macro is in the registers v16-v31, + // and v0-v7 are used as scratch registers. + // p7 = v16 .. p3 = v20, p0 = v23, q0 = v24, q3 = v27, q7 = v31 +@@ -69,7 +57,7 @@ + mov x12, v4.d[1] + adds x11, x11, x12 + b.ne 1f +- br x10 ++ ret x10 + 1: + + .if \wd >= 8 +@@ -205,7 +193,7 @@ + b.eq 6f + .else + b.ne 1f +- br x13 ++ ret x13 + 1: + .endif + +@@ -264,7 +252,7 @@ + b.ne 1f + // If no pixels needed flat8in nor flat8out, jump to a + // writeout of the inner 4 pixels +- br x14 ++ ret x14 + 1: + + mov x11, v7.d[0] +@@ -272,7 +260,7 @@ + adds x11, x11, x12 + b.ne 1f + // If no pixels need flat8out, jump to a writeout of the inner 6 pixels +- br x15 ++ ret x15 + + 1: + // flat8out +@@ -429,10 +417,10 @@ + function ff_\func\()_\bpp\()_neon, export=1 + .if \push + mov x16, x30 +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + .endif + lsl w2, w2, #\bpp - 8 + lsl w3, w3, #\bpp - 8 +@@ -442,11 +430,11 @@ + mov x7, #((1 << \bpp) - 1) + .if \push + bl \func\()_16_neon +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x16 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x16 + .else + b \func\()_16_neon + .endif +@@ -462,10 +450,10 @@ + function ff_\func\()_\suffix\()_\bpp\()_neon, export=1 + mov x16, x30 + .if \push +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + .endif + lsl w2, w2, #\bpp - 8 + lsl w3, w3, #\bpp - 8 +@@ -481,12 +469,12 @@ + .endif + bl \func\()_\int_suffix\()_16_neon + .if \push +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], 0x40 + .endif +- br x16 ++ ret x16 + endfunc + .endm + +@@ -520,7 +508,7 @@ + lsl w3, w14, #\bpp - 8 + lsl w4, w15, #\bpp - 8 + bl vp9_loop_filter_\dir\()_\wd2\()_8_16_neon +- br x16 ++ ret x16 + endfunc + .endm + +@@ -553,7 +541,7 @@ + st1 {v25.8h}, [x0], x1 + sub x0, x0, x1, lsl #1 + +- br x10 ++ ret x10 + endfunc + + bpp_frontends vp9_loop_filter_v_4_8 +@@ -601,7 +589,7 @@ + sub x0, x0, x1, lsl #3 + add x0, x0, #4 + +- br x10 ++ ret x10 + endfunc + + bpp_frontends vp9_loop_filter_h_4_8 +@@ -632,7 +620,7 @@ + sub x0, x0, x1, lsl #1 + sub x0, x0, x1 + +- br x10 ++ ret x10 + 6: + sub x9, x0, x1, lsl #1 + st1 {v22.8h}, [x9], x1 +@@ -640,7 +628,7 @@ + st1 {v23.8h}, [x9], x1 + st1 {v25.8h}, [x0], x1 + sub x0, x0, x1, lsl #1 +- br x10 ++ ret x10 + endfunc + + bpp_frontends vp9_loop_filter_v_8_8 +@@ -683,7 +671,7 @@ + sub x0, x0, x1, lsl #3 + add x0, x0, #8 + +- br x10 ++ ret x10 + 6: + // If we didn't need to do the flat8in part, we use the same writeback + // as in loop_filter_h_4_8. +@@ -700,7 +688,7 @@ + st1 {v25.d}[1], [x0], x1 + sub x0, x0, x1, lsl #3 + add x0, x0, #4 +- br x10 ++ ret x10 + endfunc + + bpp_frontends vp9_loop_filter_h_8_8 +@@ -755,7 +743,7 @@ + sub x0, x0, x1, lsl #3 + add x0, x0, x1 + +- br x10 ++ ret x10 + 8: + add x9, x9, x1, lsl #2 + // If we didn't do the flat8out part, the output is left in the +@@ -768,7 +756,7 @@ + st1 {v26.8h}, [x0], x1 + sub x0, x0, x1, lsl #1 + sub x0, x0, x1 +- br x10 ++ ret x10 + 7: + sub x9, x0, x1, lsl #1 + st1 {v22.8h}, [x9], x1 +@@ -776,7 +764,7 @@ + st1 {v23.8h}, [x9], x1 + st1 {v25.8h}, [x0], x1 + sub x0, x0, x1, lsl #1 +- br x10 ++ ret x10 + endfunc + + bpp_frontends vp9_loop_filter_v_16_8, push=1 +@@ -833,7 +821,7 @@ + st1 {v31.8h}, [x0], x1 + sub x0, x0, x1, lsl #3 + +- br x10 ++ ret x10 + 8: + // The same writeback as in loop_filter_h_8_8 + sub x9, x0, #8 +@@ -850,7 +838,7 @@ + st1 {v27.8h}, [x0], x1 + sub x0, x0, x1, lsl #3 + add x0, x0, #8 +- br x10 ++ ret x10 + 7: + // The same writeback as in loop_filter_h_4_8 + sub x9, x0, #4 +@@ -866,7 +854,7 @@ + st1 {v25.d}[1], [x0], x1 + sub x0, x0, x1, lsl #3 + add x0, x0, #4 +- br x10 ++ ret x10 + endfunc + + bpp_frontends vp9_loop_filter_h_16_8, push=1 +diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S b/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S +--- a/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S 2023-04-06 12:50:06.970471013 +0200 +@@ -399,7 +399,7 @@ + .endif + // If no pixels needed flat8in nor flat8out, jump to a + // writeout of the inner 4 pixels +- br x14 ++ ret x14 + 1: + + mov x5, v7.d[0] +@@ -411,7 +411,7 @@ + cbnz x5, 1f + .endif + // If no pixels need flat8out, jump to a writeout of the inner 6 pixels +- br x15 ++ ret x15 + + 1: + // flat8out +@@ -532,54 +532,54 @@ + loop_filter 4, .8b, 0, v16, v17, v18, v19, v28, v29, v30, v31 + ret + 9: +- br x10 ++ ret x10 + endfunc + + function vp9_loop_filter_4_16b_mix_44 + loop_filter 4, .16b, 44, v16, v17, v18, v19, v28, v29, v30, v31 + ret + 9: +- br x10 ++ ret x10 + endfunc + + function vp9_loop_filter_8 + loop_filter 8, .8b, 0, v16, v17, v18, v19, v28, v29, v30, v31 + ret + 6: +- br x13 ++ ret x13 + 9: +- br x10 ++ ret x10 + endfunc + + function vp9_loop_filter_8_16b_mix + loop_filter 8, .16b, 88, v16, v17, v18, v19, v28, v29, v30, v31 + ret + 6: +- br x13 ++ ret x13 + 9: +- br x10 ++ ret x10 + endfunc + + function vp9_loop_filter_16 + loop_filter 16, .8b, 0, v8, v9, v10, v11, v12, v13, v14, v15 + ret + 9: +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x10 + endfunc + + function vp9_loop_filter_16_16b + loop_filter 16, .16b, 0, v8, v9, v10, v11, v12, v13, v14, v15 + ret + 9: +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x10 + endfunc + + .macro loop_filter_4 +@@ -648,7 +648,7 @@ + st1 {v23.8b}, [x9], x1 + st1 {v25.8b}, [x0], x1 + +- br x10 ++ ret x10 + endfunc + + function ff_vp9_loop_filter_v_44_16_neon, export=1 +@@ -672,7 +672,7 @@ + st1 {v23.16b}, [x9], x1 + st1 {v25.16b}, [x0], x1 + +- br x10 ++ ret x10 + endfunc + + function ff_vp9_loop_filter_h_4_8_neon, export=1 +@@ -714,7 +714,7 @@ + st1 {v25.s}[0], [x9], x1 + st1 {v25.s}[1], [x0], x1 + +- br x10 ++ ret x10 + endfunc + + function ff_vp9_loop_filter_h_44_16_neon, export=1 +@@ -766,7 +766,7 @@ + st1 {v25.s}[1], [x9], x1 + st1 {v25.s}[3], [x0], x1 + +- br x10 ++ ret x10 + endfunc + + function ff_vp9_loop_filter_v_8_8_neon, export=1 +@@ -793,14 +793,14 @@ + st1 {v23.8b}, [x9], x1 + st1 {v26.8b}, [x0], x1 + +- br x10 ++ ret x10 + 6: + sub x9, x0, x1, lsl #1 + st1 {v22.8b}, [x9], x1 + st1 {v24.8b}, [x0], x1 + st1 {v23.8b}, [x9], x1 + st1 {v25.8b}, [x0], x1 +- br x10 ++ ret x10 + endfunc + + .macro mix_v_16 mix +@@ -828,14 +828,14 @@ + st1 {v23.16b}, [x9], x1 + st1 {v26.16b}, [x0], x1 + +- br x10 ++ ret x10 + 6: + sub x9, x0, x1, lsl #1 + st1 {v22.16b}, [x9], x1 + st1 {v24.16b}, [x0], x1 + st1 {v23.16b}, [x9], x1 + st1 {v25.16b}, [x0], x1 +- br x10 ++ ret x10 + endfunc + .endm + +@@ -876,7 +876,7 @@ + st1 {v23.8b}, [x9], x1 + st1 {v27.8b}, [x0], x1 + +- br x10 ++ ret x10 + 6: + // If we didn't need to do the flat8in part, we use the same writeback + // as in loop_filter_h_4_8. +@@ -891,7 +891,7 @@ + st1 {v24.s}[1], [x0], x1 + st1 {v25.s}[0], [x9], x1 + st1 {v25.s}[1], [x0], x1 +- br x10 ++ ret x10 + endfunc + + .macro mix_h_16 mix +@@ -942,7 +942,7 @@ + st1 {v27.8b}, [x9], x1 + st1 {v27.d}[1], [x0], x1 + +- br x10 ++ ret x10 + 6: + add x9, x9, #2 + add x0, x0, #2 +@@ -963,7 +963,7 @@ + st1 {v24.s}[3], [x0], x1 + st1 {v25.s}[1], [x9], x1 + st1 {v25.s}[3], [x0], x1 +- br x10 ++ ret x10 + endfunc + .endm + +@@ -973,10 +973,10 @@ + + function ff_vp9_loop_filter_v_16_8_neon, export=1 + mov x10, x30 +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + sub x9, x0, x1, lsl #3 + ld1 {v16.8b}, [x9], x1 // p7 + ld1 {v24.8b}, [x0], x1 // q0 +@@ -1018,11 +1018,11 @@ + st1 {v9.8b}, [x9], x1 + st1 {v17.8b}, [x0], x1 + 9: +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x10 + 8: + add x9, x9, x1, lsl #2 + // If we didn't do the flat8out part, the output is left in the +@@ -1045,10 +1045,10 @@ + + function ff_vp9_loop_filter_v_16_16_neon, export=1 + mov x10, x30 +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + sub x9, x0, x1, lsl #3 + ld1 {v16.16b}, [x9], x1 // p7 + ld1 {v24.16b}, [x0], x1 // q0 +@@ -1087,11 +1087,11 @@ + st1 {v9.16b}, [x9], x1 + st1 {v17.16b}, [x0], x1 + 9: +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x10 + 8: + add x9, x9, x1, lsl #2 + st1 {v21.16b}, [x9], x1 +@@ -1112,10 +1112,10 @@ + + function ff_vp9_loop_filter_h_16_8_neon, export=1 + mov x10, x30 +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + sub x9, x0, #8 + ld1 {v16.8b}, [x9], x1 + ld1 {v24.8b}, [x0], x1 +@@ -1164,11 +1164,11 @@ + st1 {v9.8b}, [x9], x1 + st1 {v31.8b}, [x0], x1 + 9: +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x10 + 8: + // The same writeback as in loop_filter_h_8_8 + sub x9, x0, #4 +@@ -1202,10 +1202,10 @@ + + function ff_vp9_loop_filter_h_16_16_neon, export=1 + mov x10, x30 +- stp d14, d15, [sp, #-0x10]! +- stp d12, d13, [sp, #-0x10]! +- stp d10, d11, [sp, #-0x10]! +- stp d8, d9, [sp, #-0x10]! ++ stp d8, d9, [sp, #-0x40]! ++ stp d14, d15, [sp, #0x30] ++ stp d12, d13, [sp, #0x20] ++ stp d10, d11, [sp, #0x10] + sub x9, x0, #8 + ld1 {v16.8b}, [x9], x1 + ld1 {v24.8b}, [x0], x1 +@@ -1283,11 +1283,11 @@ + st1 {v9.d}[1], [x9], x1 + st1 {v31.d}[1], [x0], x1 + 9: +- ldp d8, d9, [sp], 0x10 +- ldp d10, d11, [sp], 0x10 +- ldp d12, d13, [sp], 0x10 +- ldp d14, d15, [sp], 0x10 +- br x10 ++ ldp d10, d11, [sp, #0x10] ++ ldp d12, d13, [sp, #0x20] ++ ldp d14, d15, [sp, #0x30] ++ ldp d8, d9, [sp], #0x40 ++ ret x10 + 8: + sub x9, x0, #4 + add x0, x9, x1, lsl #3 +diff -Naur a/media/ffvpx/libavcodec/allcodecs.c b/media/ffvpx/libavcodec/allcodecs.c +--- a/media/ffvpx/libavcodec/allcodecs.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/allcodecs.c 2023-04-06 12:50:24.490176462 +0200 +@@ -24,821 +24,877 @@ + * Provide registration of all codecs, parsers and bitstream filters for libavcodec. + */ + ++#include ++#include ++ + #include "config.h" ++#include "config_components.h" + #include "libavutil/thread.h" +-#include "avcodec.h" +-#include "version.h" +- +-extern AVCodec ff_a64multi_encoder; +-extern AVCodec ff_a64multi5_encoder; +-extern AVCodec ff_aasc_decoder; +-extern AVCodec ff_aic_decoder; +-extern AVCodec ff_alias_pix_encoder; +-extern AVCodec ff_alias_pix_decoder; +-extern AVCodec ff_agm_decoder; +-extern AVCodec ff_amv_encoder; +-extern AVCodec ff_amv_decoder; +-extern AVCodec ff_anm_decoder; +-extern AVCodec ff_ansi_decoder; +-extern AVCodec ff_apng_encoder; +-extern AVCodec ff_apng_decoder; +-extern AVCodec ff_arbc_decoder; +-extern AVCodec ff_argo_decoder; +-extern AVCodec ff_asv1_encoder; +-extern AVCodec ff_asv1_decoder; +-extern AVCodec ff_asv2_encoder; +-extern AVCodec ff_asv2_decoder; +-extern AVCodec ff_aura_decoder; +-extern AVCodec ff_aura2_decoder; +-extern AVCodec ff_avrp_encoder; +-extern AVCodec ff_avrp_decoder; +-extern AVCodec ff_avrn_decoder; +-extern AVCodec ff_avs_decoder; +-extern AVCodec ff_avui_encoder; +-extern AVCodec ff_avui_decoder; +-extern AVCodec ff_ayuv_encoder; +-extern AVCodec ff_ayuv_decoder; +-extern AVCodec ff_bethsoftvid_decoder; +-extern AVCodec ff_bfi_decoder; +-extern AVCodec ff_bink_decoder; +-extern AVCodec ff_bitpacked_decoder; +-extern AVCodec ff_bmp_encoder; +-extern AVCodec ff_bmp_decoder; +-extern AVCodec ff_bmv_video_decoder; +-extern AVCodec ff_brender_pix_decoder; +-extern AVCodec ff_c93_decoder; +-extern AVCodec ff_cavs_decoder; +-extern AVCodec ff_cdgraphics_decoder; +-extern AVCodec ff_cdtoons_decoder; +-extern AVCodec ff_cdxl_decoder; +-extern AVCodec ff_cfhd_encoder; +-extern AVCodec ff_cfhd_decoder; +-extern AVCodec ff_cinepak_encoder; +-extern AVCodec ff_cinepak_decoder; +-extern AVCodec ff_clearvideo_decoder; +-extern AVCodec ff_cljr_encoder; +-extern AVCodec ff_cljr_decoder; +-extern AVCodec ff_cllc_decoder; +-extern AVCodec ff_comfortnoise_encoder; +-extern AVCodec ff_comfortnoise_decoder; +-extern AVCodec ff_cpia_decoder; +-extern AVCodec ff_cri_decoder; +-extern AVCodec ff_cscd_decoder; +-extern AVCodec ff_cyuv_decoder; +-extern AVCodec ff_dds_decoder; +-extern AVCodec ff_dfa_decoder; +-extern AVCodec ff_dirac_decoder; +-extern AVCodec ff_dnxhd_encoder; +-extern AVCodec ff_dnxhd_decoder; +-extern AVCodec ff_dpx_encoder; +-extern AVCodec ff_dpx_decoder; +-extern AVCodec ff_dsicinvideo_decoder; +-extern AVCodec ff_dvaudio_decoder; +-extern AVCodec ff_dvvideo_encoder; +-extern AVCodec ff_dvvideo_decoder; +-extern AVCodec ff_dxa_decoder; +-extern AVCodec ff_dxtory_decoder; +-extern AVCodec ff_dxv_decoder; +-extern AVCodec ff_eacmv_decoder; +-extern AVCodec ff_eamad_decoder; +-extern AVCodec ff_eatgq_decoder; +-extern AVCodec ff_eatgv_decoder; +-extern AVCodec ff_eatqi_decoder; +-extern AVCodec ff_eightbps_decoder; +-extern AVCodec ff_eightsvx_exp_decoder; +-extern AVCodec ff_eightsvx_fib_decoder; +-extern AVCodec ff_escape124_decoder; +-extern AVCodec ff_escape130_decoder; +-extern AVCodec ff_exr_encoder; +-extern AVCodec ff_exr_decoder; +-extern AVCodec ff_ffv1_encoder; +-extern AVCodec ff_ffv1_decoder; +-extern AVCodec ff_ffvhuff_encoder; +-extern AVCodec ff_ffvhuff_decoder; +-extern AVCodec ff_fic_decoder; +-extern AVCodec ff_fits_encoder; +-extern AVCodec ff_fits_decoder; +-extern AVCodec ff_flashsv_encoder; +-extern AVCodec ff_flashsv_decoder; +-extern AVCodec ff_flashsv2_encoder; +-extern AVCodec ff_flashsv2_decoder; +-extern AVCodec ff_flic_decoder; +-extern AVCodec ff_flv_encoder; +-extern AVCodec ff_flv_decoder; +-extern AVCodec ff_fmvc_decoder; +-extern AVCodec ff_fourxm_decoder; +-extern AVCodec ff_fraps_decoder; +-extern AVCodec ff_frwu_decoder; +-extern AVCodec ff_g2m_decoder; +-extern AVCodec ff_gdv_decoder; +-extern AVCodec ff_gif_encoder; +-extern AVCodec ff_gif_decoder; +-extern AVCodec ff_h261_encoder; +-extern AVCodec ff_h261_decoder; +-extern AVCodec ff_h263_encoder; +-extern AVCodec ff_h263_decoder; +-extern AVCodec ff_h263i_decoder; +-extern AVCodec ff_h263p_encoder; +-extern AVCodec ff_h263p_decoder; +-extern AVCodec ff_h263_v4l2m2m_decoder; +-extern AVCodec ff_h264_decoder; +-extern AVCodec ff_h264_crystalhd_decoder; +-extern AVCodec ff_h264_v4l2m2m_decoder; +-extern AVCodec ff_h264_mediacodec_decoder; +-extern AVCodec ff_h264_mmal_decoder; +-extern AVCodec ff_h264_qsv_decoder; +-extern AVCodec ff_h264_rkmpp_decoder; +-extern AVCodec ff_hap_encoder; +-extern AVCodec ff_hap_decoder; +-extern AVCodec ff_hevc_decoder; +-extern AVCodec ff_hevc_qsv_decoder; +-extern AVCodec ff_hevc_rkmpp_decoder; +-extern AVCodec ff_hevc_v4l2m2m_decoder; +-extern AVCodec ff_hnm4_video_decoder; +-extern AVCodec ff_hq_hqa_decoder; +-extern AVCodec ff_hqx_decoder; +-extern AVCodec ff_huffyuv_encoder; +-extern AVCodec ff_huffyuv_decoder; +-extern AVCodec ff_hymt_decoder; +-extern AVCodec ff_idcin_decoder; +-extern AVCodec ff_iff_ilbm_decoder; +-extern AVCodec ff_imm4_decoder; +-extern AVCodec ff_imm5_decoder; +-extern AVCodec ff_indeo2_decoder; +-extern AVCodec ff_indeo3_decoder; +-extern AVCodec ff_indeo4_decoder; +-extern AVCodec ff_indeo5_decoder; +-extern AVCodec ff_interplay_video_decoder; +-extern AVCodec ff_ipu_decoder; +-extern AVCodec ff_jpeg2000_encoder; +-extern AVCodec ff_jpeg2000_decoder; +-extern AVCodec ff_jpegls_encoder; +-extern AVCodec ff_jpegls_decoder; +-extern AVCodec ff_jv_decoder; +-extern AVCodec ff_kgv1_decoder; +-extern AVCodec ff_kmvc_decoder; +-extern AVCodec ff_lagarith_decoder; +-extern AVCodec ff_ljpeg_encoder; +-extern AVCodec ff_loco_decoder; +-extern AVCodec ff_lscr_decoder; +-extern AVCodec ff_m101_decoder; +-extern AVCodec ff_magicyuv_encoder; +-extern AVCodec ff_magicyuv_decoder; +-extern AVCodec ff_mdec_decoder; +-extern AVCodec ff_mimic_decoder; +-extern AVCodec ff_mjpeg_encoder; +-extern AVCodec ff_mjpeg_decoder; +-extern AVCodec ff_mjpegb_decoder; +-extern AVCodec ff_mmvideo_decoder; +-extern AVCodec ff_mobiclip_decoder; +-extern AVCodec ff_motionpixels_decoder; +-extern AVCodec ff_mpeg1video_encoder; +-extern AVCodec ff_mpeg1video_decoder; +-extern AVCodec ff_mpeg2video_encoder; +-extern AVCodec ff_mpeg2video_decoder; +-extern AVCodec ff_mpeg4_encoder; +-extern AVCodec ff_mpeg4_decoder; +-extern AVCodec ff_mpeg4_crystalhd_decoder; +-extern AVCodec ff_mpeg4_v4l2m2m_decoder; +-extern AVCodec ff_mpeg4_mmal_decoder; +-extern AVCodec ff_mpegvideo_decoder; +-extern AVCodec ff_mpeg1_v4l2m2m_decoder; +-extern AVCodec ff_mpeg2_mmal_decoder; +-extern AVCodec ff_mpeg2_crystalhd_decoder; +-extern AVCodec ff_mpeg2_v4l2m2m_decoder; +-extern AVCodec ff_mpeg2_qsv_decoder; +-extern AVCodec ff_mpeg2_mediacodec_decoder; +-extern AVCodec ff_msa1_decoder; +-extern AVCodec ff_mscc_decoder; +-extern AVCodec ff_msmpeg4v1_decoder; +-extern AVCodec ff_msmpeg4v2_encoder; +-extern AVCodec ff_msmpeg4v2_decoder; +-extern AVCodec ff_msmpeg4v3_encoder; +-extern AVCodec ff_msmpeg4v3_decoder; +-extern AVCodec ff_msmpeg4_crystalhd_decoder; +-extern AVCodec ff_msp2_decoder; +-extern AVCodec ff_msrle_decoder; +-extern AVCodec ff_mss1_decoder; +-extern AVCodec ff_mss2_decoder; +-extern AVCodec ff_msvideo1_encoder; +-extern AVCodec ff_msvideo1_decoder; +-extern AVCodec ff_mszh_decoder; +-extern AVCodec ff_mts2_decoder; +-extern AVCodec ff_mv30_decoder; +-extern AVCodec ff_mvc1_decoder; +-extern AVCodec ff_mvc2_decoder; +-extern AVCodec ff_mvdv_decoder; +-extern AVCodec ff_mvha_decoder; +-extern AVCodec ff_mwsc_decoder; +-extern AVCodec ff_mxpeg_decoder; +-extern AVCodec ff_notchlc_decoder; +-extern AVCodec ff_nuv_decoder; +-extern AVCodec ff_paf_video_decoder; +-extern AVCodec ff_pam_encoder; +-extern AVCodec ff_pam_decoder; +-extern AVCodec ff_pbm_encoder; +-extern AVCodec ff_pbm_decoder; +-extern AVCodec ff_pcx_encoder; +-extern AVCodec ff_pcx_decoder; +-extern AVCodec ff_pfm_encoder; +-extern AVCodec ff_pfm_decoder; +-extern AVCodec ff_pgm_encoder; +-extern AVCodec ff_pgm_decoder; +-extern AVCodec ff_pgmyuv_encoder; +-extern AVCodec ff_pgmyuv_decoder; +-extern AVCodec ff_pgx_decoder; +-extern AVCodec ff_photocd_decoder; +-extern AVCodec ff_pictor_decoder; +-extern AVCodec ff_pixlet_decoder; +-extern AVCodec ff_png_encoder; +-extern AVCodec ff_png_decoder; +-extern AVCodec ff_ppm_encoder; +-extern AVCodec ff_ppm_decoder; +-extern AVCodec ff_prores_encoder; +-extern AVCodec ff_prores_decoder; +-extern AVCodec ff_prores_aw_encoder; +-extern AVCodec ff_prores_ks_encoder; +-extern AVCodec ff_prosumer_decoder; +-extern AVCodec ff_psd_decoder; +-extern AVCodec ff_ptx_decoder; +-extern AVCodec ff_qdraw_decoder; +-extern AVCodec ff_qpeg_decoder; +-extern AVCodec ff_qtrle_encoder; +-extern AVCodec ff_qtrle_decoder; +-extern AVCodec ff_r10k_encoder; +-extern AVCodec ff_r10k_decoder; +-extern AVCodec ff_r210_encoder; +-extern AVCodec ff_r210_decoder; +-extern AVCodec ff_rasc_decoder; +-extern AVCodec ff_rawvideo_encoder; +-extern AVCodec ff_rawvideo_decoder; +-extern AVCodec ff_rl2_decoder; +-extern AVCodec ff_roq_encoder; +-extern AVCodec ff_roq_decoder; +-extern AVCodec ff_rpza_encoder; +-extern AVCodec ff_rpza_decoder; +-extern AVCodec ff_rscc_decoder; +-extern AVCodec ff_rv10_encoder; +-extern AVCodec ff_rv10_decoder; +-extern AVCodec ff_rv20_encoder; +-extern AVCodec ff_rv20_decoder; +-extern AVCodec ff_rv30_decoder; +-extern AVCodec ff_rv40_decoder; +-extern AVCodec ff_s302m_encoder; +-extern AVCodec ff_s302m_decoder; +-extern AVCodec ff_sanm_decoder; +-extern AVCodec ff_scpr_decoder; +-extern AVCodec ff_screenpresso_decoder; +-extern AVCodec ff_sga_decoder; +-extern AVCodec ff_sgi_encoder; +-extern AVCodec ff_sgi_decoder; +-extern AVCodec ff_sgirle_decoder; +-extern AVCodec ff_sheervideo_decoder; +-extern AVCodec ff_simbiosis_imx_decoder; +-extern AVCodec ff_smacker_decoder; +-extern AVCodec ff_smc_decoder; +-extern AVCodec ff_smvjpeg_decoder; +-extern AVCodec ff_snow_encoder; +-extern AVCodec ff_snow_decoder; +-extern AVCodec ff_sp5x_decoder; +-extern AVCodec ff_speedhq_decoder; +-extern AVCodec ff_speedhq_encoder; +-extern AVCodec ff_srgc_decoder; +-extern AVCodec ff_sunrast_encoder; +-extern AVCodec ff_sunrast_decoder; +-extern AVCodec ff_svq1_encoder; +-extern AVCodec ff_svq1_decoder; +-extern AVCodec ff_svq3_decoder; +-extern AVCodec ff_targa_encoder; +-extern AVCodec ff_targa_decoder; +-extern AVCodec ff_targa_y216_decoder; +-extern AVCodec ff_tdsc_decoder; +-extern AVCodec ff_theora_decoder; +-extern AVCodec ff_thp_decoder; +-extern AVCodec ff_tiertexseqvideo_decoder; +-extern AVCodec ff_tiff_encoder; +-extern AVCodec ff_tiff_decoder; +-extern AVCodec ff_tmv_decoder; +-extern AVCodec ff_truemotion1_decoder; +-extern AVCodec ff_truemotion2_decoder; +-extern AVCodec ff_truemotion2rt_decoder; +-extern AVCodec ff_tscc_decoder; +-extern AVCodec ff_tscc2_decoder; +-extern AVCodec ff_txd_decoder; +-extern AVCodec ff_ulti_decoder; +-extern AVCodec ff_utvideo_encoder; +-extern AVCodec ff_utvideo_decoder; +-extern AVCodec ff_v210_encoder; +-extern AVCodec ff_v210_decoder; +-extern AVCodec ff_v210x_decoder; +-extern AVCodec ff_v308_encoder; +-extern AVCodec ff_v308_decoder; +-extern AVCodec ff_v408_encoder; +-extern AVCodec ff_v408_decoder; +-extern AVCodec ff_v410_encoder; +-extern AVCodec ff_v410_decoder; +-extern AVCodec ff_vb_decoder; +-extern AVCodec ff_vble_decoder; +-extern AVCodec ff_vc1_decoder; +-extern AVCodec ff_vc1_crystalhd_decoder; +-extern AVCodec ff_vc1image_decoder; +-extern AVCodec ff_vc1_mmal_decoder; +-extern AVCodec ff_vc1_qsv_decoder; +-extern AVCodec ff_vc1_v4l2m2m_decoder; +-extern AVCodec ff_vc2_encoder; +-extern AVCodec ff_vcr1_decoder; +-extern AVCodec ff_vmdvideo_decoder; +-extern AVCodec ff_vmnc_decoder; +-extern AVCodec ff_vp3_decoder; +-extern AVCodec ff_vp4_decoder; +-extern AVCodec ff_vp5_decoder; +-extern AVCodec ff_vp6_decoder; +-extern AVCodec ff_vp6a_decoder; +-extern AVCodec ff_vp6f_decoder; +-extern AVCodec ff_vp7_decoder; +-extern AVCodec ff_vp8_decoder; +-extern AVCodec ff_vp8_rkmpp_decoder; +-extern AVCodec ff_vp8_v4l2m2m_decoder; +-extern AVCodec ff_vp9_decoder; +-extern AVCodec ff_vp9_rkmpp_decoder; +-extern AVCodec ff_vp9_v4l2m2m_decoder; +-extern AVCodec ff_vqa_decoder; +-extern AVCodec ff_webp_decoder; +-extern AVCodec ff_wcmv_decoder; +-extern AVCodec ff_wrapped_avframe_encoder; +-extern AVCodec ff_wrapped_avframe_decoder; +-extern AVCodec ff_wmv1_encoder; +-extern AVCodec ff_wmv1_decoder; +-extern AVCodec ff_wmv2_encoder; +-extern AVCodec ff_wmv2_decoder; +-extern AVCodec ff_wmv3_decoder; +-extern AVCodec ff_wmv3_crystalhd_decoder; +-extern AVCodec ff_wmv3image_decoder; +-extern AVCodec ff_wnv1_decoder; +-extern AVCodec ff_xan_wc3_decoder; +-extern AVCodec ff_xan_wc4_decoder; +-extern AVCodec ff_xbm_encoder; +-extern AVCodec ff_xbm_decoder; +-extern AVCodec ff_xface_encoder; +-extern AVCodec ff_xface_decoder; +-extern AVCodec ff_xl_decoder; +-extern AVCodec ff_xpm_decoder; +-extern AVCodec ff_xwd_encoder; +-extern AVCodec ff_xwd_decoder; +-extern AVCodec ff_y41p_encoder; +-extern AVCodec ff_y41p_decoder; +-extern AVCodec ff_ylc_decoder; +-extern AVCodec ff_yop_decoder; +-extern AVCodec ff_yuv4_encoder; +-extern AVCodec ff_yuv4_decoder; +-extern AVCodec ff_zero12v_decoder; +-extern AVCodec ff_zerocodec_decoder; +-extern AVCodec ff_zlib_encoder; +-extern AVCodec ff_zlib_decoder; +-extern AVCodec ff_zmbv_encoder; +-extern AVCodec ff_zmbv_decoder; ++#include "codec.h" ++#include "codec_id.h" ++#include "codec_internal.h" ++ ++extern const FFCodec ff_a64multi_encoder; ++extern const FFCodec ff_a64multi5_encoder; ++extern const FFCodec ff_aasc_decoder; ++extern const FFCodec ff_aic_decoder; ++extern const FFCodec ff_alias_pix_encoder; ++extern const FFCodec ff_alias_pix_decoder; ++extern const FFCodec ff_agm_decoder; ++extern const FFCodec ff_amv_encoder; ++extern const FFCodec ff_amv_decoder; ++extern const FFCodec ff_anm_decoder; ++extern const FFCodec ff_ansi_decoder; ++extern const FFCodec ff_apng_encoder; ++extern const FFCodec ff_apng_decoder; ++extern const FFCodec ff_arbc_decoder; ++extern const FFCodec ff_argo_decoder; ++extern const FFCodec ff_asv1_encoder; ++extern const FFCodec ff_asv1_decoder; ++extern const FFCodec ff_asv2_encoder; ++extern const FFCodec ff_asv2_decoder; ++extern const FFCodec ff_aura_decoder; ++extern const FFCodec ff_aura2_decoder; ++extern const FFCodec ff_avrp_encoder; ++extern const FFCodec ff_avrp_decoder; ++extern const FFCodec ff_avrn_decoder; ++extern const FFCodec ff_avs_decoder; ++extern const FFCodec ff_avui_encoder; ++extern const FFCodec ff_avui_decoder; ++#if FF_API_AYUV_CODECID ++extern const FFCodec ff_ayuv_encoder; ++extern const FFCodec ff_ayuv_decoder; ++#endif ++extern const FFCodec ff_bethsoftvid_decoder; ++extern const FFCodec ff_bfi_decoder; ++extern const FFCodec ff_bink_decoder; ++extern const FFCodec ff_bitpacked_decoder; ++extern const FFCodec ff_bitpacked_encoder; ++extern const FFCodec ff_bmp_encoder; ++extern const FFCodec ff_bmp_decoder; ++extern const FFCodec ff_bmv_video_decoder; ++extern const FFCodec ff_brender_pix_decoder; ++extern const FFCodec ff_c93_decoder; ++extern const FFCodec ff_cavs_decoder; ++extern const FFCodec ff_cdgraphics_decoder; ++extern const FFCodec ff_cdtoons_decoder; ++extern const FFCodec ff_cdxl_decoder; ++extern const FFCodec ff_cfhd_encoder; ++extern const FFCodec ff_cfhd_decoder; ++extern const FFCodec ff_cinepak_encoder; ++extern const FFCodec ff_cinepak_decoder; ++extern const FFCodec ff_clearvideo_decoder; ++extern const FFCodec ff_cljr_encoder; ++extern const FFCodec ff_cljr_decoder; ++extern const FFCodec ff_cllc_decoder; ++extern const FFCodec ff_comfortnoise_encoder; ++extern const FFCodec ff_comfortnoise_decoder; ++extern const FFCodec ff_cpia_decoder; ++extern const FFCodec ff_cri_decoder; ++extern const FFCodec ff_cscd_decoder; ++extern const FFCodec ff_cyuv_decoder; ++extern const FFCodec ff_dds_decoder; ++extern const FFCodec ff_dfa_decoder; ++extern const FFCodec ff_dirac_decoder; ++extern const FFCodec ff_dnxhd_encoder; ++extern const FFCodec ff_dnxhd_decoder; ++extern const FFCodec ff_dpx_encoder; ++extern const FFCodec ff_dpx_decoder; ++extern const FFCodec ff_dsicinvideo_decoder; ++extern const FFCodec ff_dvaudio_decoder; ++extern const FFCodec ff_dvvideo_encoder; ++extern const FFCodec ff_dvvideo_decoder; ++extern const FFCodec ff_dxa_decoder; ++extern const FFCodec ff_dxtory_decoder; ++extern const FFCodec ff_dxv_decoder; ++extern const FFCodec ff_eacmv_decoder; ++extern const FFCodec ff_eamad_decoder; ++extern const FFCodec ff_eatgq_decoder; ++extern const FFCodec ff_eatgv_decoder; ++extern const FFCodec ff_eatqi_decoder; ++extern const FFCodec ff_eightbps_decoder; ++extern const FFCodec ff_eightsvx_exp_decoder; ++extern const FFCodec ff_eightsvx_fib_decoder; ++extern const FFCodec ff_escape124_decoder; ++extern const FFCodec ff_escape130_decoder; ++extern const FFCodec ff_exr_encoder; ++extern const FFCodec ff_exr_decoder; ++extern const FFCodec ff_ffv1_encoder; ++extern const FFCodec ff_ffv1_decoder; ++extern const FFCodec ff_ffvhuff_encoder; ++extern const FFCodec ff_ffvhuff_decoder; ++extern const FFCodec ff_fic_decoder; ++extern const FFCodec ff_fits_encoder; ++extern const FFCodec ff_fits_decoder; ++extern const FFCodec ff_flashsv_encoder; ++extern const FFCodec ff_flashsv_decoder; ++extern const FFCodec ff_flashsv2_encoder; ++extern const FFCodec ff_flashsv2_decoder; ++extern const FFCodec ff_flic_decoder; ++extern const FFCodec ff_flv_encoder; ++extern const FFCodec ff_flv_decoder; ++extern const FFCodec ff_fmvc_decoder; ++extern const FFCodec ff_fourxm_decoder; ++extern const FFCodec ff_fraps_decoder; ++extern const FFCodec ff_frwu_decoder; ++extern const FFCodec ff_g2m_decoder; ++extern const FFCodec ff_gdv_decoder; ++extern const FFCodec ff_gem_decoder; ++extern const FFCodec ff_gif_encoder; ++extern const FFCodec ff_gif_decoder; ++extern const FFCodec ff_h261_encoder; ++extern const FFCodec ff_h261_decoder; ++extern const FFCodec ff_h263_encoder; ++extern const FFCodec ff_h263_decoder; ++extern const FFCodec ff_h263i_decoder; ++extern const FFCodec ff_h263p_encoder; ++extern const FFCodec ff_h263p_decoder; ++extern const FFCodec ff_h263_v4l2m2m_decoder; ++extern const FFCodec ff_h264_decoder; ++extern const FFCodec ff_h264_crystalhd_decoder; ++extern const FFCodec ff_h264_v4l2m2m_decoder; ++extern const FFCodec ff_h264_mediacodec_decoder; ++extern const FFCodec ff_h264_mediacodec_encoder; ++extern const FFCodec ff_h264_mmal_decoder; ++extern const FFCodec ff_h264_qsv_decoder; ++extern const FFCodec ff_h264_rkmpp_decoder; ++extern const FFCodec ff_hap_encoder; ++extern const FFCodec ff_hap_decoder; ++extern const FFCodec ff_hevc_decoder; ++extern const FFCodec ff_hevc_qsv_decoder; ++extern const FFCodec ff_hevc_rkmpp_decoder; ++extern const FFCodec ff_hevc_v4l2m2m_decoder; ++extern const FFCodec ff_hnm4_video_decoder; ++extern const FFCodec ff_hq_hqa_decoder; ++extern const FFCodec ff_hqx_decoder; ++extern const FFCodec ff_huffyuv_encoder; ++extern const FFCodec ff_huffyuv_decoder; ++extern const FFCodec ff_hymt_decoder; ++extern const FFCodec ff_idcin_decoder; ++extern const FFCodec ff_iff_ilbm_decoder; ++extern const FFCodec ff_imm4_decoder; ++extern const FFCodec ff_imm5_decoder; ++extern const FFCodec ff_indeo2_decoder; ++extern const FFCodec ff_indeo3_decoder; ++extern const FFCodec ff_indeo4_decoder; ++extern const FFCodec ff_indeo5_decoder; ++extern const FFCodec ff_interplay_video_decoder; ++extern const FFCodec ff_ipu_decoder; ++extern const FFCodec ff_jpeg2000_encoder; ++extern const FFCodec ff_jpeg2000_decoder; ++extern const FFCodec ff_jpegls_encoder; ++extern const FFCodec ff_jpegls_decoder; ++extern const FFCodec ff_jv_decoder; ++extern const FFCodec ff_kgv1_decoder; ++extern const FFCodec ff_kmvc_decoder; ++extern const FFCodec ff_lagarith_decoder; ++extern const FFCodec ff_ljpeg_encoder; ++extern const FFCodec ff_loco_decoder; ++extern const FFCodec ff_lscr_decoder; ++extern const FFCodec ff_m101_decoder; ++extern const FFCodec ff_magicyuv_encoder; ++extern const FFCodec ff_magicyuv_decoder; ++extern const FFCodec ff_mdec_decoder; ++extern const FFCodec ff_media100_decoder; ++extern const FFCodec ff_mimic_decoder; ++extern const FFCodec ff_mjpeg_encoder; ++extern const FFCodec ff_mjpeg_decoder; ++extern const FFCodec ff_mjpegb_decoder; ++extern const FFCodec ff_mmvideo_decoder; ++extern const FFCodec ff_mobiclip_decoder; ++extern const FFCodec ff_motionpixels_decoder; ++extern const FFCodec ff_mpeg1video_encoder; ++extern const FFCodec ff_mpeg1video_decoder; ++extern const FFCodec ff_mpeg2video_encoder; ++extern const FFCodec ff_mpeg2video_decoder; ++extern const FFCodec ff_mpeg4_encoder; ++extern const FFCodec ff_mpeg4_decoder; ++extern const FFCodec ff_mpeg4_crystalhd_decoder; ++extern const FFCodec ff_mpeg4_v4l2m2m_decoder; ++extern const FFCodec ff_mpeg4_mmal_decoder; ++extern const FFCodec ff_mpegvideo_decoder; ++extern const FFCodec ff_mpeg1_v4l2m2m_decoder; ++extern const FFCodec ff_mpeg2_mmal_decoder; ++extern const FFCodec ff_mpeg2_crystalhd_decoder; ++extern const FFCodec ff_mpeg2_v4l2m2m_decoder; ++extern const FFCodec ff_mpeg2_qsv_decoder; ++extern const FFCodec ff_mpeg2_mediacodec_decoder; ++extern const FFCodec ff_msa1_decoder; ++extern const FFCodec ff_mscc_decoder; ++extern const FFCodec ff_msmpeg4v1_decoder; ++extern const FFCodec ff_msmpeg4v2_encoder; ++extern const FFCodec ff_msmpeg4v2_decoder; ++extern const FFCodec ff_msmpeg4v3_encoder; ++extern const FFCodec ff_msmpeg4v3_decoder; ++extern const FFCodec ff_msmpeg4_crystalhd_decoder; ++extern const FFCodec ff_msp2_decoder; ++extern const FFCodec ff_msrle_decoder; ++extern const FFCodec ff_mss1_decoder; ++extern const FFCodec ff_mss2_decoder; ++extern const FFCodec ff_msvideo1_encoder; ++extern const FFCodec ff_msvideo1_decoder; ++extern const FFCodec ff_mszh_decoder; ++extern const FFCodec ff_mts2_decoder; ++extern const FFCodec ff_mv30_decoder; ++extern const FFCodec ff_mvc1_decoder; ++extern const FFCodec ff_mvc2_decoder; ++extern const FFCodec ff_mvdv_decoder; ++extern const FFCodec ff_mvha_decoder; ++extern const FFCodec ff_mwsc_decoder; ++extern const FFCodec ff_mxpeg_decoder; ++extern const FFCodec ff_notchlc_decoder; ++extern const FFCodec ff_nuv_decoder; ++extern const FFCodec ff_paf_video_decoder; ++extern const FFCodec ff_pam_encoder; ++extern const FFCodec ff_pam_decoder; ++extern const FFCodec ff_pbm_encoder; ++extern const FFCodec ff_pbm_decoder; ++extern const FFCodec ff_pcx_encoder; ++extern const FFCodec ff_pcx_decoder; ++extern const FFCodec ff_pfm_encoder; ++extern const FFCodec ff_pfm_decoder; ++extern const FFCodec ff_pgm_encoder; ++extern const FFCodec ff_pgm_decoder; ++extern const FFCodec ff_pgmyuv_encoder; ++extern const FFCodec ff_pgmyuv_decoder; ++extern const FFCodec ff_pgx_decoder; ++extern const FFCodec ff_phm_encoder; ++extern const FFCodec ff_phm_decoder; ++extern const FFCodec ff_photocd_decoder; ++extern const FFCodec ff_pictor_decoder; ++extern const FFCodec ff_pixlet_decoder; ++extern const FFCodec ff_png_encoder; ++extern const FFCodec ff_png_decoder; ++extern const FFCodec ff_ppm_encoder; ++extern const FFCodec ff_ppm_decoder; ++extern const FFCodec ff_prores_encoder; ++extern const FFCodec ff_prores_decoder; ++extern const FFCodec ff_prores_aw_encoder; ++extern const FFCodec ff_prores_ks_encoder; ++extern const FFCodec ff_prosumer_decoder; ++extern const FFCodec ff_psd_decoder; ++extern const FFCodec ff_ptx_decoder; ++extern const FFCodec ff_qdraw_decoder; ++extern const FFCodec ff_qoi_encoder; ++extern const FFCodec ff_qoi_decoder; ++extern const FFCodec ff_qpeg_decoder; ++extern const FFCodec ff_qtrle_encoder; ++extern const FFCodec ff_qtrle_decoder; ++extern const FFCodec ff_r10k_encoder; ++extern const FFCodec ff_r10k_decoder; ++extern const FFCodec ff_r210_encoder; ++extern const FFCodec ff_r210_decoder; ++extern const FFCodec ff_rasc_decoder; ++extern const FFCodec ff_rawvideo_encoder; ++extern const FFCodec ff_rawvideo_decoder; ++extern const FFCodec ff_rka_decoder; ++extern const FFCodec ff_rl2_decoder; ++extern const FFCodec ff_roq_encoder; ++extern const FFCodec ff_roq_decoder; ++extern const FFCodec ff_rpza_encoder; ++extern const FFCodec ff_rpza_decoder; ++extern const FFCodec ff_rscc_decoder; ++extern const FFCodec ff_rv10_encoder; ++extern const FFCodec ff_rv10_decoder; ++extern const FFCodec ff_rv20_encoder; ++extern const FFCodec ff_rv20_decoder; ++extern const FFCodec ff_rv30_decoder; ++extern const FFCodec ff_rv40_decoder; ++extern const FFCodec ff_s302m_encoder; ++extern const FFCodec ff_s302m_decoder; ++extern const FFCodec ff_sanm_decoder; ++extern const FFCodec ff_scpr_decoder; ++extern const FFCodec ff_screenpresso_decoder; ++extern const FFCodec ff_sga_decoder; ++extern const FFCodec ff_sgi_encoder; ++extern const FFCodec ff_sgi_decoder; ++extern const FFCodec ff_sgirle_decoder; ++extern const FFCodec ff_sheervideo_decoder; ++extern const FFCodec ff_simbiosis_imx_decoder; ++extern const FFCodec ff_smacker_decoder; ++extern const FFCodec ff_smc_encoder; ++extern const FFCodec ff_smc_decoder; ++extern const FFCodec ff_smvjpeg_decoder; ++extern const FFCodec ff_snow_encoder; ++extern const FFCodec ff_snow_decoder; ++extern const FFCodec ff_sp5x_decoder; ++extern const FFCodec ff_speedhq_decoder; ++extern const FFCodec ff_speedhq_encoder; ++extern const FFCodec ff_speex_decoder; ++extern const FFCodec ff_srgc_decoder; ++extern const FFCodec ff_sunrast_encoder; ++extern const FFCodec ff_sunrast_decoder; ++extern const FFCodec ff_svq1_encoder; ++extern const FFCodec ff_svq1_decoder; ++extern const FFCodec ff_svq3_decoder; ++extern const FFCodec ff_targa_encoder; ++extern const FFCodec ff_targa_decoder; ++extern const FFCodec ff_targa_y216_decoder; ++extern const FFCodec ff_tdsc_decoder; ++extern const FFCodec ff_theora_decoder; ++extern const FFCodec ff_thp_decoder; ++extern const FFCodec ff_tiertexseqvideo_decoder; ++extern const FFCodec ff_tiff_encoder; ++extern const FFCodec ff_tiff_decoder; ++extern const FFCodec ff_tmv_decoder; ++extern const FFCodec ff_truemotion1_decoder; ++extern const FFCodec ff_truemotion2_decoder; ++extern const FFCodec ff_truemotion2rt_decoder; ++extern const FFCodec ff_tscc_decoder; ++extern const FFCodec ff_tscc2_decoder; ++extern const FFCodec ff_txd_decoder; ++extern const FFCodec ff_ulti_decoder; ++extern const FFCodec ff_utvideo_encoder; ++extern const FFCodec ff_utvideo_decoder; ++extern const FFCodec ff_v210_encoder; ++extern const FFCodec ff_v210_decoder; ++extern const FFCodec ff_v210x_decoder; ++extern const FFCodec ff_v308_encoder; ++extern const FFCodec ff_v308_decoder; ++extern const FFCodec ff_v408_encoder; ++extern const FFCodec ff_v408_decoder; ++extern const FFCodec ff_v410_encoder; ++extern const FFCodec ff_v410_decoder; ++extern const FFCodec ff_vb_decoder; ++extern const FFCodec ff_vbn_encoder; ++extern const FFCodec ff_vbn_decoder; ++extern const FFCodec ff_vble_decoder; ++extern const FFCodec ff_vc1_decoder; ++extern const FFCodec ff_vc1_crystalhd_decoder; ++extern const FFCodec ff_vc1image_decoder; ++extern const FFCodec ff_vc1_mmal_decoder; ++extern const FFCodec ff_vc1_qsv_decoder; ++extern const FFCodec ff_vc1_v4l2m2m_decoder; ++extern const FFCodec ff_vc2_encoder; ++extern const FFCodec ff_vcr1_decoder; ++extern const FFCodec ff_vmdvideo_decoder; ++extern const FFCodec ff_vmnc_decoder; ++extern const FFCodec ff_vp3_decoder; ++extern const FFCodec ff_vp4_decoder; ++extern const FFCodec ff_vp5_decoder; ++extern const FFCodec ff_vp6_decoder; ++extern const FFCodec ff_vp6a_decoder; ++extern const FFCodec ff_vp6f_decoder; ++extern const FFCodec ff_vp7_decoder; ++extern const FFCodec ff_vp8_decoder; ++extern const FFCodec ff_vp8_rkmpp_decoder; ++extern const FFCodec ff_vp8_v4l2m2m_decoder; ++extern const FFCodec ff_vp9_decoder; ++extern const FFCodec ff_vp9_rkmpp_decoder; ++extern const FFCodec ff_vp9_v4l2m2m_decoder; ++extern const FFCodec ff_vqa_decoder; ++extern const FFCodec ff_vqc_decoder; ++extern const FFCodec ff_wbmp_decoder; ++extern const FFCodec ff_wbmp_encoder; ++extern const FFCodec ff_webp_decoder; ++extern const FFCodec ff_wcmv_decoder; ++extern const FFCodec ff_wrapped_avframe_encoder; ++extern const FFCodec ff_wrapped_avframe_decoder; ++extern const FFCodec ff_wmv1_encoder; ++extern const FFCodec ff_wmv1_decoder; ++extern const FFCodec ff_wmv2_encoder; ++extern const FFCodec ff_wmv2_decoder; ++extern const FFCodec ff_wmv3_decoder; ++extern const FFCodec ff_wmv3_crystalhd_decoder; ++extern const FFCodec ff_wmv3image_decoder; ++extern const FFCodec ff_wnv1_decoder; ++extern const FFCodec ff_xan_wc3_decoder; ++extern const FFCodec ff_xan_wc4_decoder; ++extern const FFCodec ff_xbm_encoder; ++extern const FFCodec ff_xbm_decoder; ++extern const FFCodec ff_xface_encoder; ++extern const FFCodec ff_xface_decoder; ++extern const FFCodec ff_xl_decoder; ++extern const FFCodec ff_xpm_decoder; ++extern const FFCodec ff_xwd_encoder; ++extern const FFCodec ff_xwd_decoder; ++extern const FFCodec ff_y41p_encoder; ++extern const FFCodec ff_y41p_decoder; ++extern const FFCodec ff_ylc_decoder; ++extern const FFCodec ff_yop_decoder; ++extern const FFCodec ff_yuv4_encoder; ++extern const FFCodec ff_yuv4_decoder; ++extern const FFCodec ff_zero12v_decoder; ++extern const FFCodec ff_zerocodec_decoder; ++extern const FFCodec ff_zlib_encoder; ++extern const FFCodec ff_zlib_decoder; ++extern const FFCodec ff_zmbv_encoder; ++extern const FFCodec ff_zmbv_decoder; + + /* audio codecs */ +-extern AVCodec ff_aac_encoder; +-extern AVCodec ff_aac_decoder; +-extern AVCodec ff_aac_fixed_decoder; +-extern AVCodec ff_aac_latm_decoder; +-extern AVCodec ff_ac3_encoder; +-extern AVCodec ff_ac3_decoder; +-extern AVCodec ff_ac3_fixed_encoder; +-extern AVCodec ff_ac3_fixed_decoder; +-extern AVCodec ff_acelp_kelvin_decoder; +-extern AVCodec ff_alac_encoder; +-extern AVCodec ff_alac_decoder; +-extern AVCodec ff_als_decoder; +-extern AVCodec ff_amrnb_decoder; +-extern AVCodec ff_amrwb_decoder; +-extern AVCodec ff_ape_decoder; +-extern AVCodec ff_aptx_encoder; +-extern AVCodec ff_aptx_decoder; +-extern AVCodec ff_aptx_hd_encoder; +-extern AVCodec ff_aptx_hd_decoder; +-extern AVCodec ff_atrac1_decoder; +-extern AVCodec ff_atrac3_decoder; +-extern AVCodec ff_atrac3al_decoder; +-extern AVCodec ff_atrac3p_decoder; +-extern AVCodec ff_atrac3pal_decoder; +-extern AVCodec ff_atrac9_decoder; +-extern AVCodec ff_binkaudio_dct_decoder; +-extern AVCodec ff_binkaudio_rdft_decoder; +-extern AVCodec ff_bmv_audio_decoder; +-extern AVCodec ff_cook_decoder; +-extern AVCodec ff_dca_encoder; +-extern AVCodec ff_dca_decoder; +-extern AVCodec ff_dolby_e_decoder; +-extern AVCodec ff_dsd_lsbf_decoder; +-extern AVCodec ff_dsd_msbf_decoder; +-extern AVCodec ff_dsd_lsbf_planar_decoder; +-extern AVCodec ff_dsd_msbf_planar_decoder; +-extern AVCodec ff_dsicinaudio_decoder; +-extern AVCodec ff_dss_sp_decoder; +-extern AVCodec ff_dst_decoder; +-extern AVCodec ff_eac3_encoder; +-extern AVCodec ff_eac3_decoder; +-extern AVCodec ff_evrc_decoder; +-extern AVCodec ff_fastaudio_decoder; +-extern AVCodec ff_ffwavesynth_decoder; +-extern AVCodec ff_flac_encoder; +-extern AVCodec ff_flac_decoder; +-extern AVCodec ff_g723_1_encoder; +-extern AVCodec ff_g723_1_decoder; +-extern AVCodec ff_g729_decoder; +-extern AVCodec ff_gsm_decoder; +-extern AVCodec ff_gsm_ms_decoder; +-extern AVCodec ff_hca_decoder; +-extern AVCodec ff_hcom_decoder; +-extern AVCodec ff_iac_decoder; +-extern AVCodec ff_ilbc_decoder; +-extern AVCodec ff_imc_decoder; +-extern AVCodec ff_interplay_acm_decoder; +-extern AVCodec ff_mace3_decoder; +-extern AVCodec ff_mace6_decoder; +-extern AVCodec ff_metasound_decoder; +-extern AVCodec ff_mlp_encoder; +-extern AVCodec ff_mlp_decoder; +-extern AVCodec ff_mp1_decoder; +-extern AVCodec ff_mp1float_decoder; +-extern AVCodec ff_mp2_encoder; +-extern AVCodec ff_mp2_decoder; +-extern AVCodec ff_mp2float_decoder; +-extern AVCodec ff_mp2fixed_encoder; +-extern AVCodec ff_mp3float_decoder; +-extern AVCodec ff_mp3_decoder; +-extern AVCodec ff_mp3adufloat_decoder; +-extern AVCodec ff_mp3adu_decoder; +-extern AVCodec ff_mp3on4float_decoder; +-extern AVCodec ff_mp3on4_decoder; +-extern AVCodec ff_mpc7_decoder; +-extern AVCodec ff_mpc8_decoder; +-extern AVCodec ff_nellymoser_encoder; +-extern AVCodec ff_nellymoser_decoder; +-extern AVCodec ff_on2avc_decoder; +-extern AVCodec ff_opus_encoder; +-extern AVCodec ff_opus_decoder; +-extern AVCodec ff_paf_audio_decoder; +-extern AVCodec ff_qcelp_decoder; +-extern AVCodec ff_qdm2_decoder; +-extern AVCodec ff_qdmc_decoder; +-extern AVCodec ff_ra_144_encoder; +-extern AVCodec ff_ra_144_decoder; +-extern AVCodec ff_ra_288_decoder; +-extern AVCodec ff_ralf_decoder; +-extern AVCodec ff_sbc_encoder; +-extern AVCodec ff_sbc_decoder; +-extern AVCodec ff_shorten_decoder; +-extern AVCodec ff_sipr_decoder; +-extern AVCodec ff_siren_decoder; +-extern AVCodec ff_smackaud_decoder; +-extern AVCodec ff_sonic_encoder; +-extern AVCodec ff_sonic_decoder; +-extern AVCodec ff_sonic_ls_encoder; +-extern AVCodec ff_tak_decoder; +-extern AVCodec ff_truehd_encoder; +-extern AVCodec ff_truehd_decoder; +-extern AVCodec ff_truespeech_decoder; +-extern AVCodec ff_tta_encoder; +-extern AVCodec ff_tta_decoder; +-extern AVCodec ff_twinvq_decoder; +-extern AVCodec ff_vmdaudio_decoder; +-extern AVCodec ff_vorbis_encoder; +-extern AVCodec ff_vorbis_decoder; +-extern AVCodec ff_wavpack_encoder; +-extern AVCodec ff_wavpack_decoder; +-extern AVCodec ff_wmalossless_decoder; +-extern AVCodec ff_wmapro_decoder; +-extern AVCodec ff_wmav1_encoder; +-extern AVCodec ff_wmav1_decoder; +-extern AVCodec ff_wmav2_encoder; +-extern AVCodec ff_wmav2_decoder; +-extern AVCodec ff_wmavoice_decoder; +-extern AVCodec ff_ws_snd1_decoder; +-extern AVCodec ff_xma1_decoder; +-extern AVCodec ff_xma2_decoder; ++extern const FFCodec ff_aac_encoder; ++extern const FFCodec ff_aac_decoder; ++extern const FFCodec ff_aac_fixed_decoder; ++extern const FFCodec ff_aac_latm_decoder; ++extern const FFCodec ff_ac3_encoder; ++extern const FFCodec ff_ac3_decoder; ++extern const FFCodec ff_ac3_fixed_encoder; ++extern const FFCodec ff_ac3_fixed_decoder; ++extern const FFCodec ff_acelp_kelvin_decoder; ++extern const FFCodec ff_alac_encoder; ++extern const FFCodec ff_alac_decoder; ++extern const FFCodec ff_als_decoder; ++extern const FFCodec ff_amrnb_decoder; ++extern const FFCodec ff_amrwb_decoder; ++extern const FFCodec ff_apac_decoder; ++extern const FFCodec ff_ape_decoder; ++extern const FFCodec ff_aptx_encoder; ++extern const FFCodec ff_aptx_decoder; ++extern const FFCodec ff_aptx_hd_encoder; ++extern const FFCodec ff_aptx_hd_decoder; ++extern const FFCodec ff_atrac1_decoder; ++extern const FFCodec ff_atrac3_decoder; ++extern const FFCodec ff_atrac3al_decoder; ++extern const FFCodec ff_atrac3p_decoder; ++extern const FFCodec ff_atrac3pal_decoder; ++extern const FFCodec ff_atrac9_decoder; ++extern const FFCodec ff_binkaudio_dct_decoder; ++extern const FFCodec ff_binkaudio_rdft_decoder; ++extern const FFCodec ff_bmv_audio_decoder; ++extern const FFCodec ff_bonk_decoder; ++extern const FFCodec ff_cook_decoder; ++extern const FFCodec ff_dca_encoder; ++extern const FFCodec ff_dca_decoder; ++extern const FFCodec ff_dfpwm_encoder; ++extern const FFCodec ff_dfpwm_decoder; ++extern const FFCodec ff_dolby_e_decoder; ++extern const FFCodec ff_dsd_lsbf_decoder; ++extern const FFCodec ff_dsd_msbf_decoder; ++extern const FFCodec ff_dsd_lsbf_planar_decoder; ++extern const FFCodec ff_dsd_msbf_planar_decoder; ++extern const FFCodec ff_dsicinaudio_decoder; ++extern const FFCodec ff_dss_sp_decoder; ++extern const FFCodec ff_dst_decoder; ++extern const FFCodec ff_eac3_encoder; ++extern const FFCodec ff_eac3_decoder; ++extern const FFCodec ff_evrc_decoder; ++extern const FFCodec ff_fastaudio_decoder; ++extern const FFCodec ff_ffwavesynth_decoder; ++extern const FFCodec ff_flac_encoder; ++extern const FFCodec ff_flac_decoder; ++extern const FFCodec ff_ftr_decoder; ++extern const FFCodec ff_g723_1_encoder; ++extern const FFCodec ff_g723_1_decoder; ++extern const FFCodec ff_g729_decoder; ++extern const FFCodec ff_gsm_decoder; ++extern const FFCodec ff_gsm_ms_decoder; ++extern const FFCodec ff_hca_decoder; ++extern const FFCodec ff_hcom_decoder; ++extern const FFCodec ff_hdr_encoder; ++extern const FFCodec ff_hdr_decoder; ++extern const FFCodec ff_iac_decoder; ++extern const FFCodec ff_ilbc_decoder; ++extern const FFCodec ff_imc_decoder; ++extern const FFCodec ff_interplay_acm_decoder; ++extern const FFCodec ff_mace3_decoder; ++extern const FFCodec ff_mace6_decoder; ++extern const FFCodec ff_metasound_decoder; ++extern const FFCodec ff_misc4_decoder; ++extern const FFCodec ff_mlp_encoder; ++extern const FFCodec ff_mlp_decoder; ++extern const FFCodec ff_mp1_decoder; ++extern const FFCodec ff_mp1float_decoder; ++extern const FFCodec ff_mp2_encoder; ++extern const FFCodec ff_mp2_decoder; ++extern const FFCodec ff_mp2float_decoder; ++extern const FFCodec ff_mp2fixed_encoder; ++extern const FFCodec ff_mp3float_decoder; ++extern const FFCodec ff_mp3_decoder; ++extern const FFCodec ff_mp3adufloat_decoder; ++extern const FFCodec ff_mp3adu_decoder; ++extern const FFCodec ff_mp3on4float_decoder; ++extern const FFCodec ff_mp3on4_decoder; ++extern const FFCodec ff_mpc7_decoder; ++extern const FFCodec ff_mpc8_decoder; ++extern const FFCodec ff_msnsiren_decoder; ++extern const FFCodec ff_nellymoser_encoder; ++extern const FFCodec ff_nellymoser_decoder; ++extern const FFCodec ff_on2avc_decoder; ++extern const FFCodec ff_opus_encoder; ++extern const FFCodec ff_opus_decoder; ++extern const FFCodec ff_paf_audio_decoder; ++extern const FFCodec ff_qcelp_decoder; ++extern const FFCodec ff_qdm2_decoder; ++extern const FFCodec ff_qdmc_decoder; ++extern const FFCodec ff_ra_144_encoder; ++extern const FFCodec ff_ra_144_decoder; ++extern const FFCodec ff_ra_288_decoder; ++extern const FFCodec ff_ralf_decoder; ++extern const FFCodec ff_sbc_encoder; ++extern const FFCodec ff_sbc_decoder; ++extern const FFCodec ff_shorten_decoder; ++extern const FFCodec ff_sipr_decoder; ++extern const FFCodec ff_siren_decoder; ++extern const FFCodec ff_smackaud_decoder; ++extern const FFCodec ff_sonic_encoder; ++extern const FFCodec ff_sonic_decoder; ++extern const FFCodec ff_sonic_ls_encoder; ++extern const FFCodec ff_tak_decoder; ++extern const FFCodec ff_truehd_encoder; ++extern const FFCodec ff_truehd_decoder; ++extern const FFCodec ff_truespeech_decoder; ++extern const FFCodec ff_tta_encoder; ++extern const FFCodec ff_tta_decoder; ++extern const FFCodec ff_twinvq_decoder; ++extern const FFCodec ff_vmdaudio_decoder; ++extern const FFCodec ff_vorbis_encoder; ++extern const FFCodec ff_vorbis_decoder; ++extern const FFCodec ff_wavarc_decoder; ++extern const FFCodec ff_wavpack_encoder; ++extern const FFCodec ff_wavpack_decoder; ++extern const FFCodec ff_wmalossless_decoder; ++extern const FFCodec ff_wmapro_decoder; ++extern const FFCodec ff_wmav1_encoder; ++extern const FFCodec ff_wmav1_decoder; ++extern const FFCodec ff_wmav2_encoder; ++extern const FFCodec ff_wmav2_decoder; ++extern const FFCodec ff_wmavoice_decoder; ++extern const FFCodec ff_ws_snd1_decoder; ++extern const FFCodec ff_xma1_decoder; ++extern const FFCodec ff_xma2_decoder; + + /* PCM codecs */ +-extern AVCodec ff_pcm_alaw_encoder; +-extern AVCodec ff_pcm_alaw_decoder; +-extern AVCodec ff_pcm_bluray_decoder; +-extern AVCodec ff_pcm_dvd_encoder; +-extern AVCodec ff_pcm_dvd_decoder; +-extern AVCodec ff_pcm_f16le_decoder; +-extern AVCodec ff_pcm_f24le_decoder; +-extern AVCodec ff_pcm_f32be_encoder; +-extern AVCodec ff_pcm_f32be_decoder; +-extern AVCodec ff_pcm_f32le_encoder; +-extern AVCodec ff_pcm_f32le_decoder; +-extern AVCodec ff_pcm_f64be_encoder; +-extern AVCodec ff_pcm_f64be_decoder; +-extern AVCodec ff_pcm_f64le_encoder; +-extern AVCodec ff_pcm_f64le_decoder; +-extern AVCodec ff_pcm_lxf_decoder; +-extern AVCodec ff_pcm_mulaw_encoder; +-extern AVCodec ff_pcm_mulaw_decoder; +-extern AVCodec ff_pcm_s8_encoder; +-extern AVCodec ff_pcm_s8_decoder; +-extern AVCodec ff_pcm_s8_planar_encoder; +-extern AVCodec ff_pcm_s8_planar_decoder; +-extern AVCodec ff_pcm_s16be_encoder; +-extern AVCodec ff_pcm_s16be_decoder; +-extern AVCodec ff_pcm_s16be_planar_encoder; +-extern AVCodec ff_pcm_s16be_planar_decoder; +-extern AVCodec ff_pcm_s16le_encoder; +-extern AVCodec ff_pcm_s16le_decoder; +-extern AVCodec ff_pcm_s16le_planar_encoder; +-extern AVCodec ff_pcm_s16le_planar_decoder; +-extern AVCodec ff_pcm_s24be_encoder; +-extern AVCodec ff_pcm_s24be_decoder; +-extern AVCodec ff_pcm_s24daud_encoder; +-extern AVCodec ff_pcm_s24daud_decoder; +-extern AVCodec ff_pcm_s24le_encoder; +-extern AVCodec ff_pcm_s24le_decoder; +-extern AVCodec ff_pcm_s24le_planar_encoder; +-extern AVCodec ff_pcm_s24le_planar_decoder; +-extern AVCodec ff_pcm_s32be_encoder; +-extern AVCodec ff_pcm_s32be_decoder; +-extern AVCodec ff_pcm_s32le_encoder; +-extern AVCodec ff_pcm_s32le_decoder; +-extern AVCodec ff_pcm_s32le_planar_encoder; +-extern AVCodec ff_pcm_s32le_planar_decoder; +-extern AVCodec ff_pcm_s64be_encoder; +-extern AVCodec ff_pcm_s64be_decoder; +-extern AVCodec ff_pcm_s64le_encoder; +-extern AVCodec ff_pcm_s64le_decoder; +-extern AVCodec ff_pcm_sga_decoder; +-extern AVCodec ff_pcm_u8_encoder; +-extern AVCodec ff_pcm_u8_decoder; +-extern AVCodec ff_pcm_u16be_encoder; +-extern AVCodec ff_pcm_u16be_decoder; +-extern AVCodec ff_pcm_u16le_encoder; +-extern AVCodec ff_pcm_u16le_decoder; +-extern AVCodec ff_pcm_u24be_encoder; +-extern AVCodec ff_pcm_u24be_decoder; +-extern AVCodec ff_pcm_u24le_encoder; +-extern AVCodec ff_pcm_u24le_decoder; +-extern AVCodec ff_pcm_u32be_encoder; +-extern AVCodec ff_pcm_u32be_decoder; +-extern AVCodec ff_pcm_u32le_encoder; +-extern AVCodec ff_pcm_u32le_decoder; +-extern AVCodec ff_pcm_vidc_encoder; +-extern AVCodec ff_pcm_vidc_decoder; ++extern const FFCodec ff_pcm_alaw_encoder; ++extern const FFCodec ff_pcm_alaw_decoder; ++extern const FFCodec ff_pcm_bluray_encoder; ++extern const FFCodec ff_pcm_bluray_decoder; ++extern const FFCodec ff_pcm_dvd_encoder; ++extern const FFCodec ff_pcm_dvd_decoder; ++extern const FFCodec ff_pcm_f16le_decoder; ++extern const FFCodec ff_pcm_f24le_decoder; ++extern const FFCodec ff_pcm_f32be_encoder; ++extern const FFCodec ff_pcm_f32be_decoder; ++extern const FFCodec ff_pcm_f32le_encoder; ++extern const FFCodec ff_pcm_f32le_decoder; ++extern const FFCodec ff_pcm_f64be_encoder; ++extern const FFCodec ff_pcm_f64be_decoder; ++extern const FFCodec ff_pcm_f64le_encoder; ++extern const FFCodec ff_pcm_f64le_decoder; ++extern const FFCodec ff_pcm_lxf_decoder; ++extern const FFCodec ff_pcm_mulaw_encoder; ++extern const FFCodec ff_pcm_mulaw_decoder; ++extern const FFCodec ff_pcm_s8_encoder; ++extern const FFCodec ff_pcm_s8_decoder; ++extern const FFCodec ff_pcm_s8_planar_encoder; ++extern const FFCodec ff_pcm_s8_planar_decoder; ++extern const FFCodec ff_pcm_s16be_encoder; ++extern const FFCodec ff_pcm_s16be_decoder; ++extern const FFCodec ff_pcm_s16be_planar_encoder; ++extern const FFCodec ff_pcm_s16be_planar_decoder; ++extern const FFCodec ff_pcm_s16le_encoder; ++extern const FFCodec ff_pcm_s16le_decoder; ++extern const FFCodec ff_pcm_s16le_planar_encoder; ++extern const FFCodec ff_pcm_s16le_planar_decoder; ++extern const FFCodec ff_pcm_s24be_encoder; ++extern const FFCodec ff_pcm_s24be_decoder; ++extern const FFCodec ff_pcm_s24daud_encoder; ++extern const FFCodec ff_pcm_s24daud_decoder; ++extern const FFCodec ff_pcm_s24le_encoder; ++extern const FFCodec ff_pcm_s24le_decoder; ++extern const FFCodec ff_pcm_s24le_planar_encoder; ++extern const FFCodec ff_pcm_s24le_planar_decoder; ++extern const FFCodec ff_pcm_s32be_encoder; ++extern const FFCodec ff_pcm_s32be_decoder; ++extern const FFCodec ff_pcm_s32le_encoder; ++extern const FFCodec ff_pcm_s32le_decoder; ++extern const FFCodec ff_pcm_s32le_planar_encoder; ++extern const FFCodec ff_pcm_s32le_planar_decoder; ++extern const FFCodec ff_pcm_s64be_encoder; ++extern const FFCodec ff_pcm_s64be_decoder; ++extern const FFCodec ff_pcm_s64le_encoder; ++extern const FFCodec ff_pcm_s64le_decoder; ++extern const FFCodec ff_pcm_sga_decoder; ++extern const FFCodec ff_pcm_u8_encoder; ++extern const FFCodec ff_pcm_u8_decoder; ++extern const FFCodec ff_pcm_u16be_encoder; ++extern const FFCodec ff_pcm_u16be_decoder; ++extern const FFCodec ff_pcm_u16le_encoder; ++extern const FFCodec ff_pcm_u16le_decoder; ++extern const FFCodec ff_pcm_u24be_encoder; ++extern const FFCodec ff_pcm_u24be_decoder; ++extern const FFCodec ff_pcm_u24le_encoder; ++extern const FFCodec ff_pcm_u24le_decoder; ++extern const FFCodec ff_pcm_u32be_encoder; ++extern const FFCodec ff_pcm_u32be_decoder; ++extern const FFCodec ff_pcm_u32le_encoder; ++extern const FFCodec ff_pcm_u32le_decoder; ++extern const FFCodec ff_pcm_vidc_encoder; ++extern const FFCodec ff_pcm_vidc_decoder; + + /* DPCM codecs */ +-extern AVCodec ff_derf_dpcm_decoder; +-extern AVCodec ff_gremlin_dpcm_decoder; +-extern AVCodec ff_interplay_dpcm_decoder; +-extern AVCodec ff_roq_dpcm_encoder; +-extern AVCodec ff_roq_dpcm_decoder; +-extern AVCodec ff_sdx2_dpcm_decoder; +-extern AVCodec ff_sol_dpcm_decoder; +-extern AVCodec ff_xan_dpcm_decoder; ++extern const FFCodec ff_cbd2_dpcm_decoder; ++extern const FFCodec ff_derf_dpcm_decoder; ++extern const FFCodec ff_gremlin_dpcm_decoder; ++extern const FFCodec ff_interplay_dpcm_decoder; ++extern const FFCodec ff_roq_dpcm_encoder; ++extern const FFCodec ff_roq_dpcm_decoder; ++extern const FFCodec ff_sdx2_dpcm_decoder; ++extern const FFCodec ff_sol_dpcm_decoder; ++extern const FFCodec ff_xan_dpcm_decoder; ++extern const FFCodec ff_wady_dpcm_decoder; + + /* ADPCM codecs */ +-extern AVCodec ff_adpcm_4xm_decoder; +-extern AVCodec ff_adpcm_adx_encoder; +-extern AVCodec ff_adpcm_adx_decoder; +-extern AVCodec ff_adpcm_afc_decoder; +-extern AVCodec ff_adpcm_agm_decoder; +-extern AVCodec ff_adpcm_aica_decoder; +-extern AVCodec ff_adpcm_argo_decoder; +-extern AVCodec ff_adpcm_argo_encoder; +-extern AVCodec ff_adpcm_ct_decoder; +-extern AVCodec ff_adpcm_dtk_decoder; +-extern AVCodec ff_adpcm_ea_decoder; +-extern AVCodec ff_adpcm_ea_maxis_xa_decoder; +-extern AVCodec ff_adpcm_ea_r1_decoder; +-extern AVCodec ff_adpcm_ea_r2_decoder; +-extern AVCodec ff_adpcm_ea_r3_decoder; +-extern AVCodec ff_adpcm_ea_xas_decoder; +-extern AVCodec ff_adpcm_g722_encoder; +-extern AVCodec ff_adpcm_g722_decoder; +-extern AVCodec ff_adpcm_g726_encoder; +-extern AVCodec ff_adpcm_g726_decoder; +-extern AVCodec ff_adpcm_g726le_encoder; +-extern AVCodec ff_adpcm_g726le_decoder; +-extern AVCodec ff_adpcm_ima_amv_decoder; +-extern AVCodec ff_adpcm_ima_amv_encoder; +-extern AVCodec ff_adpcm_ima_alp_decoder; +-extern AVCodec ff_adpcm_ima_alp_encoder; +-extern AVCodec ff_adpcm_ima_apc_decoder; +-extern AVCodec ff_adpcm_ima_apm_decoder; +-extern AVCodec ff_adpcm_ima_apm_encoder; +-extern AVCodec ff_adpcm_ima_cunning_decoder; +-extern AVCodec ff_adpcm_ima_dat4_decoder; +-extern AVCodec ff_adpcm_ima_dk3_decoder; +-extern AVCodec ff_adpcm_ima_dk4_decoder; +-extern AVCodec ff_adpcm_ima_ea_eacs_decoder; +-extern AVCodec ff_adpcm_ima_ea_sead_decoder; +-extern AVCodec ff_adpcm_ima_iss_decoder; +-extern AVCodec ff_adpcm_ima_moflex_decoder; +-extern AVCodec ff_adpcm_ima_mtf_decoder; +-extern AVCodec ff_adpcm_ima_oki_decoder; +-extern AVCodec ff_adpcm_ima_qt_encoder; +-extern AVCodec ff_adpcm_ima_qt_decoder; +-extern AVCodec ff_adpcm_ima_rad_decoder; +-extern AVCodec ff_adpcm_ima_ssi_decoder; +-extern AVCodec ff_adpcm_ima_ssi_encoder; +-extern AVCodec ff_adpcm_ima_smjpeg_decoder; +-extern AVCodec ff_adpcm_ima_wav_encoder; +-extern AVCodec ff_adpcm_ima_wav_decoder; +-extern AVCodec ff_adpcm_ima_ws_decoder; +-extern AVCodec ff_adpcm_ms_encoder; +-extern AVCodec ff_adpcm_ms_decoder; +-extern AVCodec ff_adpcm_mtaf_decoder; +-extern AVCodec ff_adpcm_psx_decoder; +-extern AVCodec ff_adpcm_sbpro_2_decoder; +-extern AVCodec ff_adpcm_sbpro_3_decoder; +-extern AVCodec ff_adpcm_sbpro_4_decoder; +-extern AVCodec ff_adpcm_swf_encoder; +-extern AVCodec ff_adpcm_swf_decoder; +-extern AVCodec ff_adpcm_thp_decoder; +-extern AVCodec ff_adpcm_thp_le_decoder; +-extern AVCodec ff_adpcm_vima_decoder; +-extern AVCodec ff_adpcm_xa_decoder; +-extern AVCodec ff_adpcm_yamaha_encoder; +-extern AVCodec ff_adpcm_yamaha_decoder; +-extern AVCodec ff_adpcm_zork_decoder; ++extern const FFCodec ff_adpcm_4xm_decoder; ++extern const FFCodec ff_adpcm_adx_encoder; ++extern const FFCodec ff_adpcm_adx_decoder; ++extern const FFCodec ff_adpcm_afc_decoder; ++extern const FFCodec ff_adpcm_agm_decoder; ++extern const FFCodec ff_adpcm_aica_decoder; ++extern const FFCodec ff_adpcm_argo_decoder; ++extern const FFCodec ff_adpcm_argo_encoder; ++extern const FFCodec ff_adpcm_ct_decoder; ++extern const FFCodec ff_adpcm_dtk_decoder; ++extern const FFCodec ff_adpcm_ea_decoder; ++extern const FFCodec ff_adpcm_ea_maxis_xa_decoder; ++extern const FFCodec ff_adpcm_ea_r1_decoder; ++extern const FFCodec ff_adpcm_ea_r2_decoder; ++extern const FFCodec ff_adpcm_ea_r3_decoder; ++extern const FFCodec ff_adpcm_ea_xas_decoder; ++extern const FFCodec ff_adpcm_g722_encoder; ++extern const FFCodec ff_adpcm_g722_decoder; ++extern const FFCodec ff_adpcm_g726_encoder; ++extern const FFCodec ff_adpcm_g726_decoder; ++extern const FFCodec ff_adpcm_g726le_encoder; ++extern const FFCodec ff_adpcm_g726le_decoder; ++extern const FFCodec ff_adpcm_ima_acorn_decoder; ++extern const FFCodec ff_adpcm_ima_amv_decoder; ++extern const FFCodec ff_adpcm_ima_amv_encoder; ++extern const FFCodec ff_adpcm_ima_alp_decoder; ++extern const FFCodec ff_adpcm_ima_alp_encoder; ++extern const FFCodec ff_adpcm_ima_apc_decoder; ++extern const FFCodec ff_adpcm_ima_apm_decoder; ++extern const FFCodec ff_adpcm_ima_apm_encoder; ++extern const FFCodec ff_adpcm_ima_cunning_decoder; ++extern const FFCodec ff_adpcm_ima_dat4_decoder; ++extern const FFCodec ff_adpcm_ima_dk3_decoder; ++extern const FFCodec ff_adpcm_ima_dk4_decoder; ++extern const FFCodec ff_adpcm_ima_ea_eacs_decoder; ++extern const FFCodec ff_adpcm_ima_ea_sead_decoder; ++extern const FFCodec ff_adpcm_ima_iss_decoder; ++extern const FFCodec ff_adpcm_ima_moflex_decoder; ++extern const FFCodec ff_adpcm_ima_mtf_decoder; ++extern const FFCodec ff_adpcm_ima_oki_decoder; ++extern const FFCodec ff_adpcm_ima_qt_encoder; ++extern const FFCodec ff_adpcm_ima_qt_decoder; ++extern const FFCodec ff_adpcm_ima_rad_decoder; ++extern const FFCodec ff_adpcm_ima_ssi_decoder; ++extern const FFCodec ff_adpcm_ima_ssi_encoder; ++extern const FFCodec ff_adpcm_ima_smjpeg_decoder; ++extern const FFCodec ff_adpcm_ima_wav_encoder; ++extern const FFCodec ff_adpcm_ima_wav_decoder; ++extern const FFCodec ff_adpcm_ima_ws_encoder; ++extern const FFCodec ff_adpcm_ima_ws_decoder; ++extern const FFCodec ff_adpcm_ms_encoder; ++extern const FFCodec ff_adpcm_ms_decoder; ++extern const FFCodec ff_adpcm_mtaf_decoder; ++extern const FFCodec ff_adpcm_psx_decoder; ++extern const FFCodec ff_adpcm_sbpro_2_decoder; ++extern const FFCodec ff_adpcm_sbpro_3_decoder; ++extern const FFCodec ff_adpcm_sbpro_4_decoder; ++extern const FFCodec ff_adpcm_swf_encoder; ++extern const FFCodec ff_adpcm_swf_decoder; ++extern const FFCodec ff_adpcm_thp_decoder; ++extern const FFCodec ff_adpcm_thp_le_decoder; ++extern const FFCodec ff_adpcm_vima_decoder; ++extern const FFCodec ff_adpcm_xa_decoder; ++extern const FFCodec ff_adpcm_xmd_decoder; ++extern const FFCodec ff_adpcm_yamaha_encoder; ++extern const FFCodec ff_adpcm_yamaha_decoder; ++extern const FFCodec ff_adpcm_zork_decoder; + + /* subtitles */ +-extern AVCodec ff_ssa_encoder; +-extern AVCodec ff_ssa_decoder; +-extern AVCodec ff_ass_encoder; +-extern AVCodec ff_ass_decoder; +-extern AVCodec ff_ccaption_decoder; +-extern AVCodec ff_dvbsub_encoder; +-extern AVCodec ff_dvbsub_decoder; +-extern AVCodec ff_dvdsub_encoder; +-extern AVCodec ff_dvdsub_decoder; +-extern AVCodec ff_jacosub_decoder; +-extern AVCodec ff_microdvd_decoder; +-extern AVCodec ff_movtext_encoder; +-extern AVCodec ff_movtext_decoder; +-extern AVCodec ff_mpl2_decoder; +-extern AVCodec ff_pgssub_decoder; +-extern AVCodec ff_pjs_decoder; +-extern AVCodec ff_realtext_decoder; +-extern AVCodec ff_sami_decoder; +-extern AVCodec ff_srt_encoder; +-extern AVCodec ff_srt_decoder; +-extern AVCodec ff_stl_decoder; +-extern AVCodec ff_subrip_encoder; +-extern AVCodec ff_subrip_decoder; +-extern AVCodec ff_subviewer_decoder; +-extern AVCodec ff_subviewer1_decoder; +-extern AVCodec ff_text_encoder; +-extern AVCodec ff_text_decoder; +-extern AVCodec ff_ttml_encoder; +-extern AVCodec ff_vplayer_decoder; +-extern AVCodec ff_webvtt_encoder; +-extern AVCodec ff_webvtt_decoder; +-extern AVCodec ff_xsub_encoder; +-extern AVCodec ff_xsub_decoder; ++extern const FFCodec ff_ssa_encoder; ++extern const FFCodec ff_ssa_decoder; ++extern const FFCodec ff_ass_encoder; ++extern const FFCodec ff_ass_decoder; ++extern const FFCodec ff_ccaption_decoder; ++extern const FFCodec ff_dvbsub_encoder; ++extern const FFCodec ff_dvbsub_decoder; ++extern const FFCodec ff_dvdsub_encoder; ++extern const FFCodec ff_dvdsub_decoder; ++extern const FFCodec ff_jacosub_decoder; ++extern const FFCodec ff_microdvd_decoder; ++extern const FFCodec ff_movtext_encoder; ++extern const FFCodec ff_movtext_decoder; ++extern const FFCodec ff_mpl2_decoder; ++extern const FFCodec ff_pgssub_decoder; ++extern const FFCodec ff_pjs_decoder; ++extern const FFCodec ff_realtext_decoder; ++extern const FFCodec ff_sami_decoder; ++extern const FFCodec ff_srt_encoder; ++extern const FFCodec ff_srt_decoder; ++extern const FFCodec ff_stl_decoder; ++extern const FFCodec ff_subrip_encoder; ++extern const FFCodec ff_subrip_decoder; ++extern const FFCodec ff_subviewer_decoder; ++extern const FFCodec ff_subviewer1_decoder; ++extern const FFCodec ff_text_encoder; ++extern const FFCodec ff_text_decoder; ++extern const FFCodec ff_ttml_encoder; ++extern const FFCodec ff_vplayer_decoder; ++extern const FFCodec ff_webvtt_encoder; ++extern const FFCodec ff_webvtt_decoder; ++extern const FFCodec ff_xsub_encoder; ++extern const FFCodec ff_xsub_decoder; + + /* external libraries */ +-extern AVCodec ff_aac_at_encoder; +-extern AVCodec ff_aac_at_decoder; +-extern AVCodec ff_ac3_at_decoder; +-extern AVCodec ff_adpcm_ima_qt_at_decoder; +-extern AVCodec ff_alac_at_encoder; +-extern AVCodec ff_alac_at_decoder; +-extern AVCodec ff_amr_nb_at_decoder; +-extern AVCodec ff_eac3_at_decoder; +-extern AVCodec ff_gsm_ms_at_decoder; +-extern AVCodec ff_ilbc_at_encoder; +-extern AVCodec ff_ilbc_at_decoder; +-extern AVCodec ff_mp1_at_decoder; +-extern AVCodec ff_mp2_at_decoder; +-extern AVCodec ff_mp3_at_decoder; +-extern AVCodec ff_pcm_alaw_at_encoder; +-extern AVCodec ff_pcm_alaw_at_decoder; +-extern AVCodec ff_pcm_mulaw_at_encoder; +-extern AVCodec ff_pcm_mulaw_at_decoder; +-extern AVCodec ff_qdmc_at_decoder; +-extern AVCodec ff_qdm2_at_decoder; +-extern AVCodec ff_libaom_av1_encoder; +-extern AVCodec ff_libaribb24_decoder; +-extern AVCodec ff_libcelt_decoder; +-extern AVCodec ff_libcodec2_encoder; +-extern AVCodec ff_libcodec2_decoder; +-extern AVCodec ff_libdav1d_decoder; +-extern AVCodec ff_libdavs2_decoder; +-extern AVCodec ff_libfdk_aac_encoder; +-extern AVCodec ff_libfdk_aac_decoder; +-extern AVCodec ff_libgsm_encoder; +-extern AVCodec ff_libgsm_decoder; +-extern AVCodec ff_libgsm_ms_encoder; +-extern AVCodec ff_libgsm_ms_decoder; +-extern AVCodec ff_libilbc_encoder; +-extern AVCodec ff_libilbc_decoder; +-extern AVCodec ff_libmp3lame_encoder; +-extern AVCodec ff_libopencore_amrnb_encoder; +-extern AVCodec ff_libopencore_amrnb_decoder; +-extern AVCodec ff_libopencore_amrwb_decoder; +-extern AVCodec ff_libopenjpeg_encoder; +-extern AVCodec ff_libopenjpeg_decoder; +-extern AVCodec ff_libopus_encoder; +-extern AVCodec ff_libopus_decoder; +-extern AVCodec ff_librav1e_encoder; +-extern AVCodec ff_librsvg_decoder; +-extern AVCodec ff_libshine_encoder; +-extern AVCodec ff_libspeex_encoder; +-extern AVCodec ff_libspeex_decoder; +-extern AVCodec ff_libsvtav1_encoder; +-extern AVCodec ff_libtheora_encoder; +-extern AVCodec ff_libtwolame_encoder; +-extern AVCodec ff_libuavs3d_decoder; +-extern AVCodec ff_libvo_amrwbenc_encoder; +-extern AVCodec ff_libvorbis_encoder; +-extern AVCodec ff_libvorbis_decoder; +-extern AVCodec ff_libvpx_vp8_encoder; +-extern AVCodec ff_libvpx_vp8_decoder; +-extern AVCodec ff_libvpx_vp9_encoder; +-extern AVCodec ff_libvpx_vp9_decoder; ++extern const FFCodec ff_aac_at_encoder; ++extern const FFCodec ff_aac_at_decoder; ++extern const FFCodec ff_ac3_at_decoder; ++extern const FFCodec ff_adpcm_ima_qt_at_decoder; ++extern const FFCodec ff_alac_at_encoder; ++extern const FFCodec ff_alac_at_decoder; ++extern const FFCodec ff_amr_nb_at_decoder; ++extern const FFCodec ff_eac3_at_decoder; ++extern const FFCodec ff_gsm_ms_at_decoder; ++extern const FFCodec ff_ilbc_at_encoder; ++extern const FFCodec ff_ilbc_at_decoder; ++extern const FFCodec ff_mp1_at_decoder; ++extern const FFCodec ff_mp2_at_decoder; ++extern const FFCodec ff_mp3_at_decoder; ++extern const FFCodec ff_pcm_alaw_at_encoder; ++extern const FFCodec ff_pcm_alaw_at_decoder; ++extern const FFCodec ff_pcm_mulaw_at_encoder; ++extern const FFCodec ff_pcm_mulaw_at_decoder; ++extern const FFCodec ff_qdmc_at_decoder; ++extern const FFCodec ff_qdm2_at_decoder; ++extern FFCodec ff_libaom_av1_encoder; ++extern const FFCodec ff_libaribb24_decoder; ++extern const FFCodec ff_libcelt_decoder; ++extern const FFCodec ff_libcodec2_encoder; ++extern const FFCodec ff_libcodec2_decoder; ++extern const FFCodec ff_libdav1d_decoder; ++extern const FFCodec ff_libdavs2_decoder; ++extern const FFCodec ff_libfdk_aac_encoder; ++extern const FFCodec ff_libfdk_aac_decoder; ++extern const FFCodec ff_libgsm_encoder; ++extern const FFCodec ff_libgsm_decoder; ++extern const FFCodec ff_libgsm_ms_encoder; ++extern const FFCodec ff_libgsm_ms_decoder; ++extern const FFCodec ff_libilbc_encoder; ++extern const FFCodec ff_libilbc_decoder; ++extern const FFCodec ff_libjxl_decoder; ++extern const FFCodec ff_libjxl_encoder; ++extern const FFCodec ff_libmp3lame_encoder; ++extern const FFCodec ff_libopencore_amrnb_encoder; ++extern const FFCodec ff_libopencore_amrnb_decoder; ++extern const FFCodec ff_libopencore_amrwb_decoder; ++extern const FFCodec ff_libopenjpeg_encoder; ++extern const FFCodec ff_libopenjpeg_decoder; ++extern const FFCodec ff_libopus_encoder; ++extern const FFCodec ff_libopus_decoder; ++extern const FFCodec ff_librav1e_encoder; ++extern const FFCodec ff_librsvg_decoder; ++extern const FFCodec ff_libshine_encoder; ++extern const FFCodec ff_libspeex_encoder; ++extern const FFCodec ff_libspeex_decoder; ++extern const FFCodec ff_libsvtav1_encoder; ++extern const FFCodec ff_libtheora_encoder; ++extern const FFCodec ff_libtwolame_encoder; ++extern const FFCodec ff_libuavs3d_decoder; ++extern const FFCodec ff_libvo_amrwbenc_encoder; ++extern const FFCodec ff_libvorbis_encoder; ++extern const FFCodec ff_libvorbis_decoder; ++extern const FFCodec ff_libvpx_vp8_encoder; ++extern const FFCodec ff_libvpx_vp8_decoder; ++extern FFCodec ff_libvpx_vp9_encoder; ++extern FFCodec ff_libvpx_vp9_decoder; + /* preferred over libwebp */ +-extern AVCodec ff_libwebp_anim_encoder; +-extern AVCodec ff_libwebp_encoder; +-extern AVCodec ff_libx262_encoder; +-extern AVCodec ff_libx264_encoder; +-extern AVCodec ff_libx264rgb_encoder; +-extern AVCodec ff_libx265_encoder; +-extern AVCodec ff_libxavs_encoder; +-extern AVCodec ff_libxavs2_encoder; +-extern AVCodec ff_libxvid_encoder; +-extern AVCodec ff_libzvbi_teletext_decoder; ++extern const FFCodec ff_libwebp_anim_encoder; ++extern const FFCodec ff_libwebp_encoder; ++extern const FFCodec ff_libx262_encoder; ++#if CONFIG_LIBX264_ENCODER ++#include ++#if X264_BUILD < 153 ++#define LIBX264_CONST ++#else ++#define LIBX264_CONST const ++#endif ++extern LIBX264_CONST FFCodec ff_libx264_encoder; ++#endif ++extern const FFCodec ff_libx264rgb_encoder; ++extern FFCodec ff_libx265_encoder; ++extern const FFCodec ff_libxavs_encoder; ++extern const FFCodec ff_libxavs2_encoder; ++extern const FFCodec ff_libxvid_encoder; ++extern const FFCodec ff_libzvbi_teletext_decoder; + + /* text */ +-extern AVCodec ff_bintext_decoder; +-extern AVCodec ff_xbin_decoder; +-extern AVCodec ff_idf_decoder; ++extern const FFCodec ff_bintext_decoder; ++extern const FFCodec ff_xbin_decoder; ++extern const FFCodec ff_idf_decoder; + + /* external libraries, that shouldn't be used by default if one of the + * above is available */ +-extern AVCodec ff_aac_mf_encoder; +-extern AVCodec ff_ac3_mf_encoder; +-extern AVCodec ff_h263_v4l2m2m_encoder; +-extern AVCodec ff_libaom_av1_decoder; ++extern const FFCodec ff_aac_mf_encoder; ++extern const FFCodec ff_ac3_mf_encoder; ++extern const FFCodec ff_h263_v4l2m2m_encoder; ++extern const FFCodec ff_libaom_av1_decoder; + /* hwaccel hooks only, so prefer external decoders */ +-extern AVCodec ff_av1_decoder; +-extern AVCodec ff_av1_cuvid_decoder; +-extern AVCodec ff_av1_qsv_decoder; +-extern AVCodec ff_libopenh264_encoder; +-extern AVCodec ff_libopenh264_decoder; +-extern AVCodec ff_h264_amf_encoder; +-extern AVCodec ff_h264_cuvid_decoder; +-extern AVCodec ff_h264_mf_encoder; +-extern AVCodec ff_h264_nvenc_encoder; +-extern AVCodec ff_h264_omx_encoder; +-extern AVCodec ff_h264_qsv_encoder; +-extern AVCodec ff_h264_v4l2m2m_encoder; +-extern AVCodec ff_h264_vaapi_encoder; +-extern AVCodec ff_h264_videotoolbox_encoder; +-#if FF_API_NVENC_OLD_NAME +-extern AVCodec ff_nvenc_encoder; +-extern AVCodec ff_nvenc_h264_encoder; +-extern AVCodec ff_nvenc_hevc_encoder; +-#endif +-extern AVCodec ff_hevc_amf_encoder; +-extern AVCodec ff_hevc_cuvid_decoder; +-extern AVCodec ff_hevc_mediacodec_decoder; +-extern AVCodec ff_hevc_mf_encoder; +-extern AVCodec ff_hevc_nvenc_encoder; +-extern AVCodec ff_hevc_qsv_encoder; +-extern AVCodec ff_hevc_v4l2m2m_encoder; +-extern AVCodec ff_hevc_vaapi_encoder; +-extern AVCodec ff_hevc_videotoolbox_encoder; +-extern AVCodec ff_libkvazaar_encoder; +-extern AVCodec ff_mjpeg_cuvid_decoder; +-extern AVCodec ff_mjpeg_qsv_encoder; +-extern AVCodec ff_mjpeg_qsv_decoder; +-extern AVCodec ff_mjpeg_vaapi_encoder; +-extern AVCodec ff_mp3_mf_encoder; +-extern AVCodec ff_mpeg1_cuvid_decoder; +-extern AVCodec ff_mpeg2_cuvid_decoder; +-extern AVCodec ff_mpeg2_qsv_encoder; +-extern AVCodec ff_mpeg2_vaapi_encoder; +-extern AVCodec ff_mpeg4_cuvid_decoder; +-extern AVCodec ff_mpeg4_mediacodec_decoder; +-extern AVCodec ff_mpeg4_omx_encoder; +-extern AVCodec ff_mpeg4_v4l2m2m_encoder; +-extern AVCodec ff_vc1_cuvid_decoder; +-extern AVCodec ff_vp8_cuvid_decoder; +-extern AVCodec ff_vp8_mediacodec_decoder; +-extern AVCodec ff_vp8_qsv_decoder; +-extern AVCodec ff_vp8_v4l2m2m_encoder; +-extern AVCodec ff_vp8_vaapi_encoder; +-extern AVCodec ff_vp9_cuvid_decoder; +-extern AVCodec ff_vp9_mediacodec_decoder; +-extern AVCodec ff_vp9_qsv_decoder; +-extern AVCodec ff_vp9_vaapi_encoder; +-extern AVCodec ff_vp9_qsv_encoder; ++extern const FFCodec ff_av1_decoder; ++extern const FFCodec ff_av1_cuvid_decoder; ++extern const FFCodec ff_av1_mediacodec_decoder; ++extern const FFCodec ff_av1_nvenc_encoder; ++extern const FFCodec ff_av1_qsv_decoder; ++extern const FFCodec ff_av1_qsv_encoder; ++extern const FFCodec ff_av1_amf_encoder; ++extern const FFCodec ff_libopenh264_encoder; ++extern const FFCodec ff_libopenh264_decoder; ++extern const FFCodec ff_h264_amf_encoder; ++extern const FFCodec ff_h264_cuvid_decoder; ++extern const FFCodec ff_h264_mf_encoder; ++extern const FFCodec ff_h264_nvenc_encoder; ++extern const FFCodec ff_h264_omx_encoder; ++extern const FFCodec ff_h264_qsv_encoder; ++extern const FFCodec ff_h264_v4l2m2m_encoder; ++extern const FFCodec ff_h264_vaapi_encoder; ++extern const FFCodec ff_h264_videotoolbox_encoder; ++extern const FFCodec ff_hevc_amf_encoder; ++extern const FFCodec ff_hevc_cuvid_decoder; ++extern const FFCodec ff_hevc_mediacodec_decoder; ++extern const FFCodec ff_hevc_mediacodec_encoder; ++extern const FFCodec ff_hevc_mf_encoder; ++extern const FFCodec ff_hevc_nvenc_encoder; ++extern const FFCodec ff_hevc_qsv_encoder; ++extern const FFCodec ff_hevc_v4l2m2m_encoder; ++extern const FFCodec ff_hevc_vaapi_encoder; ++extern const FFCodec ff_hevc_videotoolbox_encoder; ++extern const FFCodec ff_libkvazaar_encoder; ++extern const FFCodec ff_mjpeg_cuvid_decoder; ++extern const FFCodec ff_mjpeg_qsv_encoder; ++extern const FFCodec ff_mjpeg_qsv_decoder; ++extern const FFCodec ff_mjpeg_vaapi_encoder; ++extern const FFCodec ff_mp3_mf_encoder; ++extern const FFCodec ff_mpeg1_cuvid_decoder; ++extern const FFCodec ff_mpeg2_cuvid_decoder; ++extern const FFCodec ff_mpeg2_qsv_encoder; ++extern const FFCodec ff_mpeg2_vaapi_encoder; ++extern const FFCodec ff_mpeg4_cuvid_decoder; ++extern const FFCodec ff_mpeg4_mediacodec_decoder; ++extern const FFCodec ff_mpeg4_omx_encoder; ++extern const FFCodec ff_mpeg4_v4l2m2m_encoder; ++extern const FFCodec ff_prores_videotoolbox_encoder; ++extern const FFCodec ff_vc1_cuvid_decoder; ++extern const FFCodec ff_vp8_cuvid_decoder; ++extern const FFCodec ff_vp8_mediacodec_decoder; ++extern const FFCodec ff_vp8_qsv_decoder; ++extern const FFCodec ff_vp8_v4l2m2m_encoder; ++extern const FFCodec ff_vp8_vaapi_encoder; ++extern const FFCodec ff_vp9_cuvid_decoder; ++extern const FFCodec ff_vp9_mediacodec_decoder; ++extern const FFCodec ff_vp9_qsv_decoder; ++extern const FFCodec ff_vp9_vaapi_encoder; ++extern const FFCodec ff_vp9_qsv_encoder; ++ ++// null codecs ++extern const FFCodec ff_vnull_decoder; ++extern const FFCodec ff_vnull_encoder; ++extern const FFCodec ff_anull_decoder; ++extern const FFCodec ff_anull_encoder; + + // The iterate API is not usable with ossfuzz due to the excessive size of binaries created + #if CONFIG_OSSFUZZ +-AVCodec * codec_list[] = { ++const FFCodec * codec_list[] = { + NULL, + NULL, + NULL +@@ -852,62 +908,24 @@ + { + for (int i = 0; codec_list[i]; i++) { + if (codec_list[i]->init_static_data) +- codec_list[i]->init_static_data((AVCodec*)codec_list[i]); ++ codec_list[i]->init_static_data((FFCodec*)codec_list[i]); + } + } + + const AVCodec *av_codec_iterate(void **opaque) + { + uintptr_t i = (uintptr_t)*opaque; +- const AVCodec *c = codec_list[i]; ++ const FFCodec *c = codec_list[i]; + + ff_thread_once(&av_codec_static_init, av_codec_init_static); + +- if (c) ++ if (c) { + *opaque = (void*)(i + 1); +- +- return c; +-} +- +-#if FF_API_NEXT +-FF_DISABLE_DEPRECATION_WARNINGS +-static AVOnce av_codec_next_init = AV_ONCE_INIT; +- +-static void av_codec_init_next(void) +-{ +- AVCodec *prev = NULL, *p; +- void *i = 0; +- while ((p = (AVCodec*)av_codec_iterate(&i))) { +- if (prev) +- prev->next = p; +- prev = p; ++ return &c->p; + } ++ return NULL; + } + +- +- +-av_cold void avcodec_register(AVCodec *codec) +-{ +- ff_thread_once(&av_codec_next_init, av_codec_init_next); +-} +- +-AVCodec *av_codec_next(const AVCodec *c) +-{ +- ff_thread_once(&av_codec_next_init, av_codec_init_next); +- +- if (c) +- return c->next; +- else +- return (AVCodec*)codec_list[0]; +-} +- +-void avcodec_register_all(void) +-{ +- ff_thread_once(&av_codec_next_init, av_codec_init_next); +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + static enum AVCodecID remap_deprecated_codec_id(enum AVCodecID id) + { + switch(id){ +@@ -917,7 +935,7 @@ + } + } + +-static AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) ++static const AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) + { + const AVCodec *p, *experimental = NULL; + void *i = 0; +@@ -931,24 +949,24 @@ + if (p->capabilities & AV_CODEC_CAP_EXPERIMENTAL && !experimental) { + experimental = p; + } else +- return (AVCodec*)p; ++ return p; + } + } + +- return (AVCodec*)experimental; ++ return experimental; + } + +-AVCodec *avcodec_find_encoder(enum AVCodecID id) ++const AVCodec *avcodec_find_encoder(enum AVCodecID id) + { + return find_codec(id, av_codec_is_encoder); + } + +-AVCodec *avcodec_find_decoder(enum AVCodecID id) ++const AVCodec *avcodec_find_decoder(enum AVCodecID id) + { + return find_codec(id, av_codec_is_decoder); + } + +-static AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) ++static const AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) + { + void *i = 0; + const AVCodec *p; +@@ -960,18 +978,18 @@ + if (!x(p)) + continue; + if (strcmp(name, p->name) == 0) +- return (AVCodec*)p; ++ return p; + } + + return NULL; + } + +-AVCodec *avcodec_find_encoder_by_name(const char *name) ++const AVCodec *avcodec_find_encoder_by_name(const char *name) + { + return find_codec_by_name(name, av_codec_is_encoder); + } + +-AVCodec *avcodec_find_decoder_by_name(const char *name) ++const AVCodec *avcodec_find_decoder_by_name(const char *name) + { + return find_codec_by_name(name, av_codec_is_decoder); + } +diff -Naur a/media/ffvpx/libavcodec/arm/fft_init_arm.c b/media/ffvpx/libavcodec/arm/fft_init_arm.c +--- a/media/ffvpx/libavcodec/arm/fft_init_arm.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/arm/fft_init_arm.c 2023-04-06 12:50:06.970471013 +0200 +@@ -48,8 +48,10 @@ + + if (have_neon(cpu_flags)) { + #if CONFIG_FFT +- s->fft_permute = ff_fft_permute_neon; +- s->fft_calc = ff_fft_calc_neon; ++ if (s->nbits < 17) { ++ s->fft_permute = ff_fft_permute_neon; ++ s->fft_calc = ff_fft_calc_neon; ++ } + #endif + #if CONFIG_MDCT + s->imdct_calc = ff_imdct_calc_neon; +diff -Naur a/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c b/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c +--- a/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c 2023-04-06 12:50:06.970471013 +0200 +@@ -18,15 +18,13 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/attributes.h" + #include "libavcodec/flacdsp.h" +-#include "config.h" + + void ff_flac_lpc_16_arm(int32_t *samples, const int coeffs[32], int order, + int qlevel, int len); + +-av_cold void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, +- int bps) ++av_cold void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels) + { +- if (CONFIG_FLAC_DECODER) +- c->lpc16 = ff_flac_lpc_16_arm; ++ c->lpc16 = ff_flac_lpc_16_arm; + } +diff -Naur a/media/ffvpx/libavcodec/atsc_a53.c b/media/ffvpx/libavcodec/atsc_a53.c +--- a/media/ffvpx/libavcodec/atsc_a53.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/atsc_a53.c 2023-04-06 12:49:40.250394769 +0200 +@@ -73,7 +73,7 @@ + int ret, cc_count; + + if (size < 3) +- return AVERROR(EINVAL); ++ return AVERROR_INVALIDDATA; + + ret = init_get_bits8(&gb, data, size); + if (ret < 0) +@@ -95,12 +95,12 @@ + + /* 3 bytes per CC plus one byte marker_bits at the end */ + if (cc_count * 3 >= (get_bits_left(&gb) >> 3)) +- return AVERROR(EINVAL); ++ return AVERROR_INVALIDDATA; + + new_size = (old_size + cc_count * 3); + + if (new_size > INT_MAX) +- return AVERROR(EINVAL); ++ return AVERROR_INVALIDDATA; + + /* Allow merging of the cc data from two fields. */ + ret = av_buffer_realloc(pbuf, new_size); +diff -Naur a/media/ffvpx/libavcodec/av1dec.c b/media/ffvpx/libavcodec/av1dec.c +--- a/media/ffvpx/libavcodec/av1dec.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/av1dec.c 2023-04-06 12:50:24.490176462 +0200 +@@ -18,15 +18,47 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config_components.h" ++ + #include "libavutil/film_grain_params.h" + #include "libavutil/pixdesc.h" + #include "libavutil/opt.h" + #include "avcodec.h" + #include "av1dec.h" + #include "bytestream.h" ++#include "codec_internal.h" ++#include "decode.h" + #include "hwconfig.h" +-#include "internal.h" + #include "profiles.h" ++#include "thread.h" ++ ++/**< same with Div_Lut defined in spec 7.11.3.7 */ ++static const uint16_t div_lut[AV1_DIV_LUT_NUM] = { ++ 16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768, ++ 15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142, ++ 15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564, ++ 14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028, ++ 13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530, ++ 13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066, ++ 13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633, ++ 12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228, ++ 12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848, ++ 11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491, ++ 11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155, ++ 11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838, ++ 10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538, ++ 10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255, ++ 10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986, ++ 9963, 9939, 9916, 9892, 9869, 9846, 9823, 9800, 9777, 9754, 9732, ++ 9709, 9687, 9664, 9642, 9620, 9598, 9576, 9554, 9533, 9511, 9489, ++ 9468, 9447, 9425, 9404, 9383, 9362, 9341, 9321, 9300, 9279, 9259, ++ 9239, 9218, 9198, 9178, 9158, 9138, 9118, 9098, 9079, 9059, 9039, ++ 9020, 9001, 8981, 8962, 8943, 8924, 8905, 8886, 8867, 8849, 8830, ++ 8812, 8793, 8775, 8756, 8738, 8720, 8702, 8684, 8666, 8648, 8630, ++ 8613, 8595, 8577, 8560, 8542, 8525, 8508, 8490, 8473, 8456, 8439, ++ 8422, 8405, 8389, 8372, 8355, 8339, 8322, 8306, 8289, 8273, 8257, ++ 8240, 8224, 8208, 8192 ++}; + + static uint32_t inverse_recenter(int r, uint32_t v) + { +@@ -97,8 +129,72 @@ + -mx, mx + 1, r) << prec_diff) + round; + } + ++static uint64_t round_two(uint64_t x, uint16_t n) ++{ ++ if (n == 0) ++ return x; ++ return ((x + ((uint64_t)1 << (n - 1))) >> n); ++} ++ ++static int64_t round_two_signed(int64_t x, uint16_t n) ++{ ++ return ((x<0) ? -((int64_t)round_two(-x, n)) : (int64_t)round_two(x, n)); ++} ++ + /** +-* update gm type/params, since cbs already implemented part of this funcation, ++ * Resolve divisor process. ++ * see spec 7.11.3.7 ++ */ ++static int16_t resolve_divisor(uint32_t d, uint16_t *shift) ++{ ++ int32_t e, f; ++ ++ *shift = av_log2(d); ++ e = d - (1 << (*shift)); ++ if (*shift > AV1_DIV_LUT_BITS) ++ f = round_two(e, *shift - AV1_DIV_LUT_BITS); ++ else ++ f = e << (AV1_DIV_LUT_BITS - (*shift)); ++ ++ *shift += AV1_DIV_LUT_PREC_BITS; ++ ++ return div_lut[f]; ++} ++ ++/** ++ * check if global motion params is valid. ++ * see spec 7.11.3.6 ++ */ ++static uint8_t get_shear_params_valid(AV1DecContext *s, int idx) ++{ ++ int16_t alpha, beta, gamma, delta, divf, divs; ++ int64_t v, w; ++ int32_t *param = &s->cur_frame.gm_params[idx][0]; ++ if (param[2] < 0) ++ return 0; ++ ++ alpha = av_clip_int16(param[2] - (1 << AV1_WARPEDMODEL_PREC_BITS)); ++ beta = av_clip_int16(param[3]); ++ divf = resolve_divisor(abs(param[2]), &divs); ++ v = (int64_t)param[4] * (1 << AV1_WARPEDMODEL_PREC_BITS); ++ w = (int64_t)param[3] * param[4]; ++ gamma = av_clip_int16((int)round_two_signed((v * divf), divs)); ++ delta = av_clip_int16(param[5] - (int)round_two_signed((w * divf), divs) - (1 << AV1_WARPEDMODEL_PREC_BITS)); ++ ++ alpha = round_two_signed(alpha, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; ++ beta = round_two_signed(beta, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; ++ gamma = round_two_signed(gamma, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; ++ delta = round_two_signed(delta, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; ++ ++ if ((4 * abs(alpha) + 7 * abs(beta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS) || ++ (4 * abs(gamma) + 4 * abs(delta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS)) ++ return 0; ++ ++ return 1; ++} ++ ++/** ++* update gm type/params, since cbs already implemented part of this function, + * so we don't need to full implement spec. + */ + static void global_motion_params(AV1DecContext *s) +@@ -144,6 +240,9 @@ + read_global_param(s, type, ref, 0); + read_global_param(s, type, ref, 1); + } ++ if (type <= AV1_WARP_MODEL_AFFINE) { ++ s->cur_frame.gm_invalid[ref] = !get_shear_params_valid(s, ref); ++ } + } + } + +@@ -342,7 +441,8 @@ + #define HWACCEL_MAX (CONFIG_AV1_DXVA2_HWACCEL + \ + CONFIG_AV1_D3D11VA_HWACCEL * 2 + \ + CONFIG_AV1_NVDEC_HWACCEL + \ +- CONFIG_AV1_VAAPI_HWACCEL) ++ CONFIG_AV1_VAAPI_HWACCEL + \ ++ CONFIG_AV1_VDPAU_HWACCEL) + enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; + + if (seq->seq_profile == 2 && seq->color_config.high_bitdepth) +@@ -404,9 +504,8 @@ + + if (pix_fmt == AV_PIX_FMT_NONE) + return -1; +- s->pix_fmt = pix_fmt; + +- switch (s->pix_fmt) { ++ switch (pix_fmt) { + case AV_PIX_FMT_YUV420P: + #if CONFIG_AV1_DXVA2_HWACCEL + *fmtp++ = AV_PIX_FMT_DXVA2_VLD; +@@ -421,6 +520,9 @@ + #if CONFIG_AV1_VAAPI_HWACCEL + *fmtp++ = AV_PIX_FMT_VAAPI; + #endif ++#if CONFIG_AV1_VDPAU_HWACCEL ++ *fmtp++ = AV_PIX_FMT_VDPAU; ++#endif + break; + case AV_PIX_FMT_YUV420P10: + #if CONFIG_AV1_DXVA2_HWACCEL +@@ -436,6 +538,9 @@ + #if CONFIG_AV1_VAAPI_HWACCEL + *fmtp++ = AV_PIX_FMT_VAAPI; + #endif ++#if CONFIG_AV1_VDPAU_HWACCEL ++ *fmtp++ = AV_PIX_FMT_VDPAU; ++#endif + break; + case AV_PIX_FMT_GRAY8: + #if CONFIG_AV1_NVDEC_HWACCEL +@@ -449,7 +554,7 @@ + break; + } + +- *fmtp++ = s->pix_fmt; ++ *fmtp++ = pix_fmt; + *fmtp = AV_PIX_FMT_NONE; + + ret = ff_thread_get_format(avctx, pix_fmts); +@@ -462,11 +567,12 @@ + * implemented in the future, need remove this check. + */ + if (!avctx->hwaccel) { +- av_log(avctx, AV_LOG_ERROR, "Your platform doesn't suppport" ++ av_log(avctx, AV_LOG_ERROR, "Your platform doesn't support" + " hardware accelerated AV1 decoding.\n"); + return AVERROR(ENOSYS); + } + ++ s->pix_fmt = pix_fmt; + avctx->pix_fmt = ret; + + return 0; +@@ -474,7 +580,7 @@ + + static void av1_frame_unref(AVCodecContext *avctx, AV1Frame *f) + { +- ff_thread_release_buffer(avctx, &f->tf); ++ ff_thread_release_buffer(avctx, f->f); + av_buffer_unref(&f->hwaccel_priv_buf); + f->hwaccel_picture_private = NULL; + av_buffer_unref(&f->header_ref); +@@ -490,16 +596,19 @@ + { + int ret; + +- ret = ff_thread_ref_frame(&dst->tf, &src->tf); ++ ret = av_buffer_replace(&dst->header_ref, src->header_ref); + if (ret < 0) + return ret; + +- dst->header_ref = av_buffer_ref(src->header_ref); +- if (!dst->header_ref) +- goto fail; +- + dst->raw_frame_header = src->raw_frame_header; + ++ if (!src->f->buf[0]) ++ return 0; ++ ++ ret = av_frame_ref(dst->f, src->f); ++ if (ret < 0) ++ goto fail; ++ + if (src->hwaccel_picture_private) { + dst->hwaccel_priv_buf = av_buffer_ref(src->hwaccel_priv_buf); + if (!dst->hwaccel_priv_buf) +@@ -509,6 +618,9 @@ + + dst->spatial_id = src->spatial_id; + dst->temporal_id = src->temporal_id; ++ memcpy(dst->gm_invalid, ++ src->gm_invalid, ++ AV1_NUM_REF_FRAMES * sizeof(uint8_t)); + memcpy(dst->gm_type, + src->gm_type, + AV1_NUM_REF_FRAMES * sizeof(uint8_t)); +@@ -536,10 +648,10 @@ + + for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { + av1_frame_unref(avctx, &s->ref[i]); +- av_frame_free(&s->ref[i].tf.f); ++ av_frame_free(&s->ref[i].f); + } + av1_frame_unref(avctx, &s->cur_frame); +- av_frame_free(&s->cur_frame.tf.f); ++ av_frame_free(&s->cur_frame.f); + + av_buffer_unref(&s->seq_ref); + av_buffer_unref(&s->header_ref); +@@ -575,6 +687,11 @@ + break; + } + ++ if (seq->film_grain_params_present) ++ avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; ++ else ++ avctx->properties &= ~FF_CODEC_PROPERTY_FILM_GRAIN; ++ + if (avctx->width != width || avctx->height != height) { + int ret = ff_set_dimensions(avctx, width, height); + if (ret < 0) +@@ -635,16 +752,16 @@ + s->pix_fmt = AV_PIX_FMT_NONE; + + for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { +- s->ref[i].tf.f = av_frame_alloc(); +- if (!s->ref[i].tf.f) { ++ s->ref[i].f = av_frame_alloc(); ++ if (!s->ref[i].f) { + av_log(avctx, AV_LOG_ERROR, + "Failed to allocate reference frame buffer %d.\n", i); + return AVERROR(ENOMEM); + } + } + +- s->cur_frame.tf.f = av_frame_alloc(); +- if (!s->cur_frame.tf.f) { ++ s->cur_frame.f = av_frame_alloc(); ++ if (!s->cur_frame.f) { + av_log(avctx, AV_LOG_ERROR, + "Failed to allocate current frame buffer.\n"); + return AVERROR(ENOMEM); +@@ -697,16 +814,10 @@ + return ret; + } + +- f->header_ref = av_buffer_ref(s->header_ref); +- if (!f->header_ref) +- return AVERROR(ENOMEM); +- +- f->raw_frame_header = s->raw_frame_header; +- +- if ((ret = ff_thread_get_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF)) < 0) ++ if ((ret = ff_thread_get_buffer(avctx, f->f, AV_GET_BUFFER_FLAG_REF)) < 0) + goto fail; + +- frame = f->tf.f; ++ frame = f->f; + frame->key_frame = header->frame_type == AV1_FRAME_KEY; + + switch (header->frame_type) { +@@ -805,7 +916,7 @@ + const AVPacket *pkt, int *got_frame) + { + AV1DecContext *s = avctx->priv_data; +- const AVFrame *srcframe = s->cur_frame.tf.f; ++ const AVFrame *srcframe = s->cur_frame.f; + int ret; + + // TODO: all layers +@@ -842,8 +953,7 @@ + + for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { + if (header->refresh_frame_flags & (1 << i)) { +- if (s->ref[i].tf.f->buf[0]) +- av1_frame_unref(avctx, &s->ref[i]); ++ av1_frame_unref(avctx, &s->ref[i]); + if ((ret = av1_frame_ref(avctx, &s->ref[i], &s->cur_frame)) < 0) { + av_log(avctx, AV_LOG_ERROR, + "Failed to update frame %d in reference list\n", i); +@@ -859,19 +969,32 @@ + AV1DecContext *s = avctx->priv_data; + int ret; + +- if (s->cur_frame.tf.f->buf[0]) +- av1_frame_unref(avctx, &s->cur_frame); ++ av1_frame_unref(avctx, &s->cur_frame); + +- ret = av1_frame_alloc(avctx, &s->cur_frame); ++ s->cur_frame.header_ref = av_buffer_ref(s->header_ref); ++ if (!s->cur_frame.header_ref) ++ return AVERROR(ENOMEM); ++ ++ s->cur_frame.raw_frame_header = s->raw_frame_header; ++ ++ ret = init_tile_data(s); + if (ret < 0) { +- av_log(avctx, AV_LOG_ERROR, +- "Failed to allocate space for current frame.\n"); ++ av_log(avctx, AV_LOG_ERROR, "Failed to init tile data.\n"); + return ret; + } + +- ret = init_tile_data(s); ++ if ((avctx->skip_frame >= AVDISCARD_NONINTRA && ++ (s->raw_frame_header->frame_type != AV1_FRAME_KEY && ++ s->raw_frame_header->frame_type != AV1_FRAME_INTRA_ONLY)) || ++ (avctx->skip_frame >= AVDISCARD_NONKEY && ++ s->raw_frame_header->frame_type != AV1_FRAME_KEY) || ++ avctx->skip_frame >= AVDISCARD_ALL) ++ return 0; ++ ++ ret = av1_frame_alloc(avctx, &s->cur_frame); + if (ret < 0) { +- av_log(avctx, AV_LOG_ERROR, "Failed to init tile data.\n"); ++ av_log(avctx, AV_LOG_ERROR, ++ "Failed to allocate space for current frame.\n"); + return ret; + } + +@@ -883,7 +1006,7 @@ + return ret; + } + +-static int av1_decode_frame(AVCodecContext *avctx, void *frame, ++static int av1_decode_frame(AVCodecContext *avctx, AVFrame *frame, + int *got_frame, AVPacket *pkt) + { + AV1DecContext *s = avctx->priv_data; +@@ -974,8 +1097,7 @@ + s->raw_frame_header = &obu->obu.frame_header; + + if (s->raw_frame_header->show_existing_frame) { +- if (s->cur_frame.tf.f->buf[0]) +- av1_frame_unref(avctx, &s->cur_frame); ++ av1_frame_unref(avctx, &s->cur_frame); + + ret = av1_frame_ref(avctx, &s->cur_frame, + &s->ref[s->raw_frame_header->frame_to_show_map_idx]); +@@ -990,9 +1112,11 @@ + goto end; + } + +- ret = set_output_frame(avctx, frame, pkt, got_frame); +- if (ret < 0) +- av_log(avctx, AV_LOG_ERROR, "Set output frame error.\n"); ++ if (s->cur_frame.f->buf[0]) { ++ ret = set_output_frame(avctx, frame, pkt, got_frame); ++ if (ret < 0) ++ av_log(avctx, AV_LOG_ERROR, "Set output frame error.\n"); ++ } + + s->raw_frame_header = NULL; + +@@ -1008,7 +1132,7 @@ + s->cur_frame.spatial_id = header->spatial_id; + s->cur_frame.temporal_id = header->temporal_id; + +- if (avctx->hwaccel) { ++ if (avctx->hwaccel && s->cur_frame.f->buf[0]) { + ret = avctx->hwaccel->start_frame(avctx, unit->data, + unit->data_size); + if (ret < 0) { +@@ -1035,7 +1159,7 @@ + if (ret < 0) + goto end; + +- if (avctx->hwaccel) { ++ if (avctx->hwaccel && s->cur_frame.f->buf[0]) { + ret = avctx->hwaccel->decode_slice(avctx, + raw_tile_group->tile_data.data, + raw_tile_group->tile_data.data_size); +@@ -1058,7 +1182,7 @@ + } + + if (raw_tile_group && (s->tile_num == raw_tile_group->tg_end + 1)) { +- if (avctx->hwaccel) { ++ if (avctx->hwaccel && s->cur_frame.f->buf[0]) { + ret = avctx->hwaccel->end_frame(avctx); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "HW accel end frame fail.\n"); +@@ -1072,7 +1196,7 @@ + goto end; + } + +- if (s->raw_frame_header->show_frame) { ++ if (s->raw_frame_header->show_frame && s->cur_frame.f->buf[0]) { + ret = set_output_frame(avctx, frame, pkt, got_frame); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Set output frame error\n"); +@@ -1121,22 +1245,22 @@ + .version = LIBAVUTIL_VERSION_INT, + }; + +-AVCodec ff_av1_decoder = { +- .name = "av1", +- .long_name = NULL_IF_CONFIG_SMALL("Alliance for Open Media AV1"), +- .type = AVMEDIA_TYPE_VIDEO, +- .id = AV_CODEC_ID_AV1, ++const FFCodec ff_av1_decoder = { ++ .p.name = "av1", ++ CODEC_LONG_NAME("Alliance for Open Media AV1"), ++ .p.type = AVMEDIA_TYPE_VIDEO, ++ .p.id = AV_CODEC_ID_AV1, + .priv_data_size = sizeof(AV1DecContext), + .init = av1_decode_init, + .close = av1_decode_free, +- .decode = av1_decode_frame, +- .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | +- FF_CODEC_CAP_INIT_CLEANUP | ++ FF_CODEC_DECODE_CB(av1_decode_frame), ++ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, ++ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | + FF_CODEC_CAP_SETS_PKT_DTS, + .flush = av1_decode_flush, +- .profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles), +- .priv_class = &av1_class, ++ .p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles), ++ .p.priv_class = &av1_class, ++ .bsfs = "av1_frame_split", + .hw_configs = (const AVCodecHWConfigInternal *const []) { + #if CONFIG_AV1_DXVA2_HWACCEL + HWACCEL_DXVA2(av1), +@@ -1153,6 +1277,10 @@ + #if CONFIG_AV1_VAAPI_HWACCEL + HWACCEL_VAAPI(av1), + #endif ++#if CONFIG_AV1_VDPAU_HWACCEL ++ HWACCEL_VDPAU(av1), ++#endif ++ + NULL + }, + }; +diff -Naur a/media/ffvpx/libavcodec/av1dec.h b/media/ffvpx/libavcodec/av1dec.h +--- a/media/ffvpx/libavcodec/av1dec.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/av1dec.h 2023-04-06 12:49:40.250394769 +0200 +@@ -24,14 +24,14 @@ + #include + + #include "libavutil/buffer.h" ++#include "libavutil/frame.h" + #include "libavutil/pixfmt.h" + #include "avcodec.h" + #include "cbs.h" + #include "cbs_av1.h" +-#include "thread.h" + + typedef struct AV1Frame { +- ThreadFrame tf; ++ AVFrame *f; + + AVBufferRef *hwaccel_priv_buf; + void *hwaccel_picture_private; +@@ -42,6 +42,7 @@ + int temporal_id; + int spatial_id; + ++ uint8_t gm_invalid[AV1_NUM_REF_FRAMES]; + uint8_t gm_type[AV1_NUM_REF_FRAMES]; + int32_t gm_params[AV1_NUM_REF_FRAMES][6]; + +diff -Naur a/media/ffvpx/libavcodec/av1.h b/media/ffvpx/libavcodec/av1.h +--- a/media/ffvpx/libavcodec/av1.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/av1.h 2023-04-06 12:50:06.970471013 +0200 +@@ -114,6 +114,13 @@ + AV1_WARP_MODEL_TRANSLATION = 1, + AV1_WARP_MODEL_ROTZOOM = 2, + AV1_WARP_MODEL_AFFINE = 3, ++ AV1_WARP_PARAM_REDUCE_BITS = 6, ++ ++ AV1_DIV_LUT_BITS = 8, ++ AV1_DIV_LUT_PREC_BITS = 14, ++ AV1_DIV_LUT_NUM = 257, ++ ++ AV1_MAX_LOOP_FILTER = 63, + }; + + +@@ -168,4 +175,10 @@ + AV1_RESTORE_SWITCHABLE = 3, + }; + ++// Sequence Headers are actually unbounded because one can use ++// an arbitrary number of leading zeroes when encoding via uvlc. ++// The following estimate is based around using the lowest number ++// of bits for uvlc encoding. ++#define AV1_SANE_SEQUENCE_HEADER_MAX_BITS 3138 ++ + #endif /* AVCODEC_AV1_H */ +diff -Naur a/media/ffvpx/libavcodec/av1_parse.h b/media/ffvpx/libavcodec/av1_parse.h +--- a/media/ffvpx/libavcodec/av1_parse.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/av1_parse.h 2023-04-06 12:49:40.250394769 +0200 +@@ -21,10 +21,14 @@ + #ifndef AVCODEC_AV1_PARSE_H + #define AVCODEC_AV1_PARSE_H + ++#include + #include + ++#include "libavutil/error.h" ++#include "libavutil/intmath.h" ++#include "libavutil/macros.h" ++ + #include "av1.h" +-#include "avcodec.h" + #include "get_bits.h" + + // OBU header fields + max leb128 length +diff -Naur a/media/ffvpx/libavcodec/av1_parser.c b/media/ffvpx/libavcodec/av1_parser.c +--- a/media/ffvpx/libavcodec/av1_parser.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/av1_parser.c 2023-04-06 12:50:24.490176462 +0200 +@@ -20,10 +20,9 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "av1_parse.h" ++#include "libavutil/avassert.h" + #include "cbs.h" + #include "cbs_av1.h" +-#include "internal.h" + #include "parser.h" + + typedef struct AV1ParseContext { +@@ -56,9 +55,9 @@ + { + AV1ParseContext *s = ctx->priv_data; + CodedBitstreamFragment *td = &s->temporal_unit; +- CodedBitstreamAV1Context *av1 = s->cbc->priv_data; +- AV1RawSequenceHeader *seq; +- AV1RawColorConfig *color; ++ const CodedBitstreamAV1Context *av1 = s->cbc->priv_data; ++ const AV1RawSequenceHeader *seq; ++ const AV1RawColorConfig *color; + int ret; + + *out_data = data; +@@ -96,9 +95,9 @@ + color = &seq->color_config; + + for (int i = 0; i < td->nb_units; i++) { +- CodedBitstreamUnit *unit = &td->units[i]; +- AV1RawOBU *obu = unit->content; +- AV1RawFrameHeader *frame; ++ const CodedBitstreamUnit *unit = &td->units[i]; ++ const AV1RawOBU *obu = unit->content; ++ const AV1RawFrameHeader *frame; + + if (unit->type == AV1_OBU_FRAME) + frame = &obu->obu.frame.header; +@@ -163,8 +162,11 @@ + avctx->color_trc = (enum AVColorTransferCharacteristic) color->transfer_characteristics; + avctx->color_range = color->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; + +- if (avctx->framerate.num) +- avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); ++ if (seq->timing_info_present_flag) { ++ const AV1RawTimingInfo *timing = &seq->timing_info; ++ av_reduce(&avctx->framerate.den, &avctx->framerate.num, ++ timing->num_units_in_display_tick, timing->time_scale, INT_MAX); ++ } + + end: + ff_cbs_fragment_reset(td); +@@ -205,33 +207,10 @@ + ff_cbs_close(&s->cbc); + } + +-static int av1_parser_split(AVCodecContext *avctx, +- const uint8_t *buf, int buf_size) +-{ +- AV1OBU obu; +- const uint8_t *ptr = buf, *end = buf + buf_size; +- +- while (ptr < end) { +- int len = ff_av1_extract_obu(&obu, ptr, buf_size, avctx); +- if (len < 0) +- break; +- +- if (obu.type == AV1_OBU_FRAME_HEADER || +- obu.type == AV1_OBU_FRAME) { +- return ptr - buf; +- } +- ptr += len; +- buf_size -= len; +- } +- +- return 0; +-} +- +-AVCodecParser ff_av1_parser = { ++const AVCodecParser ff_av1_parser = { + .codec_ids = { AV_CODEC_ID_AV1 }, + .priv_data_size = sizeof(AV1ParseContext), + .parser_init = av1_parser_init, + .parser_close = av1_parser_close, + .parser_parse = av1_parser_parse, +- .split = av1_parser_split, + }; +diff -Naur a/media/ffvpx/libavcodec/avcodec.c b/media/ffvpx/libavcodec/avcodec.c +--- a/media/ffvpx/libavcodec/avcodec.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/avcodec.c 2023-04-06 12:50:24.490176462 +0200 +@@ -26,43 +26,21 @@ + #include "config.h" + #include "libavutil/avassert.h" + #include "libavutil/avstring.h" ++#include "libavutil/bprint.h" ++#include "libavutil/channel_layout.h" ++#include "libavutil/fifo.h" + #include "libavutil/imgutils.h" + #include "libavutil/mem.h" + #include "libavutil/opt.h" + #include "libavutil/thread.h" + #include "avcodec.h" ++#include "bsf.h" ++#include "codec_internal.h" + #include "decode.h" + #include "encode.h" + #include "frame_thread_encoder.h" + #include "internal.h" + #include "thread.h" +-#if CONFIG_ICONV +-# include +-#endif +- +-#include "libavutil/ffversion.h" +-const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION; +- +-unsigned avcodec_version(void) +-{ +- av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563); +- av_assert0(AV_CODEC_ID_ADPCM_G722==69660); +- av_assert0(AV_CODEC_ID_SRT==94216); +- av_assert0(LIBAVCODEC_VERSION_MICRO >= 100); +- +- return LIBAVCODEC_VERSION_INT; +-} +- +-const char *avcodec_configuration(void) +-{ +- return FFMPEG_CONFIGURATION; +-} +- +-const char *avcodec_license(void) +-{ +-#define LICENSE_PREFIX "libavcodec license: " +- return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1]; +-} + + int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size) + { +@@ -92,25 +70,18 @@ + + static AVMutex codec_mutex = AV_MUTEX_INITIALIZER; + +-static void lock_avcodec(const AVCodec *codec) ++static void lock_avcodec(const FFCodec *codec) + { +- if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init) ++ if (codec->caps_internal & FF_CODEC_CAP_NOT_INIT_THREADSAFE && codec->init) + ff_mutex_lock(&codec_mutex); + } + +-static void unlock_avcodec(const AVCodec *codec) ++static void unlock_avcodec(const FFCodec *codec) + { +- if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init) ++ if (codec->caps_internal & FF_CODEC_CAP_NOT_INIT_THREADSAFE && codec->init) + ff_mutex_unlock(&codec_mutex); + } + +-#if FF_API_LOCKMGR +-int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) +-{ +- return 0; +-} +-#endif +- + static int64_t get_bit_rate(AVCodecContext *ctx) + { + int64_t bit_rate; +@@ -126,7 +97,7 @@ + case AVMEDIA_TYPE_AUDIO: + bits_per_sample = av_get_bits_per_sample(ctx->codec_id); + if (bits_per_sample) { +- bit_rate = ctx->sample_rate * (int64_t)ctx->channels; ++ bit_rate = ctx->sample_rate * (int64_t)ctx->ch_layout.nb_channels; + if (bit_rate > INT64_MAX / bits_per_sample) { + bit_rate = 0; + } else +@@ -144,9 +115,8 @@ + int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) + { + int ret = 0; +- int codec_init_ok = 0; +- AVDictionary *tmp = NULL; + AVCodecInternal *avci; ++ const FFCodec *codec2; + + if (avcodec_is_open(avctx)) + return 0; +@@ -162,14 +132,20 @@ + } + if (!codec) + codec = avctx->codec; ++ codec2 = ffcodec(codec); + +- if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE) ++ if ((avctx->codec_type != AVMEDIA_TYPE_UNKNOWN && avctx->codec_type != codec->type) || ++ (avctx->codec_id != AV_CODEC_ID_NONE && avctx->codec_id != codec->id)) { ++ av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n"); + return AVERROR(EINVAL); ++ } + +- if (options) +- av_dict_copy(&tmp, *options, 0); ++ avctx->codec_type = codec->type; ++ avctx->codec_id = codec->id; ++ avctx->codec = codec; + +- lock_avcodec(codec); ++ if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE) ++ return AVERROR(EINVAL); + + avci = av_mallocz(sizeof(*avci)); + if (!avci) { +@@ -178,33 +154,16 @@ + } + avctx->internal = avci; + +-#if FF_API_OLD_ENCDEC +- avci->to_free = av_frame_alloc(); +- avci->compat_decode_frame = av_frame_alloc(); +- avci->compat_encode_packet = av_packet_alloc(); +- if (!avci->to_free || !avci->compat_decode_frame || !avci->compat_encode_packet) { +- ret = AVERROR(ENOMEM); +- goto free_and_end; +- } +-#endif + avci->buffer_frame = av_frame_alloc(); + avci->buffer_pkt = av_packet_alloc(); +- avci->es.in_frame = av_frame_alloc(); +- avci->ds.in_pkt = av_packet_alloc(); +- avci->last_pkt_props = av_packet_alloc(); +- avci->pkt_props = av_fifo_alloc(sizeof(*avci->last_pkt_props)); +- if (!avci->buffer_frame || !avci->buffer_pkt || +- !avci->es.in_frame || !avci->ds.in_pkt || +- !avci->last_pkt_props || !avci->pkt_props) { ++ if (!avci->buffer_frame || !avci->buffer_pkt) { + ret = AVERROR(ENOMEM); + goto free_and_end; + } + +- avci->skip_samples_multiplier = 1; +- +- if (codec->priv_data_size > 0) { ++ if (codec2->priv_data_size > 0) { + if (!avctx->priv_data) { +- avctx->priv_data = av_mallocz(codec->priv_data_size); ++ avctx->priv_data = av_mallocz(codec2->priv_data_size); + if (!avctx->priv_data) { + ret = AVERROR(ENOMEM); + goto free_and_end; +@@ -214,12 +173,12 @@ + av_opt_set_defaults(avctx->priv_data); + } + } +- if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, &tmp)) < 0) ++ if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, options)) < 0) + goto free_and_end; + } else { + avctx->priv_data = NULL; + } +- if ((ret = av_opt_set_dict(avctx, &tmp)) < 0) ++ if ((ret = av_opt_set_dict(avctx, options)) < 0) + goto free_and_end; + + if (avctx->codec_whitelist && av_match_list(codec->name, avctx->codec_whitelist, ',') <= 0) { +@@ -256,44 +215,63 @@ + } + } + +- if (avctx->channels > FF_SANE_NB_CHANNELS || avctx->channels < 0) { +- av_log(avctx, AV_LOG_ERROR, "Too many or invalid channels: %d\n", avctx->channels); ++ if (avctx->sample_rate < 0) { ++ av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate); + ret = AVERROR(EINVAL); + goto free_and_end; + } +- if (av_codec_is_decoder(codec) && +- codec->type == AVMEDIA_TYPE_AUDIO && +- !(codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF) && +- avctx->channels == 0) { +- av_log(avctx, AV_LOG_ERROR, "Decoder requires channel count but channels not set\n"); ++ if (avctx->block_align < 0) { ++ av_log(avctx, AV_LOG_ERROR, "Invalid block align: %d\n", avctx->block_align); + ret = AVERROR(EINVAL); + goto free_and_end; + } + +- if (avctx->sample_rate < 0) { +- av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate); ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ /* compat wrapper for old-style callers */ ++ if (avctx->channel_layout && !avctx->channels) ++ avctx->channels = av_popcount64(avctx->channel_layout); ++ ++ if ((avctx->channels && avctx->ch_layout.nb_channels != avctx->channels) || ++ (avctx->channel_layout && (avctx->ch_layout.order != AV_CHANNEL_ORDER_NATIVE || ++ avctx->ch_layout.u.mask != avctx->channel_layout))) { ++ av_channel_layout_uninit(&avctx->ch_layout); ++ if (avctx->channel_layout) { ++ av_channel_layout_from_mask(&avctx->ch_layout, avctx->channel_layout); ++ } else { ++ avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; ++ } ++ avctx->ch_layout.nb_channels = avctx->channels; ++ } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ ++ /* AV_CODEC_CAP_CHANNEL_CONF is a decoder-only flag; so the code below ++ * in particular checks that nb_channels is set for all audio encoders. */ ++ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && !avctx->ch_layout.nb_channels ++ && !(codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF)) { ++ av_log(avctx, AV_LOG_ERROR, "%s requires channel layout to be set\n", ++ av_codec_is_decoder(codec) ? "Decoder" : "Encoder"); + ret = AVERROR(EINVAL); + goto free_and_end; + } +- if (avctx->block_align < 0) { +- av_log(avctx, AV_LOG_ERROR, "Invalid block align: %d\n", avctx->block_align); ++ if (avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) { ++ av_log(avctx, AV_LOG_ERROR, "Invalid channel layout\n"); + ret = AVERROR(EINVAL); + goto free_and_end; + } +- +- avctx->codec = codec; +- if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) && +- avctx->codec_id == AV_CODEC_ID_NONE) { +- avctx->codec_type = codec->type; +- avctx->codec_id = codec->id; +- } +- if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type +- && avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) { +- av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n"); ++ if (avctx->ch_layout.nb_channels > FF_SANE_NB_CHANNELS) { ++ av_log(avctx, AV_LOG_ERROR, "Too many channels: %d\n", avctx->ch_layout.nb_channels); + ret = AVERROR(EINVAL); + goto free_and_end; + } +- avctx->frame_number = 0; ++ ++ avctx->frame_num = 0; ++#if FF_API_AVCTX_FRAME_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS ++ avctx->frame_number = avctx->frame_num; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id); + + if ((avctx->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) && +@@ -325,35 +303,30 @@ + if (ret < 0) + goto free_and_end; + +- if (!HAVE_THREADS) +- av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n"); +- +- if (CONFIG_FRAME_THREAD_ENCODER && av_codec_is_encoder(avctx->codec)) { +- unlock_avcodec(codec); //we will instantiate a few encoders thus kick the counter to prevent false detection of a problem +- ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL); +- lock_avcodec(codec); +- if (ret < 0) +- goto free_and_end; +- } +- +- if (HAVE_THREADS +- && !(avci->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) { ++ if (HAVE_THREADS && !avci->frame_thread_encoder) { ++ /* Frame-threaded decoders call FFCodec.init for their child contexts. */ ++ lock_avcodec(codec2); + ret = ff_thread_init(avctx); ++ unlock_avcodec(codec2); + if (ret < 0) { + goto free_and_end; + } + } +- if (!HAVE_THREADS && !(codec->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) ++ if (!HAVE_THREADS && !(codec2->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) + avctx->thread_count = 1; + +- if ( avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME) +- || avci->frame_thread_encoder)) { +- ret = avctx->codec->init(avctx); +- if (ret < 0) { +- codec_init_ok = -1; +- goto free_and_end; ++ if (!(avctx->active_thread_type & FF_THREAD_FRAME) || ++ avci->frame_thread_encoder) { ++ if (codec2->init) { ++ lock_avcodec(codec2); ++ ret = codec2->init(avctx); ++ unlock_avcodec(codec2); ++ if (ret < 0) { ++ avci->needs_close = codec2->caps_internal & FF_CODEC_CAP_INIT_CLEANUP; ++ goto free_and_end; ++ } + } +- codec_init_ok = 1; ++ avci->needs_close = 1; + } + + ret=0; +@@ -361,23 +334,19 @@ + if (av_codec_is_decoder(avctx->codec)) { + if (!avctx->bit_rate) + avctx->bit_rate = get_bit_rate(avctx); ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ /* update the deprecated fields for old-style callers */ ++ avctx->channels = avctx->ch_layout.nb_channels; ++ avctx->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? ++ avctx->ch_layout.u.mask : 0; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ + /* validate channel layout from the decoder */ +- if (avctx->channel_layout) { +- int channels = av_get_channel_layout_nb_channels(avctx->channel_layout); +- if (!avctx->channels) +- avctx->channels = channels; +- else if (channels != avctx->channels) { +- char buf[512]; +- av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout); +- av_log(avctx, AV_LOG_WARNING, +- "Channel layout '%s' with %d channels does not match specified number of channels %d: " +- "ignoring specified channel layout\n", +- buf, channels, avctx->channels); +- avctx->channel_layout = 0; +- } +- } +- if (avctx->channels && avctx->channels < 0 || +- avctx->channels > FF_SANE_NB_CHANNELS) { ++ if ((avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) || ++ avctx->ch_layout.nb_channels > FF_SANE_NB_CHANNELS) { + ret = AVERROR(EINVAL); + goto free_and_end; + } +@@ -385,106 +354,15 @@ + ret = AVERROR(EINVAL); + goto free_and_end; + } +- if (avctx->sub_charenc) { +- if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) { +- av_log(avctx, AV_LOG_ERROR, "Character encoding is only " +- "supported with subtitles codecs\n"); +- ret = AVERROR(EINVAL); +- goto free_and_end; +- } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) { +- av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, " +- "subtitles character encoding will be ignored\n", +- avctx->codec_descriptor->name); +- avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING; +- } else { +- /* input character encoding is set for a text based subtitle +- * codec at this point */ +- if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC) +- avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER; +- +- if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) { +-#if CONFIG_ICONV +- iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc); +- if (cd == (iconv_t)-1) { +- ret = AVERROR(errno); +- av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context " +- "with input character encoding \"%s\"\n", avctx->sub_charenc); +- goto free_and_end; +- } +- iconv_close(cd); +-#else +- av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles " +- "conversion needs a libavcodec built with iconv support " +- "for this codec\n"); +- ret = AVERROR(ENOSYS); +- goto free_and_end; +-#endif +- } +- } +- } +- +-#if FF_API_AVCTX_TIMEBASE +- if (avctx->framerate.num > 0 && avctx->framerate.den > 0) +- avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); +-#endif + } +- if (codec->priv_data_size > 0 && avctx->priv_data && codec->priv_class) { ++ if (codec->priv_class) + av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class); +- } + + end: +- unlock_avcodec(codec); +- if (options) { +- av_dict_free(options); +- *options = tmp; +- } + + return ret; + free_and_end: +- if (avctx->codec && avctx->codec->close && +- (codec_init_ok > 0 || (codec_init_ok < 0 && +- avctx->codec->caps_internal & FF_CODEC_CAP_INIT_CLEANUP))) +- avctx->codec->close(avctx); +- +- if (HAVE_THREADS && avci->thread_ctx) +- ff_thread_free(avctx); +- +- if (codec->priv_class && avctx->priv_data) +- av_opt_free(avctx->priv_data); +- av_opt_free(avctx); +- +- if (av_codec_is_encoder(avctx->codec)) { +-#if FF_API_CODED_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- av_frame_free(&avctx->coded_frame); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- av_freep(&avctx->extradata); +- avctx->extradata_size = 0; +- } +- +- av_dict_free(&tmp); +- av_freep(&avctx->priv_data); +- av_freep(&avctx->subtitle_header); +- +-#if FF_API_OLD_ENCDEC +- av_frame_free(&avci->to_free); +- av_frame_free(&avci->compat_decode_frame); +- av_packet_free(&avci->compat_encode_packet); +-#endif +- av_frame_free(&avci->buffer_frame); +- av_packet_free(&avci->buffer_pkt); +- av_packet_free(&avci->last_pkt_props); +- av_fifo_freep(&avci->pkt_props); +- +- av_packet_free(&avci->ds.in_pkt); +- av_frame_free(&avci->es.in_frame); +- av_bsf_free(&avci->bsf); +- +- av_buffer_unref(&avci->pool); +- av_freep(&avci); +- avctx->internal = NULL; +- avctx->codec = NULL; ++ avcodec_close(avctx); + goto end; + } + +@@ -502,50 +380,30 @@ + "that doesn't support it\n"); + return; + } ++ if (avci->in_frame) ++ av_frame_unref(avci->in_frame); ++ if (avci->recon_frame) ++ av_frame_unref(avci->recon_frame); ++ } else { ++ av_packet_unref(avci->last_pkt_props); ++ av_packet_unref(avci->in_pkt); + +- // We haven't implemented flushing for frame-threaded encoders. +- av_assert0(!(caps & AV_CODEC_CAP_FRAME_THREADS)); ++ avctx->pts_correction_last_pts = ++ avctx->pts_correction_last_dts = INT64_MIN; ++ ++ av_bsf_flush(avci->bsf); + } + + avci->draining = 0; + avci->draining_done = 0; + avci->nb_draining_errors = 0; + av_frame_unref(avci->buffer_frame); +-#if FF_API_OLD_ENCDEC +- av_frame_unref(avci->compat_decode_frame); +- av_packet_unref(avci->compat_encode_packet); +-#endif + av_packet_unref(avci->buffer_pkt); + +- av_packet_unref(avci->last_pkt_props); +- while (av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) { +- av_fifo_generic_read(avci->pkt_props, +- avci->last_pkt_props, sizeof(*avci->last_pkt_props), +- NULL); +- av_packet_unref(avci->last_pkt_props); +- } +- av_fifo_reset(avci->pkt_props); +- +- av_frame_unref(avci->es.in_frame); +- av_packet_unref(avci->ds.in_pkt); +- + if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) + ff_thread_flush(avctx); +- else if (avctx->codec->flush) +- avctx->codec->flush(avctx); +- +- avctx->pts_correction_last_pts = +- avctx->pts_correction_last_dts = INT64_MIN; +- +- if (av_codec_is_decoder(avctx->codec)) +- av_bsf_flush(avci->bsf); +- +-#if FF_API_OLD_ENCDEC +-FF_DISABLE_DEPRECATION_WARNINGS +- if (!avctx->refcounted_frames) +- av_frame_unref(avci->to_free); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif ++ else if (ffcodec(avctx->codec)->flush) ++ ffcodec(avctx->codec)->flush(avctx); + } + + void avsubtitle_free(AVSubtitle *sub) +@@ -553,12 +411,15 @@ + int i; + + for (i = 0; i < sub->num_rects; i++) { +- av_freep(&sub->rects[i]->data[0]); +- av_freep(&sub->rects[i]->data[1]); +- av_freep(&sub->rects[i]->data[2]); +- av_freep(&sub->rects[i]->data[3]); +- av_freep(&sub->rects[i]->text); +- av_freep(&sub->rects[i]->ass); ++ AVSubtitleRect *const rect = sub->rects[i]; ++ ++ av_freep(&rect->data[0]); ++ av_freep(&rect->data[1]); ++ av_freep(&rect->data[2]); ++ av_freep(&rect->data[3]); ++ av_freep(&rect->text); ++ av_freep(&rect->ass); ++ + av_freep(&sub->rects[i]); + } + +@@ -575,45 +436,39 @@ + return 0; + + if (avcodec_is_open(avctx)) { ++ AVCodecInternal *avci = avctx->internal; ++ + if (CONFIG_FRAME_THREAD_ENCODER && +- avctx->internal->frame_thread_encoder && avctx->thread_count > 1) { ++ avci->frame_thread_encoder && avctx->thread_count > 1) { + ff_frame_thread_encoder_free(avctx); + } +- if (HAVE_THREADS && avctx->internal->thread_ctx) ++ if (HAVE_THREADS && avci->thread_ctx) + ff_thread_free(avctx); +- if (avctx->codec && avctx->codec->close) +- avctx->codec->close(avctx); +- avctx->internal->byte_buffer_size = 0; +- av_freep(&avctx->internal->byte_buffer); +-#if FF_API_OLD_ENCDEC +- av_frame_free(&avctx->internal->to_free); +- av_frame_free(&avctx->internal->compat_decode_frame); +- av_packet_free(&avctx->internal->compat_encode_packet); +-#endif +- av_frame_free(&avctx->internal->buffer_frame); +- av_packet_free(&avctx->internal->buffer_pkt); +- av_packet_unref(avctx->internal->last_pkt_props); +- while (av_fifo_size(avctx->internal->pkt_props) >= +- sizeof(*avctx->internal->last_pkt_props)) { +- av_fifo_generic_read(avctx->internal->pkt_props, +- avctx->internal->last_pkt_props, +- sizeof(*avctx->internal->last_pkt_props), +- NULL); +- av_packet_unref(avctx->internal->last_pkt_props); +- } +- av_packet_free(&avctx->internal->last_pkt_props); +- av_fifo_freep(&avctx->internal->pkt_props); +- +- av_packet_free(&avctx->internal->ds.in_pkt); +- av_frame_free(&avctx->internal->es.in_frame); ++ if (avci->needs_close && ffcodec(avctx->codec)->close) ++ ffcodec(avctx->codec)->close(avctx); ++ avci->byte_buffer_size = 0; ++ av_freep(&avci->byte_buffer); ++ av_frame_free(&avci->buffer_frame); ++ av_packet_free(&avci->buffer_pkt); ++ av_packet_free(&avci->last_pkt_props); ++ ++ av_packet_free(&avci->in_pkt); ++ av_frame_free(&avci->in_frame); ++ av_frame_free(&avci->recon_frame); + +- av_buffer_unref(&avctx->internal->pool); ++ av_buffer_unref(&avci->pool); + + if (avctx->hwaccel && avctx->hwaccel->uninit) + avctx->hwaccel->uninit(avctx); +- av_freep(&avctx->internal->hwaccel_priv_data); ++ av_freep(&avci->hwaccel_priv_data); ++ ++ av_bsf_free(&avci->bsf); ++ ++ av_channel_layout_uninit(&avci->initial_ch_layout); + +- av_bsf_free(&avctx->internal->bsf); ++#if CONFIG_LCMS2 ++ ff_icc_context_uninit(&avci->icc); ++#endif + + av_freep(&avctx->internal); + } +@@ -632,12 +487,10 @@ + av_freep(&avctx->priv_data); + if (av_codec_is_encoder(avctx->codec)) { + av_freep(&avctx->extradata); +-#if FF_API_CODED_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- av_frame_free(&avctx->coded_frame); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- } ++ avctx->extradata_size = 0; ++ } else if (av_codec_is_decoder(avctx->codec)) ++ av_freep(&avctx->subtitle_header); ++ + avctx->codec = NULL; + avctx->active_thread_type = 0; + +@@ -654,6 +507,7 @@ + const char *codec_type; + const char *codec_name; + const char *profile = NULL; ++ AVBPrint bprint; + int64_t bitrate; + int new_line = 0; + AVRational display_aspect_ratio; +@@ -662,46 +516,54 @@ + + if (!buf || buf_size <= 0) + return; ++ av_bprint_init_for_buffer(&bprint, buf, buf_size); + codec_type = av_get_media_type_string(enc->codec_type); + codec_name = avcodec_get_name(enc->codec_id); + profile = avcodec_profile_name(enc->codec_id, enc->profile); + +- snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown", +- codec_name); ++ av_bprintf(&bprint, "%s: %s", codec_type ? codec_type : "unknown", ++ codec_name); + buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */ + + if (enc->codec && strcmp(enc->codec->name, codec_name)) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name); ++ av_bprintf(&bprint, " (%s)", enc->codec->name); + + if (profile) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile); ++ av_bprintf(&bprint, " (%s)", profile); + if ( enc->codec_type == AVMEDIA_TYPE_VIDEO + && av_log_get_level() >= AV_LOG_VERBOSE + && enc->refs) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", %d reference frame%s", +- enc->refs, enc->refs > 1 ? "s" : ""); ++ av_bprintf(&bprint, ", %d reference frame%s", ++ enc->refs, enc->refs > 1 ? "s" : ""); + + if (enc->codec_tag) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s / 0x%04X)", +- av_fourcc2str(enc->codec_tag), enc->codec_tag); ++ av_bprintf(&bprint, " (%s / 0x%04X)", ++ av_fourcc2str(enc->codec_tag), enc->codec_tag); + + switch (enc->codec_type) { + case AVMEDIA_TYPE_VIDEO: + { +- char detail[256] = "("; ++ unsigned len; + +- av_strlcat(buf, separator, buf_size); ++ av_bprintf(&bprint, "%s%s", separator, ++ enc->pix_fmt == AV_PIX_FMT_NONE ? "none" : ++ unknown_if_null(av_get_pix_fmt_name(enc->pix_fmt))); ++ ++ av_bprint_chars(&bprint, '(', 1); ++ len = bprint.len; ++ ++ /* The following check ensures that '(' has been written ++ * and therefore allows us to erase it if it turns out ++ * to be unnecessary. */ ++ if (!av_bprint_is_complete(&bprint)) ++ return; + +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- "%s", enc->pix_fmt == AV_PIX_FMT_NONE ? "none" : +- unknown_if_null(av_get_pix_fmt_name(enc->pix_fmt))); + if (enc->bits_per_raw_sample && enc->pix_fmt != AV_PIX_FMT_NONE && + enc->bits_per_raw_sample < av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth) +- av_strlcatf(detail, sizeof(detail), "%d bpc, ", enc->bits_per_raw_sample); ++ av_bprintf(&bprint, "%d bpc, ", enc->bits_per_raw_sample); + if (enc->color_range != AVCOL_RANGE_UNSPECIFIED && + (str = av_color_range_name(enc->color_range))) +- av_strlcatf(detail, sizeof(detail), "%s, ", str); ++ av_bprintf(&bprint, "%s, ", str); + + if (enc->colorspace != AVCOL_SPC_UNSPECIFIED || + enc->color_primaries != AVCOL_PRI_UNSPECIFIED || +@@ -711,10 +573,9 @@ + const char *trc = unknown_if_null(av_color_transfer_name(enc->color_trc)); + if (strcmp(col, pri) || strcmp(col, trc)) { + new_line = 1; +- av_strlcatf(detail, sizeof(detail), "%s/%s/%s, ", +- col, pri, trc); ++ av_bprintf(&bprint, "%s/%s/%s, ", col, pri, trc); + } else +- av_strlcatf(detail, sizeof(detail), "%s, ", col); ++ av_bprintf(&bprint, "%s, ", col); + } + + if (enc->field_order != AV_FIELD_UNKNOWN) { +@@ -728,120 +589,115 @@ + else if (enc->field_order == AV_FIELD_BT) + field_order = "bottom coded first (swapped)"; + +- av_strlcatf(detail, sizeof(detail), "%s, ", field_order); ++ av_bprintf(&bprint, "%s, ", field_order); + } + + if (av_log_get_level() >= AV_LOG_VERBOSE && + enc->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED && + (str = av_chroma_location_name(enc->chroma_sample_location))) +- av_strlcatf(detail, sizeof(detail), "%s, ", str); ++ av_bprintf(&bprint, "%s, ", str); + +- if (strlen(detail) > 1) { +- detail[strlen(detail) - 2] = 0; +- av_strlcatf(buf, buf_size, "%s)", detail); ++ if (len == bprint.len) { ++ bprint.str[len - 1] = '\0'; ++ bprint.len--; ++ } else { ++ if (bprint.len - 2 < bprint.size) { ++ /* Erase the last ", " */ ++ bprint.len -= 2; ++ bprint.str[bprint.len] = '\0'; ++ } ++ av_bprint_chars(&bprint, ')', 1); + } + } + + if (enc->width) { +- av_strlcat(buf, new_line ? separator : ", ", buf_size); +- +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- "%dx%d", +- enc->width, enc->height); ++ av_bprintf(&bprint, "%s%dx%d", new_line ? separator : ", ", ++ enc->width, enc->height); + + if (av_log_get_level() >= AV_LOG_VERBOSE && + (enc->width != enc->coded_width || + enc->height != enc->coded_height)) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- " (%dx%d)", enc->coded_width, enc->coded_height); ++ av_bprintf(&bprint, " (%dx%d)", ++ enc->coded_width, enc->coded_height); + + if (enc->sample_aspect_ratio.num) { + av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, + enc->width * (int64_t)enc->sample_aspect_ratio.num, + enc->height * (int64_t)enc->sample_aspect_ratio.den, + 1024 * 1024); +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- " [SAR %d:%d DAR %d:%d]", ++ av_bprintf(&bprint, " [SAR %d:%d DAR %d:%d]", + enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den, + display_aspect_ratio.num, display_aspect_ratio.den); + } + if (av_log_get_level() >= AV_LOG_DEBUG) { + int g = av_gcd(enc->time_base.num, enc->time_base.den); +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", %d/%d", +- enc->time_base.num / g, enc->time_base.den / g); ++ av_bprintf(&bprint, ", %d/%d", ++ enc->time_base.num / g, enc->time_base.den / g); + } + } + if (encode) { +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", q=%d-%d", enc->qmin, enc->qmax); ++ av_bprintf(&bprint, ", q=%d-%d", enc->qmin, enc->qmax); + } else { + if (enc->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", Closed Captions"); ++ av_bprintf(&bprint, ", Closed Captions"); ++ if (enc->properties & FF_CODEC_PROPERTY_FILM_GRAIN) ++ av_bprintf(&bprint, ", Film Grain"); + if (enc->properties & FF_CODEC_PROPERTY_LOSSLESS) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", lossless"); ++ av_bprintf(&bprint, ", lossless"); + } + break; + case AVMEDIA_TYPE_AUDIO: +- av_strlcat(buf, separator, buf_size); ++ av_bprintf(&bprint, "%s", separator); + + if (enc->sample_rate) { +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- "%d Hz, ", enc->sample_rate); ++ av_bprintf(&bprint, "%d Hz, ", enc->sample_rate); ++ } ++ { ++ char buf[512]; ++ int ret = av_channel_layout_describe(&enc->ch_layout, buf, sizeof(buf)); ++ if (ret >= 0) ++ av_bprintf(&bprint, "%s", buf); + } +- av_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout); + if (enc->sample_fmt != AV_SAMPLE_FMT_NONE && + (str = av_get_sample_fmt_name(enc->sample_fmt))) { +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", %s", str); ++ av_bprintf(&bprint, ", %s", str); + } + if ( enc->bits_per_raw_sample > 0 + && enc->bits_per_raw_sample != av_get_bytes_per_sample(enc->sample_fmt) * 8) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- " (%d bit)", enc->bits_per_raw_sample); ++ av_bprintf(&bprint, " (%d bit)", enc->bits_per_raw_sample); + if (av_log_get_level() >= AV_LOG_VERBOSE) { + if (enc->initial_padding) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", delay %d", enc->initial_padding); ++ av_bprintf(&bprint, ", delay %d", enc->initial_padding); + if (enc->trailing_padding) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", padding %d", enc->trailing_padding); ++ av_bprintf(&bprint, ", padding %d", enc->trailing_padding); + } + break; + case AVMEDIA_TYPE_DATA: + if (av_log_get_level() >= AV_LOG_DEBUG) { + int g = av_gcd(enc->time_base.num, enc->time_base.den); + if (g) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", %d/%d", +- enc->time_base.num / g, enc->time_base.den / g); ++ av_bprintf(&bprint, ", %d/%d", ++ enc->time_base.num / g, enc->time_base.den / g); + } + break; + case AVMEDIA_TYPE_SUBTITLE: + if (enc->width) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", %dx%d", enc->width, enc->height); ++ av_bprintf(&bprint, ", %dx%d", enc->width, enc->height); + break; + default: + return; + } + if (encode) { + if (enc->flags & AV_CODEC_FLAG_PASS1) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", pass 1"); ++ av_bprintf(&bprint, ", pass 1"); + if (enc->flags & AV_CODEC_FLAG_PASS2) +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", pass 2"); ++ av_bprintf(&bprint, ", pass 2"); + } + bitrate = get_bit_rate(enc); + if (bitrate != 0) { +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", %"PRId64" kb/s", bitrate / 1000); ++ av_bprintf(&bprint, ", %"PRId64" kb/s", bitrate / 1000); + } else if (enc->rc_max_rate > 0) { +- snprintf(buf + strlen(buf), buf_size - strlen(buf), +- ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000); ++ av_bprintf(&bprint, ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000); + } + } + +@@ -849,3 +705,12 @@ + { + return !!s->internal; + } ++ ++int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) ++{ ++ av_frame_unref(frame); ++ ++ if (av_codec_is_decoder(avctx->codec)) ++ return ff_decode_receive_frame(avctx, frame); ++ return ff_encode_receive_frame(avctx, frame); ++} +diff -Naur a/media/ffvpx/libavcodec/avcodec.h b/media/ffvpx/libavcodec/avcodec.h +--- a/media/ffvpx/libavcodec/avcodec.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/avcodec.h 2023-04-06 12:50:24.491176503 +0200 +@@ -27,27 +27,29 @@ + * Libavcodec external API header + */ + +-#include + #include "libavutil/samplefmt.h" + #include "libavutil/attributes.h" + #include "libavutil/avutil.h" + #include "libavutil/buffer.h" +-#include "libavutil/cpu.h" +-#include "libavutil/channel_layout.h" + #include "libavutil/dict.h" + #include "libavutil/frame.h" +-#include "libavutil/hwcontext.h" + #include "libavutil/log.h" + #include "libavutil/pixfmt.h" + #include "libavutil/rational.h" + +-#include "bsf.h" + #include "codec.h" + #include "codec_desc.h" + #include "codec_par.h" + #include "codec_id.h" ++#include "defs.h" + #include "packet.h" ++#include "version_major.h" ++#ifndef HAVE_AV_CONFIG_H ++/* When included as part of the ffmpeg build, only include the major version ++ * to avoid unnecessary rebuilds. When included externally, keep including ++ * the full version information. */ + #include "version.h" ++#endif + + /** + * @defgroup libavc libavcodec +@@ -155,29 +157,6 @@ + * at least will not fail with AVERROR(EAGAIN). In general, no codec will + * permit unlimited buffering of input or output. + * +- * This API replaces the following legacy functions: +- * - avcodec_decode_video2() and avcodec_decode_audio4(): +- * Use avcodec_send_packet() to feed input to the decoder, then use +- * avcodec_receive_frame() to receive decoded frames after each packet. +- * Unlike with the old video decoding API, multiple frames might result from +- * a packet. For audio, splitting the input packet into frames by partially +- * decoding packets becomes transparent to the API user. You never need to +- * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then +- * no data was read from the packet). +- * Additionally, sending a flush/draining packet is required only once. +- * - avcodec_encode_video2()/avcodec_encode_audio2(): +- * Use avcodec_send_frame() to feed input to the encoder, then use +- * avcodec_receive_packet() to receive encoded packets. +- * Providing user-allocated buffers for avcodec_receive_packet() is not +- * possible. +- * - The new API does not handle subtitles yet. +- * +- * Mixing new and old function calls on the same AVCodecContext is not allowed, +- * and will result in undefined behavior. +- * +- * Some codecs might require using the new API; using the old API will return +- * an error when calling it. All codecs support the new API. +- * + * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This + * would be an invalid state, which could put the codec user into an endless + * loop. The API has no concept of time either: it cannot happen that trying to +@@ -205,16 +184,6 @@ + */ + + /** +- * @ingroup lavc_decoding +- * Required number of additionally allocated bytes at the end of the input bitstream for decoding. +- * This is mainly needed because some optimized bitstream readers read +- * 32 or 64 bit at once and could read over the end.
+- * Note: If the first 23 bits of the additional bytes are not 0, then damaged +- * MPEG bitstreams could cause overread and segfault. +- */ +-#define AV_INPUT_BUFFER_PADDING_SIZE 64 +- +-/** + * @ingroup lavc_encoding + * minimum encoding buffer size + * Used to avoid some checks during header writing. +@@ -222,34 +191,6 @@ + #define AV_INPUT_BUFFER_MIN_SIZE 16384 + + /** +- * @ingroup lavc_decoding +- */ +-enum AVDiscard{ +- /* We leave some space between them for extensions (drop some +- * keyframes for intra-only or drop just some bidir frames). */ +- AVDISCARD_NONE =-16, ///< discard nothing +- AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi +- AVDISCARD_NONREF = 8, ///< discard all non reference +- AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames +- AVDISCARD_NONINTRA= 24, ///< discard all non intra frames +- AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes +- AVDISCARD_ALL = 48, ///< discard all +-}; +- +-enum AVAudioServiceType { +- AV_AUDIO_SERVICE_TYPE_MAIN = 0, +- AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, +- AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, +- AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, +- AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, +- AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, +- AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, +- AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, +- AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, +- AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI +-}; +- +-/** + * @ingroup lavc_encoding + */ + typedef struct RcOverride{ +@@ -291,6 +232,58 @@ + */ + #define AV_CODEC_FLAG_DROPCHANGED (1 << 5) + /** ++ * Request the encoder to output reconstructed frames, i.e.\ frames that would ++ * be produced by decoding the encoded bistream. These frames may be retrieved ++ * by calling avcodec_receive_frame() immediately after a successful call to ++ * avcodec_receive_packet(). ++ * ++ * Should only be used with encoders flagged with the ++ * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. ++ */ ++#define AV_CODEC_FLAG_RECON_FRAME (1 << 6) ++/** ++ * @par decoding ++ * Request the decoder to propagate each packets AVPacket.opaque and ++ * AVPacket.opaque_ref to its corresponding output AVFrame. ++ * ++ * @par encoding: ++ * Request the encoder to propagate each frame's AVFrame.opaque and ++ * AVFrame.opaque_ref values to its corresponding output AVPacket. ++ * ++ * @par ++ * May only be set on encoders that have the ++ * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. ++ * ++ * @note ++ * While in typical cases one input frame produces exactly one output packet ++ * (perhaps after a delay), in general the mapping of frames to packets is ++ * M-to-N, so ++ * - Any number of input frames may be associated with any given output packet. ++ * This includes zero - e.g. some encoders may output packets that carry only ++ * metadata about the whole stream. ++ * - A given input frame may be associated with any number of output packets. ++ * Again this includes zero - e.g. some encoders may drop frames under certain ++ * conditions. ++ * . ++ * This implies that when using this flag, the caller must NOT assume that ++ * - a given input frame's opaques will necessarily appear on some output packet; ++ * - every output packet will have some non-NULL opaque value. ++ * . ++ * When an output packet contains multiple frames, the opaque values will be ++ * taken from the first of those. ++ * ++ * @note ++ * The converse holds for decoders, with frames and packets switched. ++ */ ++#define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) ++/** ++ * Signal to the encoder that the values of AVFrame.duration are valid and ++ * should be used (typically for transferring them to output packets). ++ * ++ * If this flag is not set, frame durations are ignored. ++ */ ++#define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) ++/** + * Use internal 2pass ratecontrol in first pass mode. + */ + #define AV_CODEC_FLAG_PASS1 (1 << 9) +@@ -311,11 +304,6 @@ + */ + #define AV_CODEC_FLAG_PSNR (1 << 15) + /** +- * Input bitstream might be truncated at a random location +- * instead of only at frame boundaries. +- */ +-#define AV_CODEC_FLAG_TRUNCATED (1 << 16) +-/** + * Use interlaced DCT. + */ + #define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) +@@ -356,11 +344,6 @@ + #define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) + + /** +- * timecode is in drop frame format. DEPRECATED!!!! +- */ +-#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) +- +-/** + * Input bitstream might be truncated at a packet boundaries + * instead of only at frame boundaries. + */ +@@ -386,13 +369,12 @@ + * Do not reset ASS ReadOrder field on flush (subtitles decoding) + */ + #define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) +- +-/* Unsupported options : +- * Syntax Arithmetic coding (SAC) +- * Reference Picture Selection +- * Independent Segment Decoding */ +-/* /Fx */ +-/* codec capabilities */ ++/** ++ * Generate/parse ICC profiles on encode/decode, as appropriate for the type of ++ * file. No effect on codecs which cannot contain embedded ICC profiles, or ++ * when compiled without support for lcms2. ++ */ ++#define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31) + + /* Exported side data. + These flags can be passed in AVCodecContext.export_side_data before initialization. +@@ -417,98 +399,6 @@ + #define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) + + /** +- * Pan Scan area. +- * This specifies the area which should be displayed. +- * Note there may be multiple such areas for one frame. +- */ +-typedef struct AVPanScan { +- /** +- * id +- * - encoding: Set by user. +- * - decoding: Set by libavcodec. +- */ +- int id; +- +- /** +- * width and height in 1/16 pel +- * - encoding: Set by user. +- * - decoding: Set by libavcodec. +- */ +- int width; +- int height; +- +- /** +- * position of the top left corner in 1/16 pel for up to 3 fields/frames +- * - encoding: Set by user. +- * - decoding: Set by libavcodec. +- */ +- int16_t position[3][2]; +-} AVPanScan; +- +-/** +- * This structure describes the bitrate properties of an encoded bitstream. It +- * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD +- * parameters for H.264/HEVC. +- */ +-typedef struct AVCPBProperties { +- /** +- * Maximum bitrate of the stream, in bits per second. +- * Zero if unknown or unspecified. +- */ +-#if FF_API_UNSANITIZED_BITRATES +- int max_bitrate; +-#else +- int64_t max_bitrate; +-#endif +- /** +- * Minimum bitrate of the stream, in bits per second. +- * Zero if unknown or unspecified. +- */ +-#if FF_API_UNSANITIZED_BITRATES +- int min_bitrate; +-#else +- int64_t min_bitrate; +-#endif +- /** +- * Average bitrate of the stream, in bits per second. +- * Zero if unknown or unspecified. +- */ +-#if FF_API_UNSANITIZED_BITRATES +- int avg_bitrate; +-#else +- int64_t avg_bitrate; +-#endif +- +- /** +- * The size of the buffer to which the ratecontrol is applied, in bits. +- * Zero if unknown or unspecified. +- */ +- int buffer_size; +- +- /** +- * The delay between the time the packet this structure is associated with +- * is received and the time when it should be decoded, in periods of a 27MHz +- * clock. +- * +- * UINT64_MAX when unknown or unspecified. +- */ +- uint64_t vbv_delay; +-} AVCPBProperties; +- +-/** +- * This structure supplies correlation between a packet timestamp and a wall clock +- * production time. The definition follows the Producer Reference Time ('prft') +- * as defined in ISO/IEC 14496-12 +- */ +-typedef struct AVProducerReferenceTime { +- /** +- * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). +- */ +- int64_t wallclock; +- int flags; +-} AVProducerReferenceTime; +- +-/** + * The decoder will keep a reference to the frame and may reuse it later. + */ + #define AV_GET_BUFFER_FLAG_REF (1 << 0) +@@ -653,8 +543,7 @@ + * (fixed_vop_rate == 0 implies that it is different from the framerate) + * + * - encoding: MUST be set by user. +- * - decoding: the use of this field for decoding is deprecated. +- * Use framerate instead. ++ * - decoding: unused. + */ + AVRational time_base; + +@@ -697,7 +586,7 @@ + * picture width / height. + * + * @note Those fields may not match the values of the last +- * AVFrame output by avcodec_decode_video2 due frame ++ * AVFrame output by avcodec_receive_frame() due frame + * reordering. + * + * - encoding: MUST be set by user. +@@ -773,17 +662,29 @@ + int y, int type, int height); + + /** +- * callback to negotiate the pixelFormat +- * @param fmt is the list of formats which are supported by the codec, +- * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. +- * The first is always the native one. +- * @note The callback may be called again immediately if initialization for +- * the selected (hardware-accelerated) pixel format failed. +- * @warning Behavior is undefined if the callback returns a value not +- * in the fmt list of formats. +- * @return the chosen format +- * - encoding: unused +- * - decoding: Set by user, if not set the native format will be chosen. ++ * Callback to negotiate the pixel format. Decoding only, may be set by the ++ * caller before avcodec_open2(). ++ * ++ * Called by some decoders to select the pixel format that will be used for ++ * the output frames. This is mainly used to set up hardware acceleration, ++ * then the provided format list contains the corresponding hwaccel pixel ++ * formats alongside the "software" one. The software pixel format may also ++ * be retrieved from \ref sw_pix_fmt. ++ * ++ * This callback will be called when the coded frame properties (such as ++ * resolution, pixel format, etc.) change and more than one output format is ++ * supported for those new properties. If a hardware pixel format is chosen ++ * and initialization for it fails, the callback may be called again ++ * immediately. ++ * ++ * This callback may be called from different threads if the decoder is ++ * multi-threaded, but not from more than one thread simultaneously. ++ * ++ * @param fmt list of formats which may be used in the current ++ * configuration, terminated by AV_PIX_FMT_NONE. ++ * @warning Behavior is undefined if the callback returns a value other ++ * than one of the formats in fmt or AV_PIX_FMT_NONE. ++ * @return the chosen format or AV_PIX_FMT_NONE + */ + enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); + +@@ -804,12 +705,6 @@ + */ + float b_quant_factor; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int b_frame_strategy; +-#endif +- + /** + * qscale offset between IP and B-frames + * - encoding: Set by user. +@@ -825,12 +720,6 @@ + */ + int has_b_frames; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int mpeg_quant; +-#endif +- + /** + * qscale factor between P- and I-frames + * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). +@@ -889,15 +778,6 @@ + */ + int slice_count; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int prediction_method; +-#define FF_PRED_LEFT 0 +-#define FF_PRED_PLANE 1 +-#define FF_PRED_MEDIAN 2 +-#endif +- + /** + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. +@@ -970,12 +850,6 @@ + */ + int last_predictor_count; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int pre_me; +-#endif +- + /** + * motion estimation prepass comparison function + * - encoding: Set by user. +@@ -1044,16 +918,6 @@ + */ + uint16_t *inter_matrix; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int scenechange_threshold; +- +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int noise_reduction; +-#endif +- + /** + * precision of the intra DC coefficient - 8 + * - encoding: Set by user. +@@ -1089,26 +953,12 @@ + */ + int mb_lmax; + +-#if FF_API_PRIVATE_OPT +- /** +- * @deprecated use encoder private options instead +- */ +- attribute_deprecated +- int me_penalty_compensation; +-#endif +- + /** + * - encoding: Set by user. + * - decoding: unused + */ + int bidir_refine; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int brd_scale; +-#endif +- + /** + * minimum GOP size + * - encoding: Set by user. +@@ -1123,12 +973,6 @@ + */ + int refs; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int chromaoffset; +-#endif +- + /** + * Note: Value depends upon the compare function used for fullpel ME. + * - encoding: Set by user. +@@ -1136,12 +980,6 @@ + */ + int mv0_threshold; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int b_sensitivity; +-#endif +- + /** + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user +@@ -1194,7 +1032,15 @@ + + /* audio only */ + int sample_rate; ///< samples per second +- int channels; ///< number of audio channels ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * number of audio channels ++ * @deprecated use ch_layout.nb_channels ++ */ ++ attribute_deprecated ++ int channels; ++#endif + + /** + * audio sample format +@@ -1215,6 +1061,7 @@ + */ + int frame_size; + ++#if FF_API_AVCTX_FRAME_NUMBER + /** + * Frame counter, set by libavcodec. + * +@@ -1223,8 +1070,11 @@ + * + * @note the counter is not incremented if encoding/decoding resulted in + * an error. ++ * @deprecated use frame_num instead + */ ++ attribute_deprecated + int frame_number; ++#endif + + /** + * number of bytes per packet if constant and known or 0 +@@ -1239,19 +1089,25 @@ + */ + int cutoff; + ++#if FF_API_OLD_CHANNEL_LAYOUT + /** + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by user, may be overwritten by libavcodec. ++ * @deprecated use ch_layout + */ ++ attribute_deprecated + uint64_t channel_layout; + + /** + * Request decoder to use this channel layout if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. ++ * @deprecated use "downmix" codec private option + */ ++ attribute_deprecated + uint64_t request_channel_layout; ++#endif + + /** + * Type of service that the audio stream conveys. +@@ -1350,24 +1206,6 @@ + */ + int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); + +-#if FF_API_OLD_ENCDEC +- /** +- * If non-zero, the decoded audio and video frames returned from +- * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted +- * and are valid indefinitely. The caller must free them with +- * av_frame_unref() when they are not needed anymore. +- * Otherwise, the decoded frames must not be freed by the caller and are +- * only valid until the next decode call. +- * +- * This is always automatically enabled if avcodec_receive_frame() is used. +- * +- * - encoding: unused +- * - decoding: set by the caller before avcodec_open2(). +- */ +- attribute_deprecated +- int refcounted_frames; +-#endif +- + /* - encoding parameters */ + float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + float qblur; ///< amount of qscale smoothing over time (0.0-1.0) +@@ -1443,42 +1281,6 @@ + */ + int rc_initial_buffer_occupancy; + +-#if FF_API_CODER_TYPE +-#define FF_CODER_TYPE_VLC 0 +-#define FF_CODER_TYPE_AC 1 +-#define FF_CODER_TYPE_RAW 2 +-#define FF_CODER_TYPE_RLE 3 +- /** +- * @deprecated use encoder private options instead +- */ +- attribute_deprecated +- int coder_type; +-#endif /* FF_API_CODER_TYPE */ +- +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int context_model; +-#endif +- +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int frame_skip_threshold; +- +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int frame_skip_factor; +- +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int frame_skip_exp; +- +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int frame_skip_cmp; +-#endif /* FF_API_PRIVATE_OPT */ +- + /** + * trellis RD quantization + * - encoding: Set by user. +@@ -1486,69 +1288,6 @@ + */ + int trellis; + +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int min_prediction_order; +- +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int max_prediction_order; +- +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int64_t timecode_frame_start; +-#endif +- +-#if FF_API_RTP_CALLBACK +- /** +- * @deprecated unused +- */ +- /* The RTP callback: This function is called */ +- /* every time the encoder has a packet to send. */ +- /* It depends on the encoder if the data starts */ +- /* with a Start Code (it should). H.263 does. */ +- /* mb_nb contains the number of macroblocks */ +- /* encoded in the RTP payload. */ +- attribute_deprecated +- void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); +-#endif +- +-#if FF_API_PRIVATE_OPT +- /** @deprecated use encoder private options instead */ +- attribute_deprecated +- int rtp_payload_size; /* The size of the RTP payload: the coder will */ +- /* do its best to deliver a chunk with size */ +- /* below rtp_payload_size, the chunk will start */ +- /* with a start code on some codecs like H.263. */ +- /* This doesn't take account of any particular */ +- /* headers inside the transmitted RTP payload. */ +-#endif +- +-#if FF_API_STAT_BITS +- /* statistics, used for 2-pass encoding */ +- attribute_deprecated +- int mv_bits; +- attribute_deprecated +- int header_bits; +- attribute_deprecated +- int i_tex_bits; +- attribute_deprecated +- int p_tex_bits; +- attribute_deprecated +- int i_count; +- attribute_deprecated +- int p_count; +- attribute_deprecated +- int skip_count; +- attribute_deprecated +- int misc_bits; +- +- /** @deprecated this field is unused */ +- attribute_deprecated +- int frame_bits; +-#endif +- + /** + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. +@@ -1597,13 +1336,9 @@ + * unofficial and experimental (that is, they always try to decode things + * when they can) unless they are explicitly asked to behave stupidly + * (=strictly conform to the specs) ++ * This may only be set to one of the FF_COMPLIANCE_* values in defs.h. + */ + int strict_std_compliance; +-#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. +-#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. +-#define FF_COMPLIANCE_NORMAL 0 +-#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions +-#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. + + /** + * error concealment flags +@@ -1639,28 +1374,14 @@ + + /** + * Error recognition; may misdetect some more or less valid parts as errors. ++ * This is a bitfield of the AV_EF_* values defined in defs.h. ++ * + * - encoding: Set by user. + * - decoding: Set by user. + */ + int err_recognition; + +-/** +- * Verify checksums embedded in the bitstream (could be of either encoded or +- * decoded data, depending on the codec) and print an error message on mismatch. +- * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the +- * decoder returning an error. +- */ +-#define AV_EF_CRCCHECK (1<<0) +-#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations +-#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length +-#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection +- +-#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue +-#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors +-#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors +-#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error +- +- ++#if FF_API_REORDERED_OPAQUE + /** + * opaque 64-bit number (generally a PTS) that will be reordered and + * output in AVFrame.reordered_opaque +@@ -1669,8 +1390,12 @@ + * supported by encoders with the + * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. + * - decoding: Set by user. ++ * ++ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead + */ ++ attribute_deprecated + int64_t reordered_opaque; ++#endif + + /** + * Hardware accelerator in use +@@ -1680,14 +1405,26 @@ + const struct AVHWAccel *hwaccel; + + /** +- * Hardware accelerator context. +- * For some hardware accelerators, a global context needs to be +- * provided by the user. In that case, this holds display-dependent +- * data FFmpeg cannot instantiate itself. Please refer to the +- * FFmpeg HW accelerator documentation to know how to fill this +- * is. e.g. for VA API, this is a struct vaapi_context. +- * - encoding: unused +- * - decoding: Set by user ++ * Legacy hardware accelerator context. ++ * ++ * For some hardware acceleration methods, the caller may use this field to ++ * signal hwaccel-specific data to the codec. The struct pointed to by this ++ * pointer is hwaccel-dependent and defined in the respective header. Please ++ * refer to the FFmpeg HW accelerator documentation to know how to fill ++ * this. ++ * ++ * In most cases this field is optional - the necessary information may also ++ * be provided to libavcodec through @ref hw_frames_ctx or @ref ++ * hw_device_ctx (see avcodec_get_hw_config()). However, in some cases it ++ * may be the only method of signalling some (optional) information. ++ * ++ * The struct and its contents are owned by the caller. ++ * ++ * - encoding: May be set by the caller before avcodec_open2(). Must remain ++ * valid until avcodec_free_context(). ++ * - decoding: May be set by the caller in the get_format() callback. ++ * Must remain valid until the next get_format() call, ++ * or avcodec_free_context() (whichever comes first). + */ + void *hwaccel_context; + +@@ -1729,7 +1466,10 @@ + #define FF_IDCT_SIMPLEARMV6 17 + #define FF_IDCT_FAAN 20 + #define FF_IDCT_SIMPLENEON 22 +-#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ ++#if FF_API_IDCT_NONE ++// formerly used by xvmc ++#define FF_IDCT_NONE 24 ++#endif + #define FF_IDCT_SIMPLEAUTO 128 + + /** +@@ -1753,17 +1493,6 @@ + */ + int lowres; + +-#if FF_API_CODED_FRAME +- /** +- * the picture in the bitstream +- * - encoding: Set by libavcodec. +- * - decoding: unused +- * +- * @deprecated use the quality factor packet side data instead +- */ +- attribute_deprecated AVFrame *coded_frame; +-#endif +- + /** + * thread count + * is used to decide how many independent tasks should be passed to execute() +@@ -1791,27 +1520,6 @@ + */ + int active_thread_type; + +-#if FF_API_THREAD_SAFE_CALLBACKS +- /** +- * Set by the client if its custom get_buffer() callback can be called +- * synchronously from another thread, which allows faster multithreaded decoding. +- * draw_horiz_band() will be called from other threads regardless of this setting. +- * Ignored if the default get_buffer() is used. +- * - encoding: Set by user. +- * - decoding: Set by user. +- * +- * @deprecated the custom get_buffer2() callback should always be +- * thread-safe. Thread-unsafe get_buffer2() implementations will be +- * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, +- * libavcodec will behave as if this field was always set to 1. +- * Callers that want to be forward compatible with future libavcodec +- * versions should wrap access to this field in +- * #if LIBAVCODEC_VERSION_MAJOR < 60 +- */ +- attribute_deprecated +- int thread_safe_callbacks; +-#endif +- + /** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. +@@ -1828,7 +1536,6 @@ + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. +- * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. + * @param c context passed also to func + * @param count the number of things to execute + * @param arg2 argument passed unchanged to func +@@ -1947,6 +1654,7 @@ + #define FF_PROFILE_HEVC_MAIN_10 2 + #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 + #define FF_PROFILE_HEVC_REXT 4 ++#define FF_PROFILE_HEVC_SCC 9 + + #define FF_PROFILE_VVC_MAIN_10 1 + #define FF_PROFILE_VVC_MAIN_10_444 33 +@@ -2016,34 +1724,6 @@ + uint8_t *subtitle_header; + int subtitle_header_size; + +-#if FF_API_VBV_DELAY +- /** +- * VBV delay coded in the last frame (in periods of a 27 MHz clock). +- * Used for compliant TS muxing. +- * - encoding: Set by libavcodec. +- * - decoding: unused. +- * @deprecated this value is now exported as a part of +- * AV_PKT_DATA_CPB_PROPERTIES packet side data +- */ +- attribute_deprecated +- uint64_t vbv_delay; +-#endif +- +-#if FF_API_SIDEDATA_ONLY_PKT +- /** +- * Encoding only and set by default. Allow encoders to output packets +- * that do not contain any encoded data, only side data. +- * +- * Some encoders need to output such packets, e.g. to update some stream +- * parameters at the end of encoding. +- * +- * @deprecated this field disables the default behaviour and +- * it is kept only for compatibility. +- */ +- attribute_deprecated +- int side_data_only_packets; +-#endif +- + /** + * Audio only. The number of "priming" samples (padding) inserted by the + * encoder at the beginning of the audio. I.e. this number of leading +@@ -2141,17 +1821,6 @@ + */ + int seek_preroll; + +-#if FF_API_DEBUG_MV +- /** +- * @deprecated unused +- */ +- attribute_deprecated +- int debug_mv; +-#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames +-#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames +-#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames +-#endif +- + /** + * custom intra quantization matrix + * - encoding: Set by user, can be NULL. +@@ -2183,6 +1852,7 @@ + unsigned properties; + #define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 + #define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 ++#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 + + /** + * Additional data associated with the entire coded stream. +@@ -2218,17 +1888,6 @@ + AVBufferRef *hw_frames_ctx; + + /** +- * Control the form of AVSubtitle.rects[N]->ass +- * - decoding: set by user +- * - encoding: unused +- */ +- int sub_text_format; +-#define FF_SUB_TEXT_FMT_ASS 0 +-#if FF_API_ASS_TIMING +-#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 +-#endif +- +- /** + * Audio only. The amount of padding (in samples) appended by the encoder to + * the end of the audio. I.e. this number of decoded samples must be + * discarded by the caller from the end of the stream to get the original +@@ -2355,6 +2014,10 @@ + * This callback must use the above value to calculate the required buffer size, + * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. + * ++ * In some specific cases, the encoder may not use the entire buffer allocated by this ++ * callback. This will be reflected in the size value in the packet once returned by ++ * avcodec_receive_packet(). ++ * + * This callback must fill the following fields in the packet: + * - data: alignment requirements for AVPacket apply, if any. Some architectures and + * encoders may benefit from having aligned data. +@@ -2382,50 +2045,26 @@ + * - decoding: unused + */ + int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); +-} AVCodecContext; +- +-#if FF_API_CODEC_GET_SET +-/** +- * Accessors for some AVCodecContext fields. These used to be provided for ABI +- * compatibility, and do not need to be used anymore. +- */ +-attribute_deprecated +-AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); +-attribute_deprecated +-void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); +- +-attribute_deprecated +-const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); +-attribute_deprecated +-void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); +- +-attribute_deprecated +-unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); +- +-attribute_deprecated +-int av_codec_get_lowres(const AVCodecContext *avctx); +-attribute_deprecated +-void av_codec_set_lowres(AVCodecContext *avctx, int val); +- +-attribute_deprecated +-int av_codec_get_seek_preroll(const AVCodecContext *avctx); +-attribute_deprecated +-void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); +- +-attribute_deprecated +-uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); +-attribute_deprecated +-void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); +-#endif + +-struct AVSubtitle; +- +-#if FF_API_CODEC_GET_SET +-attribute_deprecated +-int av_codec_get_max_lowres(const AVCodec *codec); +-#endif ++ /** ++ * Audio channel layout. ++ * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. ++ * - decoding: may be set by the caller if known e.g. from the container. ++ * The decoder can then override during decoding as needed. ++ */ ++ AVChannelLayout ch_layout; + +-struct MpegEncContext; ++ /** ++ * Frame counter, set by libavcodec. ++ * ++ * - decoding: total number of frames returned from the decoder so far. ++ * - encoding: total number of frames passed to the encoder so far. ++ * ++ * @note the counter is not incremented if encoding/decoding resulted in ++ * an error. ++ */ ++ int64_t frame_num; ++} AVCodecContext; + + /** + * @defgroup lavc_hwaccel AVHWAccel +@@ -2518,7 +2157,6 @@ + * + * Meaningful slice information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. +- * The only exception is XvMC, that works on MB level. + * + * @param avctx the codec context + * @param buf the slice data buffer base +@@ -2548,17 +2186,6 @@ + int frame_priv_data_size; + + /** +- * Called for every Macroblock in a slice. +- * +- * XvMC uses it to replace the ff_mpv_reconstruct_mb(). +- * Instead of decoding to raw picture, MB parameters are +- * stored in an array provided by the video driver. +- * +- * @param s the mpeg context +- */ +- void (*decode_mb)(struct MpegEncContext *s); +- +- /** + * Initialize the hwaccel private data. + * + * This will be called from ff_get_format(), after hwaccel and +@@ -2634,35 +2261,24 @@ + #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) + + /** +- * @} +- */ +- +-#if FF_API_AVPICTURE +-/** +- * @defgroup lavc_picture AVPicture +- * +- * Functions for working with AVPicture +- * @{ +- */ +- +-/** +- * Picture data structure. +- * +- * Up to four components can be stored into it, the last component is +- * alpha. +- * @deprecated use AVFrame or imgutils functions instead ++ * Some hardware decoders (namely nvdec) can either output direct decoder ++ * surfaces, or make an on-device copy and return said copy. ++ * There is a hard limit on how many decoder surfaces there can be, and it ++ * cannot be accurately guessed ahead of time. ++ * For some processing chains, this can be okay, but others will run into the ++ * limit and in turn produce very confusing errors that require fine tuning of ++ * more or less obscure options by the user, or in extreme cases cannot be ++ * resolved at all without inserting an avfilter that forces a copy. ++ * ++ * Thus, the hwaccel will by default make a copy for safety and resilience. ++ * If a users really wants to minimize the amount of copies, they can set this ++ * flag and ensure their processing chain does not exhaust the surface pool. + */ +-typedef struct AVPicture { +- attribute_deprecated +- uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes +- attribute_deprecated +- int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line +-} AVPicture; ++#define AV_HWACCEL_FLAG_UNSAFE_OUTPUT (1 << 3) + + /** + * @} + */ +-#endif + + enum AVSubtitleType { + SUBTITLE_NONE, +@@ -2691,13 +2307,6 @@ + int h; ///< height of pict, undefined when pict is not set + int nb_colors; ///< number of colors in pict, undefined when pict is not set + +-#if FF_API_AVPICTURE +- /** +- * @deprecated unused +- */ +- attribute_deprecated +- AVPicture pict; +-#endif + /** + * data+linesize for the bitmap of this subtitle. + * Can be set for text/ass as well once they are rendered. +@@ -2728,16 +2337,6 @@ + int64_t pts; ///< Same as packet pts, in AV_TIME_BASE + } AVSubtitle; + +-#if FF_API_NEXT +-/** +- * If c is NULL, returns the first registered codec, +- * if c is non-NULL, returns the next registered codec after c, +- * or NULL if c is the last one. +- */ +-attribute_deprecated +-AVCodec *av_codec_next(const AVCodec *c); +-#endif +- + /** + * Return the LIBAVCODEC_VERSION_INT constant. + */ +@@ -2753,20 +2352,6 @@ + */ + const char *avcodec_license(void); + +-#if FF_API_NEXT +-/** +- * @deprecated Calling this function is unnecessary. +- */ +-attribute_deprecated +-void avcodec_register(AVCodec *codec); +- +-/** +- * @deprecated Calling this function is unnecessary. +- */ +-attribute_deprecated +-void avcodec_register_all(void); +-#endif +- + /** + * Allocate an AVCodecContext and set its fields to default values. The + * resulting struct should be freed with avcodec_free_context(). +@@ -2788,15 +2373,6 @@ + */ + void avcodec_free_context(AVCodecContext **avctx); + +-#if FF_API_GET_CONTEXT_DEFAULTS +-/** +- * @deprecated This function should not be used, as closing and opening a codec +- * context multiple time is not supported. A new codec context should be +- * allocated for each new use. +- */ +-int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); +-#endif +- + /** + * Get the AVClass for AVCodecContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. +@@ -2805,14 +2381,6 @@ + */ + const AVClass *avcodec_get_class(void); + +-#if FF_API_GET_FRAME_CLASS +-/** +- * @deprecated This function should not be used. +- */ +-attribute_deprecated +-const AVClass *avcodec_get_frame_class(void); +-#endif +- + /** + * Get the AVClass for AVSubtitleRect. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. +@@ -2821,28 +2389,6 @@ + */ + const AVClass *avcodec_get_subtitle_rect_class(void); + +-#if FF_API_COPY_CONTEXT +-/** +- * Copy the settings of the source AVCodecContext into the destination +- * AVCodecContext. The resulting destination codec context will be +- * unopened, i.e. you are required to call avcodec_open2() before you +- * can use this AVCodecContext to decode/encode video/audio data. +- * +- * @param dest target codec context, should be initialized with +- * avcodec_alloc_context3(NULL), but otherwise uninitialized +- * @param src source codec context +- * @return AVERROR() on error (e.g. memory allocation error), 0 on success +- * +- * @deprecated The semantics of this function are ill-defined and it should not +- * be used. If you need to transfer the stream parameters from one codec context +- * to another, use an intermediate AVCodecParameters instance and the +- * avcodec_parameters_from_context() / avcodec_parameters_to_context() +- * functions. +- */ +-attribute_deprecated +-int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); +-#endif +- + /** + * Fill the parameters struct based on the values from the supplied codec + * context. Any allocated fields in par are freed and replaced with duplicates +@@ -2872,8 +2418,6 @@ + * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for + * retrieving a codec. + * +- * @warning This function is not thread safe! +- * + * @note Always call this function before using decoding routines (such as + * @ref avcodec_receive_frame()). + * +@@ -2967,6 +2511,7 @@ + void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, + int linesize_align[AV_NUM_DATA_POINTERS]); + ++#ifdef FF_API_AVCODEC_CHROMA_POS + /** + * Converts AVChromaLocation to swscale x/y chroma position. + * +@@ -2975,7 +2520,9 @@ + * + * @param xpos horizontal chroma sample position + * @param ypos vertical chroma sample position ++ * @deprecated Use av_chroma_location_enum_to_pos() instead. + */ ++ attribute_deprecated + int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); + + /** +@@ -2986,116 +2533,10 @@ + * + * @param xpos horizontal chroma sample position + * @param ypos vertical chroma sample position ++ * @deprecated Use av_chroma_location_pos_to_enum() instead. + */ ++ attribute_deprecated + enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); +- +-#if FF_API_OLD_ENCDEC +-/** +- * Decode the audio frame of size avpkt->size from avpkt->data into frame. +- * +- * Some decoders may support multiple frames in a single AVPacket. Such +- * decoders would then just decode the first frame and the return value would be +- * less than the packet size. In this case, avcodec_decode_audio4 has to be +- * called again with an AVPacket containing the remaining data in order to +- * decode the second frame, etc... Even if no frames are returned, the packet +- * needs to be fed to the decoder with remaining data until it is completely +- * consumed or an error occurs. +- * +- * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input +- * and output. This means that for some packets they will not immediately +- * produce decoded output and need to be flushed at the end of decoding to get +- * all the decoded data. Flushing is done by calling this function with packets +- * with avpkt->data set to NULL and avpkt->size set to 0 until it stops +- * returning samples. It is safe to flush even those decoders that are not +- * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. +- * +- * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE +- * larger than the actual read bytes because some optimized bitstream +- * readers read 32 or 64 bits at once and could read over the end. +- * +- * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() +- * before packets may be fed to the decoder. +- * +- * @param avctx the codec context +- * @param[out] frame The AVFrame in which to store decoded audio samples. +- * The decoder will allocate a buffer for the decoded frame by +- * calling the AVCodecContext.get_buffer2() callback. +- * When AVCodecContext.refcounted_frames is set to 1, the frame is +- * reference counted and the returned reference belongs to the +- * caller. The caller must release the frame using av_frame_unref() +- * when the frame is no longer needed. The caller may safely write +- * to the frame if av_frame_is_writable() returns 1. +- * When AVCodecContext.refcounted_frames is set to 0, the returned +- * reference belongs to the decoder and is valid only until the +- * next call to this function or until closing or flushing the +- * decoder. The caller may not write to it. +- * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is +- * non-zero. Note that this field being set to zero +- * does not mean that an error has occurred. For +- * decoders with AV_CODEC_CAP_DELAY set, no given decode +- * call is guaranteed to produce a frame. +- * @param[in] avpkt The input AVPacket containing the input buffer. +- * At least avpkt->data and avpkt->size should be set. Some +- * decoders might also require additional fields to be set. +- * @return A negative error code is returned if an error occurred during +- * decoding, otherwise the number of bytes consumed from the input +- * AVPacket is returned. +- * +-* @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). +- */ +-attribute_deprecated +-int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, +- int *got_frame_ptr, const AVPacket *avpkt); +- +-/** +- * Decode the video frame of size avpkt->size from avpkt->data into picture. +- * Some decoders may support multiple frames in a single AVPacket, such +- * decoders would then just decode the first frame. +- * +- * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than +- * the actual read bytes because some optimized bitstream readers read 32 or 64 +- * bits at once and could read over the end. +- * +- * @warning The end of the input buffer buf should be set to 0 to ensure that +- * no overreading happens for damaged MPEG streams. +- * +- * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay +- * between input and output, these need to be fed with avpkt->data=NULL, +- * avpkt->size=0 at the end to return the remaining frames. +- * +- * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() +- * before packets may be fed to the decoder. +- * +- * @param avctx the codec context +- * @param[out] picture The AVFrame in which the decoded video frame will be stored. +- * Use av_frame_alloc() to get an AVFrame. The codec will +- * allocate memory for the actual bitmap by calling the +- * AVCodecContext.get_buffer2() callback. +- * When AVCodecContext.refcounted_frames is set to 1, the frame is +- * reference counted and the returned reference belongs to the +- * caller. The caller must release the frame using av_frame_unref() +- * when the frame is no longer needed. The caller may safely write +- * to the frame if av_frame_is_writable() returns 1. +- * When AVCodecContext.refcounted_frames is set to 0, the returned +- * reference belongs to the decoder and is valid only until the +- * next call to this function or until closing or flushing the +- * decoder. The caller may not write to it. +- * +- * @param[in] avpkt The input AVPacket containing the input buffer. +- * You can create such packet with av_init_packet() and by then setting +- * data and size, some decoders might in addition need other fields like +- * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least +- * fields possible. +- * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. +- * @return On error a negative value is returned, otherwise the number of bytes +- * used or zero if no frame could be decompressed. +- * +- * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). +- */ +-attribute_deprecated +-int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, +- int *got_picture_ptr, +- const AVPacket *avpkt); + #endif + + /** +@@ -3126,8 +2567,7 @@ + * @param[in] avpkt The input AVPacket containing the input buffer. + */ + int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, +- int *got_sub_ptr, +- AVPacket *avpkt); ++ int *got_sub_ptr, const AVPacket *avpkt); + + /** + * Supply raw packet data as input to a decoder. +@@ -3141,10 +2581,6 @@ + * larger than the actual read bytes because some optimized bitstream + * readers read 32 or 64 bits at once and could read over the end. + * +- * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) +- * on the same AVCodecContext. It will return unexpected results now +- * or in future libavcodec versions. +- * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * +@@ -3167,40 +2603,41 @@ + * still has frames buffered, it will return them after sending + * a flush packet. + * +- * @return 0 on success, otherwise negative error code: +- * AVERROR(EAGAIN): input is not accepted in the current state - user +- * must read output with avcodec_receive_frame() (once +- * all output is read, the packet should be resent, and +- * the call will not fail with EAGAIN). +- * AVERROR_EOF: the decoder has been flushed, and no new packets can +- * be sent to it (also returned if more than 1 flush +- * packet is sent) +- * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush +- * AVERROR(ENOMEM): failed to add packet to internal queue, or similar +- * other errors: legitimate decoding errors ++ * @retval 0 success ++ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user ++ * must read output with avcodec_receive_frame() (once ++ * all output is read, the packet should be resent, ++ * and the call will not fail with EAGAIN). ++ * @retval AVERROR_EOF the decoder has been flushed, and no new packets can be ++ * sent to it (also returned if more than 1 flush ++ * packet is sent) ++ * @retval AVERROR(EINVAL) codec not opened, it is an encoder, or requires flush ++ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar ++ * @retval "another negative error code" legitimate decoding errors + */ + int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); + + /** +- * Return decoded output data from a decoder. ++ * Return decoded output data from a decoder or encoder (when the ++ * AV_CODEC_FLAG_RECON_FRAME flag is used). + * + * @param avctx codec context + * @param frame This will be set to a reference-counted video or audio + * frame (depending on the decoder type) allocated by the +- * decoder. Note that the function will always call ++ * codec. Note that the function will always call + * av_frame_unref(frame) before doing anything else. + * +- * @return +- * 0: success, a frame was returned +- * AVERROR(EAGAIN): output is not available in this state - user must try +- * to send new input +- * AVERROR_EOF: the decoder has been fully flushed, and there will be +- * no more output frames +- * AVERROR(EINVAL): codec not opened, or it is an encoder +- * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters +- * with respect to first decoded frame. Applicable +- * when flag AV_CODEC_FLAG_DROPCHANGED is set. +- * other negative values: legitimate decoding errors ++ * @retval 0 success, a frame was returned ++ * @retval AVERROR(EAGAIN) output is not available in this state - user must ++ * try to send new input ++ * @retval AVERROR_EOF the codec has been fully flushed, and there will be ++ * no more output frames ++ * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the ++ * AV_CODEC_FLAG_RECON_FRAME flag enabled ++ * @retval AVERROR_INPUT_CHANGED current decoded frame has changed parameters with ++ * respect to first decoded frame. Applicable when flag ++ * AV_CODEC_FLAG_DROPCHANGED is set. ++ * @retval "other negative error code" legitimate decoding errors + */ + int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); + +@@ -3227,17 +2664,16 @@ + * If it is not set, frame->nb_samples must be equal to + * avctx->frame_size for all frames except the last. + * The final frame may be smaller than avctx->frame_size. +- * @return 0 on success, otherwise negative error code: +- * AVERROR(EAGAIN): input is not accepted in the current state - user +- * must read output with avcodec_receive_packet() (once +- * all output is read, the packet should be resent, and +- * the call will not fail with EAGAIN). +- * AVERROR_EOF: the encoder has been flushed, and no new frames can +- * be sent to it +- * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a +- * decoder, or requires flush +- * AVERROR(ENOMEM): failed to add packet to internal queue, or similar +- * other errors: legitimate encoding errors ++ * @retval 0 success ++ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user must ++ * read output with avcodec_receive_packet() (once all ++ * output is read, the packet should be resent, and the ++ * call will not fail with EAGAIN). ++ * @retval AVERROR_EOF the encoder has been flushed, and no new frames can ++ * be sent to it ++ * @retval AVERROR(EINVAL) codec not opened, it is a decoder, or requires flush ++ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar ++ * @retval "another negative error code" legitimate encoding errors + */ + int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); + +@@ -3248,13 +2684,13 @@ + * @param avpkt This will be set to a reference-counted packet allocated by the + * encoder. Note that the function will always call + * av_packet_unref(avpkt) before doing anything else. +- * @return 0 on success, otherwise negative error code: +- * AVERROR(EAGAIN): output is not available in the current state - user +- * must try to send input +- * AVERROR_EOF: the encoder has been fully flushed, and there will be +- * no more output packets +- * AVERROR(EINVAL): codec not opened, or it is a decoder +- * other errors: legitimate encoding errors ++ * @retval 0 success ++ * @retval AVERROR(EAGAIN) output is not available in the current state - user must ++ * try to send input ++ * @retval AVERROR_EOF the encoder has been fully flushed, and there will be no ++ * more output packets ++ * @retval AVERROR(EINVAL) codec not opened, or it is a decoder ++ * @retval "another negative error code" legitimate encoding errors + */ + int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); + +@@ -3368,15 +2804,15 @@ + */ + + enum AVPictureStructure { +- AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown +- AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field +- AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field +- AV_PICTURE_STRUCTURE_FRAME, //< coded as frame ++ AV_PICTURE_STRUCTURE_UNKNOWN, ///< unknown ++ AV_PICTURE_STRUCTURE_TOP_FIELD, ///< coded as top field ++ AV_PICTURE_STRUCTURE_BOTTOM_FIELD, ///< coded as bottom field ++ AV_PICTURE_STRUCTURE_FRAME, ///< coded as frame + }; + + typedef struct AVCodecParserContext { + void *priv_data; +- struct AVCodecParser *parser; ++ const struct AVCodecParser *parser; + int64_t frame_offset; /* offset of the current frame */ + int64_t cur_offset; /* current offset + (incremented by each av_parser_parse()) */ +@@ -3425,14 +2861,6 @@ + */ + int key_frame; + +-#if FF_API_CONVERGENCE_DURATION +- /** +- * @deprecated unused +- */ +- attribute_deprecated +- int64_t convergence_duration; +-#endif +- + // Timestamp generation support: + /** + * Synchronization point for start of timestamp generation. +@@ -3542,7 +2970,7 @@ + } AVCodecParserContext; + + typedef struct AVCodecParser { +- int codec_ids[5]; /* several codec IDs are permitted */ ++ int codec_ids[7]; /* several codec IDs are permitted */ + int priv_data_size; + int (*parser_init)(AVCodecParserContext *s); + /* This callback never returns an error, a negative value means that +@@ -3553,10 +2981,6 @@ + const uint8_t *buf, int buf_size); + void (*parser_close)(AVCodecParserContext *s); + int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); +-#if FF_API_NEXT +- attribute_deprecated +- struct AVCodecParser *next; +-#endif + } AVCodecParser; + + /** +@@ -3570,13 +2994,6 @@ + */ + const AVCodecParser *av_parser_iterate(void **opaque); + +-#if FF_API_NEXT +-attribute_deprecated +-AVCodecParser *av_parser_next(const AVCodecParser *c); +- +-attribute_deprecated +-void av_register_codec_parser(AVCodecParser *parser); +-#endif + AVCodecParserContext *av_parser_init(int codec_id); + + /** +@@ -3617,18 +3034,6 @@ + int64_t pts, int64_t dts, + int64_t pos); + +-#if FF_API_PARSER_CHANGE +-/** +- * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed +- * @deprecated Use dump_extradata, remove_extra or extract_extradata +- * bitstream filters instead. +- */ +-attribute_deprecated +-int av_parser_change(AVCodecParserContext *s, +- AVCodecContext *avctx, +- uint8_t **poutbuf, int *poutbuf_size, +- const uint8_t *buf, int buf_size, int keyframe); +-#endif + void av_parser_close(AVCodecParserContext *s); + + /** +@@ -3641,95 +3046,6 @@ + * @{ + */ + +-#if FF_API_OLD_ENCDEC +-/** +- * Encode a frame of audio. +- * +- * Takes input samples from frame and writes the next output packet, if +- * available, to avpkt. The output packet does not necessarily contain data for +- * the most recent frame, as encoders can delay, split, and combine input frames +- * internally as needed. +- * +- * @param avctx codec context +- * @param avpkt output AVPacket. +- * The user can supply an output buffer by setting +- * avpkt->data and avpkt->size prior to calling the +- * function, but if the size of the user-provided data is not +- * large enough, encoding will fail. If avpkt->data and +- * avpkt->size are set, avpkt->destruct must also be set. All +- * other AVPacket fields will be reset by the encoder using +- * av_init_packet(). If avpkt->data is NULL, the encoder will +- * allocate it. The encoder will set avpkt->size to the size +- * of the output packet. +- * +- * If this function fails or produces no output, avpkt will be +- * freed using av_packet_unref(). +- * @param[in] frame AVFrame containing the raw audio data to be encoded. +- * May be NULL when flushing an encoder that has the +- * AV_CODEC_CAP_DELAY capability set. +- * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame +- * can have any number of samples. +- * If it is not set, frame->nb_samples must be equal to +- * avctx->frame_size for all frames except the last. +- * The final frame may be smaller than avctx->frame_size. +- * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the +- * output packet is non-empty, and to 0 if it is +- * empty. If the function returns an error, the +- * packet can be assumed to be invalid, and the +- * value of got_packet_ptr is undefined and should +- * not be used. +- * @return 0 on success, negative error code on failure +- * +- * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. +- * If allowed and required, set AVCodecContext.get_encode_buffer to +- * a custom function to pass user supplied output buffers. +- */ +-attribute_deprecated +-int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, +- const AVFrame *frame, int *got_packet_ptr); +- +-/** +- * Encode a frame of video. +- * +- * Takes input raw video data from frame and writes the next output packet, if +- * available, to avpkt. The output packet does not necessarily contain data for +- * the most recent frame, as encoders can delay and reorder input frames +- * internally as needed. +- * +- * @param avctx codec context +- * @param avpkt output AVPacket. +- * The user can supply an output buffer by setting +- * avpkt->data and avpkt->size prior to calling the +- * function, but if the size of the user-provided data is not +- * large enough, encoding will fail. All other AVPacket fields +- * will be reset by the encoder using av_init_packet(). If +- * avpkt->data is NULL, the encoder will allocate it. +- * The encoder will set avpkt->size to the size of the +- * output packet. The returned data (if any) belongs to the +- * caller, he is responsible for freeing it. +- * +- * If this function fails or produces no output, avpkt will be +- * freed using av_packet_unref(). +- * @param[in] frame AVFrame containing the raw video data to be encoded. +- * May be NULL when flushing an encoder that has the +- * AV_CODEC_CAP_DELAY capability set. +- * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the +- * output packet is non-empty, and to 0 if it is +- * empty. If the function returns an error, the +- * packet can be assumed to be invalid, and the +- * value of got_packet_ptr is undefined and should +- * not be used. +- * @return 0 on success, negative error code on failure +- * +- * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. +- * If allowed and required, set AVCodecContext.get_encode_buffer to +- * a custom function to pass user supplied output buffers. +- */ +-attribute_deprecated +-int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, +- const AVFrame *frame, int *got_packet_ptr); +-#endif +- + int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, + const AVSubtitle *sub); + +@@ -3738,71 +3054,6 @@ + * @} + */ + +-#if FF_API_AVPICTURE +-/** +- * @addtogroup lavc_picture +- * @{ +- */ +- +-/** +- * @deprecated unused +- */ +-attribute_deprecated +-int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); +- +-/** +- * @deprecated unused +- */ +-attribute_deprecated +-void avpicture_free(AVPicture *picture); +- +-/** +- * @deprecated use av_image_fill_arrays() instead. +- */ +-attribute_deprecated +-int avpicture_fill(AVPicture *picture, const uint8_t *ptr, +- enum AVPixelFormat pix_fmt, int width, int height); +- +-/** +- * @deprecated use av_image_copy_to_buffer() instead. +- */ +-attribute_deprecated +-int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, +- int width, int height, +- unsigned char *dest, int dest_size); +- +-/** +- * @deprecated use av_image_get_buffer_size() instead. +- */ +-attribute_deprecated +-int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); +- +-/** +- * @deprecated av_image_copy() instead. +- */ +-attribute_deprecated +-void av_picture_copy(AVPicture *dst, const AVPicture *src, +- enum AVPixelFormat pix_fmt, int width, int height); +- +-/** +- * @deprecated unused +- */ +-attribute_deprecated +-int av_picture_crop(AVPicture *dst, const AVPicture *src, +- enum AVPixelFormat pix_fmt, int top_band, int left_band); +- +-/** +- * @deprecated unused +- */ +-attribute_deprecated +-int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, +- int padtop, int padbottom, int padleft, int padright, int *color); +- +-/** +- * @} +- */ +-#endif +- + /** + * @defgroup lavc_misc Utility functions + * @ingroup libavc +@@ -3819,15 +3070,6 @@ + * @{ + */ + +-#if FF_API_GETCHROMA +-/** +- * @deprecated Use av_pix_fmt_get_chroma_sub_sample +- */ +- +-attribute_deprecated +-void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); +-#endif +- + /** + * Return a value representing the fourCC code associated to the + * pixel format pix_fmt, or 0 if no associated fourCC code can be +@@ -3856,71 +3098,14 @@ + enum AVPixelFormat src_pix_fmt, + int has_alpha, int *loss_ptr); + +-#if FF_API_AVCODEC_PIX_FMT +-/** +- * @deprecated see av_get_pix_fmt_loss() +- */ +-attribute_deprecated +-int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, +- int has_alpha); +-/** +- * @deprecated see av_find_best_pix_fmt_of_2() +- */ +-attribute_deprecated +-enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, +- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); +- +-attribute_deprecated +-enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, +- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); +-#endif +- + enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); + + /** + * @} + */ + +-#if FF_API_TAG_STRING +-/** +- * Put a string representing the codec tag codec_tag in buf. +- * +- * @param buf buffer to place codec tag in +- * @param buf_size size in bytes of buf +- * @param codec_tag codec tag to assign +- * @return the length of the string that would have been generated if +- * enough space had been available, excluding the trailing null +- * +- * @deprecated see av_fourcc_make_string() and av_fourcc2str(). +- */ +-attribute_deprecated +-size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); +-#endif +- + void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); + +-/** +- * Return a name for the specified profile, if available. +- * +- * @param codec the codec that is searched for the given profile +- * @param profile the profile value for which a name is requested +- * @return A name for the profile if found, NULL otherwise. +- */ +-const char *av_get_profile_name(const AVCodec *codec, int profile); +- +-/** +- * Return a name for the specified profile, if available. +- * +- * @param codec_id the ID of the codec to which the requested profile belongs +- * @param profile the profile value for which a name is requested +- * @return A name for the profile if found, NULL otherwise. +- * +- * @note unlike av_get_profile_name(), which searches a list of profiles +- * supported by a specific decoder or encoder implementation, this +- * function searches the list of profiles from the AVCodecDescriptor +- */ +-const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); +- + int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); + int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); + //FIXME func typedef +@@ -3956,11 +3141,8 @@ + * Reset the internal codec state / flush internal buffers. Should be called + * e.g. when seeking or when switching to a different stream. + * +- * @note for decoders, when refcounted frames are not used +- * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously +- * returned from the decoder. When refcounted frames are used, the decoder just +- * releases any references it might keep internally, but the caller's reference +- * remains valid. ++ * @note for decoders, this function just releases any references the decoder ++ * might keep internally, but the caller's references remain valid. + * + * @note for encoders, this function will only do something if the encoder + * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder +@@ -3972,32 +3154,6 @@ + void avcodec_flush_buffers(AVCodecContext *avctx); + + /** +- * Return codec bits per sample. +- * +- * @param[in] codec_id the codec +- * @return Number of bits per sample or zero if unknown for the given codec. +- */ +-int av_get_bits_per_sample(enum AVCodecID codec_id); +- +-/** +- * Return the PCM codec associated with a sample format. +- * @param be endianness, 0 for little, 1 for big, +- * -1 (or anything else) for native +- * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE +- */ +-enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); +- +-/** +- * Return codec bits per sample. +- * Only return non-zero if the bits per sample is exactly correct, not an +- * approximation. +- * +- * @param[in] codec_id the codec +- * @return Number of bits per sample or zero if unknown for the given codec. +- */ +-int av_get_exact_bits_per_sample(enum AVCodecID codec_id); +- +-/** + * Return audio frame duration. + * + * @param avctx codec context +@@ -4007,69 +3163,6 @@ + */ + int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); + +-/** +- * This function is the same as av_get_audio_frame_duration(), except it works +- * with AVCodecParameters instead of an AVCodecContext. +- */ +-int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); +- +-#if FF_API_OLD_BSF +-typedef struct AVBitStreamFilterContext { +- void *priv_data; +- const struct AVBitStreamFilter *filter; +- AVCodecParserContext *parser; +- struct AVBitStreamFilterContext *next; +- /** +- * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). +- * Not for access by library users. +- */ +- char *args; +-} AVBitStreamFilterContext; +- +-/** +- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) +- * is deprecated. Use the new bitstream filtering API (using AVBSFContext). +- */ +-attribute_deprecated +-void av_register_bitstream_filter(AVBitStreamFilter *bsf); +-/** +- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) +- * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() +- * from the new bitstream filtering API (using AVBSFContext). +- */ +-attribute_deprecated +-AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); +-/** +- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) +- * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the +- * new bitstream filtering API (using AVBSFContext). +- */ +-attribute_deprecated +-int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, +- AVCodecContext *avctx, const char *args, +- uint8_t **poutbuf, int *poutbuf_size, +- const uint8_t *buf, int buf_size, int keyframe); +-/** +- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) +- * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using +- * AVBSFContext). +- */ +-attribute_deprecated +-void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); +-/** +- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) +- * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using +- * AVBSFContext). +- */ +-attribute_deprecated +-const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); +-#endif +- +-#if FF_API_NEXT +-attribute_deprecated +-const AVBitStreamFilter *av_bsf_next(void **opaque); +-#endif +- + /* memory */ + + /** +@@ -4088,96 +3181,12 @@ + void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); + + /** +- * Encode extradata length to a buffer. Used by xiph codecs. +- * +- * @param s buffer to write to; must be at least (v/255+1) bytes long +- * @param v size of extradata in bytes +- * @return number of bytes written to the buffer. +- */ +-unsigned int av_xiphlacing(unsigned char *s, unsigned int v); +- +-#if FF_API_USER_VISIBLE_AVHWACCEL +-/** +- * Register the hardware accelerator hwaccel. +- * +- * @deprecated This function doesn't do anything. +- */ +-attribute_deprecated +-void av_register_hwaccel(AVHWAccel *hwaccel); +- +-/** +- * If hwaccel is NULL, returns the first registered hardware accelerator, +- * if hwaccel is non-NULL, returns the next registered hardware accelerator +- * after hwaccel, or NULL if hwaccel is the last one. +- * +- * @deprecated AVHWaccel structures contain no user-serviceable parts, so +- * this function should not be used. +- */ +-attribute_deprecated +-AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); +-#endif +- +-#if FF_API_LOCKMGR +-/** +- * Lock operation used by lockmgr +- * +- * @deprecated Deprecated together with av_lockmgr_register(). +- */ +-enum AVLockOp { +- AV_LOCK_CREATE, ///< Create a mutex +- AV_LOCK_OBTAIN, ///< Lock the mutex +- AV_LOCK_RELEASE, ///< Unlock the mutex +- AV_LOCK_DESTROY, ///< Free mutex resources +-}; +- +-/** +- * Register a user provided lock manager supporting the operations +- * specified by AVLockOp. The "mutex" argument to the function points +- * to a (void *) where the lockmgr should store/get a pointer to a user +- * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the +- * value left by the last call for all other ops. If the lock manager is +- * unable to perform the op then it should leave the mutex in the same +- * state as when it was called and return a non-zero value. However, +- * when called with AV_LOCK_DESTROY the mutex will always be assumed to +- * have been successfully destroyed. If av_lockmgr_register succeeds +- * it will return a non-negative value, if it fails it will return a +- * negative value and destroy all mutex and unregister all callbacks. +- * av_lockmgr_register is not thread-safe, it must be called from a +- * single thread before any calls which make use of locking are used. +- * +- * @param cb User defined callback. av_lockmgr_register invokes calls +- * to this callback and the previously registered callback. +- * The callback will be used to create more than one mutex +- * each of which must be backed by its own underlying locking +- * mechanism (i.e. do not use a single static object to +- * implement your lock manager). If cb is set to NULL the +- * lockmgr will be unregistered. +- * +- * @deprecated This function does nothing, and always returns 0. Be sure to +- * build with thread support to get basic thread safety. +- */ +-attribute_deprecated +-int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); +-#endif +- +-/** + * @return a positive value if s is open (i.e. avcodec_open2() was called on it + * with no corresponding avcodec_close()), 0 otherwise. + */ + int avcodec_is_open(AVCodecContext *s); + + /** +- * Allocate a CPB properties structure and initialize its fields to default +- * values. +- * +- * @param size if non-NULL, the size of the allocated struct will be written +- * here. This is useful for embedding it in side data. +- * +- * @return the newly allocated struct or NULL on failure +- */ +-AVCPBProperties *av_cpb_properties_alloc(size_t *size); +- +-/** + * @} + */ + +diff -Naur a/media/ffvpx/libavcodec/avcodec.symbols b/media/ffvpx/libavcodec/avcodec.symbols +--- a/media/ffvpx/libavcodec/avcodec.symbols 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/avcodec.symbols 2023-04-06 12:50:28.394333574 +0200 +@@ -1,47 +1,26 @@ + av_codec_ffversion +-av_codec_get_chroma_intra_matrix +-av_codec_get_codec_descriptor +-av_codec_get_codec_properties +-av_codec_get_lowres +-av_codec_get_max_lowres +-av_codec_get_pkt_timebase +-av_codec_get_seek_preroll + av_codec_is_decoder + av_codec_is_encoder + av_codec_iterate +-av_codec_next +-av_codec_set_chroma_intra_matrix +-av_codec_set_codec_descriptor +-av_codec_set_lowres +-av_codec_set_pkt_timebase +-av_codec_set_seek_preroll +-av_copy_packet +-av_copy_packet_side_data +-av_dup_packet + av_fast_padded_malloc + av_fast_padded_mallocz +-av_free_packet + av_get_audio_frame_duration + av_get_bits_per_sample +-av_get_codec_tag_string + av_get_exact_bits_per_sample + av_get_pcm_codec + av_get_profile_name + av_grow_packet +-av_hwaccel_next + av_hwdevice_ctx_init + av_hwdevice_ctx_alloc + av_hwdevice_ctx_create_derived + av_hwframe_transfer_get_formats + av_hwframe_ctx_alloc + av_init_packet +-av_lockmgr_register + av_new_packet + av_packet_copy_props + av_packet_free_side_data + av_packet_from_data + av_packet_get_side_data +-av_packet_merge_side_data + av_packet_move_ref + av_packet_new_side_data + av_packet_pack_dictionary +@@ -49,21 +28,16 @@ + av_packet_rescale_ts + av_packet_shrink_side_data + av_packet_side_data_name +-av_packet_split_side_data + av_packet_unpack_dictionary + av_packet_unref +-av_parser_change + av_parser_close + av_parser_init +-av_parser_next + av_parser_parse2 + #ifdef MOZ_LIBAV_FFT + av_rdft_calc + av_rdft_end + av_rdft_init + #endif +-av_register_codec_parser +-av_register_hwaccel + av_shrink_packet + av_vorbis_parse_frame + av_vorbis_parse_frame_flags +@@ -77,10 +51,7 @@ + avcodec_chroma_pos_to_enum + avcodec_close + avcodec_configuration +-avcodec_copy_context +-avcodec_decode_audio4 + avcodec_decode_subtitle2 +-avcodec_decode_video2 + avcodec_default_execute + avcodec_default_execute2 + avcodec_default_get_buffer2 +@@ -97,8 +68,6 @@ + avcodec_flush_buffers + avcodec_free_context + avcodec_get_class +-avcodec_get_context_defaults3 +-avcodec_get_frame_class + avcodec_get_hw_config + avcodec_get_name + avcodec_get_subtitle_rect_class +@@ -106,10 +75,12 @@ + avcodec_is_open + avcodec_license + avcodec_open2 +-avcodec_register +-avcodec_register_all + avcodec_string + avcodec_version + avsubtitle_free + avcodec_send_packet + avcodec_receive_frame ++ff_init_vlc_from_lengths ++ff_init_vlc_sparse ++ff_mpa_freq_tab ++ff_mpa_bitrate_tab +diff -Naur a/media/ffvpx/libavcodec/avpacket.c b/media/ffvpx/libavcodec/avpacket.c +--- a/media/ffvpx/libavcodec/avpacket.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/avpacket.c 2023-04-06 12:50:24.491176503 +0200 +@@ -22,13 +22,12 @@ + #include + + #include "libavutil/avassert.h" +-#include "libavutil/common.h" +-#include "libavutil/internal.h" ++#include "libavutil/intreadwrite.h" + #include "libavutil/mathematics.h" + #include "libavutil/mem.h" ++#include "libavutil/rational.h" + +-#include "bytestream.h" +-#include "internal.h" ++#include "defs.h" + #include "packet.h" + #include "packet_internal.h" + +@@ -39,16 +38,14 @@ + pkt->dts = AV_NOPTS_VALUE; + pkt->pos = -1; + pkt->duration = 0; +-#if FF_API_CONVERGENCE_DURATION +-FF_DISABLE_DEPRECATION_WARNINGS +- pkt->convergence_duration = 0; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + pkt->flags = 0; + pkt->stream_index = 0; + pkt->buf = NULL; + pkt->side_data = NULL; + pkt->side_data_elems = 0; ++ pkt->opaque = NULL; ++ pkt->opaque_ref = NULL; ++ pkt->time_base = av_make_q(0, 1); + } + #endif + +@@ -59,11 +56,12 @@ + pkt->pts = AV_NOPTS_VALUE; + pkt->dts = AV_NOPTS_VALUE; + pkt->pos = -1; ++ pkt->time_base = av_make_q(0, 1); + } + + AVPacket *av_packet_alloc(void) + { +- AVPacket *pkt = av_mallocz(sizeof(AVPacket)); ++ AVPacket *pkt = av_malloc(sizeof(AVPacket)); + if (!pkt) + return pkt; + +@@ -142,7 +140,14 @@ + + if (new_size + data_offset > pkt->buf->size || + !av_buffer_is_writable(pkt->buf)) { +- int ret = av_buffer_realloc(&pkt->buf, new_size + data_offset); ++ int ret; ++ ++ // allocate slightly more than requested to avoid excessive ++ // reallocations ++ if (new_size + data_offset < INT_MAX - new_size/16) ++ new_size += new_size/16; ++ ++ ret = av_buffer_realloc(&pkt->buf, new_size + data_offset); + if (ret < 0) { + pkt->data = old_data; + return ret; +@@ -179,108 +184,6 @@ + return 0; + } + +-#if FF_API_AVPACKET_OLD_API +-FF_DISABLE_DEPRECATION_WARNINGS +-#define ALLOC_MALLOC(data, size) data = av_malloc(size) +-#define ALLOC_BUF(data, size) \ +-do { \ +- av_buffer_realloc(&pkt->buf, size); \ +- data = pkt->buf ? pkt->buf->data : NULL; \ +-} while (0) +- +-#define DUP_DATA(dst, src, size, padding, ALLOC) \ +- do { \ +- void *data; \ +- if (padding) { \ +- if ((unsigned)(size) > \ +- (unsigned)(size) + AV_INPUT_BUFFER_PADDING_SIZE) \ +- goto failed_alloc; \ +- ALLOC(data, size + AV_INPUT_BUFFER_PADDING_SIZE); \ +- } else { \ +- ALLOC(data, size); \ +- } \ +- if (!data) \ +- goto failed_alloc; \ +- memcpy(data, src, size); \ +- if (padding) \ +- memset((uint8_t *)data + size, 0, \ +- AV_INPUT_BUFFER_PADDING_SIZE); \ +- dst = data; \ +- } while (0) +- +-/* Makes duplicates of data, side_data, but does not copy any other fields */ +-static int copy_packet_data(AVPacket *pkt, const AVPacket *src, int dup) +-{ +- pkt->data = NULL; +- pkt->side_data = NULL; +- pkt->side_data_elems = 0; +- if (pkt->buf) { +- AVBufferRef *ref = av_buffer_ref(src->buf); +- if (!ref) +- return AVERROR(ENOMEM); +- pkt->buf = ref; +- pkt->data = ref->data; +- } else { +- DUP_DATA(pkt->data, src->data, pkt->size, 1, ALLOC_BUF); +- } +- if (src->side_data_elems && dup) { +- pkt->side_data = src->side_data; +- pkt->side_data_elems = src->side_data_elems; +- } +- if (src->side_data_elems && !dup) { +- return av_copy_packet_side_data(pkt, src); +- } +- return 0; +- +-failed_alloc: +- av_packet_unref(pkt); +- return AVERROR(ENOMEM); +-} +- +-int av_copy_packet_side_data(AVPacket *pkt, const AVPacket *src) +-{ +- if (src->side_data_elems) { +- int i; +- DUP_DATA(pkt->side_data, src->side_data, +- src->side_data_elems * sizeof(*src->side_data), 0, ALLOC_MALLOC); +- if (src != pkt) { +- memset(pkt->side_data, 0, +- src->side_data_elems * sizeof(*src->side_data)); +- } +- for (i = 0; i < src->side_data_elems; i++) { +- DUP_DATA(pkt->side_data[i].data, src->side_data[i].data, +- src->side_data[i].size, 1, ALLOC_MALLOC); +- pkt->side_data[i].size = src->side_data[i].size; +- pkt->side_data[i].type = src->side_data[i].type; +- } +- } +- pkt->side_data_elems = src->side_data_elems; +- return 0; +- +-failed_alloc: +- av_packet_unref(pkt); +- return AVERROR(ENOMEM); +-} +- +-int av_dup_packet(AVPacket *pkt) +-{ +- AVPacket tmp_pkt; +- +- if (!pkt->buf && pkt->data) { +- tmp_pkt = *pkt; +- return copy_packet_data(pkt, &tmp_pkt, 1); +- } +- return 0; +-} +- +-int av_copy_packet(AVPacket *dst, const AVPacket *src) +-{ +- *dst = *src; +- return copy_packet_data(dst, src, 0); +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + void av_packet_free_side_data(AVPacket *pkt) + { + int i; +@@ -290,22 +193,6 @@ + pkt->side_data_elems = 0; + } + +-#if FF_API_AVPACKET_OLD_API +-FF_DISABLE_DEPRECATION_WARNINGS +-void av_free_packet(AVPacket *pkt) +-{ +- if (pkt) { +- if (pkt->buf) +- av_buffer_unref(&pkt->buf); +- pkt->data = NULL; +- pkt->size = 0; +- +- av_packet_free_side_data(pkt); +- } +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, + uint8_t *data, size_t size) + { +@@ -341,16 +228,12 @@ + + + uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +- buffer_size_t size) ++ size_t size) + { + int ret; + uint8_t *data; + +-#if FF_API_BUFFER_SIZE_T +- if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) +-#else + if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) +-#endif + return NULL; + data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!data) +@@ -366,7 +249,7 @@ + } + + uint8_t *av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, +- buffer_size_t *size) ++ size_t *size) + { + int i; + +@@ -416,102 +299,12 @@ + case AV_PKT_DATA_ICC_PROFILE: return "ICC Profile"; + case AV_PKT_DATA_DOVI_CONF: return "DOVI configuration record"; + case AV_PKT_DATA_S12M_TIMECODE: return "SMPTE ST 12-1:2014 timecode"; ++ case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return "HDR10+ Dynamic Metadata (SMPTE 2094-40)"; + } + return NULL; + } + +-#if FF_API_MERGE_SD_API +- +-#define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL +- +-int av_packet_merge_side_data(AVPacket *pkt){ +- if(pkt->side_data_elems){ +- AVBufferRef *buf; +- int i; +- uint8_t *p; +- uint64_t size= pkt->size + 8LL + AV_INPUT_BUFFER_PADDING_SIZE; +- AVPacket old= *pkt; +- for (i=0; i INT_MAX) +- return AVERROR(EINVAL); +- buf = av_buffer_alloc(size); +- if (!buf) +- return AVERROR(ENOMEM); +- pkt->buf = buf; +- pkt->data = p = buf->data; +- pkt->size = size - AV_INPUT_BUFFER_PADDING_SIZE; +- bytestream_put_buffer(&p, old.data, old.size); +- for (i=old.side_data_elems-1; i>=0; i--) { +- bytestream_put_buffer(&p, old.side_data[i].data, old.side_data[i].size); +- bytestream_put_be32(&p, old.side_data[i].size); +- *p++ = old.side_data[i].type | ((i==old.side_data_elems-1)*128); +- } +- bytestream_put_be64(&p, FF_MERGE_MARKER); +- av_assert0(p-pkt->data == pkt->size); +- memset(p, 0, AV_INPUT_BUFFER_PADDING_SIZE); +- av_packet_unref(&old); +- pkt->side_data_elems = 0; +- pkt->side_data = NULL; +- return 1; +- } +- return 0; +-} +- +-int av_packet_split_side_data(AVPacket *pkt){ +- if (!pkt->side_data_elems && pkt->size >12 && AV_RB64(pkt->data + pkt->size - 8) == FF_MERGE_MARKER){ +- int i; +- unsigned int size; +- uint8_t *p; +- +- p = pkt->data + pkt->size - 8 - 5; +- for (i=1; ; i++){ +- size = AV_RB32(p); +- if (size>INT_MAX - 5 || p - pkt->data < size) +- return 0; +- if (p[4]&128) +- break; +- if (p - pkt->data < size + 5) +- return 0; +- p-= size+5; +- } +- +- if (i > AV_PKT_DATA_NB) +- return AVERROR(ERANGE); +- +- pkt->side_data = av_malloc_array(i, sizeof(*pkt->side_data)); +- if (!pkt->side_data) +- return AVERROR(ENOMEM); +- +- p= pkt->data + pkt->size - 8 - 5; +- for (i=0; ; i++){ +- size= AV_RB32(p); +- av_assert0(size<=INT_MAX - 5 && p - pkt->data >= size); +- pkt->side_data[i].data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); +- pkt->side_data[i].size = size; +- pkt->side_data[i].type = p[4]&127; +- if (!pkt->side_data[i].data) +- return AVERROR(ENOMEM); +- memcpy(pkt->side_data[i].data, p-size, size); +- pkt->size -= size + 5; +- if(p[4]&128) +- break; +- p-= size+5; +- } +- pkt->size -= 8; +- pkt->side_data_elems = i+1; +- return 1; +- } +- return 0; +-} +-#endif +- +-#if FF_API_BUFFER_SIZE_T +-uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size) +-#else + uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size) +-#endif + { + uint8_t *data = NULL; + *size = 0; +@@ -523,18 +316,14 @@ + const AVDictionaryEntry *t = NULL; + size_t total_length = 0; + +- while ((t = av_dict_get(dict, "", t, AV_DICT_IGNORE_SUFFIX))) { ++ while ((t = av_dict_iterate(dict, t))) { + for (int i = 0; i < 2; i++) { + const char *str = i ? t->value : t->key; + const size_t len = strlen(str) + 1; + + if (pass) + memcpy(data + total_length, str, len); +-#if FF_API_BUFFER_SIZE_T +- else if (len > INT_MAX - total_length) +-#else + else if (len > SIZE_MAX - total_length) +-#endif + return NULL; + total_length += len; + } +@@ -550,12 +339,8 @@ + return data; + } + +-#if FF_API_BUFFER_SIZE_T +-int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict) +-#else + int av_packet_unpack_dictionary(const uint8_t *data, size_t size, + AVDictionary **dict) +-#endif + { + const uint8_t *end; + int ret; +@@ -582,7 +367,7 @@ + } + + int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +- buffer_size_t size) ++ size_t size) + { + int i; + +@@ -599,29 +384,32 @@ + + int av_packet_copy_props(AVPacket *dst, const AVPacket *src) + { +- int i; ++ int i, ret; + + dst->pts = src->pts; + dst->dts = src->dts; + dst->pos = src->pos; + dst->duration = src->duration; +-#if FF_API_CONVERGENCE_DURATION +-FF_DISABLE_DEPRECATION_WARNINGS +- dst->convergence_duration = src->convergence_duration; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + dst->flags = src->flags; + dst->stream_index = src->stream_index; +- ++ dst->opaque = src->opaque; ++ dst->time_base = src->time_base; ++ dst->opaque_ref = NULL; + dst->side_data = NULL; + dst->side_data_elems = 0; ++ ++ ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); ++ if (ret < 0) ++ return ret; ++ + for (i = 0; i < src->side_data_elems; i++) { + enum AVPacketSideDataType type = src->side_data[i].type; +- buffer_size_t size = src->side_data[i].size; ++ size_t size = src->side_data[i].size; + uint8_t *src_data = src->side_data[i].data; + uint8_t *dst_data = av_packet_new_side_data(dst, type, size); + + if (!dst_data) { ++ av_buffer_unref(&dst->opaque_ref); + av_packet_free_side_data(dst); + return AVERROR(ENOMEM); + } +@@ -634,6 +422,7 @@ + void av_packet_unref(AVPacket *pkt) + { + av_packet_free_side_data(pkt); ++ av_buffer_unref(&pkt->opaque_ref); + av_buffer_unref(&pkt->buf); + get_packet_defaults(pkt); + } +@@ -742,27 +531,21 @@ + pkt->dts = av_rescale_q(pkt->dts, src_tb, dst_tb); + if (pkt->duration > 0) + pkt->duration = av_rescale_q(pkt->duration, src_tb, dst_tb); +-#if FF_API_CONVERGENCE_DURATION +-FF_DISABLE_DEPRECATION_WARNINGS +- if (pkt->convergence_duration > 0) +- pkt->convergence_duration = av_rescale_q(pkt->convergence_duration, src_tb, dst_tb); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + } + +-int avpriv_packet_list_put(PacketList **packet_buffer, +- PacketList **plast_pktl, ++int avpriv_packet_list_put(PacketList *packet_buffer, + AVPacket *pkt, + int (*copy)(AVPacket *dst, const AVPacket *src), + int flags) + { +- PacketList *pktl = av_mallocz(sizeof(PacketList)); ++ PacketListEntry *pktl = av_malloc(sizeof(*pktl)); + int ret; + + if (!pktl) + return AVERROR(ENOMEM); + + if (copy) { ++ get_packet_defaults(&pktl->pkt); + ret = copy(&pktl->pkt, pkt); + if (ret < 0) { + av_free(pktl); +@@ -777,50 +560,49 @@ + av_packet_move_ref(&pktl->pkt, pkt); + } + +- if (*packet_buffer) +- (*plast_pktl)->next = pktl; ++ pktl->next = NULL; ++ ++ if (packet_buffer->head) ++ packet_buffer->tail->next = pktl; + else +- *packet_buffer = pktl; ++ packet_buffer->head = pktl; + + /* Add the packet in the buffered packet list. */ +- *plast_pktl = pktl; ++ packet_buffer->tail = pktl; + return 0; + } + +-int avpriv_packet_list_get(PacketList **pkt_buffer, +- PacketList **pkt_buffer_end, ++int avpriv_packet_list_get(PacketList *pkt_buffer, + AVPacket *pkt) + { +- PacketList *pktl; +- if (!*pkt_buffer) ++ PacketListEntry *pktl = pkt_buffer->head; ++ if (!pktl) + return AVERROR(EAGAIN); +- pktl = *pkt_buffer; + *pkt = pktl->pkt; +- *pkt_buffer = pktl->next; +- if (!pktl->next) +- *pkt_buffer_end = NULL; ++ pkt_buffer->head = pktl->next; ++ if (!pkt_buffer->head) ++ pkt_buffer->tail = NULL; + av_freep(&pktl); + return 0; + } + +-void avpriv_packet_list_free(PacketList **pkt_buf, PacketList **pkt_buf_end) ++void avpriv_packet_list_free(PacketList *pkt_buf) + { +- PacketList *tmp = *pkt_buf; ++ PacketListEntry *tmp = pkt_buf->head; + + while (tmp) { +- PacketList *pktl = tmp; ++ PacketListEntry *pktl = tmp; + tmp = pktl->next; + av_packet_unref(&pktl->pkt); + av_freep(&pktl); + } +- *pkt_buf = NULL; +- *pkt_buf_end = NULL; ++ pkt_buf->head = pkt_buf->tail = NULL; + } + + int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type) + { + uint8_t *side_data; +- buffer_size_t side_data_size; ++ size_t side_data_size; + int i; + + side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, &side_data_size); +@@ -846,7 +628,7 @@ + { + AVProducerReferenceTime *prft; + uint8_t *side_data; +- buffer_size_t side_data_size; ++ size_t side_data_size; + + side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &side_data_size); + if (!side_data) { +diff -Naur a/media/ffvpx/libavcodec/bitstream.c b/media/ffvpx/libavcodec/bitstream.c +--- a/media/ffvpx/libavcodec/bitstream.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bitstream.c 2023-04-06 12:49:40.251394809 +0200 +@@ -28,33 +28,13 @@ + * bitstream api. + */ + ++#include ++#include ++ ++#include "config.h" + #include "libavutil/avassert.h" +-#include "libavutil/qsort.h" +-#include "avcodec.h" +-#include "internal.h" +-#include "mathops.h" ++#include "libavutil/intreadwrite.h" + #include "put_bits.h" +-#include "vlc.h" +- +-const uint8_t ff_log2_run[41]={ +- 0, 0, 0, 0, 1, 1, 1, 1, +- 2, 2, 2, 2, 3, 3, 3, 3, +- 4, 4, 5, 5, 6, 6, 7, 7, +- 8, 9,10,11,12,13,14,15, +-16,17,18,19,20,21,22,23, +-24, +-}; +- +-#if FF_API_AVPRIV_PUT_BITS +-void avpriv_align_put_bits(PutBitContext *s) +-{ +- align_put_bits(s); +-} +-void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length) +-{ +- ff_copy_bits(pb, src, length); +-} +-#endif + + void ff_put_string(PutBitContext *pb, const char *string, int terminate_string) + { +@@ -90,345 +70,3 @@ + + put_bits(pb, bits, AV_RB16(src + 2 * words) >> (16 - bits)); + } +- +-/* VLC decoding */ +- +-#define GET_DATA(v, table, i, wrap, size) \ +-{ \ +- const uint8_t *ptr = (const uint8_t *)table + i * wrap; \ +- switch(size) { \ +- case 1: \ +- v = *(const uint8_t *)ptr; \ +- break; \ +- case 2: \ +- v = *(const uint16_t *)ptr; \ +- break; \ +- case 4: \ +- default: \ +- av_assert1(size == 4); \ +- v = *(const uint32_t *)ptr; \ +- break; \ +- } \ +-} +- +- +-static int alloc_table(VLC *vlc, int size, int use_static) +-{ +- int index = vlc->table_size; +- +- vlc->table_size += size; +- if (vlc->table_size > vlc->table_allocated) { +- if (use_static) +- abort(); // cannot do anything, init_vlc() is used with too little memory +- vlc->table_allocated += (1 << vlc->bits); +- vlc->table = av_realloc_f(vlc->table, vlc->table_allocated, sizeof(VLC_TYPE) * 2); +- if (!vlc->table) { +- vlc->table_allocated = 0; +- vlc->table_size = 0; +- return AVERROR(ENOMEM); +- } +- memset(vlc->table + vlc->table_allocated - (1 << vlc->bits), 0, sizeof(VLC_TYPE) * 2 << vlc->bits); +- } +- return index; +-} +- +-#define LOCALBUF_ELEMS 1500 // the maximum currently needed is 1296 by rv34 +- +-typedef struct VLCcode { +- uint8_t bits; +- VLC_TYPE symbol; +- /** codeword, with the first bit-to-be-read in the msb +- * (even if intended for a little-endian bitstream reader) */ +- uint32_t code; +-} VLCcode; +- +-static int vlc_common_init(VLC *vlc_arg, int nb_bits, int nb_codes, +- VLC **vlc, VLC *localvlc, VLCcode **buf, +- int flags) +-{ +- *vlc = vlc_arg; +- (*vlc)->bits = nb_bits; +- if (flags & INIT_VLC_USE_NEW_STATIC) { +- av_assert0(nb_codes <= LOCALBUF_ELEMS); +- *localvlc = *vlc_arg; +- *vlc = localvlc; +- (*vlc)->table_size = 0; +- } else { +- (*vlc)->table = NULL; +- (*vlc)->table_allocated = 0; +- (*vlc)->table_size = 0; +- } +- if (nb_codes > LOCALBUF_ELEMS) { +- *buf = av_malloc_array(nb_codes, sizeof(VLCcode)); +- if (!*buf) +- return AVERROR(ENOMEM); +- } +- +- return 0; +-} +- +-static int compare_vlcspec(const void *a, const void *b) +-{ +- const VLCcode *sa = a, *sb = b; +- return (sa->code >> 1) - (sb->code >> 1); +-} +-/** +- * Build VLC decoding tables suitable for use with get_vlc(). +- * +- * @param vlc the context to be initialized +- * +- * @param table_nb_bits max length of vlc codes to store directly in this table +- * (Longer codes are delegated to subtables.) +- * +- * @param nb_codes number of elements in codes[] +- * +- * @param codes descriptions of the vlc codes +- * These must be ordered such that codes going into the same subtable are contiguous. +- * Sorting by VLCcode.code is sufficient, though not necessary. +- */ +-static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, +- VLCcode *codes, int flags) +-{ +- int table_size, table_index, index, code_prefix, symbol, subtable_bits; +- int i, j, k, n, nb, inc; +- uint32_t code; +- volatile VLC_TYPE (* volatile table)[2]; // the double volatile is needed to prevent an internal compiler error in gcc 4.2 +- +- if (table_nb_bits > 30) +- return AVERROR(EINVAL); +- table_size = 1 << table_nb_bits; +- table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); +- ff_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size); +- if (table_index < 0) +- return table_index; +- table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index]; +- +- /* first pass: map codes and compute auxiliary table sizes */ +- for (i = 0; i < nb_codes; i++) { +- n = codes[i].bits; +- code = codes[i].code; +- symbol = codes[i].symbol; +- ff_dlog(NULL, "i=%d n=%d code=0x%"PRIx32"\n", i, n, code); +- if (n <= table_nb_bits) { +- /* no need to add another table */ +- j = code >> (32 - table_nb_bits); +- nb = 1 << (table_nb_bits - n); +- inc = 1; +- if (flags & INIT_VLC_OUTPUT_LE) { +- j = bitswap_32(code); +- inc = 1 << n; +- } +- for (k = 0; k < nb; k++) { +- int bits = table[j][1]; +- int oldsym = table[j][0]; +- ff_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n); +- if ((bits || oldsym) && (bits != n || oldsym != symbol)) { +- av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); +- return AVERROR_INVALIDDATA; +- } +- table[j][1] = n; //bits +- table[j][0] = symbol; +- j += inc; +- } +- } else { +- /* fill auxiliary table recursively */ +- n -= table_nb_bits; +- code_prefix = code >> (32 - table_nb_bits); +- subtable_bits = n; +- codes[i].bits = n; +- codes[i].code = code << table_nb_bits; +- for (k = i+1; k < nb_codes; k++) { +- n = codes[k].bits - table_nb_bits; +- if (n <= 0) +- break; +- code = codes[k].code; +- if (code >> (32 - table_nb_bits) != code_prefix) +- break; +- codes[k].bits = n; +- codes[k].code = code << table_nb_bits; +- subtable_bits = FFMAX(subtable_bits, n); +- } +- subtable_bits = FFMIN(subtable_bits, table_nb_bits); +- j = (flags & INIT_VLC_OUTPUT_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix; +- table[j][1] = -subtable_bits; +- ff_dlog(NULL, "%4x: n=%d (subtable)\n", +- j, codes[i].bits + table_nb_bits); +- index = build_table(vlc, subtable_bits, k-i, codes+i, flags); +- if (index < 0) +- return index; +- /* note: realloc has been done, so reload tables */ +- table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index]; +- table[j][0] = index; //code +- if (table[j][0] != index) { +- avpriv_request_sample(NULL, "strange codes"); +- return AVERROR_PATCHWELCOME; +- } +- i = k-1; +- } +- } +- +- for (i = 0; i < table_size; i++) { +- if (table[i][1] == 0) //bits +- table[i][0] = -1; //codes +- } +- +- return table_index; +-} +- +-static int vlc_common_end(VLC *vlc, int nb_bits, int nb_codes, VLCcode *codes, +- int flags, VLC *vlc_arg, VLCcode localbuf[LOCALBUF_ELEMS]) +-{ +- int ret = build_table(vlc, nb_bits, nb_codes, codes, flags); +- +- if (flags & INIT_VLC_USE_NEW_STATIC) { +- if (vlc->table_size != vlc->table_allocated && +- !(flags & (INIT_VLC_STATIC_OVERLONG & ~INIT_VLC_USE_NEW_STATIC))) +- av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); +- av_assert0(ret >= 0); +- *vlc_arg = *vlc; +- } else { +- if (codes != localbuf) +- av_free(codes); +- if (ret < 0) { +- av_freep(&vlc->table); +- return ret; +- } +- } +- return 0; +-} +- +-/* Build VLC decoding tables suitable for use with get_vlc(). +- +- 'nb_bits' sets the decoding table size (2^nb_bits) entries. The +- bigger it is, the faster is the decoding. But it should not be too +- big to save memory and L1 cache. '9' is a good compromise. +- +- 'nb_codes' : number of vlcs codes +- +- 'bits' : table which gives the size (in bits) of each vlc code. +- +- 'codes' : table which gives the bit pattern of of each vlc code. +- +- 'symbols' : table which gives the values to be returned from get_vlc(). +- +- 'xxx_wrap' : give the number of bytes between each entry of the +- 'bits' or 'codes' tables. +- +- 'xxx_size' : gives the number of bytes of each entry of the 'bits' +- or 'codes' tables. Currently 1,2 and 4 are supported. +- +- 'wrap' and 'size' make it possible to use any memory configuration and types +- (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables. +-*/ +-int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, +- const void *bits, int bits_wrap, int bits_size, +- const void *codes, int codes_wrap, int codes_size, +- const void *symbols, int symbols_wrap, int symbols_size, +- int flags) +-{ +- VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; +- int i, j, ret; +- VLC localvlc, *vlc; +- +- ret = vlc_common_init(vlc_arg, nb_bits, nb_codes, &vlc, &localvlc, +- &buf, flags); +- if (ret < 0) +- return ret; +- +- av_assert0(symbols_size <= 2 || !symbols); +- j = 0; +-#define COPY(condition)\ +- for (i = 0; i < nb_codes; i++) { \ +- unsigned len; \ +- GET_DATA(len, bits, i, bits_wrap, bits_size); \ +- if (!(condition)) \ +- continue; \ +- if (len > 3*nb_bits || len > 32) { \ +- av_log(NULL, AV_LOG_ERROR, "Too long VLC (%u) in init_vlc\n", len);\ +- if (buf != localbuf) \ +- av_free(buf); \ +- return AVERROR(EINVAL); \ +- } \ +- buf[j].bits = len; \ +- GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \ +- if (buf[j].code >= (1LL< nb_bits); +- // qsort is the slowest part of init_vlc, and could probably be improved or avoided +- AV_QSORT(buf, j, struct VLCcode, compare_vlcspec); +- COPY(len && len <= nb_bits); +- nb_codes = j; +- +- return vlc_common_end(vlc, nb_bits, nb_codes, buf, +- flags, vlc_arg, localbuf); +-} +- +-int ff_init_vlc_from_lengths(VLC *vlc_arg, int nb_bits, int nb_codes, +- const int8_t *lens, int lens_wrap, +- const void *symbols, int symbols_wrap, int symbols_size, +- int offset, int flags, void *logctx) +-{ +- VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; +- VLC localvlc, *vlc; +- uint64_t code; +- int ret, j, len_max = FFMIN(32, 3 * nb_bits); +- +- ret = vlc_common_init(vlc_arg, nb_bits, nb_codes, &vlc, &localvlc, +- &buf, flags); +- if (ret < 0) +- return ret; +- +- j = code = 0; +- for (int i = 0; i < nb_codes; i++, lens += lens_wrap) { +- int len = *lens; +- if (len > 0) { +- unsigned sym; +- +- buf[j].bits = len; +- if (symbols) +- GET_DATA(sym, symbols, i, symbols_wrap, symbols_size) +- else +- sym = i; +- buf[j].symbol = sym + offset; +- buf[j++].code = code; +- } else if (len < 0) { +- len = -len; +- } else +- continue; +- if (len > len_max || code & ((1U << (32 - len)) - 1)) { +- av_log(logctx, AV_LOG_ERROR, "Invalid VLC (length %u)\n", len); +- goto fail; +- } +- code += 1U << (32 - len); +- if (code > UINT32_MAX + 1ULL) { +- av_log(logctx, AV_LOG_ERROR, "Overdetermined VLC tree\n"); +- goto fail; +- } +- } +- return vlc_common_end(vlc, nb_bits, j, buf, +- flags, vlc_arg, localbuf); +-fail: +- if (buf != localbuf) +- av_free(buf); +- return AVERROR_INVALIDDATA; +-} +- +-void ff_free_vlc(VLC *vlc) +-{ +- av_freep(&vlc->table); +-} +diff -Naur a/media/ffvpx/libavcodec/bitstream_filter.c b/media/ffvpx/libavcodec/bitstream_filter.c +--- a/media/ffvpx/libavcodec/bitstream_filter.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bitstream_filter.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,185 +0,0 @@ +-/* +- * copyright (c) 2006 Michael Niedermayer +- * +- * 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 +- +-#include "avcodec.h" +-#include "libavutil/internal.h" +-#include "libavutil/mem.h" +-#include "libavutil/opt.h" +- +-#if FF_API_OLD_BSF +-FF_DISABLE_DEPRECATION_WARNINGS +- +-const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f) +-{ +- const AVBitStreamFilter *filter = NULL; +- void *opaque = NULL; +- +- while (filter != f) +- filter = av_bsf_iterate(&opaque); +- +- return av_bsf_iterate(&opaque); +-} +- +-void av_register_bitstream_filter(AVBitStreamFilter *bsf) +-{ +-} +- +-typedef struct BSFCompatContext { +- AVBSFContext *ctx; +- int extradata_updated; +-} BSFCompatContext; +- +-AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) +-{ +- AVBitStreamFilterContext *ctx = NULL; +- BSFCompatContext *priv = NULL; +- const AVBitStreamFilter *bsf; +- +- bsf = av_bsf_get_by_name(name); +- if (!bsf) +- return NULL; +- +- ctx = av_mallocz(sizeof(*ctx)); +- if (!ctx) +- return NULL; +- +- priv = av_mallocz(sizeof(*priv)); +- if (!priv) +- goto fail; +- +- +- ctx->filter = bsf; +- ctx->priv_data = priv; +- +- return ctx; +- +-fail: +- if (priv) +- av_bsf_free(&priv->ctx); +- av_freep(&priv); +- av_freep(&ctx); +- return NULL; +-} +- +-void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc) +-{ +- BSFCompatContext *priv; +- +- if (!bsfc) +- return; +- +- priv = bsfc->priv_data; +- +- av_bsf_free(&priv->ctx); +- av_freep(&bsfc->priv_data); +- av_free(bsfc); +-} +- +-int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, +- AVCodecContext *avctx, const char *args, +- uint8_t **poutbuf, int *poutbuf_size, +- const uint8_t *buf, int buf_size, int keyframe) +-{ +- BSFCompatContext *priv = bsfc->priv_data; +- AVPacket pkt = { 0 }; +- int ret; +- +- if (!priv->ctx) { +- ret = av_bsf_alloc(bsfc->filter, &priv->ctx); +- if (ret < 0) +- return ret; +- +- ret = avcodec_parameters_from_context(priv->ctx->par_in, avctx); +- if (ret < 0) +- return ret; +- +- priv->ctx->time_base_in = avctx->time_base; +- +- if (bsfc->args && bsfc->filter->priv_class) { +- const AVOption *opt = av_opt_next(priv->ctx->priv_data, NULL); +- const char * shorthand[2] = {NULL}; +- +- if (opt) +- shorthand[0] = opt->name; +- +- ret = av_opt_set_from_string(priv->ctx->priv_data, bsfc->args, shorthand, "=", ":"); +- if (ret < 0) +- return ret; +- } +- +- ret = av_bsf_init(priv->ctx); +- if (ret < 0) +- return ret; +- } +- +- pkt.data = (uint8_t *)buf; +- pkt.size = buf_size; +- +- ret = av_bsf_send_packet(priv->ctx, &pkt); +- if (ret < 0) +- return ret; +- +- *poutbuf = NULL; +- *poutbuf_size = 0; +- +- ret = av_bsf_receive_packet(priv->ctx, &pkt); +- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) +- return 0; +- else if (ret < 0) +- return ret; +- +- *poutbuf = av_malloc(pkt.size + AV_INPUT_BUFFER_PADDING_SIZE); +- if (!*poutbuf) { +- av_packet_unref(&pkt); +- return AVERROR(ENOMEM); +- } +- +- *poutbuf_size = pkt.size; +- memcpy(*poutbuf, pkt.data, pkt.size); +- +- av_packet_unref(&pkt); +- +- /* drain all the remaining packets we cannot return */ +- while (ret >= 0) { +- ret = av_bsf_receive_packet(priv->ctx, &pkt); +- av_packet_unref(&pkt); +- } +- +- if (!priv->extradata_updated) { +- /* update extradata in avctx from the output codec parameters */ +- if (priv->ctx->par_out->extradata_size && (!args || !strstr(args, "private_spspps_buf"))) { +- av_freep(&avctx->extradata); +- avctx->extradata_size = 0; +- avctx->extradata = av_mallocz(priv->ctx->par_out->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); +- if (!avctx->extradata) +- return AVERROR(ENOMEM); +- memcpy(avctx->extradata, priv->ctx->par_out->extradata, priv->ctx->par_out->extradata_size); +- avctx->extradata_size = priv->ctx->par_out->extradata_size; +- } +- +- priv->extradata_updated = 1; +- } +- +- return 1; +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +diff -Naur a/media/ffvpx/libavcodec/bitstream_filters.c b/media/ffvpx/libavcodec/bitstream_filters.c +--- a/media/ffvpx/libavcodec/bitstream_filters.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bitstream_filters.c 2023-04-06 12:50:24.491176503 +0200 +@@ -16,70 +16,69 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "config.h" ++#include ++#include + +-#include "libavutil/common.h" + #include "libavutil/log.h" + +-#include "avcodec.h" ++#include "bsf.h" + #include "bsf_internal.h" + +-extern const AVBitStreamFilter ff_aac_adtstoasc_bsf; +-extern const AVBitStreamFilter ff_av1_frame_merge_bsf; +-extern const AVBitStreamFilter ff_av1_frame_split_bsf; +-extern const AVBitStreamFilter ff_av1_metadata_bsf; +-extern const AVBitStreamFilter ff_chomp_bsf; +-extern const AVBitStreamFilter ff_dump_extradata_bsf; +-extern const AVBitStreamFilter ff_dca_core_bsf; +-extern const AVBitStreamFilter ff_eac3_core_bsf; +-extern const AVBitStreamFilter ff_extract_extradata_bsf; +-extern const AVBitStreamFilter ff_filter_units_bsf; +-extern const AVBitStreamFilter ff_h264_metadata_bsf; +-extern const AVBitStreamFilter ff_h264_mp4toannexb_bsf; +-extern const AVBitStreamFilter ff_h264_redundant_pps_bsf; +-extern const AVBitStreamFilter ff_hapqa_extract_bsf; +-extern const AVBitStreamFilter ff_hevc_metadata_bsf; +-extern const AVBitStreamFilter ff_hevc_mp4toannexb_bsf; +-extern const AVBitStreamFilter ff_imx_dump_header_bsf; +-extern const AVBitStreamFilter ff_mjpeg2jpeg_bsf; +-extern const AVBitStreamFilter ff_mjpega_dump_header_bsf; +-extern const AVBitStreamFilter ff_mp3_header_decompress_bsf; +-extern const AVBitStreamFilter ff_mpeg2_metadata_bsf; +-extern const AVBitStreamFilter ff_mpeg4_unpack_bframes_bsf; +-extern const AVBitStreamFilter ff_mov2textsub_bsf; +-extern const AVBitStreamFilter ff_noise_bsf; +-extern const AVBitStreamFilter ff_null_bsf; +-extern const AVBitStreamFilter ff_opus_metadata_bsf; +-extern const AVBitStreamFilter ff_pcm_rechunk_bsf; +-extern const AVBitStreamFilter ff_prores_metadata_bsf; +-extern const AVBitStreamFilter ff_remove_extradata_bsf; +-extern const AVBitStreamFilter ff_setts_bsf; +-extern const AVBitStreamFilter ff_text2movsub_bsf; +-extern const AVBitStreamFilter ff_trace_headers_bsf; +-extern const AVBitStreamFilter ff_truehd_core_bsf; +-extern const AVBitStreamFilter ff_vp9_metadata_bsf; +-extern const AVBitStreamFilter ff_vp9_raw_reorder_bsf; +-extern const AVBitStreamFilter ff_vp9_superframe_bsf; +-extern const AVBitStreamFilter ff_vp9_superframe_split_bsf; ++extern const FFBitStreamFilter ff_aac_adtstoasc_bsf; ++extern const FFBitStreamFilter ff_av1_frame_merge_bsf; ++extern const FFBitStreamFilter ff_av1_frame_split_bsf; ++extern const FFBitStreamFilter ff_av1_metadata_bsf; ++extern const FFBitStreamFilter ff_chomp_bsf; ++extern const FFBitStreamFilter ff_dump_extradata_bsf; ++extern const FFBitStreamFilter ff_dca_core_bsf; ++extern const FFBitStreamFilter ff_dts2pts_bsf; ++extern const FFBitStreamFilter ff_dv_error_marker_bsf; ++extern const FFBitStreamFilter ff_eac3_core_bsf; ++extern const FFBitStreamFilter ff_extract_extradata_bsf; ++extern const FFBitStreamFilter ff_filter_units_bsf; ++extern const FFBitStreamFilter ff_h264_metadata_bsf; ++extern const FFBitStreamFilter ff_h264_mp4toannexb_bsf; ++extern const FFBitStreamFilter ff_h264_redundant_pps_bsf; ++extern const FFBitStreamFilter ff_hapqa_extract_bsf; ++extern const FFBitStreamFilter ff_hevc_metadata_bsf; ++extern const FFBitStreamFilter ff_hevc_mp4toannexb_bsf; ++extern const FFBitStreamFilter ff_imx_dump_header_bsf; ++extern const FFBitStreamFilter ff_media100_to_mjpegb_bsf; ++extern const FFBitStreamFilter ff_mjpeg2jpeg_bsf; ++extern const FFBitStreamFilter ff_mjpega_dump_header_bsf; ++extern const FFBitStreamFilter ff_mp3_header_decompress_bsf; ++extern const FFBitStreamFilter ff_mpeg2_metadata_bsf; ++extern const FFBitStreamFilter ff_mpeg4_unpack_bframes_bsf; ++extern const FFBitStreamFilter ff_mov2textsub_bsf; ++extern const FFBitStreamFilter ff_noise_bsf; ++extern const FFBitStreamFilter ff_null_bsf; ++extern const FFBitStreamFilter ff_opus_metadata_bsf; ++extern const FFBitStreamFilter ff_pcm_rechunk_bsf; ++extern const FFBitStreamFilter ff_pgs_frame_merge_bsf; ++extern const FFBitStreamFilter ff_prores_metadata_bsf; ++extern const FFBitStreamFilter ff_remove_extradata_bsf; ++extern const FFBitStreamFilter ff_setts_bsf; ++extern const FFBitStreamFilter ff_text2movsub_bsf; ++extern const FFBitStreamFilter ff_trace_headers_bsf; ++extern const FFBitStreamFilter ff_truehd_core_bsf; ++extern const FFBitStreamFilter ff_vp9_metadata_bsf; ++extern const FFBitStreamFilter ff_vp9_raw_reorder_bsf; ++extern const FFBitStreamFilter ff_vp9_superframe_bsf; ++extern const FFBitStreamFilter ff_vp9_superframe_split_bsf; + + #include "libavcodec/bsf_list.c" + + const AVBitStreamFilter *av_bsf_iterate(void **opaque) + { + uintptr_t i = (uintptr_t)*opaque; +- const AVBitStreamFilter *f = bitstream_filters[i]; ++ const FFBitStreamFilter *f = bitstream_filters[i]; + +- if (f) ++ if (f) { + *opaque = (void*)(i + 1); +- +- return f; +-} +- +-#if FF_API_NEXT +-const AVBitStreamFilter *av_bsf_next(void **opaque) { +- return av_bsf_iterate(opaque); ++ return &f->p; ++ } ++ return NULL; + } +-#endif + + const AVBitStreamFilter *av_bsf_get_by_name(const char *name) + { +@@ -97,28 +96,6 @@ + return NULL; + } + +-#if FF_API_CHILD_CLASS_NEXT +-const AVClass *ff_bsf_child_class_next(const AVClass *prev) +-{ +- const AVBitStreamFilter *f = NULL; +- void *i = 0; +- +- /* find the filter that corresponds to prev */ +- while (prev && (f = av_bsf_iterate(&i))) { +- if (f->priv_class == prev) { +- break; +- } +- } +- +- /* find next filter with priv options */ +- while ((f = av_bsf_iterate(&i))) { +- if (f->priv_class) +- return f->priv_class; +- } +- return NULL; +-} +-#endif +- + const AVClass *ff_bsf_child_class_iterate(void **opaque) + { + const AVBitStreamFilter *f; +diff -Naur a/media/ffvpx/libavcodec/blockdsp.h b/media/ffvpx/libavcodec/blockdsp.h +--- a/media/ffvpx/libavcodec/blockdsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/blockdsp.h 2023-04-06 12:50:06.970471013 +0200 +@@ -22,9 +22,6 @@ + #include + #include + +-#include "avcodec.h" +-#include "version.h" +- + /* add and put pixel (decoding) + * Block sizes for op_pixels_func are 8x4,8x8 16x8 16x16. + * h for op_pixels_func is limited to { width / 2, width }, +@@ -39,12 +36,12 @@ + op_fill_func fill_block_tab[2]; + } BlockDSPContext; + +-void ff_blockdsp_init(BlockDSPContext *c, AVCodecContext *avctx); ++void ff_blockdsp_init(BlockDSPContext *c); + + void ff_blockdsp_init_alpha(BlockDSPContext *c); + void ff_blockdsp_init_arm(BlockDSPContext *c); + void ff_blockdsp_init_ppc(BlockDSPContext *c); +-void ff_blockdsp_init_x86(BlockDSPContext *c, AVCodecContext *avctx); ++void ff_blockdsp_init_x86(BlockDSPContext *c); + void ff_blockdsp_init_mips(BlockDSPContext *c); + + #endif /* AVCODEC_BLOCKDSP_H */ +diff -Naur a/media/ffvpx/libavcodec/bsf.c b/media/ffvpx/libavcodec/bsf.c +--- a/media/ffvpx/libavcodec/bsf.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bsf.c 2023-04-06 12:49:40.251394809 +0200 +@@ -18,6 +18,8 @@ + + #include + ++#include "config_components.h" ++ + #include "libavutil/avassert.h" + #include "libavutil/log.h" + #include "libavutil/mem.h" +@@ -32,29 +34,40 @@ + + #define IS_EMPTY(pkt) (!(pkt)->data && !(pkt)->side_data_elems) + +-struct AVBSFInternal { ++static av_always_inline const FFBitStreamFilter *ff_bsf(const AVBitStreamFilter *bsf) ++{ ++ return (const FFBitStreamFilter*)bsf; ++} ++ ++typedef struct FFBSFContext { ++ AVBSFContext pub; + AVPacket *buffer_pkt; + int eof; +-}; ++} FFBSFContext; ++ ++static av_always_inline FFBSFContext *ffbsfcontext(AVBSFContext *ctx) ++{ ++ return (FFBSFContext *)ctx; ++} + + void av_bsf_free(AVBSFContext **pctx) + { + AVBSFContext *ctx; ++ FFBSFContext *bsfi; + + if (!pctx || !*pctx) + return; +- ctx = *pctx; ++ ctx = *pctx; ++ bsfi = ffbsfcontext(ctx); + +- if (ctx->internal) { +- if (ctx->filter->close) +- ctx->filter->close(ctx); +- av_packet_free(&ctx->internal->buffer_pkt); +- av_freep(&ctx->internal); ++ if (ctx->priv_data) { ++ if (ff_bsf(ctx->filter)->close) ++ ff_bsf(ctx->filter)->close(ctx); ++ if (ctx->filter->priv_class) ++ av_opt_free(ctx->priv_data); ++ av_freep(&ctx->priv_data); + } +- if (ctx->filter->priv_class && ctx->priv_data) +- av_opt_free(ctx->priv_data); +- +- av_freep(&ctx->priv_data); ++ av_packet_free(&bsfi->buffer_pkt); + + avcodec_parameters_free(&ctx->par_in); + avcodec_parameters_free(&ctx->par_out); +@@ -80,9 +93,6 @@ + .item_name = bsf_to_name, + .version = LIBAVUTIL_VERSION_INT, + .child_next = bsf_child_next, +-#if FF_API_CHILD_CLASS_NEXT +- .child_class_next = ff_bsf_child_class_next, +-#endif + .child_class_iterate = ff_bsf_child_class_iterate, + .category = AV_CLASS_CATEGORY_BITSTREAM_FILTER, + }; +@@ -95,12 +105,13 @@ + int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx) + { + AVBSFContext *ctx; +- AVBSFInternal *bsfi; ++ FFBSFContext *bsfi; + int ret; + +- ctx = av_mallocz(sizeof(*ctx)); +- if (!ctx) ++ bsfi = av_mallocz(sizeof(*bsfi)); ++ if (!bsfi) + return AVERROR(ENOMEM); ++ ctx = &bsfi->pub; + + ctx->av_class = &bsf_class; + ctx->filter = filter; +@@ -112,8 +123,8 @@ + goto fail; + } + /* allocate priv data and init private options */ +- if (filter->priv_data_size) { +- ctx->priv_data = av_mallocz(filter->priv_data_size); ++ if (ff_bsf(filter)->priv_data_size) { ++ ctx->priv_data = av_mallocz(ff_bsf(filter)->priv_data_size); + if (!ctx->priv_data) { + ret = AVERROR(ENOMEM); + goto fail; +@@ -123,15 +134,6 @@ + av_opt_set_defaults(ctx->priv_data); + } + } +- /* Allocate AVBSFInternal; must happen after priv_data has been allocated +- * so that a filter->close needing priv_data is never called without. */ +- bsfi = av_mallocz(sizeof(*bsfi)); +- if (!bsfi) { +- ret = AVERROR(ENOMEM); +- goto fail; +- } +- ctx->internal = bsfi; +- + bsfi->buffer_pkt = av_packet_alloc(); + if (!bsfi->buffer_pkt) { + ret = AVERROR(ENOMEM); +@@ -160,9 +162,9 @@ + "bitstream filter '%s'. Supported codecs are: ", + desc ? desc->name : "unknown", ctx->par_in->codec_id, ctx->filter->name); + for (i = 0; ctx->filter->codec_ids[i] != AV_CODEC_ID_NONE; i++) { +- desc = avcodec_descriptor_get(ctx->filter->codec_ids[i]); ++ enum AVCodecID codec_id = ctx->filter->codec_ids[i]; + av_log(ctx, AV_LOG_ERROR, "%s (%d) ", +- desc ? desc->name : "unknown", ctx->filter->codec_ids[i]); ++ avcodec_get_name(codec_id), codec_id); + } + av_log(ctx, AV_LOG_ERROR, "\n"); + return AVERROR(EINVAL); +@@ -177,8 +179,8 @@ + + ctx->time_base_out = ctx->time_base_in; + +- if (ctx->filter->init) { +- ret = ctx->filter->init(ctx); ++ if (ff_bsf(ctx->filter)->init) { ++ ret = ff_bsf(ctx->filter)->init(ctx); + if (ret < 0) + return ret; + } +@@ -188,22 +190,24 @@ + + void av_bsf_flush(AVBSFContext *ctx) + { +- AVBSFInternal *bsfi = ctx->internal; ++ FFBSFContext *const bsfi = ffbsfcontext(ctx); + + bsfi->eof = 0; + + av_packet_unref(bsfi->buffer_pkt); + +- if (ctx->filter->flush) +- ctx->filter->flush(ctx); ++ if (ff_bsf(ctx->filter)->flush) ++ ff_bsf(ctx->filter)->flush(ctx); + } + + int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt) + { +- AVBSFInternal *bsfi = ctx->internal; ++ FFBSFContext *const bsfi = ffbsfcontext(ctx); + int ret; + + if (!pkt || IS_EMPTY(pkt)) { ++ if (pkt) ++ av_packet_unref(pkt); + bsfi->eof = 1; + return 0; + } +@@ -226,12 +230,12 @@ + + int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt) + { +- return ctx->filter->filter(ctx, pkt); ++ return ff_bsf(ctx->filter)->filter(ctx, pkt); + } + + int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt) + { +- AVBSFInternal *bsfi = ctx->internal; ++ FFBSFContext *const bsfi = ffbsfcontext(ctx); + AVPacket *tmp_pkt; + + if (bsfi->eof) +@@ -252,7 +256,7 @@ + + int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt) + { +- AVBSFInternal *bsfi = ctx->internal; ++ FFBSFContext *const bsfi = ffbsfcontext(ctx); + + if (bsfi->eof) + return AVERROR_EOF; +@@ -399,10 +403,10 @@ + .version = LIBAVUTIL_VERSION_INT, + }; + +-const AVBitStreamFilter ff_list_bsf = { +- .name = "bsf_list", ++static const FFBitStreamFilter list_bsf = { ++ .p.name = "bsf_list", ++ .p.priv_class = &bsf_list_class, + .priv_data_size = sizeof(BSFListContext), +- .priv_class = &bsf_list_class, + .init = bsf_list_init, + .filter = bsf_list_filter, + .flush = bsf_list_flush, +@@ -495,7 +499,7 @@ + goto end; + } + +- ret = av_bsf_alloc(&ff_list_bsf, bsf); ++ ret = av_bsf_alloc(&list_bsf.p, bsf); + if (ret < 0) + return ret; + +@@ -523,7 +527,6 @@ + int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst) + { + AVBSFList *lst; +- char *bsf_str, *buf, *dup, *saveptr; + int ret; + + if (!str) +@@ -533,28 +536,27 @@ + if (!lst) + return AVERROR(ENOMEM); + +- if (!(dup = buf = av_strdup(str))) { +- ret = AVERROR(ENOMEM); +- goto end; +- } +- +- while (bsf_str = av_strtok(buf, ",", &saveptr)) { ++ do { ++ char *bsf_str = av_get_token(&str, ","); + ret = bsf_parse_single(bsf_str, lst); ++ av_free(bsf_str); + if (ret < 0) + goto end; +- +- buf = NULL; +- } ++ } while (*str && *++str); + + ret = av_bsf_list_finalize(&lst, bsf_lst); + end: + if (ret < 0) + av_bsf_list_free(&lst); +- av_free(dup); + return ret; + } + + int av_bsf_get_null_filter(AVBSFContext **bsf) + { +- return av_bsf_alloc(&ff_list_bsf, bsf); ++#if CONFIG_NULL_BSF ++ extern const FFBitStreamFilter ff_null_bsf; ++ return av_bsf_alloc(&ff_null_bsf.p, bsf); ++#else ++ return av_bsf_alloc(&list_bsf.p, bsf); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/bsf.h b/media/ffvpx/libavcodec/bsf.h +--- a/media/ffvpx/libavcodec/bsf.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bsf.h 2023-04-06 12:50:06.970471013 +0200 +@@ -30,12 +30,31 @@ + #include "packet.h" + + /** +- * @addtogroup lavc_core ++ * @defgroup lavc_bsf Bitstream filters ++ * @ingroup libavc ++ * ++ * Bitstream filters transform encoded media data without decoding it. This ++ * allows e.g. manipulating various header values. Bitstream filters operate on ++ * @ref AVPacket "AVPackets". ++ * ++ * The bitstream filtering API is centered around two structures: ++ * AVBitStreamFilter and AVBSFContext. The former represents a bitstream filter ++ * in abstract, the latter a specific filtering process. Obtain an ++ * AVBitStreamFilter using av_bsf_get_by_name() or av_bsf_iterate(), then pass ++ * it to av_bsf_alloc() to create an AVBSFContext. Fill in the user-settable ++ * AVBSFContext fields, as described in its documentation, then call ++ * av_bsf_init() to prepare the filter context for use. ++ * ++ * Submit packets for filtering using av_bsf_send_packet(), obtain filtered ++ * results with av_bsf_receive_packet(). When no more input packets will be ++ * sent, submit a NULL AVPacket to signal the end of the stream to the filter. ++ * av_bsf_receive_packet() will then return trailing packets, if any are ++ * produced by the filter. ++ * ++ * Finally, free the filter context with av_bsf_free(). + * @{ + */ + +-typedef struct AVBSFInternal AVBSFInternal; +- + /** + * The bitstream filter state. + * +@@ -58,12 +77,6 @@ + const struct AVBitStreamFilter *filter; + + /** +- * Opaque libavcodec internal data. Must not be touched by the caller in any +- * way. +- */ +- AVBSFInternal *internal; +- +- /** + * Opaque filter-specific private data. If filter->priv_class is non-NULL, + * this is an AVOptions-enabled struct. + */ +@@ -115,20 +128,6 @@ + * code to this class. + */ + const AVClass *priv_class; +- +- /***************************************************************** +- * No fields below this line are part of the public API. They +- * may not be used outside of libavcodec and can be changed and +- * removed at will. +- * New public fields should be added right above. +- ***************************************************************** +- */ +- +- int priv_data_size; +- int (*init)(AVBSFContext *ctx); +- int (*filter)(AVBSFContext *ctx, AVPacket *pkt); +- void (*close)(AVBSFContext *ctx); +- void (*flush)(AVBSFContext *ctx); + } AVBitStreamFilter; + + /** +@@ -154,9 +153,9 @@ + * av_bsf_init() before sending any data to the filter. + * + * @param filter the filter for which to allocate an instance. +- * @param ctx a pointer into which the pointer to the newly-allocated context +- * will be written. It must be freed with av_bsf_free() after the +- * filtering is done. ++ * @param[out] ctx a pointer into which the pointer to the newly-allocated context ++ * will be written. It must be freed with av_bsf_free() after the ++ * filtering is done. + * + * @return 0 on success, a negative AVERROR code on failure + */ +@@ -165,6 +164,8 @@ + /** + * Prepare the filter for use, after all the parameters and options have been + * set. ++ * ++ * @param ctx a AVBSFContext previously allocated with av_bsf_alloc() + */ + int av_bsf_init(AVBSFContext *ctx); + +@@ -175,6 +176,7 @@ + * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or + * AVERROR_EOF. + * ++ * @param ctx an initialized AVBSFContext + * @param pkt the packet to filter. The bitstream filter will take ownership of + * the packet and reset the contents of pkt. pkt is not touched if an error occurs. + * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), +@@ -182,15 +184,18 @@ + * sending more empty packets does nothing) and will cause the filter to output + * any packets it may have buffered internally. + * +- * @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the +- * filter (using av_bsf_receive_packet()) before new input can be consumed. Another +- * negative AVERROR value if an error occurs. ++ * @return ++ * - 0 on success. ++ * - AVERROR(EAGAIN) if packets need to be retrieved from the filter (using ++ * av_bsf_receive_packet()) before new input can be consumed. ++ * - Another negative AVERROR value if an error occurs. + */ + int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); + + /** + * Retrieve a filtered packet. + * ++ * @param ctx an initialized AVBSFContext + * @param[out] pkt this struct will be filled with the contents of the filtered + * packet. It is owned by the caller and must be freed using + * av_packet_unref() when it is no longer needed. +@@ -201,10 +206,12 @@ + * overwritten by the returned data. On failure, pkt is not + * touched. + * +- * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the +- * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there +- * will be no further output from the filter. Another negative AVERROR value if +- * an error occurs. ++ * @return ++ * - 0 on success. ++ * - AVERROR(EAGAIN) if more packets need to be sent to the filter (using ++ * av_bsf_send_packet()) to get more output. ++ * - AVERROR_EOF if there will be no further output from the filter. ++ * - Another negative AVERROR value if an error occurs. + * + * @note one input packet may result in several output packets, so after sending + * a packet with av_bsf_send_packet(), this function needs to be called +diff -Naur a/media/ffvpx/libavcodec/bsf_internal.h b/media/ffvpx/libavcodec/bsf_internal.h +--- a/media/ffvpx/libavcodec/bsf_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bsf_internal.h 2023-04-06 12:49:40.251394809 +0200 +@@ -24,6 +24,19 @@ + #include "bsf.h" + #include "packet.h" + ++typedef struct FFBitStreamFilter { ++ /** ++ * The public AVBitStreamFilter. See bsf.h for it. ++ */ ++ AVBitStreamFilter p; ++ ++ int priv_data_size; ++ int (*init)(AVBSFContext *ctx); ++ int (*filter)(AVBSFContext *ctx, AVPacket *pkt); ++ void (*close)(AVBSFContext *ctx); ++ void (*flush)(AVBSFContext *ctx); ++} FFBitStreamFilter; ++ + /** + * Called by the bitstream filters to get the next packet for filtering. + * The filter is responsible for either freeing the packet or passing it to the +@@ -42,10 +55,6 @@ + */ + int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt); + +-#if FF_API_CHILD_CLASS_NEXT +-const AVClass *ff_bsf_child_class_next(const AVClass *prev); +-#endif +- + const AVClass *ff_bsf_child_class_iterate(void **opaque); + + #endif /* AVCODEC_BSF_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavcodec/bsf_list.c b/media/ffvpx/libavcodec/bsf_list.c +--- a/media/ffvpx/libavcodec/bsf_list.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/bsf_list.c 2023-04-06 12:49:45.615610885 +0200 +@@ -1,4 +1,6 @@ +-static const AVBitStreamFilter * const bitstream_filters[] = { ++#include "config_components.h" ++ ++static const FFBitStreamFilter * const bitstream_filters[] = { + &ff_null_bsf, + #if CONFIG_VP9_SUPERFRAME_SPLIT_BSF + &ff_vp9_superframe_split_bsf, +diff -Naur a/media/ffvpx/libavcodec/cbs_av1.c b/media/ffvpx/libavcodec/cbs_av1.c +--- a/media/ffvpx/libavcodec/cbs_av1.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/cbs_av1.c 2023-04-06 12:50:06.971471053 +0200 +@@ -20,10 +20,10 @@ + #include "libavutil/opt.h" + #include "libavutil/pixfmt.h" + ++#include "avcodec.h" + #include "cbs.h" + #include "cbs_internal.h" + #include "cbs_av1.h" +-#include "internal.h" + + + static int cbs_av1_read_uvlc(CodedBitstreamContext *ctx, GetBitContext *gbc, +@@ -828,7 +828,7 @@ + goto fail; + } + +- err = ff_cbs_insert_unit_data(frag, -1, header.obu_type, ++ err = ff_cbs_append_unit_data(frag, header.obu_type, + data, obu_length, frag->data_ref); + if (err < 0) + goto fail; +@@ -878,7 +878,7 @@ + GetBitContext gbc; + int err, start_pos, end_pos; + +- err = ff_cbs_alloc_unit_content2(ctx, unit); ++ err = ff_cbs_alloc_unit_content(ctx, unit); + if (err < 0) + return err; + obu = unit->content; +@@ -1058,15 +1058,31 @@ + AV1RawTileData *td; + size_t header_size; + int err, start_pos, end_pos, data_pos; ++ CodedBitstreamAV1Context av1ctx; + + // OBUs in the normal bitstream format must contain a size field + // in every OBU (in annex B it is optional, but we don't support + // writing that). + obu->header.obu_has_size_field = 1; ++ av1ctx = *priv; ++ ++ if (priv->sequence_header_ref) { ++ av1ctx.sequence_header_ref = av_buffer_ref(priv->sequence_header_ref); ++ if (!av1ctx.sequence_header_ref) ++ return AVERROR(ENOMEM); ++ } ++ ++ if (priv->frame_header_ref) { ++ av1ctx.frame_header_ref = av_buffer_ref(priv->frame_header_ref); ++ if (!av1ctx.frame_header_ref) { ++ err = AVERROR(ENOMEM); ++ goto error; ++ } ++ } + + err = cbs_av1_write_obu_header(ctx, pbc, &obu->header); + if (err < 0) +- return err; ++ goto error; + + if (obu->header.obu_has_size_field) { + pbc_tmp = *pbc; +@@ -1084,18 +1100,21 @@ + err = cbs_av1_write_sequence_header_obu(ctx, pbc, + &obu->obu.sequence_header); + if (err < 0) +- return err; ++ goto error; + + av_buffer_unref(&priv->sequence_header_ref); + priv->sequence_header = NULL; + + err = ff_cbs_make_unit_refcounted(ctx, unit); + if (err < 0) +- return err; ++ goto error; + + priv->sequence_header_ref = av_buffer_ref(unit->content_ref); +- if (!priv->sequence_header_ref) +- return AVERROR(ENOMEM); ++ if (!priv->sequence_header_ref) { ++ err = AVERROR(ENOMEM); ++ goto error; ++ } ++ + priv->sequence_header = &obu->obu.sequence_header; + } + break; +@@ -1103,7 +1122,7 @@ + { + err = cbs_av1_write_temporal_delimiter_obu(ctx, pbc); + if (err < 0) +- return err; ++ goto error; + } + break; + case AV1_OBU_FRAME_HEADER: +@@ -1115,7 +1134,7 @@ + AV1_OBU_REDUNDANT_FRAME_HEADER, + NULL); + if (err < 0) +- return err; ++ goto error; + } + break; + case AV1_OBU_TILE_GROUP: +@@ -1123,7 +1142,7 @@ + err = cbs_av1_write_tile_group_obu(ctx, pbc, + &obu->obu.tile_group); + if (err < 0) +- return err; ++ goto error; + + td = &obu->obu.tile_group.tile_data; + } +@@ -1132,7 +1151,7 @@ + { + err = cbs_av1_write_frame_obu(ctx, pbc, &obu->obu.frame, NULL); + if (err < 0) +- return err; ++ goto error; + + td = &obu->obu.frame.tile_group.tile_data; + } +@@ -1141,7 +1160,7 @@ + { + err = cbs_av1_write_tile_list_obu(ctx, pbc, &obu->obu.tile_list); + if (err < 0) +- return err; ++ goto error; + + td = &obu->obu.tile_list.tile_data; + } +@@ -1150,18 +1169,19 @@ + { + err = cbs_av1_write_metadata_obu(ctx, pbc, &obu->obu.metadata); + if (err < 0) +- return err; ++ goto error; + } + break; + case AV1_OBU_PADDING: + { + err = cbs_av1_write_padding_obu(ctx, pbc, &obu->obu.padding); + if (err < 0) +- return err; ++ goto error; + } + break; + default: +- return AVERROR(ENOSYS); ++ err = AVERROR(ENOSYS); ++ goto error; + } + + end_pos = put_bits_count(pbc); +@@ -1172,7 +1192,7 @@ + // Add trailing bits and recalculate. + err = cbs_av1_write_trailing_bits(ctx, pbc, 8 - end_pos % 8); + if (err < 0) +- return err; ++ goto error; + end_pos = put_bits_count(pbc); + obu->obu_size = header_size = (end_pos - start_pos + 7) / 8; + } else { +@@ -1190,14 +1210,19 @@ + *pbc = pbc_tmp; + err = cbs_av1_write_leb128(ctx, pbc, "obu_size", obu->obu_size); + if (err < 0) +- return err; ++ goto error; + + data_pos = put_bits_count(pbc) / 8; + flush_put_bits(pbc); + av_assert0(data_pos <= start_pos); + +- if (8 * obu->obu_size > put_bits_left(pbc)) ++ if (8 * obu->obu_size > put_bits_left(pbc)) { ++ av_buffer_unref(&priv->sequence_header_ref); ++ av_buffer_unref(&priv->frame_header_ref); ++ *priv = av1ctx; ++ + return AVERROR(ENOSPC); ++ } + + if (obu->obu_size > 0) { + memmove(pbc->buf + data_pos, +@@ -1213,8 +1238,13 @@ + + // OBU data must be byte-aligned. + av_assert0(put_bits_count(pbc) % 8 == 0); ++ err = 0; + +- return 0; ++error: ++ av_buffer_unref(&av1ctx.sequence_header_ref); ++ av_buffer_unref(&av1ctx.frame_header_ref); ++ ++ return err; + } + + static int cbs_av1_assemble_fragment(CodedBitstreamContext *ctx, +diff -Naur a/media/ffvpx/libavcodec/cbs_av1_syntax_template.c b/media/ffvpx/libavcodec/cbs_av1_syntax_template.c +--- a/media/ffvpx/libavcodec/cbs_av1_syntax_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/cbs_av1_syntax_template.c 2023-04-06 12:50:24.491176503 +0200 +@@ -355,7 +355,7 @@ + AV1_REF_FRAME_ALTREF2, AV1_REF_FRAME_ALTREF + }; + int8_t ref_frame_idx[AV1_REFS_PER_FRAME], used_frame[AV1_NUM_REF_FRAMES]; +- int8_t shifted_order_hints[AV1_NUM_REF_FRAMES]; ++ int16_t shifted_order_hints[AV1_NUM_REF_FRAMES]; + int cur_frame_hint, latest_order_hint, earliest_order_hint, ref; + int i, j; + +@@ -1862,11 +1862,8 @@ + fb(16, white_point_chromaticity_x); + fb(16, white_point_chromaticity_y); + +- fc(32, luminance_max, 1, MAX_UINT_BITS(32)); +- // luminance_min must be lower than luminance_max. Convert luminance_max from +- // 24.8 fixed point to 18.14 fixed point in order to compare them. +- fc(32, luminance_min, 0, FFMIN(((uint64_t)current->luminance_max << 6) - 1, +- MAX_UINT_BITS(32))); ++ fb(32, luminance_max); ++ fb(32, luminance_min); + + return 0; + } +diff -Naur a/media/ffvpx/libavcodec/cbs.c b/media/ffvpx/libavcodec/cbs.c +--- a/media/ffvpx/libavcodec/cbs.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/cbs.c 2023-04-06 12:50:06.971471053 +0200 +@@ -25,6 +25,7 @@ + #include "libavutil/common.h" + #include "libavutil/opt.h" + ++#include "avcodec.h" + #include "cbs.h" + #include "cbs_internal.h" + +@@ -72,8 +73,8 @@ + AV_CODEC_ID_NONE + }; + +-int ff_cbs_init(CodedBitstreamContext **ctx_ptr, +- enum AVCodecID codec_id, void *log_ctx) ++av_cold int ff_cbs_init(CodedBitstreamContext **ctx_ptr, ++ enum AVCodecID codec_id, void *log_ctx) + { + CodedBitstreamContext *ctx; + const CodedBitstreamType *type; +@@ -117,13 +118,13 @@ + return 0; + } + +-void ff_cbs_flush(CodedBitstreamContext *ctx) ++av_cold void ff_cbs_flush(CodedBitstreamContext *ctx) + { + if (ctx->codec->flush) + ctx->codec->flush(ctx); + } + +-void ff_cbs_close(CodedBitstreamContext **ctx_ptr) ++av_cold void ff_cbs_close(CodedBitstreamContext **ctx_ptr) + { + CodedBitstreamContext *ctx = *ctx_ptr; + +@@ -167,7 +168,7 @@ + frag->data_bit_padding = 0; + } + +-void ff_cbs_fragment_free(CodedBitstreamFragment *frag) ++av_cold void ff_cbs_fragment_free(CodedBitstreamFragment *frag) + { + ff_cbs_fragment_reset(frag); + +@@ -293,6 +294,19 @@ + pkt->data, pkt->size, 0); + } + ++int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx, ++ CodedBitstreamFragment *frag, ++ const AVPacket *pkt) ++{ ++ size_t side_data_size; ++ const uint8_t *side_data = ++ av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, ++ &side_data_size); ++ ++ return cbs_read_data(ctx, frag, NULL, ++ side_data, side_data_size, 1); ++} ++ + int ff_cbs_read(CodedBitstreamContext *ctx, + CodedBitstreamFragment *frag, + const uint8_t *data, size_t size) +@@ -301,6 +315,28 @@ + data, size, 0); + } + ++/** ++ * Allocate a new internal data buffer of the given size in the unit. ++ * ++ * The data buffer will have input padding. ++ */ ++static int cbs_alloc_unit_data(CodedBitstreamUnit *unit, ++ size_t size) ++{ ++ av_assert0(!unit->data && !unit->data_ref); ++ ++ unit->data_ref = av_buffer_alloc(size + AV_INPUT_BUFFER_PADDING_SIZE); ++ if (!unit->data_ref) ++ return AVERROR(ENOMEM); ++ ++ unit->data = unit->data_ref->data; ++ unit->data_size = size; ++ ++ memset(unit->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); ++ ++ return 0; ++} ++ + static int cbs_write_unit_data(CodedBitstreamContext *ctx, + CodedBitstreamUnit *unit) + { +@@ -346,7 +382,7 @@ + + flush_put_bits(&pbc); + +- ret = ff_cbs_alloc_unit_data(unit, put_bits_count(&pbc) / 8); ++ ret = cbs_alloc_unit_data(unit, put_bytes_output(&pbc)); + if (ret < 0) + return ret; + +@@ -402,6 +438,10 @@ + return err; + + av_freep(&par->extradata); ++ par->extradata_size = 0; ++ ++ if (!frag->data_size) ++ return 0; + + par->extradata = av_malloc(frag->data_size + + AV_INPUT_BUFFER_PADDING_SIZE); +@@ -659,43 +699,6 @@ + } + + +-int ff_cbs_alloc_unit_content(CodedBitstreamUnit *unit, +- size_t size, +- void (*free)(void *opaque, uint8_t *data)) +-{ +- av_assert0(!unit->content && !unit->content_ref); +- +- unit->content = av_mallocz(size); +- if (!unit->content) +- return AVERROR(ENOMEM); +- +- unit->content_ref = av_buffer_create(unit->content, size, +- free, NULL, 0); +- if (!unit->content_ref) { +- av_freep(&unit->content); +- return AVERROR(ENOMEM); +- } +- +- return 0; +-} +- +-int ff_cbs_alloc_unit_data(CodedBitstreamUnit *unit, +- size_t size) +-{ +- av_assert0(!unit->data && !unit->data_ref); +- +- unit->data_ref = av_buffer_alloc(size + AV_INPUT_BUFFER_PADDING_SIZE); +- if (!unit->data_ref) +- return AVERROR(ENOMEM); +- +- unit->data = unit->data_ref->data; +- unit->data_size = size; +- +- memset(unit->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); +- +- return 0; +-} +- + static int cbs_insert_unit(CodedBitstreamFragment *frag, + int position) + { +@@ -770,18 +773,16 @@ + return 0; + } + +-int ff_cbs_insert_unit_data(CodedBitstreamFragment *frag, +- int position, +- CodedBitstreamUnitType type, +- uint8_t *data, size_t data_size, +- AVBufferRef *data_buf) ++static int cbs_insert_unit_data(CodedBitstreamFragment *frag, ++ CodedBitstreamUnitType type, ++ uint8_t *data, size_t data_size, ++ AVBufferRef *data_buf, ++ int position) + { + CodedBitstreamUnit *unit; + AVBufferRef *data_ref; + int err; + +- if (position == -1) +- position = frag->nb_units; + av_assert0(position >= 0 && position <= frag->nb_units); + + if (data_buf) +@@ -809,6 +810,16 @@ + return 0; + } + ++int ff_cbs_append_unit_data(CodedBitstreamFragment *frag, ++ CodedBitstreamUnitType type, ++ uint8_t *data, size_t data_size, ++ AVBufferRef *data_buf) ++{ ++ return cbs_insert_unit_data(frag, type, ++ data, data_size, data_buf, ++ frag->nb_units); ++} ++ + void ff_cbs_delete_unit(CodedBitstreamFragment *frag, + int position) + { +@@ -828,12 +839,10 @@ + static void cbs_default_free_unit_content(void *opaque, uint8_t *data) + { + const CodedBitstreamUnitTypeDescriptor *desc = opaque; +- if (desc->content_type == CBS_CONTENT_TYPE_INTERNAL_REFS) { +- int i; +- for (i = 0; i < desc->nb_ref_offsets; i++) { +- void **ptr = (void**)(data + desc->ref_offsets[i]); +- av_buffer_unref((AVBufferRef**)(ptr + 1)); +- } ++ ++ for (int i = 0; i < desc->type.ref.nb_offsets; i++) { ++ void **ptr = (void**)(data + desc->type.ref.offsets[i]); ++ av_buffer_unref((AVBufferRef**)(ptr + 1)); + } + av_free(data); + } +@@ -853,12 +862,12 @@ + if (desc->nb_unit_types == 0) + break; + if (desc->nb_unit_types == CBS_UNIT_TYPE_RANGE) { +- if (unit->type >= desc->unit_type_range_start && +- unit->type <= desc->unit_type_range_end) ++ if (unit->type >= desc->unit_type.range.start && ++ unit->type <= desc->unit_type.range.end) + return desc; + } else { + for (j = 0; j < desc->nb_unit_types; j++) { +- if (desc->unit_types[j] == unit->type) ++ if (desc->unit_type.list[j] == unit->type) + return desc; + } + } +@@ -866,8 +875,8 @@ + return NULL; + } + +-int ff_cbs_alloc_unit_content2(CodedBitstreamContext *ctx, +- CodedBitstreamUnit *unit) ++int ff_cbs_alloc_unit_content(CodedBitstreamContext *ctx, ++ CodedBitstreamUnit *unit) + { + const CodedBitstreamUnitTypeDescriptor *desc; + +@@ -883,7 +892,8 @@ + + unit->content_ref = + av_buffer_create(unit->content, desc->content_size, +- desc->content_free ? desc->content_free ++ desc->content_type == CBS_CONTENT_TYPE_COMPLEX ++ ? desc->type.complex.content_free + : cbs_default_free_unit_content, + (void*)desc, 0); + if (!unit->content_ref) { +@@ -894,13 +904,12 @@ + return 0; + } + +-static int cbs_clone_unit_content(AVBufferRef **clone_ref, +- CodedBitstreamUnit *unit, +- const CodedBitstreamUnitTypeDescriptor *desc) +-{ +- uint8_t *src, *copy; +- uint8_t **src_ptr, **copy_ptr; +- AVBufferRef **src_buf, **copy_buf; ++static int cbs_clone_internal_refs_unit_content(AVBufferRef **clone_ref, ++ const CodedBitstreamUnit *unit, ++ const CodedBitstreamUnitTypeDescriptor *desc) ++{ ++ const uint8_t *src; ++ uint8_t *copy; + int err, i; + + av_assert0(unit->content); +@@ -910,17 +919,17 @@ + if (!copy) + return AVERROR(ENOMEM); + +- for (i = 0; i < desc->nb_ref_offsets; i++) { +- src_ptr = (uint8_t**)(src + desc->ref_offsets[i]); +- src_buf = (AVBufferRef**)(src_ptr + 1); +- copy_ptr = (uint8_t**)(copy + desc->ref_offsets[i]); +- copy_buf = (AVBufferRef**)(copy_ptr + 1); ++ for (i = 0; i < desc->type.ref.nb_offsets; i++) { ++ const uint8_t *const *src_ptr = (const uint8_t* const*)(src + desc->type.ref.offsets[i]); ++ const AVBufferRef *src_buf = *(AVBufferRef**)(src_ptr + 1); ++ uint8_t **copy_ptr = (uint8_t**)(copy + desc->type.ref.offsets[i]); ++ AVBufferRef **copy_buf = (AVBufferRef**)(copy_ptr + 1); + + if (!*src_ptr) { +- av_assert0(!*src_buf); ++ av_assert0(!src_buf); + continue; + } +- if (!*src_buf) { ++ if (!src_buf) { + // We can't handle a non-refcounted pointer here - we don't + // have enough information to handle whatever structure lies + // at the other end of it. +@@ -928,21 +937,14 @@ + goto fail; + } + +- // src_ptr is required to point somewhere inside src_buf. If it +- // doesn't, there is a bug somewhere. +- av_assert0(*src_ptr >= (*src_buf)->data && +- *src_ptr < (*src_buf)->data + (*src_buf)->size); +- +- *copy_buf = av_buffer_ref(*src_buf); ++ *copy_buf = av_buffer_ref(src_buf); + if (!*copy_buf) { + err = AVERROR(ENOMEM); + goto fail; + } +- *copy_ptr = (*copy_buf)->data + (*src_ptr - (*src_buf)->data); + } + + *clone_ref = av_buffer_create(copy, desc->content_size, +- desc->content_free ? desc->content_free : + cbs_default_free_unit_content, + (void*)desc, 0); + if (!*clone_ref) { +@@ -954,46 +956,37 @@ + + fail: + for (--i; i >= 0; i--) +- av_buffer_unref((AVBufferRef**)(copy + desc->ref_offsets[i])); ++ av_buffer_unref((AVBufferRef**)(copy + desc->type.ref.offsets[i])); + av_freep(©); + *clone_ref = NULL; + return err; + } + +-int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, +- CodedBitstreamUnit *unit) ++/* ++ * On success, unit->content and unit->content_ref are updated with ++ * the new content; unit is untouched on failure. ++ * Any old content_ref is simply overwritten and not freed. ++ */ ++static int cbs_clone_unit_content(CodedBitstreamContext *ctx, ++ CodedBitstreamUnit *unit) + { + const CodedBitstreamUnitTypeDescriptor *desc; + AVBufferRef *ref; + int err; + +- av_assert0(unit->content); +- if (unit->content_ref) { +- // Already refcounted, nothing to do. +- return 0; +- } +- + desc = cbs_find_unit_type_desc(ctx, unit); + if (!desc) + return AVERROR(ENOSYS); + + switch (desc->content_type) { +- case CBS_CONTENT_TYPE_POD: +- ref = av_buffer_alloc(desc->content_size); +- if (!ref) +- return AVERROR(ENOMEM); +- memcpy(ref->data, unit->content, desc->content_size); +- err = 0; +- break; +- + case CBS_CONTENT_TYPE_INTERNAL_REFS: +- err = cbs_clone_unit_content(&ref, unit, desc); ++ err = cbs_clone_internal_refs_unit_content(&ref, unit, desc); + break; + + case CBS_CONTENT_TYPE_COMPLEX: +- if (!desc->content_clone) ++ if (!desc->type.complex.content_clone) + return AVERROR_PATCHWELCOME; +- err = desc->content_clone(&ref, unit); ++ err = desc->type.complex.content_clone(&ref, unit); + break; + + default: +@@ -1008,51 +1001,28 @@ + return 0; + } + ++int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, ++ CodedBitstreamUnit *unit) ++{ ++ av_assert0(unit->content); ++ if (unit->content_ref) ++ return 0; ++ return cbs_clone_unit_content(ctx, unit); ++} ++ + int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx, + CodedBitstreamUnit *unit) + { +- const CodedBitstreamUnitTypeDescriptor *desc; +- AVBufferRef *ref; ++ AVBufferRef *ref = unit->content_ref; + int err; + +- // This can only be applied to refcounted units. +- err = ff_cbs_make_unit_refcounted(ctx, unit); +- if (err < 0) +- return err; +- av_assert0(unit->content && unit->content_ref); +- +- if (av_buffer_is_writable(unit->content_ref)) ++ av_assert0(unit->content); ++ if (ref && av_buffer_is_writable(ref)) + return 0; + +- desc = cbs_find_unit_type_desc(ctx, unit); +- if (!desc) +- return AVERROR(ENOSYS); +- +- switch (desc->content_type) { +- case CBS_CONTENT_TYPE_POD: +- err = av_buffer_make_writable(&unit->content_ref); +- break; +- +- case CBS_CONTENT_TYPE_INTERNAL_REFS: +- err = cbs_clone_unit_content(&ref, unit, desc); +- break; +- +- case CBS_CONTENT_TYPE_COMPLEX: +- if (!desc->content_clone) +- return AVERROR_PATCHWELCOME; +- err = desc->content_clone(&ref, unit); +- break; +- +- default: +- av_assert0(0 && "Invalid content type."); +- } ++ err = cbs_clone_unit_content(ctx, unit); + if (err < 0) + return err; +- +- if (desc->content_type != CBS_CONTENT_TYPE_POD) { +- av_buffer_unref(&unit->content_ref); +- unit->content_ref = ref; +- } +- unit->content = unit->content_ref->data; ++ av_buffer_unref(&ref); + return 0; + } +diff -Naur a/media/ffvpx/libavcodec/cbs.h b/media/ffvpx/libavcodec/cbs.h +--- a/media/ffvpx/libavcodec/cbs.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/cbs.h 2023-04-06 12:50:06.971471053 +0200 +@@ -24,7 +24,9 @@ + + #include "libavutil/buffer.h" + +-#include "avcodec.h" ++#include "codec_id.h" ++#include "codec_par.h" ++#include "packet.h" + + + /* +@@ -40,6 +42,7 @@ + * bitstream. + */ + ++struct AVCodecContext; + struct CodedBitstreamType; + + /** +@@ -271,7 +274,11 @@ + */ + int ff_cbs_read_extradata_from_codec(CodedBitstreamContext *ctx, + CodedBitstreamFragment *frag, +- const AVCodecContext *avctx); ++ const struct AVCodecContext *avctx); ++ ++int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx, ++ CodedBitstreamFragment *frag, ++ const AVPacket *pkt); + + /** + * Read the data bitstream from a packet into a fragment, then +@@ -357,30 +364,12 @@ + void ff_cbs_fragment_free(CodedBitstreamFragment *frag); + + /** +- * Allocate a new internal content buffer of the given size in the unit. +- * +- * The content will be zeroed. +- */ +-int ff_cbs_alloc_unit_content(CodedBitstreamUnit *unit, +- size_t size, +- void (*free)(void *opaque, uint8_t *content)); +- +-/** + * Allocate a new internal content buffer matching the type of the unit. + * + * The content will be zeroed. + */ +-int ff_cbs_alloc_unit_content2(CodedBitstreamContext *ctx, +- CodedBitstreamUnit *unit); +- +- +-/** +- * Allocate a new internal data buffer of the given size in the unit. +- * +- * The data buffer will have input padding. +- */ +-int ff_cbs_alloc_unit_data(CodedBitstreamUnit *unit, +- size_t size); ++int ff_cbs_alloc_unit_content(CodedBitstreamContext *ctx, ++ CodedBitstreamUnit *unit); + + /** + * Insert a new unit into a fragment with the given content. +@@ -395,14 +384,13 @@ + AVBufferRef *content_buf); + + /** +- * Insert a new unit into a fragment with the given data bitstream. ++ * Add a new unit to a fragment with the given data bitstream. + * + * If data_buf is not supplied then data must have been allocated with + * av_malloc() and will on success become owned by the unit after this + * call or freed on error. + */ +-int ff_cbs_insert_unit_data(CodedBitstreamFragment *frag, +- int position, ++int ff_cbs_append_unit_data(CodedBitstreamFragment *frag, + CodedBitstreamUnitType type, + uint8_t *data, size_t data_size, + AVBufferRef *data_buf); +diff -Naur a/media/ffvpx/libavcodec/cbs_internal.h b/media/ffvpx/libavcodec/cbs_internal.h +--- a/media/ffvpx/libavcodec/cbs_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/cbs_internal.h 2023-04-06 12:50:06.971471053 +0200 +@@ -19,16 +19,19 @@ + #ifndef AVCODEC_CBS_INTERNAL_H + #define AVCODEC_CBS_INTERNAL_H + +-#include "avcodec.h" ++#include ++ ++#include "libavutil/buffer.h" ++#include "libavutil/log.h" ++ + #include "cbs.h" ++#include "codec_id.h" + #include "get_bits.h" + #include "put_bits.h" + + + enum CBSContentType { +- // Unit content is a simple structure. +- CBS_CONTENT_TYPE_POD, +- // Unit content contains some references to other structures, but all ++ // Unit content may contain some references to other structures, but all + // managed via buffer reference counting. The descriptor defines the + // structure offsets of every buffer reference. + CBS_CONTENT_TYPE_INTERNAL_REFS, +@@ -38,9 +41,9 @@ + }; + + enum { +- // Maximum number of unit types described by the same unit type +- // descriptor. +- CBS_MAX_UNIT_TYPES = 3, ++ // Maximum number of unit types described by the same non-range ++ // unit type descriptor. ++ CBS_MAX_LIST_UNIT_TYPES = 3, + // Maximum number of reference buffer offsets in any one unit. + CBS_MAX_REF_OFFSETS = 2, + // Special value used in a unit type descriptor to indicate that it +@@ -55,13 +58,16 @@ + // used instead. + int nb_unit_types; + +- // Array of unit types that this entry describes. +- const CodedBitstreamUnitType unit_types[CBS_MAX_UNIT_TYPES]; +- +- // Start and end of unit type range, used if nb_unit_types is +- // CBS_UNIT_TYPE_RANGE. +- const CodedBitstreamUnitType unit_type_range_start; +- const CodedBitstreamUnitType unit_type_range_end; ++ union { ++ // Array of unit types that this entry describes. ++ CodedBitstreamUnitType list[CBS_MAX_LIST_UNIT_TYPES]; ++ // Start and end of unit type range, used if nb_unit_types is ++ // CBS_UNIT_TYPE_RANGE. ++ struct { ++ CodedBitstreamUnitType start; ++ CodedBitstreamUnitType end; ++ } range; ++ } unit_type; + + // The type of content described. + enum CBSContentType content_type; +@@ -69,18 +75,27 @@ + // the decomposed content of this type of unit. + size_t content_size; + +- // Number of entries in the ref_offsets array. Only used if the +- // content_type is CBS_CONTENT_TYPE_INTERNAL_REFS. +- int nb_ref_offsets; +- // The structure must contain two adjacent elements: +- // type *field; +- // AVBufferRef *field_ref; +- // where field points to something in the buffer referred to by +- // field_ref. This offset is then set to offsetof(struct, field). +- size_t ref_offsets[CBS_MAX_REF_OFFSETS]; +- +- void (*content_free)(void *opaque, uint8_t *data); +- int (*content_clone)(AVBufferRef **ref, CodedBitstreamUnit *unit); ++ union { ++ // This union's state is determined by content_type: ++ // ref for CBS_CONTENT_TYPE_INTERNAL_REFS, ++ // complex for CBS_CONTENT_TYPE_COMPLEX. ++ struct { ++ // Number of entries in the ref_offsets array. ++ // May be zero, then the structure is POD-like. ++ int nb_offsets; ++ // The structure must contain two adjacent elements: ++ // type *field; ++ // AVBufferRef *field_ref; ++ // where field points to something in the buffer referred to by ++ // field_ref. This offset is then set to offsetof(struct, field). ++ size_t offsets[CBS_MAX_REF_OFFSETS]; ++ } ref; ++ ++ struct { ++ void (*content_free)(void *opaque, uint8_t *data); ++ int (*content_clone)(AVBufferRef **ref, CodedBitstreamUnit *unit); ++ } complex; ++ } type; + } CodedBitstreamUnitTypeDescriptor; + + typedef struct CodedBitstreamType { +@@ -176,28 +191,54 @@ + // range_min in the above functions. + #define MIN_INT_BITS(length) (-(INT64_C(1) << ((length) - 1))) + +- +-#define CBS_UNIT_TYPE_POD(type, structure) { \ ++#define TYPE_LIST(...) { __VA_ARGS__ } ++#define CBS_UNIT_TYPE_POD(type_, structure) { \ + .nb_unit_types = 1, \ +- .unit_types = { type }, \ +- .content_type = CBS_CONTENT_TYPE_POD, \ ++ .unit_type.list = { type_ }, \ ++ .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ + .content_size = sizeof(structure), \ ++ .type.ref = { .nb_offsets = 0 }, \ + } +-#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field) { \ +- .nb_unit_types = 1, \ +- .unit_types = { type }, \ ++#define CBS_UNIT_RANGE_POD(range_start, range_end, structure) { \ ++ .nb_unit_types = CBS_UNIT_TYPE_RANGE, \ ++ .unit_type.range.start = range_start, \ ++ .unit_type.range.end = range_end, \ ++ .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ ++ .content_size = sizeof(structure), \ ++ .type.ref = { .nb_offsets = 0 }, \ ++ } ++ ++#define CBS_UNIT_TYPES_INTERNAL_REF(types, structure, ref_field) { \ ++ .nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \ ++ .unit_type.list = TYPE_LIST types, \ + .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ + .content_size = sizeof(structure), \ +- .nb_ref_offsets = 1, \ +- .ref_offsets = { offsetof(structure, ref_field) }, \ ++ .type.ref = { .nb_offsets = 1, \ ++ .offsets = { offsetof(structure, ref_field) } }, \ + } +-#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) { \ +- .nb_unit_types = 1, \ +- .unit_types = { type }, \ ++#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field) \ ++ CBS_UNIT_TYPES_INTERNAL_REF((type), structure, ref_field) ++ ++#define CBS_UNIT_RANGE_INTERNAL_REF(range_start, range_end, structure, ref_field) { \ ++ .nb_unit_types = CBS_UNIT_TYPE_RANGE, \ ++ .unit_type.range.start = range_start, \ ++ .unit_type.range.end = range_end, \ ++ .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ ++ .content_size = sizeof(structure), \ ++ .type.ref = { .nb_offsets = 1, \ ++ .offsets = { offsetof(structure, ref_field) } }, \ ++ } ++ ++#define CBS_UNIT_TYPES_COMPLEX(types, structure, free_func) { \ ++ .nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \ ++ .unit_type.list = TYPE_LIST types, \ + .content_type = CBS_CONTENT_TYPE_COMPLEX, \ + .content_size = sizeof(structure), \ +- .content_free = free_func, \ ++ .type.complex = { .content_free = free_func }, \ + } ++#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) \ ++ CBS_UNIT_TYPES_COMPLEX((type), structure, free_func) ++ + #define CBS_UNIT_TYPE_END_OF_LIST { .nb_unit_types = 0 } + + +diff -Naur a/media/ffvpx/libavcodec/codec_desc.c b/media/ffvpx/libavcodec/codec_desc.c +--- a/media/ffvpx/libavcodec/codec_desc.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec_desc.c 2023-04-06 12:50:24.491176503 +0200 +@@ -19,15 +19,15 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include + #include + +-#include "libavutil/common.h" + #include "libavutil/internal.h" ++#include "libavutil/macros.h" + + #include "codec_id.h" + #include "codec_desc.h" + #include "profiles.h" +-#include "version.h" + + #define MT(...) (const char *const[]){ __VA_ARGS__, NULL } + +@@ -1462,6 +1462,7 @@ + .long_name = NULL_IF_CONFIG_SMALL("Avid Meridien Uncompressed"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, ++#if FF_API_AYUV_CODECID + { + .id = AV_CODEC_ID_AYUV, + .type = AVMEDIA_TYPE_VIDEO, +@@ -1469,6 +1470,7 @@ + .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed MS 4:4:4:4"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, ++#endif + { + .id = AV_CODEC_ID_TARGA_Y216, + .type = AVMEDIA_TYPE_VIDEO, +@@ -1856,6 +1858,71 @@ + .long_name = NULL_IF_CONFIG_SMALL("Digital Pictures SGA Video"), + .props = AV_CODEC_PROP_LOSSY, + }, ++ { ++ .id = AV_CODEC_ID_GEM, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "gem", ++ .long_name = NULL_IF_CONFIG_SMALL("GEM Raster image"), ++ .props = AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_VBN, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "vbn", ++ .long_name = NULL_IF_CONFIG_SMALL("Vizrt Binary Image"), ++ .props = AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_JPEGXL, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "jpegxl", ++ .long_name = NULL_IF_CONFIG_SMALL("JPEG XL"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | ++ AV_CODEC_PROP_LOSSLESS, ++ .mime_types= MT("image/jxl"), ++ }, ++ { ++ .id = AV_CODEC_ID_QOI, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "qoi", ++ .long_name = NULL_IF_CONFIG_SMALL("QOI (Quite OK Image)"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ }, ++ { ++ .id = AV_CODEC_ID_PHM, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "phm", ++ .long_name = NULL_IF_CONFIG_SMALL("PHM (Portable HalfFloatMap) image"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ }, ++ { ++ .id = AV_CODEC_ID_RADIANCE_HDR, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "hdr", ++ .long_name = NULL_IF_CONFIG_SMALL("HDR (Radiance RGBE format) image"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_WBMP, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "wbmp", ++ .long_name = NULL_IF_CONFIG_SMALL("WBMP (Wireless Application Protocol Bitmap) image"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ }, ++ { ++ .id = AV_CODEC_ID_MEDIA100, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "media100", ++ .long_name = NULL_IF_CONFIG_SMALL("Media 100i"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_VQC, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "vqc", ++ .long_name = NULL_IF_CONFIG_SMALL("ViewQuest VQC"), ++ .props = AV_CODEC_PROP_LOSSY, ++ }, + + /* various PCM "codecs" */ + { +@@ -2462,6 +2529,20 @@ + .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA MobiClip MOFLEX"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + }, ++ { ++ .id = AV_CODEC_ID_ADPCM_IMA_ACORN, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "adpcm_ima_acorn", ++ .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Acorn Replay"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_ADPCM_XMD, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "adpcm_xmd", ++ .long_name = NULL_IF_CONFIG_SMALL("ADPCM Konami XMD"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, + + /* AMR */ + { +@@ -2545,6 +2626,20 @@ + .long_name = NULL_IF_CONFIG_SMALL("DPCM Xilam DERF"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + }, ++ { ++ .id = AV_CODEC_ID_WADY_DPCM, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "wady_dpcm", ++ .long_name = NULL_IF_CONFIG_SMALL("DPCM Marble WADY"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_CBD2_DPCM, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "cbd2_dpcm", ++ .long_name = NULL_IF_CONFIG_SMALL("DPCM Cuberoot-Delta-Exact"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, + + /* audio codecs */ + { +@@ -2758,7 +2853,7 @@ + .type = AVMEDIA_TYPE_AUDIO, + .name = "mlp", + .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"), +- .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ .props = AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_GSM_MS, +@@ -3216,6 +3311,62 @@ + .long_name = NULL_IF_CONFIG_SMALL("MobiClip FastAudio"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + }, ++ { ++ .id = AV_CODEC_ID_MSNSIREN, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "msnsiren", ++ .long_name = NULL_IF_CONFIG_SMALL("MSN Siren"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_DFPWM, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "dfpwm", ++ .long_name = NULL_IF_CONFIG_SMALL("DFPWM (Dynamic Filter Pulse Width Modulation)"), ++ .props = AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_BONK, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "bonk", ++ .long_name = NULL_IF_CONFIG_SMALL("Bonk audio"), ++ .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ }, ++ { ++ .id = AV_CODEC_ID_MISC4, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "misc4", ++ .long_name = NULL_IF_CONFIG_SMALL("Micronas SC-4 Audio"), ++ .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_INTRA_ONLY, ++ }, ++ { ++ .id = AV_CODEC_ID_APAC, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "apac", ++ .long_name = NULL_IF_CONFIG_SMALL("Marian's A-pac audio"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ }, ++ { ++ .id = AV_CODEC_ID_FTR, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "ftr", ++ .long_name = NULL_IF_CONFIG_SMALL("FTR Voice"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, ++ }, ++ { ++ .id = AV_CODEC_ID_WAVARC, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "wavarc", ++ .long_name = NULL_IF_CONFIG_SMALL("Waveform Archiver"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, ++ }, ++ { ++ .id = AV_CODEC_ID_RKA, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "rka", ++ .long_name = NULL_IF_CONFIG_SMALL("RKA (RK Audio)"), ++ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, ++ }, + + /* subtitle codecs */ + { +@@ -3488,6 +3639,18 @@ + .long_name = NULL_IF_CONFIG_SMALL("AVFrame to AVPacket passthrough"), + .props = AV_CODEC_PROP_LOSSLESS, + }, ++ { ++ .id = AV_CODEC_ID_VNULL, ++ .type = AVMEDIA_TYPE_VIDEO, ++ .name = "vnull", ++ .long_name = NULL_IF_CONFIG_SMALL("Null video codec"), ++ }, ++ { ++ .id = AV_CODEC_ID_ANULL, ++ .type = AVMEDIA_TYPE_AUDIO, ++ .name = "anull", ++ .long_name = NULL_IF_CONFIG_SMALL("Null audio codec"), ++ }, + }; + + static int descriptor_compare(const void *key, const void *member) +diff -Naur a/media/ffvpx/libavcodec/codec.h b/media/ffvpx/libavcodec/codec.h +--- a/media/ffvpx/libavcodec/codec.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec.h 2023-04-06 12:50:24.491176503 +0200 +@@ -31,7 +31,7 @@ + #include "libavutil/samplefmt.h" + + #include "libavcodec/codec_id.h" +-#include "libavcodec/version.h" ++#include "libavcodec/version_major.h" + + /** + * @addtogroup lavc_core +@@ -50,7 +50,6 @@ + * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. + */ + #define AV_CODEC_CAP_DR1 (1 << 1) +-#define AV_CODEC_CAP_TRUNCATED (1 << 3) + /** + * Encoder or decoder requires flushing with NULL input at the end in order to + * give the complete and correct output. +@@ -120,9 +119,6 @@ + * multithreading-capable external libraries. + */ + #define AV_CODEC_CAP_OTHER_THREADS (1 << 15) +-#if FF_API_AUTO_THREADS +-#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS +-#endif + /** + * Audio encoder supports receiving a different number of samples in each call. + */ +@@ -138,17 +134,6 @@ + */ + #define AV_CODEC_CAP_AVOID_PROBING (1 << 17) + +-#if FF_API_UNUSED_CODEC_CAPS +-/** +- * Deprecated and unused. Use AVCodecDescriptor.props instead +- */ +-#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 +-/** +- * Deprecated and unused. Use AVCodecDescriptor.props instead +- */ +-#define AV_CODEC_CAP_LOSSLESS 0x80000000 +-#endif +- + /** + * Codec is backed by a hardware implementation. Typically used to + * identify a non-hwaccel hardware decoder. For information about hwaccels, use +@@ -164,9 +149,9 @@ + #define AV_CODEC_CAP_HYBRID (1 << 19) + + /** +- * This codec takes the reordered_opaque field from input AVFrames +- * and returns it in the corresponding field in AVCodecContext after +- * encoding. ++ * This encoder can reorder user opaque values from input AVFrames and return ++ * them with corresponding output packets. ++ * @see AV_CODEC_FLAG_COPY_OPAQUE + */ + #define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) + +@@ -178,6 +163,14 @@ + #define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) + + /** ++ * The encoder is able to output reconstructed frame data, i.e. raw frames that ++ * would be produced by decoding the encoded bitstream. ++ * ++ * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. ++ */ ++#define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) ++ ++/** + * AVProfile. + */ + typedef struct AVProfile { +@@ -185,12 +178,6 @@ + const char *name; ///< short name for the profile + } AVProfile; + +-typedef struct AVCodecDefault AVCodecDefault; +- +-struct AVCodecContext; +-struct AVSubtitle; +-struct AVPacket; +- + /** + * AVCodec. + */ +@@ -214,12 +201,18 @@ + * see AV_CODEC_CAP_* + */ + int capabilities; ++ uint8_t max_lowres; ///< maximum value for lowres supported by the decoder + const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} + const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 + const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 + const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * @deprecated use ch_layouts instead ++ */ ++ attribute_deprecated + const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 +- uint8_t max_lowres; ///< maximum value for lowres supported by the decoder ++#endif + const AVClass *priv_class; ///< AVClass for the private context + const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} + +@@ -235,117 +228,10 @@ + */ + const char *wrapper_name; + +- /***************************************************************** +- * No fields below this line are part of the public API. They +- * may not be used outside of libavcodec and can be changed and +- * removed at will. +- * New public fields should be added right above. +- ***************************************************************** +- */ +- int priv_data_size; +-#if FF_API_NEXT +- struct AVCodec *next; +-#endif +- /** +- * @name Frame-level threading support functions +- * @{ +- */ +- /** +- * Copy necessary context variables from a previous thread context to the current one. +- * If not defined, the next thread will start automatically; otherwise, the codec +- * must call ff_thread_finish_setup(). +- * +- * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. +- */ +- int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); +- /** @} */ +- +- /** +- * Private codec-specific defaults. +- */ +- const AVCodecDefault *defaults; +- + /** +- * Initialize codec static data, called from av_codec_iterate(). +- * +- * This is not intended for time consuming operations as it is +- * run for every codec regardless of that codec being used. ++ * Array of supported channel layouts, terminated with a zeroed layout. + */ +- void (*init_static_data)(struct AVCodec *codec); +- +- int (*init)(struct AVCodecContext *); +- int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, +- const struct AVSubtitle *sub); +- /** +- * Encode data to an AVPacket. +- * +- * @param avctx codec context +- * @param avpkt output AVPacket +- * @param[in] frame AVFrame containing the raw data to be encoded +- * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a +- * non-empty packet was returned in avpkt. +- * @return 0 on success, negative error code on failure +- */ +- int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, +- const struct AVFrame *frame, int *got_packet_ptr); +- /** +- * Decode picture or subtitle data. +- * +- * @param avctx codec context +- * @param outdata codec type dependent output struct +- * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a +- * non-empty frame or subtitle was returned in +- * outdata. +- * @param[in] avpkt AVPacket containing the data to be decoded +- * @return amount of bytes read from the packet on success, negative error +- * code on failure +- */ +- int (*decode)(struct AVCodecContext *avctx, void *outdata, +- int *got_frame_ptr, struct AVPacket *avpkt); +- int (*close)(struct AVCodecContext *); +- /** +- * Encode API with decoupled frame/packet dataflow. This function is called +- * to get one output packet. It should call ff_encode_get_frame() to obtain +- * input data. +- */ +- int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); +- +- /** +- * Decode API with decoupled packet/frame dataflow. This function is called +- * to get one output frame. It should call ff_decode_get_packet() to obtain +- * input data. +- */ +- int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); +- /** +- * Flush buffers. +- * Will be called when seeking +- */ +- void (*flush)(struct AVCodecContext *); +- /** +- * Internal codec capabilities. +- * See FF_CODEC_CAP_* in internal.h +- */ +- int caps_internal; +- +- /** +- * Decoding only, a comma-separated list of bitstream filters to apply to +- * packets before decoding. +- */ +- const char *bsfs; +- +- /** +- * Array of pointers to hardware configurations supported by the codec, +- * or NULL if no hardware supported. The array is terminated by a NULL +- * pointer. +- * +- * The user can only access this field via avcodec_get_hw_config(). +- */ +- const struct AVCodecHWConfigInternal *const *hw_configs; +- +- /** +- * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. +- */ +- const uint32_t *codec_tags; ++ const AVChannelLayout *ch_layouts; + } AVCodec; + + /** +@@ -365,7 +251,7 @@ + * @param id AVCodecID of the requested decoder + * @return A decoder if one was found, NULL otherwise. + */ +-AVCodec *avcodec_find_decoder(enum AVCodecID id); ++const AVCodec *avcodec_find_decoder(enum AVCodecID id); + + /** + * Find a registered decoder with the specified name. +@@ -373,7 +259,7 @@ + * @param name name of the requested decoder + * @return A decoder if one was found, NULL otherwise. + */ +-AVCodec *avcodec_find_decoder_by_name(const char *name); ++const AVCodec *avcodec_find_decoder_by_name(const char *name); + + /** + * Find a registered encoder with a matching codec ID. +@@ -381,7 +267,7 @@ + * @param id AVCodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + */ +-AVCodec *avcodec_find_encoder(enum AVCodecID id); ++const AVCodec *avcodec_find_encoder(enum AVCodecID id); + + /** + * Find a registered encoder with the specified name. +@@ -389,7 +275,7 @@ + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + */ +-AVCodec *avcodec_find_encoder_by_name(const char *name); ++const AVCodec *avcodec_find_encoder_by_name(const char *name); + /** + * @return a non-zero number if codec is an encoder, zero otherwise + */ +@@ -400,6 +286,15 @@ + */ + int av_codec_is_decoder(const AVCodec *codec); + ++/** ++ * Return a name for the specified profile, if available. ++ * ++ * @param codec the codec that is searched for the given profile ++ * @param profile the profile value for which a name is requested ++ * @return A name for the profile if found, NULL otherwise. ++ */ ++const char *av_get_profile_name(const AVCodec *codec, int profile); ++ + enum { + /** + * The codec supports this format via the hw_device_ctx interface. +diff -Naur a/media/ffvpx/libavcodec/codec_id.h b/media/ffvpx/libavcodec/codec_id.h +--- a/media/ffvpx/libavcodec/codec_id.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec_id.h 2023-04-06 12:50:24.491176503 +0200 +@@ -24,6 +24,8 @@ + #include "libavutil/avutil.h" + #include "libavutil/samplefmt.h" + ++#include "version_major.h" ++ + /** + * @addtogroup lavc_core + * @{ +@@ -251,7 +253,9 @@ + AV_CODEC_ID_AVRP, + AV_CODEC_ID_012V, + AV_CODEC_ID_AVUI, ++#if FF_API_AYUV_CODECID + AV_CODEC_ID_AYUV, ++#endif + AV_CODEC_ID_TARGA_Y216, + AV_CODEC_ID_V308, + AV_CODEC_ID_V408, +@@ -308,6 +312,14 @@ + AV_CODEC_ID_SIMBIOSIS_IMX, + AV_CODEC_ID_SGA_VIDEO, + AV_CODEC_ID_GEM, ++ AV_CODEC_ID_VBN, ++ AV_CODEC_ID_JPEGXL, ++ AV_CODEC_ID_QOI, ++ AV_CODEC_ID_PHM, ++ AV_CODEC_ID_RADIANCE_HDR, ++ AV_CODEC_ID_WBMP, ++ AV_CODEC_ID_MEDIA100, ++ AV_CODEC_ID_VQC, + + /* various PCM "codecs" */ + AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs +@@ -401,6 +413,7 @@ + AV_CODEC_ID_ADPCM_IMA_CUNNING, + AV_CODEC_ID_ADPCM_IMA_MOFLEX, + AV_CODEC_ID_ADPCM_IMA_ACORN, ++ AV_CODEC_ID_ADPCM_XMD, + + /* AMR */ + AV_CODEC_ID_AMR_NB = 0x12000, +@@ -418,6 +431,8 @@ + AV_CODEC_ID_SDX2_DPCM, + AV_CODEC_ID_GREMLIN_DPCM, + AV_CODEC_ID_DERF_DPCM, ++ AV_CODEC_ID_WADY_DPCM, ++ AV_CODEC_ID_CBD2_DPCM, + + /* audio codecs */ + AV_CODEC_ID_MP2 = 0x15000, +@@ -516,6 +531,13 @@ + AV_CODEC_ID_HCA, + AV_CODEC_ID_FASTAUDIO, + AV_CODEC_ID_MSNSIREN, ++ AV_CODEC_ID_DFPWM, ++ AV_CODEC_ID_BONK, ++ AV_CODEC_ID_MISC4, ++ AV_CODEC_ID_APAC, ++ AV_CODEC_ID_FTR, ++ AV_CODEC_ID_WAVARC, ++ AV_CODEC_ID_RKA, + + /* subtitle codecs */ + AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. +@@ -570,6 +592,16 @@ + * stream (only used by libavformat) */ + AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. + AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket ++ /** ++ * Dummy null video codec, useful mainly for development and debugging. ++ * Null encoder/decoder discard all input and never return any output. ++ */ ++ AV_CODEC_ID_VNULL, ++ /** ++ * Dummy null audio codec, useful mainly for development and debugging. ++ * Null encoder/decoder discard all input and never return any output. ++ */ ++ AV_CODEC_ID_ANULL, + }; + + /** +diff -Naur a/media/ffvpx/libavcodec/codec_internal.h b/media/ffvpx/libavcodec/codec_internal.h +--- a/media/ffvpx/libavcodec/codec_internal.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec_internal.h 2023-04-06 12:50:24.491176503 +0200 +@@ -0,0 +1,330 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVCODEC_CODEC_INTERNAL_H ++#define AVCODEC_CODEC_INTERNAL_H ++ ++#include ++ ++#include "libavutil/attributes.h" ++#include "codec.h" ++#include "config.h" ++ ++/** ++ * The codec is not known to be init-threadsafe (i.e. it might be unsafe ++ * to initialize this codec and another codec concurrently, typically because ++ * the codec calls external APIs that are not known to be thread-safe). ++ * Therefore calling the codec's init function needs to be guarded with a lock. ++ */ ++#define FF_CODEC_CAP_NOT_INIT_THREADSAFE (1 << 0) ++/** ++ * The codec allows calling the close function for deallocation even if ++ * the init function returned a failure. Without this capability flag, a ++ * codec does such cleanup internally when returning failures from the ++ * init function and does not expect the close function to be called at ++ * all. ++ */ ++#define FF_CODEC_CAP_INIT_CLEANUP (1 << 1) ++/** ++ * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set ++ * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite ++ * this field. If it's unset, decode.c tries to guess the pkt_dts field ++ * from the input AVPacket. ++ */ ++#define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2) ++/** ++ * The decoder extracts and fills its parameters even if the frame is ++ * skipped due to the skip_frame setting. ++ */ ++#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3) ++/** ++ * The decoder sets the cropping fields in the output frames manually. ++ * If this cap is set, the generic code will initialize output frame ++ * dimensions to coded rather than display values. ++ */ ++#define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4) ++/** ++ * Codec initializes slice-based threading with a main function ++ */ ++#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5) ++/* ++ * The codec supports frame threading and has inter-frame dependencies, so it ++ * uses ff_thread_report/await_progress(). ++ */ ++#define FF_CODEC_CAP_ALLOCATE_PROGRESS (1 << 6) ++/** ++ * Codec handles avctx->thread_count == 0 (auto) internally. ++ */ ++#define FF_CODEC_CAP_AUTO_THREADS (1 << 7) ++/** ++ * Codec handles output frame properties internally instead of letting the ++ * internal logic derive them from AVCodecInternal.last_pkt_props. ++ */ ++#define FF_CODEC_CAP_SETS_FRAME_PROPS (1 << 8) ++/** ++ * Codec supports embedded ICC profiles (AV_FRAME_DATA_ICC_PROFILE). ++ */ ++#define FF_CODEC_CAP_ICC_PROFILES (1 << 9) ++/** ++ * The encoder has AV_CODEC_CAP_DELAY set, but does not actually have delay - it ++ * only wants to be flushed at the end to update some context variables (e.g. ++ * 2pass stats) or produce a trailing packet. Besides that it immediately ++ * produces exactly one output packet per each input frame, just as no-delay ++ * encoders do. ++ */ ++#define FF_CODEC_CAP_EOF_FLUSH (1 << 10) ++ ++/** ++ * FFCodec.codec_tags termination value ++ */ ++#define FF_CODEC_TAGS_END -1 ++ ++typedef struct FFCodecDefault { ++ const char *key; ++ const char *value; ++} FFCodecDefault; ++ ++struct AVCodecContext; ++struct AVSubtitle; ++struct AVPacket; ++ ++enum FFCodecType { ++ /* The codec is a decoder using the decode callback; ++ * audio and video codecs only. */ ++ FF_CODEC_CB_TYPE_DECODE, ++ /* The codec is a decoder using the decode_sub callback; ++ * subtitle codecs only. */ ++ FF_CODEC_CB_TYPE_DECODE_SUB, ++ /* The codec is a decoder using the receive_frame callback; ++ * audio and video codecs only. */ ++ FF_CODEC_CB_TYPE_RECEIVE_FRAME, ++ /* The codec is an encoder using the encode callback; ++ * audio and video codecs only. */ ++ FF_CODEC_CB_TYPE_ENCODE, ++ /* The codec is an encoder using the encode_sub callback; ++ * subtitle codecs only. */ ++ FF_CODEC_CB_TYPE_ENCODE_SUB, ++ /* The codec is an encoder using the receive_packet callback; ++ * audio and video codecs only. */ ++ FF_CODEC_CB_TYPE_RECEIVE_PACKET, ++}; ++ ++typedef struct FFCodec { ++ /** ++ * The public AVCodec. See codec.h for it. ++ */ ++ AVCodec p; ++ ++ /** ++ * Internal codec capabilities FF_CODEC_CAP_*. ++ */ ++ unsigned caps_internal:29; ++ ++ /** ++ * This field determines the type of the codec (decoder/encoder) ++ * and also the exact callback cb implemented by the codec. ++ * cb_type uses enum FFCodecType values. ++ */ ++ unsigned cb_type:3; ++ ++ int priv_data_size; ++ /** ++ * @name Frame-level threading support functions ++ * @{ ++ */ ++ /** ++ * Copy necessary context variables from a previous thread context to the current one. ++ * If not defined, the next thread will start automatically; otherwise, the codec ++ * must call ff_thread_finish_setup(). ++ * ++ * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. ++ */ ++ int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); ++ ++ /** ++ * Copy variables back to the user-facing context ++ */ ++ int (*update_thread_context_for_user)(struct AVCodecContext *dst, const struct AVCodecContext *src); ++ /** @} */ ++ ++ /** ++ * Private codec-specific defaults. ++ */ ++ const FFCodecDefault *defaults; ++ ++ /** ++ * Initialize codec static data, called from av_codec_iterate(). ++ * ++ * This is not intended for time consuming operations as it is ++ * run for every codec regardless of that codec being used. ++ */ ++ void (*init_static_data)(struct FFCodec *codec); ++ ++ int (*init)(struct AVCodecContext *); ++ ++ union { ++ /** ++ * Decode to an AVFrame. ++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE. ++ * ++ * @param avctx codec context ++ * @param[out] frame AVFrame for output ++ * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that ++ * a non-empty frame was returned in frame. ++ * @param[in] avpkt AVPacket containing the data to be decoded ++ * @return amount of bytes read from the packet on success, ++ * negative error code on failure ++ */ ++ int (*decode)(struct AVCodecContext *avctx, struct AVFrame *frame, ++ int *got_frame_ptr, struct AVPacket *avpkt); ++ /** ++ * Decode subtitle data to an AVSubtitle. ++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE_SUB. ++ * ++ * Apart from that this is like the decode callback. ++ */ ++ int (*decode_sub)(struct AVCodecContext *avctx, struct AVSubtitle *sub, ++ int *got_frame_ptr, const struct AVPacket *avpkt); ++ /** ++ * Decode API with decoupled packet/frame dataflow. ++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_FRAME. ++ * ++ * This function is called to get one output frame. It should call ++ * ff_decode_get_packet() to obtain input data. ++ */ ++ int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); ++ /** ++ * Encode data to an AVPacket. ++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE ++ * ++ * @param avctx codec context ++ * @param[out] avpkt output AVPacket ++ * @param[in] frame AVFrame containing the input to be encoded ++ * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a ++ * non-empty packet was returned in avpkt. ++ * @return 0 on success, negative error code on failure ++ */ ++ int (*encode)(struct AVCodecContext *avctx, struct AVPacket *avpkt, ++ const struct AVFrame *frame, int *got_packet_ptr); ++ /** ++ * Encode subtitles to a raw buffer. ++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE_SUB. ++ */ ++ int (*encode_sub)(struct AVCodecContext *avctx, uint8_t *buf, ++ int buf_size, const struct AVSubtitle *sub); ++ /** ++ * Encode API with decoupled frame/packet dataflow. ++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_PACKET. ++ * ++ * This function is called to get one output packet. ++ * It should call ff_encode_get_frame() to obtain input data. ++ */ ++ int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); ++ } cb; ++ ++ int (*close)(struct AVCodecContext *); ++ ++ /** ++ * Flush buffers. ++ * Will be called when seeking ++ */ ++ void (*flush)(struct AVCodecContext *); ++ ++ /** ++ * Decoding only, a comma-separated list of bitstream filters to apply to ++ * packets before decoding. ++ */ ++ const char *bsfs; ++ ++ /** ++ * Array of pointers to hardware configurations supported by the codec, ++ * or NULL if no hardware supported. The array is terminated by a NULL ++ * pointer. ++ * ++ * The user can only access this field via avcodec_get_hw_config(). ++ */ ++ const struct AVCodecHWConfigInternal *const *hw_configs; ++ ++ /** ++ * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. ++ */ ++ const uint32_t *codec_tags; ++} FFCodec; ++ ++#if CONFIG_SMALL ++#define CODEC_LONG_NAME(str) .p.long_name = NULL ++#else ++#define CODEC_LONG_NAME(str) .p.long_name = str ++#endif ++ ++#if HAVE_THREADS ++#define UPDATE_THREAD_CONTEXT(func) \ ++ .update_thread_context = (func) ++#define UPDATE_THREAD_CONTEXT_FOR_USER(func) \ ++ .update_thread_context_for_user = (func) ++#else ++#define UPDATE_THREAD_CONTEXT(func) \ ++ .update_thread_context = NULL ++#define UPDATE_THREAD_CONTEXT_FOR_USER(func) \ ++ .update_thread_context_for_user = NULL ++#endif ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++#define CODEC_OLD_CHANNEL_LAYOUTS(...) CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(((const uint64_t[]) { __VA_ARGS__, 0 })) ++#if defined(__clang__) ++#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) \ ++ FF_DISABLE_DEPRECATION_WARNINGS \ ++ .p.channel_layouts = (array), \ ++ FF_ENABLE_DEPRECATION_WARNINGS ++#else ++#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) .p.channel_layouts = (array), ++#endif ++#else ++/* This is only provided to allow to test disabling FF_API_OLD_CHANNEL_LAYOUT ++ * without removing all the FF_API_OLD_CHANNEL_LAYOUT codeblocks. ++ * It is of course still expected to be removed when FF_API_OLD_CHANNEL_LAYOUT ++ * will be finally removed (along with all usages of these macros). */ ++#define CODEC_OLD_CHANNEL_LAYOUTS(...) ++#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) ++#endif ++ ++#define FF_CODEC_DECODE_CB(func) \ ++ .cb_type = FF_CODEC_CB_TYPE_DECODE, \ ++ .cb.decode = (func) ++#define FF_CODEC_DECODE_SUB_CB(func) \ ++ .cb_type = FF_CODEC_CB_TYPE_DECODE_SUB, \ ++ .cb.decode_sub = (func) ++#define FF_CODEC_RECEIVE_FRAME_CB(func) \ ++ .cb_type = FF_CODEC_CB_TYPE_RECEIVE_FRAME, \ ++ .cb.receive_frame = (func) ++#define FF_CODEC_ENCODE_CB(func) \ ++ .cb_type = FF_CODEC_CB_TYPE_ENCODE, \ ++ .cb.encode = (func) ++#define FF_CODEC_ENCODE_SUB_CB(func) \ ++ .cb_type = FF_CODEC_CB_TYPE_ENCODE_SUB, \ ++ .cb.encode_sub = (func) ++#define FF_CODEC_RECEIVE_PACKET_CB(func) \ ++ .cb_type = FF_CODEC_CB_TYPE_RECEIVE_PACKET, \ ++ .cb.receive_packet = (func) ++ ++static av_always_inline const FFCodec *ffcodec(const AVCodec *codec) ++{ ++ return (const FFCodec*)codec; ++} ++ ++#endif /* AVCODEC_CODEC_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavcodec/codec_list.c b/media/ffvpx/libavcodec/codec_list.c +--- a/media/ffvpx/libavcodec/codec_list.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec_list.c 2023-04-06 12:49:45.617610966 +0200 +@@ -1,4 +1,4 @@ +-static const AVCodec * const codec_list[] = { ++static const FFCodec * const codec_list[] = { + #if CONFIG_VP8_DECODER + &ff_vp8_decoder, + #endif +diff -Naur a/media/ffvpx/libavcodec/codec_par.c b/media/ffvpx/libavcodec/codec_par.c +--- a/media/ffvpx/libavcodec/codec_par.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec_par.c 2023-04-06 12:49:40.252394850 +0200 +@@ -31,12 +31,14 @@ + static void codec_parameters_reset(AVCodecParameters *par) + { + av_freep(&par->extradata); ++ av_channel_layout_uninit(&par->ch_layout); + + memset(par, 0, sizeof(*par)); + + par->codec_type = AVMEDIA_TYPE_UNKNOWN; + par->codec_id = AV_CODEC_ID_NONE; + par->format = -1; ++ par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; + par->field_order = AV_FIELD_UNKNOWN; + par->color_range = AVCOL_RANGE_UNSPECIFIED; + par->color_primaries = AVCOL_PRI_UNSPECIFIED; +@@ -71,9 +73,12 @@ + + int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src) + { ++ int ret; ++ + codec_parameters_reset(dst); + memcpy(dst, src, sizeof(*dst)); + ++ dst->ch_layout = (AVChannelLayout){0}; + dst->extradata = NULL; + dst->extradata_size = 0; + if (src->extradata) { +@@ -84,12 +89,18 @@ + dst->extradata_size = src->extradata_size; + } + ++ ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); ++ if (ret < 0) ++ return ret; ++ + return 0; + } + + int avcodec_parameters_from_context(AVCodecParameters *par, + const AVCodecContext *codec) + { ++ int ret; ++ + codec_parameters_reset(par); + + par->codec_type = codec->codec_type; +@@ -118,8 +129,32 @@ + break; + case AVMEDIA_TYPE_AUDIO: + par->format = codec->sample_fmt; +- par->channel_layout = codec->channel_layout; +- par->channels = codec->channels; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ // if the old/new fields are set inconsistently, prefer the old ones ++ if ((codec->channels && codec->channels != codec->ch_layout.nb_channels) || ++ (codec->channel_layout && (codec->ch_layout.order != AV_CHANNEL_ORDER_NATIVE || ++ codec->ch_layout.u.mask != codec->channel_layout))) { ++ if (codec->channel_layout) ++ av_channel_layout_from_mask(&par->ch_layout, codec->channel_layout); ++ else { ++ par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; ++ par->ch_layout.nb_channels = codec->channels; ++ } ++FF_ENABLE_DEPRECATION_WARNINGS ++ } else { ++#endif ++ ret = av_channel_layout_copy(&par->ch_layout, &codec->ch_layout); ++ if (ret < 0) ++ return ret; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ } ++ par->channel_layout = par->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? ++ par->ch_layout.u.mask : 0; ++ par->channels = par->ch_layout.nb_channels; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + par->sample_rate = codec->sample_rate; + par->block_align = codec->block_align; + par->frame_size = codec->frame_size; +@@ -147,6 +182,8 @@ + int avcodec_parameters_to_context(AVCodecContext *codec, + const AVCodecParameters *par) + { ++ int ret; ++ + codec->codec_type = par->codec_type; + codec->codec_id = par->codec_id; + codec->codec_tag = par->codec_tag; +@@ -173,8 +210,32 @@ + break; + case AVMEDIA_TYPE_AUDIO: + codec->sample_fmt = par->format; +- codec->channel_layout = par->channel_layout; +- codec->channels = par->channels; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ // if the old/new fields are set inconsistently, prefer the old ones ++ if ((par->channels && par->channels != par->ch_layout.nb_channels) || ++ (par->channel_layout && (par->ch_layout.order != AV_CHANNEL_ORDER_NATIVE || ++ par->ch_layout.u.mask != par->channel_layout))) { ++ if (par->channel_layout) ++ av_channel_layout_from_mask(&codec->ch_layout, par->channel_layout); ++ else { ++ codec->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; ++ codec->ch_layout.nb_channels = par->channels; ++ } ++FF_ENABLE_DEPRECATION_WARNINGS ++ } else { ++#endif ++ ret = av_channel_layout_copy(&codec->ch_layout, &par->ch_layout); ++ if (ret < 0) ++ return ret; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ } ++ codec->channel_layout = codec->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? ++ codec->ch_layout.u.mask : 0; ++ codec->channels = codec->ch_layout.nb_channels; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + codec->sample_rate = par->sample_rate; + codec->block_align = par->block_align; + codec->frame_size = par->frame_size; +diff -Naur a/media/ffvpx/libavcodec/codec_par.h b/media/ffvpx/libavcodec/codec_par.h +--- a/media/ffvpx/libavcodec/codec_par.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/codec_par.h 2023-04-06 12:50:06.971471053 +0200 +@@ -24,6 +24,7 @@ + #include + + #include "libavutil/avutil.h" ++#include "libavutil/channel_layout.h" + #include "libavutil/rational.h" + #include "libavutil/pixfmt.h" + +@@ -31,15 +32,16 @@ + + /** + * @addtogroup lavc_core ++ * @{ + */ + + enum AVFieldOrder { + AV_FIELD_UNKNOWN, + AV_FIELD_PROGRESSIVE, +- AV_FIELD_TT, //< Top coded_first, top displayed first +- AV_FIELD_BB, //< Bottom coded first, bottom displayed first +- AV_FIELD_TB, //< Top coded first, bottom displayed first +- AV_FIELD_BT, //< Bottom coded first, top displayed first ++ AV_FIELD_TT, ///< Top coded_first, top displayed first ++ AV_FIELD_BB, ///< Bottom coded first, bottom displayed first ++ AV_FIELD_TB, ///< Top coded first, bottom displayed first ++ AV_FIELD_BT, ///< Bottom coded first, top displayed first + }; + + /** +@@ -154,16 +156,22 @@ + */ + int video_delay; + ++#if FF_API_OLD_CHANNEL_LAYOUT + /** + * Audio only. The channel layout bitmask. May be 0 if the channel layout is + * unknown or unspecified, otherwise the number of bits set must be equal to + * the channels field. ++ * @deprecated use ch_layout + */ ++ attribute_deprecated + uint64_t channel_layout; + /** + * Audio only. The number of audio channels. ++ * @deprecated use ch_layout.nb_channels + */ ++ attribute_deprecated + int channels; ++#endif + /** + * Audio only. The number of audio samples per second. + */ +@@ -198,6 +206,11 @@ + * Audio only. Number of samples to skip after a discontinuity. + */ + int seek_preroll; ++ ++ /** ++ * Audio only. The channel layout and number of channels. ++ */ ++ AVChannelLayout ch_layout; + } AVCodecParameters; + + /** +diff -Naur a/media/ffvpx/libavcodec/dct.c b/media/ffvpx/libavcodec/dct.c +--- a/media/ffvpx/libavcodec/dct.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/dct.c 2023-04-06 12:49:40.252394850 +0200 +@@ -30,7 +30,9 @@ + #include + #include + ++#include "libavutil/error.h" + #include "libavutil/mathematics.h" ++#include "libavutil/mem.h" + #include "dct.h" + #include "dct32.h" + +@@ -212,8 +214,9 @@ + } + + s->dct32 = ff_dct32_float; +- if (ARCH_X86) +- ff_dct_init_x86(s); ++#if ARCH_X86 ++ ff_dct_init_x86(s); ++#endif + + return 0; + } +diff -Naur a/media/ffvpx/libavcodec/decode.c b/media/ffvpx/libavcodec/decode.c +--- a/media/ffvpx/libavcodec/decode.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/decode.c 2023-04-06 12:50:24.491176503 +0200 +@@ -30,7 +30,9 @@ + #include "libavutil/avassert.h" + #include "libavutil/avstring.h" + #include "libavutil/bprint.h" ++#include "libavutil/channel_layout.h" + #include "libavutil/common.h" ++#include "libavutil/fifo.h" + #include "libavutil/frame.h" + #include "libavutil/hwcontext.h" + #include "libavutil/imgutils.h" +@@ -40,34 +42,17 @@ + + #include "avcodec.h" + #include "bytestream.h" ++#include "bsf.h" ++#include "codec_internal.h" + #include "decode.h" + #include "hwconfig.h" + #include "internal.h" + #include "thread.h" + +-typedef struct FramePool { +- /** +- * Pools for each data plane. For audio all the planes have the same size, +- * so only pools[0] is used. +- */ +- AVBufferPool *pools[4]; +- +- /* +- * Pool parameters +- */ +- int format; +- int width, height; +- int stride_align[AV_NUM_DATA_POINTERS]; +- int linesize[4]; +- int planes; +- int channels; +- int samples; +-} FramePool; +- + static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt) + { + int ret; +- buffer_size_t size; ++ size_t size; + const uint8_t *data; + uint32_t flags; + int64_t val; +@@ -89,6 +74,8 @@ + flags = bytestream_get_le32(&data); + size -= 4; + ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) { + if (size < 4) + goto fail; +@@ -107,6 +94,8 @@ + avctx->channel_layout = bytestream_get_le64(&data); + size -= 8; + } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) { + if (size < 4) + goto fail; +@@ -143,59 +132,31 @@ + return 0; + } + +-#define IS_EMPTY(pkt) (!(pkt)->data) +- +-static int copy_packet_props(AVPacket *dst, const AVPacket *src) +-{ +- int ret = av_packet_copy_props(dst, src); +- if (ret < 0) +- return ret; +- +- dst->size = src->size; // HACK: Needed for ff_decode_frame_props(). +- dst->data = (void*)1; // HACK: Needed for IS_EMPTY(). +- +- return 0; +-} +- + static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt) + { +- AVPacket tmp = { 0 }; + int ret = 0; + +- if (IS_EMPTY(avci->last_pkt_props)) { +- if (av_fifo_size(avci->pkt_props) >= sizeof(*pkt)) { +- av_fifo_generic_read(avci->pkt_props, avci->last_pkt_props, +- sizeof(*avci->last_pkt_props), NULL); +- } else +- return copy_packet_props(avci->last_pkt_props, pkt); +- } +- +- if (av_fifo_space(avci->pkt_props) < sizeof(*pkt)) { +- ret = av_fifo_grow(avci->pkt_props, sizeof(*pkt)); +- if (ret < 0) +- return ret; ++ av_packet_unref(avci->last_pkt_props); ++ if (pkt) { ++ ret = av_packet_copy_props(avci->last_pkt_props, pkt); ++ if (!ret) ++ avci->last_pkt_props->opaque = (void *)(intptr_t)pkt->size; // Needed for ff_decode_frame_props(). + } +- +- ret = copy_packet_props(&tmp, pkt); +- if (ret < 0) +- return ret; +- +- av_fifo_generic_write(avci->pkt_props, &tmp, sizeof(tmp), NULL); +- +- return 0; ++ return ret; + } + + static int decode_bsfs_init(AVCodecContext *avctx) + { + AVCodecInternal *avci = avctx->internal; ++ const FFCodec *const codec = ffcodec(avctx->codec); + int ret; + + if (avci->bsf) + return 0; + +- ret = av_bsf_list_parse_str(avctx->codec->bsfs, &avci->bsf); ++ ret = av_bsf_list_parse_str(codec->bsfs, &avci->bsf); + if (ret < 0) { +- av_log(avctx, AV_LOG_ERROR, "Error parsing decoder bitstream filters '%s': %s\n", avctx->codec->bsfs, av_err2str(ret)); ++ av_log(avctx, AV_LOG_ERROR, "Error parsing decoder bitstream filters '%s': %s\n", codec->bsfs, av_err2str(ret)); + if (ret != AVERROR(ENOMEM)) + ret = AVERROR_BUG; + goto fail; +@@ -233,7 +194,7 @@ + if (ret < 0) + return ret; + +- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { ++ if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { + ret = extract_packet_props(avctx->internal, pkt); + if (ret < 0) + goto finish; +@@ -243,11 +204,6 @@ + if (ret < 0) + goto finish; + +-#if FF_API_OLD_ENCDEC +- if (avctx->codec->receive_frame) +- avci->compat_decode_consumed += pkt->size; +-#endif +- + return 0; + finish: + av_packet_unref(pkt); +@@ -299,8 +255,8 @@ + static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, int64_t *discarded_samples) + { + AVCodecInternal *avci = avctx->internal; +- DecodeSimpleContext *ds = &avci->ds; +- AVPacket *pkt = ds->in_pkt; ++ AVPacket *const pkt = avci->in_pkt; ++ const FFCodec *const codec = ffcodec(avctx->codec); + int got_frame, actual_got_frame; + int ret; + +@@ -326,9 +282,9 @@ + if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) { + ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt); + } else { +- ret = avctx->codec->decode(avctx, frame, &got_frame, pkt); ++ ret = codec->cb.decode(avctx, frame, &got_frame, pkt); + +- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) ++ if (!(codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) + frame->pkt_dts = pkt->dts; + if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { + if(!avctx->has_b_frames) +@@ -351,7 +307,7 @@ + got_frame = 0; + } else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { + uint8_t *side; +- buffer_size_t side_size; ++ size_t side_size; + uint32_t discard_padding = 0; + uint8_t skip_reason = 0; + uint8_t discard_reason = 0; +@@ -359,17 +315,30 @@ + if (ret >= 0 && got_frame) { + if (frame->format == AV_SAMPLE_FMT_NONE) + frame->format = avctx->sample_fmt; ++ if (!frame->ch_layout.nb_channels) { ++ int ret2 = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); ++ if (ret2 < 0) { ++ ret = ret2; ++ got_frame = 0; ++ } ++ } ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + if (!frame->channel_layout) +- frame->channel_layout = avctx->channel_layout; ++ frame->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? ++ avctx->ch_layout.u.mask : 0; + if (!frame->channels) +- frame->channels = avctx->channels; ++ frame->channels = avctx->ch_layout.nb_channels; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + if (!frame->sample_rate) + frame->sample_rate = avctx->sample_rate; + } + + side= av_packet_get_side_data(avci->last_pkt_props, AV_PKT_DATA_SKIP_SAMPLES, &side_size); + if(side && side_size>=10) { +- avci->skip_samples = AV_RL32(side) * avci->skip_samples_multiplier; ++ avci->skip_samples = AV_RL32(side); ++ avci->skip_samples = FFMAX(0, avci->skip_samples); + discard_padding = AV_RL32(side + 4); + av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n", + avci->skip_samples, (int)discard_padding); +@@ -394,23 +363,17 @@ + avci->skip_samples); + } else { + av_samples_copy(frame->extended_data, frame->extended_data, 0, avci->skip_samples, +- frame->nb_samples - avci->skip_samples, avctx->channels, frame->format); ++ frame->nb_samples - avci->skip_samples, avctx->ch_layout.nb_channels, frame->format); + if(avctx->pkt_timebase.num && avctx->sample_rate) { + int64_t diff_ts = av_rescale_q(avci->skip_samples, + (AVRational){1, avctx->sample_rate}, + avctx->pkt_timebase); + if(frame->pts!=AV_NOPTS_VALUE) + frame->pts += diff_ts; +-#if FF_API_PKT_PTS +-FF_DISABLE_DEPRECATION_WARNINGS +- if(frame->pkt_pts!=AV_NOPTS_VALUE) +- frame->pkt_pts += diff_ts; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + if(frame->pkt_dts!=AV_NOPTS_VALUE) + frame->pkt_dts += diff_ts; +- if (frame->pkt_duration >= diff_ts) +- frame->pkt_duration -= diff_ts; ++ if (frame->duration >= diff_ts) ++ frame->duration -= diff_ts; + } else { + av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n"); + } +@@ -432,7 +395,7 @@ + int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding, + (AVRational){1, avctx->sample_rate}, + avctx->pkt_timebase); +- frame->pkt_duration = diff_ts; ++ frame->duration = diff_ts; + } else { + av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n"); + } +@@ -464,14 +427,9 @@ + if (!got_frame) + av_frame_unref(frame); + +- if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO && !(avctx->flags & AV_CODEC_FLAG_TRUNCATED)) ++ if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO) + ret = pkt->size; + +-#if FF_API_AVCTX_TIMEBASE +- if (avctx->framerate.num > 0 && avctx->framerate.den > 0) +- avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); +-#endif +- + /* do not stop draining when actual_got_frame != 0 or ret < 0 */ + /* got_frame == 0 but actual_got_frame != 0 when frame is discarded */ + if (avci->draining && !actual_got_frame) { +@@ -492,13 +450,8 @@ + } + } + +-#if FF_API_OLD_ENCDEC +- avci->compat_decode_consumed += ret; +-#endif +- + if (ret >= pkt->size || ret < 0) { + av_packet_unref(pkt); +- av_packet_unref(avci->last_pkt_props); + } else { + int consumed = ret; + +@@ -506,8 +459,9 @@ + pkt->size -= consumed; + pkt->pts = AV_NOPTS_VALUE; + pkt->dts = AV_NOPTS_VALUE; +- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { +- avci->last_pkt_props->size -= consumed; // See extract_packet_props() comment. ++ if (!(codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { ++ // See extract_packet_props() comment. ++ avci->last_pkt_props->opaque = (void *)((intptr_t)avci->last_pkt_props->opaque - consumed); + avci->last_pkt_props->pts = AV_NOPTS_VALUE; + avci->last_pkt_props->dts = AV_NOPTS_VALUE; + } +@@ -519,6 +473,54 @@ + return ret < 0 ? ret : 0; + } + ++#if CONFIG_LCMS2 ++static int detect_colorspace(AVCodecContext *avctx, AVFrame *frame) ++{ ++ AVCodecInternal *avci = avctx->internal; ++ enum AVColorTransferCharacteristic trc; ++ AVColorPrimariesDesc coeffs; ++ enum AVColorPrimaries prim; ++ cmsHPROFILE profile; ++ AVFrameSideData *sd; ++ int ret; ++ if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES)) ++ return 0; ++ ++ sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE); ++ if (!sd || !sd->size) ++ return 0; ++ ++ if (!avci->icc.avctx) { ++ ret = ff_icc_context_init(&avci->icc, avctx); ++ if (ret < 0) ++ return ret; ++ } ++ ++ profile = cmsOpenProfileFromMemTHR(avci->icc.ctx, sd->data, sd->size); ++ if (!profile) ++ return AVERROR_INVALIDDATA; ++ ++ ret = ff_icc_profile_read_primaries(&avci->icc, profile, &coeffs); ++ if (!ret) ++ ret = ff_icc_profile_detect_transfer(&avci->icc, profile, &trc); ++ cmsCloseProfile(profile); ++ if (ret < 0) ++ return ret; ++ ++ prim = av_csp_primaries_id_from_desc(&coeffs); ++ if (prim != AVCOL_PRI_UNSPECIFIED) ++ frame->color_primaries = prim; ++ if (trc != AVCOL_TRC_UNSPECIFIED) ++ frame->color_trc = trc; ++ return 0; ++} ++#else /* !CONFIG_LCMS2 */ ++static int detect_colorspace(av_unused AVCodecContext *c, av_unused AVFrame *f) ++{ ++ return 0; ++} ++#endif ++ + static int decode_simple_receive_frame(AVCodecContext *avctx, AVFrame *frame) + { + int ret; +@@ -538,30 +540,37 @@ + static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) + { + AVCodecInternal *avci = avctx->internal; +- int ret; ++ const FFCodec *const codec = ffcodec(avctx->codec); ++ int ret, ok; + + av_assert0(!frame->buf[0]); + +- if (avctx->codec->receive_frame) { +- ret = avctx->codec->receive_frame(avctx, frame); +- if (ret != AVERROR(EAGAIN)) +- av_packet_unref(avci->last_pkt_props); ++ if (codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME) { ++ ret = codec->cb.receive_frame(avctx, frame); + } else + ret = decode_simple_receive_frame(avctx, frame); + + if (ret == AVERROR_EOF) + avci->draining_done = 1; + +- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS) && +- IS_EMPTY(avci->last_pkt_props) && av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) +- av_fifo_generic_read(avci->pkt_props, +- avci->last_pkt_props, sizeof(*avci->last_pkt_props), NULL); ++ /* preserve ret */ ++ ok = detect_colorspace(avctx, frame); ++ if (ok < 0) { ++ av_frame_unref(frame); ++ return ok; ++ } + + if (!ret) { + frame->best_effort_timestamp = guess_correct_pts(avctx, + frame->pts, + frame->pkt_dts); + ++#if FF_API_PKT_DURATION ++FF_DISABLE_DEPRECATION_WARNINGS ++ frame->pkt_duration = frame->duration; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ + /* the only case where decode data is not set should be decoders + * that do not call ff_get_buffer() */ + av_assert0((frame->private_ref && frame->private_ref->size == sizeof(FrameDecodeData)) || +@@ -649,13 +658,38 @@ + AV_FRAME_CROP_UNALIGNED : 0); + } + +-int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) ++// make sure frames returned to the caller are valid ++static int frame_validate(AVCodecContext *avctx, AVFrame *frame) ++{ ++ if (!frame->buf[0] || frame->format < 0) ++ goto fail; ++ ++ switch (avctx->codec_type) { ++ case AVMEDIA_TYPE_VIDEO: ++ if (frame->width <= 0 || frame->height <= 0) ++ goto fail; ++ break; ++ case AVMEDIA_TYPE_AUDIO: ++ if (!av_channel_layout_check(&frame->ch_layout) || ++ frame->sample_rate <= 0) ++ goto fail; ++ ++ break; ++ default: av_assert0(0); ++ } ++ ++ return 0; ++fail: ++ av_log(avctx, AV_LOG_ERROR, "An invalid frame was output by a decoder. " ++ "This is a bug, please report it.\n"); ++ return AVERROR_BUG; ++} ++ ++int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame) + { + AVCodecInternal *avci = avctx->internal; + int ret, changed; + +- av_frame_unref(frame); +- + if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec)) + return AVERROR(EINVAL); + +@@ -667,19 +701,26 @@ + return ret; + } + ++ ret = frame_validate(avctx, frame); ++ if (ret < 0) ++ goto fail; ++ + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + ret = apply_cropping(avctx, frame); +- if (ret < 0) { +- av_frame_unref(frame); +- return ret; +- } ++ if (ret < 0) ++ goto fail; + } + +- avctx->frame_number++; ++ avctx->frame_num++; ++#if FF_API_AVCTX_FRAME_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS ++ avctx->frame_number = avctx->frame_num; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + + if (avctx->flags & AV_CODEC_FLAG_DROPCHANGED) { + +- if (avctx->frame_number == 1) { ++ if (avctx->frame_num == 1) { + avci->initial_format = frame->format; + switch(avctx->codec_type) { + case AVMEDIA_TYPE_VIDEO: +@@ -689,13 +730,14 @@ + case AVMEDIA_TYPE_AUDIO: + avci->initial_sample_rate = frame->sample_rate ? frame->sample_rate : + avctx->sample_rate; +- avci->initial_channels = frame->channels; +- avci->initial_channel_layout = frame->channel_layout; ++ ret = av_channel_layout_copy(&avci->initial_ch_layout, &frame->ch_layout); ++ if (ret < 0) ++ goto fail; + break; + } + } + +- if (avctx->frame_number > 1) { ++ if (avctx->frame_num > 1) { + changed = avci->initial_format != frame->format; + + switch(avctx->codec_type) { +@@ -706,171 +748,27 @@ + case AVMEDIA_TYPE_AUDIO: + changed |= avci->initial_sample_rate != frame->sample_rate || + avci->initial_sample_rate != avctx->sample_rate || +- avci->initial_channels != frame->channels || +- avci->initial_channel_layout != frame->channel_layout; ++ av_channel_layout_compare(&avci->initial_ch_layout, &frame->ch_layout); + break; + } + + if (changed) { + avci->changed_frames_dropped++; +- av_log(avctx, AV_LOG_INFO, "dropped changed frame #%d pts %"PRId64 ++ av_log(avctx, AV_LOG_INFO, "dropped changed frame #%"PRId64" pts %"PRId64 + " drop count: %d \n", +- avctx->frame_number, frame->pts, ++ avctx->frame_num, frame->pts, + avci->changed_frames_dropped); +- av_frame_unref(frame); +- return AVERROR_INPUT_CHANGED; ++ ret = AVERROR_INPUT_CHANGED; ++ goto fail; + } + } + } + return 0; +-} +- +-#if FF_API_OLD_ENCDEC +-FF_DISABLE_DEPRECATION_WARNINGS +-static int unrefcount_frame(AVCodecInternal *avci, AVFrame *frame) +-{ +- int ret; +- +- /* move the original frame to our backup */ +- av_frame_unref(avci->to_free); +- av_frame_move_ref(avci->to_free, frame); +- +- /* now copy everything except the AVBufferRefs back +- * note that we make a COPY of the side data, so calling av_frame_free() on +- * the caller's frame will work properly */ +- ret = av_frame_copy_props(frame, avci->to_free); +- if (ret < 0) +- return ret; +- +- memcpy(frame->data, avci->to_free->data, sizeof(frame->data)); +- memcpy(frame->linesize, avci->to_free->linesize, sizeof(frame->linesize)); +- if (avci->to_free->extended_data != avci->to_free->data) { +- int planes = avci->to_free->channels; +- int size = planes * sizeof(*frame->extended_data); +- +- if (!size) { +- av_frame_unref(frame); +- return AVERROR_BUG; +- } +- +- frame->extended_data = av_malloc(size); +- if (!frame->extended_data) { +- av_frame_unref(frame); +- return AVERROR(ENOMEM); +- } +- memcpy(frame->extended_data, avci->to_free->extended_data, +- size); +- } else +- frame->extended_data = frame->data; +- +- frame->format = avci->to_free->format; +- frame->width = avci->to_free->width; +- frame->height = avci->to_free->height; +- frame->channel_layout = avci->to_free->channel_layout; +- frame->nb_samples = avci->to_free->nb_samples; +- frame->channels = avci->to_free->channels; +- +- return 0; +-} +- +-static int compat_decode(AVCodecContext *avctx, AVFrame *frame, +- int *got_frame, const AVPacket *pkt) +-{ +- AVCodecInternal *avci = avctx->internal; +- int ret = 0; +- +- av_assert0(avci->compat_decode_consumed == 0); +- +- if (avci->draining_done && pkt && pkt->size != 0) { +- av_log(avctx, AV_LOG_WARNING, "Got unexpected packet after EOF\n"); +- avcodec_flush_buffers(avctx); +- } +- +- *got_frame = 0; +- +- if (avci->compat_decode_partial_size > 0 && +- avci->compat_decode_partial_size != pkt->size) { +- av_log(avctx, AV_LOG_ERROR, +- "Got unexpected packet size after a partial decode\n"); +- ret = AVERROR(EINVAL); +- goto finish; +- } +- +- if (!avci->compat_decode_partial_size) { +- ret = avcodec_send_packet(avctx, pkt); +- if (ret == AVERROR_EOF) +- ret = 0; +- else if (ret == AVERROR(EAGAIN)) { +- /* we fully drain all the output in each decode call, so this should not +- * ever happen */ +- ret = AVERROR_BUG; +- goto finish; +- } else if (ret < 0) +- goto finish; +- } +- +- while (ret >= 0) { +- ret = avcodec_receive_frame(avctx, frame); +- if (ret < 0) { +- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) +- ret = 0; +- goto finish; +- } +- +- if (frame != avci->compat_decode_frame) { +- if (!avctx->refcounted_frames) { +- ret = unrefcount_frame(avci, frame); +- if (ret < 0) +- goto finish; +- } +- +- *got_frame = 1; +- frame = avci->compat_decode_frame; +- } else { +- if (!avci->compat_decode_warned) { +- av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_decode_* " +- "API cannot return all the frames for this decoder. " +- "Some frames will be dropped. Update your code to the " +- "new decoding API to fix this.\n"); +- avci->compat_decode_warned = 1; +- } +- } +- +- if (avci->draining || (!avctx->codec->bsfs && avci->compat_decode_consumed < pkt->size)) +- break; +- } +- +-finish: +- if (ret == 0) { +- /* if there are any bsfs then assume full packet is always consumed */ +- if (avctx->codec->bsfs) +- ret = pkt->size; +- else +- ret = FFMIN(avci->compat_decode_consumed, pkt->size); +- } +- avci->compat_decode_consumed = 0; +- avci->compat_decode_partial_size = (ret >= 0) ? pkt->size - ret : 0; +- ++fail: ++ av_frame_unref(frame); + return ret; + } + +-int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, +- int *got_picture_ptr, +- const AVPacket *avpkt) +-{ +- return compat_decode(avctx, picture, got_picture_ptr, avpkt); +-} +- +-int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, +- AVFrame *frame, +- int *got_frame_ptr, +- const AVPacket *avpkt) +-{ +- return compat_decode(avctx, frame, got_frame_ptr, avpkt); +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + static void get_subtitle_defaults(AVSubtitle *sub) + { + memset(sub, 0, sizeof(*sub)); +@@ -878,8 +776,8 @@ + } + + #define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */ +-static int recode_subtitle(AVCodecContext *avctx, AVPacket **outpkt, +- AVPacket *inpkt, AVPacket *buf_pkt) ++static int recode_subtitle(AVCodecContext *avctx, const AVPacket **outpkt, ++ const AVPacket *inpkt, AVPacket *buf_pkt) + { + #if CONFIG_ICONV + iconv_t cd = (iconv_t)-1; +@@ -958,82 +856,8 @@ + return 1; + } + +-#if FF_API_ASS_TIMING +-static void insert_ts(AVBPrint *buf, int ts) +-{ +- if (ts == -1) { +- av_bprintf(buf, "9:59:59.99,"); +- } else { +- int h, m, s; +- +- h = ts/360000; ts -= 360000*h; +- m = ts/ 6000; ts -= 6000*m; +- s = ts/ 100; ts -= 100*s; +- av_bprintf(buf, "%d:%02d:%02d.%02d,", h, m, s, ts); +- } +-} +- +-static int convert_sub_to_old_ass_form(AVSubtitle *sub, const AVPacket *pkt, AVRational tb) +-{ +- int i; +- AVBPrint buf; +- +- av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); +- +- for (i = 0; i < sub->num_rects; i++) { +- char *final_dialog; +- const char *dialog; +- AVSubtitleRect *rect = sub->rects[i]; +- int ts_start, ts_duration = -1; +- long int layer; +- +- if (rect->type != SUBTITLE_ASS || !strncmp(rect->ass, "Dialogue: ", 10)) +- continue; +- +- av_bprint_clear(&buf); +- +- /* skip ReadOrder */ +- dialog = strchr(rect->ass, ','); +- if (!dialog) +- continue; +- dialog++; +- +- /* extract Layer or Marked */ +- layer = strtol(dialog, (char**)&dialog, 10); +- if (*dialog != ',') +- continue; +- dialog++; +- +- /* rescale timing to ASS time base (ms) */ +- ts_start = av_rescale_q(pkt->pts, tb, av_make_q(1, 100)); +- if (pkt->duration != -1) +- ts_duration = av_rescale_q(pkt->duration, tb, av_make_q(1, 100)); +- sub->end_display_time = FFMAX(sub->end_display_time, 10 * ts_duration); +- +- /* construct ASS (standalone file form with timestamps) string */ +- av_bprintf(&buf, "Dialogue: %ld,", layer); +- insert_ts(&buf, ts_start); +- insert_ts(&buf, ts_duration == -1 ? -1 : ts_start + ts_duration); +- av_bprintf(&buf, "%s\r\n", dialog); +- +- final_dialog = av_strdup(buf.str); +- if (!av_bprint_is_complete(&buf) || !final_dialog) { +- av_freep(&final_dialog); +- av_bprint_finalize(&buf, NULL); +- return AVERROR(ENOMEM); +- } +- av_freep(&rect->ass); +- rect->ass = final_dialog; +- } +- +- av_bprint_finalize(&buf, NULL); +- return 0; +-} +-#endif +- + int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, +- int *got_sub_ptr, +- AVPacket *avpkt) ++ int *got_sub_ptr, const AVPacket *avpkt) + { + int ret = 0; + +@@ -1053,7 +877,7 @@ + + if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) { + AVCodecInternal *avci = avctx->internal; +- AVPacket *pkt; ++ const AVPacket *pkt; + + ret = recode_subtitle(avctx, &pkt, avpkt, avci->buffer_pkt); + if (ret < 0) +@@ -1062,20 +886,15 @@ + if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE) + sub->pts = av_rescale_q(avpkt->pts, + avctx->pkt_timebase, AV_TIME_BASE_Q); +- ret = avctx->codec->decode(avctx, sub, got_sub_ptr, pkt); +- av_assert1((ret >= 0) >= !!*got_sub_ptr && +- !!*got_sub_ptr >= !!sub->num_rects); +- +-#if FF_API_ASS_TIMING +- if (avctx->sub_text_format == FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS +- && *got_sub_ptr && sub->num_rects) { +- const AVRational tb = avctx->pkt_timebase.num ? avctx->pkt_timebase +- : avctx->time_base; +- int err = convert_sub_to_old_ass_form(sub, avpkt, tb); +- if (err < 0) +- ret = err; ++ ret = ffcodec(avctx->codec)->cb.decode_sub(avctx, sub, got_sub_ptr, pkt); ++ if (pkt == avci->buffer_pkt) // did we recode? ++ av_packet_unref(avci->buffer_pkt); ++ if (ret < 0) { ++ *got_sub_ptr = 0; ++ avsubtitle_free(sub); ++ return ret; + } +-#endif ++ av_assert1(!sub->num_rects || *got_sub_ptr); + + if (sub->num_rects && !sub->end_display_time && avpkt->duration && + avctx->pkt_timebase.num) { +@@ -1096,16 +915,18 @@ + "Invalid UTF-8 in decoded subtitles text; " + "maybe missing -sub_charenc option\n"); + avsubtitle_free(sub); +- ret = AVERROR_INVALIDDATA; +- break; ++ *got_sub_ptr = 0; ++ return AVERROR_INVALIDDATA; + } + } + + if (*got_sub_ptr) +- avctx->frame_number++; +- +- if (pkt == avci->buffer_pkt) // did we recode? +- av_packet_unref(avci->buffer_pkt); ++ avctx->frame_num++; ++#if FF_API_AVCTX_FRAME_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS ++ avctx->frame_number = avctx->frame_num; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + } + + return ret; +@@ -1120,11 +941,11 @@ + + // If a device was supplied when the codec was opened, assume that the + // user wants to use it. +- if (avctx->hw_device_ctx && avctx->codec->hw_configs) { ++ if (avctx->hw_device_ctx && ffcodec(avctx->codec)->hw_configs) { + AVHWDeviceContext *device_ctx = + (AVHWDeviceContext*)avctx->hw_device_ctx->data; + for (i = 0;; i++) { +- config = &avctx->codec->hw_configs[i]->public; ++ config = &ffcodec(avctx->codec)->hw_configs[i]->public; + if (!config) + break; + if (!(config->methods & +@@ -1236,7 +1057,7 @@ + int i, ret; + + for (i = 0;; i++) { +- hw_config = avctx->codec->hw_configs[i]; ++ hw_config = ffcodec(avctx->codec)->hw_configs[i]; + if (!hw_config) + return AVERROR(ENOENT); + if (hw_config->public.pix_fmt == hw_pix_fmt) +@@ -1344,12 +1165,10 @@ + avctx->sw_pix_fmt = fmt[n - 1]; + } + +- choices = av_malloc_array(n + 1, sizeof(*choices)); ++ choices = av_memdup(fmt, (n + 1) * sizeof(*choices)); + if (!choices) + return AV_PIX_FMT_NONE; + +- memcpy(choices, fmt, (n + 1) * sizeof(*choices)); +- + for (;;) { + // Remove the previous hwaccel, if there was one. + hwaccel_uninit(avctx); +@@ -1382,9 +1201,9 @@ + break; + } + +- if (avctx->codec->hw_configs) { ++ if (ffcodec(avctx->codec)->hw_configs) { + for (i = 0;; i++) { +- hw_config = avctx->codec->hw_configs[i]; ++ hw_config = ffcodec(avctx->codec)->hw_configs[i]; + if (!hw_config) + break; + if (hw_config->public.pix_fmt == user_choice) +@@ -1460,265 +1279,9 @@ + return ret; + } + +-static void frame_pool_free(void *opaque, uint8_t *data) +-{ +- FramePool *pool = (FramePool*)data; +- int i; +- +- for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++) +- av_buffer_pool_uninit(&pool->pools[i]); +- +- av_freep(&data); +-} +- +-static AVBufferRef *frame_pool_alloc(void) +-{ +- FramePool *pool = av_mallocz(sizeof(*pool)); +- AVBufferRef *buf; +- +- if (!pool) +- return NULL; +- +- buf = av_buffer_create((uint8_t*)pool, sizeof(*pool), +- frame_pool_free, NULL, 0); +- if (!buf) { +- av_freep(&pool); +- return NULL; +- } +- +- return buf; +-} +- +-static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) +-{ +- FramePool *pool = avctx->internal->pool ? +- (FramePool*)avctx->internal->pool->data : NULL; +- AVBufferRef *pool_buf; +- int i, ret, ch, planes; +- +- if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { +- int planar = av_sample_fmt_is_planar(frame->format); +- ch = frame->channels; +- planes = planar ? ch : 1; +- } +- +- if (pool && pool->format == frame->format) { +- if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && +- pool->width == frame->width && pool->height == frame->height) +- return 0; +- if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && pool->planes == planes && +- pool->channels == ch && frame->nb_samples == pool->samples) +- return 0; +- } +- +- pool_buf = frame_pool_alloc(); +- if (!pool_buf) +- return AVERROR(ENOMEM); +- pool = (FramePool*)pool_buf->data; +- +- switch (avctx->codec_type) { +- case AVMEDIA_TYPE_VIDEO: { +- int linesize[4]; +- int w = frame->width; +- int h = frame->height; +- int unaligned; +- ptrdiff_t linesize1[4]; +- size_t size[4]; +- +- avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); +- +- do { +- // NOTE: do not align linesizes individually, this breaks e.g. assumptions +- // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 +- ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w); +- if (ret < 0) +- goto fail; +- // increase alignment of w for next try (rhs gives the lowest bit set in w) +- w += w & ~(w - 1); +- +- unaligned = 0; +- for (i = 0; i < 4; i++) +- unaligned |= linesize[i] % pool->stride_align[i]; +- } while (unaligned); +- +- for (i = 0; i < 4; i++) +- linesize1[i] = linesize[i]; +- ret = av_image_fill_plane_sizes(size, avctx->pix_fmt, h, linesize1); +- if (ret < 0) +- goto fail; +- +- for (i = 0; i < 4; i++) { +- pool->linesize[i] = linesize[i]; +- if (size[i]) { +- if (size[i] > INT_MAX - (16 + STRIDE_ALIGN - 1)) { +- ret = AVERROR(EINVAL); +- goto fail; +- } +- pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1, +- CONFIG_MEMORY_POISONING ? +- NULL : +- av_buffer_allocz); +- if (!pool->pools[i]) { +- ret = AVERROR(ENOMEM); +- goto fail; +- } +- } +- } +- pool->format = frame->format; +- pool->width = frame->width; +- pool->height = frame->height; +- +- break; +- } +- case AVMEDIA_TYPE_AUDIO: { +- ret = av_samples_get_buffer_size(&pool->linesize[0], ch, +- frame->nb_samples, frame->format, 0); +- if (ret < 0) +- goto fail; +- +- pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL); +- if (!pool->pools[0]) { +- ret = AVERROR(ENOMEM); +- goto fail; +- } +- +- pool->format = frame->format; +- pool->planes = planes; +- pool->channels = ch; +- pool->samples = frame->nb_samples; +- break; +- } +- default: av_assert0(0); +- } +- +- av_buffer_unref(&avctx->internal->pool); +- avctx->internal->pool = pool_buf; +- +- return 0; +-fail: +- av_buffer_unref(&pool_buf); +- return ret; +-} +- +-static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) +-{ +- FramePool *pool = (FramePool*)avctx->internal->pool->data; +- int planes = pool->planes; +- int i; +- +- frame->linesize[0] = pool->linesize[0]; +- +- if (planes > AV_NUM_DATA_POINTERS) { +- frame->extended_data = av_mallocz_array(planes, sizeof(*frame->extended_data)); +- frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS; +- frame->extended_buf = av_mallocz_array(frame->nb_extended_buf, +- sizeof(*frame->extended_buf)); +- if (!frame->extended_data || !frame->extended_buf) { +- av_freep(&frame->extended_data); +- av_freep(&frame->extended_buf); +- return AVERROR(ENOMEM); +- } +- } else { +- frame->extended_data = frame->data; +- av_assert0(frame->nb_extended_buf == 0); +- } +- +- for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) { +- frame->buf[i] = av_buffer_pool_get(pool->pools[0]); +- if (!frame->buf[i]) +- goto fail; +- frame->extended_data[i] = frame->data[i] = frame->buf[i]->data; +- } +- for (i = 0; i < frame->nb_extended_buf; i++) { +- frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]); +- if (!frame->extended_buf[i]) +- goto fail; +- frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data; +- } +- +- if (avctx->debug & FF_DEBUG_BUFFERS) +- av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame); +- +- return 0; +-fail: +- av_frame_unref(frame); +- return AVERROR(ENOMEM); +-} +- +-static int video_get_buffer(AVCodecContext *s, AVFrame *pic) +-{ +- FramePool *pool = (FramePool*)s->internal->pool->data; +- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format); +- int i; +- +- if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) { +- av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n"); +- return -1; +- } +- +- if (!desc) { +- av_log(s, AV_LOG_ERROR, +- "Unable to get pixel format descriptor for format %s\n", +- av_get_pix_fmt_name(pic->format)); +- return AVERROR(EINVAL); +- } +- +- memset(pic->data, 0, sizeof(pic->data)); +- pic->extended_data = pic->data; +- +- for (i = 0; i < 4 && pool->pools[i]; i++) { +- pic->linesize[i] = pool->linesize[i]; +- +- pic->buf[i] = av_buffer_pool_get(pool->pools[i]); +- if (!pic->buf[i]) +- goto fail; +- +- pic->data[i] = pic->buf[i]->data; +- } +- for (; i < AV_NUM_DATA_POINTERS; i++) { +- pic->data[i] = NULL; +- pic->linesize[i] = 0; +- } +- if (desc->flags & AV_PIX_FMT_FLAG_PAL || +- ((desc->flags & FF_PSEUDOPAL) && pic->data[1])) +- avpriv_set_systematic_pal2((uint32_t *)pic->data[1], pic->format); +- +- if (s->debug & FF_DEBUG_BUFFERS) +- av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic); +- +- return 0; +-fail: +- av_frame_unref(pic); +- return AVERROR(ENOMEM); +-} +- +-int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) +-{ +- int ret; +- +- if (avctx->hw_frames_ctx) { +- ret = av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); +- frame->width = avctx->coded_width; +- frame->height = avctx->coded_height; +- return ret; +- } +- +- if ((ret = update_frame_pool(avctx, frame)) < 0) +- return ret; +- +- switch (avctx->codec_type) { +- case AVMEDIA_TYPE_VIDEO: +- return video_get_buffer(avctx, frame); +- case AVMEDIA_TYPE_AUDIO: +- return audio_get_buffer(avctx, frame); +- default: +- return -1; +- } +-} +- + static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) + { +- buffer_size_t size; ++ size_t size; + const uint8_t *side_metadata; + + AVDictionary **frame_md = &frame->metadata; +@@ -1728,9 +1291,9 @@ + return av_packet_unpack_dictionary(side_metadata, size, frame_md); + } + +-int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) ++int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, ++ AVFrame *frame, const AVPacket *pkt) + { +- AVPacket *pkt = avctx->internal->last_pkt_props; + static const struct { + enum AVPacketSideDataType packet; + enum AVFrameSideDataType frame; +@@ -1745,41 +1308,60 @@ + { AV_PKT_DATA_A53_CC, AV_FRAME_DATA_A53_CC }, + { AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE }, + { AV_PKT_DATA_S12M_TIMECODE, AV_FRAME_DATA_S12M_TIMECODE }, ++ { AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, + }; + +- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { +- frame->pts = pkt->pts; +-#if FF_API_PKT_PTS +-FF_DISABLE_DEPRECATION_WARNINGS +- frame->pkt_pts = pkt->pts; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- frame->pkt_pos = pkt->pos; +- frame->pkt_duration = pkt->duration; +- frame->pkt_size = pkt->size; +- +- for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) { +- buffer_size_t size; +- uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); +- if (packet_sd) { +- AVFrameSideData *frame_sd = av_frame_new_side_data(frame, +- sd[i].frame, +- size); +- if (!frame_sd) +- return AVERROR(ENOMEM); ++ frame->pts = pkt->pts; ++ frame->pkt_pos = pkt->pos; ++ frame->duration = pkt->duration; ++ frame->pkt_size = pkt->size; ++ ++ for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) { ++ size_t size; ++ uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); ++ if (packet_sd) { ++ AVFrameSideData *frame_sd = av_frame_new_side_data(frame, ++ sd[i].frame, ++ size); ++ if (!frame_sd) ++ return AVERROR(ENOMEM); + +- memcpy(frame_sd->data, packet_sd, size); +- } ++ memcpy(frame_sd->data, packet_sd, size); + } +- add_metadata_from_side_data(pkt, frame); ++ } ++ add_metadata_from_side_data(pkt, frame); + +- if (pkt->flags & AV_PKT_FLAG_DISCARD) { +- frame->flags |= AV_FRAME_FLAG_DISCARD; +- } else { +- frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); +- } ++ if (pkt->flags & AV_PKT_FLAG_DISCARD) { ++ frame->flags |= AV_FRAME_FLAG_DISCARD; ++ } else { ++ frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); + } ++ ++ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { ++ int ret = av_buffer_replace(&frame->opaque_ref, pkt->opaque_ref); ++ if (ret < 0) ++ return ret; ++ frame->opaque = pkt->opaque; ++ } ++ ++ return 0; ++} ++ ++int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) ++{ ++ const AVPacket *pkt = avctx->internal->last_pkt_props; ++ ++ if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { ++ int ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt); ++ if (ret < 0) ++ return ret; ++ frame->pkt_size = (int)(intptr_t)pkt->opaque; ++ } ++#if FF_API_REORDERED_OPAQUE ++FF_DISABLE_DEPRECATION_WARNINGS + frame->reordered_opaque = avctx->reordered_opaque; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + + if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) + frame->color_primaries = avctx->color_primaries; +@@ -1813,25 +1395,18 @@ + frame->sample_rate = avctx->sample_rate; + if (frame->format < 0) + frame->format = avctx->sample_fmt; +- if (!frame->channel_layout) { +- if (avctx->channel_layout) { +- if (av_get_channel_layout_nb_channels(avctx->channel_layout) != +- avctx->channels) { +- av_log(avctx, AV_LOG_ERROR, "Inconsistent channel " +- "configuration.\n"); +- return AVERROR(EINVAL); +- } +- +- frame->channel_layout = avctx->channel_layout; +- } else { +- if (avctx->channels > FF_SANE_NB_CHANNELS) { +- av_log(avctx, AV_LOG_ERROR, "Too many channels: %d.\n", +- avctx->channels); +- return AVERROR(ENOSYS); +- } +- } ++ if (!frame->ch_layout.nb_channels) { ++ int ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); ++ if (ret < 0) ++ return ret; + } +- frame->channels = avctx->channels; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ frame->channels = frame->ch_layout.nb_channels; ++ frame->channel_layout = frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? ++ frame->ch_layout.u.mask : 0; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + break; + } + return 0; +@@ -1846,8 +1421,6 @@ + int flags = desc ? desc->flags : 0; + if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PAL)) + num_planes = 2; +- if ((flags & FF_PSEUDOPAL) && frame->data[1]) +- num_planes = 2; + for (i = 0; i < num_planes; i++) { + av_assert0(frame->data[i]); + } +@@ -1903,6 +1476,8 @@ + int override_dimensions = 1; + int ret; + ++ av_assert0(av_codec_is_decoder(avctx->codec)); ++ + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + if ((unsigned)avctx->width > INT_MAX - STRIDE_ALIGN || + (ret = av_image_check_size2(FFALIGN(avctx->width, STRIDE_ALIGN), avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx)) < 0 || avctx->pix_fmt<0) { +@@ -1923,7 +1498,16 @@ + goto fail; + } + } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { +- if (frame->nb_samples * (int64_t)avctx->channels > avctx->max_samples) { ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ /* compat layer for old-style get_buffer() implementations */ ++ avctx->channels = avctx->ch_layout.nb_channels; ++ avctx->channel_layout = (avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE) ? ++ avctx->ch_layout.u.mask : 0; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ ++ if (frame->nb_samples * (int64_t)avctx->ch_layout.nb_channels > avctx->max_samples) { + av_log(avctx, AV_LOG_ERROR, "samples per frame %d, exceeds max_samples %"PRId64"\n", frame->nb_samples, avctx->max_samples); + ret = AVERROR(EINVAL); + goto fail; +@@ -1953,7 +1537,7 @@ + + end: + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions && +- !(avctx->codec->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)) { ++ !(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)) { + frame->width = avctx->width; + frame->height = avctx->height; + } +@@ -2014,30 +1598,53 @@ + + int ff_decode_preinit(AVCodecContext *avctx) + { ++ AVCodecInternal *avci = avctx->internal; + int ret = 0; + + /* if the decoder init function was already called previously, + * free the already allocated subtitle_header before overwriting it */ + av_freep(&avctx->subtitle_header); + +-#if FF_API_THREAD_SAFE_CALLBACKS +-FF_DISABLE_DEPRECATION_WARNINGS +- if ((avctx->thread_type & FF_THREAD_FRAME) && +- avctx->get_buffer2 != avcodec_default_get_buffer2 && +- !avctx->thread_safe_callbacks) { +- av_log(avctx, AV_LOG_WARNING, "Requested frame threading with a " +- "custom get_buffer2() implementation which is not marked as " +- "thread safe. This is not supported anymore, make your " +- "callback thread-safe.\n"); +- } +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) { + av_log(avctx, AV_LOG_WARNING, "The maximum value for lowres supported by the decoder is %d\n", + avctx->codec->max_lowres); + avctx->lowres = avctx->codec->max_lowres; + } ++ if (avctx->sub_charenc) { ++ if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) { ++ av_log(avctx, AV_LOG_ERROR, "Character encoding is only " ++ "supported with subtitles codecs\n"); ++ return AVERROR(EINVAL); ++ } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) { ++ av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, " ++ "subtitles character encoding will be ignored\n", ++ avctx->codec_descriptor->name); ++ avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING; ++ } else { ++ /* input character encoding is set for a text based subtitle ++ * codec at this point */ ++ if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC) ++ avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER; ++ ++ if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) { ++#if CONFIG_ICONV ++ iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc); ++ if (cd == (iconv_t)-1) { ++ ret = AVERROR(errno); ++ av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context " ++ "with input character encoding \"%s\"\n", avctx->sub_charenc); ++ return ret; ++ } ++ iconv_close(cd); ++#else ++ av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles " ++ "conversion needs a libavcodec built with iconv support " ++ "for this codec\n"); ++ return AVERROR(ENOSYS); ++#endif ++ } ++ } ++ } + + avctx->pts_correction_num_faulty_pts = + avctx->pts_correction_num_faulty_dts = 0; +@@ -2052,9 +1659,29 @@ + avctx->export_side_data |= AV_CODEC_EXPORT_DATA_MVS; + } + ++ avci->in_pkt = av_packet_alloc(); ++ avci->last_pkt_props = av_packet_alloc(); ++ if (!avci->in_pkt || !avci->last_pkt_props) ++ return AVERROR(ENOMEM); ++ + ret = decode_bsfs_init(avctx); + if (ret < 0) + return ret; + + return 0; + } ++ ++int ff_copy_palette(void *dst, const AVPacket *src, void *logctx) ++{ ++ size_t size; ++ const void *pal = av_packet_get_side_data(src, AV_PKT_DATA_PALETTE, &size); ++ ++ if (pal && size == AVPALETTE_SIZE) { ++ memcpy(dst, pal, AVPALETTE_SIZE); ++ return 1; ++ } else if (pal) { ++ av_log(logctx, AV_LOG_ERROR, ++ "Palette size %"SIZE_SPECIFIER" is wrong\n", size); ++ } ++ return 0; ++} +diff -Naur a/media/ffvpx/libavcodec/decode.h b/media/ffvpx/libavcodec/decode.h +--- a/media/ffvpx/libavcodec/decode.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/decode.h 2023-04-06 12:50:24.491176503 +0200 +@@ -54,6 +54,11 @@ + } FrameDecodeData; + + /** ++ * avcodec_receive_frame() implementation for decoders. ++ */ ++int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame); ++ ++/** + * Called by decoders to get the next packet for decoding. + * + * @param pkt An empty packet to be filled with data. +@@ -65,6 +70,12 @@ + int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt); + + /** ++ * Set various frame properties from the provided packet. ++ */ ++int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, ++ AVFrame *frame, const AVPacket *pkt); ++ ++/** + * Set various frame properties from the codec context / packet data. + */ + int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame); +@@ -80,9 +91,63 @@ + int ff_attach_decode_data(AVFrame *frame); + + /** ++ * Check whether the side-data of src contains a palette of ++ * size AVPALETTE_SIZE; if so, copy it to dst and return 1; ++ * else return 0. ++ * Also emit an error message upon encountering a palette ++ * with invalid size. ++ */ ++int ff_copy_palette(void *dst, const AVPacket *src, void *logctx); ++ ++/** + * Perform decoder initialization and validation. +- * Called when opening the decoder, before the AVCodec.init() call. ++ * Called when opening the decoder, before the FFCodec.init() call. + */ + int ff_decode_preinit(AVCodecContext *avctx); + ++/** ++ * Check that the provided frame dimensions are valid and set them on the codec ++ * context. ++ */ ++int ff_set_dimensions(AVCodecContext *s, int width, int height); ++ ++/** ++ * Check that the provided sample aspect ratio is valid and set it on the codec ++ * context. ++ */ ++int ff_set_sar(AVCodecContext *avctx, AVRational sar); ++ ++/** ++ * Select the (possibly hardware accelerated) pixel format. ++ * This is a wrapper around AVCodecContext.get_format() and should be used ++ * instead of calling get_format() directly. ++ * ++ * The list of pixel formats must contain at least one valid entry, and is ++ * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software, ++ * the last entry in the list must be the most accurate software format. ++ * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt ++ * must be set before calling this function. ++ */ ++int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); ++ ++/** ++ * Get a buffer for a frame. This is a wrapper around ++ * AVCodecContext.get_buffer() and should be used instead calling get_buffer() ++ * directly. ++ */ ++int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); ++ ++#define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable ++/** ++ * Identical in function to ff_get_buffer(), except it reuses the existing buffer ++ * if available. ++ */ ++int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); ++ ++/** ++ * Add or update AV_FRAME_DATA_MATRIXENCODING side data. ++ */ ++int ff_side_data_update_matrix_encoding(AVFrame *frame, ++ enum AVMatrixEncoding matrix_encoding); ++ + #endif /* AVCODEC_DECODE_H */ +diff -Naur a/media/ffvpx/libavcodec/defs.h b/media/ffvpx/libavcodec/defs.h +--- a/media/ffvpx/libavcodec/defs.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/defs.h 2023-04-06 12:50:06.971471053 +0200 +@@ -0,0 +1,192 @@ ++/* ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_DEFS_H ++#define AVCODEC_DEFS_H ++ ++/** ++ * @file ++ * @ingroup libavc ++ * Misc types and constants that do not belong anywhere else. ++ */ ++ ++#include ++#include ++ ++/** ++ * @ingroup lavc_decoding ++ * Required number of additionally allocated bytes at the end of the input bitstream for decoding. ++ * This is mainly needed because some optimized bitstream readers read ++ * 32 or 64 bit at once and could read over the end.
++ * Note: If the first 23 bits of the additional bytes are not 0, then damaged ++ * MPEG bitstreams could cause overread and segfault. ++ */ ++#define AV_INPUT_BUFFER_PADDING_SIZE 64 ++ ++/** ++ * Verify checksums embedded in the bitstream (could be of either encoded or ++ * decoded data, depending on the format) and print an error message on mismatch. ++ * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the ++ * decoder/demuxer returning an error. ++ */ ++#define AV_EF_CRCCHECK (1<<0) ++#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations ++#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length ++#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection ++ ++#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue ++#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors ++#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors ++#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder/muxer should not do as an error ++ ++#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. ++#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. ++#define FF_COMPLIANCE_NORMAL 0 ++#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions ++#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. ++ ++/** ++ * @ingroup lavc_decoding ++ */ ++enum AVDiscard{ ++ /* We leave some space between them for extensions (drop some ++ * keyframes for intra-only or drop just some bidir frames). */ ++ AVDISCARD_NONE =-16, ///< discard nothing ++ AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi ++ AVDISCARD_NONREF = 8, ///< discard all non reference ++ AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames ++ AVDISCARD_NONINTRA= 24, ///< discard all non intra frames ++ AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes ++ AVDISCARD_ALL = 48, ///< discard all ++}; ++ ++enum AVAudioServiceType { ++ AV_AUDIO_SERVICE_TYPE_MAIN = 0, ++ AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, ++ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, ++ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, ++ AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, ++ AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, ++ AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, ++ AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, ++ AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, ++ AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI ++}; ++ ++/** ++ * Pan Scan area. ++ * This specifies the area which should be displayed. ++ * Note there may be multiple such areas for one frame. ++ */ ++typedef struct AVPanScan { ++ /** ++ * id ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int id; ++ ++ /** ++ * width and height in 1/16 pel ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int width; ++ int height; ++ ++ /** ++ * position of the top left corner in 1/16 pel for up to 3 fields/frames ++ * - encoding: Set by user. ++ * - decoding: Set by libavcodec. ++ */ ++ int16_t position[3][2]; ++} AVPanScan; ++ ++/** ++ * This structure describes the bitrate properties of an encoded bitstream. It ++ * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD ++ * parameters for H.264/HEVC. ++ */ ++typedef struct AVCPBProperties { ++ /** ++ * Maximum bitrate of the stream, in bits per second. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t max_bitrate; ++ /** ++ * Minimum bitrate of the stream, in bits per second. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t min_bitrate; ++ /** ++ * Average bitrate of the stream, in bits per second. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t avg_bitrate; ++ ++ /** ++ * The size of the buffer to which the ratecontrol is applied, in bits. ++ * Zero if unknown or unspecified. ++ */ ++ int64_t buffer_size; ++ ++ /** ++ * The delay between the time the packet this structure is associated with ++ * is received and the time when it should be decoded, in periods of a 27MHz ++ * clock. ++ * ++ * UINT64_MAX when unknown or unspecified. ++ */ ++ uint64_t vbv_delay; ++} AVCPBProperties; ++ ++/** ++ * Allocate a CPB properties structure and initialize its fields to default ++ * values. ++ * ++ * @param size if non-NULL, the size of the allocated struct will be written ++ * here. This is useful for embedding it in side data. ++ * ++ * @return the newly allocated struct or NULL on failure ++ */ ++AVCPBProperties *av_cpb_properties_alloc(size_t *size); ++ ++/** ++ * This structure supplies correlation between a packet timestamp and a wall clock ++ * production time. The definition follows the Producer Reference Time ('prft') ++ * as defined in ISO/IEC 14496-12 ++ */ ++typedef struct AVProducerReferenceTime { ++ /** ++ * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). ++ */ ++ int64_t wallclock; ++ int flags; ++} AVProducerReferenceTime; ++ ++/** ++ * Encode extradata length to a buffer. Used by xiph codecs. ++ * ++ * @param s buffer to write to; must be at least (v/255+1) bytes long ++ * @param v size of extradata in bytes ++ * @return number of bytes written to the buffer. ++ */ ++unsigned int av_xiphlacing(unsigned char *s, unsigned int v); ++ ++#endif // AVCODEC_DEFS_H +diff -Naur a/media/ffvpx/libavcodec/encode.c b/media/ffvpx/libavcodec/encode.c +--- a/media/ffvpx/libavcodec/encode.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/encode.c 2023-04-06 12:50:24.491176503 +0200 +@@ -20,17 +20,19 @@ + + #include "libavutil/attributes.h" + #include "libavutil/avassert.h" ++#include "libavutil/channel_layout.h" + #include "libavutil/frame.h" + #include "libavutil/imgutils.h" + #include "libavutil/internal.h" + #include "libavutil/samplefmt.h" + + #include "avcodec.h" ++#include "codec_internal.h" + #include "encode.h" + #include "frame_thread_encoder.h" + #include "internal.h" + +-int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size) ++int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size) + { + if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) { + av_log(avctx, AV_LOG_ERROR, "Invalid minimum required packet size %"PRId64" (max allowed is %d)\n", +@@ -40,18 +42,14 @@ + + av_assert0(!avpkt->data); + +- if (avctx && 2*min_size < size) { // FIXME The factor needs to be finetuned +- av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size); +- avpkt->data = avctx->internal->byte_buffer; +- avpkt->size = size; +- } +- ++ av_fast_padded_malloc(&avctx->internal->byte_buffer, ++ &avctx->internal->byte_buffer_size, size); ++ avpkt->data = avctx->internal->byte_buffer; + if (!avpkt->data) { +- int ret = av_new_packet(avpkt, size); +- if (ret < 0) +- av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size); +- return ret; ++ av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size); ++ return AVERROR(ENOMEM); + } ++ avpkt->size = size; + + return 0; + } +@@ -74,7 +72,6 @@ + return ret; + } + avpkt->data = avpkt->buf->data; +- memset(avpkt->data + avpkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); + + return 0; + } +@@ -98,6 +95,7 @@ + ret = AVERROR(EINVAL); + goto fail; + } ++ memset(avpkt->data + avpkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); + + ret = 0; + fail: +@@ -109,17 +107,35 @@ + return ret; + } + ++static int encode_make_refcounted(AVCodecContext *avctx, AVPacket *avpkt) ++{ ++ uint8_t *data = avpkt->data; ++ int ret; ++ ++ if (avpkt->buf) ++ return 0; ++ ++ avpkt->data = NULL; ++ ret = ff_get_encode_buffer(avctx, avpkt, avpkt->size, 0); ++ if (ret < 0) ++ return ret; ++ memcpy(avpkt->data, data, avpkt->size); ++ ++ return 0; ++} ++ + /** + * Pad last frame with silence. + */ +-static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src) ++static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src, int out_samples) + { + int ret; + + frame->format = src->format; +- frame->channel_layout = src->channel_layout; +- frame->channels = src->channels; +- frame->nb_samples = s->frame_size; ++ frame->nb_samples = out_samples; ++ ret = av_channel_layout_copy(&frame->ch_layout, &s->ch_layout); ++ if (ret < 0) ++ goto fail; + ret = av_frame_get_buffer(frame, 0); + if (ret < 0) + goto fail; +@@ -129,17 +145,19 @@ + goto fail; + + if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0, +- src->nb_samples, s->channels, s->sample_fmt)) < 0) ++ src->nb_samples, s->ch_layout.nb_channels, ++ s->sample_fmt)) < 0) + goto fail; + if ((ret = av_samples_set_silence(frame->extended_data, src->nb_samples, + frame->nb_samples - src->nb_samples, +- s->channels, s->sample_fmt)) < 0) ++ s->ch_layout.nb_channels, s->sample_fmt)) < 0) + goto fail; + + return 0; + + fail: + av_frame_unref(frame); ++ s->internal->last_audio_frame = 0; + return ret; + } + +@@ -152,8 +170,13 @@ + return -1; + } + +- ret = avctx->codec->encode_sub(avctx, buf, buf_size, sub); +- avctx->frame_number++; ++ ret = ffcodec(avctx->codec)->cb.encode_sub(avctx, buf, buf_size, sub); ++ avctx->frame_num++; ++#if FF_API_AVCTX_FRAME_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS ++ avctx->frame_number = avctx->frame_num; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + return ret; + } + +@@ -172,11 +195,87 @@ + return 0; + } + ++int ff_encode_reordered_opaque(AVCodecContext *avctx, ++ AVPacket *pkt, const AVFrame *frame) ++{ ++#if FF_API_REORDERED_OPAQUE ++FF_DISABLE_DEPRECATION_WARNINGS ++ avctx->reordered_opaque = frame->reordered_opaque; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ ++ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { ++ int ret = av_buffer_replace(&pkt->opaque_ref, frame->opaque_ref); ++ if (ret < 0) ++ return ret; ++ pkt->opaque = frame->opaque; ++ } ++ ++ return 0; ++} ++ ++int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, ++ AVFrame *frame, int *got_packet) ++{ ++ const FFCodec *const codec = ffcodec(avctx->codec); ++ int ret; ++ ++ ret = codec->cb.encode(avctx, avpkt, frame, got_packet); ++ emms_c(); ++ av_assert0(ret <= 0); ++ ++ if (!ret && *got_packet) { ++ if (avpkt->data) { ++ ret = encode_make_refcounted(avctx, avpkt); ++ if (ret < 0) ++ goto unref; ++ // Date returned by encoders must always be ref-counted ++ av_assert0(avpkt->buf); ++ } ++ ++ // set the timestamps for the simple no-delay case ++ // encoders with delay have to set the timestamps themselves ++ if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || ++ (frame && (codec->caps_internal & FF_CODEC_CAP_EOF_FLUSH))) { ++ if (avpkt->pts == AV_NOPTS_VALUE) ++ avpkt->pts = frame->pts; ++ ++ if (!avpkt->duration) { ++ if (frame->duration) ++ avpkt->duration = frame->duration; ++ else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { ++ avpkt->duration = ff_samples_to_time_base(avctx, ++ frame->nb_samples); ++ } ++ } ++ ++ ret = ff_encode_reordered_opaque(avctx, avpkt, frame); ++ if (ret < 0) ++ goto unref; ++ } ++ ++ // dts equals pts unless there is reordering ++ // there can be no reordering if there is no encoder delay ++ if (!(avctx->codec_descriptor->props & AV_CODEC_PROP_REORDER) || ++ !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || ++ (codec->caps_internal & FF_CODEC_CAP_EOF_FLUSH)) ++ avpkt->dts = avpkt->pts; ++ } else { ++unref: ++ av_packet_unref(avpkt); ++ } ++ ++ if (frame) ++ av_frame_unref(frame); ++ ++ return ret; ++} ++ + static int encode_simple_internal(AVCodecContext *avctx, AVPacket *avpkt) + { + AVCodecInternal *avci = avctx->internal; +- EncodeSimpleContext *es = &avci->es; +- AVFrame *frame = es->in_frame; ++ AVFrame *frame = avci->in_frame; ++ const FFCodec *const codec = ffcodec(avctx->codec); + int got_packet; + int ret; + +@@ -192,7 +291,7 @@ + + if (!frame->buf[0]) { + if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY || +- (avci->frame_thread_encoder && avctx->active_thread_type & FF_THREAD_FRAME))) ++ avci->frame_thread_encoder)) + return AVERROR_EOF; + + // Flushing is signaled with a NULL frame +@@ -201,69 +300,18 @@ + + got_packet = 0; + +- av_assert0(avctx->codec->encode2); ++ av_assert0(codec->cb_type == FF_CODEC_CB_TYPE_ENCODE); + +- if (CONFIG_FRAME_THREAD_ENCODER && +- avci->frame_thread_encoder && (avctx->active_thread_type & FF_THREAD_FRAME)) +- /* This might modify frame, but it doesn't matter, because +- * the frame properties used below are not used for video +- * (due to the delay inherent in frame threaded encoding, it makes +- * no sense to use the properties of the current frame anyway). */ ++ if (CONFIG_FRAME_THREAD_ENCODER && avci->frame_thread_encoder) ++ /* This will unref frame. */ + ret = ff_thread_video_encode_frame(avctx, avpkt, frame, &got_packet); + else { +- ret = avctx->codec->encode2(avctx, avpkt, frame, &got_packet); +- if (avctx->codec->type == AVMEDIA_TYPE_VIDEO && !ret && got_packet && +- !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) +- avpkt->pts = avpkt->dts = frame->pts; +- } +- +- av_assert0(ret <= 0); +- +- emms_c(); +- +- if (!ret && got_packet) { +- if (avpkt->data) { +- ret = av_packet_make_refcounted(avpkt); +- if (ret < 0) +- goto end; +- } +- +- if (frame && !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) { +- if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { +- if (avpkt->pts == AV_NOPTS_VALUE) +- avpkt->pts = frame->pts; +- if (!avpkt->duration) +- avpkt->duration = ff_samples_to_time_base(avctx, +- frame->nb_samples); +- } +- } +- if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { +- /* NOTE: if we add any audio encoders which output non-keyframe packets, +- * this needs to be moved to the encoders, but for now we can do it +- * here to simplify things */ +- avpkt->flags |= AV_PKT_FLAG_KEY; +- avpkt->dts = avpkt->pts; +- } ++ ret = ff_encode_encode_cb(avctx, avpkt, frame, &got_packet); + } + + if (avci->draining && !got_packet) + avci->draining_done = 1; + +-end: +- if (ret < 0 || !got_packet) +- av_packet_unref(avpkt); +- +- if (frame) { +- if (!ret) +- avctx->frame_number++; +- av_frame_unref(frame); +- } +- +- if (got_packet) +- // Encoders must always return ref-counted buffers. +- // Side-data only packets have no data and can be not ref-counted. +- av_assert0(!avpkt->data || avpkt->buf); +- + return ret; + } + +@@ -297,8 +345,8 @@ + return AVERROR(EINVAL); + } + +- if (avctx->codec->receive_packet) { +- ret = avctx->codec->receive_packet(avctx, avpkt); ++ if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_RECEIVE_PACKET) { ++ ret = ffcodec(avctx->codec)->cb.receive_packet(avctx, avpkt); + if (ret < 0) + av_packet_unref(avpkt); + else +@@ -307,6 +355,8 @@ + av_assert0(!avpkt->data || avpkt->buf); + } else + ret = encode_simple_receive_packet(avctx, avpkt); ++ if (ret >= 0) ++ avpkt->flags |= avci->intra_only_flag; + + if (ret == AVERROR_EOF) + avci->draining_done = 1; +@@ -314,6 +364,53 @@ + return ret; + } + ++#if CONFIG_LCMS2 ++static int encode_generate_icc_profile(AVCodecContext *avctx, AVFrame *frame) ++{ ++ enum AVColorTransferCharacteristic trc = frame->color_trc; ++ enum AVColorPrimaries prim = frame->color_primaries; ++ const FFCodec *const codec = ffcodec(avctx->codec); ++ AVCodecInternal *avci = avctx->internal; ++ cmsHPROFILE profile; ++ int ret; ++ ++ /* don't generate ICC profiles if disabled or unsupported */ ++ if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES)) ++ return 0; ++ if (!(codec->caps_internal & FF_CODEC_CAP_ICC_PROFILES)) ++ return 0; ++ ++ if (trc == AVCOL_TRC_UNSPECIFIED) ++ trc = avctx->color_trc; ++ if (prim == AVCOL_PRI_UNSPECIFIED) ++ prim = avctx->color_primaries; ++ if (trc == AVCOL_TRC_UNSPECIFIED || prim == AVCOL_PRI_UNSPECIFIED) ++ return 0; /* can't generate ICC profile with missing csp tags */ ++ ++ if (av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE)) ++ return 0; /* don't overwrite existing ICC profile */ ++ ++ if (!avci->icc.avctx) { ++ ret = ff_icc_context_init(&avci->icc, avctx); ++ if (ret < 0) ++ return ret; ++ } ++ ++ ret = ff_icc_profile_generate(&avci->icc, prim, trc, &profile); ++ if (ret < 0) ++ return ret; ++ ++ ret = ff_icc_profile_attach(&avci->icc, profile, frame); ++ cmsCloseProfile(profile); ++ return ret; ++} ++#else /* !CONFIG_LCMS2 */ ++static int encode_generate_icc_profile(av_unused AVCodecContext *c, av_unused AVFrame *f) ++{ ++ return 0; ++} ++#endif ++ + static int encode_send_frame_internal(AVCodecContext *avctx, const AVFrame *src) + { + AVCodecInternal *avci = avctx->internal; +@@ -327,37 +424,59 @@ + avctx->audio_service_type = *(enum AVAudioServiceType*)sd->data; + + /* check for valid frame size */ +- if (avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME) { +- if (src->nb_samples > avctx->frame_size) { +- av_log(avctx, AV_LOG_ERROR, "more samples than frame size\n"); +- return AVERROR(EINVAL); +- } +- } else if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { ++ if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { + /* if we already got an undersized frame, that must have been the last */ + if (avctx->internal->last_audio_frame) { + av_log(avctx, AV_LOG_ERROR, "frame_size (%d) was not respected for a non-last frame\n", avctx->frame_size); + return AVERROR(EINVAL); + } +- ++ if (src->nb_samples > avctx->frame_size) { ++ av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) > frame_size (%d)\n", src->nb_samples, avctx->frame_size); ++ return AVERROR(EINVAL); ++ } + if (src->nb_samples < avctx->frame_size) { +- ret = pad_last_frame(avctx, dst, src); +- if (ret < 0) +- return ret; +- + avctx->internal->last_audio_frame = 1; +- } else if (src->nb_samples > avctx->frame_size) { +- av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d)\n", src->nb_samples, avctx->frame_size); +- return AVERROR(EINVAL); ++ if (!(avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME)) { ++ int pad_samples = avci->pad_samples ? avci->pad_samples : avctx->frame_size; ++ int out_samples = (src->nb_samples + pad_samples - 1) / pad_samples * pad_samples; ++ ++ if (out_samples != src->nb_samples) { ++ ret = pad_last_frame(avctx, dst, src, out_samples); ++ if (ret < 0) ++ return ret; ++ goto finish; ++ } ++ } + } + } + } + +- if (!dst->data[0]) { +- ret = av_frame_ref(dst, src); ++ ret = av_frame_ref(dst, src); ++ if (ret < 0) ++ return ret; ++ ++finish: ++ ++#if FF_API_PKT_DURATION ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (dst->pkt_duration && dst->pkt_duration != dst->duration) ++ dst->duration = dst->pkt_duration; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ ++ if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { ++ ret = encode_generate_icc_profile(avctx, dst); + if (ret < 0) +- return ret; ++ return ret; + } + ++ // unset frame duration unless AV_CODEC_FLAG_FRAME_DURATION is set, ++ // since otherwise we cannot be sure that whatever value it has is in the ++ // right timebase, so we would produce an incorrect value, which is worse ++ // than none at all ++ if (!(avctx->flags & AV_CODEC_FLAG_FRAME_DURATION)) ++ dst->duration = 0; ++ + return 0; + } + +@@ -372,7 +491,7 @@ + if (avci->draining) + return AVERROR_EOF; + +- if (avci->buffer_frame->data[0]) ++ if (avci->buffer_frame->buf[0]) + return AVERROR(EAGAIN); + + if (!frame) { +@@ -389,6 +508,13 @@ + return ret; + } + ++ avctx->frame_num++; ++#if FF_API_AVCTX_FRAME_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS ++ avctx->frame_number = avctx->frame_num; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ + return 0; + } + +@@ -413,139 +539,82 @@ + return 0; + } + +-#if FF_API_OLD_ENCDEC +-static int compat_encode(AVCodecContext *avctx, AVPacket *avpkt, +- int *got_packet, const AVFrame *frame) ++static int encode_preinit_video(AVCodecContext *avctx) + { +- AVCodecInternal *avci = avctx->internal; +- AVPacket user_pkt; +- int ret; +- +- *got_packet = 0; ++ const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt); ++ int i; + +- if (frame && avctx->codec->type == AVMEDIA_TYPE_VIDEO) { +- if (frame->format == AV_PIX_FMT_NONE) +- av_log(avctx, AV_LOG_WARNING, "AVFrame.format is not set\n"); +- if (frame->width == 0 || frame->height == 0) +- av_log(avctx, AV_LOG_WARNING, "AVFrame.width or height is not set\n"); ++ if (avctx->codec->pix_fmts) { ++ for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++) ++ if (avctx->pix_fmt == avctx->codec->pix_fmts[i]) ++ break; ++ if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE) { ++ char buf[128]; ++ snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt); ++ av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n", ++ (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf)); ++ return AVERROR(EINVAL); ++ } ++ if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P || ++ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P || ++ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P || ++ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P || ++ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P) ++ avctx->color_range = AVCOL_RANGE_JPEG; + } + +- if (avctx->codec->capabilities & AV_CODEC_CAP_DR1) { +- av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_encode_* API does not support " +- "AV_CODEC_CAP_DR1 encoders\n"); +- return AVERROR(ENOSYS); ++ if ( avctx->bits_per_raw_sample < 0 ++ || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) { ++ av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n", ++ avctx->bits_per_raw_sample, pixdesc->comp[0].depth); ++ avctx->bits_per_raw_sample = pixdesc->comp[0].depth; ++ } ++ if (avctx->width <= 0 || avctx->height <= 0) { ++ av_log(avctx, AV_LOG_ERROR, "dimensions not set\n"); ++ return AVERROR(EINVAL); + } + +- ret = avcodec_send_frame(avctx, frame); +- if (ret == AVERROR_EOF) +- ret = 0; +- else if (ret == AVERROR(EAGAIN)) { +- /* we fully drain all the output in each encode call, so this should not +- * ever happen */ +- return AVERROR_BUG; +- } else if (ret < 0) +- return ret; +- +- av_packet_move_ref(&user_pkt, avpkt); +- while (ret >= 0) { +- ret = avcodec_receive_packet(avctx, avpkt); +- if (ret < 0) { +- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) +- ret = 0; +- goto finish; +- } +- +- if (avpkt != avci->compat_encode_packet) { +- if (avpkt->data && user_pkt.data) { +- if (user_pkt.size >= avpkt->size) { +- memcpy(user_pkt.data, avpkt->data, avpkt->size); +- av_buffer_unref(&avpkt->buf); +- avpkt->buf = user_pkt.buf; +- avpkt->data = user_pkt.data; +-FF_DISABLE_DEPRECATION_WARNINGS +- av_init_packet(&user_pkt); +-FF_ENABLE_DEPRECATION_WARNINGS +- } else { +- av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size); +- av_packet_unref(avpkt); +- ret = AVERROR(EINVAL); +- goto finish; +- } +- } ++ if (avctx->ticks_per_frame && avctx->time_base.num && ++ avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { ++ av_log(avctx, AV_LOG_ERROR, ++ "ticks_per_frame %d too large for the timebase %d/%d.", ++ avctx->ticks_per_frame, ++ avctx->time_base.num, ++ avctx->time_base.den); ++ return AVERROR(EINVAL); ++ } + +- *got_packet = 1; +- avpkt = avci->compat_encode_packet; +- } else { +- if (!avci->compat_decode_warned) { +- av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_encode_* " +- "API cannot return all the packets for this encoder. " +- "Some packets will be dropped. Update your code to the " +- "new encoding API to fix this.\n"); +- avci->compat_decode_warned = 1; +- av_packet_unref(avpkt); +- } ++ if (avctx->hw_frames_ctx) { ++ AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; ++ if (frames_ctx->format != avctx->pix_fmt) { ++ av_log(avctx, AV_LOG_ERROR, ++ "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n"); ++ return AVERROR(EINVAL); + } +- +- if (avci->draining) +- break; ++ if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE && ++ avctx->sw_pix_fmt != frames_ctx->sw_format) { ++ av_log(avctx, AV_LOG_ERROR, ++ "Mismatching AVCodecContext.sw_pix_fmt (%s) " ++ "and AVHWFramesContext.sw_format (%s)\n", ++ av_get_pix_fmt_name(avctx->sw_pix_fmt), ++ av_get_pix_fmt_name(frames_ctx->sw_format)); ++ return AVERROR(EINVAL); ++ } ++ avctx->sw_pix_fmt = frames_ctx->sw_format; + } + +-finish: +- if (ret < 0) +- av_packet_unref(&user_pkt); +- +- return ret; +-} +- +-int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, +- AVPacket *avpkt, +- const AVFrame *frame, +- int *got_packet_ptr) +-{ +- int ret = compat_encode(avctx, avpkt, got_packet_ptr, frame); +- +- if (ret < 0) +- av_packet_unref(avpkt); +- +- return ret; +-} +- +-int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, +- AVPacket *avpkt, +- const AVFrame *frame, +- int *got_packet_ptr) +-{ +- int ret = compat_encode(avctx, avpkt, got_packet_ptr, frame); +- +- if (ret < 0) +- av_packet_unref(avpkt); +- +- return ret; ++ return 0; + } +-#endif + +-int ff_encode_preinit(AVCodecContext *avctx) ++static int encode_preinit_audio(AVCodecContext *avctx) + { + int i; +-#if FF_API_CODED_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- avctx->coded_frame = av_frame_alloc(); +- if (!avctx->coded_frame) { +- return AVERROR(ENOMEM); +- } +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- +- if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) { +- av_log(avctx, AV_LOG_ERROR, "The encoder timebase is not set.\n"); +- return AVERROR(EINVAL); +- } + + if (avctx->codec->sample_fmts) { + for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) { + if (avctx->sample_fmt == avctx->codec->sample_fmts[i]) + break; +- if (avctx->channels == 1 && ++ if (avctx->ch_layout.nb_channels == 1 && + av_get_planar_sample_fmt(avctx->sample_fmt) == + av_get_planar_sample_fmt(avctx->codec->sample_fmts[i])) { + avctx->sample_fmt = avctx->codec->sample_fmts[i]; +@@ -560,26 +629,6 @@ + return AVERROR(EINVAL); + } + } +- if (avctx->codec->pix_fmts) { +- for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++) +- if (avctx->pix_fmt == avctx->codec->pix_fmts[i]) +- break; +- if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE +- && !(avctx->codec_id == AV_CODEC_ID_MJPEG +- && avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL)) { +- char buf[128]; +- snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt); +- av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n", +- (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf)); +- return AVERROR(EINVAL); +- } +- if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P || +- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P || +- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P || +- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P || +- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P) +- avctx->color_range = AVCOL_RANGE_JPEG; +- } + if (avctx->codec->supported_samplerates) { + for (i = 0; avctx->codec->supported_samplerates[i] != 0; i++) + if (avctx->sample_rate == avctx->codec->supported_samplerates[i]) +@@ -595,52 +644,50 @@ + avctx->sample_rate); + return AVERROR(EINVAL); + } +- if (avctx->codec->channel_layouts) { +- if (!avctx->channel_layout) { +- av_log(avctx, AV_LOG_WARNING, "Channel layout not specified\n"); +- } else { +- for (i = 0; avctx->codec->channel_layouts[i] != 0; i++) +- if (avctx->channel_layout == avctx->codec->channel_layouts[i]) +- break; +- if (avctx->codec->channel_layouts[i] == 0) { +- char buf[512]; +- av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout); +- av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf); +- return AVERROR(EINVAL); +- } ++ if (avctx->codec->ch_layouts) { ++ for (i = 0; avctx->codec->ch_layouts[i].nb_channels; i++) { ++ if (!av_channel_layout_compare(&avctx->ch_layout, &avctx->codec->ch_layouts[i])) ++ break; + } +- } +- if (avctx->channel_layout && avctx->channels) { +- int channels = av_get_channel_layout_nb_channels(avctx->channel_layout); +- if (channels != avctx->channels) { ++ if (!avctx->codec->ch_layouts[i].nb_channels) { + char buf[512]; +- av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout); +- av_log(avctx, AV_LOG_ERROR, +- "Channel layout '%s' with %d channels does not match number of specified channels %d\n", +- buf, channels, avctx->channels); ++ int ret = av_channel_layout_describe(&avctx->ch_layout, buf, sizeof(buf)); ++ if (ret > 0) ++ av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf); + return AVERROR(EINVAL); + } +- } else if (avctx->channel_layout) { +- avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout); + } +- if (avctx->channels < 0) { +- av_log(avctx, AV_LOG_ERROR, "Specified number of channels %d is not supported\n", +- avctx->channels); +- return AVERROR(EINVAL); +- } +- if(avctx->codec_type == AVMEDIA_TYPE_VIDEO) { +- const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt); +- if ( avctx->bits_per_raw_sample < 0 +- || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) { +- av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n", +- avctx->bits_per_raw_sample, pixdesc->comp[0].depth); +- avctx->bits_per_raw_sample = pixdesc->comp[0].depth; +- } +- if (avctx->width <= 0 || avctx->height <= 0) { +- av_log(avctx, AV_LOG_ERROR, "dimensions not set\n"); +- return AVERROR(EINVAL); +- } ++ ++ if (!avctx->bits_per_raw_sample) ++ avctx->bits_per_raw_sample = 8 * av_get_bytes_per_sample(avctx->sample_fmt); ++ ++ return 0; ++} ++ ++int ff_encode_preinit(AVCodecContext *avctx) ++{ ++ AVCodecInternal *avci = avctx->internal; ++ int ret = 0; ++ ++ if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) { ++ av_log(avctx, AV_LOG_ERROR, "The encoder timebase is not set.\n"); ++ return AVERROR(EINVAL); ++ } ++ ++ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE && ++ !(avctx->codec->capabilities & AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE)) { ++ av_log(avctx, AV_LOG_ERROR, "The copy_opaque flag is set, but the " ++ "encoder does not support it.\n"); ++ return AVERROR(EINVAL); ++ } ++ ++ switch (avctx->codec_type) { ++ case AVMEDIA_TYPE_VIDEO: ret = encode_preinit_video(avctx); break; ++ case AVMEDIA_TYPE_AUDIO: ret = encode_preinit_audio(avctx); break; + } ++ if (ret < 0) ++ return ret; ++ + if ( (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO) + && avctx->bit_rate>0 && avctx->bit_rate<1000) { + av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", avctx->bit_rate, avctx->bit_rate); +@@ -649,34 +696,79 @@ + if (!avctx->rc_initial_buffer_occupancy) + avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4; + +- if (avctx->ticks_per_frame && avctx->time_base.num && +- avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { +- av_log(avctx, AV_LOG_ERROR, +- "ticks_per_frame %d too large for the timebase %d/%d.", +- avctx->ticks_per_frame, +- avctx->time_base.num, +- avctx->time_base.den); +- return AVERROR(EINVAL); ++ if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY) ++ avctx->internal->intra_only_flag = AV_PKT_FLAG_KEY; ++ ++ if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_ENCODE) { ++ avci->in_frame = av_frame_alloc(); ++ if (!avci->in_frame) ++ return AVERROR(ENOMEM); + } + +- if (avctx->hw_frames_ctx) { +- AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; +- if (frames_ctx->format != avctx->pix_fmt) { +- av_log(avctx, AV_LOG_ERROR, +- "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n"); +- return AVERROR(EINVAL); ++ if ((avctx->flags & AV_CODEC_FLAG_RECON_FRAME)) { ++ if (!(avctx->codec->capabilities & AV_CODEC_CAP_ENCODER_RECON_FRAME)) { ++ av_log(avctx, AV_LOG_ERROR, "Reconstructed frame output requested " ++ "from an encoder not supporting it\n"); ++ return AVERROR(ENOSYS); + } +- if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE && +- avctx->sw_pix_fmt != frames_ctx->sw_format) { +- av_log(avctx, AV_LOG_ERROR, +- "Mismatching AVCodecContext.sw_pix_fmt (%s) " +- "and AVHWFramesContext.sw_format (%s)\n", +- av_get_pix_fmt_name(avctx->sw_pix_fmt), +- av_get_pix_fmt_name(frames_ctx->sw_format)); +- return AVERROR(EINVAL); ++ ++ avci->recon_frame = av_frame_alloc(); ++ if (!avci->recon_frame) ++ return AVERROR(ENOMEM); ++ } ++ ++ if (CONFIG_FRAME_THREAD_ENCODER) { ++ ret = ff_frame_thread_encoder_init(avctx); ++ if (ret < 0) ++ return ret; ++ } ++ ++ return 0; ++} ++ ++int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame) ++{ ++ int ret; ++ ++ switch (avctx->codec->type) { ++ case AVMEDIA_TYPE_VIDEO: ++ frame->format = avctx->pix_fmt; ++ if (frame->width <= 0 || frame->height <= 0) { ++ frame->width = FFMAX(avctx->width, avctx->coded_width); ++ frame->height = FFMAX(avctx->height, avctx->coded_height); + } +- avctx->sw_pix_fmt = frames_ctx->sw_format; ++ ++ break; ++ case AVMEDIA_TYPE_AUDIO: ++ frame->sample_rate = avctx->sample_rate; ++ frame->format = avctx->sample_fmt; ++ if (!frame->ch_layout.nb_channels) { ++ ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); ++ if (ret < 0) ++ return ret; ++ } ++ break; + } + ++ ret = avcodec_default_get_buffer2(avctx, frame, 0); ++ if (ret < 0) { ++ av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); ++ av_frame_unref(frame); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++int ff_encode_receive_frame(AVCodecContext *avctx, AVFrame *frame) ++{ ++ AVCodecInternal *avci = avctx->internal; ++ ++ if (!avci->recon_frame) ++ return AVERROR(EINVAL); ++ if (!avci->recon_frame->buf[0]) ++ return avci->draining_done ? AVERROR_EOF : AVERROR(EAGAIN); ++ ++ av_frame_move_ref(frame, avci->recon_frame); + return 0; + } +diff -Naur a/media/ffvpx/libavcodec/encode.h b/media/ffvpx/libavcodec/encode.h +--- a/media/ffvpx/libavcodec/encode.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/encode.h 2023-04-06 12:50:24.491176503 +0200 +@@ -27,6 +27,11 @@ + #include "packet.h" + + /** ++ * avcodec_receive_frame() implementation for encoders. ++ */ ++int ff_encode_receive_frame(AVCodecContext *avctx, AVFrame *frame); ++ ++/** + * Called by encoders to get the next frame for encoding. + * + * @param frame An empty frame to be filled with data. +@@ -44,10 +49,51 @@ + */ + int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags); + ++/** ++ * Allocate buffers for a frame. Encoder equivalent to ff_get_buffer(). ++ */ ++int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame); ++ ++/** ++ * Check AVPacket size and allocate data. ++ * ++ * Encoders of type FF_CODEC_CB_TYPE_ENCODE can use this as a convenience to ++ * obtain a big enough buffer for the encoded bitstream. ++ * ++ * @param avctx the AVCodecContext of the encoder ++ * @param avpkt The AVPacket: on success, avpkt->data will point to a buffer ++ * of size at least `size`; the packet will not be refcounted. ++ * This packet must be initially blank. ++ * @param size an upper bound of the size of the packet to encode ++ * @return non negative on success, negative error code on failure ++ */ ++int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size); ++ ++/** ++ * Propagate user opaque values from the frame to avctx/pkt as needed. ++ */ ++int ff_encode_reordered_opaque(AVCodecContext *avctx, ++ AVPacket *pkt, const AVFrame *frame); ++ + /* + * Perform encoder initialization and validation. +- * Called when opening the encoder, before the AVCodec.init() call. ++ * Called when opening the encoder, before the FFCodec.init() call. + */ + int ff_encode_preinit(AVCodecContext *avctx); + ++int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, ++ AVFrame *frame, int *got_packet); ++ ++/** ++ * Rescale from sample rate to AVCodecContext.time_base. ++ */ ++static av_always_inline int64_t ff_samples_to_time_base(const AVCodecContext *avctx, ++ int64_t samples) ++{ ++ if (samples == AV_NOPTS_VALUE) ++ return AV_NOPTS_VALUE; ++ return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate }, ++ avctx->time_base); ++} ++ + #endif /* AVCODEC_ENCODE_H */ +diff -Naur a/media/ffvpx/libavcodec/error_resilience.h b/media/ffvpx/libavcodec/error_resilience.h +--- a/media/ffvpx/libavcodec/error_resilience.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/error_resilience.h 2023-04-06 12:50:06.971471053 +0200 +@@ -24,7 +24,7 @@ + + #include "avcodec.h" + #include "me_cmp.h" +-#include "thread.h" ++#include "threadframe.h" + + ///< current MB is the first after a resync marker + #define VP_START 1 +@@ -52,7 +52,8 @@ + + typedef struct ERContext { + AVCodecContext *avctx; +- MECmpContext mecc; ++ ++ me_cmp_func sad; + int mecc_inited; + + int *mb_index2xy; +@@ -74,14 +75,13 @@ + ERPicture last_pic; + ERPicture next_pic; + +- AVBufferRef *ref_index_buf[2]; +- AVBufferRef *motion_val_buf[2]; ++ int8_t *ref_index[2]; ++ int16_t (*motion_val_base[2])[2]; + + uint16_t pp_time; + uint16_t pb_time; + int quarter_sample; + int partitioned_frame; +- int ref_count; + + void (*decode_mb)(void *opaque, int ref, int mv_dir, int mv_type, + int (*mv)[2][4][2], +diff -Naur a/media/ffvpx/libavcodec/fdctdsp.c b/media/ffvpx/libavcodec/fdctdsp.c +--- a/media/ffvpx/libavcodec/fdctdsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/fdctdsp.c 2023-04-06 12:49:40.252394850 +0200 +@@ -25,7 +25,7 @@ + + av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx) + { +- const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; ++ av_unused const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; + + if (avctx->bits_per_raw_sample == 10 || avctx->bits_per_raw_sample == 9) { + c->fdct = ff_jpeg_fdct_islow_10; +@@ -43,8 +43,9 @@ + c->fdct248 = ff_fdct248_islow_8; + } + +- if (ARCH_PPC) +- ff_fdctdsp_init_ppc(c, avctx, high_bit_depth); +- if (ARCH_X86) +- ff_fdctdsp_init_x86(c, avctx, high_bit_depth); ++#if ARCH_PPC ++ ff_fdctdsp_init_ppc(c, avctx, high_bit_depth); ++#elif ARCH_X86 ++ ff_fdctdsp_init_x86(c, avctx, high_bit_depth); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/fft_fixed_32.c b/media/ffvpx/libavcodec/fft_fixed_32.c +--- a/media/ffvpx/libavcodec/fft_fixed_32.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/fft_fixed_32.c 2023-04-06 12:49:40.252394850 +0200 +@@ -48,5 +48,4 @@ + */ + + #define FFT_FLOAT 0 +-#define FFT_FIXED_32 1 + #include "fft_template.c" +diff -Naur a/media/ffvpx/libavcodec/fft_float.c b/media/ffvpx/libavcodec/fft_float.c +--- a/media/ffvpx/libavcodec/fft_float.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/fft_float.c 2023-04-06 12:49:40.252394850 +0200 +@@ -17,5 +17,4 @@ + */ + + #define FFT_FLOAT 1 +-#define FFT_FIXED_32 0 + #include "fft_template.c" +diff -Naur a/media/ffvpx/libavcodec/fft.h b/media/ffvpx/libavcodec/fft.h +--- a/media/ffvpx/libavcodec/fft.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/fft.h 2023-04-06 12:50:06.971471053 +0200 +@@ -26,13 +26,10 @@ + #define FFT_FLOAT 1 + #endif + +-#ifndef FFT_FIXED_32 +-#define FFT_FIXED_32 0 +-#endif +- + #include + #include "config.h" + ++#include "libavutil/attributes_internal.h" + #include "libavutil/mem_internal.h" + + #if FFT_FLOAT +@@ -45,15 +42,11 @@ + + #else + +-#if FFT_FIXED_32 +- + #define Q31(x) (int)((x)*2147483648.0 + 0.5) + #define FFT_NAME(x) x ## _fixed_32 + + typedef int32_t FFTSample; + +-#endif /* FFT_FIXED_32 */ +- + typedef struct FFTComplex { + FFTSample re, im; + } FFTComplex; +@@ -122,7 +115,7 @@ + #endif + + #define COSTABLE(size) \ +- COSTABLE_CONST DECLARE_ALIGNED(32, FFTSample, FFT_NAME(ff_cos_##size))[size/2] ++ COSTABLE_CONST attribute_visibility_hidden DECLARE_ALIGNED(32, FFTSample, FFT_NAME(ff_cos_##size))[size/2] + + extern COSTABLE(16); + extern COSTABLE(32); +diff -Naur a/media/ffvpx/libavcodec/fft-internal.h b/media/ffvpx/libavcodec/fft-internal.h +--- a/media/ffvpx/libavcodec/fft-internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/fft-internal.h 2023-04-06 12:49:40.252394850 +0200 +@@ -19,6 +19,9 @@ + #ifndef AVCODEC_FFT_INTERNAL_H + #define AVCODEC_FFT_INTERNAL_H + ++#include "libavutil/mathematics.h" ++#include "fft.h" ++ + #if FFT_FLOAT + + #define FIX15(v) (v) +@@ -36,10 +39,6 @@ + + #else /* FFT_FLOAT */ + +-#define SCALE_FLOAT(a, bits) lrint((a) * (double)(1 << (bits))) +- +-#if FFT_FIXED_32 +- + #define CMUL(dre, dim, are, aim, bre, bim) do { \ + int64_t accu; \ + (accu) = (int64_t)(bre) * (are); \ +@@ -50,10 +49,6 @@ + (dim) = (int)(((accu) + 0x40000000) >> 31); \ + } while (0) + +-#define FIX15(a) av_clip(SCALE_FLOAT(a, 31), -2147483647, 2147483647) +- +-#endif /* FFT_FIXED_32 */ +- + #endif /* FFT_FLOAT */ + + #define ff_imdct_calc_c FFT_NAME(ff_imdct_calc_c) +diff -Naur a/media/ffvpx/libavcodec/fft_template.c b/media/ffvpx/libavcodec/fft_template.c +--- a/media/ffvpx/libavcodec/fft_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/fft_template.c 2023-04-06 12:49:40.252394850 +0200 +@@ -33,9 +33,9 @@ + #include "fft.h" + #include "fft-internal.h" + +-#if FFT_FIXED_32 ++#if !FFT_FLOAT + #include "fft_table.h" +-#else /* FFT_FIXED_32 */ ++#else /* !FFT_FLOAT */ + + /* cos(2*pi*x/n) for 0<=x<=n/4, followed by its reverse */ + #if !CONFIG_HARDCODED_TABLES +@@ -136,7 +136,7 @@ + FFT_NAME(ff_cos_131072), + }; + +-#endif /* FFT_FIXED_32 */ ++#endif /* FFT_FLOAT */ + + static void fft_permute_c(FFTContext *s, FFTComplex *z); + static void fft_calc_c(FFTContext *s, FFTComplex *z); +@@ -226,20 +226,25 @@ + s->mdct_calc = ff_mdct_calc_c; + #endif + +-#if FFT_FIXED_32 +- ff_fft_lut_init(); +-#else /* FFT_FIXED_32 */ + #if FFT_FLOAT +- if (ARCH_AARCH64) ff_fft_init_aarch64(s); +- if (ARCH_ARM) ff_fft_init_arm(s); +- if (ARCH_PPC) ff_fft_init_ppc(s); +- if (ARCH_X86) ff_fft_init_x86(s); +- if (HAVE_MIPSFPU) ff_fft_init_mips(s); ++#if ARCH_AARCH64 ++ ff_fft_init_aarch64(s); ++#elif ARCH_ARM ++ ff_fft_init_arm(s); ++#elif ARCH_PPC ++ ff_fft_init_ppc(s); ++#elif ARCH_X86 ++ ff_fft_init_x86(s); ++#endif ++#if HAVE_MIPSFPU ++ ff_fft_init_mips(s); + #endif + for(j=4; j<=nbits; j++) { + ff_init_ff_cos_tabs(j); + } +-#endif /* FFT_FIXED_32 */ ++#else /* FFT_FLOAT */ ++ ff_fft_lut_init(); ++#endif + + + if (ARCH_X86 && FFT_FLOAT && s->fft_permutation == FF_FFT_PERM_AVX) { +@@ -312,7 +317,7 @@ + av_freep(&s->tmp_buf); + } + +-#if FFT_FIXED_32 ++#if !FFT_FLOAT + + static void fft_calc_c(FFTContext *s, FFTComplex *z) { + +@@ -470,7 +475,7 @@ + } + } + +-#else /* FFT_FIXED_32 */ ++#else /* !FFT_FLOAT */ + + #define BUTTERFLIES(a0,a1,a2,a3) {\ + BF(t3, t5, t5, t1);\ +@@ -620,4 +625,4 @@ + { + fft_dispatch[s->nbits-2](z); + } +-#endif /* FFT_FIXED_32 */ ++#endif /* !FFT_FLOAT */ +diff -Naur a/media/ffvpx/libavcodec/flac.c b/media/ffvpx/libavcodec/flac.c +--- a/media/ffvpx/libavcodec/flac.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flac.c 2023-04-06 12:50:24.491176503 +0200 +@@ -26,18 +26,19 @@ + #include "get_bits.h" + #include "flac.h" + #include "flacdata.h" ++#include "flac_parse.h" + +-static const int8_t sample_size_table[] = { 0, 8, 12, 0, 16, 20, 24, 0 }; ++static const int8_t sample_size_table[] = { 0, 8, 12, 0, 16, 20, 24, 32 }; + +-static const uint64_t flac_channel_layouts[8] = { +- AV_CH_LAYOUT_MONO, +- AV_CH_LAYOUT_STEREO, +- AV_CH_LAYOUT_SURROUND, +- AV_CH_LAYOUT_QUAD, +- AV_CH_LAYOUT_5POINT0, +- AV_CH_LAYOUT_5POINT1, +- AV_CH_LAYOUT_6POINT1, +- AV_CH_LAYOUT_7POINT1 ++static const AVChannelLayout flac_channel_layouts[8] = { ++ AV_CHANNEL_LAYOUT_MONO, ++ AV_CHANNEL_LAYOUT_STEREO, ++ AV_CHANNEL_LAYOUT_SURROUND, ++ AV_CHANNEL_LAYOUT_QUAD, ++ AV_CHANNEL_LAYOUT_5POINT0, ++ AV_CHANNEL_LAYOUT_5POINT1, ++ AV_CHANNEL_LAYOUT_6POINT1, ++ AV_CHANNEL_LAYOUT_7POINT1 + }; + + static int64_t get_utf8(GetBitContext *gb) +@@ -81,7 +82,7 @@ + + /* bits per sample */ + bps_code = get_bits(gb, 3); +- if (bps_code == 3 || bps_code == 7) { ++ if (bps_code == 3) { + av_log(avctx, AV_LOG_ERROR + log_level_offset, + "invalid sample size code (%d)\n", + bps_code); +@@ -145,29 +146,7 @@ + return 0; + } + +-int ff_flac_get_max_frame_size(int blocksize, int ch, int bps) +-{ +- /* Technically, there is no limit to FLAC frame size, but an encoder +- should not write a frame that is larger than if verbatim encoding mode +- were to be used. */ +- +- int count; +- +- count = 16; /* frame header */ +- count += ch * ((7+bps+7)/8); /* subframe headers */ +- if (ch == 2) { +- /* for stereo, need to account for using decorrelation */ +- count += (( 2*bps+1) * blocksize + 7) / 8; +- } else { +- count += ( ch*bps * blocksize + 7) / 8; +- } +- count += 2; /* frame footer */ +- +- return count; +-} +- + int ff_flac_is_extradata_valid(AVCodecContext *avctx, +- enum FLACExtradataFormat *format, + uint8_t **streaminfo_start) + { + if (!avctx->extradata || avctx->extradata_size < FLAC_STREAMINFO_SIZE) { +@@ -180,25 +159,29 @@ + av_log(avctx, AV_LOG_WARNING, "extradata contains %d bytes too many.\n", + FLAC_STREAMINFO_SIZE-avctx->extradata_size); + } +- *format = FLAC_EXTRADATA_FORMAT_STREAMINFO; + *streaminfo_start = avctx->extradata; + } else { + if (avctx->extradata_size < 8+FLAC_STREAMINFO_SIZE) { + av_log(avctx, AV_LOG_ERROR, "extradata too small.\n"); + return 0; + } +- *format = FLAC_EXTRADATA_FORMAT_FULL_HEADER; + *streaminfo_start = &avctx->extradata[8]; + } + return 1; + } + +-void ff_flac_set_channel_layout(AVCodecContext *avctx) ++void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels) + { +- if (avctx->channels <= FF_ARRAY_ELEMS(flac_channel_layouts)) +- avctx->channel_layout = flac_channel_layouts[avctx->channels - 1]; ++ if (channels == avctx->ch_layout.nb_channels && ++ avctx->ch_layout.order != AV_CHANNEL_ORDER_UNSPEC) ++ return; ++ ++ av_channel_layout_uninit(&avctx->ch_layout); ++ if (channels <= FF_ARRAY_ELEMS(flac_channel_layouts)) ++ avctx->ch_layout = flac_channel_layouts[channels - 1]; + else +- avctx->channel_layout = 0; ++ avctx->ch_layout = (AVChannelLayout){ .order = AV_CHANNEL_ORDER_UNSPEC, ++ .nb_channels = channels }; + } + + int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, +@@ -229,13 +212,9 @@ + return AVERROR_INVALIDDATA; + } + +- avctx->channels = s->channels; + avctx->sample_rate = s->samplerate; + avctx->bits_per_raw_sample = s->bps; +- +- if (!avctx->channel_layout || +- av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) +- ff_flac_set_channel_layout(avctx); ++ ff_flac_set_channel_layout(avctx, s->channels); + + s->samples = get_bits64(&gb, 36); + +diff -Naur a/media/ffvpx/libavcodec/flacdata.c b/media/ffvpx/libavcodec/flacdata.c +--- a/media/ffvpx/libavcodec/flacdata.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdata.c 2023-04-06 12:49:40.253394890 +0200 +@@ -19,7 +19,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "internal.h" ++#include "flacdata.h" + + const int ff_flac_sample_rate_table[16] = + { 0, +diff -Naur a/media/ffvpx/libavcodec/flacdata.h b/media/ffvpx/libavcodec/flacdata.h +--- a/media/ffvpx/libavcodec/flacdata.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdata.h 2023-04-06 12:49:40.253394890 +0200 +@@ -22,7 +22,7 @@ + #ifndef AVCODEC_FLACDATA_H + #define AVCODEC_FLACDATA_H + +-#include "internal.h" ++#include + + extern const int ff_flac_sample_rate_table[16]; + +diff -Naur a/media/ffvpx/libavcodec/flacdec.c b/media/ffvpx/libavcodec/flacdec.c +--- a/media/ffvpx/libavcodec/flacdec.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdec.c 2023-04-06 12:50:24.491176503 +0200 +@@ -37,20 +37,21 @@ + #include "libavutil/crc.h" + #include "libavutil/opt.h" + #include "avcodec.h" +-#include "internal.h" ++#include "codec_internal.h" + #include "get_bits.h" + #include "bytestream.h" + #include "golomb.h" + #include "flac.h" + #include "flacdata.h" + #include "flacdsp.h" ++#include "flac_parse.h" + #include "thread.h" + #include "unary.h" + + + typedef struct FLACContext { + AVClass *class; +- struct FLACStreaminfo flac_stream_info; ++ FLACStreaminfo stream_info; + + AVCodecContext *avctx; ///< parent AVCodecContext + GetBitContext gb; ///< GetBitContext initialized to start at the current frame +@@ -63,6 +64,9 @@ + int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples + uint8_t *decoded_buffer; + unsigned int decoded_buffer_size; ++ int64_t *decoded_33bps; ///< decoded samples for a 33 bps subframe ++ uint8_t *decoded_buffer_33bps; ++ unsigned int decoded_buffer_size_33bps; + int buggy_lpc; ///< use workaround for old lavc encoded files + + FLACDSPContext dsp; +@@ -73,7 +77,7 @@ + static void flac_set_bps(FLACContext *s) + { + enum AVSampleFormat req = s->avctx->request_sample_fmt; +- int need32 = s->flac_stream_info.bps > 16; ++ int need32 = s->stream_info.bps > 16; + int want32 = av_get_bytes_per_sample(req) > 2; + int planar = av_sample_fmt_is_planar(req); + +@@ -82,19 +86,18 @@ + s->avctx->sample_fmt = AV_SAMPLE_FMT_S32P; + else + s->avctx->sample_fmt = AV_SAMPLE_FMT_S32; +- s->sample_shift = 32 - s->flac_stream_info.bps; ++ s->sample_shift = 32 - s->stream_info.bps; + } else { + if (planar) + s->avctx->sample_fmt = AV_SAMPLE_FMT_S16P; + else + s->avctx->sample_fmt = AV_SAMPLE_FMT_S16; +- s->sample_shift = 16 - s->flac_stream_info.bps; ++ s->sample_shift = 16 - s->stream_info.bps; + } + } + + static av_cold int flac_decode_init(AVCodecContext *avctx) + { +- enum FLACExtradataFormat format; + uint8_t *streaminfo; + int ret; + FLACContext *s = avctx->priv_data; +@@ -105,11 +108,11 @@ + if (!avctx->extradata) + return 0; + +- if (!ff_flac_is_extradata_valid(avctx, &format, &streaminfo)) ++ if (!ff_flac_is_extradata_valid(avctx, &streaminfo)) + return AVERROR_INVALIDDATA; + + /* initialize based on the demuxer-supplied streamdata header */ +- ret = ff_flac_parse_streaminfo(avctx, &s->flac_stream_info, streaminfo); ++ ret = ff_flac_parse_streaminfo(avctx, &s->stream_info, streaminfo); + if (ret < 0) + return ret; + ret = allocate_buffers(s); +@@ -117,7 +120,7 @@ + return ret; + flac_set_bps(s); + ff_flacdsp_init(&s->dsp, avctx->sample_fmt, +- s->flac_stream_info.channels, s->flac_stream_info.bps); ++ s->stream_info.channels); + s->got_streaminfo = 1; + + return 0; +@@ -137,10 +140,10 @@ + int buf_size; + int ret; + +- av_assert0(s->flac_stream_info.max_blocksize); ++ av_assert0(s->stream_info.max_blocksize); + +- buf_size = av_samples_get_buffer_size(NULL, s->flac_stream_info.channels, +- s->flac_stream_info.max_blocksize, ++ buf_size = av_samples_get_buffer_size(NULL, s->stream_info.channels, ++ s->stream_info.max_blocksize, + AV_SAMPLE_FMT_S32P, 0); + if (buf_size < 0) + return buf_size; +@@ -151,9 +154,27 @@ + + ret = av_samples_fill_arrays((uint8_t **)s->decoded, NULL, + s->decoded_buffer, +- s->flac_stream_info.channels, +- s->flac_stream_info.max_blocksize, ++ s->stream_info.channels, ++ s->stream_info.max_blocksize, + AV_SAMPLE_FMT_S32P, 0); ++ if (ret >= 0 && s->stream_info.bps == 32 && s->stream_info.channels == 2) { ++ buf_size = av_samples_get_buffer_size(NULL, 1, ++ s->stream_info.max_blocksize, ++ AV_SAMPLE_FMT_S64P, 0); ++ if (buf_size < 0) ++ return buf_size; ++ ++ av_fast_malloc(&s->decoded_buffer_33bps, &s->decoded_buffer_size_33bps, buf_size); ++ if (!s->decoded_buffer_33bps) ++ return AVERROR(ENOMEM); ++ ++ ret = av_samples_fill_arrays((uint8_t **)&s->decoded_33bps, NULL, ++ s->decoded_buffer_33bps, ++ 1, ++ s->stream_info.max_blocksize, ++ AV_SAMPLE_FMT_S64P, 0); ++ ++ } + return ret < 0 ? ret : 0; + } + +@@ -177,7 +198,7 @@ + metadata_size != FLAC_STREAMINFO_SIZE) { + return AVERROR_INVALIDDATA; + } +- ret = ff_flac_parse_streaminfo(s->avctx, &s->flac_stream_info, &buf[8]); ++ ret = ff_flac_parse_streaminfo(s->avctx, &s->stream_info, &buf[8]); + if (ret < 0) + return ret; + ret = allocate_buffers(s); +@@ -185,7 +206,7 @@ + return ret; + flac_set_bps(s); + ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, +- s->flac_stream_info.channels, s->flac_stream_info.bps); ++ s->stream_info.channels); + s->got_streaminfo = 1; + + return 0; +@@ -260,7 +281,7 @@ + for (; i < samples; i++) + *decoded++ = get_sbits_long(&gb, tmp); + } else { +- int real_limit = tmp ? (INT_MAX >> tmp) + 2 : INT_MAX; ++ int real_limit = (tmp > 1) ? (INT_MAX >> (tmp - 1)) + 2 : INT_MAX; + for (; i < samples; i++) { + int v = get_sr_golomb_flac(&gb, tmp, real_limit, 1); + if (v == 0x80000000){ +@@ -331,6 +352,62 @@ + return 0; + } + ++#define DECODER_SUBFRAME_FIXED_WIDE(residual) { \ ++ const int blocksize = s->blocksize; \ ++ int ret; \ ++ \ ++ if ((ret = decode_residuals(s, residual, pred_order)) < 0) \ ++ return ret; \ ++ \ ++ switch (pred_order) { \ ++ case 0: \ ++ for (int i = pred_order; i < blocksize; i++) \ ++ decoded[i] = residual[i]; \ ++ break; \ ++ case 1: \ ++ for (int i = pred_order; i < blocksize; i++) \ ++ decoded[i] = (int64_t)residual[i] + (int64_t)decoded[i-1];\ ++ break; \ ++ case 2: \ ++ for (int i = pred_order; i < blocksize; i++) \ ++ decoded[i] = (int64_t)residual[i] + 2*(int64_t)decoded[i-1] - (int64_t)decoded[i-2]; \ ++ break; \ ++ case 3: \ ++ for (int i = pred_order; i < blocksize; i++) \ ++ decoded[i] = (int64_t)residual[i] + 3*(int64_t)decoded[i-1] - 3*(int64_t)decoded[i-2] + (int64_t)decoded[i-3]; \ ++ break; \ ++ case 4: \ ++ for (int i = pred_order; i < blocksize; i++) \ ++ decoded[i] = (int64_t)residual[i] + 4*(int64_t)decoded[i-1] - 6*(int64_t)decoded[i-2] + 4*(int64_t)decoded[i-3] - (int64_t)decoded[i-4]; \ ++ break; \ ++ default: \ ++ av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order); \ ++ return AVERROR_INVALIDDATA; \ ++ } \ ++ return 0; \ ++} ++ ++static int decode_subframe_fixed_wide(FLACContext *s, int32_t *decoded, ++ int pred_order, int bps) ++{ ++ /* warm up samples */ ++ for (int i = 0; i < pred_order; i++) { ++ decoded[i] = get_sbits_long(&s->gb, bps); ++ } ++ DECODER_SUBFRAME_FIXED_WIDE(decoded); ++} ++ ++ ++static int decode_subframe_fixed_33bps(FLACContext *s, int64_t *decoded, ++ int32_t *residual, int pred_order) ++{ ++ /* warm up samples */ \ ++ for (int i = 0; i < pred_order; i++) { \ ++ decoded[i] = get_sbits64(&s->gb, 33); \ ++ } \ ++ DECODER_SUBFRAME_FIXED_WIDE(residual); ++} ++ + static void lpc_analyze_remodulate(SUINT32 *decoded, const int coeffs[32], + int order, int qlevel, int len, int bps) + { +@@ -389,25 +466,66 @@ + if ((ret = decode_residuals(s, decoded, pred_order)) < 0) + return ret; + +- if ( ( s->buggy_lpc && s->flac_stream_info.bps <= 16) ++ if ( ( s->buggy_lpc && s->stream_info.bps <= 16) + || ( !s->buggy_lpc && bps <= 16 + && bps + coeff_prec + av_log2(pred_order) <= 32)) { + s->dsp.lpc16(decoded, coeffs, pred_order, qlevel, s->blocksize); + } else { + s->dsp.lpc32(decoded, coeffs, pred_order, qlevel, s->blocksize); +- if (s->flac_stream_info.bps <= 16) ++ if (s->stream_info.bps <= 16) + lpc_analyze_remodulate(decoded, coeffs, pred_order, qlevel, s->blocksize, bps); + } + + return 0; + } + ++static int decode_subframe_lpc_33bps(FLACContext *s, int64_t *decoded, ++ int32_t *residual, int pred_order) ++{ ++ int i, j, ret; ++ int coeff_prec, qlevel; ++ int coeffs[32]; ++ ++ /* warm up samples */ ++ for (i = 0; i < pred_order; i++) { ++ decoded[i] = get_sbits64(&s->gb, 33); ++ } ++ ++ coeff_prec = get_bits(&s->gb, 4) + 1; ++ if (coeff_prec == 16) { ++ av_log(s->avctx, AV_LOG_ERROR, "invalid coeff precision\n"); ++ return AVERROR_INVALIDDATA; ++ } ++ qlevel = get_sbits(&s->gb, 5); ++ if (qlevel < 0) { ++ av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n", ++ qlevel); ++ return AVERROR_INVALIDDATA; ++ } ++ ++ for (i = 0; i < pred_order; i++) { ++ coeffs[pred_order - i - 1] = get_sbits(&s->gb, coeff_prec); ++ } ++ ++ if ((ret = decode_residuals(s, residual, pred_order)) < 0) ++ return ret; ++ ++ for (i = pred_order; i < s->blocksize; i++, decoded++) { ++ int64_t sum = 0; ++ for (j = 0; j < pred_order; j++) ++ sum += (int64_t)coeffs[j] * decoded[j]; ++ decoded[j] = residual[i] + (sum >> qlevel); ++ } ++ ++ return 0; ++} ++ + static inline int decode_subframe(FLACContext *s, int channel) + { + int32_t *decoded = s->decoded[channel]; + int type, wasted = 0; +- int bps = s->flac_stream_info.bps; +- int i, tmp, ret; ++ int bps = s->stream_info.bps; ++ int i, ret; + + if (channel == 0) { + if (s->ch_mode == FLAC_CHMODE_RIGHT_SIDE) +@@ -427,7 +545,7 @@ + int left = get_bits_left(&s->gb); + if ( left <= 0 || + (left < bps && !show_bits_long(&s->gb, left)) || +- !show_bits_long(&s->gb, bps)) { ++ !show_bits_long(&s->gb, bps-1)) { + av_log(s->avctx, AV_LOG_ERROR, + "Invalid number of wasted bits > available bits (%d) - left=%d\n", + bps, left); +@@ -436,34 +554,63 @@ + wasted = 1 + get_unary(&s->gb, 1, get_bits_left(&s->gb)); + bps -= wasted; + } +- if (bps > 32) { +- avpriv_report_missing_feature(s->avctx, "Decorrelated bit depth > 32"); +- return AVERROR_PATCHWELCOME; +- } + + //FIXME use av_log2 for types + if (type == 0) { +- tmp = get_sbits_long(&s->gb, bps); +- for (i = 0; i < s->blocksize; i++) +- decoded[i] = tmp; ++ if (bps < 33) { ++ int32_t tmp = get_sbits_long(&s->gb, bps); ++ for (i = 0; i < s->blocksize; i++) ++ decoded[i] = tmp; ++ } else { ++ int64_t tmp = get_sbits64(&s->gb, 33); ++ for (i = 0; i < s->blocksize; i++) ++ s->decoded_33bps[i] = tmp; ++ } + } else if (type == 1) { +- for (i = 0; i < s->blocksize; i++) +- decoded[i] = get_sbits_long(&s->gb, bps); ++ if (bps < 33) { ++ for (i = 0; i < s->blocksize; i++) ++ decoded[i] = get_sbits_long(&s->gb, bps); ++ } else { ++ for (i = 0; i < s->blocksize; i++) ++ s->decoded_33bps[i] = get_sbits64(&s->gb, 33); ++ } + } else if ((type >= 8) && (type <= 12)) { +- if ((ret = decode_subframe_fixed(s, decoded, type & ~0x8, bps)) < 0) +- return ret; ++ int order = type & ~0x8; ++ if (bps < 33) { ++ if (bps + order <= 32) { ++ if ((ret = decode_subframe_fixed(s, decoded, order, bps)) < 0) ++ return ret; ++ } else { ++ if ((ret = decode_subframe_fixed_wide(s, decoded, order, bps)) < 0) ++ return ret; ++ } ++ } else { ++ if ((ret = decode_subframe_fixed_33bps(s, s->decoded_33bps, decoded, order)) < 0) ++ return ret; ++ } + } else if (type >= 32) { +- if ((ret = decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps)) < 0) +- return ret; ++ if (bps < 33) { ++ if ((ret = decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps)) < 0) ++ return ret; ++ } else { ++ if ((ret = decode_subframe_lpc_33bps(s, s->decoded_33bps, decoded, (type & ~0x20)+1)) < 0) ++ return ret; ++ } + } else { + av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n"); + return AVERROR_INVALIDDATA; + } + +- if (wasted && wasted < 32) { +- int i; +- for (i = 0; i < s->blocksize; i++) +- decoded[i] = (unsigned)decoded[i] << wasted; ++ if (wasted) { ++ if (wasted+bps == 33) { ++ int i; ++ for (i = 0; i < s->blocksize; i++) ++ s->decoded_33bps[i] = (uint64_t)decoded[i] << wasted; ++ } else if (wasted < 32) { ++ int i; ++ for (i = 0; i < s->blocksize; i++) ++ decoded[i] = (unsigned)decoded[i] << wasted; ++ } + } + + return 0; +@@ -480,69 +627,68 @@ + return ret; + } + +- if ( s->flac_stream_info.channels +- && fi.channels != s->flac_stream_info.channels ++ if ( s->stream_info.channels ++ && fi.channels != s->stream_info.channels + && s->got_streaminfo) { +- s->flac_stream_info.channels = s->avctx->channels = fi.channels; +- ff_flac_set_channel_layout(s->avctx); ++ s->stream_info.channels = fi.channels; ++ ff_flac_set_channel_layout(s->avctx, fi.channels); + ret = allocate_buffers(s); + if (ret < 0) + return ret; + } +- s->flac_stream_info.channels = s->avctx->channels = fi.channels; +- if (!s->avctx->channel_layout) +- ff_flac_set_channel_layout(s->avctx); ++ s->stream_info.channels = fi.channels; ++ ff_flac_set_channel_layout(s->avctx, fi.channels); + s->ch_mode = fi.ch_mode; + +- if (!s->flac_stream_info.bps && !fi.bps) { ++ if (!s->stream_info.bps && !fi.bps) { + av_log(s->avctx, AV_LOG_ERROR, "bps not found in STREAMINFO or frame header\n"); + return AVERROR_INVALIDDATA; + } + if (!fi.bps) { +- fi.bps = s->flac_stream_info.bps; +- } else if (s->flac_stream_info.bps && fi.bps != s->flac_stream_info.bps) { ++ fi.bps = s->stream_info.bps; ++ } else if (s->stream_info.bps && fi.bps != s->stream_info.bps) { + av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not " + "supported\n"); + return AVERROR_INVALIDDATA; + } + +- if (!s->flac_stream_info.bps) { +- s->flac_stream_info.bps = s->avctx->bits_per_raw_sample = fi.bps; ++ if (!s->stream_info.bps) { ++ s->stream_info.bps = s->avctx->bits_per_raw_sample = fi.bps; + flac_set_bps(s); + } + +- if (!s->flac_stream_info.max_blocksize) +- s->flac_stream_info.max_blocksize = FLAC_MAX_BLOCKSIZE; +- if (fi.blocksize > s->flac_stream_info.max_blocksize) { ++ if (!s->stream_info.max_blocksize) ++ s->stream_info.max_blocksize = FLAC_MAX_BLOCKSIZE; ++ if (fi.blocksize > s->stream_info.max_blocksize) { + av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", fi.blocksize, +- s->flac_stream_info.max_blocksize); ++ s->stream_info.max_blocksize); + return AVERROR_INVALIDDATA; + } + s->blocksize = fi.blocksize; + +- if (!s->flac_stream_info.samplerate && !fi.samplerate) { ++ if (!s->stream_info.samplerate && !fi.samplerate) { + av_log(s->avctx, AV_LOG_ERROR, "sample rate not found in STREAMINFO" + " or frame header\n"); + return AVERROR_INVALIDDATA; + } + if (fi.samplerate == 0) +- fi.samplerate = s->flac_stream_info.samplerate; +- s->flac_stream_info.samplerate = s->avctx->sample_rate = fi.samplerate; ++ fi.samplerate = s->stream_info.samplerate; ++ s->stream_info.samplerate = s->avctx->sample_rate = fi.samplerate; + + if (!s->got_streaminfo) { + ret = allocate_buffers(s); + if (ret < 0) + return ret; + s->got_streaminfo = 1; +- dump_headers(s->avctx, &s->flac_stream_info); ++ dump_headers(s->avctx, &s->stream_info); + } + ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, +- s->flac_stream_info.channels, s->flac_stream_info.bps); ++ s->stream_info.channels); + +-// dump_headers(s->avctx, &s->flac_stream_info); ++// dump_headers(s->avctx, &s->stream_info); + + /* subframes */ +- for (i = 0; i < s->flac_stream_info.channels; i++) { ++ for (i = 0; i < s->stream_info.channels; i++) { + if ((ret = decode_subframe(s, i)) < 0) + return ret; + } +@@ -555,11 +701,29 @@ + return 0; + } + +-static int flac_decode_frame(AVCodecContext *avctx, void *data, ++static void decorrelate_33bps(int ch_mode, int32_t **decoded, int64_t *decoded_33bps, int len) ++{ ++ int i; ++ if (ch_mode == FLAC_CHMODE_LEFT_SIDE ) { ++ for (i = 0; i < len; i++) ++ decoded[1][i] = decoded[0][i] - decoded_33bps[i]; ++ } else if (ch_mode == FLAC_CHMODE_RIGHT_SIDE ) { ++ for (i = 0; i < len; i++) ++ decoded[0][i] = decoded[1][i] + decoded_33bps[i]; ++ } else if (ch_mode == FLAC_CHMODE_MID_SIDE ) { ++ for (i = 0; i < len; i++) { ++ uint64_t a = decoded[0][i]; ++ int64_t b = decoded_33bps[i]; ++ a -= b >> 1; ++ decoded[0][i] = (a + b); ++ decoded[1][i] = a; ++ } ++ } ++} ++ ++static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame, + int *got_frame_ptr, AVPacket *avpkt) + { +- AVFrame *frame = data; +- ThreadFrame tframe = { .f = data }; + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; + FLACContext *s = avctx->priv_data; +@@ -568,12 +732,6 @@ + + *got_frame_ptr = 0; + +- if (s->flac_stream_info.max_framesize == 0) { +- s->flac_stream_info.max_framesize = +- ff_flac_get_max_frame_size(s->flac_stream_info.max_blocksize ? s->flac_stream_info.max_blocksize : FLAC_MAX_BLOCKSIZE, +- FLAC_MAX_CHANNELS, 32); +- } +- + if (buf_size > 5 && !memcmp(buf, "\177FLAC", 5)) { + av_log(s->avctx, AV_LOG_DEBUG, "skipping flac header packet 1\n"); + return buf_size; +@@ -586,7 +744,7 @@ + + /* check that there is at least the smallest decodable amount of data. + this amount corresponds to the smallest valid FLAC frame possible. +- FF F8 69 02 00 00 9A 00 00 34 46 */ ++ FF F8 69 02 00 00 9A 00 00 34 */ + if (buf_size < FLAC_MIN_FRAME_SIZE) + return buf_size; + +@@ -618,12 +776,18 @@ + + /* get output buffer */ + frame->nb_samples = s->blocksize; +- if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0) ++ if ((ret = ff_thread_get_buffer(avctx, frame, 0)) < 0) + return ret; + +- s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, +- s->flac_stream_info.channels, +- s->blocksize, s->sample_shift); ++ if (s->stream_info.bps == 32 && s->ch_mode > 0) { ++ decorrelate_33bps(s->ch_mode, s->decoded, s->decoded_33bps, s->blocksize); ++ s->dsp.decorrelate[0](frame->data, s->decoded, s->stream_info.channels, ++ s->blocksize, s->sample_shift); ++ } else { ++ s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, ++ s->stream_info.channels, ++ s->blocksize, s->sample_shift); ++ } + + if (bytes_read > buf_size) { + av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", bytes_read - buf_size); +@@ -644,6 +808,7 @@ + FLACContext *s = avctx->priv_data; + + av_freep(&s->decoded_buffer); ++ av_freep(&s->decoded_buffer_33bps); + + return 0; + } +@@ -660,22 +825,22 @@ + .version = LIBAVUTIL_VERSION_INT, + }; + +-AVCodec ff_flac_decoder = { +- .name = "flac", +- .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"), +- .type = AVMEDIA_TYPE_AUDIO, +- .id = AV_CODEC_ID_FLAC, ++const FFCodec ff_flac_decoder = { ++ .p.name = "flac", ++ CODEC_LONG_NAME("FLAC (Free Lossless Audio Codec)"), ++ .p.type = AVMEDIA_TYPE_AUDIO, ++ .p.id = AV_CODEC_ID_FLAC, + .priv_data_size = sizeof(FLACContext), + .init = flac_decode_init, + .close = flac_decode_close, +- .decode = flac_decode_frame, +- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | ++ FF_CODEC_DECODE_CB(flac_decode_frame), ++ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_DR1 | + AV_CODEC_CAP_FRAME_THREADS, +- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, ++ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_S32, + AV_SAMPLE_FMT_S32P, + AV_SAMPLE_FMT_NONE }, +- .priv_class = &flac_decoder_class, ++ .p.priv_class = &flac_decoder_class, + }; +diff -Naur a/media/ffvpx/libavcodec/flacdsp.c b/media/ffvpx/libavcodec/flacdsp.c +--- a/media/ffvpx/libavcodec/flacdsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdsp.c 2023-04-06 12:50:06.972471094 +0200 +@@ -19,6 +19,7 @@ + */ + + #include "libavutil/attributes.h" ++#include "libavutil/internal.h" + #include "libavutil/samplefmt.h" + #include "flacdsp.h" + #include "config.h" +@@ -26,7 +27,6 @@ + #define SAMPLE_SIZE 16 + #define PLANAR 0 + #include "flacdsp_template.c" +-#include "flacdsp_lpc_template.c" + + #undef PLANAR + #define PLANAR 1 +@@ -37,7 +37,6 @@ + #define SAMPLE_SIZE 32 + #define PLANAR 0 + #include "flacdsp_template.c" +-#include "flacdsp_lpc_template.c" + + #undef PLANAR + #define PLANAR 1 +@@ -85,13 +84,10 @@ + + } + +-av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, +- int bps) ++av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels) + { + c->lpc16 = flac_lpc_16_c; + c->lpc32 = flac_lpc_32_c; +- c->lpc16_encode = flac_lpc_encode_c_16; +- c->lpc32_encode = flac_lpc_encode_c_32; + + switch (fmt) { + case AV_SAMPLE_FMT_S32: +@@ -123,8 +119,9 @@ + break; + } + +- if (ARCH_ARM) +- ff_flacdsp_init_arm(c, fmt, channels, bps); +- if (ARCH_X86) +- ff_flacdsp_init_x86(c, fmt, channels, bps); ++#if ARCH_ARM ++ ff_flacdsp_init_arm(c, fmt, channels); ++#elif ARCH_X86 ++ ff_flacdsp_init_x86(c, fmt, channels); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/flacdsp.h b/media/ffvpx/libavcodec/flacdsp.h +--- a/media/ffvpx/libavcodec/flacdsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdsp.h 2023-04-06 12:50:06.972471094 +0200 +@@ -20,7 +20,7 @@ + #define AVCODEC_FLACDSP_H + + #include +-#include "libavutil/internal.h" ++ + #include "libavutil/samplefmt.h" + + typedef struct FLACDSPContext { +@@ -36,8 +36,8 @@ + const int32_t coefs[32], int shift); + } FLACDSPContext; + +-void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps); +-void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps); +-void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps); ++void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels); ++void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels); ++void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels); + + #endif /* AVCODEC_FLACDSP_H */ +diff -Naur a/media/ffvpx/libavcodec/flacdsp_lpc_template.c b/media/ffvpx/libavcodec/flacdsp_lpc_template.c +--- a/media/ffvpx/libavcodec/flacdsp_lpc_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdsp_lpc_template.c 2023-04-06 12:49:40.253394890 +0200 +@@ -17,7 +17,7 @@ + */ + + #include +-#include "libavutil/avutil.h" ++#include "libavutil/common.h" + #include "mathops.h" + + #undef FUNC +diff -Naur a/media/ffvpx/libavcodec/flacdsp_template.c b/media/ffvpx/libavcodec/flacdsp_template.c +--- a/media/ffvpx/libavcodec/flacdsp_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flacdsp_template.c 2023-04-06 12:49:40.253394890 +0200 +@@ -19,7 +19,7 @@ + */ + + #include +-#include "libavutil/avutil.h" ++#include "libavutil/macros.h" + + #undef FUNC + #undef FSUF +@@ -66,8 +66,8 @@ + int i; + + for (i = 0; i < len; i++) { +- int a = in[0][i]; +- int b = in[1][i]; ++ unsigned a = in[0][i]; ++ unsigned b = in[1][i]; + S(samples, 0, i) = a << shift; + S(samples, 1, i) = (a - b) << shift; + } +@@ -80,8 +80,8 @@ + int i; + + for (i = 0; i < len; i++) { +- int a = in[0][i]; +- int b = in[1][i]; ++ unsigned a = in[0][i]; ++ unsigned b = in[1][i]; + S(samples, 0, i) = (a + b) << shift; + S(samples, 1, i) = b << shift; + } +@@ -94,7 +94,7 @@ + int i; + + for (i = 0; i < len; i++) { +- int a = in[0][i]; ++ unsigned a = in[0][i]; + int b = in[1][i]; + a -= b >> 1; + S(samples, 0, i) = (a + b) << shift; +diff -Naur a/media/ffvpx/libavcodec/flac.h b/media/ffvpx/libavcodec/flac.h +--- a/media/ffvpx/libavcodec/flac.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flac.h 2023-04-06 12:50:06.971471053 +0200 +@@ -1,5 +1,5 @@ + /* +- * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions ++ * FLAC (Free Lossless Audio Codec) common stuff + * Copyright (c) 2008 Justin Ruggles + * + * This file is part of FFmpeg. +@@ -21,21 +21,19 @@ + + /** + * @file +- * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions ++ * FLAC (Free Lossless Audio Codec) common stuff + */ + + #ifndef AVCODEC_FLAC_H + #define AVCODEC_FLAC_H + +-#include "avcodec.h" +-#include "bytestream.h" +-#include "get_bits.h" ++#include "libavutil/intreadwrite.h" + + #define FLAC_STREAMINFO_SIZE 34 + #define FLAC_MAX_CHANNELS 8 + #define FLAC_MIN_BLOCKSIZE 16 + #define FLAC_MAX_BLOCKSIZE 65535 +-#define FLAC_MIN_FRAME_SIZE 11 ++#define FLAC_MIN_FRAME_SIZE 10 + + enum { + FLAC_CHMODE_INDEPENDENT = 0, +@@ -55,84 +53,6 @@ + FLAC_METADATA_TYPE_INVALID = 127 + }; + +-enum FLACExtradataFormat { +- FLAC_EXTRADATA_FORMAT_STREAMINFO = 0, +- FLAC_EXTRADATA_FORMAT_FULL_HEADER = 1 +-}; +- +-#define FLACCOMMONINFO \ +- int samplerate; /**< sample rate */\ +- int channels; /**< number of channels */\ +- int bps; /**< bits-per-sample */\ +- +-/** +- * Data needed from the Streaminfo header for use by the raw FLAC demuxer +- * and/or the FLAC decoder. +- */ +-#define FLACSTREAMINFO \ +- FLACCOMMONINFO \ +- int max_blocksize; /**< maximum block size, in samples */\ +- int max_framesize; /**< maximum frame size, in bytes */\ +- int64_t samples; /**< total number of samples */\ +- +-typedef struct FLACStreaminfo { +- FLACSTREAMINFO +-} FLACStreaminfo; +- +-typedef struct FLACFrameInfo { +- FLACCOMMONINFO +- int blocksize; /**< block size of the frame */ +- int ch_mode; /**< channel decorrelation mode */ +- int64_t frame_or_sample_num; /**< frame number or sample number */ +- int is_var_size; /**< specifies if the stream uses variable +- block sizes or a fixed block size; +- also determines the meaning of +- frame_or_sample_num */ +-} FLACFrameInfo; +- +-/** +- * Parse the Streaminfo metadata block +- * @param[out] avctx codec context to set basic stream parameters +- * @param[out] s where parsed information is stored +- * @param[in] buffer pointer to start of 34-byte streaminfo data +- * +- * @return negative error code on faiure or >= 0 on success +- */ +-int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, +- const uint8_t *buffer); +- +-/** +- * Validate the FLAC extradata. +- * @param[in] avctx codec context containing the extradata. +- * @param[out] format extradata format. +- * @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data. +- * @return 1 if valid, 0 if not valid. +- */ +-int ff_flac_is_extradata_valid(AVCodecContext *avctx, +- enum FLACExtradataFormat *format, +- uint8_t **streaminfo_start); +- +-/** +- * Calculate an estimate for the maximum frame size based on verbatim mode. +- * @param blocksize block size, in samples +- * @param ch number of channels +- * @param bps bits-per-sample +- */ +-int ff_flac_get_max_frame_size(int blocksize, int ch, int bps); +- +-/** +- * Validate and decode a frame header. +- * @param avctx AVCodecContext to use as av_log() context +- * @param gb GetBitContext from which to read frame header +- * @param[out] fi frame information +- * @param log_level_offset log level offset. can be used to silence error messages. +- * @return non-zero on error, 0 if ok +- */ +-int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, +- FLACFrameInfo *fi, int log_level_offset); +- +-void ff_flac_set_channel_layout(AVCodecContext *avctx); +- + /** + * Parse the metadata block parameters from the header. + * @param[in] block_header header data, at least 4 bytes +@@ -143,13 +63,13 @@ + static av_always_inline void flac_parse_block_header(const uint8_t *block_header, + int *last, int *type, int *size) + { +- int tmp = bytestream_get_byte(&block_header); ++ int tmp = *block_header; + if (last) + *last = tmp & 0x80; + if (type) + *type = tmp & 0x7F; + if (size) +- *size = bytestream_get_be24(&block_header); ++ *size = AV_RB24(block_header + 1); + } + + #endif /* AVCODEC_FLAC_H */ +diff -Naur a/media/ffvpx/libavcodec/flac_parse.h b/media/ffvpx/libavcodec/flac_parse.h +--- a/media/ffvpx/libavcodec/flac_parse.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/flac_parse.h 2023-04-06 12:50:06.971471053 +0200 +@@ -0,0 +1,89 @@ ++/* ++ * FLAC (Free Lossless Audio Codec) decoder/parser common functions ++ * Copyright (c) 2008 Justin Ruggles ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * FLAC (Free Lossless Audio Codec) decoder/parser common functions ++ */ ++ ++#ifndef AVCODEC_FLAC_PARSE_H ++#define AVCODEC_FLAC_PARSE_H ++ ++#include "avcodec.h" ++#include "get_bits.h" ++ ++typedef struct FLACStreaminfo { ++ int samplerate; /**< sample rate */ ++ int channels; /**< number of channels */ ++ int bps; /**< bits-per-sample */ ++ int max_blocksize; /**< maximum block size, in samples */ ++ int max_framesize; /**< maximum frame size, in bytes */ ++ int64_t samples; /**< total number of samples */ ++} FLACStreaminfo; ++ ++typedef struct FLACFrameInfo { ++ int samplerate; /**< sample rate */ ++ int channels; /**< number of channels */ ++ int bps; /**< bits-per-sample */ ++ int blocksize; /**< block size of the frame */ ++ int ch_mode; /**< channel decorrelation mode */ ++ int64_t frame_or_sample_num; /**< frame number or sample number */ ++ int is_var_size; /**< specifies if the stream uses variable ++ block sizes or a fixed block size; ++ also determines the meaning of ++ frame_or_sample_num */ ++} FLACFrameInfo; ++ ++/** ++ * Parse the Streaminfo metadata block ++ * @param[out] avctx codec context to set basic stream parameters ++ * @param[out] s where parsed information is stored ++ * @param[in] buffer pointer to start of 34-byte streaminfo data ++ * ++ * @return negative error code on faiure or >= 0 on success ++ */ ++int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, ++ const uint8_t *buffer); ++ ++/** ++ * Validate the FLAC extradata. ++ * @param[in] avctx codec context containing the extradata. ++ * @param[out] format extradata format. ++ * @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data. ++ * @return 1 if valid, 0 if not valid. ++ */ ++int ff_flac_is_extradata_valid(AVCodecContext *avctx, ++ uint8_t **streaminfo_start); ++ ++/** ++ * Validate and decode a frame header. ++ * @param avctx AVCodecContext to use as av_log() context ++ * @param gb GetBitContext from which to read frame header ++ * @param[out] fi frame information ++ * @param log_level_offset log level offset. can be used to silence error messages. ++ * @return non-zero on error, 0 if ok ++ */ ++int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, ++ FLACFrameInfo *fi, int log_level_offset); ++ ++void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels); ++ ++#endif /* AVCODEC_FLAC_PARSE_H */ +diff -Naur a/media/ffvpx/libavcodec/frame_thread_encoder.h b/media/ffvpx/libavcodec/frame_thread_encoder.h +--- a/media/ffvpx/libavcodec/frame_thread_encoder.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/frame_thread_encoder.h 2023-04-06 12:49:40.253394890 +0200 +@@ -27,7 +27,7 @@ + * Initialize frame thread encoder. + * @note hardware encoders are not supported + */ +-int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options); ++int ff_frame_thread_encoder_init(AVCodecContext *avctx); + void ff_frame_thread_encoder_free(AVCodecContext *avctx); + int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, + AVFrame *frame, int *got_packet_ptr); +diff -Naur a/media/ffvpx/libavcodec/get_bits.h b/media/ffvpx/libavcodec/get_bits.h +--- a/media/ffvpx/libavcodec/get_bits.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/get_bits.h 2023-04-06 12:50:24.492176543 +0200 +@@ -1,6 +1,5 @@ + /* + * Copyright (c) 2004 Michael Niedermayer +- * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of FFmpeg. + * +@@ -31,9 +30,9 @@ + + #include "libavutil/common.h" + #include "libavutil/intreadwrite.h" +-#include "libavutil/log.h" + #include "libavutil/avassert.h" +-#include "avcodec.h" ++ ++#include "defs.h" + #include "mathops.h" + #include "vlc.h" + +@@ -58,12 +57,55 @@ + #define CACHED_BITSTREAM_READER 0 + #endif + ++#if CACHED_BITSTREAM_READER ++ ++// we always want the LE implementation, to provide get_bits_le() ++#define BITSTREAM_LE ++ ++#ifndef BITSTREAM_READER_LE ++# define BITSTREAM_BE ++# define BITSTREAM_DEFAULT_BE ++#endif ++ ++#include "bitstream.h" ++ ++#undef BITSTREAM_LE ++#undef BITSTREAM_BE ++#undef BITSTREAM_DEFAULT_BE ++ ++typedef BitstreamContext GetBitContext; ++ ++#define get_bits_count bits_tell ++#define get_bits_left bits_left ++#define skip_bits_long bits_skip ++#define skip_bits bits_skip ++#define get_bits bits_read_nz ++#define get_bitsz bits_read ++#define get_bits_long bits_read ++#define get_bits1 bits_read_bit ++#define get_bits64 bits_read_64 ++#define get_xbits bits_read_xbits ++#define get_sbits bits_read_signed_nz ++#define get_sbits_long bits_read_signed ++#define show_bits bits_peek ++#define show_bits_long bits_peek ++#define init_get_bits bits_init ++#define init_get_bits8 bits_init8 ++#define align_get_bits bits_align ++#define get_vlc2 bits_read_vlc ++ ++#define init_get_bits8_le(s, buffer, byte_size) bits_init8_le((BitstreamContextLE*)s, buffer, byte_size) ++#define get_bits_le(s, n) bits_read_le((BitstreamContextLE*)s, n) ++ ++#define show_bits1(s) bits_peek(s, 1) ++#define skip_bits1(s) bits_skip(s, 1) ++ ++#define skip_1stop_8data_bits bits_skip_1stop_8data ++ ++#else // CACHED_BITSTREAM_READER ++ + typedef struct GetBitContext { + const uint8_t *buffer, *buffer_end; +-#if CACHED_BITSTREAM_READER +- uint64_t cache; +- unsigned bits_left; +-#endif + int index; + int size_in_bits; + int size_in_bits_plus8; +@@ -120,16 +162,12 @@ + * For examples see get_bits, show_bits, skip_bits, get_vlc. + */ + +-#if CACHED_BITSTREAM_READER +-# define MIN_CACHE_BITS 64 +-#elif defined LONG_BITSTREAM_READER ++#if defined LONG_BITSTREAM_READER + # define MIN_CACHE_BITS 32 + #else + # define MIN_CACHE_BITS 25 + #endif + +-#if !CACHED_BITSTREAM_READER +- + #define OPEN_READER_NOSIZE(name, gb) \ + unsigned int name ## _index = (gb)->index; \ + unsigned int av_unused name ## _cache +@@ -214,73 +252,12 @@ + + #define GET_CACHE(name, gb) ((uint32_t) name ## _cache) + +-#endif + + static inline int get_bits_count(const GetBitContext *s) + { +-#if CACHED_BITSTREAM_READER +- return s->index - s->bits_left; +-#else + return s->index; +-#endif +-} +- +-#if CACHED_BITSTREAM_READER +-static inline void refill_32(GetBitContext *s, int is_le) +-{ +-#if !UNCHECKED_BITSTREAM_READER +- if (s->index >> 3 >= s->buffer_end - s->buffer) +- return; +-#endif +- +- if (is_le) +- s->cache = (uint64_t)AV_RL32(s->buffer + (s->index >> 3)) << s->bits_left | s->cache; +- else +- s->cache = s->cache | (uint64_t)AV_RB32(s->buffer + (s->index >> 3)) << (32 - s->bits_left); +- s->index += 32; +- s->bits_left += 32; + } + +-static inline void refill_64(GetBitContext *s, int is_le) +-{ +-#if !UNCHECKED_BITSTREAM_READER +- if (s->index >> 3 >= s->buffer_end - s->buffer) +- return; +-#endif +- +- if (is_le) +- s->cache = AV_RL64(s->buffer + (s->index >> 3)); +- else +- s->cache = AV_RB64(s->buffer + (s->index >> 3)); +- s->index += 64; +- s->bits_left = 64; +-} +- +-static inline uint64_t get_val(GetBitContext *s, unsigned n, int is_le) +-{ +- uint64_t ret; +- av_assert2(n>0 && n<=63); +- if (is_le) { +- ret = s->cache & ((UINT64_C(1) << n) - 1); +- s->cache >>= n; +- } else { +- ret = s->cache >> (64 - n); +- s->cache <<= n; +- } +- s->bits_left -= n; +- return ret; +-} +- +-static inline unsigned show_val(const GetBitContext *s, unsigned n) +-{ +-#ifdef BITSTREAM_READER_LE +- return s->cache & ((UINT64_C(1) << n) - 1); +-#else +- return s->cache >> (64 - n); +-#endif +-} +-#endif +- + /** + * Skips the specified number of bits. + * @param n the number of bits to skip, +@@ -290,29 +267,13 @@ + */ + static inline void skip_bits_long(GetBitContext *s, int n) + { +-#if CACHED_BITSTREAM_READER +- skip_bits(s, n); +-#else + #if UNCHECKED_BITSTREAM_READER + s->index += n; + #else + s->index += av_clip(n, -s->index, s->size_in_bits_plus8 - s->index); + #endif +-#endif + } + +-#if CACHED_BITSTREAM_READER +-static inline void skip_remaining(GetBitContext *s, unsigned n) +-{ +-#ifdef BITSTREAM_READER_LE +- s->cache >>= n; +-#else +- s->cache <<= n; +-#endif +- s->bits_left -= n; +-} +-#endif +- + /** + * Read MPEG-1 dc-style VLC (sign bit + mantissa with no MSB). + * if MSB not set it is negative +@@ -320,13 +281,6 @@ + */ + static inline int get_xbits(GetBitContext *s, int n) + { +-#if CACHED_BITSTREAM_READER +- int32_t cache = show_bits(s, 32); +- int sign = ~cache >> 31; +- skip_remaining(s, n); +- +- return ((((uint32_t)(sign ^ cache)) >> (32 - n)) ^ sign) - sign; +-#else + register int sign; + register int32_t cache; + OPEN_READER(re, s); +@@ -337,10 +291,8 @@ + LAST_SKIP_BITS(re, s, n); + CLOSE_READER(re, s); + return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; +-#endif + } + +-#if !CACHED_BITSTREAM_READER + static inline int get_xbits_le(GetBitContext *s, int n) + { + register int sign; +@@ -354,22 +306,16 @@ + CLOSE_READER(re, s); + return (zero_extend(sign ^ cache, n) ^ sign) - sign; + } +-#endif + + static inline int get_sbits(GetBitContext *s, int n) + { + register int tmp; +-#if CACHED_BITSTREAM_READER +- av_assert2(n>0 && n<=25); +- tmp = sign_extend(get_bits(s, n), n); +-#else + OPEN_READER(re, s); + av_assert2(n>0 && n<=25); + UPDATE_CACHE(re, s); + tmp = SHOW_SBITS(re, s, n); + LAST_SKIP_BITS(re, s, n); + CLOSE_READER(re, s); +-#endif + return tmp; + } + +@@ -379,32 +325,12 @@ + static inline unsigned int get_bits(GetBitContext *s, int n) + { + register unsigned int tmp; +-#if CACHED_BITSTREAM_READER +- +- av_assert2(n>0 && n<=32); +- if (n > s->bits_left) { +-#ifdef BITSTREAM_READER_LE +- refill_32(s, 1); +-#else +- refill_32(s, 0); +-#endif +- if (s->bits_left < 32) +- s->bits_left = n; +- } +- +-#ifdef BITSTREAM_READER_LE +- tmp = get_val(s, n, 1); +-#else +- tmp = get_val(s, n, 0); +-#endif +-#else + OPEN_READER(re, s); + av_assert2(n>0 && n<=25); + UPDATE_CACHE(re, s); + tmp = SHOW_UBITS(re, s, n); + LAST_SKIP_BITS(re, s, n); + CLOSE_READER(re, s); +-#endif + av_assert2(tmp < UINT64_C(1) << n); + return tmp; + } +@@ -419,16 +345,6 @@ + + static inline unsigned int get_bits_le(GetBitContext *s, int n) + { +-#if CACHED_BITSTREAM_READER +- av_assert2(n>0 && n<=32); +- if (n > s->bits_left) { +- refill_32(s, 1); +- if (s->bits_left < 32) +- s->bits_left = n; +- } +- +- return get_val(s, n, 1); +-#else + register int tmp; + OPEN_READER(re, s); + av_assert2(n>0 && n<=25); +@@ -437,7 +353,6 @@ + LAST_SKIP_BITS(re, s, n); + CLOSE_READER(re, s); + return tmp; +-#endif + } + + /** +@@ -446,71 +361,22 @@ + static inline unsigned int show_bits(GetBitContext *s, int n) + { + register unsigned int tmp; +-#if CACHED_BITSTREAM_READER +- if (n > s->bits_left) +-#ifdef BITSTREAM_READER_LE +- refill_32(s, 1); +-#else +- refill_32(s, 0); +-#endif +- +- tmp = show_val(s, n); +-#else + OPEN_READER_NOSIZE(re, s); + av_assert2(n>0 && n<=25); + UPDATE_CACHE(re, s); + tmp = SHOW_UBITS(re, s, n); +-#endif + return tmp; + } + + static inline void skip_bits(GetBitContext *s, int n) + { +-#if CACHED_BITSTREAM_READER +- if (n < s->bits_left) +- skip_remaining(s, n); +- else { +- n -= s->bits_left; +- s->cache = 0; +- s->bits_left = 0; +- +- if (n >= 64) { +- unsigned skip = (n / 8) * 8; +- +- n -= skip; +- s->index += skip; +- } +-#ifdef BITSTREAM_READER_LE +- refill_64(s, 1); +-#else +- refill_64(s, 0); +-#endif +- if (n) +- skip_remaining(s, n); +- } +-#else + OPEN_READER(re, s); + LAST_SKIP_BITS(re, s, n); + CLOSE_READER(re, s); +-#endif + } + + static inline unsigned int get_bits1(GetBitContext *s) + { +-#if CACHED_BITSTREAM_READER +- if (!s->bits_left) +-#ifdef BITSTREAM_READER_LE +- refill_64(s, 1); +-#else +- refill_64(s, 0); +-#endif +- +-#ifdef BITSTREAM_READER_LE +- return get_val(s, 1, 1); +-#else +- return get_val(s, 1, 0); +-#endif +-#else + unsigned int index = s->index; + uint8_t result = s->buffer[index >> 3]; + #ifdef BITSTREAM_READER_LE +@@ -527,7 +393,6 @@ + s->index = index; + + return result; +-#endif + } + + static inline unsigned int show_bits1(GetBitContext *s) +@@ -548,10 +413,6 @@ + av_assert2(n>=0 && n<=32); + if (!n) { + return 0; +-#if CACHED_BITSTREAM_READER +- } +- return get_bits(s, n); +-#else + } else if (n <= MIN_CACHE_BITS) { + return get_bits(s, n); + } else { +@@ -563,7 +424,6 @@ + return ret | get_bits(s, n - 16); + #endif + } +-#endif + } + + /** +@@ -597,6 +457,18 @@ + } + + /** ++ * Read 0-64 bits as a signed integer. ++ */ ++static inline int64_t get_sbits64(GetBitContext *s, int n) ++{ ++ // sign_extend(x, 0) is undefined ++ if (!n) ++ return 0; ++ ++ return sign_extend64(get_bits64(s, n), n); ++} ++ ++/** + * Show 0-32 bits. + */ + static inline unsigned int show_bits_long(GetBitContext *s, int n) +@@ -609,18 +481,17 @@ + } + } + +-static inline int check_marker(void *logctx, GetBitContext *s, const char *msg) +-{ +- int bit = get_bits1(s); +- if (!bit) +- av_log(logctx, AV_LOG_INFO, "Marker bit missing at %d of %d %s\n", +- get_bits_count(s) - 1, s->size_in_bits, msg); +- +- return bit; +-} + +-static inline int init_get_bits_xe(GetBitContext *s, const uint8_t *buffer, +- int bit_size, int is_le) ++/** ++ * Initialize GetBitContext. ++ * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes ++ * larger than the actual read bits because some optimized bitstream ++ * readers read 32 or 64 bit at once and could read over the end ++ * @param bit_size the size of the buffer in bits ++ * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow. ++ */ ++static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer, ++ int bit_size) + { + int buffer_size; + int ret = 0; +@@ -639,12 +510,6 @@ + s->buffer_end = buffer + buffer_size; + s->index = 0; + +-#if CACHED_BITSTREAM_READER +- s->cache = 0; +- s->bits_left = 0; +- refill_64(s, is_le); +-#endif +- + return ret; + } + +@@ -653,24 +518,6 @@ + * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes + * larger than the actual read bits because some optimized bitstream + * readers read 32 or 64 bit at once and could read over the end +- * @param bit_size the size of the buffer in bits +- * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow. +- */ +-static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer, +- int bit_size) +-{ +-#ifdef BITSTREAM_READER_LE +- return init_get_bits_xe(s, buffer, bit_size, 1); +-#else +- return init_get_bits_xe(s, buffer, bit_size, 0); +-#endif +-} +- +-/** +- * Initialize GetBitContext. +- * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes +- * larger than the actual read bits because some optimized bitstream +- * readers read 32 or 64 bit at once and could read over the end + * @param byte_size the size of the buffer in bytes + * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow. + */ +@@ -687,7 +534,7 @@ + { + if (byte_size > INT_MAX / 8 || byte_size < 0) + byte_size = -1; +- return init_get_bits_xe(s, buffer, byte_size * 8, 1); ++ return init_get_bits(s, buffer, byte_size * 8); + } + + static inline const uint8_t *align_get_bits(GetBitContext *s) +@@ -709,8 +556,8 @@ + unsigned int index; \ + \ + index = SHOW_UBITS(name, gb, bits); \ +- code = table[index][0]; \ +- n = table[index][1]; \ ++ code = table[index].sym; \ ++ n = table[index].len; \ + \ + if (max_depth > 1 && n < 0) { \ + LAST_SKIP_BITS(name, gb, bits); \ +@@ -719,8 +566,8 @@ + nb_bits = -n; \ + \ + index = SHOW_UBITS(name, gb, nb_bits) + code; \ +- code = table[index][0]; \ +- n = table[index][1]; \ ++ code = table[index].sym; \ ++ n = table[index].len; \ + if (max_depth > 2 && n < 0) { \ + LAST_SKIP_BITS(name, gb, nb_bits); \ + UPDATE_CACHE(name, gb); \ +@@ -728,8 +575,8 @@ + nb_bits = -n; \ + \ + index = SHOW_UBITS(name, gb, nb_bits) + code; \ +- code = table[index][0]; \ +- n = table[index][1]; \ ++ code = table[index].sym; \ ++ n = table[index].len; \ + } \ + } \ + SKIP_BITS(name, gb, n); \ +@@ -772,19 +619,6 @@ + SKIP_BITS(name, gb, n); \ + } while (0) + +-/* Return the LUT element for the given bitstream configuration. */ +-static inline int set_idx(GetBitContext *s, int code, int *n, int *nb_bits, +- VLC_TYPE (*table)[2]) +-{ +- unsigned idx; +- +- *nb_bits = -*n; +- idx = show_bits(s, *nb_bits) + code; +- *n = table[idx][1]; +- +- return table[idx][0]; +-} +- + /** + * Parse a vlc code. + * @param bits is the number of bits which will be read at once, must be +@@ -794,27 +628,9 @@ + * = (max_vlc_length + bits - 1) / bits + * @returns the code parsed or -1 if no vlc matches + */ +-static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], ++static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, + int bits, int max_depth) + { +-#if CACHED_BITSTREAM_READER +- int nb_bits; +- unsigned idx = show_bits(s, bits); +- int code = table[idx][0]; +- int n = table[idx][1]; +- +- if (max_depth > 1 && n < 0) { +- skip_remaining(s, bits); +- code = set_idx(s, code, &n, &nb_bits, table); +- if (max_depth > 2 && n < 0) { +- skip_remaining(s, nb_bits); +- code = set_idx(s, code, &n, &nb_bits, table); +- } +- } +- skip_remaining(s, n); +- +- return code; +-#else + int code; + + OPEN_READER(re, s); +@@ -825,7 +641,6 @@ + CLOSE_READER(re, s); + + return code; +-#endif + } + + static inline int decode012(GetBitContext *gb) +@@ -865,4 +680,6 @@ + return 0; + } + ++#endif // CACHED_BITSTREAM_READER ++ + #endif /* AVCODEC_GET_BITS_H */ +diff -Naur a/media/ffvpx/libavcodec/get_buffer.c b/media/ffvpx/libavcodec/get_buffer.c +--- a/media/ffvpx/libavcodec/get_buffer.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/get_buffer.c 2023-04-06 12:50:06.972471094 +0200 +@@ -0,0 +1,304 @@ ++/* ++ * The default get_buffer2() implementation ++ * ++ * 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 ++ ++#include "libavutil/avassert.h" ++#include "libavutil/avutil.h" ++#include "libavutil/buffer.h" ++#include "libavutil/frame.h" ++#include "libavutil/hwcontext.h" ++#include "libavutil/imgutils.h" ++#include "libavutil/mem.h" ++#include "libavutil/samplefmt.h" ++#include "libavutil/version.h" ++ ++#include "avcodec.h" ++#include "internal.h" ++ ++typedef struct FramePool { ++ /** ++ * Pools for each data plane. For audio all the planes have the same size, ++ * so only pools[0] is used. ++ */ ++ AVBufferPool *pools[4]; ++ ++ /* ++ * Pool parameters ++ */ ++ int format; ++ int width, height; ++ int stride_align[AV_NUM_DATA_POINTERS]; ++ int linesize[4]; ++ int planes; ++ int channels; ++ int samples; ++} FramePool; ++ ++static void frame_pool_free(void *opaque, uint8_t *data) ++{ ++ FramePool *pool = (FramePool*)data; ++ int i; ++ ++ for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++) ++ av_buffer_pool_uninit(&pool->pools[i]); ++ ++ av_freep(&data); ++} ++ ++static AVBufferRef *frame_pool_alloc(void) ++{ ++ FramePool *pool = av_mallocz(sizeof(*pool)); ++ AVBufferRef *buf; ++ ++ if (!pool) ++ return NULL; ++ ++ buf = av_buffer_create((uint8_t*)pool, sizeof(*pool), ++ frame_pool_free, NULL, 0); ++ if (!buf) { ++ av_freep(&pool); ++ return NULL; ++ } ++ ++ return buf; ++} ++ ++static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) ++{ ++ FramePool *pool = avctx->internal->pool ? ++ (FramePool*)avctx->internal->pool->data : NULL; ++ AVBufferRef *pool_buf; ++ int i, ret, ch, planes; ++ ++ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { ++ int planar = av_sample_fmt_is_planar(frame->format); ++ ch = frame->ch_layout.nb_channels; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (!ch) ++ ch = frame->channels; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ planes = planar ? ch : 1; ++ } ++ ++ if (pool && pool->format == frame->format) { ++ if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && ++ pool->width == frame->width && pool->height == frame->height) ++ return 0; ++ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && pool->planes == planes && ++ pool->channels == ch && frame->nb_samples == pool->samples) ++ return 0; ++ } ++ ++ pool_buf = frame_pool_alloc(); ++ if (!pool_buf) ++ return AVERROR(ENOMEM); ++ pool = (FramePool*)pool_buf->data; ++ ++ switch (avctx->codec_type) { ++ case AVMEDIA_TYPE_VIDEO: { ++ int linesize[4]; ++ int w = frame->width; ++ int h = frame->height; ++ int unaligned; ++ ptrdiff_t linesize1[4]; ++ size_t size[4]; ++ ++ avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); ++ ++ do { ++ // NOTE: do not align linesizes individually, this breaks e.g. assumptions ++ // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 ++ ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w); ++ if (ret < 0) ++ goto fail; ++ // increase alignment of w for next try (rhs gives the lowest bit set in w) ++ w += w & ~(w - 1); ++ ++ unaligned = 0; ++ for (i = 0; i < 4; i++) ++ unaligned |= linesize[i] % pool->stride_align[i]; ++ } while (unaligned); ++ ++ for (i = 0; i < 4; i++) ++ linesize1[i] = linesize[i]; ++ ret = av_image_fill_plane_sizes(size, avctx->pix_fmt, h, linesize1); ++ if (ret < 0) ++ goto fail; ++ ++ for (i = 0; i < 4; i++) { ++ pool->linesize[i] = linesize[i]; ++ if (size[i]) { ++ if (size[i] > INT_MAX - (16 + STRIDE_ALIGN - 1)) { ++ ret = AVERROR(EINVAL); ++ goto fail; ++ } ++ pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1, ++ CONFIG_MEMORY_POISONING ? ++ NULL : ++ av_buffer_allocz); ++ if (!pool->pools[i]) { ++ ret = AVERROR(ENOMEM); ++ goto fail; ++ } ++ } ++ } ++ pool->format = frame->format; ++ pool->width = frame->width; ++ pool->height = frame->height; ++ ++ break; ++ } ++ case AVMEDIA_TYPE_AUDIO: { ++ ret = av_samples_get_buffer_size(&pool->linesize[0], ch, ++ frame->nb_samples, frame->format, 0); ++ if (ret < 0) ++ goto fail; ++ ++ pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL); ++ if (!pool->pools[0]) { ++ ret = AVERROR(ENOMEM); ++ goto fail; ++ } ++ ++ pool->format = frame->format; ++ pool->planes = planes; ++ pool->channels = ch; ++ pool->samples = frame->nb_samples; ++ break; ++ } ++ default: av_assert0(0); ++ } ++ ++ av_buffer_unref(&avctx->internal->pool); ++ avctx->internal->pool = pool_buf; ++ ++ return 0; ++fail: ++ av_buffer_unref(&pool_buf); ++ return ret; ++} ++ ++static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) ++{ ++ FramePool *pool = (FramePool*)avctx->internal->pool->data; ++ int planes = pool->planes; ++ int i; ++ ++ frame->linesize[0] = pool->linesize[0]; ++ ++ if (planes > AV_NUM_DATA_POINTERS) { ++ frame->extended_data = av_calloc(planes, sizeof(*frame->extended_data)); ++ frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS; ++ frame->extended_buf = av_calloc(frame->nb_extended_buf, ++ sizeof(*frame->extended_buf)); ++ if (!frame->extended_data || !frame->extended_buf) { ++ av_freep(&frame->extended_data); ++ av_freep(&frame->extended_buf); ++ return AVERROR(ENOMEM); ++ } ++ } else { ++ frame->extended_data = frame->data; ++ av_assert0(frame->nb_extended_buf == 0); ++ } ++ ++ for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) { ++ frame->buf[i] = av_buffer_pool_get(pool->pools[0]); ++ if (!frame->buf[i]) ++ goto fail; ++ frame->extended_data[i] = frame->data[i] = frame->buf[i]->data; ++ } ++ for (i = 0; i < frame->nb_extended_buf; i++) { ++ frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]); ++ if (!frame->extended_buf[i]) ++ goto fail; ++ frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data; ++ } ++ ++ if (avctx->debug & FF_DEBUG_BUFFERS) ++ av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame); ++ ++ return 0; ++fail: ++ av_frame_unref(frame); ++ return AVERROR(ENOMEM); ++} ++ ++static int video_get_buffer(AVCodecContext *s, AVFrame *pic) ++{ ++ FramePool *pool = (FramePool*)s->internal->pool->data; ++ int i; ++ ++ if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) { ++ av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n"); ++ return -1; ++ } ++ ++ memset(pic->data, 0, sizeof(pic->data)); ++ pic->extended_data = pic->data; ++ ++ for (i = 0; i < 4 && pool->pools[i]; i++) { ++ pic->linesize[i] = pool->linesize[i]; ++ ++ pic->buf[i] = av_buffer_pool_get(pool->pools[i]); ++ if (!pic->buf[i]) ++ goto fail; ++ ++ pic->data[i] = pic->buf[i]->data; ++ } ++ for (; i < AV_NUM_DATA_POINTERS; i++) { ++ pic->data[i] = NULL; ++ pic->linesize[i] = 0; ++ } ++ ++ if (s->debug & FF_DEBUG_BUFFERS) ++ av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic); ++ ++ return 0; ++fail: ++ av_frame_unref(pic); ++ return AVERROR(ENOMEM); ++} ++ ++int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) ++{ ++ int ret; ++ ++ if (avctx->hw_frames_ctx) { ++ ret = av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); ++ frame->width = avctx->coded_width; ++ frame->height = avctx->coded_height; ++ return ret; ++ } ++ ++ if ((ret = update_frame_pool(avctx, frame)) < 0) ++ return ret; ++ ++ switch (avctx->codec_type) { ++ case AVMEDIA_TYPE_VIDEO: ++ return video_get_buffer(avctx, frame); ++ case AVMEDIA_TYPE_AUDIO: ++ return audio_get_buffer(avctx, frame); ++ default: ++ return -1; ++ } ++} +diff -Naur a/media/ffvpx/libavcodec/golomb.c b/media/ffvpx/libavcodec/golomb.c +--- a/media/ffvpx/libavcodec/golomb.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/golomb.c 2023-04-06 12:49:40.253394890 +0200 +@@ -26,7 +26,7 @@ + * @author Michael Niedermayer + */ + +-#include "libavutil/common.h" ++#include + + const uint8_t ff_golomb_vlc_len[512]={ + 19,17,15,15,13,13,13,13,11,11,11,11,11,11,11,11,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, +diff -Naur a/media/ffvpx/libavcodec/golomb.h b/media/ffvpx/libavcodec/golomb.h +--- a/media/ffvpx/libavcodec/golomb.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/golomb.h 2023-04-06 12:49:40.253394890 +0200 +@@ -33,14 +33,12 @@ + #include + + #include "get_bits.h" +-#include "put_bits.h" + + #define INVALID_VLC 0x80000000 + + extern const uint8_t ff_golomb_vlc_len[512]; + extern const uint8_t ff_ue_golomb_vlc_code[512]; + extern const int8_t ff_se_golomb_vlc_code[512]; +-extern const uint8_t ff_ue_golomb_len[256]; + + extern const uint8_t ff_interleaved_golomb_vlc_len[256]; + extern const uint8_t ff_interleaved_ue_golomb_vlc_code[256]; +@@ -615,135 +613,4 @@ + #define get_te0_golomb(a, r) get_te(a, r, __FILE__, __func__, __LINE__) + + #endif /* TRACE */ +- +-/** +- * write unsigned exp golomb code. 2^16 - 2 at most +- */ +-static inline void set_ue_golomb(PutBitContext *pb, int i) +-{ +- av_assert2(i >= 0); +- av_assert2(i <= 0xFFFE); +- +- if (i < 256) +- put_bits(pb, ff_ue_golomb_len[i], i + 1); +- else { +- int e = av_log2(i + 1); +- put_bits(pb, 2 * e + 1, i + 1); +- } +-} +- +-/** +- * write unsigned exp golomb code. 2^32-2 at most. +- */ +-static inline void set_ue_golomb_long(PutBitContext *pb, uint32_t i) +-{ +- av_assert2(i <= (UINT32_MAX - 1)); +- +- if (i < 256) +- put_bits(pb, ff_ue_golomb_len[i], i + 1); +- else { +- int e = av_log2(i + 1); +- put_bits64(pb, 2 * e + 1, i + 1); +- } +-} +- +-/** +- * write truncated unsigned exp golomb code. +- */ +-static inline void set_te_golomb(PutBitContext *pb, int i, int range) +-{ +- av_assert2(range >= 1); +- av_assert2(i <= range); +- +- if (range == 2) +- put_bits(pb, 1, i ^ 1); +- else +- set_ue_golomb(pb, i); +-} +- +-/** +- * write signed exp golomb code. 16 bits at most. +- */ +-static inline void set_se_golomb(PutBitContext *pb, int i) +-{ +- i = 2 * i - 1; +- if (i < 0) +- i ^= -1; //FIXME check if gcc does the right thing +- set_ue_golomb(pb, i); +-} +- +-/** +- * write unsigned golomb rice code (ffv1). +- */ +-static inline void set_ur_golomb(PutBitContext *pb, int i, int k, int limit, +- int esc_len) +-{ +- int e; +- +- av_assert2(i >= 0); +- +- e = i >> k; +- if (e < limit) +- put_bits(pb, e + k + 1, (1 << k) + av_mod_uintp2(i, k)); +- else +- put_bits(pb, limit + esc_len, i - limit + 1); +-} +- +-/** +- * write unsigned golomb rice code (jpegls). +- */ +-static inline void set_ur_golomb_jpegls(PutBitContext *pb, int i, int k, +- int limit, int esc_len) +-{ +- int e; +- +- av_assert2(i >= 0); +- +- e = (i >> k) + 1; +- if (e < limit) { +- while (e > 31) { +- put_bits(pb, 31, 0); +- e -= 31; +- } +- put_bits(pb, e, 1); +- if (k) +- put_sbits(pb, k, i); +- } else { +- while (limit > 31) { +- put_bits(pb, 31, 0); +- limit -= 31; +- } +- put_bits(pb, limit, 1); +- put_bits(pb, esc_len, i - 1); +- } +-} +- +-/** +- * write signed golomb rice code (ffv1). +- */ +-static inline void set_sr_golomb(PutBitContext *pb, int i, int k, int limit, +- int esc_len) +-{ +- int v; +- +- v = -2 * i - 1; +- v ^= (v >> 31); +- +- set_ur_golomb(pb, v, k, limit, esc_len); +-} +- +-/** +- * write signed golomb rice code (flac). +- */ +-static inline void set_sr_golomb_flac(PutBitContext *pb, int i, int k, +- int limit, int esc_len) +-{ +- int v; +- +- v = -2 * i - 1; +- v ^= (v >> 31); +- +- set_ur_golomb_jpegls(pb, v, k, limit, esc_len); +-} +- + #endif /* AVCODEC_GOLOMB_H */ +diff -Naur a/media/ffvpx/libavcodec/h264chroma.h b/media/ffvpx/libavcodec/h264chroma.h +--- a/media/ffvpx/libavcodec/h264chroma.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/h264chroma.h 2023-04-06 12:50:06.972471094 +0200 +@@ -22,7 +22,7 @@ + #include + #include + +-typedef void (*h264_chroma_mc_func)(uint8_t *dst /*align 8*/, uint8_t *src /*align 1*/, ptrdiff_t srcStride, int h, int x, int y); ++typedef void (*h264_chroma_mc_func)(uint8_t *dst /*align 8*/, const uint8_t *src /*align 1*/, ptrdiff_t srcStride, int h, int x, int y); + + typedef struct H264ChromaContext { + h264_chroma_mc_func put_h264_chroma_pixels_tab[4]; +@@ -36,5 +36,6 @@ + void ff_h264chroma_init_ppc(H264ChromaContext *c, int bit_depth); + void ff_h264chroma_init_x86(H264ChromaContext *c, int bit_depth); + void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth); ++void ff_h264chroma_init_loongarch(H264ChromaContext *c, int bit_depth); + + #endif /* AVCODEC_H264CHROMA_H */ +diff -Naur a/media/ffvpx/libavcodec/h264dsp.h b/media/ffvpx/libavcodec/h264dsp.h +--- a/media/ffvpx/libavcodec/h264dsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/h264dsp.h 2023-04-06 12:49:40.253394890 +0200 +@@ -89,16 +89,16 @@ + + void (*h264_idct_add16)(uint8_t *dst /*align 16*/, const int *blockoffset, + int16_t *block /*align 16*/, int stride, +- const uint8_t nnzc[15 * 8]); ++ const uint8_t nnzc[5 * 8]); + void (*h264_idct8_add4)(uint8_t *dst /*align 16*/, const int *blockoffset, + int16_t *block /*align 16*/, int stride, +- const uint8_t nnzc[15 * 8]); ++ const uint8_t nnzc[5 * 8]); + void (*h264_idct_add8)(uint8_t **dst /*align 16*/, const int *blockoffset, + int16_t *block /*align 16*/, int stride, + const uint8_t nnzc[15 * 8]); + void (*h264_idct_add16intra)(uint8_t *dst /*align 16*/, const int *blockoffset, + int16_t *block /*align 16*/, +- int stride, const uint8_t nnzc[15 * 8]); ++ int stride, const uint8_t nnzc[5 * 8]); + void (*h264_luma_dc_dequant_idct)(int16_t *output, + int16_t *input /*align 16*/, int qmul); + void (*h264_chroma_dc_dequant_idct)(int16_t *block, int qmul); +@@ -129,5 +129,7 @@ + const int chroma_format_idc); + void ff_h264dsp_init_mips(H264DSPContext *c, const int bit_depth, + const int chroma_format_idc); ++void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, ++ const int chroma_format_idc); + + #endif /* AVCODEC_H264DSP_H */ +diff -Naur a/media/ffvpx/libavcodec/h264pred.c b/media/ffvpx/libavcodec/h264pred.c +--- a/media/ffvpx/libavcodec/h264pred.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/h264pred.c 2023-04-06 12:49:40.253394890 +0200 +@@ -25,11 +25,13 @@ + * @author Michael Niedermayer + */ + ++#include "config.h" + #include "libavutil/attributes.h" + #include "libavutil/avassert.h" + #include "libavutil/intreadwrite.h" +-#include "avcodec.h" ++#include "codec_id.h" + #include "h264pred.h" ++#include "mathops.h" + + #define BIT_DEPTH 8 + #include "h264pred_template.c" +@@ -51,6 +53,30 @@ + #include "h264pred_template.c" + #undef BIT_DEPTH + ++static void pred4x4_127_dc_c(uint8_t *src, const uint8_t *topright, ++ ptrdiff_t _stride) ++{ ++ int stride = _stride; ++ const uint32_t a = 0x7F7F7F7FU; ++ ++ AV_WN32A(src + 0 * stride, a); ++ AV_WN32A(src + 1 * stride, a); ++ AV_WN32A(src + 2 * stride, a); ++ AV_WN32A(src + 3 * stride, a); ++} ++ ++static void pred4x4_129_dc_c(uint8_t *src, const uint8_t *topright, ++ ptrdiff_t _stride) ++{ ++ int stride = _stride; ++ const uint32_t a = 0x81818181U; ++ ++ AV_WN32A(src + 0 * stride, a); ++ AV_WN32A(src + 1 * stride, a); ++ AV_WN32A(src + 2 * stride, a); ++ AV_WN32A(src + 3 * stride, a); ++} ++ + static void pred4x4_vertical_vp8_c(uint8_t *src, const uint8_t *topright, + ptrdiff_t stride) + { +@@ -419,56 +445,19 @@ + #define FUNCD(a) a ## _c + + #define H264_PRED(depth) \ +- if(codec_id != AV_CODEC_ID_RV40){\ +- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {\ +- h->pred4x4[VERT_PRED ]= FUNCD(pred4x4_vertical_vp8);\ +- h->pred4x4[HOR_PRED ]= FUNCD(pred4x4_horizontal_vp8);\ +- } else {\ +- h->pred4x4[VERT_PRED ]= FUNCC(pred4x4_vertical , depth);\ +- h->pred4x4[HOR_PRED ]= FUNCC(pred4x4_horizontal , depth);\ +- }\ +- h->pred4x4[DC_PRED ]= FUNCC(pred4x4_dc , depth);\ +- if(codec_id == AV_CODEC_ID_SVQ3)\ +- h->pred4x4[DIAG_DOWN_LEFT_PRED ]= FUNCD(pred4x4_down_left_svq3);\ +- else\ +- h->pred4x4[DIAG_DOWN_LEFT_PRED ]= FUNCC(pred4x4_down_left , depth);\ +- h->pred4x4[DIAG_DOWN_RIGHT_PRED]= FUNCC(pred4x4_down_right , depth);\ +- h->pred4x4[VERT_RIGHT_PRED ]= FUNCC(pred4x4_vertical_right , depth);\ +- h->pred4x4[HOR_DOWN_PRED ]= FUNCC(pred4x4_horizontal_down , depth);\ +- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {\ +- h->pred4x4[VERT_LEFT_PRED ]= FUNCD(pred4x4_vertical_left_vp8);\ +- } else\ +- h->pred4x4[VERT_LEFT_PRED ]= FUNCC(pred4x4_vertical_left , depth);\ +- h->pred4x4[HOR_UP_PRED ]= FUNCC(pred4x4_horizontal_up , depth);\ +- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) {\ +- h->pred4x4[LEFT_DC_PRED ]= FUNCC(pred4x4_left_dc , depth);\ +- h->pred4x4[TOP_DC_PRED ]= FUNCC(pred4x4_top_dc , depth);\ +- } else {\ +- h->pred4x4[TM_VP8_PRED ]= FUNCD(pred4x4_tm_vp8);\ +- h->pred4x4[DC_127_PRED ]= FUNCC(pred4x4_127_dc , depth);\ +- h->pred4x4[DC_129_PRED ]= FUNCC(pred4x4_129_dc , depth);\ +- h->pred4x4[VERT_VP8_PRED ]= FUNCC(pred4x4_vertical , depth);\ +- h->pred4x4[HOR_VP8_PRED ]= FUNCC(pred4x4_horizontal , depth);\ +- }\ +- if (codec_id != AV_CODEC_ID_VP8)\ +- h->pred4x4[DC_128_PRED ]= FUNCC(pred4x4_128_dc , depth);\ +- }else{\ +- h->pred4x4[VERT_PRED ]= FUNCC(pred4x4_vertical , depth);\ +- h->pred4x4[HOR_PRED ]= FUNCC(pred4x4_horizontal , depth);\ +- h->pred4x4[DC_PRED ]= FUNCC(pred4x4_dc , depth);\ +- h->pred4x4[DIAG_DOWN_LEFT_PRED ]= FUNCD(pred4x4_down_left_rv40);\ +- h->pred4x4[DIAG_DOWN_RIGHT_PRED]= FUNCC(pred4x4_down_right , depth);\ +- h->pred4x4[VERT_RIGHT_PRED ]= FUNCC(pred4x4_vertical_right , depth);\ +- h->pred4x4[HOR_DOWN_PRED ]= FUNCC(pred4x4_horizontal_down , depth);\ +- h->pred4x4[VERT_LEFT_PRED ]= FUNCD(pred4x4_vertical_left_rv40);\ +- h->pred4x4[HOR_UP_PRED ]= FUNCD(pred4x4_horizontal_up_rv40);\ +- h->pred4x4[LEFT_DC_PRED ]= FUNCC(pred4x4_left_dc , depth);\ +- h->pred4x4[TOP_DC_PRED ]= FUNCC(pred4x4_top_dc , depth);\ +- h->pred4x4[DC_128_PRED ]= FUNCC(pred4x4_128_dc , depth);\ +- h->pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN]= FUNCD(pred4x4_down_left_rv40_nodown);\ +- h->pred4x4[HOR_UP_PRED_RV40_NODOWN]= FUNCD(pred4x4_horizontal_up_rv40_nodown);\ +- h->pred4x4[VERT_LEFT_PRED_RV40_NODOWN]= FUNCD(pred4x4_vertical_left_rv40_nodown);\ +- }\ ++ h->pred4x4[VERT_PRED ] = FUNCC(pred4x4_vertical, depth);\ ++ h->pred4x4[HOR_PRED ] = FUNCC(pred4x4_horizontal, depth);\ ++ h->pred4x4[DC_PRED ] = FUNCC(pred4x4_dc, depth);\ ++ h->pred4x4[DIAG_DOWN_LEFT_PRED ] = FUNCC(pred4x4_down_left, depth);\ ++ h->pred4x4[DIAG_DOWN_RIGHT_PRED] = FUNCC(pred4x4_down_right, depth);\ ++ h->pred4x4[VERT_RIGHT_PRED ] = FUNCC(pred4x4_vertical_right, depth);\ ++ h->pred4x4[HOR_DOWN_PRED ] = FUNCC(pred4x4_horizontal_down, depth);\ ++ h->pred4x4[VERT_LEFT_PRED ] = FUNCC(pred4x4_vertical_left, depth);\ ++ h->pred4x4[HOR_UP_PRED ] = FUNCC(pred4x4_horizontal_up, depth);\ ++ h->pred4x4[LEFT_DC_PRED ] = FUNCC(pred4x4_left_dc, depth);\ ++ h->pred4x4[TOP_DC_PRED ] = FUNCC(pred4x4_top_dc, depth);\ ++ if (depth > 8 || codec_id != AV_CODEC_ID_VP8)\ ++ h->pred4x4[DC_128_PRED ] = FUNCC(pred4x4_128_dc, depth);\ + \ + h->pred8x8l[VERT_PRED ]= FUNCC(pred8x8l_vertical , depth);\ + h->pred8x8l[HOR_PRED ]= FUNCC(pred8x8l_horizontal , depth);\ +@@ -486,20 +475,15 @@ + if (chroma_format_idc <= 1) {\ + h->pred8x8[VERT_PRED8x8 ]= FUNCC(pred8x8_vertical , depth);\ + h->pred8x8[HOR_PRED8x8 ]= FUNCC(pred8x8_horizontal , depth);\ ++ h->pred8x8[PLANE_PRED8x8] = FUNCC(pred8x8_plane, depth);\ + } else {\ + h->pred8x8[VERT_PRED8x8 ]= FUNCC(pred8x16_vertical , depth);\ + h->pred8x8[HOR_PRED8x8 ]= FUNCC(pred8x16_horizontal , depth);\ ++ h->pred8x8[PLANE_PRED8x8] = FUNCC(pred8x16_plane, depth);\ + }\ +- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) {\ +- if (chroma_format_idc <= 1) {\ +- h->pred8x8[PLANE_PRED8x8]= FUNCC(pred8x8_plane , depth);\ +- } else {\ +- h->pred8x8[PLANE_PRED8x8]= FUNCC(pred8x16_plane , depth);\ +- }\ +- } else\ +- h->pred8x8[PLANE_PRED8x8]= FUNCD(pred8x8_tm_vp8);\ +- if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && \ +- codec_id != AV_CODEC_ID_VP8) {\ ++ if (depth > 8 || (codec_id != AV_CODEC_ID_RV40 && \ ++ codec_id != AV_CODEC_ID_VP7 && \ ++ codec_id != AV_CODEC_ID_VP8)) { \ + if (chroma_format_idc <= 1) {\ + h->pred8x8[DC_PRED8x8 ]= FUNCC(pred8x8_dc , depth);\ + h->pred8x8[LEFT_DC_PRED8x8]= FUNCC(pred8x8_left_dc , depth);\ +@@ -521,10 +505,6 @@ + h->pred8x8[DC_PRED8x8 ]= FUNCD(pred8x8_dc_rv40);\ + h->pred8x8[LEFT_DC_PRED8x8]= FUNCD(pred8x8_left_dc_rv40);\ + h->pred8x8[TOP_DC_PRED8x8 ]= FUNCD(pred8x8_top_dc_rv40);\ +- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {\ +- h->pred8x8[DC_127_PRED8x8]= FUNCC(pred8x8_127_dc , depth);\ +- h->pred8x8[DC_129_PRED8x8]= FUNCC(pred8x8_129_dc , depth);\ +- }\ + }\ + if (chroma_format_idc <= 1) {\ + h->pred8x8[DC_128_PRED8x8 ]= FUNCC(pred8x8_128_dc , depth);\ +@@ -535,23 +515,7 @@ + h->pred16x16[DC_PRED8x8 ]= FUNCC(pred16x16_dc , depth);\ + h->pred16x16[VERT_PRED8x8 ]= FUNCC(pred16x16_vertical , depth);\ + h->pred16x16[HOR_PRED8x8 ]= FUNCC(pred16x16_horizontal , depth);\ +- switch(codec_id){\ +- case AV_CODEC_ID_SVQ3:\ +- h->pred16x16[PLANE_PRED8x8 ]= FUNCD(pred16x16_plane_svq3);\ +- break;\ +- case AV_CODEC_ID_RV40:\ +- h->pred16x16[PLANE_PRED8x8 ]= FUNCD(pred16x16_plane_rv40);\ +- break;\ +- case AV_CODEC_ID_VP7:\ +- case AV_CODEC_ID_VP8:\ +- h->pred16x16[PLANE_PRED8x8 ]= FUNCD(pred16x16_tm_vp8);\ +- h->pred16x16[DC_127_PRED8x8]= FUNCC(pred16x16_127_dc , depth);\ +- h->pred16x16[DC_129_PRED8x8]= FUNCC(pred16x16_129_dc , depth);\ +- break;\ +- default:\ +- h->pred16x16[PLANE_PRED8x8 ]= FUNCC(pred16x16_plane , depth);\ +- break;\ +- }\ ++ h->pred16x16[PLANE_PRED8x8 ]= FUNCC(pred16x16_plane , depth);\ + h->pred16x16[LEFT_DC_PRED8x8]= FUNCC(pred16x16_left_dc , depth);\ + h->pred16x16[TOP_DC_PRED8x8 ]= FUNCC(pred16x16_top_dc , depth);\ + h->pred16x16[DC_128_PRED8x8 ]= FUNCC(pred16x16_128_dc , depth);\ +@@ -564,8 +528,8 @@ + h->pred8x8l_filter_add [VERT_PRED ]= FUNCC(pred8x8l_vertical_filter_add , depth);\ + h->pred8x8l_filter_add [ HOR_PRED ]= FUNCC(pred8x8l_horizontal_filter_add , depth);\ + if (chroma_format_idc <= 1) {\ +- h->pred8x8_add [VERT_PRED8x8]= FUNCC(pred8x8_vertical_add , depth);\ +- h->pred8x8_add [ HOR_PRED8x8]= FUNCC(pred8x8_horizontal_add , depth);\ ++ h->pred8x8_add[VERT_PRED8x8] = FUNCC(pred8x8_vertical_add, depth);\ ++ h->pred8x8_add[ HOR_PRED8x8] = FUNCC(pred8x8_horizontal_add, depth);\ + } else {\ + h->pred8x8_add [VERT_PRED8x8]= FUNCC(pred8x16_vertical_add , depth);\ + h->pred8x8_add [ HOR_PRED8x8]= FUNCC(pred8x16_horizontal_add , depth);\ +@@ -589,15 +553,50 @@ + default: + av_assert0(bit_depth<=8); + H264_PRED(8) ++ switch (codec_id) { ++ case AV_CODEC_ID_SVQ3: ++ h->pred4x4[DIAG_DOWN_LEFT_PRED] = FUNCD(pred4x4_down_left_svq3); ++ h->pred16x16[PLANE_PRED8x8 ] = FUNCD(pred16x16_plane_svq3); ++ break; ++ case AV_CODEC_ID_RV40: ++ h->pred4x4[DIAG_DOWN_LEFT_PRED] = FUNCD(pred4x4_down_left_rv40); ++ h->pred4x4[VERT_LEFT_PRED ] = FUNCD(pred4x4_vertical_left_rv40); ++ h->pred4x4[HOR_UP_PRED ] = FUNCD(pred4x4_horizontal_up_rv40); ++ h->pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN] = FUNCD(pred4x4_down_left_rv40_nodown); ++ h->pred4x4[HOR_UP_PRED_RV40_NODOWN] = FUNCD(pred4x4_horizontal_up_rv40_nodown); ++ h->pred4x4[VERT_LEFT_PRED_RV40_NODOWN] = FUNCD(pred4x4_vertical_left_rv40_nodown); ++ h->pred16x16[PLANE_PRED8x8 ] = FUNCD(pred16x16_plane_rv40); ++ break; ++ case AV_CODEC_ID_VP7: ++ case AV_CODEC_ID_VP8: ++ h->pred4x4[VERT_PRED ] = FUNCD(pred4x4_vertical_vp8); ++ h->pred4x4[HOR_PRED ] = FUNCD(pred4x4_horizontal_vp8); ++ h->pred4x4[VERT_LEFT_PRED ] = FUNCD(pred4x4_vertical_left_vp8); ++ h->pred4x4[TM_VP8_PRED ] = FUNCD(pred4x4_tm_vp8); ++ h->pred4x4[VERT_VP8_PRED ] = FUNCC(pred4x4_vertical, 8); ++ h->pred4x4[DC_127_PRED ] = FUNCD(pred4x4_127_dc); ++ h->pred4x4[DC_129_PRED ] = FUNCD(pred4x4_129_dc); ++ h->pred4x4[HOR_VP8_PRED ] = FUNCC(pred4x4_horizontal, 8); ++ h->pred8x8[PLANE_PRED8x8 ] = FUNCD(pred8x8_tm_vp8); ++ h->pred8x8[DC_127_PRED8x8 ] = FUNCC(pred8x8_127_dc, 8); ++ h->pred8x8[DC_129_PRED8x8 ] = FUNCC(pred8x8_129_dc, 8); ++ h->pred16x16[PLANE_PRED8x8 ] = FUNCD(pred16x16_tm_vp8); ++ h->pred16x16[DC_127_PRED8x8] = FUNCC(pred16x16_127_dc, 8); ++ h->pred16x16[DC_129_PRED8x8] = FUNCC(pred16x16_129_dc, 8); ++ break; ++ } + break; + } + +- if (ARCH_AARCH64) +- ff_h264_pred_init_aarch64(h, codec_id, bit_depth, chroma_format_idc); +- if (ARCH_ARM) +- ff_h264_pred_init_arm(h, codec_id, bit_depth, chroma_format_idc); +- if (ARCH_X86) +- ff_h264_pred_init_x86(h, codec_id, bit_depth, chroma_format_idc); +- if (ARCH_MIPS) +- ff_h264_pred_init_mips(h, codec_id, bit_depth, chroma_format_idc); ++#if ARCH_AARCH64 ++ ff_h264_pred_init_aarch64(h, codec_id, bit_depth, chroma_format_idc); ++#elif ARCH_ARM ++ ff_h264_pred_init_arm(h, codec_id, bit_depth, chroma_format_idc); ++#elif ARCH_X86 ++ ff_h264_pred_init_x86(h, codec_id, bit_depth, chroma_format_idc); ++#elif ARCH_MIPS ++ ff_h264_pred_init_mips(h, codec_id, bit_depth, chroma_format_idc); ++#elif ARCH_LOONGARCH ++ ff_h264_pred_init_loongarch(h, codec_id, bit_depth, chroma_format_idc); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/h264pred.h b/media/ffvpx/libavcodec/h264pred.h +--- a/media/ffvpx/libavcodec/h264pred.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/h264pred.h 2023-04-06 12:49:40.253394890 +0200 +@@ -86,6 +86,8 @@ + #define DC_129_PRED8x8 8 + //@} + ++#define PART_NOT_AVAILABLE -2 ++ + /** + * Context for storing H.264 prediction functions + */ +@@ -122,5 +124,7 @@ + const int bit_depth, const int chroma_format_idc); + void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, + const int bit_depth, const int chroma_format_idc); ++void ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id, ++ const int bit_depth, const int chroma_format_idc); + + #endif /* AVCODEC_H264PRED_H */ +diff -Naur a/media/ffvpx/libavcodec/h264pred_template.c b/media/ffvpx/libavcodec/h264pred_template.c +--- a/media/ffvpx/libavcodec/h264pred_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/h264pred_template.c 2023-04-06 12:49:40.253394890 +0200 +@@ -111,32 +111,6 @@ + AV_WN4PA(src+3*stride, a); + } + +-static void FUNCC(pred4x4_127_dc)(uint8_t *_src, const uint8_t *topright, +- ptrdiff_t _stride) +-{ +- pixel *src = (pixel*)_src; +- int stride = _stride>>(sizeof(pixel)-1); +- const pixel4 a = PIXEL_SPLAT_X4((1<<(BIT_DEPTH-1))-1); +- +- AV_WN4PA(src+0*stride, a); +- AV_WN4PA(src+1*stride, a); +- AV_WN4PA(src+2*stride, a); +- AV_WN4PA(src+3*stride, a); +-} +- +-static void FUNCC(pred4x4_129_dc)(uint8_t *_src, const uint8_t *topright, +- ptrdiff_t _stride) +-{ +- pixel *src = (pixel*)_src; +- int stride = _stride>>(sizeof(pixel)-1); +- const pixel4 a = PIXEL_SPLAT_X4((1<<(BIT_DEPTH-1))+1); +- +- AV_WN4PA(src+0*stride, a); +- AV_WN4PA(src+1*stride, a); +- AV_WN4PA(src+2*stride, a); +- AV_WN4PA(src+3*stride, a); +-} +- + + #define LOAD_TOP_RIGHT_EDGE\ + const unsigned av_unused t4 = topright[0];\ +@@ -427,9 +401,11 @@ + PREDICT_16x16_DC(PIXEL_SPLAT_X4(v));\ + } + +-PRED16x16_X(127, (1<<(BIT_DEPTH-1))-1) + PRED16x16_X(128, (1<<(BIT_DEPTH-1))+0) ++#if BIT_DEPTH == 8 ++PRED16x16_X(127, (1<<(BIT_DEPTH-1))-1) + PRED16x16_X(129, (1<<(BIT_DEPTH-1))+1) ++#endif + + static inline void FUNCC(pred16x16_plane_compat)(uint8_t *_src, + ptrdiff_t _stride, +@@ -551,9 +527,11 @@ + }\ + } + +-PRED8x8_X(127, (1<<(BIT_DEPTH-1))-1) + PRED8x8_X(128, (1<<(BIT_DEPTH-1))+0) ++#if BIT_DEPTH == 8 ++PRED8x8_X(127, (1<<(BIT_DEPTH-1))-1) + PRED8x8_X(129, (1<<(BIT_DEPTH-1))+1) ++#endif + + static void FUNCC(pred8x16_128_dc)(uint8_t *_src, ptrdiff_t stride) + { +diff -Naur a/media/ffvpx/libavcodec/hpeldsp.h b/media/ffvpx/libavcodec/hpeldsp.h +--- a/media/ffvpx/libavcodec/hpeldsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/hpeldsp.h 2023-04-06 12:49:40.253394890 +0200 +@@ -102,5 +102,6 @@ + void ff_hpeldsp_init_ppc(HpelDSPContext *c, int flags); + void ff_hpeldsp_init_x86(HpelDSPContext *c, int flags); + void ff_hpeldsp_init_mips(HpelDSPContext *c, int flags); ++void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags); + + #endif /* AVCODEC_HPELDSP_H */ +diff -Naur a/media/ffvpx/libavcodec/hwaccels.h b/media/ffvpx/libavcodec/hwaccels.h +--- a/media/ffvpx/libavcodec/hwaccels.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/hwaccels.h 2023-04-06 12:50:06.972471094 +0200 +@@ -26,6 +26,7 @@ + extern const AVHWAccel ff_av1_dxva2_hwaccel; + extern const AVHWAccel ff_av1_nvdec_hwaccel; + extern const AVHWAccel ff_av1_vaapi_hwaccel; ++extern const AVHWAccel ff_av1_vdpau_hwaccel; + extern const AVHWAccel ff_h263_vaapi_hwaccel; + extern const AVHWAccel ff_h263_videotoolbox_hwaccel; + extern const AVHWAccel ff_h264_d3d11va_hwaccel; +@@ -47,7 +48,6 @@ + extern const AVHWAccel ff_mpeg1_nvdec_hwaccel; + extern const AVHWAccel ff_mpeg1_vdpau_hwaccel; + extern const AVHWAccel ff_mpeg1_videotoolbox_hwaccel; +-extern const AVHWAccel ff_mpeg1_xvmc_hwaccel; + extern const AVHWAccel ff_mpeg2_d3d11va_hwaccel; + extern const AVHWAccel ff_mpeg2_d3d11va2_hwaccel; + extern const AVHWAccel ff_mpeg2_nvdec_hwaccel; +@@ -55,11 +55,11 @@ + extern const AVHWAccel ff_mpeg2_vaapi_hwaccel; + extern const AVHWAccel ff_mpeg2_vdpau_hwaccel; + extern const AVHWAccel ff_mpeg2_videotoolbox_hwaccel; +-extern const AVHWAccel ff_mpeg2_xvmc_hwaccel; + extern const AVHWAccel ff_mpeg4_nvdec_hwaccel; + extern const AVHWAccel ff_mpeg4_vaapi_hwaccel; + extern const AVHWAccel ff_mpeg4_vdpau_hwaccel; + extern const AVHWAccel ff_mpeg4_videotoolbox_hwaccel; ++extern const AVHWAccel ff_prores_videotoolbox_hwaccel; + extern const AVHWAccel ff_vc1_d3d11va_hwaccel; + extern const AVHWAccel ff_vc1_d3d11va2_hwaccel; + extern const AVHWAccel ff_vc1_dxva2_hwaccel; +@@ -74,6 +74,7 @@ + extern const AVHWAccel ff_vp9_nvdec_hwaccel; + extern const AVHWAccel ff_vp9_vaapi_hwaccel; + extern const AVHWAccel ff_vp9_vdpau_hwaccel; ++extern const AVHWAccel ff_vp9_videotoolbox_hwaccel; + extern const AVHWAccel ff_wmv3_d3d11va_hwaccel; + extern const AVHWAccel ff_wmv3_d3d11va2_hwaccel; + extern const AVHWAccel ff_wmv3_dxva2_hwaccel; +diff -Naur a/media/ffvpx/libavcodec/hwconfig.h b/media/ffvpx/libavcodec/hwconfig.h +--- a/media/ffvpx/libavcodec/hwconfig.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/hwconfig.h 2023-04-06 12:49:40.253394890 +0200 +@@ -78,8 +78,6 @@ + HW_CONFIG_HWACCEL(1, 1, 1, VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel) + #define HWACCEL_D3D11VA(codec) \ + HW_CONFIG_HWACCEL(0, 0, 1, D3D11VA_VLD, NONE, ff_ ## codec ## _d3d11va_hwaccel) +-#define HWACCEL_XVMC(codec) \ +- HW_CONFIG_HWACCEL(0, 0, 1, XVMC, NONE, ff_ ## codec ## _xvmc_hwaccel) + + #define HW_CONFIG_ENCODER(device, frames, ad_hoc, format, device_type_) \ + &(const AVCodecHWConfigInternal) { \ +diff -Naur a/media/ffvpx/libavcodec/idctdsp.c b/media/ffvpx/libavcodec/idctdsp.c +--- a/media/ffvpx/libavcodec/idctdsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/idctdsp.c 2023-04-06 12:50:06.972471094 +0200 +@@ -17,6 +17,7 @@ + */ + + #include "config.h" ++#include "config_components.h" + #include "libavutil/attributes.h" + #include "libavutil/common.h" + #include "avcodec.h" +@@ -26,24 +27,12 @@ + #include "simple_idct.h" + #include "xvididct.h" + +-av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, +- const uint8_t *src_scantable) ++av_cold void ff_permute_scantable(uint8_t dst[64], const uint8_t src[64], ++ const uint8_t permutation[64]) + { +- int i, end; +- +- st->scantable = src_scantable; +- +- for (i = 0; i < 64; i++) { +- int j = src_scantable[i]; +- st->permutated[i] = permutation[j]; +- } +- +- end = -1; +- for (i = 0; i < 64; i++) { +- int j = st->permutated[i]; +- if (j > end) +- end = j; +- st->raster_end[i] = end; ++ for (int i = 0; i < 64; i++) { ++ int j = src[i]; ++ dst[i] = permutation[j]; + } + } + +@@ -52,10 +41,11 @@ + { + int i; + +- if (ARCH_X86) +- if (ff_init_scantable_permutation_x86(idct_permutation, +- perm_type)) +- return; ++#if ARCH_X86 ++ if (ff_init_scantable_permutation_x86(idct_permutation, ++ perm_type)) ++ return; ++#endif + + switch (perm_type) { + case FF_IDCT_PERM_NONE: +@@ -237,7 +227,7 @@ + + av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) + { +- const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; ++ av_unused const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; + + if (avctx->lowres==1) { + c->idct_put = ff_jref_idct4_put; +@@ -287,7 +277,6 @@ + c->perm_type = FF_IDCT_PERM_NONE; + #endif /* CONFIG_FAANIDCT */ + } else { // accurate/default +- /* Be sure FF_IDCT_NONE will select this one, since it uses FF_IDCT_PERM_NONE */ + c->idct_put = ff_simple_idct_put_int16_8bit; + c->idct_add = ff_simple_idct_add_int16_8bit; + c->idct = ff_simple_idct_int16_8bit; +@@ -303,18 +292,23 @@ + if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID) + ff_xvid_idct_init(c, avctx); + +- if (ARCH_AARCH64) +- ff_idctdsp_init_aarch64(c, avctx, high_bit_depth); +- if (ARCH_ALPHA) +- ff_idctdsp_init_alpha(c, avctx, high_bit_depth); +- if (ARCH_ARM) +- ff_idctdsp_init_arm(c, avctx, high_bit_depth); +- if (ARCH_PPC) +- ff_idctdsp_init_ppc(c, avctx, high_bit_depth); +- if (ARCH_X86) +- ff_idctdsp_init_x86(c, avctx, high_bit_depth); +- if (ARCH_MIPS) +- ff_idctdsp_init_mips(c, avctx, high_bit_depth); ++#if ARCH_AARCH64 ++ ff_idctdsp_init_aarch64(c, avctx, high_bit_depth); ++#elif ARCH_ALPHA ++ ff_idctdsp_init_alpha(c, avctx, high_bit_depth); ++#elif ARCH_ARM ++ ff_idctdsp_init_arm(c, avctx, high_bit_depth); ++#elif ARCH_PPC ++ ff_idctdsp_init_ppc(c, avctx, high_bit_depth); ++#elif ARCH_RISCV ++ ff_idctdsp_init_riscv(c, avctx, high_bit_depth); ++#elif ARCH_X86 ++ ff_idctdsp_init_x86(c, avctx, high_bit_depth); ++#elif ARCH_MIPS ++ ff_idctdsp_init_mips(c, avctx, high_bit_depth); ++#elif ARCH_LOONGARCH ++ ff_idctdsp_init_loongarch(c, avctx, high_bit_depth); ++#endif + + ff_init_scantable_permutation(c->idct_permutation, + c->perm_type); +diff -Naur a/media/ffvpx/libavcodec/idctdsp.h b/media/ffvpx/libavcodec/idctdsp.h +--- a/media/ffvpx/libavcodec/idctdsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/idctdsp.h 2023-04-06 12:50:06.972471094 +0200 +@@ -25,15 +25,6 @@ + + #include "avcodec.h" + +-/** +- * Scantable. +- */ +-typedef struct ScanTable { +- const uint8_t *scantable; +- uint8_t permutated[64]; +- uint8_t raster_end[64]; +-} ScanTable; +- + enum idct_permutation_type { + FF_IDCT_PERM_NONE, + FF_IDCT_PERM_LIBMPEG2, +@@ -43,8 +34,8 @@ + FF_IDCT_PERM_SSE2, + }; + +-void ff_init_scantable(uint8_t *permutation, ScanTable *st, +- const uint8_t *src_scantable); ++void ff_permute_scantable(uint8_t dst[64], const uint8_t src[64], ++ const uint8_t permutation[64]); + void ff_init_scantable_permutation(uint8_t *idct_permutation, + enum idct_permutation_type perm_type); + int ff_init_scantable_permutation_x86(uint8_t *idct_permutation, +@@ -114,9 +105,13 @@ + unsigned high_bit_depth); + void ff_idctdsp_init_ppc(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); ++void ff_idctdsp_init_riscv(IDCTDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth); + void ff_idctdsp_init_x86(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); + void ff_idctdsp_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); ++void ff_idctdsp_init_loongarch(IDCTDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth); + + #endif /* AVCODEC_IDCTDSP_H */ +diff -Naur a/media/ffvpx/libavcodec/imgconvert.c b/media/ffvpx/libavcodec/imgconvert.c +--- a/media/ffvpx/libavcodec/imgconvert.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/imgconvert.c 2023-04-06 12:49:40.253394890 +0200 +@@ -25,46 +25,9 @@ + */ + + #include "avcodec.h" +-#include "internal.h" +-#include "mathops.h" +-#include "libavutil/avassert.h" +-#include "libavutil/colorspace.h" +-#include "libavutil/common.h" + #include "libavutil/pixdesc.h" +-#include "libavutil/internal.h" +-#include "libavutil/imgutils.h" ++#include "libavutil/pixfmt.h" + +-#if FF_API_GETCHROMA +-void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift) +-{ +- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +- av_assert0(desc); +- *h_shift = desc->log2_chroma_w; +- *v_shift = desc->log2_chroma_h; +-} +-#endif +- +-#if FF_API_AVCODEC_PIX_FMT +-int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, +- enum AVPixelFormat src_pix_fmt, +- int has_alpha) +-{ +- return av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha); +-} +- +-enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, +- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr) +-{ +- return av_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, has_alpha, loss_ptr); +-} +- +-enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, +- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr) +-{ +- return av_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, has_alpha, loss_ptr); +-} +- +-#endif + enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, + enum AVPixelFormat src_pix_fmt, + int has_alpha, int *loss_ptr){ +@@ -83,152 +46,3 @@ + return best; + } + +-#if FF_API_AVPICTURE +-FF_DISABLE_DEPRECATION_WARNINGS +-/* return true if yuv planar */ +-static inline int is_yuv_planar(const AVPixFmtDescriptor *desc) +-{ +- int i; +- int planes[4] = { 0 }; +- +- if ( desc->flags & AV_PIX_FMT_FLAG_RGB +- || !(desc->flags & AV_PIX_FMT_FLAG_PLANAR)) +- return 0; +- +- /* set the used planes */ +- for (i = 0; i < desc->nb_components; i++) +- planes[desc->comp[i].plane] = 1; +- +- /* if there is an unused plane, the format is not planar */ +- for (i = 0; i < desc->nb_components; i++) +- if (!planes[i]) +- return 0; +- return 1; +-} +- +-int av_picture_crop(AVPicture *dst, const AVPicture *src, +- enum AVPixelFormat pix_fmt, int top_band, int left_band) +-{ +- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +- int y_shift; +- int x_shift; +- int max_step[4]; +- +- if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB) +- return -1; +- +- y_shift = desc->log2_chroma_h; +- x_shift = desc->log2_chroma_w; +- av_image_fill_max_pixsteps(max_step, NULL, desc); +- +- if (is_yuv_planar(desc)) { +- dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band; +- dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift); +- dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift); +- } else{ +- if(top_band % (1<data[0] = src->data[0] + (top_band * src->linesize[0]) + (left_band * max_step[0]); +- } +- +- dst->linesize[0] = src->linesize[0]; +- dst->linesize[1] = src->linesize[1]; +- dst->linesize[2] = src->linesize[2]; +- return 0; +-} +- +-int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, +- enum AVPixelFormat pix_fmt, int padtop, int padbottom, int padleft, int padright, +- int *color) +-{ +- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +- uint8_t *optr; +- int y_shift; +- int x_shift; +- int yheight; +- int i, y; +- int max_step[4]; +- +- if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB) +- return -1; +- +- if (!is_yuv_planar(desc)) { +- if (src) +- return -1; //TODO: Not yet implemented +- +- av_image_fill_max_pixsteps(max_step, NULL, desc); +- +- if (padtop || padleft) { +- memset(dst->data[0], color[0], +- dst->linesize[0] * padtop + (padleft * max_step[0])); +- } +- +- if (padleft || padright) { +- optr = dst->data[0] + dst->linesize[0] * padtop + +- (dst->linesize[0] - (padright * max_step[0])); +- yheight = height - 1 - (padtop + padbottom); +- for (y = 0; y < yheight; y++) { +- memset(optr, color[0], (padleft + padright) * max_step[0]); +- optr += dst->linesize[0]; +- } +- } +- +- if (padbottom || padright) { +- optr = dst->data[0] + dst->linesize[0] * (height - padbottom) - +- (padright * max_step[0]); +- memset(optr, color[0], dst->linesize[0] * padbottom + +- (padright * max_step[0])); +- } +- +- return 0; +- } +- +- for (i = 0; i < 3; i++) { +- x_shift = i ? desc->log2_chroma_w : 0; +- y_shift = i ? desc->log2_chroma_h : 0; +- +- if (padtop || padleft) { +- memset(dst->data[i], color[i], +- dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift)); +- } +- +- if (padleft || padright) { +- optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + +- (dst->linesize[i] - (padright >> x_shift)); +- yheight = (height - 1 - (padtop + padbottom)) >> y_shift; +- for (y = 0; y < yheight; y++) { +- memset(optr, color[i], (padleft + padright) >> x_shift); +- optr += dst->linesize[i]; +- } +- } +- +- if (src) { /* first line */ +- uint8_t *iptr = src->data[i]; +- optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + +- (padleft >> x_shift); +- memcpy(optr, iptr, (width - padleft - padright) >> x_shift); +- iptr += src->linesize[i]; +- optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + +- (dst->linesize[i] - (padright >> x_shift)); +- yheight = (height - 1 - (padtop + padbottom)) >> y_shift; +- for (y = 0; y < yheight; y++) { +- memset(optr, color[i], (padleft + padright) >> x_shift); +- memcpy(optr + ((padleft + padright) >> x_shift), iptr, +- (width - padleft - padright) >> x_shift); +- iptr += src->linesize[i]; +- optr += dst->linesize[i]; +- } +- } +- +- if (padbottom || padright) { +- optr = dst->data[i] + dst->linesize[i] * +- ((height - padbottom) >> y_shift) - (padright >> x_shift); +- memset(optr, color[i],dst->linesize[i] * +- (padbottom >> y_shift) + (padright >> x_shift)); +- } +- } +- +- return 0; +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif /* FF_API_AVPICTURE */ +diff -Naur a/media/ffvpx/libavcodec/internal.h b/media/ffvpx/libavcodec/internal.h +--- a/media/ffvpx/libavcodec/internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/internal.h 2023-04-06 12:50:24.492176543 +0200 +@@ -28,86 +28,17 @@ + + #include "libavutil/buffer.h" + #include "libavutil/channel_layout.h" +-#include "libavutil/fifo.h" + #include "libavutil/mathematics.h" + #include "libavutil/pixfmt.h" + #include "avcodec.h" + #include "config.h" + +-/** +- * The codec does not modify any global variables in the init function, +- * allowing to call the init function without locking any global mutexes. +- */ +-#define FF_CODEC_CAP_INIT_THREADSAFE (1 << 0) +-/** +- * The codec allows calling the close function for deallocation even if +- * the init function returned a failure. Without this capability flag, a +- * codec does such cleanup internally when returning failures from the +- * init function and does not expect the close function to be called at +- * all. +- */ +-#define FF_CODEC_CAP_INIT_CLEANUP (1 << 1) +-/** +- * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set +- * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite +- * this field. If it's unset, decode.c tries to guess the pkt_dts field +- * from the input AVPacket. +- */ +-#define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2) +-/** +- * The decoder extracts and fills its parameters even if the frame is +- * skipped due to the skip_frame setting. +- */ +-#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3) +-/** +- * The decoder sets the cropping fields in the output frames manually. +- * If this cap is set, the generic code will initialize output frame +- * dimensions to coded rather than display values. +- */ +-#define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4) +-/** +- * Codec initializes slice-based threading with a main function +- */ +-#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5) +-/* +- * The codec supports frame threading and has inter-frame dependencies, so it +- * uses ff_thread_report/await_progress(). +- */ +-#define FF_CODEC_CAP_ALLOCATE_PROGRESS (1 << 6) +-/** +- * Codec handles avctx->thread_count == 0 (auto) internally. +- */ +-#define FF_CODEC_CAP_AUTO_THREADS (1 << 7) +-/** +- * Codec handles output frame properties internally instead of letting the +- * internal logic derive them from AVCodecInternal.last_pkt_props. +- */ +-#define FF_CODEC_CAP_SETS_FRAME_PROPS (1 << 8) +- +-/** +- * AVCodec.codec_tags termination value +- */ +-#define FF_CODEC_TAGS_END -1 +- +- +-#ifdef TRACE +-# define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__) +-#else +-# define ff_tlog(ctx, ...) do { } while(0) ++#if CONFIG_LCMS2 ++# include "fflcms2.h" + #endif + +- +-#define FF_DEFAULT_QUANT_BIAS 999999 +- +-#define FF_QSCALE_TYPE_MPEG1 0 +-#define FF_QSCALE_TYPE_MPEG2 1 +-#define FF_QSCALE_TYPE_H264 2 +-#define FF_QSCALE_TYPE_VP56 3 +- + #define FF_SANE_NB_CHANNELS 512U + +-#define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1) +- + #if HAVE_SIMD_ALIGN_64 + # define STRIDE_ALIGN 64 /* AVX-512 */ + #elif HAVE_SIMD_ALIGN_32 +@@ -118,46 +49,45 @@ + # define STRIDE_ALIGN 8 + #endif + +-typedef struct DecodeSimpleContext { +- AVPacket *in_pkt; +-} DecodeSimpleContext; +- +-typedef struct EncodeSimpleContext { +- AVFrame *in_frame; +-} EncodeSimpleContext; +- + typedef struct AVCodecInternal { + /** +- * Whether the parent AVCodecContext is a copy of the context which had +- * init() called on it. +- * This is used by multithreading - shared tables and picture pointers +- * should be freed from the original context only. ++ * When using frame-threaded decoding, this field is set for the first ++ * worker thread (e.g. to decode extradata just once). + */ + int is_copy; + + /** +- * An audio frame with less than required samples has been submitted and +- * padded with silence. Reject all subsequent frames. ++ * An audio frame with less than required samples has been submitted (and ++ * potentially padded with silence). Reject all subsequent frames. + */ + int last_audio_frame; + +-#if FF_API_OLD_ENCDEC +- AVFrame *to_free; +-#endif ++ /** ++ * Audio encoders can set this flag during init to indicate that they ++ * want the small last frame to be padded to a multiple of pad_samples. ++ */ ++ int pad_samples; + + AVBufferRef *pool; + + void *thread_ctx; + +- DecodeSimpleContext ds; +- AVBSFContext *bsf; ++ /** ++ * This packet is used to hold the packet given to decoders ++ * implementing the .decode API; it is unused by the generic ++ * code for decoders implementing the .receive_frame API and ++ * may be freely used (but not freed) by them with the caveat ++ * that the packet will be unreferenced generically in ++ * avcodec_flush_buffers(). ++ */ ++ AVPacket *in_pkt; ++ struct AVBSFContext *bsf; + + /** + * Properties (timestamps+side data) extracted from the last packet passed + * for decoding. + */ + AVPacket *last_pkt_props; +- AVFifoBuffer *pkt_props; + + /** + * temporary buffer used for encoders to store their bitstream +@@ -165,9 +95,36 @@ + uint8_t *byte_buffer; + unsigned int byte_buffer_size; + ++ /** ++ * This is set to AV_PKT_FLAG_KEY for encoders that encode intra-only ++ * formats (i.e. whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set). ++ * This is used to set said flag generically for said encoders. ++ */ ++ int intra_only_flag; ++ + void *frame_thread_encoder; + +- EncodeSimpleContext es; ++ /** ++ * The input frame is stored here for encoders implementing the simple ++ * encode API. ++ * ++ * Not allocated in other cases. ++ */ ++ AVFrame *in_frame; ++ ++ /** ++ * When the AV_CODEC_FLAG_RECON_FRAME flag is used. the encoder should store ++ * here the reconstructed frame corresponding to the last returned packet. ++ * ++ * Not allocated in other cases. ++ */ ++ AVFrame *recon_frame; ++ ++ /** ++ * If this is set, then FFCodec->close (if existing) needs to be called ++ * for the parent AVCodecContext. ++ */ ++ int needs_close; + + /** + * Number of audio samples to skip at the start of the next decoded frame +@@ -185,28 +142,14 @@ + int draining; + + /** +- * buffers for using new encode/decode API through legacy API ++ * Temporary buffers for newly received or not yet output packets/frames. + */ + AVPacket *buffer_pkt; + AVFrame *buffer_frame; + int draining_done; + +-#if FF_API_OLD_ENCDEC +- int compat_decode_warned; +- /* this variable is set by the decoder internals to signal to the old +- * API compat wrappers the amount of data consumed from the last packet */ +- size_t compat_decode_consumed; +- /* when a partial packet has been consumed, this stores the remaining size +- * of the packet (that should be submitted in the next decode call */ +- size_t compat_decode_partial_size; +- AVFrame *compat_decode_frame; +- AVPacket *compat_encode_packet; +-#endif +- + int showed_multi_packet_warning; + +- int skip_samples_multiplier; +- + /* to prevent infinite loop on errors when draining */ + int nb_draining_errors; + +@@ -215,16 +158,12 @@ + int initial_format; + int initial_width, initial_height; + int initial_sample_rate; +- int initial_channels; +- uint64_t initial_channel_layout; +-} AVCodecInternal; +- +-struct AVCodecDefault { +- const uint8_t *key; +- const uint8_t *value; +-}; ++ AVChannelLayout initial_ch_layout; + +-extern const uint8_t ff_log2_run[41]; ++#if CONFIG_LCMS2 ++ FFIccContext icc; /* used to read and write embedded ICC profiles */ ++#endif ++} AVCodecInternal; + + /** + * Return the index into tab at which {a,b} match elements {[0],[1]} of tab. +@@ -232,7 +171,7 @@ + */ + int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); + +-unsigned int avpriv_toupper4(unsigned int x); ++unsigned int ff_toupper4(unsigned int x); + + void ff_color_frame(AVFrame *frame, const int color[4]); + +@@ -244,46 +183,6 @@ + #define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE) + + /** +- * Check AVPacket size and/or allocate data. +- * +- * Encoders supporting AVCodec.encode2() can use this as a convenience to +- * ensure the output packet data is large enough, whether provided by the user +- * or allocated in this function. +- * +- * @param avctx the AVCodecContext of the encoder +- * @param avpkt the AVPacket +- * If avpkt->data is already set, avpkt->size is checked +- * to ensure it is large enough. +- * If avpkt->data is NULL, a new buffer is allocated. +- * avpkt->size is set to the specified size. +- * All other AVPacket fields will be reset with av_init_packet(). +- * @param size the minimum required packet size +- * @param min_size This is a hint to the allocation algorithm, which indicates +- * to what minimal size the caller might later shrink the packet +- * to. Encoders often allocate packets which are larger than the +- * amount of data that is written into them as the exact amount is +- * not known at the time of allocation. min_size represents the +- * size a packet might be shrunk to by the caller. Can be set to +- * 0. setting this roughly correctly allows the allocation code +- * to choose between several allocation strategies to improve +- * speed slightly. +- * @return non negative on success, negative error code on failure +- */ +-int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size); +- +-/** +- * Rescale from sample rate to AVCodecContext.time_base. +- */ +-static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, +- int64_t samples) +-{ +- if(samples == AV_NOPTS_VALUE) +- return AV_NOPTS_VALUE; +- return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate }, +- avctx->time_base); +-} +- +-/** + * 2^(x) for integer x + * @return correctly rounded float + */ +@@ -302,62 +201,11 @@ + return 0; + } + +-/** +- * Get a buffer for a frame. This is a wrapper around +- * AVCodecContext.get_buffer() and should be used instead calling get_buffer() +- * directly. +- */ +-int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); +- +-#define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable +-/** +- * Identical in function to ff_get_buffer(), except it reuses the existing buffer +- * if available. +- */ +-int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); +- +-int ff_thread_can_start_frame(AVCodecContext *avctx); +- + int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx); + +-const uint8_t *avpriv_find_start_code(const uint8_t *p, +- const uint8_t *end, +- uint32_t *state); +- + int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec); + + /** +- * Check that the provided frame dimensions are valid and set them on the codec +- * context. +- */ +-int ff_set_dimensions(AVCodecContext *s, int width, int height); +- +-/** +- * Check that the provided sample aspect ratio is valid and set it on the codec +- * context. +- */ +-int ff_set_sar(AVCodecContext *avctx, AVRational sar); +- +-/** +- * Add or update AV_FRAME_DATA_MATRIXENCODING side data. +- */ +-int ff_side_data_update_matrix_encoding(AVFrame *frame, +- enum AVMatrixEncoding matrix_encoding); +- +-/** +- * Select the (possibly hardware accelerated) pixel format. +- * This is a wrapper around AVCodecContext.get_format() and should be used +- * instead of calling get_format() directly. +- * +- * The list of pixel formats must contain at least one valid entry, and is +- * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software, +- * the last entry in the list must be the most accurate software format. +- * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt +- * must be set before calling this function. +- */ +-int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); +- +-/** + * Add a CPB properties side data to an encoding context. + */ + AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx); +@@ -396,12 +244,4 @@ + int ff_int_from_list_or_default(void *ctx, const char * val_name, int val, + const int * array_valid_values, int default_value); + +-void ff_dvdsub_parse_palette(uint32_t *palette, const char *p); +- +-#if defined(_WIN32) && CONFIG_SHARED && !defined(BUILDING_avcodec) +-# define av_export_avcodec __declspec(dllimport) +-#else +-# define av_export_avcodec +-#endif +- + #endif /* AVCODEC_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavcodec/jfdctfst.c b/media/ffvpx/libavcodec/jfdctfst.c +--- a/media/ffvpx/libavcodec/jfdctfst.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/jfdctfst.c 2023-04-06 12:49:40.253394890 +0200 +@@ -66,9 +66,8 @@ + * Independent JPEG Group's fast AAN dct. + */ + +-#include +-#include +-#include "libavutil/common.h" ++#include ++#include "libavutil/attributes.h" + #include "dct.h" + + #define DCTSIZE 8 +diff -Naur a/media/ffvpx/libavcodec/jrevdct.c b/media/ffvpx/libavcodec/jrevdct.c +--- a/media/ffvpx/libavcodec/jrevdct.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/jrevdct.c 2023-04-06 12:50:06.972471094 +0200 +@@ -62,7 +62,9 @@ + * Independent JPEG Group's LLM idct. + */ + +-#include "libavutil/common.h" ++#include ++#include ++ + #include "libavutil/intreadwrite.h" + + #include "dct.h" +@@ -253,7 +255,7 @@ + if (d0) { + /* Compute a 32 bit value to assign. */ + int16_t dcval = (int16_t) (d0 * (1 << PASS1_BITS)); +- register int v = (dcval & 0xffff) | ((dcval * (1 << 16)) & 0xffff0000); ++ register unsigned v = (dcval & 0xffff) | ((uint32_t)dcval << 16); + + AV_WN32A(&idataptr[ 0], v); + AV_WN32A(&idataptr[ 4], v); +@@ -986,8 +988,8 @@ + /* AC terms all zero */ + if (d0) { + /* Compute a 32 bit value to assign. */ +- int16_t dcval = (int16_t) (d0 << PASS1_BITS); +- register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); ++ int16_t dcval = (int16_t) (d0 * (1 << PASS1_BITS)); ++ register unsigned v = (dcval & 0xffff) | ((uint32_t)dcval << 16); + + AV_WN32A(&idataptr[0], v); + AV_WN32A(&idataptr[4], v); +@@ -1006,8 +1008,8 @@ + tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); + tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); + +- tmp0 = (d0 + d4) << CONST_BITS; +- tmp1 = (d0 - d4) << CONST_BITS; ++ tmp0 = (d0 + d4) * (1 << CONST_BITS); ++ tmp1 = (d0 - d4) * (1 << CONST_BITS); + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; +@@ -1018,8 +1020,8 @@ + tmp2 = MULTIPLY(-d6, FIX_1_306562965); + tmp3 = MULTIPLY(d6, FIX_0_541196100); + +- tmp0 = (d0 + d4) << CONST_BITS; +- tmp1 = (d0 - d4) << CONST_BITS; ++ tmp0 = (d0 + d4) * (1 << CONST_BITS); ++ tmp1 = (d0 - d4) * (1 << CONST_BITS); + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; +@@ -1032,8 +1034,8 @@ + tmp2 = MULTIPLY(d2, FIX_0_541196100); + tmp3 = MULTIPLY(d2, FIX_1_306562965); + +- tmp0 = (d0 + d4) << CONST_BITS; +- tmp1 = (d0 - d4) << CONST_BITS; ++ tmp0 = (d0 + d4) * (1 << CONST_BITS); ++ tmp1 = (d0 - d4) * (1 << CONST_BITS); + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; +@@ -1041,8 +1043,8 @@ + tmp12 = tmp1 - tmp2; + } else { + /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ +- tmp10 = tmp13 = (d0 + d4) << CONST_BITS; +- tmp11 = tmp12 = (d0 - d4) << CONST_BITS; ++ tmp10 = tmp13 = (d0 + d4) * (1 << CONST_BITS); ++ tmp11 = tmp12 = (d0 - d4) * (1 << CONST_BITS); + } + } + +@@ -1084,8 +1086,8 @@ + tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); + tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); + +- tmp0 = (d0 + d4) << CONST_BITS; +- tmp1 = (d0 - d4) << CONST_BITS; ++ tmp0 = (d0 + d4) * (1 << CONST_BITS); ++ tmp1 = (d0 - d4) * (1 << CONST_BITS); + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; +@@ -1096,8 +1098,8 @@ + tmp2 = MULTIPLY(-d6, FIX_1_306562965); + tmp3 = MULTIPLY(d6, FIX_0_541196100); + +- tmp0 = (d0 + d4) << CONST_BITS; +- tmp1 = (d0 - d4) << CONST_BITS; ++ tmp0 = (d0 + d4) * (1 << CONST_BITS); ++ tmp1 = (d0 - d4) * (1 << CONST_BITS); + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; +@@ -1110,8 +1112,8 @@ + tmp2 = MULTIPLY(d2, FIX_0_541196100); + tmp3 = MULTIPLY(d2, FIX_1_306562965); + +- tmp0 = (d0 + d4) << CONST_BITS; +- tmp1 = (d0 - d4) << CONST_BITS; ++ tmp0 = (d0 + d4) * (1 << CONST_BITS); ++ tmp1 = (d0 - d4) * (1 << CONST_BITS); + + tmp10 = tmp0 + tmp3; + tmp13 = tmp0 - tmp3; +@@ -1119,8 +1121,8 @@ + tmp12 = tmp1 - tmp2; + } else { + /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ +- tmp10 = tmp13 = (d0 + d4) << CONST_BITS; +- tmp11 = tmp12 = (d0 - d4) << CONST_BITS; ++ tmp10 = tmp13 = (d0 + d4) * (1 << CONST_BITS); ++ tmp11 = tmp12 = (d0 - d4) * (1 << CONST_BITS); + } + } + +diff -Naur a/media/ffvpx/libavcodec/libdav1d.c b/media/ffvpx/libavcodec/libdav1d.c +--- a/media/ffvpx/libavcodec/libdav1d.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/libdav1d.c 2023-04-06 12:50:24.492176543 +0200 +@@ -19,9 +19,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "dav1d/dav1d.h" ++#include + + #include "libavutil/avassert.h" ++#include "libavutil/cpu.h" + #include "libavutil/film_grain_params.h" + #include "libavutil/mastering_display_metadata.h" + #include "libavutil/imgutils.h" +@@ -30,6 +31,7 @@ + #include "atsc_a53.h" + #include "avcodec.h" + #include "bytestream.h" ++#include "codec_internal.h" + #include "decode.h" + #include "internal.h" + +@@ -45,6 +47,7 @@ + Dav1dData data; + int tile_threads; + int frame_threads; ++ int max_frame_delay; + int apply_grain; + int operating_point; + int all_layers; +@@ -123,11 +126,94 @@ + av_buffer_unref(&buf); + } + ++static void libdav1d_init_params(AVCodecContext *c, const Dav1dSequenceHeader *seq) ++{ ++ c->profile = seq->profile; ++ c->level = ((seq->operating_points[0].major_level - 2) << 2) ++ | seq->operating_points[0].minor_level; ++ ++ switch (seq->chr) { ++ case DAV1D_CHR_VERTICAL: ++ c->chroma_sample_location = AVCHROMA_LOC_LEFT; ++ break; ++ case DAV1D_CHR_COLOCATED: ++ c->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; ++ break; ++ } ++ c->colorspace = (enum AVColorSpace) seq->mtrx; ++ c->color_primaries = (enum AVColorPrimaries) seq->pri; ++ c->color_trc = (enum AVColorTransferCharacteristic) seq->trc; ++ c->color_range = seq->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; ++ ++ if (seq->layout == DAV1D_PIXEL_LAYOUT_I444 && ++ seq->mtrx == DAV1D_MC_IDENTITY && ++ seq->pri == DAV1D_COLOR_PRI_BT709 && ++ seq->trc == DAV1D_TRC_SRGB) ++ c->pix_fmt = pix_fmt_rgb[seq->hbd]; ++ else ++ c->pix_fmt = pix_fmt[seq->layout][seq->hbd]; ++ ++ if (seq->num_units_in_tick && seq->time_scale) { ++ av_reduce(&c->framerate.den, &c->framerate.num, ++ seq->num_units_in_tick, seq->time_scale, INT_MAX); ++ if (seq->equal_picture_interval) ++ c->ticks_per_frame = seq->num_ticks_per_picture; ++ } ++ ++ if (seq->film_grain_present) ++ c->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; ++ else ++ c->properties &= ~FF_CODEC_PROPERTY_FILM_GRAIN; ++} ++ ++static av_cold int libdav1d_parse_extradata(AVCodecContext *c) ++{ ++ Dav1dSequenceHeader seq; ++ size_t offset = 0; ++ int res; ++ ++ if (!c->extradata || c->extradata_size <= 0) ++ return 0; ++ ++ if (c->extradata[0] & 0x80) { ++ int version = c->extradata[0] & 0x7F; ++ ++ if (version != 1 || c->extradata_size < 4) { ++ int explode = !!(c->err_recognition & AV_EF_EXPLODE); ++ av_log(c, explode ? AV_LOG_ERROR : AV_LOG_WARNING, ++ "Error decoding extradata\n"); ++ return explode ? AVERROR_INVALIDDATA : 0; ++ } ++ ++ // Do nothing if there are no configOBUs to parse ++ if (c->extradata_size == 4) ++ return 0; ++ ++ offset = 4; ++ } ++ ++ res = dav1d_parse_sequence_header(&seq, c->extradata + offset, ++ c->extradata_size - offset); ++ if (res < 0) ++ return 0; // Assume no seqhdr OBUs are present ++ ++ libdav1d_init_params(c, &seq); ++ res = ff_set_dimensions(c, seq.max_width, seq.max_height); ++ if (res < 0) ++ return res; ++ ++ return 0; ++} ++ + static av_cold int libdav1d_init(AVCodecContext *c) + { + Libdav1dContext *dav1d = c->priv_data; + Dav1dSettings s; ++#if FF_DAV1D_VERSION_AT_LEAST(6,0) ++ int threads = c->thread_count; ++#else + int threads = (c->thread_count ? c->thread_count : av_cpu_count()) * 3 / 2; ++#endif + int res; + + av_log(c, AV_LOG_INFO, "libdav1d %s\n", dav1d_version()); +@@ -141,19 +227,24 @@ + s.frame_size_limit = c->max_pixels; + if (dav1d->apply_grain >= 0) + s.apply_grain = dav1d->apply_grain; +- else if (c->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) +- s.apply_grain = 0; ++ else ++ s.apply_grain = !(c->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN); + + s.all_layers = dav1d->all_layers; + if (dav1d->operating_point >= 0) + s.operating_point = dav1d->operating_point; ++#if FF_DAV1D_VERSION_AT_LEAST(6,2) ++ s.strict_std_compliance = c->strict_std_compliance > 0; ++#endif + + #if FF_DAV1D_VERSION_AT_LEAST(6,0) + if (dav1d->frame_threads || dav1d->tile_threads) + s.n_threads = FFMAX(dav1d->frame_threads, dav1d->tile_threads); + else + s.n_threads = FFMIN(threads, DAV1D_MAX_THREADS); +- s.max_frame_delay = (c->flags & AV_CODEC_FLAG_LOW_DELAY) ? 1 : s.n_threads; ++ if (dav1d->max_frame_delay > 0 && (c->flags & AV_CODEC_FLAG_LOW_DELAY)) ++ av_log(c, AV_LOG_WARNING, "Low delay mode requested, forcing max_frame_delay 1\n"); ++ s.max_frame_delay = (c->flags & AV_CODEC_FLAG_LOW_DELAY) ? 1 : dav1d->max_frame_delay; + av_log(c, AV_LOG_DEBUG, "Using %d threads, %d max_frame_delay\n", + s.n_threads, s.max_frame_delay); + #else +@@ -163,10 +254,25 @@ + s.n_frame_threads = dav1d->frame_threads + ? dav1d->frame_threads + : FFMIN(ceil(threads / s.n_tile_threads), DAV1D_MAX_FRAME_THREADS); ++ if (dav1d->max_frame_delay > 0) ++ s.n_frame_threads = FFMIN(s.n_frame_threads, dav1d->max_frame_delay); + av_log(c, AV_LOG_DEBUG, "Using %d frame threads, %d tile threads\n", + s.n_frame_threads, s.n_tile_threads); + #endif + ++#if FF_DAV1D_VERSION_AT_LEAST(6,8) ++ if (c->skip_frame >= AVDISCARD_NONKEY) ++ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_KEY; ++ else if (c->skip_frame >= AVDISCARD_NONINTRA) ++ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_INTRA; ++ else if (c->skip_frame >= AVDISCARD_NONREF) ++ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_REFERENCE; ++#endif ++ ++ res = libdav1d_parse_extradata(c); ++ if (res < 0) ++ return res; ++ + res = dav1d_open(&dav1d->c, &s); + if (res < 0) + return AVERROR(ENOMEM); +@@ -182,6 +288,13 @@ + dav1d_flush(dav1d->c); + } + ++typedef struct OpaqueData { ++ void *pkt_orig_opaque; ++#if FF_API_REORDERED_OPAQUE ++ int64_t reordered_opaque; ++#endif ++} OpaqueData; ++ + static void libdav1d_data_free(const uint8_t *data, void *opaque) { + AVBufferRef *buf = opaque; + +@@ -189,8 +302,10 @@ + } + + static void libdav1d_user_data_free(const uint8_t *data, void *opaque) { ++ AVPacket *pkt = opaque; + av_assert0(data == opaque); +- av_free(opaque); ++ av_free(pkt->opaque); ++ av_packet_free(&pkt); + } + + static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) +@@ -198,45 +313,68 @@ + Libdav1dContext *dav1d = c->priv_data; + Dav1dData *data = &dav1d->data; + Dav1dPicture pic = { 0 }, *p = &pic; ++ AVPacket *pkt; ++ OpaqueData *od = NULL; ++#if FF_DAV1D_VERSION_AT_LEAST(5,1) ++ enum Dav1dEventFlags event_flags = 0; ++#endif + int res; + + if (!data->sz) { +- AVPacket pkt = { 0 }; ++ pkt = av_packet_alloc(); ++ ++ if (!pkt) ++ return AVERROR(ENOMEM); + +- res = ff_decode_get_packet(c, &pkt); +- if (res < 0 && res != AVERROR_EOF) ++ res = ff_decode_get_packet(c, pkt); ++ if (res < 0 && res != AVERROR_EOF) { ++ av_packet_free(&pkt); + return res; ++ } + +- if (pkt.size) { +- res = dav1d_data_wrap(data, pkt.data, pkt.size, libdav1d_data_free, pkt.buf); ++ if (pkt->size) { ++ res = dav1d_data_wrap(data, pkt->data, pkt->size, ++ libdav1d_data_free, pkt->buf); + if (res < 0) { +- av_packet_unref(&pkt); ++ av_packet_free(&pkt); + return res; + } + +- data->m.timestamp = pkt.pts; +- data->m.offset = pkt.pos; +- data->m.duration = pkt.duration; +- +- pkt.buf = NULL; +- av_packet_unref(&pkt); +- +- if (c->reordered_opaque != AV_NOPTS_VALUE) { +- uint8_t *reordered_opaque = av_malloc(sizeof(c->reordered_opaque)); +- if (!reordered_opaque) { ++ pkt->buf = NULL; ++ ++FF_DISABLE_DEPRECATION_WARNINGS ++ if ( ++#if FF_API_REORDERED_OPAQUE ++ c->reordered_opaque != AV_NOPTS_VALUE || ++#endif ++ (pkt->opaque && (c->flags & AV_CODEC_FLAG_COPY_OPAQUE))) { ++ od = av_mallocz(sizeof(*od)); ++ if (!od) { ++ av_packet_free(&pkt); + dav1d_data_unref(data); + return AVERROR(ENOMEM); + } ++ od->pkt_orig_opaque = pkt->opaque; ++#if FF_API_REORDERED_OPAQUE ++ od->reordered_opaque = c->reordered_opaque; ++#endif ++FF_ENABLE_DEPRECATION_WARNINGS ++ } ++ pkt->opaque = od; + +- memcpy(reordered_opaque, &c->reordered_opaque, sizeof(c->reordered_opaque)); +- res = dav1d_data_wrap_user_data(data, reordered_opaque, +- libdav1d_user_data_free, reordered_opaque); +- if (res < 0) { +- av_free(reordered_opaque); +- dav1d_data_unref(data); +- return res; +- } ++ res = dav1d_data_wrap_user_data(data, (const uint8_t *)pkt, ++ libdav1d_user_data_free, pkt); ++ if (res < 0) { ++ av_free(pkt->opaque); ++ av_packet_free(&pkt); ++ dav1d_data_unref(data); ++ return res; + } ++ pkt = NULL; ++ } else { ++ av_packet_free(&pkt); ++ if (res >= 0) ++ return AVERROR(EAGAIN); + } + } + +@@ -244,8 +382,10 @@ + if (res < 0) { + if (res == AVERROR(EINVAL)) + res = AVERROR_INVALIDDATA; +- if (res != AVERROR(EAGAIN)) ++ if (res != AVERROR(EAGAIN)) { ++ dav1d_data_unref(data); + return res; ++ } + } + + res = dav1d_get_picture(dav1d->c, p); +@@ -274,9 +414,16 @@ + frame->linesize[1] = p->stride[1]; + frame->linesize[2] = p->stride[1]; + +- c->profile = p->seq_hdr->profile; +- c->level = ((p->seq_hdr->operating_points[0].major_level - 2) << 2) +- | p->seq_hdr->operating_points[0].minor_level; ++#if FF_DAV1D_VERSION_AT_LEAST(5,1) ++ dav1d_get_event_flags(dav1d->c, &event_flags); ++ if (c->pix_fmt == AV_PIX_FMT_NONE || ++ event_flags & DAV1D_EVENT_FLAG_NEW_SEQUENCE) ++#endif ++ libdav1d_init_params(c, p->seq_hdr); ++ res = ff_decode_frame_props(c, frame); ++ if (res < 0) ++ goto fail; ++ + frame->width = p->p.w; + frame->height = p->p.h; + if (c->width != p->p.w || c->height != p->p.h) { +@@ -292,50 +439,29 @@ + INT_MAX); + ff_set_sar(c, frame->sample_aspect_ratio); + +- switch (p->seq_hdr->chr) { +- case DAV1D_CHR_VERTICAL: +- frame->chroma_location = c->chroma_sample_location = AVCHROMA_LOC_LEFT; +- break; +- case DAV1D_CHR_COLOCATED: +- frame->chroma_location = c->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; +- break; +- } +- frame->colorspace = c->colorspace = (enum AVColorSpace) p->seq_hdr->mtrx; +- frame->color_primaries = c->color_primaries = (enum AVColorPrimaries) p->seq_hdr->pri; +- frame->color_trc = c->color_trc = (enum AVColorTransferCharacteristic) p->seq_hdr->trc; +- frame->color_range = c->color_range = p->seq_hdr->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; +- +- if (p->p.layout == DAV1D_PIXEL_LAYOUT_I444 && +- p->seq_hdr->mtrx == DAV1D_MC_IDENTITY && +- p->seq_hdr->pri == DAV1D_COLOR_PRI_BT709 && +- p->seq_hdr->trc == DAV1D_TRC_SRGB) +- frame->format = c->pix_fmt = pix_fmt_rgb[p->seq_hdr->hbd]; +- else +- frame->format = c->pix_fmt = pix_fmt[p->p.layout][p->seq_hdr->hbd]; +- +- if (p->m.user_data.data) +- memcpy(&frame->reordered_opaque, p->m.user_data.data, sizeof(frame->reordered_opaque)); ++ pkt = (AVPacket *)p->m.user_data.data; ++ od = pkt->opaque; ++#if FF_API_REORDERED_OPAQUE ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (od && od->reordered_opaque != AV_NOPTS_VALUE) ++ frame->reordered_opaque = od->reordered_opaque; + else + frame->reordered_opaque = AV_NOPTS_VALUE; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + +- if (p->seq_hdr->num_units_in_tick && p->seq_hdr->time_scale) { +- av_reduce(&c->framerate.den, &c->framerate.num, +- p->seq_hdr->num_units_in_tick, p->seq_hdr->time_scale, INT_MAX); +- if (p->seq_hdr->equal_picture_interval) +- c->ticks_per_frame = p->seq_hdr->num_ticks_per_picture; +- } ++ // restore the original user opaque value for ++ // ff_decode_frame_props_from_pkt() ++ pkt->opaque = od ? od->pkt_orig_opaque : NULL; ++ av_freep(&od); + + // match timestamps and packet size +- frame->pts = p->m.timestamp; +-#if FF_API_PKT_PTS +-FF_DISABLE_DEPRECATION_WARNINGS +- frame->pkt_pts = p->m.timestamp; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- frame->pkt_dts = p->m.timestamp; +- frame->pkt_pos = p->m.offset; +- frame->pkt_size = p->m.size; +- frame->pkt_duration = p->m.duration; ++ res = ff_decode_frame_props_from_pkt(c, frame, pkt); ++ pkt->opaque = NULL; ++ if (res < 0) ++ goto fail; ++ ++ frame->pkt_dts = pkt->pts; + frame->key_frame = p->frame_hdr->frame_type == DAV1D_FRAME_TYPE_KEY; + + switch (p->frame_hdr->frame_type) { +@@ -475,12 +601,16 @@ + #ifndef DAV1D_MAX_TILE_THREADS + #define DAV1D_MAX_TILE_THREADS DAV1D_MAX_THREADS + #endif ++#ifndef DAV1D_MAX_FRAME_DELAY ++#define DAV1D_MAX_FRAME_DELAY DAV1D_MAX_FRAME_THREADS ++#endif + + #define OFFSET(x) offsetof(Libdav1dContext, x) + #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM + static const AVOption libdav1d_options[] = { +- { "tilethreads", "Tile threads", OFFSET(tile_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_TILE_THREADS, VD }, +- { "framethreads", "Frame threads", OFFSET(frame_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_THREADS, VD }, ++ { "tilethreads", "Tile threads", OFFSET(tile_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_TILE_THREADS, VD | AV_OPT_FLAG_DEPRECATED }, ++ { "framethreads", "Frame threads", OFFSET(frame_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_THREADS, VD | AV_OPT_FLAG_DEPRECATED }, ++ { "max_frame_delay", "Max frame delay", OFFSET(max_frame_delay), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_DELAY, VD }, + { "filmgrain", "Apply Film Grain", OFFSET(apply_grain), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD | AV_OPT_FLAG_DEPRECATED }, + { "oppoint", "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 31, VD }, + { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, +@@ -494,19 +624,19 @@ + .version = LIBAVUTIL_VERSION_INT, + }; + +-AVCodec ff_libdav1d_decoder = { +- .name = "libdav1d", +- .long_name = NULL_IF_CONFIG_SMALL("dav1d AV1 decoder by VideoLAN"), +- .type = AVMEDIA_TYPE_VIDEO, +- .id = AV_CODEC_ID_AV1, ++const FFCodec ff_libdav1d_decoder = { ++ .p.name = "libdav1d", ++ CODEC_LONG_NAME("dav1d AV1 decoder by VideoLAN"), ++ .p.type = AVMEDIA_TYPE_VIDEO, ++ .p.id = AV_CODEC_ID_AV1, + .priv_data_size = sizeof(Libdav1dContext), + .init = libdav1d_init, + .close = libdav1d_close, + .flush = libdav1d_flush, +- .receive_frame = libdav1d_receive_frame, +- .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_SETS_PKT_DTS | ++ FF_CODEC_RECEIVE_FRAME_CB(libdav1d_receive_frame), ++ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, ++ .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS | FF_CODEC_CAP_SETS_FRAME_PROPS | + FF_CODEC_CAP_AUTO_THREADS, +- .priv_class = &libdav1d_class, +- .wrapper_name = "libdav1d", ++ .p.priv_class = &libdav1d_class, ++ .p.wrapper_name = "libdav1d", + }; +diff -Naur a/media/ffvpx/libavcodec/mathops.h b/media/ffvpx/libavcodec/mathops.h +--- a/media/ffvpx/libavcodec/mathops.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mathops.h 2023-04-06 12:50:24.492176543 +0200 +@@ -24,15 +24,16 @@ + + #include + ++#include "libavutil/attributes_internal.h" + #include "libavutil/common.h" +-#include "libavutil/reverse.h" + #include "config.h" + + #define MAX_NEG_CROP 1024 + + extern const uint32_t ff_inverse[257]; ++extern const uint8_t ff_log2_run[41]; + extern const uint8_t ff_sqrt_tab[256]; +-extern const uint8_t ff_crop_tab[256 + 2 * MAX_NEG_CROP]; ++extern const uint8_t attribute_visibility_hidden ff_crop_tab[256 + 2 * MAX_NEG_CROP]; + extern const uint8_t ff_zigzag_direct[64]; + extern const uint8_t ff_zigzag_scan[16+1]; + +@@ -126,6 +127,8 @@ + } + #endif + ++#define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1) ++ + #ifndef sign_extend + static inline av_const int sign_extend(int val, unsigned bits) + { +@@ -135,6 +138,15 @@ + } + #endif + ++#ifndef sign_extend64 ++static inline av_const int64_t sign_extend64(int64_t val, unsigned bits) ++{ ++ unsigned shift = 8 * sizeof(int64_t) - bits; ++ union { uint64_t u; int64_t s; } v = { (uint64_t) val << shift }; ++ return v.s >> shift; ++} ++#endif ++ + #ifndef zero_extend + static inline av_const unsigned zero_extend(unsigned val, unsigned bits) + { +@@ -240,12 +252,4 @@ + return b.s8; + } + +-static av_always_inline uint32_t bitswap_32(uint32_t x) +-{ +- return (uint32_t)ff_reverse[ x & 0xFF] << 24 | +- (uint32_t)ff_reverse[(x >> 8) & 0xFF] << 16 | +- (uint32_t)ff_reverse[(x >> 16) & 0xFF] << 8 | +- (uint32_t)ff_reverse[ x >> 24]; +-} +- + #endif /* AVCODEC_MATHOPS_H */ +diff -Naur a/media/ffvpx/libavcodec/mathtables.c b/media/ffvpx/libavcodec/mathtables.c +--- a/media/ffvpx/libavcodec/mathtables.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mathtables.c 2023-04-06 12:49:40.254394930 +0200 +@@ -112,3 +112,12 @@ + 1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4, + 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4, + }; ++ ++const uint8_t ff_log2_run[41] = { ++ 0, 0, 0, 0, 1, 1, 1, 1, ++ 2, 2, 2, 2, 3, 3, 3, 3, ++ 4, 4, 5, 5, 6, 6, 7, 7, ++ 8, 9, 10, 11, 12, 13, 14, 15, ++16, 17, 18, 19, 20, 21, 22, 23, ++24, ++}; +diff -Naur a/media/ffvpx/libavcodec/me_cmp.h b/media/ffvpx/libavcodec/me_cmp.h +--- a/media/ffvpx/libavcodec/me_cmp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/me_cmp.h 2023-04-06 12:50:06.972471094 +0200 +@@ -21,9 +21,11 @@ + + #include + ++#include "libavutil/attributes_internal.h" ++ + #include "avcodec.h" + +-extern const uint32_t ff_square_tab[512]; ++extern const uint32_t attribute_visibility_hidden ff_square_tab[512]; + + + /* minimum alignment rules ;) +@@ -46,12 +48,12 @@ + * Although currently h < 4 is not used as functions with + * width < 8 are neither used nor implemented. */ + typedef int (*me_cmp_func)(struct MpegEncContext *c, +- uint8_t *blk1 /* align width (8 or 16) */, +- uint8_t *blk2 /* align 1 */, ptrdiff_t stride, ++ const uint8_t *blk1 /* align width (8 or 16) */, ++ const uint8_t *blk2 /* align 1 */, ptrdiff_t stride, + int h); + + typedef struct MECmpContext { +- int (*sum_abs_dctelem)(int16_t *block /* align 16 */); ++ int (*sum_abs_dctelem)(const int16_t *block /* align 16 */); + + me_cmp_func sad[6]; /* identical to pix_absAxA except additional void * */ + me_cmp_func sse[6]; +@@ -80,6 +82,7 @@ + } MECmpContext; + + void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx); ++void ff_me_cmp_init_aarch64(MECmpContext *c, AVCodecContext *avctx); + void ff_me_cmp_init_alpha(MECmpContext *c, AVCodecContext *avctx); + void ff_me_cmp_init_arm(MECmpContext *c, AVCodecContext *avctx); + void ff_me_cmp_init_ppc(MECmpContext *c, AVCodecContext *avctx); +diff -Naur a/media/ffvpx/libavcodec/motion_est.h b/media/ffvpx/libavcodec/motion_est.h +--- a/media/ffvpx/libavcodec/motion_est.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/motion_est.h 2023-04-06 12:50:24.492176543 +0200 +@@ -51,10 +51,7 @@ + int direct_basis_mv[4][2]; + uint8_t *scratchpad; /**< data area for the ME algo, so that + * the ME does not need to malloc/free. */ +- uint8_t *best_mb; +- uint8_t *temp_mb[2]; + uint8_t *temp; +- int best_bits; + uint32_t *map; ///< map to avoid duplicate evaluations + uint32_t *score_map; ///< map to store the scores + unsigned map_generation; +@@ -77,8 +74,8 @@ + int ymax; + int pred_x; + int pred_y; +- uint8_t *src[4][4]; +- uint8_t *ref[4][4]; ++ const uint8_t *src[4][4]; ++ const uint8_t *ref[4][4]; + int stride; + int uvstride; + /* temp variables for picture complexity calculation */ +@@ -118,14 +115,14 @@ + + int ff_epzs_motion_search(struct MpegEncContext *s, int *mx_ptr, int *my_ptr, + int P[10][2], int src_index, int ref_index, +- int16_t (*last_mv)[2], int ref_mv_scale, int size, +- int h); ++ const int16_t (*last_mv)[2], int ref_mv_scale, ++ int size, int h); + + int ff_get_mb_score(struct MpegEncContext *s, int mx, int my, int src_index, + int ref_index, int size, int h, int add_rate); + + int ff_get_best_fcode(struct MpegEncContext *s, +- int16_t (*mv_table)[2], int type); ++ const int16_t (*mv_table)[2], int type); + + void ff_fix_long_p_mvs(struct MpegEncContext *s, int type); + void ff_fix_long_mvs(struct MpegEncContext *s, uint8_t *field_select_table, +diff -Naur a/media/ffvpx/libavcodec/moz.build b/media/ffvpx/libavcodec/moz.build +--- a/media/ffvpx/libavcodec/moz.build 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/moz.build 2023-04-06 12:50:06.972471094 +0200 +@@ -9,11 +9,12 @@ + if CONFIG['FFVPX_ASFLAGS']: + if CONFIG['CPU_ARCH'] == 'x86' or CONFIG['CPU_ARCH'] == 'x86_64': + DIRS += ['x86'] +- elif CONFIG['CPU_ARCH'] == 'aarch64': +- DIRS += ['aarch64'] + elif CONFIG['CPU_ARCH'] == 'arm': + DIRS += ['arm'] + ++if CONFIG['CPU_ARCH'] == 'aarch64': ++ DIRS += ['aarch64'] ++ + SharedLibrary('mozavcodec') + SOURCES += [ + 'allcodecs.c', +@@ -40,6 +41,7 @@ + 'flacdata.c', + 'flacdec.c', + 'flacdsp.c', ++ 'get_buffer.c', + 'idctdsp.c', + 'jfdctfst.c', + 'jfdctint.c', +@@ -54,10 +56,12 @@ + 'mpegaudiodsp_data.c', + 'mpegaudiodsp_fixed.c', + 'mpegaudiodsp_float.c', ++ 'mpegaudiotabs.c', + 'null_bsf.c', + 'options.c', + 'parser.c', + 'parsers.c', ++ 'profiles.c', + 'pthread.c', + 'pthread_frame.c', + 'pthread_slice.c', +@@ -65,26 +69,27 @@ + 'reverse.c', + 'simple_idct.c', + 'utils.c', ++ 'version.c', ++ 'vlc.c', + 'vorbis_parser.c', + 'xiph.c' + ] + + if not CONFIG['MOZ_FFVPX_AUDIOONLY']: + SOURCES += [ ++ 'atsc_a53.c', + 'av1dec.c', + 'avpicture.c', +- 'bitstream_filter.c', + 'cbs.c', + 'cbs_av1.c', + 'golomb.c', + 'h264pred.c', + 'imgconvert.c', ++ 'libdav1d.c', + 'mathtables.c', +- 'profiles.c', + 'qsv_api.c', + 'raw.c', + 'videodsp.c', +- 'vp56rac.c', + 'vp8.c', + 'vp8_parser.c', + 'vp8dsp.c', +@@ -100,21 +105,22 @@ + 'vp9lpf.c', + 'vp9mvs.c', + 'vp9prob.c', +- 'vp9recon.c' ++ 'vp9recon.c', ++ 'vpx_rac.c', ++ ] ++ USE_LIBS += [ ++ 'dav1d', ++ 'media_libdav1d_asm', + ] + if CONFIG['MOZ_WAYLAND']: + LOCAL_INCLUDES += ['/media/mozva'] + SOURCES += [ +- 'atsc_a53.c', +- 'libdav1d.c', + 'vaapi_av1.c', + 'vaapi_decode.c', + 'vaapi_vp8.c', + 'vaapi_vp9.c', + ] + USE_LIBS += [ +- 'dav1d', +- 'media_libdav1d_asm', + 'mozva' + ] + +diff -Naur a/media/ffvpx/libavcodec/mpeg12data.h b/media/ffvpx/libavcodec/mpeg12data.h +--- a/media/ffvpx/libavcodec/mpeg12data.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpeg12data.h 2023-04-06 12:50:06.972471094 +0200 +@@ -30,7 +30,6 @@ + + #include + #include "libavutil/rational.h" +-#include "rl.h" + + extern const uint16_t ff_mpeg1_default_intra_matrix[]; + extern const uint16_t ff_mpeg1_default_non_intra_matrix[64]; +@@ -40,9 +39,6 @@ + extern const uint16_t ff_mpeg12_vlc_dc_chroma_code[12]; + extern const unsigned char ff_mpeg12_vlc_dc_chroma_bits[12]; + +-extern RLTable ff_rl_mpeg1; +-extern RLTable ff_rl_mpeg2; +- + extern const uint8_t ff_mpeg12_mbAddrIncrTable[36][2]; + extern const uint8_t ff_mpeg12_mbPatTable[64][2]; + +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodata.c b/media/ffvpx/libavcodec/mpegaudiodata.c +--- a/media/ffvpx/libavcodec/mpegaudiodata.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodata.c 2023-04-06 12:49:40.254394930 +0200 +@@ -26,19 +26,6 @@ + + #include "mpegaudiodata.h" + +- +-const uint16_t avpriv_mpa_bitrate_tab[2][3][15] = { +- { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 }, +- {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 }, +- {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 } }, +- { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256}, +- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}, +- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160} +- } +-}; +- +-const uint16_t avpriv_mpa_freq_tab[3] = { 44100, 48000, 32000 }; +- + /*******************************************************/ + /* layer 2 tables */ + +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodata.h b/media/ffvpx/libavcodec/mpegaudiodata.h +--- a/media/ffvpx/libavcodec/mpegaudiodata.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodata.h 2023-04-06 12:49:40.254394930 +0200 +@@ -31,14 +31,13 @@ + + #include "config.h" + +-#include "internal.h" + #include "vlc.h" + + #define MODE_EXT_MS_STEREO 2 + #define MODE_EXT_I_STEREO 1 + +-extern av_export_avcodec const uint16_t avpriv_mpa_bitrate_tab[2][3][15]; +-extern av_export_avcodec const uint16_t avpriv_mpa_freq_tab[3]; ++extern const uint16_t ff_mpa_bitrate_tab[2][3][15]; ++extern const uint16_t ff_mpa_freq_tab[3]; + extern const int ff_mpa_sblimit_table[5]; + extern const int ff_mpa_quant_steps[17]; + extern const int ff_mpa_quant_bits[17]; +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodec_common.c b/media/ffvpx/libavcodec/mpegaudiodec_common.c +--- a/media/ffvpx/libavcodec/mpegaudiodec_common.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodec_common.c 2023-04-06 12:50:06.972471094 +0200 +@@ -28,6 +28,7 @@ + #include + + #include "libavutil/avassert.h" ++#include "libavutil/libm.h" + #include "libavutil/thread.h" + + #include "mpegaudiodata.h" +@@ -64,10 +65,10 @@ + + /* mpegaudio layer 3 huffman tables */ + VLC ff_huff_vlc[16]; +-static VLC_TYPE huff_vlc_tables[128 + 128 + 128 + 130 + 128 + 154 + 166 + 142 + +- 204 + 190 + 170 + 542 + 460 + 662 + 414][2]; ++static VLCElem huff_vlc_tables[128 + 128 + 128 + 130 + 128 + 154 + 166 + 142 + ++ 204 + 190 + 170 + 542 + 460 + 662 + 414]; + VLC ff_huff_quad_vlc[2]; +-static VLC_TYPE huff_quad_vlc_tables[64 + 16][2]; ++static VLCElem huff_quad_vlc_tables[64 + 16]; + + static const uint8_t mpa_hufflens[] = { + /* Huffman table 1 - 4 entries */ +@@ -368,7 +369,7 @@ + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, + 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */ + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, +- 18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */ ++ 18, 22, 26, 32, 38, 46, 54, 62, 70, 76, 36, }, /* 24000 */ + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, + 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */ + { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodec_fixed.c b/media/ffvpx/libavcodec/mpegaudiodec_fixed.c +--- a/media/ffvpx/libavcodec/mpegaudiodec_fixed.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodec_fixed.c 2023-04-06 12:50:06.972471094 +0200 +@@ -19,10 +19,12 @@ + */ + + #include "config.h" ++#include "config_components.h" + #include "libavutil/samplefmt.h" + + #define USE_FLOATS 0 + ++#include "codec_internal.h" + #include "mpegaudio.h" + + #define SHR(a,b) (((int)(a))>>(b)) +@@ -59,92 +61,88 @@ + #include "mpegaudiodec_template.c" + + #if CONFIG_MP1_DECODER +-AVCodec ff_mp1_decoder = { +- .name = "mp1", +- .long_name = NULL_IF_CONFIG_SMALL("MP1 (MPEG audio layer 1)"), +- .type = AVMEDIA_TYPE_AUDIO, +- .id = AV_CODEC_ID_MP1, ++const FFCodec ff_mp1_decoder = { ++ .p.name = "mp1", ++ CODEC_LONG_NAME("MP1 (MPEG audio layer 1)"), ++ .p.type = AVMEDIA_TYPE_AUDIO, ++ .p.id = AV_CODEC_ID_MP1, + .priv_data_size = sizeof(MPADecodeContext), + .init = decode_init, +- .decode = decode_frame, +- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | ++ FF_CODEC_DECODE_CB(decode_frame), ++ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_DR1, + .flush = flush, +- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, ++ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_NONE }, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + }; + #endif + #if CONFIG_MP2_DECODER +-AVCodec ff_mp2_decoder = { +- .name = "mp2", +- .long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"), +- .type = AVMEDIA_TYPE_AUDIO, +- .id = AV_CODEC_ID_MP2, ++const FFCodec ff_mp2_decoder = { ++ .p.name = "mp2", ++ CODEC_LONG_NAME("MP2 (MPEG audio layer 2)"), ++ .p.type = AVMEDIA_TYPE_AUDIO, ++ .p.id = AV_CODEC_ID_MP2, + .priv_data_size = sizeof(MPADecodeContext), + .init = decode_init, +- .decode = decode_frame, +- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | ++ FF_CODEC_DECODE_CB(decode_frame), ++ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_DR1, + .flush = flush, +- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, ++ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_NONE }, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + }; + #endif + #if CONFIG_MP3_DECODER +-AVCodec ff_mp3_decoder = { +- .name = "mp3", +- .long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"), +- .type = AVMEDIA_TYPE_AUDIO, +- .id = AV_CODEC_ID_MP3, ++const FFCodec ff_mp3_decoder = { ++ .p.name = "mp3", ++ CODEC_LONG_NAME("MP3 (MPEG audio layer 3)"), ++ .p.type = AVMEDIA_TYPE_AUDIO, ++ .p.id = AV_CODEC_ID_MP3, + .priv_data_size = sizeof(MPADecodeContext), + .init = decode_init, +- .decode = decode_frame, +- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | ++ FF_CODEC_DECODE_CB(decode_frame), ++ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_DR1, + .flush = flush, +- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, ++ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_NONE }, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + }; + #endif + #if CONFIG_MP3ADU_DECODER +-AVCodec ff_mp3adu_decoder = { +- .name = "mp3adu", +- .long_name = NULL_IF_CONFIG_SMALL("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), +- .type = AVMEDIA_TYPE_AUDIO, +- .id = AV_CODEC_ID_MP3ADU, ++const FFCodec ff_mp3adu_decoder = { ++ .p.name = "mp3adu", ++ CODEC_LONG_NAME("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), ++ .p.type = AVMEDIA_TYPE_AUDIO, ++ .p.id = AV_CODEC_ID_MP3ADU, + .priv_data_size = sizeof(MPADecodeContext), + .init = decode_init, +- .decode = decode_frame_adu, +- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | ++ FF_CODEC_DECODE_CB(decode_frame_adu), ++ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_DR1, + .flush = flush, +- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, ++ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_NONE }, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, + }; + #endif + #if CONFIG_MP3ON4_DECODER +-AVCodec ff_mp3on4_decoder = { +- .name = "mp3on4", +- .long_name = NULL_IF_CONFIG_SMALL("MP3onMP4"), +- .type = AVMEDIA_TYPE_AUDIO, +- .id = AV_CODEC_ID_MP3ON4, ++const FFCodec ff_mp3on4_decoder = { ++ .p.name = "mp3on4", ++ CODEC_LONG_NAME("MP3onMP4"), ++ .p.type = AVMEDIA_TYPE_AUDIO, ++ .p.id = AV_CODEC_ID_MP3ON4, + .priv_data_size = sizeof(MP3On4DecodeContext), + .init = decode_init_mp3on4, + .close = decode_close_mp3on4, +- .decode = decode_frame_mp3on4, +- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | ++ FF_CODEC_DECODE_CB(decode_frame_mp3on4), ++ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | + AV_CODEC_CAP_DR1, + .flush = flush_mp3on4, +- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, ++ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, + AV_SAMPLE_FMT_NONE }, +- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, ++ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, + }; + #endif +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodecheader.c b/media/ffvpx/libavcodec/mpegaudiodecheader.c +--- a/media/ffvpx/libavcodec/mpegaudiodecheader.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodecheader.c 2023-04-06 12:49:40.254394930 +0200 +@@ -24,10 +24,8 @@ + * MPEG Audio header decoder. + */ + +-#include "libavutil/common.h" ++#include "libavutil/macros.h" + +-#include "avcodec.h" +-#include "internal.h" + #include "mpegaudio.h" + #include "mpegaudiodata.h" + #include "mpegaudiodecheader.h" +@@ -54,9 +52,9 @@ + s->layer = 4 - ((header >> 17) & 3); + /* extract frequency */ + sample_rate_index = (header >> 10) & 3; +- if (sample_rate_index >= FF_ARRAY_ELEMS(avpriv_mpa_freq_tab)) ++ if (sample_rate_index >= FF_ARRAY_ELEMS(ff_mpa_freq_tab)) + sample_rate_index = 0; +- sample_rate = avpriv_mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25); ++ sample_rate = ff_mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25); + sample_rate_index += 3 * (s->lsf + mpeg25); + s->sample_rate_index = sample_rate_index; + s->error_protection = ((header >> 16) & 1) ^ 1; +@@ -77,7 +75,7 @@ + s->nb_channels = 2; + + if (bitrate_index != 0) { +- frame_size = avpriv_mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index]; ++ frame_size = ff_mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index]; + s->bit_rate = frame_size * 1000; + switch(s->layer) { + case 1: +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodecheader.h b/media/ffvpx/libavcodec/mpegaudiodecheader.h +--- a/media/ffvpx/libavcodec/mpegaudiodecheader.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodecheader.h 2023-04-06 12:49:40.254394930 +0200 +@@ -27,7 +27,8 @@ + #ifndef AVCODEC_MPEGAUDIODECHEADER_H + #define AVCODEC_MPEGAUDIODECHEADER_H + +-#include "avcodec.h" ++#include ++#include "codec_id.h" + + #define MP3_MASK 0xFFFE0CCF + +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodec_template.c b/media/ffvpx/libavcodec/mpegaudiodec_template.c +--- a/media/ffvpx/libavcodec/mpegaudiodec_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodec_template.c 2023-04-06 12:50:06.972471094 +0200 +@@ -24,6 +24,8 @@ + * MPEG Audio decoder + */ + ++#include "config_components.h" ++ + #include "libavutil/attributes.h" + #include "libavutil/avassert.h" + #include "libavutil/channel_layout.h" +@@ -34,8 +36,8 @@ + #include "libavutil/thread.h" + + #include "avcodec.h" ++#include "decode.h" + #include "get_bits.h" +-#include "internal.h" + #include "mathops.h" + #include "mpegaudiodsp.h" + +@@ -372,7 +374,7 @@ + crc_val = av_crc(crc_tab, crc_val, &buf[6], sec_byte_len); + + AV_WB32(tmp_buf, +- ((buf[6 + sec_byte_len] & (0xFF00 >> sec_rem_bits)) << 24) + ++ ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) + + ((s->crc << 16) >> sec_rem_bits)); + + crc_val = av_crc(crc_tab, crc_val, tmp_buf, 3); +@@ -1546,8 +1548,8 @@ + return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels; + } + +-static int decode_frame(AVCodecContext * avctx, void *data, int *got_frame_ptr, +- AVPacket *avpkt) ++static int decode_frame(AVCodecContext *avctx, AVFrame *frame, ++ int *got_frame_ptr, AVPacket *avpkt) + { + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; +@@ -1580,8 +1582,9 @@ + return AVERROR_INVALIDDATA; + } + /* update codec info */ +- avctx->channels = s->nb_channels; +- avctx->channel_layout = s->nb_channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; ++ av_channel_layout_uninit(&avctx->ch_layout); ++ avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO : ++ (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; + if (!avctx->bit_rate) + avctx->bit_rate = s->bit_rate; + +@@ -1593,7 +1596,7 @@ + buf_size= s->frame_size; + } + +- s->frame = data; ++ s->frame = frame; + + ret = mp_decode_frame(s, NULL, buf, buf_size); + if (ret >= 0) { +@@ -1630,7 +1633,7 @@ + } + + #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER +-static int decode_frame_adu(AVCodecContext *avctx, void *data, ++static int decode_frame_adu(AVCodecContext *avctx, AVFrame *frame, + int *got_frame_ptr, AVPacket *avpkt) + { + const uint8_t *buf = avpkt->data; +@@ -1638,7 +1641,6 @@ + MPADecodeContext *s = avctx->priv_data; + uint32_t header; + int len, ret; +- int av_unused out_size; + + len = buf_size; + +@@ -1662,14 +1664,15 @@ + } + /* update codec info */ + avctx->sample_rate = s->sample_rate; +- avctx->channels = s->nb_channels; +- avctx->channel_layout = s->nb_channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; ++ av_channel_layout_uninit(&avctx->ch_layout); ++ avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO : ++ (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; + if (!avctx->bit_rate) + avctx->bit_rate = s->bit_rate; + + s->frame_size = len; + +- s->frame = data; ++ s->frame = frame; + + ret = mp_decode_frame(s, NULL, buf, buf_size); + if (ret < 0) { +@@ -1757,8 +1760,8 @@ + } + s->frames = mp3Frames[cfg.chan_config]; + s->coff = chan_offset[cfg.chan_config]; +- avctx->channels = ff_mpeg4audio_channels[cfg.chan_config]; +- avctx->channel_layout = chan_layout[cfg.chan_config]; ++ av_channel_layout_uninit(&avctx->ch_layout); ++ av_channel_layout_from_mask(&avctx->ch_layout, chan_layout[cfg.chan_config]); + + if (cfg.sample_rate < 16000) + s->syncword = 0xffe00000; +@@ -1810,10 +1813,9 @@ + } + + +-static int decode_frame_mp3on4(AVCodecContext *avctx, void *data, ++static int decode_frame_mp3on4(AVCodecContext *avctx, AVFrame *frame, + int *got_frame_ptr, AVPacket *avpkt) + { +- AVFrame *frame = data; + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; + MP3On4DecodeContext *s = avctx->priv_data; +@@ -1855,8 +1857,8 @@ + return AVERROR_INVALIDDATA; + } + +- if (ch + m->nb_channels > avctx->channels || +- s->coff[fr] + m->nb_channels > avctx->channels) { ++ if (ch + m->nb_channels > avctx->ch_layout.nb_channels || ++ s->coff[fr] + m->nb_channels > avctx->ch_layout.nb_channels) { + av_log(avctx, AV_LOG_ERROR, "frame channel count exceeds codec " + "channel count\n"); + return AVERROR_INVALIDDATA; +@@ -1881,7 +1883,7 @@ + + avctx->bit_rate += m->bit_rate; + } +- if (ch != avctx->channels) { ++ if (ch != avctx->ch_layout.nb_channels) { + av_log(avctx, AV_LOG_ERROR, "failed to decode all channels\n"); + return AVERROR_INVALIDDATA; + } +@@ -1889,7 +1891,7 @@ + /* update codec info */ + avctx->sample_rate = s->mp3decctx[0]->sample_rate; + +- frame->nb_samples = out_size / (avctx->channels * sizeof(OUT_INT)); ++ frame->nb_samples = out_size / (avctx->ch_layout.nb_channels * sizeof(OUT_INT)); + *got_frame_ptr = 1; + + return buf_size; +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodsp.c b/media/ffvpx/libavcodec/mpegaudiodsp.c +--- a/media/ffvpx/libavcodec/mpegaudiodsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodsp.c 2023-04-06 12:49:40.254394930 +0200 +@@ -74,8 +74,9 @@ + } + } + +- if (ARCH_X86) +- ff_mpadsp_init_x86_tabs(); ++#if ARCH_X86 ++ ff_mpadsp_init_x86_tabs(); ++#endif + } + + av_cold void ff_mpadsp_init(MPADSPContext *s) +@@ -94,10 +95,19 @@ + s->imdct36_blocks_float = ff_imdct36_blocks_float; + s->imdct36_blocks_fixed = ff_imdct36_blocks_fixed; + +- if (ARCH_AARCH64) ff_mpadsp_init_aarch64(s); +- if (ARCH_ARM) ff_mpadsp_init_arm(s); +- if (ARCH_PPC) ff_mpadsp_init_ppc(s); +- if (ARCH_X86) ff_mpadsp_init_x86(s); +- if (HAVE_MIPSFPU) ff_mpadsp_init_mipsfpu(s); +- if (HAVE_MIPSDSP) ff_mpadsp_init_mipsdsp(s); ++#if ARCH_AARCH64 ++ ff_mpadsp_init_aarch64(s); ++#elif ARCH_ARM ++ ff_mpadsp_init_arm(s); ++#elif ARCH_PPC ++ ff_mpadsp_init_ppc(s); ++#elif ARCH_X86 ++ ff_mpadsp_init_x86(s); ++#endif ++#if HAVE_MIPSFPU ++ ff_mpadsp_init_mipsfpu(s); ++#endif ++#if HAVE_MIPSDSP ++ ff_mpadsp_init_mipsdsp(s); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodsp.h b/media/ffvpx/libavcodec/mpegaudiodsp.h +--- a/media/ffvpx/libavcodec/mpegaudiodsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodsp.h 2023-04-06 12:49:40.254394930 +0200 +@@ -22,7 +22,7 @@ + #include + #include + +-#include "libavutil/common.h" ++#include "libavutil/macros.h" + + typedef struct MPADSPContext { + void (*apply_window_float)(float *synth_buf, float *window, +diff -Naur a/media/ffvpx/libavcodec/mpegaudiodsp_template.c b/media/ffvpx/libavcodec/mpegaudiodsp_template.c +--- a/media/ffvpx/libavcodec/mpegaudiodsp_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiodsp_template.c 2023-04-06 12:49:40.254394930 +0200 +@@ -21,7 +21,6 @@ + #include + + #include "libavutil/attributes.h" +-#include "libavutil/mem.h" + #include "libavutil/mem_internal.h" + #include "libavutil/thread.h" + +diff -Naur a/media/ffvpx/libavcodec/mpegaudiotab.h b/media/ffvpx/libavcodec/mpegaudiotab.h +--- a/media/ffvpx/libavcodec/mpegaudiotab.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiotab.h 2023-04-06 12:49:40.254394930 +0200 +@@ -0,0 +1,102 @@ ++/* ++ * mpeg audio layer 2 tables. Most of them come from the mpeg audio ++ * specification. ++ * ++ * Copyright (c) 2000, 2001 Fabrice Bellard ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * mpeg audio layer 2 tables. ++ * Most of them come from the mpeg audio specification. ++ */ ++ ++#ifndef AVCODEC_MPEGAUDIOTAB_H ++#define AVCODEC_MPEGAUDIOTAB_H ++ ++#include ++#include "mpegaudio.h" ++ ++static const int costab32[30] = { ++ FIX(0.54119610014619701222), ++ FIX(1.3065629648763763537), ++ ++ FIX(0.50979557910415917998), ++ FIX(2.5629154477415054814), ++ FIX(0.89997622313641556513), ++ FIX(0.60134488693504528634), ++ ++ FIX(0.5024192861881556782), ++ FIX(5.1011486186891552563), ++ FIX(0.78815462345125020249), ++ FIX(0.64682178335999007679), ++ FIX(0.56694403481635768927), ++ FIX(1.0606776859903470633), ++ FIX(1.7224470982383341955), ++ FIX(0.52249861493968885462), ++ ++ FIX(10.19000812354803287), ++ FIX(0.674808341455005678), ++ FIX(1.1694399334328846596), ++ FIX(0.53104259108978413284), ++ FIX(2.0577810099534108446), ++ FIX(0.58293496820613388554), ++ FIX(0.83934964541552681272), ++ FIX(0.50547095989754364798), ++ FIX(3.4076084184687189804), ++ FIX(0.62250412303566482475), ++ FIX(0.97256823786196078263), ++ FIX(0.51544730992262455249), ++ FIX(1.4841646163141661852), ++ FIX(0.5531038960344445421), ++ FIX(0.74453627100229857749), ++ FIX(0.5006029982351962726), ++}; ++ ++static const int bitinv32[32] = { ++ 0, 16, 8, 24, 4, 20, 12, 28, ++ 2, 18, 10, 26, 6, 22, 14, 30, ++ 1, 17, 9, 25, 5, 21, 13, 29, ++ 3, 19, 11, 27, 7, 23, 15, 31 ++}; ++ ++ ++/* signal to noise ratio of each quantification step (could be ++ computed from quant_steps[]). The values are dB multiplied by 10 ++*/ ++static const unsigned short quant_snr[17] = { ++ 70, 110, 160, 208, ++ 253, 316, 378, 439, ++ 499, 559, 620, 680, ++ 740, 800, 861, 920, ++ 980 ++}; ++ ++/* fixed psycho acoustic model. Values of SNR taken from the 'toolame' ++ project */ ++static const float fixed_smr[SBLIMIT] = { ++ 30, 17, 16, 10, 3, 12, 8, 2.5, ++ 5, 5, 6, 6, 5, 6, 10, 6, ++ -4, -10, -21, -30, -42, -55, -68, -75, ++ -75, -75, -75, -75, -91, -107, -110, -108 ++}; ++ ++static const unsigned char nb_scale_factors[4] = { 3, 2, 1, 2 }; ++ ++#endif /* AVCODEC_MPEGAUDIOTAB_H */ +diff -Naur a/media/ffvpx/libavcodec/mpegaudiotabs.c b/media/ffvpx/libavcodec/mpegaudiotabs.c +--- a/media/ffvpx/libavcodec/mpegaudiotabs.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiotabs.c 2023-04-06 12:49:40.254394930 +0200 +@@ -0,0 +1,22 @@ ++/* ++ * MPEG Audio common tables ++ * copyright (c) 2002 Fabrice Bellard ++ * ++ * 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 "mpegaudiotabs.h" +diff -Naur a/media/ffvpx/libavcodec/mpegaudiotabs.h b/media/ffvpx/libavcodec/mpegaudiotabs.h +--- a/media/ffvpx/libavcodec/mpegaudiotabs.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegaudiotabs.h 2023-04-06 12:49:40.254394930 +0200 +@@ -0,0 +1,39 @@ ++/* ++ * MPEG Audio common tables ++ * copyright (c) 2002 Fabrice Bellard ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_MPEGAUDIOTABS_H ++#define AVCODEC_MPEGAUDIOTABS_H ++ ++#include ++ ++const uint16_t ff_mpa_bitrate_tab[2][3][15] = { ++ { { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 }, ++ { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 }, ++ { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 } }, ++ { { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256 }, ++ { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 }, ++ { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 } ++ } ++}; ++ ++const uint16_t ff_mpa_freq_tab[3] = { 44100, 48000, 32000 }; ++ ++#endif +diff -Naur a/media/ffvpx/libavcodec/mpegpicture.h b/media/ffvpx/libavcodec/mpegpicture.h +--- a/media/ffvpx/libavcodec/mpegpicture.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegpicture.h 2023-04-06 12:50:24.492176543 +0200 +@@ -27,8 +27,9 @@ + + #include "avcodec.h" + #include "motion_est.h" +-#include "thread.h" ++#include "threadframe.h" + ++#define MPEGVIDEO_MAX_PLANES 4 + #define MAX_PICTURE_COUNT 36 + #define EDGE_WIDTH 16 + +@@ -61,34 +62,23 @@ + AVBufferRef *ref_index_buf[2]; + int8_t *ref_index[2]; + +- AVBufferRef *mb_var_buf; +- uint16_t *mb_var; ///< Table for MB variances +- +- AVBufferRef *mc_mb_var_buf; +- uint16_t *mc_mb_var; ///< Table for motion compensated MB variances +- + int alloc_mb_width; ///< mb_width used to allocate tables + int alloc_mb_height; ///< mb_height used to allocate tables + int alloc_mb_stride; ///< mb_stride used to allocate tables + +- AVBufferRef *mb_mean_buf; +- uint8_t *mb_mean; ///< Table for MB luminance +- + AVBufferRef *hwaccel_priv_buf; + void *hwaccel_picture_private; ///< Hardware accelerator private data + + int field_picture; ///< whether or not the picture was encoded in separate fields + +- int64_t mb_var_sum; ///< sum of MB variance for current frame +- int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame +- + int b_frame_score; + int needs_realloc; ///< Picture needs to be reallocated (eg due to a frame size change) + + int reference; + int shared; + +- uint64_t encoding_error[AV_NUM_DATA_POINTERS]; ++ int display_picture_number; ++ int coded_picture_number; + } Picture; + + /** +@@ -107,8 +97,8 @@ + int ff_mpeg_ref_picture(AVCodecContext *avctx, Picture *dst, Picture *src); + void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *picture); + +-void ff_free_picture_tables(Picture *pic); +-int ff_update_picture_tables(Picture *dst, Picture *src); ++void ff_mpv_picture_free(AVCodecContext *avctx, Picture *pic); ++int ff_update_picture_tables(Picture *dst, const Picture *src); + + int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared); + +diff -Naur a/media/ffvpx/libavcodec/mpegutils.h b/media/ffvpx/libavcodec/mpegutils.h +--- a/media/ffvpx/libavcodec/mpegutils.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegutils.h 2023-04-06 12:50:06.972471094 +0200 +@@ -26,7 +26,6 @@ + #include "libavutil/frame.h" + + #include "avcodec.h" +-#include "version.h" + + /** + * Return value for header parsers if frame is not coded. +@@ -38,12 +37,6 @@ + #define PICT_BOTTOM_FIELD 2 + #define PICT_FRAME 3 + +-/** +- * Value of Picture.reference when Picture is not a reference picture, but +- * is held for delayed output. +- */ +-#define DELAYED_PIC_REF 4 +- + #define MAX_MB_BYTES (30 * 16 * 16 * 3 / 8 + 120) + #define MAX_FCODE 7 + +@@ -134,16 +127,16 @@ + * + * @param h is the normal height, this will be reduced automatically if needed + */ +-void ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, ++void ff_draw_horiz_band(AVCodecContext *avctx, const AVFrame *cur, const AVFrame *last, + int y, int h, int picture_structure, int first_field, + int low_delay); + + /** + * Print debugging info for the given picture. + */ +-void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table, +- uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2], +- int *low_delay, +- int mb_width, int mb_height, int mb_stride, int quarter_sample); ++void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, ++ const uint8_t *mbskip_table, const uint32_t *mbtype_table, ++ const int8_t *qscale_table, int16_t (*const motion_val[2])[2], ++ int mb_width, int mb_height, int mb_stride, int quarter_sample); + + #endif /* AVCODEC_MPEGUTILS_H */ +diff -Naur a/media/ffvpx/libavcodec/mpegvideodata.h b/media/ffvpx/libavcodec/mpegvideodata.h +--- a/media/ffvpx/libavcodec/mpegvideodata.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegvideodata.h 2023-04-06 12:50:06.972471094 +0200 +@@ -21,15 +21,19 @@ + + #include + ++#include "libavutil/attributes_internal.h" ++ ++FF_VISIBILITY_PUSH_HIDDEN + /* encoding scans */ + extern const uint8_t ff_alternate_horizontal_scan[64]; + extern const uint8_t ff_alternate_vertical_scan[64]; + +-extern const uint8_t ff_mpeg1_dc_scale_table[128]; +-extern const uint8_t * const ff_mpeg2_dc_scale_table[4]; ++extern const uint8_t ff_mpeg12_dc_scale_table[4][32]; ++static const uint8_t *const ff_mpeg1_dc_scale_table = ff_mpeg12_dc_scale_table[0]; + + extern const uint8_t ff_mpeg2_non_linear_qscale[32]; + + extern const uint8_t ff_default_chroma_qscale_table[32]; ++FF_VISIBILITY_POP_HIDDEN + + #endif /* AVCODEC_MPEGVIDEODATA_H */ +diff -Naur a/media/ffvpx/libavcodec/mpegvideoencdsp.h b/media/ffvpx/libavcodec/mpegvideoencdsp.h +--- a/media/ffvpx/libavcodec/mpegvideoencdsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegvideoencdsp.h 2023-04-06 12:50:06.973471134 +0200 +@@ -30,12 +30,12 @@ + #define EDGE_BOTTOM 2 + + typedef struct MpegvideoEncDSPContext { +- int (*try_8x8basis)(int16_t rem[64], int16_t weight[64], +- int16_t basis[64], int scale); +- void (*add_8x8basis)(int16_t rem[64], int16_t basis[64], int scale); ++ int (*try_8x8basis)(const int16_t rem[64], const int16_t weight[64], ++ const int16_t basis[64], int scale); ++ void (*add_8x8basis)(int16_t rem[64], const int16_t basis[64], int scale); + +- int (*pix_sum)(uint8_t *pix, int line_size); +- int (*pix_norm1)(uint8_t *pix, int line_size); ++ int (*pix_sum)(const uint8_t *pix, int line_size); ++ int (*pix_norm1)(const uint8_t *pix, int line_size); + + void (*shrink[4])(uint8_t *dst, int dst_wrap, const uint8_t *src, + int src_wrap, int width, int height); +diff -Naur a/media/ffvpx/libavcodec/mpegvideo.h b/media/ffvpx/libavcodec/mpegvideo.h +--- a/media/ffvpx/libavcodec/mpegvideo.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/mpegvideo.h 2023-04-06 12:50:24.492176543 +0200 +@@ -28,8 +28,6 @@ + #ifndef AVCODEC_MPEGVIDEO_H + #define AVCODEC_MPEGVIDEO_H + +-#include +- + #include "avcodec.h" + #include "blockdsp.h" + #include "error_resilience.h" +@@ -39,41 +37,29 @@ + #include "h263dsp.h" + #include "hpeldsp.h" + #include "idctdsp.h" +-#include "internal.h" + #include "me_cmp.h" + #include "motion_est.h" + #include "mpegpicture.h" +-#include "mpegvideodsp.h" + #include "mpegvideoencdsp.h" +-#include "mpegvideodata.h" + #include "pixblockdsp.h" + #include "put_bits.h" + #include "ratecontrol.h" +-#include "parser.h" + #include "mpegutils.h" +-#include "mpeg12data.h" + #include "qpeldsp.h" +-#include "thread.h" + #include "videodsp.h" + +-#include "libavutil/opt.h" +-#include "libavutil/timecode.h" +- + #define MAX_THREADS 32 + + #define MAX_B_FRAMES 16 + +-/* Start codes. */ +-#define SEQ_END_CODE 0x000001b7 +-#define SEQ_START_CODE 0x000001b3 +-#define GOP_START_CODE 0x000001b8 +-#define PICTURE_START_CODE 0x00000100 +-#define SLICE_MIN_START_CODE 0x00000101 +-#define SLICE_MAX_START_CODE 0x000001af +-#define EXT_START_CODE 0x000001b5 +-#define USER_START_CODE 0x000001b2 +-#define SLICE_START_CODE 0x000001b7 +- ++/** ++ * Scantable. ++ */ ++typedef struct ScanTable { ++ const uint8_t *scantable; ++ uint8_t permutated[64]; ++ uint8_t raster_end[64]; ++} ScanTable; + + /** + * MpegEncContext. +@@ -88,14 +74,18 @@ + + /* scantables */ + ScanTable inter_scantable; ///< if inter == intra then intra should be used to reduce the cache usage +- ScanTable intra_scantable; +- ScanTable intra_h_scantable; +- ScanTable intra_v_scantable; + + /* WARNING: changes above this line require updates to hardcoded + * offsets used in ASM. */ + ++ ScanTable intra_scantable; ++ uint8_t permutated_intra_h_scantable[64]; ++ uint8_t permutated_intra_v_scantable[64]; ++ + struct AVCodecContext *avctx; ++ /* The following pointer is intended for codecs sharing code ++ * between decoder and encoder and in need of a common context to do so. */ ++ void *private_ctx; + /* the following parameters must be initialized before encoding */ + int width, height;///< picture size. must be a multiple of 16 + int gop_size; +@@ -115,7 +105,6 @@ + int max_b_frames; ///< max number of B-frames for encoding + int luma_elim_threshold; + int chroma_elim_threshold; +- int strict_std_compliance; ///< strictly follow the std (MPEG-4, ...) + int workaround_bugs; ///< workaround bugs in encoders which cannot be detected automatically + int codec_tag; ///< internal codec_tag upper case converted from avctx codec_tag + /* the following fields are managed internally by the encoder */ +@@ -125,6 +114,7 @@ + int input_picture_number; ///< used to set pic->display_picture_number, should not be used for/by anything else + int coded_picture_number; ///< used to set pic->coded_picture_number, should not be used for/by anything else + int picture_number; //FIXME remove, unclear definition ++ int extradata_parsed; + int picture_in_gop_number; ///< 0-> first pic in gop, ... + int mb_width, mb_height; ///< number of MBs horizontally & vertically + int mb_stride; ///< mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 +@@ -137,7 +127,7 @@ + Picture **input_picture; ///< next pictures on display order for encoding + Picture **reordered_input_picture; ///< pointer to the next pictures in coded order for encoding + +- int64_t user_specified_pts; ///< last non-zero pts from AVFrame which was passed into avcodec_encode_video2() ++ int64_t user_specified_pts; ///< last non-zero pts from AVFrame which was passed into avcodec_send_frame() + /** + * pts difference between the first and second input frame, used for + * calculating dts of the first frame when there's a delay */ +@@ -168,10 +158,10 @@ + Picture next_picture; + + /** +- * copy of the source picture structure for encoding. ++ * Reference to the source picture for encoding. + * note, linesize & data, might not match the source picture (for field pictures) + */ +- Picture new_picture; ++ AVFrame *new_picture; + + /** + * copy of the current picture structure. +@@ -182,6 +172,7 @@ + Picture *last_picture_ptr; ///< pointer to the previous picture. + Picture *next_picture_ptr; ///< pointer to the next picture (for bidir pred) + Picture *current_picture_ptr; ///< pointer to the current picture ++ int skipped_last_frame; + int last_dc[3]; ///< last DC values for MPEG-1 + int16_t *dc_val_base; + int16_t *dc_val[3]; ///< used for MPEG-4 DC prediction, all 3 arrays must be continuous +@@ -208,14 +199,11 @@ + int *lambda_table; + int adaptive_quant; ///< use adaptive quantization + int dquant; ///< qscale difference to prev qscale +- int closed_gop; ///< MPEG1/2 GOP is closed + int pict_type; ///< AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ... + int vbv_delay; + int last_pict_type; //FIXME removes + int last_non_b_pict_type; ///< used for MPEG-4 gmc B-frames & ratecontrol + int droppable; +- int frame_rate_index; +- AVRational mpeg2_frame_rate_ext; + int last_lambda_for[5]; ///< last lambda for a specific pict type + int skipdct; ///< skip dct and code zero residual + +@@ -229,7 +217,6 @@ + HpelDSPContext hdsp; + IDCTDSPContext idsp; + MECmpContext mecc; +- MpegVideoDSPContext mdsp; + MpegvideoEncDSPContext mpvencdsp; + PixblockDSPContext pdsp; + QpelDSPContext qdsp; +@@ -243,8 +230,8 @@ + int16_t (*b_bidir_forw_mv_table_base)[2]; + int16_t (*b_bidir_back_mv_table_base)[2]; + int16_t (*b_direct_mv_table_base)[2]; +- int16_t (*p_field_mv_table_base[2][2])[2]; +- int16_t (*b_field_mv_table_base[2][2][2])[2]; ++ int16_t (*p_field_mv_table_base)[2]; ++ int16_t (*b_field_mv_table_base)[2]; + int16_t (*p_mv_table)[2]; ///< MV table (1MV per MB) P-frame encoding + int16_t (*b_forw_mv_table)[2]; ///< MV table (1MV per MB) forward mode B-frame encoding + int16_t (*b_back_mv_table)[2]; ///< MV table (1MV per MB) backward mode B-frame encoding +@@ -253,8 +240,17 @@ + int16_t (*b_direct_mv_table)[2]; ///< MV table (1MV per MB) direct mode B-frame encoding + int16_t (*p_field_mv_table[2][2])[2]; ///< MV table (2MV per MB) interlaced P-frame encoding + int16_t (*b_field_mv_table[2][2][2])[2];///< MV table (4MV per MB) interlaced B-frame encoding +- uint8_t (*p_field_select_table[2]); +- uint8_t (*b_field_select_table[2][2]); ++ uint8_t (*p_field_select_table[2]); ///< Only the first element is allocated ++ uint8_t (*b_field_select_table[2][2]); ///< Only the first element is allocated ++ ++ /* The following fields are encoder-only */ ++ uint16_t *mb_var; ///< Table for MB variances ++ uint16_t *mc_mb_var; ///< Table for motion compensated MB variances ++ uint8_t *mb_mean; ///< Table for MB luminance ++ int64_t mb_var_sum; ///< sum of MB variance for current frame ++ int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame ++ uint64_t encoding_error[MPEGVIDEO_MAX_PLANES]; ++ + int motion_est; ///< ME algorithm + int me_penalty_compensation; + int me_pre; ///< prepass for motion estimation +@@ -301,7 +297,6 @@ + uint16_t chroma_intra_matrix[64]; + uint16_t inter_matrix[64]; + uint16_t chroma_inter_matrix[64]; +- int force_duplicated_matrix; ///< Force duplication of mjpeg matrices, useful for rtp streaming + + int intra_quant_bias; ///< bias for the quantizer + int inter_quant_bias; ///< bias for the quantizer +@@ -315,7 +310,6 @@ + uint8_t *inter_ac_vlc_length; + uint8_t *inter_ac_vlc_last_length; + uint8_t *luma_dc_vlc_length; +-#define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level)) + + int coded_score[12]; + +@@ -346,8 +340,6 @@ + int i_tex_bits; + int p_tex_bits; + int i_count; +- int f_count; +- int b_count; + int skip_count; + int misc_bits; ///< cbp, mb_type + int last_bits; ///< temp var used for calculating the above vars +@@ -357,9 +349,6 @@ + int resync_mb_y; ///< y position of last resync marker + GetBitContext last_resync_gb; ///< used to search for the next resync marker + int mb_num_left; ///< number of MBs left in this video packet (for partitioned Slices only) +- int next_p_frame_damaged; ///< set if the next p frame is damaged, to avoid showing trashed B-frames +- +- ParseContext parse_context; + + /* H.263 specific */ + int gob_index; +@@ -369,9 +358,6 @@ + uint8_t *mb_info_ptr; + int mb_info_size; + int ehc_mode; +-#if FF_API_MPV_RC_STRATEGY +- int rc_strategy; ///< deprecated +-#endif + + /* H.263+ specific */ + int umvplus; ///< == H.263+ && unrestricted_mv +@@ -395,18 +381,12 @@ + uint16_t pb_time; ///< time distance between the last b and p,s,i frame + uint16_t pp_field_time; + uint16_t pb_field_time; ///< like above, just for interlaced +- int real_sprite_warping_points; +- int sprite_offset[2][2]; ///< sprite offset[isChroma][isMVY] +- int sprite_delta[2][2]; ///< sprite_delta [isY][isMVY] + int mcsel; + int quant_precision; + int quarter_sample; ///< 1->qpel, 0->half pel ME/MC +- int aspect_ratio_info; //FIXME remove +- int sprite_warping_accuracy; + int data_partitioning; ///< data partitioning flag from header + int partitioned_frame; ///< is current frame partitioned + int low_delay; ///< no reordering needed / has no B-frames +- int vo_type; + PutBitContext tex_pb; ///< used for data partitioned VOPs + PutBitContext pb2; ///< used for data partitioned VOPs + int mpeg_quant; +@@ -425,8 +405,6 @@ + /* MJPEG specific */ + struct MJpegContext *mjpeg_ctx; + int esc_pos; +- int pred; +- int huffman; + + /* MSMPEG4 specific */ + int mv_table_index; +@@ -441,31 +419,23 @@ + int per_mb_rl_table; + int esc3_level_length; + int esc3_run_length; +- /** [mb_intra][isChroma][level][run][last] */ +- int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]; + int inter_intra_pred; + int mspel; + +- /* SpeedHQ specific */ +- int slice_start; +- + /* decompression specific */ + GetBitContext gb; + + /* MPEG-1 specific */ +- int gop_picture_number; ///< index of the first picture of a GOP based on fake_pic_num & MPEG-1 specific + int last_mv_dir; ///< last mv_dir, used for B-frame encoding +- uint8_t *vbv_delay_ptr; ///< pointer to vbv_delay in the bitstream ++ int vbv_delay_pos; ///< offset of vbv_delay in the bitstream + + /* MPEG-2-specific - I wished not to have to support this mess. */ + int progressive_sequence; + int mpeg_f_code[2][2]; +- int a53_cc; + + // picture structure defines are loaded from mpegutils.h + int picture_structure; + +- int64_t timecode_frame_start; ///< GOP timecode frame start number, in non drop frame format + int intra_dc_precision; + int frame_pred_frame_dct; + int top_field_first; +@@ -474,14 +444,6 @@ + int brd_scale; + int intra_vlc_format; + int alternate_scan; +- int seq_disp_ext; +- int video_format; +-#define VIDEO_FORMAT_COMPONENT 0 +-#define VIDEO_FORMAT_PAL 1 +-#define VIDEO_FORMAT_NTSC 2 +-#define VIDEO_FORMAT_SECAM 3 +-#define VIDEO_FORMAT_MAC 4 +-#define VIDEO_FORMAT_UNSPECIFIED 5 + int repeat_first_field; + int chroma_420_type; + int chroma_format; +@@ -495,29 +457,18 @@ + int full_pel[2]; + int interlaced_dct; + int first_field; ///< is 1 for the first field of a field picture 0 otherwise +- int drop_frame_timecode; ///< timecode is in drop frame format. +- int scan_offset; ///< reserve space for SVCD scan offset user data. + + /* RTP specific */ + int rtp_mode; + int rtp_payload_size; + +- char *tc_opt_str; ///< timecode option string +- AVTimecode tc; ///< timecode context +- + uint8_t *ptr_lastgob; +- int swap_uv; //vcr2 codec is an MPEG-2 variant with U and V swapped +- int pack_pblocks; //xvmc needs to keep blocks without gaps. + int16_t (*pblocks[12])[64]; + + int16_t (*block)[64]; ///< points to one of the following blocks + int16_t (*blocks)[12][64]; // for HQ mode we need to keep the best block + int (*decode_mb)(struct MpegEncContext *s, int16_t block[12][64]); // used by some codecs to avoid a switch() + +- int32_t (*block32)[12][64]; +- int dpcm_direction; // 0 = DCT, 1 = DPCM top to bottom scan, -1 = DPCM bottom to top scan +- int16_t (*dpcm_macroblock)[3][256]; +- + #define SLICE_OK 0 + #define SLICE_ERROR -1 + #define SLICE_END -2 ///", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +-{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\ +- FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ +-{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\ +- FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ +-{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ +-{ "error_rate", "Simulate errors in the bitstream to test error concealment.", \ +- FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ +-{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \ +- FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ +-{"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +-{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ +-{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \ +- "defined in the section 'Expression Evaluation', the following functions are available: " \ +- "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ +- "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ +- FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ +-{"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +-{"rc_buf_aggressivity", "currently useless", FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +-{"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ +-{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"ibias", "intra quant bias", FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"pbias", "inter quant bias", FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" }, \ +-{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +-{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +-{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +-{ "force_duplicated_matrix", "Always write luma and chroma matrix for mjpeg, useful for rtp streaming.", FF_MPV_OFFSET(force_duplicated_matrix), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS }, \ +-{"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ +-{"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, \ +-{"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +-{"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"mpeg_quant", "Use MPEG quantizers instead of H.263", FF_MPV_OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS }, \ +-{"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"mepre", "pre motion estimation", FF_MPV_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ +-{"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ +-{"a53cc", "Use A53 Closed Captions (if available)", FF_MPV_OFFSET(a53_cc), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FF_MPV_OPT_FLAGS }, \ +-FF_MPV_RC_STRATEGY_OPTS +- +-extern const AVOption ff_mpv_generic_options[]; + + /** + * Set the given MpegEncContext to common defaults (same for encoding +@@ -689,8 +548,6 @@ + */ + void ff_mpv_common_defaults(MpegEncContext *s); + +-void ff_dct_encode_init_x86(MpegEncContext *s); +- + int ff_mpv_common_init(MpegEncContext *s); + void ff_mpv_common_init_arm(MpegEncContext *s); + void ff_mpv_common_init_axp(MpegEncContext *s); +@@ -698,58 +555,48 @@ + void ff_mpv_common_init_ppc(MpegEncContext *s); + void ff_mpv_common_init_x86(MpegEncContext *s); + void ff_mpv_common_init_mips(MpegEncContext *s); ++/** ++ * Initialize an MpegEncContext's thread contexts. Presumes that ++ * slice_context_count is already set and that all the fields ++ * that are freed/reset in free_duplicate_context() are NULL. ++ */ ++int ff_mpv_init_duplicate_contexts(MpegEncContext *s); ++/** ++ * Initialize and allocates MpegEncContext fields dependent on the resolution. ++ */ ++int ff_mpv_init_context_frame(MpegEncContext *s); ++/** ++ * Frees and resets MpegEncContext fields depending on the resolution ++ * as well as the slice thread contexts. ++ * Is used during resolution changes to avoid a full reinitialization of the ++ * codec. ++ */ ++void ff_mpv_free_context_frame(MpegEncContext *s); + +-int ff_mpv_common_frame_size_change(MpegEncContext *s); + void ff_mpv_common_end(MpegEncContext *s); + +-void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx); +-void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]); +-void ff_mpv_report_decode_progress(MpegEncContext *s); +- +-int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx); +-void ff_mpv_frame_end(MpegEncContext *s); +- +-int ff_mpv_encode_init(AVCodecContext *avctx); +-void ff_mpv_encode_init_x86(MpegEncContext *s); +- +-int ff_mpv_encode_end(AVCodecContext *avctx); +-int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, +- const AVFrame *frame, int *got_packet); +-int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase); +- + void ff_clean_intra_table_entries(MpegEncContext *s); +-void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h); +-void ff_mpeg_flush(AVCodecContext *avctx); +- +-void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict); +- +-int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type); +- +-void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); + +-int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src); +-int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); ++int ff_update_duplicate_context(MpegEncContext *dst, const MpegEncContext *src); + void ff_set_qscale(MpegEncContext * s, int qscale); + + void ff_mpv_idct_init(MpegEncContext *s); +-int ff_dct_encode_init(MpegEncContext *s); +-void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], +- const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra); +-int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow); +-void ff_block_permute(int16_t *block, uint8_t *permutation, +- const uint8_t *scantable, int last); ++void ff_init_scantable(const uint8_t *permutation, ScanTable *st, ++ const uint8_t *src_scantable); + void ff_init_block_index(MpegEncContext *s); + + void ff_mpv_motion(MpegEncContext *s, + uint8_t *dest_y, uint8_t *dest_cb, + uint8_t *dest_cr, int dir, +- uint8_t **ref_picture, ++ uint8_t *const *ref_picture, + op_pixels_func (*pix_op)[4], + qpel_mc_func (*qpix_op)[16]); + +-static inline void ff_update_block_index(MpegEncContext *s){ +- const int bytes_per_pixel = 1 + (s->avctx->bits_per_raw_sample > 8); +- const int block_size= (8*bytes_per_pixel) >> s->avctx->lowres; ++static inline void ff_update_block_index(MpegEncContext *s, int bits_per_raw_sample, ++ int lowres, int chroma_x_shift) ++{ ++ const int bytes_per_pixel = 1 + (bits_per_raw_sample > 8); ++ const int block_size = (8 * bytes_per_pixel) >> lowres; + + s->block_index[0]+=2; + s->block_index[1]+=2; +@@ -758,26 +605,8 @@ + s->block_index[4]++; + s->block_index[5]++; + s->dest[0]+= 2*block_size; +- s->dest[1]+= (2 >> s->chroma_x_shift) * block_size; +- s->dest[2]+= (2 >> s->chroma_x_shift) * block_size; +-} +- +-static inline int get_bits_diff(MpegEncContext *s){ +- const int bits= put_bits_count(&s->pb); +- const int last= s->last_bits; +- +- s->last_bits = bits; +- +- return bits - last; +-} +- +-static inline int mpeg_get_qscale(MpegEncContext *s) +-{ +- int qscale = get_bits(&s->gb, 5); +- if (s->q_scale_type) +- return ff_mpeg2_non_linear_qscale[qscale]; +- else +- return qscale << 1; ++ s->dest[1] += (2 >> chroma_x_shift) * block_size; ++ s->dest[2] += (2 >> chroma_x_shift) * block_size; + } + + #endif /* AVCODEC_MPEGVIDEO_H */ +diff -Naur a/media/ffvpx/libavcodec/null_bsf.c b/media/ffvpx/libavcodec/null_bsf.c +--- a/media/ffvpx/libavcodec/null_bsf.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/null_bsf.c 2023-04-06 12:49:40.254394930 +0200 +@@ -21,10 +21,9 @@ + * Null bitstream filter -- pass the input through unchanged. + */ + +-#include "bsf.h" + #include "bsf_internal.h" + +-const AVBitStreamFilter ff_null_bsf = { +- .name = "null", ++const FFBitStreamFilter ff_null_bsf = { ++ .p.name = "null", + .filter = ff_bsf_get_packet_ref, + }; +diff -Naur a/media/ffvpx/libavcodec/options.c b/media/ffvpx/libavcodec/options.c +--- a/media/ffvpx/libavcodec/options.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/options.c 2023-04-06 12:50:24.492176543 +0200 +@@ -24,8 +24,10 @@ + * Options definition for AVCodecContext. + */ + ++#include "config_components.h" ++ + #include "avcodec.h" +-#include "internal.h" ++#include "codec_internal.h" + #include "libavutil/avassert.h" + #include "libavutil/internal.h" + #include "libavutil/mem.h" +@@ -39,7 +41,7 @@ + static const char* context_to_name(void* ptr) { + AVCodecContext *avc= ptr; + +- if(avc && avc->codec && avc->codec->name) ++ if (avc && avc->codec) + return avc->codec->name; + else + return "NULL"; +@@ -53,25 +55,6 @@ + return NULL; + } + +-#if FF_API_CHILD_CLASS_NEXT +-static const AVClass *codec_child_class_next(const AVClass *prev) +-{ +- void *iter = NULL; +- const AVCodec *c = NULL; +- +- /* find the codec that corresponds to prev */ +- while (prev && (c = av_codec_iterate(&iter))) +- if (c->priv_class == prev) +- break; +- +- /* find next codec with priv options */ +- while (c = av_codec_iterate(&iter)) +- if (c->priv_class) +- return c->priv_class; +- return NULL; +-} +-#endif +- + static const AVClass *codec_child_class_iterate(void **iter) + { + const AVCodec *c; +@@ -85,8 +68,10 @@ + static AVClassCategory get_category(void *ptr) + { + AVCodecContext* avctx = ptr; +- if(avctx->codec && avctx->codec->decode) return AV_CLASS_CATEGORY_DECODER; +- else return AV_CLASS_CATEGORY_ENCODER; ++ if (avctx->codec && av_codec_is_decoder(avctx->codec)) ++ return AV_CLASS_CATEGORY_DECODER; ++ else ++ return AV_CLASS_CATEGORY_ENCODER; + } + + static const AVClass av_codec_context_class = { +@@ -96,9 +81,6 @@ + .version = LIBAVUTIL_VERSION_INT, + .log_level_offset_offset = offsetof(AVCodecContext, log_level_offset), + .child_next = codec_child_next, +-#if FF_API_CHILD_CLASS_NEXT +- .child_class_next = codec_child_class_next, +-#endif + .child_class_iterate = codec_child_class_iterate, + .category = AV_CLASS_CATEGORY_ENCODER, + .get_category = get_category, +@@ -106,6 +88,7 @@ + + static int init_context_defaults(AVCodecContext *s, const AVCodec *codec) + { ++ const FFCodec *const codec2 = ffcodec(codec); + int flags=0; + memset(s, 0, sizeof(AVCodecContext)); + +@@ -125,6 +108,8 @@ + flags= AV_OPT_FLAG_SUBTITLE_PARAM; + av_opt_set_defaults2(s, flags, flags); + ++ av_channel_layout_uninit(&s->ch_layout); ++ + s->time_base = (AVRational){0,1}; + s->framerate = (AVRational){ 0, 1 }; + s->pkt_timebase = (AVRational){ 0, 1 }; +@@ -134,26 +119,28 @@ + s->execute = avcodec_default_execute; + s->execute2 = avcodec_default_execute2; + s->sample_aspect_ratio = (AVRational){0,1}; ++ s->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; + s->pix_fmt = AV_PIX_FMT_NONE; + s->sw_pix_fmt = AV_PIX_FMT_NONE; + s->sample_fmt = AV_SAMPLE_FMT_NONE; + ++#if FF_API_REORDERED_OPAQUE ++FF_DISABLE_DEPRECATION_WARNINGS + s->reordered_opaque = AV_NOPTS_VALUE; +- if(codec && codec->priv_data_size){ +- if(!s->priv_data){ +- s->priv_data= av_mallocz(codec->priv_data_size); +- if (!s->priv_data) { +- return AVERROR(ENOMEM); +- } +- } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ if(codec && codec2->priv_data_size){ ++ s->priv_data = av_mallocz(codec2->priv_data_size); ++ if (!s->priv_data) ++ return AVERROR(ENOMEM); + if(codec->priv_class){ + *(const AVClass**)s->priv_data = codec->priv_class; + av_opt_set_defaults(s->priv_data); + } + } +- if (codec && codec->defaults) { ++ if (codec && codec2->defaults) { + int ret; +- const AVCodecDefault *d = codec->defaults; ++ const FFCodecDefault *d = codec2->defaults; + while (d->key) { + ret = av_opt_set(s, d->key, d->value, 0); + av_assert0(ret >= 0); +@@ -163,13 +150,6 @@ + return 0; + } + +-#if FF_API_GET_CONTEXT_DEFAULTS +-int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec) +-{ +- return init_context_defaults(s, codec); +-} +-#endif +- + AVCodecContext *avcodec_alloc_context3(const AVCodec *codec) + { + AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext)); +@@ -199,149 +179,16 @@ + av_freep(&avctx->intra_matrix); + av_freep(&avctx->inter_matrix); + av_freep(&avctx->rc_override); ++ av_channel_layout_uninit(&avctx->ch_layout); + + av_freep(pavctx); + } + +-#if FF_API_COPY_CONTEXT +-static void copy_context_reset(AVCodecContext *avctx) +-{ +- int i; +- +- av_opt_free(avctx); +-#if FF_API_CODED_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- av_frame_free(&avctx->coded_frame); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- av_freep(&avctx->rc_override); +- av_freep(&avctx->intra_matrix); +- av_freep(&avctx->inter_matrix); +- av_freep(&avctx->extradata); +- av_freep(&avctx->subtitle_header); +- av_buffer_unref(&avctx->hw_frames_ctx); +- av_buffer_unref(&avctx->hw_device_ctx); +- for (i = 0; i < avctx->nb_coded_side_data; i++) +- av_freep(&avctx->coded_side_data[i].data); +- av_freep(&avctx->coded_side_data); +- avctx->subtitle_header_size = 0; +- avctx->nb_coded_side_data = 0; +- avctx->extradata_size = 0; +-} +- +-int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src) +-{ +- const AVCodec *orig_codec = dest->codec; +- uint8_t *orig_priv_data = dest->priv_data; +- +- if (avcodec_is_open(dest)) { // check that the dest context is uninitialized +- av_log(dest, AV_LOG_ERROR, +- "Tried to copy AVCodecContext %p into already-initialized %p\n", +- src, dest); +- return AVERROR(EINVAL); +- } +- +- copy_context_reset(dest); +- +- memcpy(dest, src, sizeof(*dest)); +- av_opt_copy(dest, src); +- +- dest->priv_data = orig_priv_data; +- dest->codec = orig_codec; +- +- if (orig_priv_data && src->codec && src->codec->priv_class && +- dest->codec && dest->codec->priv_class) +- av_opt_copy(orig_priv_data, src->priv_data); +- +- +- /* set values specific to opened codecs back to their default state */ +- dest->slice_offset = NULL; +- dest->hwaccel = NULL; +- dest->internal = NULL; +-#if FF_API_CODED_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- dest->coded_frame = NULL; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- +- /* reallocate values that should be allocated separately */ +- dest->extradata = NULL; +- dest->coded_side_data = NULL; +- dest->intra_matrix = NULL; +- dest->inter_matrix = NULL; +- dest->rc_override = NULL; +- dest->subtitle_header = NULL; +- dest->hw_frames_ctx = NULL; +- dest->hw_device_ctx = NULL; +- dest->nb_coded_side_data = 0; +- +-#define alloc_and_copy_or_fail(obj, size, pad) \ +- if (src->obj && size > 0) { \ +- dest->obj = av_malloc(size + pad); \ +- if (!dest->obj) \ +- goto fail; \ +- memcpy(dest->obj, src->obj, size); \ +- if (pad) \ +- memset(((uint8_t *) dest->obj) + size, 0, pad); \ +- } +- alloc_and_copy_or_fail(extradata, src->extradata_size, +- AV_INPUT_BUFFER_PADDING_SIZE); +- dest->extradata_size = src->extradata_size; +- alloc_and_copy_or_fail(intra_matrix, 64 * sizeof(int16_t), 0); +- alloc_and_copy_or_fail(inter_matrix, 64 * sizeof(int16_t), 0); +- alloc_and_copy_or_fail(rc_override, src->rc_override_count * sizeof(*src->rc_override), 0); +- alloc_and_copy_or_fail(subtitle_header, src->subtitle_header_size, 1); +- av_assert0(dest->subtitle_header_size == src->subtitle_header_size); +-#undef alloc_and_copy_or_fail +- +- if (src->hw_frames_ctx) { +- dest->hw_frames_ctx = av_buffer_ref(src->hw_frames_ctx); +- if (!dest->hw_frames_ctx) +- goto fail; +- } +- +- return 0; +- +-fail: +- copy_context_reset(dest); +- return AVERROR(ENOMEM); +-} +-#endif +- + const AVClass *avcodec_get_class(void) + { + return &av_codec_context_class; + } + +-#if FF_API_GET_FRAME_CLASS +-#define FOFFSET(x) offsetof(AVFrame,x) +- +-static const AVOption frame_options[]={ +-{"best_effort_timestamp", "", FOFFSET(best_effort_timestamp), AV_OPT_TYPE_INT64, {.i64 = AV_NOPTS_VALUE }, INT64_MIN, INT64_MAX, 0}, +-{"pkt_pos", "", FOFFSET(pkt_pos), AV_OPT_TYPE_INT64, {.i64 = -1 }, INT64_MIN, INT64_MAX, 0}, +-{"pkt_size", "", FOFFSET(pkt_size), AV_OPT_TYPE_INT64, {.i64 = -1 }, INT64_MIN, INT64_MAX, 0}, +-{"sample_aspect_ratio", "", FOFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0 }, 0, INT_MAX, 0}, +-{"width", "", FOFFSET(width), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, +-{"height", "", FOFFSET(height), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, +-{"format", "", FOFFSET(format), AV_OPT_TYPE_INT, {.i64 = -1 }, 0, INT_MAX, 0}, +-{"channel_layout", "", FOFFSET(channel_layout), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, 0}, +-{"sample_rate", "", FOFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, +-{NULL}, +-}; +- +-static const AVClass av_frame_class = { +- .class_name = "AVFrame", +- .item_name = NULL, +- .option = frame_options, +- .version = LIBAVUTIL_VERSION_INT, +-}; +- +-const AVClass *avcodec_get_frame_class(void) +-{ +- return &av_frame_class; +-} +-#endif +- + #define SROFFSET(x) offsetof(AVSubtitleRect,x) + + static const AVOption subtitle_rect_options[]={ +diff -Naur a/media/ffvpx/libavcodec/options_table.h b/media/ffvpx/libavcodec/options_table.h +--- a/media/ffvpx/libavcodec/options_table.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/options_table.h 2023-04-06 12:50:24.492176543 +0200 +@@ -22,13 +22,15 @@ + #ifndef AVCODEC_OPTIONS_TABLE_H + #define AVCODEC_OPTIONS_TABLE_H + ++#include "config_components.h" ++ + #include + #include + #include + + #include "libavutil/opt.h" + #include "avcodec.h" +-#include "version.h" ++#include "version_major.h" + + #define OFFSET(x) offsetof(AVCodecContext,x) + #define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C +@@ -55,11 +57,13 @@ + {"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"}, + {"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"}, + {"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"}, ++{"recon_frame", "export reconstructed frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_RECON_FRAME}, .unit = "flags"}, ++{"copy_opaque", "propagate opaque values", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_COPY_OPAQUE}, .unit = "flags"}, ++{"frame_duration", "use frame durations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_FRAME_DURATION}, .unit = "flags"}, + {"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, + {"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"}, + {"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"}, + {"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"}, +-{"truncated", "Input bitstream might be randomly truncated", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, V|D, "flags"}, + {"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"}, + {"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, "flags"}, + {"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, "flags"}, +@@ -79,6 +83,7 @@ + {"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"}, + {"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, "flags2"}, + {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"}, ++{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, "flags2"}, + {"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, "export_side_data"}, + {"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, "export_side_data"}, + {"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, "export_side_data"}, +@@ -87,10 +92,12 @@ + {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX}, + {"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E}, + {"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, ++#if FF_API_OLD_CHANNEL_LAYOUT + {"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, ++#endif + {"cutoff", "set cutoff bandwidth", OFFSET(cutoff), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|E}, + {"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|E}, +-{"frame_number", NULL, OFFSET(frame_number), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, ++{"frame_number", NULL, OFFSET(frame_num), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, + {"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, + {"qcomp", "video quantizer scale compression (VBR). Constant of ratecontrol equation. " + "Recommended range for default rc_eq: 0.0-1.0", +@@ -101,21 +108,6 @@ + {"qdiff", "maximum difference between the quantizer scales (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.i64 = 3 }, INT_MIN, INT_MAX, V|E}, + {"bf", "set maximum number of B-frames between non-B-frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E}, + {"b_qfactor", "QP factor between P- and B-frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E}, +-#if FF_API_PRIVATE_OPT +-{"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, V|E}, +-{"ps", "RTP payload size in bytes", OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif +-#if FF_API_STAT_BITS +-{"mv_bits", NULL, OFFSET(mv_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"header_bits", NULL, OFFSET(header_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"i_tex_bits", NULL, OFFSET(i_tex_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"p_tex_bits", NULL, OFFSET(p_tex_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"i_count", NULL, OFFSET(i_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"p_count", NULL, OFFSET(p_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"skip_count", NULL, OFFSET(skip_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"misc_bits", NULL, OFFSET(misc_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-{"frame_bits", NULL, OFFSET(frame_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +-#endif + {"codec_tag", NULL, OFFSET(codec_tag), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, + {"bug", "work around not autodetected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"}, + {"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"}, +@@ -151,9 +143,6 @@ + {"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE | AV_EF_COMPLIANT | AV_EF_CAREFUL}, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, + {"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, + {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, +-#if FF_API_PRIVATE_OPT +-{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif + {"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, + {"maxrate", "maximum bitrate (in bits/s). Used for VBV together with bufsize.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT_MAX, V|A|E}, + {"minrate", "minimum bitrate (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise.", +@@ -194,12 +183,6 @@ + {"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"}, + {"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, "ec"}, + {"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, +-#if FF_API_PRIVATE_OPT +-{"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"}, +-{"left", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"}, +-{"plane", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_PLANE }, INT_MIN, INT_MAX, V|E, "pred"}, +-{"median", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_MEDIAN }, INT_MIN, INT_MAX, V|E, "pred"}, +-#endif + {"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E}, + {"sar", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E}, + {"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"}, +@@ -220,34 +203,15 @@ + {"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, "debug"}, + {"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, + {"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#if FF_API_PRIVATE_OPT +-{"preme", "pre motion estimation", OFFSET(pre_me), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif + {"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, + {"subq", "sub-pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E}, + {"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, + {"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, +-#if FF_API_CODER_TYPE +-{"coder", NULL, OFFSET(coder_type), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "coder"}, +-{"vlc", "variable length coder / Huffman coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_VLC }, INT_MIN, INT_MAX, V|E, "coder"}, +-{"ac", "arithmetic coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_AC }, INT_MIN, INT_MAX, V|E, "coder"}, +-{"raw", "raw (no encoding)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_RAW }, INT_MIN, INT_MAX, V|E, "coder"}, +-{"rle", "run-length coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_RLE }, INT_MIN, INT_MAX, V|E, "coder"}, +-#endif /* FF_API_CODER_TYPE */ +-#if FF_API_PRIVATE_OPT +-{"context", "context model", OFFSET(context_model), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif + {"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, + {"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, "mbd"}, + {"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"}, + {"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"}, + {"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"}, +-#if FF_API_PRIVATE_OPT +-{"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif +-#if FF_API_PRIVATE_OPT +-{"nr", "noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif + {"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, + {"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, "threads"}, + {"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"}, +@@ -261,12 +225,6 @@ + {"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, "avctx.level"}, + {"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "avctx.level"}, + {"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|A|D}, +-#if FF_API_PRIVATE_OPT +-{"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-{"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-{"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-{"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"}, +-#endif + {"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, + {"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, + {"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, +@@ -292,9 +250,6 @@ + {"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, + {"mblmin", "minimum macroblock Lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E}, + {"mblmax", "maximum macroblock Lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E}, +-#if FF_API_PRIVATE_OPT +-{"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, V|E}, +-#endif + {"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, + {"skip_idct" , "skip IDCT/dequantization for the selected frames", OFFSET(skip_idct), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, + {"skip_frame" , "skip decoding for the selected frames", OFFSET(skip_frame), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, +@@ -306,28 +261,17 @@ + {"nointra" , "discard all frames except I frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, "avdiscard"}, + {"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "avdiscard"}, + {"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, 4, V|E}, +-#if FF_API_PRIVATE_OPT +-{"brd_scale", "downscale frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 10, V|E}, +-#endif + {"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.i64 = 25 }, INT_MIN, INT_MAX, V|E}, + {"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.i64 = 1 }, INT_MIN, INT_MAX, V|E}, +-#if FF_API_PRIVATE_OPT +-{"chromaoffset", "chroma QP offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +-#endif + {"trellis", "rate-distortion optimal quantization", OFFSET(trellis), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, + {"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.i64 = 256 }, 0, INT_MAX, V|E}, +-#if FF_API_PRIVATE_OPT +-{"b_sensitivity", "adjust sensitivity of b_frame_strategy 1", OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, V|E}, +-#endif + {"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.i64 = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E}, +-#if FF_API_PRIVATE_OPT +-{"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, +-{"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, +-{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, V|E}, +-#endif + {"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, +-{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"}, +-{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"}, ++{"ch_layout", NULL, OFFSET(ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL }, 0, 0, A|E|D, "ch_layout"}, ++#if FF_API_OLD_CHANNEL_LAYOUT ++{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"}, ++{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"}, ++#endif + {"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0.0, FLT_MAX, V|E}, + {"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), AV_OPT_TYPE_FLOAT, {.dbl = 3 }, 0.0, FLT_MAX, V|E}, + {"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D}, +@@ -432,21 +376,6 @@ + {"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, + {"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, + {"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, +-#if FF_API_ASS_TIMING +-{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, 0, 1, S|D, "sub_text_format"}, +-#else +-{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS}, 0, 1, S|D, "sub_text_format"}, +-#endif +-{"ass", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, +-#if FF_API_ASS_TIMING +-{"ass_with_timings", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, +-#endif +-#if FF_API_OLD_ENCDEC +-{"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, A|V|D }, +-#endif +-#if FF_API_SIDEDATA_ONLY_PKT +-{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, A|V|E }, +-#endif + {"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, V | D }, + {"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, V|D }, + {"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, "field_order" }, +@@ -465,6 +394,7 @@ + {"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, "hwaccel_flags" }, + {"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, + {"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, ++{"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, + {"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D }, + {"discard_damaged_percentage", "Percentage of damaged samples to discard a frame", OFFSET(discard_damaged_percentage), AV_OPT_TYPE_INT, {.i64 = 95 }, 0, 100, V|D }, + {NULL}, +diff -Naur a/media/ffvpx/libavcodec/packet.h b/media/ffvpx/libavcodec/packet.h +--- a/media/ffvpx/libavcodec/packet.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/packet.h 2023-04-06 12:50:06.973471134 +0200 +@@ -28,8 +28,9 @@ + #include "libavutil/buffer.h" + #include "libavutil/dict.h" + #include "libavutil/rational.h" ++#include "libavutil/version.h" + +-#include "libavcodec/version.h" ++#include "libavcodec/version_major.h" + + /** + * @defgroup lavc_packet AVPacket +@@ -160,7 +161,7 @@ + * the packet may contain "dual mono" audio specific to Japanese DTV + * and if it is true, recommends only the selected channel to be used. + * @code +- * u8 selected channels (0=mail/left, 1=sub/right, 2=both) ++ * u8 selected channels (0=main/left, 1=sub/right, 2=both) + * @endcode + */ + AV_PKT_DATA_JP_DUALMONO, +@@ -291,6 +292,14 @@ + AV_PKT_DATA_S12M_TIMECODE, + + /** ++ * HDR10+ dynamic metadata associated with a video frame. The metadata is in ++ * the form of the AVDynamicHDRPlus struct and contains ++ * information for color volume transform - application 4 of ++ * SMPTE 2094-40:2016 standard. ++ */ ++ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, ++ ++ /** + * The number of side data types. + * This is not part of the public API/ABI in the sense that it may + * change when new side data types are added. +@@ -305,11 +314,7 @@ + + typedef struct AVPacketSideData { + uint8_t *data; +-#if FF_API_BUFFER_SIZE_T +- int size; +-#else + size_t size; +-#endif + enum AVPacketSideDataType type; + } AVPacketSideData; + +@@ -388,15 +393,29 @@ + + int64_t pos; ///< byte position in stream, -1 if unknown + +-#if FF_API_CONVERGENCE_DURATION + /** +- * @deprecated Same as the duration field, but as int64_t. This was required +- * for Matroska subtitles, whose duration values could overflow when the +- * duration field was still an int. ++ * for some private data of the user + */ +- attribute_deprecated +- int64_t convergence_duration; +-#endif ++ void *opaque; ++ ++ /** ++ * AVBufferRef for free use by the API user. FFmpeg will never check the ++ * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when ++ * the packet is unreferenced. av_packet_copy_props() calls create a new ++ * reference with av_buffer_ref() for the target packet's opaque_ref field. ++ * ++ * This is unrelated to the opaque field, although it serves a similar ++ * purpose. ++ */ ++ AVBufferRef *opaque_ref; ++ ++ /** ++ * Time base of the packet's timestamps. ++ * In the future, this field may be set on packets output by encoders or ++ * demuxers, but its value will be by default ignored on input to decoders ++ * or muxers. ++ */ ++ AVRational time_base; + } AVPacket; + + #if FF_API_INIT_PACKET +@@ -429,8 +448,13 @@ + #define AV_PKT_FLAG_DISPOSABLE 0x0010 + + enum AVSideDataParamChangeFlags { ++#if FF_API_OLD_CHANNEL_LAYOUT ++ /** ++ * @deprecated those are not used by any decoder ++ */ + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, ++#endif + AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, + AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, + }; +@@ -529,45 +553,6 @@ + */ + int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); + +-#if FF_API_AVPACKET_OLD_API +-/** +- * @warning This is a hack - the packet memory allocation stuff is broken. The +- * packet is allocated if it was not really allocated. +- * +- * @deprecated Use av_packet_ref or av_packet_make_refcounted +- */ +-attribute_deprecated +-int av_dup_packet(AVPacket *pkt); +-/** +- * Copy packet, including contents +- * +- * @return 0 on success, negative AVERROR on fail +- * +- * @deprecated Use av_packet_ref +- */ +-attribute_deprecated +-int av_copy_packet(AVPacket *dst, const AVPacket *src); +- +-/** +- * Copy packet side data +- * +- * @return 0 on success, negative AVERROR on fail +- * +- * @deprecated Use av_packet_copy_props +- */ +-attribute_deprecated +-int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); +- +-/** +- * Free a packet. +- * +- * @deprecated Use av_packet_unref +- * +- * @param pkt packet to free +- */ +-attribute_deprecated +-void av_free_packet(AVPacket *pkt); +-#endif + /** + * Allocate new information of a packet. + * +@@ -577,11 +562,7 @@ + * @return pointer to fresh allocated data or NULL otherwise + */ + uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +-#if FF_API_BUFFER_SIZE_T +- int size); +-#else + size_t size); +-#endif + + /** + * Wrap an existing array as a packet side data. +@@ -608,11 +589,7 @@ + * @return 0 on success, < 0 on failure + */ + int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +-#if FF_API_BUFFER_SIZE_T +- int size); +-#else + size_t size); +-#endif + + /** + * Get side information from packet. +@@ -624,19 +601,7 @@ + * @return pointer to data if present or NULL otherwise + */ + uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, +-#if FF_API_BUFFER_SIZE_T +- int *size); +-#else + size_t *size); +-#endif +- +-#if FF_API_MERGE_SD_API +-attribute_deprecated +-int av_packet_merge_side_data(AVPacket *pkt); +- +-attribute_deprecated +-int av_packet_split_side_data(AVPacket *pkt); +-#endif + + const char *av_packet_side_data_name(enum AVPacketSideDataType type); + +@@ -647,11 +612,7 @@ + * @param size pointer to store the size of the returned data + * @return pointer to data if successful, NULL otherwise + */ +-#if FF_API_BUFFER_SIZE_T +-uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); +-#else + uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); +-#endif + /** + * Unpack a dictionary from side_data. + * +@@ -660,12 +621,8 @@ + * @param dict the metadata storage dictionary + * @return 0 on success, < 0 on failure + */ +-#if FF_API_BUFFER_SIZE_T +-int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); +-#else + int av_packet_unpack_dictionary(const uint8_t *data, size_t size, + AVDictionary **dict); +-#endif + + /** + * Convenience function to free all the side data stored. +diff -Naur a/media/ffvpx/libavcodec/packet_internal.h b/media/ffvpx/libavcodec/packet_internal.h +--- a/media/ffvpx/libavcodec/packet_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/packet_internal.h 2023-04-06 12:49:40.255394971 +0200 +@@ -23,16 +23,19 @@ + + #include "packet.h" + +-typedef struct PacketList { ++typedef struct PacketListEntry { ++ struct PacketListEntry *next; + AVPacket pkt; +- struct PacketList *next; ++} PacketListEntry; ++ ++typedef struct PacketList { ++ PacketListEntry *head, *tail; + } PacketList; + + /** + * Append an AVPacket to the list. + * +- * @param head List head element +- * @param tail List tail element ++ * @param list A PacketList + * @param pkt The packet being appended. The data described in it will + * be made reference counted if it isn't already. + * @param copy A callback to copy the contents of the packet to the list. +@@ -41,8 +44,7 @@ + * @return 0 on success, negative AVERROR value on failure. On failure, + the packet and the list are unchanged. + */ +-int avpriv_packet_list_put(PacketList **head, PacketList **tail, +- AVPacket *pkt, ++int avpriv_packet_list_put(PacketList *list, AVPacket *pkt, + int (*copy)(AVPacket *dst, const AVPacket *src), + int flags); + +@@ -52,22 +54,17 @@ + * @note The pkt will be overwritten completely on success. The caller + * owns the packet and must unref it by itself. + * +- * @param head List head element +- * @param tail List tail element ++ * @param head A pointer to a PacketList struct + * @param pkt Pointer to an AVPacket struct + * @return 0 on success, and a packet is returned. AVERROR(EAGAIN) if + * the list was empty. + */ +-int avpriv_packet_list_get(PacketList **head, PacketList **tail, +- AVPacket *pkt); ++int avpriv_packet_list_get(PacketList *list, AVPacket *pkt); + + /** + * Wipe the list and unref all the packets in it. +- * +- * @param head List head element +- * @param tail List tail element + */ +-void avpriv_packet_list_free(PacketList **head, PacketList **tail); ++void avpriv_packet_list_free(PacketList *list); + + int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type); + +diff -Naur a/media/ffvpx/libavcodec/parser.c b/media/ffvpx/libavcodec/parser.c +--- a/media/ffvpx/libavcodec/parser.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/parser.c 2023-04-06 12:49:40.255394971 +0200 +@@ -25,10 +25,8 @@ + #include + + #include "libavutil/avassert.h" +-#include "libavutil/internal.h" + #include "libavutil/mem.h" + +-#include "internal.h" + #include "parser.h" + + AVCodecParserContext *av_parser_init(int codec_id) +@@ -46,7 +44,9 @@ + parser->codec_ids[1] == codec_id || + parser->codec_ids[2] == codec_id || + parser->codec_ids[3] == codec_id || +- parser->codec_ids[4] == codec_id) ++ parser->codec_ids[4] == codec_id || ++ parser->codec_ids[5] == codec_id || ++ parser->codec_ids[6] == codec_id) + goto found; + } + return NULL; +@@ -55,7 +55,7 @@ + s = av_mallocz(sizeof(AVCodecParserContext)); + if (!s) + goto err_out; +- s->parser = (AVCodecParser*)parser; ++ s->parser = parser; + s->priv_data = av_mallocz(parser->priv_data_size); + if (!s->priv_data) + goto err_out; +@@ -67,11 +67,6 @@ + goto err_out; + } + s->key_frame = -1; +-#if FF_API_CONVERGENCE_DURATION +-FF_DISABLE_DEPRECATION_WARNINGS +- s->convergence_duration = 0; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + s->dts_sync_point = INT_MIN; + s->dts_ref_dts_delta = INT_MIN; + s->pts_dts_delta = INT_MIN; +@@ -132,7 +127,9 @@ + avctx->codec_id == s->parser->codec_ids[1] || + avctx->codec_id == s->parser->codec_ids[2] || + avctx->codec_id == s->parser->codec_ids[3] || +- avctx->codec_id == s->parser->codec_ids[4]); ++ avctx->codec_id == s->parser->codec_ids[4] || ++ avctx->codec_id == s->parser->codec_ids[5] || ++ avctx->codec_id == s->parser->codec_ids[6]); + + if (!(s->flags & PARSER_FLAG_FETCHED_OFFSET)) { + s->next_frame_offset = +@@ -189,42 +186,6 @@ + return index; + } + +-#if FF_API_PARSER_CHANGE +-int av_parser_change(AVCodecParserContext *s, AVCodecContext *avctx, +- uint8_t **poutbuf, int *poutbuf_size, +- const uint8_t *buf, int buf_size, int keyframe) +-{ +- if (s && s->parser->split) { +- if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER || +- avctx->flags2 & AV_CODEC_FLAG2_LOCAL_HEADER) { +- int i = s->parser->split(avctx, buf, buf_size); +- buf += i; +- buf_size -= i; +- } +- } +- +- /* cast to avoid warning about discarding qualifiers */ +- *poutbuf = (uint8_t *) buf; +- *poutbuf_size = buf_size; +- if (avctx->extradata) { +- if (keyframe && (avctx->flags2 & AV_CODEC_FLAG2_LOCAL_HEADER)) { +- int size = buf_size + avctx->extradata_size; +- +- *poutbuf_size = size; +- *poutbuf = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); +- if (!*poutbuf) +- return AVERROR(ENOMEM); +- +- memcpy(*poutbuf, avctx->extradata, avctx->extradata_size); +- memcpy(*poutbuf + avctx->extradata_size, buf, +- buf_size + AV_INPUT_BUFFER_PADDING_SIZE); +- return 1; +- } +- } +- +- return 0; +-} +-#endif + void av_parser_close(AVCodecParserContext *s) + { + if (s) { +@@ -326,17 +287,3 @@ + + av_freep(&pc->buffer); + } +- +-int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size) +-{ +- uint32_t state = -1; +- const uint8_t *ptr = buf, *end = buf + buf_size; +- +- while (ptr < end) { +- ptr = avpriv_find_start_code(ptr, end, &state); +- if (state == 0x1B3 || state == 0x1B6) +- return ptr - 4 - buf; +- } +- +- return 0; +-} +diff -Naur a/media/ffvpx/libavcodec/parser.h b/media/ffvpx/libavcodec/parser.h +--- a/media/ffvpx/libavcodec/parser.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/parser.h 2023-04-06 12:50:06.973471134 +0200 +@@ -45,8 +45,6 @@ + * AVERROR(ENOMEM) if there was a memory allocation error + */ + int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size); +-int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, +- int buf_size); + void ff_parse_close(AVCodecParserContext *s); + + /** +diff -Naur a/media/ffvpx/libavcodec/parser_list.c b/media/ffvpx/libavcodec/parser_list.c +--- a/media/ffvpx/libavcodec/parser_list.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/parser_list.c 2023-04-06 12:49:45.623611208 +0200 +@@ -1,3 +1,5 @@ ++#include "config_components.h" ++ + static const AVCodecParser * const parser_list[] = { + #if CONFIG_VP8_PARSER + &ff_vp8_parser, +diff -Naur a/media/ffvpx/libavcodec/parsers.c b/media/ffvpx/libavcodec/parsers.c +--- a/media/ffvpx/libavcodec/parsers.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/parsers.c 2023-04-06 12:50:06.973471134 +0200 +@@ -18,98 +18,69 @@ + + #include + +-#include "libavutil/thread.h" +- + #include "avcodec.h" +-#include "version.h" + +-extern AVCodecParser ff_aac_parser; +-extern AVCodecParser ff_aac_latm_parser; +-extern AVCodecParser ff_ac3_parser; +-extern AVCodecParser ff_adx_parser; +-extern AVCodecParser ff_av1_parser; +-extern AVCodecParser ff_avs2_parser; +-extern AVCodecParser ff_avs3_parser; +-extern AVCodecParser ff_bmp_parser; +-extern AVCodecParser ff_cavsvideo_parser; +-extern AVCodecParser ff_cook_parser; +-extern AVCodecParser ff_cri_parser; +-extern AVCodecParser ff_dca_parser; +-extern AVCodecParser ff_dirac_parser; +-extern AVCodecParser ff_dnxhd_parser; +-extern AVCodecParser ff_dolby_e_parser; +-extern AVCodecParser ff_dpx_parser; +-extern AVCodecParser ff_dvaudio_parser; +-extern AVCodecParser ff_dvbsub_parser; +-extern AVCodecParser ff_dvdsub_parser; +-extern AVCodecParser ff_dvd_nav_parser; +-extern AVCodecParser ff_flac_parser; +-extern AVCodecParser ff_g723_1_parser; +-extern AVCodecParser ff_g729_parser; +-extern AVCodecParser ff_gif_parser; +-extern AVCodecParser ff_gsm_parser; +-extern AVCodecParser ff_h261_parser; +-extern AVCodecParser ff_h263_parser; +-extern AVCodecParser ff_h264_parser; +-extern AVCodecParser ff_hevc_parser; +-extern AVCodecParser ff_ipu_parser; +-extern AVCodecParser ff_jpeg2000_parser; +-extern AVCodecParser ff_mjpeg_parser; +-extern AVCodecParser ff_mlp_parser; +-extern AVCodecParser ff_mpeg4video_parser; +-extern AVCodecParser ff_mpegaudio_parser; +-extern AVCodecParser ff_mpegvideo_parser; +-extern AVCodecParser ff_opus_parser; +-extern AVCodecParser ff_png_parser; +-extern AVCodecParser ff_pnm_parser; +-extern AVCodecParser ff_rv30_parser; +-extern AVCodecParser ff_rv40_parser; +-extern AVCodecParser ff_sbc_parser; +-extern AVCodecParser ff_sipr_parser; +-extern AVCodecParser ff_tak_parser; +-extern AVCodecParser ff_vc1_parser; +-extern AVCodecParser ff_vorbis_parser; +-extern AVCodecParser ff_vp3_parser; +-extern AVCodecParser ff_vp8_parser; +-extern AVCodecParser ff_vp9_parser; +-extern AVCodecParser ff_webp_parser; +-extern AVCodecParser ff_xbm_parser; +-extern AVCodecParser ff_xma_parser; ++extern const AVCodecParser ff_aac_parser; ++extern const AVCodecParser ff_aac_latm_parser; ++extern const AVCodecParser ff_ac3_parser; ++extern const AVCodecParser ff_adx_parser; ++extern const AVCodecParser ff_amr_parser; ++extern const AVCodecParser ff_av1_parser; ++extern const AVCodecParser ff_avs2_parser; ++extern const AVCodecParser ff_avs3_parser; ++extern const AVCodecParser ff_bmp_parser; ++extern const AVCodecParser ff_cavsvideo_parser; ++extern const AVCodecParser ff_cook_parser; ++extern const AVCodecParser ff_cri_parser; ++extern const AVCodecParser ff_dca_parser; ++extern const AVCodecParser ff_dirac_parser; ++extern const AVCodecParser ff_dnxhd_parser; ++extern const AVCodecParser ff_dolby_e_parser; ++extern const AVCodecParser ff_dpx_parser; ++extern const AVCodecParser ff_dvaudio_parser; ++extern const AVCodecParser ff_dvbsub_parser; ++extern const AVCodecParser ff_dvdsub_parser; ++extern const AVCodecParser ff_dvd_nav_parser; ++extern const AVCodecParser ff_flac_parser; ++extern const AVCodecParser ff_ftr_parser; ++extern const AVCodecParser ff_g723_1_parser; ++extern const AVCodecParser ff_g729_parser; ++extern const AVCodecParser ff_gif_parser; ++extern const AVCodecParser ff_gsm_parser; ++extern const AVCodecParser ff_h261_parser; ++extern const AVCodecParser ff_h263_parser; ++extern const AVCodecParser ff_h264_parser; ++extern const AVCodecParser ff_hevc_parser; ++extern const AVCodecParser ff_hdr_parser; ++extern const AVCodecParser ff_ipu_parser; ++extern const AVCodecParser ff_jpeg2000_parser; ++extern const AVCodecParser ff_misc4_parser; ++extern const AVCodecParser ff_mjpeg_parser; ++extern const AVCodecParser ff_mlp_parser; ++extern const AVCodecParser ff_mpeg4video_parser; ++extern const AVCodecParser ff_mpegaudio_parser; ++extern const AVCodecParser ff_mpegvideo_parser; ++extern const AVCodecParser ff_opus_parser; ++extern const AVCodecParser ff_png_parser; ++extern const AVCodecParser ff_pnm_parser; ++extern const AVCodecParser ff_qoi_parser; ++extern const AVCodecParser ff_rv30_parser; ++extern const AVCodecParser ff_rv40_parser; ++extern const AVCodecParser ff_sbc_parser; ++extern const AVCodecParser ff_sipr_parser; ++extern const AVCodecParser ff_tak_parser; ++extern const AVCodecParser ff_vc1_parser; ++extern const AVCodecParser ff_vorbis_parser; ++extern const AVCodecParser ff_vp3_parser; ++extern const AVCodecParser ff_vp8_parser; ++extern const AVCodecParser ff_vp9_parser; ++extern const AVCodecParser ff_webp_parser; ++extern const AVCodecParser ff_xbm_parser; ++extern const AVCodecParser ff_xma_parser; ++extern const AVCodecParser ff_xwd_parser; + + #include "libavcodec/parser_list.c" + +-#if FF_API_NEXT +-FF_DISABLE_DEPRECATION_WARNINGS +-static AVOnce av_parser_next_init = AV_ONCE_INIT; +- +-static void av_parser_init_next(void) +-{ +- AVCodecParser *prev = NULL, *p; +- int i = 0; +- while ((p = (AVCodecParser*)parser_list[i++])) { +- if (prev) +- prev->next = p; +- prev = p; +- } +-} +- +-AVCodecParser *av_parser_next(const AVCodecParser *p) +-{ +- ff_thread_once(&av_parser_next_init, av_parser_init_next); +- +- if (p) +- return p->next; +- else +- return (AVCodecParser*)parser_list[0]; +-} +- +-void av_register_codec_parser(AVCodecParser *parser) +-{ +- ff_thread_once(&av_parser_next_init, av_parser_init_next); +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + const AVCodecParser *av_parser_iterate(void **opaque) + { + uintptr_t i = (uintptr_t)*opaque; +diff -Naur a/media/ffvpx/libavcodec/pixblockdsp.h b/media/ffvpx/libavcodec/pixblockdsp.h +--- a/media/ffvpx/libavcodec/pixblockdsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/pixblockdsp.h 2023-04-06 12:50:06.973471134 +0200 +@@ -52,6 +52,8 @@ + unsigned high_bit_depth); + void ff_pixblockdsp_init_ppc(PixblockDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); ++void ff_pixblockdsp_init_riscv(PixblockDSPContext *c, AVCodecContext *avctx, ++ unsigned high_bit_depth); + void ff_pixblockdsp_init_x86(PixblockDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); + void ff_pixblockdsp_init_mips(PixblockDSPContext *c, AVCodecContext *avctx, +diff -Naur a/media/ffvpx/libavcodec/profiles.c b/media/ffvpx/libavcodec/profiles.c +--- a/media/ffvpx/libavcodec/profiles.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/profiles.c 2023-04-06 12:50:24.492176543 +0200 +@@ -85,6 +85,7 @@ + { FF_PROFILE_HEVC_MAIN_10, "Main 10" }, + { FF_PROFILE_HEVC_MAIN_STILL_PICTURE, "Main Still Picture" }, + { FF_PROFILE_HEVC_REXT, "Rext" }, ++ { FF_PROFILE_HEVC_SCC, "Scc" }, + { FF_PROFILE_UNKNOWN }, + }; + +diff -Naur a/media/ffvpx/libavcodec/pthread.c b/media/ffvpx/libavcodec/pthread.c +--- a/media/ffvpx/libavcodec/pthread.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/pthread.c 2023-04-06 12:50:24.492176543 +0200 +@@ -29,8 +29,10 @@ + * @see doc/multithreading.txt + */ + ++#include "libavutil/thread.h" ++ + #include "avcodec.h" +-#include "internal.h" ++#include "codec_internal.h" + #include "pthread_internal.h" + #include "thread.h" + +@@ -46,7 +48,6 @@ + static void validate_thread_parameters(AVCodecContext *avctx) + { + int frame_threading_supported = (avctx->codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) +- && !(avctx->flags & AV_CODEC_FLAG_TRUNCATED) + && !(avctx->flags & AV_CODEC_FLAG_LOW_DELAY) + && !(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS); + if (avctx->thread_count == 1) { +@@ -56,7 +57,7 @@ + } else if (avctx->codec->capabilities & AV_CODEC_CAP_SLICE_THREADS && + avctx->thread_type & FF_THREAD_SLICE) { + avctx->active_thread_type = FF_THREAD_SLICE; +- } else if (!(avctx->codec->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) { ++ } else if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) { + avctx->thread_count = 1; + avctx->active_thread_type = 0; + } +@@ -86,3 +87,39 @@ + else + ff_slice_thread_free(avctx); + } ++ ++av_cold void ff_pthread_free(void *obj, const unsigned offsets[]) ++{ ++ unsigned cnt = *(unsigned*)((char*)obj + offsets[0]); ++ const unsigned *cur_offset = offsets; ++ ++ *(unsigned*)((char*)obj + offsets[0]) = 0; ++ ++ for (; *(++cur_offset) != THREAD_SENTINEL && cnt; cnt--) ++ pthread_mutex_destroy((pthread_mutex_t*)((char*)obj + *cur_offset)); ++ for (; *(++cur_offset) != THREAD_SENTINEL && cnt; cnt--) ++ pthread_cond_destroy ((pthread_cond_t *)((char*)obj + *cur_offset)); ++} ++ ++av_cold int ff_pthread_init(void *obj, const unsigned offsets[]) ++{ ++ const unsigned *cur_offset = offsets; ++ unsigned cnt = 0; ++ int err; ++ ++#define PTHREAD_INIT_LOOP(type) \ ++ for (; *(++cur_offset) != THREAD_SENTINEL; cnt++) { \ ++ pthread_ ## type ## _t *dst = (void*)((char*)obj + *cur_offset); \ ++ err = pthread_ ## type ## _init(dst, NULL); \ ++ if (err) { \ ++ err = AVERROR(err); \ ++ goto fail; \ ++ } \ ++ } ++ PTHREAD_INIT_LOOP(mutex) ++ PTHREAD_INIT_LOOP(cond) ++ ++fail: ++ *(unsigned*)((char*)obj + offsets[0]) = cnt; ++ return err; ++} +diff -Naur a/media/ffvpx/libavcodec/pthread_frame.c b/media/ffvpx/libavcodec/pthread_frame.c +--- a/media/ffvpx/libavcodec/pthread_frame.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/pthread_frame.c 2023-04-06 12:50:24.492176543 +0200 +@@ -28,11 +28,14 @@ + #include + + #include "avcodec.h" ++#include "codec_internal.h" ++#include "decode.h" + #include "hwconfig.h" + #include "internal.h" + #include "pthread_internal.h" + #include "thread.h" +-#include "version.h" ++#include "threadframe.h" ++#include "version_major.h" + + #include "libavutil/avassert.h" + #include "libavutil/buffer.h" +@@ -66,7 +69,7 @@ + + enum { + UNINITIALIZED, ///< Thread has not been created, AVCodec->close mustn't be called +- NEEDS_CLOSE, ///< AVCodec->close needs to be called ++ NEEDS_CLOSE, ///< FFCodec->close needs to be called + INITIALIZED, ///< Thread has been properly set up + }; + +@@ -96,22 +99,6 @@ + + atomic_int state; + +-#if FF_API_THREAD_SAFE_CALLBACKS +- /** +- * Array of frames passed to ff_thread_release_buffer(). +- * Frames are released after all threads referencing them are finished. +- */ +- AVFrame **released_buffers; +- int num_released_buffers; +- int released_buffers_allocated; +- +- AVFrame *requested_frame; ///< AVFrame the codec passed to get_buffer() +- int requested_flags; ///< flags passed to get_buffer() for requested_frame +- +- const enum AVPixelFormat *available_formats; ///< Format array for get_format() +- enum AVPixelFormat result_format; ///< get_format() result +-#endif +- + int die; ///< Set when the thread should exit. + + int hwaccel_serializing; +@@ -145,12 +132,13 @@ + * Set for the first N packets, where N is the number of threads. + * While it is set, ff_thread_en/decode_frame won't return any results. + */ +-} FrameThreadContext; + +-#if FF_API_THREAD_SAFE_CALLBACKS +-#define THREAD_SAFE_CALLBACKS(avctx) \ +-((avctx)->thread_safe_callbacks || (avctx)->get_buffer2 == avcodec_default_get_buffer2) +-#endif ++ /* hwaccel state is temporarily stored here in order to transfer its ownership ++ * to the next decoding thread without the need for extra synchronization */ ++ const AVHWAccel *stash_hwaccel; ++ void *stash_hwaccel_context; ++ void *stash_hwaccel_priv; ++} FrameThreadContext; + + static void async_lock(FrameThreadContext *fctx) + { +@@ -170,6 +158,17 @@ + pthread_mutex_unlock(&fctx->async_mutex); + } + ++static void thread_set_name(PerThreadContext *p) ++{ ++ AVCodecContext *avctx = p->avctx; ++ int idx = p - p->parent->threads; ++ char name[16]; ++ ++ snprintf(name, sizeof(name), "av:%.7s:df%d", avctx->codec->name, idx); ++ ++ ff_thread_setname(name); ++} ++ + /** + * Codec worker thread. + * +@@ -181,7 +180,9 @@ + { + PerThreadContext *p = arg; + AVCodecContext *avctx = p->avctx; +- const AVCodec *codec = avctx->codec; ++ const FFCodec *codec = ffcodec(avctx->codec); ++ ++ thread_set_name(p); + + pthread_mutex_lock(&p->mutex); + while (1) { +@@ -190,14 +191,8 @@ + + if (p->die) break; + +-FF_DISABLE_DEPRECATION_WARNINGS +- if (!codec->update_thread_context +-#if FF_API_THREAD_SAFE_CALLBACKS +- && THREAD_SAFE_CALLBACKS(avctx) +-#endif +- ) ++ if (!codec->update_thread_context) + ff_thread_finish_setup(avctx); +-FF_ENABLE_DEPRECATION_WARNINGS + + /* If a decoder supports hwaccel, then it must call ff_get_format(). + * Since that call must happen before ff_thread_finish_setup(), the +@@ -216,22 +211,26 @@ + + av_frame_unref(p->frame); + p->got_frame = 0; +- p->result = codec->decode(avctx, p->frame, &p->got_frame, p->avpkt); ++ p->result = codec->cb.decode(avctx, p->frame, &p->got_frame, p->avpkt); + +- if ((p->result < 0 || !p->got_frame) && p->frame->buf[0]) { +- if (avctx->codec->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) +- av_log(avctx, AV_LOG_ERROR, "A frame threaded decoder did not " +- "free the frame on failure. This is a bug, please report it.\n"); +- av_frame_unref(p->frame); +- } ++ if ((p->result < 0 || !p->got_frame) && p->frame->buf[0]) ++ ff_thread_release_buffer(avctx, p->frame); + + if (atomic_load(&p->state) == STATE_SETTING_UP) + ff_thread_finish_setup(avctx); + + if (p->hwaccel_serializing) { ++ /* wipe hwaccel state to avoid stale pointers lying around; ++ * the state was transferred to FrameThreadContext in ++ * ff_thread_finish_setup(), so nothing is leaked */ ++ avctx->hwaccel = NULL; ++ avctx->hwaccel_context = NULL; ++ avctx->internal->hwaccel_priv_data = NULL; ++ + p->hwaccel_serializing = 0; + pthread_mutex_unlock(&p->parent->hwaccel_mutex); + } ++ av_assert0(!avctx->hwaccel); + + if (p->async_serializing) { + p->async_serializing = 0; +@@ -262,9 +261,10 @@ + */ + static int update_context_from_thread(AVCodecContext *dst, AVCodecContext *src, int for_user) + { ++ const FFCodec *const codec = ffcodec(dst->codec); + int err = 0; + +- if (dst != src && (for_user || src->codec->update_thread_context)) { ++ if (dst != src && (for_user || codec->update_thread_context)) { + dst->time_base = src->time_base; + dst->framerate = src->framerate; + dst->width = src->width; +@@ -277,6 +277,7 @@ + + dst->has_b_frames = src->has_b_frames; + dst->idct_algo = src->idct_algo; ++ dst->properties = src->properties; + + dst->bits_per_coded_sample = src->bits_per_coded_sample; + dst->sample_aspect_ratio = src->sample_aspect_ratio; +@@ -293,14 +294,17 @@ + dst->color_range = src->color_range; + dst->chroma_sample_location = src->chroma_sample_location; + +- dst->hwaccel = src->hwaccel; +- dst->hwaccel_context = src->hwaccel_context; +- +- dst->channels = src->channels; + dst->sample_rate = src->sample_rate; + dst->sample_fmt = src->sample_fmt; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ dst->channels = src->channels; + dst->channel_layout = src->channel_layout; +- dst->internal->hwaccel_priv_data = src->internal->hwaccel_priv_data; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ err = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); ++ if (err < 0) ++ return err; + + if (!!dst->hw_frames_ctx != !!src->hw_frames_ctx || + (dst->hw_frames_ctx && dst->hw_frames_ctx->data != src->hw_frames_ctx->data)) { +@@ -321,14 +325,11 @@ + } + + if (for_user) { +-#if FF_API_CODED_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- dst->coded_frame = src->coded_frame; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif ++ if (codec->update_thread_context_for_user) ++ err = codec->update_thread_context_for_user(dst, src); + } else { +- if (dst->codec->update_thread_context) +- err = dst->codec->update_thread_context(dst, src); ++ if (codec->update_thread_context) ++ err = codec->update_thread_context(dst, src); + } + + return err; +@@ -343,6 +344,8 @@ + */ + static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src) + { ++ int err; ++ + dst->flags = src->flags; + + dst->draw_horiz_band= src->draw_horiz_band; +@@ -359,11 +362,15 @@ + dst->skip_idct = src->skip_idct; + dst->skip_frame = src->skip_frame; + ++ dst->frame_num = src->frame_num; ++#if FF_API_AVCTX_FRAME_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS + dst->frame_number = src->frame_number; +- dst->reordered_opaque = src->reordered_opaque; +-#if FF_API_THREAD_SAFE_CALLBACKS ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++#if FF_API_REORDERED_OPAQUE + FF_DISABLE_DEPRECATION_WARNINGS +- dst->thread_safe_callbacks = src->thread_safe_callbacks; ++ dst->reordered_opaque = src->reordered_opaque; + FF_ENABLE_DEPRECATION_WARNINGS + #endif + +@@ -378,31 +385,14 @@ + src->slice_count * sizeof(*dst->slice_offset)); + } + dst->slice_count = src->slice_count; +- return 0; +-} +- +-#if FF_API_THREAD_SAFE_CALLBACKS +-/// Releases the buffers that this decoding thread was the last user of. +-static void release_delayed_buffers(PerThreadContext *p) +-{ +- FrameThreadContext *fctx = p->parent; +- +- while (p->num_released_buffers > 0) { +- AVFrame *f; + +- pthread_mutex_lock(&fctx->buffer_mutex); +- +- // fix extended data in case the caller screwed it up +- av_assert0(p->avctx->codec_type == AVMEDIA_TYPE_VIDEO || +- p->avctx->codec_type == AVMEDIA_TYPE_AUDIO); +- f = p->released_buffers[--p->num_released_buffers]; +- f->extended_data = f->data; +- av_frame_unref(f); ++ av_packet_unref(dst->internal->last_pkt_props); ++ err = av_packet_copy_props(dst->internal->last_pkt_props, src->internal->last_pkt_props); ++ if (err < 0) ++ return err; + +- pthread_mutex_unlock(&fctx->buffer_mutex); +- } ++ return 0; + } +-#endif + + static int submit_packet(PerThreadContext *p, AVCodecContext *user_avctx, + AVPacket *avpkt) +@@ -426,10 +416,6 @@ + (p->avctx->debug & FF_DEBUG_THREADS) != 0, + memory_order_relaxed); + +-#if FF_API_THREAD_SAFE_CALLBACKS +- release_delayed_buffers(p); +-#endif +- + if (prev_thread) { + int err; + if (atomic_load(&prev_thread->state) == STATE_SETTING_UP) { +@@ -446,6 +432,12 @@ + } + } + ++ /* transfer the stashed hwaccel state, if any */ ++ av_assert0(!p->avctx->hwaccel); ++ FFSWAP(const AVHWAccel*, p->avctx->hwaccel, fctx->stash_hwaccel); ++ FFSWAP(void*, p->avctx->hwaccel_context, fctx->stash_hwaccel_context); ++ FFSWAP(void*, p->avctx->internal->hwaccel_priv_data, fctx->stash_hwaccel_priv); ++ + av_packet_unref(p->avpkt); + ret = av_packet_ref(p->avpkt, avpkt); + if (ret < 0) { +@@ -458,44 +450,6 @@ + pthread_cond_signal(&p->input_cond); + pthread_mutex_unlock(&p->mutex); + +-#if FF_API_THREAD_SAFE_CALLBACKS +-FF_DISABLE_DEPRECATION_WARNINGS +- /* +- * If the client doesn't have a thread-safe get_buffer(), +- * then decoding threads call back to the main thread, +- * and it calls back to the client here. +- */ +- +- if (!p->avctx->thread_safe_callbacks && ( +- p->avctx->get_format != avcodec_default_get_format || +- p->avctx->get_buffer2 != avcodec_default_get_buffer2)) { +- while (atomic_load(&p->state) != STATE_SETUP_FINISHED && atomic_load(&p->state) != STATE_INPUT_READY) { +- int call_done = 1; +- pthread_mutex_lock(&p->progress_mutex); +- while (atomic_load(&p->state) == STATE_SETTING_UP) +- pthread_cond_wait(&p->progress_cond, &p->progress_mutex); +- +- switch (atomic_load_explicit(&p->state, memory_order_acquire)) { +- case STATE_GET_BUFFER: +- p->result = ff_get_buffer(p->avctx, p->requested_frame, p->requested_flags); +- break; +- case STATE_GET_FORMAT: +- p->result_format = ff_get_format(p->avctx, p->available_formats); +- break; +- default: +- call_done = 0; +- break; +- } +- if (call_done) { +- atomic_store(&p->state, STATE_SETTING_UP); +- pthread_cond_signal(&p->progress_cond); +- } +- pthread_mutex_unlock(&p->progress_mutex); +- } +- } +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + fctx->prev_thread = p; + fctx->next_decoding++; + +@@ -610,7 +564,7 @@ + pthread_mutex_unlock(&p->progress_mutex); + } + +-void ff_thread_await_progress(ThreadFrame *f, int n, int field) ++void ff_thread_await_progress(const ThreadFrame *f, int n, int field) + { + PerThreadContext *p; + atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL; +@@ -649,6 +603,14 @@ + async_lock(p->parent); + } + ++ /* save hwaccel state for passing to the next thread; ++ * this is done here so that this worker thread can wipe its own hwaccel ++ * state after decoding, without requiring synchronization */ ++ av_assert0(!p->parent->stash_hwaccel); ++ p->parent->stash_hwaccel = avctx->hwaccel; ++ p->parent->stash_hwaccel_context = avctx->hwaccel_context; ++ p->parent->stash_hwaccel_priv = avctx->internal->hwaccel_priv_data; ++ + pthread_mutex_lock(&p->progress_mutex); + if(atomic_load(&p->state) == STATE_SETUP_FINISHED){ + av_log(avctx, AV_LOG_WARNING, "Multiple ff_thread_finish_setup() calls\n"); +@@ -682,81 +644,26 @@ + async_lock(fctx); + } + +-#define SENTINEL 0 // This forbids putting a mutex/condition variable at the front. +-#define OFFSET_ARRAY(...) __VA_ARGS__, SENTINEL +-#define DEFINE_OFFSET_ARRAY(type, name, mutexes, conds) \ +-static const unsigned name ## _offsets[] = { offsetof(type, pthread_init_cnt),\ +- OFFSET_ARRAY mutexes, \ +- OFFSET_ARRAY conds } +- + #define OFF(member) offsetof(FrameThreadContext, member) +-DEFINE_OFFSET_ARRAY(FrameThreadContext, thread_ctx, ++DEFINE_OFFSET_ARRAY(FrameThreadContext, thread_ctx, pthread_init_cnt, + (OFF(buffer_mutex), OFF(hwaccel_mutex), OFF(async_mutex)), + (OFF(async_cond))); + #undef OFF + + #define OFF(member) offsetof(PerThreadContext, member) +-DEFINE_OFFSET_ARRAY(PerThreadContext, per_thread, ++DEFINE_OFFSET_ARRAY(PerThreadContext, per_thread, pthread_init_cnt, + (OFF(progress_mutex), OFF(mutex)), + (OFF(input_cond), OFF(progress_cond), OFF(output_cond))); + #undef OFF + +-static av_cold void free_pthread(void *obj, const unsigned offsets[]) +-{ +- unsigned cnt = *(unsigned*)((char*)obj + offsets[0]); +- const unsigned *cur_offset = offsets; +- +- for (; *(++cur_offset) != SENTINEL && cnt; cnt--) +- pthread_mutex_destroy((pthread_mutex_t*)((char*)obj + *cur_offset)); +- for (; *(++cur_offset) != SENTINEL && cnt; cnt--) +- pthread_cond_destroy ((pthread_cond_t *)((char*)obj + *cur_offset)); +-} +- +-static av_cold int init_pthread(void *obj, const unsigned offsets[]) +-{ +- const unsigned *cur_offset = offsets; +- unsigned cnt = 0; +- int err; +- +-#define PTHREAD_INIT_LOOP(type) \ +- for (; *(++cur_offset) != SENTINEL; cnt++) { \ +- pthread_ ## type ## _t *dst = (void*)((char*)obj + *cur_offset); \ +- err = pthread_ ## type ## _init(dst, NULL); \ +- if (err) { \ +- err = AVERROR(err); \ +- goto fail; \ +- } \ +- } +- PTHREAD_INIT_LOOP(mutex) +- PTHREAD_INIT_LOOP(cond) +- +-fail: +- *(unsigned*)((char*)obj + offsets[0]) = cnt; +- return err; +-} +- + void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) + { + FrameThreadContext *fctx = avctx->internal->thread_ctx; +- const AVCodec *codec = avctx->codec; ++ const FFCodec *codec = ffcodec(avctx->codec); + int i; + + park_frame_worker_threads(fctx, thread_count); + +- if (fctx->prev_thread && avctx->internal->hwaccel_priv_data != +- fctx->prev_thread->avctx->internal->hwaccel_priv_data) { +- if (update_context_from_thread(avctx, fctx->prev_thread->avctx, 1) < 0) { +- av_log(avctx, AV_LOG_ERROR, "Failed to update user thread.\n"); +- } +- } +- +- if (fctx->prev_thread && fctx->prev_thread != fctx->threads) +- if (update_context_from_thread(fctx->threads->avctx, fctx->prev_thread->avctx, 0) < 0) { +- av_log(avctx, AV_LOG_ERROR, "Final thread update failed\n"); +- fctx->prev_thread->avctx->internal->is_copy = fctx->threads->avctx->internal->is_copy; +- fctx->threads->avctx->internal->is_copy = 1; +- } +- + for (i = 0; i < thread_count; i++) { + PerThreadContext *p = &fctx->threads[i]; + AVCodecContext *ctx = p->avctx; +@@ -773,14 +680,8 @@ + if (codec->close && p->thread_init != UNINITIALIZED) + codec->close(ctx); + +-#if FF_API_THREAD_SAFE_CALLBACKS +- release_delayed_buffers(p); +- for (int j = 0; j < p->released_buffers_allocated; j++) +- av_frame_free(&p->released_buffers[j]); +- av_freep(&p->released_buffers); +-#endif + if (ctx->priv_data) { +- if (codec->priv_class) ++ if (codec->p.priv_class) + av_opt_free(ctx->priv_data); + av_freep(&ctx->priv_data); + } +@@ -788,38 +689,42 @@ + av_freep(&ctx->slice_offset); + + av_buffer_unref(&ctx->internal->pool); ++ av_packet_free(&ctx->internal->last_pkt_props); + av_freep(&ctx->internal); + av_buffer_unref(&ctx->hw_frames_ctx); + } + + av_frame_free(&p->frame); + +- free_pthread(p, per_thread_offsets); ++ ff_pthread_free(p, per_thread_offsets); + av_packet_free(&p->avpkt); + + av_freep(&p->avctx); + } + + av_freep(&fctx->threads); +- free_pthread(fctx, thread_ctx_offsets); ++ ff_pthread_free(fctx, thread_ctx_offsets); + +- av_freep(&avctx->internal->thread_ctx); ++ /* if we have stashed hwaccel state, move it to the user-facing context, ++ * so it will be freed in avcodec_close() */ ++ av_assert0(!avctx->hwaccel); ++ FFSWAP(const AVHWAccel*, avctx->hwaccel, fctx->stash_hwaccel); ++ FFSWAP(void*, avctx->hwaccel_context, fctx->stash_hwaccel_context); ++ FFSWAP(void*, avctx->internal->hwaccel_priv_data, fctx->stash_hwaccel_priv); + +- if (avctx->priv_data && avctx->codec && avctx->codec->priv_class) +- av_opt_free(avctx->priv_data); +- avctx->codec = NULL; ++ av_freep(&avctx->internal->thread_ctx); + } + + static av_cold int init_thread(PerThreadContext *p, int *threads_to_free, + FrameThreadContext *fctx, AVCodecContext *avctx, +- AVCodecContext *src, const AVCodec *codec, int first) ++ const FFCodec *codec, int first) + { + AVCodecContext *copy; + int err; + + atomic_init(&p->state, STATE_INPUT_READY); + +- copy = av_memdup(src, sizeof(*src)); ++ copy = av_memdup(avctx, sizeof(*avctx)); + if (!copy) + return AVERROR(ENOMEM); + copy->priv_data = NULL; +@@ -831,7 +736,7 @@ + p->parent = fctx; + p->avctx = copy; + +- copy->internal = av_memdup(src->internal, sizeof(*src->internal)); ++ copy->internal = av_mallocz(sizeof(*copy->internal)); + if (!copy->internal) + return AVERROR(ENOMEM); + copy->internal->thread_ctx = p; +@@ -843,26 +748,29 @@ + if (!copy->priv_data) + return AVERROR(ENOMEM); + +- if (codec->priv_class) { +- *(const AVClass **)copy->priv_data = codec->priv_class; +- err = av_opt_copy(copy->priv_data, src->priv_data); ++ if (codec->p.priv_class) { ++ *(const AVClass **)copy->priv_data = codec->p.priv_class; ++ err = av_opt_copy(copy->priv_data, avctx->priv_data); + if (err < 0) + return err; + } + } + +- err = init_pthread(p, per_thread_offsets); ++ err = ff_pthread_init(p, per_thread_offsets); + if (err < 0) + return err; + + if (!(p->frame = av_frame_alloc()) || + !(p->avpkt = av_packet_alloc())) + return AVERROR(ENOMEM); +- copy->internal->last_pkt_props = p->avpkt; + + if (!first) + copy->internal->is_copy = 1; + ++ copy->internal->last_pkt_props = av_packet_alloc(); ++ if (!copy->internal->last_pkt_props) ++ return AVERROR(ENOMEM); ++ + if (codec->init) { + err = codec->init(copy); + if (err < 0) { +@@ -889,8 +797,7 @@ + int ff_frame_thread_init(AVCodecContext *avctx) + { + int thread_count = avctx->thread_count; +- const AVCodec *codec = avctx->codec; +- AVCodecContext *src = avctx; ++ const FFCodec *codec = ffcodec(avctx->codec); + FrameThreadContext *fctx; + int err, i = 0; + +@@ -912,9 +819,9 @@ + if (!fctx) + return AVERROR(ENOMEM); + +- err = init_pthread(fctx, thread_ctx_offsets); ++ err = ff_pthread_init(fctx, thread_ctx_offsets); + if (err < 0) { +- free_pthread(fctx, thread_ctx_offsets); ++ ff_pthread_free(fctx, thread_ctx_offsets); + av_freep(&avctx->internal->thread_ctx); + return err; + } +@@ -922,10 +829,10 @@ + fctx->async_lock = 1; + fctx->delaying = 1; + +- if (codec->type == AVMEDIA_TYPE_VIDEO) +- avctx->delay = src->thread_count - 1; ++ if (codec->p.type == AVMEDIA_TYPE_VIDEO) ++ avctx->delay = avctx->thread_count - 1; + +- fctx->threads = av_mallocz_array(thread_count, sizeof(PerThreadContext)); ++ fctx->threads = av_calloc(thread_count, sizeof(*fctx->threads)); + if (!fctx->threads) { + err = AVERROR(ENOMEM); + goto error; +@@ -935,7 +842,7 @@ + PerThreadContext *p = &fctx->threads[i]; + int first = !i; + +- err = init_thread(p, &i, fctx, avctx, src, codec, first); ++ err = init_thread(p, &i, fctx, avctx, codec, first); + if (err < 0) + goto error; + } +@@ -970,130 +877,49 @@ + av_frame_unref(p->frame); + p->result = 0; + +-#if FF_API_THREAD_SAFE_CALLBACKS +- release_delayed_buffers(p); +-#endif +- +- if (avctx->codec->flush) +- avctx->codec->flush(p->avctx); ++ if (ffcodec(avctx->codec)->flush) ++ ffcodec(avctx->codec)->flush(p->avctx); + } + } + + int ff_thread_can_start_frame(AVCodecContext *avctx) + { + PerThreadContext *p = avctx->internal->thread_ctx; +-FF_DISABLE_DEPRECATION_WARNINGS ++ + if ((avctx->active_thread_type&FF_THREAD_FRAME) && atomic_load(&p->state) != STATE_SETTING_UP && +- (avctx->codec->update_thread_context +-#if FF_API_THREAD_SAFE_CALLBACKS +- || !THREAD_SAFE_CALLBACKS(avctx) +-#endif +- )) { ++ ffcodec(avctx->codec)->update_thread_context) { + return 0; + } +-FF_ENABLE_DEPRECATION_WARNINGS ++ + return 1; + } + +-static int thread_get_buffer_internal(AVCodecContext *avctx, ThreadFrame *f, int flags) ++static int thread_get_buffer_internal(AVCodecContext *avctx, AVFrame *f, int flags) + { +- PerThreadContext *p = avctx->internal->thread_ctx; ++ PerThreadContext *p; + int err; + +- f->owner[0] = f->owner[1] = avctx; +- + if (!(avctx->active_thread_type & FF_THREAD_FRAME)) +- return ff_get_buffer(avctx, f->f, flags); ++ return ff_get_buffer(avctx, f, flags); + ++ p = avctx->internal->thread_ctx; + FF_DISABLE_DEPRECATION_WARNINGS + if (atomic_load(&p->state) != STATE_SETTING_UP && +- (avctx->codec->update_thread_context +-#if FF_API_THREAD_SAFE_CALLBACKS +- || !THREAD_SAFE_CALLBACKS(avctx) +-#endif +- )) { ++ ffcodec(avctx->codec)->update_thread_context) { + FF_ENABLE_DEPRECATION_WARNINGS + av_log(avctx, AV_LOG_ERROR, "get_buffer() cannot be called after ff_thread_finish_setup()\n"); + return -1; + } + +- if (avctx->codec->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) { +- atomic_int *progress; +- f->progress = av_buffer_alloc(2 * sizeof(*progress)); +- if (!f->progress) { +- return AVERROR(ENOMEM); +- } +- progress = (atomic_int*)f->progress->data; +- +- atomic_init(&progress[0], -1); +- atomic_init(&progress[1], -1); +- } +- + pthread_mutex_lock(&p->parent->buffer_mutex); +-#if !FF_API_THREAD_SAFE_CALLBACKS +- err = ff_get_buffer(avctx, f->f, flags); +-#else +-FF_DISABLE_DEPRECATION_WARNINGS +- if (THREAD_SAFE_CALLBACKS(avctx)) { +- err = ff_get_buffer(avctx, f->f, flags); +- } else { +- pthread_mutex_lock(&p->progress_mutex); +- p->requested_frame = f->f; +- p->requested_flags = flags; +- atomic_store_explicit(&p->state, STATE_GET_BUFFER, memory_order_release); +- pthread_cond_broadcast(&p->progress_cond); +- +- while (atomic_load(&p->state) != STATE_SETTING_UP) +- pthread_cond_wait(&p->progress_cond, &p->progress_mutex); +- +- err = p->result; +- +- pthread_mutex_unlock(&p->progress_mutex); +- +- } +- if (!THREAD_SAFE_CALLBACKS(avctx) && !avctx->codec->update_thread_context) +- ff_thread_finish_setup(avctx); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- if (err) +- av_buffer_unref(&f->progress); ++ err = ff_get_buffer(avctx, f, flags); + + pthread_mutex_unlock(&p->parent->buffer_mutex); + + return err; + } + +-#if FF_API_THREAD_SAFE_CALLBACKS +-FF_DISABLE_DEPRECATION_WARNINGS +-enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) +-{ +- enum AVPixelFormat res; +- PerThreadContext *p = avctx->internal->thread_ctx; +- if (!(avctx->active_thread_type & FF_THREAD_FRAME) || avctx->thread_safe_callbacks || +- avctx->get_format == avcodec_default_get_format) +- return ff_get_format(avctx, fmt); +- if (atomic_load(&p->state) != STATE_SETTING_UP) { +- av_log(avctx, AV_LOG_ERROR, "get_format() cannot be called after ff_thread_finish_setup()\n"); +- return -1; +- } +- pthread_mutex_lock(&p->progress_mutex); +- p->available_formats = fmt; +- atomic_store(&p->state, STATE_GET_FORMAT); +- pthread_cond_broadcast(&p->progress_cond); +- +- while (atomic_load(&p->state) != STATE_SETTING_UP) +- pthread_cond_wait(&p->progress_cond, &p->progress_mutex); +- +- res = p->result_format; +- +- pthread_mutex_unlock(&p->progress_mutex); +- +- return res; +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- +-int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) ++int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags) + { + int ret = thread_get_buffer_internal(avctx, f, flags); + if (ret < 0) +@@ -1101,71 +927,51 @@ + return ret; + } + +-void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f) ++int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) + { +-#if FF_API_THREAD_SAFE_CALLBACKS +-FF_DISABLE_DEPRECATION_WARNINGS +- PerThreadContext *p = avctx->internal->thread_ctx; +- FrameThreadContext *fctx; +- AVFrame *dst; +- int ret = 0; +- int can_direct_free = !(avctx->active_thread_type & FF_THREAD_FRAME) || +- THREAD_SAFE_CALLBACKS(avctx); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- +- if (!f->f) +- return; +- +- if (avctx->debug & FF_DEBUG_BUFFERS) +- av_log(avctx, AV_LOG_DEBUG, "thread_release_buffer called on pic %p\n", f); +- +- av_buffer_unref(&f->progress); +- f->owner[0] = f->owner[1] = NULL; +- +-#if !FF_API_THREAD_SAFE_CALLBACKS +- av_frame_unref(f->f); +-#else +- // when the frame buffers are not allocated, just reset it to clean state +- if (can_direct_free || !f->f->buf[0]) { +- av_frame_unref(f->f); +- return; +- } ++ int ret; + +- fctx = p->parent; +- pthread_mutex_lock(&fctx->buffer_mutex); ++ f->owner[0] = f->owner[1] = avctx; ++ /* Hint: It is possible for this function to be called with codecs ++ * that don't support frame threading at all, namely in case ++ * a frame-threaded decoder shares code with codecs that are not. ++ * This currently affects non-MPEG-4 mpegvideo codecs and and VP7. ++ * The following check will always be true for them. */ ++ if (!(avctx->active_thread_type & FF_THREAD_FRAME)) ++ return ff_get_buffer(avctx, f->f, flags); + +- if (p->num_released_buffers == p->released_buffers_allocated) { +- AVFrame **tmp = av_realloc_array(p->released_buffers, p->released_buffers_allocated + 1, +- sizeof(*p->released_buffers)); +- if (tmp) { +- tmp[p->released_buffers_allocated] = av_frame_alloc(); +- p->released_buffers = tmp; ++ if (ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) { ++ atomic_int *progress; ++ f->progress = av_buffer_alloc(2 * sizeof(*progress)); ++ if (!f->progress) { ++ return AVERROR(ENOMEM); + } ++ progress = (atomic_int*)f->progress->data; + +- if (!tmp || !tmp[p->released_buffers_allocated]) { +- ret = AVERROR(ENOMEM); +- goto fail; +- } +- p->released_buffers_allocated++; ++ atomic_init(&progress[0], -1); ++ atomic_init(&progress[1], -1); + } + +- dst = p->released_buffers[p->num_released_buffers]; +- av_frame_move_ref(dst, f->f); ++ ret = ff_thread_get_buffer(avctx, f->f, flags); ++ if (ret) ++ av_buffer_unref(&f->progress); ++ return ret; ++} + +- p->num_released_buffers++; ++void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f) ++{ ++ if (!f) ++ return; + +-fail: +- pthread_mutex_unlock(&fctx->buffer_mutex); ++ if (avctx->debug & FF_DEBUG_BUFFERS) ++ av_log(avctx, AV_LOG_DEBUG, "thread_release_buffer called on pic %p\n", f); + +- // make sure the frame is clean even if we fail to free it +- // this leaks, but it is better than crashing +- if (ret < 0) { +- av_log(avctx, AV_LOG_ERROR, "Could not queue a frame for freeing, this will leak\n"); +- memset(f->f->buf, 0, sizeof(f->f->buf)); +- if (f->f->extended_buf) +- memset(f->f->extended_buf, 0, f->f->nb_extended_buf * sizeof(*f->f->extended_buf)); +- av_frame_unref(f->f); +- } +-#endif ++ av_frame_unref(f); ++} ++ ++void ff_thread_release_ext_buffer(AVCodecContext *avctx, ThreadFrame *f) ++{ ++ av_buffer_unref(&f->progress); ++ f->owner[0] = f->owner[1] = NULL; ++ ff_thread_release_buffer(avctx, f->f); + } +diff -Naur a/media/ffvpx/libavcodec/pthread_internal.h b/media/ffvpx/libavcodec/pthread_internal.h +--- a/media/ffvpx/libavcodec/pthread_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/pthread_internal.h 2023-04-06 12:49:40.255394971 +0200 +@@ -31,4 +31,36 @@ + int ff_frame_thread_init(AVCodecContext *avctx); + void ff_frame_thread_free(AVCodecContext *avctx, int thread_count); + ++#define THREAD_SENTINEL 0 // This forbids putting a mutex/condition variable at the front. ++/** ++ * Initialize/destroy a list of mutexes/conditions contained in a structure. ++ * The positions of these mutexes/conditions in the structure are given by ++ * their offsets. Because it is undefined behaviour to destroy ++ * an uninitialized mutex/condition, ff_pthread_init() stores the number ++ * of successfully initialized mutexes and conditions in the object itself ++ * and ff_pthread_free() uses this number to destroy exactly the mutexes and ++ * condition variables that have been successfully initialized. ++ * ++ * @param obj The object containing the mutexes/conditions. ++ * @param[in] offsets An array of offsets. Its first member gives the offset ++ * of the variable that contains the count of successfully ++ * initialized mutexes/condition variables; said variable ++ * must be an unsigned int. Two arrays of offsets, each ++ * delimited by a THREAD_SENTINEL follow. The first ++ * contains the offsets of all the mutexes, the second ++ * contains the offsets of all the condition variables. ++ */ ++int ff_pthread_init(void *obj, const unsigned offsets[]); ++void ff_pthread_free(void *obj, const unsigned offsets[]); ++ ++/** ++ * Macros to help creating the above lists. mutexes and conds need ++ * to be parentheses-enclosed lists of offsets in the containing structure. ++ */ ++#define OFFSET_ARRAY(...) __VA_ARGS__, THREAD_SENTINEL ++#define DEFINE_OFFSET_ARRAY(type, name, cnt_variable, mutexes, conds) \ ++static const unsigned name ## _offsets[] = { offsetof(type, cnt_variable), \ ++ OFFSET_ARRAY mutexes, \ ++ OFFSET_ARRAY conds } ++ + #endif // AVCODEC_PTHREAD_INTERNAL_H +diff -Naur a/media/ffvpx/libavcodec/pthread_slice.c b/media/ffvpx/libavcodec/pthread_slice.c +--- a/media/ffvpx/libavcodec/pthread_slice.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/pthread_slice.c 2023-04-06 12:50:06.973471134 +0200 +@@ -25,6 +25,7 @@ + #include "config.h" + + #include "avcodec.h" ++#include "codec_internal.h" + #include "internal.h" + #include "pthread_internal.h" + #include "thread.h" +@@ -40,6 +41,11 @@ + typedef int (action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr); + typedef int (main_func)(AVCodecContext *c); + ++typedef struct Progress { ++ pthread_cond_t cond; ++ pthread_mutex_t mutex; ++} Progress; ++ + typedef struct SliceThreadContext { + AVSliceThread *thread; + action_func *func; +@@ -52,8 +58,7 @@ + int *entries; + int entries_count; + int thread_count; +- pthread_cond_t *progress_cond; +- pthread_mutex_t *progress_mutex; ++ Progress *progress; + } SliceThreadContext; + + static void main_function(void *priv) { +@@ -82,13 +87,13 @@ + avpriv_slicethread_free(&c->thread); + + for (i = 0; i < c->thread_count; i++) { +- pthread_mutex_destroy(&c->progress_mutex[i]); +- pthread_cond_destroy(&c->progress_cond[i]); ++ Progress *const progress = &c->progress[i]; ++ pthread_mutex_destroy(&progress->mutex); ++ pthread_cond_destroy(&progress->cond); + } + + av_freep(&c->entries); +- av_freep(&c->progress_mutex); +- av_freep(&c->progress_cond); ++ av_freep(&c->progress); + av_freep(&avctx->internal->thread_ctx); + } + +@@ -155,7 +160,7 @@ + } + + avctx->internal->thread_ctx = c = av_mallocz(sizeof(*c)); +- mainfunc = avctx->codec->caps_internal & FF_CODEC_CAP_SLICE_THREAD_HAS_MF ? &main_function : NULL; ++ mainfunc = ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SLICE_THREAD_HAS_MF ? &main_function : NULL; + if (!c || (thread_count = avpriv_slicethread_create(&c->thread, avctx, worker_func, mainfunc, thread_count)) <= 1) { + if (c) + avpriv_slicethread_free(&c->thread); +@@ -171,72 +176,85 @@ + return 0; + } + ++int av_cold ff_slice_thread_init_progress(AVCodecContext *avctx) ++{ ++ SliceThreadContext *const p = avctx->internal->thread_ctx; ++ int err, i = 0, thread_count = avctx->thread_count; ++ ++ p->progress = av_calloc(thread_count, sizeof(*p->progress)); ++ if (!p->progress) { ++ err = AVERROR(ENOMEM); ++ goto fail; ++ } ++ ++ for (; i < thread_count; i++) { ++ Progress *const progress = &p->progress[i]; ++ err = pthread_mutex_init(&progress->mutex, NULL); ++ if (err) { ++ err = AVERROR(err); ++ goto fail; ++ } ++ err = pthread_cond_init (&progress->cond, NULL); ++ if (err) { ++ err = AVERROR(err); ++ pthread_mutex_destroy(&progress->mutex); ++ goto fail; ++ } ++ } ++ err = 0; ++fail: ++ p->thread_count = i; ++ return err; ++} ++ + void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n) + { + SliceThreadContext *p = avctx->internal->thread_ctx; ++ Progress *const progress = &p->progress[thread]; + int *entries = p->entries; + +- pthread_mutex_lock(&p->progress_mutex[thread]); ++ pthread_mutex_lock(&progress->mutex); + entries[field] +=n; +- pthread_cond_signal(&p->progress_cond[thread]); +- pthread_mutex_unlock(&p->progress_mutex[thread]); ++ pthread_cond_signal(&progress->cond); ++ pthread_mutex_unlock(&progress->mutex); + } + + void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift) + { + SliceThreadContext *p = avctx->internal->thread_ctx; ++ Progress *progress; + int *entries = p->entries; + + if (!entries || !field) return; + + thread = thread ? thread - 1 : p->thread_count - 1; ++ progress = &p->progress[thread]; + +- pthread_mutex_lock(&p->progress_mutex[thread]); ++ pthread_mutex_lock(&progress->mutex); + while ((entries[field - 1] - entries[field]) < shift){ +- pthread_cond_wait(&p->progress_cond[thread], &p->progress_mutex[thread]); ++ pthread_cond_wait(&progress->cond, &progress->mutex); + } +- pthread_mutex_unlock(&p->progress_mutex[thread]); ++ pthread_mutex_unlock(&progress->mutex); + } + +-int ff_alloc_entries(AVCodecContext *avctx, int count) ++int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) + { +- int i; +- + if (avctx->active_thread_type & FF_THREAD_SLICE) { + SliceThreadContext *p = avctx->internal->thread_ctx; + +- if (p->entries) { +- av_assert0(p->thread_count == avctx->thread_count); +- av_freep(&p->entries); ++ if (p->entries_count == count) { ++ memset(p->entries, 0, p->entries_count * sizeof(*p->entries)); ++ return 0; + } ++ av_freep(&p->entries); + +- p->thread_count = avctx->thread_count; +- p->entries = av_mallocz_array(count, sizeof(int)); +- +- if (!p->progress_mutex) { +- p->progress_mutex = av_malloc_array(p->thread_count, sizeof(pthread_mutex_t)); +- p->progress_cond = av_malloc_array(p->thread_count, sizeof(pthread_cond_t)); +- } +- +- if (!p->entries || !p->progress_mutex || !p->progress_cond) { +- av_freep(&p->entries); +- av_freep(&p->progress_mutex); +- av_freep(&p->progress_cond); ++ p->entries = av_calloc(count, sizeof(*p->entries)); ++ if (!p->entries) { ++ p->entries_count = 0; + return AVERROR(ENOMEM); + } + p->entries_count = count; +- +- for (i = 0; i < p->thread_count; i++) { +- pthread_mutex_init(&p->progress_mutex[i], NULL); +- pthread_cond_init(&p->progress_cond[i], NULL); +- } + } + + return 0; + } +- +-void ff_reset_entries(AVCodecContext *avctx) +-{ +- SliceThreadContext *p = avctx->internal->thread_ctx; +- memset(p->entries, 0, p->entries_count * sizeof(int)); +-} +diff -Naur a/media/ffvpx/libavcodec/put_bits.h b/media/ffvpx/libavcodec/put_bits.h +--- a/media/ffvpx/libavcodec/put_bits.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/put_bits.h 2023-04-06 12:50:24.492176543 +0200 +@@ -32,12 +32,18 @@ + #include "config.h" + #include "libavutil/intreadwrite.h" + #include "libavutil/avassert.h" ++#include "libavutil/common.h" + +-#include "version.h" +- ++#if ARCH_X86_64 ++// TODO: Benchmark and optionally enable on other 64-bit architectures. ++typedef uint64_t BitBuf; ++#define AV_WBBUF AV_WB64 ++#define AV_WLBUF AV_WL64 ++#else + typedef uint32_t BitBuf; + #define AV_WBBUF AV_WB32 + #define AV_WLBUF AV_WL32 ++#endif + + static const int BUF_BITS = 8 * sizeof(BitBuf); + +@@ -45,7 +51,6 @@ + BitBuf bit_buf; + int bit_left; + uint8_t *buf, *buf_ptr, *buf_end; +- int size_in_bits; + } PutBitContext; + + /** +@@ -62,7 +67,6 @@ + buffer = NULL; + } + +- s->size_in_bits = 8 * buffer_size; + s->buf = buffer; + s->buf_end = s->buf + buffer_size; + s->buf_ptr = s->buf; +@@ -79,6 +83,26 @@ + } + + /** ++ * @return the number of bytes output so far; may only be called ++ * when the PutBitContext is freshly initialized or flushed. ++ */ ++static inline int put_bytes_output(const PutBitContext *s) ++{ ++ av_assert2(s->bit_left == BUF_BITS); ++ return s->buf_ptr - s->buf; ++} ++ ++/** ++ * @param round_up When set, the number of bits written so far will be ++ * rounded up to the next byte. ++ * @return the number of bytes output so far. ++ */ ++static inline int put_bytes_count(const PutBitContext *s, int round_up) ++{ ++ return s->buf_ptr - s->buf + ((BUF_BITS - s->bit_left + (round_up ? 7 : 0)) >> 3); ++} ++ ++/** + * Rebase the bit writer onto a reallocated buffer. + * + * @param buffer the buffer where to put bits +@@ -93,7 +117,6 @@ + s->buf_end = buffer + buffer_size; + s->buf_ptr = buffer + (s->buf_ptr - s->buf); + s->buf = buffer; +- s->size_in_bits = 8 * buffer_size; + } + + /** +@@ -105,6 +128,16 @@ + } + + /** ++ * @param round_up When set, the number of bits written will be ++ * rounded up to the next byte. ++ * @return the number of bytes left. ++ */ ++static inline int put_bytes_left(const PutBitContext *s, int round_up) ++{ ++ return s->buf_end - s->buf_ptr - ((BUF_BITS - s->bit_left + (round_up ? 7 : 0)) >> 3); ++} ++ ++/** + * Pad the end of the output stream with zeros. + */ + static inline void flush_put_bits(PutBitContext *s) +@@ -140,11 +173,6 @@ + s->bit_buf = 0; + } + +-#if FF_API_AVPRIV_PUT_BITS +-void avpriv_align_put_bits(PutBitContext *s); +-void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length); +-#endif +- + #ifdef BITSTREAM_WRITER_LE + #define ff_put_string ff_put_string_unsupported_here + #define ff_copy_bits ff_copy_bits_unsupported_here +@@ -335,6 +363,13 @@ + } + } + ++static inline void put_sbits63(PutBitContext *pb, int n, int64_t value) ++{ ++ av_assert2(n >= 0 && n < 64); ++ ++ put_bits64(pb, n, (uint64_t)(value) & (~(UINT64_MAX << n))); ++} ++ + /** + * Return the pointer to the byte where the bitstream writer will put + * the next bit. +@@ -377,7 +412,6 @@ + { + av_assert0(size <= INT_MAX/8 - BUF_BITS); + s->buf_end = s->buf + size; +- s->size_in_bits = 8*size; + } + + /** +diff -Naur a/media/ffvpx/libavcodec/ratecontrol.h b/media/ffvpx/libavcodec/ratecontrol.h +--- a/media/ffvpx/libavcodec/ratecontrol.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/ratecontrol.h 2023-04-06 12:50:24.492176543 +0200 +@@ -80,9 +80,6 @@ + int frame_count[5]; + int last_non_b_pict_type; + +- void *non_lavc_opaque; ///< context for non lavc rc code (for example xvid) +- float dry_run_qscale; ///< for xvid rc +- int last_picture_number; ///< for xvid rc + AVExpr * rc_eq_eval; + }RateControlContext; + +diff -Naur a/media/ffvpx/libavcodec/raw.c b/media/ffvpx/libavcodec/raw.c +--- a/media/ffvpx/libavcodec/raw.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/raw.c 2023-04-06 12:50:06.973471134 +0200 +@@ -24,11 +24,11 @@ + * Raw Video Codec + */ + ++#include "libavutil/macros.h" + #include "avcodec.h" + #include "raw.h" +-#include "libavutil/common.h" + +-const PixelFormatTag ff_raw_pix_fmt_tags[] = { ++static const PixelFormatTag raw_pix_fmt_tags[] = { + { AV_PIX_FMT_YUV420P, MKTAG('I', '4', '2', '0') }, /* Planar formats */ + { AV_PIX_FMT_YUV420P, MKTAG('I', 'Y', 'U', 'V') }, + { AV_PIX_FMT_YUV420P, MKTAG('y', 'v', '1', '2') }, +@@ -72,6 +72,7 @@ + { AV_PIX_FMT_GRAY8, MKTAG('G', 'R', 'E', 'Y') }, + { AV_PIX_FMT_NV12, MKTAG('N', 'V', '1', '2') }, + { AV_PIX_FMT_NV21, MKTAG('N', 'V', '2', '1') }, ++ { AV_PIX_FMT_VUYA, MKTAG('A', 'Y', 'U', 'V') }, /* MS 4:4:4:4 */ + + /* nut */ + { AV_PIX_FMT_RGB555LE, MKTAG('R', 'G', 'B', 15) }, +@@ -299,12 +300,12 @@ + + const struct PixelFormatTag *avpriv_get_raw_pix_fmt_tags(void) + { +- return ff_raw_pix_fmt_tags; ++ return raw_pix_fmt_tags; + } + + unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat fmt) + { +- const PixelFormatTag *tags = ff_raw_pix_fmt_tags; ++ const PixelFormatTag *tags = raw_pix_fmt_tags; + while (tags->pix_fmt >= 0) { + if (tags->pix_fmt == fmt) + return tags->fourcc; +@@ -313,7 +314,7 @@ + return 0; + } + +-const PixelFormatTag avpriv_pix_fmt_bps_avi[] = { ++static const PixelFormatTag pix_fmt_bps_avi[] = { + { AV_PIX_FMT_PAL8, 1 }, + { AV_PIX_FMT_PAL8, 2 }, + { AV_PIX_FMT_PAL8, 4 }, +@@ -326,7 +327,7 @@ + { AV_PIX_FMT_NONE, 0 }, + }; + +-const PixelFormatTag avpriv_pix_fmt_bps_mov[] = { ++static const PixelFormatTag pix_fmt_bps_mov[] = { + { AV_PIX_FMT_PAL8, 1 }, + { AV_PIX_FMT_PAL8, 2 }, + { AV_PIX_FMT_PAL8, 4 }, +@@ -337,3 +338,33 @@ + { AV_PIX_FMT_PAL8, 33 }, + { AV_PIX_FMT_NONE, 0 }, + }; ++ ++static enum AVPixelFormat find_pix_fmt(const PixelFormatTag *tags, ++ unsigned int fourcc) ++{ ++ while (tags->pix_fmt != AV_PIX_FMT_NONE) { ++ if (tags->fourcc == fourcc) ++ return tags->pix_fmt; ++ tags++; ++ } ++ return AV_PIX_FMT_NONE; ++} ++ ++enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, ++ unsigned fourcc) ++{ ++ const PixelFormatTag *tags; ++ ++ switch (list) { ++ case PIX_FMT_LIST_RAW: ++ tags = raw_pix_fmt_tags; ++ break; ++ case PIX_FMT_LIST_AVI: ++ tags = pix_fmt_bps_avi; ++ break; ++ case PIX_FMT_LIST_MOV: ++ tags = pix_fmt_bps_mov; ++ break; ++ } ++ return find_pix_fmt(tags, fourcc); ++} +diff -Naur a/media/ffvpx/libavcodec/raw.h b/media/ffvpx/libavcodec/raw.h +--- a/media/ffvpx/libavcodec/raw.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/raw.h 2023-04-06 12:49:40.255394971 +0200 +@@ -27,22 +27,22 @@ + #ifndef AVCODEC_RAW_H + #define AVCODEC_RAW_H + +-#include "avcodec.h" +-#include "internal.h" +-#include "libavutil/internal.h" ++#include "libavutil/pixfmt.h" + + typedef struct PixelFormatTag { + enum AVPixelFormat pix_fmt; + unsigned int fourcc; + } PixelFormatTag; + +-extern const PixelFormatTag ff_raw_pix_fmt_tags[]; // exposed through avpriv_get_raw_pix_fmt_tags() +- + const struct PixelFormatTag *avpriv_get_raw_pix_fmt_tags(void); + +-enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc); ++enum PixelFormatTagLists { ++ PIX_FMT_LIST_RAW, ++ PIX_FMT_LIST_AVI, ++ PIX_FMT_LIST_MOV, ++}; + +-extern av_export_avcodec const PixelFormatTag avpriv_pix_fmt_bps_avi[]; +-extern av_export_avcodec const PixelFormatTag avpriv_pix_fmt_bps_mov[]; ++enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, ++ unsigned fourcc); + + #endif /* AVCODEC_RAW_H */ +diff -Naur a/media/ffvpx/libavcodec/rdft.c b/media/ffvpx/libavcodec/rdft.c +--- a/media/ffvpx/libavcodec/rdft.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/rdft.c 2023-04-06 12:49:40.255394971 +0200 +@@ -20,6 +20,7 @@ + */ + #include + #include ++#include "libavutil/error.h" + #include "libavutil/mathematics.h" + #include "rdft.h" + +@@ -106,7 +107,9 @@ + s->tsin = ff_cos_tabs[nbits] + (n >> 2); + s->rdft_calc = rdft_calc_c; + +- if (ARCH_ARM) ff_rdft_init_arm(s); ++#if ARCH_ARM ++ ff_rdft_init_arm(s); ++#endif + + return 0; + } +diff -Naur a/media/ffvpx/libavcodec/rl.h b/media/ffvpx/libavcodec/rl.h +--- a/media/ffvpx/libavcodec/rl.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/rl.h 2023-04-06 12:50:06.973471134 +0200 +@@ -49,23 +49,45 @@ + } RLTable; + + /** ++ * Initialize max_level and index_run from table_run and table_level; ++ * this is equivalent to initializing RLTable.max_level[0] and ++ * RLTable.index_run[0] with ff_rl_init(). ++ */ ++void ff_rl_init_level_run(uint8_t max_level[MAX_LEVEL + 1], ++ uint8_t index_run[MAX_RUN + 1], ++ const uint8_t table_run[/* n */], ++ const uint8_t table_level[/* n*/], int n); ++ ++/** ++ * Initialize index_run, max_level and max_run from n, last, table_vlc, ++ * table_run and table_level. + * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] + * to hold the level and run tables. ++ * @note This function does not touch rl_vlc at all, hence there is no need ++ * to synchronize calls to ff_rl_init() and ff_rl_init_vlc() using the ++ * same RLTable. + */ + void ff_rl_init(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]); ++ ++/** ++ * Initialize rl_vlc from n, last, table_vlc, table_run and table_level. ++ * All rl_vlc pointers to be initialized must already point to a static ++ * buffer of `static_size` RL_VLC_ELEM elements; if a pointer is NULL, ++ * initializing further VLCs stops. ++ * @note This function does not touch what ff_rl_init() initializes at all, ++ * hence there is no need to synchronize calls to ff_rl_init() and ++ * ff_rl_init_vlc() using the same RLTable. ++ */ + void ff_rl_init_vlc(RLTable *rl, unsigned static_size); + + #define INIT_VLC_RL(rl, static_size)\ + {\ +- int q;\ + static RL_VLC_ELEM rl_vlc_table[32][static_size];\ + \ +- if(!rl.rl_vlc[0]){\ +- for(q=0; q<32; q++)\ +- rl.rl_vlc[q]= rl_vlc_table[q];\ ++ for (int q = 0; q < 32; q++) \ ++ rl.rl_vlc[q] = rl_vlc_table[q]; \ + \ +- ff_rl_init_vlc(&rl, static_size);\ +- }\ ++ ff_rl_init_vlc(&rl, static_size); \ + } + + #define INIT_FIRST_VLC_RL(rl, static_size) \ +diff -Naur a/media/ffvpx/libavcodec/simple_idct.c b/media/ffvpx/libavcodec/simple_idct.c +--- a/media/ffvpx/libavcodec/simple_idct.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/simple_idct.c 2023-04-06 12:49:40.255394971 +0200 +@@ -26,7 +26,6 @@ + */ + + #include "libavutil/intreadwrite.h" +-#include "avcodec.h" + #include "mathops.h" + #include "simple_idct.h" + +diff -Naur a/media/ffvpx/libavcodec/startcode.h b/media/ffvpx/libavcodec/startcode.h +--- a/media/ffvpx/libavcodec/startcode.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/startcode.h 2023-04-06 12:49:40.255394971 +0200 +@@ -0,0 +1,36 @@ ++/* ++ * 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 ++ */ ++ ++/** ++ * @file ++ * Accelerated start code search function for start codes common to ++ * MPEG-1/2/4 video, VC-1, H.264/5 ++ */ ++ ++#ifndef AVCODEC_STARTCODE_H ++#define AVCODEC_STARTCODE_H ++ ++#include ++ ++const uint8_t *avpriv_find_start_code(const uint8_t *p, ++ const uint8_t *end, ++ uint32_t *state); ++ ++int ff_startcode_find_candidate_c(const uint8_t *buf, int size); ++ ++#endif /* AVCODEC_STARTCODE_H */ +diff -Naur a/media/ffvpx/libavcodec/threadframe.h b/media/ffvpx/libavcodec/threadframe.h +--- a/media/ffvpx/libavcodec/threadframe.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/threadframe.h 2023-04-06 12:50:06.973471134 +0200 +@@ -0,0 +1,89 @@ ++/* ++ * Copyright (c) 2022 Andreas Rheinhardt ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_THREADFRAME_H ++#define AVCODEC_THREADFRAME_H ++ ++#include "libavutil/frame.h" ++#include "avcodec.h" ++ ++typedef struct ThreadFrame { ++ AVFrame *f; ++ AVCodecContext *owner[2]; ++ // progress->data is an array of 2 ints holding progress for top/bottom ++ // fields ++ AVBufferRef *progress; ++} ThreadFrame; ++ ++/** ++ * Notify later decoding threads when part of their reference picture is ready. ++ * Call this when some part of the picture is finished decoding. ++ * Later calls with lower values of progress have no effect. ++ * ++ * @param f The picture being decoded. ++ * @param progress Value, in arbitrary units, of how much of the picture has decoded. ++ * @param field The field being decoded, for field-picture codecs. ++ * 0 for top field or frame pictures, 1 for bottom field. ++ */ ++void ff_thread_report_progress(ThreadFrame *f, int progress, int field); ++ ++/** ++ * Wait for earlier decoding threads to finish reference pictures. ++ * Call this before accessing some part of a picture, with a given ++ * value for progress, and it will return after the responsible decoding ++ * thread calls ff_thread_report_progress() with the same or ++ * higher value for progress. ++ * ++ * @param f The picture being referenced. ++ * @param progress Value, in arbitrary units, to wait for. ++ * @param field The field being referenced, for field-picture codecs. ++ * 0 for top field or frame pictures, 1 for bottom field. ++ */ ++void ff_thread_await_progress(const ThreadFrame *f, int progress, int field); ++ ++/** ++ * Wrapper around ff_get_buffer() for frame-multithreaded codecs. ++ * Call this function instead of ff_get_buffer() if you might need ++ * to wait for progress on this frame. ++ * Cannot be called after the codec has called ff_thread_finish_setup(). ++ * ++ * @param avctx The current context. ++ * @param f The frame to write into. ++ * @note: It is fine to call this with codecs that do not support ++ * frame threading. ++ */ ++int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags); ++ ++/** ++ * Unref a ThreadFrame. ++ * ++ * This is basically a wrapper around av_frame_unref() and should ++ * be called instead of it. ++ * ++ * @param avctx The current context. ++ * @param f The picture being released. ++ */ ++void ff_thread_release_ext_buffer(AVCodecContext *avctx, ThreadFrame *f); ++ ++int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src); ++ ++int ff_thread_can_start_frame(AVCodecContext *avctx); ++ ++#endif +diff -Naur a/media/ffvpx/libavcodec/thread.h b/media/ffvpx/libavcodec/thread.h +--- a/media/ffvpx/libavcodec/thread.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/thread.h 2023-04-06 12:50:24.492176543 +0200 +@@ -31,14 +31,6 @@ + + #include "avcodec.h" + +-typedef struct ThreadFrame { +- AVFrame *f; +- AVCodecContext *owner[2]; +- // progress->data is an array of 2 ints holding progress for top/bottom +- // fields +- AVBufferRef *progress; +-} ThreadFrame; +- + /** + * Wait for decoding threads to finish and reset internal state. + * Called by avcodec_flush_buffers(). +@@ -52,10 +44,10 @@ + * Returns the next available frame in picture. *got_picture_ptr + * will be 0 if none is available. + * The return value on success is the size of the consumed packet for +- * compatibility with avcodec_decode_video2(). This means the decoder ++ * compatibility with FFCodec.decode. This means the decoder + * has to consume the full packet. + * +- * Parameters are the same as avcodec_decode_video2(). ++ * Parameters are the same as FFCodec.decode. + */ + int ff_thread_decode_frame(AVCodecContext *avctx, AVFrame *picture, + int *got_picture_ptr, AVPacket *avpkt); +@@ -70,45 +62,7 @@ + */ + void ff_thread_finish_setup(AVCodecContext *avctx); + +-/** +- * Notify later decoding threads when part of their reference picture is ready. +- * Call this when some part of the picture is finished decoding. +- * Later calls with lower values of progress have no effect. +- * +- * @param f The picture being decoded. +- * @param progress Value, in arbitrary units, of how much of the picture has decoded. +- * @param field The field being decoded, for field-picture codecs. +- * 0 for top field or frame pictures, 1 for bottom field. +- */ +-void ff_thread_report_progress(ThreadFrame *f, int progress, int field); +- +-/** +- * Wait for earlier decoding threads to finish reference pictures. +- * Call this before accessing some part of a picture, with a given +- * value for progress, and it will return after the responsible decoding +- * thread calls ff_thread_report_progress() with the same or +- * higher value for progress. +- * +- * @param f The picture being referenced. +- * @param progress Value, in arbitrary units, to wait for. +- * @param field The field being referenced, for field-picture codecs. +- * 0 for top field or frame pictures, 1 for bottom field. +- */ +-void ff_thread_await_progress(ThreadFrame *f, int progress, int field); +- +-#if FF_API_THREAD_SAFE_CALLBACKS +-/** +- * Wrapper around get_format() for frame-multithreaded codecs. +- * Call this function instead of avctx->get_format(). +- * Cannot be called after the codec has called ff_thread_finish_setup(). +- * +- * @param avctx The current context. +- * @param fmt The list of available formats. +- */ +-enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); +-#else + #define ff_thread_get_format ff_get_format +-#endif + + /** + * Wrapper around get_buffer() for frame-multithreaded codecs. +@@ -118,7 +72,7 @@ + * @param avctx The current context. + * @param f The frame to write into. + */ +-int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags); ++int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags); + + /** + * Wrapper around release_buffer() frame-for multithreaded codecs. +@@ -131,17 +85,15 @@ + * @param avctx The current context. + * @param f The picture being released. + */ +-void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f); +- +-int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src); ++void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f); + + int ff_thread_init(AVCodecContext *s); + int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, + int (*action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr), + int (*main_func)(AVCodecContext *c), void *arg, int *ret, int job_count); + void ff_thread_free(AVCodecContext *s); +-int ff_alloc_entries(AVCodecContext *avctx, int count); +-void ff_reset_entries(AVCodecContext *avctx); ++int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count); ++int ff_slice_thread_init_progress(AVCodecContext *avctx); + void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n); + void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift); + +diff -Naur a/media/ffvpx/libavcodec/utils.c b/media/ffvpx/libavcodec/utils.c +--- a/media/ffvpx/libavcodec/utils.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/utils.c 2023-04-06 12:50:24.492176543 +0200 +@@ -27,25 +27,24 @@ + + #include "config.h" + #include "libavutil/avassert.h" +-#include "libavutil/avstring.h" ++#include "libavutil/channel_layout.h" + #include "libavutil/intreadwrite.h" +-#include "libavutil/mem_internal.h" ++#include "libavutil/mem.h" + #include "libavutil/pixdesc.h" + #include "libavutil/imgutils.h" + #include "libavutil/pixfmt.h" + #include "avcodec.h" + #include "codec.h" ++#include "codec_internal.h" ++#include "decode.h" + #include "hwconfig.h" + #include "thread.h" ++#include "threadframe.h" + #include "internal.h" + #include "put_bits.h" +-#include "raw.h" +-#include "version.h" ++#include "startcode.h" + #include +-#include +-#include + #include +-#include + + void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size) + { +@@ -55,7 +54,8 @@ + *size = 0; + return; + } +- if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1)) ++ av_fast_mallocz(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE); ++ if (*p) + memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); + } + +@@ -67,18 +67,25 @@ + *size = 0; + return; + } +- if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1)) ++ av_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE); ++ if (*p) + memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE); + } + +-int av_codec_is_encoder(const AVCodec *codec) ++int av_codec_is_encoder(const AVCodec *avcodec) + { +- return codec && (codec->encode_sub || codec->encode2 || codec->receive_packet); ++ const FFCodec *const codec = ffcodec(avcodec); ++ return codec && (codec->cb_type == FF_CODEC_CB_TYPE_ENCODE || ++ codec->cb_type == FF_CODEC_CB_TYPE_ENCODE_SUB || ++ codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_PACKET); + } + +-int av_codec_is_decoder(const AVCodec *codec) ++int av_codec_is_decoder(const AVCodec *avcodec) + { +- return codec && (codec->decode || codec->receive_frame); ++ const FFCodec *const codec = ffcodec(avcodec); ++ return codec && (codec->cb_type == FF_CODEC_CB_TYPE_DECODE || ++ codec->cb_type == FF_CODEC_CB_TYPE_DECODE_SUB || ++ codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME); + } + + int ff_set_dimensions(AVCodecContext *s, int width, int height) +@@ -236,6 +243,8 @@ + case AV_PIX_FMT_GBRAP16BE: + w_align = 16; //FIXME assume 16 pixel per macroblock + h_align = 16 * 2; // interlaced needs 2 macroblocks height ++ if (s->codec_id == AV_CODEC_ID_BINKVIDEO) ++ w_align = 16*2; + break; + case AV_PIX_FMT_YUV411P: + case AV_PIX_FMT_YUVJ411P: +@@ -314,6 +323,7 @@ + *width = FFALIGN(*width, w_align); + *height = FFALIGN(*height, h_align); + if (s->codec_id == AV_CODEC_ID_H264 || s->lowres || ++ s->codec_id == AV_CODEC_ID_VC1 || s->codec_id == AV_CODEC_ID_WMV3 || + s->codec_id == AV_CODEC_ID_VP5 || s->codec_id == AV_CODEC_ID_VP6 || + s->codec_id == AV_CODEC_ID_VP6F || s->codec_id == AV_CODEC_ID_VP6A + ) { +@@ -327,6 +337,9 @@ + // the next rounded up width is 32 + *width = FFMAX(*width, 32); + } ++ if (s->codec_id == AV_CODEC_ID_SVQ3) { ++ *width = FFMAX(*width, 32); ++ } + + for (i = 0; i < 4; i++) + linesize_align[i] = STRIDE_ALIGN; +@@ -346,29 +359,17 @@ + align = FFMAX3(align, linesize_align[1], linesize_align[2]); + *width = FFALIGN(*width, align); + } +- ++#if FF_API_AVCODEC_CHROMA_POS + int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos) + { +- if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB) +- return AVERROR(EINVAL); +- pos--; +- +- *xpos = (pos&1) * 128; +- *ypos = ((pos>>1)^(pos<4)) * 128; +- +- return 0; ++ return av_chroma_location_enum_to_pos(xpos, ypos, pos); + } + + enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos) + { +- int pos, xout, yout; +- +- for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) { +- if (avcodec_enum_to_chroma_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos) +- return pos; +- } +- return AVCHROMA_LOC_UNSPECIFIED; ++ return av_chroma_location_pos_to_enum(xpos, ypos); + } ++#endif + + int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, + enum AVSampleFormat sample_fmt, const uint8_t *buf, +@@ -384,8 +385,7 @@ + + planar = av_sample_fmt_is_planar(sample_fmt); + if (planar && nb_channels > AV_NUM_DATA_POINTERS) { +- if (!(frame->extended_data = av_mallocz_array(nb_channels, +- sizeof(*frame->extended_data)))) ++ if (!FF_ALLOCZ_TYPED_ARRAY(frame->extended_data, nb_channels)) + return AVERROR(ENOMEM); + } else { + frame->extended_data = frame->data; +@@ -435,37 +435,8 @@ + } + } + +-enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, +- unsigned int fourcc) +-{ +- while (tags->pix_fmt >= 0) { +- if (tags->fourcc == fourcc) +- return tags->pix_fmt; +- tags++; +- } +- return AV_PIX_FMT_NONE; +-} +- +-#if FF_API_CODEC_GET_SET +-MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase) +-MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor) +-MAKE_ACCESSORS(AVCodecContext, codec, int, lowres) +-MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll) +-MAKE_ACCESSORS(AVCodecContext, codec, uint16_t*, chroma_intra_matrix) +- +-unsigned av_codec_get_codec_properties(const AVCodecContext *codec) +-{ +- return codec->properties; +-} +- +-int av_codec_get_max_lowres(const AVCodec *codec) +-{ +- return codec->max_lowres; +-} +-#endif +- + int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){ +- return !!(codec->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM); ++ return !!(ffcodec(codec)->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM); + } + + const char *avcodec_get_name(enum AVCodecID id) +@@ -488,28 +459,6 @@ + return "unknown_codec"; + } + +-#if FF_API_TAG_STRING +-size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag) +-{ +- int i, len, ret = 0; +- +-#define TAG_PRINT(x) \ +- (((x) >= '0' && (x) <= '9') || \ +- ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') || \ +- ((x) == '.' || (x) == ' ' || (x) == '-' || (x) == '_')) +- +- for (i = 0; i < 4; i++) { +- len = snprintf(buf, buf_size, +- TAG_PRINT(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF); +- buf += len; +- buf_size = buf_size > len ? buf_size - len : 0; +- ret += len; +- codec_tag >>= 8; +- } +- return ret; +-} +-#endif +- + const char *av_get_profile_name(const AVCodec *codec, int profile) + { + const AVProfile *p; +@@ -541,6 +490,8 @@ + int av_get_exact_bits_per_sample(enum AVCodecID codec_id) + { + switch (codec_id) { ++ case AV_CODEC_ID_DFPWM: ++ return 1; + case AV_CODEC_ID_8SVX_EXP: + case AV_CODEC_ID_8SVX_FIB: + case AV_CODEC_ID_ADPCM_ARGO: +@@ -569,7 +520,9 @@ + case AV_CODEC_ID_PCM_SGA: + case AV_CODEC_ID_PCM_U8: + case AV_CODEC_ID_SDX2_DPCM: ++ case AV_CODEC_ID_CBD2_DPCM: + case AV_CODEC_ID_DERF_DPCM: ++ case AV_CODEC_ID_WADY_DPCM: + return 8; + case AV_CODEC_ID_PCM_S16BE: + case AV_CODEC_ID_PCM_S16BE_PLANAR: +@@ -630,6 +583,8 @@ + int av_get_bits_per_sample(enum AVCodecID codec_id) + { + switch (codec_id) { ++ case AV_CODEC_ID_DFPWM: ++ return 1; + case AV_CODEC_ID_ADPCM_SBPRO_2: + return 2; + case AV_CODEC_ID_ADPCM_SBPRO_3: +@@ -680,6 +635,7 @@ + case AV_CODEC_ID_MP2: + case AV_CODEC_ID_MUSEPACK7: return 1152; + case AV_CODEC_ID_AC3: return 1536; ++ case AV_CODEC_ID_FTR: return 1024; + } + + if (sr > 0) { +@@ -723,6 +679,10 @@ + return 256 * (frame_bytes / 64); + if (id == AV_CODEC_ID_RA_144) + return 160 * (frame_bytes / 20); ++ if (id == AV_CODEC_ID_APTX) ++ return 4 * (frame_bytes / 4); ++ if (id == AV_CODEC_ID_APTX_HD) ++ return 4 * (frame_bytes / 6); + + if (bps > 0) { + /* calc from frame_bytes and bits_per_coded_sample */ +@@ -746,6 +706,7 @@ + return 0; + return frame_bytes * 28; + case AV_CODEC_ID_ADPCM_4XM: ++ case AV_CODEC_ID_ADPCM_IMA_ACORN: + case AV_CODEC_ID_ADPCM_IMA_DAT4: + case AV_CODEC_ID_ADPCM_IMA_ISS: + return (frame_bytes - 4 * ch) * 2 / ch; +@@ -812,6 +773,9 @@ + case AV_CODEC_ID_ADPCM_MTAF: + tmp = blocks * (ba - 16LL) * 2 / ch; + break; ++ case AV_CODEC_ID_ADPCM_XMD: ++ tmp = blocks * 32; ++ break; + } + if (tmp) { + if (tmp != (int)tmp) +@@ -854,8 +818,16 @@ + + int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) + { +- int duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, +- avctx->channels, avctx->block_align, ++ int channels = avctx->ch_layout.nb_channels; ++ int duration; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (!channels) ++ channels = avctx->channels; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, ++ channels, avctx->block_align, + avctx->codec_tag, avctx->bits_per_coded_sample, + avctx->bit_rate, avctx->extradata, avctx->frame_size, + frame_bytes); +@@ -864,8 +836,16 @@ + + int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes) + { +- int duration = get_audio_frame_duration(par->codec_id, par->sample_rate, +- par->channels, par->block_align, ++ int channels = par->ch_layout.nb_channels; ++ int duration; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (!channels) ++ channels = par->channels; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ duration = get_audio_frame_duration(par->codec_id, par->sample_rate, ++ channels, par->block_align, + par->codec_tag, par->bits_per_coded_sample, + par->bit_rate, par->extradata, par->frame_size, + frame_bytes); +@@ -901,8 +881,9 @@ + return i; + } + +-const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index) ++const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *avcodec, int index) + { ++ const FFCodec *const codec = ffcodec(avcodec); + int i; + if (!codec->hw_configs || index < 0) + return NULL; +@@ -912,25 +893,6 @@ + return &codec->hw_configs[index]->public; + } + +-#if FF_API_USER_VISIBLE_AVHWACCEL +-AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel) +-{ +- return NULL; +-} +- +-void av_register_hwaccel(AVHWAccel *hwaccel) +-{ +-} +-#endif +- +-unsigned int avpriv_toupper4(unsigned int x) +-{ +- return av_toupper(x & 0xFF) + +- (av_toupper((x >> 8) & 0xFF) << 8) + +- (av_toupper((x >> 16) & 0xFF) << 16) + +-((unsigned)av_toupper((x >> 24) & 0xFF) << 24); +-} +- + int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src) + { + int ret; +@@ -946,7 +908,7 @@ + + if (src->progress && + !(dst->progress = av_buffer_ref(src->progress))) { +- ff_thread_release_buffer(dst->owner[0], dst); ++ ff_thread_release_ext_buffer(dst->owner[0], dst); + return AVERROR(ENOMEM); + } + +@@ -955,19 +917,26 @@ + + #if !HAVE_THREADS + +-enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) ++int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags) + { +- return ff_get_format(avctx, fmt); ++ return ff_get_buffer(avctx, f, flags); + } + +-int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) ++int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) + { + f->owner[0] = f->owner[1] = avctx; + return ff_get_buffer(avctx, f->f, flags); + } + +-void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f) ++void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f) + { ++ if (f) ++ av_frame_unref(f); ++} ++ ++void ff_thread_release_ext_buffer(AVCodecContext *avctx, ThreadFrame *f) ++{ ++ f->owner[0] = f->owner[1] = NULL; + if (f->f) + av_frame_unref(f->f); + } +@@ -980,7 +949,7 @@ + { + } + +-void ff_thread_await_progress(ThreadFrame *f, int progress, int field) ++void ff_thread_await_progress(const ThreadFrame *f, int progress, int field) + { + } + +@@ -989,13 +958,14 @@ + return 1; + } + +-int ff_alloc_entries(AVCodecContext *avctx, int count) ++int ff_slice_thread_init_progress(AVCodecContext *avctx) + { + return 0; + } + +-void ff_reset_entries(AVCodecContext *avctx) ++int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) + { ++ return 0; + } + + void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift) +diff -Naur a/media/ffvpx/libavcodec/vaapi_av1.c b/media/ffvpx/libavcodec/vaapi_av1.c +--- a/media/ffvpx/libavcodec/vaapi_av1.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vaapi_av1.c 2023-04-06 12:50:24.492176543 +0200 +@@ -18,15 +18,37 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/frame.h" + #include "libavutil/pixdesc.h" + #include "hwconfig.h" + #include "vaapi_decode.h" ++#include "internal.h" + #include "av1dec.h" ++#include "thread.h" ++ ++typedef struct VAAPIAV1FrameRef { ++ AVFrame *frame; ++ int valid; ++} VAAPIAV1FrameRef; ++ ++typedef struct VAAPIAV1DecContext { ++ VAAPIDecodeContext base; ++ ++ /** ++ * For film grain case, VAAPI generate 2 output for each frame, ++ * current_frame will not apply film grain, and will be used for ++ * references for next frames. Maintain the reference list without ++ * applying film grain here. And current_display_picture will be ++ * used to apply film grain and push to downstream. ++ */ ++ VAAPIAV1FrameRef ref_tab[AV1_NUM_REF_FRAMES]; ++ AVFrame *tmp_frame; ++} VAAPIAV1DecContext; + + static VASurfaceID vaapi_av1_surface_id(AV1Frame *vf) + { + if (vf) +- return ff_vaapi_get_surface_id(vf->tf.f); ++ return ff_vaapi_get_surface_id(vf->f); + else + return VA_INVALID_SURFACE; + } +@@ -49,6 +71,48 @@ + return bit_depth == 8 ? 0 : bit_depth == 10 ? 1 : 2; + } + ++static int vaapi_av1_decode_init(AVCodecContext *avctx) ++{ ++ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; ++ ++ ctx->tmp_frame = av_frame_alloc(); ++ if (!ctx->tmp_frame) { ++ av_log(avctx, AV_LOG_ERROR, ++ "Failed to allocate frame.\n"); ++ return AVERROR(ENOMEM); ++ } ++ ++ for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) { ++ ctx->ref_tab[i].frame = av_frame_alloc(); ++ if (!ctx->ref_tab[i].frame) { ++ av_log(avctx, AV_LOG_ERROR, ++ "Failed to allocate reference table frame %d.\n", i); ++ return AVERROR(ENOMEM); ++ } ++ ctx->ref_tab[i].valid = 0; ++ } ++ ++ return ff_vaapi_decode_init(avctx); ++} ++ ++static int vaapi_av1_decode_uninit(AVCodecContext *avctx) ++{ ++ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; ++ ++ if (ctx->tmp_frame->buf[0]) ++ ff_thread_release_buffer(avctx, ctx->tmp_frame); ++ av_frame_free(&ctx->tmp_frame); ++ ++ for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) { ++ if (ctx->ref_tab[i].frame->buf[0]) ++ ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame); ++ av_frame_free(&ctx->ref_tab[i].frame); ++ } ++ ++ return ff_vaapi_decode_uninit(avctx); ++} ++ ++ + static int vaapi_av1_start_frame(AVCodecContext *avctx, + av_unused const uint8_t *buffer, + av_unused uint32_t size) +@@ -58,40 +122,62 @@ + const AV1RawFrameHeader *frame_header = s->raw_frame_header; + const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; + VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; ++ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; + VADecPictureParameterBufferAV1 pic_param; + int8_t bit_depth_idx; + int err = 0; + int apply_grain = !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; + uint8_t remap_lr_type[4] = {AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE, AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ}; +- +- pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); ++ uint8_t segmentation_feature_signed[AV1_SEG_LVL_MAX] = {1, 1, 1, 1, 1, 0, 0, 0}; ++ uint8_t segmentation_feature_max[AV1_SEG_LVL_MAX] = {255, AV1_MAX_LOOP_FILTER, ++ AV1_MAX_LOOP_FILTER, AV1_MAX_LOOP_FILTER, AV1_MAX_LOOP_FILTER, 7 , 0 , 0 }; + + bit_depth_idx = vaapi_av1_get_bit_depth_idx(avctx); + if (bit_depth_idx < 0) + goto fail; + ++ if (apply_grain) { ++ if (ctx->tmp_frame->buf[0]) ++ ff_thread_release_buffer(avctx, ctx->tmp_frame); ++ err = ff_thread_get_buffer(avctx, ctx->tmp_frame, AV_GET_BUFFER_FLAG_REF); ++ if (err < 0) ++ goto fail; ++ pic->output_surface = ff_vaapi_get_surface_id(ctx->tmp_frame); ++ } else { ++ pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); ++ } ++ + memset(&pic_param, 0, sizeof(VADecPictureParameterBufferAV1)); + pic_param = (VADecPictureParameterBufferAV1) { +- .profile = seq->seq_profile, +- .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, +- .bit_depth_idx = bit_depth_idx, +- .current_frame = pic->output_surface, +- .current_display_picture = pic->output_surface, +- .frame_width_minus1 = frame_header->frame_width_minus_1, +- .frame_height_minus1 = frame_header->frame_height_minus_1, +- .primary_ref_frame = frame_header->primary_ref_frame, +- .order_hint = frame_header->order_hint, +- .tile_cols = frame_header->tile_cols, +- .tile_rows = frame_header->tile_rows, +- .context_update_tile_id = frame_header->context_update_tile_id, +- .interp_filter = frame_header->interpolation_filter, +- .filter_level[0] = frame_header->loop_filter_level[0], +- .filter_level[1] = frame_header->loop_filter_level[1], +- .filter_level_u = frame_header->loop_filter_level[2], +- .filter_level_v = frame_header->loop_filter_level[3], +- .base_qindex = frame_header->base_q_idx, +- .cdef_damping_minus_3 = frame_header->cdef_damping_minus_3, +- .cdef_bits = frame_header->cdef_bits, ++ .profile = seq->seq_profile, ++ .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, ++ .bit_depth_idx = bit_depth_idx, ++ .matrix_coefficients = seq->color_config.matrix_coefficients, ++ .current_frame = pic->output_surface, ++ .current_display_picture = vaapi_av1_surface_id(&s->cur_frame), ++ .frame_width_minus1 = frame_header->frame_width_minus_1, ++ .frame_height_minus1 = frame_header->frame_height_minus_1, ++ .primary_ref_frame = frame_header->primary_ref_frame, ++ .order_hint = frame_header->order_hint, ++ .tile_cols = frame_header->tile_cols, ++ .tile_rows = frame_header->tile_rows, ++ .context_update_tile_id = frame_header->context_update_tile_id, ++ .superres_scale_denominator = frame_header->use_superres ? ++ frame_header->coded_denom + AV1_SUPERRES_DENOM_MIN : ++ AV1_SUPERRES_NUM, ++ .interp_filter = frame_header->interpolation_filter, ++ .filter_level[0] = frame_header->loop_filter_level[0], ++ .filter_level[1] = frame_header->loop_filter_level[1], ++ .filter_level_u = frame_header->loop_filter_level[2], ++ .filter_level_v = frame_header->loop_filter_level[3], ++ .base_qindex = frame_header->base_q_idx, ++ .y_dc_delta_q = frame_header->delta_q_y_dc, ++ .u_dc_delta_q = frame_header->delta_q_u_dc, ++ .u_ac_delta_q = frame_header->delta_q_u_ac, ++ .v_dc_delta_q = frame_header->delta_q_v_dc, ++ .v_ac_delta_q = frame_header->delta_q_v_ac, ++ .cdef_damping_minus_3 = frame_header->cdef_damping_minus_3, ++ .cdef_bits = frame_header->cdef_bits, + .seq_info_fields.fields = { + .still_picture = seq->still_picture, + .use_128x128_superblock = seq->use_128x128_superblock, +@@ -162,12 +248,15 @@ + .mode_ref_delta_update = frame_header->loop_filter_delta_update, + }, + .mode_control_fields.bits = { +- .delta_q_present_flag = frame_header->delta_q_present, +- .log2_delta_q_res = frame_header->delta_q_res, +- .tx_mode = frame_header->tx_mode, +- .reference_select = frame_header->reference_select, +- .reduced_tx_set_used = frame_header->reduced_tx_set, +- .skip_mode_present = frame_header->skip_mode_present, ++ .delta_q_present_flag = frame_header->delta_q_present, ++ .log2_delta_q_res = frame_header->delta_q_res, ++ .delta_lf_present_flag = frame_header->delta_lf_present, ++ .log2_delta_lf_res = frame_header->delta_lf_res, ++ .delta_lf_multi = frame_header->delta_lf_multi, ++ .tx_mode = frame_header->tx_mode, ++ .reference_select = frame_header->reference_select, ++ .reduced_tx_set_used = frame_header->reduced_tx_set, ++ .skip_mode_present = frame_header->skip_mode_present, + }, + .loop_restoration_fields.bits = { + .yframe_restoration_type = remap_lr_type[frame_header->lr_type[0]], +@@ -178,14 +267,19 @@ + }, + .qmatrix_fields.bits = { + .using_qmatrix = frame_header->using_qmatrix, ++ .qm_y = frame_header->qm_y, ++ .qm_u = frame_header->qm_u, ++ .qm_v = frame_header->qm_v, + } + }; + + for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { +- if (pic_param.pic_info_fields.bits.frame_type == AV1_FRAME_KEY) ++ if (pic_param.pic_info_fields.bits.frame_type == AV1_FRAME_KEY && frame_header->show_frame) + pic_param.ref_frame_map[i] = VA_INVALID_ID; + else +- pic_param.ref_frame_map[i] = vaapi_av1_surface_id(&s->ref[i]); ++ pic_param.ref_frame_map[i] = ctx->ref_tab[i].valid ? ++ ff_vaapi_get_surface_id(ctx->ref_tab[i].frame) : ++ vaapi_av1_surface_id(&s->ref[i]); + } + for (int i = 0; i < AV1_REFS_PER_FRAME; i++) { + pic_param.ref_frame_idx[i] = frame_header->ref_frame_idx[i]; +@@ -213,10 +307,22 @@ + frame_header->height_in_sbs_minus_1[i]; + } + for (int i = AV1_REF_FRAME_LAST; i <= AV1_REF_FRAME_ALTREF; i++) { +- pic_param.wm[i - 1].wmtype = s->cur_frame.gm_type[i]; ++ pic_param.wm[i - 1].invalid = s->cur_frame.gm_invalid[i]; ++ pic_param.wm[i - 1].wmtype = s->cur_frame.gm_type[i]; + for (int j = 0; j < 6; j++) + pic_param.wm[i - 1].wmmat[j] = s->cur_frame.gm_params[i][j]; + } ++ for (int i = 0; i < AV1_MAX_SEGMENTS; i++) { ++ for (int j = 0; j < AV1_SEG_LVL_MAX; j++) { ++ pic_param.seg_info.feature_mask[i] |= (frame_header->feature_enabled[i][j] << j); ++ if (segmentation_feature_signed[j]) ++ pic_param.seg_info.feature_data[i][j] = av_clip(frame_header->feature_value[i][j], ++ -segmentation_feature_max[j], segmentation_feature_max[j]); ++ else ++ pic_param.seg_info.feature_data[i][j] = av_clip(frame_header->feature_value[i][j], ++ 0, segmentation_feature_max[j]); ++ } ++ } + if (apply_grain) { + for (int i = 0; i < film_grain->num_y_points; i++) { + pic_param.film_grain_info.point_y_value[i] = +@@ -263,8 +369,34 @@ + static int vaapi_av1_end_frame(AVCodecContext *avctx) + { + const AV1DecContext *s = avctx->priv_data; ++ const AV1RawFrameHeader *header = s->raw_frame_header; ++ const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; + VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; +- return ff_vaapi_decode_issue(avctx, pic); ++ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; ++ ++ int apply_grain = !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; ++ int ret; ++ ret = ff_vaapi_decode_issue(avctx, pic); ++ if (ret < 0) ++ return ret; ++ ++ for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { ++ if (header->refresh_frame_flags & (1 << i)) { ++ if (ctx->ref_tab[i].frame->buf[0]) ++ ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame); ++ ++ if (apply_grain) { ++ ret = av_frame_ref(ctx->ref_tab[i].frame, ctx->tmp_frame); ++ if (ret < 0) ++ return ret; ++ ctx->ref_tab[i].valid = 1; ++ } else { ++ ctx->ref_tab[i].valid = 0; ++ } ++ } ++ } ++ ++ return 0; + } + + static int vaapi_av1_decode_slice(AVCodecContext *avctx, +@@ -311,9 +443,9 @@ + .end_frame = vaapi_av1_end_frame, + .decode_slice = vaapi_av1_decode_slice, + .frame_priv_data_size = sizeof(VAAPIDecodePicture), +- .init = ff_vaapi_decode_init, +- .uninit = ff_vaapi_decode_uninit, ++ .init = vaapi_av1_decode_init, ++ .uninit = vaapi_av1_decode_uninit, + .frame_params = ff_vaapi_common_frame_params, +- .priv_data_size = sizeof(VAAPIDecodeContext), ++ .priv_data_size = sizeof(VAAPIAV1DecContext), + .caps_internal = HWACCEL_CAP_ASYNC_SAFE, + }; +diff -Naur a/media/ffvpx/libavcodec/vaapi_decode.c b/media/ffvpx/libavcodec/vaapi_decode.c +--- a/media/ffvpx/libavcodec/vaapi_decode.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vaapi_decode.c 2023-04-06 12:50:24.492176543 +0200 +@@ -16,6 +16,8 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config_components.h" ++ + #include "libavutil/avassert.h" + #include "libavutil/common.h" + #include "libavutil/pixdesc.h" +@@ -261,14 +263,29 @@ + #ifdef VA_FOURCC_Y210 + MAP(Y210, Y210), + #endif ++#ifdef VA_FOURCC_Y212 ++ MAP(Y212, Y212), ++#endif + // 4:4:0 + MAP(422V, YUV440P), + // 4:4:4 + MAP(444P, YUV444P), ++#ifdef VA_FOURCC_XYUV ++ MAP(XYUV, VUYX), ++#endif ++#ifdef VA_FOURCC_Y410 ++ MAP(Y410, XV30), ++#endif ++#ifdef VA_FOURCC_Y412 ++ MAP(Y412, XV36), ++#endif + // 4:2:0 10-bit + #ifdef VA_FOURCC_P010 + MAP(P010, P010), + #endif ++#ifdef VA_FOURCC_P012 ++ MAP(P012, P012), ++#endif + #ifdef VA_FOURCC_I010 + MAP(I010, YUV420P10), + #endif +@@ -355,6 +372,8 @@ + + ctx->pixel_format_attribute = (VASurfaceAttrib) { + .type = VASurfaceAttribPixelFormat, ++ .flags = VA_SURFACE_ATTRIB_SETTABLE, ++ .value.type = VAGenericValueTypeInteger, + .value.value.i = best_fourcc, + }; + +@@ -391,7 +410,9 @@ + #endif + #if VA_CHECK_VERSION(1, 2, 0) && CONFIG_HEVC_VAAPI_HWACCEL + MAP(HEVC, HEVC_REXT, None, +- ff_vaapi_parse_hevc_rext_profile ), ++ ff_vaapi_parse_hevc_rext_scc_profile ), ++ MAP(HEVC, HEVC_SCC, None, ++ ff_vaapi_parse_hevc_rext_scc_profile ), + #endif + MAP(MJPEG, MJPEG_HUFFMAN_BASELINE_DCT, + JPEGBaseline), +@@ -408,7 +429,9 @@ + MAP(VP9, VP9_0, VP9Profile0 ), + #endif + #if VA_CHECK_VERSION(0, 39, 0) ++ MAP(VP9, VP9_1, VP9Profile1 ), + MAP(VP9, VP9_2, VP9Profile2 ), ++ MAP(VP9, VP9_3, VP9Profile3 ), + #endif + #if VA_CHECK_VERSION(1, 8, 0) + MAP(AV1, AV1_MAIN, AV1Profile0), +@@ -577,10 +600,10 @@ + switch (avctx->codec_id) { + case AV_CODEC_ID_H264: + case AV_CODEC_ID_HEVC: ++ case AV_CODEC_ID_AV1: + frames->initial_pool_size += 16; + break; + case AV_CODEC_ID_VP9: +- case AV_CODEC_ID_AV1: + frames->initial_pool_size += 8; + break; + case AV_CODEC_ID_VP8: +@@ -640,46 +663,6 @@ + ctx->va_config = VA_INVALID_ID; + ctx->va_context = VA_INVALID_ID; + +-#if FF_API_STRUCT_VAAPI_CONTEXT +- if (avctx->hwaccel_context) { +- av_log(avctx, AV_LOG_WARNING, "Using deprecated struct " +- "vaapi_context in decode.\n"); +- +- ctx->have_old_context = 1; +- ctx->old_context = avctx->hwaccel_context; +- +- // Really we only want the VAAPI device context, but this +- // allocates a whole generic device context because we don't +- // have any other way to determine how big it should be. +- ctx->device_ref = +- av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_VAAPI); +- if (!ctx->device_ref) { +- err = AVERROR(ENOMEM); +- goto fail; +- } +- ctx->device = (AVHWDeviceContext*)ctx->device_ref->data; +- ctx->hwctx = ctx->device->hwctx; +- +- ctx->hwctx->display = ctx->old_context->display; +- +- // The old VAAPI decode setup assumed this quirk was always +- // present, so set it here to avoid the behaviour changing. +- ctx->hwctx->driver_quirks = +- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS; +- +- } +-#endif +- +-#if FF_API_STRUCT_VAAPI_CONTEXT +- if (ctx->have_old_context) { +- ctx->va_config = ctx->old_context->config_id; +- ctx->va_context = ctx->old_context->context_id; +- +- av_log(avctx, AV_LOG_DEBUG, "Using user-supplied decoder " +- "context: %#x/%#x.\n", ctx->va_config, ctx->va_context); +- } else { +-#endif +- + err = ff_decode_get_hw_frames_ctx(avctx, AV_HWDEVICE_TYPE_VAAPI); + if (err < 0) + goto fail; +@@ -690,7 +673,7 @@ + ctx->hwctx = ctx->device->hwctx; + + err = vaapi_decode_make_config(avctx, ctx->frames->device_ref, +- &ctx->va_config, avctx->hw_frames_ctx); ++ &ctx->va_config, NULL); + if (err) + goto fail; + +@@ -709,9 +692,6 @@ + + av_log(avctx, AV_LOG_DEBUG, "Decode context initialised: " + "%#x/%#x.\n", ctx->va_config, ctx->va_context); +-#if FF_API_STRUCT_VAAPI_CONTEXT +- } +-#endif + + return 0; + +@@ -725,12 +705,6 @@ + VAAPIDecodeContext *ctx = avctx->internal->hwaccel_priv_data; + VAStatus vas; + +-#if FF_API_STRUCT_VAAPI_CONTEXT +- if (ctx->have_old_context) { +- av_buffer_unref(&ctx->device_ref); +- } else { +-#endif +- + if (ctx->va_context != VA_INVALID_ID) { + vas = vaDestroyContext(ctx->hwctx->display, ctx->va_context); + if (vas != VA_STATUS_SUCCESS) { +@@ -748,9 +722,5 @@ + } + } + +-#if FF_API_STRUCT_VAAPI_CONTEXT +- } +-#endif +- + return 0; + } +diff -Naur a/media/ffvpx/libavcodec/vaapi_decode.h b/media/ffvpx/libavcodec/vaapi_decode.h +--- a/media/ffvpx/libavcodec/vaapi_decode.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vaapi_decode.h 2023-04-06 12:49:40.256395011 +0200 +@@ -27,11 +27,6 @@ + + #include "avcodec.h" + +-#include "version.h" +-#if FF_API_STRUCT_VAAPI_CONTEXT +-#include "vaapi.h" +-#endif +- + static inline VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic) + { + return (uintptr_t)pic->data[3]; +@@ -56,14 +51,6 @@ + VAConfigID va_config; + VAContextID va_context; + +-#if FF_API_STRUCT_VAAPI_CONTEXT +-FF_DISABLE_DEPRECATION_WARNINGS +- int have_old_context; +- struct vaapi_context *old_context; +- AVBufferRef *device_ref; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + AVHWDeviceContext *device; + AVVAAPIDeviceContext *hwctx; + +diff -Naur a/media/ffvpx/libavcodec/vaapi_hevc.h b/media/ffvpx/libavcodec/vaapi_hevc.h +--- a/media/ffvpx/libavcodec/vaapi_hevc.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vaapi_hevc.h 2023-04-06 12:50:24.492176543 +0200 +@@ -22,6 +22,6 @@ + #include + #include "avcodec.h" + +-VAProfile ff_vaapi_parse_hevc_rext_profile(AVCodecContext *avctx); ++VAProfile ff_vaapi_parse_hevc_rext_scc_profile(AVCodecContext *avctx); + + #endif /* AVCODEC_VAAPI_HEVC_H */ +diff -Naur a/media/ffvpx/libavcodec/vaapi_vp8.c b/media/ffvpx/libavcodec/vaapi_vp8.c +--- a/media/ffvpx/libavcodec/vaapi_vp8.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vaapi_vp8.c 2023-04-06 12:50:06.973471134 +0200 +@@ -36,21 +36,21 @@ + av_unused uint32_t size) + { + const VP8Context *s = avctx->priv_data; +- VAAPIDecodePicture *pic = s->framep[VP56_FRAME_CURRENT]->hwaccel_picture_private; ++ VAAPIDecodePicture *pic = s->framep[VP8_FRAME_CURRENT]->hwaccel_picture_private; + VAPictureParameterBufferVP8 pp; + VAProbabilityDataBufferVP8 prob; + VAIQMatrixBufferVP8 quant; + int err, i, j, k; + +- pic->output_surface = vaapi_vp8_surface_id(s->framep[VP56_FRAME_CURRENT]); ++ pic->output_surface = vaapi_vp8_surface_id(s->framep[VP8_FRAME_CURRENT]); + + pp = (VAPictureParameterBufferVP8) { + .frame_width = avctx->width, + .frame_height = avctx->height, + +- .last_ref_frame = vaapi_vp8_surface_id(s->framep[VP56_FRAME_PREVIOUS]), +- .golden_ref_frame = vaapi_vp8_surface_id(s->framep[VP56_FRAME_GOLDEN]), +- .alt_ref_frame = vaapi_vp8_surface_id(s->framep[VP56_FRAME_GOLDEN2]), ++ .last_ref_frame = vaapi_vp8_surface_id(s->framep[VP8_FRAME_PREVIOUS]), ++ .golden_ref_frame = vaapi_vp8_surface_id(s->framep[VP8_FRAME_GOLDEN]), ++ .alt_ref_frame = vaapi_vp8_surface_id(s->framep[VP8_FRAME_ALTREF]), + .out_of_loop_frame = VA_INVALID_SURFACE, + + .pic_fields.bits = { +@@ -67,8 +67,8 @@ + .loop_filter_adj_enable = s->lf_delta.enabled, + .mode_ref_lf_delta_update = s->lf_delta.update, + +- .sign_bias_golden = s->sign_bias[VP56_FRAME_GOLDEN], +- .sign_bias_alternate = s->sign_bias[VP56_FRAME_GOLDEN2], ++ .sign_bias_golden = s->sign_bias[VP8_FRAME_GOLDEN], ++ .sign_bias_alternate = s->sign_bias[VP8_FRAME_ALTREF], + + .mb_no_coeff_skip = s->mbskip_enabled, + .loop_filter_disable = s->filter.level == 0, +@@ -177,7 +177,7 @@ + static int vaapi_vp8_end_frame(AVCodecContext *avctx) + { + const VP8Context *s = avctx->priv_data; +- VAAPIDecodePicture *pic = s->framep[VP56_FRAME_CURRENT]->hwaccel_picture_private; ++ VAAPIDecodePicture *pic = s->framep[VP8_FRAME_CURRENT]->hwaccel_picture_private; + + return ff_vaapi_decode_issue(avctx, pic); + } +@@ -187,7 +187,7 @@ + uint32_t size) + { + const VP8Context *s = avctx->priv_data; +- VAAPIDecodePicture *pic = s->framep[VP56_FRAME_CURRENT]->hwaccel_picture_private; ++ VAAPIDecodePicture *pic = s->framep[VP8_FRAME_CURRENT]->hwaccel_picture_private; + VASliceParameterBufferVP8 sp; + int err, i; + +diff -Naur a/media/ffvpx/libavcodec/version.c b/media/ffvpx/libavcodec/version.c +--- a/media/ffvpx/libavcodec/version.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/version.c 2023-04-06 12:49:40.256395011 +0200 +@@ -0,0 +1,50 @@ ++/* ++ * Version functions. ++ * ++ * 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 "config.h" ++ ++#include "libavutil/avassert.h" ++#include "avcodec.h" ++#include "codec_id.h" ++#include "version.h" ++ ++#include "libavutil/ffversion.h" ++const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION; ++ ++unsigned avcodec_version(void) ++{ ++ av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563); ++ av_assert0(AV_CODEC_ID_ADPCM_G722==69660); ++ av_assert0(AV_CODEC_ID_SRT==94216); ++ av_assert0(LIBAVCODEC_VERSION_MICRO >= 100); ++ ++ return LIBAVCODEC_VERSION_INT; ++} ++ ++const char *avcodec_configuration(void) ++{ ++ return FFMPEG_CONFIGURATION; ++} ++ ++const char *avcodec_license(void) ++{ ++#define LICENSE_PREFIX "libavcodec license: " ++ return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1]; ++} +diff -Naur a/media/ffvpx/libavcodec/version.h b/media/ffvpx/libavcodec/version.h +--- a/media/ffvpx/libavcodec/version.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/version.h 2023-04-06 12:50:24.492176543 +0200 +@@ -27,8 +27,9 @@ + + #include "libavutil/version.h" + +-#define LIBAVCODEC_VERSION_MAJOR 58 +-#define LIBAVCODEC_VERSION_MINOR 134 ++#include "version_major.h" ++ ++#define LIBAVCODEC_VERSION_MINOR 5 + #define LIBAVCODEC_VERSION_MICRO 100 + + #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ +@@ -41,132 +42,4 @@ + + #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) + +-/** +- * FF_API_* defines may be placed below to indicate public API that will be +- * dropped at a future version bump. The defines themselves are not part of +- * the public API and may change, break or disappear at any time. +- * +- * @note, when bumping the major version it is recommended to manually +- * disable each FF_API_* in its own commit instead of disabling them all +- * at once through the bump. This improves the git bisect-ability of the change. +- */ +- +-#ifndef FF_API_AVCTX_TIMEBASE +-#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_CODED_FRAME +-#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_SIDEDATA_ONLY_PKT +-#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_VDPAU_PROFILE +-#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_CONVERGENCE_DURATION +-#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_AVPICTURE +-#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_AVPACKET_OLD_API +-#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_RTP_CALLBACK +-#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_VBV_DELAY +-#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_CODER_TYPE +-#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_STAT_BITS +-#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_PRIVATE_OPT +-#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_ASS_TIMING +-#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_OLD_BSF +-#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_COPY_CONTEXT +-#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_GET_CONTEXT_DEFAULTS +-#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_NVENC_OLD_NAME +-#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_STRUCT_VAAPI_CONTEXT +-#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_MERGE_SD_API +-#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_TAG_STRING +-#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_GETCHROMA +-#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_CODEC_GET_SET +-#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_USER_VISIBLE_AVHWACCEL +-#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_LOCKMGR +-#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_NEXT +-#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_UNSANITIZED_BITRATES +-#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_OPENH264_SLICE_MODE +-#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_OPENH264_CABAC +-#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_UNUSED_CODEC_CAPS +-#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_AVPRIV_PUT_BITS +-#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_OLD_ENCDEC +-#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_AVCODEC_PIX_FMT +-#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_MPV_RC_STRATEGY +-#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_PARSER_CHANGE +-#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) +-#endif +-#ifndef FF_API_THREAD_SAFE_CALLBACKS +-#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) +-#endif +-#ifndef FF_API_DEBUG_MV +-#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) +-#endif +-#ifndef FF_API_GET_FRAME_CLASS +-#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) +-#endif +-#ifndef FF_API_AUTO_THREADS +-#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) +-#endif +-#ifndef FF_API_INIT_PACKET +-#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) +-#endif +- + #endif /* AVCODEC_VERSION_H */ +diff -Naur a/media/ffvpx/libavcodec/version_major.h b/media/ffvpx/libavcodec/version_major.h +--- a/media/ffvpx/libavcodec/version_major.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/version_major.h 2023-04-06 12:50:24.492176543 +0200 +@@ -0,0 +1,52 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVCODEC_VERSION_MAJOR_H ++#define AVCODEC_VERSION_MAJOR_H ++ ++/** ++ * @file ++ * @ingroup libavc ++ * Libavcodec version macros. ++ */ ++ ++#define LIBAVCODEC_VERSION_MAJOR 60 ++ ++/** ++ * FF_API_* defines may be placed below to indicate public API that will be ++ * dropped at a future version bump. The defines themselves are not part of ++ * the public API and may change, break or disappear at any time. ++ * ++ * @note, when bumping the major version it is recommended to manually ++ * disable each FF_API_* in its own commit instead of disabling them all ++ * at once through the bump. This improves the git bisect-ability of the change. ++ */ ++ ++#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_IDCT_NONE (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_AYUV_CODECID (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_VT_OUTPUT_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61) ++#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61) ++ ++// reminder to remove CrystalHD decoders on next major bump ++#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61) ++ ++#endif /* AVCODEC_VERSION_MAJOR_H */ +diff -Naur a/media/ffvpx/libavcodec/videodsp.c b/media/ffvpx/libavcodec/videodsp.c +--- a/media/ffvpx/libavcodec/videodsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/videodsp.c 2023-04-06 12:50:06.973471134 +0200 +@@ -18,9 +18,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config.h" + #include "libavutil/attributes.h" + #include "libavutil/avassert.h" +-#include "libavutil/common.h" ++#include "libavutil/macros.h" + #include "videodsp.h" + + #define BIT_DEPTH 8 +@@ -31,7 +32,7 @@ + #include "videodsp_template.c" + #undef BIT_DEPTH + +-static void just_return(uint8_t *buf, ptrdiff_t stride, int h) ++static void just_return(const uint8_t *buf, ptrdiff_t stride, int h) + { + } + +@@ -44,14 +45,17 @@ + ctx->emulated_edge_mc = ff_emulated_edge_mc_16; + } + +- if (ARCH_AARCH64) +- ff_videodsp_init_aarch64(ctx, bpc); +- if (ARCH_ARM) +- ff_videodsp_init_arm(ctx, bpc); +- if (ARCH_PPC) +- ff_videodsp_init_ppc(ctx, bpc); +- if (ARCH_X86) +- ff_videodsp_init_x86(ctx, bpc); +- if (ARCH_MIPS) +- ff_videodsp_init_mips(ctx, bpc); ++#if ARCH_AARCH64 ++ ff_videodsp_init_aarch64(ctx, bpc); ++#elif ARCH_ARM ++ ff_videodsp_init_arm(ctx, bpc); ++#elif ARCH_PPC ++ ff_videodsp_init_ppc(ctx, bpc); ++#elif ARCH_X86 ++ ff_videodsp_init_x86(ctx, bpc); ++#elif ARCH_MIPS ++ ff_videodsp_init_mips(ctx, bpc); ++#elif ARCH_LOONGARCH64 ++ ff_videodsp_init_loongarch(ctx, bpc); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/videodsp.h b/media/ffvpx/libavcodec/videodsp.h +--- a/media/ffvpx/libavcodec/videodsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/videodsp.h 2023-04-06 12:50:06.973471134 +0200 +@@ -36,7 +36,6 @@ + int src_x, int src_y, int w, int h); + + EMULATED_EDGE(8) +-EMULATED_EDGE(16) + + typedef struct VideoDSPContext { + /** +@@ -73,7 +72,7 @@ + * @param stride distance between two lines of buf (in bytes) + * @param h number of lines to prefetch + */ +- void (*prefetch)(uint8_t *buf, ptrdiff_t stride, int h); ++ void (*prefetch)(const uint8_t *buf, ptrdiff_t stride, int h); + } VideoDSPContext; + + void ff_videodsp_init(VideoDSPContext *ctx, int bpc); +@@ -84,5 +83,6 @@ + void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc); + void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc); + void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc); ++void ff_videodsp_init_loongarch(VideoDSPContext *ctx, int bpc); + + #endif /* AVCODEC_VIDEODSP_H */ +diff -Naur a/media/ffvpx/libavcodec/videodsp_template.c b/media/ffvpx/libavcodec/videodsp_template.c +--- a/media/ffvpx/libavcodec/videodsp_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/videodsp_template.c 2023-04-06 12:50:24.492176543 +0200 +@@ -20,6 +20,10 @@ + */ + + #include "bit_depth_template.c" ++#if BIT_DEPTH != 8 ++// ff_emulated_edge_mc_8 is used by the x86 MpegVideoDSP API. ++static ++#endif + void FUNC(ff_emulated_edge_mc)(uint8_t *buf, const uint8_t *src, + ptrdiff_t buf_linesize, + ptrdiff_t src_linesize, +@@ -60,7 +64,7 @@ + av_assert2(start_x < end_x && block_w); + + w = end_x - start_x; +- src += start_y * src_linesize + start_x * sizeof(pixel); ++ src += start_y * src_linesize + start_x * (ptrdiff_t)sizeof(pixel); + buf += start_x * sizeof(pixel); + + // top +@@ -83,7 +87,7 @@ + buf += buf_linesize; + } + +- buf -= block_h * buf_linesize + start_x * sizeof(pixel); ++ buf -= block_h * buf_linesize + start_x * (ptrdiff_t)sizeof(pixel); + while (block_h--) { + pixel *bufp = (pixel *) buf; + +diff -Naur a/media/ffvpx/libavcodec/vlc.c b/media/ffvpx/libavcodec/vlc.c +--- a/media/ffvpx/libavcodec/vlc.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vlc.c 2023-04-06 12:49:40.256395011 +0200 +@@ -0,0 +1,378 @@ ++/* ++ * API for creating VLC trees ++ * Copyright (c) 2000, 2001 Fabrice Bellard ++ * Copyright (c) 2002-2004 Michael Niedermayer ++ * Copyright (c) 2010 Loren Merritt ++ * ++ * 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 ++#include ++#include ++#include ++ ++#include "libavutil/attributes.h" ++#include "libavutil/avassert.h" ++#include "libavutil/error.h" ++#include "libavutil/internal.h" ++#include "libavutil/log.h" ++#include "libavutil/macros.h" ++#include "libavutil/mem.h" ++#include "libavutil/qsort.h" ++#include "libavutil/reverse.h" ++#include "vlc.h" ++ ++#define GET_DATA(v, table, i, wrap, size) \ ++{ \ ++ const uint8_t *ptr = (const uint8_t *)table + i * wrap; \ ++ switch(size) { \ ++ case 1: \ ++ v = *(const uint8_t *)ptr; \ ++ break; \ ++ case 2: \ ++ v = *(const uint16_t *)ptr; \ ++ break; \ ++ case 4: \ ++ default: \ ++ av_assert1(size == 4); \ ++ v = *(const uint32_t *)ptr; \ ++ break; \ ++ } \ ++} ++ ++ ++static int alloc_table(VLC *vlc, int size, int use_static) ++{ ++ int index = vlc->table_size; ++ ++ vlc->table_size += size; ++ if (vlc->table_size > vlc->table_allocated) { ++ if (use_static) ++ abort(); // cannot do anything, init_vlc() is used with too little memory ++ vlc->table_allocated += (1 << vlc->bits); ++ vlc->table = av_realloc_f(vlc->table, vlc->table_allocated, sizeof(*vlc->table)); ++ if (!vlc->table) { ++ vlc->table_allocated = 0; ++ vlc->table_size = 0; ++ return AVERROR(ENOMEM); ++ } ++ memset(vlc->table + vlc->table_allocated - (1 << vlc->bits), 0, sizeof(*vlc->table) << vlc->bits); ++ } ++ return index; ++} ++ ++#define LOCALBUF_ELEMS 1500 // the maximum currently needed is 1296 by rv34 ++ ++static av_always_inline uint32_t bitswap_32(uint32_t x) ++{ ++ return (uint32_t)ff_reverse[ x & 0xFF] << 24 | ++ (uint32_t)ff_reverse[(x >> 8) & 0xFF] << 16 | ++ (uint32_t)ff_reverse[(x >> 16) & 0xFF] << 8 | ++ (uint32_t)ff_reverse[ x >> 24]; ++} ++ ++typedef struct VLCcode { ++ uint8_t bits; ++ VLCBaseType symbol; ++ /** codeword, with the first bit-to-be-read in the msb ++ * (even if intended for a little-endian bitstream reader) */ ++ uint32_t code; ++} VLCcode; ++ ++static int vlc_common_init(VLC *vlc, int nb_bits, int nb_codes, ++ VLCcode **buf, int flags) ++{ ++ vlc->bits = nb_bits; ++ vlc->table_size = 0; ++ if (flags & INIT_VLC_USE_NEW_STATIC) { ++ av_assert0(nb_codes <= LOCALBUF_ELEMS); ++ } else { ++ vlc->table = NULL; ++ vlc->table_allocated = 0; ++ } ++ if (nb_codes > LOCALBUF_ELEMS) { ++ *buf = av_malloc_array(nb_codes, sizeof(VLCcode)); ++ if (!*buf) ++ return AVERROR(ENOMEM); ++ } ++ ++ return 0; ++} ++ ++static int compare_vlcspec(const void *a, const void *b) ++{ ++ const VLCcode *sa = a, *sb = b; ++ return (sa->code >> 1) - (sb->code >> 1); ++} ++ ++/** ++ * Build VLC decoding tables suitable for use with get_vlc(). ++ * ++ * @param vlc the context to be initialized ++ * ++ * @param table_nb_bits max length of vlc codes to store directly in this table ++ * (Longer codes are delegated to subtables.) ++ * ++ * @param nb_codes number of elements in codes[] ++ * ++ * @param codes descriptions of the vlc codes ++ * These must be ordered such that codes going into the same subtable are contiguous. ++ * Sorting by VLCcode.code is sufficient, though not necessary. ++ */ ++static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, ++ VLCcode *codes, int flags) ++{ ++ int table_size, table_index; ++ VLCElem *table; ++ ++ if (table_nb_bits > 30) ++ return AVERROR(EINVAL); ++ table_size = 1 << table_nb_bits; ++ table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); ++ ff_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size); ++ if (table_index < 0) ++ return table_index; ++ table = &vlc->table[table_index]; ++ ++ /* first pass: map codes and compute auxiliary table sizes */ ++ for (int i = 0; i < nb_codes; i++) { ++ int n = codes[i].bits; ++ uint32_t code = codes[i].code; ++ int symbol = codes[i].symbol; ++ ff_dlog(NULL, "i=%d n=%d code=0x%"PRIx32"\n", i, n, code); ++ if (n <= table_nb_bits) { ++ /* no need to add another table */ ++ int j = code >> (32 - table_nb_bits); ++ int nb = 1 << (table_nb_bits - n); ++ int inc = 1; ++ ++ if (flags & INIT_VLC_OUTPUT_LE) { ++ j = bitswap_32(code); ++ inc = 1 << n; ++ } ++ for (int k = 0; k < nb; k++) { ++ int bits = table[j].len; ++ int oldsym = table[j].sym; ++ ff_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n); ++ if ((bits || oldsym) && (bits != n || oldsym != symbol)) { ++ av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); ++ return AVERROR_INVALIDDATA; ++ } ++ table[j].len = n; ++ table[j].sym = symbol; ++ j += inc; ++ } ++ } else { ++ /* fill auxiliary table recursively */ ++ uint32_t code_prefix; ++ int index, subtable_bits, j, k; ++ ++ n -= table_nb_bits; ++ code_prefix = code >> (32 - table_nb_bits); ++ subtable_bits = n; ++ codes[i].bits = n; ++ codes[i].code = code << table_nb_bits; ++ for (k = i + 1; k < nb_codes; k++) { ++ n = codes[k].bits - table_nb_bits; ++ if (n <= 0) ++ break; ++ code = codes[k].code; ++ if (code >> (32 - table_nb_bits) != code_prefix) ++ break; ++ codes[k].bits = n; ++ codes[k].code = code << table_nb_bits; ++ subtable_bits = FFMAX(subtable_bits, n); ++ } ++ subtable_bits = FFMIN(subtable_bits, table_nb_bits); ++ j = (flags & INIT_VLC_OUTPUT_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix; ++ table[j].len = -subtable_bits; ++ ff_dlog(NULL, "%4x: n=%d (subtable)\n", ++ j, codes[i].bits + table_nb_bits); ++ index = build_table(vlc, subtable_bits, k-i, codes+i, flags); ++ if (index < 0) ++ return index; ++ /* note: realloc has been done, so reload tables */ ++ table = &vlc->table[table_index]; ++ table[j].sym = index; ++ if (table[j].sym != index) { ++ avpriv_request_sample(NULL, "strange codes"); ++ return AVERROR_PATCHWELCOME; ++ } ++ i = k-1; ++ } ++ } ++ ++ for (int i = 0; i < table_size; i++) { ++ if (table[i].len == 0) ++ table[i].sym = -1; ++ } ++ ++ return table_index; ++} ++ ++static int vlc_common_end(VLC *vlc, int nb_bits, int nb_codes, VLCcode *codes, ++ int flags, VLCcode localbuf[LOCALBUF_ELEMS]) ++{ ++ int ret = build_table(vlc, nb_bits, nb_codes, codes, flags); ++ ++ if (flags & INIT_VLC_USE_NEW_STATIC) { ++ if (vlc->table_size != vlc->table_allocated && ++ !(flags & (INIT_VLC_STATIC_OVERLONG & ~INIT_VLC_USE_NEW_STATIC))) ++ av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); ++ av_assert0(ret >= 0); ++ } else { ++ if (codes != localbuf) ++ av_free(codes); ++ if (ret < 0) { ++ av_freep(&vlc->table); ++ return ret; ++ } ++ } ++ return 0; ++} ++ ++/* Build VLC decoding tables suitable for use with get_vlc(). ++ ++ 'nb_bits' sets the decoding table size (2^nb_bits) entries. The ++ bigger it is, the faster is the decoding. But it should not be too ++ big to save memory and L1 cache. '9' is a good compromise. ++ ++ 'nb_codes' : number of vlcs codes ++ ++ 'bits' : table which gives the size (in bits) of each vlc code. ++ ++ 'codes' : table which gives the bit pattern of of each vlc code. ++ ++ 'symbols' : table which gives the values to be returned from get_vlc(). ++ ++ 'xxx_wrap' : give the number of bytes between each entry of the ++ 'bits' or 'codes' tables. ++ ++ 'xxx_size' : gives the number of bytes of each entry of the 'bits' ++ or 'codes' tables. Currently 1,2 and 4 are supported. ++ ++ 'wrap' and 'size' make it possible to use any memory configuration and types ++ (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables. ++*/ ++int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, ++ const void *bits, int bits_wrap, int bits_size, ++ const void *codes, int codes_wrap, int codes_size, ++ const void *symbols, int symbols_wrap, int symbols_size, ++ int flags) ++{ ++ VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; ++ int j, ret; ++ ++ ret = vlc_common_init(vlc, nb_bits, nb_codes, &buf, flags); ++ if (ret < 0) ++ return ret; ++ ++ av_assert0(symbols_size <= 2 || !symbols); ++ j = 0; ++#define COPY(condition)\ ++ for (int i = 0; i < nb_codes; i++) { \ ++ unsigned len; \ ++ GET_DATA(len, bits, i, bits_wrap, bits_size); \ ++ if (!(condition)) \ ++ continue; \ ++ if (len > 3*nb_bits || len > 32) { \ ++ av_log(NULL, AV_LOG_ERROR, "Too long VLC (%u) in init_vlc\n", len);\ ++ if (buf != localbuf) \ ++ av_free(buf); \ ++ return AVERROR(EINVAL); \ ++ } \ ++ buf[j].bits = len; \ ++ GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \ ++ if (buf[j].code >= (1LL< nb_bits); ++ // qsort is the slowest part of init_vlc, and could probably be improved or avoided ++ AV_QSORT(buf, j, struct VLCcode, compare_vlcspec); ++ COPY(len && len <= nb_bits); ++ nb_codes = j; ++ ++ return vlc_common_end(vlc, nb_bits, nb_codes, buf, ++ flags, localbuf); ++} ++ ++int ff_init_vlc_from_lengths(VLC *vlc, int nb_bits, int nb_codes, ++ const int8_t *lens, int lens_wrap, ++ const void *symbols, int symbols_wrap, int symbols_size, ++ int offset, int flags, void *logctx) ++{ ++ VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; ++ uint64_t code; ++ int ret, j, len_max = FFMIN(32, 3 * nb_bits); ++ ++ ret = vlc_common_init(vlc, nb_bits, nb_codes, &buf, flags); ++ if (ret < 0) ++ return ret; ++ ++ j = code = 0; ++ for (int i = 0; i < nb_codes; i++, lens += lens_wrap) { ++ int len = *lens; ++ if (len > 0) { ++ unsigned sym; ++ ++ buf[j].bits = len; ++ if (symbols) ++ GET_DATA(sym, symbols, i, symbols_wrap, symbols_size) ++ else ++ sym = i; ++ buf[j].symbol = sym + offset; ++ buf[j++].code = code; ++ } else if (len < 0) { ++ len = -len; ++ } else ++ continue; ++ if (len > len_max || code & ((1U << (32 - len)) - 1)) { ++ av_log(logctx, AV_LOG_ERROR, "Invalid VLC (length %u)\n", len); ++ goto fail; ++ } ++ code += 1U << (32 - len); ++ if (code > UINT32_MAX + 1ULL) { ++ av_log(logctx, AV_LOG_ERROR, "Overdetermined VLC tree\n"); ++ goto fail; ++ } ++ } ++ return vlc_common_end(vlc, nb_bits, j, buf, flags, localbuf); ++fail: ++ if (buf != localbuf) ++ av_free(buf); ++ return AVERROR_INVALIDDATA; ++} ++ ++void ff_free_vlc(VLC *vlc) ++{ ++ av_freep(&vlc->table); ++} +diff -Naur a/media/ffvpx/libavcodec/vlc.h b/media/ffvpx/libavcodec/vlc.h +--- a/media/ffvpx/libavcodec/vlc.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vlc.h 2023-04-06 12:49:40.256395011 +0200 +@@ -21,11 +21,16 @@ + + #include + +-#define VLC_TYPE int16_t ++// When changing this, be sure to also update tableprint_vlc.h accordingly. ++typedef int16_t VLCBaseType; ++ ++typedef struct VLCElem { ++ VLCBaseType sym, len; ++} VLCElem; + + typedef struct VLC { + int bits; +- VLC_TYPE (*table)[2]; ///< code, bits ++ VLCElem *table; + int table_size, table_allocated; + } VLC; + +@@ -98,7 +103,7 @@ + #define INIT_CUSTOM_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \ + h, i, j, flags, static_size) \ + do { \ +- static VLC_TYPE table[static_size][2]; \ ++ static VLCElem table[static_size]; \ + (vlc)->table = table; \ + (vlc)->table_allocated = static_size; \ + ff_init_vlc_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \ +@@ -127,7 +132,7 @@ + symbols, symbols_wrap, symbols_size, \ + offset, flags, static_size) \ + do { \ +- static VLC_TYPE table[static_size][2]; \ ++ static VLCElem table[static_size]; \ + (vlc)->table = table; \ + (vlc)->table_allocated = static_size; \ + ff_init_vlc_from_lengths(vlc, bits, nb_codes, lens, len_wrap, \ +diff -Naur a/media/ffvpx/libavcodec/vorbis_parser.c b/media/ffvpx/libavcodec/vorbis_parser.c +--- a/media/ffvpx/libavcodec/vorbis_parser.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vorbis_parser.c 2023-04-06 12:49:40.256395011 +0200 +@@ -25,6 +25,8 @@ + * Determines the duration for each packet. + */ + ++#include "config_components.h" ++ + #include "libavutil/log.h" + + #include "get_bits.h" +@@ -332,7 +334,7 @@ + av_vorbis_parse_free(&s->vp); + } + +-AVCodecParser ff_vorbis_parser = { ++const AVCodecParser ff_vorbis_parser = { + .codec_ids = { AV_CODEC_ID_VORBIS }, + .priv_data_size = sizeof(VorbisParseContext), + .parser_parse = vorbis_parse, +diff -Naur a/media/ffvpx/libavcodec/vp56.h b/media/ffvpx/libavcodec/vp56.h +--- a/media/ffvpx/libavcodec/vp56.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp56.h 2023-04-06 12:50:06.973471134 +0200 +@@ -31,11 +31,11 @@ + #include "avcodec.h" + #include "get_bits.h" + #include "hpeldsp.h" +-#include "bytestream.h" + #include "h264chroma.h" + #include "videodsp.h" + #include "vp3dsp.h" + #include "vp56dsp.h" ++#include "vpx_rac.h" + + typedef struct vp56_context VP56Context; + +@@ -44,7 +44,6 @@ + VP56_FRAME_CURRENT = 0, + VP56_FRAME_PREVIOUS = 1, + VP56_FRAME_GOLDEN = 2, +- VP56_FRAME_GOLDEN2 = 3, + } VP56Frame; + + typedef enum { +@@ -84,16 +83,6 @@ + typedef int (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf, + int buf_size); + +-typedef struct VP56RangeCoder { +- int high; +- int bits; /* stored negated (i.e. negative "bits" is a positive number of +- bits left) in order to eliminate a negate in cache refilling */ +- const uint8_t *buffer; +- const uint8_t *end; +- unsigned int code_word; +- int end_reached; +-} VP56RangeCoder; +- + typedef struct VP56RefDc { + uint8_t not_null_dc; + VP56Frame ref_frame; +@@ -134,9 +123,9 @@ + AVFrame *frames[4]; + uint8_t *edge_emu_buffer_alloc; + uint8_t *edge_emu_buffer; +- VP56RangeCoder c; +- VP56RangeCoder cc; +- VP56RangeCoder *ccp; ++ VPXRangeCoder c; ++ VPXRangeCoder cc; ++ VPXRangeCoder *ccp; + int sub_version; + + /* frame info */ +@@ -216,174 +205,47 @@ + }; + + +-int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha); ++/** ++ * Initializes an VP56Context. Expects its caller to clean up ++ * in case of error. ++ */ + int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s, + int flip, int has_alpha); +-int ff_vp56_free(AVCodecContext *avctx); + int ff_vp56_free_context(VP56Context *s); + void ff_vp56_init_dequant(VP56Context *s, int quantizer); +-int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, +- AVPacket *avpkt); ++int ff_vp56_decode_frame(AVCodecContext *avctx, AVFrame *frame, ++ int *got_frame, AVPacket *avpkt); + + + /** + * vp56 specific range coder implementation + */ + +-extern const uint8_t ff_vp56_norm_shift[256]; +-int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size); +- +-/** +- * vp5689 returns 1 if the end of the stream has been reached, 0 otherwise. +- */ +-static av_always_inline int vpX_rac_is_end(VP56RangeCoder *c) +-{ +- if (c->end <= c->buffer && c->bits >= 0) +- c->end_reached ++; +- return c->end_reached > 10; +-} +- +-static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c) +-{ +- int shift = ff_vp56_norm_shift[c->high]; +- int bits = c->bits; +- unsigned int code_word = c->code_word; +- +- c->high <<= shift; +- code_word <<= shift; +- bits += shift; +- if(bits >= 0 && c->buffer < c->end) { +- code_word |= bytestream_get_be16(&c->buffer) << bits; +- bits -= 16; +- } +- c->bits = bits; +- return code_word; +-} +- +-#if ARCH_ARM +-#include "arm/vp56_arith.h" +-#elif ARCH_X86 +-#include "x86/vp56_arith.h" +-#endif +- +-#ifndef vp56_rac_get_prob +-#define vp56_rac_get_prob vp56_rac_get_prob +-static av_always_inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob) +-{ +- unsigned int code_word = vp56_rac_renorm(c); +- unsigned int low = 1 + (((c->high - 1) * prob) >> 8); +- unsigned int low_shift = low << 16; +- int bit = code_word >= low_shift; +- +- c->high = bit ? c->high - low : low; +- c->code_word = bit ? code_word - low_shift : code_word; +- +- return bit; +-} +-#endif +- +-#ifndef vp56_rac_get_prob_branchy +-// branchy variant, to be used where there's a branch based on the bit decoded +-static av_always_inline int vp56_rac_get_prob_branchy(VP56RangeCoder *c, int prob) +-{ +- unsigned long code_word = vp56_rac_renorm(c); +- unsigned low = 1 + (((c->high - 1) * prob) >> 8); +- unsigned low_shift = low << 16; +- +- if (code_word >= low_shift) { +- c->high -= low; +- c->code_word = code_word - low_shift; +- return 1; +- } +- +- c->high = low; +- c->code_word = code_word; +- return 0; +-} +-#endif +- +-static av_always_inline int vp56_rac_get(VP56RangeCoder *c) +-{ +- unsigned int code_word = vp56_rac_renorm(c); +- /* equiprobable */ +- int low = (c->high + 1) >> 1; +- unsigned int low_shift = low << 16; +- int bit = code_word >= low_shift; +- if (bit) { +- c->high -= low; +- code_word -= low_shift; +- } else { +- c->high = low; +- } +- +- c->code_word = code_word; +- return bit; +-} +- +-// rounding is different than vp56_rac_get, is vp56_rac_get wrong? +-static av_always_inline int vp8_rac_get(VP56RangeCoder *c) +-{ +- return vp56_rac_get_prob(c, 128); +-} +- +-static int vp56_rac_gets(VP56RangeCoder *c, int bits) ++static int vp56_rac_gets(VPXRangeCoder *c, int bits) + { + int value = 0; + + while (bits--) { +- value = (value << 1) | vp56_rac_get(c); ++ value = (value << 1) | vpx_rac_get(c); + } + + return value; + } + +-static int vp8_rac_get_uint(VP56RangeCoder *c, int bits) +-{ +- int value = 0; +- +- while (bits--) { +- value = (value << 1) | vp8_rac_get(c); +- } +- +- return value; +-} +- +-// fixme: add 1 bit to all the calls to this? +-static av_unused int vp8_rac_get_sint(VP56RangeCoder *c, int bits) +-{ +- int v; +- +- if (!vp8_rac_get(c)) +- return 0; +- +- v = vp8_rac_get_uint(c, bits); +- +- if (vp8_rac_get(c)) +- v = -v; +- +- return v; +-} +- + // P(7) +-static av_unused int vp56_rac_gets_nn(VP56RangeCoder *c, int bits) ++static av_unused int vp56_rac_gets_nn(VPXRangeCoder *c, int bits) + { + int v = vp56_rac_gets(c, 7) << 1; + return v + !v; + } + +-static av_unused int vp8_rac_get_nn(VP56RangeCoder *c) +-{ +- int v = vp8_rac_get_uint(c, 7) << 1; +- return v + !v; +-} +- + static av_always_inline +-int vp56_rac_get_tree(VP56RangeCoder *c, ++int vp56_rac_get_tree(VPXRangeCoder *c, + const VP56Tree *tree, + const uint8_t *probs) + { + while (tree->val > 0) { +- if (vp56_rac_get_prob_branchy(c, probs[tree->prob_idx])) ++ if (vpx_rac_get_prob_branchy(c, probs[tree->prob_idx])) + tree += tree->val; + else + tree++; +@@ -391,30 +253,4 @@ + return -tree->val; + } + +-// how probabilities are associated with decisions is different I think +-// well, the new scheme fits in the old but this way has one fewer branches per decision +-static av_always_inline int vp8_rac_get_tree(VP56RangeCoder *c, const int8_t (*tree)[2], +- const uint8_t *probs) +-{ +- int i = 0; +- +- do { +- i = tree[i][vp56_rac_get_prob(c, probs[i])]; +- } while (i > 0); +- +- return -i; +-} +- +-// DCTextra +-static av_always_inline int vp8_rac_get_coeff(VP56RangeCoder *c, const uint8_t *prob) +-{ +- int v = 0; +- +- do { +- v = (v<<1) + vp56_rac_get_prob(c, *prob++); +- } while (*prob); +- +- return v; +-} +- + #endif /* AVCODEC_VP56_H */ +diff -Naur a/media/ffvpx/libavcodec/vp56rac.c b/media/ffvpx/libavcodec/vp56rac.c +--- a/media/ffvpx/libavcodec/vp56rac.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp56rac.c 1970-01-01 01:00:00.000000000 +0100 +@@ -1,51 +0,0 @@ +-/* +- * VP5/6/8 decoder +- * Copyright (c) 2010 Fiona Glaser +- * +- * 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/common.h" +-#include "vp56.h" +- +-const uint8_t ff_vp56_norm_shift[256]= { +- 8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, +- 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, +- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +-}; +- +-int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size) +-{ +- c->high = 255; +- c->bits = -16; +- c->buffer = buf; +- c->end = buf + buf_size; +- c->end_reached = 0; +- if (buf_size < 1) +- return AVERROR_INVALIDDATA; +- c->code_word = bytestream_get_be24(&c->buffer); +- return 0; +-} +diff -Naur a/media/ffvpx/libavcodec/vp89_rac.h b/media/ffvpx/libavcodec/vp89_rac.h +--- a/media/ffvpx/libavcodec/vp89_rac.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp89_rac.h 2023-04-06 12:50:06.974471174 +0200 +@@ -0,0 +1,66 @@ ++/* ++ * Copyright (C) 2006 Aurelien Jacobs ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * Range decoder functions common to VP8 and VP9 ++ */ ++ ++#ifndef AVCODEC_VP89_RAC_H ++#define AVCODEC_VP89_RAC_H ++ ++#include ++ ++#include "libavutil/attributes.h" ++ ++#include "vpx_rac.h" ++ ++// rounding is different than vpx_rac_get, is vpx_rac_get wrong? ++static av_always_inline int vp89_rac_get(VPXRangeCoder *c) ++{ ++ return vpx_rac_get_prob(c, 128); ++} ++ ++static av_unused int vp89_rac_get_uint(VPXRangeCoder *c, int bits) ++{ ++ int value = 0; ++ ++ while (bits--) { ++ value = (value << 1) | vp89_rac_get(c); ++ } ++ ++ return value; ++} ++ ++// how probabilities are associated with decisions is different I think ++// well, the new scheme fits in the old but this way has one fewer branches per decision ++static av_always_inline int vp89_rac_get_tree(VPXRangeCoder *c, const int8_t (*tree)[2], ++ const uint8_t *probs) ++{ ++ int i = 0; ++ ++ do { ++ i = tree[i][vpx_rac_get_prob(c, probs[i])]; ++ } while (i > 0); ++ ++ return -i; ++} ++ ++#endif /* AVCODEC_VP89_RAC_H */ +diff -Naur a/media/ffvpx/libavcodec/vp8.c b/media/ffvpx/libavcodec/vp8.c +--- a/media/ffvpx/libavcodec/vp8.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp8.c 2023-04-06 12:50:24.493176583 +0200 +@@ -24,29 +24,59 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/imgutils.h" ++#include "config_components.h" ++ + #include "libavutil/mem_internal.h" + + #include "avcodec.h" ++#include "codec_internal.h" ++#include "decode.h" + #include "hwconfig.h" +-#include "internal.h" + #include "mathops.h" +-#include "rectangle.h" + #include "thread.h" ++#include "threadframe.h" + #include "vp8.h" ++#include "vp89_rac.h" + #include "vp8data.h" ++#include "vpx_rac.h" + + #if ARCH_ARM + # include "arm/vp8.h" + #endif + +-#if CONFIG_VP7_DECODER && CONFIG_VP8_DECODER +-#define VPX(vp7, f) (vp7 ? vp7_ ## f : vp8_ ## f) +-#elif CONFIG_VP7_DECODER +-#define VPX(vp7, f) vp7_ ## f +-#else // CONFIG_VP8_DECODER +-#define VPX(vp7, f) vp8_ ## f +-#endif ++// fixme: add 1 bit to all the calls to this? ++static int vp8_rac_get_sint(VPXRangeCoder *c, int bits) ++{ ++ int v; ++ ++ if (!vp89_rac_get(c)) ++ return 0; ++ ++ v = vp89_rac_get_uint(c, bits); ++ ++ if (vp89_rac_get(c)) ++ v = -v; ++ ++ return v; ++} ++ ++static int vp8_rac_get_nn(VPXRangeCoder *c) ++{ ++ int v = vp89_rac_get_uint(c, 7) << 1; ++ return v + !v; ++} ++ ++// DCTextra ++static int vp8_rac_get_coeff(VPXRangeCoder *c, const uint8_t *prob) ++{ ++ int v = 0; ++ ++ do { ++ v = (v<<1) + vpx_rac_get_prob(c, *prob++); ++ } while (*prob); ++ ++ return v; ++} + + static void free_buffers(VP8Context *s) + { +@@ -71,8 +101,8 @@ + static int vp8_alloc_frame(VP8Context *s, VP8Frame *f, int ref) + { + int ret; +- if ((ret = ff_thread_get_buffer(s->avctx, &f->tf, +- ref ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) ++ if ((ret = ff_thread_get_ext_buffer(s->avctx, &f->tf, ++ ref ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) + return ret; + if (!(f->seg_map = av_buffer_allocz(s->mb_width * s->mb_height))) + goto fail; +@@ -89,7 +119,7 @@ + + fail: + av_buffer_unref(&f->seg_map); +- ff_thread_release_buffer(s->avctx, &f->tf); ++ ff_thread_release_ext_buffer(s->avctx, &f->tf); + return AVERROR(ENOMEM); + } + +@@ -98,11 +128,11 @@ + av_buffer_unref(&f->seg_map); + av_buffer_unref(&f->hwaccel_priv_buf); + f->hwaccel_picture_private = NULL; +- ff_thread_release_buffer(s->avctx, &f->tf); ++ ff_thread_release_ext_buffer(s->avctx, &f->tf); + } + + #if CONFIG_VP8_DECODER +-static int vp8_ref_frame(VP8Context *s, VP8Frame *dst, VP8Frame *src) ++static int vp8_ref_frame(VP8Context *s, VP8Frame *dst, const VP8Frame *src) + { + int ret; + +@@ -151,10 +181,10 @@ + + // find a free buffer + for (i = 0; i < 5; i++) +- if (&s->frames[i] != s->framep[VP56_FRAME_CURRENT] && +- &s->frames[i] != s->framep[VP56_FRAME_PREVIOUS] && +- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN] && +- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN2]) { ++ if (&s->frames[i] != s->framep[VP8_FRAME_CURRENT] && ++ &s->frames[i] != s->framep[VP8_FRAME_PREVIOUS] && ++ &s->frames[i] != s->framep[VP8_FRAME_GOLDEN] && ++ &s->frames[i] != s->framep[VP8_FRAME_ALTREF]) { + frame = &s->frames[i]; + break; + } +@@ -262,14 +292,14 @@ + + static void parse_segment_info(VP8Context *s) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int i; + +- s->segmentation.update_map = vp8_rac_get(c); +- s->segmentation.update_feature_data = vp8_rac_get(c); ++ s->segmentation.update_map = vp89_rac_get(c); ++ s->segmentation.update_feature_data = vp89_rac_get(c); + + if (s->segmentation.update_feature_data) { +- s->segmentation.absolute_vals = vp8_rac_get(c); ++ s->segmentation.absolute_vals = vp89_rac_get(c); + + for (i = 0; i < 4; i++) + s->segmentation.base_quant[i] = vp8_rac_get_sint(c, 7); +@@ -279,28 +309,28 @@ + } + if (s->segmentation.update_map) + for (i = 0; i < 3; i++) +- s->prob->segmentid[i] = vp8_rac_get(c) ? vp8_rac_get_uint(c, 8) : 255; ++ s->prob->segmentid[i] = vp89_rac_get(c) ? vp89_rac_get_uint(c, 8) : 255; + } + + static void update_lf_deltas(VP8Context *s) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int i; + + for (i = 0; i < 4; i++) { +- if (vp8_rac_get(c)) { +- s->lf_delta.ref[i] = vp8_rac_get_uint(c, 6); ++ if (vp89_rac_get(c)) { ++ s->lf_delta.ref[i] = vp89_rac_get_uint(c, 6); + +- if (vp8_rac_get(c)) ++ if (vp89_rac_get(c)) + s->lf_delta.ref[i] = -s->lf_delta.ref[i]; + } + } + + for (i = MODE_I4x4; i <= VP8_MVMODE_SPLIT; i++) { +- if (vp8_rac_get(c)) { +- s->lf_delta.mode[i] = vp8_rac_get_uint(c, 6); ++ if (vp89_rac_get(c)) { ++ s->lf_delta.mode[i] = vp89_rac_get_uint(c, 6); + +- if (vp8_rac_get(c)) ++ if (vp89_rac_get(c)) + s->lf_delta.mode[i] = -s->lf_delta.mode[i]; + } + } +@@ -312,7 +342,7 @@ + int i; + int ret; + +- s->num_coeff_partitions = 1 << vp8_rac_get_uint(&s->c, 2); ++ s->num_coeff_partitions = 1 << vp89_rac_get_uint(&s->c, 2); + + buf += 3 * (s->num_coeff_partitions - 1); + buf_size -= 3 * (s->num_coeff_partitions - 1); +@@ -325,7 +355,7 @@ + return -1; + s->coeff_partition_size[i] = size; + +- ret = ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, size); ++ ret = ff_vpx_init_range_decoder(&s->coeff_partition[i], buf, size); + if (ret < 0) + return ret; + buf += size; +@@ -333,21 +363,21 @@ + } + + s->coeff_partition_size[i] = buf_size; +- ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, buf_size); ++ ff_vpx_init_range_decoder(&s->coeff_partition[i], buf, buf_size); + + return 0; + } + + static void vp7_get_quants(VP8Context *s) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + +- int yac_qi = vp8_rac_get_uint(c, 7); +- int ydc_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; +- int y2dc_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; +- int y2ac_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; +- int uvdc_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; +- int uvac_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; ++ int yac_qi = vp89_rac_get_uint(c, 7); ++ int ydc_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; ++ int y2dc_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; ++ int y2ac_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; ++ int uvdc_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; ++ int uvac_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; + + s->qmat[0].luma_qmul[0] = vp7_ydc_qlookup[ydc_qi]; + s->qmat[0].luma_qmul[1] = vp7_yac_qlookup[yac_qi]; +@@ -359,10 +389,10 @@ + + static void vp8_get_quants(VP8Context *s) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int i, base_qi; + +- s->quant.yac_qi = vp8_rac_get_uint(c, 7); ++ s->quant.yac_qi = vp89_rac_get_uint(c, 7); + s->quant.ydc_delta = vp8_rac_get_sint(c, 4); + s->quant.y2dc_delta = vp8_rac_get_sint(c, 4); + s->quant.y2ac_delta = vp8_rac_get_sint(c, 4); +@@ -395,28 +425,28 @@ + * The spec isn't clear here, so I'm going by my understanding of what libvpx does + * + * Intra frames update all 3 references +- * Inter frames update VP56_FRAME_PREVIOUS if the update_last flag is set ++ * Inter frames update VP8_FRAME_PREVIOUS if the update_last flag is set + * If the update (golden|altref) flag is set, it's updated with the current frame +- * if update_last is set, and VP56_FRAME_PREVIOUS otherwise. ++ * if update_last is set, and VP8_FRAME_PREVIOUS otherwise. + * If the flag is not set, the number read means: + * 0: no update +- * 1: VP56_FRAME_PREVIOUS ++ * 1: VP8_FRAME_PREVIOUS + * 2: update golden with altref, or update altref with golden + */ +-static VP56Frame ref_to_update(VP8Context *s, int update, VP56Frame ref) ++static VP8FrameType ref_to_update(VP8Context *s, int update, VP8FrameType ref) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + + if (update) +- return VP56_FRAME_CURRENT; ++ return VP8_FRAME_CURRENT; + +- switch (vp8_rac_get_uint(c, 2)) { ++ switch (vp89_rac_get_uint(c, 2)) { + case 1: +- return VP56_FRAME_PREVIOUS; ++ return VP8_FRAME_PREVIOUS; + case 2: +- return (ref == VP56_FRAME_GOLDEN) ? VP56_FRAME_GOLDEN2 : VP56_FRAME_GOLDEN; ++ return (ref == VP8_FRAME_GOLDEN) ? VP8_FRAME_ALTREF : VP8_FRAME_GOLDEN; + } +- return VP56_FRAME_NONE; ++ return VP8_FRAME_NONE; + } + + static void vp78_reset_probability_tables(VP8Context *s) +@@ -430,15 +460,15 @@ + + static void vp78_update_probability_tables(VP8Context *s) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int i, j, k, l, m; + + for (i = 0; i < 4; i++) + for (j = 0; j < 8; j++) + for (k = 0; k < 3; k++) + for (l = 0; l < NUM_DCT_TOKENS-1; l++) +- if (vp56_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l])) { +- int prob = vp8_rac_get_uint(c, 8); ++ if (vpx_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l])) { ++ int prob = vp89_rac_get_uint(c, 8); + for (m = 0; vp8_coeff_band_indexes[j][m] >= 0; m++) + s->prob->token[i][vp8_coeff_band_indexes[j][m]][k][l] = prob; + } +@@ -450,35 +480,35 @@ + static void vp78_update_pred16x16_pred8x8_mvc_probabilities(VP8Context *s, + int mvc_size) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int i, j; + +- if (vp8_rac_get(c)) ++ if (vp89_rac_get(c)) + for (i = 0; i < 4; i++) +- s->prob->pred16x16[i] = vp8_rac_get_uint(c, 8); +- if (vp8_rac_get(c)) ++ s->prob->pred16x16[i] = vp89_rac_get_uint(c, 8); ++ if (vp89_rac_get(c)) + for (i = 0; i < 3; i++) +- s->prob->pred8x8c[i] = vp8_rac_get_uint(c, 8); ++ s->prob->pred8x8c[i] = vp89_rac_get_uint(c, 8); + + // 17.2 MV probability update + for (i = 0; i < 2; i++) + for (j = 0; j < mvc_size; j++) +- if (vp56_rac_get_prob_branchy(c, vp8_mv_update_prob[i][j])) ++ if (vpx_rac_get_prob_branchy(c, vp8_mv_update_prob[i][j])) + s->prob->mvc[i][j] = vp8_rac_get_nn(c); + } + + static void update_refs(VP8Context *s) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + +- int update_golden = vp8_rac_get(c); +- int update_altref = vp8_rac_get(c); ++ int update_golden = vp89_rac_get(c); ++ int update_altref = vp89_rac_get(c); + +- s->update_golden = ref_to_update(s, update_golden, VP56_FRAME_GOLDEN); +- s->update_altref = ref_to_update(s, update_altref, VP56_FRAME_GOLDEN2); ++ s->update_golden = ref_to_update(s, update_golden, VP8_FRAME_GOLDEN); ++ s->update_altref = ref_to_update(s, update_altref, VP8_FRAME_ALTREF); + } + +-static void copy_chroma(AVFrame *dst, AVFrame *src, int width, int height) ++static void copy_chroma(AVFrame *dst, const AVFrame *src, int width, int height) + { + int i, j; + +@@ -512,24 +542,25 @@ + if (!s->keyframe && (alpha || beta)) { + int width = s->mb_width * 16; + int height = s->mb_height * 16; +- AVFrame *src, *dst; ++ const AVFrame *src; ++ AVFrame *dst; + +- if (!s->framep[VP56_FRAME_PREVIOUS] || +- !s->framep[VP56_FRAME_GOLDEN]) { ++ if (!s->framep[VP8_FRAME_PREVIOUS] || ++ !s->framep[VP8_FRAME_GOLDEN]) { + av_log(s->avctx, AV_LOG_WARNING, "Discarding interframe without a prior keyframe!\n"); + return AVERROR_INVALIDDATA; + } + +- dst = +- src = s->framep[VP56_FRAME_PREVIOUS]->tf.f; ++ src = ++ dst = s->framep[VP8_FRAME_PREVIOUS]->tf.f; + + /* preserve the golden frame, write a new previous frame */ +- if (s->framep[VP56_FRAME_GOLDEN] == s->framep[VP56_FRAME_PREVIOUS]) { +- s->framep[VP56_FRAME_PREVIOUS] = vp8_find_free_buffer(s); +- if ((ret = vp8_alloc_frame(s, s->framep[VP56_FRAME_PREVIOUS], 1)) < 0) ++ if (s->framep[VP8_FRAME_GOLDEN] == s->framep[VP8_FRAME_PREVIOUS]) { ++ s->framep[VP8_FRAME_PREVIOUS] = vp8_find_free_buffer(s); ++ if ((ret = vp8_alloc_frame(s, s->framep[VP8_FRAME_PREVIOUS], 1)) < 0) + return ret; + +- dst = s->framep[VP56_FRAME_PREVIOUS]->tf.f; ++ dst = s->framep[VP8_FRAME_PREVIOUS]->tf.f; + + copy_chroma(dst, src, width, height); + } +@@ -544,12 +575,13 @@ + + static int vp7_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_size) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int part1_size, hscale, vscale, i, j, ret; + int width = s->avctx->width; + int height = s->avctx->height; + int alpha = 0; + int beta = 0; ++ int fade_present = 1; + + if (buf_size < 4) { + return AVERROR_INVALIDDATA; +@@ -575,7 +607,7 @@ + + memcpy(s->put_pixels_tab, s->vp8dsp.put_vp8_epel_pixels_tab, sizeof(s->put_pixels_tab)); + +- ret = ff_vp56_init_range_decoder(c, buf, part1_size); ++ ret = ff_vpx_init_range_decoder(c, buf, part1_size); + if (ret < 0) + return ret; + buf += part1_size; +@@ -583,14 +615,14 @@ + + /* A. Dimension information (keyframes only) */ + if (s->keyframe) { +- width = vp8_rac_get_uint(c, 12); +- height = vp8_rac_get_uint(c, 12); +- hscale = vp8_rac_get_uint(c, 2); +- vscale = vp8_rac_get_uint(c, 2); ++ width = vp89_rac_get_uint(c, 12); ++ height = vp89_rac_get_uint(c, 12); ++ hscale = vp89_rac_get_uint(c, 2); ++ vscale = vp89_rac_get_uint(c, 2); + if (hscale || vscale) + avpriv_request_sample(s->avctx, "Upscaling"); + +- s->update_golden = s->update_altref = VP56_FRAME_CURRENT; ++ s->update_golden = s->update_altref = VP8_FRAME_CURRENT; + vp78_reset_probability_tables(s); + memcpy(s->prob->pred16x16, vp8_pred16x16_prob_inter, + sizeof(s->prob->pred16x16)); +@@ -609,18 +641,18 @@ + + /* B. Decoding information for all four macroblock-level features */ + for (i = 0; i < 4; i++) { +- s->feature_enabled[i] = vp8_rac_get(c); ++ s->feature_enabled[i] = vp89_rac_get(c); + if (s->feature_enabled[i]) { +- s->feature_present_prob[i] = vp8_rac_get_uint(c, 8); ++ s->feature_present_prob[i] = vp89_rac_get_uint(c, 8); + + for (j = 0; j < 3; j++) + s->feature_index_prob[i][j] = +- vp8_rac_get(c) ? vp8_rac_get_uint(c, 8) : 255; ++ vp89_rac_get(c) ? vp89_rac_get_uint(c, 8) : 255; + + if (vp7_feature_value_size[s->profile][i]) + for (j = 0; j < 4; j++) + s->feature_value[i][j] = +- vp8_rac_get(c) ? vp8_rac_get_uint(c, vp7_feature_value_size[s->profile][i]) : 0; ++ vp89_rac_get(c) ? vp89_rac_get_uint(c, vp7_feature_value_size[s->profile][i]) : 0; + } + } + +@@ -629,7 +661,7 @@ + s->lf_delta.enabled = 0; + + s->num_coeff_partitions = 1; +- ret = ff_vp56_init_range_decoder(&s->coeff_partition[0], buf, buf_size); ++ ret = ff_vpx_init_range_decoder(&s->coeff_partition[0], buf, buf_size); + if (ret < 0) + return ret; + +@@ -645,45 +677,44 @@ + + /* D. Golden frame update flag (a Flag) for interframes only */ + if (!s->keyframe) { +- s->update_golden = vp8_rac_get(c) ? VP56_FRAME_CURRENT : VP56_FRAME_NONE; +- s->sign_bias[VP56_FRAME_GOLDEN] = 0; ++ s->update_golden = vp89_rac_get(c) ? VP8_FRAME_CURRENT : VP8_FRAME_NONE; ++ s->sign_bias[VP8_FRAME_GOLDEN] = 0; + } + + s->update_last = 1; + s->update_probabilities = 1; +- s->fade_present = 1; + + if (s->profile > 0) { +- s->update_probabilities = vp8_rac_get(c); ++ s->update_probabilities = vp89_rac_get(c); + if (!s->update_probabilities) + s->prob[1] = s->prob[0]; + + if (!s->keyframe) +- s->fade_present = vp8_rac_get(c); ++ fade_present = vp89_rac_get(c); + } + +- if (vpX_rac_is_end(c)) ++ if (vpx_rac_is_end(c)) + return AVERROR_INVALIDDATA; + /* E. Fading information for previous frame */ +- if (s->fade_present && vp8_rac_get(c)) { +- alpha = (int8_t) vp8_rac_get_uint(c, 8); +- beta = (int8_t) vp8_rac_get_uint(c, 8); ++ if (fade_present && vp89_rac_get(c)) { ++ alpha = (int8_t) vp89_rac_get_uint(c, 8); ++ beta = (int8_t) vp89_rac_get_uint(c, 8); + } + + /* F. Loop filter type */ + if (!s->profile) +- s->filter.simple = vp8_rac_get(c); ++ s->filter.simple = vp89_rac_get(c); + + /* G. DCT coefficient ordering specification */ +- if (vp8_rac_get(c)) ++ if (vp89_rac_get(c)) + for (i = 1; i < 16; i++) +- s->prob[0].scan[i] = ff_zigzag_scan[vp8_rac_get_uint(c, 4)]; ++ s->prob[0].scan[i] = ff_zigzag_scan[vp89_rac_get_uint(c, 4)]; + + /* H. Loop filter levels */ + if (s->profile > 0) +- s->filter.simple = vp8_rac_get(c); +- s->filter.level = vp8_rac_get_uint(c, 6); +- s->filter.sharpness = vp8_rac_get_uint(c, 3); ++ s->filter.simple = vp89_rac_get(c); ++ s->filter.level = vp89_rac_get_uint(c, 6); ++ s->filter.sharpness = vp89_rac_get_uint(c, 3); + + /* I. DCT coefficient probability update; 13.3 Token Probability Updates */ + vp78_update_probability_tables(s); +@@ -692,12 +723,12 @@ + + /* J. The remaining frame header data occurs ONLY FOR INTERFRAMES */ + if (!s->keyframe) { +- s->prob->intra = vp8_rac_get_uint(c, 8); +- s->prob->last = vp8_rac_get_uint(c, 8); ++ s->prob->intra = vp89_rac_get_uint(c, 8); ++ s->prob->last = vp89_rac_get_uint(c, 8); + vp78_update_pred16x16_pred8x8_mvc_probabilities(s, VP7_MVC_SIZE); + } + +- if (vpX_rac_is_end(c)) ++ if (vpx_rac_is_end(c)) + return AVERROR_INVALIDDATA; + + if ((ret = vp7_fade_frame(s, alpha, beta)) < 0) +@@ -708,7 +739,7 @@ + + static int vp8_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_size) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int header_size, hscale, vscale, ret; + int width = s->avctx->width; + int height = s->avctx->height; +@@ -758,7 +789,7 @@ + if (hscale || vscale) + avpriv_request_sample(s->avctx, "Upscaling"); + +- s->update_golden = s->update_altref = VP56_FRAME_CURRENT; ++ s->update_golden = s->update_altref = VP8_FRAME_CURRENT; + vp78_reset_probability_tables(s); + memcpy(s->prob->pred16x16, vp8_pred16x16_prob_inter, + sizeof(s->prob->pred16x16)); +@@ -770,30 +801,30 @@ + memset(&s->lf_delta, 0, sizeof(s->lf_delta)); + } + +- ret = ff_vp56_init_range_decoder(c, buf, header_size); ++ ret = ff_vpx_init_range_decoder(c, buf, header_size); + if (ret < 0) + return ret; + buf += header_size; + buf_size -= header_size; + + if (s->keyframe) { +- s->colorspace = vp8_rac_get(c); ++ s->colorspace = vp89_rac_get(c); + if (s->colorspace) + av_log(s->avctx, AV_LOG_WARNING, "Unspecified colorspace\n"); +- s->fullrange = vp8_rac_get(c); ++ s->fullrange = vp89_rac_get(c); + } + +- if ((s->segmentation.enabled = vp8_rac_get(c))) ++ if ((s->segmentation.enabled = vp89_rac_get(c))) + parse_segment_info(s); + else + s->segmentation.update_map = 0; // FIXME: move this to some init function? + +- s->filter.simple = vp8_rac_get(c); +- s->filter.level = vp8_rac_get_uint(c, 6); +- s->filter.sharpness = vp8_rac_get_uint(c, 3); ++ s->filter.simple = vp89_rac_get(c); ++ s->filter.level = vp89_rac_get_uint(c, 6); ++ s->filter.sharpness = vp89_rac_get_uint(c, 3); + +- if ((s->lf_delta.enabled = vp8_rac_get(c))) { +- s->lf_delta.update = vp8_rac_get(c); ++ if ((s->lf_delta.enabled = vp89_rac_get(c))) { ++ s->lf_delta.update = vp89_rac_get(c); + if (s->lf_delta.update) + update_lf_deltas(s); + } +@@ -813,31 +844,31 @@ + + if (!s->keyframe) { + update_refs(s); +- s->sign_bias[VP56_FRAME_GOLDEN] = vp8_rac_get(c); +- s->sign_bias[VP56_FRAME_GOLDEN2 /* altref */] = vp8_rac_get(c); ++ s->sign_bias[VP8_FRAME_GOLDEN] = vp89_rac_get(c); ++ s->sign_bias[VP8_FRAME_ALTREF] = vp89_rac_get(c); + } + + // if we aren't saving this frame's probabilities for future frames, + // make a copy of the current probabilities +- if (!(s->update_probabilities = vp8_rac_get(c))) ++ if (!(s->update_probabilities = vp89_rac_get(c))) + s->prob[1] = s->prob[0]; + +- s->update_last = s->keyframe || vp8_rac_get(c); ++ s->update_last = s->keyframe || vp89_rac_get(c); + + vp78_update_probability_tables(s); + +- if ((s->mbskip_enabled = vp8_rac_get(c))) +- s->prob->mbskip = vp8_rac_get_uint(c, 8); ++ if ((s->mbskip_enabled = vp89_rac_get(c))) ++ s->prob->mbskip = vp89_rac_get_uint(c, 8); + + if (!s->keyframe) { +- s->prob->intra = vp8_rac_get_uint(c, 8); +- s->prob->last = vp8_rac_get_uint(c, 8); +- s->prob->golden = vp8_rac_get_uint(c, 8); ++ s->prob->intra = vp89_rac_get_uint(c, 8); ++ s->prob->last = vp89_rac_get_uint(c, 8); ++ s->prob->golden = vp89_rac_get_uint(c, 8); + vp78_update_pred16x16_pred8x8_mvc_probabilities(s, VP8_MVC_SIZE); + } + + // Record the entropy coder state here so that hwaccels can use it. +- s->c.code_word = vp56_rac_renorm(&s->c); ++ s->c.code_word = vpx_rac_renorm(&s->c); + s->coder_state_at_header_end.input = s->c.buffer - (-s->c.bits / 8); + s->coder_state_at_header_end.range = s->c.high; + s->coder_state_at_header_end.value = s->c.code_word >> 16; +@@ -847,7 +878,7 @@ + } + + static av_always_inline +-void clamp_mv(VP8mvbounds *s, VP56mv *dst, const VP56mv *src) ++void clamp_mv(const VP8mvbounds *s, VP8mv *dst, const VP8mv *src) + { + dst->x = av_clip(src->x, av_clip(s->mv_min.x, INT16_MIN, INT16_MAX), + av_clip(s->mv_max.x, INT16_MIN, INT16_MAX)); +@@ -858,40 +889,40 @@ + /** + * Motion vector coding, 17.1. + */ +-static av_always_inline int read_mv_component(VP56RangeCoder *c, const uint8_t *p, int vp7) ++static av_always_inline int read_mv_component(VPXRangeCoder *c, const uint8_t *p, int vp7) + { + int bit, x = 0; + +- if (vp56_rac_get_prob_branchy(c, p[0])) { ++ if (vpx_rac_get_prob_branchy(c, p[0])) { + int i; + + for (i = 0; i < 3; i++) +- x += vp56_rac_get_prob(c, p[9 + i]) << i; ++ x += vpx_rac_get_prob(c, p[9 + i]) << i; + for (i = (vp7 ? 7 : 9); i > 3; i--) +- x += vp56_rac_get_prob(c, p[9 + i]) << i; +- if (!(x & (vp7 ? 0xF0 : 0xFFF0)) || vp56_rac_get_prob(c, p[12])) ++ x += vpx_rac_get_prob(c, p[9 + i]) << i; ++ if (!(x & (vp7 ? 0xF0 : 0xFFF0)) || vpx_rac_get_prob(c, p[12])) + x += 8; + } else { + // small_mvtree + const uint8_t *ps = p + 2; +- bit = vp56_rac_get_prob(c, *ps); ++ bit = vpx_rac_get_prob(c, *ps); + ps += 1 + 3 * bit; + x += 4 * bit; +- bit = vp56_rac_get_prob(c, *ps); ++ bit = vpx_rac_get_prob(c, *ps); + ps += 1 + bit; + x += 2 * bit; +- x += vp56_rac_get_prob(c, *ps); ++ x += vpx_rac_get_prob(c, *ps); + } + +- return (x && vp56_rac_get_prob(c, p[1])) ? -x : x; ++ return (x && vpx_rac_get_prob(c, p[1])) ? -x : x; + } + +-static int vp7_read_mv_component(VP56RangeCoder *c, const uint8_t *p) ++static int vp7_read_mv_component(VPXRangeCoder *c, const uint8_t *p) + { + return read_mv_component(c, p, 1); + } + +-static int vp8_read_mv_component(VP56RangeCoder *c, const uint8_t *p) ++static int vp8_read_mv_component(VPXRangeCoder *c, const uint8_t *p) + { + return read_mv_component(c, p, 0); + } +@@ -914,18 +945,18 @@ + * @returns the number of motion vectors parsed (2, 4 or 16) + */ + static av_always_inline +-int decode_splitmvs(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb, ++int decode_splitmvs(const VP8Context *s, VPXRangeCoder *c, VP8Macroblock *mb, + int layout, int is_vp7) + { + int part_idx; + int n, num; +- VP8Macroblock *top_mb; +- VP8Macroblock *left_mb = &mb[-1]; ++ const VP8Macroblock *top_mb; ++ const VP8Macroblock *left_mb = &mb[-1]; + const uint8_t *mbsplits_left = vp8_mbsplits[left_mb->partitioning]; + const uint8_t *mbsplits_top, *mbsplits_cur, *firstidx; +- VP56mv *top_mv; +- VP56mv *left_mv = left_mb->bmv; +- VP56mv *cur_mv = mb->bmv; ++ const VP8mv *top_mv; ++ const VP8mv *left_mv = left_mb->bmv; ++ const VP8mv *cur_mv = mb->bmv; + + if (!layout) // layout is inlined, s->mb_layout is not + top_mb = &mb[2]; +@@ -934,9 +965,9 @@ + mbsplits_top = vp8_mbsplits[top_mb->partitioning]; + top_mv = top_mb->bmv; + +- if (vp56_rac_get_prob_branchy(c, vp8_mbsplit_prob[0])) { +- if (vp56_rac_get_prob_branchy(c, vp8_mbsplit_prob[1])) +- part_idx = VP8_SPLITMVMODE_16x8 + vp56_rac_get_prob(c, vp8_mbsplit_prob[2]); ++ if (vpx_rac_get_prob_branchy(c, vp8_mbsplit_prob[0])) { ++ if (vpx_rac_get_prob_branchy(c, vp8_mbsplit_prob[1])) ++ part_idx = VP8_SPLITMVMODE_16x8 + vpx_rac_get_prob(c, vp8_mbsplit_prob[2]); + else + part_idx = VP8_SPLITMVMODE_8x8; + } else { +@@ -964,9 +995,9 @@ + + submv_prob = get_submv_prob(left, above, is_vp7); + +- if (vp56_rac_get_prob_branchy(c, submv_prob[0])) { +- if (vp56_rac_get_prob_branchy(c, submv_prob[1])) { +- if (vp56_rac_get_prob_branchy(c, submv_prob[2])) { ++ if (vpx_rac_get_prob_branchy(c, submv_prob[0])) { ++ if (vpx_rac_get_prob_branchy(c, submv_prob[1])) { ++ if (vpx_rac_get_prob_branchy(c, submv_prob[2])) { + mb->bmv[n].y = mb->mv.y + + read_mv_component(c, s->prob->mvc[0], is_vp7); + mb->bmv[n].x = mb->mv.x + +@@ -1009,7 +1040,7 @@ + return 1; + } + +-static const VP56mv *get_bmv_ptr(const VP8Macroblock *mb, int subblock) ++static const VP8mv *get_bmv_ptr(const VP8Macroblock *mb, int subblock) + { + return &mb->bmv[mb->mode == VP8_MVMODE_SPLIT ? vp8_mbsplits[mb->partitioning][subblock] : 0]; + } +@@ -1018,13 +1049,12 @@ + void vp7_decode_mvs(VP8Context *s, VP8Macroblock *mb, + int mb_x, int mb_y, int layout) + { +- VP8Macroblock *mb_edge[12]; + enum { CNT_ZERO, CNT_NEAREST, CNT_NEAR }; + enum { VP8_EDGE_TOP, VP8_EDGE_LEFT, VP8_EDGE_TOPLEFT }; + int idx = CNT_ZERO; +- VP56mv near_mv[3]; ++ VP8mv near_mv[3]; + uint8_t cnt[3] = { 0 }; +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + int i; + + AV_ZERO32(&near_mv[0]); +@@ -1037,11 +1067,11 @@ + + if (vp7_calculate_mb_offset(mb_x, mb_y, s->mb_width, pred->xoffset, + pred->yoffset, !s->profile, &edge_x, &edge_y)) { +- VP8Macroblock *edge = mb_edge[i] = (s->mb_layout == 1) +- ? s->macroblocks_base + 1 + edge_x + +- (s->mb_width + 1) * (edge_y + 1) +- : s->macroblocks + edge_x + +- (s->mb_height - edge_y - 1) * 2; ++ const VP8Macroblock *edge = (s->mb_layout == 1) ++ ? s->macroblocks_base + 1 + edge_x + ++ (s->mb_width + 1) * (edge_y + 1) ++ : s->macroblocks + edge_x + ++ (s->mb_height - edge_y - 1) * 2; + uint32_t mv = AV_RN32A(get_bmv_ptr(edge, vp7_mv_pred[i].subblock)); + if (mv) { + if (AV_RN32A(&near_mv[CNT_NEAREST])) { +@@ -1070,19 +1100,19 @@ + + mb->partitioning = VP8_SPLITMVMODE_NONE; + +- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_ZERO]][0])) { ++ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_ZERO]][0])) { + mb->mode = VP8_MVMODE_MV; + +- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAREST]][1])) { ++ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAREST]][1])) { + +- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][2])) { ++ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][2])) { + + if (cnt[CNT_NEAREST] > cnt[CNT_NEAR]) + AV_WN32A(&mb->mv, cnt[CNT_ZERO] > cnt[CNT_NEAREST] ? 0 : AV_RN32A(&near_mv[CNT_NEAREST])); + else + AV_WN32A(&mb->mv, cnt[CNT_ZERO] > cnt[CNT_NEAR] ? 0 : AV_RN32A(&near_mv[CNT_NEAR])); + +- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][3])) { ++ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][3])) { + mb->mode = VP8_MVMODE_SPLIT; + mb->mv = mb->bmv[decode_splitmvs(s, c, mb, layout, IS_VP7) - 1]; + } else { +@@ -1106,7 +1136,7 @@ + } + + static av_always_inline +-void vp8_decode_mvs(VP8Context *s, VP8mvbounds *mv_bounds, VP8Macroblock *mb, ++void vp8_decode_mvs(VP8Context *s, const VP8mvbounds *mv_bounds, VP8Macroblock *mb, + int mb_x, int mb_y, int layout) + { + VP8Macroblock *mb_edge[3] = { 0 /* top */, +@@ -1116,10 +1146,10 @@ + enum { VP8_EDGE_TOP, VP8_EDGE_LEFT, VP8_EDGE_TOPLEFT }; + int idx = CNT_ZERO; + int cur_sign_bias = s->sign_bias[mb->ref_frame]; +- int8_t *sign_bias = s->sign_bias; +- VP56mv near_mv[4]; ++ const int8_t *sign_bias = s->sign_bias; ++ VP8mv near_mv[4]; + uint8_t cnt[4] = { 0 }; +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + + if (!layout) { // layout is inlined (s->mb_layout is not) + mb_edge[0] = mb + 2; +@@ -1136,9 +1166,9 @@ + /* Process MB on top, left and top-left */ + #define MV_EDGE_CHECK(n) \ + { \ +- VP8Macroblock *edge = mb_edge[n]; \ ++ const VP8Macroblock *edge = mb_edge[n]; \ + int edge_ref = edge->ref_frame; \ +- if (edge_ref != VP56_FRAME_CURRENT) { \ ++ if (edge_ref != VP8_FRAME_CURRENT) { \ + uint32_t mv = AV_RN32A(&edge->mv); \ + if (mv) { \ + if (cur_sign_bias != sign_bias[edge_ref]) { \ +@@ -1160,7 +1190,7 @@ + MV_EDGE_CHECK(2) + + mb->partitioning = VP8_SPLITMVMODE_NONE; +- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_ZERO]][0])) { ++ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_ZERO]][0])) { + mb->mode = VP8_MVMODE_MV; + + /* If we have three distinct MVs, merge first and last if they're the same */ +@@ -1171,18 +1201,18 @@ + /* Swap near and nearest if necessary */ + if (cnt[CNT_NEAR] > cnt[CNT_NEAREST]) { + FFSWAP(uint8_t, cnt[CNT_NEAREST], cnt[CNT_NEAR]); +- FFSWAP( VP56mv, near_mv[CNT_NEAREST], near_mv[CNT_NEAR]); ++ FFSWAP(VP8mv, near_mv[CNT_NEAREST], near_mv[CNT_NEAR]); + } + +- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAREST]][1])) { +- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAR]][2])) { ++ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAREST]][1])) { ++ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAR]][2])) { + /* Choose the best mv out of 0,0 and the nearest mv */ + clamp_mv(mv_bounds, &mb->mv, &near_mv[CNT_ZERO + (cnt[CNT_NEAREST] >= cnt[CNT_ZERO])]); + cnt[CNT_SPLITMV] = ((mb_edge[VP8_EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + + (mb_edge[VP8_EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + + (mb_edge[VP8_EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); + +- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_SPLITMV]][3])) { ++ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_SPLITMV]][3])) { + mb->mode = VP8_MVMODE_SPLIT; + mb->mv = mb->bmv[decode_splitmvs(s, c, mb, layout, IS_VP8) - 1]; + } else { +@@ -1206,7 +1236,7 @@ + } + + static av_always_inline +-void decode_intra4x4_modes(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb, ++void decode_intra4x4_modes(VP8Context *s, VPXRangeCoder *c, VP8Macroblock *mb, + int mb_x, int keyframe, int layout) + { + uint8_t *intra4x4 = mb->intra4x4_pred_mode_mb; +@@ -1227,7 +1257,7 @@ + for (x = 0; x < 4; x++) { + const uint8_t *ctx; + ctx = vp8_pred4x4_prob_intra[top[x]][left[y]]; +- *intra4x4 = vp8_rac_get_tree(c, vp8_pred4x4_tree, ctx); ++ *intra4x4 = vp89_rac_get_tree(c, vp8_pred4x4_tree, ctx); + left[y] = top[x] = *intra4x4; + intra4x4++; + } +@@ -1235,17 +1265,17 @@ + } else { + int i; + for (i = 0; i < 16; i++) +- intra4x4[i] = vp8_rac_get_tree(c, vp8_pred4x4_tree, +- vp8_pred4x4_prob_inter); ++ intra4x4[i] = vp89_rac_get_tree(c, vp8_pred4x4_tree, ++ vp8_pred4x4_prob_inter); + } + } + + static av_always_inline +-void decode_mb_mode(VP8Context *s, VP8mvbounds *mv_bounds, ++void decode_mb_mode(VP8Context *s, const VP8mvbounds *mv_bounds, + VP8Macroblock *mb, int mb_x, int mb_y, +- uint8_t *segment, uint8_t *ref, int layout, int is_vp7) ++ uint8_t *segment, const uint8_t *ref, int layout, int is_vp7) + { +- VP56RangeCoder *c = &s->c; ++ VPXRangeCoder *c = &s->c; + static const char * const vp7_feature_name[] = { "q-index", + "lf-delta", + "partial-golden-update", +@@ -1255,9 +1285,9 @@ + *segment = 0; + for (i = 0; i < 4; i++) { + if (s->feature_enabled[i]) { +- if (vp56_rac_get_prob_branchy(c, s->feature_present_prob[i])) { +- int index = vp8_rac_get_tree(c, vp7_feature_index_tree, +- s->feature_index_prob[i]); ++ if (vpx_rac_get_prob_branchy(c, s->feature_present_prob[i])) { ++ int index = vp89_rac_get_tree(c, vp7_feature_index_tree, ++ s->feature_index_prob[i]); + av_log(s->avctx, AV_LOG_WARNING, + "Feature %s present in macroblock (value 0x%x)\n", + vp7_feature_name[i], s->feature_value[i][index]); +@@ -1265,17 +1295,17 @@ + } + } + } else if (s->segmentation.update_map) { +- int bit = vp56_rac_get_prob(c, s->prob->segmentid[0]); +- *segment = vp56_rac_get_prob(c, s->prob->segmentid[1+bit]) + 2*bit; ++ int bit = vpx_rac_get_prob(c, s->prob->segmentid[0]); ++ *segment = vpx_rac_get_prob(c, s->prob->segmentid[1+bit]) + 2*bit; + } else if (s->segmentation.enabled) + *segment = ref ? *ref : *segment; + mb->segment = *segment; + +- mb->skip = s->mbskip_enabled ? vp56_rac_get_prob(c, s->prob->mbskip) : 0; ++ mb->skip = s->mbskip_enabled ? vpx_rac_get_prob(c, s->prob->mbskip) : 0; + + if (s->keyframe) { +- mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_intra, +- vp8_pred16x16_prob_intra); ++ mb->mode = vp89_rac_get_tree(c, vp8_pred16x16_tree_intra, ++ vp8_pred16x16_prob_intra); + + if (mb->mode == MODE_I4x4) { + decode_intra4x4_modes(s, c, mb, mb_x, 1, layout); +@@ -1289,17 +1319,17 @@ + AV_WN32A(s->intra4x4_pred_mode_left, modes); + } + +- mb->chroma_pred_mode = vp8_rac_get_tree(c, vp8_pred8x8c_tree, +- vp8_pred8x8c_prob_intra); +- mb->ref_frame = VP56_FRAME_CURRENT; +- } else if (vp56_rac_get_prob_branchy(c, s->prob->intra)) { ++ mb->chroma_pred_mode = vp89_rac_get_tree(c, vp8_pred8x8c_tree, ++ vp8_pred8x8c_prob_intra); ++ mb->ref_frame = VP8_FRAME_CURRENT; ++ } else if (vpx_rac_get_prob_branchy(c, s->prob->intra)) { + // inter MB, 16.2 +- if (vp56_rac_get_prob_branchy(c, s->prob->last)) ++ if (vpx_rac_get_prob_branchy(c, s->prob->last)) + mb->ref_frame = +- (!is_vp7 && vp56_rac_get_prob(c, s->prob->golden)) ? VP56_FRAME_GOLDEN2 /* altref */ +- : VP56_FRAME_GOLDEN; ++ (!is_vp7 && vpx_rac_get_prob(c, s->prob->golden)) ? VP8_FRAME_ALTREF ++ : VP8_FRAME_GOLDEN; + else +- mb->ref_frame = VP56_FRAME_PREVIOUS; ++ mb->ref_frame = VP8_FRAME_PREVIOUS; + s->ref_count[mb->ref_frame - 1]++; + + // motion vectors, 16.3 +@@ -1309,14 +1339,15 @@ + vp8_decode_mvs(s, mv_bounds, mb, mb_x, mb_y, layout); + } else { + // intra MB, 16.1 +- mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_inter, s->prob->pred16x16); ++ mb->mode = vp89_rac_get_tree(c, vp8_pred16x16_tree_inter, ++ s->prob->pred16x16); + + if (mb->mode == MODE_I4x4) + decode_intra4x4_modes(s, c, mb, mb_x, 0, layout); + +- mb->chroma_pred_mode = vp8_rac_get_tree(c, vp8_pred8x8c_tree, +- s->prob->pred8x8c); +- mb->ref_frame = VP56_FRAME_CURRENT; ++ mb->chroma_pred_mode = vp89_rac_get_tree(c, vp8_pred8x8c_tree, ++ s->prob->pred8x8c); ++ mb->ref_frame = VP8_FRAME_CURRENT; + mb->partitioning = VP8_SPLITMVMODE_NONE; + AV_ZERO32(&mb->bmv[0]); + } +@@ -1333,21 +1364,21 @@ + * otherwise, the index of the last coeff decoded plus one + */ + static av_always_inline +-int decode_block_coeffs_internal(VP56RangeCoder *r, int16_t block[16], ++int decode_block_coeffs_internal(VPXRangeCoder *r, int16_t block[16], + uint8_t probs[16][3][NUM_DCT_TOKENS - 1], +- int i, uint8_t *token_prob, int16_t qmul[2], ++ int i, const uint8_t *token_prob, const int16_t qmul[2], + const uint8_t scan[16], int vp7) + { +- VP56RangeCoder c = *r; ++ VPXRangeCoder c = *r; + goto skip_eob; + do { + int coeff; + restart: +- if (!vp56_rac_get_prob_branchy(&c, token_prob[0])) // DCT_EOB ++ if (!vpx_rac_get_prob_branchy(&c, token_prob[0])) // DCT_EOB + break; + + skip_eob: +- if (!vp56_rac_get_prob_branchy(&c, token_prob[1])) { // DCT_0 ++ if (!vpx_rac_get_prob_branchy(&c, token_prob[1])) { // DCT_0 + if (++i == 16) + break; // invalid input; blocks should end with EOB + token_prob = probs[i][0]; +@@ -1356,28 +1387,28 @@ + goto skip_eob; + } + +- if (!vp56_rac_get_prob_branchy(&c, token_prob[2])) { // DCT_1 ++ if (!vpx_rac_get_prob_branchy(&c, token_prob[2])) { // DCT_1 + coeff = 1; + token_prob = probs[i + 1][1]; + } else { +- if (!vp56_rac_get_prob_branchy(&c, token_prob[3])) { // DCT 2,3,4 +- coeff = vp56_rac_get_prob_branchy(&c, token_prob[4]); ++ if (!vpx_rac_get_prob_branchy(&c, token_prob[3])) { // DCT 2,3,4 ++ coeff = vpx_rac_get_prob_branchy(&c, token_prob[4]); + if (coeff) +- coeff += vp56_rac_get_prob(&c, token_prob[5]); ++ coeff += vpx_rac_get_prob(&c, token_prob[5]); + coeff += 2; + } else { + // DCT_CAT* +- if (!vp56_rac_get_prob_branchy(&c, token_prob[6])) { +- if (!vp56_rac_get_prob_branchy(&c, token_prob[7])) { // DCT_CAT1 +- coeff = 5 + vp56_rac_get_prob(&c, vp8_dct_cat1_prob[0]); ++ if (!vpx_rac_get_prob_branchy(&c, token_prob[6])) { ++ if (!vpx_rac_get_prob_branchy(&c, token_prob[7])) { // DCT_CAT1 ++ coeff = 5 + vpx_rac_get_prob(&c, vp8_dct_cat1_prob[0]); + } else { // DCT_CAT2 + coeff = 7; +- coeff += vp56_rac_get_prob(&c, vp8_dct_cat2_prob[0]) << 1; +- coeff += vp56_rac_get_prob(&c, vp8_dct_cat2_prob[1]); ++ coeff += vpx_rac_get_prob(&c, vp8_dct_cat2_prob[0]) << 1; ++ coeff += vpx_rac_get_prob(&c, vp8_dct_cat2_prob[1]); + } + } else { // DCT_CAT3 and up +- int a = vp56_rac_get_prob(&c, token_prob[8]); +- int b = vp56_rac_get_prob(&c, token_prob[9 + a]); ++ int a = vpx_rac_get_prob(&c, token_prob[8]); ++ int b = vpx_rac_get_prob(&c, token_prob[9 + a]); + int cat = (a << 1) + b; + coeff = 3 + (8 << cat); + coeff += vp8_rac_get_coeff(&c, ff_vp8_dct_cat_prob[cat]); +@@ -1385,7 +1416,7 @@ + } + token_prob = probs[i + 1][2]; + } +- block[scan[i]] = (vp8_rac_get(&c) ? -coeff : coeff) * qmul[!!i]; ++ block[scan[i]] = (vp89_rac_get(&c) ? -coeff : coeff) * qmul[!!i]; + } while (++i < 16); + + *r = c; +@@ -1415,11 +1446,11 @@ + return ret; + } + +-static int vp7_decode_block_coeffs_internal(VP56RangeCoder *r, ++static int vp7_decode_block_coeffs_internal(VPXRangeCoder *r, + int16_t block[16], + uint8_t probs[16][3][NUM_DCT_TOKENS - 1], +- int i, uint8_t *token_prob, +- int16_t qmul[2], ++ int i, const uint8_t *token_prob, ++ const int16_t qmul[2], + const uint8_t scan[16]) + { + return decode_block_coeffs_internal(r, block, probs, i, +@@ -1427,11 +1458,11 @@ + } + + #ifndef vp8_decode_block_coeffs_internal +-static int vp8_decode_block_coeffs_internal(VP56RangeCoder *r, ++static int vp8_decode_block_coeffs_internal(VPXRangeCoder *r, + int16_t block[16], + uint8_t probs[16][3][NUM_DCT_TOKENS - 1], +- int i, uint8_t *token_prob, +- int16_t qmul[2]) ++ int i, const uint8_t *token_prob, ++ const int16_t qmul[2]) + { + return decode_block_coeffs_internal(r, block, probs, i, + token_prob, qmul, ff_zigzag_scan, IS_VP8); +@@ -1452,13 +1483,13 @@ + * otherwise, the index of the last coeff decoded plus one + */ + static av_always_inline +-int decode_block_coeffs(VP56RangeCoder *c, int16_t block[16], ++int decode_block_coeffs(VPXRangeCoder *c, int16_t block[16], + uint8_t probs[16][3][NUM_DCT_TOKENS - 1], +- int i, int zero_nhood, int16_t qmul[2], ++ int i, int zero_nhood, const int16_t qmul[2], + const uint8_t scan[16], int vp7) + { +- uint8_t *token_prob = probs[i][zero_nhood]; +- if (!vp56_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB ++ const uint8_t *token_prob = probs[i][zero_nhood]; ++ if (!vpx_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB + return 0; + return vp7 ? vp7_decode_block_coeffs_internal(c, block, probs, i, + token_prob, qmul, scan) +@@ -1467,7 +1498,7 @@ + } + + static av_always_inline +-void decode_mb_coeffs(VP8Context *s, VP8ThreadData *td, VP56RangeCoder *c, ++void decode_mb_coeffs(VP8Context *s, VP8ThreadData *td, VPXRangeCoder *c, + VP8Macroblock *mb, uint8_t t_nnz[9], uint8_t l_nnz[9], + int is_vp7) + { +@@ -1542,8 +1573,8 @@ + } + + static av_always_inline +-void backup_mb_border(uint8_t *top_border, uint8_t *src_y, +- uint8_t *src_cb, uint8_t *src_cr, ++void backup_mb_border(uint8_t *top_border, const uint8_t *src_y, ++ const uint8_t *src_cb, const uint8_t *src_cr, + ptrdiff_t linesize, ptrdiff_t uvlinesize, int simple) + { + AV_COPY128(top_border, src_y + 15 * linesize); +@@ -1668,7 +1699,7 @@ + } + + static av_always_inline +-void intra_predict(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], ++void intra_predict(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], + VP8Macroblock *mb, int mb_x, int mb_y, int is_vp7) + { + int x, y, mode, nnz; +@@ -1686,14 +1717,14 @@ + s->hpc.pred16x16[mode](dst[0], s->linesize); + } else { + uint8_t *ptr = dst[0]; +- uint8_t *intra4x4 = mb->intra4x4_pred_mode_mb; ++ const uint8_t *intra4x4 = mb->intra4x4_pred_mode_mb; + const uint8_t lo = is_vp7 ? 128 : 127; + const uint8_t hi = is_vp7 ? 128 : 129; +- uint8_t tr_top[4] = { lo, lo, lo, lo }; ++ const uint8_t tr_top[4] = { lo, lo, lo, lo }; + + // all blocks on the right edge of the macroblock use bottom edge + // the top macroblock for their topright edge +- uint8_t *tr_right = ptr - s->linesize + 16; ++ const uint8_t *tr_right = ptr - s->linesize + 16; + + // if we're on the right edge of the frame, said edge is extended + // from the top macroblock +@@ -1706,7 +1737,7 @@ + AV_ZERO128(td->non_zero_count_cache); + + for (y = 0; y < 4; y++) { +- uint8_t *topright = ptr + 4 - s->linesize; ++ const uint8_t *topright = ptr + 4 - s->linesize; + for (x = 0; x < 4; x++) { + int copy = 0; + ptrdiff_t linesize = s->linesize; +@@ -1807,12 +1838,12 @@ + */ + static av_always_inline + void vp8_mc_luma(VP8Context *s, VP8ThreadData *td, uint8_t *dst, +- ThreadFrame *ref, const VP56mv *mv, ++ const ThreadFrame *ref, const VP8mv *mv, + int x_off, int y_off, int block_w, int block_h, + int width, int height, ptrdiff_t linesize, + vp8_mc_func mc_func[3][3]) + { +- uint8_t *src = ref->f->data[0]; ++ const uint8_t *src = ref->f->data[0]; + + if (AV_RN32A(mv)) { + ptrdiff_t src_linesize = linesize; +@@ -1865,12 +1896,12 @@ + */ + static av_always_inline + void vp8_mc_chroma(VP8Context *s, VP8ThreadData *td, uint8_t *dst1, +- uint8_t *dst2, ThreadFrame *ref, const VP56mv *mv, ++ uint8_t *dst2, const ThreadFrame *ref, const VP8mv *mv, + int x_off, int y_off, int block_w, int block_h, + int width, int height, ptrdiff_t linesize, + vp8_mc_func mc_func[3][3]) + { +- uint8_t *src1 = ref->f->data[1], *src2 = ref->f->data[2]; ++ const uint8_t *src1 = ref->f->data[1], *src2 = ref->f->data[2]; + + if (AV_RN32A(mv)) { + int mx = mv->x & 7, mx_idx = subpel_idx[0][mx]; +@@ -1914,12 +1945,12 @@ + } + + static av_always_inline +-void vp8_mc_part(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], +- ThreadFrame *ref_frame, int x_off, int y_off, ++void vp8_mc_part(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], ++ const ThreadFrame *ref_frame, int x_off, int y_off, + int bx_off, int by_off, int block_w, int block_h, +- int width, int height, VP56mv *mv) ++ int width, int height, const VP8mv *mv) + { +- VP56mv uvmv = *mv; ++ VP8mv uvmv = *mv; + + /* Y */ + vp8_mc_luma(s, td, dst[0] + by_off * s->linesize + bx_off, +@@ -1952,8 +1983,8 @@ + /* Fetch pixels for estimated mv 4 macroblocks ahead. + * Optimized for 64-byte cache lines. Inspired by ffh264 prefetch_motion. */ + static av_always_inline +-void prefetch_motion(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, +- int mb_xy, int ref) ++void prefetch_motion(const VP8Context *s, const VP8Macroblock *mb, ++ int mb_x, int mb_y, int mb_xy, int ref) + { + /* Don't prefetch refs that haven't been used very often this frame. */ + if (s->ref_count[ref - 1] > (mb_xy >> 5)) { +@@ -1975,13 +2006,13 @@ + * Apply motion vectors to prediction buffer, chapter 18. + */ + static av_always_inline +-void inter_predict(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], ++void inter_predict(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], + VP8Macroblock *mb, int mb_x, int mb_y) + { + int x_off = mb_x << 4, y_off = mb_y << 4; + int width = 16 * s->mb_width, height = 16 * s->mb_height; +- ThreadFrame *ref = &s->framep[mb->ref_frame]->tf; +- VP56mv *bmv = mb->bmv; ++ const ThreadFrame *ref = &s->framep[mb->ref_frame]->tf; ++ const VP8mv *bmv = mb->bmv; + + switch (mb->partitioning) { + case VP8_SPLITMVMODE_NONE: +@@ -1990,7 +2021,7 @@ + break; + case VP8_SPLITMVMODE_4x4: { + int x, y; +- VP56mv uvmv; ++ VP8mv uvmv; + + /* Y */ + for (y = 0; y < 4; y++) { +@@ -2059,7 +2090,8 @@ + } + + static av_always_inline +-void idct_mb(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], VP8Macroblock *mb) ++void idct_mb(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], ++ const VP8Macroblock *mb) + { + int x, y, ch; + +@@ -2121,7 +2153,7 @@ + } + + static av_always_inline +-void filter_level_for_mb(VP8Context *s, VP8Macroblock *mb, ++void filter_level_for_mb(const VP8Context *s, const VP8Macroblock *mb, + VP8FilterStrength *f, int is_vp7) + { + int interior_limit, filter_level; +@@ -2154,7 +2186,7 @@ + } + + static av_always_inline +-void filter_mb(VP8Context *s, uint8_t *dst[3], VP8FilterStrength *f, ++void filter_mb(const VP8Context *s, uint8_t *const dst[3], const VP8FilterStrength *f, + int mb_x, int mb_y, int is_vp7) + { + int mbedge_lim, bedge_lim_y, bedge_lim_uv, hev_thresh; +@@ -2241,7 +2273,7 @@ + } + + static av_always_inline +-void filter_mb_simple(VP8Context *s, uint8_t *dst, VP8FilterStrength *f, ++void filter_mb_simple(const VP8Context *s, uint8_t *dst, const VP8FilterStrength *f, + int mb_x, int mb_y) + { + int mbedge_lim, bedge_lim; +@@ -2276,7 +2308,7 @@ + #define MARGIN (16 << 2) + static av_always_inline + int vp78_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *curframe, +- VP8Frame *prev_frame, int is_vp7) ++ const VP8Frame *prev_frame, int is_vp7) + { + VP8Context *s = avctx->priv_data; + int mb_x, mb_y; +@@ -2294,7 +2326,7 @@ + s->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; + + for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) { +- if (vpX_rac_is_end(&s->c)) { ++ if (vpx_rac_is_end(&s->c)) { + return AVERROR_INVALIDDATA; + } + if (mb_y == 0) +@@ -2313,13 +2345,13 @@ + } + + static int vp7_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, +- VP8Frame *prev_frame) ++ const VP8Frame *prev_frame) + { + return vp78_decode_mv_mb_modes(avctx, cur_frame, prev_frame, IS_VP7); + } + + static int vp8_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, +- VP8Frame *prev_frame) ++ const VP8Frame *prev_frame) + { + return vp78_decode_mv_mb_modes(avctx, cur_frame, prev_frame, IS_VP8); + } +@@ -2370,8 +2402,10 @@ + int mb_y = atomic_load(&td->thread_mb_pos) >> 16; + int mb_x, mb_xy = mb_y * s->mb_width; + int num_jobs = s->num_jobs; +- VP8Frame *curframe = s->curframe, *prev_frame = s->prev_frame; +- VP56RangeCoder *c = &s->coeff_partition[mb_y & (s->num_coeff_partitions - 1)]; ++ const VP8Frame *prev_frame = s->prev_frame; ++ VP8Frame *curframe = s->curframe; ++ VPXRangeCoder *coeff_c = &s->coeff_partition[mb_y & (s->num_coeff_partitions - 1)]; ++ + VP8Macroblock *mb; + uint8_t *dst[3] = { + curframe->tf.f->data[0] + 16 * mb_y * s->linesize, +@@ -2379,7 +2413,7 @@ + curframe->tf.f->data[2] + 8 * mb_y * s->uvlinesize + }; + +- if (vpX_rac_is_end(c)) ++ if (vpx_rac_is_end(&s->c)) + return AVERROR_INVALIDDATA; + + if (mb_y == 0) +@@ -2410,7 +2444,7 @@ + td->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; + + for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) { +- if (vpX_rac_is_end(c)) ++ if (vpx_rac_is_end(&s->c)) + return AVERROR_INVALIDDATA; + // Wait for previous thread to read mb_x+2, and reach mb_y-1. + if (prev_td != td) { +@@ -2435,17 +2469,20 @@ + prev_frame && prev_frame->seg_map ? + prev_frame->seg_map->data + mb_xy : NULL, 0, is_vp7); + +- prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP56_FRAME_PREVIOUS); ++ prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_PREVIOUS); + +- if (!mb->skip) +- decode_mb_coeffs(s, td, c, mb, s->top_nnz[mb_x], td->left_nnz, is_vp7); ++ if (!mb->skip) { ++ if (vpx_rac_is_end(coeff_c)) ++ return AVERROR_INVALIDDATA; ++ decode_mb_coeffs(s, td, coeff_c, mb, s->top_nnz[mb_x], td->left_nnz, is_vp7); ++ } + + if (mb->mode <= MODE_I4x4) + intra_predict(s, td, dst, mb, mb_x, mb_y, is_vp7); + else + inter_predict(s, td, dst, mb, mb_x, mb_y); + +- prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP56_FRAME_GOLDEN); ++ prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_GOLDEN); + + if (!mb->skip) { + idct_mb(s, td, dst, mb); +@@ -2473,7 +2510,7 @@ + dst[1], dst[2], s->linesize, s->uvlinesize, 0); + } + +- prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP56_FRAME_GOLDEN2); ++ prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_ALTREF); + + dst[0] += 16; + dst[1] += 8; +@@ -2532,7 +2569,7 @@ + next_td = &s->thread_data[(jobnr + 1) % num_jobs]; + + for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb++) { +- VP8FilterStrength *f = &td->filter_strength[mb_x]; ++ const VP8FilterStrength *f = &td->filter_strength[mb_x]; + if (prev_td != td) + check_thread_pos(td, prev_td, + (mb_x + 1) + (s->mb_width + 3), mb_y - 1); +@@ -2577,7 +2614,7 @@ + int vp78_decode_mb_row_sliced(AVCodecContext *avctx, void *tdata, int jobnr, + int threadnr, int is_vp7) + { +- VP8Context *s = avctx->priv_data; ++ const VP8Context *s = avctx->priv_data; + VP8ThreadData *td = &s->thread_data[jobnr]; + VP8ThreadData *next_td = NULL, *prev_td = NULL; + VP8Frame *curframe = s->curframe; +@@ -2621,7 +2658,7 @@ + } + + static av_always_inline +-int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, ++int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, + const AVPacket *avpkt, int is_vp7) + { + VP8Context *s = avctx->priv_data; +@@ -2648,10 +2685,10 @@ + avctx->pix_fmt = s->pix_fmt; + } + +- prev_frame = s->framep[VP56_FRAME_CURRENT]; ++ prev_frame = s->framep[VP8_FRAME_CURRENT]; + +- referenced = s->update_last || s->update_golden == VP56_FRAME_CURRENT || +- s->update_altref == VP56_FRAME_CURRENT; ++ referenced = s->update_last || s->update_golden == VP8_FRAME_CURRENT || ++ s->update_altref == VP8_FRAME_CURRENT; + + skip_thresh = !referenced ? AVDISCARD_NONREF + : !s->keyframe ? AVDISCARD_NONKEY +@@ -2668,12 +2705,12 @@ + for (i = 0; i < 5; i++) + if (s->frames[i].tf.f->buf[0] && + &s->frames[i] != prev_frame && +- &s->frames[i] != s->framep[VP56_FRAME_PREVIOUS] && +- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN] && +- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN2]) ++ &s->frames[i] != s->framep[VP8_FRAME_PREVIOUS] && ++ &s->frames[i] != s->framep[VP8_FRAME_GOLDEN] && ++ &s->frames[i] != s->framep[VP8_FRAME_ALTREF]) + vp8_release_frame(s, &s->frames[i]); + +- curframe = s->framep[VP56_FRAME_CURRENT] = vp8_find_free_buffer(s); ++ curframe = s->framep[VP8_FRAME_CURRENT] = vp8_find_free_buffer(s); + + if (!s->colorspace) + avctx->colorspace = AVCOL_SPC_BT470BG; +@@ -2686,9 +2723,9 @@ + * likely that the values we have on a random interframe are complete + * junk if we didn't start decode on a keyframe. So just don't display + * anything rather than junk. */ +- if (!s->keyframe && (!s->framep[VP56_FRAME_PREVIOUS] || +- !s->framep[VP56_FRAME_GOLDEN] || +- !s->framep[VP56_FRAME_GOLDEN2])) { ++ if (!s->keyframe && (!s->framep[VP8_FRAME_PREVIOUS] || ++ !s->framep[VP8_FRAME_GOLDEN] || ++ !s->framep[VP8_FRAME_ALTREF])) { + av_log(avctx, AV_LOG_WARNING, + "Discarding interframe without a prior keyframe!\n"); + ret = AVERROR_INVALIDDATA; +@@ -2702,24 +2739,24 @@ + goto err; + + // check if golden and altref are swapped +- if (s->update_altref != VP56_FRAME_NONE) +- s->next_framep[VP56_FRAME_GOLDEN2] = s->framep[s->update_altref]; ++ if (s->update_altref != VP8_FRAME_NONE) ++ s->next_framep[VP8_FRAME_ALTREF] = s->framep[s->update_altref]; + else +- s->next_framep[VP56_FRAME_GOLDEN2] = s->framep[VP56_FRAME_GOLDEN2]; ++ s->next_framep[VP8_FRAME_ALTREF] = s->framep[VP8_FRAME_ALTREF]; + +- if (s->update_golden != VP56_FRAME_NONE) +- s->next_framep[VP56_FRAME_GOLDEN] = s->framep[s->update_golden]; ++ if (s->update_golden != VP8_FRAME_NONE) ++ s->next_framep[VP8_FRAME_GOLDEN] = s->framep[s->update_golden]; + else +- s->next_framep[VP56_FRAME_GOLDEN] = s->framep[VP56_FRAME_GOLDEN]; ++ s->next_framep[VP8_FRAME_GOLDEN] = s->framep[VP8_FRAME_GOLDEN]; + + if (s->update_last) +- s->next_framep[VP56_FRAME_PREVIOUS] = curframe; ++ s->next_framep[VP8_FRAME_PREVIOUS] = curframe; + else +- s->next_framep[VP56_FRAME_PREVIOUS] = s->framep[VP56_FRAME_PREVIOUS]; ++ s->next_framep[VP8_FRAME_PREVIOUS] = s->framep[VP8_FRAME_PREVIOUS]; + +- s->next_framep[VP56_FRAME_CURRENT] = curframe; ++ s->next_framep[VP8_FRAME_CURRENT] = curframe; + +- if (avctx->codec->update_thread_context) ++ if (ffcodec(avctx->codec)->update_thread_context) + ff_thread_finish_setup(avctx); + + if (avctx->hwaccel) { +@@ -2796,7 +2833,7 @@ + s->prob[0] = s->prob[1]; + + if (!s->invisible) { +- if ((ret = av_frame_ref(data, curframe->tf.f)) < 0) ++ if ((ret = av_frame_ref(rframe, curframe->tf.f)) < 0) + return ret; + *got_frame = 1; + } +@@ -2807,17 +2844,17 @@ + return ret; + } + +-int ff_vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, +- AVPacket *avpkt) ++int ff_vp8_decode_frame(AVCodecContext *avctx, AVFrame *frame, ++ int *got_frame, AVPacket *avpkt) + { +- return vp78_decode_frame(avctx, data, got_frame, avpkt, IS_VP8); ++ return vp78_decode_frame(avctx, frame, got_frame, avpkt, IS_VP8); + } + + #if CONFIG_VP7_DECODER +-static int vp7_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, +- AVPacket *avpkt) ++static int vp7_decode_frame(AVCodecContext *avctx, AVFrame *frame, ++ int *got_frame, AVPacket *avpkt) + { +- return vp78_decode_frame(avctx, data, got_frame, avpkt, IS_VP7); ++ return vp78_decode_frame(avctx, frame, got_frame, avpkt, IS_VP7); + } + #endif /* CONFIG_VP7_DECODER */ + +@@ -2826,9 +2863,6 @@ + VP8Context *s = avctx->priv_data; + int i; + +- if (!s) +- return 0; +- + vp8_decode_flush_impl(avctx, 1); + for (i = 0; i < FF_ARRAY_ELEMS(s->frames); i++) + av_frame_free(&s->frames[i].tf.f); +@@ -2938,34 +2972,35 @@ + #endif /* CONFIG_VP8_DECODER */ + + #if CONFIG_VP7_DECODER +-AVCodec ff_vp7_decoder = { +- .name = "vp7", +- .long_name = NULL_IF_CONFIG_SMALL("On2 VP7"), +- .type = AVMEDIA_TYPE_VIDEO, +- .id = AV_CODEC_ID_VP7, ++const FFCodec ff_vp7_decoder = { ++ .p.name = "vp7", ++ CODEC_LONG_NAME("On2 VP7"), ++ .p.type = AVMEDIA_TYPE_VIDEO, ++ .p.id = AV_CODEC_ID_VP7, + .priv_data_size = sizeof(VP8Context), + .init = vp7_decode_init, + .close = ff_vp8_decode_free, +- .decode = vp7_decode_frame, +- .capabilities = AV_CODEC_CAP_DR1, ++ FF_CODEC_DECODE_CB(vp7_decode_frame), ++ .p.capabilities = AV_CODEC_CAP_DR1, + .flush = vp8_decode_flush, + }; + #endif /* CONFIG_VP7_DECODER */ + + #if CONFIG_VP8_DECODER +-AVCodec ff_vp8_decoder = { +- .name = "vp8", +- .long_name = NULL_IF_CONFIG_SMALL("On2 VP8"), +- .type = AVMEDIA_TYPE_VIDEO, +- .id = AV_CODEC_ID_VP8, ++const FFCodec ff_vp8_decoder = { ++ .p.name = "vp8", ++ CODEC_LONG_NAME("On2 VP8"), ++ .p.type = AVMEDIA_TYPE_VIDEO, ++ .p.id = AV_CODEC_ID_VP8, + .priv_data_size = sizeof(VP8Context), + .init = ff_vp8_decode_init, + .close = ff_vp8_decode_free, +- .decode = ff_vp8_decode_frame, +- .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | ++ FF_CODEC_DECODE_CB(ff_vp8_decode_frame), ++ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_SLICE_THREADS, ++ .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS, + .flush = vp8_decode_flush, +- .update_thread_context = ONLY_IF_THREADS_ENABLED(vp8_decode_update_thread_context), ++ UPDATE_THREAD_CONTEXT(vp8_decode_update_thread_context), + .hw_configs = (const AVCodecHWConfigInternal *const []) { + #if CONFIG_VP8_VAAPI_HWACCEL + HWACCEL_VAAPI(vp8), +@@ -2975,6 +3010,5 @@ + #endif + NULL + }, +- .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS, + }; + #endif /* CONFIG_VP7_DECODER */ +diff -Naur a/media/ffvpx/libavcodec/vp8dsp.c b/media/ffvpx/libavcodec/vp8dsp.c +--- a/media/ffvpx/libavcodec/vp8dsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp8dsp.c 2023-04-06 12:50:06.974471174 +0200 +@@ -25,6 +25,8 @@ + * VP8 compatible video decoder + */ + ++#include "config_components.h" ++ + #include "libavutil/common.h" + #include "libavutil/intreadwrite.h" + +@@ -466,7 +468,7 @@ + + #define PUT_PIXELS(WIDTH) \ + static void put_vp8_pixels ## WIDTH ## _c(uint8_t *dst, ptrdiff_t dststride, \ +- uint8_t *src, ptrdiff_t srcstride, \ ++ const uint8_t *src, ptrdiff_t srcstride, \ + int h, int x, int y) \ + { \ + int i; \ +@@ -490,7 +492,7 @@ + #define VP8_EPEL_H(SIZE, TAPS) \ + static void put_vp8_epel ## SIZE ## _h ## TAPS ## _c(uint8_t *dst, \ + ptrdiff_t dststride, \ +- uint8_t *src, \ ++ const uint8_t *src, \ + ptrdiff_t srcstride, \ + int h, int mx, int my) \ + { \ +@@ -508,7 +510,7 @@ + #define VP8_EPEL_V(SIZE, TAPS) \ + static void put_vp8_epel ## SIZE ## _v ## TAPS ## _c(uint8_t *dst, \ + ptrdiff_t dststride, \ +- uint8_t *src, \ ++ const uint8_t *src, \ + ptrdiff_t srcstride, \ + int h, int mx, int my) \ + { \ +@@ -527,7 +529,7 @@ + static void \ + put_vp8_epel ## SIZE ## _h ## HTAPS ## v ## VTAPS ## _c(uint8_t *dst, \ + ptrdiff_t dststride, \ +- uint8_t *src, \ ++ const uint8_t *src, \ + ptrdiff_t srcstride, \ + int h, int mx, \ + int my) \ +@@ -584,7 +586,7 @@ + + #define VP8_BILINEAR(SIZE) \ + static void put_vp8_bilinear ## SIZE ## _h_c(uint8_t *dst, ptrdiff_t dstride, \ +- uint8_t *src, ptrdiff_t sstride, \ ++ const uint8_t *src, ptrdiff_t sstride, \ + int h, int mx, int my) \ + { \ + int a = 8 - mx, b = mx; \ +@@ -598,7 +600,7 @@ + } \ + \ + static void put_vp8_bilinear ## SIZE ## _v_c(uint8_t *dst, ptrdiff_t dstride, \ +- uint8_t *src, ptrdiff_t sstride, \ ++ const uint8_t *src, ptrdiff_t sstride, \ + int h, int mx, int my) \ + { \ + int c = 8 - my, d = my; \ +@@ -613,7 +615,7 @@ + \ + static void put_vp8_bilinear ## SIZE ## _hv_c(uint8_t *dst, \ + ptrdiff_t dstride, \ +- uint8_t *src, \ ++ const uint8_t *src, \ + ptrdiff_t sstride, \ + int h, int mx, int my) \ + { \ +@@ -673,14 +675,15 @@ + VP78_BILINEAR_MC_FUNC(1, 8); + VP78_BILINEAR_MC_FUNC(2, 4); + +- if (ARCH_AARCH64) +- ff_vp78dsp_init_aarch64(dsp); +- if (ARCH_ARM) +- ff_vp78dsp_init_arm(dsp); +- if (ARCH_PPC) +- ff_vp78dsp_init_ppc(dsp); +- if (ARCH_X86) +- ff_vp78dsp_init_x86(dsp); ++#if ARCH_AARCH64 ++ ff_vp78dsp_init_aarch64(dsp); ++#elif ARCH_ARM ++ ff_vp78dsp_init_arm(dsp); ++#elif ARCH_PPC ++ ff_vp78dsp_init_ppc(dsp); ++#elif ARCH_X86 ++ ff_vp78dsp_init_x86(dsp); ++#endif + } + + #if CONFIG_VP7_DECODER +@@ -735,13 +738,16 @@ + dsp->vp8_v_loop_filter_simple = vp8_v_loop_filter_simple_c; + dsp->vp8_h_loop_filter_simple = vp8_h_loop_filter_simple_c; + +- if (ARCH_AARCH64) +- ff_vp8dsp_init_aarch64(dsp); +- if (ARCH_ARM) +- ff_vp8dsp_init_arm(dsp); +- if (ARCH_X86) +- ff_vp8dsp_init_x86(dsp); +- if (ARCH_MIPS) +- ff_vp8dsp_init_mips(dsp); ++#if ARCH_AARCH64 ++ ff_vp8dsp_init_aarch64(dsp); ++#elif ARCH_ARM ++ ff_vp8dsp_init_arm(dsp); ++#elif ARCH_X86 ++ ff_vp8dsp_init_x86(dsp); ++#elif ARCH_MIPS ++ ff_vp8dsp_init_mips(dsp); ++#elif ARCH_LOONGARCH ++ ff_vp8dsp_init_loongarch(dsp); ++#endif + } + #endif /* CONFIG_VP8_DECODER */ +diff -Naur a/media/ffvpx/libavcodec/vp8dsp.h b/media/ffvpx/libavcodec/vp8dsp.h +--- a/media/ffvpx/libavcodec/vp8dsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp8dsp.h 2023-04-06 12:50:06.974471174 +0200 +@@ -31,7 +31,7 @@ + #include + + typedef void (*vp8_mc_func)(uint8_t *dst /* align 8 */, ptrdiff_t dstStride, +- uint8_t *src /* align 1 */, ptrdiff_t srcStride, ++ const uint8_t *src /* align 1 */, ptrdiff_t srcStride, + int h, int x, int y); + + typedef struct VP8DSPContext { +@@ -81,13 +81,6 @@ + vp8_mc_func put_vp8_bilinear_pixels_tab[3][3][3]; + } VP8DSPContext; + +-void ff_put_vp8_pixels16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +- int h, int x, int y); +-void ff_put_vp8_pixels8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +- int h, int x, int y); +-void ff_put_vp8_pixels4_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, +- int h, int x, int y); +- + void ff_vp7dsp_init(VP8DSPContext *c); + + void ff_vp78dsp_init(VP8DSPContext *c); +@@ -101,6 +94,7 @@ + void ff_vp8dsp_init_arm(VP8DSPContext *c); + void ff_vp8dsp_init_x86(VP8DSPContext *c); + void ff_vp8dsp_init_mips(VP8DSPContext *c); ++void ff_vp8dsp_init_loongarch(VP8DSPContext *c); + + #define IS_VP7 1 + #define IS_VP8 0 +diff -Naur a/media/ffvpx/libavcodec/vp8.h b/media/ffvpx/libavcodec/vp8.h +--- a/media/ffvpx/libavcodec/vp8.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp8.h 2023-04-06 12:50:06.974471174 +0200 +@@ -33,12 +33,21 @@ + #include "libavutil/thread.h" + + #include "h264pred.h" +-#include "thread.h" +-#include "vp56.h" ++#include "threadframe.h" ++#include "videodsp.h" + #include "vp8dsp.h" ++#include "vpx_rac.h" + + #define VP8_MAX_QUANT 127 + ++typedef enum { ++ VP8_FRAME_NONE = -1, ++ VP8_FRAME_CURRENT = 0, ++ VP8_FRAME_PREVIOUS = 1, ++ VP8_FRAME_GOLDEN = 2, ++ VP8_FRAME_ALTREF = 3, ++} VP8FrameType; ++ + enum dct_token { + DCT_0, + DCT_1, +@@ -73,6 +82,11 @@ + VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs + }; + ++typedef struct VP8mv { ++ DECLARE_ALIGNED(4, int16_t, x); ++ int16_t y; ++} VP8mv; ++ + typedef struct VP8FilterStrength { + uint8_t filter_level; + uint8_t inner_limit; +@@ -90,8 +104,8 @@ + uint8_t segment; + uint8_t intra4x4_pred_mode_mb[16]; + DECLARE_ALIGNED(4, uint8_t, intra4x4_pred_mode_top)[4]; +- VP56mv mv; +- VP56mv bmv[16]; ++ VP8mv mv; ++ VP8mv bmv[16]; + } VP8Macroblock; + + typedef struct VP8intmv { +@@ -234,10 +248,10 @@ + + /** + * filter strength adjustment for macroblocks that reference: +- * [0] - intra / VP56_FRAME_CURRENT +- * [1] - VP56_FRAME_PREVIOUS +- * [2] - VP56_FRAME_GOLDEN +- * [3] - altref / VP56_FRAME_GOLDEN2 ++ * [0] - intra / VP8_FRAME_CURRENT ++ * [1] - VP8_FRAME_PREVIOUS ++ * [2] - VP8_FRAME_GOLDEN ++ * [3] - altref / VP8_FRAME_ALTREF + */ + int8_t ref[4]; + } lf_delta; +@@ -245,7 +259,7 @@ + uint8_t (*top_border)[16 + 8 + 8]; + uint8_t (*top_nnz)[9]; + +- VP56RangeCoder c; ///< header context, includes mb modes and motion vectors ++ VPXRangeCoder c; ///< header context, includes mb modes and motion vectors + + /* This contains the entropy coder state at the end of the header + * block, in the form specified by the standard. For use by +@@ -282,8 +296,8 @@ + + VP8Macroblock *macroblocks_base; + int invisible; +- int update_last; ///< update VP56_FRAME_PREVIOUS with the current one +- int update_golden; ///< VP56_FRAME_NONE if not updated, or which frame to copy if so ++ int update_last; ///< update VP8_FRAME_PREVIOUS with the current one ++ int update_golden; ///< VP8_FRAME_NONE if not updated, or which frame to copy if so + int update_altref; + + /** +@@ -297,7 +311,7 @@ + * There can be 1, 2, 4, or 8 of these after the header context. + */ + int num_coeff_partitions; +- VP56RangeCoder coeff_partition[8]; ++ VPXRangeCoder coeff_partition[8]; + int coeff_partition_size[8]; + VideoDSPContext vdsp; + VP8DSPContext vp8dsp; +@@ -322,14 +336,9 @@ + int vp7; + + /** +- * Fade bit present in bitstream (VP7) +- */ +- int fade_present; +- +- /** + * Interframe DC prediction (VP7) +- * [0] VP56_FRAME_PREVIOUS +- * [1] VP56_FRAME_GOLDEN ++ * [0] VP8_FRAME_PREVIOUS ++ * [1] VP8_FRAME_GOLDEN + */ + uint16_t inter_dc_pred[2][2]; + +@@ -344,8 +353,8 @@ + + int ff_vp8_decode_init(AVCodecContext *avctx); + +-int ff_vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, +- AVPacket *avpkt); ++int ff_vp8_decode_frame(AVCodecContext *avctx, AVFrame *frame, ++ int *got_frame, AVPacket *avpkt); + + int ff_vp8_decode_free(AVCodecContext *avctx); + +diff -Naur a/media/ffvpx/libavcodec/vp8_parser.c b/media/ffvpx/libavcodec/vp8_parser.c +--- a/media/ffvpx/libavcodec/vp8_parser.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp8_parser.c 2023-04-06 12:49:40.256395011 +0200 +@@ -73,7 +73,7 @@ + return buf_size; + } + +-AVCodecParser ff_vp8_parser = { ++const AVCodecParser ff_vp8_parser = { + .codec_ids = { AV_CODEC_ID_VP8 }, + .parser_parse = parse, + }; +diff -Naur a/media/ffvpx/libavcodec/vp9block.c b/media/ffvpx/libavcodec/vp9block.c +--- a/media/ffvpx/libavcodec/vp9block.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9block.c 2023-04-06 12:50:06.974471174 +0200 +@@ -23,13 +23,12 @@ + + #include "libavutil/avassert.h" + +-#include "avcodec.h" +-#include "internal.h" +-#include "videodsp.h" +-#include "vp56.h" ++#include "threadframe.h" ++#include "vp89_rac.h" + #include "vp9.h" + #include "vp9data.h" + #include "vp9dec.h" ++#include "vpx_rac.h" + + static av_always_inline void setctx_2d(uint8_t *ptr, int w, int h, + ptrdiff_t stride, int v) +@@ -89,7 +88,7 @@ + TX_32X32, TX_32X32, TX_32X32, TX_32X32, TX_16X16, TX_16X16, + TX_16X16, TX_8X8, TX_8X8, TX_8X8, TX_4X4, TX_4X4, TX_4X4 + }; +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col, row7 = td->row7; + enum TxfmMode max_tx = max_tx_for_bl_bp[b->bs]; +@@ -102,10 +101,11 @@ + b->seg_id = 0; + } else if (s->s.h.keyframe || s->s.h.intraonly) { + b->seg_id = !s->s.h.segmentation.update_map ? 0 : +- vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, s->s.h.segmentation.prob); ++ vp89_rac_get_tree(td->c, ff_vp9_segmentation_tree, ++ s->s.h.segmentation.prob); + } else if (!s->s.h.segmentation.update_map || + (s->s.h.segmentation.temporal && +- vp56_rac_get_prob_branchy(td->c, ++ vpx_rac_get_prob_branchy(td->c, + s->s.h.segmentation.pred_prob[s->above_segpred_ctx[col] + + td->left_segpred_ctx[row7]]))) { + if (!s->s.h.errorres && s->s.frames[REF_FRAME_SEGMAP].segmentation_map) { +@@ -128,8 +128,8 @@ + memset(&s->above_segpred_ctx[col], 1, w4); + memset(&td->left_segpred_ctx[row7], 1, h4); + } else { +- b->seg_id = vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, +- s->s.h.segmentation.prob); ++ b->seg_id = vp89_rac_get_tree(td->c, ff_vp9_segmentation_tree, ++ s->s.h.segmentation.prob); + + memset(&s->above_segpred_ctx[col], 0, w4); + memset(&td->left_segpred_ctx[row7], 0, h4); +@@ -144,7 +144,7 @@ + s->s.h.segmentation.feat[b->seg_id].skip_enabled; + if (!b->skip) { + int c = td->left_skip_ctx[row7] + s->above_skip_ctx[col]; +- b->skip = vp56_rac_get_prob(td->c, s->prob.p.skip[c]); ++ b->skip = vpx_rac_get_prob(td->c, s->prob.p.skip[c]); + td->counts.skip[c][b->skip]++; + } + +@@ -162,7 +162,7 @@ + c = have_a ? 2 * s->above_intra_ctx[col] : + have_l ? 2 * td->left_intra_ctx[row7] : 0; + } +- bit = vp56_rac_get_prob(td->c, s->prob.p.intra[c]); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.intra[c]); + td->counts.intra[c][bit]++; + b->intra = !bit; + } +@@ -187,22 +187,22 @@ + } + switch (max_tx) { + case TX_32X32: +- b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][0]); ++ b->tx = vpx_rac_get_prob(td->c, s->prob.p.tx32p[c][0]); + if (b->tx) { +- b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][1]); ++ b->tx += vpx_rac_get_prob(td->c, s->prob.p.tx32p[c][1]); + if (b->tx == 2) +- b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][2]); ++ b->tx += vpx_rac_get_prob(td->c, s->prob.p.tx32p[c][2]); + } + td->counts.tx32p[c][b->tx]++; + break; + case TX_16X16: +- b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][0]); ++ b->tx = vpx_rac_get_prob(td->c, s->prob.p.tx16p[c][0]); + if (b->tx) +- b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][1]); ++ b->tx += vpx_rac_get_prob(td->c, s->prob.p.tx16p[c][1]); + td->counts.tx16p[c][b->tx]++; + break; + case TX_8X8: +- b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx8p[c]); ++ b->tx = vpx_rac_get_prob(td->c, s->prob.p.tx8p[c]); + td->counts.tx8p[c][b->tx]++; + break; + case TX_4X4: +@@ -223,11 +223,11 @@ + // necessary, they're just there to make the code slightly + // simpler for now + b->mode[0] = +- a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- ff_vp9_default_kf_ymode_probs[a[0]][l[0]]); ++ a[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ ff_vp9_default_kf_ymode_probs[a[0]][l[0]]); + if (b->bs != BS_8x4) { +- b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- ff_vp9_default_kf_ymode_probs[a[1]][b->mode[0]]); ++ b->mode[1] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ ff_vp9_default_kf_ymode_probs[a[1]][b->mode[0]]); + l[0] = + a[1] = b->mode[1]; + } else { +@@ -237,11 +237,11 @@ + } + if (b->bs != BS_4x8) { + b->mode[2] = +- a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- ff_vp9_default_kf_ymode_probs[a[0]][l[1]]); ++ a[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ ff_vp9_default_kf_ymode_probs[a[0]][l[1]]); + if (b->bs != BS_8x4) { +- b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- ff_vp9_default_kf_ymode_probs[a[1]][b->mode[2]]); ++ b->mode[3] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ ff_vp9_default_kf_ymode_probs[a[1]][b->mode[2]]); + l[1] = + a[1] = b->mode[3]; + } else { +@@ -256,8 +256,8 @@ + b->mode[3] = b->mode[1]; + } + } else { +- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- ff_vp9_default_kf_ymode_probs[*a][*l]); ++ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ ff_vp9_default_kf_ymode_probs[*a][*l]); + b->mode[3] = + b->mode[2] = + b->mode[1] = b->mode[0]; +@@ -265,28 +265,28 @@ + memset(a, b->mode[0], ff_vp9_bwh_tab[0][b->bs][0]); + memset(l, b->mode[0], ff_vp9_bwh_tab[0][b->bs][1]); + } +- b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- ff_vp9_default_kf_uvmode_probs[b->mode[3]]); ++ b->uvmode = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ ff_vp9_default_kf_uvmode_probs[b->mode[3]]); + } else if (b->intra) { + b->comp = 0; + if (b->bs > BS_8x8) { +- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- s->prob.p.y_mode[0]); ++ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[0]]++; + if (b->bs != BS_8x4) { +- b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- s->prob.p.y_mode[0]); ++ b->mode[1] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[1]]++; + } else { + b->mode[1] = b->mode[0]; + } + if (b->bs != BS_4x8) { +- b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- s->prob.p.y_mode[0]); ++ b->mode[2] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[2]]++; + if (b->bs != BS_8x4) { +- b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- s->prob.p.y_mode[0]); ++ b->mode[3] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[3]]++; + } else { + b->mode[3] = b->mode[2]; +@@ -301,15 +301,15 @@ + }; + int sz = size_group[b->bs]; + +- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- s->prob.p.y_mode[sz]); ++ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ s->prob.p.y_mode[sz]); + b->mode[1] = + b->mode[2] = + b->mode[3] = b->mode[0]; + td->counts.y_mode[sz][b->mode[3]]++; + } +- b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, +- s->prob.p.uv_mode[b->mode[3]]); ++ b->uvmode = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, ++ s->prob.p.uv_mode[b->mode[3]]); + td->counts.uv_mode[b->mode[3]][b->uvmode]++; + } else { + static const uint8_t inter_mode_ctx_lut[14][14] = { +@@ -367,7 +367,7 @@ + } else { + c = 1; + } +- b->comp = vp56_rac_get_prob(td->c, s->prob.p.comp[c]); ++ b->comp = vpx_rac_get_prob(td->c, s->prob.p.comp[c]); + td->counts.comp[c][b->comp]++; + } + +@@ -439,7 +439,7 @@ + } else { + c = 2; + } +- bit = vp56_rac_get_prob(td->c, s->prob.p.comp_ref[c]); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.comp_ref[c]); + b->ref[var_idx] = s->s.h.varcompref[bit]; + td->counts.comp_ref[c][bit]++; + } else /* single reference */ { +@@ -479,7 +479,7 @@ + } else { + c = 2; + } +- bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][0]); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.single_ref[c][0]); + td->counts.single_ref[c][0][bit]++; + if (!bit) { + b->ref[0] = 0; +@@ -566,7 +566,7 @@ + } else { + c = 2; + } +- bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][1]); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.single_ref[c][1]); + td->counts.single_ref[c][1][bit]++; + b->ref[0] = 1 + bit; + } +@@ -589,8 +589,8 @@ + int c = inter_mode_ctx_lut[s->above_mode_ctx[col + off[b->bs]]] + [td->left_mode_ctx[row7 + off[b->bs]]]; + +- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, +- s->prob.p.mv_mode[c]); ++ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, ++ s->prob.p.mv_mode[c]); + b->mode[1] = + b->mode[2] = + b->mode[3] = b->mode[0]; +@@ -614,8 +614,8 @@ + c = 3; + } + +- filter_id = vp8_rac_get_tree(td->c, ff_vp9_filter_tree, +- s->prob.p.filter[c]); ++ filter_id = vp89_rac_get_tree(td->c, ff_vp9_filter_tree, ++ s->prob.p.filter[c]); + td->counts.filter[c][filter_id]++; + b->filter = ff_vp9_filter_lut[filter_id]; + } else { +@@ -625,14 +625,14 @@ + if (b->bs > BS_8x8) { + int c = inter_mode_ctx_lut[s->above_mode_ctx[col]][td->left_mode_ctx[row7]]; + +- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, +- s->prob.p.mv_mode[c]); ++ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, ++ s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[0] - 10]++; + ff_vp9_fill_mv(td, b->mv[0], b->mode[0], 0); + + if (b->bs != BS_8x4) { +- b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, +- s->prob.p.mv_mode[c]); ++ b->mode[1] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, ++ s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[1] - 10]++; + ff_vp9_fill_mv(td, b->mv[1], b->mode[1], 1); + } else { +@@ -642,14 +642,14 @@ + } + + if (b->bs != BS_4x8) { +- b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, +- s->prob.p.mv_mode[c]); ++ b->mode[2] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, ++ s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[2] - 10]++; + ff_vp9_fill_mv(td, b->mv[2], b->mode[2], 2); + + if (b->bs != BS_8x4) { +- b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, +- s->prob.p.mv_mode[c]); ++ b->mode[3] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, ++ s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[3] - 10]++; + ff_vp9_fill_mv(td, b->mv[3], b->mode[3], 3); + } else { +@@ -802,11 +802,11 @@ + + // FIXME merge cnt/eob arguments? + static av_always_inline int +-decode_coeffs_b_generic(VP56RangeCoder *c, int16_t *coef, int n_coeffs, ++decode_coeffs_b_generic(VPXRangeCoder *c, int16_t *coef, int n_coeffs, + int is_tx32x32, int is8bitsperpixel, int bpp, unsigned (*cnt)[6][3], +- unsigned (*eob)[6][2], uint8_t (*p)[6][11], ++ unsigned (*eob)[6][2], const uint8_t (*p)[6][11], + int nnz, const int16_t *scan, const int16_t (*nb)[2], +- const int16_t *band_counts, int16_t *qmul) ++ const int16_t *band_counts, const int16_t *qmul) + { + int i = 0, band = 0, band_left = band_counts[band]; + const uint8_t *tp = p[0][nnz]; +@@ -815,13 +815,13 @@ + do { + int val, rc; + +- val = vp56_rac_get_prob_branchy(c, tp[0]); // eob ++ val = vpx_rac_get_prob_branchy(c, tp[0]); // eob + eob[band][nnz][val]++; + if (!val) + break; + + skip_eob: +- if (!vp56_rac_get_prob_branchy(c, tp[1])) { // zero ++ if (!vpx_rac_get_prob_branchy(c, tp[1])) { // zero + cnt[band][nnz][0]++; + if (!--band_left) + band_left = band_counts[++band]; +@@ -834,70 +834,70 @@ + } + + rc = scan[i]; +- if (!vp56_rac_get_prob_branchy(c, tp[2])) { // one ++ if (!vpx_rac_get_prob_branchy(c, tp[2])) { // one + cnt[band][nnz][1]++; + val = 1; + cache[rc] = 1; + } else { + cnt[band][nnz][2]++; +- if (!vp56_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4 +- if (!vp56_rac_get_prob_branchy(c, tp[4])) { ++ if (!vpx_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4 ++ if (!vpx_rac_get_prob_branchy(c, tp[4])) { + cache[rc] = val = 2; + } else { +- val = 3 + vp56_rac_get_prob(c, tp[5]); ++ val = 3 + vpx_rac_get_prob(c, tp[5]); + cache[rc] = 3; + } +- } else if (!vp56_rac_get_prob_branchy(c, tp[6])) { // cat1/2 ++ } else if (!vpx_rac_get_prob_branchy(c, tp[6])) { // cat1/2 + cache[rc] = 4; +- if (!vp56_rac_get_prob_branchy(c, tp[7])) { +- val = vp56_rac_get_prob(c, 159) + 5; ++ if (!vpx_rac_get_prob_branchy(c, tp[7])) { ++ val = vpx_rac_get_prob(c, 159) + 5; + } else { +- val = (vp56_rac_get_prob(c, 165) << 1) + 7; +- val += vp56_rac_get_prob(c, 145); ++ val = (vpx_rac_get_prob(c, 165) << 1) + 7; ++ val += vpx_rac_get_prob(c, 145); + } + } else { // cat 3-6 + cache[rc] = 5; +- if (!vp56_rac_get_prob_branchy(c, tp[8])) { +- if (!vp56_rac_get_prob_branchy(c, tp[9])) { +- val = 11 + (vp56_rac_get_prob(c, 173) << 2); +- val += (vp56_rac_get_prob(c, 148) << 1); +- val += vp56_rac_get_prob(c, 140); ++ if (!vpx_rac_get_prob_branchy(c, tp[8])) { ++ if (!vpx_rac_get_prob_branchy(c, tp[9])) { ++ val = 11 + (vpx_rac_get_prob(c, 173) << 2); ++ val += (vpx_rac_get_prob(c, 148) << 1); ++ val += vpx_rac_get_prob(c, 140); + } else { +- val = 19 + (vp56_rac_get_prob(c, 176) << 3); +- val += (vp56_rac_get_prob(c, 155) << 2); +- val += (vp56_rac_get_prob(c, 140) << 1); +- val += vp56_rac_get_prob(c, 135); ++ val = 19 + (vpx_rac_get_prob(c, 176) << 3); ++ val += (vpx_rac_get_prob(c, 155) << 2); ++ val += (vpx_rac_get_prob(c, 140) << 1); ++ val += vpx_rac_get_prob(c, 135); + } +- } else if (!vp56_rac_get_prob_branchy(c, tp[10])) { +- val = (vp56_rac_get_prob(c, 180) << 4) + 35; +- val += (vp56_rac_get_prob(c, 157) << 3); +- val += (vp56_rac_get_prob(c, 141) << 2); +- val += (vp56_rac_get_prob(c, 134) << 1); +- val += vp56_rac_get_prob(c, 130); ++ } else if (!vpx_rac_get_prob_branchy(c, tp[10])) { ++ val = (vpx_rac_get_prob(c, 180) << 4) + 35; ++ val += (vpx_rac_get_prob(c, 157) << 3); ++ val += (vpx_rac_get_prob(c, 141) << 2); ++ val += (vpx_rac_get_prob(c, 134) << 1); ++ val += vpx_rac_get_prob(c, 130); + } else { + val = 67; + if (!is8bitsperpixel) { + if (bpp == 12) { +- val += vp56_rac_get_prob(c, 255) << 17; +- val += vp56_rac_get_prob(c, 255) << 16; ++ val += vpx_rac_get_prob(c, 255) << 17; ++ val += vpx_rac_get_prob(c, 255) << 16; + } +- val += (vp56_rac_get_prob(c, 255) << 15); +- val += (vp56_rac_get_prob(c, 255) << 14); ++ val += (vpx_rac_get_prob(c, 255) << 15); ++ val += (vpx_rac_get_prob(c, 255) << 14); + } +- val += (vp56_rac_get_prob(c, 254) << 13); +- val += (vp56_rac_get_prob(c, 254) << 12); +- val += (vp56_rac_get_prob(c, 254) << 11); +- val += (vp56_rac_get_prob(c, 252) << 10); +- val += (vp56_rac_get_prob(c, 249) << 9); +- val += (vp56_rac_get_prob(c, 243) << 8); +- val += (vp56_rac_get_prob(c, 230) << 7); +- val += (vp56_rac_get_prob(c, 196) << 6); +- val += (vp56_rac_get_prob(c, 177) << 5); +- val += (vp56_rac_get_prob(c, 153) << 4); +- val += (vp56_rac_get_prob(c, 140) << 3); +- val += (vp56_rac_get_prob(c, 133) << 2); +- val += (vp56_rac_get_prob(c, 130) << 1); +- val += vp56_rac_get_prob(c, 129); ++ val += (vpx_rac_get_prob(c, 254) << 13); ++ val += (vpx_rac_get_prob(c, 254) << 12); ++ val += (vpx_rac_get_prob(c, 254) << 11); ++ val += (vpx_rac_get_prob(c, 252) << 10); ++ val += (vpx_rac_get_prob(c, 249) << 9); ++ val += (vpx_rac_get_prob(c, 243) << 8); ++ val += (vpx_rac_get_prob(c, 230) << 7); ++ val += (vpx_rac_get_prob(c, 196) << 6); ++ val += (vpx_rac_get_prob(c, 177) << 5); ++ val += (vpx_rac_get_prob(c, 153) << 4); ++ val += (vpx_rac_get_prob(c, 140) << 3); ++ val += (vpx_rac_get_prob(c, 133) << 2); ++ val += (vpx_rac_get_prob(c, 130) << 1); ++ val += vpx_rac_get_prob(c, 129); + } + } + } +@@ -911,9 +911,9 @@ + if (!--band_left) + band_left = band_counts[++band]; + if (is_tx32x32) +- STORE_COEF(coef, rc, (int)((vp8_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]) / 2); ++ STORE_COEF(coef, rc, (int)((vp89_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]) / 2); + else +- STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]); ++ STORE_COEF(coef, rc, (vp89_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]); + nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1; + tp = p[band][nnz]; + } while (++i < n_coeffs); +@@ -923,9 +923,9 @@ + + static int decode_coeffs_b_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], +- uint8_t (*p)[6][11], int nnz, const int16_t *scan, ++ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, +- int16_t *qmul) ++ const int16_t *qmul) + { + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 1, 8, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +@@ -933,9 +933,9 @@ + + static int decode_coeffs_b32_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], +- uint8_t (*p)[6][11], int nnz, const int16_t *scan, ++ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, +- int16_t *qmul) ++ const int16_t *qmul) + { + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 1, 8, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +@@ -943,9 +943,9 @@ + + static int decode_coeffs_b_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], +- uint8_t (*p)[6][11], int nnz, const int16_t *scan, ++ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, +- int16_t *qmul) ++ const int16_t *qmul) + { + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 0, td->s->s.h.bpp, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +@@ -953,9 +953,9 @@ + + static int decode_coeffs_b32_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], +- uint8_t (*p)[6][11], int nnz, const int16_t *scan, ++ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, +- int16_t *qmul) ++ const int16_t *qmul) + { + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 0, td->s->s.h.bpp, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +@@ -963,17 +963,17 @@ + + static av_always_inline int decode_coeffs(VP9TileData *td, int is8bitsperpixel) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; +- uint8_t (*p)[6][11] = s->prob.coef[b->tx][0 /* y */][!b->intra]; ++ const uint8_t (*p)[6][11] = s->prob.coef[b->tx][0 /* y */][!b->intra]; + unsigned (*c)[6][3] = td->counts.coef[b->tx][0 /* y */][!b->intra]; + unsigned (*e)[6][2] = td->counts.eob[b->tx][0 /* y */][!b->intra]; + int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, h4 = ff_vp9_bwh_tab[1][b->bs][1] << 1; + int end_x = FFMIN(2 * (s->cols - col), w4); + int end_y = FFMIN(2 * (s->rows - row), h4); + int n, pl, x, y, ret; +- int16_t (*qmul)[2] = s->s.h.segmentation.feat[b->seg_id].qmul; ++ const int16_t (*qmul)[2] = s->s.h.segmentation.feat[b->seg_id].qmul; + int tx = 4 * s->s.h.lossless + b->tx; + const int16_t * const *yscans = ff_vp9_scans[tx]; + const int16_t (* const * ynbs)[2] = ff_vp9_scans_nb[tx]; +@@ -1264,7 +1264,7 @@ + VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, + enum BlockLevel bl, enum BlockPartition bp) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + enum BlockSize bs = bl * 3 + bp; + int bytesperpixel = s->bytesperpixel; +diff -Naur a/media/ffvpx/libavcodec/vp9.c b/media/ffvpx/libavcodec/vp9.c +--- a/media/ffvpx/libavcodec/vp9.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9.c 2023-04-06 12:50:06.974471174 +0200 +@@ -21,17 +21,24 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config_components.h" ++ + #include "avcodec.h" ++#include "codec_internal.h" ++#include "decode.h" + #include "get_bits.h" + #include "hwconfig.h" +-#include "internal.h" + #include "profiles.h" + #include "thread.h" ++#include "threadframe.h" ++#include "pthread_internal.h" ++ + #include "videodsp.h" +-#include "vp56.h" ++#include "vp89_rac.h" + #include "vp9.h" + #include "vp9data.h" + #include "vp9dec.h" ++#include "vpx_rac.h" + #include "libavutil/avassert.h" + #include "libavutil/pixdesc.h" + #include "libavutil/video_enc_params.h" +@@ -39,15 +46,9 @@ + #define VP9_SYNCCODE 0x498342 + + #if HAVE_THREADS +-static void vp9_free_entries(AVCodecContext *avctx) { +- VP9Context *s = avctx->priv_data; +- +- if (avctx->active_thread_type & FF_THREAD_SLICE) { +- pthread_mutex_destroy(&s->progress_mutex); +- pthread_cond_destroy(&s->progress_cond); +- av_freep(&s->entries); +- } +-} ++DEFINE_OFFSET_ARRAY(VP9Context, vp9_context, pthread_init_cnt, ++ (offsetof(VP9Context, progress_mutex)), ++ (offsetof(VP9Context, progress_cond))); + + static int vp9_alloc_entries(AVCodecContext *avctx, int n) { + VP9Context *s = avctx->priv_data; +@@ -58,17 +59,11 @@ + av_freep(&s->entries); + + s->entries = av_malloc_array(n, sizeof(atomic_int)); +- +- if (!s->entries) { +- av_freep(&s->entries); ++ if (!s->entries) + return AVERROR(ENOMEM); +- } + + for (i = 0; i < n; i++) + atomic_init(&s->entries[i], 0); +- +- pthread_mutex_init(&s->progress_mutex, NULL); +- pthread_cond_init(&s->progress_cond, NULL); + } + return 0; + } +@@ -90,7 +85,6 @@ + pthread_mutex_unlock(&s->progress_mutex); + } + #else +-static void vp9_free_entries(AVCodecContext *avctx) {} + static int vp9_alloc_entries(AVCodecContext *avctx, int n) { return 0; } + #endif + +@@ -103,7 +97,7 @@ + + static void vp9_frame_unref(AVCodecContext *avctx, VP9Frame *f) + { +- ff_thread_release_buffer(avctx, &f->tf); ++ ff_thread_release_ext_buffer(avctx, &f->tf); + av_buffer_unref(&f->extradata); + av_buffer_unref(&f->hwaccel_priv_buf); + f->segmentation_map = NULL; +@@ -115,7 +109,7 @@ + VP9Context *s = avctx->priv_data; + int ret, sz; + +- ret = ff_thread_get_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF); ++ ret = ff_thread_get_ext_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF); + if (ret < 0) + return ret; + +@@ -192,7 +186,8 @@ + CONFIG_VP9_D3D11VA_HWACCEL * 2 + \ + CONFIG_VP9_NVDEC_HWACCEL + \ + CONFIG_VP9_VAAPI_HWACCEL + \ +- CONFIG_VP9_VDPAU_HWACCEL) ++ CONFIG_VP9_VDPAU_HWACCEL + \ ++ CONFIG_VP9_VIDEOTOOLBOX_HWACCEL) + enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; + VP9Context *s = avctx->priv_data; + uint8_t *p; +@@ -224,6 +219,9 @@ + #if CONFIG_VP9_VDPAU_HWACCEL + *fmtp++ = AV_PIX_FMT_VDPAU; + #endif ++#if CONFIG_VP9_VIDEOTOOLBOX_HWACCEL ++ *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX; ++#endif + break; + case AV_PIX_FMT_YUV420P12: + #if CONFIG_VP9_NVDEC_HWACCEL +@@ -236,6 +234,13 @@ + *fmtp++ = AV_PIX_FMT_VDPAU; + #endif + break; ++ case AV_PIX_FMT_YUV444P: ++ case AV_PIX_FMT_YUV444P10: ++ case AV_PIX_FMT_YUV444P12: ++#if CONFIG_VP9_VAAPI_HWACCEL ++ *fmtp++ = AV_PIX_FMT_VAAPI; ++#endif ++ break; + } + + *fmtp++ = s->pix_fmt; +@@ -277,7 +282,7 @@ + assign(s->intra_pred_data[2], uint8_t *, 64 * bytesperpixel); + assign(s->above_y_nnz_ctx, uint8_t *, 16); + assign(s->above_mode_ctx, uint8_t *, 16); +- assign(s->above_mv_ctx, VP56mv(*)[2], 16); ++ assign(s->above_mv_ctx, VP9mv(*)[2], 16); + assign(s->above_uv_nnz_ctx[0], uint8_t *, 16); + assign(s->above_uv_nnz_ctx[1], uint8_t *, 16); + assign(s->above_partition_ctx, uint8_t *, 8); +@@ -382,7 +387,7 @@ + } + + // differential forward probability updates +-static int update_prob(VP56RangeCoder *c, int p) ++static int update_prob(VPXRangeCoder *c, int p) + { + static const uint8_t inv_map_table[255] = { + 7, 20, 33, 46, 59, 72, 85, 98, 111, 124, 137, 150, 163, 176, +@@ -422,16 +427,16 @@ + * updates vs. the 'fine, exact' updates further down the range, which + * adds one extra dimension to this differential update model. */ + +- if (!vp8_rac_get(c)) { +- d = vp8_rac_get_uint(c, 4) + 0; +- } else if (!vp8_rac_get(c)) { +- d = vp8_rac_get_uint(c, 4) + 16; +- } else if (!vp8_rac_get(c)) { +- d = vp8_rac_get_uint(c, 5) + 32; ++ if (!vp89_rac_get(c)) { ++ d = vp89_rac_get_uint(c, 4) + 0; ++ } else if (!vp89_rac_get(c)) { ++ d = vp89_rac_get_uint(c, 4) + 16; ++ } else if (!vp89_rac_get(c)) { ++ d = vp89_rac_get_uint(c, 5) + 32; + } else { +- d = vp8_rac_get_uint(c, 7); ++ d = vp89_rac_get_uint(c, 7); + if (d >= 65) +- d = (d << 1) - 65 + vp8_rac_get(c); ++ d = (d << 1) - 65 + vp89_rac_get(c); + d += 64; + av_assert2(d < FF_ARRAY_ELEMS(inv_map_table)); + } +@@ -787,16 +792,15 @@ + s->s.h.tiling.tile_rows = 1 << s->s.h.tiling.log2_tile_rows; + if (s->s.h.tiling.tile_cols != (1 << s->s.h.tiling.log2_tile_cols)) { + int n_range_coders; +- VP56RangeCoder *rc; ++ VPXRangeCoder *rc; + + if (s->td) { + for (i = 0; i < s->active_tile_cols; i++) + vp9_tile_data_free(&s->td[i]); +- av_free(s->td); ++ av_freep(&s->td); + } + + s->s.h.tiling.tile_cols = 1 << s->s.h.tiling.log2_tile_cols; +- vp9_free_entries(avctx); + s->active_tile_cols = avctx->active_thread_type == FF_THREAD_SLICE ? + s->s.h.tiling.tile_cols : 1; + vp9_alloc_entries(avctx, s->sb_rows); +@@ -805,11 +809,11 @@ + } else { + n_range_coders = s->s.h.tiling.tile_cols; + } +- s->td = av_mallocz_array(s->active_tile_cols, sizeof(VP9TileData) + +- n_range_coders * sizeof(VP56RangeCoder)); ++ s->td = av_calloc(s->active_tile_cols, sizeof(VP9TileData) + ++ n_range_coders * sizeof(VPXRangeCoder)); + if (!s->td) + return AVERROR(ENOMEM); +- rc = (VP56RangeCoder *) &s->td[s->active_tile_cols]; ++ rc = (VPXRangeCoder *) &s->td[s->active_tile_cols]; + for (i = 0; i < s->active_tile_cols; i++) { + s->td[i].s = s; + s->td[i].c_b = rc; +@@ -881,11 +885,11 @@ + av_log(avctx, AV_LOG_ERROR, "Invalid compressed header size\n"); + return AVERROR_INVALIDDATA; + } +- ret = ff_vp56_init_range_decoder(&s->c, data2, size2); ++ ret = ff_vpx_init_range_decoder(&s->c, data2, size2); + if (ret < 0) + return ret; + +- if (vp56_rac_get_prob_branchy(&s->c, 128)) { // marker bit ++ if (vpx_rac_get_prob_branchy(&s->c, 128)) { // marker bit + av_log(avctx, AV_LOG_ERROR, "Marker bit was set\n"); + return AVERROR_INVALIDDATA; + } +@@ -909,22 +913,22 @@ + if (s->s.h.lossless) { + s->s.h.txfmmode = TX_4X4; + } else { +- s->s.h.txfmmode = vp8_rac_get_uint(&s->c, 2); ++ s->s.h.txfmmode = vp89_rac_get_uint(&s->c, 2); + if (s->s.h.txfmmode == 3) +- s->s.h.txfmmode += vp8_rac_get(&s->c); ++ s->s.h.txfmmode += vp89_rac_get(&s->c); + + if (s->s.h.txfmmode == TX_SWITCHABLE) { + for (i = 0; i < 2; i++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.tx8p[i] = update_prob(&s->c, s->prob.p.tx8p[i]); + for (i = 0; i < 2; i++) + for (j = 0; j < 2; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.tx16p[i][j] = + update_prob(&s->c, s->prob.p.tx16p[i][j]); + for (i = 0; i < 2; i++) + for (j = 0; j < 3; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.tx32p[i][j] = + update_prob(&s->c, s->prob.p.tx32p[i][j]); + } +@@ -933,7 +937,7 @@ + // coef updates + for (i = 0; i < 4; i++) { + uint8_t (*ref)[2][6][6][3] = s->prob_ctx[c].coef[i]; +- if (vp8_rac_get(&s->c)) { ++ if (vp89_rac_get(&s->c)) { + for (j = 0; j < 2; j++) + for (k = 0; k < 2; k++) + for (l = 0; l < 6; l++) +@@ -943,7 +947,7 @@ + if (m >= 3 && l == 0) // dc only has 3 pt + break; + for (n = 0; n < 3; n++) { +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + p[n] = update_prob(&s->c, r[n]); + else + p[n] = r[n]; +@@ -969,33 +973,33 @@ + + // mode updates + for (i = 0; i < 3; i++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.skip[i] = update_prob(&s->c, s->prob.p.skip[i]); + if (!s->s.h.keyframe && !s->s.h.intraonly) { + for (i = 0; i < 7; i++) + for (j = 0; j < 3; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_mode[i][j] = + update_prob(&s->c, s->prob.p.mv_mode[i][j]); + + if (s->s.h.filtermode == FILTER_SWITCHABLE) + for (i = 0; i < 4; i++) + for (j = 0; j < 2; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.filter[i][j] = + update_prob(&s->c, s->prob.p.filter[i][j]); + + for (i = 0; i < 4; i++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.intra[i] = update_prob(&s->c, s->prob.p.intra[i]); + + if (s->s.h.allowcompinter) { +- s->s.h.comppredmode = vp8_rac_get(&s->c); ++ s->s.h.comppredmode = vp89_rac_get(&s->c); + if (s->s.h.comppredmode) +- s->s.h.comppredmode += vp8_rac_get(&s->c); ++ s->s.h.comppredmode += vp89_rac_get(&s->c); + if (s->s.h.comppredmode == PRED_SWITCHABLE) + for (i = 0; i < 5; i++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.comp[i] = + update_prob(&s->c, s->prob.p.comp[i]); + } else { +@@ -1004,10 +1008,10 @@ + + if (s->s.h.comppredmode != PRED_COMPREF) { + for (i = 0; i < 5; i++) { +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.single_ref[i][0] = + update_prob(&s->c, s->prob.p.single_ref[i][0]); +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.single_ref[i][1] = + update_prob(&s->c, s->prob.p.single_ref[i][1]); + } +@@ -1015,72 +1019,72 @@ + + if (s->s.h.comppredmode != PRED_SINGLEREF) { + for (i = 0; i < 5; i++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.comp_ref[i] = + update_prob(&s->c, s->prob.p.comp_ref[i]); + } + + for (i = 0; i < 4; i++) + for (j = 0; j < 9; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.y_mode[i][j] = + update_prob(&s->c, s->prob.p.y_mode[i][j]); + + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) + for (k = 0; k < 3; k++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.partition[3 - i][j][k] = + update_prob(&s->c, + s->prob.p.partition[3 - i][j][k]); + + // mv fields don't use the update_prob subexp model for some reason + for (i = 0; i < 3; i++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) +- s->prob.p.mv_joint[i] = (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) ++ s->prob.p.mv_joint[i] = (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + + for (i = 0; i < 2; i++) { +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].sign = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + + for (j = 0; j < 10; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].classes[j] = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].class0 = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + + for (j = 0; j < 10; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].bits[j] = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + } + + for (i = 0; i < 2; i++) { + for (j = 0; j < 2; j++) + for (k = 0; k < 3; k++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].class0_fp[j][k] = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + + for (j = 0; j < 3; j++) +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].fp[j] = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + } + + if (s->s.h.highprecisionmvs) { + for (i = 0; i < 2; i++) { +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].class0_hp = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + +- if (vp56_rac_get_prob_branchy(&s->c, 252)) ++ if (vpx_rac_get_prob_branchy(&s->c, 252)) + s->prob.p.mv_comp[i].hp = +- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; ++ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; + } + } + } +@@ -1103,11 +1107,11 @@ + int bytesperpixel = s->bytesperpixel; + + if (bl == BL_8X8) { +- bp = vp8_rac_get_tree(td->c, ff_vp9_partition_tree, p); ++ bp = vp89_rac_get_tree(td->c, ff_vp9_partition_tree, p); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); + } else if (col + hbs < s->cols) { // FIXME why not <=? + if (row + hbs < s->rows) { // FIXME why not <=? +- bp = vp8_rac_get_tree(td->c, ff_vp9_partition_tree, p); ++ bp = vp89_rac_get_tree(td->c, ff_vp9_partition_tree, p); + switch (bp) { + case PARTITION_NONE: + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); +@@ -1139,7 +1143,7 @@ + default: + av_assert0(0); + } +- } else if (vp56_rac_get_prob_branchy(td->c, p[1])) { ++ } else if (vpx_rac_get_prob_branchy(td->c, p[1])) { + bp = PARTITION_SPLIT; + decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row, col + hbs, lflvl, +@@ -1150,7 +1154,7 @@ + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); + } + } else if (row + hbs < s->rows) { // FIXME why not <=? +- if (vp56_rac_get_prob_branchy(td->c, p[2])) { ++ if (vpx_rac_get_prob_branchy(td->c, p[2])) { + bp = PARTITION_SPLIT; + decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); + yoff += hbs * 8 * y_stride; +@@ -1244,14 +1248,17 @@ + } + av_buffer_pool_uninit(&s->frame_extradata_pool); + for (i = 0; i < 8; i++) { +- ff_thread_release_buffer(avctx, &s->s.refs[i]); ++ ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); + av_frame_free(&s->s.refs[i].f); +- ff_thread_release_buffer(avctx, &s->next_refs[i]); ++ ff_thread_release_ext_buffer(avctx, &s->next_refs[i]); + av_frame_free(&s->next_refs[i].f); + } + + free_buffers(s); +- vp9_free_entries(avctx); ++#if HAVE_THREADS ++ av_freep(&s->entries); ++ ff_pthread_free(s, vp9_context_offsets); ++#endif + av_freep(&s->td); + return 0; + } +@@ -1288,17 +1295,13 @@ + data += 4; + size -= 4; + } +- if (tile_size > size) { +- ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); ++ if (tile_size > size) + return AVERROR_INVALIDDATA; +- } +- ret = ff_vp56_init_range_decoder(&td->c_b[tile_col], data, tile_size); ++ ret = ff_vpx_init_range_decoder(&td->c_b[tile_col], data, tile_size); + if (ret < 0) + return ret; +- if (vp56_rac_get_prob_branchy(&td->c_b[tile_col], 128)) { // marker bit +- ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); ++ if (vpx_rac_get_prob_branchy(&td->c_b[tile_col], 128)) // marker bit + return AVERROR_INVALIDDATA; +- } + data += tile_size; + size -= tile_size; + } +@@ -1341,7 +1344,7 @@ + decode_sb_mem(td, row, col, lflvl_ptr, + yoff2, uvoff2, BL_64X64); + } else { +- if (vpX_rac_is_end(td->c)) { ++ if (vpx_rac_is_end(td->c)) { + return AVERROR_INVALIDDATA; + } + decode_sb(td, row, col, lflvl_ptr, +@@ -1551,7 +1554,7 @@ + return 0; + } + +-static int vp9_decode_frame(AVCodecContext *avctx, void *frame, ++static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, + int *got_frame, AVPacket *pkt) + { + const uint8_t *data = pkt->data; +@@ -1571,16 +1574,11 @@ + } + if ((ret = av_frame_ref(frame, s->s.refs[ref].f)) < 0) + return ret; +- ((AVFrame *)frame)->pts = pkt->pts; +-#if FF_API_PKT_PTS +-FF_DISABLE_DEPRECATION_WARNINGS +- ((AVFrame *)frame)->pkt_pts = pkt->pts; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- ((AVFrame *)frame)->pkt_dts = pkt->dts; ++ frame->pts = pkt->pts; ++ frame->pkt_dts = pkt->dts; + for (i = 0; i < 8; i++) { + if (s->next_refs[i].f->buf[0]) +- ff_thread_release_buffer(avctx, &s->next_refs[i]); ++ ff_thread_release_ext_buffer(avctx, &s->next_refs[i]); + if (s->s.refs[i].f->buf[0] && + (ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i])) < 0) + return ret; +@@ -1620,7 +1618,7 @@ + // ref frame setup + for (i = 0; i < 8; i++) { + if (s->next_refs[i].f->buf[0]) +- ff_thread_release_buffer(avctx, &s->next_refs[i]); ++ ff_thread_release_ext_buffer(avctx, &s->next_refs[i]); + if (s->s.h.refreshrefmask & (1 << i)) { + ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.frames[CUR_FRAME].tf); + } else if (s->s.refs[i].f->buf[0]) { +@@ -1720,10 +1718,10 @@ + } + if (tile_size > size) + return AVERROR_INVALIDDATA; +- ret = ff_vp56_init_range_decoder(&s->td[tile_col].c_b[tile_row], data, tile_size); ++ ret = ff_vpx_init_range_decoder(&s->td[tile_col].c_b[tile_row], data, tile_size); + if (ret < 0) + return ret; +- if (vp56_rac_get_prob_branchy(&s->td[tile_col].c_b[tile_row], 128)) // marker bit ++ if (vpx_rac_get_prob_branchy(&s->td[tile_col].c_b[tile_row], 128)) // marker bit + return AVERROR_INVALIDDATA; + data += tile_size; + size -= tile_size; +@@ -1769,7 +1767,7 @@ + // ref frame setup + for (i = 0; i < 8; i++) { + if (s->s.refs[i].f->buf[0]) +- ff_thread_release_buffer(avctx, &s->s.refs[i]); ++ ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); + if (s->next_refs[i].f->buf[0] && + (ret = ff_thread_ref_frame(&s->s.refs[i], &s->next_refs[i])) < 0) + return ret; +@@ -1792,45 +1790,39 @@ + for (i = 0; i < 3; i++) + vp9_frame_unref(avctx, &s->s.frames[i]); + for (i = 0; i < 8; i++) +- ff_thread_release_buffer(avctx, &s->s.refs[i]); ++ ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); + } + +-static int init_frames(AVCodecContext *avctx) ++static av_cold int vp9_decode_init(AVCodecContext *avctx) + { + VP9Context *s = avctx->priv_data; +- int i; ++ int ret; + +- for (i = 0; i < 3; i++) { ++ s->last_bpp = 0; ++ s->s.h.filter.sharpness = -1; ++ ++#if HAVE_THREADS ++ if (avctx->active_thread_type & FF_THREAD_SLICE) { ++ ret = ff_pthread_init(s, vp9_context_offsets); ++ if (ret < 0) ++ return ret; ++ } ++#endif ++ ++ for (int i = 0; i < 3; i++) { + s->s.frames[i].tf.f = av_frame_alloc(); +- if (!s->s.frames[i].tf.f) { +- vp9_decode_free(avctx); +- av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); ++ if (!s->s.frames[i].tf.f) + return AVERROR(ENOMEM); +- } + } +- for (i = 0; i < 8; i++) { +- s->s.refs[i].f = av_frame_alloc(); +- s->next_refs[i].f = av_frame_alloc(); +- if (!s->s.refs[i].f || !s->next_refs[i].f) { +- vp9_decode_free(avctx); +- av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); ++ for (int i = 0; i < 8; i++) { ++ s->s.refs[i].f = av_frame_alloc(); ++ s->next_refs[i].f = av_frame_alloc(); ++ if (!s->s.refs[i].f || !s->next_refs[i].f) + return AVERROR(ENOMEM); +- } + } +- + return 0; + } + +-static av_cold int vp9_decode_init(AVCodecContext *avctx) +-{ +- VP9Context *s = avctx->priv_data; +- +- s->last_bpp = 0; +- s->s.h.filter.sharpness = -1; +- +- return init_frames(avctx); +-} +- + #if HAVE_THREADS + static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) + { +@@ -1847,7 +1839,7 @@ + } + for (i = 0; i < 8; i++) { + if (s->s.refs[i].f->buf[0]) +- ff_thread_release_buffer(dst, &s->s.refs[i]); ++ ff_thread_release_ext_buffer(dst, &s->s.refs[i]); + if (ssrc->next_refs[i].f->buf[0]) { + if ((ret = ff_thread_ref_frame(&s->s.refs[i], &ssrc->next_refs[i])) < 0) + return ret; +@@ -1878,21 +1870,22 @@ + } + #endif + +-AVCodec ff_vp9_decoder = { +- .name = "vp9", +- .long_name = NULL_IF_CONFIG_SMALL("Google VP9"), +- .type = AVMEDIA_TYPE_VIDEO, +- .id = AV_CODEC_ID_VP9, ++const FFCodec ff_vp9_decoder = { ++ .p.name = "vp9", ++ CODEC_LONG_NAME("Google VP9"), ++ .p.type = AVMEDIA_TYPE_VIDEO, ++ .p.id = AV_CODEC_ID_VP9, + .priv_data_size = sizeof(VP9Context), + .init = vp9_decode_init, + .close = vp9_decode_free, +- .decode = vp9_decode_frame, +- .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, +- .caps_internal = FF_CODEC_CAP_SLICE_THREAD_HAS_MF | ++ FF_CODEC_DECODE_CB(vp9_decode_frame), ++ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, ++ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | ++ FF_CODEC_CAP_SLICE_THREAD_HAS_MF | + FF_CODEC_CAP_ALLOCATE_PROGRESS, + .flush = vp9_decode_flush, +- .update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context), +- .profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), ++ UPDATE_THREAD_CONTEXT(vp9_decode_update_thread_context), ++ .p.profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), + .bsfs = "vp9_superframe_split", + .hw_configs = (const AVCodecHWConfigInternal *const []) { + #if CONFIG_VP9_DXVA2_HWACCEL +@@ -1913,6 +1906,9 @@ + #if CONFIG_VP9_VDPAU_HWACCEL + HWACCEL_VDPAU(vp9), + #endif ++#if CONFIG_VP9_VIDEOTOOLBOX_HWACCEL ++ HWACCEL_VIDEOTOOLBOX(vp9), ++#endif + NULL + }, + }; +diff -Naur a/media/ffvpx/libavcodec/vp9dec.h b/media/ffvpx/libavcodec/vp9dec.h +--- a/media/ffvpx/libavcodec/vp9dec.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9dec.h 2023-04-06 12:50:06.974471174 +0200 +@@ -33,9 +33,12 @@ + #include "libavutil/thread.h" + #include "libavutil/internal.h" + ++#include "get_bits.h" ++#include "videodsp.h" + #include "vp9.h" + #include "vp9dsp.h" + #include "vp9shared.h" ++#include "vpx_rac.h" + + #define REF_INVALID_SCALE 0xFFFF + +@@ -82,7 +85,7 @@ + typedef struct VP9Block { + uint8_t seg_id, intra, comp, ref[2], mode[4], uvmode, skip; + enum FilterMode filter; +- VP56mv mv[4 /* b_idx */][2 /* ref */]; ++ VP9mv mv[4 /* b_idx */][2 /* ref */]; + enum BlockSize bs; + enum TxfmMode tx, uvtx; + enum BlockLevel bl; +@@ -98,13 +101,14 @@ + VP9DSPContext dsp; + VideoDSPContext vdsp; + GetBitContext gb; +- VP56RangeCoder c; ++ VPXRangeCoder c; + int pass, active_tile_cols; + + #if HAVE_THREADS + pthread_mutex_t progress_mutex; + pthread_cond_t progress_cond; + atomic_int *entries; ++ unsigned pthread_init_cnt; + #endif + + uint8_t ss_h, ss_v; +@@ -145,7 +149,7 @@ + uint8_t *above_comp_ctx; // 1bit + uint8_t *above_ref_ctx; // 2bit + uint8_t *above_filter_ctx; +- VP56mv (*above_mv_ctx)[2]; ++ VP9mv (*above_mv_ctx)[2]; + + // whole-frame cache + uint8_t *intra_pred_data[3]; +@@ -162,11 +166,9 @@ + } VP9Context; + + struct VP9TileData { +- //VP9Context should be const, but because of the threading API(generates +- //a lot of warnings) it's not. +- VP9Context *s; +- VP56RangeCoder *c_b; +- VP56RangeCoder *c; ++ const VP9Context *s; ++ VPXRangeCoder *c_b; ++ VPXRangeCoder *c; + int row, row7, col, col7; + uint8_t *dst[3]; + ptrdiff_t y_stride, uv_stride; +@@ -208,7 +210,7 @@ + // contextual (left) cache + DECLARE_ALIGNED(16, uint8_t, left_y_nnz_ctx)[16]; + DECLARE_ALIGNED(16, uint8_t, left_mode_ctx)[16]; +- DECLARE_ALIGNED(16, VP56mv, left_mv_ctx)[16][2]; ++ DECLARE_ALIGNED(16, VP9mv, left_mv_ctx)[16][2]; + DECLARE_ALIGNED(16, uint8_t, left_uv_nnz_ctx)[2][16]; + DECLARE_ALIGNED(8, uint8_t, left_partition_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_skip_ctx)[8]; +@@ -236,7 +238,7 @@ + unsigned int nb_block_structure; + }; + +-void ff_vp9_fill_mv(VP9TileData *td, VP56mv *mv, int mode, int sb); ++void ff_vp9_fill_mv(VP9TileData *td, VP9mv *mv, int mode, int sb); + + void ff_vp9_adapt_probs(VP9Context *s); + +diff -Naur a/media/ffvpx/libavcodec/vp9dsp.c b/media/ffvpx/libavcodec/vp9dsp.c +--- a/media/ffvpx/libavcodec/vp9dsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9dsp.c 2023-04-06 12:49:40.257395051 +0200 +@@ -21,8 +21,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config.h" ++ ++#include "libavutil/attributes.h" + #include "libavutil/avassert.h" +-#include "libavutil/common.h" + #include "libavutil/mem_internal.h" + + #include "vp9dsp.h" +@@ -94,8 +96,15 @@ + ff_vp9dsp_init_12(dsp); + } + +- if (ARCH_AARCH64) ff_vp9dsp_init_aarch64(dsp, bpp); +- if (ARCH_ARM) ff_vp9dsp_init_arm(dsp, bpp); +- if (ARCH_X86) ff_vp9dsp_init_x86(dsp, bpp, bitexact); +- if (ARCH_MIPS) ff_vp9dsp_init_mips(dsp, bpp); ++#if ARCH_AARCH64 ++ ff_vp9dsp_init_aarch64(dsp, bpp); ++#elif ARCH_ARM ++ ff_vp9dsp_init_arm(dsp, bpp); ++#elif ARCH_X86 ++ ff_vp9dsp_init_x86(dsp, bpp, bitexact); ++#elif ARCH_MIPS ++ ff_vp9dsp_init_mips(dsp, bpp); ++#elif ARCH_LOONGARCH ++ ff_vp9dsp_init_loongarch(dsp, bpp); ++#endif + } +diff -Naur a/media/ffvpx/libavcodec/vp9dsp.h b/media/ffvpx/libavcodec/vp9dsp.h +--- a/media/ffvpx/libavcodec/vp9dsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9dsp.h 2023-04-06 12:50:06.974471174 +0200 +@@ -28,6 +28,7 @@ + #include + + #include "libavcodec/vp9.h" ++#include "libavutil/attributes_internal.h" + + typedef void (*vp9_mc_func)(uint8_t *dst, ptrdiff_t dst_stride, + const uint8_t *ref, ptrdiff_t ref_stride, +@@ -120,7 +121,7 @@ + vp9_scaled_mc_func smc[5][N_FILTERS][2]; + } VP9DSPContext; + +-extern const int16_t ff_vp9_subpel_filters[3][16][8]; ++extern const int16_t attribute_visibility_hidden ff_vp9_subpel_filters[3][16][8]; + + void ff_vp9dsp_init(VP9DSPContext *dsp, int bpp, int bitexact); + +@@ -132,5 +133,6 @@ + void ff_vp9dsp_init_arm(VP9DSPContext *dsp, int bpp); + void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact); + void ff_vp9dsp_init_mips(VP9DSPContext *dsp, int bpp); ++void ff_vp9dsp_init_loongarch(VP9DSPContext *dsp, int bpp); + + #endif /* AVCODEC_VP9DSP_H */ +diff -Naur a/media/ffvpx/libavcodec/vp9_mc_template.c b/media/ffvpx/libavcodec/vp9_mc_template.c +--- a/media/ffvpx/libavcodec/vp9_mc_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9_mc_template.c 2023-04-06 12:50:06.974471174 +0200 +@@ -22,9 +22,9 @@ + */ + + #define ROUNDED_DIV_MVx2(a, b) \ +- (VP56mv) { .x = ROUNDED_DIV(a.x + b.x, 2), .y = ROUNDED_DIV(a.y + b.y, 2) } ++ (VP9mv) { .x = ROUNDED_DIV(a.x + b.x, 2), .y = ROUNDED_DIV(a.y + b.y, 2) } + #define ROUNDED_DIV_MVx4(a, b, c, d) \ +- (VP56mv) { .x = ROUNDED_DIV(a.x + b.x + c.x + d.x, 4), \ ++ (VP9mv) { .x = ROUNDED_DIV(a.x + b.x + c.x + d.x, 4), \ + .y = ROUNDED_DIV(a.y + b.y + c.y + d.y, 4) } + + static void FN(inter_pred)(VP9TileData *td) +@@ -33,11 +33,11 @@ + { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, + { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, + }; +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; +- ThreadFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; +- AVFrame *ref1 = tref1->f, *ref2; ++ const ThreadFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; ++ const AVFrame *ref1 = tref1->f, *ref2; + int w1 = ref1->width, h1 = ref1->height, w2, h2; + ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; + int bytesperpixel = BYTES_PER_PIXEL; +@@ -51,7 +51,7 @@ + + // y inter pred + if (b->bs > BS_8x8) { +- VP56mv uvmv; ++ VP9mv uvmv; + + #if SCALED == 0 + if (b->bs == BS_8x4) { +diff -Naur a/media/ffvpx/libavcodec/vp9mvs.c b/media/ffvpx/libavcodec/vp9mvs.c +--- a/media/ffvpx/libavcodec/vp9mvs.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9mvs.c 2023-04-06 12:50:06.974471174 +0200 +@@ -21,13 +21,13 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "internal.h" +-#include "vp56.h" +-#include "vp9.h" ++#include "threadframe.h" ++#include "vp89_rac.h" + #include "vp9data.h" + #include "vp9dec.h" ++#include "vpx_rac.h" + +-static av_always_inline void clamp_mv(VP56mv *dst, const VP56mv *src, ++static av_always_inline void clamp_mv(VP9mv *dst, const VP9mv *src, + VP9TileData *td) + { + dst->x = av_clip(src->x, td->min_mv.x, td->max_mv.x); +@@ -35,7 +35,7 @@ + } + + static void find_ref_mvs(VP9TileData *td, +- VP56mv *pmv, int ref, int z, int idx, int sb) ++ VP9mv *pmv, int ref, int z, int idx, int sb) + { + static const int8_t mv_ref_blk_off[N_BS_SIZES][8][2] = { + [BS_64x64] = { { 3, -1 }, { -1, 3 }, { 4, -1 }, { -1, 4 }, +@@ -65,7 +65,7 @@ + [BS_4x4] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, + { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } }, + }; +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col, row7 = td->row7; + const int8_t (*p)[2] = mv_ref_blk_off[b->bs]; +@@ -99,7 +99,7 @@ + #define RETURN_MV(mv) \ + do { \ + if (sb > 0) { \ +- VP56mv tmp; \ ++ VP9mv tmp; \ + uint32_t m; \ + av_assert2(idx == 1); \ + av_assert2(mem != INVALID_MV); \ +@@ -185,7 +185,7 @@ + #define RETURN_SCALE_MV(mv, scale) \ + do { \ + if (scale) { \ +- VP56mv mv_temp = { -mv.x, -mv.y }; \ ++ VP9mv mv_temp = { -mv.x, -mv.y }; \ + RETURN_MV(mv_temp); \ + } else { \ + RETURN_MV(mv); \ +@@ -235,10 +235,10 @@ + + static av_always_inline int read_mv_component(VP9TileData *td, int idx, int hp) + { +- VP9Context *s = td->s; +- int bit, sign = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].sign); +- int n, c = vp8_rac_get_tree(td->c, ff_vp9_mv_class_tree, +- s->prob.p.mv_comp[idx].classes); ++ const VP9Context *s = td->s; ++ int bit, sign = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].sign); ++ int n, c = vp89_rac_get_tree(td->c, ff_vp9_mv_class_tree, ++ s->prob.p.mv_comp[idx].classes); + + td->counts.mv_comp[idx].sign[sign]++; + td->counts.mv_comp[idx].classes[c]++; +@@ -246,17 +246,17 @@ + int m; + + for (n = 0, m = 0; m < c; m++) { +- bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].bits[m]); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].bits[m]); + n |= bit << m; + td->counts.mv_comp[idx].bits[m][bit]++; + } + n <<= 3; +- bit = vp8_rac_get_tree(td->c, ff_vp9_mv_fp_tree, +- s->prob.p.mv_comp[idx].fp); ++ bit = vp89_rac_get_tree(td->c, ff_vp9_mv_fp_tree, ++ s->prob.p.mv_comp[idx].fp); + n |= bit << 1; + td->counts.mv_comp[idx].fp[bit]++; + if (hp) { +- bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].hp); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].hp); + td->counts.mv_comp[idx].hp[bit]++; + n |= bit; + } else { +@@ -267,14 +267,14 @@ + } + n += 8 << c; + } else { +- n = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0); ++ n = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0); + td->counts.mv_comp[idx].class0[n]++; +- bit = vp8_rac_get_tree(td->c, ff_vp9_mv_fp_tree, +- s->prob.p.mv_comp[idx].class0_fp[n]); ++ bit = vp89_rac_get_tree(td->c, ff_vp9_mv_fp_tree, ++ s->prob.p.mv_comp[idx].class0_fp[n]); + td->counts.mv_comp[idx].class0_fp[n][bit]++; + n = (n << 3) | (bit << 1); + if (hp) { +- bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0_hp); ++ bit = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0_hp); + td->counts.mv_comp[idx].class0_hp[bit]++; + n |= bit; + } else { +@@ -288,9 +288,9 @@ + return sign ? -(n + 1) : (n + 1); + } + +-void ff_vp9_fill_mv(VP9TileData *td, VP56mv *mv, int mode, int sb) ++void ff_vp9_fill_mv(VP9TileData *td, VP9mv *mv, int mode, int sb) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + + if (mode == ZEROMV) { +@@ -319,8 +319,8 @@ + } + } + if (mode == NEWMV) { +- enum MVJoint j = vp8_rac_get_tree(td->c, ff_vp9_mv_joint_tree, +- s->prob.p.mv_joint); ++ enum MVJoint j = vp89_rac_get_tree(td->c, ff_vp9_mv_joint_tree, ++ s->prob.p.mv_joint); + + td->counts.mv_joint[j]++; + if (j >= MV_JOINT_V) +@@ -350,8 +350,8 @@ + } + } + if (mode == NEWMV) { +- enum MVJoint j = vp8_rac_get_tree(td->c, ff_vp9_mv_joint_tree, +- s->prob.p.mv_joint); ++ enum MVJoint j = vp89_rac_get_tree(td->c, ff_vp9_mv_joint_tree, ++ s->prob.p.mv_joint); + + td->counts.mv_joint[j]++; + if (j >= MV_JOINT_V) +diff -Naur a/media/ffvpx/libavcodec/vp9_parser.c b/media/ffvpx/libavcodec/vp9_parser.c +--- a/media/ffvpx/libavcodec/vp9_parser.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9_parser.c 2023-04-06 12:49:40.256395011 +0200 +@@ -64,7 +64,7 @@ + return size; + } + +-AVCodecParser ff_vp9_parser = { ++const AVCodecParser ff_vp9_parser = { + .codec_ids = { AV_CODEC_ID_VP9 }, + .parser_parse = parse, + }; +diff -Naur a/media/ffvpx/libavcodec/vp9prob.c b/media/ffvpx/libavcodec/vp9prob.c +--- a/media/ffvpx/libavcodec/vp9prob.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9prob.c 2023-04-06 12:50:06.974471174 +0200 +@@ -21,9 +21,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "vp56.h" + #include "vp9.h" +-#include "vp9data.h" + #include "vp9dec.h" + + static av_always_inline void adapt_prob(uint8_t *p, unsigned ct0, unsigned ct1, +diff -Naur a/media/ffvpx/libavcodec/vp9recon.c b/media/ffvpx/libavcodec/vp9recon.c +--- a/media/ffvpx/libavcodec/vp9recon.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9recon.c 2023-04-06 12:50:06.974471174 +0200 +@@ -24,8 +24,7 @@ + #include "libavutil/avassert.h" + #include "libavutil/mem_internal.h" + +-#include "avcodec.h" +-#include "internal.h" ++#include "threadframe.h" + #include "videodsp.h" + #include "vp9data.h" + #include "vp9dec.h" +@@ -37,7 +36,7 @@ + int row, int y, enum TxfmMode tx, + int p, int ss_h, int ss_v, int bytesperpixel) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + int have_top = row > 0 || y > 0; + int have_left = col > td->tile_col_start || x > 0; + int have_right = x < w - 1; +@@ -219,7 +218,7 @@ + static av_always_inline void intra_recon(VP9TileData *td, ptrdiff_t y_off, + ptrdiff_t uv_off, int bytesperpixel) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; + int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, step1d = 1 << b->tx, n; +@@ -296,14 +295,14 @@ + intra_recon(td, y_off, uv_off, 2); + } + +-static av_always_inline void mc_luma_unscaled(VP9TileData *td, vp9_mc_func (*mc)[2], ++static av_always_inline void mc_luma_unscaled(VP9TileData *td, const vp9_mc_func (*mc)[2], + uint8_t *dst, ptrdiff_t dst_stride, + const uint8_t *ref, ptrdiff_t ref_stride, +- ThreadFrame *ref_frame, +- ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, ++ const ThreadFrame *ref_frame, ++ ptrdiff_t y, ptrdiff_t x, const VP9mv *mv, + int bw, int bh, int w, int h, int bytesperpixel) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + int mx = mv->x, my = mv->y, th; + + y += my >> 3; +@@ -332,16 +331,16 @@ + mc[!!mx][!!my](dst, dst_stride, ref, ref_stride, bh, mx << 1, my << 1); + } + +-static av_always_inline void mc_chroma_unscaled(VP9TileData *td, vp9_mc_func (*mc)[2], ++static av_always_inline void mc_chroma_unscaled(VP9TileData *td, const vp9_mc_func (*mc)[2], + uint8_t *dst_u, uint8_t *dst_v, + ptrdiff_t dst_stride, + const uint8_t *ref_u, ptrdiff_t src_stride_u, + const uint8_t *ref_v, ptrdiff_t src_stride_v, +- ThreadFrame *ref_frame, +- ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, ++ const ThreadFrame *ref_frame, ++ ptrdiff_t y, ptrdiff_t x, const VP9mv *mv, + int bw, int bh, int w, int h, int bytesperpixel) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + int mx = mv->x * (1 << !s->ss_h), my = mv->y * (1 << !s->ss_v), th; + + y += my >> 4; +@@ -405,16 +404,16 @@ + #undef SCALED + + static av_always_inline void mc_luma_scaled(VP9TileData *td, vp9_scaled_mc_func smc, +- vp9_mc_func (*mc)[2], ++ const vp9_mc_func (*mc)[2], + uint8_t *dst, ptrdiff_t dst_stride, + const uint8_t *ref, ptrdiff_t ref_stride, +- ThreadFrame *ref_frame, +- ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, ++ const ThreadFrame *ref_frame, ++ ptrdiff_t y, ptrdiff_t x, const VP9mv *in_mv, + int px, int py, int pw, int ph, + int bw, int bh, int w, int h, int bytesperpixel, + const uint16_t *scale, const uint8_t *step) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && + s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { + mc_luma_unscaled(td, mc, dst, dst_stride, ref, ref_stride, ref_frame, +@@ -424,7 +423,7 @@ + int mx, my; + int refbw_m1, refbh_m1; + int th; +- VP56mv mv; ++ VP9mv mv; + + mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 8, (s->cols * 8 - x + px + 3) * 8); + mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 8, (s->rows * 8 - y + py + 3) * 8); +@@ -463,18 +462,18 @@ + } + + static av_always_inline void mc_chroma_scaled(VP9TileData *td, vp9_scaled_mc_func smc, +- vp9_mc_func (*mc)[2], ++ const vp9_mc_func (*mc)[2], + uint8_t *dst_u, uint8_t *dst_v, + ptrdiff_t dst_stride, + const uint8_t *ref_u, ptrdiff_t src_stride_u, + const uint8_t *ref_v, ptrdiff_t src_stride_v, +- ThreadFrame *ref_frame, +- ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, ++ const ThreadFrame *ref_frame, ++ ptrdiff_t y, ptrdiff_t x, const VP9mv *in_mv, + int px, int py, int pw, int ph, + int bw, int bh, int w, int h, int bytesperpixel, + const uint16_t *scale, const uint8_t *step) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && + s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { + mc_chroma_unscaled(td, mc, dst_u, dst_v, dst_stride, ref_u, src_stride_u, +@@ -484,7 +483,7 @@ + int mx, my; + int refbw_m1, refbh_m1; + int th; +- VP56mv mv; ++ VP9mv mv; + + if (s->ss_h) { + // BUG https://code.google.com/p/webm/issues/detail?id=820 +@@ -569,7 +568,7 @@ + + static av_always_inline void inter_recon(VP9TileData *td, int bytesperpixel) + { +- VP9Context *s = td->s; ++ const VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; + +diff -Naur a/media/ffvpx/libavcodec/vp9shared.h b/media/ffvpx/libavcodec/vp9shared.h +--- a/media/ffvpx/libavcodec/vp9shared.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9shared.h 2023-04-06 12:50:06.974471174 +0200 +@@ -27,9 +27,10 @@ + #include + #include + ++#include "libavutil/mem_internal.h" ++ + #include "vp9.h" +-#include "thread.h" +-#include "vp56.h" ++#include "threadframe.h" + + enum BlockPartition { + PARTITION_NONE, // [ ] <-. +@@ -51,8 +52,13 @@ + PRED_SWITCHABLE, + }; + ++typedef struct VP9mv { ++ DECLARE_ALIGNED(4, int16_t, x); ++ int16_t y; ++} VP9mv; ++ + typedef struct VP9mvrefPair { +- VP56mv mv[2]; ++ VP9mv mv[2]; + int8_t ref[2]; + } VP9mvrefPair; + +diff -Naur a/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c b/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c +--- a/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c 2023-04-06 12:49:40.257395051 +0200 +@@ -51,6 +51,9 @@ + return ret; + in = s->buffer_pkt; + ++ if (!in->size) ++ goto passthrough; ++ + marker = in->data[in->size - 1]; + if ((marker & 0xe0) == 0xc0) { + int length_size = 1 + ((marker >> 3) & 0x3); +@@ -70,7 +73,7 @@ + frame_size |= bytestream2_get_byte(&bc) << (j * 8); + + total_size += frame_size; +- if (frame_size < 0 || total_size > in->size - idx_size) { ++ if (frame_size <= 0 || total_size > in->size - idx_size) { + av_log(ctx, AV_LOG_ERROR, + "Invalid frame size in a superframe: %d\n", frame_size); + ret = AVERROR(EINVAL); +@@ -121,6 +124,7 @@ + out->pts = AV_NOPTS_VALUE; + + } else { ++passthrough: + av_packet_move_ref(out, s->buffer_pkt); + } + +@@ -155,12 +159,12 @@ + av_packet_free(&s->buffer_pkt); + } + +-const AVBitStreamFilter ff_vp9_superframe_split_bsf = { +- .name = "vp9_superframe_split", ++const FFBitStreamFilter ff_vp9_superframe_split_bsf = { ++ .p.name = "vp9_superframe_split", ++ .p.codec_ids = (const enum AVCodecID []){ AV_CODEC_ID_VP9, AV_CODEC_ID_NONE }, + .priv_data_size = sizeof(VP9SFSplitContext), + .init = vp9_superframe_split_init, + .flush = vp9_superframe_split_flush, + .close = vp9_superframe_split_uninit, + .filter = vp9_superframe_split_filter, +- .codec_ids = (const enum AVCodecID []){ AV_CODEC_ID_VP9, AV_CODEC_ID_NONE }, + }; +diff -Naur a/media/ffvpx/libavcodec/vpx_rac.c b/media/ffvpx/libavcodec/vpx_rac.c +--- a/media/ffvpx/libavcodec/vpx_rac.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vpx_rac.c 2023-04-06 12:50:06.974471174 +0200 +@@ -0,0 +1,53 @@ ++/* ++ * VP5/6/8 decoder ++ * Copyright (c) 2010 Fiona Glaser ++ * ++ * 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 ++#include "libavutil/error.h" ++#include "bytestream.h" ++#include "vpx_rac.h" ++ ++const uint8_t ff_vpx_norm_shift[256]= { ++ 8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, ++ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, ++ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, ++ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, ++}; ++ ++int ff_vpx_init_range_decoder(VPXRangeCoder *c, const uint8_t *buf, int buf_size) ++{ ++ c->high = 255; ++ c->bits = -16; ++ c->buffer = buf; ++ c->end = buf + buf_size; ++ c->end_reached = 0; ++ if (buf_size < 1) ++ return AVERROR_INVALIDDATA; ++ c->code_word = bytestream_get_be24(&c->buffer); ++ return 0; ++} +diff -Naur a/media/ffvpx/libavcodec/vpx_rac.h b/media/ffvpx/libavcodec/vpx_rac.h +--- a/media/ffvpx/libavcodec/vpx_rac.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/vpx_rac.h 2023-04-06 12:50:06.975471215 +0200 +@@ -0,0 +1,135 @@ ++/* ++ * Copyright (C) 2006 Aurelien Jacobs ++ * ++ * 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 ++ */ ++ ++/** ++ * @file ++ * Common VP5-VP9 range decoder stuff ++ */ ++ ++#ifndef AVCODEC_VPX_RAC_H ++#define AVCODEC_VPX_RAC_H ++ ++#include ++ ++#include "config.h" ++#include "libavutil/attributes.h" ++#include "bytestream.h" ++ ++typedef struct VPXRangeCoder { ++ int high; ++ int bits; /* stored negated (i.e. negative "bits" is a positive number of ++ bits left) in order to eliminate a negate in cache refilling */ ++ const uint8_t *buffer; ++ const uint8_t *end; ++ unsigned int code_word; ++ int end_reached; ++} VPXRangeCoder; ++ ++extern const uint8_t ff_vpx_norm_shift[256]; ++int ff_vpx_init_range_decoder(VPXRangeCoder *c, const uint8_t *buf, int buf_size); ++ ++/** ++ * returns 1 if the end of the stream has been reached, 0 otherwise. ++ */ ++static av_always_inline int vpx_rac_is_end(VPXRangeCoder *c) ++{ ++ if (c->end <= c->buffer && c->bits >= 0) ++ c->end_reached ++; ++ return c->end_reached > 10; ++} ++ ++static av_always_inline unsigned int vpx_rac_renorm(VPXRangeCoder *c) ++{ ++ int shift = ff_vpx_norm_shift[c->high]; ++ int bits = c->bits; ++ unsigned int code_word = c->code_word; ++ ++ c->high <<= shift; ++ code_word <<= shift; ++ bits += shift; ++ if(bits >= 0 && c->buffer < c->end) { ++ code_word |= bytestream_get_be16(&c->buffer) << bits; ++ bits -= 16; ++ } ++ c->bits = bits; ++ return code_word; ++} ++ ++#if ARCH_ARM ++#include "arm/vpx_arith.h" ++#elif ARCH_X86 ++#include "x86/vpx_arith.h" ++#endif ++ ++#ifndef vpx_rac_get_prob ++#define vpx_rac_get_prob vpx_rac_get_prob ++static av_always_inline int vpx_rac_get_prob(VPXRangeCoder *c, uint8_t prob) ++{ ++ unsigned int code_word = vpx_rac_renorm(c); ++ unsigned int low = 1 + (((c->high - 1) * prob) >> 8); ++ unsigned int low_shift = low << 16; ++ int bit = code_word >= low_shift; ++ ++ c->high = bit ? c->high - low : low; ++ c->code_word = bit ? code_word - low_shift : code_word; ++ ++ return bit; ++} ++#endif ++ ++#ifndef vpx_rac_get_prob_branchy ++// branchy variant, to be used where there's a branch based on the bit decoded ++static av_always_inline int vpx_rac_get_prob_branchy(VPXRangeCoder *c, int prob) ++{ ++ unsigned long code_word = vpx_rac_renorm(c); ++ unsigned low = 1 + (((c->high - 1) * prob) >> 8); ++ unsigned low_shift = low << 16; ++ ++ if (code_word >= low_shift) { ++ c->high -= low; ++ c->code_word = code_word - low_shift; ++ return 1; ++ } ++ ++ c->high = low; ++ c->code_word = code_word; ++ return 0; ++} ++#endif ++ ++static av_always_inline int vpx_rac_get(VPXRangeCoder *c) ++{ ++ unsigned int code_word = vpx_rac_renorm(c); ++ /* equiprobable */ ++ int low = (c->high + 1) >> 1; ++ unsigned int low_shift = low << 16; ++ int bit = code_word >= low_shift; ++ if (bit) { ++ c->high -= low; ++ code_word -= low_shift; ++ } else { ++ c->high = low; ++ } ++ ++ c->code_word = code_word; ++ return bit; ++} ++ ++#endif /* AVCODEC_VPX_RAC_H */ +diff -Naur a/media/ffvpx/libavcodec/x86/dct32.asm b/media/ffvpx/libavcodec/x86/dct32.asm +--- a/media/ffvpx/libavcodec/x86/dct32.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/dct32.asm 2023-04-06 12:49:40.257395051 +0200 +@@ -387,7 +387,7 @@ + %endif + + +-; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in) ++; void ff_dct32_float(FFTSample *out, const FFTSample *in) + %macro DCT32_FUNC 0 + cglobal dct32_float, 2, 3, 16, out, in, tmp + ; pass 1 +@@ -474,18 +474,8 @@ + %endmacro + + %macro LOAD_INV 2 +-%if cpuflag(sse2) + pshufd %1, %2, 0x1b +-%elif cpuflag(sse) +- movaps %1, %2 +- shufps %1, %1, 0x1b +-%endif + %endmacro + +-%if ARCH_X86_32 +-INIT_XMM sse +-DCT32_FUNC +-%endif +- + INIT_XMM sse2 + DCT32_FUNC +diff -Naur a/media/ffvpx/libavcodec/x86/dct_init.c b/media/ffvpx/libavcodec/x86/dct_init.c +--- a/media/ffvpx/libavcodec/x86/dct_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/dct_init.c 2023-04-06 12:49:40.257395051 +0200 +@@ -22,7 +22,6 @@ + #include "libavutil/x86/cpu.h" + #include "libavcodec/dct.h" + +-void ff_dct32_float_sse(FFTSample *out, const FFTSample *in); + void ff_dct32_float_sse2(FFTSample *out, const FFTSample *in); + void ff_dct32_float_avx(FFTSample *out, const FFTSample *in); + +@@ -30,10 +29,6 @@ + { + int cpu_flags = av_get_cpu_flags(); + +-#if ARCH_X86_32 +- if (EXTERNAL_SSE(cpu_flags)) +- s->dct32 = ff_dct32_float_sse; +-#endif + if (EXTERNAL_SSE2(cpu_flags)) + s->dct32 = ff_dct32_float_sse2; + if (EXTERNAL_AVX_FAST(cpu_flags)) +diff -Naur a/media/ffvpx/libavcodec/x86/fdct.c b/media/ffvpx/libavcodec/x86/fdct.c +--- a/media/ffvpx/libavcodec/x86/fdct.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/fdct.c 2023-04-06 12:49:40.257395051 +0200 +@@ -30,12 +30,14 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "libavutil/common.h" ++#include "config.h" ++#include "libavutil/attributes.h" ++#include "libavutil/macros.h" + #include "libavutil/mem_internal.h" + #include "libavutil/x86/asm.h" + #include "fdct.h" + +-#if HAVE_MMX_INLINE ++#if HAVE_SSE2_INLINE + + ////////////////////////////////////////////////////////////////////// + // +@@ -69,8 +71,6 @@ + + DECLARE_ALIGNED(16, static const int16_t, fdct_one_corr)[8] = { X8(1) }; + +-DECLARE_ALIGNED(8, static const int32_t, fdct_r_row)[2] = {RND_FRW_ROW, RND_FRW_ROW }; +- + static const struct + { + DECLARE_ALIGNED(16, const int32_t, fdct_r_row_sse2)[4]; +@@ -80,80 +80,6 @@ + }}; + //DECLARE_ALIGNED(16, static const long, fdct_r_row_sse2)[4] = {RND_FRW_ROW, RND_FRW_ROW, RND_FRW_ROW, RND_FRW_ROW}; + +-DECLARE_ALIGNED(8, static const int16_t, tab_frw_01234567)[] = { // forward_dct coeff table +- 16384, 16384, 22725, 19266, +- 16384, 16384, 12873, 4520, +- 21407, 8867, 19266, -4520, +- -8867, -21407, -22725, -12873, +- 16384, -16384, 12873, -22725, +- -16384, 16384, 4520, 19266, +- 8867, -21407, 4520, -12873, +- 21407, -8867, 19266, -22725, +- +- 22725, 22725, 31521, 26722, +- 22725, 22725, 17855, 6270, +- 29692, 12299, 26722, -6270, +- -12299, -29692, -31521, -17855, +- 22725, -22725, 17855, -31521, +- -22725, 22725, 6270, 26722, +- 12299, -29692, 6270, -17855, +- 29692, -12299, 26722, -31521, +- +- 21407, 21407, 29692, 25172, +- 21407, 21407, 16819, 5906, +- 27969, 11585, 25172, -5906, +- -11585, -27969, -29692, -16819, +- 21407, -21407, 16819, -29692, +- -21407, 21407, 5906, 25172, +- 11585, -27969, 5906, -16819, +- 27969, -11585, 25172, -29692, +- +- 19266, 19266, 26722, 22654, +- 19266, 19266, 15137, 5315, +- 25172, 10426, 22654, -5315, +- -10426, -25172, -26722, -15137, +- 19266, -19266, 15137, -26722, +- -19266, 19266, 5315, 22654, +- 10426, -25172, 5315, -15137, +- 25172, -10426, 22654, -26722, +- +- 16384, 16384, 22725, 19266, +- 16384, 16384, 12873, 4520, +- 21407, 8867, 19266, -4520, +- -8867, -21407, -22725, -12873, +- 16384, -16384, 12873, -22725, +- -16384, 16384, 4520, 19266, +- 8867, -21407, 4520, -12873, +- 21407, -8867, 19266, -22725, +- +- 19266, 19266, 26722, 22654, +- 19266, 19266, 15137, 5315, +- 25172, 10426, 22654, -5315, +- -10426, -25172, -26722, -15137, +- 19266, -19266, 15137, -26722, +- -19266, 19266, 5315, 22654, +- 10426, -25172, 5315, -15137, +- 25172, -10426, 22654, -26722, +- +- 21407, 21407, 29692, 25172, +- 21407, 21407, 16819, 5906, +- 27969, 11585, 25172, -5906, +- -11585, -27969, -29692, -16819, +- 21407, -21407, 16819, -29692, +- -21407, 21407, 5906, 25172, +- 11585, -27969, 5906, -16819, +- 27969, -11585, 25172, -29692, +- +- 22725, 22725, 31521, 26722, +- 22725, 22725, 17855, 6270, +- 29692, 12299, 26722, -6270, +- -12299, -29692, -31521, -17855, +- 22725, -22725, 17855, -31521, +- -22725, 22725, 6270, 26722, +- 12299, -29692, 6270, -17855, +- 29692, -12299, 26722, -31521, +-}; +- + static const struct + { + DECLARE_ALIGNED(16, const int16_t, tab_frw_01234567_sse2)[256]; +@@ -373,7 +299,6 @@ + "r" (out + offset), "r" (ocos_4_16)); \ + } + +-FDCT_COL(mmx, mm, movq) + FDCT_COL(sse2, xmm, movdqa) + + static av_always_inline void fdct_row_sse2(const int16_t *in, int16_t *out) +@@ -441,148 +366,6 @@ + ); + } + +-static av_always_inline void fdct_row_mmxext(const int16_t *in, int16_t *out, +- const int16_t *table) +-{ +- __asm__ volatile ( +- "pshufw $0x1B, 8(%0), %%mm5 \n\t" +- "movq (%0), %%mm0 \n\t" +- "movq %%mm0, %%mm1 \n\t" +- "paddsw %%mm5, %%mm0 \n\t" +- "psubsw %%mm5, %%mm1 \n\t" +- "movq %%mm0, %%mm2 \n\t" +- "punpckldq %%mm1, %%mm0 \n\t" +- "punpckhdq %%mm1, %%mm2 \n\t" +- "movq (%1), %%mm1 \n\t" +- "movq 8(%1), %%mm3 \n\t" +- "movq 16(%1), %%mm4 \n\t" +- "movq 24(%1), %%mm5 \n\t" +- "movq 32(%1), %%mm6 \n\t" +- "movq 40(%1), %%mm7 \n\t" +- "pmaddwd %%mm0, %%mm1 \n\t" +- "pmaddwd %%mm2, %%mm3 \n\t" +- "pmaddwd %%mm0, %%mm4 \n\t" +- "pmaddwd %%mm2, %%mm5 \n\t" +- "pmaddwd %%mm0, %%mm6 \n\t" +- "pmaddwd %%mm2, %%mm7 \n\t" +- "pmaddwd 48(%1), %%mm0 \n\t" +- "pmaddwd 56(%1), %%mm2 \n\t" +- "paddd %%mm1, %%mm3 \n\t" +- "paddd %%mm4, %%mm5 \n\t" +- "paddd %%mm6, %%mm7 \n\t" +- "paddd %%mm0, %%mm2 \n\t" +- "movq (%2), %%mm0 \n\t" +- "paddd %%mm0, %%mm3 \n\t" +- "paddd %%mm0, %%mm5 \n\t" +- "paddd %%mm0, %%mm7 \n\t" +- "paddd %%mm0, %%mm2 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm3 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm5 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm7 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm2 \n\t" +- "packssdw %%mm5, %%mm3 \n\t" +- "packssdw %%mm2, %%mm7 \n\t" +- "movq %%mm3, (%3) \n\t" +- "movq %%mm7, 8(%3) \n\t" +- : +- : "r" (in), "r" (table), "r" (fdct_r_row), "r" (out)); +-} +- +-static av_always_inline void fdct_row_mmx(const int16_t *in, int16_t *out, const int16_t *table) +-{ +- //FIXME reorder (I do not have an old MMX-only CPU here to benchmark ...) +- __asm__ volatile( +- "movd 12(%0), %%mm1 \n\t" +- "punpcklwd 8(%0), %%mm1 \n\t" +- "movq %%mm1, %%mm2 \n\t" +- "psrlq $0x20, %%mm1 \n\t" +- "movq 0(%0), %%mm0 \n\t" +- "punpcklwd %%mm2, %%mm1 \n\t" +- "movq %%mm0, %%mm5 \n\t" +- "paddsw %%mm1, %%mm0 \n\t" +- "psubsw %%mm1, %%mm5 \n\t" +- "movq %%mm0, %%mm2 \n\t" +- "punpckldq %%mm5, %%mm0 \n\t" +- "punpckhdq %%mm5, %%mm2 \n\t" +- "movq 0(%1), %%mm1 \n\t" +- "movq 8(%1), %%mm3 \n\t" +- "movq 16(%1), %%mm4 \n\t" +- "movq 24(%1), %%mm5 \n\t" +- "movq 32(%1), %%mm6 \n\t" +- "movq 40(%1), %%mm7 \n\t" +- "pmaddwd %%mm0, %%mm1 \n\t" +- "pmaddwd %%mm2, %%mm3 \n\t" +- "pmaddwd %%mm0, %%mm4 \n\t" +- "pmaddwd %%mm2, %%mm5 \n\t" +- "pmaddwd %%mm0, %%mm6 \n\t" +- "pmaddwd %%mm2, %%mm7 \n\t" +- "pmaddwd 48(%1), %%mm0 \n\t" +- "pmaddwd 56(%1), %%mm2 \n\t" +- "paddd %%mm1, %%mm3 \n\t" +- "paddd %%mm4, %%mm5 \n\t" +- "paddd %%mm6, %%mm7 \n\t" +- "paddd %%mm0, %%mm2 \n\t" +- "movq (%2), %%mm0 \n\t" +- "paddd %%mm0, %%mm3 \n\t" +- "paddd %%mm0, %%mm5 \n\t" +- "paddd %%mm0, %%mm7 \n\t" +- "paddd %%mm0, %%mm2 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm3 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm5 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm7 \n\t" +- "psrad $"S(SHIFT_FRW_ROW)", %%mm2 \n\t" +- "packssdw %%mm5, %%mm3 \n\t" +- "packssdw %%mm2, %%mm7 \n\t" +- "movq %%mm3, 0(%3) \n\t" +- "movq %%mm7, 8(%3) \n\t" +- : +- : "r" (in), "r" (table), "r" (fdct_r_row), "r" (out)); +-} +- +-void ff_fdct_mmx(int16_t *block) +-{ +- DECLARE_ALIGNED(8, int64_t, align_tmp)[16]; +- int16_t * block1= (int16_t*)align_tmp; +- const int16_t *table= tab_frw_01234567; +- int i; +- +- fdct_col_mmx(block, block1, 0); +- fdct_col_mmx(block, block1, 4); +- +- for(i=8;i>0;i--) { +- fdct_row_mmx(block1, block, table); +- block1 += 8; +- table += 32; +- block += 8; +- } +-} +- +-#endif /* HAVE_MMX_INLINE */ +- +-#if HAVE_MMXEXT_INLINE +- +-void ff_fdct_mmxext(int16_t *block) +-{ +- DECLARE_ALIGNED(8, int64_t, align_tmp)[16]; +- int16_t *block1= (int16_t*)align_tmp; +- const int16_t *table= tab_frw_01234567; +- int i; +- +- fdct_col_mmx(block, block1, 0); +- fdct_col_mmx(block, block1, 4); +- +- for(i=8;i>0;i--) { +- fdct_row_mmxext(block1, block, table); +- block1 += 8; +- table += 32; +- block += 8; +- } +-} +- +-#endif /* HAVE_MMXEXT_INLINE */ +- +-#if HAVE_SSE2_INLINE +- + void ff_fdct_sse2(int16_t *block) + { + DECLARE_ALIGNED(16, int64_t, align_tmp)[16]; +diff -Naur a/media/ffvpx/libavcodec/x86/fdctdsp_init.c b/media/ffvpx/libavcodec/x86/fdctdsp_init.c +--- a/media/ffvpx/libavcodec/x86/fdctdsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/fdctdsp_init.c 2023-04-06 12:49:40.257395051 +0200 +@@ -31,12 +31,6 @@ + + if (!high_bit_depth) { + if ((dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX)) { +- if (INLINE_MMX(cpu_flags)) +- c->fdct = ff_fdct_mmx; +- +- if (INLINE_MMXEXT(cpu_flags)) +- c->fdct = ff_fdct_mmxext; +- + if (INLINE_SSE2(cpu_flags)) + c->fdct = ff_fdct_sse2; + } +diff -Naur a/media/ffvpx/libavcodec/x86/fdct.h b/media/ffvpx/libavcodec/x86/fdct.h +--- a/media/ffvpx/libavcodec/x86/fdct.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/fdct.h 2023-04-06 12:49:40.257395051 +0200 +@@ -21,8 +21,6 @@ + + #include + +-void ff_fdct_mmx(int16_t *block); +-void ff_fdct_mmxext(int16_t *block); + void ff_fdct_sse2(int16_t *block); + + #endif /* AVCODEC_X86_FDCT_H */ +diff -Naur a/media/ffvpx/libavcodec/x86/fft.asm b/media/ffvpx/libavcodec/x86/fft.asm +--- a/media/ffvpx/libavcodec/x86/fft.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/fft.asm 2023-04-06 12:50:24.493176583 +0200 +@@ -1,5 +1,5 @@ + ;****************************************************************************** +-;* FFT transform with SSE/3DNow optimizations ++;* FFT transform with SSE/AVX optimizations + ;* Copyright (c) 2008 Loren Merritt + ;* Copyright (c) 2011 Vitor Sessak + ;* +@@ -92,29 +92,6 @@ + + SECTION .text + +-%macro T2_3DNOW 4 ; z0, z1, mem0, mem1 +- mova %1, %3 +- mova %2, %1 +- pfadd %1, %4 +- pfsub %2, %4 +-%endmacro +- +-%macro T4_3DNOW 6 ; z0, z1, z2, z3, tmp0, tmp1 +- mova %5, %3 +- pfsub %3, %4 +- pfadd %5, %4 ; {t6,t5} +- pxor %3, [ps_m1p1] ; {t8,t7} +- mova %6, %1 +- movd [r0+12], %3 +- punpckhdq %3, [r0+8] +- pfadd %1, %5 ; {r0,i0} +- pfsub %6, %5 ; {r2,i2} +- mova %4, %2 +- pfadd %2, %3 ; {r1,i1} +- pfsub %4, %3 ; {r3,i3} +- SWAP %3, %6 +-%endmacro +- + ; in: %1 = {r0,i0,r2,i2,r4,i4,r6,i6} + ; %2 = {r1,i1,r3,i3,r5,i5,r7,i7} + ; %3, %4, %5 tmp +@@ -199,7 +176,7 @@ + vextractf128 %4 %+ H(%5), %3, 0 + vextractf128 %4(%5 + 1), %2, 1 + vextractf128 %4 %+ H(%5 + 1), %3, 1 +-%elif cpuflag(sse) || cpuflag(3dnow) ++%elif cpuflag(sse) + mova %3, %2 + unpcklps %2, %1 + unpckhps %3, %1 +@@ -310,12 +287,6 @@ + %endif + %endmacro + +-%macro PUNPCK 3 +- mova %3, %1 +- punpckldq %1, %2 +- punpckhdq %3, %2 +-%endmacro +- + %define Z(x) [r0+mmsize*x] + %define Z2(x) [r0+mmsize*x] + %define ZH(x) [r0+mmsize*x+mmsize/2] +@@ -462,68 +433,6 @@ + ret + + +-%macro FFT48_3DNOW 0 +-align 16 +-fft4 %+ SUFFIX: +- T2_3DNOW m0, m1, Z(0), Z(1) +- mova m2, Z(2) +- mova m3, Z(3) +- T4_3DNOW m0, m1, m2, m3, m4, m5 +- PUNPCK m0, m1, m4 +- PUNPCK m2, m3, m5 +- mova Z(0), m0 +- mova Z(1), m4 +- mova Z(2), m2 +- mova Z(3), m5 +- ret +- +-align 16 +-fft8 %+ SUFFIX: +- T2_3DNOW m0, m1, Z(0), Z(1) +- mova m2, Z(2) +- mova m3, Z(3) +- T4_3DNOW m0, m1, m2, m3, m4, m5 +- mova Z(0), m0 +- mova Z(2), m2 +- T2_3DNOW m4, m5, Z(4), Z(5) +- T2_3DNOW m6, m7, Z2(6), Z2(7) +- PSWAPD m0, m5 +- PSWAPD m2, m7 +- pxor m0, [ps_m1p1] +- pxor m2, [ps_m1p1] +- pfsub m5, m0 +- pfadd m7, m2 +- pfmul m5, [ps_root2] +- pfmul m7, [ps_root2] +- T4_3DNOW m1, m3, m5, m7, m0, m2 +- mova Z(5), m5 +- mova Z2(7), m7 +- mova m0, Z(0) +- mova m2, Z(2) +- T4_3DNOW m0, m2, m4, m6, m5, m7 +- PUNPCK m0, m1, m5 +- PUNPCK m2, m3, m7 +- mova Z(0), m0 +- mova Z(1), m5 +- mova Z(2), m2 +- mova Z(3), m7 +- PUNPCK m4, Z(5), m5 +- PUNPCK m6, Z2(7), m7 +- mova Z(4), m4 +- mova Z(5), m5 +- mova Z2(6), m6 +- mova Z2(7), m7 +- ret +-%endmacro +- +-%if ARCH_X86_32 +-INIT_MMX 3dnowext +-FFT48_3DNOW +- +-INIT_MMX 3dnow +-FFT48_3DNOW +-%endif +- + %define Z(x) [zcq + o1q*(x&6) + mmsize*(x&1)] + %define Z2(x) [zcq + o3q + mmsize*(x&1)] + %define ZH(x) [zcq + o1q*(x&6) + mmsize*(x&1) + mmsize/2] +@@ -566,7 +475,7 @@ + mov r0, r1 + mov r1, r3 + FFT_DISPATCH _interleave %+ SUFFIX, r1 +- REP_RET ++ RET + + %endif + +@@ -575,7 +484,7 @@ + DECL_PASS pass_sse, PASS_BIG 1 + DECL_PASS pass_interleave_sse, PASS_BIG 0 + +-%macro FFT_CALC_FUNC 0 ++INIT_XMM sse + cglobal fft_calc, 2,5,8 + mov r3d, [r0 + FFTContext.nbits] + PUSH r1 +@@ -592,36 +501,16 @@ + shl r2, cl + sub r4, r2 + .loop: +-%if mmsize == 8 +- PSWAPD m0, [r4 + r2 + 4] +- mova [r4 + r2 + 4], m0 +-%else + movaps xmm0, [r4 + r2] + movaps xmm1, xmm0 + unpcklps xmm0, [r4 + r2 + 16] + unpckhps xmm1, [r4 + r2 + 16] + movaps [r4 + r2], xmm0 + movaps [r4 + r2 + 16], xmm1 +-%endif + add r2, mmsize*2 + jl .loop + .end: +-%if cpuflag(3dnow) +- femms + RET +-%else +- REP_RET +-%endif +-%endmacro +- +-%if ARCH_X86_32 +-INIT_MMX 3dnow +-FFT_CALC_FUNC +-INIT_MMX 3dnowext +-FFT_CALC_FUNC +-%endif +-INIT_XMM sse +-FFT_CALC_FUNC + + cglobal fft_permute, 2,7,1 + mov r4, [r0 + FFTContext.revtab] +@@ -654,9 +543,9 @@ + movaps [r1 + r2 + 16], xmm1 + add r2, 32 + jl .loopcopy +- REP_RET ++ RET + +-%macro IMDCT_CALC_FUNC 0 ++INIT_XMM sse + cglobal imdct_calc, 3,5,3 + mov r3d, [r0 + FFTContext.mdctsize] + mov r4, [r0 + FFTContext.imdcthalf] +@@ -684,52 +573,17 @@ + neg r2 + mova m2, [ps_neg] + .loop: +-%if mmsize == 8 +- PSWAPD m0, [r1 + r3] +- PSWAPD m1, [r0 + r2] +- pxor m0, m2 +-%else + mova m0, [r1 + r3] + mova m1, [r0 + r2] + shufps m0, m0, 0x1b + shufps m1, m1, 0x1b + xorps m0, m2 +-%endif + mova [r0 + r3], m1 + mova [r1 + r2], m0 + sub r3, mmsize + add r2, mmsize + jl .loop +-%if cpuflag(3dnow) +- femms + RET +-%else +- REP_RET +-%endif +-%endmacro +- +-%if ARCH_X86_32 +-INIT_MMX 3dnow +-IMDCT_CALC_FUNC +-INIT_MMX 3dnowext +-IMDCT_CALC_FUNC +-%endif +- +-INIT_XMM sse +-IMDCT_CALC_FUNC +- +-%if ARCH_X86_32 +-INIT_MMX 3dnow +-%define mulps pfmul +-%define addps pfadd +-%define subps pfsub +-%define unpcklps punpckldq +-%define unpckhps punpckhdq +-DECL_PASS pass_3dnow, PASS_SMALL 1, [wq], [wq+o1q] +-DECL_PASS pass_interleave_3dnow, PASS_BIG 0 +-%define pass_3dnowext pass_3dnow +-%define pass_interleave_3dnowext pass_interleave_3dnow +-%endif + + %ifdef PIC + %define SECTION_REL - $$ +@@ -785,14 +639,6 @@ + INIT_XMM sse + DECL_FFT 5 + DECL_FFT 5, _interleave +-%if ARCH_X86_32 +-INIT_MMX 3dnow +-DECL_FFT 4 +-DECL_FFT 4, _interleave +-INIT_MMX 3dnowext +-DECL_FFT 4 +-DECL_FFT 4, _interleave +-%endif + + INIT_XMM sse + %undef mulps +@@ -802,37 +648,6 @@ + %undef unpckhps + + %macro PREROTATER 5 ;-2*k, 2*k, input+n4, tcos+n8, tsin+n8 +-%if mmsize == 8 ; j*2+2-n4, n4-2-j*2, input+n4, tcos+n8, tsin+n8 +- PSWAPD m0, [%3+%2*4] +- movq m2, [%3+%1*4-8] +- movq m3, m0 +- punpckldq m0, m2 +- punpckhdq m2, m3 +- movd m1, [%4+%1*2-4] ; tcos[j] +- movd m3, [%4+%2*2] ; tcos[n4-j-1] +- punpckldq m1, [%5+%1*2-4] ; tsin[j] +- punpckldq m3, [%5+%2*2] ; tsin[n4-j-1] +- +- mova m4, m0 +- PSWAPD m5, m1 +- pfmul m0, m1 +- pfmul m4, m5 +- mova m6, m2 +- PSWAPD m5, m3 +- pfmul m2, m3 +- pfmul m6, m5 +-%if cpuflag(3dnowext) +- pfpnacc m0, m4 +- pfpnacc m2, m6 +-%else +- SBUTTERFLY dq, 0, 4, 1 +- SBUTTERFLY dq, 2, 6, 3 +- pxor m4, m7 +- pxor m6, m7 +- pfadd m0, m4 +- pfadd m2, m6 +-%endif +-%else + movaps xmm0, [%3+%2*4] + movaps xmm1, [%3+%1*4-0x10] + movaps xmm2, xmm0 +@@ -853,29 +668,15 @@ + movaps xmm0, xmm1 + unpcklps xmm1, xmm2 + unpckhps xmm0, xmm2 +-%endif + %endmacro + + %macro CMUL 6 ;j, xmm0, xmm1, 3, 4, 5 +-%if cpuflag(sse) + mulps m6, %3, [%5+%1] + mulps m7, %2, [%5+%1] + mulps %2, %2, [%6+%1] + mulps %3, %3, [%6+%1] + subps %2, %2, m6 + addps %3, %3, m7 +-%elif cpuflag(3dnow) +- mova m6, [%1+%2*2] +- mova %3, [%1+%2*2+8] +- mova %4, m6 +- mova m7, %3 +- pfmul m6, [%5+%2] +- pfmul %3, [%6+%2] +- pfmul %4, [%6+%2] +- pfmul m7, [%5+%2] +- pfsub %3, m6 +- pfadd %4, m7 +-%endif + %endmacro + + %macro POSROTATESHUF 5 ;j, k, z+n8, tcos+n8, tsin+n8 +@@ -909,7 +710,7 @@ + sub %2, 0x20 + add %1, 0x20 + jl .post +-%elif cpuflag(sse) ++%else + movaps xmm1, [%3+%1*2] + movaps xmm0, [%3+%1*2+0x10] + CMUL %1, xmm0, xmm1, %3, %4, %5 +@@ -931,24 +732,6 @@ + sub %2, 0x10 + add %1, 0x10 + jl .post +-%elif cpuflag(3dnow) +- CMUL %3, %1, m0, m1, %4, %5 +- CMUL %3, %2, m2, m3, %4, %5 +- movd [%3+%1*2+ 0], m0 +- movd [%3+%2*2+12], m1 +- movd [%3+%2*2+ 0], m2 +- movd [%3+%1*2+12], m3 +- psrlq m0, 32 +- psrlq m1, 32 +- psrlq m2, 32 +- psrlq m3, 32 +- movd [%3+%1*2+ 8], m0 +- movd [%3+%2*2+ 4], m1 +- movd [%3+%2*2+ 8], m2 +- movd [%3+%1*2+ 4], m3 +- sub %2, 8 +- add %1, 8 +- jl .post + %endif + %endmacro + +@@ -981,39 +764,21 @@ + push rrevtab + %endif + +-%if mmsize == 8 +- sub r3, 2 +-%else + sub r3, 4 +-%endif +-%if ARCH_X86_64 || mmsize == 8 ++%if ARCH_X86_64 + xor r4, r4 + sub r4, r3 + %endif +-%if notcpuflag(3dnowext) && mmsize == 8 +- movd m7, [ps_neg] +-%endif + .pre: + %if ARCH_X86_64 == 0 + ;unspill +-%if mmsize != 8 + xor r4, r4 + sub r4, r3 +-%endif + mov rtcos, [esp+8] + mov rtsin, [esp+4] + %endif + + PREROTATER r4, r3, r2, rtcos, rtsin +-%if mmsize == 8 +- mov r6, [esp] ; rrevtab = ptr+n8 +- movzx r5, word [rrevtab+r4-2] ; rrevtab[j] +- movzx r6, word [rrevtab+r3] ; rrevtab[n4-j-1] +- mova [r1+r5*8], m0 +- mova [r1+r6*8], m2 +- add r4, 2 +- sub r3, 2 +-%else + %if ARCH_X86_64 + movzx r5, word [rrevtab+r4-4] + movzx r6, word [rrevtab+r4-2] +@@ -1036,7 +801,6 @@ + movhps [r1+r4*8], xmm1 + %endif + sub r3, 4 +-%endif + jns .pre + + mov r5, r0 +@@ -1062,22 +826,11 @@ + %if ARCH_X86_64 == 0 + add esp, 12 + %endif +-%if mmsize == 8 +- femms +-%endif + RET + %endmacro + + DECL_IMDCT + +-%if ARCH_X86_32 +-INIT_MMX 3dnow +-DECL_IMDCT +- +-INIT_MMX 3dnowext +-DECL_IMDCT +-%endif +- + INIT_YMM avx + + %if HAVE_AVX_EXTERNAL +diff -Naur a/media/ffvpx/libavcodec/x86/fft.h b/media/ffvpx/libavcodec/x86/fft.h +--- a/media/ffvpx/libavcodec/x86/fft.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/fft.h 2023-04-06 12:49:40.257395051 +0200 +@@ -24,13 +24,7 @@ + void ff_fft_permute_sse(FFTContext *s, FFTComplex *z); + void ff_fft_calc_avx(FFTContext *s, FFTComplex *z); + void ff_fft_calc_sse(FFTContext *s, FFTComplex *z); +-void ff_fft_calc_3dnow(FFTContext *s, FFTComplex *z); +-void ff_fft_calc_3dnowext(FFTContext *s, FFTComplex *z); + +-void ff_imdct_calc_3dnow(FFTContext *s, FFTSample *output, const FFTSample *input); +-void ff_imdct_half_3dnow(FFTContext *s, FFTSample *output, const FFTSample *input); +-void ff_imdct_calc_3dnowext(FFTContext *s, FFTSample *output, const FFTSample *input); +-void ff_imdct_half_3dnowext(FFTContext *s, FFTSample *output, const FFTSample *input); + void ff_imdct_calc_sse(FFTContext *s, FFTSample *output, const FFTSample *input); + void ff_imdct_half_sse(FFTContext *s, FFTSample *output, const FFTSample *input); + void ff_imdct_half_avx(FFTContext *s, FFTSample *output, const FFTSample *input); +diff -Naur a/media/ffvpx/libavcodec/x86/fft_init.c b/media/ffvpx/libavcodec/x86/fft_init.c +--- a/media/ffvpx/libavcodec/x86/fft_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/fft_init.c 2023-04-06 12:49:40.257395051 +0200 +@@ -31,20 +31,6 @@ + if (s->nbits > 16) + return; + +-#if ARCH_X86_32 +- if (EXTERNAL_AMD3DNOW(cpu_flags)) { +- s->imdct_calc = ff_imdct_calc_3dnow; +- s->imdct_half = ff_imdct_half_3dnow; +- s->fft_calc = ff_fft_calc_3dnow; +- } +- +- if (EXTERNAL_AMD3DNOWEXT(cpu_flags)) { +- s->imdct_calc = ff_imdct_calc_3dnowext; +- s->imdct_half = ff_imdct_half_3dnowext; +- s->fft_calc = ff_fft_calc_3dnowext; +- } +-#endif /* ARCH_X86_32 */ +- + if (EXTERNAL_SSE(cpu_flags)) { + s->imdct_calc = ff_imdct_calc_sse; + s->imdct_half = ff_imdct_half_sse; +diff -Naur a/media/ffvpx/libavcodec/x86/flacdsp.asm b/media/ffvpx/libavcodec/x86/flacdsp.asm +--- a/media/ffvpx/libavcodec/x86/flacdsp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/flacdsp.asm 2023-04-06 12:50:24.493176583 +0200 +@@ -23,6 +23,10 @@ + + %include "libavutil/x86/x86util.asm" + ++SECTION_RODATA ++ ++vector: db 0,1,4,5,8,9,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,4,5,8,9,12,13, ++ + SECTION .text + + %macro PMACSDQL 5 +@@ -75,7 +79,7 @@ + movd [decodedq+4], m1 + jg .loop_sample + .ret: +- REP_RET ++ RET + %endmacro + + %if HAVE_XOP_EXTERNAL +@@ -89,6 +93,9 @@ + ;---------------------------------------------------------------------------------- + %macro FLAC_DECORRELATE_16 3-4 + cglobal flac_decorrelate_%1_16, 2, 4, 4, out, in0, in1, len ++%ifidn %1, indep2 ++ VBROADCASTI128 m2, [vector] ++%endif + %if ARCH_X86_32 + mov lend, lenm + %endif +@@ -112,15 +119,21 @@ + %endif + %ifnidn %1, indep2 + p%4d m2, m0, m1 ++ packssdw m%2, m%2 ++ packssdw m%3, m%3 ++ punpcklwd m%2, m%3 ++ psllw m%2, m3 ++%else ++ pslld m%2, m3 ++ pslld m%3, m3 ++ pshufb m%2, m%2, m2 ++ pshufb m%3, m%3, m2 ++ punpcklwd m%2, m%3 + %endif +- packssdw m%2, m%2 +- packssdw m%3, m%3 +- punpcklwd m%2, m%3 +- psllw m%2, m3 + mova [outq + lenq], m%2 + add lenq, 16 + jl .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse2 +@@ -164,7 +177,7 @@ + add outq, mmsize*2 + sub lend, mmsize/4 + jg .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse2 +@@ -289,10 +302,10 @@ + add outq, mmsize*REPCOUNT + sub lend, mmsize/4 + jg .loop +- REP_RET ++ RET + %endmacro + +-INIT_XMM sse2 ++INIT_XMM ssse3 + FLAC_DECORRELATE_16 indep2, 0, 1 ; Reuse stereo 16bits macro + FLAC_DECORRELATE_INDEP 32, 2, 3, d + FLAC_DECORRELATE_INDEP 16, 4, 3, w +diff -Naur a/media/ffvpx/libavcodec/x86/flacdsp_init.c b/media/ffvpx/libavcodec/x86/flacdsp_init.c +--- a/media/ffvpx/libavcodec/x86/flacdsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/flacdsp_init.c 2023-04-06 12:50:06.975471215 +0200 +@@ -18,6 +18,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/attributes.h" + #include "libavcodec/flacdsp.h" + #include "libavutil/x86/cpu.h" + #include "config.h" +@@ -27,15 +28,15 @@ + void ff_flac_lpc_32_xop(int32_t *samples, const int coeffs[32], int order, + int qlevel, int len); + +-void ff_flac_enc_lpc_16_sse4(int32_t *, const int32_t *, int, int, const int32_t *,int); +- + #define DECORRELATE_FUNCS(fmt, opt) \ + void ff_flac_decorrelate_ls_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ + int len, int shift); \ + void ff_flac_decorrelate_rs_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ + int len, int shift); \ + void ff_flac_decorrelate_ms_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ +- int len, int shift); \ ++ int len, int shift) ++ ++#define DECORRELATE_IFUNCS(fmt, opt) \ + void ff_flac_decorrelate_indep2_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ + int len, int shift); \ + void ff_flac_decorrelate_indep4_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ +@@ -49,39 +50,46 @@ + DECORRELATE_FUNCS(16, avx); + DECORRELATE_FUNCS(32, sse2); + DECORRELATE_FUNCS(32, avx); ++DECORRELATE_IFUNCS(16, ssse3); ++DECORRELATE_IFUNCS(16, avx); ++DECORRELATE_IFUNCS(32, ssse3); ++DECORRELATE_IFUNCS(32, avx); + +-av_cold void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, +- int bps) ++av_cold void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels) + { + #if HAVE_X86ASM + int cpu_flags = av_get_cpu_flags(); + +-#if CONFIG_FLAC_DECODER + if (EXTERNAL_SSE2(cpu_flags)) { + if (fmt == AV_SAMPLE_FMT_S16) { ++ c->decorrelate[1] = ff_flac_decorrelate_ls_16_sse2; ++ c->decorrelate[2] = ff_flac_decorrelate_rs_16_sse2; ++ c->decorrelate[3] = ff_flac_decorrelate_ms_16_sse2; ++ } else if (fmt == AV_SAMPLE_FMT_S32) { ++ c->decorrelate[1] = ff_flac_decorrelate_ls_32_sse2; ++ c->decorrelate[2] = ff_flac_decorrelate_rs_32_sse2; ++ c->decorrelate[3] = ff_flac_decorrelate_ms_32_sse2; ++ } ++ } ++ if (EXTERNAL_SSSE3(cpu_flags)) { ++ if (fmt == AV_SAMPLE_FMT_S16) { + if (channels == 2) +- c->decorrelate[0] = ff_flac_decorrelate_indep2_16_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep2_16_ssse3; + else if (channels == 4) +- c->decorrelate[0] = ff_flac_decorrelate_indep4_16_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep4_16_ssse3; + else if (channels == 6) +- c->decorrelate[0] = ff_flac_decorrelate_indep6_16_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep6_16_ssse3; + else if (ARCH_X86_64 && channels == 8) +- c->decorrelate[0] = ff_flac_decorrelate_indep8_16_sse2; +- c->decorrelate[1] = ff_flac_decorrelate_ls_16_sse2; +- c->decorrelate[2] = ff_flac_decorrelate_rs_16_sse2; +- c->decorrelate[3] = ff_flac_decorrelate_ms_16_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep8_16_ssse3; + } else if (fmt == AV_SAMPLE_FMT_S32) { + if (channels == 2) +- c->decorrelate[0] = ff_flac_decorrelate_indep2_32_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep2_32_ssse3; + else if (channels == 4) +- c->decorrelate[0] = ff_flac_decorrelate_indep4_32_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep4_32_ssse3; + else if (channels == 6) +- c->decorrelate[0] = ff_flac_decorrelate_indep6_32_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep6_32_ssse3; + else if (ARCH_X86_64 && channels == 8) +- c->decorrelate[0] = ff_flac_decorrelate_indep8_32_sse2; +- c->decorrelate[1] = ff_flac_decorrelate_ls_32_sse2; +- c->decorrelate[2] = ff_flac_decorrelate_rs_32_sse2; +- c->decorrelate[3] = ff_flac_decorrelate_ms_32_sse2; ++ c->decorrelate[0] = ff_flac_decorrelate_indep8_32_ssse3; + } + } + if (EXTERNAL_SSE4(cpu_flags)) { +@@ -103,13 +111,5 @@ + if (EXTERNAL_XOP(cpu_flags)) { + c->lpc32 = ff_flac_lpc_32_xop; + } +-#endif +- +-#if CONFIG_FLAC_ENCODER +- if (EXTERNAL_SSE4(cpu_flags)) { +- if (CONFIG_GPL) +- c->lpc16_encode = ff_flac_enc_lpc_16_sse4; +- } +-#endif + #endif /* HAVE_X86ASM */ + } +diff -Naur a/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm b/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm +--- a/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm 2023-04-06 12:50:24.493176583 +0200 +@@ -327,19 +327,14 @@ + lea r0, [r0+r1*2] + dec r2d + jg .loop +- REP_RET ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_predict_8x8_dc_10(pixel *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + %macro MOV8 2-3 + ; sort of a hack, but it works +-%if mmsize==8 +- movq [%1+0], %2 +- movq [%1+8], %3 +-%else + movdqa [%1], %2 +-%endif + %endmacro + + %macro PRED8x8_DC 1 +@@ -348,17 +343,9 @@ + pxor m4, m4 + movq m0, [r0+0] + movq m1, [r0+8] +-%if mmsize==16 + punpcklwd m0, m1 + movhlps m1, m0 + paddw m0, m1 +-%else +- pshufw m2, m0, 00001110b +- pshufw m3, m1, 00001110b +- paddw m0, m2 +- paddw m1, m3 +- punpcklwd m0, m1 +-%endif + %1 m2, m0, 00001110b + paddw m0, m2 + +@@ -389,17 +376,10 @@ + paddw m0, m3 + psrlw m0, 2 + pavgw m0, m4 ; s0+s2, s1, s3, s1+s3 +-%if mmsize==16 + punpcklwd m0, m0 + pshufd m3, m0, 11111010b + punpckldq m0, m0 + SWAP 0,1 +-%else +- pshufw m1, m0, 0x00 +- pshufw m2, m0, 0x55 +- pshufw m3, m0, 0xaa +- pshufw m4, m0, 0xff +-%endif + MOV8 r0+r1*1, m1, m2 + MOV8 r0+r1*2, m1, m2 + MOV8 r0+r5*1, m1, m2 +@@ -411,8 +391,6 @@ + RET + %endmacro + +-INIT_MMX mmxext +-PRED8x8_DC pshufw + INIT_XMM sse2 + PRED8x8_DC pshuflw + +@@ -503,14 +481,14 @@ + add r0, r1 + dec r2d + jg .loop +- REP_RET ++ RET + + + ;----------------------------------------------------------------------------- + ; void ff_pred8x8l_128_dc_10(pixel *src, int has_topleft, int has_topright, + ; ptrdiff_t stride) + ;----------------------------------------------------------------------------- +-%macro PRED8x8L_128_DC 0 ++INIT_XMM sse2 + cglobal pred8x8l_128_dc_10, 4, 4 + mova m0, [pw_512] ; (1<<(BIT_DEPTH-1)) + lea r1, [r3*3] +@@ -524,12 +502,6 @@ + MOV8 r2+r3*2, m0, m0 + MOV8 r2+r1*1, m0, m0 + RET +-%endmacro +- +-INIT_MMX mmxext +-PRED8x8L_128_DC +-INIT_XMM sse2 +-PRED8x8L_128_DC + + ;----------------------------------------------------------------------------- + ; void ff_pred8x8l_top_dc_10(pixel *src, int has_topleft, int has_topright, +@@ -1008,40 +980,26 @@ + %macro MOV16 3-5 + mova [%1+ 0], %2 + mova [%1+mmsize], %3 +-%if mmsize==8 +- mova [%1+ 16], %4 +- mova [%1+ 24], %5 +-%endif + %endmacro + +-%macro PRED16x16_VERTICAL 0 ++INIT_XMM sse2 + cglobal pred16x16_vertical_10, 2, 3 + sub r0, r1 + mov r2d, 8 + mova m0, [r0+ 0] + mova m1, [r0+mmsize] +-%if mmsize==8 +- mova m2, [r0+16] +- mova m3, [r0+24] +-%endif + .loop: + MOV16 r0+r1*1, m0, m1, m2, m3 + MOV16 r0+r1*2, m0, m1, m2, m3 + lea r0, [r0+r1*2] + dec r2d + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PRED16x16_VERTICAL +-INIT_XMM sse2 +-PRED16x16_VERTICAL ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred16x16_horizontal_10(pixel *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- +-%macro PRED16x16_HORIZONTAL 0 ++INIT_XMM sse2 + cglobal pred16x16_horizontal_10, 2, 3 + mov r2d, 8 + .vloop: +@@ -1054,27 +1012,17 @@ + lea r0, [r0+r1*2] + dec r2d + jg .vloop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PRED16x16_HORIZONTAL +-INIT_XMM sse2 +-PRED16x16_HORIZONTAL ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred16x16_dc_10(pixel *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- +-%macro PRED16x16_DC 0 ++INIT_XMM sse2 + cglobal pred16x16_dc_10, 2, 6 + mov r5, r0 + sub r0, r1 + mova m0, [r0+0] + paddw m0, [r0+mmsize] +-%if mmsize==8 +- paddw m0, [r0+16] +- paddw m0, [r0+24] +-%endif + HADDW m0, m2 + + lea r0, [r0+r1-2] +@@ -1100,26 +1048,16 @@ + lea r5, [r5+r1*2] + dec r3d + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PRED16x16_DC +-INIT_XMM sse2 +-PRED16x16_DC ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred16x16_top_dc_10(pixel *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- +-%macro PRED16x16_TOP_DC 0 ++INIT_XMM sse2 + cglobal pred16x16_top_dc_10, 2, 3 + sub r0, r1 + mova m0, [r0+0] + paddw m0, [r0+mmsize] +-%if mmsize==8 +- paddw m0, [r0+16] +- paddw m0, [r0+24] +-%endif + HADDW m0, m2 + + SPLATW m0, m0 +@@ -1132,18 +1070,12 @@ + lea r0, [r0+r1*2] + dec r2d + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PRED16x16_TOP_DC +-INIT_XMM sse2 +-PRED16x16_TOP_DC ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred16x16_left_dc_10(pixel *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- +-%macro PRED16x16_LEFT_DC 0 ++INIT_XMM sse2 + cglobal pred16x16_left_dc_10, 2, 6 + mov r5, r0 + +@@ -1169,18 +1101,12 @@ + lea r5, [r5+r1*2] + dec r3d + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PRED16x16_LEFT_DC +-INIT_XMM sse2 +-PRED16x16_LEFT_DC ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred16x16_128_dc_10(pixel *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- +-%macro PRED16x16_128_DC 0 ++INIT_XMM sse2 + cglobal pred16x16_128_dc_10, 2,3 + mova m0, [pw_512] + mov r2d, 8 +@@ -1190,10 +1116,4 @@ + lea r0, [r0+r1*2] + dec r2d + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PRED16x16_128_DC +-INIT_XMM sse2 +-PRED16x16_128_DC ++ RET +diff -Naur a/media/ffvpx/libavcodec/x86/h264_intrapred.asm b/media/ffvpx/libavcodec/x86/h264_intrapred.asm +--- a/media/ffvpx/libavcodec/x86/h264_intrapred.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/h264_intrapred.asm 2023-04-06 12:50:24.493176583 +0200 +@@ -48,22 +48,6 @@ + ; void ff_pred16x16_vertical_8(uint8_t *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-INIT_MMX mmx +-cglobal pred16x16_vertical_8, 2,3 +- sub r0, r1 +- mov r2, 8 +- movq mm0, [r0+0] +- movq mm1, [r0+8] +-.loop: +- movq [r0+r1*1+0], mm0 +- movq [r0+r1*1+8], mm1 +- movq [r0+r1*2+0], mm0 +- movq [r0+r1*2+8], mm1 +- lea r0, [r0+r1*2] +- dec r2 +- jg .loop +- REP_RET +- + INIT_XMM sse + cglobal pred16x16_vertical_8, 2,3 + sub r0, r1 +@@ -78,7 +62,7 @@ + lea r0, [r0+r1*2] + dec r2 + jg .loop +- REP_RET ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred16x16_horizontal_8(uint8_t *src, ptrdiff_t stride) +@@ -111,11 +95,9 @@ + lea r0, [r0+r1*2] + dec r2 + jg .loop +- REP_RET ++ RET + %endmacro + +-INIT_MMX mmx +-PRED16x16_H + INIT_MMX mmxext + PRED16x16_H + INIT_XMM ssse3 +@@ -154,14 +136,6 @@ + %endif + SPLATB_REG m0, r2, m1 + +-%if mmsize==8 +- mov r3d, 8 +-.loop: +- mova [r4+r1*0+0], m0 +- mova [r4+r1*0+8], m0 +- mova [r4+r1*1+0], m0 +- mova [r4+r1*1+8], m0 +-%else + mov r3d, 4 + .loop: + mova [r4+r1*0], m0 +@@ -169,15 +143,12 @@ + lea r4, [r4+r1*2] + mova [r4+r1*0], m0 + mova [r4+r1*1], m0 +-%endif + lea r4, [r4+r1*2] + dec r3d + jg .loop +- REP_RET ++ RET + %endmacro + +-INIT_MMX mmxext +-PRED16x16_DC + INIT_XMM sse2 + PRED16x16_DC + INIT_XMM ssse3 +@@ -187,47 +158,6 @@ + ; void ff_pred16x16_tm_vp8_8(uint8_t *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-%macro PRED16x16_TM 0 +-cglobal pred16x16_tm_vp8_8, 2,5 +- sub r0, r1 +- pxor mm7, mm7 +- movq mm0, [r0+0] +- movq mm2, [r0+8] +- movq mm1, mm0 +- movq mm3, mm2 +- punpcklbw mm0, mm7 +- punpckhbw mm1, mm7 +- punpcklbw mm2, mm7 +- punpckhbw mm3, mm7 +- movzx r3d, byte [r0-1] +- mov r4d, 16 +-.loop: +- movzx r2d, byte [r0+r1-1] +- sub r2d, r3d +- movd mm4, r2d +- SPLATW mm4, mm4, 0 +- movq mm5, mm4 +- movq mm6, mm4 +- movq mm7, mm4 +- paddw mm4, mm0 +- paddw mm5, mm1 +- paddw mm6, mm2 +- paddw mm7, mm3 +- packuswb mm4, mm5 +- packuswb mm6, mm7 +- movq [r0+r1+0], mm4 +- movq [r0+r1+8], mm6 +- add r0, r1 +- dec r4d +- jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmx +-PRED16x16_TM +-INIT_MMX mmxext +-PRED16x16_TM +- + INIT_XMM sse2 + cglobal pred16x16_tm_vp8_8, 2,6,6 + sub r0, r1 +@@ -262,7 +192,7 @@ + lea r0, [r0+r1*2] + dec r5d + jg .loop +- REP_RET ++ RET + + %if HAVE_AVX2_EXTERNAL + INIT_YMM avx2 +@@ -298,7 +228,7 @@ + lea dstq, [dstq+strideq*4] + dec iterationd + jg .loop +- REP_RET ++ RET + %endif + + ;----------------------------------------------------------------------------- +@@ -311,22 +241,6 @@ + neg r1 ; -stride + + movh m0, [r0+r1 -1] +-%if mmsize == 8 +- pxor m4, m4 +- movh m1, [r0+r1 +3 ] +- movh m2, [r0+r1 +8 ] +- movh m3, [r0+r1 +12] +- punpcklbw m0, m4 +- punpcklbw m1, m4 +- punpcklbw m2, m4 +- punpcklbw m3, m4 +- pmullw m0, [pw_m8tom1 ] +- pmullw m1, [pw_m8tom1+8] +- pmullw m2, [pw_1to8 ] +- pmullw m3, [pw_1to8 +8] +- paddw m0, m2 +- paddw m1, m3 +-%else ; mmsize == 16 + %if cpuflag(ssse3) + movhps m0, [r0+r1 +8] + pmaddubsw m0, [plane_shuf] ; H coefficients +@@ -340,21 +254,10 @@ + paddw m0, m1 + %endif + movhlps m1, m0 +-%endif + paddw m0, m1 +-%if cpuflag(mmxext) + PSHUFLW m1, m0, 0xE +-%elif cpuflag(mmx) +- mova m1, m0 +- psrlq m1, 32 +-%endif + paddw m0, m1 +-%if cpuflag(mmxext) + PSHUFLW m1, m0, 0x1 +-%elif cpuflag(mmx) +- mova m1, m0 +- psrlq m1, 16 +-%endif + paddw m0, m1 ; sum of H coefficients + + lea r4, [r0+r2*8-1] +@@ -496,24 +399,10 @@ + SWAP 0, 1 + %endif + mova m2, m0 +-%if mmsize == 8 +- mova m5, m0 +-%endif + pmullw m0, [pw_0to7] ; 0*H, 1*H, ..., 7*H (words) +-%if mmsize == 16 + psllw m2, 3 +-%else +- psllw m5, 3 +- psllw m2, 2 +- mova m6, m5 +- paddw m6, m2 +-%endif + paddw m0, m3 ; a + {0,1,2,3,4,5,6,7}*H + paddw m2, m0 ; a + {8,9,10,11,12,13,14,15}*H +-%if mmsize == 8 +- paddw m5, m0 ; a + {8,9,10,11}*H +- paddw m6, m0 ; a + {12,13,14,15}*H +-%endif + + mov r4, 8 + .loop: +@@ -523,20 +412,8 @@ + psraw m4, 5 + packuswb m3, m4 + mova [r0], m3 +-%if mmsize == 8 +- mova m3, m5 ; b[8..11] +- mova m4, m6 ; b[12..15] +- psraw m3, 5 +- psraw m4, 5 +- packuswb m3, m4 +- mova [r0+8], m3 +-%endif + paddw m0, m1 + paddw m2, m1 +-%if mmsize == 8 +- paddw m5, m1 +- paddw m6, m1 +-%endif + + mova m3, m0 ; b[0..7] + mova m4, m2 ; b[8..15] +@@ -544,35 +421,15 @@ + psraw m4, 5 + packuswb m3, m4 + mova [r0+r2], m3 +-%if mmsize == 8 +- mova m3, m5 ; b[8..11] +- mova m4, m6 ; b[12..15] +- psraw m3, 5 +- psraw m4, 5 +- packuswb m3, m4 +- mova [r0+r2+8], m3 +-%endif + paddw m0, m1 + paddw m2, m1 +-%if mmsize == 8 +- paddw m5, m1 +- paddw m6, m1 +-%endif + + lea r0, [r0+r2*2] + dec r4 + jg .loop +- REP_RET ++ RET + %endmacro + +-INIT_MMX mmx +-H264_PRED16x16_PLANE h264 +-H264_PRED16x16_PLANE rv40 +-H264_PRED16x16_PLANE svq3 +-INIT_MMX mmxext +-H264_PRED16x16_PLANE h264 +-H264_PRED16x16_PLANE rv40 +-H264_PRED16x16_PLANE svq3 + INIT_XMM sse2 + H264_PRED16x16_PLANE h264 + H264_PRED16x16_PLANE rv40 +@@ -592,14 +449,6 @@ + neg r1 ; -stride + + movd m0, [r0+r1 -1] +-%if mmsize == 8 +- pxor m2, m2 +- movh m1, [r0+r1 +4 ] +- punpcklbw m0, m2 +- punpcklbw m1, m2 +- pmullw m0, [pw_m4to4] +- pmullw m1, [pw_m4to4+8] +-%else ; mmsize == 16 + %if cpuflag(ssse3) + movhps m0, [r0+r1 +4] ; this reads 4 bytes more than necessary + pmaddubsw m0, [plane8_shuf] ; H coefficients +@@ -611,25 +460,14 @@ + pmullw m0, [pw_m4to4] + %endif + movhlps m1, m0 +-%endif + paddw m0, m1 + + %if notcpuflag(ssse3) +-%if cpuflag(mmxext) + PSHUFLW m1, m0, 0xE +-%elif cpuflag(mmx) +- mova m1, m0 +- psrlq m1, 32 +-%endif + paddw m0, m1 + %endif ; !ssse3 + +-%if cpuflag(mmxext) + PSHUFLW m1, m0, 0x1 +-%elif cpuflag(mmx) +- mova m1, m0 +- psrlq m1, 16 +-%endif + paddw m0, m1 ; sum of H coefficients + + lea r4, [r0+r2*4-1] +@@ -699,20 +537,12 @@ + SPLATW m0, m0, 0 ; H + SPLATW m1, m1, 0 ; V + SPLATW m3, m3, 0 ; a +-%if mmsize == 8 +- mova m2, m0 +-%endif + pmullw m0, [pw_0to7] ; 0*H, 1*H, ..., 7*H (words) + paddw m0, m3 ; a + {0,1,2,3,4,5,6,7}*H +-%if mmsize == 8 +- psllw m2, 2 +- paddw m2, m0 ; a + {4,5,6,7}*H +-%endif + + mov r4, 4 + ALIGN 16 + .loop: +-%if mmsize == 16 + mova m3, m0 ; b[0..7] + paddw m0, m1 + psraw m3, 5 +@@ -722,35 +552,13 @@ + packuswb m3, m4 + movh [r0], m3 + movhps [r0+r2], m3 +-%else ; mmsize == 8 +- mova m3, m0 ; b[0..3] +- mova m4, m2 ; b[4..7] +- paddw m0, m1 +- paddw m2, m1 +- psraw m3, 5 +- psraw m4, 5 +- mova m5, m0 ; V+b[0..3] +- mova m6, m2 ; V+b[4..7] +- paddw m0, m1 +- paddw m2, m1 +- psraw m5, 5 +- psraw m6, 5 +- packuswb m3, m4 +- packuswb m5, m6 +- mova [r0], m3 +- mova [r0+r2], m5 +-%endif + + lea r0, [r0+r2*2] + dec r4 + jg .loop +- REP_RET ++ RET + %endmacro + +-INIT_MMX mmx +-H264_PRED8x8_PLANE +-INIT_MMX mmxext +-H264_PRED8x8_PLANE + INIT_XMM sse2 + H264_PRED8x8_PLANE + INIT_XMM ssse3 +@@ -791,11 +599,9 @@ + lea r0, [r0+r1*2] + dec r2 + jg .loop +- REP_RET ++ RET + %endmacro + +-INIT_MMX mmx +-PRED8x8_H + INIT_MMX mmxext + PRED8x8_H + INIT_MMX ssse3 +@@ -931,52 +737,12 @@ + lea r4, [r4+r1*2] + dec r3d + jg .loop +- REP_RET ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_pred8x8_tm_vp8_8(uint8_t *src, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-%macro PRED8x8_TM 0 +-cglobal pred8x8_tm_vp8_8, 2,6 +- sub r0, r1 +- pxor mm7, mm7 +- movq mm0, [r0] +- movq mm1, mm0 +- punpcklbw mm0, mm7 +- punpckhbw mm1, mm7 +- movzx r4d, byte [r0-1] +- mov r5d, 4 +-.loop: +- movzx r2d, byte [r0+r1*1-1] +- movzx r3d, byte [r0+r1*2-1] +- sub r2d, r4d +- sub r3d, r4d +- movd mm2, r2d +- movd mm4, r3d +- SPLATW mm2, mm2, 0 +- SPLATW mm4, mm4, 0 +- movq mm3, mm2 +- movq mm5, mm4 +- paddw mm2, mm0 +- paddw mm3, mm1 +- paddw mm4, mm0 +- paddw mm5, mm1 +- packuswb mm2, mm3 +- packuswb mm4, mm5 +- movq [r0+r1*1], mm2 +- movq [r0+r1*2], mm4 +- lea r0, [r0+r1*2] +- dec r5d +- jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmx +-PRED8x8_TM +-INIT_MMX mmxext +-PRED8x8_TM +- + INIT_XMM sse2 + cglobal pred8x8_tm_vp8_8, 2,6,4 + sub r0, r1 +@@ -1004,7 +770,7 @@ + lea r0, [r0+r1*2] + dec r5d + jg .loop +- REP_RET ++ RET + + INIT_XMM ssse3 + cglobal pred8x8_tm_vp8_8, 2,3,6 +@@ -1031,7 +797,7 @@ + lea r0, [r0+r1*2] + dec r2d + jg .loop +- REP_RET ++ RET + + ; dest, left, right, src, tmp + ; output: %1 = (t[n-1] + t[n]*2 + t[n+1] + 2) >> 2 +@@ -1333,114 +1099,6 @@ + ; int has_topright, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-INIT_MMX mmxext +-cglobal pred8x8l_down_left_8, 4,5 +- sub r0, r3 +- movq mm0, [r0-8] +- movq mm3, [r0] +- movq mm1, [r0+8] +- movq mm2, mm3 +- movq mm4, mm3 +- PALIGNR mm2, mm0, 7, mm0 +- PALIGNR mm1, mm4, 1, mm4 +- test r1d, r1d +- jz .fix_lt_2 +- test r2d, r2d +- jz .fix_tr_1 +- jmp .do_top +-.fix_lt_2: +- movq mm5, mm3 +- pxor mm5, mm2 +- psllq mm5, 56 +- psrlq mm5, 56 +- pxor mm2, mm5 +- test r2d, r2d +- jnz .do_top +-.fix_tr_1: +- movq mm5, mm3 +- pxor mm5, mm1 +- psrlq mm5, 56 +- psllq mm5, 56 +- pxor mm1, mm5 +- jmp .do_top +-.fix_tr_2: +- punpckhbw mm3, mm3 +- pshufw mm1, mm3, 0xFF +- jmp .do_topright +-.do_top: +- PRED4x4_LOWPASS mm4, mm2, mm1, mm3, mm5 +- movq mm7, mm4 +- test r2d, r2d +- jz .fix_tr_2 +- movq mm0, [r0+8] +- movq mm5, mm0 +- movq mm2, mm0 +- movq mm4, mm0 +- psrlq mm5, 56 +- PALIGNR mm2, mm3, 7, mm3 +- PALIGNR mm5, mm4, 1, mm4 +- PRED4x4_LOWPASS mm1, mm2, mm5, mm0, mm4 +-.do_topright: +- lea r1, [r0+r3*2] +- movq mm6, mm1 +- psrlq mm1, 56 +- movq mm4, mm1 +- lea r2, [r1+r3*2] +- movq mm2, mm6 +- PALIGNR mm2, mm7, 1, mm0 +- movq mm3, mm6 +- PALIGNR mm3, mm7, 7, mm0 +- PALIGNR mm4, mm6, 1, mm0 +- movq mm5, mm7 +- movq mm1, mm7 +- movq mm7, mm6 +- lea r4, [r2+r3*2] +- psllq mm1, 8 +- PRED4x4_LOWPASS mm0, mm1, mm2, mm5, mm6 +- PRED4x4_LOWPASS mm1, mm3, mm4, mm7, mm6 +- movq [r4+r3*2], mm1 +- movq mm2, mm0 +- psllq mm1, 8 +- psrlq mm2, 56 +- psllq mm0, 8 +- por mm1, mm2 +- movq [r4+r3*1], mm1 +- movq mm2, mm0 +- psllq mm1, 8 +- psrlq mm2, 56 +- psllq mm0, 8 +- por mm1, mm2 +- movq [r2+r3*2], mm1 +- movq mm2, mm0 +- psllq mm1, 8 +- psrlq mm2, 56 +- psllq mm0, 8 +- por mm1, mm2 +- movq [r2+r3*1], mm1 +- movq mm2, mm0 +- psllq mm1, 8 +- psrlq mm2, 56 +- psllq mm0, 8 +- por mm1, mm2 +- movq [r1+r3*2], mm1 +- movq mm2, mm0 +- psllq mm1, 8 +- psrlq mm2, 56 +- psllq mm0, 8 +- por mm1, mm2 +- movq [r1+r3*1], mm1 +- movq mm2, mm0 +- psllq mm1, 8 +- psrlq mm2, 56 +- psllq mm0, 8 +- por mm1, mm2 +- movq [r0+r3*2], mm1 +- psllq mm1, 8 +- psrlq mm0, 56 +- por mm1, mm0 +- movq [r0+r3*1], mm1 +- RET +- + %macro PRED8x8L_DOWN_LEFT 0 + cglobal pred8x8l_down_left_8, 4,4 + sub r0, r3 +@@ -1530,142 +1188,10 @@ + PRED8x8L_DOWN_LEFT + + ;----------------------------------------------------------------------------- +-; void ff_pred8x8l_down_right_8_mmxext(uint8_t *src, int has_topleft, +-; int has_topright, ptrdiff_t stride) ++; void ff_pred8x8l_down_right_8(uint8_t *src, int has_topleft, ++; int has_topright, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-INIT_MMX mmxext +-cglobal pred8x8l_down_right_8, 4,5 +- sub r0, r3 +- lea r4, [r0+r3*2] +- movq mm0, [r0+r3*1-8] +- punpckhbw mm0, [r0+r3*0-8] +- movq mm1, [r4+r3*1-8] +- punpckhbw mm1, [r0+r3*2-8] +- mov r4, r0 +- punpckhwd mm1, mm0 +- lea r0, [r0+r3*4] +- movq mm2, [r0+r3*1-8] +- punpckhbw mm2, [r0+r3*0-8] +- lea r0, [r0+r3*2] +- movq mm3, [r0+r3*1-8] +- punpckhbw mm3, [r0+r3*0-8] +- punpckhwd mm3, mm2 +- punpckhdq mm3, mm1 +- lea r0, [r0+r3*2] +- movq mm0, [r0+r3*0-8] +- movq mm1, [r4] +- mov r0, r4 +- movq mm4, mm3 +- movq mm2, mm3 +- PALIGNR mm4, mm0, 7, mm0 +- PALIGNR mm1, mm2, 1, mm2 +- test r1d, r1d ; top_left +- jz .fix_lt_1 +-.do_left: +- movq mm0, mm4 +- PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5 +- movq mm4, mm0 +- movq mm7, mm2 +- movq mm6, mm2 +- PRED4x4_LOWPASS mm1, mm3, mm0, mm4, mm5 +- psllq mm1, 56 +- PALIGNR mm7, mm1, 7, mm3 +- movq mm0, [r0-8] +- movq mm3, [r0] +- movq mm1, [r0+8] +- movq mm2, mm3 +- movq mm4, mm3 +- PALIGNR mm2, mm0, 7, mm0 +- PALIGNR mm1, mm4, 1, mm4 +- test r1d, r1d ; top_left +- jz .fix_lt_2 +- test r2d, r2d ; top_right +- jz .fix_tr_1 +-.do_top: +- PRED4x4_LOWPASS mm4, mm2, mm1, mm3, mm5 +- movq mm5, mm4 +- jmp .body +-.fix_lt_1: +- movq mm5, mm3 +- pxor mm5, mm4 +- psrlq mm5, 56 +- psllq mm5, 48 +- pxor mm1, mm5 +- jmp .do_left +-.fix_lt_2: +- movq mm5, mm3 +- pxor mm5, mm2 +- psllq mm5, 56 +- psrlq mm5, 56 +- pxor mm2, mm5 +- test r2d, r2d ; top_right +- jnz .do_top +-.fix_tr_1: +- movq mm5, mm3 +- pxor mm5, mm1 +- psrlq mm5, 56 +- psllq mm5, 56 +- pxor mm1, mm5 +- jmp .do_top +-.body: +- lea r1, [r0+r3*2] +- movq mm1, mm7 +- movq mm7, mm5 +- movq mm5, mm6 +- movq mm2, mm7 +- lea r2, [r1+r3*2] +- PALIGNR mm2, mm6, 1, mm0 +- movq mm3, mm7 +- PALIGNR mm3, mm6, 7, mm0 +- movq mm4, mm7 +- lea r4, [r2+r3*2] +- psrlq mm4, 8 +- PRED4x4_LOWPASS mm0, mm1, mm2, mm5, mm6 +- PRED4x4_LOWPASS mm1, mm3, mm4, mm7, mm6 +- movq [r4+r3*2], mm0 +- movq mm2, mm1 +- psrlq mm0, 8 +- psllq mm2, 56 +- psrlq mm1, 8 +- por mm0, mm2 +- movq [r4+r3*1], mm0 +- movq mm2, mm1 +- psrlq mm0, 8 +- psllq mm2, 56 +- psrlq mm1, 8 +- por mm0, mm2 +- movq [r2+r3*2], mm0 +- movq mm2, mm1 +- psrlq mm0, 8 +- psllq mm2, 56 +- psrlq mm1, 8 +- por mm0, mm2 +- movq [r2+r3*1], mm0 +- movq mm2, mm1 +- psrlq mm0, 8 +- psllq mm2, 56 +- psrlq mm1, 8 +- por mm0, mm2 +- movq [r1+r3*2], mm0 +- movq mm2, mm1 +- psrlq mm0, 8 +- psllq mm2, 56 +- psrlq mm1, 8 +- por mm0, mm2 +- movq [r1+r3*1], mm0 +- movq mm2, mm1 +- psrlq mm0, 8 +- psllq mm2, 56 +- psrlq mm1, 8 +- por mm0, mm2 +- movq [r0+r3*2], mm0 +- psrlq mm0, 8 +- psllq mm1, 56 +- por mm0, mm1 +- movq [r0+r3*1], mm0 +- RET +- + %macro PRED8x8L_DOWN_RIGHT 0 + cglobal pred8x8l_down_right_8, 4,5 + sub r0, r3 +@@ -1786,113 +1312,6 @@ + ; int has_topright, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-INIT_MMX mmxext +-cglobal pred8x8l_vertical_right_8, 4,5 +- sub r0, r3 +- lea r4, [r0+r3*2] +- movq mm0, [r0+r3*1-8] +- punpckhbw mm0, [r0+r3*0-8] +- movq mm1, [r4+r3*1-8] +- punpckhbw mm1, [r0+r3*2-8] +- mov r4, r0 +- punpckhwd mm1, mm0 +- lea r0, [r0+r3*4] +- movq mm2, [r0+r3*1-8] +- punpckhbw mm2, [r0+r3*0-8] +- lea r0, [r0+r3*2] +- movq mm3, [r0+r3*1-8] +- punpckhbw mm3, [r0+r3*0-8] +- punpckhwd mm3, mm2 +- punpckhdq mm3, mm1 +- lea r0, [r0+r3*2] +- movq mm0, [r0+r3*0-8] +- movq mm1, [r4] +- mov r0, r4 +- movq mm4, mm3 +- movq mm2, mm3 +- PALIGNR mm4, mm0, 7, mm0 +- PALIGNR mm1, mm2, 1, mm2 +- test r1d, r1d +- jz .fix_lt_1 +- jmp .do_left +-.fix_lt_1: +- movq mm5, mm3 +- pxor mm5, mm4 +- psrlq mm5, 56 +- psllq mm5, 48 +- pxor mm1, mm5 +- jmp .do_left +-.fix_lt_2: +- movq mm5, mm3 +- pxor mm5, mm2 +- psllq mm5, 56 +- psrlq mm5, 56 +- pxor mm2, mm5 +- test r2d, r2d +- jnz .do_top +-.fix_tr_1: +- movq mm5, mm3 +- pxor mm5, mm1 +- psrlq mm5, 56 +- psllq mm5, 56 +- pxor mm1, mm5 +- jmp .do_top +-.do_left: +- movq mm0, mm4 +- PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5 +- movq mm7, mm2 +- movq mm0, [r0-8] +- movq mm3, [r0] +- movq mm1, [r0+8] +- movq mm2, mm3 +- movq mm4, mm3 +- PALIGNR mm2, mm0, 7, mm0 +- PALIGNR mm1, mm4, 1, mm4 +- test r1d, r1d +- jz .fix_lt_2 +- test r2d, r2d +- jz .fix_tr_1 +-.do_top: +- PRED4x4_LOWPASS mm6, mm2, mm1, mm3, mm5 +- lea r1, [r0+r3*2] +- movq mm2, mm6 +- movq mm3, mm6 +- PALIGNR mm3, mm7, 7, mm0 +- PALIGNR mm6, mm7, 6, mm1 +- movq mm4, mm3 +- pavgb mm3, mm2 +- lea r2, [r1+r3*2] +- PRED4x4_LOWPASS mm0, mm6, mm2, mm4, mm5 +- movq [r0+r3*1], mm3 +- movq [r0+r3*2], mm0 +- movq mm5, mm0 +- movq mm6, mm3 +- movq mm1, mm7 +- movq mm2, mm1 +- psllq mm2, 8 +- movq mm3, mm1 +- psllq mm3, 16 +- lea r4, [r2+r3*2] +- PRED4x4_LOWPASS mm0, mm1, mm3, mm2, mm4 +- PALIGNR mm6, mm0, 7, mm2 +- movq [r1+r3*1], mm6 +- psllq mm0, 8 +- PALIGNR mm5, mm0, 7, mm1 +- movq [r1+r3*2], mm5 +- psllq mm0, 8 +- PALIGNR mm6, mm0, 7, mm2 +- movq [r2+r3*1], mm6 +- psllq mm0, 8 +- PALIGNR mm5, mm0, 7, mm1 +- movq [r2+r3*2], mm5 +- psllq mm0, 8 +- PALIGNR mm6, mm0, 7, mm2 +- movq [r4+r3*1], mm6 +- psllq mm0, 8 +- PALIGNR mm5, mm0, 7, mm1 +- movq [r4+r3*2], mm5 +- RET +- + %macro PRED8x8L_VERTICAL_RIGHT 0 + cglobal pred8x8l_vertical_right_8, 4,5,7 + ; manually spill XMM registers for Win64 because +@@ -2192,121 +1611,6 @@ + ; int has_topright, ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-INIT_MMX mmxext +-cglobal pred8x8l_horizontal_down_8, 4,5 +- sub r0, r3 +- lea r4, [r0+r3*2] +- movq mm0, [r0+r3*1-8] +- punpckhbw mm0, [r0+r3*0-8] +- movq mm1, [r4+r3*1-8] +- punpckhbw mm1, [r0+r3*2-8] +- mov r4, r0 +- punpckhwd mm1, mm0 +- lea r0, [r0+r3*4] +- movq mm2, [r0+r3*1-8] +- punpckhbw mm2, [r0+r3*0-8] +- lea r0, [r0+r3*2] +- movq mm3, [r0+r3*1-8] +- punpckhbw mm3, [r0+r3*0-8] +- punpckhwd mm3, mm2 +- punpckhdq mm3, mm1 +- lea r0, [r0+r3*2] +- movq mm0, [r0+r3*0-8] +- movq mm1, [r4] +- mov r0, r4 +- movq mm4, mm3 +- movq mm2, mm3 +- PALIGNR mm4, mm0, 7, mm0 +- PALIGNR mm1, mm2, 1, mm2 +- test r1d, r1d +- jnz .do_left +-.fix_lt_1: +- movq mm5, mm3 +- pxor mm5, mm4 +- psrlq mm5, 56 +- psllq mm5, 48 +- pxor mm1, mm5 +- jmp .do_left +-.fix_lt_2: +- movq mm5, mm3 +- pxor mm5, mm2 +- psllq mm5, 56 +- psrlq mm5, 56 +- pxor mm2, mm5 +- test r2d, r2d +- jnz .do_top +-.fix_tr_1: +- movq mm5, mm3 +- pxor mm5, mm1 +- psrlq mm5, 56 +- psllq mm5, 56 +- pxor mm1, mm5 +- jmp .do_top +-.do_left: +- movq mm0, mm4 +- PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5 +- movq mm4, mm0 +- movq mm7, mm2 +- movq mm6, mm2 +- PRED4x4_LOWPASS mm1, mm3, mm0, mm4, mm5 +- psllq mm1, 56 +- PALIGNR mm7, mm1, 7, mm3 +- movq mm0, [r0-8] +- movq mm3, [r0] +- movq mm1, [r0+8] +- movq mm2, mm3 +- movq mm4, mm3 +- PALIGNR mm2, mm0, 7, mm0 +- PALIGNR mm1, mm4, 1, mm4 +- test r1d, r1d +- jz .fix_lt_2 +- test r2d, r2d +- jz .fix_tr_1 +-.do_top: +- PRED4x4_LOWPASS mm4, mm2, mm1, mm3, mm5 +- movq mm5, mm4 +- lea r1, [r0+r3*2] +- psllq mm7, 56 +- movq mm2, mm5 +- movq mm3, mm6 +- movq mm4, mm2 +- PALIGNR mm2, mm6, 7, mm5 +- PALIGNR mm6, mm7, 7, mm0 +- lea r2, [r1+r3*2] +- PALIGNR mm4, mm3, 1, mm7 +- movq mm5, mm3 +- pavgb mm3, mm6 +- PRED4x4_LOWPASS mm0, mm4, mm6, mm5, mm7 +- movq mm4, mm2 +- movq mm1, mm2 +- lea r4, [r2+r3*2] +- psrlq mm4, 16 +- psrlq mm1, 8 +- PRED4x4_LOWPASS mm6, mm4, mm2, mm1, mm5 +- movq mm7, mm3 +- punpcklbw mm3, mm0 +- punpckhbw mm7, mm0 +- movq mm1, mm7 +- movq mm0, mm7 +- movq mm4, mm7 +- movq [r4+r3*2], mm3 +- PALIGNR mm7, mm3, 2, mm5 +- movq [r4+r3*1], mm7 +- PALIGNR mm1, mm3, 4, mm5 +- movq [r2+r3*2], mm1 +- PALIGNR mm0, mm3, 6, mm3 +- movq [r2+r3*1], mm0 +- movq mm2, mm6 +- movq mm3, mm6 +- movq [r1+r3*2], mm4 +- PALIGNR mm6, mm4, 2, mm5 +- movq [r1+r3*1], mm6 +- PALIGNR mm2, mm4, 4, mm5 +- movq [r0+r3*2], mm2 +- PALIGNR mm3, mm4, 6, mm4 +- movq [r0+r3*1], mm3 +- RET +- + %macro PRED8x8L_HORIZONTAL_DOWN 0 + cglobal pred8x8l_horizontal_down_8, 4,5 + sub r0, r3 +@@ -2472,7 +1776,7 @@ + ; ptrdiff_t stride) + ;----------------------------------------------------------------------------- + +-%macro PRED4x4_TM 0 ++INIT_MMX mmxext + cglobal pred4x4_tm_vp8_8, 3,6 + sub r0, r2 + pxor mm7, mm7 +@@ -2487,15 +1791,8 @@ + sub r3d, r4d + movd mm2, r1d + movd mm4, r3d +-%if cpuflag(mmxext) + pshufw mm2, mm2, 0 + pshufw mm4, mm4, 0 +-%else +- punpcklwd mm2, mm2 +- punpcklwd mm4, mm4 +- punpckldq mm2, mm2 +- punpckldq mm4, mm4 +-%endif + paddw mm2, mm0 + paddw mm4, mm0 + packuswb mm2, mm2 +@@ -2505,13 +1802,7 @@ + lea r0, [r0+r2*2] + dec r5d + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmx +-PRED4x4_TM +-INIT_MMX mmxext +-PRED4x4_TM ++ RET + + INIT_XMM ssse3 + cglobal pred4x4_tm_vp8_8, 3,3 +diff -Naur a/media/ffvpx/libavcodec/x86/h264_intrapred_init.c b/media/ffvpx/libavcodec/x86/h264_intrapred_init.c +--- a/media/ffvpx/libavcodec/x86/h264_intrapred_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/h264_intrapred_init.c 2023-04-06 12:49:40.257395051 +0200 +@@ -18,10 +18,13 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include ++#include ++#include "config.h" + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" + #include "libavutil/x86/cpu.h" +-#include "libavcodec/avcodec.h" ++#include "libavcodec/codec_id.h" + #include "libavcodec/h264pred.h" + + #define PRED4x4(TYPE, DEPTH, OPT) \ +@@ -49,7 +52,6 @@ + void ff_pred8x8_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ + ptrdiff_t stride); + +-PRED8x8(dc, 10, mmxext) + PRED8x8(dc, 10, sse2) + PRED8x8(top_dc, 10, sse2) + PRED8x8(plane, 10, sse2) +@@ -64,7 +66,6 @@ + + PRED8x8L(dc, 10, sse2) + PRED8x8L(dc, 10, avx) +-PRED8x8L(128_dc, 10, mmxext) + PRED8x8L(128_dc, 10, sse2) + PRED8x8L(top_dc, 10, sse2) + PRED8x8L(top_dc, 10, avx) +@@ -90,42 +91,25 @@ + void ff_pred16x16_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ + ptrdiff_t stride); + +-PRED16x16(dc, 10, mmxext) + PRED16x16(dc, 10, sse2) +-PRED16x16(top_dc, 10, mmxext) + PRED16x16(top_dc, 10, sse2) +-PRED16x16(128_dc, 10, mmxext) + PRED16x16(128_dc, 10, sse2) +-PRED16x16(left_dc, 10, mmxext) + PRED16x16(left_dc, 10, sse2) +-PRED16x16(vertical, 10, mmxext) + PRED16x16(vertical, 10, sse2) +-PRED16x16(horizontal, 10, mmxext) + PRED16x16(horizontal, 10, sse2) + + /* 8-bit versions */ +-PRED16x16(vertical, 8, mmx) + PRED16x16(vertical, 8, sse) +-PRED16x16(horizontal, 8, mmx) + PRED16x16(horizontal, 8, mmxext) + PRED16x16(horizontal, 8, ssse3) +-PRED16x16(dc, 8, mmxext) + PRED16x16(dc, 8, sse2) + PRED16x16(dc, 8, ssse3) +-PRED16x16(plane_h264, 8, mmx) +-PRED16x16(plane_h264, 8, mmxext) + PRED16x16(plane_h264, 8, sse2) + PRED16x16(plane_h264, 8, ssse3) +-PRED16x16(plane_rv40, 8, mmx) +-PRED16x16(plane_rv40, 8, mmxext) + PRED16x16(plane_rv40, 8, sse2) + PRED16x16(plane_rv40, 8, ssse3) +-PRED16x16(plane_svq3, 8, mmx) +-PRED16x16(plane_svq3, 8, mmxext) + PRED16x16(plane_svq3, 8, sse2) + PRED16x16(plane_svq3, 8, ssse3) +-PRED16x16(tm_vp8, 8, mmx) +-PRED16x16(tm_vp8, 8, mmxext) + PRED16x16(tm_vp8, 8, sse2) + PRED16x16(tm_vp8, 8, avx2) + +@@ -133,15 +117,10 @@ + PRED8x8(dc_rv40, 8, mmxext) + PRED8x8(dc, 8, mmxext) + PRED8x8(vertical, 8, mmx) +-PRED8x8(horizontal, 8, mmx) + PRED8x8(horizontal, 8, mmxext) + PRED8x8(horizontal, 8, ssse3) +-PRED8x8(plane, 8, mmx) +-PRED8x8(plane, 8, mmxext) + PRED8x8(plane, 8, sse2) + PRED8x8(plane, 8, ssse3) +-PRED8x8(tm_vp8, 8, mmx) +-PRED8x8(tm_vp8, 8, mmxext) + PRED8x8(tm_vp8, 8, sse2) + PRED8x8(tm_vp8, 8, ssse3) + +@@ -153,20 +132,16 @@ + PRED8x8L(horizontal, 8, ssse3) + PRED8x8L(vertical, 8, mmxext) + PRED8x8L(vertical, 8, ssse3) +-PRED8x8L(down_left, 8, mmxext) + PRED8x8L(down_left, 8, sse2) + PRED8x8L(down_left, 8, ssse3) +-PRED8x8L(down_right, 8, mmxext) + PRED8x8L(down_right, 8, sse2) + PRED8x8L(down_right, 8, ssse3) +-PRED8x8L(vertical_right, 8, mmxext) + PRED8x8L(vertical_right, 8, sse2) + PRED8x8L(vertical_right, 8, ssse3) + PRED8x8L(vertical_left, 8, sse2) + PRED8x8L(vertical_left, 8, ssse3) + PRED8x8L(horizontal_up, 8, mmxext) + PRED8x8L(horizontal_up, 8, ssse3) +-PRED8x8L(horizontal_down, 8, mmxext) + PRED8x8L(horizontal_down, 8, sse2) + PRED8x8L(horizontal_down, 8, ssse3) + +@@ -177,7 +152,6 @@ + PRED4x4(vertical_right, 8, mmxext) + PRED4x4(horizontal_up, 8, mmxext) + PRED4x4(horizontal_down, 8, mmxext) +-PRED4x4(tm_vp8, 8, mmx) + PRED4x4(tm_vp8, 8, mmxext) + PRED4x4(tm_vp8, 8, ssse3) + PRED4x4(vertical_vp8, 8, mmxext) +@@ -190,44 +164,20 @@ + + if (bit_depth == 8) { + if (EXTERNAL_MMX(cpu_flags)) { +- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmx; +- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmx; + if (chroma_format_idc <= 1) { + h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmx; +- h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmx; +- } +- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmx; +- h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmx; +- h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmx; +- } else { +- if (chroma_format_idc <= 1) +- h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmx; +- if (codec_id == AV_CODEC_ID_SVQ3) { +- if (cpu_flags & AV_CPU_FLAG_CMOV) +- h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_mmx; +- } else if (codec_id == AV_CODEC_ID_RV40) { +- h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_mmx; +- } else { +- h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_mmx; +- } + } + } + + if (EXTERNAL_MMXEXT(cpu_flags)) { + h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmxext; +- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmxext; + if (chroma_format_idc <= 1) + h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmxext; + h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmxext; + h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmxext; + h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_mmxext; + h->pred8x8l [VERT_PRED ] = ff_pred8x8l_vertical_8_mmxext; +- h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_mmxext; +- h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_mmxext; + h->pred8x8l [HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_8_mmxext; +- h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_mmxext; +- h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_mmxext; + h->pred4x4 [DIAG_DOWN_RIGHT_PRED ] = ff_pred4x4_down_right_8_mmxext; + h->pred4x4 [VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_8_mmxext; + h->pred4x4 [HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_8_mmxext; +@@ -249,21 +199,9 @@ + } + } + if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmxext; + h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_8_mmxext; +- h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmxext; + h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmxext; + h->pred4x4 [VERT_PRED ] = ff_pred4x4_vertical_vp8_8_mmxext; +- } else { +- if (chroma_format_idc <= 1) +- h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmxext; +- if (codec_id == AV_CODEC_ID_SVQ3) { +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmxext; +- } else if (codec_id == AV_CODEC_ID_RV40) { +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmxext; +- } else { +- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmxext; +- } + } + } + +@@ -334,18 +272,6 @@ + if (EXTERNAL_MMXEXT(cpu_flags)) { + h->pred4x4[DC_PRED ] = ff_pred4x4_dc_10_mmxext; + h->pred4x4[HOR_UP_PRED ] = ff_pred4x4_horizontal_up_10_mmxext; +- +- if (chroma_format_idc <= 1) +- h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_10_mmxext; +- +- h->pred8x8l[DC_128_PRED ] = ff_pred8x8l_128_dc_10_mmxext; +- +- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_10_mmxext; +- h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_10_mmxext; +- h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_10_mmxext; +- h->pred16x16[LEFT_DC_PRED8x8 ] = ff_pred16x16_left_dc_10_mmxext; +- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_10_mmxext; +- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_10_mmxext; + } + if (EXTERNAL_SSE2(cpu_flags)) { + h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_sse2; +diff -Naur a/media/ffvpx/libavcodec/x86/idctdsp.asm b/media/ffvpx/libavcodec/x86/idctdsp.asm +--- a/media/ffvpx/libavcodec/x86/idctdsp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/idctdsp.asm 2023-04-06 12:49:40.257395051 +0200 +@@ -37,47 +37,24 @@ + %macro PUT_SIGNED_PIXELS_CLAMPED_HALF 1 + mova m1, [blockq+mmsize*0+%1] + mova m2, [blockq+mmsize*2+%1] +-%if mmsize == 8 +- mova m3, [blockq+mmsize*4+%1] +- mova m4, [blockq+mmsize*6+%1] +-%endif + packsswb m1, [blockq+mmsize*1+%1] + packsswb m2, [blockq+mmsize*3+%1] +-%if mmsize == 8 +- packsswb m3, [blockq+mmsize*5+%1] +- packsswb m4, [blockq+mmsize*7+%1] +-%endif + paddb m1, m0 + paddb m2, m0 +-%if mmsize == 8 +- paddb m3, m0 +- paddb m4, m0 +- movq [pixelsq+lsizeq*0], m1 +- movq [pixelsq+lsizeq*1], m2 +- movq [pixelsq+lsizeq*2], m3 +- movq [pixelsq+lsize3q ], m4 +-%else + movq [pixelsq+lsizeq*0], m1 + movhps [pixelsq+lsizeq*1], m1 + movq [pixelsq+lsizeq*2], m2 + movhps [pixelsq+lsize3q ], m2 +-%endif + %endmacro + +-%macro PUT_SIGNED_PIXELS_CLAMPED 1 +-cglobal put_signed_pixels_clamped, 3, 4, %1, block, pixels, lsize, lsize3 ++INIT_XMM sse2 ++cglobal put_signed_pixels_clamped, 3, 4, 3, block, pixels, lsize, lsize3 + mova m0, [pb_80] + lea lsize3q, [lsizeq*3] + PUT_SIGNED_PIXELS_CLAMPED_HALF 0 + lea pixelsq, [pixelsq+lsizeq*4] + PUT_SIGNED_PIXELS_CLAMPED_HALF 64 + RET +-%endmacro +- +-INIT_MMX mmx +-PUT_SIGNED_PIXELS_CLAMPED 0 +-INIT_XMM sse2 +-PUT_SIGNED_PIXELS_CLAMPED 3 + + ;-------------------------------------------------------------------------- + ; void ff_put_pixels_clamped(const int16_t *block, uint8_t *pixels, +@@ -87,40 +64,21 @@ + %macro PUT_PIXELS_CLAMPED_HALF 1 + mova m0, [blockq+mmsize*0+%1] + mova m1, [blockq+mmsize*2+%1] +-%if mmsize == 8 +- mova m2, [blockq+mmsize*4+%1] +- mova m3, [blockq+mmsize*6+%1] +-%endif + packuswb m0, [blockq+mmsize*1+%1] + packuswb m1, [blockq+mmsize*3+%1] +-%if mmsize == 8 +- packuswb m2, [blockq+mmsize*5+%1] +- packuswb m3, [blockq+mmsize*7+%1] +- movq [pixelsq], m0 +- movq [lsizeq+pixelsq], m1 +- movq [2*lsizeq+pixelsq], m2 +- movq [lsize3q+pixelsq], m3 +-%else + movq [pixelsq], m0 + movhps [lsizeq+pixelsq], m0 + movq [2*lsizeq+pixelsq], m1 + movhps [lsize3q+pixelsq], m1 +-%endif + %endmacro + +-%macro PUT_PIXELS_CLAMPED 0 ++INIT_XMM sse2 + cglobal put_pixels_clamped, 3, 4, 2, block, pixels, lsize, lsize3 + lea lsize3q, [lsizeq*3] + PUT_PIXELS_CLAMPED_HALF 0 + lea pixelsq, [pixelsq+lsizeq*4] + PUT_PIXELS_CLAMPED_HALF 64 + RET +-%endmacro +- +-INIT_MMX mmx +-PUT_PIXELS_CLAMPED +-INIT_XMM sse2 +-PUT_PIXELS_CLAMPED + + ;-------------------------------------------------------------------------- + ; void ff_add_pixels_clamped(const int16_t *block, uint8_t *pixels, +@@ -130,41 +88,18 @@ + %macro ADD_PIXELS_CLAMPED 1 + mova m0, [blockq+mmsize*0+%1] + mova m1, [blockq+mmsize*1+%1] +-%if mmsize == 8 +- mova m5, [blockq+mmsize*2+%1] +- mova m6, [blockq+mmsize*3+%1] +-%endif + movq m2, [pixelsq] + movq m3, [pixelsq+lsizeq] +-%if mmsize == 8 +- mova m7, m2 +- punpcklbw m2, m4 +- punpckhbw m7, m4 +- paddsw m0, m2 +- paddsw m1, m7 +- mova m7, m3 +- punpcklbw m3, m4 +- punpckhbw m7, m4 +- paddsw m5, m3 +- paddsw m6, m7 +-%else + punpcklbw m2, m4 + punpcklbw m3, m4 + paddsw m0, m2 + paddsw m1, m3 +-%endif + packuswb m0, m1 +-%if mmsize == 8 +- packuswb m5, m6 +- movq [pixelsq], m0 +- movq [pixelsq+lsizeq], m5 +-%else + movq [pixelsq], m0 + movhps [pixelsq+lsizeq], m0 +-%endif + %endmacro + +-%macro ADD_PIXELS_CLAMPED 0 ++INIT_XMM sse2 + cglobal add_pixels_clamped, 3, 3, 5, block, pixels, lsize + pxor m4, m4 + ADD_PIXELS_CLAMPED 0 +@@ -175,9 +110,3 @@ + lea pixelsq, [pixelsq+lsizeq*2] + ADD_PIXELS_CLAMPED 96 + RET +-%endmacro +- +-INIT_MMX mmx +-ADD_PIXELS_CLAMPED +-INIT_XMM sse2 +-ADD_PIXELS_CLAMPED +diff -Naur a/media/ffvpx/libavcodec/x86/idctdsp.h b/media/ffvpx/libavcodec/x86/idctdsp.h +--- a/media/ffvpx/libavcodec/x86/idctdsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/idctdsp.h 2023-04-06 12:49:40.257395051 +0200 +@@ -22,16 +22,10 @@ + #include + #include + +-void ff_add_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, +- ptrdiff_t line_size); + void ff_add_pixels_clamped_sse2(const int16_t *block, uint8_t *pixels, + ptrdiff_t line_size); +-void ff_put_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, +- ptrdiff_t line_size); + void ff_put_pixels_clamped_sse2(const int16_t *block, uint8_t *pixels, + ptrdiff_t line_size); +-void ff_put_signed_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, +- ptrdiff_t line_size); + void ff_put_signed_pixels_clamped_sse2(const int16_t *block, uint8_t *pixels, + ptrdiff_t line_size); + +diff -Naur a/media/ffvpx/libavcodec/x86/idctdsp_init.c b/media/ffvpx/libavcodec/x86/idctdsp_init.c +--- a/media/ffvpx/libavcodec/x86/idctdsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/idctdsp_init.c 2023-04-06 12:49:40.258395091 +0200 +@@ -63,28 +63,24 @@ + { + int cpu_flags = av_get_cpu_flags(); + ++#if ARCH_X86_32 + if (EXTERNAL_MMX(cpu_flags)) { +- c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_mmx; +- c->put_pixels_clamped = ff_put_pixels_clamped_mmx; +- c->add_pixels_clamped = ff_add_pixels_clamped_mmx; +- + if (!high_bit_depth && + avctx->lowres == 0 && + (avctx->idct_algo == FF_IDCT_AUTO || + avctx->idct_algo == FF_IDCT_SIMPLEAUTO || + avctx->idct_algo == FF_IDCT_SIMPLEMMX)) { +- c->idct_put = ff_simple_idct_put_mmx; +- c->idct_add = ff_simple_idct_add_mmx; + c->idct = ff_simple_idct_mmx; +- c->perm_type = FF_IDCT_PERM_SIMPLE; + } + } ++#endif + + if (EXTERNAL_SSE2(cpu_flags)) { + c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_sse2; + c->put_pixels_clamped = ff_put_pixels_clamped_sse2; + c->add_pixels_clamped = ff_add_pixels_clamped_sse2; + ++#if ARCH_X86_32 + if (!high_bit_depth && + avctx->lowres == 0 && + (avctx->idct_algo == FF_IDCT_AUTO || +@@ -94,6 +90,7 @@ + c->idct_add = ff_simple_idct_add_sse2; + c->perm_type = FF_IDCT_PERM_SIMPLE; + } ++#endif + + if (ARCH_X86_64 && + !high_bit_depth && +diff -Naur a/media/ffvpx/libavcodec/x86/imdct36.asm b/media/ffvpx/libavcodec/x86/imdct36.asm +--- a/media/ffvpx/libavcodec/x86/imdct36.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/imdct36.asm 2023-04-06 12:49:40.258395091 +0200 +@@ -373,11 +373,6 @@ + RET + %endmacro + +-%if ARCH_X86_32 +-INIT_XMM sse +-DEFINE_IMDCT +-%endif +- + INIT_XMM sse2 + DEFINE_IMDCT + +diff -Naur a/media/ffvpx/libavcodec/x86/moz.build b/media/ffvpx/libavcodec/x86/moz.build +--- a/media/ffvpx/libavcodec/x86/moz.build 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/moz.build 2023-04-06 12:49:40.258395091 +0200 +@@ -19,7 +19,6 @@ + 'idctdsp_init.c', + 'imdct36.asm', + 'mpegaudiodsp.c', +- 'simple_idct.asm', + 'videodsp.asm', + 'videodsp_init.c', + 'vp8dsp.asm', +@@ -39,10 +38,11 @@ + 'vp9mc_16bpp.asm', + ] + +-if CONFIG['CPU_ARCH'] == "x86_64": +- SOURCES += [ +- 'simple_idct10.asm', +- ] ++if CONFIG['CPU_ARCH'] == 'x86': ++ SOURCES += [ 'simple_idct.asm' ] ++ ++if CONFIG['CPU_ARCH'] == 'x86_64': ++ SOURCES += [ 'simple_idct10.asm' ] + + if CONFIG['MOZ_LIBAV_FFT']: + SOURCES += [ +diff -Naur a/media/ffvpx/libavcodec/x86/mpegaudiodsp.c b/media/ffvpx/libavcodec/x86/mpegaudiodsp.c +--- a/media/ffvpx/libavcodec/x86/mpegaudiodsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/mpegaudiodsp.c 2023-04-06 12:49:40.258395091 +0200 +@@ -19,9 +19,11 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include ++ ++#include "config.h" + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" +-#include "libavutil/internal.h" + #include "libavutil/mem_internal.h" + #include "libavutil/x86/asm.h" + #include "libavutil/x86/cpu.h" +@@ -32,9 +34,6 @@ + void ff_imdct36_float_ ## CPU(float *out, float *buf, float *in, float *win); + + #if HAVE_X86ASM +-#if ARCH_X86_32 +-DECL(sse) +-#endif + DECL(sse2) + DECL(sse3) + DECL(ssse3) +@@ -228,9 +227,6 @@ + } + + #if HAVE_SSE +-#if ARCH_X86_32 +-DECL_IMDCT_BLOCKS(sse,sse) +-#endif + DECL_IMDCT_BLOCKS(sse2,sse) + DECL_IMDCT_BLOCKS(sse3,sse) + DECL_IMDCT_BLOCKS(ssse3,sse) +@@ -269,11 +265,6 @@ + + #if HAVE_X86ASM + #if HAVE_SSE +-#if ARCH_X86_32 +- if (EXTERNAL_SSE(cpu_flags)) { +- s->imdct36_blocks_float = imdct36_blocks_sse; +- } +-#endif + if (EXTERNAL_SSE2(cpu_flags)) { + s->imdct36_blocks_float = imdct36_blocks_sse2; + } +diff -Naur a/media/ffvpx/libavcodec/x86/simple_idct.asm b/media/ffvpx/libavcodec/x86/simple_idct.asm +--- a/media/ffvpx/libavcodec/x86/simple_idct.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/simple_idct.asm 2023-04-06 12:50:06.975471215 +0200 +@@ -27,6 +27,7 @@ + + SECTION_RODATA + ++%if ARCH_X86_32 + cextern pb_80 + + wm1010: dw 0, 0xffff, 0, 0xffff +@@ -846,26 +847,6 @@ + IDCT + RET + +-cglobal simple_idct_put, 3, 5, 8, 128, pixels, lsize, block, lsize3, t0 +- IDCT +- lea lsize3q, [lsizeq*3] +- PUT_PIXELS_CLAMPED_HALF 0 +- lea pixelsq, [pixelsq+lsizeq*4] +- PUT_PIXELS_CLAMPED_HALF 64 +-RET +- +-cglobal simple_idct_add, 3, 4, 8, 128, pixels, lsize, block, t0 +- IDCT +- pxor m4, m4 +- ADD_PIXELS_CLAMPED 0 +- lea pixelsq, [pixelsq+lsizeq*2] +- ADD_PIXELS_CLAMPED 32 +- lea pixelsq, [pixelsq+lsizeq*2] +- ADD_PIXELS_CLAMPED 64 +- lea pixelsq, [pixelsq+lsizeq*2] +- ADD_PIXELS_CLAMPED 96 +-RET +- + INIT_XMM sse2 + + cglobal simple_idct_put, 3, 5, 8, 128, pixels, lsize, block, lsize3, t0 +@@ -887,3 +868,4 @@ + lea pixelsq, [pixelsq+lsizeq*2] + ADD_PIXELS_CLAMPED 96 + RET ++%endif +diff -Naur a/media/ffvpx/libavcodec/x86/videodsp.asm b/media/ffvpx/libavcodec/x86/videodsp.asm +--- a/media/ffvpx/libavcodec/x86/videodsp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/videodsp.asm 2023-04-06 12:50:24.493176583 +0200 +@@ -45,7 +45,6 @@ + jnz .%1_y_loop + %endmacro + +-%macro vvar_fn 0 + ; .----. <- zero + ; | | <- top is copied from first line in body of source + ; |----| <- start_y +@@ -53,6 +52,7 @@ + ; |----| <- end_y + ; | | <- bottom is copied from last line in body of source + ; '----' <- bh ++INIT_XMM sse + %if ARCH_X86_64 + cglobal emu_edge_vvar, 7, 8, 1, dst, dst_stride, src, src_stride, \ + start_y, end_y, bh, w +@@ -81,15 +81,6 @@ + V_COPY_ROW bottom, bhq ; v_copy_row(bottom, bh) + .end: ; } + RET +-%endmacro +- +-%if ARCH_X86_32 +-INIT_MMX mmx +-vvar_fn +-%endif +- +-INIT_XMM sse +-vvar_fn + + %macro hvar_fn 0 + cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w +@@ -105,11 +96,7 @@ + imul wd, 0x01010101 ; w *= 0x01010101 + movd m0, wd + mov wq, n_wordsq ; initialize w +-%if cpuflag(sse2) + pshufd m0, m0, q0000 ; splat +-%else ; mmx +- punpckldq m0, m0 ; splat +-%endif ; mmx/sse + %endif ; avx2 + .x_loop: ; do { + movu [dstq+wq*2], m0 ; write($reg, $mmsize) +@@ -123,11 +110,6 @@ + RET + %endmacro + +-%if ARCH_X86_32 +-INIT_MMX mmx +-hvar_fn +-%endif +- + INIT_XMM sse2 + hvar_fn + +@@ -338,9 +320,6 @@ + + INIT_MMX mmx + VERTICAL_EXTEND 1, 15 +-%if ARCH_X86_32 +-VERTICAL_EXTEND 16, 22 +-%endif + + INIT_XMM sse + VERTICAL_EXTEND 16, 22 +@@ -438,9 +417,6 @@ + + INIT_MMX mmx + H_EXTEND 2, 14 +-%if ARCH_X86_32 +-H_EXTEND 16, 22 +-%endif + + INIT_XMM sse2 + H_EXTEND 16, 22 +@@ -450,19 +426,11 @@ + H_EXTEND 8, 22 + %endif + +-%macro PREFETCH_FN 1 ++INIT_MMX mmxext + cglobal prefetch, 3, 3, 0, buf, stride, h + .loop: +- %1 [bufq] ++ prefetcht0 [bufq] + add bufq, strideq + dec hd + jg .loop +- REP_RET +-%endmacro +- +-INIT_MMX mmxext +-PREFETCH_FN prefetcht0 +-%if ARCH_X86_32 +-INIT_MMX 3dnow +-PREFETCH_FN prefetch +-%endif ++ RET +diff -Naur a/media/ffvpx/libavcodec/x86/videodsp_init.c b/media/ffvpx/libavcodec/x86/videodsp_init.c +--- a/media/ffvpx/libavcodec/x86/videodsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/videodsp_init.c 2023-04-06 12:50:06.975471215 +0200 +@@ -24,7 +24,6 @@ + #include "libavutil/avassert.h" + #include "libavutil/common.h" + #include "libavutil/cpu.h" +-#include "libavutil/mem.h" + #include "libavutil/x86/asm.h" + #include "libavutil/x86/cpu.h" + #include "libavcodec/videodsp.h" +@@ -53,26 +52,6 @@ + extern emu_edge_vfix_func ff_emu_edge_vfix13_mmx; + extern emu_edge_vfix_func ff_emu_edge_vfix14_mmx; + extern emu_edge_vfix_func ff_emu_edge_vfix15_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix16_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix17_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix18_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix19_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix20_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix21_mmx; +-extern emu_edge_vfix_func ff_emu_edge_vfix22_mmx; +-#if ARCH_X86_32 +-static emu_edge_vfix_func * const vfixtbl_mmx[22] = { +- &ff_emu_edge_vfix1_mmx, &ff_emu_edge_vfix2_mmx, &ff_emu_edge_vfix3_mmx, +- &ff_emu_edge_vfix4_mmx, &ff_emu_edge_vfix5_mmx, &ff_emu_edge_vfix6_mmx, +- &ff_emu_edge_vfix7_mmx, &ff_emu_edge_vfix8_mmx, &ff_emu_edge_vfix9_mmx, +- &ff_emu_edge_vfix10_mmx, &ff_emu_edge_vfix11_mmx, &ff_emu_edge_vfix12_mmx, +- &ff_emu_edge_vfix13_mmx, &ff_emu_edge_vfix14_mmx, &ff_emu_edge_vfix15_mmx, +- &ff_emu_edge_vfix16_mmx, &ff_emu_edge_vfix17_mmx, &ff_emu_edge_vfix18_mmx, +- &ff_emu_edge_vfix19_mmx, &ff_emu_edge_vfix20_mmx, &ff_emu_edge_vfix21_mmx, +- &ff_emu_edge_vfix22_mmx +-}; +-#endif +-extern emu_edge_vvar_func ff_emu_edge_vvar_mmx; + extern emu_edge_vfix_func ff_emu_edge_vfix16_sse; + extern emu_edge_vfix_func ff_emu_edge_vfix17_sse; + extern emu_edge_vfix_func ff_emu_edge_vfix18_sse; +@@ -104,19 +83,6 @@ + extern emu_edge_hfix_func ff_emu_edge_hfix10_mmx; + extern emu_edge_hfix_func ff_emu_edge_hfix12_mmx; + extern emu_edge_hfix_func ff_emu_edge_hfix14_mmx; +-extern emu_edge_hfix_func ff_emu_edge_hfix16_mmx; +-extern emu_edge_hfix_func ff_emu_edge_hfix18_mmx; +-extern emu_edge_hfix_func ff_emu_edge_hfix20_mmx; +-extern emu_edge_hfix_func ff_emu_edge_hfix22_mmx; +-#if ARCH_X86_32 +-static emu_edge_hfix_func * const hfixtbl_mmx[11] = { +- ff_emu_edge_hfix2_mmx, ff_emu_edge_hfix4_mmx, ff_emu_edge_hfix6_mmx, +- ff_emu_edge_hfix8_mmx, ff_emu_edge_hfix10_mmx, ff_emu_edge_hfix12_mmx, +- ff_emu_edge_hfix14_mmx, ff_emu_edge_hfix16_mmx, ff_emu_edge_hfix18_mmx, +- ff_emu_edge_hfix20_mmx, ff_emu_edge_hfix22_mmx +-}; +-#endif +-extern emu_edge_hvar_func ff_emu_edge_hvar_mmx; + extern emu_edge_hfix_func ff_emu_edge_hfix16_sse2; + extern emu_edge_hfix_func ff_emu_edge_hfix18_sse2; + extern emu_edge_hfix_func ff_emu_edge_hfix20_sse2; +@@ -222,30 +188,6 @@ + } + } + +-#if ARCH_X86_32 +-static av_noinline void emulated_edge_mc_mmx(uint8_t *buf, const uint8_t *src, +- ptrdiff_t buf_stride, +- ptrdiff_t src_stride, +- int block_w, int block_h, +- int src_x, int src_y, int w, int h) +-{ +- emulated_edge_mc(buf, src, buf_stride, src_stride, block_w, block_h, +- src_x, src_y, w, h, vfixtbl_mmx, &ff_emu_edge_vvar_mmx, +- hfixtbl_mmx, &ff_emu_edge_hvar_mmx); +-} +- +-static av_noinline void emulated_edge_mc_sse(uint8_t *buf, const uint8_t *src, +- ptrdiff_t buf_stride, +- ptrdiff_t src_stride, +- int block_w, int block_h, +- int src_x, int src_y, int w, int h) +-{ +- emulated_edge_mc(buf, src, buf_stride, src_stride, block_w, block_h, +- src_x, src_y, w, h, vfixtbl_sse, &ff_emu_edge_vvar_sse, +- hfixtbl_mmx, &ff_emu_edge_hvar_mmx); +-} +-#endif +- + static av_noinline void emulated_edge_mc_sse2(uint8_t *buf, const uint8_t *src, + ptrdiff_t buf_stride, + ptrdiff_t src_stride, +@@ -273,30 +215,16 @@ + #endif /* HAVE_AVX2_EXTERNAL */ + #endif /* HAVE_X86ASM */ + +-void ff_prefetch_mmxext(uint8_t *buf, ptrdiff_t stride, int h); +-void ff_prefetch_3dnow(uint8_t *buf, ptrdiff_t stride, int h); ++void ff_prefetch_mmxext(const uint8_t *buf, ptrdiff_t stride, int h); + + av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc) + { + #if HAVE_X86ASM + int cpu_flags = av_get_cpu_flags(); + +-#if ARCH_X86_32 +- if (EXTERNAL_MMX(cpu_flags) && bpc <= 8) { +- ctx->emulated_edge_mc = emulated_edge_mc_mmx; +- } +- if (EXTERNAL_AMD3DNOW(cpu_flags)) { +- ctx->prefetch = ff_prefetch_3dnow; +- } +-#endif /* ARCH_X86_32 */ + if (EXTERNAL_MMXEXT(cpu_flags)) { + ctx->prefetch = ff_prefetch_mmxext; + } +-#if ARCH_X86_32 +- if (EXTERNAL_SSE(cpu_flags) && bpc <= 8) { +- ctx->emulated_edge_mc = emulated_edge_mc_sse; +- } +-#endif /* ARCH_X86_32 */ + if (EXTERNAL_SSE2(cpu_flags) && bpc <= 8) { + ctx->emulated_edge_mc = emulated_edge_mc_sse2; + } +diff -Naur a/media/ffvpx/libavcodec/x86/vp56_arith.h b/media/ffvpx/libavcodec/x86/vp56_arith.h +--- a/media/ffvpx/libavcodec/x86/vp56_arith.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp56_arith.h 2023-04-06 12:49:40.258395091 +0200 +@@ -25,6 +25,8 @@ + #define AVCODEC_X86_VP56_ARITH_H + + #if HAVE_INLINE_ASM && HAVE_FAST_CMOV && HAVE_6REGS ++#include "libavutil/attributes.h" ++ + #define vp56_rac_get_prob vp56_rac_get_prob + static av_always_inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob) + { +diff -Naur a/media/ffvpx/libavcodec/x86/vp8dsp.asm b/media/ffvpx/libavcodec/x86/vp8dsp.asm +--- a/media/ffvpx/libavcodec/x86/vp8dsp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp8dsp.asm 2023-04-06 12:50:24.493176583 +0200 +@@ -157,7 +157,7 @@ + ; subpel MC functions: + ; + ; void ff_put_vp8_epel_hv_(uint8_t *dst, ptrdiff_t deststride, +-; uint8_t *src, ptrdiff_t srcstride, ++; const uint8_t *src, ptrdiff_t srcstride, + ; int height, int mx, int my); + ;------------------------------------------------------------------------------- + +@@ -200,7 +200,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + cglobal put_vp8_epel%1_h4, 6, 6 + npicregs, 7, dst, dststride, src, srcstride, height, mx, picreg + shl mxd, 4 +@@ -230,7 +230,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + cglobal put_vp8_epel%1_v4, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my + shl myd, 4 +@@ -268,7 +268,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + cglobal put_vp8_epel%1_v6, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my + lea myd, [myq*3] +@@ -314,7 +314,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + %endmacro + + INIT_MMX ssse3 +@@ -368,7 +368,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + ; 4x4 block, H-only 6-tap filter + INIT_MMX mmxext +@@ -426,7 +426,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + INIT_XMM sse2 + cglobal put_vp8_epel8_h4, 6, 6 + npicregs, 10, dst, dststride, src, srcstride, height, mx, picreg +@@ -474,7 +474,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + INIT_XMM sse2 + cglobal put_vp8_epel8_h6, 6, 6 + npicregs, 14, dst, dststride, src, srcstride, height, mx, picreg +@@ -537,7 +537,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + %macro FILTER_V 1 + ; 4x4 block, V-only 4-tap filter +@@ -590,7 +590,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + + + ; 4x4 block, V-only 6-tap filter +@@ -655,7 +655,7 @@ + add srcq, srcstrideq + dec heightd ; next row + jg .nextrow +- REP_RET ++ RET + %endmacro + + INIT_MMX mmxext +@@ -738,7 +738,7 @@ + lea srcq, [srcq+srcstrideq*2] + sub heightd, 2 + jg .nextrow +- REP_RET ++ RET + + %if cpuflag(ssse3) + cglobal put_vp8_bilinear%1_h, 6, 6 + npicregs, 5, dst, dststride, src, srcstride, height, mx, picreg +@@ -815,7 +815,7 @@ + lea srcq, [srcq+srcstrideq*2] + sub heightd, 2 + jg .nextrow +- REP_RET ++ RET + %endmacro + + INIT_MMX mmxext +@@ -838,26 +838,7 @@ + lea dstq, [dstq+dststrideq*2] + sub heightd, 2 + jg .nextrow +- REP_RET +- +-%if ARCH_X86_32 +-INIT_MMX mmx +-cglobal put_vp8_pixels16, 5, 5, 0, dst, dststride, src, srcstride, height +-.nextrow: +- movq mm0, [srcq+srcstrideq*0+0] +- movq mm1, [srcq+srcstrideq*0+8] +- movq mm2, [srcq+srcstrideq*1+0] +- movq mm3, [srcq+srcstrideq*1+8] +- lea srcq, [srcq+srcstrideq*2] +- movq [dstq+dststrideq*0+0], mm0 +- movq [dstq+dststrideq*0+8], mm1 +- movq [dstq+dststrideq*1+0], mm2 +- movq [dstq+dststrideq*1+8], mm3 +- lea dstq, [dstq+dststrideq*2] +- sub heightd, 2 +- jg .nextrow +- REP_RET +-%endif ++ RET + + INIT_XMM sse + cglobal put_vp8_pixels16, 5, 5, 2, dst, dststride, src, srcstride, height +@@ -870,7 +851,7 @@ + lea dstq, [dstq+dststrideq*2] + sub heightd, 2 + jg .nextrow +- REP_RET ++ RET + + ;----------------------------------------------------------------------------- + ; void ff_vp8_idct_dc_add_(uint8_t *dst, int16_t block[16], ptrdiff_t stride); +@@ -895,32 +876,6 @@ + %4 [dst2q+strideq+%3], m5 + %endmacro + +-%if ARCH_X86_32 +-INIT_MMX mmx +-cglobal vp8_idct_dc_add, 3, 3, 0, dst, block, stride +- ; load data +- movd m0, [blockq] +- +- ; calculate DC +- paddw m0, [pw_4] +- pxor m1, m1 +- psraw m0, 3 +- movd [blockq], m1 +- psubw m1, m0 +- packuswb m0, m0 +- packuswb m1, m1 +- punpcklbw m0, m0 +- punpcklbw m1, m1 +- punpcklwd m0, m0 +- punpcklwd m1, m1 +- +- ; add DC +- DEFINE_ARGS dst1, dst2, stride +- lea dst2q, [dst1q+strideq*2] +- ADD_DC m0, m1, 0, movh +- RET +-%endif +- + %macro VP8_IDCT_DC_ADD 0 + cglobal vp8_idct_dc_add, 3, 3, 6, dst, block, stride + ; load data +@@ -971,44 +926,6 @@ + ; void ff_vp8_idct_dc_add4y_(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride); + ;----------------------------------------------------------------------------- + +-%if ARCH_X86_32 +-INIT_MMX mmx +-cglobal vp8_idct_dc_add4y, 3, 3, 0, dst, block, stride +- ; load data +- movd m0, [blockq+32*0] ; A +- movd m1, [blockq+32*2] ; C +- punpcklwd m0, [blockq+32*1] ; A B +- punpcklwd m1, [blockq+32*3] ; C D +- punpckldq m0, m1 ; A B C D +- pxor m6, m6 +- +- ; calculate DC +- paddw m0, [pw_4] +- movd [blockq+32*0], m6 +- movd [blockq+32*1], m6 +- movd [blockq+32*2], m6 +- movd [blockq+32*3], m6 +- psraw m0, 3 +- psubw m6, m0 +- packuswb m0, m0 +- packuswb m6, m6 +- punpcklbw m0, m0 ; AABBCCDD +- punpcklbw m6, m6 ; AABBCCDD +- movq m1, m0 +- movq m7, m6 +- punpcklbw m0, m0 ; AAAABBBB +- punpckhbw m1, m1 ; CCCCDDDD +- punpcklbw m6, m6 ; AAAABBBB +- punpckhbw m7, m7 ; CCCCDDDD +- +- ; add DC +- DEFINE_ARGS dst1, dst2, stride +- lea dst2q, [dst1q+strideq*2] +- ADD_DC m0, m6, 0, mova +- ADD_DC m1, m7, 8, mova +- RET +-%endif +- + INIT_XMM sse2 + cglobal vp8_idct_dc_add4y, 3, 3, 6, dst, block, stride + ; load data +@@ -1117,7 +1034,7 @@ + SWAP %4, %3 + %endmacro + +-%macro VP8_IDCT_ADD 0 ++INIT_MMX sse + cglobal vp8_idct_add, 3, 3, 0, dst, block, stride + ; load block data + movq m0, [blockq+ 0] +@@ -1126,17 +1043,9 @@ + movq m3, [blockq+24] + movq m6, [pw_20091] + movq m7, [pw_17734] +-%if cpuflag(sse) + xorps xmm0, xmm0 + movaps [blockq+ 0], xmm0 + movaps [blockq+16], xmm0 +-%else +- pxor m4, m4 +- movq [blockq+ 0], m4 +- movq [blockq+ 8], m4 +- movq [blockq+16], m4 +- movq [blockq+24], m4 +-%endif + + ; actual IDCT + VP8_IDCT_TRANSFORM4x4_1D 0, 1, 2, 3, 4, 5 +@@ -1153,14 +1062,6 @@ + STORE_DIFFx2 m2, m3, m6, m7, m4, 3, dst2q, strideq + + RET +-%endmacro +- +-%if ARCH_X86_32 +-INIT_MMX mmx +-VP8_IDCT_ADD +-%endif +-INIT_MMX sse +-VP8_IDCT_ADD + + ;----------------------------------------------------------------------------- + ; void ff_vp8_luma_dc_wht(int16_t block[4][4][16], int16_t dc[16]) +@@ -1193,23 +1094,15 @@ + SWAP %1, %4, %3 + %endmacro + +-%macro VP8_DC_WHT 0 ++INIT_MMX sse + cglobal vp8_luma_dc_wht, 2, 3, 0, block, dc1, dc2 + movq m0, [dc1q] + movq m1, [dc1q+8] + movq m2, [dc1q+16] + movq m3, [dc1q+24] +-%if cpuflag(sse) + xorps xmm0, xmm0 + movaps [dc1q+ 0], xmm0 + movaps [dc1q+16], xmm0 +-%else +- pxor m4, m4 +- movq [dc1q+ 0], m4 +- movq [dc1q+ 8], m4 +- movq [dc1q+16], m4 +- movq [dc1q+24], m4 +-%endif + HADAMARD4_1D 0, 1, 2, 3 + TRANSPOSE4x4W 0, 1, 2, 3, 4 + paddw m0, [pw_3] +@@ -1221,11 +1114,3 @@ + SCATTER_WHT 0, 1, 0 + SCATTER_WHT 2, 3, 2 + RET +-%endmacro +- +-%if ARCH_X86_32 +-INIT_MMX mmx +-VP8_DC_WHT +-%endif +-INIT_MMX sse +-VP8_DC_WHT +diff -Naur a/media/ffvpx/libavcodec/x86/vp8dsp_init.c b/media/ffvpx/libavcodec/x86/vp8dsp_init.c +--- a/media/ffvpx/libavcodec/x86/vp8dsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp8dsp_init.c 2023-04-06 12:50:06.975471215 +0200 +@@ -22,7 +22,6 @@ + + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" +-#include "libavutil/mem.h" + #include "libavutil/mem_internal.h" + #include "libavutil/x86/cpu.h" + #include "libavcodec/vp8dsp.h" +@@ -33,96 +32,93 @@ + * MC functions + */ + void ff_put_vp8_epel4_h4_mmxext(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel4_h6_mmxext(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel4_v4_mmxext(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel4_v6_mmxext(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + + void ff_put_vp8_epel8_h4_sse2 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_h6_sse2 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_v4_sse2 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_v6_sse2 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + + void ff_put_vp8_epel4_h4_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel4_h6_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel4_v4_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel4_v6_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_h4_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_h6_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_v4_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_epel8_v6_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + + void ff_put_vp8_bilinear4_h_mmxext(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_bilinear8_h_sse2 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_bilinear4_h_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_bilinear8_h_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + + void ff_put_vp8_bilinear4_v_mmxext(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_bilinear8_v_sse2 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_bilinear4_v_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_bilinear8_v_ssse3 (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + + + void ff_put_vp8_pixels8_mmx (uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, +- int height, int mx, int my); +-void ff_put_vp8_pixels16_mmx(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + void ff_put_vp8_pixels16_sse(uint8_t *dst, ptrdiff_t dststride, +- uint8_t *src, ptrdiff_t srcstride, ++ const uint8_t *src, ptrdiff_t srcstride, + int height, int mx, int my); + + #define TAP_W16(OPT, FILTERTYPE, TAPTYPE) \ + static void ff_put_vp8_ ## FILTERTYPE ## 16_ ## TAPTYPE ## _ ## OPT( \ +- uint8_t *dst, ptrdiff_t dststride, uint8_t *src, \ ++ uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ + ptrdiff_t srcstride, int height, int mx, int my) \ + { \ + ff_put_vp8_ ## FILTERTYPE ## 8_ ## TAPTYPE ## _ ## OPT( \ +@@ -141,19 +137,6 @@ + dst + 4, dststride, src + 4, srcstride, height, mx, my); \ + } + +-#if ARCH_X86_32 +-TAP_W8 (mmxext, epel, h4) +-TAP_W8 (mmxext, epel, h6) +-TAP_W16(mmxext, epel, h6) +-TAP_W8 (mmxext, epel, v4) +-TAP_W8 (mmxext, epel, v6) +-TAP_W16(mmxext, epel, v6) +-TAP_W8 (mmxext, bilinear, h) +-TAP_W16(mmxext, bilinear, h) +-TAP_W8 (mmxext, bilinear, v) +-TAP_W16(mmxext, bilinear, v) +-#endif +- + TAP_W16(sse2, epel, h6) + TAP_W16(sse2, epel, v6) + TAP_W16(sse2, bilinear, h) +@@ -166,7 +149,7 @@ + + #define HVTAP(OPT, ALIGN, TAPNUMX, TAPNUMY, SIZE, MAXHEIGHT) \ + static void ff_put_vp8_epel ## SIZE ## _h ## TAPNUMX ## v ## TAPNUMY ## _ ## OPT( \ +- uint8_t *dst, ptrdiff_t dststride, uint8_t *src, \ ++ uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ + ptrdiff_t srcstride, int height, int mx, int my) \ + { \ + LOCAL_ALIGNED(ALIGN, uint8_t, tmp, [SIZE * (MAXHEIGHT + TAPNUMY - 1)]); \ +@@ -178,16 +161,8 @@ + dst, dststride, tmpptr, SIZE, height, mx, my); \ + } + +-#if ARCH_X86_32 +-#define HVTAPMMX(x, y) \ +-HVTAP(mmxext, 8, x, y, 4, 8) \ +-HVTAP(mmxext, 8, x, y, 8, 16) +- +-HVTAP(mmxext, 8, 6, 6, 16, 16) +-#else + #define HVTAPMMX(x, y) \ + HVTAP(mmxext, 8, x, y, 4, 8) +-#endif + + HVTAPMMX(4, 4) + HVTAPMMX(4, 6) +@@ -211,7 +186,7 @@ + + #define HVBILIN(OPT, ALIGN, SIZE, MAXHEIGHT) \ + static void ff_put_vp8_bilinear ## SIZE ## _hv_ ## OPT( \ +- uint8_t *dst, ptrdiff_t dststride, uint8_t *src, \ ++ uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ + ptrdiff_t srcstride, int height, int mx, int my) \ + { \ + LOCAL_ALIGNED(ALIGN, uint8_t, tmp, [SIZE * (MAXHEIGHT + 2)]); \ +@@ -222,31 +197,21 @@ + } + + HVBILIN(mmxext, 8, 4, 8) +-#if ARCH_X86_32 +-HVBILIN(mmxext, 8, 8, 16) +-HVBILIN(mmxext, 8, 16, 16) +-#endif + HVBILIN(sse2, 8, 8, 16) + HVBILIN(sse2, 8, 16, 16) + HVBILIN(ssse3, 8, 4, 8) + HVBILIN(ssse3, 8, 8, 16) + HVBILIN(ssse3, 8, 16, 16) + +-void ff_vp8_idct_dc_add_mmx(uint8_t *dst, int16_t block[16], +- ptrdiff_t stride); + void ff_vp8_idct_dc_add_sse2(uint8_t *dst, int16_t block[16], + ptrdiff_t stride); + void ff_vp8_idct_dc_add_sse4(uint8_t *dst, int16_t block[16], + ptrdiff_t stride); +-void ff_vp8_idct_dc_add4y_mmx(uint8_t *dst, int16_t block[4][16], +- ptrdiff_t stride); + void ff_vp8_idct_dc_add4y_sse2(uint8_t *dst, int16_t block[4][16], + ptrdiff_t stride); + void ff_vp8_idct_dc_add4uv_mmx(uint8_t *dst, int16_t block[2][16], + ptrdiff_t stride); +-void ff_vp8_luma_dc_wht_mmx(int16_t block[4][4][16], int16_t dc[16]); + void ff_vp8_luma_dc_wht_sse(int16_t block[4][4][16], int16_t dc[16]); +-void ff_vp8_idct_add_mmx(uint8_t *dst, int16_t block[16], ptrdiff_t stride); + void ff_vp8_idct_add_sse(uint8_t *dst, int16_t block[16], ptrdiff_t stride); + + #define DECLARE_LOOP_FILTER(NAME) \ +@@ -285,8 +250,6 @@ + ptrdiff_t s, \ + int e, int i, int hvt); + +-DECLARE_LOOP_FILTER(mmx) +-DECLARE_LOOP_FILTER(mmxext) + DECLARE_LOOP_FILTER(sse2) + DECLARE_LOOP_FILTER(ssse3) + DECLARE_LOOP_FILTER(sse4) +@@ -323,10 +286,6 @@ + int cpu_flags = av_get_cpu_flags(); + + if (EXTERNAL_MMX(cpu_flags)) { +-#if ARCH_X86_32 +- c->put_vp8_epel_pixels_tab[0][0][0] = +- c->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_mmx; +-#endif + c->put_vp8_epel_pixels_tab[1][0][0] = + c->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_mmx; + } +@@ -336,12 +295,6 @@ + if (EXTERNAL_MMXEXT(cpu_flags)) { + VP8_MC_FUNC(2, 4, mmxext); + VP8_BILINEAR_MC_FUNC(2, 4, mmxext); +-#if ARCH_X86_32 +- VP8_LUMA_MC_FUNC(0, 16, mmxext); +- VP8_MC_FUNC(1, 8, mmxext); +- VP8_BILINEAR_MC_FUNC(0, 16, mmxext); +- VP8_BILINEAR_MC_FUNC(1, 8, mmxext); +-#endif + } + + if (EXTERNAL_SSE(cpu_flags)) { +@@ -349,7 +302,7 @@ + c->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_sse; + } + +- if (EXTERNAL_SSE2(cpu_flags) || EXTERNAL_SSE2_SLOW(cpu_flags)) { ++ if (EXTERNAL_SSE2_SLOW(cpu_flags)) { + VP8_LUMA_MC_FUNC(0, 16, sse2); + VP8_MC_FUNC(1, 8, sse2); + VP8_BILINEAR_MC_FUNC(0, 16, sse2); +@@ -374,44 +327,6 @@ + + if (EXTERNAL_MMX(cpu_flags)) { + c->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmx; +-#if ARCH_X86_32 +- c->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmx; +- c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmx; +- c->vp8_idct_add = ff_vp8_idct_add_mmx; +- c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmx; +- +- c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmx; +- c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmx; +- +- c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_mmx; +- c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_mmx; +- c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmx; +- c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmx; +- +- c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmx; +- c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmx; +- c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmx; +- c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmx; +-#endif +- } +- +- /* note that 4-tap width=16 functions are missing because w=16 +- * is only used for luma, and luma is always a copy or sixtap. */ +- if (EXTERNAL_MMXEXT(cpu_flags)) { +-#if ARCH_X86_32 +- c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmxext; +- c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmxext; +- +- c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_mmxext; +- c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_mmxext; +- c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmxext; +- c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmxext; +- +- c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmxext; +- c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmxext; +- c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmxext; +- c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmxext; +-#endif + } + + if (EXTERNAL_SSE(cpu_flags)) { +@@ -419,7 +334,7 @@ + c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_sse; + } + +- if (EXTERNAL_SSE2(cpu_flags) || EXTERNAL_SSE2_SLOW(cpu_flags)) { ++ if (EXTERNAL_SSE2_SLOW(cpu_flags)) { + c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_sse2; + + c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_sse2; +diff -Naur a/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm b/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm +--- a/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm 2023-04-06 12:49:40.258395091 +0200 +@@ -46,30 +46,6 @@ + ; void ff_vp8_h/v_loop_filter_simple_(uint8_t *dst, ptrdiff_t stride, int flim); + ;----------------------------------------------------------------------------- + +-; macro called with 7 mm register indexes as argument, and 4 regular registers +-; +-; first 4 mm registers will carry the transposed pixel data +-; the other three are scratchspace (one would be sufficient, but this allows +-; for more spreading/pipelining and thus faster execution on OOE CPUs) +-; +-; first two regular registers are buf+4*stride and buf+5*stride +-; third is -stride, fourth is +stride +-%macro READ_8x4_INTERLEAVED 11 +- ; interleave 8 (A-H) rows of 4 pixels each +- movd m%1, [%8+%10*4] ; A0-3 +- movd m%5, [%9+%10*4] ; B0-3 +- movd m%2, [%8+%10*2] ; C0-3 +- movd m%6, [%8+%10] ; D0-3 +- movd m%3, [%8] ; E0-3 +- movd m%7, [%9] ; F0-3 +- movd m%4, [%9+%11] ; G0-3 +- punpcklbw m%1, m%5 ; A/B interleaved +- movd m%5, [%9+%11*2] ; H0-3 +- punpcklbw m%2, m%6 ; C/D interleaved +- punpcklbw m%3, m%7 ; E/F interleaved +- punpcklbw m%4, m%5 ; G/H interleaved +-%endmacro +- + ; macro called with 7 mm register indexes as argument, and 5 regular registers + ; first 11 mean the same as READ_8x4_TRANSPOSED above + ; fifth regular register is scratchspace to reach the bottom 8 rows, it +@@ -112,26 +88,6 @@ + punpcklbw m%4, m%5 ; G/H/O/P interleaved + %endmacro + +-; write 4 mm registers of 2 dwords each +-; first four arguments are mm register indexes containing source data +-; last four are registers containing buf+4*stride, buf+5*stride, +-; -stride and +stride +-%macro WRITE_4x2D 8 +- ; write out (2 dwords per register) +- movd [%5+%7*4], m%1 +- movd [%5+%7*2], m%2 +- movd [%5], m%3 +- movd [%6+%8], m%4 +- punpckhdq m%1, m%1 +- punpckhdq m%2, m%2 +- punpckhdq m%3, m%3 +- punpckhdq m%4, m%4 +- movd [%6+%7*4], m%1 +- movd [%5+%7], m%2 +- movd [%6], m%3 +- movd [%6+%8*2], m%4 +-%endmacro +- + ; write 4 xmm registers of 4 dwords each + ; arguments same as WRITE_2x4D, but with an extra register, so that the 5 regular + ; registers contain buf+4*stride, buf+5*stride, buf+12*stride, -stride and +stride +@@ -192,42 +148,6 @@ + movd [%7+%9*2], m%4 + %endmacro + +-; write 4 or 8 words in the mmx/xmm registers as 8 lines +-; 1 and 2 are the registers to write, this can be the same (for SSE2) +-; for pre-SSE4: +-; 3 is a general-purpose register that we will clobber +-; for SSE4: +-; 3 is a pointer to the destination's 5th line +-; 4 is a pointer to the destination's 4th line +-; 5/6 is -stride and +stride +-%macro WRITE_2x4W 6 +- movd %3d, %1 +- punpckhdq %1, %1 +- mov [%4+%5*4], %3w +- shr %3, 16 +- add %4, %6 +- mov [%4+%5*4], %3w +- +- movd %3d, %1 +- add %4, %5 +- mov [%4+%5*2], %3w +- shr %3, 16 +- mov [%4+%5 ], %3w +- +- movd %3d, %2 +- punpckhdq %2, %2 +- mov [%4 ], %3w +- shr %3, 16 +- mov [%4+%6 ], %3w +- +- movd %3d, %2 +- add %4, %6 +- mov [%4+%6 ], %3w +- shr %3, 16 +- mov [%4+%6*2], %3w +- add %4, %5 +-%endmacro +- + %macro WRITE_8W 5 + %if cpuflag(sse4) + pextrw [%3+%4*4], %1, 0 +@@ -269,29 +189,19 @@ + + %macro SIMPLE_LOOPFILTER 2 + cglobal vp8_%1_loop_filter_simple, 3, %2, 8, dst, stride, flim, cntr +-%if mmsize == 8 ; mmx/mmxext +- mov cntrq, 2 +-%endif + %if cpuflag(ssse3) + pxor m0, m0 + %endif + SPLATB_REG m7, flim, m0 ; splat "flim" into register + + ; set up indexes to address 4 rows +-%if mmsize == 8 +- DEFINE_ARGS dst1, mstride, stride, cntr, dst2 +-%else + DEFINE_ARGS dst1, mstride, stride, dst3, dst2 +-%endif + mov strideq, mstrideq + neg mstrideq + %ifidn %1, h + lea dst1q, [dst1q+4*strideq-2] + %endif + +-%if mmsize == 8 ; mmx / mmxext +-.next8px: +-%endif + %ifidn %1, v + ; read 4 half/full rows of pixels + mova m0, [dst1q+mstrideq*2] ; p1 +@@ -301,11 +211,7 @@ + %else ; h + lea dst2q, [dst1q+ strideq] + +-%if mmsize == 8 ; mmx/mmxext +- READ_8x4_INTERLEAVED 0, 1, 2, 3, 4, 5, 6, dst1q, dst2q, mstrideq, strideq +-%else ; sse2 + READ_16x4_INTERLEAVED 0, 1, 2, 3, 4, 5, 6, dst1q, dst2q, mstrideq, strideq, dst3q +-%endif + TRANSPOSE4x4W 0, 1, 2, 3, 4 + %endif + +@@ -380,7 +286,6 @@ + inc dst1q + SBUTTERFLY bw, 6, 4, 0 + +-%if mmsize == 16 ; sse2 + %if cpuflag(sse4) + inc dst2q + %endif +@@ -390,35 +295,11 @@ + inc dst3q + %endif + WRITE_8W m4, dst3q, dst2q, mstrideq, strideq +-%else ; mmx/mmxext +- WRITE_2x4W m6, m4, dst2q, dst1q, mstrideq, strideq +-%endif + %endif + +-%if mmsize == 8 ; mmx/mmxext +- ; next 8 pixels +-%ifidn %1, v +- add dst1q, 8 ; advance 8 cols = pixels +-%else ; h +- lea dst1q, [dst1q+strideq*8-1] ; advance 8 rows = lines +-%endif +- dec cntrq +- jg .next8px +- REP_RET +-%else ; sse2 + RET +-%endif + %endmacro + +-%if ARCH_X86_32 +-INIT_MMX mmx +-SIMPLE_LOOPFILTER v, 4 +-SIMPLE_LOOPFILTER h, 5 +-INIT_MMX mmxext +-SIMPLE_LOOPFILTER v, 4 +-SIMPLE_LOOPFILTER h, 5 +-%endif +- + INIT_XMM sse2 + SIMPLE_LOOPFILTER v, 3 + SIMPLE_LOOPFILTER h, 5 +@@ -485,9 +366,6 @@ + + %if %2 == 8 ; chroma + DEFINE_ARGS dst1, dst8, mstride, stride, dst2 +-%elif mmsize == 8 +- DEFINE_ARGS dst1, mstride, stride, dst2, cntr +- mov cntrq, 2 + %else + DEFINE_ARGS dst1, mstride, stride, dst2, dst8 + %endif +@@ -500,9 +378,6 @@ + %endif + %endif + +-%if mmsize == 8 +-.next8px: +-%endif + ; read + lea dst2q, [dst1q+strideq] + %ifidn %1, v +@@ -527,33 +402,7 @@ + movhps m7, [dst8q+ strideq*2] + add dst8q, mstrideq + %endif +-%elif mmsize == 8 ; mmx/mmxext (h) +- ; read 8 rows of 8px each +- movu m0, [dst1q+mstrideq*4] +- movu m1, [dst2q+mstrideq*4] +- movu m2, [dst1q+mstrideq*2] +- movu m3, [dst1q+mstrideq ] +- movu m4, [dst1q] +- movu m5, [dst2q] +- movu m6, [dst2q+ strideq ] +- +- ; 8x8 transpose +- TRANSPOSE4x4B 0, 1, 2, 3, 7 +- mova m_q0backup, m1 +- movu m7, [dst2q+ strideq*2] +- TRANSPOSE4x4B 4, 5, 6, 7, 1 +- SBUTTERFLY dq, 0, 4, 1 ; p3/p2 +- SBUTTERFLY dq, 2, 6, 1 ; q0/q1 +- SBUTTERFLY dq, 3, 7, 1 ; q2/q3 +- mova m1, m_q0backup +- mova m_q0backup, m2 ; store q0 +- SBUTTERFLY dq, 1, 5, 2 ; p1/p0 +- mova m_p0backup, m5 ; store p0 +- SWAP 1, 4 +- SWAP 2, 4 +- SWAP 6, 3 +- SWAP 5, 3 +-%else ; sse2 (h) ++%else ; h + %if %2 == 16 + lea dst8q, [dst1q+ strideq*8] + %endif +@@ -641,25 +490,9 @@ + psubusb m6, m5 ; q2-q1 + por m6, m4 ; abs(q2-q1) + +-%if notcpuflag(mmxext) +- mova m4, m_flimI +- pxor m3, m3 +- psubusb m0, m4 +- psubusb m1, m4 +- psubusb m7, m4 +- psubusb m6, m4 +- pcmpeqb m0, m3 ; abs(p3-p2) <= I +- pcmpeqb m1, m3 ; abs(p2-p1) <= I +- pcmpeqb m7, m3 ; abs(q3-q2) <= I +- pcmpeqb m6, m3 ; abs(q2-q1) <= I +- pand m0, m1 +- pand m7, m6 +- pand m0, m7 +-%else ; mmxext/sse2 + pmaxub m0, m1 + pmaxub m6, m7 + pmaxub m0, m6 +-%endif + + ; normal_limit and high_edge_variance for p1-p0, q1-q0 + SWAP 7, 3 ; now m7 is zero +@@ -681,18 +514,8 @@ + psubusb m1, m3 ; p1-p0 + psubusb m6, m2 ; p0-p1 + por m1, m6 ; abs(p1-p0) +-%if notcpuflag(mmxext) +- mova m6, m1 +- psubusb m1, m4 +- psubusb m6, m_hevthr +- pcmpeqb m1, m7 ; abs(p1-p0) <= I +- pcmpeqb m6, m7 ; abs(p1-p0) <= hev_thresh +- pand m0, m1 +- mova m_maskres, m6 +-%else ; mmxext/sse2 + pmaxub m0, m1 ; max_I + SWAP 1, 4 ; max_hev_thresh +-%endif + + SWAP 6, 4 ; now m6 is I + %ifidn %1, v +@@ -712,17 +535,6 @@ + psubusb m1, m5 ; q0-q1 + psubusb m7, m4 ; q1-q0 + por m1, m7 ; abs(q1-q0) +-%if notcpuflag(mmxext) +- mova m7, m1 +- psubusb m1, m6 +- psubusb m7, m_hevthr +- pxor m6, m6 +- pcmpeqb m1, m6 ; abs(q1-q0) <= I +- pcmpeqb m7, m6 ; abs(q1-q0) <= hev_thresh +- mova m6, m_maskres +- pand m0, m1 ; abs([pq][321]-[pq][210]) <= I +- pand m6, m7 +-%else ; mmxext/sse2 + pxor m7, m7 + pmaxub m0, m1 + pmaxub m6, m1 +@@ -730,7 +542,6 @@ + psubusb m6, m_hevthr + pcmpeqb m0, m7 ; max(abs(..)) <= I + pcmpeqb m6, m7 ; !(max(abs..) > thresh) +-%endif + %ifdef m12 + SWAP 6, 12 + %else +@@ -820,25 +631,12 @@ + %else + mova m6, m_maskres + %endif +-%if notcpuflag(mmxext) +- mova m7, [pb_1] +-%else ; mmxext/sse2 + pxor m7, m7 +-%endif + pand m0, m6 + pand m1, m6 +-%if notcpuflag(mmxext) +- paddusb m0, m7 +- pand m1, [pb_FE] +- pandn m7, m0 +- psrlq m1, 1 +- psrlq m7, 1 +- SWAP 0, 7 +-%else ; mmxext/sse2 + psubusb m1, [pb_1] + pavgb m0, m7 ; a + pavgb m1, m7 ; -a +-%endif + psubusb m5, m0 + psubusb m2, m1 + paddusb m5, m1 ; q1-a +@@ -863,51 +661,13 @@ + ; 4x8/16 transpose + TRANSPOSE4x4B 2, 3, 4, 5, 6 + +-%if mmsize == 8 ; mmx/mmxext (h) +- WRITE_4x2D 2, 3, 4, 5, dst1q, dst2q, mstrideq, strideq +-%else ; sse2 (h) + lea dst8q, [dst8q+mstrideq +2] + WRITE_4x4D 2, 3, 4, 5, dst1q, dst2q, dst8q, mstrideq, strideq, %2 + %endif +-%endif + +-%if mmsize == 8 +-%if %2 == 8 ; chroma +-%ifidn %1, h +- sub dst1q, 2 +-%endif +- cmp dst1q, dst8q +- mov dst1q, dst8q +- jnz .next8px +-%else +-%ifidn %1, h +- lea dst1q, [dst1q+ strideq*8-2] +-%else ; v +- add dst1q, 8 +-%endif +- dec cntrq +- jg .next8px +-%endif +- REP_RET +-%else ; mmsize == 16 + RET +-%endif + %endmacro + +-%if ARCH_X86_32 +-INIT_MMX mmx +-INNER_LOOPFILTER v, 16 +-INNER_LOOPFILTER h, 16 +-INNER_LOOPFILTER v, 8 +-INNER_LOOPFILTER h, 8 +- +-INIT_MMX mmxext +-INNER_LOOPFILTER v, 16 +-INNER_LOOPFILTER h, 16 +-INNER_LOOPFILTER v, 8 +-INNER_LOOPFILTER h, 8 +-%endif +- + INIT_XMM sse2 + INNER_LOOPFILTER v, 16 + INNER_LOOPFILTER h, 16 +@@ -992,9 +752,6 @@ + + %if %2 == 8 ; chroma + DEFINE_ARGS dst1, dst8, mstride, stride, dst2 +-%elif mmsize == 8 +- DEFINE_ARGS dst1, mstride, stride, dst2, cntr +- mov cntrq, 2 + %else + DEFINE_ARGS dst1, mstride, stride, dst2, dst8 + %endif +@@ -1007,9 +764,6 @@ + %endif + %endif + +-%if mmsize == 8 +-.next8px: +-%endif + ; read + lea dst2q, [dst1q+ strideq ] + %ifidn %1, v +@@ -1034,33 +788,7 @@ + movhps m7, [dst8q+ strideq*2] + add dst8q, mstrideq + %endif +-%elif mmsize == 8 ; mmx/mmxext (h) +- ; read 8 rows of 8px each +- movu m0, [dst1q+mstrideq*4] +- movu m1, [dst2q+mstrideq*4] +- movu m2, [dst1q+mstrideq*2] +- movu m3, [dst1q+mstrideq ] +- movu m4, [dst1q] +- movu m5, [dst2q] +- movu m6, [dst2q+ strideq ] +- +- ; 8x8 transpose +- TRANSPOSE4x4B 0, 1, 2, 3, 7 +- mova m_q0backup, m1 +- movu m7, [dst2q+ strideq*2] +- TRANSPOSE4x4B 4, 5, 6, 7, 1 +- SBUTTERFLY dq, 0, 4, 1 ; p3/p2 +- SBUTTERFLY dq, 2, 6, 1 ; q0/q1 +- SBUTTERFLY dq, 3, 7, 1 ; q2/q3 +- mova m1, m_q0backup +- mova m_q0backup, m2 ; store q0 +- SBUTTERFLY dq, 1, 5, 2 ; p1/p0 +- mova m_p0backup, m5 ; store p0 +- SWAP 1, 4 +- SWAP 2, 4 +- SWAP 6, 3 +- SWAP 5, 3 +-%else ; sse2 (h) ++%else ; h + %if %2 == 16 + lea dst8q, [dst1q+ strideq*8 ] + %endif +@@ -1150,25 +878,9 @@ + psubusb m6, m5 ; q2-q1 + por m6, m4 ; abs(q2-q1) + +-%if notcpuflag(mmxext) +- mova m4, m_flimI +- pxor m3, m3 +- psubusb m0, m4 +- psubusb m1, m4 +- psubusb m7, m4 +- psubusb m6, m4 +- pcmpeqb m0, m3 ; abs(p3-p2) <= I +- pcmpeqb m1, m3 ; abs(p2-p1) <= I +- pcmpeqb m7, m3 ; abs(q3-q2) <= I +- pcmpeqb m6, m3 ; abs(q2-q1) <= I +- pand m0, m1 +- pand m7, m6 +- pand m0, m7 +-%else ; mmxext/sse2 + pmaxub m0, m1 + pmaxub m6, m7 + pmaxub m0, m6 +-%endif + + ; normal_limit and high_edge_variance for p1-p0, q1-q0 + SWAP 7, 3 ; now m7 is zero +@@ -1190,18 +902,8 @@ + psubusb m1, m3 ; p1-p0 + psubusb m6, m2 ; p0-p1 + por m1, m6 ; abs(p1-p0) +-%if notcpuflag(mmxext) +- mova m6, m1 +- psubusb m1, m4 +- psubusb m6, m_hevthr +- pcmpeqb m1, m7 ; abs(p1-p0) <= I +- pcmpeqb m6, m7 ; abs(p1-p0) <= hev_thresh +- pand m0, m1 +- mova m_maskres, m6 +-%else ; mmxext/sse2 + pmaxub m0, m1 ; max_I + SWAP 1, 4 ; max_hev_thresh +-%endif + + SWAP 6, 4 ; now m6 is I + %ifidn %1, v +@@ -1221,17 +923,6 @@ + psubusb m1, m5 ; q0-q1 + psubusb m7, m4 ; q1-q0 + por m1, m7 ; abs(q1-q0) +-%if notcpuflag(mmxext) +- mova m7, m1 +- psubusb m1, m6 +- psubusb m7, m_hevthr +- pxor m6, m6 +- pcmpeqb m1, m6 ; abs(q1-q0) <= I +- pcmpeqb m7, m6 ; abs(q1-q0) <= hev_thresh +- mova m6, m_maskres +- pand m0, m1 ; abs([pq][321]-[pq][210]) <= I +- pand m6, m7 +-%else ; mmxext/sse2 + pxor m7, m7 + pmaxub m0, m1 + pmaxub m6, m1 +@@ -1239,7 +930,6 @@ + psubusb m6, m_hevthr + pcmpeqb m0, m7 ; max(abs(..)) <= I + pcmpeqb m6, m7 ; !(max(abs..) > thresh) +-%endif + %ifdef m12 + SWAP 6, 12 + %else +@@ -1510,11 +1200,6 @@ + TRANSPOSE4x4B 1, 2, 3, 4, 0 + SBUTTERFLY bw, 5, 6, 0 + +-%if mmsize == 8 ; mmx/mmxext (h) +- WRITE_4x2D 1, 2, 3, 4, dst1q, dst2q, mstrideq, strideq +- add dst1q, 4 +- WRITE_2x4W m5, m6, dst2q, dst1q, mstrideq, strideq +-%else ; sse2 (h) + lea dst8q, [dst8q+mstrideq+1] + WRITE_4x4D 1, 2, 3, 4, dst1q, dst2q, dst8q, mstrideq, strideq, %2 + lea dst1q, [dst2q+mstrideq+4] +@@ -1528,45 +1213,10 @@ + %endif + WRITE_8W m6, dst2q, dst8q, mstrideq, strideq + %endif +-%endif + +-%if mmsize == 8 +-%if %2 == 8 ; chroma +-%ifidn %1, h +- sub dst1q, 5 +-%endif +- cmp dst1q, dst8q +- mov dst1q, dst8q +- jnz .next8px +-%else +-%ifidn %1, h +- lea dst1q, [dst1q+ strideq*8-5] +-%else ; v +- add dst1q, 8 +-%endif +- dec cntrq +- jg .next8px +-%endif +- REP_RET +-%else ; mmsize == 16 + RET +-%endif + %endmacro + +-%if ARCH_X86_32 +-INIT_MMX mmx +-MBEDGE_LOOPFILTER v, 16 +-MBEDGE_LOOPFILTER h, 16 +-MBEDGE_LOOPFILTER v, 8 +-MBEDGE_LOOPFILTER h, 8 +- +-INIT_MMX mmxext +-MBEDGE_LOOPFILTER v, 16 +-MBEDGE_LOOPFILTER h, 16 +-MBEDGE_LOOPFILTER v, 8 +-MBEDGE_LOOPFILTER h, 8 +-%endif +- + INIT_XMM sse2 + MBEDGE_LOOPFILTER v, 16 + MBEDGE_LOOPFILTER h, 16 +diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c +--- a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c 2023-04-06 12:49:40.258395091 +0200 +@@ -22,7 +22,6 @@ + + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" +-#include "libavutil/mem.h" + #include "libavutil/x86/cpu.h" + #include "libavcodec/vp9dsp.h" + #include "libavcodec/x86/vp9dsp_init.h" +@@ -55,6 +54,8 @@ + decl_ipred_fn(dl, 32, 16, avx2); + decl_ipred_fn(dr, 16, 16, avx2); + decl_ipred_fn(dr, 32, 16, avx2); ++decl_ipred_fn(vl, 16, 16, avx2); ++decl_ipred_fn(hd, 16, 16, avx2); + + #define decl_ipred_dir_funcs(type) \ + decl_ipred_fns(type, 16, sse2, sse2); \ +@@ -140,6 +141,8 @@ + init_ipred_func(dl, DIAG_DOWN_LEFT, 16, 16, avx2); + init_ipred_func(dl, DIAG_DOWN_LEFT, 32, 16, avx2); + init_ipred_func(dr, DIAG_DOWN_RIGHT, 16, 16, avx2); ++ init_ipred_func(vl, VERT_LEFT, 16, 16, avx2); ++ init_ipred_func(hd, HOR_DOWN, 16, 16, avx2); + #if ARCH_X86_64 + init_ipred_func(dr, DIAG_DOWN_RIGHT, 32, 16, avx2); + #endif +diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c +--- a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c 2023-04-06 12:49:40.258395091 +0200 +@@ -22,7 +22,6 @@ + + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" +-#include "libavutil/mem.h" + #include "libavutil/x86/cpu.h" + #include "libavcodec/vp9dsp.h" + #include "libavcodec/x86/vp9dsp_init.h" +diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init.c b/media/ffvpx/libavcodec/x86/vp9dsp_init.c +--- a/media/ffvpx/libavcodec/x86/vp9dsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp9dsp_init.c 2023-04-06 12:49:40.258395091 +0200 +@@ -22,7 +22,6 @@ + + #include "libavutil/attributes.h" + #include "libavutil/cpu.h" +-#include "libavutil/mem.h" + #include "libavutil/x86/cpu.h" + #include "libavcodec/vp9dsp.h" + #include "libavcodec/x86/vp9dsp_init.h" +diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init.h b/media/ffvpx/libavcodec/x86/vp9dsp_init.h +--- a/media/ffvpx/libavcodec/x86/vp9dsp_init.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp9dsp_init.h 2023-04-06 12:49:40.258395091 +0200 +@@ -23,6 +23,7 @@ + #ifndef AVCODEC_X86_VP9DSP_INIT_H + #define AVCODEC_X86_VP9DSP_INIT_H + ++#include "libavutil/attributes.h" + #include "libavutil/mem_internal.h" + + #include "libavcodec/vp9dsp.h" +diff -Naur a/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm b/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm +--- a/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm 2023-04-06 12:49:40.258395091 +0200 +@@ -1222,6 +1222,111 @@ + mova [dst3q+strideq*4], m5 ; 7 + RET + ++cglobal vp9_ipred_vl_16x16_16, 4, 5, 7, dst, stride, l, a ++ movifnidn aq, amp ++ mova m0, [aq] ; abcdefghijklmnop ++ vpbroadcastw xm1, [aq+30] ; pppppppp ++ vperm2i128 m2, m0, m1, q0201 ; ijklmnoppppppppp ++ vpalignr m3, m2, m0, 2 ; bcdefghijklmnopp ++ vperm2i128 m4, m3, m1, q0201 ; jklmnopppppppppp ++ vpalignr m5, m2, m0, 4 ; cdefghijklmnoppp ++ vperm2i128 m6, m5, m1, q0201 ; klmnoppppppppppp ++ LOWPASS 5, 3, 0 ; BCDEFGHIJKLMNOPP ++ LOWPASS 6, 4, 2 ; JKLMNOPPPPPPPPPP ++ pavgw m3, m0 ; abcdefghijklmnop ++ pavgw m4, m2 ; ijklmnoppppppppp ++ DEFINE_ARGS dst, stride, stride3, stride5, dst4 ++ lea dst4q, [dstq+strideq*4] ++ lea stride3q, [strideq*3] ++ lea stride5q, [stride3q+strideq*2] ++ ++ mova [dstq+strideq*0], m3 ; 0 abcdefghijklmnop ++ mova [dstq+strideq*1], m5 ; 1 BCDEFGHIJKLMNOPP ++ vpalignr m0, m4, m3, 2 ++ vpalignr m1, m6, m5, 2 ++ mova [dstq+strideq*2 ], m0 ; 2 bcdefghijklmnopp ++ mova [dstq+stride3q*1], m1 ; 3 CDEFGHIJKLMNOPPP ++ vpalignr m0, m4, m3, 4 ++ vpalignr m1, m6, m5, 4 ++ mova [dst4q+strideq*0], m0 ; 4 cdefghijklmnoppp ++ mova [dstq+stride5q*1], m1 ; 5 DEFGHIJKLMNOPPPP ++ vpalignr m0, m4, m3, 6 ++ vpalignr m1, m6, m5, 6 ++ mova [ dstq+stride3q*2], m0 ; 6 defghijklmnopppp ++ mova [dst4q+stride3q*1], m1 ; 7 EFGHIJKLMNOPPPPP ++ vpalignr m0, m4, m3, 8 ++ vpalignr m1, m6, m5, 8 ++ mova [ dstq+strideq*8], m0 ; 8 efghijklmnoppppp ++ mova [dst4q+stride5q*1], m1 ; 9 FGHIJKLMNOPPPPPP ++ vpalignr m0, m4, m3, 10 ++ mova [dstq+stride5q*2], m0 ; 10 fghijklmnopppppp ++ vpalignr m0, m4, m3, 12 ++ mova [dst4q+strideq*8], m0 ; 12 ghijklmnoppppppp ++ vpalignr m0, m4, m3, 14 ++ mova [dst4q+stride5q*2], m0 ; 14 hijklmnopppppppp ++ sub dst4q, strideq ++ vpalignr m1, m6, m5, 10 ++ mova [dst4q+strideq*8], m1 ; 11 GHIJKLMNOPPPPPPP ++ vpalignr m1, m6, m5, 12 ++ mova [dst4q+stride5q*2], m1 ; 13 HIJKLMNOPPPPPPPP ++ vpalignr m1, m6, m5, 14 ++ mova [dst4q+stride3q*4], m1 ; 15 IJKLMNOPPPPPPPPP ++ RET ++ ++cglobal vp9_ipred_hd_16x16_16, 4, 5, 7, dst, stride, l, a ++ movu m0, [aq-2] ; *abcdefghijklmno ++ mova m1, [lq] ; klmnopqrstuvwxyz ++ vperm2i128 m2, m1, m0, q0201 ; stuvwxyz*abcdefg ++ vpalignr m3, m2, m1, 2 ; lmnopqrstuvwxyz* ++ vpalignr m4, m2, m1, 4 ; mnopqrstuvwxyz*a ++ LOWPASS 4, 3, 1 ; LMNOPQRSTUVWXYZ# ++ pavgw m3, m1 ; klmnopqrstuvwxyz ++ mova m1, [aq] ; abcdefghijklmnop ++ movu m2, [aq+2] ; bcdefghijklmnop. ++ LOWPASS 2, 1, 0 ; ABCDEFGHIJKLMNO. ++ vpunpcklwd m0, m3, m4 ; kLlMmNnOsTtUuVvW ++ vpunpckhwd m1, m3, m4 ; oPpQqRrSwXxYyZz# ++ vperm2i128 m3, m1, m0, q0002 ; kLlMmNnOoPpQqRrS ++ vperm2i128 m4, m0, m1, q0301 ; sTtUuVvWwXxYyZz# ++ vperm2i128 m0, m4, m2, q0201 ; wXxYyZz#ABCDEFGH ++ vperm2i128 m1, m3, m4, q0201 ; oPpQqRrSsTtUuVvW ++ DEFINE_ARGS dst, stride, stride3, stride5, dst5 ++ lea stride3q, [strideq*3] ++ lea stride5q, [stride3q+strideq*2] ++ lea dst5q, [dstq+stride5q] ++ ++ mova [dst5q+stride5q*2], m3 ; 15 kLlMmNnOoPpQqRrS ++ mova [dst5q+stride3q*2], m1 ; 11 oPpQqRrSsTtUuVvW ++ mova [dst5q+strideq*2], m4 ; 7 sTtUuVvWwXxYyZz# ++ mova [dstq+stride3q*1], m0 ; 3 wXxYyZz#ABCDEFGH ++ vpalignr m5, m4, m1, 4 ++ mova [dstq+stride5q*2], m5 ; 10 pQqRrSsTtUuVvWwX ++ vpalignr m5, m0, m4, 4 ++ vpalignr m6, m2, m0, 4 ++ mova [dstq+stride3q*2], m5 ; 6 tUuVvWwXxYyZz#AB ++ mova [dstq+strideq*2], m6 ; 2 xYyZz#ABCDEFGHIJ ++ vpalignr m5, m4, m1, 8 ++ mova [dst5q+strideq*4], m5 ; 9 qRrSsTtUuVvWwXxY ++ vpalignr m5, m0, m4, 8 ++ vpalignr m6, m2, m0, 8 ++ mova [dstq+stride5q*1], m5 ; 5 uVvWwXxYyZz#ABCD ++ mova [dstq+strideq*1], m6 ; 1 yZz#ABCDEFGHIJKL ++ vpalignr m5, m1, m3, 12 ++ vpalignr m6, m4, m1, 12 ++ mova [dstq+stride3q*4], m5 ; 12 nOoPpQqRrSsTtUuV ++ mova [dst5q+stride3q], m6 ; 8 rSsTtUuVvWwXxYyZ ++ vpalignr m5, m0, m4, 12 ++ vpalignr m6, m2, m0, 12 ++ mova [dstq+strideq*4], m5 ; 4 nOoPpQqRrSsTtUuV ++ mova [dstq+strideq*0], m6 ; 0 z#ABCDEFGHIJKLMN ++ sub dst5q, strideq ++ vpalignr m5, m1, m3, 4 ++ mova [dst5q+stride5q*2], m5 ; 14 lMmNnOoPpQqRrSsT ++ sub dst5q, strideq ++ vpalignr m5, m1, m3, 8 ++ mova [dst5q+stride5q*2], m5 ; 13 mNnOoPpQqRrSsTtU ++ RET ++ + %if ARCH_X86_64 + cglobal vp9_ipred_dr_32x32_16, 4, 7, 10, dst, stride, l, a + mova m0, [lq+mmsize*0+0] ; l[0-15] +diff -Naur a/media/ffvpx/libavcodec/x86/vp9mc.asm b/media/ffvpx/libavcodec/x86/vp9mc.asm +--- a/media/ffvpx/libavcodec/x86/vp9mc.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vp9mc.asm 2023-04-06 12:49:40.258395091 +0200 +@@ -604,7 +604,12 @@ + %%pavg m0, [dstq] + %%pavg m1, [dstq+d%3] + %%pavg m2, [dstq+d%4] ++%if %2 == 4 ++ %%srcfn m4, [dstq+d%5] ++ %%pavg m3, m4 ++%else + %%pavg m3, [dstq+d%5] ++%endif + %if %2/mmsize == 8 + %%pavg m4, [dstq+mmsize*4] + %%pavg m5, [dstq+mmsize*5] +diff -Naur a/media/ffvpx/libavcodec/x86/vpx_arith.h b/media/ffvpx/libavcodec/x86/vpx_arith.h +--- a/media/ffvpx/libavcodec/x86/vpx_arith.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavcodec/x86/vpx_arith.h 2023-04-06 12:50:06.975471215 +0200 +@@ -0,0 +1,55 @@ ++/** ++ * VP5 and VP6 compatible video decoder (arith decoder) ++ * ++ * Copyright (C) 2006 Aurelien Jacobs ++ * Copyright (C) 2010 Eli Friedman ++ * ++ * 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 ++ */ ++ ++#ifndef AVCODEC_X86_VPX_ARITH_H ++#define AVCODEC_X86_VPX_ARITH_H ++ ++#include "libavutil/x86/asm.h" ++ ++#if HAVE_INLINE_ASM && HAVE_FAST_CMOV && HAVE_6REGS ++#include "libavutil/attributes.h" ++ ++#define vpx_rac_get_prob vpx_rac_get_prob ++static av_always_inline int vpx_rac_get_prob(VPXRangeCoder *c, uint8_t prob) ++{ ++ unsigned int code_word = vpx_rac_renorm(c); ++ unsigned int low = 1 + (((c->high - 1) * prob) >> 8); ++ unsigned int low_shift = low << 16; ++ int bit = 0; ++ c->code_word = code_word; ++ ++ __asm__( ++ "subl %4, %1 \n\t" ++ "subl %3, %2 \n\t" ++ "setae %b0 \n\t" ++ "cmovb %4, %1 \n\t" ++ "cmovb %5, %2 \n\t" ++ : "+q"(bit), "+&r"(c->high), "+&r"(c->code_word) ++ : "r"(low_shift), "r"(low), "r"(code_word) ++ ); ++ ++ return bit; ++} ++#endif ++ ++#endif /* AVCODEC_X86_VPX_ARITH_H */ +diff -Naur a/media/ffvpx/libavcodec/xiph.c b/media/ffvpx/libavcodec/xiph.c +--- a/media/ffvpx/libavcodec/xiph.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/xiph.c 2023-04-06 12:49:40.258395091 +0200 +@@ -18,6 +18,8 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include ++#include "libavutil/error.h" + #include "libavutil/intreadwrite.h" + #include "xiph.h" + +diff -Naur a/media/ffvpx/libavcodec/xiph.h b/media/ffvpx/libavcodec/xiph.h +--- a/media/ffvpx/libavcodec/xiph.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavcodec/xiph.h 2023-04-06 12:49:40.258395091 +0200 +@@ -21,7 +21,7 @@ + #ifndef AVCODEC_XIPH_H + #define AVCODEC_XIPH_H + +-#include "libavutil/common.h" ++#include + + /** + * Split a single extradata buffer into the three headers that most +diff -Naur a/media/ffvpx/libavutil/aarch64/asm.S b/media/ffvpx/libavutil/aarch64/asm.S +--- a/media/ffvpx/libavutil/aarch64/asm.S 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/aarch64/asm.S 2023-04-06 12:49:40.258395091 +0200 +@@ -36,6 +36,125 @@ + # define __has_feature(x) 0 + #endif + ++ ++/* Support macros for ++ * - Armv8.3-A Pointer Authentication and ++ * - Armv8.5-A Branch Target Identification ++ * features which require emitting a .note.gnu.property section with the ++ * appropriate architecture-dependent feature bits set. ++ * ++ * |AARCH64_SIGN_LINK_REGISTER| and |AARCH64_VALIDATE_LINK_REGISTER| expand to ++ * PACIxSP and AUTIxSP, respectively. |AARCH64_SIGN_LINK_REGISTER| should be ++ * used immediately before saving the LR register (x30) to the stack. ++ * |AARCH64_VALIDATE_LINK_REGISTER| should be used immediately after restoring ++ * it. Note |AARCH64_SIGN_LINK_REGISTER|'s modifications to LR must be undone ++ * with |AARCH64_VALIDATE_LINK_REGISTER| before RET. The SP register must also ++ * have the same value at the two points. For example: ++ * ++ * .global f ++ * f: ++ * AARCH64_SIGN_LINK_REGISTER ++ * stp x29, x30, [sp, #-96]! ++ * mov x29, sp ++ * ... ++ * ldp x29, x30, [sp], #96 ++ * AARCH64_VALIDATE_LINK_REGISTER ++ * ret ++ * ++ * |AARCH64_VALID_CALL_TARGET| expands to BTI 'c'. Either it, or ++ * |AARCH64_SIGN_LINK_REGISTER|, must be used at every point that may be an ++ * indirect call target. In particular, all symbols exported from a file must ++ * begin with one of these macros. For example, a leaf function that does not ++ * save LR can instead use |AARCH64_VALID_CALL_TARGET|: ++ * ++ * .globl return_zero ++ * return_zero: ++ * AARCH64_VALID_CALL_TARGET ++ * mov x0, #0 ++ * ret ++ * ++ * A non-leaf function which does not immediately save LR may need both macros ++ * because |AARCH64_SIGN_LINK_REGISTER| appears late. For example, the function ++ * may jump to an alternate implementation before setting up the stack: ++ * ++ * .globl with_early_jump ++ * with_early_jump: ++ * AARCH64_VALID_CALL_TARGET ++ * cmp x0, #128 ++ * b.lt .Lwith_early_jump_128 ++ * AARCH64_SIGN_LINK_REGISTER ++ * stp x29, x30, [sp, #-96]! ++ * mov x29, sp ++ * ... ++ * ldp x29, x30, [sp], #96 ++ * AARCH64_VALIDATE_LINK_REGISTER ++ * ret ++ * ++ * .Lwith_early_jump_128: ++ * ... ++ * ret ++ * ++ * These annotations are only required with indirect calls. Private symbols that ++ * are only the target of direct calls do not require annotations. Also note ++ * that |AARCH64_VALID_CALL_TARGET| is only valid for indirect calls (BLR), not ++ * indirect jumps (BR). Indirect jumps in assembly are supported through ++ * |AARCH64_VALID_JUMP_TARGET|. Landing Pads which shall serve for jumps and ++ * calls can be created using |AARCH64_VALID_JUMP_CALL_TARGET|. ++ * ++ * Although not necessary, it is safe to use these macros in 32-bit ARM ++ * assembly. This may be used to simplify dual 32-bit and 64-bit files. ++ * ++ * References: ++ * - "ELF for the Arm® 64-bit Architecture" ++ * https: *github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst ++ * - "Providing protection for complex software" ++ * https://developer.arm.com/architectures/learn-the-architecture/providing-protection-for-complex-software ++ */ ++#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) ++# define GNU_PROPERTY_AARCH64_BTI (1 << 0) // Has BTI ++# define AARCH64_VALID_CALL_TARGET hint #34 // BTI 'c' ++# define AARCH64_VALID_JUMP_TARGET hint #38 // BTI 'j' ++#else ++# define GNU_PROPERTY_AARCH64_BTI 0 // No BTI ++# define AARCH64_VALID_CALL_TARGET ++# define AARCH64_VALID_JUMP_TARGET ++#endif ++ ++#if defined(__ARM_FEATURE_PAC_DEFAULT) ++# if ((__ARM_FEATURE_PAC_DEFAULT & (1 << 0)) != 0) // authentication using key A ++# define AARCH64_SIGN_LINK_REGISTER paciasp ++# define AARCH64_VALIDATE_LINK_REGISTER autiasp ++# elif ((__ARM_FEATURE_PAC_DEFAULT & (1 << 1)) != 0) // authentication using key B ++# define AARCH64_SIGN_LINK_REGISTER pacibsp ++# define AARCH64_VALIDATE_LINK_REGISTER autibsp ++# else ++# error Pointer authentication defines no valid key! ++# endif ++# if ((__ARM_FEATURE_PAC_DEFAULT & (1 << 2)) != 0) ++# error Authentication of leaf functions is enabled but not supported in FFmpeg! ++# endif ++# define GNU_PROPERTY_AARCH64_PAC (1 << 1) ++#else ++# define GNU_PROPERTY_AARCH64_PAC 0 ++# define AARCH64_SIGN_LINK_REGISTER ++# define AARCH64_VALIDATE_LINK_REGISTER ++#endif ++ ++ ++#if (GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_PAC != 0) && defined(__ELF__) ++ .pushsection .note.gnu.property, "a" ++ .balign 8 ++ .long 4 ++ .long 0x10 ++ .long 0x5 ++ .asciz "GNU" ++ .long 0xc0000000 /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ ++ .long 4 ++ .long (GNU_PROPERTY_AARCH64_BTI | GNU_PROPERTY_AARCH64_PAC) ++ .long 0 ++ .popsection ++#endif ++ + .macro function name, export=0, align=2 + .macro endfunc + ELF .size \name, . - \name +@@ -49,6 +168,7 @@ + ELF .type EXTERN_ASM\name, %function + FUNC .func EXTERN_ASM\name + EXTERN_ASM\name: ++ AARCH64_VALID_CALL_TARGET + .else + ELF .type \name, %function + FUNC .func \name +diff -Naur a/media/ffvpx/libavutil/aarch64/bswap.h b/media/ffvpx/libavutil/aarch64/bswap.h +--- a/media/ffvpx/libavutil/aarch64/bswap.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/aarch64/bswap.h 2023-04-06 12:50:06.975471215 +0200 +@@ -28,24 +28,29 @@ + #define av_bswap16 av_bswap16 + static av_always_inline av_const unsigned av_bswap16(unsigned x) + { +- __asm__("rev16 %w0, %w0" : "+r"(x)); +- return x; ++ unsigned y; ++ ++ __asm__("rev16 %w0, %w1" : "=r"(y) : "r"(x)); ++ return y; + } + + #define av_bswap32 av_bswap32 + static av_always_inline av_const uint32_t av_bswap32(uint32_t x) + { +- __asm__("rev %w0, %w0" : "+r"(x)); +- return x; ++ uint32_t y; ++ ++ __asm__("rev %w0, %w1" : "=r"(y) : "r"(x)); ++ return y; + } + + #define av_bswap64 av_bswap64 + static av_always_inline av_const uint64_t av_bswap64(uint64_t x) + { +- __asm__("rev %0, %0" : "+r"(x)); +- return x; ++ uint64_t y; ++ ++ __asm__("rev %0, %1" : "=r"(y) : "r"(x)); ++ return y; + } + + #endif /* HAVE_INLINE_ASM */ +- + #endif /* AVUTIL_AARCH64_BSWAP_H */ +diff -Naur a/media/ffvpx/libavutil/adler32.c b/media/ffvpx/libavutil/adler32.c +--- a/media/ffvpx/libavutil/adler32.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/adler32.c 2023-04-06 12:49:40.258395091 +0200 +@@ -32,8 +32,8 @@ + + #include "config.h" + #include "adler32.h" +-#include "common.h" + #include "intreadwrite.h" ++#include "macros.h" + + #define BASE 65521L /* largest prime smaller than 65536 */ + +@@ -41,12 +41,7 @@ + #define DO4(buf) DO1(buf); DO1(buf); DO1(buf); DO1(buf); + #define DO16(buf) DO4(buf); DO4(buf); DO4(buf); DO4(buf); + +-#if FF_API_CRYPTO_SIZE_T +-unsigned long av_adler32_update(unsigned long adler, const uint8_t * buf, +- unsigned int len) +-#else + AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, size_t len) +-#endif + { + unsigned long s1 = adler & 0xffff; + unsigned long s2 = adler >> 16; +diff -Naur a/media/ffvpx/libavutil/adler32.h b/media/ffvpx/libavutil/adler32.h +--- a/media/ffvpx/libavutil/adler32.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/adler32.h 2023-04-06 12:49:40.259395132 +0200 +@@ -30,7 +30,6 @@ + #include + #include + #include "attributes.h" +-#include "version.h" + + /** + * @defgroup lavu_adler32 Adler-32 +@@ -40,11 +39,7 @@ + * @{ + */ + +-#if FF_API_CRYPTO_SIZE_T +-typedef unsigned long AVAdler; +-#else + typedef uint32_t AVAdler; +-#endif + + /** + * Calculate the Adler32 checksum of a buffer. +@@ -59,11 +54,7 @@ + * @return updated checksum + */ + AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, +-#if FF_API_CRYPTO_SIZE_T +- unsigned int len) av_pure; +-#else + size_t len) av_pure; +-#endif + + /** + * @} +diff -Naur a/media/ffvpx/libavutil/arm/bswap.h b/media/ffvpx/libavutil/arm/bswap.h +--- a/media/ffvpx/libavutil/arm/bswap.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/arm/bswap.h 2023-04-06 12:50:06.975471215 +0200 +@@ -39,8 +39,10 @@ + #define av_bswap16 av_bswap16 + static av_always_inline av_const unsigned av_bswap16(unsigned x) + { +- __asm__("rev16 %0, %0" : "+r"(x)); +- return x; ++ unsigned y; ++ ++ __asm__("rev16 %0, %1" : "=r"(y) : "r"(x)); ++ return y; + } + #endif + +@@ -48,17 +50,18 @@ + #define av_bswap32 av_bswap32 + static av_always_inline av_const uint32_t av_bswap32(uint32_t x) + { ++ uint32_t y; + #if HAVE_ARMV6_INLINE +- __asm__("rev %0, %0" : "+r"(x)); ++ __asm__("rev %0, %1" : "=r"(y) : "r"(x)); + #else + uint32_t t; +- __asm__ ("eor %1, %0, %0, ror #16 \n\t" ++ __asm__ ("eor %1, %2, %2, ror #16 \n\t" + "bic %1, %1, #0xFF0000 \n\t" +- "mov %0, %0, ror #8 \n\t" ++ "mov %0, %2, ror #8 \n\t" + "eor %0, %0, %1, lsr #8 \n\t" +- : "+r"(x), "=&r"(t)); ++ : "=r"(y), "=&r"(t) : "r"(x)); + #endif /* HAVE_ARMV6_INLINE */ +- return x; ++ return y; + } + #endif /* AV_GCC_VERSION_AT_MOST(4,4) */ + +diff -Naur a/media/ffvpx/libavutil/arm/cpu.c b/media/ffvpx/libavutil/arm/cpu.c +--- a/media/ffvpx/libavutil/arm/cpu.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/arm/cpu.c 2023-04-06 12:49:40.259395132 +0200 +@@ -38,6 +38,10 @@ + #include + #include "libavutil/avstring.h" + ++#if HAVE_GETAUXVAL ++#include ++#endif ++ + #define AT_HWCAP 16 + + /* Relevant HWCAP values from kernel headers */ +@@ -48,6 +52,19 @@ + #define HWCAP_VFPv3 (1 << 13) + #define HWCAP_TLS (1 << 15) + ++static int get_auxval(uint32_t *hwcap) ++{ ++#if HAVE_GETAUXVAL ++ unsigned long ret = getauxval(AT_HWCAP); ++ if (ret == 0) ++ return -1; ++ *hwcap = ret; ++ return 0; ++#else ++ return -1; ++#endif ++} ++ + static int get_hwcap(uint32_t *hwcap) + { + struct { uint32_t a_type; uint32_t a_val; } auxv; +@@ -106,9 +123,10 @@ + int flags = CORE_CPU_FLAGS; + uint32_t hwcap; + +- if (get_hwcap(&hwcap) < 0) +- if (get_cpuinfo(&hwcap) < 0) +- return flags; ++ if (get_auxval(&hwcap) < 0) ++ if (get_hwcap(&hwcap) < 0) ++ if (get_cpuinfo(&hwcap) < 0) ++ return flags; + + #define check_cap(cap, flag) do { \ + if (hwcap & HWCAP_ ## cap) \ +diff -Naur a/media/ffvpx/libavutil/arm/intmath.h b/media/ffvpx/libavutil/arm/intmath.h +--- a/media/ffvpx/libavutil/arm/intmath.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/arm/intmath.h 2023-04-06 12:50:06.975471215 +0200 +@@ -65,17 +65,29 @@ + #define av_clip_intp2 av_clip_intp2_arm + static av_always_inline av_const int av_clip_intp2_arm(int a, int p) + { +- unsigned x; +- __asm__ ("ssat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p+1)); +- return x; ++ if (av_builtin_constant_p(p)) { ++ unsigned x; ++ __asm__ ("ssat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p+1)); ++ return x; ++ } else { ++ if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) ++ return (a >> 31) ^ ((1 << p) - 1); ++ else ++ return a; ++ } + } + + #define av_clip_uintp2 av_clip_uintp2_arm + static av_always_inline av_const unsigned av_clip_uintp2_arm(int a, int p) + { +- unsigned x; +- __asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p)); +- return x; ++ if (av_builtin_constant_p(p)) { ++ unsigned x; ++ __asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p)); ++ return x; ++ } else { ++ if (a & ~((1<> 31 & ((1< +-#include "avutil.h" + #include "log.h" ++#include "macros.h" + + /** + * assert() equivalent, that is always enabled. +diff -Naur a/media/ffvpx/libavutil/avconfig.h b/media/ffvpx/libavutil/avconfig.h +--- a/media/ffvpx/libavutil/avconfig.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/avconfig.h 2023-04-06 12:49:40.259395132 +0200 +@@ -1,4 +1,4 @@ +-/* Generated by ffconf */ ++/* Generated by ffmpeg configure */ + #ifndef AVUTIL_AVCONFIG_H + #define AVUTIL_AVCONFIG_H + #define AV_HAVE_BIGENDIAN 0 +diff -Naur a/media/ffvpx/libavutil/avsscanf.c b/media/ffvpx/libavutil/avsscanf.c +--- a/media/ffvpx/libavutil/avsscanf.c 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavutil/avsscanf.c 2023-04-06 12:49:40.259395132 +0200 +@@ -0,0 +1,970 @@ ++/* ++ * Copyright (c) 2005-2014 Rich Felker, et al. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining ++ * a copy of this software and associated documentation files (the ++ * "Software"), to deal in the Software without restriction, including ++ * without limitation the rights to use, copy, modify, merge, publish, ++ * distribute, sublicense, and/or sell copies of the Software, and to ++ * permit persons to whom the Software is furnished to do so, subject to ++ * the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be ++ * included in all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "avstring.h" ++#include "libm.h" ++ ++typedef struct FFFILE { ++ size_t buf_size; ++ unsigned char *buf; ++ unsigned char *rpos, *rend; ++ unsigned char *shend; ++ ptrdiff_t shlim, shcnt; ++ void *cookie; ++ size_t (*read)(struct FFFILE *, unsigned char *, size_t); ++} FFFILE; ++ ++#define SIZE_hh -2 ++#define SIZE_h -1 ++#define SIZE_def 0 ++#define SIZE_l 1 ++#define SIZE_L 2 ++#define SIZE_ll 3 ++ ++#define shcnt(f) ((f)->shcnt + ((f)->rpos - (f)->buf)) ++ ++static int fftoread(FFFILE *f) ++{ ++ f->rpos = f->rend = f->buf + f->buf_size; ++ return 0; ++} ++ ++static size_t ffstring_read(FFFILE *f, unsigned char *buf, size_t len) ++{ ++ char *src = f->cookie; ++ size_t k = len+256; ++ char *end = memchr(src, 0, k); ++ ++ if (end) k = end-src; ++ if (k < len) len = k; ++ memcpy(buf, src, len); ++ f->rpos = (void *)(src+len); ++ f->rend = (void *)(src+k); ++ f->cookie = src+k; ++ ++ return len; ++} ++ ++static int ffuflow(FFFILE *f) ++{ ++ unsigned char c; ++ if (!fftoread(f) && f->read(f, &c, 1)==1) return c; ++ return EOF; ++} ++ ++static void ffshlim(FFFILE *f, ptrdiff_t lim) ++{ ++ f->shlim = lim; ++ f->shcnt = f->buf - f->rpos; ++ /* If lim is nonzero, rend must be a valid pointer. */ ++ if (lim && f->rend - f->rpos > lim) ++ f->shend = f->rpos + lim; ++ else ++ f->shend = f->rend; ++} ++ ++static int ffshgetc(FFFILE *f) ++{ ++ int c; ++ ptrdiff_t cnt = shcnt(f); ++ if (f->shlim && cnt >= f->shlim || (c=ffuflow(f)) < 0) { ++ f->shcnt = f->buf - f->rpos + cnt; ++ f->shend = 0; ++ return EOF; ++ } ++ cnt++; ++ if (f->shlim && f->rend - f->rpos > f->shlim - cnt) ++ f->shend = f->rpos + (f->shlim - cnt); ++ else ++ f->shend = f->rend; ++ f->shcnt = f->buf - f->rpos + cnt; ++ if (f->rpos[-1] != c) f->rpos[-1] = c; ++ return c; ++} ++ ++#define shlim(f, lim) ffshlim((f), (lim)) ++#define shgetc(f) (((f)->rpos < (f)->shend) ? *(f)->rpos++ : ffshgetc(f)) ++#define shunget(f) ((f)->shend ? (void)(f)->rpos-- : (void)0) ++ ++static const unsigned char table[] = { -1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, ++ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, ++ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, ++ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, ++ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, ++}; ++ ++static unsigned long long ffintscan(FFFILE *f, unsigned base, int pok, unsigned long long lim) ++{ ++ const unsigned char *val = table+1; ++ int c, neg=0; ++ unsigned x; ++ unsigned long long y; ++ if (base > 36 || base == 1) { ++ errno = EINVAL; ++ return 0; ++ } ++ while (av_isspace((c=shgetc(f)))); ++ if (c=='+' || c=='-') { ++ neg = -(c=='-'); ++ c = shgetc(f); ++ } ++ if ((base == 0 || base == 16) && c=='0') { ++ c = shgetc(f); ++ if ((c|32)=='x') { ++ c = shgetc(f); ++ if (val[c]>=16) { ++ shunget(f); ++ if (pok) shunget(f); ++ else shlim(f, 0); ++ return 0; ++ } ++ base = 16; ++ } else if (base == 0) { ++ base = 8; ++ } ++ } else { ++ if (base == 0) base = 10; ++ if (val[c] >= base) { ++ shunget(f); ++ shlim(f, 0); ++ errno = EINVAL; ++ return 0; ++ } ++ } ++ if (base == 10) { ++ for (x=0; c-'0'<10U && x<=UINT_MAX/10-1; c=shgetc(f)) ++ x = x*10 + (c-'0'); ++ for (y=x; c-'0'<10U && y<=ULLONG_MAX/10 && 10*y<=ULLONG_MAX-(c-'0'); c=shgetc(f)) ++ y = y*10 + (c-'0'); ++ if (c-'0'>=10U) goto done; ++ } else if (!(base & base-1)) { ++ int bs = "\0\1\2\4\7\3\6\5"[(0x17*base)>>5&7]; ++ for (x=0; val[c]>bs; c=shgetc(f)) ++ y = y<=lim) { ++ if (!(lim&1) && !neg) { ++ errno = ERANGE; ++ return lim-1; ++ } else if (y>lim) { ++ errno = ERANGE; ++ return lim; ++ } ++ } ++ return (y^neg)-neg; ++} ++ ++static long long scanexp(FFFILE *f, int pok) ++{ ++ int c; ++ int x; ++ long long y; ++ int neg = 0; ++ ++ c = shgetc(f); ++ if (c=='+' || c=='-') { ++ neg = (c=='-'); ++ c = shgetc(f); ++ if (c-'0'>=10U && pok) shunget(f); ++ } ++ if (c-'0'>=10U) { ++ shunget(f); ++ return LLONG_MIN; ++ } ++ for (x=0; c-'0'<10U && x=0) { ++ shunget(f); ++ } ++ if (!gotdig) { ++ errno = EINVAL; ++ shlim(f, 0); ++ return 0; ++ } ++ ++ /* Handle zero specially to avoid nasty special cases later */ ++ if (!x[0]) return sign * 0.0; ++ ++ /* Optimize small integers (w/no exponent) and over/under-flow */ ++ if (lrp==dc && dc<10 && (bits>30 || x[0]>>bits==0)) ++ return sign * (double)x[0]; ++ if (lrp > -emin/2) { ++ errno = ERANGE; ++ return sign * DBL_MAX * DBL_MAX; ++ } ++ if (lrp < emin-2*DBL_MANT_DIG) { ++ errno = ERANGE; ++ return sign * DBL_MIN * DBL_MIN; ++ } ++ ++ /* Align incomplete final B1B digit */ ++ if (j) { ++ for (; j<9; j++) x[k]*=10; ++ k++; ++ j=0; ++ } ++ ++ a = 0; ++ z = k; ++ e2 = 0; ++ rp = lrp; ++ ++ /* Optimize small to mid-size integers (even in exp. notation) */ ++ if (lnz<9 && lnz<=rp && rp < 18) { ++ int bitlim; ++ if (rp == 9) return sign * (double)x[0]; ++ if (rp < 9) return sign * (double)x[0] / p10s[8-rp]; ++ bitlim = bits-3*(int)(rp-9); ++ if (bitlim>30 || x[0]>>bitlim==0) ++ return sign * (double)x[0] * p10s[rp-10]; ++ } ++ ++ /* Drop trailing zeros */ ++ for (; !x[z-1]; z--); ++ ++ /* Align radix point to B1B digit boundary */ ++ if (rp % 9) { ++ int rpm9 = rp>=0 ? rp%9 : rp%9+9; ++ int p10 = p10s[8-rpm9]; ++ uint32_t carry = 0; ++ for (k=a; k!=z; k++) { ++ uint32_t tmp = x[k] % p10; ++ x[k] = x[k]/p10 + carry; ++ carry = 1000000000/p10 * tmp; ++ if (k==a && !x[k]) { ++ a = (a+1 & MASK); ++ rp -= 9; ++ } ++ } ++ if (carry) x[z++] = carry; ++ rp += 9-rpm9; ++ } ++ ++ /* Upscale until desired number of bits are left of radix point */ ++ while (rp < 9*LD_B1B_DIG || (rp == 9*LD_B1B_DIG && x[a] 1000000000) { ++ carry = tmp / 1000000000; ++ x[k] = tmp % 1000000000; ++ } else { ++ carry = 0; ++ x[k] = tmp; ++ } ++ if (k==(z-1 & MASK) && k!=a && !x[k]) z = k; ++ if (k==a) break; ++ } ++ if (carry) { ++ rp += 9; ++ a = (a-1 & MASK); ++ if (a == z) { ++ z = (z-1 & MASK); ++ x[z-1 & MASK] |= x[z]; ++ } ++ x[a] = carry; ++ } ++ } ++ ++ /* Downscale until exactly number of bits are left of radix point */ ++ for (;;) { ++ uint32_t carry = 0; ++ int sh = 1; ++ for (i=0; i th[i]) break; ++ } ++ if (i==LD_B1B_DIG && rp==9*LD_B1B_DIG) break; ++ /* FIXME: find a way to compute optimal sh */ ++ if (rp > 9+9*LD_B1B_DIG) sh = 9; ++ e2 += sh; ++ for (k=a; k!=z; k=(k+1 & MASK)) { ++ uint32_t tmp = x[k] & (1<>sh) + carry; ++ carry = (1000000000>>sh) * tmp; ++ if (k==a && !x[k]) { ++ a = (a+1 & MASK); ++ i--; ++ rp -= 9; ++ } ++ } ++ if (carry) { ++ if ((z+1 & MASK) != a) { ++ x[z] = carry; ++ z = (z+1 & MASK); ++ } else x[z-1 & MASK] |= 1; ++ } ++ } ++ ++ /* Assemble desired bits into floating point variable */ ++ for (y=i=0; i DBL_MANT_DIG+e2-emin) { ++ bits = DBL_MANT_DIG+e2-emin; ++ if (bits<0) bits=0; ++ denormal = 1; ++ } ++ ++ /* Calculate bias term to force rounding, move out lower bits */ ++ if (bits < DBL_MANT_DIG) { ++ bias = copysign(scalbn(1, 2*DBL_MANT_DIG-bits-1), y); ++ frac = fmod(y, scalbn(1, DBL_MANT_DIG-bits)); ++ y -= frac; ++ y += bias; ++ } ++ ++ /* Process tail of decimal input so it can affect rounding */ ++ if ((a+i & MASK) != z) { ++ uint32_t t = x[a+i & MASK]; ++ if (t < 500000000 && (t || (a+i+1 & MASK) != z)) ++ frac += 0.25*sign; ++ else if (t > 500000000) ++ frac += 0.75*sign; ++ else if (t == 500000000) { ++ if ((a+i+1 & MASK) == z) ++ frac += 0.5*sign; ++ else ++ frac += 0.75*sign; ++ } ++ if (DBL_MANT_DIG-bits >= 2 && !fmod(frac, 1)) ++ frac++; ++ } ++ ++ y += frac; ++ y -= bias; ++ ++ if ((e2+DBL_MANT_DIG & INT_MAX) > emax-5) { ++ if (fabs(y) >= pow(2, DBL_MANT_DIG)) { ++ if (denormal && bits==DBL_MANT_DIG+e2-emin) ++ denormal = 0; ++ y *= 0.5; ++ e2++; ++ } ++ if (e2+DBL_MANT_DIG>emax || (denormal && frac)) ++ errno = ERANGE; ++ } ++ ++ return scalbn(y, e2); ++} ++ ++static double hexfloat(FFFILE *f, int bits, int emin, int sign, int pok) ++{ ++ uint32_t x = 0; ++ double y = 0; ++ double scale = 1; ++ double bias = 0; ++ int gottail = 0, gotrad = 0, gotdig = 0; ++ long long rp = 0; ++ long long dc = 0; ++ long long e2 = 0; ++ int d; ++ int c; ++ ++ c = shgetc(f); ++ ++ /* Skip leading zeros */ ++ for (; c=='0'; c = shgetc(f)) ++ gotdig = 1; ++ ++ if (c=='.') { ++ gotrad = 1; ++ c = shgetc(f); ++ /* Count zeros after the radix point before significand */ ++ for (rp=0; c=='0'; c = shgetc(f), rp--) gotdig = 1; ++ } ++ ++ for (; c-'0'<10U || (c|32)-'a'<6U || c=='.'; c = shgetc(f)) { ++ if (c=='.') { ++ if (gotrad) break; ++ rp = dc; ++ gotrad = 1; ++ } else { ++ gotdig = 1; ++ if (c > '9') d = (c|32)+10-'a'; ++ else d = c-'0'; ++ if (dc<8) { ++ x = x*16 + d; ++ } else if (dc < DBL_MANT_DIG/4+1) { ++ y += d*(scale/=16); ++ } else if (d && !gottail) { ++ y += 0.5*scale; ++ gottail = 1; ++ } ++ dc++; ++ } ++ } ++ if (!gotdig) { ++ shunget(f); ++ if (pok) { ++ shunget(f); ++ if (gotrad) shunget(f); ++ } else { ++ shlim(f, 0); ++ } ++ return sign * 0.0; ++ } ++ if (!gotrad) rp = dc; ++ while (dc<8) x *= 16, dc++; ++ if ((c|32)=='p') { ++ e2 = scanexp(f, pok); ++ if (e2 == LLONG_MIN) { ++ if (pok) { ++ shunget(f); ++ } else { ++ shlim(f, 0); ++ return 0; ++ } ++ e2 = 0; ++ } ++ } else { ++ shunget(f); ++ } ++ e2 += 4*rp - 32; ++ ++ if (!x) return sign * 0.0; ++ if (e2 > -emin) { ++ errno = ERANGE; ++ return sign * DBL_MAX * DBL_MAX; ++ } ++ if (e2 < emin-2*DBL_MANT_DIG) { ++ errno = ERANGE; ++ return sign * DBL_MIN * DBL_MIN; ++ } ++ ++ while (x < 0x80000000) { ++ if (y>=0.5) { ++ x += x + 1; ++ y += y - 1; ++ } else { ++ x += x; ++ y += y; ++ } ++ e2--; ++ } ++ ++ if (bits > 32+e2-emin) { ++ bits = 32+e2-emin; ++ if (bits<0) bits=0; ++ } ++ ++ if (bits < DBL_MANT_DIG) ++ bias = copysign(scalbn(1, 32+DBL_MANT_DIG-bits-1), sign); ++ ++ if (bits<32 && y && !(x&1)) x++, y=0; ++ ++ y = bias + sign*(double)x + sign*y; ++ y -= bias; ++ ++ if (!y) errno = ERANGE; ++ ++ return scalbn(y, e2); ++} ++ ++static double fffloatscan(FFFILE *f, int prec, int pok) ++{ ++ int sign = 1; ++ size_t i; ++ int bits; ++ int emin; ++ int c; ++ ++ switch (prec) { ++ case 0: ++ bits = FLT_MANT_DIG; ++ emin = FLT_MIN_EXP-bits; ++ break; ++ case 1: ++ bits = DBL_MANT_DIG; ++ emin = DBL_MIN_EXP-bits; ++ break; ++ case 2: ++ bits = DBL_MANT_DIG; ++ emin = DBL_MIN_EXP-bits; ++ break; ++ default: ++ return 0; ++ } ++ ++ while (av_isspace((c = shgetc(f)))); ++ ++ if (c=='+' || c=='-') { ++ sign -= 2*(c=='-'); ++ c = shgetc(f); ++ } ++ ++ for (i=0; i<8 && (c|32)=="infinity"[i]; i++) ++ if (i<7) c = shgetc(f); ++ if (i==3 || i==8 || (i>3 && pok)) { ++ if (i!=8) { ++ shunget(f); ++ if (pok) for (; i>3; i--) shunget(f); ++ } ++ return sign * INFINITY; ++ } ++ if (!i) for (i=0; i<3 && (c|32)=="nan"[i]; i++) ++ if (i<2) c = shgetc(f); ++ if (i==3) { ++ if (shgetc(f) != '(') { ++ shunget(f); ++ return NAN; ++ } ++ for (i=1; ; i++) { ++ c = shgetc(f); ++ if (c-'0'<10U || c-'A'<26U || c-'a'<26U || c=='_') ++ continue; ++ if (c==')') return NAN; ++ shunget(f); ++ if (!pok) { ++ errno = EINVAL; ++ shlim(f, 0); ++ return 0; ++ } ++ while (i--) shunget(f); ++ return NAN; ++ } ++ return NAN; ++ } ++ ++ if (i) { ++ shunget(f); ++ errno = EINVAL; ++ shlim(f, 0); ++ return 0; ++ } ++ ++ if (c=='0') { ++ c = shgetc(f); ++ if ((c|32) == 'x') ++ return hexfloat(f, bits, emin, sign, pok); ++ shunget(f); ++ c = '0'; ++ } ++ ++ return decfloat(f, c, bits, emin, sign, pok); ++} ++ ++static void *arg_n(va_list ap, unsigned int n) ++{ ++ void *p; ++ unsigned int i; ++ va_list ap2; ++ va_copy(ap2, ap); ++ for (i=n; i>1; i--) va_arg(ap2, void *); ++ p = va_arg(ap2, void *); ++ va_end(ap2); ++ return p; ++} ++ ++static void store_int(void *dest, int size, unsigned long long i) ++{ ++ if (!dest) return; ++ switch (size) { ++ case SIZE_hh: ++ *(char *)dest = i; ++ break; ++ case SIZE_h: ++ *(short *)dest = i; ++ break; ++ case SIZE_def: ++ *(int *)dest = i; ++ break; ++ case SIZE_l: ++ *(long *)dest = i; ++ break; ++ case SIZE_ll: ++ *(long long *)dest = i; ++ break; ++ } ++} ++ ++static int ff_vfscanf(FFFILE *f, const char *fmt, va_list ap) ++{ ++ int width; ++ int size; ++ int base; ++ const unsigned char *p; ++ int c, t; ++ char *s; ++ void *dest=NULL; ++ int invert; ++ int matches=0; ++ unsigned long long x; ++ double y; ++ ptrdiff_t pos = 0; ++ unsigned char scanset[257]; ++ size_t i; ++ ++ for (p=(const unsigned char *)fmt; *p; p++) { ++ ++ if (av_isspace(*p)) { ++ while (av_isspace(p[1])) p++; ++ shlim(f, 0); ++ while (av_isspace(shgetc(f))); ++ shunget(f); ++ pos += shcnt(f); ++ continue; ++ } ++ if (*p != '%' || p[1] == '%') { ++ shlim(f, 0); ++ if (*p == '%') { ++ p++; ++ while (av_isspace((c=shgetc(f)))); ++ } else { ++ c = shgetc(f); ++ } ++ if (c!=*p) { ++ shunget(f); ++ if (c<0) goto input_fail; ++ goto match_fail; ++ } ++ pos += shcnt(f); ++ continue; ++ } ++ ++ p++; ++ if (*p=='*') { ++ dest = 0; p++; ++ } else if (av_isdigit(*p) && p[1]=='$') { ++ dest = arg_n(ap, *p-'0'); p+=2; ++ } else { ++ dest = va_arg(ap, void *); ++ } ++ ++ for (width=0; av_isdigit(*p); p++) { ++ width = 10*width + *p - '0'; ++ } ++ ++ if (*p=='m') { ++ s = 0; ++ p++; ++ } ++ ++ size = SIZE_def; ++ switch (*p++) { ++ case 'h': ++ if (*p == 'h') p++, size = SIZE_hh; ++ else size = SIZE_h; ++ break; ++ case 'l': ++ if (*p == 'l') p++, size = SIZE_ll; ++ else size = SIZE_l; ++ break; ++ case 'j': ++ size = SIZE_ll; ++ break; ++ case 'z': ++ case 't': ++ size = SIZE_l; ++ break; ++ case 'L': ++ size = SIZE_L; ++ break; ++ case 'd': case 'i': case 'o': case 'u': case 'x': ++ case 'a': case 'e': case 'f': case 'g': ++ case 'A': case 'E': case 'F': case 'G': case 'X': ++ case 's': case 'c': case '[': ++ case 'S': case 'C': ++ case 'p': case 'n': ++ p--; ++ break; ++ default: ++ goto fmt_fail; ++ } ++ ++ t = *p; ++ ++ /* C or S */ ++ if ((t&0x2f) == 3) { ++ t |= 32; ++ size = SIZE_l; ++ } ++ ++ switch (t) { ++ case 'c': ++ if (width < 1) width = 1; ++ case '[': ++ break; ++ case 'n': ++ store_int(dest, size, pos); ++ /* do not increment match count, etc! */ ++ continue; ++ default: ++ shlim(f, 0); ++ while (av_isspace(shgetc(f))); ++ shunget(f); ++ pos += shcnt(f); ++ } ++ ++ shlim(f, width); ++ if (shgetc(f) < 0) goto input_fail; ++ shunget(f); ++ ++ switch (t) { ++ case 's': ++ case 'c': ++ case '[': ++ if (t == 'c' || t == 's') { ++ memset(scanset, -1, sizeof scanset); ++ scanset[0] = 0; ++ if (t == 's') { ++ scanset[1 + '\t'] = 0; ++ scanset[1 + '\n'] = 0; ++ scanset[1 + '\v'] = 0; ++ scanset[1 + '\f'] = 0; ++ scanset[1 + '\r'] = 0; ++ scanset[1 + ' ' ] = 0; ++ } ++ } else { ++ if (*++p == '^') p++, invert = 1; ++ else invert = 0; ++ memset(scanset, invert, sizeof scanset); ++ scanset[0] = 0; ++ if (*p == '-') p++, scanset[1+'-'] = 1-invert; ++ else if (*p == ']') p++, scanset[1+']'] = 1-invert; ++ for (; *p != ']'; p++) { ++ if (!*p) goto fmt_fail; ++ if (*p=='-' && p[1] && p[1] != ']') ++ for (c=p++[-1]; c<*p; c++) ++ scanset[1+c] = 1-invert; ++ scanset[1+*p] = 1-invert; ++ } ++ } ++ s = 0; ++ i = 0; ++ if ((s = dest)) { ++ while (scanset[(c=shgetc(f))+1]) ++ s[i++] = c; ++ } else { ++ while (scanset[(c=shgetc(f))+1]); ++ } ++ shunget(f); ++ if (!shcnt(f)) goto match_fail; ++ if (t == 'c' && shcnt(f) != width) goto match_fail; ++ if (t != 'c') { ++ if (s) s[i] = 0; ++ } ++ break; ++ case 'p': ++ case 'X': ++ case 'x': ++ base = 16; ++ goto int_common; ++ case 'o': ++ base = 8; ++ goto int_common; ++ case 'd': ++ case 'u': ++ base = 10; ++ goto int_common; ++ case 'i': ++ base = 0; ++int_common: ++ x = ffintscan(f, base, 0, ULLONG_MAX); ++ if (!shcnt(f)) ++ goto match_fail; ++ if (t=='p' && dest) ++ *(void **)dest = (void *)(uintptr_t)x; ++ else ++ store_int(dest, size, x); ++ break; ++ case 'a': case 'A': ++ case 'e': case 'E': ++ case 'f': case 'F': ++ case 'g': case 'G': ++ y = fffloatscan(f, size, 0); ++ if (!shcnt(f)) ++ goto match_fail; ++ if (dest) { ++ switch (size) { ++ case SIZE_def: ++ *(float *)dest = y; ++ break; ++ case SIZE_l: ++ *(double *)dest = y; ++ break; ++ case SIZE_L: ++ *(double *)dest = y; ++ break; ++ } ++ } ++ break; ++ } ++ ++ pos += shcnt(f); ++ if (dest) matches++; ++ } ++ if (0) { ++fmt_fail: ++input_fail: ++ if (!matches) matches--; ++ } ++match_fail: ++ return matches; ++} ++ ++static int ff_vsscanf(const char *s, const char *fmt, va_list ap) ++{ ++ FFFILE f = { ++ .buf = (void *)s, .cookie = (void *)s, ++ .read = ffstring_read, ++ }; ++ ++ return ff_vfscanf(&f, fmt, ap); ++} ++ ++int av_sscanf(const char *string, const char *format, ...) ++{ ++ int ret; ++ va_list ap; ++ va_start(ap, format); ++ ret = ff_vsscanf(string, format, ap); ++ va_end(ap); ++ return ret; ++} +diff -Naur a/media/ffvpx/libavutil/avstring.c b/media/ffvpx/libavutil/avstring.c +--- a/media/ffvpx/libavutil/avstring.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/avstring.c 2023-04-06 12:50:24.493176583 +0200 +@@ -19,17 +19,20 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include + #include + #include + #include + #include + + #include "config.h" +-#include "common.h" + #include "mem.h" + #include "avassert.h" + #include "avstring.h" + #include "bprint.h" ++#include "error.h" ++#include "macros.h" ++#include "version.h" + + int av_strstart(const char *str, const char *pfx, const char **ptr) + { +@@ -136,16 +139,6 @@ + return p; + } + +-#if FF_API_D2STR +-char *av_d2str(double d) +-{ +- char *str = av_malloc(16); +- if (str) +- snprintf(str, 16, "%f", d); +- return str; +-} +-#endif +- + #define WHITESPACES " \n\t\r" + + char *av_get_token(const char **buf, const char *term) +diff -Naur a/media/ffvpx/libavutil/avstring.h b/media/ffvpx/libavutil/avstring.h +--- a/media/ffvpx/libavutil/avstring.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/avstring.h 2023-04-06 12:50:24.493176583 +0200 +@@ -135,6 +135,7 @@ + /** + * Get the count of continuous non zero chars starting from the beginning. + * ++ * @param s the string whose length to count + * @param len maximum number of characters to check in the string, that + * is the maximum value which is returned by the function + */ +@@ -156,15 +157,6 @@ + */ + char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); + +-#if FF_API_D2STR +-/** +- * Convert a number to an av_malloced string. +- * @deprecated use av_asprintf() with "%f" or a more specific format +- */ +-attribute_deprecated +-char *av_d2str(double d); +-#endif +- + /** + * Unescape the given string until a non escaped terminating char, + * and return the token corresponding to the unescaped string. +diff -Naur a/media/ffvpx/libavutil/avutil.h b/media/ffvpx/libavutil/avutil.h +--- a/media/ffvpx/libavutil/avutil.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/avutil.h 2023-04-06 12:49:40.259395132 +0200 +@@ -331,12 +331,18 @@ + #define av_int_list_length(list, term) \ + av_int_list_length_for_size(sizeof(*(list)), list, term) + ++#if FF_API_AV_FOPEN_UTF8 + /** + * Open a file using a UTF-8 filename. + * The API of this function matches POSIX fopen(), errors are returned through + * errno. ++ * @deprecated Avoid using it, as on Windows, the FILE* allocated by this ++ * function may be allocated with a different CRT than the caller ++ * who uses the FILE*. No replacement provided in public API. + */ ++attribute_deprecated + FILE *av_fopen_utf8(const char *path, const char *mode); ++#endif + + /** + * Return the fractional representation of the internal time base. +diff -Naur a/media/ffvpx/libavutil/avutil.symbols b/media/ffvpx/libavutil/avutil.symbols +--- a/media/ffvpx/libavutil/avutil.symbols 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/avutil.symbols 2023-04-06 12:55:20.669080807 +0200 +@@ -30,15 +30,23 @@ + av_buffer_ref + av_buffer_unref + av_calloc ++av_channel_layout_check ++av_channel_layout_copy ++av_channel_layout_compare + av_channel_layout_extract_channel ++av_channel_layout_describe ++av_channel_layout_from_mask ++av_channel_layout_uninit + av_chroma_location_name ++av_chroma_location_enum_to_pos ++av_chroma_location_pos_to_enum + av_color_primaries_name + av_color_range_name + av_color_space_name + av_color_transfer_name + av_compare_mod + av_compare_ts +-#ifdef MOZ_WAYLAND ++#ifndef MOZ_FFVPX_AUDIOONLY + av_content_light_metadata_create_side_data + #endif + av_cpu_count +@@ -46,7 +54,6 @@ + av_crc_get_table + av_crc_init + av_d2q +-av_d2str + av_default_get_category + av_default_item_name + av_dict_copy +@@ -54,6 +61,7 @@ + av_dict_free + av_dict_get + av_dict_get_string ++av_dict_iterate + av_dict_parse_string + av_dict_set + av_dict_set_int +@@ -68,20 +76,26 @@ + av_expr_parse + av_expr_parse_and_eval + av_fast_malloc ++av_fast_mallocz + av_fast_realloc + av_fifo_alloc ++av_fifo_alloc2 + av_fifo_alloc_array ++av_fifo_can_read + av_fifo_drain + av_fifo_free + av_fifo_freep ++av_fifo_freep2 + av_fifo_generic_peek + av_fifo_generic_read + av_fifo_generic_write + av_fifo_grow + av_fifo_realloc2 ++av_fifo_read + av_fifo_reset + av_fifo_size + av_fifo_space ++av_fifo_write + av_find_best_pix_fmt_of_2 + av_find_info_tag + av_find_nearest_q_idx +@@ -96,42 +110,16 @@ + av_frame_copy + av_frame_copy_props + av_frame_free +-av_frame_get_best_effort_timestamp + av_frame_get_buffer +-av_frame_get_channel_layout +-av_frame_get_channels +-av_frame_get_color_range +-av_frame_get_colorspace +-av_frame_get_decode_error_flags +-av_frame_get_metadata +-av_frame_get_pkt_duration +-av_frame_get_pkt_pos +-av_frame_get_pkt_size + av_frame_get_plane_buffer +-av_frame_get_qp_table +-av_frame_get_sample_rate + av_frame_get_side_data + av_frame_is_writable + av_frame_make_writable + av_frame_move_ref + av_frame_new_side_data +-#ifdef MOZ_WAYLAND + av_frame_new_side_data_from_buf +-#endif + av_frame_ref + av_frame_remove_side_data +-av_frame_set_best_effort_timestamp +-av_frame_set_channel_layout +-av_frame_set_channels +-av_frame_set_color_range +-av_frame_set_colorspace +-av_frame_set_decode_error_flags +-av_frame_set_metadata +-av_frame_set_pkt_duration +-av_frame_set_pkt_pos +-av_frame_set_pkt_size +-av_frame_set_qp_table +-av_frame_set_sample_rate + av_frame_side_data_name + av_frame_unref + av_free +@@ -146,7 +134,6 @@ + av_get_channel_layout_nb_channels + av_get_channel_layout_string + av_get_channel_name +-av_get_colorspace_name + av_get_cpu_flags + av_get_default_channel_layout + av_get_known_color_name +@@ -201,9 +188,7 @@ + av_log_set_level + av_malloc + av_mallocz +-#ifdef MOZ_WAYLAND + av_mastering_display_metadata_create_side_data +-#endif + av_match_list + av_match_name + av_max_alloc +@@ -211,7 +196,6 @@ + av_memdup + av_mul_q + av_nearer_q +-av_opt_child_class_next + av_opt_child_next + av_opt_copy + av_opt_eval_double +@@ -262,7 +246,6 @@ + av_opt_show2 + av_parse_color + av_parse_cpu_caps +-av_parse_cpu_flags + av_parse_ratio + av_parse_time + av_parse_video_rate +@@ -293,7 +276,6 @@ + av_samples_fill_arrays + av_samples_get_buffer_size + av_samples_set_silence +-av_set_cpu_flags_mask + av_set_options_string + av_small_strptime + av_strcasecmp +@@ -314,9 +296,7 @@ + av_timegm + av_usleep + av_utf8_decode +-av_util_ffversion + av_vbprintf +-av_version_info + #ifndef MOZ_FFVPX_AUDIOONLY + av_video_enc_params_create_side_data + #endif +@@ -328,9 +308,6 @@ + avpriv_request_sample + avpriv_scalarproduct_float_c + avpriv_set_systematic_pal2 +-avutil_configuration +-avutil_license +-avutil_version + #if defined(XP_WIN) && !defined(_ARM64_) + avpriv_emms_asm + #endif +@@ -345,4 +322,3 @@ + av_hwframe_transfer_get_formats + av_hwdevice_ctx_create_derived + av_malloc_array +-av_mallocz_array +diff -Naur a/media/ffvpx/libavutil/base64.c b/media/ffvpx/libavutil/base64.c +--- a/media/ffvpx/libavutil/base64.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/base64.c 2023-04-06 12:49:40.259395132 +0200 +@@ -24,10 +24,12 @@ + * @author Ryan Martell (with lots of Michael) + */ + +-#include "common.h" ++#include ++#include ++ + #include "base64.h" ++#include "error.h" + #include "intreadwrite.h" +-#include "timer.h" + + /* ---------------- private code */ + static const uint8_t map2[256] = +diff -Naur a/media/ffvpx/libavutil/bprint.c b/media/ffvpx/libavutil/bprint.c +--- a/media/ffvpx/libavutil/bprint.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/bprint.c 2023-04-06 12:49:40.259395132 +0200 +@@ -18,16 +18,16 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include + #include + #include + #include + #include +-#include "avassert.h" + #include "avstring.h" + #include "bprint.h" +-#include "common.h" + #include "compat/va_copy.h" + #include "error.h" ++#include "macros.h" + #include "mem.h" + + #define av_bprint_room(buf) ((buf)->size - FFMIN((buf)->len, (buf)->size)) +@@ -245,10 +245,8 @@ + str = buf->str; + buf->str = NULL; + } else { +- str = av_malloc(real_size); +- if (str) +- memcpy(str, buf->str, real_size); +- else ++ str = av_memdup(buf->str, real_size); ++ if (!str) + ret = AVERROR(ENOMEM); + } + *ret_str = str; +diff -Naur a/media/ffvpx/libavutil/bprint.h b/media/ffvpx/libavutil/bprint.h +--- a/media/ffvpx/libavutil/bprint.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/bprint.h 2023-04-06 12:50:06.975471215 +0200 +@@ -18,6 +18,12 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++/** ++ * @file ++ * @ingroup lavu_avbprint ++ * AVBPrint public header ++ */ ++ + #ifndef AVUTIL_BPRINT_H + #define AVUTIL_BPRINT_H + +@@ -27,6 +33,14 @@ + #include "avstring.h" + + /** ++ * @defgroup lavu_avbprint AVBPrint ++ * @ingroup lavu_data ++ * ++ * A buffer to print data progressively ++ * @{ ++ */ ++ ++/** + * Define a structure with extra padding to a fixed size + * This helps ensuring binary compatibility with future versions. + */ +@@ -48,14 +62,14 @@ + * Small buffers are kept in the structure itself, and thus require no + * memory allocation at all (unless the contents of the buffer is needed + * after the structure goes out of scope). This is almost as lightweight as +- * declaring a local "char buf[512]". ++ * declaring a local `char buf[512]`. + * + * The length of the string can go beyond the allocated size: the buffer is + * then truncated, but the functions still keep account of the actual total + * length. + * +- * In other words, buf->len can be greater than buf->size and records the +- * total length of what would have been to the buffer if there had been ++ * In other words, AVBPrint.len can be greater than AVBPrint.size and records ++ * the total length of what would have been to the buffer if there had been + * enough memory. + * + * Append operations do not need to be tested for failure: if a memory +@@ -63,20 +77,17 @@ + * is still updated. This situation can be tested with + * av_bprint_is_complete(). + * +- * The size_max field determines several possible behaviours: +- * +- * size_max = -1 (= UINT_MAX) or any large value will let the buffer be +- * reallocated as necessary, with an amortized linear cost. +- * +- * size_max = 0 prevents writing anything to the buffer: only the total +- * length is computed. The write operations can then possibly be repeated in +- * a buffer with exactly the necessary size +- * (using size_init = size_max = len + 1). +- * +- * size_max = 1 is automatically replaced by the exact size available in the +- * structure itself, thus ensuring no dynamic memory allocation. The +- * internal buffer is large enough to hold a reasonable paragraph of text, +- * such as the current paragraph. ++ * The AVBPrint.size_max field determines several possible behaviours: ++ * - `size_max = -1` (= `UINT_MAX`) or any large value will let the buffer be ++ * reallocated as necessary, with an amortized linear cost. ++ * - `size_max = 0` prevents writing anything to the buffer: only the total ++ * length is computed. The write operations can then possibly be repeated in ++ * a buffer with exactly the necessary size ++ * (using `size_init = size_max = len + 1`). ++ * - `size_max = 1` is automatically replaced by the exact size available in the ++ * structure itself, thus ensuring no dynamic memory allocation. The ++ * internal buffer is large enough to hold a reasonable paragraph of text, ++ * such as the current paragraph. + */ + + FF_PAD_STRUCTURE(AVBPrint, 1024, +@@ -88,12 +99,31 @@ + ) + + /** ++ * @name Max size special values + * Convenience macros for special values for av_bprint_init() size_max + * parameter. ++ * @{ ++ */ ++ ++/** ++ * Buffer will be reallocated as necessary, with an amortized linear cost. + */ + #define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) ++/** ++ * Use the exact size available in the AVBPrint structure itself. ++ * ++ * Thus ensuring no dynamic memory allocation. The internal buffer is large ++ * enough to hold a reasonable paragraph of text, such as the current paragraph. ++ */ + #define AV_BPRINT_SIZE_AUTOMATIC 1 ++/** ++ * Do not write anything to the buffer, only calculate the total length. ++ * ++ * The write operations can then possibly be repeated in a buffer with ++ * exactly the necessary size (using `size_init = size_max = AVBPrint.len + 1`). ++ */ + #define AV_BPRINT_SIZE_COUNT_ONLY 0 ++/** @} */ + + /** + * Init a print buffer. +@@ -101,12 +131,12 @@ + * @param buf buffer to init + * @param size_init initial size (including the final 0) + * @param size_max maximum size; +- * 0 means do not write anything, just count the length; +- * 1 is replaced by the maximum value for automatic storage; +- * any large value means that the internal buffer will be +- * reallocated as needed up to that limit; -1 is converted to +- * UINT_MAX, the largest limit possible. +- * Check also AV_BPRINT_SIZE_* macros. ++ * - `0` means do not write anything, just count the length ++ * - `1` is replaced by the maximum value for automatic storage ++ * any large value means that the internal buffer will be ++ * reallocated as needed up to that limit ++ * - `-1` is converted to `UINT_MAX`, the largest limit possible. ++ * Check also `AV_BPRINT_SIZE_*` macros. + */ + void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); + +@@ -216,4 +246,6 @@ + void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, + enum AVEscapeMode mode, int flags); + ++/** @} */ ++ + #endif /* AVUTIL_BPRINT_H */ +diff -Naur a/media/ffvpx/libavutil/bswap.h b/media/ffvpx/libavutil/bswap.h +--- a/media/ffvpx/libavutil/bswap.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/bswap.h 2023-04-06 12:50:06.975471215 +0200 +@@ -40,6 +40,8 @@ + # include "arm/bswap.h" + #elif ARCH_AVR32 + # include "avr32/bswap.h" ++#elif ARCH_RISCV ++# include "riscv/bswap.h" + #elif ARCH_SH4 + # include "sh4/bswap.h" + #elif ARCH_X86 +diff -Naur a/media/ffvpx/libavutil/buffer.c b/media/ffvpx/libavutil/buffer.c +--- a/media/ffvpx/libavutil/buffer.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/buffer.c 2023-04-06 12:50:06.975471215 +0200 +@@ -26,16 +26,11 @@ + #include "mem.h" + #include "thread.h" + +-AVBufferRef *av_buffer_create(uint8_t *data, buffer_size_t size, +- void (*free)(void *opaque, uint8_t *data), +- void *opaque, int flags) ++static AVBufferRef *buffer_create(AVBuffer *buf, uint8_t *data, size_t size, ++ void (*free)(void *opaque, uint8_t *data), ++ void *opaque, int flags) + { + AVBufferRef *ref = NULL; +- AVBuffer *buf = NULL; +- +- buf = av_mallocz(sizeof(*buf)); +- if (!buf) +- return NULL; + + buf->data = data; + buf->size = size; +@@ -47,10 +42,8 @@ + buf->flags = flags; + + ref = av_mallocz(sizeof(*ref)); +- if (!ref) { +- av_freep(&buf); ++ if (!ref) + return NULL; +- } + + ref->buffer = buf; + ref->data = data; +@@ -59,12 +52,29 @@ + return ref; + } + ++AVBufferRef *av_buffer_create(uint8_t *data, size_t size, ++ void (*free)(void *opaque, uint8_t *data), ++ void *opaque, int flags) ++{ ++ AVBufferRef *ret; ++ AVBuffer *buf = av_mallocz(sizeof(*buf)); ++ if (!buf) ++ return NULL; ++ ++ ret = buffer_create(buf, data, size, free, opaque, flags); ++ if (!ret) { ++ av_free(buf); ++ return NULL; ++ } ++ return ret; ++} ++ + void av_buffer_default_free(void *opaque, uint8_t *data) + { + av_free(data); + } + +-AVBufferRef *av_buffer_alloc(buffer_size_t size) ++AVBufferRef *av_buffer_alloc(size_t size) + { + AVBufferRef *ret = NULL; + uint8_t *data = NULL; +@@ -80,7 +90,7 @@ + return ret; + } + +-AVBufferRef *av_buffer_allocz(buffer_size_t size) ++AVBufferRef *av_buffer_allocz(size_t size) + { + AVBufferRef *ret = av_buffer_alloc(size); + if (!ret) +@@ -90,7 +100,7 @@ + return ret; + } + +-AVBufferRef *av_buffer_ref(AVBufferRef *buf) ++AVBufferRef *av_buffer_ref(const AVBufferRef *buf) + { + AVBufferRef *ret = av_mallocz(sizeof(*ret)); + +@@ -117,8 +127,12 @@ + av_freep(dst); + + if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) { ++ /* b->free below might already free the structure containing *b, ++ * so we have to read the flag now to avoid use-after-free. */ ++ int free_avbuffer = !(b->flags_internal & BUFFER_FLAG_NO_FREE); + b->free(b->opaque, b->data); +- av_freep(&b); ++ if (free_avbuffer) ++ av_free(b); + } + } + +@@ -166,7 +180,7 @@ + return 0; + } + +-int av_buffer_realloc(AVBufferRef **pbuf, buffer_size_t size) ++int av_buffer_realloc(AVBufferRef **pbuf, size_t size) + { + AVBufferRef *buf = *pbuf; + uint8_t *tmp; +@@ -216,7 +230,7 @@ + return 0; + } + +-int av_buffer_replace(AVBufferRef **pdst, AVBufferRef *src) ++int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src) + { + AVBufferRef *dst = *pdst; + AVBufferRef *tmp; +@@ -242,8 +256,8 @@ + return 0; + } + +-AVBufferPool *av_buffer_pool_init2(buffer_size_t size, void *opaque, +- AVBufferRef* (*alloc)(void *opaque, buffer_size_t size), ++AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, ++ AVBufferRef* (*alloc)(void *opaque, size_t size), + void (*pool_free)(void *opaque)) + { + AVBufferPool *pool = av_mallocz(sizeof(*pool)); +@@ -263,7 +277,7 @@ + return pool; + } + +-AVBufferPool *av_buffer_pool_init(buffer_size_t size, AVBufferRef* (*alloc)(buffer_size_t size)) ++AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)) + { + AVBufferPool *pool = av_mallocz(sizeof(*pool)); + if (!pool) +@@ -327,9 +341,6 @@ + BufferPoolEntry *buf = opaque; + AVBufferPool *pool = buf->pool; + +- if(CONFIG_MEMORY_POISONING) +- memset(buf->data, FF_MEMORY_POISON, pool->size); +- + ff_mutex_lock(&pool->mutex); + buf->next = pool->pool; + pool->pool = buf; +@@ -378,11 +389,13 @@ + ff_mutex_lock(&pool->mutex); + buf = pool->pool; + if (buf) { +- ret = av_buffer_create(buf->data, pool->size, pool_release_buffer, +- buf, 0); ++ memset(&buf->buffer, 0, sizeof(buf->buffer)); ++ ret = buffer_create(&buf->buffer, buf->data, pool->size, ++ pool_release_buffer, buf, 0); + if (ret) { + pool->pool = buf->next; + buf->next = NULL; ++ buf->buffer.flags_internal |= BUFFER_FLAG_NO_FREE; + } + } else { + ret = pool_alloc_buffer(pool); +@@ -395,7 +408,7 @@ + return ret; + } + +-void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref) ++void *av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref) + { + BufferPoolEntry *buf = ref->buffer->opaque; + av_assert0(buf); +diff -Naur a/media/ffvpx/libavutil/buffer.h b/media/ffvpx/libavutil/buffer.h +--- a/media/ffvpx/libavutil/buffer.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/buffer.h 2023-04-06 12:49:40.259395132 +0200 +@@ -28,8 +28,6 @@ + #include + #include + +-#include "version.h" +- + /** + * @defgroup lavu_buffer AVBuffer + * @ingroup lavu_data +@@ -93,11 +91,7 @@ + /** + * Size of data in bytes. + */ +-#if FF_API_BUFFER_SIZE_T +- int size; +-#else + size_t size; +-#endif + } AVBufferRef; + + /** +@@ -105,21 +99,13 @@ + * + * @return an AVBufferRef of given size or NULL when out of memory + */ +-#if FF_API_BUFFER_SIZE_T +-AVBufferRef *av_buffer_alloc(int size); +-#else + AVBufferRef *av_buffer_alloc(size_t size); +-#endif + + /** + * Same as av_buffer_alloc(), except the returned buffer will be initialized + * to zero. + */ +-#if FF_API_BUFFER_SIZE_T +-AVBufferRef *av_buffer_allocz(int size); +-#else + AVBufferRef *av_buffer_allocz(size_t size); +-#endif + + /** + * Always treat the buffer as read-only, even when it has only one +@@ -142,11 +128,7 @@ + * + * @return an AVBufferRef referring to data on success, NULL on failure. + */ +-#if FF_API_BUFFER_SIZE_T +-AVBufferRef *av_buffer_create(uint8_t *data, int size, +-#else + AVBufferRef *av_buffer_create(uint8_t *data, size_t size, +-#endif + void (*free)(void *opaque, uint8_t *data), + void *opaque, int flags); + +@@ -163,7 +145,7 @@ + * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on + * failure. + */ +-AVBufferRef *av_buffer_ref(AVBufferRef *buf); ++AVBufferRef *av_buffer_ref(const AVBufferRef *buf); + + /** + * Free a given reference and automatically free the buffer if there are no more +@@ -214,11 +196,7 @@ + * reference to it (i.e. the one passed to this function). In all other cases + * a new buffer is allocated and the data is copied. + */ +-#if FF_API_BUFFER_SIZE_T +-int av_buffer_realloc(AVBufferRef **buf, int size); +-#else + int av_buffer_realloc(AVBufferRef **buf, size_t size); +-#endif + + /** + * Ensure dst refers to the same data as src. +@@ -234,7 +212,7 @@ + * @return 0 on success + * AVERROR(ENOMEM) on memory allocation failure. + */ +-int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); ++int av_buffer_replace(AVBufferRef **dst, const AVBufferRef *src); + + /** + * @} +@@ -285,11 +263,7 @@ + * (av_buffer_alloc()). + * @return newly created buffer pool on success, NULL on error. + */ +-#if FF_API_BUFFER_SIZE_T +-AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); +-#else + AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); +-#endif + + /** + * Allocate and initialize a buffer pool with a more complex allocator. +@@ -306,13 +280,8 @@ + * data. May be NULL. + * @return newly created buffer pool on success, NULL on error. + */ +-#if FF_API_BUFFER_SIZE_T +-AVBufferPool *av_buffer_pool_init2(int size, void *opaque, +- AVBufferRef* (*alloc)(void *opaque, int size), +-#else + AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, + AVBufferRef* (*alloc)(void *opaque, size_t size), +-#endif + void (*pool_free)(void *opaque)); + + /** +@@ -344,7 +313,7 @@ + * therefore you have to use this function to access the original opaque + * parameter of an allocated buffer. + */ +-void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref); ++void *av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref); + + /** + * @} +diff -Naur a/media/ffvpx/libavutil/buffer_internal.h b/media/ffvpx/libavutil/buffer_internal.h +--- a/media/ffvpx/libavutil/buffer_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/buffer_internal.h 2023-04-06 12:49:40.259395132 +0200 +@@ -22,7 +22,6 @@ + #include + #include + +-#include "internal.h" + #include "buffer.h" + #include "thread.h" + +@@ -30,10 +29,15 @@ + * The buffer was av_realloc()ed, so it is reallocatable. + */ + #define BUFFER_FLAG_REALLOCATABLE (1 << 0) ++/** ++ * The AVBuffer structure is part of a larger structure ++ * and should not be freed. ++ */ ++#define BUFFER_FLAG_NO_FREE (1 << 1) + + struct AVBuffer { + uint8_t *data; /**< data described by this buffer */ +- buffer_size_t size; /**< size of data in bytes */ ++ size_t size; /**< size of data in bytes */ + + /** + * number of existing AVBufferRef instances referring to this buffer +@@ -73,6 +77,12 @@ + + AVBufferPool *pool; + struct BufferPoolEntry *next; ++ ++ /* ++ * An AVBuffer structure to (re)use as AVBuffer for subsequent uses ++ * of this BufferPoolEntry. ++ */ ++ AVBuffer buffer; + } BufferPoolEntry; + + struct AVBufferPool { +@@ -90,10 +100,10 @@ + */ + atomic_uint refcount; + +- buffer_size_t size; ++ size_t size; + void *opaque; +- AVBufferRef* (*alloc)(buffer_size_t size); +- AVBufferRef* (*alloc2)(void *opaque, buffer_size_t size); ++ AVBufferRef* (*alloc)(size_t size); ++ AVBufferRef* (*alloc2)(void *opaque, size_t size); + void (*pool_free)(void *opaque); + }; + +diff -Naur a/media/ffvpx/libavutil/channel_layout.c b/media/ffvpx/libavutil/channel_layout.c +--- a/media/ffvpx/libavutil/channel_layout.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/channel_layout.c 2023-04-06 12:50:24.493176583 +0200 +@@ -24,12 +24,19 @@ + */ + + #include ++#include ++#include + +-#include "avstring.h" +-#include "avutil.h" ++#include "avassert.h" + #include "channel_layout.h" + #include "bprint.h" + #include "common.h" ++#include "error.h" ++#include "macros.h" ++#include "opt.h" ++ ++#define CHAN_IS_AMBI(x) ((x) >= AV_CHAN_AMBISONIC_BASE &&\ ++ (x) <= AV_CHAN_AMBISONIC_END) + + struct channel_name { + const char *name; +@@ -37,81 +44,168 @@ + }; + + static const struct channel_name channel_names[] = { +- [0] = { "FL", "front left" }, +- [1] = { "FR", "front right" }, +- [2] = { "FC", "front center" }, +- [3] = { "LFE", "low frequency" }, +- [4] = { "BL", "back left" }, +- [5] = { "BR", "back right" }, +- [6] = { "FLC", "front left-of-center" }, +- [7] = { "FRC", "front right-of-center" }, +- [8] = { "BC", "back center" }, +- [9] = { "SL", "side left" }, +- [10] = { "SR", "side right" }, +- [11] = { "TC", "top center" }, +- [12] = { "TFL", "top front left" }, +- [13] = { "TFC", "top front center" }, +- [14] = { "TFR", "top front right" }, +- [15] = { "TBL", "top back left" }, +- [16] = { "TBC", "top back center" }, +- [17] = { "TBR", "top back right" }, +- [29] = { "DL", "downmix left" }, +- [30] = { "DR", "downmix right" }, +- [31] = { "WL", "wide left" }, +- [32] = { "WR", "wide right" }, +- [33] = { "SDL", "surround direct left" }, +- [34] = { "SDR", "surround direct right" }, +- [35] = { "LFE2", "low frequency 2" }, +- [36] = { "TSL", "top side left" }, +- [37] = { "TSR", "top side right" }, +- [38] = { "BFC", "bottom front center" }, +- [39] = { "BFL", "bottom front left" }, +- [40] = { "BFR", "bottom front right" }, ++ [AV_CHAN_FRONT_LEFT ] = { "FL", "front left" }, ++ [AV_CHAN_FRONT_RIGHT ] = { "FR", "front right" }, ++ [AV_CHAN_FRONT_CENTER ] = { "FC", "front center" }, ++ [AV_CHAN_LOW_FREQUENCY ] = { "LFE", "low frequency" }, ++ [AV_CHAN_BACK_LEFT ] = { "BL", "back left" }, ++ [AV_CHAN_BACK_RIGHT ] = { "BR", "back right" }, ++ [AV_CHAN_FRONT_LEFT_OF_CENTER ] = { "FLC", "front left-of-center" }, ++ [AV_CHAN_FRONT_RIGHT_OF_CENTER] = { "FRC", "front right-of-center" }, ++ [AV_CHAN_BACK_CENTER ] = { "BC", "back center" }, ++ [AV_CHAN_SIDE_LEFT ] = { "SL", "side left" }, ++ [AV_CHAN_SIDE_RIGHT ] = { "SR", "side right" }, ++ [AV_CHAN_TOP_CENTER ] = { "TC", "top center" }, ++ [AV_CHAN_TOP_FRONT_LEFT ] = { "TFL", "top front left" }, ++ [AV_CHAN_TOP_FRONT_CENTER ] = { "TFC", "top front center" }, ++ [AV_CHAN_TOP_FRONT_RIGHT ] = { "TFR", "top front right" }, ++ [AV_CHAN_TOP_BACK_LEFT ] = { "TBL", "top back left" }, ++ [AV_CHAN_TOP_BACK_CENTER ] = { "TBC", "top back center" }, ++ [AV_CHAN_TOP_BACK_RIGHT ] = { "TBR", "top back right" }, ++ [AV_CHAN_STEREO_LEFT ] = { "DL", "downmix left" }, ++ [AV_CHAN_STEREO_RIGHT ] = { "DR", "downmix right" }, ++ [AV_CHAN_WIDE_LEFT ] = { "WL", "wide left" }, ++ [AV_CHAN_WIDE_RIGHT ] = { "WR", "wide right" }, ++ [AV_CHAN_SURROUND_DIRECT_LEFT ] = { "SDL", "surround direct left" }, ++ [AV_CHAN_SURROUND_DIRECT_RIGHT] = { "SDR", "surround direct right" }, ++ [AV_CHAN_LOW_FREQUENCY_2 ] = { "LFE2", "low frequency 2" }, ++ [AV_CHAN_TOP_SIDE_LEFT ] = { "TSL", "top side left" }, ++ [AV_CHAN_TOP_SIDE_RIGHT ] = { "TSR", "top side right" }, ++ [AV_CHAN_BOTTOM_FRONT_CENTER ] = { "BFC", "bottom front center" }, ++ [AV_CHAN_BOTTOM_FRONT_LEFT ] = { "BFL", "bottom front left" }, ++ [AV_CHAN_BOTTOM_FRONT_RIGHT ] = { "BFR", "bottom front right" }, + }; + +-static const char *get_channel_name(int channel_id) ++static const char *get_channel_name(enum AVChannel channel_id) + { +- if (channel_id < 0 || channel_id >= FF_ARRAY_ELEMS(channel_names)) ++ if ((unsigned) channel_id >= FF_ARRAY_ELEMS(channel_names) || ++ !channel_names[channel_id].name) + return NULL; + return channel_names[channel_id].name; + } + +-static const struct { ++void av_channel_name_bprint(AVBPrint *bp, enum AVChannel channel_id) ++{ ++ if (channel_id >= AV_CHAN_AMBISONIC_BASE && ++ channel_id <= AV_CHAN_AMBISONIC_END) ++ av_bprintf(bp, "AMBI%d", channel_id - AV_CHAN_AMBISONIC_BASE); ++ else if ((unsigned)channel_id < FF_ARRAY_ELEMS(channel_names) && ++ channel_names[channel_id].name) ++ av_bprintf(bp, "%s", channel_names[channel_id].name); ++ else if (channel_id == AV_CHAN_NONE) ++ av_bprintf(bp, "NONE"); ++ else ++ av_bprintf(bp, "USR%d", channel_id); ++} ++ ++int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel_id) ++{ ++ AVBPrint bp; ++ ++ if (!buf && buf_size) ++ return AVERROR(EINVAL); ++ ++ av_bprint_init_for_buffer(&bp, buf, buf_size); ++ av_channel_name_bprint(&bp, channel_id); ++ ++ return bp.len; ++} ++ ++void av_channel_description_bprint(AVBPrint *bp, enum AVChannel channel_id) ++{ ++ if (channel_id >= AV_CHAN_AMBISONIC_BASE && ++ channel_id <= AV_CHAN_AMBISONIC_END) ++ av_bprintf(bp, "ambisonic ACN %d", channel_id - AV_CHAN_AMBISONIC_BASE); ++ else if ((unsigned)channel_id < FF_ARRAY_ELEMS(channel_names) && ++ channel_names[channel_id].description) ++ av_bprintf(bp, "%s", channel_names[channel_id].description); ++ else if (channel_id == AV_CHAN_NONE) ++ av_bprintf(bp, "none"); ++ else ++ av_bprintf(bp, "user %d", channel_id); ++} ++ ++int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel_id) ++{ ++ AVBPrint bp; ++ ++ if (!buf && buf_size) ++ return AVERROR(EINVAL); ++ ++ av_bprint_init_for_buffer(&bp, buf, buf_size); ++ av_channel_description_bprint(&bp, channel_id); ++ ++ return bp.len; ++} ++ ++enum AVChannel av_channel_from_string(const char *str) ++{ ++ int i; ++ char *endptr = (char *)str; ++ enum AVChannel id = AV_CHAN_NONE; ++ ++ if (!strncmp(str, "AMBI", 4)) { ++ i = strtol(str + 4, NULL, 0); ++ if (i < 0 || i > AV_CHAN_AMBISONIC_END - AV_CHAN_AMBISONIC_BASE) ++ return AV_CHAN_NONE; ++ return AV_CHAN_AMBISONIC_BASE + i; ++ } ++ ++ for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) { ++ if (channel_names[i].name && !strcmp(str, channel_names[i].name)) ++ return i; ++ } ++ if (!strncmp(str, "USR", 3)) { ++ const char *p = str + 3; ++ id = strtol(p, &endptr, 0); ++ } ++ if (id >= 0 && !*endptr) ++ return id; ++ ++ return AV_CHAN_NONE; ++} ++ ++struct channel_layout_name { + const char *name; +- int nb_channels; +- uint64_t layout; +-} channel_layout_map[] = { +- { "mono", 1, AV_CH_LAYOUT_MONO }, +- { "stereo", 2, AV_CH_LAYOUT_STEREO }, +- { "2.1", 3, AV_CH_LAYOUT_2POINT1 }, +- { "3.0", 3, AV_CH_LAYOUT_SURROUND }, +- { "3.0(back)", 3, AV_CH_LAYOUT_2_1 }, +- { "4.0", 4, AV_CH_LAYOUT_4POINT0 }, +- { "quad", 4, AV_CH_LAYOUT_QUAD }, +- { "quad(side)", 4, AV_CH_LAYOUT_2_2 }, +- { "3.1", 4, AV_CH_LAYOUT_3POINT1 }, +- { "5.0", 5, AV_CH_LAYOUT_5POINT0_BACK }, +- { "5.0(side)", 5, AV_CH_LAYOUT_5POINT0 }, +- { "4.1", 5, AV_CH_LAYOUT_4POINT1 }, +- { "5.1", 6, AV_CH_LAYOUT_5POINT1_BACK }, +- { "5.1(side)", 6, AV_CH_LAYOUT_5POINT1 }, +- { "6.0", 6, AV_CH_LAYOUT_6POINT0 }, +- { "6.0(front)", 6, AV_CH_LAYOUT_6POINT0_FRONT }, +- { "hexagonal", 6, AV_CH_LAYOUT_HEXAGONAL }, +- { "6.1", 7, AV_CH_LAYOUT_6POINT1 }, +- { "6.1(back)", 7, AV_CH_LAYOUT_6POINT1_BACK }, +- { "6.1(front)", 7, AV_CH_LAYOUT_6POINT1_FRONT }, +- { "7.0", 7, AV_CH_LAYOUT_7POINT0 }, +- { "7.0(front)", 7, AV_CH_LAYOUT_7POINT0_FRONT }, +- { "7.1", 8, AV_CH_LAYOUT_7POINT1 }, +- { "7.1(wide)", 8, AV_CH_LAYOUT_7POINT1_WIDE_BACK }, +- { "7.1(wide-side)", 8, AV_CH_LAYOUT_7POINT1_WIDE }, +- { "octagonal", 8, AV_CH_LAYOUT_OCTAGONAL }, +- { "hexadecagonal", 16, AV_CH_LAYOUT_HEXADECAGONAL }, +- { "downmix", 2, AV_CH_LAYOUT_STEREO_DOWNMIX, }, +- { "22.2", 24, AV_CH_LAYOUT_22POINT2, }, ++ AVChannelLayout layout; ++}; ++ ++static const struct channel_layout_name channel_layout_map[] = { ++ { "mono", AV_CHANNEL_LAYOUT_MONO }, ++ { "stereo", AV_CHANNEL_LAYOUT_STEREO }, ++ { "2.1", AV_CHANNEL_LAYOUT_2POINT1 }, ++ { "3.0", AV_CHANNEL_LAYOUT_SURROUND }, ++ { "3.0(back)", AV_CHANNEL_LAYOUT_2_1 }, ++ { "4.0", AV_CHANNEL_LAYOUT_4POINT0 }, ++ { "quad", AV_CHANNEL_LAYOUT_QUAD }, ++ { "quad(side)", AV_CHANNEL_LAYOUT_2_2 }, ++ { "3.1", AV_CHANNEL_LAYOUT_3POINT1 }, ++ { "5.0", AV_CHANNEL_LAYOUT_5POINT0_BACK }, ++ { "5.0(side)", AV_CHANNEL_LAYOUT_5POINT0 }, ++ { "4.1", AV_CHANNEL_LAYOUT_4POINT1 }, ++ { "5.1", AV_CHANNEL_LAYOUT_5POINT1_BACK }, ++ { "5.1(side)", AV_CHANNEL_LAYOUT_5POINT1 }, ++ { "6.0", AV_CHANNEL_LAYOUT_6POINT0 }, ++ { "6.0(front)", AV_CHANNEL_LAYOUT_6POINT0_FRONT }, ++ { "hexagonal", AV_CHANNEL_LAYOUT_HEXAGONAL }, ++ { "6.1", AV_CHANNEL_LAYOUT_6POINT1 }, ++ { "6.1(back)", AV_CHANNEL_LAYOUT_6POINT1_BACK }, ++ { "6.1(front)", AV_CHANNEL_LAYOUT_6POINT1_FRONT }, ++ { "7.0", AV_CHANNEL_LAYOUT_7POINT0 }, ++ { "7.0(front)", AV_CHANNEL_LAYOUT_7POINT0_FRONT }, ++ { "7.1", AV_CHANNEL_LAYOUT_7POINT1 }, ++ { "7.1(wide)", AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK }, ++ { "7.1(wide-side)", AV_CHANNEL_LAYOUT_7POINT1_WIDE }, ++ { "7.1(top)", AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK }, ++ { "octagonal", AV_CHANNEL_LAYOUT_OCTAGONAL }, ++ { "cube", AV_CHANNEL_LAYOUT_CUBE }, ++ { "hexadecagonal", AV_CHANNEL_LAYOUT_HEXADECAGONAL }, ++ { "downmix", AV_CHANNEL_LAYOUT_STEREO_DOWNMIX, }, ++ { "22.2", AV_CHANNEL_LAYOUT_22POINT2, }, + }; + ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + static uint64_t get_channel_layout_single(const char *name, int name_len) + { + int i; +@@ -121,7 +215,7 @@ + for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) { + if (strlen(channel_layout_map[i].name) == name_len && + !memcmp(channel_layout_map[i].name, name, name_len)) +- return channel_layout_map[i].layout; ++ return channel_layout_map[i].layout.u.mask; + } + for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) + if (channel_names[i].name && +@@ -189,8 +283,8 @@ + nb_channels = av_get_channel_layout_nb_channels(channel_layout); + + for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) +- if (nb_channels == channel_layout_map[i].nb_channels && +- channel_layout == channel_layout_map[i].layout) { ++ if (nb_channels == channel_layout_map[i].layout.nb_channels && ++ channel_layout == channel_layout_map[i].layout.u.mask) { + av_bprintf(bp, "%s", channel_layout_map[i].name); + return; + } +@@ -231,8 +325,8 @@ + int64_t av_get_default_channel_layout(int nb_channels) { + int i; + for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) +- if (nb_channels == channel_layout_map[i].nb_channels) +- return channel_layout_map[i].layout; ++ if (nb_channels == channel_layout_map[i].layout.nb_channels) ++ return channel_layout_map[i].layout.u.mask; + return 0; + } + +@@ -287,7 +381,626 @@ + { + if (index >= FF_ARRAY_ELEMS(channel_layout_map)) + return AVERROR_EOF; +- if (layout) *layout = channel_layout_map[index].layout; ++ if (layout) *layout = channel_layout_map[index].layout.u.mask; + if (name) *name = channel_layout_map[index].name; + return 0; + } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ ++int av_channel_layout_from_mask(AVChannelLayout *channel_layout, ++ uint64_t mask) ++{ ++ if (!mask) ++ return AVERROR(EINVAL); ++ ++ channel_layout->order = AV_CHANNEL_ORDER_NATIVE; ++ channel_layout->nb_channels = av_popcount64(mask); ++ channel_layout->u.mask = mask; ++ ++ return 0; ++} ++ ++int av_channel_layout_from_string(AVChannelLayout *channel_layout, ++ const char *str) ++{ ++ int i; ++ int channels = 0, nb_channels = 0, native = 1; ++ enum AVChannel highest_channel = AV_CHAN_NONE; ++ const char *dup; ++ char *chlist, *end; ++ uint64_t mask = 0; ++ ++ /* channel layout names */ ++ for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) { ++ if (channel_layout_map[i].name && !strcmp(str, channel_layout_map[i].name)) { ++ *channel_layout = channel_layout_map[i].layout; ++ return 0; ++ } ++ } ++ ++ /* ambisonic */ ++ if (!strncmp(str, "ambisonic ", 10)) { ++ const char *p = str + 10; ++ char *endptr; ++ AVChannelLayout extra = {0}; ++ int order; ++ ++ order = strtol(p, &endptr, 0); ++ if (order < 0 || order + 1 > INT_MAX / (order + 1) || ++ (*endptr && *endptr != '+')) ++ return AVERROR(EINVAL); ++ ++ channel_layout->order = AV_CHANNEL_ORDER_AMBISONIC; ++ channel_layout->nb_channels = (order + 1) * (order + 1); ++ ++ if (*endptr) { ++ int ret = av_channel_layout_from_string(&extra, endptr + 1); ++ if (ret < 0) ++ return ret; ++ if (extra.nb_channels >= INT_MAX - channel_layout->nb_channels) { ++ av_channel_layout_uninit(&extra); ++ return AVERROR(EINVAL); ++ } ++ ++ if (extra.order == AV_CHANNEL_ORDER_NATIVE) { ++ channel_layout->u.mask = extra.u.mask; ++ } else { ++ channel_layout->order = AV_CHANNEL_ORDER_CUSTOM; ++ channel_layout->u.map = ++ av_calloc(channel_layout->nb_channels + extra.nb_channels, ++ sizeof(*channel_layout->u.map)); ++ if (!channel_layout->u.map) { ++ av_channel_layout_uninit(&extra); ++ return AVERROR(ENOMEM); ++ } ++ ++ for (i = 0; i < channel_layout->nb_channels; i++) ++ channel_layout->u.map[i].id = AV_CHAN_AMBISONIC_BASE + i; ++ for (i = 0; i < extra.nb_channels; i++) { ++ enum AVChannel ch = av_channel_layout_channel_from_index(&extra, i); ++ if (CHAN_IS_AMBI(ch)) { ++ av_channel_layout_uninit(&extra); ++ return AVERROR(EINVAL); ++ } ++ channel_layout->u.map[channel_layout->nb_channels + i].id = ch; ++ if (extra.order == AV_CHANNEL_ORDER_CUSTOM && ++ extra.u.map[i].name[0]) ++ av_strlcpy(channel_layout->u.map[channel_layout->nb_channels + i].name, ++ extra.u.map[i].name, ++ sizeof(channel_layout->u.map[channel_layout->nb_channels + i].name)); ++ } ++ } ++ channel_layout->nb_channels += extra.nb_channels; ++ av_channel_layout_uninit(&extra); ++ } ++ ++ return 0; ++ } ++ ++ chlist = av_strdup(str); ++ if (!chlist) ++ return AVERROR(ENOMEM); ++ ++ /* channel names */ ++ av_sscanf(str, "%d channels (%[^)]", &nb_channels, chlist); ++ end = strchr(str, ')'); ++ ++ dup = chlist; ++ while (*dup) { ++ char *channel, *chname; ++ int ret = av_opt_get_key_value(&dup, "@", "+", AV_OPT_FLAG_IMPLICIT_KEY, &channel, &chname); ++ if (ret < 0) { ++ av_free(chlist); ++ return ret; ++ } ++ if (*dup) ++ dup++; // skip separator ++ if (channel && !*channel) ++ av_freep(&channel); ++ for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) { ++ if (channel_names[i].name && !strcmp(channel ? channel : chname, channel_names[i].name)) { ++ if (channel || i < highest_channel || mask & (1ULL << i)) ++ native = 0; // Not a native layout, use a custom one ++ highest_channel = i; ++ mask |= 1ULL << i; ++ break; ++ } ++ } ++ ++ if (!channel && i >= FF_ARRAY_ELEMS(channel_names)) { ++ char *endptr = chname; ++ enum AVChannel id = AV_CHAN_NONE; ++ ++ if (!strncmp(chname, "USR", 3)) { ++ const char *p = chname + 3; ++ id = strtol(p, &endptr, 0); ++ } ++ if (id < 0 || *endptr) { ++ native = 0; // Unknown channel name ++ channels = 0; ++ mask = 0; ++ av_free(chname); ++ break; ++ } ++ if (id > 63) ++ native = 0; // Not a native layout, use a custom one ++ else { ++ if (id < highest_channel || mask & (1ULL << id)) ++ native = 0; // Not a native layout, use a custom one ++ highest_channel = id; ++ mask |= 1ULL << id; ++ } ++ } ++ channels++; ++ av_free(channel); ++ av_free(chname); ++ } ++ ++ if (mask && native) { ++ av_free(chlist); ++ if (nb_channels && ((nb_channels != channels) || (!end || *++end))) ++ return AVERROR(EINVAL); ++ av_channel_layout_from_mask(channel_layout, mask); ++ return 0; ++ } ++ ++ /* custom layout of channel names */ ++ if (channels && !native) { ++ int idx = 0; ++ ++ if (nb_channels && ((nb_channels != channels) || (!end || *++end))) { ++ av_free(chlist); ++ return AVERROR(EINVAL); ++ } ++ ++ channel_layout->u.map = av_calloc(channels, sizeof(*channel_layout->u.map)); ++ if (!channel_layout->u.map) { ++ av_free(chlist); ++ return AVERROR(ENOMEM); ++ } ++ ++ channel_layout->order = AV_CHANNEL_ORDER_CUSTOM; ++ channel_layout->nb_channels = channels; ++ ++ dup = chlist; ++ while (*dup) { ++ char *channel, *chname; ++ int ret = av_opt_get_key_value(&dup, "@", "+", AV_OPT_FLAG_IMPLICIT_KEY, &channel, &chname); ++ if (ret < 0) { ++ av_freep(&channel_layout->u.map); ++ av_free(chlist); ++ return ret; ++ } ++ if (*dup) ++ dup++; // skip separator ++ for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) { ++ if (channel_names[i].name && !strcmp(channel ? channel : chname, channel_names[i].name)) { ++ channel_layout->u.map[idx].id = i; ++ if (channel) ++ av_strlcpy(channel_layout->u.map[idx].name, chname, sizeof(channel_layout->u.map[idx].name)); ++ idx++; ++ break; ++ } ++ } ++ if (i >= FF_ARRAY_ELEMS(channel_names)) { ++ const char *p = (channel ? channel : chname) + 3; ++ channel_layout->u.map[idx].id = strtol(p, NULL, 0); ++ if (channel) ++ av_strlcpy(channel_layout->u.map[idx].name, chname, sizeof(channel_layout->u.map[idx].name)); ++ idx++; ++ } ++ av_free(channel); ++ av_free(chname); ++ } ++ av_free(chlist); ++ ++ return 0; ++ } ++ av_freep(&chlist); ++ ++ errno = 0; ++ mask = strtoull(str, &end, 0); ++ ++ /* channel layout mask */ ++ if (!errno && !*end && !strchr(str, '-') && mask) { ++ av_channel_layout_from_mask(channel_layout, mask); ++ return 0; ++ } ++ ++ errno = 0; ++ channels = strtol(str, &end, 10); ++ ++ /* number of channels */ ++ if (!errno && !strcmp(end, "c") && channels > 0) { ++ av_channel_layout_default(channel_layout, channels); ++ if (channel_layout->order == AV_CHANNEL_ORDER_NATIVE) ++ return 0; ++ } ++ ++ /* number of unordered channels */ ++ if (!errno && (!strcmp(end, "C") || !strcmp(end, " channels")) ++ && channels > 0) { ++ channel_layout->order = AV_CHANNEL_ORDER_UNSPEC; ++ channel_layout->nb_channels = channels; ++ return 0; ++ } ++ ++ return AVERROR(EINVAL); ++} ++ ++void av_channel_layout_uninit(AVChannelLayout *channel_layout) ++{ ++ if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) ++ av_freep(&channel_layout->u.map); ++ memset(channel_layout, 0, sizeof(*channel_layout)); ++} ++ ++int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src) ++{ ++ av_channel_layout_uninit(dst); ++ *dst = *src; ++ if (src->order == AV_CHANNEL_ORDER_CUSTOM) { ++ dst->u.map = av_malloc_array(src->nb_channels, sizeof(*dst->u.map)); ++ if (!dst->u.map) ++ return AVERROR(ENOMEM); ++ memcpy(dst->u.map, src->u.map, src->nb_channels * sizeof(*src->u.map)); ++ } ++ return 0; ++} ++ ++/** ++ * If the layout is n-th order standard-order ambisonic, with optional ++ * extra non-diegetic channels at the end, return the order. ++ * Return a negative error code otherwise. ++ */ ++static int ambisonic_order(const AVChannelLayout *channel_layout) ++{ ++ int i, highest_ambi, order; ++ ++ highest_ambi = -1; ++ if (channel_layout->order == AV_CHANNEL_ORDER_AMBISONIC) ++ highest_ambi = channel_layout->nb_channels - av_popcount64(channel_layout->u.mask) - 1; ++ else { ++ const AVChannelCustom *map = channel_layout->u.map; ++ av_assert0(channel_layout->order == AV_CHANNEL_ORDER_CUSTOM); ++ ++ for (i = 0; i < channel_layout->nb_channels; i++) { ++ int is_ambi = CHAN_IS_AMBI(map[i].id); ++ ++ /* ambisonic following non-ambisonic */ ++ if (i > 0 && is_ambi && !CHAN_IS_AMBI(map[i - 1].id)) ++ return AVERROR(EINVAL); ++ ++ /* non-default ordering */ ++ if (is_ambi && map[i].id - AV_CHAN_AMBISONIC_BASE != i) ++ return AVERROR(EINVAL); ++ ++ if (CHAN_IS_AMBI(map[i].id)) ++ highest_ambi = i; ++ } ++ } ++ /* no ambisonic channels*/ ++ if (highest_ambi < 0) ++ return AVERROR(EINVAL); ++ ++ order = floor(sqrt(highest_ambi)); ++ /* incomplete order - some harmonics are missing */ ++ if ((order + 1) * (order + 1) != highest_ambi + 1) ++ return AVERROR(EINVAL); ++ ++ return order; ++} ++ ++/** ++ * If the custom layout is n-th order standard-order ambisonic, with optional ++ * extra non-diegetic channels at the end, write its string description in bp. ++ * Return a negative error code otherwise. ++ */ ++static int try_describe_ambisonic(AVBPrint *bp, const AVChannelLayout *channel_layout) ++{ ++ int nb_ambi_channels; ++ int order = ambisonic_order(channel_layout); ++ if (order < 0) ++ return order; ++ ++ av_bprintf(bp, "ambisonic %d", order); ++ ++ /* extra channels present */ ++ nb_ambi_channels = (order + 1) * (order + 1); ++ if (nb_ambi_channels < channel_layout->nb_channels) { ++ AVChannelLayout extra = { 0 }; ++ ++ if (channel_layout->order == AV_CHANNEL_ORDER_AMBISONIC) { ++ extra.order = AV_CHANNEL_ORDER_NATIVE; ++ extra.nb_channels = av_popcount64(channel_layout->u.mask); ++ extra.u.mask = channel_layout->u.mask; ++ } else { ++ extra.order = AV_CHANNEL_ORDER_CUSTOM; ++ extra.nb_channels = channel_layout->nb_channels - nb_ambi_channels; ++ extra.u.map = channel_layout->u.map + nb_ambi_channels; ++ } ++ ++ av_bprint_chars(bp, '+', 1); ++ av_channel_layout_describe_bprint(&extra, bp); ++ /* Not calling uninit here on extra because we don't own the u.map pointer */ ++ } ++ ++ return 0; ++} ++ ++int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, ++ AVBPrint *bp) ++{ ++ int i; ++ ++ switch (channel_layout->order) { ++ case AV_CHANNEL_ORDER_NATIVE: ++ for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) ++ if (channel_layout->u.mask == channel_layout_map[i].layout.u.mask) { ++ av_bprintf(bp, "%s", channel_layout_map[i].name); ++ return 0; ++ } ++ // fall-through ++ case AV_CHANNEL_ORDER_CUSTOM: ++ if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) { ++ int res = try_describe_ambisonic(bp, channel_layout); ++ if (res >= 0) ++ return 0; ++ } ++ if (channel_layout->nb_channels) ++ av_bprintf(bp, "%d channels (", channel_layout->nb_channels); ++ for (i = 0; i < channel_layout->nb_channels; i++) { ++ enum AVChannel ch = av_channel_layout_channel_from_index(channel_layout, i); ++ ++ if (i) ++ av_bprintf(bp, "+"); ++ av_channel_name_bprint(bp, ch); ++ if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM && ++ channel_layout->u.map[i].name[0]) ++ av_bprintf(bp, "@%s", channel_layout->u.map[i].name); ++ } ++ if (channel_layout->nb_channels) { ++ av_bprintf(bp, ")"); ++ return 0; ++ } ++ // fall-through ++ case AV_CHANNEL_ORDER_UNSPEC: ++ av_bprintf(bp, "%d channels", channel_layout->nb_channels); ++ return 0; ++ case AV_CHANNEL_ORDER_AMBISONIC: ++ return try_describe_ambisonic(bp, channel_layout); ++ default: ++ return AVERROR(EINVAL); ++ } ++} ++ ++int av_channel_layout_describe(const AVChannelLayout *channel_layout, ++ char *buf, size_t buf_size) ++{ ++ AVBPrint bp; ++ int ret; ++ ++ if (!buf && buf_size) ++ return AVERROR(EINVAL); ++ ++ av_bprint_init_for_buffer(&bp, buf, buf_size); ++ ret = av_channel_layout_describe_bprint(channel_layout, &bp); ++ if (ret < 0) ++ return ret; ++ ++ return bp.len; ++} ++ ++enum AVChannel ++av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, ++ unsigned int idx) ++{ ++ int i; ++ ++ if (idx >= channel_layout->nb_channels) ++ return AV_CHAN_NONE; ++ ++ switch (channel_layout->order) { ++ case AV_CHANNEL_ORDER_CUSTOM: ++ return channel_layout->u.map[idx].id; ++ case AV_CHANNEL_ORDER_AMBISONIC: { ++ int ambi_channels = channel_layout->nb_channels - av_popcount64(channel_layout->u.mask); ++ if (idx < ambi_channels) ++ return AV_CHAN_AMBISONIC_BASE + idx; ++ idx -= ambi_channels; ++ } ++ // fall-through ++ case AV_CHANNEL_ORDER_NATIVE: ++ for (i = 0; i < 64; i++) { ++ if ((1ULL << i) & channel_layout->u.mask && !idx--) ++ return i; ++ } ++ default: ++ return AV_CHAN_NONE; ++ } ++} ++ ++enum AVChannel ++av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, ++ const char *str) ++{ ++ int index = av_channel_layout_index_from_string(channel_layout, str); ++ ++ if (index < 0) ++ return AV_CHAN_NONE; ++ ++ return av_channel_layout_channel_from_index(channel_layout, index); ++} ++ ++int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, ++ enum AVChannel channel) ++{ ++ int i; ++ ++ if (channel == AV_CHAN_NONE) ++ return AVERROR(EINVAL); ++ ++ switch (channel_layout->order) { ++ case AV_CHANNEL_ORDER_CUSTOM: ++ for (i = 0; i < channel_layout->nb_channels; i++) ++ if (channel_layout->u.map[i].id == channel) ++ return i; ++ return AVERROR(EINVAL); ++ case AV_CHANNEL_ORDER_AMBISONIC: ++ case AV_CHANNEL_ORDER_NATIVE: { ++ uint64_t mask = channel_layout->u.mask; ++ int ambi_channels = channel_layout->nb_channels - av_popcount64(mask); ++ if (channel_layout->order == AV_CHANNEL_ORDER_AMBISONIC && ++ channel >= AV_CHAN_AMBISONIC_BASE) { ++ if (channel - AV_CHAN_AMBISONIC_BASE >= ambi_channels) ++ return AVERROR(EINVAL); ++ return channel - AV_CHAN_AMBISONIC_BASE; ++ } ++ if ((unsigned)channel > 63 || !(mask & (1ULL << channel))) ++ return AVERROR(EINVAL); ++ mask &= (1ULL << channel) - 1; ++ return av_popcount64(mask) + ambi_channels; ++ } ++ default: ++ return AVERROR(EINVAL); ++ } ++} ++ ++int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, ++ const char *str) ++{ ++ char *chname; ++ enum AVChannel ch = AV_CHAN_NONE; ++ ++ switch (channel_layout->order) { ++ case AV_CHANNEL_ORDER_CUSTOM: ++ chname = strstr(str, "@"); ++ if (chname) { ++ char buf[16]; ++ chname++; ++ av_strlcpy(buf, str, FFMIN(sizeof(buf), chname - str)); ++ if (!*chname) ++ chname = NULL; ++ ch = av_channel_from_string(buf); ++ if (ch == AV_CHAN_NONE && *buf) ++ return AVERROR(EINVAL); ++ } ++ for (int i = 0; chname && i < channel_layout->nb_channels; i++) { ++ if (!strcmp(chname, channel_layout->u.map[i].name) && ++ (ch == AV_CHAN_NONE || ch == channel_layout->u.map[i].id)) ++ return i; ++ } ++ // fall-through ++ case AV_CHANNEL_ORDER_AMBISONIC: ++ case AV_CHANNEL_ORDER_NATIVE: ++ ch = av_channel_from_string(str); ++ if (ch == AV_CHAN_NONE) ++ return AVERROR(EINVAL); ++ return av_channel_layout_index_from_channel(channel_layout, ch); ++ } ++ ++ return AVERROR(EINVAL); ++} ++ ++int av_channel_layout_check(const AVChannelLayout *channel_layout) ++{ ++ if (channel_layout->nb_channels <= 0) ++ return 0; ++ ++ switch (channel_layout->order) { ++ case AV_CHANNEL_ORDER_NATIVE: ++ return av_popcount64(channel_layout->u.mask) == channel_layout->nb_channels; ++ case AV_CHANNEL_ORDER_CUSTOM: ++ if (!channel_layout->u.map) ++ return 0; ++ for (int i = 0; i < channel_layout->nb_channels; i++) { ++ if (channel_layout->u.map[i].id == AV_CHAN_NONE) ++ return 0; ++ } ++ return 1; ++ case AV_CHANNEL_ORDER_AMBISONIC: ++ /* If non-diegetic channels are present, ensure they are taken into account */ ++ return av_popcount64(channel_layout->u.mask) < channel_layout->nb_channels; ++ case AV_CHANNEL_ORDER_UNSPEC: ++ return 1; ++ default: ++ return 0; ++ } ++} ++ ++int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1) ++{ ++ int i; ++ ++ /* different channel counts -> not equal */ ++ if (chl->nb_channels != chl1->nb_channels) ++ return 1; ++ ++ /* if only one is unspecified -> not equal */ ++ if ((chl->order == AV_CHANNEL_ORDER_UNSPEC) != ++ (chl1->order == AV_CHANNEL_ORDER_UNSPEC)) ++ return 1; ++ /* both are unspecified -> equal */ ++ else if (chl->order == AV_CHANNEL_ORDER_UNSPEC) ++ return 0; ++ ++ /* can compare masks directly */ ++ if ((chl->order == AV_CHANNEL_ORDER_NATIVE || ++ chl->order == AV_CHANNEL_ORDER_AMBISONIC) && ++ chl->order == chl1->order) ++ return chl->u.mask != chl1->u.mask; ++ ++ /* compare channel by channel */ ++ for (i = 0; i < chl->nb_channels; i++) ++ if (av_channel_layout_channel_from_index(chl, i) != ++ av_channel_layout_channel_from_index(chl1, i)) ++ return 1; ++ return 0; ++} ++ ++void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels) ++{ ++ int i; ++ for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) ++ if (nb_channels == channel_layout_map[i].layout.nb_channels) { ++ *ch_layout = channel_layout_map[i].layout; ++ return; ++ } ++ ++ ch_layout->order = AV_CHANNEL_ORDER_UNSPEC; ++ ch_layout->nb_channels = nb_channels; ++} ++ ++const AVChannelLayout *av_channel_layout_standard(void **opaque) ++{ ++ uintptr_t i = (uintptr_t)*opaque; ++ const AVChannelLayout *ch_layout = NULL; ++ ++ if (i < FF_ARRAY_ELEMS(channel_layout_map)) { ++ ch_layout = &channel_layout_map[i].layout; ++ *opaque = (void*)(i + 1); ++ } ++ ++ return ch_layout; ++} ++ ++uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, ++ uint64_t mask) ++{ ++ uint64_t ret = 0; ++ int i; ++ ++ switch (channel_layout->order) { ++ case AV_CHANNEL_ORDER_NATIVE: ++ case AV_CHANNEL_ORDER_AMBISONIC: ++ return channel_layout->u.mask & mask; ++ case AV_CHANNEL_ORDER_CUSTOM: ++ for (i = 0; i < 64; i++) ++ if (mask & (1ULL << i) && av_channel_layout_index_from_channel(channel_layout, i) >= 0) ++ ret |= (1ULL << i); ++ break; ++ } ++ ++ return ret; ++} +diff -Naur a/media/ffvpx/libavutil/channel_layout.h b/media/ffvpx/libavutil/channel_layout.h +--- a/media/ffvpx/libavutil/channel_layout.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/channel_layout.h 2023-04-06 12:50:24.493176583 +0200 +@@ -23,17 +23,132 @@ + #define AVUTIL_CHANNEL_LAYOUT_H + + #include ++#include ++ ++#include "version.h" ++#include "attributes.h" + + /** + * @file +- * audio channel layout utility functions ++ * @ingroup lavu_audio_channels ++ * Public libavutil channel layout APIs header. + */ + ++ + /** +- * @addtogroup lavu_audio ++ * @defgroup lavu_audio_channels Audio channels ++ * @ingroup lavu_audio ++ * ++ * Audio channel layout utility functions ++ * + * @{ + */ + ++enum AVChannel { ++ ///< Invalid channel index ++ AV_CHAN_NONE = -1, ++ AV_CHAN_FRONT_LEFT, ++ AV_CHAN_FRONT_RIGHT, ++ AV_CHAN_FRONT_CENTER, ++ AV_CHAN_LOW_FREQUENCY, ++ AV_CHAN_BACK_LEFT, ++ AV_CHAN_BACK_RIGHT, ++ AV_CHAN_FRONT_LEFT_OF_CENTER, ++ AV_CHAN_FRONT_RIGHT_OF_CENTER, ++ AV_CHAN_BACK_CENTER, ++ AV_CHAN_SIDE_LEFT, ++ AV_CHAN_SIDE_RIGHT, ++ AV_CHAN_TOP_CENTER, ++ AV_CHAN_TOP_FRONT_LEFT, ++ AV_CHAN_TOP_FRONT_CENTER, ++ AV_CHAN_TOP_FRONT_RIGHT, ++ AV_CHAN_TOP_BACK_LEFT, ++ AV_CHAN_TOP_BACK_CENTER, ++ AV_CHAN_TOP_BACK_RIGHT, ++ /** Stereo downmix. */ ++ AV_CHAN_STEREO_LEFT = 29, ++ /** See above. */ ++ AV_CHAN_STEREO_RIGHT, ++ AV_CHAN_WIDE_LEFT, ++ AV_CHAN_WIDE_RIGHT, ++ AV_CHAN_SURROUND_DIRECT_LEFT, ++ AV_CHAN_SURROUND_DIRECT_RIGHT, ++ AV_CHAN_LOW_FREQUENCY_2, ++ AV_CHAN_TOP_SIDE_LEFT, ++ AV_CHAN_TOP_SIDE_RIGHT, ++ AV_CHAN_BOTTOM_FRONT_CENTER, ++ AV_CHAN_BOTTOM_FRONT_LEFT, ++ AV_CHAN_BOTTOM_FRONT_RIGHT, ++ ++ /** Channel is empty can be safely skipped. */ ++ AV_CHAN_UNUSED = 0x200, ++ ++ /** Channel contains data, but its position is unknown. */ ++ AV_CHAN_UNKNOWN = 0x300, ++ ++ /** ++ * Range of channels between AV_CHAN_AMBISONIC_BASE and ++ * AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system. ++ * ++ * Given a channel id `` between AV_CHAN_AMBISONIC_BASE and ++ * AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `` is ++ * ` = - AV_CHAN_AMBISONIC_BASE`. ++ * ++ * @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel ++ * orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels ++ * implicitly by their position in the stream. ++ */ ++ AV_CHAN_AMBISONIC_BASE = 0x400, ++ // leave space for 1024 ids, which correspond to maximum order-32 harmonics, ++ // which should be enough for the foreseeable use cases ++ AV_CHAN_AMBISONIC_END = 0x7ff, ++}; ++ ++enum AVChannelOrder { ++ /** ++ * Only the channel count is specified, without any further information ++ * about the channel order. ++ */ ++ AV_CHANNEL_ORDER_UNSPEC, ++ /** ++ * The native channel order, i.e. the channels are in the same order in ++ * which they are defined in the AVChannel enum. This supports up to 63 ++ * different channels. ++ */ ++ AV_CHANNEL_ORDER_NATIVE, ++ /** ++ * The channel order does not correspond to any other predefined order and ++ * is stored as an explicit map. For example, this could be used to support ++ * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE) ++ * channels at arbitrary positions. ++ */ ++ AV_CHANNEL_ORDER_CUSTOM, ++ /** ++ * The audio is represented as the decomposition of the sound field into ++ * spherical harmonics. Each channel corresponds to a single expansion ++ * component. Channels are ordered according to ACN (Ambisonic Channel ++ * Number). ++ * ++ * The channel with the index n in the stream contains the spherical ++ * harmonic of degree l and order m given by ++ * @code{.unparsed} ++ * l = floor(sqrt(n)), ++ * m = n - l * (l + 1). ++ * @endcode ++ * ++ * Conversely given a spherical harmonic of degree l and order m, the ++ * corresponding channel index n is given by ++ * @code{.unparsed} ++ * n = l * (l + 1) + m. ++ * @endcode ++ * ++ * Normalization is assumed to be SN3D (Schmidt Semi-Normalization) ++ * as defined in AmbiX format $ 2.1. ++ */ ++ AV_CHANNEL_ORDER_AMBISONIC, ++}; ++ ++ + /** + * @defgroup channel_masks Audio channel masks + * +@@ -46,41 +161,46 @@ + * + * @{ + */ +-#define AV_CH_FRONT_LEFT 0x00000001 +-#define AV_CH_FRONT_RIGHT 0x00000002 +-#define AV_CH_FRONT_CENTER 0x00000004 +-#define AV_CH_LOW_FREQUENCY 0x00000008 +-#define AV_CH_BACK_LEFT 0x00000010 +-#define AV_CH_BACK_RIGHT 0x00000020 +-#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 +-#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 +-#define AV_CH_BACK_CENTER 0x00000100 +-#define AV_CH_SIDE_LEFT 0x00000200 +-#define AV_CH_SIDE_RIGHT 0x00000400 +-#define AV_CH_TOP_CENTER 0x00000800 +-#define AV_CH_TOP_FRONT_LEFT 0x00001000 +-#define AV_CH_TOP_FRONT_CENTER 0x00002000 +-#define AV_CH_TOP_FRONT_RIGHT 0x00004000 +-#define AV_CH_TOP_BACK_LEFT 0x00008000 +-#define AV_CH_TOP_BACK_CENTER 0x00010000 +-#define AV_CH_TOP_BACK_RIGHT 0x00020000 +-#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. +-#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. +-#define AV_CH_WIDE_LEFT 0x0000000080000000ULL +-#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL +-#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL +-#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL +-#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL +-#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL +-#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL +-#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL +-#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL +-#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL ++#define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT ) ++#define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT ) ++#define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER ) ++#define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY ) ++#define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT ) ++#define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT ) ++#define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER ) ++#define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER ) ++#define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT ) ++#define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT ) ++#define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER ) ++#define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT ) ++#define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER ) ++#define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT ) ++#define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT ) ++#define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER ) ++#define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT ) ++#define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT ) ++#define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT ) ++#define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT ) ++#define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT ) ++#define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT ) ++#define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT) ++#define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2 ) ++#define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT ) ++#define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT ) ++#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER ) ++#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT ) ++#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT ) + ++#if FF_API_OLD_CHANNEL_LAYOUT + /** Channel mask value used for AVCodecContext.request_channel_layout + to indicate that the user requests the channel order of the decoder output +- to be the native codec channel order. */ ++ to be the native codec channel order. ++ @deprecated channel order is now indicated in a special field in ++ AVChannelLayout ++ */ + #define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL ++#endif + + /** + * @} +@@ -112,7 +232,9 @@ + #define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) + #define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) + #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) ++#define AV_CH_LAYOUT_7POINT1_TOP_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) + #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) ++#define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT) + #define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) + #define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) + #define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) +@@ -129,6 +251,164 @@ + }; + + /** ++ * @} ++ */ ++ ++/** ++ * An AVChannelCustom defines a single channel within a custom order layout ++ * ++ * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the ++ * public ABI. ++ * ++ * No new fields may be added to it without a major version bump. ++ */ ++typedef struct AVChannelCustom { ++ enum AVChannel id; ++ char name[16]; ++ void *opaque; ++} AVChannelCustom; ++ ++/** ++ * An AVChannelLayout holds information about the channel layout of audio data. ++ * ++ * A channel layout here is defined as a set of channels ordered in a specific ++ * way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an ++ * AVChannelLayout carries only the channel count). ++ * All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by ++ * ignoring everything but the channel count, as long as av_channel_layout_check() ++ * considers they are valid. ++ * ++ * Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the ++ * public ABI and may be used by the caller. E.g. it may be allocated on stack ++ * or embedded in caller-defined structs. ++ * ++ * AVChannelLayout can be initialized as follows: ++ * - default initialization with {0}, followed by setting all used fields ++ * correctly; ++ * - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers; ++ * - with a constructor function, such as av_channel_layout_default(), ++ * av_channel_layout_from_mask() or av_channel_layout_from_string(). ++ * ++ * The channel layout must be unitialized with av_channel_layout_uninit() ++ * ++ * Copying an AVChannelLayout via assigning is forbidden, ++ * av_channel_layout_copy() must be used instead (and its return value should ++ * be checked) ++ * ++ * No new fields may be added to it without a major version bump, except for ++ * new elements of the union fitting in sizeof(uint64_t). ++ */ ++typedef struct AVChannelLayout { ++ /** ++ * Channel order used in this layout. ++ * This is a mandatory field. ++ */ ++ enum AVChannelOrder order; ++ ++ /** ++ * Number of channels in this layout. Mandatory field. ++ */ ++ int nb_channels; ++ ++ /** ++ * Details about which channels are present in this layout. ++ * For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be ++ * used. ++ */ ++ union { ++ /** ++ * This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used ++ * for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels. ++ * It is a bitmask, where the position of each set bit means that the ++ * AVChannel with the corresponding value is present. ++ * ++ * I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO ++ * is present in the layout. Otherwise it is not present. ++ * ++ * @note when a channel layout using a bitmask is constructed or ++ * modified manually (i.e. not using any of the av_channel_layout_* ++ * functions), the code doing it must ensure that the number of set bits ++ * is equal to nb_channels. ++ */ ++ uint64_t mask; ++ /** ++ * This member must be used when the channel order is ++ * AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each ++ * element signalling the presence of the AVChannel with the ++ * corresponding value in map[i].id. ++ * ++ * I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the ++ * i-th channel in the audio data. ++ * ++ * When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and ++ * AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic ++ * component with ACN index (as defined above) ++ * n = map[i].id - AV_CHAN_AMBISONIC_BASE. ++ * ++ * map[i].name may be filled with a 0-terminated string, in which case ++ * it will be used for the purpose of identifying the channel with the ++ * convenience functions below. Otherise it must be zeroed. ++ */ ++ AVChannelCustom *map; ++ } u; ++ ++ /** ++ * For some private data of the user. ++ */ ++ void *opaque; ++} AVChannelLayout; ++ ++#define AV_CHANNEL_LAYOUT_MASK(nb, m) \ ++ { .order = AV_CHANNEL_ORDER_NATIVE, .nb_channels = (nb), .u = { .mask = (m) }} ++ ++/** ++ * @name Common pre-defined channel layouts ++ * @{ ++ */ ++#define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) ++#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO) ++#define AV_CHANNEL_LAYOUT_2POINT1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1) ++#define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1) ++#define AV_CHANNEL_LAYOUT_SURROUND AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND) ++#define AV_CHANNEL_LAYOUT_3POINT1 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1) ++#define AV_CHANNEL_LAYOUT_4POINT0 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0) ++#define AV_CHANNEL_LAYOUT_4POINT1 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1) ++#define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2) ++#define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD) ++#define AV_CHANNEL_LAYOUT_5POINT0 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0) ++#define AV_CHANNEL_LAYOUT_5POINT1 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1) ++#define AV_CHANNEL_LAYOUT_5POINT0_BACK AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK) ++#define AV_CHANNEL_LAYOUT_5POINT1_BACK AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK) ++#define AV_CHANNEL_LAYOUT_6POINT0 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0) ++#define AV_CHANNEL_LAYOUT_6POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT) ++#define AV_CHANNEL_LAYOUT_HEXAGONAL AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL) ++#define AV_CHANNEL_LAYOUT_6POINT1 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1) ++#define AV_CHANNEL_LAYOUT_6POINT1_BACK AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK) ++#define AV_CHANNEL_LAYOUT_6POINT1_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT) ++#define AV_CHANNEL_LAYOUT_7POINT0 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0) ++#define AV_CHANNEL_LAYOUT_7POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT) ++#define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1) ++#define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE) ++#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK) ++#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK) ++#define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL) ++#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) ++#define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL) ++#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX) ++#define AV_CHANNEL_LAYOUT_22POINT2 AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2) ++#define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \ ++ { .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = 4, .u = { .mask = 0 }} ++/** @} */ ++ ++struct AVBPrint; ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++/** ++ * @name Deprecated Functions ++ * @{ ++ */ ++ ++/** + * Return a channel layout id that matches name, or 0 if no match is found. + * + * name can be one or several of the following notations, +@@ -144,7 +424,10 @@ + * AV_CH_* macros). + * + * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" ++ * ++ * @deprecated use av_channel_layout_from_string() + */ ++attribute_deprecated + uint64_t av_get_channel_layout(const char *name); + + /** +@@ -158,7 +441,9 @@ + * @param[out] nb_channels number of channels + * + * @return 0 on success, AVERROR(EINVAL) if the parsing fails. ++ * @deprecated use av_channel_layout_from_string() + */ ++attribute_deprecated + int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); + + /** +@@ -167,47 +452,66 @@ + * + * @param buf put here the string containing the channel layout + * @param buf_size size in bytes of the buffer ++ * @param nb_channels number of channels ++ * @param channel_layout channel layout bitset ++ * @deprecated use av_channel_layout_describe() + */ ++attribute_deprecated + void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); + +-struct AVBPrint; + /** + * Append a description of a channel layout to a bprint buffer. ++ * @deprecated use av_channel_layout_describe() + */ ++attribute_deprecated + void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); + + /** + * Return the number of channels in the channel layout. ++ * @deprecated use AVChannelLayout.nb_channels + */ ++attribute_deprecated + int av_get_channel_layout_nb_channels(uint64_t channel_layout); + + /** + * Return default channel layout for a given number of channels. ++ * ++ * @deprecated use av_channel_layout_default() + */ ++attribute_deprecated + int64_t av_get_default_channel_layout(int nb_channels); + + /** + * Get the index of a channel in channel_layout. + * ++ * @param channel_layout channel layout bitset + * @param channel a channel layout describing exactly one channel which must be + * present in channel_layout. + * + * @return index of channel in channel_layout on success, a negative AVERROR + * on error. ++ * ++ * @deprecated use av_channel_layout_index_from_channel() + */ ++attribute_deprecated + int av_get_channel_layout_channel_index(uint64_t channel_layout, + uint64_t channel); + + /** + * Get the channel with the given index in channel_layout. ++ * @deprecated use av_channel_layout_channel_from_index() + */ ++attribute_deprecated + uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); + + /** + * Get the name of a given channel. + * + * @return channel name on success, NULL on error. ++ * ++ * @deprecated use av_channel_name() + */ ++attribute_deprecated + const char *av_get_channel_name(uint64_t channel); + + /** +@@ -215,7 +519,9 @@ + * + * @param channel a channel layout with a single channel + * @return channel description on success, NULL on error ++ * @deprecated use av_channel_description() + */ ++attribute_deprecated + const char *av_get_channel_description(uint64_t channel); + + /** +@@ -226,12 +532,251 @@ + * @param[out] name name of the layout + * @return 0 if the layout exists, + * <0 if index is beyond the limits ++ * @deprecated use av_channel_layout_standard() + */ ++attribute_deprecated + int av_get_standard_channel_layout(unsigned index, uint64_t *layout, + const char **name); +- + /** + * @} ++ */ ++#endif ++ ++/** ++ * Get a human readable string in an abbreviated form describing a given channel. ++ * This is the inverse function of @ref av_channel_from_string(). ++ * ++ * @param buf pre-allocated buffer where to put the generated string ++ * @param buf_size size in bytes of the buffer. ++ * @param channel the AVChannel whose name to get ++ * @return amount of bytes needed to hold the output string, or a negative AVERROR ++ * on failure. If the returned value is bigger than buf_size, then the ++ * string was truncated. ++ */ ++int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel); ++ ++/** ++ * bprint variant of av_channel_name(). ++ * ++ * @note the string will be appended to the bprint buffer. ++ */ ++void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id); ++ ++/** ++ * Get a human readable string describing a given channel. ++ * ++ * @param buf pre-allocated buffer where to put the generated string ++ * @param buf_size size in bytes of the buffer. ++ * @param channel the AVChannel whose description to get ++ * @return amount of bytes needed to hold the output string, or a negative AVERROR ++ * on failure. If the returned value is bigger than buf_size, then the ++ * string was truncated. ++ */ ++int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel); ++ ++/** ++ * bprint variant of av_channel_description(). ++ * ++ * @note the string will be appended to the bprint buffer. ++ */ ++void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id); ++ ++/** ++ * This is the inverse function of @ref av_channel_name(). ++ * ++ * @return the channel with the given name ++ * AV_CHAN_NONE when name does not identify a known channel ++ */ ++enum AVChannel av_channel_from_string(const char *name); ++ ++/** ++ * Initialize a native channel layout from a bitmask indicating which channels ++ * are present. ++ * ++ * @param channel_layout the layout structure to be initialized ++ * @param mask bitmask describing the channel layout ++ * ++ * @return 0 on success ++ * AVERROR(EINVAL) for invalid mask values ++ */ ++int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask); ++ ++/** ++ * Initialize a channel layout from a given string description. ++ * The input string can be represented by: ++ * - the formal channel layout name (returned by av_channel_layout_describe()) ++ * - single or multiple channel names (returned by av_channel_name(), eg. "FL", ++ * or concatenated with "+", each optionally containing a custom name after ++ * a "@", eg. "FL@Left+FR@Right+LFE") ++ * - a decimal or hexadecimal value of a native channel layout (eg. "4" or "0x4") ++ * - the number of channels with default layout (eg. "4c") ++ * - the number of unordered channels (eg. "4C" or "4 channels") ++ * - the ambisonic order followed by optional non-diegetic channels (eg. ++ * "ambisonic 2+stereo") ++ * ++ * @param channel_layout input channel layout ++ * @param str string describing the channel layout ++ * @return 0 channel layout was detected, AVERROR_INVALIDATATA otherwise ++ */ ++int av_channel_layout_from_string(AVChannelLayout *channel_layout, ++ const char *str); ++ ++/** ++ * Get the default channel layout for a given number of channels. ++ * ++ * @param ch_layout the layout structure to be initialized ++ * @param nb_channels number of channels ++ */ ++void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels); ++ ++/** ++ * Iterate over all standard channel layouts. ++ * ++ * @param opaque a pointer where libavutil will store the iteration state. Must ++ * point to NULL to start the iteration. ++ * ++ * @return the standard channel layout or NULL when the iteration is ++ * finished ++ */ ++const AVChannelLayout *av_channel_layout_standard(void **opaque); ++ ++/** ++ * Free any allocated data in the channel layout and reset the channel ++ * count to 0. ++ * ++ * @param channel_layout the layout structure to be uninitialized ++ */ ++void av_channel_layout_uninit(AVChannelLayout *channel_layout); ++ ++/** ++ * Make a copy of a channel layout. This differs from just assigning src to dst ++ * in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM. ++ * ++ * @note the destination channel_layout will be always uninitialized before copy. ++ * ++ * @param dst destination channel layout ++ * @param src source channel layout ++ * @return 0 on success, a negative AVERROR on error. ++ */ ++int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src); ++ ++/** ++ * Get a human-readable string describing the channel layout properties. ++ * The string will be in the same format that is accepted by ++ * @ref av_channel_layout_from_string(), allowing to rebuild the same ++ * channel layout, except for opaque pointers. ++ * ++ * @param channel_layout channel layout to be described ++ * @param buf pre-allocated buffer where to put the generated string ++ * @param buf_size size in bytes of the buffer. ++ * @return amount of bytes needed to hold the output string, or a negative AVERROR ++ * on failure. If the returned value is bigger than buf_size, then the ++ * string was truncated. ++ */ ++int av_channel_layout_describe(const AVChannelLayout *channel_layout, ++ char *buf, size_t buf_size); ++ ++/** ++ * bprint variant of av_channel_layout_describe(). ++ * ++ * @note the string will be appended to the bprint buffer. ++ * @return 0 on success, or a negative AVERROR value on failure. ++ */ ++int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, ++ struct AVBPrint *bp); ++ ++/** ++ * Get the channel with the given index in a channel layout. ++ * ++ * @param channel_layout input channel layout ++ * @param idx index of the channel ++ * @return channel with the index idx in channel_layout on success or ++ * AV_CHAN_NONE on failure (if idx is not valid or the channel order is ++ * unspecified) ++ */ ++enum AVChannel ++av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx); ++ ++/** ++ * Get the index of a given channel in a channel layout. In case multiple ++ * channels are found, only the first match will be returned. ++ * ++ * @param channel_layout input channel layout ++ * @param channel the channel whose index to obtain ++ * @return index of channel in channel_layout on success or a negative number if ++ * channel is not present in channel_layout. ++ */ ++int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, ++ enum AVChannel channel); ++ ++/** ++ * Get the index in a channel layout of a channel described by the given string. ++ * In case multiple channels are found, only the first match will be returned. ++ * ++ * This function accepts channel names in the same format as ++ * @ref av_channel_from_string(). ++ * ++ * @param channel_layout input channel layout ++ * @param name string describing the channel whose index to obtain ++ * @return a channel index described by the given string, or a negative AVERROR ++ * value. ++ */ ++int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, ++ const char *name); ++ ++/** ++ * Get a channel described by the given string. ++ * ++ * This function accepts channel names in the same format as ++ * @ref av_channel_from_string(). ++ * ++ * @param channel_layout input channel layout ++ * @param name string describing the channel to obtain ++ * @return a channel described by the given string in channel_layout on success ++ * or AV_CHAN_NONE on failure (if the string is not valid or the channel ++ * order is unspecified) ++ */ ++enum AVChannel ++av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, ++ const char *name); ++ ++/** ++ * Find out what channels from a given set are present in a channel layout, ++ * without regard for their positions. ++ * ++ * @param channel_layout input channel layout ++ * @param mask a combination of AV_CH_* representing a set of channels ++ * @return a bitfield representing all the channels from mask that are present ++ * in channel_layout ++ */ ++uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, ++ uint64_t mask); ++ ++/** ++ * Check whether a channel layout is valid, i.e. can possibly describe audio ++ * data. ++ * ++ * @param channel_layout input channel layout ++ * @return 1 if channel_layout is valid, 0 otherwise. ++ */ ++int av_channel_layout_check(const AVChannelLayout *channel_layout); ++ ++/** ++ * Check whether two channel layouts are semantically the same, i.e. the same ++ * channels are present on the same positions in both. ++ * ++ * If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is ++ * not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC, ++ * they are considered equal iff the channel counts are the same in both. ++ * ++ * @param chl input channel layout ++ * @param chl1 input channel layout ++ * @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative ++ * AVERROR code if one or both are invalid. ++ */ ++int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1); ++ ++/** + * @} + */ + +diff -Naur a/media/ffvpx/libavutil/color_utils.c b/media/ffvpx/libavutil/color_utils.c +--- a/media/ffvpx/libavutil/color_utils.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/color_utils.c 2023-04-06 12:49:40.259395132 +0200 +@@ -21,7 +21,6 @@ + #include + #include + +-#include "common.h" + #include "libavutil/color_utils.h" + #include "libavutil/pixfmt.h" + +diff -Naur a/media/ffvpx/libavutil/common.h b/media/ffvpx/libavutil/common.h +--- a/media/ffvpx/libavutil/common.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/common.h 2023-04-06 12:49:40.259395132 +0200 +@@ -41,14 +41,6 @@ + + #include "attributes.h" + #include "macros.h" +-#include "version.h" +-#include "libavutil/avconfig.h" +- +-#if AV_HAVE_BIGENDIAN +-# define AV_NE(be, le) (be) +-#else +-# define AV_NE(be, le) (le) +-#endif + + //rounded division & shift + #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) +@@ -89,25 +81,6 @@ + #define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) + #define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) + +-/** +- * Comparator. +- * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 +- * if x == y. This is useful for instance in a qsort comparator callback. +- * Furthermore, compilers are able to optimize this to branchless code, and +- * there is no risk of overflow with signed types. +- * As with many macros, this evaluates its argument multiple times, it thus +- * must not have a side-effect. +- */ +-#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) +- +-#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) +-#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) +-#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) +-#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) +- +-#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) +-#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) +- + /* misc math functions */ + + #ifdef HAVE_AV_CONFIG_H +@@ -405,6 +378,8 @@ + + /** + * Clip a float value into the amin-amax range. ++ * If a is nan or -inf amin will be returned. ++ * If a is +inf amax will be returned. + * @param a value to clip + * @param amin minimum value of the clip range + * @param amax maximum value of the clip range +@@ -415,13 +390,13 @@ + #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); + #endif +- if (a < amin) return amin; +- else if (a > amax) return amax; +- else return a; ++ return FFMIN(FFMAX(a, amin), amax); + } + + /** + * Clip a double value into the amin-amax range. ++ * If a is nan or -inf amin will be returned. ++ * If a is +inf amax will be returned. + * @param a value to clip + * @param amin minimum value of the clip range + * @param amax maximum value of the clip range +@@ -432,9 +407,7 @@ + #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); + #endif +- if (a < amin) return amin; +- else if (a > amax) return amax; +- else return a; ++ return FFMIN(FFMAX(a, amin), amax); + } + + /** Compute ceil(log2(x)). +@@ -475,9 +448,6 @@ + return av_popcount(v) & 1; + } + +-#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) +-#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) +- + /** + * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. + * +diff -Naur a/media/ffvpx/libavutil/cpu.c b/media/ffvpx/libavutil/cpu.c +--- a/media/ffvpx/libavutil/cpu.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/cpu.c 2023-04-06 12:50:06.975471215 +0200 +@@ -16,6 +16,15 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "config.h" ++ ++#if HAVE_SCHED_GETAFFINITY ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE ++#endif ++#include ++#endif ++ + #include + #include + #include +@@ -23,16 +32,9 @@ + #include "attributes.h" + #include "cpu.h" + #include "cpu_internal.h" +-#include "config.h" + #include "opt.h" + #include "common.h" + +-#if HAVE_SCHED_GETAFFINITY +-#ifndef _GNU_SOURCE +-# define _GNU_SOURCE +-#endif +-#include +-#endif + #if HAVE_GETPROCESSAFFINITYMASK || HAVE_WINRT + #include + #endif +@@ -48,19 +50,25 @@ + #endif + + static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1); ++static atomic_int cpu_count = ATOMIC_VAR_INIT(-1); + + static int get_cpu_flags(void) + { +- if (ARCH_MIPS) +- return ff_get_cpu_flags_mips(); +- if (ARCH_AARCH64) +- return ff_get_cpu_flags_aarch64(); +- if (ARCH_ARM) +- return ff_get_cpu_flags_arm(); +- if (ARCH_PPC) +- return ff_get_cpu_flags_ppc(); +- if (ARCH_X86) +- return ff_get_cpu_flags_x86(); ++#if ARCH_MIPS ++ return ff_get_cpu_flags_mips(); ++#elif ARCH_AARCH64 ++ return ff_get_cpu_flags_aarch64(); ++#elif ARCH_ARM ++ return ff_get_cpu_flags_arm(); ++#elif ARCH_PPC ++ return ff_get_cpu_flags_ppc(); ++#elif ARCH_RISCV ++ return ff_get_cpu_flags_riscv(); ++#elif ARCH_X86 ++ return ff_get_cpu_flags_x86(); ++#elif ARCH_LOONGARCH ++ return ff_get_cpu_flags_loongarch(); ++#endif + return 0; + } + +@@ -102,97 +110,6 @@ + return flags; + } + +-void av_set_cpu_flags_mask(int mask) +-{ +- atomic_store_explicit(&cpu_flags, get_cpu_flags() & mask, +- memory_order_relaxed); +-} +- +-int av_parse_cpu_flags(const char *s) +-{ +-#define CPUFLAG_MMXEXT (AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT | AV_CPU_FLAG_CMOV) +-#define CPUFLAG_3DNOW (AV_CPU_FLAG_3DNOW | AV_CPU_FLAG_MMX) +-#define CPUFLAG_3DNOWEXT (AV_CPU_FLAG_3DNOWEXT | CPUFLAG_3DNOW) +-#define CPUFLAG_SSE (AV_CPU_FLAG_SSE | CPUFLAG_MMXEXT) +-#define CPUFLAG_SSE2 (AV_CPU_FLAG_SSE2 | CPUFLAG_SSE) +-#define CPUFLAG_SSE2SLOW (AV_CPU_FLAG_SSE2SLOW | CPUFLAG_SSE2) +-#define CPUFLAG_SSE3 (AV_CPU_FLAG_SSE3 | CPUFLAG_SSE2) +-#define CPUFLAG_SSE3SLOW (AV_CPU_FLAG_SSE3SLOW | CPUFLAG_SSE3) +-#define CPUFLAG_SSSE3 (AV_CPU_FLAG_SSSE3 | CPUFLAG_SSE3) +-#define CPUFLAG_SSE4 (AV_CPU_FLAG_SSE4 | CPUFLAG_SSSE3) +-#define CPUFLAG_SSE42 (AV_CPU_FLAG_SSE42 | CPUFLAG_SSE4) +-#define CPUFLAG_AVX (AV_CPU_FLAG_AVX | CPUFLAG_SSE42) +-#define CPUFLAG_AVXSLOW (AV_CPU_FLAG_AVXSLOW | CPUFLAG_AVX) +-#define CPUFLAG_XOP (AV_CPU_FLAG_XOP | CPUFLAG_AVX) +-#define CPUFLAG_FMA3 (AV_CPU_FLAG_FMA3 | CPUFLAG_AVX) +-#define CPUFLAG_FMA4 (AV_CPU_FLAG_FMA4 | CPUFLAG_AVX) +-#define CPUFLAG_AVX2 (AV_CPU_FLAG_AVX2 | CPUFLAG_AVX) +-#define CPUFLAG_BMI2 (AV_CPU_FLAG_BMI2 | AV_CPU_FLAG_BMI1) +-#define CPUFLAG_AESNI (AV_CPU_FLAG_AESNI | CPUFLAG_SSE42) +-#define CPUFLAG_AVX512 (AV_CPU_FLAG_AVX512 | CPUFLAG_AVX2) +- static const AVOption cpuflags_opts[] = { +- { "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, +-#if ARCH_PPC +- { "altivec" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ALTIVEC }, .unit = "flags" }, +-#elif ARCH_X86 +- { "mmx" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMX }, .unit = "flags" }, +- { "mmxext" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_MMXEXT }, .unit = "flags" }, +- { "sse" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE }, .unit = "flags" }, +- { "sse2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE2 }, .unit = "flags" }, +- { "sse2slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE2SLOW }, .unit = "flags" }, +- { "sse3" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE3 }, .unit = "flags" }, +- { "sse3slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE3SLOW }, .unit = "flags" }, +- { "ssse3" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSSE3 }, .unit = "flags" }, +- { "atom" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ATOM }, .unit = "flags" }, +- { "sse4.1" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE4 }, .unit = "flags" }, +- { "sse4.2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE42 }, .unit = "flags" }, +- { "avx" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX }, .unit = "flags" }, +- { "avxslow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVXSLOW }, .unit = "flags" }, +- { "xop" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_XOP }, .unit = "flags" }, +- { "fma3" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_FMA3 }, .unit = "flags" }, +- { "fma4" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_FMA4 }, .unit = "flags" }, +- { "avx2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX2 }, .unit = "flags" }, +- { "bmi1" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_BMI1 }, .unit = "flags" }, +- { "bmi2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_BMI2 }, .unit = "flags" }, +- { "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOW }, .unit = "flags" }, +- { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOWEXT }, .unit = "flags" }, +- { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" }, +- { "aesni" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AESNI }, .unit = "flags" }, +- { "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX512 }, .unit = "flags" }, +-#elif ARCH_ARM +- { "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV5TE }, .unit = "flags" }, +- { "armv6", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6 }, .unit = "flags" }, +- { "armv6t2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6T2 }, .unit = "flags" }, +- { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, +- { "vfp_vm", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP_VM }, .unit = "flags" }, +- { "vfpv3", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFPV3 }, .unit = "flags" }, +- { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" }, +-#elif ARCH_AARCH64 +- { "armv8", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8 }, .unit = "flags" }, +- { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" }, +- { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, +-#elif ARCH_MIPS +- { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, +- { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, +-#endif +- { NULL }, +- }; +- static const AVClass class = { +- .class_name = "cpuflags", +- .item_name = av_default_item_name, +- .option = cpuflags_opts, +- .version = LIBAVUTIL_VERSION_INT, +- }; +- +- int flags = 0, ret; +- const AVClass *pclass = &class; +- +- if ((ret = av_opt_eval_flags(&pclass, &cpuflags_opts[0], s, &flags)) < 0) +- return ret; +- +- return flags & INT_MAX; +-} +- + int av_parse_cpu_caps(unsigned *flags, const char *s) + { + static const AVOption cpuflags_opts[] = { +@@ -225,6 +142,8 @@ + { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" }, + { "aesni", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AESNI }, .unit = "flags" }, + { "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512 }, .unit = "flags" }, ++ { "avx512icl", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512ICL }, .unit = "flags" }, ++ { "slowgather", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SLOW_GATHER }, .unit = "flags" }, + + #define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX + #define CPU_FLAG_P3 CPU_FLAG_P2 | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE +@@ -258,6 +177,18 @@ + #elif ARCH_MIPS + { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, + { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, ++#elif ARCH_LOONGARCH ++ { "lsx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LSX }, .unit = "flags" }, ++ { "lasx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LASX }, .unit = "flags" }, ++#elif ARCH_RISCV ++ { "rvi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVI }, .unit = "flags" }, ++ { "rvf", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVF }, .unit = "flags" }, ++ { "rvd", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVD }, .unit = "flags" }, ++ { "rvv-i32", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_I32 }, .unit = "flags" }, ++ { "rvv-f32", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_F32 }, .unit = "flags" }, ++ { "rvv-i64", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_I64 }, .unit = "flags" }, ++ { "rvv", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_F64 }, .unit = "flags" }, ++ { "rvb-basic",NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVB_BASIC }, .unit = "flags" }, + #endif + { NULL }, + }; +@@ -274,9 +205,10 @@ + + int av_cpu_count(void) + { +- static volatile int printed; ++ static atomic_int printed = ATOMIC_VAR_INIT(0); + + int nb_cpus = 1; ++ int count = 0; + #if HAVE_WINRT + SYSTEM_INFO sysinfo; + #endif +@@ -312,26 +244,39 @@ + nb_cpus = sysinfo.dwNumberOfProcessors; + #endif + +- if (!printed) { ++ if (!atomic_exchange_explicit(&printed, 1, memory_order_relaxed)) + av_log(NULL, AV_LOG_DEBUG, "detected %d logical cores\n", nb_cpus); +- printed = 1; ++ ++ count = atomic_load_explicit(&cpu_count, memory_order_relaxed); ++ ++ if (count > 0) { ++ nb_cpus = count; ++ av_log(NULL, AV_LOG_DEBUG, "overriding to %d logical cores\n", nb_cpus); + } + + return nb_cpus; + } + ++void av_cpu_force_count(int count) ++{ ++ atomic_store_explicit(&cpu_count, count, memory_order_relaxed); ++} ++ + size_t av_cpu_max_align(void) + { +- if (ARCH_MIPS) +- return ff_get_cpu_max_align_mips(); +- if (ARCH_AARCH64) +- return ff_get_cpu_max_align_aarch64(); +- if (ARCH_ARM) +- return ff_get_cpu_max_align_arm(); +- if (ARCH_PPC) +- return ff_get_cpu_max_align_ppc(); +- if (ARCH_X86) +- return ff_get_cpu_max_align_x86(); ++#if ARCH_MIPS ++ return ff_get_cpu_max_align_mips(); ++#elif ARCH_AARCH64 ++ return ff_get_cpu_max_align_aarch64(); ++#elif ARCH_ARM ++ return ff_get_cpu_max_align_arm(); ++#elif ARCH_PPC ++ return ff_get_cpu_max_align_ppc(); ++#elif ARCH_X86 ++ return ff_get_cpu_max_align_x86(); ++#elif ARCH_LOONGARCH ++ return ff_get_cpu_max_align_loongarch(); ++#endif + + return 8; + } +diff -Naur a/media/ffvpx/libavutil/cpu.h b/media/ffvpx/libavutil/cpu.h +--- a/media/ffvpx/libavutil/cpu.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/cpu.h 2023-04-06 12:50:06.975471215 +0200 +@@ -23,8 +23,6 @@ + + #include + +-#include "attributes.h" +- + #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ + + /* lower 16 bits - CPU features */ +@@ -56,6 +54,8 @@ + #define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 + #define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 + #define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used ++#define AV_CPU_FLAG_AVX512ICL 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ ++#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers. + + #define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard + #define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 +@@ -74,6 +74,20 @@ + #define AV_CPU_FLAG_MMI (1 << 0) + #define AV_CPU_FLAG_MSA (1 << 1) + ++//Loongarch SIMD extension. ++#define AV_CPU_FLAG_LSX (1 << 0) ++#define AV_CPU_FLAG_LASX (1 << 1) ++ ++// RISC-V extensions ++#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank) ++#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP) ++#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP) ++#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */ ++#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */ ++#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */ ++#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's ++#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations ++ + /** + * Return the flags which specify extensions supported by the CPU. + * The returned value is affected by av_force_cpu_flags() if that was used +@@ -89,25 +103,6 @@ + void av_force_cpu_flags(int flags); + + /** +- * Set a mask on flags returned by av_get_cpu_flags(). +- * This function is mainly useful for testing. +- * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible +- */ +-attribute_deprecated void av_set_cpu_flags_mask(int mask); +- +-/** +- * Parse CPU flags from a string. +- * +- * The returned flags contain the specified flags as well as related unspecified flags. +- * +- * This function exists only for compatibility with libav. +- * Please use av_parse_cpu_caps() when possible. +- * @return a combination of AV_CPU_* flags, negative on error. +- */ +-attribute_deprecated +-int av_parse_cpu_flags(const char *s); +- +-/** + * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. + * + * @return negative on error. +@@ -120,6 +115,12 @@ + int av_cpu_count(void); + + /** ++ * Overrides cpu count detection and forces the specified count. ++ * Count < 1 disables forcing of specific count. ++ */ ++void av_cpu_force_count(int count); ++ ++/** + * Get the maximum data alignment that may be required by FFmpeg. + * + * Note that this is affected by the build configuration and the CPU flags mask, +diff -Naur a/media/ffvpx/libavutil/cpu_internal.h b/media/ffvpx/libavutil/cpu_internal.h +--- a/media/ffvpx/libavutil/cpu_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/cpu_internal.h 2023-04-06 12:50:06.975471215 +0200 +@@ -30,12 +30,15 @@ + (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \ + !((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW)) + ++#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) \ ++ (HAVE_ ## cpuext ## suffix && \ ++ ((flags) & (AV_CPU_FLAG_ ## cpuext | AV_CPU_FLAG_ ## cpuext ## SLOW))) ++ + #define CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, slow_cpuext) \ + (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \ +- ((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW)) ++ ((flags) & (AV_CPU_FLAG_ ## slow_cpuext | AV_CPU_FLAG_ ## slow_cpuext ## SLOW))) + + #define CPUEXT_SUFFIX_FAST(flags, suffix, cpuext) CPUEXT_SUFFIX_FAST2(flags, suffix, cpuext, cpuext) +-#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, cpuext) + + #define CPUEXT(flags, cpuext) CPUEXT_SUFFIX(flags, , cpuext) + #define CPUEXT_FAST(flags, cpuext) CPUEXT_SUFFIX_FAST(flags, , cpuext) +@@ -45,12 +48,15 @@ + int ff_get_cpu_flags_aarch64(void); + int ff_get_cpu_flags_arm(void); + int ff_get_cpu_flags_ppc(void); ++int ff_get_cpu_flags_riscv(void); + int ff_get_cpu_flags_x86(void); ++int ff_get_cpu_flags_loongarch(void); + + size_t ff_get_cpu_max_align_mips(void); + size_t ff_get_cpu_max_align_aarch64(void); + size_t ff_get_cpu_max_align_arm(void); + size_t ff_get_cpu_max_align_ppc(void); + size_t ff_get_cpu_max_align_x86(void); ++size_t ff_get_cpu_max_align_loongarch(void); + + #endif /* AVUTIL_CPU_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavutil/crc.c b/media/ffvpx/libavutil/crc.c +--- a/media/ffvpx/libavutil/crc.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/crc.c 2023-04-06 12:49:40.260395172 +0200 +@@ -23,8 +23,8 @@ + #include "thread.h" + #include "avassert.h" + #include "bswap.h" +-#include "common.h" + #include "crc.h" ++#include "error.h" + + #if CONFIG_HARDCODED_TABLES + static const AVCRC av_crc_table[AV_CRC_MAX][257] = { +diff -Naur a/media/ffvpx/libavutil/crc.h b/media/ffvpx/libavutil/crc.h +--- a/media/ffvpx/libavutil/crc.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/crc.h 2023-04-06 12:50:06.975471215 +0200 +@@ -30,7 +30,6 @@ + #include + #include + #include "attributes.h" +-#include "version.h" + + /** + * @defgroup lavu_crc32 CRC +@@ -85,7 +84,10 @@ + + /** + * Calculate the CRC of a block. ++ * @param ctx initialized AVCRC array (see av_crc_init()) + * @param crc CRC of previous blocks if any or initial value for CRC ++ * @param buffer buffer whose CRC to calculate ++ * @param length length of the buffer + * @return CRC updated with the data from the given block + * + * @see av_crc_init() "le" parameter +diff -Naur a/media/ffvpx/libavutil/dict.c b/media/ffvpx/libavutil/dict.c +--- a/media/ffvpx/libavutil/dict.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/dict.c 2023-04-06 12:50:24.493176583 +0200 +@@ -20,8 +20,10 @@ + + #include + ++#include "avassert.h" + #include "avstring.h" + #include "dict.h" ++#include "dict_internal.h" + #include "internal.h" + #include "mem.h" + #include "time_internal.h" +@@ -37,21 +39,35 @@ + return m ? m->count : 0; + } + +-AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, +- const AVDictionaryEntry *prev, int flags) ++const AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, ++ const AVDictionaryEntry *prev) + { +- unsigned int i, j; ++ int i = 0; + + if (!m) + return NULL; + + if (prev) + i = prev - m->elems + 1; +- else +- i = 0; + +- for (; i < m->count; i++) { +- const char *s = m->elems[i].key; ++ av_assert2(i >= 0); ++ if (i >= m->count) ++ return NULL; ++ ++ return &m->elems[i]; ++} ++ ++AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, ++ const AVDictionaryEntry *prev, int flags) ++{ ++ const AVDictionaryEntry *entry = prev; ++ unsigned int j; ++ ++ if (!key) ++ return NULL; ++ ++ while ((entry = av_dict_iterate(m, entry))) { ++ const char *s = entry->key; + if (flags & AV_DICT_MATCH_CASE) + for (j = 0; s[j] == key[j] && key[j]; j++) + ; +@@ -62,7 +78,7 @@ + continue; + if (s[j] && !(flags & AV_DICT_IGNORE_SUFFIX)) + continue; +- return &m->elems[i]; ++ return (AVDictionaryEntry *)entry; + } + return NULL; + } +@@ -72,8 +88,17 @@ + { + AVDictionary *m = *pm; + AVDictionaryEntry *tag = NULL; +- char *oldval = NULL, *copy_key = NULL, *copy_value = NULL; ++ char *copy_key = NULL, *copy_value = NULL; ++ int err; + ++ if (flags & AV_DICT_DONT_STRDUP_VAL) ++ copy_value = (void *)value; ++ else if (value) ++ copy_value = av_strdup(value); ++ if (!key) { ++ err = AVERROR(EINVAL); ++ goto err_out; ++ } + if (!(flags & AV_DICT_MULTIKEY)) { + tag = av_dict_get(m, key, NULL, flags); + } +@@ -81,14 +106,10 @@ + copy_key = (void *)key; + else + copy_key = av_strdup(key); +- if (flags & AV_DICT_DONT_STRDUP_VAL) +- copy_value = (void *)value; +- else if (copy_key) +- copy_value = av_strdup(value); + if (!m) + m = *pm = av_mallocz(sizeof(*m)); +- if (!m || (key && !copy_key) || (value && !copy_value)) +- goto err_out; ++ if (!m || !copy_key || (value && !copy_value)) ++ goto enomem; + + if (tag) { + if (flags & AV_DICT_DONT_OVERWRITE) { +@@ -96,9 +117,17 @@ + av_free(copy_value); + return 0; + } +- if (flags & AV_DICT_APPEND) +- oldval = tag->value; +- else ++ if (copy_value && flags & AV_DICT_APPEND) { ++ size_t oldlen = strlen(tag->value); ++ size_t new_part_len = strlen(copy_value); ++ size_t len = oldlen + new_part_len + 1; ++ char *newval = av_realloc(tag->value, len); ++ if (!newval) ++ goto enomem; ++ memcpy(newval + oldlen, copy_value, new_part_len + 1); ++ av_freep(©_value); ++ copy_value = newval; ++ } else + av_free(tag->value); + av_free(tag->key); + *tag = m->elems[--m->count]; +@@ -106,34 +135,25 @@ + AVDictionaryEntry *tmp = av_realloc_array(m->elems, + m->count + 1, sizeof(*m->elems)); + if (!tmp) +- goto err_out; ++ goto enomem; + m->elems = tmp; + } + if (copy_value) { + m->elems[m->count].key = copy_key; + m->elems[m->count].value = copy_value; +- if (oldval && flags & AV_DICT_APPEND) { +- size_t len = strlen(oldval) + strlen(copy_value) + 1; +- char *newval = av_mallocz(len); +- if (!newval) +- goto err_out; +- av_strlcat(newval, oldval, len); +- av_freep(&oldval); +- av_strlcat(newval, copy_value, len); +- m->elems[m->count].value = newval; +- av_freep(©_value); +- } + m->count++; + } else { ++ if (!m->count) { ++ av_freep(&m->elems); ++ av_freep(pm); ++ } + av_freep(©_key); + } +- if (!m->count) { +- av_freep(&m->elems); +- av_freep(pm); +- } + + return 0; + ++enomem: ++ err = AVERROR(ENOMEM); + err_out: + if (m && !m->count) { + av_freep(&m->elems); +@@ -141,7 +161,7 @@ + } + av_free(copy_key); + av_free(copy_value); +- return AVERROR(ENOMEM); ++ return err; + } + + int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, +@@ -216,9 +236,9 @@ + + int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags) + { +- AVDictionaryEntry *t = NULL; ++ const AVDictionaryEntry *t = NULL; + +- while ((t = av_dict_get(src, "", t, AV_DICT_IGNORE_SUFFIX))) { ++ while ((t = av_dict_iterate(src, t))) { + int ret = av_dict_set(dst, t->key, t->value, flags); + if (ret < 0) + return ret; +@@ -230,7 +250,7 @@ + int av_dict_get_string(const AVDictionary *m, char **buffer, + const char key_val_sep, const char pairs_sep) + { +- AVDictionaryEntry *t = NULL; ++ const AVDictionaryEntry *t = NULL; + AVBPrint bprint; + int cnt = 0; + char special_chars[] = {pairs_sep, key_val_sep, '\0'}; +@@ -245,7 +265,7 @@ + } + + av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED); +- while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) { ++ while ((t = av_dict_iterate(m, t))) { + if (cnt++) + av_bprint_append_data(&bprint, &pairs_sep, 1); + av_bprint_escape(&bprint, t->key, special_chars, AV_ESCAPE_MODE_BACKSLASH, 0); +diff -Naur a/media/ffvpx/libavutil/dict.h b/media/ffvpx/libavutil/dict.h +--- a/media/ffvpx/libavutil/dict.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/dict.h 2023-04-06 12:50:24.493176583 +0200 +@@ -32,8 +32,6 @@ + + #include + +-#include "version.h" +- + /** + * @addtogroup lavu_dict AVDictionary + * @ingroup lavu_data +@@ -41,13 +39,15 @@ + * @brief Simple key:value store + * + * @{ +- * Dictionaries are used for storing key:value pairs. To create +- * an AVDictionary, simply pass an address of a NULL pointer to +- * av_dict_set(). NULL can be used as an empty dictionary wherever +- * a pointer to an AVDictionary is required. +- * Use av_dict_get() to retrieve an entry or iterate over all +- * entries and finally av_dict_free() to free the dictionary +- * and all its contents. ++ * Dictionaries are used for storing key-value pairs. ++ * ++ * - To **create an AVDictionary**, simply pass an address of a NULL ++ * pointer to av_dict_set(). NULL can be used as an empty dictionary ++ * wherever a pointer to an AVDictionary is required. ++ * - To **insert an entry**, use av_dict_set(). ++ * - Use av_dict_get() to **retrieve an entry**. ++ * - To **iterate over all entries**, use av_dict_iterate(). ++ * - In order to **free the dictionary and all its contents**, use av_dict_free(). + * + @code + AVDictionary *d = NULL; // "create" an empty dictionary +@@ -59,13 +59,18 @@ + char *v = av_strdup("value"); // you can avoid copying them like this + av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); + +- while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { +- <....> // iterate over all entries in d ++ while ((t = av_dict_iterate(d, t))) { ++ <....> // iterate over all entries in d + } + av_dict_free(&d); + @endcode + */ + ++/** ++ * @name AVDictionary Flags ++ * Flags that influence behavior of the matching of keys or insertion to the dictionary. ++ * @{ ++ */ + #define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ + #define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, + ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ +@@ -73,10 +78,13 @@ + allocated with av_malloc() or another memory allocation function. */ + #define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been + allocated with av_malloc() or another memory allocation function. */ +-#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. ++#define AV_DICT_DONT_OVERWRITE 16 /**< Don't overwrite existing entries. */ + #define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no +- delimiter is added, the strings are simply concatenated. */ ++ delimiter is added, the strings are simply concatenated. */ + #define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ ++/** ++ * @} ++ */ + + typedef struct AVDictionaryEntry { + char *key; +@@ -91,19 +99,45 @@ + * The returned entry key or value must not be changed, or it will + * cause undefined behavior. + * +- * To iterate through all the dictionary entries, you can set the matching key +- * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. ++ * @param prev Set to the previous matching element to find the next. ++ * If set to NULL the first matching element is returned. ++ * @param key Matching key ++ * @param flags A collection of AV_DICT_* flags controlling how the ++ * entry is retrieved + * +- * @param prev Set to the previous matching element to find the next. +- * If set to NULL the first matching element is returned. +- * @param key matching key +- * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved +- * @return found entry or NULL in case no matching entry was found in the dictionary ++ * @return Found entry or NULL in case no matching entry was found in the dictionary + */ + AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, + const AVDictionaryEntry *prev, int flags); + + /** ++ * Iterate over a dictionary ++ * ++ * Iterates through all entries in the dictionary. ++ * ++ * @warning The returned AVDictionaryEntry key/value must not be changed. ++ * ++ * @warning As av_dict_set() invalidates all previous entries returned ++ * by this function, it must not be called while iterating over the dict. ++ * ++ * Typical usage: ++ * @code ++ * const AVDictionaryEntry *e = NULL; ++ * while ((e = av_dict_iterate(m, e))) { ++ * // ... ++ * } ++ * @endcode ++ * ++ * @param m The dictionary to iterate over ++ * @param prev Pointer to the previous AVDictionaryEntry, NULL initially ++ * ++ * @retval AVDictionaryEntry* The next element in the dictionary ++ * @retval NULL No more elements in the dictionary ++ */ ++const AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, ++ const AVDictionaryEntry *prev); ++ ++/** + * Get number of entries in dictionary. + * + * @param m dictionary +@@ -117,23 +151,24 @@ + * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, + * these arguments will be freed on error. + * +- * Warning: Adding a new entry to a dictionary invalidates all existing entries +- * previously returned with av_dict_get. ++ * @warning Adding a new entry to a dictionary invalidates all existing entries ++ * previously returned with av_dict_get() or av_dict_iterate(). + * +- * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL +- * a dictionary struct is allocated and put in *pm. +- * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) +- * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). +- * Passing a NULL value will cause an existing entry to be deleted. +- * @return >= 0 on success otherwise an error code <0 ++ * @param pm Pointer to a pointer to a dictionary struct. If *pm is NULL ++ * a dictionary struct is allocated and put in *pm. ++ * @param key Entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) ++ * @param value Entry value to add to *pm (will be av_strduped or added as a new key depending on flags). ++ * Passing a NULL value will cause an existing entry to be deleted. ++ * ++ * @return >= 0 on success otherwise an error code <0 + */ + int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); + + /** +- * Convenience wrapper for av_dict_set that converts the value to a string ++ * Convenience wrapper for av_dict_set() that converts the value to a string + * and stores it. + * +- * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. ++ * Note: If ::AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. + */ + int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); + +@@ -143,14 +178,15 @@ + * In case of failure, all the successfully set entries are stored in + * *pm. You may need to manually free the created dictionary. + * +- * @param key_val_sep a 0-terminated list of characters used to separate ++ * @param key_val_sep A 0-terminated list of characters used to separate + * key from value +- * @param pairs_sep a 0-terminated list of characters used to separate ++ * @param pairs_sep A 0-terminated list of characters used to separate + * two pairs from each other +- * @param flags flags to use when adding to dictionary. +- * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL ++ * @param flags Flags to use when adding to the dictionary. ++ * ::AV_DICT_DONT_STRDUP_KEY and ::AV_DICT_DONT_STRDUP_VAL + * are ignored since the key/value tokens will always + * be duplicated. ++ * + * @return 0 on success, negative AVERROR code on failure + */ + int av_dict_parse_string(AVDictionary **pm, const char *str, +@@ -159,11 +195,14 @@ + + /** + * Copy entries from one AVDictionary struct into another. +- * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, +- * this function will allocate a struct for you and put it in *dst +- * @param src pointer to source AVDictionary struct +- * @param flags flags to use when setting entries in *dst +- * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag ++ * ++ * @note Metadata is read using the ::AV_DICT_IGNORE_SUFFIX flag ++ * ++ * @param dst Pointer to a pointer to a AVDictionary struct to copy into. If *dst is NULL, ++ * this function will allocate a struct for you and put it in *dst ++ * @param src Pointer to the source AVDictionary struct to copy items from. ++ * @param flags Flags to use when setting entries in *dst ++ * + * @return 0 on success, negative AVERROR code on failure. If dst was allocated + * by this function, callers should free the associated memory. + */ +@@ -182,13 +221,15 @@ + * Such string may be passed back to av_dict_parse_string(). + * @note String is escaped with backslashes ('\'). + * +- * @param[in] m dictionary ++ * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. ++ * ++ * @param[in] m The dictionary + * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. + * Buffer must be freed by the caller when is no longer needed. +- * @param[in] key_val_sep character used to separate key from value +- * @param[in] pairs_sep character used to separate two pairs from each other ++ * @param[in] key_val_sep Character used to separate key from value ++ * @param[in] pairs_sep Character used to separate two pairs from each other ++ * + * @return >= 0 on success, negative on error +- * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. + */ + int av_dict_get_string(const AVDictionary *m, char **buffer, + const char key_val_sep, const char pairs_sep); +diff -Naur a/media/ffvpx/libavutil/dict_internal.h b/media/ffvpx/libavutil/dict_internal.h +--- a/media/ffvpx/libavutil/dict_internal.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavutil/dict_internal.h 2023-04-06 12:50:06.975471215 +0200 +@@ -0,0 +1,37 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVUTIL_DICT_INTERNAL_H ++#define AVUTIL_DICT_INTERNAL_H ++ ++#include ++ ++#include "dict.h" ++ ++/** ++ * Set a dictionary value to an ISO-8601 compliant timestamp string. ++ * ++ * @param dict pointer to a pointer to a dictionary struct. If *dict is NULL ++ * a dictionary struct is allocated and put in *dict. ++ * @param key metadata key ++ * @param timestamp unix timestamp in microseconds ++ * @return <0 on error ++ */ ++int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp); ++ ++#endif /* AVUTIL_DICT_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavutil/error.c b/media/ffvpx/libavutil/error.c +--- a/media/ffvpx/libavutil/error.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/error.c 2023-04-06 12:49:40.260395172 +0200 +@@ -18,9 +18,12 @@ + + #undef _GNU_SOURCE + #define _XOPEN_SOURCE 600 /* XSI-compliant version of strerror_r */ +-#include "avutil.h" ++#include ++#include ++#include "config.h" + #include "avstring.h" +-#include "common.h" ++#include "error.h" ++#include "macros.h" + + struct error_entry { + int num; +diff -Naur a/media/ffvpx/libavutil/error.h b/media/ffvpx/libavutil/error.h +--- a/media/ffvpx/libavutil/error.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/error.h 2023-04-06 12:49:40.260395172 +0200 +@@ -27,6 +27,8 @@ + #include + #include + ++#include "macros.h" ++ + /** + * @addtogroup lavu_error + * +diff -Naur a/media/ffvpx/libavutil/eval.h b/media/ffvpx/libavutil/eval.h +--- a/media/ffvpx/libavutil/eval.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/eval.h 2023-04-06 12:50:06.975471215 +0200 +@@ -26,8 +26,6 @@ + #ifndef AVUTIL_EVAL_H + #define AVUTIL_EVAL_H + +-#include "avutil.h" +- + typedef struct AVExpr AVExpr; + + /** +@@ -44,6 +42,7 @@ + * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers + * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments + * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 ++ * @param log_offset log level offset, can be used to silence error messages + * @param log_ctx parent logging context + * @return >= 0 in case of success, a negative value corresponding to an + * AVERROR code otherwise +@@ -67,6 +66,7 @@ + * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument + * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers + * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments ++ * @param log_offset log level offset, can be used to silence error messages + * @param log_ctx parent logging context + * @return >= 0 in case of success, a negative value corresponding to an + * AVERROR code otherwise +@@ -80,6 +80,7 @@ + /** + * Evaluate a previously parsed expression. + * ++ * @param e the AVExpr to evaluate + * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names + * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 + * @return the value of the expression +@@ -89,6 +90,7 @@ + /** + * Track the presence of variables and their number of occurrences in a parsed expression + * ++ * @param e the AVExpr to track variables in + * @param counter a zero-initialized array where the count of each variable will be stored + * @param size size of array + * @return 0 on success, a negative value indicates that no expression or array was passed +@@ -100,6 +102,7 @@ + * Track the presence of user provided functions and their number of occurrences + * in a parsed expression. + * ++ * @param e the AVExpr to track user provided functions in + * @param counter a zero-initialized array where the count of each function will be stored + * if you passed 5 functions with 2 arguments to av_expr_parse() + * then for arg=2 this will use upto 5 entries. +diff -Naur a/media/ffvpx/libavutil/ffversion.h b/media/ffvpx/libavutil/ffversion.h +--- a/media/ffvpx/libavutil/ffversion.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/ffversion.h 2023-04-06 12:50:24.493176583 +0200 +@@ -1,5 +1,5 @@ + /* Automatically generated by version.sh, do not manually edit! */ + #ifndef AVUTIL_FFVERSION_H + #define AVUTIL_FFVERSION_H +-#define FFMPEG_VERSION "n4.0.2-6-g2be51cbeea" ++#define FFMPEG_VERSION "N-109117-g6a3e174ad1" + #endif /* AVUTIL_FFVERSION_H */ +diff -Naur a/media/ffvpx/libavutil/fifo.c b/media/ffvpx/libavutil/fifo.c +--- a/media/ffvpx/libavutil/fifo.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/fifo.c 2023-04-06 12:49:40.260395172 +0200 +@@ -20,13 +20,291 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include ++#include ++ + #include "avassert.h" +-#include "common.h" ++#include "error.h" + #include "fifo.h" ++#include "macros.h" ++#include "mem.h" ++ ++// by default the FIFO can be auto-grown to 1MB ++#define AUTO_GROW_DEFAULT_BYTES (1024 * 1024) ++ ++struct AVFifo { ++ uint8_t *buffer; ++ ++ size_t elem_size, nb_elems; ++ size_t offset_r, offset_w; ++ // distinguishes the ambiguous situation offset_r == offset_w ++ int is_empty; ++ ++ unsigned int flags; ++ size_t auto_grow_limit; ++}; ++ ++AVFifo *av_fifo_alloc2(size_t nb_elems, size_t elem_size, ++ unsigned int flags) ++{ ++ AVFifo *f; ++ void *buffer = NULL; ++ ++ if (!elem_size) ++ return NULL; ++ ++ if (nb_elems) { ++ buffer = av_realloc_array(NULL, nb_elems, elem_size); ++ if (!buffer) ++ return NULL; ++ } ++ f = av_mallocz(sizeof(*f)); ++ if (!f) { ++ av_free(buffer); ++ return NULL; ++ } ++ f->buffer = buffer; ++ f->nb_elems = nb_elems; ++ f->elem_size = elem_size; ++ f->is_empty = 1; ++ ++ f->flags = flags; ++ f->auto_grow_limit = FFMAX(AUTO_GROW_DEFAULT_BYTES / elem_size, 1); ++ ++ return f; ++} ++ ++void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems) ++{ ++ f->auto_grow_limit = max_elems; ++} ++ ++size_t av_fifo_elem_size(const AVFifo *f) ++{ ++ return f->elem_size; ++} ++ ++size_t av_fifo_can_read(const AVFifo *f) ++{ ++ if (f->offset_w <= f->offset_r && !f->is_empty) ++ return f->nb_elems - f->offset_r + f->offset_w; ++ return f->offset_w - f->offset_r; ++} ++ ++size_t av_fifo_can_write(const AVFifo *f) ++{ ++ return f->nb_elems - av_fifo_can_read(f); ++} ++ ++int av_fifo_grow2(AVFifo *f, size_t inc) ++{ ++ uint8_t *tmp; ++ ++ if (inc > SIZE_MAX - f->nb_elems) ++ return AVERROR(EINVAL); ++ ++ tmp = av_realloc_array(f->buffer, f->nb_elems + inc, f->elem_size); ++ if (!tmp) ++ return AVERROR(ENOMEM); ++ f->buffer = tmp; ++ ++ // move the data from the beginning of the ring buffer ++ // to the newly allocated space ++ if (f->offset_w <= f->offset_r && !f->is_empty) { ++ const size_t copy = FFMIN(inc, f->offset_w); ++ memcpy(tmp + f->nb_elems * f->elem_size, tmp, copy * f->elem_size); ++ if (copy < f->offset_w) { ++ memmove(tmp, tmp + copy * f->elem_size, ++ (f->offset_w - copy) * f->elem_size); ++ f->offset_w -= copy; ++ } else ++ f->offset_w = copy == inc ? 0 : f->nb_elems + copy; ++ } ++ ++ f->nb_elems += inc; ++ ++ return 0; ++} ++ ++static int fifo_check_space(AVFifo *f, size_t to_write) ++{ ++ const size_t can_write = av_fifo_can_write(f); ++ const size_t need_grow = to_write > can_write ? to_write - can_write : 0; ++ size_t can_grow; ++ ++ if (!need_grow) ++ return 0; ++ ++ can_grow = f->auto_grow_limit > f->nb_elems ? ++ f->auto_grow_limit - f->nb_elems : 0; ++ if ((f->flags & AV_FIFO_FLAG_AUTO_GROW) && need_grow <= can_grow) { ++ // allocate a bit more than necessary, if we can ++ const size_t inc = (need_grow < can_grow / 2 ) ? need_grow * 2 : can_grow; ++ return av_fifo_grow2(f, inc); ++ } ++ ++ return AVERROR(ENOSPC); ++} ++ ++static int fifo_write_common(AVFifo *f, const uint8_t *buf, size_t *nb_elems, ++ AVFifoCB read_cb, void *opaque) ++{ ++ size_t to_write = *nb_elems; ++ size_t offset_w; ++ int ret = 0; ++ ++ ret = fifo_check_space(f, to_write); ++ if (ret < 0) ++ return ret; ++ ++ offset_w = f->offset_w; ++ ++ while (to_write > 0) { ++ size_t len = FFMIN(f->nb_elems - offset_w, to_write); ++ uint8_t *wptr = f->buffer + offset_w * f->elem_size; ++ ++ if (read_cb) { ++ ret = read_cb(opaque, wptr, &len); ++ if (ret < 0 || len == 0) ++ break; ++ } else { ++ memcpy(wptr, buf, len * f->elem_size); ++ buf += len * f->elem_size; ++ } ++ offset_w += len; ++ if (offset_w >= f->nb_elems) ++ offset_w = 0; ++ to_write -= len; ++ } ++ f->offset_w = offset_w; ++ ++ if (*nb_elems != to_write) ++ f->is_empty = 0; ++ *nb_elems -= to_write; ++ ++ return ret; ++} ++ ++int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems) ++{ ++ return fifo_write_common(f, buf, &nb_elems, NULL, NULL); ++} ++ ++int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, ++ void *opaque, size_t *nb_elems) ++{ ++ return fifo_write_common(f, NULL, nb_elems, read_cb, opaque); ++} ++ ++static int fifo_peek_common(const AVFifo *f, uint8_t *buf, size_t *nb_elems, ++ size_t offset, AVFifoCB write_cb, void *opaque) ++{ ++ size_t to_read = *nb_elems; ++ size_t offset_r = f->offset_r; ++ size_t can_read = av_fifo_can_read(f); ++ int ret = 0; ++ ++ if (offset > can_read || to_read > can_read - offset) { ++ *nb_elems = 0; ++ return AVERROR(EINVAL); ++ } + +-static AVFifoBuffer *fifo_alloc_common(void *buffer, size_t size) ++ if (offset_r >= f->nb_elems - offset) ++ offset_r -= f->nb_elems - offset; ++ else ++ offset_r += offset; ++ ++ while (to_read > 0) { ++ size_t len = FFMIN(f->nb_elems - offset_r, to_read); ++ uint8_t *rptr = f->buffer + offset_r * f->elem_size; ++ ++ if (write_cb) { ++ ret = write_cb(opaque, rptr, &len); ++ if (ret < 0 || len == 0) ++ break; ++ } else { ++ memcpy(buf, rptr, len * f->elem_size); ++ buf += len * f->elem_size; ++ } ++ offset_r += len; ++ if (offset_r >= f->nb_elems) ++ offset_r = 0; ++ to_read -= len; ++ } ++ ++ *nb_elems -= to_read; ++ ++ return ret; ++} ++ ++int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems) ++{ ++ int ret = fifo_peek_common(f, buf, &nb_elems, 0, NULL, NULL); ++ av_fifo_drain2(f, nb_elems); ++ return ret; ++} ++ ++int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, ++ void *opaque, size_t *nb_elems) ++{ ++ int ret = fifo_peek_common(f, NULL, nb_elems, 0, write_cb, opaque); ++ av_fifo_drain2(f, *nb_elems); ++ return ret; ++} ++ ++int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset) ++{ ++ return fifo_peek_common(f, buf, &nb_elems, offset, NULL, NULL); ++} ++ ++int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque, ++ size_t *nb_elems, size_t offset) ++{ ++ return fifo_peek_common(f, NULL, nb_elems, offset, write_cb, opaque); ++} ++ ++void av_fifo_drain2(AVFifo *f, size_t size) ++{ ++ const size_t cur_size = av_fifo_can_read(f); ++ ++ av_assert0(cur_size >= size); ++ if (cur_size == size) ++ f->is_empty = 1; ++ ++ if (f->offset_r >= f->nb_elems - size) ++ f->offset_r -= f->nb_elems - size; ++ else ++ f->offset_r += size; ++} ++ ++void av_fifo_reset2(AVFifo *f) ++{ ++ f->offset_r = f->offset_w = 0; ++ f->is_empty = 1; ++} ++ ++void av_fifo_freep2(AVFifo **f) ++{ ++ if (*f) { ++ av_freep(&(*f)->buffer); ++ av_freep(f); ++ } ++} ++ ++ ++#if FF_API_FIFO_OLD_API ++FF_DISABLE_DEPRECATION_WARNINGS ++#define OLD_FIFO_SIZE_MAX (size_t)FFMIN3(INT_MAX, UINT32_MAX, SIZE_MAX) ++ ++AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) + { + AVFifoBuffer *f; ++ void *buffer; ++ ++ if (nmemb > OLD_FIFO_SIZE_MAX / size) ++ return NULL; ++ ++ buffer = av_realloc_array(NULL, nmemb, size); + if (!buffer) + return NULL; + f = av_mallocz(sizeof(AVFifoBuffer)); +@@ -35,21 +313,14 @@ + return NULL; + } + f->buffer = buffer; +- f->end = f->buffer + size; ++ f->end = f->buffer + nmemb * size; + av_fifo_reset(f); + return f; + } + + AVFifoBuffer *av_fifo_alloc(unsigned int size) + { +- void *buffer = av_malloc(size); +- return fifo_alloc_common(buffer, size); +-} +- +-AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) +-{ +- void *buffer = av_malloc_array(nmemb, size); +- return fifo_alloc_common(buffer, nmemb * size); ++ return av_fifo_alloc_array(size, 1); + } + + void av_fifo_free(AVFifoBuffer *f) +@@ -88,18 +359,35 @@ + { + unsigned int old_size = f->end - f->buffer; + ++ if (new_size > OLD_FIFO_SIZE_MAX) ++ return AVERROR(EINVAL); ++ + if (old_size < new_size) { +- int len = av_fifo_size(f); +- AVFifoBuffer *f2 = av_fifo_alloc(new_size); ++ size_t offset_r = f->rptr - f->buffer; ++ size_t offset_w = f->wptr - f->buffer; ++ uint8_t *tmp; + +- if (!f2) ++ tmp = av_realloc(f->buffer, new_size); ++ if (!tmp) + return AVERROR(ENOMEM); +- av_fifo_generic_read(f, f2->buffer, len, NULL); +- f2->wptr += len; +- f2->wndx += len; +- av_free(f->buffer); +- *f = *f2; +- av_free(f2); ++ ++ // move the data from the beginning of the ring buffer ++ // to the newly allocated space ++ // the second condition distinguishes full vs empty fifo ++ if (offset_w <= offset_r && av_fifo_size(f)) { ++ const size_t copy = FFMIN(new_size - old_size, offset_w); ++ memcpy(tmp + old_size, tmp, copy); ++ if (copy < offset_w) { ++ memmove(tmp, tmp + copy , offset_w - copy); ++ offset_w -= copy; ++ } else ++ offset_w = old_size + copy; ++ } ++ ++ f->buffer = tmp; ++ f->end = f->buffer + new_size; ++ f->rptr = f->buffer + offset_r; ++ f->wptr = f->buffer + offset_w; + } + return 0; + } +@@ -126,6 +414,9 @@ + uint32_t wndx= f->wndx; + uint8_t *wptr= f->wptr; + ++ if (size > av_fifo_space(f)) ++ return AVERROR(ENOSPC); ++ + do { + int len = FFMIN(f->end - wptr, size); + if (func) { +@@ -136,7 +427,6 @@ + memcpy(wptr, src, len); + src = (uint8_t *)src + len; + } +-// Write memory barrier needed for SMP here in theory + wptr += len; + if (wptr >= f->end) + wptr = f->buffer; +@@ -152,13 +442,8 @@ + { + uint8_t *rptr = f->rptr; + +- av_assert2(offset >= 0); +- +- /* +- * *ndx are indexes modulo 2^32, they are intended to overflow, +- * to handle *ndx greater than 4gb. +- */ +- av_assert2(buf_size + (unsigned)offset <= f->wndx - f->rndx); ++ if (offset < 0 || buf_size > av_fifo_size(f) - offset) ++ return AVERROR(EINVAL); + + if (offset >= f->end - rptr) + rptr += offset - (f->end - f->buffer); +@@ -189,31 +474,15 @@ + int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, + void (*func)(void *, void *, int)) + { +-// Read memory barrier needed for SMP here in theory +- uint8_t *rptr = f->rptr; +- +- do { +- int len = FFMIN(f->end - rptr, buf_size); +- if (func) +- func(dest, rptr, len); +- else { +- memcpy(dest, rptr, len); +- dest = (uint8_t *)dest + len; +- } +-// memory barrier needed for SMP here in theory +- rptr += len; +- if (rptr >= f->end) +- rptr -= f->end - f->buffer; +- buf_size -= len; +- } while (buf_size > 0); +- +- return 0; ++ return av_fifo_generic_peek_at(f, dest, 0, buf_size, func); + } + + int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, + void (*func)(void *, void *, int)) + { +-// Read memory barrier needed for SMP here in theory ++ if (buf_size > av_fifo_size(f)) ++ return AVERROR(EINVAL); ++ + do { + int len = FFMIN(f->end - f->rptr, buf_size); + if (func) +@@ -222,7 +491,6 @@ + memcpy(dest, f->rptr, len); + dest = (uint8_t *)dest + len; + } +-// memory barrier needed for SMP here in theory + av_fifo_drain(f, len); + buf_size -= len; + } while (buf_size > 0); +@@ -238,3 +506,5 @@ + f->rptr -= f->end - f->buffer; + f->rndx += size; + } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif +diff -Naur a/media/ffvpx/libavutil/fifo.h b/media/ffvpx/libavutil/fifo.h +--- a/media/ffvpx/libavutil/fifo.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/fifo.h 2023-04-06 12:50:06.976471255 +0200 +@@ -18,16 +18,229 @@ + + /** + * @file +- * a very simple circular buffer FIFO implementation ++ * @ingroup lavu_fifo ++ * A generic FIFO API + */ + + #ifndef AVUTIL_FIFO_H + #define AVUTIL_FIFO_H + ++#include + #include +-#include "avutil.h" ++ + #include "attributes.h" ++#include "version.h" ++ ++/** ++ * @defgroup lavu_fifo AVFifo ++ * @ingroup lavu_data ++ * ++ * @{ ++ * A generic FIFO API ++ */ ++ ++typedef struct AVFifo AVFifo; ++ ++/** ++ * Callback for writing or reading from a FIFO, passed to (and invoked from) the ++ * av_fifo_*_cb() functions. It may be invoked multiple times from a single ++ * av_fifo_*_cb() call and may process less data than the maximum size indicated ++ * by nb_elems. ++ * ++ * @param opaque the opaque pointer provided to the av_fifo_*_cb() function ++ * @param buf the buffer for reading or writing the data, depending on which ++ * av_fifo_*_cb function is called ++ * @param nb_elems On entry contains the maximum number of elements that can be ++ * read from / written into buf. On success, the callback should ++ * update it to contain the number of elements actually written. ++ * ++ * @return 0 on success, a negative error code on failure (will be returned from ++ * the invoking av_fifo_*_cb() function) ++ */ ++typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems); ++ ++/** ++ * Automatically resize the FIFO on writes, so that the data fits. This ++ * automatic resizing happens up to a limit that can be modified with ++ * av_fifo_auto_grow_limit(). ++ */ ++#define AV_FIFO_FLAG_AUTO_GROW (1 << 0) ++ ++/** ++ * Allocate and initialize an AVFifo with a given element size. ++ * ++ * @param elems initial number of elements that can be stored in the FIFO ++ * @param elem_size Size in bytes of a single element. Further operations on ++ * the returned FIFO will implicitly use this element size. ++ * @param flags a combination of AV_FIFO_FLAG_* ++ * ++ * @return newly-allocated AVFifo on success, a negative error code on failure ++ */ ++AVFifo *av_fifo_alloc2(size_t elems, size_t elem_size, ++ unsigned int flags); ++ ++/** ++ * @return Element size for FIFO operations. This element size is set at ++ * FIFO allocation and remains constant during its lifetime ++ */ ++size_t av_fifo_elem_size(const AVFifo *f); + ++/** ++ * Set the maximum size (in elements) to which the FIFO can be resized ++ * automatically. Has no effect unless AV_FIFO_FLAG_AUTO_GROW is used. ++ */ ++void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems); ++ ++/** ++ * @return number of elements available for reading from the given FIFO. ++ */ ++size_t av_fifo_can_read(const AVFifo *f); ++ ++/** ++ * @return Number of elements that can be written into the given FIFO without ++ * growing it. ++ * ++ * In other words, this number of elements or less is guaranteed to fit ++ * into the FIFO. More data may be written when the ++ * AV_FIFO_FLAG_AUTO_GROW flag was specified at FIFO creation, but this ++ * may involve memory allocation, which can fail. ++ */ ++size_t av_fifo_can_write(const AVFifo *f); ++ ++/** ++ * Enlarge an AVFifo. ++ * ++ * On success, the FIFO will be large enough to hold exactly ++ * inc + av_fifo_can_read() + av_fifo_can_write() ++ * elements. In case of failure, the old FIFO is kept unchanged. ++ * ++ * @param f AVFifo to resize ++ * @param inc number of elements to allocate for, in addition to the current ++ * allocated size ++ * @return a non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_grow2(AVFifo *f, size_t inc); ++ ++/** ++ * Write data into a FIFO. ++ * ++ * In case nb_elems > av_fifo_can_write(f) and the AV_FIFO_FLAG_AUTO_GROW flag ++ * was not specified at FIFO creation, nothing is written and an error ++ * is returned. ++ * ++ * Calling function is guaranteed to succeed if nb_elems <= av_fifo_can_write(f). ++ * ++ * @param f the FIFO buffer ++ * @param buf Data to be written. nb_elems * av_fifo_elem_size(f) bytes will be ++ * read from buf on success. ++ * @param nb_elems number of elements to write into FIFO ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems); ++ ++/** ++ * Write data from a user-provided callback into a FIFO. ++ * ++ * @param f the FIFO buffer ++ * @param read_cb Callback supplying the data to the FIFO. May be called ++ * multiple times. ++ * @param opaque opaque user data to be provided to read_cb ++ * @param nb_elems Should point to the maximum number of elements that can be ++ * written. Will be updated to contain the number of elements ++ * actually written. ++ * ++ * @return non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, ++ void *opaque, size_t *nb_elems); ++ ++/** ++ * Read data from a FIFO. ++ * ++ * In case nb_elems > av_fifo_can_read(f), nothing is read and an error ++ * is returned. ++ * ++ * @param f the FIFO buffer ++ * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes ++ * will be written into buf on success. ++ * @param nb_elems number of elements to read from FIFO ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems); ++ ++/** ++ * Feed data from a FIFO into a user-provided callback. ++ * ++ * @param f the FIFO buffer ++ * @param write_cb Callback the data will be supplied to. May be called ++ * multiple times. ++ * @param opaque opaque user data to be provided to write_cb ++ * @param nb_elems Should point to the maximum number of elements that can be ++ * read. Will be updated to contain the total number of elements ++ * actually sent to the callback. ++ * ++ * @return non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, ++ void *opaque, size_t *nb_elems); ++ ++/** ++ * Read data from a FIFO without modifying FIFO state. ++ * ++ * Returns an error if an attempt is made to peek to nonexistent elements ++ * (i.e. if offset + nb_elems is larger than av_fifo_can_read(f)). ++ * ++ * @param f the FIFO buffer ++ * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes ++ * will be written into buf. ++ * @param nb_elems number of elements to read from FIFO ++ * @param offset number of initial elements to skip. ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset); ++ ++/** ++ * Feed data from a FIFO into a user-provided callback. ++ * ++ * @param f the FIFO buffer ++ * @param write_cb Callback the data will be supplied to. May be called ++ * multiple times. ++ * @param opaque opaque user data to be provided to write_cb ++ * @param nb_elems Should point to the maximum number of elements that can be ++ * read. Will be updated to contain the total number of elements ++ * actually sent to the callback. ++ * @param offset number of initial elements to skip; offset + *nb_elems must not ++ * be larger than av_fifo_can_read(f). ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ */ ++int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque, ++ size_t *nb_elems, size_t offset); ++ ++/** ++ * Discard the specified amount of data from an AVFifo. ++ * @param size number of elements to discard, MUST NOT be larger than ++ * av_fifo_can_read(f) ++ */ ++void av_fifo_drain2(AVFifo *f, size_t size); ++ ++/* ++ * Empty the AVFifo. ++ * @param f AVFifo to reset ++ */ ++void av_fifo_reset2(AVFifo *f); ++ ++/** ++ * Free an AVFifo and reset pointer to NULL. ++ * @param f Pointer to an AVFifo to free. *f == NULL is allowed. ++ */ ++void av_fifo_freep2(AVFifo **f); ++ ++ ++#if FF_API_FIFO_OLD_API + typedef struct AVFifoBuffer { + uint8_t *buffer; + uint8_t *rptr, *wptr, *end; +@@ -38,7 +251,9 @@ + * Initialize an AVFifoBuffer. + * @param size of FIFO + * @return AVFifoBuffer or NULL in case of memory allocation failure ++ * @deprecated use av_fifo_alloc2() + */ ++attribute_deprecated + AVFifoBuffer *av_fifo_alloc(unsigned int size); + + /** +@@ -46,25 +261,33 @@ + * @param nmemb number of elements + * @param size size of the single element + * @return AVFifoBuffer or NULL in case of memory allocation failure ++ * @deprecated use av_fifo_alloc2() + */ ++attribute_deprecated + AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); + + /** + * Free an AVFifoBuffer. + * @param f AVFifoBuffer to free ++ * @deprecated use the AVFifo API with av_fifo_freep2() + */ ++attribute_deprecated + void av_fifo_free(AVFifoBuffer *f); + + /** + * Free an AVFifoBuffer and reset pointer to NULL. + * @param f AVFifoBuffer to free ++ * @deprecated use the AVFifo API with av_fifo_freep2() + */ ++attribute_deprecated + void av_fifo_freep(AVFifoBuffer **f); + + /** + * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. + * @param f AVFifoBuffer to reset ++ * @deprecated use av_fifo_reset2() with the new AVFifo-API + */ ++attribute_deprecated + void av_fifo_reset(AVFifoBuffer *f); + + /** +@@ -72,7 +295,9 @@ + * amount of data you can read from it. + * @param f AVFifoBuffer to read from + * @return size ++ * @deprecated use av_fifo_can_read() with the new AVFifo-API + */ ++attribute_deprecated + int av_fifo_size(const AVFifoBuffer *f); + + /** +@@ -80,7 +305,9 @@ + * amount of data you can write into it. + * @param f AVFifoBuffer to write into + * @return size ++ * @deprecated use av_fifo_can_write() with the new AVFifo-API + */ ++attribute_deprecated + int av_fifo_space(const AVFifoBuffer *f); + + /** +@@ -91,7 +318,13 @@ + * @param buf_size number of bytes to read + * @param func generic read function + * @param dest data destination ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL, ++ * av_fifo_peek_to_cb() otherwise + */ ++attribute_deprecated + int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); + + /** +@@ -101,7 +334,13 @@ + * @param buf_size number of bytes to read + * @param func generic read function + * @param dest data destination ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL, ++ * av_fifo_peek_to_cb() otherwise + */ ++attribute_deprecated + int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); + + /** +@@ -110,7 +349,13 @@ + * @param buf_size number of bytes to read + * @param func generic read function + * @param dest data destination ++ * ++ * @return a non-negative number on success, a negative error code on failure ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_read() when func == NULL, ++ * av_fifo_read_to_cb() otherwise + */ ++attribute_deprecated + int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); + + /** +@@ -124,8 +369,12 @@ + * func must return the number of bytes written to dest_buf, or <= 0 to + * indicate no more data available to write. + * If func is NULL, src is interpreted as a simple byte array for source data. +- * @return the number of bytes written to the FIFO ++ * @return the number of bytes written to the FIFO or a negative error code on failure ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_write() when func == NULL, ++ * av_fifo_write_from_cb() otherwise + */ ++attribute_deprecated + int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); + + /** +@@ -135,7 +384,11 @@ + * @param f AVFifoBuffer to resize + * @param size new AVFifoBuffer size in bytes + * @return <0 for failure, >=0 otherwise ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_grow2() to increase FIFO size, ++ * decreasing FIFO size is not supported + */ ++attribute_deprecated + int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); + + /** +@@ -146,16 +399,24 @@ + * @param f AVFifoBuffer to resize + * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() + * @return <0 for failure, >=0 otherwise ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_grow2(); note that unlike ++ * this function it adds to the allocated size, rather than to the used size + */ ++attribute_deprecated + int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); + + /** + * Read and discard the specified amount of data from an AVFifoBuffer. + * @param f AVFifoBuffer to read from + * @param size amount of data to read in bytes ++ * ++ * @deprecated use the new AVFifo-API with av_fifo_drain2() + */ ++attribute_deprecated + void av_fifo_drain(AVFifoBuffer *f, int size); + ++#if FF_API_FIFO_PEEK2 + /** + * Return a pointer to the data stored in a FIFO buffer at a certain offset. + * The FIFO buffer is not modified. +@@ -165,7 +426,9 @@ + * than the used buffer size or the returned pointer will + * point outside to the buffer data. + * The used buffer size can be checked with av_fifo_size(). ++ * @deprecated use the new AVFifo-API with av_fifo_peek() or av_fifo_peek_to_cb() + */ ++attribute_deprecated + static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) + { + uint8_t *ptr = f->rptr + offs; +@@ -175,5 +438,11 @@ + ptr = f->end - (f->buffer - ptr); + return ptr; + } ++#endif ++#endif ++ ++/** ++ * @} ++ */ + + #endif /* AVUTIL_FIFO_H */ +diff -Naur a/media/ffvpx/libavutil/film_grain_params.h b/media/ffvpx/libavutil/film_grain_params.h +--- a/media/ffvpx/libavutil/film_grain_params.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/film_grain_params.h 2023-04-06 12:49:40.260395172 +0200 +@@ -28,6 +28,11 @@ + * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) + */ + AV_FILM_GRAIN_PARAMS_AV1, ++ ++ /** ++ * The union is valid when interpreted as AVFilmGrainH274Params (codec.h274) ++ */ ++ AV_FILM_GRAIN_PARAMS_H274, + }; + + /** +@@ -118,6 +123,89 @@ + } AVFilmGrainAOMParams; + + /** ++ * This structure describes how to handle film grain synthesis for codecs using ++ * the ITU-T H.274 Versatile suplemental enhancement information message. ++ * ++ * @note The struct must be allocated as part of AVFilmGrainParams using ++ * av_film_grain_params_alloc(). Its size is not a part of the public ABI. ++ */ ++typedef struct AVFilmGrainH274Params { ++ /** ++ * Specifies the film grain simulation mode. ++ * 0 = Frequency filtering, 1 = Auto-regression ++ */ ++ int model_id; ++ ++ /** ++ * Specifies the bit depth used for the luma component. ++ */ ++ int bit_depth_luma; ++ ++ /** ++ * Specifies the bit depth used for the chroma components. ++ */ ++ int bit_depth_chroma; ++ ++ enum AVColorRange color_range; ++ enum AVColorPrimaries color_primaries; ++ enum AVColorTransferCharacteristic color_trc; ++ enum AVColorSpace color_space; ++ ++ /** ++ * Specifies the blending mode used to blend the simulated film grain ++ * with the decoded images. ++ * ++ * 0 = Additive, 1 = Multiplicative ++ */ ++ int blending_mode_id; ++ ++ /** ++ * Specifies a scale factor used in the film grain characterization equations. ++ */ ++ int log2_scale_factor; ++ ++ /** ++ * Indicates if the modelling of film grain for a given component is present. ++ */ ++ int component_model_present[3 /* y, cb, cr */]; ++ ++ /** ++ * Specifies the number of intensity intervals for which a specific set of ++ * model values has been estimated, with a range of [1, 256]. ++ */ ++ uint16_t num_intensity_intervals[3 /* y, cb, cr */]; ++ ++ /** ++ * Specifies the number of model values present for each intensity interval ++ * in which the film grain has been modelled, with a range of [1, 6]. ++ */ ++ uint8_t num_model_values[3 /* y, cb, cr */]; ++ ++ /** ++ * Specifies the lower ounds of each intensity interval for whichthe set of ++ * model values applies for the component. ++ */ ++ uint8_t intensity_interval_lower_bound[3 /* y, cb, cr */][256 /* intensity interval */]; ++ ++ /** ++ * Specifies the upper bound of each intensity interval for which the set of ++ * model values applies for the component. ++ */ ++ uint8_t intensity_interval_upper_bound[3 /* y, cb, cr */][256 /* intensity interval */]; ++ ++ /** ++ * Specifies the model values for the component for each intensity interval. ++ * - When model_id == 0, the following applies: ++ * For comp_model_value[y], the range of values is [0, 2^bit_depth_luma - 1] ++ * For comp_model_value[cb..cr], the range of values is [0, 2^bit_depth_chroma - 1] ++ * - Otherwise, the following applies: ++ * For comp_model_value[y], the range of values is [-2^(bit_depth_luma - 1), 2^(bit_depth_luma - 1) - 1] ++ * For comp_model_value[cb..cr], the range of values is [-2^(bit_depth_chroma - 1), 2^(bit_depth_chroma - 1) - 1] ++ */ ++ int16_t comp_model_value[3 /* y, cb, cr */][256 /* intensity interval */][6 /* model value */]; ++} AVFilmGrainH274Params; ++ ++/** + * This structure describes how to handle film grain synthesis in video + * for specific codecs. Must be present on every frame where film grain is + * meant to be synthesised for correct presentation. +@@ -133,6 +221,9 @@ + + /** + * Seed to use for the synthesis process, if the codec allows for it. ++ * ++ * @note For H.264, this refers to `pic_offset` as defined in ++ * SMPTE RDD 5-2006. + */ + uint64_t seed; + +@@ -143,6 +234,7 @@ + */ + union { + AVFilmGrainAOMParams aom; ++ AVFilmGrainH274Params h274; + } codec; + } AVFilmGrainParams; + +diff -Naur a/media/ffvpx/libavutil/fixed_dsp.c b/media/ffvpx/libavutil/fixed_dsp.c +--- a/media/ffvpx/libavutil/fixed_dsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/fixed_dsp.c 2023-04-06 12:50:06.976471255 +0200 +@@ -45,6 +45,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "common.h" + #include "fixed_dsp.h" + + static void vector_fmul_add_c(int *dst, const int *src0, const int *src1, const int *src2, int len){ +@@ -134,7 +135,7 @@ + return (int)(p >> 31); + } + +-static void butterflies_fixed_c(int *v1s, int *v2, int len) ++static void butterflies_fixed_c(int *av_restrict v1s, int *av_restrict v2, int len) + { + int i; + unsigned int *v1 = v1s; +@@ -161,8 +162,11 @@ + fdsp->butterflies_fixed = butterflies_fixed_c; + fdsp->scalarproduct_fixed = scalarproduct_fixed_c; + +- if (ARCH_X86) +- ff_fixed_dsp_init_x86(fdsp); ++#if ARCH_RISCV ++ ff_fixed_dsp_init_riscv(fdsp); ++#elif ARCH_X86 ++ ff_fixed_dsp_init_x86(fdsp); ++#endif + + return fdsp; + } +diff -Naur a/media/ffvpx/libavutil/fixed_dsp.h b/media/ffvpx/libavutil/fixed_dsp.h +--- a/media/ffvpx/libavutil/fixed_dsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/fixed_dsp.h 2023-04-06 12:50:06.976471255 +0200 +@@ -49,8 +49,8 @@ + #define AVUTIL_FIXED_DSP_H + + #include ++#include "config.h" + #include "attributes.h" +-#include "common.h" + #include "libavcodec/mathops.h" + + typedef struct AVFixedDSPContext { +@@ -161,6 +161,7 @@ + */ + AVFixedDSPContext * avpriv_alloc_fixed_dsp(int strict); + ++void ff_fixed_dsp_init_riscv(AVFixedDSPContext *fdsp); + void ff_fixed_dsp_init_x86(AVFixedDSPContext *fdsp); + + /** +diff -Naur a/media/ffvpx/libavutil/float_dsp.c b/media/ffvpx/libavutil/float_dsp.c +--- a/media/ffvpx/libavutil/float_dsp.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/float_dsp.c 2023-04-06 12:50:06.976471255 +0200 +@@ -150,15 +150,18 @@ + fdsp->butterflies_float = butterflies_float_c; + fdsp->scalarproduct_float = avpriv_scalarproduct_float_c; + +- if (ARCH_AARCH64) +- ff_float_dsp_init_aarch64(fdsp); +- if (ARCH_ARM) +- ff_float_dsp_init_arm(fdsp); +- if (ARCH_PPC) +- ff_float_dsp_init_ppc(fdsp, bit_exact); +- if (ARCH_X86) +- ff_float_dsp_init_x86(fdsp); +- if (ARCH_MIPS) +- ff_float_dsp_init_mips(fdsp); ++#if ARCH_AARCH64 ++ ff_float_dsp_init_aarch64(fdsp); ++#elif ARCH_ARM ++ ff_float_dsp_init_arm(fdsp); ++#elif ARCH_PPC ++ ff_float_dsp_init_ppc(fdsp, bit_exact); ++#elif ARCH_RISCV ++ ff_float_dsp_init_riscv(fdsp); ++#elif ARCH_X86 ++ ff_float_dsp_init_x86(fdsp); ++#elif ARCH_MIPS ++ ff_float_dsp_init_mips(fdsp); ++#endif + return fdsp; + } +diff -Naur a/media/ffvpx/libavutil/float_dsp.h b/media/ffvpx/libavutil/float_dsp.h +--- a/media/ffvpx/libavutil/float_dsp.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/float_dsp.h 2023-04-06 12:50:06.976471255 +0200 +@@ -205,6 +205,7 @@ + void ff_float_dsp_init_aarch64(AVFloatDSPContext *fdsp); + void ff_float_dsp_init_arm(AVFloatDSPContext *fdsp); + void ff_float_dsp_init_ppc(AVFloatDSPContext *fdsp, int strict); ++void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp); + void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp); + void ff_float_dsp_init_mips(AVFloatDSPContext *fdsp); + +diff -Naur a/media/ffvpx/libavutil/frame.c b/media/ffvpx/libavutil/frame.c +--- a/media/ffvpx/libavutil/frame.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/frame.c 2023-04-06 12:50:24.493176583 +0200 +@@ -20,6 +20,7 @@ + #include "avassert.h" + #include "buffer.h" + #include "common.h" ++#include "cpu.h" + #include "dict.h" + #include "frame.h" + #include "imgutils.h" +@@ -27,133 +28,29 @@ + #include "samplefmt.h" + #include "hwcontext.h" + +-#if FF_API_FRAME_GET_SET +-MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp) +-MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_duration) +-MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos) +-MAKE_ACCESSORS(AVFrame, frame, int64_t, channel_layout) +-MAKE_ACCESSORS(AVFrame, frame, int, channels) +-MAKE_ACCESSORS(AVFrame, frame, int, sample_rate) +-MAKE_ACCESSORS(AVFrame, frame, AVDictionary *, metadata) +-MAKE_ACCESSORS(AVFrame, frame, int, decode_error_flags) +-MAKE_ACCESSORS(AVFrame, frame, int, pkt_size) +-MAKE_ACCESSORS(AVFrame, frame, enum AVColorSpace, colorspace) +-MAKE_ACCESSORS(AVFrame, frame, enum AVColorRange, color_range) +-#endif +- ++#if FF_API_OLD_CHANNEL_LAYOUT + #define CHECK_CHANNELS_CONSISTENCY(frame) \ + av_assert2(!(frame)->channel_layout || \ + (frame)->channels == \ + av_get_channel_layout_nb_channels((frame)->channel_layout)) +- +-#if FF_API_FRAME_QP +-struct qp_properties { +- int stride; +- int type; +-}; +- +-int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int qp_type) +-{ +- struct qp_properties *p; +- AVFrameSideData *sd; +- AVBufferRef *ref; +- +-FF_DISABLE_DEPRECATION_WARNINGS +- av_buffer_unref(&f->qp_table_buf); +- +- f->qp_table_buf = buf; +- f->qscale_table = buf->data; +- f->qstride = stride; +- f->qscale_type = qp_type; +-FF_ENABLE_DEPRECATION_WARNINGS +- +- av_frame_remove_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES); +- av_frame_remove_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA); +- +- ref = av_buffer_ref(buf); +- if (!av_frame_new_side_data_from_buf(f, AV_FRAME_DATA_QP_TABLE_DATA, ref)) { +- av_buffer_unref(&ref); +- return AVERROR(ENOMEM); +- } +- +- sd = av_frame_new_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES, +- sizeof(struct qp_properties)); +- if (!sd) +- return AVERROR(ENOMEM); +- +- p = (struct qp_properties *)sd->data; +- p->stride = stride; +- p->type = qp_type; +- +- return 0; +-} +- +-int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type) +-{ +- AVBufferRef *buf = NULL; +- +- *stride = 0; +- *type = 0; +- +-FF_DISABLE_DEPRECATION_WARNINGS +- if (f->qp_table_buf) { +- *stride = f->qstride; +- *type = f->qscale_type; +- buf = f->qp_table_buf; +-FF_ENABLE_DEPRECATION_WARNINGS +- } else { +- AVFrameSideData *sd; +- struct qp_properties *p; +- sd = av_frame_get_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES); +- if (!sd) +- return NULL; +- p = (struct qp_properties *)sd->data; +- sd = av_frame_get_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA); +- if (!sd) +- return NULL; +- *stride = p->stride; +- *type = p->type; +- buf = sd->buf; +- } +- +- return buf ? buf->data : NULL; +-} + #endif + +-const char *av_get_colorspace_name(enum AVColorSpace val) +-{ +- static const char * const name[] = { +- [AVCOL_SPC_RGB] = "GBR", +- [AVCOL_SPC_BT709] = "bt709", +- [AVCOL_SPC_FCC] = "fcc", +- [AVCOL_SPC_BT470BG] = "bt470bg", +- [AVCOL_SPC_SMPTE170M] = "smpte170m", +- [AVCOL_SPC_SMPTE240M] = "smpte240m", +- [AVCOL_SPC_YCOCG] = "YCgCo", +- }; +- if ((unsigned)val >= FF_ARRAY_ELEMS(name)) +- return NULL; +- return name[val]; +-} +- + static void get_frame_defaults(AVFrame *frame) + { +- if (frame->extended_data != frame->data) +- av_freep(&frame->extended_data); +- + memset(frame, 0, sizeof(*frame)); + + frame->pts = + frame->pkt_dts = AV_NOPTS_VALUE; +-#if FF_API_PKT_PTS ++ frame->best_effort_timestamp = AV_NOPTS_VALUE; ++ frame->duration = 0; ++#if FF_API_PKT_DURATION + FF_DISABLE_DEPRECATION_WARNINGS +- frame->pkt_pts = AV_NOPTS_VALUE; ++ frame->pkt_duration = 0; + FF_ENABLE_DEPRECATION_WARNINGS + #endif +- frame->best_effort_timestamp = AV_NOPTS_VALUE; +- frame->pkt_duration = 0; + frame->pkt_pos = -1; + frame->pkt_size = -1; ++ frame->time_base = (AVRational){ 0, 1 }; + frame->key_frame = 1; + frame->sample_aspect_ratio = (AVRational){ 0, 1 }; + frame->format = -1; /* unknown */ +@@ -189,12 +86,11 @@ + + AVFrame *av_frame_alloc(void) + { +- AVFrame *frame = av_mallocz(sizeof(*frame)); ++ AVFrame *frame = av_malloc(sizeof(*frame)); + + if (!frame) + return NULL; + +- frame->extended_data = NULL; + get_frame_defaults(frame); + + return frame; +@@ -280,18 +176,27 @@ + + static int get_audio_buffer(AVFrame *frame, int align) + { +- int channels; + int planar = av_sample_fmt_is_planar(frame->format); +- int planes; ++ int channels, planes; + int ret, i; + +- if (!frame->channels) +- frame->channels = av_get_channel_layout_nb_channels(frame->channel_layout); +- +- channels = frame->channels; +- planes = planar ? channels : 1; +- +- CHECK_CHANNELS_CONSISTENCY(frame); ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (!frame->ch_layout.nb_channels) { ++ if (frame->channel_layout) { ++ av_channel_layout_from_mask(&frame->ch_layout, frame->channel_layout); ++ } else { ++ frame->ch_layout.nb_channels = frame->channels; ++ frame->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; ++ } ++ } ++ frame->channels = frame->ch_layout.nb_channels; ++ frame->channel_layout = frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? ++ frame->ch_layout.u.mask : 0; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ channels = frame->ch_layout.nb_channels; ++ planes = planar ? channels : 1; + if (!frame->linesize[0]) { + ret = av_samples_get_buffer_size(&frame->linesize[0], channels, + frame->nb_samples, frame->format, +@@ -301,9 +206,9 @@ + } + + if (planes > AV_NUM_DATA_POINTERS) { +- frame->extended_data = av_mallocz_array(planes, ++ frame->extended_data = av_calloc(planes, + sizeof(*frame->extended_data)); +- frame->extended_buf = av_mallocz_array((planes - AV_NUM_DATA_POINTERS), ++ frame->extended_buf = av_calloc(planes - AV_NUM_DATA_POINTERS, + sizeof(*frame->extended_buf)); + if (!frame->extended_data || !frame->extended_buf) { + av_freep(&frame->extended_data); +@@ -339,10 +244,17 @@ + if (frame->format < 0) + return AVERROR(EINVAL); + ++FF_DISABLE_DEPRECATION_WARNINGS + if (frame->width > 0 && frame->height > 0) + return get_video_buffer(frame, align); +- else if (frame->nb_samples > 0 && (frame->channel_layout || frame->channels > 0)) ++ else if (frame->nb_samples > 0 && ++ (av_channel_layout_check(&frame->ch_layout) ++#if FF_API_OLD_CHANNEL_LAYOUT ++ || frame->channel_layout || frame->channels > 0 ++#endif ++ )) + return get_audio_buffer(frame, align); ++FF_ENABLE_DEPRECATION_WARNINGS + + return AVERROR(EINVAL); + } +@@ -359,26 +271,35 @@ + dst->crop_left = src->crop_left; + dst->crop_right = src->crop_right; + dst->pts = src->pts; ++ dst->duration = src->duration; + dst->repeat_pict = src->repeat_pict; + dst->interlaced_frame = src->interlaced_frame; + dst->top_field_first = src->top_field_first; + dst->palette_has_changed = src->palette_has_changed; + dst->sample_rate = src->sample_rate; + dst->opaque = src->opaque; +-#if FF_API_PKT_PTS +-FF_DISABLE_DEPRECATION_WARNINGS +- dst->pkt_pts = src->pkt_pts; +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + dst->pkt_dts = src->pkt_dts; + dst->pkt_pos = src->pkt_pos; + dst->pkt_size = src->pkt_size; ++#if FF_API_PKT_DURATION ++FF_DISABLE_DEPRECATION_WARNINGS + dst->pkt_duration = src->pkt_duration; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ dst->time_base = src->time_base; ++#if FF_API_REORDERED_OPAQUE ++FF_DISABLE_DEPRECATION_WARNINGS + dst->reordered_opaque = src->reordered_opaque; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + dst->quality = src->quality; + dst->best_effort_timestamp = src->best_effort_timestamp; ++#if FF_API_FRAME_PICTURE_NUMBER ++FF_DISABLE_DEPRECATION_WARNINGS + dst->coded_picture_number = src->coded_picture_number; + dst->display_picture_number = src->display_picture_number; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + dst->flags = src->flags; + dst->decode_error_flags = src->decode_error_flags; + dst->color_primaries = src->color_primaries; +@@ -389,12 +310,6 @@ + + av_dict_copy(&dst->metadata, src->metadata, 0); + +-#if FF_API_ERROR_FRAME +-FF_DISABLE_DEPRECATION_WARNINGS +- memcpy(dst->error, src->error, sizeof(dst->error)); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + for (i = 0; i < src->nb_side_data; i++) { + const AVFrameSideData *sd_src = src->side_data[i]; + AVFrameSideData *sd_dst; +@@ -421,20 +336,6 @@ + av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); + } + +-#if FF_API_FRAME_QP +-FF_DISABLE_DEPRECATION_WARNINGS +- dst->qscale_table = NULL; +- dst->qstride = 0; +- dst->qscale_type = 0; +- av_buffer_replace(&dst->qp_table_buf, src->qp_table_buf); +- if (dst->qp_table_buf) { +- dst->qscale_table = dst->qp_table_buf->data; +- dst->qstride = src->qstride; +- dst->qscale_type = src->qscale_type; +- } +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); + ret |= av_buffer_replace(&dst->private_ref, src->private_ref); + return ret; +@@ -445,19 +346,44 @@ + int i, ret = 0; + + av_assert1(dst->width == 0 && dst->height == 0); ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + av_assert1(dst->channels == 0); ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ av_assert1(dst->ch_layout.nb_channels == 0 && ++ dst->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC); + + dst->format = src->format; + dst->width = src->width; + dst->height = src->height; ++ dst->nb_samples = src->nb_samples; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + dst->channels = src->channels; + dst->channel_layout = src->channel_layout; +- dst->nb_samples = src->nb_samples; ++ if (!av_channel_layout_check(&src->ch_layout)) { ++ if (src->channel_layout) ++ av_channel_layout_from_mask(&dst->ch_layout, src->channel_layout); ++ else { ++ dst->ch_layout.nb_channels = src->channels; ++ dst->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; ++ } ++ } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + + ret = frame_copy_props(dst, src, 0); + if (ret < 0) + goto fail; + ++ // this check is needed only until FF_API_OLD_CHANNEL_LAYOUT is out ++ if (av_channel_layout_check(&src->ch_layout)) { ++ ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); ++ if (ret < 0) ++ goto fail; ++ } ++ + /* duplicate the frame data if it's not refcounted */ + if (!src->buf[0]) { + ret = av_frame_get_buffer(dst, 0); +@@ -468,7 +394,7 @@ + if (ret < 0) + goto fail; + +- return ret; ++ return 0; + } + + /* ref the buffers */ +@@ -483,8 +409,8 @@ + } + + if (src->extended_buf) { +- dst->extended_buf = av_mallocz_array(sizeof(*dst->extended_buf), +- src->nb_extended_buf); ++ dst->extended_buf = av_calloc(src->nb_extended_buf, ++ sizeof(*dst->extended_buf)); + if (!dst->extended_buf) { + ret = AVERROR(ENOMEM); + goto fail; +@@ -510,13 +436,12 @@ + + /* duplicate extended data */ + if (src->extended_data != src->data) { +- int ch = src->channels; ++ int ch = dst->ch_layout.nb_channels; + + if (!ch) { + ret = AVERROR(EINVAL); + goto fail; + } +- CHECK_CHANNELS_CONSISTENCY(src); + + dst->extended_data = av_malloc_array(sizeof(*dst->extended_data), ch); + if (!dst->extended_data) { +@@ -565,29 +490,34 @@ + av_buffer_unref(&frame->extended_buf[i]); + av_freep(&frame->extended_buf); + av_dict_free(&frame->metadata); +-#if FF_API_FRAME_QP +-FF_DISABLE_DEPRECATION_WARNINGS +- av_buffer_unref(&frame->qp_table_buf); +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + + av_buffer_unref(&frame->hw_frames_ctx); + + av_buffer_unref(&frame->opaque_ref); + av_buffer_unref(&frame->private_ref); + ++ if (frame->extended_data != frame->data) ++ av_freep(&frame->extended_data); ++ ++ av_channel_layout_uninit(&frame->ch_layout); ++ + get_frame_defaults(frame); + } + + void av_frame_move_ref(AVFrame *dst, AVFrame *src) + { + av_assert1(dst->width == 0 && dst->height == 0); ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + av_assert1(dst->channels == 0); ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ av_assert1(dst->ch_layout.nb_channels == 0 && ++ dst->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC); + + *dst = *src; + if (src->extended_data == src->data) + dst->extended_data = dst->data; +- memset(src, 0, sizeof(*src)); + get_frame_defaults(src); + } + +@@ -613,9 +543,6 @@ + AVFrame tmp; + int ret; + +- if (!frame->buf[0]) +- return AVERROR(EINVAL); +- + if (av_frame_is_writable(frame)) + return 0; + +@@ -623,9 +550,18 @@ + tmp.format = frame->format; + tmp.width = frame->width; + tmp.height = frame->height; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + tmp.channels = frame->channels; + tmp.channel_layout = frame->channel_layout; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + tmp.nb_samples = frame->nb_samples; ++ ret = av_channel_layout_copy(&tmp.ch_layout, &frame->ch_layout); ++ if (ret < 0) { ++ av_frame_unref(&tmp); ++ return ret; ++ } + + if (frame->hw_frames_ctx) + ret = av_hwframe_get_buffer(frame->hw_frames_ctx, &tmp, 0); +@@ -666,10 +602,18 @@ + int planes, i; + + if (frame->nb_samples) { +- int channels = frame->channels; ++ int channels = frame->ch_layout.nb_channels; ++ ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (!channels) { ++ channels = frame->channels; ++ CHECK_CHANNELS_CONSISTENCY(frame); ++ } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + if (!channels) + return NULL; +- CHECK_CHANNELS_CONSISTENCY(frame); + planes = av_sample_fmt_is_planar(frame->format) ? channels : 1; + } else + planes = 4; +@@ -725,7 +669,7 @@ + + AVFrameSideData *av_frame_new_side_data(AVFrame *frame, + enum AVFrameSideDataType type, +- buffer_size_t size) ++ size_t size) + { + AVFrameSideData *ret; + AVBufferRef *buf = av_buffer_alloc(size); +@@ -775,16 +719,35 @@ + static int frame_copy_audio(AVFrame *dst, const AVFrame *src) + { + int planar = av_sample_fmt_is_planar(dst->format); +- int channels = dst->channels; ++ int channels = dst->ch_layout.nb_channels; + int planes = planar ? channels : 1; + int i; + +- if (dst->nb_samples != src->nb_samples || +- dst->channels != src->channels || +- dst->channel_layout != src->channel_layout) +- return AVERROR(EINVAL); ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS ++ if (!channels || !src->ch_layout.nb_channels) { ++ if (dst->channels != src->channels || ++ dst->channel_layout != src->channel_layout) ++ return AVERROR(EINVAL); ++ CHECK_CHANNELS_CONSISTENCY(src); ++ } ++ if (!channels) { ++ channels = dst->channels; ++ planes = planar ? channels : 1; ++ } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + +- CHECK_CHANNELS_CONSISTENCY(src); ++ if (dst->nb_samples != src->nb_samples || ++#if FF_API_OLD_CHANNEL_LAYOUT ++ (av_channel_layout_check(&dst->ch_layout) && ++ av_channel_layout_check(&src->ch_layout) && ++#endif ++ av_channel_layout_compare(&dst->ch_layout, &src->ch_layout)) ++#if FF_API_OLD_CHANNEL_LAYOUT ++ ) ++#endif ++ return AVERROR(EINVAL); + + for (i = 0; i < planes; i++) + if (!dst->extended_data[i] || !src->extended_data[i]) +@@ -801,10 +764,17 @@ + if (dst->format != src->format || dst->format < 0) + return AVERROR(EINVAL); + ++FF_DISABLE_DEPRECATION_WARNINGS + if (dst->width > 0 && dst->height > 0) + return frame_copy_video(dst, src); +- else if (dst->nb_samples > 0 && dst->channels > 0) ++ else if (dst->nb_samples > 0 && ++ (av_channel_layout_check(&dst->ch_layout) ++#if FF_API_OLD_CHANNEL_LAYOUT ++ || dst->channels > 0 ++#endif ++ )) + return frame_copy_audio(dst, src); ++FF_ENABLE_DEPRECATION_WARNINGS + + return AVERROR(EINVAL); + } +@@ -843,15 +813,16 @@ + case AV_FRAME_DATA_S12M_TIMECODE: return "SMPTE 12-1 timecode"; + case AV_FRAME_DATA_SPHERICAL: return "Spherical Mapping"; + case AV_FRAME_DATA_ICC_PROFILE: return "ICC profile"; +-#if FF_API_FRAME_QP +- case AV_FRAME_DATA_QP_TABLE_PROPERTIES: return "QP table properties"; +- case AV_FRAME_DATA_QP_TABLE_DATA: return "QP table data"; +-#endif + case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: return "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)"; ++ case AV_FRAME_DATA_DYNAMIC_HDR_VIVID: return "HDR Dynamic Metadata CUVA 005.1 2021 (Vivid)"; + case AV_FRAME_DATA_REGIONS_OF_INTEREST: return "Regions Of Interest"; + case AV_FRAME_DATA_VIDEO_ENC_PARAMS: return "Video encoding parameters"; + case AV_FRAME_DATA_SEI_UNREGISTERED: return "H.26[45] User Data Unregistered SEI message"; + case AV_FRAME_DATA_FILM_GRAIN_PARAMS: return "Film grain parameters"; ++ case AV_FRAME_DATA_DETECTION_BBOXES: return "Bounding boxes for object detection and classification"; ++ case AV_FRAME_DATA_DOVI_RPU_BUFFER: return "Dolby Vision RPU Data"; ++ case AV_FRAME_DATA_DOVI_METADATA: return "Dolby Vision Metadata"; ++ case AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT: return "Ambient viewing environment"; + } + return NULL; + } +@@ -866,7 +837,7 @@ + int shift_x = (i == 1 || i == 2) ? desc->log2_chroma_w : 0; + int shift_y = (i == 1 || i == 2) ? desc->log2_chroma_h : 0; + +- if (desc->flags & (AV_PIX_FMT_FLAG_PAL | FF_PSEUDOPAL) && i == 1) { ++ if (desc->flags & AV_PIX_FMT_FLAG_PAL && i == 1) { + offsets[i] = 0; + break; + } +diff -Naur a/media/ffvpx/libavutil/frame.h b/media/ffvpx/libavutil/frame.h +--- a/media/ffvpx/libavutil/frame.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/frame.h 2023-04-06 12:50:24.493176583 +0200 +@@ -30,6 +30,7 @@ + + #include "avutil.h" + #include "buffer.h" ++#include "channel_layout.h" + #include "dict.h" + #include "rational.h" + #include "samplefmt.h" +@@ -142,23 +143,6 @@ + */ + AV_FRAME_DATA_ICC_PROFILE, + +-#if FF_API_FRAME_QP +- /** +- * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA. +- * The contents of this side data are undocumented and internal; use +- * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a +- * meaningful way instead. +- */ +- AV_FRAME_DATA_QP_TABLE_PROPERTIES, +- +- /** +- * Raw QP table data. Its format is described by +- * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and +- * av_frame_get_qp_table() to access this instead. +- */ +- AV_FRAME_DATA_QP_TABLE_DATA, +-#endif +- + /** + * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t + * where the first uint32_t describes how many (1-3) of the other timecodes are used. +@@ -198,6 +182,38 @@ + * Must be present for every frame which should have film grain applied. + */ + AV_FRAME_DATA_FILM_GRAIN_PARAMS, ++ ++ /** ++ * Bounding boxes for object detection and classification, ++ * as described by AVDetectionBBoxHeader. ++ */ ++ AV_FRAME_DATA_DETECTION_BBOXES, ++ ++ /** ++ * Dolby Vision RPU raw data, suitable for passing to x265 ++ * or other libraries. Array of uint8_t, with NAL emulation ++ * bytes intact. ++ */ ++ AV_FRAME_DATA_DOVI_RPU_BUFFER, ++ ++ /** ++ * Parsed Dolby Vision metadata, suitable for passing to a software ++ * implementation. The payload is the AVDOVIMetadata struct defined in ++ * libavutil/dovi_meta.h. ++ */ ++ AV_FRAME_DATA_DOVI_METADATA, ++ ++ /** ++ * HDR Vivid dynamic metadata associated with a video frame. The payload is ++ * an AVDynamicHDRVivid type and contains information for color ++ * volume transform - CUVA 005.1-2021. ++ */ ++ AV_FRAME_DATA_DYNAMIC_HDR_VIVID, ++ ++ /** ++ * Ambient viewing environment metadata, as defined by H.274. ++ */ ++ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, + }; + + enum AVActiveFormatDescription { +@@ -220,11 +236,7 @@ + typedef struct AVFrameSideData { + enum AVFrameSideDataType type; + uint8_t *data; +-#if FF_API_BUFFER_SIZE_T +- int size; +-#else + size_t size; +-#endif + AVDictionary *metadata; + AVBufferRef *buf; + } AVFrameSideData; +@@ -319,21 +331,32 @@ + #define AV_NUM_DATA_POINTERS 8 + /** + * pointer to the picture/channel planes. +- * This might be different from the first allocated byte ++ * This might be different from the first allocated byte. For video, ++ * it could even point to the end of the image data. ++ * ++ * All pointers in data and extended_data must point into one of the ++ * AVBufferRef in buf or extended_buf. + * + * Some decoders access areas outside 0,0 - width,height, please + * see avcodec_align_dimensions2(). Some filters and swscale can read + * up to 16 bytes beyond the planes, if these filters are to be used, + * then 16 extra bytes must be allocated. + * +- * NOTE: Except for hwaccel formats, pointers not needed by the format +- * MUST be set to NULL. ++ * NOTE: Pointers not needed by the format MUST be set to NULL. ++ * ++ * @attention In case of video, the data[] pointers can point to the ++ * end of image data in order to reverse line order, when used in ++ * combination with negative values in the linesize[] array. + */ + uint8_t *data[AV_NUM_DATA_POINTERS]; + + /** +- * For video, size in bytes of each picture line. +- * For audio, size in bytes of each plane. ++ * For video, a positive or negative value, which is typically indicating ++ * the size in bytes of each picture line, but it can also be: ++ * - the negative byte size of lines for vertical flipping ++ * (with data[n] pointing to the end of the data ++ * - a positive or negative multiple of the byte size as for accessing ++ * even and odd fields of a frame (possibly flipped) + * + * For audio, only linesize[0] may be set. For planar audio, each channel + * plane must be the same size. +@@ -345,6 +368,9 @@ + * + * @note The linesize may be larger than the size of usable data -- there + * may be extra padding present for performance reasons. ++ * ++ * @attention In case of video, line size values can be negative to achieve ++ * a vertically inverted iteration over image lines. + */ + int linesize[AV_NUM_DATA_POINTERS]; + +@@ -410,15 +436,6 @@ + */ + int64_t pts; + +-#if FF_API_PKT_PTS +- /** +- * PTS copied from the AVPacket that was decoded to produce this frame. +- * @deprecated use the pts field instead +- */ +- attribute_deprecated +- int64_t pkt_pts; +-#endif +- + /** + * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) + * This is also the Presentation time of this AVFrame calculated from +@@ -427,13 +444,25 @@ + int64_t pkt_dts; + + /** ++ * Time base for the timestamps in this frame. ++ * In the future, this field may be set on frames output by decoders or ++ * filters, but its value will be by default ignored on input to encoders ++ * or filters. ++ */ ++ AVRational time_base; ++ ++#if FF_API_FRAME_PICTURE_NUMBER ++ /** + * picture number in bitstream order + */ ++ attribute_deprecated + int coded_picture_number; + /** + * picture number in display order + */ ++ attribute_deprecated + int display_picture_number; ++#endif + + /** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) +@@ -445,14 +474,6 @@ + */ + void *opaque; + +-#if FF_API_ERROR_FRAME +- /** +- * @deprecated unused +- */ +- attribute_deprecated +- uint64_t error[AV_NUM_DATA_POINTERS]; +-#endif +- + /** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) +@@ -474,6 +495,7 @@ + */ + int palette_has_changed; + ++#if FF_API_REORDERED_OPAQUE + /** + * reordered opaque 64 bits (generally an integer or a double precision float + * PTS but can be anything). +@@ -481,24 +503,32 @@ + * that time, + * the decoder reorders values as needed and sets AVFrame.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque ++ * ++ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead + */ ++ attribute_deprecated + int64_t reordered_opaque; ++#endif + + /** + * Sample rate of the audio data. + */ + int sample_rate; + ++#if FF_API_OLD_CHANNEL_LAYOUT + /** + * Channel layout of the audio data. ++ * @deprecated use ch_layout instead + */ ++ attribute_deprecated + uint64_t channel_layout; ++#endif + + /** +- * AVBuffer references backing the data for this frame. If all elements of +- * this array are NULL, then this frame is not reference counted. This array +- * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must +- * also be non-NULL for all j < i. ++ * AVBuffer references backing the data for this frame. All the pointers in ++ * data and extended_data must point inside one of the buffers in buf or ++ * extended_buf. This array must be filled contiguously -- if buf[i] is ++ * non-NULL then buf[j] must also be non-NULL for all j < i. + * + * There may be at most one AVBuffer per data plane, so for video this array + * always contains all the references. For planar audio with more than +@@ -588,13 +618,18 @@ + */ + int64_t pkt_pos; + ++#if FF_API_PKT_DURATION + /** + * duration of the corresponding packet, expressed in + * AVStream->time_base units, 0 if unknown. + * - encoding: unused + * - decoding: Read by user. ++ * ++ * @deprecated use duration instead + */ ++ attribute_deprecated + int64_t pkt_duration; ++#endif + + /** + * metadata. +@@ -616,12 +651,16 @@ + #define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 + #define FF_DECODE_ERROR_DECODE_SLICES 8 + ++#if FF_API_OLD_CHANNEL_LAYOUT + /** + * number of audio channels, only used for audio. + * - encoding: unused + * - decoding: Read by user. ++ * @deprecated use ch_layout instead + */ ++ attribute_deprecated + int channels; ++#endif + + /** + * size of the corresponding packet containing the compressed +@@ -632,24 +671,6 @@ + */ + int pkt_size; + +-#if FF_API_FRAME_QP +- /** +- * QP table +- */ +- attribute_deprecated +- int8_t *qscale_table; +- /** +- * QP store stride +- */ +- attribute_deprecated +- int qstride; +- +- attribute_deprecated +- int qscale_type; +- +- attribute_deprecated +- AVBufferRef *qp_table_buf; +-#endif + /** + * For hwaccel-format frames, this should be a reference to the + * AVHWFramesContext describing the frame. +@@ -695,70 +716,18 @@ + * for the target frame's private_ref field. + */ + AVBufferRef *private_ref; +-} AVFrame; + +-#if FF_API_FRAME_GET_SET +-/** +- * Accessors for some AVFrame fields. These used to be provided for ABI +- * compatibility, and do not need to be used anymore. +- */ +-attribute_deprecated +-int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); +-attribute_deprecated +-int64_t av_frame_get_pkt_duration (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); +-attribute_deprecated +-int64_t av_frame_get_pkt_pos (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); +-attribute_deprecated +-int64_t av_frame_get_channel_layout (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_channel_layout (AVFrame *frame, int64_t val); +-attribute_deprecated +-int av_frame_get_channels (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_channels (AVFrame *frame, int val); +-attribute_deprecated +-int av_frame_get_sample_rate (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_sample_rate (AVFrame *frame, int val); +-attribute_deprecated +-AVDictionary *av_frame_get_metadata (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); +-attribute_deprecated +-int av_frame_get_decode_error_flags (const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_decode_error_flags (AVFrame *frame, int val); +-attribute_deprecated +-int av_frame_get_pkt_size(const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_pkt_size(AVFrame *frame, int val); +-#if FF_API_FRAME_QP +-attribute_deprecated +-int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); +-attribute_deprecated +-int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); +-#endif +-attribute_deprecated +-enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); +-attribute_deprecated +-enum AVColorRange av_frame_get_color_range(const AVFrame *frame); +-attribute_deprecated +-void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); +-#endif ++ /** ++ * Channel layout of the audio data. ++ */ ++ AVChannelLayout ch_layout; ++ ++ /** ++ * Duration of the frame, in the same units as pts. 0 if unknown. ++ */ ++ int64_t duration; ++} AVFrame; + +-/** +- * Get the name of a colorspace. +- * @return a static string identifying the colorspace; can be NULL. +- */ +-const char *av_get_colorspace_name(enum AVColorSpace val); + + /** + * Allocate an AVFrame and set its fields to default values. The resulting +@@ -827,7 +796,7 @@ + * The following fields must be set on frame before calling this function: + * - format (pixel format for video, sample format for audio) + * - width and height for video +- * - nb_samples and channel_layout for audio ++ * - nb_samples and ch_layout for audio + * + * This function will fill AVFrame.data and AVFrame.buf arrays and, if + * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. +@@ -864,7 +833,8 @@ + * Ensure that the frame data is writable, avoiding data copy if possible. + * + * Do nothing if the frame is writable, allocate new buffers and copy the data +- * if it is not. ++ * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy ++ * is always made. + * + * @return 0 on success, a negative AVERROR on error. + * +@@ -899,6 +869,7 @@ + /** + * Get the buffer reference a given data plane is stored in. + * ++ * @param frame the frame to get the plane's buffer from + * @param plane index of the data plane of interest in frame->extended_data. + * + * @return the buffer reference that contains the plane or NULL if the input +@@ -917,11 +888,7 @@ + */ + AVFrameSideData *av_frame_new_side_data(AVFrame *frame, + enum AVFrameSideDataType type, +-#if FF_API_BUFFER_SIZE_T +- int size); +-#else + size_t size); +-#endif + + /** + * Add a new side data to a frame from an existing AVBufferRef +diff -Naur a/media/ffvpx/libavutil/hwcontext.c b/media/ffvpx/libavutil/hwcontext.c +--- a/media/ffvpx/libavutil/hwcontext.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/hwcontext.c 2023-04-06 12:50:24.493176583 +0200 +@@ -18,6 +18,7 @@ + + #include "config.h" + ++#include "avassert.h" + #include "buffer.h" + #include "common.h" + #include "hwcontext.h" +@@ -308,7 +309,7 @@ + AVFrame **frames; + int i, ret = 0; + +- frames = av_mallocz_array(ctx->initial_pool_size, sizeof(*frames)); ++ frames = av_calloc(ctx->initial_pool_size, sizeof(*frames)); + if (!frames) + return AVERROR(ENOMEM); + +@@ -396,10 +397,14 @@ + + static int transfer_data_alloc(AVFrame *dst, const AVFrame *src, int flags) + { +- AVHWFramesContext *ctx = (AVHWFramesContext*)src->hw_frames_ctx->data; ++ AVHWFramesContext *ctx; + AVFrame *frame_tmp; + int ret = 0; + ++ if (!src->hw_frames_ctx) ++ return AVERROR(EINVAL); ++ ctx = (AVHWFramesContext*)src->hw_frames_ctx->data; ++ + frame_tmp = av_frame_alloc(); + if (!frame_tmp) + return AVERROR(ENOMEM); +@@ -788,6 +793,8 @@ + + int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags) + { ++ AVBufferRef *orig_dst_frames = dst->hw_frames_ctx; ++ enum AVPixelFormat orig_dst_fmt = dst->format; + AVHWFramesContext *src_frames, *dst_frames; + HWMapDescriptor *hwmap; + int ret; +@@ -824,8 +831,10 @@ + src_frames->internal->hw_type->map_from) { + ret = src_frames->internal->hw_type->map_from(src_frames, + dst, src, flags); +- if (ret != AVERROR(ENOSYS)) ++ if (ret >= 0) + return ret; ++ else if (ret != AVERROR(ENOSYS)) ++ goto fail; + } + } + +@@ -836,12 +845,30 @@ + dst_frames->internal->hw_type->map_to) { + ret = dst_frames->internal->hw_type->map_to(dst_frames, + dst, src, flags); +- if (ret != AVERROR(ENOSYS)) ++ if (ret >= 0) + return ret; ++ else if (ret != AVERROR(ENOSYS)) ++ goto fail; + } + } + + return AVERROR(ENOSYS); ++ ++fail: ++ // if the caller provided dst frames context, it should be preserved ++ // by this function ++ av_assert0(orig_dst_frames == NULL || ++ orig_dst_frames == dst->hw_frames_ctx); ++ ++ // preserve user-provided dst frame fields, but clean ++ // anything we might have set ++ dst->hw_frames_ctx = NULL; ++ av_frame_unref(dst); ++ ++ dst->hw_frames_ctx = orig_dst_frames; ++ dst->format = orig_dst_fmt; ++ ++ return ret; + } + + int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, +diff -Naur a/media/ffvpx/libavutil/hwcontext_drm.h b/media/ffvpx/libavutil/hwcontext_drm.h +--- a/media/ffvpx/libavutil/hwcontext_drm.h 1970-01-01 01:00:00.000000000 +0100 ++++ b/media/ffvpx/libavutil/hwcontext_drm.h 2023-04-06 12:49:40.260395172 +0200 +@@ -0,0 +1,169 @@ ++/* ++ * 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 ++ */ ++ ++#ifndef AVUTIL_HWCONTEXT_DRM_H ++#define AVUTIL_HWCONTEXT_DRM_H ++ ++#include ++#include ++ ++/** ++ * @file ++ * API-specific header for AV_HWDEVICE_TYPE_DRM. ++ * ++ * Internal frame allocation is not currently supported - all frames ++ * must be allocated by the user. Thus AVHWFramesContext is always ++ * NULL, though this may change if support for frame allocation is ++ * added in future. ++ */ ++ ++enum { ++ /** ++ * The maximum number of layers/planes in a DRM frame. ++ */ ++ AV_DRM_MAX_PLANES = 4 ++}; ++ ++/** ++ * DRM object descriptor. ++ * ++ * Describes a single DRM object, addressing it as a PRIME file ++ * descriptor. ++ */ ++typedef struct AVDRMObjectDescriptor { ++ /** ++ * DRM PRIME fd for the object. ++ */ ++ int fd; ++ /** ++ * Total size of the object. ++ * ++ * (This includes any parts not which do not contain image data.) ++ */ ++ size_t size; ++ /** ++ * Format modifier applied to the object (DRM_FORMAT_MOD_*). ++ * ++ * If the format modifier is unknown then this should be set to ++ * DRM_FORMAT_MOD_INVALID. ++ */ ++ uint64_t format_modifier; ++} AVDRMObjectDescriptor; ++ ++/** ++ * DRM plane descriptor. ++ * ++ * Describes a single plane of a layer, which is contained within ++ * a single object. ++ */ ++typedef struct AVDRMPlaneDescriptor { ++ /** ++ * Index of the object containing this plane in the objects ++ * array of the enclosing frame descriptor. ++ */ ++ int object_index; ++ /** ++ * Offset within that object of this plane. ++ */ ++ ptrdiff_t offset; ++ /** ++ * Pitch (linesize) of this plane. ++ */ ++ ptrdiff_t pitch; ++} AVDRMPlaneDescriptor; ++ ++/** ++ * DRM layer descriptor. ++ * ++ * Describes a single layer within a frame. This has the structure ++ * defined by its format, and will contain one or more planes. ++ */ ++typedef struct AVDRMLayerDescriptor { ++ /** ++ * Format of the layer (DRM_FORMAT_*). ++ */ ++ uint32_t format; ++ /** ++ * Number of planes in the layer. ++ * ++ * This must match the number of planes required by format. ++ */ ++ int nb_planes; ++ /** ++ * Array of planes in this layer. ++ */ ++ AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; ++} AVDRMLayerDescriptor; ++ ++/** ++ * DRM frame descriptor. ++ * ++ * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. ++ * It is also used by user-allocated frame pools - allocating in ++ * AVHWFramesContext.pool must return AVBufferRefs which contain ++ * an object of this type. ++ * ++ * The fields of this structure should be set such it can be ++ * imported directly by EGL using the EGL_EXT_image_dma_buf_import ++ * and EGL_EXT_image_dma_buf_import_modifiers extensions. ++ * (Note that the exact layout of a particular format may vary between ++ * platforms - we only specify that the same platform should be able ++ * to import it.) ++ * ++ * The total number of planes must not exceed AV_DRM_MAX_PLANES, and ++ * the order of the planes by increasing layer index followed by ++ * increasing plane index must be the same as the order which would ++ * be used for the data pointers in the equivalent software format. ++ */ ++typedef struct AVDRMFrameDescriptor { ++ /** ++ * Number of DRM objects making up this frame. ++ */ ++ int nb_objects; ++ /** ++ * Array of objects making up the frame. ++ */ ++ AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; ++ /** ++ * Number of layers in the frame. ++ */ ++ int nb_layers; ++ /** ++ * Array of layers in the frame. ++ */ ++ AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; ++} AVDRMFrameDescriptor; ++ ++/** ++ * DRM device. ++ * ++ * Allocated as AVHWDeviceContext.hwctx. ++ */ ++typedef struct AVDRMDeviceContext { ++ /** ++ * File descriptor of DRM device. ++ * ++ * This is used as the device to create frames on, and may also be ++ * used in some derivation and mapping operations. ++ * ++ * If no device is required, set to -1. ++ */ ++ int fd; ++} AVDRMDeviceContext; ++ ++#endif /* AVUTIL_HWCONTEXT_DRM_H */ +diff -Naur a/media/ffvpx/libavutil/hwcontext.h b/media/ffvpx/libavutil/hwcontext.h +--- a/media/ffvpx/libavutil/hwcontext.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/hwcontext.h 2023-04-06 12:50:06.976471255 +0200 +@@ -249,7 +249,7 @@ + /** + * Iterate over supported device types. + * +- * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type ++ * @param prev AV_HWDEVICE_TYPE_NONE initially, then the previous type + * returned by this function in subsequent iterations. + * @return The next usable device type from enum AVHWDeviceType, or + * AV_HWDEVICE_TYPE_NONE if there are no more. +@@ -571,6 +571,10 @@ + * possible with the given arguments and hwframe setup, while other return + * values indicate that it failed somehow. + * ++ * On failure, the destination frame will be left blank, except for the ++ * hw_frames_ctx/format fields thay may have been set by the caller - those will ++ * be preserved as they were. ++ * + * @param dst Destination frame, to contain the mapping. + * @param src Source frame, to be mapped. + * @param flags Some combination of AV_HWFRAME_MAP_* flags. +@@ -587,6 +591,7 @@ + * + * @param derived_frame_ctx On success, a reference to the newly created + * AVHWFramesContext. ++ * @param format The AVPixelFormat for the derived context. + * @param derived_device_ctx A reference to the device to create the new + * AVHWFramesContext on. + * @param source_frame_ctx A reference to an existing AVHWFramesContext +diff -Naur a/media/ffvpx/libavutil/hwcontext_vaapi.c b/media/ffvpx/libavutil/hwcontext_vaapi.c +--- a/media/ffvpx/libavutil/hwcontext_vaapi.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/hwcontext_vaapi.c 2023-04-06 12:50:24.493176583 +0200 +@@ -81,6 +81,9 @@ + unsigned int rt_format; + // Whether vaDeriveImage works. + int derive_works; ++ // Caches whether VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 is unsupported for ++ // surface imports. ++ int prime_2_import_unsupported; + } VAAPIFramesContext; + + typedef struct VAAPIMapping { +@@ -121,13 +124,22 @@ + #ifdef VA_FOURCC_Y210 + MAP(Y210, YUV422_10, Y210, 0), + #endif ++#ifdef VA_FOURCC_Y212 ++ MAP(Y212, YUV422_12, Y212, 0), ++#endif + MAP(411P, YUV411, YUV411P, 0), + MAP(422V, YUV422, YUV440P, 0), + MAP(444P, YUV444, YUV444P, 0), ++#ifdef VA_FOURCC_XYUV ++ MAP(XYUV, YUV444, VUYX, 0), ++#endif + MAP(Y800, YUV400, GRAY8, 0), + #ifdef VA_FOURCC_P010 + MAP(P010, YUV420_10BPP, P010, 0), + #endif ++#ifdef VA_FOURCC_P012 ++ MAP(P012, YUV420_12, P012, 0), ++#endif + MAP(BGRA, RGB32, BGRA, 0), + MAP(BGRX, RGB32, BGR0, 0), + MAP(RGBA, RGB32, RGBA, 0), +@@ -141,6 +153,16 @@ + #ifdef VA_FOURCC_X2R10G10B10 + MAP(X2R10G10B10, RGB32_10, X2RGB10, 0), + #endif ++#ifdef VA_FOURCC_Y410 ++ // libva doesn't include a fourcc for XV30 and the driver only declares ++ // support for Y410, so we must fudge the mapping here. ++ MAP(Y410, YUV444_10, XV30, 0), ++#endif ++#ifdef VA_FOURCC_Y412 ++ // libva doesn't include a fourcc for XV36 and the driver only declares ++ // support for Y412, so we must fudge the mapping here. ++ MAP(Y412, YUV444_12, XV36, 0), ++#endif + }; + #undef MAP + +@@ -466,7 +488,7 @@ + } + } + +-static AVBufferRef *vaapi_pool_alloc(void *opaque, buffer_size_t size) ++static AVBufferRef *vaapi_pool_alloc(void *opaque, size_t size) + { + AVHWFramesContext *hwfc = opaque; + VAAPIFramesContext *ctx = hwfc->internal->priv; +@@ -991,11 +1013,15 @@ + } vaapi_drm_format_map[] = { + #ifdef DRM_FORMAT_R8 + DRM_MAP(NV12, 2, DRM_FORMAT_R8, DRM_FORMAT_RG88), ++ DRM_MAP(NV12, 2, DRM_FORMAT_R8, DRM_FORMAT_GR88), + #endif + DRM_MAP(NV12, 1, DRM_FORMAT_NV12), + #if defined(VA_FOURCC_P010) && defined(DRM_FORMAT_R16) + DRM_MAP(P010, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), + #endif ++#if defined(VA_FOURCC_P012) && defined(DRM_FORMAT_R16) ++ DRM_MAP(P012, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), ++#endif + DRM_MAP(BGRA, 1, DRM_FORMAT_ARGB8888), + DRM_MAP(BGRX, 1, DRM_FORMAT_XRGB8888), + DRM_MAP(RGBA, 1, DRM_FORMAT_ABGR8888), +@@ -1006,6 +1032,15 @@ + #endif + DRM_MAP(ARGB, 1, DRM_FORMAT_BGRA8888), + DRM_MAP(XRGB, 1, DRM_FORMAT_BGRX8888), ++#if defined(VA_FOURCC_XYUV) && defined(DRM_FORMAT_XYUV8888) ++ DRM_MAP(XYUV, 1, DRM_FORMAT_XYUV8888), ++#endif ++#if defined(VA_FOURCC_Y412) && defined(DRM_FORMAT_XVYU2101010) ++ DRM_MAP(Y410, 1, DRM_FORMAT_XVYU2101010), ++#endif ++#if defined(VA_FOURCC_Y412) && defined(DRM_FORMAT_XVYU12_16161616) ++ DRM_MAP(Y412, 1, DRM_FORMAT_XVYU12_16161616), ++#endif + }; + #undef DRM_MAP + +@@ -1024,16 +1059,23 @@ + static int vaapi_map_from_drm(AVHWFramesContext *src_fc, AVFrame *dst, + const AVFrame *src, int flags) + { ++#if VA_CHECK_VERSION(1, 1, 0) ++ VAAPIFramesContext *src_vafc = src_fc->internal->priv; ++ int use_prime2; ++#else ++ int k; ++#endif + AVHWFramesContext *dst_fc = + (AVHWFramesContext*)dst->hw_frames_ctx->data; + AVVAAPIDeviceContext *dst_dev = dst_fc->device_ctx->hwctx; + const AVDRMFrameDescriptor *desc; + const VAAPIFormatDescriptor *format_desc; + VASurfaceID surface_id; +- VAStatus vas; ++ VAStatus vas = VA_STATUS_SUCCESS; + uint32_t va_fourcc; +- int err, i, j, k; ++ int err, i, j; + ++#if !VA_CHECK_VERSION(1, 1, 0) + unsigned long buffer_handle; + VASurfaceAttribExternalBuffers buffer_desc; + VASurfaceAttrib attrs[2] = { +@@ -1050,6 +1092,7 @@ + .value.value.p = &buffer_desc, + } + }; ++#endif + + desc = (AVDRMFrameDescriptor*)src->data[0]; + +@@ -1085,6 +1128,119 @@ + format_desc = vaapi_format_from_fourcc(va_fourcc); + av_assert0(format_desc); + ++#if VA_CHECK_VERSION(1, 1, 0) ++ use_prime2 = !src_vafc->prime_2_import_unsupported && ++ desc->objects[0].format_modifier != DRM_FORMAT_MOD_INVALID; ++ if (use_prime2) { ++ VADRMPRIMESurfaceDescriptor prime_desc; ++ VASurfaceAttrib prime_attrs[2] = { ++ { ++ .type = VASurfaceAttribMemoryType, ++ .flags = VA_SURFACE_ATTRIB_SETTABLE, ++ .value.type = VAGenericValueTypeInteger, ++ .value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2, ++ }, ++ { ++ .type = VASurfaceAttribExternalBufferDescriptor, ++ .flags = VA_SURFACE_ATTRIB_SETTABLE, ++ .value.type = VAGenericValueTypePointer, ++ .value.value.p = &prime_desc, ++ } ++ }; ++ prime_desc.fourcc = va_fourcc; ++ prime_desc.width = src_fc->width; ++ prime_desc.height = src_fc->height; ++ prime_desc.num_objects = desc->nb_objects; ++ for (i = 0; i < desc->nb_objects; ++i) { ++ prime_desc.objects[i].fd = desc->objects[i].fd; ++ prime_desc.objects[i].size = desc->objects[i].size; ++ prime_desc.objects[i].drm_format_modifier = ++ desc->objects[i].format_modifier; ++ } ++ ++ prime_desc.num_layers = desc->nb_layers; ++ for (i = 0; i < desc->nb_layers; ++i) { ++ prime_desc.layers[i].drm_format = desc->layers[i].format; ++ prime_desc.layers[i].num_planes = desc->layers[i].nb_planes; ++ for (j = 0; j < desc->layers[i].nb_planes; ++j) { ++ prime_desc.layers[i].object_index[j] = ++ desc->layers[i].planes[j].object_index; ++ prime_desc.layers[i].offset[j] = desc->layers[i].planes[j].offset; ++ prime_desc.layers[i].pitch[j] = desc->layers[i].planes[j].pitch; ++ } ++ ++ if (format_desc->chroma_planes_swapped && ++ desc->layers[i].nb_planes == 3) { ++ FFSWAP(uint32_t, prime_desc.layers[i].pitch[1], ++ prime_desc.layers[i].pitch[2]); ++ FFSWAP(uint32_t, prime_desc.layers[i].offset[1], ++ prime_desc.layers[i].offset[2]); ++ } ++ } ++ ++ /* ++ * We can query for PRIME_2 support with vaQuerySurfaceAttributes, but that ++ * that needs the config_id which we don't have here . Both Intel and ++ * Gallium seem to do the correct error checks, so lets just try the ++ * PRIME_2 import first. ++ */ ++ vas = vaCreateSurfaces(dst_dev->display, format_desc->rt_format, ++ src->width, src->height, &surface_id, 1, ++ prime_attrs, FF_ARRAY_ELEMS(prime_attrs)); ++ if (vas != VA_STATUS_SUCCESS) ++ src_vafc->prime_2_import_unsupported = 1; ++ } ++ ++ if (!use_prime2 || vas != VA_STATUS_SUCCESS) { ++ int k; ++ unsigned long buffer_handle; ++ VASurfaceAttribExternalBuffers buffer_desc; ++ VASurfaceAttrib buffer_attrs[2] = { ++ { ++ .type = VASurfaceAttribMemoryType, ++ .flags = VA_SURFACE_ATTRIB_SETTABLE, ++ .value.type = VAGenericValueTypeInteger, ++ .value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME, ++ }, ++ { ++ .type = VASurfaceAttribExternalBufferDescriptor, ++ .flags = VA_SURFACE_ATTRIB_SETTABLE, ++ .value.type = VAGenericValueTypePointer, ++ .value.value.p = &buffer_desc, ++ } ++ }; ++ ++ buffer_handle = desc->objects[0].fd; ++ buffer_desc.pixel_format = va_fourcc; ++ buffer_desc.width = src_fc->width; ++ buffer_desc.height = src_fc->height; ++ buffer_desc.data_size = desc->objects[0].size; ++ buffer_desc.buffers = &buffer_handle; ++ buffer_desc.num_buffers = 1; ++ buffer_desc.flags = 0; ++ ++ k = 0; ++ for (i = 0; i < desc->nb_layers; i++) { ++ for (j = 0; j < desc->layers[i].nb_planes; j++) { ++ buffer_desc.pitches[k] = desc->layers[i].planes[j].pitch; ++ buffer_desc.offsets[k] = desc->layers[i].planes[j].offset; ++ ++k; ++ } ++ } ++ buffer_desc.num_planes = k; ++ ++ if (format_desc->chroma_planes_swapped && ++ buffer_desc.num_planes == 3) { ++ FFSWAP(uint32_t, buffer_desc.pitches[1], buffer_desc.pitches[2]); ++ FFSWAP(uint32_t, buffer_desc.offsets[1], buffer_desc.offsets[2]); ++ } ++ ++ vas = vaCreateSurfaces(dst_dev->display, format_desc->rt_format, ++ src->width, src->height, ++ &surface_id, 1, ++ buffer_attrs, FF_ARRAY_ELEMS(buffer_attrs)); ++ } ++#else + buffer_handle = desc->objects[0].fd; + buffer_desc.pixel_format = va_fourcc; + buffer_desc.width = src_fc->width; +@@ -1114,6 +1270,7 @@ + src->width, src->height, + &surface_id, 1, + attrs, FF_ARRAY_ELEMS(attrs)); ++#endif + if (vas != VA_STATUS_SUCCESS) { + av_log(dst_fc, AV_LOG_ERROR, "Failed to create surface from DRM " + "object: %d (%s).\n", vas, vaErrorStr(vas)); +@@ -1164,8 +1321,17 @@ + surface_id = (VASurfaceID)(uintptr_t)src->data[3]; + + export_flags = VA_EXPORT_SURFACE_SEPARATE_LAYERS; +- if (flags & AV_HWFRAME_MAP_READ) ++ if (flags & AV_HWFRAME_MAP_READ) { + export_flags |= VA_EXPORT_SURFACE_READ_ONLY; ++ ++ vas = vaSyncSurface(hwctx->display, surface_id); ++ if (vas != VA_STATUS_SUCCESS) { ++ av_log(hwfc, AV_LOG_ERROR, "Failed to sync surface " ++ "%#x: %d (%s).\n", surface_id, vas, vaErrorStr(vas)); ++ return AVERROR(EIO); ++ } ++ } ++ + if (flags & AV_HWFRAME_MAP_WRITE) + export_flags |= VA_EXPORT_SURFACE_WRITE_ONLY; + +@@ -1356,7 +1522,7 @@ + goto fail_derived; + } + +- av_log(hwfc, AV_LOG_DEBUG, "DRM PRIME fd is %ld.\n", ++ av_log(hwfc, AV_LOG_DEBUG, "DRM PRIME fd is %"PRIdPTR".\n", + mapping->buffer_info.handle); + + mapping->drm_desc.nb_objects = 1; +@@ -1545,6 +1711,7 @@ + char path[64]; + int n, max_devices = 8; + #if CONFIG_LIBDRM ++ drmVersion *info; + const AVDictionaryEntry *kernel_driver; + kernel_driver = av_dict_get(opts, "kernel_driver", NULL, 0); + #endif +@@ -1558,9 +1725,15 @@ + break; + } + #if CONFIG_LIBDRM ++ info = drmGetVersion(priv->drm_fd); ++ if (!info) { ++ av_log(ctx, AV_LOG_VERBOSE, ++ "Failed to get DRM version for device %d.\n", n); ++ close(priv->drm_fd); ++ priv->drm_fd = -1; ++ continue; ++ } + if (kernel_driver) { +- drmVersion *info; +- info = drmGetVersion(priv->drm_fd); + if (strcmp(kernel_driver->value, info->name)) { + av_log(ctx, AV_LOG_VERBOSE, "Ignoring device %d " + "with non-matching kernel driver (%s).\n", +@@ -1575,12 +1748,20 @@ + "with matching kernel driver (%s).\n", + n, info->name); + drmFreeVersion(info); +- } else +-#endif +- { +- av_log(ctx, AV_LOG_VERBOSE, "Trying to use " +- "DRM render node for device %d.\n", n); ++ break; ++ // drmGetVersion() ensures |info->name| is 0-terminated. ++ } else if (!strcmp(info->name, "vgem")) { ++ av_log(ctx, AV_LOG_VERBOSE, ++ "Skipping vgem node for device %d.\n", n); ++ drmFreeVersion(info); ++ close(priv->drm_fd); ++ priv->drm_fd = -1; ++ continue; + } ++ drmFreeVersion(info); ++#endif ++ av_log(ctx, AV_LOG_VERBOSE, "Trying to use " ++ "DRM render node for device %d.\n", n); + break; + } + if (n >= max_devices) +diff -Naur a/media/ffvpx/libavutil/imgutils.c b/media/ffvpx/libavutil/imgutils.c +--- a/media/ffvpx/libavutil/imgutils.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/imgutils.c 2023-04-06 12:49:40.260395172 +0200 +@@ -123,8 +123,7 @@ + return AVERROR(EINVAL); + sizes[0] = linesizes[0] * (size_t)height; + +- if (desc->flags & AV_PIX_FMT_FLAG_PAL || +- desc->flags & FF_PSEUDOPAL) { ++ if (desc->flags & AV_PIX_FMT_FLAG_PAL) { + sizes[1] = 256 * 4; /* palette is stored here as 256 32 bits words */ + return 0; + } +@@ -166,6 +165,9 @@ + ret += sizes[i]; + } + ++ if (!ptr) ++ return ret; ++ + data[0] = ptr; + for (i = 1; i < 4 && sizes[i]; i++) + data[i] = data[i - 1] + sizes[i - 1]; +@@ -250,7 +252,7 @@ + av_free(buf); + return ret; + } +- if (desc->flags & AV_PIX_FMT_FLAG_PAL || (desc->flags & FF_PSEUDOPAL && pointers[1])) { ++ if (desc->flags & AV_PIX_FMT_FLAG_PAL) { + avpriv_set_systematic_pal2((uint32_t*)pointers[1], pix_fmt); + if (align < 4) { + av_log(NULL, AV_LOG_ERROR, "Formats with a palette require a minimum alignment of 4\n"); +@@ -259,8 +261,7 @@ + } + } + +- if ((desc->flags & AV_PIX_FMT_FLAG_PAL || +- desc->flags & FF_PSEUDOPAL) && pointers[1] && ++ if (desc->flags & AV_PIX_FMT_FLAG_PAL && pointers[1] && + pointers[1] - pointers[0] > linesizes[0] * h) { + /* zero-initialize the padding before the palette */ + memset(pointers[0] + linesizes[0] * h, 0, +@@ -355,9 +356,9 @@ + } + } + +-static void image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, +- const uint8_t *src, ptrdiff_t src_linesize, +- ptrdiff_t bytewidth, int height) ++void av_image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, ++ const uint8_t *src, ptrdiff_t src_linesize, ++ ptrdiff_t bytewidth, int height) + { + int ret = -1; + +@@ -388,8 +389,7 @@ + if (!desc || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) + return; + +- if (desc->flags & AV_PIX_FMT_FLAG_PAL || +- desc->flags & FF_PSEUDOPAL) { ++ if (desc->flags & AV_PIX_FMT_FLAG_PAL) { + copy_plane(dst_data[0], dst_linesizes[0], + src_data[0], src_linesizes[0], + width, height); +@@ -440,7 +440,7 @@ + enum AVPixelFormat pix_fmt, int width, int height) + { + image_copy(dst_data, dst_linesizes, src_data, src_linesizes, pix_fmt, +- width, height, image_copy_plane_uc_from); ++ width, height, av_image_copy_plane_uc_from); + } + + int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], +@@ -478,10 +478,6 @@ + if (ret < 0) + return ret; + +- // do not include palette for these pseudo-paletted formats +- if (desc->flags & FF_PSEUDOPAL) +- return FFALIGN(width, align) * height; +- + ret = av_image_fill_linesizes(linesize, pix_fmt, width); + if (ret < 0) + return ret; +diff -Naur a/media/ffvpx/libavutil/imgutils.h b/media/ffvpx/libavutil/imgutils.h +--- a/media/ffvpx/libavutil/imgutils.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/imgutils.h 2023-04-06 12:50:06.976471255 +0200 +@@ -27,8 +27,10 @@ + * @{ + */ + +-#include "avutil.h" ++#include ++#include + #include "pixdesc.h" ++#include "pixfmt.h" + #include "rational.h" + + /** +@@ -46,6 +48,7 @@ + * component in the plane with the max pixel step. + * @param max_pixstep_comps an array which is filled with the component + * for each plane which has the max pixel step. May be NULL. ++ * @param pixdesc the AVPixFmtDescriptor for the image, describing its format + */ + void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], + const AVPixFmtDescriptor *pixdesc); +@@ -63,6 +66,8 @@ + * width width. + * + * @param linesizes array to be filled with the linesize for each plane ++ * @param pix_fmt the AVPixelFormat of the image ++ * @param width width of the image in pixels + * @return >= 0 in case of success, a negative error code otherwise + */ + int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); +@@ -71,6 +76,8 @@ + * Fill plane sizes for an image with pixel format pix_fmt and height height. + * + * @param size the array to be filled with the size of each image plane ++ * @param pix_fmt the AVPixelFormat of the image ++ * @param height height of the image in pixels + * @param linesizes the array containing the linesize for each + * plane, should be filled by av_image_fill_linesizes() + * @return >= 0 in case of success, a negative error code otherwise +@@ -86,6 +93,8 @@ + * height height. + * + * @param data pointers array to be filled with the pointer for each image plane ++ * @param pix_fmt the AVPixelFormat of the image ++ * @param height height of the image in pixels + * @param ptr the pointer to a buffer which will contain the image + * @param linesizes the array containing the linesize for each + * plane, should be filled by av_image_fill_linesizes() +@@ -101,6 +110,11 @@ + * The allocated image buffer has to be freed by using + * av_freep(&pointers[0]). + * ++ * @param pointers array to be filled with the pointer for each image plane ++ * @param linesizes the array filled with the linesize for each plane ++ * @param w width of the image in pixels ++ * @param h height of the image in pixels ++ * @param pix_fmt the AVPixelFormat of the image + * @param align the value to use for buffer size alignment + * @return the size in bytes required for the image buffer, a negative + * error code in case of failure +@@ -117,18 +131,44 @@ + * bytewidth must be contained by both absolute values of dst_linesize + * and src_linesize, otherwise the function behavior is undefined. + * ++ * @param dst destination plane to copy to + * @param dst_linesize linesize for the image plane in dst ++ * @param src source plane to copy from + * @param src_linesize linesize for the image plane in src ++ * @param height height (number of lines) of the plane + */ + void av_image_copy_plane(uint8_t *dst, int dst_linesize, + const uint8_t *src, int src_linesize, + int bytewidth, int height); + + /** ++ * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where ++ * available, this function will use special functionality for reading from such ++ * memory, which may result in greatly improved performance compared to plain ++ * av_image_copy_plane(). ++ * ++ * bytewidth must be contained by both absolute values of dst_linesize ++ * and src_linesize, otherwise the function behavior is undefined. ++ * ++ * @note The linesize parameters have the type ptrdiff_t here, while they are ++ * int for av_image_copy_plane(). ++ * @note On x86, the linesizes currently need to be aligned to the cacheline ++ * size (i.e. 64) to get improved performance. ++ */ ++void av_image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, ++ const uint8_t *src, ptrdiff_t src_linesize, ++ ptrdiff_t bytewidth, int height); ++ ++/** + * Copy image in src_data to dst_data. + * ++ * @param dst_data destination image data buffer to copy to + * @param dst_linesizes linesizes for the image in dst_data ++ * @param src_data source image data buffer to copy from + * @param src_linesizes linesizes for the image in src_data ++ * @param pix_fmt the AVPixelFormat of the image ++ * @param width width of the image in pixels ++ * @param height height of the image in pixels + */ + void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], + const uint8_t *src_data[4], const int src_linesizes[4], +diff -Naur a/media/ffvpx/libavutil/integer.c b/media/ffvpx/libavutil/integer.c +--- a/media/ffvpx/libavutil/integer.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/integer.c 2023-04-06 12:50:06.976471255 +0200 +@@ -25,9 +25,11 @@ + * @author Michael Niedermayer + */ + +-#include "common.h" ++#include ++ + #include "integer.h" + #include "avassert.h" ++#include "intmath.h" + + static const AVInteger zero_i; + +@@ -101,8 +103,8 @@ + for(i=0; i>4); + unsigned int v=0; +- if(index+1> (s&15); + } + return out; +@@ -156,11 +158,9 @@ + } + + int64_t av_i2int(AVInteger a){ +- int i; +- int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1]; ++ uint64_t out = a.v[3]; + +- for(i= AV_INTEGER_SIZE-2; i>=0; i--){ +- out = (out<<16) + a.v[i]; +- } ++ for (int i = 2; i >= 0; i--) ++ out = (out << 16) | a.v[i]; + return out; + } +diff -Naur a/media/ffvpx/libavutil/integer.h b/media/ffvpx/libavutil/integer.h +--- a/media/ffvpx/libavutil/integer.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/integer.h 2023-04-06 12:49:40.261395212 +0200 +@@ -29,7 +29,7 @@ + #define AVUTIL_INTEGER_H + + #include +-#include "common.h" ++#include "attributes.h" + + #define AV_INTEGER_SIZE 8 + +diff -Naur a/media/ffvpx/libavutil/internal.h b/media/ffvpx/libavutil/internal.h +--- a/media/ffvpx/libavutil/internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/internal.h 2023-04-06 12:50:06.976471255 +0200 +@@ -37,14 +37,12 @@ + #include + #include + #include ++#include + #include "config.h" + #include "attributes.h" + #include "timer.h" +-#include "cpu.h" +-#include "dict.h" + #include "macros.h" + #include "pixfmt.h" +-#include "version.h" + + #if ARCH_X86 + # include "x86/emms.h" +@@ -87,10 +85,6 @@ + + #define FF_MEMORY_POISON 0x2a + +-#define MAKE_ACCESSORS(str, name, type, field) \ +- type av_##name##_get_##field(const str *s) { return s->field; } \ +- void av_##name##_set_##field(str *s, type v) { s->field = v; } +- + /* Check if the hard coded offset of a struct member still matches reality. + * Induce a compilation failure if not. + */ +@@ -100,16 +94,20 @@ + + + #define FF_ALLOC_TYPED_ARRAY(p, nelem) (p = av_malloc_array(nelem, sizeof(*p))) +-#define FF_ALLOCZ_TYPED_ARRAY(p, nelem) (p = av_mallocz_array(nelem, sizeof(*p))) ++#define FF_ALLOCZ_TYPED_ARRAY(p, nelem) (p = av_calloc(nelem, sizeof(*p))) + + #define FF_PTR_ADD(ptr, off) ((off) ? (ptr) + (off) : (ptr)) + ++/** ++ * Access a field in a structure by its offset. ++ */ ++#define FF_FIELD_AT(type, off, obj) (*(type *)((char *)&(obj) + (off))) ++ + #include "libm.h" + + /** + * Return NULL if CONFIG_SMALL is true, otherwise the argument +- * without modification. Used to disable the definition of strings +- * (for example AVCodec long_names). ++ * without modification. Used to disable the definition of strings. + */ + #if CONFIG_SMALL + # define NULL_IF_CONFIG_SMALL(x) NULL +@@ -118,45 +116,6 @@ + #endif + + /** +- * Define a function with only the non-default version specified. +- * +- * On systems with ELF shared libraries, all symbols exported from +- * FFmpeg libraries are tagged with the name and major version of the +- * library to which they belong. If a function is moved from one +- * library to another, a wrapper must be retained in the original +- * location to preserve binary compatibility. +- * +- * Functions defined with this macro will never be used to resolve +- * symbols by the build-time linker. +- * +- * @param type return type of function +- * @param name name of function +- * @param args argument list of function +- * @param ver version tag to assign function +- */ +-#if HAVE_SYMVER_ASM_LABEL +-# define FF_SYMVER(type, name, args, ver) \ +- type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver); \ +- type ff_##name args +-#elif HAVE_SYMVER_GNU_ASM +-# define FF_SYMVER(type, name, args, ver) \ +- __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver); \ +- type ff_##name args; \ +- type ff_##name args +-#endif +- +-/** +- * Return NULL if a threading library has not been enabled. +- * Used to disable threading functions in AVCodec definitions +- * when not needed. +- */ +-#if HAVE_THREADS +-# define ONLY_IF_THREADS_ENABLED(x) x +-#else +-# define ONLY_IF_THREADS_ENABLED(x) NULL +-#endif +- +-/** + * Log a generic warning message about a missing feature. + * + * @param[in] avc a pointer to an arbitrary struct of which the first +@@ -184,8 +143,6 @@ + #pragma comment(linker, "/include:" EXTERN_PREFIX "avpriv_snprintf") + #endif + +-#define avpriv_open ff_open +-#define avpriv_tempfile ff_tempfile + #define PTRDIFF_SPECIFIER "Id" + #define SIZE_SPECIFIER "Iu" + #else +@@ -199,6 +156,12 @@ + # define ff_dlog(ctx, ...) do { if (0) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) + #endif + ++#ifdef TRACE ++# define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__) ++#else ++# define ff_tlog(ctx, ...) do { } while(0) ++#endif ++ + // For debuging we use signed operations so overflows can be detected (by ubsan) + // For production we use unsigned so there are no undefined operations + #ifdef CHECKED +@@ -209,61 +172,6 @@ + #define SUINT32 uint32_t + #endif + +-/** +- * Clip and convert a double value into the long long amin-amax range. +- * This function is needed because conversion of floating point to integers when +- * it does not fit in the integer's representation does not necessarily saturate +- * correctly (usually converted to a cvttsd2si on x86) which saturates numbers +- * > INT64_MAX to INT64_MIN. The standard marks such conversions as undefined +- * behavior, allowing this sort of mathematically bogus conversions. This provides +- * a safe alternative that is slower obviously but assures safety and better +- * mathematical behavior. +- * @param a value to clip +- * @param amin minimum value of the clip range +- * @param amax maximum value of the clip range +- * @return clipped value +- */ +-static av_always_inline av_const int64_t ff_rint64_clip(double a, int64_t amin, int64_t amax) +-{ +- int64_t res; +-#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 +- if (amin > amax) abort(); +-#endif +- // INT64_MAX+1,INT64_MIN are exactly representable as IEEE doubles +- // do range checks first +- if (a >= 9223372036854775808.0) +- return amax; +- if (a <= -9223372036854775808.0) +- return amin; +- +- // safe to call llrint and clip accordingly +- res = llrint(a); +- if (res > amax) +- return amax; +- if (res < amin) +- return amin; +- return res; +-} +- +-/** +- * A wrapper for open() setting O_CLOEXEC. +- */ +-av_warn_unused_result +-int avpriv_open(const char *filename, int flags, ...); +- +-/** +- * Wrapper to work around the lack of mkstemp() on mingw. +- * Also, tries to create file in /tmp first, if possible. +- * *prefix can be a character constant; *filename will be allocated internally. +- * @return file descriptor of opened file (or negative value corresponding to an +- * AVERROR code on error) +- * and opened file name in **filename. +- * @note On very old libcs it is necessary to set a secure umask before +- * calling this, av_tempfile() can't call umask itself as it is used in +- * libraries and could interfere with the calling application. +- */ +-int avpriv_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); +- + int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt); + + static av_always_inline av_const int avpriv_mirror(int x, int w) +@@ -279,33 +187,4 @@ + return x; + } + +-void ff_check_pixfmt_descriptors(void); +- +-/** +- * Set a dictionary value to an ISO-8601 compliant timestamp string. +- * +- * @param dict pointer to a pointer to a dictionary struct. If *dict is NULL +- * a dictionary struct is allocated and put in *dict. +- * @param key metadata key +- * @param timestamp unix timestamp in microseconds +- * @return <0 on error +- */ +-int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp); +- +-// Helper macro for AV_PIX_FMT_FLAG_PSEUDOPAL deprecation. Code inside FFmpeg +-// should always use FF_PSEUDOPAL. Once the public API flag gets removed, all +-// code using it is dead code. +-#if FF_API_PSEUDOPAL +-#define FF_PSEUDOPAL AV_PIX_FMT_FLAG_PSEUDOPAL +-#else +-#define FF_PSEUDOPAL 0 +-#endif +- +-// Temporary typedef to simplify porting all AVBufferRef users to size_t +-#if FF_API_BUFFER_SIZE_T +-typedef int buffer_size_t; +-#else +-typedef size_t buffer_size_t; +-#endif +- + #endif /* AVUTIL_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavutil/intmath.h b/media/ffvpx/libavutil/intmath.h +--- a/media/ffvpx/libavutil/intmath.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/intmath.h 2023-04-06 12:50:06.976471255 +0200 +@@ -28,8 +28,9 @@ + + #if ARCH_ARM + # include "arm/intmath.h" +-#endif +-#if ARCH_X86 ++#elif ARCH_RISCV ++# include "riscv/intmath.h" ++#elif ARCH_X86 + # include "x86/intmath.h" + #endif + +diff -Naur a/media/ffvpx/libavutil/lls.c b/media/ffvpx/libavutil/lls.c +--- a/media/ffvpx/libavutil/lls.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/lls.c 2023-04-06 12:49:40.261395212 +0200 +@@ -28,9 +28,8 @@ + #include + #include + ++#include "config.h" + #include "attributes.h" +-#include "internal.h" +-#include "version.h" + #include "lls.h" + + static void update_lls(LLSModel *m, const double *var) +@@ -118,6 +117,7 @@ + m->indep_count = indep_count; + m->update_lls = update_lls; + m->evaluate_lls = evaluate_lls; +- if (ARCH_X86) +- ff_init_lls_x86(m); ++#if ARCH_X86 ++ ff_init_lls_x86(m); ++#endif + } +diff -Naur a/media/ffvpx/libavutil/lls.h b/media/ffvpx/libavutil/lls.h +--- a/media/ffvpx/libavutil/lls.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/lls.h 2023-04-06 12:49:40.261395212 +0200 +@@ -25,7 +25,6 @@ + + #include "macros.h" + #include "mem_internal.h" +-#include "version.h" + + #define MAX_VARS 32 + #define MAX_VARS_ALIGN FFALIGN(MAX_VARS+1,4) +diff -Naur a/media/ffvpx/libavutil/log.c b/media/ffvpx/libavutil/log.c +--- a/media/ffvpx/libavutil/log.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/log.c 2023-04-06 12:49:40.261395212 +0200 +@@ -32,9 +32,11 @@ + #if HAVE_IO_H + #include + #endif ++#include + #include ++#include + #include +-#include "avutil.h" ++#include + #include "bprint.h" + #include "common.h" + #include "internal.h" +diff -Naur a/media/ffvpx/libavutil/log.h b/media/ffvpx/libavutil/log.h +--- a/media/ffvpx/libavutil/log.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/log.h 2023-04-06 12:49:40.261395212 +0200 +@@ -22,7 +22,6 @@ + #define AVUTIL_LOG_H + + #include +-#include "avutil.h" + #include "attributes.h" + #include "version.h" + +@@ -108,24 +107,6 @@ + int parent_log_context_offset; + + /** +- * Return next AVOptions-enabled child or NULL +- */ +- void* (*child_next)(void *obj, void *prev); +- +-#if FF_API_CHILD_CLASS_NEXT +- /** +- * Return an AVClass corresponding to the next potential +- * AVOptions-enabled child. +- * +- * The difference between child_next and this is that +- * child_next iterates over _already existing_ objects, while +- * child_class_next iterates over _all possible_ children. +- */ +- attribute_deprecated +- const struct AVClass* (*child_class_next)(const struct AVClass *prev); +-#endif +- +- /** + * Category used for visualization (like color) + * This is only set if the category is equal for all objects using this class. + * available since version (51 << 16 | 56 << 8 | 100) +@@ -145,6 +126,11 @@ + int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); + + /** ++ * Return next AVOptions-enabled child or NULL ++ */ ++ void* (*child_next)(void *obj, void *prev); ++ ++ /** + * Iterate over the AVClasses corresponding to potential AVOptions-enabled + * children. + * +diff -Naur a/media/ffvpx/libavutil/macros.h b/media/ffvpx/libavutil/macros.h +--- a/media/ffvpx/libavutil/macros.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/macros.h 2023-04-06 12:49:40.261395212 +0200 +@@ -25,6 +25,36 @@ + #ifndef AVUTIL_MACROS_H + #define AVUTIL_MACROS_H + ++#include "libavutil/avconfig.h" ++ ++#if AV_HAVE_BIGENDIAN ++# define AV_NE(be, le) (be) ++#else ++# define AV_NE(be, le) (le) ++#endif ++ ++/** ++ * Comparator. ++ * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 ++ * if x == y. This is useful for instance in a qsort comparator callback. ++ * Furthermore, compilers are able to optimize this to branchless code, and ++ * there is no risk of overflow with signed types. ++ * As with many macros, this evaluates its argument multiple times, it thus ++ * must not have a side-effect. ++ */ ++#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) ++ ++#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) ++#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) ++#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) ++#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) ++ ++#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) ++#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) ++ ++#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) ++#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) ++ + /** + * @addtogroup preproc_misc Preprocessor String Macros + * +diff -Naur a/media/ffvpx/libavutil/mathematics.c b/media/ffvpx/libavutil/mathematics.c +--- a/media/ffvpx/libavutil/mathematics.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/mathematics.c 2023-04-06 12:49:40.261395212 +0200 +@@ -26,11 +26,11 @@ + #include + #include + ++#include "avutil.h" + #include "mathematics.h" + #include "libavutil/intmath.h" + #include "libavutil/common.h" + #include "avassert.h" +-#include "version.h" + + /* Stein's binary GCD algorithm: + * https://en.wikipedia.org/wiki/Binary_GCD_algorithm */ +diff -Naur a/media/ffvpx/libavutil/mathematics.h b/media/ffvpx/libavutil/mathematics.h +--- a/media/ffvpx/libavutil/mathematics.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/mathematics.h 2023-04-06 12:50:06.976471255 +0200 +@@ -111,7 +111,8 @@ + /** + * Compute the greatest common divisor of two integer operands. + * +- * @param a,b Operands ++ * @param a Operand ++ * @param b Operand + * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; + * if a == 0 and b == 0, returns 0. + */ +@@ -186,7 +187,8 @@ + * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) + * @endcode + * +- * @param a,b Operands ++ * @param a Operand ++ * @param b Operand + * @param mod Divisor; must be a power of 2 + * @return + * - a negative value if `a % mod < b % mod` +diff -Naur a/media/ffvpx/libavutil/mem.c b/media/ffvpx/libavutil/mem.c +--- a/media/ffvpx/libavutil/mem.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/mem.c 2023-04-06 12:50:24.494176623 +0200 +@@ -31,16 +31,19 @@ + #include + #include + #include ++#include + #include + #if HAVE_MALLOC_H + #include + #endif + ++#include "attributes.h" + #include "avassert.h" +-#include "avutil.h" +-#include "common.h" + #include "dynarray.h" ++#include "error.h" ++#include "internal.h" + #include "intreadwrite.h" ++#include "macros.h" + #include "mem.h" + + #ifdef MALLOC_PREFIX +@@ -59,8 +62,6 @@ + + #endif /* MALLOC_PREFIX */ + +-#include "mem_internal.h" +- + #define ALIGN (HAVE_AVX512 ? 64 : (HAVE_AVX ? 32 : 16)) + + /* NOTE: if you want to override these functions with your own +@@ -68,17 +69,35 @@ + * dynamic libraries and remove -Wl,-Bsymbolic from the linker flags. + * Note that this will cost performance. */ + +-static size_t max_alloc_size= INT_MAX; ++static atomic_size_t max_alloc_size = ATOMIC_VAR_INIT(INT_MAX); + + void av_max_alloc(size_t max){ +- max_alloc_size = max; ++ atomic_store_explicit(&max_alloc_size, max, memory_order_relaxed); ++} ++ ++static int size_mult(size_t a, size_t b, size_t *r) ++{ ++ size_t t; ++ ++#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_mul_overflow) ++ if (__builtin_mul_overflow(a, b, &t)) ++ return AVERROR(EINVAL); ++#else ++ t = a * b; ++ /* Hack inspired from glibc: don't try the division if nelem and elsize ++ * are both less than sqrt(SIZE_MAX). */ ++ if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) ++ return AVERROR(EINVAL); ++#endif ++ *r = t; ++ return 0; + } + + void *av_malloc(size_t size) + { + void *ptr = NULL; + +- if (size > max_alloc_size) ++ if (size > atomic_load_explicit(&max_alloc_size, memory_order_relaxed)) + return NULL; + + #if HAVE_POSIX_MEMALIGN +@@ -133,14 +152,20 @@ + + void *av_realloc(void *ptr, size_t size) + { +- if (size > max_alloc_size) ++ void *ret; ++ if (size > atomic_load_explicit(&max_alloc_size, memory_order_relaxed)) + return NULL; + + #if HAVE_ALIGNED_MALLOC +- return _aligned_realloc(ptr, size + !size, ALIGN); ++ ret = _aligned_realloc(ptr, size + !size, ALIGN); + #else +- return realloc(ptr, size + !size); ++ ret = realloc(ptr, size + !size); ++#endif ++#if CONFIG_MEMORY_POISONING ++ if (ret && !ptr) ++ memset(ret, FF_MEMORY_POISON, size); + #endif ++ return ret; + } + + void *av_realloc_f(void *ptr, size_t nelem, size_t elsize) +@@ -148,7 +173,7 @@ + size_t size; + void *r; + +- if (av_size_mult(elsize, nelem, &size)) { ++ if (size_mult(elsize, nelem, &size)) { + av_free(ptr); + return NULL; + } +@@ -182,23 +207,15 @@ + void *av_malloc_array(size_t nmemb, size_t size) + { + size_t result; +- if (av_size_mult(nmemb, size, &result) < 0) ++ if (size_mult(nmemb, size, &result) < 0) + return NULL; + return av_malloc(result); + } + +-void *av_mallocz_array(size_t nmemb, size_t size) +-{ +- size_t result; +- if (av_size_mult(nmemb, size, &result) < 0) +- return NULL; +- return av_mallocz(result); +-} +- + void *av_realloc_array(void *ptr, size_t nmemb, size_t size) + { + size_t result; +- if (av_size_mult(nmemb, size, &result) < 0) ++ if (size_mult(nmemb, size, &result) < 0) + return NULL; + return av_realloc(ptr, result); + } +@@ -245,7 +262,7 @@ + void *av_calloc(size_t nmemb, size_t size) + { + size_t result; +- if (av_size_mult(nmemb, size, &result) < 0) ++ if (size_mult(nmemb, size, &result) < 0) + return NULL; + return av_mallocz(result); + } +@@ -477,15 +494,21 @@ + + void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size) + { ++ size_t max_size; ++ + if (min_size <= *size) + return ptr; + +- if (min_size > max_alloc_size) { ++ max_size = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); ++ /* *size is an unsigned, so the real maximum is <= UINT_MAX. */ ++ max_size = FFMIN(max_size, UINT_MAX); ++ ++ if (min_size > max_size) { + *size = 0; + return NULL; + } + +- min_size = FFMIN(max_alloc_size, FFMAX(min_size + min_size / 16 + 32, min_size)); ++ min_size = FFMIN(max_size, FFMAX(min_size + min_size / 16 + 32, min_size)); + + ptr = av_realloc(ptr, min_size); + /* we could set this to the unmodified min_size but this is safer +@@ -499,12 +522,47 @@ + return ptr; + } + ++static inline void fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc) ++{ ++ size_t max_size; ++ void *val; ++ ++ memcpy(&val, ptr, sizeof(val)); ++ if (min_size <= *size) { ++ av_assert0(val || !min_size); ++ return; ++ } ++ ++ max_size = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); ++ /* *size is an unsigned, so the real maximum is <= UINT_MAX. */ ++ max_size = FFMIN(max_size, UINT_MAX); ++ ++ if (min_size > max_size) { ++ av_freep(ptr); ++ *size = 0; ++ return; ++ } ++ min_size = FFMIN(max_size, FFMAX(min_size + min_size / 16 + 32, min_size)); ++ av_freep(ptr); ++ val = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size); ++ memcpy(ptr, &val, sizeof(val)); ++ if (!val) ++ min_size = 0; ++ *size = min_size; ++ return; ++} ++ + void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size) + { +- ff_fast_malloc(ptr, size, min_size, 0); ++ fast_malloc(ptr, size, min_size, 0); + } + + void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size) + { +- ff_fast_malloc(ptr, size, min_size, 1); ++ fast_malloc(ptr, size, min_size, 1); ++} ++ ++int av_size_mult(size_t a, size_t b, size_t *r) ++{ ++ return size_mult(a, b, r); + } +diff -Naur a/media/ffvpx/libavutil/mem.h b/media/ffvpx/libavutil/mem.h +--- a/media/ffvpx/libavutil/mem.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/mem.h 2023-04-06 12:50:24.494176623 +0200 +@@ -31,7 +31,6 @@ + #include + + #include "attributes.h" +-#include "error.h" + #include "avutil.h" + #include "version.h" + +@@ -52,86 +51,6 @@ + * @{ + */ + +-#if FF_API_DECLARE_ALIGNED +-/** +- * +- * @defgroup lavu_mem_macros Alignment Macros +- * Helper macros for declaring aligned variables. +- * @{ +- */ +- +-/** +- * @def DECLARE_ALIGNED(n,t,v) +- * Declare a variable that is aligned in memory. +- * +- * @code{.c} +- * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; +- * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; +- * +- * // The default-alignment equivalent would be +- * uint16_t aligned_int = 42; +- * uint8_t aligned_array[128]; +- * @endcode +- * +- * @param n Minimum alignment in bytes +- * @param t Type of the variable (or array element) +- * @param v Name of the variable +- */ +- +-/** +- * @def DECLARE_ASM_ALIGNED(n,t,v) +- * Declare an aligned variable appropriate for use in inline assembly code. +- * +- * @code{.c} +- * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); +- * @endcode +- * +- * @param n Minimum alignment in bytes +- * @param t Type of the variable (or array element) +- * @param v Name of the variable +- */ +- +-/** +- * @def DECLARE_ASM_CONST(n,t,v) +- * Declare a static constant aligned variable appropriate for use in inline +- * assembly code. +- * +- * @code{.c} +- * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); +- * @endcode +- * +- * @param n Minimum alignment in bytes +- * @param t Type of the variable (or array element) +- * @param v Name of the variable +- */ +- +-#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) +- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v +- #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v +- #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v +-#elif defined(__DJGPP__) +- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v +- #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v +- #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v +-#elif defined(__GNUC__) || defined(__clang__) +- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v +- #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v +- #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v +-#elif defined(_MSC_VER) +- #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v +- #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v +- #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v +-#else +- #define DECLARE_ALIGNED(n,t,v) t v +- #define DECLARE_ASM_ALIGNED(n,t,v) t v +- #define DECLARE_ASM_CONST(n,t,v) static const t v +-#endif +- +-/** +- * @} +- */ +-#endif +- + /** + * @defgroup lavu_mem_attrs Function Attributes + * Function attributes applicable to memory handling functions. +@@ -238,20 +157,12 @@ + * @see av_mallocz() + * @see av_malloc_array() + */ +-av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size); +- +-/** +- * Non-inlined equivalent of av_mallocz_array(). +- * +- * Created for symmetry with the calloc() C function. +- */ +-void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; ++void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib av_alloc_size(1, 2); + + /** + * Allocate, reallocate, or free a block of memory. + * +- * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is +- * zero, free the memory block pointed to by `ptr`. Otherwise, expand or ++ * If `ptr` is `NULL` and `size` > 0, allocate a new block. Otherwise, expand or + * shrink that block of memory according to `size`. + * + * @param ptr Pointer to a memory block already allocated with +@@ -260,10 +171,11 @@ + * reallocated + * + * @return Pointer to a newly-reallocated block or `NULL` if the block +- * cannot be reallocated or the function is used to free the memory block ++ * cannot be reallocated + * + * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be +- * correctly aligned. ++ * correctly aligned. The returned pointer must be freed after even ++ * if size is zero. + * @see av_fast_realloc() + * @see av_reallocp() + */ +@@ -311,8 +223,7 @@ + /** + * Allocate, reallocate, or free an array. + * +- * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If +- * `nmemb` is zero, free the memory block pointed to by `ptr`. ++ * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. + * + * @param ptr Pointer to a memory block already allocated with + * av_realloc() or `NULL` +@@ -320,19 +231,19 @@ + * @param size Size of the single element of the array + * + * @return Pointer to a newly-reallocated block or NULL if the block +- * cannot be reallocated or the function is used to free the memory block ++ * cannot be reallocated + * + * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be +- * correctly aligned. ++ * correctly aligned. The returned pointer must be freed after even if ++ * nmemb is zero. + * @see av_reallocp_array() + */ + av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); + + /** +- * Allocate, reallocate, or free an array through a pointer to a pointer. ++ * Allocate, reallocate an array through a pointer to a pointer. + * +- * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is +- * zero, free the memory block pointed to by `*ptr`. ++ * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. + * + * @param[in,out] ptr Pointer to a pointer to a memory block already + * allocated with av_realloc(), or a pointer to `NULL`. +@@ -343,7 +254,7 @@ + * @return Zero on success, an AVERROR error code on failure + * + * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be +- * correctly aligned. ++ * correctly aligned. *ptr must be freed after even if nmemb is zero. + */ + int av_reallocp_array(void *ptr, size_t nmemb, size_t size); + +@@ -668,20 +579,12 @@ + /** + * Multiply two `size_t` values checking for overflow. + * +- * @param[in] a,b Operands of multiplication ++ * @param[in] a Operand of multiplication ++ * @param[in] b Operand of multiplication + * @param[out] r Pointer to the result of the operation + * @return 0 on success, AVERROR(EINVAL) on overflow + */ +-static inline int av_size_mult(size_t a, size_t b, size_t *r) +-{ +- size_t t = a * b; +- /* Hack inspired from glibc: don't try the division if nelem and elsize +- * are both less than sqrt(SIZE_MAX). */ +- if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) +- return AVERROR(EINVAL); +- *r = t; +- return 0; +-} ++int av_size_mult(size_t a, size_t b, size_t *r); + + /** + * Set the maximum size that may be allocated in one block. +diff -Naur a/media/ffvpx/libavutil/mem_internal.h b/media/ffvpx/libavutil/mem_internal.h +--- a/media/ffvpx/libavutil/mem_internal.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/mem_internal.h 2023-04-06 12:50:24.494176623 +0200 +@@ -25,11 +25,11 @@ + + #include + +-#include "avassert.h" ++#include "attributes.h" ++#include "macros.h" + #include "mem.h" + #include "version.h" + +-#if !FF_API_DECLARE_ALIGNED + /** + * @def DECLARE_ALIGNED(n,t,v) + * Declare a variable that is aligned in memory. +@@ -96,7 +96,6 @@ + #define DECLARE_ASM_ALIGNED(n,t,v) t v + #define DECLARE_ASM_CONST(n,t,v) static const t v + #endif +-#endif + + // Some broken preprocessors need a second expansion + // to be forced to tokenize __VA_ARGS__ +@@ -136,22 +135,4 @@ + # define LOCAL_ALIGNED_32(t, v, ...) E1(LOCAL_ALIGNED_A(32, t, v, __VA_ARGS__,,)) + #endif + +-static inline int ff_fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc) +-{ +- void *val; +- +- memcpy(&val, ptr, sizeof(val)); +- if (min_size <= *size) { +- av_assert0(val || !min_size); +- return 0; +- } +- min_size = FFMAX(min_size + min_size / 16 + 32, min_size); +- av_freep(ptr); +- val = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size); +- memcpy(ptr, &val, sizeof(val)); +- if (!val) +- min_size = 0; +- *size = min_size; +- return 1; +-} + #endif /* AVUTIL_MEM_INTERNAL_H */ +diff -Naur a/media/ffvpx/libavutil/moz.build b/media/ffvpx/libavutil/moz.build +--- a/media/ffvpx/libavutil/moz.build 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/moz.build 2023-04-06 12:49:40.261395212 +0200 +@@ -11,11 +11,13 @@ + DIRS += ['x86'] + elif CONFIG['CPU_ARCH'] == 'arm': + DIRS += ['arm'] +- elif CONFIG['CPU_ARCH'] == 'aarch64': +- DIRS += ['aarch64'] ++ ++if CONFIG['CPU_ARCH'] == 'aarch64': ++ DIRS += ['aarch64'] + + SharedLibrary('mozavutil') + SOURCES += [ ++ 'avsscanf.c', + 'avstring.c', + 'bprint.c', + 'buffer.c', +@@ -45,6 +47,7 @@ + 'time.c', + 'utils.c' + ] ++ + if not CONFIG['MOZ_FFVPX_AUDIOONLY']: + SOURCES += [ + 'adler32.c', +@@ -54,6 +57,7 @@ + 'integer.c', + 'intmath.c', + 'lls.c', ++ 'mastering_display_metadata.c', + 'pixelutils.c', + 'threadmessage.c', + 'timecode.c', +@@ -63,7 +67,6 @@ + LOCAL_INCLUDES += ['/media/mozva'] + SOURCES += [ + 'hwcontext_vaapi.c', +- 'mastering_display_metadata.c', + ] + USE_LIBS += ['mozva'] + +diff -Naur a/media/ffvpx/libavutil/opt.c b/media/ffvpx/libavutil/opt.c +--- a/media/ffvpx/libavutil/opt.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/opt.c 2023-04-06 12:50:24.494176623 +0200 +@@ -39,6 +39,7 @@ + #include "opt.h" + #include "samplefmt.h" + #include "bprint.h" ++#include "version.h" + + #include + +@@ -71,7 +72,11 @@ + case AV_OPT_TYPE_INT: + *intnum = *(int *)dst; + return 0; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: +@@ -126,7 +131,11 @@ + *(int *)dst = llrint(num / den) * intnum; + break; + case AV_OPT_TYPE_DURATION: ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + case AV_OPT_TYPE_INT64:{ + double d = num / den; + if (intnum == 1 && d == (double)INT64_MAX) { +@@ -262,9 +271,12 @@ + const char * const_names[64]; + int search_flags = (o->flags & AV_OPT_FLAG_CHILD_CONSTS) ? AV_OPT_SEARCH_CHILDREN : 0; + const AVOption *o_named = av_opt_find(target_obj, i ? buf : val, o->unit, 0, search_flags); +- if (o_named && o_named->type == AV_OPT_TYPE_CONST) ++ if (o_named && o_named->type == AV_OPT_TYPE_CONST) { + d = DEFAULT_NUMVAL(o_named); +- else { ++ if (o_named->flags & AV_OPT_FLAG_DEPRECATED) ++ av_log(obj, AV_LOG_WARNING, "The \"%s\" option is deprecated: %s\n", ++ o_named->name, o_named->help); ++ } else { + if (o->unit) { + for (o_named = NULL; o_named = av_opt_next(target_obj, o_named); ) { + if (o_named->type == AV_OPT_TYPE_CONST && +@@ -462,6 +474,16 @@ + return 0; + } + ++static int set_string_channel_layout(void *obj, const AVOption *o, ++ const char *val, void *dst) ++{ ++ AVChannelLayout *channel_layout = dst; ++ av_channel_layout_uninit(channel_layout); ++ if (!val) ++ return 0; ++ return av_channel_layout_from_string(channel_layout, val); ++} ++ + int av_opt_set(void *obj, const char *name, const char *val, int search_flags) + { + int ret = 0; +@@ -469,12 +491,17 @@ + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; ++FF_DISABLE_DEPRECATION_WARNINGS + if (!val && (o->type != AV_OPT_TYPE_STRING && + o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT && + o->type != AV_OPT_TYPE_IMAGE_SIZE && + o->type != AV_OPT_TYPE_DURATION && o->type != AV_OPT_TYPE_COLOR && +- o->type != AV_OPT_TYPE_CHANNEL_LAYOUT && o->type != AV_OPT_TYPE_BOOL)) ++#if FF_API_OLD_CHANNEL_LAYOUT ++ o->type != AV_OPT_TYPE_CHANNEL_LAYOUT && ++#endif ++ o->type != AV_OPT_TYPE_BOOL)) + return AVERROR(EINVAL); ++FF_ENABLE_DEPRECATION_WARNINGS + + if (o->flags & AV_OPT_FLAG_READONLY) + return AVERROR(EINVAL); +@@ -530,6 +557,8 @@ + } + case AV_OPT_TYPE_COLOR: + return set_string_color(obj, o, val, dst); ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: + if (!val || !strcmp(val, "none")) { + *(int64_t *)dst = 0; +@@ -543,6 +572,15 @@ + return ret; + } + break; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ case AV_OPT_TYPE_CHLAYOUT: ++ ret = set_string_channel_layout(obj, o, val, dst); ++ if (ret < 0) { ++ av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as channel layout\n", val); ++ ret = AVERROR(EINVAL); ++ } ++ return ret; + case AV_OPT_TYPE_DICT: + return set_string_dict(obj, o, val, dst); + } +@@ -706,6 +744,8 @@ + return set_format(obj, name, fmt, search_flags, AV_OPT_TYPE_SAMPLE_FMT, "sample", AV_SAMPLE_FMT_NB); + } + ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + int av_opt_set_channel_layout(void *obj, const char *name, int64_t cl, int search_flags) + { + void *target_obj; +@@ -721,6 +761,8 @@ + *(int64_t *)(((uint8_t *)target_obj) + o->offset) = cl; + return 0; + } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + + int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, + int search_flags) +@@ -741,6 +783,22 @@ + return 0; + } + ++int av_opt_set_chlayout(void *obj, const char *name, ++ const AVChannelLayout *channel_layout, ++ int search_flags) ++{ ++ void *target_obj; ++ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); ++ AVChannelLayout *dst; ++ ++ if (!o || !target_obj) ++ return AVERROR_OPTION_NOT_FOUND; ++ ++ dst = (AVChannelLayout*)((uint8_t*)target_obj + o->offset); ++ ++ return av_channel_layout_copy(dst, channel_layout); ++} ++ + static void format_duration(char *buf, size_t size, int64_t d) + { + char *e; +@@ -869,10 +927,18 @@ + (int)((uint8_t *)dst)[0], (int)((uint8_t *)dst)[1], + (int)((uint8_t *)dst)[2], (int)((uint8_t *)dst)[3]); + break; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++ + i64 = *(int64_t *)dst; + ret = snprintf(buf, sizeof(buf), "0x%"PRIx64, i64); + break; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ case AV_OPT_TYPE_CHLAYOUT: ++ ret = av_channel_layout_describe(dst, buf, sizeof(buf)); ++ break; + case AV_OPT_TYPE_DICT: + if (!*(AVDictionary **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { + *out_val = NULL; +@@ -917,7 +983,10 @@ + + if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + return ret; +- *out_val = num * intnum / den; ++ if (num == den) ++ *out_val = intnum; ++ else ++ *out_val = num * intnum / den; + return 0; + } + +@@ -1011,6 +1080,8 @@ + return get_format(obj, name, search_flags, out_fmt, AV_OPT_TYPE_SAMPLE_FMT, "sample"); + } + ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *cl) + { + void *dst, *target_obj; +@@ -1027,6 +1098,24 @@ + *cl = *(int64_t *)dst; + return 0; + } ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif ++ ++int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *cl) ++{ ++ void *dst, *target_obj; ++ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); ++ if (!o || !target_obj) ++ return AVERROR_OPTION_NOT_FOUND; ++ if (o->type != AV_OPT_TYPE_CHLAYOUT) { ++ av_log(obj, AV_LOG_ERROR, ++ "The value for option '%s' is not a channel layout.\n", name); ++ return AVERROR(EINVAL); ++ } ++ ++ dst = ((uint8_t*)target_obj) + o->offset; ++ return av_channel_layout_copy(cl, dst); ++} + + int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val) + { +@@ -1167,7 +1256,7 @@ + av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name); + else + av_log(av_log_obj, AV_LOG_INFO, " %s%-17s ", +- (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? "" : "-", ++ (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? " " : "-", + opt->name); + + switch (opt->type) { +@@ -1219,7 +1308,12 @@ + case AV_OPT_TYPE_COLOR: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; ++ case AV_OPT_TYPE_CHLAYOUT: ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_BOOL: +@@ -1235,17 +1329,18 @@ + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + } +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_FILTERING_PARAM)? 'F' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.'); +- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.'); ++ av_log(av_log_obj, AV_LOG_INFO, "%c%c%c%c%c%c%c%c%c%c%c", ++ (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.', ++ (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.', ++ (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? 'F' : '.', ++ (opt->flags & AV_OPT_FLAG_VIDEO_PARAM) ? 'V' : '.', ++ (opt->flags & AV_OPT_FLAG_AUDIO_PARAM) ? 'A' : '.', ++ (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.', ++ (opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.', ++ (opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.', ++ (opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.', ++ (opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.', ++ (opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.'); + + if (opt->help) + av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); +@@ -1276,6 +1371,7 @@ + opt->type == AV_OPT_TYPE_IMAGE_SIZE || + opt->type == AV_OPT_TYPE_STRING || + opt->type == AV_OPT_TYPE_DICT || ++ opt->type == AV_OPT_TYPE_CHLAYOUT || + opt->type == AV_OPT_TYPE_VIDEO_RATE) && + !opt->default_val.str)) { + av_log(av_log_obj, AV_LOG_INFO, " (default "); +@@ -1328,11 +1424,16 @@ + case AV_OPT_TYPE_STRING: + case AV_OPT_TYPE_DICT: + case AV_OPT_TYPE_VIDEO_RATE: ++ case AV_OPT_TYPE_CHLAYOUT: + av_log(av_log_obj, AV_LOG_INFO, "\"%s\"", opt->default_val.str); + break; ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: + av_log(av_log_obj, AV_LOG_INFO, "0x%"PRIx64, opt->default_val.i64); + break; ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + } + av_log(av_log_obj, AV_LOG_INFO, ")"); + } +@@ -1382,7 +1483,11 @@ + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: + case AV_OPT_TYPE_DURATION: ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + case AV_OPT_TYPE_PIXEL_FMT: + case AV_OPT_TYPE_SAMPLE_FMT: + write_number(s, opt, dst, 1, 1, opt->default_val.i64); +@@ -1415,6 +1520,9 @@ + case AV_OPT_TYPE_BINARY: + set_string_binary(s, opt, opt->default_val.str, dst); + break; ++ case AV_OPT_TYPE_CHLAYOUT: ++ set_string_channel_layout(s, opt, opt->default_val.str, dst); ++ break; + case AV_OPT_TYPE_DICT: + set_string_dict(s, opt, opt->default_val.str, dst); + break; +@@ -1622,6 +1730,10 @@ + av_dict_free((AVDictionary **)(((uint8_t *)obj) + o->offset)); + break; + ++ case AV_OPT_TYPE_CHLAYOUT: ++ av_channel_layout_uninit((AVChannelLayout *)(((uint8_t *)obj) + o->offset)); ++ break; ++ + default: + break; + } +@@ -1630,27 +1742,26 @@ + + int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags) + { +- AVDictionaryEntry *t = NULL; ++ const AVDictionaryEntry *t = NULL; + AVDictionary *tmp = NULL; +- int ret = 0; ++ int ret; + + if (!options) + return 0; + +- while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) { ++ while ((t = av_dict_iterate(*options, t))) { + ret = av_opt_set(obj, t->key, t->value, search_flags); + if (ret == AVERROR_OPTION_NOT_FOUND) +- ret = av_dict_set(&tmp, t->key, t->value, 0); ++ ret = av_dict_set(&tmp, t->key, t->value, AV_DICT_MULTIKEY); + if (ret < 0) { + av_log(obj, AV_LOG_ERROR, "Error setting option %s to value %s.\n", t->key, t->value); + av_dict_free(&tmp); + return ret; + } +- ret = 0; + } + av_dict_free(options); + *options = tmp; +- return ret; ++ return 0; + } + + int av_opt_set_dict(void *obj, AVDictionary **options) +@@ -1717,29 +1828,10 @@ + return NULL; + } + +-#if FF_API_CHILD_CLASS_NEXT +-FF_DISABLE_DEPRECATION_WARNINGS +-const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev) +-{ +- if (parent->child_class_next) +- return parent->child_class_next(prev); +- return NULL; +-} +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif +- + const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter) + { + if (parent->child_class_iterate) + return parent->child_class_iterate(iter); +-#if FF_API_CHILD_CLASS_NEXT +-FF_DISABLE_DEPRECATION_WARNINGS +- if (parent->child_class_next) { +- *iter = parent->child_class_next(*iter); +- return *iter; +- } +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + return NULL; + } + +@@ -1759,7 +1851,11 @@ + case AV_OPT_TYPE_FLAGS: + return sizeof(int); + case AV_OPT_TYPE_DURATION: ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: + return sizeof(int64_t); +@@ -1826,12 +1922,16 @@ + } else if (o->type == AV_OPT_TYPE_DICT) { + AVDictionary **sdict = (AVDictionary **) field_src; + AVDictionary **ddict = (AVDictionary **) field_dst; ++ int ret2; + if (*sdict != *ddict) + av_dict_free(ddict); + *ddict = NULL; +- av_dict_copy(ddict, *sdict, 0); +- if (av_dict_count(*sdict) != av_dict_count(*ddict)) +- ret = AVERROR(ENOMEM); ++ ret2 = av_dict_copy(ddict, *sdict, 0); ++ if (ret2 < 0) ++ ret = ret2; ++ } else if (o->type == AV_OPT_TYPE_CHLAYOUT) { ++ if (field_dst != field_src) ++ ret = av_channel_layout_copy(field_dst, field_src); + } else { + int size = opt_size(o->type); + if (size < 0) +@@ -1847,10 +1947,7 @@ + { + int ret; + const AVClass *c = *(AVClass**)obj; +- int (*callback)(AVOptionRanges **, void *obj, const char *key, int flags) = NULL; +- +- if (c->version > (52 << 16 | 11 << 8)) +- callback = c->query_ranges; ++ int (*callback)(AVOptionRanges **, void *obj, const char *key, int flags) = c->query_ranges; + + if (!callback) + callback = av_opt_query_ranges_default; +@@ -1898,7 +1995,11 @@ + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_COLOR: ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + break; + case AV_OPT_TYPE_STRING: + range->component_min = 0; +@@ -1978,12 +2079,24 @@ + case AV_OPT_TYPE_PIXEL_FMT: + case AV_OPT_TYPE_SAMPLE_FMT: + case AV_OPT_TYPE_INT: ++#if FF_API_OLD_CHANNEL_LAYOUT ++FF_DISABLE_DEPRECATION_WARNINGS + case AV_OPT_TYPE_CHANNEL_LAYOUT: ++FF_ENABLE_DEPRECATION_WARNINGS ++#endif + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: + read_number(o, dst, NULL, NULL, &i64); + return o->default_val.i64 == i64; ++ case AV_OPT_TYPE_CHLAYOUT: { ++ AVChannelLayout ch_layout = { 0 }; ++ if (o->default_val.str) { ++ if ((ret = av_channel_layout_from_string(&ch_layout, o->default_val.str)) < 0) ++ return ret; ++ } ++ return !av_channel_layout_compare((AVChannelLayout *)dst, &ch_layout); ++ } + case AV_OPT_TYPE_STRING: + str = *(char **)dst; + if (str == o->default_val.str) //2 NULLs +@@ -2024,16 +2137,16 @@ + case AV_OPT_TYPE_DICT: { + AVDictionary *dict1 = NULL; + AVDictionary *dict2 = *(AVDictionary **)dst; +- AVDictionaryEntry *en1 = NULL; +- AVDictionaryEntry *en2 = NULL; ++ const AVDictionaryEntry *en1 = NULL; ++ const AVDictionaryEntry *en2 = NULL; + ret = av_dict_parse_string(&dict1, o->default_val.str, "=", ":", 0); + if (ret < 0) { + av_dict_free(&dict1); + return ret; + } + do { +- en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX); +- en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX); ++ en1 = av_dict_iterate(dict1, en1); ++ en2 = av_dict_iterate(dict2, en2); + } while (en1 && en2 && !strcmp(en1->key, en2->key) && !strcmp(en1->value, en2->value)); + av_dict_free(&dict1); + return (!en1 && !en2); +diff -Naur a/media/ffvpx/libavutil/opt.h b/media/ffvpx/libavutil/opt.h +--- a/media/ffvpx/libavutil/opt.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/opt.h 2023-04-06 12:49:40.261395212 +0200 +@@ -29,11 +29,11 @@ + + #include "rational.h" + #include "avutil.h" ++#include "channel_layout.h" + #include "dict.h" + #include "log.h" + #include "pixfmt.h" + #include "samplefmt.h" +-#include "version.h" + + /** + * @defgroup avoptions AVOptions +@@ -238,8 +238,11 @@ + AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational + AV_OPT_TYPE_DURATION, + AV_OPT_TYPE_COLOR, ++#if FF_API_OLD_CHANNEL_LAYOUT + AV_OPT_TYPE_CHANNEL_LAYOUT, ++#endif + AV_OPT_TYPE_BOOL, ++ AV_OPT_TYPE_CHLAYOUT, + }; + + /** +@@ -648,19 +651,6 @@ + */ + void *av_opt_child_next(void *obj, void *prev); + +-#if FF_API_CHILD_CLASS_NEXT +-/** +- * Iterate over potential AVOptions-enabled children of parent. +- * +- * @param prev result of a previous call to this function or NULL +- * @return AVClass corresponding to next potential child or NULL +- * +- * @deprecated use av_opt_child_class_iterate +- */ +-attribute_deprecated +-const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); +-#endif +- + /** + * Iterate over potential AVOptions-enabled children of parent. + * +@@ -707,7 +697,11 @@ + int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); + int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); + int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); ++#if FF_API_OLD_CHANNEL_LAYOUT ++attribute_deprecated + int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); ++#endif ++int av_opt_set_chlayout(void *obj, const char *name, const AVChannelLayout *layout, int search_flags); + /** + * @note Any old dictionary present is discarded and replaced with a copy of the new one. The + * caller still owns val is and responsible for freeing it. +@@ -762,7 +756,11 @@ + int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); + int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); + int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); ++#if FF_API_OLD_CHANNEL_LAYOUT ++attribute_deprecated + int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); ++#endif ++int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *layout); + /** + * @param[out] out_val The returned dictionary is a copy of the actual value and must + * be freed with av_dict_free() by the caller +@@ -804,9 +802,16 @@ + /** + * Copy options from src object into dest object. + * ++ * The underlying AVClass of both src and dest must coincide. The guarantee ++ * below does not apply if this is not fulfilled. ++ * + * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. + * Original memory allocated for such options is freed unless both src and dest options points to the same memory. + * ++ * Even on error it is guaranteed that allocated options from src and dest ++ * no longer alias each other afterwards; in particular calling av_opt_free() ++ * on both src and dest is safe afterwards if dest has been memdup'ed from src. ++ * + * @param dest Object to copy from + * @param src Object to copy into + * @return 0 on success, negative on error +diff -Naur a/media/ffvpx/libavutil/parseutils.c b/media/ffvpx/libavutil/parseutils.c +--- a/media/ffvpx/libavutil/parseutils.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/parseutils.c 2023-04-06 12:50:20.234005184 +0200 +@@ -28,7 +28,7 @@ + #include "common.h" + #include "eval.h" + #include "log.h" +-//#include "random_seed.h" ++/* #include "random_seed.h" */ + #include "time_internal.h" + #include "parseutils.h" + #include "fftime.h" +@@ -102,6 +102,7 @@ + { "wsxga", 1600,1024 }, + { "wuxga", 1920,1200 }, + { "woxga", 2560,1600 }, ++ { "wqhd", 2560,1440 }, + { "wqsxga", 3200,2048 }, + { "wquxga", 3840,2400 }, + { "whsxga", 6400,4096 }, +@@ -111,6 +112,7 @@ + { "hd480", 852, 480 }, + { "hd720", 1280, 720 }, + { "hd1080", 1920,1080 }, ++ { "quadhd", 2560,1440 }, + { "2k", 2048,1080 }, /* Digital Cinema System Specification */ + { "2kdci", 2048,1080 }, + { "2kflat", 1998,1080 }, +diff -Naur a/media/ffvpx/libavutil/parseutils.h b/media/ffvpx/libavutil/parseutils.h +--- a/media/ffvpx/libavutil/parseutils.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/parseutils.h 2023-04-06 12:50:06.976471255 +0200 +@@ -79,6 +79,8 @@ + /** + * Put the RGBA values that correspond to color_string in rgba_color. + * ++ * @param rgba_color 4-elements array of uint8_t values, where the respective ++ * red, green, blue and alpha component values are written. + * @param color_string a string specifying a color. It can be the name of + * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, + * possibly followed by "@" and a string representing the alpha +@@ -92,6 +94,8 @@ + * @param slen length of the initial part of color_string containing the + * color. It can be set to -1 if color_string is a null terminated string + * containing nothing else than the color. ++ * @param log_ctx a pointer to an arbitrary struct of which the first field ++ * is a pointer to an AVClass struct (used for av_log()). Can be NULL. + * @return >= 0 in case of success, a negative value in case of + * failure (for example if color_string cannot be parsed). + */ +@@ -106,7 +110,7 @@ + * av_parse_color(). + * + * @param color_idx index of the requested color, starting from 0 +- * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB ++ * @param rgb if not NULL, will point to a 3-elements array with the color value in RGB + * @return the color name string or NULL if color_idx is not in the array + */ + const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); +@@ -162,19 +166,19 @@ + * by the standard strptime(). + * + * The supported input field descriptors are listed below. +- * - %H: the hour as a decimal number, using a 24-hour clock, in the ++ * - `%%H`: the hour as a decimal number, using a 24-hour clock, in the + * range '00' through '23' +- * - %J: hours as a decimal number, in the range '0' through INT_MAX +- * - %M: the minute as a decimal number, using a 24-hour clock, in the ++ * - `%%J`: hours as a decimal number, in the range '0' through INT_MAX ++ * - `%%M`: the minute as a decimal number, using a 24-hour clock, in the + * range '00' through '59' +- * - %S: the second as a decimal number, using a 24-hour clock, in the ++ * - `%%S`: the second as a decimal number, using a 24-hour clock, in the + * range '00' through '59' +- * - %Y: the year as a decimal number, using the Gregorian calendar +- * - %m: the month as a decimal number, in the range '1' through '12' +- * - %d: the day of the month as a decimal number, in the range '1' ++ * - `%%Y`: the year as a decimal number, using the Gregorian calendar ++ * - `%%m`: the month as a decimal number, in the range '1' through '12' ++ * - `%%d`: the day of the month as a decimal number, in the range '1' + * through '31' +- * - %T: alias for '%H:%M:%S' +- * - %%: a literal '%' ++ * - `%%T`: alias for `%%H:%%M:%%S` ++ * - `%%`: a literal `%` + * + * @return a pointer to the first character not processed in this function + * call. In case the input string contains more characters than +diff -Naur a/media/ffvpx/libavutil/pixdesc.c b/media/ffvpx/libavutil/pixdesc.c +--- a/media/ffvpx/libavutil/pixdesc.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/pixdesc.c 2023-04-06 12:50:24.494176623 +0200 +@@ -22,14 +22,11 @@ + #include + #include + +-#include "avassert.h" + #include "avstring.h" + #include "common.h" + #include "pixfmt.h" + #include "pixdesc.h" +-#include "internal.h" + #include "intreadwrite.h" +-#include "version.h" + + void av_read_image_line2(void *dst, + const uint8_t *data[4], const int linesize[4], +@@ -49,19 +46,35 @@ + uint32_t *dst32 = dst; + + if (flags & AV_PIX_FMT_FLAG_BITSTREAM) { +- int skip = x * step + comp.offset; +- const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); +- int shift = 8 - depth - (skip & 7); ++ if (depth == 10) { ++ // Assume all channels are packed into a 32bit value ++ const uint8_t *byte_p = data[plane] + y * linesize[plane]; ++ const uint32_t *p = (uint32_t *)byte_p; + +- while (w--) { +- int val = (*p >> shift) & mask; +- if (read_pal_component) +- val = data[1][4*val + c]; +- shift -= step; +- p -= shift >> 3; +- shift &= 7; +- if (dst_element_size == 4) *dst32++ = val; +- else *dst16++ = val; ++ while (w--) { ++ int val = AV_RB32(p); ++ val = (val >> comp.offset) & mask; ++ if (read_pal_component) ++ val = data[1][4*val + c]; ++ if (dst_element_size == 4) *dst32++ = val; ++ else *dst16++ = val; ++ p++; ++ } ++ } else { ++ int skip = x * step + comp.offset; ++ const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); ++ int shift = 8 - depth - (skip & 7); ++ ++ while (w--) { ++ int val = (*p >> shift) & mask; ++ if (read_pal_component) ++ val = data[1][4*val + c]; ++ shift -= step; ++ p -= shift >> 3; ++ shift &= 7; ++ if (dst_element_size == 4) *dst32++ = val; ++ else *dst16++ = val; ++ } + } + } else { + const uint8_t *p = data[plane] + y * linesize[plane] + +@@ -112,15 +125,29 @@ + const uint16_t *src16 = src; + + if (flags & AV_PIX_FMT_FLAG_BITSTREAM) { +- int skip = x * step + comp.offset; +- uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); +- int shift = 8 - depth - (skip & 7); ++ if (depth == 10) { ++ // Assume all channels are packed into a 32bit value ++ const uint8_t *byte_p = data[plane] + y * linesize[plane]; ++ uint32_t *p = (uint32_t *)byte_p; ++ int offset = comp.offset; ++ uint32_t mask = ((1ULL << depth) - 1) << offset; + +- while (w--) { +- *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift; +- shift -= step; +- p -= shift >> 3; +- shift &= 7; ++ while (w--) { ++ uint16_t val = src_element_size == 4 ? *src32++ : *src16++; ++ AV_WB32(p, (AV_RB32(p) & ~mask) | (val << offset)); ++ p++; ++ } ++ } else { ++ int skip = x * step + comp.offset; ++ uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); ++ int shift = 8 - depth - (skip & 7); ++ ++ while (w--) { ++ *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift; ++ shift -= step; ++ p -= shift >> 3; ++ shift &= 7; ++ } + } + } else { + int shift = comp.shift; +@@ -167,9 +194,6 @@ + av_write_image_line2(src, data, linesize, desc, x, y, c, w, 2); + } + +-#if FF_API_PLUS1_MINUS1 +-FF_DISABLE_DEPRECATION_WARNINGS +-#endif + static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { + [AV_PIX_FMT_YUV420P] = { + .name = "yuv420p", +@@ -177,9 +201,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -189,9 +213,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* U */ +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* V */ ++ { 0, 2, 0, 0, 8 }, /* Y */ ++ { 0, 4, 1, 0, 8 }, /* U */ ++ { 0, 4, 3, 0, 8 }, /* V */ + }, + }, + [AV_PIX_FMT_YVYU422] = { +@@ -200,9 +224,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */ +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* U */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* V */ ++ { 0, 2, 0, 0, 8 }, /* Y */ ++ { 0, 4, 3, 0, 8 }, /* U */ ++ { 0, 4, 1, 0, 8 }, /* V */ + }, + }, + [AV_PIX_FMT_Y210LE] = { +@@ -211,9 +235,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 0, 6, 10, 3, 9, 1 }, /* Y */ +- { 0, 8, 2, 6, 10, 7, 9, 3 }, /* U */ +- { 0, 8, 6, 6, 10, 7, 9, 7 }, /* V */ ++ { 0, 4, 0, 6, 10 }, /* Y */ ++ { 0, 8, 2, 6, 10 }, /* U */ ++ { 0, 8, 6, 6, 10 }, /* V */ + }, + }, + [AV_PIX_FMT_Y210BE] = { +@@ -222,9 +246,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 0, 6, 10, 3, 9, 1 }, /* Y */ +- { 0, 8, 2, 6, 10, 7, 9, 3 }, /* U */ +- { 0, 8, 6, 6, 10, 7, 9, 7 }, /* V */ ++ { 0, 4, 0, 6, 10 }, /* Y */ ++ { 0, 8, 2, 6, 10 }, /* U */ ++ { 0, 8, 6, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + }, +@@ -234,9 +258,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 3, 0, 0, 8, 2, 7, 1 }, /* R */ +- { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */ +- { 0, 3, 2, 0, 8, 2, 7, 3 }, /* B */ ++ { 0, 3, 0, 0, 8 }, /* R */ ++ { 0, 3, 1, 0, 8 }, /* G */ ++ { 0, 3, 2, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -246,9 +270,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 3, 2, 0, 8, 2, 7, 3 }, /* R */ +- { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */ +- { 0, 3, 0, 0, 8, 2, 7, 1 }, /* B */ ++ { 0, 3, 2, 0, 8 }, /* R */ ++ { 0, 3, 1, 0, 8 }, /* G */ ++ { 0, 3, 0, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -258,9 +282,9 @@ + .log2_chroma_w= 0, + .log2_chroma_h= 0, + .comp = { +- { 0, 4, 2, 4, 10, 3, 9, 2 }, /* R */ +- { 0, 4, 1, 2, 10, 3, 9, 3 }, /* G */ +- { 0, 4, 0, 0, 10, 3, 9, 4 }, /* B */ ++ { 0, 4, 2, 4, 10 }, /* R */ ++ { 0, 4, 1, 2, 10 }, /* G */ ++ { 0, 4, 0, 0, 10 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -270,9 +294,33 @@ + .log2_chroma_w= 0, + .log2_chroma_h= 0, + .comp = { +- { 0, 4, 0, 4, 10, 3, 9, 2 }, /* R */ +- { 0, 4, 1, 2, 10, 3, 9, 3 }, /* G */ +- { 0, 4, 2, 0, 10, 3, 9, 4 }, /* B */ ++ { 0, 4, 0, 4, 10 }, /* R */ ++ { 0, 4, 1, 2, 10 }, /* G */ ++ { 0, 4, 2, 0, 10 }, /* B */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_X2BGR10LE] = { ++ .name = "x2bgr10le", ++ .nb_components= 3, ++ .log2_chroma_w= 0, ++ .log2_chroma_h= 0, ++ .comp = { ++ { 0, 4, 0, 0, 10 }, /* R */ ++ { 0, 4, 1, 2, 10 }, /* G */ ++ { 0, 4, 2, 4, 10 }, /* B */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_RGB, ++ }, ++ [AV_PIX_FMT_X2BGR10BE] = { ++ .name = "x2bgr10be", ++ .nb_components= 3, ++ .log2_chroma_w= 0, ++ .log2_chroma_h= 0, ++ .comp = { ++ { 0, 4, 2, 0, 10 }, /* R */ ++ { 0, 4, 1, 2, 10 }, /* G */ ++ { 0, 4, 0, 4, 10 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, + }, +@@ -282,9 +330,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -294,9 +342,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -306,9 +354,9 @@ + .log2_chroma_w = 2, + .log2_chroma_h = 2, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -318,9 +366,9 @@ + .log2_chroma_w = 2, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -330,9 +378,9 @@ + .log2_chroma_w = 2, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -342,9 +390,8 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ ++ { 0, 1, 0, 0, 8 }, /* Y */ + }, +- .flags = FF_PSEUDOPAL, + .alias = "gray8,y8", + }, + [AV_PIX_FMT_MONOWHITE] = { +@@ -353,7 +400,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 1, 0, 0, 1 }, /* Y */ ++ { 0, 1, 0, 0, 1 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BITSTREAM, + }, +@@ -363,7 +410,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 7, 1, 0, 0, 1 }, /* Y */ ++ { 0, 1, 0, 7, 1 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BITSTREAM, + }, +@@ -373,7 +420,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, ++ { 0, 1, 0, 0, 8 }, + }, + .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -383,9 +430,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -395,9 +442,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -407,25 +454,27 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, ++#if FF_API_XVMC + [AV_PIX_FMT_XVMC] = { + .name = "xvmc", + .flags = AV_PIX_FMT_FLAG_HWACCEL, + }, ++#endif + [AV_PIX_FMT_UYVY422] = { + .name = "uyvy422", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 1, 0, 8, 1, 7, 2 }, /* Y */ +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* U */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* V */ ++ { 0, 2, 1, 0, 8 }, /* Y */ ++ { 0, 4, 0, 0, 8 }, /* U */ ++ { 0, 4, 2, 0, 8 }, /* V */ + }, + }, + [AV_PIX_FMT_UYYVYY411] = { +@@ -434,9 +483,9 @@ + .log2_chroma_w = 2, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* Y */ +- { 0, 6, 0, 0, 8, 5, 7, 1 }, /* U */ +- { 0, 6, 3, 0, 8, 5, 7, 4 }, /* V */ ++ { 0, 4, 1, 0, 8 }, /* Y */ ++ { 0, 6, 0, 0, 8 }, /* U */ ++ { 0, 6, 3, 0, 8 }, /* V */ + }, + }, + [AV_PIX_FMT_BGR8] = { +@@ -445,11 +494,11 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 3, 0, 2, 1 }, /* R */ +- { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */ +- { 0, 1, 0, 6, 2, 0, 1, 1 }, /* B */ ++ { 0, 1, 0, 0, 3 }, /* R */ ++ { 0, 1, 0, 3, 3 }, /* G */ ++ { 0, 1, 0, 6, 2 }, /* B */ + }, +- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, ++ .flags = AV_PIX_FMT_FLAG_RGB, + }, + [AV_PIX_FMT_BGR4] = { + .name = "bgr4", +@@ -457,9 +506,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 3, 0, 1, 3, 0, 4 }, /* R */ +- { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */ +- { 0, 4, 0, 0, 1, 3, 0, 1 }, /* B */ ++ { 0, 4, 3, 0, 1 }, /* R */ ++ { 0, 4, 1, 0, 2 }, /* G */ ++ { 0, 4, 0, 0, 1 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB, + }, +@@ -469,11 +518,11 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 1, 0, 0, 1 }, /* R */ +- { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */ +- { 0, 1, 0, 3, 1, 0, 0, 1 }, /* B */ ++ { 0, 1, 0, 0, 1 }, /* R */ ++ { 0, 1, 0, 1, 2 }, /* G */ ++ { 0, 1, 0, 3, 1 }, /* B */ + }, +- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, ++ .flags = AV_PIX_FMT_FLAG_RGB, + }, + [AV_PIX_FMT_RGB8] = { + .name = "rgb8", +@@ -481,11 +530,11 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 6, 2, 0, 1, 1 }, /* R */ +- { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */ +- { 0, 1, 0, 0, 3, 0, 2, 1 }, /* B */ ++ { 0, 1, 0, 6, 2 }, /* R */ ++ { 0, 1, 0, 3, 3 }, /* G */ ++ { 0, 1, 0, 0, 3 }, /* B */ + }, +- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, ++ .flags = AV_PIX_FMT_FLAG_RGB, + }, + [AV_PIX_FMT_RGB4] = { + .name = "rgb4", +@@ -493,9 +542,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 0, 0, 1, 3, 0, 1 }, /* R */ +- { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */ +- { 0, 4, 3, 0, 1, 3, 0, 4 }, /* B */ ++ { 0, 4, 0, 0, 1 }, /* R */ ++ { 0, 4, 1, 0, 2 }, /* G */ ++ { 0, 4, 3, 0, 1 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB, + }, +@@ -505,11 +554,11 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 3, 1, 0, 0, 1 }, /* R */ +- { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */ +- { 0, 1, 0, 0, 1, 0, 0, 1 }, /* B */ ++ { 0, 1, 0, 3, 1 }, /* R */ ++ { 0, 1, 0, 1, 2 }, /* G */ ++ { 0, 1, 0, 0, 1 }, /* B */ + }, +- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, ++ .flags = AV_PIX_FMT_FLAG_RGB, + }, + [AV_PIX_FMT_NV12] = { + .name = "nv12", +@@ -517,9 +566,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */ +- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 2, 0, 0, 8 }, /* U */ ++ { 1, 2, 1, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -529,9 +578,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */ +- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 2, 1, 0, 8 }, /* U */ ++ { 1, 2, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -541,10 +590,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */ +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */ ++ { 0, 4, 1, 0, 8 }, /* R */ ++ { 0, 4, 2, 0, 8 }, /* G */ ++ { 0, 4, 3, 0, 8 }, /* B */ ++ { 0, 4, 0, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -554,10 +603,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */ +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */ ++ { 0, 4, 0, 0, 8 }, /* R */ ++ { 0, 4, 1, 0, 8 }, /* G */ ++ { 0, 4, 2, 0, 8 }, /* B */ ++ { 0, 4, 3, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -567,10 +616,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */ +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */ ++ { 0, 4, 3, 0, 8 }, /* R */ ++ { 0, 4, 2, 0, 8 }, /* G */ ++ { 0, 4, 1, 0, 8 }, /* B */ ++ { 0, 4, 0, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -580,10 +629,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */ +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */ ++ { 0, 4, 2, 0, 8 }, /* R */ ++ { 0, 4, 1, 0, 8 }, /* G */ ++ { 0, 4, 0, 0, 8 }, /* B */ ++ { 0, 4, 3, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -593,9 +642,9 @@ + .log2_chroma_w= 0, + .log2_chroma_h= 0, + .comp = { +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */ ++ { 0, 4, 1, 0, 8 }, /* R */ ++ { 0, 4, 2, 0, 8 }, /* G */ ++ { 0, 4, 3, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -605,9 +654,9 @@ + .log2_chroma_w= 0, + .log2_chroma_h= 0, + .comp = { +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */ ++ { 0, 4, 0, 0, 8 }, /* R */ ++ { 0, 4, 1, 0, 8 }, /* G */ ++ { 0, 4, 2, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -617,9 +666,9 @@ + .log2_chroma_w= 0, + .log2_chroma_h= 0, + .comp = { +- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */ +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */ ++ { 0, 4, 3, 0, 8 }, /* R */ ++ { 0, 4, 2, 0, 8 }, /* G */ ++ { 0, 4, 1, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -629,9 +678,9 @@ + .log2_chroma_w= 0, + .log2_chroma_h= 0, + .comp = { +- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */ +- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ +- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */ ++ { 0, 4, 2, 0, 8 }, /* R */ ++ { 0, 4, 1, 0, 8 }, /* G */ ++ { 0, 4, 0, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -641,7 +690,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ ++ { 0, 2, 0, 0, 9 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y9be", +@@ -652,7 +701,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ ++ { 0, 2, 0, 0, 9 }, /* Y */ + }, + .alias = "y9le", + }, +@@ -662,7 +711,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ ++ { 0, 2, 0, 0, 10 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y10be", +@@ -673,7 +722,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ ++ { 0, 2, 0, 0, 10 }, /* Y */ + }, + .alias = "y10le", + }, +@@ -683,7 +732,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ ++ { 0, 2, 0, 0, 12 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y12be", +@@ -694,7 +743,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ ++ { 0, 2, 0, 0, 12 }, /* Y */ + }, + .alias = "y12le", + }, +@@ -704,7 +753,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ ++ { 0, 2, 0, 0, 14 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y14be", +@@ -715,7 +764,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ ++ { 0, 2, 0, 0, 14 }, /* Y */ + }, + .alias = "y14le", + }, +@@ -725,7 +774,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ ++ { 0, 2, 0, 0, 16 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y16be", +@@ -736,7 +785,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ ++ { 0, 2, 0, 0, 16 }, /* Y */ + }, + .alias = "y16le", + }, +@@ -746,9 +795,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -758,9 +807,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -770,9 +819,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -782,9 +831,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -794,9 +843,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -806,9 +855,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -818,10 +867,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ +- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ ++ { 3, 1, 0, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -831,10 +880,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ +- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ ++ { 3, 1, 0, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -844,10 +893,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ +- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 1, 0, 0, 8 }, /* U */ ++ { 2, 1, 0, 0, 8 }, /* V */ ++ { 3, 1, 0, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -857,10 +906,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ +- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ ++ { 3, 2, 0, 0, 9 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -870,10 +919,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ +- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ ++ { 3, 2, 0, 0, 9 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -883,10 +932,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ +- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ ++ { 3, 2, 0, 0, 9 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -896,10 +945,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ +- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ ++ { 3, 2, 0, 0, 9 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -909,10 +958,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ +- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ ++ { 3, 2, 0, 0, 9 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -922,10 +971,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ +- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ ++ { 3, 2, 0, 0, 9 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -935,10 +984,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -948,10 +997,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -961,10 +1010,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -974,10 +1023,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -987,10 +1036,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1000,10 +1049,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1013,10 +1062,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1026,10 +1075,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1039,10 +1088,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1052,10 +1101,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1065,10 +1114,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1078,10 +1127,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1091,9 +1140,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */ +- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ +- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */ ++ { 0, 6, 0, 0, 16 }, /* R */ ++ { 0, 6, 2, 0, 16 }, /* G */ ++ { 0, 6, 4, 0, 16 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, + }, +@@ -1103,9 +1152,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */ +- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ +- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */ ++ { 0, 6, 0, 0, 16 }, /* R */ ++ { 0, 6, 2, 0, 16 }, /* G */ ++ { 0, 6, 4, 0, 16 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1115,10 +1164,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */ +- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ +- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */ +- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ ++ { 0, 8, 0, 0, 16 }, /* R */ ++ { 0, 8, 2, 0, 16 }, /* G */ ++ { 0, 8, 4, 0, 16 }, /* B */ ++ { 0, 8, 6, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1128,10 +1177,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */ +- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ +- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */ +- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ ++ { 0, 8, 0, 0, 16 }, /* R */ ++ { 0, 8, 2, 0, 16 }, /* G */ ++ { 0, 8, 4, 0, 16 }, /* B */ ++ { 0, 8, 6, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1141,9 +1190,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, -1, 3, 5, 1, 4, 0 }, /* R */ +- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ ++ { 0, 2, -1, 3, 5 }, /* R */ ++ { 0, 2, 0, 5, 6 }, /* G */ ++ { 0, 2, 0, 0, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1153,9 +1202,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 1, 3, 5, 1, 4, 2 }, /* R */ +- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ ++ { 0, 2, 1, 3, 5 }, /* R */ ++ { 0, 2, 0, 5, 6 }, /* G */ ++ { 0, 2, 0, 0, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1165,9 +1214,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, -1, 2, 5, 1, 4, 0 }, /* R */ +- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ ++ { 0, 2, -1, 2, 5 }, /* R */ ++ { 0, 2, 0, 5, 5 }, /* G */ ++ { 0, 2, 0, 0, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1177,9 +1226,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 1, 2, 5, 1, 4, 2 }, /* R */ +- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ ++ { 0, 2, 1, 2, 5 }, /* R */ ++ { 0, 2, 0, 5, 5 }, /* G */ ++ { 0, 2, 0, 0, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1189,9 +1238,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, -1, 0, 4, 1, 3, 0 }, /* R */ +- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ +- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */ ++ { 0, 2, -1, 0, 4 }, /* R */ ++ { 0, 2, 0, 4, 4 }, /* G */ ++ { 0, 2, 0, 0, 4 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1201,9 +1250,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 1, 0, 4, 1, 3, 2 }, /* R */ +- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ +- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */ ++ { 0, 2, 1, 0, 4 }, /* R */ ++ { 0, 2, 0, 4, 4 }, /* G */ ++ { 0, 2, 0, 0, 4 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1213,9 +1262,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */ +- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ +- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */ ++ { 0, 6, 4, 0, 16 }, /* R */ ++ { 0, 6, 2, 0, 16 }, /* G */ ++ { 0, 6, 0, 0, 16 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1225,9 +1274,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */ +- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ +- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */ ++ { 0, 6, 4, 0, 16 }, /* R */ ++ { 0, 6, 2, 0, 16 }, /* G */ ++ { 0, 6, 0, 0, 16 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1237,10 +1286,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */ +- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ +- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */ +- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ ++ { 0, 8, 4, 0, 16 }, /* R */ ++ { 0, 8, 2, 0, 16 }, /* G */ ++ { 0, 8, 0, 0, 16 }, /* B */ ++ { 0, 8, 6, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1250,10 +1299,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */ +- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ +- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */ +- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ ++ { 0, 8, 4, 0, 16 }, /* R */ ++ { 0, 8, 2, 0, 16 }, /* G */ ++ { 0, 8, 0, 0, 16 }, /* B */ ++ { 0, 8, 6, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1263,9 +1312,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ +- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ +- { 0, 2, -1, 3, 5, 1, 4, 0 }, /* B */ ++ { 0, 2, 0, 0, 5 }, /* R */ ++ { 0, 2, 0, 5, 6 }, /* G */ ++ { 0, 2, -1, 3, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1275,9 +1324,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ +- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ +- { 0, 2, 1, 3, 5, 1, 4, 2 }, /* B */ ++ { 0, 2, 0, 0, 5 }, /* R */ ++ { 0, 2, 0, 5, 6 }, /* G */ ++ { 0, 2, 1, 3, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1287,9 +1336,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ +- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ +- { 0, 2, -1, 2, 5, 1, 4, 0 }, /* B */ ++ { 0, 2, 0, 0, 5 }, /* R */ ++ { 0, 2, 0, 5, 5 }, /* G */ ++ { 0, 2, -1, 2, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1299,9 +1348,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ +- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ +- { 0, 2, 1, 2, 5, 1, 4, 2 }, /* B */ ++ { 0, 2, 0, 0, 5 }, /* R */ ++ { 0, 2, 0, 5, 5 }, /* G */ ++ { 0, 2, 1, 2, 5 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +@@ -1311,9 +1360,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */ +- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ +- { 0, 2, -1, 0, 4, 1, 3, 0 }, /* B */ ++ { 0, 2, 0, 0, 4 }, /* R */ ++ { 0, 2, 0, 4, 4 }, /* G */ ++ { 0, 2, -1, 0, 4 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1323,48 +1372,27 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */ +- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ +- { 0, 2, 1, 0, 4, 1, 3, 2 }, /* B */ ++ { 0, 2, 0, 0, 4 }, /* R */ ++ { 0, 2, 0, 4, 4 }, /* G */ ++ { 0, 2, 1, 0, 4 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_RGB, + }, +-#if FF_API_VAAPI +- [AV_PIX_FMT_VAAPI_MOCO] = { +- .name = "vaapi_moco", +- .log2_chroma_w = 1, +- .log2_chroma_h = 1, +- .flags = AV_PIX_FMT_FLAG_HWACCEL, +- }, +- [AV_PIX_FMT_VAAPI_IDCT] = { +- .name = "vaapi_idct", +- .log2_chroma_w = 1, +- .log2_chroma_h = 1, +- .flags = AV_PIX_FMT_FLAG_HWACCEL, +- }, +- [AV_PIX_FMT_VAAPI_VLD] = { +- .name = "vaapi_vld", +- .log2_chroma_w = 1, +- .log2_chroma_h = 1, +- .flags = AV_PIX_FMT_FLAG_HWACCEL, +- }, +-#else + [AV_PIX_FMT_VAAPI] = { + .name = "vaapi", + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .flags = AV_PIX_FMT_FLAG_HWACCEL, + }, +-#endif + [AV_PIX_FMT_YUV420P9LE] = { + .name = "yuv420p9le", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1374,9 +1402,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1386,9 +1414,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1398,9 +1426,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1410,9 +1438,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1422,9 +1450,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1434,9 +1462,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ ++ { 0, 2, 0, 0, 14 }, /* Y */ ++ { 1, 2, 0, 0, 14 }, /* U */ ++ { 2, 2, 0, 0, 14 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1446,9 +1474,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ ++ { 0, 2, 0, 0, 14 }, /* Y */ ++ { 1, 2, 0, 0, 14 }, /* U */ ++ { 2, 2, 0, 0, 14 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1458,9 +1486,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1470,9 +1498,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1482,9 +1510,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1494,9 +1522,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1506,9 +1534,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1518,9 +1546,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1530,9 +1558,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1542,9 +1570,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1554,9 +1582,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ ++ { 0, 2, 0, 0, 14 }, /* Y */ ++ { 1, 2, 0, 0, 14 }, /* U */ ++ { 2, 2, 0, 0, 14 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1566,9 +1594,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ ++ { 0, 2, 0, 0, 14 }, /* Y */ ++ { 1, 2, 0, 0, 14 }, /* U */ ++ { 2, 2, 0, 0, 14 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1578,9 +1606,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1590,9 +1618,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1602,9 +1630,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1614,9 +1642,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 2, 0, 0, 16 }, /* U */ ++ { 2, 2, 0, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1626,9 +1654,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1638,9 +1666,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 2, 0, 0, 10 }, /* U */ ++ { 2, 2, 0, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1650,9 +1678,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1662,9 +1690,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ ++ { 0, 2, 0, 0, 9 }, /* Y */ ++ { 1, 2, 0, 0, 9 }, /* U */ ++ { 2, 2, 0, 0, 9 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1674,9 +1702,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1686,9 +1714,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1698,9 +1726,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ ++ { 0, 2, 0, 0, 14 }, /* Y */ ++ { 1, 2, 0, 0, 14 }, /* U */ ++ { 2, 2, 0, 0, 14 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1710,9 +1738,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ ++ { 0, 2, 0, 0, 14 }, /* Y */ ++ { 1, 2, 0, 0, 14 }, /* U */ ++ { 2, 2, 0, 0, 14 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -1732,8 +1760,8 @@ + .name = "ya8", + .nb_components = 2, + .comp = { +- { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */ +- { 0, 2, 1, 0, 8, 1, 7, 2 }, /* A */ ++ { 0, 2, 0, 0, 8 }, /* Y */ ++ { 0, 2, 1, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_ALPHA, + .alias = "gray8a", +@@ -1742,8 +1770,8 @@ + .name = "ya16le", + .nb_components = 2, + .comp = { +- { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */ +- { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */ ++ { 0, 4, 0, 0, 16 }, /* Y */ ++ { 0, 4, 2, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1751,8 +1779,8 @@ + .name = "ya16be", + .nb_components = 2, + .comp = { +- { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */ +- { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */ ++ { 0, 4, 0, 0, 16 }, /* Y */ ++ { 0, 4, 2, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -1766,9 +1794,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */ +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */ ++ { 2, 1, 0, 0, 8 }, /* R */ ++ { 0, 1, 0, 0, 8 }, /* G */ ++ { 1, 1, 0, 0, 8 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1778,9 +1806,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */ +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */ ++ { 2, 2, 0, 0, 9 }, /* R */ ++ { 0, 2, 0, 0, 9 }, /* G */ ++ { 1, 2, 0, 0, 9 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1790,9 +1818,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */ +- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */ +- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */ ++ { 2, 2, 0, 0, 9 }, /* R */ ++ { 0, 2, 0, 0, 9 }, /* G */ ++ { 1, 2, 0, 0, 9 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1802,9 +1830,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ ++ { 2, 2, 0, 0, 10 }, /* R */ ++ { 0, 2, 0, 0, 10 }, /* G */ ++ { 1, 2, 0, 0, 10 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1814,9 +1842,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ ++ { 2, 2, 0, 0, 10 }, /* R */ ++ { 0, 2, 0, 0, 10 }, /* G */ ++ { 1, 2, 0, 0, 10 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1826,9 +1854,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ ++ { 2, 2, 0, 0, 12 }, /* R */ ++ { 0, 2, 0, 0, 12 }, /* G */ ++ { 1, 2, 0, 0, 12 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1838,9 +1866,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ ++ { 2, 2, 0, 0, 12 }, /* R */ ++ { 0, 2, 0, 0, 12 }, /* G */ ++ { 1, 2, 0, 0, 12 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1850,9 +1878,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */ +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */ ++ { 2, 2, 0, 0, 14 }, /* R */ ++ { 0, 2, 0, 0, 14 }, /* G */ ++ { 1, 2, 0, 0, 14 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1862,9 +1890,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */ +- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */ +- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */ ++ { 2, 2, 0, 0, 14 }, /* R */ ++ { 0, 2, 0, 0, 14 }, /* G */ ++ { 1, 2, 0, 0, 14 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1874,9 +1902,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ ++ { 2, 2, 0, 0, 16 }, /* R */ ++ { 0, 2, 0, 0, 16 }, /* G */ ++ { 1, 2, 0, 0, 16 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1886,9 +1914,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ ++ { 2, 2, 0, 0, 16 }, /* R */ ++ { 0, 2, 0, 0, 16 }, /* G */ ++ { 1, 2, 0, 0, 16 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, + }, +@@ -1898,10 +1926,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */ +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */ +- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */ +- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ ++ { 2, 1, 0, 0, 8 }, /* R */ ++ { 0, 1, 0, 0, 8 }, /* G */ ++ { 1, 1, 0, 0, 8 }, /* B */ ++ { 3, 1, 0, 0, 8 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | + AV_PIX_FMT_FLAG_ALPHA, +@@ -1912,10 +1940,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 2, 2, 0, 0, 16 }, /* R */ ++ { 0, 2, 0, 0, 16 }, /* G */ ++ { 1, 2, 0, 0, 16 }, /* B */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | + AV_PIX_FMT_FLAG_ALPHA, +@@ -1926,10 +1954,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ +- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ +- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ ++ { 2, 2, 0, 0, 16 }, /* R */ ++ { 0, 2, 0, 0, 16 }, /* G */ ++ { 1, 2, 0, 0, 16 }, /* B */ ++ { 3, 2, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, +@@ -1946,9 +1974,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */ +- { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */ +- { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */ ++ { 0, 6, 0, 4, 12 }, /* X */ ++ { 0, 6, 2, 4, 12 }, /* Y */ ++ { 0, 6, 4, 4, 12 }, /* Z */ + }, + /*.flags = -- not used*/ + }, +@@ -1958,9 +1986,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */ +- { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */ +- { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */ ++ { 0, 6, 0, 4, 12 }, /* X */ ++ { 0, 6, 2, 4, 12 }, /* Y */ ++ { 0, 6, 4, 4, 12 }, /* Z */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + }, +@@ -1970,9 +1998,9 @@ + .log2_chroma_w= 0, \ + .log2_chroma_h= 0, \ + .comp = { \ +- {0,1,0,0,2,0,1,1},\ +- {0,1,0,0,4,0,3,1},\ +- {0,1,0,0,2,0,1,1},\ ++ { 0, 1, 0, 0, 2 }, \ ++ { 0, 1, 0, 0, 4 }, \ ++ { 0, 1, 0, 0, 2 }, \ + }, \ + + #define BAYER16_DESC_COMMON \ +@@ -1980,9 +2008,9 @@ + .log2_chroma_w= 0, \ + .log2_chroma_h= 0, \ + .comp = { \ +- {0,2,0,0,4,1,3,1},\ +- {0,2,0,0,8,1,7,1},\ +- {0,2,0,0,4,1,3,1},\ ++ { 0, 2, 0, 0, 4 }, \ ++ { 0, 2, 0, 0, 8 }, \ ++ { 0, 2, 0, 0, 4 }, \ + }, \ + + [AV_PIX_FMT_BAYER_BGGR8] = { +@@ -2051,9 +2079,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */ +- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 2, 0, 0, 8 }, /* U */ ++ { 1, 2, 1, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -2063,9 +2091,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */ +- { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 4, 0, 0, 10 }, /* U */ ++ { 1, 4, 2, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -2075,9 +2103,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ +- { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */ +- { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */ ++ { 0, 2, 0, 0, 10 }, /* Y */ ++ { 1, 4, 0, 0, 10 }, /* U */ ++ { 1, 4, 2, 0, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, +@@ -2103,10 +2131,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */ +- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */ +- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */ +- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */ ++ { 0, 8, 2, 0, 16 }, /* Y */ ++ { 0, 8, 4, 0, 16 }, /* U */ ++ { 0, 8, 6, 0, 16 }, /* V */ ++ { 0, 8, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -2116,10 +2144,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */ +- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */ +- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */ +- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */ ++ { 0, 8, 2, 0, 16 }, /* Y */ ++ { 0, 8, 4, 0, 16 }, /* U */ ++ { 0, 8, 6, 0, 16 }, /* V */ ++ { 0, 8, 0, 0, 16 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -2129,9 +2157,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */ +- { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */ +- { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */ ++ { 0, 2, 0, 6, 10 }, /* Y */ ++ { 1, 4, 0, 6, 10 }, /* U */ ++ { 1, 4, 2, 6, 10 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -2141,9 +2169,33 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */ +- { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */ +- { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */ ++ { 0, 2, 0, 6, 10 }, /* Y */ ++ { 1, 4, 0, 6, 10 }, /* U */ ++ { 1, 4, 2, 6, 10 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_P012LE] = { ++ .name = "p012le", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 1, ++ .comp = { ++ { 0, 2, 0, 4, 12 }, /* Y */ ++ { 1, 4, 0, 4, 12 }, /* U */ ++ { 1, 4, 2, 4, 12 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR, ++ }, ++ [AV_PIX_FMT_P012BE] = { ++ .name = "p012be", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 1, ++ .comp = { ++ { 0, 2, 0, 4, 12 }, /* Y */ ++ { 1, 4, 0, 4, 12 }, /* U */ ++ { 1, 4, 2, 4, 12 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, +@@ -2153,9 +2205,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */ +- { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 4, 0, 0, 16 }, /* U */ ++ { 1, 4, 2, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -2165,9 +2217,9 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { +- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ +- { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */ +- { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */ ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 4, 0, 0, 16 }, /* U */ ++ { 1, 4, 2, 0, 16 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, +@@ -2177,10 +2229,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ +- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ ++ { 2, 2, 0, 0, 12 }, /* R */ ++ { 0, 2, 0, 0, 12 }, /* G */ ++ { 1, 2, 0, 0, 12 }, /* B */ ++ { 3, 2, 0, 0, 12 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | + AV_PIX_FMT_FLAG_ALPHA, +@@ -2191,10 +2243,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ +- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ ++ { 2, 2, 0, 0, 12 }, /* R */ ++ { 0, 2, 0, 0, 12 }, /* G */ ++ { 1, 2, 0, 0, 12 }, /* B */ ++ { 3, 2, 0, 0, 12 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, +@@ -2205,10 +2257,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 2, 2, 0, 0, 10 }, /* R */ ++ { 0, 2, 0, 0, 10 }, /* G */ ++ { 1, 2, 0, 0, 10 }, /* B */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | + AV_PIX_FMT_FLAG_ALPHA, +@@ -2219,10 +2271,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ +- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ +- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ +- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ ++ { 2, 2, 0, 0, 10 }, /* R */ ++ { 0, 2, 0, 0, 10 }, /* G */ ++ { 1, 2, 0, 0, 10 }, /* B */ ++ { 3, 2, 0, 0, 10 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, +@@ -2237,9 +2289,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ +- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ +- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ ++ { 2, 4, 0, 0, 32 }, /* R */ ++ { 0, 4, 0, 0, 32 }, /* G */ ++ { 1, 4, 0, 0, 32 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, +@@ -2250,9 +2302,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ +- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ +- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ ++ { 2, 4, 0, 0, 32 }, /* R */ ++ { 0, 4, 0, 0, 32 }, /* G */ ++ { 1, 4, 0, 0, 32 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB, + }, +@@ -2262,10 +2314,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ +- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ +- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ +- { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ ++ { 2, 4, 0, 0, 32 }, /* R */ ++ { 0, 4, 0, 0, 32 }, /* G */ ++ { 1, 4, 0, 0, 32 }, /* B */ ++ { 3, 4, 0, 0, 32 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB | +@@ -2277,10 +2329,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ +- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ +- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ +- { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ ++ { 2, 4, 0, 0, 32 }, /* R */ ++ { 0, 4, 0, 0, 32 }, /* G */ ++ { 1, 4, 0, 0, 32 }, /* B */ ++ { 3, 4, 0, 0, 32 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, +@@ -2299,7 +2351,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ ++ { 0, 4, 0, 0, 32 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT, + .alias = "yf32be", +@@ -2310,7 +2362,7 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ ++ { 0, 4, 0, 0, 32 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_FLOAT, + .alias = "yf32le", +@@ -2321,10 +2373,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ +- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ ++ { 3, 2, 0, 0, 12 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -2334,10 +2386,10 @@ + .log2_chroma_w = 1, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ +- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ ++ { 3, 2, 0, 0, 12 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -2347,10 +2399,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ +- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ ++ { 3, 2, 0, 0, 12 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -2360,10 +2412,10 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ +- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ +- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ +- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ ++ { 0, 2, 0, 0, 12 }, /* Y */ ++ { 1, 2, 0, 0, 12 }, /* U */ ++ { 2, 2, 0, 0, 12 }, /* V */ ++ { 3, 2, 0, 0, 12 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, + }, +@@ -2373,9 +2425,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */ +- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 2, 0, 0, 8 }, /* U */ ++ { 1, 2, 1, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -2385,9 +2437,9 @@ + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { +- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ +- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */ +- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */ ++ { 0, 1, 0, 0, 8 }, /* Y */ ++ { 1, 2, 1, 0, 8 }, /* U */ ++ { 1, 2, 0, 0, 8 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, +@@ -2395,10 +2447,277 @@ + .name = "vulkan", + .flags = AV_PIX_FMT_FLAG_HWACCEL, + }, ++ [AV_PIX_FMT_P210BE] = { ++ .name = "p210be", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 6, 10 }, /* Y */ ++ { 1, 4, 0, 6, 10 }, /* U */ ++ { 1, 4, 2, 6, 10 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_P210LE] = { ++ .name = "p210le", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 6, 10 }, /* Y */ ++ { 1, 4, 0, 6, 10 }, /* U */ ++ { 1, 4, 2, 6, 10 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR, ++ }, ++ [AV_PIX_FMT_P410BE] = { ++ .name = "p410be", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 6, 10 }, /* Y */ ++ { 1, 4, 0, 6, 10 }, /* U */ ++ { 1, 4, 2, 6, 10 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_P410LE] = { ++ .name = "p410le", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 6, 10 }, /* Y */ ++ { 1, 4, 0, 6, 10 }, /* U */ ++ { 1, 4, 2, 6, 10 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR, ++ }, ++ [AV_PIX_FMT_P216BE] = { ++ .name = "p216be", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 4, 0, 0, 16 }, /* U */ ++ { 1, 4, 2, 0, 16 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_P216LE] = { ++ .name = "p216le", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 4, 0, 0, 16 }, /* U */ ++ { 1, 4, 2, 0, 16 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR, ++ }, ++ [AV_PIX_FMT_P416BE] = { ++ .name = "p416be", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 4, 0, 0, 16 }, /* U */ ++ { 1, 4, 2, 0, 16 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_P416LE] = { ++ .name = "p416le", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 2, 0, 0, 16 }, /* Y */ ++ { 1, 4, 0, 0, 16 }, /* U */ ++ { 1, 4, 2, 0, 16 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_PLANAR, ++ }, ++ [AV_PIX_FMT_VUYA] = { ++ .name = "vuya", ++ .nb_components = 4, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 4, 2, 0, 8 }, /* Y */ ++ { 0, 4, 1, 0, 8 }, /* U */ ++ { 0, 4, 0, 0, 8 }, /* V */ ++ { 0, 4, 3, 0, 8 }, /* A */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_ALPHA, ++ }, ++ [AV_PIX_FMT_VUYX] = { ++ .name = "vuyx", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 4, 2, 0, 8 }, /* Y */ ++ { 0, 4, 1, 0, 8 }, /* U */ ++ { 0, 4, 0, 0, 8 }, /* V */ ++ }, ++ }, ++ [AV_PIX_FMT_RGBAF16BE] = { ++ .name = "rgbaf16be", ++ .nb_components = 4, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 8, 0, 0, 16 }, /* R */ ++ { 0, 8, 2, 0, 16 }, /* G */ ++ { 0, 8, 4, 0, 16 }, /* B */ ++ { 0, 8, 6, 0, 16 }, /* A */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | ++ AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_FLOAT, ++ }, ++ [AV_PIX_FMT_RGBAF16LE] = { ++ .name = "rgbaf16le", ++ .nb_components = 4, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 8, 0, 0, 16 }, /* R */ ++ { 0, 8, 2, 0, 16 }, /* G */ ++ { 0, 8, 4, 0, 16 }, /* B */ ++ { 0, 8, 6, 0, 16 }, /* A */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA | ++ AV_PIX_FMT_FLAG_FLOAT, ++ }, ++ [AV_PIX_FMT_Y212LE] = { ++ .name = "y212le", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 4, 0, 4, 12 }, /* Y */ ++ { 0, 8, 2, 4, 12 }, /* U */ ++ { 0, 8, 6, 4, 12 }, /* V */ ++ }, ++ }, ++ [AV_PIX_FMT_Y212BE] = { ++ .name = "y212be", ++ .nb_components = 3, ++ .log2_chroma_w = 1, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 4, 0, 4, 12 }, /* Y */ ++ { 0, 8, 2, 4, 12 }, /* U */ ++ { 0, 8, 6, 4, 12 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_XV30LE] = { ++ .name = "xv30le", ++ .nb_components= 3, ++ .log2_chroma_w= 0, ++ .log2_chroma_h= 0, ++ .comp = { ++ { 0, 4, 1, 2, 10 }, /* Y */ ++ { 0, 4, 0, 0, 10 }, /* U */ ++ { 0, 4, 2, 4, 10 }, /* V */ ++ }, ++ }, ++ [AV_PIX_FMT_XV30BE] = { ++ .name = "xv30be", ++ .nb_components= 3, ++ .log2_chroma_w= 0, ++ .log2_chroma_h= 0, ++ .comp = { ++ { 0, 32, 10, 0, 10 }, /* Y */ ++ { 0, 32, 0, 0, 10 }, /* U */ ++ { 0, 32, 20, 0, 10 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_BITSTREAM, ++ }, ++ [AV_PIX_FMT_XV36LE] = { ++ .name = "xv36le", ++ .nb_components= 3, ++ .log2_chroma_w= 0, ++ .log2_chroma_h= 0, ++ .comp = { ++ { 0, 8, 2, 4, 12 }, /* Y */ ++ { 0, 8, 0, 4, 12 }, /* U */ ++ { 0, 8, 4, 4, 12 }, /* V */ ++ }, ++ }, ++ [AV_PIX_FMT_XV36BE] = { ++ .name = "xv36be", ++ .nb_components= 3, ++ .log2_chroma_w= 0, ++ .log2_chroma_h= 0, ++ .comp = { ++ { 0, 8, 2, 4, 12 }, /* Y */ ++ { 0, 8, 0, 4, 12 }, /* U */ ++ { 0, 8, 4, 4, 12 }, /* V */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_BE, ++ }, ++ [AV_PIX_FMT_RGBF32BE] = { ++ .name = "rgbf32be", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 12, 0, 0, 32 }, /* R */ ++ { 0, 12, 4, 0, 32 }, /* G */ ++ { 0, 12, 8, 0, 32 }, /* B */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | ++ AV_PIX_FMT_FLAG_FLOAT, ++ }, ++ [AV_PIX_FMT_RGBF32LE] = { ++ .name = "rgbf32le", ++ .nb_components = 3, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 12, 0, 0, 32 }, /* R */ ++ { 0, 12, 4, 0, 32 }, /* G */ ++ { 0, 12, 8, 0, 32 }, /* B */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, ++ }, ++ [AV_PIX_FMT_RGBAF32BE] = { ++ .name = "rgbaf32be", ++ .nb_components = 4, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 16, 0, 0, 32 }, /* R */ ++ { 0, 16, 4, 0, 32 }, /* G */ ++ { 0, 16, 8, 0, 32 }, /* B */ ++ { 0, 16, 12, 0, 32 }, /* A */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | ++ AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA, ++ }, ++ [AV_PIX_FMT_RGBAF32LE] = { ++ .name = "rgbaf32le", ++ .nb_components = 4, ++ .log2_chroma_w = 0, ++ .log2_chroma_h = 0, ++ .comp = { ++ { 0, 16, 0, 0, 32 }, /* R */ ++ { 0, 16, 4, 0, 32 }, /* G */ ++ { 0, 16, 8, 0, 32 }, /* B */ ++ { 0, 16, 12, 0, 32 }, /* A */ ++ }, ++ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT | ++ AV_PIX_FMT_FLAG_ALPHA, ++ }, + }; +-#if FF_API_PLUS1_MINUS1 +-FF_ENABLE_DEPRECATION_WARNINGS +-#endif + + static const char * const color_range_names[] = { + [AVCOL_RANGE_UNSPECIFIED] = "unknown", +@@ -2515,10 +2834,6 @@ + pix_fmt = get_pix_fmt_internal(name2); + } + +-#if FF_API_VAAPI +- if (pix_fmt == AV_PIX_FMT_NONE && !strcmp(name, "vaapi")) +- pix_fmt = AV_PIX_FMT_VAAPI; +-#endif + return pix_fmt; + } + +@@ -2625,47 +2940,6 @@ + return ret; + } + +-void ff_check_pixfmt_descriptors(void){ +- int i, j; +- +- for (i=0; iname && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags) +- continue; +-// av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name); +- av_assert0(d->log2_chroma_w <= 3); +- av_assert0(d->log2_chroma_h <= 3); +- av_assert0(d->nb_components <= 4); +- av_assert0(d->name && d->name[0]); +- av_assert2(av_get_pix_fmt(d->name) == i); +- +- for (j=0; jcomp); j++) { +- const AVComponentDescriptor *c = &d->comp[j]; +- if(j>=d->nb_components) { +- av_assert0(!c->plane && !c->step && !c->offset && !c->shift && !c->depth); +- continue; +- } +- if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) { +- av_assert0(c->step >= c->depth); +- } else { +- av_assert0(8*c->step >= c->depth); +- } +- if (d->flags & AV_PIX_FMT_FLAG_BAYER) +- continue; +- av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0); +- av_assert0(tmp[0] == 0 && tmp[1] == 0); +- tmp[0] = tmp[1] = (1ULL << c->depth) - 1; +- av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2); +- } +- } +-} +- +- + enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt) + { + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); +@@ -2779,9 +3053,16 @@ + + for (i = 0; i < nb_components; i++) { + int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1); +- if (src_desc->comp[i].depth - 1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) { ++ int depth_delta = src_desc->comp[i].depth - 1 - depth_minus1; ++ if (depth_delta > 0 && (consider & FF_LOSS_DEPTH)) { + loss |= FF_LOSS_DEPTH; + score -= 65536 >> depth_minus1; ++ } else if (depth_delta < 0 && (consider & FF_LOSS_EXCESS_DEPTH)) { ++ // Favour formats where bit depth exactly matches. If all other ++ // scoring is equal, we'd rather use the bit depth that most closely ++ // matches the source. ++ loss |= FF_LOSS_EXCESS_DEPTH; ++ score += depth_delta; + } + } + +@@ -2801,6 +3082,28 @@ + } + } + ++ if (consider & FF_LOSS_EXCESS_RESOLUTION) { ++ // Favour formats where chroma subsampling exactly matches. If all other ++ // scoring is equal, we'd rather use the subsampling that most closely ++ // matches the source. ++ if (dst_desc->log2_chroma_w < src_desc->log2_chroma_w) { ++ loss |= FF_LOSS_EXCESS_RESOLUTION; ++ score -= 1 << (src_desc->log2_chroma_w - dst_desc->log2_chroma_w); ++ } ++ ++ if (dst_desc->log2_chroma_h < src_desc->log2_chroma_h) { ++ loss |= FF_LOSS_EXCESS_RESOLUTION; ++ score -= 1 << (src_desc->log2_chroma_h - dst_desc->log2_chroma_h); ++ } ++ ++ // don't favour 411 over 420, because 420 has much better support on the ++ // decoder side. ++ if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 2 && ++ dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 2) { ++ score += 4; ++ } ++ } ++ + if(consider & FF_LOSS_COLORSPACE) + switch(dst_color) { + case FF_COLOR_RGB: +@@ -2999,3 +3302,26 @@ + + return AVERROR(EINVAL); + } ++ ++int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos) ++{ ++ if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB) ++ return AVERROR(EINVAL); ++ pos--; ++ ++ *xpos = (pos&1) * 128; ++ *ypos = ((pos>>1)^(pos<4)) * 128; ++ ++ return 0; ++} ++ ++enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos) ++{ ++ int pos, xout, yout; ++ ++ for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) { ++ if (av_chroma_location_enum_to_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos) ++ return pos; ++ } ++ return AVCHROMA_LOC_UNSPECIFIED; ++} +diff -Naur a/media/ffvpx/libavutil/pixdesc.h b/media/ffvpx/libavutil/pixdesc.h +--- a/media/ffvpx/libavutil/pixdesc.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/pixdesc.h 2023-04-06 12:50:06.977471295 +0200 +@@ -26,7 +26,6 @@ + + #include "attributes.h" + #include "pixfmt.h" +-#include "version.h" + + typedef struct AVComponentDescriptor { + /** +@@ -56,17 +55,6 @@ + * Number of bits in the component. + */ + int depth; +- +-#if FF_API_PLUS1_MINUS1 +- /** deprecated, use step instead */ +- attribute_deprecated int step_minus1; +- +- /** deprecated, use depth instead */ +- attribute_deprecated int depth_minus1; +- +- /** deprecated, use offset instead */ +- attribute_deprecated int offset_plus1; +-#endif + } AVComponentDescriptor; + + /** +@@ -147,26 +135,6 @@ + */ + #define AV_PIX_FMT_FLAG_RGB (1 << 5) + +-#if FF_API_PSEUDOPAL +-/** +- * The pixel format is "pseudo-paletted". This means that it contains a +- * fixed palette in the 2nd plane but the palette is fixed/constant for each +- * PIX_FMT. This allows interpreting the data as if it was PAL8, which can +- * in some cases be simpler. Or the data can be interpreted purely based on +- * the pixel format without using the palette. +- * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 +- * +- * @deprecated This flag is deprecated, and will be removed. When it is removed, +- * the extra palette allocation in AVFrame.data[1] is removed as well. Only +- * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a +- * palette. Starting with FFmpeg versions which have this flag deprecated, the +- * extra "pseudo" palette is already ignored, and API users are not required to +- * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required +- * before the deprecation, though). +- */ +-#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) +-#endif +- + /** + * The pixel format has an alpha channel. This is set on all formats that + * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always +@@ -297,6 +265,28 @@ + int av_chroma_location_from_name(const char *name); + + /** ++ * Converts AVChromaLocation to swscale x/y chroma position. ++ * ++ * The positions represent the chroma (0,0) position in a coordinates system ++ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 ++ * ++ * @param xpos horizontal chroma sample position ++ * @param ypos vertical chroma sample position ++ */ ++int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos); ++ ++/** ++ * Converts swscale x/y chroma position to AVChromaLocation. ++ * ++ * The positions represent the chroma (0,0) position in a coordinates system ++ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 ++ * ++ * @param xpos horizontal chroma sample position ++ * @param ypos vertical chroma sample position ++ */ ++enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos); ++ ++/** + * Return the pixel format corresponding to name. + * + * If there is no pixel format with name name, then looks for a +@@ -389,12 +379,15 @@ + */ + enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); + +-#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ +-#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ +-#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ +-#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ +-#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ +-#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ ++#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ ++#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ ++#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ ++#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ ++#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ ++#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ ++#define FF_LOSS_EXCESS_RESOLUTION 0x0040 /**< loss due to unneeded extra resolution */ ++#define FF_LOSS_EXCESS_DEPTH 0x0080 /**< loss due to unneeded extra color depth */ ++ + + /** + * Compute what kind of losses will occur when converting from one specific +diff -Naur a/media/ffvpx/libavutil/pixelutils.c b/media/ffvpx/libavutil/pixelutils.c +--- a/media/ffvpx/libavutil/pixelutils.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/pixelutils.c 2023-04-06 12:49:40.262395253 +0200 +@@ -16,12 +16,17 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include ++ + #include "config.h" +-#include "common.h" + #include "pixelutils.h" +-#include "internal.h" + + #if CONFIG_PIXELUTILS ++#include ++#include ++ ++#include "attributes.h" ++#include "macros.h" + + #include "x86/pixelutils.h" + +@@ -60,7 +65,8 @@ + block_sad_16x16_c, + block_sad_32x32_c, + }; +- ++#else ++#include "log.h" + #endif /* CONFIG_PIXELUTILS */ + + av_pixelutils_sad_fn av_pixelutils_get_sad_fn(int w_bits, int h_bits, int aligned, void *log_ctx) +diff -Naur a/media/ffvpx/libavutil/pixelutils.h b/media/ffvpx/libavutil/pixelutils.h +--- a/media/ffvpx/libavutil/pixelutils.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/pixelutils.h 2023-04-06 12:49:40.262395253 +0200 +@@ -21,7 +21,6 @@ + + #include + #include +-#include "common.h" + + /** + * Sum of abs(src1[x] - src2[x]) +diff -Naur a/media/ffvpx/libavutil/pixfmt.h b/media/ffvpx/libavutil/pixfmt.h +--- a/media/ffvpx/libavutil/pixfmt.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/pixfmt.h 2023-04-06 12:50:24.494176623 +0200 +@@ -112,21 +112,11 @@ + AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined + AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined + +-#if FF_API_VAAPI +- /** @name Deprecated pixel formats */ +- /**@{*/ +- AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers +- AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers +- AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID +- /**@}*/ +- AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, +-#else + /** + * Hardware acceleration through VA-API, data[3] contains a + * VASurfaceID. + */ + AV_PIX_FMT_VAAPI, +-#endif + + AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian +@@ -216,8 +206,36 @@ + AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian + AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian + /** +- * HW acceleration through QSV, data[3] contains a pointer to the +- * mfxFrameSurface1 structure. ++ * HW acceleration through QSV, data[3] contains a pointer to the ++ * mfxFrameSurface1 structure. ++ * ++ * Before FFmpeg 5.0: ++ * mfxFrameSurface1.Data.MemId contains a pointer when importing ++ * the following frames as QSV frames: ++ * ++ * VAAPI: ++ * mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID ++ * ++ * DXVA2: ++ * mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9 ++ * ++ * FFmpeg 5.0 and above: ++ * mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair ++ * structure when importing the following frames as QSV frames: ++ * ++ * VAAPI: ++ * mfxHDLPair.first contains a VASurfaceID pointer. ++ * mfxHDLPair.second is always MFX_INFINITE. ++ * ++ * DXVA2: ++ * mfxHDLPair.first contains IDirect3DSurface9 pointer. ++ * mfxHDLPair.second is always MFX_INFINITE. ++ * ++ * D3D11: ++ * mfxHDLPair.first contains a ID3D11Texture2D pointer. ++ * mfxHDLPair.second contains the texture array index of the frame if the ++ * ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a ++ * normal texture. + */ + AV_PIX_FMT_QSV, + /** +@@ -270,7 +288,9 @@ + AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian + AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian + ++#if FF_API_XVMC + AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing ++#endif + + AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian + AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian +@@ -360,6 +380,46 @@ + + AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined + AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined ++ AV_PIX_FMT_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined ++ AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), big-endian, X=unused/undefined ++ ++ AV_PIX_FMT_P210BE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian ++ AV_PIX_FMT_P210LE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian ++ ++ AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian ++ AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian ++ ++ AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian ++ AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, little-endian ++ ++ AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian ++ AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian ++ ++ AV_PIX_FMT_VUYA, ///< packed VUYA 4:4:4, 32bpp, VUYAVUYA... ++ ++ AV_PIX_FMT_RGBAF16BE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian ++ AV_PIX_FMT_RGBAF16LE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian ++ ++ AV_PIX_FMT_VUYX, ///< packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined ++ ++ AV_PIX_FMT_P012LE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, little-endian ++ AV_PIX_FMT_P012BE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, big-endian ++ ++ AV_PIX_FMT_Y212BE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, big-endian ++ AV_PIX_FMT_Y212LE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, little-endian ++ ++ AV_PIX_FMT_XV30BE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), big-endian, variant of Y410 where alpha channel is left undefined ++ AV_PIX_FMT_XV30LE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channel is left undefined ++ ++ AV_PIX_FMT_XV36BE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian, variant of Y412 where alpha channel is left undefined ++ AV_PIX_FMT_XV36LE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian, variant of Y412 where alpha channel is left undefined ++ ++ AV_PIX_FMT_RGBF32BE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian ++ AV_PIX_FMT_RGBF32LE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian ++ ++ AV_PIX_FMT_RGBAF32BE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian ++ AV_PIX_FMT_RGBAF32LE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian ++ + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions + }; + +@@ -446,39 +506,54 @@ + #define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) + #define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) + #define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) ++#define AV_PIX_FMT_P012 AV_PIX_FMT_NE(P012BE, P012LE) + #define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) + + #define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) ++#define AV_PIX_FMT_Y212 AV_PIX_FMT_NE(Y212BE, Y212LE) ++#define AV_PIX_FMT_XV30 AV_PIX_FMT_NE(XV30BE, XV30LE) ++#define AV_PIX_FMT_XV36 AV_PIX_FMT_NE(XV36BE, XV36LE) + #define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) ++#define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE) ++ ++#define AV_PIX_FMT_P210 AV_PIX_FMT_NE(P210BE, P210LE) ++#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE) ++#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) ++#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) ++ ++#define AV_PIX_FMT_RGBAF16 AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE) ++ ++#define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE) ++#define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE) + + /** + * Chromaticity coordinates of the source primaries. +- * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. ++ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ITU-T H.273. + */ + enum AVColorPrimaries { + AVCOL_PRI_RESERVED0 = 0, +- AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B ++ AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_RESERVED = 3, + AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC +- AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above ++ AVCOL_PRI_SMPTE240M = 7, ///< identical to above, also called "SMPTE C" even though it uses D65 + AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C + AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) + AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, + AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 + AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 +- AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors ++ AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors + AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, + AVCOL_PRI_NB ///< Not part of ABI + }; + + /** + * Color Transfer Characteristic. +- * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. ++ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2. + */ + enum AVColorTransferCharacteristic { + AVCOL_TRC_RESERVED0 = 0, +@@ -507,18 +582,18 @@ + + /** + * YUV colorspace type. +- * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. ++ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. + */ + enum AVColorSpace { +- AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) +- AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B ++ AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1 ++ AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, +- AVCOL_SPC_RESERVED = 3, ++ AVCOL_SPC_RESERVED = 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are + AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 +- AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC +- AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above +- AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 ++ AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above ++ AVCOL_SPC_SMPTE240M = 7, ///< derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries ++ AVCOL_SPC_YCGCO = 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, + AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system + AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system +@@ -540,9 +615,9 @@ + * recommended, as it also defines the full range representation. + * + * Common definitions: +- * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, ++ * - For RGB and luma planes such as Y in YCbCr and I in ICtCp, + * 'E' is the original value in range of 0.0 to 1.0. +- * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original ++ * - For chroma planes such as Cb,Cr and Ct,Cp, 'E' is the original + * value in range of -0.5 to 0.5. + * - 'n' is the output bit depth. + * - For additional definitions such as rounding and clipping to valid n +@@ -554,13 +629,13 @@ + /** + * Narrow or limited range content. + * +- * - For luminance planes: ++ * - For luma planes: + * + * (219 * E + 16) * 2^(n-8) + * + * F.ex. the range of 16-235 for 8 bits + * +- * - For chrominance planes: ++ * - For chroma planes: + * + * (224 * E + 128) * 2^(n-8) + * +@@ -571,13 +646,13 @@ + /** + * Full range content. + * +- * - For RGB and luminance planes: ++ * - For RGB and luma planes: + * + * (2^n - 1) * E + * + * F.ex. the range of 0-255 for 8 bits + * +- * - For chrominance planes: ++ * - For chroma planes: + * + * (2^n - 1) * E + 2^(n - 1) + * +diff -Naur a/media/ffvpx/libavutil/qsort.h b/media/ffvpx/libavutil/qsort.h +--- a/media/ffvpx/libavutil/qsort.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/qsort.h 2023-04-06 12:49:40.262395253 +0200 +@@ -21,7 +21,7 @@ + #ifndef AVUTIL_QSORT_H + #define AVUTIL_QSORT_H + +-#include "common.h" ++#include "macros.h" + + + /** +diff -Naur a/media/ffvpx/libavutil/rational.h b/media/ffvpx/libavutil/rational.h +--- a/media/ffvpx/libavutil/rational.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/rational.h 2023-04-06 12:50:06.977471295 +0200 +@@ -179,7 +179,8 @@ + * Find which of the two rationals is closer to another rational. + * + * @param q Rational to be compared against +- * @param q1,q2 Rationals to be tested ++ * @param q1 Rational to be tested ++ * @param q2 Rational to be tested + * @return One of the following values: + * - 1 if `q1` is nearer to `q` than `q2` + * - -1 if `q2` is nearer to `q` than `q1` +diff -Naur a/media/ffvpx/libavutil/samplefmt.c b/media/ffvpx/libavutil/samplefmt.c +--- a/media/ffvpx/libavutil/samplefmt.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/samplefmt.c 2023-04-06 12:49:40.262395253 +0200 +@@ -16,11 +16,13 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include "common.h" ++#include "error.h" ++#include "macros.h" ++#include "mem.h" + #include "samplefmt.h" + ++#include + #include +-#include + #include + + typedef struct SampleFmtInfo { +@@ -160,13 +162,20 @@ + if (buf_size < 0) + return buf_size; + ++ if (linesize) ++ *linesize = line_size; ++ ++ memset(audio_data, 0, planar ++ ? sizeof(*audio_data) * nb_channels ++ : sizeof(*audio_data)); ++ ++ if (!buf) ++ return buf_size; ++ + audio_data[0] = (uint8_t *)buf; + for (ch = 1; planar && ch < nb_channels; ch++) + audio_data[ch] = audio_data[ch-1] + line_size; + +- if (linesize) +- *linesize = line_size; +- + return buf_size; + } + +diff -Naur a/media/ffvpx/libavutil/samplefmt.h b/media/ffvpx/libavutil/samplefmt.h +--- a/media/ffvpx/libavutil/samplefmt.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/samplefmt.h 2023-04-06 12:50:06.977471295 +0200 +@@ -21,9 +21,6 @@ + + #include + +-#include "avutil.h" +-#include "attributes.h" +- + /** + * @addtogroup lavu_audio + * @{ +@@ -195,9 +192,8 @@ + * @param nb_samples the number of samples in a single channel + * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) +- * @return >=0 on success or a negative error code on failure +- * @todo return minimum size in bytes required for the buffer in case +- * of success at the next bump ++ * @return minimum size in bytes required for the buffer on success, ++ * or a negative error code on failure + */ + int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, + const uint8_t *buf, +@@ -217,6 +213,7 @@ + * @param[out] linesize aligned size for audio buffer(s), may be NULL + * @param nb_channels number of audio channels + * @param nb_samples number of samples per channel ++ * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return the size of the allocated buffer in case of success at the next bump +diff -Naur a/media/ffvpx/libavutil/slicethread.c b/media/ffvpx/libavutil/slicethread.c +--- a/media/ffvpx/libavutil/slicethread.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/slicethread.c 2023-04-06 12:50:06.977471295 +0200 +@@ -17,11 +17,15 @@ + */ + + #include ++#include "cpu.h" ++#include "internal.h" + #include "slicethread.h" + #include "mem.h" + #include "thread.h" + #include "avassert.h" + ++#define MAX_AUTO_THREADS 16 ++ + #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS + + typedef struct WorkerContext { +@@ -103,7 +107,7 @@ + if (!nb_threads) { + int nb_cpus = av_cpu_count(); + if (nb_cpus > 1) +- nb_threads = nb_cpus + 1; ++ nb_threads = FFMIN(nb_cpus + 1, MAX_AUTO_THREADS); + else + nb_threads = 1; + } +@@ -239,7 +243,7 @@ + int nb_threads) + { + *pctx = NULL; +- return AVERROR(EINVAL); ++ return AVERROR(ENOSYS); + } + + void avpriv_slicethread_execute(AVSliceThread *ctx, int nb_jobs, int execute_main) +diff -Naur a/media/ffvpx/libavutil/thread.h b/media/ffvpx/libavutil/thread.h +--- a/media/ffvpx/libavutil/thread.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/thread.h 2023-04-06 12:50:06.977471295 +0200 +@@ -24,6 +24,12 @@ + + #include "config.h" + ++#if HAVE_PRCTL ++#include ++#endif ++ ++#include "error.h" ++ + #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS + + #if HAVE_PTHREADS +@@ -31,7 +37,10 @@ + + #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 + ++#include ++ + #include "log.h" ++#include "macros.h" + + #define ASSERT_PTHREAD_ABORT(func, ret) do { \ + char errbuf[AV_ERROR_MAX_STRING_SIZE] = ""; \ +@@ -183,4 +192,13 @@ + + #endif + ++static inline int ff_thread_setname(const char *name) ++{ ++#if HAVE_PRCTL ++ return AVERROR(prctl(PR_SET_NAME, name)); ++#endif ++ ++ return AVERROR(ENOSYS); ++} ++ + #endif /* AVUTIL_THREAD_H */ +diff -Naur a/media/ffvpx/libavutil/threadmessage.c b/media/ffvpx/libavutil/threadmessage.c +--- a/media/ffvpx/libavutil/threadmessage.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/threadmessage.c 2023-04-06 12:49:40.262395253 +0200 +@@ -18,13 +18,15 @@ + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include + #include "fifo.h" ++#include "mem.h" + #include "threadmessage.h" + #include "thread.h" + + struct AVThreadMessageQueue { + #if HAVE_THREADS +- AVFifoBuffer *fifo; ++ AVFifo *fifo; + pthread_mutex_t lock; + pthread_cond_t cond_recv; + pthread_cond_t cond_send; +@@ -64,7 +66,7 @@ + av_free(rmq); + return AVERROR(ret); + } +- if (!(rmq->fifo = av_fifo_alloc(elsize * nelem))) { ++ if (!(rmq->fifo = av_fifo_alloc2(nelem, elsize, 0))) { + pthread_cond_destroy(&rmq->cond_send); + pthread_cond_destroy(&rmq->cond_recv); + pthread_mutex_destroy(&rmq->lock); +@@ -93,7 +95,7 @@ + #if HAVE_THREADS + if (*mq) { + av_thread_message_flush(*mq); +- av_fifo_freep(&(*mq)->fifo); ++ av_fifo_freep2(&(*mq)->fifo); + pthread_cond_destroy(&(*mq)->cond_send); + pthread_cond_destroy(&(*mq)->cond_recv); + pthread_mutex_destroy(&(*mq)->lock); +@@ -107,9 +109,9 @@ + #if HAVE_THREADS + int ret; + pthread_mutex_lock(&mq->lock); +- ret = av_fifo_size(mq->fifo); ++ ret = av_fifo_can_read(mq->fifo); + pthread_mutex_unlock(&mq->lock); +- return ret / mq->elsize; ++ return ret; + #else + return AVERROR(ENOSYS); + #endif +@@ -121,14 +123,14 @@ + void *msg, + unsigned flags) + { +- while (!mq->err_send && av_fifo_space(mq->fifo) < mq->elsize) { ++ while (!mq->err_send && !av_fifo_can_write(mq->fifo)) { + if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) + return AVERROR(EAGAIN); + pthread_cond_wait(&mq->cond_send, &mq->lock); + } + if (mq->err_send) + return mq->err_send; +- av_fifo_generic_write(mq->fifo, msg, mq->elsize, NULL); ++ av_fifo_write(mq->fifo, msg, 1); + /* one message is sent, signal one receiver */ + pthread_cond_signal(&mq->cond_recv); + return 0; +@@ -138,14 +140,14 @@ + void *msg, + unsigned flags) + { +- while (!mq->err_recv && av_fifo_size(mq->fifo) < mq->elsize) { ++ while (!mq->err_recv && !av_fifo_can_read(mq->fifo)) { + if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) + return AVERROR(EAGAIN); + pthread_cond_wait(&mq->cond_recv, &mq->lock); + } +- if (av_fifo_size(mq->fifo) < mq->elsize) ++ if (!av_fifo_can_read(mq->fifo)) + return mq->err_recv; +- av_fifo_generic_read(mq->fifo, msg, mq->elsize, NULL); ++ av_fifo_read(mq->fifo, msg, 1); + /* one message space appeared, signal one sender */ + pthread_cond_signal(&mq->cond_send); + return 0; +@@ -208,25 +210,25 @@ + } + + #if HAVE_THREADS +-static void free_func_wrap(void *arg, void *msg, int size) ++static int free_func_wrap(void *arg, void *buf, size_t *nb_elems) + { + AVThreadMessageQueue *mq = arg; +- mq->free_func(msg); ++ uint8_t *msg = buf; ++ for (size_t i = 0; i < *nb_elems; i++) ++ mq->free_func(msg + i * mq->elsize); ++ return 0; + } + #endif + + void av_thread_message_flush(AVThreadMessageQueue *mq) + { + #if HAVE_THREADS +- int used, off; +- void *free_func = mq->free_func; ++ size_t used; + + pthread_mutex_lock(&mq->lock); +- used = av_fifo_size(mq->fifo); +- if (free_func) +- for (off = 0; off < used; off += mq->elsize) +- av_fifo_generic_peek_at(mq->fifo, mq, off, mq->elsize, free_func_wrap); +- av_fifo_drain(mq->fifo, used); ++ used = av_fifo_can_read(mq->fifo); ++ if (mq->free_func) ++ av_fifo_read_to_cb(mq->fifo, free_func_wrap, mq, &used); + /* only the senders need to be notified since the queue is empty and there + * is nothing to read */ + pthread_cond_broadcast(&mq->cond_send); +diff -Naur a/media/ffvpx/libavutil/time.c b/media/ffvpx/libavutil/time.c +--- a/media/ffvpx/libavutil/time.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/time.c 2023-04-06 12:50:20.234005184 +0200 +@@ -33,7 +33,7 @@ + #include + #endif + +-#include "time.h" ++#include "fftime.h" + #include "error.h" + + int64_t av_gettime(void) +diff -Naur a/media/ffvpx/libavutil/timecode.c b/media/ffvpx/libavutil/timecode.c +--- a/media/ffvpx/libavutil/timecode.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/timecode.c 2023-04-06 12:49:40.262395253 +0200 +@@ -27,6 +27,7 @@ + */ + + #include ++#include "common.h" + #include "timecode.h" + #include "log.h" + #include "error.h" +@@ -103,7 +104,7 @@ + { + int fps = tc->fps; + int drop = tc->flags & AV_TIMECODE_FLAG_DROPFRAME; +- int hh, mm, ss, ff, neg = 0; ++ int hh, mm, ss, ff, ff_len, neg = 0; + + framenum += tc->start; + if (drop) +@@ -118,9 +119,10 @@ + hh = framenum / (fps*3600LL); + if (tc->flags & AV_TIMECODE_FLAG_24HOURSMAX) + hh = hh % 24; +- snprintf(buf, AV_TIMECODE_STR_SIZE, "%s%02d:%02d:%02d%c%02d", ++ ff_len = fps > 10000 ? 5 : fps > 1000 ? 4 : fps > 100 ? 3 : fps > 10 ? 2 : 1; ++ snprintf(buf, AV_TIMECODE_STR_SIZE, "%s%02d:%02d:%02d%c%0*d", + neg ? "-" : "", +- hh, mm, ss, drop ? ';' : ':', ff); ++ hh, mm, ss, drop ? ';' : ':', ff_len, ff); + return buf; + } + +diff -Naur a/media/ffvpx/libavutil/timer.h b/media/ffvpx/libavutil/timer.h +--- a/media/ffvpx/libavutil/timer.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/timer.h 2023-04-06 12:50:06.977471295 +0200 +@@ -42,10 +42,13 @@ + #include + #include + +-#if HAVE_MACH_ABSOLUTE_TIME ++#if CONFIG_MACOS_KPERF ++#include "macos_kperf.h" ++#elif HAVE_MACH_ABSOLUTE_TIME + #include + #endif + ++#include "common.h" + #include "log.h" + + #if ARCH_AARCH64 +@@ -54,6 +57,8 @@ + # include "arm/timer.h" + #elif ARCH_PPC + # include "ppc/timer.h" ++#elif ARCH_RISCV ++# include "riscv/timer.h" + #elif ARCH_X86 + # include "x86/timer.h" + #endif +@@ -125,6 +130,16 @@ + read(linux_perf_fd, &tperf, sizeof(tperf)); \ + TIMER_REPORT(id, tperf) + ++#elif CONFIG_MACOS_KPERF ++ ++#define START_TIMER \ ++ uint64_t tperf; \ ++ ff_kperf_init(); \ ++ tperf = ff_kperf_cycles(); ++ ++#define STOP_TIMER(id) \ ++ TIMER_REPORT(id, ff_kperf_cycles() - tperf); ++ + #elif defined(AV_READ_TIME) + #define START_TIMER \ + uint64_t tend; \ +diff -Naur a/media/ffvpx/libavutil/utils.c b/media/ffvpx/libavutil/utils.c +--- a/media/ffvpx/libavutil/utils.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/utils.c 2023-04-06 12:49:40.262395253 +0200 +@@ -19,60 +19,12 @@ + #include "config.h" + #include "avutil.h" + #include "avassert.h" +-#include "samplefmt.h" +-#include "internal.h" + + /** + * @file + * various utility functions + */ + +-#include "libavutil/ffversion.h" +-const char av_util_ffversion[] = "FFmpeg version " FFMPEG_VERSION; +- +-const char *av_version_info(void) +-{ +- return FFMPEG_VERSION; +-} +- +-unsigned avutil_version(void) +-{ +- static int checks_done; +- if (checks_done) +- return LIBAVUTIL_VERSION_INT; +- +- av_assert0(AV_SAMPLE_FMT_DBLP == 9); +- av_assert0(AVMEDIA_TYPE_ATTACHMENT == 4); +- av_assert0(AV_PICTURE_TYPE_BI == 7); +- av_assert0(LIBAVUTIL_VERSION_MICRO >= 100); +- av_assert0(HAVE_MMX2 == HAVE_MMXEXT); +- +- av_assert0(((size_t)-1) > 0); // C guarantees this but if false on a platform we care about revert at least b284e1ffe343d6697fb950d1ee517bafda8a9844 +- +- if (av_sat_dadd32(1, 2) != 5) { +- av_log(NULL, AV_LOG_FATAL, "Libavutil has been built with a broken binutils, please upgrade binutils and rebuild\n"); +- abort(); +- } +- +- if (llrint(1LL<<60) != 1LL<<60) { +- av_log(NULL, AV_LOG_ERROR, "Libavutil has been linked to a broken llrint()\n"); +- } +- +- checks_done = 1; +- return LIBAVUTIL_VERSION_INT; +-} +- +-const char *avutil_configuration(void) +-{ +- return FFMPEG_CONFIGURATION; +-} +- +-const char *avutil_license(void) +-{ +-#define LICENSE_PREFIX "libavutil license: " +- return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1]; +-} +- + const char *av_get_media_type_string(enum AVMediaType media_type) + { + switch (media_type) { +diff -Naur a/media/ffvpx/libavutil/version.h b/media/ffvpx/libavutil/version.h +--- a/media/ffvpx/libavutil/version.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/version.h 2023-04-06 12:50:24.494176623 +0200 +@@ -78,8 +78,8 @@ + * @{ + */ + +-#define LIBAVUTIL_VERSION_MAJOR 56 +-#define LIBAVUTIL_VERSION_MINOR 70 ++#define LIBAVUTIL_VERSION_MAJOR 58 ++#define LIBAVUTIL_VERSION_MINOR 3 + #define LIBAVUTIL_VERSION_MICRO 100 + + #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ +@@ -105,42 +105,14 @@ + * @{ + */ + +-#ifndef FF_API_VAAPI +-#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_FRAME_QP +-#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_PLUS1_MINUS1 +-#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_ERROR_FRAME +-#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_PKT_PTS +-#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_CRYPTO_SIZE_T +-#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_FRAME_GET_SET +-#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_PSEUDOPAL +-#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_CHILD_CLASS_NEXT +-#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_BUFFER_SIZE_T +-#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) +-#endif +-#ifndef FF_API_D2STR +-#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) +-#endif +-#ifndef FF_API_DECLARE_ALIGNED +-#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) +-#endif ++#define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_FIFO_OLD_API (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_OLD_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_AV_FOPEN_UTF8 (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_PKT_DURATION (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_REORDERED_OPAQUE (LIBAVUTIL_VERSION_MAJOR < 59) ++#define FF_API_FRAME_PICTURE_NUMBER (LIBAVUTIL_VERSION_MAJOR < 59) + + /** + * @} +diff -Naur a/media/ffvpx/libavutil/video_enc_params.c b/media/ffvpx/libavutil/video_enc_params.c +--- a/media/ffvpx/libavutil/video_enc_params.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/video_enc_params.c 2023-04-06 12:50:24.494176623 +0200 +@@ -16,12 +16,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +-#include + #include + #include + + #include "buffer.h" +-#include "common.h" + #include "frame.h" + #include "mem.h" + #include "video_enc_params.h" +@@ -29,10 +27,14 @@ + AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, + unsigned int nb_blocks, size_t *out_size) + { ++ struct TestStruct { ++ AVVideoEncParams p; ++ AVVideoBlockParams b; ++ }; ++ const size_t blocks_offset = offsetof(struct TestStruct, b); ++ size_t size = blocks_offset; + AVVideoEncParams *par; +- size_t size; + +- size = sizeof(*par); + if (nb_blocks > (SIZE_MAX - size) / sizeof(AVVideoBlockParams)) + return NULL; + size += sizeof(AVVideoBlockParams) * nb_blocks; +@@ -44,7 +46,7 @@ + par->type = type; + par->nb_blocks = nb_blocks; + par->block_size = sizeof(AVVideoBlockParams); +- par->blocks_offset = sizeof(*par); ++ par->blocks_offset = blocks_offset; + + if (out_size) + *out_size = size; +@@ -63,10 +65,6 @@ + par = av_video_enc_params_alloc(type, nb_blocks, &size); + if (!par) + return NULL; +- if (size > INT_MAX) { +- av_free(par); +- return NULL; +- } + buf = av_buffer_create((uint8_t *)par, size, NULL, NULL, 0); + if (!buf) { + av_freep(&par); +diff -Naur a/media/ffvpx/libavutil/x86/cpu.c b/media/ffvpx/libavutil/x86/cpu.c +--- a/media/ffvpx/libavutil/x86/cpu.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/cpu.c 2023-04-06 12:49:40.262395253 +0200 +@@ -150,9 +150,13 @@ + rval |= AV_CPU_FLAG_AVX2; + #if HAVE_AVX512 /* F, CD, BW, DQ, VL */ + if ((xcr0_lo & 0xe0) == 0xe0) { /* OPMASK/ZMM state */ +- if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000) ++ if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000) { + rval |= AV_CPU_FLAG_AVX512; +- ++#if HAVE_AVX512ICL ++ if ((ebx & 0xd0200000) == 0xd0200000 && (ecx & 0x5f42) == 0x5f42) ++ rval |= AV_CPU_FLAG_AVX512ICL; ++#endif /* HAVE_AVX512ICL */ ++ } + } + #endif /* HAVE_AVX512 */ + #endif /* HAVE_AVX2 */ +@@ -196,6 +200,10 @@ + used unless explicitly disabled by checking AV_CPU_FLAG_AVXSLOW. */ + if ((family == 0x15 || family == 0x16) && (rval & AV_CPU_FLAG_AVX)) + rval |= AV_CPU_FLAG_AVXSLOW; ++ ++ /* Zen 3 and earlier have slow gather */ ++ if ((family <= 0x19) && (rval & AV_CPU_FLAG_AVX2)) ++ rval |= AV_CPU_FLAG_SLOW_GATHER; + } + + /* XOP and FMA4 use the AVX instruction coding scheme, so they can't be +@@ -235,6 +243,10 @@ + if ((rval & AV_CPU_FLAG_SSSE3) && !(rval & AV_CPU_FLAG_SSE4) && + family == 6 && model < 23) + rval |= AV_CPU_FLAG_SSSE3SLOW; ++ ++ /* Haswell has slow gather */ ++ if ((rval & AV_CPU_FLAG_AVX2) && family == 6 && model < 70) ++ rval |= AV_CPU_FLAG_SLOW_GATHER; + } + + #endif /* cpuid */ +diff -Naur a/media/ffvpx/libavutil/x86/cpu.h b/media/ffvpx/libavutil/x86/cpu.h +--- a/media/ffvpx/libavutil/x86/cpu.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/cpu.h 2023-04-06 12:49:40.262395253 +0200 +@@ -80,6 +80,7 @@ + #define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX) + #define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI) + #define EXTERNAL_AVX512(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512) ++#define EXTERNAL_AVX512ICL(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512ICL) + + #define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW) + #define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT) +diff -Naur a/media/ffvpx/libavutil/x86/cpuid.asm b/media/ffvpx/libavutil/x86/cpuid.asm +--- a/media/ffvpx/libavutil/x86/cpuid.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/cpuid.asm 2023-04-06 12:49:40.262395253 +0200 +@@ -21,7 +21,7 @@ + ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ;****************************************************************************** + +-%include "x86util.asm" ++%include "libavutil/x86/x86util.asm" + + SECTION .text + +diff -Naur a/media/ffvpx/libavutil/x86/emms.asm b/media/ffvpx/libavutil/x86/emms.asm +--- a/media/ffvpx/libavutil/x86/emms.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/emms.asm 2023-04-06 12:49:40.262395253 +0200 +@@ -18,7 +18,7 @@ + ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ;****************************************************************************** + +-%include "x86util.asm" ++%include "libavutil/x86/x86util.asm" + + SECTION .text + +diff -Naur a/media/ffvpx/libavutil/x86/emms.h b/media/ffvpx/libavutil/x86/emms.h +--- a/media/ffvpx/libavutil/x86/emms.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/emms.h 2023-04-06 12:49:40.262395253 +0200 +@@ -21,11 +21,14 @@ + + #include "config.h" + #include "libavutil/attributes.h" +-#include "libavutil/cpu.h" + + void avpriv_emms_asm(void); + + #if HAVE_MMX_INLINE ++#ifndef __MMX__ ++#include "libavutil/cpu.h" ++#endif ++ + # define emms_c emms_c + /** + * Empty mmx state. +diff -Naur a/media/ffvpx/libavutil/x86/fixed_dsp.asm b/media/ffvpx/libavutil/x86/fixed_dsp.asm +--- a/media/ffvpx/libavutil/x86/fixed_dsp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/fixed_dsp.asm 2023-04-06 12:49:40.262395253 +0200 +@@ -20,7 +20,7 @@ + ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ;****************************************************************************** + +-%include "x86util.asm" ++%include "libavutil/x86/x86util.asm" + + SECTION .text + +diff -Naur a/media/ffvpx/libavutil/x86/fixed_dsp_init.c b/media/ffvpx/libavutil/x86/fixed_dsp_init.c +--- a/media/ffvpx/libavutil/x86/fixed_dsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/fixed_dsp_init.c 2023-04-06 12:50:06.977471295 +0200 +@@ -23,7 +23,7 @@ + #include "libavutil/fixed_dsp.h" + #include "cpu.h" + +-void ff_butterflies_fixed_sse2(int *src0, int *src1, int len); ++void ff_butterflies_fixed_sse2(int *av_restrict src0, int *av_restrict src1, int len); + + av_cold void ff_fixed_dsp_init_x86(AVFixedDSPContext *fdsp) + { +diff -Naur a/media/ffvpx/libavutil/x86/float_dsp.asm b/media/ffvpx/libavutil/x86/float_dsp.asm +--- a/media/ffvpx/libavutil/x86/float_dsp.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/float_dsp.asm 2023-04-06 12:50:24.494176623 +0200 +@@ -20,7 +20,7 @@ + ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ;****************************************************************************** + +-%include "x86util.asm" ++%include "libavutil/x86/x86util.asm" + + SECTION_RODATA 32 + pd_reverse: dd 7, 6, 5, 4, 3, 2, 1, 0 +@@ -48,7 +48,7 @@ + + sub lenq, 64 + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse +@@ -141,7 +141,7 @@ + %endif ; mmsize + sub lenq, 64 + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse +@@ -178,7 +178,7 @@ + mova [dstq+lenq], m1 + sub lenq, mmsize + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse +@@ -233,7 +233,7 @@ + movaps [dstq+lenq+3*mmsize], m4 + sub lenq, mmsize*4 + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse2 +@@ -280,7 +280,7 @@ + movaps [dstq+lenq+mmsize], m2 + sub lenq, 2*mmsize + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse2 +@@ -294,7 +294,7 @@ + ; vector_fmul_window(float *dst, const float *src0, + ; const float *src1, const float *win, int len); + ;----------------------------------------------------------------------------- +-%macro VECTOR_FMUL_WINDOW 0 ++INIT_XMM sse + cglobal vector_fmul_window, 5, 6, 6, dst, src0, src1, win, len, len1 + shl lend, 2 + lea len1q, [lenq - mmsize] +@@ -305,7 +305,6 @@ + .loop: + mova m0, [winq + lenq] + mova m4, [src0q + lenq] +-%if cpuflag(sse) + mova m1, [winq + len1q] + mova m5, [src1q + len1q] + shufps m1, m1, 0x1b +@@ -319,34 +318,12 @@ + addps m2, m3 + subps m1, m0 + shufps m2, m2, 0x1b +-%else +- pswapd m1, [winq + len1q] +- pswapd m5, [src1q + len1q] +- mova m2, m0 +- mova m3, m1 +- pfmul m2, m4 +- pfmul m3, m5 +- pfmul m1, m4 +- pfmul m0, m5 +- pfadd m2, m3 +- pfsub m1, m0 +- pswapd m2, m2 +-%endif + mova [dstq + lenq], m1 + mova [dstq + len1q], m2 + sub len1q, mmsize + add lenq, mmsize + jl .loop +-%if mmsize == 8 +- femms +-%endif +- REP_RET +-%endmacro +- +-INIT_MMX 3dnowext +-VECTOR_FMUL_WINDOW +-INIT_XMM sse +-VECTOR_FMUL_WINDOW ++ RET + + ;----------------------------------------------------------------------------- + ; vector_fmul_add(float *dst, const float *src0, const float *src1, +@@ -375,7 +352,7 @@ + + sub lenq, 2*mmsize + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse +@@ -424,7 +401,7 @@ + add src1q, 2*mmsize + sub lenq, 2*mmsize + jge .loop +- REP_RET ++ RET + %endmacro + + INIT_XMM sse +@@ -463,6 +440,133 @@ + %endif + RET + ++INIT_YMM fma3 ++cglobal scalarproduct_float, 3,5,8, v1, v2, size, len, offset ++ xor offsetq, offsetq ++ xorps m0, m0, m0 ++ shl sized, 2 ++ mov lenq, sizeq ++ cmp lenq, 32 ++ jl .l16 ++ cmp lenq, 64 ++ jl .l32 ++ xorps m1, m1, m1 ++ cmp lenq, 128 ++ jl .l64 ++ and lenq, ~127 ++ xorps m2, m2, m2 ++ xorps m3, m3, m3 ++.loop128: ++ movups m4, [v1q+offsetq] ++ movups m5, [v1q+offsetq + 32] ++ movups m6, [v1q+offsetq + 64] ++ movups m7, [v1q+offsetq + 96] ++ fmaddps m0, m4, [v2q+offsetq ], m0 ++ fmaddps m1, m5, [v2q+offsetq + 32], m1 ++ fmaddps m2, m6, [v2q+offsetq + 64], m2 ++ fmaddps m3, m7, [v2q+offsetq + 96], m3 ++ add offsetq, 128 ++ cmp offsetq, lenq ++ jl .loop128 ++ addps m0, m0, m2 ++ addps m1, m1, m3 ++ mov lenq, sizeq ++ and lenq, 127 ++ cmp lenq, 64 ++ jge .l64 ++ addps m0, m0, m1 ++ cmp lenq, 32 ++ jge .l32 ++ vextractf128 xmm2, m0, 1 ++ addps xmm0, xmm2 ++ cmp lenq, 16 ++ jge .l16 ++ movhlps xmm1, xmm0 ++ addps xmm0, xmm1 ++ movss xmm1, xmm0 ++ shufps xmm0, xmm0, 1 ++ addss xmm0, xmm1 ++%if ARCH_X86_64 == 0 ++ movss r0m, xm0 ++ fld dword r0m ++%endif ++ RET ++.l64: ++ and lenq, ~63 ++ add lenq, offsetq ++.loop64: ++ movups m4, [v1q+offsetq] ++ movups m5, [v1q+offsetq + 32] ++ fmaddps m0, m4, [v2q+offsetq], m0 ++ fmaddps m1, m5, [v2q+offsetq + 32], m1 ++ add offsetq, 64 ++ cmp offsetq, lenq ++ jl .loop64 ++ addps m0, m0, m1 ++ mov lenq, sizeq ++ and lenq, 63 ++ cmp lenq, 32 ++ jge .l32 ++ vextractf128 xmm2, m0, 1 ++ addps xmm0, xmm2 ++ cmp lenq, 16 ++ jge .l16 ++ movhlps xmm1, xmm0 ++ addps xmm0, xmm1 ++ movss xmm1, xmm0 ++ shufps xmm0, xmm0, 1 ++ addss xmm0, xmm1 ++%if ARCH_X86_64 == 0 ++ movss r0m, xm0 ++ fld dword r0m ++%endif ++ RET ++.l32: ++ and lenq, ~31 ++ add lenq, offsetq ++.loop32: ++ movups m4, [v1q+offsetq] ++ fmaddps m0, m4, [v2q+offsetq], m0 ++ add offsetq, 32 ++ cmp offsetq, lenq ++ jl .loop32 ++ vextractf128 xmm2, m0, 1 ++ addps xmm0, xmm2 ++ mov lenq, sizeq ++ and lenq, 31 ++ cmp lenq, 16 ++ jge .l16 ++ movhlps xmm1, xmm0 ++ addps xmm0, xmm1 ++ movss xmm1, xmm0 ++ shufps xmm0, xmm0, 1 ++ addss xmm0, xmm1 ++%if ARCH_X86_64 == 0 ++ movss r0m, xm0 ++ fld dword r0m ++%endif ++ RET ++.l16: ++ and lenq, ~15 ++ add lenq, offsetq ++.loop16: ++ movaps xmm1, [v1q+offsetq] ++ mulps xmm1, [v2q+offsetq] ++ addps xmm0, xmm1 ++ add offsetq, 16 ++ cmp offsetq, lenq ++ jl .loop16 ++ movhlps xmm1, xmm0 ++ addps xmm0, xmm1 ++ movss xmm1, xmm0 ++ shufps xmm0, xmm0, 1 ++ addss xmm0, xmm1 ++%if ARCH_X86_64 == 0 ++ movss r0m, xm0 ++ fld dword r0m ++%endif ++ RET ++ + ;----------------------------------------------------------------------------- + ; void ff_butterflies_float(float *src0, float *src1, int len); + ;----------------------------------------------------------------------------- +@@ -481,4 +585,4 @@ + mova [src0q + lenq], m0 + add lenq, mmsize + jl .loop +- REP_RET ++ RET +diff -Naur a/media/ffvpx/libavutil/x86/float_dsp_init.c b/media/ffvpx/libavutil/x86/float_dsp_init.c +--- a/media/ffvpx/libavutil/x86/float_dsp_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/float_dsp_init.c 2023-04-06 12:50:06.977471295 +0200 +@@ -56,8 +56,6 @@ + void ff_vector_dmul_scalar_avx(double *dst, const double *src, + double mul, int len); + +-void ff_vector_fmul_window_3dnowext(float *dst, const float *src0, +- const float *src1, const float *win, int len); + void ff_vector_fmul_window_sse(float *dst, const float *src0, + const float *src1, const float *win, int len); + +@@ -76,6 +74,7 @@ + const float *src1, int len); + + float ff_scalarproduct_float_sse(const float *v1, const float *v2, int order); ++float ff_scalarproduct_float_fma3(const float *v1, const float *v2, int order); + + void ff_butterflies_float_sse(float *av_restrict src0, float *av_restrict src1, int len); + +@@ -83,9 +82,6 @@ + { + int cpu_flags = av_get_cpu_flags(); + +- if (EXTERNAL_AMD3DNOWEXT(cpu_flags)) { +- fdsp->vector_fmul_window = ff_vector_fmul_window_3dnowext; +- } + if (EXTERNAL_SSE(cpu_flags)) { + fdsp->vector_fmul = ff_vector_fmul_sse; + fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_sse; +@@ -117,5 +113,6 @@ + fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_fma3; + fdsp->vector_fmul_add = ff_vector_fmul_add_fma3; + fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_fma3; ++ fdsp->scalarproduct_float = ff_scalarproduct_float_fma3; + } + } +diff -Naur a/media/ffvpx/libavutil/x86/imgutils_init.c b/media/ffvpx/libavutil/x86/imgutils_init.c +--- a/media/ffvpx/libavutil/x86/imgutils_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/imgutils_init.c 2023-04-06 12:49:40.262395253 +0200 +@@ -21,9 +21,8 @@ + + #include "libavutil/cpu.h" + #include "libavutil/error.h" +-#include "libavutil/imgutils.h" + #include "libavutil/imgutils_internal.h" +-#include "libavutil/internal.h" ++#include "libavutil/macros.h" + + #include "cpu.h" + +diff -Naur a/media/ffvpx/libavutil/x86/intmath.h b/media/ffvpx/libavutil/x86/intmath.h +--- a/media/ffvpx/libavutil/x86/intmath.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/intmath.h 2023-04-06 12:49:40.263395293 +0200 +@@ -110,8 +110,8 @@ + #if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); + #endif +- __asm__ ("minsd %2, %0 \n\t" +- "maxsd %1, %0 \n\t" ++ __asm__ ("maxsd %1, %0 \n\t" ++ "minsd %2, %0 \n\t" + : "+&x"(a) : "xm"(amin), "xm"(amax)); + return a; + } +@@ -126,14 +126,44 @@ + #if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 + if (amin > amax) abort(); + #endif +- __asm__ ("minss %2, %0 \n\t" +- "maxss %1, %0 \n\t" ++ __asm__ ("maxss %1, %0 \n\t" ++ "minss %2, %0 \n\t" + : "+&x"(a) : "xm"(amin), "xm"(amax)); + return a; + } + + #endif /* __SSE__ */ + ++#if defined(__AVX__) && !defined(__INTEL_COMPILER) ++ ++#undef av_clipd ++#define av_clipd av_clipd_avx ++static av_always_inline av_const double av_clipd_avx(double a, double amin, double amax) ++{ ++#if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 ++ if (amin > amax) abort(); ++#endif ++ __asm__ ("vmaxsd %1, %0, %0 \n\t" ++ "vminsd %2, %0, %0 \n\t" ++ : "+&x"(a) : "xm"(amin), "xm"(amax)); ++ return a; ++} ++ ++#undef av_clipf ++#define av_clipf av_clipf_avx ++static av_always_inline av_const float av_clipf_avx(float a, float amin, float amax) ++{ ++#if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 ++ if (amin > amax) abort(); ++#endif ++ __asm__ ("vmaxss %1, %0, %0 \n\t" ++ "vminss %2, %0, %0 \n\t" ++ : "+&x"(a) : "xm"(amin), "xm"(amax)); ++ return a; ++} ++ ++#endif /* __AVX__ */ ++ + #endif /* __GNUC__ */ + + #endif /* AVUTIL_X86_INTMATH_H */ +diff -Naur a/media/ffvpx/libavutil/x86/intreadwrite.h b/media/ffvpx/libavutil/x86/intreadwrite.h +--- a/media/ffvpx/libavutil/x86/intreadwrite.h 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/intreadwrite.h 2023-04-06 12:50:06.977471295 +0200 +@@ -29,6 +29,8 @@ + + #if !HAVE_FAST_64BIT && defined(__MMX__) + ++#define FF_COPY_SWAP_ZERO_USES_MMX ++ + #define AV_COPY64 AV_COPY64 + static av_always_inline void AV_COPY64(void *d, const void *s) + { +diff -Naur a/media/ffvpx/libavutil/x86/lls.asm b/media/ffvpx/libavutil/x86/lls.asm +--- a/media/ffvpx/libavutil/x86/lls.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/lls.asm 2023-04-06 12:50:24.494176623 +0200 +@@ -20,7 +20,7 @@ + ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ;****************************************************************************** + +-%include "x86util.asm" ++%include "libavutil/x86/x86util.asm" + + SECTION .text + +@@ -123,7 +123,7 @@ + test id, id + jle .loop2x1 + .ret: +- REP_RET ++ RET + + %macro UPDATE_LLS 0 + cglobal update_lls, 3,6,8, ctx, var, count, i, j, count2 +@@ -240,7 +240,7 @@ + cmp id, countd + jle .loop2x1 + .ret: +- REP_RET ++ RET + %endmacro ; UPDATE_LLS + + %if HAVE_AVX_EXTERNAL +diff -Naur a/media/ffvpx/libavutil/x86/lls_init.c b/media/ffvpx/libavutil/x86/lls_init.c +--- a/media/ffvpx/libavutil/x86/lls_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/lls_init.c 2023-04-06 12:49:40.263395293 +0200 +@@ -20,6 +20,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/attributes.h" + #include "libavutil/lls.h" + #include "libavutil/x86/cpu.h" + +diff -Naur a/media/ffvpx/libavutil/x86/pixelutils.asm b/media/ffvpx/libavutil/x86/pixelutils.asm +--- a/media/ffvpx/libavutil/x86/pixelutils.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/pixelutils.asm 2023-04-06 12:49:40.263395293 +0200 +@@ -21,49 +21,11 @@ + ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + ;****************************************************************************** + +-%include "x86util.asm" ++%include "libavutil/x86/x86util.asm" + + SECTION .text + + ;------------------------------------------------------------------------------- +-; int ff_pixelutils_sad_8x8_mmx(const uint8_t *src1, ptrdiff_t stride1, +-; const uint8_t *src2, ptrdiff_t stride2); +-;------------------------------------------------------------------------------- +-INIT_MMX mmx +-cglobal pixelutils_sad_8x8, 4,4,0, src1, stride1, src2, stride2 +- pxor m7, m7 +- pxor m6, m6 +-%rep 4 +- mova m0, [src1q] +- mova m2, [src1q + stride1q] +- mova m1, [src2q] +- mova m3, [src2q + stride2q] +- psubusb m4, m0, m1 +- psubusb m5, m2, m3 +- psubusb m1, m0 +- psubusb m3, m2 +- por m1, m4 +- por m3, m5 +- punpcklbw m0, m1, m7 +- punpcklbw m2, m3, m7 +- punpckhbw m1, m7 +- punpckhbw m3, m7 +- paddw m0, m1 +- paddw m2, m3 +- paddw m0, m2 +- paddw m6, m0 +- lea src1q, [src1q + 2*stride1q] +- lea src2q, [src2q + 2*stride2q] +-%endrep +- psrlq m0, m6, 32 +- paddw m6, m0 +- psrlq m0, m6, 16 +- paddw m6, m0 +- movd eax, m6 +- movzx eax, ax +- RET +- +-;------------------------------------------------------------------------------- + ; int ff_pixelutils_sad_8x8_mmxext(const uint8_t *src1, ptrdiff_t stride1, + ; const uint8_t *src2, ptrdiff_t stride2); + ;------------------------------------------------------------------------------- +@@ -82,26 +44,6 @@ + %endrep + movd eax, m2 + RET +- +-;------------------------------------------------------------------------------- +-; int ff_pixelutils_sad_16x16_mmxext(const uint8_t *src1, ptrdiff_t stride1, +-; const uint8_t *src2, ptrdiff_t stride2); +-;------------------------------------------------------------------------------- +-INIT_MMX mmxext +-cglobal pixelutils_sad_16x16, 4,4,0, src1, stride1, src2, stride2 +- pxor m2, m2 +-%rep 16 +- mova m0, [src1q] +- mova m1, [src1q + 8] +- psadbw m0, [src2q] +- psadbw m1, [src2q + 8] +- paddw m2, m0 +- paddw m2, m1 +- add src1q, stride1q +- add src2q, stride2q +-%endrep +- movd eax, m2 +- RET + + ;------------------------------------------------------------------------------- + ; int ff_pixelutils_sad_16x16_sse2(const uint8_t *src1, ptrdiff_t stride1, +diff -Naur a/media/ffvpx/libavutil/x86/pixelutils_init.c b/media/ffvpx/libavutil/x86/pixelutils_init.c +--- a/media/ffvpx/libavutil/x86/pixelutils_init.c 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/pixelutils_init.c 2023-04-06 12:49:40.263395293 +0200 +@@ -21,13 +21,9 @@ + #include "pixelutils.h" + #include "cpu.h" + +-int ff_pixelutils_sad_8x8_mmx(const uint8_t *src1, ptrdiff_t stride1, +- const uint8_t *src2, ptrdiff_t stride2); + int ff_pixelutils_sad_8x8_mmxext(const uint8_t *src1, ptrdiff_t stride1, + const uint8_t *src2, ptrdiff_t stride2); + +-int ff_pixelutils_sad_16x16_mmxext(const uint8_t *src1, ptrdiff_t stride1, +- const uint8_t *src2, ptrdiff_t stride2); + int ff_pixelutils_sad_16x16_sse2(const uint8_t *src1, ptrdiff_t stride1, + const uint8_t *src2, ptrdiff_t stride2); + int ff_pixelutils_sad_a_16x16_sse2(const uint8_t *src1, ptrdiff_t stride1, +@@ -53,10 +49,6 @@ + { + int cpu_flags = av_get_cpu_flags(); + +- if (EXTERNAL_MMX(cpu_flags)) { +- sad[2] = ff_pixelutils_sad_8x8_mmx; +- } +- + // The best way to use SSE2 would be to do 2 SADs in parallel, + // but we'd have to modify the pixelutils API to return SIMD functions. + +@@ -65,7 +57,6 @@ + // so just use the MMX 8x8 version even when SSE2 is available. + if (EXTERNAL_MMXEXT(cpu_flags)) { + sad[2] = ff_pixelutils_sad_8x8_mmxext; +- sad[3] = ff_pixelutils_sad_16x16_mmxext; + } + + if (EXTERNAL_SSE2(cpu_flags)) { +diff -Naur a/media/ffvpx/libavutil/x86/x86inc.asm b/media/ffvpx/libavutil/x86/x86inc.asm +--- a/media/ffvpx/libavutil/x86/x86inc.asm 2023-03-10 00:59:37.000000000 +0100 ++++ b/media/ffvpx/libavutil/x86/x86inc.asm 2023-04-06 12:49:40.263395293 +0200 +@@ -817,32 +817,33 @@ + + ; cpuflags + +-%assign cpuflags_mmx (1<<0) +-%assign cpuflags_mmx2 (1<<1) | cpuflags_mmx +-%assign cpuflags_3dnow (1<<2) | cpuflags_mmx +-%assign cpuflags_3dnowext (1<<3) | cpuflags_3dnow +-%assign cpuflags_sse (1<<4) | cpuflags_mmx2 +-%assign cpuflags_sse2 (1<<5) | cpuflags_sse +-%assign cpuflags_sse2slow (1<<6) | cpuflags_sse2 +-%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2 +-%assign cpuflags_sse3 (1<<8) | cpuflags_sse2 +-%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3 +-%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3 +-%assign cpuflags_sse42 (1<<11)| cpuflags_sse4 +-%assign cpuflags_aesni (1<<12)| cpuflags_sse42 +-%assign cpuflags_avx (1<<13)| cpuflags_sse42 +-%assign cpuflags_xop (1<<14)| cpuflags_avx +-%assign cpuflags_fma4 (1<<15)| cpuflags_avx +-%assign cpuflags_fma3 (1<<16)| cpuflags_avx +-%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt +-%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1 +-%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2 +-%assign cpuflags_avx512 (1<<20)| cpuflags_avx2 ; F, CD, BW, DQ, VL ++%assign cpuflags_mmx (1<<0) ++%assign cpuflags_mmx2 (1<<1) | cpuflags_mmx ++%assign cpuflags_3dnow (1<<2) | cpuflags_mmx ++%assign cpuflags_3dnowext (1<<3) | cpuflags_3dnow ++%assign cpuflags_sse (1<<4) | cpuflags_mmx2 ++%assign cpuflags_sse2 (1<<5) | cpuflags_sse ++%assign cpuflags_sse2slow (1<<6) | cpuflags_sse2 ++%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2 ++%assign cpuflags_sse3 (1<<8) | cpuflags_sse2 ++%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3 ++%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3 ++%assign cpuflags_sse42 (1<<11)| cpuflags_sse4 ++%assign cpuflags_aesni (1<<12)| cpuflags_sse42 ++%assign cpuflags_avx (1<<13)| cpuflags_sse42 ++%assign cpuflags_xop (1<<14)| cpuflags_avx ++%assign cpuflags_fma4 (1<<15)| cpuflags_avx ++%assign cpuflags_fma3 (1<<16)| cpuflags_avx ++%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt ++%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1 ++%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2 ++%assign cpuflags_avx512 (1<<20)| cpuflags_avx2 ; F, CD, BW, DQ, VL ++%assign cpuflags_avx512icl (1<<25)| cpuflags_avx512 + +-%assign cpuflags_cache32 (1<<21) +-%assign cpuflags_cache64 (1<<22) +-%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant +-%assign cpuflags_atom (1<<24) ++%assign cpuflags_cache32 (1<<21) ++%assign cpuflags_cache64 (1<<22) ++%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant ++%assign cpuflags_atom (1<<24) + + ; Returns a boolean value expressing whether or not the specified cpuflag is enabled. + %define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1) +diff -Naur a/toolkit/moz.configure b/toolkit/moz.configure +--- a/toolkit/moz.configure 2023-03-10 00:59:39.000000000 +0100 ++++ b/toolkit/moz.configure 2023-04-06 12:49:19.193546510 +0200 +@@ -2142,7 +2142,7 @@ + + @depends(target) + def libav_fft(target): +- return target.kernel == "WINNT" or target.cpu == "x86_64" ++ return target.kernel in ("WINNT", "Darwin") or target.cpu == "x86_64" + + set_config("MOZ_LIBAV_FFT", depends(when=libav_fft)(lambda: True)) + set_define("MOZ_LIBAV_FFT", depends(when=libav_fft)(lambda: True)) +@@ -2173,18 +2173,20 @@ + flags = ["-DPIC", "-DWIN64"] + use_nasm = False + elif target.kernel == "Darwin": ++ # 32/64-bit macosx assemblers need to prefix symbols with an ++ # underscore. ++ flags = [ ++ "-DPIC", ++ "-DMACHO", ++ "-DPREFIX" ++ ] + if target.cpu == "x86_64": +- # 32/64-bit macosx asemblers need to prefix symbols with an +- # underscore. +- flags = [ ++ flags += [ + "-D__x86_64__", +- "-DPIC", +- "-DMACHO", +- "-DPREFIX", + "-Pconfig_darwin64.asm", + ] +- else: +- flac_only = True ++ elif target.cpu == "aarch64": ++ use_nasm = False + elif target.cpu == "x86_64": + flags = ["-D__x86_64__", "-DPIC", "-DELF", "-Pconfig_unix64.asm"] + elif target.cpu in ("x86", "arm", "aarch64"): +@@ -2195,10 +2197,6 @@ + if flac_only or not enable: + use_nasm = False + +- if use_nasm: +- # default disabled components +- flags.append("-Pdefaults_disabled.asm") +- + return namespace( + enable=enable, + use_nasm=use_nasm, +diff -Naur a/tools/rewriting/ThirdPartyPaths.txt b/tools/rewriting/ThirdPartyPaths.txt +--- a/tools/rewriting/ThirdPartyPaths.txt 2023-03-10 00:59:39.000000000 +0100 ++++ b/tools/rewriting/ThirdPartyPaths.txt 2023-04-06 12:58:33.700797413 +0200 +@@ -32,6 +32,7 @@ + dom/media/platforms/ffmpeg/ffmpeg57/ + dom/media/platforms/ffmpeg/ffmpeg58/ + dom/media/platforms/ffmpeg/ffmpeg59/ ++dom/media/platforms/ffmpeg/ffmpeg60/ + dom/media/platforms/ffmpeg/libav53/ + dom/media/platforms/ffmpeg/libav54/ + dom/media/platforms/ffmpeg/libav55/ diff --git a/user/firefox-esr/firefox-esr.post-upgrade b/user/zotero/firefox-esr.post-upgrade similarity index 100% rename from user/firefox-esr/firefox-esr.post-upgrade rename to user/zotero/firefox-esr.post-upgrade diff --git a/user/firefox-esr/firefox.desktop b/user/zotero/firefox.desktop similarity index 100% rename from user/firefox-esr/firefox.desktop rename to user/zotero/firefox.desktop diff --git a/user/firefox-esr/fix-fortify-system-wrappers.patch b/user/zotero/fix-fortify-system-wrappers.patch similarity index 100% rename from user/firefox-esr/fix-fortify-system-wrappers.patch rename to user/zotero/fix-fortify-system-wrappers.patch diff --git a/user/firefox-esr/fix-neon-aom.patch b/user/zotero/fix-neon-aom.patch similarity index 100% rename from user/firefox-esr/fix-neon-aom.patch rename to user/zotero/fix-neon-aom.patch diff --git a/user/firefox-esr/fix-rust-target.patch b/user/zotero/fix-rust-target.patch similarity index 100% rename from user/firefox-esr/fix-rust-target.patch rename to user/zotero/fix-rust-target.patch diff --git a/user/firefox-esr/fix-webrtc-glibcisms.patch b/user/zotero/fix-webrtc-glibcisms.patch similarity index 100% rename from user/firefox-esr/fix-webrtc-glibcisms.patch rename to user/zotero/fix-webrtc-glibcisms.patch diff --git a/user/firefox-esr/gcc13.patch b/user/zotero/gcc13.patch similarity index 100% rename from user/firefox-esr/gcc13.patch rename to user/zotero/gcc13.patch diff --git a/user/zotero/hunspell-dont-build-unused-function.patch b/user/zotero/hunspell-dont-build-unused-function.patch new file mode 100644 index 0000000..8bd04db --- /dev/null +++ b/user/zotero/hunspell-dont-build-unused-function.patch @@ -0,0 +1,69 @@ +new file mode 100644 +--- /dev/null ++++ b/extensions/spellcheck/hunspell/patches/bug1838113.patch +@@ -0,0 +1,20 @@ ++diff --git a/extensions/spellcheck/hunspell/src/csutil.cxx b/extensions/spellcheck/hunspell/src/csutil.cxx ++index 48e58ff4b2677..39a54d38023c8 100644 ++--- a/extensions/spellcheck/hunspell/src/csutil.cxx +++++ b/extensions/spellcheck/hunspell/src/csutil.cxx ++@@ -108,6 +108,7 @@ static struct unicode_info2* utf_tbl = NULL; ++ static int utf_tbl_count = ++ 0; // utf_tbl can be used by multiple Hunspell instances ++ +++#ifndef MOZILLA_CLIENT ++ void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mode) ++ { ++ #if defined(_WIN32) && defined(_MSC_VER) ++@@ -127,6 +128,7 @@ void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mod ++ #endif ++ stream.open(path, mode); ++ } +++#endif ++ ++ std::string& u16_u8(std::string& dest, const std::vector& src) { ++ dest.clear(); +--- a/extensions/spellcheck/hunspell/src/csutil.cxx ++++ b/extensions/spellcheck/hunspell/src/csutil.cxx +@@ -103,16 +103,17 @@ struct unicode_info2 { + unsigned short cupper; + unsigned short clower; + }; + + static struct unicode_info2* utf_tbl = NULL; + static int utf_tbl_count = + 0; // utf_tbl can be used by multiple Hunspell instances + ++#ifndef MOZILLA_CLIENT + void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mode) + { + #if defined(_WIN32) && defined(_MSC_VER) + #define WIN32_LONG_PATH_PREFIX "\\\\?\\" + if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { + int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); + wchar_t* buff = new wchar_t[len]; + wchar_t* buff2 = new wchar_t[len]; +@@ -122,16 +123,17 @@ void myopen(std::ifstream& stream, const + } + delete [] buff; + delete [] buff2; + } + else + #endif + stream.open(path, mode); + } ++#endif + + std::string& u16_u8(std::string& dest, const std::vector& src) { + dest.clear(); + std::vector::const_iterator u2 = src.begin(); + std::vector::const_iterator u2_max = src.end(); + while (u2 < u2_max) { + signed char u8; + if (u2->h) { // > 0xFF +--- a/extensions/spellcheck/hunspell/update.sh ++++ b/extensions/spellcheck/hunspell/update.sh +@@ -29,3 +29,4 @@ rm -rf ${tmpclonedir} + cd ${hunspell_dir}/src + patch -p5 < ../patches/bug1410214.patch + patch -p5 < ../patches/bug1739761.patch ++patch -p5 < ../patches/bug1838113.patch diff --git a/user/zotero/icu74.patch b/user/zotero/icu74.patch new file mode 100644 index 0000000..46c9445 --- /dev/null +++ b/user/zotero/icu74.patch @@ -0,0 +1,38 @@ +https://bugzilla.mozilla.org/show_bug.cgi?id=1862601 + +# HG changeset patch +# User André Bargull +# Date 1697435923 -7200 +# Node ID d5f3b0c4f08a426ce00a153c04e177eecb6820e2 +# Parent c63994f8259efdf6e745c960aa9e1409d5477049 +Bug xxx - Part 12: Add new line break classes. r? + +diff --git a/intl/lwbrk/LineBreaker.cpp b/intl/lwbrk/LineBreaker.cpp +--- a/intl/lwbrk/LineBreaker.cpp ++++ b/intl/lwbrk/LineBreaker.cpp +@@ -443,17 +443,23 @@ static int8_t GetClass(uint32_t u, LineB + /* JT = 34, [JT] */ CLASS_CHARACTER, + /* JV = 35, [JV] */ CLASS_CHARACTER, + /* CLOSE_PARENTHESIS = 36, [CP] */ CLASS_CLOSE_LIKE_CHARACTER, + /* CONDITIONAL_JAPANESE_STARTER = 37, [CJ] */ CLASS_CLOSE, + /* HEBREW_LETTER = 38, [HL] */ CLASS_CHARACTER, + /* REGIONAL_INDICATOR = 39, [RI] */ CLASS_CHARACTER, + /* E_BASE = 40, [EB] */ CLASS_BREAKABLE, + /* E_MODIFIER = 41, [EM] */ CLASS_CHARACTER, +- /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER}; ++ /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER, ++ /* AKSARA = 43, [AK] */ CLASS_CHARACTER, ++ /* AKSARA_PREBASE = 44, [AP] */ CLASS_CHARACTER, ++ /* AKSARA_START = 45, [AS] */ CLASS_CHARACTER, ++ /* VIRAMA_FINAL = 46, [VF] */ CLASS_CHARACTER, ++ /* VIRAMA = 47, [VI] */ CLASS_CHARACTER, ++ }; + + static_assert(U_LB_COUNT == mozilla::ArrayLength(sUnicodeLineBreakToClass), + "Gecko vs ICU LineBreak class mismatch"); + + auto cls = GetLineBreakClass(u); + MOZ_ASSERT(cls < mozilla::ArrayLength(sUnicodeLineBreakToClass)); + + // Overrides based on rules for the different line-break values given in + diff --git a/user/zotero/lfs64.patch b/user/zotero/lfs64.patch new file mode 100644 index 0000000..bae8b5d --- /dev/null +++ b/user/zotero/lfs64.patch @@ -0,0 +1,35 @@ +force stat() instead of stat64() on 32-bit +-- +--- a/xpcom/io/nsLocalFileUnix.h ++++ b/xpcom/io/nsLocalFileUnix.h +@@ -21,7 +21,7 @@ + + // stat64 and lstat64 are deprecated on OS X. Normal stat and lstat are + // 64-bit by default on OS X 10.6+. +-#if defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) ++#if 0 && defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) + # if defined(AIX) + # if defined STAT + # undef STAT +--- a/mozglue/baseprofiler/core/shared-libraries-linux.cc ++++ b/mozglue/baseprofiler/core/shared-libraries-linux.cc +@@ -178,7 +178,7 @@ + return false; + } + +-#if defined(__x86_64__) || defined(__aarch64__) || \ ++#if 1 || defined(__x86_64__) || defined(__aarch64__) || \ + (defined(__mips__) && _MIPS_SIM == _ABI64) || \ + !(defined(GP_OS_linux) || defined(GP_OS_android)) + +--- a/security/sandbox/linux/broker/SandboxBrokerUtils.h ++++ b/security/sandbox/linux/broker/SandboxBrokerUtils.h +@@ -15,7 +15,7 @@ + // calls. We'll intercept those and handle them in the stat functions + // but must be sure to use the right structure layout. + +-#if defined(__NR_stat64) || defined(__NR_fstatat64) ++#if 0 && (defined(__NR_stat64) || defined(__NR_fstatat64) ) + typedef struct stat64 statstruct; + # define statsyscall stat64 + # define lstatsyscall lstat64 diff --git a/user/firefox-esr/mallinfo.patch b/user/zotero/mallinfo.patch similarity index 100% rename from user/firefox-esr/mallinfo.patch rename to user/zotero/mallinfo.patch diff --git a/user/firefox-esr/mozilla-location.keys b/user/zotero/mozilla-location.keys similarity index 100% rename from user/firefox-esr/mozilla-location.keys rename to user/zotero/mozilla-location.keys diff --git a/user/zotero/mp4parse-rust-1.70.patch b/user/zotero/mp4parse-rust-1.70.patch new file mode 100644 index 0000000..64bf6e8 --- /dev/null +++ b/user/zotero/mp4parse-rust-1.70.patch @@ -0,0 +1,32 @@ +Patch-Source: https://github.com/mozilla/mp4parse-rust/commit/8d58b2d5fc7f552d585964354d8269bcca3d9251 +-- +From 8d58b2d5fc7f552d585964354d8269bcca3d9251 Mon Sep 17 00:00:00 2001 +From: Matthew Gregan +Date: Thu, 16 Jun 2022 13:54:02 +1200 +Subject: [PATCH] Fix `unstable-name-collisions` warning by using fully + qualified path. + +--- + mp4parse/src/lib.rs | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/mp4parse/src/lib.rs b/mp4parse/src/lib.rs +index 567ee21d..4f3d7153 100644 +--- a/third_party/rust/mp4parse/src/lib.rs ++++ b/third_party/rust/mp4parse/src/lib.rs +@@ -3506,8 +3506,13 @@ macro_rules! impl_mul { + type Output = $output; + + fn mul(self, rhs: $rhs) -> Self::Output { +- static_assertions::const_assert!(<$output>::MAX <= <$inner>::MAX as u64); +- static_assertions::const_assert!(<$lhs>::MAX * <$rhs>::MAX <= <$output>::MAX); ++ static_assertions::const_assert!( ++ <$output as UpperBounded>::MAX <= <$inner>::MAX as u64 ++ ); ++ static_assertions::const_assert!( ++ <$lhs as UpperBounded>::MAX * <$rhs as UpperBounded>::MAX ++ <= <$output as UpperBounded>::MAX ++ ); + + let lhs: $inner = self.get().into(); + let rhs: $inner = rhs.get().into(); diff --git a/user/zotero/no-ccache-stats.patch b/user/zotero/no-ccache-stats.patch new file mode 100644 index 0000000..4d557a0 --- /dev/null +++ b/user/zotero/no-ccache-stats.patch @@ -0,0 +1,13 @@ +prevents a call to ccache +diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py +index bf7009a..011c012 100644 +--- a/python/mozbuild/mozbuild/controller/building.py ++++ b/python/mozbuild/mozbuild/controller/building.py +@@ -570,6 +570,7 @@ class BuildMonitor(MozbuildObject): + ) + + def ccache_stats(self, ccache=None): ++ return None + ccache_stats = None + + if ccache is None: diff --git a/user/zotero/ppc-musttail.patch b/user/zotero/ppc-musttail.patch new file mode 100644 index 0000000..ebe06c0 --- /dev/null +++ b/user/zotero/ppc-musttail.patch @@ -0,0 +1,30 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc-musttail.patch +-- +commit 5e66655e1456c9d26637ceaed3f4533b537322c4 +Author: Daniel Kolesa +Date: Sat May 13 23:00:04 2023 +0200 + + disable musttail on ppc + + 41:38.04 LLVM ERROR: failed to perform tail call elimination on a call site marked musttail + 41:38.04 PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. + 41:38.04 Stack dump: + 41:38.04 0. Running pass 'Function Pass Manager' on module '/builddir/thunderbird-114.0_beta1/obj-powerpc64le-unknown-linux-musl/toolkit/library/build/../../../gfx/skia/SkOpts.o'. + 41:38.04 1. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@_ZN8portableL15init_lane_masksEPNS_6ParamsEP21SkRasterPipelineStageffff' + 41:38.95 clang-16: error: unable to execute command: Aborted + + To be investigated later. + +diff --git a/gfx/skia/skia/src/core/SkRasterPipeline.h b/gfx/skia/skia/src/core/SkRasterPipeline.h +index 766bb0c..88c6cb2 100644 +--- a/gfx/skia/skia/src/core/SkRasterPipeline.h ++++ b/gfx/skia/skia/src/core/SkRasterPipeline.h +@@ -24,7 +24,7 @@ enum SkColorType : int; + struct SkImageInfo; + struct skcms_TransferFunction; + +-#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) ++#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc__) + #define SK_HAS_MUSTTAIL 1 + #else + #define SK_HAS_MUSTTAIL 0 diff --git a/user/zotero/ppc-webrtc.patch b/user/zotero/ppc-webrtc.patch new file mode 100644 index 0000000..bf4afdd --- /dev/null +++ b/user/zotero/ppc-webrtc.patch @@ -0,0 +1,23 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc64-webrtc.patch +-- +commit 010bfb0441168d51e0fffe98d1f50e0602e7947f +Author: Daniel Kolesa +Date: Sat May 13 23:40:41 2023 +0200 + + fix webrtc on ppc64 + +diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build +index 976cf37..d35d447 100644 +--- a/third_party/libwebrtc/moz.build ++++ b/third_party/libwebrtc/moz.build +@@ -643,3 +643,10 @@ if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "WINNT": + "/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn", + "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn" + ] ++ ++if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": ++ ++ DIRS += [ ++ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", ++ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn" ++ ] diff --git a/user/firefox-esr/python-deps.patch b/user/zotero/python-deps.patch similarity index 100% rename from user/firefox-esr/python-deps.patch rename to user/zotero/python-deps.patch diff --git a/user/zotero/rust-lto-thin.patch b/user/zotero/rust-lto-thin.patch new file mode 100644 index 0000000..147acca --- /dev/null +++ b/user/zotero/rust-lto-thin.patch @@ -0,0 +1,12 @@ +set rust crate lto to thin to not use fatlto for gkrust which ooms on 32-bit +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -94,7 +94,7 @@ + # Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045. + ifndef MOZ_CODE_COVERAGE + ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE))) +-cargo_rustc_flags += -Clto ++cargo_rustc_flags += -Clto=thin + endif + # We need -Cembed-bitcode=yes for all crates when using -Clto. + RUSTFLAGS += -Cembed-bitcode=yes diff --git a/user/firefox-esr/sandbox-fork.patch b/user/zotero/sandbox-fork.patch similarity index 100% rename from user/firefox-esr/sandbox-fork.patch rename to user/zotero/sandbox-fork.patch diff --git a/user/firefox-esr/sandbox-largefile.patch b/user/zotero/sandbox-largefile.patch similarity index 100% rename from user/firefox-esr/sandbox-largefile.patch rename to user/zotero/sandbox-largefile.patch diff --git a/user/firefox-esr/sandbox-sched_setscheduler.patch b/user/zotero/sandbox-sched_setscheduler.patch similarity index 100% rename from user/firefox-esr/sandbox-sched_setscheduler.patch rename to user/zotero/sandbox-sched_setscheduler.patch diff --git a/user/firefox-esr/stab.h b/user/zotero/stab.h similarity index 100% rename from user/firefox-esr/stab.h rename to user/zotero/stab.h diff --git a/user/zotero/update-audio-pc.patch b/user/zotero/update-audio-pc.patch new file mode 100644 index 0000000..744d1ec --- /dev/null +++ b/user/zotero/update-audio-pc.patch @@ -0,0 +1,798 @@ +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -55,19 +55,19 @@ git = "https://github.com/mozilla-spider + rev = "64ba08e24749616de2344112f226d1ef4ba893ae" + replace-with = "vendored-sources" + + [source."git+https://github.com/mozilla/application-services?rev=c82bccfa500813f273f4db0ead64fc73bfa2b34c"] + git = "https://github.com/mozilla/application-services" + rev = "c82bccfa500813f273f4db0ead64fc73bfa2b34c" + replace-with = "vendored-sources" + +-[source."git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543"] ++[source."git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9"] + git = "https://github.com/mozilla/audioipc" +-rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543" ++rev = "6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" + replace-with = "vendored-sources" + + [source."git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=93b5c01a131f65c83c11aeb317f4583405c5eb79"] + git = "https://github.com/mozilla/cubeb-coreaudio-rs" + rev = "93b5c01a131f65c83c11aeb317f4583405c5eb79" + replace-with = "vendored-sources" + + [source."git+https://github.com/mozilla/cubeb-pulse-rs?rev=cf48897be5cbe147d051ebbbe1eaf5fd8fb6bbc9"] +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -230,32 +230,32 @@ version = "0.1.3" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "c41dc008c1973ce58ff3cfc52df53814a9b7b78d73d95b071b5ff0ed4b2db3e1" + dependencies = [ + "bitflags 1.999.999", + ] + + [[package]] + name = "audio_thread_priority" +-version = "0.26.1" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "8b7cd1bfd03dab20ad72e0c5e58d65818d62c0d199d8dec8361053d0f073dbae" +-dependencies = [ +- "cfg-if 0.1.999", ++version = "0.30.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "a7e6839a6e8e72338137b3126c7fe61af95b9acc3076d2b7109696f808d1234f" ++dependencies = [ ++ "cfg-if 1.0.0", + "dbus", + "libc", + "log", + "mach", +- "winapi", ++ "windows-sys", + ] + + [[package]] + name = "audioipc2" + version = "0.5.0" +-source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543" ++source = "git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9#6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" + dependencies = [ + "arrayvec", + "ashmem", + "audio_thread_priority", + "bincode", + "byteorder", + "bytes", + "cc", +@@ -273,28 +273,28 @@ dependencies = [ + "serde_derive", + "slab", + "windows-sys", + ] + + [[package]] + name = "audioipc2-client" + version = "0.5.0" +-source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543" ++source = "git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9#6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" + dependencies = [ + "audio_thread_priority", + "audioipc2", + "cubeb-backend", + "log", + ] + + [[package]] + name = "audioipc2-server" + version = "0.5.0" +-source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543" ++source = "git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9#6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" + dependencies = [ + "audio_thread_priority", + "audioipc2", + "cubeb-core", + "error-chain", + "log", + "once_cell", + "slab", +--- a/supply-chain/imports.lock ++++ b/supply-chain/imports.lock +@@ -38,16 +38,23 @@ user-name = "Amanieu d'Antras" + + [[publisher.audio_thread_priority]] + version = "0.26.1" + when = "2022-03-22" + user-id = 1258 + user-login = "padenot" + user-name = "Paul Adenot" + ++[[publisher.audio_thread_priority]] ++version = "0.30.0" ++when = "2023-11-06" ++user-id = 1258 ++user-login = "padenot" ++user-name = "Paul Adenot" ++ + [[publisher.authenticator]] + version = "0.4.0-alpha.20" + when = "2023-08-24" + user-id = 175410 + user-login = "jschanck" + user-name = "John Schanck" + + [[publisher.authenticator]] +--- a/third_party/rust/audio_thread_priority/.cargo-checksum.json ++++ b/third_party/rust/audio_thread_priority/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"files":{"Cargo.toml":"f2a927f4fdf4171eb2111ad9f770fd113d058d6d7dffa10fce7bd7577edda582","LICENSE":"32ee9dbf6196874fc9d406c54a888a6c4cbb9aa4a7f35b46befeaff43a78fe85","Makefile":"0f9a771cfb30c7c4b9961d82fdca4e9e229a955bb2e636474a4101389e18e938","README.md":"c123692b3b50dd621b896a8269814d609cbf1e532b461bf4a77854ddd607eb7a","atp_test.cpp":"8075a040941a65fb9e3f7cbf0535853ca6661c3ac442ec35569b42b24bbec797","audio_thread_priority.h":"f0ecaf1b674f794cde0dc834028e074d4e4675d22ae96acf08b2ae1dceb3474e","generate_osx_bindings.sh":"06e4e03450f788ced18d31fff5660919e6f6ec1119ddace363ffeb82f0518a71","src/lib.rs":"975de6a74e0adb999a08bc41f08a3bd68fe11c154731bc12c43df546ddb32949","src/mach_sys.rs":"352560fcb9b41d877cff92e5b3b04d6dc68b1f30508ce4b9aed78940120a883e","src/rt_linux.rs":"4ea9f6eb1902aff0126d1b957be7f723d599e9a8bbd75ca8013a2820ef5fe68a","src/rt_mach.rs":"e4587fdf640df37f251e50c6c9313f6a73eae4d54f4b8a84cefc6bc730e94be8","src/rt_win.rs":"c41f6e277051a92f8d38939cf9d78ee6deea736a4686b3bcd185492e47e1650a"},"package":"8b7cd1bfd03dab20ad72e0c5e58d65818d62c0d199d8dec8361053d0f073dbae"} +\ No newline at end of file ++{"files":{"Cargo.toml":"b66cf5a2203f39d8425d2b2170f64a5c7220ef76efa7ea14ad20ba99d3435e84","LICENSE":"32ee9dbf6196874fc9d406c54a888a6c4cbb9aa4a7f35b46befeaff43a78fe85","Makefile":"0f9a771cfb30c7c4b9961d82fdca4e9e229a955bb2e636474a4101389e18e938","README.md":"c123692b3b50dd621b896a8269814d609cbf1e532b461bf4a77854ddd607eb7a","atp_test.cpp":"8075a040941a65fb9e3f7cbf0535853ca6661c3ac442ec35569b42b24bbec797","audio_thread_priority.h":"f0ecaf1b674f794cde0dc834028e074d4e4675d22ae96acf08b2ae1dceb3474e","generate_osx_bindings.sh":"06e4e03450f788ced18d31fff5660919e6f6ec1119ddace363ffeb82f0518a71","src/lib.rs":"fe417e81a6677c581d9f617ff7989f08780465401b6fa22b6e3abfedf9e3e221","src/mach_sys.rs":"352560fcb9b41d877cff92e5b3b04d6dc68b1f30508ce4b9aed78940120a883e","src/rt_linux.rs":"27004821a29e6af73f9e13f4d1f060e024152c4cc379d6a0df38d6f5b61039ad","src/rt_mach.rs":"29f8c0397f14cecbac1f76394c2abfe0e05903b54486cf735f9a94a10c168643","src/rt_win.rs":"f2ba097cebf65252c27d9d6dcfbe1fcc041c4b312724bd98e080e114a4de3bb6"},"package":"a7e6839a6e8e72338137b3126c7fe61af95b9acc3076d2b7109696f808d1234f"} +\ No newline at end of file +--- a/third_party/rust/audio_thread_priority/Cargo.toml ++++ b/third_party/rust/audio_thread_priority/Cargo.toml +@@ -7,53 +7,59 @@ + # + # If you are reading this file be aware that the original Cargo.toml + # will likely look very different (and much more reasonable). + # See Cargo.toml.orig for the original contents. + + [package] + edition = "2018" + name = "audio_thread_priority" +-version = "0.26.1" ++version = "0.30.0" + authors = ["Paul Adenot "] + description = "Bump a thread to real-time priority, for audio work, on Linux, Windows and macOS" ++readme = "README.md" + license = "MPL-2.0" + repository = "https://github.com/padenot/audio_thread_priority" + + [lib] + name = "audio_thread_priority" +-crate-type = ["staticlib", "rlib"] ++crate-type = [ ++ "staticlib", ++ "rlib", ++] ++ + [dependencies.cfg-if] +-version = "0.1" ++version = "1.0" + + [dependencies.log] + version = "0.4" + + [dependencies.simple_logger] + version = "0.4" + optional = true ++ + [dev-dependencies.nix] +-version = "0.15.0" ++version = "0.26" + + [features] +-default = ["with_dbus", "winapi"] ++default = ["with_dbus"] + terminal-logging = ["simple_logger"] + with_dbus = ["dbus"] ++ + [target."cfg(target_os = \"linux\")".dependencies.dbus] + version = "0.6.4" + optional = true + + [target."cfg(target_os = \"linux\")".dependencies.libc] + version = "0.2" ++ + [target."cfg(target_os = \"macos\")".dependencies.libc] + version = "0.2" + + [target."cfg(target_os = \"macos\")".dependencies.mach] + version = "0.3" +-[target."cfg(target_os = \"windows\")".dependencies.winapi] +-version = "0.3" +-features = ["avrt", "errhandlingapi", "minwindef"] +-optional = true + +-[target."cfg(target_os = \"windows\")".dependencies.windows] +-version = "^0.32.0" +-features = ["Win32_Foundation", "Win32_System_Threading"] +-optional = true ++[target."cfg(target_os = \"windows\")".dependencies.windows-sys] ++version = "0.48" ++features = [ ++ "Win32_Foundation", ++ "Win32_System_Threading", ++] +--- a/third_party/rust/audio_thread_priority/src/lib.rs ++++ b/third_party/rust/audio_thread_priority/src/lib.rs +@@ -253,34 +253,43 @@ pub extern "C" fn atp_get_current_thread + /// + /// # Arguments + /// + /// thread_info: the `atp_thread_info` structure to free. + /// + /// # Return value + /// + /// 0 in case of success, 1 otherwise (if `thread_info` is NULL). ++/// ++/// # Safety ++/// ++/// This function is safe only and only if the pointer comes from this library, of if is null. + #[no_mangle] + pub unsafe extern "C" fn atp_free_thread_info(thread_info: *mut atp_thread_info) -> i32 { + if thread_info.is_null() { + return 1; + } +- Box::from_raw(thread_info); ++ drop(Box::from_raw(thread_info)); + 0 + } + + /// Return a byte buffer containing serialized information about a thread, to promote it to + /// real-time from elsewhere, with a C API. + /// + /// `bytes` MUST be `std::mem::size_of()` bytes long. + /// + /// This is exposed in the C API as `ATP_THREAD_INFO_SIZE`. + /// + /// This call is useful on Linux desktop only, when the process is sandboxed, cannot promote itself + /// directly, and the `atp_thread_info` struct must be passed via IPC. ++/// ++/// # Safety ++/// ++/// This function is safe only and only if the first pointer comes from this library, and the ++/// second pointer is at least ATP_THREAD_INFO_SIZE bytes long. + #[no_mangle] + pub unsafe extern "C" fn atp_serialize_thread_info( + thread_info: *mut atp_thread_info, + bytes: *mut libc::c_void, + ) { + let thread_info = &mut *thread_info; + let source = thread_info.0.serialize(); + std::ptr::copy(source.as_ptr(), bytes as *mut u8, source.len()); +@@ -289,16 +298,20 @@ pub unsafe extern "C" fn atp_serialize_t + /// From a byte buffer, return a `RtPriorityThreadInfo`, with a C API. + /// + /// This call is useful on Linux desktop only, when the process is sandboxed and + /// cannot promote itself directly. + /// + /// # Arguments + /// + /// A byte buffer containing a serializezd `RtPriorityThreadInfo`. ++/// ++/// # Safety ++/// ++/// This function is safe only and only if pointer is at least ATP_THREAD_INFO_SIZE bytes long. + #[no_mangle] + pub unsafe extern "C" fn atp_deserialize_thread_info( + in_bytes: *mut u8, + ) -> *mut atp_thread_info { + let bytes = *(in_bytes as *mut [u8; std::mem::size_of::()]); + let thread_info = RtPriorityThreadInfoInternal::deserialize(bytes); + Box::into_raw(Box::new(atp_thread_info(thread_info))) + } +@@ -364,16 +377,20 @@ pub struct atp_thread_info(RtPriorityThr + /// `atp_get_current_thread_info` on the thread to promote. + /// * `audio_buffer_frames` - the exact or an upper limit on the number of frames that have to be + /// rendered each callback, or 0 for a sensible default value. + /// * `audio_samplerate_hz` - the sample-rate for this audio stream, in Hz. + /// + /// # Return value + /// + /// A pointer to an `atp_handle` in case of success, NULL otherwise. ++/// ++/// # Safety ++/// ++/// This function is safe as long as the first pointer comes from this library. + #[no_mangle] + pub unsafe extern "C" fn atp_promote_thread_to_real_time( + thread_info: *mut atp_thread_info, + audio_buffer_frames: u32, + audio_samplerate_hz: u32, + ) -> *mut atp_handle { + let thread_info = &mut *thread_info; + match promote_thread_to_real_time(thread_info.0, audio_buffer_frames, audio_samplerate_hz) { +@@ -386,16 +403,20 @@ pub unsafe extern "C" fn atp_promote_thr + /// + /// # Arguments + /// + /// `handle` - an opaque struct received from a promoting function. + /// + /// # Return value + /// + /// 0 in case of success, non-zero otherwise. ++/// ++/// # Safety ++/// ++/// This function is safe as long as the first pointer comes from this library, or is null. + #[no_mangle] + pub unsafe extern "C" fn atp_demote_thread_from_real_time(thread_info: *mut atp_thread_info) -> i32 { + if thread_info.is_null() { + return 1; + } + let thread_info = (*thread_info).0; + + match demote_thread_from_real_time(thread_info) { +@@ -631,22 +652,22 @@ mod tests { + let info2 = thread_info_deserialize(bytes); + assert!(info == info2); + } + } + #[test] + fn test_remote_promotion() { + let (rd, wr) = pipe().unwrap(); + +- match fork().expect("fork failed") { ++ match unsafe { fork().expect("fork failed") } { + ForkResult::Parent{ child } => { + eprintln!("Parent PID: {}", getpid()); + let mut bytes = [0_u8; std::mem::size_of::()]; + match read(rd, &mut bytes) { +- Ok(_) => { ++ Ok(_) => { + let info = RtPriorityThreadInfo::deserialize(bytes); + match promote_thread_to_real_time(info, 0, 44100) { + Ok(_) => { + eprintln!("thread promotion in the child from the parent succeeded"); + assert!(true); + } + Err(_) => { + eprintln!("promotion Err"); +--- a/third_party/rust/audio_thread_priority/src/rt_linux.rs ++++ b/third_party/rust/audio_thread_priority/src/rt_linux.rs +@@ -3,16 +3,17 @@ + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + + /* Widely copied from dbus-rs/dbus/examples/rtkit.rs */ + + extern crate dbus; + extern crate libc; + + use std::cmp; ++use std::convert::TryInto; + use std::error::Error; + use std::io::Error as OSError; + + use dbus::{BusType, Connection, Message, MessageItem, Props}; + + use crate::AudioThreadPriorityError; + + const DBUS_SOCKET_TIMEOUT: i32 = 10_000; +@@ -107,27 +108,27 @@ fn rtkit_set_realtime(thread: u64, pid: + }; + let c = Connection::get_private(BusType::System)?; + c.send_with_reply_and_block(m, DBUS_SOCKET_TIMEOUT)?; + Ok(()) + } + + /// Returns the maximum priority, maximum real-time time slice, and the current real-time time + /// slice for this process. +-fn get_limits() -> Result<(i64, u64, libc::rlimit64), AudioThreadPriorityError> { ++fn get_limits() -> Result<(i64, u64, libc::rlimit), AudioThreadPriorityError> { + let c = Connection::get_private(BusType::System)?; + + let p = Props::new( + &c, + "org.freedesktop.RealtimeKit1", + "/org/freedesktop/RealtimeKit1", + "org.freedesktop.RealtimeKit1", + DBUS_SOCKET_TIMEOUT, + ); +- let mut current_limit = libc::rlimit64 { ++ let mut current_limit = libc::rlimit { + rlim_cur: 0, + rlim_max: 0, + }; + + let max_prio = item_as_i64(p.get("MaxRealtimePriority")?)?; + if max_prio < 0 { + return Err(AudioThreadPriorityError::new( + "invalid negative MaxRealtimePriority", +@@ -136,36 +137,41 @@ fn get_limits() -> Result<(i64, u64, lib + + let max_rttime = item_as_i64(p.get("RTTimeUSecMax")?)?; + if max_rttime < 0 { + return Err(AudioThreadPriorityError::new( + "invalid negative RTTimeUSecMax", + )); + } + +- if unsafe { libc::getrlimit64(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { ++ if unsafe { libc::getrlimit(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "getrlimit64", ++ "getrlimit", + Box::new(OSError::last_os_error()), + )); + } + + Ok((max_prio, (max_rttime as u64), current_limit)) + } + + fn set_limits(request: u64, max: u64) -> Result<(), AudioThreadPriorityError> { + // Set a soft limit to the limit requested, to be able to handle going over the limit using +- // SIGXCPU. Set the hard limit to the maxium slice to prevent getting SIGKILL. +- let new_limit = libc::rlimit64 { +- rlim_cur: request, +- rlim_max: max, ++ // SIGXCPU. Set the hard limit to the maximum slice to prevent getting SIGKILL. ++ #[allow(clippy::useless_conversion)] ++ let new_limit = libc::rlimit { ++ rlim_cur: request ++ .try_into() ++ .map_err(|_| AudioThreadPriorityError::new("setrlimit"))?, ++ rlim_max: max ++ .try_into() ++ .map_err(|_| AudioThreadPriorityError::new("setrlimit"))?, + }; +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &new_limit) } < 0 { ++ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &new_limit) } < 0 { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } + + Ok(()) + } + + pub fn promote_current_thread_to_real_time_internal( +@@ -267,43 +273,45 @@ pub fn set_real_time_hard_limit_internal + }; + let budget_us = (buffer_frames * 1_000_000 / audio_samplerate_hz) as u64; + + // It's only necessary to set RLIMIT_RTTIME to something when in the child, skip it if it's a + // remoting call. + let (_, max_rttime, _) = get_limits()?; + + // Only take what we need, or cap at the system limit, no further. +- let rttime_request = cmp::min(budget_us, max_rttime as u64); ++ let rttime_request = cmp::min(budget_us, max_rttime); + set_limits(rttime_request, max_rttime)?; + + Ok(()) + } + + /// Promote a thread (possibly in another process) identified by its tid, to real-time. + pub fn promote_thread_to_real_time_internal( + thread_info: RtPriorityThreadInfoInternal, + audio_buffer_frames: u32, + audio_samplerate_hz: u32, + ) -> Result { + let RtPriorityThreadInfoInternal { pid, thread_id, .. } = thread_info; + + let handle = RtPriorityHandleInternal { thread_info }; + +- let (_, _, limits) = get_limits()?; + set_real_time_hard_limit_internal(audio_buffer_frames, audio_samplerate_hz)?; + + let r = rtkit_set_realtime(thread_id as u64, pid as u64, RT_PRIO_DEFAULT); + + match r { + Ok(_) => Ok(handle), + Err(e) => { +- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &limits) } < 0 { ++ let (_, _, limits) = get_limits()?; ++ if limits.rlim_cur != libc::RLIM_INFINITY ++ && unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &limits) } < 0 ++ { + return Err(AudioThreadPriorityError::new_with_inner( +- "setrlimit64", ++ "setrlimit", + Box::new(OSError::last_os_error()), + )); + } + Err(AudioThreadPriorityError::new_with_inner( + "Thread promotion error", + e, + )) + } +--- a/third_party/rust/audio_thread_priority/src/rt_mach.rs ++++ b/third_party/rust/audio_thread_priority/src/rt_mach.rs +@@ -65,17 +65,17 @@ pub fn demote_current_thread_from_real_t + unsafe { + let mut h = rt_priority_handle; + let rv: kern_return_t = thread_policy_set( + h.tid, + THREAD_TIME_CONSTRAINT_POLICY, + (&mut h.previous_time_constraint_policy) as *mut _ as thread_policy_t, + THREAD_TIME_CONSTRAINT_POLICY_COUNT!(), + ); +- if rv != KERN_SUCCESS as i32 { ++ if rv != KERN_SUCCESS { + return Err(AudioThreadPriorityError::new( + "thread demotion error: thread_policy_get: RT", + )); + } + + info!("thread {} priority restored.", h.tid); + } + +@@ -114,17 +114,17 @@ pub fn promote_current_thread_to_real_ti + let mut rv: kern_return_t = thread_policy_get( + tid, + THREAD_TIME_CONSTRAINT_POLICY, + (&mut time_constraints) as *mut _ as thread_policy_t, + &mut count, + &mut get_default, + ); + +- if rv != KERN_SUCCESS as i32 { ++ if rv != KERN_SUCCESS { + return Err(AudioThreadPriorityError::new( + "thread promotion error: thread_policy_get: time_constraint", + )); + } + + rt_priority_handle.previous_time_constraint_policy = time_constraints; + + let cb_duration = buffer_frames as f32 / (audio_samplerate_hz as f32) * 1000.; +@@ -144,17 +144,17 @@ pub fn promote_current_thread_to_real_ti + }; + + rv = thread_policy_set( + tid, + THREAD_TIME_CONSTRAINT_POLICY, + (&mut time_constraints) as *mut _ as thread_policy_t, + THREAD_TIME_CONSTRAINT_POLICY_COUNT!(), + ); +- if rv != KERN_SUCCESS as i32 { ++ if rv != KERN_SUCCESS { + return Err(AudioThreadPriorityError::new( + "thread promotion error: thread_policy_set: time_constraint", + )); + } + + info!("thread {} bumped to real time priority.", tid); + } + +--- a/third_party/rust/audio_thread_priority/src/rt_win.rs ++++ b/third_party/rust/audio_thread_priority/src/rt_win.rs +@@ -1,72 +1,43 @@ +-#[cfg(feature = "windows")] +-mod os { +- pub use windows::Win32::Foundation::GetLastError; +- pub use windows::Win32::Foundation::HANDLE; +- pub use windows::Win32::Foundation::PSTR; +- pub use windows::Win32::System::Threading::{ +- AvRevertMmThreadCharacteristics, AvSetMmThreadCharacteristicsA, +- }; +- +- pub fn ok(rv: windows::Win32::Foundation::BOOL) -> bool { +- rv.as_bool() +- } +- +- pub fn invalid_handle(handle: HANDLE) -> bool { +- handle.is_invalid() +- } +-} +-#[cfg(feature = "winapi")] +-mod os { +- pub use winapi::shared::ntdef::HANDLE; +- pub use winapi::um::avrt::{AvRevertMmThreadCharacteristics, AvSetMmThreadCharacteristicsA}; +- pub use winapi::um::errhandlingapi::GetLastError; +- +- pub fn ok(rv: winapi::shared::minwindef::BOOL) -> bool { +- rv != 0 +- } +- +- #[allow(non_snake_case)] +- pub fn PSTR(ptr: *const u8) -> *const i8 { +- ptr as _ +- } +- +- pub fn invalid_handle(handle: HANDLE) -> bool { +- handle.is_null() +- } +-} ++use windows_sys::s; ++use windows_sys::Win32::Foundation::GetLastError; ++use windows_sys::Win32::Foundation::FALSE; ++use windows_sys::Win32::Foundation::HANDLE; ++use windows_sys::Win32::System::Threading::{ ++ AvRevertMmThreadCharacteristics, AvSetMmThreadCharacteristicsA, ++}; + + use crate::AudioThreadPriorityError; + + use log::info; + + #[derive(Debug)] + pub struct RtPriorityHandleInternal { + mmcss_task_index: u32, +- task_handle: os::HANDLE, ++ task_handle: HANDLE, + } + + impl RtPriorityHandleInternal { +- pub fn new(mmcss_task_index: u32, task_handle: os::HANDLE) -> RtPriorityHandleInternal { ++ pub fn new(mmcss_task_index: u32, task_handle: HANDLE) -> RtPriorityHandleInternal { + RtPriorityHandleInternal { + mmcss_task_index, + task_handle, + } + } + } + + pub fn demote_current_thread_from_real_time_internal( + rt_priority_handle: RtPriorityHandleInternal, + ) -> Result<(), AudioThreadPriorityError> { +- let rv = unsafe { os::AvRevertMmThreadCharacteristics(rt_priority_handle.task_handle) }; +- if !os::ok(rv) { ++ let rv = unsafe { AvRevertMmThreadCharacteristics(rt_priority_handle.task_handle) }; ++ if rv == FALSE { + return Err(AudioThreadPriorityError::new(&format!( + "Unable to restore the thread priority ({:?})", +- unsafe { os::GetLastError() } ++ unsafe { GetLastError() } + ))); + } + + info!( + "task {} priority restored.", + rt_priority_handle.mmcss_task_index + ); + +@@ -74,24 +45,23 @@ pub fn demote_current_thread_from_real_t + } + + pub fn promote_current_thread_to_real_time_internal( + _audio_buffer_frames: u32, + _audio_samplerate_hz: u32, + ) -> Result { + let mut task_index = 0u32; + +- let handle = +- unsafe { os::AvSetMmThreadCharacteristicsA(os::PSTR("Audio\0".as_ptr()), &mut task_index) }; ++ let handle = unsafe { AvSetMmThreadCharacteristicsA(s!("Audio"), &mut task_index) }; + let handle = RtPriorityHandleInternal::new(task_index, handle); + +- if os::invalid_handle(handle.task_handle) { ++ if handle.task_handle == 0 { + return Err(AudioThreadPriorityError::new(&format!( + "Unable to restore the thread priority ({:?})", +- unsafe { os::GetLastError() } ++ unsafe { GetLastError() } + ))); + } + + info!( + "task {} bumped to real time priority.", + handle.mmcss_task_index + ); + +--- a/third_party/rust/audioipc2-client/.cargo-checksum.json ++++ b/third_party/rust/audioipc2-client/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"files":{"Cargo.toml":"234b81b986ab93768ccacc68d973d6125e3769337d4b0a7b137d19d1666db8a4","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/context.rs":"86d31460a48a9bdc0ac4fbef522d267c26f68dd79a12e0cbc35b3a4b6f6449dc","src/lib.rs":"c4a6797734489280f6b97dd72c9e51a7bd7be4104592eece3929e29d45cbca4a","src/send_recv.rs":"859abe75b521eb4297c84b30423814b5b87f3c7741ad16fe72189212e123e1ac","src/stream.rs":"3101f4052e35c1600adafedc67aed92d7d5531ff0ff4845de0a5ea3cedef872d"},"package":null} +\ No newline at end of file ++{"files":{"Cargo.toml":"d7cfe88a0f0086d4216e3f4ad3de0620417fcbda61c9852476459a9249131996","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/context.rs":"86d31460a48a9bdc0ac4fbef522d267c26f68dd79a12e0cbc35b3a4b6f6449dc","src/lib.rs":"c4a6797734489280f6b97dd72c9e51a7bd7be4104592eece3929e29d45cbca4a","src/send_recv.rs":"859abe75b521eb4297c84b30423814b5b87f3c7741ad16fe72189212e123e1ac","src/stream.rs":"3101f4052e35c1600adafedc67aed92d7d5531ff0ff4845de0a5ea3cedef872d"},"package":null} +\ No newline at end of file +--- a/third_party/rust/audioipc2-client/Cargo.toml ++++ b/third_party/rust/audioipc2-client/Cargo.toml +@@ -16,15 +16,18 @@ version = "0.5.0" + authors = [ + "Matthew Gregan ", + "Dan Glastonbury ", + ] + description = "Cubeb Backend for talking to remote cubeb server." + license = "ISC" + + [dependencies] +-audio_thread_priority = "0.26" + cubeb-backend = "0.10" + log = "0.4" + ++[dependencies.audio_thread_priority] ++version = "0.30" ++default-features = false ++ + [dependencies.audioipc] + path = "../audioipc" + package = "audioipc2" +--- a/third_party/rust/audioipc2-server/.cargo-checksum.json ++++ b/third_party/rust/audioipc2-server/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"files":{"Cargo.toml":"9c801164c20a9af8c43135848244112002bd07a05b1c7165c2eb7be2db23898b","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/lib.rs":"06aff4fd1326aeabb16b01f81a6f3c59c1717ebe96285a063724830cdf30303a","src/server.rs":"ea839fe4607ba6b70a1ef5dfb2305eb668b148820c5590b87192609fbe3c9edd"},"package":null} +\ No newline at end of file ++{"files":{"Cargo.toml":"4e66d9ec1e8baa7ad01ace373a921bc019e38bcb23f782be1daa8578f40b6086","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/lib.rs":"06aff4fd1326aeabb16b01f81a6f3c59c1717ebe96285a063724830cdf30303a","src/server.rs":"ea839fe4607ba6b70a1ef5dfb2305eb668b148820c5590b87192609fbe3c9edd"},"package":null} +\ No newline at end of file +--- a/third_party/rust/audioipc2-server/Cargo.toml ++++ b/third_party/rust/audioipc2-server/Cargo.toml +@@ -16,21 +16,24 @@ version = "0.5.0" + authors = [ + "Matthew Gregan ", + "Dan Glastonbury ", + ] + description = "Remote cubeb server" + license = "ISC" + + [dependencies] +-audio_thread_priority = "0.26" + cubeb-core = "0.10.0" + log = "0.4" + once_cell = "1.2.0" + slab = "0.4" + ++[dependencies.audio_thread_priority] ++version = "0.30" ++default-features = false ++ + [dependencies.audioipc] + path = "../audioipc" + package = "audioipc2" + + [dependencies.error-chain] + version = "0.12.0" + default-features = false +--- a/third_party/rust/audioipc2/.cargo-checksum.json ++++ b/third_party/rust/audioipc2/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"files":{"Cargo.toml":"8434bf0fc2131bdca6655fc0e6ff3b87218c92f342785dd453a4018ed1a70b52","benches/serialization.rs":"d56855d868dab6aa22c8b03a61084535351b76c94b68d8b1d20764e352fe473f","build.rs":"65df9a97c6cdaa3faf72581f04ac289197b0b1797d69d22c1796e957ff1089e2","src/codec.rs":"38408b512d935cd7889a03b25dd14b36083ec4e6d2fcabd636182cf45e3d50bc","src/errors.rs":"67a4a994d0724397657581cde153bdfc05ce86e7efc467f23fafc8f64df80fa4","src/ipccore.rs":"ba339eebdc2d8a6d0cb9b294344809e63e404e220fda643b63a8a3ff63a755e8","src/lib.rs":"3881e9069f37e824cbb5dacf1c37192c08b84068098fef96ede6f2ae284edfe3","src/messages.rs":"452362da2cace9a0f2e3134c190ecb6a9997f8be4036cde06643e17c6c238240","src/rpccore.rs":"025b6614f1c42b96b0a8e74fd7881032d338c66e0d67ec0af70f910a9e30ebe1","src/shm.rs":"f8bc0ab17e04b86a746aea7aa4eb15f402e29d80e0d2f9d7c22ac8375a0cea85","src/sys/mod.rs":"e6fa1d260abf093e1f7b50185195e2d3aee0eb8c9774c6f253953b5896d838f3","src/sys/unix/cmsg.rs":"6f0236bf6cd66ccd237b268348a826ae1d266073c2adadcfaae703c556230065","src/sys/unix/cmsghdr.c":"d7344b3dc15cdce410c68669b848bb81f7fe36362cd3699668cb613fa05180f8","src/sys/unix/mod.rs":"59835f0d5509940078b1820a54f49fc5514adeb3e45e7d21e3ab917431da2e74","src/sys/unix/msg.rs":"0e297d73bae9414184f85c2209cca0a3fde6d999a3f1d3f42faa3f56b6d57233","src/sys/windows/mod.rs":"7eaabb76e62c6962b636320e2bbf79a78fce61659c799a798f7dd6d56b0be8a1"},"package":null} +\ No newline at end of file ++{"files":{"Cargo.toml":"4d025a5bf0f59f660b3b52ec6a0da028f61269b17e4e33041b768ea07b8a9448","benches/serialization.rs":"d56855d868dab6aa22c8b03a61084535351b76c94b68d8b1d20764e352fe473f","build.rs":"65df9a97c6cdaa3faf72581f04ac289197b0b1797d69d22c1796e957ff1089e2","src/codec.rs":"38408b512d935cd7889a03b25dd14b36083ec4e6d2fcabd636182cf45e3d50bc","src/errors.rs":"67a4a994d0724397657581cde153bdfc05ce86e7efc467f23fafc8f64df80fa4","src/ipccore.rs":"ba339eebdc2d8a6d0cb9b294344809e63e404e220fda643b63a8a3ff63a755e8","src/lib.rs":"3881e9069f37e824cbb5dacf1c37192c08b84068098fef96ede6f2ae284edfe3","src/messages.rs":"452362da2cace9a0f2e3134c190ecb6a9997f8be4036cde06643e17c6c238240","src/rpccore.rs":"025b6614f1c42b96b0a8e74fd7881032d338c66e0d67ec0af70f910a9e30ebe1","src/shm.rs":"f8bc0ab17e04b86a746aea7aa4eb15f402e29d80e0d2f9d7c22ac8375a0cea85","src/sys/mod.rs":"e6fa1d260abf093e1f7b50185195e2d3aee0eb8c9774c6f253953b5896d838f3","src/sys/unix/cmsg.rs":"6f0236bf6cd66ccd237b268348a826ae1d266073c2adadcfaae703c556230065","src/sys/unix/cmsghdr.c":"d7344b3dc15cdce410c68669b848bb81f7fe36362cd3699668cb613fa05180f8","src/sys/unix/mod.rs":"59835f0d5509940078b1820a54f49fc5514adeb3e45e7d21e3ab917431da2e74","src/sys/unix/msg.rs":"0e297d73bae9414184f85c2209cca0a3fde6d999a3f1d3f42faa3f56b6d57233","src/sys/windows/mod.rs":"7eaabb76e62c6962b636320e2bbf79a78fce61659c799a798f7dd6d56b0be8a1"},"package":null} +\ No newline at end of file +--- a/third_party/rust/audioipc2/Cargo.toml ++++ b/third_party/rust/audioipc2/Cargo.toml +@@ -58,17 +58,17 @@ features = ["html_reports"] + + [build-dependencies] + cc = "1.0" + + [target."cfg(target_os = \"android\")".dependencies] + ashmem = "0.1.2" + + [target."cfg(target_os = \"linux\")".dependencies.audio_thread_priority] +-version = "0.26.1" ++version = "0.30" + default-features = false + + [target."cfg(unix)".dependencies] + arrayvec = "0.7" + iovec = "0.1" + libc = "0.2" + memmap2 = "0.5" + +--- a/toolkit/library/rust/shared/Cargo.toml ++++ b/toolkit/library/rust/shared/Cargo.toml +@@ -20,18 +20,18 @@ xpcom = { path = "../../../../xpcom/rust + prefs_parser = { path = "../../../../modules/libpref/parser" } + static_prefs = { path = "../../../../modules/libpref/init/static_prefs" } + profiler_helper = { path = "../../../../tools/profiler/rust-helper", optional = true } + mozurl = { path = "../../../../netwerk/base/mozurl" } + webrender_bindings = { path = "../../../../gfx/webrender_bindings" } + cubeb-coreaudio = { git = "https://github.com/mozilla/cubeb-coreaudio-rs", rev = "93b5c01a131f65c83c11aeb317f4583405c5eb79", optional = true } + cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="cf48897be5cbe147d051ebbbe1eaf5fd8fb6bbc9", optional = true, features=["pulse-dlopen"] } + cubeb-sys = { version = "0.10.3", optional = true, features=["gecko-in-tree"] } +-audioipc2-client = { git = "https://github.com/mozilla/audioipc", rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543", optional = true } +-audioipc2-server = { git = "https://github.com/mozilla/audioipc", rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543", optional = true } ++audioipc2-client = { git = "https://github.com/mozilla/audioipc", rev = "6be424d75f1367e70f2f5ddcacd6d0237e81a6a9", optional = true } ++audioipc2-server = { git = "https://github.com/mozilla/audioipc", rev = "6be424d75f1367e70f2f5ddcacd6d0237e81a6a9", optional = true } + encoding_glue = { path = "../../../../intl/encoding_glue" } + authrs_bridge = { path = "../../../../dom/webauthn/authrs_bridge" } + gkrust_utils = { path = "../../../../xpcom/rust/gkrust_utils" } + gecko_logger = { path = "../../../../xpcom/rust/gecko_logger" } + rsdparsa_capi = { path = "../../../../dom/media/webrtc/sdp/rsdparsa_capi" } + # We have these to enforce common feature sets for said crates. + log = {version = "0.4", features = ["release_max_level_info"]} + cose-c = { version = "0.1.5" } +@@ -39,17 +39,17 @@ jsrust_shared = { path = "../../../../js + cascade_bloom_filter = { path = "../../../components/cascade_bloom_filter" } + cert_storage = { path = "../../../../security/manager/ssl/cert_storage" } + crypto_hash = { path = "../../../../security/manager/ssl/crypto_hash" } + data_storage = { path = "../../../../security/manager/ssl/data_storage" } + bitsdownload = { path = "../../../components/bitsdownload", optional = true } + storage = { path = "../../../../storage/rust" } + bookmark_sync = { path = "../../../components/places/bookmark_sync", optional = true } + chardetng_c = "0.1.1" +-audio_thread_priority = { version = "0.26.1", default_features = false, features = ["winapi"] } ++audio_thread_priority = { version = "0.30", default_features = false } + mdns_service = { path="../../../../dom/media/webrtc/transport/mdns_service", optional = true } + neqo_glue = { path = "../../../../netwerk/socket/neqo_glue" } + wgpu_bindings = { path = "../../../../gfx/wgpu_bindings" } + mapped_hyph = { git = "https://github.com/jfkthame/mapped_hyph.git", rev = "c7651a0cffff41996ad13c44f689bd9cd2192c01" } + fog_control = { path = "../../../components/glean" } + app_services_logger = { path = "../../../../services/common/app_services_logger" } + http_sfv = { path = "../../../../netwerk/base/http-sfv" } + unic-langid = { version = "0.9", features = ["likelysubtags"] } diff --git a/user/zotero/utils-libc-lfs64.patch b/user/zotero/utils-libc-lfs64.patch new file mode 100644 index 0000000..020b4aa --- /dev/null +++ b/user/zotero/utils-libc-lfs64.patch @@ -0,0 +1,13 @@ +diff --git a/third_party/rust/getrandom/src/util_libc.rs.orig b/third_party/rust/getrandom/src/util_libc.rs +index 3cecb1d..6316b38 100644 +--- a/third_party/rust/getrandom/src/util_libc.rs.orig ++++ b/third_party/rust/getrandom/src/util_libc.rs +@@ -101,7 +101,7 @@ impl Weak { + + cfg_if! { + if #[cfg(any(target_os = "linux", target_os = "emscripten"))] { +- use libc::open64 as open; ++ use libc::open as open; + } else { + use libc::open; + } diff --git a/user/firefox-esr/vendor-prefs.js b/user/zotero/vendor-prefs.js similarity index 100% rename from user/firefox-esr/vendor-prefs.js rename to user/zotero/vendor-prefs.js diff --git a/user/zotero/zotero_build-modifications.diff b/user/zotero/zotero_build-modifications.diff new file mode 100644 index 0000000..687459d --- /dev/null +++ b/user/zotero/zotero_build-modifications.diff @@ -0,0 +1,104 @@ +diff --git a/app/build.sh b/app/build.sh +index 649d629..7d078b8 100755 +--- a/app/build.sh ++++ b/app/build.sh +@@ -59,10 +59,7 @@ function abspath { + } + + function check_lfs_file { +- if [ "$(head --bytes 5 "$1")" = "versi" ]; then +- echo "$1 not checked out -- install Git LFS and run 'git lfs pull'" >&2 +- exit 1 +- fi ++ return 0 + } + + SOURCE_DIR="" +@@ -840,18 +837,13 @@ if [ $BUILD_LINUX == 1 ]; then + cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" + + # Use our own launcher that calls the original Firefox executable with -app +- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin ++ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin + cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero + + # Copy Ubuntu launcher files + cp "$CALLDIR/linux/zotero.desktop" "$APPDIR" + cp "$CALLDIR/linux/set_launcher_icon" "$APPDIR" + +- # Use our own updater, because Mozilla's requires updates signed by Mozilla +- check_lfs_file "$CALLDIR/linux/updater.tar.xz" +- tar xf "$CALLDIR/linux/updater.tar.xz" --to-stdout updater-$arch > "$APPDIR/updater" +- chmod 755 "$APPDIR/updater" +- + # Copy app files + rsync -a "$base_dir/" "$APPDIR/" + +@@ -860,6 +852,7 @@ if [ $BUILD_LINUX == 1 ]; then + cp -RH "$CALLDIR/modules/zotero-libreoffice-integration/install" "$APPDIR/integration/libreoffice" + + # Copy icons ++ mkdir -p "$APPDIR"/icons + cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/symbolic.svg" "$APPDIR/icons/" + +diff --git a/app/scripts/fetch_xulrunner b/app/scripts/fetch_xulrunner +index 8b3d918..120b085 100755 +--- a/app/scripts/fetch_xulrunner ++++ b/app/scripts/fetch_xulrunner +@@ -132,15 +132,6 @@ function modify_omni { + # Continue using app.update.auto in prefs.js on Windows + replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.jsm + +- # Prompt if major update is available instead of installing automatically on restart +- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { +- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); +- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); +- Services.obs.notifyObservers(update, "update-available", "show-prompt"); +- return; +- } +- if (!updateAuto) {' modules/UpdateService.jsm +- + # Avoid console warning about resource://gre/modules/FxAccountsCommon.js + replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.jsm + +@@ -470,36 +461,11 @@ fi + + if [ $BUILD_LINUX == 1 ]; then + GECKO_VERSION="$GECKO_VERSION_LINUX" +- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" + ++ pushd firefox-x86_64 ++ modify_omni linux64 ++ popd + +- # Include 32-bit build if not in CI +- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then +- arches="x86_64" +- else +- arches="i686 x86_64" +- fi +- for arch in $arches; do +- xdir="firefox-$arch" +- rm -rf $xdir +- +- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" +- if [ -e "$archived_file" ]; then +- echo "Using $archived_file" +- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" +- else +- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" +- fi +- +- tar xvf firefox-$GECKO_VERSION.tar.bz2 +- mv firefox firefox-$arch +- +- pushd firefox-$arch +- modify_omni +- popd +- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux +- rm "firefox-$GECKO_VERSION.tar.bz2" +- done + fi + + echo Done diff --git a/user/firefox-esr/zstandard.patch b/user/zotero/zstandard.patch similarity index 100% rename from user/firefox-esr/zstandard.patch rename to user/zotero/zstandard.patch From 800e0ff1b433288838a06b9731125a7a94c41a8a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 3 Feb 2024 14:54:15 -0500 Subject: [PATCH 153/738] user/zotero: upgrade to 7.0.0_beta57 l --- user/zotero/APKBUILD | 22 +++++++++++++++------ user/zotero/zotero_build-modifications.diff | 3 ++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 7c0553b..a0e35e4 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,15 +1,15 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_git20240131 -pkgrel=2 +pkgver=7.0.0_beta57 +pkgrel=0 _fxver=102.15.1 # Date of release, YY-MM-DD for metainfo file (see package()) -_releasedate=2024-02-02 +_releasedate=2024-02-03 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." arch="x86_64" url="https://github.com/zotero/zotero" -_gittag=7.0.0._20240131 +_gittag=7.0.0-beta.57 license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" options="!check" # No test suite depends=" @@ -103,6 +103,11 @@ source=" builddir="$srcdir"/firefox-$_fxver _zoterodir="$srcdir"/zotero-client-$_gittag +_mozappdir=/usr/lib/zotero + +# help our shared-object scanner to find the libs +ldpath="$_mozappdir" +sonameprefix="$pkgname:" # we need this because cargo verifies checksums of all files in vendor # crates when it builds and gives us no way to override or update the @@ -308,6 +313,9 @@ build() { EOF esac + # set rpath so linker finds the libs + export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" + ./mach build # install to where zotero expects it @@ -333,6 +341,8 @@ package() { install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" # Copy zotero icons to a standard location + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon32.png" "$pkgdir/usr/share/icons/hicolor/32x32/apps/zotero.png" + install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon64.png" "$pkgdir/usr/share/icons/hicolor/64x64/apps/zotero.png" install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon128.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/zotero.png" # Close shell when launching @@ -369,6 +379,6 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -27ca570df108cb9ffa48254f7cc5ef133371dcab652a12b2f636b87a2378d51afa6c118533d8b1779071441fa2b26663d2275db9d441f17dc7431dfdc90996ea zotero-client-7.0.0._20240131.tar.gz -dca620aa9a96c83d7a81cf11a2a1cf84ef94a1c06688cf00e2b03fd3fd671b6bd08094b7f76ef0f92cbfc2a9a97317855e5b39d17d51054ea3c539d2b3ee0ab2 zotero_build-modifications.diff +55d3a4e4d3d647e21343689e1c9b105efc05eb3f2edf5017eebe50ecac6c5bd7d8ad5b5fa701abfbe7beec0b064eec88584b6b17cab0a8fc689500ed72a5eb23 zotero-client-7.0.0-beta.57.tar.gz +089370d86388b34003179ebf95894fb68069fe7ee1624f88e6c411bbbb4f7bc846287cf593034487967cf2bdf807c761212bdb6356bd604d1d04de35aeb3e646 zotero_build-modifications.diff " diff --git a/user/zotero/zotero_build-modifications.diff b/user/zotero/zotero_build-modifications.diff index 687459d..d8ff0c6 100644 --- a/user/zotero/zotero_build-modifications.diff +++ b/user/zotero/zotero_build-modifications.diff @@ -39,8 +39,9 @@ index 649d629..7d078b8 100755 # Copy icons + mkdir -p "$APPDIR"/icons + cp "$CALLDIR/linux/icons/icon32.png" "$APPDIR/icons/" + cp "$CALLDIR/linux/icons/icon64.png" "$APPDIR/icons/" cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" - cp "$CALLDIR/linux/icons/symbolic.svg" "$APPDIR/icons/" diff --git a/app/scripts/fetch_xulrunner b/app/scripts/fetch_xulrunner index 8b3d918..120b085 100755 From e1c9e01b2763769586554889ad1224c6cfa8feaf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 3 Feb 2024 15:50:35 -0500 Subject: [PATCH 154/738] user/zotero: patch cleanup --- user/zotero/bindgen.patch | 172 ---- user/zotero/build-sh-fix.patch | 44 - .../firefox-102.12.0-consolidated-1.patch | 343 -------- user/zotero/mp4parse-rust-1.70.patch | 32 - user/zotero/no-ccache-stats.patch | 13 - user/zotero/ppc-musttail.patch | 30 - user/zotero/ppc-webrtc.patch | 23 - user/zotero/update-audio-pc.patch | 798 ------------------ .../zotero/xulrunner-get-alpine-firefox.patch | 63 -- 9 files changed, 1518 deletions(-) delete mode 100644 user/zotero/bindgen.patch delete mode 100644 user/zotero/build-sh-fix.patch delete mode 100644 user/zotero/firefox-102.12.0-consolidated-1.patch delete mode 100644 user/zotero/mp4parse-rust-1.70.patch delete mode 100644 user/zotero/no-ccache-stats.patch delete mode 100644 user/zotero/ppc-musttail.patch delete mode 100644 user/zotero/ppc-webrtc.patch delete mode 100644 user/zotero/update-audio-pc.patch delete mode 100644 user/zotero/xulrunner-get-alpine-firefox.patch diff --git a/user/zotero/bindgen.patch b/user/zotero/bindgen.patch deleted file mode 100644 index c407bfc..0000000 --- a/user/zotero/bindgen.patch +++ /dev/null @@ -1,172 +0,0 @@ -Submitted By: Douglas R. Reno -Date: 2022-03-19 -Initial Package Version: 102.9.0esr -Upstream Status: Applied -Origin: rust-bindgen upstream (#2338 and #2319), Self -Description: Updates the bundled rust-bindgen crate to be compatible - with Clang/LLVM 16. - - Without this patch, you will encounter "not a valid - Ident" errors when building Firefox, and it will come - out of fallback.rs in proc-macro2. This references - mfbt/Vector.h (symlinked to - firefox-build-dir/dist/include/mozilla/Vector.h) in - it's error output, but it is because LLVM changed how - it reports anonymous items. - -diff -Naurp firefox-102.9.0.orig/third_party/rust/bindgen/.cargo-checksum.json firefox-102.9.0/third_party/rust/bindgen/.cargo-checksum.json ---- firefox-102.9.0.orig/third_party/rust/bindgen/.cargo-checksum.json 2023-03-09 17:59:38.000000000 -0600 -+++ firefox-102.9.0/third_party/rust/bindgen/.cargo-checksum.json 2023-03-19 21:04:15.981453212 -0500 -@@ -1 +1 @@ --{"files":{"Cargo.lock":"836e8f8431bd4ebdac9b1251676f6afa755757e401455259fe659e7280be8230","Cargo.toml":"3a585a6e27a177f08dedcb21f7d555e9db58fa158203273b228db91ebee4e6b3","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"29fe30d7a2729922b13a578bc8f5eedc808fd0f2ef67a3f12017548baf8f293a","build.rs":"3fe1e534c99df4ee207606794f133fb187c0948e055389f74c904994ecaed38a","csmith-fuzzing/README.md":"7107b70fedb0c0a0cadb3c439a49c1bd0119a6d38dc63b1aecc74d1942256ef2","src/callbacks.rs":"1e5a118b94977938751758ac0495b1d41ce5e280c066614a4a7cbd930f326350","src/clang.rs":"aa0644278a8319506be08904c0f6706fbcdcd72eb1e85564b8c7488bd810e126","src/codegen/bitfield_unit.rs":"a8fb1a2d97a99685106fcaac87d2013f79d2690d6a46ff05ad1e3629b6075664","src/codegen/bitfield_unit_tests.rs":"dd252134118450800b516e375c872e17b4c1aee63a7b8adbe5b2cd53434bbc7e","src/codegen/dyngen.rs":"15149bc927e5b2706f93e52a6b26ef55384b3baf40bfc9bc4343e9820479f26b","src/codegen/error.rs":"5e308b8c54b68511fc8ea2ad15ddac510172c4ff460a80a265336440b0c9653d","src/codegen/helpers.rs":"ea83104addb8af31736aaeb850e10c694cd434befe7ffaaa206208f722d72c58","src/codegen/impl_debug.rs":"1ff9ec754b610c98c757b114c6509473ead0e1a9375e9089a7fa40a41a753709","src/codegen/impl_partialeq.rs":"5e526fd88dd15dd1f04addd3c6ecea1d3da92293fadf04346d6c716791f436f9","src/codegen/mod.rs":"19fd11feefab0ff9ecaf8a01583583008269adce805508fb61b9a8acc49da586","src/codegen/struct_layout.rs":"b62c3569dcfb011daa4d09f1aa9eb732da69546c3deb9f247fa8ce7114dbc7b9","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"fafb85510b1dfc9a41ed71f7d765fca49b236deb4ee567e00204e751362aaf23","src/ir/analysis/derive.rs":"ff4821d810961696008a57ae496f95ebcdc14b4c439fe87d78a84817442fa759","src/ir/analysis/has_destructor.rs":"d9a3a24bd4cabc87cddb0c76d27da1691f8f37ffb8eadf5b5975a1c44dea99c2","src/ir/analysis/has_float.rs":"5242cc07ec4d4bdf5a792e1f8ee5758a87838314917d42dbb9dcfc19620520ce","src/ir/analysis/has_type_param_in_array.rs":"ec3fb67f782abb4c866da91bce3f7ee6f8e2310c47a54065282431b909233f7d","src/ir/analysis/has_vtable.rs":"63e2d0f62171811893615c11453bc7b39438d0d83c3eb444dec2346140d86efe","src/ir/analysis/mod.rs":"2c54f0cd6f3d86cf3fcb07d9d0be06cde839cab4170671c80d806a3f27820faf","src/ir/analysis/sizedness.rs":"17f1f2b6affd025f73853b9b5a76b3f157b5f9e563e9eaa374735fcb84c13308","src/ir/analysis/template_params.rs":"da949976a7fd04d6fc564ea6a77dfdbf4f5bf05db64687ed7a0616cba598a42d","src/ir/annotations.rs":"1c931d7bbba1e1613e9cccaab58d14f75e79b831b5c881e41f5b5257a9cbced7","src/ir/comment.rs":"31d64a49ae3d9c3c348fa2539e03306ca3a23fae429cab452e42b31ecf632145","src/ir/comp.rs":"abaa90e27dc6416f1b8db003f87888e7651d5b46c4d4526153980e5621612e54","src/ir/context.rs":"3a76458a5aa74075a60a5cd752ed59ad3943054f55b017700389f78072935215","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"e25ff72ac174a798894c9673d81bdfb86fa9f4228b34a14ce0dc741a186a52bd","src/ir/enum_ty.rs":"e49e3c6ffc0289584e2f836fe56a4b7ebf6ca3f8b602248141d67b9f533770cc","src/ir/function.rs":"aa454ace56bda8074b2865933282aa124624310c8bc0c994d454f5799f4e88be","src/ir/int.rs":"68a86182743ec338d58e42203364dc7c8970cb7ec3550433ca92f0c9489b4442","src/ir/item.rs":"a71bdacc7419ec86d52ac534158cf4bfa4600e9cbc214c0075766700f5b053b0","src/ir/item_kind.rs":"7666a1ff1b8260978b790a08b4139ab56b5c65714a5652bbcec7faa7443adc36","src/ir/layout.rs":"755e3787c262de434a53a8c326f0e825f95415ed6b0f925c1cddf208ca8e3bc4","src/ir/mod.rs":"713cd537434567003197a123cbae679602c715e976d22f7b23dafd0826ea4c70","src/ir/module.rs":"70cf6ddfeabe6cdc13fdc767c783216c073404848d827e85fc6c2de3a19b5c3f","src/ir/objc.rs":"195fb2a3e4371b90244f3a8f295fd80cc77e0f2daf8fd27e3d8e5b78bd6b55d6","src/ir/template.rs":"44bd7214cf1e7f70e60694115082aac5b8a6c1687fff584cd08cdcfadabc5734","src/ir/traversal.rs":"5ac088277f4dfe2918d81b9294aaee41fd83db8e46def66a05f89de078bf4c49","src/ir/ty.rs":"8f2b970da76850685c4d334289af6dede7742862d7a81f2236115afaa1a92fa9","src/ir/var.rs":"86e9f19403fb9231ba60dec0a04e5b56fe28a37c7a5e6f676c978789c9d93c5a","src/lib.rs":"ed2d0aeb48b28b4a96b8e76a10e00b10cb6cc32c0a686d536f9021463b7ee0e8","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"74e582c37b146090332b1496f5b4bca02c7629d03a4ae40302cb4a723f08e445","src/options.rs":"119358b741601dafc13560856f6e4b4f78b6cd2b19067893c2672ba8f5dc6de1","src/parse.rs":"4ffc54415eadb622ee488603862788c78361ef2c889de25259441a340c2a010f","src/regex_set.rs":"6c46357fb1ee68250e5e017cbf691f340041489ae78599eee7a5665a6ddce27f","src/time.rs":"8efe317e7c6b5ba8e0865ce7b49ca775ee8a02590f4241ef62f647fa3c22b68e"},"package":"2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239"} -\ No newline at end of file -+{"files":{"Cargo.lock":"836e8f8431bd4ebdac9b1251676f6afa755757e401455259fe659e7280be8230","Cargo.toml":"3a585a6e27a177f08dedcb21f7d555e9db58fa158203273b228db91ebee4e6b3","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"29fe30d7a2729922b13a578bc8f5eedc808fd0f2ef67a3f12017548baf8f293a","build.rs":"3fe1e534c99df4ee207606794f133fb187c0948e055389f74c904994ecaed38a","csmith-fuzzing/README.md":"7107b70fedb0c0a0cadb3c439a49c1bd0119a6d38dc63b1aecc74d1942256ef2","src/callbacks.rs":"1e5a118b94977938751758ac0495b1d41ce5e280c066614a4a7cbd930f326350","src/clang.rs":"30fdc473ff70dcbc394927d6fb674d70a62c1a3847e855becd988dc476997815","src/codegen/bitfield_unit.rs":"a8fb1a2d97a99685106fcaac87d2013f79d2690d6a46ff05ad1e3629b6075664","src/codegen/bitfield_unit_tests.rs":"dd252134118450800b516e375c872e17b4c1aee63a7b8adbe5b2cd53434bbc7e","src/codegen/dyngen.rs":"15149bc927e5b2706f93e52a6b26ef55384b3baf40bfc9bc4343e9820479f26b","src/codegen/error.rs":"5e308b8c54b68511fc8ea2ad15ddac510172c4ff460a80a265336440b0c9653d","src/codegen/helpers.rs":"ea83104addb8af31736aaeb850e10c694cd434befe7ffaaa206208f722d72c58","src/codegen/impl_debug.rs":"1ff9ec754b610c98c757b114c6509473ead0e1a9375e9089a7fa40a41a753709","src/codegen/impl_partialeq.rs":"5e526fd88dd15dd1f04addd3c6ecea1d3da92293fadf04346d6c716791f436f9","src/codegen/mod.rs":"19fd11feefab0ff9ecaf8a01583583008269adce805508fb61b9a8acc49da586","src/codegen/struct_layout.rs":"b62c3569dcfb011daa4d09f1aa9eb732da69546c3deb9f247fa8ce7114dbc7b9","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"fafb85510b1dfc9a41ed71f7d765fca49b236deb4ee567e00204e751362aaf23","src/ir/analysis/derive.rs":"ff4821d810961696008a57ae496f95ebcdc14b4c439fe87d78a84817442fa759","src/ir/analysis/has_destructor.rs":"d9a3a24bd4cabc87cddb0c76d27da1691f8f37ffb8eadf5b5975a1c44dea99c2","src/ir/analysis/has_float.rs":"5242cc07ec4d4bdf5a792e1f8ee5758a87838314917d42dbb9dcfc19620520ce","src/ir/analysis/has_type_param_in_array.rs":"ec3fb67f782abb4c866da91bce3f7ee6f8e2310c47a54065282431b909233f7d","src/ir/analysis/has_vtable.rs":"63e2d0f62171811893615c11453bc7b39438d0d83c3eb444dec2346140d86efe","src/ir/analysis/mod.rs":"2c54f0cd6f3d86cf3fcb07d9d0be06cde839cab4170671c80d806a3f27820faf","src/ir/analysis/sizedness.rs":"17f1f2b6affd025f73853b9b5a76b3f157b5f9e563e9eaa374735fcb84c13308","src/ir/analysis/template_params.rs":"da949976a7fd04d6fc564ea6a77dfdbf4f5bf05db64687ed7a0616cba598a42d","src/ir/annotations.rs":"1c931d7bbba1e1613e9cccaab58d14f75e79b831b5c881e41f5b5257a9cbced7","src/ir/comment.rs":"31d64a49ae3d9c3c348fa2539e03306ca3a23fae429cab452e42b31ecf632145","src/ir/comp.rs":"232300be66abbbc3d7ef948c24f000dd8a50d78e72aa0e4b2cc43ffd4f800226","src/ir/context.rs":"3a76458a5aa74075a60a5cd752ed59ad3943054f55b017700389f78072935215","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"e25ff72ac174a798894c9673d81bdfb86fa9f4228b34a14ce0dc741a186a52bd","src/ir/enum_ty.rs":"e49e3c6ffc0289584e2f836fe56a4b7ebf6ca3f8b602248141d67b9f533770cc","src/ir/function.rs":"aa454ace56bda8074b2865933282aa124624310c8bc0c994d454f5799f4e88be","src/ir/int.rs":"68a86182743ec338d58e42203364dc7c8970cb7ec3550433ca92f0c9489b4442","src/ir/item.rs":"a71bdacc7419ec86d52ac534158cf4bfa4600e9cbc214c0075766700f5b053b0","src/ir/item_kind.rs":"7666a1ff1b8260978b790a08b4139ab56b5c65714a5652bbcec7faa7443adc36","src/ir/layout.rs":"755e3787c262de434a53a8c326f0e825f95415ed6b0f925c1cddf208ca8e3bc4","src/ir/mod.rs":"713cd537434567003197a123cbae679602c715e976d22f7b23dafd0826ea4c70","src/ir/module.rs":"70cf6ddfeabe6cdc13fdc767c783216c073404848d827e85fc6c2de3a19b5c3f","src/ir/objc.rs":"195fb2a3e4371b90244f3a8f295fd80cc77e0f2daf8fd27e3d8e5b78bd6b55d6","src/ir/template.rs":"44bd7214cf1e7f70e60694115082aac5b8a6c1687fff584cd08cdcfadabc5734","src/ir/traversal.rs":"5ac088277f4dfe2918d81b9294aaee41fd83db8e46def66a05f89de078bf4c49","src/ir/ty.rs":"8d7e7883316245c54e5dfa2fd150df1be2dc559c7df0828da736dd6b18d2165b","src/ir/var.rs":"1e7be8eedba72effa995b48c581504e61e407867d8794a8528975688742b0420","src/lib.rs":"ed2d0aeb48b28b4a96b8e76a10e00b10cb6cc32c0a686d536f9021463b7ee0e8","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"74e582c37b146090332b1496f5b4bca02c7629d03a4ae40302cb4a723f08e445","src/options.rs":"119358b741601dafc13560856f6e4b4f78b6cd2b19067893c2672ba8f5dc6de1","src/parse.rs":"4ffc54415eadb622ee488603862788c78361ef2c889de25259441a340c2a010f","src/regex_set.rs":"6c46357fb1ee68250e5e017cbf691f340041489ae78599eee7a5665a6ddce27f","src/time.rs":"8efe317e7c6b5ba8e0865ce7b49ca775ee8a02590f4241ef62f647fa3c22b68e"},"package":"2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239"} -diff -Naurp firefox-102.9.0.orig/third_party/rust/bindgen/src/clang.rs firefox-102.9.0/third_party/rust/bindgen/src/clang.rs ---- firefox-102.9.0.orig/third_party/rust/bindgen/src/clang.rs 2023-03-09 17:59:38.000000000 -0600 -+++ firefox-102.9.0/third_party/rust/bindgen/src/clang.rs 2023-03-19 20:26:47.405305678 -0500 -@@ -54,6 +54,11 @@ impl Cursor { - unsafe { clang_isDeclaration(self.kind()) != 0 } - } - -+ /// Is this cursor's referent an anonymous record or so? -+ pub fn is_anonymous(&self) -> bool { -+ unsafe { clang_Cursor_isAnonymous(self.x) != 0 } -+ } -+ - /// Get this cursor's referent's spelling. - pub fn spelling(&self) -> String { - unsafe { cxstring_into_string(clang_getCursorSpelling(self.x)) } -diff -Naurp firefox-102.9.0.orig/third_party/rust/bindgen/src/ir/comp.rs firefox-102.9.0/third_party/rust/bindgen/src/ir/comp.rs ---- firefox-102.9.0.orig/third_party/rust/bindgen/src/ir/comp.rs 2023-03-09 17:59:38.000000000 -0600 -+++ firefox-102.9.0/third_party/rust/bindgen/src/ir/comp.rs 2023-03-19 20:27:20.660487032 -0500 -@@ -1372,8 +1372,7 @@ impl CompInfo { - - // A declaration of an union or a struct without name could - // also be an unnamed field, unfortunately. -- if cur.spelling().is_empty() && -- cur.kind() != CXCursor_EnumDecl -+ if cur.is_anonymous() && cur.kind() != CXCursor_EnumDecl - { - let ty = cur.cur_type(); - let offset = cur.offset_of_field().ok(); -diff -Naurp firefox-102.9.0.orig/third_party/rust/bindgen/src/ir/ty.rs firefox-102.9.0/third_party/rust/bindgen/src/ir/ty.rs ---- firefox-102.9.0.orig/third_party/rust/bindgen/src/ir/ty.rs 2023-03-09 17:59:38.000000000 -0600 -+++ firefox-102.9.0/third_party/rust/bindgen/src/ir/ty.rs 2023-03-19 21:02:47.947103359 -0500 -@@ -737,7 +737,12 @@ impl Type { - - let layout = ty.fallible_layout(ctx).ok(); - let cursor = ty.declaration(); -- let mut name = cursor.spelling(); -+ let is_anonymous = cursor.is_anonymous(); -+ let mut name = if is_anonymous { -+ None -+ } else { -+ Some(cursor.spelling()).filter(|n| !n.is_empty()) -+ }; - - debug!( - "from_clang_ty: {:?}, ty: {:?}, loc: {:?}", -@@ -771,7 +776,7 @@ impl Type { - if is_canonical_objcpointer && is_template_type_param { - // Objective-C generics are just ids with fancy name. - // To keep it simple, just name them ids -- name = "id".to_owned(); -+ name = Some("id".to_owned()); - } - } - -@@ -900,7 +905,7 @@ impl Type { - return Err(ParseError::Recurse); - } - } else { -- name = location.spelling(); -+ name = Some(location.spelling()); - } - - let complex = CompInfo::from_ty( -@@ -942,7 +947,7 @@ impl Type { - CXType_Typedef - ); - -- name = current.spelling(); -+ name = Some(location.spelling()); - - let inner_ty = cur - .typedef_type() -@@ -1126,10 +1131,10 @@ impl Type { - CXType_Enum => { - let enum_ = Enum::from_ty(ty, ctx).expect("Not an enum?"); - -- if name.is_empty() { -+ if !is_anonymous { - let pretty_name = ty.spelling(); - if clang::is_valid_identifier(&pretty_name) { -- name = pretty_name; -+ name = Some(pretty_name); - } - } - -@@ -1144,12 +1149,12 @@ impl Type { - ) - .expect("Not a complex type?"); - -- if name.is_empty() { -+ if !is_anonymous { - // The pretty-printed name may contain typedefed name, - // but may also be "struct (anonymous at .h:1)" - let pretty_name = ty.spelling(); - if clang::is_valid_identifier(&pretty_name) { -- name = pretty_name; -+ name = Some(pretty_name); - } - } - -@@ -1161,8 +1166,7 @@ impl Type { - location, - None, - ctx, -- ) -- .expect("Not able to resolve vector element?"); -+ )?; - TypeKind::Vector(inner, ty.num_elements().unwrap()) - } - CXType_ConstantArray => { -@@ -1189,7 +1193,9 @@ impl Type { - CXType_ObjCClass | CXType_ObjCInterface => { - let interface = ObjCInterface::from_ty(&location, ctx) - .expect("Not a valid objc interface?"); -- name = interface.rust_name(); -+ if !is_anonymous { -+ name = Some(interface.rust_name()); -+ } - TypeKind::ObjCInterface(interface) - } - CXType_Dependent => { -@@ -1207,7 +1213,7 @@ impl Type { - } - }; - -- let name = if name.is_empty() { None } else { Some(name) }; -+ name = name.filter(|n| !n.is_empty()); - - let is_const = ty.is_const() || - (ty.kind() == CXType_ConstantArray && -diff -Naurp firefox-102.9.0.orig/third_party/rust/bindgen/src/ir/var.rs firefox-102.9.0/third_party/rust/bindgen/src/ir/var.rs ---- firefox-102.9.0.orig/third_party/rust/bindgen/src/ir/var.rs 2023-03-09 17:59:38.000000000 -0600 -+++ firefox-102.9.0/third_party/rust/bindgen/src/ir/var.rs 2023-03-19 21:03:37.413299390 -0500 -@@ -301,11 +301,11 @@ impl ClangSubItemParser for Var { - let ty = match Item::from_ty(&ty, cursor, None, ctx) { - Ok(ty) => ty, - Err(e) => { -- assert_eq!( -- ty.kind(), -- CXType_Auto, -+ assert!( -+ matches!(ty.kind(), CXType_Auto | CXType_Unexposed), - "Couldn't resolve constant type, and it \ -- wasn't an nondeductible auto type!" -+ wasn't an nondeductible auto type or unexposed \ -+ type!" - ); - return Err(e); - } diff --git a/user/zotero/build-sh-fix.patch b/user/zotero/build-sh-fix.patch deleted file mode 100644 index 474d9d4..0000000 --- a/user/zotero/build-sh-fix.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/app/build.sh.orig b/app/build.sh -index 649d629..642ce81 100755 ---- a/app/build.sh.orig -+++ b/app/build.sh -@@ -59,10 +59,7 @@ function abspath { - } - - function check_lfs_file { -- if [ "$(head --bytes 5 "$1")" = "versi" ]; then -- echo "$1 not checked out -- install Git LFS and run 'git lfs pull'" >&2 -- exit 1 -- fi -+ return 0 - } - - SOURCE_DIR="" -@@ -840,18 +837,13 @@ if [ $BUILD_LINUX == 1 ]; then - cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" - - # Use our own launcher that calls the original Firefox executable with -app -- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin -+ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin - cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero - - # Copy Ubuntu launcher files - cp "$CALLDIR/linux/zotero.desktop" "$APPDIR" - cp "$CALLDIR/linux/set_launcher_icon" "$APPDIR" - -- # Use our own updater, because Mozilla's requires updates signed by Mozilla -- check_lfs_file "$CALLDIR/linux/updater.tar.xz" -- tar xf "$CALLDIR/linux/updater.tar.xz" --to-stdout updater-$arch > "$APPDIR/updater" -- chmod 755 "$APPDIR/updater" -- - # Copy app files - rsync -a "$base_dir/" "$APPDIR/" - -@@ -860,6 +852,7 @@ if [ $BUILD_LINUX == 1 ]; then - cp -RH "$CALLDIR/modules/zotero-libreoffice-integration/install" "$APPDIR/integration/libreoffice" - - # Copy icons -+ mkdir -p "$APPDIR"/icons - cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" - cp "$CALLDIR/linux/icons/symbolic.svg" "$APPDIR/icons/" - diff --git a/user/zotero/firefox-102.12.0-consolidated-1.patch b/user/zotero/firefox-102.12.0-consolidated-1.patch deleted file mode 100644 index 6dfd9e1..0000000 --- a/user/zotero/firefox-102.12.0-consolidated-1.patch +++ /dev/null @@ -1,343 +0,0 @@ -Submitted By: Xi Ruoyao -Date: 2023-05-14 -Initial Package Version: 102.12.0esr -Upstream Status: Applied for nightly, but not ESR -Origin: - - The first patch comes from - - https://github.com/rust-lang/rust-bindgen/pull/2319 - - https://github.com/rust-lang/rust-bindgen/pull/2339 - And they are integrated into mozilla at - - https://hg.mozilla.org/mozilla-central/rev/bd3481bf45fb - - The second patch comes from - - https://hg.mozilla.org/mozilla-central/rev/61f052c26dd1 - - https://hg.mozilla.org/mozilla-central/rev/9fffd4b92c43 - - The third patch comes from - - https://hg.mozilla.org/mozilla-central/rev/1a15f95b880f - - The fourth patch comes from - - https://github.com/mozilla/mp4parse-rust/commit/8d58b2d5fc7f - And it's integrated into mozilla at - - https://hg.mozilla.org/mozilla-central/rev/a651d4323066 - A hack is added for Cargo.{toml,lock} to suppress sha256 check - -Description: The first patch updates the bundled rust-bindgen - crate to be compatible with Clang/LLVM 16. - Without this patch, you will encounter "not a valid - Ident" errors when building Firefox, and it will - come out of fallback.rs in proc-macro2. This - references mfbt/Vector.h (symlinked to - firefox-build-dir/dist/include/mozilla/Vector.h) in - it's error output, but it is because LLVM changed - how it reports anonymous items. - - The second patch adds missing "#include " - for three C++ headers and source files. Without - this patch, it will fail to build with C++ headers - from GCC 13. - - The third and fourth patches work around build - failures with Rustc-1.70.0. - -From 8e0b55b6029226d448ffc1c5465bf475ea0852c5 Mon Sep 17 00:00:00 2001 -From: Xi Ruoyao -Date: Sun, 14 May 2023 03:37:24 +0800 -Subject: [PATCH 1/4] cbindgen patch - ---- - third_party/rust/bindgen/src/clang.rs | 5 ++++ - third_party/rust/bindgen/src/ir/comp.rs | 3 +- - third_party/rust/bindgen/src/ir/ty.rs | 30 +++++++++++-------- - third_party/rust/bindgen/src/ir/var.rs | 8 ++--- - 5 files changed, 29 insertions(+), 19 deletions(-) - -diff --git a/third_party/rust/bindgen/src/clang.rs b/third_party/rust/bindgen/src/clang.rs -index 488660c434..ef74ac08c2 100644 ---- a/third_party/rust/bindgen/src/clang.rs -+++ b/third_party/rust/bindgen/src/clang.rs -@@ -54,6 +54,11 @@ impl Cursor { - unsafe { clang_isDeclaration(self.kind()) != 0 } - } - -+ /// Is this cursor's referent an anonymous record or so? -+ pub fn is_anonymous(&self) -> bool { -+ unsafe { clang_Cursor_isAnonymous(self.x) != 0 } -+ } -+ - /// Get this cursor's referent's spelling. - pub fn spelling(&self) -> String { - unsafe { cxstring_into_string(clang_getCursorSpelling(self.x)) } -diff --git a/third_party/rust/bindgen/src/ir/comp.rs b/third_party/rust/bindgen/src/ir/comp.rs -index 22c124fa36..b715616c5e 100644 ---- a/third_party/rust/bindgen/src/ir/comp.rs -+++ b/third_party/rust/bindgen/src/ir/comp.rs -@@ -1372,8 +1372,7 @@ impl CompInfo { - - // A declaration of an union or a struct without name could - // also be an unnamed field, unfortunately. -- if cur.spelling().is_empty() && -- cur.kind() != CXCursor_EnumDecl -+ if cur.is_anonymous() && cur.kind() != CXCursor_EnumDecl - { - let ty = cur.cur_type(); - let offset = cur.offset_of_field().ok(); -diff --git a/third_party/rust/bindgen/src/ir/ty.rs b/third_party/rust/bindgen/src/ir/ty.rs -index e6eecc3c50..f3e1193ce2 100644 ---- a/third_party/rust/bindgen/src/ir/ty.rs -+++ b/third_party/rust/bindgen/src/ir/ty.rs -@@ -737,7 +737,12 @@ impl Type { - - let layout = ty.fallible_layout(ctx).ok(); - let cursor = ty.declaration(); -- let mut name = cursor.spelling(); -+ let is_anonymous = cursor.is_anonymous(); -+ let mut name = if is_anonymous { -+ None -+ } else { -+ Some(cursor.spelling()).filter(|n| !n.is_empty()) -+ }; - - debug!( - "from_clang_ty: {:?}, ty: {:?}, loc: {:?}", -@@ -771,7 +776,7 @@ impl Type { - if is_canonical_objcpointer && is_template_type_param { - // Objective-C generics are just ids with fancy name. - // To keep it simple, just name them ids -- name = "id".to_owned(); -+ name = Some("id".to_owned()); - } - } - -@@ -900,7 +905,7 @@ impl Type { - return Err(ParseError::Recurse); - } - } else { -- name = location.spelling(); -+ name = Some(location.spelling()); - } - - let complex = CompInfo::from_ty( -@@ -942,7 +947,7 @@ impl Type { - CXType_Typedef - ); - -- name = current.spelling(); -+ name = Some(location.spelling()); - - let inner_ty = cur - .typedef_type() -@@ -1126,10 +1131,10 @@ impl Type { - CXType_Enum => { - let enum_ = Enum::from_ty(ty, ctx).expect("Not an enum?"); - -- if name.is_empty() { -+ if !is_anonymous { - let pretty_name = ty.spelling(); - if clang::is_valid_identifier(&pretty_name) { -- name = pretty_name; -+ name = Some(pretty_name); - } - } - -@@ -1144,12 +1149,12 @@ impl Type { - ) - .expect("Not a complex type?"); - -- if name.is_empty() { -+ if !is_anonymous { - // The pretty-printed name may contain typedefed name, - // but may also be "struct (anonymous at .h:1)" - let pretty_name = ty.spelling(); - if clang::is_valid_identifier(&pretty_name) { -- name = pretty_name; -+ name = Some(pretty_name); - } - } - -@@ -1161,8 +1166,7 @@ impl Type { - location, - None, - ctx, -- ) -- .expect("Not able to resolve vector element?"); -+ )?; - TypeKind::Vector(inner, ty.num_elements().unwrap()) - } - CXType_ConstantArray => { -@@ -1189,7 +1193,9 @@ impl Type { - CXType_ObjCClass | CXType_ObjCInterface => { - let interface = ObjCInterface::from_ty(&location, ctx) - .expect("Not a valid objc interface?"); -- name = interface.rust_name(); -+ if !is_anonymous { -+ name = Some(interface.rust_name()); -+ } - TypeKind::ObjCInterface(interface) - } - CXType_Dependent => { -@@ -1207,7 +1213,7 @@ impl Type { - } - }; - -- let name = if name.is_empty() { None } else { Some(name) }; -+ name = name.filter(|n| !n.is_empty()); - - let is_const = ty.is_const() || - (ty.kind() == CXType_ConstantArray && -diff --git a/third_party/rust/bindgen/src/ir/var.rs b/third_party/rust/bindgen/src/ir/var.rs -index c6f121d74e..30fb0b5ee8 100644 ---- a/third_party/rust/bindgen/src/ir/var.rs -+++ b/third_party/rust/bindgen/src/ir/var.rs -@@ -301,11 +301,11 @@ impl ClangSubItemParser for Var { - let ty = match Item::from_ty(&ty, cursor, None, ctx) { - Ok(ty) => ty, - Err(e) => { -- assert_eq!( -- ty.kind(), -- CXType_Auto, -+ assert!( -+ matches!(ty.kind(), CXType_Auto | CXType_Unexposed), - "Couldn't resolve constant type, and it \ -- wasn't an nondeductible auto type!" -+ wasn't an nondeductible auto type or unexposed \ -+ type!" - ); - return Err(e); - } --- -2.40.1 - -From 2c22f8cc4756d3e492fe6be4be634fb592b4b0e3 Mon Sep 17 00:00:00 2001 -From: Xi Ruoyao -Date: Sun, 14 May 2023 03:37:04 +0800 -Subject: [PATCH 2/4] add missing - ---- - dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp | 1 + - gfx/2d/Rect.h | 1 + - toolkit/components/telemetry/pingsender/pingsender.cpp | 1 + - 3 files changed, 3 insertions(+) - -diff --git a/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp b/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp -index 8c8a0369c3..d43b4a1e0d 100644 ---- a/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp -+++ b/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp -@@ -3,6 +3,7 @@ - /* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ -+#include - #include - - #include "sdp/RsdparsaSdpInc.h" -diff --git a/gfx/2d/Rect.h b/gfx/2d/Rect.h -index 4875ad6714..f52437bbdc 100644 ---- a/gfx/2d/Rect.h -+++ b/gfx/2d/Rect.h -@@ -15,6 +15,7 @@ - #include "mozilla/Maybe.h" - - #include -+#include - - namespace mozilla { - -diff --git a/toolkit/components/telemetry/pingsender/pingsender.cpp b/toolkit/components/telemetry/pingsender/pingsender.cpp -index 01fdb63c29..ceda3b1945 100644 ---- a/toolkit/components/telemetry/pingsender/pingsender.cpp -+++ b/toolkit/components/telemetry/pingsender/pingsender.cpp -@@ -3,6 +3,7 @@ - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -+#include - #include - #include - #include --- -2.40.1 - -# HG changeset patch -# User Emilio Cobos Álvarez -# Date 1682520906 0 -# Node ID 1a15f95b880f3d4b5a427c750932c53a01b4897a -# Parent 17ea6f29654b2ff39d374073cec3e7116c1ec548 -[PATCH 3/4] Bug 1829964 - Allow ambiguous glob reexports for now in autogenerated bindings. r=glandium - -I started looking into removing these glob re-exports, but I couldn't -convince myself that the result was particularly better... - -Differential Revision: https://phabricator.services.mozilla.com/D176473 - -diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml ---- a/layout/style/ServoBindings.toml -+++ b/layout/style/ServoBindings.toml -@@ -35,16 +35,17 @@ headers = [ - "mozilla/SizeOfState.h", - "nsCSSProps.h", - "nsMappedAttributes.h", - "nsNameSpaceManager.h", - ] - raw-lines = [ - # FIXME(emilio): Incrementally remove these "pub use"s. Probably - # mozilla::css and mozilla::dom are easier. -+ "#[allow(unknown_lints, ambiguous_glob_reexports)]", - "pub use self::root::*;", - "pub use self::root::mozilla::*;", - "pub use self::root::mozilla::css::*;", - "pub use self::root::mozilla::dom::*;", - ] - hide-types = [ - ".*char_traits", - ".*incompatible_char_type", - -From 8b5b652d38e007e736bb442ccd5aa5ed699db100 Mon Sep 17 00:00:00 2001 -From: Matthew Gregan -Date: Thu, 16 Jun 2022 13:54:02 +1200 -Subject: [PATCH 4/4] Fix `unstable-name-collisions` warning by using fully - qualified path. - ---- - mp4parse/src/lib.rs | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/third_party/rust/mp4parse/src/lib.rs b/third_party/rust/mp4parse/src/lib.rs -index 567ee21d..4f3d7153 100644 ---- a/third_party/rust/mp4parse/src/lib.rs -+++ b/third_party/rust/mp4parse/src/lib.rs -@@ -3506,8 +3506,13 @@ macro_rules! impl_mul { - type Output = $output; - - fn mul(self, rhs: $rhs) -> Self::Output { -- static_assertions::const_assert!(<$output>::MAX <= <$inner>::MAX as u64); -- static_assertions::const_assert!(<$lhs>::MAX * <$rhs>::MAX <= <$output>::MAX); -+ static_assertions::const_assert!( -+ <$output as UpperBounded>::MAX <= <$inner>::MAX as u64 -+ ); -+ static_assertions::const_assert!( -+ <$lhs as UpperBounded>::MAX * <$rhs as UpperBounded>::MAX -+ <= <$output as UpperBounded>::MAX -+ ); - - let lhs: $inner = self.get().into(); - let rhs: $inner = rhs.get().into(); - ---- firefox-102.12.0.orig/Cargo.lock 2023-05-30 01:34:26.000000000 +0800 -+++ firefox-102.12.0/Cargo.lock 2023-06-04 18:52:58.494327811 +0800 -@@ -3407,7 +3407,6 @@ - [[package]] - name = "mp4parse" - version = "0.13.0" --source = "git+https://github.com/mozilla/mp4parse-rust?rev=3bfc47d9a571d0842676043ba60716318e946c06#3bfc47d9a571d0842676043ba60716318e946c06" - dependencies = [ - "bitreader", - "byteorder", - ---- firefox-102.12.0.orig/Cargo.toml 2023-05-30 01:34:26.000000000 +0800 -+++ firefox-102.12.0/Cargo.toml 2023-06-04 18:52:44.365719856 +0800 -@@ -128,3 +128,7 @@ - # Patch fallible_collections for issues with rustc 1.65. - [patch.crates-io.fallible_collections] - path = "third_party/rust/fallible_collections" -+ -+# Patch mp4parse for issues with rustc-1.70. -+[patch."https://github.com/mozilla/mp4parse-rust"] -+mp4parse = { path = "third_party/rust/mp4parse" } diff --git a/user/zotero/mp4parse-rust-1.70.patch b/user/zotero/mp4parse-rust-1.70.patch deleted file mode 100644 index 64bf6e8..0000000 --- a/user/zotero/mp4parse-rust-1.70.patch +++ /dev/null @@ -1,32 +0,0 @@ -Patch-Source: https://github.com/mozilla/mp4parse-rust/commit/8d58b2d5fc7f552d585964354d8269bcca3d9251 --- -From 8d58b2d5fc7f552d585964354d8269bcca3d9251 Mon Sep 17 00:00:00 2001 -From: Matthew Gregan -Date: Thu, 16 Jun 2022 13:54:02 +1200 -Subject: [PATCH] Fix `unstable-name-collisions` warning by using fully - qualified path. - ---- - mp4parse/src/lib.rs | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/mp4parse/src/lib.rs b/mp4parse/src/lib.rs -index 567ee21d..4f3d7153 100644 ---- a/third_party/rust/mp4parse/src/lib.rs -+++ b/third_party/rust/mp4parse/src/lib.rs -@@ -3506,8 +3506,13 @@ macro_rules! impl_mul { - type Output = $output; - - fn mul(self, rhs: $rhs) -> Self::Output { -- static_assertions::const_assert!(<$output>::MAX <= <$inner>::MAX as u64); -- static_assertions::const_assert!(<$lhs>::MAX * <$rhs>::MAX <= <$output>::MAX); -+ static_assertions::const_assert!( -+ <$output as UpperBounded>::MAX <= <$inner>::MAX as u64 -+ ); -+ static_assertions::const_assert!( -+ <$lhs as UpperBounded>::MAX * <$rhs as UpperBounded>::MAX -+ <= <$output as UpperBounded>::MAX -+ ); - - let lhs: $inner = self.get().into(); - let rhs: $inner = rhs.get().into(); diff --git a/user/zotero/no-ccache-stats.patch b/user/zotero/no-ccache-stats.patch deleted file mode 100644 index 4d557a0..0000000 --- a/user/zotero/no-ccache-stats.patch +++ /dev/null @@ -1,13 +0,0 @@ -prevents a call to ccache -diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py -index bf7009a..011c012 100644 ---- a/python/mozbuild/mozbuild/controller/building.py -+++ b/python/mozbuild/mozbuild/controller/building.py -@@ -570,6 +570,7 @@ class BuildMonitor(MozbuildObject): - ) - - def ccache_stats(self, ccache=None): -+ return None - ccache_stats = None - - if ccache is None: diff --git a/user/zotero/ppc-musttail.patch b/user/zotero/ppc-musttail.patch deleted file mode 100644 index ebe06c0..0000000 --- a/user/zotero/ppc-musttail.patch +++ /dev/null @@ -1,30 +0,0 @@ -Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc-musttail.patch --- -commit 5e66655e1456c9d26637ceaed3f4533b537322c4 -Author: Daniel Kolesa -Date: Sat May 13 23:00:04 2023 +0200 - - disable musttail on ppc - - 41:38.04 LLVM ERROR: failed to perform tail call elimination on a call site marked musttail - 41:38.04 PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. - 41:38.04 Stack dump: - 41:38.04 0. Running pass 'Function Pass Manager' on module '/builddir/thunderbird-114.0_beta1/obj-powerpc64le-unknown-linux-musl/toolkit/library/build/../../../gfx/skia/SkOpts.o'. - 41:38.04 1. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@_ZN8portableL15init_lane_masksEPNS_6ParamsEP21SkRasterPipelineStageffff' - 41:38.95 clang-16: error: unable to execute command: Aborted - - To be investigated later. - -diff --git a/gfx/skia/skia/src/core/SkRasterPipeline.h b/gfx/skia/skia/src/core/SkRasterPipeline.h -index 766bb0c..88c6cb2 100644 ---- a/gfx/skia/skia/src/core/SkRasterPipeline.h -+++ b/gfx/skia/skia/src/core/SkRasterPipeline.h -@@ -24,7 +24,7 @@ enum SkColorType : int; - struct SkImageInfo; - struct skcms_TransferFunction; - --#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) -+#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc__) - #define SK_HAS_MUSTTAIL 1 - #else - #define SK_HAS_MUSTTAIL 0 diff --git a/user/zotero/ppc-webrtc.patch b/user/zotero/ppc-webrtc.patch deleted file mode 100644 index bf4afdd..0000000 --- a/user/zotero/ppc-webrtc.patch +++ /dev/null @@ -1,23 +0,0 @@ -Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc64-webrtc.patch --- -commit 010bfb0441168d51e0fffe98d1f50e0602e7947f -Author: Daniel Kolesa -Date: Sat May 13 23:40:41 2023 +0200 - - fix webrtc on ppc64 - -diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build -index 976cf37..d35d447 100644 ---- a/third_party/libwebrtc/moz.build -+++ b/third_party/libwebrtc/moz.build -@@ -643,3 +643,10 @@ if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "WINNT": - "/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn", - "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn" - ] -+ -+if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": -+ -+ DIRS += [ -+ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", -+ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn" -+ ] diff --git a/user/zotero/update-audio-pc.patch b/user/zotero/update-audio-pc.patch deleted file mode 100644 index 744d1ec..0000000 --- a/user/zotero/update-audio-pc.patch +++ /dev/null @@ -1,798 +0,0 @@ ---- a/.cargo/config.in -+++ b/.cargo/config.in -@@ -55,19 +55,19 @@ git = "https://github.com/mozilla-spider - rev = "64ba08e24749616de2344112f226d1ef4ba893ae" - replace-with = "vendored-sources" - - [source."git+https://github.com/mozilla/application-services?rev=c82bccfa500813f273f4db0ead64fc73bfa2b34c"] - git = "https://github.com/mozilla/application-services" - rev = "c82bccfa500813f273f4db0ead64fc73bfa2b34c" - replace-with = "vendored-sources" - --[source."git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543"] -+[source."git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9"] - git = "https://github.com/mozilla/audioipc" --rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543" -+rev = "6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" - replace-with = "vendored-sources" - - [source."git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=93b5c01a131f65c83c11aeb317f4583405c5eb79"] - git = "https://github.com/mozilla/cubeb-coreaudio-rs" - rev = "93b5c01a131f65c83c11aeb317f4583405c5eb79" - replace-with = "vendored-sources" - - [source."git+https://github.com/mozilla/cubeb-pulse-rs?rev=cf48897be5cbe147d051ebbbe1eaf5fd8fb6bbc9"] ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -230,32 +230,32 @@ version = "0.1.3" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "c41dc008c1973ce58ff3cfc52df53814a9b7b78d73d95b071b5ff0ed4b2db3e1" - dependencies = [ - "bitflags 1.999.999", - ] - - [[package]] - name = "audio_thread_priority" --version = "0.26.1" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "8b7cd1bfd03dab20ad72e0c5e58d65818d62c0d199d8dec8361053d0f073dbae" --dependencies = [ -- "cfg-if 0.1.999", -+version = "0.30.0" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "a7e6839a6e8e72338137b3126c7fe61af95b9acc3076d2b7109696f808d1234f" -+dependencies = [ -+ "cfg-if 1.0.0", - "dbus", - "libc", - "log", - "mach", -- "winapi", -+ "windows-sys", - ] - - [[package]] - name = "audioipc2" - version = "0.5.0" --source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543" -+source = "git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9#6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" - dependencies = [ - "arrayvec", - "ashmem", - "audio_thread_priority", - "bincode", - "byteorder", - "bytes", - "cc", -@@ -273,28 +273,28 @@ dependencies = [ - "serde_derive", - "slab", - "windows-sys", - ] - - [[package]] - name = "audioipc2-client" - version = "0.5.0" --source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543" -+source = "git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9#6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" - dependencies = [ - "audio_thread_priority", - "audioipc2", - "cubeb-backend", - "log", - ] - - [[package]] - name = "audioipc2-server" - version = "0.5.0" --source = "git+https://github.com/mozilla/audioipc?rev=ec6af6ecf8ba50b51f13d18f417de8cfb8460543#ec6af6ecf8ba50b51f13d18f417de8cfb8460543" -+source = "git+https://github.com/mozilla/audioipc?rev=6be424d75f1367e70f2f5ddcacd6d0237e81a6a9#6be424d75f1367e70f2f5ddcacd6d0237e81a6a9" - dependencies = [ - "audio_thread_priority", - "audioipc2", - "cubeb-core", - "error-chain", - "log", - "once_cell", - "slab", ---- a/supply-chain/imports.lock -+++ b/supply-chain/imports.lock -@@ -38,16 +38,23 @@ user-name = "Amanieu d'Antras" - - [[publisher.audio_thread_priority]] - version = "0.26.1" - when = "2022-03-22" - user-id = 1258 - user-login = "padenot" - user-name = "Paul Adenot" - -+[[publisher.audio_thread_priority]] -+version = "0.30.0" -+when = "2023-11-06" -+user-id = 1258 -+user-login = "padenot" -+user-name = "Paul Adenot" -+ - [[publisher.authenticator]] - version = "0.4.0-alpha.20" - when = "2023-08-24" - user-id = 175410 - user-login = "jschanck" - user-name = "John Schanck" - - [[publisher.authenticator]] ---- a/third_party/rust/audio_thread_priority/.cargo-checksum.json -+++ b/third_party/rust/audio_thread_priority/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"Cargo.toml":"f2a927f4fdf4171eb2111ad9f770fd113d058d6d7dffa10fce7bd7577edda582","LICENSE":"32ee9dbf6196874fc9d406c54a888a6c4cbb9aa4a7f35b46befeaff43a78fe85","Makefile":"0f9a771cfb30c7c4b9961d82fdca4e9e229a955bb2e636474a4101389e18e938","README.md":"c123692b3b50dd621b896a8269814d609cbf1e532b461bf4a77854ddd607eb7a","atp_test.cpp":"8075a040941a65fb9e3f7cbf0535853ca6661c3ac442ec35569b42b24bbec797","audio_thread_priority.h":"f0ecaf1b674f794cde0dc834028e074d4e4675d22ae96acf08b2ae1dceb3474e","generate_osx_bindings.sh":"06e4e03450f788ced18d31fff5660919e6f6ec1119ddace363ffeb82f0518a71","src/lib.rs":"975de6a74e0adb999a08bc41f08a3bd68fe11c154731bc12c43df546ddb32949","src/mach_sys.rs":"352560fcb9b41d877cff92e5b3b04d6dc68b1f30508ce4b9aed78940120a883e","src/rt_linux.rs":"4ea9f6eb1902aff0126d1b957be7f723d599e9a8bbd75ca8013a2820ef5fe68a","src/rt_mach.rs":"e4587fdf640df37f251e50c6c9313f6a73eae4d54f4b8a84cefc6bc730e94be8","src/rt_win.rs":"c41f6e277051a92f8d38939cf9d78ee6deea736a4686b3bcd185492e47e1650a"},"package":"8b7cd1bfd03dab20ad72e0c5e58d65818d62c0d199d8dec8361053d0f073dbae"} -\ No newline at end of file -+{"files":{"Cargo.toml":"b66cf5a2203f39d8425d2b2170f64a5c7220ef76efa7ea14ad20ba99d3435e84","LICENSE":"32ee9dbf6196874fc9d406c54a888a6c4cbb9aa4a7f35b46befeaff43a78fe85","Makefile":"0f9a771cfb30c7c4b9961d82fdca4e9e229a955bb2e636474a4101389e18e938","README.md":"c123692b3b50dd621b896a8269814d609cbf1e532b461bf4a77854ddd607eb7a","atp_test.cpp":"8075a040941a65fb9e3f7cbf0535853ca6661c3ac442ec35569b42b24bbec797","audio_thread_priority.h":"f0ecaf1b674f794cde0dc834028e074d4e4675d22ae96acf08b2ae1dceb3474e","generate_osx_bindings.sh":"06e4e03450f788ced18d31fff5660919e6f6ec1119ddace363ffeb82f0518a71","src/lib.rs":"fe417e81a6677c581d9f617ff7989f08780465401b6fa22b6e3abfedf9e3e221","src/mach_sys.rs":"352560fcb9b41d877cff92e5b3b04d6dc68b1f30508ce4b9aed78940120a883e","src/rt_linux.rs":"27004821a29e6af73f9e13f4d1f060e024152c4cc379d6a0df38d6f5b61039ad","src/rt_mach.rs":"29f8c0397f14cecbac1f76394c2abfe0e05903b54486cf735f9a94a10c168643","src/rt_win.rs":"f2ba097cebf65252c27d9d6dcfbe1fcc041c4b312724bd98e080e114a4de3bb6"},"package":"a7e6839a6e8e72338137b3126c7fe61af95b9acc3076d2b7109696f808d1234f"} -\ No newline at end of file ---- a/third_party/rust/audio_thread_priority/Cargo.toml -+++ b/third_party/rust/audio_thread_priority/Cargo.toml -@@ -7,53 +7,59 @@ - # - # If you are reading this file be aware that the original Cargo.toml - # will likely look very different (and much more reasonable). - # See Cargo.toml.orig for the original contents. - - [package] - edition = "2018" - name = "audio_thread_priority" --version = "0.26.1" -+version = "0.30.0" - authors = ["Paul Adenot "] - description = "Bump a thread to real-time priority, for audio work, on Linux, Windows and macOS" -+readme = "README.md" - license = "MPL-2.0" - repository = "https://github.com/padenot/audio_thread_priority" - - [lib] - name = "audio_thread_priority" --crate-type = ["staticlib", "rlib"] -+crate-type = [ -+ "staticlib", -+ "rlib", -+] -+ - [dependencies.cfg-if] --version = "0.1" -+version = "1.0" - - [dependencies.log] - version = "0.4" - - [dependencies.simple_logger] - version = "0.4" - optional = true -+ - [dev-dependencies.nix] --version = "0.15.0" -+version = "0.26" - - [features] --default = ["with_dbus", "winapi"] -+default = ["with_dbus"] - terminal-logging = ["simple_logger"] - with_dbus = ["dbus"] -+ - [target."cfg(target_os = \"linux\")".dependencies.dbus] - version = "0.6.4" - optional = true - - [target."cfg(target_os = \"linux\")".dependencies.libc] - version = "0.2" -+ - [target."cfg(target_os = \"macos\")".dependencies.libc] - version = "0.2" - - [target."cfg(target_os = \"macos\")".dependencies.mach] - version = "0.3" --[target."cfg(target_os = \"windows\")".dependencies.winapi] --version = "0.3" --features = ["avrt", "errhandlingapi", "minwindef"] --optional = true - --[target."cfg(target_os = \"windows\")".dependencies.windows] --version = "^0.32.0" --features = ["Win32_Foundation", "Win32_System_Threading"] --optional = true -+[target."cfg(target_os = \"windows\")".dependencies.windows-sys] -+version = "0.48" -+features = [ -+ "Win32_Foundation", -+ "Win32_System_Threading", -+] ---- a/third_party/rust/audio_thread_priority/src/lib.rs -+++ b/third_party/rust/audio_thread_priority/src/lib.rs -@@ -253,34 +253,43 @@ pub extern "C" fn atp_get_current_thread - /// - /// # Arguments - /// - /// thread_info: the `atp_thread_info` structure to free. - /// - /// # Return value - /// - /// 0 in case of success, 1 otherwise (if `thread_info` is NULL). -+/// -+/// # Safety -+/// -+/// This function is safe only and only if the pointer comes from this library, of if is null. - #[no_mangle] - pub unsafe extern "C" fn atp_free_thread_info(thread_info: *mut atp_thread_info) -> i32 { - if thread_info.is_null() { - return 1; - } -- Box::from_raw(thread_info); -+ drop(Box::from_raw(thread_info)); - 0 - } - - /// Return a byte buffer containing serialized information about a thread, to promote it to - /// real-time from elsewhere, with a C API. - /// - /// `bytes` MUST be `std::mem::size_of()` bytes long. - /// - /// This is exposed in the C API as `ATP_THREAD_INFO_SIZE`. - /// - /// This call is useful on Linux desktop only, when the process is sandboxed, cannot promote itself - /// directly, and the `atp_thread_info` struct must be passed via IPC. -+/// -+/// # Safety -+/// -+/// This function is safe only and only if the first pointer comes from this library, and the -+/// second pointer is at least ATP_THREAD_INFO_SIZE bytes long. - #[no_mangle] - pub unsafe extern "C" fn atp_serialize_thread_info( - thread_info: *mut atp_thread_info, - bytes: *mut libc::c_void, - ) { - let thread_info = &mut *thread_info; - let source = thread_info.0.serialize(); - std::ptr::copy(source.as_ptr(), bytes as *mut u8, source.len()); -@@ -289,16 +298,20 @@ pub unsafe extern "C" fn atp_serialize_t - /// From a byte buffer, return a `RtPriorityThreadInfo`, with a C API. - /// - /// This call is useful on Linux desktop only, when the process is sandboxed and - /// cannot promote itself directly. - /// - /// # Arguments - /// - /// A byte buffer containing a serializezd `RtPriorityThreadInfo`. -+/// -+/// # Safety -+/// -+/// This function is safe only and only if pointer is at least ATP_THREAD_INFO_SIZE bytes long. - #[no_mangle] - pub unsafe extern "C" fn atp_deserialize_thread_info( - in_bytes: *mut u8, - ) -> *mut atp_thread_info { - let bytes = *(in_bytes as *mut [u8; std::mem::size_of::()]); - let thread_info = RtPriorityThreadInfoInternal::deserialize(bytes); - Box::into_raw(Box::new(atp_thread_info(thread_info))) - } -@@ -364,16 +377,20 @@ pub struct atp_thread_info(RtPriorityThr - /// `atp_get_current_thread_info` on the thread to promote. - /// * `audio_buffer_frames` - the exact or an upper limit on the number of frames that have to be - /// rendered each callback, or 0 for a sensible default value. - /// * `audio_samplerate_hz` - the sample-rate for this audio stream, in Hz. - /// - /// # Return value - /// - /// A pointer to an `atp_handle` in case of success, NULL otherwise. -+/// -+/// # Safety -+/// -+/// This function is safe as long as the first pointer comes from this library. - #[no_mangle] - pub unsafe extern "C" fn atp_promote_thread_to_real_time( - thread_info: *mut atp_thread_info, - audio_buffer_frames: u32, - audio_samplerate_hz: u32, - ) -> *mut atp_handle { - let thread_info = &mut *thread_info; - match promote_thread_to_real_time(thread_info.0, audio_buffer_frames, audio_samplerate_hz) { -@@ -386,16 +403,20 @@ pub unsafe extern "C" fn atp_promote_thr - /// - /// # Arguments - /// - /// `handle` - an opaque struct received from a promoting function. - /// - /// # Return value - /// - /// 0 in case of success, non-zero otherwise. -+/// -+/// # Safety -+/// -+/// This function is safe as long as the first pointer comes from this library, or is null. - #[no_mangle] - pub unsafe extern "C" fn atp_demote_thread_from_real_time(thread_info: *mut atp_thread_info) -> i32 { - if thread_info.is_null() { - return 1; - } - let thread_info = (*thread_info).0; - - match demote_thread_from_real_time(thread_info) { -@@ -631,22 +652,22 @@ mod tests { - let info2 = thread_info_deserialize(bytes); - assert!(info == info2); - } - } - #[test] - fn test_remote_promotion() { - let (rd, wr) = pipe().unwrap(); - -- match fork().expect("fork failed") { -+ match unsafe { fork().expect("fork failed") } { - ForkResult::Parent{ child } => { - eprintln!("Parent PID: {}", getpid()); - let mut bytes = [0_u8; std::mem::size_of::()]; - match read(rd, &mut bytes) { -- Ok(_) => { -+ Ok(_) => { - let info = RtPriorityThreadInfo::deserialize(bytes); - match promote_thread_to_real_time(info, 0, 44100) { - Ok(_) => { - eprintln!("thread promotion in the child from the parent succeeded"); - assert!(true); - } - Err(_) => { - eprintln!("promotion Err"); ---- a/third_party/rust/audio_thread_priority/src/rt_linux.rs -+++ b/third_party/rust/audio_thread_priority/src/rt_linux.rs -@@ -3,16 +3,17 @@ - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - - /* Widely copied from dbus-rs/dbus/examples/rtkit.rs */ - - extern crate dbus; - extern crate libc; - - use std::cmp; -+use std::convert::TryInto; - use std::error::Error; - use std::io::Error as OSError; - - use dbus::{BusType, Connection, Message, MessageItem, Props}; - - use crate::AudioThreadPriorityError; - - const DBUS_SOCKET_TIMEOUT: i32 = 10_000; -@@ -107,27 +108,27 @@ fn rtkit_set_realtime(thread: u64, pid: - }; - let c = Connection::get_private(BusType::System)?; - c.send_with_reply_and_block(m, DBUS_SOCKET_TIMEOUT)?; - Ok(()) - } - - /// Returns the maximum priority, maximum real-time time slice, and the current real-time time - /// slice for this process. --fn get_limits() -> Result<(i64, u64, libc::rlimit64), AudioThreadPriorityError> { -+fn get_limits() -> Result<(i64, u64, libc::rlimit), AudioThreadPriorityError> { - let c = Connection::get_private(BusType::System)?; - - let p = Props::new( - &c, - "org.freedesktop.RealtimeKit1", - "/org/freedesktop/RealtimeKit1", - "org.freedesktop.RealtimeKit1", - DBUS_SOCKET_TIMEOUT, - ); -- let mut current_limit = libc::rlimit64 { -+ let mut current_limit = libc::rlimit { - rlim_cur: 0, - rlim_max: 0, - }; - - let max_prio = item_as_i64(p.get("MaxRealtimePriority")?)?; - if max_prio < 0 { - return Err(AudioThreadPriorityError::new( - "invalid negative MaxRealtimePriority", -@@ -136,36 +137,41 @@ fn get_limits() -> Result<(i64, u64, lib - - let max_rttime = item_as_i64(p.get("RTTimeUSecMax")?)?; - if max_rttime < 0 { - return Err(AudioThreadPriorityError::new( - "invalid negative RTTimeUSecMax", - )); - } - -- if unsafe { libc::getrlimit64(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { -+ if unsafe { libc::getrlimit(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { - return Err(AudioThreadPriorityError::new_with_inner( -- "getrlimit64", -+ "getrlimit", - Box::new(OSError::last_os_error()), - )); - } - - Ok((max_prio, (max_rttime as u64), current_limit)) - } - - fn set_limits(request: u64, max: u64) -> Result<(), AudioThreadPriorityError> { - // Set a soft limit to the limit requested, to be able to handle going over the limit using -- // SIGXCPU. Set the hard limit to the maxium slice to prevent getting SIGKILL. -- let new_limit = libc::rlimit64 { -- rlim_cur: request, -- rlim_max: max, -+ // SIGXCPU. Set the hard limit to the maximum slice to prevent getting SIGKILL. -+ #[allow(clippy::useless_conversion)] -+ let new_limit = libc::rlimit { -+ rlim_cur: request -+ .try_into() -+ .map_err(|_| AudioThreadPriorityError::new("setrlimit"))?, -+ rlim_max: max -+ .try_into() -+ .map_err(|_| AudioThreadPriorityError::new("setrlimit"))?, - }; -- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &new_limit) } < 0 { -+ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &new_limit) } < 0 { - return Err(AudioThreadPriorityError::new_with_inner( -- "setrlimit64", -+ "setrlimit", - Box::new(OSError::last_os_error()), - )); - } - - Ok(()) - } - - pub fn promote_current_thread_to_real_time_internal( -@@ -267,43 +273,45 @@ pub fn set_real_time_hard_limit_internal - }; - let budget_us = (buffer_frames * 1_000_000 / audio_samplerate_hz) as u64; - - // It's only necessary to set RLIMIT_RTTIME to something when in the child, skip it if it's a - // remoting call. - let (_, max_rttime, _) = get_limits()?; - - // Only take what we need, or cap at the system limit, no further. -- let rttime_request = cmp::min(budget_us, max_rttime as u64); -+ let rttime_request = cmp::min(budget_us, max_rttime); - set_limits(rttime_request, max_rttime)?; - - Ok(()) - } - - /// Promote a thread (possibly in another process) identified by its tid, to real-time. - pub fn promote_thread_to_real_time_internal( - thread_info: RtPriorityThreadInfoInternal, - audio_buffer_frames: u32, - audio_samplerate_hz: u32, - ) -> Result { - let RtPriorityThreadInfoInternal { pid, thread_id, .. } = thread_info; - - let handle = RtPriorityHandleInternal { thread_info }; - -- let (_, _, limits) = get_limits()?; - set_real_time_hard_limit_internal(audio_buffer_frames, audio_samplerate_hz)?; - - let r = rtkit_set_realtime(thread_id as u64, pid as u64, RT_PRIO_DEFAULT); - - match r { - Ok(_) => Ok(handle), - Err(e) => { -- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &limits) } < 0 { -+ let (_, _, limits) = get_limits()?; -+ if limits.rlim_cur != libc::RLIM_INFINITY -+ && unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &limits) } < 0 -+ { - return Err(AudioThreadPriorityError::new_with_inner( -- "setrlimit64", -+ "setrlimit", - Box::new(OSError::last_os_error()), - )); - } - Err(AudioThreadPriorityError::new_with_inner( - "Thread promotion error", - e, - )) - } ---- a/third_party/rust/audio_thread_priority/src/rt_mach.rs -+++ b/third_party/rust/audio_thread_priority/src/rt_mach.rs -@@ -65,17 +65,17 @@ pub fn demote_current_thread_from_real_t - unsafe { - let mut h = rt_priority_handle; - let rv: kern_return_t = thread_policy_set( - h.tid, - THREAD_TIME_CONSTRAINT_POLICY, - (&mut h.previous_time_constraint_policy) as *mut _ as thread_policy_t, - THREAD_TIME_CONSTRAINT_POLICY_COUNT!(), - ); -- if rv != KERN_SUCCESS as i32 { -+ if rv != KERN_SUCCESS { - return Err(AudioThreadPriorityError::new( - "thread demotion error: thread_policy_get: RT", - )); - } - - info!("thread {} priority restored.", h.tid); - } - -@@ -114,17 +114,17 @@ pub fn promote_current_thread_to_real_ti - let mut rv: kern_return_t = thread_policy_get( - tid, - THREAD_TIME_CONSTRAINT_POLICY, - (&mut time_constraints) as *mut _ as thread_policy_t, - &mut count, - &mut get_default, - ); - -- if rv != KERN_SUCCESS as i32 { -+ if rv != KERN_SUCCESS { - return Err(AudioThreadPriorityError::new( - "thread promotion error: thread_policy_get: time_constraint", - )); - } - - rt_priority_handle.previous_time_constraint_policy = time_constraints; - - let cb_duration = buffer_frames as f32 / (audio_samplerate_hz as f32) * 1000.; -@@ -144,17 +144,17 @@ pub fn promote_current_thread_to_real_ti - }; - - rv = thread_policy_set( - tid, - THREAD_TIME_CONSTRAINT_POLICY, - (&mut time_constraints) as *mut _ as thread_policy_t, - THREAD_TIME_CONSTRAINT_POLICY_COUNT!(), - ); -- if rv != KERN_SUCCESS as i32 { -+ if rv != KERN_SUCCESS { - return Err(AudioThreadPriorityError::new( - "thread promotion error: thread_policy_set: time_constraint", - )); - } - - info!("thread {} bumped to real time priority.", tid); - } - ---- a/third_party/rust/audio_thread_priority/src/rt_win.rs -+++ b/third_party/rust/audio_thread_priority/src/rt_win.rs -@@ -1,72 +1,43 @@ --#[cfg(feature = "windows")] --mod os { -- pub use windows::Win32::Foundation::GetLastError; -- pub use windows::Win32::Foundation::HANDLE; -- pub use windows::Win32::Foundation::PSTR; -- pub use windows::Win32::System::Threading::{ -- AvRevertMmThreadCharacteristics, AvSetMmThreadCharacteristicsA, -- }; -- -- pub fn ok(rv: windows::Win32::Foundation::BOOL) -> bool { -- rv.as_bool() -- } -- -- pub fn invalid_handle(handle: HANDLE) -> bool { -- handle.is_invalid() -- } --} --#[cfg(feature = "winapi")] --mod os { -- pub use winapi::shared::ntdef::HANDLE; -- pub use winapi::um::avrt::{AvRevertMmThreadCharacteristics, AvSetMmThreadCharacteristicsA}; -- pub use winapi::um::errhandlingapi::GetLastError; -- -- pub fn ok(rv: winapi::shared::minwindef::BOOL) -> bool { -- rv != 0 -- } -- -- #[allow(non_snake_case)] -- pub fn PSTR(ptr: *const u8) -> *const i8 { -- ptr as _ -- } -- -- pub fn invalid_handle(handle: HANDLE) -> bool { -- handle.is_null() -- } --} -+use windows_sys::s; -+use windows_sys::Win32::Foundation::GetLastError; -+use windows_sys::Win32::Foundation::FALSE; -+use windows_sys::Win32::Foundation::HANDLE; -+use windows_sys::Win32::System::Threading::{ -+ AvRevertMmThreadCharacteristics, AvSetMmThreadCharacteristicsA, -+}; - - use crate::AudioThreadPriorityError; - - use log::info; - - #[derive(Debug)] - pub struct RtPriorityHandleInternal { - mmcss_task_index: u32, -- task_handle: os::HANDLE, -+ task_handle: HANDLE, - } - - impl RtPriorityHandleInternal { -- pub fn new(mmcss_task_index: u32, task_handle: os::HANDLE) -> RtPriorityHandleInternal { -+ pub fn new(mmcss_task_index: u32, task_handle: HANDLE) -> RtPriorityHandleInternal { - RtPriorityHandleInternal { - mmcss_task_index, - task_handle, - } - } - } - - pub fn demote_current_thread_from_real_time_internal( - rt_priority_handle: RtPriorityHandleInternal, - ) -> Result<(), AudioThreadPriorityError> { -- let rv = unsafe { os::AvRevertMmThreadCharacteristics(rt_priority_handle.task_handle) }; -- if !os::ok(rv) { -+ let rv = unsafe { AvRevertMmThreadCharacteristics(rt_priority_handle.task_handle) }; -+ if rv == FALSE { - return Err(AudioThreadPriorityError::new(&format!( - "Unable to restore the thread priority ({:?})", -- unsafe { os::GetLastError() } -+ unsafe { GetLastError() } - ))); - } - - info!( - "task {} priority restored.", - rt_priority_handle.mmcss_task_index - ); - -@@ -74,24 +45,23 @@ pub fn demote_current_thread_from_real_t - } - - pub fn promote_current_thread_to_real_time_internal( - _audio_buffer_frames: u32, - _audio_samplerate_hz: u32, - ) -> Result { - let mut task_index = 0u32; - -- let handle = -- unsafe { os::AvSetMmThreadCharacteristicsA(os::PSTR("Audio\0".as_ptr()), &mut task_index) }; -+ let handle = unsafe { AvSetMmThreadCharacteristicsA(s!("Audio"), &mut task_index) }; - let handle = RtPriorityHandleInternal::new(task_index, handle); - -- if os::invalid_handle(handle.task_handle) { -+ if handle.task_handle == 0 { - return Err(AudioThreadPriorityError::new(&format!( - "Unable to restore the thread priority ({:?})", -- unsafe { os::GetLastError() } -+ unsafe { GetLastError() } - ))); - } - - info!( - "task {} bumped to real time priority.", - handle.mmcss_task_index - ); - ---- a/third_party/rust/audioipc2-client/.cargo-checksum.json -+++ b/third_party/rust/audioipc2-client/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"Cargo.toml":"234b81b986ab93768ccacc68d973d6125e3769337d4b0a7b137d19d1666db8a4","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/context.rs":"86d31460a48a9bdc0ac4fbef522d267c26f68dd79a12e0cbc35b3a4b6f6449dc","src/lib.rs":"c4a6797734489280f6b97dd72c9e51a7bd7be4104592eece3929e29d45cbca4a","src/send_recv.rs":"859abe75b521eb4297c84b30423814b5b87f3c7741ad16fe72189212e123e1ac","src/stream.rs":"3101f4052e35c1600adafedc67aed92d7d5531ff0ff4845de0a5ea3cedef872d"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"d7cfe88a0f0086d4216e3f4ad3de0620417fcbda61c9852476459a9249131996","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/context.rs":"86d31460a48a9bdc0ac4fbef522d267c26f68dd79a12e0cbc35b3a4b6f6449dc","src/lib.rs":"c4a6797734489280f6b97dd72c9e51a7bd7be4104592eece3929e29d45cbca4a","src/send_recv.rs":"859abe75b521eb4297c84b30423814b5b87f3c7741ad16fe72189212e123e1ac","src/stream.rs":"3101f4052e35c1600adafedc67aed92d7d5531ff0ff4845de0a5ea3cedef872d"},"package":null} -\ No newline at end of file ---- a/third_party/rust/audioipc2-client/Cargo.toml -+++ b/third_party/rust/audioipc2-client/Cargo.toml -@@ -16,15 +16,18 @@ version = "0.5.0" - authors = [ - "Matthew Gregan ", - "Dan Glastonbury ", - ] - description = "Cubeb Backend for talking to remote cubeb server." - license = "ISC" - - [dependencies] --audio_thread_priority = "0.26" - cubeb-backend = "0.10" - log = "0.4" - -+[dependencies.audio_thread_priority] -+version = "0.30" -+default-features = false -+ - [dependencies.audioipc] - path = "../audioipc" - package = "audioipc2" ---- a/third_party/rust/audioipc2-server/.cargo-checksum.json -+++ b/third_party/rust/audioipc2-server/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"Cargo.toml":"9c801164c20a9af8c43135848244112002bd07a05b1c7165c2eb7be2db23898b","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/lib.rs":"06aff4fd1326aeabb16b01f81a6f3c59c1717ebe96285a063724830cdf30303a","src/server.rs":"ea839fe4607ba6b70a1ef5dfb2305eb668b148820c5590b87192609fbe3c9edd"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"4e66d9ec1e8baa7ad01ace373a921bc019e38bcb23f782be1daa8578f40b6086","cbindgen.toml":"fb6abe1671497f432a06e40b1db7ed7cd2cceecbd9a2382193ad7534e8855e34","src/lib.rs":"06aff4fd1326aeabb16b01f81a6f3c59c1717ebe96285a063724830cdf30303a","src/server.rs":"ea839fe4607ba6b70a1ef5dfb2305eb668b148820c5590b87192609fbe3c9edd"},"package":null} -\ No newline at end of file ---- a/third_party/rust/audioipc2-server/Cargo.toml -+++ b/third_party/rust/audioipc2-server/Cargo.toml -@@ -16,21 +16,24 @@ version = "0.5.0" - authors = [ - "Matthew Gregan ", - "Dan Glastonbury ", - ] - description = "Remote cubeb server" - license = "ISC" - - [dependencies] --audio_thread_priority = "0.26" - cubeb-core = "0.10.0" - log = "0.4" - once_cell = "1.2.0" - slab = "0.4" - -+[dependencies.audio_thread_priority] -+version = "0.30" -+default-features = false -+ - [dependencies.audioipc] - path = "../audioipc" - package = "audioipc2" - - [dependencies.error-chain] - version = "0.12.0" - default-features = false ---- a/third_party/rust/audioipc2/.cargo-checksum.json -+++ b/third_party/rust/audioipc2/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"Cargo.toml":"8434bf0fc2131bdca6655fc0e6ff3b87218c92f342785dd453a4018ed1a70b52","benches/serialization.rs":"d56855d868dab6aa22c8b03a61084535351b76c94b68d8b1d20764e352fe473f","build.rs":"65df9a97c6cdaa3faf72581f04ac289197b0b1797d69d22c1796e957ff1089e2","src/codec.rs":"38408b512d935cd7889a03b25dd14b36083ec4e6d2fcabd636182cf45e3d50bc","src/errors.rs":"67a4a994d0724397657581cde153bdfc05ce86e7efc467f23fafc8f64df80fa4","src/ipccore.rs":"ba339eebdc2d8a6d0cb9b294344809e63e404e220fda643b63a8a3ff63a755e8","src/lib.rs":"3881e9069f37e824cbb5dacf1c37192c08b84068098fef96ede6f2ae284edfe3","src/messages.rs":"452362da2cace9a0f2e3134c190ecb6a9997f8be4036cde06643e17c6c238240","src/rpccore.rs":"025b6614f1c42b96b0a8e74fd7881032d338c66e0d67ec0af70f910a9e30ebe1","src/shm.rs":"f8bc0ab17e04b86a746aea7aa4eb15f402e29d80e0d2f9d7c22ac8375a0cea85","src/sys/mod.rs":"e6fa1d260abf093e1f7b50185195e2d3aee0eb8c9774c6f253953b5896d838f3","src/sys/unix/cmsg.rs":"6f0236bf6cd66ccd237b268348a826ae1d266073c2adadcfaae703c556230065","src/sys/unix/cmsghdr.c":"d7344b3dc15cdce410c68669b848bb81f7fe36362cd3699668cb613fa05180f8","src/sys/unix/mod.rs":"59835f0d5509940078b1820a54f49fc5514adeb3e45e7d21e3ab917431da2e74","src/sys/unix/msg.rs":"0e297d73bae9414184f85c2209cca0a3fde6d999a3f1d3f42faa3f56b6d57233","src/sys/windows/mod.rs":"7eaabb76e62c6962b636320e2bbf79a78fce61659c799a798f7dd6d56b0be8a1"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"4d025a5bf0f59f660b3b52ec6a0da028f61269b17e4e33041b768ea07b8a9448","benches/serialization.rs":"d56855d868dab6aa22c8b03a61084535351b76c94b68d8b1d20764e352fe473f","build.rs":"65df9a97c6cdaa3faf72581f04ac289197b0b1797d69d22c1796e957ff1089e2","src/codec.rs":"38408b512d935cd7889a03b25dd14b36083ec4e6d2fcabd636182cf45e3d50bc","src/errors.rs":"67a4a994d0724397657581cde153bdfc05ce86e7efc467f23fafc8f64df80fa4","src/ipccore.rs":"ba339eebdc2d8a6d0cb9b294344809e63e404e220fda643b63a8a3ff63a755e8","src/lib.rs":"3881e9069f37e824cbb5dacf1c37192c08b84068098fef96ede6f2ae284edfe3","src/messages.rs":"452362da2cace9a0f2e3134c190ecb6a9997f8be4036cde06643e17c6c238240","src/rpccore.rs":"025b6614f1c42b96b0a8e74fd7881032d338c66e0d67ec0af70f910a9e30ebe1","src/shm.rs":"f8bc0ab17e04b86a746aea7aa4eb15f402e29d80e0d2f9d7c22ac8375a0cea85","src/sys/mod.rs":"e6fa1d260abf093e1f7b50185195e2d3aee0eb8c9774c6f253953b5896d838f3","src/sys/unix/cmsg.rs":"6f0236bf6cd66ccd237b268348a826ae1d266073c2adadcfaae703c556230065","src/sys/unix/cmsghdr.c":"d7344b3dc15cdce410c68669b848bb81f7fe36362cd3699668cb613fa05180f8","src/sys/unix/mod.rs":"59835f0d5509940078b1820a54f49fc5514adeb3e45e7d21e3ab917431da2e74","src/sys/unix/msg.rs":"0e297d73bae9414184f85c2209cca0a3fde6d999a3f1d3f42faa3f56b6d57233","src/sys/windows/mod.rs":"7eaabb76e62c6962b636320e2bbf79a78fce61659c799a798f7dd6d56b0be8a1"},"package":null} -\ No newline at end of file ---- a/third_party/rust/audioipc2/Cargo.toml -+++ b/third_party/rust/audioipc2/Cargo.toml -@@ -58,17 +58,17 @@ features = ["html_reports"] - - [build-dependencies] - cc = "1.0" - - [target."cfg(target_os = \"android\")".dependencies] - ashmem = "0.1.2" - - [target."cfg(target_os = \"linux\")".dependencies.audio_thread_priority] --version = "0.26.1" -+version = "0.30" - default-features = false - - [target."cfg(unix)".dependencies] - arrayvec = "0.7" - iovec = "0.1" - libc = "0.2" - memmap2 = "0.5" - ---- a/toolkit/library/rust/shared/Cargo.toml -+++ b/toolkit/library/rust/shared/Cargo.toml -@@ -20,18 +20,18 @@ xpcom = { path = "../../../../xpcom/rust - prefs_parser = { path = "../../../../modules/libpref/parser" } - static_prefs = { path = "../../../../modules/libpref/init/static_prefs" } - profiler_helper = { path = "../../../../tools/profiler/rust-helper", optional = true } - mozurl = { path = "../../../../netwerk/base/mozurl" } - webrender_bindings = { path = "../../../../gfx/webrender_bindings" } - cubeb-coreaudio = { git = "https://github.com/mozilla/cubeb-coreaudio-rs", rev = "93b5c01a131f65c83c11aeb317f4583405c5eb79", optional = true } - cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="cf48897be5cbe147d051ebbbe1eaf5fd8fb6bbc9", optional = true, features=["pulse-dlopen"] } - cubeb-sys = { version = "0.10.3", optional = true, features=["gecko-in-tree"] } --audioipc2-client = { git = "https://github.com/mozilla/audioipc", rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543", optional = true } --audioipc2-server = { git = "https://github.com/mozilla/audioipc", rev = "ec6af6ecf8ba50b51f13d18f417de8cfb8460543", optional = true } -+audioipc2-client = { git = "https://github.com/mozilla/audioipc", rev = "6be424d75f1367e70f2f5ddcacd6d0237e81a6a9", optional = true } -+audioipc2-server = { git = "https://github.com/mozilla/audioipc", rev = "6be424d75f1367e70f2f5ddcacd6d0237e81a6a9", optional = true } - encoding_glue = { path = "../../../../intl/encoding_glue" } - authrs_bridge = { path = "../../../../dom/webauthn/authrs_bridge" } - gkrust_utils = { path = "../../../../xpcom/rust/gkrust_utils" } - gecko_logger = { path = "../../../../xpcom/rust/gecko_logger" } - rsdparsa_capi = { path = "../../../../dom/media/webrtc/sdp/rsdparsa_capi" } - # We have these to enforce common feature sets for said crates. - log = {version = "0.4", features = ["release_max_level_info"]} - cose-c = { version = "0.1.5" } -@@ -39,17 +39,17 @@ jsrust_shared = { path = "../../../../js - cascade_bloom_filter = { path = "../../../components/cascade_bloom_filter" } - cert_storage = { path = "../../../../security/manager/ssl/cert_storage" } - crypto_hash = { path = "../../../../security/manager/ssl/crypto_hash" } - data_storage = { path = "../../../../security/manager/ssl/data_storage" } - bitsdownload = { path = "../../../components/bitsdownload", optional = true } - storage = { path = "../../../../storage/rust" } - bookmark_sync = { path = "../../../components/places/bookmark_sync", optional = true } - chardetng_c = "0.1.1" --audio_thread_priority = { version = "0.26.1", default_features = false, features = ["winapi"] } -+audio_thread_priority = { version = "0.30", default_features = false } - mdns_service = { path="../../../../dom/media/webrtc/transport/mdns_service", optional = true } - neqo_glue = { path = "../../../../netwerk/socket/neqo_glue" } - wgpu_bindings = { path = "../../../../gfx/wgpu_bindings" } - mapped_hyph = { git = "https://github.com/jfkthame/mapped_hyph.git", rev = "c7651a0cffff41996ad13c44f689bd9cd2192c01" } - fog_control = { path = "../../../components/glean" } - app_services_logger = { path = "../../../../services/common/app_services_logger" } - http_sfv = { path = "../../../../netwerk/base/http-sfv" } - unic-langid = { version = "0.9", features = ["likelysubtags"] } diff --git a/user/zotero/xulrunner-get-alpine-firefox.patch b/user/zotero/xulrunner-get-alpine-firefox.patch deleted file mode 100644 index 28527dd..0000000 --- a/user/zotero/xulrunner-get-alpine-firefox.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/app/scripts/fetch_xulrunner.orig b/app/scripts/fetch_xulrunner -index 8b3d918..c6a96ff 100755 ---- a/app/scripts/fetch_xulrunner.orig -+++ b/app/scripts/fetch_xulrunner -@@ -132,15 +132,6 @@ function modify_omni { - # Continue using app.update.auto in prefs.js on Windows - replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.jsm - -- # Prompt if major update is available instead of installing automatically on restart -- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { -- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); -- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); -- Services.obs.notifyObservers(update, "update-available", "show-prompt"); -- return; -- } -- if (!updateAuto) {' modules/UpdateService.jsm -- - # Avoid console warning about resource://gre/modules/FxAccountsCommon.js - replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.jsm - -@@ -470,36 +461,15 @@ fi - - if [ $BUILD_LINUX == 1 ]; then - GECKO_VERSION="$GECKO_VERSION_LINUX" -- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" - -+ rm -rf firefox-x86_64 - -- # Include 32-bit build if not in CI -- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then -- arches="x86_64" -- else -- arches="i686 x86_64" -- fi -- for arch in $arches; do -- xdir="firefox-$arch" -- rm -rf $xdir -- -- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" -- if [ -e "$archived_file" ]; then -- echo "Using $archived_file" -- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" -- else -- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" -- fi -- -- tar xvf firefox-$GECKO_VERSION.tar.bz2 -- mv firefox firefox-$arch -+ cp -r /usr/lib/firefox-esr firefox-x86_64 -+ -+ pushd firefox-x86_64 -+ modify_omni linux64 -+ popd - -- pushd firefox-$arch -- modify_omni -- popd -- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux -- rm "firefox-$GECKO_VERSION.tar.bz2" -- done - fi - - echo Done From 6bfd1707ab355092d96f101893e4be15234b715b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 4 Feb 2024 10:37:46 -0500 Subject: [PATCH 155/738] user/pdf4qt: new aport --- user/pdf4qt/APKBUILD | 54 ++++++++++++++++ user/pdf4qt/CMakeListsLib.patch | 13 ++++ user/pdf4qt/CMakeListsMain.patch | 17 +++++ user/pdf4qt/FindLCMS2.cmake | 105 +++++++++++++++++++++++++++++++ 4 files changed, 189 insertions(+) create mode 100644 user/pdf4qt/APKBUILD create mode 100644 user/pdf4qt/CMakeListsLib.patch create mode 100644 user/pdf4qt/CMakeListsMain.patch create mode 100644 user/pdf4qt/FindLCMS2.cmake diff --git a/user/pdf4qt/APKBUILD b/user/pdf4qt/APKBUILD new file mode 100644 index 0000000..4680132 --- /dev/null +++ b/user/pdf4qt/APKBUILD @@ -0,0 +1,54 @@ +# Maintainer: Antoine Martin (ayakael) +pkgname=pdf4qt +pkgver=1.3.7 +pkgrel=0 +pkgdesc="Open source PDF editor" +arch="x86_64" +url="https://jakubmelka.github.io/" +license="LGPL-3.0" +# opt depends: +# 'flite: Text-To-Speech using flite synthesizer', +# 'libspeechd: Text-To-Speech using speechd synthesizer' +makedepends=" + cmake + openssl-dev + libjpeg-turbo-dev + openjpeg-dev + onetbb-dev + lcms2-dev + freetype-dev + zlib-dev + musl-dev + qt6-qtbase-dev + qt6-qtsvg-dev + qt6-qtspeech-dev + qt6-qtdeclarative-dev + qt6-qtmultimedia-dev + " +source=" + $pkgname-$pkgver.tar.gz::https://github.com/JakubMelka/PDF4QT/archive/refs/tags/v$pkgver.tar.gz + CMakeListsMain.patch + CMakeListsLib.patch + FindLCMS2.cmake + " +builddir="$srcdir"/PDF4QT-$pkgver + +build() { + cmake -B build \ + -DCMAKE_BUILD_TYPE='Release' \ + -DCMAKE_INSTALL_PREFIX='/' \ + -Wno-dev \ + -DCMAKE_MODULE_PATH="$srcdir" \ + -DPDF4QT_INSTALL_DEPENDENCIES=0 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} +sha512sums=" +86be79c901edee7ca9a0f534979b88ae1cf6dac3ecb0cd40b165354765dabdfcae94b288001e918e068a0bb4e61d8e9c90842d7f415659403979aa87d8830ee7 pdf4qt-1.3.7.tar.gz +98392178a57739a3f5629aac27ac36f0aa0f33a508b2bd3d3de66c61a20c799a86a5dec6feabb250388c2e17319f7bdff05b34131d95c4c9ce8ee33d3dae3a8d CMakeListsMain.patch +f0ee3675a70624f2ecefd8a157a68941aa7b18da03298186317c566e3b26a34e60991ce4c5501a619b7aa8744ab193b74417a84278f13eecd1ffaec28116dc30 CMakeListsLib.patch +48cdc9f6cf0691baef2d80b423c62315772e51ac7b9bfa1c0c619315a11a6867e282fcf764c50290eb3c310d51be496502bb0e60b6a82e9bbcfd4f15e6ee1a73 FindLCMS2.cmake +" diff --git a/user/pdf4qt/CMakeListsLib.patch b/user/pdf4qt/CMakeListsLib.patch new file mode 100644 index 0000000..8b354d0 --- /dev/null +++ b/user/pdf4qt/CMakeListsLib.patch @@ -0,0 +1,13 @@ +diff --git a/Pdf4QtLibCore/CMakeLists.txt b/Pdf4QtLibCore/CMakeLists.txt +index 6f12727..e0fd971 100644 +--- a/Pdf4QtLibCore/CMakeLists.txt ++++ b/Pdf4QtLibCore/CMakeLists.txt +@@ -153,7 +153,7 @@ GENERATE_EXPORT_HEADER(Pdf4QtLibCore + EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/pdf4qtlibcore_export.h") + + target_link_libraries(Pdf4QtLibCore PRIVATE Qt6::Core Qt6::Gui Qt6::Xml Qt6::Svg) +-target_link_libraries(Pdf4QtLibCore PRIVATE lcms2::lcms2) ++target_link_libraries(Pdf4QtLibCore PRIVATE LCMS2::LCMS2) + target_link_libraries(Pdf4QtLibCore PRIVATE OpenSSL::SSL OpenSSL::Crypto) + target_link_libraries(Pdf4QtLibCore PRIVATE ZLIB::ZLIB) + target_link_libraries(Pdf4QtLibCore PRIVATE Freetype::Freetype) diff --git a/user/pdf4qt/CMakeListsMain.patch b/user/pdf4qt/CMakeListsMain.patch new file mode 100644 index 0000000..c2109ca --- /dev/null +++ b/user/pdf4qt/CMakeListsMain.patch @@ -0,0 +1,17 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7dc98bc..ea790b1 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -64,10 +64,10 @@ endif() + qt_standard_project_setup() + + find_package(OpenSSL REQUIRED) +-find_package(lcms REQUIRED) ++find_package(LCMS2 REQUIRED) + find_package(ZLIB REQUIRED) + find_package(Freetype REQUIRED) +-find_package(OpenJPEG CONFIG REQUIRED) ++find_package(OpenJPEG REQUIRED) + find_package(JPEG REQUIRED) + find_package(PNG REQUIRED) + diff --git a/user/pdf4qt/FindLCMS2.cmake b/user/pdf4qt/FindLCMS2.cmake new file mode 100644 index 0000000..10db145 --- /dev/null +++ b/user/pdf4qt/FindLCMS2.cmake @@ -0,0 +1,105 @@ +# Copyright (C) 2021 Igalia S.L. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +FindLCMS2 +--------- + +Find LCMS2 headers and libraries. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``LCMS2::LCMS2`` + The LCMS2 library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables in your project: + +``LCMS2_FOUND`` + true if (the requested version of) LCMS2 is available. +``LCMS2_VERSION`` + the version of LCMS2. +``LCMS2_LIBRARIES`` + the libraries to link against to use LCMS2. +``LCMS2_INCLUDE_DIRS`` + where to find the LCMS2 headers. +``LCMS2_COMPILE_OPTIONS`` + this should be passed to target_compile_options(), if the + target is not used for linking + +#]=======================================================================] + +find_package(PkgConfig QUIET) +if (PkgConfig_FOUND) + pkg_check_modules(PC_LCMS2 QUIET lcms2) + set(LCMS2_COMPILE_OPTIONS ${PC_LCMS2_CFLAGS_OTHER}) + set(LCMS2_VERSION ${PC_LCMS2_VERSION}) +endif () + +find_path(LCMS2_INCLUDE_DIR + NAMES lcms2.h + HINTS ${PC_LCMS2_INCLUDEDIR} ${PC_LCMS2_INCLUDE_DIRS} ${LCMS2_INCLUDE_DIR} + PATH_SUFFIXES lcms2 liblcms2 +) + +find_library(LCMS2_LIBRARY + NAMES ${LCMS2_NAMES} lcms2 liblcms2 lcms-2 liblcms-2 + HINTS ${PC_LCMS2_LIBDIR} ${PC_LCMS2_LIBRARY_DIRS} + PATH_SUFFIXES lcms2 +) + +if (LCMS2_INCLUDE_DIR AND NOT LCMS_VERSION) + file(READ ${LCMS2_INCLUDE_DIR}/lcms2.h LCMS2_VERSION_CONTENT) + string(REGEX MATCH "#define[ \t]+LCMS_VERSION[ \t]+([0-9]+)[ \t]*\n" LCMS2_VERSION_MATCH ${LCMS2_VERSION_CONTENT}) + if (LCMS2_VERSION_MATCH) + string(SUBSTRING ${CMAKE_MATCH_1} 0 1 LCMS2_VERSION_MAJOR) + string(SUBSTRING ${CMAKE_MATCH_1} 1 2 LCMS2_VERSION_MINOR) + set(LCMS2_VERSION "${LCMS2_VERSION_MAJOR}.${LCMS2_VERSION_MINOR}") + endif () +endif () + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LCMS2 + FOUND_VAR LCMS2_FOUND + REQUIRED_VARS LCMS2_LIBRARY LCMS2_INCLUDE_DIR + VERSION_VAR LCMS2_VERSION +) + +if (LCMS2_LIBRARY AND NOT TARGET LCMS2::LCMS2) + add_library(LCMS2::LCMS2 UNKNOWN IMPORTED GLOBAL) + set_target_properties(LCMS2::LCMS2 PROPERTIES + IMPORTED_LOCATION "${LCMS2_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${LCMS2_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${LCMS2_INCLUDE_DIR}" + ) +endif () + +mark_as_advanced(LCMS2_INCLUDE_DIR LCMS2_LIBRARY) + +if (LCMS2_FOUND) + set(LCMS2_LIBRARIES ${LCMS2_LIBRARY}) + set(LCMS2_INCLUDE_DIRS ${LCMS2_INCLUDE_DIR}) +endif () From 150a54639685e78d673a622b23cc495ba9b6974e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 6 Feb 2024 09:55:21 -0500 Subject: [PATCH 156/738] backports/signal-desktop: upgrade to 6.46.0 --- backports/signal-desktop/APKBUILD | 18 ++-- .../libsignal-fix-build-rust-1.69.patch | 44 --------- .../libsignal-too-new-clang.patch | 89 ------------------- ...atever-the-fuck-is-ignore-doing-here.patch | 20 ----- .../webrtc-no-shared-deps-in-static-lib.patch | 14 --- .../signal-desktop/webrtc-toolhack.patch | 22 ----- 6 files changed, 9 insertions(+), 198 deletions(-) delete mode 100644 backports/signal-desktop/libsignal-fix-build-rust-1.69.patch delete mode 100644 backports/signal-desktop/libsignal-too-new-clang.patch delete mode 100644 backports/signal-desktop/signal-tasje-whatever-the-fuck-is-ignore-doing-here.patch delete mode 100644 backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch delete mode 100644 backports/signal-desktop/webrtc-toolhack.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index def119a..2c4cad5 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=6.40.0 +pkgver=6.46.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -61,17 +61,17 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.32.1 +_libsignalver=0.39.1 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.34.3 +_ringrtcver=2.36.0 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=5845j +_webrtcver=5993d # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION -# last bsqlite version: 8.5.2 +# last bsqlite version: 8.6.0 _stokenizerver=0.2.1 source=" @@ -464,10 +464,10 @@ package() { } sha512sums=" -6666029a4b7d163eb5d5833a73c699d11ddd56a644a66da3363b5874ff50469add0c1415b41e568882c9f33cec72024f6c2a50774f9b182d0634d24fb831119a Signal-Desktop-6.40.0.tar.gz -855f053a1329d12e20f254f607db0c0db9f6e1a3eb10061996da75805bf462a5dee0f4f841ec679980c77da87d600f92a21cd643c36d44e017cb3cbf57003b09 libsignal-0.32.1.tar.gz -83df430ead75eb965513b9dec9e722d10fc4c74dc6dba8ee809bd2b77657c9d545b8d72c00a99273183c3fbcaf94ee9894c5a2d57f45ffeb3419a9957fe74426 ringrtc-2.34.3.tar.gz -a1e78d6c8fed69dbc9ece48dc2e5f0e38ab74d3483e02059c90abe9f0be6d915d0a135a0498c05fd9ef87f444b34efb0d67d7dc577f086cba4a6012981d9d9bd webrtc-5845j.tar.zst +111aadf2f2b4972a01a08b14351b9cd6e5fa2691fa687a2671a10c493ea3b8089e30d2d6fafb058cbc547a9fb9e0a220a19d39328e17ba9ff1a26c7b5d86b3ce Signal-Desktop-6.46.0.tar.gz +c55ca3822836a2cce69d8b9b4f2a5e9a7883ca12824e3da56bb2674fa925559cc7e3fb8676526108d413e34e8e6590e5d4497f38b7a355f633c92f008ae98c7a libsignal-0.39.1.tar.gz +f0aae6c33003969064a654948f666223f4380a94e7f96b3d329095a5f0e28189705281b57adc9bcfcab550619bc325faa136f728e6e3a58c32f2118d4759f302 ringrtc-2.36.0.tar.gz +20d4264f7d5b8e258eb3f5c453ca95ad6bb44dd5115c3e9d2b1044354889f364a2ddced15c4b15f17ca51afc9d4603bd5e9e3b20bc37f3c0fb79e4edf15fe078 webrtc-5993d.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 90d47914e30f095515c47c9ef7c763a7a2583a281228d6ea7e2a3444be670b3ae506c82b4fcea8a228f88f688a43c23c8dcef52b65805d2105287234550718a5 libsignal-auditable.patch diff --git a/backports/signal-desktop/libsignal-fix-build-rust-1.69.patch b/backports/signal-desktop/libsignal-fix-build-rust-1.69.patch deleted file mode 100644 index 765a447..0000000 --- a/backports/signal-desktop/libsignal-fix-build-rust-1.69.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/rust/attest/src/dcap/sgx_report_body.rs b/rust/attest/src/dcap/sgx_report_body.rs -index 056bef2b..6d3f0d5d 100644 ---- a/rust/attest/src/dcap/sgx_report_body.rs -+++ b/rust/attest/src/dcap/sgx_report_body.rs -@@ -20,7 +20,7 @@ const SGX_HASH_SIZE: usize = 32; - - pub type MREnclave = [u8; SGX_HASH_SIZE]; - --#[derive(Debug)] -+#[derive(Copy, Clone, Debug)] - #[repr(C, packed)] - // sgx_report_body_t - pub(crate) struct SgxReportBody { -diff --git a/rust/attest/src/endian.rs b/rust/attest/src/endian.rs -index ae9351eb..2e08c711 100644 ---- a/rust/attest/src/endian.rs -+++ b/rust/attest/src/endian.rs -@@ -7,7 +7,7 @@ use std::convert::{TryFrom, TryInto}; - - use hex::FromHex; - --#[derive(Debug)] -+#[derive(Copy, Clone, Debug)] - #[repr(C, packed)] - pub(crate) struct UInt16LE { - bytes: [u8; 2], -@@ -27,7 +27,7 @@ impl From for UInt16LE { - } - } - --#[derive(Debug)] -+#[derive(Copy, Clone, Debug)] - #[repr(C, packed)] - pub(crate) struct UInt32LE { - bytes: [u8; 4], -@@ -66,7 +66,7 @@ impl FromHex for UInt32LE { - } - } - --#[derive(Debug)] -+#[derive(Copy, Clone, Debug)] - #[repr(C, packed)] - pub(crate) struct UInt64LE { - bytes: [u8; 8], diff --git a/backports/signal-desktop/libsignal-too-new-clang.patch b/backports/signal-desktop/libsignal-too-new-clang.patch deleted file mode 100644 index 8b88e29..0000000 --- a/backports/signal-desktop/libsignal-too-new-clang.patch +++ /dev/null @@ -1,89 +0,0 @@ -core issue: https://github.com/rust-lang/rust-bindgen/issues/2312 -upstream: https://github.com/signalapp/boring/pull/19 -upstream's upstream: https://github.com/cloudflare/boring/pull/110 - ---- ./Cargo.toml.orig -+++ ./Cargo.toml -@@ -25,3 +25,6 @@ - # Use our fork of curve25519-dalek for eventual zkgroup support. - curve25519-dalek = { git = 'https://github.com/signalapp/curve25519-dalek', branch = 'lizard2' } - boring = { git = 'https://github.com/signalapp/boring', branch = 'libsignal'} -+ -+[patch.'https://github.com/signalapp/boring'] -+boring-sys = { git = 'https://github.com/selfisekai/boring-cf', branch = 'i109-signal', package = 'boring-sys' } ---- ./Cargo.lock.orig -+++ ./Cargo.lock -@@ -206,9 +206,9 @@ - - [[package]] - name = "bindgen" --version = "0.60.1" -+version = "0.62.0" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "062dddbc1ba4aca46de6338e2bf87771414c335f7b2f2036e8f3e9befebf88e6" -+checksum = "c6720a8b7b2d39dd533285ed438d458f65b31b5c257e6ac7bb3d7e82844dd722" - dependencies = [ - "bitflags", - "cexpr", -@@ -221,6 +221,7 @@ - "regex", - "rustc-hash", - "shlex", -+ "syn", - ] - - [[package]] -@@ -295,7 +296,7 @@ - [[package]] - name = "boring-sys" - version = "2.1.0" --source = "git+https://github.com/signalapp/boring?branch=libsignal#25e1dd8fa519ae90772008fbd4a284582096fece" -+source = "git+https://github.com/selfisekai/boring-cf?branch=i109-signal#5c13f5c357c8b33c9978f2e447de2d6caf825d13" - dependencies = [ - "bindgen", - "cmake", -@@ -1398,11 +1399,11 @@ - - [[package]] - name = "proc-macro2" --version = "1.0.29" -+version = "1.0.54" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" -+checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" - dependencies = [ -- "unicode-xid", -+ "unicode-ident", - ] - - [[package]] -@@ -1868,13 +1869,13 @@ - - [[package]] - name = "syn" --version = "1.0.80" -+version = "1.0.109" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194" -+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" - dependencies = [ - "proc-macro2", - "quote", -- "unicode-xid", -+ "unicode-ident", - ] - - [[package]] -@@ -1981,6 +1982,12 @@ - version = "0.1.3" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" -+ -+[[package]] -+name = "unicode-ident" -+version = "1.0.8" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" - - [[package]] - name = "unicode-segmentation" diff --git a/backports/signal-desktop/signal-tasje-whatever-the-fuck-is-ignore-doing-here.patch b/backports/signal-desktop/signal-tasje-whatever-the-fuck-is-ignore-doing-here.patch deleted file mode 100644 index ecb9075..0000000 --- a/backports/signal-desktop/signal-tasje-whatever-the-fuck-is-ignore-doing-here.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- ./package.json.orig -+++ ./package.json -@@ -431,7 +431,6 @@ - "libtextsecure/**", - "ts/**/*.js", - "ts/*.js", -- "!build", - "!ts/{storybook,test-node,test-mock,test-both,test-electron}", - "!**/{tsconfig,bower,component}.json", - "!**/.{github,husky,grenrc,npmrc,nycrc,taprc,bithoundrc}", -@@ -468,9 +467,7 @@ - "!node_modules/spellchecker/vendor/hunspell/**/*", - "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts,.snyk-*.flag,benchmark}", - "!**/node_modules/.bin", -- "!**/node_modules/**/build/**", - "node_modules/intl-tel-input/build/**", -- "!**/node_modules/**/prebuilds/**", - "!**/*.{o,hprof,orig,pyc,pyo,rbc,c,h,m}", - "!**/._*", - "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,thumbs.db,.gitignore,.gitattributes,.flowconfig,.yarn-metadata.json,.idea,appveyor.yml,.travis.yml,circle.yml,npm-debug.log,.nyc_output,yarn.lock,.yarn-integrity}", diff --git a/backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch b/backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch deleted file mode 100644 index d2a83b2..0000000 --- a/backports/signal-desktop/webrtc-no-shared-deps-in-static-lib.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/BUILD.gn -+++ b/BUILD.gn -@@ -480,11 +480,6 @@ - "rtc_base", - "sdk", - "video", -- -- # Added by RingRTC -- # Necessary for use_custom_libcxx=true, -- # which is in turn necessary for deploying to Ubuntu 16.04. -- "//build/config:shared_library_deps", - ] - - if (rtc_include_builtin_audio_codecs) { diff --git a/backports/signal-desktop/webrtc-toolhack.patch b/backports/signal-desktop/webrtc-toolhack.patch deleted file mode 100644 index 4028fe2..0000000 --- a/backports/signal-desktop/webrtc-toolhack.patch +++ /dev/null @@ -1,22 +0,0 @@ -this breaks the clang include path --- ---- a/build/config/compiler/BUILD.gn -+++ a/build/config/compiler/BUILD.gn -@@ -1310,7 +1310,7 @@ - # paths to the tools it invokes. We don't want this because we don't - # really need it and it can mess up the goma cache entries. - if (is_clang && (!is_nacl || is_nacl_saigo)) { -- cflags += [ "-no-canonical-prefixes" ] -+ #cflags += [ "-no-canonical-prefixes" ] - - # Same for links: Let the compiler driver invoke the linker - # with a relative path and pass relative paths to built-in -@@ -1319,7 +1319,7 @@ - # We don't link on goma, so this change is just for cleaner - # internal linker invocations, for people who work on the build. - if (!is_win) { -- ldflags += [ "-no-canonical-prefixes" ] -+ #ldflags += [ "-no-canonical-prefixes" ] - } - } - } From fa933b283d8d407a6bc1615ca4ae4cf24f56c512 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 28 Nov 2023 19:56:59 -0500 Subject: [PATCH 157/738] user/scanservjs: upgrade to 3.0.3 --- user/scanservjs/APKBUILD | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/user/scanservjs/APKBUILD b/user/scanservjs/APKBUILD index 691cb99..4aeb67d 100644 --- a/user/scanservjs/APKBUILD +++ b/user/scanservjs/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=scanservjs -pkgver=2.21.0 +pkgver=3.0.3 pkgrel=0 pkgdesc="SANE scanner nodejs web ui" arch="noarch" @@ -28,38 +28,42 @@ source=" build() { # Uses version of webpack which is partially broken on nodejs >16 export NODE_OPTIONS=--openssl-legacy-provider - npm run install + npm install --omit=dev --only=prod --loglevel=error npm run build - - cd dist - npm install --production } package() { + _webappdir="$pkgdir"/usr/share/webapps/scanservjs # install documentation install -Dm644 ./docs/* -t "$pkgdir/usr/share/doc/scanservjs/" - install -d "$pkgdir/usr/share/webapps/scanservjs" "$pkgdir/etc/webapps/scanservjs" "$pkgdir/var/lib/webapps/scanservjs" + install -d \ + "$pkgdir/usr/share/webapps" \ + "$pkgdir/etc" \ + "$pkgdir/var/lib" # install main files - cp -r dist/* "$pkgdir/usr/share/webapps/scanservjs/" - rm -r "$pkgdir"/usr/share/webapps/scanservjs/scanservjs.service - rm -r "$pkgdir"/usr/share/webapps/scanservjs/installer.sh + cp -r dist "$_webappdir" + # Get rid of map files + find "$pkgdir" -name "*.map" -type f -delete + + # Move and tidy up files + mv -v "$_webappdir"/data "$pkgdir"/var/lib/scanservjs + mv -v "$_webappdir"/config "$pkgdir"/etc/scanservjs + + # Create symlinks + ln -sv /var/lib/scanservjs "$_webappdir"/data + ln -sv /etc/scanservjs "$_webappdir"/config + + # and the rest ... chmod +x "$pkgdir"/usr/share/webapps/scanservjs/server/server.js - mv "$pkgdir"/usr/share/webapps/scanservjs/config/* "$pkgdir/etc/webapps/scanservjs/" - mv "$pkgdir"/usr/share/webapps/scanservjs/data/* "$pkgdir/var/lib/webapps/scanservjs/" - - rmdir "$pkgdir"/usr/share/webapps/scanservjs/config "$pkgdir/usr/share/webapps/scanservjs/data" - ln -s /etc/webapps/scanservjs "$pkgdir/usr/share/webapps/scanservjs/config" - ln -s /var/lib/webapps/scanservjs "$pkgdir/usr/share/webapps/scanservjs/data" - install -Dm 755 "$srcdir"/scanservjs.initd "$pkgdir"/etc/init.d/scanservjs install -Dm 644 "$srcdir"/scanservjs.conf "$pkgdir"/etc/conf.d/scanservjs } sha512sums=" -1ee256bc6c38ccf1fcf196926f7fdbff6ff8d7e800a414ee5d45ad3b430c3f9055856d96181520b2f24e2d067f5ffc49fb7fd543fff8d0352517d1b7ccd12fd2 scanservjs-2.21.0.tar.gz +e3746cfab118b08b75fe5a862e1b06d35bce3fafe7b5cf482ddfd28aad8ac9879981eef5bdadc35a783607aac49eef95b966ff1d2ddf431eaf6e2d7e335623fb scanservjs-3.0.3.tar.gz f58dd5e1c4936d7e25065a295f5d01e64189cdefe92ba54fc875348a59a30b2055c93464d510a52820e66b42a69d0626d3513c93ab60b0768e1e8d5b3538bb13 scanservjs.initd 9d4fdab3803a598c729bf703369d8594b383163b05045f31e516f184a87d8deef8c8b40942d324e04bdf751ac9d63f7de25b13364f9f30888eba2af873369b36 scanservjs.conf " From a5feaf6806816959f85be9e1916b053b1f872875 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Feb 2024 11:50:44 -0500 Subject: [PATCH 158/738] user/gitaly: upgrade to 16.8.3 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 48130c3..6e3b00b 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.8.1 +pkgver=16.8.3 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -b1da4605c85d1a816608ae51387cc1617f409016001c9eee431e7a00f03bd711fc13b226c4991a76adc221ebfc3aec11a29788abd67eb57e906a8c404cb2f806 gitaly-v16.8.1.tar.gz +54ad11dc3638e0a8bc5e6b881cd7f8ede1125bdcf25f36cf957fdfe06cf3851c5162b4c375fb9e6e7912c4fcfcd08aa63df4834c3b5c5ef6aaf18a8e837ce5ca gitaly-v16.8.3.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From bcfab7eccbc51b4b4d79f17eae41e9a92c959cc9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Feb 2024 11:51:07 -0500 Subject: [PATCH 159/738] user/gitlab-foss: upgrade to 16.8.3 --- user/gitlab-foss/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index a41215a..5e855f0 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.8.1 +pkgver=16.8.3 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -382,7 +382,7 @@ assets() { } sha512sums=" -9e36eec8209a64cbda254b851213a4ba97c629cbe1f8a008ead7a53e1bc308ac866e9c65a60bcad74f377155346c38b439a2282e4d74431d1642cb6d8b31ab5d gitlab-foss-v16.8.1.tar.gz +ae2a36e129d56ade19c4a910362cf43d5ae24bbb62a6cec4a156e7e88c9ff9e4f2cd63b2b992aa96f20b93addc8e70b4d07578d70736a433d47c0a6f3e117786 gitlab-foss-v16.8.3.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From c9b849a66bd4859c1842a8f1eba8be4bcde026e7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Feb 2024 11:51:31 -0500 Subject: [PATCH 160/738] user/gitlab-pages: upgrade to 16.8.3 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index 50f5d50..6c451f9 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.8.1 +pkgver=16.8.3 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -0e36fdf24e1ee8d8f33eb52b3428f6f5bea2accf4ae100723f1ca395ea1d1eda7352e221f76039ddda9f54e8a1c491f57c96541933fcfa975b0ba8a76705bf85 gitlab-pages-v16.8.1.tar.gz +5fa50ad7eaea2c50566a471fd6cb36fb286c0fa4b8c6ec859a40e0119c4991311b9f5f6fd0ea299d93594b102ce89f8b58a85bd9c09287049cab35ea93098c01 gitlab-pages-v16.8.3.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From f3c2249274f38fbdf79cf733de17d3523a200d35 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Feb 2024 11:44:02 -0500 Subject: [PATCH 161/738] user/authentik: upgrade to 2024.2.1 --- user/authentik/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 999493e..1e72225 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=authentik -pkgver=2023.10.7 +pkgver=2024.2.1 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" @@ -236,7 +236,7 @@ package() { } sha512sums=" -73d11fa0868b81a714ffd3da1869ee58387300863ec6951ee37d0ed332681f669153cfae8643f54fb5b4af8a95078de240d5636854f046b9d606f01ad6e71569 authentik-2023.10.7.tar.gz +ae177d10b024c72e5b2f793bf837e78dc5b7f58ec45c6b7474a457257df317b7464923e3ba950f74643edee7a1591dfd83285185c6db333a7d5639fae12b98c8 authentik-2024.2.1.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From 718b7a441f29bb03a0b29d6d7f4a4c0b0dd0a3ef Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Feb 2024 11:55:52 -0500 Subject: [PATCH 162/738] user/mastodon: upgrade to 4.2.7 --- user/mastodon/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index e2a4d4e..c98dfe5 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -3,7 +3,7 @@ pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.5 +pkgver=4.2.7 _gittag=v$pkgver pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" @@ -193,7 +193,7 @@ assets() { } sha512sums=" -c594178010c296b581531d6e35887214441d6f1f44083578dbb38a3beeb64d968a171cba0a9335e8f8b27b45e957508ab3168ec0056b423bf8fb44abd0f5f6d5 mastodon-v4.2.5.tar.gz +fcbd23e6fed4cb4cfda9b05824fd6bdd488440248fa476db2d1561f678d4646fbcef24f2031e969dc87da6a25732d44847ffa3eec5fc3ec890c458c5ae9e06e1 mastodon-v4.2.7.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From 3e4b39966f56f5627df5a1a7299e35ab9bb55aa2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 15:16:34 -0500 Subject: [PATCH 163/738] user/freescout: upgrade to 1.8.120 --- user/freescout/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 68f7274..4992904 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.119 +pkgver=1.8.120 pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" @@ -74,7 +74,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -51fe86a99bbff4f1bd4b7f8b71693b9d27a9a5f3d991ebe36e794a9bffaf286c6100cbc795f4701a60093276db0b38a7d91f91f682c4c50d758d0c61c6272e10 freescout-1.8.119.tar.gz +781b2b0810f148b590af0a73ed0b58d03458e3f2ef68af4c53b36fc70841ff011de80c73148eedb57c94f247f887757500630f5e4bb41dfba79780a5eabfca21 freescout-1.8.120.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh " From de465d44b66aa0705e52cf89b1b8e802e1520cf8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 15:34:03 -0500 Subject: [PATCH 164/738] user/freescout: add missing upgrade step --- user/freescout/APKBUILD | 2 +- user/freescout/freescout.post-install | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 4992904..c0e62dd 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freescout pkgver=1.8.120 -pkgrel=0 +pkgrel=1 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install index 3475bcb..f83e800 100755 --- a/user/freescout/freescout.post-install +++ b/user/freescout/freescout.post-install @@ -17,6 +17,7 @@ if [ "${0##*.}" = 'post-upgrade' ]; then * To finish Freescout upgrade run: * * freescout-manage migrate + * freescout-manage cache:config * EOF else From f5236f6a9ab0dbe43de8ba0e903a60ad31404f14 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 20:20:25 -0500 Subject: [PATCH 165/738] user/freescout: refer to client as member --- user/freescout/APKBUILD | 4 +- .../rename-client-to-membre-fr-en.patch | 250 ++++++++++++++++++ 2 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 user/freescout/rename-client-to-membre-fr-en.patch diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index c0e62dd..fe33fd6 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freescout pkgver=1.8.120 -pkgrel=1 +pkgrel=2 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" @@ -16,6 +16,7 @@ source=" $pkgname-$pkgver.tar.gz::https://github.com/freescout-helpdesk/freescout/archive/refs/tags/$pkgver.tar.gz freescout.nginx freescout-manage.sh + rename-client-to-membre-fr-en.patch " pkgusers="freescout" pkggroups="freescout" @@ -77,4 +78,5 @@ sha512sums=" 781b2b0810f148b590af0a73ed0b58d03458e3f2ef68af4c53b36fc70841ff011de80c73148eedb57c94f247f887757500630f5e4bb41dfba79780a5eabfca21 freescout-1.8.120.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh +8d495683341e724c8cf32d1bb0e1b631fc88fb1155f9a0602f5e9ce9a1e215b5829197d69ac467d5bb0570d90ff384045aabc117353873046d73dee2c1b943a1 rename-client-to-membre-fr-en.patch " diff --git a/user/freescout/rename-client-to-membre-fr-en.patch b/user/freescout/rename-client-to-membre-fr-en.patch new file mode 100644 index 0000000..720e066 --- /dev/null +++ b/user/freescout/rename-client-to-membre-fr-en.patch @@ -0,0 +1,250 @@ +diff --git a/resources/lang/en.json b/resources/lang/en.json +new file mode 100644 +index 00000000..82d26052 +--- /dev/null ++++ b/resources/lang/en.json +@@ -0,0 +1,32 @@ ++{ ++ ":person changed the customer to :customer": ":person changed the member to :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person changed the member to :customer in conversation #:conversation_number", ++ "Auto reply to customer": "Auto reply to member", ++ "Change Customer": "Change Member", ++ "Change the customer to :customer_email?": "Change the member to :customer_email?", ++ "Create a new customer": "Create a new member", ++ "Customer": "Member", ++ "Customer Name": "Member Name", ++ "Customer Profile": "Member Profile", ++ "Customer changed": "Member changed", ++ "Customer saved successfully.": "Member saved successfully", ++ "Customer viewed :when": "Member viewed :when", ++ "Customers": "Members", ++ "Customers email this address for help (e.g. support@domain.com)": "Members email this address for help (e.g. support@domain.com)", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end has been moved from another member: :a_begin:customer:a_end.", ++ "Email to customer": "Email to member", ++ "Emails to Customers": "Emails to Members", ++ "Error sending email to customer": "Error sending email to member", ++ "Message not sent to customer": "Message not sent to member", ++ "Name that will appear in the From<\/strong> field when a customer views your email.": "Name that will appear in the From<\/strong> field when a member views your email.", ++ "No customers found": "No members found", ++ "No customers found. Would you like to create one?": "No members found. Would you like to create one?", ++ "Notify :person when a customer replies…": "Notify :person when a member replies…", ++ "Notify me when a customer replies…": "Notify me when a member replies…", ++ "Search for a customer by name or email": "Search for a member by name or email", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "Sending emails need to be configured for the mailbox in order to send emails to members and support agents", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "This number is not visible to members. It is only used to track conversations within :app_name", ++ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "This reply will go to the member. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "This text will be added to the beginning of each email reply sent to a member.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "When a member emails this mailbox, application can send an auto reply to the member immediately.Only one auto reply is sent per new conversation." ++} +\ No newline at end of file +diff --git a/resources/lang/fr.json b/resources/lang/fr.json +index 97edb488..6bbbb292 100644 +--- a/resources/lang/fr.json ++++ b/resources/lang/fr.json +@@ -92,9 +92,9 @@ + "Recipient unsubscribed": "Destinataire désabonné", + "Recipient complained": "Le destinataire s'est plaint", + "Unknown": "Inconnue", +- "Email to customer": "Courriel au client", ++ "Email to customer": "Courriel au membre", + "User notification": "Notification utilisateur", +- "Auto reply to customer": "Réponse automatique au client", ++ "Auto reply to customer": "Réponse automatique au membre", + "Password changed notification": "Notification de changement de mot de passe", + "User replied from wrong email address": "L'utilisateur a répondu à partir d'une mauvaise adresse e-mail", + "Test email": "E-mail de test", +@@ -111,7 +111,7 @@ + "Mailbox created successfully": "Boîte aux lettres créée avec succès", + "Mailbox permissions saved!": "Autorisations de boîte aux lettres enregistrées!", + "Connection settings saved!": "Paramètres de connexion enregistrés!", +- "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux clients et aux agents de support", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux membres et aux agents de support", + "Connection Settings": "Paramètres de connexion", + "Sending Emails": "Sending Emails", + "Receiving emails need to be configured for the mailbox in order to fetch emails from your support email address": "La réception d'e-mails doit être configurée pour la boîte aux lettres afin de récupérer les e-mails de votre adresse e-mail d'assistance.", +@@ -188,7 +188,7 @@ + "Deleted draft": "Brouillon supprimé", + "Thread is not in a draft state": "Le fil n'est pas à l'état de brouillon", + "Action not authorized": "Action non autorisée", +- "Customer changed": "Client changé", ++ "Customer changed": "Membre changé", + "Conversation deleted": "Conversation supprimée", + "Conversation restored": "Conversation rétablie", + "Message cannot be empty": "Le message ne peut pas être vide", +@@ -205,15 +205,15 @@ + "Mail Settings": "Paramètres de messagerie", + "Alerts": "Alertes", + "Settings updated": "Paramètres mis à jour", +- "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre client : :a_begin:customer:a_end.", +- "Customer saved successfully.": "Client enregistré avec succès.", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre membre : :a_begin:customer:a_end.", ++ "Customer saved successfully.": "Membre enregistré avec succès.", + "Logged in": "Connecté", + "Logged out": "Déconnecté", + "Registered": "Inscrit", + "Locked out": "Enfermé dehors", + "Failed login": "Échec de la connexion", + "Reset password": "Réinitialiser le mot de passe", +- "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au client", ++ "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au membre", + "Error sending email to user": "Erreur lors de l'envoi d'un e-mail à l'utilisateur", + "Error sending invitation email to user": "Erreur lors de l'envoi d'un e-mail d'invitation à l'utilisateur", + "Error sending password changed notification to user": "Erreur lors de l'envoi de la notification de modification du mot de passe à l'utilisateur", +@@ -245,8 +245,8 @@ + ":person marked as :status_name": ":person a changé le statut en :status_name", + ":person assigned :assignee conversation #:conversation_number": ":person a assigné :assignee à la conversation #:conversation_number", + ":person assigned to :assignee": ":person a assigné :assignee", +- ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le client en :customer dans la conversation #:conversation_number", +- ":person changed the customer to :customer": ":person a changé le client en :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le membre en :customer dans la conversation #:conversation_number", ++ ":person changed the customer to :customer": ":person a changé le membre en :customer", + ":person deleted": ":person supprimée", + ":person restored": ":person a restauré", + ":person moved conversation from another mailbox": ":person a déplacé la conversation depuis autre boîte aux lettres", +@@ -315,15 +315,15 @@ + "Installing": "L'installation", + "Install Module": "Installer le module", + "Get license key": "Obtenir la clé de licence", +- "Customer Profile": "Profil client", ++ "Customer Profile": "Profil membre", + "First Name": "Prénom", + "Last Name": "Nom de Famille", + "Job Title": "Profession", + "(optional)": "(optionnel)", + "Edit Profile": "Modifier le profil", +- "No customers found": "Aucun client trouvé", ++ "No customers found": "Aucun membre trouvé", + "Author": "Auteur", +- "Customer Name": "Nom du client", ++ "Customer Name": "Nom du membre", + "Add Email": "Ajouter un email", + "To": "À", + "Send emails separately to each recipient": "Envoyer des e-mails séparément à chaque destinataire", +@@ -337,14 +337,14 @@ + "Moving": "Déplacement", + "Move": "Déplacer", + "There were no send attempts yet": "Il n'y a pas encore eu de tentatives d'envoi", +- "Emails to Customers": "Emails aux clients", +- "Customer": "Client", ++ "Emails to Customers": "Emails aux membres", ++ "Customer": "Membre", + "Remarks": "Remarques", + "auto reply": "réponse automatique", + "User": "Utilisateur", +- "Search for a customer by name or email": "Rechercher un client par nom ou par e-mail", +- "No customers found. Would you like to create one?": "Aucun client trouvé. Souhaitez-vous en créer un?", +- "Create a new customer": "Créer un nouveau client", ++ "Search for a customer by name or email": "Rechercher un membre par nom ou par e-mail", ++ "No customers found. Would you like to create one?": "Aucun membre trouvé. Souhaitez-vous en créer un?", ++ "Create a new customer": "Créer un nouveau membre", + "Saving": "Enregistrement", + "Preview": "Aperçu", + "Body": "Corps", +@@ -373,7 +373,7 @@ + "ID": "Identifiant", + "After": "Après", + "Before": "Avant", +- "Customers": "Clients", ++ "Customers": "Membres", + "Assigned To": "Assigné à", + "Last Updated": "Dernière mise à jour", + "Waiting Since": "En attente depuis", +@@ -393,7 +393,7 @@ + "Restore": "Restaurer", + "Older": "Ancien", + "Settings": "Réglages", +- "Change Customer": "Changer de client", ++ "Change Customer": "Changer de membre", + "Previous Conversations": "Conversations précédentes", + "View outgoing emails": "Afficher les e-mails sortants", + "are forwarding": "acheminent", +@@ -403,7 +403,7 @@ + "To the First Message": "Vers le premier message", + "This is a bounce message.": "Ceci est un message de rebond.", + "This is a bounce message for :link": "Ceci est un message de rebond pour :lien", +- "Message not sent to customer": "Message non envoyé au client", ++ "Message not sent to customer": "Message non envoyé au membre", + "View log": "Afficher le journal", + "Message bounced (:link)": "Message renvoyé (:link)", + "This is a forwarded conversation.": "Il s'agit d'une conversation transférée.", +@@ -412,7 +412,7 @@ + "Edited by :whom :when": "Édité par :whom :when", + "Show original": "Afficher l'original", + "Hide": "Cacher", +- "Customer viewed :when": "Client vu :when", ++ "Customer viewed :when": "Membre vu :when", + "Start a conversation from this thread": "Démarrer une conversation à partir de ce fil", + "Show original message": "Afficher le message d'origine", + "Original Message": "Message d'origine", +@@ -456,8 +456,8 @@ + "A conversation is assigned to someone else": "Une conversation est assignée à quelqu'un d'autre", + "A conversation :person is following is updated": "Une conversation suivie par :person est mise à jour", + "A conversation I'm following is updated": "Une conversation que je suis est mise à jour", +- "Notify :person when a customer replies…": "Avertir :person lorsqu'un client répond…", +- "Notify me when a customer replies…": "M'avertir lorsqu'un client répond…", ++ "Notify :person when a customer replies…": "Avertir :person lorsqu'un membre répond…", ++ "Notify me when a customer replies…": "M'avertir lorsqu'un membre répond…", + "To an unassigned conversation": "À une conversation non assignée", + "To one of :person's conversations": "À une des conversations de :person", + "To one of my conversations": "À une de mes conversations", +@@ -466,7 +466,7 @@ + "Notify me when another :app_name user replies or adds a note…": "M'avertir lorsqu'un autre utilisateur :app_name répond ou ajoute une note…", + "User Permissions": "Autorisations utilisateur", + "Today": "Aujourd'hui", +- "Customers email this address for help (e.g. support@domain.com)": "Les clients utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", ++ "Customers email this address for help (e.g. support@domain.com)": "Les membres utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", + "Email Address": "Adresse e-mail", + "You can edit this later": "Vous pouvez modifier cela plus tard", + "Mailbox Name": "Nom de la boîte aux lettres", +@@ -493,7 +493,7 @@ + "Person Replying": "Personne qui répond", + "Email Header": "En-tête de l'e-mail", + "Please reply above this line": "Veuillez répondre au-dessus de cette ligne", +- "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un client.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un membre.", + "Email Signature": "Signature e-mail", + "Delete the :mailbox_name mailbox?": "Supprimer la boîte aux lettres :mailbox_name ?", + "Delete mailbox": "Supprimer la boîte aux lettres", +@@ -531,7 +531,7 @@ + "Selected Users have access to this mailbox:": "Les utilisateurs sélectionnés ont accès à cette boîte aux lettres:", + "Administrators have access to all mailboxes and are not listed here.": "Les administrateurs ont accès à toutes les boîtes aux lettres et ne sont pas répertoriés ici.", + "Enable Auto Reply": "Activer la réponse automatique", +- "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un client envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au client. Une seule réponse automatique est envoyée par nouvelle conversation.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un membre envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au membre. Une seule réponse automatique est envoyée par nouvelle conversation.", + "Auto replies don't include your mailbox signature, so be sure to add your contact information if necessary.": "Les réponses automatiques n'incluent pas la signature de votre boîte aux lettres, assurez-vous d'ajouter vos coordonnées si nécessaire.", + "Empty Trash": "Vider la corbeille", + "Dashboard": "Tableau de bord", +@@ -543,7 +543,7 @@ + "Clear Log": "Effacer le journal", + "Log is empty": "Le journal est vide", + "Company Name": "Nom de l'entreprise", +- "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les clients. Il est uniquement utilisé pour suivre les conversations dans :app_name", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les membres. Il est uniquement utilisé pour suivre les conversations dans :app_name", + "Spread the Word": "Faire connaître", + "Add \"Powered by :app_name\" footer text to the outgoing emails to invite more developers to the project and make the application better.": "Ajoutez le texte \"Support propulsé par :app_name\" dans les emails envoyés pour inviter plus de développeurs au projet et améliorer l'application.", + "Open Tracking": "Suivi ouvert", +@@ -632,7 +632,7 @@ + "Full Name": "Nom Complet", + "Profile Photo (URL)": "Photo de profil (URL)", + "From name": "Du nom", +- "Change the customer to :customer_email?": "Changer le client en :customer_email ?", ++ "Change the customer to :customer_email?": "Changer le membre en :customer_email ?", + "Invite email has been sent": "Un e-mail d'invitation a été envoyé", + "Invite email has been resent": "L'email d'invitation a été renvoyé", + "Reset this User's password?": "Réinitialiser le mot de passe de cet utilisateur?", +@@ -694,13 +694,13 @@ + "IMAP Folder To Save Outgoing Replies": "Dossier IMAP pour enregistrer les réponses sortantes", + "Include the last message": "Inclure le dernier message", + "Logout Users": "Déconnecter les utilisateurs", +- "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un client consulte votre e-mail.", ++ "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un membre consulte votre e-mail.", + "Prevent user from logging in": "Refuser la connexion de l'utilisateur", + "Queued and failed jobs are cleaned automatically once in a while. No need to worry or delete them manually.": "Les travaux en file d'attente et ayant échoué sont nettoyés automatiquement de temps en temps. Pas besoin de s'inquiéter ou de les supprimer manuellement.", + "Send full conversation history": "Envoyer l'historique complet de conversation", + "These folders must be writable by web server user (:user).": "Ces dossiers doivent être accessibles en écriture par l'utilisateur du serveur Web (:user).", + "These settings are used to send system emails (alerts to admin and invitation emails to users).": "Ces paramètres sont utilisés pour envoyer des e-mails système (alertes à l'administrateur et e-mails d'invitation aux utilisateurs).", +- "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au client. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", ++ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au membre. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", + "Try to :%a_start%clear cache:%a_end% to force command to start.": "Essayez de :%a_start%vider le cache:%a_end% pour forcer le démarrage de la commande.", + "User invite": "Invitation de l'utilisateur", + "You can adjust alert settings :%a_begin%here:%a_end%": "Vous pouvez ajuster les paramètres d'alerte :%a_begin%ici:%a_end%", From b9529a8d2cdba098bd4203a3fdef1546fc3bed96 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 20:30:07 -0500 Subject: [PATCH 166/738] user/freescout: fix post-upgrade --- user/freescout/APKBUILD | 2 +- user/freescout/freescout.post-install | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index fe33fd6..b7c5f53 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freescout pkgver=1.8.120 -pkgrel=2 +pkgrel=3 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install index f83e800..b2f164c 100755 --- a/user/freescout/freescout.post-install +++ b/user/freescout/freescout.post-install @@ -17,7 +17,7 @@ if [ "${0##*.}" = 'post-upgrade' ]; then * To finish Freescout upgrade run: * * freescout-manage migrate - * freescout-manage cache:config + * freescout-manage config:cache * EOF else From 1279f4009cefd21be79c71335d42042adc741846 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 20 Feb 2024 12:18:24 -0500 Subject: [PATCH 167/738] user/zotero: upgrade to 7.0.0_beta60 --- user/zotero/APKBUILD | 11 +- .../update-from-packed-simd-2-to-simd1.patch | 1707 +++++++++++++++++ 2 files changed, 1714 insertions(+), 4 deletions(-) create mode 100644 user/zotero/update-from-packed-simd-2-to-simd1.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index a0e35e4..6d73609 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,15 +1,15 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta57 +pkgver=7.0.0_beta60 pkgrel=0 _fxver=102.15.1 +_gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) _releasedate=2024-02-03 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." arch="x86_64" url="https://github.com/zotero/zotero" -_gittag=7.0.0-beta.57 license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" options="!check" # No test suite depends=" @@ -89,6 +89,7 @@ source=" lfs64.patch hunspell-dont-build-unused-function.patch utils-libc-lfs64.patch + update-from-packed-simd-2-to-simd1.patch stab.h @@ -149,10 +150,11 @@ prepare() { _clear_vendor_checksums audio_thread_priority _clear_vendor_checksums target-lexicon-0.9.0 - _clear_vendor_checksums packed_simd_2 _clear_vendor_checksums bindgen _clear_vendor_checksums mp4parse _clear_vendor_checksums getrandom + _clear_vendor_checksums packed_simd + _clear_vendor_checksums encoding_rs # webrtc does not build on these case "$CARCH" in @@ -374,11 +376,12 @@ afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c603 5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch 6aa925477109ed3be8f061fe1ea91caf95c7a7f5cca05c3e31322d08c3c2c044fb12bb1dbea09cd224b22e40e987571e415c6457aa5cab6a0b67f248f11b3df2 hunspell-dont-build-unused-function.patch 2625dcf433abbfa4c6835830b04c7b8cab72fba3a987515a6ba8e4f181332e804d98ccfbcc07e62c673be50db04c80d0f51c415173bb18cf4d18dc1364e165d0 utils-libc-lfs64.patch +9de4804848ada9b9af45426699c98370e3fadf99bcb1c3c0b31c97661c9d107449048186abf454c1903bb042c5507243de9707253c1ea8e0b9fc69841c2b5a57 update-from-packed-simd-2-to-simd1.patch 0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d100fa33d61a9a1a13477687d5eac99e50ae7dbef9882a5808 firefox.desktop 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -55d3a4e4d3d647e21343689e1c9b105efc05eb3f2edf5017eebe50ecac6c5bd7d8ad5b5fa701abfbe7beec0b064eec88584b6b17cab0a8fc689500ed72a5eb23 zotero-client-7.0.0-beta.57.tar.gz +32263fda93adc17050e253b085cd42949db751e4ec9e9e84add7f934159031042649ca55d2546535f91e9b89d5de7b14eb5d1f10495037164c57bf8349ed9654 zotero-client-7.0.0_beta60.tar.gz 089370d86388b34003179ebf95894fb68069fe7ee1624f88e6c411bbbb4f7bc846287cf593034487967cf2bdf807c761212bdb6356bd604d1d04de35aeb3e646 zotero_build-modifications.diff " diff --git a/user/zotero/update-from-packed-simd-2-to-simd1.patch b/user/zotero/update-from-packed-simd-2-to-simd1.patch new file mode 100644 index 0000000..4b0ea89 --- /dev/null +++ b/user/zotero/update-from-packed-simd-2-to-simd1.patch @@ -0,0 +1,1707 @@ +diff --git a/.cargo/config.in b/.cargo/config.in +index 2e5bad6fed..f265f49511 100644 +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -70,7 +70,7 @@ rev = "746743227485a83123784df0c53227ab466612ed" + [source."https://github.com/hsivonen/packed_simd"] + git = "https://github.com/hsivonen/packed_simd" + replace-with = "vendored-sources" +-rev = "f38664024b29d44c506431eada7c112629bb1aa9" ++rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" + + [source."https://github.com/hsivonen/chardetng_c"] + git = "https://github.com/hsivonen/chardetng_c" +diff --git a/.gitignore b/.gitignore +index b409ec5837..6140a867bd 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -193,3 +193,6 @@ config/external/icu4x + # Ignore Storybook generated files + browser/components/storybook/node_modules/ + browser/components/storybook/storybook-static/ ++ ++*.org ++*.rej +diff --git a/Cargo.lock b/Cargo.lock +index 9206cf64db..54106f3e9d 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -1456,12 +1456,12 @@ dependencies = [ + + [[package]] + name = "encoding_rs" +-version = "0.8.31" ++version = "0.8.33" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" + dependencies = [ + "cfg-if 1.0.0", +- "packed_simd_2", ++ "packed_simd", + ] + + [[package]] +@@ -3827,12 +3827,13 @@ dependencies = [ + ] + + [[package]] +-name = "packed_simd_2" +-version = "0.3.8" +-source = "git+https://github.com/hsivonen/packed_simd?rev=f38664024b29d44c506431eada7c112629bb1aa9#f38664024b29d44c506431eada7c112629bb1aa9" ++name = "packed_simd" ++version = "0.3.9" ++source = "git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4#e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" + dependencies = [ + "cfg-if 1.0.0", + "rustc_version", ++ "num-traits", + ] + + [[package]] +diff --git a/Cargo.toml b/Cargo.toml +index 45a6bdb688..670c739298 100644 +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -120,7 +120,7 @@ chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f90 + coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } + fog = { path = "toolkit/components/glean/api" } + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="f38664024b29d44c506431eada7c112629bb1aa9" } ++packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" } + midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" } + minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" } + +diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk +index a243ee5f7f..5ea931e8ce 100644 +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -248,7 +248,7 @@ endif + ifndef RUSTC_BOOTSTRAP + RUSTC_BOOTSTRAP := mozglue_static,qcms + ifdef MOZ_RUST_SIMD +-RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd_2 ++RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd + endif + export RUSTC_BOOTSTRAP + endif +diff --git a/third_party/rust/encoding_rs/Cargo.toml b/third_party/rust/encoding_rs/Cargo.toml +index 5fafdfa9ae..e9fd6c0af2 100644 +--- a/third_party/rust/encoding_rs/Cargo.toml ++++ b/third_party/rust/encoding_rs/Cargo.toml +@@ -12,7 +12,7 @@ + [package] + edition = "2018" + name = "encoding_rs" +-version = "0.8.31" ++version = "0.8.33" + authors = ["Henri Sivonen "] + description = "A Gecko-oriented implementation of the Encoding Standard" + homepage = "https://docs.rs/encoding_rs/" +@@ -40,9 +40,8 @@ lto = true + version = "1.0" + + [dependencies.packed_simd] +-version = "0.3.4" ++version = "0.3.9" + optional = true +-package = "packed_simd_2" + + [dependencies.serde] + version = "1.0" +diff --git a/third_party/rust/encoding_rs/README.md b/third_party/rust/encoding_rs/README.md +index d75d77d9a1..087308f07e 100644 +--- a/third_party/rust/encoding_rs/README.md ++++ b/third_party/rust/encoding_rs/README.md +@@ -167,7 +167,7 @@ There are currently these optional cargo features: + + ### `simd-accel` + +-Enables SIMD acceleration using the nightly-dependent `packed_simd_2` crate. ++Enables SIMD acceleration using the nightly-dependent `packed_simd` crate. + + This is an opt-in feature, because enabling this feature _opts out_ of Rust's + guarantees of future compilers compiling old code (aka. "stability story"). +@@ -188,7 +188,7 @@ feature. + _Note!_ If you are compiling for a target that does not have 128-bit SIMD + enabled as part of the target definition and you are enabling 128-bit SIMD + using `-C target_feature`, you need to enable the `core_arch` Cargo feature +-for `packed_simd_2` to compile a crates.io snapshot of `core_arch` instead of ++for `packed_simd` to compile a crates.io snapshot of `core_arch` instead of + using the standard-library copy of `core::arch`, because the `core::arch` + module of the pre-compiled standard library has been compiled with the + assumption that the CPU doesn't have 128-bit SIMD. At present this applies +@@ -450,6 +450,10 @@ To regenerate the generated code: + + ## Release Notes + ++### 0.8.33 ++ ++* Use `packed_simd` instead of `packed_simd_2` again now that updates are back under the `packed_simd` name. Only affects the `simd-accel` optional nightly feature. ++ + ### 0.8.31 + + * Use SPDX with parentheses now that crates.io supports parentheses. +diff --git a/third_party/rust/packed_simd_2/.appveyor.yml b/third_party/rust/packed_simd/.appveyor.yml +similarity index 100% +rename from third_party/rust/packed_simd_2/.appveyor.yml +rename to third_party/rust/packed_simd/.appveyor.yml +diff --git a/third_party/rust/packed_simd_2/.travis.yml b/third_party/rust/packed_simd/.travis.yml +similarity index 100% +rename from third_party/rust/packed_simd_2/.travis.yml +rename to third_party/rust/packed_simd/.travis.yml +diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml +similarity index 76% +rename from third_party/rust/packed_simd_2/Cargo.toml +rename to third_party/rust/packed_simd/Cargo.toml +index 49338742dc..2ec2161851 100644 +--- a/third_party/rust/packed_simd_2/Cargo.toml ++++ b/third_party/rust/packed_simd/Cargo.toml +@@ -1,6 +1,6 @@ + [package] +-name = "packed_simd_2" +-version = "0.3.8" ++name = "packed_simd" ++version = "0.3.9" + description = "Portable Packed SIMD vectors" + documentation = "https://docs.rs/crate/packed_simd/" + homepage = "https://github.com/rust-lang/packed_simd" +@@ -31,8 +38,19 @@ default = [] + into_bits = [] + libcore_neon = [] + ++[package.metadata.docs.rs] ++features = ["into_bits"] ++rustdoc-args = [ ++ "--cfg", ++ "doc_cfg", ++] ++ ++[dependencies.num-traits] ++version = "0.2.14" ++default-features = false ++ + [dev-dependencies] +-paste = "^0.1.3" ++paste = "^1" + arrayvec = { version = "^0.5", default-features = false } + + [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] +@@ -41,5 +59,5 @@ optional = true + + [target.wasm32-unknown-unknown.dev-dependencies] + # Keep in sync with the version on Dockerfile. +-wasm-bindgen = "=0.2.73" +-wasm-bindgen-test = "=0.3.23" ++wasm-bindgen = "=0.2.87" ++wasm-bindgen-test = "=0.3.37" +diff --git a/third_party/rust/packed_simd_2/LICENSE-APACHE b/third_party/rust/packed_simd/LICENSE-APACHE +similarity index 100% +rename from third_party/rust/packed_simd_2/LICENSE-APACHE +rename to third_party/rust/packed_simd/LICENSE-APACHE +diff --git a/third_party/rust/packed_simd_2/LICENSE-MIT b/third_party/rust/packed_simd/LICENSE-MIT +similarity index 100% +rename from third_party/rust/packed_simd_2/LICENSE-MIT +rename to third_party/rust/packed_simd/LICENSE-MIT +diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd/README.md +similarity index 76% +rename from third_party/rust/packed_simd_2/README.md +rename to third_party/rust/packed_simd/README.md +index eb3101c33d..59db13fe4f 100644 +--- a/third_party/rust/packed_simd_2/README.md ++++ b/third_party/rust/packed_simd/README.md +@@ -1,24 +1,11 @@ +-# The Crates.io Version Can No Longer Be Updated! +- +-The original maintainer is out of contact, and the new maintainers (the Portable SIMD Project Group) do not have the appropriate crates.io permissions to issue updates. +- +-We are aware that the version available on crates.io is currently broken, and will not build. +- +-If you need to continue to use the crate, we have published a "next version" under an alternative name. +- +-Adjust your `[dependencies]` section of `Cargo.toml` to be the following: +-```toml +-packed_simd = { version = "0.3.8", package = "packed_simd_2" } +-``` +- + # `Simd<[T; N]>` + + ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366] + +-[![Travis-CI Status]][travis] [![Latest Version]][crates.io] [![docs]][master_docs] ++[![Latest Version]][crates.io] [![docs]][master_docs] + + **WARNING**: this crate only supports the most recent nightly Rust toolchain +-and will be superseded by [stdsimd](https://github.com/rust-lang/stdsimd). ++and will be superseded by [`#![feature(portable_simd)]`](https://github.com/rust-lang/portable-simd). + + ## Documentation + +@@ -84,30 +71,25 @@ whether the test suite passes for a given target. + | `i586-unknown-linux-gnu` | ✓ | ✗ | + | `i686-unknown-linux-gnu` | ✓ | ✗ | + | `x86_64-unknown-linux-gnu` | ✓ | ✓ | +-| `arm-unknown-linux-gnueabi` | ✗ | ✗ | + | `arm-unknown-linux-gnueabihf` | ✓ | ✓ | + | `armv7-unknown-linux-gnueabi` | ✓ | ✓ | + | `aarch64-unknown-linux-gnu` | ✓ | ✓ | +-| `mips-unknown-linux-gnu` | ✓ | ✗ | +-| `mipsel-unknown-linux-musl` | ✓ | ✗ | +-| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ | +-| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ | +-| `powerpc-unknown-linux-gnu` | ✗ | ✗ | +-| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | ++| `powerpc-unknown-linux-gnu` | ✓ | ✗ | ++| `powerpc64-unknown-linux-gnu` | ✓ | ✗ | + | `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | +-| `s390x-unknown-linux-gnu` | ✗ | ✗ | ++| `s390x-unknown-linux-gnu` | ✓ | ✗ | + | `sparc64-unknown-linux-gnu` | ✓ | ✗ | + | `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | + | **MacOSX** | **build** | **run** | + | `x86_64-apple-darwin` | ✓ | ✓ | + | **Android** | **build** | **run** | + | `x86_64-linux-android` | ✓ | ✓ | +-| `arm-linux-androideabi` | ✓ | ✓ | +-| `aarch64-linux-android` | ✓ | ✓ | +-| `thumbv7neon-linux-androideabi` | ✗ | ✗ | ++| `armv7-linux-androideabi` | ✓ | ✗ | ++| `aarch64-linux-android` | ✓ | ✗ | ++| `thumbv7neon-linux-androideabi` | ✓ | ✗ | + | **iOS** | **build** | **run** | +-| `x86_64-apple-ios` | ✓ | ✗ | +-| `aarch64-apple-ios` | ✓ | ✗ | ++| `x86_64-apple-ios` | ✗ | ✗ | ++| `aarch64-apple-ios` | ✗ | ✗ | + + + ## Machine code verification +@@ -146,11 +128,11 @@ dual licensed as above, without any additional terms or conditions. + [Travis-CI Status]: https://travis-ci.com/rust-lang/packed_simd.svg?branch=master + [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd + [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true +-[Latest Version]: https://img.shields.io/crates/v/packed_simd_2.svg +-[crates.io]: https://crates.io/crates/packed_simd_2 +-[docs]: https://docs.rs/packed_simd_2/badge.svg +-[docs.rs]: https://docs.rs/packed_simd_2 +-[master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd_2/ ++[Latest Version]: https://img.shields.io/crates/v/packed_simd.svg ++[crates.io]: https://crates.io/crates/packed_simd ++[docs]: https://docs.rs/packed_simd/badge.svg ++[docs.rs]: https://docs.rs/packed_simd ++[master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/ + [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/ + [rfc2366]: https://github.com/rust-lang/rfcs/pull/2366 + [ISPC]: https://ispc.github.io/ +diff --git a/third_party/rust/packed_simd_2/bors.toml b/third_party/rust/packed_simd/bors.toml +similarity index 100% +rename from third_party/rust/packed_simd_2/bors.toml +rename to third_party/rust/packed_simd/bors.toml +diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd/build.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/build.rs +rename to third_party/rust/packed_simd/build.rs +diff --git a/third_party/rust/packed_simd_2/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/all.sh +rename to third_party/rust/packed_simd/ci/all.sh +diff --git a/third_party/rust/packed_simd/ci/android-install-ndk.sh b/third_party/rust/packed_simd/ci/android-install-ndk.sh +new file mode 100644 +index 0000000000..5370853937 +--- /dev/null ++++ b/third_party/rust/packed_simd/ci/android-install-ndk.sh +@@ -0,0 +1,21 @@ ++#!/usr/bin/env sh ++# Copyright 2016 The Rust Project Developers. See the COPYRIGHT ++# file at the top-level directory of this distribution and at ++# http://rust-lang.org/COPYRIGHT. ++# ++# Licensed under the Apache License, Version 2.0 or the MIT license ++# , at your ++# option. This file may not be copied, modified, or distributed ++# except according to those terms. ++ ++set -ex ++ ++ANDROID_NDK_URL=https://dl.google.com/android/repository ++ANDROID_NDK_ARCHIVE=android-ndk-r25b-linux.zip ++ ++curl -fO "$ANDROID_NDK_URL/$ANDROID_NDK_ARCHIVE" ++unzip -q $ANDROID_NDK_ARCHIVE ++rm $ANDROID_NDK_ARCHIVE ++mv android-ndk-* ndk ++rm -rf android-ndk-* +diff --git a/third_party/rust/packed_simd_2/ci/android-install-sdk.sh b/third_party/rust/packed_simd/ci/android-install-sdk.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/android-install-sdk.sh +rename to third_party/rust/packed_simd/ci/android-install-sdk.sh +diff --git a/third_party/rust/packed_simd_2/ci/android-sysimage.sh b/third_party/rust/packed_simd/ci/android-sysimage.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/android-sysimage.sh +rename to third_party/rust/packed_simd/ci/android-sysimage.sh +diff --git a/third_party/rust/packed_simd_2/ci/benchmark.sh b/third_party/rust/packed_simd/ci/benchmark.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/benchmark.sh +rename to third_party/rust/packed_simd/ci/benchmark.sh +diff --git a/third_party/rust/packed_simd_2/ci/deploy_and_run_on_ios_simulator.rs b/third_party/rust/packed_simd/ci/deploy_and_run_on_ios_simulator.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/deploy_and_run_on_ios_simulator.rs +rename to third_party/rust/packed_simd/ci/deploy_and_run_on_ios_simulator.rs +diff --git a/third_party/rust/packed_simd_2/ci/docker/aarch64-linux-android/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-linux-android/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/aarch64-linux-android/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/aarch64-linux-android/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/arm-linux-androideabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-linux-androideabi/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/arm-linux-androideabi/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/armv7-linux-androideabi/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/i586-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/i686-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/mips-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/mipsel-unknown-linux-musl/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile +diff --git a/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json +similarity index 100% +rename from third_party/rust/packed_simd_2/.cargo-checksum.json +rename to third_party/rust/packed_simd/.cargo-checksum.json +diff --git a/third_party/rust/packed_simd_2/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +similarity index 96% +rename from third_party/rust/packed_simd_2/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +index 80cfee8ab5..15ba58e60c 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/powerpc-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile +@@ -1,4 +1,4 @@ +-FROM ubuntu:18.04 ++FROM ubuntu:22.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ +diff --git a/third_party/rust/packed_simd_2/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +similarity index 96% +rename from third_party/rust/packed_simd_2/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +index 74031a2a3e..21c296dc44 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile +@@ -1,4 +1,4 @@ +-FROM ubuntu:18.04 ++FROM ubuntu:22.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ +diff --git a/third_party/rust/packed_simd_2/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +similarity index 96% +rename from third_party/rust/packed_simd_2/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +index 471a7d9651..8034145fc0 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile +@@ -1,4 +1,4 @@ +-FROM ubuntu:18.04 ++FROM ubuntu:22.04 + + RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc libc6-dev qemu-user ca-certificates \ +diff --git a/third_party/rust/packed_simd_2/ci/docker/s390x-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/s390x-unknown-linux-gnu/Dockerfile +similarity index 90% +rename from third_party/rust/packed_simd_2/ci/docker/s390x-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/s390x-unknown-linux-gnu/Dockerfile +index c645b0bcc2..e785ca370c 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/s390x-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/s390x-unknown-linux-gnu/Dockerfile +@@ -1,4 +1,4 @@ +-FROM ubuntu:18.10 ++FROM ubuntu:22.04 + + RUN apt-get update && \ + apt-get install -y --no-install-recommends \ +@@ -17,4 +17,4 @@ ENV CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_LINKER=s390x-linux-gnu-gcc \ + CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_RUNNER="qemu-s390x -L /usr/s390x-linux-gnu" \ + CC_s390x_unknown_linux_gnu=s390x-linux-gnu-gcc \ + CXX_s390x_unknown_linux_gnu=s390x-linux-gnu-g++ \ +- OBJDUMP=s390x-linux-gnu-objdump +\ No newline at end of file ++ OBJDUMP=s390x-linux-gnu-objdump +diff --git a/third_party/rust/packed_simd_2/ci/docker/sparc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/sparc64-unknown-linux-gnu/Dockerfile +similarity index 92% +rename from third_party/rust/packed_simd_2/ci/docker/sparc64-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/sparc64-unknown-linux-gnu/Dockerfile +index fe12af14da..c35f4d8f31 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/sparc64-unknown-linux-gnu/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/sparc64-unknown-linux-gnu/Dockerfile +@@ -1,4 +1,4 @@ +-FROM debian:stretch ++FROM debian:bookworm + + RUN apt-get update && apt-get install -y --no-install-recommends \ + curl ca-certificates \ +@@ -15,4 +15,4 @@ COPY test-runner-linux / + ENV CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_LINKER=sparc64-linux-gnu-gcc \ + CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_RUNNER="/test-runner-linux sparc64" \ + CC_sparc64_unknown_linux_gnu=sparc64-linux-gnu-gcc \ +- PATH=$PATH:/rust/bin +\ No newline at end of file ++ PATH=$PATH:/rust/bin +diff --git a/third_party/rust/packed_simd_2/ci/docker/thumbv7neon-linux-androideabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-linux-androideabi/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/thumbv7neon-linux-androideabi/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/thumbv7neon-linux-androideabi/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/wasm32-unknown-unknown/Dockerfile b/third_party/rust/packed_simd/ci/docker/wasm32-unknown-unknown/Dockerfile +similarity index 86% +rename from third_party/rust/packed_simd_2/ci/docker/wasm32-unknown-unknown/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/wasm32-unknown-unknown/Dockerfile +index bd97170bc7..51ee13e6c9 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/wasm32-unknown-unknown/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/wasm32-unknown-unknown/Dockerfile +@@ -1,4 +1,4 @@ +-FROM ubuntu:18.04 ++FROM ubuntu:22.04 + + RUN apt-get update -y && apt-get install -y --no-install-recommends \ + ca-certificates \ +@@ -8,7 +8,8 @@ RUN apt-get update -y && apt-get install -y --no-install-recommends \ + git \ + libc6-dev \ + make \ +- python \ ++ ninja-build \ ++ python-is-python3 \ + xz-utils + + # Install `wasm2wat` +@@ -17,10 +18,10 @@ RUN make -C wabt -j$(nproc) + ENV PATH=$PATH:/wabt/bin + + # Install `wasm-bindgen-test-runner` +-RUN curl -L https://github.com/rustwasm/wasm-bindgen/releases/download/0.2.73/wasm-bindgen-0.2.73-x86_64-unknown-linux-musl.tar.gz \ ++RUN curl -L https://github.com/rustwasm/wasm-bindgen/releases/download/0.2.87/wasm-bindgen-0.2.87-x86_64-unknown-linux-musl.tar.gz \ + | tar xzf - + # Keep in sync with the version on Cargo.toml. +-ENV PATH=$PATH:/wasm-bindgen-0.2.73-x86_64-unknown-linux-musl ++ENV PATH=$PATH:/wasm-bindgen-0.2.87-x86_64-unknown-linux-musl + ENV CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner + + # Install `node` +diff --git a/third_party/rust/packed_simd_2/ci/docker/x86_64-linux-android/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-linux-android/Dockerfile +similarity index 62% +rename from third_party/rust/packed_simd_2/ci/docker/x86_64-linux-android/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/x86_64-linux-android/Dockerfile +index d52dd45b12..785936d347 100644 +--- a/third_party/rust/packed_simd_2/ci/docker/x86_64-linux-android/Dockerfile ++++ b/third_party/rust/packed_simd/ci/docker/x86_64-linux-android/Dockerfile +@@ -1,4 +1,4 @@ +-FROM ubuntu:16.04 ++FROM ubuntu:20.04 + + RUN apt-get update && \ + apt-get install -y --no-install-recommends \ +@@ -14,16 +14,18 @@ RUN apt-get update && \ + WORKDIR /android/ + ENV ANDROID_ARCH=x86_64 + COPY android-install-ndk.sh /android/ +-RUN sh /android/android-install-ndk.sh $ANDROID_ARCH ++RUN sh /android/android-install-ndk.sh ++ ++ENV STDARCH_ASSERT_INSTR_LIMIT=30 + + # We do not run x86_64-linux-android tests on an android emulator. + # See ci/android-sysimage.sh for informations about how tests are run. + COPY android-sysimage.sh /android/ + RUN bash /android/android-sysimage.sh x86_64 x86_64-24_r07.zip + +-ENV PATH=$PATH:/rust/bin:/android/ndk-$ANDROID_ARCH/bin \ +- CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-gcc \ +- CC_x86_64_linux_android=x86_64-linux-android-gcc \ +- CXX_x86_64_linux_android=x86_64-linux-android-g++ \ +- OBJDUMP=x86_64-linux-android-objdump \ ++ENV PATH=$PATH:/rust/bin:/android/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin \ ++ CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android21-clang \ ++ CC_x86_64_linux_android=x86_64-linux-android21-clang \ ++ CXX_x86_64_linux_android=x86_64-linux-android21-clang++ \ ++ OBJDUMP=llvm-objdump \ + HOME=/tmp +diff --git a/third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +rename to third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile +diff --git a/third_party/rust/packed_simd_2/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/dox.sh +rename to third_party/rust/packed_simd/ci/dox.sh +diff --git a/third_party/rust/packed_simd_2/ci/linux-s390x.sh b/third_party/rust/packed_simd/ci/linux-s390x.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/linux-s390x.sh +rename to third_party/rust/packed_simd/ci/linux-s390x.sh +diff --git a/third_party/rust/packed_simd_2/ci/linux-sparc64.sh b/third_party/rust/packed_simd/ci/linux-sparc64.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/linux-sparc64.sh +rename to third_party/rust/packed_simd/ci/linux-sparc64.sh +diff --git a/third_party/rust/packed_simd_2/ci/lld-shim.rs b/third_party/rust/packed_simd/ci/lld-shim.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/lld-shim.rs +rename to third_party/rust/packed_simd/ci/lld-shim.rs +diff --git a/third_party/rust/packed_simd_2/ci/max_line_width.sh b/third_party/rust/packed_simd/ci/max_line_width.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/max_line_width.sh +rename to third_party/rust/packed_simd/ci/max_line_width.sh +diff --git a/third_party/rust/packed_simd_2/ci/run-docker.sh b/third_party/rust/packed_simd/ci/run-docker.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/run-docker.sh +rename to third_party/rust/packed_simd/ci/run-docker.sh +diff --git a/third_party/rust/packed_simd_2/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh +similarity index 96% +rename from third_party/rust/packed_simd_2/ci/run.sh +rename to third_party/rust/packed_simd/ci/run.sh +index 428a5d8902..b1b22ebd7c 100755 +--- a/third_party/rust/packed_simd_2/ci/run.sh ++++ b/third_party/rust/packed_simd/ci/run.sh +@@ -95,4 +95,5 @@ if [[ "${NOVERIFY}" != "1" ]]; then + cargo_test --release --manifest-path=target/verify/Cargo.toml + fi + +-. ci/run_examples.sh ++# FIXME: Figure out which examples take too long to run and ignore or adjust those ++#. ci/run_examples.sh +diff --git a/third_party/rust/packed_simd_2/ci/run_examples.sh b/third_party/rust/packed_simd/ci/run_examples.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/run_examples.sh +rename to third_party/rust/packed_simd/ci/run_examples.sh +diff --git a/third_party/rust/packed_simd_2/ci/runtest-android.rs b/third_party/rust/packed_simd/ci/runtest-android.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/runtest-android.rs +rename to third_party/rust/packed_simd/ci/runtest-android.rs +diff --git a/third_party/rust/packed_simd_2/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/setup_benchmarks.sh +rename to third_party/rust/packed_simd/ci/setup_benchmarks.sh +diff --git a/third_party/rust/packed_simd_2/ci/test-runner-linux b/third_party/rust/packed_simd/ci/test-runner-linux +similarity index 100% +rename from third_party/rust/packed_simd_2/ci/test-runner-linux +rename to third_party/rust/packed_simd/ci/test-runner-linux +diff --git a/third_party/rust/packed_simd_2/contributing.md b/third_party/rust/packed_simd/contributing.md +similarity index 100% +rename from third_party/rust/packed_simd_2/contributing.md +rename to third_party/rust/packed_simd/contributing.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/.gitignore b/third_party/rust/packed_simd/perf-guide/.gitignore +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/.gitignore +rename to third_party/rust/packed_simd/perf-guide/.gitignore +diff --git a/third_party/rust/packed_simd_2/perf-guide/book.toml b/third_party/rust/packed_simd/perf-guide/book.toml +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/book.toml +rename to third_party/rust/packed_simd/perf-guide/book.toml +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/SUMMARY.md b/third_party/rust/packed_simd/perf-guide/src/SUMMARY.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/SUMMARY.md +rename to third_party/rust/packed_simd/perf-guide/src/SUMMARY.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/ascii.css b/third_party/rust/packed_simd/perf-guide/src/ascii.css +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/ascii.css +rename to third_party/rust/packed_simd/perf-guide/src/ascii.css +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/bound_checks.md b/third_party/rust/packed_simd/perf-guide/src/bound_checks.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/bound_checks.md +rename to third_party/rust/packed_simd/perf-guide/src/bound_checks.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/approx.md b/third_party/rust/packed_simd/perf-guide/src/float-math/approx.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/approx.md +rename to third_party/rust/packed_simd/perf-guide/src/float-math/approx.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/fma.md b/third_party/rust/packed_simd/perf-guide/src/float-math/fma.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/fma.md +rename to third_party/rust/packed_simd/perf-guide/src/float-math/fma.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/fp.md b/third_party/rust/packed_simd/perf-guide/src/float-math/fp.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/fp.md +rename to third_party/rust/packed_simd/perf-guide/src/float-math/fp.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/svml.md b/third_party/rust/packed_simd/perf-guide/src/float-math/svml.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/svml.md +rename to third_party/rust/packed_simd/perf-guide/src/float-math/svml.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/introduction.md b/third_party/rust/packed_simd/perf-guide/src/introduction.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/introduction.md +rename to third_party/rust/packed_simd/perf-guide/src/introduction.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/prof/linux.md b/third_party/rust/packed_simd/perf-guide/src/prof/linux.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/prof/linux.md +rename to third_party/rust/packed_simd/perf-guide/src/prof/linux.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/prof/mca.md b/third_party/rust/packed_simd/perf-guide/src/prof/mca.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/prof/mca.md +rename to third_party/rust/packed_simd/perf-guide/src/prof/mca.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/prof/profiling.md b/third_party/rust/packed_simd/perf-guide/src/prof/profiling.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/prof/profiling.md +rename to third_party/rust/packed_simd/perf-guide/src/prof/profiling.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/attribute.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/attribute.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/attribute.md +rename to third_party/rust/packed_simd/perf-guide/src/target-feature/attribute.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/features.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/features.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/features.md +rename to third_party/rust/packed_simd/perf-guide/src/target-feature/features.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/inlining.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/inlining.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/inlining.md +rename to third_party/rust/packed_simd/perf-guide/src/target-feature/inlining.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/practice.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/practice.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/practice.md +rename to third_party/rust/packed_simd/perf-guide/src/target-feature/practice.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/runtime.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/runtime.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/runtime.md +rename to third_party/rust/packed_simd/perf-guide/src/target-feature/runtime.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/rustflags.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/rustflags.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/rustflags.md +rename to third_party/rust/packed_simd/perf-guide/src/target-feature/rustflags.md +diff --git a/third_party/rust/packed_simd_2/perf-guide/src/vert-hor-ops.md b/third_party/rust/packed_simd/perf-guide/src/vert-hor-ops.md +similarity index 100% +rename from third_party/rust/packed_simd_2/perf-guide/src/vert-hor-ops.md +rename to third_party/rust/packed_simd/perf-guide/src/vert-hor-ops.md +diff --git a/third_party/rust/packed_simd_2/rustfmt.toml b/third_party/rust/packed_simd/rustfmt.toml +similarity index 100% +rename from third_party/rust/packed_simd_2/rustfmt.toml +rename to third_party/rust/packed_simd/rustfmt.toml +diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd/src/api.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api.rs +rename to third_party/rust/packed_simd/src/api.rs +diff --git a/third_party/rust/packed_simd_2/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs +similarity index 99% +rename from third_party/rust/packed_simd_2/src/api/bit_manip.rs +rename to third_party/rust/packed_simd/src/api/bit_manip.rs +index 6d8865706d..c1e90bb0fb 100644 +--- a/third_party/rust/packed_simd_2/src/api/bit_manip.rs ++++ b/third_party/rust/packed_simd/src/api/bit_manip.rs +@@ -34,7 +34,7 @@ macro_rules! impl_bit_manip { + + test_if! { + $test_tt: +- paste::item_with_macros! { ++ paste::item! { + #[allow(overflowing_literals)] + pub mod [<$id _bit_manip>] { + #![allow(const_item_mutation)] +diff --git a/third_party/rust/packed_simd_2/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs +similarity index 91% +rename from third_party/rust/packed_simd_2/src/api/bitmask.rs +rename to third_party/rust/packed_simd/src/api/bitmask.rs +index a06ff0fab1..8f4868f328 100644 +--- a/third_party/rust/packed_simd_2/src/api/bitmask.rs ++++ b/third_party/rust/packed_simd/src/api/bitmask.rs +@@ -17,13 +17,10 @@ macro_rules! impl_bitmask { + test_if! { + $test_tt: + paste::item! { +- #[cfg(not(any( ++ #[cfg(not( + // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210 +- all(target_arch = "mips", target_endian = "big"), +- all(target_arch = "mips64", target_endian = "big"), +- target_arch = "sparc64", +- target_arch = "s390x", +- )))] ++ target_endian = "big" ++ ))] + pub mod [<$id _bitmask>] { + use super::*; + #[cfg_attr(not(target_arch = "wasm32"), test)] +diff --git a/third_party/rust/packed_simd_2/src/api/cast.rs b/third_party/rust/packed_simd/src/api/cast.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast.rs +rename to third_party/rust/packed_simd/src/api/cast.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/macros.rs b/third_party/rust/packed_simd/src/api/cast/macros.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/macros.rs +rename to third_party/rust/packed_simd/src/api/cast/macros.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/v128.rs +rename to third_party/rust/packed_simd/src/api/cast/v128.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/v16.rs +rename to third_party/rust/packed_simd/src/api/cast/v16.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/v256.rs +rename to third_party/rust/packed_simd/src/api/cast/v256.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/v32.rs +rename to third_party/rust/packed_simd/src/api/cast/v32.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/v512.rs +rename to third_party/rust/packed_simd/src/api/cast/v512.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cast/v64.rs +rename to third_party/rust/packed_simd/src/api/cast/v64.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cmp.rs b/third_party/rust/packed_simd/src/api/cmp.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cmp.rs +rename to third_party/rust/packed_simd/src/api/cmp.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cmp/eq.rs b/third_party/rust/packed_simd/src/api/cmp/eq.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cmp/eq.rs +rename to third_party/rust/packed_simd/src/api/cmp/eq.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cmp/ord.rs b/third_party/rust/packed_simd/src/api/cmp/ord.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cmp/ord.rs +rename to third_party/rust/packed_simd/src/api/cmp/ord.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cmp/partial_eq.rs b/third_party/rust/packed_simd/src/api/cmp/partial_eq.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cmp/partial_eq.rs +rename to third_party/rust/packed_simd/src/api/cmp/partial_eq.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cmp/partial_ord.rs b/third_party/rust/packed_simd/src/api/cmp/partial_ord.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cmp/partial_ord.rs +rename to third_party/rust/packed_simd/src/api/cmp/partial_ord.rs +diff --git a/third_party/rust/packed_simd_2/src/api/cmp/vertical.rs b/third_party/rust/packed_simd/src/api/cmp/vertical.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/cmp/vertical.rs +rename to third_party/rust/packed_simd/src/api/cmp/vertical.rs +diff --git a/third_party/rust/packed_simd_2/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/default.rs +rename to third_party/rust/packed_simd/src/api/default.rs +diff --git a/third_party/rust/packed_simd_2/src/api/fmt.rs b/third_party/rust/packed_simd/src/api/fmt.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/fmt.rs +rename to third_party/rust/packed_simd/src/api/fmt.rs +diff --git a/third_party/rust/packed_simd_2/src/api/fmt/binary.rs b/third_party/rust/packed_simd/src/api/fmt/binary.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/fmt/binary.rs +rename to third_party/rust/packed_simd/src/api/fmt/binary.rs +diff --git a/third_party/rust/packed_simd_2/src/api/fmt/debug.rs b/third_party/rust/packed_simd/src/api/fmt/debug.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/fmt/debug.rs +rename to third_party/rust/packed_simd/src/api/fmt/debug.rs +diff --git a/third_party/rust/packed_simd_2/src/api/fmt/lower_hex.rs b/third_party/rust/packed_simd/src/api/fmt/lower_hex.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/fmt/lower_hex.rs +rename to third_party/rust/packed_simd/src/api/fmt/lower_hex.rs +diff --git a/third_party/rust/packed_simd_2/src/api/fmt/octal.rs b/third_party/rust/packed_simd/src/api/fmt/octal.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/fmt/octal.rs +rename to third_party/rust/packed_simd/src/api/fmt/octal.rs +diff --git a/third_party/rust/packed_simd_2/src/api/fmt/upper_hex.rs b/third_party/rust/packed_simd/src/api/fmt/upper_hex.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/fmt/upper_hex.rs +rename to third_party/rust/packed_simd/src/api/fmt/upper_hex.rs +diff --git a/third_party/rust/packed_simd_2/src/api/from.rs b/third_party/rust/packed_simd/src/api/from.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/from.rs +rename to third_party/rust/packed_simd/src/api/from.rs +diff --git a/third_party/rust/packed_simd_2/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs +similarity index 99% +rename from third_party/rust/packed_simd_2/src/api/from/from_array.rs +rename to third_party/rust/packed_simd/src/api/from/from_array.rs +index b83f938162..5c7801ddaf 100644 +--- a/third_party/rust/packed_simd_2/src/api/from/from_array.rs ++++ b/third_party/rust/packed_simd/src/api/from/from_array.rs +@@ -61,6 +61,7 @@ macro_rules! impl_from_array { + mod [<$id _from>] { + use super::*; + #[test] ++ #[cfg_attr(miri, ignore)] + fn array() { + let vec: $id = Default::default(); + +diff --git a/third_party/rust/packed_simd_2/src/api/from/from_vector.rs b/third_party/rust/packed_simd/src/api/from/from_vector.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/from/from_vector.rs +rename to third_party/rust/packed_simd/src/api/from/from_vector.rs +diff --git a/third_party/rust/packed_simd_2/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/hash.rs +rename to third_party/rust/packed_simd/src/api/hash.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits.rs b/third_party/rust/packed_simd/src/api/into_bits.rs +similarity index 91% +rename from third_party/rust/packed_simd_2/src/api/into_bits.rs +rename to third_party/rust/packed_simd/src/api/into_bits.rs +index 32b6d2ddce..03fbe4bff7 100644 +--- a/third_party/rust/packed_simd_2/src/api/into_bits.rs ++++ b/third_party/rust/packed_simd/src/api/into_bits.rs +@@ -1,12 +1,14 @@ + //! Implementation of `FromBits` and `IntoBits`. + + /// Safe lossless bitwise conversion from `T` to `Self`. ++#[cfg_attr(doc_cfg, doc(cfg(feature = "into_bits")))] + pub trait FromBits: crate::marker::Sized { + /// Safe lossless bitwise transmute from `T` to `Self`. + fn from_bits(t: T) -> Self; + } + + /// Safe lossless bitwise conversion from `Self` to `T`. ++#[cfg_attr(doc_cfg, doc(cfg(feature = "into_bits")))] + pub trait IntoBits: crate::marker::Sized { + /// Safe lossless bitwise transmute from `self` to `T`. + fn into_bits(self) -> T; +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/arch_specific.rs +rename to third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/macros.rs b/third_party/rust/packed_simd/src/api/into_bits/macros.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/macros.rs +rename to third_party/rust/packed_simd/src/api/into_bits/macros.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/v128.rs +rename to third_party/rust/packed_simd/src/api/into_bits/v128.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/v16.rs +rename to third_party/rust/packed_simd/src/api/into_bits/v16.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/v256.rs +rename to third_party/rust/packed_simd/src/api/into_bits/v256.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/v32.rs +rename to third_party/rust/packed_simd/src/api/into_bits/v32.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/v512.rs +rename to third_party/rust/packed_simd/src/api/into_bits/v512.rs +diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/into_bits/v64.rs +rename to third_party/rust/packed_simd/src/api/into_bits/v64.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math.rs b/third_party/rust/packed_simd/src/api/math.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math.rs +rename to third_party/rust/packed_simd/src/api/math.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float.rs b/third_party/rust/packed_simd/src/api/math/float.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float.rs +rename to third_party/rust/packed_simd/src/api/math/float.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/abs.rs b/third_party/rust/packed_simd/src/api/math/float/abs.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/abs.rs +rename to third_party/rust/packed_simd/src/api/math/float/abs.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/consts.rs b/third_party/rust/packed_simd/src/api/math/float/consts.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/consts.rs +rename to third_party/rust/packed_simd/src/api/math/float/consts.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/cos.rs b/third_party/rust/packed_simd/src/api/math/float/cos.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/cos.rs +rename to third_party/rust/packed_simd/src/api/math/float/cos.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/exp.rs b/third_party/rust/packed_simd/src/api/math/float/exp.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/exp.rs +rename to third_party/rust/packed_simd/src/api/math/float/exp.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/ln.rs b/third_party/rust/packed_simd/src/api/math/float/ln.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/ln.rs +rename to third_party/rust/packed_simd/src/api/math/float/ln.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/mul_add.rs b/third_party/rust/packed_simd/src/api/math/float/mul_add.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/mul_add.rs +rename to third_party/rust/packed_simd/src/api/math/float/mul_add.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/mul_adde.rs b/third_party/rust/packed_simd/src/api/math/float/mul_adde.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/mul_adde.rs +rename to third_party/rust/packed_simd/src/api/math/float/mul_adde.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/powf.rs b/third_party/rust/packed_simd/src/api/math/float/powf.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/powf.rs +rename to third_party/rust/packed_simd/src/api/math/float/powf.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/recpre.rs b/third_party/rust/packed_simd/src/api/math/float/recpre.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/recpre.rs +rename to third_party/rust/packed_simd/src/api/math/float/recpre.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/rsqrte.rs b/third_party/rust/packed_simd/src/api/math/float/rsqrte.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/rsqrte.rs +rename to third_party/rust/packed_simd/src/api/math/float/rsqrte.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/sin.rs b/third_party/rust/packed_simd/src/api/math/float/sin.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/sin.rs +rename to third_party/rust/packed_simd/src/api/math/float/sin.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/sqrt.rs b/third_party/rust/packed_simd/src/api/math/float/sqrt.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/sqrt.rs +rename to third_party/rust/packed_simd/src/api/math/float/sqrt.rs +diff --git a/third_party/rust/packed_simd_2/src/api/math/float/sqrte.rs b/third_party/rust/packed_simd/src/api/math/float/sqrte.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/math/float/sqrte.rs +rename to third_party/rust/packed_simd/src/api/math/float/sqrte.rs +diff --git a/third_party/rust/packed_simd_2/src/api/minimal.rs b/third_party/rust/packed_simd/src/api/minimal.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/minimal.rs +rename to third_party/rust/packed_simd/src/api/minimal.rs +diff --git a/third_party/rust/packed_simd_2/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/minimal/iuf.rs +rename to third_party/rust/packed_simd/src/api/minimal/iuf.rs +diff --git a/third_party/rust/packed_simd_2/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/minimal/mask.rs +rename to third_party/rust/packed_simd/src/api/minimal/mask.rs +diff --git a/third_party/rust/packed_simd_2/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +similarity index 99% +rename from third_party/rust/packed_simd_2/src/api/minimal/ptr.rs +rename to third_party/rust/packed_simd/src/api/minimal/ptr.rs +index c3d61fbf6d..d9e47c9ccb 100644 +--- a/third_party/rust/packed_simd_2/src/api/minimal/ptr.rs ++++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs +@@ -583,7 +583,7 @@ macro_rules! impl_minimal_p { + pub fn from_slice_aligned(slice: &[$elem_ty]) -> Self { + unsafe { + assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked(0) as *const $elem_ty; ++ let target_ptr = slice.as_ptr(); + assert!( + target_ptr.align_offset(crate::mem::align_of::()) + == 0 +@@ -615,7 +615,7 @@ macro_rules! impl_minimal_p { + pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) + -> Self { + #[allow(clippy::cast_ptr_alignment)] +- *(slice.get_unchecked(0) as *const $elem_ty as *const Self) ++ *(slice.as_ptr().cast()) + } + + /// Instantiates a new vector with the values of the `slice`. +@@ -628,8 +628,7 @@ macro_rules! impl_minimal_p { + slice: &[$elem_ty], + ) -> Self { + use crate::mem::size_of; +- let target_ptr = +- slice.get_unchecked(0) as *const $elem_ty as *const u8; ++ let target_ptr = slice.as_ptr().cast(); + let mut x = Self::splat(crate::ptr::null_mut() as $elem_ty); + let self_ptr = &mut x as *mut Self as *mut u8; + crate::ptr::copy_nonoverlapping( +@@ -798,8 +797,7 @@ macro_rules! impl_minimal_p { + pub fn write_to_slice_aligned(self, slice: &mut [$elem_ty]) { + unsafe { + assert!(slice.len() >= $elem_count); +- let target_ptr = +- slice.get_unchecked_mut(0) as *mut $elem_ty; ++ let target_ptr = slice.as_mut_ptr(); + assert!( + target_ptr.align_offset(crate::mem::align_of::()) + == 0 +@@ -833,8 +831,7 @@ macro_rules! impl_minimal_p { + self, slice: &mut [$elem_ty], + ) { + #[allow(clippy::cast_ptr_alignment)] +- *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) = +- self; ++ *(slice.as_mut_ptr().cast()) = self; + } + + /// Writes the values of the vector to the `slice`. +@@ -846,8 +843,7 @@ macro_rules! impl_minimal_p { + pub unsafe fn write_to_slice_unaligned_unchecked( + self, slice: &mut [$elem_ty], + ) { +- let target_ptr = +- slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; ++ let target_ptr = slice.as_mut_ptr().cast(); + let self_ptr = &self as *const Self as *const u8; + crate::ptr::copy_nonoverlapping( + self_ptr, +diff --git a/third_party/rust/packed_simd_2/src/api/ops.rs b/third_party/rust/packed_simd/src/api/ops.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops.rs +rename to third_party/rust/packed_simd/src/api/ops.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_arithmetic.rs b/third_party/rust/packed_simd/src/api/ops/scalar_arithmetic.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/scalar_arithmetic.rs +rename to third_party/rust/packed_simd/src/api/ops/scalar_arithmetic.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/scalar_bitwise.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/scalar_bitwise.rs +rename to third_party/rust/packed_simd/src/api/ops/scalar_bitwise.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_mask_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/scalar_mask_bitwise.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/scalar_mask_bitwise.rs +rename to third_party/rust/packed_simd/src/api/ops/scalar_mask_bitwise.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_shifts.rs b/third_party/rust/packed_simd/src/api/ops/scalar_shifts.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/scalar_shifts.rs +rename to third_party/rust/packed_simd/src/api/ops/scalar_shifts.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_arithmetic.rs b/third_party/rust/packed_simd/src/api/ops/vector_arithmetic.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_arithmetic.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_arithmetic.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/vector_bitwise.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_bitwise.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_bitwise.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_float_min_max.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_int_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_int_min_max.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_int_min_max.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_int_min_max.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_mask_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/vector_mask_bitwise.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_mask_bitwise.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_mask_bitwise.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_neg.rs b/third_party/rust/packed_simd/src/api/ops/vector_neg.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_neg.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_neg.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_rotates.rs b/third_party/rust/packed_simd/src/api/ops/vector_rotates.rs +similarity index 97% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_rotates.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_rotates.rs +index 147fc2e37d..6c4bed72a2 100644 +--- a/third_party/rust/packed_simd_2/src/api/ops/vector_rotates.rs ++++ b/third_party/rust/packed_simd/src/api/ops/vector_rotates.rs +@@ -23,8 +23,8 @@ macro_rules! impl_ops_vector_rotates { + /// amount in the corresponding lane of `n`, wrapping the + /// truncated bits to the beginning of the resulting integer. + /// +- /// Note: this is neither the same operation as `<<` nor equivalent +- /// to `slice::rotate_left`. ++ /// Note: this is neither the same operation as `>>` nor equivalent ++ /// to `slice::rotate_right`. + #[inline] + pub fn rotate_right(self, n: $id) -> $id { + const LANE_WIDTH: $elem_ty = +diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_shifts.rs b/third_party/rust/packed_simd/src/api/ops/vector_shifts.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ops/vector_shifts.rs +rename to third_party/rust/packed_simd/src/api/ops/vector_shifts.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ptr.rs b/third_party/rust/packed_simd/src/api/ptr.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ptr.rs +rename to third_party/rust/packed_simd/src/api/ptr.rs +diff --git a/third_party/rust/packed_simd_2/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/ptr/gather_scatter.rs +rename to third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs +diff --git a/third_party/rust/packed_simd_2/src/api/reductions.rs b/third_party/rust/packed_simd/src/api/reductions.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/reductions.rs +rename to third_party/rust/packed_simd/src/api/reductions.rs +diff --git a/third_party/rust/packed_simd_2/src/api/reductions/bitwise.rs b/third_party/rust/packed_simd/src/api/reductions/bitwise.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/reductions/bitwise.rs +rename to third_party/rust/packed_simd/src/api/reductions/bitwise.rs +diff --git a/third_party/rust/packed_simd_2/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/reductions/float_arithmetic.rs +rename to third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs +diff --git a/third_party/rust/packed_simd_2/src/api/reductions/integer_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/integer_arithmetic.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/reductions/integer_arithmetic.rs +rename to third_party/rust/packed_simd/src/api/reductions/integer_arithmetic.rs +diff --git a/third_party/rust/packed_simd_2/src/api/reductions/mask.rs b/third_party/rust/packed_simd/src/api/reductions/mask.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/reductions/mask.rs +rename to third_party/rust/packed_simd/src/api/reductions/mask.rs +diff --git a/third_party/rust/packed_simd_2/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/reductions/min_max.rs +rename to third_party/rust/packed_simd/src/api/reductions/min_max.rs +diff --git a/third_party/rust/packed_simd_2/src/api/select.rs b/third_party/rust/packed_simd/src/api/select.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/select.rs +rename to third_party/rust/packed_simd/src/api/select.rs +diff --git a/third_party/rust/packed_simd_2/src/api/shuffle.rs b/third_party/rust/packed_simd/src/api/shuffle.rs +similarity index 99% +rename from third_party/rust/packed_simd_2/src/api/shuffle.rs +rename to third_party/rust/packed_simd/src/api/shuffle.rs +index fda29ccddc..1c17bd766e 100644 +--- a/third_party/rust/packed_simd_2/src/api/shuffle.rs ++++ b/third_party/rust/packed_simd/src/api/shuffle.rs +@@ -27,7 +27,7 @@ + /// Shuffling elements of two vectors: + /// + /// ``` +-/// # use packed_simd_2::*; ++/// # use packed_simd::*; + /// # fn main() { + /// // Shuffle allows reordering the elements: + /// let x = i32x4::new(1, 2, 3, 4); +@@ -49,7 +49,7 @@ + /// Shuffling elements of one vector: + /// + /// ``` +-/// # use packed_simd_2::*; ++/// # use packed_simd::*; + /// # fn main() { + /// // Shuffle allows reordering the elements of a vector: + /// let x = i32x4::new(1, 2, 3, 4); +diff --git a/third_party/rust/packed_simd_2/src/api/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/api/shuffle1_dyn.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/shuffle1_dyn.rs +rename to third_party/rust/packed_simd/src/api/shuffle1_dyn.rs +diff --git a/third_party/rust/packed_simd_2/src/api/slice.rs b/third_party/rust/packed_simd/src/api/slice.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/api/slice.rs +rename to third_party/rust/packed_simd/src/api/slice.rs +diff --git a/third_party/rust/packed_simd_2/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +similarity index 97% +rename from third_party/rust/packed_simd_2/src/api/slice/from_slice.rs +rename to third_party/rust/packed_simd/src/api/slice/from_slice.rs +index 50f3914f7b..cafd6f8213 100644 +--- a/third_party/rust/packed_simd_2/src/api/slice/from_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs +@@ -13,7 +13,7 @@ macro_rules! impl_slice_from_slice { + pub fn from_slice_aligned(slice: &[$elem_ty]) -> Self { + unsafe { + assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked(0) as *const $elem_ty; ++ let target_ptr = slice.as_ptr(); + assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); + Self::from_slice_aligned_unchecked(slice) + } +@@ -41,7 +41,7 @@ macro_rules! impl_slice_from_slice { + #[inline] + pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) -> Self { + debug_assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked(0) as *const $elem_ty; ++ let target_ptr = slice.as_ptr(); + debug_assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); + + #[allow(clippy::cast_ptr_alignment)] +@@ -57,7 +57,7 @@ macro_rules! impl_slice_from_slice { + pub unsafe fn from_slice_unaligned_unchecked(slice: &[$elem_ty]) -> Self { + use crate::mem::size_of; + debug_assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked(0) as *const $elem_ty as *const u8; ++ let target_ptr = slice.as_ptr().cast(); + let mut x = Self::splat(0 as $elem_ty); + let self_ptr = &mut x as *mut Self as *mut u8; + crate::ptr::copy_nonoverlapping(target_ptr, self_ptr, size_of::()); +diff --git a/third_party/rust/packed_simd_2/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +similarity index 97% +rename from third_party/rust/packed_simd_2/src/api/slice/write_to_slice.rs +rename to third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +index dd04a2634d..5abd4916e0 100644 +--- a/third_party/rust/packed_simd_2/src/api/slice/write_to_slice.rs ++++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs +@@ -13,7 +13,7 @@ macro_rules! impl_slice_write_to_slice { + pub fn write_to_slice_aligned(self, slice: &mut [$elem_ty]) { + unsafe { + assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked_mut(0) as *mut $elem_ty; ++ let target_ptr = slice.as_mut_ptr(); + assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); + self.write_to_slice_aligned_unchecked(slice); + } +@@ -42,7 +42,7 @@ macro_rules! impl_slice_write_to_slice { + #[inline] + pub unsafe fn write_to_slice_aligned_unchecked(self, slice: &mut [$elem_ty]) { + debug_assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked_mut(0) as *mut $elem_ty; ++ let target_ptr = slice.as_mut_ptr(); + debug_assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); + + #[allow(clippy::cast_ptr_alignment)] +@@ -60,7 +60,7 @@ macro_rules! impl_slice_write_to_slice { + #[inline] + pub unsafe fn write_to_slice_unaligned_unchecked(self, slice: &mut [$elem_ty]) { + debug_assert!(slice.len() >= $elem_count); +- let target_ptr = slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; ++ let target_ptr = slice.as_mut_ptr().cast(); + let self_ptr = &self as *const Self as *const u8; + crate::ptr::copy_nonoverlapping(self_ptr, target_ptr, crate::mem::size_of::()); + } +diff --git a/third_party/rust/packed_simd_2/src/api/swap_bytes.rs b/third_party/rust/packed_simd/src/api/swap_bytes.rs +similarity index 99% +rename from third_party/rust/packed_simd_2/src/api/swap_bytes.rs +rename to third_party/rust/packed_simd/src/api/swap_bytes.rs +index 53bba25bd3..4649ed679b 100644 +--- a/third_party/rust/packed_simd_2/src/api/swap_bytes.rs ++++ b/third_party/rust/packed_simd/src/api/swap_bytes.rs +@@ -76,7 +76,7 @@ macro_rules! impl_swap_bytes { + + test_if! { + $test_tt: +- paste::item_with_macros! { ++ paste::item! { + pub mod [<$id _swap_bytes>] { + use super::*; + +diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen.rs +rename to third_party/rust/packed_simd/src/codegen.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/bit_manip.rs +rename to third_party/rust/packed_simd/src/codegen/bit_manip.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs +similarity index 85% +rename from third_party/rust/packed_simd_2/src/codegen/llvm.rs +rename to third_party/rust/packed_simd/src/codegen/llvm.rs +index b4c09849bc..bb482fac66 100644 +--- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs ++++ b/third_party/rust/packed_simd/src/codegen/llvm.rs +@@ -5,14 +5,8 @@ use crate::sealed::Shuffle; + #[allow(unused_imports)] // FIXME: spurious warning? + use crate::sealed::Simd; + +-// Shuffle intrinsics: expanded in users' crates, therefore public. + extern "platform-intrinsic" { +- pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U; +- pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U; +- pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U; +- pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U; +- pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U; +- pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U; ++ fn simd_shuffle(x: T, y: T, idx: I) -> U; + } + + #[allow(clippy::missing_safety_doc)] +@@ -22,7 +16,7 @@ where + T: Simd, + ::Element: Shuffle<[u32; 2], Output = U>, + { +- simd_shuffle2(x, y, IDX) ++ simd_shuffle(x, y, IDX) + } + + #[allow(clippy::missing_safety_doc)] +@@ -32,7 +26,7 @@ where + T: Simd, + ::Element: Shuffle<[u32; 4], Output = U>, + { +- simd_shuffle4(x, y, IDX) ++ simd_shuffle(x, y, IDX) + } + + #[allow(clippy::missing_safety_doc)] +@@ -42,7 +36,7 @@ where + T: Simd, + ::Element: Shuffle<[u32; 8], Output = U>, + { +- simd_shuffle8(x, y, IDX) ++ simd_shuffle(x, y, IDX) + } + + #[allow(clippy::missing_safety_doc)] +@@ -52,7 +46,7 @@ where + T: Simd, + ::Element: Shuffle<[u32; 16], Output = U>, + { +- simd_shuffle16(x, y, IDX) ++ simd_shuffle(x, y, IDX) + } + + #[allow(clippy::missing_safety_doc)] +@@ -62,7 +56,7 @@ where + T: Simd, + ::Element: Shuffle<[u32; 32], Output = U>, + { +- simd_shuffle32(x, y, IDX) ++ simd_shuffle(x, y, IDX) + } + + #[allow(clippy::missing_safety_doc)] +@@ -72,7 +66,7 @@ where + T: Simd, + ::Element: Shuffle<[u32; 64], Output = U>, + { +- simd_shuffle64(x, y, IDX) ++ simd_shuffle(x, y, IDX) + } + + extern "platform-intrinsic" { +diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd/src/codegen/math.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math.rs +rename to third_party/rust/packed_simd/src/codegen/math.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd/src/codegen/math/float.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float.rs +rename to third_party/rust/packed_simd/src/codegen/math/float.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd/src/codegen/math/float/abs.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/abs.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd/src/codegen/math/float/cos.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/cos.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd/src/codegen/math/float/cos_pi.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/cos_pi.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd/src/codegen/math/float/exp.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/exp.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd/src/codegen/math/float/ln.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/ln.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/macros.rs b/third_party/rust/packed_simd/src/codegen/math/float/macros.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/macros.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/macros.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd/src/codegen/math/float/mul_add.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/mul_add.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd/src/codegen/math/float/mul_adde.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/mul_adde.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd/src/codegen/math/float/powf.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/powf.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd/src/codegen/math/float/sin.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/sin.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd/src/codegen/math/float/sin_cos_pi.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/sin_cos_pi.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd/src/codegen/math/float/sin_pi.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/sin_pi.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd/src/codegen/math/float/sqrt.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/sqrt.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd/src/codegen/math/float/sqrte.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs +rename to third_party/rust/packed_simd/src/codegen/math/float/sqrte.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd/src/codegen/pointer_sized_int.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs +rename to third_party/rust/packed_simd/src/codegen/pointer_sized_int.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd/src/codegen/reductions.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions.rs +rename to third_party/rust/packed_simd/src/codegen/reductions.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/aarch64.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/aarch64.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/aarch64.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/aarch64.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/arm.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/arm.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/arm.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/arm.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/fallback.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/fallback.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback_impl.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/fallback_impl.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback_impl.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/fallback_impl.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx2.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx2.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx2.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx2.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse2.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse2.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse2.rs +rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse2.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/shuffle.rs +rename to third_party/rust/packed_simd/src/codegen/shuffle.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/shuffle1_dyn.rs +rename to third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd/src/codegen/swap_bytes.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs +rename to third_party/rust/packed_simd/src/codegen/swap_bytes.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/v128.rs b/third_party/rust/packed_simd/src/codegen/v128.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/v128.rs +rename to third_party/rust/packed_simd/src/codegen/v128.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/v16.rs b/third_party/rust/packed_simd/src/codegen/v16.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/v16.rs +rename to third_party/rust/packed_simd/src/codegen/v16.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/v256.rs b/third_party/rust/packed_simd/src/codegen/v256.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/v256.rs +rename to third_party/rust/packed_simd/src/codegen/v256.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/v32.rs b/third_party/rust/packed_simd/src/codegen/v32.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/v32.rs +rename to third_party/rust/packed_simd/src/codegen/v32.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/v512.rs b/third_party/rust/packed_simd/src/codegen/v512.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/v512.rs +rename to third_party/rust/packed_simd/src/codegen/v512.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/v64.rs b/third_party/rust/packed_simd/src/codegen/v64.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/v64.rs +rename to third_party/rust/packed_simd/src/codegen/v64.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/vPtr.rs +rename to third_party/rust/packed_simd/src/codegen/vPtr.rs +diff --git a/third_party/rust/packed_simd_2/src/codegen/vSize.rs b/third_party/rust/packed_simd/src/codegen/vSize.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/codegen/vSize.rs +rename to third_party/rust/packed_simd/src/codegen/vSize.rs +diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs +similarity index 98% +rename from third_party/rust/packed_simd_2/src/lib.rs +rename to third_party/rust/packed_simd/src/lib.rs +index cd8a86805d..fdc64f1e46 100644 +--- a/third_party/rust/packed_simd_2/src/lib.rs ++++ b/third_party/rust/packed_simd/src/lib.rs +@@ -26,7 +26,7 @@ + //! are applied to each vector lane in isolation of the others: + //! + //! ``` +-//! # use packed_simd_2::*; ++//! # use packed_simd::*; + //! let a = i32x4::new(1, 2, 3, 4); + //! let b = i32x4::new(5, 6, 7, 8); + //! assert_eq!(a + b, i32x4::new(6, 8, 10, 12)); +@@ -35,7 +35,7 @@ + //! Many "horizontal" operations are also provided: + //! + //! ``` +-//! # use packed_simd_2::*; ++//! # use packed_simd::*; + //! # let a = i32x4::new(1, 2, 3, 4); + //! assert_eq!(a.wrapping_sum(), 10); + //! ``` +@@ -47,7 +47,7 @@ + //! and performing a single horizontal operation at the end: + //! + //! ``` +-//! # use packed_simd_2::*; ++//! # use packed_simd::*; + //! fn reduce(x: &[i32]) -> i32 { + //! assert_eq!(x.len() % 4, 0); + //! let mut sum = i32x4::splat(0); // [0, 0, 0, 0] +@@ -79,7 +79,7 @@ + //! ## Basic operations + //! + //! ``` +-//! # use packed_simd_2::*; ++//! # use packed_simd::*; + //! // Sets all elements to `0`: + //! let a = i32x4::splat(0); + //! +@@ -107,7 +107,7 @@ + //! to be performed: + //! + //! ``` +-//! # use packed_simd_2::*; ++//! # use packed_simd::*; + //! let a = i32x4::new(1, 1, 2, 2); + //! + //! // Add `1` to the first two lanes of the vector. +@@ -140,7 +140,7 @@ + //! All vertical comparison operations returns masks: + //! + //! ``` +-//! # use packed_simd_2::*; ++//! # use packed_simd::*; + //! let a = i32x4::new(1, 1, 3, 3); + //! let b = i32x4::new(2, 2, 0, 0); + //! +@@ -242,6 +242,7 @@ + clippy::from_over_into, + )] + #![cfg_attr(test, feature(hashmap_internals))] ++#![cfg_attr(doc_cfg, feature(doc_cfg))] + #![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] + #![no_std] + +@@ -280,7 +281,7 @@ pub use crate::sealed::{Mask, Shuffle, Simd as SimdVector, SimdArray}; + /// # Examples + /// + /// ``` +-/// # use packed_simd_2::Simd; ++/// # use packed_simd::Simd; + /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3); + /// assert_eq!(v.extract(2), 2); + /// ``` +diff --git a/third_party/rust/packed_simd_2/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/masks.rs +rename to third_party/rust/packed_simd/src/masks.rs +diff --git a/third_party/rust/packed_simd_2/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/sealed.rs +rename to third_party/rust/packed_simd/src/sealed.rs +diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd/src/testing.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/testing.rs +rename to third_party/rust/packed_simd/src/testing.rs +diff --git a/third_party/rust/packed_simd_2/src/testing/macros.rs b/third_party/rust/packed_simd/src/testing/macros.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/testing/macros.rs +rename to third_party/rust/packed_simd/src/testing/macros.rs +diff --git a/third_party/rust/packed_simd_2/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/testing/utils.rs +rename to third_party/rust/packed_simd/src/testing/utils.rs +diff --git a/third_party/rust/packed_simd_2/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/v128.rs +rename to third_party/rust/packed_simd/src/v128.rs +diff --git a/third_party/rust/packed_simd_2/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/v16.rs +rename to third_party/rust/packed_simd/src/v16.rs +diff --git a/third_party/rust/packed_simd_2/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/v256.rs +rename to third_party/rust/packed_simd/src/v256.rs +diff --git a/third_party/rust/packed_simd_2/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/v32.rs +rename to third_party/rust/packed_simd/src/v32.rs +diff --git a/third_party/rust/packed_simd_2/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/v512.rs +rename to third_party/rust/packed_simd/src/v512.rs +diff --git a/third_party/rust/packed_simd_2/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/v64.rs +rename to third_party/rust/packed_simd/src/v64.rs +diff --git a/third_party/rust/packed_simd_2/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/vPtr.rs +rename to third_party/rust/packed_simd/src/vPtr.rs +diff --git a/third_party/rust/packed_simd_2/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs +similarity index 100% +rename from third_party/rust/packed_simd_2/src/vSize.rs +rename to third_party/rust/packed_simd/src/vSize.rs +diff --git a/third_party/rust/packed_simd_2/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs +similarity index 99% +rename from third_party/rust/packed_simd_2/tests/endianness.rs +rename to third_party/rust/packed_simd/tests/endianness.rs +index da12c2338b..17a7796b1b 100644 +--- a/third_party/rust/packed_simd_2/tests/endianness.rs ++++ b/third_party/rust/packed_simd/tests/endianness.rs +@@ -1,7 +1,7 @@ + #[cfg(target_arch = "wasm32")] + use wasm_bindgen_test::*; + +-use packed_simd_2::*; ++use packed_simd::*; + use std::{mem, slice}; + + #[cfg_attr(not(target_arch = "wasm32"), test)] +diff --git a/third_party/rust/packed_simd_2/ci/android-install-ndk.sh b/third_party/rust/packed_simd_2/ci/android-install-ndk.sh +deleted file mode 100644 +index 818e78446a..0000000000 +--- a/third_party/rust/packed_simd_2/ci/android-install-ndk.sh ++++ /dev/null +@@ -1,37 +0,0 @@ +-#!/usr/bin/env sh +-# Copyright 2016 The Rust Project Developers. See the COPYRIGHT +-# file at the top-level directory of this distribution and at +-# http://rust-lang.org/COPYRIGHT. +-# +-# Licensed under the Apache License, Version 2.0 or the MIT license +-# , at your +-# option. This file may not be copied, modified, or distributed +-# except according to those terms. +- +-set -ex +- +-curl --retry 5 -O https://dl.google.com/android/repository/android-ndk-r15b-linux-x86_64.zip +-unzip -q android-ndk-r15b-linux-x86_64.zip +- +-case "$1" in +- aarch64) +- arch=arm64 +- ;; +- +- i686) +- arch=x86 +- ;; +- +- *) +- arch=$1 +- ;; +-esac; +- +-android-ndk-r15b/build/tools/make_standalone_toolchain.py \ +- --unified-headers \ +- --install-dir "/android/ndk-${1}" \ +- --arch "${arch}" \ +- --api 24 +- +-rm -rf ./android-ndk-r15b-linux-x86_64.zip ./android-ndk-r15b From 28d52cbcc788073ba0c6bcc4eaa719ff78985550 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 23 Feb 2024 01:20:52 -0500 Subject: [PATCH 168/738] user/listmonk: new aport --- user/listmonk/APKBUILD | 71 +++++++++++++++++++++++++++++ user/listmonk/listmonk.openrc | 29 ++++++++++++ user/listmonk/listmonk.post-install | 27 +++++++++++ user/listmonk/listmonk.post-upgrade | 1 + user/listmonk/listmonk.pre-install | 21 +++++++++ user/listmonk/listmonk.sh | 12 +++++ 6 files changed, 161 insertions(+) create mode 100644 user/listmonk/APKBUILD create mode 100644 user/listmonk/listmonk.openrc create mode 100644 user/listmonk/listmonk.post-install create mode 120000 user/listmonk/listmonk.post-upgrade create mode 100644 user/listmonk/listmonk.pre-install create mode 100644 user/listmonk/listmonk.sh diff --git a/user/listmonk/APKBUILD b/user/listmonk/APKBUILD new file mode 100644 index 0000000..00951f0 --- /dev/null +++ b/user/listmonk/APKBUILD @@ -0,0 +1,71 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=listmonk +pkgver=3.0.0 +pkgrel=0 +pkgdesc='Self-hosted newsletter and mailing list manager with a modern dashboard' +arch="all" +url=https://listmonk.app +license="AGPL3" +depends=" + libcap-setcap + postgresql + procps + " +makedepends="go npm nodejs yarn" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/knadh/listmonk/archive/v$pkgver.tar.gz + listmonk.sh + listmonk.openrc + " +install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" +subpackages="$pkgname-openrc" +pkgusers="listmonk" +pkggroups="listmonk" + +build() { + go build \ + -trimpath \ + -buildmode=pie \ + -mod=readonly \ + -modcacherw \ + -ldflags "-extldflags '$LDFLAGS' -X 'main.buildString=Alpine Linux v$pkgver-$pkgrel' -X 'main.versionString=v$pkgver'" \ + -o $pkgname \ + cmd/*.go + + ( + cd frontend + export YARN_CACHE_FOLDER="$srcdir/node_modules" + export VUE_APP_VERSION="v$pkgver" + yarn install --frozen-lockfile + yarn build + ) +} + +check() { + go test ./... +} + +package() { + install -Dm755 "$srcdir"/listmonk.sh "$pkgdir"/usr/bin/listmonk + install -Dm644 config.toml.sample "$pkgdir"/etc/listmonk/config.toml + install -Dm644 -t "$pkgdir"/usr/share/webapps/listmonk/ \ + schema.sql \ + queries.sql \ + config.toml.sample + install -Dm755 listmonk "$pkgdir"/usr/share/webapps/listmonk/ + install -Dm644 -t "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/ \ + frontend/dist/static/favicon.png + cp -a frontend/dist/static "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/static + cp -a frontend/dist/index.html "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/index.html + cp -a static "$pkgdir"/usr/share/webapps/listmonk/ + cp -a i18n "$pkgdir"/usr/share/webapps/listmonk/ + install -Dm755 "$srcdir"/$pkgname.openrc \ + "$pkgdir"/etc/init.d/$pkgname + ln -s /etc/listmonk/config.toml "$pkgdir"/usr/share/webapps/listmonk/config.toml +} +sha512sums=" +afd0ea1d4d2b2753c3043526590cf09c45a541a2d818f5d1581644ffd10818326fd553a3b04bca59494860a7bb6e96364b08afd33d337a9fc5c71bedd1a5ee6c listmonk-3.0.0.tar.gz +939450af4b23708e3d23a5a88fad4c24b957090bdd21351a6dd520959e52e45e5fcac117a3eafa280d9506616dae39ad3943589571f008cac5abe1ffd8062424 listmonk.sh +8e9c0b1f335c295fb741418246eb17c7566e5e4200a284c6483433e8ddbf5250aa692435211cf062ad1dfcdce3fae9148def28f03f2492d33fe5e66cbeebd4bd listmonk.openrc +" diff --git a/user/listmonk/listmonk.openrc b/user/listmonk/listmonk.openrc new file mode 100644 index 0000000..e2ccb5b --- /dev/null +++ b/user/listmonk/listmonk.openrc @@ -0,0 +1,29 @@ +#!/sbin/openrc-run + +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME.conf" +pidfile="/run/$RC_SVCNAME.pid" +working_directory="/usr/share/webapps/listmonk" +command="/usr/share/webapps/listmonk/listmonk" +command_user="listmonk" +command_group="listmonk" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/listmonk/$RC_SVCNAME.log" +error_log="/var/log/listmonk/$RC_SVCNAME.err" + +depend() { + need postgresql +} + +start_pre() { + cd "$working_directory" + checkpath --directory --owner $command_user:$command_group --mode 0775 \ + /var/log/listmonk \ + /var/lib/listmonk +} + +stop_pre() { + ebegin "Killing child processes" + kill $(ps -o pid= --ppid $(cat $pidfile)) || true +} diff --git a/user/listmonk/listmonk.post-install b/user/listmonk/listmonk.post-install new file mode 100644 index 0000000..fe3cc8d --- /dev/null +++ b/user/listmonk/listmonk.post-install @@ -0,0 +1,27 @@ +#!/bin/sh +set -eu + +setcap 'cap_net_bind_service=+ep' /usr/share/webapps/listmonk/listmonk + +if [ "${0##*.}" = 'post-upgrade' ]; then + cat >&2 <<-EOF + * + * To finish Listmonk upgrade run: + * + * listmonk --upgrade + * + EOF +else + cat >&2 <<-EOF + * + * 1. Adjust settings in /etc/listmonk/config.toml. + * + * 2. Create database for Listmonk: + * + * psql -c "CREATE ROLE listmonk PASSWORD 'top-secret' INHERIT LOGIN;" + * psql -c "CREATE DATABASE listmonk OWNER listmonk ENCODING 'UTF-8';" + * + * 3. Run "listmonk --install" + * + EOF +fi diff --git a/user/listmonk/listmonk.post-upgrade b/user/listmonk/listmonk.post-upgrade new file mode 120000 index 0000000..0b729b1 --- /dev/null +++ b/user/listmonk/listmonk.post-upgrade @@ -0,0 +1 @@ +listmonk.post-install \ No newline at end of file diff --git a/user/listmonk/listmonk.pre-install b/user/listmonk/listmonk.pre-install new file mode 100644 index 0000000..71eb3a0 --- /dev/null +++ b/user/listmonk/listmonk.pre-install @@ -0,0 +1,21 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +listmonk_dir='/var/lib/listmonk' + +if ! getent group listmonk 1>/dev/null; then + echo '* Creating group listmonk' 1>&2 + + addgroup -S listmonk +fi + +if ! id listmonk 2>/dev/null 1>&2; then + echo '* Creating user listmonk' 1>&2 + + adduser -DHS -G listmonk -h "$listmonk_dir" -s /bin/sh \ + -g "added by apk for listmonk" listmonk + passwd -u listmonk 1>/dev/null # unlock +fi + + +exit 0 diff --git a/user/listmonk/listmonk.sh b/user/listmonk/listmonk.sh new file mode 100644 index 0000000..d89ca52 --- /dev/null +++ b/user/listmonk/listmonk.sh @@ -0,0 +1,12 @@ + +#!/bin/sh + +BUNDLE_DIR='/usr/share/webapps/listmonk' + +cd $BUNDLE_DIR + +if [ "$(id -un)" != 'listmonk' ]; then + exec su listmonk -c '"$0" "$@"' -- ./listmonk "$@" +else + exec ./listmonk "$@" +fi From 417cf900e1f282bdb00e27c7334e25eb2674a6c3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 23 Feb 2024 09:33:29 -0500 Subject: [PATCH 169/738] user/mastodon: upgrade to 4.2.8 --- user/mastodon/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index c98dfe5..6db4457 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -3,7 +3,7 @@ pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.7 +pkgver=4.2.8 _gittag=v$pkgver pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" @@ -193,7 +193,7 @@ assets() { } sha512sums=" -fcbd23e6fed4cb4cfda9b05824fd6bdd488440248fa476db2d1561f678d4646fbcef24f2031e969dc87da6a25732d44847ffa3eec5fc3ec890c458c5ae9e06e1 mastodon-v4.2.7.tar.gz +c48a04df9c59518f7325b8119bf943436e29ccbfaecff3f7b96162e77fa2012df3f5d4e92e209e233ca7c4646205f5e34bf5f7d22b973115b8e16b3b5ada1fb0 mastodon-v4.2.8.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From adfd7d5461a553a80067a12190accb2e651815ec Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 23 Feb 2024 14:47:08 -0500 Subject: [PATCH 170/738] user/freescout: upgrade to 1.8.122 --- user/freescout/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index b7c5f53..1f273f5 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,8 +1,8 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.120 -pkgrel=3 +pkgver=1.8.122 +pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" @@ -75,7 +75,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -781b2b0810f148b590af0a73ed0b58d03458e3f2ef68af4c53b36fc70841ff011de80c73148eedb57c94f247f887757500630f5e4bb41dfba79780a5eabfca21 freescout-1.8.120.tar.gz +39ccf58b632e96e65ac9a87820086ea470255ef2c7bff4b3605f0ac0bfb344da0971fc0b7d819f5641869ab4161f371cd32a24904c5723a4e3c042902ad2a4fb freescout-1.8.122.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh 8d495683341e724c8cf32d1bb0e1b631fc88fb1155f9a0602f5e9ce9a1e215b5829197d69ac467d5bb0570d90ff384045aabc117353873046d73dee2c1b943a1 rename-client-to-membre-fr-en.patch From b02725241b4ce1af7295c04fb5088ced0c8b083c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 19:11:25 -0500 Subject: [PATCH 171/738] user/gitlab-foss: upgrade to 16.9.0 --- user/gitlab-foss/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 5e855f0..a1e458a 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.8.3 +pkgver=16.9.0 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -17,7 +17,7 @@ depends=" cmd:dpkg-deb exiftool git>=2.42.0 - gitaly~=16.8 + gitaly~=16.9 gitlab-shell~=14.33 graphicsmagick http-parser @@ -382,7 +382,7 @@ assets() { } sha512sums=" -ae2a36e129d56ade19c4a910362cf43d5ae24bbb62a6cec4a156e7e88c9ff9e4f2cd63b2b992aa96f20b93addc8e70b4d07578d70736a433d47c0a6f3e117786 gitlab-foss-v16.8.3.tar.gz +029a3c84b46e654f87724c62e66a2d2eab010425fee8079ef8f5e0855433e7e5ab42fe80becc97a0a05429121104dc2609acf1a4028a84fe2b6f20dd7794af88 gitlab-foss-v16.9.0.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From 07f02d7d4fbcc2b13de2696fe818b8b65b13d9cf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 19:12:12 -0500 Subject: [PATCH 172/738] user/gitlab-pages: upgrade to 16.9.0 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index 6c451f9..be67699 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.8.3 +pkgver=16.9.0 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -5fa50ad7eaea2c50566a471fd6cb36fb286c0fa4b8c6ec859a40e0119c4991311b9f5f6fd0ea299d93594b102ce89f8b58a85bd9c09287049cab35ea93098c01 gitlab-pages-v16.8.3.tar.gz +4c3c4d78c07160aa2851d0d0e76e7a4060c7844e4d76e07b42a67eb6a7dda338e83384a2d860386792863315a136f0fd05afb8d3254de8dfae2e4fa2caabae22 gitlab-pages-v16.9.0.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From d871b6ca9d9bf19aaa28ff7a929879d61b75dbea Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Feb 2024 19:12:55 -0500 Subject: [PATCH 173/738] user/gitaly: upgrade to 16.9.0 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 6e3b00b..57b84de 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.8.3 +pkgver=16.9.0 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -54ad11dc3638e0a8bc5e6b881cd7f8ede1125bdcf25f36cf957fdfe06cf3851c5162b4c375fb9e6e7912c4fcfcd08aa63df4834c3b5c5ef6aaf18a8e837ce5ca gitaly-v16.8.3.tar.gz +2a02bf6cee13c979f44ec5e0e9aa65fca13b88d329823b21975af687b065e8ece619e875e102b0d0cc0554499dd91dde2e84d44b7f7af8b6fd06e6d8f717f7cb gitaly-v16.9.0.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From a17fecd2f2cf10a28c8227d32e7b570ce99d6803 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 Feb 2024 17:40:09 -0500 Subject: [PATCH 174/738] backports/thelounge: allow self https for connect-src --- backports/thelounge/APKBUILD | 4 +++- .../thelounge/allow-https-for-connect-src.patch | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 backports/thelounge/allow-https-for-connect-src.patch diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD index a08de3a..4753f9e 100644 --- a/backports/thelounge/APKBUILD +++ b/backports/thelounge/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Kay Thomas pkgname=thelounge pkgver=4.4.1 -pkgrel=0 +pkgrel=1 pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" url="https://thelounge.chat" # x86: textrels @@ -19,6 +19,7 @@ install="$pkgname.pre-install $pkgname.post-install" source="$pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz no-version-test.patch thelounge.initd + allow-https-for-connect-src.patch " options="net" # npm @@ -78,4 +79,5 @@ sha512sums=" 7695121a713a23688bc6f52dae2574bab1288eea930fd50d4dd85037233e9f23bd8e460980c69cdd14ea8648da4720d84e8196547b6a18e69d2f478b43d6e29a thelounge-4.4.1.tar.gz cbf80e23b0af8f0185699d6b03816c645c51b85fff7f163d3cd3d00296ed816b6ab01529b359fbfd549a79e8adb72bbc83bc7a389cf13e0afd50636ff79a138e no-version-test.patch f367d27ebcc412ff03c12ae98e50aeae5051fb5ffa9da6220f664c59993ed0e330b55b3b41fe941d546634901163d006e318891b4b886f6c49a93e0888fccd3e thelounge.initd +212e468d6cedaa528b7fad534b8ba0e7a3d69137940cdabd22dbe34375491900d5b7d577550aa3b245ad7775488a90e308019db55ff15e8ede105c4b9c15b015 allow-https-for-connect-src.patch " diff --git a/backports/thelounge/allow-https-for-connect-src.patch b/backports/thelounge/allow-https-for-connect-src.patch new file mode 100644 index 0000000..a147a91 --- /dev/null +++ b/backports/thelounge/allow-https-for-connect-src.patch @@ -0,0 +1,13 @@ +diff --git a/server/server.ts b/server/server.ts.orig +index 7a1514e..5ecdea9 100644 +--- a/server/server.ts ++++ b/server/server.ts.orig +@@ -377,7 +377,7 @@ function addSecurityHeaders(req: Request, res: Response, next: NextFunction) { + "default-src 'none'", // default to nothing + "base-uri 'none'", // disallow , has no fallback to default-src + "form-action 'self'", // 'self' to fix saving passwords in Firefox, even though login is handled in javascript +- "connect-src 'self' ws: wss:", // allow self for polling; websockets ++ "connect-src 'self' ws: wss: https:", // allow self for polling; websockets + "style-src 'self' https: 'unsafe-inline'", // allow inline due to use in irc hex colors + "script-src 'self'", // javascript + "worker-src 'self'", // service worker From cb1f8cf70cfda3997a9eac1b6fa44409426b3a7b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 3 Mar 2024 14:37:09 -0500 Subject: [PATCH 175/738] user/uptime-kuma: new aport --- user/uptime-kuma/APKBUILD | 49 ++++++++++++++++++++++++ user/uptime-kuma/uptime-kuma.conf | 47 +++++++++++++++++++++++ user/uptime-kuma/uptime-kuma.openrc | 48 +++++++++++++++++++++++ user/uptime-kuma/uptime-kuma.pre-install | 25 ++++++++++++ 4 files changed, 169 insertions(+) create mode 100644 user/uptime-kuma/APKBUILD create mode 100644 user/uptime-kuma/uptime-kuma.conf create mode 100644 user/uptime-kuma/uptime-kuma.openrc create mode 100755 user/uptime-kuma/uptime-kuma.pre-install diff --git a/user/uptime-kuma/APKBUILD b/user/uptime-kuma/APKBUILD new file mode 100644 index 0000000..0b7766e --- /dev/null +++ b/user/uptime-kuma/APKBUILD @@ -0,0 +1,49 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=uptime-kuma +pkgver=1.23.11 +pkgrel=0 +pkgdesc='A fancy self-hosted monitoring tool' +arch="all" +url="https://github.com/louislam/uptime-kuma" +license="MIT" +depends="nodejs" +makedepends="npm" +source=" + uptime-kuma-$pkgver.tar.gz::https://github.com/louislam/uptime-kuma/archive/refs/tags/$pkgver.tar.gz + uptime-kuma.openrc + uptime-kuma.conf + " +subpackages="$pkgname-doc $pkgname-openrc" +install="$pkgname.pre-install" + +build() { + npm ci + npm run build + rm -Rf "$builddir"/node_modules + npm ci --omit=dev +} + +package() { + install -dm 755 \ + "$pkgdir"/usr/share/webapps \ + "$pkgdir"/usr/share/doc \ + "$pkgdir"/usr/share/licenses/uptime-kuma \ + "$pkgdir"/etc/init.d \ + "$pkgdir"/etc/conf.d + + # install + cp -a "$builddir" "$pkgdir/usr/share/webapps/uptime-kuma" + + # openrc + install -Dm755 "$srcdir"/uptime-kuma.openrc "$pkgdir"/etc/init.d/uptime-kuma + install -Dm755 "$srcdir"/uptime-kuma.conf "$pkgdir"/etc/conf.d/uptime-kuma + + # docs and licenses + mv "$pkgdir"/usr/share/webapps/uptime-kuma/LICENSE "$pkgdir"/usr/share/licenses/uptime-kuma/. +} +sha512sums=" +6cd6aef96ac93597334b8fc7987611420b20ee45c5c1348ab42f05865fb679913038fd333416d239c43e047c9995553d2ab8e6fb7a05cea00d290fa05a26fa4e uptime-kuma-1.23.11.tar.gz +0ceddb98a6f318029b8bd8b5a49b55c883e77a5f8fffe2b9b271c9abf0ac52dc7a6ea4dbb4a881124a7857f1e43040f18755c1c2a034479e6a94d2b65a73d847 uptime-kuma.openrc +1dbae536b23e3624e139155abbff383bba3209ff2219983da2616b4376b1a5041df812d1e5164716fc6e967a8446d94baae3b96ee575d400813cc6fdc2cc274e uptime-kuma.conf +" diff --git a/user/uptime-kuma/uptime-kuma.conf b/user/uptime-kuma/uptime-kuma.conf new file mode 100644 index 0000000..f816a99 --- /dev/null +++ b/user/uptime-kuma/uptime-kuma.conf @@ -0,0 +1,47 @@ +# uptime-kuma config +# for more info +# see https://github.com/louislam/uptime-kuma/wiki/Environment-Variables + +# Set the directory where the data should be stored (could be relative) +# DATA_DIR=/var/lib/uptime-kuma + +# Host to bind to, could be an ip. +# UPTIME_KUMA_HOST=:: + +# Port to listen to +# UPTIME_KUMA_PORT=3001 + +# Path to SSL key +# UPTIME_KUMA_SSL_KEY= + +# Path to SSL certificate +# UPTIME_KUMA_SSL_CERT= + +# SSL Key Passphrase +# UPTIME_KUMA_SSL_KEY_PASSPHRASE= + +# Cloudflare Tunnel Token +# UPTIME_KUMA_CLOUDFLARED_TOKEN= + +# By default, Uptime Kuma is not allowed in iframe if the domain name is not +# the same as the parent. It protects your Uptime Kuma to be a phishing +# website. If you don't need this protection, you can set it to true +# UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=false + +# By default, Uptime Kuma is verifying that the websockets ORIGIN-Header +# matches your servers hostname. If you don't need this protection, you can +# set it to bypass. See GHSA-mj22-23ff-2hrr for further context. +# UPTIME_KUMA_WS_ORIGIN_CHECK=cors-like + +# Allow to specify any executables as Chromium +# UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC=0 + +# Add your self-signed ca certs. +# NODE_EXTRA_CA_CERTS= + +# Ignore all TLS errors +# NOTE_TLS_REJECT_UNAUTHORIZED=0 + +# Set it to --insecure-http-parser, if you encountered error Invalid header +# value char when your website using WAF +# NODE_OPTIONS= diff --git a/user/uptime-kuma/uptime-kuma.openrc b/user/uptime-kuma/uptime-kuma.openrc new file mode 100644 index 0000000..ce7b00e --- /dev/null +++ b/user/uptime-kuma/uptime-kuma.openrc @@ -0,0 +1,48 @@ +#!/sbin/openrc-run + +description="Uptime Kuma self-hosted monitoring tool" + +# Change $directory to path to uptime-kuma +directory=${directory:-/usr/share/webapps/uptime-kuma} +pidfile=${pidfile:-/run/$RC_SVCNAME.pid} +DATA_DIR=${DATA_DIR:-/var/lib/uptime-kuma} + +log_dir="/var/log/$RC_SVCNAME" +logfile=${logfile:-$log_dir/$RC_SVCNAME.log} +output_log="${output_log:-$logfile}" +error_log="${error_log:-$logfile}" + +command=${command:-/usr/bin/node} +command_args="$directory/server/server.js" +command_user=${command_user:-uptime-kuma:uptime-kuma} +command_background=true + +depend() { + need net +} + +start_pre() { + checkpath --owner=$command_user --directory $log_dir \ + $DATA_DIR \ + $DATA_DIR/upload + checkpath --owner=$command_user --file $logfile \ + $DATA_DIR/error.log + + [ ! -e $DATA_DIR/kuma.db ] && + cp $directory/db/kuma.db $DATA_DIR + + checkpath --owner=$command_user --mode 600 --file $DATA_DIR/kuma.db* + + cd $directory + + export DATA_DIR UPTIME_KUMA_HOST UPTIME_KUMA_PORT UPTIME_KUMA_SSL_KEY \ + UPTIME_KUMA_SSL_CERT UPTIME_KUMA_SSL_KEY_PASSPHRASE \ + UPTIME_KUMA_CLOUDFLARED_TOKEN UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN \ + UPTIME_KUMA_WS_ORIGIN_CHECK UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC \ + NODE_EXTRA_CA_CERTS NODE_TLS_REJECT_UNAUTHORIZED NODE_OPTIONS +} + +start_post() { + # Wait for the server to be started + sleep 10 +} diff --git a/user/uptime-kuma/uptime-kuma.pre-install b/user/uptime-kuma/uptime-kuma.pre-install new file mode 100755 index 0000000..0217278 --- /dev/null +++ b/user/uptime-kuma/uptime-kuma.pre-install @@ -0,0 +1,25 @@ +#!/bin/sh + +DATADIR='/var/lib/uptime-kuma' + +if ! getent group uptime-kuma 1>/dev/null; then + echo '* Creating group uptime-kuma' 1>&2 + + addgroup -S uptime-kuma +fi + +if ! id uptime-kuma 2>/dev/null 1>&2; then + echo '* Creating user uptime-kuma' 1>&2 + + adduser -DHS -G uptime-kuma -h "$DATADIR" -s /bin/sh \ + -g "added by apk for uptime-kuma" uptime-kuma + passwd -u uptime-kuma 1>/dev/null # unlock +fi + +if ! id -Gn uptime-kuma | grep -Fq www-data; then + echo '* Adding user uptime-kuma to group www-data' 1>&2 + + addgroup uptime-kuma www-data +fi + +exit 0 From bc0fb8396d6e311200403c07a4c0a9456d793836 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Mar 2024 00:44:10 -0500 Subject: [PATCH 176/738] user/authentik: upgrade to 2024.2.2 --- user/authentik/APKBUILD | 24 ++++++++++++------------ user/authentik/authentik.post-install | 1 - 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 1e72225..31bd16b 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -1,16 +1,18 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=authentik -pkgver=2024.2.1 +pkgver=2024.2.2 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" -# py3-xmlsec needs some work -arch="all" +# s390x: missing py3-celery py3-flower and py3-kombu +# armhf/armv7/x86: out of memory error when building goauthentik +# ppc64le: not supported by Rollup build +arch="aarch64 x86_64" license="MIT" depends=" libcap-setcap + nginx postgresql procps pwgen @@ -147,7 +149,7 @@ makedepends="go npm" # checkdepends scooped up by poetry due to number checkdepends="poetry py3-coverage" # tests disabled for now -options="!check chmod-clean" +options="!check" install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" source=" $pkgname-$pkgver.tar.gz::https://github.com/goauthentik/authentik/archive/refs/tags/version/$pkgver.tar.gz @@ -160,6 +162,8 @@ source=" " builddir="$srcdir/"authentik-version-$pkgver subpackages="$pkgname-openrc $pkgname-doc" +pkgusers="authentik" +pkggroups="authentik" export GOPATH=$srcdir/go export GOCACHE=$srcdir/go-build @@ -187,11 +191,6 @@ build() { npm run build } -check() { - poetry install --only dev - make test -} - package() { msg "Packaging $pkgname" mkdir -p "$pkgdir"/usr/share/webapps/authentik/web @@ -225,6 +224,7 @@ package() { "$pkgdir"/etc/conf.d/$pkgname-ldap install -Dm640 "$builddir"/authentik/lib/default.yml \ "$pkgdir"/etc/authentik/config.yml + chown root:www-data "$pkgdir"/etc/authentik/config.yml sed -i 's|cert_discovery_dir.*|cert_discovery_dir: /var/lib/authentik/certs|' "$pkgdir"/etc/authentik/config.yml sed -i 's|blueprints_dir.*|blueprints_dir: /var/lib/authentik/blueprints|' "$pkgdir"/etc/authentik/config.yml sed -i 's|template_dir.*|template_dir: /var/lib/authentik/templates|' "$pkgdir"/etc/authentik/config.yml @@ -236,7 +236,7 @@ package() { } sha512sums=" -ae177d10b024c72e5b2f793bf837e78dc5b7f58ec45c6b7474a457257df317b7464923e3ba950f74643edee7a1591dfd83285185c6db333a7d5639fae12b98c8 authentik-2024.2.1.tar.gz +98b7265b8ed32dde659dc984c4a71097da2ab7c32f3361984f56cfb97226ea8b2f4fdf1a3d019d341cff92c9832a3964038bf5eca3aae238a18c2445dbcf0ed8 authentik-2024.2.2.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc diff --git a/user/authentik/authentik.post-install b/user/authentik/authentik.post-install index ca0a6e6..a715d20 100755 --- a/user/authentik/authentik.post-install +++ b/user/authentik/authentik.post-install @@ -12,7 +12,6 @@ if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then secret_key="$(pwgen -s 50 1)" sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" chown root:$group "$config_file" - chmod 0640 "$config_file" fi if [ "${0##*.}" = 'post-upgrade' ]; then From d5d85a538c9dee074771b10bd88e92616196808a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 5 Mar 2024 00:45:28 -0500 Subject: [PATCH 177/738] user/zotero: enable on aarch64 --- user/zotero/APKBUILD | 31 +-- ....diff => zotero_build-modifications.patch} | 53 +++- user/zotero/zotero_drop-phantomjs.patch | 243 ++++++++++++++++++ 3 files changed, 301 insertions(+), 26 deletions(-) rename user/zotero/{zotero_build-modifications.diff => zotero_build-modifications.patch} (66%) create mode 100644 user/zotero/zotero_drop-phantomjs.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 6d73609..cbe92c1 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -8,7 +8,7 @@ _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) _releasedate=2024-02-03 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." -arch="x86_64" +arch="x86_64 aarch64" url="https://github.com/zotero/zotero" license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" options="!check" # No test suite @@ -99,7 +99,8 @@ source=" zotero.desktop https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz - zotero_build-modifications.diff + zotero_build-modifications.patch + zotero_drop-phantomjs.patch " builddir="$srcdir"/firefox-$_fxver @@ -143,6 +144,7 @@ export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-b export LDFLAGS="$LDFLAGS -Wl,--undefined-version" prepare() { + mv "$_zoterodir" "$builddir"/zotero default_prepare cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ @@ -257,20 +259,10 @@ prepare() { # zotero prepare ( - cd "$_zoterodir" + cd "$builddir"/zotero # zotero build expects to be in a git repo git init git commit --allow-empty -m 'Initial' - - # zorero patches - for i in $source; do - case ${i%::*} in - *.diff) - msg ${i%::*} - patch ${patch_args:--p1} -i "$srcdir/$(filename_from_uri $i)" - ;; - esac - done ) } @@ -321,13 +313,13 @@ build() { ./mach build # install to where zotero expects it - DESTDIR="$_zoterodir"/app/xulrunner/firefox-$CARCH ./mach install - mv "$_zoterodir"/app/xulrunner/firefox-$CARCH/usr/lib/firefox-esr/* "$_zoterodir"/app/xulrunner/firefox-$CARCH/. - rm -R "$_zoterodir"/app/xulrunner/firefox-$CARCH/usr + DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install + mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. + rm -R "$builddir"/zotero/app/xulrunner/firefox/usr # zotero build ( - cd "$_zoterodir" + cd "$builddir"/zotero npm i --legacy-peer-deps NODE_OPTIONS=--openssl-legacy-provider npm run build @@ -338,7 +330,7 @@ build() { package() { install -dDm755 "$pkgdir"/usr/bin install -dDm755 "$pkgdir"/usr/lib/zotero - cp -r "$_zoterodir"/app/staging/Zotero_linux-$CARCH/* "$pkgdir/usr/lib/zotero" + cp -r "$builddir"/zotero/app/staging/Zotero_linux/* "$pkgdir/usr/lib/zotero" ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" @@ -383,5 +375,6 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop 32263fda93adc17050e253b085cd42949db751e4ec9e9e84add7f934159031042649ca55d2546535f91e9b89d5de7b14eb5d1f10495037164c57bf8349ed9654 zotero-client-7.0.0_beta60.tar.gz -089370d86388b34003179ebf95894fb68069fe7ee1624f88e6c411bbbb4f7bc846287cf593034487967cf2bdf807c761212bdb6356bd604d1d04de35aeb3e646 zotero_build-modifications.diff +f196d9d82e50a5123342634b4d49a0776ca3668fcccd8b48bb28fac94107e11a039204f13030b405309cfafe53615a7a9f5c278d2b278140cbc0fb1cecf4cebc zotero_build-modifications.patch +cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch " diff --git a/user/zotero/zotero_build-modifications.diff b/user/zotero/zotero_build-modifications.patch similarity index 66% rename from user/zotero/zotero_build-modifications.diff rename to user/zotero/zotero_build-modifications.patch index d8ff0c6..1d0d045 100644 --- a/user/zotero/zotero_build-modifications.diff +++ b/user/zotero/zotero_build-modifications.patch @@ -1,7 +1,7 @@ -diff --git a/app/build.sh b/app/build.sh +diff --git a/zotero/app/build.sh b/zotero/app/build.sh index 649d629..7d078b8 100755 ---- a/app/build.sh -+++ b/app/build.sh +--- a/zotero/app/build.sh ++++ b/zotero/app/build.sh @@ -59,10 +59,7 @@ function abspath { } @@ -43,10 +43,10 @@ index 649d629..7d078b8 100755 cp "$CALLDIR/linux/icons/icon64.png" "$APPDIR/icons/" cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" -diff --git a/app/scripts/fetch_xulrunner b/app/scripts/fetch_xulrunner +diff --git a/zotero/app/scripts/fetch_xulrunner b/zotero/app/scripts/fetch_xulrunner index 8b3d918..120b085 100755 ---- a/app/scripts/fetch_xulrunner -+++ b/app/scripts/fetch_xulrunner +--- a/zotero/app/scripts/fetch_xulrunner ++++ b/zotero/app/scripts/fetch_xulrunner @@ -132,15 +132,6 @@ function modify_omni { # Continue using app.update.auto in prefs.js on Windows replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.jsm @@ -69,7 +69,7 @@ index 8b3d918..120b085 100755 GECKO_VERSION="$GECKO_VERSION_LINUX" - DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" -+ pushd firefox-x86_64 ++ pushd firefox + modify_omni linux64 + popd @@ -103,3 +103,42 @@ index 8b3d918..120b085 100755 fi echo Done +diff --git a/zotero/app/build.sh.orig b/zotero/app/build.sh +index 702f499..3ee7e34 100755 +--- a/zotero/app/build.sh.orig ++++ b/zotero/app/build.sh +@@ -189,7 +189,7 @@ BUILD_ID=`date +%Y%m%d%H%M%S` + # Paths to Gecko runtimes + MAC_RUNTIME_PATH="$CALLDIR/xulrunner/Firefox.app" + WIN_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" +-LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" ++LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox" + + base_dir="$BUILD_DIR/base" + app_dir="$BUILD_DIR/base/app" +@@ -223,8 +223,8 @@ elif [ $BUILD_WIN == 1 ]; then + unzip -qj "${WIN_RUNTIME_PATH_PREFIX}win-x64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ + elif [ $BUILD_LINUX == 1 ]; then + # Non-arch-specific files, so just use 64-bit version +- cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/browser/omni "$app_dir" +- unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ ++ cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}"/browser/omni "$app_dir" ++ unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ + fi + set -e + cd $omni_dir +@@ -825,11 +825,11 @@ if [ $BUILD_LINUX == 1 ]; then + fi + + for arch in $archs; do +- runtime_path="${LINUX_RUNTIME_PATH_PREFIX}${arch}" ++ runtime_path="${LINUX_RUNTIME_PATH_PREFIX}" + + # Set up directory +- echo 'Building Zotero_linux-'$arch +- APPDIR="$STAGE_DIR/Zotero_linux-$arch" ++ echo 'Building Zotero_linux' ++ APPDIR="$STAGE_DIR/Zotero_linux" + rm -rf "$APPDIR" + mkdir "$APPDIR" + diff --git a/user/zotero/zotero_drop-phantomjs.patch b/user/zotero/zotero_drop-phantomjs.patch new file mode 100644 index 0000000..1333cbe --- /dev/null +++ b/user/zotero/zotero_drop-phantomjs.patch @@ -0,0 +1,243 @@ +diff --git a/zotero/reader/epubjs/epub.js/package.json.orig b/zotero/reader/epubjs/epub.js/package.json +index bb440ac..b4c5c32 100644 +--- a/zotero/reader/epubjs/epub.js/package.json.orig ++++ b/zotero/reader/epubjs/epub.js/package.json +@@ -41,7 +41,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +diff --git a/zotero/reader/epubjs/epub.js/package-lock.json.orig b/zotero/reader/epubjs/epub.js/package-lock.json +index 6d728e7..c889b68 100644 +--- a/zotero/reader/epubjs/epub.js/package-lock.json.orig ++++ b/zotero/reader/epubjs/epub.js/package-lock.json +@@ -28,7 +28,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +@@ -8855,16 +8854,6 @@ + "node": ">=4" + } + }, +- "node_modules/karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", +- "dev": true, +- "dependencies": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- } +- }, + "node_modules/karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", +@@ -11342,26 +11331,6 @@ + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, +- "node_modules/phantomjs-prebuilt": { +- "version": "2.1.14", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", +- "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", +- "dev": true, +- "dependencies": { +- "es6-promise": "~4.0.3", +- "extract-zip": "~1.5.0", +- "fs-extra": "~1.0.0", +- "hasha": "~2.2.0", +- "kew": "~0.7.0", +- "progress": "~1.1.8", +- "request": "~2.79.0", +- "request-progress": "~2.0.1", +- "which": "~1.2.10" +- }, +- "bin": { +- "phantomjs": "bin/phantomjs" +- } +- }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +@@ -22124,16 +22093,6 @@ + } + } + }, +- "karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", +- "dev": true, +- "requires": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- } +- }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", +@@ -23984,23 +23943,6 @@ + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, +- "phantomjs-prebuilt": { +- "version": "2.1.14", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", +- "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", +- "dev": true, +- "requires": { +- "es6-promise": "~4.0.3", +- "extract-zip": "~1.5.0", +- "fs-extra": "~1.0.0", +- "hasha": "~2.2.0", +- "kew": "~0.7.0", +- "progress": "~1.1.8", +- "request": "~2.79.0", +- "request-progress": "~2.0.1", +- "which": "~1.2.10" +- } +- }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +diff --git a/zotero/reader/package-lock.json.orig b/zotero/reader/package-lock.json +index 949e5de..0485ddd 100644 +--- a/zotero/reader/package-lock.json.orig ++++ b/zotero/reader/package-lock.json +@@ -83,7 +83,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +@@ -12332,20 +12331,6 @@ + "node": ">=4" + } + }, +- "node_modules/karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha512-tf4P3plsE7wb5Pqh8GJ6RnElxfI/UM4MtVnjbSIZFpdFJlKnjRzfIx8MLCcSYJBwZ1+qSKFz4uBe3XNoq2t3KA==", +- "deprecated": "PhantomJS development have stopped, use puppeteer or similar", +- "dev": true, +- "dependencies": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- }, +- "peerDependencies": { +- "karma": ">=0.9" +- } +- }, + "node_modules/karma-sourcemap-loader": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", +@@ -15330,40 +15315,6 @@ + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, +- "node_modules/phantomjs-prebuilt": { +- "version": "2.1.16", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", +- "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", +- "deprecated": "this package is now deprecated", +- "dev": true, +- "hasInstallScript": true, +- "dependencies": { +- "es6-promise": "^4.0.3", +- "extract-zip": "^1.6.5", +- "fs-extra": "^1.0.0", +- "hasha": "^2.2.0", +- "kew": "^0.7.0", +- "progress": "^1.1.8", +- "request": "^2.81.0", +- "request-progress": "^2.0.1", +- "which": "^1.2.10" +- }, +- "bin": { +- "phantomjs": "bin/phantomjs" +- } +- }, +- "node_modules/phantomjs-prebuilt/node_modules/which": { +- "version": "1.3.1", +- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", +- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", +- "dev": true, +- "dependencies": { +- "isexe": "^2.0.0" +- }, +- "bin": { +- "which": "bin/which" +- } +- }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", +@@ -27177,7 +27128,6 @@ + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", +- "karma-phantomjs-launcher": "^1.0.4", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^5.0.0", + "mocha": "^7.2.0", +@@ -30497,16 +30447,6 @@ + } + } + }, +- "karma-phantomjs-launcher": { +- "version": "1.0.4", +- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", +- "integrity": "sha512-tf4P3plsE7wb5Pqh8GJ6RnElxfI/UM4MtVnjbSIZFpdFJlKnjRzfIx8MLCcSYJBwZ1+qSKFz4uBe3XNoq2t3KA==", +- "dev": true, +- "requires": { +- "lodash": "^4.0.1", +- "phantomjs-prebuilt": "^2.1.7" +- } +- }, + "karma-sourcemap-loader": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", +@@ -32672,34 +32612,6 @@ + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, +- "phantomjs-prebuilt": { +- "version": "2.1.16", +- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", +- "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", +- "dev": true, +- "requires": { +- "es6-promise": "^4.0.3", +- "extract-zip": "^1.6.5", +- "fs-extra": "^1.0.0", +- "hasha": "^2.2.0", +- "kew": "^0.7.0", +- "progress": "^1.1.8", +- "request": "^2.81.0", +- "request-progress": "^2.0.1", +- "which": "^1.2.10" +- }, +- "dependencies": { +- "which": { +- "version": "1.3.1", +- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", +- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", +- "dev": true, +- "requires": { +- "isexe": "^2.0.0" +- } +- } +- } +- }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", From 5e1cfaa832faf077a48a13329e4be325e1e7fd87 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 6 Mar 2024 19:24:18 -0500 Subject: [PATCH 178/738] user/zotero: upgrade to 7.0.0_beta65 --- user/zotero/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index cbe92c1..bc724e1 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta60 +pkgver=7.0.0_beta65 pkgrel=0 _fxver=102.15.1 _gittag=$pkgver @@ -374,7 +374,7 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -32263fda93adc17050e253b085cd42949db751e4ec9e9e84add7f934159031042649ca55d2546535f91e9b89d5de7b14eb5d1f10495037164c57bf8349ed9654 zotero-client-7.0.0_beta60.tar.gz +da5c886def40e5252371563556196cf489a38568f55b009fbce65893436a36f81c2a56b69ecb4cc8cceef588c64a2b886ef4be7824b39a5c75910b230f3b4f19 zotero-client-7.0.0_beta65.tar.gz f196d9d82e50a5123342634b4d49a0776ca3668fcccd8b48bb28fac94107e11a039204f13030b405309cfafe53615a7a9f5c278d2b278140cbc0fb1cecf4cebc zotero_build-modifications.patch cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch " From e0b2920fa4b86435cd409914e411b9f248554d5b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 8 Mar 2024 15:38:37 -0500 Subject: [PATCH 179/738] user/freescout: upgrade to 1.8.126 --- user/freescout/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 1f273f5..bf824f2 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.122 +pkgver=1.8.126 pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" @@ -75,7 +75,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -39ccf58b632e96e65ac9a87820086ea470255ef2c7bff4b3605f0ac0bfb344da0971fc0b7d819f5641869ab4161f371cd32a24904c5723a4e3c042902ad2a4fb freescout-1.8.122.tar.gz +81f267ea0e8327c2679618f15c2463a7261bb1dd91149243b6f9e0aa160d6e1cd9fcf6d700fde65146955a53266a46f1d2b3e0cffa7448ed58be54d10939584b freescout-1.8.126.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh 8d495683341e724c8cf32d1bb0e1b631fc88fb1155f9a0602f5e9ce9a1e215b5829197d69ac467d5bb0570d90ff384045aabc117353873046d73dee2c1b943a1 rename-client-to-membre-fr-en.patch From 6c24e38caf4e9109611cf71977e5b2668e4ef3a6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 9 Mar 2024 00:27:48 -0500 Subject: [PATCH 180/738] user/gitlab-foss: upgrade to 16.9.2 --- user/gitlab-foss/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index a1e458a..97f6016 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.9.0 +pkgver=16.9.2 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -18,7 +18,7 @@ depends=" exiftool git>=2.42.0 gitaly~=16.9 - gitlab-shell~=14.33 + gitlab-shell~=14.34 graphicsmagick http-parser procps @@ -382,7 +382,7 @@ assets() { } sha512sums=" -029a3c84b46e654f87724c62e66a2d2eab010425fee8079ef8f5e0855433e7e5ab42fe80becc97a0a05429121104dc2609acf1a4028a84fe2b6f20dd7794af88 gitlab-foss-v16.9.0.tar.gz +eeb09db0b1d4ae66347f3b5ef7dbaf0fda67ec099f0a07e119ba43773e940039a1fd1aa1b6f80dc301e72edff872fedb7db33b58c4a67ec7be9266b12590cfda gitlab-foss-v16.9.2.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From e8400cd1650b75473cc9dd6c3483d588095398a4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 9 Mar 2024 00:28:06 -0500 Subject: [PATCH 181/738] user/gitlab-pages: upgrade to 16.9.2 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index be67699..fd1adba 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.9.0 +pkgver=16.9.2 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -4c3c4d78c07160aa2851d0d0e76e7a4060c7844e4d76e07b42a67eb6a7dda338e83384a2d860386792863315a136f0fd05afb8d3254de8dfae2e4fa2caabae22 gitlab-pages-v16.9.0.tar.gz +d9652827ce69ad6f3417611ad326852d2f107381689ee59bf066d5659385305500f9a7252d2267978630d03e9a4f21c0e1860371065de949b8560a8810e412a2 gitlab-pages-v16.9.2.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 2a825ce109ddb5b5b13ff69d030403ff2986b942 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 9 Mar 2024 00:28:28 -0500 Subject: [PATCH 182/738] user/gitaly: upgrade to 16.9.2 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 57b84de..fef8064 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.9.0 +pkgver=16.9.2 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -2a02bf6cee13c979f44ec5e0e9aa65fca13b88d329823b21975af687b065e8ece619e875e102b0d0cc0554499dd91dde2e84d44b7f7af8b6fd06e6d8f717f7cb gitaly-v16.9.0.tar.gz +dbf673d519ee8664916252addb979312e9c9ce1815d5c2883445a81b45fd910c0802756e2a4c070e03096f52a15adb9f8f2cbe86860f1755f3a46de8c88e388c gitaly-v16.9.2.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 2a4c907f834d10ab509fad308517d97ff85a3a42 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 9 Mar 2024 00:33:56 -0500 Subject: [PATCH 183/738] user/gitlab-shell: upgrade to 14.34.0 --- user/gitlab-shell/APKBUILD | 6 +++--- user/gitlab-shell/config.patch | 11 +++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD index 47240c9..544bd55 100644 --- a/user/gitlab-shell/APKBUILD +++ b/user/gitlab-shell/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-shell -pkgver=14.33.0 +pkgver=14.34.0 pkgrel=0 pkgdesc="GitLab Shell handles git SSH sessions for GitLab" url="https://gitlab.com/gitlab-org/gitlab-shell" @@ -59,8 +59,8 @@ package() { } sha512sums=" -4b6a5aa8e47b3ce90abe77e1d5f89a7a4d7fa20d9984d3bf45e3a1d140529ea6e2ee96f6e24db88a4c52315d76393379eeb7d7f24d42c90a16ba17d191b39bd6 gitlab-shell-v14.33.0.tar.gz -8cf13bf472e22b1c429bba5df98afb931c80b043ec83c8366d59f15a1e9b21daf09078f134e7aa622c87b32c774d1d5cf129878d5035102c06d0b12ead33f804 config.patch +703685c8aae6498ad42103a70a65e18b4d2a617687a5488a52bf4c8147cd56a724a109ea27456ca93a723b458499ab09590ad5d1591eb5d3c38d8d33870736eb gitlab-shell-v14.34.0.tar.gz +5123f639de976b83a961f5d0a9f53b0ff7559ceb4e73b25a8029423932ba6249c430b8bb04dae4dce2e13330e95d4a7a88e63376ead2d6369f6adb264fd36d49 config.patch 499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig " diff --git a/user/gitlab-shell/config.patch b/user/gitlab-shell/config.patch index b4b1e92..27d6771 100644 --- a/user/gitlab-shell/config.patch +++ b/user/gitlab-shell/config.patch @@ -1,5 +1,5 @@ diff --git a/config.yml.example.orig b/config.yml.example -index 886fde0..f03c897 100644 +index 13850e6..98eb0e3 100644 --- a/config.yml.example.orig +++ b/config.yml.example @@ -13,7 +13,7 @@ user: git @@ -47,11 +47,10 @@ index 886fde0..f03c897 100644 # Audit usernames. # Set to true to see real usernames in the logs instead of key ids, which is easier to follow, but -@@ -61,57 +61,3 @@ audit_usernames: false - # Distributed Tracing. GitLab-Shell has distributed tracing instrumentation. +@@ -62,60 +62,6 @@ audit_usernames: false # For more details, visit https://docs.gitlab.com/ee/development/distributed_tracing.html # gitlab_tracing: opentracing://driver -- + -# This section configures the built-in SSH server. Ignored when running on OpenSSH. -sshd: - # Address which the SSH server listens on. Defaults to [::]:22. @@ -105,3 +104,7 @@ index 886fde0..f03c897 100644 - keytab: "" - # The Kerberos service name to be used by sshd. Defaults to "", accepts any service name in keytab file. - service_principal_name: "" +- + lfs: + # https://gitlab.com/groups/gitlab-org/-/epics/11872, disabled by default. + pure_ssh_protocol: false From fdb5ab17a1e89428873291c5622e9227fed82e94 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Apr 2024 15:52:21 -0400 Subject: [PATCH 184/738] user/gitlab-foss: upgrade to 16.9.3 --- user/gitlab-foss/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 97f6016..12b33fb 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.9.2 +pkgver=16.9.3 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -382,7 +382,7 @@ assets() { } sha512sums=" -eeb09db0b1d4ae66347f3b5ef7dbaf0fda67ec099f0a07e119ba43773e940039a1fd1aa1b6f80dc301e72edff872fedb7db33b58c4a67ec7be9266b12590cfda gitlab-foss-v16.9.2.tar.gz +d17ff841977d157965337774ac8ebed409e058bb1617d3fadeb8330d46efe32a091483ba30955c883e654b138d9a3ae7740a528418cd30eb1ed18cced508ddb8 gitlab-foss-v16.9.3.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From 7b3186e6478f07e5ed6583288042386868656625 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Apr 2024 15:52:38 -0400 Subject: [PATCH 185/738] user/gitlab-pages: upgrade to 16.9.3 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index fd1adba..ec35745 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.9.2 +pkgver=16.9.3 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -d9652827ce69ad6f3417611ad326852d2f107381689ee59bf066d5659385305500f9a7252d2267978630d03e9a4f21c0e1860371065de949b8560a8810e412a2 gitlab-pages-v16.9.2.tar.gz +5a97176d820f787b96cac54dc040a0232c6b0e8a98f7e737af2f5c9a0cff10ce79263a35fdf560c58eb84eaaf1ed109a75121b050f059b4bdf493d05b58861bc gitlab-pages-v16.9.3.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From e7db0340bf5c3cb00b7bead7e83bffc3a9ccbadc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Apr 2024 15:53:06 -0400 Subject: [PATCH 186/738] user/gitaly: upgrade to 16.9.3 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index fef8064..3a56350 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.9.2 +pkgver=16.9.3 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -dbf673d519ee8664916252addb979312e9c9ce1815d5c2883445a81b45fd910c0802756e2a4c070e03096f52a15adb9f8f2cbe86860f1755f3a46de8c88e388c gitaly-v16.9.2.tar.gz +c3784b7fb692d2e57a484b3a33b719de76d3ee8bfabc95919e7dabd89f5429f06000c615e433c99f18c1a6706ecd389dcf15d55a59ed546f62c10b585e20ad7b gitaly-v16.9.3.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 75582f0fd67649bc85af471d90dd13fb264a58bb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 2 Apr 2024 14:31:36 -0400 Subject: [PATCH 187/738] user/zotero: upgrade to 7.0.0_beta68 --- user/zotero/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index bc724e1..97aeae0 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta65 +pkgver=7.0.0_beta68 pkgrel=0 _fxver=102.15.1 _gittag=$pkgver @@ -374,7 +374,7 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -da5c886def40e5252371563556196cf489a38568f55b009fbce65893436a36f81c2a56b69ecb4cc8cceef588c64a2b886ef4be7824b39a5c75910b230f3b4f19 zotero-client-7.0.0_beta65.tar.gz +d635aae7d2a403778502d5d3121b4a576f5bd86e16b422ac439e458d73bb86349b444888891f0329fa6b3667608e1b81cfb9b150e97f41ec7e2dc027b7e0c06e zotero-client-7.0.0_beta68.tar.gz f196d9d82e50a5123342634b4d49a0776ca3668fcccd8b48bb28fac94107e11a039204f13030b405309cfafe53615a7a9f5c278d2b278140cbc0fb1cecf4cebc zotero_build-modifications.patch cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch " From a6f42e095534343dcfb3f98505f1ad3905adb024 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 12 Apr 2024 22:23:25 -0400 Subject: [PATCH 188/738] user/freescout: upgrade to 1.8.134 --- user/freescout/APKBUILD | 8 +- .../rename-client-to-membre-fr-en.patch | 364 ++++++++---------- 2 files changed, 171 insertions(+), 201 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index bf824f2..b70ffbd 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,13 +1,13 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.126 +pkgver=1.8.134 pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" license="AGPL-3.0" -_php=php82 +_php=php83 _php_mods="-fpm -mbstring -xml -imap -zip -gd -curl -intl -tokenizer -pdo_pgsql -openssl -session -iconv -fileinfo -dom -pcntl" depends="$_php ${_php_mods//-/$_php-} nginx postgresql pwgen" makedepends="composer pcre" @@ -75,8 +75,8 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -81f267ea0e8327c2679618f15c2463a7261bb1dd91149243b6f9e0aa160d6e1cd9fcf6d700fde65146955a53266a46f1d2b3e0cffa7448ed58be54d10939584b freescout-1.8.126.tar.gz +9baee50b7a8f2909f3635ffc0eb381c6bd14b62cf9e4001fb8aa22b401482e4c19fb0c47c79944ed64159f9f5581fbf96abeb0cc8971263848e5463e8cecfc3b freescout-1.8.134.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh -8d495683341e724c8cf32d1bb0e1b631fc88fb1155f9a0602f5e9ce9a1e215b5829197d69ac467d5bb0570d90ff384045aabc117353873046d73dee2c1b943a1 rename-client-to-membre-fr-en.patch +3416da98d71aea5a7093913ea34e783e21ff05dca90bdc5ff3d00c548db5889f6d0ec98441cd65ab9f590be5cd59fdd0d7f1c98b5deef7bb3adbc8db435ec9bf rename-client-to-membre-fr-en.patch " diff --git a/user/freescout/rename-client-to-membre-fr-en.patch b/user/freescout/rename-client-to-membre-fr-en.patch index 720e066..097e503 100644 --- a/user/freescout/rename-client-to-membre-fr-en.patch +++ b/user/freescout/rename-client-to-membre-fr-en.patch @@ -37,214 +37,184 @@ index 00000000..82d26052 + "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "When a member emails this mailbox, application can send an auto reply to the member immediately.Only one auto reply is sent per new conversation." +} \ No newline at end of file -diff --git a/resources/lang/fr.json b/resources/lang/fr.json -index 97edb488..6bbbb292 100644 ---- a/resources/lang/fr.json +diff --git a/resources/lang/fr.json.orig b/resources/lang/fr.json +index ff8d9d4..98d158f 100644 +--- a/resources/lang/fr.json.orig +++ b/resources/lang/fr.json -@@ -92,9 +92,9 @@ - "Recipient unsubscribed": "Destinataire désabonné", - "Recipient complained": "Le destinataire s'est plaint", - "Unknown": "Inconnue", -- "Email to customer": "Courriel au client", -+ "Email to customer": "Courriel au membre", - "User notification": "Notification utilisateur", -- "Auto reply to customer": "Réponse automatique au client", -+ "Auto reply to customer": "Réponse automatique au membre", - "Password changed notification": "Notification de changement de mot de passe", - "User replied from wrong email address": "L'utilisateur a répondu à partir d'une mauvaise adresse e-mail", - "Test email": "E-mail de test", -@@ -111,7 +111,7 @@ - "Mailbox created successfully": "Boîte aux lettres créée avec succès", - "Mailbox permissions saved!": "Autorisations de boîte aux lettres enregistrées!", - "Connection settings saved!": "Paramètres de connexion enregistrés!", -- "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux clients et aux agents de support", -+ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux membres et aux agents de support", - "Connection Settings": "Paramètres de connexion", - "Sending Emails": "Sending Emails", - "Receiving emails need to be configured for the mailbox in order to fetch emails from your support email address": "La réception d'e-mails doit être configurée pour la boîte aux lettres afin de récupérer les e-mails de votre adresse e-mail d'assistance.", -@@ -188,7 +188,7 @@ - "Deleted draft": "Brouillon supprimé", - "Thread is not in a draft state": "Le fil n'est pas à l'état de brouillon", - "Action not authorized": "Action non autorisée", -- "Customer changed": "Client changé", -+ "Customer changed": "Membre changé", - "Conversation deleted": "Conversation supprimée", - "Conversation restored": "Conversation rétablie", - "Message cannot be empty": "Le message ne peut pas être vide", -@@ -205,15 +205,15 @@ - "Mail Settings": "Paramètres de messagerie", - "Alerts": "Alertes", - "Settings updated": "Paramètres mis à jour", -- "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre client : :a_begin:customer:a_end.", -- "Customer saved successfully.": "Client enregistré avec succès.", -+ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre membre : :a_begin:customer:a_end.", -+ "Customer saved successfully.": "Membre enregistré avec succès.", - "Logged in": "Connecté", - "Logged out": "Déconnecté", - "Registered": "Inscrit", - "Locked out": "Enfermé dehors", - "Failed login": "Échec de la connexion", - "Reset password": "Réinitialiser le mot de passe", -- "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au client", -+ "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au membre", - "Error sending email to user": "Erreur lors de l'envoi d'un e-mail à l'utilisateur", - "Error sending invitation email to user": "Erreur lors de l'envoi d'un e-mail d'invitation à l'utilisateur", - "Error sending password changed notification to user": "Erreur lors de l'envoi de la notification de modification du mot de passe à l'utilisateur", -@@ -245,8 +245,8 @@ - ":person marked as :status_name": ":person a changé le statut en :status_name", +@@ -26,8 +26,8 @@ + ":person added a note to conversation #:conversation_number": ":person a ajouté une note à la conversation #:conversation_number", ":person assigned :assignee conversation #:conversation_number": ":person a assigné :assignee à la conversation #:conversation_number", ":person assigned to :assignee": ":person a assigné :assignee", -- ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le client en :customer dans la conversation #:conversation_number", - ":person changed the customer to :customer": ":person a changé le client en :customer", -+ ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le membre en :customer dans la conversation #:conversation_number", +- ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le client en :customer dans la conversation #:conversation_number", + ":person changed the customer to :customer": ":person a changé le membre en :customer", ++ ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le membre en :customer dans la conversation #:conversation_number", + ":person created a draft": ":person a créé un brouillon", ":person deleted": ":person supprimée", - ":person restored": ":person a restauré", - ":person moved conversation from another mailbox": ":person a déplacé la conversation depuis autre boîte aux lettres", -@@ -315,15 +315,15 @@ - "Installing": "L'installation", - "Install Module": "Installer le module", - "Get license key": "Obtenir la clé de licence", -- "Customer Profile": "Profil client", -+ "Customer Profile": "Profil membre", - "First Name": "Prénom", - "Last Name": "Nom de Famille", - "Job Title": "Profession", - "(optional)": "(optionnel)", - "Edit Profile": "Modifier le profil", -- "No customers found": "Aucun client trouvé", -+ "No customers found": "Aucun membre trouvé", - "Author": "Auteur", -- "Customer Name": "Nom du client", -+ "Customer Name": "Nom du membre", - "Add Email": "Ajouter un email", - "To": "À", - "Send emails separately to each recipient": "Envoyer des e-mails séparément à chaque destinataire", -@@ -337,14 +337,14 @@ - "Moving": "Déplacement", - "Move": "Déplacer", - "There were no send attempts yet": "Il n'y a pas encore eu de tentatives d'envoi", -- "Emails to Customers": "Emails aux clients", -- "Customer": "Client", -+ "Emails to Customers": "Emails aux membres", -+ "Customer": "Membre", - "Remarks": "Remarques", - "auto reply": "réponse automatique", - "User": "Utilisateur", -- "Search for a customer by name or email": "Rechercher un client par nom ou par e-mail", -- "No customers found. Would you like to create one?": "Aucun client trouvé. Souhaitez-vous en créer un?", -- "Create a new customer": "Créer un nouveau client", -+ "Search for a customer by name or email": "Rechercher un membre par nom ou par e-mail", -+ "No customers found. Would you like to create one?": "Aucun membre trouvé. Souhaitez-vous en créer un?", -+ "Create a new customer": "Créer un nouveau membre", - "Saving": "Enregistrement", - "Preview": "Aperçu", - "Body": "Corps", -@@ -373,7 +373,7 @@ - "ID": "Identifiant", - "After": "Après", - "Before": "Avant", -- "Customers": "Clients", -+ "Customers": "Membres", - "Assigned To": "Assigné à", - "Last Updated": "Dernière mise à jour", - "Waiting Since": "En attente depuis", -@@ -393,7 +393,7 @@ - "Restore": "Restaurer", - "Older": "Ancien", - "Settings": "Réglages", + ":person edited :creator's draft": ":person a modifié brouillon de :creator", +@@ -112,7 +112,7 @@ + "Auto Reply": "Réponse Automatique", + "Auto Reply status saved": "Statut de réponse automatique enregistré", + "Auto replies don't include your mailbox signature, so be sure to add your contact information if necessary.": "Les réponses automatiques n'incluent pas la signature de votre boîte aux lettres, assurez-vous d'ajouter vos coordonnées si nécessaire.", +- "Auto reply to customer": "Réponse automatique au client", ++ "Auto reply to customer": "Réponse automatique au membre", + "Back": "Retour", + "Back to folder": "Retour au dossier", + "Background Jobs": "Emplois d'arrière-plan", +@@ -123,10 +123,10 @@ + "Cancel": "Annuler", + "Cc": "Cc", + "Change": "Modifier", - "Change Customer": "Changer de client", + "Change Customer": "Changer de membre", - "Previous Conversations": "Conversations précédentes", - "View outgoing emails": "Afficher les e-mails sortants", - "are forwarding": "acheminent", -@@ -403,7 +403,7 @@ - "To the First Message": "Vers le premier message", - "This is a bounce message.": "Ceci est un message de rebond.", - "This is a bounce message for :link": "Ceci est un message de rebond pour :lien", -- "Message not sent to customer": "Message non envoyé au client", -+ "Message not sent to customer": "Message non envoyé au membre", - "View log": "Afficher le journal", - "Message bounced (:link)": "Message renvoyé (:link)", - "This is a forwarded conversation.": "Il s'agit d'une conversation transférée.", -@@ -412,7 +412,7 @@ - "Edited by :whom :when": "Édité par :whom :when", - "Show original": "Afficher l'original", - "Hide": "Cacher", -- "Customer viewed :when": "Client vu :when", -+ "Customer viewed :when": "Membre vu :when", - "Start a conversation from this thread": "Démarrer une conversation à partir de ce fil", - "Show original message": "Afficher le message d'origine", - "Original Message": "Message d'origine", -@@ -456,8 +456,8 @@ - "A conversation is assigned to someone else": "Une conversation est assignée à quelqu'un d'autre", - "A conversation :person is following is updated": "Une conversation suivie par :person est mise à jour", - "A conversation I'm following is updated": "Une conversation que je suis est mise à jour", -- "Notify :person when a customer replies…": "Avertir :person lorsqu'un client répond…", -- "Notify me when a customer replies…": "M'avertir lorsqu'un client répond…", -+ "Notify :person when a customer replies…": "Avertir :person lorsqu'un membre répond…", -+ "Notify me when a customer replies…": "M'avertir lorsqu'un membre répond…", - "To an unassigned conversation": "À une conversation non assignée", - "To one of :person's conversations": "À une des conversations de :person", - "To one of my conversations": "À une de mes conversations", -@@ -466,7 +466,7 @@ - "Notify me when another :app_name user replies or adds a note…": "M'avertir lorsqu'un autre utilisateur :app_name répond ou ajoute une note…", - "User Permissions": "Autorisations utilisateur", - "Today": "Aujourd'hui", -- "Customers email this address for help (e.g. support@domain.com)": "Les clients utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", -+ "Customers email this address for help (e.g. support@domain.com)": "Les membres utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", - "Email Address": "Adresse e-mail", - "You can edit this later": "Vous pouvez modifier cela plus tard", - "Mailbox Name": "Nom de la boîte aux lettres", -@@ -493,7 +493,7 @@ - "Person Replying": "Personne qui répond", - "Email Header": "En-tête de l'e-mail", - "Please reply above this line": "Veuillez répondre au-dessus de cette ligne", -- "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un client.", -+ "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un membre.", - "Email Signature": "Signature e-mail", - "Delete the :mailbox_name mailbox?": "Supprimer la boîte aux lettres :mailbox_name ?", - "Delete mailbox": "Supprimer la boîte aux lettres", -@@ -531,7 +531,7 @@ - "Selected Users have access to this mailbox:": "Les utilisateurs sélectionnés ont accès à cette boîte aux lettres:", - "Administrators have access to all mailboxes and are not listed here.": "Les administrateurs ont accès à toutes les boîtes aux lettres et ne sont pas répertoriés ici.", - "Enable Auto Reply": "Activer la réponse automatique", -- "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un client envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au client. Une seule réponse automatique est envoyée par nouvelle conversation.", -+ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un membre envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au membre. Une seule réponse automatique est envoyée par nouvelle conversation.", - "Auto replies don't include your mailbox signature, so be sure to add your contact information if necessary.": "Les réponses automatiques n'incluent pas la signature de votre boîte aux lettres, assurez-vous d'ajouter vos coordonnées si nécessaire.", - "Empty Trash": "Vider la corbeille", - "Dashboard": "Tableau de bord", -@@ -543,7 +543,7 @@ - "Clear Log": "Effacer le journal", - "Log is empty": "Le journal est vide", - "Company Name": "Nom de l'entreprise", -- "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les clients. Il est uniquement utilisé pour suivre les conversations dans :app_name", -+ "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les membres. Il est uniquement utilisé pour suivre les conversations dans :app_name", - "Spread the Word": "Faire connaître", - "Add \"Powered by :app_name\" footer text to the outgoing emails to invite more developers to the project and make the application better.": "Ajoutez le texte \"Support propulsé par :app_name\" dans les emails envoyés pour inviter plus de développeurs au projet et améliorer l'application.", - "Open Tracking": "Suivi ouvert", -@@ -632,7 +632,7 @@ - "Full Name": "Nom Complet", - "Profile Photo (URL)": "Photo de profil (URL)", - "From name": "Du nom", + "Change address in mailbox settings": "Modifier l'adresse dans les paramètres de la boîte aux lettres", + "Change default redirect": "Modifier la redirection par défaut", - "Change the customer to :customer_email?": "Changer le client en :customer_email ?", + "Change the customer to :customer_email?": "Changer le membre en :customer_email ?", - "Invite email has been sent": "Un e-mail d'invitation a été envoyé", - "Invite email has been resent": "L'email d'invitation a été renvoyé", - "Reset this User's password?": "Réinitialiser le mot de passe de cet utilisateur?", -@@ -694,13 +694,13 @@ - "IMAP Folder To Save Outgoing Replies": "Dossier IMAP pour enregistrer les réponses sortantes", - "Include the last message": "Inclure le dernier message", - "Logout Users": "Déconnecter les utilisateurs", + "Change your password": "Changer votre mot de passe", + "Chat": "Tchat", + "Check Connection": "Vérifier la connexion", +@@ -182,7 +182,7 @@ + "Create a New User": "Créer un nouvel utilisateur", + "Create a Password": "Créer un mot de passe", + "Create a mailbox": "Créer une boîte de réception", +- "Create a new customer": "Créer un nouveau client", ++ "Create a new customer": "Créer un nouveau membre", + "Create symlink manually": "Créer un lien symbolique manuellement", + "Created At": "Créé à", + "Created by :person": "Créé par :person", +@@ -190,14 +190,14 @@ + "Current Password": "Mot de passe actuel", + "Custom From Name": "Nom de l'expéditeur personnalisé", + "Custom Name": "Nom personnalisé", +- "Customer": "Client", +- "Customer Name": "Nom du client", +- "Customer Profile": "Profil client", +- "Customer changed": "Client changé", +- "Customer saved successfully.": "Client enregistré avec succès.", +- "Customer viewed :when": "Client vu :when", +- "Customers": "Clients", +- "Customers email this address for help (e.g. support@domain.com)": "Les clients utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", ++ "Customer": "Membre", ++ "Customer Name": "Nom du membre", ++ "Customer Profile": "Profil membre", ++ "Customer changed": "Membre changé", ++ "Customer saved successfully.": "Membre enregistré avec succès.", ++ "Customer viewed :when": "Membre vu :when", ++ "Customers": "Membres", ++ "Customers email this address for help (e.g. support@domain.com)": "Les membres utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", + "Daily": "Quotidien", + "Dashboard": "Tableau de bord", + "Date": "Date", +@@ -247,15 +247,15 @@ + "Edit User": "Modifier l'utilisateur", + "Edited by :whom :when": "Édité par :whom :when", + "Email": "Email", +- "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre client : :a_begin:customer:a_end.", ++ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre membre : :a_begin:customer:a_end.", + "Email Address": "Adresse e-mail", + "Email Alerts For Administrators": "Envoyez des alertes par e-mail aux administrateurs", + "Email Header": "En-tête de l'e-mail", + "Email Signature": "Signature e-mail", + "Email Template": "Modèle d'e-mail", + "Email passed for delivery. If you don't receive a test email, check your mail server logs.": "E-mail transmis pour livraison. Si vous ne recevez pas d'e-mail de test, consultez les journaux de votre serveur de messagerie.", +- "Email to customer": "Courriel au client", +- "Emails to Customers": "Emails aux clients", ++ "Email to customer": "Courriel au membre", ++ "Emails to Customers": "Emails aux membres", + "Empty Trash": "Vider la corbeille", + "Empty license key": "Clé de licence vide", + "Enable Auto Reply": "Activer la réponse automatique", +@@ -276,7 +276,7 @@ + "Error occurred. Please try again later.": "Erreur est survenue. Veuillez réessayer plus tard.", + "Error occurred. Please try again or try another :%a_start%update method:%a_end%": "Erreur est survenue. Veuillez réessayer ou en essayer une autre :%a_start% méthode de mise à jour:%a_end%", + "Error sending alert": "Erreur lors de l'envoi de l'alerte", +- "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au client", ++ "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au membre", + "Error sending email to the user who replied to notification from wrong email": "Erreur lors de l'envoi d'un e-mail à l'utilisateur qui a répondu à la notification d'un mauvais e-mail", + "Error sending email to user": "Erreur lors de l'envoi d'un e-mail à l'utilisateur", + "Error sending invitation email to user": "Erreur lors de l'envoi d'un e-mail d'invitation à l'utilisateur", +@@ -419,7 +419,7 @@ + "Message bounced (:link)": "Message renvoyé (:link)", + "Message cannot be empty": "Le message ne peut pas être vide", + "Message has been already sent. Please discard this draft.": "Le message a déjà été envoyé. Veuillez effacer ce brouillon.", +- "Message not sent to customer": "Message non envoyé au client", ++ "Message not sent to customer": "Message non envoyé au membre", + "Method": "Méthode", + "Migrate DB": "Migrer la base de données", + "Mine": "Mes conversations", +@@ -439,7 +439,7 @@ + "My Apps": "Mes Applications", + "My open conversations": "Mes conversations ouvertes", + "Name": "Nom", - "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un client consulte votre e-mail.", + "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un membre consulte votre e-mail.", - "Prevent user from logging in": "Refuser la connexion de l'utilisateur", - "Queued and failed jobs are cleaned automatically once in a while. No need to worry or delete them manually.": "Les travaux en file d'attente et ayant échoué sont nettoyés automatiquement de temps en temps. Pas besoin de s'inquiéter ou de les supprimer manuellement.", - "Send full conversation history": "Envoyer l'historique complet de conversation", - "These folders must be writable by web server user (:user).": "Ces dossiers doivent être accessibles en écriture par l'utilisateur du serveur Web (:user).", - "These settings are used to send system emails (alerts to admin and invitation emails to users).": "Ces paramètres sont utilisés pour envoyer des e-mails système (alertes à l'administrateur et e-mails d'invitation aux utilisateurs).", + "New Conversation": "Nouvelle conversation", + "New Mailbox": "Nouvelle boîte de réception", + "New Password": "Nouveau mot de passe", +@@ -451,8 +451,8 @@ + "Next active conversation": "Conversation active suivante", + "No": "Non", + "No activations left for this license key": "Il ne reste aucune activation pour cette clé de licence", +- "No customers found": "Aucun client trouvé", +- "No customers found. Would you like to create one?": "Aucun client trouvé. Souhaitez-vous en créer un?", ++ "No customers found": "Aucun membre trouvé", ++ "No customers found. Would you like to create one?": "Aucun membre trouvé. Souhaitez-vous en créer un?", + "No invite was found. Please contact your administrator to have a new invite email sent.": "Aucune invitation trouvée. Veuillez contacter votre administrateur pour qu'il envoie une nouvelle invitation par email.", + "Non-writable files found": "Fichiers non-inscriptibles trouvés", + "None": "Aucun", +@@ -471,10 +471,10 @@ + "Notifications": "Notifications", + "Notifications saved successfully": "Notifications enregistrées", + "Notifications will start showing up here soon": "Les notifications commenceront bientôt à apparaître ici", +- "Notify :person when a customer replies…": "Avertir :person lorsqu'un client répond…", ++ "Notify :person when a customer replies…": "Avertir :person lorsqu'un membre répond…", + "Notify :person when another :app_name user replies or adds a note…": "Notifier :person quand un autre utilisateur :app_name répond ou ajoute une note…", + "Notify :person when…": "Avertir :person lorsque…", +- "Notify me when a customer replies…": "M'avertir lorsqu'un client répond…", ++ "Notify me when a customer replies…": "M'avertir lorsqu'un membre répond…", + "Notify me when another :app_name user replies or adds a note…": "M'avertir lorsqu'un autre utilisateur :app_name répond ou ajoute une note…", + "Notify me when…": "Prévenez-moi quand…", + "Number": "Numéro", +@@ -587,7 +587,7 @@ + "Search": "Recherche", + "Search Conversation by Number": "Rechercher une conversation par identifiant", + "Search Users": "Rechercher des utilisateurs", +- "Search for a customer by name or email": "Rechercher un client par nom ou par e-mail", ++ "Search for a customer by name or email": "Rechercher un membre par nom ou par e-mail", + "See logs": "Voir les journaux", + "Select Mailbox": "Sélectionnez une boîte aux lettres", + "Selected Users have access to this mailbox:": "Les utilisateurs sélectionnés ont accès à cette boîte aux lettres:", +@@ -613,7 +613,7 @@ + "Sending": "Envoi en cours", + "Sending Emails": "Sending Emails", + "Sending can not be undone": "L'envoie ne peut être annulé", +- "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux clients et aux agents de support", ++ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux membre et aux agents de support", + "Sendmail": "Exécutable Sendmail", + "Separate each email with a comma.": "Séparez chaque e-mail par une virgule", + "Server": "Serveur", +@@ -670,11 +670,11 @@ + "This is a test mail sent by :app_name. It means that outgoing email settings of your :mailbox mailbox are fine.": "Il s'agit d'un mail de test envoyé par :app_name. Cela signifie que les paramètres de courrier électronique sortant de votre boîte aux lettres :mailbox sont corrects.", + "This is a test system mail sent by :app_name. It means that mail settings are fine.": "Il s'agit d'un e-mail du système de test envoyé par :app_name. Cela signifie que les paramètres de messagerie sont corrects.", + "This may take several minutes": "Cela peut prendre plusieurs minutes", +- "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les clients. Il est uniquement utilisé pour suivre les conversations dans :app_name", ++ "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les membres. Il est uniquement utilisé pour suivre les conversations dans :app_name", + "This password is incorrect.": "Ce mot de passe est incorrect.", - "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au client. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", + "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au membre. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", - "Try to :%a_start%clear cache:%a_end% to force command to start.": "Essayez de :%a_start%vider le cache:%a_end% pour forcer le démarrage de la commande.", - "User invite": "Invitation de l'utilisateur", - "You can adjust alert settings :%a_begin%here:%a_end%": "Vous pouvez ajuster les paramètres d'alerte :%a_begin%ici:%a_end%", + "This setting gives you control over what page loads after you perform an action (send a reply, add a note, change conversation status or assignee).": "Ce paramètre vous permet de contrôler la page qui se charge après avoir effectué une action (envoyer une réponse, ajouter une note, etc.).", +- "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un client.", ++ "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un membre.", + "Thread is not in a draft state": "Le fil n'est pas à l'état de brouillon", + "Thread not found": "Fil non trouvé", + "Time Format": "Format de l'heure", +@@ -751,7 +751,7 @@ + "Welcome to :company_name!": "Bienvenue chez :company_name !", + "Welcome to :company_name, :first_name!": "Bienvenue chez :company_name, :first_name!", + "Welcome to the team!": "Bienvenue dans l'équipe !", +- "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un client envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au client. Une seule réponse automatique est envoyée par nouvelle conversation.", ++ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un membre envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au membre. Une seule réponse automatique est envoyée par nouvelle conversation.", + "Which mailboxes will user use?": "Quelles boîtes aux lettres l'utilisateur utilisera-t-il?", + "Who Else Will Use This Mailbox": "Qui d'autre utilisera cette boîte aux lettres", + "Work": "Professionnel", From d80cb99ecc7eb59b1d61c5cdd7be03d6dec3e0f4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 12 Apr 2024 22:56:54 -0400 Subject: [PATCH 189/738] user/freescout: update post-install update message --- user/freescout/APKBUILD | 2 +- user/freescout/freescout.post-install | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index b70ffbd..256d86a 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freescout pkgver=1.8.134 -pkgrel=0 +pkgrel=1 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install index b2f164c..467962b 100755 --- a/user/freescout/freescout.post-install +++ b/user/freescout/freescout.post-install @@ -16,8 +16,7 @@ if [ "${0##*.}" = 'post-upgrade' ]; then * * To finish Freescout upgrade run: * - * freescout-manage migrate - * freescout-manage config:cache + * freescout-manage freescout:after-app-update * EOF else From 4f3a3fca13697737c2b87a78552d0a42a1e179a1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 13 Apr 2024 10:37:06 -0400 Subject: [PATCH 190/738] user/freescout: upgrade to 1.8.135 --- user/freescout/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 256d86a..681d038 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,8 +1,8 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.134 -pkgrel=1 +pkgver=1.8.135 +pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" url="freescout.net" @@ -75,7 +75,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -9baee50b7a8f2909f3635ffc0eb381c6bd14b62cf9e4001fb8aa22b401482e4c19fb0c47c79944ed64159f9f5581fbf96abeb0cc8971263848e5463e8cecfc3b freescout-1.8.134.tar.gz +72b50f4d44607575aa507fe8ef9977eee126ca6a9912b127be54e9da05e3d7d3b770dd31acb20c03aeb5c7f951ffeb24363719d36684db68c2afeed11bf3eb15 freescout-1.8.135.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh 3416da98d71aea5a7093913ea34e783e21ff05dca90bdc5ff3d00c548db5889f6d0ec98441cd65ab9f590be5cd59fdd0d7f1c98b5deef7bb3adbc8db435ec9bf rename-client-to-membre-fr-en.patch From a8fdc84a19778cd4d0b07a8f2431db4db34ecbed Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:10:44 -0400 Subject: [PATCH 191/738] user/py3-crispy-bootstrap4: drop for in aports --- user/py3-crispy-bootstrap4/APKBUILD | 32 ----------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-crispy-bootstrap4/APKBUILD diff --git a/user/py3-crispy-bootstrap4/APKBUILD b/user/py3-crispy-bootstrap4/APKBUILD deleted file mode 100644 index 1fdbe40..0000000 --- a/user/py3-crispy-bootstrap4/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-crispy-bootstrap4 -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=crispy-bootstrap4 -pkgver=2023.1 -pkgrel=0 -pkgdesc="Bootstrap4 template pack for django-crispy-forms" -url="https://pypi.org/project/crispy-bootstrap4/" -arch="noarch" -license="MIT" -depends="python3 py3-django-crispy-forms" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/c/crispy-bootstrap4/crispy-bootstrap4-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -ad54a94280110804beee3c6fa06aa97648d6496d3b1d7819d145d3dafbae7f200610f610ffbd3449ed244e799be953a754c26622b50b2266d9f2d54d4a86d496 py3-crispy-bootstrap4-2023.1.tar.gz -" From c65f43304061a67668097f9eb649a0057feed12d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:10:59 -0400 Subject: [PATCH 192/738] user/py3-django-annoying: drop for in aports --- user/py3-django-annoying/APKBUILD | 32 ------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-django-annoying/APKBUILD diff --git a/user/py3-django-annoying/APKBUILD b/user/py3-django-annoying/APKBUILD deleted file mode 100644 index d380f43..0000000 --- a/user/py3-django-annoying/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-annoying -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-annoying -pkgver=0.10.6 -pkgrel=0 -pkgdesc="This is a django application that tries to eliminate annoying things in the Django framework." -url="https://pypi.python.org/project/django-annoying" -arch="noarch" -license="BSD" -depends="py3-django py3-six" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-annoying/django-annoying-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -7b676c1e5aff6b19ae5bb1ea279cc5e46e28b7adc0afe8e9fc80e72da02378e5264db854e9c48cdc243440193760691d5003c3400a9955bdbfb8d7c7325774ed py3-django-annoying-0.10.6.tar.gz -" From 1a7f5ae1c75b1eb691527ece74159ebac1ea0b41 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:32 -0400 Subject: [PATCH 193/738] user/py3-django-auth-ldap: drop for in aports --- user/py3-django-auth-ldap/APKBUILD | 32 ------------------------------ 1 file changed, 32 deletions(-) delete mode 100644 user/py3-django-auth-ldap/APKBUILD diff --git a/user/py3-django-auth-ldap/APKBUILD b/user/py3-django-auth-ldap/APKBUILD deleted file mode 100644 index d6f14df..0000000 --- a/user/py3-django-auth-ldap/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-auth-ldap -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-auth-ldap -pkgver=4.6.0 -pkgrel=0 -pkgdesc="Django LDAP authentication backend" -url="https://pypi.python.org/project/django-auth-ldap" -arch="noarch" -license="BSD" -depends="py3-django py3-ldap" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-auth-ldap/django-auth-ldap-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -fc3945fb9cece694b63661c8565d877bdc81e012e9b4e9a8f1840bd83f6effb525e36f40e5dd5018b43d2c7c72fcdd25a5c61bf35e6f0d05e70e830f69228498 py3-django-auth-ldap-4.6.0.tar.gz -" From c2992a5cc9ec1c0280c9b601e7492cded268b928 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:34 -0400 Subject: [PATCH 194/738] user/py3-django-cleanup: drop for in aports --- user/py3-django-cleanup/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 user/py3-django-cleanup/APKBUILD diff --git a/user/py3-django-cleanup/APKBUILD b/user/py3-django-cleanup/APKBUILD deleted file mode 100644 index 7d17c8d..0000000 --- a/user/py3-django-cleanup/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-cleanup -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-cleanup -pkgver=8.0.0 -pkgrel=0 -pkgdesc="Deletes old files." -url="https://pypi.python.org/project/django-cleanup" -arch="noarch" -license="MIT" -depends="py3-django" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-cleanup/django-cleanup-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} -sha512sums=" -c11ae07f47c1522afabf477a96e14efee2c86dfb139977bd60e6b293da12181979f1a35295d6bb4822fc0dbfcc2780253faa72ce291f1fdbb02436291c7866db py3-django-cleanup-8.0.0.tar.gz -" From ff9981e6ee6b2e34f5501ed39df1c8011b91fd4e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:35 -0400 Subject: [PATCH 195/738] user/py3-django-hcaptcha: drop for in aports --- user/py3-django-hcaptcha/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 user/py3-django-hcaptcha/APKBUILD diff --git a/user/py3-django-hcaptcha/APKBUILD b/user/py3-django-hcaptcha/APKBUILD deleted file mode 100644 index 63f063c..0000000 --- a/user/py3-django-hcaptcha/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-hcaptcha -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-hCaptcha -pkgver=0.2.0 -pkgrel=0 -pkgdesc="Django hCaptcha provides a simple way to protect your django forms using hCaptcha" -url="https://pypi.python.org/project/django-hCaptcha" -arch="noarch" -license="BSD-3-Clause" -depends="py3-django" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-hCaptcha/django-hCaptcha-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -2935b3e1ec2f76cf7cc872864febbb35bdfdd4e8428d6d2dc716f63c75764ede32d538971d8b7b262c49806527690d0664a4205568cc3d8370d8228d00e29dd7 py3-django-hcaptcha-0.2.0.tar.gz -" From b15e3982d8a2d8fccdf0c1ee901453f29444fec2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:37 -0400 Subject: [PATCH 196/738] user/py3-django-js-reverse: drop for in aports --- user/py3-django-js-reverse/APKBUILD | 37 ----------------------------- 1 file changed, 37 deletions(-) delete mode 100644 user/py3-django-js-reverse/APKBUILD diff --git a/user/py3-django-js-reverse/APKBUILD b/user/py3-django-js-reverse/APKBUILD deleted file mode 100644 index 07007fe..0000000 --- a/user/py3-django-js-reverse/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-js-reverse -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-js-reverse -pkgver=0.10.2 -pkgrel=0 -pkgdesc="Javascript url handling for Django that doesn't hurt." -url="https://pypi.python.org/project/django-js-reverse" -arch="noarch" -license="MIT" -depends="py3-django" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-js-reverse/django-js-reverse-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -prepare() { - default_prepare - touch $builddir/CHANGELOG.rst # expects this file for build -} - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -12ce6754d20129820b17365e92dc1fd28d17f6f766fa9e4913b38ff08bbad3dc13dccc07a1c33902f327f81aa3eb37c32fce86218b9b4729de8d16f284d9b1fd py3-django-js-reverse-0.10.2.tar.gz -" From d5f8abeccd1f4be09ef24216e46e7fd29792b79e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:38 -0400 Subject: [PATCH 197/738] user/py3-django-scopes: drop for in aports --- user/py3-django-scopes/APKBUILD | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-django-scopes/APKBUILD diff --git a/user/py3-django-scopes/APKBUILD b/user/py3-django-scopes/APKBUILD deleted file mode 100644 index 2b670f7..0000000 --- a/user/py3-django-scopes/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-scopes -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-scopes -pkgver=2.0.0 -pkgrel=0 -pkgdesc="Scope querys in multi-tenant django applications" -url="https://pypi.python.org/project/django-scopes" -arch="noarch" -license="Apache-2.0" -depends="py3-django" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-scopes/django-scopes-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -ff9b2337c84ba076209958effb326fd5827547acd86351cc7ac9b15220d0c689c153776a07ae9c0d15f3fba034430023df25197d98a095f005f7edeab565c08f py3-django-scopes-2.0.0.tar.gz -" From 39a4d6ed54246cee4ed6fac2f8f826cb6f3de338 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:40 -0400 Subject: [PATCH 198/738] user/py3-django-webpack-loader: drop for in aports --- user/py3-django-webpack-loader/APKBUILD | 32 ------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-django-webpack-loader/APKBUILD diff --git a/user/py3-django-webpack-loader/APKBUILD b/user/py3-django-webpack-loader/APKBUILD deleted file mode 100644 index a85f7c8..0000000 --- a/user/py3-django-webpack-loader/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-webpack-loader -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-webpack-loader -pkgver=3.0.0 -pkgrel=0 -pkgdesc="Transparently use webpack with django" -url="https://pypi.python.org/project/django-webpack-loader" -arch="noarch" -license="MIT" -depends="py3-django" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-webpack-loader/django-webpack-loader-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -1e081261859ad7f51563856c81535f8e052004b856e988d3d8ec57c45ee7643324cc7bae6558f8391fa90038eef1765dde622b337821b05f04fb30d7e3d93a07 py3-django-webpack-loader-3.0.0.tar.gz -" From 09dcf012bf31b870b3630ff72cdf8524feffcca8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:42 -0400 Subject: [PATCH 199/738] user/py3-drf-writable-nested: drop for in aports --- user/py3-drf-writable-nested/APKBUILD | 33 --------------------------- 1 file changed, 33 deletions(-) delete mode 100644 user/py3-drf-writable-nested/APKBUILD diff --git a/user/py3-drf-writable-nested/APKBUILD b/user/py3-drf-writable-nested/APKBUILD deleted file mode 100644 index 3ecfd01..0000000 --- a/user/py3-drf-writable-nested/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-drf-writable-nested -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=drf-writable-nested -pkgver=0.7.0 -pkgrel=0 -pkgdesc="Writable nested helpers for django-rest-framework's serializers" -url="https://pypi.python.org/project/drf-writable-nested" -arch="noarch" -license="MIT" -depends="py3-django-rest-framework" -checkdepends="py3-pytest py3-pytest-cov py3-pytest-django" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://github.com/beda-software/drf-writable-nested/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - - -sha512sums=" -674e2206a8dad2f61f6eed9bbf137593bacbceb4789c5e46e0e5a965f172daac76878e13d3f1492b2a2d8bc97d310b0625b1fd65de19f92d7f71153e9f5c3089 py3-drf-writable-nested-0.7.0.tar.gz -" From a2bd40cb209e9018d2c829af1fd46d1190c2f1c6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:44 -0400 Subject: [PATCH 200/738] user/py3-extruct: drop for in aports --- user/py3-extruct/APKBUILD | 41 --------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 user/py3-extruct/APKBUILD diff --git a/user/py3-extruct/APKBUILD b/user/py3-extruct/APKBUILD deleted file mode 100644 index 92e5b07..0000000 --- a/user/py3-extruct/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-extruct -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=extruct -pkgver=0.16.0 -pkgrel=0 -pkgdesc="Extract embedded metadata from HTML markup" -url="https://pypi.python.org/project/extruct" -license="BSD-3-Clause" -arch="noarch" -depends=" - py3-lxml - py3-pyrdfa3 - py3-mf2py - py3-w3lib - py3-html-text - py3-six - py3-jstyleson - py3-requests - " -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/e/extruct/extruct-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -da645863d3b421418871cdbbf2b970458c124c9f078aa013b5ef6147ddbebc3ef39dfb7b668dbb35aac8b47f6417525d16a40d0d5cb7e56aa0e4edf779a02a24 py3-extruct-0.16.0.tar.gz -" From feaf0d342b9f35703c5c686dd3c120566c5afc23 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:46 -0400 Subject: [PATCH 201/738] user/py3-html-text: drop for in aports --- user/py3-html-text/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 user/py3-html-text/APKBUILD diff --git a/user/py3-html-text/APKBUILD b/user/py3-html-text/APKBUILD deleted file mode 100644 index cc4a1f7..0000000 --- a/user/py3-html-text/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-html-text -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=html_text -pkgver=0.5.2 -pkgrel=0 -pkgdesc="Extract text from HTML" -url="https://pypi.python.org/project/html-rext" -arch="noarch" -license="MIT" -depends="py3-lxml" -checkdepends="py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/h/html_text/html_text-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} -sha512sums=" -95a4f216329838850fbb2d72a07e953bd115a4e8a8b919dc3cc431d4c1781f2287a6cdf5c7d895caaff18c0b29cd2842bf42852b41d46d009062f94523f1bcde py3-html-text-0.5.2.tar.gz -" From caa4af531837465c430cf9c313ce1b68cb46f7df Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:47 -0400 Subject: [PATCH 202/738] user/py3-jstyleson: drop for in aports --- user/py3-jstyleson/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 user/py3-jstyleson/APKBUILD diff --git a/user/py3-jstyleson/APKBUILD b/user/py3-jstyleson/APKBUILD deleted file mode 100644 index bdd6573..0000000 --- a/user/py3-jstyleson/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-jstyleson -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=jstyleson -pkgver=0.0.2 -pkgrel=0 -pkgdesc="Library to parse JSON with js-style comments." -url="https://pypi.python.org/project/jstylejson" -arch="noarch" -license="MIT" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/j/jstyleson/jstyleson-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -99285536538f3cd70e2cee505826f335e207b577f361f5996589578eef06b8b29fd25fa254c150ef40618cca19554fe329750c123be0a9abf8d19cee47369a54 py3-jstyleson-0.0.2.tar.gz -" From 4219b5119062be80ed32303a6121847d2403a4b9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:49 -0400 Subject: [PATCH 203/738] user/py3-onelogin: drop for in aports --- user/py3-onelogin/APKBUILD | 50 -------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 user/py3-onelogin/APKBUILD diff --git a/user/py3-onelogin/APKBUILD b/user/py3-onelogin/APKBUILD deleted file mode 100644 index 8d91856..0000000 --- a/user/py3-onelogin/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-onelogin -_pkgname=onelogin-python-sdk -pkgver=3.1.6 -pkgrel=0 -pkgdesc="OpenAPI Specification for OneLogin" -url="https://github.com/onelogin/onelogin-python-sdk" -license="MIT" -arch="noarch" -depends=" - py3-dateutil - py3-urllib3 - py3-frozendict - py3-typing-extensions - py3-certifi - " -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel - py3-installer - " -checkdepends=" - py3-pytest - " -source="$pkgname-$pkgver.tar.gz::https://github.com/onelogin/onelogin-python-sdk/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver -options="!check" # Failing test unit -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -44fccb05e82c55db82617c33cc0e2287699969d9a7f12a4992c0cd35c28b2215c66bef37849e45b5506df11524d1b143a2ab3ae16f001af51f0135c92d0801a4 py3-onelogin-3.1.6.tar.gz -" - From fbde65756d871801501dfb46be3d6d13471fc0bc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:50 -0400 Subject: [PATCH 204/738] user/py3-pyppeteer: drop for in aports --- user/py3-pyppeteer/APKBUILD | 40 ------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 user/py3-pyppeteer/APKBUILD diff --git a/user/py3-pyppeteer/APKBUILD b/user/py3-pyppeteer/APKBUILD deleted file mode 100644 index c477207..0000000 --- a/user/py3-pyppeteer/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=py3-pyppeteer -_pkgreal=pyppeteer -pkgver=1.0.2 -pkgrel=0 -pkgdesc="Headless chrome/chromium automation library (unofficial port of puppeteer)" -url="https://pypi.python.org/project/pyppeteer" -arch="noarch" -license="MIT" -depends=" - chromium - py3-appdirs - py3-certifi - py3-importlib-metadata - py3-pyee - py3-tqdm - py3-urllib3 - py3-websockets - " -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pyppeteer/pyppeteer-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - dist/*.whl -} - -sha512sums=" -a73d00fa1c94172891d44411614aa16f517aa5babb4d7cb220cac8c4135a78c6f25463c768dae37c2186df658d8c185cb2ac5cc2dc943d24b3b212ccc037a532 py3-pyppeteer-1.0.2.tar.gz -" From 5a992237d8ccc62fcf5a85d6fd1a4d908c48ccfe Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:52 -0400 Subject: [PATCH 205/738] user/py3-pytest-factoryboy: drop for in aports --- user/py3-pytest-factoryboy/APKBUILD | 32 ----------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-pytest-factoryboy/APKBUILD diff --git a/user/py3-pytest-factoryboy/APKBUILD b/user/py3-pytest-factoryboy/APKBUILD deleted file mode 100644 index 0f9370f..0000000 --- a/user/py3-pytest-factoryboy/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-pytest-factoryboy -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=pytest_factoryboy -pkgver=2.6.0 -pkgrel=0 -pkgdesc="Factory Boy support for pytest." -url="https://pypi.python.org/project/pytest-factoryboy" -arch="noarch" -license="MIT" -depends="py3-pytest py3-inflection py3-factory-boy py3-typing-extensions" -checkdepends="py3-tox py3-coverage py3-mypy" -makedepends="py3-setuptools py3-gpep517 py3-wheel py3-poetry-core" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pytest_factoryboy/pytest_factoryboy-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -083ad71de9d61ca29e09b7f1c243f36a75716defbc9639c03719ef6eedf73def6fe5803b50de91bf3d5c5892ff1c082dc6cc960fa4e8b6e9a616bbfac871e4ef py3-pytest-factoryboy-2.6.0.tar.gz -" From 853e422ff0ccbe53947051427359ff725b5da24c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:53 -0400 Subject: [PATCH 206/738] user/py3-pytube: drop for in aports --- user/py3-pytube/APKBUILD | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-pytube/APKBUILD diff --git a/user/py3-pytube/APKBUILD b/user/py3-pytube/APKBUILD deleted file mode 100644 index 80825f9..0000000 --- a/user/py3-pytube/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-pytube -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=pytube -pkgver=15.0.0 -pkgrel=0 -pkgdesc="Python 3 library for downloading YouTube Videos." -url="https://pypi.python.org/project/pytube" -arch="noarch" -license="Unlicense" -depends="python3" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pytube/pytube-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -68174a3392e5f2ff3059dc1f301783b1ce0a0334044b9e96b6066052066b3c3cee93bfc87449d10589795b3e43055cf6d629f1cac21bfc9ea2c4249b5f264c26 py3-pytube-15.0.0.tar.gz -" From 9969287e44cf81eb3f6d345237002352f40e10af Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:55 -0400 Subject: [PATCH 207/738] user/py3-recipe-scrapers: drop for in aports --- user/py3-recipe-scrapers/APKBUILD | 32 ------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-recipe-scrapers/APKBUILD diff --git a/user/py3-recipe-scrapers/APKBUILD b/user/py3-recipe-scrapers/APKBUILD deleted file mode 100644 index 8819f6f..0000000 --- a/user/py3-recipe-scrapers/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-recipe-scrapers -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=recipe_scrapers -pkgver=14.53.0 -pkgrel=0 -pkgdesc="Python package, scraping recipes from all over the internet" -url="https://pypi.python.org/project/recipe-scrapers" -arch="noarch" -license="MIT" -depends="py3-beautifulsoup4 py3-extruct py3-isodate py3-requests" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/r/recipe_scrapers/recipe_scrapers-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -5a8f7ac802c193c12ce85000fbc83d49bd82080a31e5bb0e9d9de51a8f5053d4e98c69f927b9d518846131151ca7857ce3880c568dc80c14a21f621ee6d69f24 py3-recipe-scrapers-14.53.0.tar.gz -" From 9ed9fda2acb56db0a18ad7ba913f6795977a9b01 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:56 -0400 Subject: [PATCH 208/738] user/py3-webdavclient3: drop for in aports --- user/py3-webdavclient3/APKBUILD | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 user/py3-webdavclient3/APKBUILD diff --git a/user/py3-webdavclient3/APKBUILD b/user/py3-webdavclient3/APKBUILD deleted file mode 100644 index 798cc69..0000000 --- a/user/py3-webdavclient3/APKBUILD +++ /dev/null @@ -1,32 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-webdavclient3 -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=webdavclient3 -pkgver=3.14.6 -pkgrel=0 -pkgdesc="WebDAV client" -url="https://pypi.python.org/project/webdavclient3" -arch="noarch" -license="MIT" -depends="py3-requests py3-lxml py3-dateutil" -checkdepends="py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/w/webdavclient3/webdavclient3-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -8561fc5fbfd4b0a5e65e8291ee5994aa941ceb586386a14de9f80cf4e3c12be88207c90b6fa991fbd690291019e45d2937e8a4c8fd19891d53d68de430ef9d9e py3-webdavclient3-3.14.6.tar.gz -" From faccdf4ebfd22d6885ffb667ec8d7c0a4d815d57 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:57 -0400 Subject: [PATCH 209/738] user/xmlsec: drop for in aports --- user/xmlsec/APKBUILD | 54 -------------------------------------------- 1 file changed, 54 deletions(-) delete mode 100644 user/xmlsec/APKBUILD diff --git a/user/xmlsec/APKBUILD b/user/xmlsec/APKBUILD deleted file mode 100644 index c513e27..0000000 --- a/user/xmlsec/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Contributor: Sander Maijers -# Maintainer: Sander Maijers -pkgname=xmlsec -pkgver=1.2.37 -pkgrel=0 -pkgdesc="C based implementation for XML Signature Syntax and Processing and XML Encryption Syntax and Processing" -url="https://github.com/lsh123/xmlsec/" -arch="all" -license="MIT" -makedepends=" - libtool - libxml2-dev - libxslt-dev - nss-dev - openssl-dev>3 - " -checkdepends="nss-tools" -options="libtool !check" # disable tests til https://github.com/lsh123/xmlsec/issues/308 is fixed -subpackages="$pkgname-nss $pkgname-dev $pkgname-doc" -source="https://github.com/lsh123/xmlsec/releases/download/xmlsec-${pkgver//./_}/xmlsec1-$pkgver.tar.gz" -builddir="$srcdir/xmlsec1-$pkgver" - -build() { - ./configure \ - --build=$CBUILD \ - --host=$CHOST \ - --prefix=/usr \ - --disable-static \ - --enable-pkgconfig \ - --with-openssl=/usr \ - --without-gnutls \ - --without-gcrypt \ - --with-default-crypto=openssl - make -} - -check() { - make -k check -} - -package() { - make DESTDIR="$pkgdir" install -} - -nss() { - pkgdesc="xmlsec nss plugin" - install_if="$pkgname=$pkgver-r$pkgrel nss" - - amove usr/lib/libxmlsec1-nss.so* -} - -sha512sums=" -99220cb28a346ffac0023f9f177d6a7be3ddcea04bea434b7dc926c1f0aaa5564d75f74f92896ac100179c04d77e001f688ddf46fed4e0a0b4f20b7b87c24900 xmlsec1-1.2.37.tar.gz -" From 1d098bcd92d0826d3557df7616ff4a7ed455389a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:29:59 -0400 Subject: [PATCH 210/738] user/py3-pyrdfa3: drop for in aports --- user/py3-pyrdfa3/APKBUILD | 36 -------------------------------- user/py3-pyrdfa3/fix-build.patch | 15 ------------- 2 files changed, 51 deletions(-) delete mode 100644 user/py3-pyrdfa3/APKBUILD delete mode 100644 user/py3-pyrdfa3/fix-build.patch diff --git a/user/py3-pyrdfa3/APKBUILD b/user/py3-pyrdfa3/APKBUILD deleted file mode 100644 index 377b31d..0000000 --- a/user/py3-pyrdfa3/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-pyrdfa3 -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=pyRdfa3 -pkgver=3.5.3 -pkgrel=0 -pkgdesc="pyRdfa Libray" -url="https://pypi.python.org/project/pyrdfa3" -license="W3C-20150513" -arch="noarch" -depends="py3-rdflib py3-html5lib py3-isodate" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source=" - $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/pyRdfa3/pyRdfa3-$pkgver.tar.gz - fix-build.patch - " -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -98e931a1af7edcfe80f35f3a6b50b0afa8782a3bdbbee6bb609f7e474099273871c9927fcdb3a9c59c8feff5756ddd6bfac3a900bc536f22ce247c7900769b01 py3-pyrdfa3-3.5.3.tar.gz -62d5c95c69840884e8bf0b8c0d0c30226f96b5196285317b84a1277d4fcdb79ada4a2f7c7ce3b4bcaf8dbeeb0438b580ae08b2798d70d3f46d76e135890d7a0f fix-build.patch -" diff --git a/user/py3-pyrdfa3/fix-build.patch b/user/py3-pyrdfa3/fix-build.patch deleted file mode 100644 index 640808e..0000000 --- a/user/py3-pyrdfa3/fix-build.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/setup.py.orig b/setup.py -index 1b004e4..bb7da12 100644 ---- a/setup.py.orig -+++ b/setup.py -@@ -29,8 +29,8 @@ setup(name="pyRdfa3", - 'rdfa1.1 = pyRdfa.rdflibparsers:RDFaParser', - 'application/svg+xml = pyRdfa.rdflibparsers:RDFaParser', - 'application/xhtml+xml = pyRdfa.rdflibparsers:RDFaParser', -- 'hturtle = pyRdfa.rdflibparsers:HTurtleParser' -- 'html = pyRdfa.rdflibparsers:StructuredDataParser' -+ 'hturtle = pyRdfa.rdflibparsers:HTurtleParser', -+ 'html = pyRdfa.rdflibparsers:StructuredDataParser', - 'html/text = pyRdfa.rdflibparsers:StructuredDataParser' - ], - } From a9b84f6a7d899835ff7d704c7b78034b00d3c53b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:00 -0400 Subject: [PATCH 211/738] user/py3-django-autocomplete-light: drop for in aports --- user/py3-django-autocomplete-light/APKBUILD | 33 --------------------- 1 file changed, 33 deletions(-) delete mode 100644 user/py3-django-autocomplete-light/APKBUILD diff --git a/user/py3-django-autocomplete-light/APKBUILD b/user/py3-django-autocomplete-light/APKBUILD deleted file mode 100644 index cf8f19f..0000000 --- a/user/py3-django-autocomplete-light/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-autocomplete-light -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-autocomplete-light -pkgver=3.9.7 -pkgrel=0 -pkgdesc="Fresh autocompletes for Django" -url="https://pypi.python.org/project/django-autocomplete-light" -arch="noarch" -license="MIT" -depends="python3" -depends="py3-django py3-six" -checkdepends="python3-dev" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/d/django-autocomplete-light/django-autocomplete-light-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -c3ddb6870bce2b9bd6912c24bf843945af2b9c6a9477d1e45d4a7c4a9e16dca10e68a4c741cd2448c1c5eb73278d7d963d839769740b8dc61a21ec9fdbecc45a py3-django-autocomplete-light-3.9.7.tar.gz -" From 33f1b837de5e7f5f54bee9ca0f1f42438fabf8d5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:16 -0400 Subject: [PATCH 212/738] backports/py3-a2wsgi: drop for in community --- backports/py3-a2wsgi/APKBUILD | 40 -------------------------- backports/py3-a2wsgi/pdm-backend.patch | 12 -------- 2 files changed, 52 deletions(-) delete mode 100644 backports/py3-a2wsgi/APKBUILD delete mode 100644 backports/py3-a2wsgi/pdm-backend.patch diff --git a/backports/py3-a2wsgi/APKBUILD b/backports/py3-a2wsgi/APKBUILD deleted file mode 100644 index 3c9dcd4..0000000 --- a/backports/py3-a2wsgi/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Patrycja Rosa -pkgname=py3-a2wsgi -pkgver=1.8.0 -pkgrel=0 -pkgdesc="Convert WSGI app to ASGI app or ASGI app to WSGI app" -url="https://github.com/abersheeran/a2wsgi" -arch="noarch" -license="Apache-2.0" -depends="python3" -makedepends="py3-gpep517 py3-pdm-backend py3-wheel" -checkdepends="py3-pytest py3-httpx py3-pytest-asyncio" -subpackages="$pkgname-pyc" -source="https://github.com/abersheeran/a2wsgi/archive/refs/tags/v$pkgver/a2wsgi-$pkgver.tar.gz" -builddir="$srcdir/a2wsgi-$pkgver" - -case "$CARCH" in - # test suite blocked by py3-httpx - armhf|ppc64le) options="!check" ;; -esac - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -0c3a45ea279e2c104a52a7b70780de7a055312e857b712b534020a2c9f43b62b5d60639b5ce721c5e3717f0315c58496134813772613135b22111905df10d5ad a2wsgi-1.8.0.tar.gz -" diff --git a/backports/py3-a2wsgi/pdm-backend.patch b/backports/py3-a2wsgi/pdm-backend.patch deleted file mode 100644 index c768253..0000000 --- a/backports/py3-a2wsgi/pdm-backend.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/pyproject.toml b/pyproject.toml -index 2e67514..c7f3b40 100644 ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -35,5 +35,5 @@ benchmark = [ - includes = ["a2wsgi"] - - [build-system] --build-backend = "pdm.pep517.api" --requires = ["pdm-pep517>=1.0.0"] -+build-backend = "pdm.backend" -+requires = ["pdm-backend>=1.0.0"] From c280d170eeec0431549ffa9c89ed1cc4e43e0bd1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:17 -0400 Subject: [PATCH 213/738] backports/py3-httptools: drop for in community --- backports/py3-httptools/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 backports/py3-httptools/APKBUILD diff --git a/backports/py3-httptools/APKBUILD b/backports/py3-httptools/APKBUILD deleted file mode 100644 index 21e2edc..0000000 --- a/backports/py3-httptools/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Michał Polański -# Maintainer: Michał Polański -pkgname=py3-httptools -pkgver=0.6.1 -pkgrel=0 -pkgdesc="Fast HTTP parser" -url="https://github.com/MagicStack/httptools" -license="MIT" -arch="all" -makedepends="py3-setuptools python3-dev cython http-parser-dev llhttp-dev" -checkdepends="py3-pytest py3-aiohttp py3-openssl py3-psutil" -subpackages="$pkgname-pyc" -source="https://github.com/MagicStack/httptools/archive/v$pkgver/py3-httptools-$pkgver.tar.gz" -builddir="$srcdir/httptools-$pkgver" - -build() { - python3 setup.py build build_ext --inplace \ - --use-system-http-parser --use-system-llhttp -} - -check() { - PYTHONPATH="$(echo "$PWD"/build/lib.linux-*)" pytest -} - -package() { - python3 setup.py install --root="$pkgdir" --skip-build -} - -sha512sums=" -28dc7e91dd15d9b26b1136428b8de2aaaaa3746d40aafce8e4f8ee68ec4b7f7e95a2677904810e34cd2aa1dd3738c43eef7497cbb751648d41929dc38927c426 py3-httptools-0.6.1.tar.gz -" From cd8c8dc55de69de3c4694324e7d06a162e26da15 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:19 -0400 Subject: [PATCH 214/738] backports/py3-validators: drop for in community --- backports/py3-validators/APKBUILD | 35 ------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 backports/py3-validators/APKBUILD diff --git a/backports/py3-validators/APKBUILD b/backports/py3-validators/APKBUILD deleted file mode 100644 index b4d0dd2..0000000 --- a/backports/py3-validators/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Leo -# Maintainer: -pkgname=py3-validators -pkgver=0.20.0 -pkgrel=0 -pkgdesc="Python3 Data Validation for Humans" -url="https://github.com/python-validators/validators" -arch="noarch" -license="MIT" -depends="py3-decorator py3-six" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-isort py3-pytest py3-flake8" -subpackages="$pkgname-pyc" -source="https://github.com/python-validators/validators/archive/$pkgver/py3-validators-$pkgver.tar.gz" -builddir="$srcdir/validators-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" .dist/*.whl -} - -sha512sums=" -45a07c061022da453c31fc946950be3a701f36afbf0e0eb82b91f4bdb26c4d2d0ab47f6958ac88fd2e0a1563201e946014a5cb93cfa1c6710411982852d571c7 py3-validators-0.20.0.tar.gz -" From 6681d816a8c394a59530e8872af5bb95b9340393 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:20 -0400 Subject: [PATCH 215/738] backports/py3-w3lib: drop for in community --- backports/py3-w3lib/APKBUILD | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 backports/py3-w3lib/APKBUILD diff --git a/backports/py3-w3lib/APKBUILD b/backports/py3-w3lib/APKBUILD deleted file mode 100644 index afd9e0e..0000000 --- a/backports/py3-w3lib/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Fabian Affolter -# Maintainer: Fabian Affolter -pkgname=py3-w3lib -_pkgname=w3lib -pkgver=2.1.2 -pkgrel=0 -pkgdesc="A library of web-related functions" -url="https://github.com/scrapy/w3lib" -arch="noarch" -license="BSD-3-Clause" -depends="python3" -makedepends="py3-setuptools" -checkdepends="py3-pytest" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz" -builddir="$srcdir/$_pkgname-$pkgver" - -replaces="py-w3lib" # Backwards compatibility -provides="py-w3lib=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - python3 setup.py build -} - -check() { - pytest -v -} - -package() { - python3 setup.py install --skip-build --root="$pkgdir" -} - -sha512sums=" -cfff2520cab24b84c93223125de3fb813e4d40d23a022f7fc34196c3033adb5dfc01358d62566dcc4b763d40b271e1428eba0250ba997228d07f35cd3721e37e w3lib-2.1.2.tar.gz -" From a514444306f97a18e3bdc1af4395f3a3bc7cbccb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:22 -0400 Subject: [PATCH 216/738] backports/uvicorn: drop for in community --- backports/uvicorn/APKBUILD | 58 -------------------------------------- 1 file changed, 58 deletions(-) delete mode 100644 backports/uvicorn/APKBUILD diff --git a/backports/uvicorn/APKBUILD b/backports/uvicorn/APKBUILD deleted file mode 100644 index cbb8168..0000000 --- a/backports/uvicorn/APKBUILD +++ /dev/null @@ -1,58 +0,0 @@ -# Contributor: Michał Polański -# Maintainer: Michał Polański -pkgname=uvicorn -pkgver=0.22.0 -pkgrel=0 -pkgdesc="Lightning-fast ASGI server" -url="https://www.uvicorn.org/" -license="BSD-3-Clause" -arch="noarch" -depends=" - python3 - py3-asgiref - py3-click - py3-h11 - " -makedepends="py3-gpep517 py3-hatchling" -checkdepends=" - py3-a2wsgi - py3-dotenv - py3-httptools - py3-httpx - py3-pytest - py3-pytest-mock - py3-trustme - py3-watchfiles - py3-websockets - py3-wsproto - py3-yaml - " -options="!check" # Missing dependency for tests -subpackages="$pkgname-pyc" -source="https://github.com/encode/uvicorn/archive/$pkgver/uvicorn-$pkgver.tar.gz" - -case "$CARCH" in - # test suite blocked by py3-httpx - armhf|ppc64le) options="!check" ;; - # test failures - aarch64) options="!check" ;; -esac - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/uvicorn-$pkgver-py3-none-any.whl -} - -sha512sums=" -61af2df426a5bc060a32730ddf024ca8dd39ccea6800235bf48d7e0c694b9d363cbedd826f498063c6779061af84b6b56e8ab0a466e74291dbbaf5ae995e5587 uvicorn-0.22.0.tar.gz -" From 92287e391bdc8572dbe7b353e5d3e7f6dbef738d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:30:23 -0400 Subject: [PATCH 217/738] backports/perl-module-find: drop for in community --- backports/perl-module-find/APKBUILD | 39 ----------------------------- 1 file changed, 39 deletions(-) delete mode 100644 backports/perl-module-find/APKBUILD diff --git a/backports/perl-module-find/APKBUILD b/backports/perl-module-find/APKBUILD deleted file mode 100644 index 9893826..0000000 --- a/backports/perl-module-find/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Automatically generated by apkbuild-cpan, template 1 -# Contributor: Francesco Colista -# Maintainer: Francesco Colista -pkgname=perl-module-find -_pkgreal=Module-Find -pkgver=0.16 -pkgrel=0 -pkgdesc="Find and use installed modules in a (sub)category" -url="https://metacpan.org/release/Module-Find" -arch="noarch" -license="GPL-1.0-or-later OR Artistic-1.0-Perl" -depends="perl" -subpackages="$pkgname-doc" -source="https://cpan.metacpan.org/authors/id/C/CR/CRENZ/Module-Find-$pkgver.tar.gz" - -builddir="$srcdir/$_pkgreal-$pkgver" - -prepare() { - export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') - PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor -} - -build() { - export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') - make -} - -check() { - make test -} - -package() { - make DESTDIR="$pkgdir" install - find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete -} - -sha512sums=" -a0c935fd229320ce74052180571c0da9667dc87a717e039bec27120a8ac1552988352038efd1805d62ac40fcaf7985c44b6d9c56648b379f1ca0f03727e550bd Module-Find-0.16.tar.gz -" From ecb929e891b16d3f3126c44f7d72333f3df99cdc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 13 Apr 2024 16:53:49 -0400 Subject: [PATCH 218/738] backports/signal-desktop: upgrade to 7.4.0 --- backports/signal-desktop/APKBUILD | 59 +++++++++++-------- .../signal-desktop/libsignal-auditable.patch | 4 +- .../signal-disable-updates.patch | 6 +- .../webrtc-clang-debug-info.patch | 11 ---- .../signal-desktop/webrtc-compiler.patch | 40 +++++++++++++ backports/signal-desktop/webrtc-gcc13.patch | 10 ++++ .../webrtc-use-alpine-target.patch | 13 ---- 7 files changed, 88 insertions(+), 55 deletions(-) delete mode 100644 backports/signal-desktop/webrtc-clang-debug-info.patch create mode 100644 backports/signal-desktop/webrtc-compiler.patch delete mode 100644 backports/signal-desktop/webrtc-use-alpine-target.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 2c4cad5..aebfd3b 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=6.46.0 +pkgver=7.4.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -28,6 +28,7 @@ makedepends=" cmake crc32c-dev dav1d-dev + double-conversion-dev electron-dev electron-tasje ffmpeg-dev @@ -39,6 +40,7 @@ makedepends=" libjpeg-turbo-dev libepoxy-dev libevent-dev + libsecret-dev libvpx-dev libwebp-dev lld @@ -48,6 +50,7 @@ makedepends=" npm openh264-dev openssl-dev + opus-dev pipewire-dev protoc pulseaudio-dev @@ -61,24 +64,24 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.39.1 +_libsignalver=0.41.2 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.36.0 +_ringrtcver=2.39.2 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=5993d +_webrtcver=6261c # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION -# last bsqlite version: 8.6.0 +# last bsqlite version: 8.7.1 _stokenizerver=0.2.1 source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz - https://s3.sakamoto.pl/lnl-aports-snapshots/webrtc-$_webrtcver.tar.zst + https://ab-sn.lnl.gay/webrtc-$_webrtcver.tar.zst https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz bettersqlite-use-system-sqlcipher.patch @@ -88,21 +91,21 @@ source=" signal-show-window-please.patch ringrtc-webrtc-renamed.patch webrtc-shared-like-my-wife.patch - webrtc-use-alpine-target.patch - webrtc-clang-debug-info.patch + webrtc-compiler.patch webrtc-gcc13.patch signal-desktop " builddir="$srcdir/Signal-Desktop-$pkgver" -export CC=clang -export CXX=clang++ +# webrtc broken on clang https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101227 +export CC=gcc +export CXX=g++ # required to find the tools -export AR=llvm-ar -export NM=llvm-nm -export LD=clang++ +export AR=ar +export NM=nm +export LD=g++ # less log spam, reproducible, allow lto with rust export CFLAGS="${CFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" @@ -111,7 +114,7 @@ export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" export CARGO_PROFILE_RELEASE_OPT_LEVEL=2 export CARGO_PROFILE_RELEASE_STRIP="symbols" -export RUSTFLAGS="$RUSTFLAGS -C linker=clang" +#export RUSTFLAGS="$RUSTFLAGS -C linker=clang" export YARN_CACHE_FOLDER="$srcdir/.yarn" @@ -198,15 +201,17 @@ prepare() { ( cd "$srcdir"/webrtc-$_webrtcver - # opus - https://github.com/signalapp/opus/commit/593419e833acab4d15b4901fe156177fb7315468 local use_system=" brotli crc32c dav1d + double-conversion ffmpeg + flatbuffers fontconfig freetype harfbuzz-ng + highway icu jsoncpp libaom @@ -215,17 +220,19 @@ prepare() { libevent libjpeg libpng + libsecret libvpx libwebp libxml libxslt openh264 + opus re2 snappy woff2 zlib " - for _lib in $use_system libjpeg_turbo; do + for _lib in $use_system double_conversion libjpeg_turbo; do msg "Removing buildscripts for system provided $_lib" find . -type f -path "*{third_party,ringrtc}/$_lib/*" \ \! -path "*third_party/$_lib/chromium/*" \ @@ -318,7 +325,7 @@ build() { clang_base_path=\"/usr\" custom_toolchain=\"//build/toolchain/linux/unbundle:default\" is_cfi=false - is_clang=true + is_clang=false is_debug=false is_official_build=true host_toolchain=\"//build/toolchain/linux/unbundle:default\" @@ -327,6 +334,7 @@ build() { rtc_use_pipewire=true symbol_level=0 use_custom_libcxx=false + use_lld=true use_sysroot=false " mkdir -p "$srcdir"/ringrtc-$_ringrtcver/out/release @@ -464,20 +472,19 @@ package() { } sha512sums=" -111aadf2f2b4972a01a08b14351b9cd6e5fa2691fa687a2671a10c493ea3b8089e30d2d6fafb058cbc547a9fb9e0a220a19d39328e17ba9ff1a26c7b5d86b3ce Signal-Desktop-6.46.0.tar.gz -c55ca3822836a2cce69d8b9b4f2a5e9a7883ca12824e3da56bb2674fa925559cc7e3fb8676526108d413e34e8e6590e5d4497f38b7a355f633c92f008ae98c7a libsignal-0.39.1.tar.gz -f0aae6c33003969064a654948f666223f4380a94e7f96b3d329095a5f0e28189705281b57adc9bcfcab550619bc325faa136f728e6e3a58c32f2118d4759f302 ringrtc-2.36.0.tar.gz -20d4264f7d5b8e258eb3f5c453ca95ad6bb44dd5115c3e9d2b1044354889f364a2ddced15c4b15f17ca51afc9d4603bd5e9e3b20bc37f3c0fb79e4edf15fe078 webrtc-5993d.tar.zst +51edb647832a1f9658abb7fddb4c35e8c84f5ea73c36f52bb02cf3460b871ace5bc6a86b439df738d6fbc418f0753e717962a0edefa95a0d4b2ca846fa11371e Signal-Desktop-7.4.0.tar.gz +a311dd8d61d6c072a76e247bf4e4d752f1fe9dfcf0993d1b14790dc2eeec65d3c1bf8b8288156dee5ff89cbed9e282b73a58fcdd69bda9b49441fc9c443a83ec libsignal-0.41.2.tar.gz +c36eb4f3ab02cfa341ccb42a80d5fed53bf21bf495eb3627712db912c97bd76f4fb8fa1951ecfeff1b64c36fdfe72aec59bf459b27a612da5b4e16a885c225e4 ringrtc-2.39.2.tar.gz +341144563eafbd6e263c46cca5cf4954c9d8c72ba4caea1c9342b5b5311e7f618f3e595051195f9894662928cc5015641303aae2c5d5bbc18b22fb36651ee2e8 webrtc-6261c.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch -90d47914e30f095515c47c9ef7c763a7a2583a281228d6ea7e2a3444be670b3ae506c82b4fcea8a228f88f688a43c23c8dcef52b65805d2105287234550718a5 libsignal-auditable.patch -60a45285d885922f5c21f64b761a10efbee9081baf3efa4c8c13abc6a43dc4d27662ed10e239b0fa2071ab9e3a0dbbb4b11d6e3d26fe2b74a19f39e72b74a5bd signal-disable-updates.patch +92de6fc7cc5f2b6d65bedbd74cc733dd86dafc9cbfb9b727c3267aef63a71a07247cde9b163c68fddfeb9096dcd7f554d36d0b2de078d8905e3825645ddbd6eb libsignal-auditable.patch +f13389dd7a1360022d919fa1350210a92e5b832aa32b0ac278b63b1f41462c7807ac28c7867eecf71dac8f3ca699fd0fb0d87de8d1244c3e65cc4b78304e8ef4 signal-disable-updates.patch d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch 646d303fe58cae3f0896ae0275a66695b902fae6ddde7c568cc9798157dee9f45ceff907bc951fadc4c511d512a73d114b4e4f7c8914e2311c63929d29e1621a signal-show-window-please.patch ab51b8fdcda1d8811213d2c5d8cb5d8457b478a02e23ce40f36b38ec56d45a3bd7a2d184720c27046f98a27771551cfad93c1290fe93856cc02695d318b33e47 ringrtc-webrtc-renamed.patch 9d92389637cdda83a0a7039fa6c52516d7bc491d0b1e42d5374b9d1f4fa7b9c930642f2dca896da17a2dc3344fa1bb97434c8dddd0539a4fedfd0dec809fc875 webrtc-shared-like-my-wife.patch -354f516a74c5491727afe084ef7688b3e1359d230daa720ffc30b33d3ea7579c9f37a50fbdc5fe2e8dc5322e42a0a39e4ae3449d4cf5b77daed2229bd743028c webrtc-use-alpine-target.patch -679b286d8f9f682d4de41402ffa6834d3085981ca5458cf0e02d3faa0c3c05b17f61b49b07b7fa42d9f91e737dc2f4e6086978332bb4111f8e9d3107736147ef webrtc-clang-debug-info.patch -83fe8a7d8514018f8b5c217d3513345842f6037e6877cd5129479f03d91729b32621e814b4bdb0906df1fe825146bc7f1f72664434985e5e93f6df641a019420 webrtc-gcc13.patch +e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch +88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch 87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop " diff --git a/backports/signal-desktop/libsignal-auditable.patch b/backports/signal-desktop/libsignal-auditable.patch index ef7bf26..bdf59ab 100644 --- a/backports/signal-desktop/libsignal-auditable.patch +++ b/backports/signal-desktop/libsignal-auditable.patch @@ -4,8 +4,8 @@ out_dir = options.out_dir.strip('"') or os.path.join('build', configuration_name) -- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node'] -+ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node'] +- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] ++ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] if configuration_name == 'Release': cmdline.append('--release') print("Running '%s'" % (' '.join(cmdline))) diff --git a/backports/signal-desktop/signal-disable-updates.patch b/backports/signal-desktop/signal-disable-updates.patch index fc83b51..1e38199 100644 --- a/backports/signal-desktop/signal-disable-updates.patch +++ b/backports/signal-desktop/signal-disable-updates.patch @@ -1,9 +1,9 @@ --- a/config/production.json +++ b/config/production.json -@@ -11,5 +11,5 @@ - }, - "serverPublicParams": "AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXQ==", +@@ -15,5 +15,5 @@ + "serverPublicParams": "AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0I=", "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", + "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", - "updatesEnabled": true + "updatesEnabled": false } diff --git a/backports/signal-desktop/webrtc-clang-debug-info.patch b/backports/signal-desktop/webrtc-clang-debug-info.patch deleted file mode 100644 index 7e62720..0000000 --- a/backports/signal-desktop/webrtc-clang-debug-info.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./build/config/compiler/BUILD.gn.orig -+++ ./build/config/compiler/BUILD.gn -@@ -765,7 +765,7 @@ - # toolchain has this flag. - # We only use one version of LLVM within a build so there's no need to - # upgrade debug info, which can be expensive since it runs the verifier. -- ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ] -+ #ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ] - } - } - diff --git a/backports/signal-desktop/webrtc-compiler.patch b/backports/signal-desktop/webrtc-compiler.patch new file mode 100644 index 0000000..e81b89c --- /dev/null +++ b/backports/signal-desktop/webrtc-compiler.patch @@ -0,0 +1,40 @@ +--- ./build/config/compiler/BUILD.gn.orig ++++ ./build/config/compiler/BUILD.gn +@@ -624,14 +624,14 @@ + if (default_toolchain != "//build/toolchain/cros:target" && + !llvm_android_mainline) { + cflags += [ +- "-mllvm", +- "-split-threshold-for-reg-with-hint=0", ++ #"-mllvm", ++ #"-split-threshold-for-reg-with-hint=0", + ] + if (use_thin_lto && is_a_target_toolchain) { + if (is_win) { + ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ] + } else { +- ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ] ++ #ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ] + } + } + } +@@ -805,7 +805,7 @@ + + # We only use one version of LLVM within a build so there's no need to + # upgrade debug info, which can be expensive since it runs the verifier. +- ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ] ++ #ldflags += [ "-Wl,-mllvm,-disable-auto-upgrade-debug-info" ] + } + + # TODO(https://crbug.com/1211155): investigate why this isn't effective on +@@ -1191,8 +1191,8 @@ + } else if (current_cpu == "arm64") { + if (is_clang && !is_android && !is_nacl && !is_fuchsia && + !(is_chromeos_lacros && is_chromeos_device)) { +- cflags += [ "--target=aarch64-linux-gnu" ] +- ldflags += [ "--target=aarch64-linux-gnu" ] ++ cflags += [ "--target=aarch64-alpine-linux-musl" ] ++ ldflags += [ "--target=aarch64-alpine-linux-musl" ] + } + } else if (current_cpu == "mipsel" && !is_nacl) { + ldflags += [ "-Wl,--hash-style=sysv" ] diff --git a/backports/signal-desktop/webrtc-gcc13.patch b/backports/signal-desktop/webrtc-gcc13.patch index ee3199d..f27bc56 100644 --- a/backports/signal-desktop/webrtc-gcc13.patch +++ b/backports/signal-desktop/webrtc-gcc13.patch @@ -8,3 +8,13 @@ #include +--- ./modules/audio_coding/neteq/reorder_optimizer.cc.orig ++++ ./modules/audio_coding/neteq/reorder_optimizer.cc +@@ -11,6 +11,7 @@ + #include "modules/audio_coding/neteq/reorder_optimizer.h" + + #include ++#include + #include + #include + diff --git a/backports/signal-desktop/webrtc-use-alpine-target.patch b/backports/signal-desktop/webrtc-use-alpine-target.patch deleted file mode 100644 index 560bbcf..0000000 --- a/backports/signal-desktop/webrtc-use-alpine-target.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- ./build/config/compiler/BUILD.gn -+++ ./build/config/compiler/BUILD.gn -@@ -937,8 +937,8 @@ - } else if (current_cpu == "arm64") { - if (is_clang && !is_android && !is_nacl && !is_fuchsia && - !(is_chromeos_lacros && is_chromeos_device)) { -- cflags += [ "--target=aarch64-linux-gnu" ] -- ldflags += [ "--target=aarch64-linux-gnu" ] -+ cflags += [ "--target=aarch64-alpine-linux-musl" ] -+ ldflags += [ "--target=aarch64-alpine-linux-musl" ] - } - if (is_android) { - # Outline atomics crash on Exynos 9810. http://crbug.com/1272795 From 80b60ca01261710d6a77ab657f9a9f9d40c87704 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:29:53 -0400 Subject: [PATCH 219/738] backports/rapidfuzz: upgrade to 3.0.0 --- backports/rapidfuzz/APKBUILD | 9 ++++++--- backports/rapidfuzz/cstdint.patch | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 backports/rapidfuzz/cstdint.patch diff --git a/backports/rapidfuzz/APKBUILD b/backports/rapidfuzz/APKBUILD index b68e491..4194b3a 100644 --- a/backports/rapidfuzz/APKBUILD +++ b/backports/rapidfuzz/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: pkgname=rapidfuzz -pkgver=2.2.3 +pkgver=3.0.0 pkgrel=0 pkgdesc="Rapid fuzzy string matching in C++ using the Levenshtein Distance" url="https://github.com/maxbachmann/rapidfuzz-cpp" @@ -11,7 +11,9 @@ makedepends=" samurai " checkdepends="catch2-3" -source="$pkgname-$pkgver.tar.gz::https://github.com/maxbachmann/rapidfuzz-cpp/archive/refs/tags/v$pkgver.tar.gz" +source="$pkgname-cpp-$pkgver.tar.gz::https://github.com/maxbachmann/rapidfuzz-cpp/archive/refs/tags/v$pkgver.tar.gz + cstdint.patch + " builddir="$srcdir/rapidfuzz-cpp-$pkgver" case "$CARCH" in @@ -38,5 +40,6 @@ package() { } sha512sums=" -5ef4833334ccc3309d43ae4a2644eb57fa2a382b797c791b150b8d78451d7e6d57a8af23d0b7645eecfe539a128d2d8585e2a7380b6772b23cf8fd71d6a7f38b rapidfuzz-2.2.3.tar.gz +c5f20399bd1cfaa057c40cc17be5d730d50c1014553241f80f461a2fa89de670357d17a4f090394170263b09a53aa29238e5eff2caf9064a2a118c42aa14f320 rapidfuzz-cpp-3.0.0.tar.gz +216c5082498830d42d2eb14d3eba35dd08446008916c920db7b55eaf3dd2358f86a61c238315b85fefecf08b9e902dc4db172f91a8479cfd735e53c7b3e03bf5 cstdint.patch " diff --git a/backports/rapidfuzz/cstdint.patch b/backports/rapidfuzz/cstdint.patch new file mode 100644 index 0000000..cce9033 --- /dev/null +++ b/backports/rapidfuzz/cstdint.patch @@ -0,0 +1,12 @@ +diff --git a/rapidfuzz_reference/JaroWinkler.hpp b/rapidfuzz_reference/JaroWinkler.hpp +index 3b717d8..9d415e4 100644 +--- a/rapidfuzz_reference/JaroWinkler.hpp ++++ b/rapidfuzz_reference/JaroWinkler.hpp +@@ -2,6 +2,7 @@ + /* Copyright © 2022-present Max Bachmann */ + + #pragma once ++#include + #include "Jaro.hpp" + + namespace rapidfuzz_reference { From 165821856873cb8cda1ca7e51dafc05d6ae5f91d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:20:19 -0400 Subject: [PATCH 220/738] backports/perl-math-random-isaac-xs: rebuild --- backports/perl-math-random-isaac-xs/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/perl-math-random-isaac-xs/APKBUILD b/backports/perl-math-random-isaac-xs/APKBUILD index 55f2632..4d27426 100644 --- a/backports/perl-math-random-isaac-xs/APKBUILD +++ b/backports/perl-math-random-isaac-xs/APKBUILD @@ -4,7 +4,7 @@ pkgname=perl-math-random-isaac-xs _pkgreal=Math-Random-ISAAC-XS pkgver=1.004 -pkgrel=6 +pkgrel=7 pkgdesc="C implementation of the ISAAC PRNG algorithm" url="https://metacpan.org/release/Math-Random-ISAAC-XS/" arch="all" From db8069a8d09cc555ed7a4cdbff1d64f87d1eab8d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:31:37 -0400 Subject: [PATCH 221/738] backports/thelounge: rebuild --- backports/thelounge/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD index 4753f9e..7988787 100644 --- a/backports/thelounge/APKBUILD +++ b/backports/thelounge/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Kay Thomas pkgname=thelounge pkgver=4.4.1 -pkgrel=1 +pkgrel=2 pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" url="https://thelounge.chat" # x86: textrels From e587a87e3c78de5533a813ef9f0dba43a95f40c0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:27:46 -0400 Subject: [PATCH 222/738] backports/py3-pyinstrument: upgrade to 4.6.2 --- backports/py3-pyinstrument/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD index 981f874..5c3fa36 100644 --- a/backports/py3-pyinstrument/APKBUILD +++ b/backports/py3-pyinstrument/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Aiden Grossman # Maintainer: Aiden Grossman pkgname=py3-pyinstrument -pkgver=4.6.1 +pkgver=4.6.2 pkgrel=0 pkgdesc="Call stack profiler for Python" url="https://github.com/joerick/pyinstrument" @@ -31,5 +31,5 @@ package() { } sha512sums=" -7eb24fb27bfb145b5a06976bdaac1d06de87549f3ae9505d4d56608af0776ff18f5ec9fccf5d3f3df797f1b91281d15bbd825fa42d268baf91524fc2f4efd59a py3-pyinstrument-4.6.1.tar.gz +da23988e6c68876cb8920ce284326f349425303ae36718c5c479b72b5f5ca5d48ced1674bcab71851f60e81a0985bb668bfa89a8b96cc20a1faa0dd7e623ec50 py3-pyinstrument-4.6.2.tar.gz " From 08f8bbbd7231c6bfaa81beecfeb49a63c10bb1c0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:17:44 -0400 Subject: [PATCH 223/738] backports/libspnav: drop for in community --- backports/libspnav/APKBUILD | 44 ------------------------------ backports/libspnav/configure.patch | 22 --------------- 2 files changed, 66 deletions(-) delete mode 100644 backports/libspnav/APKBUILD delete mode 100644 backports/libspnav/configure.patch diff --git a/backports/libspnav/APKBUILD b/backports/libspnav/APKBUILD deleted file mode 100644 index 59763af..0000000 --- a/backports/libspnav/APKBUILD +++ /dev/null @@ -1,44 +0,0 @@ -# Contributor: guddaff -# Maintainer: guddaff -pkgname=libspnav -pkgver=1.1 -pkgrel=0 -pkgdesc="library for communicating with spacenavd or 3dxsrv" -url="https://spacenav.sourceforge.net/" -arch="all" -license="BSD-3-Clause" -options="!check" #no checks -makedepends="libx11-dev" -subpackages="$pkgname-static $pkgname-dev" -source="https://github.com/FreeSpacenav/libspnav/releases/download/v$pkgver/libspnav-$pkgver.tar.gz - configure.patch - " - -prepare() { - default_prepare - sed -i "s/@PKGVERSION@/$pkgver/" "$builddir"/configure -} - -build() { - ./configure \ - --build=$CBUILD \ - --host=$CHOST \ - --prefix=/usr \ - --sysconfdir=/etc \ - --mandir=/usr/share/man \ - --localstatedir=/var - make -} - -check() { - make check -} - -package() { - make DESTDIR="$pkgdir" install -} - -sha512sums=" -94770d9449dd02ade041d3589bcae7664fa990c4a4feca7b2b1e6542b65aa7073305595310b9e639f10716cf15aaad913e57496fb79bdd4dba5bf703ec8299ab libspnav-1.1.tar.gz -1536a172843459c1f26806ad774194afddf93baca0421d0803337eb90b6dd4bcc9dc9b6ebcb1a4e7de0c6f52b16da51538d302a07d57f0625a3a3311a14327f9 configure.patch -" diff --git a/backports/libspnav/configure.patch b/backports/libspnav/configure.patch deleted file mode 100644 index 5cc2fbb..0000000 --- a/backports/libspnav/configure.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/configure -+++ b/configure -@@ -6,18 +6,8 @@ - OPT=yes - DBG=yes - X11=yes --VER=`git describe --tags 2>/dev/null` -+VER="@PKGVERSION@" - --if [ -z "$VER" ]; then -- VER=`git rev-parse --short HEAD 2>/dev/null` -- if [ -z "$VER" ]; then -- VER=v`pwd | grep 'libspnav-[0-9]\+\.' | sed 's/.*libspnav-\(\([0-9]\+\.\)\+[0-9]\+\).*$/\1/'` -- if [ $VER = v ]; then -- VER='' -- fi -- fi --fi -- - echo "configuring libspnav - $VER" - - srcdir="`dirname "$0"`" From 785e28ab75dcffe63a7a0bf0823f9c280787250e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:18:24 -0400 Subject: [PATCH 224/738] backports/nb: upgrade to 7.12.1 --- backports/nb/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/nb/APKBUILD b/backports/nb/APKBUILD index caaa69b..d8b8b08 100644 --- a/backports/nb/APKBUILD +++ b/backports/nb/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Quillith # Maintainer: Quillith pkgname=nb -pkgver=7.9.1 +pkgver=7.12.1 pkgrel=0 pkgdesc="Command line note-taking, bookmarking, archiving, and knowledge base application" url="https://github.com/xwmx/nb" @@ -41,5 +41,5 @@ full() { } sha512sums=" -cb7aee4f7fb6fa3a0e5e47fdbc87911375a431e5ad821e748d84769cb3384bc7098368b0611c70d4548a12d884cb161ac5286fc28da6a40514736cc3668fc751 nb-7.9.1.tar.gz +ed3d41a809e39a19711c6c97c38216f17f144b8b474eb94aec4134f9756da03440073f3f6557acf8f7959d3d9fba6392d1d5f59e8b94d5269b7336b11353457e nb-7.12.1.tar.gz " From 715c1f545a0c95d647dbf1542ce4cc7fd2320b35 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:11:44 -0400 Subject: [PATCH 225/738] backports/dex: rebuild for python 3.12 --- backports/dex/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/dex/APKBUILD b/backports/dex/APKBUILD index 4d55d52..e777d8d 100644 --- a/backports/dex/APKBUILD +++ b/backports/dex/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=dex pkgver=0.9.0 -pkgrel=0 +pkgrel=1 pkgdesc="program to generate and execute DesktopEntry files of the Application type" url="https://github.com/jceb/dex" arch="all" @@ -18,7 +18,7 @@ build() { } package() { - make install PREFIX=/usr DESTDIR="$pkgdir" + make install PREFIX=/usr MANPREFIX=/usr/share/man DESTDIR="$pkgdir" } sha512sums=" From 21d4c1908e593154aaeb84f7c0a5e0b680b287fb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:19:09 -0400 Subject: [PATCH 226/738] backports/openscad: drop for in community --- .../openscad/0001-fix-CVE-2022-0496.patch | 76 ---------- .../openscad/0002-fix-CVE-2022-0497.patch | 27 ---- .../0003-fix-build-with-cgal-5.3.patch | 47 ------ .../0004-fix-build-with-cgal-5.4.patch | 38 ----- backports/openscad/0005-fix-boost-join.patch | 62 -------- backports/openscad/APKBUILD | 143 ------------------ 6 files changed, 393 deletions(-) delete mode 100644 backports/openscad/0001-fix-CVE-2022-0496.patch delete mode 100644 backports/openscad/0002-fix-CVE-2022-0497.patch delete mode 100644 backports/openscad/0003-fix-build-with-cgal-5.3.patch delete mode 100644 backports/openscad/0004-fix-build-with-cgal-5.4.patch delete mode 100644 backports/openscad/0005-fix-boost-join.patch delete mode 100644 backports/openscad/APKBUILD diff --git a/backports/openscad/0001-fix-CVE-2022-0496.patch b/backports/openscad/0001-fix-CVE-2022-0496.patch deleted file mode 100644 index 8f8a1e8..0000000 --- a/backports/openscad/0001-fix-CVE-2022-0496.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 00a4692989c4e2f191525f73f24ad8727bacdf41 Mon Sep 17 00:00:00 2001 -From: Torsten Paul -Date: Sat, 5 Feb 2022 18:38:31 +0100 -Subject: [PATCH] CVE-2022-0496 Out-of-bounds memory access in DXF loader. - -Public issue: -https://github.com/openscad/openscad/issues/4037 - -Fix in master branch: -https://github.com/openscad/openscad/pull/4090 ---- - src/dxfdata.cc | 27 +++++++++++++++++++++++---- - 1 file changed, 23 insertions(+), 4 deletions(-) - -diff --git a/src/dxfdata.cc b/src/dxfdata.cc -index 2bb7236746..aa6b6f3976 100644 ---- a/src/dxfdata.cc -+++ b/src/dxfdata.cc -@@ -441,6 +441,11 @@ DxfData::DxfData(double fn, double fs, double fa, - auto lv = grid.data(this->points[lines[idx].idx[j]][0], this->points[lines[idx].idx[j]][1]); - for (size_t ki = 0; ki < lv.size(); ++ki) { - int k = lv.at(ki); -+ if (k < 0 || k >= lines.size()) { -+ LOG(message_group::Warning,Location::NONE,"", -+ "Bad DXF line index in %1$s.",QuotedString(boostfs_uncomplete(filename, fs::current_path()).generic_string())); -+ continue; -+ } - if (k == idx || lines[k].disabled) continue; - goto next_open_path_j; - } -@@ -466,13 +471,20 @@ DxfData::DxfData(double fn, double fs, double fa, - auto lv = grid.data(ref_point[0], ref_point[1]); - for (size_t ki = 0; ki < lv.size(); ++ki) { - int k = lv.at(ki); -+ if (k < 0 || k >= lines.size()) { -+ LOG(message_group::Warning,Location::NONE,"", -+ "Bad DXF line index in %1$s.",QuotedString(boostfs_uncomplete(filename, fs::current_path()).generic_string())); -+ continue; -+ } - if (lines[k].disabled) continue; -- if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[0]][0], this->points[lines[k].idx[0]][1])) { -+ auto idk0 = lines[k].idx[0]; // make it easier to read and debug -+ auto idk1 = lines[k].idx[1]; -+ if (grid.eq(ref_point[0], ref_point[1], this->points[idk0][0], this->points[idk0][1])) { - current_line = k; - current_point = 0; - goto found_next_line_in_open_path; - } -- if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[1]][0], this->points[lines[k].idx[1]][1])) { -+ if (grid.eq(ref_point[0], ref_point[1], this->points[idk1][0], this->points[idk1][1])) { - current_line = k; - current_point = 1; - goto found_next_line_in_open_path; -@@ -501,13 +513,20 @@ DxfData::DxfData(double fn, double fs, double fa, - auto lv = grid.data(ref_point[0], ref_point[1]); - for (size_t ki = 0; ki < lv.size(); ++ki) { - int k = lv.at(ki); -+ if (k < 0 || k >= lines.size()) { -+ LOG(message_group::Warning,Location::NONE,"", -+ "Bad DXF line index in %1$s.",QuotedString(boostfs_uncomplete(filename, fs::current_path()).generic_string())); -+ continue; -+ } - if (lines[k].disabled) continue; -- if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[0]][0], this->points[lines[k].idx[0]][1])) { -+ auto idk0 = lines[k].idx[0]; // make it easier to read and debug -+ auto idk1 = lines[k].idx[1]; -+ if (grid.eq(ref_point[0], ref_point[1], this->points[idk0][0], this->points[idk0][1])) { - current_line = k; - current_point = 0; - goto found_next_line_in_closed_path; - } -- if (grid.eq(ref_point[0], ref_point[1], this->points[lines[k].idx[1]][0], this->points[lines[k].idx[1]][1])) { -+ if (grid.eq(ref_point[0], ref_point[1], this->points[idk1][0], this->points[idk1][1])) { - current_line = k; - current_point = 1; - goto found_next_line_in_closed_path; diff --git a/backports/openscad/0002-fix-CVE-2022-0497.patch b/backports/openscad/0002-fix-CVE-2022-0497.patch deleted file mode 100644 index fac3024..0000000 --- a/backports/openscad/0002-fix-CVE-2022-0497.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 84addf3c1efbd51d8ff424b7da276400bbfa1a4b Mon Sep 17 00:00:00 2001 -From: Torsten Paul -Date: Sat, 5 Feb 2022 18:45:29 +0100 -Subject: [PATCH] CVE-2022-0497 Out-of-bounds memory access in comment parser. - -Public issue: -https://github.com/openscad/openscad/issues/4043 - -Fix in master branch: -https://github.com/openscad/openscad/pull/4044 ---- - src/comment.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/comment.cpp b/src/comment.cpp -index f02ad2c5f6..1ce3ab547b 100644 ---- a/src/comment.cpp -+++ b/src/comment.cpp -@@ -92,7 +92,7 @@ static std::string getComment(const std::string &fulltext, int line) - } - - int end = start + 1; -- while (fulltext[end] != '\n') end++; -+ while (end < fulltext.size() && fulltext[end] != '\n') end++; - - std::string comment = fulltext.substr(start, end - start); - diff --git a/backports/openscad/0003-fix-build-with-cgal-5.3.patch b/backports/openscad/0003-fix-build-with-cgal-5.3.patch deleted file mode 100644 index dc3c1ca..0000000 --- a/backports/openscad/0003-fix-build-with-cgal-5.3.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 9aa0d7e9f2914fe5f547bdde69202161d1c6064d Mon Sep 17 00:00:00 2001 -From: Jordan Brown -Date: Sun, 18 Jul 2021 21:01:46 -0700 -Subject: [PATCH] Fix build failure with "generic_print_polyhedron" on - CGAL-5.3. - ---- - src/cgalutils-polyhedron.cc | 13 ------------- - src/cgalutils.h | 1 - - 2 files changed, 14 deletions(-) - -diff --git a/src/cgalutils-polyhedron.cc b/src/cgalutils-polyhedron.cc -index 9f4f98f623..41cca4b3f2 100644 ---- a/src/cgalutils-polyhedron.cc -+++ b/src/cgalutils-polyhedron.cc -@@ -337,19 +337,6 @@ namespace CGALUtils { - } - }; - -- template -- std::string printPolyhedron(const Polyhedron &p) { -- std::ostringstream sstream; -- sstream.precision(20); -- -- Polyhedron_writer writer; -- generic_print_polyhedron(sstream, p, writer); -- -- return sstream.str(); -- } -- -- template std::string printPolyhedron(const CGAL_Polyhedron &p); -- - }; // namespace CGALUtils - - #endif /* ENABLE_CGAL */ -diff --git a/src/cgalutils.h b/src/cgalutils.h -index 21a01cdba6..c08a3aa7df 100644 ---- a/src/cgalutils.h -+++ b/src/cgalutils.h -@@ -45,7 +45,6 @@ namespace CGALUtils { - bool is_approximately_convex(const PolySet &ps); - Geometry const* applyMinkowski(const Geometry::Geometries &children); - -- template std::string printPolyhedron(const Polyhedron &p); - template bool createPolySetFromPolyhedron(const Polyhedron &p, PolySet &ps); - template bool createPolyhedronFromPolySet(const PolySet &ps, Polyhedron &p); - template diff --git a/backports/openscad/0004-fix-build-with-cgal-5.4.patch b/backports/openscad/0004-fix-build-with-cgal-5.4.patch deleted file mode 100644 index f1fedc2..0000000 --- a/backports/openscad/0004-fix-build-with-cgal-5.4.patch +++ /dev/null @@ -1,38 +0,0 @@ -From abfebc651343909b534ef337aacc7604c99cf0ea Mon Sep 17 00:00:00 2001 -From: Torsten Paul -Date: Wed, 2 Feb 2022 02:30:59 +0100 -Subject: [PATCH] CGAL build fix, v5.4 renames projection traits header files - and classes. - ---- - src/cgalutils-tess.cc | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/src/cgalutils-tess.cc b/src/cgalutils-tess.cc -index ec1cc1eeb3..37f8cf08b1 100644 ---- a/src/cgalutils-tess.cc -+++ b/src/cgalutils-tess.cc -@@ -6,10 +6,12 @@ - #pragma push_macro("NDEBUG") - #undef NDEBUG - #include --#if CGAL_VERSION_NR >= CGAL_VERSION_NUMBER(4,11,0) -- #include -+#if CGAL_VERSION_NR < 1050401000 -+#include -+typedef CGAL::Triangulation_2_filtered_projection_traits_3 Projection; - #else -- #include -+#include -+typedef CGAL::Filtered_projection_traits_3 Projection; - #endif - #include - #pragma pop_macro("NDEBUG") -@@ -19,7 +21,6 @@ struct FaceInfo { - bool in_domain() { return nesting_level%2 == 1; } - }; - --typedef CGAL::Triangulation_2_filtered_projection_traits_3 Projection; - typedef CGAL::Triangulation_face_base_with_info_2 Fbb; - typedef CGAL::Triangulation_data_structure_2< - CGAL::Triangulation_vertex_base_2, diff --git a/backports/openscad/0005-fix-boost-join.patch b/backports/openscad/0005-fix-boost-join.patch deleted file mode 100644 index 1347c27..0000000 --- a/backports/openscad/0005-fix-boost-join.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 08bf69b4115c989fc5671254e0d05735d01bcca5 Mon Sep 17 00:00:00 2001 -From: Torsten Paul -Date: Wed, 2 Feb 2022 00:50:43 +0100 -Subject: [PATCH] Fix build issue with overloaded join(). - ---- - src/openscad.cc | 11 +++++------ - 1 file changed, 5 insertions(+), 6 deletions(-) - -diff --git a/src/openscad.cc b/src/openscad.cc -index a6f648d2a2..3c46cda2af 100644 ---- a/src/openscad.cc -+++ b/src/openscad.cc -@@ -65,7 +65,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -307,7 +306,7 @@ void set_render_color_scheme(const std::string color_scheme, const bool exit_if_ - } - - if (exit_if_not_found) { -- LOG(message_group::None,Location::NONE,"",(boost::join(ColorMap::inst()->colorSchemeNames(), "\n"))); -+ LOG(message_group::None,Location::NONE,"",(boost::algorithm::join(ColorMap::inst()->colorSchemeNames(), "\n"))); - - exit(1); - } else { -@@ -885,7 +884,7 @@ struct CommaSeparatedVector - }; - - template --std::string join(const Seq &seq, const std::string &sep, const ToString &toString) -+std::string str_join(const Seq &seq, const std::string &sep, const ToString &toString) - { - return boost::algorithm::join(boost::adaptors::transform(seq, toString), sep); - } -@@ -947,7 +946,7 @@ int main(int argc, char **argv) - ("P,P", po::value(), "customizer parameter set") - #ifdef ENABLE_EXPERIMENTAL - ("enable", po::value>(), ("enable experimental features: " + -- join(boost::make_iterator_range(Feature::begin(), Feature::end()), " | ", -+ str_join(boost::make_iterator_range(Feature::begin(), Feature::end()), " | ", - [](const Feature *feature) { - return feature->get_name(); - }) + -@@ -964,11 +963,11 @@ int main(int argc, char **argv) - ("render", po::value()->implicit_value(""), "for full geometry evaluation when exporting png") - ("preview", po::value()->implicit_value(""), "[=throwntogether] -for ThrownTogether preview png") - ("animate", po::value(), "export N animated frames") -- ("view", po::value(), ("=view options: " + boost::join(viewOptions.names(), " | ")).c_str()) -+ ("view", po::value(), ("=view options: " + boost::algorithm::join(viewOptions.names(), " | ")).c_str()) - ("projection", po::value(), "=(o)rtho or (p)erspective when exporting png") - ("csglimit", po::value(), "=n -stop rendering at n CSG elements when exporting png") - ("colorscheme", po::value(), ("=colorscheme: " + -- join(ColorMap::inst()->colorSchemeNames(), " | ", -+ str_join(ColorMap::inst()->colorSchemeNames(), " | ", - [](const std::string& colorScheme) { - return (colorScheme == ColorMap::inst()->defaultColorSchemeName() ? "*" : "") + colorScheme; - }) + diff --git a/backports/openscad/APKBUILD b/backports/openscad/APKBUILD deleted file mode 100644 index 0e037f1..0000000 --- a/backports/openscad/APKBUILD +++ /dev/null @@ -1,143 +0,0 @@ -# Maintainer: Marian Buschsieweke -pkgname=openscad -pkgver=2021.01 -pkgrel=11 -pkgdesc="The programmers solid 3D CAD modeller" -url="http://openscad.org/" -# Glew and GLES on ARM don't play well with each other -arch="all !armv7 !aarch64 !armhf" -license="GPL-2.0-only" -subpackages="$pkgname-doc" -makedepends=" - bison - boost-dev - cairo-dev - cgal-dev - cmake - double-conversion-dev - eigen-dev - flex - glew-dev - gmp-dev - harfbuzz-dev - libxml2-dev - libzip-dev - libspnav-dev - mpfr-dev - opencsg-dev - qscintilla-dev - qt5-qtbase-dev - qt5-qtmultimedia-dev - " -checkdepends=" - imagemagick - mesa - mesa-dri-gallium - python3 - xvfb-run - " -source=" - https://files.openscad.org/openscad-$pkgver.src.tar.gz - - 0001-fix-CVE-2022-0496.patch - 0002-fix-CVE-2022-0497.patch - 0003-fix-build-with-cgal-5.3.patch - 0004-fix-build-with-cgal-5.4.patch - 0005-fix-boost-join.patch - " - -# Handle tests failing only on some arch's, or building against libs only -# provided by some arch's. -case "$CARCH" in - x86_64) - makedepends="$makedepends lib3mf-dev" - export LIB3MF_INCLUDEPATH="/usr/include/lib3mf/Bindings/Cpp" - ;; - x86) - makedepends="$makedepends lib3mf-dev" - export LIB3MF_INCLUDEPATH="/usr/include/lib3mf/Bindings/Cpp" - _arch_failing_tests=" - 3mfpngtest_cube10 - " - ;; - s390x) - _arch_failing_tests=" - 3mfpngtest_cube10 - cgalbinstlcgalpngtest_bad-stl-pcbvicebar - cgalbinstlcgalpngtest_bad-stl-tardis - cgalbinstlcgalpngtest_fn_bug - cgalbinstlcgalpngtest_issue1225 - cgalpngtest_import_3mf-tests - csgpngtest_import_3mf-tests - opencsgtest_import_3mf-tests - throwntogethertest_import_3mf-tests - " - ;; - *) - # lib3mf is not available on all other archs - _arch_failing_tests=" - 3mfpngtest_cube10 - cgalpngtest_import_3mf-tests - csgpngtest_import_3mf-tests - opencsgtest_import_3mf-tests - throwntogethertest_import_3mf-tests - " - ;; -esac - -# secfixes: -# 2021.01-r2: -# - CVE-2022-0496 -# - CVE-2022-0497 - -build() { - qmake-qt5 PREFIX="/usr" - make -} - -check() { - cd tests - # collect failing tests in a way that creates friendly git diffs - local failing_tests - failing_tests=" - 3mfexport_3mf-export - astdumptest_allexpressions - cgalbinstlcgalpngtest_polyhedron-nonplanar-tests - cgalpngtest_nef3_broken - cgalpngtest_polyhedron-nonplanar-tests - cgalstlcgalpngtest_polyhedron-nonplanar-tests - csgpngtest_nef3_broken - csgpngtest_polyhedron-nonplanar-tests - echotest_allexpressions - echotest_function-literal-.* - lazyunion-.* - monotonepngtest_polyhedron-nonplanar-tests - opencsgtest_nef3_broken - pdfexporttest_centered - pdfexporttest_simple-pdf - throwntogethertest_nef3_broken - $_arch_failing_tests - " - - # trim whitespace before and after list and separate expressions by | (regex or) - failing_tests="$(echo "$failing_tests" | tr -d '\n' | sed -e 's/^\s*//' -e 's/\s*$//' -e 's/\s\+/|/g')" - - cmake \ - -DEXPERIMENTAL=OFF \ - . - make - xvfb-run ctest -E "$failing_tests" -} - -package() { - make INSTALL_ROOT="$pkgdir" install -} - -sha512sums=" -8deaa26bf4c295c12da38f323d2b2e6f827851337f5bc1cc9c79afc083c9f913c19a263086e6e853bf2c8434c1ccc705ea22ddb02dc99d39bb1e5e03fc58d128 openscad-2021.01.src.tar.gz -369353f13bb6d2bf123af1e25b5f264cd757efa5d0cd8c226a3803a41a0fdb74aff7411ddf91cb394f9cd295e10e05159487fb6e9c2d661280bf060e391bc3da 0001-fix-CVE-2022-0496.patch -708a491c5a6166bdf92419bce68dbcb4eccbb97ce1880c5a3c919a90ae5af19aa9092e46b81fe8705e8470189d43c4ecad19dece9f1e405681a186c0bd8f5ca4 0002-fix-CVE-2022-0497.patch -090b8a8e53cc7560695d4065db891a3602923d893d752e3d007a42f2cd32c5f6f444d735d716658fb6f3d979e8cf2489cbff3a58a9070621ab5448a6dbf3372b 0003-fix-build-with-cgal-5.3.patch -7d3067bcadf5a56b3b21b80f36e8d1fd99047029b86db6803b71760d47a8b199d3485c6486767707273aa57f9a83aaafcb763fe7a1ee295b01a776f7e5db038f 0004-fix-build-with-cgal-5.4.patch -f0538eb98543a2a15534794f91c35f10d21fe04a8696639a4f08cd98daf63e6efc855b102f41ecb05a1e1bffeecc7c445fcfad7c3a90f32ec28c5a1646863466 0005-fix-boost-join.patch -" From 69bc8b2ff1708690b02fe71dd3096460523b6e5b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:13:04 -0400 Subject: [PATCH 227/738] backports/electron-tasje: upgrade to 0.7.1 --- backports/electron-tasje/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/electron-tasje/APKBUILD b/backports/electron-tasje/APKBUILD index 79c92db..71648c7 100644 --- a/backports/electron-tasje/APKBUILD +++ b/backports/electron-tasje/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=electron-tasje -pkgver=0.7.0 +pkgver=0.7.1 pkgrel=0 pkgdesc="Tiny replacement for electron-builder" url="https://codeberg.org/selfisekai/electron_tasje/" @@ -31,5 +31,5 @@ package() { } sha512sums=" -1f77dc8a5639c5e61952172b1b30c84cce41b5763d5ce96fa8fb2a02f8f8197a87dd3d9c047a90951d8ddc6f1542d8b0f8c33a3dad233d0868b82f19a765731d electron_tasje-0.7.0.tar.gz +665ccbd6cb357c25d55daed4ad3b3ce008da258054951d9d069a5b12e72dd5812d534f906868e6b18e78949f058069a961c394c6f21ab3b3fab5393c330445e5 electron_tasje-0.7.1.tar.gz " From fb93a24f337b0184d2e70a7184961067d9ab8075 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 13 Apr 2024 10:53:09 -0400 Subject: [PATCH 228/738] user/zotero: upgrade to 7.0.0_beta74 --- user/zotero/APKBUILD | 93 +- user/zotero/allow-custom-rust-vendor.patch | 564 - user/zotero/avoid-redefinition.patch | 15 - user/zotero/ffmpeg6-fixup.patch | 13 - user/zotero/firefox-102.12.0-ffmpeg_6-1.patch | 79803 ---------------- user/zotero/firefox-esr.post-upgrade | 18 - user/zotero/fix-neon-aom.patch | 13 - user/zotero/gcc13.patch | 30 - .../hunspell-dont-build-unused-function.patch | 69 - user/zotero/mallinfo.patch | 20 - user/zotero/no-ccache-stats.patch | 13 + user/zotero/ppc-musttail.patch | 30 + user/zotero/ppc-webrtc.patch | 23 + user/zotero/python-deps.patch | 11 +- user/zotero/rust-lto-thin.patch | 6 +- user/zotero/sandbox-sched_setscheduler.patch | 16 +- .../update-from-packed-simd-2-to-simd1.patch | 1707 - user/zotero/utils-libc-lfs64.patch | 13 - user/zotero/zotero_build-modifications.patch | 120 +- user/zotero/zstandard.patch | 8 - 20 files changed, 180 insertions(+), 82405 deletions(-) delete mode 100644 user/zotero/allow-custom-rust-vendor.patch delete mode 100644 user/zotero/avoid-redefinition.patch delete mode 100644 user/zotero/ffmpeg6-fixup.patch delete mode 100644 user/zotero/firefox-102.12.0-ffmpeg_6-1.patch delete mode 100644 user/zotero/firefox-esr.post-upgrade delete mode 100644 user/zotero/fix-neon-aom.patch delete mode 100644 user/zotero/gcc13.patch delete mode 100644 user/zotero/hunspell-dont-build-unused-function.patch delete mode 100644 user/zotero/mallinfo.patch create mode 100644 user/zotero/no-ccache-stats.patch create mode 100644 user/zotero/ppc-musttail.patch create mode 100644 user/zotero/ppc-webrtc.patch delete mode 100644 user/zotero/update-from-packed-simd-2-to-simd1.patch delete mode 100644 user/zotero/utils-libc-lfs64.patch delete mode 100644 user/zotero/zstandard.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 97aeae0..4074407 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,15 +1,18 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta68 +pkgver=7.0.0_beta74 pkgrel=0 -_fxver=102.15.1 +_fxver=115.9.1 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) -_releasedate=2024-02-03 +# https://www.mozilla.org/firefox/organizations/notes/ +_releasedate=2024-03-22 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." -arch="x86_64 aarch64" -url="https://github.com/zotero/zotero" +url="https://www.mozilla.org/en-US/firefox/organizations/" +# s390x and riscv64: blocked by rust and cargo +# armhf: build failure on armhf due to wasm +arch="x86_64 armv7 aarch64 x86 ppc64le" license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" options="!check" # No test suite depends=" @@ -64,32 +67,23 @@ makedepends=" wireless-tools-dev zip " -source=" - https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz - allow-custom-rust-vendor.patch +source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz audio-lfs64.patch - avoid-redefinition.patch disable-moz-stackwalk.patch esr-metainfo.patch - firefox-102.12.0-ffmpeg_6-1.patch - ffmpeg6-fixup.patch - fix-neon-aom.patch fix-fortify-system-wrappers.patch fix-rust-target.patch fix-webrtc-glibcisms.patch - gcc13.patch - mallinfo.patch + icu74.patch + lfs64.patch + no-ccache-stats.patch + ppc-musttail.patch + ppc-webrtc.patch python-deps.patch rust-lto-thin.patch sandbox-fork.patch sandbox-largefile.patch sandbox-sched_setscheduler.patch - zstandard.patch - icu74.patch - lfs64.patch - hunspell-dont-build-unused-function.patch - utils-libc-lfs64.patch - update-from-packed-simd-2-to-simd1.patch stab.h @@ -109,7 +103,6 @@ _mozappdir=/usr/lib/zotero # help our shared-object scanner to find the libs ldpath="$_mozappdir" -sonameprefix="$pkgname:" # we need this because cargo verifies checksums of all files in vendor # crates when it builds and gives us no way to override or update the @@ -135,28 +128,25 @@ export RUST_TARGET="$CTARGET" export CC="clang" export CXX="clang++" +# set rpath so linker finds the libs +export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" + # let firefox do this itself. unset CARGO_PROFILE_RELEASE_OPT_LEVEL unset CARGO_PROFILE_RELEASE_LTO export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2" export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations" -export LDFLAGS="$LDFLAGS -Wl,--undefined-version" prepare() { + # moves zotero source to mozilla source mv "$_zoterodir" "$builddir"/zotero default_prepare cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ - base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key - _clear_vendor_checksums audio_thread_priority - _clear_vendor_checksums target-lexicon-0.9.0 - _clear_vendor_checksums bindgen - _clear_vendor_checksums mp4parse - _clear_vendor_checksums getrandom - _clear_vendor_checksums packed_simd - _clear_vendor_checksums encoding_rs + + base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key # webrtc does not build on these case "$CARCH" in @@ -289,14 +279,6 @@ build() { ;; esac - case "$CARCH" in - x86) - # the i586 baseline cannot compile firefox - export CFLAGS="$CFLAGS -march=pentium4" - export CXXFLAGS="$CXXFLAGS -march=pentium4" - ;; - esac - export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs" case "$CARCH" in @@ -307,10 +289,7 @@ build() { EOF esac - # set rpath so linker finds the libs - export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" - - ./mach build + ./mach build # install to where zotero expects it DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install @@ -344,37 +323,29 @@ package() { } sha512sums=" -bdb66b4fb5622af3e60580a3bcd464d98ef13cb38d6ac6c9e5fc046e567a003cf080125d7748950c91c442fde5e8024c50c4180d2f551aa3528160a3c05ae187 firefox-102.15.1esr.source.tar.xz -4e584621145cf8add069c6dac18e805b3274a1ee402d84e924df2341f7d3c5be261a93ef51283bacbd606f47fbdc628c4323ecc31efc5b403b8d224b18dc278f allow-custom-rust-vendor.patch +9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz 3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch -b1cb2db3122634f66d2bae7066e76f2dcd455c464e021db4de3b0a08314df95cb667846081682db549dd2af8a00831cabe44a2420c66cdfb5e3b5fa7e6bd21d3 avoid-redefinition.patch 454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch -a13dee87adf659423f5b3fa0358cfbde135fa614c85dd170d1a48d32ee080e27aef062d3a8e3c45059c41463fda579f8900988166ccb51568793ee7ef9080d04 firefox-102.12.0-ffmpeg_6-1.patch -c2e17f269070d782154f843b95bf68be25d8c4356825dd436b1877aab63ac023051899371da5c21f6151970b2562376c2dadd2d6a038446e5fa621e2495668e1 ffmpeg6-fixup.patch -d3a54897089eda9fdfe4b25ade1cb2c01c4b31fa9bf0e0ddbb0bbe674072ec5d36a6e52f791a8cbc8d3908e912ac2d7edec69b34d87ecca0acca876d45974c8d fix-neon-aom.patch 2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch 305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch -49aa1dfbe11ed5370e839afb190da7f55ae4887b35645865efe25d398d890563722caedd5696d648ad71448621fbc8bab8def1a3d079e301d6414f0f20e96758 gcc13.patch -a4a3e062661bda64d502d426c480ac9645345860118de9df9ffe6e0597738c70c11e5cdef2d4fd12c5e2ee30a09310159230524655a419a4f7e4eeeb0f3c06b0 mallinfo.patch -f3d419880cc7f043b6eb547894d486457d407640be2bd8b402eb3a534ccea39568f6d506fc44a3b29c94eb0dc6fc2bec6600d161786fd233d26b1dc8970f5ab4 python-deps.patch -9f433c8051d05efb8b119e0b67b97951837aca6a8c5671646714a24023be11a9d63fa7c4e56a6c7f3911c9d8406b06cd95926de1a82925d02197dfd55daf5642 rust-lto-thin.patch -2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch -b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch -94433c5ffdbe579c456d95c5f053f61fcbab2f652fa90bc69dcc27d9a1507a8e5c677adeadae9a7a75cc9a55184c1040737f4dfd10b279c088ef016561e6f135 sandbox-sched_setscheduler.patch -12fbe50d94624931a581314b8e6e228a1f8a4550704a6ee4f8904184ac4727efd90982e87a8fdd318e15515f9430dfc6cf7455b301e903003027b3f0afa79795 zstandard.patch afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c6033e9b888f02775d1b0443a00329b7a632ee399122a391c13a icu74.patch 5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch -6aa925477109ed3be8f061fe1ea91caf95c7a7f5cca05c3e31322d08c3c2c044fb12bb1dbea09cd224b22e40e987571e415c6457aa5cab6a0b67f248f11b3df2 hunspell-dont-build-unused-function.patch -2625dcf433abbfa4c6835830b04c7b8cab72fba3a987515a6ba8e4f181332e804d98ccfbcc07e62c673be50db04c80d0f51c415173bb18cf4d18dc1364e165d0 utils-libc-lfs64.patch -9de4804848ada9b9af45426699c98370e3fadf99bcb1c3c0b31c97661c9d107449048186abf454c1903bb042c5507243de9707253c1ea8e0b9fc69841c2b5a57 update-from-packed-simd-2-to-simd1.patch +c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc536337030d349fb3ba4460097b75b0c7c5b8fb2d39d8b0a392948936 no-ccache-stats.patch +2d8dff86212d6d2a904cbb5a5a1d6c17b89adc929fc6a3f4c6cb669f5e83ecddff5a799225319ba445a187b04d111251af75dd3ce8a039164bc14d2a432a2a04 ppc-musttail.patch +6f60e83599041db1b707c21784197ea9816b2c936b89a274bfc24554a600981e6f28448fe41fab0942bd31acd49b1c00beb2eb0961149f2ffa6a4154be123ea7 ppc-webrtc.patch +4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch +1c6918dd6655d3a1251bfd4af2e1c561cbb00d540a883b4c1ebf7f5de530d754d9ac07b4b5f56cdab6c511d25c8910ec94043f5733e97501a67abffe1bafaeb1 rust-lto-thin.patch +2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch +b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch +f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch 0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d100fa33d61a9a1a13477687d5eac99e50ae7dbef9882a5808 firefox.desktop 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -d635aae7d2a403778502d5d3121b4a576f5bd86e16b422ac439e458d73bb86349b444888891f0329fa6b3667608e1b81cfb9b150e97f41ec7e2dc027b7e0c06e zotero-client-7.0.0_beta68.tar.gz -f196d9d82e50a5123342634b4d49a0776ca3668fcccd8b48bb28fac94107e11a039204f13030b405309cfafe53615a7a9f5c278d2b278140cbc0fb1cecf4cebc zotero_build-modifications.patch +0d33924c32271f22abd91a9a2e151cc920faa03a84f3f0ebb70d00e20d28f44915fcc9c2d1168ab10a866dc6cf23be7ef124d2c3a94406188f44ee323e44a863 zotero-client-7.0.0_beta74.tar.gz +746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch " diff --git a/user/zotero/allow-custom-rust-vendor.patch b/user/zotero/allow-custom-rust-vendor.patch deleted file mode 100644 index 218650f..0000000 --- a/user/zotero/allow-custom-rust-vendor.patch +++ /dev/null @@ -1,564 +0,0 @@ -From a5a3db2d32ff1d359aef5ec586b91164570c1685 Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Tue, 5 Nov 2019 09:56:15 -0800 -Subject: [PATCH 1/7] Support custom vendor strings. - -Add support for custom vendors, as in "x86_64-gentoo-linux-musl". - -Fixes #33. ---- - src/targets.rs | 108 ++++++++++++++++++++++++++++++++++++++++++++++++- - src/triple.rs | 4 -- - 2 files changed, 106 insertions(+), 6 deletions(-) - -diff --git a/src/targets.rs b/src/targets.rs -index 6ae570e..90b2736 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/targets.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/targets.rs -@@ -1,6 +1,8 @@ - // This file defines all the identifier enums and target-aware logic. - - use crate::triple::{Endianness, PointerWidth, Triple}; -+use alloc::boxed::Box; -+use alloc::string::String; - use core::fmt; - use core::str::FromStr; - -@@ -292,7 +294,7 @@ impl Aarch64Architecture { - - /// The "vendor" field, which in practice is little more than an arbitrary - /// modifier. --#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] -+#[derive(Clone, Debug, PartialEq, Eq, Hash)] - #[allow(missing_docs)] - pub enum Vendor { - Unknown, -@@ -306,6 +308,15 @@ pub enum Vendor { - Sun, - Uwp, - Wrs, -+ -+ /// A custom vendor. "Custom" in this context means that the vendor is -+ /// not specifically recognized by upstream Autotools, LLVM, Rust, or other -+ /// relevant authorities on triple naming. It's useful for people building -+ /// and using locally patched toolchains. -+ /// -+ /// Outside of such patched environments, users of `target-lexicon` should -+ /// treat `Custom` the same as `Unknown` and ignore the string. -+ Custom(Box), - } - - /// The "operating system" field, which sometimes implies an environment, and -@@ -717,6 +728,7 @@ impl fmt::Display for Vendor { - Vendor::Sun => "sun", - Vendor::Uwp => "uwp", - Vendor::Wrs => "wrs", -+ Vendor::Custom(ref name) => name, - }; - f.write_str(s) - } -@@ -738,7 +750,46 @@ impl FromStr for Vendor { - "sun" => Vendor::Sun, - "uwp" => Vendor::Uwp, - "wrs" => Vendor::Wrs, -- _ => return Err(()), -+ custom => { -+ use alloc::borrow::ToOwned; -+ -+ // A custom vendor. Since triple syntax is so loosely defined, -+ // be as conservative as we can to avoid potential ambiguities. -+ // We err on the side of being too strict here, as we can -+ // always relax it if needed. -+ -+ // Don't allow empty string names. -+ if custom.is_empty() { -+ return Err(()); -+ } -+ -+ // Don't allow any other recognized name as a custom vendor, -+ // since vendors can be omitted in some contexts. -+ if Architecture::from_str(custom).is_ok() -+ || OperatingSystem::from_str(custom).is_ok() -+ || Environment::from_str(custom).is_ok() -+ || BinaryFormat::from_str(custom).is_ok() -+ { -+ return Err(()); -+ } -+ -+ // Require the first character to be an ascii lowercase. -+ if !custom.chars().nth(0).unwrap().is_ascii_lowercase() { -+ return Err(()); -+ } -+ -+ // Restrict the set of characters permitted in a custom vendor. -+ if custom -+ .find(|c: char| { -+ !(c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_' || c == '.') -+ }) -+ .is_some() -+ { -+ return Err(()); -+ } -+ -+ Vendor::Custom(Box::new(custom.to_owned())) -+ } - }) - } - } -@@ -1120,4 +1171,57 @@ mod tests { - assert_eq!(t.environment, Environment::Eabihf); - assert_eq!(t.binary_format, BinaryFormat::Elf); - } -+ -+ #[test] -+ fn custom_vendors() { -+ assert!(Triple::from_str("x86_64--linux").is_err()); -+ assert!(Triple::from_str("x86_64-42-linux").is_err()); -+ assert!(Triple::from_str("x86_64-__customvendor__-linux").is_err()); -+ assert!(Triple::from_str("x86_64-^-linux").is_err()); -+ assert!(Triple::from_str("x86_64- -linux").is_err()); -+ assert!(Triple::from_str("x86_64-CustomVendor-linux").is_err()); -+ assert!(Triple::from_str("x86_64-linux-linux").is_err()); -+ assert!(Triple::from_str("x86_64-x86_64-linux").is_err()); -+ assert!(Triple::from_str("x86_64-elf-linux").is_err()); -+ assert!(Triple::from_str("x86_64-gnu-linux").is_err()); -+ assert!(Triple::from_str("x86_64-linux-customvendor").is_err()); -+ assert!(Triple::from_str("customvendor").is_err()); -+ assert!(Triple::from_str("customvendor-x86_64").is_err()); -+ assert!(Triple::from_str("x86_64-").is_err()); -+ assert!(Triple::from_str("x86_64--").is_err()); -+ -+ let t = Triple::from_str("x86_64-customvendor-linux") -+ .expect("can't parse target with custom vendor"); -+ assert_eq!(t.architecture, Architecture::X86_64); -+ assert_eq!( -+ t.vendor, -+ Vendor::Custom(Box::new(String::from_str("customvendor").unwrap())) -+ ); -+ assert_eq!(t.operating_system, OperatingSystem::Linux); -+ assert_eq!(t.environment, Environment::Unknown); -+ assert_eq!(t.binary_format, BinaryFormat::Elf); -+ assert_eq!(t.to_string(), "x86_64-customvendor-linux"); -+ -+ let t = Triple::from_str("x86_64-customvendor") -+ .expect("can't parse target with custom vendor"); -+ assert_eq!(t.architecture, Architecture::X86_64); -+ assert_eq!( -+ t.vendor, -+ Vendor::Custom(Box::new(String::from_str("customvendor").unwrap())) -+ ); -+ assert_eq!(t.operating_system, OperatingSystem::Unknown); -+ assert_eq!(t.environment, Environment::Unknown); -+ assert_eq!(t.binary_format, BinaryFormat::Unknown); -+ -+ assert_eq!( -+ Triple::from_str("unknown-foo"), -+ Ok(Triple { -+ architecture: Architecture::Unknown, -+ vendor: Vendor::Custom(Box::new(String::from_str("foo").unwrap())), -+ operating_system: OperatingSystem::Unknown, -+ environment: Environment::Unknown, -+ binary_format: BinaryFormat::Unknown, -+ }) -+ ); -+ } - } -diff --git a/src/triple.rs b/src/triple.rs -index 36dcd9a..1abda26 100644 ---- a/third_party/rust/target-lexicon.0.9.0/src/triple.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/triple.rs -@@ -322,10 +322,6 @@ mod tests { - Triple::from_str("foo"), - Err(ParseError::UnrecognizedArchitecture("foo".to_owned())) - ); -- assert_eq!( -- Triple::from_str("unknown-foo"), -- Err(ParseError::UnrecognizedVendor("foo".to_owned())) -- ); - assert_eq!( - Triple::from_str("unknown-unknown-foo"), - Err(ParseError::UnrecognizedOperatingSystem("foo".to_owned())) - -From 6f90d7274dce4e7f9bb120f6b36cf26881bde9a7 Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Tue, 5 Nov 2019 10:33:56 -0800 -Subject: [PATCH 2/7] Add more tests. - ---- - src/targets.rs | 30 ++++++++++++++++++++++++++++-- - 1 file changed, 28 insertions(+), 2 deletions(-) - -diff --git a/src/targets.rs b/src/targets.rs -index 90b2736..7d1f069 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/targets.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/targets.rs -@@ -1174,6 +1174,7 @@ mod tests { - - #[test] - fn custom_vendors() { -+ // Test various invalid cases. - assert!(Triple::from_str("x86_64--linux").is_err()); - assert!(Triple::from_str("x86_64-42-linux").is_err()); - assert!(Triple::from_str("x86_64-__customvendor__-linux").is_err()); -@@ -1190,6 +1191,31 @@ mod tests { - assert!(Triple::from_str("x86_64-").is_err()); - assert!(Triple::from_str("x86_64--").is_err()); - -+ // Test various Unicode things. -+ assert!( -+ Triple::from_str("x86_64-𝓬𝓾𝓼𝓽𝓸𝓶𝓿𝓮𝓷𝓭𝓸𝓻-linux").is_err(), -+ "unicode font hazard" -+ ); -+ assert!( -+ Triple::from_str("x86_64-ćúśtőḿvéńdőŕ-linux").is_err(), -+ "diacritical mark stripping hazard" -+ ); -+ assert!( -+ Triple::from_str("x86_64-customvendοr-linux").is_err(), -+ "homoglyph hazard" -+ ); -+ assert!(Triple::from_str("x86_64-customvendor-linux").is_ok()); -+ assert!( -+ Triple::from_str("x86_64-ffi-linux").is_err(), -+ "normalization hazard" -+ ); -+ assert!(Triple::from_str("x86_64-ffi-linux").is_ok()); -+ assert!( -+ Triple::from_str("x86_64-custom‍vendor-linux").is_err(), -+ "zero-width character hazard" -+ ); -+ -+ // Test some valid cases. - let t = Triple::from_str("x86_64-customvendor-linux") - .expect("can't parse target with custom vendor"); - assert_eq!(t.architecture, Architecture::X86_64); -@@ -1202,8 +1228,8 @@ mod tests { - assert_eq!(t.binary_format, BinaryFormat::Elf); - assert_eq!(t.to_string(), "x86_64-customvendor-linux"); - -- let t = Triple::from_str("x86_64-customvendor") -- .expect("can't parse target with custom vendor"); -+ let t = -+ Triple::from_str("x86_64-customvendor").expect("can't parse target with custom vendor"); - assert_eq!(t.architecture, Architecture::X86_64); - assert_eq!( - t.vendor, - -From c0e318b3c1be2d1965579f07dd563fb9cc0c4eb1 Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Tue, 5 Nov 2019 12:56:31 -0800 -Subject: [PATCH 3/7] Use `.chars().any(...)` instead of - `.find(...).is_some()`. - ---- - src/targets.rs | 9 +++------ - 1 file changed, 3 insertions(+), 6 deletions(-) - -diff --git a/src/targets.rs b/src/targets.rs -index 7d1f069..1078dd3 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/targets.rs -+++ b/third_party/rust/target-lexicon/src-0.9.0/targets.rs -@@ -779,12 +779,9 @@ impl FromStr for Vendor { - } - - // Restrict the set of characters permitted in a custom vendor. -- if custom -- .find(|c: char| { -- !(c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_' || c == '.') -- }) -- .is_some() -- { -+ if custom.chars().any(|c: char| { -+ !(c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_' || c == '.') -+ }) { - return Err(()); - } - - -From f319950528654c772193d9eb3bf40bc8df35fcae Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Thu, 7 Nov 2019 15:15:48 -0800 -Subject: [PATCH 4/7] Fix build.rs to generate the correct code to build - Vendors. - ---- - build.rs | 14 ++++++++++++-- - 1 file changed, 12 insertions(+), 2 deletions(-) - -diff --git a/build.rs b/build.rs -index a0ba3b7..446f9e7 100644 ---- a/third_party/rust/target-lexicon-0.9.0/build.rs -+++ b/third_party/rust/target-lexicon-0.9.0/build.rs -@@ -32,6 +32,7 @@ mod parse_error { - } - } - -+use self::targets::Vendor; - use self::triple::Triple; - - fn main() { -@@ -60,7 +61,7 @@ fn write_host_rs(mut out: File, triple: Triple) -> io::Result<()> { - " architecture: Architecture::{:?},", - triple.architecture - )?; -- writeln!(out, " vendor: Vendor::{:?},", triple.vendor)?; -+ writeln!(out, " vendor: {},", vendor_display(&triple.vendor))?; - writeln!( - out, - " operating_system: OperatingSystem::{:?},", -@@ -90,7 +91,7 @@ fn write_host_rs(mut out: File, triple: Triple) -> io::Result<()> { - writeln!(out, "impl Vendor {{")?; - writeln!(out, " /// Return the vendor for the current host.")?; - writeln!(out, " pub const fn host() -> Self {{")?; -- writeln!(out, " Vendor::{:?}", triple.vendor)?; -+ writeln!(out, " {}", vendor_display(&triple.vendor))?; - writeln!(out, " }}")?; - writeln!(out, "}}")?; - writeln!(out)?; -@@ -160,3 +161,12 @@ fn write_host_rs(mut out: File, triple: Triple) -> io::Result<()> { - - Ok(()) - } -+ -+fn vendor_display(vendor: &Vendor) -> String { -+ match vendor { -+ Vendor::Custom(custom) => { -+ format!("Vendor::Custom(Box::new(String::from_str({:?})))", custom) -+ } -+ known => format!("Vendor::{:?}", known), -+ } -+} - -From e558f6934535be3b8ccc9a99a33e861cb7431dfe Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Fri, 8 Nov 2019 12:10:34 -0800 -Subject: [PATCH 5/7] Fix custom vendors in `const fn` contexts. - ---- - build.rs | 15 +++++++++++---- - src/lib.rs | 4 ++-- - src/targets.rs | 51 ++++++++++++++++++++++++++++++++++++++++++-------- - 3 files changed, 56 insertions(+), 14 deletions(-) - -diff --git a/build.rs b/build.rs -index 446f9e7..e88206e 100644 ---- a/third_party/rust/target-lexicon-0.9.0/build.rs -+++ b/third_party/rust/target-lexicon-0.9.0/build.rs -@@ -53,6 +53,8 @@ fn write_host_rs(mut out: File, triple: Triple) -> io::Result<()> { - writeln!(out, "use crate::Aarch64Architecture::*;")?; - writeln!(out, "#[allow(unused_imports)]")?; - writeln!(out, "use crate::ArmArchitecture::*;")?; -+ writeln!(out, "#[allow(unused_imports)]")?; -+ writeln!(out, "use crate::CustomVendor;")?; - writeln!(out)?; - writeln!(out, "/// The `Triple` of the current host.")?; - writeln!(out, "pub const HOST: Triple = Triple {{")?; -@@ -139,7 +141,11 @@ fn write_host_rs(mut out: File, triple: Triple) -> io::Result<()> { - " architecture: Architecture::{:?},", - triple.architecture - )?; -- writeln!(out, " vendor: Vendor::{:?},", triple.vendor)?; -+ writeln!( -+ out, -+ " vendor: {},", -+ vendor_display(&triple.vendor) -+ )?; - writeln!( - out, - " operating_system: OperatingSystem::{:?},", -@@ -164,9 +170,10 @@ fn write_host_rs(mut out: File, triple: Triple) -> io::Result<()> { - - fn vendor_display(vendor: &Vendor) -> String { - match vendor { -- Vendor::Custom(custom) => { -- format!("Vendor::Custom(Box::new(String::from_str({:?})))", custom) -- } -+ Vendor::Custom(custom) => format!( -+ "Vendor::Custom(CustomVendor::Static({:?}))", -+ custom.as_str() -+ ), - known => format!("Vendor::{:?}", known), - } - } -diff --git a/src/lib.rs b/src/lib.rs -index 8d6da8d..70f6488 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/lib.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/lib.rs -@@ -28,7 +28,7 @@ mod triple; - pub use self::host::HOST; - pub use self::parse_error::ParseError; - pub use self::targets::{ -- Aarch64Architecture, Architecture, ArmArchitecture, BinaryFormat, Environment, OperatingSystem, -- Vendor, -+ Aarch64Architecture, Architecture, ArmArchitecture, BinaryFormat, CustomVendor, Environment, -+ OperatingSystem, Vendor, - }; - pub use self::triple::{CallingConvention, Endianness, PointerWidth, Triple}; -diff --git a/src/targets.rs b/src/targets.rs -index 1078dd3..7152020 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/targets.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/targets.rs -@@ -4,6 +4,7 @@ use crate::triple::{Endianness, PointerWidth, Triple}; - use alloc::boxed::Box; - use alloc::string::String; - use core::fmt; -+use core::hash::{Hash, Hasher}; - use core::str::FromStr; - - /// The "architecture" field, which in some cases also specifies a specific -@@ -292,6 +293,39 @@ impl Aarch64Architecture { - } - } - -+/// A string for a `Vendor::Custom` that can either be used in `const` -+/// contexts or hold dynamic strings. -+#[derive(Clone, Debug, Eq)] -+pub enum CustomVendor { -+ /// An owned `String`. This supports the general case. -+ Owned(Box), -+ /// A static `str`, so that `CustomVendor` can be constructed in `const` -+ /// contexts. -+ Static(&'static str), -+} -+ -+impl CustomVendor { -+ /// Extracts a string slice. -+ pub fn as_str(&self) -> &str { -+ match self { -+ CustomVendor::Owned(s) => s, -+ CustomVendor::Static(s) => s, -+ } -+ } -+} -+ -+impl PartialEq for CustomVendor { -+ fn eq(&self, other: &Self) -> bool { -+ self.as_str() == other.as_str() -+ } -+} -+ -+impl Hash for CustomVendor { -+ fn hash(&self, state: &mut H) { -+ self.as_str().hash(state) -+ } -+} -+ - /// The "vendor" field, which in practice is little more than an arbitrary - /// modifier. - #[derive(Clone, Debug, PartialEq, Eq, Hash)] -@@ -316,7 +350,7 @@ pub enum Vendor { - /// - /// Outside of such patched environments, users of `target-lexicon` should - /// treat `Custom` the same as `Unknown` and ignore the string. -- Custom(Box), -+ Custom(CustomVendor), - } - - /// The "operating system" field, which sometimes implies an environment, and -@@ -728,7 +762,7 @@ impl fmt::Display for Vendor { - Vendor::Sun => "sun", - Vendor::Uwp => "uwp", - Vendor::Wrs => "wrs", -- Vendor::Custom(ref name) => name, -+ Vendor::Custom(ref name) => name.as_str(), - }; - f.write_str(s) - } -@@ -779,13 +813,14 @@ impl FromStr for Vendor { - } - - // Restrict the set of characters permitted in a custom vendor. -- if custom.chars().any(|c: char| { -+ fn is_prohibited_char(c: char) -> bool { - !(c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_' || c == '.') -- }) { -+ } -+ if custom.chars().any(is_prohibited_char) { - return Err(()); - } - -- Vendor::Custom(Box::new(custom.to_owned())) -+ Vendor::Custom(CustomVendor::Owned(Box::new(custom.to_owned()))) - } - }) - } -@@ -1218,7 +1253,7 @@ mod tests { - assert_eq!(t.architecture, Architecture::X86_64); - assert_eq!( - t.vendor, -- Vendor::Custom(Box::new(String::from_str("customvendor").unwrap())) -+ Vendor::Custom(CustomVendor::Static("customvendor")) - ); - assert_eq!(t.operating_system, OperatingSystem::Linux); - assert_eq!(t.environment, Environment::Unknown); -@@ -1230,7 +1265,7 @@ mod tests { - assert_eq!(t.architecture, Architecture::X86_64); - assert_eq!( - t.vendor, -- Vendor::Custom(Box::new(String::from_str("customvendor").unwrap())) -+ Vendor::Custom(CustomVendor::Static("customvendor")) - ); - assert_eq!(t.operating_system, OperatingSystem::Unknown); - assert_eq!(t.environment, Environment::Unknown); -@@ -1240,7 +1275,7 @@ mod tests { - Triple::from_str("unknown-foo"), - Ok(Triple { - architecture: Architecture::Unknown, -- vendor: Vendor::Custom(Box::new(String::from_str("foo").unwrap())), -+ vendor: Vendor::Custom(CustomVendor::Static("foo")), - operating_system: OperatingSystem::Unknown, - environment: Environment::Unknown, - binary_format: BinaryFormat::Unknown, - -From bc4b444133b8a5e56602f7c77c10ef3f1e7a7c78 Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Mon, 18 Nov 2019 13:45:58 -0800 -Subject: [PATCH 6/7] Add a testcase with a BOM too, just in case. - ---- - src/targets.rs | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/targets.rs b/src/targets.rs -index 7152020..9a4d990 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/targets.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/targets.rs -@@ -1246,6 +1246,10 @@ mod tests { - Triple::from_str("x86_64-custom‍vendor-linux").is_err(), - "zero-width character hazard" - ); -+ assert!( -+ Triple::from_str("x86_64-customvendor-linux").is_err(), -+ "BOM hazard" -+ ); - - // Test some valid cases. - let t = Triple::from_str("x86_64-customvendor-linux") - -From 721fbbe1c9cfd3adc9aaf011c62d6a36078f4133 Mon Sep 17 00:00:00 2001 -From: Dan Gohman -Date: Mon, 18 Nov 2019 20:56:40 -0800 -Subject: [PATCH 7/7] Use an anonymous function instead of just a local - function. - ---- - src/targets.rs | 5 ++--- - 1 file changed, 2 insertions(+), 3 deletions(-) - -diff --git a/src/targets.rs b/src/targets.rs -index 9a4d990..eb5a088 100644 ---- a/third_party/rust/target-lexicon-0.9.0/src/targets.rs -+++ b/third_party/rust/target-lexicon-0.9.0/src/targets.rs -@@ -813,10 +813,9 @@ impl FromStr for Vendor { - } - - // Restrict the set of characters permitted in a custom vendor. -- fn is_prohibited_char(c: char) -> bool { -+ if custom.chars().any(|c: char| { - !(c.is_ascii_lowercase() || c.is_ascii_digit() || c == '_' || c == '.') -- } -- if custom.chars().any(is_prohibited_char) { -+ }) { - return Err(()); - } - diff --git a/user/zotero/avoid-redefinition.patch b/user/zotero/avoid-redefinition.patch deleted file mode 100644 index af11c50..0000000 --- a/user/zotero/avoid-redefinition.patch +++ /dev/null @@ -1,15 +0,0 @@ -Author: Rasmus Thomsen -Reason: FF is mixing userspace net headers (net/if.h) and kernelspace ones -(linux/if.h), leading to redefinitions. We need to include net/if.h before -linux/if.h because linux/if.h has redifinition guards whereas net/if.h doesnt -Upstream: No ---- a/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c.orig 2020-07-28 19:24:32.359751046 +0200 -+++ b/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c 2020-07-28 19:24:37.856343751 +0200 -@@ -31,6 +31,7 @@ - */ - - #if defined(LINUX) -+#include - #include "addrs-netlink.h" - #include - #include diff --git a/user/zotero/ffmpeg6-fixup.patch b/user/zotero/ffmpeg6-fixup.patch deleted file mode 100644 index 8a4990b..0000000 --- a/user/zotero/ffmpeg6-fixup.patch +++ /dev/null @@ -1,13 +0,0 @@ -fixup of the previous- no sysctl header on musl --- ---- a/media/ffvpx/config_unix_aarch64.h -+++ b/media/ffvpx/config_unix_aarch64.h -@@ -329,7 +329,7 @@ - #define HAVE_SLEEP 0 - #define HAVE_STRERROR_R 1 - #define HAVE_SYSCONF 1 --#define HAVE_SYSCTL 1 -+#define HAVE_SYSCTL 0 - #define HAVE_USLEEP 1 - #define HAVE_UTGETOSTYPEFROMSTRING 0 - #define HAVE_VIRTUALALLOC 0 diff --git a/user/zotero/firefox-102.12.0-ffmpeg_6-1.patch b/user/zotero/firefox-102.12.0-ffmpeg_6-1.patch deleted file mode 100644 index 4867026..0000000 --- a/user/zotero/firefox-102.12.0-ffmpeg_6-1.patch +++ /dev/null @@ -1,79803 +0,0 @@ -Submitted By: Pierre Labastie -Date: 2022-04-06 -Initial Package Version: 102.9.0esr -Upstream Status: Applied -Origin: upstream (rediffed for applying to 102.9) -Description: Update Gecko to use ffmpeg 6.0 APIs - -Without this patch, H.264 videos cannot be played. Fix taken from - https://hg.mozilla.org/mozilla-central/rev/467cc49519ff - https://hg.mozilla.org/mozilla-central/rev/c174bd2624e2 - https://hg.mozilla.org/mozilla-central/rev/2b8ef32d5cbe - https://hg.mozilla.org/mozilla-central/rev/86f5be2f7d24 - https://hg.mozilla.org/mozilla-central/rev/c0bdf286aeea - https://hg.mozilla.org/mozilla-central/rev/1d959fb3ed39 - https://hg.mozilla.org/mozilla-central/rev/72741c64ce30 - https://hg.mozilla.org/mozilla-central/rev/02ab0b6c0713 - https://hg.mozilla.org/mozilla-central/rev/f35fdcd00b92 - https://hg.mozilla.org/mozilla-central/rev/f446b3e633af - https://hg.mozilla.org/mozilla-central/rev/3ace3ff557d1 - https://hg.mozilla.org/mozilla-central/rev/2453ed57c828 - https://hg.mozilla.org/mozilla-central/rev/f9db1c11b1c0 - https://hg.mozilla.org/mozilla-central/rev/cff1321634cf -and https://hg.mozilla.org/mozilla-central/rev/4e3d5ec4e2b1 -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avcodec.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,3230 @@ -+/* -+ * copyright (c) 2001 Fabrice Bellard -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_AVCODEC_H -+#define AVCODEC_AVCODEC_H -+ -+/** -+ * @file -+ * @ingroup libavc -+ * Libavcodec external API header -+ */ -+ -+#include "libavutil/samplefmt.h" -+#include "libavutil/attributes.h" -+#include "libavutil/avutil.h" -+#include "libavutil/buffer.h" -+#include "libavutil/dict.h" -+#include "libavutil/frame.h" -+#include "libavutil/log.h" -+#include "libavutil/pixfmt.h" -+#include "libavutil/rational.h" -+ -+#include "codec.h" -+#include "codec_desc.h" -+#include "codec_par.h" -+#include "codec_id.h" -+#include "defs.h" -+#include "packet.h" -+#include "version_major.h" -+#ifndef HAVE_AV_CONFIG_H -+/* When included as part of the ffmpeg build, only include the major version -+ * to avoid unnecessary rebuilds. When included externally, keep including -+ * the full version information. */ -+# include "version.h" -+#endif -+ -+/** -+ * @defgroup libavc libavcodec -+ * Encoding/Decoding Library -+ * -+ * @{ -+ * -+ * @defgroup lavc_decoding Decoding -+ * @{ -+ * @} -+ * -+ * @defgroup lavc_encoding Encoding -+ * @{ -+ * @} -+ * -+ * @defgroup lavc_codec Codecs -+ * @{ -+ * @defgroup lavc_codec_native Native Codecs -+ * @{ -+ * @} -+ * @defgroup lavc_codec_wrappers External library wrappers -+ * @{ -+ * @} -+ * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge -+ * @{ -+ * @} -+ * @} -+ * @defgroup lavc_internal Internal -+ * @{ -+ * @} -+ * @} -+ */ -+ -+/** -+ * @ingroup libavc -+ * @defgroup lavc_encdec send/receive encoding and decoding API overview -+ * @{ -+ * -+ * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ -+ * avcodec_receive_packet() functions provide an encode/decode API, which -+ * decouples input and output. -+ * -+ * The API is very similar for encoding/decoding and audio/video, and works as -+ * follows: -+ * - Set up and open the AVCodecContext as usual. -+ * - Send valid input: -+ * - For decoding, call avcodec_send_packet() to give the decoder raw -+ * compressed data in an AVPacket. -+ * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame -+ * containing uncompressed audio or video. -+ * -+ * In both cases, it is recommended that AVPackets and AVFrames are -+ * refcounted, or libavcodec might have to copy the input data. (libavformat -+ * always returns refcounted AVPackets, and av_frame_get_buffer() allocates -+ * refcounted AVFrames.) -+ * - Receive output in a loop. Periodically call one of the avcodec_receive_*() -+ * functions and process their output: -+ * - For decoding, call avcodec_receive_frame(). On success, it will return -+ * an AVFrame containing uncompressed audio or video data. -+ * - For encoding, call avcodec_receive_packet(). On success, it will return -+ * an AVPacket with a compressed frame. -+ * -+ * Repeat this call until it returns AVERROR(EAGAIN) or an error. The -+ * AVERROR(EAGAIN) return value means that new input data is required to -+ * return new output. In this case, continue with sending input. For each -+ * input frame/packet, the codec will typically return 1 output frame/packet, -+ * but it can also be 0 or more than 1. -+ * -+ * At the beginning of decoding or encoding, the codec might accept multiple -+ * input frames/packets without returning a frame, until its internal buffers -+ * are filled. This situation is handled transparently if you follow the steps -+ * outlined above. -+ * -+ * In theory, sending input can result in EAGAIN - this should happen only if -+ * not all output was received. You can use this to structure alternative decode -+ * or encode loops other than the one suggested above. For example, you could -+ * try sending new input on each iteration, and try to receive output if that -+ * returns EAGAIN. -+ * -+ * End of stream situations. These require "flushing" (aka draining) the codec, -+ * as the codec might buffer multiple frames or packets internally for -+ * performance or out of necessity (consider B-frames). -+ * This is handled as follows: -+ * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) -+ * or avcodec_send_frame() (encoding) functions. This will enter draining -+ * mode. -+ * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() -+ * (encoding) in a loop until AVERROR_EOF is returned. The functions will -+ * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. -+ * - Before decoding can be resumed again, the codec has to be reset with -+ * avcodec_flush_buffers(). -+ * -+ * Using the API as outlined above is highly recommended. But it is also -+ * possible to call functions outside of this rigid schema. For example, you can -+ * call avcodec_send_packet() repeatedly without calling -+ * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed -+ * until the codec's internal buffer has been filled up (which is typically of -+ * size 1 per output frame, after initial input), and then reject input with -+ * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to -+ * read at least some output. -+ * -+ * Not all codecs will follow a rigid and predictable dataflow; the only -+ * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on -+ * one end implies that a receive/send call on the other end will succeed, or -+ * at least will not fail with AVERROR(EAGAIN). In general, no codec will -+ * permit unlimited buffering of input or output. -+ * -+ * A codec is not allowed to return AVERROR(EAGAIN) for both sending and -+ * receiving. This would be an invalid state, which could put the codec user -+ * into an endless loop. The API has no concept of time either: it cannot happen -+ * that trying to do avcodec_send_packet() results in AVERROR(EAGAIN), but a -+ * repeated call 1 second later accepts the packet (with no other receive/flush -+ * API calls involved). The API is a strict state machine, and the passage of -+ * time is not supposed to influence it. Some timing-dependent behavior might -+ * still be deemed acceptable in certain cases. But it must never result in both -+ * send/receive returning EAGAIN at the same time at any point. It must also -+ * absolutely be avoided that the current state is "unstable" and can -+ * "flip-flop" between the send/receive APIs allowing progress. For example, -+ * it's not allowed that the codec randomly decides that it actually wants to -+ * consume a packet now instead of returning a frame, after it just returned -+ * AVERROR(EAGAIN) on an avcodec_send_packet() call. -+ * @} -+ */ -+ -+/** -+ * @defgroup lavc_core Core functions/structures. -+ * @ingroup libavc -+ * -+ * Basic definitions, functions for querying libavcodec capabilities, -+ * allocating core structures, etc. -+ * @{ -+ */ -+ -+/** -+ * @ingroup lavc_encoding -+ * minimum encoding buffer size -+ * Used to avoid some checks during header writing. -+ */ -+#define AV_INPUT_BUFFER_MIN_SIZE 16384 -+ -+/** -+ * @ingroup lavc_encoding -+ */ -+typedef struct RcOverride { -+ int start_frame; -+ int end_frame; -+ int qscale; // If this is 0 then quality_factor will be used instead. -+ float quality_factor; -+} RcOverride; -+ -+/* encoding support -+ These flags can be passed in AVCodecContext.flags before initialization. -+ Note: Not everything is supported yet. -+*/ -+ -+/** -+ * Allow decoders to produce frames with data planes that are not aligned -+ * to CPU requirements (e.g. due to cropping). -+ */ -+#define AV_CODEC_FLAG_UNALIGNED (1 << 0) -+/** -+ * Use fixed qscale. -+ */ -+#define AV_CODEC_FLAG_QSCALE (1 << 1) -+/** -+ * 4 MV per MB allowed / advanced prediction for H.263. -+ */ -+#define AV_CODEC_FLAG_4MV (1 << 2) -+/** -+ * Output even those frames that might be corrupted. -+ */ -+#define AV_CODEC_FLAG_OUTPUT_CORRUPT (1 << 3) -+/** -+ * Use qpel MC. -+ */ -+#define AV_CODEC_FLAG_QPEL (1 << 4) -+/** -+ * Don't output frames whose parameters differ from first -+ * decoded frame in stream. -+ */ -+#define AV_CODEC_FLAG_DROPCHANGED (1 << 5) -+/** -+ * Request the encoder to output reconstructed frames, i.e.\ frames that would -+ * be produced by decoding the encoded bistream. These frames may be retrieved -+ * by calling avcodec_receive_frame() immediately after a successful call to -+ * avcodec_receive_packet(). -+ * -+ * Should only be used with encoders flagged with the -+ * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. -+ */ -+#define AV_CODEC_FLAG_RECON_FRAME (1 << 6) -+/** -+ * @par decoding -+ * Request the decoder to propagate each packets AVPacket.opaque and -+ * AVPacket.opaque_ref to its corresponding output AVFrame. -+ * -+ * @par encoding: -+ * Request the encoder to propagate each frame's AVFrame.opaque and -+ * AVFrame.opaque_ref values to its corresponding output AVPacket. -+ * -+ * @par -+ * May only be set on encoders that have the -+ * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. -+ * -+ * @note -+ * While in typical cases one input frame produces exactly one output packet -+ * (perhaps after a delay), in general the mapping of frames to packets is -+ * M-to-N, so -+ * - Any number of input frames may be associated with any given output packet. -+ * This includes zero - e.g. some encoders may output packets that carry only -+ * metadata about the whole stream. -+ * - A given input frame may be associated with any number of output packets. -+ * Again this includes zero - e.g. some encoders may drop frames under certain -+ * conditions. -+ * . -+ * This implies that when using this flag, the caller must NOT assume that -+ * - a given input frame's opaques will necessarily appear on some output -+ * packet; -+ * - every output packet will have some non-NULL opaque value. -+ * . -+ * When an output packet contains multiple frames, the opaque values will be -+ * taken from the first of those. -+ * -+ * @note -+ * The converse holds for decoders, with frames and packets switched. -+ */ -+#define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) -+/** -+ * Signal to the encoder that the values of AVFrame.duration are valid and -+ * should be used (typically for transferring them to output packets). -+ * -+ * If this flag is not set, frame durations are ignored. -+ */ -+#define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) -+/** -+ * Use internal 2pass ratecontrol in first pass mode. -+ */ -+#define AV_CODEC_FLAG_PASS1 (1 << 9) -+/** -+ * Use internal 2pass ratecontrol in second pass mode. -+ */ -+#define AV_CODEC_FLAG_PASS2 (1 << 10) -+/** -+ * loop filter. -+ */ -+#define AV_CODEC_FLAG_LOOP_FILTER (1 << 11) -+/** -+ * Only decode/encode grayscale. -+ */ -+#define AV_CODEC_FLAG_GRAY (1 << 13) -+/** -+ * error[?] variables will be set during encoding. -+ */ -+#define AV_CODEC_FLAG_PSNR (1 << 15) -+/** -+ * Use interlaced DCT. -+ */ -+#define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -+/** -+ * Force low delay. -+ */ -+#define AV_CODEC_FLAG_LOW_DELAY (1 << 19) -+/** -+ * Place global headers in extradata instead of every keyframe. -+ */ -+#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22) -+/** -+ * Use only bitexact stuff (except (I)DCT). -+ */ -+#define AV_CODEC_FLAG_BITEXACT (1 << 23) -+/* Fx : Flag for H.263+ extra options */ -+/** -+ * H.263 advanced intra coding / MPEG-4 AC prediction -+ */ -+#define AV_CODEC_FLAG_AC_PRED (1 << 24) -+/** -+ * interlaced motion estimation -+ */ -+#define AV_CODEC_FLAG_INTERLACED_ME (1 << 29) -+#define AV_CODEC_FLAG_CLOSED_GOP (1U << 31) -+ -+/** -+ * Allow non spec compliant speedup tricks. -+ */ -+#define AV_CODEC_FLAG2_FAST (1 << 0) -+/** -+ * Skip bitstream encoding. -+ */ -+#define AV_CODEC_FLAG2_NO_OUTPUT (1 << 2) -+/** -+ * Place global headers at every keyframe instead of in extradata. -+ */ -+#define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) -+ -+/** -+ * Input bitstream might be truncated at a packet boundaries -+ * instead of only at frame boundaries. -+ */ -+#define AV_CODEC_FLAG2_CHUNKS (1 << 15) -+/** -+ * Discard cropping information from SPS. -+ */ -+#define AV_CODEC_FLAG2_IGNORE_CROP (1 << 16) -+ -+/** -+ * Show all frames before the first keyframe -+ */ -+#define AV_CODEC_FLAG2_SHOW_ALL (1 << 22) -+/** -+ * Export motion vectors through frame side data -+ */ -+#define AV_CODEC_FLAG2_EXPORT_MVS (1 << 28) -+/** -+ * Do not skip samples and export skip information as frame side data -+ */ -+#define AV_CODEC_FLAG2_SKIP_MANUAL (1 << 29) -+/** -+ * Do not reset ASS ReadOrder field on flush (subtitles decoding) -+ */ -+#define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) -+/** -+ * Generate/parse ICC profiles on encode/decode, as appropriate for the type of -+ * file. No effect on codecs which cannot contain embedded ICC profiles, or -+ * when compiled without support for lcms2. -+ */ -+#define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31) -+ -+/* Exported side data. -+ These flags can be passed in AVCodecContext.export_side_data before -+ initialization. -+*/ -+/** -+ * Export motion vectors through frame side data -+ */ -+#define AV_CODEC_EXPORT_DATA_MVS (1 << 0) -+/** -+ * Export encoder Producer Reference Time through packet side data -+ */ -+#define AV_CODEC_EXPORT_DATA_PRFT (1 << 1) -+/** -+ * Decoding only. -+ * Export the AVVideoEncParams structure through frame side data. -+ */ -+#define AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS (1 << 2) -+/** -+ * Decoding only. -+ * Do not apply film grain, export it instead. -+ */ -+#define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) -+ -+/** -+ * The decoder will keep a reference to the frame and may reuse it later. -+ */ -+#define AV_GET_BUFFER_FLAG_REF (1 << 0) -+ -+/** -+ * The encoder will keep a reference to the packet and may reuse it later. -+ */ -+#define AV_GET_ENCODE_BUFFER_FLAG_REF (1 << 0) -+ -+struct AVCodecInternal; -+ -+/** -+ * main external API structure. -+ * New fields can be added to the end with minor version bumps. -+ * Removal, reordering and changes to existing fields require a major -+ * version bump. -+ * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from -+ * user applications. The name string for AVOptions options matches the -+ * associated command line parameter name and can be found in -+ * libavcodec/options_table.h The AVOption/command line parameter names differ -+ * in some cases from the C structure field names for historic reasons or -+ * brevity. sizeof(AVCodecContext) must not be used outside libav*. -+ */ -+typedef struct AVCodecContext { -+ /** -+ * information on struct for av_log -+ * - set by avcodec_alloc_context3 -+ */ -+ const AVClass* av_class; -+ int log_level_offset; -+ -+ enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */ -+ const struct AVCodec* codec; -+ enum AVCodecID codec_id; /* see AV_CODEC_ID_xxx */ -+ -+ /** -+ * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). -+ * This is used to work around some encoder bugs. -+ * A demuxer should set this to what is stored in the field used to identify -+ * the codec. If there are multiple such fields in a container then the -+ * demuxer should choose the one which maximizes the information about the -+ * used codec. If the codec tag field in a container is larger than 32 bits -+ * then the demuxer should remap the longer ID to 32 bits with a table or -+ * other structure. Alternatively a new extra_codec_tag + size could be added -+ * but for this a clear advantage must be demonstrated first. -+ * - encoding: Set by user, if not then the default based on codec_id will be -+ * used. -+ * - decoding: Set by user, will be converted to uppercase by libavcodec -+ * during init. -+ */ -+ unsigned int codec_tag; -+ -+ void* priv_data; -+ -+ /** -+ * Private context used for internal data. -+ * -+ * Unlike priv_data, this is not codec-specific. It is used in general -+ * libavcodec functions. -+ */ -+ struct AVCodecInternal* internal; -+ -+ /** -+ * Private data of the user, can be used to carry app specific stuff. -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ void* opaque; -+ -+ /** -+ * the average bitrate -+ * - encoding: Set by user; unused for constant quantizer encoding. -+ * - decoding: Set by user, may be overwritten by libavcodec -+ * if this info is available in the stream -+ */ -+ int64_t bit_rate; -+ -+ /** -+ * number of bits the bitstream is allowed to diverge from the reference. -+ * the reference can be CBR (for CBR pass1) or VBR (for pass2) -+ * - encoding: Set by user; unused for constant quantizer encoding. -+ * - decoding: unused -+ */ -+ int bit_rate_tolerance; -+ -+ /** -+ * Global quality for codecs which cannot change it per frame. -+ * This should be proportional to MPEG-1/2/4 qscale. -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int global_quality; -+ -+ /** -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int compression_level; -+#define FF_COMPRESSION_DEFAULT -1 -+ -+ /** -+ * AV_CODEC_FLAG_*. -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ int flags; -+ -+ /** -+ * AV_CODEC_FLAG2_* -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ int flags2; -+ -+ /** -+ * some codecs need / can use extradata like Huffman tables. -+ * MJPEG: Huffman tables -+ * rv10: additional flags -+ * MPEG-4: global headers (they can be in the bitstream or here) -+ * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger -+ * than extradata_size to avoid problems if it is read with the bitstream -+ * reader. The bytewise contents of extradata must not depend on the -+ * architecture or CPU endianness. Must be allocated with the av_malloc() -+ * family of functions. -+ * - encoding: Set/allocated/freed by libavcodec. -+ * - decoding: Set/allocated/freed by user. -+ */ -+ uint8_t* extradata; -+ int extradata_size; -+ -+ /** -+ * This is the fundamental unit of time (in seconds) in terms -+ * of which frame timestamps are represented. For fixed-fps content, -+ * timebase should be 1/framerate and timestamp increments should be -+ * identically 1. -+ * This often, but not always is the inverse of the frame rate or field rate -+ * for video. 1/time_base is not the average frame rate if the frame rate is -+ * not constant. -+ * -+ * Like containers, elementary streams also can store timestamps, 1/time_base -+ * is the unit in which these timestamps are specified. -+ * As example of such codec time base see ISO/IEC 14496-2:2001(E) -+ * vop_time_increment_resolution and fixed_vop_rate -+ * (fixed_vop_rate == 0 implies that it is different from the framerate) -+ * -+ * - encoding: MUST be set by user. -+ * - decoding: unused. -+ */ -+ AVRational time_base; -+ -+ /** -+ * For some codecs, the time base is closer to the field rate than the frame -+ * rate. Most notably, H.264 and MPEG-2 specify time_base as half of frame -+ * duration if no telecine is used ... -+ * -+ * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it -+ * to 2. -+ */ -+ int ticks_per_frame; -+ -+ /** -+ * Codec delay. -+ * -+ * Encoding: Number of frames delay there will be from the encoder input to -+ * the decoder output. (we assume the decoder matches the spec) -+ * Decoding: Number of frames delay in addition to what a standard decoder -+ * as specified in the spec would produce. -+ * -+ * Video: -+ * Number of frames the decoded output will be delayed relative to the -+ * encoded input. -+ * -+ * Audio: -+ * For encoding, this field is unused (see initial_padding). -+ * -+ * For decoding, this is the number of samples the decoder needs to -+ * output before the decoder's output is valid. When seeking, you should -+ * start decoding this many samples prior to your desired seek point. -+ * -+ * - encoding: Set by libavcodec. -+ * - decoding: Set by libavcodec. -+ */ -+ int delay; -+ -+ /* video only */ -+ /** -+ * picture width / height. -+ * -+ * @note Those fields may not match the values of the last -+ * AVFrame output by avcodec_receive_frame() due frame -+ * reordering. -+ * -+ * - encoding: MUST be set by user. -+ * - decoding: May be set by the user before opening the decoder if known e.g. -+ * from the container. Some decoders will require the dimensions -+ * to be set by the caller. During decoding, the decoder may -+ * overwrite those values as required while parsing the data. -+ */ -+ int width, height; -+ -+ /** -+ * Bitstream width / height, may be different from width/height e.g. when -+ * the decoded frame is cropped before being output or lowres is enabled. -+ * -+ * @note Those field may not match the value of the last -+ * AVFrame output by avcodec_receive_frame() due frame -+ * reordering. -+ * -+ * - encoding: unused -+ * - decoding: May be set by the user before opening the decoder if known -+ * e.g. from the container. During decoding, the decoder may -+ * overwrite those values as required while parsing the data. -+ */ -+ int coded_width, coded_height; -+ -+ /** -+ * the number of pictures in a group of pictures, or 0 for intra_only -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int gop_size; -+ -+ /** -+ * Pixel format, see AV_PIX_FMT_xxx. -+ * May be set by the demuxer if known from headers. -+ * May be overridden by the decoder if it knows better. -+ * -+ * @note This field may not match the value of the last -+ * AVFrame output by avcodec_receive_frame() due frame -+ * reordering. -+ * -+ * - encoding: Set by user. -+ * - decoding: Set by user if known, overridden by libavcodec while -+ * parsing the data. -+ */ -+ enum AVPixelFormat pix_fmt; -+ -+ /** -+ * If non NULL, 'draw_horiz_band' is called by the libavcodec -+ * decoder to draw a horizontal band. It improves cache usage. Not -+ * all codecs can do that. You must check the codec capabilities -+ * beforehand. -+ * When multithreading is used, it may be called from multiple threads -+ * at the same time; threads might draw different parts of the same AVFrame, -+ * or multiple AVFrames, and there is no guarantee that slices will be drawn -+ * in order. -+ * The function is also used by hardware acceleration APIs. -+ * It is called at least once during frame decoding to pass -+ * the data needed for hardware render. -+ * In that mode instead of pixel data, AVFrame points to -+ * a structure specific to the acceleration API. The application -+ * reads the structure and can change some fields to indicate progress -+ * or mark state. -+ * - encoding: unused -+ * - decoding: Set by user. -+ * @param height the height of the slice -+ * @param y the y position of the slice -+ * @param type 1->top field, 2->bottom field, 3->frame -+ * @param offset offset into the AVFrame.data from which the slice should be -+ * read -+ */ -+ void (*draw_horiz_band)(struct AVCodecContext* s, const AVFrame* src, -+ int offset[AV_NUM_DATA_POINTERS], int y, int type, -+ int height); -+ -+ /** -+ * Callback to negotiate the pixel format. Decoding only, may be set by the -+ * caller before avcodec_open2(). -+ * -+ * Called by some decoders to select the pixel format that will be used for -+ * the output frames. This is mainly used to set up hardware acceleration, -+ * then the provided format list contains the corresponding hwaccel pixel -+ * formats alongside the "software" one. The software pixel format may also -+ * be retrieved from \ref sw_pix_fmt. -+ * -+ * This callback will be called when the coded frame properties (such as -+ * resolution, pixel format, etc.) change and more than one output format is -+ * supported for those new properties. If a hardware pixel format is chosen -+ * and initialization for it fails, the callback may be called again -+ * immediately. -+ * -+ * This callback may be called from different threads if the decoder is -+ * multi-threaded, but not from more than one thread simultaneously. -+ * -+ * @param fmt list of formats which may be used in the current -+ * configuration, terminated by AV_PIX_FMT_NONE. -+ * @warning Behavior is undefined if the callback returns a value other -+ * than one of the formats in fmt or AV_PIX_FMT_NONE. -+ * @return the chosen format or AV_PIX_FMT_NONE -+ */ -+ enum AVPixelFormat (*get_format)(struct AVCodecContext* s, -+ const enum AVPixelFormat* fmt); -+ -+ /** -+ * maximum number of B-frames between non-B-frames -+ * Note: The output will be delayed by max_b_frames+1 relative to the input. -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int max_b_frames; -+ -+ /** -+ * qscale factor between IP and B-frames -+ * If > 0 then the last P-frame quantizer will be used (q= -+ * lastp_q*factor+offset). If < 0 then normal ratecontrol will be done (q= -+ * -normal_q*factor+offset). -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float b_quant_factor; -+ -+ /** -+ * qscale offset between IP and B-frames -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float b_quant_offset; -+ -+ /** -+ * Size of the frame reordering buffer in the decoder. -+ * For MPEG-2 it is 1 IPB or 0 low delay IP. -+ * - encoding: Set by libavcodec. -+ * - decoding: Set by libavcodec. -+ */ -+ int has_b_frames; -+ -+ /** -+ * qscale factor between P- and I-frames -+ * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + -+ * offset). If < 0 then normal ratecontrol will be done (q= -+ * -normal_q*factor+offset). -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float i_quant_factor; -+ -+ /** -+ * qscale offset between P and I-frames -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float i_quant_offset; -+ -+ /** -+ * luminance masking (0-> disabled) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float lumi_masking; -+ -+ /** -+ * temporary complexity masking (0-> disabled) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float temporal_cplx_masking; -+ -+ /** -+ * spatial complexity masking (0-> disabled) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float spatial_cplx_masking; -+ -+ /** -+ * p block masking (0-> disabled) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float p_masking; -+ -+ /** -+ * darkness masking (0-> disabled) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ float dark_masking; -+ -+ /** -+ * slice count -+ * - encoding: Set by libavcodec. -+ * - decoding: Set by user (or 0). -+ */ -+ int slice_count; -+ -+ /** -+ * slice offsets in the frame in bytes -+ * - encoding: Set/allocated by libavcodec. -+ * - decoding: Set/allocated by user (or NULL). -+ */ -+ int* slice_offset; -+ -+ /** -+ * sample aspect ratio (0 if unknown) -+ * That is the width of a pixel divided by the height of the pixel. -+ * Numerator and denominator must be relatively prime and smaller than 256 for -+ * some video standards. -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ AVRational sample_aspect_ratio; -+ -+ /** -+ * motion estimation comparison function -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int me_cmp; -+ /** -+ * subpixel motion estimation comparison function -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int me_sub_cmp; -+ /** -+ * macroblock comparison function (not supported yet) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int mb_cmp; -+ /** -+ * interlaced DCT comparison function -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int ildct_cmp; -+#define FF_CMP_SAD 0 -+#define FF_CMP_SSE 1 -+#define FF_CMP_SATD 2 -+#define FF_CMP_DCT 3 -+#define FF_CMP_PSNR 4 -+#define FF_CMP_BIT 5 -+#define FF_CMP_RD 6 -+#define FF_CMP_ZERO 7 -+#define FF_CMP_VSAD 8 -+#define FF_CMP_VSSE 9 -+#define FF_CMP_NSSE 10 -+#define FF_CMP_W53 11 -+#define FF_CMP_W97 12 -+#define FF_CMP_DCTMAX 13 -+#define FF_CMP_DCT264 14 -+#define FF_CMP_MEDIAN_SAD 15 -+#define FF_CMP_CHROMA 256 -+ -+ /** -+ * ME diamond size & shape -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int dia_size; -+ -+ /** -+ * amount of previous MV predictors (2a+1 x 2a+1 square) -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int last_predictor_count; -+ -+ /** -+ * motion estimation prepass comparison function -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int me_pre_cmp; -+ -+ /** -+ * ME prepass diamond size & shape -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int pre_dia_size; -+ -+ /** -+ * subpel ME quality -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int me_subpel_quality; -+ -+ /** -+ * maximum motion estimation search range in subpel units -+ * If 0 then no limit. -+ * -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int me_range; -+ -+ /** -+ * slice flags -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ int slice_flags; -+#define SLICE_FLAG_CODED_ORDER \ -+ 0x0001 ///< draw_horiz_band() is called in coded order instead of display -+#define SLICE_FLAG_ALLOW_FIELD \ -+ 0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) -+#define SLICE_FLAG_ALLOW_PLANE \ -+ 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1) -+ -+ /** -+ * macroblock decision mode -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int mb_decision; -+#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp -+#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits -+#define FF_MB_DECISION_RD 2 ///< rate distortion -+ -+ /** -+ * custom intra quantization matrix -+ * Must be allocated with the av_malloc() family of functions, and will be -+ * freed in avcodec_free_context(). -+ * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. -+ * - decoding: Set/allocated/freed by libavcodec. -+ */ -+ uint16_t* intra_matrix; -+ -+ /** -+ * custom inter quantization matrix -+ * Must be allocated with the av_malloc() family of functions, and will be -+ * freed in avcodec_free_context(). -+ * - encoding: Set/allocated by user, freed by libavcodec. Can be NULL. -+ * - decoding: Set/allocated/freed by libavcodec. -+ */ -+ uint16_t* inter_matrix; -+ -+ /** -+ * precision of the intra DC coefficient - 8 -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec -+ */ -+ int intra_dc_precision; -+ -+ /** -+ * Number of macroblock rows at the top which are skipped. -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ int skip_top; -+ -+ /** -+ * Number of macroblock rows at the bottom which are skipped. -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ int skip_bottom; -+ -+ /** -+ * minimum MB Lagrange multiplier -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int mb_lmin; -+ -+ /** -+ * maximum MB Lagrange multiplier -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int mb_lmax; -+ -+ /** -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int bidir_refine; -+ -+ /** -+ * minimum GOP size -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int keyint_min; -+ -+ /** -+ * number of reference frames -+ * - encoding: Set by user. -+ * - decoding: Set by lavc. -+ */ -+ int refs; -+ -+ /** -+ * Note: Value depends upon the compare function used for fullpel ME. -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int mv0_threshold; -+ -+ /** -+ * Chromaticity coordinates of the source primaries. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVColorPrimaries color_primaries; -+ -+ /** -+ * Color Transfer Characteristic. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVColorTransferCharacteristic color_trc; -+ -+ /** -+ * YUV colorspace type. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVColorSpace colorspace; -+ -+ /** -+ * MPEG vs JPEG YUV range. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVColorRange color_range; -+ -+ /** -+ * This defines the location of chroma samples. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVChromaLocation chroma_sample_location; -+ -+ /** -+ * Number of slices. -+ * Indicates number of picture subdivisions. Used for parallelized -+ * decoding. -+ * - encoding: Set by user -+ * - decoding: unused -+ */ -+ int slices; -+ -+ /** Field order -+ * - encoding: set by libavcodec -+ * - decoding: Set by user. -+ */ -+ enum AVFieldOrder field_order; -+ -+ /* audio only */ -+ int sample_rate; ///< samples per second -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * number of audio channels -+ * @deprecated use ch_layout.nb_channels -+ */ -+ attribute_deprecated int channels; -+#endif -+ -+ /** -+ * audio sample format -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ enum AVSampleFormat sample_fmt; ///< sample format -+ -+ /* The following data should not be initialized. */ -+ /** -+ * Number of samples per channel in an audio frame. -+ * -+ * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame -+ * except the last must contain exactly frame_size samples per channel. -+ * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then -+ * the frame size is not restricted. -+ * - decoding: may be set by some decoders to indicate constant frame size -+ */ -+ int frame_size; -+ -+#if FF_API_AVCTX_FRAME_NUMBER -+ /** -+ * Frame counter, set by libavcodec. -+ * -+ * - decoding: total number of frames returned from the decoder so far. -+ * - encoding: total number of frames passed to the encoder so far. -+ * -+ * @note the counter is not incremented if encoding/decoding resulted in -+ * an error. -+ * @deprecated use frame_num instead -+ */ -+ attribute_deprecated int frame_number; -+#endif -+ -+ /** -+ * number of bytes per packet if constant and known or 0 -+ * Used by some WAV based audio codecs. -+ */ -+ int block_align; -+ -+ /** -+ * Audio cutoff bandwidth (0 means "automatic") -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int cutoff; -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * Audio channel layout. -+ * - encoding: set by user. -+ * - decoding: set by user, may be overwritten by libavcodec. -+ * @deprecated use ch_layout -+ */ -+ attribute_deprecated uint64_t channel_layout; -+ -+ /** -+ * Request decoder to use this channel layout if it can (0 for default) -+ * - encoding: unused -+ * - decoding: Set by user. -+ * @deprecated use "downmix" codec private option -+ */ -+ attribute_deprecated uint64_t request_channel_layout; -+#endif -+ -+ /** -+ * Type of service that the audio stream conveys. -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ enum AVAudioServiceType audio_service_type; -+ -+ /** -+ * desired sample format -+ * - encoding: Not used. -+ * - decoding: Set by user. -+ * Decoder will decode to this format if it can. -+ */ -+ enum AVSampleFormat request_sample_fmt; -+ -+ /** -+ * This callback is called at the beginning of each frame to get data -+ * buffer(s) for it. There may be one contiguous buffer for all the data or -+ * there may be a buffer per each data plane or anything in between. What -+ * this means is, you may set however many entries in buf[] you feel -+ * necessary. Each buffer must be reference-counted using the AVBuffer API -+ * (see description of buf[] below). -+ * -+ * The following fields will be set in the frame before this callback is -+ * called: -+ * - format -+ * - width, height (video only) -+ * - sample_rate, channel_layout, nb_samples (audio only) -+ * Their values may differ from the corresponding values in -+ * AVCodecContext. This callback must use the frame values, not the codec -+ * context values, to calculate the required buffer size. -+ * -+ * This callback must fill the following fields in the frame: -+ * - data[] -+ * - linesize[] -+ * - extended_data: -+ * * if the data is planar audio with more than 8 channels, then this -+ * callback must allocate and fill extended_data to contain all pointers -+ * to all data planes. data[] must hold as many pointers as it can. -+ * extended_data must be allocated with av_malloc() and will be freed in -+ * av_frame_unref(). -+ * * otherwise extended_data must point to data -+ * - buf[] must contain one or more pointers to AVBufferRef structures. Each -+ * of the frame's data and extended_data pointers must be contained in these. -+ * That is, one AVBufferRef for each allocated chunk of memory, not -+ * necessarily one AVBufferRef per data[] entry. See: av_buffer_create(), -+ * av_buffer_alloc(), and av_buffer_ref(). -+ * - extended_buf and nb_extended_buf must be allocated with av_malloc() by -+ * this callback and filled with the extra buffers if there are more -+ * buffers than buf[] can hold. extended_buf will be freed in -+ * av_frame_unref(). -+ * -+ * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call -+ * avcodec_default_get_buffer2() instead of providing buffers allocated by -+ * some other means. -+ * -+ * Each data plane must be aligned to the maximum required by the target -+ * CPU. -+ * -+ * @see avcodec_default_get_buffer2() -+ * -+ * Video: -+ * -+ * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused -+ * (read and/or written to if it is writable) later by libavcodec. -+ * -+ * avcodec_align_dimensions2() should be used to find the required width and -+ * height, as they normally need to be rounded up to the next multiple of 16. -+ * -+ * Some decoders do not support linesizes changing between frames. -+ * -+ * If frame multithreading is used, this callback may be called from a -+ * different thread, but not from more than one at once. Does not need to be -+ * reentrant. -+ * -+ * @see avcodec_align_dimensions2() -+ * -+ * Audio: -+ * -+ * Decoders request a buffer of a particular size by setting -+ * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, -+ * however, utilize only part of the buffer by setting AVFrame.nb_samples -+ * to a smaller value in the output frame. -+ * -+ * As a convenience, av_samples_get_buffer_size() and -+ * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() -+ * functions to find the required data size and to fill data pointers and -+ * linesize. In AVFrame.linesize, only linesize[0] may be set for audio -+ * since all planes must be the same size. -+ * -+ * @see av_samples_get_buffer_size(), av_samples_fill_arrays() -+ * -+ * - encoding: unused -+ * - decoding: Set by libavcodec, user can override. -+ */ -+ int (*get_buffer2)(struct AVCodecContext* s, AVFrame* frame, int flags); -+ -+ /* - encoding parameters */ -+ float qcompress; ///< amount of qscale change between easy & hard scenes -+ ///< (0.0-1.0) -+ float qblur; ///< amount of qscale smoothing over time (0.0-1.0) -+ -+ /** -+ * minimum quantizer -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int qmin; -+ -+ /** -+ * maximum quantizer -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int qmax; -+ -+ /** -+ * maximum quantizer difference between frames -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int max_qdiff; -+ -+ /** -+ * decoder bitstream buffer size -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int rc_buffer_size; -+ -+ /** -+ * ratecontrol override, see RcOverride -+ * - encoding: Allocated/set/freed by user. -+ * - decoding: unused -+ */ -+ int rc_override_count; -+ RcOverride* rc_override; -+ -+ /** -+ * maximum bitrate -+ * - encoding: Set by user. -+ * - decoding: Set by user, may be overwritten by libavcodec. -+ */ -+ int64_t rc_max_rate; -+ -+ /** -+ * minimum bitrate -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int64_t rc_min_rate; -+ -+ /** -+ * Ratecontrol attempt to use, at maximum, of what can be used without -+ * an underflow. -+ * - encoding: Set by user. -+ * - decoding: unused. -+ */ -+ float rc_max_available_vbv_use; -+ -+ /** -+ * Ratecontrol attempt to use, at least, times the amount needed to -+ * prevent a vbv overflow. -+ * - encoding: Set by user. -+ * - decoding: unused. -+ */ -+ float rc_min_vbv_overflow_use; -+ -+ /** -+ * Number of bits which should be loaded into the rc buffer before decoding -+ * starts. -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int rc_initial_buffer_occupancy; -+ -+ /** -+ * trellis RD quantization -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int trellis; -+ -+ /** -+ * pass1 encoding statistics output buffer -+ * - encoding: Set by libavcodec. -+ * - decoding: unused -+ */ -+ char* stats_out; -+ -+ /** -+ * pass2 encoding statistics input buffer -+ * Concatenated stuff from stats_out of pass1 should be placed here. -+ * - encoding: Allocated/set/freed by user. -+ * - decoding: unused -+ */ -+ char* stats_in; -+ -+ /** -+ * Work around bugs in encoders which sometimes cannot be detected -+ * automatically. -+ * - encoding: Set by user -+ * - decoding: Set by user -+ */ -+ int workaround_bugs; -+#define FF_BUG_AUTODETECT 1 ///< autodetection -+#define FF_BUG_XVID_ILACE 4 -+#define FF_BUG_UMP4 8 -+#define FF_BUG_NO_PADDING 16 -+#define FF_BUG_AMV 32 -+#define FF_BUG_QPEL_CHROMA 64 -+#define FF_BUG_STD_QPEL 128 -+#define FF_BUG_QPEL_CHROMA2 256 -+#define FF_BUG_DIRECT_BLOCKSIZE 512 -+#define FF_BUG_EDGE 1024 -+#define FF_BUG_HPEL_CHROMA 2048 -+#define FF_BUG_DC_CLIP 4096 -+#define FF_BUG_MS \ -+ 8192 ///< Work around various bugs in Microsoft's broken decoders. -+#define FF_BUG_TRUNCATED 16384 -+#define FF_BUG_IEDGE 32768 -+ -+ /** -+ * strictly follow the standard (MPEG-4, ...). -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ * Setting this to STRICT or higher means the encoder and decoder will -+ * generally do stupid things, whereas setting it to unofficial or lower -+ * will mean the encoder might produce output that is not supported by all -+ * spec-compliant decoders. Decoders don't differentiate between normal, -+ * unofficial and experimental (that is, they always try to decode things -+ * when they can) unless they are explicitly asked to behave stupidly -+ * (=strictly conform to the specs) -+ * This may only be set to one of the FF_COMPLIANCE_* values in defs.h. -+ */ -+ int strict_std_compliance; -+ -+ /** -+ * error concealment flags -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ int error_concealment; -+#define FF_EC_GUESS_MVS 1 -+#define FF_EC_DEBLOCK 2 -+#define FF_EC_FAVOR_INTER 256 -+ -+ /** -+ * debug -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ int debug; -+#define FF_DEBUG_PICT_INFO 1 -+#define FF_DEBUG_RC 2 -+#define FF_DEBUG_BITSTREAM 4 -+#define FF_DEBUG_MB_TYPE 8 -+#define FF_DEBUG_QP 16 -+#define FF_DEBUG_DCT_COEFF 0x00000040 -+#define FF_DEBUG_SKIP 0x00000080 -+#define FF_DEBUG_STARTCODE 0x00000100 -+#define FF_DEBUG_ER 0x00000400 -+#define FF_DEBUG_MMCO 0x00000800 -+#define FF_DEBUG_BUGS 0x00001000 -+#define FF_DEBUG_BUFFERS 0x00008000 -+#define FF_DEBUG_THREADS 0x00010000 -+#define FF_DEBUG_GREEN_MD 0x00800000 -+#define FF_DEBUG_NOMC 0x01000000 -+ -+ /** -+ * Error recognition; may misdetect some more or less valid parts as errors. -+ * This is a bitfield of the AV_EF_* values defined in defs.h. -+ * -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ int err_recognition; -+ -+#if FF_API_REORDERED_OPAQUE -+ /** -+ * opaque 64-bit number (generally a PTS) that will be reordered and -+ * output in AVFrame.reordered_opaque -+ * - encoding: Set by libavcodec to the reordered_opaque of the input -+ * frame corresponding to the last returned packet. Only -+ * supported by encoders with the -+ * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. -+ * - decoding: Set by user. -+ * -+ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead -+ */ -+ attribute_deprecated int64_t reordered_opaque; -+#endif -+ -+ /** -+ * Hardware accelerator in use -+ * - encoding: unused. -+ * - decoding: Set by libavcodec -+ */ -+ const struct AVHWAccel* hwaccel; -+ -+ /** -+ * Legacy hardware accelerator context. -+ * -+ * For some hardware acceleration methods, the caller may use this field to -+ * signal hwaccel-specific data to the codec. The struct pointed to by this -+ * pointer is hwaccel-dependent and defined in the respective header. Please -+ * refer to the FFmpeg HW accelerator documentation to know how to fill -+ * this. -+ * -+ * In most cases this field is optional - the necessary information may also -+ * be provided to libavcodec through @ref hw_frames_ctx or @ref -+ * hw_device_ctx (see avcodec_get_hw_config()). However, in some cases it -+ * may be the only method of signalling some (optional) information. -+ * -+ * The struct and its contents are owned by the caller. -+ * -+ * - encoding: May be set by the caller before avcodec_open2(). Must remain -+ * valid until avcodec_free_context(). -+ * - decoding: May be set by the caller in the get_format() callback. -+ * Must remain valid until the next get_format() call, -+ * or avcodec_free_context() (whichever comes first). -+ */ -+ void* hwaccel_context; -+ -+ /** -+ * error -+ * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. -+ * - decoding: unused -+ */ -+ uint64_t error[AV_NUM_DATA_POINTERS]; -+ -+ /** -+ * DCT algorithm, see FF_DCT_* below -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int dct_algo; -+#define FF_DCT_AUTO 0 -+#define FF_DCT_FASTINT 1 -+#define FF_DCT_INT 2 -+#define FF_DCT_MMX 3 -+#define FF_DCT_ALTIVEC 5 -+#define FF_DCT_FAAN 6 -+ -+ /** -+ * IDCT algorithm, see FF_IDCT_* below. -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ int idct_algo; -+#define FF_IDCT_AUTO 0 -+#define FF_IDCT_INT 1 -+#define FF_IDCT_SIMPLE 2 -+#define FF_IDCT_SIMPLEMMX 3 -+#define FF_IDCT_ARM 7 -+#define FF_IDCT_ALTIVEC 8 -+#define FF_IDCT_SIMPLEARM 10 -+#define FF_IDCT_XVID 14 -+#define FF_IDCT_SIMPLEARMV5TE 16 -+#define FF_IDCT_SIMPLEARMV6 17 -+#define FF_IDCT_FAAN 20 -+#define FF_IDCT_SIMPLENEON 22 -+#if FF_API_IDCT_NONE -+// formerly used by xvmc -+# define FF_IDCT_NONE 24 -+#endif -+#define FF_IDCT_SIMPLEAUTO 128 -+ -+ /** -+ * bits per sample/pixel from the demuxer (needed for huffyuv). -+ * - encoding: Set by libavcodec. -+ * - decoding: Set by user. -+ */ -+ int bits_per_coded_sample; -+ -+ /** -+ * Bits per sample/pixel of internal libavcodec pixel/sample format. -+ * - encoding: set by user. -+ * - decoding: set by libavcodec. -+ */ -+ int bits_per_raw_sample; -+ -+ /** -+ * low resolution decoding, 1-> 1/2 size, 2->1/4 size -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ int lowres; -+ -+ /** -+ * thread count -+ * is used to decide how many independent tasks should be passed to execute() -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ int thread_count; -+ -+ /** -+ * Which multithreading methods to use. -+ * Use of FF_THREAD_FRAME will increase decoding delay by one frame per -+ * thread, so clients which cannot provide future frames should not use it. -+ * -+ * - encoding: Set by user, otherwise the default is used. -+ * - decoding: Set by user, otherwise the default is used. -+ */ -+ int thread_type; -+#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once -+#define FF_THREAD_SLICE \ -+ 2 ///< Decode more than one part of a single frame at once -+ -+ /** -+ * Which multithreading methods are in use by the codec. -+ * - encoding: Set by libavcodec. -+ * - decoding: Set by libavcodec. -+ */ -+ int active_thread_type; -+ -+ /** -+ * The codec may call this to execute several independent things. -+ * It will return only after finishing all tasks. -+ * The user may replace this with some multithreaded implementation, -+ * the default implementation will execute the parts serially. -+ * @param count the number of things to execute -+ * - encoding: Set by libavcodec, user can override. -+ * - decoding: Set by libavcodec, user can override. -+ */ -+ int (*execute)(struct AVCodecContext* c, -+ int (*func)(struct AVCodecContext* c2, void* arg), void* arg2, -+ int* ret, int count, int size); -+ -+ /** -+ * The codec may call this to execute several independent things. -+ * It will return only after finishing all tasks. -+ * The user may replace this with some multithreaded implementation, -+ * the default implementation will execute the parts serially. -+ * @param c context passed also to func -+ * @param count the number of things to execute -+ * @param arg2 argument passed unchanged to func -+ * @param ret return values of executed functions, must have space for "count" -+ * values. May be NULL. -+ * @param func function that will be called count times, with jobnr from 0 to -+ * count-1. threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS -+ * and so that no two instances of func executing at the same time will have -+ * the same threadnr. -+ * @return always 0 currently, but code should handle a future improvement -+ * where when any call to func returns < 0 no further calls to func may be -+ * done and < 0 is returned. -+ * - encoding: Set by libavcodec, user can override. -+ * - decoding: Set by libavcodec, user can override. -+ */ -+ int (*execute2)(struct AVCodecContext* c, -+ int (*func)(struct AVCodecContext* c2, void* arg, int jobnr, -+ int threadnr), -+ void* arg2, int* ret, int count); -+ -+ /** -+ * noise vs. sse weight for the nsse comparison function -+ * - encoding: Set by user. -+ * - decoding: unused -+ */ -+ int nsse_weight; -+ -+ /** -+ * profile -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int profile; -+#define FF_PROFILE_UNKNOWN -99 -+#define FF_PROFILE_RESERVED -100 -+ -+#define FF_PROFILE_AAC_MAIN 0 -+#define FF_PROFILE_AAC_LOW 1 -+#define FF_PROFILE_AAC_SSR 2 -+#define FF_PROFILE_AAC_LTP 3 -+#define FF_PROFILE_AAC_HE 4 -+#define FF_PROFILE_AAC_HE_V2 28 -+#define FF_PROFILE_AAC_LD 22 -+#define FF_PROFILE_AAC_ELD 38 -+#define FF_PROFILE_MPEG2_AAC_LOW 128 -+#define FF_PROFILE_MPEG2_AAC_HE 131 -+ -+#define FF_PROFILE_DNXHD 0 -+#define FF_PROFILE_DNXHR_LB 1 -+#define FF_PROFILE_DNXHR_SQ 2 -+#define FF_PROFILE_DNXHR_HQ 3 -+#define FF_PROFILE_DNXHR_HQX 4 -+#define FF_PROFILE_DNXHR_444 5 -+ -+#define FF_PROFILE_DTS 20 -+#define FF_PROFILE_DTS_ES 30 -+#define FF_PROFILE_DTS_96_24 40 -+#define FF_PROFILE_DTS_HD_HRA 50 -+#define FF_PROFILE_DTS_HD_MA 60 -+#define FF_PROFILE_DTS_EXPRESS 70 -+ -+#define FF_PROFILE_MPEG2_422 0 -+#define FF_PROFILE_MPEG2_HIGH 1 -+#define FF_PROFILE_MPEG2_SS 2 -+#define FF_PROFILE_MPEG2_SNR_SCALABLE 3 -+#define FF_PROFILE_MPEG2_MAIN 4 -+#define FF_PROFILE_MPEG2_SIMPLE 5 -+ -+#define FF_PROFILE_H264_CONSTRAINED (1 << 9) // 8+1; constraint_set1_flag -+#define FF_PROFILE_H264_INTRA (1 << 11) // 8+3; constraint_set3_flag -+ -+#define FF_PROFILE_H264_BASELINE 66 -+#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66 | FF_PROFILE_H264_CONSTRAINED) -+#define FF_PROFILE_H264_MAIN 77 -+#define FF_PROFILE_H264_EXTENDED 88 -+#define FF_PROFILE_H264_HIGH 100 -+#define FF_PROFILE_H264_HIGH_10 110 -+#define FF_PROFILE_H264_HIGH_10_INTRA (110 | FF_PROFILE_H264_INTRA) -+#define FF_PROFILE_H264_MULTIVIEW_HIGH 118 -+#define FF_PROFILE_H264_HIGH_422 122 -+#define FF_PROFILE_H264_HIGH_422_INTRA (122 | FF_PROFILE_H264_INTRA) -+#define FF_PROFILE_H264_STEREO_HIGH 128 -+#define FF_PROFILE_H264_HIGH_444 144 -+#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244 -+#define FF_PROFILE_H264_HIGH_444_INTRA (244 | FF_PROFILE_H264_INTRA) -+#define FF_PROFILE_H264_CAVLC_444 44 -+ -+#define FF_PROFILE_VC1_SIMPLE 0 -+#define FF_PROFILE_VC1_MAIN 1 -+#define FF_PROFILE_VC1_COMPLEX 2 -+#define FF_PROFILE_VC1_ADVANCED 3 -+ -+#define FF_PROFILE_MPEG4_SIMPLE 0 -+#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1 -+#define FF_PROFILE_MPEG4_CORE 2 -+#define FF_PROFILE_MPEG4_MAIN 3 -+#define FF_PROFILE_MPEG4_N_BIT 4 -+#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5 -+#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6 -+#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7 -+#define FF_PROFILE_MPEG4_HYBRID 8 -+#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9 -+#define FF_PROFILE_MPEG4_CORE_SCALABLE 10 -+#define FF_PROFILE_MPEG4_ADVANCED_CODING 11 -+#define FF_PROFILE_MPEG4_ADVANCED_CORE 12 -+#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13 -+#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14 -+#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15 -+ -+#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 1 -+#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 2 -+#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION 32768 -+#define FF_PROFILE_JPEG2000_DCINEMA_2K 3 -+#define FF_PROFILE_JPEG2000_DCINEMA_4K 4 -+ -+#define FF_PROFILE_VP9_0 0 -+#define FF_PROFILE_VP9_1 1 -+#define FF_PROFILE_VP9_2 2 -+#define FF_PROFILE_VP9_3 3 -+ -+#define FF_PROFILE_HEVC_MAIN 1 -+#define FF_PROFILE_HEVC_MAIN_10 2 -+#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 -+#define FF_PROFILE_HEVC_REXT 4 -+#define FF_PROFILE_HEVC_SCC 9 -+ -+#define FF_PROFILE_VVC_MAIN_10 1 -+#define FF_PROFILE_VVC_MAIN_10_444 33 -+ -+#define FF_PROFILE_AV1_MAIN 0 -+#define FF_PROFILE_AV1_HIGH 1 -+#define FF_PROFILE_AV1_PROFESSIONAL 2 -+ -+#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT 0xc0 -+#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1 -+#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT 0xc2 -+#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS 0xc3 -+#define FF_PROFILE_MJPEG_JPEG_LS 0xf7 -+ -+#define FF_PROFILE_SBC_MSBC 1 -+ -+#define FF_PROFILE_PRORES_PROXY 0 -+#define FF_PROFILE_PRORES_LT 1 -+#define FF_PROFILE_PRORES_STANDARD 2 -+#define FF_PROFILE_PRORES_HQ 3 -+#define FF_PROFILE_PRORES_4444 4 -+#define FF_PROFILE_PRORES_XQ 5 -+ -+#define FF_PROFILE_ARIB_PROFILE_A 0 -+#define FF_PROFILE_ARIB_PROFILE_C 1 -+ -+#define FF_PROFILE_KLVA_SYNC 0 -+#define FF_PROFILE_KLVA_ASYNC 1 -+ -+ /** -+ * level -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int level; -+#define FF_LEVEL_UNKNOWN -99 -+ -+ /** -+ * Skip loop filtering for selected frames. -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ enum AVDiscard skip_loop_filter; -+ -+ /** -+ * Skip IDCT/dequantization for selected frames. -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ enum AVDiscard skip_idct; -+ -+ /** -+ * Skip decoding for selected frames. -+ * - encoding: unused -+ * - decoding: Set by user. -+ */ -+ enum AVDiscard skip_frame; -+ -+ /** -+ * Header containing style information for text subtitles. -+ * For SUBTITLE_ASS subtitle type, it should contain the whole ASS -+ * [Script Info] and [V4+ Styles] section, plus the [Events] line and -+ * the Format line following. It shouldn't include any Dialogue line. -+ * - encoding: Set/allocated/freed by user (before avcodec_open2()) -+ * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) -+ */ -+ uint8_t* subtitle_header; -+ int subtitle_header_size; -+ -+ /** -+ * Audio only. The number of "priming" samples (padding) inserted by the -+ * encoder at the beginning of the audio. I.e. this number of leading -+ * decoded samples must be discarded by the caller to get the original audio -+ * without leading padding. -+ * -+ * - decoding: unused -+ * - encoding: Set by libavcodec. The timestamps on the output packets are -+ * adjusted by the encoder so that they always refer to the -+ * first sample of the data actually contained in the packet, -+ * including any added padding. E.g. if the timebase is -+ * 1/samplerate and the timestamp of the first input sample is -+ * 0, the timestamp of the first output packet will be -+ * -initial_padding. -+ */ -+ int initial_padding; -+ -+ /** -+ * - decoding: For codecs that store a framerate value in the compressed -+ * bitstream, the decoder may export it here. { 0, 1} when -+ * unknown. -+ * - encoding: May be used to signal the framerate of CFR content to an -+ * encoder. -+ */ -+ AVRational framerate; -+ -+ /** -+ * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. -+ * - encoding: unused. -+ * - decoding: Set by libavcodec before calling get_format() -+ */ -+ enum AVPixelFormat sw_pix_fmt; -+ -+ /** -+ * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. -+ * - encoding unused. -+ * - decoding set by user. -+ */ -+ AVRational pkt_timebase; -+ -+ /** -+ * AVCodecDescriptor -+ * - encoding: unused. -+ * - decoding: set by libavcodec. -+ */ -+ const AVCodecDescriptor* codec_descriptor; -+ -+ /** -+ * Current statistics for PTS correction. -+ * - decoding: maintained and used by libavcodec, not intended to be used by -+ * user apps -+ * - encoding: unused -+ */ -+ int64_t -+ pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far -+ int64_t -+ pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far -+ int64_t pts_correction_last_pts; /// PTS of the last frame -+ int64_t pts_correction_last_dts; /// DTS of the last frame -+ -+ /** -+ * Character encoding of the input subtitles file. -+ * - decoding: set by user -+ * - encoding: unused -+ */ -+ char* sub_charenc; -+ -+ /** -+ * Subtitles character encoding mode. Formats or codecs might be adjusting -+ * this setting (if they are doing the conversion themselves for instance). -+ * - decoding: set by libavcodec -+ * - encoding: unused -+ */ -+ int sub_charenc_mode; -+#define FF_SUB_CHARENC_MODE_DO_NOTHING \ -+ -1 ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, -+ ///< or the codec is bitmap for instance) -+#define FF_SUB_CHARENC_MODE_AUTOMATIC \ -+ 0 ///< libavcodec will select the mode itself -+#define FF_SUB_CHARENC_MODE_PRE_DECODER \ -+ 1 ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the -+ ///< decoder, requires iconv -+#define FF_SUB_CHARENC_MODE_IGNORE \ -+ 2 ///< neither convert the subtitles, nor check them for valid UTF-8 -+ -+ /** -+ * Skip processing alpha if supported by codec. -+ * Note that if the format uses pre-multiplied alpha (common with VP6, -+ * and recommended due to better video quality/compression) -+ * the image will look as if alpha-blended onto a black background. -+ * However for formats that do not use pre-multiplied alpha -+ * there might be serious artefacts (though e.g. libswscale currently -+ * assumes pre-multiplied alpha anyway). -+ * -+ * - decoding: set by user -+ * - encoding: unused -+ */ -+ int skip_alpha; -+ -+ /** -+ * Number of samples to skip after a discontinuity -+ * - decoding: unused -+ * - encoding: set by libavcodec -+ */ -+ int seek_preroll; -+ -+ /** -+ * custom intra quantization matrix -+ * - encoding: Set by user, can be NULL. -+ * - decoding: unused. -+ */ -+ uint16_t* chroma_intra_matrix; -+ -+ /** -+ * dump format separator. -+ * can be ", " or "\n " or anything else -+ * - encoding: Set by user. -+ * - decoding: Set by user. -+ */ -+ uint8_t* dump_separator; -+ -+ /** -+ * ',' separated list of allowed decoders. -+ * If NULL then all are allowed -+ * - encoding: unused -+ * - decoding: set by user -+ */ -+ char* codec_whitelist; -+ -+ /** -+ * Properties of the stream that gets decoded -+ * - encoding: unused -+ * - decoding: set by libavcodec -+ */ -+ unsigned properties; -+#define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 -+#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 -+#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 -+ -+ /** -+ * Additional data associated with the entire coded stream. -+ * -+ * - decoding: unused -+ * - encoding: may be set by libavcodec after avcodec_open2(). -+ */ -+ AVPacketSideData* coded_side_data; -+ int nb_coded_side_data; -+ -+ /** -+ * A reference to the AVHWFramesContext describing the input (for encoding) -+ * or output (decoding) frames. The reference is set by the caller and -+ * afterwards owned (and freed) by libavcodec - it should never be read by -+ * the caller after being set. -+ * -+ * - decoding: This field should be set by the caller from the get_format() -+ * callback. The previous reference (if any) will always be -+ * unreffed by libavcodec before the get_format() call. -+ * -+ * If the default get_buffer2() is used with a hwaccel pixel -+ * format, then this AVHWFramesContext will be used for -+ * allocating the frame buffers. -+ * -+ * - encoding: For hardware encoders configured to use a hwaccel pixel -+ * format, this field should be set by the caller to a reference -+ * to the AVHWFramesContext describing input frames. -+ * AVHWFramesContext.format must be equal to -+ * AVCodecContext.pix_fmt. -+ * -+ * This field should be set before avcodec_open2() is called. -+ */ -+ AVBufferRef* hw_frames_ctx; -+ -+ /** -+ * Audio only. The amount of padding (in samples) appended by the encoder to -+ * the end of the audio. I.e. this number of decoded samples must be -+ * discarded by the caller from the end of the stream to get the original -+ * audio without any trailing padding. -+ * -+ * - decoding: unused -+ * - encoding: unused -+ */ -+ int trailing_padding; -+ -+ /** -+ * The number of pixels per image to maximally accept. -+ * -+ * - decoding: set by user -+ * - encoding: set by user -+ */ -+ int64_t max_pixels; -+ -+ /** -+ * A reference to the AVHWDeviceContext describing the device which will -+ * be used by a hardware encoder/decoder. The reference is set by the -+ * caller and afterwards owned (and freed) by libavcodec. -+ * -+ * This should be used if either the codec device does not require -+ * hardware frames or any that are used are to be allocated internally by -+ * libavcodec. If the user wishes to supply any of the frames used as -+ * encoder input or decoder output then hw_frames_ctx should be used -+ * instead. When hw_frames_ctx is set in get_format() for a decoder, this -+ * field will be ignored while decoding the associated stream segment, but -+ * may again be used on a following one after another get_format() call. -+ * -+ * For both encoders and decoders this field should be set before -+ * avcodec_open2() is called and must not be written to thereafter. -+ * -+ * Note that some decoders may require this field to be set initially in -+ * order to support hw_frames_ctx at all - in that case, all frames -+ * contexts used must be created on the same device. -+ */ -+ AVBufferRef* hw_device_ctx; -+ -+ /** -+ * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated -+ * decoding (if active). -+ * - encoding: unused -+ * - decoding: Set by user (either before avcodec_open2(), or in the -+ * AVCodecContext.get_format callback) -+ */ -+ int hwaccel_flags; -+ -+ /** -+ * Video decoding only. Certain video codecs support cropping, meaning that -+ * only a sub-rectangle of the decoded frame is intended for display. This -+ * option controls how cropping is handled by libavcodec. -+ * -+ * When set to 1 (the default), libavcodec will apply cropping internally. -+ * I.e. it will modify the output frame width/height fields and offset the -+ * data pointers (only by as much as possible while preserving alignment, or -+ * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that -+ * the frames output by the decoder refer only to the cropped area. The -+ * crop_* fields of the output frames will be zero. -+ * -+ * When set to 0, the width/height fields of the output frames will be set -+ * to the coded dimensions and the crop_* fields will describe the cropping -+ * rectangle. Applying the cropping is left to the caller. -+ * -+ * @warning When hardware acceleration with opaque output frames is used, -+ * libavcodec is unable to apply cropping from the top/left border. -+ * -+ * @note when this option is set to zero, the width/height fields of the -+ * AVCodecContext and output AVFrames have different meanings. The codec -+ * context fields store display dimensions (with the coded dimensions in -+ * coded_width/height), while the frame fields store the coded dimensions -+ * (with the display dimensions being determined by the crop_* fields). -+ */ -+ int apply_cropping; -+ -+ /* -+ * Video decoding only. Sets the number of extra hardware frames which -+ * the decoder will allocate for use by the caller. This must be set -+ * before avcodec_open2() is called. -+ * -+ * Some hardware decoders require all frames that they will use for -+ * output to be defined in advance before decoding starts. For such -+ * decoders, the hardware frame pool must therefore be of a fixed size. -+ * The extra frames set here are on top of any number that the decoder -+ * needs internally in order to operate normally (for example, frames -+ * used as reference pictures). -+ */ -+ int extra_hw_frames; -+ -+ /** -+ * The percentage of damaged samples to discard a frame. -+ * -+ * - decoding: set by user -+ * - encoding: unused -+ */ -+ int discard_damaged_percentage; -+ -+ /** -+ * The number of samples per frame to maximally accept. -+ * -+ * - decoding: set by user -+ * - encoding: set by user -+ */ -+ int64_t max_samples; -+ -+ /** -+ * Bit set of AV_CODEC_EXPORT_DATA_* flags, which affects the kind of -+ * metadata exported in frame, packet, or coded stream side data by -+ * decoders and encoders. -+ * -+ * - decoding: set by user -+ * - encoding: set by user -+ */ -+ int export_side_data; -+ -+ /** -+ * This callback is called at the beginning of each packet to get a data -+ * buffer for it. -+ * -+ * The following field will be set in the packet before this callback is -+ * called: -+ * - size -+ * This callback must use the above value to calculate the required buffer -+ * size, which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. -+ * -+ * In some specific cases, the encoder may not use the entire buffer allocated -+ * by this callback. This will be reflected in the size value in the packet -+ * once returned by avcodec_receive_packet(). -+ * -+ * This callback must fill the following fields in the packet: -+ * - data: alignment requirements for AVPacket apply, if any. Some -+ * architectures and encoders may benefit from having aligned data. -+ * - buf: must contain a pointer to an AVBufferRef structure. The packet's -+ * data pointer must be contained in it. See: av_buffer_create(), -+ * av_buffer_alloc(), and av_buffer_ref(). -+ * -+ * If AV_CODEC_CAP_DR1 is not set then get_encode_buffer() must call -+ * avcodec_default_get_encode_buffer() instead of providing a buffer allocated -+ * by some other means. -+ * -+ * The flags field may contain a combination of AV_GET_ENCODE_BUFFER_FLAG_ -+ * flags. They may be used for example to hint what use the buffer may get -+ * after being created. Implementations of this callback may ignore flags they -+ * don't understand. If AV_GET_ENCODE_BUFFER_FLAG_REF is set in flags then the -+ * packet may be reused (read and/or written to if it is writable) later by -+ * libavcodec. -+ * -+ * This callback must be thread-safe, as when frame threading is used, it may -+ * be called from multiple threads simultaneously. -+ * -+ * @see avcodec_default_get_encode_buffer() -+ * -+ * - encoding: Set by libavcodec, user can override. -+ * - decoding: unused -+ */ -+ int (*get_encode_buffer)(struct AVCodecContext* s, AVPacket* pkt, int flags); -+ -+ /** -+ * Audio channel layout. -+ * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. -+ * - decoding: may be set by the caller if known e.g. from the container. -+ * The decoder can then override during decoding as needed. -+ */ -+ AVChannelLayout ch_layout; -+ -+ /** -+ * Frame counter, set by libavcodec. -+ * -+ * - decoding: total number of frames returned from the decoder so far. -+ * - encoding: total number of frames passed to the encoder so far. -+ * -+ * @note the counter is not incremented if encoding/decoding resulted in -+ * an error. -+ */ -+ int64_t frame_num; -+} AVCodecContext; -+ -+/** -+ * @defgroup lavc_hwaccel AVHWAccel -+ * -+ * @note Nothing in this structure should be accessed by the user. At some -+ * point in future it will not be externally visible at all. -+ * -+ * @{ -+ */ -+typedef struct AVHWAccel { -+ /** -+ * Name of the hardware accelerated codec. -+ * The name is globally unique among encoders and among decoders (but an -+ * encoder and a decoder can share the same name). -+ */ -+ const char* name; -+ -+ /** -+ * Type of codec implemented by the hardware accelerator. -+ * -+ * See AVMEDIA_TYPE_xxx -+ */ -+ enum AVMediaType type; -+ -+ /** -+ * Codec implemented by the hardware accelerator. -+ * -+ * See AV_CODEC_ID_xxx -+ */ -+ enum AVCodecID id; -+ -+ /** -+ * Supported pixel format. -+ * -+ * Only hardware accelerated formats are supported here. -+ */ -+ enum AVPixelFormat pix_fmt; -+ -+ /** -+ * Hardware accelerated codec capabilities. -+ * see AV_HWACCEL_CODEC_CAP_* -+ */ -+ int capabilities; -+ -+ /***************************************************************** -+ * No fields below this line are part of the public API. They -+ * may not be used outside of libavcodec and can be changed and -+ * removed at will. -+ * New public fields should be added right above. -+ ***************************************************************** -+ */ -+ -+ /** -+ * Allocate a custom buffer -+ */ -+ int (*alloc_frame)(AVCodecContext* avctx, AVFrame* frame); -+ -+ /** -+ * Called at the beginning of each frame or field picture. -+ * -+ * Meaningful frame information (codec specific) is guaranteed to -+ * be parsed at this point. This function is mandatory. -+ * -+ * Note that buf can be NULL along with buf_size set to 0. -+ * Otherwise, this means the whole frame is available at this point. -+ * -+ * @param avctx the codec context -+ * @param buf the frame data buffer base -+ * @param buf_size the size of the frame in bytes -+ * @return zero if successful, a negative value otherwise -+ */ -+ int (*start_frame)(AVCodecContext* avctx, const uint8_t* buf, -+ uint32_t buf_size); -+ -+ /** -+ * Callback for parameter data (SPS/PPS/VPS etc). -+ * -+ * Useful for hardware decoders which keep persistent state about the -+ * video parameters, and need to receive any changes to update that state. -+ * -+ * @param avctx the codec context -+ * @param type the nal unit type -+ * @param buf the nal unit data buffer -+ * @param buf_size the size of the nal unit in bytes -+ * @return zero if successful, a negative value otherwise -+ */ -+ int (*decode_params)(AVCodecContext* avctx, int type, const uint8_t* buf, -+ uint32_t buf_size); -+ -+ /** -+ * Callback for each slice. -+ * -+ * Meaningful slice information (codec specific) is guaranteed to -+ * be parsed at this point. This function is mandatory. -+ * -+ * @param avctx the codec context -+ * @param buf the slice data buffer base -+ * @param buf_size the size of the slice in bytes -+ * @return zero if successful, a negative value otherwise -+ */ -+ int (*decode_slice)(AVCodecContext* avctx, const uint8_t* buf, -+ uint32_t buf_size); -+ -+ /** -+ * Called at the end of each frame or field picture. -+ * -+ * The whole picture is parsed at this point and can now be sent -+ * to the hardware accelerator. This function is mandatory. -+ * -+ * @param avctx the codec context -+ * @return zero if successful, a negative value otherwise -+ */ -+ int (*end_frame)(AVCodecContext* avctx); -+ -+ /** -+ * Size of per-frame hardware accelerator private data. -+ * -+ * Private data is allocated with av_mallocz() before -+ * AVCodecContext.get_buffer() and deallocated after -+ * AVCodecContext.release_buffer(). -+ */ -+ int frame_priv_data_size; -+ -+ /** -+ * Initialize the hwaccel private data. -+ * -+ * This will be called from ff_get_format(), after hwaccel and -+ * hwaccel_context are set and the hwaccel private data in AVCodecInternal -+ * is allocated. -+ */ -+ int (*init)(AVCodecContext* avctx); -+ -+ /** -+ * Uninitialize the hwaccel private data. -+ * -+ * This will be called from get_format() or avcodec_close(), after hwaccel -+ * and hwaccel_context are already uninitialized. -+ */ -+ int (*uninit)(AVCodecContext* avctx); -+ -+ /** -+ * Size of the private data to allocate in -+ * AVCodecInternal.hwaccel_priv_data. -+ */ -+ int priv_data_size; -+ -+ /** -+ * Internal hwaccel capabilities. -+ */ -+ int caps_internal; -+ -+ /** -+ * Fill the given hw_frames context with current codec parameters. Called -+ * from get_format. Refer to avcodec_get_hw_frames_parameters() for -+ * details. -+ * -+ * This CAN be called before AVHWAccel.init is called, and you must assume -+ * that avctx->hwaccel_priv_data is invalid. -+ */ -+ int (*frame_params)(AVCodecContext* avctx, AVBufferRef* hw_frames_ctx); -+} AVHWAccel; -+ -+/** -+ * HWAccel is experimental and is thus avoided in favor of non experimental -+ * codecs -+ */ -+#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 -+ -+/** -+ * Hardware acceleration should be used for decoding even if the codec level -+ * used is unknown or higher than the maximum supported level reported by the -+ * hardware driver. -+ * -+ * It's generally a good idea to pass this flag unless you have a specific -+ * reason not to, as hardware tends to under-report supported levels. -+ */ -+#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0) -+ -+/** -+ * Hardware acceleration can output YUV pixel formats with a different chroma -+ * sampling than 4:2:0 and/or other than 8 bits per component. -+ */ -+#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) -+ -+/** -+ * Hardware acceleration should still be attempted for decoding when the -+ * codec profile does not match the reported capabilities of the hardware. -+ * -+ * For example, this can be used to try to decode baseline profile H.264 -+ * streams in hardware - it will often succeed, because many streams marked -+ * as baseline profile actually conform to constrained baseline profile. -+ * -+ * @warning If the stream is actually not supported then the behaviour is -+ * undefined, and may include returning entirely incorrect output -+ * while indicating success. -+ */ -+#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) -+ -+/** -+ * Some hardware decoders (namely nvdec) can either output direct decoder -+ * surfaces, or make an on-device copy and return said copy. -+ * There is a hard limit on how many decoder surfaces there can be, and it -+ * cannot be accurately guessed ahead of time. -+ * For some processing chains, this can be okay, but others will run into the -+ * limit and in turn produce very confusing errors that require fine tuning of -+ * more or less obscure options by the user, or in extreme cases cannot be -+ * resolved at all without inserting an avfilter that forces a copy. -+ * -+ * Thus, the hwaccel will by default make a copy for safety and resilience. -+ * If a users really wants to minimize the amount of copies, they can set this -+ * flag and ensure their processing chain does not exhaust the surface pool. -+ */ -+#define AV_HWACCEL_FLAG_UNSAFE_OUTPUT (1 << 3) -+ -+/** -+ * @} -+ */ -+ -+enum AVSubtitleType { -+ SUBTITLE_NONE, -+ -+ SUBTITLE_BITMAP, ///< A bitmap, pict will be set -+ -+ /** -+ * Plain text, the text field must be set by the decoder and is -+ * authoritative. ass and pict fields may contain approximations. -+ */ -+ SUBTITLE_TEXT, -+ -+ /** -+ * Formatted text, the ass field must be set by the decoder and is -+ * authoritative. pict and text fields may contain approximations. -+ */ -+ SUBTITLE_ASS, -+}; -+ -+#define AV_SUBTITLE_FLAG_FORCED 0x00000001 -+ -+typedef struct AVSubtitleRect { -+ int x; ///< top left corner of pict, undefined when pict is not set -+ int y; ///< top left corner of pict, undefined when pict is not set -+ int w; ///< width of pict, undefined when pict is not set -+ int h; ///< height of pict, undefined when pict is not set -+ int nb_colors; ///< number of colors in pict, undefined when pict is not set -+ -+ /** -+ * data+linesize for the bitmap of this subtitle. -+ * Can be set for text/ass as well once they are rendered. -+ */ -+ uint8_t* data[4]; -+ int linesize[4]; -+ -+ enum AVSubtitleType type; -+ -+ char* text; ///< 0 terminated plain UTF-8 text -+ -+ /** -+ * 0 terminated ASS/SSA compatible event line. -+ * The presentation of this is unaffected by the other values in this -+ * struct. -+ */ -+ char* ass; -+ -+ int flags; -+} AVSubtitleRect; -+ -+typedef struct AVSubtitle { -+ uint16_t format; /* 0 = graphics */ -+ uint32_t start_display_time; /* relative to packet pts, in ms */ -+ uint32_t end_display_time; /* relative to packet pts, in ms */ -+ unsigned num_rects; -+ AVSubtitleRect** rects; -+ int64_t pts; ///< Same as packet pts, in AV_TIME_BASE -+} AVSubtitle; -+ -+/** -+ * Return the LIBAVCODEC_VERSION_INT constant. -+ */ -+unsigned avcodec_version(void); -+ -+/** -+ * Return the libavcodec build-time configuration. -+ */ -+const char* avcodec_configuration(void); -+ -+/** -+ * Return the libavcodec license. -+ */ -+const char* avcodec_license(void); -+ -+/** -+ * Allocate an AVCodecContext and set its fields to default values. The -+ * resulting struct should be freed with avcodec_free_context(). -+ * -+ * @param codec if non-NULL, allocate private data and initialize defaults -+ * for the given codec. It is illegal to then call avcodec_open2() -+ * with a different codec. -+ * If NULL, then the codec-specific defaults won't be initialized, -+ * which may result in suboptimal default settings (this is -+ * important mainly for encoders, e.g. libx264). -+ * -+ * @return An AVCodecContext filled with default values or NULL on failure. -+ */ -+AVCodecContext* avcodec_alloc_context3(const AVCodec* codec); -+ -+/** -+ * Free the codec context and everything associated with it and write NULL to -+ * the provided pointer. -+ */ -+void avcodec_free_context(AVCodecContext** avctx); -+ -+/** -+ * Get the AVClass for AVCodecContext. It can be used in combination with -+ * AV_OPT_SEARCH_FAKE_OBJ for examining options. -+ * -+ * @see av_opt_find(). -+ */ -+const AVClass* avcodec_get_class(void); -+ -+/** -+ * Get the AVClass for AVSubtitleRect. It can be used in combination with -+ * AV_OPT_SEARCH_FAKE_OBJ for examining options. -+ * -+ * @see av_opt_find(). -+ */ -+const AVClass* avcodec_get_subtitle_rect_class(void); -+ -+/** -+ * Fill the parameters struct based on the values from the supplied codec -+ * context. Any allocated fields in par are freed and replaced with duplicates -+ * of the corresponding fields in codec. -+ * -+ * @return >= 0 on success, a negative AVERROR code on failure -+ */ -+int avcodec_parameters_from_context(AVCodecParameters* par, -+ const AVCodecContext* codec); -+ -+/** -+ * Fill the codec context based on the values from the supplied codec -+ * parameters. Any allocated fields in codec that have a corresponding field in -+ * par are freed and replaced with duplicates of the corresponding field in par. -+ * Fields in codec that do not have a counterpart in par are not touched. -+ * -+ * @return >= 0 on success, a negative AVERROR code on failure. -+ */ -+int avcodec_parameters_to_context(AVCodecContext* codec, -+ const AVCodecParameters* par); -+ -+/** -+ * Initialize the AVCodecContext to use the given AVCodec. Prior to using this -+ * function the context has to be allocated with avcodec_alloc_context3(). -+ * -+ * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), -+ * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for -+ * retrieving a codec. -+ * -+ * @note Always call this function before using decoding routines (such as -+ * @ref avcodec_receive_frame()). -+ * -+ * @code -+ * av_dict_set(&opts, "b", "2.5M", 0); -+ * codec = avcodec_find_decoder(AV_CODEC_ID_H264); -+ * if (!codec) -+ * exit(1); -+ * -+ * context = avcodec_alloc_context3(codec); -+ * -+ * if (avcodec_open2(context, codec, opts) < 0) -+ * exit(1); -+ * @endcode -+ * -+ * @param avctx The context to initialize. -+ * @param codec The codec to open this context for. If a non-NULL codec has been -+ * previously passed to avcodec_alloc_context3() or -+ * for this context, then this parameter MUST be either NULL or -+ * equal to the previously passed codec. -+ * @param options A dictionary filled with AVCodecContext and codec-private -+ * options. On return this object will be filled with options that were not -+ * found. -+ * -+ * @return zero on success, a negative value on error -+ * @see avcodec_alloc_context3(), avcodec_find_decoder(), -+ * avcodec_find_encoder(), av_dict_set(), av_opt_find(). -+ */ -+int avcodec_open2(AVCodecContext* avctx, const AVCodec* codec, -+ AVDictionary** options); -+ -+/** -+ * Close a given AVCodecContext and free all the data associated with it -+ * (but not the AVCodecContext itself). -+ * -+ * Calling this function on an AVCodecContext that hasn't been opened will free -+ * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL -+ * codec. Subsequent calls will do nothing. -+ * -+ * @note Do not use this function. Use avcodec_free_context() to destroy a -+ * codec context (either open or closed). Opening and closing a codec context -+ * multiple times is not supported anymore -- use multiple codec contexts -+ * instead. -+ */ -+int avcodec_close(AVCodecContext* avctx); -+ -+/** -+ * Free all allocated data in the given subtitle struct. -+ * -+ * @param sub AVSubtitle to free. -+ */ -+void avsubtitle_free(AVSubtitle* sub); -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @addtogroup lavc_decoding -+ * @{ -+ */ -+ -+/** -+ * The default callback for AVCodecContext.get_buffer2(). It is made public so -+ * it can be called by custom get_buffer2() implementations for decoders without -+ * AV_CODEC_CAP_DR1 set. -+ */ -+int avcodec_default_get_buffer2(AVCodecContext* s, AVFrame* frame, int flags); -+ -+/** -+ * The default callback for AVCodecContext.get_encode_buffer(). It is made -+ * public so it can be called by custom get_encode_buffer() implementations for -+ * encoders without AV_CODEC_CAP_DR1 set. -+ */ -+int avcodec_default_get_encode_buffer(AVCodecContext* s, AVPacket* pkt, -+ int flags); -+ -+/** -+ * Modify width and height values so that they will result in a memory -+ * buffer that is acceptable for the codec if you do not use any horizontal -+ * padding. -+ * -+ * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. -+ */ -+void avcodec_align_dimensions(AVCodecContext* s, int* width, int* height); -+ -+/** -+ * Modify width and height values so that they will result in a memory -+ * buffer that is acceptable for the codec if you also ensure that all -+ * line sizes are a multiple of the respective linesize_align[i]. -+ * -+ * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. -+ */ -+void avcodec_align_dimensions2(AVCodecContext* s, int* width, int* height, -+ int linesize_align[AV_NUM_DATA_POINTERS]); -+ -+#ifdef FF_API_AVCODEC_CHROMA_POS -+/** -+ * Converts AVChromaLocation to swscale x/y chroma position. -+ * -+ * The positions represent the chroma (0,0) position in a coordinates system -+ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 -+ * -+ * @param xpos horizontal chroma sample position -+ * @param ypos vertical chroma sample position -+ * @deprecated Use av_chroma_location_enum_to_pos() instead. -+ */ -+attribute_deprecated int avcodec_enum_to_chroma_pos(int* xpos, int* ypos, -+ enum AVChromaLocation pos); -+ -+/** -+ * Converts swscale x/y chroma position to AVChromaLocation. -+ * -+ * The positions represent the chroma (0,0) position in a coordinates system -+ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 -+ * -+ * @param xpos horizontal chroma sample position -+ * @param ypos vertical chroma sample position -+ * @deprecated Use av_chroma_location_pos_to_enum() instead. -+ */ -+attribute_deprecated enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, -+ int ypos); -+#endif -+ -+/** -+ * Decode a subtitle message. -+ * Return a negative value on error, otherwise return the number of bytes used. -+ * If no subtitle could be decompressed, got_sub_ptr is zero. -+ * Otherwise, the subtitle is stored in *sub. -+ * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for -+ * simplicity, because the performance difference is expected to be negligible -+ * and reusing a get_buffer written for video codecs would probably perform -+ * badly due to a potentially very different allocation pattern. -+ * -+ * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between -+ * input and output. This means that for some packets they will not immediately -+ * produce decoded output and need to be flushed at the end of decoding to get -+ * all the decoded data. Flushing is done by calling this function with packets -+ * with avpkt->data set to NULL and avpkt->size set to 0 until it stops -+ * returning subtitles. It is safe to flush even those decoders that are not -+ * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. -+ * -+ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() -+ * before packets may be fed to the decoder. -+ * -+ * @param avctx the codec context -+ * @param[out] sub The preallocated AVSubtitle in which the decoded subtitle -+ * will be stored, must be freed with avsubtitle_free if *got_sub_ptr is set. -+ * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, -+ * otherwise, it is nonzero. -+ * @param[in] avpkt The input AVPacket containing the input buffer. -+ */ -+int avcodec_decode_subtitle2(AVCodecContext* avctx, AVSubtitle* sub, -+ int* got_sub_ptr, const AVPacket* avpkt); -+ -+/** -+ * Supply raw packet data as input to a decoder. -+ * -+ * Internally, this call will copy relevant AVCodecContext fields, which can -+ * influence decoding per-packet, and apply them when the packet is actually -+ * decoded. (For example AVCodecContext.skip_frame, which might direct the -+ * decoder to drop the frame contained by the packet sent with this function.) -+ * -+ * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE -+ * larger than the actual read bytes because some optimized bitstream -+ * readers read 32 or 64 bits at once and could read over the end. -+ * -+ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() -+ * before packets may be fed to the decoder. -+ * -+ * @param avctx codec context -+ * @param[in] avpkt The input AVPacket. Usually, this will be a single video -+ * frame, or several complete audio frames. -+ * Ownership of the packet remains with the caller, and the -+ * decoder will not write to the packet. The decoder may create -+ * a reference to the packet data (or copy it if the packet is -+ * not reference-counted). -+ * Unlike with older APIs, the packet is always fully consumed, -+ * and if it contains multiple frames (e.g. some audio codecs), -+ * will require you to call avcodec_receive_frame() multiple -+ * times afterwards before you can send a new packet. -+ * It can be NULL (or an AVPacket with data set to NULL and -+ * size set to 0); in this case, it is considered a flush -+ * packet, which signals the end of the stream. Sending the -+ * first flush packet will return success. Subsequent ones are -+ * unnecessary and will return AVERROR_EOF. If the decoder -+ * still has frames buffered, it will return them after sending -+ * a flush packet. -+ * -+ * @retval 0 success -+ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user -+ * must read output with avcodec_receive_frame() (once -+ * all output is read, the packet should be resent, -+ * and the call will not fail with EAGAIN). -+ * @retval AVERROR_EOF the decoder has been flushed, and no new packets -+ * can be sent to it (also returned if more than 1 flush packet is sent) -+ * @retval AVERROR(EINVAL) codec not opened, it is an encoder, or requires -+ * flush -+ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar -+ * @retval "another negative error code" legitimate decoding errors -+ */ -+int avcodec_send_packet(AVCodecContext* avctx, const AVPacket* avpkt); -+ -+/** -+ * Return decoded output data from a decoder or encoder (when the -+ * AV_CODEC_FLAG_RECON_FRAME flag is used). -+ * -+ * @param avctx codec context -+ * @param frame This will be set to a reference-counted video or audio -+ * frame (depending on the decoder type) allocated by the -+ * codec. Note that the function will always call -+ * av_frame_unref(frame) before doing anything else. -+ * -+ * @retval 0 success, a frame was returned -+ * @retval AVERROR(EAGAIN) output is not available in this state - user must -+ * try to send new input -+ * @retval AVERROR_EOF the codec has been fully flushed, and there will be -+ * no more output frames -+ * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the -+ * AV_CODEC_FLAG_RECON_FRAME flag enabled -+ * @retval AVERROR_INPUT_CHANGED current decoded frame has changed parameters -+ * with respect to first decoded frame. Applicable when flag -+ * AV_CODEC_FLAG_DROPCHANGED is set. -+ * @retval "other negative error code" legitimate decoding errors -+ */ -+int avcodec_receive_frame(AVCodecContext* avctx, AVFrame* frame); -+ -+/** -+ * Supply a raw video or audio frame to the encoder. Use -+ * avcodec_receive_packet() to retrieve buffered output packets. -+ * -+ * @param avctx codec context -+ * @param[in] frame AVFrame containing the raw audio or video frame to be -+ * encoded. Ownership of the frame remains with the caller, and the encoder will -+ * not write to the frame. The encoder may create a reference to the frame data -+ * (or copy it if the frame is not reference-counted). It can be NULL, in which -+ * case it is considered a flush packet. This signals the end of the stream. If -+ * the encoder still has packets buffered, it will return them after this call. -+ * Once flushing mode has been entered, additional flush packets are ignored, -+ * and sending frames will return AVERROR_EOF. -+ * -+ * For audio: -+ * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame -+ * can have any number of samples. -+ * If it is not set, frame->nb_samples must be equal to -+ * avctx->frame_size for all frames except the last. -+ * The final frame may be smaller than avctx->frame_size. -+ * @retval 0 success -+ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user -+ * must read output with avcodec_receive_packet() (once all output is read, the -+ * packet should be resent, and the call will not fail with EAGAIN). -+ * @retval AVERROR_EOF the encoder has been flushed, and no new frames can -+ * be sent to it -+ * @retval AVERROR(EINVAL) codec not opened, it is a decoder, or requires -+ * flush -+ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar -+ * @retval "another negative error code" legitimate encoding errors -+ */ -+int avcodec_send_frame(AVCodecContext* avctx, const AVFrame* frame); -+ -+/** -+ * Read encoded data from the encoder. -+ * -+ * @param avctx codec context -+ * @param avpkt This will be set to a reference-counted packet allocated by the -+ * encoder. Note that the function will always call -+ * av_packet_unref(avpkt) before doing anything else. -+ * @retval 0 success -+ * @retval AVERROR(EAGAIN) output is not available in the current state - user -+ * must try to send input -+ * @retval AVERROR_EOF the encoder has been fully flushed, and there will be -+ * no more output packets -+ * @retval AVERROR(EINVAL) codec not opened, or it is a decoder -+ * @retval "another negative error code" legitimate encoding errors -+ */ -+int avcodec_receive_packet(AVCodecContext* avctx, AVPacket* avpkt); -+ -+/** -+ * Create and return a AVHWFramesContext with values adequate for hardware -+ * decoding. This is meant to get called from the get_format callback, and is -+ * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx. -+ * This API is for decoding with certain hardware acceleration modes/APIs only. -+ * -+ * The returned AVHWFramesContext is not initialized. The caller must do this -+ * with av_hwframe_ctx_init(). -+ * -+ * Calling this function is not a requirement, but makes it simpler to avoid -+ * codec or hardware API specific details when manually allocating frames. -+ * -+ * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx, -+ * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes -+ * it unnecessary to call this function or having to care about -+ * AVHWFramesContext initialization at all. -+ * -+ * There are a number of requirements for calling this function: -+ * -+ * - It must be called from get_format with the same avctx parameter that was -+ * passed to get_format. Calling it outside of get_format is not allowed, and -+ * can trigger undefined behavior. -+ * - The function is not always supported (see description of return values). -+ * Even if this function returns successfully, hwaccel initialization could -+ * fail later. (The degree to which implementations check whether the stream -+ * is actually supported varies. Some do this check only after the user's -+ * get_format callback returns.) -+ * - The hw_pix_fmt must be one of the choices suggested by get_format. If the -+ * user decides to use a AVHWFramesContext prepared with this API function, -+ * the user must return the same hw_pix_fmt from get_format. -+ * - The device_ref passed to this function must support the given hw_pix_fmt. -+ * - After calling this API function, it is the user's responsibility to -+ * initialize the AVHWFramesContext (returned by the out_frames_ref -+ * parameter), and to set AVCodecContext.hw_frames_ctx to it. If done, this must -+ * be done before returning from get_format (this is implied by the normal -+ * AVCodecContext.hw_frames_ctx API rules). -+ * - The AVHWFramesContext parameters may change every time time get_format is -+ * called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So -+ * you are inherently required to go through this process again on every -+ * get_format call. -+ * - It is perfectly possible to call this function without actually using -+ * the resulting AVHWFramesContext. One use-case might be trying to reuse a -+ * previously initialized AVHWFramesContext, and calling this API function -+ * only to test whether the required frame parameters have changed. -+ * - Fields that use dynamically allocated values of any kind must not be set -+ * by the user unless setting them is explicitly allowed by the documentation. -+ * If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque, -+ * the new free callback must call the potentially set previous free callback. -+ * This API call may set any dynamically allocated fields, including the free -+ * callback. -+ * -+ * The function will set at least the following fields on AVHWFramesContext -+ * (potentially more, depending on hwaccel API): -+ * -+ * - All fields set by av_hwframe_ctx_alloc(). -+ * - Set the format field to hw_pix_fmt. -+ * - Set the sw_format field to the most suited and most versatile format. (An -+ * implication is that this will prefer generic formats over opaque formats -+ * with arbitrary restrictions, if possible.) -+ * - Set the width/height fields to the coded frame size, rounded up to the -+ * API-specific minimum alignment. -+ * - Only _if_ the hwaccel requires a pre-allocated pool: set the -+ * initial_pool_size field to the number of maximum reference surfaces possible -+ * with the codec, plus 1 surface for the user to work (meaning the user can -+ * safely reference at most 1 decoded surface at a time), plus additional -+ * buffering introduced by frame threading. If the hwaccel does not require -+ * pre-allocation, the field is left to 0, and the decoder will allocate new -+ * surfaces on demand during decoding. -+ * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying -+ * hardware API. -+ * -+ * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but -+ * with basic frame parameters set. -+ * -+ * The function is stateless, and does not change the AVCodecContext or the -+ * device_ref AVHWDeviceContext. -+ * -+ * @param avctx The context which is currently calling get_format, and which -+ * implicitly contains all state needed for filling the returned -+ * AVHWFramesContext properly. -+ * @param device_ref A reference to the AVHWDeviceContext describing the device -+ * which will be used by the hardware decoder. -+ * @param hw_pix_fmt The hwaccel format you are going to return from get_format. -+ * @param out_frames_ref On success, set to a reference to an _uninitialized_ -+ * AVHWFramesContext, created from the given device_ref. -+ * Fields will be set to values required for decoding. -+ * Not changed if an error is returned. -+ * @return zero on success, a negative value on error. The following error codes -+ * have special semantics: -+ * AVERROR(ENOENT): the decoder does not support this functionality. Setup -+ * is always manual, or it is a decoder which does not -+ * support setting AVCodecContext.hw_frames_ctx at all, -+ * or it is a software format. -+ * AVERROR(EINVAL): it is known that hardware decoding is not supported for -+ * this configuration, or the device_ref is not supported -+ * for the hwaccel referenced by hw_pix_fmt. -+ */ -+int avcodec_get_hw_frames_parameters(AVCodecContext* avctx, -+ AVBufferRef* device_ref, -+ enum AVPixelFormat hw_pix_fmt, -+ AVBufferRef** out_frames_ref); -+ -+/** -+ * @defgroup lavc_parsing Frame parsing -+ * @{ -+ */ -+ -+enum AVPictureStructure { -+ AV_PICTURE_STRUCTURE_UNKNOWN, ///< unknown -+ AV_PICTURE_STRUCTURE_TOP_FIELD, ///< coded as top field -+ AV_PICTURE_STRUCTURE_BOTTOM_FIELD, ///< coded as bottom field -+ AV_PICTURE_STRUCTURE_FRAME, ///< coded as frame -+}; -+ -+typedef struct AVCodecParserContext { -+ void* priv_data; -+ const struct AVCodecParser* parser; -+ int64_t frame_offset; /* offset of the current frame */ -+ int64_t cur_offset; /* current offset -+ (incremented by each av_parser_parse()) */ -+ int64_t next_frame_offset; /* offset of the next frame */ -+ /* video info */ -+ int pict_type; /* XXX: Put it back in AVCodecContext. */ -+ /** -+ * This field is used for proper frame duration computation in lavf. -+ * It signals, how much longer the frame duration of the current frame -+ * is compared to normal frame duration. -+ * -+ * frame_duration = (1 + repeat_pict) * time_base -+ * -+ * It is used by codecs like H.264 to display telecined material. -+ */ -+ int repeat_pict; /* XXX: Put it back in AVCodecContext. */ -+ int64_t pts; /* pts of the current frame */ -+ int64_t dts; /* dts of the current frame */ -+ -+ /* private data */ -+ int64_t last_pts; -+ int64_t last_dts; -+ int fetch_timestamp; -+ -+#define AV_PARSER_PTS_NB 4 -+ int cur_frame_start_index; -+ int64_t cur_frame_offset[AV_PARSER_PTS_NB]; -+ int64_t cur_frame_pts[AV_PARSER_PTS_NB]; -+ int64_t cur_frame_dts[AV_PARSER_PTS_NB]; -+ -+ int flags; -+#define PARSER_FLAG_COMPLETE_FRAMES 0x0001 -+#define PARSER_FLAG_ONCE 0x0002 -+/// Set if the parser has a valid file offset -+#define PARSER_FLAG_FETCHED_OFFSET 0x0004 -+#define PARSER_FLAG_USE_CODEC_TS 0x1000 -+ -+ int64_t offset; ///< byte offset from starting packet start -+ int64_t cur_frame_end[AV_PARSER_PTS_NB]; -+ -+ /** -+ * Set by parser to 1 for key frames and 0 for non-key frames. -+ * It is initialized to -1, so if the parser doesn't set this flag, -+ * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames -+ * will be used. -+ */ -+ int key_frame; -+ -+ // Timestamp generation support: -+ /** -+ * Synchronization point for start of timestamp generation. -+ * -+ * Set to >0 for sync point, 0 for no sync point and <0 for undefined -+ * (default). -+ * -+ * For example, this corresponds to presence of H.264 buffering period -+ * SEI message. -+ */ -+ int dts_sync_point; -+ -+ /** -+ * Offset of the current timestamp against last timestamp sync point in -+ * units of AVCodecContext.time_base. -+ * -+ * Set to INT_MIN when dts_sync_point unused. Otherwise, it must -+ * contain a valid timestamp offset. -+ * -+ * Note that the timestamp of sync point has usually a nonzero -+ * dts_ref_dts_delta, which refers to the previous sync point. Offset of -+ * the next frame after timestamp sync point will be usually 1. -+ * -+ * For example, this corresponds to H.264 cpb_removal_delay. -+ */ -+ int dts_ref_dts_delta; -+ -+ /** -+ * Presentation delay of current frame in units of AVCodecContext.time_base. -+ * -+ * Set to INT_MIN when dts_sync_point unused. Otherwise, it must -+ * contain valid non-negative timestamp delta (presentation time of a frame -+ * must not lie in the past). -+ * -+ * This delay represents the difference between decoding and presentation -+ * time of the frame. -+ * -+ * For example, this corresponds to H.264 dpb_output_delay. -+ */ -+ int pts_dts_delta; -+ -+ /** -+ * Position of the packet in file. -+ * -+ * Analogous to cur_frame_pts/dts -+ */ -+ int64_t cur_frame_pos[AV_PARSER_PTS_NB]; -+ -+ /** -+ * Byte position of currently parsed frame in stream. -+ */ -+ int64_t pos; -+ -+ /** -+ * Previous frame byte position. -+ */ -+ int64_t last_pos; -+ -+ /** -+ * Duration of the current frame. -+ * For audio, this is in units of 1 / AVCodecContext.sample_rate. -+ * For all other types, this is in units of AVCodecContext.time_base. -+ */ -+ int duration; -+ -+ enum AVFieldOrder field_order; -+ -+ /** -+ * Indicate whether a picture is coded as a frame, top field or bottom field. -+ * -+ * For example, H.264 field_pic_flag equal to 0 corresponds to -+ * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag -+ * equal to 1 and bottom_field_flag equal to 0 corresponds to -+ * AV_PICTURE_STRUCTURE_TOP_FIELD. -+ */ -+ enum AVPictureStructure picture_structure; -+ -+ /** -+ * Picture number incremented in presentation or output order. -+ * This field may be reinitialized at the first picture of a new sequence. -+ * -+ * For example, this corresponds to H.264 PicOrderCnt. -+ */ -+ int output_picture_number; -+ -+ /** -+ * Dimensions of the decoded video intended for presentation. -+ */ -+ int width; -+ int height; -+ -+ /** -+ * Dimensions of the coded video. -+ */ -+ int coded_width; -+ int coded_height; -+ -+ /** -+ * The format of the coded data, corresponds to enum AVPixelFormat for video -+ * and for enum AVSampleFormat for audio. -+ * -+ * Note that a decoder can have considerable freedom in how exactly it -+ * decodes the data, so the format reported here might be different from the -+ * one returned by a decoder. -+ */ -+ int format; -+} AVCodecParserContext; -+ -+typedef struct AVCodecParser { -+ int codec_ids[7]; /* several codec IDs are permitted */ -+ int priv_data_size; -+ int (*parser_init)(AVCodecParserContext* s); -+ /* This callback never returns an error, a negative value means that -+ * the frame start was in a previous packet. */ -+ int (*parser_parse)(AVCodecParserContext* s, AVCodecContext* avctx, -+ const uint8_t** poutbuf, int* poutbuf_size, -+ const uint8_t* buf, int buf_size); -+ void (*parser_close)(AVCodecParserContext* s); -+ int (*split)(AVCodecContext* avctx, const uint8_t* buf, int buf_size); -+} AVCodecParser; -+ -+/** -+ * Iterate over all registered codec parsers. -+ * -+ * @param opaque a pointer where libavcodec will store the iteration state. Must -+ * point to NULL to start the iteration. -+ * -+ * @return the next registered codec parser or NULL when the iteration is -+ * finished -+ */ -+const AVCodecParser* av_parser_iterate(void** opaque); -+ -+AVCodecParserContext* av_parser_init(int codec_id); -+ -+/** -+ * Parse a packet. -+ * -+ * @param s parser context. -+ * @param avctx codec context. -+ * @param poutbuf set to pointer to parsed buffer or NULL if not yet -+ finished. -+ * @param poutbuf_size set to size of parsed buffer or zero if not yet -+ finished. -+ * @param buf input buffer. -+ * @param buf_size buffer size in bytes without the padding. I.e. the full -+ buffer size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. To signal -+ EOF, this should be 0 (so that the last frame can be output). -+ * @param pts input presentation timestamp. -+ * @param dts input decoding timestamp. -+ * @param pos input byte position in stream. -+ * @return the number of bytes of the input bitstream used. -+ * -+ * Example: -+ * @code -+ * while(in_len){ -+ * len = av_parser_parse2(myparser, AVCodecContext, &data, &size, -+ * in_data, in_len, -+ * pts, dts, pos); -+ * in_data += len; -+ * in_len -= len; -+ * -+ * if(size) -+ * decode_frame(data, size); -+ * } -+ * @endcode -+ */ -+int av_parser_parse2(AVCodecParserContext* s, AVCodecContext* avctx, -+ uint8_t** poutbuf, int* poutbuf_size, const uint8_t* buf, -+ int buf_size, int64_t pts, int64_t dts, int64_t pos); -+ -+void av_parser_close(AVCodecParserContext* s); -+ -+/** -+ * @} -+ * @} -+ */ -+ -+/** -+ * @addtogroup lavc_encoding -+ * @{ -+ */ -+ -+int avcodec_encode_subtitle(AVCodecContext* avctx, uint8_t* buf, int buf_size, -+ const AVSubtitle* sub); -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @defgroup lavc_misc Utility functions -+ * @ingroup libavc -+ * -+ * Miscellaneous utility functions related to both encoding and decoding -+ * (or neither). -+ * @{ -+ */ -+ -+/** -+ * @defgroup lavc_misc_pixfmt Pixel formats -+ * -+ * Functions for working with pixel formats. -+ * @{ -+ */ -+ -+/** -+ * Return a value representing the fourCC code associated to the -+ * pixel format pix_fmt, or 0 if no associated fourCC code can be -+ * found. -+ */ -+unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt); -+ -+/** -+ * Find the best pixel format to convert to given a certain source pixel -+ * format. When converting from one pixel format to another, information loss -+ * may occur. For example, when converting from RGB24 to GRAY, the color -+ * information will be lost. Similarly, other losses occur when converting from -+ * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches -+ * which of the given pixel formats should be used to suffer the least amount of -+ * loss. The pixel formats from which it chooses one, are determined by the -+ * pix_fmt_list parameter. -+ * -+ * -+ * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to -+ * choose from -+ * @param[in] src_pix_fmt source pixel format -+ * @param[in] has_alpha Whether the source pixel format alpha channel is used. -+ * @param[out] loss_ptr Combination of flags informing you what kind of losses -+ * will occur. -+ * @return The best pixel format to convert to or -1 if none was found. -+ */ -+enum AVPixelFormat avcodec_find_best_pix_fmt_of_list( -+ const enum AVPixelFormat* pix_fmt_list, enum AVPixelFormat src_pix_fmt, -+ int has_alpha, int* loss_ptr); -+ -+enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext* s, -+ const enum AVPixelFormat* fmt); -+ -+/** -+ * @} -+ */ -+ -+void avcodec_string(char* buf, int buf_size, AVCodecContext* enc, int encode); -+ -+int avcodec_default_execute(AVCodecContext* c, -+ int (*func)(AVCodecContext* c2, void* arg2), -+ void* arg, int* ret, int count, int size); -+int avcodec_default_execute2(AVCodecContext* c, -+ int (*func)(AVCodecContext* c2, void* arg2, int, -+ int), -+ void* arg, int* ret, int count); -+// FIXME func typedef -+ -+/** -+ * Fill AVFrame audio data and linesize pointers. -+ * -+ * The buffer buf must be a preallocated buffer with a size big enough -+ * to contain the specified samples amount. The filled AVFrame data -+ * pointers will point to this buffer. -+ * -+ * AVFrame extended_data channel pointers are allocated if necessary for -+ * planar audio. -+ * -+ * @param frame the AVFrame -+ * frame->nb_samples must be set prior to calling the -+ * function. This function fills in frame->data, -+ * frame->extended_data, frame->linesize[0]. -+ * @param nb_channels channel count -+ * @param sample_fmt sample format -+ * @param buf buffer to use for frame data -+ * @param buf_size size of buffer -+ * @param align plane size sample alignment (0 = default) -+ * @return >=0 on success, negative error code on failure -+ * @todo return the size in bytes required to store the samples in -+ * case of success, at the next libavutil bump -+ */ -+int avcodec_fill_audio_frame(AVFrame* frame, int nb_channels, -+ enum AVSampleFormat sample_fmt, const uint8_t* buf, -+ int buf_size, int align); -+ -+/** -+ * Reset the internal codec state / flush internal buffers. Should be called -+ * e.g. when seeking or when switching to a different stream. -+ * -+ * @note for decoders, this function just releases any references the decoder -+ * might keep internally, but the caller's references remain valid. -+ * -+ * @note for encoders, this function will only do something if the encoder -+ * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder -+ * will drain any remaining packets, and can then be re-used for a different -+ * stream (as opposed to sending a null frame which will leave the encoder -+ * in a permanent EOF state after draining). This can be desirable if the -+ * cost of tearing down and replacing the encoder instance is high. -+ */ -+void avcodec_flush_buffers(AVCodecContext* avctx); -+ -+/** -+ * Return audio frame duration. -+ * -+ * @param avctx codec context -+ * @param frame_bytes size of the frame, or 0 if unknown -+ * @return frame duration, in samples, if known. 0 if not able to -+ * determine. -+ */ -+int av_get_audio_frame_duration(AVCodecContext* avctx, int frame_bytes); -+ -+/* memory */ -+ -+/** -+ * Same behaviour av_fast_malloc but the buffer has additional -+ * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0. -+ * -+ * In addition the whole buffer will initially and after resizes -+ * be 0-initialized so that no uninitialized data will ever appear. -+ */ -+void av_fast_padded_malloc(void* ptr, unsigned int* size, size_t min_size); -+ -+/** -+ * Same behaviour av_fast_padded_malloc except that buffer will always -+ * be 0-initialized after call. -+ */ -+void av_fast_padded_mallocz(void* ptr, unsigned int* size, size_t min_size); -+ -+/** -+ * @return a positive value if s is open (i.e. avcodec_open2() was called on it -+ * with no corresponding avcodec_close()), 0 otherwise. -+ */ -+int avcodec_is_open(AVCodecContext* s); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVCODEC_AVCODEC_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avdct.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,85 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVCODEC_AVDCT_H -+#define AVCODEC_AVDCT_H -+ -+#include "libavutil/opt.h" -+ -+/** -+ * AVDCT context. -+ * @note function pointers can be NULL if the specific features have been -+ * disabled at build time. -+ */ -+typedef struct AVDCT { -+ const AVClass* av_class; -+ -+ void (*idct)(int16_t* block /* align 16 */); -+ -+ /** -+ * IDCT input permutation. -+ * Several optimized IDCTs need a permutated input (relative to the -+ * normal order of the reference IDCT). -+ * This permutation must be performed before the idct_put/add. -+ * Note, normally this can be merged with the zigzag/alternate scan
-+ * An example to avoid confusion: -+ * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) -+ * - (x -> reference DCT -> reference IDCT -> x) -+ * - (x -> reference DCT -> simple_mmx_perm = idct_permutation -+ * -> simple_idct_mmx -> x) -+ * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant -+ * -> simple_idct_mmx -> ...) -+ */ -+ uint8_t idct_permutation[64]; -+ -+ void (*fdct)(int16_t* block /* align 16 */); -+ -+ /** -+ * DCT algorithm. -+ * must use AVOptions to set this field. -+ */ -+ int dct_algo; -+ -+ /** -+ * IDCT algorithm. -+ * must use AVOptions to set this field. -+ */ -+ int idct_algo; -+ -+ void (*get_pixels)(int16_t* block /* align 16 */, -+ const uint8_t* pixels /* align 8 */, ptrdiff_t line_size); -+ -+ int bits_per_sample; -+ -+ void (*get_pixels_unaligned)(int16_t* block /* align 16 */, -+ const uint8_t* pixels, ptrdiff_t line_size); -+} AVDCT; -+ -+/** -+ * Allocates a AVDCT context. -+ * This needs to be initialized with avcodec_dct_init() after optionally -+ * configuring it with AVOptions. -+ * -+ * To free it use av_free() -+ */ -+AVDCT* avcodec_dct_alloc(void); -+int avcodec_dct_init(AVDCT*); -+ -+const AVClass* avcodec_dct_get_class(void); -+ -+#endif /* AVCODEC_AVDCT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/avfft.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,119 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVCODEC_AVFFT_H -+#define AVCODEC_AVFFT_H -+ -+/** -+ * @file -+ * @ingroup lavc_fft -+ * FFT functions -+ */ -+ -+/** -+ * @defgroup lavc_fft FFT functions -+ * @ingroup lavc_misc -+ * -+ * @{ -+ */ -+ -+typedef float FFTSample; -+ -+typedef struct FFTComplex { -+ FFTSample re, im; -+} FFTComplex; -+ -+typedef struct FFTContext FFTContext; -+ -+/** -+ * Set up a complex FFT. -+ * @param nbits log2 of the length of the input array -+ * @param inverse if 0 perform the forward transform, if 1 perform the -+ * inverse -+ */ -+FFTContext* av_fft_init(int nbits, int inverse); -+ -+/** -+ * Do the permutation needed BEFORE calling ff_fft_calc(). -+ */ -+void av_fft_permute(FFTContext* s, FFTComplex* z); -+ -+/** -+ * Do a complex FFT with the parameters defined in av_fft_init(). The -+ * input data must be permuted before. No 1.0/sqrt(n) normalization is done. -+ */ -+void av_fft_calc(FFTContext* s, FFTComplex* z); -+ -+void av_fft_end(FFTContext* s); -+ -+FFTContext* av_mdct_init(int nbits, int inverse, double scale); -+void av_imdct_calc(FFTContext* s, FFTSample* output, const FFTSample* input); -+void av_imdct_half(FFTContext* s, FFTSample* output, const FFTSample* input); -+void av_mdct_calc(FFTContext* s, FFTSample* output, const FFTSample* input); -+void av_mdct_end(FFTContext* s); -+ -+/* Real Discrete Fourier Transform */ -+ -+enum RDFTransformType { -+ DFT_R2C, -+ IDFT_C2R, -+ IDFT_R2C, -+ DFT_C2R, -+}; -+ -+typedef struct RDFTContext RDFTContext; -+ -+/** -+ * Set up a real FFT. -+ * @param nbits log2 of the length of the input array -+ * @param trans the type of transform -+ */ -+RDFTContext* av_rdft_init(int nbits, enum RDFTransformType trans); -+void av_rdft_calc(RDFTContext* s, FFTSample* data); -+void av_rdft_end(RDFTContext* s); -+ -+/* Discrete Cosine Transform */ -+ -+typedef struct DCTContext DCTContext; -+ -+enum DCTTransformType { -+ DCT_II = 0, -+ DCT_III, -+ DCT_I, -+ DST_I, -+}; -+ -+/** -+ * Set up DCT. -+ * -+ * @param nbits size of the input array: -+ * (1 << nbits) for DCT-II, DCT-III and DST-I -+ * (1 << nbits) + 1 for DCT-I -+ * @param type the type of transform -+ * -+ * @note the first element of the input of DST-I is ignored -+ */ -+DCTContext* av_dct_init(int nbits, enum DCTTransformType type); -+void av_dct_calc(DCTContext* s, FFTSample* data); -+void av_dct_end(DCTContext* s); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVCODEC_AVFFT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/bsf.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,335 @@ -+/* -+ * Bitstream filters public API -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_BSF_H -+#define AVCODEC_BSF_H -+ -+#include "libavutil/dict.h" -+#include "libavutil/log.h" -+#include "libavutil/rational.h" -+ -+#include "codec_id.h" -+#include "codec_par.h" -+#include "packet.h" -+ -+/** -+ * @defgroup lavc_bsf Bitstream filters -+ * @ingroup libavc -+ * -+ * Bitstream filters transform encoded media data without decoding it. This -+ * allows e.g. manipulating various header values. Bitstream filters operate on -+ * @ref AVPacket "AVPackets". -+ * -+ * The bitstream filtering API is centered around two structures: -+ * AVBitStreamFilter and AVBSFContext. The former represents a bitstream filter -+ * in abstract, the latter a specific filtering process. Obtain an -+ * AVBitStreamFilter using av_bsf_get_by_name() or av_bsf_iterate(), then pass -+ * it to av_bsf_alloc() to create an AVBSFContext. Fill in the user-settable -+ * AVBSFContext fields, as described in its documentation, then call -+ * av_bsf_init() to prepare the filter context for use. -+ * -+ * Submit packets for filtering using av_bsf_send_packet(), obtain filtered -+ * results with av_bsf_receive_packet(). When no more input packets will be -+ * sent, submit a NULL AVPacket to signal the end of the stream to the filter. -+ * av_bsf_receive_packet() will then return trailing packets, if any are -+ * produced by the filter. -+ * -+ * Finally, free the filter context with av_bsf_free(). -+ * @{ -+ */ -+ -+/** -+ * The bitstream filter state. -+ * -+ * This struct must be allocated with av_bsf_alloc() and freed with -+ * av_bsf_free(). -+ * -+ * The fields in the struct will only be changed (by the caller or by the -+ * filter) as described in their documentation, and are to be considered -+ * immutable otherwise. -+ */ -+typedef struct AVBSFContext { -+ /** -+ * A class for logging and AVOptions -+ */ -+ const AVClass* av_class; -+ -+ /** -+ * The bitstream filter this context is an instance of. -+ */ -+ const struct AVBitStreamFilter* filter; -+ -+ /** -+ * Opaque filter-specific private data. If filter->priv_class is non-NULL, -+ * this is an AVOptions-enabled struct. -+ */ -+ void* priv_data; -+ -+ /** -+ * Parameters of the input stream. This field is allocated in -+ * av_bsf_alloc(), it needs to be filled by the caller before -+ * av_bsf_init(). -+ */ -+ AVCodecParameters* par_in; -+ -+ /** -+ * Parameters of the output stream. This field is allocated in -+ * av_bsf_alloc(), it is set by the filter in av_bsf_init(). -+ */ -+ AVCodecParameters* par_out; -+ -+ /** -+ * The timebase used for the timestamps of the input packets. Set by the -+ * caller before av_bsf_init(). -+ */ -+ AVRational time_base_in; -+ -+ /** -+ * The timebase used for the timestamps of the output packets. Set by the -+ * filter in av_bsf_init(). -+ */ -+ AVRational time_base_out; -+} AVBSFContext; -+ -+typedef struct AVBitStreamFilter { -+ const char* name; -+ -+ /** -+ * A list of codec ids supported by the filter, terminated by -+ * AV_CODEC_ID_NONE. -+ * May be NULL, in that case the bitstream filter works with any codec id. -+ */ -+ const enum AVCodecID* codec_ids; -+ -+ /** -+ * A class for the private data, used to declare bitstream filter private -+ * AVOptions. This field is NULL for bitstream filters that do not declare -+ * any options. -+ * -+ * If this field is non-NULL, the first member of the filter private data -+ * must be a pointer to AVClass, which will be set by libavcodec generic -+ * code to this class. -+ */ -+ const AVClass* priv_class; -+} AVBitStreamFilter; -+ -+/** -+ * @return a bitstream filter with the specified name or NULL if no such -+ * bitstream filter exists. -+ */ -+const AVBitStreamFilter* av_bsf_get_by_name(const char* name); -+ -+/** -+ * Iterate over all registered bitstream filters. -+ * -+ * @param opaque a pointer where libavcodec will store the iteration state. Must -+ * point to NULL to start the iteration. -+ * -+ * @return the next registered bitstream filter or NULL when the iteration is -+ * finished -+ */ -+const AVBitStreamFilter* av_bsf_iterate(void** opaque); -+ -+/** -+ * Allocate a context for a given bitstream filter. The caller must fill in the -+ * context parameters as described in the documentation and then call -+ * av_bsf_init() before sending any data to the filter. -+ * -+ * @param filter the filter for which to allocate an instance. -+ * @param[out] ctx a pointer into which the pointer to the newly-allocated -+ * context will be written. It must be freed with av_bsf_free() after the -+ * filtering is done. -+ * -+ * @return 0 on success, a negative AVERROR code on failure -+ */ -+int av_bsf_alloc(const AVBitStreamFilter* filter, AVBSFContext** ctx); -+ -+/** -+ * Prepare the filter for use, after all the parameters and options have been -+ * set. -+ * -+ * @param ctx a AVBSFContext previously allocated with av_bsf_alloc() -+ */ -+int av_bsf_init(AVBSFContext* ctx); -+ -+/** -+ * Submit a packet for filtering. -+ * -+ * After sending each packet, the filter must be completely drained by calling -+ * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or -+ * AVERROR_EOF. -+ * -+ * @param ctx an initialized AVBSFContext -+ * @param pkt the packet to filter. The bitstream filter will take ownership of -+ * the packet and reset the contents of pkt. pkt is not touched if an error -+ * occurs. If pkt is empty (i.e. NULL, or pkt->data is NULL and -+ * pkt->side_data_elems zero), it signals the end of the stream (i.e. no more -+ * non-empty packets will be sent; sending more empty packets does nothing) and -+ * will cause the filter to output any packets it may have buffered internally. -+ * -+ * @return -+ * - 0 on success. -+ * - AVERROR(EAGAIN) if packets need to be retrieved from the filter (using -+ * av_bsf_receive_packet()) before new input can be consumed. -+ * - Another negative AVERROR value if an error occurs. -+ */ -+int av_bsf_send_packet(AVBSFContext* ctx, AVPacket* pkt); -+ -+/** -+ * Retrieve a filtered packet. -+ * -+ * @param ctx an initialized AVBSFContext -+ * @param[out] pkt this struct will be filled with the contents of the filtered -+ * packet. It is owned by the caller and must be freed using -+ * av_packet_unref() when it is no longer needed. -+ * This parameter should be "clean" (i.e. freshly allocated -+ * with av_packet_alloc() or unreffed with av_packet_unref()) -+ * when this function is called. If this function returns -+ * successfully, the contents of pkt will be completely -+ * overwritten by the returned data. On failure, pkt is not -+ * touched. -+ * -+ * @return -+ * - 0 on success. -+ * - AVERROR(EAGAIN) if more packets need to be sent to the filter (using -+ * av_bsf_send_packet()) to get more output. -+ * - AVERROR_EOF if there will be no further output from the filter. -+ * - Another negative AVERROR value if an error occurs. -+ * -+ * @note one input packet may result in several output packets, so after sending -+ * a packet with av_bsf_send_packet(), this function needs to be called -+ * repeatedly until it stops returning 0. It is also possible for a filter to -+ * output fewer packets than were sent to it, so this function may return -+ * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. -+ */ -+int av_bsf_receive_packet(AVBSFContext* ctx, AVPacket* pkt); -+ -+/** -+ * Reset the internal bitstream filter state. Should be called e.g. when -+ * seeking. -+ */ -+void av_bsf_flush(AVBSFContext* ctx); -+ -+/** -+ * Free a bitstream filter context and everything associated with it; write NULL -+ * into the supplied pointer. -+ */ -+void av_bsf_free(AVBSFContext** ctx); -+ -+/** -+ * Get the AVClass for AVBSFContext. It can be used in combination with -+ * AV_OPT_SEARCH_FAKE_OBJ for examining options. -+ * -+ * @see av_opt_find(). -+ */ -+const AVClass* av_bsf_get_class(void); -+ -+/** -+ * Structure for chain/list of bitstream filters. -+ * Empty list can be allocated by av_bsf_list_alloc(). -+ */ -+typedef struct AVBSFList AVBSFList; -+ -+/** -+ * Allocate empty list of bitstream filters. -+ * The list must be later freed by av_bsf_list_free() -+ * or finalized by av_bsf_list_finalize(). -+ * -+ * @return Pointer to @ref AVBSFList on success, NULL in case of failure -+ */ -+AVBSFList* av_bsf_list_alloc(void); -+ -+/** -+ * Free list of bitstream filters. -+ * -+ * @param lst Pointer to pointer returned by av_bsf_list_alloc() -+ */ -+void av_bsf_list_free(AVBSFList** lst); -+ -+/** -+ * Append bitstream filter to the list of bitstream filters. -+ * -+ * @param lst List to append to -+ * @param bsf Filter context to be appended -+ * -+ * @return >=0 on success, negative AVERROR in case of failure -+ */ -+int av_bsf_list_append(AVBSFList* lst, AVBSFContext* bsf); -+ -+/** -+ * Construct new bitstream filter context given it's name and options -+ * and append it to the list of bitstream filters. -+ * -+ * @param lst List to append to -+ * @param bsf_name Name of the bitstream filter -+ * @param options Options for the bitstream filter, can be set to NULL -+ * -+ * @return >=0 on success, negative AVERROR in case of failure -+ */ -+int av_bsf_list_append2(AVBSFList* lst, const char* bsf_name, -+ AVDictionary** options); -+/** -+ * Finalize list of bitstream filters. -+ * -+ * This function will transform @ref AVBSFList to single @ref AVBSFContext, -+ * so the whole chain of bitstream filters can be treated as single filter -+ * freshly allocated by av_bsf_alloc(). -+ * If the call is successful, @ref AVBSFList structure is freed and lst -+ * will be set to NULL. In case of failure, caller is responsible for -+ * freeing the structure by av_bsf_list_free() -+ * -+ * @param lst Filter list structure to be transformed -+ * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext -+ * structure representing the chain of bitstream filters -+ * -+ * @return >=0 on success, negative AVERROR in case of failure -+ */ -+int av_bsf_list_finalize(AVBSFList** lst, AVBSFContext** bsf); -+ -+/** -+ * Parse string describing list of bitstream filters and create single -+ * @ref AVBSFContext describing the whole chain of bitstream filters. -+ * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext -+ * freshly allocated by av_bsf_alloc(). -+ * -+ * @param str String describing chain of bitstream filters in format -+ * `bsf1[=opt1=val1:opt2=val2][,bsf2]` -+ * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext -+ * structure representing the chain of bitstream filters -+ * -+ * @return >=0 on success, negative AVERROR in case of failure -+ */ -+int av_bsf_list_parse_str(const char* str, AVBSFContext** bsf); -+ -+/** -+ * Get null/pass-through bitstream filter. -+ * -+ * @param[out] bsf Pointer to be set to new instance of pass-through bitstream -+ * filter -+ * -+ * @return -+ */ -+int av_bsf_get_null_filter(AVBSFContext** bsf); -+ -+/** -+ * @} -+ */ -+ -+#endif // AVCODEC_BSF_H -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_desc.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,128 @@ -+/* -+ * Codec descriptors public API -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_CODEC_DESC_H -+#define AVCODEC_CODEC_DESC_H -+ -+#include "libavutil/avutil.h" -+ -+#include "codec_id.h" -+ -+/** -+ * @addtogroup lavc_core -+ * @{ -+ */ -+ -+/** -+ * This struct describes the properties of a single codec described by an -+ * AVCodecID. -+ * @see avcodec_descriptor_get() -+ */ -+typedef struct AVCodecDescriptor { -+ enum AVCodecID id; -+ enum AVMediaType type; -+ /** -+ * Name of the codec described by this descriptor. It is non-empty and -+ * unique for each codec descriptor. It should contain alphanumeric -+ * characters and '_' only. -+ */ -+ const char* name; -+ /** -+ * A more descriptive name for this codec. May be NULL. -+ */ -+ const char* long_name; -+ /** -+ * Codec properties, a combination of AV_CODEC_PROP_* flags. -+ */ -+ int props; -+ /** -+ * MIME type(s) associated with the codec. -+ * May be NULL; if not, a NULL-terminated array of MIME types. -+ * The first item is always non-NULL and is the preferred MIME type. -+ */ -+ const char* const* mime_types; -+ /** -+ * If non-NULL, an array of profiles recognized for this codec. -+ * Terminated with FF_PROFILE_UNKNOWN. -+ */ -+ const struct AVProfile* profiles; -+} AVCodecDescriptor; -+ -+/** -+ * Codec uses only intra compression. -+ * Video and audio codecs only. -+ */ -+#define AV_CODEC_PROP_INTRA_ONLY (1 << 0) -+/** -+ * Codec supports lossy compression. Audio and video codecs only. -+ * @note a codec may support both lossy and lossless -+ * compression modes -+ */ -+#define AV_CODEC_PROP_LOSSY (1 << 1) -+/** -+ * Codec supports lossless compression. Audio and video codecs only. -+ */ -+#define AV_CODEC_PROP_LOSSLESS (1 << 2) -+/** -+ * Codec supports frame reordering. That is, the coded order (the order in which -+ * the encoded packets are output by the encoders / stored / input to the -+ * decoders) may be different from the presentation order of the corresponding -+ * frames. -+ * -+ * For codecs that do not have this property set, PTS and DTS should always be -+ * equal. -+ */ -+#define AV_CODEC_PROP_REORDER (1 << 3) -+/** -+ * Subtitle codec is bitmap based -+ * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. -+ */ -+#define AV_CODEC_PROP_BITMAP_SUB (1 << 16) -+/** -+ * Subtitle codec is text based. -+ * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. -+ */ -+#define AV_CODEC_PROP_TEXT_SUB (1 << 17) -+ -+/** -+ * @return descriptor for given codec ID or NULL if no descriptor exists. -+ */ -+const AVCodecDescriptor* avcodec_descriptor_get(enum AVCodecID id); -+ -+/** -+ * Iterate over all codec descriptors known to libavcodec. -+ * -+ * @param prev previous descriptor. NULL to get the first descriptor. -+ * -+ * @return next descriptor or NULL after the last descriptor -+ */ -+const AVCodecDescriptor* avcodec_descriptor_next(const AVCodecDescriptor* prev); -+ -+/** -+ * @return codec descriptor with the given name or NULL if no such descriptor -+ * exists. -+ */ -+const AVCodecDescriptor* avcodec_descriptor_get_by_name(const char* name); -+ -+/** -+ * @} -+ */ -+ -+#endif // AVCODEC_CODEC_DESC_H -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,387 @@ -+/* -+ * AVCodec public API -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_CODEC_H -+#define AVCODEC_CODEC_H -+ -+#include -+ -+#include "libavutil/avutil.h" -+#include "libavutil/hwcontext.h" -+#include "libavutil/log.h" -+#include "libavutil/pixfmt.h" -+#include "libavutil/rational.h" -+#include "libavutil/samplefmt.h" -+ -+#include "libavcodec/codec_id.h" -+#include "libavcodec/version_major.h" -+ -+/** -+ * @addtogroup lavc_core -+ * @{ -+ */ -+ -+/** -+ * Decoder can use draw_horiz_band callback. -+ */ -+#define AV_CODEC_CAP_DRAW_HORIZ_BAND (1 << 0) -+/** -+ * Codec uses get_buffer() or get_encode_buffer() for allocating buffers and -+ * supports custom allocators. -+ * If not set, it might not use get_buffer() or get_encode_buffer() at all, or -+ * use operations that assume the buffer was allocated by -+ * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. -+ */ -+#define AV_CODEC_CAP_DR1 (1 << 1) -+/** -+ * Encoder or decoder requires flushing with NULL input at the end in order to -+ * give the complete and correct output. -+ * -+ * NOTE: If this flag is not set, the codec is guaranteed to never be fed with -+ * with NULL data. The user can still send NULL data to the public encode -+ * or decode function, but libavcodec will not pass it along to the codec -+ * unless this flag is set. -+ * -+ * Decoders: -+ * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, -+ * avpkt->size=0 at the end to get the delayed data until the decoder no longer -+ * returns frames. -+ * -+ * Encoders: -+ * The encoder needs to be fed with NULL data at the end of encoding until the -+ * encoder no longer returns data. -+ * -+ * NOTE: For encoders implementing the AVCodec.encode2() function, setting this -+ * flag also means that the encoder must set the pts and duration for -+ * each output packet. If this flag is not set, the pts and duration will -+ * be determined by libavcodec from the input frame. -+ */ -+#define AV_CODEC_CAP_DELAY (1 << 5) -+/** -+ * Codec can be fed a final frame with a smaller size. -+ * This can be used to prevent truncation of the last audio samples. -+ */ -+#define AV_CODEC_CAP_SMALL_LAST_FRAME (1 << 6) -+ -+/** -+ * Codec can output multiple frames per AVPacket -+ * Normally demuxers return one frame at a time, demuxers which do not do -+ * are connected to a parser to split what they return into proper frames. -+ * This flag is reserved to the very rare category of codecs which have a -+ * bitstream that cannot be split into frames without timeconsuming -+ * operations like full decoding. Demuxers carrying such bitstreams thus -+ * may return multiple frames in a packet. This has many disadvantages like -+ * prohibiting stream copy in many cases thus it should only be considered -+ * as a last resort. -+ */ -+#define AV_CODEC_CAP_SUBFRAMES (1 << 8) -+/** -+ * Codec is experimental and is thus avoided in favor of non experimental -+ * encoders -+ */ -+#define AV_CODEC_CAP_EXPERIMENTAL (1 << 9) -+/** -+ * Codec should fill in channel configuration and samplerate instead of -+ * container -+ */ -+#define AV_CODEC_CAP_CHANNEL_CONF (1 << 10) -+/** -+ * Codec supports frame-level multithreading. -+ */ -+#define AV_CODEC_CAP_FRAME_THREADS (1 << 12) -+/** -+ * Codec supports slice-based (or partition-based) multithreading. -+ */ -+#define AV_CODEC_CAP_SLICE_THREADS (1 << 13) -+/** -+ * Codec supports changed parameters at any point. -+ */ -+#define AV_CODEC_CAP_PARAM_CHANGE (1 << 14) -+/** -+ * Codec supports multithreading through a method other than slice- or -+ * frame-level multithreading. Typically this marks wrappers around -+ * multithreading-capable external libraries. -+ */ -+#define AV_CODEC_CAP_OTHER_THREADS (1 << 15) -+/** -+ * Audio encoder supports receiving a different number of samples in each call. -+ */ -+#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16) -+/** -+ * Decoder is not a preferred choice for probing. -+ * This indicates that the decoder is not a good choice for probing. -+ * It could for example be an expensive to spin up hardware decoder, -+ * or it could simply not provide a lot of useful information about -+ * the stream. -+ * A decoder marked with this flag should only be used as last resort -+ * choice for probing. -+ */ -+#define AV_CODEC_CAP_AVOID_PROBING (1 << 17) -+ -+/** -+ * Codec is backed by a hardware implementation. Typically used to -+ * identify a non-hwaccel hardware decoder. For information about hwaccels, use -+ * avcodec_get_hw_config() instead. -+ */ -+#define AV_CODEC_CAP_HARDWARE (1 << 18) -+ -+/** -+ * Codec is potentially backed by a hardware implementation, but not -+ * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the -+ * implementation provides some sort of internal fallback. -+ */ -+#define AV_CODEC_CAP_HYBRID (1 << 19) -+ -+/** -+ * This encoder can reorder user opaque values from input AVFrames and return -+ * them with corresponding output packets. -+ * @see AV_CODEC_FLAG_COPY_OPAQUE -+ */ -+#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) -+ -+/** -+ * This encoder can be flushed using avcodec_flush_buffers(). If this flag is -+ * not set, the encoder must be closed and reopened to ensure that no frames -+ * remain pending. -+ */ -+#define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) -+ -+/** -+ * The encoder is able to output reconstructed frame data, i.e. raw frames that -+ * would be produced by decoding the encoded bitstream. -+ * -+ * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. -+ */ -+#define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) -+ -+/** -+ * AVProfile. -+ */ -+typedef struct AVProfile { -+ int profile; -+ const char* name; ///< short name for the profile -+} AVProfile; -+ -+/** -+ * AVCodec. -+ */ -+typedef struct AVCodec { -+ /** -+ * Name of the codec implementation. -+ * The name is globally unique among encoders and among decoders (but an -+ * encoder and a decoder can share the same name). -+ * This is the primary way to find a codec from the user perspective. -+ */ -+ const char* name; -+ /** -+ * Descriptive name for the codec, meant to be more human readable than name. -+ * You should use the NULL_IF_CONFIG_SMALL() macro to define it. -+ */ -+ const char* long_name; -+ enum AVMediaType type; -+ enum AVCodecID id; -+ /** -+ * Codec capabilities. -+ * see AV_CODEC_CAP_* -+ */ -+ int capabilities; -+ uint8_t max_lowres; ///< maximum value for lowres supported by the decoder -+ const AVRational* -+ supported_framerates; ///< array of supported framerates, or NULL if any, -+ ///< array is terminated by {0,0} -+ const enum AVPixelFormat* -+ pix_fmts; ///< array of supported pixel formats, or NULL if unknown, -+ ///< array is terminated by -1 -+ const int* -+ supported_samplerates; ///< array of supported audio samplerates, or NULL -+ ///< if unknown, array is terminated by 0 -+ const enum AVSampleFormat* -+ sample_fmts; ///< array of supported sample formats, or NULL if unknown, -+ ///< array is terminated by -1 -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * @deprecated use ch_layouts instead -+ */ -+ attribute_deprecated const uint64_t* -+ channel_layouts; ///< array of support channel layouts, or NULL if -+ ///< unknown. array is terminated by 0 -+#endif -+ const AVClass* priv_class; ///< AVClass for the private context -+ const AVProfile* -+ profiles; ///< array of recognized profiles, or NULL if unknown, array is -+ ///< terminated by {FF_PROFILE_UNKNOWN} -+ -+ /** -+ * Group name of the codec implementation. -+ * This is a short symbolic name of the wrapper backing this codec. A -+ * wrapper uses some kind of external implementation for the codec, such -+ * as an external library, or a codec implementation provided by the OS or -+ * the hardware. -+ * If this field is NULL, this is a builtin, libavcodec native codec. -+ * If non-NULL, this will be the suffix in AVCodec.name in most cases -+ * (usually AVCodec.name will be of the form "_"). -+ */ -+ const char* wrapper_name; -+ -+ /** -+ * Array of supported channel layouts, terminated with a zeroed layout. -+ */ -+ const AVChannelLayout* ch_layouts; -+} AVCodec; -+ -+/** -+ * Iterate over all registered codecs. -+ * -+ * @param opaque a pointer where libavcodec will store the iteration state. Must -+ * point to NULL to start the iteration. -+ * -+ * @return the next registered codec or NULL when the iteration is -+ * finished -+ */ -+const AVCodec* av_codec_iterate(void** opaque); -+ -+/** -+ * Find a registered decoder with a matching codec ID. -+ * -+ * @param id AVCodecID of the requested decoder -+ * @return A decoder if one was found, NULL otherwise. -+ */ -+const AVCodec* avcodec_find_decoder(enum AVCodecID id); -+ -+/** -+ * Find a registered decoder with the specified name. -+ * -+ * @param name name of the requested decoder -+ * @return A decoder if one was found, NULL otherwise. -+ */ -+const AVCodec* avcodec_find_decoder_by_name(const char* name); -+ -+/** -+ * Find a registered encoder with a matching codec ID. -+ * -+ * @param id AVCodecID of the requested encoder -+ * @return An encoder if one was found, NULL otherwise. -+ */ -+const AVCodec* avcodec_find_encoder(enum AVCodecID id); -+ -+/** -+ * Find a registered encoder with the specified name. -+ * -+ * @param name name of the requested encoder -+ * @return An encoder if one was found, NULL otherwise. -+ */ -+const AVCodec* avcodec_find_encoder_by_name(const char* name); -+/** -+ * @return a non-zero number if codec is an encoder, zero otherwise -+ */ -+int av_codec_is_encoder(const AVCodec* codec); -+ -+/** -+ * @return a non-zero number if codec is a decoder, zero otherwise -+ */ -+int av_codec_is_decoder(const AVCodec* codec); -+ -+/** -+ * Return a name for the specified profile, if available. -+ * -+ * @param codec the codec that is searched for the given profile -+ * @param profile the profile value for which a name is requested -+ * @return A name for the profile if found, NULL otherwise. -+ */ -+const char* av_get_profile_name(const AVCodec* codec, int profile); -+ -+enum { -+ /** -+ * The codec supports this format via the hw_device_ctx interface. -+ * -+ * When selecting this format, AVCodecContext.hw_device_ctx should -+ * have been set to a device of the specified type before calling -+ * avcodec_open2(). -+ */ -+ AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01, -+ /** -+ * The codec supports this format via the hw_frames_ctx interface. -+ * -+ * When selecting this format for a decoder, -+ * AVCodecContext.hw_frames_ctx should be set to a suitable frames -+ * context inside the get_format() callback. The frames context -+ * must have been created on a device of the specified type. -+ * -+ * When selecting this format for an encoder, -+ * AVCodecContext.hw_frames_ctx should be set to the context which -+ * will be used for the input frames before calling avcodec_open2(). -+ */ -+ AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02, -+ /** -+ * The codec supports this format by some internal method. -+ * -+ * This format can be selected without any additional configuration - -+ * no device or frames context is required. -+ */ -+ AV_CODEC_HW_CONFIG_METHOD_INTERNAL = 0x04, -+ /** -+ * The codec supports this format by some ad-hoc method. -+ * -+ * Additional settings and/or function calls are required. See the -+ * codec-specific documentation for details. (Methods requiring -+ * this sort of configuration are deprecated and others should be -+ * used in preference.) -+ */ -+ AV_CODEC_HW_CONFIG_METHOD_AD_HOC = 0x08, -+}; -+ -+typedef struct AVCodecHWConfig { -+ /** -+ * For decoders, a hardware pixel format which that decoder may be -+ * able to decode to if suitable hardware is available. -+ * -+ * For encoders, a pixel format which the encoder may be able to -+ * accept. If set to AV_PIX_FMT_NONE, this applies to all pixel -+ * formats supported by the codec. -+ */ -+ enum AVPixelFormat pix_fmt; -+ /** -+ * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible -+ * setup methods which can be used with this configuration. -+ */ -+ int methods; -+ /** -+ * The device type associated with the configuration. -+ * -+ * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and -+ * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused. -+ */ -+ enum AVHWDeviceType device_type; -+} AVCodecHWConfig; -+ -+/** -+ * Retrieve supported hardware configurations for a codec. -+ * -+ * Values of index from zero to some maximum return the indexed configuration -+ * descriptor; all other values return NULL. If the codec does not support -+ * any hardware configurations then it will always return NULL. -+ */ -+const AVCodecHWConfig* avcodec_get_hw_config(const AVCodec* codec, int index); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVCODEC_CODEC_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_id.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,669 @@ -+/* -+ * Codec IDs -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_CODEC_ID_H -+#define AVCODEC_CODEC_ID_H -+ -+#include "libavutil/avutil.h" -+#include "libavutil/samplefmt.h" -+ -+#include "version_major.h" -+ -+/** -+ * @addtogroup lavc_core -+ * @{ -+ */ -+ -+/** -+ * Identify the syntax and semantics of the bitstream. -+ * The principle is roughly: -+ * Two decoders with the same ID can decode the same streams. -+ * Two encoders with the same ID can encode compatible streams. -+ * There may be slight deviations from the principle due to implementation -+ * details. -+ * -+ * If you add a codec ID to this list, add it so that -+ * 1. no value of an existing codec ID changes (that would break ABI), -+ * 2. it is as close as possible to similar codecs -+ * -+ * After adding new codec IDs, do not forget to add an entry to the codec -+ * descriptor list and bump libavcodec minor version. -+ */ -+enum AVCodecID { -+ AV_CODEC_ID_NONE, -+ -+ /* video codecs */ -+ AV_CODEC_ID_MPEG1VIDEO, -+ AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding -+ AV_CODEC_ID_H261, -+ AV_CODEC_ID_H263, -+ AV_CODEC_ID_RV10, -+ AV_CODEC_ID_RV20, -+ AV_CODEC_ID_MJPEG, -+ AV_CODEC_ID_MJPEGB, -+ AV_CODEC_ID_LJPEG, -+ AV_CODEC_ID_SP5X, -+ AV_CODEC_ID_JPEGLS, -+ AV_CODEC_ID_MPEG4, -+ AV_CODEC_ID_RAWVIDEO, -+ AV_CODEC_ID_MSMPEG4V1, -+ AV_CODEC_ID_MSMPEG4V2, -+ AV_CODEC_ID_MSMPEG4V3, -+ AV_CODEC_ID_WMV1, -+ AV_CODEC_ID_WMV2, -+ AV_CODEC_ID_H263P, -+ AV_CODEC_ID_H263I, -+ AV_CODEC_ID_FLV1, -+ AV_CODEC_ID_SVQ1, -+ AV_CODEC_ID_SVQ3, -+ AV_CODEC_ID_DVVIDEO, -+ AV_CODEC_ID_HUFFYUV, -+ AV_CODEC_ID_CYUV, -+ AV_CODEC_ID_H264, -+ AV_CODEC_ID_INDEO3, -+ AV_CODEC_ID_VP3, -+ AV_CODEC_ID_THEORA, -+ AV_CODEC_ID_ASV1, -+ AV_CODEC_ID_ASV2, -+ AV_CODEC_ID_FFV1, -+ AV_CODEC_ID_4XM, -+ AV_CODEC_ID_VCR1, -+ AV_CODEC_ID_CLJR, -+ AV_CODEC_ID_MDEC, -+ AV_CODEC_ID_ROQ, -+ AV_CODEC_ID_INTERPLAY_VIDEO, -+ AV_CODEC_ID_XAN_WC3, -+ AV_CODEC_ID_XAN_WC4, -+ AV_CODEC_ID_RPZA, -+ AV_CODEC_ID_CINEPAK, -+ AV_CODEC_ID_WS_VQA, -+ AV_CODEC_ID_MSRLE, -+ AV_CODEC_ID_MSVIDEO1, -+ AV_CODEC_ID_IDCIN, -+ AV_CODEC_ID_8BPS, -+ AV_CODEC_ID_SMC, -+ AV_CODEC_ID_FLIC, -+ AV_CODEC_ID_TRUEMOTION1, -+ AV_CODEC_ID_VMDVIDEO, -+ AV_CODEC_ID_MSZH, -+ AV_CODEC_ID_ZLIB, -+ AV_CODEC_ID_QTRLE, -+ AV_CODEC_ID_TSCC, -+ AV_CODEC_ID_ULTI, -+ AV_CODEC_ID_QDRAW, -+ AV_CODEC_ID_VIXL, -+ AV_CODEC_ID_QPEG, -+ AV_CODEC_ID_PNG, -+ AV_CODEC_ID_PPM, -+ AV_CODEC_ID_PBM, -+ AV_CODEC_ID_PGM, -+ AV_CODEC_ID_PGMYUV, -+ AV_CODEC_ID_PAM, -+ AV_CODEC_ID_FFVHUFF, -+ AV_CODEC_ID_RV30, -+ AV_CODEC_ID_RV40, -+ AV_CODEC_ID_VC1, -+ AV_CODEC_ID_WMV3, -+ AV_CODEC_ID_LOCO, -+ AV_CODEC_ID_WNV1, -+ AV_CODEC_ID_AASC, -+ AV_CODEC_ID_INDEO2, -+ AV_CODEC_ID_FRAPS, -+ AV_CODEC_ID_TRUEMOTION2, -+ AV_CODEC_ID_BMP, -+ AV_CODEC_ID_CSCD, -+ AV_CODEC_ID_MMVIDEO, -+ AV_CODEC_ID_ZMBV, -+ AV_CODEC_ID_AVS, -+ AV_CODEC_ID_SMACKVIDEO, -+ AV_CODEC_ID_NUV, -+ AV_CODEC_ID_KMVC, -+ AV_CODEC_ID_FLASHSV, -+ AV_CODEC_ID_CAVS, -+ AV_CODEC_ID_JPEG2000, -+ AV_CODEC_ID_VMNC, -+ AV_CODEC_ID_VP5, -+ AV_CODEC_ID_VP6, -+ AV_CODEC_ID_VP6F, -+ AV_CODEC_ID_TARGA, -+ AV_CODEC_ID_DSICINVIDEO, -+ AV_CODEC_ID_TIERTEXSEQVIDEO, -+ AV_CODEC_ID_TIFF, -+ AV_CODEC_ID_GIF, -+ AV_CODEC_ID_DXA, -+ AV_CODEC_ID_DNXHD, -+ AV_CODEC_ID_THP, -+ AV_CODEC_ID_SGI, -+ AV_CODEC_ID_C93, -+ AV_CODEC_ID_BETHSOFTVID, -+ AV_CODEC_ID_PTX, -+ AV_CODEC_ID_TXD, -+ AV_CODEC_ID_VP6A, -+ AV_CODEC_ID_AMV, -+ AV_CODEC_ID_VB, -+ AV_CODEC_ID_PCX, -+ AV_CODEC_ID_SUNRAST, -+ AV_CODEC_ID_INDEO4, -+ AV_CODEC_ID_INDEO5, -+ AV_CODEC_ID_MIMIC, -+ AV_CODEC_ID_RL2, -+ AV_CODEC_ID_ESCAPE124, -+ AV_CODEC_ID_DIRAC, -+ AV_CODEC_ID_BFI, -+ AV_CODEC_ID_CMV, -+ AV_CODEC_ID_MOTIONPIXELS, -+ AV_CODEC_ID_TGV, -+ AV_CODEC_ID_TGQ, -+ AV_CODEC_ID_TQI, -+ AV_CODEC_ID_AURA, -+ AV_CODEC_ID_AURA2, -+ AV_CODEC_ID_V210X, -+ AV_CODEC_ID_TMV, -+ AV_CODEC_ID_V210, -+ AV_CODEC_ID_DPX, -+ AV_CODEC_ID_MAD, -+ AV_CODEC_ID_FRWU, -+ AV_CODEC_ID_FLASHSV2, -+ AV_CODEC_ID_CDGRAPHICS, -+ AV_CODEC_ID_R210, -+ AV_CODEC_ID_ANM, -+ AV_CODEC_ID_BINKVIDEO, -+ AV_CODEC_ID_IFF_ILBM, -+#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM -+ AV_CODEC_ID_KGV1, -+ AV_CODEC_ID_YOP, -+ AV_CODEC_ID_VP8, -+ AV_CODEC_ID_PICTOR, -+ AV_CODEC_ID_ANSI, -+ AV_CODEC_ID_A64_MULTI, -+ AV_CODEC_ID_A64_MULTI5, -+ AV_CODEC_ID_R10K, -+ AV_CODEC_ID_MXPEG, -+ AV_CODEC_ID_LAGARITH, -+ AV_CODEC_ID_PRORES, -+ AV_CODEC_ID_JV, -+ AV_CODEC_ID_DFA, -+ AV_CODEC_ID_WMV3IMAGE, -+ AV_CODEC_ID_VC1IMAGE, -+ AV_CODEC_ID_UTVIDEO, -+ AV_CODEC_ID_BMV_VIDEO, -+ AV_CODEC_ID_VBLE, -+ AV_CODEC_ID_DXTORY, -+ AV_CODEC_ID_V410, -+ AV_CODEC_ID_XWD, -+ AV_CODEC_ID_CDXL, -+ AV_CODEC_ID_XBM, -+ AV_CODEC_ID_ZEROCODEC, -+ AV_CODEC_ID_MSS1, -+ AV_CODEC_ID_MSA1, -+ AV_CODEC_ID_TSCC2, -+ AV_CODEC_ID_MTS2, -+ AV_CODEC_ID_CLLC, -+ AV_CODEC_ID_MSS2, -+ AV_CODEC_ID_VP9, -+ AV_CODEC_ID_AIC, -+ AV_CODEC_ID_ESCAPE130, -+ AV_CODEC_ID_G2M, -+ AV_CODEC_ID_WEBP, -+ AV_CODEC_ID_HNM4_VIDEO, -+ AV_CODEC_ID_HEVC, -+#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC -+ AV_CODEC_ID_FIC, -+ AV_CODEC_ID_ALIAS_PIX, -+ AV_CODEC_ID_BRENDER_PIX, -+ AV_CODEC_ID_PAF_VIDEO, -+ AV_CODEC_ID_EXR, -+ AV_CODEC_ID_VP7, -+ AV_CODEC_ID_SANM, -+ AV_CODEC_ID_SGIRLE, -+ AV_CODEC_ID_MVC1, -+ AV_CODEC_ID_MVC2, -+ AV_CODEC_ID_HQX, -+ AV_CODEC_ID_TDSC, -+ AV_CODEC_ID_HQ_HQA, -+ AV_CODEC_ID_HAP, -+ AV_CODEC_ID_DDS, -+ AV_CODEC_ID_DXV, -+ AV_CODEC_ID_SCREENPRESSO, -+ AV_CODEC_ID_RSCC, -+ AV_CODEC_ID_AVS2, -+ AV_CODEC_ID_PGX, -+ AV_CODEC_ID_AVS3, -+ AV_CODEC_ID_MSP2, -+ AV_CODEC_ID_VVC, -+#define AV_CODEC_ID_H266 AV_CODEC_ID_VVC -+ AV_CODEC_ID_Y41P, -+ AV_CODEC_ID_AVRP, -+ AV_CODEC_ID_012V, -+ AV_CODEC_ID_AVUI, -+#if FF_API_AYUV_CODECID -+ AV_CODEC_ID_AYUV, -+#endif -+ AV_CODEC_ID_TARGA_Y216, -+ AV_CODEC_ID_V308, -+ AV_CODEC_ID_V408, -+ AV_CODEC_ID_YUV4, -+ AV_CODEC_ID_AVRN, -+ AV_CODEC_ID_CPIA, -+ AV_CODEC_ID_XFACE, -+ AV_CODEC_ID_SNOW, -+ AV_CODEC_ID_SMVJPEG, -+ AV_CODEC_ID_APNG, -+ AV_CODEC_ID_DAALA, -+ AV_CODEC_ID_CFHD, -+ AV_CODEC_ID_TRUEMOTION2RT, -+ AV_CODEC_ID_M101, -+ AV_CODEC_ID_MAGICYUV, -+ AV_CODEC_ID_SHEERVIDEO, -+ AV_CODEC_ID_YLC, -+ AV_CODEC_ID_PSD, -+ AV_CODEC_ID_PIXLET, -+ AV_CODEC_ID_SPEEDHQ, -+ AV_CODEC_ID_FMVC, -+ AV_CODEC_ID_SCPR, -+ AV_CODEC_ID_CLEARVIDEO, -+ AV_CODEC_ID_XPM, -+ AV_CODEC_ID_AV1, -+ AV_CODEC_ID_BITPACKED, -+ AV_CODEC_ID_MSCC, -+ AV_CODEC_ID_SRGC, -+ AV_CODEC_ID_SVG, -+ AV_CODEC_ID_GDV, -+ AV_CODEC_ID_FITS, -+ AV_CODEC_ID_IMM4, -+ AV_CODEC_ID_PROSUMER, -+ AV_CODEC_ID_MWSC, -+ AV_CODEC_ID_WCMV, -+ AV_CODEC_ID_RASC, -+ AV_CODEC_ID_HYMT, -+ AV_CODEC_ID_ARBC, -+ AV_CODEC_ID_AGM, -+ AV_CODEC_ID_LSCR, -+ AV_CODEC_ID_VP4, -+ AV_CODEC_ID_IMM5, -+ AV_CODEC_ID_MVDV, -+ AV_CODEC_ID_MVHA, -+ AV_CODEC_ID_CDTOONS, -+ AV_CODEC_ID_MV30, -+ AV_CODEC_ID_NOTCHLC, -+ AV_CODEC_ID_PFM, -+ AV_CODEC_ID_MOBICLIP, -+ AV_CODEC_ID_PHOTOCD, -+ AV_CODEC_ID_IPU, -+ AV_CODEC_ID_ARGO, -+ AV_CODEC_ID_CRI, -+ AV_CODEC_ID_SIMBIOSIS_IMX, -+ AV_CODEC_ID_SGA_VIDEO, -+ AV_CODEC_ID_GEM, -+ AV_CODEC_ID_VBN, -+ AV_CODEC_ID_JPEGXL, -+ AV_CODEC_ID_QOI, -+ AV_CODEC_ID_PHM, -+ AV_CODEC_ID_RADIANCE_HDR, -+ AV_CODEC_ID_WBMP, -+ AV_CODEC_ID_MEDIA100, -+ AV_CODEC_ID_VQC, -+ -+ /* various PCM "codecs" */ -+ AV_CODEC_ID_FIRST_AUDIO = -+ 0x10000, ///< A dummy id pointing at the start of audio codecs -+ AV_CODEC_ID_PCM_S16LE = 0x10000, -+ AV_CODEC_ID_PCM_S16BE, -+ AV_CODEC_ID_PCM_U16LE, -+ AV_CODEC_ID_PCM_U16BE, -+ AV_CODEC_ID_PCM_S8, -+ AV_CODEC_ID_PCM_U8, -+ AV_CODEC_ID_PCM_MULAW, -+ AV_CODEC_ID_PCM_ALAW, -+ AV_CODEC_ID_PCM_S32LE, -+ AV_CODEC_ID_PCM_S32BE, -+ AV_CODEC_ID_PCM_U32LE, -+ AV_CODEC_ID_PCM_U32BE, -+ AV_CODEC_ID_PCM_S24LE, -+ AV_CODEC_ID_PCM_S24BE, -+ AV_CODEC_ID_PCM_U24LE, -+ AV_CODEC_ID_PCM_U24BE, -+ AV_CODEC_ID_PCM_S24DAUD, -+ AV_CODEC_ID_PCM_ZORK, -+ AV_CODEC_ID_PCM_S16LE_PLANAR, -+ AV_CODEC_ID_PCM_DVD, -+ AV_CODEC_ID_PCM_F32BE, -+ AV_CODEC_ID_PCM_F32LE, -+ AV_CODEC_ID_PCM_F64BE, -+ AV_CODEC_ID_PCM_F64LE, -+ AV_CODEC_ID_PCM_BLURAY, -+ AV_CODEC_ID_PCM_LXF, -+ AV_CODEC_ID_S302M, -+ AV_CODEC_ID_PCM_S8_PLANAR, -+ AV_CODEC_ID_PCM_S24LE_PLANAR, -+ AV_CODEC_ID_PCM_S32LE_PLANAR, -+ AV_CODEC_ID_PCM_S16BE_PLANAR, -+ AV_CODEC_ID_PCM_S64LE, -+ AV_CODEC_ID_PCM_S64BE, -+ AV_CODEC_ID_PCM_F16LE, -+ AV_CODEC_ID_PCM_F24LE, -+ AV_CODEC_ID_PCM_VIDC, -+ AV_CODEC_ID_PCM_SGA, -+ -+ /* various ADPCM codecs */ -+ AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, -+ AV_CODEC_ID_ADPCM_IMA_WAV, -+ AV_CODEC_ID_ADPCM_IMA_DK3, -+ AV_CODEC_ID_ADPCM_IMA_DK4, -+ AV_CODEC_ID_ADPCM_IMA_WS, -+ AV_CODEC_ID_ADPCM_IMA_SMJPEG, -+ AV_CODEC_ID_ADPCM_MS, -+ AV_CODEC_ID_ADPCM_4XM, -+ AV_CODEC_ID_ADPCM_XA, -+ AV_CODEC_ID_ADPCM_ADX, -+ AV_CODEC_ID_ADPCM_EA, -+ AV_CODEC_ID_ADPCM_G726, -+ AV_CODEC_ID_ADPCM_CT, -+ AV_CODEC_ID_ADPCM_SWF, -+ AV_CODEC_ID_ADPCM_YAMAHA, -+ AV_CODEC_ID_ADPCM_SBPRO_4, -+ AV_CODEC_ID_ADPCM_SBPRO_3, -+ AV_CODEC_ID_ADPCM_SBPRO_2, -+ AV_CODEC_ID_ADPCM_THP, -+ AV_CODEC_ID_ADPCM_IMA_AMV, -+ AV_CODEC_ID_ADPCM_EA_R1, -+ AV_CODEC_ID_ADPCM_EA_R3, -+ AV_CODEC_ID_ADPCM_EA_R2, -+ AV_CODEC_ID_ADPCM_IMA_EA_SEAD, -+ AV_CODEC_ID_ADPCM_IMA_EA_EACS, -+ AV_CODEC_ID_ADPCM_EA_XAS, -+ AV_CODEC_ID_ADPCM_EA_MAXIS_XA, -+ AV_CODEC_ID_ADPCM_IMA_ISS, -+ AV_CODEC_ID_ADPCM_G722, -+ AV_CODEC_ID_ADPCM_IMA_APC, -+ AV_CODEC_ID_ADPCM_VIMA, -+ AV_CODEC_ID_ADPCM_AFC, -+ AV_CODEC_ID_ADPCM_IMA_OKI, -+ AV_CODEC_ID_ADPCM_DTK, -+ AV_CODEC_ID_ADPCM_IMA_RAD, -+ AV_CODEC_ID_ADPCM_G726LE, -+ AV_CODEC_ID_ADPCM_THP_LE, -+ AV_CODEC_ID_ADPCM_PSX, -+ AV_CODEC_ID_ADPCM_AICA, -+ AV_CODEC_ID_ADPCM_IMA_DAT4, -+ AV_CODEC_ID_ADPCM_MTAF, -+ AV_CODEC_ID_ADPCM_AGM, -+ AV_CODEC_ID_ADPCM_ARGO, -+ AV_CODEC_ID_ADPCM_IMA_SSI, -+ AV_CODEC_ID_ADPCM_ZORK, -+ AV_CODEC_ID_ADPCM_IMA_APM, -+ AV_CODEC_ID_ADPCM_IMA_ALP, -+ AV_CODEC_ID_ADPCM_IMA_MTF, -+ AV_CODEC_ID_ADPCM_IMA_CUNNING, -+ AV_CODEC_ID_ADPCM_IMA_MOFLEX, -+ AV_CODEC_ID_ADPCM_IMA_ACORN, -+ AV_CODEC_ID_ADPCM_XMD, -+ -+ /* AMR */ -+ AV_CODEC_ID_AMR_NB = 0x12000, -+ AV_CODEC_ID_AMR_WB, -+ -+ /* RealAudio codecs*/ -+ AV_CODEC_ID_RA_144 = 0x13000, -+ AV_CODEC_ID_RA_288, -+ -+ /* various DPCM codecs */ -+ AV_CODEC_ID_ROQ_DPCM = 0x14000, -+ AV_CODEC_ID_INTERPLAY_DPCM, -+ AV_CODEC_ID_XAN_DPCM, -+ AV_CODEC_ID_SOL_DPCM, -+ AV_CODEC_ID_SDX2_DPCM, -+ AV_CODEC_ID_GREMLIN_DPCM, -+ AV_CODEC_ID_DERF_DPCM, -+ AV_CODEC_ID_WADY_DPCM, -+ AV_CODEC_ID_CBD2_DPCM, -+ -+ /* audio codecs */ -+ AV_CODEC_ID_MP2 = 0x15000, -+ AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 -+ AV_CODEC_ID_AAC, -+ AV_CODEC_ID_AC3, -+ AV_CODEC_ID_DTS, -+ AV_CODEC_ID_VORBIS, -+ AV_CODEC_ID_DVAUDIO, -+ AV_CODEC_ID_WMAV1, -+ AV_CODEC_ID_WMAV2, -+ AV_CODEC_ID_MACE3, -+ AV_CODEC_ID_MACE6, -+ AV_CODEC_ID_VMDAUDIO, -+ AV_CODEC_ID_FLAC, -+ AV_CODEC_ID_MP3ADU, -+ AV_CODEC_ID_MP3ON4, -+ AV_CODEC_ID_SHORTEN, -+ AV_CODEC_ID_ALAC, -+ AV_CODEC_ID_WESTWOOD_SND1, -+ AV_CODEC_ID_GSM, ///< as in Berlin toast format -+ AV_CODEC_ID_QDM2, -+ AV_CODEC_ID_COOK, -+ AV_CODEC_ID_TRUESPEECH, -+ AV_CODEC_ID_TTA, -+ AV_CODEC_ID_SMACKAUDIO, -+ AV_CODEC_ID_QCELP, -+ AV_CODEC_ID_WAVPACK, -+ AV_CODEC_ID_DSICINAUDIO, -+ AV_CODEC_ID_IMC, -+ AV_CODEC_ID_MUSEPACK7, -+ AV_CODEC_ID_MLP, -+ AV_CODEC_ID_GSM_MS, /* as found in WAV */ -+ AV_CODEC_ID_ATRAC3, -+ AV_CODEC_ID_APE, -+ AV_CODEC_ID_NELLYMOSER, -+ AV_CODEC_ID_MUSEPACK8, -+ AV_CODEC_ID_SPEEX, -+ AV_CODEC_ID_WMAVOICE, -+ AV_CODEC_ID_WMAPRO, -+ AV_CODEC_ID_WMALOSSLESS, -+ AV_CODEC_ID_ATRAC3P, -+ AV_CODEC_ID_EAC3, -+ AV_CODEC_ID_SIPR, -+ AV_CODEC_ID_MP1, -+ AV_CODEC_ID_TWINVQ, -+ AV_CODEC_ID_TRUEHD, -+ AV_CODEC_ID_MP4ALS, -+ AV_CODEC_ID_ATRAC1, -+ AV_CODEC_ID_BINKAUDIO_RDFT, -+ AV_CODEC_ID_BINKAUDIO_DCT, -+ AV_CODEC_ID_AAC_LATM, -+ AV_CODEC_ID_QDMC, -+ AV_CODEC_ID_CELT, -+ AV_CODEC_ID_G723_1, -+ AV_CODEC_ID_G729, -+ AV_CODEC_ID_8SVX_EXP, -+ AV_CODEC_ID_8SVX_FIB, -+ AV_CODEC_ID_BMV_AUDIO, -+ AV_CODEC_ID_RALF, -+ AV_CODEC_ID_IAC, -+ AV_CODEC_ID_ILBC, -+ AV_CODEC_ID_OPUS, -+ AV_CODEC_ID_COMFORT_NOISE, -+ AV_CODEC_ID_TAK, -+ AV_CODEC_ID_METASOUND, -+ AV_CODEC_ID_PAF_AUDIO, -+ AV_CODEC_ID_ON2AVC, -+ AV_CODEC_ID_DSS_SP, -+ AV_CODEC_ID_CODEC2, -+ AV_CODEC_ID_FFWAVESYNTH, -+ AV_CODEC_ID_SONIC, -+ AV_CODEC_ID_SONIC_LS, -+ AV_CODEC_ID_EVRC, -+ AV_CODEC_ID_SMV, -+ AV_CODEC_ID_DSD_LSBF, -+ AV_CODEC_ID_DSD_MSBF, -+ AV_CODEC_ID_DSD_LSBF_PLANAR, -+ AV_CODEC_ID_DSD_MSBF_PLANAR, -+ AV_CODEC_ID_4GV, -+ AV_CODEC_ID_INTERPLAY_ACM, -+ AV_CODEC_ID_XMA1, -+ AV_CODEC_ID_XMA2, -+ AV_CODEC_ID_DST, -+ AV_CODEC_ID_ATRAC3AL, -+ AV_CODEC_ID_ATRAC3PAL, -+ AV_CODEC_ID_DOLBY_E, -+ AV_CODEC_ID_APTX, -+ AV_CODEC_ID_APTX_HD, -+ AV_CODEC_ID_SBC, -+ AV_CODEC_ID_ATRAC9, -+ AV_CODEC_ID_HCOM, -+ AV_CODEC_ID_ACELP_KELVIN, -+ AV_CODEC_ID_MPEGH_3D_AUDIO, -+ AV_CODEC_ID_SIREN, -+ AV_CODEC_ID_HCA, -+ AV_CODEC_ID_FASTAUDIO, -+ AV_CODEC_ID_MSNSIREN, -+ AV_CODEC_ID_DFPWM, -+ AV_CODEC_ID_BONK, -+ AV_CODEC_ID_MISC4, -+ AV_CODEC_ID_APAC, -+ AV_CODEC_ID_FTR, -+ AV_CODEC_ID_WAVARC, -+ AV_CODEC_ID_RKA, -+ -+ /* subtitle codecs */ -+ AV_CODEC_ID_FIRST_SUBTITLE = -+ 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. -+ AV_CODEC_ID_DVD_SUBTITLE = 0x17000, -+ AV_CODEC_ID_DVB_SUBTITLE, -+ AV_CODEC_ID_TEXT, ///< raw UTF-8 text -+ AV_CODEC_ID_XSUB, -+ AV_CODEC_ID_SSA, -+ AV_CODEC_ID_MOV_TEXT, -+ AV_CODEC_ID_HDMV_PGS_SUBTITLE, -+ AV_CODEC_ID_DVB_TELETEXT, -+ AV_CODEC_ID_SRT, -+ AV_CODEC_ID_MICRODVD, -+ AV_CODEC_ID_EIA_608, -+ AV_CODEC_ID_JACOSUB, -+ AV_CODEC_ID_SAMI, -+ AV_CODEC_ID_REALTEXT, -+ AV_CODEC_ID_STL, -+ AV_CODEC_ID_SUBVIEWER1, -+ AV_CODEC_ID_SUBVIEWER, -+ AV_CODEC_ID_SUBRIP, -+ AV_CODEC_ID_WEBVTT, -+ AV_CODEC_ID_MPL2, -+ AV_CODEC_ID_VPLAYER, -+ AV_CODEC_ID_PJS, -+ AV_CODEC_ID_ASS, -+ AV_CODEC_ID_HDMV_TEXT_SUBTITLE, -+ AV_CODEC_ID_TTML, -+ AV_CODEC_ID_ARIB_CAPTION, -+ -+ /* other specific kind of codecs (generally used for attachments) */ -+ AV_CODEC_ID_FIRST_UNKNOWN = -+ 0x18000, ///< A dummy ID pointing at the start of various fake codecs. -+ AV_CODEC_ID_TTF = 0x18000, -+ -+ AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program -+ ///< stream. -+ AV_CODEC_ID_EPG, -+ AV_CODEC_ID_BINTEXT, -+ AV_CODEC_ID_XBIN, -+ AV_CODEC_ID_IDF, -+ AV_CODEC_ID_OTF, -+ AV_CODEC_ID_SMPTE_KLV, -+ AV_CODEC_ID_DVD_NAV, -+ AV_CODEC_ID_TIMED_ID3, -+ AV_CODEC_ID_BIN_DATA, -+ -+ AV_CODEC_ID_PROBE = -+ 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf -+ ///< should attempt to identify it -+ -+ AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS -+ * stream (only used by libavformat) */ -+ AV_CODEC_ID_MPEG4SYSTEMS = -+ 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems -+ * stream (only used by libavformat) */ -+ AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing -+ ///< only metadata information. -+ AV_CODEC_ID_WRAPPED_AVFRAME = -+ 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket -+ /** -+ * Dummy null video codec, useful mainly for development and debugging. -+ * Null encoder/decoder discard all input and never return any output. -+ */ -+ AV_CODEC_ID_VNULL, -+ /** -+ * Dummy null audio codec, useful mainly for development and debugging. -+ * Null encoder/decoder discard all input and never return any output. -+ */ -+ AV_CODEC_ID_ANULL, -+}; -+ -+/** -+ * Get the type of the given codec. -+ */ -+enum AVMediaType avcodec_get_type(enum AVCodecID codec_id); -+ -+/** -+ * Get the name of a codec. -+ * @return a static string identifying the codec; never NULL -+ */ -+const char* avcodec_get_name(enum AVCodecID id); -+ -+/** -+ * Return codec bits per sample. -+ * -+ * @param[in] codec_id the codec -+ * @return Number of bits per sample or zero if unknown for the given codec. -+ */ -+int av_get_bits_per_sample(enum AVCodecID codec_id); -+ -+/** -+ * Return codec bits per sample. -+ * Only return non-zero if the bits per sample is exactly correct, not an -+ * approximation. -+ * -+ * @param[in] codec_id the codec -+ * @return Number of bits per sample or zero if unknown for the given codec. -+ */ -+int av_get_exact_bits_per_sample(enum AVCodecID codec_id); -+ -+/** -+ * Return a name for the specified profile, if available. -+ * -+ * @param codec_id the ID of the codec to which the requested profile belongs -+ * @param profile the profile value for which a name is requested -+ * @return A name for the profile if found, NULL otherwise. -+ * -+ * @note unlike av_get_profile_name(), which searches a list of profiles -+ * supported by a specific decoder or encoder implementation, this -+ * function searches the list of profiles from the AVCodecDescriptor -+ */ -+const char* avcodec_profile_name(enum AVCodecID codec_id, int profile); -+ -+/** -+ * Return the PCM codec associated with a sample format. -+ * @param be endianness, 0 for little, 1 for big, -+ * -1 (or anything else) for native -+ * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE -+ */ -+enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); -+ -+/** -+ * @} -+ */ -+ -+#endif // AVCODEC_CODEC_ID_H -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/codec_par.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,247 @@ -+/* -+ * Codec parameters public API -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_CODEC_PAR_H -+#define AVCODEC_CODEC_PAR_H -+ -+#include -+ -+#include "libavutil/avutil.h" -+#include "libavutil/channel_layout.h" -+#include "libavutil/rational.h" -+#include "libavutil/pixfmt.h" -+ -+#include "codec_id.h" -+ -+/** -+ * @addtogroup lavc_core -+ * @{ -+ */ -+ -+enum AVFieldOrder { -+ AV_FIELD_UNKNOWN, -+ AV_FIELD_PROGRESSIVE, -+ AV_FIELD_TT, ///< Top coded_first, top displayed first -+ AV_FIELD_BB, ///< Bottom coded first, bottom displayed first -+ AV_FIELD_TB, ///< Top coded first, bottom displayed first -+ AV_FIELD_BT, ///< Bottom coded first, top displayed first -+}; -+ -+/** -+ * This struct describes the properties of an encoded stream. -+ * -+ * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must -+ * be allocated with avcodec_parameters_alloc() and freed with -+ * avcodec_parameters_free(). -+ */ -+typedef struct AVCodecParameters { -+ /** -+ * General type of the encoded data. -+ */ -+ enum AVMediaType codec_type; -+ /** -+ * Specific type of the encoded data (the codec used). -+ */ -+ enum AVCodecID codec_id; -+ /** -+ * Additional information about the codec (corresponds to the AVI FOURCC). -+ */ -+ uint32_t codec_tag; -+ -+ /** -+ * Extra binary data needed for initializing the decoder, codec-dependent. -+ * -+ * Must be allocated with av_malloc() and will be freed by -+ * avcodec_parameters_free(). The allocated size of extradata must be at -+ * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding -+ * bytes zeroed. -+ */ -+ uint8_t* extradata; -+ /** -+ * Size of the extradata content in bytes. -+ */ -+ int extradata_size; -+ -+ /** -+ * - video: the pixel format, the value corresponds to enum AVPixelFormat. -+ * - audio: the sample format, the value corresponds to enum AVSampleFormat. -+ */ -+ int format; -+ -+ /** -+ * The average bitrate of the encoded data (in bits per second). -+ */ -+ int64_t bit_rate; -+ -+ /** -+ * The number of bits per sample in the codedwords. -+ * -+ * This is basically the bitrate per sample. It is mandatory for a bunch of -+ * formats to actually decode them. It's the number of bits for one sample in -+ * the actual coded bitstream. -+ * -+ * This could be for example 4 for ADPCM -+ * For PCM formats this matches bits_per_raw_sample -+ * Can be 0 -+ */ -+ int bits_per_coded_sample; -+ -+ /** -+ * This is the number of valid bits in each output sample. If the -+ * sample format has more bits, the least significant bits are additional -+ * padding bits, which are always 0. Use right shifts to reduce the sample -+ * to its actual size. For example, audio formats with 24 bit samples will -+ * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. -+ * To get the original sample use "(int32_t)sample >> 8"." -+ * -+ * For ADPCM this might be 12 or 16 or similar -+ * Can be 0 -+ */ -+ int bits_per_raw_sample; -+ -+ /** -+ * Codec-specific bitstream restrictions that the stream conforms to. -+ */ -+ int profile; -+ int level; -+ -+ /** -+ * Video only. The dimensions of the video frame in pixels. -+ */ -+ int width; -+ int height; -+ -+ /** -+ * Video only. The aspect ratio (width / height) which a single pixel -+ * should have when displayed. -+ * -+ * When the aspect ratio is unknown / undefined, the numerator should be -+ * set to 0 (the denominator may have any value). -+ */ -+ AVRational sample_aspect_ratio; -+ -+ /** -+ * Video only. The order of the fields in interlaced video. -+ */ -+ enum AVFieldOrder field_order; -+ -+ /** -+ * Video only. Additional colorspace characteristics. -+ */ -+ enum AVColorRange color_range; -+ enum AVColorPrimaries color_primaries; -+ enum AVColorTransferCharacteristic color_trc; -+ enum AVColorSpace color_space; -+ enum AVChromaLocation chroma_location; -+ -+ /** -+ * Video only. Number of delayed frames. -+ */ -+ int video_delay; -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * Audio only. The channel layout bitmask. May be 0 if the channel layout is -+ * unknown or unspecified, otherwise the number of bits set must be equal to -+ * the channels field. -+ * @deprecated use ch_layout -+ */ -+ attribute_deprecated uint64_t channel_layout; -+ /** -+ * Audio only. The number of audio channels. -+ * @deprecated use ch_layout.nb_channels -+ */ -+ attribute_deprecated int channels; -+#endif -+ /** -+ * Audio only. The number of audio samples per second. -+ */ -+ int sample_rate; -+ /** -+ * Audio only. The number of bytes per coded audio frame, required by some -+ * formats. -+ * -+ * Corresponds to nBlockAlign in WAVEFORMATEX. -+ */ -+ int block_align; -+ /** -+ * Audio only. Audio frame size, if known. Required by some formats to be -+ * static. -+ */ -+ int frame_size; -+ -+ /** -+ * Audio only. The amount of padding (in samples) inserted by the encoder at -+ * the beginning of the audio. I.e. this number of leading decoded samples -+ * must be discarded by the caller to get the original audio without leading -+ * padding. -+ */ -+ int initial_padding; -+ /** -+ * Audio only. The amount of padding (in samples) appended by the encoder to -+ * the end of the audio. I.e. this number of decoded samples must be -+ * discarded by the caller from the end of the stream to get the original -+ * audio without any trailing padding. -+ */ -+ int trailing_padding; -+ /** -+ * Audio only. Number of samples to skip after a discontinuity. -+ */ -+ int seek_preroll; -+ -+ /** -+ * Audio only. The channel layout and number of channels. -+ */ -+ AVChannelLayout ch_layout; -+} AVCodecParameters; -+ -+/** -+ * Allocate a new AVCodecParameters and set its fields to default values -+ * (unknown/invalid/0). The returned struct must be freed with -+ * avcodec_parameters_free(). -+ */ -+AVCodecParameters* avcodec_parameters_alloc(void); -+ -+/** -+ * Free an AVCodecParameters instance and everything associated with it and -+ * write NULL to the supplied pointer. -+ */ -+void avcodec_parameters_free(AVCodecParameters** par); -+ -+/** -+ * Copy the contents of src to dst. Any allocated fields in dst are freed and -+ * replaced with newly allocated duplicates of the corresponding fields in src. -+ * -+ * @return >= 0 on success, a negative AVERROR code on failure. -+ */ -+int avcodec_parameters_copy(AVCodecParameters* dst, -+ const AVCodecParameters* src); -+ -+/** -+ * This function is the same as av_get_audio_frame_duration(), except it works -+ * with AVCodecParameters instead of an AVCodecContext. -+ */ -+int av_get_audio_frame_duration2(AVCodecParameters* par, int frame_bytes); -+ -+/** -+ * @} -+ */ -+ -+#endif // AVCODEC_CODEC_PAR_H -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/defs.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,203 @@ -+/* -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_DEFS_H -+#define AVCODEC_DEFS_H -+ -+/** -+ * @file -+ * @ingroup libavc -+ * Misc types and constants that do not belong anywhere else. -+ */ -+ -+#include -+#include -+ -+/** -+ * @ingroup lavc_decoding -+ * Required number of additionally allocated bytes at the end of the input -+ * bitstream for decoding. This is mainly needed because some optimized -+ * bitstream readers read 32 or 64 bit at once and could read over the end.
-+ * Note: If the first 23 bits of the additional bytes are not 0, then damaged -+ * MPEG bitstreams could cause overread and segfault. -+ */ -+#define AV_INPUT_BUFFER_PADDING_SIZE 64 -+ -+/** -+ * Verify checksums embedded in the bitstream (could be of either encoded or -+ * decoded data, depending on the format) and print an error message on -+ * mismatch. If AV_EF_EXPLODE is also set, a mismatching checksum will result in -+ * the decoder/demuxer returning an error. -+ */ -+#define AV_EF_CRCCHECK (1 << 0) -+#define AV_EF_BITSTREAM (1 << 1) ///< detect bitstream specification deviations -+#define AV_EF_BUFFER (1 << 2) ///< detect improper bitstream length -+#define AV_EF_EXPLODE (1 << 3) ///< abort decoding on minor error detection -+ -+#define AV_EF_IGNORE_ERR (1 << 15) ///< ignore errors and continue -+#define AV_EF_CAREFUL \ -+ (1 << 16) ///< consider things that violate the spec, are fast to calculate -+ ///< and have not been seen in the wild as errors -+#define AV_EF_COMPLIANT \ -+ (1 << 17) ///< consider all spec non compliances as errors -+#define AV_EF_AGGRESSIVE \ -+ (1 << 18) ///< consider things that a sane encoder/muxer should not do as an -+ ///< error -+ -+#define FF_COMPLIANCE_VERY_STRICT \ -+ 2 ///< Strictly conform to an older more strict version of the spec or -+ ///< reference software. -+#define FF_COMPLIANCE_STRICT \ -+ 1 ///< Strictly conform to all the things in the spec no matter what -+ ///< consequences. -+#define FF_COMPLIANCE_NORMAL 0 -+#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -+#define FF_COMPLIANCE_EXPERIMENTAL \ -+ -2 ///< Allow nonstandardized experimental things. -+ -+/** -+ * @ingroup lavc_decoding -+ */ -+enum AVDiscard { -+ /* We leave some space between them for extensions (drop some -+ * keyframes for intra-only or drop just some bidir frames). */ -+ AVDISCARD_NONE = -16, ///< discard nothing -+ AVDISCARD_DEFAULT = -+ 0, ///< discard useless packets like 0 size packets in avi -+ AVDISCARD_NONREF = 8, ///< discard all non reference -+ AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames -+ AVDISCARD_NONINTRA = 24, ///< discard all non intra frames -+ AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes -+ AVDISCARD_ALL = 48, ///< discard all -+}; -+ -+enum AVAudioServiceType { -+ AV_AUDIO_SERVICE_TYPE_MAIN = 0, -+ AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, -+ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, -+ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, -+ AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, -+ AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, -+ AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, -+ AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, -+ AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, -+ AV_AUDIO_SERVICE_TYPE_NB, ///< Not part of ABI -+}; -+ -+/** -+ * Pan Scan area. -+ * This specifies the area which should be displayed. -+ * Note there may be multiple such areas for one frame. -+ */ -+typedef struct AVPanScan { -+ /** -+ * id -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int id; -+ -+ /** -+ * width and height in 1/16 pel -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int width; -+ int height; -+ -+ /** -+ * position of the top left corner in 1/16 pel for up to 3 fields/frames -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int16_t position[3][2]; -+} AVPanScan; -+ -+/** -+ * This structure describes the bitrate properties of an encoded bitstream. It -+ * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD -+ * parameters for H.264/HEVC. -+ */ -+typedef struct AVCPBProperties { -+ /** -+ * Maximum bitrate of the stream, in bits per second. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t max_bitrate; -+ /** -+ * Minimum bitrate of the stream, in bits per second. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t min_bitrate; -+ /** -+ * Average bitrate of the stream, in bits per second. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t avg_bitrate; -+ -+ /** -+ * The size of the buffer to which the ratecontrol is applied, in bits. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t buffer_size; -+ -+ /** -+ * The delay between the time the packet this structure is associated with -+ * is received and the time when it should be decoded, in periods of a 27MHz -+ * clock. -+ * -+ * UINT64_MAX when unknown or unspecified. -+ */ -+ uint64_t vbv_delay; -+} AVCPBProperties; -+ -+/** -+ * Allocate a CPB properties structure and initialize its fields to default -+ * values. -+ * -+ * @param size if non-NULL, the size of the allocated struct will be written -+ * here. This is useful for embedding it in side data. -+ * -+ * @return the newly allocated struct or NULL on failure -+ */ -+AVCPBProperties* av_cpb_properties_alloc(size_t* size); -+ -+/** -+ * This structure supplies correlation between a packet timestamp and a wall -+ * clock production time. The definition follows the Producer Reference Time -+ * ('prft') as defined in ISO/IEC 14496-12 -+ */ -+typedef struct AVProducerReferenceTime { -+ /** -+ * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). -+ */ -+ int64_t wallclock; -+ int flags; -+} AVProducerReferenceTime; -+ -+/** -+ * Encode extradata length to a buffer. Used by xiph codecs. -+ * -+ * @param s buffer to write to; must be at least (v/255+1) bytes long -+ * @param v size of extradata in bytes -+ * @return number of bytes written to the buffer. -+ */ -+unsigned int av_xiphlacing(unsigned char* s, unsigned int v); -+ -+#endif // AVCODEC_DEFS_H -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/packet.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,730 @@ -+/* -+ * AVPacket public API -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_PACKET_H -+#define AVCODEC_PACKET_H -+ -+#include -+#include -+ -+#include "libavutil/attributes.h" -+#include "libavutil/buffer.h" -+#include "libavutil/dict.h" -+#include "libavutil/rational.h" -+#include "libavutil/version.h" -+ -+#include "libavcodec/version_major.h" -+ -+/** -+ * @defgroup lavc_packet AVPacket -+ * -+ * Types and functions for working with AVPacket. -+ * @{ -+ */ -+enum AVPacketSideDataType { -+ /** -+ * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE -+ * bytes worth of palette. This side data signals that a new palette is -+ * present. -+ */ -+ AV_PKT_DATA_PALETTE, -+ -+ /** -+ * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format -+ * that the extradata buffer was changed and the receiving side should -+ * act upon it appropriately. The new extradata is embedded in the side -+ * data buffer and should be immediately used for processing the current -+ * frame or packet. -+ */ -+ AV_PKT_DATA_NEW_EXTRADATA, -+ -+ /** -+ * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: -+ * @code -+ * u32le param_flags -+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) -+ * s32le channel_count -+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) -+ * u64le channel_layout -+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) -+ * s32le sample_rate -+ * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) -+ * s32le width -+ * s32le height -+ * @endcode -+ */ -+ AV_PKT_DATA_PARAM_CHANGE, -+ -+ /** -+ * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of -+ * structures with info about macroblocks relevant to splitting the -+ * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). -+ * That is, it does not necessarily contain info about all macroblocks, -+ * as long as the distance between macroblocks in the info is smaller -+ * than the target payload size. -+ * Each MB info structure is 12 bytes, and is laid out as follows: -+ * @code -+ * u32le bit offset from the start of the packet -+ * u8 current quantizer at the start of the macroblock -+ * u8 GOB number -+ * u16le macroblock address within the GOB -+ * u8 horizontal MV predictor -+ * u8 vertical MV predictor -+ * u8 horizontal MV predictor for block number 3 -+ * u8 vertical MV predictor for block number 3 -+ * @endcode -+ */ -+ AV_PKT_DATA_H263_MB_INFO, -+ -+ /** -+ * This side data should be associated with an audio stream and contains -+ * ReplayGain information in form of the AVReplayGain struct. -+ */ -+ AV_PKT_DATA_REPLAYGAIN, -+ -+ /** -+ * This side data contains a 3x3 transformation matrix describing an affine -+ * transformation that needs to be applied to the decoded video frames for -+ * correct presentation. -+ * -+ * See libavutil/display.h for a detailed description of the data. -+ */ -+ AV_PKT_DATA_DISPLAYMATRIX, -+ -+ /** -+ * This side data should be associated with a video stream and contains -+ * Stereoscopic 3D information in form of the AVStereo3D struct. -+ */ -+ AV_PKT_DATA_STEREO3D, -+ -+ /** -+ * This side data should be associated with an audio stream and corresponds -+ * to enum AVAudioServiceType. -+ */ -+ AV_PKT_DATA_AUDIO_SERVICE_TYPE, -+ -+ /** -+ * This side data contains quality related information from the encoder. -+ * @code -+ * u32le quality factor of the compressed frame. Allowed range is between 1 -+ * (good) and FF_LAMBDA_MAX (bad). u8 picture type u8 error count u16 -+ * reserved u64le[error count] sum of squared differences between encoder in -+ * and output -+ * @endcode -+ */ -+ AV_PKT_DATA_QUALITY_STATS, -+ -+ /** -+ * This side data contains an integer value representing the stream index -+ * of a "fallback" track. A fallback track indicates an alternate -+ * track to use when the current track can not be decoded for some reason. -+ * e.g. no decoder available for codec. -+ */ -+ AV_PKT_DATA_FALLBACK_TRACK, -+ -+ /** -+ * This side data corresponds to the AVCPBProperties struct. -+ */ -+ AV_PKT_DATA_CPB_PROPERTIES, -+ -+ /** -+ * Recommmends skipping the specified number of samples -+ * @code -+ * u32le number of samples to skip from start of this packet -+ * u32le number of samples to skip from end of this packet -+ * u8 reason for start skip -+ * u8 reason for end skip (0=padding silence, 1=convergence) -+ * @endcode -+ */ -+ AV_PKT_DATA_SKIP_SAMPLES, -+ -+ /** -+ * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that -+ * the packet may contain "dual mono" audio specific to Japanese DTV -+ * and if it is true, recommends only the selected channel to be used. -+ * @code -+ * u8 selected channels (0=main/left, 1=sub/right, 2=both) -+ * @endcode -+ */ -+ AV_PKT_DATA_JP_DUALMONO, -+ -+ /** -+ * A list of zero terminated key/value strings. There is no end marker for -+ * the list, so it is required to rely on the side data size to stop. -+ */ -+ AV_PKT_DATA_STRINGS_METADATA, -+ -+ /** -+ * Subtitle event position -+ * @code -+ * u32le x1 -+ * u32le y1 -+ * u32le x2 -+ * u32le y2 -+ * @endcode -+ */ -+ AV_PKT_DATA_SUBTITLE_POSITION, -+ -+ /** -+ * Data found in BlockAdditional element of matroska container. There is -+ * no end marker for the data, so it is required to rely on the side data -+ * size to recognize the end. 8 byte id (as found in BlockAddId) followed -+ * by data. -+ */ -+ AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, -+ -+ /** -+ * The optional first identifier line of a WebVTT cue. -+ */ -+ AV_PKT_DATA_WEBVTT_IDENTIFIER, -+ -+ /** -+ * The optional settings (rendering instructions) that immediately -+ * follow the timestamp specifier of a WebVTT cue. -+ */ -+ AV_PKT_DATA_WEBVTT_SETTINGS, -+ -+ /** -+ * A list of zero terminated key/value strings. There is no end marker for -+ * the list, so it is required to rely on the side data size to stop. This -+ * side data includes updated metadata which appeared in the stream. -+ */ -+ AV_PKT_DATA_METADATA_UPDATE, -+ -+ /** -+ * MPEGTS stream ID as uint8_t, this is required to pass the stream ID -+ * information from the demuxer to the corresponding muxer. -+ */ -+ AV_PKT_DATA_MPEGTS_STREAM_ID, -+ -+ /** -+ * Mastering display metadata (based on SMPTE-2086:2014). This metadata -+ * should be associated with a video stream and contains data in the form -+ * of the AVMasteringDisplayMetadata struct. -+ */ -+ AV_PKT_DATA_MASTERING_DISPLAY_METADATA, -+ -+ /** -+ * This side data should be associated with a video stream and corresponds -+ * to the AVSphericalMapping structure. -+ */ -+ AV_PKT_DATA_SPHERICAL, -+ -+ /** -+ * Content light level (based on CTA-861.3). This metadata should be -+ * associated with a video stream and contains data in the form of the -+ * AVContentLightMetadata struct. -+ */ -+ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, -+ -+ /** -+ * ATSC A53 Part 4 Closed Captions. This metadata should be associated with -+ * a video stream. A53 CC bitstream is stored as uint8_t in -+ * AVPacketSideData.data. The number of bytes of CC data is -+ * AVPacketSideData.size. -+ */ -+ AV_PKT_DATA_A53_CC, -+ -+ /** -+ * This side data is encryption initialization data. -+ * The format is not part of ABI, use av_encryption_init_info_* methods to -+ * access. -+ */ -+ AV_PKT_DATA_ENCRYPTION_INIT_INFO, -+ -+ /** -+ * This side data contains encryption info for how to decrypt the packet. -+ * The format is not part of ABI, use av_encryption_info_* methods to access. -+ */ -+ AV_PKT_DATA_ENCRYPTION_INFO, -+ -+ /** -+ * Active Format Description data consisting of a single byte as specified -+ * in ETSI TS 101 154 using AVActiveFormatDescription enum. -+ */ -+ AV_PKT_DATA_AFD, -+ -+ /** -+ * Producer Reference Time data corresponding to the AVProducerReferenceTime -+ * struct, usually exported by some encoders (on demand through the prft flag -+ * set in the AVCodecContext export_side_data field). -+ */ -+ AV_PKT_DATA_PRFT, -+ -+ /** -+ * ICC profile data consisting of an opaque octet buffer following the -+ * format described by ISO 15076-1. -+ */ -+ AV_PKT_DATA_ICC_PROFILE, -+ -+ /** -+ * DOVI configuration -+ * ref: -+ * dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2, -+ * section 2.2 -+ * dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2, -+ * section 3.3 Tags are stored in struct AVDOVIDecoderConfigurationRecord. -+ */ -+ AV_PKT_DATA_DOVI_CONF, -+ -+ /** -+ * Timecode which conforms to SMPTE ST 12-1:2014. The data is an array of 4 -+ * uint32_t where the first uint32_t describes how many (1-3) of the other -+ * timecodes are used. The timecode format is described in the documentation -+ * of av_timecode_get_smpte_from_framenum() function in libavutil/timecode.h. -+ */ -+ AV_PKT_DATA_S12M_TIMECODE, -+ -+ /** -+ * HDR10+ dynamic metadata associated with a video frame. The metadata is in -+ * the form of the AVDynamicHDRPlus struct and contains -+ * information for color volume transform - application 4 of -+ * SMPTE 2094-40:2016 standard. -+ */ -+ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, -+ -+ /** -+ * The number of side data types. -+ * This is not part of the public API/ABI in the sense that it may -+ * change when new side data types are added. -+ * This must stay the last enum value. -+ * If its value becomes huge, some code using it -+ * needs to be updated as it assumes it to be smaller than other limits. -+ */ -+ AV_PKT_DATA_NB -+}; -+ -+#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS // DEPRECATED -+ -+typedef struct AVPacketSideData { -+ uint8_t* data; -+ size_t size; -+ enum AVPacketSideDataType type; -+} AVPacketSideData; -+ -+/** -+ * This structure stores compressed data. It is typically exported by demuxers -+ * and then passed as input to decoders, or received as output from encoders and -+ * then passed to muxers. -+ * -+ * For video, it should typically contain one compressed frame. For audio it may -+ * contain several compressed frames. Encoders are allowed to output empty -+ * packets, with no compressed data, containing only side data -+ * (e.g. to update some stream parameters at the end of encoding). -+ * -+ * The semantics of data ownership depends on the buf field. -+ * If it is set, the packet data is dynamically allocated and is -+ * valid indefinitely until a call to av_packet_unref() reduces the -+ * reference count to 0. -+ * -+ * If the buf field is not set av_packet_ref() would make a copy instead -+ * of increasing the reference count. -+ * -+ * The side data is always allocated with av_malloc(), copied by -+ * av_packet_ref() and freed by av_packet_unref(). -+ * -+ * sizeof(AVPacket) being a part of the public ABI is deprecated. once -+ * av_init_packet() is removed, new packets will only be able to be allocated -+ * with av_packet_alloc(), and new fields may be added to the end of the struct -+ * with a minor bump. -+ * -+ * @see av_packet_alloc -+ * @see av_packet_ref -+ * @see av_packet_unref -+ */ -+typedef struct AVPacket { -+ /** -+ * A reference to the reference-counted buffer where the packet data is -+ * stored. -+ * May be NULL, then the packet data is not reference-counted. -+ */ -+ AVBufferRef* buf; -+ /** -+ * Presentation timestamp in AVStream->time_base units; the time at which -+ * the decompressed packet will be presented to the user. -+ * Can be AV_NOPTS_VALUE if it is not stored in the file. -+ * pts MUST be larger or equal to dts as presentation cannot happen before -+ * decompression, unless one wants to view hex dumps. Some formats misuse -+ * the terms dts and pts/cts to mean something different. Such timestamps -+ * must be converted to true pts/dts before they are stored in AVPacket. -+ */ -+ int64_t pts; -+ /** -+ * Decompression timestamp in AVStream->time_base units; the time at which -+ * the packet is decompressed. -+ * Can be AV_NOPTS_VALUE if it is not stored in the file. -+ */ -+ int64_t dts; -+ uint8_t* data; -+ int size; -+ int stream_index; -+ /** -+ * A combination of AV_PKT_FLAG values -+ */ -+ int flags; -+ /** -+ * Additional packet data that can be provided by the container. -+ * Packet can contain several types of side information. -+ */ -+ AVPacketSideData* side_data; -+ int side_data_elems; -+ -+ /** -+ * Duration of this packet in AVStream->time_base units, 0 if unknown. -+ * Equals next_pts - this_pts in presentation order. -+ */ -+ int64_t duration; -+ -+ int64_t pos; ///< byte position in stream, -1 if unknown -+ -+ /** -+ * for some private data of the user -+ */ -+ void* opaque; -+ -+ /** -+ * AVBufferRef for free use by the API user. FFmpeg will never check the -+ * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when -+ * the packet is unreferenced. av_packet_copy_props() calls create a new -+ * reference with av_buffer_ref() for the target packet's opaque_ref field. -+ * -+ * This is unrelated to the opaque field, although it serves a similar -+ * purpose. -+ */ -+ AVBufferRef* opaque_ref; -+ -+ /** -+ * Time base of the packet's timestamps. -+ * In the future, this field may be set on packets output by encoders or -+ * demuxers, but its value will be by default ignored on input to decoders -+ * or muxers. -+ */ -+ AVRational time_base; -+} AVPacket; -+ -+#if FF_API_INIT_PACKET -+attribute_deprecated typedef struct AVPacketList { -+ AVPacket pkt; -+ struct AVPacketList* next; -+} AVPacketList; -+#endif -+ -+#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe -+#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted -+/** -+ * Flag is used to discard packets which are required to maintain valid -+ * decoder state but are not required for output and should be dropped -+ * after decoding. -+ **/ -+#define AV_PKT_FLAG_DISCARD 0x0004 -+/** -+ * The packet comes from a trusted source. -+ * -+ * Otherwise-unsafe constructs such as arbitrary pointers to data -+ * outside the packet may be followed. -+ */ -+#define AV_PKT_FLAG_TRUSTED 0x0008 -+/** -+ * Flag is used to indicate packets that contain frames that can -+ * be discarded by the decoder. I.e. Non-reference frames. -+ */ -+#define AV_PKT_FLAG_DISPOSABLE 0x0010 -+ -+enum AVSideDataParamChangeFlags { -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * @deprecated those are not used by any decoder -+ */ -+ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, -+ AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, -+#endif -+ AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, -+ AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, -+}; -+ -+/** -+ * Allocate an AVPacket and set its fields to default values. The resulting -+ * struct must be freed using av_packet_free(). -+ * -+ * @return An AVPacket filled with default values or NULL on failure. -+ * -+ * @note this only allocates the AVPacket itself, not the data buffers. Those -+ * must be allocated through other means such as av_new_packet. -+ * -+ * @see av_new_packet -+ */ -+AVPacket* av_packet_alloc(void); -+ -+/** -+ * Create a new packet that references the same data as src. -+ * -+ * This is a shortcut for av_packet_alloc()+av_packet_ref(). -+ * -+ * @return newly created AVPacket on success, NULL on error. -+ * -+ * @see av_packet_alloc -+ * @see av_packet_ref -+ */ -+AVPacket* av_packet_clone(const AVPacket* src); -+ -+/** -+ * Free the packet, if the packet is reference counted, it will be -+ * unreferenced first. -+ * -+ * @param pkt packet to be freed. The pointer will be set to NULL. -+ * @note passing NULL is a no-op. -+ */ -+void av_packet_free(AVPacket** pkt); -+ -+#if FF_API_INIT_PACKET -+/** -+ * Initialize optional fields of a packet with default values. -+ * -+ * Note, this does not touch the data and size members, which have to be -+ * initialized separately. -+ * -+ * @param pkt packet -+ * -+ * @see av_packet_alloc -+ * @see av_packet_unref -+ * -+ * @deprecated This function is deprecated. Once it's removed, -+ sizeof(AVPacket) will not be a part of the ABI anymore. -+ */ -+attribute_deprecated void av_init_packet(AVPacket* pkt); -+#endif -+ -+/** -+ * Allocate the payload of a packet and initialize its fields with -+ * default values. -+ * -+ * @param pkt packet -+ * @param size wanted payload size -+ * @return 0 if OK, AVERROR_xxx otherwise -+ */ -+int av_new_packet(AVPacket* pkt, int size); -+ -+/** -+ * Reduce packet size, correctly zeroing padding -+ * -+ * @param pkt packet -+ * @param size new size -+ */ -+void av_shrink_packet(AVPacket* pkt, int size); -+ -+/** -+ * Increase packet size, correctly zeroing padding -+ * -+ * @param pkt packet -+ * @param grow_by number of bytes by which to increase the size of the packet -+ */ -+int av_grow_packet(AVPacket* pkt, int grow_by); -+ -+/** -+ * Initialize a reference-counted packet from av_malloc()ed data. -+ * -+ * @param pkt packet to be initialized. This function will set the data, size, -+ * and buf fields, all others are left untouched. -+ * @param data Data allocated by av_malloc() to be used as packet data. If this -+ * function returns successfully, the data is owned by the underlying -+ * AVBuffer. The caller may not access the data through other means. -+ * @param size size of data in bytes, without the padding. I.e. the full buffer -+ * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. -+ * -+ * @return 0 on success, a negative AVERROR on error -+ */ -+int av_packet_from_data(AVPacket* pkt, uint8_t* data, int size); -+ -+/** -+ * Allocate new information of a packet. -+ * -+ * @param pkt packet -+ * @param type side information type -+ * @param size side information size -+ * @return pointer to fresh allocated data or NULL otherwise -+ */ -+uint8_t* av_packet_new_side_data(AVPacket* pkt, enum AVPacketSideDataType type, -+ size_t size); -+ -+/** -+ * Wrap an existing array as a packet side data. -+ * -+ * @param pkt packet -+ * @param type side information type -+ * @param data the side data array. It must be allocated with the av_malloc() -+ * family of functions. The ownership of the data is transferred to -+ * pkt. -+ * @param size side information size -+ * @return a non-negative number on success, a negative AVERROR code on -+ * failure. On failure, the packet is unchanged and the data remains -+ * owned by the caller. -+ */ -+int av_packet_add_side_data(AVPacket* pkt, enum AVPacketSideDataType type, -+ uint8_t* data, size_t size); -+ -+/** -+ * Shrink the already allocated side data buffer -+ * -+ * @param pkt packet -+ * @param type side information type -+ * @param size new side information size -+ * @return 0 on success, < 0 on failure -+ */ -+int av_packet_shrink_side_data(AVPacket* pkt, enum AVPacketSideDataType type, -+ size_t size); -+ -+/** -+ * Get side information from packet. -+ * -+ * @param pkt packet -+ * @param type desired side information type -+ * @param size If supplied, *size will be set to the size of the side data -+ * or to zero if the desired side data is not present. -+ * @return pointer to data if present or NULL otherwise -+ */ -+uint8_t* av_packet_get_side_data(const AVPacket* pkt, -+ enum AVPacketSideDataType type, size_t* size); -+ -+const char* av_packet_side_data_name(enum AVPacketSideDataType type); -+ -+/** -+ * Pack a dictionary for use in side_data. -+ * -+ * @param dict The dictionary to pack. -+ * @param size pointer to store the size of the returned data -+ * @return pointer to data if successful, NULL otherwise -+ */ -+uint8_t* av_packet_pack_dictionary(AVDictionary* dict, size_t* size); -+/** -+ * Unpack a dictionary from side_data. -+ * -+ * @param data data from side_data -+ * @param size size of the data -+ * @param dict the metadata storage dictionary -+ * @return 0 on success, < 0 on failure -+ */ -+int av_packet_unpack_dictionary(const uint8_t* data, size_t size, -+ AVDictionary** dict); -+ -+/** -+ * Convenience function to free all the side data stored. -+ * All the other fields stay untouched. -+ * -+ * @param pkt packet -+ */ -+void av_packet_free_side_data(AVPacket* pkt); -+ -+/** -+ * Setup a new reference to the data described by a given packet -+ * -+ * If src is reference-counted, setup dst as a new reference to the -+ * buffer in src. Otherwise allocate a new buffer in dst and copy the -+ * data from src into it. -+ * -+ * All the other fields are copied from src. -+ * -+ * @see av_packet_unref -+ * -+ * @param dst Destination packet. Will be completely overwritten. -+ * @param src Source packet -+ * -+ * @return 0 on success, a negative AVERROR on error. On error, dst -+ * will be blank (as if returned by av_packet_alloc()). -+ */ -+int av_packet_ref(AVPacket* dst, const AVPacket* src); -+ -+/** -+ * Wipe the packet. -+ * -+ * Unreference the buffer referenced by the packet and reset the -+ * remaining packet fields to their default values. -+ * -+ * @param pkt The packet to be unreferenced. -+ */ -+void av_packet_unref(AVPacket* pkt); -+ -+/** -+ * Move every field in src to dst and reset src. -+ * -+ * @see av_packet_unref -+ * -+ * @param src Source packet, will be reset -+ * @param dst Destination packet -+ */ -+void av_packet_move_ref(AVPacket* dst, AVPacket* src); -+ -+/** -+ * Copy only "properties" fields from src to dst. -+ * -+ * Properties for the purpose of this function are all the fields -+ * beside those related to the packet data (buf, data, size) -+ * -+ * @param dst Destination packet -+ * @param src Source packet -+ * -+ * @return 0 on success AVERROR on failure. -+ */ -+int av_packet_copy_props(AVPacket* dst, const AVPacket* src); -+ -+/** -+ * Ensure the data described by a given packet is reference counted. -+ * -+ * @note This function does not ensure that the reference will be writable. -+ * Use av_packet_make_writable instead for that purpose. -+ * -+ * @see av_packet_ref -+ * @see av_packet_make_writable -+ * -+ * @param pkt packet whose data should be made reference counted. -+ * -+ * @return 0 on success, a negative AVERROR on error. On failure, the -+ * packet is unchanged. -+ */ -+int av_packet_make_refcounted(AVPacket* pkt); -+ -+/** -+ * Create a writable reference for the data described by a given packet, -+ * avoiding data copy if possible. -+ * -+ * @param pkt Packet whose data should be made writable. -+ * -+ * @return 0 on success, a negative AVERROR on failure. On failure, the -+ * packet is unchanged. -+ */ -+int av_packet_make_writable(AVPacket* pkt); -+ -+/** -+ * Convert valid timing fields (timestamps / durations) in a packet from one -+ * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be -+ * ignored. -+ * -+ * @param pkt packet on which the conversion will be performed -+ * @param tb_src source timebase, in which the timing fields in pkt are -+ * expressed -+ * @param tb_dst destination timebase, to which the timing fields will be -+ * converted -+ */ -+void av_packet_rescale_ts(AVPacket* pkt, AVRational tb_src, AVRational tb_dst); -+ -+/** -+ * @} -+ */ -+ -+#endif // AVCODEC_PACKET_H -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/vdpau.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,156 @@ -+/* -+ * The Video Decode and Presentation API for UNIX (VDPAU) is used for -+ * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1. -+ * -+ * Copyright (C) 2008 NVIDIA -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_VDPAU_H -+#define AVCODEC_VDPAU_H -+ -+/** -+ * @file -+ * @ingroup lavc_codec_hwaccel_vdpau -+ * Public libavcodec VDPAU header. -+ */ -+ -+/** -+ * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer -+ * @ingroup lavc_codec_hwaccel -+ * -+ * VDPAU hardware acceleration has two modules -+ * - VDPAU decoding -+ * - VDPAU presentation -+ * -+ * The VDPAU decoding module parses all headers using FFmpeg -+ * parsing mechanisms and uses VDPAU for the actual decoding. -+ * -+ * As per the current implementation, the actual decoding -+ * and rendering (API calls) are done as part of the VDPAU -+ * presentation (vo_vdpau.c) module. -+ * -+ * @{ -+ */ -+ -+#include -+ -+#include "libavutil/avconfig.h" -+#include "libavutil/attributes.h" -+ -+#include "avcodec.h" -+ -+struct AVCodecContext; -+struct AVFrame; -+ -+typedef int (*AVVDPAU_Render2)(struct AVCodecContext*, struct AVFrame*, -+ const VdpPictureInfo*, uint32_t, -+ const VdpBitstreamBuffer*); -+ -+/** -+ * This structure is used to share data between the libavcodec library and -+ * the client video application. -+ * The user shall allocate the structure via the av_alloc_vdpau_hwaccel -+ * function and make it available as -+ * AVCodecContext.hwaccel_context. Members can be set by the user once -+ * during initialization or through each AVCodecContext.get_buffer() -+ * function call. In any case, they must be valid prior to calling -+ * decoding functions. -+ * -+ * The size of this structure is not a part of the public ABI and must not -+ * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an -+ * AVVDPAUContext. -+ */ -+typedef struct AVVDPAUContext { -+ /** -+ * VDPAU decoder handle -+ * -+ * Set by user. -+ */ -+ VdpDecoder decoder; -+ -+ /** -+ * VDPAU decoder render callback -+ * -+ * Set by the user. -+ */ -+ VdpDecoderRender* render; -+ -+ AVVDPAU_Render2 render2; -+} AVVDPAUContext; -+ -+/** -+ * @brief allocation function for AVVDPAUContext -+ * -+ * Allows extending the struct without breaking API/ABI -+ */ -+AVVDPAUContext* av_alloc_vdpaucontext(void); -+ -+AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext*); -+void av_vdpau_hwaccel_set_render2(AVVDPAUContext*, AVVDPAU_Render2); -+ -+/** -+ * Associate a VDPAU device with a codec context for hardware acceleration. -+ * This function is meant to be called from the get_format() codec callback, -+ * or earlier. It can also be called after avcodec_flush_buffers() to change -+ * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent -+ * display preemption). -+ * -+ * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes -+ * successfully. -+ * -+ * @param avctx decoding context whose get_format() callback is invoked -+ * @param device VDPAU device handle to use for hardware acceleration -+ * @param get_proc_address VDPAU device driver -+ * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags -+ * -+ * @return 0 on success, an AVERROR code on failure. -+ */ -+int av_vdpau_bind_context(AVCodecContext* avctx, VdpDevice device, -+ VdpGetProcAddress* get_proc_address, unsigned flags); -+ -+/** -+ * Gets the parameters to create an adequate VDPAU video surface for the codec -+ * context using VDPAU hardware decoding acceleration. -+ * -+ * @note Behavior is undefined if the context was not successfully bound to a -+ * VDPAU device using av_vdpau_bind_context(). -+ * -+ * @param avctx the codec context being used for decoding the stream -+ * @param type storage space for the VDPAU video surface chroma type -+ * (or NULL to ignore) -+ * @param width storage space for the VDPAU video surface pixel width -+ * (or NULL to ignore) -+ * @param height storage space for the VDPAU video surface pixel height -+ * (or NULL to ignore) -+ * -+ * @return 0 on success, a negative AVERROR code on failure. -+ */ -+int av_vdpau_get_surface_parameters(AVCodecContext* avctx, VdpChromaType* type, -+ uint32_t* width, uint32_t* height); -+ -+/** -+ * Allocate an AVVDPAUContext. -+ * -+ * @return Newly-allocated AVVDPAUContext or NULL on failure. -+ */ -+AVVDPAUContext* av_vdpau_alloc_context(void); -+ -+/** @} */ -+ -+#endif /* AVCODEC_VDPAU_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,45 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVCODEC_VERSION_H -+#define AVCODEC_VERSION_H -+ -+/** -+ * @file -+ * @ingroup libavc -+ * Libavcodec version macros. -+ */ -+ -+#include "libavutil/version.h" -+ -+#include "version_major.h" -+ -+#define LIBAVCODEC_VERSION_MINOR 5 -+#define LIBAVCODEC_VERSION_MICRO 100 -+ -+#define LIBAVCODEC_VERSION_INT \ -+ AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, \ -+ LIBAVCODEC_VERSION_MICRO) -+#define LIBAVCODEC_VERSION \ -+ AV_VERSION(LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, \ -+ LIBAVCODEC_VERSION_MICRO) -+#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT -+ -+#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) -+ -+#endif /* AVCODEC_VERSION_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavcodec/version_major.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVCODEC_VERSION_MAJOR_H -+#define AVCODEC_VERSION_MAJOR_H -+ -+/** -+ * @file -+ * @ingroup libavc -+ * Libavcodec version macros. -+ */ -+ -+#define LIBAVCODEC_VERSION_MAJOR 60 -+ -+/** -+ * FF_API_* defines may be placed below to indicate public API that will be -+ * dropped at a future version bump. The defines themselves are not part of -+ * the public API and may change, break or disappear at any time. -+ * -+ * @note, when bumping the major version it is recommended to manually -+ * disable each FF_API_* in its own commit instead of disabling them all -+ * at once through the bump. This improves the git bisect-ability of the change. -+ */ -+ -+#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_IDCT_NONE (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_AYUV_CODECID (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_VT_OUTPUT_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61) -+ -+// reminder to remove CrystalHD decoders on next major bump -+#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61) -+ -+#endif /* AVCODEC_VERSION_MAJOR_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/attributes.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,173 @@ -+/* -+ * copyright (c) 2006 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * Macro definitions for various function/variable attributes -+ */ -+ -+#ifndef AVUTIL_ATTRIBUTES_H -+#define AVUTIL_ATTRIBUTES_H -+ -+#ifdef __GNUC__ -+# define AV_GCC_VERSION_AT_LEAST(x, y) \ -+ (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) -+# define AV_GCC_VERSION_AT_MOST(x, y) \ -+ (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) -+#else -+# define AV_GCC_VERSION_AT_LEAST(x, y) 0 -+# define AV_GCC_VERSION_AT_MOST(x, y) 0 -+#endif -+ -+#ifdef __has_builtin -+# define AV_HAS_BUILTIN(x) __has_builtin(x) -+#else -+# define AV_HAS_BUILTIN(x) 0 -+#endif -+ -+#ifndef av_always_inline -+# if AV_GCC_VERSION_AT_LEAST(3, 1) -+# define av_always_inline __attribute__((always_inline)) inline -+# elif defined(_MSC_VER) -+# define av_always_inline __forceinline -+# else -+# define av_always_inline inline -+# endif -+#endif -+ -+#ifndef av_extern_inline -+# if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) -+# define av_extern_inline extern inline -+# else -+# define av_extern_inline inline -+# endif -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(3, 4) -+# define av_warn_unused_result __attribute__((warn_unused_result)) -+#else -+# define av_warn_unused_result -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(3, 1) -+# define av_noinline __attribute__((noinline)) -+#elif defined(_MSC_VER) -+# define av_noinline __declspec(noinline) -+#else -+# define av_noinline -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(3, 1) || defined(__clang__) -+# define av_pure __attribute__((pure)) -+#else -+# define av_pure -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(2, 6) || defined(__clang__) -+# define av_const __attribute__((const)) -+#else -+# define av_const -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(4, 3) || defined(__clang__) -+# define av_cold __attribute__((cold)) -+#else -+# define av_cold -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(4, 1) && !defined(__llvm__) -+# define av_flatten __attribute__((flatten)) -+#else -+# define av_flatten -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(3, 1) -+# define attribute_deprecated __attribute__((deprecated)) -+#elif defined(_MSC_VER) -+# define attribute_deprecated __declspec(deprecated) -+#else -+# define attribute_deprecated -+#endif -+ -+/** -+ * Disable warnings about deprecated features -+ * This is useful for sections of code kept for backward compatibility and -+ * scheduled for removal. -+ */ -+#ifndef AV_NOWARN_DEPRECATED -+# if AV_GCC_VERSION_AT_LEAST(4, 6) || defined(__clang__) -+# define AV_NOWARN_DEPRECATED(code) \ -+ _Pragma("GCC diagnostic push") \ -+ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ -+ code _Pragma("GCC diagnostic pop") -+# elif defined(_MSC_VER) -+# define AV_NOWARN_DEPRECATED(code) \ -+ __pragma(warning(push)) __pragma(warning(disable : 4996)) code; \ -+ __pragma(warning(pop)) -+# else -+# define AV_NOWARN_DEPRECATED(code) code -+# endif -+#endif -+ -+#if defined(__GNUC__) || defined(__clang__) -+# define av_unused __attribute__((unused)) -+#else -+# define av_unused -+#endif -+ -+/** -+ * Mark a variable as used and prevent the compiler from optimizing it -+ * away. This is useful for variables accessed only from inline -+ * assembler without the compiler being aware. -+ */ -+#if AV_GCC_VERSION_AT_LEAST(3, 1) || defined(__clang__) -+# define av_used __attribute__((used)) -+#else -+# define av_used -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(3, 3) || defined(__clang__) -+# define av_alias __attribute__((may_alias)) -+#else -+# define av_alias -+#endif -+ -+#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) -+# define av_uninit(x) x = x -+#else -+# define av_uninit(x) x -+#endif -+ -+#if defined(__GNUC__) || defined(__clang__) -+# define av_builtin_constant_p __builtin_constant_p -+# define av_printf_format(fmtpos, attrpos) \ -+ __attribute__((__format__(__printf__, fmtpos, attrpos))) -+#else -+# define av_builtin_constant_p(x) 0 -+# define av_printf_format(fmtpos, attrpos) -+#endif -+ -+#if AV_GCC_VERSION_AT_LEAST(2, 5) || defined(__clang__) -+# define av_noreturn __attribute__((noreturn)) -+#else -+# define av_noreturn -+#endif -+ -+#endif /* AVUTIL_ATTRIBUTES_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avconfig.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,6 @@ -+/* Generated by ffmpeg configure */ -+#ifndef AVUTIL_AVCONFIG_H -+#define AVUTIL_AVCONFIG_H -+#define AV_HAVE_BIGENDIAN 0 -+#define AV_HAVE_FAST_UNALIGNED 1 -+#endif /* AVUTIL_AVCONFIG_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/avutil.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,371 @@ -+/* -+ * copyright (c) 2006 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+#ifndef AVUTIL_AVUTIL_H -+#define AVUTIL_AVUTIL_H -+ -+/** -+ * @file -+ * @ingroup lavu -+ * Convenience header that includes @ref lavu "libavutil"'s core. -+ */ -+ -+/** -+ * @mainpage -+ * -+ * @section ffmpeg_intro Introduction -+ * -+ * This document describes the usage of the different libraries -+ * provided by FFmpeg. -+ * -+ * @li @ref libavc "libavcodec" encoding/decoding library -+ * @li @ref lavfi "libavfilter" graph-based frame editing library -+ * @li @ref libavf "libavformat" I/O and muxing/demuxing library -+ * @li @ref lavd "libavdevice" special devices muxing/demuxing library -+ * @li @ref lavu "libavutil" common utility library -+ * @li @ref lswr "libswresample" audio resampling, format conversion and mixing -+ * @li @ref lpp "libpostproc" post processing library -+ * @li @ref libsws "libswscale" color conversion and scaling library -+ * -+ * @section ffmpeg_versioning Versioning and compatibility -+ * -+ * Each of the FFmpeg libraries contains a version.h header, which defines a -+ * major, minor and micro version number with the -+ * LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO} macros. The major version -+ * number is incremented with backward incompatible changes - e.g. removing -+ * parts of the public API, reordering public struct members, etc. The minor -+ * version number is incremented for backward compatible API changes or major -+ * new features - e.g. adding a new public function or a new decoder. The micro -+ * version number is incremented for smaller changes that a calling program -+ * might still want to check for - e.g. changing behavior in a previously -+ * unspecified situation. -+ * -+ * FFmpeg guarantees backward API and ABI compatibility for each library as long -+ * as its major version number is unchanged. This means that no public symbols -+ * will be removed or renamed. Types and names of the public struct members and -+ * values of public macros and enums will remain the same (unless they were -+ * explicitly declared as not part of the public API). Documented behavior will -+ * not change. -+ * -+ * In other words, any correct program that works with a given FFmpeg snapshot -+ * should work just as well without any changes with any later snapshot with the -+ * same major versions. This applies to both rebuilding the program against new -+ * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program -+ * links against. -+ * -+ * However, new public symbols may be added and new members may be appended to -+ * public structs whose size is not part of public ABI (most public structs in -+ * FFmpeg). New macros and enum values may be added. Behavior in undocumented -+ * situations may change slightly (and be documented). All those are accompanied -+ * by an entry in doc/APIchanges and incrementing either the minor or micro -+ * version number. -+ */ -+ -+/** -+ * @defgroup lavu libavutil -+ * Common code shared across all FFmpeg libraries. -+ * -+ * @note -+ * libavutil is designed to be modular. In most cases, in order to use the -+ * functions provided by one component of libavutil you must explicitly include -+ * the specific header containing that feature. If you are only using -+ * media-related components, you could simply include libavutil/avutil.h, which -+ * brings in most of the "core" components. -+ * -+ * @{ -+ * -+ * @defgroup lavu_crypto Crypto and Hashing -+ * -+ * @{ -+ * @} -+ * -+ * @defgroup lavu_math Mathematics -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_string String Manipulation -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_mem Memory Management -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_data Data Structures -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_video Video related -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_audio Audio related -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_error Error Codes -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_log Logging Facility -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup lavu_misc Other -+ * -+ * @{ -+ * -+ * @defgroup preproc_misc Preprocessor String Macros -+ * -+ * @{ -+ * -+ * @} -+ * -+ * @defgroup version_utils Library Version Macros -+ * -+ * @{ -+ * -+ * @} -+ */ -+ -+/** -+ * @addtogroup lavu_ver -+ * @{ -+ */ -+ -+/** -+ * Return the LIBAVUTIL_VERSION_INT constant. -+ */ -+unsigned avutil_version(void); -+ -+/** -+ * Return an informative version string. This usually is the actual release -+ * version number or a git commit description. This string has no fixed format -+ * and can change any time. It should never be parsed by code. -+ */ -+const char* av_version_info(void); -+ -+/** -+ * Return the libavutil build-time configuration. -+ */ -+const char* avutil_configuration(void); -+ -+/** -+ * Return the libavutil license. -+ */ -+const char* avutil_license(void); -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @addtogroup lavu_media Media Type -+ * @brief Media Type -+ */ -+ -+enum AVMediaType { -+ AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA -+ AVMEDIA_TYPE_VIDEO, -+ AVMEDIA_TYPE_AUDIO, -+ AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous -+ AVMEDIA_TYPE_SUBTITLE, -+ AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse -+ AVMEDIA_TYPE_NB -+}; -+ -+/** -+ * Return a string describing the media_type enum, NULL if media_type -+ * is unknown. -+ */ -+const char* av_get_media_type_string(enum AVMediaType media_type); -+ -+/** -+ * @defgroup lavu_const Constants -+ * @{ -+ * -+ * @defgroup lavu_enc Encoding specific -+ * -+ * @note those definition should move to avcodec -+ * @{ -+ */ -+ -+#define FF_LAMBDA_SHIFT 7 -+#define FF_LAMBDA_SCALE (1 << FF_LAMBDA_SHIFT) -+#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda -+#define FF_LAMBDA_MAX (256 * 128 - 1) -+ -+#define FF_QUALITY_SCALE FF_LAMBDA_SCALE // FIXME maybe remove -+ -+/** -+ * @} -+ * @defgroup lavu_time Timestamp specific -+ * -+ * FFmpeg internal timebase and timestamp definitions -+ * -+ * @{ -+ */ -+ -+/** -+ * @brief Undefined timestamp value -+ * -+ * Usually reported by demuxer that work on containers that do not provide -+ * either pts or dts. -+ */ -+ -+#define AV_NOPTS_VALUE ((int64_t)UINT64_C(0x8000000000000000)) -+ -+/** -+ * Internal time base represented as integer -+ */ -+ -+#define AV_TIME_BASE 1000000 -+ -+/** -+ * Internal time base represented as fractional value -+ */ -+ -+#define AV_TIME_BASE_Q \ -+ (AVRational) { 1, AV_TIME_BASE } -+ -+/** -+ * @} -+ * @} -+ * @defgroup lavu_picture Image related -+ * -+ * AVPicture types, pixel formats and basic image planes manipulation. -+ * -+ * @{ -+ */ -+ -+enum AVPictureType { -+ AV_PICTURE_TYPE_NONE = 0, ///< Undefined -+ AV_PICTURE_TYPE_I, ///< Intra -+ AV_PICTURE_TYPE_P, ///< Predicted -+ AV_PICTURE_TYPE_B, ///< Bi-dir predicted -+ AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG-4 -+ AV_PICTURE_TYPE_SI, ///< Switching Intra -+ AV_PICTURE_TYPE_SP, ///< Switching Predicted -+ AV_PICTURE_TYPE_BI, ///< BI type -+}; -+ -+/** -+ * Return a single letter to describe the given picture type -+ * pict_type. -+ * -+ * @param[in] pict_type the picture type @return a single character -+ * representing the picture type, '?' if pict_type is unknown -+ */ -+char av_get_picture_type_char(enum AVPictureType pict_type); -+ -+/** -+ * @} -+ */ -+ -+#include "common.h" -+#include "error.h" -+#include "rational.h" -+#include "version.h" -+#include "macros.h" -+#include "mathematics.h" -+#include "log.h" -+#include "pixfmt.h" -+ -+/** -+ * Return x default pointer in case p is NULL. -+ */ -+static inline void* av_x_if_null(const void* p, const void* x) { -+ return (void*)(intptr_t)(p ? p : x); -+} -+ -+/** -+ * Compute the length of an integer list. -+ * -+ * @param elsize size in bytes of each list element (only 1, 2, 4 or 8) -+ * @param term list terminator (usually 0 or -1) -+ * @param list pointer to the list -+ * @return length of the list, in elements, not counting the terminator -+ */ -+unsigned av_int_list_length_for_size(unsigned elsize, const void* list, -+ uint64_t term) av_pure; -+ -+/** -+ * Compute the length of an integer list. -+ * -+ * @param term list terminator (usually 0 or -1) -+ * @param list pointer to the list -+ * @return length of the list, in elements, not counting the terminator -+ */ -+#define av_int_list_length(list, term) \ -+ av_int_list_length_for_size(sizeof(*(list)), list, term) -+ -+#if FF_API_AV_FOPEN_UTF8 -+/** -+ * Open a file using a UTF-8 filename. -+ * The API of this function matches POSIX fopen(), errors are returned through -+ * errno. -+ * @deprecated Avoid using it, as on Windows, the FILE* allocated by this -+ * function may be allocated with a different CRT than the caller -+ * who uses the FILE*. No replacement provided in public API. -+ */ -+attribute_deprecated FILE* av_fopen_utf8(const char* path, const char* mode); -+#endif -+ -+/** -+ * Return the fractional representation of the internal time base. -+ */ -+AVRational av_get_time_base_q(void); -+ -+#define AV_FOURCC_MAX_STRING_SIZE 32 -+ -+#define av_fourcc2str(fourcc) \ -+ av_fourcc_make_string((char[AV_FOURCC_MAX_STRING_SIZE]){0}, fourcc) -+ -+/** -+ * Fill the provided buffer with a string containing a FourCC (four-character -+ * code) representation. -+ * -+ * @param buf a buffer with size in bytes of at least -+ * AV_FOURCC_MAX_STRING_SIZE -+ * @param fourcc the fourcc to represent -+ * @return the buffer in input -+ */ -+char* av_fourcc_make_string(char* buf, uint32_t fourcc); -+ -+/** -+ * @} -+ * @} -+ */ -+ -+#endif /* AVUTIL_AVUTIL_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/buffer.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,324 @@ -+/* -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @ingroup lavu_buffer -+ * refcounted data buffer API -+ */ -+ -+#ifndef AVUTIL_BUFFER_H -+#define AVUTIL_BUFFER_H -+ -+#include -+#include -+ -+/** -+ * @defgroup lavu_buffer AVBuffer -+ * @ingroup lavu_data -+ * -+ * @{ -+ * AVBuffer is an API for reference-counted data buffers. -+ * -+ * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer -+ * represents the data buffer itself; it is opaque and not meant to be accessed -+ * by the caller directly, but only through AVBufferRef. However, the caller may -+ * e.g. compare two AVBuffer pointers to check whether two different references -+ * are describing the same data buffer. AVBufferRef represents a single -+ * reference to an AVBuffer and it is the object that may be manipulated by the -+ * caller directly. -+ * -+ * There are two functions provided for creating a new AVBuffer with a single -+ * reference -- av_buffer_alloc() to just allocate a new buffer, and -+ * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing -+ * reference, additional references may be created with av_buffer_ref(). -+ * Use av_buffer_unref() to free a reference (this will automatically free the -+ * data once all the references are freed). -+ * -+ * The convention throughout this API and the rest of FFmpeg is such that the -+ * buffer is considered writable if there exists only one reference to it (and -+ * it has not been marked as read-only). The av_buffer_is_writable() function is -+ * provided to check whether this is true and av_buffer_make_writable() will -+ * automatically create a new writable buffer when necessary. -+ * Of course nothing prevents the calling code from violating this convention, -+ * however that is safe only when all the existing references are under its -+ * control. -+ * -+ * @note Referencing and unreferencing the buffers is thread-safe and thus -+ * may be done from multiple threads simultaneously without any need for -+ * additional locking. -+ * -+ * @note Two different references to the same buffer can point to different -+ * parts of the buffer (i.e. their AVBufferRef.data will not be equal). -+ */ -+ -+/** -+ * A reference counted buffer type. It is opaque and is meant to be used through -+ * references (AVBufferRef). -+ */ -+typedef struct AVBuffer AVBuffer; -+ -+/** -+ * A reference to a data buffer. -+ * -+ * The size of this struct is not a part of the public ABI and it is not meant -+ * to be allocated directly. -+ */ -+typedef struct AVBufferRef { -+ AVBuffer* buffer; -+ -+ /** -+ * The data buffer. It is considered writable if and only if -+ * this is the only reference to the buffer, in which case -+ * av_buffer_is_writable() returns 1. -+ */ -+ uint8_t* data; -+ /** -+ * Size of data in bytes. -+ */ -+ size_t size; -+} AVBufferRef; -+ -+/** -+ * Allocate an AVBuffer of the given size using av_malloc(). -+ * -+ * @return an AVBufferRef of given size or NULL when out of memory -+ */ -+AVBufferRef* av_buffer_alloc(size_t size); -+ -+/** -+ * Same as av_buffer_alloc(), except the returned buffer will be initialized -+ * to zero. -+ */ -+AVBufferRef* av_buffer_allocz(size_t size); -+ -+/** -+ * Always treat the buffer as read-only, even when it has only one -+ * reference. -+ */ -+#define AV_BUFFER_FLAG_READONLY (1 << 0) -+ -+/** -+ * Create an AVBuffer from an existing array. -+ * -+ * If this function is successful, data is owned by the AVBuffer. The caller may -+ * only access data through the returned AVBufferRef and references derived from -+ * it. -+ * If this function fails, data is left untouched. -+ * @param data data array -+ * @param size size of data in bytes -+ * @param free a callback for freeing this buffer's data -+ * @param opaque parameter to be got for processing or passed to free -+ * @param flags a combination of AV_BUFFER_FLAG_* -+ * -+ * @return an AVBufferRef referring to data on success, NULL on failure. -+ */ -+AVBufferRef* av_buffer_create(uint8_t* data, size_t size, -+ void (*free)(void* opaque, uint8_t* data), -+ void* opaque, int flags); -+ -+/** -+ * Default free callback, which calls av_free() on the buffer data. -+ * This function is meant to be passed to av_buffer_create(), not called -+ * directly. -+ */ -+void av_buffer_default_free(void* opaque, uint8_t* data); -+ -+/** -+ * Create a new reference to an AVBuffer. -+ * -+ * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on -+ * failure. -+ */ -+AVBufferRef* av_buffer_ref(const AVBufferRef* buf); -+ -+/** -+ * Free a given reference and automatically free the buffer if there are no more -+ * references to it. -+ * -+ * @param buf the reference to be freed. The pointer is set to NULL on return. -+ */ -+void av_buffer_unref(AVBufferRef** buf); -+ -+/** -+ * @return 1 if the caller may write to the data referred to by buf (which is -+ * true if and only if buf is the only reference to the underlying AVBuffer). -+ * Return 0 otherwise. -+ * A positive answer is valid until av_buffer_ref() is called on buf. -+ */ -+int av_buffer_is_writable(const AVBufferRef* buf); -+ -+/** -+ * @return the opaque parameter set by av_buffer_create. -+ */ -+void* av_buffer_get_opaque(const AVBufferRef* buf); -+ -+int av_buffer_get_ref_count(const AVBufferRef* buf); -+ -+/** -+ * Create a writable reference from a given buffer reference, avoiding data copy -+ * if possible. -+ * -+ * @param buf buffer reference to make writable. On success, buf is either left -+ * untouched, or it is unreferenced and a new writable AVBufferRef is -+ * written in its place. On failure, buf is left untouched. -+ * @return 0 on success, a negative AVERROR on failure. -+ */ -+int av_buffer_make_writable(AVBufferRef** buf); -+ -+/** -+ * Reallocate a given buffer. -+ * -+ * @param buf a buffer reference to reallocate. On success, buf will be -+ * unreferenced and a new reference with the required size will be -+ * written in its place. On failure buf will be left untouched. *buf -+ * may be NULL, then a new buffer is allocated. -+ * @param size required new buffer size. -+ * @return 0 on success, a negative AVERROR on failure. -+ * -+ * @note the buffer is actually reallocated with av_realloc() only if it was -+ * initially allocated through av_buffer_realloc(NULL) and there is only one -+ * reference to it (i.e. the one passed to this function). In all other cases -+ * a new buffer is allocated and the data is copied. -+ */ -+int av_buffer_realloc(AVBufferRef** buf, size_t size); -+ -+/** -+ * Ensure dst refers to the same data as src. -+ * -+ * When *dst is already equivalent to src, do nothing. Otherwise unreference dst -+ * and replace it with a new reference to src. -+ * -+ * @param dst Pointer to either a valid buffer reference or NULL. On success, -+ * this will point to a buffer reference equivalent to src. On -+ * failure, dst will be left untouched. -+ * @param src A buffer reference to replace dst with. May be NULL, then this -+ * function is equivalent to av_buffer_unref(dst). -+ * @return 0 on success -+ * AVERROR(ENOMEM) on memory allocation failure. -+ */ -+int av_buffer_replace(AVBufferRef** dst, const AVBufferRef* src); -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @defgroup lavu_bufferpool AVBufferPool -+ * @ingroup lavu_data -+ * -+ * @{ -+ * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. -+ * -+ * Frequently allocating and freeing large buffers may be slow. AVBufferPool is -+ * meant to solve this in cases when the caller needs a set of buffers of the -+ * same size (the most obvious use case being buffers for raw video or audio -+ * frames). -+ * -+ * At the beginning, the user must call av_buffer_pool_init() to create the -+ * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to -+ * get a reference to a new buffer, similar to av_buffer_alloc(). This new -+ * reference works in all aspects the same way as the one created by -+ * av_buffer_alloc(). However, when the last reference to this buffer is -+ * unreferenced, it is returned to the pool instead of being freed and will be -+ * reused for subsequent av_buffer_pool_get() calls. -+ * -+ * When the caller is done with the pool and no longer needs to allocate any new -+ * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. -+ * Once all the buffers are released, it will automatically be freed. -+ * -+ * Allocating and releasing buffers with this API is thread-safe as long as -+ * either the default alloc callback is used, or the user-supplied one is -+ * thread-safe. -+ */ -+ -+/** -+ * The buffer pool. This structure is opaque and not meant to be accessed -+ * directly. It is allocated with av_buffer_pool_init() and freed with -+ * av_buffer_pool_uninit(). -+ */ -+typedef struct AVBufferPool AVBufferPool; -+ -+/** -+ * Allocate and initialize a buffer pool. -+ * -+ * @param size size of each buffer in this pool -+ * @param alloc a function that will be used to allocate new buffers when the -+ * pool is empty. May be NULL, then the default allocator will be used -+ * (av_buffer_alloc()). -+ * @return newly created buffer pool on success, NULL on error. -+ */ -+AVBufferPool* av_buffer_pool_init(size_t size, -+ AVBufferRef* (*alloc)(size_t size)); -+ -+/** -+ * Allocate and initialize a buffer pool with a more complex allocator. -+ * -+ * @param size size of each buffer in this pool -+ * @param opaque arbitrary user data used by the allocator -+ * @param alloc a function that will be used to allocate new buffers when the -+ * pool is empty. May be NULL, then the default allocator will be -+ * used (av_buffer_alloc()). -+ * @param pool_free a function that will be called immediately before the pool -+ * is freed. I.e. after av_buffer_pool_uninit() is called -+ * by the caller and all the frames are returned to the pool -+ * and freed. It is intended to uninitialize the user opaque -+ * data. May be NULL. -+ * @return newly created buffer pool on success, NULL on error. -+ */ -+AVBufferPool* av_buffer_pool_init2(size_t size, void* opaque, -+ AVBufferRef* (*alloc)(void* opaque, -+ size_t size), -+ void (*pool_free)(void* opaque)); -+ -+/** -+ * Mark the pool as being available for freeing. It will actually be freed only -+ * once all the allocated buffers associated with the pool are released. Thus it -+ * is safe to call this function while some of the allocated buffers are still -+ * in use. -+ * -+ * @param pool pointer to the pool to be freed. It will be set to NULL. -+ */ -+void av_buffer_pool_uninit(AVBufferPool** pool); -+ -+/** -+ * Allocate a new AVBuffer, reusing an old buffer from the pool when available. -+ * This function may be called simultaneously from multiple threads. -+ * -+ * @return a reference to the new buffer on success, NULL on error. -+ */ -+AVBufferRef* av_buffer_pool_get(AVBufferPool* pool); -+ -+/** -+ * Query the original opaque parameter of an allocated buffer in the pool. -+ * -+ * @param ref a buffer reference to a buffer returned by av_buffer_pool_get. -+ * @return the opaque parameter set by the buffer allocator function of the -+ * buffer pool. -+ * -+ * @note the opaque parameter of ref is used by the buffer pool implementation, -+ * therefore you have to use this function to access the original opaque -+ * parameter of an allocated buffer. -+ */ -+void* av_buffer_pool_buffer_get_opaque(const AVBufferRef* ref); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_BUFFER_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/channel_layout.h 2023-04-06 12:57:00.771081640 +0200 -@@ -0,0 +1,842 @@ -+/* -+ * Copyright (c) 2006 Michael Niedermayer -+ * Copyright (c) 2008 Peter Ross -+ * -+ * 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 -+ */ -+ -+#ifndef AVUTIL_CHANNEL_LAYOUT_H -+#define AVUTIL_CHANNEL_LAYOUT_H -+ -+#include -+#include -+ -+#include "version.h" -+#include "attributes.h" -+ -+/** -+ * @file -+ * @ingroup lavu_audio_channels -+ * Public libavutil channel layout APIs header. -+ */ -+ -+/** -+ * @defgroup lavu_audio_channels Audio channels -+ * @ingroup lavu_audio -+ * -+ * Audio channel layout utility functions -+ * -+ * @{ -+ */ -+ -+enum AVChannel { -+ ///< Invalid channel index -+ AV_CHAN_NONE = -1, -+ AV_CHAN_FRONT_LEFT, -+ AV_CHAN_FRONT_RIGHT, -+ AV_CHAN_FRONT_CENTER, -+ AV_CHAN_LOW_FREQUENCY, -+ AV_CHAN_BACK_LEFT, -+ AV_CHAN_BACK_RIGHT, -+ AV_CHAN_FRONT_LEFT_OF_CENTER, -+ AV_CHAN_FRONT_RIGHT_OF_CENTER, -+ AV_CHAN_BACK_CENTER, -+ AV_CHAN_SIDE_LEFT, -+ AV_CHAN_SIDE_RIGHT, -+ AV_CHAN_TOP_CENTER, -+ AV_CHAN_TOP_FRONT_LEFT, -+ AV_CHAN_TOP_FRONT_CENTER, -+ AV_CHAN_TOP_FRONT_RIGHT, -+ AV_CHAN_TOP_BACK_LEFT, -+ AV_CHAN_TOP_BACK_CENTER, -+ AV_CHAN_TOP_BACK_RIGHT, -+ /** Stereo downmix. */ -+ AV_CHAN_STEREO_LEFT = 29, -+ /** See above. */ -+ AV_CHAN_STEREO_RIGHT, -+ AV_CHAN_WIDE_LEFT, -+ AV_CHAN_WIDE_RIGHT, -+ AV_CHAN_SURROUND_DIRECT_LEFT, -+ AV_CHAN_SURROUND_DIRECT_RIGHT, -+ AV_CHAN_LOW_FREQUENCY_2, -+ AV_CHAN_TOP_SIDE_LEFT, -+ AV_CHAN_TOP_SIDE_RIGHT, -+ AV_CHAN_BOTTOM_FRONT_CENTER, -+ AV_CHAN_BOTTOM_FRONT_LEFT, -+ AV_CHAN_BOTTOM_FRONT_RIGHT, -+ -+ /** Channel is empty can be safely skipped. */ -+ AV_CHAN_UNUSED = 0x200, -+ -+ /** Channel contains data, but its position is unknown. */ -+ AV_CHAN_UNKNOWN = 0x300, -+ -+ /** -+ * Range of channels between AV_CHAN_AMBISONIC_BASE and -+ * AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system. -+ * -+ * Given a channel id `` between AV_CHAN_AMBISONIC_BASE and -+ * AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `` is -+ * ` = - AV_CHAN_AMBISONIC_BASE`. -+ * -+ * @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel -+ * orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels -+ * implicitly by their position in the stream. -+ */ -+ AV_CHAN_AMBISONIC_BASE = 0x400, -+ // leave space for 1024 ids, which correspond to maximum order-32 harmonics, -+ // which should be enough for the foreseeable use cases -+ AV_CHAN_AMBISONIC_END = 0x7ff, -+}; -+ -+enum AVChannelOrder { -+ /** -+ * Only the channel count is specified, without any further information -+ * about the channel order. -+ */ -+ AV_CHANNEL_ORDER_UNSPEC, -+ /** -+ * The native channel order, i.e. the channels are in the same order in -+ * which they are defined in the AVChannel enum. This supports up to 63 -+ * different channels. -+ */ -+ AV_CHANNEL_ORDER_NATIVE, -+ /** -+ * The channel order does not correspond to any other predefined order and -+ * is stored as an explicit map. For example, this could be used to support -+ * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE) -+ * channels at arbitrary positions. -+ */ -+ AV_CHANNEL_ORDER_CUSTOM, -+ /** -+ * The audio is represented as the decomposition of the sound field into -+ * spherical harmonics. Each channel corresponds to a single expansion -+ * component. Channels are ordered according to ACN (Ambisonic Channel -+ * Number). -+ * -+ * The channel with the index n in the stream contains the spherical -+ * harmonic of degree l and order m given by -+ * @code{.unparsed} -+ * l = floor(sqrt(n)), -+ * m = n - l * (l + 1). -+ * @endcode -+ * -+ * Conversely given a spherical harmonic of degree l and order m, the -+ * corresponding channel index n is given by -+ * @code{.unparsed} -+ * n = l * (l + 1) + m. -+ * @endcode -+ * -+ * Normalization is assumed to be SN3D (Schmidt Semi-Normalization) -+ * as defined in AmbiX format $ 2.1. -+ */ -+ AV_CHANNEL_ORDER_AMBISONIC, -+}; -+ -+/** -+ * @defgroup channel_masks Audio channel masks -+ * -+ * A channel layout is a 64-bits integer with a bit set for every channel. -+ * The number of bits set must be equal to the number of channels. -+ * The value 0 means that the channel layout is not known. -+ * @note this data structure is not powerful enough to handle channels -+ * combinations that have the same channel multiple times, such as -+ * dual-mono. -+ * -+ * @{ -+ */ -+#define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT) -+#define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT) -+#define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER) -+#define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY) -+#define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT) -+#define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT) -+#define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER) -+#define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER) -+#define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT) -+#define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT) -+#define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER) -+#define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT) -+#define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER) -+#define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT) -+#define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT) -+#define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER) -+#define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT) -+#define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT) -+#define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT) -+#define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT) -+#define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT) -+#define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT) -+#define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT) -+#define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2) -+#define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT) -+#define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT) -+#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER) -+#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT) -+#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT) -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+/** Channel mask value used for AVCodecContext.request_channel_layout -+ to indicate that the user requests the channel order of the decoder output -+ to be the native codec channel order. -+ @deprecated channel order is now indicated in a special field in -+ AVChannelLayout -+ */ -+# define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL -+#endif -+ -+/** -+ * @} -+ * @defgroup channel_mask_c Audio channel layouts -+ * @{ -+ * */ -+#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER) -+#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT) -+#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO | AV_CH_LOW_FREQUENCY) -+#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO | AV_CH_BACK_CENTER) -+#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO | AV_CH_FRONT_CENTER) -+#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY) -+#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND | AV_CH_BACK_CENTER) -+#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0 | AV_CH_LOW_FREQUENCY) -+#define AV_CH_LAYOUT_2_2 \ -+ (AV_CH_LAYOUT_STEREO | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT) -+#define AV_CH_LAYOUT_QUAD \ -+ (AV_CH_LAYOUT_STEREO | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) -+#define AV_CH_LAYOUT_5POINT0 \ -+ (AV_CH_LAYOUT_SURROUND | AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT) -+#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0 | AV_CH_LOW_FREQUENCY) -+#define AV_CH_LAYOUT_5POINT0_BACK \ -+ (AV_CH_LAYOUT_SURROUND | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) -+#define AV_CH_LAYOUT_5POINT1_BACK \ -+ (AV_CH_LAYOUT_5POINT0_BACK | AV_CH_LOW_FREQUENCY) -+#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_CENTER) -+#define AV_CH_LAYOUT_6POINT0_FRONT \ -+ (AV_CH_LAYOUT_2_2 | AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK | AV_CH_BACK_CENTER) -+#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1 | AV_CH_BACK_CENTER) -+#define AV_CH_LAYOUT_6POINT1_BACK \ -+ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_BACK_CENTER) -+#define AV_CH_LAYOUT_6POINT1_FRONT \ -+ (AV_CH_LAYOUT_6POINT0_FRONT | AV_CH_LOW_FREQUENCY) -+#define AV_CH_LAYOUT_7POINT0 \ -+ (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) -+#define AV_CH_LAYOUT_7POINT0_FRONT \ -+ (AV_CH_LAYOUT_5POINT0 | AV_CH_FRONT_LEFT_OF_CENTER | \ -+ AV_CH_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_LAYOUT_7POINT1 \ -+ (AV_CH_LAYOUT_5POINT1 | AV_CH_BACK_LEFT | AV_CH_BACK_RIGHT) -+#define AV_CH_LAYOUT_7POINT1_WIDE \ -+ (AV_CH_LAYOUT_5POINT1 | AV_CH_FRONT_LEFT_OF_CENTER | \ -+ AV_CH_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_LAYOUT_7POINT1_WIDE_BACK \ -+ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_FRONT_LEFT_OF_CENTER | \ -+ AV_CH_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_LAYOUT_7POINT1_TOP_BACK \ -+ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT) -+#define AV_CH_LAYOUT_OCTAGONAL \ -+ (AV_CH_LAYOUT_5POINT0 | AV_CH_BACK_LEFT | AV_CH_BACK_CENTER | \ -+ AV_CH_BACK_RIGHT) -+#define AV_CH_LAYOUT_CUBE \ -+ (AV_CH_LAYOUT_QUAD | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT | \ -+ AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT) -+#define AV_CH_LAYOUT_HEXADECAGONAL \ -+ (AV_CH_LAYOUT_OCTAGONAL | AV_CH_WIDE_LEFT | AV_CH_WIDE_RIGHT | \ -+ AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT | AV_CH_TOP_BACK_CENTER | \ -+ AV_CH_TOP_FRONT_CENTER | AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT) -+#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT) -+#define AV_CH_LAYOUT_22POINT2 \ -+ (AV_CH_LAYOUT_5POINT1_BACK | AV_CH_FRONT_LEFT_OF_CENTER | \ -+ AV_CH_FRONT_RIGHT_OF_CENTER | AV_CH_BACK_CENTER | AV_CH_LOW_FREQUENCY_2 | \ -+ AV_CH_SIDE_LEFT | AV_CH_SIDE_RIGHT | AV_CH_TOP_FRONT_LEFT | \ -+ AV_CH_TOP_FRONT_RIGHT | AV_CH_TOP_FRONT_CENTER | AV_CH_TOP_CENTER | \ -+ AV_CH_TOP_BACK_LEFT | AV_CH_TOP_BACK_RIGHT | AV_CH_TOP_SIDE_LEFT | \ -+ AV_CH_TOP_SIDE_RIGHT | AV_CH_TOP_BACK_CENTER | AV_CH_BOTTOM_FRONT_CENTER | \ -+ AV_CH_BOTTOM_FRONT_LEFT | AV_CH_BOTTOM_FRONT_RIGHT) -+ -+enum AVMatrixEncoding { -+ AV_MATRIX_ENCODING_NONE, -+ AV_MATRIX_ENCODING_DOLBY, -+ AV_MATRIX_ENCODING_DPLII, -+ AV_MATRIX_ENCODING_DPLIIX, -+ AV_MATRIX_ENCODING_DPLIIZ, -+ AV_MATRIX_ENCODING_DOLBYEX, -+ AV_MATRIX_ENCODING_DOLBYHEADPHONE, -+ AV_MATRIX_ENCODING_NB -+}; -+ -+/** -+ * @} -+ */ -+ -+/** -+ * An AVChannelCustom defines a single channel within a custom order layout -+ * -+ * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the -+ * public ABI. -+ * -+ * No new fields may be added to it without a major version bump. -+ */ -+typedef struct AVChannelCustom { -+ enum AVChannel id; -+ char name[16]; -+ void* opaque; -+} AVChannelCustom; -+ -+/** -+ * An AVChannelLayout holds information about the channel layout of audio data. -+ * -+ * A channel layout here is defined as a set of channels ordered in a specific -+ * way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an -+ * AVChannelLayout carries only the channel count). -+ * All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by -+ * ignoring everything but the channel count, as long as -+ * av_channel_layout_check() considers they are valid. -+ * -+ * Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the -+ * public ABI and may be used by the caller. E.g. it may be allocated on stack -+ * or embedded in caller-defined structs. -+ * -+ * AVChannelLayout can be initialized as follows: -+ * - default initialization with {0}, followed by setting all used fields -+ * correctly; -+ * - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers; -+ * - with a constructor function, such as av_channel_layout_default(), -+ * av_channel_layout_from_mask() or av_channel_layout_from_string(). -+ * -+ * The channel layout must be unitialized with av_channel_layout_uninit() -+ * -+ * Copying an AVChannelLayout via assigning is forbidden, -+ * av_channel_layout_copy() must be used instead (and its return value should -+ * be checked) -+ * -+ * No new fields may be added to it without a major version bump, except for -+ * new elements of the union fitting in sizeof(uint64_t). -+ */ -+typedef struct AVChannelLayout { -+ /** -+ * Channel order used in this layout. -+ * This is a mandatory field. -+ */ -+ enum AVChannelOrder order; -+ -+ /** -+ * Number of channels in this layout. Mandatory field. -+ */ -+ int nb_channels; -+ -+ /** -+ * Details about which channels are present in this layout. -+ * For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be -+ * used. -+ */ -+ union { -+ /** -+ * This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used -+ * for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels. -+ * It is a bitmask, where the position of each set bit means that the -+ * AVChannel with the corresponding value is present. -+ * -+ * I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO -+ * is present in the layout. Otherwise it is not present. -+ * -+ * @note when a channel layout using a bitmask is constructed or -+ * modified manually (i.e. not using any of the av_channel_layout_* -+ * functions), the code doing it must ensure that the number of set bits -+ * is equal to nb_channels. -+ */ -+ uint64_t mask; -+ /** -+ * This member must be used when the channel order is -+ * AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each -+ * element signalling the presence of the AVChannel with the -+ * corresponding value in map[i].id. -+ * -+ * I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the -+ * i-th channel in the audio data. -+ * -+ * When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and -+ * AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic -+ * component with ACN index (as defined above) -+ * n = map[i].id - AV_CHAN_AMBISONIC_BASE. -+ * -+ * map[i].name may be filled with a 0-terminated string, in which case -+ * it will be used for the purpose of identifying the channel with the -+ * convenience functions below. Otherise it must be zeroed. -+ */ -+ AVChannelCustom* map; -+ } u; -+ -+ /** -+ * For some private data of the user. -+ */ -+ void* opaque; -+} AVChannelLayout; -+ -+#define AV_CHANNEL_LAYOUT_MASK(nb, m) \ -+ { \ -+ .order = AV_CHANNEL_ORDER_NATIVE, .nb_channels = (nb), .u = {.mask = (m) } \ -+ } -+ -+/** -+ * @name Common pre-defined channel layouts -+ * @{ -+ */ -+#define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) -+#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO) -+#define AV_CHANNEL_LAYOUT_2POINT1 \ -+ AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1) -+#define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1) -+#define AV_CHANNEL_LAYOUT_SURROUND \ -+ AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND) -+#define AV_CHANNEL_LAYOUT_3POINT1 \ -+ AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1) -+#define AV_CHANNEL_LAYOUT_4POINT0 \ -+ AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0) -+#define AV_CHANNEL_LAYOUT_4POINT1 \ -+ AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1) -+#define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2) -+#define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD) -+#define AV_CHANNEL_LAYOUT_5POINT0 \ -+ AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0) -+#define AV_CHANNEL_LAYOUT_5POINT1 \ -+ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1) -+#define AV_CHANNEL_LAYOUT_5POINT0_BACK \ -+ AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK) -+#define AV_CHANNEL_LAYOUT_5POINT1_BACK \ -+ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK) -+#define AV_CHANNEL_LAYOUT_6POINT0 \ -+ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0) -+#define AV_CHANNEL_LAYOUT_6POINT0_FRONT \ -+ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT) -+#define AV_CHANNEL_LAYOUT_HEXAGONAL \ -+ AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL) -+#define AV_CHANNEL_LAYOUT_6POINT1 \ -+ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1) -+#define AV_CHANNEL_LAYOUT_6POINT1_BACK \ -+ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK) -+#define AV_CHANNEL_LAYOUT_6POINT1_FRONT \ -+ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT) -+#define AV_CHANNEL_LAYOUT_7POINT0 \ -+ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0) -+#define AV_CHANNEL_LAYOUT_7POINT0_FRONT \ -+ AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT) -+#define AV_CHANNEL_LAYOUT_7POINT1 \ -+ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1) -+#define AV_CHANNEL_LAYOUT_7POINT1_WIDE \ -+ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE) -+#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK \ -+ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK) -+#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK \ -+ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK) -+#define AV_CHANNEL_LAYOUT_OCTAGONAL \ -+ AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL) -+#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) -+#define AV_CHANNEL_LAYOUT_HEXADECAGONAL \ -+ AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL) -+#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX \ -+ AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX) -+#define AV_CHANNEL_LAYOUT_22POINT2 \ -+ AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2) -+#define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \ -+ { \ -+ .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = 4, .u = {.mask = 0 } \ -+ } -+/** @} */ -+ -+struct AVBPrint; -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+/** -+ * @name Deprecated Functions -+ * @{ -+ */ -+ -+/** -+ * Return a channel layout id that matches name, or 0 if no match is found. -+ * -+ * name can be one or several of the following notations, -+ * separated by '+' or '|': -+ * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, -+ * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); -+ * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, -+ * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); -+ * - a number of channels, in decimal, followed by 'c', yielding -+ * the default channel layout for that number of channels (@see -+ * av_get_default_channel_layout); -+ * - a channel layout mask, in hexadecimal starting with "0x" (see the -+ * AV_CH_* macros). -+ * -+ * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" -+ * -+ * @deprecated use av_channel_layout_from_string() -+ */ -+attribute_deprecated uint64_t av_get_channel_layout(const char* name); -+ -+/** -+ * Return a channel layout and the number of channels based on the specified -+ * name. -+ * -+ * This function is similar to (@see av_get_channel_layout), but can also parse -+ * unknown channel layout specifications. -+ * -+ * @param[in] name channel layout specification string -+ * @param[out] channel_layout parsed channel layout (0 if unknown) -+ * @param[out] nb_channels number of channels -+ * -+ * @return 0 on success, AVERROR(EINVAL) if the parsing fails. -+ * @deprecated use av_channel_layout_from_string() -+ */ -+attribute_deprecated int av_get_extended_channel_layout( -+ const char* name, uint64_t* channel_layout, int* nb_channels); -+ -+/** -+ * Return a description of a channel layout. -+ * If nb_channels is <= 0, it is guessed from the channel_layout. -+ * -+ * @param buf put here the string containing the channel layout -+ * @param buf_size size in bytes of the buffer -+ * @param nb_channels number of channels -+ * @param channel_layout channel layout bitset -+ * @deprecated use av_channel_layout_describe() -+ */ -+attribute_deprecated void av_get_channel_layout_string(char* buf, int buf_size, -+ int nb_channels, -+ uint64_t channel_layout); -+ -+/** -+ * Append a description of a channel layout to a bprint buffer. -+ * @deprecated use av_channel_layout_describe() -+ */ -+attribute_deprecated void av_bprint_channel_layout(struct AVBPrint* bp, -+ int nb_channels, -+ uint64_t channel_layout); -+ -+/** -+ * Return the number of channels in the channel layout. -+ * @deprecated use AVChannelLayout.nb_channels -+ */ -+attribute_deprecated int av_get_channel_layout_nb_channels( -+ uint64_t channel_layout); -+ -+/** -+ * Return default channel layout for a given number of channels. -+ * -+ * @deprecated use av_channel_layout_default() -+ */ -+attribute_deprecated int64_t av_get_default_channel_layout(int nb_channels); -+ -+/** -+ * Get the index of a channel in channel_layout. -+ * -+ * @param channel_layout channel layout bitset -+ * @param channel a channel layout describing exactly one channel which must be -+ * present in channel_layout. -+ * -+ * @return index of channel in channel_layout on success, a negative AVERROR -+ * on error. -+ * -+ * @deprecated use av_channel_layout_index_from_channel() -+ */ -+attribute_deprecated int av_get_channel_layout_channel_index( -+ uint64_t channel_layout, uint64_t channel); -+ -+/** -+ * Get the channel with the given index in channel_layout. -+ * @deprecated use av_channel_layout_channel_from_index() -+ */ -+attribute_deprecated uint64_t -+av_channel_layout_extract_channel(uint64_t channel_layout, int index); -+ -+/** -+ * Get the name of a given channel. -+ * -+ * @return channel name on success, NULL on error. -+ * -+ * @deprecated use av_channel_name() -+ */ -+attribute_deprecated const char* av_get_channel_name(uint64_t channel); -+ -+/** -+ * Get the description of a given channel. -+ * -+ * @param channel a channel layout with a single channel -+ * @return channel description on success, NULL on error -+ * @deprecated use av_channel_description() -+ */ -+attribute_deprecated const char* av_get_channel_description(uint64_t channel); -+ -+/** -+ * Get the value and name of a standard channel layout. -+ * -+ * @param[in] index index in an internal list, starting at 0 -+ * @param[out] layout channel layout mask -+ * @param[out] name name of the layout -+ * @return 0 if the layout exists, -+ * <0 if index is beyond the limits -+ * @deprecated use av_channel_layout_standard() -+ */ -+attribute_deprecated int av_get_standard_channel_layout(unsigned index, -+ uint64_t* layout, -+ const char** name); -+/** -+ * @} -+ */ -+#endif -+ -+/** -+ * Get a human readable string in an abbreviated form describing a given -+ * channel. This is the inverse function of @ref av_channel_from_string(). -+ * -+ * @param buf pre-allocated buffer where to put the generated string -+ * @param buf_size size in bytes of the buffer. -+ * @param channel the AVChannel whose name to get -+ * @return amount of bytes needed to hold the output string, or a negative -+ * AVERROR on failure. If the returned value is bigger than buf_size, then the -+ * string was truncated. -+ */ -+int av_channel_name(char* buf, size_t buf_size, enum AVChannel channel); -+ -+/** -+ * bprint variant of av_channel_name(). -+ * -+ * @note the string will be appended to the bprint buffer. -+ */ -+void av_channel_name_bprint(struct AVBPrint* bp, enum AVChannel channel_id); -+ -+/** -+ * Get a human readable string describing a given channel. -+ * -+ * @param buf pre-allocated buffer where to put the generated string -+ * @param buf_size size in bytes of the buffer. -+ * @param channel the AVChannel whose description to get -+ * @return amount of bytes needed to hold the output string, or a negative -+ * AVERROR on failure. If the returned value is bigger than buf_size, then the -+ * string was truncated. -+ */ -+int av_channel_description(char* buf, size_t buf_size, enum AVChannel channel); -+ -+/** -+ * bprint variant of av_channel_description(). -+ * -+ * @note the string will be appended to the bprint buffer. -+ */ -+void av_channel_description_bprint(struct AVBPrint* bp, -+ enum AVChannel channel_id); -+ -+/** -+ * This is the inverse function of @ref av_channel_name(). -+ * -+ * @return the channel with the given name -+ * AV_CHAN_NONE when name does not identify a known channel -+ */ -+enum AVChannel av_channel_from_string(const char* name); -+ -+/** -+ * Initialize a native channel layout from a bitmask indicating which channels -+ * are present. -+ * -+ * @param channel_layout the layout structure to be initialized -+ * @param mask bitmask describing the channel layout -+ * -+ * @return 0 on success -+ * AVERROR(EINVAL) for invalid mask values -+ */ -+int av_channel_layout_from_mask(AVChannelLayout* channel_layout, uint64_t mask); -+ -+/** -+ * Initialize a channel layout from a given string description. -+ * The input string can be represented by: -+ * - the formal channel layout name (returned by av_channel_layout_describe()) -+ * - single or multiple channel names (returned by av_channel_name(), eg. "FL", -+ * or concatenated with "+", each optionally containing a custom name after -+ * a "@", eg. "FL@Left+FR@Right+LFE") -+ * - a decimal or hexadecimal value of a native channel layout (eg. "4" or -+ * "0x4") -+ * - the number of channels with default layout (eg. "4c") -+ * - the number of unordered channels (eg. "4C" or "4 channels") -+ * - the ambisonic order followed by optional non-diegetic channels (eg. -+ * "ambisonic 2+stereo") -+ * -+ * @param channel_layout input channel layout -+ * @param str string describing the channel layout -+ * @return 0 channel layout was detected, AVERROR_INVALIDATATA otherwise -+ */ -+int av_channel_layout_from_string(AVChannelLayout* channel_layout, -+ const char* str); -+ -+/** -+ * Get the default channel layout for a given number of channels. -+ * -+ * @param ch_layout the layout structure to be initialized -+ * @param nb_channels number of channels -+ */ -+void av_channel_layout_default(AVChannelLayout* ch_layout, int nb_channels); -+ -+/** -+ * Iterate over all standard channel layouts. -+ * -+ * @param opaque a pointer where libavutil will store the iteration state. Must -+ * point to NULL to start the iteration. -+ * -+ * @return the standard channel layout or NULL when the iteration is -+ * finished -+ */ -+const AVChannelLayout* av_channel_layout_standard(void** opaque); -+ -+/** -+ * Free any allocated data in the channel layout and reset the channel -+ * count to 0. -+ * -+ * @param channel_layout the layout structure to be uninitialized -+ */ -+void av_channel_layout_uninit(AVChannelLayout* channel_layout); -+ -+/** -+ * Make a copy of a channel layout. This differs from just assigning src to dst -+ * in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM. -+ * -+ * @note the destination channel_layout will be always uninitialized before -+ * copy. -+ * -+ * @param dst destination channel layout -+ * @param src source channel layout -+ * @return 0 on success, a negative AVERROR on error. -+ */ -+int av_channel_layout_copy(AVChannelLayout* dst, const AVChannelLayout* src); -+ -+/** -+ * Get a human-readable string describing the channel layout properties. -+ * The string will be in the same format that is accepted by -+ * @ref av_channel_layout_from_string(), allowing to rebuild the same -+ * channel layout, except for opaque pointers. -+ * -+ * @param channel_layout channel layout to be described -+ * @param buf pre-allocated buffer where to put the generated string -+ * @param buf_size size in bytes of the buffer. -+ * @return amount of bytes needed to hold the output string, or a negative -+ * AVERROR on failure. If the returned value is bigger than buf_size, then the -+ * string was truncated. -+ */ -+int av_channel_layout_describe(const AVChannelLayout* channel_layout, char* buf, -+ size_t buf_size); -+ -+/** -+ * bprint variant of av_channel_layout_describe(). -+ * -+ * @note the string will be appended to the bprint buffer. -+ * @return 0 on success, or a negative AVERROR value on failure. -+ */ -+int av_channel_layout_describe_bprint(const AVChannelLayout* channel_layout, -+ struct AVBPrint* bp); -+ -+/** -+ * Get the channel with the given index in a channel layout. -+ * -+ * @param channel_layout input channel layout -+ * @param idx index of the channel -+ * @return channel with the index idx in channel_layout on success or -+ * AV_CHAN_NONE on failure (if idx is not valid or the channel order is -+ * unspecified) -+ */ -+enum AVChannel av_channel_layout_channel_from_index( -+ const AVChannelLayout* channel_layout, unsigned int idx); -+ -+/** -+ * Get the index of a given channel in a channel layout. In case multiple -+ * channels are found, only the first match will be returned. -+ * -+ * @param channel_layout input channel layout -+ * @param channel the channel whose index to obtain -+ * @return index of channel in channel_layout on success or a negative number if -+ * channel is not present in channel_layout. -+ */ -+int av_channel_layout_index_from_channel(const AVChannelLayout* channel_layout, -+ enum AVChannel channel); -+ -+/** -+ * Get the index in a channel layout of a channel described by the given string. -+ * In case multiple channels are found, only the first match will be returned. -+ * -+ * This function accepts channel names in the same format as -+ * @ref av_channel_from_string(). -+ * -+ * @param channel_layout input channel layout -+ * @param name string describing the channel whose index to obtain -+ * @return a channel index described by the given string, or a negative AVERROR -+ * value. -+ */ -+int av_channel_layout_index_from_string(const AVChannelLayout* channel_layout, -+ const char* name); -+ -+/** -+ * Get a channel described by the given string. -+ * -+ * This function accepts channel names in the same format as -+ * @ref av_channel_from_string(). -+ * -+ * @param channel_layout input channel layout -+ * @param name string describing the channel to obtain -+ * @return a channel described by the given string in channel_layout on success -+ * or AV_CHAN_NONE on failure (if the string is not valid or the channel -+ * order is unspecified) -+ */ -+enum AVChannel av_channel_layout_channel_from_string( -+ const AVChannelLayout* channel_layout, const char* name); -+ -+/** -+ * Find out what channels from a given set are present in a channel layout, -+ * without regard for their positions. -+ * -+ * @param channel_layout input channel layout -+ * @param mask a combination of AV_CH_* representing a set of channels -+ * @return a bitfield representing all the channels from mask that are present -+ * in channel_layout -+ */ -+uint64_t av_channel_layout_subset(const AVChannelLayout* channel_layout, -+ uint64_t mask); -+ -+/** -+ * Check whether a channel layout is valid, i.e. can possibly describe audio -+ * data. -+ * -+ * @param channel_layout input channel layout -+ * @return 1 if channel_layout is valid, 0 otherwise. -+ */ -+int av_channel_layout_check(const AVChannelLayout* channel_layout); -+ -+/** -+ * Check whether two channel layouts are semantically the same, i.e. the same -+ * channels are present on the same positions in both. -+ * -+ * If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is -+ * not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC, -+ * they are considered equal iff the channel counts are the same in both. -+ * -+ * @param chl input channel layout -+ * @param chl1 input channel layout -+ * @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative -+ * AVERROR code if one or both are invalid. -+ */ -+int av_channel_layout_compare(const AVChannelLayout* chl, -+ const AVChannelLayout* chl1); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_CHANNEL_LAYOUT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/common.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,589 @@ -+/* -+ * copyright (c) 2006 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * common internal and external API header -+ */ -+ -+#ifndef AVUTIL_COMMON_H -+#define AVUTIL_COMMON_H -+ -+#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && \ -+ !defined(UINT64_C) -+# error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS -+#endif -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "attributes.h" -+#include "macros.h" -+ -+// rounded division & shift -+#define RSHIFT(a, b) \ -+ ((a) > 0 ? ((a) + ((1 << (b)) >> 1)) >> (b) \ -+ : ((a) + ((1 << (b)) >> 1) - 1) >> (b)) -+/* assume b>0 */ -+#define ROUNDED_DIV(a, b) \ -+ (((a) >= 0 ? (a) + ((b) >> 1) : (a) - ((b) >> 1)) / (b)) -+/* Fast a/(1<=0 and b>=0 */ -+#define AV_CEIL_RSHIFT(a, b) \ -+ (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) : ((a) + (1 << (b)) - 1) >> (b)) -+/* Backwards compat. */ -+#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT -+ -+#define FFUDIV(a, b) (((a) > 0 ? (a) : (a) - (b) + 1) / (b)) -+#define FFUMOD(a, b) ((a) - (b)*FFUDIV(a, b)) -+ -+/** -+ * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as -+ * they are not representable as absolute values of their type. This is the same -+ * as with *abs() -+ * @see FFNABS() -+ */ -+#define FFABS(a) ((a) >= 0 ? (a) : (-(a))) -+#define FFSIGN(a) ((a) > 0 ? 1 : -1) -+ -+/** -+ * Negative Absolute value. -+ * this works for all integers of all types. -+ * As with many macros, this evaluates its argument twice, it thus must not have -+ * a sideeffect, that is FFNABS(x++) has undefined behavior. -+ */ -+#define FFNABS(a) ((a) <= 0 ? (a) : (-(a))) -+ -+/** -+ * Unsigned Absolute value. -+ * This takes the absolute value of a signed int and returns it as a unsigned. -+ * This also works with INT_MIN which would otherwise not be representable -+ * As with many macros, this evaluates its argument twice. -+ */ -+#define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) -+#define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) -+ -+/* misc math functions */ -+ -+#ifdef HAVE_AV_CONFIG_H -+# include "config.h" -+# include "intmath.h" -+#endif -+ -+#ifndef av_ceil_log2 -+# define av_ceil_log2 av_ceil_log2_c -+#endif -+#ifndef av_clip -+# define av_clip av_clip_c -+#endif -+#ifndef av_clip64 -+# define av_clip64 av_clip64_c -+#endif -+#ifndef av_clip_uint8 -+# define av_clip_uint8 av_clip_uint8_c -+#endif -+#ifndef av_clip_int8 -+# define av_clip_int8 av_clip_int8_c -+#endif -+#ifndef av_clip_uint16 -+# define av_clip_uint16 av_clip_uint16_c -+#endif -+#ifndef av_clip_int16 -+# define av_clip_int16 av_clip_int16_c -+#endif -+#ifndef av_clipl_int32 -+# define av_clipl_int32 av_clipl_int32_c -+#endif -+#ifndef av_clip_intp2 -+# define av_clip_intp2 av_clip_intp2_c -+#endif -+#ifndef av_clip_uintp2 -+# define av_clip_uintp2 av_clip_uintp2_c -+#endif -+#ifndef av_mod_uintp2 -+# define av_mod_uintp2 av_mod_uintp2_c -+#endif -+#ifndef av_sat_add32 -+# define av_sat_add32 av_sat_add32_c -+#endif -+#ifndef av_sat_dadd32 -+# define av_sat_dadd32 av_sat_dadd32_c -+#endif -+#ifndef av_sat_sub32 -+# define av_sat_sub32 av_sat_sub32_c -+#endif -+#ifndef av_sat_dsub32 -+# define av_sat_dsub32 av_sat_dsub32_c -+#endif -+#ifndef av_sat_add64 -+# define av_sat_add64 av_sat_add64_c -+#endif -+#ifndef av_sat_sub64 -+# define av_sat_sub64 av_sat_sub64_c -+#endif -+#ifndef av_clipf -+# define av_clipf av_clipf_c -+#endif -+#ifndef av_clipd -+# define av_clipd av_clipd_c -+#endif -+#ifndef av_popcount -+# define av_popcount av_popcount_c -+#endif -+#ifndef av_popcount64 -+# define av_popcount64 av_popcount64_c -+#endif -+#ifndef av_parity -+# define av_parity av_parity_c -+#endif -+ -+#ifndef av_log2 -+av_const int av_log2(unsigned v); -+#endif -+ -+#ifndef av_log2_16bit -+av_const int av_log2_16bit(unsigned v); -+#endif -+ -+/** -+ * Clip a signed integer value into the amin-amax range. -+ * @param a value to clip -+ * @param amin minimum value of the clip range -+ * @param amax maximum value of the clip range -+ * @return clipped value -+ */ -+static av_always_inline av_const int av_clip_c(int a, int amin, int amax) { -+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -+ if (amin > amax) abort(); -+#endif -+ if (a < amin) -+ return amin; -+ else if (a > amax) -+ return amax; -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed 64bit integer value into the amin-amax range. -+ * @param a value to clip -+ * @param amin minimum value of the clip range -+ * @param amax maximum value of the clip range -+ * @return clipped value -+ */ -+static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, -+ int64_t amax) { -+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -+ if (amin > amax) abort(); -+#endif -+ if (a < amin) -+ return amin; -+ else if (a > amax) -+ return amax; -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed integer value into the 0-255 range. -+ * @param a value to clip -+ * @return clipped value -+ */ -+static av_always_inline av_const uint8_t av_clip_uint8_c(int a) { -+ if (a & (~0xFF)) -+ return (~a) >> 31; -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed integer value into the -128,127 range. -+ * @param a value to clip -+ * @return clipped value -+ */ -+static av_always_inline av_const int8_t av_clip_int8_c(int a) { -+ if ((a + 0x80U) & ~0xFF) -+ return (a >> 31) ^ 0x7F; -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed integer value into the 0-65535 range. -+ * @param a value to clip -+ * @return clipped value -+ */ -+static av_always_inline av_const uint16_t av_clip_uint16_c(int a) { -+ if (a & (~0xFFFF)) -+ return (~a) >> 31; -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed integer value into the -32768,32767 range. -+ * @param a value to clip -+ * @return clipped value -+ */ -+static av_always_inline av_const int16_t av_clip_int16_c(int a) { -+ if ((a + 0x8000U) & ~0xFFFF) -+ return (a >> 31) ^ 0x7FFF; -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed 64-bit integer value into the -2147483648,2147483647 range. -+ * @param a value to clip -+ * @return clipped value -+ */ -+static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) { -+ if ((a + 0x80000000u) & ~UINT64_C(0xFFFFFFFF)) -+ return (int32_t)((a >> 63) ^ 0x7FFFFFFF); -+ else -+ return (int32_t)a; -+} -+ -+/** -+ * Clip a signed integer into the -(2^p),(2^p-1) range. -+ * @param a value to clip -+ * @param p bit position to clip at -+ * @return clipped value -+ */ -+static av_always_inline av_const int av_clip_intp2_c(int a, int p) { -+ if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) -+ return (a >> 31) ^ ((1 << p) - 1); -+ else -+ return a; -+} -+ -+/** -+ * Clip a signed integer to an unsigned power of two range. -+ * @param a value to clip -+ * @param p bit position to clip at -+ * @return clipped value -+ */ -+static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p) { -+ if (a & ~((1 << p) - 1)) -+ return (~a) >> 31 & ((1 << p) - 1); -+ else -+ return a; -+} -+ -+/** -+ * Clear high bits from an unsigned integer starting with specific bit position -+ * @param a value to clip -+ * @param p bit position to clip at -+ * @return clipped value -+ */ -+static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, -+ unsigned p) { -+ return a & ((1U << p) - 1); -+} -+ -+/** -+ * Add two signed 32-bit values with saturation. -+ * -+ * @param a one value -+ * @param b another value -+ * @return sum with signed saturation -+ */ -+static av_always_inline int av_sat_add32_c(int a, int b) { -+ return av_clipl_int32((int64_t)a + b); -+} -+ -+/** -+ * Add a doubled value to another value with saturation at both stages. -+ * -+ * @param a first value -+ * @param b value doubled and added to a -+ * @return sum sat(a + sat(2*b)) with signed saturation -+ */ -+static av_always_inline int av_sat_dadd32_c(int a, int b) { -+ return av_sat_add32(a, av_sat_add32(b, b)); -+} -+ -+/** -+ * Subtract two signed 32-bit values with saturation. -+ * -+ * @param a one value -+ * @param b another value -+ * @return difference with signed saturation -+ */ -+static av_always_inline int av_sat_sub32_c(int a, int b) { -+ return av_clipl_int32((int64_t)a - b); -+} -+ -+/** -+ * Subtract a doubled value from another value with saturation at both stages. -+ * -+ * @param a first value -+ * @param b value doubled and subtracted from a -+ * @return difference sat(a - sat(2*b)) with signed saturation -+ */ -+static av_always_inline int av_sat_dsub32_c(int a, int b) { -+ return av_sat_sub32(a, av_sat_add32(b, b)); -+} -+ -+/** -+ * Add two signed 64-bit values with saturation. -+ * -+ * @param a one value -+ * @param b another value -+ * @return sum with signed saturation -+ */ -+static av_always_inline int64_t av_sat_add64_c(int64_t a, int64_t b) { -+#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5, 1)) || \ -+ AV_HAS_BUILTIN(__builtin_add_overflow) -+ int64_t tmp; -+ return !__builtin_add_overflow(a, b, &tmp) -+ ? tmp -+ : (tmp < 0 ? INT64_MAX : INT64_MIN); -+#else -+ int64_t s = a + (uint64_t)b; -+ if ((int64_t)(a ^ b | ~s ^ b) >= 0) return INT64_MAX ^ (b >> 63); -+ return s; -+#endif -+} -+ -+/** -+ * Subtract two signed 64-bit values with saturation. -+ * -+ * @param a one value -+ * @param b another value -+ * @return difference with signed saturation -+ */ -+static av_always_inline int64_t av_sat_sub64_c(int64_t a, int64_t b) { -+#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5, 1)) || \ -+ AV_HAS_BUILTIN(__builtin_sub_overflow) -+ int64_t tmp; -+ return !__builtin_sub_overflow(a, b, &tmp) -+ ? tmp -+ : (tmp < 0 ? INT64_MAX : INT64_MIN); -+#else -+ if (b <= 0 && a >= INT64_MAX + b) return INT64_MAX; -+ if (b >= 0 && a <= INT64_MIN + b) return INT64_MIN; -+ return a - b; -+#endif -+} -+ -+/** -+ * Clip a float value into the amin-amax range. -+ * If a is nan or -inf amin will be returned. -+ * If a is +inf amax will be returned. -+ * @param a value to clip -+ * @param amin minimum value of the clip range -+ * @param amax maximum value of the clip range -+ * @return clipped value -+ */ -+static av_always_inline av_const float av_clipf_c(float a, float amin, -+ float amax) { -+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -+ if (amin > amax) abort(); -+#endif -+ return FFMIN(FFMAX(a, amin), amax); -+} -+ -+/** -+ * Clip a double value into the amin-amax range. -+ * If a is nan or -inf amin will be returned. -+ * If a is +inf amax will be returned. -+ * @param a value to clip -+ * @param amin minimum value of the clip range -+ * @param amax maximum value of the clip range -+ * @return clipped value -+ */ -+static av_always_inline av_const double av_clipd_c(double a, double amin, -+ double amax) { -+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -+ if (amin > amax) abort(); -+#endif -+ return FFMIN(FFMAX(a, amin), amax); -+} -+ -+/** Compute ceil(log2(x)). -+ * @param x value used to compute ceil(log2(x)) -+ * @return computed ceiling of log2(x) -+ */ -+static av_always_inline av_const int av_ceil_log2_c(int x) { -+ return av_log2((x - 1U) << 1); -+} -+ -+/** -+ * Count number of bits set to one in x -+ * @param x value to count bits of -+ * @return the number of bits set to one in x -+ */ -+static av_always_inline av_const int av_popcount_c(uint32_t x) { -+ x -= (x >> 1) & 0x55555555; -+ x = (x & 0x33333333) + ((x >> 2) & 0x33333333); -+ x = (x + (x >> 4)) & 0x0F0F0F0F; -+ x += x >> 8; -+ return (x + (x >> 16)) & 0x3F; -+} -+ -+/** -+ * Count number of bits set to one in x -+ * @param x value to count bits of -+ * @return the number of bits set to one in x -+ */ -+static av_always_inline av_const int av_popcount64_c(uint64_t x) { -+ return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32)); -+} -+ -+static av_always_inline av_const int av_parity_c(uint32_t v) { -+ return av_popcount(v) & 1; -+} -+ -+/** -+ * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. -+ * -+ * @param val Output value, must be an lvalue of type uint32_t. -+ * @param GET_BYTE Expression reading one byte from the input. -+ * Evaluated up to 7 times (4 for the currently -+ * assigned Unicode range). With a memory buffer -+ * input, this could be *ptr++, or if you want to make sure -+ * that *ptr stops at the end of a NULL terminated string then -+ * *ptr ? *ptr++ : 0 -+ * @param ERROR Expression to be evaluated on invalid input, -+ * typically a goto statement. -+ * -+ * @warning ERROR should not contain a loop control statement which -+ * could interact with the internal while loop, and should force an -+ * exit from the macro code (e.g. through a goto or a return) in order -+ * to prevent undefined results. -+ */ -+#define GET_UTF8(val, GET_BYTE, ERROR) \ -+ val = (GET_BYTE); \ -+ { \ -+ uint32_t top = (val & 128) >> 1; \ -+ if ((val & 0xc0) == 0x80 || val >= 0xFE) { \ -+ ERROR \ -+ } \ -+ while (val & top) { \ -+ unsigned int tmp = (GET_BYTE)-128; \ -+ if (tmp >> 6) { \ -+ ERROR \ -+ } \ -+ val = (val << 6) + tmp; \ -+ top <<= 5; \ -+ } \ -+ val &= (top << 1) - 1; \ -+ } -+ -+/** -+ * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form. -+ * -+ * @param val Output value, must be an lvalue of type uint32_t. -+ * @param GET_16BIT Expression returning two bytes of UTF-16 data converted -+ * to native byte order. Evaluated one or two times. -+ * @param ERROR Expression to be evaluated on invalid input, -+ * typically a goto statement. -+ */ -+#define GET_UTF16(val, GET_16BIT, ERROR) \ -+ val = (GET_16BIT); \ -+ { \ -+ unsigned int hi = val - 0xD800; \ -+ if (hi < 0x800) { \ -+ val = (GET_16BIT)-0xDC00; \ -+ if (val > 0x3FFU || hi > 0x3FFU) { \ -+ ERROR \ -+ } \ -+ val += (hi << 10) + 0x10000; \ -+ } \ -+ } -+ -+/** -+ * @def PUT_UTF8(val, tmp, PUT_BYTE) -+ * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes -+ * long). -+ * @param val is an input-only argument and should be of type uint32_t. It holds -+ * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If -+ * val is given as a function it is executed only once. -+ * @param tmp is a temporary variable and should be of type uint8_t. It -+ * represents an intermediate value during conversion that is to be -+ * output by PUT_BYTE. -+ * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination. -+ * It could be a function or a statement, and uses tmp as the input byte. -+ * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be -+ * executed up to 4 times for values in the valid UTF-8 range and up to -+ * 7 times in the general case, depending on the length of the converted -+ * Unicode character. -+ */ -+#define PUT_UTF8(val, tmp, PUT_BYTE) \ -+ { \ -+ int bytes, shift; \ -+ uint32_t in = val; \ -+ if (in < 0x80) { \ -+ tmp = in; \ -+ PUT_BYTE \ -+ } else { \ -+ bytes = (av_log2(in) + 4) / 5; \ -+ shift = (bytes - 1) * 6; \ -+ tmp = (256 - (256 >> bytes)) | (in >> shift); \ -+ PUT_BYTE \ -+ while (shift >= 6) { \ -+ shift -= 6; \ -+ tmp = 0x80 | ((in >> shift) & 0x3f); \ -+ PUT_BYTE \ -+ } \ -+ } \ -+ } -+ -+/** -+ * @def PUT_UTF16(val, tmp, PUT_16BIT) -+ * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes). -+ * @param val is an input-only argument and should be of type uint32_t. It holds -+ * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If -+ * val is given as a function it is executed only once. -+ * @param tmp is a temporary variable and should be of type uint16_t. It -+ * represents an intermediate value during conversion that is to be -+ * output by PUT_16BIT. -+ * @param PUT_16BIT writes the converted UTF-16 data to any proper destination -+ * in desired endianness. It could be a function or a statement, and uses tmp -+ * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" -+ * PUT_BYTE will be executed 1 or 2 times depending on input character. -+ */ -+#define PUT_UTF16(val, tmp, PUT_16BIT) \ -+ { \ -+ uint32_t in = val; \ -+ if (in < 0x10000) { \ -+ tmp = in; \ -+ PUT_16BIT \ -+ } else { \ -+ tmp = 0xD800 | ((in - 0x10000) >> 10); \ -+ PUT_16BIT \ -+ tmp = 0xDC00 | ((in - 0x10000) & 0x3FF); \ -+ PUT_16BIT \ -+ } \ -+ } -+ -+#include "mem.h" -+ -+#ifdef HAVE_AV_CONFIG_H -+# include "internal.h" -+#endif /* HAVE_AV_CONFIG_H */ -+ -+#endif /* AVUTIL_COMMON_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/cpu.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,150 @@ -+/* -+ * Copyright (c) 2000, 2001, 2002 Fabrice Bellard -+ * -+ * 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 -+ */ -+ -+#ifndef AVUTIL_CPU_H -+#define AVUTIL_CPU_H -+ -+#include -+ -+#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ -+ -+/* lower 16 bits - CPU features */ -+#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX -+#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext -+#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext -+#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW -+#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions -+#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions -+#define AV_CPU_FLAG_SSE2SLOW \ -+ 0x40000000 ///< SSE2 supported, but usually not faster -+ ///< than regular MMX/SSE (e.g. Core1) -+#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt -+#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions -+#define AV_CPU_FLAG_SSE3SLOW \ -+ 0x20000000 ///< SSE3 supported, but usually not faster -+ ///< than regular MMX/SSE (e.g. Core1) -+#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions -+#define AV_CPU_FLAG_SSSE3SLOW \ -+ 0x4000000 ///< SSSE3 supported, but usually not faster -+#define AV_CPU_FLAG_ATOM \ -+ 0x10000000 ///< Atom processor, some SSSE3 instructions are slower -+#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions -+#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions -+#define AV_CPU_FLAG_AESNI 0x80000 ///< Advanced Encryption Standard functions -+#define AV_CPU_FLAG_AVX \ -+ 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't -+ ///< used -+#define AV_CPU_FLAG_AVXSLOW \ -+ 0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. -+ ///< Bulldozer) -+#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions -+#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions -+#define AV_CPU_FLAG_CMOV 0x1000 ///< supports cmov instruction -+#define AV_CPU_FLAG_AVX2 \ -+ 0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't -+ ///< used -+#define AV_CPU_FLAG_FMA3 0x10000 ///< Haswell FMA3 functions -+#define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 -+#define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 -+#define AV_CPU_FLAG_AVX512 \ -+ 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM -+ ///< registers aren't used -+#define AV_CPU_FLAG_AVX512ICL \ -+ 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ -+#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers. -+ -+#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard -+#define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -+#define AV_CPU_FLAG_POWER8 0x0004 ///< ISA 2.07 -+ -+#define AV_CPU_FLAG_ARMV5TE (1 << 0) -+#define AV_CPU_FLAG_ARMV6 (1 << 1) -+#define AV_CPU_FLAG_ARMV6T2 (1 << 2) -+#define AV_CPU_FLAG_VFP (1 << 3) -+#define AV_CPU_FLAG_VFPV3 (1 << 4) -+#define AV_CPU_FLAG_NEON (1 << 5) -+#define AV_CPU_FLAG_ARMV8 (1 << 6) -+#define AV_CPU_FLAG_VFP_VM \ -+ (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in -+ ///< various CPUs implementations -+#define AV_CPU_FLAG_SETEND (1 << 16) -+ -+#define AV_CPU_FLAG_MMI (1 << 0) -+#define AV_CPU_FLAG_MSA (1 << 1) -+ -+// Loongarch SIMD extension. -+#define AV_CPU_FLAG_LSX (1 << 0) -+#define AV_CPU_FLAG_LASX (1 << 1) -+ -+// RISC-V extensions -+#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank) -+#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP) -+#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP) -+#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */ -+#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */ -+#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */ -+#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's -+#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations -+ -+/** -+ * Return the flags which specify extensions supported by the CPU. -+ * The returned value is affected by av_force_cpu_flags() if that was used -+ * before. So av_get_cpu_flags() can easily be used in an application to -+ * detect the enabled cpu flags. -+ */ -+int av_get_cpu_flags(void); -+ -+/** -+ * Disables cpu detection and forces the specified flags. -+ * -1 is a special case that disables forcing of specific flags. -+ */ -+void av_force_cpu_flags(int flags); -+ -+/** -+ * Parse CPU caps from a string and update the given AV_CPU_* flags based on -+ * that. -+ * -+ * @return negative on error. -+ */ -+int av_parse_cpu_caps(unsigned* flags, const char* s); -+ -+/** -+ * @return the number of logical CPU cores present. -+ */ -+int av_cpu_count(void); -+ -+/** -+ * Overrides cpu count detection and forces the specified count. -+ * Count < 1 disables forcing of specific count. -+ */ -+void av_cpu_force_count(int count); -+ -+/** -+ * Get the maximum data alignment that may be required by FFmpeg. -+ * -+ * Note that this is affected by the build configuration and the CPU flags mask, -+ * so e.g. if the CPU supports AVX, but libavutil has been built with -+ * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through -+ * av_set_cpu_flags_mask(), then this function will behave as if AVX is not -+ * present. -+ */ -+size_t av_cpu_max_align(void); -+ -+#endif /* AVUTIL_CPU_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/dict.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,259 @@ -+/* -+ * 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 -+ */ -+ -+/** -+ * @file -+ * Public dictionary API. -+ * @deprecated -+ * AVDictionary is provided for compatibility with libav. It is both in -+ * implementation as well as API inefficient. It does not scale and is -+ * extremely slow with large dictionaries. -+ * It is recommended that new code uses our tree container from tree.c/h -+ * where applicable, which uses AVL trees to achieve O(log n) performance. -+ */ -+ -+#ifndef AVUTIL_DICT_H -+#define AVUTIL_DICT_H -+ -+#include -+ -+/** -+ * @addtogroup lavu_dict AVDictionary -+ * @ingroup lavu_data -+ * -+ * @brief Simple key:value store -+ * -+ * @{ -+ * Dictionaries are used for storing key-value pairs. -+ * -+ * - To **create an AVDictionary**, simply pass an address of a NULL -+ * pointer to av_dict_set(). NULL can be used as an empty dictionary -+ * wherever a pointer to an AVDictionary is required. -+ * - To **insert an entry**, use av_dict_set(). -+ * - Use av_dict_get() to **retrieve an entry**. -+ * - To **iterate over all entries**, use av_dict_iterate(). -+ * - In order to **free the dictionary and all its contents**, use -+ av_dict_free(). -+ * -+ @code -+ AVDictionary *d = NULL; // "create" an empty dictionary -+ AVDictionaryEntry *t = NULL; -+ -+ av_dict_set(&d, "foo", "bar", 0); // add an entry -+ -+ char *k = av_strdup("key"); // if your strings are already allocated, -+ char *v = av_strdup("value"); // you can avoid copying them like this -+ av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); -+ -+ while ((t = av_dict_iterate(d, t))) { -+ <....> // iterate over all entries in d -+ } -+ av_dict_free(&d); -+ @endcode -+ */ -+ -+/** -+ * @name AVDictionary Flags -+ * Flags that influence behavior of the matching of keys or insertion to the -+ * dictionary. -+ * @{ -+ */ -+#define AV_DICT_MATCH_CASE \ -+ 1 /**< Only get an entry with exact-case key match. Only relevant in \ -+ av_dict_get(). */ -+#define AV_DICT_IGNORE_SUFFIX \ -+ 2 /**< Return first entry in a dictionary whose first part corresponds to \ -+ the search key, ignoring the suffix of the found key string. Only \ -+ relevant in av_dict_get(). */ -+#define AV_DICT_DONT_STRDUP_KEY \ -+ 4 /**< Take ownership of a key that's been \ -+ allocated with av_malloc() or another memory allocation function. */ -+#define AV_DICT_DONT_STRDUP_VAL \ -+ 8 /**< Take ownership of a value that's been \ -+ allocated with av_malloc() or another memory allocation function. */ -+#define AV_DICT_DONT_OVERWRITE 16 /**< Don't overwrite existing entries. */ -+#define AV_DICT_APPEND \ -+ 32 /**< If the entry already exists, append to it. Note that no \ -+ delimiter is added, the strings are simply concatenated. */ -+#define AV_DICT_MULTIKEY \ -+ 64 /**< Allow to store several equal keys in the dictionary */ -+/** -+ * @} -+ */ -+ -+typedef struct AVDictionaryEntry { -+ char* key; -+ char* value; -+} AVDictionaryEntry; -+ -+typedef struct AVDictionary AVDictionary; -+ -+/** -+ * Get a dictionary entry with matching key. -+ * -+ * The returned entry key or value must not be changed, or it will -+ * cause undefined behavior. -+ * -+ * @param prev Set to the previous matching element to find the next. -+ * If set to NULL the first matching element is returned. -+ * @param key Matching key -+ * @param flags A collection of AV_DICT_* flags controlling how the -+ * entry is retrieved -+ * -+ * @return Found entry or NULL in case no matching entry was found in the -+ * dictionary -+ */ -+AVDictionaryEntry* av_dict_get(const AVDictionary* m, const char* key, -+ const AVDictionaryEntry* prev, int flags); -+ -+/** -+ * Iterate over a dictionary -+ * -+ * Iterates through all entries in the dictionary. -+ * -+ * @warning The returned AVDictionaryEntry key/value must not be changed. -+ * -+ * @warning As av_dict_set() invalidates all previous entries returned -+ * by this function, it must not be called while iterating over the dict. -+ * -+ * Typical usage: -+ * @code -+ * const AVDictionaryEntry *e = NULL; -+ * while ((e = av_dict_iterate(m, e))) { -+ * // ... -+ * } -+ * @endcode -+ * -+ * @param m The dictionary to iterate over -+ * @param prev Pointer to the previous AVDictionaryEntry, NULL initially -+ * -+ * @retval AVDictionaryEntry* The next element in the dictionary -+ * @retval NULL No more elements in the dictionary -+ */ -+const AVDictionaryEntry* av_dict_iterate(const AVDictionary* m, -+ const AVDictionaryEntry* prev); -+ -+/** -+ * Get number of entries in dictionary. -+ * -+ * @param m dictionary -+ * @return number of entries in dictionary -+ */ -+int av_dict_count(const AVDictionary* m); -+ -+/** -+ * Set the given entry in *pm, overwriting an existing entry. -+ * -+ * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, -+ * these arguments will be freed on error. -+ * -+ * @warning Adding a new entry to a dictionary invalidates all existing entries -+ * previously returned with av_dict_get() or av_dict_iterate(). -+ * -+ * @param pm Pointer to a pointer to a dictionary struct. If *pm is NULL -+ * a dictionary struct is allocated and put in *pm. -+ * @param key Entry key to add to *pm (will either be av_strduped or added -+ * as a new key depending on flags) -+ * @param value Entry value to add to *pm (will be av_strduped or added as a -+ * new key depending on flags). Passing a NULL value will cause an existing -+ * entry to be deleted. -+ * -+ * @return >= 0 on success otherwise an error code <0 -+ */ -+int av_dict_set(AVDictionary** pm, const char* key, const char* value, -+ int flags); -+ -+/** -+ * Convenience wrapper for av_dict_set() that converts the value to a string -+ * and stores it. -+ * -+ * Note: If ::AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. -+ */ -+int av_dict_set_int(AVDictionary** pm, const char* key, int64_t value, -+ int flags); -+ -+/** -+ * Parse the key/value pairs list and add the parsed entries to a dictionary. -+ * -+ * In case of failure, all the successfully set entries are stored in -+ * *pm. You may need to manually free the created dictionary. -+ * -+ * @param key_val_sep A 0-terminated list of characters used to separate -+ * key from value -+ * @param pairs_sep A 0-terminated list of characters used to separate -+ * two pairs from each other -+ * @param flags Flags to use when adding to the dictionary. -+ * ::AV_DICT_DONT_STRDUP_KEY and ::AV_DICT_DONT_STRDUP_VAL -+ * are ignored since the key/value tokens will always -+ * be duplicated. -+ * -+ * @return 0 on success, negative AVERROR code on failure -+ */ -+int av_dict_parse_string(AVDictionary** pm, const char* str, -+ const char* key_val_sep, const char* pairs_sep, -+ int flags); -+ -+/** -+ * Copy entries from one AVDictionary struct into another. -+ * -+ * @note Metadata is read using the ::AV_DICT_IGNORE_SUFFIX flag -+ * -+ * @param dst Pointer to a pointer to a AVDictionary struct to copy into. If -+ * *dst is NULL, this function will allocate a struct for you and put it in *dst -+ * @param src Pointer to the source AVDictionary struct to copy items from. -+ * @param flags Flags to use when setting entries in *dst -+ * -+ * @return 0 on success, negative AVERROR code on failure. If dst was allocated -+ * by this function, callers should free the associated memory. -+ */ -+int av_dict_copy(AVDictionary** dst, const AVDictionary* src, int flags); -+ -+/** -+ * Free all the memory allocated for an AVDictionary struct -+ * and all keys and values. -+ */ -+void av_dict_free(AVDictionary** m); -+ -+/** -+ * Get dictionary entries as a string. -+ * -+ * Create a string containing dictionary's entries. -+ * Such string may be passed back to av_dict_parse_string(). -+ * @note String is escaped with backslashes ('\'). -+ * -+ * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the -+ * same. -+ * -+ * @param[in] m The dictionary -+ * @param[out] buffer Pointer to buffer that will be allocated with -+ * string containg entries. Buffer must be freed by the caller when is no longer -+ * needed. -+ * @param[in] key_val_sep Character used to separate key from value -+ * @param[in] pairs_sep Character used to separate two pairs from each -+ * other -+ * -+ * @return >= 0 on success, negative on error -+ */ -+int av_dict_get_string(const AVDictionary* m, char** buffer, -+ const char key_val_sep, const char pairs_sep); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_DICT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/error.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,158 @@ -+/* -+ * 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 -+ */ -+ -+/** -+ * @file -+ * error code definitions -+ */ -+ -+#ifndef AVUTIL_ERROR_H -+#define AVUTIL_ERROR_H -+ -+#include -+#include -+ -+#include "macros.h" -+ -+/** -+ * @addtogroup lavu_error -+ * -+ * @{ -+ */ -+ -+/* error handling */ -+#if EDOM > 0 -+# define AVERROR(e) \ -+ (-(e)) ///< Returns a negative error code from a POSIX error code, to -+ ///< return from library functions. -+# define AVUNERROR(e) \ -+ (-(e)) ///< Returns a POSIX error code from a library function error return -+ ///< value. -+#else -+/* Some platforms have E* and errno already negated. */ -+# define AVERROR(e) (e) -+# define AVUNERROR(e) (e) -+#endif -+ -+#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d)) -+ -+#define AVERROR_BSF_NOT_FOUND \ -+ FFERRTAG(0xF8, 'B', 'S', 'F') ///< Bitstream filter not found -+#define AVERROR_BUG \ -+ FFERRTAG('B', 'U', 'G', '!') ///< Internal bug, also see AVERROR_BUG2 -+#define AVERROR_BUFFER_TOO_SMALL \ -+ FFERRTAG('B', 'U', 'F', 'S') ///< Buffer too small -+#define AVERROR_DECODER_NOT_FOUND \ -+ FFERRTAG(0xF8, 'D', 'E', 'C') ///< Decoder not found -+#define AVERROR_DEMUXER_NOT_FOUND \ -+ FFERRTAG(0xF8, 'D', 'E', 'M') ///< Demuxer not found -+#define AVERROR_ENCODER_NOT_FOUND \ -+ FFERRTAG(0xF8, 'E', 'N', 'C') ///< Encoder not found -+#define AVERROR_EOF FFERRTAG('E', 'O', 'F', ' ') ///< End of file -+#define AVERROR_EXIT \ -+ FFERRTAG('E', 'X', 'I', 'T') ///< Immediate exit was requested; the called -+ ///< function should not be restarted -+#define AVERROR_EXTERNAL \ -+ FFERRTAG('E', 'X', 'T', ' ') ///< Generic error in an external library -+#define AVERROR_FILTER_NOT_FOUND \ -+ FFERRTAG(0xF8, 'F', 'I', 'L') ///< Filter not found -+#define AVERROR_INVALIDDATA \ -+ FFERRTAG('I', 'N', 'D', 'A') ///< Invalid data found when processing input -+#define AVERROR_MUXER_NOT_FOUND \ -+ FFERRTAG(0xF8, 'M', 'U', 'X') ///< Muxer not found -+#define AVERROR_OPTION_NOT_FOUND \ -+ FFERRTAG(0xF8, 'O', 'P', 'T') ///< Option not found -+#define AVERROR_PATCHWELCOME \ -+ FFERRTAG('P', 'A', 'W', \ -+ 'E') ///< Not yet implemented in FFmpeg, patches welcome -+#define AVERROR_PROTOCOL_NOT_FOUND \ -+ FFERRTAG(0xF8, 'P', 'R', 'O') ///< Protocol not found -+ -+#define AVERROR_STREAM_NOT_FOUND \ -+ FFERRTAG(0xF8, 'S', 'T', 'R') ///< Stream not found -+/** -+ * This is semantically identical to AVERROR_BUG -+ * it has been introduced in Libav after our AVERROR_BUG and with a modified -+ * value. -+ */ -+#define AVERROR_BUG2 FFERRTAG('B', 'U', 'G', ' ') -+#define AVERROR_UNKNOWN \ -+ FFERRTAG('U', 'N', 'K', \ -+ 'N') ///< Unknown error, typically from an external library -+#define AVERROR_EXPERIMENTAL \ -+ (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set -+ ///< strict_std_compliance if you really want to use it. -+#define AVERROR_INPUT_CHANGED \ -+ (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. -+ ///< (can be OR-ed with AVERROR_OUTPUT_CHANGED) -+#define AVERROR_OUTPUT_CHANGED \ -+ (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. -+ ///< (can be OR-ed with AVERROR_INPUT_CHANGED) -+/* HTTP & RTSP errors */ -+#define AVERROR_HTTP_BAD_REQUEST FFERRTAG(0xF8, '4', '0', '0') -+#define AVERROR_HTTP_UNAUTHORIZED FFERRTAG(0xF8, '4', '0', '1') -+#define AVERROR_HTTP_FORBIDDEN FFERRTAG(0xF8, '4', '0', '3') -+#define AVERROR_HTTP_NOT_FOUND FFERRTAG(0xF8, '4', '0', '4') -+#define AVERROR_HTTP_OTHER_4XX FFERRTAG(0xF8, '4', 'X', 'X') -+#define AVERROR_HTTP_SERVER_ERROR FFERRTAG(0xF8, '5', 'X', 'X') -+ -+#define AV_ERROR_MAX_STRING_SIZE 64 -+ -+/** -+ * Put a description of the AVERROR code errnum in errbuf. -+ * In case of failure the global variable errno is set to indicate the -+ * error. Even in case of failure av_strerror() will print a generic -+ * error message indicating the errnum provided to errbuf. -+ * -+ * @param errnum error code to describe -+ * @param errbuf buffer to which description is written -+ * @param errbuf_size the size in bytes of errbuf -+ * @return 0 on success, a negative value if a description for errnum -+ * cannot be found -+ */ -+int av_strerror(int errnum, char* errbuf, size_t errbuf_size); -+ -+/** -+ * Fill the provided buffer with a string containing an error string -+ * corresponding to the AVERROR code errnum. -+ * -+ * @param errbuf a buffer -+ * @param errbuf_size size in bytes of errbuf -+ * @param errnum error code to describe -+ * @return the buffer in input, filled with the error description -+ * @see av_strerror() -+ */ -+static inline char* av_make_error_string(char* errbuf, size_t errbuf_size, -+ int errnum) { -+ av_strerror(errnum, errbuf, errbuf_size); -+ return errbuf; -+} -+ -+/** -+ * Convenience macro, the return value should be used only directly in -+ * function arguments but never stand-alone. -+ */ -+#define av_err2str(errnum) \ -+ av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, \ -+ AV_ERROR_MAX_STRING_SIZE, errnum) -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_ERROR_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/frame.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,960 @@ -+/* -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @ingroup lavu_frame -+ * reference-counted frame API -+ */ -+ -+#ifndef AVUTIL_FRAME_H -+#define AVUTIL_FRAME_H -+ -+#include -+#include -+ -+#include "avutil.h" -+#include "buffer.h" -+#include "channel_layout.h" -+#include "dict.h" -+#include "rational.h" -+#include "samplefmt.h" -+#include "pixfmt.h" -+#include "version.h" -+ -+/** -+ * @defgroup lavu_frame AVFrame -+ * @ingroup lavu_data -+ * -+ * @{ -+ * AVFrame is an abstraction for reference-counted raw multimedia data. -+ */ -+ -+enum AVFrameSideDataType { -+ /** -+ * The data is the AVPanScan struct defined in libavcodec. -+ */ -+ AV_FRAME_DATA_PANSCAN, -+ /** -+ * ATSC A53 Part 4 Closed Captions. -+ * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. -+ * The number of bytes of CC data is AVFrameSideData.size. -+ */ -+ AV_FRAME_DATA_A53_CC, -+ /** -+ * Stereoscopic 3d metadata. -+ * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. -+ */ -+ AV_FRAME_DATA_STEREO3D, -+ /** -+ * The data is the AVMatrixEncoding enum defined in -+ * libavutil/channel_layout.h. -+ */ -+ AV_FRAME_DATA_MATRIXENCODING, -+ /** -+ * Metadata relevant to a downmix procedure. -+ * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. -+ */ -+ AV_FRAME_DATA_DOWNMIX_INFO, -+ /** -+ * ReplayGain information in the form of the AVReplayGain struct. -+ */ -+ AV_FRAME_DATA_REPLAYGAIN, -+ /** -+ * This side data contains a 3x3 transformation matrix describing an affine -+ * transformation that needs to be applied to the frame for correct -+ * presentation. -+ * -+ * See libavutil/display.h for a detailed description of the data. -+ */ -+ AV_FRAME_DATA_DISPLAYMATRIX, -+ /** -+ * Active Format Description data consisting of a single byte as specified -+ * in ETSI TS 101 154 using AVActiveFormatDescription enum. -+ */ -+ AV_FRAME_DATA_AFD, -+ /** -+ * Motion vectors exported by some codecs (on demand through the export_mvs -+ * flag set in the libavcodec AVCodecContext flags2 option). -+ * The data is the AVMotionVector struct defined in -+ * libavutil/motion_vector.h. -+ */ -+ AV_FRAME_DATA_MOTION_VECTORS, -+ /** -+ * Recommmends skipping the specified number of samples. This is exported -+ * only if the "skip_manual" AVOption is set in libavcodec. -+ * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. -+ * @code -+ * u32le number of samples to skip from start of this packet -+ * u32le number of samples to skip from end of this packet -+ * u8 reason for start skip -+ * u8 reason for end skip (0=padding silence, 1=convergence) -+ * @endcode -+ */ -+ AV_FRAME_DATA_SKIP_SAMPLES, -+ /** -+ * This side data must be associated with an audio frame and corresponds to -+ * enum AVAudioServiceType defined in avcodec.h. -+ */ -+ AV_FRAME_DATA_AUDIO_SERVICE_TYPE, -+ /** -+ * Mastering display metadata associated with a video frame. The payload is -+ * an AVMasteringDisplayMetadata type and contains information about the -+ * mastering display color volume. -+ */ -+ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, -+ /** -+ * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. -+ * This is set on the first frame of a GOP that has a temporal reference of 0. -+ */ -+ AV_FRAME_DATA_GOP_TIMECODE, -+ -+ /** -+ * The data represents the AVSphericalMapping structure defined in -+ * libavutil/spherical.h. -+ */ -+ AV_FRAME_DATA_SPHERICAL, -+ -+ /** -+ * Content light level (based on CTA-861.3). This payload contains data in -+ * the form of the AVContentLightMetadata struct. -+ */ -+ AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, -+ -+ /** -+ * The data contains an ICC profile as an opaque octet buffer following the -+ * format described by ISO 15076-1 with an optional name defined in the -+ * metadata key entry "name". -+ */ -+ AV_FRAME_DATA_ICC_PROFILE, -+ -+ /** -+ * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 -+ * uint32_t where the first uint32_t describes how many (1-3) of the other -+ * timecodes are used. The timecode format is described in the documentation -+ * of av_timecode_get_smpte_from_framenum() function in libavutil/timecode.h. -+ */ -+ AV_FRAME_DATA_S12M_TIMECODE, -+ -+ /** -+ * HDR dynamic metadata associated with a video frame. The payload is -+ * an AVDynamicHDRPlus type and contains information for color -+ * volume transform - application 4 of SMPTE 2094-40:2016 standard. -+ */ -+ AV_FRAME_DATA_DYNAMIC_HDR_PLUS, -+ -+ /** -+ * Regions Of Interest, the data is an array of AVRegionOfInterest type, the -+ * number of array element is implied by AVFrameSideData.size / -+ * AVRegionOfInterest.self_size. -+ */ -+ AV_FRAME_DATA_REGIONS_OF_INTEREST, -+ -+ /** -+ * Encoding parameters for a video frame, as described by AVVideoEncParams. -+ */ -+ AV_FRAME_DATA_VIDEO_ENC_PARAMS, -+ -+ /** -+ * User data unregistered metadata associated with a video frame. -+ * This is the H.26[45] UDU SEI message, and shouldn't be used for any other -+ * purpose The data is stored as uint8_t in AVFrameSideData.data which is 16 -+ * bytes of uuid_iso_iec_11578 followed by AVFrameSideData.size - 16 bytes of -+ * user_data_payload_byte. -+ */ -+ AV_FRAME_DATA_SEI_UNREGISTERED, -+ -+ /** -+ * Film grain parameters for a frame, described by AVFilmGrainParams. -+ * Must be present for every frame which should have film grain applied. -+ */ -+ AV_FRAME_DATA_FILM_GRAIN_PARAMS, -+ -+ /** -+ * Bounding boxes for object detection and classification, -+ * as described by AVDetectionBBoxHeader. -+ */ -+ AV_FRAME_DATA_DETECTION_BBOXES, -+ -+ /** -+ * Dolby Vision RPU raw data, suitable for passing to x265 -+ * or other libraries. Array of uint8_t, with NAL emulation -+ * bytes intact. -+ */ -+ AV_FRAME_DATA_DOVI_RPU_BUFFER, -+ -+ /** -+ * Parsed Dolby Vision metadata, suitable for passing to a software -+ * implementation. The payload is the AVDOVIMetadata struct defined in -+ * libavutil/dovi_meta.h. -+ */ -+ AV_FRAME_DATA_DOVI_METADATA, -+ -+ /** -+ * HDR Vivid dynamic metadata associated with a video frame. The payload is -+ * an AVDynamicHDRVivid type and contains information for color -+ * volume transform - CUVA 005.1-2021. -+ */ -+ AV_FRAME_DATA_DYNAMIC_HDR_VIVID, -+ -+ /** -+ * Ambient viewing environment metadata, as defined by H.274. -+ */ -+ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, -+}; -+ -+enum AVActiveFormatDescription { -+ AV_AFD_SAME = 8, -+ AV_AFD_4_3 = 9, -+ AV_AFD_16_9 = 10, -+ AV_AFD_14_9 = 11, -+ AV_AFD_4_3_SP_14_9 = 13, -+ AV_AFD_16_9_SP_14_9 = 14, -+ AV_AFD_SP_4_3 = 15, -+}; -+ -+/** -+ * Structure to hold side data for an AVFrame. -+ * -+ * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be -+ * added to the end with a minor bump. -+ */ -+typedef struct AVFrameSideData { -+ enum AVFrameSideDataType type; -+ uint8_t* data; -+ size_t size; -+ AVDictionary* metadata; -+ AVBufferRef* buf; -+} AVFrameSideData; -+ -+/** -+ * Structure describing a single Region Of Interest. -+ * -+ * When multiple regions are defined in a single side-data block, they -+ * should be ordered from most to least important - some encoders are only -+ * capable of supporting a limited number of distinct regions, so will have -+ * to truncate the list. -+ * -+ * When overlapping regions are defined, the first region containing a given -+ * area of the frame applies. -+ */ -+typedef struct AVRegionOfInterest { -+ /** -+ * Must be set to the size of this data structure (that is, -+ * sizeof(AVRegionOfInterest)). -+ */ -+ uint32_t self_size; -+ /** -+ * Distance in pixels from the top edge of the frame to the top and -+ * bottom edges and from the left edge of the frame to the left and -+ * right edges of the rectangle defining this region of interest. -+ * -+ * The constraints on a region are encoder dependent, so the region -+ * actually affected may be slightly larger for alignment or other -+ * reasons. -+ */ -+ int top; -+ int bottom; -+ int left; -+ int right; -+ /** -+ * Quantisation offset. -+ * -+ * Must be in the range -1 to +1. A value of zero indicates no quality -+ * change. A negative value asks for better quality (less quantisation), -+ * while a positive value asks for worse quality (greater quantisation). -+ * -+ * The range is calibrated so that the extreme values indicate the -+ * largest possible offset - if the rest of the frame is encoded with the -+ * worst possible quality, an offset of -1 indicates that this region -+ * should be encoded with the best possible quality anyway. Intermediate -+ * values are then interpolated in some codec-dependent way. -+ * -+ * For example, in 10-bit H.264 the quantisation parameter varies between -+ * -12 and 51. A typical qoffset value of -1/10 therefore indicates that -+ * this region should be encoded with a QP around one-tenth of the full -+ * range better than the rest of the frame. So, if most of the frame -+ * were to be encoded with a QP of around 30, this region would get a QP -+ * of around 24 (an offset of approximately -1/10 * (51 - -12) = -6.3). -+ * An extreme value of -1 would indicate that this region should be -+ * encoded with the best possible quality regardless of the treatment of -+ * the rest of the frame - that is, should be encoded at a QP of -12. -+ */ -+ AVRational qoffset; -+} AVRegionOfInterest; -+ -+/** -+ * This structure describes decoded (raw) audio or video data. -+ * -+ * AVFrame must be allocated using av_frame_alloc(). Note that this only -+ * allocates the AVFrame itself, the buffers for the data must be managed -+ * through other means (see below). -+ * AVFrame must be freed with av_frame_free(). -+ * -+ * AVFrame is typically allocated once and then reused multiple times to hold -+ * different data (e.g. a single AVFrame to hold frames received from a -+ * decoder). In such a case, av_frame_unref() will free any references held by -+ * the frame and reset it to its original clean state before it -+ * is reused again. -+ * -+ * The data described by an AVFrame is usually reference counted through the -+ * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / -+ * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at -+ * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, -+ * every single data plane must be contained in one of the buffers in -+ * AVFrame.buf or AVFrame.extended_buf. -+ * There may be a single buffer for all the data, or one separate buffer for -+ * each plane, or anything in between. -+ * -+ * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added -+ * to the end with a minor bump. -+ * -+ * Fields can be accessed through AVOptions, the name string used, matches the -+ * C structure field name for fields accessible through AVOptions. The AVClass -+ * for AVFrame can be obtained from avcodec_get_frame_class() -+ */ -+typedef struct AVFrame { -+#define AV_NUM_DATA_POINTERS 8 -+ /** -+ * pointer to the picture/channel planes. -+ * This might be different from the first allocated byte. For video, -+ * it could even point to the end of the image data. -+ * -+ * All pointers in data and extended_data must point into one of the -+ * AVBufferRef in buf or extended_buf. -+ * -+ * Some decoders access areas outside 0,0 - width,height, please -+ * see avcodec_align_dimensions2(). Some filters and swscale can read -+ * up to 16 bytes beyond the planes, if these filters are to be used, -+ * then 16 extra bytes must be allocated. -+ * -+ * NOTE: Pointers not needed by the format MUST be set to NULL. -+ * -+ * @attention In case of video, the data[] pointers can point to the -+ * end of image data in order to reverse line order, when used in -+ * combination with negative values in the linesize[] array. -+ */ -+ uint8_t* data[AV_NUM_DATA_POINTERS]; -+ -+ /** -+ * For video, a positive or negative value, which is typically indicating -+ * the size in bytes of each picture line, but it can also be: -+ * - the negative byte size of lines for vertical flipping -+ * (with data[n] pointing to the end of the data -+ * - a positive or negative multiple of the byte size as for accessing -+ * even and odd fields of a frame (possibly flipped) -+ * -+ * For audio, only linesize[0] may be set. For planar audio, each channel -+ * plane must be the same size. -+ * -+ * For video the linesizes should be multiples of the CPUs alignment -+ * preference, this is 16 or 32 for modern desktop CPUs. -+ * Some code requires such alignment other code can be slower without -+ * correct alignment, for yet other it makes no difference. -+ * -+ * @note The linesize may be larger than the size of usable data -- there -+ * may be extra padding present for performance reasons. -+ * -+ * @attention In case of video, line size values can be negative to achieve -+ * a vertically inverted iteration over image lines. -+ */ -+ int linesize[AV_NUM_DATA_POINTERS]; -+ -+ /** -+ * pointers to the data planes/channels. -+ * -+ * For video, this should simply point to data[]. -+ * -+ * For planar audio, each channel has a separate data pointer, and -+ * linesize[0] contains the size of each channel buffer. -+ * For packed audio, there is just one data pointer, and linesize[0] -+ * contains the total size of the buffer for all channels. -+ * -+ * Note: Both data and extended_data should always be set in a valid frame, -+ * but for planar audio with more channels that can fit in data, -+ * extended_data must be used in order to access all channels. -+ */ -+ uint8_t** extended_data; -+ -+ /** -+ * @name Video dimensions -+ * Video frames only. The coded dimensions (in pixels) of the video frame, -+ * i.e. the size of the rectangle that contains some well-defined values. -+ * -+ * @note The part of the frame intended for display/presentation is further -+ * restricted by the @ref cropping "Cropping rectangle". -+ * @{ -+ */ -+ int width, height; -+ /** -+ * @} -+ */ -+ -+ /** -+ * number of audio samples (per channel) described by this frame -+ */ -+ int nb_samples; -+ -+ /** -+ * format of the frame, -1 if unknown or unset -+ * Values correspond to enum AVPixelFormat for video frames, -+ * enum AVSampleFormat for audio) -+ */ -+ int format; -+ -+ /** -+ * 1 -> keyframe, 0-> not -+ */ -+ int key_frame; -+ -+ /** -+ * Picture type of the frame. -+ */ -+ enum AVPictureType pict_type; -+ -+ /** -+ * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified. -+ */ -+ AVRational sample_aspect_ratio; -+ -+ /** -+ * Presentation timestamp in time_base units (time when frame should be shown -+ * to user). -+ */ -+ int64_t pts; -+ -+ /** -+ * DTS copied from the AVPacket that triggered returning this frame. (if frame -+ * threading isn't used) This is also the Presentation time of this AVFrame -+ * calculated from only AVPacket.dts values without pts values. -+ */ -+ int64_t pkt_dts; -+ -+ /** -+ * Time base for the timestamps in this frame. -+ * In the future, this field may be set on frames output by decoders or -+ * filters, but its value will be by default ignored on input to encoders -+ * or filters. -+ */ -+ AVRational time_base; -+ -+#if FF_API_FRAME_PICTURE_NUMBER -+ /** -+ * picture number in bitstream order -+ */ -+ attribute_deprecated int coded_picture_number; -+ /** -+ * picture number in display order -+ */ -+ attribute_deprecated int display_picture_number; -+#endif -+ -+ /** -+ * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) -+ */ -+ int quality; -+ -+ /** -+ * for some private data of the user -+ */ -+ void* opaque; -+ -+ /** -+ * When decoding, this signals how much the picture must be delayed. -+ * extra_delay = repeat_pict / (2*fps) -+ */ -+ int repeat_pict; -+ -+ /** -+ * The content of the picture is interlaced. -+ */ -+ int interlaced_frame; -+ -+ /** -+ * If the content is interlaced, is top field displayed first. -+ */ -+ int top_field_first; -+ -+ /** -+ * Tell user application that palette has changed from previous frame. -+ */ -+ int palette_has_changed; -+ -+#if FF_API_REORDERED_OPAQUE -+ /** -+ * reordered opaque 64 bits (generally an integer or a double precision float -+ * PTS but can be anything). -+ * The user sets AVCodecContext.reordered_opaque to represent the input at -+ * that time, -+ * the decoder reorders values as needed and sets AVFrame.reordered_opaque -+ * to exactly one of the values provided by the user through -+ * AVCodecContext.reordered_opaque -+ * -+ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead -+ */ -+ attribute_deprecated int64_t reordered_opaque; -+#endif -+ -+ /** -+ * Sample rate of the audio data. -+ */ -+ int sample_rate; -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * Channel layout of the audio data. -+ * @deprecated use ch_layout instead -+ */ -+ attribute_deprecated uint64_t channel_layout; -+#endif -+ -+ /** -+ * AVBuffer references backing the data for this frame. All the pointers in -+ * data and extended_data must point inside one of the buffers in buf or -+ * extended_buf. This array must be filled contiguously -- if buf[i] is -+ * non-NULL then buf[j] must also be non-NULL for all j < i. -+ * -+ * There may be at most one AVBuffer per data plane, so for video this array -+ * always contains all the references. For planar audio with more than -+ * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in -+ * this array. Then the extra AVBufferRef pointers are stored in the -+ * extended_buf array. -+ */ -+ AVBufferRef* buf[AV_NUM_DATA_POINTERS]; -+ -+ /** -+ * For planar audio which requires more than AV_NUM_DATA_POINTERS -+ * AVBufferRef pointers, this array will hold all the references which -+ * cannot fit into AVFrame.buf. -+ * -+ * Note that this is different from AVFrame.extended_data, which always -+ * contains all the pointers. This array only contains the extra pointers, -+ * which cannot fit into AVFrame.buf. -+ * -+ * This array is always allocated using av_malloc() by whoever constructs -+ * the frame. It is freed in av_frame_unref(). -+ */ -+ AVBufferRef** extended_buf; -+ /** -+ * Number of elements in extended_buf. -+ */ -+ int nb_extended_buf; -+ -+ AVFrameSideData** side_data; -+ int nb_side_data; -+ -+/** -+ * @defgroup lavu_frame_flags AV_FRAME_FLAGS -+ * @ingroup lavu_frame -+ * Flags describing additional frame properties. -+ * -+ * @{ -+ */ -+ -+/** -+ * The frame data may be corrupted, e.g. due to decoding errors. -+ */ -+#define AV_FRAME_FLAG_CORRUPT (1 << 0) -+/** -+ * A flag to mark the frames which need to be decoded, but shouldn't be output. -+ */ -+#define AV_FRAME_FLAG_DISCARD (1 << 2) -+ /** -+ * @} -+ */ -+ -+ /** -+ * Frame flags, a combination of @ref lavu_frame_flags -+ */ -+ int flags; -+ -+ /** -+ * MPEG vs JPEG YUV range. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVColorRange color_range; -+ -+ enum AVColorPrimaries color_primaries; -+ -+ enum AVColorTransferCharacteristic color_trc; -+ -+ /** -+ * YUV colorspace type. -+ * - encoding: Set by user -+ * - decoding: Set by libavcodec -+ */ -+ enum AVColorSpace colorspace; -+ -+ enum AVChromaLocation chroma_location; -+ -+ /** -+ * frame timestamp estimated using various heuristics, in stream time base -+ * - encoding: unused -+ * - decoding: set by libavcodec, read by user. -+ */ -+ int64_t best_effort_timestamp; -+ -+ /** -+ * reordered pos from the last AVPacket that has been input into the decoder -+ * - encoding: unused -+ * - decoding: Read by user. -+ */ -+ int64_t pkt_pos; -+ -+#if FF_API_PKT_DURATION -+ /** -+ * duration of the corresponding packet, expressed in -+ * AVStream->time_base units, 0 if unknown. -+ * - encoding: unused -+ * - decoding: Read by user. -+ * -+ * @deprecated use duration instead -+ */ -+ attribute_deprecated int64_t pkt_duration; -+#endif -+ -+ /** -+ * metadata. -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ AVDictionary* metadata; -+ -+ /** -+ * decode error flags of the frame, set to a combination of -+ * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there -+ * were errors during the decoding. -+ * - encoding: unused -+ * - decoding: set by libavcodec, read by user. -+ */ -+ int decode_error_flags; -+#define FF_DECODE_ERROR_INVALID_BITSTREAM 1 -+#define FF_DECODE_ERROR_MISSING_REFERENCE 2 -+#define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 -+#define FF_DECODE_ERROR_DECODE_SLICES 8 -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * number of audio channels, only used for audio. -+ * - encoding: unused -+ * - decoding: Read by user. -+ * @deprecated use ch_layout instead -+ */ -+ attribute_deprecated int channels; -+#endif -+ -+ /** -+ * size of the corresponding packet containing the compressed -+ * frame. -+ * It is set to a negative value if unknown. -+ * - encoding: unused -+ * - decoding: set by libavcodec, read by user. -+ */ -+ int pkt_size; -+ -+ /** -+ * For hwaccel-format frames, this should be a reference to the -+ * AVHWFramesContext describing the frame. -+ */ -+ AVBufferRef* hw_frames_ctx; -+ -+ /** -+ * AVBufferRef for free use by the API user. FFmpeg will never check the -+ * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when -+ * the frame is unreferenced. av_frame_copy_props() calls create a new -+ * reference with av_buffer_ref() for the target frame's opaque_ref field. -+ * -+ * This is unrelated to the opaque field, although it serves a similar -+ * purpose. -+ */ -+ AVBufferRef* opaque_ref; -+ -+ /** -+ * @anchor cropping -+ * @name Cropping -+ * Video frames only. The number of pixels to discard from the the -+ * top/bottom/left/right border of the frame to obtain the sub-rectangle of -+ * the frame intended for presentation. -+ * @{ -+ */ -+ size_t crop_top; -+ size_t crop_bottom; -+ size_t crop_left; -+ size_t crop_right; -+ /** -+ * @} -+ */ -+ -+ /** -+ * AVBufferRef for internal use by a single libav* library. -+ * Must not be used to transfer data between libraries. -+ * Has to be NULL when ownership of the frame leaves the respective library. -+ * -+ * Code outside the FFmpeg libs should never check or change the contents of -+ * the buffer ref. -+ * -+ * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced. -+ * av_frame_copy_props() calls create a new reference with av_buffer_ref() -+ * for the target frame's private_ref field. -+ */ -+ AVBufferRef* private_ref; -+ -+ /** -+ * Channel layout of the audio data. -+ */ -+ AVChannelLayout ch_layout; -+ -+ /** -+ * Duration of the frame, in the same units as pts. 0 if unknown. -+ */ -+ int64_t duration; -+} AVFrame; -+ -+/** -+ * Allocate an AVFrame and set its fields to default values. The resulting -+ * struct must be freed using av_frame_free(). -+ * -+ * @return An AVFrame filled with default values or NULL on failure. -+ * -+ * @note this only allocates the AVFrame itself, not the data buffers. Those -+ * must be allocated through other means, e.g. with av_frame_get_buffer() or -+ * manually. -+ */ -+AVFrame* av_frame_alloc(void); -+ -+/** -+ * Free the frame and any dynamically allocated objects in it, -+ * e.g. extended_data. If the frame is reference counted, it will be -+ * unreferenced first. -+ * -+ * @param frame frame to be freed. The pointer will be set to NULL. -+ */ -+void av_frame_free(AVFrame** frame); -+ -+/** -+ * Set up a new reference to the data described by the source frame. -+ * -+ * Copy frame properties from src to dst and create a new reference for each -+ * AVBufferRef from src. -+ * -+ * If src is not reference counted, new buffers are allocated and the data is -+ * copied. -+ * -+ * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), -+ * or newly allocated with av_frame_alloc() before calling this -+ * function, or undefined behavior will occur. -+ * -+ * @return 0 on success, a negative AVERROR on error -+ */ -+int av_frame_ref(AVFrame* dst, const AVFrame* src); -+ -+/** -+ * Create a new frame that references the same data as src. -+ * -+ * This is a shortcut for av_frame_alloc()+av_frame_ref(). -+ * -+ * @return newly created AVFrame on success, NULL on error. -+ */ -+AVFrame* av_frame_clone(const AVFrame* src); -+ -+/** -+ * Unreference all the buffers referenced by frame and reset the frame fields. -+ */ -+void av_frame_unref(AVFrame* frame); -+ -+/** -+ * Move everything contained in src to dst and reset src. -+ * -+ * @warning: dst is not unreferenced, but directly overwritten without reading -+ * or deallocating its contents. Call av_frame_unref(dst) manually -+ * before calling this function to ensure that no memory is leaked. -+ */ -+void av_frame_move_ref(AVFrame* dst, AVFrame* src); -+ -+/** -+ * Allocate new buffer(s) for audio or video data. -+ * -+ * The following fields must be set on frame before calling this function: -+ * - format (pixel format for video, sample format for audio) -+ * - width and height for video -+ * - nb_samples and ch_layout for audio -+ * -+ * This function will fill AVFrame.data and AVFrame.buf arrays and, if -+ * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. -+ * For planar formats, one buffer will be allocated for each plane. -+ * -+ * @warning: if frame already has been allocated, calling this function will -+ * leak memory. In addition, undefined behavior can occur in certain -+ * cases. -+ * -+ * @param frame frame in which to store the new buffers. -+ * @param align Required buffer size alignment. If equal to 0, alignment will be -+ * chosen automatically for the current CPU. It is highly -+ * recommended to pass 0 here unless you know what you are doing. -+ * -+ * @return 0 on success, a negative AVERROR on error. -+ */ -+int av_frame_get_buffer(AVFrame* frame, int align); -+ -+/** -+ * Check if the frame data is writable. -+ * -+ * @return A positive value if the frame data is writable (which is true if and -+ * only if each of the underlying buffers has only one reference, namely the one -+ * stored in this frame). Return 0 otherwise. -+ * -+ * If 1 is returned the answer is valid until av_buffer_ref() is called on any -+ * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). -+ * -+ * @see av_frame_make_writable(), av_buffer_is_writable() -+ */ -+int av_frame_is_writable(AVFrame* frame); -+ -+/** -+ * Ensure that the frame data is writable, avoiding data copy if possible. -+ * -+ * Do nothing if the frame is writable, allocate new buffers and copy the data -+ * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy -+ * is always made. -+ * -+ * @return 0 on success, a negative AVERROR on error. -+ * -+ * @see av_frame_is_writable(), av_buffer_is_writable(), -+ * av_buffer_make_writable() -+ */ -+int av_frame_make_writable(AVFrame* frame); -+ -+/** -+ * Copy the frame data from src to dst. -+ * -+ * This function does not allocate anything, dst must be already initialized and -+ * allocated with the same parameters as src. -+ * -+ * This function only copies the frame data (i.e. the contents of the data / -+ * extended data arrays), not any other properties. -+ * -+ * @return >= 0 on success, a negative AVERROR on error. -+ */ -+int av_frame_copy(AVFrame* dst, const AVFrame* src); -+ -+/** -+ * Copy only "metadata" fields from src to dst. -+ * -+ * Metadata for the purpose of this function are those fields that do not affect -+ * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample -+ * aspect ratio (for video), but not width/height or channel layout. -+ * Side data is also copied. -+ */ -+int av_frame_copy_props(AVFrame* dst, const AVFrame* src); -+ -+/** -+ * Get the buffer reference a given data plane is stored in. -+ * -+ * @param frame the frame to get the plane's buffer from -+ * @param plane index of the data plane of interest in frame->extended_data. -+ * -+ * @return the buffer reference that contains the plane or NULL if the input -+ * frame is not valid. -+ */ -+AVBufferRef* av_frame_get_plane_buffer(AVFrame* frame, int plane); -+ -+/** -+ * Add a new side data to a frame. -+ * -+ * @param frame a frame to which the side data should be added -+ * @param type type of the added side data -+ * @param size size of the side data -+ * -+ * @return newly added side data on success, NULL on error -+ */ -+AVFrameSideData* av_frame_new_side_data(AVFrame* frame, -+ enum AVFrameSideDataType type, -+ size_t size); -+ -+/** -+ * Add a new side data to a frame from an existing AVBufferRef -+ * -+ * @param frame a frame to which the side data should be added -+ * @param type the type of the added side data -+ * @param buf an AVBufferRef to add as side data. The ownership of -+ * the reference is transferred to the frame. -+ * -+ * @return newly added side data on success, NULL on error. On failure -+ * the frame is unchanged and the AVBufferRef remains owned by -+ * the caller. -+ */ -+AVFrameSideData* av_frame_new_side_data_from_buf(AVFrame* frame, -+ enum AVFrameSideDataType type, -+ AVBufferRef* buf); -+ -+/** -+ * @return a pointer to the side data of a given type on success, NULL if there -+ * is no side data with such type in this frame. -+ */ -+AVFrameSideData* av_frame_get_side_data(const AVFrame* frame, -+ enum AVFrameSideDataType type); -+ -+/** -+ * Remove and free all side data instances of the given type. -+ */ -+void av_frame_remove_side_data(AVFrame* frame, enum AVFrameSideDataType type); -+ -+/** -+ * Flags for frame cropping. -+ */ -+enum { -+ /** -+ * Apply the maximum possible cropping, even if it requires setting the -+ * AVFrame.data[] entries to unaligned pointers. Passing unaligned data -+ * to FFmpeg API is generally not allowed, and causes undefined behavior -+ * (such as crashes). You can pass unaligned data only to FFmpeg APIs that -+ * are explicitly documented to accept it. Use this flag only if you -+ * absolutely know what you are doing. -+ */ -+ AV_FRAME_CROP_UNALIGNED = 1 << 0, -+}; -+ -+/** -+ * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ -+ * crop_bottom fields. If cropping is successful, the function will adjust the -+ * data pointers and the width/height fields, and set the crop fields to 0. -+ * -+ * In all cases, the cropping boundaries will be rounded to the inherent -+ * alignment of the pixel format. In some cases, such as for opaque hwaccel -+ * formats, the left/top cropping is ignored. The crop fields are set to 0 even -+ * if the cropping was rounded or ignored. -+ * -+ * @param frame the frame which should be cropped -+ * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. -+ * -+ * @return >= 0 on success, a negative AVERROR on error. If the cropping fields -+ * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. -+ */ -+int av_frame_apply_cropping(AVFrame* frame, int flags); -+ -+/** -+ * @return a string identifying the side data type -+ */ -+const char* av_frame_side_data_name(enum AVFrameSideDataType type); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_FRAME_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,606 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVUTIL_HWCONTEXT_H -+#define AVUTIL_HWCONTEXT_H -+ -+#include "buffer.h" -+#include "frame.h" -+#include "log.h" -+#include "pixfmt.h" -+ -+enum AVHWDeviceType { -+ AV_HWDEVICE_TYPE_NONE, -+ AV_HWDEVICE_TYPE_VDPAU, -+ AV_HWDEVICE_TYPE_CUDA, -+ AV_HWDEVICE_TYPE_VAAPI, -+ AV_HWDEVICE_TYPE_DXVA2, -+ AV_HWDEVICE_TYPE_QSV, -+ AV_HWDEVICE_TYPE_VIDEOTOOLBOX, -+ AV_HWDEVICE_TYPE_D3D11VA, -+ AV_HWDEVICE_TYPE_DRM, -+ AV_HWDEVICE_TYPE_OPENCL, -+ AV_HWDEVICE_TYPE_MEDIACODEC, -+ AV_HWDEVICE_TYPE_VULKAN, -+}; -+ -+typedef struct AVHWDeviceInternal AVHWDeviceInternal; -+ -+/** -+ * This struct aggregates all the (hardware/vendor-specific) "high-level" state, -+ * i.e. state that is not tied to a concrete processing configuration. -+ * E.g., in an API that supports hardware-accelerated encoding and decoding, -+ * this struct will (if possible) wrap the state that is common to both encoding -+ * and decoding and from which specific instances of encoders or decoders can be -+ * derived. -+ * -+ * This struct is reference-counted with the AVBuffer mechanism. The -+ * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field -+ * points to the actual AVHWDeviceContext. Further objects derived from -+ * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with -+ * specific properties) will hold an internal reference to it. After all the -+ * references are released, the AVHWDeviceContext itself will be freed, -+ * optionally invoking a user-specified callback for uninitializing the hardware -+ * state. -+ */ -+typedef struct AVHWDeviceContext { -+ /** -+ * A class for logging. Set by av_hwdevice_ctx_alloc(). -+ */ -+ const AVClass* av_class; -+ -+ /** -+ * Private data used internally by libavutil. Must not be accessed in any -+ * way by the caller. -+ */ -+ AVHWDeviceInternal* internal; -+ -+ /** -+ * This field identifies the underlying API used for hardware access. -+ * -+ * This field is set when this struct is allocated and never changed -+ * afterwards. -+ */ -+ enum AVHWDeviceType type; -+ -+ /** -+ * The format-specific data, allocated and freed by libavutil along with -+ * this context. -+ * -+ * Should be cast by the user to the format-specific context defined in the -+ * corresponding header (hwcontext_*.h) and filled as described in the -+ * documentation before calling av_hwdevice_ctx_init(). -+ * -+ * After calling av_hwdevice_ctx_init() this struct should not be modified -+ * by the caller. -+ */ -+ void* hwctx; -+ -+ /** -+ * This field may be set by the caller before calling av_hwdevice_ctx_init(). -+ * -+ * If non-NULL, this callback will be called when the last reference to -+ * this context is unreferenced, immediately before it is freed. -+ * -+ * @note when other objects (e.g an AVHWFramesContext) are derived from this -+ * struct, this callback will be invoked after all such child objects -+ * are fully uninitialized and their respective destructors invoked. -+ */ -+ void (*free)(struct AVHWDeviceContext* ctx); -+ -+ /** -+ * Arbitrary user data, to be used e.g. by the free() callback. -+ */ -+ void* user_opaque; -+} AVHWDeviceContext; -+ -+typedef struct AVHWFramesInternal AVHWFramesInternal; -+ -+/** -+ * This struct describes a set or pool of "hardware" frames (i.e. those with -+ * data not located in normal system memory). All the frames in the pool are -+ * assumed to be allocated in the same way and interchangeable. -+ * -+ * This struct is reference-counted with the AVBuffer mechanism and tied to a -+ * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor -+ * yields a reference, whose data field points to the actual AVHWFramesContext -+ * struct. -+ */ -+typedef struct AVHWFramesContext { -+ /** -+ * A class for logging. -+ */ -+ const AVClass* av_class; -+ -+ /** -+ * Private data used internally by libavutil. Must not be accessed in any -+ * way by the caller. -+ */ -+ AVHWFramesInternal* internal; -+ -+ /** -+ * A reference to the parent AVHWDeviceContext. This reference is owned and -+ * managed by the enclosing AVHWFramesContext, but the caller may derive -+ * additional references from it. -+ */ -+ AVBufferRef* device_ref; -+ -+ /** -+ * The parent AVHWDeviceContext. This is simply a pointer to -+ * device_ref->data provided for convenience. -+ * -+ * Set by libavutil in av_hwframe_ctx_init(). -+ */ -+ AVHWDeviceContext* device_ctx; -+ -+ /** -+ * The format-specific data, allocated and freed automatically along with -+ * this context. -+ * -+ * Should be cast by the user to the format-specific context defined in the -+ * corresponding header (hwframe_*.h) and filled as described in the -+ * documentation before calling av_hwframe_ctx_init(). -+ * -+ * After any frames using this context are created, the contents of this -+ * struct should not be modified by the caller. -+ */ -+ void* hwctx; -+ -+ /** -+ * This field may be set by the caller before calling av_hwframe_ctx_init(). -+ * -+ * If non-NULL, this callback will be called when the last reference to -+ * this context is unreferenced, immediately before it is freed. -+ */ -+ void (*free)(struct AVHWFramesContext* ctx); -+ -+ /** -+ * Arbitrary user data, to be used e.g. by the free() callback. -+ */ -+ void* user_opaque; -+ -+ /** -+ * A pool from which the frames are allocated by av_hwframe_get_buffer(). -+ * This field may be set by the caller before calling av_hwframe_ctx_init(). -+ * The buffers returned by calling av_buffer_pool_get() on this pool must -+ * have the properties described in the documentation in the corresponding hw -+ * type's header (hwcontext_*.h). The pool will be freed strictly before -+ * this struct's free() callback is invoked. -+ * -+ * This field may be NULL, then libavutil will attempt to allocate a pool -+ * internally. Note that certain device types enforce pools allocated at -+ * fixed size (frame count), which cannot be extended dynamically. In such a -+ * case, initial_pool_size must be set appropriately. -+ */ -+ AVBufferPool* pool; -+ -+ /** -+ * Initial size of the frame pool. If a device type does not support -+ * dynamically resizing the pool, then this is also the maximum pool size. -+ * -+ * May be set by the caller before calling av_hwframe_ctx_init(). Must be -+ * set if pool is NULL and the device type does not support dynamic pools. -+ */ -+ int initial_pool_size; -+ -+ /** -+ * The pixel format identifying the underlying HW surface type. -+ * -+ * Must be a hwaccel format, i.e. the corresponding descriptor must have the -+ * AV_PIX_FMT_FLAG_HWACCEL flag set. -+ * -+ * Must be set by the user before calling av_hwframe_ctx_init(). -+ */ -+ enum AVPixelFormat format; -+ -+ /** -+ * The pixel format identifying the actual data layout of the hardware -+ * frames. -+ * -+ * Must be set by the caller before calling av_hwframe_ctx_init(). -+ * -+ * @note when the underlying API does not provide the exact data layout, but -+ * only the colorspace/bit depth, this field should be set to the fully -+ * planar version of that format (e.g. for 8-bit 420 YUV it should be -+ * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else). -+ */ -+ enum AVPixelFormat sw_format; -+ -+ /** -+ * The allocated dimensions of the frames in this pool. -+ * -+ * Must be set by the user before calling av_hwframe_ctx_init(). -+ */ -+ int width, height; -+} AVHWFramesContext; -+ -+/** -+ * Look up an AVHWDeviceType by name. -+ * -+ * @param name String name of the device type (case-insensitive). -+ * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if -+ * not found. -+ */ -+enum AVHWDeviceType av_hwdevice_find_type_by_name(const char* name); -+ -+/** Get the string name of an AVHWDeviceType. -+ * -+ * @param type Type from enum AVHWDeviceType. -+ * @return Pointer to a static string containing the name, or NULL if the type -+ * is not valid. -+ */ -+const char* av_hwdevice_get_type_name(enum AVHWDeviceType type); -+ -+/** -+ * Iterate over supported device types. -+ * -+ * @param prev AV_HWDEVICE_TYPE_NONE initially, then the previous type -+ * returned by this function in subsequent iterations. -+ * @return The next usable device type from enum AVHWDeviceType, or -+ * AV_HWDEVICE_TYPE_NONE if there are no more. -+ */ -+enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); -+ -+/** -+ * Allocate an AVHWDeviceContext for a given hardware type. -+ * -+ * @param type the type of the hardware device to allocate. -+ * @return a reference to the newly created AVHWDeviceContext on success or NULL -+ * on failure. -+ */ -+AVBufferRef* av_hwdevice_ctx_alloc(enum AVHWDeviceType type); -+ -+/** -+ * Finalize the device context before use. This function must be called after -+ * the context is filled with all the required information and before it is -+ * used in any way. -+ * -+ * @param ref a reference to the AVHWDeviceContext -+ * @return 0 on success, a negative AVERROR code on failure -+ */ -+int av_hwdevice_ctx_init(AVBufferRef* ref); -+ -+/** -+ * Open a device of the specified type and create an AVHWDeviceContext for it. -+ * -+ * This is a convenience function intended to cover the simple cases. Callers -+ * who need to fine-tune device creation/management should open the device -+ * manually and then wrap it in an AVHWDeviceContext using -+ * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init(). -+ * -+ * The returned context is already initialized and ready for use, the caller -+ * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of -+ * the created AVHWDeviceContext are set by this function and should not be -+ * touched by the caller. -+ * -+ * @param device_ctx On success, a reference to the newly-created device context -+ * will be written here. The reference is owned by the caller -+ * and must be released with av_buffer_unref() when no longer -+ * needed. On failure, NULL will be written to this pointer. -+ * @param type The type of the device to create. -+ * @param device A type-specific string identifying the device to open. -+ * @param opts A dictionary of additional (type-specific) options to use in -+ * opening the device. The dictionary remains owned by the caller. -+ * @param flags currently unused -+ * -+ * @return 0 on success, a negative AVERROR code on failure. -+ */ -+int av_hwdevice_ctx_create(AVBufferRef** device_ctx, enum AVHWDeviceType type, -+ const char* device, AVDictionary* opts, int flags); -+ -+/** -+ * Create a new device of the specified type from an existing device. -+ * -+ * If the source device is a device of the target type or was originally -+ * derived from such a device (possibly through one or more intermediate -+ * devices of other types), then this will return a reference to the -+ * existing device of the same type as is requested. -+ * -+ * Otherwise, it will attempt to derive a new device from the given source -+ * device. If direct derivation to the new type is not implemented, it will -+ * attempt the same derivation from each ancestor of the source device in -+ * turn looking for an implemented derivation method. -+ * -+ * @param dst_ctx On success, a reference to the newly-created -+ * AVHWDeviceContext. -+ * @param type The type of the new device to create. -+ * @param src_ctx A reference to an existing AVHWDeviceContext which will be -+ * used to create the new device. -+ * @param flags Currently unused; should be set to zero. -+ * @return Zero on success, a negative AVERROR code on failure. -+ */ -+int av_hwdevice_ctx_create_derived(AVBufferRef** dst_ctx, -+ enum AVHWDeviceType type, -+ AVBufferRef* src_ctx, int flags); -+ -+/** -+ * Create a new device of the specified type from an existing device. -+ * -+ * This function performs the same action as av_hwdevice_ctx_create_derived, -+ * however, it is able to set options for the new device to be derived. -+ * -+ * @param dst_ctx On success, a reference to the newly-created -+ * AVHWDeviceContext. -+ * @param type The type of the new device to create. -+ * @param src_ctx A reference to an existing AVHWDeviceContext which will be -+ * used to create the new device. -+ * @param options Options for the new device to create, same format as in -+ * av_hwdevice_ctx_create. -+ * @param flags Currently unused; should be set to zero. -+ * @return Zero on success, a negative AVERROR code on failure. -+ */ -+int av_hwdevice_ctx_create_derived_opts(AVBufferRef** dst_ctx, -+ enum AVHWDeviceType type, -+ AVBufferRef* src_ctx, -+ AVDictionary* options, int flags); -+ -+/** -+ * Allocate an AVHWFramesContext tied to a given device context. -+ * -+ * @param device_ctx a reference to a AVHWDeviceContext. This function will make -+ * a new reference for internal use, the one passed to the -+ * function remains owned by the caller. -+ * @return a reference to the newly created AVHWFramesContext on success or NULL -+ * on failure. -+ */ -+AVBufferRef* av_hwframe_ctx_alloc(AVBufferRef* device_ctx); -+ -+/** -+ * Finalize the context before use. This function must be called after the -+ * context is filled with all the required information and before it is attached -+ * to any frames. -+ * -+ * @param ref a reference to the AVHWFramesContext -+ * @return 0 on success, a negative AVERROR code on failure -+ */ -+int av_hwframe_ctx_init(AVBufferRef* ref); -+ -+/** -+ * Allocate a new frame attached to the given AVHWFramesContext. -+ * -+ * @param hwframe_ctx a reference to an AVHWFramesContext -+ * @param frame an empty (freshly allocated or unreffed) frame to be filled with -+ * newly allocated buffers. -+ * @param flags currently unused, should be set to zero -+ * @return 0 on success, a negative AVERROR code on failure -+ */ -+int av_hwframe_get_buffer(AVBufferRef* hwframe_ctx, AVFrame* frame, int flags); -+ -+/** -+ * Copy data to or from a hw surface. At least one of dst/src must have an -+ * AVHWFramesContext attached. -+ * -+ * If src has an AVHWFramesContext attached, then the format of dst (if set) -+ * must use one of the formats returned by av_hwframe_transfer_get_formats(src, -+ * AV_HWFRAME_TRANSFER_DIRECTION_FROM). -+ * If dst has an AVHWFramesContext attached, then the format of src must use one -+ * of the formats returned by av_hwframe_transfer_get_formats(dst, -+ * AV_HWFRAME_TRANSFER_DIRECTION_TO) -+ * -+ * dst may be "clean" (i.e. with data/buf pointers unset), in which case the -+ * data buffers will be allocated by this function using av_frame_get_buffer(). -+ * If dst->format is set, then this format will be used, otherwise (when -+ * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. -+ * -+ * The two frames must have matching allocated dimensions (i.e. equal to -+ * AVHWFramesContext.width/height), since not all device types support -+ * transferring a sub-rectangle of the whole surface. The display dimensions -+ * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but -+ * also have to be equal for both frames. When the display dimensions are -+ * smaller than the allocated dimensions, the content of the padding in the -+ * destination frame is unspecified. -+ * -+ * @param dst the destination frame. dst is not touched on failure. -+ * @param src the source frame. -+ * @param flags currently unused, should be set to zero -+ * @return 0 on success, a negative AVERROR error code on failure. -+ */ -+int av_hwframe_transfer_data(AVFrame* dst, const AVFrame* src, int flags); -+ -+enum AVHWFrameTransferDirection { -+ /** -+ * Transfer the data from the queried hw frame. -+ */ -+ AV_HWFRAME_TRANSFER_DIRECTION_FROM, -+ -+ /** -+ * Transfer the data to the queried hw frame. -+ */ -+ AV_HWFRAME_TRANSFER_DIRECTION_TO, -+}; -+ -+/** -+ * Get a list of possible source or target formats usable in -+ * av_hwframe_transfer_data(). -+ * -+ * @param hwframe_ctx the frame context to obtain the information for -+ * @param dir the direction of the transfer -+ * @param formats the pointer to the output format list will be written here. -+ * The list is terminated with AV_PIX_FMT_NONE and must be freed -+ * by the caller when no longer needed using av_free(). -+ * If this function returns successfully, the format list will -+ * have at least one item (not counting the terminator). -+ * On failure, the contents of this pointer are unspecified. -+ * @param flags currently unused, should be set to zero -+ * @return 0 on success, a negative AVERROR code on failure. -+ */ -+int av_hwframe_transfer_get_formats(AVBufferRef* hwframe_ctx, -+ enum AVHWFrameTransferDirection dir, -+ enum AVPixelFormat** formats, int flags); -+ -+/** -+ * This struct describes the constraints on hardware frames attached to -+ * a given device with a hardware-specific configuration. This is returned -+ * by av_hwdevice_get_hwframe_constraints() and must be freed by -+ * av_hwframe_constraints_free() after use. -+ */ -+typedef struct AVHWFramesConstraints { -+ /** -+ * A list of possible values for format in the hw_frames_ctx, -+ * terminated by AV_PIX_FMT_NONE. This member will always be filled. -+ */ -+ enum AVPixelFormat* valid_hw_formats; -+ -+ /** -+ * A list of possible values for sw_format in the hw_frames_ctx, -+ * terminated by AV_PIX_FMT_NONE. Can be NULL if this information is -+ * not known. -+ */ -+ enum AVPixelFormat* valid_sw_formats; -+ -+ /** -+ * The minimum size of frames in this hw_frames_ctx. -+ * (Zero if not known.) -+ */ -+ int min_width; -+ int min_height; -+ -+ /** -+ * The maximum size of frames in this hw_frames_ctx. -+ * (INT_MAX if not known / no limit.) -+ */ -+ int max_width; -+ int max_height; -+} AVHWFramesConstraints; -+ -+/** -+ * Allocate a HW-specific configuration structure for a given HW device. -+ * After use, the user must free all members as required by the specific -+ * hardware structure being used, then free the structure itself with -+ * av_free(). -+ * -+ * @param device_ctx a reference to the associated AVHWDeviceContext. -+ * @return The newly created HW-specific configuration structure on -+ * success or NULL on failure. -+ */ -+void* av_hwdevice_hwconfig_alloc(AVBufferRef* device_ctx); -+ -+/** -+ * Get the constraints on HW frames given a device and the HW-specific -+ * configuration to be used with that device. If no HW-specific -+ * configuration is provided, returns the maximum possible capabilities -+ * of the device. -+ * -+ * @param ref a reference to the associated AVHWDeviceContext. -+ * @param hwconfig a filled HW-specific configuration structure, or NULL -+ * to return the maximum possible capabilities of the device. -+ * @return AVHWFramesConstraints structure describing the constraints -+ * on the device, or NULL if not available. -+ */ -+AVHWFramesConstraints* av_hwdevice_get_hwframe_constraints( -+ AVBufferRef* ref, const void* hwconfig); -+ -+/** -+ * Free an AVHWFrameConstraints structure. -+ * -+ * @param constraints The (filled or unfilled) AVHWFrameConstraints structure. -+ */ -+void av_hwframe_constraints_free(AVHWFramesConstraints** constraints); -+ -+/** -+ * Flags to apply to frame mappings. -+ */ -+enum { -+ /** -+ * The mapping must be readable. -+ */ -+ AV_HWFRAME_MAP_READ = 1 << 0, -+ /** -+ * The mapping must be writeable. -+ */ -+ AV_HWFRAME_MAP_WRITE = 1 << 1, -+ /** -+ * The mapped frame will be overwritten completely in subsequent -+ * operations, so the current frame data need not be loaded. Any values -+ * which are not overwritten are unspecified. -+ */ -+ AV_HWFRAME_MAP_OVERWRITE = 1 << 2, -+ /** -+ * The mapping must be direct. That is, there must not be any copying in -+ * the map or unmap steps. Note that performance of direct mappings may -+ * be much lower than normal memory. -+ */ -+ AV_HWFRAME_MAP_DIRECT = 1 << 3, -+}; -+ -+/** -+ * Map a hardware frame. -+ * -+ * This has a number of different possible effects, depending on the format -+ * and origin of the src and dst frames. On input, src should be a usable -+ * frame with valid buffers and dst should be blank (typically as just created -+ * by av_frame_alloc()). src should have an associated hwframe context, and -+ * dst may optionally have a format and associated hwframe context. -+ * -+ * If src was created by mapping a frame from the hwframe context of dst, -+ * then this function undoes the mapping - dst is replaced by a reference to -+ * the frame that src was originally mapped from. -+ * -+ * If both src and dst have an associated hwframe context, then this function -+ * attempts to map the src frame from its hardware context to that of dst and -+ * then fill dst with appropriate data to be usable there. This will only be -+ * possible if the hwframe contexts and associated devices are compatible - -+ * given compatible devices, av_hwframe_ctx_create_derived() can be used to -+ * create a hwframe context for dst in which mapping should be possible. -+ * -+ * If src has a hwframe context but dst does not, then the src frame is -+ * mapped to normal memory and should thereafter be usable as a normal frame. -+ * If the format is set on dst, then the mapping will attempt to create dst -+ * with that format and fail if it is not possible. If format is unset (is -+ * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate -+ * format to use is (probably the sw_format of the src hwframe context). -+ * -+ * A return value of AVERROR(ENOSYS) indicates that the mapping is not -+ * possible with the given arguments and hwframe setup, while other return -+ * values indicate that it failed somehow. -+ * -+ * On failure, the destination frame will be left blank, except for the -+ * hw_frames_ctx/format fields thay may have been set by the caller - those will -+ * be preserved as they were. -+ * -+ * @param dst Destination frame, to contain the mapping. -+ * @param src Source frame, to be mapped. -+ * @param flags Some combination of AV_HWFRAME_MAP_* flags. -+ * @return Zero on success, negative AVERROR code on failure. -+ */ -+int av_hwframe_map(AVFrame* dst, const AVFrame* src, int flags); -+ -+/** -+ * Create and initialise an AVHWFramesContext as a mapping of another existing -+ * AVHWFramesContext on a different device. -+ * -+ * av_hwframe_ctx_init() should not be called after this. -+ * -+ * @param derived_frame_ctx On success, a reference to the newly created -+ * AVHWFramesContext. -+ * @param format The AVPixelFormat for the derived context. -+ * @param derived_device_ctx A reference to the device to create the new -+ * AVHWFramesContext on. -+ * @param source_frame_ctx A reference to an existing AVHWFramesContext -+ * which will be mapped to the derived context. -+ * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the -+ * mapping parameters to apply to frames which are allocated -+ * in the derived device. -+ * @return Zero on success, negative AVERROR code on failure. -+ */ -+int av_hwframe_ctx_create_derived(AVBufferRef** derived_frame_ctx, -+ enum AVPixelFormat format, -+ AVBufferRef* derived_device_ctx, -+ AVBufferRef* source_frame_ctx, int flags); -+ -+#endif /* AVUTIL_HWCONTEXT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/hwcontext_vaapi.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,117 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVUTIL_HWCONTEXT_VAAPI_H -+#define AVUTIL_HWCONTEXT_VAAPI_H -+ -+#include -+ -+/** -+ * @file -+ * API-specific header for AV_HWDEVICE_TYPE_VAAPI. -+ * -+ * Dynamic frame pools are supported, but note that any pool used as a render -+ * target is required to be of fixed size in order to be be usable as an -+ * argument to vaCreateContext(). -+ * -+ * For user-allocated pools, AVHWFramesContext.pool must return AVBufferRefs -+ * with the data pointer set to a VASurfaceID. -+ */ -+ -+enum { -+ /** -+ * The quirks field has been set by the user and should not be detected -+ * automatically by av_hwdevice_ctx_init(). -+ */ -+ AV_VAAPI_DRIVER_QUIRK_USER_SET = (1 << 0), -+ /** -+ * The driver does not destroy parameter buffers when they are used by -+ * vaRenderPicture(). Additional code will be required to destroy them -+ * separately afterwards. -+ */ -+ AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS = (1 << 1), -+ -+ /** -+ * The driver does not support the VASurfaceAttribMemoryType attribute, -+ * so the surface allocation code will not try to use it. -+ */ -+ AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE = (1 << 2), -+ -+ /** -+ * The driver does not support surface attributes at all. -+ * The surface allocation code will never pass them to surface allocation, -+ * and the results of the vaQuerySurfaceAttributes() call will be faked. -+ */ -+ AV_VAAPI_DRIVER_QUIRK_SURFACE_ATTRIBUTES = (1 << 3), -+}; -+ -+/** -+ * VAAPI connection details. -+ * -+ * Allocated as AVHWDeviceContext.hwctx -+ */ -+typedef struct AVVAAPIDeviceContext { -+ /** -+ * The VADisplay handle, to be filled by the user. -+ */ -+ VADisplay display; -+ /** -+ * Driver quirks to apply - this is filled by av_hwdevice_ctx_init(), -+ * with reference to a table of known drivers, unless the -+ * AV_VAAPI_DRIVER_QUIRK_USER_SET bit is already present. The user -+ * may need to refer to this field when performing any later -+ * operations using VAAPI with the same VADisplay. -+ */ -+ unsigned int driver_quirks; -+} AVVAAPIDeviceContext; -+ -+/** -+ * VAAPI-specific data associated with a frame pool. -+ * -+ * Allocated as AVHWFramesContext.hwctx. -+ */ -+typedef struct AVVAAPIFramesContext { -+ /** -+ * Set by the user to apply surface attributes to all surfaces in -+ * the frame pool. If null, default settings are used. -+ */ -+ VASurfaceAttrib* attributes; -+ int nb_attributes; -+ /** -+ * The surfaces IDs of all surfaces in the pool after creation. -+ * Only valid if AVHWFramesContext.initial_pool_size was positive. -+ * These are intended to be used as the render_targets arguments to -+ * vaCreateContext(). -+ */ -+ VASurfaceID* surface_ids; -+ int nb_surfaces; -+} AVVAAPIFramesContext; -+ -+/** -+ * VAAPI hardware pipeline configuration details. -+ * -+ * Allocated with av_hwdevice_hwconfig_alloc(). -+ */ -+typedef struct AVVAAPIHWConfig { -+ /** -+ * ID of a VAAPI pipeline configuration. -+ */ -+ VAConfigID config_id; -+} AVVAAPIHWConfig; -+ -+#endif /* AVUTIL_HWCONTEXT_VAAPI_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/intfloat.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,73 @@ -+/* -+ * Copyright (c) 2011 Mans Rullgard -+ * -+ * 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 -+ */ -+ -+#ifndef AVUTIL_INTFLOAT_H -+#define AVUTIL_INTFLOAT_H -+ -+#include -+#include "attributes.h" -+ -+union av_intfloat32 { -+ uint32_t i; -+ float f; -+}; -+ -+union av_intfloat64 { -+ uint64_t i; -+ double f; -+}; -+ -+/** -+ * Reinterpret a 32-bit integer as a float. -+ */ -+static av_always_inline float av_int2float(uint32_t i) { -+ union av_intfloat32 v; -+ v.i = i; -+ return v.f; -+} -+ -+/** -+ * Reinterpret a float as a 32-bit integer. -+ */ -+static av_always_inline uint32_t av_float2int(float f) { -+ union av_intfloat32 v; -+ v.f = f; -+ return v.i; -+} -+ -+/** -+ * Reinterpret a 64-bit integer as a double. -+ */ -+static av_always_inline double av_int2double(uint64_t i) { -+ union av_intfloat64 v; -+ v.i = i; -+ return v.f; -+} -+ -+/** -+ * Reinterpret a double as a 64-bit integer. -+ */ -+static av_always_inline uint64_t av_double2int(double f) { -+ union av_intfloat64 v; -+ v.f = f; -+ return v.i; -+} -+ -+#endif /* AVUTIL_INTFLOAT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/log.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,388 @@ -+/* -+ * copyright (c) 2006 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+#ifndef AVUTIL_LOG_H -+#define AVUTIL_LOG_H -+ -+#include -+#include "attributes.h" -+#include "version.h" -+ -+typedef enum { -+ AV_CLASS_CATEGORY_NA = 0, -+ AV_CLASS_CATEGORY_INPUT, -+ AV_CLASS_CATEGORY_OUTPUT, -+ AV_CLASS_CATEGORY_MUXER, -+ AV_CLASS_CATEGORY_DEMUXER, -+ AV_CLASS_CATEGORY_ENCODER, -+ AV_CLASS_CATEGORY_DECODER, -+ AV_CLASS_CATEGORY_FILTER, -+ AV_CLASS_CATEGORY_BITSTREAM_FILTER, -+ AV_CLASS_CATEGORY_SWSCALER, -+ AV_CLASS_CATEGORY_SWRESAMPLER, -+ AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, -+ AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, -+ AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, -+ AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, -+ AV_CLASS_CATEGORY_DEVICE_OUTPUT, -+ AV_CLASS_CATEGORY_DEVICE_INPUT, -+ AV_CLASS_CATEGORY_NB ///< not part of ABI/API -+} AVClassCategory; -+ -+#define AV_IS_INPUT_DEVICE(category) \ -+ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ -+ ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ -+ ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) -+ -+#define AV_IS_OUTPUT_DEVICE(category) \ -+ (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ -+ ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ -+ ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) -+ -+struct AVOptionRanges; -+ -+/** -+ * Describe the class of an AVClass context structure. That is an -+ * arbitrary struct of which the first field is a pointer to an -+ * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). -+ */ -+typedef struct AVClass { -+ /** -+ * The name of the class; usually it is the same name as the -+ * context structure type to which the AVClass is associated. -+ */ -+ const char* class_name; -+ -+ /** -+ * A pointer to a function which returns the name of a context -+ * instance ctx associated with the class. -+ */ -+ const char* (*item_name)(void* ctx); -+ -+ /** -+ * a pointer to the first option specified in the class if any or NULL -+ * -+ * @see av_set_default_options() -+ */ -+ const struct AVOption* option; -+ -+ /** -+ * LIBAVUTIL_VERSION with which this structure was created. -+ * This is used to allow fields to be added without requiring major -+ * version bumps everywhere. -+ */ -+ -+ int version; -+ -+ /** -+ * Offset in the structure where log_level_offset is stored. -+ * 0 means there is no such variable -+ */ -+ int log_level_offset_offset; -+ -+ /** -+ * Offset in the structure where a pointer to the parent context for -+ * logging is stored. For example a decoder could pass its AVCodecContext -+ * to eval as such a parent context, which an av_log() implementation -+ * could then leverage to display the parent context. -+ * The offset can be NULL. -+ */ -+ int parent_log_context_offset; -+ -+ /** -+ * Category used for visualization (like color) -+ * This is only set if the category is equal for all objects using this class. -+ * available since version (51 << 16 | 56 << 8 | 100) -+ */ -+ AVClassCategory category; -+ -+ /** -+ * Callback to return the category. -+ * available since version (51 << 16 | 59 << 8 | 100) -+ */ -+ AVClassCategory (*get_category)(void* ctx); -+ -+ /** -+ * Callback to return the supported/allowed ranges. -+ * available since version (52.12) -+ */ -+ int (*query_ranges)(struct AVOptionRanges**, void* obj, const char* key, -+ int flags); -+ -+ /** -+ * Return next AVOptions-enabled child or NULL -+ */ -+ void* (*child_next)(void* obj, void* prev); -+ -+ /** -+ * Iterate over the AVClasses corresponding to potential AVOptions-enabled -+ * children. -+ * -+ * @param iter pointer to opaque iteration state. The caller must initialize -+ * *iter to NULL before the first call. -+ * @return AVClass for the next AVOptions-enabled child or NULL if there are -+ * no more such children. -+ * -+ * @note The difference between child_next and this is that child_next -+ * iterates over _already existing_ objects, while child_class_iterate -+ * iterates over _all possible_ children. -+ */ -+ const struct AVClass* (*child_class_iterate)(void** iter); -+} AVClass; -+ -+/** -+ * @addtogroup lavu_log -+ * -+ * @{ -+ * -+ * @defgroup lavu_log_constants Logging Constants -+ * -+ * @{ -+ */ -+ -+/** -+ * Print no output. -+ */ -+#define AV_LOG_QUIET -8 -+ -+/** -+ * Something went really wrong and we will crash now. -+ */ -+#define AV_LOG_PANIC 0 -+ -+/** -+ * Something went wrong and recovery is not possible. -+ * For example, no header was found for a format which depends -+ * on headers or an illegal combination of parameters is used. -+ */ -+#define AV_LOG_FATAL 8 -+ -+/** -+ * Something went wrong and cannot losslessly be recovered. -+ * However, not all future data is affected. -+ */ -+#define AV_LOG_ERROR 16 -+ -+/** -+ * Something somehow does not look correct. This may or may not -+ * lead to problems. An example would be the use of '-vstrict -2'. -+ */ -+#define AV_LOG_WARNING 24 -+ -+/** -+ * Standard information. -+ */ -+#define AV_LOG_INFO 32 -+ -+/** -+ * Detailed information. -+ */ -+#define AV_LOG_VERBOSE 40 -+ -+/** -+ * Stuff which is only useful for libav* developers. -+ */ -+#define AV_LOG_DEBUG 48 -+ -+/** -+ * Extremely verbose debugging, useful for libav* development. -+ */ -+#define AV_LOG_TRACE 56 -+ -+#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET) -+ -+/** -+ * @} -+ */ -+ -+/** -+ * Sets additional colors for extended debugging sessions. -+ * @code -+ av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); -+ @endcode -+ * Requires 256color terminal support. Uses outside debugging is not -+ * recommended. -+ */ -+#define AV_LOG_C(x) ((x) << 8) -+ -+/** -+ * Send the specified message to the log if the level is less than or equal -+ * to the current av_log_level. By default, all logging messages are sent to -+ * stderr. This behavior can be altered by setting a different logging callback -+ * function. -+ * @see av_log_set_callback -+ * -+ * @param avcl A pointer to an arbitrary struct of which the first field is a -+ * pointer to an AVClass struct or NULL if general log. -+ * @param level The importance level of the message expressed using a @ref -+ * lavu_log_constants "Logging Constant". -+ * @param fmt The format string (printf-compatible) that specifies how -+ * subsequent arguments are converted to output. -+ */ -+void av_log(void* avcl, int level, const char* fmt, ...) av_printf_format(3, 4); -+ -+/** -+ * Send the specified message to the log once with the initial_level and then -+ * with the subsequent_level. By default, all logging messages are sent to -+ * stderr. This behavior can be altered by setting a different logging callback -+ * function. -+ * @see av_log -+ * -+ * @param avcl A pointer to an arbitrary struct of which the first field is a -+ * pointer to an AVClass struct or NULL if general log. -+ * @param initial_level importance level of the message expressed using a @ref -+ * lavu_log_constants "Logging Constant" for the first occurance. -+ * @param subsequent_level importance level of the message expressed using a -+ * @ref lavu_log_constants "Logging Constant" after the first occurance. -+ * @param fmt The format string (printf-compatible) that specifies how -+ * subsequent arguments are converted to output. -+ * @param state a variable to keep trak of if a message has already been printed -+ * this must be initialized to 0 before the first use. The same state -+ * must not be accessed by 2 Threads simultaneously. -+ */ -+void av_log_once(void* avcl, int initial_level, int subsequent_level, -+ int* state, const char* fmt, ...) av_printf_format(5, 6); -+ -+/** -+ * Send the specified message to the log if the level is less than or equal -+ * to the current av_log_level. By default, all logging messages are sent to -+ * stderr. This behavior can be altered by setting a different logging callback -+ * function. -+ * @see av_log_set_callback -+ * -+ * @param avcl A pointer to an arbitrary struct of which the first field is a -+ * pointer to an AVClass struct. -+ * @param level The importance level of the message expressed using a @ref -+ * lavu_log_constants "Logging Constant". -+ * @param fmt The format string (printf-compatible) that specifies how -+ * subsequent arguments are converted to output. -+ * @param vl The arguments referenced by the format string. -+ */ -+void av_vlog(void* avcl, int level, const char* fmt, va_list vl); -+ -+/** -+ * Get the current log level -+ * -+ * @see lavu_log_constants -+ * -+ * @return Current log level -+ */ -+int av_log_get_level(void); -+ -+/** -+ * Set the log level -+ * -+ * @see lavu_log_constants -+ * -+ * @param level Logging level -+ */ -+void av_log_set_level(int level); -+ -+/** -+ * Set the logging callback -+ * -+ * @note The callback must be thread safe, even if the application does not use -+ * threads itself as some codecs are multithreaded. -+ * -+ * @see av_log_default_callback -+ * -+ * @param callback A logging function with a compatible signature. -+ */ -+void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); -+ -+/** -+ * Default logging callback -+ * -+ * It prints the message to stderr, optionally colorizing it. -+ * -+ * @param avcl A pointer to an arbitrary struct of which the first field is a -+ * pointer to an AVClass struct. -+ * @param level The importance level of the message expressed using a @ref -+ * lavu_log_constants "Logging Constant". -+ * @param fmt The format string (printf-compatible) that specifies how -+ * subsequent arguments are converted to output. -+ * @param vl The arguments referenced by the format string. -+ */ -+void av_log_default_callback(void* avcl, int level, const char* fmt, -+ va_list vl); -+ -+/** -+ * Return the context name -+ * -+ * @param ctx The AVClass context -+ * -+ * @return The AVClass class_name -+ */ -+const char* av_default_item_name(void* ctx); -+AVClassCategory av_default_get_category(void* ptr); -+ -+/** -+ * Format a line of log the same way as the default callback. -+ * @param line buffer to receive the formatted line -+ * @param line_size size of the buffer -+ * @param print_prefix used to store whether the prefix must be printed; -+ * must point to a persistent integer initially set to 1 -+ */ -+void av_log_format_line(void* ptr, int level, const char* fmt, va_list vl, -+ char* line, int line_size, int* print_prefix); -+ -+/** -+ * Format a line of log the same way as the default callback. -+ * @param line buffer to receive the formatted line; -+ * may be NULL if line_size is 0 -+ * @param line_size size of the buffer; at most line_size-1 characters will -+ * be written to the buffer, plus one null terminator -+ * @param print_prefix used to store whether the prefix must be printed; -+ * must point to a persistent integer initially set to 1 -+ * @return Returns a negative value if an error occurred, otherwise returns -+ * the number of characters that would have been written for a -+ * sufficiently large buffer, not including the terminating null -+ * character. If the return value is not less than line_size, it means -+ * that the log message was truncated to fit the buffer. -+ */ -+int av_log_format_line2(void* ptr, int level, const char* fmt, va_list vl, -+ char* line, int line_size, int* print_prefix); -+ -+/** -+ * Skip repeated messages, this requires the user app to use av_log() instead of -+ * (f)printf as the 2 would otherwise interfere and lead to -+ * "Last message repeated x times" messages below (f)printf messages with some -+ * bad luck. -+ * Also to receive the last, "last repeated" line if any, the user app must -+ * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end -+ */ -+#define AV_LOG_SKIP_REPEATED 1 -+ -+/** -+ * Include the log severity in messages originating from codecs. -+ * -+ * Results in messages such as: -+ * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts -+ */ -+#define AV_LOG_PRINT_LEVEL 2 -+ -+void av_log_set_flags(int arg); -+int av_log_get_flags(void); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_LOG_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/macros.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,87 @@ -+/* -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @ingroup lavu -+ * Utility Preprocessor macros -+ */ -+ -+#ifndef AVUTIL_MACROS_H -+#define AVUTIL_MACROS_H -+ -+#include "libavutil/avconfig.h" -+ -+#if AV_HAVE_BIGENDIAN -+# define AV_NE(be, le) (be) -+#else -+# define AV_NE(be, le) (le) -+#endif -+ -+/** -+ * Comparator. -+ * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 -+ * if x == y. This is useful for instance in a qsort comparator callback. -+ * Furthermore, compilers are able to optimize this to branchless code, and -+ * there is no risk of overflow with signed types. -+ * As with many macros, this evaluates its argument multiple times, it thus -+ * must not have a side-effect. -+ */ -+#define FFDIFFSIGN(x, y) (((x) > (y)) - ((x) < (y))) -+ -+#define FFMAX(a, b) ((a) > (b) ? (a) : (b)) -+#define FFMAX3(a, b, c) FFMAX(FFMAX(a, b), c) -+#define FFMIN(a, b) ((a) > (b) ? (b) : (a)) -+#define FFMIN3(a, b, c) FFMIN(FFMIN(a, b), c) -+ -+#define FFSWAP(type, a, b) \ -+ do { \ -+ type SWAP_tmp = b; \ -+ b = a; \ -+ a = SWAP_tmp; \ -+ } while (0) -+#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) -+ -+#define MKTAG(a, b, c, d) \ -+ ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -+#define MKBETAG(a, b, c, d) \ -+ ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) -+ -+/** -+ * @addtogroup preproc_misc Preprocessor String Macros -+ * -+ * String manipulation macros -+ * -+ * @{ -+ */ -+ -+#define AV_STRINGIFY(s) AV_TOSTRING(s) -+#define AV_TOSTRING(s) #s -+ -+#define AV_GLUE(a, b) a##b -+#define AV_JOIN(a, b) AV_GLUE(a, b) -+ -+/** -+ * @} -+ */ -+ -+#define AV_PRAGMA(s) _Pragma(#s) -+ -+#define FFALIGN(x, a) (((x) + (a)-1) & ~((a)-1)) -+ -+#endif /* AVUTIL_MACROS_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mathematics.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,249 @@ -+/* -+ * copyright (c) 2005-2012 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @addtogroup lavu_math -+ * Mathematical utilities for working with timestamp and time base. -+ */ -+ -+#ifndef AVUTIL_MATHEMATICS_H -+#define AVUTIL_MATHEMATICS_H -+ -+#include -+#include -+#include "attributes.h" -+#include "rational.h" -+#include "intfloat.h" -+ -+#ifndef M_E -+# define M_E 2.7182818284590452354 /* e */ -+#endif -+#ifndef M_LN2 -+# define M_LN2 0.69314718055994530942 /* log_e 2 */ -+#endif -+#ifndef M_LN10 -+# define M_LN10 2.30258509299404568402 /* log_e 10 */ -+#endif -+#ifndef M_LOG2_10 -+# define M_LOG2_10 3.32192809488736234787 /* log_2 10 */ -+#endif -+#ifndef M_PHI -+# define M_PHI 1.61803398874989484820 /* phi / golden ratio */ -+#endif -+#ifndef M_PI -+# define M_PI 3.14159265358979323846 /* pi */ -+#endif -+#ifndef M_PI_2 -+# define M_PI_2 1.57079632679489661923 /* pi/2 */ -+#endif -+#ifndef M_SQRT1_2 -+# define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ -+#endif -+#ifndef M_SQRT2 -+# define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ -+#endif -+#ifndef NAN -+# define NAN av_int2float(0x7fc00000) -+#endif -+#ifndef INFINITY -+# define INFINITY av_int2float(0x7f800000) -+#endif -+ -+/** -+ * @addtogroup lavu_math -+ * -+ * @{ -+ */ -+ -+/** -+ * Rounding methods. -+ */ -+enum AVRounding { -+ AV_ROUND_ZERO = 0, ///< Round toward zero. -+ AV_ROUND_INF = 1, ///< Round away from zero. -+ AV_ROUND_DOWN = 2, ///< Round toward -infinity. -+ AV_ROUND_UP = 3, ///< Round toward +infinity. -+ AV_ROUND_NEAR_INF = -+ 5, ///< Round to nearest and halfway cases away from zero. -+ /** -+ * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through -+ * unchanged, avoiding special cases for #AV_NOPTS_VALUE. -+ * -+ * Unlike other values of the enumeration AVRounding, this value is a -+ * bitmask that must be used in conjunction with another value of the -+ * enumeration through a bitwise OR, in order to set behavior for normal -+ * cases. -+ * -+ * @code{.c} -+ * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); -+ * // Rescaling 3: -+ * // Calculating 3 * 1 / 2 -+ * // 3 / 2 is rounded up to 2 -+ * // => 2 -+ * -+ * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); -+ * // Rescaling AV_NOPTS_VALUE: -+ * // AV_NOPTS_VALUE == INT64_MIN -+ * // AV_NOPTS_VALUE is passed through -+ * // => AV_NOPTS_VALUE -+ * @endcode -+ */ -+ AV_ROUND_PASS_MINMAX = 8192, -+}; -+ -+/** -+ * Compute the greatest common divisor of two integer operands. -+ * -+ * @param a Operand -+ * @param b Operand -+ * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= -+ * 0; if a == 0 and b == 0, returns 0. -+ */ -+int64_t av_const av_gcd(int64_t a, int64_t b); -+ -+/** -+ * Rescale a 64-bit integer with rounding to nearest. -+ * -+ * The operation is mathematically equivalent to `a * b / c`, but writing that -+ * directly can overflow. -+ * -+ * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. -+ * -+ * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() -+ */ -+int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const; -+ -+/** -+ * Rescale a 64-bit integer with specified rounding. -+ * -+ * The operation is mathematically equivalent to `a * b / c`, but writing that -+ * directly can overflow, and does not support different rounding methods. -+ * If the result is not representable then INT64_MIN is returned. -+ * -+ * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() -+ */ -+int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, -+ enum AVRounding rnd) av_const; -+ -+/** -+ * Rescale a 64-bit integer by 2 rational numbers. -+ * -+ * The operation is mathematically equivalent to `a * bq / cq`. -+ * -+ * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. -+ * -+ * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() -+ */ -+int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const; -+ -+/** -+ * Rescale a 64-bit integer by 2 rational numbers with specified rounding. -+ * -+ * The operation is mathematically equivalent to `a * bq / cq`. -+ * -+ * @see av_rescale(), av_rescale_rnd(), av_rescale_q() -+ */ -+int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, -+ enum AVRounding rnd) av_const; -+ -+/** -+ * Compare two timestamps each in its own time base. -+ * -+ * @return One of the following values: -+ * - -1 if `ts_a` is before `ts_b` -+ * - 1 if `ts_a` is after `ts_b` -+ * - 0 if they represent the same position -+ * -+ * @warning -+ * The result of the function is undefined if one of the timestamps is outside -+ * the `int64_t` range when represented in the other's timebase. -+ */ -+int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b); -+ -+/** -+ * Compare the remainders of two integer operands divided by a common divisor. -+ * -+ * In other words, compare the least significant `log2(mod)` bits of integers -+ * `a` and `b`. -+ * -+ * @code{.c} -+ * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % -+ * 0x10 (0x2) av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) -+ * > 0x02 % 0x20 (0x02) -+ * @endcode -+ * -+ * @param a Operand -+ * @param b Operand -+ * @param mod Divisor; must be a power of 2 -+ * @return -+ * - a negative value if `a % mod < b % mod` -+ * - a positive value if `a % mod > b % mod` -+ * - zero if `a % mod == b % mod` -+ */ -+int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod); -+ -+/** -+ * Rescale a timestamp while preserving known durations. -+ * -+ * This function is designed to be called per audio packet to scale the input -+ * timestamp to a different time base. Compared to a simple av_rescale_q() -+ * call, this function is robust against possible inconsistent frame durations. -+ * -+ * The `last` parameter is a state variable that must be preserved for all -+ * subsequent calls for the same stream. For the first call, `*last` should be -+ * initialized to #AV_NOPTS_VALUE. -+ * -+ * @param[in] in_tb Input time base -+ * @param[in] in_ts Input timestamp -+ * @param[in] fs_tb Duration time base; typically this is finer-grained -+ * (greater) than `in_tb` and `out_tb` -+ * @param[in] duration Duration till the next call to this function (i.e. -+ * duration of the current packet/frame) -+ * @param[in,out] last Pointer to a timestamp expressed in terms of -+ * `fs_tb`, acting as a state variable -+ * @param[in] out_tb Output timebase -+ * @return Timestamp expressed in terms of `out_tb` -+ * -+ * @note In the context of this function, "duration" is in term of samples, not -+ * seconds. -+ */ -+int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts, AVRational fs_tb, -+ int duration, int64_t* last, AVRational out_tb); -+ -+/** -+ * Add a value to a timestamp. -+ * -+ * This function guarantees that when the same value is repeatly added that -+ * no accumulation of rounding errors occurs. -+ * -+ * @param[in] ts Input timestamp -+ * @param[in] ts_tb Input timestamp time base -+ * @param[in] inc Value to be added -+ * @param[in] inc_tb Time base of `inc` -+ */ -+int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, -+ int64_t inc); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_MATHEMATICS_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/mem.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,613 @@ -+/* -+ * copyright (c) 2006 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @ingroup lavu_mem -+ * Memory handling functions -+ */ -+ -+#ifndef AVUTIL_MEM_H -+#define AVUTIL_MEM_H -+ -+#include -+#include -+ -+#include "attributes.h" -+#include "avutil.h" -+#include "version.h" -+ -+/** -+ * @addtogroup lavu_mem -+ * Utilities for manipulating memory. -+ * -+ * FFmpeg has several applications of memory that are not required of a typical -+ * program. For example, the computing-heavy components like video decoding and -+ * encoding can be sped up significantly through the use of aligned memory. -+ * -+ * However, for each of FFmpeg's applications of memory, there might not be a -+ * recognized or standardized API for that specific use. Memory alignment, for -+ * instance, varies wildly depending on operating systems, architectures, and -+ * compilers. Hence, this component of @ref libavutil is created to make -+ * dealing with memory consistently possible on all platforms. -+ * -+ * @{ -+ */ -+ -+/** -+ * @defgroup lavu_mem_attrs Function Attributes -+ * Function attributes applicable to memory handling functions. -+ * -+ * These function attributes can help compilers emit more useful warnings, or -+ * generate better code. -+ * @{ -+ */ -+ -+/** -+ * @def av_malloc_attrib -+ * Function attribute denoting a malloc-like function. -+ * -+ * @see Function -+ * attribute `malloc` in GCC's documentation -+ */ -+ -+#if AV_GCC_VERSION_AT_LEAST(3, 1) -+# define av_malloc_attrib __attribute__((__malloc__)) -+#else -+# define av_malloc_attrib -+#endif -+ -+/** -+ * @def av_alloc_size(...) -+ * Function attribute used on a function that allocates memory, whose size is -+ * given by the specified parameter(s). -+ * -+ * @code{.c} -+ * void *av_malloc(size_t size) av_alloc_size(1); -+ * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2); -+ * @endcode -+ * -+ * @param ... One or two parameter indexes, separated by a comma -+ * -+ * @see Function -+ * attribute `alloc_size` in GCC's documentation -+ */ -+ -+#if AV_GCC_VERSION_AT_LEAST(4, 3) -+# define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__))) -+#else -+# define av_alloc_size(...) -+#endif -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @defgroup lavu_mem_funcs Heap Management -+ * Functions responsible for allocating, freeing, and copying memory. -+ * -+ * All memory allocation functions have a built-in upper limit of `INT_MAX` -+ * bytes. This may be changed with av_max_alloc(), although exercise extreme -+ * caution when doing so. -+ * -+ * @{ -+ */ -+ -+/** -+ * Allocate a memory block with alignment suitable for all memory accesses -+ * (including vectors if available on the CPU). -+ * -+ * @param size Size in bytes for the memory block to be allocated -+ * @return Pointer to the allocated block, or `NULL` if the block cannot -+ * be allocated -+ * @see av_mallocz() -+ */ -+void* av_malloc(size_t size) av_malloc_attrib av_alloc_size(1); -+ -+/** -+ * Allocate a memory block with alignment suitable for all memory accesses -+ * (including vectors if available on the CPU) and zero all the bytes of the -+ * block. -+ * -+ * @param size Size in bytes for the memory block to be allocated -+ * @return Pointer to the allocated block, or `NULL` if it cannot be allocated -+ * @see av_malloc() -+ */ -+void* av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1); -+ -+/** -+ * Allocate a memory block for an array with av_malloc(). -+ * -+ * The allocated memory will have size `size * nmemb` bytes. -+ * -+ * @param nmemb Number of element -+ * @param size Size of a single element -+ * @return Pointer to the allocated block, or `NULL` if the block cannot -+ * be allocated -+ * @see av_malloc() -+ */ -+av_alloc_size(1, 2) void* av_malloc_array(size_t nmemb, size_t size); -+ -+/** -+ * Allocate a memory block for an array with av_mallocz(). -+ * -+ * The allocated memory will have size `size * nmemb` bytes. -+ * -+ * @param nmemb Number of elements -+ * @param size Size of the single element -+ * @return Pointer to the allocated block, or `NULL` if the block cannot -+ * be allocated -+ * -+ * @see av_mallocz() -+ * @see av_malloc_array() -+ */ -+void* av_calloc(size_t nmemb, size_t size) av_malloc_attrib av_alloc_size(1, 2); -+ -+/** -+ * Allocate, reallocate, or free a block of memory. -+ * -+ * If `ptr` is `NULL` and `size` > 0, allocate a new block. Otherwise, expand or -+ * shrink that block of memory according to `size`. -+ * -+ * @param ptr Pointer to a memory block already allocated with -+ * av_realloc() or `NULL` -+ * @param size Size in bytes of the memory block to be allocated or -+ * reallocated -+ * -+ * @return Pointer to a newly-reallocated block or `NULL` if the block -+ * cannot be reallocated -+ * -+ * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be -+ * correctly aligned. The returned pointer must be freed after even -+ * if size is zero. -+ * @see av_fast_realloc() -+ * @see av_reallocp() -+ */ -+void* av_realloc(void* ptr, size_t size) av_alloc_size(2); -+ -+/** -+ * Allocate, reallocate, or free a block of memory through a pointer to a -+ * pointer. -+ * -+ * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is -+ * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or -+ * shrink that block of memory according to `size`. -+ * -+ * @param[in,out] ptr Pointer to a pointer to a memory block already allocated -+ * with av_realloc(), or a pointer to `NULL`. The pointer -+ * is updated on success, or freed on failure. -+ * @param[in] size Size in bytes for the memory block to be allocated or -+ * reallocated -+ * -+ * @return Zero on success, an AVERROR error code on failure -+ * -+ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be -+ * correctly aligned. -+ */ -+av_warn_unused_result int av_reallocp(void* ptr, size_t size); -+ -+/** -+ * Allocate, reallocate, or free a block of memory. -+ * -+ * This function does the same thing as av_realloc(), except: -+ * - It takes two size arguments and allocates `nelem * elsize` bytes, -+ * after checking the result of the multiplication for integer overflow. -+ * - It frees the input block in case of failure, thus avoiding the memory -+ * leak with the classic -+ * @code{.c} -+ * buf = realloc(buf); -+ * if (!buf) -+ * return -1; -+ * @endcode -+ * pattern. -+ */ -+void* av_realloc_f(void* ptr, size_t nelem, size_t elsize); -+ -+/** -+ * Allocate, reallocate, or free an array. -+ * -+ * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. -+ * -+ * @param ptr Pointer to a memory block already allocated with -+ * av_realloc() or `NULL` -+ * @param nmemb Number of elements in the array -+ * @param size Size of the single element of the array -+ * -+ * @return Pointer to a newly-reallocated block or NULL if the block -+ * cannot be reallocated -+ * -+ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be -+ * correctly aligned. The returned pointer must be freed after even if -+ * nmemb is zero. -+ * @see av_reallocp_array() -+ */ -+av_alloc_size(2, 3) void* av_realloc_array(void* ptr, size_t nmemb, -+ size_t size); -+ -+/** -+ * Allocate, reallocate an array through a pointer to a pointer. -+ * -+ * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. -+ * -+ * @param[in,out] ptr Pointer to a pointer to a memory block already -+ * allocated with av_realloc(), or a pointer to `NULL`. -+ * The pointer is updated on success, or freed on failure. -+ * @param[in] nmemb Number of elements -+ * @param[in] size Size of the single element -+ * -+ * @return Zero on success, an AVERROR error code on failure -+ * -+ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be -+ * correctly aligned. *ptr must be freed after even if nmemb is zero. -+ */ -+int av_reallocp_array(void* ptr, size_t nmemb, size_t size); -+ -+/** -+ * Reallocate the given buffer if it is not large enough, otherwise do nothing. -+ * -+ * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. -+ * -+ * If the given buffer is not large enough, and reallocation fails, `NULL` is -+ * returned and `*size` is set to 0, but the original buffer is not changed or -+ * freed. -+ * -+ * A typical use pattern follows: -+ * -+ * @code{.c} -+ * uint8_t *buf = ...; -+ * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); -+ * if (!new_buf) { -+ * // Allocation failed; clean up original buffer -+ * av_freep(&buf); -+ * return AVERROR(ENOMEM); -+ * } -+ * @endcode -+ * -+ * @param[in,out] ptr Already allocated buffer, or `NULL` -+ * @param[in,out] size Pointer to the size of buffer `ptr`. `*size` is -+ * updated to the new allocated size, in particular 0 -+ * in case of failure. -+ * @param[in] min_size Desired minimal size of buffer `ptr` -+ * @return `ptr` if the buffer is large enough, a pointer to newly reallocated -+ * buffer if the buffer was not large enough, or `NULL` in case of -+ * error -+ * @see av_realloc() -+ * @see av_fast_malloc() -+ */ -+void* av_fast_realloc(void* ptr, unsigned int* size, size_t min_size); -+ -+/** -+ * Allocate a buffer, reusing the given one if large enough. -+ * -+ * Contrary to av_fast_realloc(), the current buffer contents might not be -+ * preserved and on error the old buffer is freed, thus no special handling to -+ * avoid memleaks is necessary. -+ * -+ * `*ptr` is allowed to be `NULL`, in which case allocation always happens if -+ * `size_needed` is greater than 0. -+ * -+ * @code{.c} -+ * uint8_t *buf = ...; -+ * av_fast_malloc(&buf, ¤t_size, size_needed); -+ * if (!buf) { -+ * // Allocation failed; buf already freed -+ * return AVERROR(ENOMEM); -+ * } -+ * @endcode -+ * -+ * @param[in,out] ptr Pointer to pointer to an already allocated buffer. -+ * `*ptr` will be overwritten with pointer to new -+ * buffer on success or `NULL` on failure -+ * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is -+ * updated to the new allocated size, in particular 0 -+ * in case of failure. -+ * @param[in] min_size Desired minimal size of buffer `*ptr` -+ * @see av_realloc() -+ * @see av_fast_mallocz() -+ */ -+void av_fast_malloc(void* ptr, unsigned int* size, size_t min_size); -+ -+/** -+ * Allocate and clear a buffer, reusing the given one if large enough. -+ * -+ * Like av_fast_malloc(), but all newly allocated space is initially cleared. -+ * Reused buffer is not cleared. -+ * -+ * `*ptr` is allowed to be `NULL`, in which case allocation always happens if -+ * `size_needed` is greater than 0. -+ * -+ * @param[in,out] ptr Pointer to pointer to an already allocated buffer. -+ * `*ptr` will be overwritten with pointer to new -+ * buffer on success or `NULL` on failure -+ * @param[in,out] size Pointer to the size of buffer `*ptr`. `*size` is -+ * updated to the new allocated size, in particular 0 -+ * in case of failure. -+ * @param[in] min_size Desired minimal size of buffer `*ptr` -+ * @see av_fast_malloc() -+ */ -+void av_fast_mallocz(void* ptr, unsigned int* size, size_t min_size); -+ -+/** -+ * Free a memory block which has been allocated with a function of av_malloc() -+ * or av_realloc() family. -+ * -+ * @param ptr Pointer to the memory block which should be freed. -+ * -+ * @note `ptr = NULL` is explicitly allowed. -+ * @note It is recommended that you use av_freep() instead, to prevent leaving -+ * behind dangling pointers. -+ * @see av_freep() -+ */ -+void av_free(void* ptr); -+ -+/** -+ * Free a memory block which has been allocated with a function of av_malloc() -+ * or av_realloc() family, and set the pointer pointing to it to `NULL`. -+ * -+ * @code{.c} -+ * uint8_t *buf = av_malloc(16); -+ * av_free(buf); -+ * // buf now contains a dangling pointer to freed memory, and accidental -+ * // dereference of buf will result in a use-after-free, which may be a -+ * // security risk. -+ * -+ * uint8_t *buf = av_malloc(16); -+ * av_freep(&buf); -+ * // buf is now NULL, and accidental dereference will only result in a -+ * // NULL-pointer dereference. -+ * @endcode -+ * -+ * @param ptr Pointer to the pointer to the memory block which should be freed -+ * @note `*ptr = NULL` is safe and leads to no action. -+ * @see av_free() -+ */ -+void av_freep(void* ptr); -+ -+/** -+ * Duplicate a string. -+ * -+ * @param s String to be duplicated -+ * @return Pointer to a newly-allocated string containing a -+ * copy of `s` or `NULL` if the string cannot be allocated -+ * @see av_strndup() -+ */ -+char* av_strdup(const char* s) av_malloc_attrib; -+ -+/** -+ * Duplicate a substring of a string. -+ * -+ * @param s String to be duplicated -+ * @param len Maximum length of the resulting string (not counting the -+ * terminating byte) -+ * @return Pointer to a newly-allocated string containing a -+ * substring of `s` or `NULL` if the string cannot be allocated -+ */ -+char* av_strndup(const char* s, size_t len) av_malloc_attrib; -+ -+/** -+ * Duplicate a buffer with av_malloc(). -+ * -+ * @param p Buffer to be duplicated -+ * @param size Size in bytes of the buffer copied -+ * @return Pointer to a newly allocated buffer containing a -+ * copy of `p` or `NULL` if the buffer cannot be allocated -+ */ -+void* av_memdup(const void* p, size_t size); -+ -+/** -+ * Overlapping memcpy() implementation. -+ * -+ * @param dst Destination buffer -+ * @param back Number of bytes back to start copying (i.e. the initial size of -+ * the overlapping window); must be > 0 -+ * @param cnt Number of bytes to copy; must be >= 0 -+ * -+ * @note `cnt > back` is valid, this will copy the bytes we just copied, -+ * thus creating a repeating pattern with a period length of `back`. -+ */ -+void av_memcpy_backptr(uint8_t* dst, int back, int cnt); -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @defgroup lavu_mem_dynarray Dynamic Array -+ * -+ * Utilities to make an array grow when needed. -+ * -+ * Sometimes, the programmer would want to have an array that can grow when -+ * needed. The libavutil dynamic array utilities fill that need. -+ * -+ * libavutil supports two systems of appending elements onto a dynamically -+ * allocated array, the first one storing the pointer to the value in the -+ * array, and the second storing the value directly. In both systems, the -+ * caller is responsible for maintaining a variable containing the length of -+ * the array, as well as freeing of the array after use. -+ * -+ * The first system stores pointers to values in a block of dynamically -+ * allocated memory. Since only pointers are stored, the function does not need -+ * to know the size of the type. Both av_dynarray_add() and -+ * av_dynarray_add_nofree() implement this system. -+ * -+ * @code -+ * type **array = NULL; //< an array of pointers to values -+ * int nb = 0; //< a variable to keep track of the length of the array -+ * -+ * type to_be_added = ...; -+ * type to_be_added2 = ...; -+ * -+ * av_dynarray_add(&array, &nb, &to_be_added); -+ * if (nb == 0) -+ * return AVERROR(ENOMEM); -+ * -+ * av_dynarray_add(&array, &nb, &to_be_added2); -+ * if (nb == 0) -+ * return AVERROR(ENOMEM); -+ * -+ * // Now: -+ * // nb == 2 -+ * // &to_be_added == array[0] -+ * // &to_be_added2 == array[1] -+ * -+ * av_freep(&array); -+ * @endcode -+ * -+ * The second system stores the value directly in a block of memory. As a -+ * result, the function has to know the size of the type. av_dynarray2_add() -+ * implements this mechanism. -+ * -+ * @code -+ * type *array = NULL; //< an array of values -+ * int nb = 0; //< a variable to keep track of the length of the array -+ * -+ * type to_be_added = ...; -+ * type to_be_added2 = ...; -+ * -+ * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL); -+ * if (!addr) -+ * return AVERROR(ENOMEM); -+ * memcpy(addr, &to_be_added, sizeof(to_be_added)); -+ * -+ * // Shortcut of the above. -+ * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), -+ * (const void *)&to_be_added2); -+ * if (!addr) -+ * return AVERROR(ENOMEM); -+ * -+ * // Now: -+ * // nb == 2 -+ * // to_be_added == array[0] -+ * // to_be_added2 == array[1] -+ * -+ * av_freep(&array); -+ * @endcode -+ * -+ * @{ -+ */ -+ -+/** -+ * Add the pointer to an element to a dynamic array. -+ * -+ * The array to grow is supposed to be an array of pointers to -+ * structures, and the element to add must be a pointer to an already -+ * allocated structure. -+ * -+ * The array is reallocated when its size reaches powers of 2. -+ * Therefore, the amortized cost of adding an element is constant. -+ * -+ * In case of success, the pointer to the array is updated in order to -+ * point to the new grown array, and the number pointed to by `nb_ptr` -+ * is incremented. -+ * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and -+ * `*nb_ptr` is set to 0. -+ * -+ * @param[in,out] tab_ptr Pointer to the array to grow -+ * @param[in,out] nb_ptr Pointer to the number of elements in the array -+ * @param[in] elem Element to add -+ * @see av_dynarray_add_nofree(), av_dynarray2_add() -+ */ -+void av_dynarray_add(void* tab_ptr, int* nb_ptr, void* elem); -+ -+/** -+ * Add an element to a dynamic array. -+ * -+ * Function has the same functionality as av_dynarray_add(), -+ * but it doesn't free memory on fails. It returns error code -+ * instead and leave current buffer untouched. -+ * -+ * @return >=0 on success, negative otherwise -+ * @see av_dynarray_add(), av_dynarray2_add() -+ */ -+av_warn_unused_result int av_dynarray_add_nofree(void* tab_ptr, int* nb_ptr, -+ void* elem); -+ -+/** -+ * Add an element of size `elem_size` to a dynamic array. -+ * -+ * The array is reallocated when its number of elements reaches powers of 2. -+ * Therefore, the amortized cost of adding an element is constant. -+ * -+ * In case of success, the pointer to the array is updated in order to -+ * point to the new grown array, and the number pointed to by `nb_ptr` -+ * is incremented. -+ * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and -+ * `*nb_ptr` is set to 0. -+ * -+ * @param[in,out] tab_ptr Pointer to the array to grow -+ * @param[in,out] nb_ptr Pointer to the number of elements in the array -+ * @param[in] elem_size Size in bytes of an element in the array -+ * @param[in] elem_data Pointer to the data of the element to add. If -+ * `NULL`, the space of the newly added element is -+ * allocated but left uninitialized. -+ * -+ * @return Pointer to the data of the element to copy in the newly allocated -+ * space -+ * @see av_dynarray_add(), av_dynarray_add_nofree() -+ */ -+void* av_dynarray2_add(void** tab_ptr, int* nb_ptr, size_t elem_size, -+ const uint8_t* elem_data); -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @defgroup lavu_mem_misc Miscellaneous Functions -+ * -+ * Other functions related to memory allocation. -+ * -+ * @{ -+ */ -+ -+/** -+ * Multiply two `size_t` values checking for overflow. -+ * -+ * @param[in] a Operand of multiplication -+ * @param[in] b Operand of multiplication -+ * @param[out] r Pointer to the result of the operation -+ * @return 0 on success, AVERROR(EINVAL) on overflow -+ */ -+int av_size_mult(size_t a, size_t b, size_t* r); -+ -+/** -+ * Set the maximum size that may be allocated in one block. -+ * -+ * The value specified with this function is effective for all libavutil's @ref -+ * lavu_mem_funcs "heap management functions." -+ * -+ * By default, the max value is defined as `INT_MAX`. -+ * -+ * @param max Value to be set as the new maximum size -+ * -+ * @warning Exercise extreme caution when using this function. Don't touch -+ * this if you do not understand the full consequence of doing so. -+ */ -+void av_max_alloc(size_t max); -+ -+/** -+ * @} -+ * @} -+ */ -+ -+#endif /* AVUTIL_MEM_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/pixfmt.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,891 @@ -+/* -+ * copyright (c) 2006 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+#ifndef AVUTIL_PIXFMT_H -+#define AVUTIL_PIXFMT_H -+ -+/** -+ * @file -+ * pixel format definitions -+ */ -+ -+#include "libavutil/avconfig.h" -+#include "version.h" -+ -+#define AVPALETTE_SIZE 1024 -+#define AVPALETTE_COUNT 256 -+ -+/** -+ * Pixel format. -+ * -+ * @note -+ * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA -+ * color is put together as: -+ * (A << 24) | (R << 16) | (G << 8) | B -+ * This is stored as BGRA on little-endian CPU architectures and ARGB on -+ * big-endian CPUs. -+ * -+ * @note -+ * If the resolution is not a multiple of the chroma subsampling factor -+ * then the chroma plane resolution must be rounded up. -+ * -+ * @par -+ * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized -+ * image data is stored in AVFrame.data[0]. The palette is transported in -+ * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is -+ * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is -+ * also endian-specific). Note also that the individual RGB32 palette -+ * components stored in AVFrame.data[1] should be in the range 0..255. -+ * This is important as many custom PAL8 video codecs that were designed -+ * to run on the IBM VGA graphics adapter use 6-bit palette components. -+ * -+ * @par -+ * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like -+ * for pal8. This palette is filled in automatically by the function -+ * allocating the picture. -+ */ -+enum AVPixelFormat { -+ AV_PIX_FMT_NONE = -1, -+ AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y -+ ///< samples) -+ AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr -+ AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... -+ AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... -+ AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y -+ ///< samples) -+ AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y -+ ///< samples) -+ AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y -+ ///< samples) -+ AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y -+ ///< samples) -+ AV_PIX_FMT_GRAY8, ///< Y , 8bpp -+ AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, -+ ///< in each byte pixels are ordered from the -+ ///< msb to the lsb -+ AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, -+ ///< in each byte pixels are ordered from the -+ ///< msb to the lsb -+ AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette -+ AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), -+ ///< deprecated in favor of AV_PIX_FMT_YUV420P and -+ ///< setting color_range -+ AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), -+ ///< deprecated in favor of AV_PIX_FMT_YUV422P and -+ ///< setting color_range -+ AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), -+ ///< deprecated in favor of AV_PIX_FMT_YUV444P and -+ ///< setting color_range -+ AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 -+ AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 -+ AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) -+ AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), -+ ///< a byte contains two pixels, the first pixel in the byte -+ ///< is the one composed by the 4 msb bits -+ AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) -+ AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) -+ AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), -+ ///< a byte contains two pixels, the first pixel in the byte -+ ///< is the one composed by the 4 msb bits -+ AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) -+ AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for -+ ///< the UV components, which are interleaved (first byte U -+ ///< and the following byte V) -+ AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped -+ -+ AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... -+ AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... -+ AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... -+ AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... -+ -+ AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian -+ AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian -+ AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y -+ ///< samples) -+ AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in -+ ///< favor of AV_PIX_FMT_YUV440P and setting color_range -+ AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 -+ ///< Y & A samples) -+ AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the -+ ///< 2-byte value for each R/G/B component is stored as -+ ///< big-endian -+ AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the -+ ///< 2-byte value for each R/G/B component is stored as -+ ///< little-endian -+ -+ AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), -+ ///< big-endian -+ AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), -+ ///< little-endian -+ AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), -+ ///< big-endian , X=unused/undefined -+ AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), -+ ///< little-endian, X=unused/undefined -+ -+ AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), -+ ///< big-endian -+ AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), -+ ///< little-endian -+ AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), -+ ///< big-endian , X=unused/undefined -+ AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), -+ ///< little-endian, X=unused/undefined -+ -+ /** -+ * Hardware acceleration through VA-API, data[3] contains a -+ * VASurfaceID. -+ */ -+ AV_PIX_FMT_VAAPI, -+ -+ AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), little-endian -+ AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), big-endian -+ AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), little-endian -+ AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), big-endian -+ AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), little-endian -+ AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), big-endian -+ AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] -+ ///< contains a LPDIRECT3DSURFACE9 pointer -+ -+ AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), -+ ///< little-endian, X=unused/undefined -+ AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), -+ ///< big-endian, X=unused/undefined -+ AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), -+ ///< little-endian, X=unused/undefined -+ AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), -+ ///< big-endian, X=unused/undefined -+ AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha -+ -+ AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 -+ AV_PIX_FMT_GRAY8A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 -+ -+ AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the -+ ///< 2-byte value for each R/G/B component is stored as -+ ///< big-endian -+ AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the -+ ///< 2-byte value for each R/G/B component is stored as -+ ///< little-endian -+ -+ /** -+ * The following 12 formats have the disadvantage of needing 1 format for each -+ * bit depth. Notice that each 9/10 bits sample is stored in 16 bits with -+ * extra padding. If you want to support multiple bit depths, then using -+ * AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. -+ */ -+ AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), big-endian -+ AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), little-endian -+ AV_PIX_FMT_YUV420P10BE, ///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), big-endian -+ AV_PIX_FMT_YUV420P10LE, ///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), little-endian -+ AV_PIX_FMT_YUV422P10BE, ///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), big-endian -+ AV_PIX_FMT_YUV422P10LE, ///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), little-endian -+ AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), big-endian -+ AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), little-endian -+ AV_PIX_FMT_YUV444P10BE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), big-endian -+ AV_PIX_FMT_YUV444P10LE, ///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), little-endian -+ AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), big-endian -+ AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), little-endian -+ AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp -+ AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP -+ AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian -+ AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian -+ AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian -+ AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian -+ AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian -+ AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian -+ AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y -+ ///< & A samples) -+ AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y -+ ///< & A samples) -+ AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y & A samples), big-endian -+ AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y & A samples), little-endian -+ AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y & A samples), big-endian -+ AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y & A samples), little-endian -+ AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y & A samples), big-endian -+ AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y & A samples), little-endian -+ AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y & A samples, big-endian) -+ AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y & A samples, little-endian) -+ AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y & A samples, big-endian) -+ AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y & A samples, little-endian) -+ AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y & A samples, big-endian) -+ AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y & A samples, little-endian) -+ AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y & A samples, big-endian) -+ AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y & A samples, little-endian) -+ AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y & A samples, big-endian) -+ AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y & A samples, little-endian) -+ AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y & A samples, big-endian) -+ AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y & A samples, little-endian) -+ -+ AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] -+ ///< contains a VdpVideoSurface -+ -+ AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), -+ ///< the 2-byte value for each X/Y/Z is stored as -+ ///< little-endian, the 4 lower bits are set to 0 -+ AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), -+ ///< the 2-byte value for each X/Y/Z is stored as -+ ///< big-endian, the 4 lower bits are set to 0 -+ AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample -+ ///< per 2x1 Y samples) -+ AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb -+ ///< sample per 2x1 Y samples), little-endian -+ AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb -+ ///< sample per 2x1 Y samples), big-endian -+ -+ AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, -+ ///< the 2-byte value for each R/G/B/A component is -+ ///< stored as big-endian -+ AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, -+ ///< the 2-byte value for each R/G/B/A component is -+ ///< stored as little-endian -+ AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, -+ ///< the 2-byte value for each R/G/B/A component is -+ ///< stored as big-endian -+ AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, -+ ///< the 2-byte value for each R/G/B/A component is -+ ///< stored as little-endian -+ -+ AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb -+ -+ AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) -+ AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) -+ -+ AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp -+ AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian -+ AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian -+ /** -+ * HW acceleration through QSV, data[3] contains a pointer to the -+ * mfxFrameSurface1 structure. -+ * -+ * Before FFmpeg 5.0: -+ * mfxFrameSurface1.Data.MemId contains a pointer when importing -+ * the following frames as QSV frames: -+ * -+ * VAAPI: -+ * mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID -+ * -+ * DXVA2: -+ * mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9 -+ * -+ * FFmpeg 5.0 and above: -+ * mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair -+ * structure when importing the following frames as QSV frames: -+ * -+ * VAAPI: -+ * mfxHDLPair.first contains a VASurfaceID pointer. -+ * mfxHDLPair.second is always MFX_INFINITE. -+ * -+ * DXVA2: -+ * mfxHDLPair.first contains IDirect3DSurface9 pointer. -+ * mfxHDLPair.second is always MFX_INFINITE. -+ * -+ * D3D11: -+ * mfxHDLPair.first contains a ID3D11Texture2D pointer. -+ * mfxHDLPair.second contains the texture array index of the frame if the -+ * ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a -+ * normal texture. -+ */ -+ AV_PIX_FMT_QSV, -+ /** -+ * HW acceleration though MMAL, data[3] contains a pointer to the -+ * MMAL_BUFFER_HEADER_T structure. -+ */ -+ AV_PIX_FMT_MMAL, -+ -+ AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11 via old API, -+ ///< Picture.data[3] contains a -+ ///< ID3D11VideoDecoderOutputView pointer -+ -+ /** -+ * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers -+ * exactly as for system memory frames. -+ */ -+ AV_PIX_FMT_CUDA, -+ -+ AV_PIX_FMT_0RGB, ///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined -+ AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined -+ AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined -+ AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined -+ -+ AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), big-endian -+ AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), little-endian -+ AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), big-endian -+ AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per -+ ///< 2x2 Y samples), little-endian -+ AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), big-endian -+ AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), little-endian -+ AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), big-endian -+ AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), little-endian -+ AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), big-endian -+ AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), little-endian -+ AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), big-endian -+ AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), little-endian -+ AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian -+ AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian -+ AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian -+ AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian -+ AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 -+ ///< Y samples) full scale (JPEG), deprecated in favor -+ ///< of AV_PIX_FMT_YUV411P and setting color_range -+ -+ AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), -+ ///< 8-bit samples -+ AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), -+ ///< 8-bit samples -+ AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), -+ ///< 8-bit samples -+ AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), -+ ///< 8-bit samples -+ AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), -+ ///< 16-bit samples, little-endian -+ AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), -+ ///< 16-bit samples, big-endian -+ AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), -+ ///< 16-bit samples, little-endian -+ AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), -+ ///< 16-bit samples, big-endian -+ AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), -+ ///< 16-bit samples, little-endian -+ AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), -+ ///< 16-bit samples, big-endian -+ AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), -+ ///< 16-bit samples, little-endian -+ AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), -+ ///< 16-bit samples, big-endian -+ -+#if FF_API_XVMC -+ AV_PIX_FMT_XVMC, ///< XVideo Motion Acceleration via common packet passing -+#endif -+ -+ AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per -+ ///< 1x2 Y samples), little-endian -+ AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per -+ ///< 1x2 Y samples), big-endian -+ AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per -+ ///< 1x2 Y samples), little-endian -+ AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per -+ ///< 1x2 Y samples), big-endian -+ AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y -+ ///< & A samples), little-endian -+ AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y -+ ///< & A samples), big-endian -+ -+ AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox -+ -+ AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high -+ ///< bits, zeros in the low bits, little-endian -+ AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high -+ ///< bits, zeros in the low bits, big-endian -+ -+ AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian -+ AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian -+ -+ AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian -+ AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian -+ -+ AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec -+ -+ AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian -+ AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian -+ AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian -+ AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian -+ -+ AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian -+ AV_PIX_FMT_P016BE, ///< like NV12, with 16bpp per component, big-endian -+ -+ /** -+ * Hardware surfaces for Direct3D11. -+ * -+ * This is preferred over the legacy AV_PIX_FMT_D3D11VA_VLD. The new D3D11 -+ * hwaccel API and filtering support AV_PIX_FMT_D3D11 only. -+ * -+ * data[0] contains a ID3D11Texture2D pointer, and data[1] contains the -+ * texture array index of the frame as intptr_t if the ID3D11Texture2D is -+ * an array texture (or always 0 if it's a normal texture). -+ */ -+ AV_PIX_FMT_D3D11, -+ -+ AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian -+ AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian -+ -+ AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, -+ ///< big-endian -+ AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, -+ ///< little-endian -+ AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, -+ ///< 128bpp, big-endian -+ AV_PIX_FMT_GBRAPF32LE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, -+ ///< 128bpp, little-endian -+ -+ /** -+ * DRM-managed buffers exposed through PRIME buffer sharing. -+ * -+ * data[0] points to an AVDRMFrameDescriptor. -+ */ -+ AV_PIX_FMT_DRM_PRIME, -+ /** -+ * Hardware surfaces for OpenCL. -+ * -+ * data[i] contain 2D image objects (typed in C as cl_mem, used -+ * in OpenCL as image2d_t) for each plane of the surface. -+ */ -+ AV_PIX_FMT_OPENCL, -+ -+ AV_PIX_FMT_GRAY14BE, ///< Y , 14bpp, big-endian -+ AV_PIX_FMT_GRAY14LE, ///< Y , 14bpp, little-endian -+ -+ AV_PIX_FMT_GRAYF32BE, ///< IEEE-754 single precision Y, 32bpp, big-endian -+ AV_PIX_FMT_GRAYF32LE, ///< IEEE-754 single precision Y, 32bpp, little-endian -+ -+ AV_PIX_FMT_YUVA422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), 12b alpha, big-endian -+ AV_PIX_FMT_YUVA422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per -+ ///< 2x1 Y samples), 12b alpha, little-endian -+ AV_PIX_FMT_YUVA444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), 12b alpha, big-endian -+ AV_PIX_FMT_YUVA444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per -+ ///< 1x1 Y samples), 12b alpha, little-endian -+ -+ AV_PIX_FMT_NV24, ///< planar YUV 4:4:4, 24bpp, 1 plane for Y and 1 plane for -+ ///< the UV components, which are interleaved (first byte U -+ ///< and the following byte V) -+ AV_PIX_FMT_NV42, ///< as above, but U and V bytes are swapped -+ -+ /** -+ * Vulkan hardware images. -+ * -+ * data[0] points to an AVVkFrame -+ */ -+ AV_PIX_FMT_VULKAN, -+ -+ AV_PIX_FMT_Y210BE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the -+ ///< high bits, big-endian -+ AV_PIX_FMT_Y210LE, ///< packed YUV 4:2:2 like YUYV422, 20bpp, data in the -+ ///< high bits, little-endian -+ -+ AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G -+ ///< 10B(lsb), little-endian, X=unused/undefined -+ AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G -+ ///< 10B(lsb), big-endian, X=unused/undefined -+ AV_PIX_FMT_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G -+ ///< 10R(lsb), little-endian, X=unused/undefined -+ AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G -+ ///< 10R(lsb), big-endian, X=unused/undefined -+ -+ AV_PIX_FMT_P210BE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high -+ ///< bits, big-endian -+ AV_PIX_FMT_P210LE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high -+ ///< bits, little-endian -+ -+ AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high -+ ///< bits, big-endian -+ AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high -+ ///< bits, little-endian -+ -+ AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian -+ AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, little-endian -+ -+ AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian -+ AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian -+ -+ AV_PIX_FMT_VUYA, ///< packed VUYA 4:4:4, 32bpp, VUYAVUYA... -+ -+ AV_PIX_FMT_RGBAF16BE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, -+ ///< 64bpp, RGBARGBA..., big-endian -+ AV_PIX_FMT_RGBAF16LE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, -+ ///< 64bpp, RGBARGBA..., little-endian -+ -+ AV_PIX_FMT_VUYX, ///< packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha -+ ///< channel is left undefined -+ -+ AV_PIX_FMT_P012LE, ///< like NV12, with 12bpp per component, data in the high -+ ///< bits, zeros in the low bits, little-endian -+ AV_PIX_FMT_P012BE, ///< like NV12, with 12bpp per component, data in the high -+ ///< bits, zeros in the low bits, big-endian -+ -+ AV_PIX_FMT_Y212BE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the -+ ///< high bits, zeros in the low bits, big-endian -+ AV_PIX_FMT_Y212LE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the -+ ///< high bits, zeros in the low bits, little-endian -+ -+ AV_PIX_FMT_XV30BE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), -+ ///< big-endian, variant of Y410 where alpha channel is -+ ///< left undefined -+ AV_PIX_FMT_XV30LE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), -+ ///< little-endian, variant of Y410 where alpha channel is -+ ///< left undefined -+ -+ AV_PIX_FMT_XV36BE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, -+ ///< zeros in the low bits, big-endian, variant of Y412 -+ ///< where alpha channel is left undefined -+ AV_PIX_FMT_XV36LE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, -+ ///< zeros in the low bits, little-endian, variant of Y412 -+ ///< where alpha channel is left undefined -+ -+ AV_PIX_FMT_RGBF32BE, ///< IEEE-754 single precision packed RGB 32:32:32, -+ ///< 96bpp, RGBRGB..., big-endian -+ AV_PIX_FMT_RGBF32LE, ///< IEEE-754 single precision packed RGB 32:32:32, -+ ///< 96bpp, RGBRGB..., little-endian -+ -+ AV_PIX_FMT_RGBAF32BE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, -+ ///< 128bpp, RGBARGBA..., big-endian -+ AV_PIX_FMT_RGBAF32LE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, -+ ///< 128bpp, RGBARGBA..., little-endian -+ -+ AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to -+ ///< link with shared libav* because the number of formats -+ ///< might differ between versions -+}; -+ -+#if AV_HAVE_BIGENDIAN -+# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be -+#else -+# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le -+#endif -+ -+#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA) -+#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR) -+#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA) -+#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB) -+#define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) -+#define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) -+ -+#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) -+#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) -+#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) -+#define AV_PIX_FMT_GRAY14 AV_PIX_FMT_NE(GRAY14BE, GRAY14LE) -+#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) -+#define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) -+#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) -+#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE) -+#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE) -+#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE) -+#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE) -+#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE) -+#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE) -+#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE) -+#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE) -+#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE) -+ -+#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE, YUV420P9LE) -+#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE, YUV422P9LE) -+#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE, YUV444P9LE) -+#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE) -+#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE) -+#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE) -+#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE) -+#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE) -+#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE) -+#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE) -+#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE) -+#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE) -+#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE) -+#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE) -+#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE) -+#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE) -+#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE) -+ -+#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE, GBRP9LE) -+#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE) -+#define AV_PIX_FMT_GBRP12 AV_PIX_FMT_NE(GBRP12BE, GBRP12LE) -+#define AV_PIX_FMT_GBRP14 AV_PIX_FMT_NE(GBRP14BE, GBRP14LE) -+#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE) -+#define AV_PIX_FMT_GBRAP10 AV_PIX_FMT_NE(GBRAP10BE, GBRAP10LE) -+#define AV_PIX_FMT_GBRAP12 AV_PIX_FMT_NE(GBRAP12BE, GBRAP12LE) -+#define AV_PIX_FMT_GBRAP16 AV_PIX_FMT_NE(GBRAP16BE, GBRAP16LE) -+ -+#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE, BAYER_BGGR16LE) -+#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE, BAYER_RGGB16LE) -+#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) -+#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) -+ -+#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) -+#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) -+ -+#define AV_PIX_FMT_GRAYF32 AV_PIX_FMT_NE(GRAYF32BE, GRAYF32LE) -+ -+#define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE, YUVA420P9LE) -+#define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE, YUVA422P9LE) -+#define AV_PIX_FMT_YUVA444P9 AV_PIX_FMT_NE(YUVA444P9BE, YUVA444P9LE) -+#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE) -+#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE) -+#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE) -+#define AV_PIX_FMT_YUVA422P12 AV_PIX_FMT_NE(YUVA422P12BE, YUVA422P12LE) -+#define AV_PIX_FMT_YUVA444P12 AV_PIX_FMT_NE(YUVA444P12BE, YUVA444P12LE) -+#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE) -+#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE) -+#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE) -+ -+#define AV_PIX_FMT_XYZ12 AV_PIX_FMT_NE(XYZ12BE, XYZ12LE) -+#define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) -+#define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) -+#define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -+#define AV_PIX_FMT_P012 AV_PIX_FMT_NE(P012BE, P012LE) -+#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) -+ -+#define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -+#define AV_PIX_FMT_Y212 AV_PIX_FMT_NE(Y212BE, Y212LE) -+#define AV_PIX_FMT_XV30 AV_PIX_FMT_NE(XV30BE, XV30LE) -+#define AV_PIX_FMT_XV36 AV_PIX_FMT_NE(XV36BE, XV36LE) -+#define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) -+#define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE) -+ -+#define AV_PIX_FMT_P210 AV_PIX_FMT_NE(P210BE, P210LE) -+#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE) -+#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) -+#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) -+ -+#define AV_PIX_FMT_RGBAF16 AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE) -+ -+#define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE) -+#define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE) -+ -+/** -+ * Chromaticity coordinates of the source primaries. -+ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and -+ * ITU-T H.273. -+ */ -+enum AVColorPrimaries { -+ AVCOL_PRI_RESERVED0 = 0, -+ AVCOL_PRI_BT709 = -+ 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B -+ AVCOL_PRI_UNSPECIFIED = 2, -+ AVCOL_PRI_RESERVED = 3, -+ AVCOL_PRI_BT470M = -+ 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) -+ -+ AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R -+ ///< BT1700 625 PAL & SECAM -+ AVCOL_PRI_SMPTE170M = -+ 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC -+ AVCOL_PRI_SMPTE240M = -+ 7, ///< identical to above, also called "SMPTE C" even though it uses D65 -+ AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C -+ AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 -+ AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) -+ AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, -+ AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 -+ AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 -+ AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC -+ ///< P22 group phosphors -+ AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, -+ AVCOL_PRI_NB ///< Not part of ABI -+}; -+ -+/** -+ * Color Transfer Characteristic. -+ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2. -+ */ -+enum AVColorTransferCharacteristic { -+ AVCOL_TRC_RESERVED0 = 0, -+ AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 -+ AVCOL_TRC_UNSPECIFIED = 2, -+ AVCOL_TRC_RESERVED = 3, -+ AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM -+ AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG -+ AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 -+ ///< 525 or 625 / ITU-R BT1700 NTSC -+ AVCOL_TRC_SMPTE240M = 7, -+ AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" -+ AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" -+ AVCOL_TRC_LOG_SQRT = -+ 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" -+ AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 -+ AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut -+ AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) -+ AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system -+ AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system -+ AVCOL_TRC_SMPTE2084 = -+ 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems -+ AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, -+ AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 -+ AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, -+ AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" -+ AVCOL_TRC_NB ///< Not part of ABI -+}; -+ -+/** -+ * YUV colorspace type. -+ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. -+ */ -+enum AVColorSpace { -+ AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC -+ ///< 61966-2-1 (sRGB), YZX and ST 428-1 -+ AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / -+ ///< derived in SMPTE RP 177 Annex B -+ AVCOL_SPC_UNSPECIFIED = 2, -+ AVCOL_SPC_RESERVED = -+ 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are -+ AVCOL_SPC_FCC = -+ 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) -+ AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R -+ ///< BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 -+ AVCOL_SPC_SMPTE170M = -+ 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / -+ ///< functionally identical to above -+ AVCOL_SPC_SMPTE240M = -+ 7, ///< derived from 170M primaries and D65 white point, 170M is derived -+ ///< from BT470 System M's primaries -+ AVCOL_SPC_YCGCO = -+ 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 -+ AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, -+ AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system -+ AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system -+ AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x -+ AVCOL_SPC_CHROMA_DERIVED_NCL = -+ 12, ///< Chromaticity-derived non-constant luminance system -+ AVCOL_SPC_CHROMA_DERIVED_CL = -+ 13, ///< Chromaticity-derived constant luminance system -+ AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp -+ AVCOL_SPC_NB ///< Not part of ABI -+}; -+ -+/** -+ * Visual content value range. -+ * -+ * These values are based on definitions that can be found in multiple -+ * specifications, such as ITU-T BT.709 (3.4 - Quantization of RGB, luminance -+ * and colour-difference signals), ITU-T BT.2020 (Table 5 - Digital -+ * Representation) as well as ITU-T BT.2100 (Table 9 - Digital 10- and 12-bit -+ * integer representation). At the time of writing, the BT.2100 one is -+ * recommended, as it also defines the full range representation. -+ * -+ * Common definitions: -+ * - For RGB and luma planes such as Y in YCbCr and I in ICtCp, -+ * 'E' is the original value in range of 0.0 to 1.0. -+ * - For chroma planes such as Cb,Cr and Ct,Cp, 'E' is the original -+ * value in range of -0.5 to 0.5. -+ * - 'n' is the output bit depth. -+ * - For additional definitions such as rounding and clipping to valid n -+ * bit unsigned integer range, please refer to BT.2100 (Table 9). -+ */ -+enum AVColorRange { -+ AVCOL_RANGE_UNSPECIFIED = 0, -+ -+ /** -+ * Narrow or limited range content. -+ * -+ * - For luma planes: -+ * -+ * (219 * E + 16) * 2^(n-8) -+ * -+ * F.ex. the range of 16-235 for 8 bits -+ * -+ * - For chroma planes: -+ * -+ * (224 * E + 128) * 2^(n-8) -+ * -+ * F.ex. the range of 16-240 for 8 bits -+ */ -+ AVCOL_RANGE_MPEG = 1, -+ -+ /** -+ * Full range content. -+ * -+ * - For RGB and luma planes: -+ * -+ * (2^n - 1) * E -+ * -+ * F.ex. the range of 0-255 for 8 bits -+ * -+ * - For chroma planes: -+ * -+ * (2^n - 1) * E + 2^(n - 1) -+ * -+ * F.ex. the range of 1-255 for 8 bits -+ */ -+ AVCOL_RANGE_JPEG = 2, -+ AVCOL_RANGE_NB ///< Not part of ABI -+}; -+ -+/** -+ * Location of chroma samples. -+ * -+ * Illustration showing the location of the first (top left) chroma sample of -+ *the image, the left shows only luma, the right shows the location of the -+ *chroma sample, the 2 could be imagined to overlay each other but are drawn -+ *separately due to limitations of ASCII -+ * -+ * 1st 2nd 1st 2nd horizontal luma sample positions -+ * v v v v -+ * ______ ______ -+ *1st luma line > |X X ... |3 4 X ... X are luma samples, -+ * | |1 2 1-6 are possible chroma positions -+ *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position -+ */ -+enum AVChromaLocation { -+ AVCHROMA_LOC_UNSPECIFIED = 0, -+ AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 -+ AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 -+ AVCHROMA_LOC_TOPLEFT = -+ 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 -+ AVCHROMA_LOC_TOP = 4, -+ AVCHROMA_LOC_BOTTOMLEFT = 5, -+ AVCHROMA_LOC_BOTTOM = 6, -+ AVCHROMA_LOC_NB ///< Not part of ABI -+}; -+ -+#endif /* AVUTIL_PIXFMT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/rational.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,222 @@ -+/* -+ * rational numbers -+ * Copyright (c) 2003 Michael Niedermayer -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @ingroup lavu_math_rational -+ * Utilties for rational number calculation. -+ * @author Michael Niedermayer -+ */ -+ -+#ifndef AVUTIL_RATIONAL_H -+#define AVUTIL_RATIONAL_H -+ -+#include -+#include -+#include "attributes.h" -+ -+/** -+ * @defgroup lavu_math_rational AVRational -+ * @ingroup lavu_math -+ * Rational number calculation. -+ * -+ * While rational numbers can be expressed as floating-point numbers, the -+ * conversion process is a lossy one, so are floating-point operations. On the -+ * other hand, the nature of FFmpeg demands highly accurate calculation of -+ * timestamps. This set of rational number utilities serves as a generic -+ * interface for manipulating rational numbers as pairs of numerators and -+ * denominators. -+ * -+ * Many of the functions that operate on AVRational's have the suffix `_q`, in -+ * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all -+ * rational numbers. -+ * -+ * @{ -+ */ -+ -+/** -+ * Rational number (pair of numerator and denominator). -+ */ -+typedef struct AVRational { -+ int num; ///< Numerator -+ int den; ///< Denominator -+} AVRational; -+ -+/** -+ * Create an AVRational. -+ * -+ * Useful for compilers that do not support compound literals. -+ * -+ * @note The return value is not reduced. -+ * @see av_reduce() -+ */ -+static inline AVRational av_make_q(int num, int den) { -+ AVRational r = {num, den}; -+ return r; -+} -+ -+/** -+ * Compare two rationals. -+ * -+ * @param a First rational -+ * @param b Second rational -+ * -+ * @return One of the following values: -+ * - 0 if `a == b` -+ * - 1 if `a > b` -+ * - -1 if `a < b` -+ * - `INT_MIN` if one of the values is of the form `0 / 0` -+ */ -+static inline int av_cmp_q(AVRational a, AVRational b) { -+ const int64_t tmp = a.num * (int64_t)b.den - b.num * (int64_t)a.den; -+ -+ if (tmp) -+ return (int)((tmp ^ a.den ^ b.den) >> 63) | 1; -+ else if (b.den && a.den) -+ return 0; -+ else if (a.num && b.num) -+ return (a.num >> 31) - (b.num >> 31); -+ else -+ return INT_MIN; -+} -+ -+/** -+ * Convert an AVRational to a `double`. -+ * @param a AVRational to convert -+ * @return `a` in floating-point form -+ * @see av_d2q() -+ */ -+static inline double av_q2d(AVRational a) { return a.num / (double)a.den; } -+ -+/** -+ * Reduce a fraction. -+ * -+ * This is useful for framerate calculations. -+ * -+ * @param[out] dst_num Destination numerator -+ * @param[out] dst_den Destination denominator -+ * @param[in] num Source numerator -+ * @param[in] den Source denominator -+ * @param[in] max Maximum allowed values for `dst_num` & `dst_den` -+ * @return 1 if the operation is exact, 0 otherwise -+ */ -+int av_reduce(int* dst_num, int* dst_den, int64_t num, int64_t den, -+ int64_t max); -+ -+/** -+ * Multiply two rationals. -+ * @param b First rational -+ * @param c Second rational -+ * @return b*c -+ */ -+AVRational av_mul_q(AVRational b, AVRational c) av_const; -+ -+/** -+ * Divide one rational by another. -+ * @param b First rational -+ * @param c Second rational -+ * @return b/c -+ */ -+AVRational av_div_q(AVRational b, AVRational c) av_const; -+ -+/** -+ * Add two rationals. -+ * @param b First rational -+ * @param c Second rational -+ * @return b+c -+ */ -+AVRational av_add_q(AVRational b, AVRational c) av_const; -+ -+/** -+ * Subtract one rational from another. -+ * @param b First rational -+ * @param c Second rational -+ * @return b-c -+ */ -+AVRational av_sub_q(AVRational b, AVRational c) av_const; -+ -+/** -+ * Invert a rational. -+ * @param q value -+ * @return 1 / q -+ */ -+static av_always_inline AVRational av_inv_q(AVRational q) { -+ AVRational r = {q.den, q.num}; -+ return r; -+} -+ -+/** -+ * Convert a double precision floating point number to a rational. -+ * -+ * In case of infinity, the returned value is expressed as `{1, 0}` or -+ * `{-1, 0}` depending on the sign. -+ * -+ * @param d `double` to convert -+ * @param max Maximum allowed numerator and denominator -+ * @return `d` in AVRational form -+ * @see av_q2d() -+ */ -+AVRational av_d2q(double d, int max) av_const; -+ -+/** -+ * Find which of the two rationals is closer to another rational. -+ * -+ * @param q Rational to be compared against -+ * @param q1 Rational to be tested -+ * @param q2 Rational to be tested -+ * @return One of the following values: -+ * - 1 if `q1` is nearer to `q` than `q2` -+ * - -1 if `q2` is nearer to `q` than `q1` -+ * - 0 if they have the same distance -+ */ -+int av_nearer_q(AVRational q, AVRational q1, AVRational q2); -+ -+/** -+ * Find the value in a list of rationals nearest a given reference rational. -+ * -+ * @param q Reference rational -+ * @param q_list Array of rationals terminated by `{0, 0}` -+ * @return Index of the nearest value found in the array -+ */ -+int av_find_nearest_q_idx(AVRational q, const AVRational* q_list); -+ -+/** -+ * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point -+ * format. -+ * -+ * @param q Rational to be converted -+ * @return Equivalent floating-point value, expressed as an unsigned 32-bit -+ * integer. -+ * @note The returned value is platform-indepedant. -+ */ -+uint32_t av_q2intfloat(AVRational q); -+ -+/** -+ * Return the best rational so that a and b are multiple of it. -+ * If the resulting denominator is larger than max_den, return def. -+ */ -+AVRational av_gcd_q(AVRational a, AVRational b, int max_den, AVRational def); -+ -+/** -+ * @} -+ */ -+ -+#endif /* AVUTIL_RATIONAL_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/samplefmt.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,274 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVUTIL_SAMPLEFMT_H -+#define AVUTIL_SAMPLEFMT_H -+ -+#include -+ -+/** -+ * @addtogroup lavu_audio -+ * @{ -+ * -+ * @defgroup lavu_sampfmts Audio sample formats -+ * -+ * Audio sample format enumeration and related convenience functions. -+ * @{ -+ */ -+ -+/** -+ * Audio sample formats -+ * -+ * - The data described by the sample format is always in native-endian order. -+ * Sample values can be expressed by native C types, hence the lack of a -+ * signed 24-bit sample format even though it is a common raw audio data format. -+ * -+ * - The floating-point formats are based on full volume being in the range -+ * [-1.0, 1.0]. Any values outside this range are beyond full volume level. -+ * -+ * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg -+ * (such as AVFrame in libavcodec) is as follows: -+ * -+ * @par -+ * For planar sample formats, each audio channel is in a separate data plane, -+ * and linesize is the buffer size, in bytes, for a single plane. All data -+ * planes must be the same size. For packed sample formats, only the first data -+ * plane is used, and samples for each channel are interleaved. In this case, -+ * linesize is the buffer size, in bytes, for the 1 plane. -+ * -+ */ -+enum AVSampleFormat { -+ AV_SAMPLE_FMT_NONE = -1, -+ AV_SAMPLE_FMT_U8, ///< unsigned 8 bits -+ AV_SAMPLE_FMT_S16, ///< signed 16 bits -+ AV_SAMPLE_FMT_S32, ///< signed 32 bits -+ AV_SAMPLE_FMT_FLT, ///< float -+ AV_SAMPLE_FMT_DBL, ///< double -+ -+ AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar -+ AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar -+ AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar -+ AV_SAMPLE_FMT_FLTP, ///< float, planar -+ AV_SAMPLE_FMT_DBLP, ///< double, planar -+ AV_SAMPLE_FMT_S64, ///< signed 64 bits -+ AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar -+ -+ AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking -+ ///< dynamically -+}; -+ -+/** -+ * Return the name of sample_fmt, or NULL if sample_fmt is not -+ * recognized. -+ */ -+const char* av_get_sample_fmt_name(enum AVSampleFormat sample_fmt); -+ -+/** -+ * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE -+ * on error. -+ */ -+enum AVSampleFormat av_get_sample_fmt(const char* name); -+ -+/** -+ * Return the planar<->packed alternative form of the given sample format, or -+ * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the -+ * requested planar/packed format, the format returned is the same as the -+ * input. -+ */ -+enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, -+ int planar); -+ -+/** -+ * Get the packed alternative form of the given sample format. -+ * -+ * If the passed sample_fmt is already in packed format, the format returned is -+ * the same as the input. -+ * -+ * @return the packed alternative form of the given sample format or -+ AV_SAMPLE_FMT_NONE on error. -+ */ -+enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt); -+ -+/** -+ * Get the planar alternative form of the given sample format. -+ * -+ * If the passed sample_fmt is already in planar format, the format returned is -+ * the same as the input. -+ * -+ * @return the planar alternative form of the given sample format or -+ AV_SAMPLE_FMT_NONE on error. -+ */ -+enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt); -+ -+/** -+ * Generate a string corresponding to the sample format with -+ * sample_fmt, or a header if sample_fmt is negative. -+ * -+ * @param buf the buffer where to write the string -+ * @param buf_size the size of buf -+ * @param sample_fmt the number of the sample format to print the -+ * corresponding info string, or a negative value to print the -+ * corresponding header. -+ * @return the pointer to the filled buffer or NULL if sample_fmt is -+ * unknown or in case of other errors -+ */ -+char* av_get_sample_fmt_string(char* buf, int buf_size, -+ enum AVSampleFormat sample_fmt); -+ -+/** -+ * Return number of bytes per sample. -+ * -+ * @param sample_fmt the sample format -+ * @return number of bytes per sample or zero if unknown for the given -+ * sample format -+ */ -+int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt); -+ -+/** -+ * Check if the sample format is planar. -+ * -+ * @param sample_fmt the sample format to inspect -+ * @return 1 if the sample format is planar, 0 if it is interleaved -+ */ -+int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt); -+ -+/** -+ * Get the required buffer size for the given audio parameters. -+ * -+ * @param[out] linesize calculated linesize, may be NULL -+ * @param nb_channels the number of channels -+ * @param nb_samples the number of samples in a single channel -+ * @param sample_fmt the sample format -+ * @param align buffer size alignment (0 = default, 1 = no alignment) -+ * @return required buffer size, or negative error code on failure -+ */ -+int av_samples_get_buffer_size(int* linesize, int nb_channels, int nb_samples, -+ enum AVSampleFormat sample_fmt, int align); -+ -+/** -+ * @} -+ * -+ * @defgroup lavu_sampmanip Samples manipulation -+ * -+ * Functions that manipulate audio samples -+ * @{ -+ */ -+ -+/** -+ * Fill plane data pointers and linesize for samples with sample -+ * format sample_fmt. -+ * -+ * The audio_data array is filled with the pointers to the samples data planes: -+ * for planar, set the start point of each channel's data within the buffer, -+ * for packed, set the start point of the entire buffer only. -+ * -+ * The value pointed to by linesize is set to the aligned size of each -+ * channel's data buffer for planar layout, or to the aligned size of the -+ * buffer for all channels for packed layout. -+ * -+ * The buffer in buf must be big enough to contain all the samples -+ * (use av_samples_get_buffer_size() to compute its minimum size), -+ * otherwise the audio_data pointers will point to invalid data. -+ * -+ * @see enum AVSampleFormat -+ * The documentation for AVSampleFormat describes the data layout. -+ * -+ * @param[out] audio_data array to be filled with the pointer for each channel -+ * @param[out] linesize calculated linesize, may be NULL -+ * @param buf the pointer to a buffer containing the samples -+ * @param nb_channels the number of channels -+ * @param nb_samples the number of samples in a single channel -+ * @param sample_fmt the sample format -+ * @param align buffer size alignment (0 = default, 1 = no alignment) -+ * @return minimum size in bytes required for the buffer on -+ * success, or a negative error code on failure -+ */ -+int av_samples_fill_arrays(uint8_t** audio_data, int* linesize, -+ const uint8_t* buf, int nb_channels, int nb_samples, -+ enum AVSampleFormat sample_fmt, int align); -+ -+/** -+ * Allocate a samples buffer for nb_samples samples, and fill data pointers and -+ * linesize accordingly. -+ * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) -+ * Allocated data will be initialized to silence. -+ * -+ * @see enum AVSampleFormat -+ * The documentation for AVSampleFormat describes the data layout. -+ * -+ * @param[out] audio_data array to be filled with the pointer for each channel -+ * @param[out] linesize aligned size for audio buffer(s), may be NULL -+ * @param nb_channels number of audio channels -+ * @param nb_samples number of samples per channel -+ * @param sample_fmt the sample format -+ * @param align buffer size alignment (0 = default, 1 = no alignment) -+ * @return >=0 on success or a negative error code on failure -+ * @todo return the size of the allocated buffer in case of success at the next -+ * bump -+ * @see av_samples_fill_arrays() -+ * @see av_samples_alloc_array_and_samples() -+ */ -+int av_samples_alloc(uint8_t** audio_data, int* linesize, int nb_channels, -+ int nb_samples, enum AVSampleFormat sample_fmt, int align); -+ -+/** -+ * Allocate a data pointers array, samples buffer for nb_samples -+ * samples, and fill data pointers and linesize accordingly. -+ * -+ * This is the same as av_samples_alloc(), but also allocates the data -+ * pointers array. -+ * -+ * @see av_samples_alloc() -+ */ -+int av_samples_alloc_array_and_samples(uint8_t*** audio_data, int* linesize, -+ int nb_channels, int nb_samples, -+ enum AVSampleFormat sample_fmt, -+ int align); -+ -+/** -+ * Copy samples from src to dst. -+ * -+ * @param dst destination array of pointers to data planes -+ * @param src source array of pointers to data planes -+ * @param dst_offset offset in samples at which the data will be written to dst -+ * @param src_offset offset in samples at which the data will be read from src -+ * @param nb_samples number of samples to be copied -+ * @param nb_channels number of audio channels -+ * @param sample_fmt audio sample format -+ */ -+int av_samples_copy(uint8_t** dst, uint8_t* const* src, int dst_offset, -+ int src_offset, int nb_samples, int nb_channels, -+ enum AVSampleFormat sample_fmt); -+ -+/** -+ * Fill an audio buffer with silence. -+ * -+ * @param audio_data array of pointers to data planes -+ * @param offset offset in samples at which to start filling -+ * @param nb_samples number of samples to fill -+ * @param nb_channels number of audio channels -+ * @param sample_fmt audio sample format -+ */ -+int av_samples_set_silence(uint8_t** audio_data, int offset, int nb_samples, -+ int nb_channels, enum AVSampleFormat sample_fmt); -+ -+/** -+ * @} -+ * @} -+ */ -+#endif /* AVUTIL_SAMPLEFMT_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h ---- a/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/include/libavutil/version.h 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,122 @@ -+/* -+ * copyright (c) 2003 Fabrice Bellard -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * @ingroup lavu -+ * Libavutil version macros -+ */ -+ -+#ifndef AVUTIL_VERSION_H -+#define AVUTIL_VERSION_H -+ -+#include "macros.h" -+ -+/** -+ * @addtogroup version_utils -+ * -+ * Useful to check and match library version in order to maintain -+ * backward compatibility. -+ * -+ * The FFmpeg libraries follow a versioning sheme very similar to -+ * Semantic Versioning (http://semver.org/) -+ * The difference is that the component called PATCH is called MICRO in FFmpeg -+ * and its value is reset to 100 instead of 0 to keep it above or equal to 100. -+ * Also we do not increase MICRO for every bugfix or change in git master. -+ * -+ * Prior to FFmpeg 3.2 point releases did not change any lib version number to -+ * avoid aliassing different git master checkouts. -+ * Starting with FFmpeg 3.2, the released library versions will occupy -+ * a separate MAJOR.MINOR that is not used on the master development branch. -+ * That is if we branch a release of master 55.10.123 we will bump to 55.11.100 -+ * for the release and master will continue at 55.12.100 after it. Each new -+ * point release will then bump the MICRO improving the usefulness of the lib -+ * versions. -+ * -+ * @{ -+ */ -+ -+#define AV_VERSION_INT(a, b, c) ((a) << 16 | (b) << 8 | (c)) -+#define AV_VERSION_DOT(a, b, c) a##.##b##.##c -+#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c) -+ -+/** -+ * Extract version components from the full ::AV_VERSION_INT int as returned -+ * by functions like ::avformat_version() and ::avcodec_version() -+ */ -+#define AV_VERSION_MAJOR(a) ((a) >> 16) -+#define AV_VERSION_MINOR(a) (((a)&0x00FF00) >> 8) -+#define AV_VERSION_MICRO(a) ((a)&0xFF) -+ -+/** -+ * @} -+ */ -+ -+/** -+ * @defgroup lavu_ver Version and Build diagnostics -+ * -+ * Macros and function useful to check at compiletime and at runtime -+ * which version of libavutil is in use. -+ * -+ * @{ -+ */ -+ -+#define LIBAVUTIL_VERSION_MAJOR 58 -+#define LIBAVUTIL_VERSION_MINOR 3 -+#define LIBAVUTIL_VERSION_MICRO 100 -+ -+#define LIBAVUTIL_VERSION_INT \ -+ AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, \ -+ LIBAVUTIL_VERSION_MICRO) -+#define LIBAVUTIL_VERSION \ -+ AV_VERSION(LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, \ -+ LIBAVUTIL_VERSION_MICRO) -+#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT -+ -+#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION) -+ -+/** -+ * @defgroup lavu_depr_guards Deprecation Guards -+ * FF_API_* defines may be placed below to indicate public API that will be -+ * dropped at a future version bump. The defines themselves are not part of -+ * the public API and may change, break or disappear at any time. -+ * -+ * @note, when bumping the major version it is recommended to manually -+ * disable each FF_API_* in its own commit instead of disabling them all -+ * at once through the bump. This improves the git bisect-ability of the change. -+ * -+ * @{ -+ */ -+ -+#define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_FIFO_OLD_API (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_OLD_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_AV_FOPEN_UTF8 (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_PKT_DURATION (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_REORDERED_OPAQUE (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_FRAME_PICTURE_NUMBER (LIBAVUTIL_VERSION_MAJOR < 59) -+ -+/** -+ * @} -+ * @} -+ */ -+ -+#endif /* AVUTIL_VERSION_H */ -diff -Naur a/dom/media/platforms/ffmpeg/ffmpeg60/moz.build b/dom/media/platforms/ffmpeg/ffmpeg60/moz.build ---- a/dom/media/platforms/ffmpeg/ffmpeg60/moz.build 1970-01-01 01:00:00.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffmpeg60/moz.build 2023-04-06 12:57:00.772081680 +0200 -@@ -0,0 +1,39 @@ -+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -+# vim: set filetype=python: -+# This Source Code Form is subject to the terms of the Mozilla Public -+# License, v. 2.0. If a copy of the MPL was not distributed with this -+# file, You can obtain one at http://mozilla.org/MPL/2.0/. -+ -+UNIFIED_SOURCES += [ -+ "../FFmpegAudioDecoder.cpp", -+ "../FFmpegDataDecoder.cpp", -+ "../FFmpegDecoderModule.cpp", -+ "../FFmpegVideoDecoder.cpp", -+] -+LOCAL_INCLUDES += [ -+ "..", -+ "/media/mozva", -+ "include", -+] -+ -+if CONFIG["CC_TYPE"] in ("clang", "gcc"): -+ CXXFLAGS += ["-Wno-deprecated-declarations"] -+if CONFIG["CC_TYPE"] == "clang": -+ CXXFLAGS += [ -+ "-Wno-unknown-attributes", -+ ] -+if CONFIG["CC_TYPE"] == "gcc": -+ CXXFLAGS += [ -+ "-Wno-attributes", -+ ] -+if CONFIG["MOZ_WAYLAND"]: -+ CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] -+ DEFINES["MOZ_WAYLAND_USE_VAAPI"] = 1 -+ USE_LIBS += ["mozva"] -+ UNIFIED_SOURCES += [ -+ "../FFmpegVideoFramePool.cpp", -+ ] -+ -+include("/ipc/chromium/chromium-config.mozbuild") -+ -+FINAL_LIBRARY = "xul" -diff -Naur a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp ---- a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp 2023-03-10 00:59:36.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp 2023-04-06 12:49:55.231998224 +0200 -@@ -269,35 +269,35 @@ - } - #else - # define AVRESULT_OK 0 -- -- int ret = mLib->avcodec_receive_frame(mCodecContext, mFrame); -+ int ret = mLib->avcodec_send_packet(mCodecContext, &packet); - switch (ret) { - case AVRESULT_OK: -- decoded = true; -+ bytesConsumed = packet.size; - break; - case AVERROR(EAGAIN): - break; -- case AVERROR_EOF: { -+ case AVERROR_EOF: - FFMPEG_LOG(" End of stream."); - return MediaResult(NS_ERROR_DOM_MEDIA_END_OF_STREAM, - RESULT_DETAIL("End of stream")); -- } -+ default: -+ NS_WARNING("FFmpeg audio decoder error."); -+ return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, -+ RESULT_DETAIL("FFmpeg audio error")); - } -- ret = mLib->avcodec_send_packet(mCodecContext, &packet); -+ -+ ret = mLib->avcodec_receive_frame(mCodecContext, mFrame); - switch (ret) { - case AVRESULT_OK: -- bytesConsumed = packet.size; -+ decoded = true; - break; - case AVERROR(EAGAIN): - break; -- case AVERROR_EOF: -+ case AVERROR_EOF: { - FFMPEG_LOG(" End of stream."); - return MediaResult(NS_ERROR_DOM_MEDIA_END_OF_STREAM, - RESULT_DETAIL("End of stream")); -- default: -- NS_WARNING("FFmpeg audio decoder error."); -- return MediaResult(NS_ERROR_DOM_MEDIA_DECODE_ERR, -- RESULT_DETAIL("FFmpeg audio error")); -+ } - } - #endif - -diff -Naur a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp ---- a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp 2023-03-10 00:59:36.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp 2023-04-06 12:57:00.770081600 +0200 -@@ -65,6 +65,7 @@ - AV_FUNC_57 = 1 << 4, - AV_FUNC_58 = 1 << 5, - AV_FUNC_59 = 1 << 6, -+ AV_FUNC_60 = 1 << 7, - AV_FUNC_AVUTIL_53 = AV_FUNC_53 | AV_FUNC_AVUTIL_MASK, - AV_FUNC_AVUTIL_54 = AV_FUNC_54 | AV_FUNC_AVUTIL_MASK, - AV_FUNC_AVUTIL_55 = AV_FUNC_55 | AV_FUNC_AVUTIL_MASK, -@@ -72,8 +73,9 @@ - AV_FUNC_AVUTIL_57 = AV_FUNC_57 | AV_FUNC_AVUTIL_MASK, - AV_FUNC_AVUTIL_58 = AV_FUNC_58 | AV_FUNC_AVUTIL_MASK, - AV_FUNC_AVUTIL_59 = AV_FUNC_59 | AV_FUNC_AVUTIL_MASK, -+ AV_FUNC_AVUTIL_60 = AV_FUNC_60 | AV_FUNC_AVUTIL_MASK, - AV_FUNC_AVCODEC_ALL = AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 | AV_FUNC_56 | -- AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59, -+ AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60, - AV_FUNC_AVUTIL_ALL = AV_FUNC_AVCODEC_ALL | AV_FUNC_AVUTIL_MASK - }; - -@@ -99,8 +101,11 @@ - case 59: - version = AV_FUNC_59; - break; -+ case 60: -+ version = AV_FUNC_60; -+ break; - default: -- FFMPEG_LOG("Unknown avcodec version"); -+ FFMPEG_LOG("Unknown avcodec version: %d", macro); - Unlink(); - return isFFMpeg ? ((macro > 57) ? LinkResult::UnknownFutureFFMpegVersion - : LinkResult::UnknownOlderFFMpegVersion) -@@ -154,10 +159,10 @@ - AV_FUNC(avcodec_alloc_frame, (AV_FUNC_53 | AV_FUNC_54)) - AV_FUNC(avcodec_get_frame_defaults, (AV_FUNC_53 | AV_FUNC_54)) - AV_FUNC(avcodec_free_frame, AV_FUNC_54) -- AV_FUNC(avcodec_send_packet, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC(avcodec_receive_frame, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC(avcodec_default_get_buffer2, -- (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58 | AV_FUNC_59)) -+ AV_FUNC(avcodec_send_packet, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC(avcodec_receive_frame, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC(avcodec_default_get_buffer2, (AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60)) - AV_FUNC_OPTION(av_rdft_init, AV_FUNC_AVCODEC_ALL) - AV_FUNC_OPTION(av_rdft_calc, AV_FUNC_AVCODEC_ALL) - AV_FUNC_OPTION(av_rdft_end, AV_FUNC_AVCODEC_ALL) -@@ -166,49 +171,62 @@ - AV_FUNC(av_freep, AV_FUNC_AVUTIL_ALL) - AV_FUNC(av_frame_alloc, - (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | -- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) -+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) - AV_FUNC(av_frame_free, - (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | -- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) -+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) - AV_FUNC(av_frame_unref, - (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | -- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) -+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) - AV_FUNC(av_image_check_size, AV_FUNC_AVUTIL_ALL) - AV_FUNC(av_image_get_buffer_size, AV_FUNC_AVUTIL_ALL) -- AV_FUNC_OPTION(av_buffer_get_opaque, (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | -- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) -+ AV_FUNC_OPTION(av_buffer_get_opaque, -+ (AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58 | -+ AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) - AV_FUNC(av_buffer_create, - (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | -- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59)) -+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60)) - AV_FUNC_OPTION(av_frame_get_colorspace, - AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | - AV_FUNC_AVUTIL_58) - AV_FUNC_OPTION(av_frame_get_color_range, - AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | - AV_FUNC_AVUTIL_58) -- AV_FUNC(av_strerror, AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59) -+ AV_FUNC(av_strerror, -+ AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59 | AV_FUNC_AVUTIL_60) - - #ifdef MOZ_WAYLAND -- AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_codec_is_decoder, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, AV_FUNC_58 | AV_FUNC_59) -+ AV_FUNC_OPTION_SILENT(avcodec_get_hw_config, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_codec_iterate, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_codec_is_decoder, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_init, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_alloc, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_hwdevice_hwconfig_alloc, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) - AV_FUNC_OPTION_SILENT(av_hwdevice_get_hwframe_constraints, -- AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_buffer_ref, AV_FUNC_AVUTIL_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_buffer_unref, AV_FUNC_AVUTIL_58 | AV_FUNC_59) -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_hwframe_constraints_free, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_buffer_ref, -+ AV_FUNC_AVUTIL_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_buffer_unref, -+ AV_FUNC_AVUTIL_58 | AV_FUNC_59 | AV_FUNC_60) - AV_FUNC_OPTION_SILENT(av_hwframe_transfer_get_formats, -- AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58 | AV_FUNC_59) -- AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string, -- AV_FUNC_AVUTIL_58 | AV_FUNC_AVUTIL_59) -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_hwdevice_ctx_create_derived, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_hwframe_ctx_alloc, -+ AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_dict_set, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_dict_free, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(avcodec_get_name, AV_FUNC_58 | AV_FUNC_59 | AV_FUNC_60) -+ AV_FUNC_OPTION_SILENT(av_get_pix_fmt_string, AV_FUNC_AVUTIL_58 | -+ AV_FUNC_AVUTIL_59 | -+ AV_FUNC_AVUTIL_60) - #endif - #undef AV_FUNC - #undef AV_FUNC_OPTION -diff -Naur a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp ---- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp 2023-03-10 00:59:36.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp 2023-04-06 12:57:00.770081600 +0200 -@@ -27,6 +27,7 @@ - static const char* sLibs[] = { - // clang-format off - #if defined(XP_DARWIN) -+ "libavcodec.60.dylib", - "libavcodec.59.dylib", - "libavcodec.58.dylib", - "libavcodec.57.dylib", -@@ -38,6 +39,7 @@ - "libavcodec.so", // OpenBSD hardly controls the major/minor library version - // of ffmpeg and update it regulary on ABI/API changes - #else -+ "libavcodec.so.60", - "libavcodec.so.59", - "libavcodec.so.58", - "libavcodec-ffmpeg.so.58", -@@ -160,6 +162,9 @@ - case 59: - module = FFmpegDecoderModule<59>::Create(&sLibAV); - break; -+ case 60: -+ module = FFmpegDecoderModule<60>::Create(&sLibAV); -+ break; - default: - module = nullptr; - } -diff -Naur a/dom/media/platforms/ffmpeg/ffvpx/moz.build b/dom/media/platforms/ffmpeg/ffvpx/moz.build ---- a/dom/media/platforms/ffmpeg/ffvpx/moz.build 2023-03-10 00:59:36.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/ffvpx/moz.build 2023-04-06 12:59:24.031810491 +0200 -@@ -20,7 +20,7 @@ - ] - LOCAL_INCLUDES += [ - "..", -- "../ffmpeg58/include", -+ "../ffmpeg60/include", - "/media/mozva", - ] - -diff -Naur a/dom/media/platforms/ffmpeg/moz.build b/dom/media/platforms/ffmpeg/moz.build ---- a/dom/media/platforms/ffmpeg/moz.build 2023-03-10 00:59:36.000000000 +0100 -+++ b/dom/media/platforms/ffmpeg/moz.build 2023-04-06 12:57:00.773081719 +0200 -@@ -15,6 +15,7 @@ - "ffmpeg57", - "ffmpeg58", - "ffmpeg59", -+ "ffmpeg60", - ] - - UNIFIED_SOURCES += [ -diff -Naur a/media/ffvpx/changes.patch b/media/ffvpx/changes.patch ---- a/media/ffvpx/changes.patch 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/changes.patch 2023-04-06 12:50:15.513815093 +0200 -@@ -11,10 +11,6 @@ - #include "avstring.h" - #include "timer.h" - --diff --git a/media/ffvpx/libavutil/time.h b/media/ffvpx/libavutil/fftime.h --similarity index 100% --rename from media/ffvpx/libavutil/time.h --rename to media/ffvpx/libavutil/fftime.h - diff --git a/media/ffvpx/libavutil/time.c b/media/ffvpx/libavutil/time.c - index dbaee02..69419e6 100644 - --- a/media/ffvpx/libavutil/time.c -@@ -73,10 +69,8 @@ - - - typedef struct VAAPIDevicePriv { -- --diff -up media/ffvpx/libavcodec/vaapi_decode.c.old media/ffvpx/libavcodec/vaapi_decode.c --diff -up media/ffvpx/libavutil/fftime.h.old media/ffvpx/libavutil/fftime.h ----- media/ffvpx/libavutil/fftime.h.old 2021-12-06 14:51:40.378642713 +0100 -+diff -up media/ffvpx/libavutil/fftime.h media/ffvpx/libavutil/fftime.h -+--- media/ffvpx/libavutil/fftime.h 2021-12-06 14:51:40.378642713 +0100 - +++ media/ffvpx/libavutil/fftime.h 2021-12-06 14:51:54.618098212 +0100 - @@ -22,6 +22,7 @@ - #define AVUTIL_TIME_H -@@ -86,3 +80,26 @@ - - /** - * Get the current time in microseconds. -+ * -+diff --git a/media/ffvpx/compat/w32pthreads.h b/media/ffvpx/compat/w32pthreads.h -+--- a/media/ffvpx/compat/w32pthreads.h -++++ b/media/ffvpx/compat/w32pthreads.h -+@@ -39,17 +39,17 @@ -+ #include -+ #include -+ #include -+ -+ #include "libavutil/attributes.h" -+ #include "libavutil/common.h" -+ #include "libavutil/internal.h" -+ #include "libavutil/mem.h" -+-#include "libavutil/time.h" -++#include "libavutil/fftime.h" -+ -+ typedef struct pthread_t { -+ void *handle; -+ void *(*func)(void* arg); -+ void *arg; -+ void *ret; -+ } pthread_t; -+ -diff -Naur a/media/ffvpx/compat/atomics/win32/stdatomic.h b/media/ffvpx/compat/atomics/win32/stdatomic.h ---- a/media/ffvpx/compat/atomics/win32/stdatomic.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/compat/atomics/win32/stdatomic.h 2023-04-06 12:49:40.248394688 +0200 -@@ -96,7 +96,7 @@ - atomic_load(object) - - #define atomic_exchange(object, desired) \ -- InterlockedExchangePointer(object, desired); -+ InterlockedExchangePointer((PVOID volatile *)object, (PVOID)desired) - - #define atomic_exchange_explicit(object, desired, order) \ - atomic_exchange(object, desired) -diff -Naur a/media/ffvpx/compat/w32pthreads.h b/media/ffvpx/compat/w32pthreads.h ---- a/media/ffvpx/compat/w32pthreads.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/compat/w32pthreads.h 2023-04-06 12:50:20.234005184 +0200 -@@ -38,11 +38,13 @@ - #define WIN32_LEAN_AND_MEAN - #include - #include -+#include - - #include "libavutil/attributes.h" - #include "libavutil/common.h" - #include "libavutil/internal.h" - #include "libavutil/mem.h" -+#include "libavutil/fftime.h" - - typedef struct pthread_t { - void *handle; -@@ -61,6 +63,9 @@ - #define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) - #define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) - -+#define PTHREAD_CANCEL_ENABLE 1 -+#define PTHREAD_CANCEL_DISABLE 0 -+ - static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) - { - pthread_t *h = (pthread_t*)arg; -@@ -156,10 +161,31 @@ - return 0; - } - -+static inline int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, -+ const struct timespec *abstime) -+{ -+ int64_t abs_milli = abstime->tv_sec * 1000LL + abstime->tv_nsec / 1000000; -+ DWORD t = av_clip64(abs_milli - av_gettime() / 1000, 0, UINT32_MAX); -+ -+ if (!SleepConditionVariableSRW(cond, mutex, t, 0)) { -+ DWORD err = GetLastError(); -+ if (err == ERROR_TIMEOUT) -+ return ETIMEDOUT; -+ else -+ return EINVAL; -+ } -+ return 0; -+} -+ - static inline int pthread_cond_signal(pthread_cond_t *cond) - { - WakeConditionVariable(cond); - return 0; - } - -+static inline int pthread_setcancelstate(int state, int *oldstate) -+{ -+ return 0; -+} -+ - #endif /* COMPAT_W32PTHREADS_H */ -diff -Naur a/media/ffvpx/config_aarch64_win64.h b/media/ffvpx/config_aarch64_win64.h ---- a/media/ffvpx/config_aarch64_win64.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_aarch64_win64.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,680 +0,0 @@ --/* Automatically generated by configure - do not modify! */ --#ifndef FFMPEG_CONFIG_H --#define FFMPEG_CONFIG_H --#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-parser='vp8,vp9' --enable-decoder='vp8,vp9,mp3,flac' --disable-static --enable-shared --disable-autodetect --toolchain=msvc --enable-cross-compile --target-os=win32 --arch=arm64" --#define FFMPEG_LICENSE "LGPL version 2.1 or later" --#define CONFIG_THIS_YEAR 2019 --#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" --#define AVCONV_DATADIR "/usr/local/share/ffmpeg" --#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for ARM64" --#define av_restrict __restrict --#define EXTERN_PREFIX "" --#define EXTERN_ASM --#define BUILDSUF "" --#define SLIBSUF ".dll" --#define HAVE_MMX2 HAVE_MMXEXT --#define SWS_MAX_FILTER_SIZE 256 --#define ARCH_AARCH64 1 --#define ARCH_ALPHA 0 --#define ARCH_ARM 0 --#define ARCH_AVR32 0 --#define ARCH_AVR32_AP 0 --#define ARCH_AVR32_UC 0 --#define ARCH_BFIN 0 --#define ARCH_IA64 0 --#define ARCH_M68K 0 --#define ARCH_MIPS 0 --#define ARCH_MIPS64 0 --#define ARCH_PARISC 0 --#define ARCH_PPC 0 --#define ARCH_PPC64 0 --#define ARCH_S390 0 --#define ARCH_SH4 0 --#define ARCH_SPARC 0 --#define ARCH_SPARC64 0 --#define ARCH_TILEGX 0 --#define ARCH_TILEPRO 0 --#define ARCH_TOMI 0 --#define ARCH_X86 0 --#define ARCH_X86_32 0 --#define ARCH_X86_64 0 --#define HAVE_ARMV5TE 0 --#define HAVE_ARMV6 0 --#define HAVE_ARMV6T2 0 --#define HAVE_ARMV8 1 --#define HAVE_NEON 1 --#define HAVE_VFP 1 --#define HAVE_VFPV3 0 --#define HAVE_SETEND 0 --#define HAVE_ALTIVEC 0 --#define HAVE_DCBZL 0 --#define HAVE_LDBRX 0 --#define HAVE_POWER8 0 --#define HAVE_PPC4XX 0 --#define HAVE_VSX 0 --#define HAVE_AESNI 0 --#define HAVE_AMD3DNOW 0 --#define HAVE_AMD3DNOWEXT 0 --#define HAVE_AVX 0 --#define HAVE_AVX2 0 --#define HAVE_AVX512 0 --#define HAVE_FMA3 0 --#define HAVE_FMA4 0 --#define HAVE_MMX 0 --#define HAVE_MMXEXT 0 --#define HAVE_SSE 0 --#define HAVE_SSE2 0 --#define HAVE_SSE3 0 --#define HAVE_SSE4 0 --#define HAVE_SSE42 0 --#define HAVE_SSSE3 0 --#define HAVE_XOP 0 --#define HAVE_CPUNOP 0 --#define HAVE_I686 0 --#define HAVE_MIPSFPU 0 --#define HAVE_MIPS32R2 0 --#define HAVE_MIPS32R5 0 --#define HAVE_MIPS64R2 0 --#define HAVE_MIPS32R6 0 --#define HAVE_MIPS64R6 0 --#define HAVE_MIPSDSP 0 --#define HAVE_MIPSDSPR2 0 --#define HAVE_MSA 0 --#define HAVE_MSA2 0 --#define HAVE_LOONGSON2 0 --#define HAVE_LOONGSON3 0 --#define HAVE_MMI 0 --#define HAVE_ARMV5TE_EXTERNAL 0 --#define HAVE_ARMV6_EXTERNAL 0 --#define HAVE_ARMV6T2_EXTERNAL 0 --#define HAVE_ARMV8_EXTERNAL 1 --#define HAVE_NEON_EXTERNAL 1 --#define HAVE_VFP_EXTERNAL 1 --#define HAVE_VFPV3_EXTERNAL 0 --#define HAVE_SETEND_EXTERNAL 0 --#define HAVE_ALTIVEC_EXTERNAL 0 --#define HAVE_DCBZL_EXTERNAL 0 --#define HAVE_LDBRX_EXTERNAL 0 --#define HAVE_POWER8_EXTERNAL 0 --#define HAVE_PPC4XX_EXTERNAL 0 --#define HAVE_VSX_EXTERNAL 0 --#define HAVE_AESNI_EXTERNAL 0 --#define HAVE_AMD3DNOW_EXTERNAL 0 --#define HAVE_AMD3DNOWEXT_EXTERNAL 0 --#define HAVE_AVX_EXTERNAL 0 --#define HAVE_AVX2_EXTERNAL 0 --#define HAVE_AVX512_EXTERNAL 0 --#define HAVE_FMA3_EXTERNAL 0 --#define HAVE_FMA4_EXTERNAL 0 --#define HAVE_MMX_EXTERNAL 0 --#define HAVE_MMXEXT_EXTERNAL 0 --#define HAVE_SSE_EXTERNAL 0 --#define HAVE_SSE2_EXTERNAL 0 --#define HAVE_SSE3_EXTERNAL 0 --#define HAVE_SSE4_EXTERNAL 0 --#define HAVE_SSE42_EXTERNAL 0 --#define HAVE_SSSE3_EXTERNAL 0 --#define HAVE_XOP_EXTERNAL 0 --#define HAVE_CPUNOP_EXTERNAL 0 --#define HAVE_I686_EXTERNAL 0 --#define HAVE_MIPSFPU_EXTERNAL 0 --#define HAVE_MIPS32R2_EXTERNAL 0 --#define HAVE_MIPS32R5_EXTERNAL 0 --#define HAVE_MIPS64R2_EXTERNAL 0 --#define HAVE_MIPS32R6_EXTERNAL 0 --#define HAVE_MIPS64R6_EXTERNAL 0 --#define HAVE_MIPSDSP_EXTERNAL 0 --#define HAVE_MIPSDSPR2_EXTERNAL 0 --#define HAVE_MSA_EXTERNAL 0 --#define HAVE_MSA2_EXTERNAL 0 --#define HAVE_LOONGSON2_EXTERNAL 0 --#define HAVE_LOONGSON3_EXTERNAL 0 --#define HAVE_MMI_EXTERNAL 0 --#define HAVE_ARMV5TE_INLINE 0 --#define HAVE_ARMV6_INLINE 0 --#define HAVE_ARMV6T2_INLINE 0 --#define HAVE_ARMV8_INLINE 0 --#define HAVE_NEON_INLINE 0 --#define HAVE_VFP_INLINE 0 --#define HAVE_VFPV3_INLINE 0 --#define HAVE_SETEND_INLINE 0 --#define HAVE_ALTIVEC_INLINE 0 --#define HAVE_DCBZL_INLINE 0 --#define HAVE_LDBRX_INLINE 0 --#define HAVE_POWER8_INLINE 0 --#define HAVE_PPC4XX_INLINE 0 --#define HAVE_VSX_INLINE 0 --#define HAVE_AESNI_INLINE 0 --#define HAVE_AMD3DNOW_INLINE 0 --#define HAVE_AMD3DNOWEXT_INLINE 0 --#define HAVE_AVX_INLINE 0 --#define HAVE_AVX2_INLINE 0 --#define HAVE_AVX512_INLINE 0 --#define HAVE_FMA3_INLINE 0 --#define HAVE_FMA4_INLINE 0 --#define HAVE_MMX_INLINE 0 --#define HAVE_MMXEXT_INLINE 0 --#define HAVE_SSE_INLINE 0 --#define HAVE_SSE2_INLINE 0 --#define HAVE_SSE3_INLINE 0 --#define HAVE_SSE4_INLINE 0 --#define HAVE_SSE42_INLINE 0 --#define HAVE_SSSE3_INLINE 0 --#define HAVE_XOP_INLINE 0 --#define HAVE_CPUNOP_INLINE 0 --#define HAVE_I686_INLINE 0 --#define HAVE_MIPSFPU_INLINE 0 --#define HAVE_MIPS32R2_INLINE 0 --#define HAVE_MIPS32R5_INLINE 0 --#define HAVE_MIPS64R2_INLINE 0 --#define HAVE_MIPS32R6_INLINE 0 --#define HAVE_MIPS64R6_INLINE 0 --#define HAVE_MIPSDSP_INLINE 0 --#define HAVE_MIPSDSPR2_INLINE 0 --#define HAVE_MSA_INLINE 0 --#define HAVE_MSA2_INLINE 0 --#define HAVE_LOONGSON2_INLINE 0 --#define HAVE_LOONGSON3_INLINE 0 --#define HAVE_MMI_INLINE 0 --#define HAVE_ALIGNED_STACK 1 --#define HAVE_FAST_64BIT 1 --#define HAVE_FAST_CLZ 0 --#define HAVE_FAST_CMOV 0 --#define HAVE_LOCAL_ALIGNED 0 --#define HAVE_SIMD_ALIGN_16 1 --#define HAVE_SIMD_ALIGN_32 0 --#define HAVE_SIMD_ALIGN_64 0 --#define HAVE_ATOMIC_CAS_PTR 0 --#define HAVE_MACHINE_RW_BARRIER 0 --#define HAVE_MEMORYBARRIER 1 --#define HAVE_MM_EMPTY 0 --#define HAVE_RDTSC 0 --#define HAVE_SEM_TIMEDWAIT 0 --#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0 --#define HAVE_CABS 0 --#define HAVE_CEXP 0 --#define HAVE_INLINE_ASM 0 --#define HAVE_SYMVER 0 --#define HAVE_X86ASM 0 --#define HAVE_BIGENDIAN 0 --#define HAVE_FAST_UNALIGNED 1 --#define HAVE_ARPA_INET_H 0 --#define HAVE_ASM_TYPES_H 0 --#define HAVE_CDIO_PARANOIA_H 0 --#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 --#define HAVE_CUDA_H 0 --#define HAVE_DISPATCH_DISPATCH_H 0 --#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 --#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 --#define HAVE_DEV_IC_BT8XX_H 0 --#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 --#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 --#define HAVE_DIRECT_H 1 --#define HAVE_DIRENT_H 0 --#define HAVE_DXGIDEBUG_H 1 --#define HAVE_DXVA_H 1 --#define HAVE_ES2_GL_H 0 --#define HAVE_GSM_H 0 --#define HAVE_IO_H 1 --#define HAVE_LINUX_PERF_EVENT_H 0 --#define HAVE_MACHINE_IOCTL_BT848_H 0 --#define HAVE_MACHINE_IOCTL_METEOR_H 0 --#define HAVE_OPENCV2_CORE_CORE_C_H 0 --#define HAVE_OPENGL_GL3_H 0 --#define HAVE_POLL_H 0 --#define HAVE_SYS_PARAM_H 0 --#define HAVE_SYS_RESOURCE_H 0 --#define HAVE_SYS_SELECT_H 0 --#define HAVE_SYS_SOUNDCARD_H 0 --#define HAVE_SYS_TIME_H 0 --#define HAVE_SYS_UN_H 0 --#define HAVE_SYS_VIDEOIO_H 0 --#define HAVE_TERMIOS_H 0 --#define HAVE_UDPLITE_H 0 --#define HAVE_UNISTD_H 0 --#define HAVE_VALGRIND_VALGRIND_H 0 --#define HAVE_WINDOWS_H 1 --#define HAVE_WINSOCK2_H 1 --#define HAVE_INTRINSICS_NEON 1 --#define HAVE_ATANF 1 --#define HAVE_ATAN2F 1 --#define HAVE_CBRT 1 --#define HAVE_CBRTF 1 --#define HAVE_COPYSIGN 1 --#define HAVE_COSF 1 --#define HAVE_ERF 1 --#define HAVE_EXP2 1 --#define HAVE_EXP2F 1 --#define HAVE_EXPF 1 --#define HAVE_HYPOT 1 --#define HAVE_ISFINITE 1 --#define HAVE_ISINF 1 --#define HAVE_ISNAN 1 --#define HAVE_LDEXPF 1 --#define HAVE_LLRINT 1 --#define HAVE_LLRINTF 1 --#define HAVE_LOG2 1 --#define HAVE_LOG2F 1 --#define HAVE_LOG10F 1 --#define HAVE_LRINT 1 --#define HAVE_LRINTF 1 --#define HAVE_POWF 1 --#define HAVE_RINT 1 --#define HAVE_ROUND 1 --#define HAVE_ROUNDF 1 --#define HAVE_SINF 1 --#define HAVE_TRUNC 1 --#define HAVE_TRUNCF 1 --#define HAVE_DOS_PATHS 1 --#define HAVE_LIBC_MSVCRT 1 --#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 --#define HAVE_SECTION_DATA_REL_RO 0 --#define HAVE_THREADS 1 --#define HAVE_UWP 0 --#define HAVE_WINRT 0 --#define HAVE_ACCESS 1 --#define HAVE_ALIGNED_MALLOC 1 --#define HAVE_CLOCK_GETTIME 0 --#define HAVE_CLOSESOCKET 1 --#define HAVE_COMMANDLINETOARGVW 1 --#define HAVE_FCNTL 0 --#define HAVE_GETADDRINFO 1 --#define HAVE_GETHRTIME 0 --#define HAVE_GETOPT 0 --#define HAVE_GETPROCESSAFFINITYMASK 1 --#define HAVE_GETPROCESSMEMORYINFO 1 --#define HAVE_GETPROCESSTIMES 1 --#define HAVE_GETRUSAGE 0 --#define HAVE_GETSYSTEMTIMEASFILETIME 1 --#define HAVE_GETTIMEOFDAY 0 --#define HAVE_GLOB 0 --#define HAVE_GLXGETPROCADDRESS 0 --#define HAVE_GMTIME_R 0 --#define HAVE_INET_ATON 0 --#define HAVE_ISATTY 1 --#define HAVE_KBHIT 1 --#define HAVE_LSTAT 0 --#define HAVE_LZO1X_999_COMPRESS 0 --#define HAVE_MACH_ABSOLUTE_TIME 0 --#define HAVE_MAPVIEWOFFILE 1 --#define HAVE_MKSTEMP 0 --#define HAVE_MMAP 0 --#define HAVE_MPROTECT 0 --#define HAVE_NANOSLEEP 0 --#define HAVE_PEEKNAMEDPIPE 1 --#define HAVE_PTHREAD_CANCEL 0 --#define HAVE_SCHED_GETAFFINITY 0 --#define HAVE_SECITEMIMPORT 0 --#define HAVE_SETCONSOLETEXTATTRIBUTE 1 --#define HAVE_SETCONSOLECTRLHANDLER 1 --#define HAVE_SETMODE 1 --#define HAVE_SETRLIMIT 0 --#define HAVE_SLEEP 1 --#define HAVE_STRERROR_R 0 --#define HAVE_SYSCONF 0 --#define HAVE_SYSCTL 0 --#define HAVE_USLEEP 0 --#define HAVE_UTGETOSTYPEFROMSTRING 0 --#define HAVE_VIRTUALALLOC 1 --#define HAVE_WGLGETPROCADDRESS 0 --#define HAVE_BCRYPT 1 --#define HAVE_VAAPI_DRM 0 --#define HAVE_VAAPI_X11 0 --#define HAVE_VDPAU_X11 0 --#define HAVE_PTHREADS 0 --#define HAVE_OS2THREADS 0 --#define HAVE_W32THREADS 1 --#define HAVE_AS_ARCH_DIRECTIVE 0 --#define HAVE_AS_DN_DIRECTIVE 0 --#define HAVE_AS_FPU_DIRECTIVE 0 --#define HAVE_AS_FUNC 1 --#define HAVE_AS_OBJECT_ARCH 0 --#define HAVE_ASM_MOD_Q 0 --#define HAVE_BLOCKS_EXTENSION 0 --#define HAVE_EBP_AVAILABLE 0 --#define HAVE_EBX_AVAILABLE 0 --#define HAVE_GNU_AS 0 --#define HAVE_GNU_WINDRES 0 --#define HAVE_IBM_ASM 0 --#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 --#define HAVE_INLINE_ASM_LABELS 0 --#define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 --#define HAVE_PRAGMA_DEPRECATED 1 --#define HAVE_RSYNC_CONTIMEOUT 1 --#define HAVE_SYMVER_ASM_LABEL 0 --#define HAVE_SYMVER_GNU_ASM 0 --#define HAVE_VFP_ARGS 0 --#define HAVE_XFORM_ASM 0 --#define HAVE_XMM_CLOBBERS 0 --#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 --#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 --#define HAVE_SOCKLEN_T 1 --#define HAVE_STRUCT_ADDRINFO 1 --#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 --#define HAVE_STRUCT_IP_MREQ_SOURCE 1 --#define HAVE_STRUCT_IPV6_MREQ 1 --#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0 --#define HAVE_STRUCT_POLLFD 1 --#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0 --#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 --#define HAVE_STRUCT_SOCKADDR_IN6 1 --#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 --#define HAVE_STRUCT_SOCKADDR_STORAGE 1 --#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 --#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 --#define HAVE_MAKEINFO 0 --#define HAVE_MAKEINFO_HTML 0 --#define HAVE_OPENCL_D3D11 0 --#define HAVE_OPENCL_DRM_ARM 0 --#define HAVE_OPENCL_DRM_BEIGNET 0 --#define HAVE_OPENCL_DXVA2 0 --#define HAVE_OPENCL_VAAPI_BEIGNET 0 --#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 --#define HAVE_PERL 1 --#define HAVE_POD2MAN 1 --#define HAVE_TEXI2HTML 0 --#define CONFIG_DOC 0 --#define CONFIG_HTMLPAGES 0 --#define CONFIG_MANPAGES 1 --#define CONFIG_PODPAGES 1 --#define CONFIG_TXTPAGES 0 --#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 --#define CONFIG_AVIO_READING_EXAMPLE 1 --#define CONFIG_DECODE_AUDIO_EXAMPLE 1 --#define CONFIG_DECODE_VIDEO_EXAMPLE 1 --#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 --#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 --#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 --#define CONFIG_EXTRACT_MVS_EXAMPLE 0 --#define CONFIG_FILTER_AUDIO_EXAMPLE 0 --#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 --#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 --#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 --#define CONFIG_HW_DECODE_EXAMPLE 0 --#define CONFIG_METADATA_EXAMPLE 0 --#define CONFIG_MUXING_EXAMPLE 0 --#define CONFIG_QSVDEC_EXAMPLE 0 --#define CONFIG_REMUXING_EXAMPLE 0 --#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 --#define CONFIG_SCALING_VIDEO_EXAMPLE 0 --#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 --#define CONFIG_TRANSCODING_EXAMPLE 0 --#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 --#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 --#define CONFIG_AVISYNTH 0 --#define CONFIG_FREI0R 0 --#define CONFIG_LIBCDIO 0 --#define CONFIG_LIBDAVS2 0 --#define CONFIG_LIBRUBBERBAND 0 --#define CONFIG_LIBVIDSTAB 0 --#define CONFIG_LIBX264 0 --#define CONFIG_LIBX265 0 --#define CONFIG_LIBXAVS 0 --#define CONFIG_LIBXAVS2 0 --#define CONFIG_LIBXVID 0 --#define CONFIG_DECKLINK 0 --#define CONFIG_LIBFDK_AAC 0 --#define CONFIG_OPENSSL 0 --#define CONFIG_LIBTLS 0 --#define CONFIG_GMP 0 --#define CONFIG_LIBARIBB24 0 --#define CONFIG_LIBLENSFUN 0 --#define CONFIG_LIBOPENCORE_AMRNB 0 --#define CONFIG_LIBOPENCORE_AMRWB 0 --#define CONFIG_LIBVMAF 0 --#define CONFIG_LIBVO_AMRWBENC 0 --#define CONFIG_MBEDTLS 0 --#define CONFIG_RKMPP 0 --#define CONFIG_LIBSMBCLIENT 0 --#define CONFIG_CHROMAPRINT 0 --#define CONFIG_GCRYPT 0 --#define CONFIG_GNUTLS 0 --#define CONFIG_JNI 0 --#define CONFIG_LADSPA 0 --#define CONFIG_LIBAOM 0 --#define CONFIG_LIBASS 0 --#define CONFIG_LIBBLURAY 0 --#define CONFIG_LIBBS2B 0 --#define CONFIG_LIBCACA 0 --#define CONFIG_LIBCELT 0 --#define CONFIG_LIBCODEC2 0 --#define CONFIG_LIBDAV1D 0 --#define CONFIG_LIBDC1394 0 --#define CONFIG_LIBDRM 0 --#define CONFIG_LIBFLITE 0 --#define CONFIG_LIBFONTCONFIG 0 --#define CONFIG_LIBFREETYPE 0 --#define CONFIG_LIBFRIBIDI 0 --#define CONFIG_LIBGME 0 --#define CONFIG_LIBGSM 0 --#define CONFIG_LIBIEC61883 0 --#define CONFIG_LIBILBC 0 --#define CONFIG_LIBJACK 0 --#define CONFIG_LIBKLVANC 0 --#define CONFIG_LIBKVAZAAR 0 --#define CONFIG_LIBMODPLUG 0 --#define CONFIG_LIBMP3LAME 0 --#define CONFIG_LIBMYSOFA 0 --#define CONFIG_LIBOPENCV 0 --#define CONFIG_LIBOPENH264 0 --#define CONFIG_LIBOPENJPEG 0 --#define CONFIG_LIBOPENMPT 0 --#define CONFIG_LIBOPUS 0 --#define CONFIG_LIBPULSE 0 --#define CONFIG_LIBRSVG 0 --#define CONFIG_LIBRTMP 0 --#define CONFIG_LIBSHINE 0 --#define CONFIG_LIBSMBCLIENT 0 --#define CONFIG_LIBSNAPPY 0 --#define CONFIG_LIBSOXR 0 --#define CONFIG_LIBSPEEX 0 --#define CONFIG_LIBSRT 0 --#define CONFIG_LIBSSH 0 --#define CONFIG_LIBTENSORFLOW 0 --#define CONFIG_LIBTESSERACT 0 --#define CONFIG_LIBTHEORA 0 --#define CONFIG_LIBTWOLAME 0 --#define CONFIG_LIBV4L2 0 --#define CONFIG_LIBVORBIS 0 --#define CONFIG_LIBVPX 0 --#define CONFIG_LIBWAVPACK 0 --#define CONFIG_LIBWEBP 0 --#define CONFIG_LIBXML2 0 --#define CONFIG_LIBZIMG 0 --#define CONFIG_LIBZMQ 0 --#define CONFIG_LIBZVBI 0 --#define CONFIG_LV2 0 --#define CONFIG_MEDIACODEC 0 --#define CONFIG_OPENAL 0 --#define CONFIG_OPENGL 0 --#define CONFIG_POCKETSPHINX 0 --#define CONFIG_VAPOURSYNTH 0 --#define CONFIG_ALSA 0 --#define CONFIG_APPKIT 0 --#define CONFIG_AVFOUNDATION 0 --#define CONFIG_BZLIB 0 --#define CONFIG_COREIMAGE 0 --#define CONFIG_ICONV 0 --#define CONFIG_LIBXCB 0 --#define CONFIG_LIBXCB_SHM 0 --#define CONFIG_LIBXCB_SHAPE 0 --#define CONFIG_LIBXCB_XFIXES 0 --#define CONFIG_LZMA 0 --#define CONFIG_SCHANNEL 0 --#define CONFIG_SDL2 0 --#define CONFIG_SECURETRANSPORT 0 --#define CONFIG_SNDIO 0 --#define CONFIG_XLIB 0 --#define CONFIG_ZLIB 0 --#define CONFIG_CUDA_NVCC 0 --#define CONFIG_CUDA_SDK 0 --#define CONFIG_LIBNPP 0 --#define CONFIG_LIBMFX 0 --#define CONFIG_MMAL 0 --#define CONFIG_OMX 0 --#define CONFIG_OPENCL 0 --#define CONFIG_AMF 0 --#define CONFIG_AUDIOTOOLBOX 0 --#define CONFIG_CRYSTALHD 0 --#define CONFIG_CUDA 0 --#define CONFIG_CUDA_LLVM 0 --#define CONFIG_CUVID 0 --#define CONFIG_D3D11VA 0 --#define CONFIG_DXVA2 0 --#define CONFIG_FFNVCODEC 0 --#define CONFIG_NVDEC 0 --#define CONFIG_NVENC 0 --#define CONFIG_VAAPI 0 --#define CONFIG_VDPAU 0 --#define CONFIG_VIDEOTOOLBOX 0 --#define CONFIG_V4L2_M2M 0 --#define CONFIG_XVMC 0 --#define CONFIG_FTRAPV 0 --#define CONFIG_GRAY 0 --#define CONFIG_HARDCODED_TABLES 0 --#define CONFIG_OMX_RPI 0 --#define CONFIG_RUNTIME_CPUDETECT 1 --#define CONFIG_SAFE_BITSTREAM_READER 1 --#define CONFIG_SHARED 1 --#define CONFIG_SMALL 0 --#define CONFIG_STATIC 0 --#define CONFIG_SWSCALE_ALPHA 1 --#define CONFIG_GPL 0 --#define CONFIG_NONFREE 0 --#define CONFIG_VERSION3 0 --#define CONFIG_AVDEVICE 0 --#define CONFIG_AVFILTER 0 --#define CONFIG_SWSCALE 0 --#define CONFIG_POSTPROC 0 --#define CONFIG_AVFORMAT 0 --#define CONFIG_AVCODEC 1 --#define CONFIG_SWRESAMPLE 0 --#define CONFIG_AVRESAMPLE 0 --#define CONFIG_AVUTIL 1 --#define CONFIG_FFPLAY 0 --#define CONFIG_FFPROBE 0 --#define CONFIG_FFMPEG 0 --#define CONFIG_DCT 1 --#define CONFIG_DWT 0 --#define CONFIG_ERROR_RESILIENCE 0 --#define CONFIG_FAAN 1 --#define CONFIG_FAST_UNALIGNED 1 --#define CONFIG_FFT 1 --#define CONFIG_LSP 0 --#define CONFIG_LZO 0 --#define CONFIG_MDCT 0 --#define CONFIG_PIXELUTILS 0 --#define CONFIG_NETWORK 0 --#define CONFIG_RDFT 1 --#define CONFIG_AUTODETECT 0 --#define CONFIG_FONTCONFIG 0 --#define CONFIG_LINUX_PERF 0 --#define CONFIG_MEMORY_POISONING 0 --#define CONFIG_NEON_CLOBBER_TEST 0 --#define CONFIG_OSSFUZZ 0 --#define CONFIG_PIC 1 --#define CONFIG_THUMB 0 --#define CONFIG_VALGRIND_BACKTRACE 0 --#define CONFIG_XMM_CLOBBER_TEST 0 --#define CONFIG_BSFS 1 --#define CONFIG_DECODERS 1 --#define CONFIG_PARSERS 1 --#define CONFIG_AANDCTTABLES 0 --#define CONFIG_AC3DSP 0 --#define CONFIG_ADTS_HEADER 0 --#define CONFIG_AUDIO_FRAME_QUEUE 0 --#define CONFIG_AUDIODSP 0 --#define CONFIG_BLOCKDSP 0 --#define CONFIG_BSWAPDSP 0 --#define CONFIG_CABAC 0 --#define CONFIG_CBS 0 --#define CONFIG_CBS_AV1 0 --#define CONFIG_CBS_H264 0 --#define CONFIG_CBS_H265 0 --#define CONFIG_CBS_JPEG 0 --#define CONFIG_CBS_MPEG2 0 --#define CONFIG_CBS_VP9 0 --#define CONFIG_DIRAC_PARSE 0 --#define CONFIG_DNN 0 --#define CONFIG_DVPROFILE 0 --#define CONFIG_EXIF 0 --#define CONFIG_FAANDCT 1 --#define CONFIG_FAANIDCT 1 --#define CONFIG_FDCTDSP 1 --#define CONFIG_FLACDSP 1 --#define CONFIG_FMTCONVERT 0 --#define CONFIG_FRAME_THREAD_ENCODER 0 --#define CONFIG_G722DSP 0 --#define CONFIG_GOLOMB 0 --#define CONFIG_GPLV3 0 --#define CONFIG_H263DSP 0 --#define CONFIG_H264CHROMA 0 --#define CONFIG_H264DSP 0 --#define CONFIG_H264PARSE 0 --#define CONFIG_H264PRED 1 --#define CONFIG_H264QPEL 0 --#define CONFIG_HEVCPARSE 0 --#define CONFIG_HPELDSP 0 --#define CONFIG_HUFFMAN 0 --#define CONFIG_HUFFYUVDSP 0 --#define CONFIG_HUFFYUVENCDSP 0 --#define CONFIG_IDCTDSP 1 --#define CONFIG_IIRFILTER 0 --#define CONFIG_MDCT15 0 --#define CONFIG_INTRAX8 0 --#define CONFIG_ISO_MEDIA 0 --#define CONFIG_IVIDSP 0 --#define CONFIG_JPEGTABLES 0 --#define CONFIG_LGPLV3 0 --#define CONFIG_LIBX262 0 --#define CONFIG_LLAUDDSP 0 --#define CONFIG_LLVIDDSP 0 --#define CONFIG_LLVIDENCDSP 0 --#define CONFIG_LPC 0 --#define CONFIG_LZF 0 --#define CONFIG_ME_CMP 0 --#define CONFIG_MPEG_ER 0 --#define CONFIG_MPEGAUDIO 1 --#define CONFIG_MPEGAUDIODSP 1 --#define CONFIG_MPEGAUDIOHEADER 1 --#define CONFIG_MPEGVIDEO 0 --#define CONFIG_MPEGVIDEOENC 0 --#define CONFIG_MSS34DSP 0 --#define CONFIG_PIXBLOCKDSP 0 --#define CONFIG_QPELDSP 0 --#define CONFIG_QSV 0 --#define CONFIG_QSVDEC 0 --#define CONFIG_QSVENC 0 --#define CONFIG_QSVVPP 0 --#define CONFIG_RANGECODER 0 --#define CONFIG_RIFFDEC 0 --#define CONFIG_RIFFENC 0 --#define CONFIG_RTPDEC 0 --#define CONFIG_RTPENC_CHAIN 0 --#define CONFIG_RV34DSP 0 --#define CONFIG_SCENE_SAD 0 --#define CONFIG_SINEWIN 0 --#define CONFIG_SNAPPY 0 --#define CONFIG_SRTP 0 --#define CONFIG_STARTCODE 0 --#define CONFIG_TEXTUREDSP 0 --#define CONFIG_TEXTUREDSPENC 0 --#define CONFIG_TPELDSP 0 --#define CONFIG_VAAPI_1 0 --#define CONFIG_VAAPI_ENCODE 0 --#define CONFIG_VC1DSP 0 --#define CONFIG_VIDEODSP 1 --#define CONFIG_VP3DSP 0 --#define CONFIG_VP56DSP 0 --#define CONFIG_VP8DSP 1 --#define CONFIG_WMA_FREQS 0 --#define CONFIG_WMV2DSP 0 --#define CONFIG_NULL_BSF 1 --#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --#define CONFIG_VP8_DECODER 1 --#define CONFIG_VP9_DECODER 1 --#define CONFIG_FLAC_DECODER 1 --#define CONFIG_MP3_DECODER 1 --#define CONFIG_VP8_PARSER 1 --#define CONFIG_VP9_PARSER 1 --#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_android32.h b/media/ffvpx/config_android32.h ---- a/media/ffvpx/config_android32.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_android32.h 2023-04-06 12:49:19.191546429 +0200 -@@ -1,15 +1,16 @@ - /* Automatically generated by configure - do not modify! */ - #ifndef FFMPEG_CONFIG_H - #define FFMPEG_CONFIG_H --#define FFMPEG_CONFIGURATION "--cross-prefix=/home/jyavenard/.mozbuild/android-ndk-r15c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=/home/jyavenard/.mozbuild/android-ndk-r15c/platforms/android-24/arch-arm --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-cuda --disable-cuvid --enable-decoder=mp3" -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='mp3,flac' --disable-static --enable-shared --disable-autodetect --enable-small --target-os=linux --arch=arm --enable-cross-compile --cc=/Users/padenot/.mozbuild/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi16-clang" - #define FFMPEG_LICENSE "LGPL version 2.1 or later" --#define CONFIG_THIS_YEAR 2017 -+#define CONFIG_THIS_YEAR 2022 - #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" - #define AVCONV_DATADIR "/usr/local/share/ffmpeg" --#define CC_IDENT "gcc 4.9.x (GCC) 20150123 (prerelease)" -+#define CC_IDENT "Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)" -+#define OS_NAME linux - #define av_restrict restrict - #define EXTERN_PREFIX "" --#define EXTERN_ASM -+#define EXTERN_ASM - #define BUILDSUF "" - #define SLIBSUF ".so" - #define HAVE_MMX2 HAVE_MMXEXT -@@ -22,12 +23,16 @@ - #define ARCH_AVR32_UC 0 - #define ARCH_BFIN 0 - #define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 - #define ARCH_M68K 0 - #define ARCH_MIPS 0 - #define ARCH_MIPS64 0 - #define ARCH_PARISC 0 - #define ARCH_PPC 0 - #define ARCH_PPC64 0 -+#define ARCH_RISCV 0 - #define ARCH_S390 0 - #define ARCH_SH4 0 - #define ARCH_SPARC 0 -@@ -58,6 +63,7 @@ - #define HAVE_AVX 0 - #define HAVE_AVX2 0 - #define HAVE_AVX512 0 -+#define HAVE_AVX512ICL 0 - #define HAVE_FMA3 0 - #define HAVE_FMA4 0 - #define HAVE_MMX 0 -@@ -80,18 +86,19 @@ - #define HAVE_MIPSDSP 0 - #define HAVE_MIPSDSPR2 0 - #define HAVE_MSA 0 --#define HAVE_MSA2 0 - #define HAVE_LOONGSON2 0 - #define HAVE_LOONGSON3 0 - #define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 - #define HAVE_ARMV5TE_EXTERNAL 1 --#define HAVE_ARMV6_EXTERNAL 0 --#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 1 -+#define HAVE_ARMV6T2_EXTERNAL 1 - #define HAVE_ARMV8_EXTERNAL 0 --#define HAVE_NEON_EXTERNAL 0 -+#define HAVE_NEON_EXTERNAL 1 - #define HAVE_VFP_EXTERNAL 1 --#define HAVE_VFPV3_EXTERNAL 0 --#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_VFPV3_EXTERNAL 1 -+#define HAVE_SETEND_EXTERNAL 1 - #define HAVE_ALTIVEC_EXTERNAL 0 - #define HAVE_DCBZL_EXTERNAL 0 - #define HAVE_LDBRX_EXTERNAL 0 -@@ -104,6 +111,7 @@ - #define HAVE_AVX_EXTERNAL 0 - #define HAVE_AVX2_EXTERNAL 0 - #define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_AVX512ICL_EXTERNAL 0 - #define HAVE_FMA3_EXTERNAL 0 - #define HAVE_FMA4_EXTERNAL 0 - #define HAVE_MMX_EXTERNAL 0 -@@ -126,18 +134,19 @@ - #define HAVE_MIPSDSP_EXTERNAL 0 - #define HAVE_MIPSDSPR2_EXTERNAL 0 - #define HAVE_MSA_EXTERNAL 0 --#define HAVE_MSA2_EXTERNAL 0 - #define HAVE_LOONGSON2_EXTERNAL 0 - #define HAVE_LOONGSON3_EXTERNAL 0 - #define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 - #define HAVE_ARMV5TE_INLINE 1 --#define HAVE_ARMV6_INLINE 0 --#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV6_INLINE 1 -+#define HAVE_ARMV6T2_INLINE 1 - #define HAVE_ARMV8_INLINE 0 --#define HAVE_NEON_INLINE 0 --#define HAVE_VFP_INLINE 0 --#define HAVE_VFPV3_INLINE 0 --#define HAVE_SETEND_INLINE 0 -+#define HAVE_NEON_INLINE 1 -+#define HAVE_VFP_INLINE 1 -+#define HAVE_VFPV3_INLINE 1 -+#define HAVE_SETEND_INLINE 1 - #define HAVE_ALTIVEC_INLINE 0 - #define HAVE_DCBZL_INLINE 0 - #define HAVE_LDBRX_INLINE 0 -@@ -150,6 +159,7 @@ - #define HAVE_AVX_INLINE 0 - #define HAVE_AVX2_INLINE 0 - #define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 - #define HAVE_FMA3_INLINE 0 - #define HAVE_FMA4_INLINE 0 - #define HAVE_MMX_INLINE 0 -@@ -172,10 +182,11 @@ - #define HAVE_MIPSDSP_INLINE 0 - #define HAVE_MIPSDSPR2_INLINE 0 - #define HAVE_MSA_INLINE 0 --#define HAVE_MSA2_INLINE 0 - #define HAVE_LOONGSON2_INLINE 0 - #define HAVE_LOONGSON3_INLINE 0 - #define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 - #define HAVE_ALIGNED_STACK 0 - #define HAVE_FAST_64BIT 0 - #define HAVE_FAST_CLZ 1 -@@ -191,13 +202,13 @@ - #define HAVE_RDTSC 0 - #define HAVE_SEM_TIMEDWAIT 1 - #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 --#define HAVE_CABS 1 --#define HAVE_CEXP 1 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 - #define HAVE_INLINE_ASM 1 - #define HAVE_SYMVER 1 - #define HAVE_X86ASM 0 - #define HAVE_BIGENDIAN 0 --#define HAVE_FAST_UNALIGNED 0 -+#define HAVE_FAST_UNALIGNED 1 - #define HAVE_ARPA_INET_H 1 - #define HAVE_ASM_TYPES_H 1 - #define HAVE_CDIO_PARANOIA_H 0 -@@ -216,9 +227,11 @@ - #define HAVE_ES2_GL_H 0 - #define HAVE_GSM_H 0 - #define HAVE_IO_H 0 --#define HAVE_LINUX_PERF_EVENT_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 1 - #define HAVE_MACHINE_IOCTL_BT848_H 0 - #define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_MALLOC_H 1 - #define HAVE_OPENCV2_CORE_CORE_C_H 0 - #define HAVE_OPENGL_GL3_H 0 - #define HAVE_POLL_H 1 -@@ -235,7 +248,7 @@ - #define HAVE_VALGRIND_VALGRIND_H 0 - #define HAVE_WINDOWS_H 0 - #define HAVE_WINSOCK2_H 0 --#define HAVE_INTRINSICS_NEON 0 -+#define HAVE_INTRINSICS_NEON 1 - #define HAVE_ATANF 1 - #define HAVE_ATAN2F 1 - #define HAVE_CBRT 1 -@@ -253,8 +266,8 @@ - #define HAVE_LDEXPF 1 - #define HAVE_LLRINT 1 - #define HAVE_LLRINTF 1 --#define HAVE_LOG2 1 --#define HAVE_LOG2F 1 -+#define HAVE_LOG2 0 -+#define HAVE_LOG2F 0 - #define HAVE_LOG10F 1 - #define HAVE_LRINT 1 - #define HAVE_LRINTF 1 -@@ -274,17 +287,22 @@ - #define HAVE_WINRT 0 - #define HAVE_ACCESS 1 - #define HAVE_ALIGNED_MALLOC 0 -+#define HAVE_ARC4RANDOM 1 - #define HAVE_CLOCK_GETTIME 1 - #define HAVE_CLOSESOCKET 0 - #define HAVE_COMMANDLINETOARGVW 0 - #define HAVE_FCNTL 1 - #define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 0 -+#define HAVE_GETENV 1 - #define HAVE_GETHRTIME 0 - #define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 - #define HAVE_GETPROCESSAFFINITYMASK 0 - #define HAVE_GETPROCESSMEMORYINFO 0 - #define HAVE_GETPROCESSTIMES 0 - #define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 - #define HAVE_GETSYSTEMTIMEASFILETIME 0 - #define HAVE_GETTIMEOFDAY 1 - #define HAVE_GLOB 0 -@@ -293,20 +311,24 @@ - #define HAVE_INET_ATON 1 - #define HAVE_ISATTY 1 - #define HAVE_KBHIT 0 -+#define HAVE_LOCALTIME_R 1 - #define HAVE_LSTAT 1 - #define HAVE_LZO1X_999_COMPRESS 0 - #define HAVE_MACH_ABSOLUTE_TIME 0 - #define HAVE_MAPVIEWOFFILE 0 -+#define HAVE_MEMALIGN 1 - #define HAVE_MKSTEMP 1 - #define HAVE_MMAP 1 - #define HAVE_MPROTECT 1 - #define HAVE_NANOSLEEP 1 - #define HAVE_PEEKNAMEDPIPE 0 -+#define HAVE_POSIX_MEMALIGN 0 - #define HAVE_PTHREAD_CANCEL 0 - #define HAVE_SCHED_GETAFFINITY 1 - #define HAVE_SECITEMIMPORT 0 - #define HAVE_SETCONSOLETEXTATTRIBUTE 0 - #define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 - #define HAVE_SETMODE 0 - #define HAVE_SETRLIMIT 1 - #define HAVE_SLEEP 0 -@@ -325,7 +347,7 @@ - #define HAVE_OS2THREADS 0 - #define HAVE_W32THREADS 0 - #define HAVE_AS_ARCH_DIRECTIVE 1 --#define HAVE_AS_DN_DIRECTIVE 1 -+#define HAVE_AS_DN_DIRECTIVE 0 - #define HAVE_AS_FPU_DIRECTIVE 1 - #define HAVE_AS_FUNC 0 - #define HAVE_AS_OBJECT_ARCH 1 -@@ -340,14 +362,29 @@ - #define HAVE_INLINE_ASM_LABELS 1 - #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 - #define HAVE_PRAGMA_DEPRECATED 1 --#define HAVE_RSYNC_CONTIMEOUT 1 --#define HAVE_SYMVER_ASM_LABEL 0 -+#define HAVE_RSYNC_CONTIMEOUT 0 -+#define HAVE_SYMVER_ASM_LABEL 1 - #define HAVE_SYMVER_GNU_ASM 1 - #define HAVE_VFP_ARGS 0 - #define HAVE_XFORM_ASM 0 - #define HAVE_XMM_CLOBBERS 0 - #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 - #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - #define HAVE_SOCKLEN_T 1 - #define HAVE_STRUCT_ADDRINFO 1 - #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -360,8 +397,10 @@ - #define HAVE_STRUCT_SOCKADDR_IN6 1 - #define HAVE_STRUCT_SOCKADDR_SA_LEN 0 - #define HAVE_STRUCT_SOCKADDR_STORAGE 1 --#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 --#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 - #define HAVE_MAKEINFO 1 - #define HAVE_MAKEINFO_HTML 0 - #define HAVE_OPENCL_D3D11 0 -@@ -373,12 +412,14 @@ - #define HAVE_PERL 1 - #define HAVE_POD2MAN 1 - #define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 - #define CONFIG_DOC 0 - #define CONFIG_HTMLPAGES 0 - #define CONFIG_MANPAGES 1 - #define CONFIG_PODPAGES 1 - #define CONFIG_TXTPAGES 1 --#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - #define CONFIG_AVIO_READING_EXAMPLE 1 - #define CONFIG_DECODE_AUDIO_EXAMPLE 1 - #define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -414,14 +455,12 @@ - #define CONFIG_LIBXVID 0 - #define CONFIG_DECKLINK 0 - #define CONFIG_LIBFDK_AAC 0 --#define CONFIG_OPENSSL 0 - #define CONFIG_LIBTLS 0 - #define CONFIG_GMP 0 - #define CONFIG_LIBARIBB24 0 - #define CONFIG_LIBLENSFUN 0 - #define CONFIG_LIBOPENCORE_AMRNB 0 - #define CONFIG_LIBOPENCORE_AMRWB 0 --#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVO_AMRWBENC 0 - #define CONFIG_MBEDTLS 0 - #define CONFIG_RKMPP 0 -@@ -431,6 +470,7 @@ - #define CONFIG_GNUTLS 0 - #define CONFIG_JNI 0 - #define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 - #define CONFIG_LIBAOM 0 - #define CONFIG_LIBASS 0 - #define CONFIG_LIBBLURAY 0 -@@ -445,11 +485,13 @@ - #define CONFIG_LIBFONTCONFIG 0 - #define CONFIG_LIBFREETYPE 0 - #define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 - #define CONFIG_LIBGME 0 - #define CONFIG_LIBGSM 0 - #define CONFIG_LIBIEC61883 0 - #define CONFIG_LIBILBC 0 - #define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 - #define CONFIG_LIBKLVANC 0 - #define CONFIG_LIBKVAZAAR 0 - #define CONFIG_LIBMODPLUG 0 -@@ -459,10 +501,16 @@ - #define CONFIG_LIBOPENH264 0 - #define CONFIG_LIBOPENJPEG 0 - #define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 - #define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 - #define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 - #define CONFIG_LIBRSVG 0 - #define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 - #define CONFIG_LIBSHINE 0 - #define CONFIG_LIBSMBCLIENT 0 - #define CONFIG_LIBSNAPPY 0 -@@ -470,14 +518,16 @@ - #define CONFIG_LIBSPEEX 0 - #define CONFIG_LIBSRT 0 - #define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 - #define CONFIG_LIBTENSORFLOW 0 - #define CONFIG_LIBTESSERACT 0 - #define CONFIG_LIBTHEORA 0 - #define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 - #define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVORBIS 0 - #define CONFIG_LIBVPX 0 --#define CONFIG_LIBWAVPACK 0 - #define CONFIG_LIBWEBP 0 - #define CONFIG_LIBXML2 0 - #define CONFIG_LIBZIMG 0 -@@ -487,25 +537,28 @@ - #define CONFIG_MEDIACODEC 0 - #define CONFIG_OPENAL 0 - #define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 - #define CONFIG_POCKETSPHINX 0 - #define CONFIG_VAPOURSYNTH 0 - #define CONFIG_ALSA 0 --#define CONFIG_APPKIT 1 --#define CONFIG_AVFOUNDATION 1 --#define CONFIG_BZLIB 1 --#define CONFIG_COREIMAGE 1 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 - #define CONFIG_ICONV 0 - #define CONFIG_LIBXCB 0 - #define CONFIG_LIBXCB_SHM 0 - #define CONFIG_LIBXCB_SHAPE 0 - #define CONFIG_LIBXCB_XFIXES 0 --#define CONFIG_LZMA 1 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 - #define CONFIG_SCHANNEL 0 - #define CONFIG_SDL2 0 - #define CONFIG_SECURETRANSPORT 0 - #define CONFIG_SNDIO 0 --#define CONFIG_XLIB 1 --#define CONFIG_ZLIB 1 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 - #define CONFIG_CUDA_NVCC 0 - #define CONFIG_CUDA_SDK 0 - #define CONFIG_LIBNPP 0 -@@ -527,8 +580,8 @@ - #define CONFIG_VAAPI 0 - #define CONFIG_VDPAU 0 - #define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 - #define CONFIG_V4L2_M2M 0 --#define CONFIG_XVMC 0 - #define CONFIG_FTRAPV 0 - #define CONFIG_GRAY 0 - #define CONFIG_HARDCODED_TABLES 0 -@@ -549,7 +602,6 @@ - #define CONFIG_AVFORMAT 0 - #define CONFIG_AVCODEC 1 - #define CONFIG_SWRESAMPLE 0 --#define CONFIG_AVRESAMPLE 0 - #define CONFIG_AVUTIL 1 - #define CONFIG_FFPLAY 0 - #define CONFIG_FFPROBE 0 -@@ -558,30 +610,41 @@ - #define CONFIG_DWT 0 - #define CONFIG_ERROR_RESILIENCE 0 - #define CONFIG_FAAN 1 --#define CONFIG_FAST_UNALIGNED 0 --#define CONFIG_FFT 0 -+#define CONFIG_FAST_UNALIGNED 1 -+#define CONFIG_FFT 1 - #define CONFIG_LSP 0 --#define CONFIG_LZO 0 - #define CONFIG_MDCT 0 - #define CONFIG_PIXELUTILS 0 - #define CONFIG_NETWORK 0 - #define CONFIG_RDFT 1 - #define CONFIG_AUTODETECT 0 - #define CONFIG_FONTCONFIG 0 --#define CONFIG_LINUX_PERF 0 -+#define CONFIG_LARGE_TESTS 1 -+#define CONFIG_LINUX_PERF 1 -+#define CONFIG_MACOS_KPERF 0 - #define CONFIG_MEMORY_POISONING 0 - #define CONFIG_NEON_CLOBBER_TEST 0 - #define CONFIG_OSSFUZZ 0 - #define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 - #define CONFIG_THUMB 0 - #define CONFIG_VALGRIND_BACKTRACE 0 - #define CONFIG_XMM_CLOBBER_TEST 0 --#define CONFIG_BSFS 1 -+#define CONFIG_BSFS 0 - #define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 - #define CONFIG_PARSERS 0 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 - #define CONFIG_AANDCTTABLES 0 - #define CONFIG_AC3DSP 0 - #define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 - #define CONFIG_AUDIO_FRAME_QUEUE 0 - #define CONFIG_AUDIODSP 0 - #define CONFIG_BLOCKDSP 0 -@@ -594,15 +657,18 @@ - #define CONFIG_CBS_JPEG 0 - #define CONFIG_CBS_MPEG2 0 - #define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 - #define CONFIG_DIRAC_PARSE 0 - #define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 - #define CONFIG_DVPROFILE 0 - #define CONFIG_EXIF 0 --#define CONFIG_FAANDCT 0 --#define CONFIG_FAANIDCT 0 --#define CONFIG_FDCTDSP 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 - #define CONFIG_FLACDSP 1 - #define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 - #define CONFIG_G722DSP 0 - #define CONFIG_GOLOMB 0 - #define CONFIG_GPLV3 0 -@@ -617,9 +683,10 @@ - #define CONFIG_HUFFMAN 0 - #define CONFIG_HUFFYUVDSP 0 - #define CONFIG_HUFFYUVENCDSP 0 --#define CONFIG_IDCTDSP 0 -+#define CONFIG_IDCTDSP 1 - #define CONFIG_IIRFILTER 0 - #define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 - #define CONFIG_INTRAX8 0 - #define CONFIG_ISO_MEDIA 0 - #define CONFIG_IVIDSP 0 -@@ -636,7 +703,9 @@ - #define CONFIG_MPEGAUDIO 1 - #define CONFIG_MPEGAUDIODSP 1 - #define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 - #define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 - #define CONFIG_MPEGVIDEOENC 0 - #define CONFIG_MSS34DSP 0 - #define CONFIG_PIXBLOCKDSP 0 -@@ -668,12 +737,4 @@ - #define CONFIG_VP8DSP 0 - #define CONFIG_WMA_FREQS 0 - #define CONFIG_WMV2DSP 0 --#define CONFIG_NULL_BSF 1 --#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0 --#define CONFIG_VP8_DECODER 0 --#define CONFIG_VP9_DECODER 0 --#define CONFIG_FLAC_DECODER 1 --#define CONFIG_MP3_DECODER 1 --#define CONFIG_VP8_PARSER 0 --#define CONFIG_VP9_PARSER 0 - #endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_android64.h b/media/ffvpx/config_android64.h ---- a/media/ffvpx/config_android64.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_android64.h 2023-04-06 12:49:19.191546429 +0200 -@@ -0,0 +1,740 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_H -+#define FFMPEG_CONFIG_H -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='mp3,flac' --disable-static --enable-shared --disable-autodetect --enable-small --target-os=linux --arch=aarch64 --enable-cross-compile --cc=/Users/padenot/.mozbuild/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang" -+#define FFMPEG_LICENSE "LGPL version 2.1 or later" -+#define CONFIG_THIS_YEAR 2022 -+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" -+#define AVCONV_DATADIR "/usr/local/share/ffmpeg" -+#define CC_IDENT "Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)" -+#define OS_NAME linux -+#define av_restrict restrict -+#define EXTERN_PREFIX "" -+#define EXTERN_ASM -+#define BUILDSUF "" -+#define SLIBSUF ".so" -+#define HAVE_MMX2 HAVE_MMXEXT -+#define SWS_MAX_FILTER_SIZE 256 -+#define ARCH_AARCH64 1 -+#define ARCH_ALPHA 0 -+#define ARCH_ARM 0 -+#define ARCH_AVR32 0 -+#define ARCH_AVR32_AP 0 -+#define ARCH_AVR32_UC 0 -+#define ARCH_BFIN 0 -+#define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 -+#define ARCH_M68K 0 -+#define ARCH_MIPS 0 -+#define ARCH_MIPS64 0 -+#define ARCH_PARISC 0 -+#define ARCH_PPC 0 -+#define ARCH_PPC64 0 -+#define ARCH_RISCV 0 -+#define ARCH_S390 0 -+#define ARCH_SH4 0 -+#define ARCH_SPARC 0 -+#define ARCH_SPARC64 0 -+#define ARCH_TILEGX 0 -+#define ARCH_TILEPRO 0 -+#define ARCH_TOMI 0 -+#define ARCH_X86 0 -+#define ARCH_X86_32 0 -+#define ARCH_X86_64 0 -+#define HAVE_ARMV5TE 0 -+#define HAVE_ARMV6 0 -+#define HAVE_ARMV6T2 0 -+#define HAVE_ARMV8 1 -+#define HAVE_NEON 1 -+#define HAVE_VFP 1 -+#define HAVE_VFPV3 0 -+#define HAVE_SETEND 0 -+#define HAVE_ALTIVEC 0 -+#define HAVE_DCBZL 0 -+#define HAVE_LDBRX 0 -+#define HAVE_POWER8 0 -+#define HAVE_PPC4XX 0 -+#define HAVE_VSX 0 -+#define HAVE_AESNI 0 -+#define HAVE_AMD3DNOW 0 -+#define HAVE_AMD3DNOWEXT 0 -+#define HAVE_AVX 0 -+#define HAVE_AVX2 0 -+#define HAVE_AVX512 0 -+#define HAVE_AVX512ICL 0 -+#define HAVE_FMA3 0 -+#define HAVE_FMA4 0 -+#define HAVE_MMX 0 -+#define HAVE_MMXEXT 0 -+#define HAVE_SSE 0 -+#define HAVE_SSE2 0 -+#define HAVE_SSE3 0 -+#define HAVE_SSE4 0 -+#define HAVE_SSE42 0 -+#define HAVE_SSSE3 0 -+#define HAVE_XOP 0 -+#define HAVE_CPUNOP 0 -+#define HAVE_I686 0 -+#define HAVE_MIPSFPU 0 -+#define HAVE_MIPS32R2 0 -+#define HAVE_MIPS32R5 0 -+#define HAVE_MIPS64R2 0 -+#define HAVE_MIPS32R6 0 -+#define HAVE_MIPS64R6 0 -+#define HAVE_MIPSDSP 0 -+#define HAVE_MIPSDSPR2 0 -+#define HAVE_MSA 0 -+#define HAVE_LOONGSON2 0 -+#define HAVE_LOONGSON3 0 -+#define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 -+#define HAVE_ARMV5TE_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 0 -+#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV8_EXTERNAL 1 -+#define HAVE_NEON_EXTERNAL 1 -+#define HAVE_VFP_EXTERNAL 1 -+#define HAVE_VFPV3_EXTERNAL 0 -+#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_ALTIVEC_EXTERNAL 0 -+#define HAVE_DCBZL_EXTERNAL 0 -+#define HAVE_LDBRX_EXTERNAL 0 -+#define HAVE_POWER8_EXTERNAL 0 -+#define HAVE_PPC4XX_EXTERNAL 0 -+#define HAVE_VSX_EXTERNAL 0 -+#define HAVE_AESNI_EXTERNAL 0 -+#define HAVE_AMD3DNOW_EXTERNAL 0 -+#define HAVE_AMD3DNOWEXT_EXTERNAL 0 -+#define HAVE_AVX_EXTERNAL 0 -+#define HAVE_AVX2_EXTERNAL 0 -+#define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_AVX512ICL_EXTERNAL 0 -+#define HAVE_FMA3_EXTERNAL 0 -+#define HAVE_FMA4_EXTERNAL 0 -+#define HAVE_MMX_EXTERNAL 0 -+#define HAVE_MMXEXT_EXTERNAL 0 -+#define HAVE_SSE_EXTERNAL 0 -+#define HAVE_SSE2_EXTERNAL 0 -+#define HAVE_SSE3_EXTERNAL 0 -+#define HAVE_SSE4_EXTERNAL 0 -+#define HAVE_SSE42_EXTERNAL 0 -+#define HAVE_SSSE3_EXTERNAL 0 -+#define HAVE_XOP_EXTERNAL 0 -+#define HAVE_CPUNOP_EXTERNAL 0 -+#define HAVE_I686_EXTERNAL 0 -+#define HAVE_MIPSFPU_EXTERNAL 0 -+#define HAVE_MIPS32R2_EXTERNAL 0 -+#define HAVE_MIPS32R5_EXTERNAL 0 -+#define HAVE_MIPS64R2_EXTERNAL 0 -+#define HAVE_MIPS32R6_EXTERNAL 0 -+#define HAVE_MIPS64R6_EXTERNAL 0 -+#define HAVE_MIPSDSP_EXTERNAL 0 -+#define HAVE_MIPSDSPR2_EXTERNAL 0 -+#define HAVE_MSA_EXTERNAL 0 -+#define HAVE_LOONGSON2_EXTERNAL 0 -+#define HAVE_LOONGSON3_EXTERNAL 0 -+#define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 -+#define HAVE_ARMV5TE_INLINE 0 -+#define HAVE_ARMV6_INLINE 0 -+#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV8_INLINE 1 -+#define HAVE_NEON_INLINE 1 -+#define HAVE_VFP_INLINE 1 -+#define HAVE_VFPV3_INLINE 0 -+#define HAVE_SETEND_INLINE 0 -+#define HAVE_ALTIVEC_INLINE 0 -+#define HAVE_DCBZL_INLINE 0 -+#define HAVE_LDBRX_INLINE 0 -+#define HAVE_POWER8_INLINE 0 -+#define HAVE_PPC4XX_INLINE 0 -+#define HAVE_VSX_INLINE 0 -+#define HAVE_AESNI_INLINE 0 -+#define HAVE_AMD3DNOW_INLINE 0 -+#define HAVE_AMD3DNOWEXT_INLINE 0 -+#define HAVE_AVX_INLINE 0 -+#define HAVE_AVX2_INLINE 0 -+#define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 -+#define HAVE_FMA3_INLINE 0 -+#define HAVE_FMA4_INLINE 0 -+#define HAVE_MMX_INLINE 0 -+#define HAVE_MMXEXT_INLINE 0 -+#define HAVE_SSE_INLINE 0 -+#define HAVE_SSE2_INLINE 0 -+#define HAVE_SSE3_INLINE 0 -+#define HAVE_SSE4_INLINE 0 -+#define HAVE_SSE42_INLINE 0 -+#define HAVE_SSSE3_INLINE 0 -+#define HAVE_XOP_INLINE 0 -+#define HAVE_CPUNOP_INLINE 0 -+#define HAVE_I686_INLINE 0 -+#define HAVE_MIPSFPU_INLINE 0 -+#define HAVE_MIPS32R2_INLINE 0 -+#define HAVE_MIPS32R5_INLINE 0 -+#define HAVE_MIPS64R2_INLINE 0 -+#define HAVE_MIPS32R6_INLINE 0 -+#define HAVE_MIPS64R6_INLINE 0 -+#define HAVE_MIPSDSP_INLINE 0 -+#define HAVE_MIPSDSPR2_INLINE 0 -+#define HAVE_MSA_INLINE 0 -+#define HAVE_LOONGSON2_INLINE 0 -+#define HAVE_LOONGSON3_INLINE 0 -+#define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 -+#define HAVE_ALIGNED_STACK 1 -+#define HAVE_FAST_64BIT 1 -+#define HAVE_FAST_CLZ 1 -+#define HAVE_FAST_CMOV 0 -+#define HAVE_LOCAL_ALIGNED 0 -+#define HAVE_SIMD_ALIGN_16 1 -+#define HAVE_SIMD_ALIGN_32 0 -+#define HAVE_SIMD_ALIGN_64 0 -+#define HAVE_ATOMIC_CAS_PTR 0 -+#define HAVE_MACHINE_RW_BARRIER 0 -+#define HAVE_MEMORYBARRIER 0 -+#define HAVE_MM_EMPTY 0 -+#define HAVE_RDTSC 0 -+#define HAVE_SEM_TIMEDWAIT 1 -+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 -+#define HAVE_INLINE_ASM 1 -+#define HAVE_SYMVER 1 -+#define HAVE_X86ASM 0 -+#define HAVE_BIGENDIAN 0 -+#define HAVE_FAST_UNALIGNED 1 -+#define HAVE_ARPA_INET_H 1 -+#define HAVE_ASM_TYPES_H 1 -+#define HAVE_CDIO_PARANOIA_H 0 -+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 -+#define HAVE_CUDA_H 0 -+#define HAVE_DISPATCH_DISPATCH_H 0 -+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 -+#define HAVE_DEV_IC_BT8XX_H 0 -+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 -+#define HAVE_DIRECT_H 0 -+#define HAVE_DIRENT_H 1 -+#define HAVE_DXGIDEBUG_H 0 -+#define HAVE_DXVA_H 0 -+#define HAVE_ES2_GL_H 0 -+#define HAVE_GSM_H 0 -+#define HAVE_IO_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 1 -+#define HAVE_MACHINE_IOCTL_BT848_H 0 -+#define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_MALLOC_H 1 -+#define HAVE_OPENCV2_CORE_CORE_C_H 0 -+#define HAVE_OPENGL_GL3_H 0 -+#define HAVE_POLL_H 1 -+#define HAVE_SYS_PARAM_H 1 -+#define HAVE_SYS_RESOURCE_H 1 -+#define HAVE_SYS_SELECT_H 1 -+#define HAVE_SYS_SOUNDCARD_H 0 -+#define HAVE_SYS_TIME_H 1 -+#define HAVE_SYS_UN_H 1 -+#define HAVE_SYS_VIDEOIO_H 0 -+#define HAVE_TERMIOS_H 1 -+#define HAVE_UDPLITE_H 0 -+#define HAVE_UNISTD_H 1 -+#define HAVE_VALGRIND_VALGRIND_H 0 -+#define HAVE_WINDOWS_H 0 -+#define HAVE_WINSOCK2_H 0 -+#define HAVE_INTRINSICS_NEON 1 -+#define HAVE_ATANF 1 -+#define HAVE_ATAN2F 1 -+#define HAVE_CBRT 1 -+#define HAVE_CBRTF 1 -+#define HAVE_COPYSIGN 1 -+#define HAVE_COSF 1 -+#define HAVE_ERF 1 -+#define HAVE_EXP2 1 -+#define HAVE_EXP2F 1 -+#define HAVE_EXPF 1 -+#define HAVE_HYPOT 1 -+#define HAVE_ISFINITE 1 -+#define HAVE_ISINF 1 -+#define HAVE_ISNAN 1 -+#define HAVE_LDEXPF 1 -+#define HAVE_LLRINT 1 -+#define HAVE_LLRINTF 1 -+#define HAVE_LOG2 1 -+#define HAVE_LOG2F 1 -+#define HAVE_LOG10F 1 -+#define HAVE_LRINT 1 -+#define HAVE_LRINTF 1 -+#define HAVE_POWF 1 -+#define HAVE_RINT 1 -+#define HAVE_ROUND 1 -+#define HAVE_ROUNDF 1 -+#define HAVE_SINF 1 -+#define HAVE_TRUNC 1 -+#define HAVE_TRUNCF 1 -+#define HAVE_DOS_PATHS 0 -+#define HAVE_LIBC_MSVCRT 0 -+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 -+#define HAVE_SECTION_DATA_REL_RO 1 -+#define HAVE_THREADS 1 -+#define HAVE_UWP 0 -+#define HAVE_WINRT 0 -+#define HAVE_ACCESS 1 -+#define HAVE_ALIGNED_MALLOC 0 -+#define HAVE_ARC4RANDOM 1 -+#define HAVE_CLOCK_GETTIME 1 -+#define HAVE_CLOSESOCKET 0 -+#define HAVE_COMMANDLINETOARGVW 0 -+#define HAVE_FCNTL 1 -+#define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 1 -+#define HAVE_GETENV 1 -+#define HAVE_GETHRTIME 0 -+#define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 -+#define HAVE_GETPROCESSAFFINITYMASK 0 -+#define HAVE_GETPROCESSMEMORYINFO 0 -+#define HAVE_GETPROCESSTIMES 0 -+#define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 -+#define HAVE_GETSYSTEMTIMEASFILETIME 0 -+#define HAVE_GETTIMEOFDAY 1 -+#define HAVE_GLOB 0 -+#define HAVE_GLXGETPROCADDRESS 0 -+#define HAVE_GMTIME_R 1 -+#define HAVE_INET_ATON 1 -+#define HAVE_ISATTY 1 -+#define HAVE_KBHIT 0 -+#define HAVE_LOCALTIME_R 1 -+#define HAVE_LSTAT 1 -+#define HAVE_LZO1X_999_COMPRESS 0 -+#define HAVE_MACH_ABSOLUTE_TIME 0 -+#define HAVE_MAPVIEWOFFILE 0 -+#define HAVE_MEMALIGN 1 -+#define HAVE_MKSTEMP 1 -+#define HAVE_MMAP 1 -+#define HAVE_MPROTECT 1 -+#define HAVE_NANOSLEEP 1 -+#define HAVE_PEEKNAMEDPIPE 0 -+#define HAVE_POSIX_MEMALIGN 1 -+#define HAVE_PTHREAD_CANCEL 0 -+#define HAVE_SCHED_GETAFFINITY 1 -+#define HAVE_SECITEMIMPORT 0 -+#define HAVE_SETCONSOLETEXTATTRIBUTE 0 -+#define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 -+#define HAVE_SETMODE 0 -+#define HAVE_SETRLIMIT 1 -+#define HAVE_SLEEP 0 -+#define HAVE_STRERROR_R 1 -+#define HAVE_SYSCONF 1 -+#define HAVE_SYSCTL 0 -+#define HAVE_USLEEP 1 -+#define HAVE_UTGETOSTYPEFROMSTRING 0 -+#define HAVE_VIRTUALALLOC 0 -+#define HAVE_WGLGETPROCADDRESS 0 -+#define HAVE_BCRYPT 0 -+#define HAVE_VAAPI_DRM 0 -+#define HAVE_VAAPI_X11 0 -+#define HAVE_VDPAU_X11 0 -+#define HAVE_PTHREADS 1 -+#define HAVE_OS2THREADS 0 -+#define HAVE_W32THREADS 0 -+#define HAVE_AS_ARCH_DIRECTIVE 0 -+#define HAVE_AS_DN_DIRECTIVE 0 -+#define HAVE_AS_FPU_DIRECTIVE 0 -+#define HAVE_AS_FUNC 0 -+#define HAVE_AS_OBJECT_ARCH 0 -+#define HAVE_ASM_MOD_Q 0 -+#define HAVE_BLOCKS_EXTENSION 0 -+#define HAVE_EBP_AVAILABLE 0 -+#define HAVE_EBX_AVAILABLE 0 -+#define HAVE_GNU_AS 0 -+#define HAVE_GNU_WINDRES 0 -+#define HAVE_IBM_ASM 0 -+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 -+#define HAVE_INLINE_ASM_LABELS 1 -+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 -+#define HAVE_PRAGMA_DEPRECATED 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 -+#define HAVE_SYMVER_ASM_LABEL 1 -+#define HAVE_SYMVER_GNU_ASM 1 -+#define HAVE_VFP_ARGS 0 -+#define HAVE_XFORM_ASM 0 -+#define HAVE_XMM_CLOBBERS 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 -+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 -+#define HAVE_SOCKLEN_T 1 -+#define HAVE_STRUCT_ADDRINFO 1 -+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -+#define HAVE_STRUCT_IP_MREQ_SOURCE 1 -+#define HAVE_STRUCT_IPV6_MREQ 1 -+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 -+#define HAVE_STRUCT_POLLFD 1 -+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 -+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 -+#define HAVE_STRUCT_SOCKADDR_IN6 1 -+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 -+#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 1 -+#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_OPENCL_D3D11 0 -+#define HAVE_OPENCL_DRM_ARM 0 -+#define HAVE_OPENCL_DRM_BEIGNET 0 -+#define HAVE_OPENCL_DXVA2 0 -+#define HAVE_OPENCL_VAAPI_BEIGNET 0 -+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 -+#define HAVE_PERL 1 -+#define HAVE_POD2MAN 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 -+#define CONFIG_DOC 0 -+#define CONFIG_HTMLPAGES 0 -+#define CONFIG_MANPAGES 1 -+#define CONFIG_PODPAGES 1 -+#define CONFIG_TXTPAGES 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 -+#define CONFIG_AVIO_READING_EXAMPLE 1 -+#define CONFIG_DECODE_AUDIO_EXAMPLE 1 -+#define CONFIG_DECODE_VIDEO_EXAMPLE 1 -+#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 -+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 -+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 -+#define CONFIG_EXTRACT_MVS_EXAMPLE 0 -+#define CONFIG_FILTER_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 -+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 -+#define CONFIG_HW_DECODE_EXAMPLE 0 -+#define CONFIG_METADATA_EXAMPLE 0 -+#define CONFIG_MUXING_EXAMPLE 0 -+#define CONFIG_QSVDEC_EXAMPLE 0 -+#define CONFIG_REMUXING_EXAMPLE 0 -+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 -+#define CONFIG_SCALING_VIDEO_EXAMPLE 0 -+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 -+#define CONFIG_TRANSCODING_EXAMPLE 0 -+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 -+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 -+#define CONFIG_AVISYNTH 0 -+#define CONFIG_FREI0R 0 -+#define CONFIG_LIBCDIO 0 -+#define CONFIG_LIBDAVS2 0 -+#define CONFIG_LIBRUBBERBAND 0 -+#define CONFIG_LIBVIDSTAB 0 -+#define CONFIG_LIBX264 0 -+#define CONFIG_LIBX265 0 -+#define CONFIG_LIBXAVS 0 -+#define CONFIG_LIBXAVS2 0 -+#define CONFIG_LIBXVID 0 -+#define CONFIG_DECKLINK 0 -+#define CONFIG_LIBFDK_AAC 0 -+#define CONFIG_LIBTLS 0 -+#define CONFIG_GMP 0 -+#define CONFIG_LIBARIBB24 0 -+#define CONFIG_LIBLENSFUN 0 -+#define CONFIG_LIBOPENCORE_AMRNB 0 -+#define CONFIG_LIBOPENCORE_AMRWB 0 -+#define CONFIG_LIBVO_AMRWBENC 0 -+#define CONFIG_MBEDTLS 0 -+#define CONFIG_RKMPP 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_CHROMAPRINT 0 -+#define CONFIG_GCRYPT 0 -+#define CONFIG_GNUTLS 0 -+#define CONFIG_JNI 0 -+#define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 -+#define CONFIG_LIBAOM 0 -+#define CONFIG_LIBASS 0 -+#define CONFIG_LIBBLURAY 0 -+#define CONFIG_LIBBS2B 0 -+#define CONFIG_LIBCACA 0 -+#define CONFIG_LIBCELT 0 -+#define CONFIG_LIBCODEC2 0 -+#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDC1394 0 -+#define CONFIG_LIBDRM 0 -+#define CONFIG_LIBFLITE 0 -+#define CONFIG_LIBFONTCONFIG 0 -+#define CONFIG_LIBFREETYPE 0 -+#define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 -+#define CONFIG_LIBGME 0 -+#define CONFIG_LIBGSM 0 -+#define CONFIG_LIBIEC61883 0 -+#define CONFIG_LIBILBC 0 -+#define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 -+#define CONFIG_LIBKLVANC 0 -+#define CONFIG_LIBKVAZAAR 0 -+#define CONFIG_LIBMODPLUG 0 -+#define CONFIG_LIBMP3LAME 0 -+#define CONFIG_LIBMYSOFA 0 -+#define CONFIG_LIBOPENCV 0 -+#define CONFIG_LIBOPENH264 0 -+#define CONFIG_LIBOPENJPEG 0 -+#define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 -+#define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 -+#define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 -+#define CONFIG_LIBRSVG 0 -+#define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 -+#define CONFIG_LIBSHINE 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_LIBSNAPPY 0 -+#define CONFIG_LIBSOXR 0 -+#define CONFIG_LIBSPEEX 0 -+#define CONFIG_LIBSRT 0 -+#define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 -+#define CONFIG_LIBTENSORFLOW 0 -+#define CONFIG_LIBTESSERACT 0 -+#define CONFIG_LIBTHEORA 0 -+#define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 -+#define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 -+#define CONFIG_LIBVORBIS 0 -+#define CONFIG_LIBVPX 0 -+#define CONFIG_LIBWEBP 0 -+#define CONFIG_LIBXML2 0 -+#define CONFIG_LIBZIMG 0 -+#define CONFIG_LIBZMQ 0 -+#define CONFIG_LIBZVBI 0 -+#define CONFIG_LV2 0 -+#define CONFIG_MEDIACODEC 0 -+#define CONFIG_OPENAL 0 -+#define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 -+#define CONFIG_POCKETSPHINX 0 -+#define CONFIG_VAPOURSYNTH 0 -+#define CONFIG_ALSA 0 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 -+#define CONFIG_ICONV 0 -+#define CONFIG_LIBXCB 0 -+#define CONFIG_LIBXCB_SHM 0 -+#define CONFIG_LIBXCB_SHAPE 0 -+#define CONFIG_LIBXCB_XFIXES 0 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 -+#define CONFIG_SDL2 0 -+#define CONFIG_SECURETRANSPORT 0 -+#define CONFIG_SNDIO 0 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 -+#define CONFIG_CUDA_NVCC 0 -+#define CONFIG_CUDA_SDK 0 -+#define CONFIG_LIBNPP 0 -+#define CONFIG_LIBMFX 0 -+#define CONFIG_MMAL 0 -+#define CONFIG_OMX 0 -+#define CONFIG_OPENCL 0 -+#define CONFIG_AMF 0 -+#define CONFIG_AUDIOTOOLBOX 0 -+#define CONFIG_CRYSTALHD 0 -+#define CONFIG_CUDA 0 -+#define CONFIG_CUDA_LLVM 0 -+#define CONFIG_CUVID 0 -+#define CONFIG_D3D11VA 0 -+#define CONFIG_DXVA2 0 -+#define CONFIG_FFNVCODEC 0 -+#define CONFIG_NVDEC 0 -+#define CONFIG_NVENC 0 -+#define CONFIG_VAAPI 0 -+#define CONFIG_VDPAU 0 -+#define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 -+#define CONFIG_V4L2_M2M 0 -+#define CONFIG_FTRAPV 0 -+#define CONFIG_GRAY 0 -+#define CONFIG_HARDCODED_TABLES 0 -+#define CONFIG_OMX_RPI 0 -+#define CONFIG_RUNTIME_CPUDETECT 1 -+#define CONFIG_SAFE_BITSTREAM_READER 1 -+#define CONFIG_SHARED 1 -+#define CONFIG_SMALL 1 -+#define CONFIG_STATIC 0 -+#define CONFIG_SWSCALE_ALPHA 1 -+#define CONFIG_GPL 0 -+#define CONFIG_NONFREE 0 -+#define CONFIG_VERSION3 0 -+#define CONFIG_AVDEVICE 0 -+#define CONFIG_AVFILTER 0 -+#define CONFIG_SWSCALE 0 -+#define CONFIG_POSTPROC 0 -+#define CONFIG_AVFORMAT 0 -+#define CONFIG_AVCODEC 1 -+#define CONFIG_SWRESAMPLE 0 -+#define CONFIG_AVUTIL 1 -+#define CONFIG_FFPLAY 0 -+#define CONFIG_FFPROBE 0 -+#define CONFIG_FFMPEG 0 -+#define CONFIG_DCT 1 -+#define CONFIG_DWT 0 -+#define CONFIG_ERROR_RESILIENCE 0 -+#define CONFIG_FAAN 1 -+#define CONFIG_FAST_UNALIGNED 1 -+#define CONFIG_FFT 1 -+#define CONFIG_LSP 0 -+#define CONFIG_MDCT 0 -+#define CONFIG_PIXELUTILS 0 -+#define CONFIG_NETWORK 0 -+#define CONFIG_RDFT 1 -+#define CONFIG_AUTODETECT 0 -+#define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 -+#define CONFIG_LINUX_PERF 1 -+#define CONFIG_MACOS_KPERF 0 -+#define CONFIG_MEMORY_POISONING 0 -+#define CONFIG_NEON_CLOBBER_TEST 0 -+#define CONFIG_OSSFUZZ 0 -+#define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 -+#define CONFIG_THUMB 0 -+#define CONFIG_VALGRIND_BACKTRACE 0 -+#define CONFIG_XMM_CLOBBER_TEST 0 -+#define CONFIG_BSFS 0 -+#define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 -+#define CONFIG_PARSERS 0 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 -+#define CONFIG_AANDCTTABLES 0 -+#define CONFIG_AC3DSP 0 -+#define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 -+#define CONFIG_AUDIO_FRAME_QUEUE 0 -+#define CONFIG_AUDIODSP 0 -+#define CONFIG_BLOCKDSP 0 -+#define CONFIG_BSWAPDSP 0 -+#define CONFIG_CABAC 0 -+#define CONFIG_CBS 0 -+#define CONFIG_CBS_AV1 0 -+#define CONFIG_CBS_H264 0 -+#define CONFIG_CBS_H265 0 -+#define CONFIG_CBS_JPEG 0 -+#define CONFIG_CBS_MPEG2 0 -+#define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 -+#define CONFIG_DIRAC_PARSE 0 -+#define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 -+#define CONFIG_DVPROFILE 0 -+#define CONFIG_EXIF 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 -+#define CONFIG_FLACDSP 1 -+#define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 -+#define CONFIG_G722DSP 0 -+#define CONFIG_GOLOMB 0 -+#define CONFIG_GPLV3 0 -+#define CONFIG_H263DSP 0 -+#define CONFIG_H264CHROMA 0 -+#define CONFIG_H264DSP 0 -+#define CONFIG_H264PARSE 0 -+#define CONFIG_H264PRED 0 -+#define CONFIG_H264QPEL 0 -+#define CONFIG_HEVCPARSE 0 -+#define CONFIG_HPELDSP 0 -+#define CONFIG_HUFFMAN 0 -+#define CONFIG_HUFFYUVDSP 0 -+#define CONFIG_HUFFYUVENCDSP 0 -+#define CONFIG_IDCTDSP 1 -+#define CONFIG_IIRFILTER 0 -+#define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 -+#define CONFIG_INTRAX8 0 -+#define CONFIG_ISO_MEDIA 0 -+#define CONFIG_IVIDSP 0 -+#define CONFIG_JPEGTABLES 0 -+#define CONFIG_LGPLV3 0 -+#define CONFIG_LIBX262 0 -+#define CONFIG_LLAUDDSP 0 -+#define CONFIG_LLVIDDSP 0 -+#define CONFIG_LLVIDENCDSP 0 -+#define CONFIG_LPC 0 -+#define CONFIG_LZF 0 -+#define CONFIG_ME_CMP 0 -+#define CONFIG_MPEG_ER 0 -+#define CONFIG_MPEGAUDIO 1 -+#define CONFIG_MPEGAUDIODSP 1 -+#define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 -+#define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 -+#define CONFIG_MPEGVIDEOENC 0 -+#define CONFIG_MSS34DSP 0 -+#define CONFIG_PIXBLOCKDSP 0 -+#define CONFIG_QPELDSP 0 -+#define CONFIG_QSV 0 -+#define CONFIG_QSVDEC 0 -+#define CONFIG_QSVENC 0 -+#define CONFIG_QSVVPP 0 -+#define CONFIG_RANGECODER 0 -+#define CONFIG_RIFFDEC 0 -+#define CONFIG_RIFFENC 0 -+#define CONFIG_RTPDEC 0 -+#define CONFIG_RTPENC_CHAIN 0 -+#define CONFIG_RV34DSP 0 -+#define CONFIG_SCENE_SAD 0 -+#define CONFIG_SINEWIN 0 -+#define CONFIG_SNAPPY 0 -+#define CONFIG_SRTP 0 -+#define CONFIG_STARTCODE 0 -+#define CONFIG_TEXTUREDSP 0 -+#define CONFIG_TEXTUREDSPENC 0 -+#define CONFIG_TPELDSP 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VAAPI_ENCODE 0 -+#define CONFIG_VC1DSP 0 -+#define CONFIG_VIDEODSP 0 -+#define CONFIG_VP3DSP 0 -+#define CONFIG_VP56DSP 0 -+#define CONFIG_VP8DSP 0 -+#define CONFIG_WMA_FREQS 0 -+#define CONFIG_WMV2DSP 0 -+#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_android_x86_64.h b/media/ffvpx/config_android_x86_64.h ---- a/media/ffvpx/config_android_x86_64.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_android_x86_64.h 2023-04-06 12:49:19.191546429 +0200 -@@ -0,0 +1,740 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_H -+#define FFMPEG_CONFIG_H -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-parser='vp8,vp9' --enable-decoder='mp3,flac,vp8,vp9' --disable-static --enable-shared --disable-autodetect --enable-small --target-os=linux --arch=x86_64 --enable-cross-compile --cc=/Users/padenot/.mozbuild/android-ndk-r21d/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android21-clang" -+#define FFMPEG_LICENSE "LGPL version 2.1 or later" -+#define CONFIG_THIS_YEAR 2022 -+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" -+#define AVCONV_DATADIR "/usr/local/share/ffmpeg" -+#define CC_IDENT "Android (6454773 based on r365631c2) clang version 9.0.8 (https://android.googlesource.com/toolchain/llvm-project 98c855489587874b2a325e7a516b99d838599c6f) (based on LLVM 9.0.8svn)" -+#define OS_NAME linux -+#define av_restrict restrict -+#define EXTERN_PREFIX "" -+#define EXTERN_ASM -+#define BUILDSUF "" -+#define SLIBSUF ".so" -+#define HAVE_MMX2 HAVE_MMXEXT -+#define SWS_MAX_FILTER_SIZE 256 -+#define ARCH_AARCH64 0 -+#define ARCH_ALPHA 0 -+#define ARCH_ARM 0 -+#define ARCH_AVR32 0 -+#define ARCH_AVR32_AP 0 -+#define ARCH_AVR32_UC 0 -+#define ARCH_BFIN 0 -+#define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 -+#define ARCH_M68K 0 -+#define ARCH_MIPS 0 -+#define ARCH_MIPS64 0 -+#define ARCH_PARISC 0 -+#define ARCH_PPC 0 -+#define ARCH_PPC64 0 -+#define ARCH_RISCV 0 -+#define ARCH_S390 0 -+#define ARCH_SH4 0 -+#define ARCH_SPARC 0 -+#define ARCH_SPARC64 0 -+#define ARCH_TILEGX 0 -+#define ARCH_TILEPRO 0 -+#define ARCH_TOMI 0 -+#define ARCH_X86 1 -+#define ARCH_X86_32 0 -+#define ARCH_X86_64 1 -+#define HAVE_ARMV5TE 0 -+#define HAVE_ARMV6 0 -+#define HAVE_ARMV6T2 0 -+#define HAVE_ARMV8 0 -+#define HAVE_NEON 0 -+#define HAVE_VFP 0 -+#define HAVE_VFPV3 0 -+#define HAVE_SETEND 0 -+#define HAVE_ALTIVEC 0 -+#define HAVE_DCBZL 0 -+#define HAVE_LDBRX 0 -+#define HAVE_POWER8 0 -+#define HAVE_PPC4XX 0 -+#define HAVE_VSX 0 -+#define HAVE_AESNI 1 -+#define HAVE_AMD3DNOW 1 -+#define HAVE_AMD3DNOWEXT 1 -+#define HAVE_AVX 1 -+#define HAVE_AVX2 1 -+#define HAVE_AVX512 1 -+#define HAVE_AVX512ICL 1 -+#define HAVE_FMA3 1 -+#define HAVE_FMA4 1 -+#define HAVE_MMX 1 -+#define HAVE_MMXEXT 1 -+#define HAVE_SSE 1 -+#define HAVE_SSE2 1 -+#define HAVE_SSE3 1 -+#define HAVE_SSE4 1 -+#define HAVE_SSE42 1 -+#define HAVE_SSSE3 1 -+#define HAVE_XOP 1 -+#define HAVE_CPUNOP 0 -+#define HAVE_I686 1 -+#define HAVE_MIPSFPU 0 -+#define HAVE_MIPS32R2 0 -+#define HAVE_MIPS32R5 0 -+#define HAVE_MIPS64R2 0 -+#define HAVE_MIPS32R6 0 -+#define HAVE_MIPS64R6 0 -+#define HAVE_MIPSDSP 0 -+#define HAVE_MIPSDSPR2 0 -+#define HAVE_MSA 0 -+#define HAVE_LOONGSON2 0 -+#define HAVE_LOONGSON3 0 -+#define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 -+#define HAVE_ARMV5TE_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 0 -+#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV8_EXTERNAL 0 -+#define HAVE_NEON_EXTERNAL 0 -+#define HAVE_VFP_EXTERNAL 0 -+#define HAVE_VFPV3_EXTERNAL 0 -+#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_ALTIVEC_EXTERNAL 0 -+#define HAVE_DCBZL_EXTERNAL 0 -+#define HAVE_LDBRX_EXTERNAL 0 -+#define HAVE_POWER8_EXTERNAL 0 -+#define HAVE_PPC4XX_EXTERNAL 0 -+#define HAVE_VSX_EXTERNAL 0 -+#define HAVE_AESNI_EXTERNAL 1 -+#define HAVE_AMD3DNOW_EXTERNAL 1 -+#define HAVE_AMD3DNOWEXT_EXTERNAL 1 -+#define HAVE_AVX_EXTERNAL 1 -+#define HAVE_AVX2_EXTERNAL 1 -+#define HAVE_AVX512_EXTERNAL 1 -+#define HAVE_AVX512ICL_EXTERNAL 1 -+#define HAVE_FMA3_EXTERNAL 1 -+#define HAVE_FMA4_EXTERNAL 1 -+#define HAVE_MMX_EXTERNAL 1 -+#define HAVE_MMXEXT_EXTERNAL 1 -+#define HAVE_SSE_EXTERNAL 1 -+#define HAVE_SSE2_EXTERNAL 1 -+#define HAVE_SSE3_EXTERNAL 1 -+#define HAVE_SSE4_EXTERNAL 1 -+#define HAVE_SSE42_EXTERNAL 1 -+#define HAVE_SSSE3_EXTERNAL 1 -+#define HAVE_XOP_EXTERNAL 1 -+#define HAVE_CPUNOP_EXTERNAL 0 -+#define HAVE_I686_EXTERNAL 0 -+#define HAVE_MIPSFPU_EXTERNAL 0 -+#define HAVE_MIPS32R2_EXTERNAL 0 -+#define HAVE_MIPS32R5_EXTERNAL 0 -+#define HAVE_MIPS64R2_EXTERNAL 0 -+#define HAVE_MIPS32R6_EXTERNAL 0 -+#define HAVE_MIPS64R6_EXTERNAL 0 -+#define HAVE_MIPSDSP_EXTERNAL 0 -+#define HAVE_MIPSDSPR2_EXTERNAL 0 -+#define HAVE_MSA_EXTERNAL 0 -+#define HAVE_LOONGSON2_EXTERNAL 0 -+#define HAVE_LOONGSON3_EXTERNAL 0 -+#define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 -+#define HAVE_ARMV5TE_INLINE 0 -+#define HAVE_ARMV6_INLINE 0 -+#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV8_INLINE 0 -+#define HAVE_NEON_INLINE 0 -+#define HAVE_VFP_INLINE 0 -+#define HAVE_VFPV3_INLINE 0 -+#define HAVE_SETEND_INLINE 0 -+#define HAVE_ALTIVEC_INLINE 0 -+#define HAVE_DCBZL_INLINE 0 -+#define HAVE_LDBRX_INLINE 0 -+#define HAVE_POWER8_INLINE 0 -+#define HAVE_PPC4XX_INLINE 0 -+#define HAVE_VSX_INLINE 0 -+#define HAVE_AESNI_INLINE 1 -+#define HAVE_AMD3DNOW_INLINE 1 -+#define HAVE_AMD3DNOWEXT_INLINE 1 -+#define HAVE_AVX_INLINE 1 -+#define HAVE_AVX2_INLINE 1 -+#define HAVE_AVX512_INLINE 1 -+#define HAVE_AVX512ICL_INLINE 1 -+#define HAVE_FMA3_INLINE 1 -+#define HAVE_FMA4_INLINE 1 -+#define HAVE_MMX_INLINE 1 -+#define HAVE_MMXEXT_INLINE 1 -+#define HAVE_SSE_INLINE 1 -+#define HAVE_SSE2_INLINE 1 -+#define HAVE_SSE3_INLINE 1 -+#define HAVE_SSE4_INLINE 1 -+#define HAVE_SSE42_INLINE 1 -+#define HAVE_SSSE3_INLINE 1 -+#define HAVE_XOP_INLINE 1 -+#define HAVE_CPUNOP_INLINE 0 -+#define HAVE_I686_INLINE 0 -+#define HAVE_MIPSFPU_INLINE 0 -+#define HAVE_MIPS32R2_INLINE 0 -+#define HAVE_MIPS32R5_INLINE 0 -+#define HAVE_MIPS64R2_INLINE 0 -+#define HAVE_MIPS32R6_INLINE 0 -+#define HAVE_MIPS64R6_INLINE 0 -+#define HAVE_MIPSDSP_INLINE 0 -+#define HAVE_MIPSDSPR2_INLINE 0 -+#define HAVE_MSA_INLINE 0 -+#define HAVE_LOONGSON2_INLINE 0 -+#define HAVE_LOONGSON3_INLINE 0 -+#define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 -+#define HAVE_ALIGNED_STACK 1 -+#define HAVE_FAST_64BIT 1 -+#define HAVE_FAST_CLZ 1 -+#define HAVE_FAST_CMOV 1 -+#define HAVE_LOCAL_ALIGNED 1 -+#define HAVE_SIMD_ALIGN_16 1 -+#define HAVE_SIMD_ALIGN_32 1 -+#define HAVE_SIMD_ALIGN_64 1 -+#define HAVE_ATOMIC_CAS_PTR 0 -+#define HAVE_MACHINE_RW_BARRIER 0 -+#define HAVE_MEMORYBARRIER 0 -+#define HAVE_MM_EMPTY 1 -+#define HAVE_RDTSC 0 -+#define HAVE_SEM_TIMEDWAIT 1 -+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 -+#define HAVE_INLINE_ASM 1 -+#define HAVE_SYMVER 1 -+#define HAVE_X86ASM 1 -+#define HAVE_BIGENDIAN 0 -+#define HAVE_FAST_UNALIGNED 1 -+#define HAVE_ARPA_INET_H 1 -+#define HAVE_ASM_TYPES_H 1 -+#define HAVE_CDIO_PARANOIA_H 0 -+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 -+#define HAVE_CUDA_H 0 -+#define HAVE_DISPATCH_DISPATCH_H 0 -+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 -+#define HAVE_DEV_IC_BT8XX_H 0 -+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 -+#define HAVE_DIRECT_H 0 -+#define HAVE_DIRENT_H 1 -+#define HAVE_DXGIDEBUG_H 0 -+#define HAVE_DXVA_H 0 -+#define HAVE_ES2_GL_H 0 -+#define HAVE_GSM_H 0 -+#define HAVE_IO_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 1 -+#define HAVE_MACHINE_IOCTL_BT848_H 0 -+#define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_MALLOC_H 1 -+#define HAVE_OPENCV2_CORE_CORE_C_H 0 -+#define HAVE_OPENGL_GL3_H 0 -+#define HAVE_POLL_H 1 -+#define HAVE_SYS_PARAM_H 1 -+#define HAVE_SYS_RESOURCE_H 1 -+#define HAVE_SYS_SELECT_H 1 -+#define HAVE_SYS_SOUNDCARD_H 0 -+#define HAVE_SYS_TIME_H 1 -+#define HAVE_SYS_UN_H 1 -+#define HAVE_SYS_VIDEOIO_H 0 -+#define HAVE_TERMIOS_H 1 -+#define HAVE_UDPLITE_H 0 -+#define HAVE_UNISTD_H 1 -+#define HAVE_VALGRIND_VALGRIND_H 0 -+#define HAVE_WINDOWS_H 0 -+#define HAVE_WINSOCK2_H 0 -+#define HAVE_INTRINSICS_NEON 0 -+#define HAVE_ATANF 1 -+#define HAVE_ATAN2F 1 -+#define HAVE_CBRT 1 -+#define HAVE_CBRTF 1 -+#define HAVE_COPYSIGN 1 -+#define HAVE_COSF 1 -+#define HAVE_ERF 1 -+#define HAVE_EXP2 1 -+#define HAVE_EXP2F 1 -+#define HAVE_EXPF 1 -+#define HAVE_HYPOT 1 -+#define HAVE_ISFINITE 1 -+#define HAVE_ISINF 1 -+#define HAVE_ISNAN 1 -+#define HAVE_LDEXPF 1 -+#define HAVE_LLRINT 1 -+#define HAVE_LLRINTF 1 -+#define HAVE_LOG2 1 -+#define HAVE_LOG2F 1 -+#define HAVE_LOG10F 1 -+#define HAVE_LRINT 1 -+#define HAVE_LRINTF 1 -+#define HAVE_POWF 1 -+#define HAVE_RINT 1 -+#define HAVE_ROUND 1 -+#define HAVE_ROUNDF 1 -+#define HAVE_SINF 1 -+#define HAVE_TRUNC 1 -+#define HAVE_TRUNCF 1 -+#define HAVE_DOS_PATHS 0 -+#define HAVE_LIBC_MSVCRT 0 -+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 -+#define HAVE_SECTION_DATA_REL_RO 1 -+#define HAVE_THREADS 1 -+#define HAVE_UWP 0 -+#define HAVE_WINRT 0 -+#define HAVE_ACCESS 1 -+#define HAVE_ALIGNED_MALLOC 0 -+#define HAVE_ARC4RANDOM 1 -+#define HAVE_CLOCK_GETTIME 1 -+#define HAVE_CLOSESOCKET 0 -+#define HAVE_COMMANDLINETOARGVW 0 -+#define HAVE_FCNTL 1 -+#define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 1 -+#define HAVE_GETENV 1 -+#define HAVE_GETHRTIME 0 -+#define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 -+#define HAVE_GETPROCESSAFFINITYMASK 0 -+#define HAVE_GETPROCESSMEMORYINFO 0 -+#define HAVE_GETPROCESSTIMES 0 -+#define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 -+#define HAVE_GETSYSTEMTIMEASFILETIME 0 -+#define HAVE_GETTIMEOFDAY 1 -+#define HAVE_GLOB 0 -+#define HAVE_GLXGETPROCADDRESS 0 -+#define HAVE_GMTIME_R 1 -+#define HAVE_INET_ATON 1 -+#define HAVE_ISATTY 1 -+#define HAVE_KBHIT 0 -+#define HAVE_LOCALTIME_R 1 -+#define HAVE_LSTAT 1 -+#define HAVE_LZO1X_999_COMPRESS 0 -+#define HAVE_MACH_ABSOLUTE_TIME 0 -+#define HAVE_MAPVIEWOFFILE 0 -+#define HAVE_MEMALIGN 1 -+#define HAVE_MKSTEMP 1 -+#define HAVE_MMAP 1 -+#define HAVE_MPROTECT 1 -+#define HAVE_NANOSLEEP 1 -+#define HAVE_PEEKNAMEDPIPE 0 -+#define HAVE_POSIX_MEMALIGN 1 -+#define HAVE_PTHREAD_CANCEL 0 -+#define HAVE_SCHED_GETAFFINITY 1 -+#define HAVE_SECITEMIMPORT 0 -+#define HAVE_SETCONSOLETEXTATTRIBUTE 0 -+#define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 -+#define HAVE_SETMODE 0 -+#define HAVE_SETRLIMIT 1 -+#define HAVE_SLEEP 0 -+#define HAVE_STRERROR_R 1 -+#define HAVE_SYSCONF 1 -+#define HAVE_SYSCTL 0 -+#define HAVE_USLEEP 1 -+#define HAVE_UTGETOSTYPEFROMSTRING 0 -+#define HAVE_VIRTUALALLOC 0 -+#define HAVE_WGLGETPROCADDRESS 0 -+#define HAVE_BCRYPT 0 -+#define HAVE_VAAPI_DRM 0 -+#define HAVE_VAAPI_X11 0 -+#define HAVE_VDPAU_X11 0 -+#define HAVE_PTHREADS 1 -+#define HAVE_OS2THREADS 0 -+#define HAVE_W32THREADS 0 -+#define HAVE_AS_ARCH_DIRECTIVE 0 -+#define HAVE_AS_DN_DIRECTIVE 0 -+#define HAVE_AS_FPU_DIRECTIVE 0 -+#define HAVE_AS_FUNC 0 -+#define HAVE_AS_OBJECT_ARCH 0 -+#define HAVE_ASM_MOD_Q 0 -+#define HAVE_BLOCKS_EXTENSION 0 -+#define HAVE_EBP_AVAILABLE 1 -+#define HAVE_EBX_AVAILABLE 1 -+#define HAVE_GNU_AS 0 -+#define HAVE_GNU_WINDRES 0 -+#define HAVE_IBM_ASM 0 -+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 1 -+#define HAVE_INLINE_ASM_LABELS 1 -+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 -+#define HAVE_PRAGMA_DEPRECATED 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 -+#define HAVE_SYMVER_ASM_LABEL 1 -+#define HAVE_SYMVER_GNU_ASM 1 -+#define HAVE_VFP_ARGS 0 -+#define HAVE_XFORM_ASM 0 -+#define HAVE_XMM_CLOBBERS 1 -+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 -+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 -+#define HAVE_SOCKLEN_T 1 -+#define HAVE_STRUCT_ADDRINFO 1 -+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -+#define HAVE_STRUCT_IP_MREQ_SOURCE 1 -+#define HAVE_STRUCT_IPV6_MREQ 1 -+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 -+#define HAVE_STRUCT_POLLFD 1 -+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 -+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 -+#define HAVE_STRUCT_SOCKADDR_IN6 1 -+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 -+#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 1 -+#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_OPENCL_D3D11 0 -+#define HAVE_OPENCL_DRM_ARM 0 -+#define HAVE_OPENCL_DRM_BEIGNET 0 -+#define HAVE_OPENCL_DXVA2 0 -+#define HAVE_OPENCL_VAAPI_BEIGNET 0 -+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 -+#define HAVE_PERL 1 -+#define HAVE_POD2MAN 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 -+#define CONFIG_DOC 0 -+#define CONFIG_HTMLPAGES 0 -+#define CONFIG_MANPAGES 1 -+#define CONFIG_PODPAGES 1 -+#define CONFIG_TXTPAGES 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 -+#define CONFIG_AVIO_READING_EXAMPLE 1 -+#define CONFIG_DECODE_AUDIO_EXAMPLE 1 -+#define CONFIG_DECODE_VIDEO_EXAMPLE 1 -+#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 -+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 -+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 -+#define CONFIG_EXTRACT_MVS_EXAMPLE 0 -+#define CONFIG_FILTER_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 -+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 -+#define CONFIG_HW_DECODE_EXAMPLE 0 -+#define CONFIG_METADATA_EXAMPLE 0 -+#define CONFIG_MUXING_EXAMPLE 0 -+#define CONFIG_QSVDEC_EXAMPLE 0 -+#define CONFIG_REMUXING_EXAMPLE 0 -+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 -+#define CONFIG_SCALING_VIDEO_EXAMPLE 0 -+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 -+#define CONFIG_TRANSCODING_EXAMPLE 0 -+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 -+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 -+#define CONFIG_AVISYNTH 0 -+#define CONFIG_FREI0R 0 -+#define CONFIG_LIBCDIO 0 -+#define CONFIG_LIBDAVS2 0 -+#define CONFIG_LIBRUBBERBAND 0 -+#define CONFIG_LIBVIDSTAB 0 -+#define CONFIG_LIBX264 0 -+#define CONFIG_LIBX265 0 -+#define CONFIG_LIBXAVS 0 -+#define CONFIG_LIBXAVS2 0 -+#define CONFIG_LIBXVID 0 -+#define CONFIG_DECKLINK 0 -+#define CONFIG_LIBFDK_AAC 0 -+#define CONFIG_LIBTLS 0 -+#define CONFIG_GMP 0 -+#define CONFIG_LIBARIBB24 0 -+#define CONFIG_LIBLENSFUN 0 -+#define CONFIG_LIBOPENCORE_AMRNB 0 -+#define CONFIG_LIBOPENCORE_AMRWB 0 -+#define CONFIG_LIBVO_AMRWBENC 0 -+#define CONFIG_MBEDTLS 0 -+#define CONFIG_RKMPP 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_CHROMAPRINT 0 -+#define CONFIG_GCRYPT 0 -+#define CONFIG_GNUTLS 0 -+#define CONFIG_JNI 0 -+#define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 -+#define CONFIG_LIBAOM 0 -+#define CONFIG_LIBASS 0 -+#define CONFIG_LIBBLURAY 0 -+#define CONFIG_LIBBS2B 0 -+#define CONFIG_LIBCACA 0 -+#define CONFIG_LIBCELT 0 -+#define CONFIG_LIBCODEC2 0 -+#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDC1394 0 -+#define CONFIG_LIBDRM 0 -+#define CONFIG_LIBFLITE 0 -+#define CONFIG_LIBFONTCONFIG 0 -+#define CONFIG_LIBFREETYPE 0 -+#define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 -+#define CONFIG_LIBGME 0 -+#define CONFIG_LIBGSM 0 -+#define CONFIG_LIBIEC61883 0 -+#define CONFIG_LIBILBC 0 -+#define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 -+#define CONFIG_LIBKLVANC 0 -+#define CONFIG_LIBKVAZAAR 0 -+#define CONFIG_LIBMODPLUG 0 -+#define CONFIG_LIBMP3LAME 0 -+#define CONFIG_LIBMYSOFA 0 -+#define CONFIG_LIBOPENCV 0 -+#define CONFIG_LIBOPENH264 0 -+#define CONFIG_LIBOPENJPEG 0 -+#define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 -+#define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 -+#define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 -+#define CONFIG_LIBRSVG 0 -+#define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 -+#define CONFIG_LIBSHINE 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_LIBSNAPPY 0 -+#define CONFIG_LIBSOXR 0 -+#define CONFIG_LIBSPEEX 0 -+#define CONFIG_LIBSRT 0 -+#define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 -+#define CONFIG_LIBTENSORFLOW 0 -+#define CONFIG_LIBTESSERACT 0 -+#define CONFIG_LIBTHEORA 0 -+#define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 -+#define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 -+#define CONFIG_LIBVORBIS 0 -+#define CONFIG_LIBVPX 0 -+#define CONFIG_LIBWEBP 0 -+#define CONFIG_LIBXML2 0 -+#define CONFIG_LIBZIMG 0 -+#define CONFIG_LIBZMQ 0 -+#define CONFIG_LIBZVBI 0 -+#define CONFIG_LV2 0 -+#define CONFIG_MEDIACODEC 0 -+#define CONFIG_OPENAL 0 -+#define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 -+#define CONFIG_POCKETSPHINX 0 -+#define CONFIG_VAPOURSYNTH 0 -+#define CONFIG_ALSA 0 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 -+#define CONFIG_ICONV 0 -+#define CONFIG_LIBXCB 0 -+#define CONFIG_LIBXCB_SHM 0 -+#define CONFIG_LIBXCB_SHAPE 0 -+#define CONFIG_LIBXCB_XFIXES 0 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 -+#define CONFIG_SDL2 0 -+#define CONFIG_SECURETRANSPORT 0 -+#define CONFIG_SNDIO 0 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 -+#define CONFIG_CUDA_NVCC 0 -+#define CONFIG_CUDA_SDK 0 -+#define CONFIG_LIBNPP 0 -+#define CONFIG_LIBMFX 0 -+#define CONFIG_MMAL 0 -+#define CONFIG_OMX 0 -+#define CONFIG_OPENCL 0 -+#define CONFIG_AMF 0 -+#define CONFIG_AUDIOTOOLBOX 0 -+#define CONFIG_CRYSTALHD 0 -+#define CONFIG_CUDA 0 -+#define CONFIG_CUDA_LLVM 0 -+#define CONFIG_CUVID 0 -+#define CONFIG_D3D11VA 0 -+#define CONFIG_DXVA2 0 -+#define CONFIG_FFNVCODEC 0 -+#define CONFIG_NVDEC 0 -+#define CONFIG_NVENC 0 -+#define CONFIG_VAAPI 0 -+#define CONFIG_VDPAU 0 -+#define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 -+#define CONFIG_V4L2_M2M 0 -+#define CONFIG_FTRAPV 0 -+#define CONFIG_GRAY 0 -+#define CONFIG_HARDCODED_TABLES 0 -+#define CONFIG_OMX_RPI 0 -+#define CONFIG_RUNTIME_CPUDETECT 1 -+#define CONFIG_SAFE_BITSTREAM_READER 1 -+#define CONFIG_SHARED 1 -+#define CONFIG_SMALL 1 -+#define CONFIG_STATIC 0 -+#define CONFIG_SWSCALE_ALPHA 1 -+#define CONFIG_GPL 0 -+#define CONFIG_NONFREE 0 -+#define CONFIG_VERSION3 0 -+#define CONFIG_AVDEVICE 0 -+#define CONFIG_AVFILTER 0 -+#define CONFIG_SWSCALE 0 -+#define CONFIG_POSTPROC 0 -+#define CONFIG_AVFORMAT 0 -+#define CONFIG_AVCODEC 1 -+#define CONFIG_SWRESAMPLE 0 -+#define CONFIG_AVUTIL 1 -+#define CONFIG_FFPLAY 0 -+#define CONFIG_FFPROBE 0 -+#define CONFIG_FFMPEG 0 -+#define CONFIG_DCT 1 -+#define CONFIG_DWT 0 -+#define CONFIG_ERROR_RESILIENCE 0 -+#define CONFIG_FAAN 1 -+#define CONFIG_FAST_UNALIGNED 1 -+#define CONFIG_FFT 1 -+#define CONFIG_LSP 0 -+#define CONFIG_MDCT 0 -+#define CONFIG_PIXELUTILS 0 -+#define CONFIG_NETWORK 0 -+#define CONFIG_RDFT 1 -+#define CONFIG_AUTODETECT 0 -+#define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 -+#define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 -+#define CONFIG_MEMORY_POISONING 0 -+#define CONFIG_NEON_CLOBBER_TEST 0 -+#define CONFIG_OSSFUZZ 0 -+#define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 -+#define CONFIG_THUMB 0 -+#define CONFIG_VALGRIND_BACKTRACE 0 -+#define CONFIG_XMM_CLOBBER_TEST 0 -+#define CONFIG_BSFS 0 -+#define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 -+#define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 -+#define CONFIG_AANDCTTABLES 0 -+#define CONFIG_AC3DSP 0 -+#define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 -+#define CONFIG_AUDIO_FRAME_QUEUE 0 -+#define CONFIG_AUDIODSP 0 -+#define CONFIG_BLOCKDSP 0 -+#define CONFIG_BSWAPDSP 0 -+#define CONFIG_CABAC 0 -+#define CONFIG_CBS 0 -+#define CONFIG_CBS_AV1 0 -+#define CONFIG_CBS_H264 0 -+#define CONFIG_CBS_H265 0 -+#define CONFIG_CBS_JPEG 0 -+#define CONFIG_CBS_MPEG2 0 -+#define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 -+#define CONFIG_DIRAC_PARSE 0 -+#define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 -+#define CONFIG_DVPROFILE 0 -+#define CONFIG_EXIF 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 -+#define CONFIG_FLACDSP 1 -+#define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 -+#define CONFIG_G722DSP 0 -+#define CONFIG_GOLOMB 0 -+#define CONFIG_GPLV3 0 -+#define CONFIG_H263DSP 0 -+#define CONFIG_H264CHROMA 0 -+#define CONFIG_H264DSP 0 -+#define CONFIG_H264PARSE 0 -+#define CONFIG_H264PRED 1 -+#define CONFIG_H264QPEL 0 -+#define CONFIG_HEVCPARSE 0 -+#define CONFIG_HPELDSP 0 -+#define CONFIG_HUFFMAN 0 -+#define CONFIG_HUFFYUVDSP 0 -+#define CONFIG_HUFFYUVENCDSP 0 -+#define CONFIG_IDCTDSP 1 -+#define CONFIG_IIRFILTER 0 -+#define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 -+#define CONFIG_INTRAX8 0 -+#define CONFIG_ISO_MEDIA 0 -+#define CONFIG_IVIDSP 0 -+#define CONFIG_JPEGTABLES 0 -+#define CONFIG_LGPLV3 0 -+#define CONFIG_LIBX262 0 -+#define CONFIG_LLAUDDSP 0 -+#define CONFIG_LLVIDDSP 0 -+#define CONFIG_LLVIDENCDSP 0 -+#define CONFIG_LPC 0 -+#define CONFIG_LZF 0 -+#define CONFIG_ME_CMP 0 -+#define CONFIG_MPEG_ER 0 -+#define CONFIG_MPEGAUDIO 1 -+#define CONFIG_MPEGAUDIODSP 1 -+#define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 -+#define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 -+#define CONFIG_MPEGVIDEOENC 0 -+#define CONFIG_MSS34DSP 0 -+#define CONFIG_PIXBLOCKDSP 0 -+#define CONFIG_QPELDSP 0 -+#define CONFIG_QSV 0 -+#define CONFIG_QSVDEC 0 -+#define CONFIG_QSVENC 0 -+#define CONFIG_QSVVPP 0 -+#define CONFIG_RANGECODER 0 -+#define CONFIG_RIFFDEC 0 -+#define CONFIG_RIFFENC 0 -+#define CONFIG_RTPDEC 0 -+#define CONFIG_RTPENC_CHAIN 0 -+#define CONFIG_RV34DSP 0 -+#define CONFIG_SCENE_SAD 0 -+#define CONFIG_SINEWIN 0 -+#define CONFIG_SNAPPY 0 -+#define CONFIG_SRTP 0 -+#define CONFIG_STARTCODE 0 -+#define CONFIG_TEXTUREDSP 0 -+#define CONFIG_TEXTUREDSPENC 0 -+#define CONFIG_TPELDSP 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VAAPI_ENCODE 0 -+#define CONFIG_VC1DSP 0 -+#define CONFIG_VIDEODSP 1 -+#define CONFIG_VP3DSP 0 -+#define CONFIG_VP56DSP 0 -+#define CONFIG_VP8DSP 1 -+#define CONFIG_WMA_FREQS 0 -+#define CONFIG_WMV2DSP 0 -+#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_common.h b/media/ffvpx/config_common.h ---- a/media/ffvpx/config_common.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_common.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,38 +0,0 @@ --#ifndef MOZ_FFVPX_CONFIG_COMMON_H --#define MOZ_FFVPX_CONFIG_COMMON_H --#include "defaults_disabled.h" -- --#ifdef YASM_MISSING_AVX2 --#undef HAVE_AVX2 --#undef HAVE_AVX2_INTERNAL --#undef HAVE_AVX2_EXTERNAL --#define HAVE_AVX2 0 --#define HAVE_AVX2_INTERNAL 0 --#define HAVE_AVX2_EXTERNAL 0 --#endif -- --#ifdef MOZ_LIBAV_FFT --#undef CONFIG_FFT --#undef CONFIG_RDFT --#define CONFIG_FFT 1 --#define CONFIG_RDFT 1 --#endif -- --#if defined(MOZ_WAYLAND) && !defined(MOZ_FFVPX_AUDIOONLY) --#undef CONFIG_VAAPI --#undef CONFIG_VAAPI_1 --#undef CONFIG_VP8_VAAPI_HWACCEL --#undef CONFIG_VP9_VAAPI_HWACCEL --#undef CONFIG_AV1_VAAPI_HWACCEL --#undef CONFIG_LIBDAV1D --#undef CONFIG_AV1_DECODER --#define CONFIG_VAAPI 1 --#define CONFIG_VAAPI_1 1 --#define CONFIG_VP8_VAAPI_HWACCEL 1 --#define CONFIG_VP9_VAAPI_HWACCEL 1 --#define CONFIG_AV1_VAAPI_HWACCEL 1 --#define CONFIG_LIBDAV1D 1 --#define CONFIG_AV1_DECODER 1 --#endif -- --#endif -diff -Naur a/media/ffvpx/config_components_audio_only.h b/media/ffvpx/config_components_audio_only.h ---- a/media/ffvpx/config_components_audio_only.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_components_audio_only.h 2023-04-06 12:50:11.785664945 +0200 -@@ -0,0 +1,2091 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_COMPONENTS_H -+#define FFMPEG_CONFIG_COMPONENTS_H -+#define CONFIG_AAC_ADTSTOASC_BSF 0 -+#define CONFIG_AV1_FRAME_MERGE_BSF 0 -+#define CONFIG_AV1_FRAME_SPLIT_BSF 0 -+#define CONFIG_AV1_METADATA_BSF 0 -+#define CONFIG_CHOMP_BSF 0 -+#define CONFIG_DUMP_EXTRADATA_BSF 0 -+#define CONFIG_DCA_CORE_BSF 0 -+#define CONFIG_DV_ERROR_MARKER_BSF 0 -+#define CONFIG_EAC3_CORE_BSF 0 -+#define CONFIG_EXTRACT_EXTRADATA_BSF 0 -+#define CONFIG_FILTER_UNITS_BSF 0 -+#define CONFIG_H264_METADATA_BSF 0 -+#define CONFIG_H264_MP4TOANNEXB_BSF 0 -+#define CONFIG_H264_REDUNDANT_PPS_BSF 0 -+#define CONFIG_HAPQA_EXTRACT_BSF 0 -+#define CONFIG_HEVC_METADATA_BSF 0 -+#define CONFIG_HEVC_MP4TOANNEXB_BSF 0 -+#define CONFIG_IMX_DUMP_HEADER_BSF 0 -+#define CONFIG_MJPEG2JPEG_BSF 0 -+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 -+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 -+#define CONFIG_MPEG2_METADATA_BSF 0 -+#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 -+#define CONFIG_MOV2TEXTSUB_BSF 0 -+#define CONFIG_NOISE_BSF 0 -+#define CONFIG_NULL_BSF 0 -+#define CONFIG_OPUS_METADATA_BSF 0 -+#define CONFIG_PCM_RECHUNK_BSF 0 -+#define CONFIG_PGS_FRAME_MERGE_BSF 0 -+#define CONFIG_PRORES_METADATA_BSF 0 -+#define CONFIG_REMOVE_EXTRADATA_BSF 0 -+#define CONFIG_SETTS_BSF 0 -+#define CONFIG_TEXT2MOVSUB_BSF 0 -+#define CONFIG_TRACE_HEADERS_BSF 0 -+#define CONFIG_TRUEHD_CORE_BSF 0 -+#define CONFIG_VP9_METADATA_BSF 0 -+#define CONFIG_VP9_RAW_REORDER_BSF 0 -+#define CONFIG_VP9_SUPERFRAME_BSF 0 -+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0 -+#define CONFIG_AASC_DECODER 0 -+#define CONFIG_AIC_DECODER 0 -+#define CONFIG_ALIAS_PIX_DECODER 0 -+#define CONFIG_AGM_DECODER 0 -+#define CONFIG_AMV_DECODER 0 -+#define CONFIG_ANM_DECODER 0 -+#define CONFIG_ANSI_DECODER 0 -+#define CONFIG_APNG_DECODER 0 -+#define CONFIG_ARBC_DECODER 0 -+#define CONFIG_ARGO_DECODER 0 -+#define CONFIG_ASV1_DECODER 0 -+#define CONFIG_ASV2_DECODER 0 -+#define CONFIG_AURA_DECODER 0 -+#define CONFIG_AURA2_DECODER 0 -+#define CONFIG_AVRP_DECODER 0 -+#define CONFIG_AVRN_DECODER 0 -+#define CONFIG_AVS_DECODER 0 -+#define CONFIG_AVUI_DECODER 0 -+#define CONFIG_AYUV_DECODER 0 -+#define CONFIG_BETHSOFTVID_DECODER 0 -+#define CONFIG_BFI_DECODER 0 -+#define CONFIG_BINK_DECODER 0 -+#define CONFIG_BITPACKED_DECODER 0 -+#define CONFIG_BMP_DECODER 0 -+#define CONFIG_BMV_VIDEO_DECODER 0 -+#define CONFIG_BRENDER_PIX_DECODER 0 -+#define CONFIG_C93_DECODER 0 -+#define CONFIG_CAVS_DECODER 0 -+#define CONFIG_CDGRAPHICS_DECODER 0 -+#define CONFIG_CDTOONS_DECODER 0 -+#define CONFIG_CDXL_DECODER 0 -+#define CONFIG_CFHD_DECODER 0 -+#define CONFIG_CINEPAK_DECODER 0 -+#define CONFIG_CLEARVIDEO_DECODER 0 -+#define CONFIG_CLJR_DECODER 0 -+#define CONFIG_CLLC_DECODER 0 -+#define CONFIG_COMFORTNOISE_DECODER 0 -+#define CONFIG_CPIA_DECODER 0 -+#define CONFIG_CRI_DECODER 0 -+#define CONFIG_CSCD_DECODER 0 -+#define CONFIG_CYUV_DECODER 0 -+#define CONFIG_DDS_DECODER 0 -+#define CONFIG_DFA_DECODER 0 -+#define CONFIG_DIRAC_DECODER 0 -+#define CONFIG_DNXHD_DECODER 0 -+#define CONFIG_DPX_DECODER 0 -+#define CONFIG_DSICINVIDEO_DECODER 0 -+#define CONFIG_DVAUDIO_DECODER 0 -+#define CONFIG_DVVIDEO_DECODER 0 -+#define CONFIG_DXA_DECODER 0 -+#define CONFIG_DXTORY_DECODER 0 -+#define CONFIG_DXV_DECODER 0 -+#define CONFIG_EACMV_DECODER 0 -+#define CONFIG_EAMAD_DECODER 0 -+#define CONFIG_EATGQ_DECODER 0 -+#define CONFIG_EATGV_DECODER 0 -+#define CONFIG_EATQI_DECODER 0 -+#define CONFIG_EIGHTBPS_DECODER 0 -+#define CONFIG_EIGHTSVX_EXP_DECODER 0 -+#define CONFIG_EIGHTSVX_FIB_DECODER 0 -+#define CONFIG_ESCAPE124_DECODER 0 -+#define CONFIG_ESCAPE130_DECODER 0 -+#define CONFIG_EXR_DECODER 0 -+#define CONFIG_FFV1_DECODER 0 -+#define CONFIG_FFVHUFF_DECODER 0 -+#define CONFIG_FIC_DECODER 0 -+#define CONFIG_FITS_DECODER 0 -+#define CONFIG_FLASHSV_DECODER 0 -+#define CONFIG_FLASHSV2_DECODER 0 -+#define CONFIG_FLIC_DECODER 0 -+#define CONFIG_FLV_DECODER 0 -+#define CONFIG_FMVC_DECODER 0 -+#define CONFIG_FOURXM_DECODER 0 -+#define CONFIG_FRAPS_DECODER 0 -+#define CONFIG_FRWU_DECODER 0 -+#define CONFIG_G2M_DECODER 0 -+#define CONFIG_GDV_DECODER 0 -+#define CONFIG_GEM_DECODER 0 -+#define CONFIG_GIF_DECODER 0 -+#define CONFIG_H261_DECODER 0 -+#define CONFIG_H263_DECODER 0 -+#define CONFIG_H263I_DECODER 0 -+#define CONFIG_H263P_DECODER 0 -+#define CONFIG_H263_V4L2M2M_DECODER 0 -+#define CONFIG_H264_DECODER 0 -+#define CONFIG_H264_CRYSTALHD_DECODER 0 -+#define CONFIG_H264_V4L2M2M_DECODER 0 -+#define CONFIG_H264_MEDIACODEC_DECODER 0 -+#define CONFIG_H264_MMAL_DECODER 0 -+#define CONFIG_H264_QSV_DECODER 0 -+#define CONFIG_H264_RKMPP_DECODER 0 -+#define CONFIG_HAP_DECODER 0 -+#define CONFIG_HEVC_DECODER 0 -+#define CONFIG_HEVC_QSV_DECODER 0 -+#define CONFIG_HEVC_RKMPP_DECODER 0 -+#define CONFIG_HEVC_V4L2M2M_DECODER 0 -+#define CONFIG_HNM4_VIDEO_DECODER 0 -+#define CONFIG_HQ_HQA_DECODER 0 -+#define CONFIG_HQX_DECODER 0 -+#define CONFIG_HUFFYUV_DECODER 0 -+#define CONFIG_HYMT_DECODER 0 -+#define CONFIG_IDCIN_DECODER 0 -+#define CONFIG_IFF_ILBM_DECODER 0 -+#define CONFIG_IMM4_DECODER 0 -+#define CONFIG_IMM5_DECODER 0 -+#define CONFIG_INDEO2_DECODER 0 -+#define CONFIG_INDEO3_DECODER 0 -+#define CONFIG_INDEO4_DECODER 0 -+#define CONFIG_INDEO5_DECODER 0 -+#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -+#define CONFIG_IPU_DECODER 0 -+#define CONFIG_JPEG2000_DECODER 0 -+#define CONFIG_JPEGLS_DECODER 0 -+#define CONFIG_JV_DECODER 0 -+#define CONFIG_KGV1_DECODER 0 -+#define CONFIG_KMVC_DECODER 0 -+#define CONFIG_LAGARITH_DECODER 0 -+#define CONFIG_LOCO_DECODER 0 -+#define CONFIG_LSCR_DECODER 0 -+#define CONFIG_M101_DECODER 0 -+#define CONFIG_MAGICYUV_DECODER 0 -+#define CONFIG_MDEC_DECODER 0 -+#define CONFIG_MIMIC_DECODER 0 -+#define CONFIG_MJPEG_DECODER 0 -+#define CONFIG_MJPEGB_DECODER 0 -+#define CONFIG_MMVIDEO_DECODER 0 -+#define CONFIG_MOBICLIP_DECODER 0 -+#define CONFIG_MOTIONPIXELS_DECODER 0 -+#define CONFIG_MPEG1VIDEO_DECODER 0 -+#define CONFIG_MPEG2VIDEO_DECODER 0 -+#define CONFIG_MPEG4_DECODER 0 -+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -+#define CONFIG_MPEG4_V4L2M2M_DECODER 0 -+#define CONFIG_MPEG4_MMAL_DECODER 0 -+#define CONFIG_MPEGVIDEO_DECODER 0 -+#define CONFIG_MPEG1_V4L2M2M_DECODER 0 -+#define CONFIG_MPEG2_MMAL_DECODER 0 -+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -+#define CONFIG_MPEG2_V4L2M2M_DECODER 0 -+#define CONFIG_MPEG2_QSV_DECODER 0 -+#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 -+#define CONFIG_MSA1_DECODER 0 -+#define CONFIG_MSCC_DECODER 0 -+#define CONFIG_MSMPEG4V1_DECODER 0 -+#define CONFIG_MSMPEG4V2_DECODER 0 -+#define CONFIG_MSMPEG4V3_DECODER 0 -+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -+#define CONFIG_MSP2_DECODER 0 -+#define CONFIG_MSRLE_DECODER 0 -+#define CONFIG_MSS1_DECODER 0 -+#define CONFIG_MSS2_DECODER 0 -+#define CONFIG_MSVIDEO1_DECODER 0 -+#define CONFIG_MSZH_DECODER 0 -+#define CONFIG_MTS2_DECODER 0 -+#define CONFIG_MV30_DECODER 0 -+#define CONFIG_MVC1_DECODER 0 -+#define CONFIG_MVC2_DECODER 0 -+#define CONFIG_MVDV_DECODER 0 -+#define CONFIG_MVHA_DECODER 0 -+#define CONFIG_MWSC_DECODER 0 -+#define CONFIG_MXPEG_DECODER 0 -+#define CONFIG_NOTCHLC_DECODER 0 -+#define CONFIG_NUV_DECODER 0 -+#define CONFIG_PAF_VIDEO_DECODER 0 -+#define CONFIG_PAM_DECODER 0 -+#define CONFIG_PBM_DECODER 0 -+#define CONFIG_PCX_DECODER 0 -+#define CONFIG_PFM_DECODER 0 -+#define CONFIG_PGM_DECODER 0 -+#define CONFIG_PGMYUV_DECODER 0 -+#define CONFIG_PGX_DECODER 0 -+#define CONFIG_PHOTOCD_DECODER 0 -+#define CONFIG_PICTOR_DECODER 0 -+#define CONFIG_PIXLET_DECODER 0 -+#define CONFIG_PNG_DECODER 0 -+#define CONFIG_PPM_DECODER 0 -+#define CONFIG_PRORES_DECODER 0 -+#define CONFIG_PROSUMER_DECODER 0 -+#define CONFIG_PSD_DECODER 0 -+#define CONFIG_PTX_DECODER 0 -+#define CONFIG_QDRAW_DECODER 0 -+#define CONFIG_QOI_DECODER 0 -+#define CONFIG_QPEG_DECODER 0 -+#define CONFIG_QTRLE_DECODER 0 -+#define CONFIG_R10K_DECODER 0 -+#define CONFIG_R210_DECODER 0 -+#define CONFIG_RASC_DECODER 0 -+#define CONFIG_RAWVIDEO_DECODER 0 -+#define CONFIG_RL2_DECODER 0 -+#define CONFIG_ROQ_DECODER 0 -+#define CONFIG_RPZA_DECODER 0 -+#define CONFIG_RSCC_DECODER 0 -+#define CONFIG_RV10_DECODER 0 -+#define CONFIG_RV20_DECODER 0 -+#define CONFIG_RV30_DECODER 0 -+#define CONFIG_RV40_DECODER 0 -+#define CONFIG_S302M_DECODER 0 -+#define CONFIG_SANM_DECODER 0 -+#define CONFIG_SCPR_DECODER 0 -+#define CONFIG_SCREENPRESSO_DECODER 0 -+#define CONFIG_SGA_DECODER 0 -+#define CONFIG_SGI_DECODER 0 -+#define CONFIG_SGIRLE_DECODER 0 -+#define CONFIG_SHEERVIDEO_DECODER 0 -+#define CONFIG_SIMBIOSIS_IMX_DECODER 0 -+#define CONFIG_SMACKER_DECODER 0 -+#define CONFIG_SMC_DECODER 0 -+#define CONFIG_SMVJPEG_DECODER 0 -+#define CONFIG_SNOW_DECODER 0 -+#define CONFIG_SP5X_DECODER 0 -+#define CONFIG_SPEEDHQ_DECODER 0 -+#define CONFIG_SPEEX_DECODER 0 -+#define CONFIG_SRGC_DECODER 0 -+#define CONFIG_SUNRAST_DECODER 0 -+#define CONFIG_SVQ1_DECODER 0 -+#define CONFIG_SVQ3_DECODER 0 -+#define CONFIG_TARGA_DECODER 0 -+#define CONFIG_TARGA_Y216_DECODER 0 -+#define CONFIG_TDSC_DECODER 0 -+#define CONFIG_THEORA_DECODER 0 -+#define CONFIG_THP_DECODER 0 -+#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -+#define CONFIG_TIFF_DECODER 0 -+#define CONFIG_TMV_DECODER 0 -+#define CONFIG_TRUEMOTION1_DECODER 0 -+#define CONFIG_TRUEMOTION2_DECODER 0 -+#define CONFIG_TRUEMOTION2RT_DECODER 0 -+#define CONFIG_TSCC_DECODER 0 -+#define CONFIG_TSCC2_DECODER 0 -+#define CONFIG_TXD_DECODER 0 -+#define CONFIG_ULTI_DECODER 0 -+#define CONFIG_UTVIDEO_DECODER 0 -+#define CONFIG_V210_DECODER 0 -+#define CONFIG_V210X_DECODER 0 -+#define CONFIG_V308_DECODER 0 -+#define CONFIG_V408_DECODER 0 -+#define CONFIG_V410_DECODER 0 -+#define CONFIG_VB_DECODER 0 -+#define CONFIG_VBN_DECODER 0 -+#define CONFIG_VBLE_DECODER 0 -+#define CONFIG_VC1_DECODER 0 -+#define CONFIG_VC1_CRYSTALHD_DECODER 0 -+#define CONFIG_VC1IMAGE_DECODER 0 -+#define CONFIG_VC1_MMAL_DECODER 0 -+#define CONFIG_VC1_QSV_DECODER 0 -+#define CONFIG_VC1_V4L2M2M_DECODER 0 -+#define CONFIG_VCR1_DECODER 0 -+#define CONFIG_VMDVIDEO_DECODER 0 -+#define CONFIG_VMNC_DECODER 0 -+#define CONFIG_VP3_DECODER 0 -+#define CONFIG_VP4_DECODER 0 -+#define CONFIG_VP5_DECODER 0 -+#define CONFIG_VP6_DECODER 0 -+#define CONFIG_VP6A_DECODER 0 -+#define CONFIG_VP6F_DECODER 0 -+#define CONFIG_VP7_DECODER 0 -+#define CONFIG_VP8_DECODER 0 -+#define CONFIG_VP8_RKMPP_DECODER 0 -+#define CONFIG_VP8_V4L2M2M_DECODER 0 -+#define CONFIG_VP9_DECODER 0 -+#define CONFIG_VP9_RKMPP_DECODER 0 -+#define CONFIG_VP9_V4L2M2M_DECODER 0 -+#define CONFIG_VQA_DECODER 0 -+#define CONFIG_WEBP_DECODER 0 -+#define CONFIG_WCMV_DECODER 0 -+#define CONFIG_WRAPPED_AVFRAME_DECODER 0 -+#define CONFIG_WMV1_DECODER 0 -+#define CONFIG_WMV2_DECODER 0 -+#define CONFIG_WMV3_DECODER 0 -+#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -+#define CONFIG_WMV3IMAGE_DECODER 0 -+#define CONFIG_WNV1_DECODER 0 -+#define CONFIG_XAN_WC3_DECODER 0 -+#define CONFIG_XAN_WC4_DECODER 0 -+#define CONFIG_XBM_DECODER 0 -+#define CONFIG_XFACE_DECODER 0 -+#define CONFIG_XL_DECODER 0 -+#define CONFIG_XPM_DECODER 0 -+#define CONFIG_XWD_DECODER 0 -+#define CONFIG_Y41P_DECODER 0 -+#define CONFIG_YLC_DECODER 0 -+#define CONFIG_YOP_DECODER 0 -+#define CONFIG_YUV4_DECODER 0 -+#define CONFIG_ZERO12V_DECODER 0 -+#define CONFIG_ZEROCODEC_DECODER 0 -+#define CONFIG_ZLIB_DECODER 0 -+#define CONFIG_ZMBV_DECODER 0 -+#define CONFIG_AAC_DECODER 0 -+#define CONFIG_AAC_FIXED_DECODER 0 -+#define CONFIG_AAC_LATM_DECODER 0 -+#define CONFIG_AC3_DECODER 0 -+#define CONFIG_AC3_FIXED_DECODER 0 -+#define CONFIG_ACELP_KELVIN_DECODER 0 -+#define CONFIG_ALAC_DECODER 0 -+#define CONFIG_ALS_DECODER 0 -+#define CONFIG_AMRNB_DECODER 0 -+#define CONFIG_AMRWB_DECODER 0 -+#define CONFIG_APE_DECODER 0 -+#define CONFIG_APTX_DECODER 0 -+#define CONFIG_APTX_HD_DECODER 0 -+#define CONFIG_ATRAC1_DECODER 0 -+#define CONFIG_ATRAC3_DECODER 0 -+#define CONFIG_ATRAC3AL_DECODER 0 -+#define CONFIG_ATRAC3P_DECODER 0 -+#define CONFIG_ATRAC3PAL_DECODER 0 -+#define CONFIG_ATRAC9_DECODER 0 -+#define CONFIG_BINKAUDIO_DCT_DECODER 0 -+#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -+#define CONFIG_BMV_AUDIO_DECODER 0 -+#define CONFIG_COOK_DECODER 0 -+#define CONFIG_DCA_DECODER 0 -+#define CONFIG_DFPWM_DECODER 0 -+#define CONFIG_DOLBY_E_DECODER 0 -+#define CONFIG_DSD_LSBF_DECODER 0 -+#define CONFIG_DSD_MSBF_DECODER 0 -+#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -+#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -+#define CONFIG_DSICINAUDIO_DECODER 0 -+#define CONFIG_DSS_SP_DECODER 0 -+#define CONFIG_DST_DECODER 0 -+#define CONFIG_EAC3_DECODER 0 -+#define CONFIG_EVRC_DECODER 0 -+#define CONFIG_FASTAUDIO_DECODER 0 -+#define CONFIG_FFWAVESYNTH_DECODER 0 -+#define CONFIG_FLAC_DECODER 1 -+#define CONFIG_G723_1_DECODER 0 -+#define CONFIG_G729_DECODER 0 -+#define CONFIG_GSM_DECODER 0 -+#define CONFIG_GSM_MS_DECODER 0 -+#define CONFIG_HCA_DECODER 0 -+#define CONFIG_HCOM_DECODER 0 -+#define CONFIG_IAC_DECODER 0 -+#define CONFIG_ILBC_DECODER 0 -+#define CONFIG_IMC_DECODER 0 -+#define CONFIG_INTERPLAY_ACM_DECODER 0 -+#define CONFIG_MACE3_DECODER 0 -+#define CONFIG_MACE6_DECODER 0 -+#define CONFIG_METASOUND_DECODER 0 -+#define CONFIG_MLP_DECODER 0 -+#define CONFIG_MP1_DECODER 0 -+#define CONFIG_MP1FLOAT_DECODER 0 -+#define CONFIG_MP2_DECODER 0 -+#define CONFIG_MP2FLOAT_DECODER 0 -+#define CONFIG_MP3FLOAT_DECODER 0 -+#define CONFIG_MP3_DECODER 1 -+#define CONFIG_MP3ADUFLOAT_DECODER 0 -+#define CONFIG_MP3ADU_DECODER 0 -+#define CONFIG_MP3ON4FLOAT_DECODER 0 -+#define CONFIG_MP3ON4_DECODER 0 -+#define CONFIG_MPC7_DECODER 0 -+#define CONFIG_MPC8_DECODER 0 -+#define CONFIG_MSNSIREN_DECODER 0 -+#define CONFIG_NELLYMOSER_DECODER 0 -+#define CONFIG_ON2AVC_DECODER 0 -+#define CONFIG_OPUS_DECODER 0 -+#define CONFIG_PAF_AUDIO_DECODER 0 -+#define CONFIG_QCELP_DECODER 0 -+#define CONFIG_QDM2_DECODER 0 -+#define CONFIG_QDMC_DECODER 0 -+#define CONFIG_RA_144_DECODER 0 -+#define CONFIG_RA_288_DECODER 0 -+#define CONFIG_RALF_DECODER 0 -+#define CONFIG_SBC_DECODER 0 -+#define CONFIG_SHORTEN_DECODER 0 -+#define CONFIG_SIPR_DECODER 0 -+#define CONFIG_SIREN_DECODER 0 -+#define CONFIG_SMACKAUD_DECODER 0 -+#define CONFIG_SONIC_DECODER 0 -+#define CONFIG_TAK_DECODER 0 -+#define CONFIG_TRUEHD_DECODER 0 -+#define CONFIG_TRUESPEECH_DECODER 0 -+#define CONFIG_TTA_DECODER 0 -+#define CONFIG_TWINVQ_DECODER 0 -+#define CONFIG_VMDAUDIO_DECODER 0 -+#define CONFIG_VORBIS_DECODER 0 -+#define CONFIG_WAVPACK_DECODER 0 -+#define CONFIG_WMALOSSLESS_DECODER 0 -+#define CONFIG_WMAPRO_DECODER 0 -+#define CONFIG_WMAV1_DECODER 0 -+#define CONFIG_WMAV2_DECODER 0 -+#define CONFIG_WMAVOICE_DECODER 0 -+#define CONFIG_WS_SND1_DECODER 0 -+#define CONFIG_XMA1_DECODER 0 -+#define CONFIG_XMA2_DECODER 0 -+#define CONFIG_PCM_ALAW_DECODER 0 -+#define CONFIG_PCM_BLURAY_DECODER 0 -+#define CONFIG_PCM_DVD_DECODER 0 -+#define CONFIG_PCM_F16LE_DECODER 0 -+#define CONFIG_PCM_F24LE_DECODER 0 -+#define CONFIG_PCM_F32BE_DECODER 0 -+#define CONFIG_PCM_F32LE_DECODER 0 -+#define CONFIG_PCM_F64BE_DECODER 0 -+#define CONFIG_PCM_F64LE_DECODER 0 -+#define CONFIG_PCM_LXF_DECODER 0 -+#define CONFIG_PCM_MULAW_DECODER 0 -+#define CONFIG_PCM_S8_DECODER 0 -+#define CONFIG_PCM_S8_PLANAR_DECODER 0 -+#define CONFIG_PCM_S16BE_DECODER 0 -+#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S16LE_DECODER 0 -+#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S24BE_DECODER 0 -+#define CONFIG_PCM_S24DAUD_DECODER 0 -+#define CONFIG_PCM_S24LE_DECODER 0 -+#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S32BE_DECODER 0 -+#define CONFIG_PCM_S32LE_DECODER 0 -+#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S64BE_DECODER 0 -+#define CONFIG_PCM_S64LE_DECODER 0 -+#define CONFIG_PCM_SGA_DECODER 0 -+#define CONFIG_PCM_U8_DECODER 0 -+#define CONFIG_PCM_U16BE_DECODER 0 -+#define CONFIG_PCM_U16LE_DECODER 0 -+#define CONFIG_PCM_U24BE_DECODER 0 -+#define CONFIG_PCM_U24LE_DECODER 0 -+#define CONFIG_PCM_U32BE_DECODER 0 -+#define CONFIG_PCM_U32LE_DECODER 0 -+#define CONFIG_PCM_VIDC_DECODER 0 -+#define CONFIG_DERF_DPCM_DECODER 0 -+#define CONFIG_GREMLIN_DPCM_DECODER 0 -+#define CONFIG_INTERPLAY_DPCM_DECODER 0 -+#define CONFIG_ROQ_DPCM_DECODER 0 -+#define CONFIG_SDX2_DPCM_DECODER 0 -+#define CONFIG_SOL_DPCM_DECODER 0 -+#define CONFIG_XAN_DPCM_DECODER 0 -+#define CONFIG_ADPCM_4XM_DECODER 0 -+#define CONFIG_ADPCM_ADX_DECODER 0 -+#define CONFIG_ADPCM_AFC_DECODER 0 -+#define CONFIG_ADPCM_AGM_DECODER 0 -+#define CONFIG_ADPCM_AICA_DECODER 0 -+#define CONFIG_ADPCM_ARGO_DECODER 0 -+#define CONFIG_ADPCM_CT_DECODER 0 -+#define CONFIG_ADPCM_DTK_DECODER 0 -+#define CONFIG_ADPCM_EA_DECODER 0 -+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -+#define CONFIG_ADPCM_EA_R1_DECODER 0 -+#define CONFIG_ADPCM_EA_R2_DECODER 0 -+#define CONFIG_ADPCM_EA_R3_DECODER 0 -+#define CONFIG_ADPCM_EA_XAS_DECODER 0 -+#define CONFIG_ADPCM_G722_DECODER 0 -+#define CONFIG_ADPCM_G726_DECODER 0 -+#define CONFIG_ADPCM_G726LE_DECODER 0 -+#define CONFIG_ADPCM_IMA_ACORN_DECODER 0 -+#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -+#define CONFIG_ADPCM_IMA_ALP_DECODER 0 -+#define CONFIG_ADPCM_IMA_APC_DECODER 0 -+#define CONFIG_ADPCM_IMA_APM_DECODER 0 -+#define CONFIG_ADPCM_IMA_CUNNING_DECODER 0 -+#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -+#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -+#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -+#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -+#define CONFIG_ADPCM_IMA_MOFLEX_DECODER 0 -+#define CONFIG_ADPCM_IMA_MTF_DECODER 0 -+#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -+#define CONFIG_ADPCM_IMA_QT_DECODER 0 -+#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -+#define CONFIG_ADPCM_IMA_SSI_DECODER 0 -+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -+#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -+#define CONFIG_ADPCM_IMA_WS_DECODER 0 -+#define CONFIG_ADPCM_MS_DECODER 0 -+#define CONFIG_ADPCM_MTAF_DECODER 0 -+#define CONFIG_ADPCM_PSX_DECODER 0 -+#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -+#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -+#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -+#define CONFIG_ADPCM_SWF_DECODER 0 -+#define CONFIG_ADPCM_THP_DECODER 0 -+#define CONFIG_ADPCM_THP_LE_DECODER 0 -+#define CONFIG_ADPCM_VIMA_DECODER 0 -+#define CONFIG_ADPCM_XA_DECODER 0 -+#define CONFIG_ADPCM_YAMAHA_DECODER 0 -+#define CONFIG_ADPCM_ZORK_DECODER 0 -+#define CONFIG_SSA_DECODER 0 -+#define CONFIG_ASS_DECODER 0 -+#define CONFIG_CCAPTION_DECODER 0 -+#define CONFIG_DVBSUB_DECODER 0 -+#define CONFIG_DVDSUB_DECODER 0 -+#define CONFIG_JACOSUB_DECODER 0 -+#define CONFIG_MICRODVD_DECODER 0 -+#define CONFIG_MOVTEXT_DECODER 0 -+#define CONFIG_MPL2_DECODER 0 -+#define CONFIG_PGSSUB_DECODER 0 -+#define CONFIG_PJS_DECODER 0 -+#define CONFIG_REALTEXT_DECODER 0 -+#define CONFIG_SAMI_DECODER 0 -+#define CONFIG_SRT_DECODER 0 -+#define CONFIG_STL_DECODER 0 -+#define CONFIG_SUBRIP_DECODER 0 -+#define CONFIG_SUBVIEWER_DECODER 0 -+#define CONFIG_SUBVIEWER1_DECODER 0 -+#define CONFIG_TEXT_DECODER 0 -+#define CONFIG_VPLAYER_DECODER 0 -+#define CONFIG_WEBVTT_DECODER 0 -+#define CONFIG_XSUB_DECODER 0 -+#define CONFIG_AAC_AT_DECODER 0 -+#define CONFIG_AC3_AT_DECODER 0 -+#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -+#define CONFIG_ALAC_AT_DECODER 0 -+#define CONFIG_AMR_NB_AT_DECODER 0 -+#define CONFIG_EAC3_AT_DECODER 0 -+#define CONFIG_GSM_MS_AT_DECODER 0 -+#define CONFIG_ILBC_AT_DECODER 0 -+#define CONFIG_MP1_AT_DECODER 0 -+#define CONFIG_MP2_AT_DECODER 0 -+#define CONFIG_MP3_AT_DECODER 0 -+#define CONFIG_PCM_ALAW_AT_DECODER 0 -+#define CONFIG_PCM_MULAW_AT_DECODER 0 -+#define CONFIG_QDMC_AT_DECODER 0 -+#define CONFIG_QDM2_AT_DECODER 0 -+#define CONFIG_LIBARIBB24_DECODER 0 -+#define CONFIG_LIBCELT_DECODER 0 -+#define CONFIG_LIBCODEC2_DECODER 0 -+#define CONFIG_LIBDAV1D_DECODER 0 -+#define CONFIG_LIBDAVS2_DECODER 0 -+#define CONFIG_LIBFDK_AAC_DECODER 0 -+#define CONFIG_LIBGSM_DECODER 0 -+#define CONFIG_LIBGSM_MS_DECODER 0 -+#define CONFIG_LIBILBC_DECODER 0 -+#define CONFIG_LIBJXL_DECODER 0 -+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -+#define CONFIG_LIBOPENJPEG_DECODER 0 -+#define CONFIG_LIBOPUS_DECODER 0 -+#define CONFIG_LIBRSVG_DECODER 0 -+#define CONFIG_LIBSPEEX_DECODER 0 -+#define CONFIG_LIBUAVS3D_DECODER 0 -+#define CONFIG_LIBVORBIS_DECODER 0 -+#define CONFIG_LIBVPX_VP8_DECODER 0 -+#define CONFIG_LIBVPX_VP9_DECODER 0 -+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -+#define CONFIG_BINTEXT_DECODER 0 -+#define CONFIG_XBIN_DECODER 0 -+#define CONFIG_IDF_DECODER 0 -+#define CONFIG_LIBAOM_AV1_DECODER 0 -+#define CONFIG_AV1_DECODER 0 -+#define CONFIG_AV1_CUVID_DECODER 0 -+#define CONFIG_AV1_QSV_DECODER 0 -+#define CONFIG_LIBOPENH264_DECODER 0 -+#define CONFIG_H264_CUVID_DECODER 0 -+#define CONFIG_HEVC_CUVID_DECODER 0 -+#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -+#define CONFIG_MJPEG_CUVID_DECODER 0 -+#define CONFIG_MJPEG_QSV_DECODER 0 -+#define CONFIG_MPEG1_CUVID_DECODER 0 -+#define CONFIG_MPEG2_CUVID_DECODER 0 -+#define CONFIG_MPEG4_CUVID_DECODER 0 -+#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -+#define CONFIG_VC1_CUVID_DECODER 0 -+#define CONFIG_VP8_CUVID_DECODER 0 -+#define CONFIG_VP8_MEDIACODEC_DECODER 0 -+#define CONFIG_VP8_QSV_DECODER 0 -+#define CONFIG_VP9_CUVID_DECODER 0 -+#define CONFIG_VP9_MEDIACODEC_DECODER 0 -+#define CONFIG_VP9_QSV_DECODER 0 -+#define CONFIG_A64MULTI_ENCODER 0 -+#define CONFIG_A64MULTI5_ENCODER 0 -+#define CONFIG_ALIAS_PIX_ENCODER 0 -+#define CONFIG_AMV_ENCODER 0 -+#define CONFIG_APNG_ENCODER 0 -+#define CONFIG_ASV1_ENCODER 0 -+#define CONFIG_ASV2_ENCODER 0 -+#define CONFIG_AVRP_ENCODER 0 -+#define CONFIG_AVUI_ENCODER 0 -+#define CONFIG_AYUV_ENCODER 0 -+#define CONFIG_BITPACKED_ENCODER 0 -+#define CONFIG_BMP_ENCODER 0 -+#define CONFIG_CFHD_ENCODER 0 -+#define CONFIG_CINEPAK_ENCODER 0 -+#define CONFIG_CLJR_ENCODER 0 -+#define CONFIG_COMFORTNOISE_ENCODER 0 -+#define CONFIG_DNXHD_ENCODER 0 -+#define CONFIG_DPX_ENCODER 0 -+#define CONFIG_DVVIDEO_ENCODER 0 -+#define CONFIG_EXR_ENCODER 0 -+#define CONFIG_FFV1_ENCODER 0 -+#define CONFIG_FFVHUFF_ENCODER 0 -+#define CONFIG_FITS_ENCODER 0 -+#define CONFIG_FLASHSV_ENCODER 0 -+#define CONFIG_FLASHSV2_ENCODER 0 -+#define CONFIG_FLV_ENCODER 0 -+#define CONFIG_GIF_ENCODER 0 -+#define CONFIG_H261_ENCODER 0 -+#define CONFIG_H263_ENCODER 0 -+#define CONFIG_H263P_ENCODER 0 -+#define CONFIG_HAP_ENCODER 0 -+#define CONFIG_HUFFYUV_ENCODER 0 -+#define CONFIG_JPEG2000_ENCODER 0 -+#define CONFIG_JPEGLS_ENCODER 0 -+#define CONFIG_LJPEG_ENCODER 0 -+#define CONFIG_MAGICYUV_ENCODER 0 -+#define CONFIG_MJPEG_ENCODER 0 -+#define CONFIG_MPEG1VIDEO_ENCODER 0 -+#define CONFIG_MPEG2VIDEO_ENCODER 0 -+#define CONFIG_MPEG4_ENCODER 0 -+#define CONFIG_MSMPEG4V2_ENCODER 0 -+#define CONFIG_MSMPEG4V3_ENCODER 0 -+#define CONFIG_MSVIDEO1_ENCODER 0 -+#define CONFIG_PAM_ENCODER 0 -+#define CONFIG_PBM_ENCODER 0 -+#define CONFIG_PCX_ENCODER 0 -+#define CONFIG_PFM_ENCODER 0 -+#define CONFIG_PGM_ENCODER 0 -+#define CONFIG_PGMYUV_ENCODER 0 -+#define CONFIG_PNG_ENCODER 0 -+#define CONFIG_PPM_ENCODER 0 -+#define CONFIG_PRORES_ENCODER 0 -+#define CONFIG_PRORES_AW_ENCODER 0 -+#define CONFIG_PRORES_KS_ENCODER 0 -+#define CONFIG_QOI_ENCODER 0 -+#define CONFIG_QTRLE_ENCODER 0 -+#define CONFIG_R10K_ENCODER 0 -+#define CONFIG_R210_ENCODER 0 -+#define CONFIG_RAWVIDEO_ENCODER 0 -+#define CONFIG_ROQ_ENCODER 0 -+#define CONFIG_RPZA_ENCODER 0 -+#define CONFIG_RV10_ENCODER 0 -+#define CONFIG_RV20_ENCODER 0 -+#define CONFIG_S302M_ENCODER 0 -+#define CONFIG_SGI_ENCODER 0 -+#define CONFIG_SMC_ENCODER 0 -+#define CONFIG_SNOW_ENCODER 0 -+#define CONFIG_SPEEDHQ_ENCODER 0 -+#define CONFIG_SUNRAST_ENCODER 0 -+#define CONFIG_SVQ1_ENCODER 0 -+#define CONFIG_TARGA_ENCODER 0 -+#define CONFIG_TIFF_ENCODER 0 -+#define CONFIG_UTVIDEO_ENCODER 0 -+#define CONFIG_V210_ENCODER 0 -+#define CONFIG_V308_ENCODER 0 -+#define CONFIG_V408_ENCODER 0 -+#define CONFIG_V410_ENCODER 0 -+#define CONFIG_VBN_ENCODER 0 -+#define CONFIG_VC2_ENCODER 0 -+#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -+#define CONFIG_WMV1_ENCODER 0 -+#define CONFIG_WMV2_ENCODER 0 -+#define CONFIG_XBM_ENCODER 0 -+#define CONFIG_XFACE_ENCODER 0 -+#define CONFIG_XWD_ENCODER 0 -+#define CONFIG_Y41P_ENCODER 0 -+#define CONFIG_YUV4_ENCODER 0 -+#define CONFIG_ZLIB_ENCODER 0 -+#define CONFIG_ZMBV_ENCODER 0 -+#define CONFIG_AAC_ENCODER 0 -+#define CONFIG_AC3_ENCODER 0 -+#define CONFIG_AC3_FIXED_ENCODER 0 -+#define CONFIG_ALAC_ENCODER 0 -+#define CONFIG_APTX_ENCODER 0 -+#define CONFIG_APTX_HD_ENCODER 0 -+#define CONFIG_DCA_ENCODER 0 -+#define CONFIG_DFPWM_ENCODER 0 -+#define CONFIG_EAC3_ENCODER 0 -+#define CONFIG_FLAC_ENCODER 0 -+#define CONFIG_G723_1_ENCODER 0 -+#define CONFIG_MLP_ENCODER 0 -+#define CONFIG_MP2_ENCODER 0 -+#define CONFIG_MP2FIXED_ENCODER 0 -+#define CONFIG_NELLYMOSER_ENCODER 0 -+#define CONFIG_OPUS_ENCODER 0 -+#define CONFIG_RA_144_ENCODER 0 -+#define CONFIG_SBC_ENCODER 0 -+#define CONFIG_SONIC_ENCODER 0 -+#define CONFIG_SONIC_LS_ENCODER 0 -+#define CONFIG_TRUEHD_ENCODER 0 -+#define CONFIG_TTA_ENCODER 0 -+#define CONFIG_VORBIS_ENCODER 0 -+#define CONFIG_WAVPACK_ENCODER 0 -+#define CONFIG_WMAV1_ENCODER 0 -+#define CONFIG_WMAV2_ENCODER 0 -+#define CONFIG_PCM_ALAW_ENCODER 0 -+#define CONFIG_PCM_BLURAY_ENCODER 0 -+#define CONFIG_PCM_DVD_ENCODER 0 -+#define CONFIG_PCM_F32BE_ENCODER 0 -+#define CONFIG_PCM_F32LE_ENCODER 0 -+#define CONFIG_PCM_F64BE_ENCODER 0 -+#define CONFIG_PCM_F64LE_ENCODER 0 -+#define CONFIG_PCM_MULAW_ENCODER 0 -+#define CONFIG_PCM_S8_ENCODER 0 -+#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S16BE_ENCODER 0 -+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S16LE_ENCODER 0 -+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S24BE_ENCODER 0 -+#define CONFIG_PCM_S24DAUD_ENCODER 0 -+#define CONFIG_PCM_S24LE_ENCODER 0 -+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S32BE_ENCODER 0 -+#define CONFIG_PCM_S32LE_ENCODER 0 -+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S64BE_ENCODER 0 -+#define CONFIG_PCM_S64LE_ENCODER 0 -+#define CONFIG_PCM_U8_ENCODER 0 -+#define CONFIG_PCM_U16BE_ENCODER 0 -+#define CONFIG_PCM_U16LE_ENCODER 0 -+#define CONFIG_PCM_U24BE_ENCODER 0 -+#define CONFIG_PCM_U24LE_ENCODER 0 -+#define CONFIG_PCM_U32BE_ENCODER 0 -+#define CONFIG_PCM_U32LE_ENCODER 0 -+#define CONFIG_PCM_VIDC_ENCODER 0 -+#define CONFIG_ROQ_DPCM_ENCODER 0 -+#define CONFIG_ADPCM_ADX_ENCODER 0 -+#define CONFIG_ADPCM_ARGO_ENCODER 0 -+#define CONFIG_ADPCM_G722_ENCODER 0 -+#define CONFIG_ADPCM_G726_ENCODER 0 -+#define CONFIG_ADPCM_G726LE_ENCODER 0 -+#define CONFIG_ADPCM_IMA_AMV_ENCODER 0 -+#define CONFIG_ADPCM_IMA_ALP_ENCODER 0 -+#define CONFIG_ADPCM_IMA_APM_ENCODER 0 -+#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -+#define CONFIG_ADPCM_IMA_SSI_ENCODER 0 -+#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -+#define CONFIG_ADPCM_IMA_WS_ENCODER 0 -+#define CONFIG_ADPCM_MS_ENCODER 0 -+#define CONFIG_ADPCM_SWF_ENCODER 0 -+#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -+#define CONFIG_SSA_ENCODER 0 -+#define CONFIG_ASS_ENCODER 0 -+#define CONFIG_DVBSUB_ENCODER 0 -+#define CONFIG_DVDSUB_ENCODER 0 -+#define CONFIG_MOVTEXT_ENCODER 0 -+#define CONFIG_SRT_ENCODER 0 -+#define CONFIG_SUBRIP_ENCODER 0 -+#define CONFIG_TEXT_ENCODER 0 -+#define CONFIG_TTML_ENCODER 0 -+#define CONFIG_WEBVTT_ENCODER 0 -+#define CONFIG_XSUB_ENCODER 0 -+#define CONFIG_AAC_AT_ENCODER 0 -+#define CONFIG_ALAC_AT_ENCODER 0 -+#define CONFIG_ILBC_AT_ENCODER 0 -+#define CONFIG_PCM_ALAW_AT_ENCODER 0 -+#define CONFIG_PCM_MULAW_AT_ENCODER 0 -+#define CONFIG_LIBAOM_AV1_ENCODER 0 -+#define CONFIG_LIBCODEC2_ENCODER 0 -+#define CONFIG_LIBFDK_AAC_ENCODER 0 -+#define CONFIG_LIBGSM_ENCODER 0 -+#define CONFIG_LIBGSM_MS_ENCODER 0 -+#define CONFIG_LIBILBC_ENCODER 0 -+#define CONFIG_LIBJXL_ENCODER 0 -+#define CONFIG_LIBMP3LAME_ENCODER 0 -+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -+#define CONFIG_LIBOPENJPEG_ENCODER 0 -+#define CONFIG_LIBOPUS_ENCODER 0 -+#define CONFIG_LIBRAV1E_ENCODER 0 -+#define CONFIG_LIBSHINE_ENCODER 0 -+#define CONFIG_LIBSPEEX_ENCODER 0 -+#define CONFIG_LIBSVTAV1_ENCODER 0 -+#define CONFIG_LIBTHEORA_ENCODER 0 -+#define CONFIG_LIBTWOLAME_ENCODER 0 -+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -+#define CONFIG_LIBVORBIS_ENCODER 0 -+#define CONFIG_LIBVPX_VP8_ENCODER 0 -+#define CONFIG_LIBVPX_VP9_ENCODER 0 -+#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -+#define CONFIG_LIBWEBP_ENCODER 0 -+#define CONFIG_LIBX262_ENCODER 0 -+#define CONFIG_LIBX264_ENCODER 0 -+#define CONFIG_LIBX264RGB_ENCODER 0 -+#define CONFIG_LIBX265_ENCODER 0 -+#define CONFIG_LIBXAVS_ENCODER 0 -+#define CONFIG_LIBXAVS2_ENCODER 0 -+#define CONFIG_LIBXVID_ENCODER 0 -+#define CONFIG_AAC_MF_ENCODER 0 -+#define CONFIG_AC3_MF_ENCODER 0 -+#define CONFIG_H263_V4L2M2M_ENCODER 0 -+#define CONFIG_LIBOPENH264_ENCODER 0 -+#define CONFIG_H264_AMF_ENCODER 0 -+#define CONFIG_H264_MF_ENCODER 0 -+#define CONFIG_H264_NVENC_ENCODER 0 -+#define CONFIG_H264_OMX_ENCODER 0 -+#define CONFIG_H264_QSV_ENCODER 0 -+#define CONFIG_H264_V4L2M2M_ENCODER 0 -+#define CONFIG_H264_VAAPI_ENCODER 0 -+#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -+#define CONFIG_HEVC_AMF_ENCODER 0 -+#define CONFIG_HEVC_MF_ENCODER 0 -+#define CONFIG_HEVC_NVENC_ENCODER 0 -+#define CONFIG_HEVC_QSV_ENCODER 0 -+#define CONFIG_HEVC_V4L2M2M_ENCODER 0 -+#define CONFIG_HEVC_VAAPI_ENCODER 0 -+#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 -+#define CONFIG_LIBKVAZAAR_ENCODER 0 -+#define CONFIG_MJPEG_QSV_ENCODER 0 -+#define CONFIG_MJPEG_VAAPI_ENCODER 0 -+#define CONFIG_MP3_MF_ENCODER 0 -+#define CONFIG_MPEG2_QSV_ENCODER 0 -+#define CONFIG_MPEG2_VAAPI_ENCODER 0 -+#define CONFIG_MPEG4_OMX_ENCODER 0 -+#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 -+#define CONFIG_PRORES_VIDEOTOOLBOX_ENCODER 0 -+#define CONFIG_VP8_V4L2M2M_ENCODER 0 -+#define CONFIG_VP8_VAAPI_ENCODER 0 -+#define CONFIG_VP9_VAAPI_ENCODER 0 -+#define CONFIG_VP9_QSV_ENCODER 0 -+#define CONFIG_AV1_D3D11VA_HWACCEL 0 -+#define CONFIG_AV1_D3D11VA2_HWACCEL 0 -+#define CONFIG_AV1_DXVA2_HWACCEL 0 -+#define CONFIG_AV1_NVDEC_HWACCEL 0 -+#define CONFIG_AV1_VAAPI_HWACCEL 0 -+#define CONFIG_AV1_VDPAU_HWACCEL 0 -+#define CONFIG_H263_VAAPI_HWACCEL 0 -+#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_H264_D3D11VA_HWACCEL 0 -+#define CONFIG_H264_D3D11VA2_HWACCEL 0 -+#define CONFIG_H264_DXVA2_HWACCEL 0 -+#define CONFIG_H264_NVDEC_HWACCEL 0 -+#define CONFIG_H264_VAAPI_HWACCEL 0 -+#define CONFIG_H264_VDPAU_HWACCEL 0 -+#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -+#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 -+#define CONFIG_HEVC_DXVA2_HWACCEL 0 -+#define CONFIG_HEVC_NVDEC_HWACCEL 0 -+#define CONFIG_HEVC_VAAPI_HWACCEL 0 -+#define CONFIG_HEVC_VDPAU_HWACCEL 0 -+#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_MJPEG_NVDEC_HWACCEL 0 -+#define CONFIG_MJPEG_VAAPI_HWACCEL 0 -+#define CONFIG_MPEG1_NVDEC_HWACCEL 0 -+#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -+#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -+#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 -+#define CONFIG_MPEG2_NVDEC_HWACCEL 0 -+#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -+#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -+#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -+#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_MPEG4_NVDEC_HWACCEL 0 -+#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -+#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -+#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_VC1_D3D11VA_HWACCEL 0 -+#define CONFIG_VC1_D3D11VA2_HWACCEL 0 -+#define CONFIG_VC1_DXVA2_HWACCEL 0 -+#define CONFIG_VC1_NVDEC_HWACCEL 0 -+#define CONFIG_VC1_VAAPI_HWACCEL 0 -+#define CONFIG_VC1_VDPAU_HWACCEL 0 -+#define CONFIG_VP8_NVDEC_HWACCEL 0 -+#define CONFIG_VP8_VAAPI_HWACCEL 0 -+#define CONFIG_VP9_D3D11VA_HWACCEL 0 -+#define CONFIG_VP9_D3D11VA2_HWACCEL 0 -+#define CONFIG_VP9_DXVA2_HWACCEL 0 -+#define CONFIG_VP9_NVDEC_HWACCEL 0 -+#define CONFIG_VP9_VAAPI_HWACCEL 0 -+#define CONFIG_VP9_VDPAU_HWACCEL 0 -+#define CONFIG_VP9_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -+#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 -+#define CONFIG_WMV3_DXVA2_HWACCEL 0 -+#define CONFIG_WMV3_NVDEC_HWACCEL 0 -+#define CONFIG_WMV3_VAAPI_HWACCEL 0 -+#define CONFIG_WMV3_VDPAU_HWACCEL 0 -+#define CONFIG_AAC_PARSER 0 -+#define CONFIG_AAC_LATM_PARSER 0 -+#define CONFIG_AC3_PARSER 0 -+#define CONFIG_ADX_PARSER 0 -+#define CONFIG_AMR_PARSER 0 -+#define CONFIG_AV1_PARSER 0 -+#define CONFIG_AVS2_PARSER 0 -+#define CONFIG_AVS3_PARSER 0 -+#define CONFIG_BMP_PARSER 0 -+#define CONFIG_CAVSVIDEO_PARSER 0 -+#define CONFIG_COOK_PARSER 0 -+#define CONFIG_CRI_PARSER 0 -+#define CONFIG_DCA_PARSER 0 -+#define CONFIG_DIRAC_PARSER 0 -+#define CONFIG_DNXHD_PARSER 0 -+#define CONFIG_DOLBY_E_PARSER 0 -+#define CONFIG_DPX_PARSER 0 -+#define CONFIG_DVAUDIO_PARSER 0 -+#define CONFIG_DVBSUB_PARSER 0 -+#define CONFIG_DVDSUB_PARSER 0 -+#define CONFIG_DVD_NAV_PARSER 0 -+#define CONFIG_FLAC_PARSER 0 -+#define CONFIG_G723_1_PARSER 0 -+#define CONFIG_G729_PARSER 0 -+#define CONFIG_GIF_PARSER 0 -+#define CONFIG_GSM_PARSER 0 -+#define CONFIG_H261_PARSER 0 -+#define CONFIG_H263_PARSER 0 -+#define CONFIG_H264_PARSER 0 -+#define CONFIG_HEVC_PARSER 0 -+#define CONFIG_IPU_PARSER 0 -+#define CONFIG_JPEG2000_PARSER 0 -+#define CONFIG_MJPEG_PARSER 0 -+#define CONFIG_MLP_PARSER 0 -+#define CONFIG_MPEG4VIDEO_PARSER 0 -+#define CONFIG_MPEGAUDIO_PARSER 0 -+#define CONFIG_MPEGVIDEO_PARSER 0 -+#define CONFIG_OPUS_PARSER 0 -+#define CONFIG_PNG_PARSER 0 -+#define CONFIG_PNM_PARSER 0 -+#define CONFIG_QOI_PARSER 0 -+#define CONFIG_RV30_PARSER 0 -+#define CONFIG_RV40_PARSER 0 -+#define CONFIG_SBC_PARSER 0 -+#define CONFIG_SIPR_PARSER 0 -+#define CONFIG_TAK_PARSER 0 -+#define CONFIG_VC1_PARSER 0 -+#define CONFIG_VORBIS_PARSER 0 -+#define CONFIG_VP3_PARSER 0 -+#define CONFIG_VP8_PARSER 0 -+#define CONFIG_VP9_PARSER 0 -+#define CONFIG_WEBP_PARSER 0 -+#define CONFIG_XBM_PARSER 0 -+#define CONFIG_XMA_PARSER 0 -+#define CONFIG_ALSA_INDEV 0 -+#define CONFIG_ANDROID_CAMERA_INDEV 0 -+#define CONFIG_AVFOUNDATION_INDEV 0 -+#define CONFIG_BKTR_INDEV 0 -+#define CONFIG_DECKLINK_INDEV 0 -+#define CONFIG_DSHOW_INDEV 0 -+#define CONFIG_FBDEV_INDEV 0 -+#define CONFIG_GDIGRAB_INDEV 0 -+#define CONFIG_IEC61883_INDEV 0 -+#define CONFIG_JACK_INDEV 0 -+#define CONFIG_KMSGRAB_INDEV 0 -+#define CONFIG_LAVFI_INDEV 0 -+#define CONFIG_OPENAL_INDEV 0 -+#define CONFIG_OSS_INDEV 0 -+#define CONFIG_PULSE_INDEV 0 -+#define CONFIG_SNDIO_INDEV 0 -+#define CONFIG_V4L2_INDEV 0 -+#define CONFIG_VFWCAP_INDEV 0 -+#define CONFIG_XCBGRAB_INDEV 0 -+#define CONFIG_LIBCDIO_INDEV 0 -+#define CONFIG_LIBDC1394_INDEV 0 -+#define CONFIG_ALSA_OUTDEV 0 -+#define CONFIG_AUDIOTOOLBOX_OUTDEV 0 -+#define CONFIG_CACA_OUTDEV 0 -+#define CONFIG_DECKLINK_OUTDEV 0 -+#define CONFIG_FBDEV_OUTDEV 0 -+#define CONFIG_OPENGL_OUTDEV 0 -+#define CONFIG_OSS_OUTDEV 0 -+#define CONFIG_PULSE_OUTDEV 0 -+#define CONFIG_SDL2_OUTDEV 0 -+#define CONFIG_SNDIO_OUTDEV 0 -+#define CONFIG_V4L2_OUTDEV 0 -+#define CONFIG_XV_OUTDEV 0 -+#define CONFIG_ABENCH_FILTER 0 -+#define CONFIG_ACOMPRESSOR_FILTER 0 -+#define CONFIG_ACONTRAST_FILTER 0 -+#define CONFIG_ACOPY_FILTER 0 -+#define CONFIG_ACUE_FILTER 0 -+#define CONFIG_ACROSSFADE_FILTER 0 -+#define CONFIG_ACROSSOVER_FILTER 0 -+#define CONFIG_ACRUSHER_FILTER 0 -+#define CONFIG_ADECLICK_FILTER 0 -+#define CONFIG_ADECLIP_FILTER 0 -+#define CONFIG_ADECORRELATE_FILTER 0 -+#define CONFIG_ADELAY_FILTER 0 -+#define CONFIG_ADENORM_FILTER 0 -+#define CONFIG_ADERIVATIVE_FILTER 0 -+#define CONFIG_ADYNAMICEQUALIZER_FILTER 0 -+#define CONFIG_ADYNAMICSMOOTH_FILTER 0 -+#define CONFIG_AECHO_FILTER 0 -+#define CONFIG_AEMPHASIS_FILTER 0 -+#define CONFIG_AEVAL_FILTER 0 -+#define CONFIG_AEXCITER_FILTER 0 -+#define CONFIG_AFADE_FILTER 0 -+#define CONFIG_AFFTDN_FILTER 0 -+#define CONFIG_AFFTFILT_FILTER 0 -+#define CONFIG_AFIR_FILTER 0 -+#define CONFIG_AFORMAT_FILTER 0 -+#define CONFIG_AFREQSHIFT_FILTER 0 -+#define CONFIG_AFWTDN_FILTER 0 -+#define CONFIG_AGATE_FILTER 0 -+#define CONFIG_AIIR_FILTER 0 -+#define CONFIG_AINTEGRAL_FILTER 0 -+#define CONFIG_AINTERLEAVE_FILTER 0 -+#define CONFIG_ALATENCY_FILTER 0 -+#define CONFIG_ALIMITER_FILTER 0 -+#define CONFIG_ALLPASS_FILTER 0 -+#define CONFIG_ALOOP_FILTER 0 -+#define CONFIG_AMERGE_FILTER 0 -+#define CONFIG_AMETADATA_FILTER 0 -+#define CONFIG_AMIX_FILTER 0 -+#define CONFIG_AMULTIPLY_FILTER 0 -+#define CONFIG_ANEQUALIZER_FILTER 0 -+#define CONFIG_ANLMDN_FILTER 0 -+#define CONFIG_ANLMF_FILTER 0 -+#define CONFIG_ANLMS_FILTER 0 -+#define CONFIG_ANULL_FILTER 0 -+#define CONFIG_APAD_FILTER 0 -+#define CONFIG_APERMS_FILTER 0 -+#define CONFIG_APHASER_FILTER 0 -+#define CONFIG_APHASESHIFT_FILTER 0 -+#define CONFIG_APSYCLIP_FILTER 0 -+#define CONFIG_APULSATOR_FILTER 0 -+#define CONFIG_AREALTIME_FILTER 0 -+#define CONFIG_ARESAMPLE_FILTER 0 -+#define CONFIG_AREVERSE_FILTER 0 -+#define CONFIG_ARNNDN_FILTER 0 -+#define CONFIG_ASDR_FILTER 0 -+#define CONFIG_ASEGMENT_FILTER 0 -+#define CONFIG_ASELECT_FILTER 0 -+#define CONFIG_ASENDCMD_FILTER 0 -+#define CONFIG_ASETNSAMPLES_FILTER 0 -+#define CONFIG_ASETPTS_FILTER 0 -+#define CONFIG_ASETRATE_FILTER 0 -+#define CONFIG_ASETTB_FILTER 0 -+#define CONFIG_ASHOWINFO_FILTER 0 -+#define CONFIG_ASIDEDATA_FILTER 0 -+#define CONFIG_ASOFTCLIP_FILTER 0 -+#define CONFIG_ASPECTRALSTATS_FILTER 0 -+#define CONFIG_ASPLIT_FILTER 0 -+#define CONFIG_ASR_FILTER 0 -+#define CONFIG_ASTATS_FILTER 0 -+#define CONFIG_ASTREAMSELECT_FILTER 0 -+#define CONFIG_ASUBBOOST_FILTER 0 -+#define CONFIG_ASUBCUT_FILTER 0 -+#define CONFIG_ASUPERCUT_FILTER 0 -+#define CONFIG_ASUPERPASS_FILTER 0 -+#define CONFIG_ASUPERSTOP_FILTER 0 -+#define CONFIG_ATEMPO_FILTER 0 -+#define CONFIG_ATILT_FILTER 0 -+#define CONFIG_ATRIM_FILTER 0 -+#define CONFIG_AXCORRELATE_FILTER 0 -+#define CONFIG_AZMQ_FILTER 0 -+#define CONFIG_BANDPASS_FILTER 0 -+#define CONFIG_BANDREJECT_FILTER 0 -+#define CONFIG_BASS_FILTER 0 -+#define CONFIG_BIQUAD_FILTER 0 -+#define CONFIG_BS2B_FILTER 0 -+#define CONFIG_CHANNELMAP_FILTER 0 -+#define CONFIG_CHANNELSPLIT_FILTER 0 -+#define CONFIG_CHORUS_FILTER 0 -+#define CONFIG_COMPAND_FILTER 0 -+#define CONFIG_COMPENSATIONDELAY_FILTER 0 -+#define CONFIG_CROSSFEED_FILTER 0 -+#define CONFIG_CRYSTALIZER_FILTER 0 -+#define CONFIG_DCSHIFT_FILTER 0 -+#define CONFIG_DEESSER_FILTER 0 -+#define CONFIG_DIALOGUENHANCE_FILTER 0 -+#define CONFIG_DRMETER_FILTER 0 -+#define CONFIG_DYNAUDNORM_FILTER 0 -+#define CONFIG_EARWAX_FILTER 0 -+#define CONFIG_EBUR128_FILTER 0 -+#define CONFIG_EQUALIZER_FILTER 0 -+#define CONFIG_EXTRASTEREO_FILTER 0 -+#define CONFIG_FIREQUALIZER_FILTER 0 -+#define CONFIG_FLANGER_FILTER 0 -+#define CONFIG_HAAS_FILTER 0 -+#define CONFIG_HDCD_FILTER 0 -+#define CONFIG_HEADPHONE_FILTER 0 -+#define CONFIG_HIGHPASS_FILTER 0 -+#define CONFIG_HIGHSHELF_FILTER 0 -+#define CONFIG_JOIN_FILTER 0 -+#define CONFIG_LADSPA_FILTER 0 -+#define CONFIG_LOUDNORM_FILTER 0 -+#define CONFIG_LOWPASS_FILTER 0 -+#define CONFIG_LOWSHELF_FILTER 0 -+#define CONFIG_LV2_FILTER 0 -+#define CONFIG_MCOMPAND_FILTER 0 -+#define CONFIG_PAN_FILTER 0 -+#define CONFIG_REPLAYGAIN_FILTER 0 -+#define CONFIG_RUBBERBAND_FILTER 0 -+#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -+#define CONFIG_SIDECHAINGATE_FILTER 0 -+#define CONFIG_SILENCEDETECT_FILTER 0 -+#define CONFIG_SILENCEREMOVE_FILTER 0 -+#define CONFIG_SOFALIZER_FILTER 0 -+#define CONFIG_SPEECHNORM_FILTER 0 -+#define CONFIG_STEREOTOOLS_FILTER 0 -+#define CONFIG_STEREOWIDEN_FILTER 0 -+#define CONFIG_SUPEREQUALIZER_FILTER 0 -+#define CONFIG_SURROUND_FILTER 0 -+#define CONFIG_TILTSHELF_FILTER 0 -+#define CONFIG_TREBLE_FILTER 0 -+#define CONFIG_TREMOLO_FILTER 0 -+#define CONFIG_VIBRATO_FILTER 0 -+#define CONFIG_VIRTUALBASS_FILTER 0 -+#define CONFIG_VOLUME_FILTER 0 -+#define CONFIG_VOLUMEDETECT_FILTER 0 -+#define CONFIG_AEVALSRC_FILTER 0 -+#define CONFIG_AFIRSRC_FILTER 0 -+#define CONFIG_ANOISESRC_FILTER 0 -+#define CONFIG_ANULLSRC_FILTER 0 -+#define CONFIG_FLITE_FILTER 0 -+#define CONFIG_HILBERT_FILTER 0 -+#define CONFIG_SINC_FILTER 0 -+#define CONFIG_SINE_FILTER 0 -+#define CONFIG_ANULLSINK_FILTER 0 -+#define CONFIG_ADDROI_FILTER 0 -+#define CONFIG_ALPHAEXTRACT_FILTER 0 -+#define CONFIG_ALPHAMERGE_FILTER 0 -+#define CONFIG_AMPLIFY_FILTER 0 -+#define CONFIG_ASS_FILTER 0 -+#define CONFIG_ATADENOISE_FILTER 0 -+#define CONFIG_AVGBLUR_FILTER 0 -+#define CONFIG_AVGBLUR_OPENCL_FILTER 0 -+#define CONFIG_AVGBLUR_VULKAN_FILTER 0 -+#define CONFIG_BBOX_FILTER 0 -+#define CONFIG_BENCH_FILTER 0 -+#define CONFIG_BILATERAL_FILTER 0 -+#define CONFIG_BITPLANENOISE_FILTER 0 -+#define CONFIG_BLACKDETECT_FILTER 0 -+#define CONFIG_BLACKFRAME_FILTER 0 -+#define CONFIG_BLEND_FILTER 0 -+#define CONFIG_BLEND_VULKAN_FILTER 0 -+#define CONFIG_BLOCKDETECT_FILTER 0 -+#define CONFIG_BLURDETECT_FILTER 0 -+#define CONFIG_BM3D_FILTER 0 -+#define CONFIG_BOXBLUR_FILTER 0 -+#define CONFIG_BOXBLUR_OPENCL_FILTER 0 -+#define CONFIG_BWDIF_FILTER 0 -+#define CONFIG_CAS_FILTER 0 -+#define CONFIG_CHROMABER_VULKAN_FILTER 0 -+#define CONFIG_CHROMAHOLD_FILTER 0 -+#define CONFIG_CHROMAKEY_FILTER 0 -+#define CONFIG_CHROMANR_FILTER 0 -+#define CONFIG_CHROMASHIFT_FILTER 0 -+#define CONFIG_CIESCOPE_FILTER 0 -+#define CONFIG_CODECVIEW_FILTER 0 -+#define CONFIG_COLORBALANCE_FILTER 0 -+#define CONFIG_COLORCHANNELMIXER_FILTER 0 -+#define CONFIG_COLORCONTRAST_FILTER 0 -+#define CONFIG_COLORCORRECT_FILTER 0 -+#define CONFIG_COLORIZE_FILTER 0 -+#define CONFIG_COLORKEY_FILTER 0 -+#define CONFIG_COLORKEY_OPENCL_FILTER 0 -+#define CONFIG_COLORHOLD_FILTER 0 -+#define CONFIG_COLORLEVELS_FILTER 0 -+#define CONFIG_COLORMAP_FILTER 0 -+#define CONFIG_COLORMATRIX_FILTER 0 -+#define CONFIG_COLORSPACE_FILTER 0 -+#define CONFIG_COLORTEMPERATURE_FILTER 0 -+#define CONFIG_CONVOLUTION_FILTER 0 -+#define CONFIG_CONVOLUTION_OPENCL_FILTER 0 -+#define CONFIG_CONVOLVE_FILTER 0 -+#define CONFIG_COPY_FILTER 0 -+#define CONFIG_COREIMAGE_FILTER 0 -+#define CONFIG_COVER_RECT_FILTER 0 -+#define CONFIG_CROP_FILTER 0 -+#define CONFIG_CROPDETECT_FILTER 0 -+#define CONFIG_CUE_FILTER 0 -+#define CONFIG_CURVES_FILTER 0 -+#define CONFIG_DATASCOPE_FILTER 0 -+#define CONFIG_DBLUR_FILTER 0 -+#define CONFIG_DCTDNOIZ_FILTER 0 -+#define CONFIG_DEBAND_FILTER 0 -+#define CONFIG_DEBLOCK_FILTER 0 -+#define CONFIG_DECIMATE_FILTER 0 -+#define CONFIG_DECONVOLVE_FILTER 0 -+#define CONFIG_DEDOT_FILTER 0 -+#define CONFIG_DEFLATE_FILTER 0 -+#define CONFIG_DEFLICKER_FILTER 0 -+#define CONFIG_DEINTERLACE_QSV_FILTER 0 -+#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 -+#define CONFIG_DEJUDDER_FILTER 0 -+#define CONFIG_DELOGO_FILTER 0 -+#define CONFIG_DENOISE_VAAPI_FILTER 0 -+#define CONFIG_DERAIN_FILTER 0 -+#define CONFIG_DESHAKE_FILTER 0 -+#define CONFIG_DESHAKE_OPENCL_FILTER 0 -+#define CONFIG_DESPILL_FILTER 0 -+#define CONFIG_DETELECINE_FILTER 0 -+#define CONFIG_DILATION_FILTER 0 -+#define CONFIG_DILATION_OPENCL_FILTER 0 -+#define CONFIG_DISPLACE_FILTER 0 -+#define CONFIG_DNN_CLASSIFY_FILTER 0 -+#define CONFIG_DNN_DETECT_FILTER 0 -+#define CONFIG_DNN_PROCESSING_FILTER 0 -+#define CONFIG_DOUBLEWEAVE_FILTER 0 -+#define CONFIG_DRAWBOX_FILTER 0 -+#define CONFIG_DRAWGRAPH_FILTER 0 -+#define CONFIG_DRAWGRID_FILTER 0 -+#define CONFIG_DRAWTEXT_FILTER 0 -+#define CONFIG_EDGEDETECT_FILTER 0 -+#define CONFIG_ELBG_FILTER 0 -+#define CONFIG_ENTROPY_FILTER 0 -+#define CONFIG_EPX_FILTER 0 -+#define CONFIG_EQ_FILTER 0 -+#define CONFIG_EROSION_FILTER 0 -+#define CONFIG_EROSION_OPENCL_FILTER 0 -+#define CONFIG_ESTDIF_FILTER 0 -+#define CONFIG_EXPOSURE_FILTER 0 -+#define CONFIG_EXTRACTPLANES_FILTER 0 -+#define CONFIG_FADE_FILTER 0 -+#define CONFIG_FEEDBACK_FILTER 0 -+#define CONFIG_FFTDNOIZ_FILTER 0 -+#define CONFIG_FFTFILT_FILTER 0 -+#define CONFIG_FIELD_FILTER 0 -+#define CONFIG_FIELDHINT_FILTER 0 -+#define CONFIG_FIELDMATCH_FILTER 0 -+#define CONFIG_FIELDORDER_FILTER 0 -+#define CONFIG_FILLBORDERS_FILTER 0 -+#define CONFIG_FIND_RECT_FILTER 0 -+#define CONFIG_FLIP_VULKAN_FILTER 0 -+#define CONFIG_FLOODFILL_FILTER 0 -+#define CONFIG_FORMAT_FILTER 0 -+#define CONFIG_FPS_FILTER 0 -+#define CONFIG_FRAMEPACK_FILTER 0 -+#define CONFIG_FRAMERATE_FILTER 0 -+#define CONFIG_FRAMESTEP_FILTER 0 -+#define CONFIG_FREEZEDETECT_FILTER 0 -+#define CONFIG_FREEZEFRAMES_FILTER 0 -+#define CONFIG_FREI0R_FILTER 0 -+#define CONFIG_FSPP_FILTER 0 -+#define CONFIG_GBLUR_FILTER 0 -+#define CONFIG_GBLUR_VULKAN_FILTER 0 -+#define CONFIG_GEQ_FILTER 0 -+#define CONFIG_GRADFUN_FILTER 0 -+#define CONFIG_GRAPHMONITOR_FILTER 0 -+#define CONFIG_GRAYWORLD_FILTER 0 -+#define CONFIG_GREYEDGE_FILTER 0 -+#define CONFIG_GUIDED_FILTER 0 -+#define CONFIG_HALDCLUT_FILTER 0 -+#define CONFIG_HFLIP_FILTER 0 -+#define CONFIG_HFLIP_VULKAN_FILTER 0 -+#define CONFIG_HISTEQ_FILTER 0 -+#define CONFIG_HISTOGRAM_FILTER 0 -+#define CONFIG_HQDN3D_FILTER 0 -+#define CONFIG_HQX_FILTER 0 -+#define CONFIG_HSTACK_FILTER 0 -+#define CONFIG_HSVHOLD_FILTER 0 -+#define CONFIG_HSVKEY_FILTER 0 -+#define CONFIG_HUE_FILTER 0 -+#define CONFIG_HUESATURATION_FILTER 0 -+#define CONFIG_HWDOWNLOAD_FILTER 0 -+#define CONFIG_HWMAP_FILTER 0 -+#define CONFIG_HWUPLOAD_FILTER 0 -+#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -+#define CONFIG_HYSTERESIS_FILTER 0 -+#define CONFIG_ICCDETECT_FILTER 0 -+#define CONFIG_ICCGEN_FILTER 0 -+#define CONFIG_IDENTITY_FILTER 0 -+#define CONFIG_IDET_FILTER 0 -+#define CONFIG_IL_FILTER 0 -+#define CONFIG_INFLATE_FILTER 0 -+#define CONFIG_INTERLACE_FILTER 0 -+#define CONFIG_INTERLEAVE_FILTER 0 -+#define CONFIG_KERNDEINT_FILTER 0 -+#define CONFIG_KIRSCH_FILTER 0 -+#define CONFIG_LAGFUN_FILTER 0 -+#define CONFIG_LATENCY_FILTER 0 -+#define CONFIG_LENSCORRECTION_FILTER 0 -+#define CONFIG_LENSFUN_FILTER 0 -+#define CONFIG_LIBPLACEBO_FILTER 0 -+#define CONFIG_LIBVMAF_FILTER 0 -+#define CONFIG_LIMITDIFF_FILTER 0 -+#define CONFIG_LIMITER_FILTER 0 -+#define CONFIG_LOOP_FILTER 0 -+#define CONFIG_LUMAKEY_FILTER 0 -+#define CONFIG_LUT_FILTER 0 -+#define CONFIG_LUT1D_FILTER 0 -+#define CONFIG_LUT2_FILTER 0 -+#define CONFIG_LUT3D_FILTER 0 -+#define CONFIG_LUTRGB_FILTER 0 -+#define CONFIG_LUTYUV_FILTER 0 -+#define CONFIG_MASKEDCLAMP_FILTER 0 -+#define CONFIG_MASKEDMAX_FILTER 0 -+#define CONFIG_MASKEDMERGE_FILTER 0 -+#define CONFIG_MASKEDMIN_FILTER 0 -+#define CONFIG_MASKEDTHRESHOLD_FILTER 0 -+#define CONFIG_MASKFUN_FILTER 0 -+#define CONFIG_MCDEINT_FILTER 0 -+#define CONFIG_MEDIAN_FILTER 0 -+#define CONFIG_MERGEPLANES_FILTER 0 -+#define CONFIG_MESTIMATE_FILTER 0 -+#define CONFIG_METADATA_FILTER 0 -+#define CONFIG_MIDEQUALIZER_FILTER 0 -+#define CONFIG_MINTERPOLATE_FILTER 0 -+#define CONFIG_MIX_FILTER 0 -+#define CONFIG_MONOCHROME_FILTER 0 -+#define CONFIG_MORPHO_FILTER 0 -+#define CONFIG_MPDECIMATE_FILTER 0 -+#define CONFIG_MSAD_FILTER 0 -+#define CONFIG_MULTIPLY_FILTER 0 -+#define CONFIG_NEGATE_FILTER 0 -+#define CONFIG_NLMEANS_FILTER 0 -+#define CONFIG_NLMEANS_OPENCL_FILTER 0 -+#define CONFIG_NNEDI_FILTER 0 -+#define CONFIG_NOFORMAT_FILTER 0 -+#define CONFIG_NOISE_FILTER 0 -+#define CONFIG_NORMALIZE_FILTER 0 -+#define CONFIG_NULL_FILTER 0 -+#define CONFIG_OCR_FILTER 0 -+#define CONFIG_OCV_FILTER 0 -+#define CONFIG_OSCILLOSCOPE_FILTER 0 -+#define CONFIG_OVERLAY_FILTER 0 -+#define CONFIG_OVERLAY_OPENCL_FILTER 0 -+#define CONFIG_OVERLAY_QSV_FILTER 0 -+#define CONFIG_OVERLAY_VAAPI_FILTER 0 -+#define CONFIG_OVERLAY_VULKAN_FILTER 0 -+#define CONFIG_OVERLAY_CUDA_FILTER 0 -+#define CONFIG_OWDENOISE_FILTER 0 -+#define CONFIG_PAD_FILTER 0 -+#define CONFIG_PAD_OPENCL_FILTER 0 -+#define CONFIG_PALETTEGEN_FILTER 0 -+#define CONFIG_PALETTEUSE_FILTER 0 -+#define CONFIG_PERMS_FILTER 0 -+#define CONFIG_PERSPECTIVE_FILTER 0 -+#define CONFIG_PHASE_FILTER 0 -+#define CONFIG_PHOTOSENSITIVITY_FILTER 0 -+#define CONFIG_PIXDESCTEST_FILTER 0 -+#define CONFIG_PIXELIZE_FILTER 0 -+#define CONFIG_PIXSCOPE_FILTER 0 -+#define CONFIG_PP_FILTER 0 -+#define CONFIG_PP7_FILTER 0 -+#define CONFIG_PREMULTIPLY_FILTER 0 -+#define CONFIG_PREWITT_FILTER 0 -+#define CONFIG_PREWITT_OPENCL_FILTER 0 -+#define CONFIG_PROCAMP_VAAPI_FILTER 0 -+#define CONFIG_PROGRAM_OPENCL_FILTER 0 -+#define CONFIG_PSEUDOCOLOR_FILTER 0 -+#define CONFIG_PSNR_FILTER 0 -+#define CONFIG_PULLUP_FILTER 0 -+#define CONFIG_QP_FILTER 0 -+#define CONFIG_RANDOM_FILTER 0 -+#define CONFIG_READEIA608_FILTER 0 -+#define CONFIG_READVITC_FILTER 0 -+#define CONFIG_REALTIME_FILTER 0 -+#define CONFIG_REMAP_FILTER 0 -+#define CONFIG_REMOVEGRAIN_FILTER 0 -+#define CONFIG_REMOVELOGO_FILTER 0 -+#define CONFIG_REPEATFIELDS_FILTER 0 -+#define CONFIG_REVERSE_FILTER 0 -+#define CONFIG_RGBASHIFT_FILTER 0 -+#define CONFIG_ROBERTS_FILTER 0 -+#define CONFIG_ROBERTS_OPENCL_FILTER 0 -+#define CONFIG_ROTATE_FILTER 0 -+#define CONFIG_SAB_FILTER 0 -+#define CONFIG_SCALE_FILTER 0 -+#define CONFIG_SCALE_CUDA_FILTER 0 -+#define CONFIG_SCALE_NPP_FILTER 0 -+#define CONFIG_SCALE_QSV_FILTER 0 -+#define CONFIG_SCALE_VAAPI_FILTER 0 -+#define CONFIG_SCALE_VULKAN_FILTER 0 -+#define CONFIG_SCALE2REF_FILTER 0 -+#define CONFIG_SCALE2REF_NPP_FILTER 0 -+#define CONFIG_SCDET_FILTER 0 -+#define CONFIG_SCHARR_FILTER 0 -+#define CONFIG_SCROLL_FILTER 0 -+#define CONFIG_SEGMENT_FILTER 0 -+#define CONFIG_SELECT_FILTER 0 -+#define CONFIG_SELECTIVECOLOR_FILTER 0 -+#define CONFIG_SENDCMD_FILTER 0 -+#define CONFIG_SEPARATEFIELDS_FILTER 0 -+#define CONFIG_SETDAR_FILTER 0 -+#define CONFIG_SETFIELD_FILTER 0 -+#define CONFIG_SETPARAMS_FILTER 0 -+#define CONFIG_SETPTS_FILTER 0 -+#define CONFIG_SETRANGE_FILTER 0 -+#define CONFIG_SETSAR_FILTER 0 -+#define CONFIG_SETTB_FILTER 0 -+#define CONFIG_SHARPEN_NPP_FILTER 0 -+#define CONFIG_SHARPNESS_VAAPI_FILTER 0 -+#define CONFIG_SHEAR_FILTER 0 -+#define CONFIG_SHOWINFO_FILTER 0 -+#define CONFIG_SHOWPALETTE_FILTER 0 -+#define CONFIG_SHUFFLEFRAMES_FILTER 0 -+#define CONFIG_SHUFFLEPIXELS_FILTER 0 -+#define CONFIG_SHUFFLEPLANES_FILTER 0 -+#define CONFIG_SIDEDATA_FILTER 0 -+#define CONFIG_SIGNALSTATS_FILTER 0 -+#define CONFIG_SIGNATURE_FILTER 0 -+#define CONFIG_SITI_FILTER 0 -+#define CONFIG_SMARTBLUR_FILTER 0 -+#define CONFIG_SOBEL_FILTER 0 -+#define CONFIG_SOBEL_OPENCL_FILTER 0 -+#define CONFIG_SPLIT_FILTER 0 -+#define CONFIG_SPP_FILTER 0 -+#define CONFIG_SR_FILTER 0 -+#define CONFIG_SSIM_FILTER 0 -+#define CONFIG_STEREO3D_FILTER 0 -+#define CONFIG_STREAMSELECT_FILTER 0 -+#define CONFIG_SUBTITLES_FILTER 0 -+#define CONFIG_SUPER2XSAI_FILTER 0 -+#define CONFIG_SWAPRECT_FILTER 0 -+#define CONFIG_SWAPUV_FILTER 0 -+#define CONFIG_TBLEND_FILTER 0 -+#define CONFIG_TELECINE_FILTER 0 -+#define CONFIG_THISTOGRAM_FILTER 0 -+#define CONFIG_THRESHOLD_FILTER 0 -+#define CONFIG_THUMBNAIL_FILTER 0 -+#define CONFIG_THUMBNAIL_CUDA_FILTER 0 -+#define CONFIG_TILE_FILTER 0 -+#define CONFIG_TINTERLACE_FILTER 0 -+#define CONFIG_TLUT2_FILTER 0 -+#define CONFIG_TMEDIAN_FILTER 0 -+#define CONFIG_TMIDEQUALIZER_FILTER 0 -+#define CONFIG_TMIX_FILTER 0 -+#define CONFIG_TONEMAP_FILTER 0 -+#define CONFIG_TONEMAP_OPENCL_FILTER 0 -+#define CONFIG_TONEMAP_VAAPI_FILTER 0 -+#define CONFIG_TPAD_FILTER 0 -+#define CONFIG_TRANSPOSE_FILTER 0 -+#define CONFIG_TRANSPOSE_NPP_FILTER 0 -+#define CONFIG_TRANSPOSE_OPENCL_FILTER 0 -+#define CONFIG_TRANSPOSE_VAAPI_FILTER 0 -+#define CONFIG_TRANSPOSE_VULKAN_FILTER 0 -+#define CONFIG_TRIM_FILTER 0 -+#define CONFIG_UNPREMULTIPLY_FILTER 0 -+#define CONFIG_UNSHARP_FILTER 0 -+#define CONFIG_UNSHARP_OPENCL_FILTER 0 -+#define CONFIG_UNTILE_FILTER 0 -+#define CONFIG_USPP_FILTER 0 -+#define CONFIG_V360_FILTER 0 -+#define CONFIG_VAGUEDENOISER_FILTER 0 -+#define CONFIG_VARBLUR_FILTER 0 -+#define CONFIG_VECTORSCOPE_FILTER 0 -+#define CONFIG_VFLIP_FILTER 0 -+#define CONFIG_VFLIP_VULKAN_FILTER 0 -+#define CONFIG_VFRDET_FILTER 0 -+#define CONFIG_VIBRANCE_FILTER 0 -+#define CONFIG_VIDSTABDETECT_FILTER 0 -+#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -+#define CONFIG_VIF_FILTER 0 -+#define CONFIG_VIGNETTE_FILTER 0 -+#define CONFIG_VMAFMOTION_FILTER 0 -+#define CONFIG_VPP_QSV_FILTER 0 -+#define CONFIG_VSTACK_FILTER 0 -+#define CONFIG_W3FDIF_FILTER 0 -+#define CONFIG_WAVEFORM_FILTER 0 -+#define CONFIG_WEAVE_FILTER 0 -+#define CONFIG_XBR_FILTER 0 -+#define CONFIG_XCORRELATE_FILTER 0 -+#define CONFIG_XFADE_FILTER 0 -+#define CONFIG_XFADE_OPENCL_FILTER 0 -+#define CONFIG_XMEDIAN_FILTER 0 -+#define CONFIG_XSTACK_FILTER 0 -+#define CONFIG_YADIF_FILTER 0 -+#define CONFIG_YADIF_CUDA_FILTER 0 -+#define CONFIG_YADIF_VIDEOTOOLBOX_FILTER 0 -+#define CONFIG_YAEPBLUR_FILTER 0 -+#define CONFIG_ZMQ_FILTER 0 -+#define CONFIG_ZOOMPAN_FILTER 0 -+#define CONFIG_ZSCALE_FILTER 0 -+#define CONFIG_ALLRGB_FILTER 0 -+#define CONFIG_ALLYUV_FILTER 0 -+#define CONFIG_CELLAUTO_FILTER 0 -+#define CONFIG_COLOR_FILTER 0 -+#define CONFIG_COLORCHART_FILTER 0 -+#define CONFIG_COLORSPECTRUM_FILTER 0 -+#define CONFIG_COREIMAGESRC_FILTER 0 -+#define CONFIG_FREI0R_SRC_FILTER 0 -+#define CONFIG_GRADIENTS_FILTER 0 -+#define CONFIG_HALDCLUTSRC_FILTER 0 -+#define CONFIG_LIFE_FILTER 0 -+#define CONFIG_MANDELBROT_FILTER 0 -+#define CONFIG_MPTESTSRC_FILTER 0 -+#define CONFIG_NULLSRC_FILTER 0 -+#define CONFIG_OPENCLSRC_FILTER 0 -+#define CONFIG_PAL75BARS_FILTER 0 -+#define CONFIG_PAL100BARS_FILTER 0 -+#define CONFIG_RGBTESTSRC_FILTER 0 -+#define CONFIG_SIERPINSKI_FILTER 0 -+#define CONFIG_SMPTEBARS_FILTER 0 -+#define CONFIG_SMPTEHDBARS_FILTER 0 -+#define CONFIG_TESTSRC_FILTER 0 -+#define CONFIG_TESTSRC2_FILTER 0 -+#define CONFIG_YUVTESTSRC_FILTER 0 -+#define CONFIG_NULLSINK_FILTER 0 -+#define CONFIG_ABITSCOPE_FILTER 0 -+#define CONFIG_ADRAWGRAPH_FILTER 0 -+#define CONFIG_AGRAPHMONITOR_FILTER 0 -+#define CONFIG_AHISTOGRAM_FILTER 0 -+#define CONFIG_APHASEMETER_FILTER 0 -+#define CONFIG_AVECTORSCOPE_FILTER 0 -+#define CONFIG_CONCAT_FILTER 0 -+#define CONFIG_SHOWCQT_FILTER 0 -+#define CONFIG_SHOWFREQS_FILTER 0 -+#define CONFIG_SHOWSPATIAL_FILTER 0 -+#define CONFIG_SHOWSPECTRUM_FILTER 0 -+#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -+#define CONFIG_SHOWVOLUME_FILTER 0 -+#define CONFIG_SHOWWAVES_FILTER 0 -+#define CONFIG_SHOWWAVESPIC_FILTER 0 -+#define CONFIG_SPECTRUMSYNTH_FILTER 0 -+#define CONFIG_AVSYNCTEST_FILTER 0 -+#define CONFIG_AMOVIE_FILTER 0 -+#define CONFIG_MOVIE_FILTER 0 -+#define CONFIG_AFIFO_FILTER 0 -+#define CONFIG_FIFO_FILTER 0 -+#define CONFIG_AA_DEMUXER 0 -+#define CONFIG_AAC_DEMUXER 0 -+#define CONFIG_AAX_DEMUXER 0 -+#define CONFIG_AC3_DEMUXER 0 -+#define CONFIG_ACE_DEMUXER 0 -+#define CONFIG_ACM_DEMUXER 0 -+#define CONFIG_ACT_DEMUXER 0 -+#define CONFIG_ADF_DEMUXER 0 -+#define CONFIG_ADP_DEMUXER 0 -+#define CONFIG_ADS_DEMUXER 0 -+#define CONFIG_ADX_DEMUXER 0 -+#define CONFIG_AEA_DEMUXER 0 -+#define CONFIG_AFC_DEMUXER 0 -+#define CONFIG_AIFF_DEMUXER 0 -+#define CONFIG_AIX_DEMUXER 0 -+#define CONFIG_ALP_DEMUXER 0 -+#define CONFIG_AMR_DEMUXER 0 -+#define CONFIG_AMRNB_DEMUXER 0 -+#define CONFIG_AMRWB_DEMUXER 0 -+#define CONFIG_ANM_DEMUXER 0 -+#define CONFIG_APC_DEMUXER 0 -+#define CONFIG_APE_DEMUXER 0 -+#define CONFIG_APM_DEMUXER 0 -+#define CONFIG_APNG_DEMUXER 0 -+#define CONFIG_APTX_DEMUXER 0 -+#define CONFIG_APTX_HD_DEMUXER 0 -+#define CONFIG_AQTITLE_DEMUXER 0 -+#define CONFIG_ARGO_ASF_DEMUXER 0 -+#define CONFIG_ARGO_BRP_DEMUXER 0 -+#define CONFIG_ARGO_CVG_DEMUXER 0 -+#define CONFIG_ASF_DEMUXER 0 -+#define CONFIG_ASF_O_DEMUXER 0 -+#define CONFIG_ASS_DEMUXER 0 -+#define CONFIG_AST_DEMUXER 0 -+#define CONFIG_AU_DEMUXER 0 -+#define CONFIG_AV1_DEMUXER 0 -+#define CONFIG_AVI_DEMUXER 0 -+#define CONFIG_AVISYNTH_DEMUXER 0 -+#define CONFIG_AVR_DEMUXER 0 -+#define CONFIG_AVS_DEMUXER 0 -+#define CONFIG_AVS2_DEMUXER 0 -+#define CONFIG_AVS3_DEMUXER 0 -+#define CONFIG_BETHSOFTVID_DEMUXER 0 -+#define CONFIG_BFI_DEMUXER 0 -+#define CONFIG_BINTEXT_DEMUXER 0 -+#define CONFIG_BINK_DEMUXER 0 -+#define CONFIG_BINKA_DEMUXER 0 -+#define CONFIG_BIT_DEMUXER 0 -+#define CONFIG_BITPACKED_DEMUXER 0 -+#define CONFIG_BMV_DEMUXER 0 -+#define CONFIG_BFSTM_DEMUXER 0 -+#define CONFIG_BRSTM_DEMUXER 0 -+#define CONFIG_BOA_DEMUXER 0 -+#define CONFIG_C93_DEMUXER 0 -+#define CONFIG_CAF_DEMUXER 0 -+#define CONFIG_CAVSVIDEO_DEMUXER 0 -+#define CONFIG_CDG_DEMUXER 0 -+#define CONFIG_CDXL_DEMUXER 0 -+#define CONFIG_CINE_DEMUXER 0 -+#define CONFIG_CODEC2_DEMUXER 0 -+#define CONFIG_CODEC2RAW_DEMUXER 0 -+#define CONFIG_CONCAT_DEMUXER 0 -+#define CONFIG_DASH_DEMUXER 0 -+#define CONFIG_DATA_DEMUXER 0 -+#define CONFIG_DAUD_DEMUXER 0 -+#define CONFIG_DCSTR_DEMUXER 0 -+#define CONFIG_DERF_DEMUXER 0 -+#define CONFIG_DFA_DEMUXER 0 -+#define CONFIG_DFPWM_DEMUXER 0 -+#define CONFIG_DHAV_DEMUXER 0 -+#define CONFIG_DIRAC_DEMUXER 0 -+#define CONFIG_DNXHD_DEMUXER 0 -+#define CONFIG_DSF_DEMUXER 0 -+#define CONFIG_DSICIN_DEMUXER 0 -+#define CONFIG_DSS_DEMUXER 0 -+#define CONFIG_DTS_DEMUXER 0 -+#define CONFIG_DTSHD_DEMUXER 0 -+#define CONFIG_DV_DEMUXER 0 -+#define CONFIG_DVBSUB_DEMUXER 0 -+#define CONFIG_DVBTXT_DEMUXER 0 -+#define CONFIG_DXA_DEMUXER 0 -+#define CONFIG_EA_DEMUXER 0 -+#define CONFIG_EA_CDATA_DEMUXER 0 -+#define CONFIG_EAC3_DEMUXER 0 -+#define CONFIG_EPAF_DEMUXER 0 -+#define CONFIG_FFMETADATA_DEMUXER 0 -+#define CONFIG_FILMSTRIP_DEMUXER 0 -+#define CONFIG_FITS_DEMUXER 0 -+#define CONFIG_FLAC_DEMUXER 0 -+#define CONFIG_FLIC_DEMUXER 0 -+#define CONFIG_FLV_DEMUXER 0 -+#define CONFIG_LIVE_FLV_DEMUXER 0 -+#define CONFIG_FOURXM_DEMUXER 0 -+#define CONFIG_FRM_DEMUXER 0 -+#define CONFIG_FSB_DEMUXER 0 -+#define CONFIG_FWSE_DEMUXER 0 -+#define CONFIG_G722_DEMUXER 0 -+#define CONFIG_G723_1_DEMUXER 0 -+#define CONFIG_G726_DEMUXER 0 -+#define CONFIG_G726LE_DEMUXER 0 -+#define CONFIG_G729_DEMUXER 0 -+#define CONFIG_GDV_DEMUXER 0 -+#define CONFIG_GENH_DEMUXER 0 -+#define CONFIG_GIF_DEMUXER 0 -+#define CONFIG_GSM_DEMUXER 0 -+#define CONFIG_GXF_DEMUXER 0 -+#define CONFIG_H261_DEMUXER 0 -+#define CONFIG_H263_DEMUXER 0 -+#define CONFIG_H264_DEMUXER 0 -+#define CONFIG_HCA_DEMUXER 0 -+#define CONFIG_HCOM_DEMUXER 0 -+#define CONFIG_HEVC_DEMUXER 0 -+#define CONFIG_HLS_DEMUXER 0 -+#define CONFIG_HNM_DEMUXER 0 -+#define CONFIG_ICO_DEMUXER 0 -+#define CONFIG_IDCIN_DEMUXER 0 -+#define CONFIG_IDF_DEMUXER 0 -+#define CONFIG_IFF_DEMUXER 0 -+#define CONFIG_IFV_DEMUXER 0 -+#define CONFIG_ILBC_DEMUXER 0 -+#define CONFIG_IMAGE2_DEMUXER 0 -+#define CONFIG_IMAGE2PIPE_DEMUXER 0 -+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -+#define CONFIG_IMF_DEMUXER 0 -+#define CONFIG_INGENIENT_DEMUXER 0 -+#define CONFIG_IPMOVIE_DEMUXER 0 -+#define CONFIG_IPU_DEMUXER 0 -+#define CONFIG_IRCAM_DEMUXER 0 -+#define CONFIG_ISS_DEMUXER 0 -+#define CONFIG_IV8_DEMUXER 0 -+#define CONFIG_IVF_DEMUXER 0 -+#define CONFIG_IVR_DEMUXER 0 -+#define CONFIG_JACOSUB_DEMUXER 0 -+#define CONFIG_JV_DEMUXER 0 -+#define CONFIG_KUX_DEMUXER 0 -+#define CONFIG_KVAG_DEMUXER 0 -+#define CONFIG_LMLM4_DEMUXER 0 -+#define CONFIG_LOAS_DEMUXER 0 -+#define CONFIG_LUODAT_DEMUXER 0 -+#define CONFIG_LRC_DEMUXER 0 -+#define CONFIG_LVF_DEMUXER 0 -+#define CONFIG_LXF_DEMUXER 0 -+#define CONFIG_M4V_DEMUXER 0 -+#define CONFIG_MCA_DEMUXER 0 -+#define CONFIG_MCC_DEMUXER 0 -+#define CONFIG_MATROSKA_DEMUXER 0 -+#define CONFIG_MGSTS_DEMUXER 0 -+#define CONFIG_MICRODVD_DEMUXER 0 -+#define CONFIG_MJPEG_DEMUXER 0 -+#define CONFIG_MJPEG_2000_DEMUXER 0 -+#define CONFIG_MLP_DEMUXER 0 -+#define CONFIG_MLV_DEMUXER 0 -+#define CONFIG_MM_DEMUXER 0 -+#define CONFIG_MMF_DEMUXER 0 -+#define CONFIG_MODS_DEMUXER 0 -+#define CONFIG_MOFLEX_DEMUXER 0 -+#define CONFIG_MOV_DEMUXER 0 -+#define CONFIG_MP3_DEMUXER 0 -+#define CONFIG_MPC_DEMUXER 0 -+#define CONFIG_MPC8_DEMUXER 0 -+#define CONFIG_MPEGPS_DEMUXER 0 -+#define CONFIG_MPEGTS_DEMUXER 0 -+#define CONFIG_MPEGTSRAW_DEMUXER 0 -+#define CONFIG_MPEGVIDEO_DEMUXER 0 -+#define CONFIG_MPJPEG_DEMUXER 0 -+#define CONFIG_MPL2_DEMUXER 0 -+#define CONFIG_MPSUB_DEMUXER 0 -+#define CONFIG_MSF_DEMUXER 0 -+#define CONFIG_MSNWC_TCP_DEMUXER 0 -+#define CONFIG_MSP_DEMUXER 0 -+#define CONFIG_MTAF_DEMUXER 0 -+#define CONFIG_MTV_DEMUXER 0 -+#define CONFIG_MUSX_DEMUXER 0 -+#define CONFIG_MV_DEMUXER 0 -+#define CONFIG_MVI_DEMUXER 0 -+#define CONFIG_MXF_DEMUXER 0 -+#define CONFIG_MXG_DEMUXER 0 -+#define CONFIG_NC_DEMUXER 0 -+#define CONFIG_NISTSPHERE_DEMUXER 0 -+#define CONFIG_NSP_DEMUXER 0 -+#define CONFIG_NSV_DEMUXER 0 -+#define CONFIG_NUT_DEMUXER 0 -+#define CONFIG_NUV_DEMUXER 0 -+#define CONFIG_OBU_DEMUXER 0 -+#define CONFIG_OGG_DEMUXER 0 -+#define CONFIG_OMA_DEMUXER 0 -+#define CONFIG_PAF_DEMUXER 0 -+#define CONFIG_PCM_ALAW_DEMUXER 0 -+#define CONFIG_PCM_MULAW_DEMUXER 0 -+#define CONFIG_PCM_VIDC_DEMUXER 0 -+#define CONFIG_PCM_F64BE_DEMUXER 0 -+#define CONFIG_PCM_F64LE_DEMUXER 0 -+#define CONFIG_PCM_F32BE_DEMUXER 0 -+#define CONFIG_PCM_F32LE_DEMUXER 0 -+#define CONFIG_PCM_S32BE_DEMUXER 0 -+#define CONFIG_PCM_S32LE_DEMUXER 0 -+#define CONFIG_PCM_S24BE_DEMUXER 0 -+#define CONFIG_PCM_S24LE_DEMUXER 0 -+#define CONFIG_PCM_S16BE_DEMUXER 0 -+#define CONFIG_PCM_S16LE_DEMUXER 0 -+#define CONFIG_PCM_S8_DEMUXER 0 -+#define CONFIG_PCM_U32BE_DEMUXER 0 -+#define CONFIG_PCM_U32LE_DEMUXER 0 -+#define CONFIG_PCM_U24BE_DEMUXER 0 -+#define CONFIG_PCM_U24LE_DEMUXER 0 -+#define CONFIG_PCM_U16BE_DEMUXER 0 -+#define CONFIG_PCM_U16LE_DEMUXER 0 -+#define CONFIG_PCM_U8_DEMUXER 0 -+#define CONFIG_PJS_DEMUXER 0 -+#define CONFIG_PMP_DEMUXER 0 -+#define CONFIG_PP_BNK_DEMUXER 0 -+#define CONFIG_PVA_DEMUXER 0 -+#define CONFIG_PVF_DEMUXER 0 -+#define CONFIG_QCP_DEMUXER 0 -+#define CONFIG_R3D_DEMUXER 0 -+#define CONFIG_RAWVIDEO_DEMUXER 0 -+#define CONFIG_REALTEXT_DEMUXER 0 -+#define CONFIG_REDSPARK_DEMUXER 0 -+#define CONFIG_RL2_DEMUXER 0 -+#define CONFIG_RM_DEMUXER 0 -+#define CONFIG_ROQ_DEMUXER 0 -+#define CONFIG_RPL_DEMUXER 0 -+#define CONFIG_RSD_DEMUXER 0 -+#define CONFIG_RSO_DEMUXER 0 -+#define CONFIG_RTP_DEMUXER 0 -+#define CONFIG_RTSP_DEMUXER 0 -+#define CONFIG_S337M_DEMUXER 0 -+#define CONFIG_SAMI_DEMUXER 0 -+#define CONFIG_SAP_DEMUXER 0 -+#define CONFIG_SBC_DEMUXER 0 -+#define CONFIG_SBG_DEMUXER 0 -+#define CONFIG_SCC_DEMUXER 0 -+#define CONFIG_SCD_DEMUXER 0 -+#define CONFIG_SDP_DEMUXER 0 -+#define CONFIG_SDR2_DEMUXER 0 -+#define CONFIG_SDS_DEMUXER 0 -+#define CONFIG_SDX_DEMUXER 0 -+#define CONFIG_SEGAFILM_DEMUXER 0 -+#define CONFIG_SER_DEMUXER 0 -+#define CONFIG_SGA_DEMUXER 0 -+#define CONFIG_SHORTEN_DEMUXER 0 -+#define CONFIG_SIFF_DEMUXER 0 -+#define CONFIG_SIMBIOSIS_IMX_DEMUXER 0 -+#define CONFIG_SLN_DEMUXER 0 -+#define CONFIG_SMACKER_DEMUXER 0 -+#define CONFIG_SMJPEG_DEMUXER 0 -+#define CONFIG_SMUSH_DEMUXER 0 -+#define CONFIG_SOL_DEMUXER 0 -+#define CONFIG_SOX_DEMUXER 0 -+#define CONFIG_SPDIF_DEMUXER 0 -+#define CONFIG_SRT_DEMUXER 0 -+#define CONFIG_STR_DEMUXER 0 -+#define CONFIG_STL_DEMUXER 0 -+#define CONFIG_SUBVIEWER1_DEMUXER 0 -+#define CONFIG_SUBVIEWER_DEMUXER 0 -+#define CONFIG_SUP_DEMUXER 0 -+#define CONFIG_SVAG_DEMUXER 0 -+#define CONFIG_SVS_DEMUXER 0 -+#define CONFIG_SWF_DEMUXER 0 -+#define CONFIG_TAK_DEMUXER 0 -+#define CONFIG_TEDCAPTIONS_DEMUXER 0 -+#define CONFIG_THP_DEMUXER 0 -+#define CONFIG_THREEDOSTR_DEMUXER 0 -+#define CONFIG_TIERTEXSEQ_DEMUXER 0 -+#define CONFIG_TMV_DEMUXER 0 -+#define CONFIG_TRUEHD_DEMUXER 0 -+#define CONFIG_TTA_DEMUXER 0 -+#define CONFIG_TXD_DEMUXER 0 -+#define CONFIG_TTY_DEMUXER 0 -+#define CONFIG_TY_DEMUXER 0 -+#define CONFIG_V210_DEMUXER 0 -+#define CONFIG_V210X_DEMUXER 0 -+#define CONFIG_VAG_DEMUXER 0 -+#define CONFIG_VC1_DEMUXER 0 -+#define CONFIG_VC1T_DEMUXER 0 -+#define CONFIG_VIVIDAS_DEMUXER 0 -+#define CONFIG_VIVO_DEMUXER 0 -+#define CONFIG_VMD_DEMUXER 0 -+#define CONFIG_VOBSUB_DEMUXER 0 -+#define CONFIG_VOC_DEMUXER 0 -+#define CONFIG_VPK_DEMUXER 0 -+#define CONFIG_VPLAYER_DEMUXER 0 -+#define CONFIG_VQF_DEMUXER 0 -+#define CONFIG_W64_DEMUXER 0 -+#define CONFIG_WAV_DEMUXER 0 -+#define CONFIG_WC3_DEMUXER 0 -+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -+#define CONFIG_WEBVTT_DEMUXER 0 -+#define CONFIG_WSAUD_DEMUXER 0 -+#define CONFIG_WSD_DEMUXER 0 -+#define CONFIG_WSVQA_DEMUXER 0 -+#define CONFIG_WTV_DEMUXER 0 -+#define CONFIG_WVE_DEMUXER 0 -+#define CONFIG_WV_DEMUXER 0 -+#define CONFIG_XA_DEMUXER 0 -+#define CONFIG_XBIN_DEMUXER 0 -+#define CONFIG_XMV_DEMUXER 0 -+#define CONFIG_XVAG_DEMUXER 0 -+#define CONFIG_XWMA_DEMUXER 0 -+#define CONFIG_YOP_DEMUXER 0 -+#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_CRI_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_GEM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_JPEGXL_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PGX_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PHOTOCD_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_QOI_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_VBN_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_XBM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 -+#define CONFIG_LIBGME_DEMUXER 0 -+#define CONFIG_LIBMODPLUG_DEMUXER 0 -+#define CONFIG_LIBOPENMPT_DEMUXER 0 -+#define CONFIG_VAPOURSYNTH_DEMUXER 0 -+#define CONFIG_A64_MUXER 0 -+#define CONFIG_AC3_MUXER 0 -+#define CONFIG_ADTS_MUXER 0 -+#define CONFIG_ADX_MUXER 0 -+#define CONFIG_AIFF_MUXER 0 -+#define CONFIG_ALP_MUXER 0 -+#define CONFIG_AMR_MUXER 0 -+#define CONFIG_AMV_MUXER 0 -+#define CONFIG_APM_MUXER 0 -+#define CONFIG_APNG_MUXER 0 -+#define CONFIG_APTX_MUXER 0 -+#define CONFIG_APTX_HD_MUXER 0 -+#define CONFIG_ARGO_ASF_MUXER 0 -+#define CONFIG_ARGO_CVG_MUXER 0 -+#define CONFIG_ASF_MUXER 0 -+#define CONFIG_ASS_MUXER 0 -+#define CONFIG_AST_MUXER 0 -+#define CONFIG_ASF_STREAM_MUXER 0 -+#define CONFIG_AU_MUXER 0 -+#define CONFIG_AVI_MUXER 0 -+#define CONFIG_AVIF_MUXER 0 -+#define CONFIG_AVM2_MUXER 0 -+#define CONFIG_AVS2_MUXER 0 -+#define CONFIG_AVS3_MUXER 0 -+#define CONFIG_BIT_MUXER 0 -+#define CONFIG_CAF_MUXER 0 -+#define CONFIG_CAVSVIDEO_MUXER 0 -+#define CONFIG_CODEC2_MUXER 0 -+#define CONFIG_CODEC2RAW_MUXER 0 -+#define CONFIG_CRC_MUXER 0 -+#define CONFIG_DASH_MUXER 0 -+#define CONFIG_DATA_MUXER 0 -+#define CONFIG_DAUD_MUXER 0 -+#define CONFIG_DFPWM_MUXER 0 -+#define CONFIG_DIRAC_MUXER 0 -+#define CONFIG_DNXHD_MUXER 0 -+#define CONFIG_DTS_MUXER 0 -+#define CONFIG_DV_MUXER 0 -+#define CONFIG_EAC3_MUXER 0 -+#define CONFIG_F4V_MUXER 0 -+#define CONFIG_FFMETADATA_MUXER 0 -+#define CONFIG_FIFO_MUXER 0 -+#define CONFIG_FIFO_TEST_MUXER 0 -+#define CONFIG_FILMSTRIP_MUXER 0 -+#define CONFIG_FITS_MUXER 0 -+#define CONFIG_FLAC_MUXER 0 -+#define CONFIG_FLV_MUXER 0 -+#define CONFIG_FRAMECRC_MUXER 0 -+#define CONFIG_FRAMEHASH_MUXER 0 -+#define CONFIG_FRAMEMD5_MUXER 0 -+#define CONFIG_G722_MUXER 0 -+#define CONFIG_G723_1_MUXER 0 -+#define CONFIG_G726_MUXER 0 -+#define CONFIG_G726LE_MUXER 0 -+#define CONFIG_GIF_MUXER 0 -+#define CONFIG_GSM_MUXER 0 -+#define CONFIG_GXF_MUXER 0 -+#define CONFIG_H261_MUXER 0 -+#define CONFIG_H263_MUXER 0 -+#define CONFIG_H264_MUXER 0 -+#define CONFIG_HASH_MUXER 0 -+#define CONFIG_HDS_MUXER 0 -+#define CONFIG_HEVC_MUXER 0 -+#define CONFIG_HLS_MUXER 0 -+#define CONFIG_ICO_MUXER 0 -+#define CONFIG_ILBC_MUXER 0 -+#define CONFIG_IMAGE2_MUXER 0 -+#define CONFIG_IMAGE2PIPE_MUXER 0 -+#define CONFIG_IPOD_MUXER 0 -+#define CONFIG_IRCAM_MUXER 0 -+#define CONFIG_ISMV_MUXER 0 -+#define CONFIG_IVF_MUXER 0 -+#define CONFIG_JACOSUB_MUXER 0 -+#define CONFIG_KVAG_MUXER 0 -+#define CONFIG_LATM_MUXER 0 -+#define CONFIG_LRC_MUXER 0 -+#define CONFIG_M4V_MUXER 0 -+#define CONFIG_MD5_MUXER 0 -+#define CONFIG_MATROSKA_MUXER 0 -+#define CONFIG_MATROSKA_AUDIO_MUXER 0 -+#define CONFIG_MICRODVD_MUXER 0 -+#define CONFIG_MJPEG_MUXER 0 -+#define CONFIG_MLP_MUXER 0 -+#define CONFIG_MMF_MUXER 0 -+#define CONFIG_MOV_MUXER 0 -+#define CONFIG_MP2_MUXER 0 -+#define CONFIG_MP3_MUXER 0 -+#define CONFIG_MP4_MUXER 0 -+#define CONFIG_MPEG1SYSTEM_MUXER 0 -+#define CONFIG_MPEG1VCD_MUXER 0 -+#define CONFIG_MPEG1VIDEO_MUXER 0 -+#define CONFIG_MPEG2DVD_MUXER 0 -+#define CONFIG_MPEG2SVCD_MUXER 0 -+#define CONFIG_MPEG2VIDEO_MUXER 0 -+#define CONFIG_MPEG2VOB_MUXER 0 -+#define CONFIG_MPEGTS_MUXER 0 -+#define CONFIG_MPJPEG_MUXER 0 -+#define CONFIG_MXF_MUXER 0 -+#define CONFIG_MXF_D10_MUXER 0 -+#define CONFIG_MXF_OPATOM_MUXER 0 -+#define CONFIG_NULL_MUXER 0 -+#define CONFIG_NUT_MUXER 0 -+#define CONFIG_OBU_MUXER 0 -+#define CONFIG_OGA_MUXER 0 -+#define CONFIG_OGG_MUXER 0 -+#define CONFIG_OGV_MUXER 0 -+#define CONFIG_OMA_MUXER 0 -+#define CONFIG_OPUS_MUXER 0 -+#define CONFIG_PCM_ALAW_MUXER 0 -+#define CONFIG_PCM_MULAW_MUXER 0 -+#define CONFIG_PCM_VIDC_MUXER 0 -+#define CONFIG_PCM_F64BE_MUXER 0 -+#define CONFIG_PCM_F64LE_MUXER 0 -+#define CONFIG_PCM_F32BE_MUXER 0 -+#define CONFIG_PCM_F32LE_MUXER 0 -+#define CONFIG_PCM_S32BE_MUXER 0 -+#define CONFIG_PCM_S32LE_MUXER 0 -+#define CONFIG_PCM_S24BE_MUXER 0 -+#define CONFIG_PCM_S24LE_MUXER 0 -+#define CONFIG_PCM_S16BE_MUXER 0 -+#define CONFIG_PCM_S16LE_MUXER 0 -+#define CONFIG_PCM_S8_MUXER 0 -+#define CONFIG_PCM_U32BE_MUXER 0 -+#define CONFIG_PCM_U32LE_MUXER 0 -+#define CONFIG_PCM_U24BE_MUXER 0 -+#define CONFIG_PCM_U24LE_MUXER 0 -+#define CONFIG_PCM_U16BE_MUXER 0 -+#define CONFIG_PCM_U16LE_MUXER 0 -+#define CONFIG_PCM_U8_MUXER 0 -+#define CONFIG_PSP_MUXER 0 -+#define CONFIG_RAWVIDEO_MUXER 0 -+#define CONFIG_RM_MUXER 0 -+#define CONFIG_ROQ_MUXER 0 -+#define CONFIG_RSO_MUXER 0 -+#define CONFIG_RTP_MUXER 0 -+#define CONFIG_RTP_MPEGTS_MUXER 0 -+#define CONFIG_RTSP_MUXER 0 -+#define CONFIG_SAP_MUXER 0 -+#define CONFIG_SBC_MUXER 0 -+#define CONFIG_SCC_MUXER 0 -+#define CONFIG_SEGAFILM_MUXER 0 -+#define CONFIG_SEGMENT_MUXER 0 -+#define CONFIG_STREAM_SEGMENT_MUXER 0 -+#define CONFIG_SMJPEG_MUXER 0 -+#define CONFIG_SMOOTHSTREAMING_MUXER 0 -+#define CONFIG_SOX_MUXER 0 -+#define CONFIG_SPX_MUXER 0 -+#define CONFIG_SPDIF_MUXER 0 -+#define CONFIG_SRT_MUXER 0 -+#define CONFIG_STREAMHASH_MUXER 0 -+#define CONFIG_SUP_MUXER 0 -+#define CONFIG_SWF_MUXER 0 -+#define CONFIG_TEE_MUXER 0 -+#define CONFIG_TG2_MUXER 0 -+#define CONFIG_TGP_MUXER 0 -+#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -+#define CONFIG_TRUEHD_MUXER 0 -+#define CONFIG_TTA_MUXER 0 -+#define CONFIG_TTML_MUXER 0 -+#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -+#define CONFIG_VC1_MUXER 0 -+#define CONFIG_VC1T_MUXER 0 -+#define CONFIG_VOC_MUXER 0 -+#define CONFIG_W64_MUXER 0 -+#define CONFIG_WAV_MUXER 0 -+#define CONFIG_WEBM_MUXER 0 -+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -+#define CONFIG_WEBM_CHUNK_MUXER 0 -+#define CONFIG_WEBP_MUXER 0 -+#define CONFIG_WEBVTT_MUXER 0 -+#define CONFIG_WSAUD_MUXER 0 -+#define CONFIG_WTV_MUXER 0 -+#define CONFIG_WV_MUXER 0 -+#define CONFIG_YUV4MPEGPIPE_MUXER 0 -+#define CONFIG_CHROMAPRINT_MUXER 0 -+#define CONFIG_ASYNC_PROTOCOL 0 -+#define CONFIG_BLURAY_PROTOCOL 0 -+#define CONFIG_CACHE_PROTOCOL 0 -+#define CONFIG_CONCAT_PROTOCOL 0 -+#define CONFIG_CONCATF_PROTOCOL 0 -+#define CONFIG_CRYPTO_PROTOCOL 0 -+#define CONFIG_DATA_PROTOCOL 0 -+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -+#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -+#define CONFIG_FILE_PROTOCOL 0 -+#define CONFIG_FTP_PROTOCOL 0 -+#define CONFIG_GOPHER_PROTOCOL 0 -+#define CONFIG_GOPHERS_PROTOCOL 0 -+#define CONFIG_HLS_PROTOCOL 0 -+#define CONFIG_HTTP_PROTOCOL 0 -+#define CONFIG_HTTPPROXY_PROTOCOL 0 -+#define CONFIG_HTTPS_PROTOCOL 0 -+#define CONFIG_ICECAST_PROTOCOL 0 -+#define CONFIG_MMSH_PROTOCOL 0 -+#define CONFIG_MMST_PROTOCOL 0 -+#define CONFIG_MD5_PROTOCOL 0 -+#define CONFIG_PIPE_PROTOCOL 0 -+#define CONFIG_PROMPEG_PROTOCOL 0 -+#define CONFIG_RTMP_PROTOCOL 0 -+#define CONFIG_RTMPE_PROTOCOL 0 -+#define CONFIG_RTMPS_PROTOCOL 0 -+#define CONFIG_RTMPT_PROTOCOL 0 -+#define CONFIG_RTMPTE_PROTOCOL 0 -+#define CONFIG_RTMPTS_PROTOCOL 0 -+#define CONFIG_RTP_PROTOCOL 0 -+#define CONFIG_SCTP_PROTOCOL 0 -+#define CONFIG_SRTP_PROTOCOL 0 -+#define CONFIG_SUBFILE_PROTOCOL 0 -+#define CONFIG_TEE_PROTOCOL 0 -+#define CONFIG_TCP_PROTOCOL 0 -+#define CONFIG_TLS_PROTOCOL 0 -+#define CONFIG_UDP_PROTOCOL 0 -+#define CONFIG_UDPLITE_PROTOCOL 0 -+#define CONFIG_UNIX_PROTOCOL 0 -+#define CONFIG_LIBAMQP_PROTOCOL 0 -+#define CONFIG_LIBRIST_PROTOCOL 0 -+#define CONFIG_LIBRTMP_PROTOCOL 0 -+#define CONFIG_LIBRTMPE_PROTOCOL 0 -+#define CONFIG_LIBRTMPS_PROTOCOL 0 -+#define CONFIG_LIBRTMPT_PROTOCOL 0 -+#define CONFIG_LIBRTMPTE_PROTOCOL 0 -+#define CONFIG_LIBSRT_PROTOCOL 0 -+#define CONFIG_LIBSSH_PROTOCOL 0 -+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 -+#define CONFIG_LIBZMQ_PROTOCOL 0 -+#define CONFIG_IPFS_PROTOCOL 0 -+#define CONFIG_IPNS_PROTOCOL 0 -+#endif /* FFMPEG_CONFIG_COMPONENTS_H */ -diff -Naur a/media/ffvpx/config_components_audio_video.h b/media/ffvpx/config_components_audio_video.h ---- a/media/ffvpx/config_components_audio_video.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_components_audio_video.h 2023-04-06 12:50:11.785664945 +0200 -@@ -0,0 +1,2091 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_COMPONENTS_H -+#define FFMPEG_CONFIG_COMPONENTS_H -+#define CONFIG_AAC_ADTSTOASC_BSF 0 -+#define CONFIG_AV1_FRAME_MERGE_BSF 0 -+#define CONFIG_AV1_FRAME_SPLIT_BSF 0 -+#define CONFIG_AV1_METADATA_BSF 0 -+#define CONFIG_CHOMP_BSF 0 -+#define CONFIG_DUMP_EXTRADATA_BSF 0 -+#define CONFIG_DCA_CORE_BSF 0 -+#define CONFIG_DV_ERROR_MARKER_BSF 0 -+#define CONFIG_EAC3_CORE_BSF 0 -+#define CONFIG_EXTRACT_EXTRADATA_BSF 0 -+#define CONFIG_FILTER_UNITS_BSF 0 -+#define CONFIG_H264_METADATA_BSF 0 -+#define CONFIG_H264_MP4TOANNEXB_BSF 0 -+#define CONFIG_H264_REDUNDANT_PPS_BSF 0 -+#define CONFIG_HAPQA_EXTRACT_BSF 0 -+#define CONFIG_HEVC_METADATA_BSF 0 -+#define CONFIG_HEVC_MP4TOANNEXB_BSF 0 -+#define CONFIG_IMX_DUMP_HEADER_BSF 0 -+#define CONFIG_MJPEG2JPEG_BSF 0 -+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 -+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 -+#define CONFIG_MPEG2_METADATA_BSF 0 -+#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 -+#define CONFIG_MOV2TEXTSUB_BSF 0 -+#define CONFIG_NOISE_BSF 0 -+#define CONFIG_NULL_BSF 0 -+#define CONFIG_OPUS_METADATA_BSF 0 -+#define CONFIG_PCM_RECHUNK_BSF 0 -+#define CONFIG_PGS_FRAME_MERGE_BSF 0 -+#define CONFIG_PRORES_METADATA_BSF 0 -+#define CONFIG_REMOVE_EXTRADATA_BSF 0 -+#define CONFIG_SETTS_BSF 0 -+#define CONFIG_TEXT2MOVSUB_BSF 0 -+#define CONFIG_TRACE_HEADERS_BSF 0 -+#define CONFIG_TRUEHD_CORE_BSF 0 -+#define CONFIG_VP9_METADATA_BSF 0 -+#define CONFIG_VP9_RAW_REORDER_BSF 0 -+#define CONFIG_VP9_SUPERFRAME_BSF 0 -+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 -+#define CONFIG_AASC_DECODER 0 -+#define CONFIG_AIC_DECODER 0 -+#define CONFIG_ALIAS_PIX_DECODER 0 -+#define CONFIG_AGM_DECODER 0 -+#define CONFIG_AMV_DECODER 0 -+#define CONFIG_ANM_DECODER 0 -+#define CONFIG_ANSI_DECODER 0 -+#define CONFIG_APNG_DECODER 0 -+#define CONFIG_ARBC_DECODER 0 -+#define CONFIG_ARGO_DECODER 0 -+#define CONFIG_ASV1_DECODER 0 -+#define CONFIG_ASV2_DECODER 0 -+#define CONFIG_AURA_DECODER 0 -+#define CONFIG_AURA2_DECODER 0 -+#define CONFIG_AVRP_DECODER 0 -+#define CONFIG_AVRN_DECODER 0 -+#define CONFIG_AVS_DECODER 0 -+#define CONFIG_AVUI_DECODER 0 -+#define CONFIG_AYUV_DECODER 0 -+#define CONFIG_BETHSOFTVID_DECODER 0 -+#define CONFIG_BFI_DECODER 0 -+#define CONFIG_BINK_DECODER 0 -+#define CONFIG_BITPACKED_DECODER 0 -+#define CONFIG_BMP_DECODER 0 -+#define CONFIG_BMV_VIDEO_DECODER 0 -+#define CONFIG_BRENDER_PIX_DECODER 0 -+#define CONFIG_C93_DECODER 0 -+#define CONFIG_CAVS_DECODER 0 -+#define CONFIG_CDGRAPHICS_DECODER 0 -+#define CONFIG_CDTOONS_DECODER 0 -+#define CONFIG_CDXL_DECODER 0 -+#define CONFIG_CFHD_DECODER 0 -+#define CONFIG_CINEPAK_DECODER 0 -+#define CONFIG_CLEARVIDEO_DECODER 0 -+#define CONFIG_CLJR_DECODER 0 -+#define CONFIG_CLLC_DECODER 0 -+#define CONFIG_COMFORTNOISE_DECODER 0 -+#define CONFIG_CPIA_DECODER 0 -+#define CONFIG_CRI_DECODER 0 -+#define CONFIG_CSCD_DECODER 0 -+#define CONFIG_CYUV_DECODER 0 -+#define CONFIG_DDS_DECODER 0 -+#define CONFIG_DFA_DECODER 0 -+#define CONFIG_DIRAC_DECODER 0 -+#define CONFIG_DNXHD_DECODER 0 -+#define CONFIG_DPX_DECODER 0 -+#define CONFIG_DSICINVIDEO_DECODER 0 -+#define CONFIG_DVAUDIO_DECODER 0 -+#define CONFIG_DVVIDEO_DECODER 0 -+#define CONFIG_DXA_DECODER 0 -+#define CONFIG_DXTORY_DECODER 0 -+#define CONFIG_DXV_DECODER 0 -+#define CONFIG_EACMV_DECODER 0 -+#define CONFIG_EAMAD_DECODER 0 -+#define CONFIG_EATGQ_DECODER 0 -+#define CONFIG_EATGV_DECODER 0 -+#define CONFIG_EATQI_DECODER 0 -+#define CONFIG_EIGHTBPS_DECODER 0 -+#define CONFIG_EIGHTSVX_EXP_DECODER 0 -+#define CONFIG_EIGHTSVX_FIB_DECODER 0 -+#define CONFIG_ESCAPE124_DECODER 0 -+#define CONFIG_ESCAPE130_DECODER 0 -+#define CONFIG_EXR_DECODER 0 -+#define CONFIG_FFV1_DECODER 0 -+#define CONFIG_FFVHUFF_DECODER 0 -+#define CONFIG_FIC_DECODER 0 -+#define CONFIG_FITS_DECODER 0 -+#define CONFIG_FLASHSV_DECODER 0 -+#define CONFIG_FLASHSV2_DECODER 0 -+#define CONFIG_FLIC_DECODER 0 -+#define CONFIG_FLV_DECODER 0 -+#define CONFIG_FMVC_DECODER 0 -+#define CONFIG_FOURXM_DECODER 0 -+#define CONFIG_FRAPS_DECODER 0 -+#define CONFIG_FRWU_DECODER 0 -+#define CONFIG_G2M_DECODER 0 -+#define CONFIG_GDV_DECODER 0 -+#define CONFIG_GEM_DECODER 0 -+#define CONFIG_GIF_DECODER 0 -+#define CONFIG_H261_DECODER 0 -+#define CONFIG_H263_DECODER 0 -+#define CONFIG_H263I_DECODER 0 -+#define CONFIG_H263P_DECODER 0 -+#define CONFIG_H263_V4L2M2M_DECODER 0 -+#define CONFIG_H264_DECODER 0 -+#define CONFIG_H264_CRYSTALHD_DECODER 0 -+#define CONFIG_H264_V4L2M2M_DECODER 0 -+#define CONFIG_H264_MEDIACODEC_DECODER 0 -+#define CONFIG_H264_MMAL_DECODER 0 -+#define CONFIG_H264_QSV_DECODER 0 -+#define CONFIG_H264_RKMPP_DECODER 0 -+#define CONFIG_HAP_DECODER 0 -+#define CONFIG_HEVC_DECODER 0 -+#define CONFIG_HEVC_QSV_DECODER 0 -+#define CONFIG_HEVC_RKMPP_DECODER 0 -+#define CONFIG_HEVC_V4L2M2M_DECODER 0 -+#define CONFIG_HNM4_VIDEO_DECODER 0 -+#define CONFIG_HQ_HQA_DECODER 0 -+#define CONFIG_HQX_DECODER 0 -+#define CONFIG_HUFFYUV_DECODER 0 -+#define CONFIG_HYMT_DECODER 0 -+#define CONFIG_IDCIN_DECODER 0 -+#define CONFIG_IFF_ILBM_DECODER 0 -+#define CONFIG_IMM4_DECODER 0 -+#define CONFIG_IMM5_DECODER 0 -+#define CONFIG_INDEO2_DECODER 0 -+#define CONFIG_INDEO3_DECODER 0 -+#define CONFIG_INDEO4_DECODER 0 -+#define CONFIG_INDEO5_DECODER 0 -+#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -+#define CONFIG_IPU_DECODER 0 -+#define CONFIG_JPEG2000_DECODER 0 -+#define CONFIG_JPEGLS_DECODER 0 -+#define CONFIG_JV_DECODER 0 -+#define CONFIG_KGV1_DECODER 0 -+#define CONFIG_KMVC_DECODER 0 -+#define CONFIG_LAGARITH_DECODER 0 -+#define CONFIG_LOCO_DECODER 0 -+#define CONFIG_LSCR_DECODER 0 -+#define CONFIG_M101_DECODER 0 -+#define CONFIG_MAGICYUV_DECODER 0 -+#define CONFIG_MDEC_DECODER 0 -+#define CONFIG_MIMIC_DECODER 0 -+#define CONFIG_MJPEG_DECODER 0 -+#define CONFIG_MJPEGB_DECODER 0 -+#define CONFIG_MMVIDEO_DECODER 0 -+#define CONFIG_MOBICLIP_DECODER 0 -+#define CONFIG_MOTIONPIXELS_DECODER 0 -+#define CONFIG_MPEG1VIDEO_DECODER 0 -+#define CONFIG_MPEG2VIDEO_DECODER 0 -+#define CONFIG_MPEG4_DECODER 0 -+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -+#define CONFIG_MPEG4_V4L2M2M_DECODER 0 -+#define CONFIG_MPEG4_MMAL_DECODER 0 -+#define CONFIG_MPEGVIDEO_DECODER 0 -+#define CONFIG_MPEG1_V4L2M2M_DECODER 0 -+#define CONFIG_MPEG2_MMAL_DECODER 0 -+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -+#define CONFIG_MPEG2_V4L2M2M_DECODER 0 -+#define CONFIG_MPEG2_QSV_DECODER 0 -+#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 -+#define CONFIG_MSA1_DECODER 0 -+#define CONFIG_MSCC_DECODER 0 -+#define CONFIG_MSMPEG4V1_DECODER 0 -+#define CONFIG_MSMPEG4V2_DECODER 0 -+#define CONFIG_MSMPEG4V3_DECODER 0 -+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -+#define CONFIG_MSP2_DECODER 0 -+#define CONFIG_MSRLE_DECODER 0 -+#define CONFIG_MSS1_DECODER 0 -+#define CONFIG_MSS2_DECODER 0 -+#define CONFIG_MSVIDEO1_DECODER 0 -+#define CONFIG_MSZH_DECODER 0 -+#define CONFIG_MTS2_DECODER 0 -+#define CONFIG_MV30_DECODER 0 -+#define CONFIG_MVC1_DECODER 0 -+#define CONFIG_MVC2_DECODER 0 -+#define CONFIG_MVDV_DECODER 0 -+#define CONFIG_MVHA_DECODER 0 -+#define CONFIG_MWSC_DECODER 0 -+#define CONFIG_MXPEG_DECODER 0 -+#define CONFIG_NOTCHLC_DECODER 0 -+#define CONFIG_NUV_DECODER 0 -+#define CONFIG_PAF_VIDEO_DECODER 0 -+#define CONFIG_PAM_DECODER 0 -+#define CONFIG_PBM_DECODER 0 -+#define CONFIG_PCX_DECODER 0 -+#define CONFIG_PFM_DECODER 0 -+#define CONFIG_PGM_DECODER 0 -+#define CONFIG_PGMYUV_DECODER 0 -+#define CONFIG_PGX_DECODER 0 -+#define CONFIG_PHOTOCD_DECODER 0 -+#define CONFIG_PICTOR_DECODER 0 -+#define CONFIG_PIXLET_DECODER 0 -+#define CONFIG_PNG_DECODER 0 -+#define CONFIG_PPM_DECODER 0 -+#define CONFIG_PRORES_DECODER 0 -+#define CONFIG_PROSUMER_DECODER 0 -+#define CONFIG_PSD_DECODER 0 -+#define CONFIG_PTX_DECODER 0 -+#define CONFIG_QDRAW_DECODER 0 -+#define CONFIG_QOI_DECODER 0 -+#define CONFIG_QPEG_DECODER 0 -+#define CONFIG_QTRLE_DECODER 0 -+#define CONFIG_R10K_DECODER 0 -+#define CONFIG_R210_DECODER 0 -+#define CONFIG_RASC_DECODER 0 -+#define CONFIG_RAWVIDEO_DECODER 0 -+#define CONFIG_RL2_DECODER 0 -+#define CONFIG_ROQ_DECODER 0 -+#define CONFIG_RPZA_DECODER 0 -+#define CONFIG_RSCC_DECODER 0 -+#define CONFIG_RV10_DECODER 0 -+#define CONFIG_RV20_DECODER 0 -+#define CONFIG_RV30_DECODER 0 -+#define CONFIG_RV40_DECODER 0 -+#define CONFIG_S302M_DECODER 0 -+#define CONFIG_SANM_DECODER 0 -+#define CONFIG_SCPR_DECODER 0 -+#define CONFIG_SCREENPRESSO_DECODER 0 -+#define CONFIG_SGA_DECODER 0 -+#define CONFIG_SGI_DECODER 0 -+#define CONFIG_SGIRLE_DECODER 0 -+#define CONFIG_SHEERVIDEO_DECODER 0 -+#define CONFIG_SIMBIOSIS_IMX_DECODER 0 -+#define CONFIG_SMACKER_DECODER 0 -+#define CONFIG_SMC_DECODER 0 -+#define CONFIG_SMVJPEG_DECODER 0 -+#define CONFIG_SNOW_DECODER 0 -+#define CONFIG_SP5X_DECODER 0 -+#define CONFIG_SPEEDHQ_DECODER 0 -+#define CONFIG_SPEEX_DECODER 0 -+#define CONFIG_SRGC_DECODER 0 -+#define CONFIG_SUNRAST_DECODER 0 -+#define CONFIG_SVQ1_DECODER 0 -+#define CONFIG_SVQ3_DECODER 0 -+#define CONFIG_TARGA_DECODER 0 -+#define CONFIG_TARGA_Y216_DECODER 0 -+#define CONFIG_TDSC_DECODER 0 -+#define CONFIG_THEORA_DECODER 0 -+#define CONFIG_THP_DECODER 0 -+#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -+#define CONFIG_TIFF_DECODER 0 -+#define CONFIG_TMV_DECODER 0 -+#define CONFIG_TRUEMOTION1_DECODER 0 -+#define CONFIG_TRUEMOTION2_DECODER 0 -+#define CONFIG_TRUEMOTION2RT_DECODER 0 -+#define CONFIG_TSCC_DECODER 0 -+#define CONFIG_TSCC2_DECODER 0 -+#define CONFIG_TXD_DECODER 0 -+#define CONFIG_ULTI_DECODER 0 -+#define CONFIG_UTVIDEO_DECODER 0 -+#define CONFIG_V210_DECODER 0 -+#define CONFIG_V210X_DECODER 0 -+#define CONFIG_V308_DECODER 0 -+#define CONFIG_V408_DECODER 0 -+#define CONFIG_V410_DECODER 0 -+#define CONFIG_VB_DECODER 0 -+#define CONFIG_VBN_DECODER 0 -+#define CONFIG_VBLE_DECODER 0 -+#define CONFIG_VC1_DECODER 0 -+#define CONFIG_VC1_CRYSTALHD_DECODER 0 -+#define CONFIG_VC1IMAGE_DECODER 0 -+#define CONFIG_VC1_MMAL_DECODER 0 -+#define CONFIG_VC1_QSV_DECODER 0 -+#define CONFIG_VC1_V4L2M2M_DECODER 0 -+#define CONFIG_VCR1_DECODER 0 -+#define CONFIG_VMDVIDEO_DECODER 0 -+#define CONFIG_VMNC_DECODER 0 -+#define CONFIG_VP3_DECODER 0 -+#define CONFIG_VP4_DECODER 0 -+#define CONFIG_VP5_DECODER 0 -+#define CONFIG_VP6_DECODER 0 -+#define CONFIG_VP6A_DECODER 0 -+#define CONFIG_VP6F_DECODER 0 -+#define CONFIG_VP7_DECODER 0 -+#define CONFIG_VP8_DECODER 1 -+#define CONFIG_VP8_RKMPP_DECODER 0 -+#define CONFIG_VP8_V4L2M2M_DECODER 0 -+#define CONFIG_VP9_DECODER 1 -+#define CONFIG_VP9_RKMPP_DECODER 0 -+#define CONFIG_VP9_V4L2M2M_DECODER 0 -+#define CONFIG_VQA_DECODER 0 -+#define CONFIG_WEBP_DECODER 0 -+#define CONFIG_WCMV_DECODER 0 -+#define CONFIG_WRAPPED_AVFRAME_DECODER 0 -+#define CONFIG_WMV1_DECODER 0 -+#define CONFIG_WMV2_DECODER 0 -+#define CONFIG_WMV3_DECODER 0 -+#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -+#define CONFIG_WMV3IMAGE_DECODER 0 -+#define CONFIG_WNV1_DECODER 0 -+#define CONFIG_XAN_WC3_DECODER 0 -+#define CONFIG_XAN_WC4_DECODER 0 -+#define CONFIG_XBM_DECODER 0 -+#define CONFIG_XFACE_DECODER 0 -+#define CONFIG_XL_DECODER 0 -+#define CONFIG_XPM_DECODER 0 -+#define CONFIG_XWD_DECODER 0 -+#define CONFIG_Y41P_DECODER 0 -+#define CONFIG_YLC_DECODER 0 -+#define CONFIG_YOP_DECODER 0 -+#define CONFIG_YUV4_DECODER 0 -+#define CONFIG_ZERO12V_DECODER 0 -+#define CONFIG_ZEROCODEC_DECODER 0 -+#define CONFIG_ZLIB_DECODER 0 -+#define CONFIG_ZMBV_DECODER 0 -+#define CONFIG_AAC_DECODER 0 -+#define CONFIG_AAC_FIXED_DECODER 0 -+#define CONFIG_AAC_LATM_DECODER 0 -+#define CONFIG_AC3_DECODER 0 -+#define CONFIG_AC3_FIXED_DECODER 0 -+#define CONFIG_ACELP_KELVIN_DECODER 0 -+#define CONFIG_ALAC_DECODER 0 -+#define CONFIG_ALS_DECODER 0 -+#define CONFIG_AMRNB_DECODER 0 -+#define CONFIG_AMRWB_DECODER 0 -+#define CONFIG_APE_DECODER 0 -+#define CONFIG_APTX_DECODER 0 -+#define CONFIG_APTX_HD_DECODER 0 -+#define CONFIG_ATRAC1_DECODER 0 -+#define CONFIG_ATRAC3_DECODER 0 -+#define CONFIG_ATRAC3AL_DECODER 0 -+#define CONFIG_ATRAC3P_DECODER 0 -+#define CONFIG_ATRAC3PAL_DECODER 0 -+#define CONFIG_ATRAC9_DECODER 0 -+#define CONFIG_BINKAUDIO_DCT_DECODER 0 -+#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -+#define CONFIG_BMV_AUDIO_DECODER 0 -+#define CONFIG_COOK_DECODER 0 -+#define CONFIG_DCA_DECODER 0 -+#define CONFIG_DFPWM_DECODER 0 -+#define CONFIG_DOLBY_E_DECODER 0 -+#define CONFIG_DSD_LSBF_DECODER 0 -+#define CONFIG_DSD_MSBF_DECODER 0 -+#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -+#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -+#define CONFIG_DSICINAUDIO_DECODER 0 -+#define CONFIG_DSS_SP_DECODER 0 -+#define CONFIG_DST_DECODER 0 -+#define CONFIG_EAC3_DECODER 0 -+#define CONFIG_EVRC_DECODER 0 -+#define CONFIG_FASTAUDIO_DECODER 0 -+#define CONFIG_FFWAVESYNTH_DECODER 0 -+#define CONFIG_FLAC_DECODER 1 -+#define CONFIG_G723_1_DECODER 0 -+#define CONFIG_G729_DECODER 0 -+#define CONFIG_GSM_DECODER 0 -+#define CONFIG_GSM_MS_DECODER 0 -+#define CONFIG_HCA_DECODER 0 -+#define CONFIG_HCOM_DECODER 0 -+#define CONFIG_IAC_DECODER 0 -+#define CONFIG_ILBC_DECODER 0 -+#define CONFIG_IMC_DECODER 0 -+#define CONFIG_INTERPLAY_ACM_DECODER 0 -+#define CONFIG_MACE3_DECODER 0 -+#define CONFIG_MACE6_DECODER 0 -+#define CONFIG_METASOUND_DECODER 0 -+#define CONFIG_MLP_DECODER 0 -+#define CONFIG_MP1_DECODER 0 -+#define CONFIG_MP1FLOAT_DECODER 0 -+#define CONFIG_MP2_DECODER 0 -+#define CONFIG_MP2FLOAT_DECODER 0 -+#define CONFIG_MP3FLOAT_DECODER 0 -+#define CONFIG_MP3_DECODER 1 -+#define CONFIG_MP3ADUFLOAT_DECODER 0 -+#define CONFIG_MP3ADU_DECODER 0 -+#define CONFIG_MP3ON4FLOAT_DECODER 0 -+#define CONFIG_MP3ON4_DECODER 0 -+#define CONFIG_MPC7_DECODER 0 -+#define CONFIG_MPC8_DECODER 0 -+#define CONFIG_MSNSIREN_DECODER 0 -+#define CONFIG_NELLYMOSER_DECODER 0 -+#define CONFIG_ON2AVC_DECODER 0 -+#define CONFIG_OPUS_DECODER 0 -+#define CONFIG_PAF_AUDIO_DECODER 0 -+#define CONFIG_QCELP_DECODER 0 -+#define CONFIG_QDM2_DECODER 0 -+#define CONFIG_QDMC_DECODER 0 -+#define CONFIG_RA_144_DECODER 0 -+#define CONFIG_RA_288_DECODER 0 -+#define CONFIG_RALF_DECODER 0 -+#define CONFIG_SBC_DECODER 0 -+#define CONFIG_SHORTEN_DECODER 0 -+#define CONFIG_SIPR_DECODER 0 -+#define CONFIG_SIREN_DECODER 0 -+#define CONFIG_SMACKAUD_DECODER 0 -+#define CONFIG_SONIC_DECODER 0 -+#define CONFIG_TAK_DECODER 0 -+#define CONFIG_TRUEHD_DECODER 0 -+#define CONFIG_TRUESPEECH_DECODER 0 -+#define CONFIG_TTA_DECODER 0 -+#define CONFIG_TWINVQ_DECODER 0 -+#define CONFIG_VMDAUDIO_DECODER 0 -+#define CONFIG_VORBIS_DECODER 0 -+#define CONFIG_WAVPACK_DECODER 0 -+#define CONFIG_WMALOSSLESS_DECODER 0 -+#define CONFIG_WMAPRO_DECODER 0 -+#define CONFIG_WMAV1_DECODER 0 -+#define CONFIG_WMAV2_DECODER 0 -+#define CONFIG_WMAVOICE_DECODER 0 -+#define CONFIG_WS_SND1_DECODER 0 -+#define CONFIG_XMA1_DECODER 0 -+#define CONFIG_XMA2_DECODER 0 -+#define CONFIG_PCM_ALAW_DECODER 0 -+#define CONFIG_PCM_BLURAY_DECODER 0 -+#define CONFIG_PCM_DVD_DECODER 0 -+#define CONFIG_PCM_F16LE_DECODER 0 -+#define CONFIG_PCM_F24LE_DECODER 0 -+#define CONFIG_PCM_F32BE_DECODER 0 -+#define CONFIG_PCM_F32LE_DECODER 0 -+#define CONFIG_PCM_F64BE_DECODER 0 -+#define CONFIG_PCM_F64LE_DECODER 0 -+#define CONFIG_PCM_LXF_DECODER 0 -+#define CONFIG_PCM_MULAW_DECODER 0 -+#define CONFIG_PCM_S8_DECODER 0 -+#define CONFIG_PCM_S8_PLANAR_DECODER 0 -+#define CONFIG_PCM_S16BE_DECODER 0 -+#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S16LE_DECODER 0 -+#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S24BE_DECODER 0 -+#define CONFIG_PCM_S24DAUD_DECODER 0 -+#define CONFIG_PCM_S24LE_DECODER 0 -+#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S32BE_DECODER 0 -+#define CONFIG_PCM_S32LE_DECODER 0 -+#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -+#define CONFIG_PCM_S64BE_DECODER 0 -+#define CONFIG_PCM_S64LE_DECODER 0 -+#define CONFIG_PCM_SGA_DECODER 0 -+#define CONFIG_PCM_U8_DECODER 0 -+#define CONFIG_PCM_U16BE_DECODER 0 -+#define CONFIG_PCM_U16LE_DECODER 0 -+#define CONFIG_PCM_U24BE_DECODER 0 -+#define CONFIG_PCM_U24LE_DECODER 0 -+#define CONFIG_PCM_U32BE_DECODER 0 -+#define CONFIG_PCM_U32LE_DECODER 0 -+#define CONFIG_PCM_VIDC_DECODER 0 -+#define CONFIG_DERF_DPCM_DECODER 0 -+#define CONFIG_GREMLIN_DPCM_DECODER 0 -+#define CONFIG_INTERPLAY_DPCM_DECODER 0 -+#define CONFIG_ROQ_DPCM_DECODER 0 -+#define CONFIG_SDX2_DPCM_DECODER 0 -+#define CONFIG_SOL_DPCM_DECODER 0 -+#define CONFIG_XAN_DPCM_DECODER 0 -+#define CONFIG_ADPCM_4XM_DECODER 0 -+#define CONFIG_ADPCM_ADX_DECODER 0 -+#define CONFIG_ADPCM_AFC_DECODER 0 -+#define CONFIG_ADPCM_AGM_DECODER 0 -+#define CONFIG_ADPCM_AICA_DECODER 0 -+#define CONFIG_ADPCM_ARGO_DECODER 0 -+#define CONFIG_ADPCM_CT_DECODER 0 -+#define CONFIG_ADPCM_DTK_DECODER 0 -+#define CONFIG_ADPCM_EA_DECODER 0 -+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -+#define CONFIG_ADPCM_EA_R1_DECODER 0 -+#define CONFIG_ADPCM_EA_R2_DECODER 0 -+#define CONFIG_ADPCM_EA_R3_DECODER 0 -+#define CONFIG_ADPCM_EA_XAS_DECODER 0 -+#define CONFIG_ADPCM_G722_DECODER 0 -+#define CONFIG_ADPCM_G726_DECODER 0 -+#define CONFIG_ADPCM_G726LE_DECODER 0 -+#define CONFIG_ADPCM_IMA_ACORN_DECODER 0 -+#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -+#define CONFIG_ADPCM_IMA_ALP_DECODER 0 -+#define CONFIG_ADPCM_IMA_APC_DECODER 0 -+#define CONFIG_ADPCM_IMA_APM_DECODER 0 -+#define CONFIG_ADPCM_IMA_CUNNING_DECODER 0 -+#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -+#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -+#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -+#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -+#define CONFIG_ADPCM_IMA_MOFLEX_DECODER 0 -+#define CONFIG_ADPCM_IMA_MTF_DECODER 0 -+#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -+#define CONFIG_ADPCM_IMA_QT_DECODER 0 -+#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -+#define CONFIG_ADPCM_IMA_SSI_DECODER 0 -+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -+#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -+#define CONFIG_ADPCM_IMA_WS_DECODER 0 -+#define CONFIG_ADPCM_MS_DECODER 0 -+#define CONFIG_ADPCM_MTAF_DECODER 0 -+#define CONFIG_ADPCM_PSX_DECODER 0 -+#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -+#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -+#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -+#define CONFIG_ADPCM_SWF_DECODER 0 -+#define CONFIG_ADPCM_THP_DECODER 0 -+#define CONFIG_ADPCM_THP_LE_DECODER 0 -+#define CONFIG_ADPCM_VIMA_DECODER 0 -+#define CONFIG_ADPCM_XA_DECODER 0 -+#define CONFIG_ADPCM_YAMAHA_DECODER 0 -+#define CONFIG_ADPCM_ZORK_DECODER 0 -+#define CONFIG_SSA_DECODER 0 -+#define CONFIG_ASS_DECODER 0 -+#define CONFIG_CCAPTION_DECODER 0 -+#define CONFIG_DVBSUB_DECODER 0 -+#define CONFIG_DVDSUB_DECODER 0 -+#define CONFIG_JACOSUB_DECODER 0 -+#define CONFIG_MICRODVD_DECODER 0 -+#define CONFIG_MOVTEXT_DECODER 0 -+#define CONFIG_MPL2_DECODER 0 -+#define CONFIG_PGSSUB_DECODER 0 -+#define CONFIG_PJS_DECODER 0 -+#define CONFIG_REALTEXT_DECODER 0 -+#define CONFIG_SAMI_DECODER 0 -+#define CONFIG_SRT_DECODER 0 -+#define CONFIG_STL_DECODER 0 -+#define CONFIG_SUBRIP_DECODER 0 -+#define CONFIG_SUBVIEWER_DECODER 0 -+#define CONFIG_SUBVIEWER1_DECODER 0 -+#define CONFIG_TEXT_DECODER 0 -+#define CONFIG_VPLAYER_DECODER 0 -+#define CONFIG_WEBVTT_DECODER 0 -+#define CONFIG_XSUB_DECODER 0 -+#define CONFIG_AAC_AT_DECODER 0 -+#define CONFIG_AC3_AT_DECODER 0 -+#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -+#define CONFIG_ALAC_AT_DECODER 0 -+#define CONFIG_AMR_NB_AT_DECODER 0 -+#define CONFIG_EAC3_AT_DECODER 0 -+#define CONFIG_GSM_MS_AT_DECODER 0 -+#define CONFIG_ILBC_AT_DECODER 0 -+#define CONFIG_MP1_AT_DECODER 0 -+#define CONFIG_MP2_AT_DECODER 0 -+#define CONFIG_MP3_AT_DECODER 0 -+#define CONFIG_PCM_ALAW_AT_DECODER 0 -+#define CONFIG_PCM_MULAW_AT_DECODER 0 -+#define CONFIG_QDMC_AT_DECODER 0 -+#define CONFIG_QDM2_AT_DECODER 0 -+#define CONFIG_LIBARIBB24_DECODER 0 -+#define CONFIG_LIBCELT_DECODER 0 -+#define CONFIG_LIBCODEC2_DECODER 0 -+#define CONFIG_LIBDAV1D_DECODER 1 -+#define CONFIG_LIBDAVS2_DECODER 0 -+#define CONFIG_LIBFDK_AAC_DECODER 0 -+#define CONFIG_LIBGSM_DECODER 0 -+#define CONFIG_LIBGSM_MS_DECODER 0 -+#define CONFIG_LIBILBC_DECODER 0 -+#define CONFIG_LIBJXL_DECODER 0 -+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -+#define CONFIG_LIBOPENJPEG_DECODER 0 -+#define CONFIG_LIBOPUS_DECODER 0 -+#define CONFIG_LIBRSVG_DECODER 0 -+#define CONFIG_LIBSPEEX_DECODER 0 -+#define CONFIG_LIBUAVS3D_DECODER 0 -+#define CONFIG_LIBVORBIS_DECODER 0 -+#define CONFIG_LIBVPX_VP8_DECODER 0 -+#define CONFIG_LIBVPX_VP9_DECODER 0 -+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -+#define CONFIG_BINTEXT_DECODER 0 -+#define CONFIG_XBIN_DECODER 0 -+#define CONFIG_IDF_DECODER 0 -+#define CONFIG_LIBAOM_AV1_DECODER 0 -+#define CONFIG_AV1_DECODER 1 -+#define CONFIG_AV1_CUVID_DECODER 0 -+#define CONFIG_AV1_QSV_DECODER 0 -+#define CONFIG_LIBOPENH264_DECODER 0 -+#define CONFIG_H264_CUVID_DECODER 0 -+#define CONFIG_HEVC_CUVID_DECODER 0 -+#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -+#define CONFIG_MJPEG_CUVID_DECODER 0 -+#define CONFIG_MJPEG_QSV_DECODER 0 -+#define CONFIG_MPEG1_CUVID_DECODER 0 -+#define CONFIG_MPEG2_CUVID_DECODER 0 -+#define CONFIG_MPEG4_CUVID_DECODER 0 -+#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -+#define CONFIG_VC1_CUVID_DECODER 0 -+#define CONFIG_VP8_CUVID_DECODER 0 -+#define CONFIG_VP8_MEDIACODEC_DECODER 0 -+#define CONFIG_VP8_QSV_DECODER 0 -+#define CONFIG_VP9_CUVID_DECODER 0 -+#define CONFIG_VP9_MEDIACODEC_DECODER 0 -+#define CONFIG_VP9_QSV_DECODER 0 -+#define CONFIG_A64MULTI_ENCODER 0 -+#define CONFIG_A64MULTI5_ENCODER 0 -+#define CONFIG_ALIAS_PIX_ENCODER 0 -+#define CONFIG_AMV_ENCODER 0 -+#define CONFIG_APNG_ENCODER 0 -+#define CONFIG_ASV1_ENCODER 0 -+#define CONFIG_ASV2_ENCODER 0 -+#define CONFIG_AVRP_ENCODER 0 -+#define CONFIG_AVUI_ENCODER 0 -+#define CONFIG_AYUV_ENCODER 0 -+#define CONFIG_BITPACKED_ENCODER 0 -+#define CONFIG_BMP_ENCODER 0 -+#define CONFIG_CFHD_ENCODER 0 -+#define CONFIG_CINEPAK_ENCODER 0 -+#define CONFIG_CLJR_ENCODER 0 -+#define CONFIG_COMFORTNOISE_ENCODER 0 -+#define CONFIG_DNXHD_ENCODER 0 -+#define CONFIG_DPX_ENCODER 0 -+#define CONFIG_DVVIDEO_ENCODER 0 -+#define CONFIG_EXR_ENCODER 0 -+#define CONFIG_FFV1_ENCODER 0 -+#define CONFIG_FFVHUFF_ENCODER 0 -+#define CONFIG_FITS_ENCODER 0 -+#define CONFIG_FLASHSV_ENCODER 0 -+#define CONFIG_FLASHSV2_ENCODER 0 -+#define CONFIG_FLV_ENCODER 0 -+#define CONFIG_GIF_ENCODER 0 -+#define CONFIG_H261_ENCODER 0 -+#define CONFIG_H263_ENCODER 0 -+#define CONFIG_H263P_ENCODER 0 -+#define CONFIG_HAP_ENCODER 0 -+#define CONFIG_HUFFYUV_ENCODER 0 -+#define CONFIG_JPEG2000_ENCODER 0 -+#define CONFIG_JPEGLS_ENCODER 0 -+#define CONFIG_LJPEG_ENCODER 0 -+#define CONFIG_MAGICYUV_ENCODER 0 -+#define CONFIG_MJPEG_ENCODER 0 -+#define CONFIG_MPEG1VIDEO_ENCODER 0 -+#define CONFIG_MPEG2VIDEO_ENCODER 0 -+#define CONFIG_MPEG4_ENCODER 0 -+#define CONFIG_MSMPEG4V2_ENCODER 0 -+#define CONFIG_MSMPEG4V3_ENCODER 0 -+#define CONFIG_MSVIDEO1_ENCODER 0 -+#define CONFIG_PAM_ENCODER 0 -+#define CONFIG_PBM_ENCODER 0 -+#define CONFIG_PCX_ENCODER 0 -+#define CONFIG_PFM_ENCODER 0 -+#define CONFIG_PGM_ENCODER 0 -+#define CONFIG_PGMYUV_ENCODER 0 -+#define CONFIG_PNG_ENCODER 0 -+#define CONFIG_PPM_ENCODER 0 -+#define CONFIG_PRORES_ENCODER 0 -+#define CONFIG_PRORES_AW_ENCODER 0 -+#define CONFIG_PRORES_KS_ENCODER 0 -+#define CONFIG_QOI_ENCODER 0 -+#define CONFIG_QTRLE_ENCODER 0 -+#define CONFIG_R10K_ENCODER 0 -+#define CONFIG_R210_ENCODER 0 -+#define CONFIG_RAWVIDEO_ENCODER 0 -+#define CONFIG_ROQ_ENCODER 0 -+#define CONFIG_RPZA_ENCODER 0 -+#define CONFIG_RV10_ENCODER 0 -+#define CONFIG_RV20_ENCODER 0 -+#define CONFIG_S302M_ENCODER 0 -+#define CONFIG_SGI_ENCODER 0 -+#define CONFIG_SMC_ENCODER 0 -+#define CONFIG_SNOW_ENCODER 0 -+#define CONFIG_SPEEDHQ_ENCODER 0 -+#define CONFIG_SUNRAST_ENCODER 0 -+#define CONFIG_SVQ1_ENCODER 0 -+#define CONFIG_TARGA_ENCODER 0 -+#define CONFIG_TIFF_ENCODER 0 -+#define CONFIG_UTVIDEO_ENCODER 0 -+#define CONFIG_V210_ENCODER 0 -+#define CONFIG_V308_ENCODER 0 -+#define CONFIG_V408_ENCODER 0 -+#define CONFIG_V410_ENCODER 0 -+#define CONFIG_VBN_ENCODER 0 -+#define CONFIG_VC2_ENCODER 0 -+#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -+#define CONFIG_WMV1_ENCODER 0 -+#define CONFIG_WMV2_ENCODER 0 -+#define CONFIG_XBM_ENCODER 0 -+#define CONFIG_XFACE_ENCODER 0 -+#define CONFIG_XWD_ENCODER 0 -+#define CONFIG_Y41P_ENCODER 0 -+#define CONFIG_YUV4_ENCODER 0 -+#define CONFIG_ZLIB_ENCODER 0 -+#define CONFIG_ZMBV_ENCODER 0 -+#define CONFIG_AAC_ENCODER 0 -+#define CONFIG_AC3_ENCODER 0 -+#define CONFIG_AC3_FIXED_ENCODER 0 -+#define CONFIG_ALAC_ENCODER 0 -+#define CONFIG_APTX_ENCODER 0 -+#define CONFIG_APTX_HD_ENCODER 0 -+#define CONFIG_DCA_ENCODER 0 -+#define CONFIG_DFPWM_ENCODER 0 -+#define CONFIG_EAC3_ENCODER 0 -+#define CONFIG_FLAC_ENCODER 0 -+#define CONFIG_G723_1_ENCODER 0 -+#define CONFIG_MLP_ENCODER 0 -+#define CONFIG_MP2_ENCODER 0 -+#define CONFIG_MP2FIXED_ENCODER 0 -+#define CONFIG_NELLYMOSER_ENCODER 0 -+#define CONFIG_OPUS_ENCODER 0 -+#define CONFIG_RA_144_ENCODER 0 -+#define CONFIG_SBC_ENCODER 0 -+#define CONFIG_SONIC_ENCODER 0 -+#define CONFIG_SONIC_LS_ENCODER 0 -+#define CONFIG_TRUEHD_ENCODER 0 -+#define CONFIG_TTA_ENCODER 0 -+#define CONFIG_VORBIS_ENCODER 0 -+#define CONFIG_WAVPACK_ENCODER 0 -+#define CONFIG_WMAV1_ENCODER 0 -+#define CONFIG_WMAV2_ENCODER 0 -+#define CONFIG_PCM_ALAW_ENCODER 0 -+#define CONFIG_PCM_BLURAY_ENCODER 0 -+#define CONFIG_PCM_DVD_ENCODER 0 -+#define CONFIG_PCM_F32BE_ENCODER 0 -+#define CONFIG_PCM_F32LE_ENCODER 0 -+#define CONFIG_PCM_F64BE_ENCODER 0 -+#define CONFIG_PCM_F64LE_ENCODER 0 -+#define CONFIG_PCM_MULAW_ENCODER 0 -+#define CONFIG_PCM_S8_ENCODER 0 -+#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S16BE_ENCODER 0 -+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S16LE_ENCODER 0 -+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S24BE_ENCODER 0 -+#define CONFIG_PCM_S24DAUD_ENCODER 0 -+#define CONFIG_PCM_S24LE_ENCODER 0 -+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S32BE_ENCODER 0 -+#define CONFIG_PCM_S32LE_ENCODER 0 -+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -+#define CONFIG_PCM_S64BE_ENCODER 0 -+#define CONFIG_PCM_S64LE_ENCODER 0 -+#define CONFIG_PCM_U8_ENCODER 0 -+#define CONFIG_PCM_U16BE_ENCODER 0 -+#define CONFIG_PCM_U16LE_ENCODER 0 -+#define CONFIG_PCM_U24BE_ENCODER 0 -+#define CONFIG_PCM_U24LE_ENCODER 0 -+#define CONFIG_PCM_U32BE_ENCODER 0 -+#define CONFIG_PCM_U32LE_ENCODER 0 -+#define CONFIG_PCM_VIDC_ENCODER 0 -+#define CONFIG_ROQ_DPCM_ENCODER 0 -+#define CONFIG_ADPCM_ADX_ENCODER 0 -+#define CONFIG_ADPCM_ARGO_ENCODER 0 -+#define CONFIG_ADPCM_G722_ENCODER 0 -+#define CONFIG_ADPCM_G726_ENCODER 0 -+#define CONFIG_ADPCM_G726LE_ENCODER 0 -+#define CONFIG_ADPCM_IMA_AMV_ENCODER 0 -+#define CONFIG_ADPCM_IMA_ALP_ENCODER 0 -+#define CONFIG_ADPCM_IMA_APM_ENCODER 0 -+#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -+#define CONFIG_ADPCM_IMA_SSI_ENCODER 0 -+#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -+#define CONFIG_ADPCM_IMA_WS_ENCODER 0 -+#define CONFIG_ADPCM_MS_ENCODER 0 -+#define CONFIG_ADPCM_SWF_ENCODER 0 -+#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -+#define CONFIG_SSA_ENCODER 0 -+#define CONFIG_ASS_ENCODER 0 -+#define CONFIG_DVBSUB_ENCODER 0 -+#define CONFIG_DVDSUB_ENCODER 0 -+#define CONFIG_MOVTEXT_ENCODER 0 -+#define CONFIG_SRT_ENCODER 0 -+#define CONFIG_SUBRIP_ENCODER 0 -+#define CONFIG_TEXT_ENCODER 0 -+#define CONFIG_TTML_ENCODER 0 -+#define CONFIG_WEBVTT_ENCODER 0 -+#define CONFIG_XSUB_ENCODER 0 -+#define CONFIG_AAC_AT_ENCODER 0 -+#define CONFIG_ALAC_AT_ENCODER 0 -+#define CONFIG_ILBC_AT_ENCODER 0 -+#define CONFIG_PCM_ALAW_AT_ENCODER 0 -+#define CONFIG_PCM_MULAW_AT_ENCODER 0 -+#define CONFIG_LIBAOM_AV1_ENCODER 0 -+#define CONFIG_LIBCODEC2_ENCODER 0 -+#define CONFIG_LIBFDK_AAC_ENCODER 0 -+#define CONFIG_LIBGSM_ENCODER 0 -+#define CONFIG_LIBGSM_MS_ENCODER 0 -+#define CONFIG_LIBILBC_ENCODER 0 -+#define CONFIG_LIBJXL_ENCODER 0 -+#define CONFIG_LIBMP3LAME_ENCODER 0 -+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -+#define CONFIG_LIBOPENJPEG_ENCODER 0 -+#define CONFIG_LIBOPUS_ENCODER 0 -+#define CONFIG_LIBRAV1E_ENCODER 0 -+#define CONFIG_LIBSHINE_ENCODER 0 -+#define CONFIG_LIBSPEEX_ENCODER 0 -+#define CONFIG_LIBSVTAV1_ENCODER 0 -+#define CONFIG_LIBTHEORA_ENCODER 0 -+#define CONFIG_LIBTWOLAME_ENCODER 0 -+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -+#define CONFIG_LIBVORBIS_ENCODER 0 -+#define CONFIG_LIBVPX_VP8_ENCODER 0 -+#define CONFIG_LIBVPX_VP9_ENCODER 0 -+#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -+#define CONFIG_LIBWEBP_ENCODER 0 -+#define CONFIG_LIBX262_ENCODER 0 -+#define CONFIG_LIBX264_ENCODER 0 -+#define CONFIG_LIBX264RGB_ENCODER 0 -+#define CONFIG_LIBX265_ENCODER 0 -+#define CONFIG_LIBXAVS_ENCODER 0 -+#define CONFIG_LIBXAVS2_ENCODER 0 -+#define CONFIG_LIBXVID_ENCODER 0 -+#define CONFIG_AAC_MF_ENCODER 0 -+#define CONFIG_AC3_MF_ENCODER 0 -+#define CONFIG_H263_V4L2M2M_ENCODER 0 -+#define CONFIG_LIBOPENH264_ENCODER 0 -+#define CONFIG_H264_AMF_ENCODER 0 -+#define CONFIG_H264_MF_ENCODER 0 -+#define CONFIG_H264_NVENC_ENCODER 0 -+#define CONFIG_H264_OMX_ENCODER 0 -+#define CONFIG_H264_QSV_ENCODER 0 -+#define CONFIG_H264_V4L2M2M_ENCODER 0 -+#define CONFIG_H264_VAAPI_ENCODER 0 -+#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -+#define CONFIG_HEVC_AMF_ENCODER 0 -+#define CONFIG_HEVC_MF_ENCODER 0 -+#define CONFIG_HEVC_NVENC_ENCODER 0 -+#define CONFIG_HEVC_QSV_ENCODER 0 -+#define CONFIG_HEVC_V4L2M2M_ENCODER 0 -+#define CONFIG_HEVC_VAAPI_ENCODER 0 -+#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 -+#define CONFIG_LIBKVAZAAR_ENCODER 0 -+#define CONFIG_MJPEG_QSV_ENCODER 0 -+#define CONFIG_MJPEG_VAAPI_ENCODER 0 -+#define CONFIG_MP3_MF_ENCODER 0 -+#define CONFIG_MPEG2_QSV_ENCODER 0 -+#define CONFIG_MPEG2_VAAPI_ENCODER 0 -+#define CONFIG_MPEG4_OMX_ENCODER 0 -+#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 -+#define CONFIG_PRORES_VIDEOTOOLBOX_ENCODER 0 -+#define CONFIG_VP8_V4L2M2M_ENCODER 0 -+#define CONFIG_VP8_VAAPI_ENCODER 0 -+#define CONFIG_VP9_VAAPI_ENCODER 0 -+#define CONFIG_VP9_QSV_ENCODER 0 -+#define CONFIG_AV1_D3D11VA_HWACCEL 0 -+#define CONFIG_AV1_D3D11VA2_HWACCEL 0 -+#define CONFIG_AV1_DXVA2_HWACCEL 0 -+#define CONFIG_AV1_NVDEC_HWACCEL 0 -+#define CONFIG_AV1_VAAPI_HWACCEL 0 -+#define CONFIG_AV1_VDPAU_HWACCEL 0 -+#define CONFIG_H263_VAAPI_HWACCEL 0 -+#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_H264_D3D11VA_HWACCEL 0 -+#define CONFIG_H264_D3D11VA2_HWACCEL 0 -+#define CONFIG_H264_DXVA2_HWACCEL 0 -+#define CONFIG_H264_NVDEC_HWACCEL 0 -+#define CONFIG_H264_VAAPI_HWACCEL 0 -+#define CONFIG_H264_VDPAU_HWACCEL 0 -+#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -+#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 -+#define CONFIG_HEVC_DXVA2_HWACCEL 0 -+#define CONFIG_HEVC_NVDEC_HWACCEL 0 -+#define CONFIG_HEVC_VAAPI_HWACCEL 0 -+#define CONFIG_HEVC_VDPAU_HWACCEL 0 -+#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_MJPEG_NVDEC_HWACCEL 0 -+#define CONFIG_MJPEG_VAAPI_HWACCEL 0 -+#define CONFIG_MPEG1_NVDEC_HWACCEL 0 -+#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -+#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -+#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 -+#define CONFIG_MPEG2_NVDEC_HWACCEL 0 -+#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -+#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -+#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -+#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_MPEG4_NVDEC_HWACCEL 0 -+#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -+#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -+#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_PRORES_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_VC1_D3D11VA_HWACCEL 0 -+#define CONFIG_VC1_D3D11VA2_HWACCEL 0 -+#define CONFIG_VC1_DXVA2_HWACCEL 0 -+#define CONFIG_VC1_NVDEC_HWACCEL 0 -+#define CONFIG_VC1_VAAPI_HWACCEL 0 -+#define CONFIG_VC1_VDPAU_HWACCEL 0 -+#define CONFIG_VP8_NVDEC_HWACCEL 0 -+#define CONFIG_VP8_VAAPI_HWACCEL 0 -+#define CONFIG_VP9_D3D11VA_HWACCEL 0 -+#define CONFIG_VP9_D3D11VA2_HWACCEL 0 -+#define CONFIG_VP9_DXVA2_HWACCEL 0 -+#define CONFIG_VP9_NVDEC_HWACCEL 0 -+#define CONFIG_VP9_VAAPI_HWACCEL 0 -+#define CONFIG_VP9_VDPAU_HWACCEL 0 -+#define CONFIG_VP9_VIDEOTOOLBOX_HWACCEL 0 -+#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -+#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 -+#define CONFIG_WMV3_DXVA2_HWACCEL 0 -+#define CONFIG_WMV3_NVDEC_HWACCEL 0 -+#define CONFIG_WMV3_VAAPI_HWACCEL 0 -+#define CONFIG_WMV3_VDPAU_HWACCEL 0 -+#define CONFIG_AAC_PARSER 0 -+#define CONFIG_AAC_LATM_PARSER 0 -+#define CONFIG_AC3_PARSER 0 -+#define CONFIG_ADX_PARSER 0 -+#define CONFIG_AMR_PARSER 0 -+#define CONFIG_AV1_PARSER 0 -+#define CONFIG_AVS2_PARSER 0 -+#define CONFIG_AVS3_PARSER 0 -+#define CONFIG_BMP_PARSER 0 -+#define CONFIG_CAVSVIDEO_PARSER 0 -+#define CONFIG_COOK_PARSER 0 -+#define CONFIG_CRI_PARSER 0 -+#define CONFIG_DCA_PARSER 0 -+#define CONFIG_DIRAC_PARSER 0 -+#define CONFIG_DNXHD_PARSER 0 -+#define CONFIG_DOLBY_E_PARSER 0 -+#define CONFIG_DPX_PARSER 0 -+#define CONFIG_DVAUDIO_PARSER 0 -+#define CONFIG_DVBSUB_PARSER 0 -+#define CONFIG_DVDSUB_PARSER 0 -+#define CONFIG_DVD_NAV_PARSER 0 -+#define CONFIG_FLAC_PARSER 0 -+#define CONFIG_G723_1_PARSER 0 -+#define CONFIG_G729_PARSER 0 -+#define CONFIG_GIF_PARSER 0 -+#define CONFIG_GSM_PARSER 0 -+#define CONFIG_H261_PARSER 0 -+#define CONFIG_H263_PARSER 0 -+#define CONFIG_H264_PARSER 0 -+#define CONFIG_HEVC_PARSER 0 -+#define CONFIG_IPU_PARSER 0 -+#define CONFIG_JPEG2000_PARSER 0 -+#define CONFIG_MJPEG_PARSER 0 -+#define CONFIG_MLP_PARSER 0 -+#define CONFIG_MPEG4VIDEO_PARSER 0 -+#define CONFIG_MPEGAUDIO_PARSER 0 -+#define CONFIG_MPEGVIDEO_PARSER 0 -+#define CONFIG_OPUS_PARSER 0 -+#define CONFIG_PNG_PARSER 0 -+#define CONFIG_PNM_PARSER 0 -+#define CONFIG_QOI_PARSER 0 -+#define CONFIG_RV30_PARSER 0 -+#define CONFIG_RV40_PARSER 0 -+#define CONFIG_SBC_PARSER 0 -+#define CONFIG_SIPR_PARSER 0 -+#define CONFIG_TAK_PARSER 0 -+#define CONFIG_VC1_PARSER 0 -+#define CONFIG_VORBIS_PARSER 0 -+#define CONFIG_VP3_PARSER 0 -+#define CONFIG_VP8_PARSER 1 -+#define CONFIG_VP9_PARSER 1 -+#define CONFIG_WEBP_PARSER 0 -+#define CONFIG_XBM_PARSER 0 -+#define CONFIG_XMA_PARSER 0 -+#define CONFIG_ALSA_INDEV 0 -+#define CONFIG_ANDROID_CAMERA_INDEV 0 -+#define CONFIG_AVFOUNDATION_INDEV 0 -+#define CONFIG_BKTR_INDEV 0 -+#define CONFIG_DECKLINK_INDEV 0 -+#define CONFIG_DSHOW_INDEV 0 -+#define CONFIG_FBDEV_INDEV 0 -+#define CONFIG_GDIGRAB_INDEV 0 -+#define CONFIG_IEC61883_INDEV 0 -+#define CONFIG_JACK_INDEV 0 -+#define CONFIG_KMSGRAB_INDEV 0 -+#define CONFIG_LAVFI_INDEV 0 -+#define CONFIG_OPENAL_INDEV 0 -+#define CONFIG_OSS_INDEV 0 -+#define CONFIG_PULSE_INDEV 0 -+#define CONFIG_SNDIO_INDEV 0 -+#define CONFIG_V4L2_INDEV 0 -+#define CONFIG_VFWCAP_INDEV 0 -+#define CONFIG_XCBGRAB_INDEV 0 -+#define CONFIG_LIBCDIO_INDEV 0 -+#define CONFIG_LIBDC1394_INDEV 0 -+#define CONFIG_ALSA_OUTDEV 0 -+#define CONFIG_AUDIOTOOLBOX_OUTDEV 0 -+#define CONFIG_CACA_OUTDEV 0 -+#define CONFIG_DECKLINK_OUTDEV 0 -+#define CONFIG_FBDEV_OUTDEV 0 -+#define CONFIG_OPENGL_OUTDEV 0 -+#define CONFIG_OSS_OUTDEV 0 -+#define CONFIG_PULSE_OUTDEV 0 -+#define CONFIG_SDL2_OUTDEV 0 -+#define CONFIG_SNDIO_OUTDEV 0 -+#define CONFIG_V4L2_OUTDEV 0 -+#define CONFIG_XV_OUTDEV 0 -+#define CONFIG_ABENCH_FILTER 0 -+#define CONFIG_ACOMPRESSOR_FILTER 0 -+#define CONFIG_ACONTRAST_FILTER 0 -+#define CONFIG_ACOPY_FILTER 0 -+#define CONFIG_ACUE_FILTER 0 -+#define CONFIG_ACROSSFADE_FILTER 0 -+#define CONFIG_ACROSSOVER_FILTER 0 -+#define CONFIG_ACRUSHER_FILTER 0 -+#define CONFIG_ADECLICK_FILTER 0 -+#define CONFIG_ADECLIP_FILTER 0 -+#define CONFIG_ADECORRELATE_FILTER 0 -+#define CONFIG_ADELAY_FILTER 0 -+#define CONFIG_ADENORM_FILTER 0 -+#define CONFIG_ADERIVATIVE_FILTER 0 -+#define CONFIG_ADYNAMICEQUALIZER_FILTER 0 -+#define CONFIG_ADYNAMICSMOOTH_FILTER 0 -+#define CONFIG_AECHO_FILTER 0 -+#define CONFIG_AEMPHASIS_FILTER 0 -+#define CONFIG_AEVAL_FILTER 0 -+#define CONFIG_AEXCITER_FILTER 0 -+#define CONFIG_AFADE_FILTER 0 -+#define CONFIG_AFFTDN_FILTER 0 -+#define CONFIG_AFFTFILT_FILTER 0 -+#define CONFIG_AFIR_FILTER 0 -+#define CONFIG_AFORMAT_FILTER 0 -+#define CONFIG_AFREQSHIFT_FILTER 0 -+#define CONFIG_AFWTDN_FILTER 0 -+#define CONFIG_AGATE_FILTER 0 -+#define CONFIG_AIIR_FILTER 0 -+#define CONFIG_AINTEGRAL_FILTER 0 -+#define CONFIG_AINTERLEAVE_FILTER 0 -+#define CONFIG_ALATENCY_FILTER 0 -+#define CONFIG_ALIMITER_FILTER 0 -+#define CONFIG_ALLPASS_FILTER 0 -+#define CONFIG_ALOOP_FILTER 0 -+#define CONFIG_AMERGE_FILTER 0 -+#define CONFIG_AMETADATA_FILTER 0 -+#define CONFIG_AMIX_FILTER 0 -+#define CONFIG_AMULTIPLY_FILTER 0 -+#define CONFIG_ANEQUALIZER_FILTER 0 -+#define CONFIG_ANLMDN_FILTER 0 -+#define CONFIG_ANLMF_FILTER 0 -+#define CONFIG_ANLMS_FILTER 0 -+#define CONFIG_ANULL_FILTER 0 -+#define CONFIG_APAD_FILTER 0 -+#define CONFIG_APERMS_FILTER 0 -+#define CONFIG_APHASER_FILTER 0 -+#define CONFIG_APHASESHIFT_FILTER 0 -+#define CONFIG_APSYCLIP_FILTER 0 -+#define CONFIG_APULSATOR_FILTER 0 -+#define CONFIG_AREALTIME_FILTER 0 -+#define CONFIG_ARESAMPLE_FILTER 0 -+#define CONFIG_AREVERSE_FILTER 0 -+#define CONFIG_ARNNDN_FILTER 0 -+#define CONFIG_ASDR_FILTER 0 -+#define CONFIG_ASEGMENT_FILTER 0 -+#define CONFIG_ASELECT_FILTER 0 -+#define CONFIG_ASENDCMD_FILTER 0 -+#define CONFIG_ASETNSAMPLES_FILTER 0 -+#define CONFIG_ASETPTS_FILTER 0 -+#define CONFIG_ASETRATE_FILTER 0 -+#define CONFIG_ASETTB_FILTER 0 -+#define CONFIG_ASHOWINFO_FILTER 0 -+#define CONFIG_ASIDEDATA_FILTER 0 -+#define CONFIG_ASOFTCLIP_FILTER 0 -+#define CONFIG_ASPECTRALSTATS_FILTER 0 -+#define CONFIG_ASPLIT_FILTER 0 -+#define CONFIG_ASR_FILTER 0 -+#define CONFIG_ASTATS_FILTER 0 -+#define CONFIG_ASTREAMSELECT_FILTER 0 -+#define CONFIG_ASUBBOOST_FILTER 0 -+#define CONFIG_ASUBCUT_FILTER 0 -+#define CONFIG_ASUPERCUT_FILTER 0 -+#define CONFIG_ASUPERPASS_FILTER 0 -+#define CONFIG_ASUPERSTOP_FILTER 0 -+#define CONFIG_ATEMPO_FILTER 0 -+#define CONFIG_ATILT_FILTER 0 -+#define CONFIG_ATRIM_FILTER 0 -+#define CONFIG_AXCORRELATE_FILTER 0 -+#define CONFIG_AZMQ_FILTER 0 -+#define CONFIG_BANDPASS_FILTER 0 -+#define CONFIG_BANDREJECT_FILTER 0 -+#define CONFIG_BASS_FILTER 0 -+#define CONFIG_BIQUAD_FILTER 0 -+#define CONFIG_BS2B_FILTER 0 -+#define CONFIG_CHANNELMAP_FILTER 0 -+#define CONFIG_CHANNELSPLIT_FILTER 0 -+#define CONFIG_CHORUS_FILTER 0 -+#define CONFIG_COMPAND_FILTER 0 -+#define CONFIG_COMPENSATIONDELAY_FILTER 0 -+#define CONFIG_CROSSFEED_FILTER 0 -+#define CONFIG_CRYSTALIZER_FILTER 0 -+#define CONFIG_DCSHIFT_FILTER 0 -+#define CONFIG_DEESSER_FILTER 0 -+#define CONFIG_DIALOGUENHANCE_FILTER 0 -+#define CONFIG_DRMETER_FILTER 0 -+#define CONFIG_DYNAUDNORM_FILTER 0 -+#define CONFIG_EARWAX_FILTER 0 -+#define CONFIG_EBUR128_FILTER 0 -+#define CONFIG_EQUALIZER_FILTER 0 -+#define CONFIG_EXTRASTEREO_FILTER 0 -+#define CONFIG_FIREQUALIZER_FILTER 0 -+#define CONFIG_FLANGER_FILTER 0 -+#define CONFIG_HAAS_FILTER 0 -+#define CONFIG_HDCD_FILTER 0 -+#define CONFIG_HEADPHONE_FILTER 0 -+#define CONFIG_HIGHPASS_FILTER 0 -+#define CONFIG_HIGHSHELF_FILTER 0 -+#define CONFIG_JOIN_FILTER 0 -+#define CONFIG_LADSPA_FILTER 0 -+#define CONFIG_LOUDNORM_FILTER 0 -+#define CONFIG_LOWPASS_FILTER 0 -+#define CONFIG_LOWSHELF_FILTER 0 -+#define CONFIG_LV2_FILTER 0 -+#define CONFIG_MCOMPAND_FILTER 0 -+#define CONFIG_PAN_FILTER 0 -+#define CONFIG_REPLAYGAIN_FILTER 0 -+#define CONFIG_RUBBERBAND_FILTER 0 -+#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -+#define CONFIG_SIDECHAINGATE_FILTER 0 -+#define CONFIG_SILENCEDETECT_FILTER 0 -+#define CONFIG_SILENCEREMOVE_FILTER 0 -+#define CONFIG_SOFALIZER_FILTER 0 -+#define CONFIG_SPEECHNORM_FILTER 0 -+#define CONFIG_STEREOTOOLS_FILTER 0 -+#define CONFIG_STEREOWIDEN_FILTER 0 -+#define CONFIG_SUPEREQUALIZER_FILTER 0 -+#define CONFIG_SURROUND_FILTER 0 -+#define CONFIG_TILTSHELF_FILTER 0 -+#define CONFIG_TREBLE_FILTER 0 -+#define CONFIG_TREMOLO_FILTER 0 -+#define CONFIG_VIBRATO_FILTER 0 -+#define CONFIG_VIRTUALBASS_FILTER 0 -+#define CONFIG_VOLUME_FILTER 0 -+#define CONFIG_VOLUMEDETECT_FILTER 0 -+#define CONFIG_AEVALSRC_FILTER 0 -+#define CONFIG_AFIRSRC_FILTER 0 -+#define CONFIG_ANOISESRC_FILTER 0 -+#define CONFIG_ANULLSRC_FILTER 0 -+#define CONFIG_FLITE_FILTER 0 -+#define CONFIG_HILBERT_FILTER 0 -+#define CONFIG_SINC_FILTER 0 -+#define CONFIG_SINE_FILTER 0 -+#define CONFIG_ANULLSINK_FILTER 0 -+#define CONFIG_ADDROI_FILTER 0 -+#define CONFIG_ALPHAEXTRACT_FILTER 0 -+#define CONFIG_ALPHAMERGE_FILTER 0 -+#define CONFIG_AMPLIFY_FILTER 0 -+#define CONFIG_ASS_FILTER 0 -+#define CONFIG_ATADENOISE_FILTER 0 -+#define CONFIG_AVGBLUR_FILTER 0 -+#define CONFIG_AVGBLUR_OPENCL_FILTER 0 -+#define CONFIG_AVGBLUR_VULKAN_FILTER 0 -+#define CONFIG_BBOX_FILTER 0 -+#define CONFIG_BENCH_FILTER 0 -+#define CONFIG_BILATERAL_FILTER 0 -+#define CONFIG_BITPLANENOISE_FILTER 0 -+#define CONFIG_BLACKDETECT_FILTER 0 -+#define CONFIG_BLACKFRAME_FILTER 0 -+#define CONFIG_BLEND_FILTER 0 -+#define CONFIG_BLEND_VULKAN_FILTER 0 -+#define CONFIG_BLOCKDETECT_FILTER 0 -+#define CONFIG_BLURDETECT_FILTER 0 -+#define CONFIG_BM3D_FILTER 0 -+#define CONFIG_BOXBLUR_FILTER 0 -+#define CONFIG_BOXBLUR_OPENCL_FILTER 0 -+#define CONFIG_BWDIF_FILTER 0 -+#define CONFIG_CAS_FILTER 0 -+#define CONFIG_CHROMABER_VULKAN_FILTER 0 -+#define CONFIG_CHROMAHOLD_FILTER 0 -+#define CONFIG_CHROMAKEY_FILTER 0 -+#define CONFIG_CHROMANR_FILTER 0 -+#define CONFIG_CHROMASHIFT_FILTER 0 -+#define CONFIG_CIESCOPE_FILTER 0 -+#define CONFIG_CODECVIEW_FILTER 0 -+#define CONFIG_COLORBALANCE_FILTER 0 -+#define CONFIG_COLORCHANNELMIXER_FILTER 0 -+#define CONFIG_COLORCONTRAST_FILTER 0 -+#define CONFIG_COLORCORRECT_FILTER 0 -+#define CONFIG_COLORIZE_FILTER 0 -+#define CONFIG_COLORKEY_FILTER 0 -+#define CONFIG_COLORKEY_OPENCL_FILTER 0 -+#define CONFIG_COLORHOLD_FILTER 0 -+#define CONFIG_COLORLEVELS_FILTER 0 -+#define CONFIG_COLORMAP_FILTER 0 -+#define CONFIG_COLORMATRIX_FILTER 0 -+#define CONFIG_COLORSPACE_FILTER 0 -+#define CONFIG_COLORTEMPERATURE_FILTER 0 -+#define CONFIG_CONVOLUTION_FILTER 0 -+#define CONFIG_CONVOLUTION_OPENCL_FILTER 0 -+#define CONFIG_CONVOLVE_FILTER 0 -+#define CONFIG_COPY_FILTER 0 -+#define CONFIG_COREIMAGE_FILTER 0 -+#define CONFIG_COVER_RECT_FILTER 0 -+#define CONFIG_CROP_FILTER 0 -+#define CONFIG_CROPDETECT_FILTER 0 -+#define CONFIG_CUE_FILTER 0 -+#define CONFIG_CURVES_FILTER 0 -+#define CONFIG_DATASCOPE_FILTER 0 -+#define CONFIG_DBLUR_FILTER 0 -+#define CONFIG_DCTDNOIZ_FILTER 0 -+#define CONFIG_DEBAND_FILTER 0 -+#define CONFIG_DEBLOCK_FILTER 0 -+#define CONFIG_DECIMATE_FILTER 0 -+#define CONFIG_DECONVOLVE_FILTER 0 -+#define CONFIG_DEDOT_FILTER 0 -+#define CONFIG_DEFLATE_FILTER 0 -+#define CONFIG_DEFLICKER_FILTER 0 -+#define CONFIG_DEINTERLACE_QSV_FILTER 0 -+#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 -+#define CONFIG_DEJUDDER_FILTER 0 -+#define CONFIG_DELOGO_FILTER 0 -+#define CONFIG_DENOISE_VAAPI_FILTER 0 -+#define CONFIG_DERAIN_FILTER 0 -+#define CONFIG_DESHAKE_FILTER 0 -+#define CONFIG_DESHAKE_OPENCL_FILTER 0 -+#define CONFIG_DESPILL_FILTER 0 -+#define CONFIG_DETELECINE_FILTER 0 -+#define CONFIG_DILATION_FILTER 0 -+#define CONFIG_DILATION_OPENCL_FILTER 0 -+#define CONFIG_DISPLACE_FILTER 0 -+#define CONFIG_DNN_CLASSIFY_FILTER 0 -+#define CONFIG_DNN_DETECT_FILTER 0 -+#define CONFIG_DNN_PROCESSING_FILTER 0 -+#define CONFIG_DOUBLEWEAVE_FILTER 0 -+#define CONFIG_DRAWBOX_FILTER 0 -+#define CONFIG_DRAWGRAPH_FILTER 0 -+#define CONFIG_DRAWGRID_FILTER 0 -+#define CONFIG_DRAWTEXT_FILTER 0 -+#define CONFIG_EDGEDETECT_FILTER 0 -+#define CONFIG_ELBG_FILTER 0 -+#define CONFIG_ENTROPY_FILTER 0 -+#define CONFIG_EPX_FILTER 0 -+#define CONFIG_EQ_FILTER 0 -+#define CONFIG_EROSION_FILTER 0 -+#define CONFIG_EROSION_OPENCL_FILTER 0 -+#define CONFIG_ESTDIF_FILTER 0 -+#define CONFIG_EXPOSURE_FILTER 0 -+#define CONFIG_EXTRACTPLANES_FILTER 0 -+#define CONFIG_FADE_FILTER 0 -+#define CONFIG_FEEDBACK_FILTER 0 -+#define CONFIG_FFTDNOIZ_FILTER 0 -+#define CONFIG_FFTFILT_FILTER 0 -+#define CONFIG_FIELD_FILTER 0 -+#define CONFIG_FIELDHINT_FILTER 0 -+#define CONFIG_FIELDMATCH_FILTER 0 -+#define CONFIG_FIELDORDER_FILTER 0 -+#define CONFIG_FILLBORDERS_FILTER 0 -+#define CONFIG_FIND_RECT_FILTER 0 -+#define CONFIG_FLIP_VULKAN_FILTER 0 -+#define CONFIG_FLOODFILL_FILTER 0 -+#define CONFIG_FORMAT_FILTER 0 -+#define CONFIG_FPS_FILTER 0 -+#define CONFIG_FRAMEPACK_FILTER 0 -+#define CONFIG_FRAMERATE_FILTER 0 -+#define CONFIG_FRAMESTEP_FILTER 0 -+#define CONFIG_FREEZEDETECT_FILTER 0 -+#define CONFIG_FREEZEFRAMES_FILTER 0 -+#define CONFIG_FREI0R_FILTER 0 -+#define CONFIG_FSPP_FILTER 0 -+#define CONFIG_GBLUR_FILTER 0 -+#define CONFIG_GBLUR_VULKAN_FILTER 0 -+#define CONFIG_GEQ_FILTER 0 -+#define CONFIG_GRADFUN_FILTER 0 -+#define CONFIG_GRAPHMONITOR_FILTER 0 -+#define CONFIG_GRAYWORLD_FILTER 0 -+#define CONFIG_GREYEDGE_FILTER 0 -+#define CONFIG_GUIDED_FILTER 0 -+#define CONFIG_HALDCLUT_FILTER 0 -+#define CONFIG_HFLIP_FILTER 0 -+#define CONFIG_HFLIP_VULKAN_FILTER 0 -+#define CONFIG_HISTEQ_FILTER 0 -+#define CONFIG_HISTOGRAM_FILTER 0 -+#define CONFIG_HQDN3D_FILTER 0 -+#define CONFIG_HQX_FILTER 0 -+#define CONFIG_HSTACK_FILTER 0 -+#define CONFIG_HSVHOLD_FILTER 0 -+#define CONFIG_HSVKEY_FILTER 0 -+#define CONFIG_HUE_FILTER 0 -+#define CONFIG_HUESATURATION_FILTER 0 -+#define CONFIG_HWDOWNLOAD_FILTER 0 -+#define CONFIG_HWMAP_FILTER 0 -+#define CONFIG_HWUPLOAD_FILTER 0 -+#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -+#define CONFIG_HYSTERESIS_FILTER 0 -+#define CONFIG_ICCDETECT_FILTER 0 -+#define CONFIG_ICCGEN_FILTER 0 -+#define CONFIG_IDENTITY_FILTER 0 -+#define CONFIG_IDET_FILTER 0 -+#define CONFIG_IL_FILTER 0 -+#define CONFIG_INFLATE_FILTER 0 -+#define CONFIG_INTERLACE_FILTER 0 -+#define CONFIG_INTERLEAVE_FILTER 0 -+#define CONFIG_KERNDEINT_FILTER 0 -+#define CONFIG_KIRSCH_FILTER 0 -+#define CONFIG_LAGFUN_FILTER 0 -+#define CONFIG_LATENCY_FILTER 0 -+#define CONFIG_LENSCORRECTION_FILTER 0 -+#define CONFIG_LENSFUN_FILTER 0 -+#define CONFIG_LIBPLACEBO_FILTER 0 -+#define CONFIG_LIBVMAF_FILTER 0 -+#define CONFIG_LIMITDIFF_FILTER 0 -+#define CONFIG_LIMITER_FILTER 0 -+#define CONFIG_LOOP_FILTER 0 -+#define CONFIG_LUMAKEY_FILTER 0 -+#define CONFIG_LUT_FILTER 0 -+#define CONFIG_LUT1D_FILTER 0 -+#define CONFIG_LUT2_FILTER 0 -+#define CONFIG_LUT3D_FILTER 0 -+#define CONFIG_LUTRGB_FILTER 0 -+#define CONFIG_LUTYUV_FILTER 0 -+#define CONFIG_MASKEDCLAMP_FILTER 0 -+#define CONFIG_MASKEDMAX_FILTER 0 -+#define CONFIG_MASKEDMERGE_FILTER 0 -+#define CONFIG_MASKEDMIN_FILTER 0 -+#define CONFIG_MASKEDTHRESHOLD_FILTER 0 -+#define CONFIG_MASKFUN_FILTER 0 -+#define CONFIG_MCDEINT_FILTER 0 -+#define CONFIG_MEDIAN_FILTER 0 -+#define CONFIG_MERGEPLANES_FILTER 0 -+#define CONFIG_MESTIMATE_FILTER 0 -+#define CONFIG_METADATA_FILTER 0 -+#define CONFIG_MIDEQUALIZER_FILTER 0 -+#define CONFIG_MINTERPOLATE_FILTER 0 -+#define CONFIG_MIX_FILTER 0 -+#define CONFIG_MONOCHROME_FILTER 0 -+#define CONFIG_MORPHO_FILTER 0 -+#define CONFIG_MPDECIMATE_FILTER 0 -+#define CONFIG_MSAD_FILTER 0 -+#define CONFIG_MULTIPLY_FILTER 0 -+#define CONFIG_NEGATE_FILTER 0 -+#define CONFIG_NLMEANS_FILTER 0 -+#define CONFIG_NLMEANS_OPENCL_FILTER 0 -+#define CONFIG_NNEDI_FILTER 0 -+#define CONFIG_NOFORMAT_FILTER 0 -+#define CONFIG_NOISE_FILTER 0 -+#define CONFIG_NORMALIZE_FILTER 0 -+#define CONFIG_NULL_FILTER 0 -+#define CONFIG_OCR_FILTER 0 -+#define CONFIG_OCV_FILTER 0 -+#define CONFIG_OSCILLOSCOPE_FILTER 0 -+#define CONFIG_OVERLAY_FILTER 0 -+#define CONFIG_OVERLAY_OPENCL_FILTER 0 -+#define CONFIG_OVERLAY_QSV_FILTER 0 -+#define CONFIG_OVERLAY_VAAPI_FILTER 0 -+#define CONFIG_OVERLAY_VULKAN_FILTER 0 -+#define CONFIG_OVERLAY_CUDA_FILTER 0 -+#define CONFIG_OWDENOISE_FILTER 0 -+#define CONFIG_PAD_FILTER 0 -+#define CONFIG_PAD_OPENCL_FILTER 0 -+#define CONFIG_PALETTEGEN_FILTER 0 -+#define CONFIG_PALETTEUSE_FILTER 0 -+#define CONFIG_PERMS_FILTER 0 -+#define CONFIG_PERSPECTIVE_FILTER 0 -+#define CONFIG_PHASE_FILTER 0 -+#define CONFIG_PHOTOSENSITIVITY_FILTER 0 -+#define CONFIG_PIXDESCTEST_FILTER 0 -+#define CONFIG_PIXELIZE_FILTER 0 -+#define CONFIG_PIXSCOPE_FILTER 0 -+#define CONFIG_PP_FILTER 0 -+#define CONFIG_PP7_FILTER 0 -+#define CONFIG_PREMULTIPLY_FILTER 0 -+#define CONFIG_PREWITT_FILTER 0 -+#define CONFIG_PREWITT_OPENCL_FILTER 0 -+#define CONFIG_PROCAMP_VAAPI_FILTER 0 -+#define CONFIG_PROGRAM_OPENCL_FILTER 0 -+#define CONFIG_PSEUDOCOLOR_FILTER 0 -+#define CONFIG_PSNR_FILTER 0 -+#define CONFIG_PULLUP_FILTER 0 -+#define CONFIG_QP_FILTER 0 -+#define CONFIG_RANDOM_FILTER 0 -+#define CONFIG_READEIA608_FILTER 0 -+#define CONFIG_READVITC_FILTER 0 -+#define CONFIG_REALTIME_FILTER 0 -+#define CONFIG_REMAP_FILTER 0 -+#define CONFIG_REMOVEGRAIN_FILTER 0 -+#define CONFIG_REMOVELOGO_FILTER 0 -+#define CONFIG_REPEATFIELDS_FILTER 0 -+#define CONFIG_REVERSE_FILTER 0 -+#define CONFIG_RGBASHIFT_FILTER 0 -+#define CONFIG_ROBERTS_FILTER 0 -+#define CONFIG_ROBERTS_OPENCL_FILTER 0 -+#define CONFIG_ROTATE_FILTER 0 -+#define CONFIG_SAB_FILTER 0 -+#define CONFIG_SCALE_FILTER 0 -+#define CONFIG_SCALE_CUDA_FILTER 0 -+#define CONFIG_SCALE_NPP_FILTER 0 -+#define CONFIG_SCALE_QSV_FILTER 0 -+#define CONFIG_SCALE_VAAPI_FILTER 0 -+#define CONFIG_SCALE_VULKAN_FILTER 0 -+#define CONFIG_SCALE2REF_FILTER 0 -+#define CONFIG_SCALE2REF_NPP_FILTER 0 -+#define CONFIG_SCDET_FILTER 0 -+#define CONFIG_SCHARR_FILTER 0 -+#define CONFIG_SCROLL_FILTER 0 -+#define CONFIG_SEGMENT_FILTER 0 -+#define CONFIG_SELECT_FILTER 0 -+#define CONFIG_SELECTIVECOLOR_FILTER 0 -+#define CONFIG_SENDCMD_FILTER 0 -+#define CONFIG_SEPARATEFIELDS_FILTER 0 -+#define CONFIG_SETDAR_FILTER 0 -+#define CONFIG_SETFIELD_FILTER 0 -+#define CONFIG_SETPARAMS_FILTER 0 -+#define CONFIG_SETPTS_FILTER 0 -+#define CONFIG_SETRANGE_FILTER 0 -+#define CONFIG_SETSAR_FILTER 0 -+#define CONFIG_SETTB_FILTER 0 -+#define CONFIG_SHARPEN_NPP_FILTER 0 -+#define CONFIG_SHARPNESS_VAAPI_FILTER 0 -+#define CONFIG_SHEAR_FILTER 0 -+#define CONFIG_SHOWINFO_FILTER 0 -+#define CONFIG_SHOWPALETTE_FILTER 0 -+#define CONFIG_SHUFFLEFRAMES_FILTER 0 -+#define CONFIG_SHUFFLEPIXELS_FILTER 0 -+#define CONFIG_SHUFFLEPLANES_FILTER 0 -+#define CONFIG_SIDEDATA_FILTER 0 -+#define CONFIG_SIGNALSTATS_FILTER 0 -+#define CONFIG_SIGNATURE_FILTER 0 -+#define CONFIG_SITI_FILTER 0 -+#define CONFIG_SMARTBLUR_FILTER 0 -+#define CONFIG_SOBEL_FILTER 0 -+#define CONFIG_SOBEL_OPENCL_FILTER 0 -+#define CONFIG_SPLIT_FILTER 0 -+#define CONFIG_SPP_FILTER 0 -+#define CONFIG_SR_FILTER 0 -+#define CONFIG_SSIM_FILTER 0 -+#define CONFIG_STEREO3D_FILTER 0 -+#define CONFIG_STREAMSELECT_FILTER 0 -+#define CONFIG_SUBTITLES_FILTER 0 -+#define CONFIG_SUPER2XSAI_FILTER 0 -+#define CONFIG_SWAPRECT_FILTER 0 -+#define CONFIG_SWAPUV_FILTER 0 -+#define CONFIG_TBLEND_FILTER 0 -+#define CONFIG_TELECINE_FILTER 0 -+#define CONFIG_THISTOGRAM_FILTER 0 -+#define CONFIG_THRESHOLD_FILTER 0 -+#define CONFIG_THUMBNAIL_FILTER 0 -+#define CONFIG_THUMBNAIL_CUDA_FILTER 0 -+#define CONFIG_TILE_FILTER 0 -+#define CONFIG_TINTERLACE_FILTER 0 -+#define CONFIG_TLUT2_FILTER 0 -+#define CONFIG_TMEDIAN_FILTER 0 -+#define CONFIG_TMIDEQUALIZER_FILTER 0 -+#define CONFIG_TMIX_FILTER 0 -+#define CONFIG_TONEMAP_FILTER 0 -+#define CONFIG_TONEMAP_OPENCL_FILTER 0 -+#define CONFIG_TONEMAP_VAAPI_FILTER 0 -+#define CONFIG_TPAD_FILTER 0 -+#define CONFIG_TRANSPOSE_FILTER 0 -+#define CONFIG_TRANSPOSE_NPP_FILTER 0 -+#define CONFIG_TRANSPOSE_OPENCL_FILTER 0 -+#define CONFIG_TRANSPOSE_VAAPI_FILTER 0 -+#define CONFIG_TRANSPOSE_VULKAN_FILTER 0 -+#define CONFIG_TRIM_FILTER 0 -+#define CONFIG_UNPREMULTIPLY_FILTER 0 -+#define CONFIG_UNSHARP_FILTER 0 -+#define CONFIG_UNSHARP_OPENCL_FILTER 0 -+#define CONFIG_UNTILE_FILTER 0 -+#define CONFIG_USPP_FILTER 0 -+#define CONFIG_V360_FILTER 0 -+#define CONFIG_VAGUEDENOISER_FILTER 0 -+#define CONFIG_VARBLUR_FILTER 0 -+#define CONFIG_VECTORSCOPE_FILTER 0 -+#define CONFIG_VFLIP_FILTER 0 -+#define CONFIG_VFLIP_VULKAN_FILTER 0 -+#define CONFIG_VFRDET_FILTER 0 -+#define CONFIG_VIBRANCE_FILTER 0 -+#define CONFIG_VIDSTABDETECT_FILTER 0 -+#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -+#define CONFIG_VIF_FILTER 0 -+#define CONFIG_VIGNETTE_FILTER 0 -+#define CONFIG_VMAFMOTION_FILTER 0 -+#define CONFIG_VPP_QSV_FILTER 0 -+#define CONFIG_VSTACK_FILTER 0 -+#define CONFIG_W3FDIF_FILTER 0 -+#define CONFIG_WAVEFORM_FILTER 0 -+#define CONFIG_WEAVE_FILTER 0 -+#define CONFIG_XBR_FILTER 0 -+#define CONFIG_XCORRELATE_FILTER 0 -+#define CONFIG_XFADE_FILTER 0 -+#define CONFIG_XFADE_OPENCL_FILTER 0 -+#define CONFIG_XMEDIAN_FILTER 0 -+#define CONFIG_XSTACK_FILTER 0 -+#define CONFIG_YADIF_FILTER 0 -+#define CONFIG_YADIF_CUDA_FILTER 0 -+#define CONFIG_YADIF_VIDEOTOOLBOX_FILTER 0 -+#define CONFIG_YAEPBLUR_FILTER 0 -+#define CONFIG_ZMQ_FILTER 0 -+#define CONFIG_ZOOMPAN_FILTER 0 -+#define CONFIG_ZSCALE_FILTER 0 -+#define CONFIG_ALLRGB_FILTER 0 -+#define CONFIG_ALLYUV_FILTER 0 -+#define CONFIG_CELLAUTO_FILTER 0 -+#define CONFIG_COLOR_FILTER 0 -+#define CONFIG_COLORCHART_FILTER 0 -+#define CONFIG_COLORSPECTRUM_FILTER 0 -+#define CONFIG_COREIMAGESRC_FILTER 0 -+#define CONFIG_FREI0R_SRC_FILTER 0 -+#define CONFIG_GRADIENTS_FILTER 0 -+#define CONFIG_HALDCLUTSRC_FILTER 0 -+#define CONFIG_LIFE_FILTER 0 -+#define CONFIG_MANDELBROT_FILTER 0 -+#define CONFIG_MPTESTSRC_FILTER 0 -+#define CONFIG_NULLSRC_FILTER 0 -+#define CONFIG_OPENCLSRC_FILTER 0 -+#define CONFIG_PAL75BARS_FILTER 0 -+#define CONFIG_PAL100BARS_FILTER 0 -+#define CONFIG_RGBTESTSRC_FILTER 0 -+#define CONFIG_SIERPINSKI_FILTER 0 -+#define CONFIG_SMPTEBARS_FILTER 0 -+#define CONFIG_SMPTEHDBARS_FILTER 0 -+#define CONFIG_TESTSRC_FILTER 0 -+#define CONFIG_TESTSRC2_FILTER 0 -+#define CONFIG_YUVTESTSRC_FILTER 0 -+#define CONFIG_NULLSINK_FILTER 0 -+#define CONFIG_ABITSCOPE_FILTER 0 -+#define CONFIG_ADRAWGRAPH_FILTER 0 -+#define CONFIG_AGRAPHMONITOR_FILTER 0 -+#define CONFIG_AHISTOGRAM_FILTER 0 -+#define CONFIG_APHASEMETER_FILTER 0 -+#define CONFIG_AVECTORSCOPE_FILTER 0 -+#define CONFIG_CONCAT_FILTER 0 -+#define CONFIG_SHOWCQT_FILTER 0 -+#define CONFIG_SHOWFREQS_FILTER 0 -+#define CONFIG_SHOWSPATIAL_FILTER 0 -+#define CONFIG_SHOWSPECTRUM_FILTER 0 -+#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -+#define CONFIG_SHOWVOLUME_FILTER 0 -+#define CONFIG_SHOWWAVES_FILTER 0 -+#define CONFIG_SHOWWAVESPIC_FILTER 0 -+#define CONFIG_SPECTRUMSYNTH_FILTER 0 -+#define CONFIG_AVSYNCTEST_FILTER 0 -+#define CONFIG_AMOVIE_FILTER 0 -+#define CONFIG_MOVIE_FILTER 0 -+#define CONFIG_AFIFO_FILTER 0 -+#define CONFIG_FIFO_FILTER 0 -+#define CONFIG_AA_DEMUXER 0 -+#define CONFIG_AAC_DEMUXER 0 -+#define CONFIG_AAX_DEMUXER 0 -+#define CONFIG_AC3_DEMUXER 0 -+#define CONFIG_ACE_DEMUXER 0 -+#define CONFIG_ACM_DEMUXER 0 -+#define CONFIG_ACT_DEMUXER 0 -+#define CONFIG_ADF_DEMUXER 0 -+#define CONFIG_ADP_DEMUXER 0 -+#define CONFIG_ADS_DEMUXER 0 -+#define CONFIG_ADX_DEMUXER 0 -+#define CONFIG_AEA_DEMUXER 0 -+#define CONFIG_AFC_DEMUXER 0 -+#define CONFIG_AIFF_DEMUXER 0 -+#define CONFIG_AIX_DEMUXER 0 -+#define CONFIG_ALP_DEMUXER 0 -+#define CONFIG_AMR_DEMUXER 0 -+#define CONFIG_AMRNB_DEMUXER 0 -+#define CONFIG_AMRWB_DEMUXER 0 -+#define CONFIG_ANM_DEMUXER 0 -+#define CONFIG_APC_DEMUXER 0 -+#define CONFIG_APE_DEMUXER 0 -+#define CONFIG_APM_DEMUXER 0 -+#define CONFIG_APNG_DEMUXER 0 -+#define CONFIG_APTX_DEMUXER 0 -+#define CONFIG_APTX_HD_DEMUXER 0 -+#define CONFIG_AQTITLE_DEMUXER 0 -+#define CONFIG_ARGO_ASF_DEMUXER 0 -+#define CONFIG_ARGO_BRP_DEMUXER 0 -+#define CONFIG_ARGO_CVG_DEMUXER 0 -+#define CONFIG_ASF_DEMUXER 0 -+#define CONFIG_ASF_O_DEMUXER 0 -+#define CONFIG_ASS_DEMUXER 0 -+#define CONFIG_AST_DEMUXER 0 -+#define CONFIG_AU_DEMUXER 0 -+#define CONFIG_AV1_DEMUXER 0 -+#define CONFIG_AVI_DEMUXER 0 -+#define CONFIG_AVISYNTH_DEMUXER 0 -+#define CONFIG_AVR_DEMUXER 0 -+#define CONFIG_AVS_DEMUXER 0 -+#define CONFIG_AVS2_DEMUXER 0 -+#define CONFIG_AVS3_DEMUXER 0 -+#define CONFIG_BETHSOFTVID_DEMUXER 0 -+#define CONFIG_BFI_DEMUXER 0 -+#define CONFIG_BINTEXT_DEMUXER 0 -+#define CONFIG_BINK_DEMUXER 0 -+#define CONFIG_BINKA_DEMUXER 0 -+#define CONFIG_BIT_DEMUXER 0 -+#define CONFIG_BITPACKED_DEMUXER 0 -+#define CONFIG_BMV_DEMUXER 0 -+#define CONFIG_BFSTM_DEMUXER 0 -+#define CONFIG_BRSTM_DEMUXER 0 -+#define CONFIG_BOA_DEMUXER 0 -+#define CONFIG_C93_DEMUXER 0 -+#define CONFIG_CAF_DEMUXER 0 -+#define CONFIG_CAVSVIDEO_DEMUXER 0 -+#define CONFIG_CDG_DEMUXER 0 -+#define CONFIG_CDXL_DEMUXER 0 -+#define CONFIG_CINE_DEMUXER 0 -+#define CONFIG_CODEC2_DEMUXER 0 -+#define CONFIG_CODEC2RAW_DEMUXER 0 -+#define CONFIG_CONCAT_DEMUXER 0 -+#define CONFIG_DASH_DEMUXER 0 -+#define CONFIG_DATA_DEMUXER 0 -+#define CONFIG_DAUD_DEMUXER 0 -+#define CONFIG_DCSTR_DEMUXER 0 -+#define CONFIG_DERF_DEMUXER 0 -+#define CONFIG_DFA_DEMUXER 0 -+#define CONFIG_DFPWM_DEMUXER 0 -+#define CONFIG_DHAV_DEMUXER 0 -+#define CONFIG_DIRAC_DEMUXER 0 -+#define CONFIG_DNXHD_DEMUXER 0 -+#define CONFIG_DSF_DEMUXER 0 -+#define CONFIG_DSICIN_DEMUXER 0 -+#define CONFIG_DSS_DEMUXER 0 -+#define CONFIG_DTS_DEMUXER 0 -+#define CONFIG_DTSHD_DEMUXER 0 -+#define CONFIG_DV_DEMUXER 0 -+#define CONFIG_DVBSUB_DEMUXER 0 -+#define CONFIG_DVBTXT_DEMUXER 0 -+#define CONFIG_DXA_DEMUXER 0 -+#define CONFIG_EA_DEMUXER 0 -+#define CONFIG_EA_CDATA_DEMUXER 0 -+#define CONFIG_EAC3_DEMUXER 0 -+#define CONFIG_EPAF_DEMUXER 0 -+#define CONFIG_FFMETADATA_DEMUXER 0 -+#define CONFIG_FILMSTRIP_DEMUXER 0 -+#define CONFIG_FITS_DEMUXER 0 -+#define CONFIG_FLAC_DEMUXER 0 -+#define CONFIG_FLIC_DEMUXER 0 -+#define CONFIG_FLV_DEMUXER 0 -+#define CONFIG_LIVE_FLV_DEMUXER 0 -+#define CONFIG_FOURXM_DEMUXER 0 -+#define CONFIG_FRM_DEMUXER 0 -+#define CONFIG_FSB_DEMUXER 0 -+#define CONFIG_FWSE_DEMUXER 0 -+#define CONFIG_G722_DEMUXER 0 -+#define CONFIG_G723_1_DEMUXER 0 -+#define CONFIG_G726_DEMUXER 0 -+#define CONFIG_G726LE_DEMUXER 0 -+#define CONFIG_G729_DEMUXER 0 -+#define CONFIG_GDV_DEMUXER 0 -+#define CONFIG_GENH_DEMUXER 0 -+#define CONFIG_GIF_DEMUXER 0 -+#define CONFIG_GSM_DEMUXER 0 -+#define CONFIG_GXF_DEMUXER 0 -+#define CONFIG_H261_DEMUXER 0 -+#define CONFIG_H263_DEMUXER 0 -+#define CONFIG_H264_DEMUXER 0 -+#define CONFIG_HCA_DEMUXER 0 -+#define CONFIG_HCOM_DEMUXER 0 -+#define CONFIG_HEVC_DEMUXER 0 -+#define CONFIG_HLS_DEMUXER 0 -+#define CONFIG_HNM_DEMUXER 0 -+#define CONFIG_ICO_DEMUXER 0 -+#define CONFIG_IDCIN_DEMUXER 0 -+#define CONFIG_IDF_DEMUXER 0 -+#define CONFIG_IFF_DEMUXER 0 -+#define CONFIG_IFV_DEMUXER 0 -+#define CONFIG_ILBC_DEMUXER 0 -+#define CONFIG_IMAGE2_DEMUXER 0 -+#define CONFIG_IMAGE2PIPE_DEMUXER 0 -+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -+#define CONFIG_IMF_DEMUXER 0 -+#define CONFIG_INGENIENT_DEMUXER 0 -+#define CONFIG_IPMOVIE_DEMUXER 0 -+#define CONFIG_IPU_DEMUXER 0 -+#define CONFIG_IRCAM_DEMUXER 0 -+#define CONFIG_ISS_DEMUXER 0 -+#define CONFIG_IV8_DEMUXER 0 -+#define CONFIG_IVF_DEMUXER 0 -+#define CONFIG_IVR_DEMUXER 0 -+#define CONFIG_JACOSUB_DEMUXER 0 -+#define CONFIG_JV_DEMUXER 0 -+#define CONFIG_KUX_DEMUXER 0 -+#define CONFIG_KVAG_DEMUXER 0 -+#define CONFIG_LMLM4_DEMUXER 0 -+#define CONFIG_LOAS_DEMUXER 0 -+#define CONFIG_LUODAT_DEMUXER 0 -+#define CONFIG_LRC_DEMUXER 0 -+#define CONFIG_LVF_DEMUXER 0 -+#define CONFIG_LXF_DEMUXER 0 -+#define CONFIG_M4V_DEMUXER 0 -+#define CONFIG_MCA_DEMUXER 0 -+#define CONFIG_MCC_DEMUXER 0 -+#define CONFIG_MATROSKA_DEMUXER 0 -+#define CONFIG_MGSTS_DEMUXER 0 -+#define CONFIG_MICRODVD_DEMUXER 0 -+#define CONFIG_MJPEG_DEMUXER 0 -+#define CONFIG_MJPEG_2000_DEMUXER 0 -+#define CONFIG_MLP_DEMUXER 0 -+#define CONFIG_MLV_DEMUXER 0 -+#define CONFIG_MM_DEMUXER 0 -+#define CONFIG_MMF_DEMUXER 0 -+#define CONFIG_MODS_DEMUXER 0 -+#define CONFIG_MOFLEX_DEMUXER 0 -+#define CONFIG_MOV_DEMUXER 0 -+#define CONFIG_MP3_DEMUXER 0 -+#define CONFIG_MPC_DEMUXER 0 -+#define CONFIG_MPC8_DEMUXER 0 -+#define CONFIG_MPEGPS_DEMUXER 0 -+#define CONFIG_MPEGTS_DEMUXER 0 -+#define CONFIG_MPEGTSRAW_DEMUXER 0 -+#define CONFIG_MPEGVIDEO_DEMUXER 0 -+#define CONFIG_MPJPEG_DEMUXER 0 -+#define CONFIG_MPL2_DEMUXER 0 -+#define CONFIG_MPSUB_DEMUXER 0 -+#define CONFIG_MSF_DEMUXER 0 -+#define CONFIG_MSNWC_TCP_DEMUXER 0 -+#define CONFIG_MSP_DEMUXER 0 -+#define CONFIG_MTAF_DEMUXER 0 -+#define CONFIG_MTV_DEMUXER 0 -+#define CONFIG_MUSX_DEMUXER 0 -+#define CONFIG_MV_DEMUXER 0 -+#define CONFIG_MVI_DEMUXER 0 -+#define CONFIG_MXF_DEMUXER 0 -+#define CONFIG_MXG_DEMUXER 0 -+#define CONFIG_NC_DEMUXER 0 -+#define CONFIG_NISTSPHERE_DEMUXER 0 -+#define CONFIG_NSP_DEMUXER 0 -+#define CONFIG_NSV_DEMUXER 0 -+#define CONFIG_NUT_DEMUXER 0 -+#define CONFIG_NUV_DEMUXER 0 -+#define CONFIG_OBU_DEMUXER 0 -+#define CONFIG_OGG_DEMUXER 0 -+#define CONFIG_OMA_DEMUXER 0 -+#define CONFIG_PAF_DEMUXER 0 -+#define CONFIG_PCM_ALAW_DEMUXER 0 -+#define CONFIG_PCM_MULAW_DEMUXER 0 -+#define CONFIG_PCM_VIDC_DEMUXER 0 -+#define CONFIG_PCM_F64BE_DEMUXER 0 -+#define CONFIG_PCM_F64LE_DEMUXER 0 -+#define CONFIG_PCM_F32BE_DEMUXER 0 -+#define CONFIG_PCM_F32LE_DEMUXER 0 -+#define CONFIG_PCM_S32BE_DEMUXER 0 -+#define CONFIG_PCM_S32LE_DEMUXER 0 -+#define CONFIG_PCM_S24BE_DEMUXER 0 -+#define CONFIG_PCM_S24LE_DEMUXER 0 -+#define CONFIG_PCM_S16BE_DEMUXER 0 -+#define CONFIG_PCM_S16LE_DEMUXER 0 -+#define CONFIG_PCM_S8_DEMUXER 0 -+#define CONFIG_PCM_U32BE_DEMUXER 0 -+#define CONFIG_PCM_U32LE_DEMUXER 0 -+#define CONFIG_PCM_U24BE_DEMUXER 0 -+#define CONFIG_PCM_U24LE_DEMUXER 0 -+#define CONFIG_PCM_U16BE_DEMUXER 0 -+#define CONFIG_PCM_U16LE_DEMUXER 0 -+#define CONFIG_PCM_U8_DEMUXER 0 -+#define CONFIG_PJS_DEMUXER 0 -+#define CONFIG_PMP_DEMUXER 0 -+#define CONFIG_PP_BNK_DEMUXER 0 -+#define CONFIG_PVA_DEMUXER 0 -+#define CONFIG_PVF_DEMUXER 0 -+#define CONFIG_QCP_DEMUXER 0 -+#define CONFIG_R3D_DEMUXER 0 -+#define CONFIG_RAWVIDEO_DEMUXER 0 -+#define CONFIG_REALTEXT_DEMUXER 0 -+#define CONFIG_REDSPARK_DEMUXER 0 -+#define CONFIG_RL2_DEMUXER 0 -+#define CONFIG_RM_DEMUXER 0 -+#define CONFIG_ROQ_DEMUXER 0 -+#define CONFIG_RPL_DEMUXER 0 -+#define CONFIG_RSD_DEMUXER 0 -+#define CONFIG_RSO_DEMUXER 0 -+#define CONFIG_RTP_DEMUXER 0 -+#define CONFIG_RTSP_DEMUXER 0 -+#define CONFIG_S337M_DEMUXER 0 -+#define CONFIG_SAMI_DEMUXER 0 -+#define CONFIG_SAP_DEMUXER 0 -+#define CONFIG_SBC_DEMUXER 0 -+#define CONFIG_SBG_DEMUXER 0 -+#define CONFIG_SCC_DEMUXER 0 -+#define CONFIG_SCD_DEMUXER 0 -+#define CONFIG_SDP_DEMUXER 0 -+#define CONFIG_SDR2_DEMUXER 0 -+#define CONFIG_SDS_DEMUXER 0 -+#define CONFIG_SDX_DEMUXER 0 -+#define CONFIG_SEGAFILM_DEMUXER 0 -+#define CONFIG_SER_DEMUXER 0 -+#define CONFIG_SGA_DEMUXER 0 -+#define CONFIG_SHORTEN_DEMUXER 0 -+#define CONFIG_SIFF_DEMUXER 0 -+#define CONFIG_SIMBIOSIS_IMX_DEMUXER 0 -+#define CONFIG_SLN_DEMUXER 0 -+#define CONFIG_SMACKER_DEMUXER 0 -+#define CONFIG_SMJPEG_DEMUXER 0 -+#define CONFIG_SMUSH_DEMUXER 0 -+#define CONFIG_SOL_DEMUXER 0 -+#define CONFIG_SOX_DEMUXER 0 -+#define CONFIG_SPDIF_DEMUXER 0 -+#define CONFIG_SRT_DEMUXER 0 -+#define CONFIG_STR_DEMUXER 0 -+#define CONFIG_STL_DEMUXER 0 -+#define CONFIG_SUBVIEWER1_DEMUXER 0 -+#define CONFIG_SUBVIEWER_DEMUXER 0 -+#define CONFIG_SUP_DEMUXER 0 -+#define CONFIG_SVAG_DEMUXER 0 -+#define CONFIG_SVS_DEMUXER 0 -+#define CONFIG_SWF_DEMUXER 0 -+#define CONFIG_TAK_DEMUXER 0 -+#define CONFIG_TEDCAPTIONS_DEMUXER 0 -+#define CONFIG_THP_DEMUXER 0 -+#define CONFIG_THREEDOSTR_DEMUXER 0 -+#define CONFIG_TIERTEXSEQ_DEMUXER 0 -+#define CONFIG_TMV_DEMUXER 0 -+#define CONFIG_TRUEHD_DEMUXER 0 -+#define CONFIG_TTA_DEMUXER 0 -+#define CONFIG_TXD_DEMUXER 0 -+#define CONFIG_TTY_DEMUXER 0 -+#define CONFIG_TY_DEMUXER 0 -+#define CONFIG_V210_DEMUXER 0 -+#define CONFIG_V210X_DEMUXER 0 -+#define CONFIG_VAG_DEMUXER 0 -+#define CONFIG_VC1_DEMUXER 0 -+#define CONFIG_VC1T_DEMUXER 0 -+#define CONFIG_VIVIDAS_DEMUXER 0 -+#define CONFIG_VIVO_DEMUXER 0 -+#define CONFIG_VMD_DEMUXER 0 -+#define CONFIG_VOBSUB_DEMUXER 0 -+#define CONFIG_VOC_DEMUXER 0 -+#define CONFIG_VPK_DEMUXER 0 -+#define CONFIG_VPLAYER_DEMUXER 0 -+#define CONFIG_VQF_DEMUXER 0 -+#define CONFIG_W64_DEMUXER 0 -+#define CONFIG_WAV_DEMUXER 0 -+#define CONFIG_WC3_DEMUXER 0 -+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -+#define CONFIG_WEBVTT_DEMUXER 0 -+#define CONFIG_WSAUD_DEMUXER 0 -+#define CONFIG_WSD_DEMUXER 0 -+#define CONFIG_WSVQA_DEMUXER 0 -+#define CONFIG_WTV_DEMUXER 0 -+#define CONFIG_WVE_DEMUXER 0 -+#define CONFIG_WV_DEMUXER 0 -+#define CONFIG_XA_DEMUXER 0 -+#define CONFIG_XBIN_DEMUXER 0 -+#define CONFIG_XMV_DEMUXER 0 -+#define CONFIG_XVAG_DEMUXER 0 -+#define CONFIG_XWMA_DEMUXER 0 -+#define CONFIG_YOP_DEMUXER 0 -+#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_CRI_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_GEM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_JPEGXL_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PGX_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PHOTOCD_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_QOI_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_VBN_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_XBM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 -+#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 -+#define CONFIG_LIBGME_DEMUXER 0 -+#define CONFIG_LIBMODPLUG_DEMUXER 0 -+#define CONFIG_LIBOPENMPT_DEMUXER 0 -+#define CONFIG_VAPOURSYNTH_DEMUXER 0 -+#define CONFIG_A64_MUXER 0 -+#define CONFIG_AC3_MUXER 0 -+#define CONFIG_ADTS_MUXER 0 -+#define CONFIG_ADX_MUXER 0 -+#define CONFIG_AIFF_MUXER 0 -+#define CONFIG_ALP_MUXER 0 -+#define CONFIG_AMR_MUXER 0 -+#define CONFIG_AMV_MUXER 0 -+#define CONFIG_APM_MUXER 0 -+#define CONFIG_APNG_MUXER 0 -+#define CONFIG_APTX_MUXER 0 -+#define CONFIG_APTX_HD_MUXER 0 -+#define CONFIG_ARGO_ASF_MUXER 0 -+#define CONFIG_ARGO_CVG_MUXER 0 -+#define CONFIG_ASF_MUXER 0 -+#define CONFIG_ASS_MUXER 0 -+#define CONFIG_AST_MUXER 0 -+#define CONFIG_ASF_STREAM_MUXER 0 -+#define CONFIG_AU_MUXER 0 -+#define CONFIG_AVI_MUXER 0 -+#define CONFIG_AVIF_MUXER 0 -+#define CONFIG_AVM2_MUXER 0 -+#define CONFIG_AVS2_MUXER 0 -+#define CONFIG_AVS3_MUXER 0 -+#define CONFIG_BIT_MUXER 0 -+#define CONFIG_CAF_MUXER 0 -+#define CONFIG_CAVSVIDEO_MUXER 0 -+#define CONFIG_CODEC2_MUXER 0 -+#define CONFIG_CODEC2RAW_MUXER 0 -+#define CONFIG_CRC_MUXER 0 -+#define CONFIG_DASH_MUXER 0 -+#define CONFIG_DATA_MUXER 0 -+#define CONFIG_DAUD_MUXER 0 -+#define CONFIG_DFPWM_MUXER 0 -+#define CONFIG_DIRAC_MUXER 0 -+#define CONFIG_DNXHD_MUXER 0 -+#define CONFIG_DTS_MUXER 0 -+#define CONFIG_DV_MUXER 0 -+#define CONFIG_EAC3_MUXER 0 -+#define CONFIG_F4V_MUXER 0 -+#define CONFIG_FFMETADATA_MUXER 0 -+#define CONFIG_FIFO_MUXER 0 -+#define CONFIG_FIFO_TEST_MUXER 0 -+#define CONFIG_FILMSTRIP_MUXER 0 -+#define CONFIG_FITS_MUXER 0 -+#define CONFIG_FLAC_MUXER 0 -+#define CONFIG_FLV_MUXER 0 -+#define CONFIG_FRAMECRC_MUXER 0 -+#define CONFIG_FRAMEHASH_MUXER 0 -+#define CONFIG_FRAMEMD5_MUXER 0 -+#define CONFIG_G722_MUXER 0 -+#define CONFIG_G723_1_MUXER 0 -+#define CONFIG_G726_MUXER 0 -+#define CONFIG_G726LE_MUXER 0 -+#define CONFIG_GIF_MUXER 0 -+#define CONFIG_GSM_MUXER 0 -+#define CONFIG_GXF_MUXER 0 -+#define CONFIG_H261_MUXER 0 -+#define CONFIG_H263_MUXER 0 -+#define CONFIG_H264_MUXER 0 -+#define CONFIG_HASH_MUXER 0 -+#define CONFIG_HDS_MUXER 0 -+#define CONFIG_HEVC_MUXER 0 -+#define CONFIG_HLS_MUXER 0 -+#define CONFIG_ICO_MUXER 0 -+#define CONFIG_ILBC_MUXER 0 -+#define CONFIG_IMAGE2_MUXER 0 -+#define CONFIG_IMAGE2PIPE_MUXER 0 -+#define CONFIG_IPOD_MUXER 0 -+#define CONFIG_IRCAM_MUXER 0 -+#define CONFIG_ISMV_MUXER 0 -+#define CONFIG_IVF_MUXER 0 -+#define CONFIG_JACOSUB_MUXER 0 -+#define CONFIG_KVAG_MUXER 0 -+#define CONFIG_LATM_MUXER 0 -+#define CONFIG_LRC_MUXER 0 -+#define CONFIG_M4V_MUXER 0 -+#define CONFIG_MD5_MUXER 0 -+#define CONFIG_MATROSKA_MUXER 0 -+#define CONFIG_MATROSKA_AUDIO_MUXER 0 -+#define CONFIG_MICRODVD_MUXER 0 -+#define CONFIG_MJPEG_MUXER 0 -+#define CONFIG_MLP_MUXER 0 -+#define CONFIG_MMF_MUXER 0 -+#define CONFIG_MOV_MUXER 0 -+#define CONFIG_MP2_MUXER 0 -+#define CONFIG_MP3_MUXER 0 -+#define CONFIG_MP4_MUXER 0 -+#define CONFIG_MPEG1SYSTEM_MUXER 0 -+#define CONFIG_MPEG1VCD_MUXER 0 -+#define CONFIG_MPEG1VIDEO_MUXER 0 -+#define CONFIG_MPEG2DVD_MUXER 0 -+#define CONFIG_MPEG2SVCD_MUXER 0 -+#define CONFIG_MPEG2VIDEO_MUXER 0 -+#define CONFIG_MPEG2VOB_MUXER 0 -+#define CONFIG_MPEGTS_MUXER 0 -+#define CONFIG_MPJPEG_MUXER 0 -+#define CONFIG_MXF_MUXER 0 -+#define CONFIG_MXF_D10_MUXER 0 -+#define CONFIG_MXF_OPATOM_MUXER 0 -+#define CONFIG_NULL_MUXER 0 -+#define CONFIG_NUT_MUXER 0 -+#define CONFIG_OBU_MUXER 0 -+#define CONFIG_OGA_MUXER 0 -+#define CONFIG_OGG_MUXER 0 -+#define CONFIG_OGV_MUXER 0 -+#define CONFIG_OMA_MUXER 0 -+#define CONFIG_OPUS_MUXER 0 -+#define CONFIG_PCM_ALAW_MUXER 0 -+#define CONFIG_PCM_MULAW_MUXER 0 -+#define CONFIG_PCM_VIDC_MUXER 0 -+#define CONFIG_PCM_F64BE_MUXER 0 -+#define CONFIG_PCM_F64LE_MUXER 0 -+#define CONFIG_PCM_F32BE_MUXER 0 -+#define CONFIG_PCM_F32LE_MUXER 0 -+#define CONFIG_PCM_S32BE_MUXER 0 -+#define CONFIG_PCM_S32LE_MUXER 0 -+#define CONFIG_PCM_S24BE_MUXER 0 -+#define CONFIG_PCM_S24LE_MUXER 0 -+#define CONFIG_PCM_S16BE_MUXER 0 -+#define CONFIG_PCM_S16LE_MUXER 0 -+#define CONFIG_PCM_S8_MUXER 0 -+#define CONFIG_PCM_U32BE_MUXER 0 -+#define CONFIG_PCM_U32LE_MUXER 0 -+#define CONFIG_PCM_U24BE_MUXER 0 -+#define CONFIG_PCM_U24LE_MUXER 0 -+#define CONFIG_PCM_U16BE_MUXER 0 -+#define CONFIG_PCM_U16LE_MUXER 0 -+#define CONFIG_PCM_U8_MUXER 0 -+#define CONFIG_PSP_MUXER 0 -+#define CONFIG_RAWVIDEO_MUXER 0 -+#define CONFIG_RM_MUXER 0 -+#define CONFIG_ROQ_MUXER 0 -+#define CONFIG_RSO_MUXER 0 -+#define CONFIG_RTP_MUXER 0 -+#define CONFIG_RTP_MPEGTS_MUXER 0 -+#define CONFIG_RTSP_MUXER 0 -+#define CONFIG_SAP_MUXER 0 -+#define CONFIG_SBC_MUXER 0 -+#define CONFIG_SCC_MUXER 0 -+#define CONFIG_SEGAFILM_MUXER 0 -+#define CONFIG_SEGMENT_MUXER 0 -+#define CONFIG_STREAM_SEGMENT_MUXER 0 -+#define CONFIG_SMJPEG_MUXER 0 -+#define CONFIG_SMOOTHSTREAMING_MUXER 0 -+#define CONFIG_SOX_MUXER 0 -+#define CONFIG_SPX_MUXER 0 -+#define CONFIG_SPDIF_MUXER 0 -+#define CONFIG_SRT_MUXER 0 -+#define CONFIG_STREAMHASH_MUXER 0 -+#define CONFIG_SUP_MUXER 0 -+#define CONFIG_SWF_MUXER 0 -+#define CONFIG_TEE_MUXER 0 -+#define CONFIG_TG2_MUXER 0 -+#define CONFIG_TGP_MUXER 0 -+#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -+#define CONFIG_TRUEHD_MUXER 0 -+#define CONFIG_TTA_MUXER 0 -+#define CONFIG_TTML_MUXER 0 -+#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -+#define CONFIG_VC1_MUXER 0 -+#define CONFIG_VC1T_MUXER 0 -+#define CONFIG_VOC_MUXER 0 -+#define CONFIG_W64_MUXER 0 -+#define CONFIG_WAV_MUXER 0 -+#define CONFIG_WEBM_MUXER 0 -+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -+#define CONFIG_WEBM_CHUNK_MUXER 0 -+#define CONFIG_WEBP_MUXER 0 -+#define CONFIG_WEBVTT_MUXER 0 -+#define CONFIG_WSAUD_MUXER 0 -+#define CONFIG_WTV_MUXER 0 -+#define CONFIG_WV_MUXER 0 -+#define CONFIG_YUV4MPEGPIPE_MUXER 0 -+#define CONFIG_CHROMAPRINT_MUXER 0 -+#define CONFIG_ASYNC_PROTOCOL 0 -+#define CONFIG_BLURAY_PROTOCOL 0 -+#define CONFIG_CACHE_PROTOCOL 0 -+#define CONFIG_CONCAT_PROTOCOL 0 -+#define CONFIG_CONCATF_PROTOCOL 0 -+#define CONFIG_CRYPTO_PROTOCOL 0 -+#define CONFIG_DATA_PROTOCOL 0 -+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -+#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -+#define CONFIG_FILE_PROTOCOL 0 -+#define CONFIG_FTP_PROTOCOL 0 -+#define CONFIG_GOPHER_PROTOCOL 0 -+#define CONFIG_GOPHERS_PROTOCOL 0 -+#define CONFIG_HLS_PROTOCOL 0 -+#define CONFIG_HTTP_PROTOCOL 0 -+#define CONFIG_HTTPPROXY_PROTOCOL 0 -+#define CONFIG_HTTPS_PROTOCOL 0 -+#define CONFIG_ICECAST_PROTOCOL 0 -+#define CONFIG_MMSH_PROTOCOL 0 -+#define CONFIG_MMST_PROTOCOL 0 -+#define CONFIG_MD5_PROTOCOL 0 -+#define CONFIG_PIPE_PROTOCOL 0 -+#define CONFIG_PROMPEG_PROTOCOL 0 -+#define CONFIG_RTMP_PROTOCOL 0 -+#define CONFIG_RTMPE_PROTOCOL 0 -+#define CONFIG_RTMPS_PROTOCOL 0 -+#define CONFIG_RTMPT_PROTOCOL 0 -+#define CONFIG_RTMPTE_PROTOCOL 0 -+#define CONFIG_RTMPTS_PROTOCOL 0 -+#define CONFIG_RTP_PROTOCOL 0 -+#define CONFIG_SCTP_PROTOCOL 0 -+#define CONFIG_SRTP_PROTOCOL 0 -+#define CONFIG_SUBFILE_PROTOCOL 0 -+#define CONFIG_TEE_PROTOCOL 0 -+#define CONFIG_TCP_PROTOCOL 0 -+#define CONFIG_TLS_PROTOCOL 0 -+#define CONFIG_UDP_PROTOCOL 0 -+#define CONFIG_UDPLITE_PROTOCOL 0 -+#define CONFIG_UNIX_PROTOCOL 0 -+#define CONFIG_LIBAMQP_PROTOCOL 0 -+#define CONFIG_LIBRIST_PROTOCOL 0 -+#define CONFIG_LIBRTMP_PROTOCOL 0 -+#define CONFIG_LIBRTMPE_PROTOCOL 0 -+#define CONFIG_LIBRTMPS_PROTOCOL 0 -+#define CONFIG_LIBRTMPT_PROTOCOL 0 -+#define CONFIG_LIBRTMPTE_PROTOCOL 0 -+#define CONFIG_LIBSRT_PROTOCOL 0 -+#define CONFIG_LIBSSH_PROTOCOL 0 -+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 -+#define CONFIG_LIBZMQ_PROTOCOL 0 -+#define CONFIG_IPFS_PROTOCOL 0 -+#define CONFIG_IPNS_PROTOCOL 0 -+#endif /* FFMPEG_CONFIG_COMPONENTS_H */ -diff -Naur a/media/ffvpx/config_components.h b/media/ffvpx/config_components.h ---- a/media/ffvpx/config_components.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_components.h 2023-04-06 12:49:58.993149715 +0200 -@@ -0,0 +1,27 @@ -+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -+/* vim:set ts=2 sw=2 sts=2 et cindent: */ -+/* This Source Code Form is subject to the terms of the Mozilla Public -+ * License, v. 2.0. If a copy of the MPL was not distributed with this -+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -+ -+#ifndef MOZ_FFVPX_CONFIG__COMPONENTS_H -+#define MOZ_FFVPX_CONFIG__COMPONENTS_H -+ -+ -+#ifdef CONFIG_VAAPI -+#undef CONFIG_VAAPI -+#undef CONFIG_VAAPI_1 -+#undef CONFIG_VP8_VAAPI_HWACCEL -+#undef CONFIG_VP9_VAAPI_HWACCEL -+#undef CONFIG_AV1_VAAPI_HWACCEL -+#endif -+ -+#if defined(MOZ_FFVPX_AUDIOONLY) -+# include "config_components_audio_only.h" -+#else -+# include "config_components_audio_video.h" -+#endif -+ -+#include "config_override.h" -+ -+#endif // MOZ_FFVPX_CONFIG__COMPONENTS_H -diff -Naur a/media/ffvpx/config_darwin_aarch64.h b/media/ffvpx/config_darwin_aarch64.h ---- a/media/ffvpx/config_darwin_aarch64.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_darwin_aarch64.h 2023-04-06 12:49:19.192546469 +0200 -@@ -0,0 +1,740 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_H -+#define FFMPEG_CONFIG_H -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --enable-neon" -+#define FFMPEG_LICENSE "LGPL version 2.1 or later" -+#define CONFIG_THIS_YEAR 2022 -+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" -+#define AVCONV_DATADIR "/usr/local/share/ffmpeg" -+#define CC_IDENT "Apple clang version 13.1.6 (clang-1316.0.21.2.5)" -+#define OS_NAME darwin -+#define av_restrict restrict -+#define EXTERN_PREFIX "_" -+#define EXTERN_ASM _ -+#define BUILDSUF "" -+#define SLIBSUF ".dylib" -+#define HAVE_MMX2 HAVE_MMXEXT -+#define SWS_MAX_FILTER_SIZE 256 -+#define ARCH_AARCH64 1 -+#define ARCH_ALPHA 0 -+#define ARCH_ARM 0 -+#define ARCH_AVR32 0 -+#define ARCH_AVR32_AP 0 -+#define ARCH_AVR32_UC 0 -+#define ARCH_BFIN 0 -+#define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 -+#define ARCH_M68K 0 -+#define ARCH_MIPS 0 -+#define ARCH_MIPS64 0 -+#define ARCH_PARISC 0 -+#define ARCH_PPC 0 -+#define ARCH_PPC64 0 -+#define ARCH_RISCV 0 -+#define ARCH_S390 0 -+#define ARCH_SH4 0 -+#define ARCH_SPARC 0 -+#define ARCH_SPARC64 0 -+#define ARCH_TILEGX 0 -+#define ARCH_TILEPRO 0 -+#define ARCH_TOMI 0 -+#define ARCH_X86 0 -+#define ARCH_X86_32 0 -+#define ARCH_X86_64 0 -+#define HAVE_ARMV5TE 0 -+#define HAVE_ARMV6 0 -+#define HAVE_ARMV6T2 0 -+#define HAVE_ARMV8 1 -+#define HAVE_NEON 1 -+#define HAVE_VFP 1 -+#define HAVE_VFPV3 0 -+#define HAVE_SETEND 0 -+#define HAVE_ALTIVEC 0 -+#define HAVE_DCBZL 0 -+#define HAVE_LDBRX 0 -+#define HAVE_POWER8 0 -+#define HAVE_PPC4XX 0 -+#define HAVE_VSX 0 -+#define HAVE_AESNI 0 -+#define HAVE_AMD3DNOW 0 -+#define HAVE_AMD3DNOWEXT 0 -+#define HAVE_AVX 0 -+#define HAVE_AVX2 0 -+#define HAVE_AVX512 0 -+#define HAVE_AVX512ICL 0 -+#define HAVE_FMA3 0 -+#define HAVE_FMA4 0 -+#define HAVE_MMX 0 -+#define HAVE_MMXEXT 0 -+#define HAVE_SSE 0 -+#define HAVE_SSE2 0 -+#define HAVE_SSE3 0 -+#define HAVE_SSE4 0 -+#define HAVE_SSE42 0 -+#define HAVE_SSSE3 0 -+#define HAVE_XOP 0 -+#define HAVE_CPUNOP 0 -+#define HAVE_I686 0 -+#define HAVE_MIPSFPU 0 -+#define HAVE_MIPS32R2 0 -+#define HAVE_MIPS32R5 0 -+#define HAVE_MIPS64R2 0 -+#define HAVE_MIPS32R6 0 -+#define HAVE_MIPS64R6 0 -+#define HAVE_MIPSDSP 0 -+#define HAVE_MIPSDSPR2 0 -+#define HAVE_MSA 0 -+#define HAVE_LOONGSON2 0 -+#define HAVE_LOONGSON3 0 -+#define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 -+#define HAVE_ARMV5TE_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 0 -+#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV8_EXTERNAL 1 -+#define HAVE_NEON_EXTERNAL 1 -+#define HAVE_VFP_EXTERNAL 1 -+#define HAVE_VFPV3_EXTERNAL 0 -+#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_ALTIVEC_EXTERNAL 0 -+#define HAVE_DCBZL_EXTERNAL 0 -+#define HAVE_LDBRX_EXTERNAL 0 -+#define HAVE_POWER8_EXTERNAL 0 -+#define HAVE_PPC4XX_EXTERNAL 0 -+#define HAVE_VSX_EXTERNAL 0 -+#define HAVE_AESNI_EXTERNAL 0 -+#define HAVE_AMD3DNOW_EXTERNAL 0 -+#define HAVE_AMD3DNOWEXT_EXTERNAL 0 -+#define HAVE_AVX_EXTERNAL 0 -+#define HAVE_AVX2_EXTERNAL 0 -+#define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_AVX512ICL_EXTERNAL 0 -+#define HAVE_FMA3_EXTERNAL 0 -+#define HAVE_FMA4_EXTERNAL 0 -+#define HAVE_MMX_EXTERNAL 0 -+#define HAVE_MMXEXT_EXTERNAL 0 -+#define HAVE_SSE_EXTERNAL 0 -+#define HAVE_SSE2_EXTERNAL 0 -+#define HAVE_SSE3_EXTERNAL 0 -+#define HAVE_SSE4_EXTERNAL 0 -+#define HAVE_SSE42_EXTERNAL 0 -+#define HAVE_SSSE3_EXTERNAL 0 -+#define HAVE_XOP_EXTERNAL 0 -+#define HAVE_CPUNOP_EXTERNAL 0 -+#define HAVE_I686_EXTERNAL 0 -+#define HAVE_MIPSFPU_EXTERNAL 0 -+#define HAVE_MIPS32R2_EXTERNAL 0 -+#define HAVE_MIPS32R5_EXTERNAL 0 -+#define HAVE_MIPS64R2_EXTERNAL 0 -+#define HAVE_MIPS32R6_EXTERNAL 0 -+#define HAVE_MIPS64R6_EXTERNAL 0 -+#define HAVE_MIPSDSP_EXTERNAL 0 -+#define HAVE_MIPSDSPR2_EXTERNAL 0 -+#define HAVE_MSA_EXTERNAL 0 -+#define HAVE_LOONGSON2_EXTERNAL 0 -+#define HAVE_LOONGSON3_EXTERNAL 0 -+#define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 -+#define HAVE_ARMV5TE_INLINE 0 -+#define HAVE_ARMV6_INLINE 0 -+#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV8_INLINE 1 -+#define HAVE_NEON_INLINE 1 -+#define HAVE_VFP_INLINE 1 -+#define HAVE_VFPV3_INLINE 0 -+#define HAVE_SETEND_INLINE 0 -+#define HAVE_ALTIVEC_INLINE 0 -+#define HAVE_DCBZL_INLINE 0 -+#define HAVE_LDBRX_INLINE 0 -+#define HAVE_POWER8_INLINE 0 -+#define HAVE_PPC4XX_INLINE 0 -+#define HAVE_VSX_INLINE 0 -+#define HAVE_AESNI_INLINE 0 -+#define HAVE_AMD3DNOW_INLINE 0 -+#define HAVE_AMD3DNOWEXT_INLINE 0 -+#define HAVE_AVX_INLINE 0 -+#define HAVE_AVX2_INLINE 0 -+#define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 -+#define HAVE_FMA3_INLINE 0 -+#define HAVE_FMA4_INLINE 0 -+#define HAVE_MMX_INLINE 0 -+#define HAVE_MMXEXT_INLINE 0 -+#define HAVE_SSE_INLINE 0 -+#define HAVE_SSE2_INLINE 0 -+#define HAVE_SSE3_INLINE 0 -+#define HAVE_SSE4_INLINE 0 -+#define HAVE_SSE42_INLINE 0 -+#define HAVE_SSSE3_INLINE 0 -+#define HAVE_XOP_INLINE 0 -+#define HAVE_CPUNOP_INLINE 0 -+#define HAVE_I686_INLINE 0 -+#define HAVE_MIPSFPU_INLINE 0 -+#define HAVE_MIPS32R2_INLINE 0 -+#define HAVE_MIPS32R5_INLINE 0 -+#define HAVE_MIPS64R2_INLINE 0 -+#define HAVE_MIPS32R6_INLINE 0 -+#define HAVE_MIPS64R6_INLINE 0 -+#define HAVE_MIPSDSP_INLINE 0 -+#define HAVE_MIPSDSPR2_INLINE 0 -+#define HAVE_MSA_INLINE 0 -+#define HAVE_LOONGSON2_INLINE 0 -+#define HAVE_LOONGSON3_INLINE 0 -+#define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 -+#define HAVE_ALIGNED_STACK 1 -+#define HAVE_FAST_64BIT 1 -+#define HAVE_FAST_CLZ 1 -+#define HAVE_FAST_CMOV 0 -+#define HAVE_LOCAL_ALIGNED 0 -+#define HAVE_SIMD_ALIGN_16 1 -+#define HAVE_SIMD_ALIGN_32 0 -+#define HAVE_SIMD_ALIGN_64 0 -+#define HAVE_ATOMIC_CAS_PTR 0 -+#define HAVE_MACHINE_RW_BARRIER 0 -+#define HAVE_MEMORYBARRIER 0 -+#define HAVE_MM_EMPTY 0 -+#define HAVE_RDTSC 0 -+#define HAVE_SEM_TIMEDWAIT 0 -+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 -+#define HAVE_CABS 1 -+#define HAVE_CEXP 1 -+#define HAVE_INLINE_ASM 1 -+#define HAVE_SYMVER 1 -+#define HAVE_X86ASM 0 -+#define HAVE_BIGENDIAN 0 -+#define HAVE_FAST_UNALIGNED 1 -+#define HAVE_ARPA_INET_H 1 -+#define HAVE_ASM_TYPES_H 0 -+#define HAVE_CDIO_PARANOIA_H 0 -+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 -+#define HAVE_CUDA_H 0 -+#define HAVE_DISPATCH_DISPATCH_H 1 -+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 -+#define HAVE_DEV_IC_BT8XX_H 0 -+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 -+#define HAVE_DIRECT_H 0 -+#define HAVE_DIRENT_H 1 -+#define HAVE_DXGIDEBUG_H 0 -+#define HAVE_DXVA_H 0 -+#define HAVE_ES2_GL_H 0 -+#define HAVE_GSM_H 0 -+#define HAVE_IO_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 0 -+#define HAVE_MACHINE_IOCTL_BT848_H 0 -+#define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_MALLOC_H 0 -+#define HAVE_OPENCV2_CORE_CORE_C_H 0 -+#define HAVE_OPENGL_GL3_H 0 -+#define HAVE_POLL_H 1 -+#define HAVE_SYS_PARAM_H 1 -+#define HAVE_SYS_RESOURCE_H 1 -+#define HAVE_SYS_SELECT_H 1 -+#define HAVE_SYS_SOUNDCARD_H 0 -+#define HAVE_SYS_TIME_H 1 -+#define HAVE_SYS_UN_H 1 -+#define HAVE_SYS_VIDEOIO_H 0 -+#define HAVE_TERMIOS_H 1 -+#define HAVE_UDPLITE_H 0 -+#define HAVE_UNISTD_H 1 -+#define HAVE_VALGRIND_VALGRIND_H 0 -+#define HAVE_WINDOWS_H 0 -+#define HAVE_WINSOCK2_H 0 -+#define HAVE_INTRINSICS_NEON 1 -+#define HAVE_ATANF 1 -+#define HAVE_ATAN2F 1 -+#define HAVE_CBRT 1 -+#define HAVE_CBRTF 1 -+#define HAVE_COPYSIGN 1 -+#define HAVE_COSF 1 -+#define HAVE_ERF 1 -+#define HAVE_EXP2 1 -+#define HAVE_EXP2F 1 -+#define HAVE_EXPF 1 -+#define HAVE_HYPOT 1 -+#define HAVE_ISFINITE 1 -+#define HAVE_ISINF 1 -+#define HAVE_ISNAN 1 -+#define HAVE_LDEXPF 1 -+#define HAVE_LLRINT 1 -+#define HAVE_LLRINTF 1 -+#define HAVE_LOG2 1 -+#define HAVE_LOG2F 1 -+#define HAVE_LOG10F 1 -+#define HAVE_LRINT 1 -+#define HAVE_LRINTF 1 -+#define HAVE_POWF 1 -+#define HAVE_RINT 1 -+#define HAVE_ROUND 1 -+#define HAVE_ROUNDF 1 -+#define HAVE_SINF 1 -+#define HAVE_TRUNC 1 -+#define HAVE_TRUNCF 1 -+#define HAVE_DOS_PATHS 0 -+#define HAVE_LIBC_MSVCRT 0 -+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 -+#define HAVE_SECTION_DATA_REL_RO 0 -+#define HAVE_THREADS 1 -+#define HAVE_UWP 0 -+#define HAVE_WINRT 0 -+#define HAVE_ACCESS 1 -+#define HAVE_ALIGNED_MALLOC 0 -+#define HAVE_ARC4RANDOM 1 -+#define HAVE_CLOCK_GETTIME 1 -+#define HAVE_CLOSESOCKET 0 -+#define HAVE_COMMANDLINETOARGVW 0 -+#define HAVE_FCNTL 1 -+#define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 0 -+#define HAVE_GETENV 1 -+#define HAVE_GETHRTIME 0 -+#define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 -+#define HAVE_GETPROCESSAFFINITYMASK 0 -+#define HAVE_GETPROCESSMEMORYINFO 0 -+#define HAVE_GETPROCESSTIMES 0 -+#define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 -+#define HAVE_GETSYSTEMTIMEASFILETIME 0 -+#define HAVE_GETTIMEOFDAY 1 -+#define HAVE_GLOB 1 -+#define HAVE_GLXGETPROCADDRESS 0 -+#define HAVE_GMTIME_R 1 -+#define HAVE_INET_ATON 1 -+#define HAVE_ISATTY 1 -+#define HAVE_KBHIT 0 -+#define HAVE_LOCALTIME_R 1 -+#define HAVE_LSTAT 1 -+#define HAVE_LZO1X_999_COMPRESS 0 -+#define HAVE_MACH_ABSOLUTE_TIME 1 -+#define HAVE_MAPVIEWOFFILE 0 -+#define HAVE_MEMALIGN 0 -+#define HAVE_MKSTEMP 1 -+#define HAVE_MMAP 1 -+#define HAVE_MPROTECT 1 -+#define HAVE_NANOSLEEP 1 -+#define HAVE_PEEKNAMEDPIPE 0 -+#define HAVE_POSIX_MEMALIGN 1 -+#define HAVE_PTHREAD_CANCEL 1 -+#define HAVE_SCHED_GETAFFINITY 0 -+#define HAVE_SECITEMIMPORT 0 -+#define HAVE_SETCONSOLETEXTATTRIBUTE 0 -+#define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 -+#define HAVE_SETMODE 0 -+#define HAVE_SETRLIMIT 1 -+#define HAVE_SLEEP 0 -+#define HAVE_STRERROR_R 1 -+#define HAVE_SYSCONF 1 -+#define HAVE_SYSCTL 1 -+#define HAVE_USLEEP 1 -+#define HAVE_UTGETOSTYPEFROMSTRING 0 -+#define HAVE_VIRTUALALLOC 0 -+#define HAVE_WGLGETPROCADDRESS 0 -+#define HAVE_BCRYPT 0 -+#define HAVE_VAAPI_DRM 0 -+#define HAVE_VAAPI_X11 0 -+#define HAVE_VDPAU_X11 0 -+#define HAVE_PTHREADS 1 -+#define HAVE_OS2THREADS 0 -+#define HAVE_W32THREADS 0 -+#define HAVE_AS_ARCH_DIRECTIVE 0 -+#define HAVE_AS_DN_DIRECTIVE 0 -+#define HAVE_AS_FPU_DIRECTIVE 0 -+#define HAVE_AS_FUNC 0 -+#define HAVE_AS_OBJECT_ARCH 0 -+#define HAVE_ASM_MOD_Q 0 -+#define HAVE_BLOCKS_EXTENSION 1 -+#define HAVE_EBP_AVAILABLE 0 -+#define HAVE_EBX_AVAILABLE 0 -+#define HAVE_GNU_AS 0 -+#define HAVE_GNU_WINDRES 0 -+#define HAVE_IBM_ASM 0 -+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 -+#define HAVE_INLINE_ASM_LABELS 1 -+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 -+#define HAVE_PRAGMA_DEPRECATED 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 -+#define HAVE_SYMVER_ASM_LABEL 1 -+#define HAVE_SYMVER_GNU_ASM 0 -+#define HAVE_VFP_ARGS 0 -+#define HAVE_XFORM_ASM 0 -+#define HAVE_XMM_CLOBBERS 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 -+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 -+#define HAVE_SOCKLEN_T 1 -+#define HAVE_STRUCT_ADDRINFO 1 -+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -+#define HAVE_STRUCT_IP_MREQ_SOURCE 1 -+#define HAVE_STRUCT_IPV6_MREQ 1 -+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 -+#define HAVE_STRUCT_POLLFD 1 -+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 -+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 -+#define HAVE_STRUCT_SOCKADDR_IN6 1 -+#define HAVE_STRUCT_SOCKADDR_SA_LEN 1 -+#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 1 -+#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_OPENCL_D3D11 0 -+#define HAVE_OPENCL_DRM_ARM 0 -+#define HAVE_OPENCL_DRM_BEIGNET 0 -+#define HAVE_OPENCL_DXVA2 0 -+#define HAVE_OPENCL_VAAPI_BEIGNET 0 -+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 -+#define HAVE_PERL 1 -+#define HAVE_POD2MAN 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 -+#define CONFIG_DOC 0 -+#define CONFIG_HTMLPAGES 0 -+#define CONFIG_MANPAGES 1 -+#define CONFIG_PODPAGES 1 -+#define CONFIG_TXTPAGES 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 -+#define CONFIG_AVIO_READING_EXAMPLE 1 -+#define CONFIG_DECODE_AUDIO_EXAMPLE 1 -+#define CONFIG_DECODE_VIDEO_EXAMPLE 1 -+#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 -+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 -+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 -+#define CONFIG_EXTRACT_MVS_EXAMPLE 0 -+#define CONFIG_FILTER_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 -+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 -+#define CONFIG_HW_DECODE_EXAMPLE 0 -+#define CONFIG_METADATA_EXAMPLE 0 -+#define CONFIG_MUXING_EXAMPLE 0 -+#define CONFIG_QSVDEC_EXAMPLE 0 -+#define CONFIG_REMUXING_EXAMPLE 0 -+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 -+#define CONFIG_SCALING_VIDEO_EXAMPLE 0 -+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 -+#define CONFIG_TRANSCODING_EXAMPLE 0 -+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 -+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 -+#define CONFIG_AVISYNTH 0 -+#define CONFIG_FREI0R 0 -+#define CONFIG_LIBCDIO 0 -+#define CONFIG_LIBDAVS2 0 -+#define CONFIG_LIBRUBBERBAND 0 -+#define CONFIG_LIBVIDSTAB 0 -+#define CONFIG_LIBX264 0 -+#define CONFIG_LIBX265 0 -+#define CONFIG_LIBXAVS 0 -+#define CONFIG_LIBXAVS2 0 -+#define CONFIG_LIBXVID 0 -+#define CONFIG_DECKLINK 0 -+#define CONFIG_LIBFDK_AAC 0 -+#define CONFIG_LIBTLS 0 -+#define CONFIG_GMP 0 -+#define CONFIG_LIBARIBB24 0 -+#define CONFIG_LIBLENSFUN 0 -+#define CONFIG_LIBOPENCORE_AMRNB 0 -+#define CONFIG_LIBOPENCORE_AMRWB 0 -+#define CONFIG_LIBVO_AMRWBENC 0 -+#define CONFIG_MBEDTLS 0 -+#define CONFIG_RKMPP 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_CHROMAPRINT 0 -+#define CONFIG_GCRYPT 0 -+#define CONFIG_GNUTLS 0 -+#define CONFIG_JNI 0 -+#define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 -+#define CONFIG_LIBAOM 0 -+#define CONFIG_LIBASS 0 -+#define CONFIG_LIBBLURAY 0 -+#define CONFIG_LIBBS2B 0 -+#define CONFIG_LIBCACA 0 -+#define CONFIG_LIBCELT 0 -+#define CONFIG_LIBCODEC2 0 -+#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDC1394 0 -+#define CONFIG_LIBDRM 0 -+#define CONFIG_LIBFLITE 0 -+#define CONFIG_LIBFONTCONFIG 0 -+#define CONFIG_LIBFREETYPE 0 -+#define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 -+#define CONFIG_LIBGME 0 -+#define CONFIG_LIBGSM 0 -+#define CONFIG_LIBIEC61883 0 -+#define CONFIG_LIBILBC 0 -+#define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 -+#define CONFIG_LIBKLVANC 0 -+#define CONFIG_LIBKVAZAAR 0 -+#define CONFIG_LIBMODPLUG 0 -+#define CONFIG_LIBMP3LAME 0 -+#define CONFIG_LIBMYSOFA 0 -+#define CONFIG_LIBOPENCV 0 -+#define CONFIG_LIBOPENH264 0 -+#define CONFIG_LIBOPENJPEG 0 -+#define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 -+#define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 -+#define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 -+#define CONFIG_LIBRSVG 0 -+#define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 -+#define CONFIG_LIBSHINE 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_LIBSNAPPY 0 -+#define CONFIG_LIBSOXR 0 -+#define CONFIG_LIBSPEEX 0 -+#define CONFIG_LIBSRT 0 -+#define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 -+#define CONFIG_LIBTENSORFLOW 0 -+#define CONFIG_LIBTESSERACT 0 -+#define CONFIG_LIBTHEORA 0 -+#define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 -+#define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 -+#define CONFIG_LIBVORBIS 0 -+#define CONFIG_LIBVPX 0 -+#define CONFIG_LIBWEBP 0 -+#define CONFIG_LIBXML2 0 -+#define CONFIG_LIBZIMG 0 -+#define CONFIG_LIBZMQ 0 -+#define CONFIG_LIBZVBI 0 -+#define CONFIG_LV2 0 -+#define CONFIG_MEDIACODEC 0 -+#define CONFIG_OPENAL 0 -+#define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 -+#define CONFIG_POCKETSPHINX 0 -+#define CONFIG_VAPOURSYNTH 0 -+#define CONFIG_ALSA 0 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 -+#define CONFIG_ICONV 0 -+#define CONFIG_LIBXCB 0 -+#define CONFIG_LIBXCB_SHM 0 -+#define CONFIG_LIBXCB_SHAPE 0 -+#define CONFIG_LIBXCB_XFIXES 0 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 -+#define CONFIG_SDL2 0 -+#define CONFIG_SECURETRANSPORT 0 -+#define CONFIG_SNDIO 0 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 -+#define CONFIG_CUDA_NVCC 0 -+#define CONFIG_CUDA_SDK 0 -+#define CONFIG_LIBNPP 0 -+#define CONFIG_LIBMFX 0 -+#define CONFIG_MMAL 0 -+#define CONFIG_OMX 0 -+#define CONFIG_OPENCL 0 -+#define CONFIG_AMF 0 -+#define CONFIG_AUDIOTOOLBOX 0 -+#define CONFIG_CRYSTALHD 0 -+#define CONFIG_CUDA 0 -+#define CONFIG_CUDA_LLVM 0 -+#define CONFIG_CUVID 0 -+#define CONFIG_D3D11VA 0 -+#define CONFIG_DXVA2 0 -+#define CONFIG_FFNVCODEC 0 -+#define CONFIG_NVDEC 0 -+#define CONFIG_NVENC 0 -+#define CONFIG_VAAPI 0 -+#define CONFIG_VDPAU 0 -+#define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 -+#define CONFIG_V4L2_M2M 0 -+#define CONFIG_FTRAPV 0 -+#define CONFIG_GRAY 0 -+#define CONFIG_HARDCODED_TABLES 0 -+#define CONFIG_OMX_RPI 0 -+#define CONFIG_RUNTIME_CPUDETECT 1 -+#define CONFIG_SAFE_BITSTREAM_READER 1 -+#define CONFIG_SHARED 1 -+#define CONFIG_SMALL 0 -+#define CONFIG_STATIC 0 -+#define CONFIG_SWSCALE_ALPHA 1 -+#define CONFIG_GPL 0 -+#define CONFIG_NONFREE 0 -+#define CONFIG_VERSION3 0 -+#define CONFIG_AVDEVICE 0 -+#define CONFIG_AVFILTER 0 -+#define CONFIG_SWSCALE 0 -+#define CONFIG_POSTPROC 0 -+#define CONFIG_AVFORMAT 0 -+#define CONFIG_AVCODEC 1 -+#define CONFIG_SWRESAMPLE 0 -+#define CONFIG_AVUTIL 1 -+#define CONFIG_FFPLAY 0 -+#define CONFIG_FFPROBE 0 -+#define CONFIG_FFMPEG 0 -+#define CONFIG_DCT 1 -+#define CONFIG_DWT 0 -+#define CONFIG_ERROR_RESILIENCE 0 -+#define CONFIG_FAAN 1 -+#define CONFIG_FAST_UNALIGNED 1 -+#define CONFIG_FFT 1 -+#define CONFIG_LSP 0 -+#define CONFIG_MDCT 0 -+#define CONFIG_PIXELUTILS 0 -+#define CONFIG_NETWORK 0 -+#define CONFIG_RDFT 1 -+#define CONFIG_AUTODETECT 0 -+#define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 -+#define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 -+#define CONFIG_MEMORY_POISONING 0 -+#define CONFIG_NEON_CLOBBER_TEST 0 -+#define CONFIG_OSSFUZZ 0 -+#define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 -+#define CONFIG_THUMB 0 -+#define CONFIG_VALGRIND_BACKTRACE 0 -+#define CONFIG_XMM_CLOBBER_TEST 0 -+#define CONFIG_BSFS 0 -+#define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 -+#define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 -+#define CONFIG_AANDCTTABLES 0 -+#define CONFIG_AC3DSP 0 -+#define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 -+#define CONFIG_AUDIO_FRAME_QUEUE 0 -+#define CONFIG_AUDIODSP 0 -+#define CONFIG_BLOCKDSP 0 -+#define CONFIG_BSWAPDSP 0 -+#define CONFIG_CABAC 0 -+#define CONFIG_CBS 0 -+#define CONFIG_CBS_AV1 0 -+#define CONFIG_CBS_H264 0 -+#define CONFIG_CBS_H265 0 -+#define CONFIG_CBS_JPEG 0 -+#define CONFIG_CBS_MPEG2 0 -+#define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 -+#define CONFIG_DIRAC_PARSE 0 -+#define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 -+#define CONFIG_DVPROFILE 0 -+#define CONFIG_EXIF 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 -+#define CONFIG_FLACDSP 1 -+#define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 -+#define CONFIG_G722DSP 0 -+#define CONFIG_GOLOMB 0 -+#define CONFIG_GPLV3 0 -+#define CONFIG_H263DSP 0 -+#define CONFIG_H264CHROMA 0 -+#define CONFIG_H264DSP 0 -+#define CONFIG_H264PARSE 0 -+#define CONFIG_H264PRED 1 -+#define CONFIG_H264QPEL 0 -+#define CONFIG_HEVCPARSE 0 -+#define CONFIG_HPELDSP 0 -+#define CONFIG_HUFFMAN 0 -+#define CONFIG_HUFFYUVDSP 0 -+#define CONFIG_HUFFYUVENCDSP 0 -+#define CONFIG_IDCTDSP 1 -+#define CONFIG_IIRFILTER 0 -+#define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 -+#define CONFIG_INTRAX8 0 -+#define CONFIG_ISO_MEDIA 0 -+#define CONFIG_IVIDSP 0 -+#define CONFIG_JPEGTABLES 0 -+#define CONFIG_LGPLV3 0 -+#define CONFIG_LIBX262 0 -+#define CONFIG_LLAUDDSP 0 -+#define CONFIG_LLVIDDSP 0 -+#define CONFIG_LLVIDENCDSP 0 -+#define CONFIG_LPC 0 -+#define CONFIG_LZF 0 -+#define CONFIG_ME_CMP 0 -+#define CONFIG_MPEG_ER 0 -+#define CONFIG_MPEGAUDIO 1 -+#define CONFIG_MPEGAUDIODSP 1 -+#define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 -+#define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 -+#define CONFIG_MPEGVIDEOENC 0 -+#define CONFIG_MSS34DSP 0 -+#define CONFIG_PIXBLOCKDSP 0 -+#define CONFIG_QPELDSP 0 -+#define CONFIG_QSV 0 -+#define CONFIG_QSVDEC 0 -+#define CONFIG_QSVENC 0 -+#define CONFIG_QSVVPP 0 -+#define CONFIG_RANGECODER 0 -+#define CONFIG_RIFFDEC 0 -+#define CONFIG_RIFFENC 0 -+#define CONFIG_RTPDEC 0 -+#define CONFIG_RTPENC_CHAIN 0 -+#define CONFIG_RV34DSP 0 -+#define CONFIG_SCENE_SAD 0 -+#define CONFIG_SINEWIN 0 -+#define CONFIG_SNAPPY 0 -+#define CONFIG_SRTP 0 -+#define CONFIG_STARTCODE 0 -+#define CONFIG_TEXTUREDSP 0 -+#define CONFIG_TEXTUREDSPENC 0 -+#define CONFIG_TPELDSP 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VAAPI_ENCODE 0 -+#define CONFIG_VC1DSP 0 -+#define CONFIG_VIDEODSP 1 -+#define CONFIG_VP3DSP 0 -+#define CONFIG_VP56DSP 0 -+#define CONFIG_VP8DSP 1 -+#define CONFIG_WMA_FREQS 0 -+#define CONFIG_WMV2DSP 0 -+#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_generic.h b/media/ffvpx/config_generic.h ---- a/media/ffvpx/config_generic.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_generic.h 2023-04-06 12:49:19.192546469 +0200 -@@ -0,0 +1,740 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_H -+#define FFMPEG_CONFIG_H -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='mp3,flac' --disable-static --enable-shared --disable-autodetect --enable-small --disable-asm" -+#define FFMPEG_LICENSE "LGPL version 2.1 or later" -+#define CONFIG_THIS_YEAR 2022 -+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" -+#define AVCONV_DATADIR "/usr/local/share/ffmpeg" -+#define CC_IDENT "Apple clang version 13.1.6 (clang-1316.0.21.2.5)" -+#define OS_NAME darwin -+#define av_restrict restrict -+#define EXTERN_PREFIX "_" -+#define EXTERN_ASM _ -+#define BUILDSUF "" -+#define SLIBSUF ".dylib" -+#define HAVE_MMX2 HAVE_MMXEXT -+#define SWS_MAX_FILTER_SIZE 256 -+#define ARCH_AARCH64 0 -+#define ARCH_ALPHA 0 -+#define ARCH_ARM 0 -+#define ARCH_AVR32 0 -+#define ARCH_AVR32_AP 0 -+#define ARCH_AVR32_UC 0 -+#define ARCH_BFIN 0 -+#define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 -+#define ARCH_M68K 0 -+#define ARCH_MIPS 0 -+#define ARCH_MIPS64 0 -+#define ARCH_PARISC 0 -+#define ARCH_PPC 0 -+#define ARCH_PPC64 0 -+#define ARCH_RISCV 0 -+#define ARCH_S390 0 -+#define ARCH_SH4 0 -+#define ARCH_SPARC 0 -+#define ARCH_SPARC64 0 -+#define ARCH_TILEGX 0 -+#define ARCH_TILEPRO 0 -+#define ARCH_TOMI 0 -+#define ARCH_X86 0 -+#define ARCH_X86_32 0 -+#define ARCH_X86_64 0 -+#define HAVE_ARMV5TE 0 -+#define HAVE_ARMV6 0 -+#define HAVE_ARMV6T2 0 -+#define HAVE_ARMV8 0 -+#define HAVE_NEON 0 -+#define HAVE_VFP 0 -+#define HAVE_VFPV3 0 -+#define HAVE_SETEND 0 -+#define HAVE_ALTIVEC 0 -+#define HAVE_DCBZL 0 -+#define HAVE_LDBRX 0 -+#define HAVE_POWER8 0 -+#define HAVE_PPC4XX 0 -+#define HAVE_VSX 0 -+#define HAVE_AESNI 0 -+#define HAVE_AMD3DNOW 0 -+#define HAVE_AMD3DNOWEXT 0 -+#define HAVE_AVX 0 -+#define HAVE_AVX2 0 -+#define HAVE_AVX512 0 -+#define HAVE_AVX512ICL 0 -+#define HAVE_FMA3 0 -+#define HAVE_FMA4 0 -+#define HAVE_MMX 0 -+#define HAVE_MMXEXT 0 -+#define HAVE_SSE 0 -+#define HAVE_SSE2 0 -+#define HAVE_SSE3 0 -+#define HAVE_SSE4 0 -+#define HAVE_SSE42 0 -+#define HAVE_SSSE3 0 -+#define HAVE_XOP 0 -+#define HAVE_CPUNOP 0 -+#define HAVE_I686 0 -+#define HAVE_MIPSFPU 0 -+#define HAVE_MIPS32R2 0 -+#define HAVE_MIPS32R5 0 -+#define HAVE_MIPS64R2 0 -+#define HAVE_MIPS32R6 0 -+#define HAVE_MIPS64R6 0 -+#define HAVE_MIPSDSP 0 -+#define HAVE_MIPSDSPR2 0 -+#define HAVE_MSA 0 -+#define HAVE_LOONGSON2 0 -+#define HAVE_LOONGSON3 0 -+#define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 -+#define HAVE_ARMV5TE_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 0 -+#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV8_EXTERNAL 1 -+#define HAVE_NEON_EXTERNAL 1 -+#define HAVE_VFP_EXTERNAL 1 -+#define HAVE_VFPV3_EXTERNAL 0 -+#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_ALTIVEC_EXTERNAL 0 -+#define HAVE_DCBZL_EXTERNAL 0 -+#define HAVE_LDBRX_EXTERNAL 0 -+#define HAVE_POWER8_EXTERNAL 0 -+#define HAVE_PPC4XX_EXTERNAL 0 -+#define HAVE_VSX_EXTERNAL 0 -+#define HAVE_AESNI_EXTERNAL 0 -+#define HAVE_AMD3DNOW_EXTERNAL 0 -+#define HAVE_AMD3DNOWEXT_EXTERNAL 0 -+#define HAVE_AVX_EXTERNAL 0 -+#define HAVE_AVX2_EXTERNAL 0 -+#define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_AVX512ICL_EXTERNAL 0 -+#define HAVE_FMA3_EXTERNAL 0 -+#define HAVE_FMA4_EXTERNAL 0 -+#define HAVE_MMX_EXTERNAL 0 -+#define HAVE_MMXEXT_EXTERNAL 0 -+#define HAVE_SSE_EXTERNAL 0 -+#define HAVE_SSE2_EXTERNAL 0 -+#define HAVE_SSE3_EXTERNAL 0 -+#define HAVE_SSE4_EXTERNAL 0 -+#define HAVE_SSE42_EXTERNAL 0 -+#define HAVE_SSSE3_EXTERNAL 0 -+#define HAVE_XOP_EXTERNAL 0 -+#define HAVE_CPUNOP_EXTERNAL 0 -+#define HAVE_I686_EXTERNAL 0 -+#define HAVE_MIPSFPU_EXTERNAL 0 -+#define HAVE_MIPS32R2_EXTERNAL 0 -+#define HAVE_MIPS32R5_EXTERNAL 0 -+#define HAVE_MIPS64R2_EXTERNAL 0 -+#define HAVE_MIPS32R6_EXTERNAL 0 -+#define HAVE_MIPS64R6_EXTERNAL 0 -+#define HAVE_MIPSDSP_EXTERNAL 0 -+#define HAVE_MIPSDSPR2_EXTERNAL 0 -+#define HAVE_MSA_EXTERNAL 0 -+#define HAVE_LOONGSON2_EXTERNAL 0 -+#define HAVE_LOONGSON3_EXTERNAL 0 -+#define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 -+#define HAVE_ARMV5TE_INLINE 0 -+#define HAVE_ARMV6_INLINE 0 -+#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV8_INLINE 1 -+#define HAVE_NEON_INLINE 1 -+#define HAVE_VFP_INLINE 1 -+#define HAVE_VFPV3_INLINE 0 -+#define HAVE_SETEND_INLINE 0 -+#define HAVE_ALTIVEC_INLINE 0 -+#define HAVE_DCBZL_INLINE 0 -+#define HAVE_LDBRX_INLINE 0 -+#define HAVE_POWER8_INLINE 0 -+#define HAVE_PPC4XX_INLINE 0 -+#define HAVE_VSX_INLINE 0 -+#define HAVE_AESNI_INLINE 0 -+#define HAVE_AMD3DNOW_INLINE 0 -+#define HAVE_AMD3DNOWEXT_INLINE 0 -+#define HAVE_AVX_INLINE 0 -+#define HAVE_AVX2_INLINE 0 -+#define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 -+#define HAVE_FMA3_INLINE 0 -+#define HAVE_FMA4_INLINE 0 -+#define HAVE_MMX_INLINE 0 -+#define HAVE_MMXEXT_INLINE 0 -+#define HAVE_SSE_INLINE 0 -+#define HAVE_SSE2_INLINE 0 -+#define HAVE_SSE3_INLINE 0 -+#define HAVE_SSE4_INLINE 0 -+#define HAVE_SSE42_INLINE 0 -+#define HAVE_SSSE3_INLINE 0 -+#define HAVE_XOP_INLINE 0 -+#define HAVE_CPUNOP_INLINE 0 -+#define HAVE_I686_INLINE 0 -+#define HAVE_MIPSFPU_INLINE 0 -+#define HAVE_MIPS32R2_INLINE 0 -+#define HAVE_MIPS32R5_INLINE 0 -+#define HAVE_MIPS64R2_INLINE 0 -+#define HAVE_MIPS32R6_INLINE 0 -+#define HAVE_MIPS64R6_INLINE 0 -+#define HAVE_MIPSDSP_INLINE 0 -+#define HAVE_MIPSDSPR2_INLINE 0 -+#define HAVE_MSA_INLINE 0 -+#define HAVE_LOONGSON2_INLINE 0 -+#define HAVE_LOONGSON3_INLINE 0 -+#define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 -+#define HAVE_ALIGNED_STACK 0 -+#define HAVE_FAST_64BIT 0 -+#define HAVE_FAST_CLZ 0 -+#define HAVE_FAST_CMOV 0 -+#define HAVE_LOCAL_ALIGNED 0 -+#define HAVE_SIMD_ALIGN_16 0 -+#define HAVE_SIMD_ALIGN_32 0 -+#define HAVE_SIMD_ALIGN_64 0 -+#define HAVE_ATOMIC_CAS_PTR 0 -+#define HAVE_MACHINE_RW_BARRIER 0 -+#define HAVE_MEMORYBARRIER 0 -+#define HAVE_MM_EMPTY 0 -+#define HAVE_RDTSC 0 -+#define HAVE_SEM_TIMEDWAIT 0 -+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 -+#define HAVE_CABS 1 -+#define HAVE_CEXP 1 -+#define HAVE_INLINE_ASM 1 -+#define HAVE_SYMVER 1 -+#define HAVE_X86ASM 0 -+#define HAVE_BIGENDIAN 0 -+#define HAVE_FAST_UNALIGNED 0 -+#define HAVE_ARPA_INET_H 1 -+#define HAVE_ASM_TYPES_H 0 -+#define HAVE_CDIO_PARANOIA_H 0 -+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 -+#define HAVE_CUDA_H 0 -+#define HAVE_DISPATCH_DISPATCH_H 1 -+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 -+#define HAVE_DEV_IC_BT8XX_H 0 -+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 -+#define HAVE_DIRECT_H 0 -+#define HAVE_DIRENT_H 1 -+#define HAVE_DXGIDEBUG_H 0 -+#define HAVE_DXVA_H 0 -+#define HAVE_ES2_GL_H 0 -+#define HAVE_GSM_H 0 -+#define HAVE_IO_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 0 -+#define HAVE_MACHINE_IOCTL_BT848_H 0 -+#define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_MALLOC_H 0 -+#define HAVE_OPENCV2_CORE_CORE_C_H 0 -+#define HAVE_OPENGL_GL3_H 0 -+#define HAVE_POLL_H 1 -+#define HAVE_SYS_PARAM_H 1 -+#define HAVE_SYS_RESOURCE_H 1 -+#define HAVE_SYS_SELECT_H 1 -+#define HAVE_SYS_SOUNDCARD_H 0 -+#define HAVE_SYS_TIME_H 1 -+#define HAVE_SYS_UN_H 1 -+#define HAVE_SYS_VIDEOIO_H 0 -+#define HAVE_TERMIOS_H 1 -+#define HAVE_UDPLITE_H 0 -+#define HAVE_UNISTD_H 1 -+#define HAVE_VALGRIND_VALGRIND_H 0 -+#define HAVE_WINDOWS_H 0 -+#define HAVE_WINSOCK2_H 0 -+#define HAVE_INTRINSICS_NEON 0 -+#define HAVE_ATANF 1 -+#define HAVE_ATAN2F 1 -+#define HAVE_CBRT 1 -+#define HAVE_CBRTF 1 -+#define HAVE_COPYSIGN 1 -+#define HAVE_COSF 1 -+#define HAVE_ERF 1 -+#define HAVE_EXP2 1 -+#define HAVE_EXP2F 1 -+#define HAVE_EXPF 1 -+#define HAVE_HYPOT 1 -+#define HAVE_ISFINITE 1 -+#define HAVE_ISINF 1 -+#define HAVE_ISNAN 1 -+#define HAVE_LDEXPF 1 -+#define HAVE_LLRINT 1 -+#define HAVE_LLRINTF 1 -+#define HAVE_LOG2 1 -+#define HAVE_LOG2F 1 -+#define HAVE_LOG10F 1 -+#define HAVE_LRINT 1 -+#define HAVE_LRINTF 1 -+#define HAVE_POWF 1 -+#define HAVE_RINT 1 -+#define HAVE_ROUND 1 -+#define HAVE_ROUNDF 1 -+#define HAVE_SINF 1 -+#define HAVE_TRUNC 1 -+#define HAVE_TRUNCF 1 -+#define HAVE_DOS_PATHS 0 -+#define HAVE_LIBC_MSVCRT 0 -+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 -+#define HAVE_SECTION_DATA_REL_RO 0 -+#define HAVE_THREADS 1 -+#define HAVE_UWP 0 -+#define HAVE_WINRT 0 -+#define HAVE_ACCESS 1 -+#define HAVE_ALIGNED_MALLOC 0 -+#define HAVE_ARC4RANDOM 1 -+#define HAVE_CLOCK_GETTIME 1 -+#define HAVE_CLOSESOCKET 0 -+#define HAVE_COMMANDLINETOARGVW 0 -+#define HAVE_FCNTL 1 -+#define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 0 -+#define HAVE_GETENV 1 -+#define HAVE_GETHRTIME 0 -+#define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 -+#define HAVE_GETPROCESSAFFINITYMASK 0 -+#define HAVE_GETPROCESSMEMORYINFO 0 -+#define HAVE_GETPROCESSTIMES 0 -+#define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 -+#define HAVE_GETSYSTEMTIMEASFILETIME 0 -+#define HAVE_GETTIMEOFDAY 1 -+#define HAVE_GLOB 1 -+#define HAVE_GLXGETPROCADDRESS 0 -+#define HAVE_GMTIME_R 1 -+#define HAVE_INET_ATON 1 -+#define HAVE_ISATTY 1 -+#define HAVE_KBHIT 0 -+#define HAVE_LOCALTIME_R 1 -+#define HAVE_LSTAT 1 -+#define HAVE_LZO1X_999_COMPRESS 0 -+#define HAVE_MACH_ABSOLUTE_TIME 0 -+#define HAVE_MAPVIEWOFFILE 0 -+#define HAVE_MEMALIGN 0 -+#define HAVE_MKSTEMP 1 -+#define HAVE_MMAP 1 -+#define HAVE_MPROTECT 1 -+#define HAVE_NANOSLEEP 1 -+#define HAVE_PEEKNAMEDPIPE 0 -+#define HAVE_POSIX_MEMALIGN 0 -+#define HAVE_PTHREAD_CANCEL 1 -+#define HAVE_SCHED_GETAFFINITY 0 -+#define HAVE_SECITEMIMPORT 0 -+#define HAVE_SETCONSOLETEXTATTRIBUTE 0 -+#define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 -+#define HAVE_SETMODE 0 -+#define HAVE_SETRLIMIT 1 -+#define HAVE_SLEEP 0 -+#define HAVE_STRERROR_R 1 -+#define HAVE_SYSCONF 1 -+#define HAVE_SYSCTL 0 -+#define HAVE_USLEEP 1 -+#define HAVE_UTGETOSTYPEFROMSTRING 0 -+#define HAVE_VIRTUALALLOC 0 -+#define HAVE_WGLGETPROCADDRESS 0 -+#define HAVE_BCRYPT 0 -+#define HAVE_VAAPI_DRM 0 -+#define HAVE_VAAPI_X11 0 -+#define HAVE_VDPAU_X11 0 -+#define HAVE_PTHREADS 1 -+#define HAVE_OS2THREADS 0 -+#define HAVE_W32THREADS 0 -+#define HAVE_AS_ARCH_DIRECTIVE 0 -+#define HAVE_AS_DN_DIRECTIVE 0 -+#define HAVE_AS_FPU_DIRECTIVE 0 -+#define HAVE_AS_FUNC 0 -+#define HAVE_AS_OBJECT_ARCH 0 -+#define HAVE_ASM_MOD_Q 0 -+#define HAVE_BLOCKS_EXTENSION 1 -+#define HAVE_EBP_AVAILABLE 0 -+#define HAVE_EBX_AVAILABLE 0 -+#define HAVE_GNU_AS 0 -+#define HAVE_GNU_WINDRES 0 -+#define HAVE_IBM_ASM 0 -+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 -+#define HAVE_INLINE_ASM_LABELS 1 -+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 -+#define HAVE_PRAGMA_DEPRECATED 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 -+#define HAVE_SYMVER_ASM_LABEL 1 -+#define HAVE_SYMVER_GNU_ASM 0 -+#define HAVE_VFP_ARGS 0 -+#define HAVE_XFORM_ASM 0 -+#define HAVE_XMM_CLOBBERS 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 -+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 -+#define HAVE_SOCKLEN_T 1 -+#define HAVE_STRUCT_ADDRINFO 1 -+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -+#define HAVE_STRUCT_IP_MREQ_SOURCE 1 -+#define HAVE_STRUCT_IPV6_MREQ 1 -+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 -+#define HAVE_STRUCT_POLLFD 1 -+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 -+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 -+#define HAVE_STRUCT_SOCKADDR_IN6 1 -+#define HAVE_STRUCT_SOCKADDR_SA_LEN 1 -+#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 1 -+#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_OPENCL_D3D11 0 -+#define HAVE_OPENCL_DRM_ARM 0 -+#define HAVE_OPENCL_DRM_BEIGNET 0 -+#define HAVE_OPENCL_DXVA2 0 -+#define HAVE_OPENCL_VAAPI_BEIGNET 0 -+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 -+#define HAVE_PERL 1 -+#define HAVE_POD2MAN 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 -+#define CONFIG_DOC 0 -+#define CONFIG_HTMLPAGES 0 -+#define CONFIG_MANPAGES 1 -+#define CONFIG_PODPAGES 1 -+#define CONFIG_TXTPAGES 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 -+#define CONFIG_AVIO_READING_EXAMPLE 1 -+#define CONFIG_DECODE_AUDIO_EXAMPLE 1 -+#define CONFIG_DECODE_VIDEO_EXAMPLE 1 -+#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 -+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 -+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 -+#define CONFIG_EXTRACT_MVS_EXAMPLE 0 -+#define CONFIG_FILTER_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 -+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 -+#define CONFIG_HW_DECODE_EXAMPLE 0 -+#define CONFIG_METADATA_EXAMPLE 0 -+#define CONFIG_MUXING_EXAMPLE 0 -+#define CONFIG_QSVDEC_EXAMPLE 0 -+#define CONFIG_REMUXING_EXAMPLE 0 -+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 -+#define CONFIG_SCALING_VIDEO_EXAMPLE 0 -+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 -+#define CONFIG_TRANSCODING_EXAMPLE 0 -+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 -+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 -+#define CONFIG_AVISYNTH 0 -+#define CONFIG_FREI0R 0 -+#define CONFIG_LIBCDIO 0 -+#define CONFIG_LIBDAVS2 0 -+#define CONFIG_LIBRUBBERBAND 0 -+#define CONFIG_LIBVIDSTAB 0 -+#define CONFIG_LIBX264 0 -+#define CONFIG_LIBX265 0 -+#define CONFIG_LIBXAVS 0 -+#define CONFIG_LIBXAVS2 0 -+#define CONFIG_LIBXVID 0 -+#define CONFIG_DECKLINK 0 -+#define CONFIG_LIBFDK_AAC 0 -+#define CONFIG_LIBTLS 0 -+#define CONFIG_GMP 0 -+#define CONFIG_LIBARIBB24 0 -+#define CONFIG_LIBLENSFUN 0 -+#define CONFIG_LIBOPENCORE_AMRNB 0 -+#define CONFIG_LIBOPENCORE_AMRWB 0 -+#define CONFIG_LIBVO_AMRWBENC 0 -+#define CONFIG_MBEDTLS 0 -+#define CONFIG_RKMPP 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_CHROMAPRINT 0 -+#define CONFIG_GCRYPT 0 -+#define CONFIG_GNUTLS 0 -+#define CONFIG_JNI 0 -+#define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 -+#define CONFIG_LIBAOM 0 -+#define CONFIG_LIBASS 0 -+#define CONFIG_LIBBLURAY 0 -+#define CONFIG_LIBBS2B 0 -+#define CONFIG_LIBCACA 0 -+#define CONFIG_LIBCELT 0 -+#define CONFIG_LIBCODEC2 0 -+#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDC1394 0 -+#define CONFIG_LIBDRM 0 -+#define CONFIG_LIBFLITE 0 -+#define CONFIG_LIBFONTCONFIG 0 -+#define CONFIG_LIBFREETYPE 0 -+#define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 -+#define CONFIG_LIBGME 0 -+#define CONFIG_LIBGSM 0 -+#define CONFIG_LIBIEC61883 0 -+#define CONFIG_LIBILBC 0 -+#define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 -+#define CONFIG_LIBKLVANC 0 -+#define CONFIG_LIBKVAZAAR 0 -+#define CONFIG_LIBMODPLUG 0 -+#define CONFIG_LIBMP3LAME 0 -+#define CONFIG_LIBMYSOFA 0 -+#define CONFIG_LIBOPENCV 0 -+#define CONFIG_LIBOPENH264 0 -+#define CONFIG_LIBOPENJPEG 0 -+#define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 -+#define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 -+#define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 -+#define CONFIG_LIBRSVG 0 -+#define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 -+#define CONFIG_LIBSHINE 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_LIBSNAPPY 0 -+#define CONFIG_LIBSOXR 0 -+#define CONFIG_LIBSPEEX 0 -+#define CONFIG_LIBSRT 0 -+#define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 -+#define CONFIG_LIBTENSORFLOW 0 -+#define CONFIG_LIBTESSERACT 0 -+#define CONFIG_LIBTHEORA 0 -+#define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 -+#define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 -+#define CONFIG_LIBVORBIS 0 -+#define CONFIG_LIBVPX 0 -+#define CONFIG_LIBWEBP 0 -+#define CONFIG_LIBXML2 0 -+#define CONFIG_LIBZIMG 0 -+#define CONFIG_LIBZMQ 0 -+#define CONFIG_LIBZVBI 0 -+#define CONFIG_LV2 0 -+#define CONFIG_MEDIACODEC 0 -+#define CONFIG_OPENAL 0 -+#define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 -+#define CONFIG_POCKETSPHINX 0 -+#define CONFIG_VAPOURSYNTH 0 -+#define CONFIG_ALSA 0 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 -+#define CONFIG_ICONV 0 -+#define CONFIG_LIBXCB 0 -+#define CONFIG_LIBXCB_SHM 0 -+#define CONFIG_LIBXCB_SHAPE 0 -+#define CONFIG_LIBXCB_XFIXES 0 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 -+#define CONFIG_SDL2 0 -+#define CONFIG_SECURETRANSPORT 0 -+#define CONFIG_SNDIO 0 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 -+#define CONFIG_CUDA_NVCC 0 -+#define CONFIG_CUDA_SDK 0 -+#define CONFIG_LIBNPP 0 -+#define CONFIG_LIBMFX 0 -+#define CONFIG_MMAL 0 -+#define CONFIG_OMX 0 -+#define CONFIG_OPENCL 0 -+#define CONFIG_AMF 0 -+#define CONFIG_AUDIOTOOLBOX 0 -+#define CONFIG_CRYSTALHD 0 -+#define CONFIG_CUDA 0 -+#define CONFIG_CUDA_LLVM 0 -+#define CONFIG_CUVID 0 -+#define CONFIG_D3D11VA 0 -+#define CONFIG_DXVA2 0 -+#define CONFIG_FFNVCODEC 0 -+#define CONFIG_NVDEC 0 -+#define CONFIG_NVENC 0 -+#define CONFIG_VAAPI 0 -+#define CONFIG_VDPAU 0 -+#define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 -+#define CONFIG_V4L2_M2M 0 -+#define CONFIG_FTRAPV 0 -+#define CONFIG_GRAY 0 -+#define CONFIG_HARDCODED_TABLES 0 -+#define CONFIG_OMX_RPI 0 -+#define CONFIG_RUNTIME_CPUDETECT 1 -+#define CONFIG_SAFE_BITSTREAM_READER 1 -+#define CONFIG_SHARED 1 -+#define CONFIG_SMALL 1 -+#define CONFIG_STATIC 0 -+#define CONFIG_SWSCALE_ALPHA 1 -+#define CONFIG_GPL 0 -+#define CONFIG_NONFREE 0 -+#define CONFIG_VERSION3 0 -+#define CONFIG_AVDEVICE 0 -+#define CONFIG_AVFILTER 0 -+#define CONFIG_SWSCALE 0 -+#define CONFIG_POSTPROC 0 -+#define CONFIG_AVFORMAT 0 -+#define CONFIG_AVCODEC 1 -+#define CONFIG_SWRESAMPLE 0 -+#define CONFIG_AVUTIL 1 -+#define CONFIG_FFPLAY 0 -+#define CONFIG_FFPROBE 0 -+#define CONFIG_FFMPEG 0 -+#define CONFIG_DCT 1 -+#define CONFIG_DWT 0 -+#define CONFIG_ERROR_RESILIENCE 0 -+#define CONFIG_FAAN 1 -+#define CONFIG_FAST_UNALIGNED 0 -+#define CONFIG_FFT 1 -+#define CONFIG_LSP 0 -+#define CONFIG_MDCT 0 -+#define CONFIG_PIXELUTILS 0 -+#define CONFIG_NETWORK 0 -+#define CONFIG_RDFT 1 -+#define CONFIG_AUTODETECT 0 -+#define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 -+#define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 -+#define CONFIG_MEMORY_POISONING 0 -+#define CONFIG_NEON_CLOBBER_TEST 0 -+#define CONFIG_OSSFUZZ 0 -+#define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 -+#define CONFIG_THUMB 0 -+#define CONFIG_VALGRIND_BACKTRACE 0 -+#define CONFIG_XMM_CLOBBER_TEST 0 -+#define CONFIG_BSFS 0 -+#define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 -+#define CONFIG_PARSERS 0 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 -+#define CONFIG_AANDCTTABLES 0 -+#define CONFIG_AC3DSP 0 -+#define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 -+#define CONFIG_AUDIO_FRAME_QUEUE 0 -+#define CONFIG_AUDIODSP 0 -+#define CONFIG_BLOCKDSP 0 -+#define CONFIG_BSWAPDSP 0 -+#define CONFIG_CABAC 0 -+#define CONFIG_CBS 0 -+#define CONFIG_CBS_AV1 0 -+#define CONFIG_CBS_H264 0 -+#define CONFIG_CBS_H265 0 -+#define CONFIG_CBS_JPEG 0 -+#define CONFIG_CBS_MPEG2 0 -+#define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 -+#define CONFIG_DIRAC_PARSE 0 -+#define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 -+#define CONFIG_DVPROFILE 0 -+#define CONFIG_EXIF 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 -+#define CONFIG_FLACDSP 1 -+#define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 -+#define CONFIG_G722DSP 0 -+#define CONFIG_GOLOMB 0 -+#define CONFIG_GPLV3 0 -+#define CONFIG_H263DSP 0 -+#define CONFIG_H264CHROMA 0 -+#define CONFIG_H264DSP 0 -+#define CONFIG_H264PARSE 0 -+#define CONFIG_H264PRED 0 -+#define CONFIG_H264QPEL 0 -+#define CONFIG_HEVCPARSE 0 -+#define CONFIG_HPELDSP 0 -+#define CONFIG_HUFFMAN 0 -+#define CONFIG_HUFFYUVDSP 0 -+#define CONFIG_HUFFYUVENCDSP 0 -+#define CONFIG_IDCTDSP 1 -+#define CONFIG_IIRFILTER 0 -+#define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 -+#define CONFIG_INTRAX8 0 -+#define CONFIG_ISO_MEDIA 0 -+#define CONFIG_IVIDSP 0 -+#define CONFIG_JPEGTABLES 0 -+#define CONFIG_LGPLV3 0 -+#define CONFIG_LIBX262 0 -+#define CONFIG_LLAUDDSP 0 -+#define CONFIG_LLVIDDSP 0 -+#define CONFIG_LLVIDENCDSP 0 -+#define CONFIG_LPC 0 -+#define CONFIG_LZF 0 -+#define CONFIG_ME_CMP 0 -+#define CONFIG_MPEG_ER 0 -+#define CONFIG_MPEGAUDIO 1 -+#define CONFIG_MPEGAUDIODSP 1 -+#define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 -+#define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 -+#define CONFIG_MPEGVIDEOENC 0 -+#define CONFIG_MSS34DSP 0 -+#define CONFIG_PIXBLOCKDSP 0 -+#define CONFIG_QPELDSP 0 -+#define CONFIG_QSV 0 -+#define CONFIG_QSVDEC 0 -+#define CONFIG_QSVENC 0 -+#define CONFIG_QSVVPP 0 -+#define CONFIG_RANGECODER 0 -+#define CONFIG_RIFFDEC 0 -+#define CONFIG_RIFFENC 0 -+#define CONFIG_RTPDEC 0 -+#define CONFIG_RTPENC_CHAIN 0 -+#define CONFIG_RV34DSP 0 -+#define CONFIG_SCENE_SAD 0 -+#define CONFIG_SINEWIN 0 -+#define CONFIG_SNAPPY 0 -+#define CONFIG_SRTP 0 -+#define CONFIG_STARTCODE 0 -+#define CONFIG_TEXTUREDSP 0 -+#define CONFIG_TEXTUREDSPENC 0 -+#define CONFIG_TPELDSP 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VAAPI_ENCODE 0 -+#define CONFIG_VC1DSP 0 -+#define CONFIG_VIDEODSP 0 -+#define CONFIG_VP3DSP 0 -+#define CONFIG_VP56DSP 0 -+#define CONFIG_VP8DSP 0 -+#define CONFIG_WMA_FREQS 0 -+#define CONFIG_WMV2DSP 0 -+#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config.h b/media/ffvpx/config.h ---- a/media/ffvpx/config.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config.h 2023-04-06 12:49:58.993149715 +0200 -@@ -10,8 +10,13 @@ - #if defined(MOZ_FFVPX_AUDIOONLY) - # if defined(MOZ_WIDGET_ANDROID) && defined(__arm__) - # include "config_android32.h" -+# elif defined(MOZ_WIDGET_ANDROID) && defined(__aarch64__) -+# include "config_android64.h" -+# elif defined(__aarch64__) -+# include "config_unix_aarch64.h" - # else --# include "config_audio.h" -+ // no assembly -+# include "config_generic.h" - # endif - #else // MOZ_FFVPX_AUDIOONLY - # if defined(XP_WIN) -@@ -21,7 +26,7 @@ - # undef HAVE_UNISTD_H - # endif - # if defined(_ARM64_) --# include "config_aarch64_win64.h" -+# include "config_win64_aarch64.h" - # else - # if defined(HAVE_64BIT_BUILD) - # include "config_win64.h" -@@ -39,7 +44,13 @@ - # define HAVE_LIBC_MSVCRT 0 - # endif - # elif defined(XP_DARWIN) --# include "config_darwin64.h" -+# if defined(__aarch64__) -+# include "config_darwin_aarch64.h" -+# else -+# include "config_darwin64.h" -+# endif -+# elif defined(MOZ_WIDGET_ANDROID) && defined(HAVE_64BIT_BUILD) -+# include "config_android_x86_64.h" - # elif defined(XP_UNIX) - # if defined(HAVE_64BIT_BUILD) - # include "config_unix64.h" -@@ -48,7 +59,7 @@ - # endif - # endif - #endif // else MOZ_FFVPX_AUDIOONLY -- --#include "config_common.h" -+ // -+#include "config_override.h" - - #endif // MOZ_FFVPX_CONFIG_H -diff -Naur a/media/ffvpx/config_override.h b/media/ffvpx/config_override.h ---- a/media/ffvpx/config_override.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_override.h 2023-04-06 12:49:58.993149715 +0200 -@@ -0,0 +1,32 @@ -+#ifndef MOZ_FFVPX_CONFIG_OVERRIDE_H -+#define MOZ_FFVPX_CONFIG_OVERRIDE_H -+ -+// This file contains overrides for config.h, that can be platform-specific. -+ -+#ifdef MOZ_LIBAV_FFT -+#undef CONFIG_FFT -+#undef CONFIG_RDFT -+#define CONFIG_FFT 1 -+#define CONFIG_RDFT 1 -+#endif -+ -+#if defined(MOZ_WAYLAND) && !defined(MOZ_FFVPX_AUDIOONLY) -+#undef CONFIG_VAAPI -+#undef CONFIG_VAAPI_1 -+#undef CONFIG_VP8_VAAPI_HWACCEL -+#undef CONFIG_VP9_VAAPI_HWACCEL -+#undef CONFIG_AV1_VAAPI_HWACCEL -+#define CONFIG_VAAPI 1 -+#define CONFIG_VAAPI_1 1 -+#define CONFIG_VP8_VAAPI_HWACCEL 1 -+#define CONFIG_VP9_VAAPI_HWACCEL 1 -+#define CONFIG_AV1_VAAPI_HWACCEL 1 -+#else -+#define CONFIG_VAAPI 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VP8_VAAPI_HWACCEL 0 -+#define CONFIG_VP9_VAAPI_HWACCEL 0 -+#define CONFIG_AV1_VAAPI_HWACCEL 0 -+#endif -+ -+#endif -diff -Naur a/media/ffvpx/config_unix32.h b/media/ffvpx/config_unix32.h ---- a/media/ffvpx/config_unix32.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_unix32.h 2023-04-06 12:49:19.192546469 +0200 -@@ -1,15 +1,16 @@ - /* Automatically generated by configure - do not modify! */ - #ifndef FFMPEG_CONFIG_H - #define FFMPEG_CONFIG_H --#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --disable-asm --disable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3" -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --disable-asm --disable-x86asm --cc='clang -m32' --disable-iconv" - #define FFMPEG_LICENSE "LGPL version 2.1 or later" --#define CONFIG_THIS_YEAR 2019 -+#define CONFIG_THIS_YEAR 2022 - #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" - #define AVCONV_DATADIR "/usr/local/share/ffmpeg" --#define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406" -+#define CC_IDENT "Ubuntu clang version 14.0.0-1ubuntu1" -+#define OS_NAME linux - #define av_restrict restrict - #define EXTERN_PREFIX "" --#define EXTERN_ASM -+#define EXTERN_ASM - #define BUILDSUF "" - #define SLIBSUF ".so" - #define HAVE_MMX2 HAVE_MMXEXT -@@ -22,12 +23,16 @@ - #define ARCH_AVR32_UC 0 - #define ARCH_BFIN 0 - #define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 - #define ARCH_M68K 0 - #define ARCH_MIPS 0 - #define ARCH_MIPS64 0 - #define ARCH_PARISC 0 - #define ARCH_PPC 0 - #define ARCH_PPC64 0 -+#define ARCH_RISCV 0 - #define ARCH_S390 0 - #define ARCH_SH4 0 - #define ARCH_SPARC 0 -@@ -58,6 +63,7 @@ - #define HAVE_AVX 0 - #define HAVE_AVX2 0 - #define HAVE_AVX512 0 -+#define HAVE_AVX512ICL 0 - #define HAVE_FMA3 0 - #define HAVE_FMA4 0 - #define HAVE_MMX 0 -@@ -80,10 +86,11 @@ - #define HAVE_MIPSDSP 0 - #define HAVE_MIPSDSPR2 0 - #define HAVE_MSA 0 --#define HAVE_MSA2 0 - #define HAVE_LOONGSON2 0 - #define HAVE_LOONGSON3 0 - #define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 - #define HAVE_ARMV5TE_EXTERNAL 0 - #define HAVE_ARMV6_EXTERNAL 0 - #define HAVE_ARMV6T2_EXTERNAL 0 -@@ -104,6 +111,7 @@ - #define HAVE_AVX_EXTERNAL 0 - #define HAVE_AVX2_EXTERNAL 0 - #define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_AVX512ICL_EXTERNAL 0 - #define HAVE_FMA3_EXTERNAL 0 - #define HAVE_FMA4_EXTERNAL 0 - #define HAVE_MMX_EXTERNAL 0 -@@ -126,10 +134,11 @@ - #define HAVE_MIPSDSP_EXTERNAL 0 - #define HAVE_MIPSDSPR2_EXTERNAL 0 - #define HAVE_MSA_EXTERNAL 0 --#define HAVE_MSA2_EXTERNAL 0 - #define HAVE_LOONGSON2_EXTERNAL 0 - #define HAVE_LOONGSON3_EXTERNAL 0 - #define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 - #define HAVE_ARMV5TE_INLINE 0 - #define HAVE_ARMV6_INLINE 0 - #define HAVE_ARMV6T2_INLINE 0 -@@ -150,6 +159,7 @@ - #define HAVE_AVX_INLINE 0 - #define HAVE_AVX2_INLINE 0 - #define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 - #define HAVE_FMA3_INLINE 0 - #define HAVE_FMA4_INLINE 0 - #define HAVE_MMX_INLINE 0 -@@ -172,10 +182,11 @@ - #define HAVE_MIPSDSP_INLINE 0 - #define HAVE_MIPSDSPR2_INLINE 0 - #define HAVE_MSA_INLINE 0 --#define HAVE_MSA2_INLINE 0 - #define HAVE_LOONGSON2_INLINE 0 - #define HAVE_LOONGSON3_INLINE 0 - #define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 - #define HAVE_ALIGNED_STACK 0 - #define HAVE_FAST_64BIT 0 - #define HAVE_FAST_CLZ 0 -@@ -191,8 +202,8 @@ - #define HAVE_RDTSC 0 - #define HAVE_SEM_TIMEDWAIT 1 - #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 --#define HAVE_CABS 1 --#define HAVE_CEXP 1 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 - #define HAVE_INLINE_ASM 1 - #define HAVE_SYMVER 1 - #define HAVE_X86ASM 0 -@@ -216,7 +227,8 @@ - #define HAVE_ES2_GL_H 0 - #define HAVE_GSM_H 0 - #define HAVE_IO_H 0 --#define HAVE_LINUX_PERF_EVENT_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 1 - #define HAVE_MACHINE_IOCTL_BT848_H 0 - #define HAVE_MACHINE_IOCTL_METEOR_H 0 - #define HAVE_OPENCV2_CORE_CORE_C_H 0 -@@ -268,7 +280,7 @@ - #define HAVE_DOS_PATHS 0 - #define HAVE_LIBC_MSVCRT 0 - #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 --#define HAVE_SECTION_DATA_REL_RO 0 -+#define HAVE_SECTION_DATA_REL_RO 1 - #define HAVE_THREADS 1 - #define HAVE_UWP 0 - #define HAVE_WINRT 0 -@@ -279,12 +291,16 @@ - #define HAVE_COMMANDLINETOARGVW 0 - #define HAVE_FCNTL 1 - #define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 1 -+#define HAVE_GETENV 1 - #define HAVE_GETHRTIME 0 - #define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 - #define HAVE_GETPROCESSAFFINITYMASK 0 - #define HAVE_GETPROCESSMEMORYINFO 0 - #define HAVE_GETPROCESSTIMES 0 - #define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 - #define HAVE_GETSYSTEMTIMEASFILETIME 0 - #define HAVE_GETTIMEOFDAY 1 - #define HAVE_GLOB 1 -@@ -303,10 +319,11 @@ - #define HAVE_NANOSLEEP 1 - #define HAVE_PEEKNAMEDPIPE 0 - #define HAVE_PTHREAD_CANCEL 1 --#define HAVE_SCHED_GETAFFINITY 0 -+#define HAVE_SCHED_GETAFFINITY 1 - #define HAVE_SECITEMIMPORT 0 - #define HAVE_SETCONSOLETEXTATTRIBUTE 0 - #define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 - #define HAVE_SETMODE 0 - #define HAVE_SETRLIMIT 1 - #define HAVE_SLEEP 0 -@@ -341,13 +358,28 @@ - #define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 - #define HAVE_PRAGMA_DEPRECATED 1 - #define HAVE_RSYNC_CONTIMEOUT 1 --#define HAVE_SYMVER_ASM_LABEL 0 -+#define HAVE_SYMVER_ASM_LABEL 1 - #define HAVE_SYMVER_GNU_ASM 1 - #define HAVE_VFP_ARGS 0 - #define HAVE_XFORM_ASM 0 --#define HAVE_XMM_CLOBBERS 0 -+#define HAVE_XMM_CLOBBERS 1 - #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 - #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - #define HAVE_SOCKLEN_T 1 - #define HAVE_STRUCT_ADDRINFO 1 - #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -361,9 +393,11 @@ - #define HAVE_STRUCT_SOCKADDR_SA_LEN 0 - #define HAVE_STRUCT_SOCKADDR_STORAGE 1 - #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 --#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 --#define HAVE_MAKEINFO 0 --#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 1 -+#define HAVE_MAKEINFO_HTML 1 - #define HAVE_OPENCL_D3D11 0 - #define HAVE_OPENCL_DRM_ARM 0 - #define HAVE_OPENCL_DRM_BEIGNET 0 -@@ -372,13 +406,15 @@ - #define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 - #define HAVE_PERL 1 - #define HAVE_POD2MAN 1 --#define HAVE_TEXI2HTML 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 - #define CONFIG_DOC 0 - #define CONFIG_HTMLPAGES 1 - #define CONFIG_MANPAGES 1 - #define CONFIG_PODPAGES 1 - #define CONFIG_TXTPAGES 1 --#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - #define CONFIG_AVIO_READING_EXAMPLE 1 - #define CONFIG_DECODE_AUDIO_EXAMPLE 1 - #define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -414,14 +450,12 @@ - #define CONFIG_LIBXVID 0 - #define CONFIG_DECKLINK 0 - #define CONFIG_LIBFDK_AAC 0 --#define CONFIG_OPENSSL 0 - #define CONFIG_LIBTLS 0 - #define CONFIG_GMP 0 - #define CONFIG_LIBARIBB24 0 - #define CONFIG_LIBLENSFUN 0 - #define CONFIG_LIBOPENCORE_AMRNB 0 - #define CONFIG_LIBOPENCORE_AMRWB 0 --#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVO_AMRWBENC 0 - #define CONFIG_MBEDTLS 0 - #define CONFIG_RKMPP 0 -@@ -431,6 +465,7 @@ - #define CONFIG_GNUTLS 0 - #define CONFIG_JNI 0 - #define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 - #define CONFIG_LIBAOM 0 - #define CONFIG_LIBASS 0 - #define CONFIG_LIBBLURAY 0 -@@ -438,18 +473,20 @@ - #define CONFIG_LIBCACA 0 - #define CONFIG_LIBCELT 0 - #define CONFIG_LIBCODEC2 0 --#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDAV1D 1 - #define CONFIG_LIBDC1394 0 - #define CONFIG_LIBDRM 0 - #define CONFIG_LIBFLITE 0 - #define CONFIG_LIBFONTCONFIG 0 - #define CONFIG_LIBFREETYPE 0 - #define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 - #define CONFIG_LIBGME 0 - #define CONFIG_LIBGSM 0 - #define CONFIG_LIBIEC61883 0 - #define CONFIG_LIBILBC 0 - #define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 - #define CONFIG_LIBKLVANC 0 - #define CONFIG_LIBKVAZAAR 0 - #define CONFIG_LIBMODPLUG 0 -@@ -459,10 +496,16 @@ - #define CONFIG_LIBOPENH264 0 - #define CONFIG_LIBOPENJPEG 0 - #define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 - #define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 - #define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 - #define CONFIG_LIBRSVG 0 - #define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 - #define CONFIG_LIBSHINE 0 - #define CONFIG_LIBSMBCLIENT 0 - #define CONFIG_LIBSNAPPY 0 -@@ -470,14 +513,16 @@ - #define CONFIG_LIBSPEEX 0 - #define CONFIG_LIBSRT 0 - #define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 - #define CONFIG_LIBTENSORFLOW 0 - #define CONFIG_LIBTESSERACT 0 - #define CONFIG_LIBTHEORA 0 - #define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 - #define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVORBIS 0 - #define CONFIG_LIBVPX 0 --#define CONFIG_LIBWAVPACK 0 - #define CONFIG_LIBWEBP 0 - #define CONFIG_LIBXML2 0 - #define CONFIG_LIBZIMG 0 -@@ -487,25 +532,28 @@ - #define CONFIG_MEDIACODEC 0 - #define CONFIG_OPENAL 0 - #define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 - #define CONFIG_POCKETSPHINX 0 - #define CONFIG_VAPOURSYNTH 0 - #define CONFIG_ALSA 0 --#define CONFIG_APPKIT 1 --#define CONFIG_AVFOUNDATION 1 --#define CONFIG_BZLIB 1 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 - #define CONFIG_COREIMAGE 0 - #define CONFIG_ICONV 0 - #define CONFIG_LIBXCB 0 - #define CONFIG_LIBXCB_SHM 0 - #define CONFIG_LIBXCB_SHAPE 0 - #define CONFIG_LIBXCB_XFIXES 0 --#define CONFIG_LZMA 1 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 - #define CONFIG_SCHANNEL 0 - #define CONFIG_SDL2 0 - #define CONFIG_SECURETRANSPORT 0 - #define CONFIG_SNDIO 0 --#define CONFIG_XLIB 1 --#define CONFIG_ZLIB 1 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 - #define CONFIG_CUDA_NVCC 0 - #define CONFIG_CUDA_SDK 0 - #define CONFIG_LIBNPP 0 -@@ -514,7 +562,7 @@ - #define CONFIG_OMX 0 - #define CONFIG_OPENCL 0 - #define CONFIG_AMF 0 --#define CONFIG_AUDIOTOOLBOX 1 -+#define CONFIG_AUDIOTOOLBOX 0 - #define CONFIG_CRYSTALHD 0 - #define CONFIG_CUDA 0 - #define CONFIG_CUDA_LLVM 0 -@@ -527,8 +575,8 @@ - #define CONFIG_VAAPI 0 - #define CONFIG_VDPAU 0 - #define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 - #define CONFIG_V4L2_M2M 0 --#define CONFIG_XVMC 0 - #define CONFIG_FTRAPV 0 - #define CONFIG_GRAY 0 - #define CONFIG_HARDCODED_TABLES 0 -@@ -549,7 +597,6 @@ - #define CONFIG_AVFORMAT 0 - #define CONFIG_AVCODEC 1 - #define CONFIG_SWRESAMPLE 0 --#define CONFIG_AVRESAMPLE 0 - #define CONFIG_AVUTIL 1 - #define CONFIG_FFPLAY 0 - #define CONFIG_FFPROBE 0 -@@ -561,46 +608,59 @@ - #define CONFIG_FAST_UNALIGNED 0 - #define CONFIG_FFT 1 - #define CONFIG_LSP 0 --#define CONFIG_LZO 0 - #define CONFIG_MDCT 0 - #define CONFIG_PIXELUTILS 0 - #define CONFIG_NETWORK 0 - #define CONFIG_RDFT 1 - #define CONFIG_AUTODETECT 0 - #define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 - #define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 - #define CONFIG_MEMORY_POISONING 0 - #define CONFIG_NEON_CLOBBER_TEST 0 - #define CONFIG_OSSFUZZ 0 - #define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 - #define CONFIG_THUMB 0 - #define CONFIG_VALGRIND_BACKTRACE 0 - #define CONFIG_XMM_CLOBBER_TEST 0 --#define CONFIG_BSFS 1 -+#define CONFIG_BSFS 0 - #define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 - #define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 - #define CONFIG_AANDCTTABLES 0 - #define CONFIG_AC3DSP 0 - #define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 - #define CONFIG_AUDIO_FRAME_QUEUE 0 - #define CONFIG_AUDIODSP 0 - #define CONFIG_BLOCKDSP 0 - #define CONFIG_BSWAPDSP 0 - #define CONFIG_CABAC 0 --#define CONFIG_CBS 1 --#define CONFIG_CBS_AV1 1 -+#define CONFIG_CBS 0 -+#define CONFIG_CBS_AV1 0 - #define CONFIG_CBS_H264 0 - #define CONFIG_CBS_H265 0 - #define CONFIG_CBS_JPEG 0 - #define CONFIG_CBS_MPEG2 0 - #define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 - #define CONFIG_DIRAC_PARSE 0 - #define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 - #define CONFIG_DVPROFILE 0 - #define CONFIG_EXIF 0 --#define CONFIG_FAANDCT 0 --#define CONFIG_FAANIDCT 0 --#define CONFIG_FDCTDSP 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 - #define CONFIG_FLACDSP 1 - #define CONFIG_FMTCONVERT 0 - #define CONFIG_FRAME_THREAD_ENCODER 0 -@@ -618,9 +678,10 @@ - #define CONFIG_HUFFMAN 0 - #define CONFIG_HUFFYUVDSP 0 - #define CONFIG_HUFFYUVENCDSP 0 --#define CONFIG_IDCTDSP 0 -+#define CONFIG_IDCTDSP 1 - #define CONFIG_IIRFILTER 0 - #define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 - #define CONFIG_INTRAX8 0 - #define CONFIG_ISO_MEDIA 0 - #define CONFIG_IVIDSP 0 -@@ -637,7 +698,9 @@ - #define CONFIG_MPEGAUDIO 1 - #define CONFIG_MPEGAUDIODSP 1 - #define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 - #define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 - #define CONFIG_MPEGVIDEOENC 0 - #define CONFIG_MSS34DSP 0 - #define CONFIG_PIXBLOCKDSP 0 -@@ -669,14 +732,4 @@ - #define CONFIG_VP8DSP 1 - #define CONFIG_WMA_FREQS 0 - #define CONFIG_WMV2DSP 0 --#define CONFIG_NULL_BSF 1 --#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --#define CONFIG_VP8_DECODER 1 --#define CONFIG_VP9_DECODER 1 --#define CONFIG_AV1_DECODER 1 --#define CONFIG_FLAC_DECODER 1 --#define CONFIG_MP3_DECODER 1 --#define CONFIG_VP8_PARSER 1 --#define CONFIG_VP9_PARSER 1 --#define CONFIG_AV1_PARSER 1 - #endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_unix64.asm b/media/ffvpx/config_unix64.asm ---- a/media/ffvpx/config_unix64.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_unix64.asm 2023-04-06 12:49:19.192546469 +0200 -@@ -7,12 +7,16 @@ - %define ARCH_AVR32_UC 0 - %define ARCH_BFIN 0 - %define ARCH_IA64 0 -+%define ARCH_LOONGARCH 0 -+%define ARCH_LOONGARCH32 0 -+%define ARCH_LOONGARCH64 0 - %define ARCH_M68K 0 - %define ARCH_MIPS 0 - %define ARCH_MIPS64 0 - %define ARCH_PARISC 0 - %define ARCH_PPC 0 - %define ARCH_PPC64 0 -+%define ARCH_RISCV 0 - %define ARCH_S390 0 - %define ARCH_SH4 0 - %define ARCH_SPARC 0 -@@ -43,6 +47,7 @@ - %define HAVE_AVX 1 - %define HAVE_AVX2 1 - %define HAVE_AVX512 1 -+%define HAVE_AVX512ICL 1 - %define HAVE_FMA3 1 - %define HAVE_FMA4 1 - %define HAVE_MMX 1 -@@ -65,10 +70,11 @@ - %define HAVE_MIPSDSP 0 - %define HAVE_MIPSDSPR2 0 - %define HAVE_MSA 0 --%define HAVE_MSA2 0 - %define HAVE_LOONGSON2 0 - %define HAVE_LOONGSON3 0 - %define HAVE_MMI 0 -+%define HAVE_LSX 0 -+%define HAVE_LASX 0 - %define HAVE_ARMV5TE_EXTERNAL 0 - %define HAVE_ARMV6_EXTERNAL 0 - %define HAVE_ARMV6T2_EXTERNAL 0 -@@ -89,6 +95,7 @@ - %define HAVE_AVX_EXTERNAL 1 - %define HAVE_AVX2_EXTERNAL 1 - %define HAVE_AVX512_EXTERNAL 1 -+%define HAVE_AVX512ICL_EXTERNAL 1 - %define HAVE_FMA3_EXTERNAL 1 - %define HAVE_FMA4_EXTERNAL 1 - %define HAVE_MMX_EXTERNAL 1 -@@ -111,10 +118,11 @@ - %define HAVE_MIPSDSP_EXTERNAL 0 - %define HAVE_MIPSDSPR2_EXTERNAL 0 - %define HAVE_MSA_EXTERNAL 0 --%define HAVE_MSA2_EXTERNAL 0 - %define HAVE_LOONGSON2_EXTERNAL 0 - %define HAVE_LOONGSON3_EXTERNAL 0 - %define HAVE_MMI_EXTERNAL 0 -+%define HAVE_LSX_EXTERNAL 0 -+%define HAVE_LASX_EXTERNAL 0 - %define HAVE_ARMV5TE_INLINE 0 - %define HAVE_ARMV6_INLINE 0 - %define HAVE_ARMV6T2_INLINE 0 -@@ -135,6 +143,7 @@ - %define HAVE_AVX_INLINE 1 - %define HAVE_AVX2_INLINE 1 - %define HAVE_AVX512_INLINE 1 -+%define HAVE_AVX512ICL_INLINE 1 - %define HAVE_FMA3_INLINE 1 - %define HAVE_FMA4_INLINE 1 - %define HAVE_MMX_INLINE 1 -@@ -157,10 +166,11 @@ - %define HAVE_MIPSDSP_INLINE 0 - %define HAVE_MIPSDSPR2_INLINE 0 - %define HAVE_MSA_INLINE 0 --%define HAVE_MSA2_INLINE 0 - %define HAVE_LOONGSON2_INLINE 0 - %define HAVE_LOONGSON3_INLINE 0 - %define HAVE_MMI_INLINE 0 -+%define HAVE_LSX_INLINE 0 -+%define HAVE_LASX_INLINE 0 - %define HAVE_ALIGNED_STACK 1 - %define HAVE_FAST_64BIT 1 - %define HAVE_FAST_CLZ 1 -@@ -176,8 +186,8 @@ - %define HAVE_RDTSC 0 - %define HAVE_SEM_TIMEDWAIT 1 - %define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 --%define HAVE_CABS 1 --%define HAVE_CEXP 1 -+%define HAVE_CABS 0 -+%define HAVE_CEXP 0 - %define HAVE_INLINE_ASM 1 - %define HAVE_SYMVER 1 - %define HAVE_X86ASM 1 -@@ -201,9 +211,11 @@ - %define HAVE_ES2_GL_H 0 - %define HAVE_GSM_H 0 - %define HAVE_IO_H 0 --%define HAVE_LINUX_PERF_EVENT_H 0 -+%define HAVE_LINUX_DMA_BUF_H 0 -+%define HAVE_LINUX_PERF_EVENT_H 1 - %define HAVE_MACHINE_IOCTL_BT848_H 0 - %define HAVE_MACHINE_IOCTL_METEOR_H 0 -+%define HAVE_MALLOC_H 1 - %define HAVE_OPENCV2_CORE_CORE_C_H 0 - %define HAVE_OPENGL_GL3_H 0 - %define HAVE_POLL_H 1 -@@ -253,23 +265,28 @@ - %define HAVE_DOS_PATHS 0 - %define HAVE_LIBC_MSVCRT 0 - %define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 --%define HAVE_SECTION_DATA_REL_RO 0 -+%define HAVE_SECTION_DATA_REL_RO 1 - %define HAVE_THREADS 1 - %define HAVE_UWP 0 - %define HAVE_WINRT 0 - %define HAVE_ACCESS 1 - %define HAVE_ALIGNED_MALLOC 0 -+%define HAVE_ARC4RANDOM 0 - %define HAVE_CLOCK_GETTIME 1 - %define HAVE_CLOSESOCKET 0 - %define HAVE_COMMANDLINETOARGVW 0 - %define HAVE_FCNTL 1 - %define HAVE_GETADDRINFO 1 -+%define HAVE_GETAUXVAL 1 -+%define HAVE_GETENV 1 - %define HAVE_GETHRTIME 0 - %define HAVE_GETOPT 1 -+%define HAVE_GETMODULEHANDLE 0 - %define HAVE_GETPROCESSAFFINITYMASK 0 - %define HAVE_GETPROCESSMEMORYINFO 0 - %define HAVE_GETPROCESSTIMES 0 - %define HAVE_GETRUSAGE 1 -+%define HAVE_GETSTDHANDLE 0 - %define HAVE_GETSYSTEMTIMEASFILETIME 0 - %define HAVE_GETTIMEOFDAY 1 - %define HAVE_GLOB 1 -@@ -278,20 +295,24 @@ - %define HAVE_INET_ATON 1 - %define HAVE_ISATTY 1 - %define HAVE_KBHIT 0 -+%define HAVE_LOCALTIME_R 1 - %define HAVE_LSTAT 1 - %define HAVE_LZO1X_999_COMPRESS 0 - %define HAVE_MACH_ABSOLUTE_TIME 0 - %define HAVE_MAPVIEWOFFILE 0 -+%define HAVE_MEMALIGN 1 - %define HAVE_MKSTEMP 1 - %define HAVE_MMAP 1 - %define HAVE_MPROTECT 1 - %define HAVE_NANOSLEEP 1 - %define HAVE_PEEKNAMEDPIPE 0 -+%define HAVE_POSIX_MEMALIGN 1 - %define HAVE_PTHREAD_CANCEL 1 - %define HAVE_SCHED_GETAFFINITY 1 - %define HAVE_SECITEMIMPORT 0 - %define HAVE_SETCONSOLETEXTATTRIBUTE 0 - %define HAVE_SETCONSOLECTRLHANDLER 0 -+%define HAVE_SETDLLDIRECTORY 0 - %define HAVE_SETMODE 0 - %define HAVE_SETRLIMIT 1 - %define HAVE_SLEEP 0 -@@ -303,7 +324,7 @@ - %define HAVE_VIRTUALALLOC 0 - %define HAVE_WGLGETPROCADDRESS 0 - %define HAVE_BCRYPT 0 --%define HAVE_VAAPI_DRM 0 -+%define HAVE_VAAPI_DRM 1 - %define HAVE_VAAPI_X11 0 - %define HAVE_VDPAU_X11 0 - %define HAVE_PTHREADS 1 -@@ -332,7 +353,22 @@ - %define HAVE_XFORM_ASM 0 - %define HAVE_XMM_CLOBBERS 1 - %define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+%define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+%define HAVE_KCMVIDEOCODECTYPE_VP9 0 - %define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+%define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - %define HAVE_SOCKLEN_T 1 - %define HAVE_STRUCT_ADDRINFO 1 - %define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -346,9 +382,11 @@ - %define HAVE_STRUCT_SOCKADDR_SA_LEN 0 - %define HAVE_STRUCT_SOCKADDR_STORAGE 1 - %define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 --%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 --%define HAVE_MAKEINFO 0 --%define HAVE_MAKEINFO_HTML 0 -+%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+%define HAVE_GZIP 1 -+%define HAVE_LIBDRM_GETFB2 0 -+%define HAVE_MAKEINFO 1 -+%define HAVE_MAKEINFO_HTML 1 - %define HAVE_OPENCL_D3D11 0 - %define HAVE_OPENCL_DRM_ARM 0 - %define HAVE_OPENCL_DRM_BEIGNET 0 -@@ -357,13 +395,15 @@ - %define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 - %define HAVE_PERL 1 - %define HAVE_POD2MAN 1 --%define HAVE_TEXI2HTML 1 -+%define HAVE_TEXI2HTML 0 -+%define HAVE_XMLLINT 1 -+%define HAVE_ZLIB_GZIP 0 - %define CONFIG_DOC 0 - %define CONFIG_HTMLPAGES 1 - %define CONFIG_MANPAGES 1 - %define CONFIG_PODPAGES 1 - %define CONFIG_TXTPAGES 1 --%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - %define CONFIG_AVIO_READING_EXAMPLE 1 - %define CONFIG_DECODE_AUDIO_EXAMPLE 1 - %define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -398,16 +438,13 @@ - %define CONFIG_LIBXAVS2 0 - %define CONFIG_LIBXVID 0 - %define CONFIG_DECKLINK 0 --%define CONFIG_LIBNDI_NEWTEK 0 - %define CONFIG_LIBFDK_AAC 0 --%define CONFIG_OPENSSL 0 - %define CONFIG_LIBTLS 0 - %define CONFIG_GMP 0 - %define CONFIG_LIBARIBB24 0 - %define CONFIG_LIBLENSFUN 0 - %define CONFIG_LIBOPENCORE_AMRNB 0 - %define CONFIG_LIBOPENCORE_AMRWB 0 --%define CONFIG_LIBVMAF 0 - %define CONFIG_LIBVO_AMRWBENC 0 - %define CONFIG_MBEDTLS 0 - %define CONFIG_RKMPP 0 -@@ -417,6 +454,7 @@ - %define CONFIG_GNUTLS 0 - %define CONFIG_JNI 0 - %define CONFIG_LADSPA 0 -+%define CONFIG_LCMS2 0 - %define CONFIG_LIBAOM 0 - %define CONFIG_LIBASS 0 - %define CONFIG_LIBBLURAY 0 -@@ -431,11 +469,13 @@ - %define CONFIG_LIBFONTCONFIG 0 - %define CONFIG_LIBFREETYPE 0 - %define CONFIG_LIBFRIBIDI 0 -+%define CONFIG_LIBGLSLANG 0 - %define CONFIG_LIBGME 0 - %define CONFIG_LIBGSM 0 - %define CONFIG_LIBIEC61883 0 - %define CONFIG_LIBILBC 0 - %define CONFIG_LIBJACK 0 -+%define CONFIG_LIBJXL 0 - %define CONFIG_LIBKLVANC 0 - %define CONFIG_LIBKVAZAAR 0 - %define CONFIG_LIBMODPLUG 0 -@@ -445,10 +485,16 @@ - %define CONFIG_LIBOPENH264 0 - %define CONFIG_LIBOPENJPEG 0 - %define CONFIG_LIBOPENMPT 0 -+%define CONFIG_LIBOPENVINO 0 - %define CONFIG_LIBOPUS 0 -+%define CONFIG_LIBPLACEBO 0 - %define CONFIG_LIBPULSE 0 -+%define CONFIG_LIBRABBITMQ 0 -+%define CONFIG_LIBRAV1E 0 -+%define CONFIG_LIBRIST 0 - %define CONFIG_LIBRSVG 0 - %define CONFIG_LIBRTMP 0 -+%define CONFIG_LIBSHADERC 0 - %define CONFIG_LIBSHINE 0 - %define CONFIG_LIBSMBCLIENT 0 - %define CONFIG_LIBSNAPPY 0 -@@ -456,14 +502,16 @@ - %define CONFIG_LIBSPEEX 0 - %define CONFIG_LIBSRT 0 - %define CONFIG_LIBSSH 0 -+%define CONFIG_LIBSVTAV1 0 - %define CONFIG_LIBTENSORFLOW 0 - %define CONFIG_LIBTESSERACT 0 - %define CONFIG_LIBTHEORA 0 - %define CONFIG_LIBTWOLAME 0 -+%define CONFIG_LIBUAVS3D 0 - %define CONFIG_LIBV4L2 0 -+%define CONFIG_LIBVMAF 0 - %define CONFIG_LIBVORBIS 0 - %define CONFIG_LIBVPX 0 --%define CONFIG_LIBWAVPACK 0 - %define CONFIG_LIBWEBP 0 - %define CONFIG_LIBXML2 0 - %define CONFIG_LIBZIMG 0 -@@ -473,25 +521,28 @@ - %define CONFIG_MEDIACODEC 0 - %define CONFIG_OPENAL 0 - %define CONFIG_OPENGL 0 -+%define CONFIG_OPENSSL 0 - %define CONFIG_POCKETSPHINX 0 - %define CONFIG_VAPOURSYNTH 0 - %define CONFIG_ALSA 0 --%define CONFIG_APPKIT 1 --%define CONFIG_AVFOUNDATION 1 --%define CONFIG_BZLIB 1 -+%define CONFIG_APPKIT 0 -+%define CONFIG_AVFOUNDATION 0 -+%define CONFIG_BZLIB 0 - %define CONFIG_COREIMAGE 0 - %define CONFIG_ICONV 0 - %define CONFIG_LIBXCB 0 - %define CONFIG_LIBXCB_SHM 0 - %define CONFIG_LIBXCB_SHAPE 0 - %define CONFIG_LIBXCB_XFIXES 0 --%define CONFIG_LZMA 1 -+%define CONFIG_LZMA 0 -+%define CONFIG_MEDIAFOUNDATION 0 -+%define CONFIG_METAL 0 - %define CONFIG_SCHANNEL 0 - %define CONFIG_SDL2 0 - %define CONFIG_SECURETRANSPORT 0 - %define CONFIG_SNDIO 0 --%define CONFIG_XLIB 1 --%define CONFIG_ZLIB 1 -+%define CONFIG_XLIB 0 -+%define CONFIG_ZLIB 0 - %define CONFIG_CUDA_NVCC 0 - %define CONFIG_CUDA_SDK 0 - %define CONFIG_LIBNPP 0 -@@ -500,7 +551,7 @@ - %define CONFIG_OMX 0 - %define CONFIG_OPENCL 0 - %define CONFIG_AMF 0 --%define CONFIG_AUDIOTOOLBOX 1 -+%define CONFIG_AUDIOTOOLBOX 0 - %define CONFIG_CRYSTALHD 0 - %define CONFIG_CUDA 0 - %define CONFIG_CUDA_LLVM 0 -@@ -510,11 +561,11 @@ - %define CONFIG_FFNVCODEC 0 - %define CONFIG_NVDEC 0 - %define CONFIG_NVENC 0 --%define CONFIG_VAAPI 0 -+%define CONFIG_VAAPI 1 - %define CONFIG_VDPAU 0 - %define CONFIG_VIDEOTOOLBOX 0 --%define CONFIG_V4L2_M2M 1 --%define CONFIG_XVMC 0 -+%define CONFIG_VULKAN 0 -+%define CONFIG_V4L2_M2M 0 - %define CONFIG_FTRAPV 0 - %define CONFIG_GRAY 0 - %define CONFIG_HARDCODED_TABLES 0 -@@ -535,7 +586,6 @@ - %define CONFIG_AVFORMAT 0 - %define CONFIG_AVCODEC 1 - %define CONFIG_SWRESAMPLE 0 --%define CONFIG_AVRESAMPLE 0 - %define CONFIG_AVUTIL 1 - %define CONFIG_FFPLAY 0 - %define CONFIG_FFPROBE 0 -@@ -547,27 +597,38 @@ - %define CONFIG_FAST_UNALIGNED 1 - %define CONFIG_FFT 1 - %define CONFIG_LSP 0 --%define CONFIG_LZO 0 - %define CONFIG_MDCT 0 - %define CONFIG_PIXELUTILS 0 - %define CONFIG_NETWORK 0 - %define CONFIG_RDFT 1 - %define CONFIG_AUTODETECT 0 - %define CONFIG_FONTCONFIG 0 -+%define CONFIG_LARGE_TESTS 1 - %define CONFIG_LINUX_PERF 0 -+%define CONFIG_MACOS_KPERF 0 - %define CONFIG_MEMORY_POISONING 0 - %define CONFIG_NEON_CLOBBER_TEST 0 - %define CONFIG_OSSFUZZ 0 - %define CONFIG_PIC 1 -+%define CONFIG_PTX_COMPRESSION 0 - %define CONFIG_THUMB 0 - %define CONFIG_VALGRIND_BACKTRACE 0 - %define CONFIG_XMM_CLOBBER_TEST 0 --%define CONFIG_BSFS 1 -+%define CONFIG_BSFS 0 - %define CONFIG_DECODERS 1 -+%define CONFIG_ENCODERS 0 -+%define CONFIG_HWACCELS 1 - %define CONFIG_PARSERS 1 -+%define CONFIG_INDEVS 0 -+%define CONFIG_OUTDEVS 0 -+%define CONFIG_FILTERS 0 -+%define CONFIG_DEMUXERS 0 -+%define CONFIG_MUXERS 0 -+%define CONFIG_PROTOCOLS 0 - %define CONFIG_AANDCTTABLES 0 - %define CONFIG_AC3DSP 0 - %define CONFIG_ADTS_HEADER 0 -+%define CONFIG_ATSC_A53 0 - %define CONFIG_AUDIO_FRAME_QUEUE 0 - %define CONFIG_AUDIODSP 0 - %define CONFIG_BLOCKDSP 0 -@@ -580,8 +641,10 @@ - %define CONFIG_CBS_JPEG 0 - %define CONFIG_CBS_MPEG2 0 - %define CONFIG_CBS_VP9 0 -+%define CONFIG_DEFLATE_WRAPPER 0 - %define CONFIG_DIRAC_PARSE 0 - %define CONFIG_DNN 0 -+%define CONFIG_DOVI_RPU 0 - %define CONFIG_DVPROFILE 0 - %define CONFIG_EXIF 0 - %define CONFIG_FAANDCT 1 -@@ -607,6 +670,7 @@ - %define CONFIG_IDCTDSP 1 - %define CONFIG_IIRFILTER 0 - %define CONFIG_MDCT15 0 -+%define CONFIG_INFLATE_WRAPPER 0 - %define CONFIG_INTRAX8 0 - %define CONFIG_ISO_MEDIA 0 - %define CONFIG_IVIDSP 0 -@@ -623,7 +687,9 @@ - %define CONFIG_MPEGAUDIO 1 - %define CONFIG_MPEGAUDIODSP 1 - %define CONFIG_MPEGAUDIOHEADER 1 -+%define CONFIG_MPEG4AUDIO 0 - %define CONFIG_MPEGVIDEO 0 -+%define CONFIG_MPEGVIDEODEC 0 - %define CONFIG_MPEGVIDEOENC 0 - %define CONFIG_MSS34DSP 0 - %define CONFIG_PIXBLOCKDSP 0 -@@ -646,7 +712,7 @@ - %define CONFIG_TEXTUREDSP 0 - %define CONFIG_TEXTUREDSPENC 0 - %define CONFIG_TPELDSP 0 --%define CONFIG_VAAPI_1 0 -+%define CONFIG_VAAPI_1 1 - %define CONFIG_VAAPI_ENCODE 0 - %define CONFIG_VC1DSP 0 - %define CONFIG_VIDEODSP 1 -@@ -655,13 +721,3 @@ - %define CONFIG_VP8DSP 1 - %define CONFIG_WMA_FREQS 0 - %define CONFIG_WMV2DSP 0 --%define CONFIG_NULL_BSF 1 --%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --%define CONFIG_VP8_DECODER 1 --%define CONFIG_VP9_DECODER 1 --%define CONFIG_AV1_DECODER 1 --%define CONFIG_FLAC_DECODER 1 --%define CONFIG_MP3_DECODER 1 --%define CONFIG_VP8_PARSER 1 --%define CONFIG_VP9_PARSER 1 --%define CONFIG_AV1_PARSER 1 -diff -Naur a/media/ffvpx/config_unix64.h b/media/ffvpx/config_unix64.h ---- a/media/ffvpx/config_unix64.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_unix64.h 2023-04-06 12:49:19.192546469 +0200 -@@ -1,15 +1,16 @@ - /* Automatically generated by configure - do not modify! */ - #ifndef FFMPEG_CONFIG_H - #define FFMPEG_CONFIG_H --#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3" -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac,av1' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --disable-iconv --enable-vaapi --enable-hwaccel='vp9_vaapi,vp8_vaapi,av1_vaapi' --enable-libdav1d" - #define FFMPEG_LICENSE "LGPL version 2.1 or later" --#define CONFIG_THIS_YEAR 2019 -+#define CONFIG_THIS_YEAR 2022 - #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" - #define AVCONV_DATADIR "/usr/local/share/ffmpeg" --#define CC_IDENT "gcc 6.3.0 (Ubuntu 6.3.0-12ubuntu2) 20170406" -+#define CC_IDENT "gcc 11 (Ubuntu 11.2.0-19ubuntu1)" -+#define OS_NAME linux - #define av_restrict restrict - #define EXTERN_PREFIX "" --#define EXTERN_ASM -+#define EXTERN_ASM - #define BUILDSUF "" - #define SLIBSUF ".so" - #define HAVE_MMX2 HAVE_MMXEXT -@@ -22,12 +23,16 @@ - #define ARCH_AVR32_UC 0 - #define ARCH_BFIN 0 - #define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 - #define ARCH_M68K 0 - #define ARCH_MIPS 0 - #define ARCH_MIPS64 0 - #define ARCH_PARISC 0 - #define ARCH_PPC 0 - #define ARCH_PPC64 0 -+#define ARCH_RISCV 0 - #define ARCH_S390 0 - #define ARCH_SH4 0 - #define ARCH_SPARC 0 -@@ -58,6 +63,7 @@ - #define HAVE_AVX 1 - #define HAVE_AVX2 1 - #define HAVE_AVX512 1 -+#define HAVE_AVX512ICL 1 - #define HAVE_FMA3 1 - #define HAVE_FMA4 1 - #define HAVE_MMX 1 -@@ -80,10 +86,11 @@ - #define HAVE_MIPSDSP 0 - #define HAVE_MIPSDSPR2 0 - #define HAVE_MSA 0 --#define HAVE_MSA2 0 - #define HAVE_LOONGSON2 0 - #define HAVE_LOONGSON3 0 - #define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 - #define HAVE_ARMV5TE_EXTERNAL 0 - #define HAVE_ARMV6_EXTERNAL 0 - #define HAVE_ARMV6T2_EXTERNAL 0 -@@ -104,6 +111,7 @@ - #define HAVE_AVX_EXTERNAL 1 - #define HAVE_AVX2_EXTERNAL 1 - #define HAVE_AVX512_EXTERNAL 1 -+#define HAVE_AVX512ICL_EXTERNAL 1 - #define HAVE_FMA3_EXTERNAL 1 - #define HAVE_FMA4_EXTERNAL 1 - #define HAVE_MMX_EXTERNAL 1 -@@ -126,10 +134,11 @@ - #define HAVE_MIPSDSP_EXTERNAL 0 - #define HAVE_MIPSDSPR2_EXTERNAL 0 - #define HAVE_MSA_EXTERNAL 0 --#define HAVE_MSA2_EXTERNAL 0 - #define HAVE_LOONGSON2_EXTERNAL 0 - #define HAVE_LOONGSON3_EXTERNAL 0 - #define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 - #define HAVE_ARMV5TE_INLINE 0 - #define HAVE_ARMV6_INLINE 0 - #define HAVE_ARMV6T2_INLINE 0 -@@ -150,6 +159,7 @@ - #define HAVE_AVX_INLINE 1 - #define HAVE_AVX2_INLINE 1 - #define HAVE_AVX512_INLINE 1 -+#define HAVE_AVX512ICL_INLINE 1 - #define HAVE_FMA3_INLINE 1 - #define HAVE_FMA4_INLINE 1 - #define HAVE_MMX_INLINE 1 -@@ -172,10 +182,11 @@ - #define HAVE_MIPSDSP_INLINE 0 - #define HAVE_MIPSDSPR2_INLINE 0 - #define HAVE_MSA_INLINE 0 --#define HAVE_MSA2_INLINE 0 - #define HAVE_LOONGSON2_INLINE 0 - #define HAVE_LOONGSON3_INLINE 0 - #define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 - #define HAVE_ALIGNED_STACK 1 - #define HAVE_FAST_64BIT 1 - #define HAVE_FAST_CLZ 1 -@@ -191,8 +202,8 @@ - #define HAVE_RDTSC 0 - #define HAVE_SEM_TIMEDWAIT 1 - #define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 --#define HAVE_CABS 1 --#define HAVE_CEXP 1 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 - #define HAVE_INLINE_ASM 1 - #define HAVE_SYMVER 1 - #define HAVE_X86ASM 1 -@@ -216,7 +227,8 @@ - #define HAVE_ES2_GL_H 0 - #define HAVE_GSM_H 0 - #define HAVE_IO_H 0 --#define HAVE_LINUX_PERF_EVENT_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 1 - #define HAVE_MACHINE_IOCTL_BT848_H 0 - #define HAVE_MACHINE_IOCTL_METEOR_H 0 - #define HAVE_OPENCV2_CORE_CORE_C_H 0 -@@ -268,7 +280,7 @@ - #define HAVE_DOS_PATHS 0 - #define HAVE_LIBC_MSVCRT 0 - #define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 --#define HAVE_SECTION_DATA_REL_RO 0 -+#define HAVE_SECTION_DATA_REL_RO 1 - #define HAVE_THREADS 1 - #define HAVE_UWP 0 - #define HAVE_WINRT 0 -@@ -279,12 +291,16 @@ - #define HAVE_COMMANDLINETOARGVW 0 - #define HAVE_FCNTL 1 - #define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 1 -+#define HAVE_GETENV 1 - #define HAVE_GETHRTIME 0 - #define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 - #define HAVE_GETPROCESSAFFINITYMASK 0 - #define HAVE_GETPROCESSMEMORYINFO 0 - #define HAVE_GETPROCESSTIMES 0 - #define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 - #define HAVE_GETSYSTEMTIMEASFILETIME 0 - #define HAVE_GETTIMEOFDAY 1 - #define HAVE_GLOB 1 -@@ -307,6 +323,7 @@ - #define HAVE_SECITEMIMPORT 0 - #define HAVE_SETCONSOLETEXTATTRIBUTE 0 - #define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 - #define HAVE_SETMODE 0 - #define HAVE_SETRLIMIT 1 - #define HAVE_SLEEP 0 -@@ -347,7 +364,22 @@ - #define HAVE_XFORM_ASM 0 - #define HAVE_XMM_CLOBBERS 1 - #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 - #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - #define HAVE_SOCKLEN_T 1 - #define HAVE_STRUCT_ADDRINFO 1 - #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -361,9 +393,11 @@ - #define HAVE_STRUCT_SOCKADDR_SA_LEN 0 - #define HAVE_STRUCT_SOCKADDR_STORAGE 1 - #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 --#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 1 --#define HAVE_MAKEINFO 0 --#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 1 -+#define HAVE_MAKEINFO_HTML 1 - #define HAVE_OPENCL_D3D11 0 - #define HAVE_OPENCL_DRM_ARM 0 - #define HAVE_OPENCL_DRM_BEIGNET 0 -@@ -372,13 +406,15 @@ - #define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 - #define HAVE_PERL 1 - #define HAVE_POD2MAN 1 --#define HAVE_TEXI2HTML 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 - #define CONFIG_DOC 0 - #define CONFIG_HTMLPAGES 1 - #define CONFIG_MANPAGES 1 - #define CONFIG_PODPAGES 1 - #define CONFIG_TXTPAGES 1 --#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - #define CONFIG_AVIO_READING_EXAMPLE 1 - #define CONFIG_DECODE_AUDIO_EXAMPLE 1 - #define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -414,14 +450,12 @@ - #define CONFIG_LIBXVID 0 - #define CONFIG_DECKLINK 0 - #define CONFIG_LIBFDK_AAC 0 --#define CONFIG_OPENSSL 0 - #define CONFIG_LIBTLS 0 - #define CONFIG_GMP 0 - #define CONFIG_LIBARIBB24 0 - #define CONFIG_LIBLENSFUN 0 - #define CONFIG_LIBOPENCORE_AMRNB 0 - #define CONFIG_LIBOPENCORE_AMRWB 0 --#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVO_AMRWBENC 0 - #define CONFIG_MBEDTLS 0 - #define CONFIG_RKMPP 0 -@@ -431,6 +465,7 @@ - #define CONFIG_GNUTLS 0 - #define CONFIG_JNI 0 - #define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 - #define CONFIG_LIBAOM 0 - #define CONFIG_LIBASS 0 - #define CONFIG_LIBBLURAY 0 -@@ -438,18 +473,20 @@ - #define CONFIG_LIBCACA 0 - #define CONFIG_LIBCELT 0 - #define CONFIG_LIBCODEC2 0 --#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDAV1D 1 - #define CONFIG_LIBDC1394 0 - #define CONFIG_LIBDRM 0 - #define CONFIG_LIBFLITE 0 - #define CONFIG_LIBFONTCONFIG 0 - #define CONFIG_LIBFREETYPE 0 - #define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 - #define CONFIG_LIBGME 0 - #define CONFIG_LIBGSM 0 - #define CONFIG_LIBIEC61883 0 - #define CONFIG_LIBILBC 0 - #define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 - #define CONFIG_LIBKLVANC 0 - #define CONFIG_LIBKVAZAAR 0 - #define CONFIG_LIBMODPLUG 0 -@@ -459,10 +496,16 @@ - #define CONFIG_LIBOPENH264 0 - #define CONFIG_LIBOPENJPEG 0 - #define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 - #define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 - #define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 - #define CONFIG_LIBRSVG 0 - #define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 - #define CONFIG_LIBSHINE 0 - #define CONFIG_LIBSMBCLIENT 0 - #define CONFIG_LIBSNAPPY 0 -@@ -470,14 +513,16 @@ - #define CONFIG_LIBSPEEX 0 - #define CONFIG_LIBSRT 0 - #define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 - #define CONFIG_LIBTENSORFLOW 0 - #define CONFIG_LIBTESSERACT 0 - #define CONFIG_LIBTHEORA 0 - #define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 - #define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVORBIS 0 - #define CONFIG_LIBVPX 0 --#define CONFIG_LIBWAVPACK 0 - #define CONFIG_LIBWEBP 0 - #define CONFIG_LIBXML2 0 - #define CONFIG_LIBZIMG 0 -@@ -487,25 +532,28 @@ - #define CONFIG_MEDIACODEC 0 - #define CONFIG_OPENAL 0 - #define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 - #define CONFIG_POCKETSPHINX 0 - #define CONFIG_VAPOURSYNTH 0 - #define CONFIG_ALSA 0 --#define CONFIG_APPKIT 1 --#define CONFIG_AVFOUNDATION 1 --#define CONFIG_BZLIB 1 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 - #define CONFIG_COREIMAGE 0 - #define CONFIG_ICONV 0 - #define CONFIG_LIBXCB 0 - #define CONFIG_LIBXCB_SHM 0 - #define CONFIG_LIBXCB_SHAPE 0 - #define CONFIG_LIBXCB_XFIXES 0 --#define CONFIG_LZMA 1 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 - #define CONFIG_SCHANNEL 0 - #define CONFIG_SDL2 0 - #define CONFIG_SECURETRANSPORT 0 - #define CONFIG_SNDIO 0 --#define CONFIG_XLIB 1 --#define CONFIG_ZLIB 1 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 - #define CONFIG_CUDA_NVCC 0 - #define CONFIG_CUDA_SDK 0 - #define CONFIG_LIBNPP 0 -@@ -514,7 +562,7 @@ - #define CONFIG_OMX 0 - #define CONFIG_OPENCL 0 - #define CONFIG_AMF 0 --#define CONFIG_AUDIOTOOLBOX 1 -+#define CONFIG_AUDIOTOOLBOX 0 - #define CONFIG_CRYSTALHD 0 - #define CONFIG_CUDA 0 - #define CONFIG_CUDA_LLVM 0 -@@ -524,11 +572,10 @@ - #define CONFIG_FFNVCODEC 0 - #define CONFIG_NVDEC 0 - #define CONFIG_NVENC 0 --#define CONFIG_VAAPI 0 - #define CONFIG_VDPAU 0 - #define CONFIG_VIDEOTOOLBOX 0 --#define CONFIG_V4L2_M2M 1 --#define CONFIG_XVMC 0 -+#define CONFIG_VULKAN 0 -+#define CONFIG_V4L2_M2M 0 - #define CONFIG_FTRAPV 0 - #define CONFIG_GRAY 0 - #define CONFIG_HARDCODED_TABLES 0 -@@ -549,7 +596,6 @@ - #define CONFIG_AVFORMAT 0 - #define CONFIG_AVCODEC 1 - #define CONFIG_SWRESAMPLE 0 --#define CONFIG_AVRESAMPLE 0 - #define CONFIG_AVUTIL 1 - #define CONFIG_FFPLAY 0 - #define CONFIG_FFPROBE 0 -@@ -561,27 +607,38 @@ - #define CONFIG_FAST_UNALIGNED 1 - #define CONFIG_FFT 1 - #define CONFIG_LSP 0 --#define CONFIG_LZO 0 - #define CONFIG_MDCT 0 - #define CONFIG_PIXELUTILS 0 - #define CONFIG_NETWORK 0 - #define CONFIG_RDFT 1 - #define CONFIG_AUTODETECT 0 - #define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 - #define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 - #define CONFIG_MEMORY_POISONING 0 - #define CONFIG_NEON_CLOBBER_TEST 0 - #define CONFIG_OSSFUZZ 0 - #define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 - #define CONFIG_THUMB 0 - #define CONFIG_VALGRIND_BACKTRACE 0 - #define CONFIG_XMM_CLOBBER_TEST 0 --#define CONFIG_BSFS 1 -+#define CONFIG_BSFS 0 - #define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 1 - #define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 - #define CONFIG_AANDCTTABLES 0 - #define CONFIG_AC3DSP 0 - #define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 - #define CONFIG_AUDIO_FRAME_QUEUE 0 - #define CONFIG_AUDIODSP 0 - #define CONFIG_BLOCKDSP 0 -@@ -594,8 +651,10 @@ - #define CONFIG_CBS_JPEG 0 - #define CONFIG_CBS_MPEG2 0 - #define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 - #define CONFIG_DIRAC_PARSE 0 - #define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 - #define CONFIG_DVPROFILE 0 - #define CONFIG_EXIF 0 - #define CONFIG_FAANDCT 1 -@@ -621,6 +680,7 @@ - #define CONFIG_IDCTDSP 1 - #define CONFIG_IIRFILTER 0 - #define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 - #define CONFIG_INTRAX8 0 - #define CONFIG_ISO_MEDIA 0 - #define CONFIG_IVIDSP 0 -@@ -637,7 +697,9 @@ - #define CONFIG_MPEGAUDIO 1 - #define CONFIG_MPEGAUDIODSP 1 - #define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 - #define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 - #define CONFIG_MPEGVIDEOENC 0 - #define CONFIG_MSS34DSP 0 - #define CONFIG_PIXBLOCKDSP 0 -@@ -660,7 +722,6 @@ - #define CONFIG_TEXTUREDSP 0 - #define CONFIG_TEXTUREDSPENC 0 - #define CONFIG_TPELDSP 0 --#define CONFIG_VAAPI_1 0 - #define CONFIG_VAAPI_ENCODE 0 - #define CONFIG_VC1DSP 0 - #define CONFIG_VIDEODSP 1 -@@ -669,14 +730,4 @@ - #define CONFIG_VP8DSP 1 - #define CONFIG_WMA_FREQS 0 - #define CONFIG_WMV2DSP 0 --#define CONFIG_NULL_BSF 1 --#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --#define CONFIG_VP8_DECODER 1 --#define CONFIG_VP9_DECODER 1 --#define CONFIG_AV1_DECODER 1 --#define CONFIG_FLAC_DECODER 1 --#define CONFIG_MP3_DECODER 1 --#define CONFIG_VP8_PARSER 1 --#define CONFIG_VP9_PARSER 1 --#define CONFIG_AV1_PARSER 1 - #endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_unix_aarch64.h b/media/ffvpx/config_unix_aarch64.h ---- a/media/ffvpx/config_unix_aarch64.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_unix_aarch64.h 2023-04-06 12:49:19.192546469 +0200 -@@ -0,0 +1,735 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_H -+#define FFMPEG_CONFIG_H -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac,av1' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --disable-iconv --as=clang --cc=clang" -+#define FFMPEG_LICENSE "LGPL version 2.1 or later" -+#define CONFIG_THIS_YEAR 2022 -+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" -+#define AVCONV_DATADIR "/usr/local/share/ffmpeg" -+#define CC_IDENT "Debian clang version 11.0.1-2" -+#define OS_NAME linux -+#define av_restrict restrict -+#define EXTERN_PREFIX "" -+#define EXTERN_ASM -+#define BUILDSUF "" -+#define SLIBSUF ".so" -+#define HAVE_MMX2 HAVE_MMXEXT -+#define SWS_MAX_FILTER_SIZE 256 -+#define ARCH_AARCH64 1 -+#define ARCH_ALPHA 0 -+#define ARCH_ARM 0 -+#define ARCH_AVR32 0 -+#define ARCH_AVR32_AP 0 -+#define ARCH_AVR32_UC 0 -+#define ARCH_BFIN 0 -+#define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 -+#define ARCH_M68K 0 -+#define ARCH_MIPS 0 -+#define ARCH_MIPS64 0 -+#define ARCH_PARISC 0 -+#define ARCH_PPC 0 -+#define ARCH_PPC64 0 -+#define ARCH_RISCV 0 -+#define ARCH_S390 0 -+#define ARCH_SH4 0 -+#define ARCH_SPARC 0 -+#define ARCH_SPARC64 0 -+#define ARCH_TILEGX 0 -+#define ARCH_TILEPRO 0 -+#define ARCH_TOMI 0 -+#define ARCH_X86 0 -+#define ARCH_X86_32 0 -+#define ARCH_X86_64 0 -+#define HAVE_ARMV5TE 0 -+#define HAVE_ARMV6 0 -+#define HAVE_ARMV6T2 0 -+#define HAVE_ARMV8 1 -+#define HAVE_NEON 1 -+#define HAVE_VFP 1 -+#define HAVE_VFPV3 0 -+#define HAVE_SETEND 0 -+#define HAVE_ALTIVEC 0 -+#define HAVE_DCBZL 0 -+#define HAVE_LDBRX 0 -+#define HAVE_POWER8 0 -+#define HAVE_PPC4XX 0 -+#define HAVE_VSX 0 -+#define HAVE_AESNI 0 -+#define HAVE_AMD3DNOW 0 -+#define HAVE_AMD3DNOWEXT 0 -+#define HAVE_AVX 0 -+#define HAVE_AVX2 0 -+#define HAVE_AVX512 0 -+#define HAVE_AVX512ICL 0 -+#define HAVE_FMA3 0 -+#define HAVE_FMA4 0 -+#define HAVE_MMX 0 -+#define HAVE_MMXEXT 0 -+#define HAVE_SSE 0 -+#define HAVE_SSE2 0 -+#define HAVE_SSE3 0 -+#define HAVE_SSE4 0 -+#define HAVE_SSE42 0 -+#define HAVE_SSSE3 0 -+#define HAVE_XOP 0 -+#define HAVE_CPUNOP 0 -+#define HAVE_I686 0 -+#define HAVE_MIPSFPU 0 -+#define HAVE_MIPS32R2 0 -+#define HAVE_MIPS32R5 0 -+#define HAVE_MIPS64R2 0 -+#define HAVE_MIPS32R6 0 -+#define HAVE_MIPS64R6 0 -+#define HAVE_MIPSDSP 0 -+#define HAVE_MIPSDSPR2 0 -+#define HAVE_MSA 0 -+#define HAVE_LOONGSON2 0 -+#define HAVE_LOONGSON3 0 -+#define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 -+#define HAVE_ARMV5TE_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 0 -+#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV8_EXTERNAL 1 -+#define HAVE_NEON_EXTERNAL 1 -+#define HAVE_VFP_EXTERNAL 1 -+#define HAVE_VFPV3_EXTERNAL 0 -+#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_ALTIVEC_EXTERNAL 0 -+#define HAVE_DCBZL_EXTERNAL 0 -+#define HAVE_LDBRX_EXTERNAL 0 -+#define HAVE_POWER8_EXTERNAL 0 -+#define HAVE_PPC4XX_EXTERNAL 0 -+#define HAVE_VSX_EXTERNAL 0 -+#define HAVE_AESNI_EXTERNAL 0 -+#define HAVE_AMD3DNOW_EXTERNAL 0 -+#define HAVE_AMD3DNOWEXT_EXTERNAL 0 -+#define HAVE_AVX_EXTERNAL 0 -+#define HAVE_AVX2_EXTERNAL 0 -+#define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_AVX512ICL_EXTERNAL 0 -+#define HAVE_FMA3_EXTERNAL 0 -+#define HAVE_FMA4_EXTERNAL 0 -+#define HAVE_MMX_EXTERNAL 0 -+#define HAVE_MMXEXT_EXTERNAL 0 -+#define HAVE_SSE_EXTERNAL 0 -+#define HAVE_SSE2_EXTERNAL 0 -+#define HAVE_SSE3_EXTERNAL 0 -+#define HAVE_SSE4_EXTERNAL 0 -+#define HAVE_SSE42_EXTERNAL 0 -+#define HAVE_SSSE3_EXTERNAL 0 -+#define HAVE_XOP_EXTERNAL 0 -+#define HAVE_CPUNOP_EXTERNAL 0 -+#define HAVE_I686_EXTERNAL 0 -+#define HAVE_MIPSFPU_EXTERNAL 0 -+#define HAVE_MIPS32R2_EXTERNAL 0 -+#define HAVE_MIPS32R5_EXTERNAL 0 -+#define HAVE_MIPS64R2_EXTERNAL 0 -+#define HAVE_MIPS32R6_EXTERNAL 0 -+#define HAVE_MIPS64R6_EXTERNAL 0 -+#define HAVE_MIPSDSP_EXTERNAL 0 -+#define HAVE_MIPSDSPR2_EXTERNAL 0 -+#define HAVE_MSA_EXTERNAL 0 -+#define HAVE_LOONGSON2_EXTERNAL 0 -+#define HAVE_LOONGSON3_EXTERNAL 0 -+#define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 -+#define HAVE_ARMV5TE_INLINE 0 -+#define HAVE_ARMV6_INLINE 0 -+#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV8_INLINE 1 -+#define HAVE_NEON_INLINE 1 -+#define HAVE_VFP_INLINE 1 -+#define HAVE_VFPV3_INLINE 0 -+#define HAVE_SETEND_INLINE 0 -+#define HAVE_ALTIVEC_INLINE 0 -+#define HAVE_DCBZL_INLINE 0 -+#define HAVE_LDBRX_INLINE 0 -+#define HAVE_POWER8_INLINE 0 -+#define HAVE_PPC4XX_INLINE 0 -+#define HAVE_VSX_INLINE 0 -+#define HAVE_AESNI_INLINE 0 -+#define HAVE_AMD3DNOW_INLINE 0 -+#define HAVE_AMD3DNOWEXT_INLINE 0 -+#define HAVE_AVX_INLINE 0 -+#define HAVE_AVX2_INLINE 0 -+#define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 -+#define HAVE_FMA3_INLINE 0 -+#define HAVE_FMA4_INLINE 0 -+#define HAVE_MMX_INLINE 0 -+#define HAVE_MMXEXT_INLINE 0 -+#define HAVE_SSE_INLINE 0 -+#define HAVE_SSE2_INLINE 0 -+#define HAVE_SSE3_INLINE 0 -+#define HAVE_SSE4_INLINE 0 -+#define HAVE_SSE42_INLINE 0 -+#define HAVE_SSSE3_INLINE 0 -+#define HAVE_XOP_INLINE 0 -+#define HAVE_CPUNOP_INLINE 0 -+#define HAVE_I686_INLINE 0 -+#define HAVE_MIPSFPU_INLINE 0 -+#define HAVE_MIPS32R2_INLINE 0 -+#define HAVE_MIPS32R5_INLINE 0 -+#define HAVE_MIPS64R2_INLINE 0 -+#define HAVE_MIPS32R6_INLINE 0 -+#define HAVE_MIPS64R6_INLINE 0 -+#define HAVE_MIPSDSP_INLINE 0 -+#define HAVE_MIPSDSPR2_INLINE 0 -+#define HAVE_MSA_INLINE 0 -+#define HAVE_LOONGSON2_INLINE 0 -+#define HAVE_LOONGSON3_INLINE 0 -+#define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 -+#define HAVE_ALIGNED_STACK 1 -+#define HAVE_FAST_64BIT 1 -+#define HAVE_FAST_CLZ 1 -+#define HAVE_FAST_CMOV 0 -+#define HAVE_LOCAL_ALIGNED 0 -+#define HAVE_SIMD_ALIGN_16 1 -+#define HAVE_SIMD_ALIGN_32 0 -+#define HAVE_SIMD_ALIGN_64 0 -+#define HAVE_ATOMIC_CAS_PTR 0 -+#define HAVE_MACHINE_RW_BARRIER 0 -+#define HAVE_MEMORYBARRIER 0 -+#define HAVE_MM_EMPTY 0 -+#define HAVE_RDTSC 0 -+#define HAVE_SEM_TIMEDWAIT 1 -+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 -+#define HAVE_INLINE_ASM 1 -+#define HAVE_SYMVER 1 -+#define HAVE_X86ASM 0 -+#define HAVE_BIGENDIAN 0 -+#define HAVE_FAST_UNALIGNED 1 -+#define HAVE_ARPA_INET_H 1 -+#define HAVE_ASM_TYPES_H 1 -+#define HAVE_CDIO_PARANOIA_H 0 -+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 -+#define HAVE_CUDA_H 0 -+#define HAVE_DISPATCH_DISPATCH_H 0 -+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 -+#define HAVE_DEV_IC_BT8XX_H 0 -+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 -+#define HAVE_DIRECT_H 0 -+#define HAVE_DIRENT_H 1 -+#define HAVE_DXGIDEBUG_H 0 -+#define HAVE_DXVA_H 0 -+#define HAVE_ES2_GL_H 0 -+#define HAVE_GSM_H 0 -+#define HAVE_IO_H 0 -+#define HAVE_LINUX_DMA_BUF_H 0 -+#define HAVE_LINUX_PERF_EVENT_H 1 -+#define HAVE_MACHINE_IOCTL_BT848_H 0 -+#define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_OPENCV2_CORE_CORE_C_H 0 -+#define HAVE_OPENGL_GL3_H 0 -+#define HAVE_POLL_H 1 -+#define HAVE_SYS_PARAM_H 1 -+#define HAVE_SYS_RESOURCE_H 1 -+#define HAVE_SYS_SELECT_H 1 -+#define HAVE_SYS_SOUNDCARD_H 1 -+#define HAVE_SYS_TIME_H 1 -+#define HAVE_SYS_UN_H 1 -+#define HAVE_SYS_VIDEOIO_H 0 -+#define HAVE_TERMIOS_H 1 -+#define HAVE_UDPLITE_H 0 -+#define HAVE_UNISTD_H 1 -+#define HAVE_VALGRIND_VALGRIND_H 0 -+#define HAVE_WINDOWS_H 0 -+#define HAVE_WINSOCK2_H 0 -+#define HAVE_INTRINSICS_NEON 1 -+#define HAVE_ATANF 1 -+#define HAVE_ATAN2F 1 -+#define HAVE_CBRT 1 -+#define HAVE_CBRTF 1 -+#define HAVE_COPYSIGN 1 -+#define HAVE_COSF 1 -+#define HAVE_ERF 1 -+#define HAVE_EXP2 1 -+#define HAVE_EXP2F 1 -+#define HAVE_EXPF 1 -+#define HAVE_HYPOT 1 -+#define HAVE_ISFINITE 1 -+#define HAVE_ISINF 1 -+#define HAVE_ISNAN 1 -+#define HAVE_LDEXPF 1 -+#define HAVE_LLRINT 1 -+#define HAVE_LLRINTF 1 -+#define HAVE_LOG2 1 -+#define HAVE_LOG2F 1 -+#define HAVE_LOG10F 1 -+#define HAVE_LRINT 1 -+#define HAVE_LRINTF 1 -+#define HAVE_POWF 1 -+#define HAVE_RINT 1 -+#define HAVE_ROUND 1 -+#define HAVE_ROUNDF 1 -+#define HAVE_SINF 1 -+#define HAVE_TRUNC 1 -+#define HAVE_TRUNCF 1 -+#define HAVE_DOS_PATHS 0 -+#define HAVE_LIBC_MSVCRT 0 -+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 -+#define HAVE_SECTION_DATA_REL_RO 1 -+#define HAVE_THREADS 1 -+#define HAVE_UWP 0 -+#define HAVE_WINRT 0 -+#define HAVE_ACCESS 1 -+#define HAVE_ALIGNED_MALLOC 0 -+#define HAVE_CLOCK_GETTIME 1 -+#define HAVE_CLOSESOCKET 0 -+#define HAVE_COMMANDLINETOARGVW 0 -+#define HAVE_FCNTL 1 -+#define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 1 -+#define HAVE_GETENV 1 -+#define HAVE_GETHRTIME 0 -+#define HAVE_GETOPT 1 -+#define HAVE_GETMODULEHANDLE 0 -+#define HAVE_GETPROCESSAFFINITYMASK 0 -+#define HAVE_GETPROCESSMEMORYINFO 0 -+#define HAVE_GETPROCESSTIMES 0 -+#define HAVE_GETRUSAGE 1 -+#define HAVE_GETSTDHANDLE 0 -+#define HAVE_GETSYSTEMTIMEASFILETIME 0 -+#define HAVE_GETTIMEOFDAY 1 -+#define HAVE_GLOB 1 -+#define HAVE_GLXGETPROCADDRESS 0 -+#define HAVE_GMTIME_R 1 -+#define HAVE_INET_ATON 1 -+#define HAVE_ISATTY 1 -+#define HAVE_KBHIT 0 -+#define HAVE_LSTAT 1 -+#define HAVE_LZO1X_999_COMPRESS 0 -+#define HAVE_MACH_ABSOLUTE_TIME 0 -+#define HAVE_MAPVIEWOFFILE 0 -+#define HAVE_MKSTEMP 1 -+#define HAVE_MMAP 1 -+#define HAVE_MPROTECT 1 -+#define HAVE_NANOSLEEP 1 -+#define HAVE_PEEKNAMEDPIPE 0 -+#define HAVE_PTHREAD_CANCEL 1 -+#define HAVE_SCHED_GETAFFINITY 1 -+#define HAVE_SECITEMIMPORT 0 -+#define HAVE_SETCONSOLETEXTATTRIBUTE 0 -+#define HAVE_SETCONSOLECTRLHANDLER 0 -+#define HAVE_SETDLLDIRECTORY 0 -+#define HAVE_SETMODE 0 -+#define HAVE_SETRLIMIT 1 -+#define HAVE_SLEEP 0 -+#define HAVE_STRERROR_R 1 -+#define HAVE_SYSCONF 1 -+#define HAVE_SYSCTL 1 -+#define HAVE_USLEEP 1 -+#define HAVE_UTGETOSTYPEFROMSTRING 0 -+#define HAVE_VIRTUALALLOC 0 -+#define HAVE_WGLGETPROCADDRESS 0 -+#define HAVE_BCRYPT 0 -+#define HAVE_VAAPI_DRM 0 -+#define HAVE_VAAPI_X11 0 -+#define HAVE_VDPAU_X11 0 -+#define HAVE_PTHREADS 1 -+#define HAVE_OS2THREADS 0 -+#define HAVE_W32THREADS 0 -+#define HAVE_AS_ARCH_DIRECTIVE 0 -+#define HAVE_AS_DN_DIRECTIVE 0 -+#define HAVE_AS_FPU_DIRECTIVE 0 -+#define HAVE_AS_FUNC 0 -+#define HAVE_AS_OBJECT_ARCH 0 -+#define HAVE_ASM_MOD_Q 0 -+#define HAVE_BLOCKS_EXTENSION 0 -+#define HAVE_EBP_AVAILABLE 0 -+#define HAVE_EBX_AVAILABLE 0 -+#define HAVE_GNU_AS 0 -+#define HAVE_GNU_WINDRES 0 -+#define HAVE_IBM_ASM 0 -+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 -+#define HAVE_INLINE_ASM_LABELS 1 -+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1 -+#define HAVE_PRAGMA_DEPRECATED 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 -+#define HAVE_SYMVER_ASM_LABEL 1 -+#define HAVE_SYMVER_GNU_ASM 1 -+#define HAVE_VFP_ARGS 0 -+#define HAVE_XFORM_ASM 0 -+#define HAVE_XMM_CLOBBERS 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 -+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 -+#define HAVE_SOCKLEN_T 1 -+#define HAVE_STRUCT_ADDRINFO 1 -+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -+#define HAVE_STRUCT_IP_MREQ_SOURCE 1 -+#define HAVE_STRUCT_IPV6_MREQ 1 -+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 1 -+#define HAVE_STRUCT_POLLFD 1 -+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1 -+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 -+#define HAVE_STRUCT_SOCKADDR_IN6 1 -+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 -+#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 0 -+#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_OPENCL_D3D11 0 -+#define HAVE_OPENCL_DRM_ARM 0 -+#define HAVE_OPENCL_DRM_BEIGNET 0 -+#define HAVE_OPENCL_DXVA2 0 -+#define HAVE_OPENCL_VAAPI_BEIGNET 0 -+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 -+#define HAVE_PERL 1 -+#define HAVE_POD2MAN 1 -+#define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 0 -+#define HAVE_ZLIB_GZIP 0 -+#define CONFIG_DOC 0 -+#define CONFIG_HTMLPAGES 0 -+#define CONFIG_MANPAGES 1 -+#define CONFIG_PODPAGES 1 -+#define CONFIG_TXTPAGES 0 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 -+#define CONFIG_AVIO_READING_EXAMPLE 1 -+#define CONFIG_DECODE_AUDIO_EXAMPLE 1 -+#define CONFIG_DECODE_VIDEO_EXAMPLE 1 -+#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 -+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 -+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 -+#define CONFIG_EXTRACT_MVS_EXAMPLE 0 -+#define CONFIG_FILTER_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 -+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 -+#define CONFIG_HW_DECODE_EXAMPLE 0 -+#define CONFIG_METADATA_EXAMPLE 0 -+#define CONFIG_MUXING_EXAMPLE 0 -+#define CONFIG_QSVDEC_EXAMPLE 0 -+#define CONFIG_REMUXING_EXAMPLE 0 -+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 -+#define CONFIG_SCALING_VIDEO_EXAMPLE 0 -+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 -+#define CONFIG_TRANSCODING_EXAMPLE 0 -+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 -+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 -+#define CONFIG_AVISYNTH 0 -+#define CONFIG_FREI0R 0 -+#define CONFIG_LIBCDIO 0 -+#define CONFIG_LIBDAVS2 0 -+#define CONFIG_LIBRUBBERBAND 0 -+#define CONFIG_LIBVIDSTAB 0 -+#define CONFIG_LIBX264 0 -+#define CONFIG_LIBX265 0 -+#define CONFIG_LIBXAVS 0 -+#define CONFIG_LIBXAVS2 0 -+#define CONFIG_LIBXVID 0 -+#define CONFIG_DECKLINK 0 -+#define CONFIG_LIBFDK_AAC 0 -+#define CONFIG_LIBTLS 0 -+#define CONFIG_GMP 0 -+#define CONFIG_LIBARIBB24 0 -+#define CONFIG_LIBLENSFUN 0 -+#define CONFIG_LIBOPENCORE_AMRNB 0 -+#define CONFIG_LIBOPENCORE_AMRWB 0 -+#define CONFIG_LIBVO_AMRWBENC 0 -+#define CONFIG_MBEDTLS 0 -+#define CONFIG_RKMPP 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_CHROMAPRINT 0 -+#define CONFIG_GCRYPT 0 -+#define CONFIG_GNUTLS 0 -+#define CONFIG_JNI 0 -+#define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 -+#define CONFIG_LIBAOM 0 -+#define CONFIG_LIBASS 0 -+#define CONFIG_LIBBLURAY 0 -+#define CONFIG_LIBBS2B 0 -+#define CONFIG_LIBCACA 0 -+#define CONFIG_LIBCELT 0 -+#define CONFIG_LIBCODEC2 0 -+#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDC1394 0 -+#define CONFIG_LIBDRM 0 -+#define CONFIG_LIBFLITE 0 -+#define CONFIG_LIBFONTCONFIG 0 -+#define CONFIG_LIBFREETYPE 0 -+#define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 -+#define CONFIG_LIBGME 0 -+#define CONFIG_LIBGSM 0 -+#define CONFIG_LIBIEC61883 0 -+#define CONFIG_LIBILBC 0 -+#define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 -+#define CONFIG_LIBKLVANC 0 -+#define CONFIG_LIBKVAZAAR 0 -+#define CONFIG_LIBMODPLUG 0 -+#define CONFIG_LIBMP3LAME 0 -+#define CONFIG_LIBMYSOFA 0 -+#define CONFIG_LIBOPENCV 0 -+#define CONFIG_LIBOPENH264 0 -+#define CONFIG_LIBOPENJPEG 0 -+#define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 -+#define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 -+#define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 -+#define CONFIG_LIBRSVG 0 -+#define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 -+#define CONFIG_LIBSHINE 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_LIBSNAPPY 0 -+#define CONFIG_LIBSOXR 0 -+#define CONFIG_LIBSPEEX 0 -+#define CONFIG_LIBSRT 0 -+#define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 -+#define CONFIG_LIBTENSORFLOW 0 -+#define CONFIG_LIBTESSERACT 0 -+#define CONFIG_LIBTHEORA 0 -+#define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 -+#define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 -+#define CONFIG_LIBVORBIS 0 -+#define CONFIG_LIBVPX 0 -+#define CONFIG_LIBWEBP 0 -+#define CONFIG_LIBXML2 0 -+#define CONFIG_LIBZIMG 0 -+#define CONFIG_LIBZMQ 0 -+#define CONFIG_LIBZVBI 0 -+#define CONFIG_LV2 0 -+#define CONFIG_MEDIACODEC 0 -+#define CONFIG_OPENAL 0 -+#define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 -+#define CONFIG_POCKETSPHINX 0 -+#define CONFIG_VAPOURSYNTH 0 -+#define CONFIG_ALSA 0 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 -+#define CONFIG_ICONV 0 -+#define CONFIG_LIBXCB 0 -+#define CONFIG_LIBXCB_SHM 0 -+#define CONFIG_LIBXCB_SHAPE 0 -+#define CONFIG_LIBXCB_XFIXES 0 -+#define CONFIG_LZMA 0 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 -+#define CONFIG_SDL2 0 -+#define CONFIG_SECURETRANSPORT 0 -+#define CONFIG_SNDIO 0 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 -+#define CONFIG_CUDA_NVCC 0 -+#define CONFIG_CUDA_SDK 0 -+#define CONFIG_LIBNPP 0 -+#define CONFIG_LIBMFX 0 -+#define CONFIG_MMAL 0 -+#define CONFIG_OMX 0 -+#define CONFIG_OPENCL 0 -+#define CONFIG_AMF 0 -+#define CONFIG_AUDIOTOOLBOX 0 -+#define CONFIG_CRYSTALHD 0 -+#define CONFIG_CUDA 0 -+#define CONFIG_CUDA_LLVM 0 -+#define CONFIG_CUVID 0 -+#define CONFIG_D3D11VA 0 -+#define CONFIG_DXVA2 0 -+#define CONFIG_FFNVCODEC 0 -+#define CONFIG_NVDEC 0 -+#define CONFIG_NVENC 0 -+#define CONFIG_VAAPI 0 -+#define CONFIG_VDPAU 0 -+#define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 -+#define CONFIG_V4L2_M2M 0 -+#define CONFIG_FTRAPV 0 -+#define CONFIG_GRAY 0 -+#define CONFIG_HARDCODED_TABLES 0 -+#define CONFIG_OMX_RPI 0 -+#define CONFIG_RUNTIME_CPUDETECT 1 -+#define CONFIG_SAFE_BITSTREAM_READER 1 -+#define CONFIG_SHARED 1 -+#define CONFIG_SMALL 0 -+#define CONFIG_STATIC 0 -+#define CONFIG_SWSCALE_ALPHA 1 -+#define CONFIG_GPL 0 -+#define CONFIG_NONFREE 0 -+#define CONFIG_VERSION3 0 -+#define CONFIG_AVDEVICE 0 -+#define CONFIG_AVFILTER 0 -+#define CONFIG_SWSCALE 0 -+#define CONFIG_POSTPROC 0 -+#define CONFIG_AVFORMAT 0 -+#define CONFIG_AVCODEC 1 -+#define CONFIG_SWRESAMPLE 0 -+#define CONFIG_AVUTIL 1 -+#define CONFIG_FFPLAY 0 -+#define CONFIG_FFPROBE 0 -+#define CONFIG_FFMPEG 0 -+#define CONFIG_DCT 1 -+#define CONFIG_DWT 0 -+#define CONFIG_ERROR_RESILIENCE 0 -+#define CONFIG_FAAN 1 -+#define CONFIG_FAST_UNALIGNED 1 -+#define CONFIG_FFT 1 -+#define CONFIG_LSP 0 -+#define CONFIG_MDCT 0 -+#define CONFIG_PIXELUTILS 0 -+#define CONFIG_NETWORK 0 -+#define CONFIG_RDFT 1 -+#define CONFIG_AUTODETECT 0 -+#define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 -+#define CONFIG_LINUX_PERF 1 -+#define CONFIG_MACOS_KPERF 0 -+#define CONFIG_MEMORY_POISONING 0 -+#define CONFIG_NEON_CLOBBER_TEST 0 -+#define CONFIG_OSSFUZZ 0 -+#define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 -+#define CONFIG_THUMB 0 -+#define CONFIG_VALGRIND_BACKTRACE 0 -+#define CONFIG_XMM_CLOBBER_TEST 0 -+#define CONFIG_BSFS 0 -+#define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 -+#define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 -+#define CONFIG_AANDCTTABLES 0 -+#define CONFIG_AC3DSP 0 -+#define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 -+#define CONFIG_AUDIO_FRAME_QUEUE 0 -+#define CONFIG_AUDIODSP 0 -+#define CONFIG_BLOCKDSP 0 -+#define CONFIG_BSWAPDSP 0 -+#define CONFIG_CABAC 0 -+#define CONFIG_CBS 1 -+#define CONFIG_CBS_AV1 1 -+#define CONFIG_CBS_H264 0 -+#define CONFIG_CBS_H265 0 -+#define CONFIG_CBS_JPEG 0 -+#define CONFIG_CBS_MPEG2 0 -+#define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 -+#define CONFIG_DIRAC_PARSE 0 -+#define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 -+#define CONFIG_DVPROFILE 0 -+#define CONFIG_EXIF 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 -+#define CONFIG_FLACDSP 1 -+#define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 -+#define CONFIG_G722DSP 0 -+#define CONFIG_GOLOMB 0 -+#define CONFIG_GPLV3 0 -+#define CONFIG_H263DSP 0 -+#define CONFIG_H264CHROMA 0 -+#define CONFIG_H264DSP 0 -+#define CONFIG_H264PARSE 0 -+#define CONFIG_H264PRED 1 -+#define CONFIG_H264QPEL 0 -+#define CONFIG_HEVCPARSE 0 -+#define CONFIG_HPELDSP 0 -+#define CONFIG_HUFFMAN 0 -+#define CONFIG_HUFFYUVDSP 0 -+#define CONFIG_HUFFYUVENCDSP 0 -+#define CONFIG_IDCTDSP 1 -+#define CONFIG_IIRFILTER 0 -+#define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 -+#define CONFIG_INTRAX8 0 -+#define CONFIG_ISO_MEDIA 0 -+#define CONFIG_IVIDSP 0 -+#define CONFIG_JPEGTABLES 0 -+#define CONFIG_LGPLV3 0 -+#define CONFIG_LIBX262 0 -+#define CONFIG_LLAUDDSP 0 -+#define CONFIG_LLVIDDSP 0 -+#define CONFIG_LLVIDENCDSP 0 -+#define CONFIG_LPC 0 -+#define CONFIG_LZF 0 -+#define CONFIG_ME_CMP 0 -+#define CONFIG_MPEG_ER 0 -+#define CONFIG_MPEGAUDIO 1 -+#define CONFIG_MPEGAUDIODSP 1 -+#define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 -+#define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 -+#define CONFIG_MPEGVIDEOENC 0 -+#define CONFIG_MSS34DSP 0 -+#define CONFIG_PIXBLOCKDSP 0 -+#define CONFIG_QPELDSP 0 -+#define CONFIG_QSV 0 -+#define CONFIG_QSVDEC 0 -+#define CONFIG_QSVENC 0 -+#define CONFIG_QSVVPP 0 -+#define CONFIG_RANGECODER 0 -+#define CONFIG_RIFFDEC 0 -+#define CONFIG_RIFFENC 0 -+#define CONFIG_RTPDEC 0 -+#define CONFIG_RTPENC_CHAIN 0 -+#define CONFIG_RV34DSP 0 -+#define CONFIG_SCENE_SAD 0 -+#define CONFIG_SINEWIN 0 -+#define CONFIG_SNAPPY 0 -+#define CONFIG_SRTP 0 -+#define CONFIG_STARTCODE 0 -+#define CONFIG_TEXTUREDSP 0 -+#define CONFIG_TEXTUREDSPENC 0 -+#define CONFIG_TPELDSP 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VAAPI_ENCODE 0 -+#define CONFIG_VC1DSP 0 -+#define CONFIG_VIDEODSP 1 -+#define CONFIG_VP3DSP 0 -+#define CONFIG_VP56DSP 0 -+#define CONFIG_VP8DSP 1 -+#define CONFIG_WMA_FREQS 0 -+#define CONFIG_WMV2DSP 0 -+#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_win32.asm b/media/ffvpx/config_win32.asm ---- a/media/ffvpx/config_win32.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_win32.asm 2023-04-06 12:49:19.192546469 +0200 -@@ -7,12 +7,16 @@ - %define ARCH_AVR32_UC 0 - %define ARCH_BFIN 0 - %define ARCH_IA64 0 -+%define ARCH_LOONGARCH 0 -+%define ARCH_LOONGARCH32 0 -+%define ARCH_LOONGARCH64 0 - %define ARCH_M68K 0 - %define ARCH_MIPS 0 - %define ARCH_MIPS64 0 - %define ARCH_PARISC 0 - %define ARCH_PPC 0 - %define ARCH_PPC64 0 -+%define ARCH_RISCV 0 - %define ARCH_S390 0 - %define ARCH_SH4 0 - %define ARCH_SPARC 0 -@@ -43,6 +47,7 @@ - %define HAVE_AVX 1 - %define HAVE_AVX2 1 - %define HAVE_AVX512 1 -+%define HAVE_AVX512ICL 1 - %define HAVE_FMA3 1 - %define HAVE_FMA4 1 - %define HAVE_MMX 1 -@@ -65,10 +70,11 @@ - %define HAVE_MIPSDSP 0 - %define HAVE_MIPSDSPR2 0 - %define HAVE_MSA 0 --%define HAVE_MSA2 0 - %define HAVE_LOONGSON2 0 - %define HAVE_LOONGSON3 0 - %define HAVE_MMI 0 -+%define HAVE_LSX 0 -+%define HAVE_LASX 0 - %define HAVE_ARMV5TE_EXTERNAL 0 - %define HAVE_ARMV6_EXTERNAL 0 - %define HAVE_ARMV6T2_EXTERNAL 0 -@@ -89,6 +95,7 @@ - %define HAVE_AVX_EXTERNAL 1 - %define HAVE_AVX2_EXTERNAL 1 - %define HAVE_AVX512_EXTERNAL 1 -+%define HAVE_AVX512ICL_EXTERNAL 0 - %define HAVE_FMA3_EXTERNAL 1 - %define HAVE_FMA4_EXTERNAL 1 - %define HAVE_MMX_EXTERNAL 1 -@@ -111,10 +118,11 @@ - %define HAVE_MIPSDSP_EXTERNAL 0 - %define HAVE_MIPSDSPR2_EXTERNAL 0 - %define HAVE_MSA_EXTERNAL 0 --%define HAVE_MSA2_EXTERNAL 0 - %define HAVE_LOONGSON2_EXTERNAL 0 - %define HAVE_LOONGSON3_EXTERNAL 0 - %define HAVE_MMI_EXTERNAL 0 -+%define HAVE_LSX_EXTERNAL 0 -+%define HAVE_LASX_EXTERNAL 0 - %define HAVE_ARMV5TE_INLINE 0 - %define HAVE_ARMV6_INLINE 0 - %define HAVE_ARMV6T2_INLINE 0 -@@ -135,6 +143,7 @@ - %define HAVE_AVX_INLINE 0 - %define HAVE_AVX2_INLINE 0 - %define HAVE_AVX512_INLINE 0 -+%define HAVE_AVX512ICL_INLINE 0 - %define HAVE_FMA3_INLINE 0 - %define HAVE_FMA4_INLINE 0 - %define HAVE_MMX_INLINE 0 -@@ -157,13 +166,14 @@ - %define HAVE_MIPSDSP_INLINE 0 - %define HAVE_MIPSDSPR2_INLINE 0 - %define HAVE_MSA_INLINE 0 --%define HAVE_MSA2_INLINE 0 - %define HAVE_LOONGSON2_INLINE 0 - %define HAVE_LOONGSON3_INLINE 0 - %define HAVE_MMI_INLINE 0 -+%define HAVE_LSX_INLINE 0 -+%define HAVE_LASX_INLINE 0 - %define HAVE_ALIGNED_STACK 0 - %define HAVE_FAST_64BIT 0 --%define HAVE_FAST_CLZ 0 -+%define HAVE_FAST_CLZ 1 - %define HAVE_FAST_CMOV 0 - %define HAVE_LOCAL_ALIGNED 1 - %define HAVE_SIMD_ALIGN_16 1 -@@ -201,6 +211,7 @@ - %define HAVE_ES2_GL_H 0 - %define HAVE_GSM_H 0 - %define HAVE_IO_H 1 -+%define HAVE_LINUX_DMA_BUF_H 0 - %define HAVE_LINUX_PERF_EVENT_H 0 - %define HAVE_MACHINE_IOCTL_BT848_H 0 - %define HAVE_MACHINE_IOCTL_METEOR_H 0 -@@ -264,12 +275,16 @@ - %define HAVE_COMMANDLINETOARGVW 1 - %define HAVE_FCNTL 0 - %define HAVE_GETADDRINFO 1 -+%define HAVE_GETAUXVAL 0 -+%define HAVE_GETENV 1 - %define HAVE_GETHRTIME 0 - %define HAVE_GETOPT 0 -+%define HAVE_GETMODULEHANDLE 1 - %define HAVE_GETPROCESSAFFINITYMASK 1 - %define HAVE_GETPROCESSMEMORYINFO 1 - %define HAVE_GETPROCESSTIMES 1 - %define HAVE_GETRUSAGE 0 -+%define HAVE_GETSTDHANDLE 1 - %define HAVE_GETSYSTEMTIMEASFILETIME 1 - %define HAVE_GETTIMEOFDAY 0 - %define HAVE_GLOB 0 -@@ -292,6 +307,7 @@ - %define HAVE_SECITEMIMPORT 0 - %define HAVE_SETCONSOLETEXTATTRIBUTE 1 - %define HAVE_SETCONSOLECTRLHANDLER 1 -+%define HAVE_SETDLLDIRECTORY 1 - %define HAVE_SETMODE 1 - %define HAVE_SETRLIMIT 0 - %define HAVE_SLEEP 1 -@@ -325,14 +341,29 @@ - %define HAVE_INLINE_ASM_LABELS 0 - %define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 - %define HAVE_PRAGMA_DEPRECATED 1 --%define HAVE_RSYNC_CONTIMEOUT 1 -+%define HAVE_RSYNC_CONTIMEOUT 0 - %define HAVE_SYMVER_ASM_LABEL 0 - %define HAVE_SYMVER_GNU_ASM 0 - %define HAVE_VFP_ARGS 0 - %define HAVE_XFORM_ASM 0 - %define HAVE_XMM_CLOBBERS 0 - %define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+%define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+%define HAVE_KCMVIDEOCODECTYPE_VP9 0 - %define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+%define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - %define HAVE_SOCKLEN_T 1 - %define HAVE_STRUCT_ADDRINFO 1 - %define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -347,7 +378,9 @@ - %define HAVE_STRUCT_SOCKADDR_STORAGE 1 - %define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 - %define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 --%define HAVE_MAKEINFO 1 -+%define HAVE_GZIP 1 -+%define HAVE_LIBDRM_GETFB2 0 -+%define HAVE_MAKEINFO 0 - %define HAVE_MAKEINFO_HTML 0 - %define HAVE_OPENCL_D3D11 0 - %define HAVE_OPENCL_DRM_ARM 0 -@@ -358,12 +391,14 @@ - %define HAVE_PERL 1 - %define HAVE_POD2MAN 1 - %define HAVE_TEXI2HTML 0 -+%define HAVE_XMLLINT 1 -+%define HAVE_ZLIB_GZIP 0 - %define CONFIG_DOC 0 - %define CONFIG_HTMLPAGES 0 - %define CONFIG_MANPAGES 1 - %define CONFIG_PODPAGES 1 --%define CONFIG_TXTPAGES 1 --%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+%define CONFIG_TXTPAGES 0 -+%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - %define CONFIG_AVIO_READING_EXAMPLE 1 - %define CONFIG_DECODE_AUDIO_EXAMPLE 1 - %define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -399,14 +434,12 @@ - %define CONFIG_LIBXVID 0 - %define CONFIG_DECKLINK 0 - %define CONFIG_LIBFDK_AAC 0 --%define CONFIG_OPENSSL 0 - %define CONFIG_LIBTLS 0 - %define CONFIG_GMP 0 - %define CONFIG_LIBARIBB24 0 - %define CONFIG_LIBLENSFUN 0 - %define CONFIG_LIBOPENCORE_AMRNB 0 - %define CONFIG_LIBOPENCORE_AMRWB 0 --%define CONFIG_LIBVMAF 0 - %define CONFIG_LIBVO_AMRWBENC 0 - %define CONFIG_MBEDTLS 0 - %define CONFIG_RKMPP 0 -@@ -416,6 +449,7 @@ - %define CONFIG_GNUTLS 0 - %define CONFIG_JNI 0 - %define CONFIG_LADSPA 0 -+%define CONFIG_LCMS2 0 - %define CONFIG_LIBAOM 0 - %define CONFIG_LIBASS 0 - %define CONFIG_LIBBLURAY 0 -@@ -430,11 +464,13 @@ - %define CONFIG_LIBFONTCONFIG 0 - %define CONFIG_LIBFREETYPE 0 - %define CONFIG_LIBFRIBIDI 0 -+%define CONFIG_LIBGLSLANG 0 - %define CONFIG_LIBGME 0 - %define CONFIG_LIBGSM 0 - %define CONFIG_LIBIEC61883 0 - %define CONFIG_LIBILBC 0 - %define CONFIG_LIBJACK 0 -+%define CONFIG_LIBJXL 0 - %define CONFIG_LIBKLVANC 0 - %define CONFIG_LIBKVAZAAR 0 - %define CONFIG_LIBMODPLUG 0 -@@ -444,10 +480,16 @@ - %define CONFIG_LIBOPENH264 0 - %define CONFIG_LIBOPENJPEG 0 - %define CONFIG_LIBOPENMPT 0 -+%define CONFIG_LIBOPENVINO 0 - %define CONFIG_LIBOPUS 0 -+%define CONFIG_LIBPLACEBO 0 - %define CONFIG_LIBPULSE 0 -+%define CONFIG_LIBRABBITMQ 0 -+%define CONFIG_LIBRAV1E 0 -+%define CONFIG_LIBRIST 0 - %define CONFIG_LIBRSVG 0 - %define CONFIG_LIBRTMP 0 -+%define CONFIG_LIBSHADERC 0 - %define CONFIG_LIBSHINE 0 - %define CONFIG_LIBSMBCLIENT 0 - %define CONFIG_LIBSNAPPY 0 -@@ -455,14 +497,16 @@ - %define CONFIG_LIBSPEEX 0 - %define CONFIG_LIBSRT 0 - %define CONFIG_LIBSSH 0 -+%define CONFIG_LIBSVTAV1 0 - %define CONFIG_LIBTENSORFLOW 0 - %define CONFIG_LIBTESSERACT 0 - %define CONFIG_LIBTHEORA 0 - %define CONFIG_LIBTWOLAME 0 -+%define CONFIG_LIBUAVS3D 0 - %define CONFIG_LIBV4L2 0 -+%define CONFIG_LIBVMAF 0 - %define CONFIG_LIBVORBIS 0 - %define CONFIG_LIBVPX 0 --%define CONFIG_LIBWAVPACK 0 - %define CONFIG_LIBWEBP 0 - %define CONFIG_LIBXML2 0 - %define CONFIG_LIBZIMG 0 -@@ -472,6 +516,7 @@ - %define CONFIG_MEDIACODEC 0 - %define CONFIG_OPENAL 0 - %define CONFIG_OPENGL 0 -+%define CONFIG_OPENSSL 0 - %define CONFIG_POCKETSPHINX 0 - %define CONFIG_VAPOURSYNTH 0 - %define CONFIG_ALSA 0 -@@ -485,7 +530,9 @@ - %define CONFIG_LIBXCB_SHAPE 0 - %define CONFIG_LIBXCB_XFIXES 0 - %define CONFIG_LZMA 0 --%define CONFIG_SCHANNEL 1 -+%define CONFIG_MEDIAFOUNDATION 0 -+%define CONFIG_METAL 0 -+%define CONFIG_SCHANNEL 0 - %define CONFIG_SDL2 0 - %define CONFIG_SECURETRANSPORT 0 - %define CONFIG_SNDIO 0 -@@ -512,8 +559,8 @@ - %define CONFIG_VAAPI 0 - %define CONFIG_VDPAU 0 - %define CONFIG_VIDEOTOOLBOX 0 -+%define CONFIG_VULKAN 0 - %define CONFIG_V4L2_M2M 0 --%define CONFIG_XVMC 0 - %define CONFIG_FTRAPV 0 - %define CONFIG_GRAY 0 - %define CONFIG_HARDCODED_TABLES 0 -@@ -534,7 +581,6 @@ - %define CONFIG_AVFORMAT 0 - %define CONFIG_AVCODEC 1 - %define CONFIG_SWRESAMPLE 0 --%define CONFIG_AVRESAMPLE 0 - %define CONFIG_AVUTIL 1 - %define CONFIG_FFPLAY 0 - %define CONFIG_FFPROBE 0 -@@ -546,27 +592,38 @@ - %define CONFIG_FAST_UNALIGNED 1 - %define CONFIG_FFT 1 - %define CONFIG_LSP 0 --%define CONFIG_LZO 0 - %define CONFIG_MDCT 0 - %define CONFIG_PIXELUTILS 0 - %define CONFIG_NETWORK 0 - %define CONFIG_RDFT 1 - %define CONFIG_AUTODETECT 0 - %define CONFIG_FONTCONFIG 0 -+%define CONFIG_LARGE_TESTS 1 - %define CONFIG_LINUX_PERF 0 -+%define CONFIG_MACOS_KPERF 0 - %define CONFIG_MEMORY_POISONING 0 - %define CONFIG_NEON_CLOBBER_TEST 0 - %define CONFIG_OSSFUZZ 0 - %define CONFIG_PIC 0 -+%define CONFIG_PTX_COMPRESSION 0 - %define CONFIG_THUMB 0 - %define CONFIG_VALGRIND_BACKTRACE 0 - %define CONFIG_XMM_CLOBBER_TEST 0 --%define CONFIG_BSFS 1 -+%define CONFIG_BSFS 0 - %define CONFIG_DECODERS 1 -+%define CONFIG_ENCODERS 0 -+%define CONFIG_HWACCELS 0 - %define CONFIG_PARSERS 1 -+%define CONFIG_INDEVS 0 -+%define CONFIG_OUTDEVS 0 -+%define CONFIG_FILTERS 0 -+%define CONFIG_DEMUXERS 0 -+%define CONFIG_MUXERS 0 -+%define CONFIG_PROTOCOLS 0 - %define CONFIG_AANDCTTABLES 0 - %define CONFIG_AC3DSP 0 - %define CONFIG_ADTS_HEADER 0 -+%define CONFIG_ATSC_A53 0 - %define CONFIG_AUDIO_FRAME_QUEUE 0 - %define CONFIG_AUDIODSP 0 - %define CONFIG_BLOCKDSP 0 -@@ -579,8 +636,10 @@ - %define CONFIG_CBS_JPEG 0 - %define CONFIG_CBS_MPEG2 0 - %define CONFIG_CBS_VP9 0 -+%define CONFIG_DEFLATE_WRAPPER 0 - %define CONFIG_DIRAC_PARSE 0 - %define CONFIG_DNN 0 -+%define CONFIG_DOVI_RPU 0 - %define CONFIG_DVPROFILE 0 - %define CONFIG_EXIF 0 - %define CONFIG_FAANDCT 1 -@@ -606,6 +665,7 @@ - %define CONFIG_IDCTDSP 1 - %define CONFIG_IIRFILTER 0 - %define CONFIG_MDCT15 0 -+%define CONFIG_INFLATE_WRAPPER 0 - %define CONFIG_INTRAX8 0 - %define CONFIG_ISO_MEDIA 0 - %define CONFIG_IVIDSP 0 -@@ -622,7 +682,9 @@ - %define CONFIG_MPEGAUDIO 1 - %define CONFIG_MPEGAUDIODSP 1 - %define CONFIG_MPEGAUDIOHEADER 1 -+%define CONFIG_MPEG4AUDIO 0 - %define CONFIG_MPEGVIDEO 0 -+%define CONFIG_MPEGVIDEODEC 0 - %define CONFIG_MPEGVIDEOENC 0 - %define CONFIG_MSS34DSP 0 - %define CONFIG_PIXBLOCKDSP 0 -@@ -654,11 +716,3 @@ - %define CONFIG_VP8DSP 1 - %define CONFIG_WMA_FREQS 0 - %define CONFIG_WMV2DSP 0 --%define CONFIG_NULL_BSF 1 --%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --%define CONFIG_VP8_DECODER 1 --%define CONFIG_VP9_DECODER 1 --%define CONFIG_FLAC_DECODER 1 --%define CONFIG_MP3_DECODER 1 --%define CONFIG_VP8_PARSER 1 --%define CONFIG_VP9_PARSER 1 -diff -Naur a/media/ffvpx/config_win32.h b/media/ffvpx/config_win32.h ---- a/media/ffvpx/config_win32.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_win32.h 2023-04-06 12:49:19.192546469 +0200 -@@ -1,13 +1,14 @@ - /* Automatically generated by configure - do not modify! */ - #ifndef FFMPEG_CONFIG_H - #define FFMPEG_CONFIG_H --#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3 --toolchain=msvc" -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --toolchain=msvc" - #define FFMPEG_LICENSE "LGPL version 2.1 or later" --#define CONFIG_THIS_YEAR 2019 -+#define CONFIG_THIS_YEAR 2022 - #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" - #define AVCONV_DATADIR "/usr/local/share/ffmpeg" --#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for x86" --#define av_restrict __restrict -+#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30133 for x86" -+#define OS_NAME win32 -+#define av_restrict restrict - #define EXTERN_PREFIX "_" - #define EXTERN_ASM _ - #define BUILDSUF "" -@@ -22,12 +23,16 @@ - #define ARCH_AVR32_UC 0 - #define ARCH_BFIN 0 - #define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 - #define ARCH_M68K 0 - #define ARCH_MIPS 0 - #define ARCH_MIPS64 0 - #define ARCH_PARISC 0 - #define ARCH_PPC 0 - #define ARCH_PPC64 0 -+#define ARCH_RISCV 0 - #define ARCH_S390 0 - #define ARCH_SH4 0 - #define ARCH_SPARC 0 -@@ -58,6 +63,7 @@ - #define HAVE_AVX 1 - #define HAVE_AVX2 1 - #define HAVE_AVX512 1 -+#define HAVE_AVX512ICL 1 - #define HAVE_FMA3 1 - #define HAVE_FMA4 1 - #define HAVE_MMX 1 -@@ -80,10 +86,11 @@ - #define HAVE_MIPSDSP 0 - #define HAVE_MIPSDSPR2 0 - #define HAVE_MSA 0 --#define HAVE_MSA2 0 - #define HAVE_LOONGSON2 0 - #define HAVE_LOONGSON3 0 - #define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 - #define HAVE_ARMV5TE_EXTERNAL 0 - #define HAVE_ARMV6_EXTERNAL 0 - #define HAVE_ARMV6T2_EXTERNAL 0 -@@ -104,6 +111,7 @@ - #define HAVE_AVX_EXTERNAL 1 - #define HAVE_AVX2_EXTERNAL 1 - #define HAVE_AVX512_EXTERNAL 1 -+#define HAVE_AVX512ICL_EXTERNAL 0 - #define HAVE_FMA3_EXTERNAL 1 - #define HAVE_FMA4_EXTERNAL 1 - #define HAVE_MMX_EXTERNAL 1 -@@ -126,10 +134,11 @@ - #define HAVE_MIPSDSP_EXTERNAL 0 - #define HAVE_MIPSDSPR2_EXTERNAL 0 - #define HAVE_MSA_EXTERNAL 0 --#define HAVE_MSA2_EXTERNAL 0 - #define HAVE_LOONGSON2_EXTERNAL 0 - #define HAVE_LOONGSON3_EXTERNAL 0 - #define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 - #define HAVE_ARMV5TE_INLINE 0 - #define HAVE_ARMV6_INLINE 0 - #define HAVE_ARMV6T2_INLINE 0 -@@ -150,6 +159,7 @@ - #define HAVE_AVX_INLINE 0 - #define HAVE_AVX2_INLINE 0 - #define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 - #define HAVE_FMA3_INLINE 0 - #define HAVE_FMA4_INLINE 0 - #define HAVE_MMX_INLINE 0 -@@ -172,13 +182,14 @@ - #define HAVE_MIPSDSP_INLINE 0 - #define HAVE_MIPSDSPR2_INLINE 0 - #define HAVE_MSA_INLINE 0 --#define HAVE_MSA2_INLINE 0 - #define HAVE_LOONGSON2_INLINE 0 - #define HAVE_LOONGSON3_INLINE 0 - #define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 - #define HAVE_ALIGNED_STACK 0 - #define HAVE_FAST_64BIT 0 --#define HAVE_FAST_CLZ 0 -+#define HAVE_FAST_CLZ 1 - #define HAVE_FAST_CMOV 0 - #define HAVE_LOCAL_ALIGNED 1 - #define HAVE_SIMD_ALIGN_16 1 -@@ -216,6 +227,7 @@ - #define HAVE_ES2_GL_H 0 - #define HAVE_GSM_H 0 - #define HAVE_IO_H 1 -+#define HAVE_LINUX_DMA_BUF_H 0 - #define HAVE_LINUX_PERF_EVENT_H 0 - #define HAVE_MACHINE_IOCTL_BT848_H 0 - #define HAVE_MACHINE_IOCTL_METEOR_H 0 -@@ -279,12 +291,16 @@ - #define HAVE_COMMANDLINETOARGVW 1 - #define HAVE_FCNTL 0 - #define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 0 -+#define HAVE_GETENV 1 - #define HAVE_GETHRTIME 0 - #define HAVE_GETOPT 0 -+#define HAVE_GETMODULEHANDLE 1 - #define HAVE_GETPROCESSAFFINITYMASK 1 - #define HAVE_GETPROCESSMEMORYINFO 1 - #define HAVE_GETPROCESSTIMES 1 - #define HAVE_GETRUSAGE 0 -+#define HAVE_GETSTDHANDLE 1 - #define HAVE_GETSYSTEMTIMEASFILETIME 1 - #define HAVE_GETTIMEOFDAY 0 - #define HAVE_GLOB 0 -@@ -307,6 +323,7 @@ - #define HAVE_SECITEMIMPORT 0 - #define HAVE_SETCONSOLETEXTATTRIBUTE 1 - #define HAVE_SETCONSOLECTRLHANDLER 1 -+#define HAVE_SETDLLDIRECTORY 1 - #define HAVE_SETMODE 1 - #define HAVE_SETRLIMIT 0 - #define HAVE_SLEEP 1 -@@ -340,14 +357,29 @@ - #define HAVE_INLINE_ASM_LABELS 0 - #define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 - #define HAVE_PRAGMA_DEPRECATED 1 --#define HAVE_RSYNC_CONTIMEOUT 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 - #define HAVE_SYMVER_ASM_LABEL 0 - #define HAVE_SYMVER_GNU_ASM 0 - #define HAVE_VFP_ARGS 0 - #define HAVE_XFORM_ASM 0 - #define HAVE_XMM_CLOBBERS 0 - #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 - #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - #define HAVE_SOCKLEN_T 1 - #define HAVE_STRUCT_ADDRINFO 1 - #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -362,7 +394,9 @@ - #define HAVE_STRUCT_SOCKADDR_STORAGE 1 - #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 - #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 --#define HAVE_MAKEINFO 1 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 0 - #define HAVE_MAKEINFO_HTML 0 - #define HAVE_OPENCL_D3D11 0 - #define HAVE_OPENCL_DRM_ARM 0 -@@ -373,12 +407,14 @@ - #define HAVE_PERL 1 - #define HAVE_POD2MAN 1 - #define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 - #define CONFIG_DOC 0 - #define CONFIG_HTMLPAGES 0 - #define CONFIG_MANPAGES 1 - #define CONFIG_PODPAGES 1 --#define CONFIG_TXTPAGES 1 --#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+#define CONFIG_TXTPAGES 0 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - #define CONFIG_AVIO_READING_EXAMPLE 1 - #define CONFIG_DECODE_AUDIO_EXAMPLE 1 - #define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -414,14 +450,12 @@ - #define CONFIG_LIBXVID 0 - #define CONFIG_DECKLINK 0 - #define CONFIG_LIBFDK_AAC 0 --#define CONFIG_OPENSSL 0 - #define CONFIG_LIBTLS 0 - #define CONFIG_GMP 0 - #define CONFIG_LIBARIBB24 0 - #define CONFIG_LIBLENSFUN 0 - #define CONFIG_LIBOPENCORE_AMRNB 0 - #define CONFIG_LIBOPENCORE_AMRWB 0 --#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVO_AMRWBENC 0 - #define CONFIG_MBEDTLS 0 - #define CONFIG_RKMPP 0 -@@ -431,6 +465,7 @@ - #define CONFIG_GNUTLS 0 - #define CONFIG_JNI 0 - #define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 - #define CONFIG_LIBAOM 0 - #define CONFIG_LIBASS 0 - #define CONFIG_LIBBLURAY 0 -@@ -445,11 +480,13 @@ - #define CONFIG_LIBFONTCONFIG 0 - #define CONFIG_LIBFREETYPE 0 - #define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 - #define CONFIG_LIBGME 0 - #define CONFIG_LIBGSM 0 - #define CONFIG_LIBIEC61883 0 - #define CONFIG_LIBILBC 0 - #define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 - #define CONFIG_LIBKLVANC 0 - #define CONFIG_LIBKVAZAAR 0 - #define CONFIG_LIBMODPLUG 0 -@@ -459,10 +496,16 @@ - #define CONFIG_LIBOPENH264 0 - #define CONFIG_LIBOPENJPEG 0 - #define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 - #define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 - #define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 - #define CONFIG_LIBRSVG 0 - #define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 - #define CONFIG_LIBSHINE 0 - #define CONFIG_LIBSMBCLIENT 0 - #define CONFIG_LIBSNAPPY 0 -@@ -470,14 +513,16 @@ - #define CONFIG_LIBSPEEX 0 - #define CONFIG_LIBSRT 0 - #define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 - #define CONFIG_LIBTENSORFLOW 0 - #define CONFIG_LIBTESSERACT 0 - #define CONFIG_LIBTHEORA 0 - #define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 - #define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVORBIS 0 - #define CONFIG_LIBVPX 0 --#define CONFIG_LIBWAVPACK 0 - #define CONFIG_LIBWEBP 0 - #define CONFIG_LIBXML2 0 - #define CONFIG_LIBZIMG 0 -@@ -487,6 +532,7 @@ - #define CONFIG_MEDIACODEC 0 - #define CONFIG_OPENAL 0 - #define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 - #define CONFIG_POCKETSPHINX 0 - #define CONFIG_VAPOURSYNTH 0 - #define CONFIG_ALSA 0 -@@ -500,7 +546,9 @@ - #define CONFIG_LIBXCB_SHAPE 0 - #define CONFIG_LIBXCB_XFIXES 0 - #define CONFIG_LZMA 0 --#define CONFIG_SCHANNEL 1 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 - #define CONFIG_SDL2 0 - #define CONFIG_SECURETRANSPORT 0 - #define CONFIG_SNDIO 0 -@@ -527,8 +575,8 @@ - #define CONFIG_VAAPI 0 - #define CONFIG_VDPAU 0 - #define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 - #define CONFIG_V4L2_M2M 0 --#define CONFIG_XVMC 0 - #define CONFIG_FTRAPV 0 - #define CONFIG_GRAY 0 - #define CONFIG_HARDCODED_TABLES 0 -@@ -549,7 +597,6 @@ - #define CONFIG_AVFORMAT 0 - #define CONFIG_AVCODEC 1 - #define CONFIG_SWRESAMPLE 0 --#define CONFIG_AVRESAMPLE 0 - #define CONFIG_AVUTIL 1 - #define CONFIG_FFPLAY 0 - #define CONFIG_FFPROBE 0 -@@ -561,27 +608,38 @@ - #define CONFIG_FAST_UNALIGNED 1 - #define CONFIG_FFT 1 - #define CONFIG_LSP 0 --#define CONFIG_LZO 0 - #define CONFIG_MDCT 0 - #define CONFIG_PIXELUTILS 0 - #define CONFIG_NETWORK 0 - #define CONFIG_RDFT 1 - #define CONFIG_AUTODETECT 0 - #define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 - #define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 - #define CONFIG_MEMORY_POISONING 0 - #define CONFIG_NEON_CLOBBER_TEST 0 - #define CONFIG_OSSFUZZ 0 - #define CONFIG_PIC 0 -+#define CONFIG_PTX_COMPRESSION 0 - #define CONFIG_THUMB 0 - #define CONFIG_VALGRIND_BACKTRACE 0 - #define CONFIG_XMM_CLOBBER_TEST 0 --#define CONFIG_BSFS 1 -+#define CONFIG_BSFS 0 - #define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 - #define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 - #define CONFIG_AANDCTTABLES 0 - #define CONFIG_AC3DSP 0 - #define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 - #define CONFIG_AUDIO_FRAME_QUEUE 0 - #define CONFIG_AUDIODSP 0 - #define CONFIG_BLOCKDSP 0 -@@ -594,8 +652,10 @@ - #define CONFIG_CBS_JPEG 0 - #define CONFIG_CBS_MPEG2 0 - #define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 - #define CONFIG_DIRAC_PARSE 0 - #define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 - #define CONFIG_DVPROFILE 0 - #define CONFIG_EXIF 0 - #define CONFIG_FAANDCT 1 -@@ -621,6 +681,7 @@ - #define CONFIG_IDCTDSP 1 - #define CONFIG_IIRFILTER 0 - #define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 - #define CONFIG_INTRAX8 0 - #define CONFIG_ISO_MEDIA 0 - #define CONFIG_IVIDSP 0 -@@ -637,7 +698,9 @@ - #define CONFIG_MPEGAUDIO 1 - #define CONFIG_MPEGAUDIODSP 1 - #define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 - #define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 - #define CONFIG_MPEGVIDEOENC 0 - #define CONFIG_MSS34DSP 0 - #define CONFIG_PIXBLOCKDSP 0 -@@ -669,12 +732,4 @@ - #define CONFIG_VP8DSP 1 - #define CONFIG_WMA_FREQS 0 - #define CONFIG_WMV2DSP 0 --#define CONFIG_NULL_BSF 1 --#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --#define CONFIG_VP8_DECODER 1 --#define CONFIG_VP9_DECODER 1 --#define CONFIG_FLAC_DECODER 1 --#define CONFIG_MP3_DECODER 1 --#define CONFIG_VP8_PARSER 1 --#define CONFIG_VP9_PARSER 1 - #endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_win64_aarch64.h b/media/ffvpx/config_win64_aarch64.h ---- a/media/ffvpx/config_win64_aarch64.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/config_win64_aarch64.h 2023-04-06 12:49:19.192546469 +0200 -@@ -0,0 +1,680 @@ -+/* Automatically generated by configure - do not modify! */ -+#ifndef FFMPEG_CONFIG_H -+#define FFMPEG_CONFIG_H -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-parser='vp8,vp9' --enable-decoder='vp8,vp9,mp3,flac' --disable-static --enable-shared --disable-autodetect --toolchain=msvc --enable-cross-compile --target-os=win32 --arch=arm64" -+#define FFMPEG_LICENSE "LGPL version 2.1 or later" -+#define CONFIG_THIS_YEAR 2019 -+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg" -+#define AVCONV_DATADIR "/usr/local/share/ffmpeg" -+#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for ARM64" -+#define av_restrict __restrict -+#define EXTERN_PREFIX "" -+#define EXTERN_ASM -+#define BUILDSUF "" -+#define SLIBSUF ".dll" -+#define HAVE_MMX2 HAVE_MMXEXT -+#define SWS_MAX_FILTER_SIZE 256 -+#define ARCH_AARCH64 1 -+#define ARCH_ALPHA 0 -+#define ARCH_ARM 0 -+#define ARCH_AVR32 0 -+#define ARCH_AVR32_AP 0 -+#define ARCH_AVR32_UC 0 -+#define ARCH_BFIN 0 -+#define ARCH_IA64 0 -+#define ARCH_M68K 0 -+#define ARCH_MIPS 0 -+#define ARCH_MIPS64 0 -+#define ARCH_PARISC 0 -+#define ARCH_PPC 0 -+#define ARCH_PPC64 0 -+#define ARCH_S390 0 -+#define ARCH_SH4 0 -+#define ARCH_SPARC 0 -+#define ARCH_SPARC64 0 -+#define ARCH_TILEGX 0 -+#define ARCH_TILEPRO 0 -+#define ARCH_TOMI 0 -+#define ARCH_X86 0 -+#define ARCH_X86_32 0 -+#define ARCH_X86_64 0 -+#define HAVE_ARMV5TE 0 -+#define HAVE_ARMV6 0 -+#define HAVE_ARMV6T2 0 -+#define HAVE_ARMV8 1 -+#define HAVE_NEON 1 -+#define HAVE_VFP 1 -+#define HAVE_VFPV3 0 -+#define HAVE_SETEND 0 -+#define HAVE_ALTIVEC 0 -+#define HAVE_DCBZL 0 -+#define HAVE_LDBRX 0 -+#define HAVE_POWER8 0 -+#define HAVE_PPC4XX 0 -+#define HAVE_VSX 0 -+#define HAVE_AESNI 0 -+#define HAVE_AMD3DNOW 0 -+#define HAVE_AMD3DNOWEXT 0 -+#define HAVE_AVX 0 -+#define HAVE_AVX2 0 -+#define HAVE_AVX512 0 -+#define HAVE_FMA3 0 -+#define HAVE_FMA4 0 -+#define HAVE_MMX 0 -+#define HAVE_MMXEXT 0 -+#define HAVE_SSE 0 -+#define HAVE_SSE2 0 -+#define HAVE_SSE3 0 -+#define HAVE_SSE4 0 -+#define HAVE_SSE42 0 -+#define HAVE_SSSE3 0 -+#define HAVE_XOP 0 -+#define HAVE_CPUNOP 0 -+#define HAVE_I686 0 -+#define HAVE_MIPSFPU 0 -+#define HAVE_MIPS32R2 0 -+#define HAVE_MIPS32R5 0 -+#define HAVE_MIPS64R2 0 -+#define HAVE_MIPS32R6 0 -+#define HAVE_MIPS64R6 0 -+#define HAVE_MIPSDSP 0 -+#define HAVE_MIPSDSPR2 0 -+#define HAVE_MSA 0 -+#define HAVE_MSA2 0 -+#define HAVE_LOONGSON2 0 -+#define HAVE_LOONGSON3 0 -+#define HAVE_MMI 0 -+#define HAVE_ARMV5TE_EXTERNAL 0 -+#define HAVE_ARMV6_EXTERNAL 0 -+#define HAVE_ARMV6T2_EXTERNAL 0 -+#define HAVE_ARMV8_EXTERNAL 1 -+#define HAVE_NEON_EXTERNAL 1 -+#define HAVE_VFP_EXTERNAL 1 -+#define HAVE_VFPV3_EXTERNAL 0 -+#define HAVE_SETEND_EXTERNAL 0 -+#define HAVE_ALTIVEC_EXTERNAL 0 -+#define HAVE_DCBZL_EXTERNAL 0 -+#define HAVE_LDBRX_EXTERNAL 0 -+#define HAVE_POWER8_EXTERNAL 0 -+#define HAVE_PPC4XX_EXTERNAL 0 -+#define HAVE_VSX_EXTERNAL 0 -+#define HAVE_AESNI_EXTERNAL 0 -+#define HAVE_AMD3DNOW_EXTERNAL 0 -+#define HAVE_AMD3DNOWEXT_EXTERNAL 0 -+#define HAVE_AVX_EXTERNAL 0 -+#define HAVE_AVX2_EXTERNAL 0 -+#define HAVE_AVX512_EXTERNAL 0 -+#define HAVE_FMA3_EXTERNAL 0 -+#define HAVE_FMA4_EXTERNAL 0 -+#define HAVE_MMX_EXTERNAL 0 -+#define HAVE_MMXEXT_EXTERNAL 0 -+#define HAVE_SSE_EXTERNAL 0 -+#define HAVE_SSE2_EXTERNAL 0 -+#define HAVE_SSE3_EXTERNAL 0 -+#define HAVE_SSE4_EXTERNAL 0 -+#define HAVE_SSE42_EXTERNAL 0 -+#define HAVE_SSSE3_EXTERNAL 0 -+#define HAVE_XOP_EXTERNAL 0 -+#define HAVE_CPUNOP_EXTERNAL 0 -+#define HAVE_I686_EXTERNAL 0 -+#define HAVE_MIPSFPU_EXTERNAL 0 -+#define HAVE_MIPS32R2_EXTERNAL 0 -+#define HAVE_MIPS32R5_EXTERNAL 0 -+#define HAVE_MIPS64R2_EXTERNAL 0 -+#define HAVE_MIPS32R6_EXTERNAL 0 -+#define HAVE_MIPS64R6_EXTERNAL 0 -+#define HAVE_MIPSDSP_EXTERNAL 0 -+#define HAVE_MIPSDSPR2_EXTERNAL 0 -+#define HAVE_MSA_EXTERNAL 0 -+#define HAVE_MSA2_EXTERNAL 0 -+#define HAVE_LOONGSON2_EXTERNAL 0 -+#define HAVE_LOONGSON3_EXTERNAL 0 -+#define HAVE_MMI_EXTERNAL 0 -+#define HAVE_ARMV5TE_INLINE 0 -+#define HAVE_ARMV6_INLINE 0 -+#define HAVE_ARMV6T2_INLINE 0 -+#define HAVE_ARMV8_INLINE 0 -+#define HAVE_NEON_INLINE 0 -+#define HAVE_VFP_INLINE 0 -+#define HAVE_VFPV3_INLINE 0 -+#define HAVE_SETEND_INLINE 0 -+#define HAVE_ALTIVEC_INLINE 0 -+#define HAVE_DCBZL_INLINE 0 -+#define HAVE_LDBRX_INLINE 0 -+#define HAVE_POWER8_INLINE 0 -+#define HAVE_PPC4XX_INLINE 0 -+#define HAVE_VSX_INLINE 0 -+#define HAVE_AESNI_INLINE 0 -+#define HAVE_AMD3DNOW_INLINE 0 -+#define HAVE_AMD3DNOWEXT_INLINE 0 -+#define HAVE_AVX_INLINE 0 -+#define HAVE_AVX2_INLINE 0 -+#define HAVE_AVX512_INLINE 0 -+#define HAVE_FMA3_INLINE 0 -+#define HAVE_FMA4_INLINE 0 -+#define HAVE_MMX_INLINE 0 -+#define HAVE_MMXEXT_INLINE 0 -+#define HAVE_SSE_INLINE 0 -+#define HAVE_SSE2_INLINE 0 -+#define HAVE_SSE3_INLINE 0 -+#define HAVE_SSE4_INLINE 0 -+#define HAVE_SSE42_INLINE 0 -+#define HAVE_SSSE3_INLINE 0 -+#define HAVE_XOP_INLINE 0 -+#define HAVE_CPUNOP_INLINE 0 -+#define HAVE_I686_INLINE 0 -+#define HAVE_MIPSFPU_INLINE 0 -+#define HAVE_MIPS32R2_INLINE 0 -+#define HAVE_MIPS32R5_INLINE 0 -+#define HAVE_MIPS64R2_INLINE 0 -+#define HAVE_MIPS32R6_INLINE 0 -+#define HAVE_MIPS64R6_INLINE 0 -+#define HAVE_MIPSDSP_INLINE 0 -+#define HAVE_MIPSDSPR2_INLINE 0 -+#define HAVE_MSA_INLINE 0 -+#define HAVE_MSA2_INLINE 0 -+#define HAVE_LOONGSON2_INLINE 0 -+#define HAVE_LOONGSON3_INLINE 0 -+#define HAVE_MMI_INLINE 0 -+#define HAVE_ALIGNED_STACK 1 -+#define HAVE_FAST_64BIT 1 -+#define HAVE_FAST_CLZ 0 -+#define HAVE_FAST_CMOV 0 -+#define HAVE_LOCAL_ALIGNED 0 -+#define HAVE_SIMD_ALIGN_16 1 -+#define HAVE_SIMD_ALIGN_32 0 -+#define HAVE_SIMD_ALIGN_64 0 -+#define HAVE_ATOMIC_CAS_PTR 0 -+#define HAVE_MACHINE_RW_BARRIER 0 -+#define HAVE_MEMORYBARRIER 1 -+#define HAVE_MM_EMPTY 0 -+#define HAVE_RDTSC 0 -+#define HAVE_SEM_TIMEDWAIT 0 -+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 0 -+#define HAVE_CABS 0 -+#define HAVE_CEXP 0 -+#define HAVE_INLINE_ASM 0 -+#define HAVE_SYMVER 0 -+#define HAVE_X86ASM 0 -+#define HAVE_BIGENDIAN 0 -+#define HAVE_FAST_UNALIGNED 1 -+#define HAVE_ARPA_INET_H 0 -+#define HAVE_ASM_TYPES_H 0 -+#define HAVE_CDIO_PARANOIA_H 0 -+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0 -+#define HAVE_CUDA_H 0 -+#define HAVE_DISPATCH_DISPATCH_H 0 -+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0 -+#define HAVE_DEV_IC_BT8XX_H 0 -+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0 -+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0 -+#define HAVE_DIRECT_H 1 -+#define HAVE_DIRENT_H 0 -+#define HAVE_DXGIDEBUG_H 1 -+#define HAVE_DXVA_H 1 -+#define HAVE_ES2_GL_H 0 -+#define HAVE_GSM_H 0 -+#define HAVE_IO_H 1 -+#define HAVE_LINUX_PERF_EVENT_H 0 -+#define HAVE_MACHINE_IOCTL_BT848_H 0 -+#define HAVE_MACHINE_IOCTL_METEOR_H 0 -+#define HAVE_OPENCV2_CORE_CORE_C_H 0 -+#define HAVE_OPENGL_GL3_H 0 -+#define HAVE_POLL_H 0 -+#define HAVE_SYS_PARAM_H 0 -+#define HAVE_SYS_RESOURCE_H 0 -+#define HAVE_SYS_SELECT_H 0 -+#define HAVE_SYS_SOUNDCARD_H 0 -+#define HAVE_SYS_TIME_H 0 -+#define HAVE_SYS_UN_H 0 -+#define HAVE_SYS_VIDEOIO_H 0 -+#define HAVE_TERMIOS_H 0 -+#define HAVE_UDPLITE_H 0 -+#define HAVE_UNISTD_H 0 -+#define HAVE_VALGRIND_VALGRIND_H 0 -+#define HAVE_WINDOWS_H 1 -+#define HAVE_WINSOCK2_H 1 -+#define HAVE_INTRINSICS_NEON 1 -+#define HAVE_ATANF 1 -+#define HAVE_ATAN2F 1 -+#define HAVE_CBRT 1 -+#define HAVE_CBRTF 1 -+#define HAVE_COPYSIGN 1 -+#define HAVE_COSF 1 -+#define HAVE_ERF 1 -+#define HAVE_EXP2 1 -+#define HAVE_EXP2F 1 -+#define HAVE_EXPF 1 -+#define HAVE_HYPOT 1 -+#define HAVE_ISFINITE 1 -+#define HAVE_ISINF 1 -+#define HAVE_ISNAN 1 -+#define HAVE_LDEXPF 1 -+#define HAVE_LLRINT 1 -+#define HAVE_LLRINTF 1 -+#define HAVE_LOG2 1 -+#define HAVE_LOG2F 1 -+#define HAVE_LOG10F 1 -+#define HAVE_LRINT 1 -+#define HAVE_LRINTF 1 -+#define HAVE_POWF 1 -+#define HAVE_RINT 1 -+#define HAVE_ROUND 1 -+#define HAVE_ROUNDF 1 -+#define HAVE_SINF 1 -+#define HAVE_TRUNC 1 -+#define HAVE_TRUNCF 1 -+#define HAVE_DOS_PATHS 1 -+#define HAVE_LIBC_MSVCRT 1 -+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0 -+#define HAVE_SECTION_DATA_REL_RO 0 -+#define HAVE_THREADS 1 -+#define HAVE_UWP 0 -+#define HAVE_WINRT 0 -+#define HAVE_ACCESS 1 -+#define HAVE_ALIGNED_MALLOC 1 -+#define HAVE_CLOCK_GETTIME 0 -+#define HAVE_CLOSESOCKET 1 -+#define HAVE_COMMANDLINETOARGVW 1 -+#define HAVE_FCNTL 0 -+#define HAVE_GETADDRINFO 1 -+#define HAVE_GETHRTIME 0 -+#define HAVE_GETOPT 0 -+#define HAVE_GETPROCESSAFFINITYMASK 1 -+#define HAVE_GETPROCESSMEMORYINFO 1 -+#define HAVE_GETPROCESSTIMES 1 -+#define HAVE_GETRUSAGE 0 -+#define HAVE_GETSYSTEMTIMEASFILETIME 1 -+#define HAVE_GETTIMEOFDAY 0 -+#define HAVE_GLOB 0 -+#define HAVE_GLXGETPROCADDRESS 0 -+#define HAVE_GMTIME_R 0 -+#define HAVE_INET_ATON 0 -+#define HAVE_ISATTY 1 -+#define HAVE_KBHIT 1 -+#define HAVE_LSTAT 0 -+#define HAVE_LZO1X_999_COMPRESS 0 -+#define HAVE_MACH_ABSOLUTE_TIME 0 -+#define HAVE_MAPVIEWOFFILE 1 -+#define HAVE_MKSTEMP 0 -+#define HAVE_MMAP 0 -+#define HAVE_MPROTECT 0 -+#define HAVE_NANOSLEEP 0 -+#define HAVE_PEEKNAMEDPIPE 1 -+#define HAVE_PTHREAD_CANCEL 0 -+#define HAVE_SCHED_GETAFFINITY 0 -+#define HAVE_SECITEMIMPORT 0 -+#define HAVE_SETCONSOLETEXTATTRIBUTE 1 -+#define HAVE_SETCONSOLECTRLHANDLER 1 -+#define HAVE_SETMODE 1 -+#define HAVE_SETRLIMIT 0 -+#define HAVE_SLEEP 1 -+#define HAVE_STRERROR_R 0 -+#define HAVE_SYSCONF 0 -+#define HAVE_SYSCTL 0 -+#define HAVE_USLEEP 0 -+#define HAVE_UTGETOSTYPEFROMSTRING 0 -+#define HAVE_VIRTUALALLOC 1 -+#define HAVE_WGLGETPROCADDRESS 0 -+#define HAVE_BCRYPT 1 -+#define HAVE_VAAPI_DRM 0 -+#define HAVE_VAAPI_X11 0 -+#define HAVE_VDPAU_X11 0 -+#define HAVE_PTHREADS 0 -+#define HAVE_OS2THREADS 0 -+#define HAVE_W32THREADS 1 -+#define HAVE_AS_ARCH_DIRECTIVE 0 -+#define HAVE_AS_DN_DIRECTIVE 0 -+#define HAVE_AS_FPU_DIRECTIVE 0 -+#define HAVE_AS_FUNC 1 -+#define HAVE_AS_OBJECT_ARCH 0 -+#define HAVE_ASM_MOD_Q 0 -+#define HAVE_BLOCKS_EXTENSION 0 -+#define HAVE_EBP_AVAILABLE 0 -+#define HAVE_EBX_AVAILABLE 0 -+#define HAVE_GNU_AS 0 -+#define HAVE_GNU_WINDRES 0 -+#define HAVE_IBM_ASM 0 -+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0 -+#define HAVE_INLINE_ASM_LABELS 0 -+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 -+#define HAVE_PRAGMA_DEPRECATED 1 -+#define HAVE_RSYNC_CONTIMEOUT 1 -+#define HAVE_SYMVER_ASM_LABEL 0 -+#define HAVE_SYMVER_GNU_ASM 0 -+#define HAVE_VFP_ARGS 0 -+#define HAVE_XFORM_ASM 0 -+#define HAVE_XMM_CLOBBERS 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_SOCKLEN_T 1 -+#define HAVE_STRUCT_ADDRINFO 1 -+#define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -+#define HAVE_STRUCT_IP_MREQ_SOURCE 1 -+#define HAVE_STRUCT_IPV6_MREQ 1 -+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0 -+#define HAVE_STRUCT_POLLFD 1 -+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 0 -+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0 -+#define HAVE_STRUCT_SOCKADDR_IN6 1 -+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0 -+#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 -+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 -+#define HAVE_MAKEINFO 0 -+#define HAVE_MAKEINFO_HTML 0 -+#define HAVE_OPENCL_D3D11 0 -+#define HAVE_OPENCL_DRM_ARM 0 -+#define HAVE_OPENCL_DRM_BEIGNET 0 -+#define HAVE_OPENCL_DXVA2 0 -+#define HAVE_OPENCL_VAAPI_BEIGNET 0 -+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0 -+#define HAVE_PERL 1 -+#define HAVE_POD2MAN 1 -+#define HAVE_TEXI2HTML 0 -+#define CONFIG_DOC 0 -+#define CONFIG_HTMLPAGES 0 -+#define CONFIG_MANPAGES 1 -+#define CONFIG_PODPAGES 1 -+#define CONFIG_TXTPAGES 0 -+#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+#define CONFIG_AVIO_READING_EXAMPLE 1 -+#define CONFIG_DECODE_AUDIO_EXAMPLE 1 -+#define CONFIG_DECODE_VIDEO_EXAMPLE 1 -+#define CONFIG_DEMUXING_DECODING_EXAMPLE 0 -+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1 -+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1 -+#define CONFIG_EXTRACT_MVS_EXAMPLE 0 -+#define CONFIG_FILTER_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0 -+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0 -+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 0 -+#define CONFIG_HW_DECODE_EXAMPLE 0 -+#define CONFIG_METADATA_EXAMPLE 0 -+#define CONFIG_MUXING_EXAMPLE 0 -+#define CONFIG_QSVDEC_EXAMPLE 0 -+#define CONFIG_REMUXING_EXAMPLE 0 -+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0 -+#define CONFIG_SCALING_VIDEO_EXAMPLE 0 -+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0 -+#define CONFIG_TRANSCODING_EXAMPLE 0 -+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0 -+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0 -+#define CONFIG_AVISYNTH 0 -+#define CONFIG_FREI0R 0 -+#define CONFIG_LIBCDIO 0 -+#define CONFIG_LIBDAVS2 0 -+#define CONFIG_LIBRUBBERBAND 0 -+#define CONFIG_LIBVIDSTAB 0 -+#define CONFIG_LIBX264 0 -+#define CONFIG_LIBX265 0 -+#define CONFIG_LIBXAVS 0 -+#define CONFIG_LIBXAVS2 0 -+#define CONFIG_LIBXVID 0 -+#define CONFIG_DECKLINK 0 -+#define CONFIG_LIBFDK_AAC 0 -+#define CONFIG_OPENSSL 0 -+#define CONFIG_LIBTLS 0 -+#define CONFIG_GMP 0 -+#define CONFIG_LIBARIBB24 0 -+#define CONFIG_LIBLENSFUN 0 -+#define CONFIG_LIBOPENCORE_AMRNB 0 -+#define CONFIG_LIBOPENCORE_AMRWB 0 -+#define CONFIG_LIBVMAF 0 -+#define CONFIG_LIBVO_AMRWBENC 0 -+#define CONFIG_MBEDTLS 0 -+#define CONFIG_RKMPP 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_CHROMAPRINT 0 -+#define CONFIG_GCRYPT 0 -+#define CONFIG_GNUTLS 0 -+#define CONFIG_JNI 0 -+#define CONFIG_LADSPA 0 -+#define CONFIG_LIBAOM 0 -+#define CONFIG_LIBASS 0 -+#define CONFIG_LIBBLURAY 0 -+#define CONFIG_LIBBS2B 0 -+#define CONFIG_LIBCACA 0 -+#define CONFIG_LIBCELT 0 -+#define CONFIG_LIBCODEC2 0 -+#define CONFIG_LIBDAV1D 0 -+#define CONFIG_LIBDC1394 0 -+#define CONFIG_LIBDRM 0 -+#define CONFIG_LIBFLITE 0 -+#define CONFIG_LIBFONTCONFIG 0 -+#define CONFIG_LIBFREETYPE 0 -+#define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGME 0 -+#define CONFIG_LIBGSM 0 -+#define CONFIG_LIBIEC61883 0 -+#define CONFIG_LIBILBC 0 -+#define CONFIG_LIBJACK 0 -+#define CONFIG_LIBKLVANC 0 -+#define CONFIG_LIBKVAZAAR 0 -+#define CONFIG_LIBMODPLUG 0 -+#define CONFIG_LIBMP3LAME 0 -+#define CONFIG_LIBMYSOFA 0 -+#define CONFIG_LIBOPENCV 0 -+#define CONFIG_LIBOPENH264 0 -+#define CONFIG_LIBOPENJPEG 0 -+#define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRSVG 0 -+#define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHINE 0 -+#define CONFIG_LIBSMBCLIENT 0 -+#define CONFIG_LIBSNAPPY 0 -+#define CONFIG_LIBSOXR 0 -+#define CONFIG_LIBSPEEX 0 -+#define CONFIG_LIBSRT 0 -+#define CONFIG_LIBSSH 0 -+#define CONFIG_LIBTENSORFLOW 0 -+#define CONFIG_LIBTESSERACT 0 -+#define CONFIG_LIBTHEORA 0 -+#define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVORBIS 0 -+#define CONFIG_LIBVPX 0 -+#define CONFIG_LIBWAVPACK 0 -+#define CONFIG_LIBWEBP 0 -+#define CONFIG_LIBXML2 0 -+#define CONFIG_LIBZIMG 0 -+#define CONFIG_LIBZMQ 0 -+#define CONFIG_LIBZVBI 0 -+#define CONFIG_LV2 0 -+#define CONFIG_MEDIACODEC 0 -+#define CONFIG_OPENAL 0 -+#define CONFIG_OPENGL 0 -+#define CONFIG_POCKETSPHINX 0 -+#define CONFIG_VAPOURSYNTH 0 -+#define CONFIG_ALSA 0 -+#define CONFIG_APPKIT 0 -+#define CONFIG_AVFOUNDATION 0 -+#define CONFIG_BZLIB 0 -+#define CONFIG_COREIMAGE 0 -+#define CONFIG_ICONV 0 -+#define CONFIG_LIBXCB 0 -+#define CONFIG_LIBXCB_SHM 0 -+#define CONFIG_LIBXCB_SHAPE 0 -+#define CONFIG_LIBXCB_XFIXES 0 -+#define CONFIG_LZMA 0 -+#define CONFIG_SCHANNEL 0 -+#define CONFIG_SDL2 0 -+#define CONFIG_SECURETRANSPORT 0 -+#define CONFIG_SNDIO 0 -+#define CONFIG_XLIB 0 -+#define CONFIG_ZLIB 0 -+#define CONFIG_CUDA_NVCC 0 -+#define CONFIG_CUDA_SDK 0 -+#define CONFIG_LIBNPP 0 -+#define CONFIG_LIBMFX 0 -+#define CONFIG_MMAL 0 -+#define CONFIG_OMX 0 -+#define CONFIG_OPENCL 0 -+#define CONFIG_AMF 0 -+#define CONFIG_AUDIOTOOLBOX 0 -+#define CONFIG_CRYSTALHD 0 -+#define CONFIG_CUDA 0 -+#define CONFIG_CUDA_LLVM 0 -+#define CONFIG_CUVID 0 -+#define CONFIG_D3D11VA 0 -+#define CONFIG_DXVA2 0 -+#define CONFIG_FFNVCODEC 0 -+#define CONFIG_NVDEC 0 -+#define CONFIG_NVENC 0 -+#define CONFIG_VAAPI 0 -+#define CONFIG_VDPAU 0 -+#define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_V4L2_M2M 0 -+#define CONFIG_XVMC 0 -+#define CONFIG_FTRAPV 0 -+#define CONFIG_GRAY 0 -+#define CONFIG_HARDCODED_TABLES 0 -+#define CONFIG_OMX_RPI 0 -+#define CONFIG_RUNTIME_CPUDETECT 1 -+#define CONFIG_SAFE_BITSTREAM_READER 1 -+#define CONFIG_SHARED 1 -+#define CONFIG_SMALL 0 -+#define CONFIG_STATIC 0 -+#define CONFIG_SWSCALE_ALPHA 1 -+#define CONFIG_GPL 0 -+#define CONFIG_NONFREE 0 -+#define CONFIG_VERSION3 0 -+#define CONFIG_AVDEVICE 0 -+#define CONFIG_AVFILTER 0 -+#define CONFIG_SWSCALE 0 -+#define CONFIG_POSTPROC 0 -+#define CONFIG_AVFORMAT 0 -+#define CONFIG_AVCODEC 1 -+#define CONFIG_SWRESAMPLE 0 -+#define CONFIG_AVRESAMPLE 0 -+#define CONFIG_AVUTIL 1 -+#define CONFIG_FFPLAY 0 -+#define CONFIG_FFPROBE 0 -+#define CONFIG_FFMPEG 0 -+#define CONFIG_DCT 1 -+#define CONFIG_DWT 0 -+#define CONFIG_ERROR_RESILIENCE 0 -+#define CONFIG_FAAN 1 -+#define CONFIG_FAST_UNALIGNED 1 -+#define CONFIG_FFT 1 -+#define CONFIG_LSP 0 -+#define CONFIG_LZO 0 -+#define CONFIG_MDCT 0 -+#define CONFIG_PIXELUTILS 0 -+#define CONFIG_NETWORK 0 -+#define CONFIG_RDFT 1 -+#define CONFIG_AUTODETECT 0 -+#define CONFIG_FONTCONFIG 0 -+#define CONFIG_LINUX_PERF 0 -+#define CONFIG_MEMORY_POISONING 0 -+#define CONFIG_NEON_CLOBBER_TEST 0 -+#define CONFIG_OSSFUZZ 0 -+#define CONFIG_PIC 1 -+#define CONFIG_THUMB 0 -+#define CONFIG_VALGRIND_BACKTRACE 0 -+#define CONFIG_XMM_CLOBBER_TEST 0 -+#define CONFIG_BSFS 1 -+#define CONFIG_DECODERS 1 -+#define CONFIG_PARSERS 1 -+#define CONFIG_AANDCTTABLES 0 -+#define CONFIG_AC3DSP 0 -+#define CONFIG_ADTS_HEADER 0 -+#define CONFIG_AUDIO_FRAME_QUEUE 0 -+#define CONFIG_AUDIODSP 0 -+#define CONFIG_BLOCKDSP 0 -+#define CONFIG_BSWAPDSP 0 -+#define CONFIG_CABAC 0 -+#define CONFIG_CBS 0 -+#define CONFIG_CBS_AV1 0 -+#define CONFIG_CBS_H264 0 -+#define CONFIG_CBS_H265 0 -+#define CONFIG_CBS_JPEG 0 -+#define CONFIG_CBS_MPEG2 0 -+#define CONFIG_CBS_VP9 0 -+#define CONFIG_DIRAC_PARSE 0 -+#define CONFIG_DNN 0 -+#define CONFIG_DVPROFILE 0 -+#define CONFIG_EXIF 0 -+#define CONFIG_FAANDCT 1 -+#define CONFIG_FAANIDCT 1 -+#define CONFIG_FDCTDSP 1 -+#define CONFIG_FLACDSP 1 -+#define CONFIG_FMTCONVERT 0 -+#define CONFIG_FRAME_THREAD_ENCODER 0 -+#define CONFIG_G722DSP 0 -+#define CONFIG_GOLOMB 0 -+#define CONFIG_GPLV3 0 -+#define CONFIG_H263DSP 0 -+#define CONFIG_H264CHROMA 0 -+#define CONFIG_H264DSP 0 -+#define CONFIG_H264PARSE 0 -+#define CONFIG_H264PRED 1 -+#define CONFIG_H264QPEL 0 -+#define CONFIG_HEVCPARSE 0 -+#define CONFIG_HPELDSP 0 -+#define CONFIG_HUFFMAN 0 -+#define CONFIG_HUFFYUVDSP 0 -+#define CONFIG_HUFFYUVENCDSP 0 -+#define CONFIG_IDCTDSP 1 -+#define CONFIG_IIRFILTER 0 -+#define CONFIG_MDCT15 0 -+#define CONFIG_INTRAX8 0 -+#define CONFIG_ISO_MEDIA 0 -+#define CONFIG_IVIDSP 0 -+#define CONFIG_JPEGTABLES 0 -+#define CONFIG_LGPLV3 0 -+#define CONFIG_LIBX262 0 -+#define CONFIG_LLAUDDSP 0 -+#define CONFIG_LLVIDDSP 0 -+#define CONFIG_LLVIDENCDSP 0 -+#define CONFIG_LPC 0 -+#define CONFIG_LZF 0 -+#define CONFIG_ME_CMP 0 -+#define CONFIG_MPEG_ER 0 -+#define CONFIG_MPEGAUDIO 1 -+#define CONFIG_MPEGAUDIODSP 1 -+#define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEOENC 0 -+#define CONFIG_MSS34DSP 0 -+#define CONFIG_PIXBLOCKDSP 0 -+#define CONFIG_QPELDSP 0 -+#define CONFIG_QSV 0 -+#define CONFIG_QSVDEC 0 -+#define CONFIG_QSVENC 0 -+#define CONFIG_QSVVPP 0 -+#define CONFIG_RANGECODER 0 -+#define CONFIG_RIFFDEC 0 -+#define CONFIG_RIFFENC 0 -+#define CONFIG_RTPDEC 0 -+#define CONFIG_RTPENC_CHAIN 0 -+#define CONFIG_RV34DSP 0 -+#define CONFIG_SCENE_SAD 0 -+#define CONFIG_SINEWIN 0 -+#define CONFIG_SNAPPY 0 -+#define CONFIG_SRTP 0 -+#define CONFIG_STARTCODE 0 -+#define CONFIG_TEXTUREDSP 0 -+#define CONFIG_TEXTUREDSPENC 0 -+#define CONFIG_TPELDSP 0 -+#define CONFIG_VAAPI_1 0 -+#define CONFIG_VAAPI_ENCODE 0 -+#define CONFIG_VC1DSP 0 -+#define CONFIG_VIDEODSP 1 -+#define CONFIG_VP3DSP 0 -+#define CONFIG_VP56DSP 0 -+#define CONFIG_VP8DSP 1 -+#define CONFIG_WMA_FREQS 0 -+#define CONFIG_WMV2DSP 0 -+#define CONFIG_NULL_BSF 1 -+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 -+#define CONFIG_VP8_DECODER 1 -+#define CONFIG_VP9_DECODER 1 -+#define CONFIG_FLAC_DECODER 1 -+#define CONFIG_MP3_DECODER 1 -+#define CONFIG_VP8_PARSER 1 -+#define CONFIG_VP9_PARSER 1 -+#endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/config_win64.asm b/media/ffvpx/config_win64.asm ---- a/media/ffvpx/config_win64.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_win64.asm 2023-04-06 12:49:19.192546469 +0200 -@@ -7,12 +7,16 @@ - %define ARCH_AVR32_UC 0 - %define ARCH_BFIN 0 - %define ARCH_IA64 0 -+%define ARCH_LOONGARCH 0 -+%define ARCH_LOONGARCH32 0 -+%define ARCH_LOONGARCH64 0 - %define ARCH_M68K 0 - %define ARCH_MIPS 0 - %define ARCH_MIPS64 0 - %define ARCH_PARISC 0 - %define ARCH_PPC 0 - %define ARCH_PPC64 0 -+%define ARCH_RISCV 0 - %define ARCH_S390 0 - %define ARCH_SH4 0 - %define ARCH_SPARC 0 -@@ -43,6 +47,7 @@ - %define HAVE_AVX 1 - %define HAVE_AVX2 1 - %define HAVE_AVX512 1 -+%define HAVE_AVX512ICL 1 - %define HAVE_FMA3 1 - %define HAVE_FMA4 1 - %define HAVE_MMX 1 -@@ -65,10 +70,11 @@ - %define HAVE_MIPSDSP 0 - %define HAVE_MIPSDSPR2 0 - %define HAVE_MSA 0 --%define HAVE_MSA2 0 - %define HAVE_LOONGSON2 0 - %define HAVE_LOONGSON3 0 - %define HAVE_MMI 0 -+%define HAVE_LSX 0 -+%define HAVE_LASX 0 - %define HAVE_ARMV5TE_EXTERNAL 0 - %define HAVE_ARMV6_EXTERNAL 0 - %define HAVE_ARMV6T2_EXTERNAL 0 -@@ -89,6 +95,7 @@ - %define HAVE_AVX_EXTERNAL 1 - %define HAVE_AVX2_EXTERNAL 1 - %define HAVE_AVX512_EXTERNAL 1 -+%define HAVE_AVX512ICL_EXTERNAL 1 - %define HAVE_FMA3_EXTERNAL 1 - %define HAVE_FMA4_EXTERNAL 1 - %define HAVE_MMX_EXTERNAL 1 -@@ -111,10 +118,11 @@ - %define HAVE_MIPSDSP_EXTERNAL 0 - %define HAVE_MIPSDSPR2_EXTERNAL 0 - %define HAVE_MSA_EXTERNAL 0 --%define HAVE_MSA2_EXTERNAL 0 - %define HAVE_LOONGSON2_EXTERNAL 0 - %define HAVE_LOONGSON3_EXTERNAL 0 - %define HAVE_MMI_EXTERNAL 0 -+%define HAVE_LSX_EXTERNAL 0 -+%define HAVE_LASX_EXTERNAL 0 - %define HAVE_ARMV5TE_INLINE 0 - %define HAVE_ARMV6_INLINE 0 - %define HAVE_ARMV6T2_INLINE 0 -@@ -135,6 +143,7 @@ - %define HAVE_AVX_INLINE 0 - %define HAVE_AVX2_INLINE 0 - %define HAVE_AVX512_INLINE 0 -+%define HAVE_AVX512ICL_INLINE 0 - %define HAVE_FMA3_INLINE 0 - %define HAVE_FMA4_INLINE 0 - %define HAVE_MMX_INLINE 0 -@@ -157,10 +166,11 @@ - %define HAVE_MIPSDSP_INLINE 0 - %define HAVE_MIPSDSPR2_INLINE 0 - %define HAVE_MSA_INLINE 0 --%define HAVE_MSA2_INLINE 0 - %define HAVE_LOONGSON2_INLINE 0 - %define HAVE_LOONGSON3_INLINE 0 - %define HAVE_MMI_INLINE 0 -+%define HAVE_LSX_INLINE 0 -+%define HAVE_LASX_INLINE 0 - %define HAVE_ALIGNED_STACK 1 - %define HAVE_FAST_64BIT 1 - %define HAVE_FAST_CLZ 1 -@@ -201,6 +211,7 @@ - %define HAVE_ES2_GL_H 0 - %define HAVE_GSM_H 0 - %define HAVE_IO_H 1 -+%define HAVE_LINUX_DMA_BUF_H 0 - %define HAVE_LINUX_PERF_EVENT_H 0 - %define HAVE_MACHINE_IOCTL_BT848_H 0 - %define HAVE_MACHINE_IOCTL_METEOR_H 0 -@@ -264,12 +275,16 @@ - %define HAVE_COMMANDLINETOARGVW 1 - %define HAVE_FCNTL 0 - %define HAVE_GETADDRINFO 1 -+%define HAVE_GETAUXVAL 0 -+%define HAVE_GETENV 1 - %define HAVE_GETHRTIME 0 - %define HAVE_GETOPT 0 -+%define HAVE_GETMODULEHANDLE 1 - %define HAVE_GETPROCESSAFFINITYMASK 1 - %define HAVE_GETPROCESSMEMORYINFO 1 - %define HAVE_GETPROCESSTIMES 1 - %define HAVE_GETRUSAGE 0 -+%define HAVE_GETSTDHANDLE 1 - %define HAVE_GETSYSTEMTIMEASFILETIME 1 - %define HAVE_GETTIMEOFDAY 0 - %define HAVE_GLOB 0 -@@ -292,6 +307,7 @@ - %define HAVE_SECITEMIMPORT 0 - %define HAVE_SETCONSOLETEXTATTRIBUTE 1 - %define HAVE_SETCONSOLECTRLHANDLER 1 -+%define HAVE_SETDLLDIRECTORY 1 - %define HAVE_SETMODE 1 - %define HAVE_SETRLIMIT 0 - %define HAVE_SLEEP 1 -@@ -325,14 +341,29 @@ - %define HAVE_INLINE_ASM_LABELS 0 - %define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 - %define HAVE_PRAGMA_DEPRECATED 1 --%define HAVE_RSYNC_CONTIMEOUT 1 -+%define HAVE_RSYNC_CONTIMEOUT 0 - %define HAVE_SYMVER_ASM_LABEL 0 - %define HAVE_SYMVER_GNU_ASM 0 - %define HAVE_VFP_ARGS 0 - %define HAVE_XFORM_ASM 0 - %define HAVE_XMM_CLOBBERS 0 - %define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+%define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+%define HAVE_KCMVIDEOCODECTYPE_VP9 0 - %define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+%define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+%define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - %define HAVE_SOCKLEN_T 1 - %define HAVE_STRUCT_ADDRINFO 1 - %define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -347,7 +378,9 @@ - %define HAVE_STRUCT_SOCKADDR_STORAGE 1 - %define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 - %define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 --%define HAVE_MAKEINFO 1 -+%define HAVE_GZIP 1 -+%define HAVE_LIBDRM_GETFB2 0 -+%define HAVE_MAKEINFO 0 - %define HAVE_MAKEINFO_HTML 0 - %define HAVE_OPENCL_D3D11 0 - %define HAVE_OPENCL_DRM_ARM 0 -@@ -358,12 +391,14 @@ - %define HAVE_PERL 1 - %define HAVE_POD2MAN 1 - %define HAVE_TEXI2HTML 0 -+%define HAVE_XMLLINT 1 -+%define HAVE_ZLIB_GZIP 0 - %define CONFIG_DOC 0 - %define CONFIG_HTMLPAGES 0 - %define CONFIG_MANPAGES 1 - %define CONFIG_PODPAGES 1 --%define CONFIG_TXTPAGES 1 --%define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+%define CONFIG_TXTPAGES 0 -+%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - %define CONFIG_AVIO_READING_EXAMPLE 1 - %define CONFIG_DECODE_AUDIO_EXAMPLE 1 - %define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -399,14 +434,12 @@ - %define CONFIG_LIBXVID 0 - %define CONFIG_DECKLINK 0 - %define CONFIG_LIBFDK_AAC 0 --%define CONFIG_OPENSSL 0 - %define CONFIG_LIBTLS 0 - %define CONFIG_GMP 0 - %define CONFIG_LIBARIBB24 0 - %define CONFIG_LIBLENSFUN 0 - %define CONFIG_LIBOPENCORE_AMRNB 0 - %define CONFIG_LIBOPENCORE_AMRWB 0 --%define CONFIG_LIBVMAF 0 - %define CONFIG_LIBVO_AMRWBENC 0 - %define CONFIG_MBEDTLS 0 - %define CONFIG_RKMPP 0 -@@ -416,6 +449,7 @@ - %define CONFIG_GNUTLS 0 - %define CONFIG_JNI 0 - %define CONFIG_LADSPA 0 -+%define CONFIG_LCMS2 0 - %define CONFIG_LIBAOM 0 - %define CONFIG_LIBASS 0 - %define CONFIG_LIBBLURAY 0 -@@ -430,11 +464,13 @@ - %define CONFIG_LIBFONTCONFIG 0 - %define CONFIG_LIBFREETYPE 0 - %define CONFIG_LIBFRIBIDI 0 -+%define CONFIG_LIBGLSLANG 0 - %define CONFIG_LIBGME 0 - %define CONFIG_LIBGSM 0 - %define CONFIG_LIBIEC61883 0 - %define CONFIG_LIBILBC 0 - %define CONFIG_LIBJACK 0 -+%define CONFIG_LIBJXL 0 - %define CONFIG_LIBKLVANC 0 - %define CONFIG_LIBKVAZAAR 0 - %define CONFIG_LIBMODPLUG 0 -@@ -444,10 +480,16 @@ - %define CONFIG_LIBOPENH264 0 - %define CONFIG_LIBOPENJPEG 0 - %define CONFIG_LIBOPENMPT 0 -+%define CONFIG_LIBOPENVINO 0 - %define CONFIG_LIBOPUS 0 -+%define CONFIG_LIBPLACEBO 0 - %define CONFIG_LIBPULSE 0 -+%define CONFIG_LIBRABBITMQ 0 -+%define CONFIG_LIBRAV1E 0 -+%define CONFIG_LIBRIST 0 - %define CONFIG_LIBRSVG 0 - %define CONFIG_LIBRTMP 0 -+%define CONFIG_LIBSHADERC 0 - %define CONFIG_LIBSHINE 0 - %define CONFIG_LIBSMBCLIENT 0 - %define CONFIG_LIBSNAPPY 0 -@@ -455,14 +497,16 @@ - %define CONFIG_LIBSPEEX 0 - %define CONFIG_LIBSRT 0 - %define CONFIG_LIBSSH 0 -+%define CONFIG_LIBSVTAV1 0 - %define CONFIG_LIBTENSORFLOW 0 - %define CONFIG_LIBTESSERACT 0 - %define CONFIG_LIBTHEORA 0 - %define CONFIG_LIBTWOLAME 0 -+%define CONFIG_LIBUAVS3D 0 - %define CONFIG_LIBV4L2 0 -+%define CONFIG_LIBVMAF 0 - %define CONFIG_LIBVORBIS 0 - %define CONFIG_LIBVPX 0 --%define CONFIG_LIBWAVPACK 0 - %define CONFIG_LIBWEBP 0 - %define CONFIG_LIBXML2 0 - %define CONFIG_LIBZIMG 0 -@@ -472,6 +516,7 @@ - %define CONFIG_MEDIACODEC 0 - %define CONFIG_OPENAL 0 - %define CONFIG_OPENGL 0 -+%define CONFIG_OPENSSL 0 - %define CONFIG_POCKETSPHINX 0 - %define CONFIG_VAPOURSYNTH 0 - %define CONFIG_ALSA 0 -@@ -485,7 +530,9 @@ - %define CONFIG_LIBXCB_SHAPE 0 - %define CONFIG_LIBXCB_XFIXES 0 - %define CONFIG_LZMA 0 --%define CONFIG_SCHANNEL 1 -+%define CONFIG_MEDIAFOUNDATION 0 -+%define CONFIG_METAL 0 -+%define CONFIG_SCHANNEL 0 - %define CONFIG_SDL2 0 - %define CONFIG_SECURETRANSPORT 0 - %define CONFIG_SNDIO 0 -@@ -512,8 +559,8 @@ - %define CONFIG_VAAPI 0 - %define CONFIG_VDPAU 0 - %define CONFIG_VIDEOTOOLBOX 0 -+%define CONFIG_VULKAN 0 - %define CONFIG_V4L2_M2M 0 --%define CONFIG_XVMC 0 - %define CONFIG_FTRAPV 0 - %define CONFIG_GRAY 0 - %define CONFIG_HARDCODED_TABLES 0 -@@ -534,7 +581,6 @@ - %define CONFIG_AVFORMAT 0 - %define CONFIG_AVCODEC 1 - %define CONFIG_SWRESAMPLE 0 --%define CONFIG_AVRESAMPLE 0 - %define CONFIG_AVUTIL 1 - %define CONFIG_FFPLAY 0 - %define CONFIG_FFPROBE 0 -@@ -546,27 +592,38 @@ - %define CONFIG_FAST_UNALIGNED 1 - %define CONFIG_FFT 1 - %define CONFIG_LSP 0 --%define CONFIG_LZO 0 - %define CONFIG_MDCT 0 - %define CONFIG_PIXELUTILS 0 - %define CONFIG_NETWORK 0 - %define CONFIG_RDFT 1 - %define CONFIG_AUTODETECT 0 - %define CONFIG_FONTCONFIG 0 -+%define CONFIG_LARGE_TESTS 1 - %define CONFIG_LINUX_PERF 0 -+%define CONFIG_MACOS_KPERF 0 - %define CONFIG_MEMORY_POISONING 0 - %define CONFIG_NEON_CLOBBER_TEST 0 - %define CONFIG_OSSFUZZ 0 - %define CONFIG_PIC 1 -+%define CONFIG_PTX_COMPRESSION 0 - %define CONFIG_THUMB 0 - %define CONFIG_VALGRIND_BACKTRACE 0 - %define CONFIG_XMM_CLOBBER_TEST 0 --%define CONFIG_BSFS 1 -+%define CONFIG_BSFS 0 - %define CONFIG_DECODERS 1 -+%define CONFIG_ENCODERS 0 -+%define CONFIG_HWACCELS 0 - %define CONFIG_PARSERS 1 -+%define CONFIG_INDEVS 0 -+%define CONFIG_OUTDEVS 0 -+%define CONFIG_FILTERS 0 -+%define CONFIG_DEMUXERS 0 -+%define CONFIG_MUXERS 0 -+%define CONFIG_PROTOCOLS 0 - %define CONFIG_AANDCTTABLES 0 - %define CONFIG_AC3DSP 0 - %define CONFIG_ADTS_HEADER 0 -+%define CONFIG_ATSC_A53 0 - %define CONFIG_AUDIO_FRAME_QUEUE 0 - %define CONFIG_AUDIODSP 0 - %define CONFIG_BLOCKDSP 0 -@@ -579,8 +636,10 @@ - %define CONFIG_CBS_JPEG 0 - %define CONFIG_CBS_MPEG2 0 - %define CONFIG_CBS_VP9 0 -+%define CONFIG_DEFLATE_WRAPPER 0 - %define CONFIG_DIRAC_PARSE 0 - %define CONFIG_DNN 0 -+%define CONFIG_DOVI_RPU 0 - %define CONFIG_DVPROFILE 0 - %define CONFIG_EXIF 0 - %define CONFIG_FAANDCT 1 -@@ -606,6 +665,7 @@ - %define CONFIG_IDCTDSP 1 - %define CONFIG_IIRFILTER 0 - %define CONFIG_MDCT15 0 -+%define CONFIG_INFLATE_WRAPPER 0 - %define CONFIG_INTRAX8 0 - %define CONFIG_ISO_MEDIA 0 - %define CONFIG_IVIDSP 0 -@@ -622,7 +682,9 @@ - %define CONFIG_MPEGAUDIO 1 - %define CONFIG_MPEGAUDIODSP 1 - %define CONFIG_MPEGAUDIOHEADER 1 -+%define CONFIG_MPEG4AUDIO 0 - %define CONFIG_MPEGVIDEO 0 -+%define CONFIG_MPEGVIDEODEC 0 - %define CONFIG_MPEGVIDEOENC 0 - %define CONFIG_MSS34DSP 0 - %define CONFIG_PIXBLOCKDSP 0 -@@ -654,11 +716,3 @@ - %define CONFIG_VP8DSP 1 - %define CONFIG_WMA_FREQS 0 - %define CONFIG_WMV2DSP 0 --%define CONFIG_NULL_BSF 1 --%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --%define CONFIG_VP8_DECODER 1 --%define CONFIG_VP9_DECODER 1 --%define CONFIG_FLAC_DECODER 1 --%define CONFIG_MP3_DECODER 1 --%define CONFIG_VP8_PARSER 1 --%define CONFIG_VP9_PARSER 1 -\ No newline at end of file -diff -Naur a/media/ffvpx/config_win64.h b/media/ffvpx/config_win64.h ---- a/media/ffvpx/config_win64.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/config_win64.h 2023-04-06 12:49:19.192546469 +0200 -@@ -1,13 +1,14 @@ - /* Automatically generated by configure - do not modify! */ - #ifndef FFMPEG_CONFIG_H - #define FFMPEG_CONFIG_H --#define FFMPEG_CONFIGURATION "--disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-asm --enable-x86asm --disable-cuda --disable-cuvid --enable-decoder=mp3 --toolchain=msvc" -+#define FFMPEG_CONFIGURATION "--disable-all --enable-avcodec --enable-decoder='vp8,vp9,mp3,flac' --enable-parser='vp8,vp9' --disable-static --enable-shared --disable-autodetect --enable-w32threads --toolchain=msvc" - #define FFMPEG_LICENSE "LGPL version 2.1 or later" --#define CONFIG_THIS_YEAR 2019 -+#define CONFIG_THIS_YEAR 2022 - #define FFMPEG_DATADIR "/usr/local/share/ffmpeg" - #define AVCONV_DATADIR "/usr/local/share/ffmpeg" --#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.24.28315 for x64" --#define av_restrict __restrict -+#define CC_IDENT "Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30133 for x64" -+#define OS_NAME win32 -+#define av_restrict restrict - #define EXTERN_PREFIX "" - #define EXTERN_ASM - #define BUILDSUF "" -@@ -22,12 +23,16 @@ - #define ARCH_AVR32_UC 0 - #define ARCH_BFIN 0 - #define ARCH_IA64 0 -+#define ARCH_LOONGARCH 0 -+#define ARCH_LOONGARCH32 0 -+#define ARCH_LOONGARCH64 0 - #define ARCH_M68K 0 - #define ARCH_MIPS 0 - #define ARCH_MIPS64 0 - #define ARCH_PARISC 0 - #define ARCH_PPC 0 - #define ARCH_PPC64 0 -+#define ARCH_RISCV 0 - #define ARCH_S390 0 - #define ARCH_SH4 0 - #define ARCH_SPARC 0 -@@ -58,6 +63,7 @@ - #define HAVE_AVX 1 - #define HAVE_AVX2 1 - #define HAVE_AVX512 1 -+#define HAVE_AVX512ICL 1 - #define HAVE_FMA3 1 - #define HAVE_FMA4 1 - #define HAVE_MMX 1 -@@ -80,10 +86,11 @@ - #define HAVE_MIPSDSP 0 - #define HAVE_MIPSDSPR2 0 - #define HAVE_MSA 0 --#define HAVE_MSA2 0 - #define HAVE_LOONGSON2 0 - #define HAVE_LOONGSON3 0 - #define HAVE_MMI 0 -+#define HAVE_LSX 0 -+#define HAVE_LASX 0 - #define HAVE_ARMV5TE_EXTERNAL 0 - #define HAVE_ARMV6_EXTERNAL 0 - #define HAVE_ARMV6T2_EXTERNAL 0 -@@ -104,6 +111,7 @@ - #define HAVE_AVX_EXTERNAL 1 - #define HAVE_AVX2_EXTERNAL 1 - #define HAVE_AVX512_EXTERNAL 1 -+#define HAVE_AVX512ICL_EXTERNAL 1 - #define HAVE_FMA3_EXTERNAL 1 - #define HAVE_FMA4_EXTERNAL 1 - #define HAVE_MMX_EXTERNAL 1 -@@ -126,10 +134,11 @@ - #define HAVE_MIPSDSP_EXTERNAL 0 - #define HAVE_MIPSDSPR2_EXTERNAL 0 - #define HAVE_MSA_EXTERNAL 0 --#define HAVE_MSA2_EXTERNAL 0 - #define HAVE_LOONGSON2_EXTERNAL 0 - #define HAVE_LOONGSON3_EXTERNAL 0 - #define HAVE_MMI_EXTERNAL 0 -+#define HAVE_LSX_EXTERNAL 0 -+#define HAVE_LASX_EXTERNAL 0 - #define HAVE_ARMV5TE_INLINE 0 - #define HAVE_ARMV6_INLINE 0 - #define HAVE_ARMV6T2_INLINE 0 -@@ -150,6 +159,7 @@ - #define HAVE_AVX_INLINE 0 - #define HAVE_AVX2_INLINE 0 - #define HAVE_AVX512_INLINE 0 -+#define HAVE_AVX512ICL_INLINE 0 - #define HAVE_FMA3_INLINE 0 - #define HAVE_FMA4_INLINE 0 - #define HAVE_MMX_INLINE 0 -@@ -172,13 +182,14 @@ - #define HAVE_MIPSDSP_INLINE 0 - #define HAVE_MIPSDSPR2_INLINE 0 - #define HAVE_MSA_INLINE 0 --#define HAVE_MSA2_INLINE 0 - #define HAVE_LOONGSON2_INLINE 0 - #define HAVE_LOONGSON3_INLINE 0 - #define HAVE_MMI_INLINE 0 -+#define HAVE_LSX_INLINE 0 -+#define HAVE_LASX_INLINE 0 - #define HAVE_ALIGNED_STACK 1 - #define HAVE_FAST_64BIT 1 --#define HAVE_FAST_CLZ 0 -+#define HAVE_FAST_CLZ 1 - #define HAVE_FAST_CMOV 1 - #define HAVE_LOCAL_ALIGNED 1 - #define HAVE_SIMD_ALIGN_16 1 -@@ -216,6 +227,7 @@ - #define HAVE_ES2_GL_H 0 - #define HAVE_GSM_H 0 - #define HAVE_IO_H 1 -+#define HAVE_LINUX_DMA_BUF_H 0 - #define HAVE_LINUX_PERF_EVENT_H 0 - #define HAVE_MACHINE_IOCTL_BT848_H 0 - #define HAVE_MACHINE_IOCTL_METEOR_H 0 -@@ -279,12 +291,16 @@ - #define HAVE_COMMANDLINETOARGVW 1 - #define HAVE_FCNTL 0 - #define HAVE_GETADDRINFO 1 -+#define HAVE_GETAUXVAL 0 -+#define HAVE_GETENV 1 - #define HAVE_GETHRTIME 0 - #define HAVE_GETOPT 0 -+#define HAVE_GETMODULEHANDLE 1 - #define HAVE_GETPROCESSAFFINITYMASK 1 - #define HAVE_GETPROCESSMEMORYINFO 1 - #define HAVE_GETPROCESSTIMES 1 - #define HAVE_GETRUSAGE 0 -+#define HAVE_GETSTDHANDLE 1 - #define HAVE_GETSYSTEMTIMEASFILETIME 1 - #define HAVE_GETTIMEOFDAY 0 - #define HAVE_GLOB 0 -@@ -307,6 +323,7 @@ - #define HAVE_SECITEMIMPORT 0 - #define HAVE_SETCONSOLETEXTATTRIBUTE 1 - #define HAVE_SETCONSOLECTRLHANDLER 1 -+#define HAVE_SETDLLDIRECTORY 1 - #define HAVE_SETMODE 1 - #define HAVE_SETRLIMIT 0 - #define HAVE_SLEEP 1 -@@ -340,14 +357,29 @@ - #define HAVE_INLINE_ASM_LABELS 0 - #define HAVE_INLINE_ASM_NONLOCAL_LABELS 0 - #define HAVE_PRAGMA_DEPRECATED 1 --#define HAVE_RSYNC_CONTIMEOUT 1 -+#define HAVE_RSYNC_CONTIMEOUT 0 - #define HAVE_SYMVER_ASM_LABEL 0 - #define HAVE_SYMVER_GNU_ASM 0 - #define HAVE_VFP_ARGS 0 - #define HAVE_XFORM_ASM 0 - #define HAVE_XMM_CLOBBERS 0 - #define HAVE_KCMVIDEOCODECTYPE_HEVC 0 -+#define HAVE_KCMVIDEOCODECTYPE_HEVCWITHALPHA 0 -+#define HAVE_KCMVIDEOCODECTYPE_VP9 0 - #define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_422YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE 0 -+#define HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0 -+#define HAVE_KCVIMAGEBUFFERYCBCRMATRIX_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERCOLORPRIMARIES_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2020 0 -+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_428_1 0 - #define HAVE_SOCKLEN_T 1 - #define HAVE_STRUCT_ADDRINFO 1 - #define HAVE_STRUCT_GROUP_SOURCE_REQ 1 -@@ -362,7 +394,9 @@ - #define HAVE_STRUCT_SOCKADDR_STORAGE 1 - #define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 0 - #define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0 --#define HAVE_MAKEINFO 1 -+#define HAVE_GZIP 1 -+#define HAVE_LIBDRM_GETFB2 0 -+#define HAVE_MAKEINFO 0 - #define HAVE_MAKEINFO_HTML 0 - #define HAVE_OPENCL_D3D11 0 - #define HAVE_OPENCL_DRM_ARM 0 -@@ -373,12 +407,14 @@ - #define HAVE_PERL 1 - #define HAVE_POD2MAN 1 - #define HAVE_TEXI2HTML 0 -+#define HAVE_XMLLINT 1 -+#define HAVE_ZLIB_GZIP 0 - #define CONFIG_DOC 0 - #define CONFIG_HTMLPAGES 0 - #define CONFIG_MANPAGES 1 - #define CONFIG_PODPAGES 1 --#define CONFIG_TXTPAGES 1 --#define CONFIG_AVIO_DIR_CMD_EXAMPLE 1 -+#define CONFIG_TXTPAGES 0 -+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1 - #define CONFIG_AVIO_READING_EXAMPLE 1 - #define CONFIG_DECODE_AUDIO_EXAMPLE 1 - #define CONFIG_DECODE_VIDEO_EXAMPLE 1 -@@ -414,14 +450,12 @@ - #define CONFIG_LIBXVID 0 - #define CONFIG_DECKLINK 0 - #define CONFIG_LIBFDK_AAC 0 --#define CONFIG_OPENSSL 0 - #define CONFIG_LIBTLS 0 - #define CONFIG_GMP 0 - #define CONFIG_LIBARIBB24 0 - #define CONFIG_LIBLENSFUN 0 - #define CONFIG_LIBOPENCORE_AMRNB 0 - #define CONFIG_LIBOPENCORE_AMRWB 0 --#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVO_AMRWBENC 0 - #define CONFIG_MBEDTLS 0 - #define CONFIG_RKMPP 0 -@@ -431,6 +465,7 @@ - #define CONFIG_GNUTLS 0 - #define CONFIG_JNI 0 - #define CONFIG_LADSPA 0 -+#define CONFIG_LCMS2 0 - #define CONFIG_LIBAOM 0 - #define CONFIG_LIBASS 0 - #define CONFIG_LIBBLURAY 0 -@@ -445,11 +480,13 @@ - #define CONFIG_LIBFONTCONFIG 0 - #define CONFIG_LIBFREETYPE 0 - #define CONFIG_LIBFRIBIDI 0 -+#define CONFIG_LIBGLSLANG 0 - #define CONFIG_LIBGME 0 - #define CONFIG_LIBGSM 0 - #define CONFIG_LIBIEC61883 0 - #define CONFIG_LIBILBC 0 - #define CONFIG_LIBJACK 0 -+#define CONFIG_LIBJXL 0 - #define CONFIG_LIBKLVANC 0 - #define CONFIG_LIBKVAZAAR 0 - #define CONFIG_LIBMODPLUG 0 -@@ -459,10 +496,16 @@ - #define CONFIG_LIBOPENH264 0 - #define CONFIG_LIBOPENJPEG 0 - #define CONFIG_LIBOPENMPT 0 -+#define CONFIG_LIBOPENVINO 0 - #define CONFIG_LIBOPUS 0 -+#define CONFIG_LIBPLACEBO 0 - #define CONFIG_LIBPULSE 0 -+#define CONFIG_LIBRABBITMQ 0 -+#define CONFIG_LIBRAV1E 0 -+#define CONFIG_LIBRIST 0 - #define CONFIG_LIBRSVG 0 - #define CONFIG_LIBRTMP 0 -+#define CONFIG_LIBSHADERC 0 - #define CONFIG_LIBSHINE 0 - #define CONFIG_LIBSMBCLIENT 0 - #define CONFIG_LIBSNAPPY 0 -@@ -470,14 +513,16 @@ - #define CONFIG_LIBSPEEX 0 - #define CONFIG_LIBSRT 0 - #define CONFIG_LIBSSH 0 -+#define CONFIG_LIBSVTAV1 0 - #define CONFIG_LIBTENSORFLOW 0 - #define CONFIG_LIBTESSERACT 0 - #define CONFIG_LIBTHEORA 0 - #define CONFIG_LIBTWOLAME 0 -+#define CONFIG_LIBUAVS3D 0 - #define CONFIG_LIBV4L2 0 -+#define CONFIG_LIBVMAF 0 - #define CONFIG_LIBVORBIS 0 - #define CONFIG_LIBVPX 0 --#define CONFIG_LIBWAVPACK 0 - #define CONFIG_LIBWEBP 0 - #define CONFIG_LIBXML2 0 - #define CONFIG_LIBZIMG 0 -@@ -487,6 +532,7 @@ - #define CONFIG_MEDIACODEC 0 - #define CONFIG_OPENAL 0 - #define CONFIG_OPENGL 0 -+#define CONFIG_OPENSSL 0 - #define CONFIG_POCKETSPHINX 0 - #define CONFIG_VAPOURSYNTH 0 - #define CONFIG_ALSA 0 -@@ -500,7 +546,9 @@ - #define CONFIG_LIBXCB_SHAPE 0 - #define CONFIG_LIBXCB_XFIXES 0 - #define CONFIG_LZMA 0 --#define CONFIG_SCHANNEL 1 -+#define CONFIG_MEDIAFOUNDATION 0 -+#define CONFIG_METAL 0 -+#define CONFIG_SCHANNEL 0 - #define CONFIG_SDL2 0 - #define CONFIG_SECURETRANSPORT 0 - #define CONFIG_SNDIO 0 -@@ -527,8 +575,8 @@ - #define CONFIG_VAAPI 0 - #define CONFIG_VDPAU 0 - #define CONFIG_VIDEOTOOLBOX 0 -+#define CONFIG_VULKAN 0 - #define CONFIG_V4L2_M2M 0 --#define CONFIG_XVMC 0 - #define CONFIG_FTRAPV 0 - #define CONFIG_GRAY 0 - #define CONFIG_HARDCODED_TABLES 0 -@@ -549,7 +597,6 @@ - #define CONFIG_AVFORMAT 0 - #define CONFIG_AVCODEC 1 - #define CONFIG_SWRESAMPLE 0 --#define CONFIG_AVRESAMPLE 0 - #define CONFIG_AVUTIL 1 - #define CONFIG_FFPLAY 0 - #define CONFIG_FFPROBE 0 -@@ -561,27 +608,38 @@ - #define CONFIG_FAST_UNALIGNED 1 - #define CONFIG_FFT 1 - #define CONFIG_LSP 0 --#define CONFIG_LZO 0 - #define CONFIG_MDCT 0 - #define CONFIG_PIXELUTILS 0 - #define CONFIG_NETWORK 0 - #define CONFIG_RDFT 1 - #define CONFIG_AUTODETECT 0 - #define CONFIG_FONTCONFIG 0 -+#define CONFIG_LARGE_TESTS 1 - #define CONFIG_LINUX_PERF 0 -+#define CONFIG_MACOS_KPERF 0 - #define CONFIG_MEMORY_POISONING 0 - #define CONFIG_NEON_CLOBBER_TEST 0 - #define CONFIG_OSSFUZZ 0 - #define CONFIG_PIC 1 -+#define CONFIG_PTX_COMPRESSION 0 - #define CONFIG_THUMB 0 - #define CONFIG_VALGRIND_BACKTRACE 0 - #define CONFIG_XMM_CLOBBER_TEST 0 --#define CONFIG_BSFS 1 -+#define CONFIG_BSFS 0 - #define CONFIG_DECODERS 1 -+#define CONFIG_ENCODERS 0 -+#define CONFIG_HWACCELS 0 - #define CONFIG_PARSERS 1 -+#define CONFIG_INDEVS 0 -+#define CONFIG_OUTDEVS 0 -+#define CONFIG_FILTERS 0 -+#define CONFIG_DEMUXERS 0 -+#define CONFIG_MUXERS 0 -+#define CONFIG_PROTOCOLS 0 - #define CONFIG_AANDCTTABLES 0 - #define CONFIG_AC3DSP 0 - #define CONFIG_ADTS_HEADER 0 -+#define CONFIG_ATSC_A53 0 - #define CONFIG_AUDIO_FRAME_QUEUE 0 - #define CONFIG_AUDIODSP 0 - #define CONFIG_BLOCKDSP 0 -@@ -594,8 +652,10 @@ - #define CONFIG_CBS_JPEG 0 - #define CONFIG_CBS_MPEG2 0 - #define CONFIG_CBS_VP9 0 -+#define CONFIG_DEFLATE_WRAPPER 0 - #define CONFIG_DIRAC_PARSE 0 - #define CONFIG_DNN 0 -+#define CONFIG_DOVI_RPU 0 - #define CONFIG_DVPROFILE 0 - #define CONFIG_EXIF 0 - #define CONFIG_FAANDCT 1 -@@ -621,6 +681,7 @@ - #define CONFIG_IDCTDSP 1 - #define CONFIG_IIRFILTER 0 - #define CONFIG_MDCT15 0 -+#define CONFIG_INFLATE_WRAPPER 0 - #define CONFIG_INTRAX8 0 - #define CONFIG_ISO_MEDIA 0 - #define CONFIG_IVIDSP 0 -@@ -637,7 +698,9 @@ - #define CONFIG_MPEGAUDIO 1 - #define CONFIG_MPEGAUDIODSP 1 - #define CONFIG_MPEGAUDIOHEADER 1 -+#define CONFIG_MPEG4AUDIO 0 - #define CONFIG_MPEGVIDEO 0 -+#define CONFIG_MPEGVIDEODEC 0 - #define CONFIG_MPEGVIDEOENC 0 - #define CONFIG_MSS34DSP 0 - #define CONFIG_PIXBLOCKDSP 0 -@@ -669,12 +732,4 @@ - #define CONFIG_VP8DSP 1 - #define CONFIG_WMA_FREQS 0 - #define CONFIG_WMV2DSP 0 --#define CONFIG_NULL_BSF 1 --#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1 --#define CONFIG_VP8_DECODER 1 --#define CONFIG_VP9_DECODER 1 --#define CONFIG_FLAC_DECODER 1 --#define CONFIG_MP3_DECODER 1 --#define CONFIG_VP8_PARSER 1 --#define CONFIG_VP9_PARSER 1 - #endif /* FFMPEG_CONFIG_H */ -diff -Naur a/media/ffvpx/defaults_disabled.asm b/media/ffvpx/defaults_disabled.asm ---- a/media/ffvpx/defaults_disabled.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/defaults_disabled.asm 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1836 +0,0 @@ --%define CONFIG_A64MULTI5_ENCODER 0 --%define CONFIG_A64MULTI_ENCODER 0 --%define CONFIG_A64_MUXER 0 --%define CONFIG_AAC_ADTSTOASC_BSF 0 --%define CONFIG_AAC_AT_DECODER 0 --%define CONFIG_AAC_AT_ENCODER 0 --%define CONFIG_AAC_DECODER 0 --%define CONFIG_AAC_DEMUXER 0 --%define CONFIG_AAC_ENCODER 0 --%define CONFIG_AAC_FIXED_DECODER 0 --%define CONFIG_AAC_LATM_DECODER 0 --%define CONFIG_AAC_LATM_PARSER 0 --%define CONFIG_AAC_PARSER 0 --%define CONFIG_AA_DEMUXER 0 --%define CONFIG_AASC_DECODER 0 --%define CONFIG_ABENCH_FILTER 0 --%define CONFIG_ABITSCOPE_FILTER 0 --%define CONFIG_AC3_AT_DECODER 0 --%define CONFIG_AC3_DECODER 0 --%define CONFIG_AC3_DEMUXER 0 --%define CONFIG_AC3_ENCODER 0 --%define CONFIG_AC3_FIXED_DECODER 0 --%define CONFIG_AC3_FIXED_ENCODER 0 --%define CONFIG_AC3_MUXER 0 --%define CONFIG_AC3_PARSER 0 --%define CONFIG_ACM_DEMUXER 0 --%define CONFIG_ACOMPRESSOR_FILTER 0 --%define CONFIG_ACONTRAST_FILTER 0 --%define CONFIG_ACOPY_FILTER 0 --%define CONFIG_ACROSSFADE_FILTER 0 --%define CONFIG_ACROSSOVER_FILTER 0 --%define CONFIG_ACRUSHER_FILTER 0 --%define CONFIG_ACT_DEMUXER 0 --%define CONFIG_ACUE_FILTER 0 --%define CONFIG_ADECLICK_FILTER 0 --%define CONFIG_ADECLIP_FILTER 0 --%define CONFIG_ADELAY_FILTER 0 --%define CONFIG_ADERIVATIVE_FILTER 0 --%define CONFIG_ADF_DEMUXER 0 --%define CONFIG_ADPCM_4XM_DECODER 0 --%define CONFIG_ADPCM_ADX_DECODER 0 --%define CONFIG_ADPCM_ADX_ENCODER 0 --%define CONFIG_ADPCM_AFC_DECODER 0 --%define CONFIG_ADPCM_AGM_DECODER 0 --%define CONFIG_ADPCM_AICA_DECODER 0 --%define CONFIG_ADPCM_CT_DECODER 0 --%define CONFIG_ADPCM_DTK_DECODER 0 --%define CONFIG_ADPCM_EA_DECODER 0 --%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 --%define CONFIG_ADPCM_EA_R1_DECODER 0 --%define CONFIG_ADPCM_EA_R2_DECODER 0 --%define CONFIG_ADPCM_EA_R3_DECODER 0 --%define CONFIG_ADPCM_EA_XAS_DECODER 0 --%define CONFIG_ADPCM_G722_DECODER 0 --%define CONFIG_ADPCM_G722_ENCODER 0 --%define CONFIG_ADPCM_G726_DECODER 0 --%define CONFIG_ADPCM_G726_ENCODER 0 --%define CONFIG_ADPCM_G726LE_DECODER 0 --%define CONFIG_ADPCM_G726LE_ENCODER 0 --%define CONFIG_ADPCM_IMA_AMV_DECODER 0 --%define CONFIG_ADPCM_IMA_APC_DECODER 0 --%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 --%define CONFIG_ADPCM_IMA_DK3_DECODER 0 --%define CONFIG_ADPCM_IMA_DK4_DECODER 0 --%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 --%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 --%define CONFIG_ADPCM_IMA_ISS_DECODER 0 --%define CONFIG_ADPCM_IMA_OKI_DECODER 0 --%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 --%define CONFIG_ADPCM_IMA_QT_DECODER 0 --%define CONFIG_ADPCM_IMA_QT_ENCODER 0 --%define CONFIG_ADPCM_IMA_RAD_DECODER 0 --%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 --%define CONFIG_ADPCM_IMA_WAV_DECODER 0 --%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 --%define CONFIG_ADPCM_IMA_WS_DECODER 0 --%define CONFIG_ADPCM_MS_DECODER 0 --%define CONFIG_ADPCM_MS_ENCODER 0 --%define CONFIG_ADPCM_MTAF_DECODER 0 --%define CONFIG_ADPCM_PSX_DECODER 0 --%define CONFIG_ADPCM_SBPRO_2_DECODER 0 --%define CONFIG_ADPCM_SBPRO_3_DECODER 0 --%define CONFIG_ADPCM_SBPRO_4_DECODER 0 --%define CONFIG_ADPCM_SWF_DECODER 0 --%define CONFIG_ADPCM_SWF_ENCODER 0 --%define CONFIG_ADPCM_THP_DECODER 0 --%define CONFIG_ADPCM_THP_LE_DECODER 0 --%define CONFIG_ADPCM_VIMA_DECODER 0 --%define CONFIG_ADPCM_XA_DECODER 0 --%define CONFIG_ADPCM_YAMAHA_DECODER 0 --%define CONFIG_ADPCM_YAMAHA_ENCODER 0 --%define CONFIG_ADP_DEMUXER 0 --%define CONFIG_ADRAWGRAPH_FILTER 0 --%define CONFIG_ADS_DEMUXER 0 --%define CONFIG_ADTS_MUXER 0 --%define CONFIG_ADX_DEMUXER 0 --%define CONFIG_ADX_MUXER 0 --%define CONFIG_ADX_PARSER 0 --%define CONFIG_AEA_DEMUXER 0 --%define CONFIG_AECHO_FILTER 0 --%define CONFIG_AEMPHASIS_FILTER 0 --%define CONFIG_AEVAL_FILTER 0 --%define CONFIG_AEVALSRC_FILTER 0 --%define CONFIG_AFADE_FILTER 0 --%define CONFIG_AFC_DEMUXER 0 --%define CONFIG_AFFTDN_FILTER 0 --%define CONFIG_AFFTFILT_FILTER 0 --%define CONFIG_AFIFO_FILTER 0 --%define CONFIG_AFIR_FILTER 0 --%define CONFIG_AFORMAT_FILTER 0 --%define CONFIG_AGATE_FILTER 0 --%define CONFIG_AGM_DECODER 0 --%define CONFIG_AGRAPHMONITOR_FILTER 0 --%define CONFIG_AHISTOGRAM_FILTER 0 --%define CONFIG_AIC_DECODER 0 --%define CONFIG_AIFF_DEMUXER 0 --%define CONFIG_AIFF_MUXER 0 --%define CONFIG_AIIR_FILTER 0 --%define CONFIG_AINTEGRAL_FILTER 0 --%define CONFIG_AINTERLEAVE_FILTER 0 --%define CONFIG_AIX_DEMUXER 0 --%define CONFIG_ALAC_AT_DECODER 0 --%define CONFIG_ALAC_AT_ENCODER 0 --%define CONFIG_ALAC_DECODER 0 --%define CONFIG_ALAC_ENCODER 0 --%define CONFIG_ALIAS_PIX_DECODER 0 --%define CONFIG_ALIAS_PIX_ENCODER 0 --%define CONFIG_ALIMITER_FILTER 0 --%define CONFIG_ALLPASS_FILTER 0 --%define CONFIG_ALLRGB_FILTER 0 --%define CONFIG_ALLYUV_FILTER 0 --%define CONFIG_ALOOP_FILTER 0 --%define CONFIG_ALPHAEXTRACT_FILTER 0 --%define CONFIG_ALPHAMERGE_FILTER 0 --%define CONFIG_ALSA_INDEV 0 --%define CONFIG_ALSA_OUTDEV 0 --%define CONFIG_ALS_DECODER 0 --%define CONFIG_AMERGE_FILTER 0 --%define CONFIG_AMETADATA_FILTER 0 --%define CONFIG_AMIX_FILTER 0 --%define CONFIG_AMOVIE_FILTER 0 --%define CONFIG_AMPLIFY_FILTER 0 --%define CONFIG_AMR_DEMUXER 0 --%define CONFIG_AMR_MUXER 0 --%define CONFIG_AMR_NB_AT_DECODER 0 --%define CONFIG_AMRNB_DECODER 0 --%define CONFIG_AMRNB_DEMUXER 0 --%define CONFIG_AMRWB_DECODER 0 --%define CONFIG_AMRWB_DEMUXER 0 --%define CONFIG_AMULTIPLY_FILTER 0 --%define CONFIG_AMV_DECODER 0 --%define CONFIG_AMV_ENCODER 0 --%define CONFIG_ANDROID_CAMERA_INDEV 0 --%define CONFIG_ANEQUALIZER_FILTER 0 --%define CONFIG_ANLMDN_FILTER 0 --%define CONFIG_ANM_DECODER 0 --%define CONFIG_ANM_DEMUXER 0 --%define CONFIG_ANOISESRC_FILTER 0 --%define CONFIG_ANSI_DECODER 0 --%define CONFIG_ANULL_FILTER 0 --%define CONFIG_ANULLSINK_FILTER 0 --%define CONFIG_ANULLSRC_FILTER 0 --%define CONFIG_APAD_FILTER 0 --%define CONFIG_APC_DEMUXER 0 --%define CONFIG_APE_DECODER 0 --%define CONFIG_APE_DEMUXER 0 --%define CONFIG_APERMS_FILTER 0 --%define CONFIG_APHASEMETER_FILTER 0 --%define CONFIG_APHASER_FILTER 0 --%define CONFIG_APNG_DECODER 0 --%define CONFIG_APNG_DEMUXER 0 --%define CONFIG_APNG_ENCODER 0 --%define CONFIG_APNG_MUXER 0 --%define CONFIG_APTX_DECODER 0 --%define CONFIG_APTX_DEMUXER 0 --%define CONFIG_APTX_ENCODER 0 --%define CONFIG_APTX_HD_DECODER 0 --%define CONFIG_APTX_HD_DEMUXER 0 --%define CONFIG_APTX_HD_ENCODER 0 --%define CONFIG_APTX_HD_MUXER 0 --%define CONFIG_APTX_MUXER 0 --%define CONFIG_APULSATOR_FILTER 0 --%define CONFIG_AQTITLE_DEMUXER 0 --%define CONFIG_ARBC_DECODER 0 --%define CONFIG_AREALTIME_FILTER 0 --%define CONFIG_ARESAMPLE_FILTER 0 --%define CONFIG_AREVERSE_FILTER 0 --%define CONFIG_ASELECT_FILTER 0 --%define CONFIG_ASENDCMD_FILTER 0 --%define CONFIG_ASETNSAMPLES_FILTER 0 --%define CONFIG_ASETPTS_FILTER 0 --%define CONFIG_ASETRATE_FILTER 0 --%define CONFIG_ASETTB_FILTER 0 --%define CONFIG_ASF_DEMUXER 0 --%define CONFIG_ASF_MUXER 0 --%define CONFIG_ASF_O_DEMUXER 0 --%define CONFIG_ASF_STREAM_MUXER 0 --%define CONFIG_ASHOWINFO_FILTER 0 --%define CONFIG_ASIDEDATA_FILTER 0 --%define CONFIG_ASOFTCLIP_FILTER 0 --%define CONFIG_ASPLIT_FILTER 0 --%define CONFIG_ASR_FILTER 0 --%define CONFIG_ASS_DECODER 0 --%define CONFIG_ASS_DEMUXER 0 --%define CONFIG_ASS_ENCODER 0 --%define CONFIG_ASS_FILTER 0 --%define CONFIG_ASS_MUXER 0 --%define CONFIG_ASTATS_FILTER 0 --%define CONFIG_AST_DEMUXER 0 --%define CONFIG_AST_MUXER 0 --%define CONFIG_ASTREAMSELECT_FILTER 0 --%define CONFIG_ASV1_DECODER 0 --%define CONFIG_ASV1_ENCODER 0 --%define CONFIG_ASV2_DECODER 0 --%define CONFIG_ASV2_ENCODER 0 --%define CONFIG_ASYNC_PROTOCOL 0 --%define CONFIG_ATADENOISE_FILTER 0 --%define CONFIG_ATEMPO_FILTER 0 --%define CONFIG_ATRAC1_DECODER 0 --%define CONFIG_ATRAC3AL_DECODER 0 --%define CONFIG_ATRAC3_DECODER 0 --%define CONFIG_ATRAC3PAL_DECODER 0 --%define CONFIG_ATRAC3P_DECODER 0 --%define CONFIG_ATRAC9_DECODER 0 --%define CONFIG_ATRIM_FILTER 0 --%define CONFIG_AU_DEMUXER 0 --%define CONFIG_AU_MUXER 0 --%define CONFIG_AURA2_DECODER 0 --%define CONFIG_AURA_DECODER 0 --%define CONFIG_AV1_FRAME_SPLIT_BSF 0 --%define CONFIG_AV1_METADATA_BSF 0 --%define CONFIG_AV1_PARSER 0 --%define CONFIG_AV1_D3D11VA_HWACCEL 0 --%define CONFIG_AV1_D3D11VA2_HWACCEL 0 --%define CONFIG_AV1_DXVA2_HWACCEL 0 --%define CONFIG_AV1_NVDEC_HWACCEL 0 --%define CONFIG_AV1_VAAPI_HWACCEL 0 --%define CONFIG_AVECTORSCOPE_FILTER 0 --%define CONFIG_AVFOUNDATION_INDEV 0 --%define CONFIG_AVGBLUR_FILTER 0 --%define CONFIG_AVGBLUR_OPENCL_FILTER 0 --%define CONFIG_AVI_DEMUXER 0 --%define CONFIG_AVI_MUXER 0 --%define CONFIG_AVISYNTH_DEMUXER 0 --%define CONFIG_AVM2_MUXER 0 --%define CONFIG_AVR_DEMUXER 0 --%define CONFIG_AVRN_DECODER 0 --%define CONFIG_AVRP_DECODER 0 --%define CONFIG_AVRP_ENCODER 0 --%define CONFIG_AVS2_DEMUXER 0 --%define CONFIG_AVS2_MUXER 0 --%define CONFIG_AVS2_PARSER 0 --%define CONFIG_AVS_DECODER 0 --%define CONFIG_AVS_DEMUXER 0 --%define CONFIG_AVUI_DECODER 0 --%define CONFIG_AVUI_ENCODER 0 --%define CONFIG_AYUV_DECODER 0 --%define CONFIG_AYUV_ENCODER 0 --%define CONFIG_AZMQ_FILTER 0 --%define CONFIG_BANDPASS_FILTER 0 --%define CONFIG_BANDREJECT_FILTER 0 --%define CONFIG_BASS_FILTER 0 --%define CONFIG_BBOX_FILTER 0 --%define CONFIG_BENCH_FILTER 0 --%define CONFIG_BETHSOFTVID_DECODER 0 --%define CONFIG_BETHSOFTVID_DEMUXER 0 --%define CONFIG_BFI_DECODER 0 --%define CONFIG_BFI_DEMUXER 0 --%define CONFIG_BFSTM_DEMUXER 0 --%define CONFIG_BINKAUDIO_DCT_DECODER 0 --%define CONFIG_BINKAUDIO_RDFT_DECODER 0 --%define CONFIG_BINK_DECODER 0 --%define CONFIG_BINK_DEMUXER 0 --%define CONFIG_BINTEXT_DECODER 0 --%define CONFIG_BINTEXT_DEMUXER 0 --%define CONFIG_BIQUAD_FILTER 0 --%define CONFIG_BIT_DEMUXER 0 --%define CONFIG_BIT_MUXER 0 --%define CONFIG_BITPACKED_DECODER 0 --%define CONFIG_BITPLANENOISE_FILTER 0 --%define CONFIG_BKTR_INDEV 0 --%define CONFIG_BLACKDETECT_FILTER 0 --%define CONFIG_BLACKFRAME_FILTER 0 --%define CONFIG_BLEND_FILTER 0 --%define CONFIG_BLURAY_PROTOCOL 0 --%define CONFIG_BM3D_FILTER 0 --%define CONFIG_BMP_DECODER 0 --%define CONFIG_BMP_ENCODER 0 --%define CONFIG_BMP_PARSER 0 --%define CONFIG_BMV_AUDIO_DECODER 0 --%define CONFIG_BMV_DEMUXER 0 --%define CONFIG_BMV_VIDEO_DECODER 0 --%define CONFIG_BOA_DEMUXER 0 --%define CONFIG_BOXBLUR_FILTER 0 --%define CONFIG_BOXBLUR_OPENCL_FILTER 0 --%define CONFIG_BRENDER_PIX_DECODER 0 --%define CONFIG_BRSTM_DEMUXER 0 --%define CONFIG_BS2B_FILTER 0 --%define CONFIG_BWDIF_FILTER 0 --%define CONFIG_C93_DECODER 0 --%define CONFIG_C93_DEMUXER 0 --%define CONFIG_CACA_OUTDEV 0 --%define CONFIG_CACHE_PROTOCOL 0 --%define CONFIG_CAF_DEMUXER 0 --%define CONFIG_CAF_MUXER 0 --%define CONFIG_CAVS_DECODER 0 --%define CONFIG_CAVSVIDEO_DEMUXER 0 --%define CONFIG_CAVSVIDEO_MUXER 0 --%define CONFIG_CAVSVIDEO_PARSER 0 --%define CONFIG_CCAPTION_DECODER 0 --%define CONFIG_CDG_DEMUXER 0 --%define CONFIG_CDGRAPHICS_DECODER 0 --%define CONFIG_CDXL_DECODER 0 --%define CONFIG_CDXL_DEMUXER 0 --%define CONFIG_CELLAUTO_FILTER 0 --%define CONFIG_CFHD_DECODER 0 --%define CONFIG_CHANNELMAP_FILTER 0 --%define CONFIG_CHANNELSPLIT_FILTER 0 --%define CONFIG_CHOMP_BSF 0 --%define CONFIG_CHORUS_FILTER 0 --%define CONFIG_CHROMAHOLD_FILTER 0 --%define CONFIG_CHROMAKEY_FILTER 0 --%define CONFIG_CHROMAPRINT_MUXER 0 --%define CONFIG_CHROMASHIFT_FILTER 0 --%define CONFIG_CIESCOPE_FILTER 0 --%define CONFIG_CINE_DEMUXER 0 --%define CONFIG_CINEPAK_DECODER 0 --%define CONFIG_CINEPAK_ENCODER 0 --%define CONFIG_CLEARVIDEO_DECODER 0 --%define CONFIG_CLJR_DECODER 0 --%define CONFIG_CLJR_ENCODER 0 --%define CONFIG_CLLC_DECODER 0 --%define CONFIG_CODEC2_DEMUXER 0 --%define CONFIG_CODEC2_MUXER 0 --%define CONFIG_CODEC2RAW_DEMUXER 0 --%define CONFIG_CODEC2RAW_MUXER 0 --%define CONFIG_CODECVIEW_FILTER 0 --%define CONFIG_COLORBALANCE_FILTER 0 --%define CONFIG_COLORCHANNELMIXER_FILTER 0 --%define CONFIG_COLOR_FILTER 0 --%define CONFIG_COLORHOLD_FILTER 0 --%define CONFIG_COLORKEY_FILTER 0 --%define CONFIG_COLORKEY_OPENCL_FILTER 0 --%define CONFIG_COLORLEVELS_FILTER 0 --%define CONFIG_COLORMATRIX_FILTER 0 --%define CONFIG_COLORSPACE_FILTER 0 --%define CONFIG_COMFORTNOISE_DECODER 0 --%define CONFIG_COMFORTNOISE_ENCODER 0 --%define CONFIG_COMPAND_FILTER 0 --%define CONFIG_COMPENSATIONDELAY_FILTER 0 --%define CONFIG_CONCAT_DEMUXER 0 --%define CONFIG_CONCAT_FILTER 0 --%define CONFIG_CONCAT_PROTOCOL 0 --%define CONFIG_CONVOLUTION_FILTER 0 --%define CONFIG_CONVOLUTION_OPENCL_FILTER 0 --%define CONFIG_CONVOLVE_FILTER 0 --%define CONFIG_COOK_DECODER 0 --%define CONFIG_COOK_PARSER 0 --%define CONFIG_COPY_FILTER 0 --%define CONFIG_COREIMAGE_FILTER 0 --%define CONFIG_COREIMAGESRC_FILTER 0 --%define CONFIG_COVER_RECT_FILTER 0 --%define CONFIG_CPIA_DECODER 0 --%define CONFIG_CRC_MUXER 0 --%define CONFIG_CROPDETECT_FILTER 0 --%define CONFIG_CROP_FILTER 0 --%define CONFIG_CROSSFEED_FILTER 0 --%define CONFIG_CRYPTO_PROTOCOL 0 --%define CONFIG_CRYSTALIZER_FILTER 0 --%define CONFIG_CSCD_DECODER 0 --%define CONFIG_CUE_FILTER 0 --%define CONFIG_CURVES_FILTER 0 --%define CONFIG_CYUV_DECODER 0 --%define CONFIG_DASH_DEMUXER 0 --%define CONFIG_DASH_MUXER 0 --%define CONFIG_DATA_DEMUXER 0 --%define CONFIG_DATA_MUXER 0 --%define CONFIG_DATA_PROTOCOL 0 --%define CONFIG_DATASCOPE_FILTER 0 --%define CONFIG_DAUD_DEMUXER 0 --%define CONFIG_DAUD_MUXER 0 --%define CONFIG_DCA_CORE_BSF 0 --%define CONFIG_DCA_DECODER 0 --%define CONFIG_DCA_ENCODER 0 --%define CONFIG_DCA_PARSER 0 --%define CONFIG_DCSHIFT_FILTER 0 --%define CONFIG_DCSTR_DEMUXER 0 --%define CONFIG_DCTDNOIZ_FILTER 0 --%define CONFIG_DDS_DECODER 0 --%define CONFIG_DEBAND_FILTER 0 --%define CONFIG_DEBLOCK_FILTER 0 --%define CONFIG_DECIMATE_FILTER 0 --%define CONFIG_DECKLINK_INDEV 0 --%define CONFIG_DECKLINK_OUTDEV 0 --%define CONFIG_DECONVOLVE_FILTER 0 --%define CONFIG_DEDOT_FILTER 0 --%define CONFIG_DEESSER_FILTER 0 --%define CONFIG_DEFLATE_FILTER 0 --%define CONFIG_DEFLICKER_FILTER 0 --%define CONFIG_DEINTERLACE_QSV_FILTER 0 --%define CONFIG_DEINTERLACE_VAAPI_FILTER 0 --%define CONFIG_DEJUDDER_FILTER 0 --%define CONFIG_DELOGO_FILTER 0 --%define CONFIG_DEMUXERS 0 --%define CONFIG_DENOISE_VAAPI_FILTER 0 --%define CONFIG_DERAIN_FILTER 0 --%define CONFIG_DESHAKE_FILTER 0 --%define CONFIG_DESPILL_FILTER 0 --%define CONFIG_DETELECINE_FILTER 0 --%define CONFIG_DFA_DECODER 0 --%define CONFIG_DFA_DEMUXER 0 --%define CONFIG_DHAV_DEMUXER 0 --%define CONFIG_DILATION_FILTER 0 --%define CONFIG_DILATION_OPENCL_FILTER 0 --%define CONFIG_DIRAC_DECODER 0 --%define CONFIG_DIRAC_DEMUXER 0 --%define CONFIG_DIRAC_MUXER 0 --%define CONFIG_DIRAC_PARSER 0 --%define CONFIG_DISPLACE_FILTER 0 --%define CONFIG_DNXHD_DECODER 0 --%define CONFIG_DNXHD_DEMUXER 0 --%define CONFIG_DNXHD_ENCODER 0 --%define CONFIG_DNXHD_MUXER 0 --%define CONFIG_DNXHD_PARSER 0 --%define CONFIG_DOLBY_E_DECODER 0 --%define CONFIG_DOUBLEWEAVE_FILTER 0 --%define CONFIG_DPX_DECODER 0 --%define CONFIG_DPX_ENCODER 0 --%define CONFIG_DPX_PARSER 0 --%define CONFIG_DRAWBOX_FILTER 0 --%define CONFIG_DRAWGRAPH_FILTER 0 --%define CONFIG_DRAWGRID_FILTER 0 --%define CONFIG_DRAWTEXT_FILTER 0 --%define CONFIG_DRMETER_FILTER 0 --%define CONFIG_DSD_LSBF_DECODER 0 --%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 --%define CONFIG_DSD_MSBF_DECODER 0 --%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 --%define CONFIG_DSF_DEMUXER 0 --%define CONFIG_DSHOW_INDEV 0 --%define CONFIG_DSICINAUDIO_DECODER 0 --%define CONFIG_DSICIN_DEMUXER 0 --%define CONFIG_DSICINVIDEO_DECODER 0 --%define CONFIG_DSS_DEMUXER 0 --%define CONFIG_DSS_SP_DECODER 0 --%define CONFIG_DST_DECODER 0 --%define CONFIG_DTS_DEMUXER 0 --%define CONFIG_DTSHD_DEMUXER 0 --%define CONFIG_DTS_MUXER 0 --%define CONFIG_DUMP_EXTRADATA_BSF 0 --%define CONFIG_DVAUDIO_DECODER 0 --%define CONFIG_DVAUDIO_PARSER 0 --%define CONFIG_DVBSUB_DECODER 0 --%define CONFIG_DVBSUB_DEMUXER 0 --%define CONFIG_DVBSUB_ENCODER 0 --%define CONFIG_DVBSUB_PARSER 0 --%define CONFIG_DVBTXT_DEMUXER 0 --%define CONFIG_DV_DEMUXER 0 --%define CONFIG_DVD_NAV_PARSER 0 --%define CONFIG_DVDSUB_DECODER 0 --%define CONFIG_DVDSUB_ENCODER 0 --%define CONFIG_DVDSUB_PARSER 0 --%define CONFIG_DV_MUXER 0 --%define CONFIG_DVVIDEO_DECODER 0 --%define CONFIG_DVVIDEO_ENCODER 0 --%define CONFIG_DXA_DECODER 0 --%define CONFIG_DXA_DEMUXER 0 --%define CONFIG_DXTORY_DECODER 0 --%define CONFIG_DXV_DECODER 0 --%define CONFIG_DYNAUDNORM_FILTER 0 --%define CONFIG_EAC3_AT_DECODER 0 --%define CONFIG_EAC3_CORE_BSF 0 --%define CONFIG_EAC3_DECODER 0 --%define CONFIG_EAC3_DEMUXER 0 --%define CONFIG_EAC3_ENCODER 0 --%define CONFIG_EAC3_MUXER 0 --%define CONFIG_EA_CDATA_DEMUXER 0 --%define CONFIG_EACMV_DECODER 0 --%define CONFIG_EA_DEMUXER 0 --%define CONFIG_EAMAD_DECODER 0 --%define CONFIG_EARWAX_FILTER 0 --%define CONFIG_EATGQ_DECODER 0 --%define CONFIG_EATGV_DECODER 0 --%define CONFIG_EATQI_DECODER 0 --%define CONFIG_EBUR128_FILTER 0 --%define CONFIG_EDGEDETECT_FILTER 0 --%define CONFIG_EIGHTBPS_DECODER 0 --%define CONFIG_EIGHTSVX_EXP_DECODER 0 --%define CONFIG_EIGHTSVX_FIB_DECODER 0 --%define CONFIG_ELBG_FILTER 0 --%define CONFIG_ENCODERS 0 --%define CONFIG_ENTROPY_FILTER 0 --%define CONFIG_EPAF_DEMUXER 0 --%define CONFIG_EQ_FILTER 0 --%define CONFIG_EQUALIZER_FILTER 0 --%define CONFIG_EROSION_FILTER 0 --%define CONFIG_EROSION_OPENCL_FILTER 0 --%define CONFIG_ESCAPE124_DECODER 0 --%define CONFIG_ESCAPE130_DECODER 0 --%define CONFIG_EVRC_DECODER 0 --%define CONFIG_EXR_DECODER 0 --%define CONFIG_EXTRACT_EXTRADATA_BSF 0 --%define CONFIG_EXTRACTPLANES_FILTER 0 --%define CONFIG_EXTRASTEREO_FILTER 0 --%define CONFIG_F4V_MUXER 0 --%define CONFIG_FADE_FILTER 0 --%define CONFIG_FBDEV_INDEV 0 --%define CONFIG_FBDEV_OUTDEV 0 --%define CONFIG_FFMETADATA_DEMUXER 0 --%define CONFIG_FFMETADATA_MUXER 0 --%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 --%define CONFIG_FFRTMPHTTP_PROTOCOL 0 --%define CONFIG_FFTDNOIZ_FILTER 0 --%define CONFIG_FFTFILT_FILTER 0 --%define CONFIG_FFV1_DECODER 0 --%define CONFIG_FFV1_ENCODER 0 --%define CONFIG_FFVHUFF_DECODER 0 --%define CONFIG_FFVHUFF_ENCODER 0 --%define CONFIG_FFWAVESYNTH_DECODER 0 --%define CONFIG_FIC_DECODER 0 --%define CONFIG_FIELD_FILTER 0 --%define CONFIG_FIELDHINT_FILTER 0 --%define CONFIG_FIELDMATCH_FILTER 0 --%define CONFIG_FIELDORDER_FILTER 0 --%define CONFIG_FIFO_FILTER 0 --%define CONFIG_FIFO_MUXER 0 --%define CONFIG_FIFO_TEST_MUXER 0 --%define CONFIG_FILE_PROTOCOL 0 --%define CONFIG_FILLBORDERS_FILTER 0 --%define CONFIG_FILMSTRIP_DEMUXER 0 --%define CONFIG_FILMSTRIP_MUXER 0 --%define CONFIG_FILTERS 0 --%define CONFIG_FILTER_UNITS_BSF 0 --%define CONFIG_FIND_RECT_FILTER 0 --%define CONFIG_FIREQUALIZER_FILTER 0 --%define CONFIG_FITS_DECODER 0 --%define CONFIG_FITS_DEMUXER 0 --%define CONFIG_FITS_ENCODER 0 --%define CONFIG_FITS_MUXER 0 --%define CONFIG_FLAC_DEMUXER 0 --%define CONFIG_FLAC_ENCODER 0 --%define CONFIG_FLAC_MUXER 0 --%define CONFIG_FLAC_PARSER 0 --%define CONFIG_FLANGER_FILTER 0 --%define CONFIG_FLASHSV2_DECODER 0 --%define CONFIG_FLASHSV2_ENCODER 0 --%define CONFIG_FLASHSV_DECODER 0 --%define CONFIG_FLASHSV_ENCODER 0 --%define CONFIG_FLIC_DECODER 0 --%define CONFIG_FLIC_DEMUXER 0 --%define CONFIG_FLITE_FILTER 0 --%define CONFIG_FLOODFILL_FILTER 0 --%define CONFIG_FLV_DECODER 0 --%define CONFIG_FLV_DEMUXER 0 --%define CONFIG_FLV_ENCODER 0 --%define CONFIG_FLV_MUXER 0 --%define CONFIG_FMVC_DECODER 0 --%define CONFIG_FORMAT_FILTER 0 --%define CONFIG_FOURXM_DECODER 0 --%define CONFIG_FOURXM_DEMUXER 0 --%define CONFIG_FPS_FILTER 0 --%define CONFIG_FRAMECRC_MUXER 0 --%define CONFIG_FRAMEHASH_MUXER 0 --%define CONFIG_FRAMEMD5_MUXER 0 --%define CONFIG_FRAMEPACK_FILTER 0 --%define CONFIG_FRAMERATE_FILTER 0 --%define CONFIG_FRAMESTEP_FILTER 0 --%define CONFIG_FRAME_THREAD_ENCODER 0 --%define CONFIG_FRAPS_DECODER 0 --%define CONFIG_FREEZEDETECT_FILTER 0 --%define CONFIG_FREI0R_FILTER 0 --%define CONFIG_FREI0R_SRC_FILTER 0 --%define CONFIG_FRM_DEMUXER 0 --%define CONFIG_FRWU_DECODER 0 --%define CONFIG_FSB_DEMUXER 0 --%define CONFIG_FSPP_FILTER 0 --%define CONFIG_FTP_PROTOCOL 0 --%define CONFIG_G2M_DECODER 0 --%define CONFIG_G722_DEMUXER 0 --%define CONFIG_G722_MUXER 0 --%define CONFIG_G723_1_DECODER 0 --%define CONFIG_G723_1_DEMUXER 0 --%define CONFIG_G723_1_ENCODER 0 --%define CONFIG_G723_1_MUXER 0 --%define CONFIG_G723_1_PARSER 0 --%define CONFIG_G726_DEMUXER 0 --%define CONFIG_G726LE_DEMUXER 0 --%define CONFIG_G726LE_MUXER 0 --%define CONFIG_G726_MUXER 0 --%define CONFIG_G729_DECODER 0 --%define CONFIG_G729_DEMUXER 0 --%define CONFIG_G729_PARSER 0 --%define CONFIG_GBLUR_FILTER 0 --%define CONFIG_GDIGRAB_INDEV 0 --%define CONFIG_GDV_DECODER 0 --%define CONFIG_GDV_DEMUXER 0 --%define CONFIG_GENH_DEMUXER 0 --%define CONFIG_GEQ_FILTER 0 --%define CONFIG_GIF_DECODER 0 --%define CONFIG_GIF_DEMUXER 0 --%define CONFIG_GIF_ENCODER 0 --%define CONFIG_GIF_MUXER 0 --%define CONFIG_GIF_PARSER 0 --%define CONFIG_GOPHER_PROTOCOL 0 --%define CONFIG_GRADFUN_FILTER 0 --%define CONFIG_GRAPHMONITOR_FILTER 0 --%define CONFIG_GREMLIN_DPCM_DECODER 0 --%define CONFIG_GREYEDGE_FILTER 0 --%define CONFIG_GSM_DECODER 0 --%define CONFIG_GSM_DEMUXER 0 --%define CONFIG_GSM_MS_AT_DECODER 0 --%define CONFIG_GSM_MS_DECODER 0 --%define CONFIG_GSM_MUXER 0 --%define CONFIG_GSM_PARSER 0 --%define CONFIG_GXF_DEMUXER 0 --%define CONFIG_GXF_MUXER 0 --%define CONFIG_H261_DECODER 0 --%define CONFIG_H261_DEMUXER 0 --%define CONFIG_H261_ENCODER 0 --%define CONFIG_H261_MUXER 0 --%define CONFIG_H261_PARSER 0 --%define CONFIG_H263_DECODER 0 --%define CONFIG_H263_DEMUXER 0 --%define CONFIG_H263_ENCODER 0 --%define CONFIG_H263I_DECODER 0 --%define CONFIG_H263_MUXER 0 --%define CONFIG_H263_PARSER 0 --%define CONFIG_H263P_DECODER 0 --%define CONFIG_H263P_ENCODER 0 --%define CONFIG_H263_V4L2M2M_DECODER 0 --%define CONFIG_H263_V4L2M2M_ENCODER 0 --%define CONFIG_H263_VAAPI_HWACCEL 0 --%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 --%define CONFIG_H264_AMF_ENCODER 0 --%define CONFIG_H264_CRYSTALHD_DECODER 0 --%define CONFIG_H264_CUVID_DECODER 0 --%define CONFIG_H264_D3D11VA2_HWACCEL 0 --%define CONFIG_H264_D3D11VA_HWACCEL 0 --%define CONFIG_H264_DECODER 0 --%define CONFIG_H264_DEMUXER 0 --%define CONFIG_H264_DXVA2_HWACCEL 0 --%define CONFIG_H264_MEDIACODEC_DECODER 0 --%define CONFIG_H264_METADATA_BSF 0 --%define CONFIG_H264_MMAL_DECODER 0 --%define CONFIG_H264_MP4TOANNEXB_BSF 0 --%define CONFIG_H264_MUXER 0 --%define CONFIG_H264_NVDEC_HWACCEL 0 --%define CONFIG_H264_NVENC_ENCODER 0 --%define CONFIG_H264_OMX_ENCODER 0 --%define CONFIG_H264_PARSER 0 --%define CONFIG_H264_QSV_DECODER 0 --%define CONFIG_H264_QSV_ENCODER 0 --%define CONFIG_H264_REDUNDANT_PPS_BSF 0 --%define CONFIG_H264_RKMPP_DECODER 0 --%define CONFIG_H264_V4L2M2M_DECODER 0 --%define CONFIG_H264_V4L2M2M_ENCODER 0 --%define CONFIG_H264_VAAPI_ENCODER 0 --%define CONFIG_H264_VAAPI_HWACCEL 0 --%define CONFIG_H264_VDPAU_HWACCEL 0 --%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 --%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 --%define CONFIG_HAAS_FILTER 0 --%define CONFIG_HALDCLUT_FILTER 0 --%define CONFIG_HALDCLUTSRC_FILTER 0 --%define CONFIG_HAP_DECODER 0 --%define CONFIG_HAP_ENCODER 0 --%define CONFIG_HAPQA_EXTRACT_BSF 0 --%define CONFIG_HASH_MUXER 0 --%define CONFIG_HCOM_DECODER 0 --%define CONFIG_HCOM_DEMUXER 0 --%define CONFIG_HDCD_FILTER 0 --%define CONFIG_HDS_MUXER 0 --%define CONFIG_HEADPHONE_FILTER 0 --%define CONFIG_HEVC_AMF_ENCODER 0 --%define CONFIG_HEVC_CUVID_DECODER 0 --%define CONFIG_HEVC_D3D11VA2_HWACCEL 0 --%define CONFIG_HEVC_D3D11VA_HWACCEL 0 --%define CONFIG_HEVC_DECODER 0 --%define CONFIG_HEVC_DEMUXER 0 --%define CONFIG_HEVC_DXVA2_HWACCEL 0 --%define CONFIG_HEVC_MEDIACODEC_DECODER 0 --%define CONFIG_HEVC_METADATA_BSF 0 --%define CONFIG_HEVC_MP4TOANNEXB_BSF 0 --%define CONFIG_HEVC_MUXER 0 --%define CONFIG_HEVC_NVDEC_HWACCEL 0 --%define CONFIG_HEVC_NVENC_ENCODER 0 --%define CONFIG_HEVC_PARSER 0 --%define CONFIG_HEVC_QSV_DECODER 0 --%define CONFIG_HEVC_QSV_ENCODER 0 --%define CONFIG_HEVC_RKMPP_DECODER 0 --%define CONFIG_HEVC_V4L2M2M_DECODER 0 --%define CONFIG_HEVC_V4L2M2M_ENCODER 0 --%define CONFIG_HEVC_VAAPI_ENCODER 0 --%define CONFIG_HEVC_VAAPI_HWACCEL 0 --%define CONFIG_HEVC_VDPAU_HWACCEL 0 --%define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 --%define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 --%define CONFIG_HFLIP_FILTER 0 --%define CONFIG_HIGHPASS_FILTER 0 --%define CONFIG_HIGHSHELF_FILTER 0 --%define CONFIG_HILBERT_FILTER 0 --%define CONFIG_HISTEQ_FILTER 0 --%define CONFIG_HISTOGRAM_FILTER 0 --%define CONFIG_HLS_DEMUXER 0 --%define CONFIG_HLS_MUXER 0 --%define CONFIG_HLS_PROTOCOL 0 --%define CONFIG_HNM4_VIDEO_DECODER 0 --%define CONFIG_HNM_DEMUXER 0 --%define CONFIG_HQDN3D_FILTER 0 --%define CONFIG_HQ_HQA_DECODER 0 --%define CONFIG_HQX_DECODER 0 --%define CONFIG_HQX_FILTER 0 --%define CONFIG_HSTACK_FILTER 0 --%define CONFIG_HTTP_PROTOCOL 0 --%define CONFIG_HTTPPROXY_PROTOCOL 0 --%define CONFIG_HTTPS_PROTOCOL 0 --%define CONFIG_HUE_FILTER 0 --%define CONFIG_HUFFYUV_DECODER 0 --%define CONFIG_HUFFYUV_ENCODER 0 --%define CONFIG_HWACCELS 0 --%define CONFIG_HWDOWNLOAD_FILTER 0 --%define CONFIG_HWMAP_FILTER 0 --%define CONFIG_HWUPLOAD_CUDA_FILTER 0 --%define CONFIG_HWUPLOAD_FILTER 0 --%define CONFIG_HYMT_DECODER 0 --%define CONFIG_HYSTERESIS_FILTER 0 --%define CONFIG_IAC_DECODER 0 --%define CONFIG_ICECAST_PROTOCOL 0 --%define CONFIG_ICO_DEMUXER 0 --%define CONFIG_ICO_MUXER 0 --%define CONFIG_IDCIN_DECODER 0 --%define CONFIG_IDCIN_DEMUXER 0 --%define CONFIG_IDET_FILTER 0 --%define CONFIG_IDF_DECODER 0 --%define CONFIG_IDF_DEMUXER 0 --%define CONFIG_IEC61883_INDEV 0 --%define CONFIG_IFF_DEMUXER 0 --%define CONFIG_IFF_ILBM_DECODER 0 --%define CONFIG_IFV_DEMUXER 0 --%define CONFIG_ILBC_AT_DECODER 0 --%define CONFIG_ILBC_AT_ENCODER 0 --%define CONFIG_ILBC_DECODER 0 --%define CONFIG_ILBC_DEMUXER 0 --%define CONFIG_ILBC_MUXER 0 --%define CONFIG_IL_FILTER 0 --%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 --%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 --%define CONFIG_IMAGE2_DEMUXER 0 --%define CONFIG_IMAGE2_MUXER 0 --%define CONFIG_IMAGE2PIPE_DEMUXER 0 --%define CONFIG_IMAGE2PIPE_MUXER 0 --%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 --%define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 --%define CONFIG_IMC_DECODER 0 --%define CONFIG_IMM4_DECODER 0 --%define CONFIG_IMX_DUMP_HEADER_BSF 0 --%define CONFIG_INDEO2_DECODER 0 --%define CONFIG_INDEO3_DECODER 0 --%define CONFIG_INDEO4_DECODER 0 --%define CONFIG_INDEO5_DECODER 0 --%define CONFIG_INDEVS 0 --%define CONFIG_INFLATE_FILTER 0 --%define CONFIG_INGENIENT_DEMUXER 0 --%define CONFIG_INTERLACE_FILTER 0 --%define CONFIG_INTERLEAVE_FILTER 0 --%define CONFIG_INTERPLAY_ACM_DECODER 0 --%define CONFIG_INTERPLAY_DPCM_DECODER 0 --%define CONFIG_INTERPLAY_VIDEO_DECODER 0 --%define CONFIG_IPMOVIE_DEMUXER 0 --%define CONFIG_IPOD_MUXER 0 --%define CONFIG_IRCAM_DEMUXER 0 --%define CONFIG_IRCAM_MUXER 0 --%define CONFIG_ISMV_MUXER 0 --%define CONFIG_ISS_DEMUXER 0 --%define CONFIG_IV8_DEMUXER 0 --%define CONFIG_IVF_DEMUXER 0 --%define CONFIG_IVF_MUXER 0 --%define CONFIG_IVR_DEMUXER 0 --%define CONFIG_JACK_INDEV 0 --%define CONFIG_JACOSUB_DECODER 0 --%define CONFIG_JACOSUB_DEMUXER 0 --%define CONFIG_JACOSUB_MUXER 0 --%define CONFIG_JOIN_FILTER 0 --%define CONFIG_JPEG2000_DECODER 0 --%define CONFIG_JPEG2000_ENCODER 0 --%define CONFIG_JPEGLS_DECODER 0 --%define CONFIG_JPEGLS_ENCODER 0 --%define CONFIG_JV_DECODER 0 --%define CONFIG_JV_DEMUXER 0 --%define CONFIG_KERNDEINT_FILTER 0 --%define CONFIG_KGV1_DECODER 0 --%define CONFIG_KMSGRAB_INDEV 0 --%define CONFIG_KMVC_DECODER 0 --%define CONFIG_KUX_DEMUXER 0 --%define CONFIG_LADSPA_FILTER 0 --%define CONFIG_LAGARITH_DECODER 0 --%define CONFIG_LAGFUN_FILTER 0 --%define CONFIG_LATM_MUXER 0 --%define CONFIG_LAVFI_INDEV 0 --%define CONFIG_LENSCORRECTION_FILTER 0 --%define CONFIG_LENSFUN_FILTER 0 --%define CONFIG_LIBAOM_AV1_DECODER 0 --%define CONFIG_LIBAOM_AV1_ENCODER 0 --%define CONFIG_LIBARIBB24_DECODER 0 --%define CONFIG_LIBCDIO_INDEV 0 --%define CONFIG_LIBCELT_DECODER 0 --%define CONFIG_LIBCODEC2_DECODER 0 --%define CONFIG_LIBCODEC2_ENCODER 0 --%define CONFIG_LIBDAV1D_DECODER 0 --%define CONFIG_LIBDAVS2_DECODER 0 --%define CONFIG_LIBDC1394_INDEV 0 --%define CONFIG_LIBFDK_AAC_DECODER 0 --%define CONFIG_LIBFDK_AAC_ENCODER 0 --%define CONFIG_LIBGME_DEMUXER 0 --%define CONFIG_LIBGSM_DECODER 0 --%define CONFIG_LIBGSM_ENCODER 0 --%define CONFIG_LIBGSM_MS_DECODER 0 --%define CONFIG_LIBGSM_MS_ENCODER 0 --%define CONFIG_LIBILBC_DECODER 0 --%define CONFIG_LIBILBC_ENCODER 0 --%define CONFIG_LIBKVAZAAR_ENCODER 0 --%define CONFIG_LIBMODPLUG_DEMUXER 0 --%define CONFIG_LIBMP3LAME_ENCODER 0 --%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 --%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 --%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 --%define CONFIG_LIBOPENH264_DECODER 0 --%define CONFIG_LIBOPENH264_ENCODER 0 --%define CONFIG_LIBOPENJPEG_DECODER 0 --%define CONFIG_LIBOPENJPEG_ENCODER 0 --%define CONFIG_LIBOPENMPT_DEMUXER 0 --%define CONFIG_LIBOPUS_DECODER 0 --%define CONFIG_LIBOPUS_ENCODER 0 --%define CONFIG_LIBRSVG_DECODER 0 --%define CONFIG_LIBRTMPE_PROTOCOL 0 --%define CONFIG_LIBRTMP_PROTOCOL 0 --%define CONFIG_LIBRTMPS_PROTOCOL 0 --%define CONFIG_LIBRTMPTE_PROTOCOL 0 --%define CONFIG_LIBRTMPT_PROTOCOL 0 --%define CONFIG_LIBSHINE_ENCODER 0 --%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 --%define CONFIG_LIBSPEEX_DECODER 0 --%define CONFIG_LIBSPEEX_ENCODER 0 --%define CONFIG_LIBSRT_PROTOCOL 0 --%define CONFIG_LIBSSH_PROTOCOL 0 --%define CONFIG_LIBTHEORA_ENCODER 0 --%define CONFIG_LIBTWOLAME_ENCODER 0 --%define CONFIG_LIBVMAF_FILTER 0 --%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 --%define CONFIG_LIBVORBIS_DECODER 0 --%define CONFIG_LIBVORBIS_ENCODER 0 --%define CONFIG_LIBVPX_VP8_DECODER 0 --%define CONFIG_LIBVPX_VP8_ENCODER 0 --%define CONFIG_LIBVPX_VP9_DECODER 0 --%define CONFIG_LIBVPX_VP9_ENCODER 0 --%define CONFIG_LIBWAVPACK_ENCODER 0 --%define CONFIG_LIBWEBP_ANIM_ENCODER 0 --%define CONFIG_LIBWEBP_ENCODER 0 --%define CONFIG_LIBX262_ENCODER 0 --%define CONFIG_LIBX264_ENCODER 0 --%define CONFIG_LIBX264RGB_ENCODER 0 --%define CONFIG_LIBX265_ENCODER 0 --%define CONFIG_LIBXAVS2_ENCODER 0 --%define CONFIG_LIBXAVS_ENCODER 0 --%define CONFIG_LIBXVID_ENCODER 0 --%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 --%define CONFIG_LIFE_FILTER 0 --%define CONFIG_LIMITER_FILTER 0 --%define CONFIG_LIVE_FLV_DEMUXER 0 --%define CONFIG_LJPEG_ENCODER 0 --%define CONFIG_LMLM4_DEMUXER 0 --%define CONFIG_LOAS_DEMUXER 0 --%define CONFIG_LOCO_DECODER 0 --%define CONFIG_LOOP_FILTER 0 --%define CONFIG_LOUDNORM_FILTER 0 --%define CONFIG_LOWPASS_FILTER 0 --%define CONFIG_LOWSHELF_FILTER 0 --%define CONFIG_LRC_DEMUXER 0 --%define CONFIG_LRC_MUXER 0 --%define CONFIG_LSCR_DECODER 0 --%define CONFIG_LUMAKEY_FILTER 0 --%define CONFIG_LUT1D_FILTER 0 --%define CONFIG_LUT2_FILTER 0 --%define CONFIG_LUT3D_FILTER 0 --%define CONFIG_LUT_FILTER 0 --%define CONFIG_LUTRGB_FILTER 0 --%define CONFIG_LUTYUV_FILTER 0 --%define CONFIG_LV2_FILTER 0 --%define CONFIG_LVF_DEMUXER 0 --%define CONFIG_LXF_DEMUXER 0 --%define CONFIG_M101_DECODER 0 --%define CONFIG_M4V_DEMUXER 0 --%define CONFIG_M4V_MUXER 0 --%define CONFIG_MACE3_DECODER 0 --%define CONFIG_MACE6_DECODER 0 --%define CONFIG_MAGICYUV_DECODER 0 --%define CONFIG_MAGICYUV_ENCODER 0 --%define CONFIG_MANDELBROT_FILTER 0 --%define CONFIG_MASKEDCLAMP_FILTER 0 --%define CONFIG_MASKEDMERGE_FILTER 0 --%define CONFIG_MASKFUN_FILTER 0 --%define CONFIG_MATROSKA_AUDIO_MUXER 0 --%define CONFIG_MATROSKA_DEMUXER 0 --%define CONFIG_MATROSKA_MUXER 0 --%define CONFIG_MCDEINT_FILTER 0 --%define CONFIG_MCOMPAND_FILTER 0 --%define CONFIG_MD5_MUXER 0 --%define CONFIG_MD5_PROTOCOL 0 --%define CONFIG_MDEC_DECODER 0 --%define CONFIG_MERGEPLANES_FILTER 0 --%define CONFIG_MESTIMATE_FILTER 0 --%define CONFIG_METADATA_FILTER 0 --%define CONFIG_METASOUND_DECODER 0 --%define CONFIG_MGSTS_DEMUXER 0 --%define CONFIG_MICRODVD_DECODER 0 --%define CONFIG_MICRODVD_DEMUXER 0 --%define CONFIG_MICRODVD_MUXER 0 --%define CONFIG_MIDEQUALIZER_FILTER 0 --%define CONFIG_MIMIC_DECODER 0 --%define CONFIG_MINTERPOLATE_FILTER 0 --%define CONFIG_MIX_FILTER 0 --%define CONFIG_MJPEG_2000_DEMUXER 0 --%define CONFIG_MJPEG2JPEG_BSF 0 --%define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 --%define CONFIG_MJPEGB_DECODER 0 --%define CONFIG_MJPEG_CUVID_DECODER 0 --%define CONFIG_MJPEG_DECODER 0 --%define CONFIG_MJPEG_DEMUXER 0 --%define CONFIG_MJPEG_ENCODER 0 --%define CONFIG_MJPEG_MUXER 0 --%define CONFIG_MJPEG_NVDEC_HWACCEL 0 --%define CONFIG_MJPEG_PARSER 0 --%define CONFIG_MJPEG_QSV_ENCODER 0 --%define CONFIG_MJPEG_VAAPI_ENCODER 0 --%define CONFIG_MJPEG_VAAPI_HWACCEL 0 --%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 --%define CONFIG_MLP_DECODER 0 --%define CONFIG_MLP_DEMUXER 0 --%define CONFIG_MLP_ENCODER 0 --%define CONFIG_MLP_MUXER 0 --%define CONFIG_MLP_PARSER 0 --%define CONFIG_MLV_DEMUXER 0 --%define CONFIG_MM_DEMUXER 0 --%define CONFIG_MMF_DEMUXER 0 --%define CONFIG_MMF_MUXER 0 --%define CONFIG_MMSH_PROTOCOL 0 --%define CONFIG_MMST_PROTOCOL 0 --%define CONFIG_MMVIDEO_DECODER 0 --%define CONFIG_MOTIONPIXELS_DECODER 0 --%define CONFIG_MOV2TEXTSUB_BSF 0 --%define CONFIG_MOV_DEMUXER 0 --%define CONFIG_MOVIE_FILTER 0 --%define CONFIG_MOV_MUXER 0 --%define CONFIG_MOVTEXT_DECODER 0 --%define CONFIG_MOVTEXT_ENCODER 0 --%define CONFIG_MP1_AT_DECODER 0 --%define CONFIG_MP1_DECODER 0 --%define CONFIG_MP1FLOAT_DECODER 0 --%define CONFIG_MP2_AT_DECODER 0 --%define CONFIG_MP2_DECODER 0 --%define CONFIG_MP2_ENCODER 0 --%define CONFIG_MP2FIXED_ENCODER 0 --%define CONFIG_MP2FLOAT_DECODER 0 --%define CONFIG_MP2_MUXER 0 --%define CONFIG_MP3ADU_DECODER 0 --%define CONFIG_MP3ADUFLOAT_DECODER 0 --%define CONFIG_MP3_AT_DECODER 0 --%define CONFIG_MP3_DEMUXER 0 --%define CONFIG_MP3FLOAT_DECODER 0 --%define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 --%define CONFIG_MP3_MUXER 0 --%define CONFIG_MP3ON4_DECODER 0 --%define CONFIG_MP3ON4FLOAT_DECODER 0 --%define CONFIG_MP4_MUXER 0 --%define CONFIG_MPC7_DECODER 0 --%define CONFIG_MPC8_DECODER 0 --%define CONFIG_MPC8_DEMUXER 0 --%define CONFIG_MPC_DEMUXER 0 --%define CONFIG_MPDECIMATE_FILTER 0 --%define CONFIG_MPEG1_CUVID_DECODER 0 --%define CONFIG_MPEG1_NVDEC_HWACCEL 0 --%define CONFIG_MPEG1SYSTEM_MUXER 0 --%define CONFIG_MPEG1_V4L2M2M_DECODER 0 --%define CONFIG_MPEG1VCD_MUXER 0 --%define CONFIG_MPEG1_VDPAU_HWACCEL 0 --%define CONFIG_MPEG1VIDEO_DECODER 0 --%define CONFIG_MPEG1VIDEO_ENCODER 0 --%define CONFIG_MPEG1VIDEO_MUXER 0 --%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 --%define CONFIG_MPEG1_XVMC_HWACCEL 0 --%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 --%define CONFIG_MPEG2_CUVID_DECODER 0 --%define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 --%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 --%define CONFIG_MPEG2DVD_MUXER 0 --%define CONFIG_MPEG2_DXVA2_HWACCEL 0 --%define CONFIG_MPEG2_MEDIACODEC_DECODER 0 --%define CONFIG_MPEG2_METADATA_BSF 0 --%define CONFIG_MPEG2_MMAL_DECODER 0 --%define CONFIG_MPEG2_NVDEC_HWACCEL 0 --%define CONFIG_MPEG2_QSV_DECODER 0 --%define CONFIG_MPEG2_QSV_ENCODER 0 --%define CONFIG_MPEG2SVCD_MUXER 0 --%define CONFIG_MPEG2_V4L2M2M_DECODER 0 --%define CONFIG_MPEG2_VAAPI_ENCODER 0 --%define CONFIG_MPEG2_VAAPI_HWACCEL 0 --%define CONFIG_MPEG2_VDPAU_HWACCEL 0 --%define CONFIG_MPEG2VIDEO_DECODER 0 --%define CONFIG_MPEG2VIDEO_ENCODER 0 --%define CONFIG_MPEG2VIDEO_MUXER 0 --%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 --%define CONFIG_MPEG2VOB_MUXER 0 --%define CONFIG_MPEG2_XVMC_HWACCEL 0 --%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 --%define CONFIG_MPEG4_CUVID_DECODER 0 --%define CONFIG_MPEG4_DECODER 0 --%define CONFIG_MPEG4_ENCODER 0 --%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 --%define CONFIG_MPEG4_MMAL_DECODER 0 --%define CONFIG_MPEG4_NVDEC_HWACCEL 0 --%define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 --%define CONFIG_MPEG4_V4L2M2M_DECODER 0 --%define CONFIG_MPEG4_V4L2M2M_ENCODER 0 --%define CONFIG_MPEG4_VAAPI_HWACCEL 0 --%define CONFIG_MPEG4_VDPAU_HWACCEL 0 --%define CONFIG_MPEG4VIDEO_PARSER 0 --%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 --%define CONFIG_MPEGAUDIO_PARSER 0 --%define CONFIG_MPEGPS_DEMUXER 0 --%define CONFIG_MPEGTS_DEMUXER 0 --%define CONFIG_MPEGTS_MUXER 0 --%define CONFIG_MPEGTSRAW_DEMUXER 0 --%define CONFIG_MPEGVIDEO_DECODER 0 --%define CONFIG_MPEGVIDEO_DEMUXER 0 --%define CONFIG_MPEGVIDEO_PARSER 0 --%define CONFIG_MPJPEG_DEMUXER 0 --%define CONFIG_MPJPEG_MUXER 0 --%define CONFIG_MPL2_DECODER 0 --%define CONFIG_MPL2_DEMUXER 0 --%define CONFIG_MPSUB_DEMUXER 0 --%define CONFIG_MPTESTSRC_FILTER 0 --%define CONFIG_MSA1_DECODER 0 --%define CONFIG_MSCC_DECODER 0 --%define CONFIG_MSF_DEMUXER 0 --%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 --%define CONFIG_MSMPEG4V1_DECODER 0 --%define CONFIG_MSMPEG4V2_DECODER 0 --%define CONFIG_MSMPEG4V2_ENCODER 0 --%define CONFIG_MSMPEG4V3_DECODER 0 --%define CONFIG_MSMPEG4V3_ENCODER 0 --%define CONFIG_MSNWC_TCP_DEMUXER 0 --%define CONFIG_MSRLE_DECODER 0 --%define CONFIG_MSS1_DECODER 0 --%define CONFIG_MSS2_DECODER 0 --%define CONFIG_MSVIDEO1_DECODER 0 --%define CONFIG_MSVIDEO1_ENCODER 0 --%define CONFIG_MSZH_DECODER 0 --%define CONFIG_MTAF_DEMUXER 0 --%define CONFIG_MTS2_DECODER 0 --%define CONFIG_MTV_DEMUXER 0 --%define CONFIG_MUSX_DEMUXER 0 --%define CONFIG_MUXERS 0 --%define CONFIG_MVC1_DECODER 0 --%define CONFIG_MVC2_DECODER 0 --%define CONFIG_MV_DEMUXER 0 --%define CONFIG_MVI_DEMUXER 0 --%define CONFIG_MWSC_DECODER 0 --%define CONFIG_MXF_D10_MUXER 0 --%define CONFIG_MXF_DEMUXER 0 --%define CONFIG_MXF_MUXER 0 --%define CONFIG_MXF_OPATOM_MUXER 0 --%define CONFIG_MXG_DEMUXER 0 --%define CONFIG_MXPEG_DECODER 0 --%define CONFIG_NC_DEMUXER 0 --%define CONFIG_NEGATE_FILTER 0 --%define CONFIG_NELLYMOSER_DECODER 0 --%define CONFIG_NELLYMOSER_ENCODER 0 --%define CONFIG_NISTSPHERE_DEMUXER 0 --%define CONFIG_NLMEANS_FILTER 0 --%define CONFIG_NLMEANS_OPENCL_FILTER 0 --%define CONFIG_NNEDI_FILTER 0 --%define CONFIG_NOFORMAT_FILTER 0 --%define CONFIG_NOISE_BSF 0 --%define CONFIG_NOISE_FILTER 0 --%define CONFIG_NORMALIZE_FILTER 0 --%define CONFIG_NSP_DEMUXER 0 --%define CONFIG_NSV_DEMUXER 0 --%define CONFIG_NULL_FILTER 0 --%define CONFIG_NULL_MUXER 0 --%define CONFIG_NULLSINK_FILTER 0 --%define CONFIG_NULLSRC_FILTER 0 --%define CONFIG_NUT_DEMUXER 0 --%define CONFIG_NUT_MUXER 0 --%define CONFIG_NUV_DECODER 0 --%define CONFIG_NUV_DEMUXER 0 --%define CONFIG_NVENC_ENCODER 0 --%define CONFIG_NVENC_H264_ENCODER 0 --%define CONFIG_NVENC_HEVC_ENCODER 0 --%define CONFIG_OCR_FILTER 0 --%define CONFIG_OCV_FILTER 0 --%define CONFIG_OGA_MUXER 0 --%define CONFIG_OGG_DEMUXER 0 --%define CONFIG_OGG_MUXER 0 --%define CONFIG_OGV_MUXER 0 --%define CONFIG_OMA_DEMUXER 0 --%define CONFIG_OMA_MUXER 0 --%define CONFIG_ON2AVC_DECODER 0 --%define CONFIG_OPENAL_INDEV 0 --%define CONFIG_OPENCLSRC_FILTER 0 --%define CONFIG_OPENGL_OUTDEV 0 --%define CONFIG_OPUS_DECODER 0 --%define CONFIG_OPUS_ENCODER 0 --%define CONFIG_OPUS_MUXER 0 --%define CONFIG_OPUS_PARSER 0 --%define CONFIG_OSCILLOSCOPE_FILTER 0 --%define CONFIG_OSS_INDEV 0 --%define CONFIG_OSS_OUTDEV 0 --%define CONFIG_OUTDEVS 0 --%define CONFIG_OVERLAY_FILTER 0 --%define CONFIG_OVERLAY_OPENCL_FILTER 0 --%define CONFIG_OVERLAY_QSV_FILTER 0 --%define CONFIG_OWDENOISE_FILTER 0 --%define CONFIG_PAD_FILTER 0 --%define CONFIG_PAF_AUDIO_DECODER 0 --%define CONFIG_PAF_DEMUXER 0 --%define CONFIG_PAF_VIDEO_DECODER 0 --%define CONFIG_PAL100BARS_FILTER 0 --%define CONFIG_PAL75BARS_FILTER 0 --%define CONFIG_PALETTEGEN_FILTER 0 --%define CONFIG_PALETTEUSE_FILTER 0 --%define CONFIG_PAM_DECODER 0 --%define CONFIG_PAM_ENCODER 0 --%define CONFIG_PAN_FILTER 0 --%define CONFIG_PBM_DECODER 0 --%define CONFIG_PBM_ENCODER 0 --%define CONFIG_PCM_ALAW_AT_DECODER 0 --%define CONFIG_PCM_ALAW_AT_ENCODER 0 --%define CONFIG_PCM_ALAW_DECODER 0 --%define CONFIG_PCM_ALAW_DEMUXER 0 --%define CONFIG_PCM_ALAW_ENCODER 0 --%define CONFIG_PCM_ALAW_MUXER 0 --%define CONFIG_PCM_BLURAY_DECODER 0 --%define CONFIG_PCM_DVD_DECODER 0 --%define CONFIG_PCM_DVD_ENCODER 0 --%define CONFIG_PCM_F16LE_DECODER 0 --%define CONFIG_PCM_F24LE_DECODER 0 --%define CONFIG_PCM_F32BE_DECODER 0 --%define CONFIG_PCM_F32BE_DEMUXER 0 --%define CONFIG_PCM_F32BE_ENCODER 0 --%define CONFIG_PCM_F32BE_MUXER 0 --%define CONFIG_PCM_F32LE_DECODER 0 --%define CONFIG_PCM_F32LE_DEMUXER 0 --%define CONFIG_PCM_F32LE_ENCODER 0 --%define CONFIG_PCM_F32LE_MUXER 0 --%define CONFIG_PCM_F64BE_DECODER 0 --%define CONFIG_PCM_F64BE_DEMUXER 0 --%define CONFIG_PCM_F64BE_ENCODER 0 --%define CONFIG_PCM_F64BE_MUXER 0 --%define CONFIG_PCM_F64LE_DECODER 0 --%define CONFIG_PCM_F64LE_DEMUXER 0 --%define CONFIG_PCM_F64LE_ENCODER 0 --%define CONFIG_PCM_F64LE_MUXER 0 --%define CONFIG_PCM_LXF_DECODER 0 --%define CONFIG_PCM_MULAW_AT_DECODER 0 --%define CONFIG_PCM_MULAW_AT_ENCODER 0 --%define CONFIG_PCM_MULAW_DECODER 0 --%define CONFIG_PCM_MULAW_DEMUXER 0 --%define CONFIG_PCM_MULAW_ENCODER 0 --%define CONFIG_PCM_MULAW_MUXER 0 --%define CONFIG_PCM_S16BE_DECODER 0 --%define CONFIG_PCM_S16BE_DEMUXER 0 --%define CONFIG_PCM_S16BE_ENCODER 0 --%define CONFIG_PCM_S16BE_MUXER 0 --%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 --%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 --%define CONFIG_PCM_S16LE_DECODER 0 --%define CONFIG_PCM_S16LE_DEMUXER 0 --%define CONFIG_PCM_S16LE_ENCODER 0 --%define CONFIG_PCM_S16LE_MUXER 0 --%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 --%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 --%define CONFIG_PCM_S24BE_DECODER 0 --%define CONFIG_PCM_S24BE_DEMUXER 0 --%define CONFIG_PCM_S24BE_ENCODER 0 --%define CONFIG_PCM_S24BE_MUXER 0 --%define CONFIG_PCM_S24DAUD_DECODER 0 --%define CONFIG_PCM_S24DAUD_ENCODER 0 --%define CONFIG_PCM_S24LE_DECODER 0 --%define CONFIG_PCM_S24LE_DEMUXER 0 --%define CONFIG_PCM_S24LE_ENCODER 0 --%define CONFIG_PCM_S24LE_MUXER 0 --%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 --%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 --%define CONFIG_PCM_S32BE_DECODER 0 --%define CONFIG_PCM_S32BE_DEMUXER 0 --%define CONFIG_PCM_S32BE_ENCODER 0 --%define CONFIG_PCM_S32BE_MUXER 0 --%define CONFIG_PCM_S32LE_DECODER 0 --%define CONFIG_PCM_S32LE_DEMUXER 0 --%define CONFIG_PCM_S32LE_ENCODER 0 --%define CONFIG_PCM_S32LE_MUXER 0 --%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 --%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 --%define CONFIG_PCM_S64BE_DECODER 0 --%define CONFIG_PCM_S64BE_ENCODER 0 --%define CONFIG_PCM_S64LE_DECODER 0 --%define CONFIG_PCM_S64LE_ENCODER 0 --%define CONFIG_PCM_S8_DECODER 0 --%define CONFIG_PCM_S8_DEMUXER 0 --%define CONFIG_PCM_S8_ENCODER 0 --%define CONFIG_PCM_S8_MUXER 0 --%define CONFIG_PCM_S8_PLANAR_DECODER 0 --%define CONFIG_PCM_S8_PLANAR_ENCODER 0 --%define CONFIG_PCM_U16BE_DECODER 0 --%define CONFIG_PCM_U16BE_DEMUXER 0 --%define CONFIG_PCM_U16BE_ENCODER 0 --%define CONFIG_PCM_U16BE_MUXER 0 --%define CONFIG_PCM_U16LE_DECODER 0 --%define CONFIG_PCM_U16LE_DEMUXER 0 --%define CONFIG_PCM_U16LE_ENCODER 0 --%define CONFIG_PCM_U16LE_MUXER 0 --%define CONFIG_PCM_U24BE_DECODER 0 --%define CONFIG_PCM_U24BE_DEMUXER 0 --%define CONFIG_PCM_U24BE_ENCODER 0 --%define CONFIG_PCM_U24BE_MUXER 0 --%define CONFIG_PCM_U24LE_DECODER 0 --%define CONFIG_PCM_U24LE_DEMUXER 0 --%define CONFIG_PCM_U24LE_ENCODER 0 --%define CONFIG_PCM_U24LE_MUXER 0 --%define CONFIG_PCM_U32BE_DECODER 0 --%define CONFIG_PCM_U32BE_DEMUXER 0 --%define CONFIG_PCM_U32BE_ENCODER 0 --%define CONFIG_PCM_U32BE_MUXER 0 --%define CONFIG_PCM_U32LE_DECODER 0 --%define CONFIG_PCM_U32LE_DEMUXER 0 --%define CONFIG_PCM_U32LE_ENCODER 0 --%define CONFIG_PCM_U32LE_MUXER 0 --%define CONFIG_PCM_U8_DECODER 0 --%define CONFIG_PCM_U8_DEMUXER 0 --%define CONFIG_PCM_U8_ENCODER 0 --%define CONFIG_PCM_U8_MUXER 0 --%define CONFIG_PCM_VIDC_DECODER 0 --%define CONFIG_PCM_VIDC_DEMUXER 0 --%define CONFIG_PCM_VIDC_ENCODER 0 --%define CONFIG_PCM_VIDC_MUXER 0 --%define CONFIG_PCM_ZORK_DECODER 0 --%define CONFIG_PCX_DECODER 0 --%define CONFIG_PCX_ENCODER 0 --%define CONFIG_PERMS_FILTER 0 --%define CONFIG_PERSPECTIVE_FILTER 0 --%define CONFIG_PGM_DECODER 0 --%define CONFIG_PGM_ENCODER 0 --%define CONFIG_PGMYUV_DECODER 0 --%define CONFIG_PGMYUV_ENCODER 0 --%define CONFIG_PGSSUB_DECODER 0 --%define CONFIG_PHASE_FILTER 0 --%define CONFIG_PICTOR_DECODER 0 --%define CONFIG_PIPE_PROTOCOL 0 --%define CONFIG_PIXDESCTEST_FILTER 0 --%define CONFIG_PIXLET_DECODER 0 --%define CONFIG_PIXSCOPE_FILTER 0 --%define CONFIG_PJS_DECODER 0 --%define CONFIG_PJS_DEMUXER 0 --%define CONFIG_PMP_DEMUXER 0 --%define CONFIG_PNG_DECODER 0 --%define CONFIG_PNG_ENCODER 0 --%define CONFIG_PNG_PARSER 0 --%define CONFIG_PNM_PARSER 0 --%define CONFIG_PP7_FILTER 0 --%define CONFIG_PP_FILTER 0 --%define CONFIG_PPM_DECODER 0 --%define CONFIG_PPM_ENCODER 0 --%define CONFIG_PREMULTIPLY_FILTER 0 --%define CONFIG_PREWITT_FILTER 0 --%define CONFIG_PREWITT_OPENCL_FILTER 0 --%define CONFIG_PROCAMP_VAAPI_FILTER 0 --%define CONFIG_PROGRAM_OPENCL_FILTER 0 --%define CONFIG_PROMPEG_PROTOCOL 0 --%define CONFIG_PRORES_AW_ENCODER 0 --%define CONFIG_PRORES_DECODER 0 --%define CONFIG_PRORES_ENCODER 0 --%define CONFIG_PRORES_KS_ENCODER 0 --%define CONFIG_PRORES_METADATA_BSF 0 --%define CONFIG_PROSUMER_DECODER 0 --%define CONFIG_PROTOCOLS 0 --%define CONFIG_PSD_DECODER 0 --%define CONFIG_PSEUDOCOLOR_FILTER 0 --%define CONFIG_PSNR_FILTER 0 --%define CONFIG_PSP_MUXER 0 --%define CONFIG_PTX_DECODER 0 --%define CONFIG_PULLUP_FILTER 0 --%define CONFIG_PULSE_INDEV 0 --%define CONFIG_PULSE_OUTDEV 0 --%define CONFIG_PVA_DEMUXER 0 --%define CONFIG_PVF_DEMUXER 0 --%define CONFIG_QCELP_DECODER 0 --%define CONFIG_QCP_DEMUXER 0 --%define CONFIG_QDM2_AT_DECODER 0 --%define CONFIG_QDM2_DECODER 0 --%define CONFIG_QDMC_AT_DECODER 0 --%define CONFIG_QDMC_DECODER 0 --%define CONFIG_QDRAW_DECODER 0 --%define CONFIG_QPEG_DECODER 0 --%define CONFIG_QP_FILTER 0 --%define CONFIG_QTRLE_DECODER 0 --%define CONFIG_QTRLE_ENCODER 0 --%define CONFIG_R10K_DECODER 0 --%define CONFIG_R10K_ENCODER 0 --%define CONFIG_R210_DECODER 0 --%define CONFIG_R210_ENCODER 0 --%define CONFIG_R3D_DEMUXER 0 --%define CONFIG_RA_144_DECODER 0 --%define CONFIG_RA_144_ENCODER 0 --%define CONFIG_RA_288_DECODER 0 --%define CONFIG_RALF_DECODER 0 --%define CONFIG_RANDOM_FILTER 0 --%define CONFIG_RASC_DECODER 0 --%define CONFIG_RAWVIDEO_DECODER 0 --%define CONFIG_RAWVIDEO_DEMUXER 0 --%define CONFIG_RAWVIDEO_ENCODER 0 --%define CONFIG_RAWVIDEO_MUXER 0 --%define CONFIG_READEIA608_FILTER 0 --%define CONFIG_READVITC_FILTER 0 --%define CONFIG_REALTEXT_DECODER 0 --%define CONFIG_REALTEXT_DEMUXER 0 --%define CONFIG_REALTIME_FILTER 0 --%define CONFIG_REDSPARK_DEMUXER 0 --%define CONFIG_REMAP_FILTER 0 --%define CONFIG_REMOVE_EXTRADATA_BSF 0 --%define CONFIG_REMOVEGRAIN_FILTER 0 --%define CONFIG_REMOVELOGO_FILTER 0 --%define CONFIG_REPEATFIELDS_FILTER 0 --%define CONFIG_REPLAYGAIN_FILTER 0 --%define CONFIG_RESAMPLE_FILTER 0 --%define CONFIG_REVERSE_FILTER 0 --%define CONFIG_RGBASHIFT_FILTER 0 --%define CONFIG_RGBTESTSRC_FILTER 0 --%define CONFIG_RL2_DECODER 0 --%define CONFIG_RL2_DEMUXER 0 --%define CONFIG_RM_DEMUXER 0 --%define CONFIG_RM_MUXER 0 --%define CONFIG_ROBERTS_FILTER 0 --%define CONFIG_ROBERTS_OPENCL_FILTER 0 --%define CONFIG_ROQ_DECODER 0 --%define CONFIG_ROQ_DEMUXER 0 --%define CONFIG_ROQ_DPCM_DECODER 0 --%define CONFIG_ROQ_DPCM_ENCODER 0 --%define CONFIG_ROQ_ENCODER 0 --%define CONFIG_ROQ_MUXER 0 --%define CONFIG_ROTATE_FILTER 0 --%define CONFIG_RPL_DEMUXER 0 --%define CONFIG_RPZA_DECODER 0 --%define CONFIG_RSCC_DECODER 0 --%define CONFIG_RSD_DEMUXER 0 --%define CONFIG_RSO_DEMUXER 0 --%define CONFIG_RSO_MUXER 0 --%define CONFIG_RTMPE_PROTOCOL 0 --%define CONFIG_RTMP_PROTOCOL 0 --%define CONFIG_RTMPS_PROTOCOL 0 --%define CONFIG_RTMPTE_PROTOCOL 0 --%define CONFIG_RTMPT_PROTOCOL 0 --%define CONFIG_RTMPTS_PROTOCOL 0 --%define CONFIG_RTP_DEMUXER 0 --%define CONFIG_RTP_MPEGTS_MUXER 0 --%define CONFIG_RTP_MUXER 0 --%define CONFIG_RTP_PROTOCOL 0 --%define CONFIG_RTSP_DEMUXER 0 --%define CONFIG_RTSP_MUXER 0 --%define CONFIG_RUBBERBAND_FILTER 0 --%define CONFIG_RV10_DECODER 0 --%define CONFIG_RV10_ENCODER 0 --%define CONFIG_RV20_DECODER 0 --%define CONFIG_RV20_ENCODER 0 --%define CONFIG_RV30_DECODER 0 --%define CONFIG_RV30_PARSER 0 --%define CONFIG_RV40_DECODER 0 --%define CONFIG_RV40_PARSER 0 --%define CONFIG_S302M_DECODER 0 --%define CONFIG_S302M_ENCODER 0 --%define CONFIG_S337M_DEMUXER 0 --%define CONFIG_SAB_FILTER 0 --%define CONFIG_SAMI_DECODER 0 --%define CONFIG_SAMI_DEMUXER 0 --%define CONFIG_SANM_DECODER 0 --%define CONFIG_SAP_DEMUXER 0 --%define CONFIG_SAP_MUXER 0 --%define CONFIG_SBC_DECODER 0 --%define CONFIG_SBC_DEMUXER 0 --%define CONFIG_SBC_ENCODER 0 --%define CONFIG_SBC_MUXER 0 --%define CONFIG_SBC_PARSER 0 --%define CONFIG_SBG_DEMUXER 0 --%define CONFIG_SCALE2REF_FILTER 0 --%define CONFIG_SCALE_CUDA_FILTER 0 --%define CONFIG_SCALE_FILTER 0 --%define CONFIG_SCALE_NPP_FILTER 0 --%define CONFIG_SCALE_QSV_FILTER 0 --%define CONFIG_SCALE_VAAPI_FILTER 0 --%define CONFIG_SCC_DEMUXER 0 --%define CONFIG_SCC_MUXER 0 --%define CONFIG_SCPR_DECODER 0 --%define CONFIG_SCREENPRESSO_DECODER 0 --%define CONFIG_SCTP_PROTOCOL 0 --%define CONFIG_SDL2_OUTDEV 0 --%define CONFIG_SDP_DEMUXER 0 --%define CONFIG_SDR2_DEMUXER 0 --%define CONFIG_SDS_DEMUXER 0 --%define CONFIG_SDX2_DPCM_DECODER 0 --%define CONFIG_SDX_DEMUXER 0 --%define CONFIG_SEGAFILM_DEMUXER 0 --%define CONFIG_SEGAFILM_MUXER 0 --%define CONFIG_SEGMENT_MUXER 0 --%define CONFIG_SELECT_FILTER 0 --%define CONFIG_SELECTIVECOLOR_FILTER 0 --%define CONFIG_SENDCMD_FILTER 0 --%define CONFIG_SEPARATEFIELDS_FILTER 0 --%define CONFIG_SER_DEMUXER 0 --%define CONFIG_SETDAR_FILTER 0 --%define CONFIG_SETFIELD_FILTER 0 --%define CONFIG_SETPARAMS_FILTER 0 --%define CONFIG_SETPTS_FILTER 0 --%define CONFIG_SETRANGE_FILTER 0 --%define CONFIG_SETSAR_FILTER 0 --%define CONFIG_SETTB_FILTER 0 --%define CONFIG_SGI_DECODER 0 --%define CONFIG_SGI_ENCODER 0 --%define CONFIG_SGIRLE_DECODER 0 --%define CONFIG_SHARPNESS_VAAPI_FILTER 0 --%define CONFIG_SHEERVIDEO_DECODER 0 --%define CONFIG_SHORTEN_DECODER 0 --%define CONFIG_SHORTEN_DEMUXER 0 --%define CONFIG_SHOWCQT_FILTER 0 --%define CONFIG_SHOWFREQS_FILTER 0 --%define CONFIG_SHOWINFO_FILTER 0 --%define CONFIG_SHOWPALETTE_FILTER 0 --%define CONFIG_SHOWSPATIAL_FILTER 0 --%define CONFIG_SHOWSPECTRUM_FILTER 0 --%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 --%define CONFIG_SHOWVOLUME_FILTER 0 --%define CONFIG_SHOWWAVES_FILTER 0 --%define CONFIG_SHOWWAVESPIC_FILTER 0 --%define CONFIG_SHUFFLEFRAMES_FILTER 0 --%define CONFIG_SHUFFLEPLANES_FILTER 0 --%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 --%define CONFIG_SIDECHAINGATE_FILTER 0 --%define CONFIG_SIDEDATA_FILTER 0 --%define CONFIG_SIFF_DEMUXER 0 --%define CONFIG_SIGNALSTATS_FILTER 0 --%define CONFIG_SIGNATURE_FILTER 0 --%define CONFIG_SILENCEDETECT_FILTER 0 --%define CONFIG_SILENCEREMOVE_FILTER 0 --%define CONFIG_SINC_FILTER 0 --%define CONFIG_SINE_FILTER 0 --%define CONFIG_SINGLEJPEG_MUXER 0 --%define CONFIG_SIPR_DECODER 0 --%define CONFIG_SIPR_PARSER 0 --%define CONFIG_SLN_DEMUXER 0 --%define CONFIG_SMACKAUD_DECODER 0 --%define CONFIG_SMACKER_DECODER 0 --%define CONFIG_SMACKER_DEMUXER 0 --%define CONFIG_SMARTBLUR_FILTER 0 --%define CONFIG_SMC_DECODER 0 --%define CONFIG_SMJPEG_DEMUXER 0 --%define CONFIG_SMJPEG_MUXER 0 --%define CONFIG_SMOOTHSTREAMING_MUXER 0 --%define CONFIG_SMPTEBARS_FILTER 0 --%define CONFIG_SMPTEHDBARS_FILTER 0 --%define CONFIG_SMUSH_DEMUXER 0 --%define CONFIG_SMVJPEG_DECODER 0 --%define CONFIG_SNDIO_INDEV 0 --%define CONFIG_SNDIO_OUTDEV 0 --%define CONFIG_SNOW_DECODER 0 --%define CONFIG_SNOW_ENCODER 0 --%define CONFIG_SOBEL_FILTER 0 --%define CONFIG_SOBEL_OPENCL_FILTER 0 --%define CONFIG_SOFALIZER_FILTER 0 --%define CONFIG_SOL_DEMUXER 0 --%define CONFIG_SOL_DPCM_DECODER 0 --%define CONFIG_SONIC_DECODER 0 --%define CONFIG_SONIC_ENCODER 0 --%define CONFIG_SONIC_LS_ENCODER 0 --%define CONFIG_SOX_DEMUXER 0 --%define CONFIG_SOX_MUXER 0 --%define CONFIG_SP5X_DECODER 0 --%define CONFIG_SPDIF_DEMUXER 0 --%define CONFIG_SPDIF_MUXER 0 --%define CONFIG_SPECTRUMSYNTH_FILTER 0 --%define CONFIG_SPEEDHQ_DECODER 0 --%define CONFIG_SPLIT_FILTER 0 --%define CONFIG_SPP_FILTER 0 --%define CONFIG_SPX_MUXER 0 --%define CONFIG_SR_FILTER 0 --%define CONFIG_SRGC_DECODER 0 --%define CONFIG_SRT_DECODER 0 --%define CONFIG_SRT_DEMUXER 0 --%define CONFIG_SRT_ENCODER 0 --%define CONFIG_SRT_MUXER 0 --%define CONFIG_SRTP_PROTOCOL 0 --%define CONFIG_SSA_DECODER 0 --%define CONFIG_SSA_ENCODER 0 --%define CONFIG_SSIM_FILTER 0 --%define CONFIG_STEREO3D_FILTER 0 --%define CONFIG_STEREOTOOLS_FILTER 0 --%define CONFIG_STEREOWIDEN_FILTER 0 --%define CONFIG_STL_DECODER 0 --%define CONFIG_STL_DEMUXER 0 --%define CONFIG_STR_DEMUXER 0 --%define CONFIG_STREAM_SEGMENT_MUXER 0 --%define CONFIG_STREAMSELECT_FILTER 0 --%define CONFIG_SUBFILE_PROTOCOL 0 --%define CONFIG_SUBRIP_DECODER 0 --%define CONFIG_SUBRIP_ENCODER 0 --%define CONFIG_SUBTITLES_FILTER 0 --%define CONFIG_SUBVIEWER1_DECODER 0 --%define CONFIG_SUBVIEWER1_DEMUXER 0 --%define CONFIG_SUBVIEWER_DECODER 0 --%define CONFIG_SUBVIEWER_DEMUXER 0 --%define CONFIG_SUNRAST_DECODER 0 --%define CONFIG_SUNRAST_ENCODER 0 --%define CONFIG_SUP_DEMUXER 0 --%define CONFIG_SUPER2XSAI_FILTER 0 --%define CONFIG_SUPEREQUALIZER_FILTER 0 --%define CONFIG_SUP_MUXER 0 --%define CONFIG_SURROUND_FILTER 0 --%define CONFIG_SVAG_DEMUXER 0 --%define CONFIG_SVQ1_DECODER 0 --%define CONFIG_SVQ1_ENCODER 0 --%define CONFIG_SVQ3_DECODER 0 --%define CONFIG_SWAPRECT_FILTER 0 --%define CONFIG_SWAPUV_FILTER 0 --%define CONFIG_SWF_DEMUXER 0 --%define CONFIG_SWF_MUXER 0 --%define CONFIG_TAK_DECODER 0 --%define CONFIG_TAK_DEMUXER 0 --%define CONFIG_TAK_PARSER 0 --%define CONFIG_TARGA_DECODER 0 --%define CONFIG_TARGA_ENCODER 0 --%define CONFIG_TARGA_Y216_DECODER 0 --%define CONFIG_TBLEND_FILTER 0 --%define CONFIG_TCP_PROTOCOL 0 --%define CONFIG_TDSC_DECODER 0 --%define CONFIG_TEDCAPTIONS_DEMUXER 0 --%define CONFIG_TEE_MUXER 0 --%define CONFIG_TEE_PROTOCOL 0 --%define CONFIG_TELECINE_FILTER 0 --%define CONFIG_TESTSRC2_FILTER 0 --%define CONFIG_TESTSRC_FILTER 0 --%define CONFIG_TEXT2MOVSUB_BSF 0 --%define CONFIG_TEXT_DECODER 0 --%define CONFIG_TEXT_ENCODER 0 --%define CONFIG_TG2_MUXER 0 --%define CONFIG_TGP_MUXER 0 --%define CONFIG_THEORA_DECODER 0 --%define CONFIG_THP_DECODER 0 --%define CONFIG_THP_DEMUXER 0 --%define CONFIG_THREEDOSTR_DEMUXER 0 --%define CONFIG_THRESHOLD_FILTER 0 --%define CONFIG_THUMBNAIL_CUDA_FILTER 0 --%define CONFIG_THUMBNAIL_FILTER 0 --%define CONFIG_TIERTEXSEQ_DEMUXER 0 --%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 --%define CONFIG_TIFF_DECODER 0 --%define CONFIG_TIFF_ENCODER 0 --%define CONFIG_TILE_FILTER 0 --%define CONFIG_TINTERLACE_FILTER 0 --%define CONFIG_TLS_PROTOCOL 0 --%define CONFIG_TLUT2_FILTER 0 --%define CONFIG_TMIX_FILTER 0 --%define CONFIG_TMV_DECODER 0 --%define CONFIG_TMV_DEMUXER 0 --%define CONFIG_TONEMAP_FILTER 0 --%define CONFIG_TONEMAP_OPENCL_FILTER 0 --%define CONFIG_TPAD_FILTER 0 --%define CONFIG_TRACE_HEADERS_BSF 0 --%define CONFIG_TRANSPOSE_FILTER 0 --%define CONFIG_TRANSPOSE_NPP_FILTER 0 --%define CONFIG_TRANSPOSE_OPENCL_FILTER 0 --%define CONFIG_TRANSPOSE_VAAPI_FILTER 0 --%define CONFIG_TREBLE_FILTER 0 --%define CONFIG_TREMOLO_FILTER 0 --%define CONFIG_TRIM_FILTER 0 --%define CONFIG_TRUEHD_CORE_BSF 0 --%define CONFIG_TRUEHD_DECODER 0 --%define CONFIG_TRUEHD_DEMUXER 0 --%define CONFIG_TRUEHD_ENCODER 0 --%define CONFIG_TRUEHD_MUXER 0 --%define CONFIG_TRUEMOTION1_DECODER 0 --%define CONFIG_TRUEMOTION2_DECODER 0 --%define CONFIG_TRUEMOTION2RT_DECODER 0 --%define CONFIG_TRUESPEECH_DECODER 0 --%define CONFIG_TSCC2_DECODER 0 --%define CONFIG_TSCC_DECODER 0 --%define CONFIG_TTA_DECODER 0 --%define CONFIG_TTA_DEMUXER 0 --%define CONFIG_TTA_ENCODER 0 --%define CONFIG_TTA_MUXER 0 --%define CONFIG_TTY_DEMUXER 0 --%define CONFIG_TWINVQ_DECODER 0 --%define CONFIG_TXD_DECODER 0 --%define CONFIG_TXD_DEMUXER 0 --%define CONFIG_TY_DEMUXER 0 --%define CONFIG_UDPLITE_PROTOCOL 0 --%define CONFIG_UDP_PROTOCOL 0 --%define CONFIG_ULTI_DECODER 0 --%define CONFIG_UNCODEDFRAMECRC_MUXER 0 --%define CONFIG_UNIX_PROTOCOL 0 --%define CONFIG_UNPREMULTIPLY_FILTER 0 --%define CONFIG_UNSHARP_FILTER 0 --%define CONFIG_UNSHARP_OPENCL_FILTER 0 --%define CONFIG_USPP_FILTER 0 --%define CONFIG_UTVIDEO_DECODER 0 --%define CONFIG_UTVIDEO_ENCODER 0 --%define CONFIG_V210_DECODER 0 --%define CONFIG_V210_DEMUXER 0 --%define CONFIG_V210_ENCODER 0 --%define CONFIG_V210X_DECODER 0 --%define CONFIG_V210X_DEMUXER 0 --%define CONFIG_V308_DECODER 0 --%define CONFIG_V308_ENCODER 0 --%define CONFIG_V408_DECODER 0 --%define CONFIG_V408_ENCODER 0 --%define CONFIG_V410_DECODER 0 --%define CONFIG_V410_ENCODER 0 --%define CONFIG_V4L2_INDEV 0 --%define CONFIG_V4L2_OUTDEV 0 --%define CONFIG_VAG_DEMUXER 0 --%define CONFIG_VAGUEDENOISER_FILTER 0 --%define CONFIG_VAPOURSYNTH_DEMUXER 0 --%define CONFIG_VB_DECODER 0 --%define CONFIG_VBLE_DECODER 0 --%define CONFIG_VC1_CRYSTALHD_DECODER 0 --%define CONFIG_VC1_CUVID_DECODER 0 --%define CONFIG_VC1_D3D11VA2_HWACCEL 0 --%define CONFIG_VC1_D3D11VA_HWACCEL 0 --%define CONFIG_VC1_DECODER 0 --%define CONFIG_VC1_DEMUXER 0 --%define CONFIG_VC1_DXVA2_HWACCEL 0 --%define CONFIG_VC1IMAGE_DECODER 0 --%define CONFIG_VC1_MMAL_DECODER 0 --%define CONFIG_VC1_MUXER 0 --%define CONFIG_VC1_NVDEC_HWACCEL 0 --%define CONFIG_VC1_PARSER 0 --%define CONFIG_VC1_QSV_DECODER 0 --%define CONFIG_VC1T_DEMUXER 0 --%define CONFIG_VC1T_MUXER 0 --%define CONFIG_VC1_V4L2M2M_DECODER 0 --%define CONFIG_VC1_VAAPI_HWACCEL 0 --%define CONFIG_VC1_VDPAU_HWACCEL 0 --%define CONFIG_VC2_ENCODER 0 --%define CONFIG_VCR1_DECODER 0 --%define CONFIG_VECTORSCOPE_FILTER 0 --%define CONFIG_VFLIP_FILTER 0 --%define CONFIG_VFRDET_FILTER 0 --%define CONFIG_VFWCAP_INDEV 0 --%define CONFIG_VIBRANCE_FILTER 0 --%define CONFIG_VIBRATO_FILTER 0 --%define CONFIG_VIDSTABDETECT_FILTER 0 --%define CONFIG_VIDSTABTRANSFORM_FILTER 0 --%define CONFIG_VIGNETTE_FILTER 0 --%define CONFIG_VIVIDAS_DEMUXER 0 --%define CONFIG_VIVO_DEMUXER 0 --%define CONFIG_VMAFMOTION_FILTER 0 --%define CONFIG_VMDAUDIO_DECODER 0 --%define CONFIG_VMD_DEMUXER 0 --%define CONFIG_VMDVIDEO_DECODER 0 --%define CONFIG_VMNC_DECODER 0 --%define CONFIG_VOBSUB_DEMUXER 0 --%define CONFIG_VOC_DEMUXER 0 --%define CONFIG_VOC_MUXER 0 --%define CONFIG_VOLUMEDETECT_FILTER 0 --%define CONFIG_VOLUME_FILTER 0 --%define CONFIG_VORBIS_DECODER 0 --%define CONFIG_VORBIS_ENCODER 0 --%define CONFIG_VORBIS_PARSER 0 --%define CONFIG_VP3_DECODER 0 --%define CONFIG_VP3_PARSER 0 --%define CONFIG_VP4_DECODER 0 --%define CONFIG_VP5_DECODER 0 --%define CONFIG_VP6A_DECODER 0 --%define CONFIG_VP6_DECODER 0 --%define CONFIG_VP6F_DECODER 0 --%define CONFIG_VP7_DECODER 0 --%define CONFIG_VP8_CUVID_DECODER 0 --%define CONFIG_VP8_MEDIACODEC_DECODER 0 --%define CONFIG_VP8_NVDEC_HWACCEL 0 --%define CONFIG_VP8_QSV_DECODER 0 --%define CONFIG_VP8_RKMPP_DECODER 0 --%define CONFIG_VP8_V4L2M2M_DECODER 0 --%define CONFIG_VP8_V4L2M2M_ENCODER 0 --%define CONFIG_VP8_VAAPI_ENCODER 0 --%define CONFIG_VP8_VAAPI_HWACCEL 0 --%define CONFIG_VP9_CUVID_DECODER 0 --%define CONFIG_VP9_D3D11VA2_HWACCEL 0 --%define CONFIG_VP9_D3D11VA_HWACCEL 0 --%define CONFIG_VP9_DXVA2_HWACCEL 0 --%define CONFIG_VP9_MEDIACODEC_DECODER 0 --%define CONFIG_VP9_METADATA_BSF 0 --%define CONFIG_VP9_NVDEC_HWACCEL 0 --%define CONFIG_VP9_RAW_REORDER_BSF 0 --%define CONFIG_VP9_RKMPP_DECODER 0 --%define CONFIG_VP9_SUPERFRAME_BSF 0 --%define CONFIG_VP9_V4L2M2M_DECODER 0 --%define CONFIG_VP9_VAAPI_ENCODER 0 --%define CONFIG_VP9_VAAPI_HWACCEL 0 --%define CONFIG_VP9_VDPAU_HWACCEL 0 --%define CONFIG_VPK_DEMUXER 0 --%define CONFIG_VPLAYER_DECODER 0 --%define CONFIG_VPLAYER_DEMUXER 0 --%define CONFIG_VPP_QSV_FILTER 0 --%define CONFIG_VQA_DECODER 0 --%define CONFIG_VQF_DEMUXER 0 --%define CONFIG_VSTACK_FILTER 0 --%define CONFIG_W3FDIF_FILTER 0 --%define CONFIG_W64_DEMUXER 0 --%define CONFIG_W64_MUXER 0 --%define CONFIG_WAV_DEMUXER 0 --%define CONFIG_WAVEFORM_FILTER 0 --%define CONFIG_WAV_MUXER 0 --%define CONFIG_WAVPACK_DECODER 0 --%define CONFIG_WAVPACK_ENCODER 0 --%define CONFIG_WC3_DEMUXER 0 --%define CONFIG_WCMV_DECODER 0 --%define CONFIG_WEAVE_FILTER 0 --%define CONFIG_WEBM_CHUNK_MUXER 0 --%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 --%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 --%define CONFIG_WEBM_MUXER 0 --%define CONFIG_WEBP_DECODER 0 --%define CONFIG_WEBP_MUXER 0 --%define CONFIG_WEBVTT_DECODER 0 --%define CONFIG_WEBVTT_DEMUXER 0 --%define CONFIG_WEBVTT_ENCODER 0 --%define CONFIG_WEBVTT_MUXER 0 --%define CONFIG_WMALOSSLESS_DECODER 0 --%define CONFIG_WMAPRO_DECODER 0 --%define CONFIG_WMAV1_DECODER 0 --%define CONFIG_WMAV1_ENCODER 0 --%define CONFIG_WMAV2_DECODER 0 --%define CONFIG_WMAV2_ENCODER 0 --%define CONFIG_WMAVOICE_DECODER 0 --%define CONFIG_WMV1_DECODER 0 --%define CONFIG_WMV1_ENCODER 0 --%define CONFIG_WMV2_DECODER 0 --%define CONFIG_WMV2_ENCODER 0 --%define CONFIG_WMV3_CRYSTALHD_DECODER 0 --%define CONFIG_WMV3_D3D11VA2_HWACCEL 0 --%define CONFIG_WMV3_D3D11VA_HWACCEL 0 --%define CONFIG_WMV3_DECODER 0 --%define CONFIG_WMV3_DXVA2_HWACCEL 0 --%define CONFIG_WMV3IMAGE_DECODER 0 --%define CONFIG_WMV3_NVDEC_HWACCEL 0 --%define CONFIG_WMV3_VAAPI_HWACCEL 0 --%define CONFIG_WMV3_VDPAU_HWACCEL 0 --%define CONFIG_WNV1_DECODER 0 --%define CONFIG_WRAPPED_AVFRAME_DECODER 0 --%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 --%define CONFIG_WSAUD_DEMUXER 0 --%define CONFIG_WSD_DEMUXER 0 --%define CONFIG_WS_SND1_DECODER 0 --%define CONFIG_WSVQA_DEMUXER 0 --%define CONFIG_WTV_DEMUXER 0 --%define CONFIG_WTV_MUXER 0 --%define CONFIG_WV_DEMUXER 0 --%define CONFIG_WVE_DEMUXER 0 --%define CONFIG_WV_MUXER 0 --%define CONFIG_XA_DEMUXER 0 --%define CONFIG_XAN_DPCM_DECODER 0 --%define CONFIG_XAN_WC3_DECODER 0 --%define CONFIG_XAN_WC4_DECODER 0 --%define CONFIG_XBIN_DECODER 0 --%define CONFIG_XBIN_DEMUXER 0 --%define CONFIG_XBM_DECODER 0 --%define CONFIG_XBM_ENCODER 0 --%define CONFIG_XBR_FILTER 0 --%define CONFIG_XCBGRAB_INDEV 0 --%define CONFIG_XFACE_DECODER 0 --%define CONFIG_XFACE_ENCODER 0 --%define CONFIG_XL_DECODER 0 --%define CONFIG_XMA1_DECODER 0 --%define CONFIG_XMA2_DECODER 0 --%define CONFIG_XMA_PARSER 0 --%define CONFIG_XMEDIAN_FILTER 0 --%define CONFIG_XMV_DEMUXER 0 --%define CONFIG_XPM_DECODER 0 --%define CONFIG_XSTACK_FILTER 0 --%define CONFIG_XSUB_DECODER 0 --%define CONFIG_XSUB_ENCODER 0 --%define CONFIG_XVAG_DEMUXER 0 --%define CONFIG_XV_OUTDEV 0 --%define CONFIG_XWD_DECODER 0 --%define CONFIG_XWD_ENCODER 0 --%define CONFIG_XWMA_DEMUXER 0 --%define CONFIG_Y41P_DECODER 0 --%define CONFIG_Y41P_ENCODER 0 --%define CONFIG_YADIF_CUDA_FILTER 0 --%define CONFIG_YADIF_FILTER 0 --%define CONFIG_YLC_DECODER 0 --%define CONFIG_YOP_DECODER 0 --%define CONFIG_YOP_DEMUXER 0 --%define CONFIG_YUV4_DECODER 0 --%define CONFIG_YUV4_ENCODER 0 --%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 --%define CONFIG_YUV4MPEGPIPE_MUXER 0 --%define CONFIG_YUVTESTSRC_FILTER 0 --%define CONFIG_ZERO12V_DECODER 0 --%define CONFIG_ZEROCODEC_DECODER 0 --%define CONFIG_ZLIB_DECODER 0 --%define CONFIG_ZLIB_ENCODER 0 --%define CONFIG_ZMBV_DECODER 0 --%define CONFIG_ZMBV_ENCODER 0 --%define CONFIG_ZMQ_FILTER 0 --%define CONFIG_ZOOMPAN_FILTER 0 --%define CONFIG_ZSCALE_FILTER 0 -diff -Naur a/media/ffvpx/defaults_disabled.h b/media/ffvpx/defaults_disabled.h ---- a/media/ffvpx/defaults_disabled.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/defaults_disabled.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,1837 +0,0 @@ --#define CONFIG_A64MULTI5_ENCODER 0 --#define CONFIG_A64MULTI_ENCODER 0 --#define CONFIG_A64_MUXER 0 --#define CONFIG_AAC_ADTSTOASC_BSF 0 --#define CONFIG_AAC_AT_DECODER 0 --#define CONFIG_AAC_AT_ENCODER 0 --#define CONFIG_AAC_DECODER 0 --#define CONFIG_AAC_DEMUXER 0 --#define CONFIG_AAC_ENCODER 0 --#define CONFIG_AAC_FIXED_DECODER 0 --#define CONFIG_AAC_LATM_DECODER 0 --#define CONFIG_AAC_LATM_PARSER 0 --#define CONFIG_AAC_PARSER 0 --#define CONFIG_AA_DEMUXER 0 --#define CONFIG_AASC_DECODER 0 --#define CONFIG_ABENCH_FILTER 0 --#define CONFIG_ABITSCOPE_FILTER 0 --#define CONFIG_AC3_AT_DECODER 0 --#define CONFIG_AC3_DECODER 0 --#define CONFIG_AC3_DEMUXER 0 --#define CONFIG_AC3_ENCODER 0 --#define CONFIG_AC3_FIXED_DECODER 0 --#define CONFIG_AC3_FIXED_ENCODER 0 --#define CONFIG_AC3_MUXER 0 --#define CONFIG_AC3_PARSER 0 --#define CONFIG_ACM_DEMUXER 0 --#define CONFIG_ACOMPRESSOR_FILTER 0 --#define CONFIG_ACONTRAST_FILTER 0 --#define CONFIG_ACOPY_FILTER 0 --#define CONFIG_ACROSSFADE_FILTER 0 --#define CONFIG_ACROSSOVER_FILTER 0 --#define CONFIG_ACRUSHER_FILTER 0 --#define CONFIG_ACT_DEMUXER 0 --#define CONFIG_ACUE_FILTER 0 --#define CONFIG_ADECLICK_FILTER 0 --#define CONFIG_ADECLIP_FILTER 0 --#define CONFIG_ADELAY_FILTER 0 --#define CONFIG_ADERIVATIVE_FILTER 0 --#define CONFIG_ADF_DEMUXER 0 --#define CONFIG_ADPCM_4XM_DECODER 0 --#define CONFIG_ADPCM_ADX_DECODER 0 --#define CONFIG_ADPCM_ADX_ENCODER 0 --#define CONFIG_ADPCM_AFC_DECODER 0 --#define CONFIG_ADPCM_AGM_DECODER 0 --#define CONFIG_ADPCM_AICA_DECODER 0 --#define CONFIG_ADPCM_CT_DECODER 0 --#define CONFIG_ADPCM_DTK_DECODER 0 --#define CONFIG_ADPCM_EA_DECODER 0 --#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 --#define CONFIG_ADPCM_EA_R1_DECODER 0 --#define CONFIG_ADPCM_EA_R2_DECODER 0 --#define CONFIG_ADPCM_EA_R3_DECODER 0 --#define CONFIG_ADPCM_EA_XAS_DECODER 0 --#define CONFIG_ADPCM_G722_DECODER 0 --#define CONFIG_ADPCM_G722_ENCODER 0 --#define CONFIG_ADPCM_G726_DECODER 0 --#define CONFIG_ADPCM_G726_ENCODER 0 --#define CONFIG_ADPCM_G726LE_DECODER 0 --#define CONFIG_ADPCM_G726LE_ENCODER 0 --#define CONFIG_ADPCM_IMA_AMV_DECODER 0 --#define CONFIG_ADPCM_IMA_APC_DECODER 0 --#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 --#define CONFIG_ADPCM_IMA_DK3_DECODER 0 --#define CONFIG_ADPCM_IMA_DK4_DECODER 0 --#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 --#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 --#define CONFIG_ADPCM_IMA_ISS_DECODER 0 --#define CONFIG_ADPCM_IMA_OKI_DECODER 0 --#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 --#define CONFIG_ADPCM_IMA_QT_DECODER 0 --#define CONFIG_ADPCM_IMA_QT_ENCODER 0 --#define CONFIG_ADPCM_IMA_RAD_DECODER 0 --#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 --#define CONFIG_ADPCM_IMA_WAV_DECODER 0 --#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 --#define CONFIG_ADPCM_IMA_WS_DECODER 0 --#define CONFIG_ADPCM_MS_DECODER 0 --#define CONFIG_ADPCM_MS_ENCODER 0 --#define CONFIG_ADPCM_MTAF_DECODER 0 --#define CONFIG_ADPCM_PSX_DECODER 0 --#define CONFIG_ADPCM_SBPRO_2_DECODER 0 --#define CONFIG_ADPCM_SBPRO_3_DECODER 0 --#define CONFIG_ADPCM_SBPRO_4_DECODER 0 --#define CONFIG_ADPCM_SWF_DECODER 0 --#define CONFIG_ADPCM_SWF_ENCODER 0 --#define CONFIG_ADPCM_THP_DECODER 0 --#define CONFIG_ADPCM_THP_LE_DECODER 0 --#define CONFIG_ADPCM_VIMA_DECODER 0 --#define CONFIG_ADPCM_XA_DECODER 0 --#define CONFIG_ADPCM_YAMAHA_DECODER 0 --#define CONFIG_ADPCM_YAMAHA_ENCODER 0 --#define CONFIG_ADP_DEMUXER 0 --#define CONFIG_ADRAWGRAPH_FILTER 0 --#define CONFIG_ADS_DEMUXER 0 --#define CONFIG_ADTS_MUXER 0 --#define CONFIG_ADX_DEMUXER 0 --#define CONFIG_ADX_MUXER 0 --#define CONFIG_ADX_PARSER 0 --#define CONFIG_AEA_DEMUXER 0 --#define CONFIG_AECHO_FILTER 0 --#define CONFIG_AEMPHASIS_FILTER 0 --#define CONFIG_AEVAL_FILTER 0 --#define CONFIG_AEVALSRC_FILTER 0 --#define CONFIG_AFADE_FILTER 0 --#define CONFIG_AFC_DEMUXER 0 --#define CONFIG_AFFTDN_FILTER 0 --#define CONFIG_AFFTFILT_FILTER 0 --#define CONFIG_AFIFO_FILTER 0 --#define CONFIG_AFIR_FILTER 0 --#define CONFIG_AFORMAT_FILTER 0 --#define CONFIG_AGATE_FILTER 0 --#define CONFIG_AGM_DECODER 0 --#define CONFIG_AGRAPHMONITOR_FILTER 0 --#define CONFIG_AHISTOGRAM_FILTER 0 --#define CONFIG_AIC_DECODER 0 --#define CONFIG_AIFF_DEMUXER 0 --#define CONFIG_AIFF_MUXER 0 --#define CONFIG_AIIR_FILTER 0 --#define CONFIG_AINTEGRAL_FILTER 0 --#define CONFIG_AINTERLEAVE_FILTER 0 --#define CONFIG_AIX_DEMUXER 0 --#define CONFIG_ALAC_AT_DECODER 0 --#define CONFIG_ALAC_AT_ENCODER 0 --#define CONFIG_ALAC_DECODER 0 --#define CONFIG_ALAC_ENCODER 0 --#define CONFIG_ALIAS_PIX_DECODER 0 --#define CONFIG_ALIAS_PIX_ENCODER 0 --#define CONFIG_ALIMITER_FILTER 0 --#define CONFIG_ALLPASS_FILTER 0 --#define CONFIG_ALLRGB_FILTER 0 --#define CONFIG_ALLYUV_FILTER 0 --#define CONFIG_ALOOP_FILTER 0 --#define CONFIG_ALPHAEXTRACT_FILTER 0 --#define CONFIG_ALPHAMERGE_FILTER 0 --#define CONFIG_ALSA_INDEV 0 --#define CONFIG_ALSA_OUTDEV 0 --#define CONFIG_ALS_DECODER 0 --#define CONFIG_AMERGE_FILTER 0 --#define CONFIG_AMETADATA_FILTER 0 --#define CONFIG_AMIX_FILTER 0 --#define CONFIG_AMOVIE_FILTER 0 --#define CONFIG_AMPLIFY_FILTER 0 --#define CONFIG_AMR_DEMUXER 0 --#define CONFIG_AMR_MUXER 0 --#define CONFIG_AMR_NB_AT_DECODER 0 --#define CONFIG_AMRNB_DECODER 0 --#define CONFIG_AMRNB_DEMUXER 0 --#define CONFIG_AMRWB_DECODER 0 --#define CONFIG_AMRWB_DEMUXER 0 --#define CONFIG_AMULTIPLY_FILTER 0 --#define CONFIG_AMV_DECODER 0 --#define CONFIG_AMV_ENCODER 0 --#define CONFIG_ANDROID_CAMERA_INDEV 0 --#define CONFIG_ANEQUALIZER_FILTER 0 --#define CONFIG_ANLMDN_FILTER 0 --#define CONFIG_ANM_DECODER 0 --#define CONFIG_ANM_DEMUXER 0 --#define CONFIG_ANOISESRC_FILTER 0 --#define CONFIG_ANSI_DECODER 0 --#define CONFIG_ANULL_FILTER 0 --#define CONFIG_ANULLSINK_FILTER 0 --#define CONFIG_ANULLSRC_FILTER 0 --#define CONFIG_APAD_FILTER 0 --#define CONFIG_APC_DEMUXER 0 --#define CONFIG_APE_DECODER 0 --#define CONFIG_APE_DEMUXER 0 --#define CONFIG_APERMS_FILTER 0 --#define CONFIG_APHASEMETER_FILTER 0 --#define CONFIG_APHASER_FILTER 0 --#define CONFIG_APNG_DECODER 0 --#define CONFIG_APNG_DEMUXER 0 --#define CONFIG_APNG_ENCODER 0 --#define CONFIG_APNG_MUXER 0 --#define CONFIG_APTX_DECODER 0 --#define CONFIG_APTX_DEMUXER 0 --#define CONFIG_APTX_ENCODER 0 --#define CONFIG_APTX_HD_DECODER 0 --#define CONFIG_APTX_HD_DEMUXER 0 --#define CONFIG_APTX_HD_ENCODER 0 --#define CONFIG_APTX_HD_MUXER 0 --#define CONFIG_APTX_MUXER 0 --#define CONFIG_APULSATOR_FILTER 0 --#define CONFIG_AQTITLE_DEMUXER 0 --#define CONFIG_ARBC_DECODER 0 --#define CONFIG_AREALTIME_FILTER 0 --#define CONFIG_ARESAMPLE_FILTER 0 --#define CONFIG_AREVERSE_FILTER 0 --#define CONFIG_ASELECT_FILTER 0 --#define CONFIG_ASENDCMD_FILTER 0 --#define CONFIG_ASETNSAMPLES_FILTER 0 --#define CONFIG_ASETPTS_FILTER 0 --#define CONFIG_ASETRATE_FILTER 0 --#define CONFIG_ASETTB_FILTER 0 --#define CONFIG_ASF_DEMUXER 0 --#define CONFIG_ASF_MUXER 0 --#define CONFIG_ASF_O_DEMUXER 0 --#define CONFIG_ASF_STREAM_MUXER 0 --#define CONFIG_ASHOWINFO_FILTER 0 --#define CONFIG_ASIDEDATA_FILTER 0 --#define CONFIG_ASOFTCLIP_FILTER 0 --#define CONFIG_ASPLIT_FILTER 0 --#define CONFIG_ASR_FILTER 0 --#define CONFIG_ASS_DECODER 0 --#define CONFIG_ASS_DEMUXER 0 --#define CONFIG_ASS_ENCODER 0 --#define CONFIG_ASS_FILTER 0 --#define CONFIG_ASS_MUXER 0 --#define CONFIG_ASTATS_FILTER 0 --#define CONFIG_AST_DEMUXER 0 --#define CONFIG_AST_MUXER 0 --#define CONFIG_ASTREAMSELECT_FILTER 0 --#define CONFIG_ASV1_DECODER 0 --#define CONFIG_ASV1_ENCODER 0 --#define CONFIG_ASV2_DECODER 0 --#define CONFIG_ASV2_ENCODER 0 --#define CONFIG_ASYNC_PROTOCOL 0 --#define CONFIG_ATADENOISE_FILTER 0 --#define CONFIG_ATEMPO_FILTER 0 --#define CONFIG_ATRAC1_DECODER 0 --#define CONFIG_ATRAC3AL_DECODER 0 --#define CONFIG_ATRAC3_DECODER 0 --#define CONFIG_ATRAC3PAL_DECODER 0 --#define CONFIG_ATRAC3P_DECODER 0 --#define CONFIG_ATRAC9_DECODER 0 --#define CONFIG_ATRIM_FILTER 0 --#define CONFIG_AU_DEMUXER 0 --#define CONFIG_AU_MUXER 0 --#define CONFIG_AURA2_DECODER 0 --#define CONFIG_AURA_DECODER 0 --#define CONFIG_AV1_FRAME_SPLIT_BSF 0 --#define CONFIG_AV1_METADATA_BSF 0 --#define CONFIG_AV1_PARSER 0 --#define CONFIG_AV1_DECODER 0 --#define CONFIG_AV1_D3D11VA_HWACCEL 0 --#define CONFIG_AV1_D3D11VA2_HWACCEL 0 --#define CONFIG_AV1_DXVA2_HWACCEL 0 --#define CONFIG_AV1_NVDEC_HWACCEL 0 --#define CONFIG_AV1_VAAPI_HWACCEL 0 --#define CONFIG_AVECTORSCOPE_FILTER 0 --#define CONFIG_AVFOUNDATION_INDEV 0 --#define CONFIG_AVGBLUR_FILTER 0 --#define CONFIG_AVGBLUR_OPENCL_FILTER 0 --#define CONFIG_AVI_DEMUXER 0 --#define CONFIG_AVI_MUXER 0 --#define CONFIG_AVISYNTH_DEMUXER 0 --#define CONFIG_AVM2_MUXER 0 --#define CONFIG_AVR_DEMUXER 0 --#define CONFIG_AVRN_DECODER 0 --#define CONFIG_AVRP_DECODER 0 --#define CONFIG_AVRP_ENCODER 0 --#define CONFIG_AVS2_DEMUXER 0 --#define CONFIG_AVS2_MUXER 0 --#define CONFIG_AVS2_PARSER 0 --#define CONFIG_AVS_DECODER 0 --#define CONFIG_AVS_DEMUXER 0 --#define CONFIG_AVUI_DECODER 0 --#define CONFIG_AVUI_ENCODER 0 --#define CONFIG_AYUV_DECODER 0 --#define CONFIG_AYUV_ENCODER 0 --#define CONFIG_AZMQ_FILTER 0 --#define CONFIG_BANDPASS_FILTER 0 --#define CONFIG_BANDREJECT_FILTER 0 --#define CONFIG_BASS_FILTER 0 --#define CONFIG_BBOX_FILTER 0 --#define CONFIG_BENCH_FILTER 0 --#define CONFIG_BETHSOFTVID_DECODER 0 --#define CONFIG_BETHSOFTVID_DEMUXER 0 --#define CONFIG_BFI_DECODER 0 --#define CONFIG_BFI_DEMUXER 0 --#define CONFIG_BFSTM_DEMUXER 0 --#define CONFIG_BINKAUDIO_DCT_DECODER 0 --#define CONFIG_BINKAUDIO_RDFT_DECODER 0 --#define CONFIG_BINK_DECODER 0 --#define CONFIG_BINK_DEMUXER 0 --#define CONFIG_BINTEXT_DECODER 0 --#define CONFIG_BINTEXT_DEMUXER 0 --#define CONFIG_BIQUAD_FILTER 0 --#define CONFIG_BIT_DEMUXER 0 --#define CONFIG_BIT_MUXER 0 --#define CONFIG_BITPACKED_DECODER 0 --#define CONFIG_BITPLANENOISE_FILTER 0 --#define CONFIG_BKTR_INDEV 0 --#define CONFIG_BLACKDETECT_FILTER 0 --#define CONFIG_BLACKFRAME_FILTER 0 --#define CONFIG_BLEND_FILTER 0 --#define CONFIG_BLURAY_PROTOCOL 0 --#define CONFIG_BM3D_FILTER 0 --#define CONFIG_BMP_DECODER 0 --#define CONFIG_BMP_ENCODER 0 --#define CONFIG_BMP_PARSER 0 --#define CONFIG_BMV_AUDIO_DECODER 0 --#define CONFIG_BMV_DEMUXER 0 --#define CONFIG_BMV_VIDEO_DECODER 0 --#define CONFIG_BOA_DEMUXER 0 --#define CONFIG_BOXBLUR_FILTER 0 --#define CONFIG_BOXBLUR_OPENCL_FILTER 0 --#define CONFIG_BRENDER_PIX_DECODER 0 --#define CONFIG_BRSTM_DEMUXER 0 --#define CONFIG_BS2B_FILTER 0 --#define CONFIG_BWDIF_FILTER 0 --#define CONFIG_C93_DECODER 0 --#define CONFIG_C93_DEMUXER 0 --#define CONFIG_CACA_OUTDEV 0 --#define CONFIG_CACHE_PROTOCOL 0 --#define CONFIG_CAF_DEMUXER 0 --#define CONFIG_CAF_MUXER 0 --#define CONFIG_CAVS_DECODER 0 --#define CONFIG_CAVSVIDEO_DEMUXER 0 --#define CONFIG_CAVSVIDEO_MUXER 0 --#define CONFIG_CAVSVIDEO_PARSER 0 --#define CONFIG_CCAPTION_DECODER 0 --#define CONFIG_CDG_DEMUXER 0 --#define CONFIG_CDGRAPHICS_DECODER 0 --#define CONFIG_CDXL_DECODER 0 --#define CONFIG_CDXL_DEMUXER 0 --#define CONFIG_CELLAUTO_FILTER 0 --#define CONFIG_CFHD_DECODER 0 --#define CONFIG_CHANNELMAP_FILTER 0 --#define CONFIG_CHANNELSPLIT_FILTER 0 --#define CONFIG_CHOMP_BSF 0 --#define CONFIG_CHORUS_FILTER 0 --#define CONFIG_CHROMAHOLD_FILTER 0 --#define CONFIG_CHROMAKEY_FILTER 0 --#define CONFIG_CHROMAPRINT_MUXER 0 --#define CONFIG_CHROMASHIFT_FILTER 0 --#define CONFIG_CIESCOPE_FILTER 0 --#define CONFIG_CINE_DEMUXER 0 --#define CONFIG_CINEPAK_DECODER 0 --#define CONFIG_CINEPAK_ENCODER 0 --#define CONFIG_CLEARVIDEO_DECODER 0 --#define CONFIG_CLJR_DECODER 0 --#define CONFIG_CLJR_ENCODER 0 --#define CONFIG_CLLC_DECODER 0 --#define CONFIG_CODEC2_DEMUXER 0 --#define CONFIG_CODEC2_MUXER 0 --#define CONFIG_CODEC2RAW_DEMUXER 0 --#define CONFIG_CODEC2RAW_MUXER 0 --#define CONFIG_CODECVIEW_FILTER 0 --#define CONFIG_COLORBALANCE_FILTER 0 --#define CONFIG_COLORCHANNELMIXER_FILTER 0 --#define CONFIG_COLOR_FILTER 0 --#define CONFIG_COLORHOLD_FILTER 0 --#define CONFIG_COLORKEY_FILTER 0 --#define CONFIG_COLORKEY_OPENCL_FILTER 0 --#define CONFIG_COLORLEVELS_FILTER 0 --#define CONFIG_COLORMATRIX_FILTER 0 --#define CONFIG_COLORSPACE_FILTER 0 --#define CONFIG_COMFORTNOISE_DECODER 0 --#define CONFIG_COMFORTNOISE_ENCODER 0 --#define CONFIG_COMPAND_FILTER 0 --#define CONFIG_COMPENSATIONDELAY_FILTER 0 --#define CONFIG_CONCAT_DEMUXER 0 --#define CONFIG_CONCAT_FILTER 0 --#define CONFIG_CONCAT_PROTOCOL 0 --#define CONFIG_CONVOLUTION_FILTER 0 --#define CONFIG_CONVOLUTION_OPENCL_FILTER 0 --#define CONFIG_CONVOLVE_FILTER 0 --#define CONFIG_COOK_DECODER 0 --#define CONFIG_COOK_PARSER 0 --#define CONFIG_COPY_FILTER 0 --#define CONFIG_COREIMAGE_FILTER 0 --#define CONFIG_COREIMAGESRC_FILTER 0 --#define CONFIG_COVER_RECT_FILTER 0 --#define CONFIG_CPIA_DECODER 0 --#define CONFIG_CRC_MUXER 0 --#define CONFIG_CROPDETECT_FILTER 0 --#define CONFIG_CROP_FILTER 0 --#define CONFIG_CROSSFEED_FILTER 0 --#define CONFIG_CRYPTO_PROTOCOL 0 --#define CONFIG_CRYSTALIZER_FILTER 0 --#define CONFIG_CSCD_DECODER 0 --#define CONFIG_CUE_FILTER 0 --#define CONFIG_CURVES_FILTER 0 --#define CONFIG_CYUV_DECODER 0 --#define CONFIG_DASH_DEMUXER 0 --#define CONFIG_DASH_MUXER 0 --#define CONFIG_DATA_DEMUXER 0 --#define CONFIG_DATA_MUXER 0 --#define CONFIG_DATA_PROTOCOL 0 --#define CONFIG_DATASCOPE_FILTER 0 --#define CONFIG_DAUD_DEMUXER 0 --#define CONFIG_DAUD_MUXER 0 --#define CONFIG_DCA_CORE_BSF 0 --#define CONFIG_DCA_DECODER 0 --#define CONFIG_DCA_ENCODER 0 --#define CONFIG_DCA_PARSER 0 --#define CONFIG_DCSHIFT_FILTER 0 --#define CONFIG_DCSTR_DEMUXER 0 --#define CONFIG_DCTDNOIZ_FILTER 0 --#define CONFIG_DDS_DECODER 0 --#define CONFIG_DEBAND_FILTER 0 --#define CONFIG_DEBLOCK_FILTER 0 --#define CONFIG_DECIMATE_FILTER 0 --#define CONFIG_DECKLINK_INDEV 0 --#define CONFIG_DECKLINK_OUTDEV 0 --#define CONFIG_DECONVOLVE_FILTER 0 --#define CONFIG_DEDOT_FILTER 0 --#define CONFIG_DEESSER_FILTER 0 --#define CONFIG_DEFLATE_FILTER 0 --#define CONFIG_DEFLICKER_FILTER 0 --#define CONFIG_DEINTERLACE_QSV_FILTER 0 --#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 --#define CONFIG_DEJUDDER_FILTER 0 --#define CONFIG_DELOGO_FILTER 0 --#define CONFIG_DEMUXERS 0 --#define CONFIG_DENOISE_VAAPI_FILTER 0 --#define CONFIG_DERAIN_FILTER 0 --#define CONFIG_DESHAKE_FILTER 0 --#define CONFIG_DESPILL_FILTER 0 --#define CONFIG_DETELECINE_FILTER 0 --#define CONFIG_DFA_DECODER 0 --#define CONFIG_DFA_DEMUXER 0 --#define CONFIG_DHAV_DEMUXER 0 --#define CONFIG_DILATION_FILTER 0 --#define CONFIG_DILATION_OPENCL_FILTER 0 --#define CONFIG_DIRAC_DECODER 0 --#define CONFIG_DIRAC_DEMUXER 0 --#define CONFIG_DIRAC_MUXER 0 --#define CONFIG_DIRAC_PARSER 0 --#define CONFIG_DISPLACE_FILTER 0 --#define CONFIG_DNXHD_DECODER 0 --#define CONFIG_DNXHD_DEMUXER 0 --#define CONFIG_DNXHD_ENCODER 0 --#define CONFIG_DNXHD_MUXER 0 --#define CONFIG_DNXHD_PARSER 0 --#define CONFIG_DOLBY_E_DECODER 0 --#define CONFIG_DOUBLEWEAVE_FILTER 0 --#define CONFIG_DPX_DECODER 0 --#define CONFIG_DPX_ENCODER 0 --#define CONFIG_DPX_PARSER 0 --#define CONFIG_DRAWBOX_FILTER 0 --#define CONFIG_DRAWGRAPH_FILTER 0 --#define CONFIG_DRAWGRID_FILTER 0 --#define CONFIG_DRAWTEXT_FILTER 0 --#define CONFIG_DRMETER_FILTER 0 --#define CONFIG_DSD_LSBF_DECODER 0 --#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 --#define CONFIG_DSD_MSBF_DECODER 0 --#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 --#define CONFIG_DSF_DEMUXER 0 --#define CONFIG_DSHOW_INDEV 0 --#define CONFIG_DSICINAUDIO_DECODER 0 --#define CONFIG_DSICIN_DEMUXER 0 --#define CONFIG_DSICINVIDEO_DECODER 0 --#define CONFIG_DSS_DEMUXER 0 --#define CONFIG_DSS_SP_DECODER 0 --#define CONFIG_DST_DECODER 0 --#define CONFIG_DTS_DEMUXER 0 --#define CONFIG_DTSHD_DEMUXER 0 --#define CONFIG_DTS_MUXER 0 --#define CONFIG_DUMP_EXTRADATA_BSF 0 --#define CONFIG_DVAUDIO_DECODER 0 --#define CONFIG_DVAUDIO_PARSER 0 --#define CONFIG_DVBSUB_DECODER 0 --#define CONFIG_DVBSUB_DEMUXER 0 --#define CONFIG_DVBSUB_ENCODER 0 --#define CONFIG_DVBSUB_PARSER 0 --#define CONFIG_DVBTXT_DEMUXER 0 --#define CONFIG_DV_DEMUXER 0 --#define CONFIG_DVD_NAV_PARSER 0 --#define CONFIG_DVDSUB_DECODER 0 --#define CONFIG_DVDSUB_ENCODER 0 --#define CONFIG_DVDSUB_PARSER 0 --#define CONFIG_DV_MUXER 0 --#define CONFIG_DVVIDEO_DECODER 0 --#define CONFIG_DVVIDEO_ENCODER 0 --#define CONFIG_DXA_DECODER 0 --#define CONFIG_DXA_DEMUXER 0 --#define CONFIG_DXTORY_DECODER 0 --#define CONFIG_DXV_DECODER 0 --#define CONFIG_DYNAUDNORM_FILTER 0 --#define CONFIG_EAC3_AT_DECODER 0 --#define CONFIG_EAC3_CORE_BSF 0 --#define CONFIG_EAC3_DECODER 0 --#define CONFIG_EAC3_DEMUXER 0 --#define CONFIG_EAC3_ENCODER 0 --#define CONFIG_EAC3_MUXER 0 --#define CONFIG_EA_CDATA_DEMUXER 0 --#define CONFIG_EACMV_DECODER 0 --#define CONFIG_EA_DEMUXER 0 --#define CONFIG_EAMAD_DECODER 0 --#define CONFIG_EARWAX_FILTER 0 --#define CONFIG_EATGQ_DECODER 0 --#define CONFIG_EATGV_DECODER 0 --#define CONFIG_EATQI_DECODER 0 --#define CONFIG_EBUR128_FILTER 0 --#define CONFIG_EDGEDETECT_FILTER 0 --#define CONFIG_EIGHTBPS_DECODER 0 --#define CONFIG_EIGHTSVX_EXP_DECODER 0 --#define CONFIG_EIGHTSVX_FIB_DECODER 0 --#define CONFIG_ELBG_FILTER 0 --#define CONFIG_ENCODERS 0 --#define CONFIG_ENTROPY_FILTER 0 --#define CONFIG_EPAF_DEMUXER 0 --#define CONFIG_EQ_FILTER 0 --#define CONFIG_EQUALIZER_FILTER 0 --#define CONFIG_EROSION_FILTER 0 --#define CONFIG_EROSION_OPENCL_FILTER 0 --#define CONFIG_ESCAPE124_DECODER 0 --#define CONFIG_ESCAPE130_DECODER 0 --#define CONFIG_EVRC_DECODER 0 --#define CONFIG_EXR_DECODER 0 --#define CONFIG_EXTRACT_EXTRADATA_BSF 0 --#define CONFIG_EXTRACTPLANES_FILTER 0 --#define CONFIG_EXTRASTEREO_FILTER 0 --#define CONFIG_F4V_MUXER 0 --#define CONFIG_FADE_FILTER 0 --#define CONFIG_FBDEV_INDEV 0 --#define CONFIG_FBDEV_OUTDEV 0 --#define CONFIG_FFMETADATA_DEMUXER 0 --#define CONFIG_FFMETADATA_MUXER 0 --#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 --#define CONFIG_FFRTMPHTTP_PROTOCOL 0 --#define CONFIG_FFTDNOIZ_FILTER 0 --#define CONFIG_FFTFILT_FILTER 0 --#define CONFIG_FFV1_DECODER 0 --#define CONFIG_FFV1_ENCODER 0 --#define CONFIG_FFVHUFF_DECODER 0 --#define CONFIG_FFVHUFF_ENCODER 0 --#define CONFIG_FFWAVESYNTH_DECODER 0 --#define CONFIG_FIC_DECODER 0 --#define CONFIG_FIELD_FILTER 0 --#define CONFIG_FIELDHINT_FILTER 0 --#define CONFIG_FIELDMATCH_FILTER 0 --#define CONFIG_FIELDORDER_FILTER 0 --#define CONFIG_FIFO_FILTER 0 --#define CONFIG_FIFO_MUXER 0 --#define CONFIG_FIFO_TEST_MUXER 0 --#define CONFIG_FILE_PROTOCOL 0 --#define CONFIG_FILLBORDERS_FILTER 0 --#define CONFIG_FILMSTRIP_DEMUXER 0 --#define CONFIG_FILMSTRIP_MUXER 0 --#define CONFIG_FILTERS 0 --#define CONFIG_FILTER_UNITS_BSF 0 --#define CONFIG_FIND_RECT_FILTER 0 --#define CONFIG_FIREQUALIZER_FILTER 0 --#define CONFIG_FITS_DECODER 0 --#define CONFIG_FITS_DEMUXER 0 --#define CONFIG_FITS_ENCODER 0 --#define CONFIG_FITS_MUXER 0 --#define CONFIG_FLAC_DEMUXER 0 --#define CONFIG_FLAC_ENCODER 0 --#define CONFIG_FLAC_MUXER 0 --#define CONFIG_FLAC_PARSER 0 --#define CONFIG_FLANGER_FILTER 0 --#define CONFIG_FLASHSV2_DECODER 0 --#define CONFIG_FLASHSV2_ENCODER 0 --#define CONFIG_FLASHSV_DECODER 0 --#define CONFIG_FLASHSV_ENCODER 0 --#define CONFIG_FLIC_DECODER 0 --#define CONFIG_FLIC_DEMUXER 0 --#define CONFIG_FLITE_FILTER 0 --#define CONFIG_FLOODFILL_FILTER 0 --#define CONFIG_FLV_DECODER 0 --#define CONFIG_FLV_DEMUXER 0 --#define CONFIG_FLV_ENCODER 0 --#define CONFIG_FLV_MUXER 0 --#define CONFIG_FMVC_DECODER 0 --#define CONFIG_FORMAT_FILTER 0 --#define CONFIG_FOURXM_DECODER 0 --#define CONFIG_FOURXM_DEMUXER 0 --#define CONFIG_FPS_FILTER 0 --#define CONFIG_FRAMECRC_MUXER 0 --#define CONFIG_FRAMEHASH_MUXER 0 --#define CONFIG_FRAMEMD5_MUXER 0 --#define CONFIG_FRAMEPACK_FILTER 0 --#define CONFIG_FRAMERATE_FILTER 0 --#define CONFIG_FRAMESTEP_FILTER 0 --#define CONFIG_FRAME_THREAD_ENCODER 0 --#define CONFIG_FRAPS_DECODER 0 --#define CONFIG_FREEZEDETECT_FILTER 0 --#define CONFIG_FREI0R_FILTER 0 --#define CONFIG_FREI0R_SRC_FILTER 0 --#define CONFIG_FRM_DEMUXER 0 --#define CONFIG_FRWU_DECODER 0 --#define CONFIG_FSB_DEMUXER 0 --#define CONFIG_FSPP_FILTER 0 --#define CONFIG_FTP_PROTOCOL 0 --#define CONFIG_G2M_DECODER 0 --#define CONFIG_G722_DEMUXER 0 --#define CONFIG_G722_MUXER 0 --#define CONFIG_G723_1_DECODER 0 --#define CONFIG_G723_1_DEMUXER 0 --#define CONFIG_G723_1_ENCODER 0 --#define CONFIG_G723_1_MUXER 0 --#define CONFIG_G723_1_PARSER 0 --#define CONFIG_G726_DEMUXER 0 --#define CONFIG_G726LE_DEMUXER 0 --#define CONFIG_G726LE_MUXER 0 --#define CONFIG_G726_MUXER 0 --#define CONFIG_G729_DECODER 0 --#define CONFIG_G729_DEMUXER 0 --#define CONFIG_G729_PARSER 0 --#define CONFIG_GBLUR_FILTER 0 --#define CONFIG_GDIGRAB_INDEV 0 --#define CONFIG_GDV_DECODER 0 --#define CONFIG_GDV_DEMUXER 0 --#define CONFIG_GENH_DEMUXER 0 --#define CONFIG_GEQ_FILTER 0 --#define CONFIG_GIF_DECODER 0 --#define CONFIG_GIF_DEMUXER 0 --#define CONFIG_GIF_ENCODER 0 --#define CONFIG_GIF_MUXER 0 --#define CONFIG_GIF_PARSER 0 --#define CONFIG_GOPHER_PROTOCOL 0 --#define CONFIG_GRADFUN_FILTER 0 --#define CONFIG_GRAPHMONITOR_FILTER 0 --#define CONFIG_GREMLIN_DPCM_DECODER 0 --#define CONFIG_GREYEDGE_FILTER 0 --#define CONFIG_GSM_DECODER 0 --#define CONFIG_GSM_DEMUXER 0 --#define CONFIG_GSM_MS_AT_DECODER 0 --#define CONFIG_GSM_MS_DECODER 0 --#define CONFIG_GSM_MUXER 0 --#define CONFIG_GSM_PARSER 0 --#define CONFIG_GXF_DEMUXER 0 --#define CONFIG_GXF_MUXER 0 --#define CONFIG_H261_DECODER 0 --#define CONFIG_H261_DEMUXER 0 --#define CONFIG_H261_ENCODER 0 --#define CONFIG_H261_MUXER 0 --#define CONFIG_H261_PARSER 0 --#define CONFIG_H263_DECODER 0 --#define CONFIG_H263_DEMUXER 0 --#define CONFIG_H263_ENCODER 0 --#define CONFIG_H263I_DECODER 0 --#define CONFIG_H263_MUXER 0 --#define CONFIG_H263_PARSER 0 --#define CONFIG_H263P_DECODER 0 --#define CONFIG_H263P_ENCODER 0 --#define CONFIG_H263_V4L2M2M_DECODER 0 --#define CONFIG_H263_V4L2M2M_ENCODER 0 --#define CONFIG_H263_VAAPI_HWACCEL 0 --#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 --#define CONFIG_H264_AMF_ENCODER 0 --#define CONFIG_H264_CRYSTALHD_DECODER 0 --#define CONFIG_H264_CUVID_DECODER 0 --#define CONFIG_H264_D3D11VA2_HWACCEL 0 --#define CONFIG_H264_D3D11VA_HWACCEL 0 --#define CONFIG_H264_DECODER 0 --#define CONFIG_H264_DEMUXER 0 --#define CONFIG_H264_DXVA2_HWACCEL 0 --#define CONFIG_H264_MEDIACODEC_DECODER 0 --#define CONFIG_H264_METADATA_BSF 0 --#define CONFIG_H264_MMAL_DECODER 0 --#define CONFIG_H264_MP4TOANNEXB_BSF 0 --#define CONFIG_H264_MUXER 0 --#define CONFIG_H264_NVDEC_HWACCEL 0 --#define CONFIG_H264_NVENC_ENCODER 0 --#define CONFIG_H264_OMX_ENCODER 0 --#define CONFIG_H264_PARSER 0 --#define CONFIG_H264_QSV_DECODER 0 --#define CONFIG_H264_QSV_ENCODER 0 --#define CONFIG_H264_REDUNDANT_PPS_BSF 0 --#define CONFIG_H264_RKMPP_DECODER 0 --#define CONFIG_H264_V4L2M2M_DECODER 0 --#define CONFIG_H264_V4L2M2M_ENCODER 0 --#define CONFIG_H264_VAAPI_ENCODER 0 --#define CONFIG_H264_VAAPI_HWACCEL 0 --#define CONFIG_H264_VDPAU_HWACCEL 0 --#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 --#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 --#define CONFIG_HAAS_FILTER 0 --#define CONFIG_HALDCLUT_FILTER 0 --#define CONFIG_HALDCLUTSRC_FILTER 0 --#define CONFIG_HAP_DECODER 0 --#define CONFIG_HAP_ENCODER 0 --#define CONFIG_HAPQA_EXTRACT_BSF 0 --#define CONFIG_HASH_MUXER 0 --#define CONFIG_HCOM_DECODER 0 --#define CONFIG_HCOM_DEMUXER 0 --#define CONFIG_HDCD_FILTER 0 --#define CONFIG_HDS_MUXER 0 --#define CONFIG_HEADPHONE_FILTER 0 --#define CONFIG_HEVC_AMF_ENCODER 0 --#define CONFIG_HEVC_CUVID_DECODER 0 --#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 --#define CONFIG_HEVC_D3D11VA_HWACCEL 0 --#define CONFIG_HEVC_DECODER 0 --#define CONFIG_HEVC_DEMUXER 0 --#define CONFIG_HEVC_DXVA2_HWACCEL 0 --#define CONFIG_HEVC_MEDIACODEC_DECODER 0 --#define CONFIG_HEVC_METADATA_BSF 0 --#define CONFIG_HEVC_MP4TOANNEXB_BSF 0 --#define CONFIG_HEVC_MUXER 0 --#define CONFIG_HEVC_NVDEC_HWACCEL 0 --#define CONFIG_HEVC_NVENC_ENCODER 0 --#define CONFIG_HEVC_PARSER 0 --#define CONFIG_HEVC_QSV_DECODER 0 --#define CONFIG_HEVC_QSV_ENCODER 0 --#define CONFIG_HEVC_RKMPP_DECODER 0 --#define CONFIG_HEVC_V4L2M2M_DECODER 0 --#define CONFIG_HEVC_V4L2M2M_ENCODER 0 --#define CONFIG_HEVC_VAAPI_ENCODER 0 --#define CONFIG_HEVC_VAAPI_HWACCEL 0 --#define CONFIG_HEVC_VDPAU_HWACCEL 0 --#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0 --#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 --#define CONFIG_HFLIP_FILTER 0 --#define CONFIG_HIGHPASS_FILTER 0 --#define CONFIG_HIGHSHELF_FILTER 0 --#define CONFIG_HILBERT_FILTER 0 --#define CONFIG_HISTEQ_FILTER 0 --#define CONFIG_HISTOGRAM_FILTER 0 --#define CONFIG_HLS_DEMUXER 0 --#define CONFIG_HLS_MUXER 0 --#define CONFIG_HLS_PROTOCOL 0 --#define CONFIG_HNM4_VIDEO_DECODER 0 --#define CONFIG_HNM_DEMUXER 0 --#define CONFIG_HQDN3D_FILTER 0 --#define CONFIG_HQ_HQA_DECODER 0 --#define CONFIG_HQX_DECODER 0 --#define CONFIG_HQX_FILTER 0 --#define CONFIG_HSTACK_FILTER 0 --#define CONFIG_HTTP_PROTOCOL 0 --#define CONFIG_HTTPPROXY_PROTOCOL 0 --#define CONFIG_HTTPS_PROTOCOL 0 --#define CONFIG_HUE_FILTER 0 --#define CONFIG_HUFFYUV_DECODER 0 --#define CONFIG_HUFFYUV_ENCODER 0 --#define CONFIG_HWACCELS 0 --#define CONFIG_HWDOWNLOAD_FILTER 0 --#define CONFIG_HWMAP_FILTER 0 --#define CONFIG_HWUPLOAD_CUDA_FILTER 0 --#define CONFIG_HWUPLOAD_FILTER 0 --#define CONFIG_HYMT_DECODER 0 --#define CONFIG_HYSTERESIS_FILTER 0 --#define CONFIG_IAC_DECODER 0 --#define CONFIG_ICECAST_PROTOCOL 0 --#define CONFIG_ICO_DEMUXER 0 --#define CONFIG_ICO_MUXER 0 --#define CONFIG_IDCIN_DECODER 0 --#define CONFIG_IDCIN_DEMUXER 0 --#define CONFIG_IDET_FILTER 0 --#define CONFIG_IDF_DECODER 0 --#define CONFIG_IDF_DEMUXER 0 --#define CONFIG_IEC61883_INDEV 0 --#define CONFIG_IFF_DEMUXER 0 --#define CONFIG_IFF_ILBM_DECODER 0 --#define CONFIG_IFV_DEMUXER 0 --#define CONFIG_ILBC_AT_DECODER 0 --#define CONFIG_ILBC_AT_ENCODER 0 --#define CONFIG_ILBC_DECODER 0 --#define CONFIG_ILBC_DEMUXER 0 --#define CONFIG_ILBC_MUXER 0 --#define CONFIG_IL_FILTER 0 --#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 --#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 --#define CONFIG_IMAGE2_DEMUXER 0 --#define CONFIG_IMAGE2_MUXER 0 --#define CONFIG_IMAGE2PIPE_DEMUXER 0 --#define CONFIG_IMAGE2PIPE_MUXER 0 --#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 --#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0 --#define CONFIG_IMC_DECODER 0 --#define CONFIG_IMM4_DECODER 0 --#define CONFIG_IMX_DUMP_HEADER_BSF 0 --#define CONFIG_INDEO2_DECODER 0 --#define CONFIG_INDEO3_DECODER 0 --#define CONFIG_INDEO4_DECODER 0 --#define CONFIG_INDEO5_DECODER 0 --#define CONFIG_INDEVS 0 --#define CONFIG_INFLATE_FILTER 0 --#define CONFIG_INGENIENT_DEMUXER 0 --#define CONFIG_INTERLACE_FILTER 0 --#define CONFIG_INTERLEAVE_FILTER 0 --#define CONFIG_INTERPLAY_ACM_DECODER 0 --#define CONFIG_INTERPLAY_DPCM_DECODER 0 --#define CONFIG_INTERPLAY_VIDEO_DECODER 0 --#define CONFIG_IPMOVIE_DEMUXER 0 --#define CONFIG_IPOD_MUXER 0 --#define CONFIG_IRCAM_DEMUXER 0 --#define CONFIG_IRCAM_MUXER 0 --#define CONFIG_ISMV_MUXER 0 --#define CONFIG_ISS_DEMUXER 0 --#define CONFIG_IV8_DEMUXER 0 --#define CONFIG_IVF_DEMUXER 0 --#define CONFIG_IVF_MUXER 0 --#define CONFIG_IVR_DEMUXER 0 --#define CONFIG_JACK_INDEV 0 --#define CONFIG_JACOSUB_DECODER 0 --#define CONFIG_JACOSUB_DEMUXER 0 --#define CONFIG_JACOSUB_MUXER 0 --#define CONFIG_JOIN_FILTER 0 --#define CONFIG_JPEG2000_DECODER 0 --#define CONFIG_JPEG2000_ENCODER 0 --#define CONFIG_JPEGLS_DECODER 0 --#define CONFIG_JPEGLS_ENCODER 0 --#define CONFIG_JV_DECODER 0 --#define CONFIG_JV_DEMUXER 0 --#define CONFIG_KERNDEINT_FILTER 0 --#define CONFIG_KGV1_DECODER 0 --#define CONFIG_KMSGRAB_INDEV 0 --#define CONFIG_KMVC_DECODER 0 --#define CONFIG_KUX_DEMUXER 0 --#define CONFIG_LADSPA_FILTER 0 --#define CONFIG_LAGARITH_DECODER 0 --#define CONFIG_LAGFUN_FILTER 0 --#define CONFIG_LATM_MUXER 0 --#define CONFIG_LAVFI_INDEV 0 --#define CONFIG_LENSCORRECTION_FILTER 0 --#define CONFIG_LENSFUN_FILTER 0 --#define CONFIG_LIBAOM_AV1_DECODER 0 --#define CONFIG_LIBAOM_AV1_ENCODER 0 --#define CONFIG_LIBARIBB24_DECODER 0 --#define CONFIG_LIBCDIO_INDEV 0 --#define CONFIG_LIBCELT_DECODER 0 --#define CONFIG_LIBCODEC2_DECODER 0 --#define CONFIG_LIBCODEC2_ENCODER 0 --#define CONFIG_LIBDAV1D_DECODER 0 --#define CONFIG_LIBDAVS2_DECODER 0 --#define CONFIG_LIBDC1394_INDEV 0 --#define CONFIG_LIBFDK_AAC_DECODER 0 --#define CONFIG_LIBFDK_AAC_ENCODER 0 --#define CONFIG_LIBGME_DEMUXER 0 --#define CONFIG_LIBGSM_DECODER 0 --#define CONFIG_LIBGSM_ENCODER 0 --#define CONFIG_LIBGSM_MS_DECODER 0 --#define CONFIG_LIBGSM_MS_ENCODER 0 --#define CONFIG_LIBILBC_DECODER 0 --#define CONFIG_LIBILBC_ENCODER 0 --#define CONFIG_LIBKVAZAAR_ENCODER 0 --#define CONFIG_LIBMODPLUG_DEMUXER 0 --#define CONFIG_LIBMP3LAME_ENCODER 0 --#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 --#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 --#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 --#define CONFIG_LIBOPENH264_DECODER 0 --#define CONFIG_LIBOPENH264_ENCODER 0 --#define CONFIG_LIBOPENJPEG_DECODER 0 --#define CONFIG_LIBOPENJPEG_ENCODER 0 --#define CONFIG_LIBOPENMPT_DEMUXER 0 --#define CONFIG_LIBOPUS_DECODER 0 --#define CONFIG_LIBOPUS_ENCODER 0 --#define CONFIG_LIBRSVG_DECODER 0 --#define CONFIG_LIBRTMPE_PROTOCOL 0 --#define CONFIG_LIBRTMP_PROTOCOL 0 --#define CONFIG_LIBRTMPS_PROTOCOL 0 --#define CONFIG_LIBRTMPTE_PROTOCOL 0 --#define CONFIG_LIBRTMPT_PROTOCOL 0 --#define CONFIG_LIBSHINE_ENCODER 0 --#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 --#define CONFIG_LIBSPEEX_DECODER 0 --#define CONFIG_LIBSPEEX_ENCODER 0 --#define CONFIG_LIBSRT_PROTOCOL 0 --#define CONFIG_LIBSSH_PROTOCOL 0 --#define CONFIG_LIBTHEORA_ENCODER 0 --#define CONFIG_LIBTWOLAME_ENCODER 0 --#define CONFIG_LIBVMAF_FILTER 0 --#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 --#define CONFIG_LIBVORBIS_DECODER 0 --#define CONFIG_LIBVORBIS_ENCODER 0 --#define CONFIG_LIBVPX_VP8_DECODER 0 --#define CONFIG_LIBVPX_VP8_ENCODER 0 --#define CONFIG_LIBVPX_VP9_DECODER 0 --#define CONFIG_LIBVPX_VP9_ENCODER 0 --#define CONFIG_LIBWAVPACK_ENCODER 0 --#define CONFIG_LIBWEBP_ANIM_ENCODER 0 --#define CONFIG_LIBWEBP_ENCODER 0 --#define CONFIG_LIBX262_ENCODER 0 --#define CONFIG_LIBX264_ENCODER 0 --#define CONFIG_LIBX264RGB_ENCODER 0 --#define CONFIG_LIBX265_ENCODER 0 --#define CONFIG_LIBXAVS2_ENCODER 0 --#define CONFIG_LIBXAVS_ENCODER 0 --#define CONFIG_LIBXVID_ENCODER 0 --#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 --#define CONFIG_LIFE_FILTER 0 --#define CONFIG_LIMITER_FILTER 0 --#define CONFIG_LIVE_FLV_DEMUXER 0 --#define CONFIG_LJPEG_ENCODER 0 --#define CONFIG_LMLM4_DEMUXER 0 --#define CONFIG_LOAS_DEMUXER 0 --#define CONFIG_LOCO_DECODER 0 --#define CONFIG_LOOP_FILTER 0 --#define CONFIG_LOUDNORM_FILTER 0 --#define CONFIG_LOWPASS_FILTER 0 --#define CONFIG_LOWSHELF_FILTER 0 --#define CONFIG_LRC_DEMUXER 0 --#define CONFIG_LRC_MUXER 0 --#define CONFIG_LSCR_DECODER 0 --#define CONFIG_LUMAKEY_FILTER 0 --#define CONFIG_LUT1D_FILTER 0 --#define CONFIG_LUT2_FILTER 0 --#define CONFIG_LUT3D_FILTER 0 --#define CONFIG_LUT_FILTER 0 --#define CONFIG_LUTRGB_FILTER 0 --#define CONFIG_LUTYUV_FILTER 0 --#define CONFIG_LV2_FILTER 0 --#define CONFIG_LVF_DEMUXER 0 --#define CONFIG_LXF_DEMUXER 0 --#define CONFIG_M101_DECODER 0 --#define CONFIG_M4V_DEMUXER 0 --#define CONFIG_M4V_MUXER 0 --#define CONFIG_MACE3_DECODER 0 --#define CONFIG_MACE6_DECODER 0 --#define CONFIG_MAGICYUV_DECODER 0 --#define CONFIG_MAGICYUV_ENCODER 0 --#define CONFIG_MANDELBROT_FILTER 0 --#define CONFIG_MASKEDCLAMP_FILTER 0 --#define CONFIG_MASKEDMERGE_FILTER 0 --#define CONFIG_MASKFUN_FILTER 0 --#define CONFIG_MATROSKA_AUDIO_MUXER 0 --#define CONFIG_MATROSKA_DEMUXER 0 --#define CONFIG_MATROSKA_MUXER 0 --#define CONFIG_MCDEINT_FILTER 0 --#define CONFIG_MCOMPAND_FILTER 0 --#define CONFIG_MD5_MUXER 0 --#define CONFIG_MD5_PROTOCOL 0 --#define CONFIG_MDEC_DECODER 0 --#define CONFIG_MERGEPLANES_FILTER 0 --#define CONFIG_MESTIMATE_FILTER 0 --#define CONFIG_METADATA_FILTER 0 --#define CONFIG_METASOUND_DECODER 0 --#define CONFIG_MGSTS_DEMUXER 0 --#define CONFIG_MICRODVD_DECODER 0 --#define CONFIG_MICRODVD_DEMUXER 0 --#define CONFIG_MICRODVD_MUXER 0 --#define CONFIG_MIDEQUALIZER_FILTER 0 --#define CONFIG_MIMIC_DECODER 0 --#define CONFIG_MINTERPOLATE_FILTER 0 --#define CONFIG_MIX_FILTER 0 --#define CONFIG_MJPEG_2000_DEMUXER 0 --#define CONFIG_MJPEG2JPEG_BSF 0 --#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0 --#define CONFIG_MJPEGB_DECODER 0 --#define CONFIG_MJPEG_CUVID_DECODER 0 --#define CONFIG_MJPEG_DECODER 0 --#define CONFIG_MJPEG_DEMUXER 0 --#define CONFIG_MJPEG_ENCODER 0 --#define CONFIG_MJPEG_MUXER 0 --#define CONFIG_MJPEG_NVDEC_HWACCEL 0 --#define CONFIG_MJPEG_PARSER 0 --#define CONFIG_MJPEG_QSV_ENCODER 0 --#define CONFIG_MJPEG_VAAPI_ENCODER 0 --#define CONFIG_MJPEG_VAAPI_HWACCEL 0 --#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 --#define CONFIG_MLP_DECODER 0 --#define CONFIG_MLP_DEMUXER 0 --#define CONFIG_MLP_ENCODER 0 --#define CONFIG_MLP_MUXER 0 --#define CONFIG_MLP_PARSER 0 --#define CONFIG_MLV_DEMUXER 0 --#define CONFIG_MM_DEMUXER 0 --#define CONFIG_MMF_DEMUXER 0 --#define CONFIG_MMF_MUXER 0 --#define CONFIG_MMSH_PROTOCOL 0 --#define CONFIG_MMST_PROTOCOL 0 --#define CONFIG_MMVIDEO_DECODER 0 --#define CONFIG_MOTIONPIXELS_DECODER 0 --#define CONFIG_MOV2TEXTSUB_BSF 0 --#define CONFIG_MOV_DEMUXER 0 --#define CONFIG_MOVIE_FILTER 0 --#define CONFIG_MOV_MUXER 0 --#define CONFIG_MOVTEXT_DECODER 0 --#define CONFIG_MOVTEXT_ENCODER 0 --#define CONFIG_MP1_AT_DECODER 0 --#define CONFIG_MP1_DECODER 0 --#define CONFIG_MP1FLOAT_DECODER 0 --#define CONFIG_MP2_AT_DECODER 0 --#define CONFIG_MP2_DECODER 0 --#define CONFIG_MP2_ENCODER 0 --#define CONFIG_MP2FIXED_ENCODER 0 --#define CONFIG_MP2FLOAT_DECODER 0 --#define CONFIG_MP2_MUXER 0 --#define CONFIG_MP3ADU_DECODER 0 --#define CONFIG_MP3ADUFLOAT_DECODER 0 --#define CONFIG_MP3_AT_DECODER 0 --#define CONFIG_MP3_DEMUXER 0 --#define CONFIG_MP3FLOAT_DECODER 0 --#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0 --#define CONFIG_MP3_MUXER 0 --#define CONFIG_MP3ON4_DECODER 0 --#define CONFIG_MP3ON4FLOAT_DECODER 0 --#define CONFIG_MP4_MUXER 0 --#define CONFIG_MPC7_DECODER 0 --#define CONFIG_MPC8_DECODER 0 --#define CONFIG_MPC8_DEMUXER 0 --#define CONFIG_MPC_DEMUXER 0 --#define CONFIG_MPDECIMATE_FILTER 0 --#define CONFIG_MPEG1_CUVID_DECODER 0 --#define CONFIG_MPEG1_NVDEC_HWACCEL 0 --#define CONFIG_MPEG1SYSTEM_MUXER 0 --#define CONFIG_MPEG1_V4L2M2M_DECODER 0 --#define CONFIG_MPEG1VCD_MUXER 0 --#define CONFIG_MPEG1_VDPAU_HWACCEL 0 --#define CONFIG_MPEG1VIDEO_DECODER 0 --#define CONFIG_MPEG1VIDEO_ENCODER 0 --#define CONFIG_MPEG1VIDEO_MUXER 0 --#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 --#define CONFIG_MPEG1_XVMC_HWACCEL 0 --#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 --#define CONFIG_MPEG2_CUVID_DECODER 0 --#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 --#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 --#define CONFIG_MPEG2DVD_MUXER 0 --#define CONFIG_MPEG2_DXVA2_HWACCEL 0 --#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 --#define CONFIG_MPEG2_METADATA_BSF 0 --#define CONFIG_MPEG2_MMAL_DECODER 0 --#define CONFIG_MPEG2_NVDEC_HWACCEL 0 --#define CONFIG_MPEG2_QSV_DECODER 0 --#define CONFIG_MPEG2_QSV_ENCODER 0 --#define CONFIG_MPEG2SVCD_MUXER 0 --#define CONFIG_MPEG2_V4L2M2M_DECODER 0 --#define CONFIG_MPEG2_VAAPI_ENCODER 0 --#define CONFIG_MPEG2_VAAPI_HWACCEL 0 --#define CONFIG_MPEG2_VDPAU_HWACCEL 0 --#define CONFIG_MPEG2VIDEO_DECODER 0 --#define CONFIG_MPEG2VIDEO_ENCODER 0 --#define CONFIG_MPEG2VIDEO_MUXER 0 --#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 --#define CONFIG_MPEG2VOB_MUXER 0 --#define CONFIG_MPEG2_XVMC_HWACCEL 0 --#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 --#define CONFIG_MPEG4_CUVID_DECODER 0 --#define CONFIG_MPEG4_DECODER 0 --#define CONFIG_MPEG4_ENCODER 0 --#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 --#define CONFIG_MPEG4_MMAL_DECODER 0 --#define CONFIG_MPEG4_NVDEC_HWACCEL 0 --#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0 --#define CONFIG_MPEG4_V4L2M2M_DECODER 0 --#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 --#define CONFIG_MPEG4_VAAPI_HWACCEL 0 --#define CONFIG_MPEG4_VDPAU_HWACCEL 0 --#define CONFIG_MPEG4VIDEO_PARSER 0 --#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 --#define CONFIG_MPEGAUDIO_PARSER 0 --#define CONFIG_MPEGPS_DEMUXER 0 --#define CONFIG_MPEGTS_DEMUXER 0 --#define CONFIG_MPEGTS_MUXER 0 --#define CONFIG_MPEGTSRAW_DEMUXER 0 --#define CONFIG_MPEGVIDEO_DECODER 0 --#define CONFIG_MPEGVIDEO_DEMUXER 0 --#define CONFIG_MPEGVIDEO_PARSER 0 --#define CONFIG_MPJPEG_DEMUXER 0 --#define CONFIG_MPJPEG_MUXER 0 --#define CONFIG_MPL2_DECODER 0 --#define CONFIG_MPL2_DEMUXER 0 --#define CONFIG_MPSUB_DEMUXER 0 --#define CONFIG_MPTESTSRC_FILTER 0 --#define CONFIG_MSA1_DECODER 0 --#define CONFIG_MSCC_DECODER 0 --#define CONFIG_MSF_DEMUXER 0 --#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 --#define CONFIG_MSMPEG4V1_DECODER 0 --#define CONFIG_MSMPEG4V2_DECODER 0 --#define CONFIG_MSMPEG4V2_ENCODER 0 --#define CONFIG_MSMPEG4V3_DECODER 0 --#define CONFIG_MSMPEG4V3_ENCODER 0 --#define CONFIG_MSNWC_TCP_DEMUXER 0 --#define CONFIG_MSRLE_DECODER 0 --#define CONFIG_MSS1_DECODER 0 --#define CONFIG_MSS2_DECODER 0 --#define CONFIG_MSVIDEO1_DECODER 0 --#define CONFIG_MSVIDEO1_ENCODER 0 --#define CONFIG_MSZH_DECODER 0 --#define CONFIG_MTAF_DEMUXER 0 --#define CONFIG_MTS2_DECODER 0 --#define CONFIG_MTV_DEMUXER 0 --#define CONFIG_MUSX_DEMUXER 0 --#define CONFIG_MUXERS 0 --#define CONFIG_MVC1_DECODER 0 --#define CONFIG_MVC2_DECODER 0 --#define CONFIG_MV_DEMUXER 0 --#define CONFIG_MVI_DEMUXER 0 --#define CONFIG_MWSC_DECODER 0 --#define CONFIG_MXF_D10_MUXER 0 --#define CONFIG_MXF_DEMUXER 0 --#define CONFIG_MXF_MUXER 0 --#define CONFIG_MXF_OPATOM_MUXER 0 --#define CONFIG_MXG_DEMUXER 0 --#define CONFIG_MXPEG_DECODER 0 --#define CONFIG_NC_DEMUXER 0 --#define CONFIG_NEGATE_FILTER 0 --#define CONFIG_NELLYMOSER_DECODER 0 --#define CONFIG_NELLYMOSER_ENCODER 0 --#define CONFIG_NISTSPHERE_DEMUXER 0 --#define CONFIG_NLMEANS_FILTER 0 --#define CONFIG_NLMEANS_OPENCL_FILTER 0 --#define CONFIG_NNEDI_FILTER 0 --#define CONFIG_NOFORMAT_FILTER 0 --#define CONFIG_NOISE_BSF 0 --#define CONFIG_NOISE_FILTER 0 --#define CONFIG_NORMALIZE_FILTER 0 --#define CONFIG_NSP_DEMUXER 0 --#define CONFIG_NSV_DEMUXER 0 --#define CONFIG_NULL_FILTER 0 --#define CONFIG_NULL_MUXER 0 --#define CONFIG_NULLSINK_FILTER 0 --#define CONFIG_NULLSRC_FILTER 0 --#define CONFIG_NUT_DEMUXER 0 --#define CONFIG_NUT_MUXER 0 --#define CONFIG_NUV_DECODER 0 --#define CONFIG_NUV_DEMUXER 0 --#define CONFIG_NVENC_ENCODER 0 --#define CONFIG_NVENC_H264_ENCODER 0 --#define CONFIG_NVENC_HEVC_ENCODER 0 --#define CONFIG_OCR_FILTER 0 --#define CONFIG_OCV_FILTER 0 --#define CONFIG_OGA_MUXER 0 --#define CONFIG_OGG_DEMUXER 0 --#define CONFIG_OGG_MUXER 0 --#define CONFIG_OGV_MUXER 0 --#define CONFIG_OMA_DEMUXER 0 --#define CONFIG_OMA_MUXER 0 --#define CONFIG_ON2AVC_DECODER 0 --#define CONFIG_OPENAL_INDEV 0 --#define CONFIG_OPENCLSRC_FILTER 0 --#define CONFIG_OPENGL_OUTDEV 0 --#define CONFIG_OPUS_DECODER 0 --#define CONFIG_OPUS_ENCODER 0 --#define CONFIG_OPUS_MUXER 0 --#define CONFIG_OPUS_PARSER 0 --#define CONFIG_OSCILLOSCOPE_FILTER 0 --#define CONFIG_OSS_INDEV 0 --#define CONFIG_OSS_OUTDEV 0 --#define CONFIG_OUTDEVS 0 --#define CONFIG_OVERLAY_FILTER 0 --#define CONFIG_OVERLAY_OPENCL_FILTER 0 --#define CONFIG_OVERLAY_QSV_FILTER 0 --#define CONFIG_OWDENOISE_FILTER 0 --#define CONFIG_PAD_FILTER 0 --#define CONFIG_PAF_AUDIO_DECODER 0 --#define CONFIG_PAF_DEMUXER 0 --#define CONFIG_PAF_VIDEO_DECODER 0 --#define CONFIG_PAL100BARS_FILTER 0 --#define CONFIG_PAL75BARS_FILTER 0 --#define CONFIG_PALETTEGEN_FILTER 0 --#define CONFIG_PALETTEUSE_FILTER 0 --#define CONFIG_PAM_DECODER 0 --#define CONFIG_PAM_ENCODER 0 --#define CONFIG_PAN_FILTER 0 --#define CONFIG_PBM_DECODER 0 --#define CONFIG_PBM_ENCODER 0 --#define CONFIG_PCM_ALAW_AT_DECODER 0 --#define CONFIG_PCM_ALAW_AT_ENCODER 0 --#define CONFIG_PCM_ALAW_DECODER 0 --#define CONFIG_PCM_ALAW_DEMUXER 0 --#define CONFIG_PCM_ALAW_ENCODER 0 --#define CONFIG_PCM_ALAW_MUXER 0 --#define CONFIG_PCM_BLURAY_DECODER 0 --#define CONFIG_PCM_DVD_DECODER 0 --#define CONFIG_PCM_DVD_ENCODER 0 --#define CONFIG_PCM_F16LE_DECODER 0 --#define CONFIG_PCM_F24LE_DECODER 0 --#define CONFIG_PCM_F32BE_DECODER 0 --#define CONFIG_PCM_F32BE_DEMUXER 0 --#define CONFIG_PCM_F32BE_ENCODER 0 --#define CONFIG_PCM_F32BE_MUXER 0 --#define CONFIG_PCM_F32LE_DECODER 0 --#define CONFIG_PCM_F32LE_DEMUXER 0 --#define CONFIG_PCM_F32LE_ENCODER 0 --#define CONFIG_PCM_F32LE_MUXER 0 --#define CONFIG_PCM_F64BE_DECODER 0 --#define CONFIG_PCM_F64BE_DEMUXER 0 --#define CONFIG_PCM_F64BE_ENCODER 0 --#define CONFIG_PCM_F64BE_MUXER 0 --#define CONFIG_PCM_F64LE_DECODER 0 --#define CONFIG_PCM_F64LE_DEMUXER 0 --#define CONFIG_PCM_F64LE_ENCODER 0 --#define CONFIG_PCM_F64LE_MUXER 0 --#define CONFIG_PCM_LXF_DECODER 0 --#define CONFIG_PCM_MULAW_AT_DECODER 0 --#define CONFIG_PCM_MULAW_AT_ENCODER 0 --#define CONFIG_PCM_MULAW_DECODER 0 --#define CONFIG_PCM_MULAW_DEMUXER 0 --#define CONFIG_PCM_MULAW_ENCODER 0 --#define CONFIG_PCM_MULAW_MUXER 0 --#define CONFIG_PCM_S16BE_DECODER 0 --#define CONFIG_PCM_S16BE_DEMUXER 0 --#define CONFIG_PCM_S16BE_ENCODER 0 --#define CONFIG_PCM_S16BE_MUXER 0 --#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 --#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 --#define CONFIG_PCM_S16LE_DECODER 0 --#define CONFIG_PCM_S16LE_DEMUXER 0 --#define CONFIG_PCM_S16LE_ENCODER 0 --#define CONFIG_PCM_S16LE_MUXER 0 --#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 --#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 --#define CONFIG_PCM_S24BE_DECODER 0 --#define CONFIG_PCM_S24BE_DEMUXER 0 --#define CONFIG_PCM_S24BE_ENCODER 0 --#define CONFIG_PCM_S24BE_MUXER 0 --#define CONFIG_PCM_S24DAUD_DECODER 0 --#define CONFIG_PCM_S24DAUD_ENCODER 0 --#define CONFIG_PCM_S24LE_DECODER 0 --#define CONFIG_PCM_S24LE_DEMUXER 0 --#define CONFIG_PCM_S24LE_ENCODER 0 --#define CONFIG_PCM_S24LE_MUXER 0 --#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 --#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 --#define CONFIG_PCM_S32BE_DECODER 0 --#define CONFIG_PCM_S32BE_DEMUXER 0 --#define CONFIG_PCM_S32BE_ENCODER 0 --#define CONFIG_PCM_S32BE_MUXER 0 --#define CONFIG_PCM_S32LE_DECODER 0 --#define CONFIG_PCM_S32LE_DEMUXER 0 --#define CONFIG_PCM_S32LE_ENCODER 0 --#define CONFIG_PCM_S32LE_MUXER 0 --#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 --#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 --#define CONFIG_PCM_S64BE_DECODER 0 --#define CONFIG_PCM_S64BE_ENCODER 0 --#define CONFIG_PCM_S64LE_DECODER 0 --#define CONFIG_PCM_S64LE_ENCODER 0 --#define CONFIG_PCM_S8_DECODER 0 --#define CONFIG_PCM_S8_DEMUXER 0 --#define CONFIG_PCM_S8_ENCODER 0 --#define CONFIG_PCM_S8_MUXER 0 --#define CONFIG_PCM_S8_PLANAR_DECODER 0 --#define CONFIG_PCM_S8_PLANAR_ENCODER 0 --#define CONFIG_PCM_U16BE_DECODER 0 --#define CONFIG_PCM_U16BE_DEMUXER 0 --#define CONFIG_PCM_U16BE_ENCODER 0 --#define CONFIG_PCM_U16BE_MUXER 0 --#define CONFIG_PCM_U16LE_DECODER 0 --#define CONFIG_PCM_U16LE_DEMUXER 0 --#define CONFIG_PCM_U16LE_ENCODER 0 --#define CONFIG_PCM_U16LE_MUXER 0 --#define CONFIG_PCM_U24BE_DECODER 0 --#define CONFIG_PCM_U24BE_DEMUXER 0 --#define CONFIG_PCM_U24BE_ENCODER 0 --#define CONFIG_PCM_U24BE_MUXER 0 --#define CONFIG_PCM_U24LE_DECODER 0 --#define CONFIG_PCM_U24LE_DEMUXER 0 --#define CONFIG_PCM_U24LE_ENCODER 0 --#define CONFIG_PCM_U24LE_MUXER 0 --#define CONFIG_PCM_U32BE_DECODER 0 --#define CONFIG_PCM_U32BE_DEMUXER 0 --#define CONFIG_PCM_U32BE_ENCODER 0 --#define CONFIG_PCM_U32BE_MUXER 0 --#define CONFIG_PCM_U32LE_DECODER 0 --#define CONFIG_PCM_U32LE_DEMUXER 0 --#define CONFIG_PCM_U32LE_ENCODER 0 --#define CONFIG_PCM_U32LE_MUXER 0 --#define CONFIG_PCM_U8_DECODER 0 --#define CONFIG_PCM_U8_DEMUXER 0 --#define CONFIG_PCM_U8_ENCODER 0 --#define CONFIG_PCM_U8_MUXER 0 --#define CONFIG_PCM_VIDC_DECODER 0 --#define CONFIG_PCM_VIDC_DEMUXER 0 --#define CONFIG_PCM_VIDC_ENCODER 0 --#define CONFIG_PCM_VIDC_MUXER 0 --#define CONFIG_PCM_ZORK_DECODER 0 --#define CONFIG_PCX_DECODER 0 --#define CONFIG_PCX_ENCODER 0 --#define CONFIG_PERMS_FILTER 0 --#define CONFIG_PERSPECTIVE_FILTER 0 --#define CONFIG_PGM_DECODER 0 --#define CONFIG_PGM_ENCODER 0 --#define CONFIG_PGMYUV_DECODER 0 --#define CONFIG_PGMYUV_ENCODER 0 --#define CONFIG_PGSSUB_DECODER 0 --#define CONFIG_PHASE_FILTER 0 --#define CONFIG_PICTOR_DECODER 0 --#define CONFIG_PIPE_PROTOCOL 0 --#define CONFIG_PIXDESCTEST_FILTER 0 --#define CONFIG_PIXLET_DECODER 0 --#define CONFIG_PIXSCOPE_FILTER 0 --#define CONFIG_PJS_DECODER 0 --#define CONFIG_PJS_DEMUXER 0 --#define CONFIG_PMP_DEMUXER 0 --#define CONFIG_PNG_DECODER 0 --#define CONFIG_PNG_ENCODER 0 --#define CONFIG_PNG_PARSER 0 --#define CONFIG_PNM_PARSER 0 --#define CONFIG_PP7_FILTER 0 --#define CONFIG_PP_FILTER 0 --#define CONFIG_PPM_DECODER 0 --#define CONFIG_PPM_ENCODER 0 --#define CONFIG_PREMULTIPLY_FILTER 0 --#define CONFIG_PREWITT_FILTER 0 --#define CONFIG_PREWITT_OPENCL_FILTER 0 --#define CONFIG_PROCAMP_VAAPI_FILTER 0 --#define CONFIG_PROGRAM_OPENCL_FILTER 0 --#define CONFIG_PROMPEG_PROTOCOL 0 --#define CONFIG_PRORES_AW_ENCODER 0 --#define CONFIG_PRORES_DECODER 0 --#define CONFIG_PRORES_ENCODER 0 --#define CONFIG_PRORES_KS_ENCODER 0 --#define CONFIG_PRORES_METADATA_BSF 0 --#define CONFIG_PROSUMER_DECODER 0 --#define CONFIG_PROTOCOLS 0 --#define CONFIG_PSD_DECODER 0 --#define CONFIG_PSEUDOCOLOR_FILTER 0 --#define CONFIG_PSNR_FILTER 0 --#define CONFIG_PSP_MUXER 0 --#define CONFIG_PTX_DECODER 0 --#define CONFIG_PULLUP_FILTER 0 --#define CONFIG_PULSE_INDEV 0 --#define CONFIG_PULSE_OUTDEV 0 --#define CONFIG_PVA_DEMUXER 0 --#define CONFIG_PVF_DEMUXER 0 --#define CONFIG_QCELP_DECODER 0 --#define CONFIG_QCP_DEMUXER 0 --#define CONFIG_QDM2_AT_DECODER 0 --#define CONFIG_QDM2_DECODER 0 --#define CONFIG_QDMC_AT_DECODER 0 --#define CONFIG_QDMC_DECODER 0 --#define CONFIG_QDRAW_DECODER 0 --#define CONFIG_QPEG_DECODER 0 --#define CONFIG_QP_FILTER 0 --#define CONFIG_QTRLE_DECODER 0 --#define CONFIG_QTRLE_ENCODER 0 --#define CONFIG_R10K_DECODER 0 --#define CONFIG_R10K_ENCODER 0 --#define CONFIG_R210_DECODER 0 --#define CONFIG_R210_ENCODER 0 --#define CONFIG_R3D_DEMUXER 0 --#define CONFIG_RA_144_DECODER 0 --#define CONFIG_RA_144_ENCODER 0 --#define CONFIG_RA_288_DECODER 0 --#define CONFIG_RALF_DECODER 0 --#define CONFIG_RANDOM_FILTER 0 --#define CONFIG_RASC_DECODER 0 --#define CONFIG_RAWVIDEO_DECODER 0 --#define CONFIG_RAWVIDEO_DEMUXER 0 --#define CONFIG_RAWVIDEO_ENCODER 0 --#define CONFIG_RAWVIDEO_MUXER 0 --#define CONFIG_READEIA608_FILTER 0 --#define CONFIG_READVITC_FILTER 0 --#define CONFIG_REALTEXT_DECODER 0 --#define CONFIG_REALTEXT_DEMUXER 0 --#define CONFIG_REALTIME_FILTER 0 --#define CONFIG_REDSPARK_DEMUXER 0 --#define CONFIG_REMAP_FILTER 0 --#define CONFIG_REMOVE_EXTRADATA_BSF 0 --#define CONFIG_REMOVEGRAIN_FILTER 0 --#define CONFIG_REMOVELOGO_FILTER 0 --#define CONFIG_REPEATFIELDS_FILTER 0 --#define CONFIG_REPLAYGAIN_FILTER 0 --#define CONFIG_RESAMPLE_FILTER 0 --#define CONFIG_REVERSE_FILTER 0 --#define CONFIG_RGBASHIFT_FILTER 0 --#define CONFIG_RGBTESTSRC_FILTER 0 --#define CONFIG_RL2_DECODER 0 --#define CONFIG_RL2_DEMUXER 0 --#define CONFIG_RM_DEMUXER 0 --#define CONFIG_RM_MUXER 0 --#define CONFIG_ROBERTS_FILTER 0 --#define CONFIG_ROBERTS_OPENCL_FILTER 0 --#define CONFIG_ROQ_DECODER 0 --#define CONFIG_ROQ_DEMUXER 0 --#define CONFIG_ROQ_DPCM_DECODER 0 --#define CONFIG_ROQ_DPCM_ENCODER 0 --#define CONFIG_ROQ_ENCODER 0 --#define CONFIG_ROQ_MUXER 0 --#define CONFIG_ROTATE_FILTER 0 --#define CONFIG_RPL_DEMUXER 0 --#define CONFIG_RPZA_DECODER 0 --#define CONFIG_RSCC_DECODER 0 --#define CONFIG_RSD_DEMUXER 0 --#define CONFIG_RSO_DEMUXER 0 --#define CONFIG_RSO_MUXER 0 --#define CONFIG_RTMPE_PROTOCOL 0 --#define CONFIG_RTMP_PROTOCOL 0 --#define CONFIG_RTMPS_PROTOCOL 0 --#define CONFIG_RTMPTE_PROTOCOL 0 --#define CONFIG_RTMPT_PROTOCOL 0 --#define CONFIG_RTMPTS_PROTOCOL 0 --#define CONFIG_RTP_DEMUXER 0 --#define CONFIG_RTP_MPEGTS_MUXER 0 --#define CONFIG_RTP_MUXER 0 --#define CONFIG_RTP_PROTOCOL 0 --#define CONFIG_RTSP_DEMUXER 0 --#define CONFIG_RTSP_MUXER 0 --#define CONFIG_RUBBERBAND_FILTER 0 --#define CONFIG_RV10_DECODER 0 --#define CONFIG_RV10_ENCODER 0 --#define CONFIG_RV20_DECODER 0 --#define CONFIG_RV20_ENCODER 0 --#define CONFIG_RV30_DECODER 0 --#define CONFIG_RV30_PARSER 0 --#define CONFIG_RV40_DECODER 0 --#define CONFIG_RV40_PARSER 0 --#define CONFIG_S302M_DECODER 0 --#define CONFIG_S302M_ENCODER 0 --#define CONFIG_S337M_DEMUXER 0 --#define CONFIG_SAB_FILTER 0 --#define CONFIG_SAMI_DECODER 0 --#define CONFIG_SAMI_DEMUXER 0 --#define CONFIG_SANM_DECODER 0 --#define CONFIG_SAP_DEMUXER 0 --#define CONFIG_SAP_MUXER 0 --#define CONFIG_SBC_DECODER 0 --#define CONFIG_SBC_DEMUXER 0 --#define CONFIG_SBC_ENCODER 0 --#define CONFIG_SBC_MUXER 0 --#define CONFIG_SBC_PARSER 0 --#define CONFIG_SBG_DEMUXER 0 --#define CONFIG_SCALE2REF_FILTER 0 --#define CONFIG_SCALE_CUDA_FILTER 0 --#define CONFIG_SCALE_FILTER 0 --#define CONFIG_SCALE_NPP_FILTER 0 --#define CONFIG_SCALE_QSV_FILTER 0 --#define CONFIG_SCALE_VAAPI_FILTER 0 --#define CONFIG_SCC_DEMUXER 0 --#define CONFIG_SCC_MUXER 0 --#define CONFIG_SCPR_DECODER 0 --#define CONFIG_SCREENPRESSO_DECODER 0 --#define CONFIG_SCTP_PROTOCOL 0 --#define CONFIG_SDL2_OUTDEV 0 --#define CONFIG_SDP_DEMUXER 0 --#define CONFIG_SDR2_DEMUXER 0 --#define CONFIG_SDS_DEMUXER 0 --#define CONFIG_SDX2_DPCM_DECODER 0 --#define CONFIG_SDX_DEMUXER 0 --#define CONFIG_SEGAFILM_DEMUXER 0 --#define CONFIG_SEGAFILM_MUXER 0 --#define CONFIG_SEGMENT_MUXER 0 --#define CONFIG_SELECT_FILTER 0 --#define CONFIG_SELECTIVECOLOR_FILTER 0 --#define CONFIG_SENDCMD_FILTER 0 --#define CONFIG_SEPARATEFIELDS_FILTER 0 --#define CONFIG_SER_DEMUXER 0 --#define CONFIG_SETDAR_FILTER 0 --#define CONFIG_SETFIELD_FILTER 0 --#define CONFIG_SETPARAMS_FILTER 0 --#define CONFIG_SETPTS_FILTER 0 --#define CONFIG_SETRANGE_FILTER 0 --#define CONFIG_SETSAR_FILTER 0 --#define CONFIG_SETTB_FILTER 0 --#define CONFIG_SGI_DECODER 0 --#define CONFIG_SGI_ENCODER 0 --#define CONFIG_SGIRLE_DECODER 0 --#define CONFIG_SHARPNESS_VAAPI_FILTER 0 --#define CONFIG_SHEERVIDEO_DECODER 0 --#define CONFIG_SHORTEN_DECODER 0 --#define CONFIG_SHORTEN_DEMUXER 0 --#define CONFIG_SHOWCQT_FILTER 0 --#define CONFIG_SHOWFREQS_FILTER 0 --#define CONFIG_SHOWINFO_FILTER 0 --#define CONFIG_SHOWPALETTE_FILTER 0 --#define CONFIG_SHOWSPATIAL_FILTER 0 --#define CONFIG_SHOWSPECTRUM_FILTER 0 --#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 --#define CONFIG_SHOWVOLUME_FILTER 0 --#define CONFIG_SHOWWAVES_FILTER 0 --#define CONFIG_SHOWWAVESPIC_FILTER 0 --#define CONFIG_SHUFFLEFRAMES_FILTER 0 --#define CONFIG_SHUFFLEPLANES_FILTER 0 --#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 --#define CONFIG_SIDECHAINGATE_FILTER 0 --#define CONFIG_SIDEDATA_FILTER 0 --#define CONFIG_SIFF_DEMUXER 0 --#define CONFIG_SIGNALSTATS_FILTER 0 --#define CONFIG_SIGNATURE_FILTER 0 --#define CONFIG_SILENCEDETECT_FILTER 0 --#define CONFIG_SILENCEREMOVE_FILTER 0 --#define CONFIG_SINC_FILTER 0 --#define CONFIG_SINE_FILTER 0 --#define CONFIG_SINGLEJPEG_MUXER 0 --#define CONFIG_SIPR_DECODER 0 --#define CONFIG_SIPR_PARSER 0 --#define CONFIG_SLN_DEMUXER 0 --#define CONFIG_SMACKAUD_DECODER 0 --#define CONFIG_SMACKER_DECODER 0 --#define CONFIG_SMACKER_DEMUXER 0 --#define CONFIG_SMARTBLUR_FILTER 0 --#define CONFIG_SMC_DECODER 0 --#define CONFIG_SMJPEG_DEMUXER 0 --#define CONFIG_SMJPEG_MUXER 0 --#define CONFIG_SMOOTHSTREAMING_MUXER 0 --#define CONFIG_SMPTEBARS_FILTER 0 --#define CONFIG_SMPTEHDBARS_FILTER 0 --#define CONFIG_SMUSH_DEMUXER 0 --#define CONFIG_SMVJPEG_DECODER 0 --#define CONFIG_SNDIO_INDEV 0 --#define CONFIG_SNDIO_OUTDEV 0 --#define CONFIG_SNOW_DECODER 0 --#define CONFIG_SNOW_ENCODER 0 --#define CONFIG_SOBEL_FILTER 0 --#define CONFIG_SOBEL_OPENCL_FILTER 0 --#define CONFIG_SOFALIZER_FILTER 0 --#define CONFIG_SOL_DEMUXER 0 --#define CONFIG_SOL_DPCM_DECODER 0 --#define CONFIG_SONIC_DECODER 0 --#define CONFIG_SONIC_ENCODER 0 --#define CONFIG_SONIC_LS_ENCODER 0 --#define CONFIG_SOX_DEMUXER 0 --#define CONFIG_SOX_MUXER 0 --#define CONFIG_SP5X_DECODER 0 --#define CONFIG_SPDIF_DEMUXER 0 --#define CONFIG_SPDIF_MUXER 0 --#define CONFIG_SPECTRUMSYNTH_FILTER 0 --#define CONFIG_SPEEDHQ_DECODER 0 --#define CONFIG_SPLIT_FILTER 0 --#define CONFIG_SPP_FILTER 0 --#define CONFIG_SPX_MUXER 0 --#define CONFIG_SR_FILTER 0 --#define CONFIG_SRGC_DECODER 0 --#define CONFIG_SRT_DECODER 0 --#define CONFIG_SRT_DEMUXER 0 --#define CONFIG_SRT_ENCODER 0 --#define CONFIG_SRT_MUXER 0 --#define CONFIG_SRTP_PROTOCOL 0 --#define CONFIG_SSA_DECODER 0 --#define CONFIG_SSA_ENCODER 0 --#define CONFIG_SSIM_FILTER 0 --#define CONFIG_STEREO3D_FILTER 0 --#define CONFIG_STEREOTOOLS_FILTER 0 --#define CONFIG_STEREOWIDEN_FILTER 0 --#define CONFIG_STL_DECODER 0 --#define CONFIG_STL_DEMUXER 0 --#define CONFIG_STR_DEMUXER 0 --#define CONFIG_STREAM_SEGMENT_MUXER 0 --#define CONFIG_STREAMSELECT_FILTER 0 --#define CONFIG_SUBFILE_PROTOCOL 0 --#define CONFIG_SUBRIP_DECODER 0 --#define CONFIG_SUBRIP_ENCODER 0 --#define CONFIG_SUBTITLES_FILTER 0 --#define CONFIG_SUBVIEWER1_DECODER 0 --#define CONFIG_SUBVIEWER1_DEMUXER 0 --#define CONFIG_SUBVIEWER_DECODER 0 --#define CONFIG_SUBVIEWER_DEMUXER 0 --#define CONFIG_SUNRAST_DECODER 0 --#define CONFIG_SUNRAST_ENCODER 0 --#define CONFIG_SUP_DEMUXER 0 --#define CONFIG_SUPER2XSAI_FILTER 0 --#define CONFIG_SUPEREQUALIZER_FILTER 0 --#define CONFIG_SUP_MUXER 0 --#define CONFIG_SURROUND_FILTER 0 --#define CONFIG_SVAG_DEMUXER 0 --#define CONFIG_SVQ1_DECODER 0 --#define CONFIG_SVQ1_ENCODER 0 --#define CONFIG_SVQ3_DECODER 0 --#define CONFIG_SWAPRECT_FILTER 0 --#define CONFIG_SWAPUV_FILTER 0 --#define CONFIG_SWF_DEMUXER 0 --#define CONFIG_SWF_MUXER 0 --#define CONFIG_TAK_DECODER 0 --#define CONFIG_TAK_DEMUXER 0 --#define CONFIG_TAK_PARSER 0 --#define CONFIG_TARGA_DECODER 0 --#define CONFIG_TARGA_ENCODER 0 --#define CONFIG_TARGA_Y216_DECODER 0 --#define CONFIG_TBLEND_FILTER 0 --#define CONFIG_TCP_PROTOCOL 0 --#define CONFIG_TDSC_DECODER 0 --#define CONFIG_TEDCAPTIONS_DEMUXER 0 --#define CONFIG_TEE_MUXER 0 --#define CONFIG_TEE_PROTOCOL 0 --#define CONFIG_TELECINE_FILTER 0 --#define CONFIG_TESTSRC2_FILTER 0 --#define CONFIG_TESTSRC_FILTER 0 --#define CONFIG_TEXT2MOVSUB_BSF 0 --#define CONFIG_TEXT_DECODER 0 --#define CONFIG_TEXT_ENCODER 0 --#define CONFIG_TG2_MUXER 0 --#define CONFIG_TGP_MUXER 0 --#define CONFIG_THEORA_DECODER 0 --#define CONFIG_THP_DECODER 0 --#define CONFIG_THP_DEMUXER 0 --#define CONFIG_THREEDOSTR_DEMUXER 0 --#define CONFIG_THRESHOLD_FILTER 0 --#define CONFIG_THUMBNAIL_CUDA_FILTER 0 --#define CONFIG_THUMBNAIL_FILTER 0 --#define CONFIG_TIERTEXSEQ_DEMUXER 0 --#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 --#define CONFIG_TIFF_DECODER 0 --#define CONFIG_TIFF_ENCODER 0 --#define CONFIG_TILE_FILTER 0 --#define CONFIG_TINTERLACE_FILTER 0 --#define CONFIG_TLS_PROTOCOL 0 --#define CONFIG_TLUT2_FILTER 0 --#define CONFIG_TMIX_FILTER 0 --#define CONFIG_TMV_DECODER 0 --#define CONFIG_TMV_DEMUXER 0 --#define CONFIG_TONEMAP_FILTER 0 --#define CONFIG_TONEMAP_OPENCL_FILTER 0 --#define CONFIG_TPAD_FILTER 0 --#define CONFIG_TRACE_HEADERS_BSF 0 --#define CONFIG_TRANSPOSE_FILTER 0 --#define CONFIG_TRANSPOSE_NPP_FILTER 0 --#define CONFIG_TRANSPOSE_OPENCL_FILTER 0 --#define CONFIG_TRANSPOSE_VAAPI_FILTER 0 --#define CONFIG_TREBLE_FILTER 0 --#define CONFIG_TREMOLO_FILTER 0 --#define CONFIG_TRIM_FILTER 0 --#define CONFIG_TRUEHD_CORE_BSF 0 --#define CONFIG_TRUEHD_DECODER 0 --#define CONFIG_TRUEHD_DEMUXER 0 --#define CONFIG_TRUEHD_ENCODER 0 --#define CONFIG_TRUEHD_MUXER 0 --#define CONFIG_TRUEMOTION1_DECODER 0 --#define CONFIG_TRUEMOTION2_DECODER 0 --#define CONFIG_TRUEMOTION2RT_DECODER 0 --#define CONFIG_TRUESPEECH_DECODER 0 --#define CONFIG_TSCC2_DECODER 0 --#define CONFIG_TSCC_DECODER 0 --#define CONFIG_TTA_DECODER 0 --#define CONFIG_TTA_DEMUXER 0 --#define CONFIG_TTA_ENCODER 0 --#define CONFIG_TTA_MUXER 0 --#define CONFIG_TTY_DEMUXER 0 --#define CONFIG_TWINVQ_DECODER 0 --#define CONFIG_TXD_DECODER 0 --#define CONFIG_TXD_DEMUXER 0 --#define CONFIG_TY_DEMUXER 0 --#define CONFIG_UDPLITE_PROTOCOL 0 --#define CONFIG_UDP_PROTOCOL 0 --#define CONFIG_ULTI_DECODER 0 --#define CONFIG_UNCODEDFRAMECRC_MUXER 0 --#define CONFIG_UNIX_PROTOCOL 0 --#define CONFIG_UNPREMULTIPLY_FILTER 0 --#define CONFIG_UNSHARP_FILTER 0 --#define CONFIG_UNSHARP_OPENCL_FILTER 0 --#define CONFIG_USPP_FILTER 0 --#define CONFIG_UTVIDEO_DECODER 0 --#define CONFIG_UTVIDEO_ENCODER 0 --#define CONFIG_V210_DECODER 0 --#define CONFIG_V210_DEMUXER 0 --#define CONFIG_V210_ENCODER 0 --#define CONFIG_V210X_DECODER 0 --#define CONFIG_V210X_DEMUXER 0 --#define CONFIG_V308_DECODER 0 --#define CONFIG_V308_ENCODER 0 --#define CONFIG_V408_DECODER 0 --#define CONFIG_V408_ENCODER 0 --#define CONFIG_V410_DECODER 0 --#define CONFIG_V410_ENCODER 0 --#define CONFIG_V4L2_INDEV 0 --#define CONFIG_V4L2_OUTDEV 0 --#define CONFIG_VAG_DEMUXER 0 --#define CONFIG_VAGUEDENOISER_FILTER 0 --#define CONFIG_VAPOURSYNTH_DEMUXER 0 --#define CONFIG_VB_DECODER 0 --#define CONFIG_VBLE_DECODER 0 --#define CONFIG_VC1_CRYSTALHD_DECODER 0 --#define CONFIG_VC1_CUVID_DECODER 0 --#define CONFIG_VC1_D3D11VA2_HWACCEL 0 --#define CONFIG_VC1_D3D11VA_HWACCEL 0 --#define CONFIG_VC1_DECODER 0 --#define CONFIG_VC1_DEMUXER 0 --#define CONFIG_VC1_DXVA2_HWACCEL 0 --#define CONFIG_VC1IMAGE_DECODER 0 --#define CONFIG_VC1_MMAL_DECODER 0 --#define CONFIG_VC1_MUXER 0 --#define CONFIG_VC1_NVDEC_HWACCEL 0 --#define CONFIG_VC1_PARSER 0 --#define CONFIG_VC1_QSV_DECODER 0 --#define CONFIG_VC1T_DEMUXER 0 --#define CONFIG_VC1T_MUXER 0 --#define CONFIG_VC1_V4L2M2M_DECODER 0 --#define CONFIG_VC1_VAAPI_HWACCEL 0 --#define CONFIG_VC1_VDPAU_HWACCEL 0 --#define CONFIG_VC2_ENCODER 0 --#define CONFIG_VCR1_DECODER 0 --#define CONFIG_VECTORSCOPE_FILTER 0 --#define CONFIG_VFLIP_FILTER 0 --#define CONFIG_VFRDET_FILTER 0 --#define CONFIG_VFWCAP_INDEV 0 --#define CONFIG_VIBRANCE_FILTER 0 --#define CONFIG_VIBRATO_FILTER 0 --#define CONFIG_VIDSTABDETECT_FILTER 0 --#define CONFIG_VIDSTABTRANSFORM_FILTER 0 --#define CONFIG_VIGNETTE_FILTER 0 --#define CONFIG_VIVIDAS_DEMUXER 0 --#define CONFIG_VIVO_DEMUXER 0 --#define CONFIG_VMAFMOTION_FILTER 0 --#define CONFIG_VMDAUDIO_DECODER 0 --#define CONFIG_VMD_DEMUXER 0 --#define CONFIG_VMDVIDEO_DECODER 0 --#define CONFIG_VMNC_DECODER 0 --#define CONFIG_VOBSUB_DEMUXER 0 --#define CONFIG_VOC_DEMUXER 0 --#define CONFIG_VOC_MUXER 0 --#define CONFIG_VOLUMEDETECT_FILTER 0 --#define CONFIG_VOLUME_FILTER 0 --#define CONFIG_VORBIS_DECODER 0 --#define CONFIG_VORBIS_ENCODER 0 --#define CONFIG_VORBIS_PARSER 0 --#define CONFIG_VP3_DECODER 0 --#define CONFIG_VP3_PARSER 0 --#define CONFIG_VP4_DECODER 0 --#define CONFIG_VP5_DECODER 0 --#define CONFIG_VP6A_DECODER 0 --#define CONFIG_VP6_DECODER 0 --#define CONFIG_VP6F_DECODER 0 --#define CONFIG_VP7_DECODER 0 --#define CONFIG_VP8_CUVID_DECODER 0 --#define CONFIG_VP8_MEDIACODEC_DECODER 0 --#define CONFIG_VP8_NVDEC_HWACCEL 0 --#define CONFIG_VP8_QSV_DECODER 0 --#define CONFIG_VP8_RKMPP_DECODER 0 --#define CONFIG_VP8_V4L2M2M_DECODER 0 --#define CONFIG_VP8_V4L2M2M_ENCODER 0 --#define CONFIG_VP8_VAAPI_ENCODER 0 --#define CONFIG_VP8_VAAPI_HWACCEL 0 --#define CONFIG_VP9_CUVID_DECODER 0 --#define CONFIG_VP9_D3D11VA2_HWACCEL 0 --#define CONFIG_VP9_D3D11VA_HWACCEL 0 --#define CONFIG_VP9_DXVA2_HWACCEL 0 --#define CONFIG_VP9_MEDIACODEC_DECODER 0 --#define CONFIG_VP9_METADATA_BSF 0 --#define CONFIG_VP9_NVDEC_HWACCEL 0 --#define CONFIG_VP9_RAW_REORDER_BSF 0 --#define CONFIG_VP9_RKMPP_DECODER 0 --#define CONFIG_VP9_SUPERFRAME_BSF 0 --#define CONFIG_VP9_V4L2M2M_DECODER 0 --#define CONFIG_VP9_VAAPI_ENCODER 0 --#define CONFIG_VP9_VAAPI_HWACCEL 0 --#define CONFIG_VP9_VDPAU_HWACCEL 0 --#define CONFIG_VPK_DEMUXER 0 --#define CONFIG_VPLAYER_DECODER 0 --#define CONFIG_VPLAYER_DEMUXER 0 --#define CONFIG_VPP_QSV_FILTER 0 --#define CONFIG_VQA_DECODER 0 --#define CONFIG_VQF_DEMUXER 0 --#define CONFIG_VSTACK_FILTER 0 --#define CONFIG_W3FDIF_FILTER 0 --#define CONFIG_W64_DEMUXER 0 --#define CONFIG_W64_MUXER 0 --#define CONFIG_WAV_DEMUXER 0 --#define CONFIG_WAVEFORM_FILTER 0 --#define CONFIG_WAV_MUXER 0 --#define CONFIG_WAVPACK_DECODER 0 --#define CONFIG_WAVPACK_ENCODER 0 --#define CONFIG_WC3_DEMUXER 0 --#define CONFIG_WCMV_DECODER 0 --#define CONFIG_WEAVE_FILTER 0 --#define CONFIG_WEBM_CHUNK_MUXER 0 --#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 --#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 --#define CONFIG_WEBM_MUXER 0 --#define CONFIG_WEBP_DECODER 0 --#define CONFIG_WEBP_MUXER 0 --#define CONFIG_WEBVTT_DECODER 0 --#define CONFIG_WEBVTT_DEMUXER 0 --#define CONFIG_WEBVTT_ENCODER 0 --#define CONFIG_WEBVTT_MUXER 0 --#define CONFIG_WMALOSSLESS_DECODER 0 --#define CONFIG_WMAPRO_DECODER 0 --#define CONFIG_WMAV1_DECODER 0 --#define CONFIG_WMAV1_ENCODER 0 --#define CONFIG_WMAV2_DECODER 0 --#define CONFIG_WMAV2_ENCODER 0 --#define CONFIG_WMAVOICE_DECODER 0 --#define CONFIG_WMV1_DECODER 0 --#define CONFIG_WMV1_ENCODER 0 --#define CONFIG_WMV2_DECODER 0 --#define CONFIG_WMV2_ENCODER 0 --#define CONFIG_WMV3_CRYSTALHD_DECODER 0 --#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 --#define CONFIG_WMV3_D3D11VA_HWACCEL 0 --#define CONFIG_WMV3_DECODER 0 --#define CONFIG_WMV3_DXVA2_HWACCEL 0 --#define CONFIG_WMV3IMAGE_DECODER 0 --#define CONFIG_WMV3_NVDEC_HWACCEL 0 --#define CONFIG_WMV3_VAAPI_HWACCEL 0 --#define CONFIG_WMV3_VDPAU_HWACCEL 0 --#define CONFIG_WNV1_DECODER 0 --#define CONFIG_WRAPPED_AVFRAME_DECODER 0 --#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 --#define CONFIG_WSAUD_DEMUXER 0 --#define CONFIG_WSD_DEMUXER 0 --#define CONFIG_WS_SND1_DECODER 0 --#define CONFIG_WSVQA_DEMUXER 0 --#define CONFIG_WTV_DEMUXER 0 --#define CONFIG_WTV_MUXER 0 --#define CONFIG_WV_DEMUXER 0 --#define CONFIG_WVE_DEMUXER 0 --#define CONFIG_WV_MUXER 0 --#define CONFIG_XA_DEMUXER 0 --#define CONFIG_XAN_DPCM_DECODER 0 --#define CONFIG_XAN_WC3_DECODER 0 --#define CONFIG_XAN_WC4_DECODER 0 --#define CONFIG_XBIN_DECODER 0 --#define CONFIG_XBIN_DEMUXER 0 --#define CONFIG_XBM_DECODER 0 --#define CONFIG_XBM_ENCODER 0 --#define CONFIG_XBR_FILTER 0 --#define CONFIG_XCBGRAB_INDEV 0 --#define CONFIG_XFACE_DECODER 0 --#define CONFIG_XFACE_ENCODER 0 --#define CONFIG_XL_DECODER 0 --#define CONFIG_XMA1_DECODER 0 --#define CONFIG_XMA2_DECODER 0 --#define CONFIG_XMA_PARSER 0 --#define CONFIG_XMEDIAN_FILTER 0 --#define CONFIG_XMV_DEMUXER 0 --#define CONFIG_XPM_DECODER 0 --#define CONFIG_XSTACK_FILTER 0 --#define CONFIG_XSUB_DECODER 0 --#define CONFIG_XSUB_ENCODER 0 --#define CONFIG_XVAG_DEMUXER 0 --#define CONFIG_XV_OUTDEV 0 --#define CONFIG_XWD_DECODER 0 --#define CONFIG_XWD_ENCODER 0 --#define CONFIG_XWMA_DEMUXER 0 --#define CONFIG_Y41P_DECODER 0 --#define CONFIG_Y41P_ENCODER 0 --#define CONFIG_YADIF_CUDA_FILTER 0 --#define CONFIG_YADIF_FILTER 0 --#define CONFIG_YLC_DECODER 0 --#define CONFIG_YOP_DECODER 0 --#define CONFIG_YOP_DEMUXER 0 --#define CONFIG_YUV4_DECODER 0 --#define CONFIG_YUV4_ENCODER 0 --#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 --#define CONFIG_YUV4MPEGPIPE_MUXER 0 --#define CONFIG_YUVTESTSRC_FILTER 0 --#define CONFIG_ZERO12V_DECODER 0 --#define CONFIG_ZEROCODEC_DECODER 0 --#define CONFIG_ZLIB_DECODER 0 --#define CONFIG_ZLIB_ENCODER 0 --#define CONFIG_ZMBV_DECODER 0 --#define CONFIG_ZMBV_ENCODER 0 --#define CONFIG_ZMQ_FILTER 0 --#define CONFIG_ZOOMPAN_FILTER 0 --#define CONFIG_ZSCALE_FILTER 0 -diff -Naur a/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c ---- a/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/fft_init_aarch64.c 2023-04-06 12:50:06.969470973 +0200 -@@ -38,8 +38,10 @@ - int cpu_flags = av_get_cpu_flags(); - - if (have_neon(cpu_flags)) { -- s->fft_permute = ff_fft_permute_neon; -- s->fft_calc = ff_fft_calc_neon; -+ if (s->nbits < 17) { -+ s->fft_permute = ff_fft_permute_neon; -+ s->fft_calc = ff_fft_calc_neon; -+ } - #if CONFIG_MDCT - s->imdct_calc = ff_imdct_calc_neon; - s->imdct_half = ff_imdct_half_neon; -diff -Naur a/media/ffvpx/libavcodec/aarch64/fft_neon.S b/media/ffvpx/libavcodec/aarch64/fft_neon.S ---- a/media/ffvpx/libavcodec/aarch64/fft_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/fft_neon.S 2023-04-06 12:50:06.969470973 +0200 -@@ -36,6 +36,7 @@ - - - function fft4_neon -+ AARCH64_VALID_JUMP_TARGET - ld1 {v0.2s,v1.2s,v2.2s,v3.2s}, [x0] - - fadd v4.2s, v0.2s, v1.2s // r0+r1,i0+i1 -@@ -58,6 +59,7 @@ - endfunc - - function fft8_neon -+ AARCH64_VALID_JUMP_TARGET - mov x1, x0 - ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [x0], #32 - ld1 {v16.2s,v17.2s,v18.2s,v19.2s}, [x0] -@@ -108,6 +110,7 @@ - endfunc - - function fft16_neon -+ AARCH64_VALID_JUMP_TARGET - mov x1, x0 - ld1 {v0.2s, v1.2s, v2.2s, v3.2s}, [x0], #32 - ld1 {v16.2s,v17.2s,v18.2s,v19.2s}, [x0], #32 -@@ -337,8 +340,9 @@ - - .macro def_fft n, n2, n4 - function fft\n\()_neon, align=6 -- sub sp, sp, #16 -- stp x28, x30, [sp] -+ AARCH64_VALID_JUMP_TARGET -+ AARCH64_SIGN_LINK_REGISTER -+ stp x28, x30, [sp, #-16]! - add x28, x0, #\n4*2*8 - bl fft\n2\()_neon - mov x0, x28 -@@ -347,6 +351,7 @@ - bl fft\n4\()_neon - sub x0, x28, #\n4*2*8 - ldp x28, x30, [sp], #16 -+ AARCH64_VALIDATE_LINK_REGISTER - movrel x4, X(ff_cos_\n) - mov x2, #\n4>>1 - b fft_pass_neon -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c ---- a/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264chroma_init_aarch64.c 2023-04-06 12:50:06.969470973 +0200 -@@ -28,18 +28,18 @@ - - #include "config.h" - --void ff_put_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_put_h264_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_put_h264_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_put_h264_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_put_h264_chroma_mc2_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_put_h264_chroma_mc2_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); - --void ff_avg_h264_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_avg_h264_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_avg_h264_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_avg_h264_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_avg_h264_chroma_mc2_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_avg_h264_chroma_mc2_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); - - av_cold void ff_h264chroma_init_aarch64(H264ChromaContext *c, int bit_depth) -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S b/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S ---- a/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264cmc_neon.S 2023-04-06 12:50:06.969470973 +0200 -@@ -19,9 +19,11 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config_components.h" -+ - #include "libavutil/aarch64/asm.S" - --/* chroma_mc8(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ -+/* chroma_mc8(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ - .macro h264_chroma_mc8 type, codec=h264 - function ff_\type\()_\codec\()_chroma_mc8_neon, export=1 - .ifc \type,avg -@@ -191,7 +193,7 @@ - endfunc - .endm - --/* chroma_mc4(uint8_t *dst, uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ -+/* chroma_mc4(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, int h, int x, int y) */ - .macro h264_chroma_mc4 type, codec=h264 - function ff_\type\()_\codec\()_chroma_mc4_neon, export=1 - .ifc \type,avg -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c ---- a/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264dsp_init_aarch64.c 2023-04-06 12:49:40.248394688 +0200 -@@ -69,19 +69,42 @@ - void ff_h264_idct_dc_add_neon(uint8_t *dst, int16_t *block, int stride); - void ff_h264_idct_add16_neon(uint8_t *dst, const int *block_offset, - int16_t *block, int stride, -- const uint8_t nnzc[6*8]); -+ const uint8_t nnzc[5 * 8]); - void ff_h264_idct_add16intra_neon(uint8_t *dst, const int *block_offset, - int16_t *block, int stride, -- const uint8_t nnzc[6*8]); -+ const uint8_t nnzc[5 * 8]); - void ff_h264_idct_add8_neon(uint8_t **dest, const int *block_offset, - int16_t *block, int stride, -- const uint8_t nnzc[6*8]); -+ const uint8_t nnzc[15 * 8]); - - void ff_h264_idct8_add_neon(uint8_t *dst, int16_t *block, int stride); - void ff_h264_idct8_dc_add_neon(uint8_t *dst, int16_t *block, int stride); - void ff_h264_idct8_add4_neon(uint8_t *dst, const int *block_offset, - int16_t *block, int stride, -- const uint8_t nnzc[6*8]); -+ const uint8_t nnzc[5 * 8]); -+ -+void ff_h264_v_loop_filter_luma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta, int8_t *tc0); -+void ff_h264_h_loop_filter_luma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta, int8_t *tc0); -+void ff_h264_v_loop_filter_luma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta); -+void ff_h264_h_loop_filter_luma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta); -+void ff_h264_v_loop_filter_chroma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta, int8_t *tc0); -+void ff_h264_h_loop_filter_chroma_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta, int8_t *tc0); -+void ff_h264_h_loop_filter_chroma422_neon_10(uint8_t *pix, ptrdiff_t stride, int alpha, -+ int beta, int8_t *tc0); -+void ff_h264_v_loop_filter_chroma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, -+ int alpha, int beta); -+void ff_h264_h_loop_filter_chroma_intra_neon_10(uint8_t *pix, ptrdiff_t stride, -+ int alpha, int beta); -+void ff_h264_h_loop_filter_chroma422_intra_neon_10(uint8_t *pix, ptrdiff_t stride, -+ int alpha, int beta); -+void ff_h264_h_loop_filter_chroma_mbaff_intra_neon_10(uint8_t *pix, ptrdiff_t stride, -+ int alpha, int beta); - - av_cold void ff_h264dsp_init_aarch64(H264DSPContext *c, const int bit_depth, - const int chroma_format_idc) -@@ -125,5 +148,19 @@ - c->h264_idct8_add = ff_h264_idct8_add_neon; - c->h264_idct8_dc_add = ff_h264_idct8_dc_add_neon; - c->h264_idct8_add4 = ff_h264_idct8_add4_neon; -+ } else if (have_neon(cpu_flags) && bit_depth == 10) { -+ c->h264_v_loop_filter_chroma = ff_h264_v_loop_filter_chroma_neon_10; -+ c->h264_v_loop_filter_chroma_intra = ff_h264_v_loop_filter_chroma_intra_neon_10; -+ -+ if (chroma_format_idc <= 1) { -+ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon_10; -+ c->h264_h_loop_filter_chroma_intra = ff_h264_h_loop_filter_chroma_intra_neon_10; -+ c->h264_h_loop_filter_chroma_mbaff_intra = ff_h264_h_loop_filter_chroma_mbaff_intra_neon_10; -+ } else { -+ c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma422_neon_10; -+ c->h264_h_loop_filter_chroma_mbaff = ff_h264_h_loop_filter_chroma_neon_10; -+ c->h264_h_loop_filter_chroma_intra = ff_h264_h_loop_filter_chroma422_intra_neon_10; -+ c->h264_h_loop_filter_chroma_mbaff_intra = ff_h264_h_loop_filter_chroma_intra_neon_10; -+ } - } - } -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S b/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S ---- a/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264dsp_neon.S 2023-04-06 12:49:40.248394688 +0200 -@@ -110,7 +110,6 @@ - - function ff_h264_v_loop_filter_luma_neon, export=1 - h264_loop_filter_start -- sxtw x1, w1 - - ld1 {v0.16B}, [x0], x1 - ld1 {v2.16B}, [x0], x1 -@@ -134,7 +133,6 @@ - - function ff_h264_h_loop_filter_luma_neon, export=1 - h264_loop_filter_start -- sxtw x1, w1 - - sub x0, x0, #4 - ld1 {v6.8B}, [x0], x1 -@@ -184,199 +182,198 @@ - - - .macro h264_loop_filter_start_intra -- orr w4, w2, w3 -- cbnz w4, 1f -- ret -+ orr w4, w2, w3 -+ cbnz w4, 1f -+ ret - 1: -- sxtw x1, w1 -- dup v30.16b, w2 // alpha -- dup v31.16b, w3 // beta -+ dup v30.16b, w2 // alpha -+ dup v31.16b, w3 // beta - .endm - - .macro h264_loop_filter_luma_intra -- uabd v16.16b, v7.16b, v0.16b // abs(p0 - q0) -- uabd v17.16b, v6.16b, v7.16b // abs(p1 - p0) -- uabd v18.16b, v1.16b, v0.16b // abs(q1 - q0) -- cmhi v19.16b, v30.16b, v16.16b // < alpha -- cmhi v17.16b, v31.16b, v17.16b // < beta -- cmhi v18.16b, v31.16b, v18.16b // < beta -- -- movi v29.16b, #2 -- ushr v30.16b, v30.16b, #2 // alpha >> 2 -- add v30.16b, v30.16b, v29.16b // (alpha >> 2) + 2 -- cmhi v16.16b, v30.16b, v16.16b // < (alpha >> 2) + 2 -- -- and v19.16b, v19.16b, v17.16b -- and v19.16b, v19.16b, v18.16b -- shrn v20.8b, v19.8h, #4 -- mov x4, v20.d[0] -- cbz x4, 9f -- -- ushll v20.8h, v6.8b, #1 -- ushll v22.8h, v1.8b, #1 -- ushll2 v21.8h, v6.16b, #1 -- ushll2 v23.8h, v1.16b, #1 -- uaddw v20.8h, v20.8h, v7.8b -- uaddw v22.8h, v22.8h, v0.8b -- uaddw2 v21.8h, v21.8h, v7.16b -- uaddw2 v23.8h, v23.8h, v0.16b -- uaddw v20.8h, v20.8h, v1.8b -- uaddw v22.8h, v22.8h, v6.8b -- uaddw2 v21.8h, v21.8h, v1.16b -- uaddw2 v23.8h, v23.8h, v6.16b -- -- rshrn v24.8b, v20.8h, #2 // p0'_1 -- rshrn v25.8b, v22.8h, #2 // q0'_1 -- rshrn2 v24.16b, v21.8h, #2 // p0'_1 -- rshrn2 v25.16b, v23.8h, #2 // q0'_1 -- -- uabd v17.16b, v5.16b, v7.16b // abs(p2 - p0) -- uabd v18.16b, v2.16b, v0.16b // abs(q2 - q0) -- cmhi v17.16b, v31.16b, v17.16b // < beta -- cmhi v18.16b, v31.16b, v18.16b // < beta -- -- and v17.16b, v16.16b, v17.16b // if_2 && if_3 -- and v18.16b, v16.16b, v18.16b // if_2 && if_4 -- -- not v30.16b, v17.16b -- not v31.16b, v18.16b -- -- and v30.16b, v30.16b, v19.16b // if_1 && !(if_2 && if_3) -- and v31.16b, v31.16b, v19.16b // if_1 && !(if_2 && if_4) -- -- and v17.16b, v19.16b, v17.16b // if_1 && if_2 && if_3 -- and v18.16b, v19.16b, v18.16b // if_1 && if_2 && if_4 -- -- //calc p, v7, v6, v5, v4, v17, v7, v6, v5, v4 -- uaddl v26.8h, v5.8b, v7.8b -- uaddl2 v27.8h, v5.16b, v7.16b -- uaddw v26.8h, v26.8h, v0.8b -- uaddw2 v27.8h, v27.8h, v0.16b -- add v20.8h, v20.8h, v26.8h -- add v21.8h, v21.8h, v27.8h -- uaddw v20.8h, v20.8h, v0.8b -- uaddw2 v21.8h, v21.8h, v0.16b -- rshrn v20.8b, v20.8h, #3 // p0'_2 -- rshrn2 v20.16b, v21.8h, #3 // p0'_2 -- uaddw v26.8h, v26.8h, v6.8b -- uaddw2 v27.8h, v27.8h, v6.16b -- rshrn v21.8b, v26.8h, #2 // p1'_2 -- rshrn2 v21.16b, v27.8h, #2 // p1'_2 -- uaddl v28.8h, v4.8b, v5.8b -- uaddl2 v29.8h, v4.16b, v5.16b -- shl v28.8h, v28.8h, #1 -- shl v29.8h, v29.8h, #1 -- add v28.8h, v28.8h, v26.8h -- add v29.8h, v29.8h, v27.8h -- rshrn v19.8b, v28.8h, #3 // p2'_2 -- rshrn2 v19.16b, v29.8h, #3 // p2'_2 -- -- //calc q, v0, v1, v2, v3, v18, v0, v1, v2, v3 -- uaddl v26.8h, v2.8b, v0.8b -- uaddl2 v27.8h, v2.16b, v0.16b -- uaddw v26.8h, v26.8h, v7.8b -- uaddw2 v27.8h, v27.8h, v7.16b -- add v22.8h, v22.8h, v26.8h -- add v23.8h, v23.8h, v27.8h -- uaddw v22.8h, v22.8h, v7.8b -- uaddw2 v23.8h, v23.8h, v7.16b -- rshrn v22.8b, v22.8h, #3 // q0'_2 -- rshrn2 v22.16b, v23.8h, #3 // q0'_2 -- uaddw v26.8h, v26.8h, v1.8b -- uaddw2 v27.8h, v27.8h, v1.16b -- rshrn v23.8b, v26.8h, #2 // q1'_2 -- rshrn2 v23.16b, v27.8h, #2 // q1'_2 -- uaddl v28.8h, v2.8b, v3.8b -- uaddl2 v29.8h, v2.16b, v3.16b -- shl v28.8h, v28.8h, #1 -- shl v29.8h, v29.8h, #1 -- add v28.8h, v28.8h, v26.8h -- add v29.8h, v29.8h, v27.8h -- rshrn v26.8b, v28.8h, #3 // q2'_2 -- rshrn2 v26.16b, v29.8h, #3 // q2'_2 -- -- bit v7.16b, v24.16b, v30.16b // p0'_1 -- bit v0.16b, v25.16b, v31.16b // q0'_1 -- bit v7.16b, v20.16b, v17.16b // p0'_2 -- bit v6.16b, v21.16b, v17.16b // p1'_2 -- bit v5.16b, v19.16b, v17.16b // p2'_2 -- bit v0.16b, v22.16b, v18.16b // q0'_2 -- bit v1.16b, v23.16b, v18.16b // q1'_2 -- bit v2.16b, v26.16b, v18.16b // q2'_2 -+ uabd v16.16b, v7.16b, v0.16b // abs(p0 - q0) -+ uabd v17.16b, v6.16b, v7.16b // abs(p1 - p0) -+ uabd v18.16b, v1.16b, v0.16b // abs(q1 - q0) -+ cmhi v19.16b, v30.16b, v16.16b // < alpha -+ cmhi v17.16b, v31.16b, v17.16b // < beta -+ cmhi v18.16b, v31.16b, v18.16b // < beta -+ -+ movi v29.16b, #2 -+ ushr v30.16b, v30.16b, #2 // alpha >> 2 -+ add v30.16b, v30.16b, v29.16b // (alpha >> 2) + 2 -+ cmhi v16.16b, v30.16b, v16.16b // < (alpha >> 2) + 2 -+ -+ and v19.16b, v19.16b, v17.16b -+ and v19.16b, v19.16b, v18.16b -+ shrn v20.8b, v19.8h, #4 -+ mov x4, v20.d[0] -+ cbz x4, 9f -+ -+ ushll v20.8h, v6.8b, #1 -+ ushll v22.8h, v1.8b, #1 -+ ushll2 v21.8h, v6.16b, #1 -+ ushll2 v23.8h, v1.16b, #1 -+ uaddw v20.8h, v20.8h, v7.8b -+ uaddw v22.8h, v22.8h, v0.8b -+ uaddw2 v21.8h, v21.8h, v7.16b -+ uaddw2 v23.8h, v23.8h, v0.16b -+ uaddw v20.8h, v20.8h, v1.8b -+ uaddw v22.8h, v22.8h, v6.8b -+ uaddw2 v21.8h, v21.8h, v1.16b -+ uaddw2 v23.8h, v23.8h, v6.16b -+ -+ rshrn v24.8b, v20.8h, #2 // p0'_1 -+ rshrn v25.8b, v22.8h, #2 // q0'_1 -+ rshrn2 v24.16b, v21.8h, #2 // p0'_1 -+ rshrn2 v25.16b, v23.8h, #2 // q0'_1 -+ -+ uabd v17.16b, v5.16b, v7.16b // abs(p2 - p0) -+ uabd v18.16b, v2.16b, v0.16b // abs(q2 - q0) -+ cmhi v17.16b, v31.16b, v17.16b // < beta -+ cmhi v18.16b, v31.16b, v18.16b // < beta -+ -+ and v17.16b, v16.16b, v17.16b // if_2 && if_3 -+ and v18.16b, v16.16b, v18.16b // if_2 && if_4 -+ -+ not v30.16b, v17.16b -+ not v31.16b, v18.16b -+ -+ and v30.16b, v30.16b, v19.16b // if_1 && !(if_2 && if_3) -+ and v31.16b, v31.16b, v19.16b // if_1 && !(if_2 && if_4) -+ -+ and v17.16b, v19.16b, v17.16b // if_1 && if_2 && if_3 -+ and v18.16b, v19.16b, v18.16b // if_1 && if_2 && if_4 -+ -+ //calc p, v7, v6, v5, v4, v17, v7, v6, v5, v4 -+ uaddl v26.8h, v5.8b, v7.8b -+ uaddl2 v27.8h, v5.16b, v7.16b -+ uaddw v26.8h, v26.8h, v0.8b -+ uaddw2 v27.8h, v27.8h, v0.16b -+ add v20.8h, v20.8h, v26.8h -+ add v21.8h, v21.8h, v27.8h -+ uaddw v20.8h, v20.8h, v0.8b -+ uaddw2 v21.8h, v21.8h, v0.16b -+ rshrn v20.8b, v20.8h, #3 // p0'_2 -+ rshrn2 v20.16b, v21.8h, #3 // p0'_2 -+ uaddw v26.8h, v26.8h, v6.8b -+ uaddw2 v27.8h, v27.8h, v6.16b -+ rshrn v21.8b, v26.8h, #2 // p1'_2 -+ rshrn2 v21.16b, v27.8h, #2 // p1'_2 -+ uaddl v28.8h, v4.8b, v5.8b -+ uaddl2 v29.8h, v4.16b, v5.16b -+ shl v28.8h, v28.8h, #1 -+ shl v29.8h, v29.8h, #1 -+ add v28.8h, v28.8h, v26.8h -+ add v29.8h, v29.8h, v27.8h -+ rshrn v19.8b, v28.8h, #3 // p2'_2 -+ rshrn2 v19.16b, v29.8h, #3 // p2'_2 -+ -+ //calc q, v0, v1, v2, v3, v18, v0, v1, v2, v3 -+ uaddl v26.8h, v2.8b, v0.8b -+ uaddl2 v27.8h, v2.16b, v0.16b -+ uaddw v26.8h, v26.8h, v7.8b -+ uaddw2 v27.8h, v27.8h, v7.16b -+ add v22.8h, v22.8h, v26.8h -+ add v23.8h, v23.8h, v27.8h -+ uaddw v22.8h, v22.8h, v7.8b -+ uaddw2 v23.8h, v23.8h, v7.16b -+ rshrn v22.8b, v22.8h, #3 // q0'_2 -+ rshrn2 v22.16b, v23.8h, #3 // q0'_2 -+ uaddw v26.8h, v26.8h, v1.8b -+ uaddw2 v27.8h, v27.8h, v1.16b -+ rshrn v23.8b, v26.8h, #2 // q1'_2 -+ rshrn2 v23.16b, v27.8h, #2 // q1'_2 -+ uaddl v28.8h, v2.8b, v3.8b -+ uaddl2 v29.8h, v2.16b, v3.16b -+ shl v28.8h, v28.8h, #1 -+ shl v29.8h, v29.8h, #1 -+ add v28.8h, v28.8h, v26.8h -+ add v29.8h, v29.8h, v27.8h -+ rshrn v26.8b, v28.8h, #3 // q2'_2 -+ rshrn2 v26.16b, v29.8h, #3 // q2'_2 -+ -+ bit v7.16b, v24.16b, v30.16b // p0'_1 -+ bit v0.16b, v25.16b, v31.16b // q0'_1 -+ bit v7.16b, v20.16b, v17.16b // p0'_2 -+ bit v6.16b, v21.16b, v17.16b // p1'_2 -+ bit v5.16b, v19.16b, v17.16b // p2'_2 -+ bit v0.16b, v22.16b, v18.16b // q0'_2 -+ bit v1.16b, v23.16b, v18.16b // q1'_2 -+ bit v2.16b, v26.16b, v18.16b // q2'_2 - .endm - - function ff_h264_v_loop_filter_luma_intra_neon, export=1 -- h264_loop_filter_start_intra -+ h264_loop_filter_start_intra -+ -+ ld1 {v0.16b}, [x0], x1 // q0 -+ ld1 {v1.16b}, [x0], x1 // q1 -+ ld1 {v2.16b}, [x0], x1 // q2 -+ ld1 {v3.16b}, [x0], x1 // q3 -+ sub x0, x0, x1, lsl #3 -+ ld1 {v4.16b}, [x0], x1 // p3 -+ ld1 {v5.16b}, [x0], x1 // p2 -+ ld1 {v6.16b}, [x0], x1 // p1 -+ ld1 {v7.16b}, [x0] // p0 - -- ld1 {v0.16b}, [x0], x1 // q0 -- ld1 {v1.16b}, [x0], x1 // q1 -- ld1 {v2.16b}, [x0], x1 // q2 -- ld1 {v3.16b}, [x0], x1 // q3 -- sub x0, x0, x1, lsl #3 -- ld1 {v4.16b}, [x0], x1 // p3 -- ld1 {v5.16b}, [x0], x1 // p2 -- ld1 {v6.16b}, [x0], x1 // p1 -- ld1 {v7.16b}, [x0] // p0 -- -- h264_loop_filter_luma_intra -- -- sub x0, x0, x1, lsl #1 -- st1 {v5.16b}, [x0], x1 // p2 -- st1 {v6.16b}, [x0], x1 // p1 -- st1 {v7.16b}, [x0], x1 // p0 -- st1 {v0.16b}, [x0], x1 // q0 -- st1 {v1.16b}, [x0], x1 // q1 -- st1 {v2.16b}, [x0] // q2 -+ h264_loop_filter_luma_intra -+ -+ sub x0, x0, x1, lsl #1 -+ st1 {v5.16b}, [x0], x1 // p2 -+ st1 {v6.16b}, [x0], x1 // p1 -+ st1 {v7.16b}, [x0], x1 // p0 -+ st1 {v0.16b}, [x0], x1 // q0 -+ st1 {v1.16b}, [x0], x1 // q1 -+ st1 {v2.16b}, [x0] // q2 - 9: -- ret -+ ret - endfunc - - function ff_h264_h_loop_filter_luma_intra_neon, export=1 -- h264_loop_filter_start_intra -+ h264_loop_filter_start_intra -+ -+ sub x0, x0, #4 -+ ld1 {v4.8b}, [x0], x1 -+ ld1 {v5.8b}, [x0], x1 -+ ld1 {v6.8b}, [x0], x1 -+ ld1 {v7.8b}, [x0], x1 -+ ld1 {v0.8b}, [x0], x1 -+ ld1 {v1.8b}, [x0], x1 -+ ld1 {v2.8b}, [x0], x1 -+ ld1 {v3.8b}, [x0], x1 -+ ld1 {v4.d}[1], [x0], x1 -+ ld1 {v5.d}[1], [x0], x1 -+ ld1 {v6.d}[1], [x0], x1 -+ ld1 {v7.d}[1], [x0], x1 -+ ld1 {v0.d}[1], [x0], x1 -+ ld1 {v1.d}[1], [x0], x1 -+ ld1 {v2.d}[1], [x0], x1 -+ ld1 {v3.d}[1], [x0], x1 -+ -+ transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 -+ -+ h264_loop_filter_luma_intra - -- sub x0, x0, #4 -- ld1 {v4.8b}, [x0], x1 -- ld1 {v5.8b}, [x0], x1 -- ld1 {v6.8b}, [x0], x1 -- ld1 {v7.8b}, [x0], x1 -- ld1 {v0.8b}, [x0], x1 -- ld1 {v1.8b}, [x0], x1 -- ld1 {v2.8b}, [x0], x1 -- ld1 {v3.8b}, [x0], x1 -- ld1 {v4.d}[1], [x0], x1 -- ld1 {v5.d}[1], [x0], x1 -- ld1 {v6.d}[1], [x0], x1 -- ld1 {v7.d}[1], [x0], x1 -- ld1 {v0.d}[1], [x0], x1 -- ld1 {v1.d}[1], [x0], x1 -- ld1 {v2.d}[1], [x0], x1 -- ld1 {v3.d}[1], [x0], x1 -- -- transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 -- -- h264_loop_filter_luma_intra -- -- transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 -- -- sub x0, x0, x1, lsl #4 -- st1 {v4.8b}, [x0], x1 -- st1 {v5.8b}, [x0], x1 -- st1 {v6.8b}, [x0], x1 -- st1 {v7.8b}, [x0], x1 -- st1 {v0.8b}, [x0], x1 -- st1 {v1.8b}, [x0], x1 -- st1 {v2.8b}, [x0], x1 -- st1 {v3.8b}, [x0], x1 -- st1 {v4.d}[1], [x0], x1 -- st1 {v5.d}[1], [x0], x1 -- st1 {v6.d}[1], [x0], x1 -- st1 {v7.d}[1], [x0], x1 -- st1 {v0.d}[1], [x0], x1 -- st1 {v1.d}[1], [x0], x1 -- st1 {v2.d}[1], [x0], x1 -- st1 {v3.d}[1], [x0], x1 -+ transpose_8x16B v4, v5, v6, v7, v0, v1, v2, v3, v21, v23 -+ -+ sub x0, x0, x1, lsl #4 -+ st1 {v4.8b}, [x0], x1 -+ st1 {v5.8b}, [x0], x1 -+ st1 {v6.8b}, [x0], x1 -+ st1 {v7.8b}, [x0], x1 -+ st1 {v0.8b}, [x0], x1 -+ st1 {v1.8b}, [x0], x1 -+ st1 {v2.8b}, [x0], x1 -+ st1 {v3.8b}, [x0], x1 -+ st1 {v4.d}[1], [x0], x1 -+ st1 {v5.d}[1], [x0], x1 -+ st1 {v6.d}[1], [x0], x1 -+ st1 {v7.d}[1], [x0], x1 -+ st1 {v0.d}[1], [x0], x1 -+ st1 {v1.d}[1], [x0], x1 -+ st1 {v2.d}[1], [x0], x1 -+ st1 {v3.d}[1], [x0], x1 - 9: -- ret -+ ret - endfunc - - .macro h264_loop_filter_chroma -@@ -414,7 +411,6 @@ - - function ff_h264_v_loop_filter_chroma_neon, export=1 - h264_loop_filter_start -- sxtw x1, w1 - - sub x0, x0, x1, lsl #1 - ld1 {v18.8B}, [x0], x1 -@@ -433,7 +429,6 @@ - - function ff_h264_h_loop_filter_chroma_neon, export=1 - h264_loop_filter_start -- sxtw x1, w1 - - sub x0, x0, #2 - h_loop_filter_chroma420: -@@ -466,7 +461,6 @@ - endfunc - - function ff_h264_h_loop_filter_chroma422_neon, export=1 -- sxtw x1, w1 - h264_loop_filter_start - add x5, x0, x1 - sub x0, x0, #2 -@@ -480,113 +474,113 @@ - endfunc - - .macro h264_loop_filter_chroma_intra -- uabd v26.8b, v16.8b, v17.8b // abs(p0 - q0) -- uabd v27.8b, v18.8b, v16.8b // abs(p1 - p0) -- uabd v28.8b, v19.8b, v17.8b // abs(q1 - q0) -- cmhi v26.8b, v30.8b, v26.8b // < alpha -- cmhi v27.8b, v31.8b, v27.8b // < beta -- cmhi v28.8b, v31.8b, v28.8b // < beta -- and v26.8b, v26.8b, v27.8b -- and v26.8b, v26.8b, v28.8b -- mov x2, v26.d[0] -- -- ushll v4.8h, v18.8b, #1 -- ushll v6.8h, v19.8b, #1 -- cbz x2, 9f -- uaddl v20.8h, v16.8b, v19.8b -- uaddl v22.8h, v17.8b, v18.8b -- add v20.8h, v20.8h, v4.8h -- add v22.8h, v22.8h, v6.8h -- uqrshrn v24.8b, v20.8h, #2 -- uqrshrn v25.8b, v22.8h, #2 -- bit v16.8b, v24.8b, v26.8b -- bit v17.8b, v25.8b, v26.8b -+ uabd v26.8b, v16.8b, v17.8b // abs(p0 - q0) -+ uabd v27.8b, v18.8b, v16.8b // abs(p1 - p0) -+ uabd v28.8b, v19.8b, v17.8b // abs(q1 - q0) -+ cmhi v26.8b, v30.8b, v26.8b // < alpha -+ cmhi v27.8b, v31.8b, v27.8b // < beta -+ cmhi v28.8b, v31.8b, v28.8b // < beta -+ and v26.8b, v26.8b, v27.8b -+ and v26.8b, v26.8b, v28.8b -+ mov x2, v26.d[0] -+ -+ ushll v4.8h, v18.8b, #1 -+ ushll v6.8h, v19.8b, #1 -+ cbz x2, 9f -+ uaddl v20.8h, v16.8b, v19.8b -+ uaddl v22.8h, v17.8b, v18.8b -+ add v20.8h, v20.8h, v4.8h -+ add v22.8h, v22.8h, v6.8h -+ uqrshrn v24.8b, v20.8h, #2 -+ uqrshrn v25.8b, v22.8h, #2 -+ bit v16.8b, v24.8b, v26.8b -+ bit v17.8b, v25.8b, v26.8b - .endm - - function ff_h264_v_loop_filter_chroma_intra_neon, export=1 -- h264_loop_filter_start_intra -+ h264_loop_filter_start_intra - -- sub x0, x0, x1, lsl #1 -- ld1 {v18.8b}, [x0], x1 -- ld1 {v16.8b}, [x0], x1 -- ld1 {v17.8b}, [x0], x1 -- ld1 {v19.8b}, [x0] -+ sub x0, x0, x1, lsl #1 -+ ld1 {v18.8b}, [x0], x1 -+ ld1 {v16.8b}, [x0], x1 -+ ld1 {v17.8b}, [x0], x1 -+ ld1 {v19.8b}, [x0] - -- h264_loop_filter_chroma_intra -+ h264_loop_filter_chroma_intra - -- sub x0, x0, x1, lsl #1 -- st1 {v16.8b}, [x0], x1 -- st1 {v17.8b}, [x0], x1 -+ sub x0, x0, x1, lsl #1 -+ st1 {v16.8b}, [x0], x1 -+ st1 {v17.8b}, [x0], x1 - - 9: -- ret -+ ret - endfunc - - function ff_h264_h_loop_filter_chroma_mbaff_intra_neon, export=1 -- h264_loop_filter_start_intra -- -- sub x4, x0, #2 -- sub x0, x0, #1 -- ld1 {v18.8b}, [x4], x1 -- ld1 {v16.8b}, [x4], x1 -- ld1 {v17.8b}, [x4], x1 -- ld1 {v19.8b}, [x4], x1 -- -- transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 -- -- h264_loop_filter_chroma_intra -+ h264_loop_filter_start_intra - -- st2 {v16.b,v17.b}[0], [x0], x1 -- st2 {v16.b,v17.b}[1], [x0], x1 -- st2 {v16.b,v17.b}[2], [x0], x1 -- st2 {v16.b,v17.b}[3], [x0], x1 -+ sub x4, x0, #2 -+ sub x0, x0, #1 -+ ld1 {v18.8b}, [x4], x1 -+ ld1 {v16.8b}, [x4], x1 -+ ld1 {v17.8b}, [x4], x1 -+ ld1 {v19.8b}, [x4], x1 -+ -+ transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 -+ -+ h264_loop_filter_chroma_intra -+ -+ st2 {v16.b,v17.b}[0], [x0], x1 -+ st2 {v16.b,v17.b}[1], [x0], x1 -+ st2 {v16.b,v17.b}[2], [x0], x1 -+ st2 {v16.b,v17.b}[3], [x0], x1 - - 9: -- ret -+ ret - endfunc - - function ff_h264_h_loop_filter_chroma_intra_neon, export=1 -- h264_loop_filter_start_intra -+ h264_loop_filter_start_intra - -- sub x4, x0, #2 -- sub x0, x0, #1 -+ sub x4, x0, #2 -+ sub x0, x0, #1 - h_loop_filter_chroma420_intra: -- ld1 {v18.8b}, [x4], x1 -- ld1 {v16.8b}, [x4], x1 -- ld1 {v17.8b}, [x4], x1 -- ld1 {v19.8b}, [x4], x1 -- ld1 {v18.s}[1], [x4], x1 -- ld1 {v16.s}[1], [x4], x1 -- ld1 {v17.s}[1], [x4], x1 -- ld1 {v19.s}[1], [x4], x1 -- -- transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 -- -- h264_loop_filter_chroma_intra -- -- st2 {v16.b,v17.b}[0], [x0], x1 -- st2 {v16.b,v17.b}[1], [x0], x1 -- st2 {v16.b,v17.b}[2], [x0], x1 -- st2 {v16.b,v17.b}[3], [x0], x1 -- st2 {v16.b,v17.b}[4], [x0], x1 -- st2 {v16.b,v17.b}[5], [x0], x1 -- st2 {v16.b,v17.b}[6], [x0], x1 -- st2 {v16.b,v17.b}[7], [x0], x1 -+ ld1 {v18.8b}, [x4], x1 -+ ld1 {v16.8b}, [x4], x1 -+ ld1 {v17.8b}, [x4], x1 -+ ld1 {v19.8b}, [x4], x1 -+ ld1 {v18.s}[1], [x4], x1 -+ ld1 {v16.s}[1], [x4], x1 -+ ld1 {v17.s}[1], [x4], x1 -+ ld1 {v19.s}[1], [x4], x1 -+ -+ transpose_4x8B v18, v16, v17, v19, v26, v27, v28, v29 -+ -+ h264_loop_filter_chroma_intra -+ -+ st2 {v16.b,v17.b}[0], [x0], x1 -+ st2 {v16.b,v17.b}[1], [x0], x1 -+ st2 {v16.b,v17.b}[2], [x0], x1 -+ st2 {v16.b,v17.b}[3], [x0], x1 -+ st2 {v16.b,v17.b}[4], [x0], x1 -+ st2 {v16.b,v17.b}[5], [x0], x1 -+ st2 {v16.b,v17.b}[6], [x0], x1 -+ st2 {v16.b,v17.b}[7], [x0], x1 - - 9: -- ret -+ ret - endfunc - - function ff_h264_h_loop_filter_chroma422_intra_neon, export=1 -- h264_loop_filter_start_intra -- sub x4, x0, #2 -- add x5, x0, x1, lsl #3 -- sub x0, x0, #1 -- mov x7, x30 -- bl h_loop_filter_chroma420_intra -- sub x0, x5, #1 -- mov x30, x7 -- b h_loop_filter_chroma420_intra -+ h264_loop_filter_start_intra -+ sub x4, x0, #2 -+ add x5, x0, x1, lsl #3 -+ sub x0, x0, #1 -+ mov x7, x30 -+ bl h_loop_filter_chroma420_intra -+ sub x0, x5, #1 -+ mov x30, x7 -+ b h_loop_filter_chroma420_intra - endfunc - - .macro biweight_16 macs, macd -@@ -691,7 +685,6 @@ - - .macro biweight_func w - function ff_biweight_h264_pixels_\w\()_neon, export=1 -- sxtw x2, w2 - lsr w8, w5, #31 - add w7, w7, #1 - eor w8, w8, w6, lsr #30 -@@ -800,7 +793,6 @@ - - .macro weight_func w - function ff_weight_h264_pixels_\w\()_neon, export=1 -- sxtw x1, w1 - cmp w3, #1 - mov w6, #1 - lsl w5, w5, w3 -@@ -827,3 +819,258 @@ - weight_func 16 - weight_func 8 - weight_func 4 -+ -+.macro h264_loop_filter_start_10 -+ cmp w2, #0 -+ ldr w6, [x4] -+ ccmp w3, #0, #0, ne -+ lsl w2, w2, #2 -+ mov v24.S[0], w6 -+ lsl w3, w3, #2 -+ and w8, w6, w6, lsl #16 -+ b.eq 1f -+ ands w8, w8, w8, lsl #8 -+ b.ge 2f -+1: -+ ret -+2: -+.endm -+ -+.macro h264_loop_filter_start_intra_10 -+ orr w4, w2, w3 -+ cbnz w4, 1f -+ ret -+1: -+ lsl w2, w2, #2 -+ lsl w3, w3, #2 -+ dup v30.8h, w2 // alpha -+ dup v31.8h, w3 // beta -+.endm -+ -+.macro h264_loop_filter_chroma_10 -+ dup v22.8h, w2 // alpha -+ dup v23.8h, w3 // beta -+ uxtl v24.8h, v24.8b // tc0 -+ -+ uabd v26.8h, v16.8h, v0.8h // abs(p0 - q0) -+ uabd v28.8h, v18.8h, v16.8h // abs(p1 - p0) -+ uabd v30.8h, v2.8h, v0.8h // abs(q1 - q0) -+ cmhi v26.8h, v22.8h, v26.8h // < alpha -+ cmhi v28.8h, v23.8h, v28.8h // < beta -+ cmhi v30.8h, v23.8h, v30.8h // < beta -+ -+ and v26.16b, v26.16b, v28.16b -+ mov v4.16b, v0.16b -+ sub v4.8h, v4.8h, v16.8h -+ and v26.16b, v26.16b, v30.16b -+ shl v4.8h, v4.8h, #2 -+ mov x8, v26.d[0] -+ mov x9, v26.d[1] -+ sli v24.8h, v24.8h, #8 -+ uxtl v24.8h, v24.8b -+ add v4.8h, v4.8h, v18.8h -+ adds x8, x8, x9 -+ shl v24.8h, v24.8h, #2 -+ -+ b.eq 9f -+ -+ movi v31.8h, #3 // (tc0 - 1) << (BIT_DEPTH - 8)) + 1 -+ uqsub v24.8h, v24.8h, v31.8h -+ sub v4.8h, v4.8h, v2.8h -+ srshr v4.8h, v4.8h, #3 -+ smin v4.8h, v4.8h, v24.8h -+ neg v25.8h, v24.8h -+ smax v4.8h, v4.8h, v25.8h -+ and v4.16b, v4.16b, v26.16b -+ add v16.8h, v16.8h, v4.8h -+ sub v0.8h, v0.8h, v4.8h -+ -+ mvni v4.8h, #0xFC, lsl #8 // 1023 for clipping -+ movi v5.8h, #0 -+ smin v0.8h, v0.8h, v4.8h -+ smin v16.8h, v16.8h, v4.8h -+ smax v0.8h, v0.8h, v5.8h -+ smax v16.8h, v16.8h, v5.8h -+.endm -+ -+function ff_h264_v_loop_filter_chroma_neon_10, export=1 -+ h264_loop_filter_start_10 -+ -+ mov x10, x0 -+ sub x0, x0, x1, lsl #1 -+ ld1 {v18.8h}, [x0 ], x1 -+ ld1 {v0.8h}, [x10], x1 -+ ld1 {v16.8h}, [x0 ], x1 -+ ld1 {v2.8h}, [x10] -+ -+ h264_loop_filter_chroma_10 -+ -+ sub x0, x10, x1, lsl #1 -+ st1 {v16.8h}, [x0], x1 -+ st1 {v0.8h}, [x0], x1 -+9: -+ ret -+endfunc -+ -+function ff_h264_h_loop_filter_chroma_neon_10, export=1 -+ h264_loop_filter_start_10 -+ -+ sub x0, x0, #4 // access the 2nd left pixel -+h_loop_filter_chroma420_10: -+ add x10, x0, x1, lsl #2 -+ ld1 {v18.d}[0], [x0 ], x1 -+ ld1 {v18.d}[1], [x10], x1 -+ ld1 {v16.d}[0], [x0 ], x1 -+ ld1 {v16.d}[1], [x10], x1 -+ ld1 {v0.d}[0], [x0 ], x1 -+ ld1 {v0.d}[1], [x10], x1 -+ ld1 {v2.d}[0], [x0 ], x1 -+ ld1 {v2.d}[1], [x10], x1 -+ -+ transpose_4x8H v18, v16, v0, v2, v28, v29, v30, v31 -+ -+ h264_loop_filter_chroma_10 -+ -+ transpose_4x8H v18, v16, v0, v2, v28, v29, v30, v31 -+ -+ sub x0, x10, x1, lsl #3 -+ st1 {v18.d}[0], [x0], x1 -+ st1 {v16.d}[0], [x0], x1 -+ st1 {v0.d}[0], [x0], x1 -+ st1 {v2.d}[0], [x0], x1 -+ st1 {v18.d}[1], [x0], x1 -+ st1 {v16.d}[1], [x0], x1 -+ st1 {v0.d}[1], [x0], x1 -+ st1 {v2.d}[1], [x0], x1 -+9: -+ ret -+endfunc -+ -+function ff_h264_h_loop_filter_chroma422_neon_10, export=1 -+ h264_loop_filter_start_10 -+ add x5, x0, x1 -+ sub x0, x0, #4 -+ add x1, x1, x1 -+ mov x7, x30 -+ bl h_loop_filter_chroma420_10 -+ mov x30, x7 -+ sub x0, x5, #4 -+ mov v24.s[0], w6 -+ b h_loop_filter_chroma420_10 -+endfunc -+ -+.macro h264_loop_filter_chroma_intra_10 -+ uabd v26.8h, v16.8h, v17.8h // abs(p0 - q0) -+ uabd v27.8h, v18.8h, v16.8h // abs(p1 - p0) -+ uabd v28.8h, v19.8h, v17.8h // abs(q1 - q0) -+ cmhi v26.8h, v30.8h, v26.8h // < alpha -+ cmhi v27.8h, v31.8h, v27.8h // < beta -+ cmhi v28.8h, v31.8h, v28.8h // < beta -+ and v26.16b, v26.16b, v27.16b -+ and v26.16b, v26.16b, v28.16b -+ mov x2, v26.d[0] -+ mov x3, v26.d[1] -+ -+ shl v4.8h, v18.8h, #1 -+ shl v6.8h, v19.8h, #1 -+ -+ adds x2, x2, x3 -+ b.eq 9f -+ -+ add v20.8h, v16.8h, v19.8h -+ add v22.8h, v17.8h, v18.8h -+ add v20.8h, v20.8h, v4.8h -+ add v22.8h, v22.8h, v6.8h -+ urshr v24.8h, v20.8h, #2 -+ urshr v25.8h, v22.8h, #2 -+ bit v16.16b, v24.16b, v26.16b -+ bit v17.16b, v25.16b, v26.16b -+.endm -+ -+function ff_h264_v_loop_filter_chroma_intra_neon_10, export=1 -+ h264_loop_filter_start_intra_10 -+ mov x9, x0 -+ sub x0, x0, x1, lsl #1 -+ ld1 {v18.8h}, [x0], x1 -+ ld1 {v17.8h}, [x9], x1 -+ ld1 {v16.8h}, [x0], x1 -+ ld1 {v19.8h}, [x9] -+ -+ h264_loop_filter_chroma_intra_10 -+ -+ sub x0, x9, x1, lsl #1 -+ st1 {v16.8h}, [x0], x1 -+ st1 {v17.8h}, [x0], x1 -+ -+9: -+ ret -+endfunc -+ -+function ff_h264_h_loop_filter_chroma_mbaff_intra_neon_10, export=1 -+ h264_loop_filter_start_intra_10 -+ -+ sub x4, x0, #4 -+ sub x0, x0, #2 -+ add x9, x4, x1, lsl #1 -+ ld1 {v18.8h}, [x4], x1 -+ ld1 {v17.8h}, [x9], x1 -+ ld1 {v16.8h}, [x4], x1 -+ ld1 {v19.8h}, [x9], x1 -+ -+ transpose_4x8H v18, v16, v17, v19, v26, v27, v28, v29 -+ -+ h264_loop_filter_chroma_intra_10 -+ -+ st2 {v16.h,v17.h}[0], [x0], x1 -+ st2 {v16.h,v17.h}[1], [x0], x1 -+ st2 {v16.h,v17.h}[2], [x0], x1 -+ st2 {v16.h,v17.h}[3], [x0], x1 -+ -+9: -+ ret -+endfunc -+ -+function ff_h264_h_loop_filter_chroma_intra_neon_10, export=1 -+ h264_loop_filter_start_intra_10 -+ sub x4, x0, #4 -+ sub x0, x0, #2 -+h_loop_filter_chroma420_intra_10: -+ add x9, x4, x1, lsl #2 -+ ld1 {v18.4h}, [x4], x1 -+ ld1 {v18.d}[1], [x9], x1 -+ ld1 {v16.4h}, [x4], x1 -+ ld1 {v16.d}[1], [x9], x1 -+ ld1 {v17.4h}, [x4], x1 -+ ld1 {v17.d}[1], [x9], x1 -+ ld1 {v19.4h}, [x4], x1 -+ ld1 {v19.d}[1], [x9], x1 -+ -+ transpose_4x8H v18, v16, v17, v19, v26, v27, v28, v29 -+ -+ h264_loop_filter_chroma_intra_10 -+ -+ st2 {v16.h,v17.h}[0], [x0], x1 -+ st2 {v16.h,v17.h}[1], [x0], x1 -+ st2 {v16.h,v17.h}[2], [x0], x1 -+ st2 {v16.h,v17.h}[3], [x0], x1 -+ st2 {v16.h,v17.h}[4], [x0], x1 -+ st2 {v16.h,v17.h}[5], [x0], x1 -+ st2 {v16.h,v17.h}[6], [x0], x1 -+ st2 {v16.h,v17.h}[7], [x0], x1 -+ -+9: -+ ret -+endfunc -+ -+function ff_h264_h_loop_filter_chroma422_intra_neon_10, export=1 -+ h264_loop_filter_start_intra_10 -+ sub x4, x0, #4 -+ add x5, x0, x1, lsl #3 -+ sub x0, x0, #2 -+ mov x7, x30 -+ bl h_loop_filter_chroma420_intra_10 -+ mov x4, x9 -+ sub x0, x5, #2 -+ mov x30, x7 -+ b h_loop_filter_chroma420_intra_10 -+endfunc -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264idct_neon.S b/media/ffvpx/libavcodec/aarch64/h264idct_neon.S ---- a/media/ffvpx/libavcodec/aarch64/h264idct_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264idct_neon.S 2023-04-06 12:50:06.969470973 +0200 -@@ -24,6 +24,7 @@ - - function ff_h264_idct_add_neon, export=1 - .L_ff_h264_idct_add_neon: -+ AARCH64_VALID_CALL_TARGET - ld1 {v0.4H, v1.4H, v2.4H, v3.4H}, [x1] - sxtw x2, w2 - movi v30.8H, #0 -@@ -79,6 +80,7 @@ - - function ff_h264_idct_dc_add_neon, export=1 - .L_ff_h264_idct_dc_add_neon: -+ AARCH64_VALID_CALL_TARGET - sxtw x2, w2 - mov w3, #0 - ld1r {v2.8H}, [x1] -@@ -155,8 +157,7 @@ - endfunc - - function ff_h264_idct_add8_neon, export=1 -- sub sp, sp, #0x40 -- stp x19, x20, [sp] -+ stp x19, x20, [sp, #-0x40]! - mov x12, x30 - ldp x6, x15, [x0] // dest[0], dest[1] - add x5, x1, #16*4 // block_offset -@@ -185,8 +186,7 @@ - csel x6, x15, x6, eq - cmp x10, #20 - b.lt 1b -- ldp x19, x20, [sp] -- add sp, sp, #0x40 -+ ldp x19, x20, [sp], #0x40 - ret x12 - endfunc - -@@ -266,6 +266,7 @@ - - function ff_h264_idct8_add_neon, export=1 - .L_ff_h264_idct8_add_neon: -+ AARCH64_VALID_CALL_TARGET - movi v19.8H, #0 - sxtw x2, w2 - ld1 {v24.8H, v25.8H}, [x1] -@@ -330,6 +331,7 @@ - - function ff_h264_idct8_dc_add_neon, export=1 - .L_ff_h264_idct8_dc_add_neon: -+ AARCH64_VALID_CALL_TARGET - mov w3, #0 - sxtw x2, w2 - ld1r {v31.8H}, [x1] -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264pred_init.c b/media/ffvpx/libavcodec/aarch64/h264pred_init.c ---- a/media/ffvpx/libavcodec/aarch64/h264pred_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264pred_init.c 2023-04-06 12:49:40.249394729 +0200 -@@ -45,42 +45,84 @@ - void ff_pred8x8_l00_dc_neon(uint8_t *src, ptrdiff_t stride); - void ff_pred8x8_0l0_dc_neon(uint8_t *src, ptrdiff_t stride); - -+void ff_pred16x16_vert_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred16x16_hor_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred16x16_plane_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred16x16_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred16x16_top_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+ -+void ff_pred8x8_vert_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_hor_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_plane_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_128_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_left_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_top_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_l0t_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_0lt_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_l00_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+void ff_pred8x8_0l0_dc_neon_10(uint8_t *src, ptrdiff_t stride); -+ - static av_cold void h264_pred_init_neon(H264PredContext *h, int codec_id, - const int bit_depth, - const int chroma_format_idc) - { -- const int high_depth = bit_depth > 8; -- -- if (high_depth) -- return; -- -- if (chroma_format_idc <= 1) { -- h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vert_neon; -- h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_hor_neon; -- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) -- h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon; -- h->pred8x8[DC_128_PRED8x8 ] = ff_pred8x8_128_dc_neon; -- if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && -- codec_id != AV_CODEC_ID_VP8) { -- h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_neon; -- h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon; -- h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon; -- h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon; -- h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon; -- h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon; -- h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ff_pred8x8_0l0_dc_neon; -+ if (bit_depth == 8) { -+ if (chroma_format_idc <= 1) { -+ h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vert_neon; -+ h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_hor_neon; -+ if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) -+ h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon; -+ h->pred8x8[DC_128_PRED8x8 ] = ff_pred8x8_128_dc_neon; -+ if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && -+ codec_id != AV_CODEC_ID_VP8) { -+ h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_neon; -+ h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon; -+ h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon; -+ h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon; -+ h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon; -+ h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon; -+ h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ff_pred8x8_0l0_dc_neon; -+ } - } -+ -+ h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_neon; -+ h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vert_neon; -+ h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_hor_neon; -+ h->pred16x16[LEFT_DC_PRED8x8] = ff_pred16x16_left_dc_neon; -+ h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon; -+ h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_neon; -+ if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 && -+ codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) -+ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_neon; - } -+ if (bit_depth == 10) { -+ if (chroma_format_idc <= 1) { -+ h->pred8x8[VERT_PRED8x8 ] = ff_pred8x8_vert_neon_10; -+ h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_hor_neon_10; -+ if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) -+ h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon_10; -+ h->pred8x8[DC_128_PRED8x8 ] = ff_pred8x8_128_dc_neon_10; -+ if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && -+ codec_id != AV_CODEC_ID_VP8) { -+ h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_neon_10; -+ h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon_10; -+ h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon_10; -+ h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon_10; -+ h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon_10; -+ h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon_10; -+ h->pred8x8[ALZHEIMER_DC_0L0_PRED8x8] = ff_pred8x8_0l0_dc_neon_10; -+ } -+ } - -- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_neon; -- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vert_neon; -- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_hor_neon; -- h->pred16x16[LEFT_DC_PRED8x8] = ff_pred16x16_left_dc_neon; -- h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon; -- h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_neon; -- if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 && -- codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) -- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_neon; -+ h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_neon_10; -+ h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vert_neon_10; -+ h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_hor_neon_10; -+ h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon_10; -+ if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 && -+ codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) -+ h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_neon_10; -+ } - } - - av_cold void ff_h264_pred_init_aarch64(H264PredContext *h, int codec_id, -diff -Naur a/media/ffvpx/libavcodec/aarch64/h264pred_neon.S b/media/ffvpx/libavcodec/aarch64/h264pred_neon.S ---- a/media/ffvpx/libavcodec/aarch64/h264pred_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/h264pred_neon.S 2023-04-06 12:49:40.249394729 +0200 -@@ -81,8 +81,8 @@ - .L_pred16x16_dc_end: - mov w3, #8 - 6: st1 {v0.16b}, [x0], x1 -- st1 {v0.16b}, [x0], x1 - subs w3, w3, #1 -+ st1 {v0.16b}, [x0], x1 - b.ne 6b - ret - endfunc -@@ -91,8 +91,8 @@ - sub x2, x0, #1 - mov w3, #16 - 1: ld1r {v0.16b}, [x2], x1 -- st1 {v0.16b}, [x0], x1 - subs w3, w3, #1 -+ st1 {v0.16b}, [x0], x1 - b.ne 1b - ret - endfunc -@@ -102,9 +102,9 @@ - add x1, x1, x1 - ld1 {v0.16b}, [x2], x1 - mov w3, #8 --1: st1 {v0.16b}, [x0], x1 -+1: subs w3, w3, #1 -+ st1 {v0.16b}, [x0], x1 - st1 {v0.16b}, [x2], x1 -- subs w3, w3, #1 - b.ne 1b - ret - endfunc -@@ -158,8 +158,8 @@ - add v1.8h, v1.8h, v2.8h - sqshrun2 v0.16b, v1.8h, #5 - add v1.8h, v1.8h, v3.8h -- st1 {v0.16b}, [x0], x1 - subs w3, w3, #1 -+ st1 {v0.16b}, [x0], x1 - b.ne 1b - ret - endfunc -@@ -175,8 +175,8 @@ - sub x2, x0, #1 - mov w3, #8 - 1: ld1r {v0.8b}, [x2], x1 -- st1 {v0.8b}, [x0], x1 - subs w3, w3, #1 -+ st1 {v0.8b}, [x0], x1 - b.ne 1b - ret - endfunc -@@ -186,9 +186,9 @@ - lsl x1, x1, #1 - ld1 {v0.8b}, [x2], x1 - mov w3, #4 --1: st1 {v0.8b}, [x0], x1 -+1: subs w3, w3, #1 -+ st1 {v0.8b}, [x0], x1 - st1 {v0.8b}, [x2], x1 -- subs w3, w3, #1 - b.ne 1b - ret - endfunc -@@ -232,9 +232,9 @@ - mov w3, #8 - 1: - sqshrun v0.8b, v1.8h, #5 -+ subs w3, w3, #1 - add v1.8h, v1.8h, v2.8h - st1 {v0.8b}, [x0], x1 -- subs w3, w3, #1 - b.ne 1b - ret - endfunc -@@ -290,9 +290,9 @@ - .L_pred8x8_dc_end: - mov w3, #4 - add x2, x0, x1, lsl #2 --6: st1 {v0.8b}, [x0], x1 -+6: subs w3, w3, #1 -+ st1 {v0.8b}, [x0], x1 - st1 {v1.8b}, [x2], x1 -- subs w3, w3, #1 - b.ne 6b - ret - endfunc -@@ -359,3 +359,407 @@ - dup v1.8b, v1.b[0] - b .L_pred8x8_dc_end - endfunc -+ -+.macro ldcol.16 rd, rs, rt, n=4, hi=0 -+.if \n >= 4 && \hi == 0 -+ ld1 {\rd\().h}[0], [\rs], \rt -+ ld1 {\rd\().h}[1], [\rs], \rt -+ ld1 {\rd\().h}[2], [\rs], \rt -+ ld1 {\rd\().h}[3], [\rs], \rt -+.endif -+.if \n == 8 || \hi == 1 -+ ld1 {\rd\().h}[4], [\rs], \rt -+ ld1 {\rd\().h}[5], [\rs], \rt -+ ld1 {\rd\().h}[6], [\rs], \rt -+ ld1 {\rd\().h}[7], [\rs], \rt -+.endif -+.endm -+ -+// slower than C -+/* -+function ff_pred16x16_128_dc_neon_10, export=1 -+ movi v0.8h, #2, lsl #8 // 512, 1 << (bit_depth - 1) -+ -+ b .L_pred16x16_dc_10_end -+endfunc -+*/ -+ -+function ff_pred16x16_top_dc_neon_10, export=1 -+ sub x2, x0, x1 -+ -+ ld1 {v0.8h, v1.8h}, [x2] -+ -+ add v0.8h, v0.8h, v1.8h -+ addv h0, v0.8h -+ -+ urshr v0.4h, v0.4h, #4 -+ dup v0.8h, v0.h[0] -+ b .L_pred16x16_dc_10_end -+endfunc -+ -+// slower than C -+/* -+function ff_pred16x16_left_dc_neon_10, export=1 -+ sub x2, x0, #2 // access to the "left" column -+ ldcol.16 v0, x2, x1, 8 -+ ldcol.16 v1, x2, x1, 8 // load "left" column -+ -+ add v0.8h, v0.8h, v1.8h -+ addv h0, v0.8h -+ -+ urshr v0.4h, v0.4h, #4 -+ dup v0.8h, v0.h[0] -+ b .L_pred16x16_dc_10_end -+endfunc -+*/ -+ -+function ff_pred16x16_dc_neon_10, export=1 -+ sub x2, x0, x1 // access to the "top" row -+ sub x3, x0, #2 // access to the "left" column -+ -+ ld1 {v0.8h, v1.8h}, [x2] -+ ldcol.16 v2, x3, x1, 8 -+ ldcol.16 v3, x3, x1, 8 // load pixels in "top" row and "left" col -+ -+ add v0.8h, v0.8h, v1.8h -+ add v2.8h, v2.8h, v3.8h -+ add v0.8h, v0.8h, v2.8h -+ addv h0, v0.8h -+ -+ urshr v0.4h, v0.4h, #5 -+ dup v0.8h, v0.h[0] -+.L_pred16x16_dc_10_end: -+ mov v1.16b, v0.16b -+ mov w3, #8 -+6: st1 {v0.8h, v1.8h}, [x0], x1 -+ subs w3, w3, #1 -+ st1 {v0.8h, v1.8h}, [x0], x1 -+ b.ne 6b -+ ret -+endfunc -+ -+function ff_pred16x16_hor_neon_10, export=1 -+ sub x2, x0, #2 -+ add x3, x0, #16 -+ -+ mov w4, #16 -+1: ld1r {v0.8h}, [x2], x1 -+ subs w4, w4, #1 -+ st1 {v0.8h}, [x0], x1 -+ st1 {v0.8h}, [x3], x1 -+ b.ne 1b -+ ret -+endfunc -+ -+function ff_pred16x16_vert_neon_10, export=1 -+ sub x2, x0, x1 -+ add x1, x1, x1 -+ -+ ld1 {v0.8h, v1.8h}, [x2], x1 -+ -+ mov w3, #8 -+1: subs w3, w3, #1 -+ st1 {v0.8h, v1.8h}, [x0], x1 -+ st1 {v0.8h, v1.8h}, [x2], x1 -+ -+ b.ne 1b -+ ret -+endfunc -+ -+function ff_pred16x16_plane_neon_10, export=1 -+ sub x3, x0, x1 -+ movrel x4, p16weight -+ add x2, x3, #16 -+ sub x3, x3, #2 -+ ld1 {v0.8h}, [x3] -+ ld1 {v2.8h}, [x2], x1 -+ ldcol.16 v1, x3, x1, 8 -+ add x3, x3, x1 -+ ldcol.16 v3, x3, x1, 8 -+ -+ rev64 v16.8h, v0.8h -+ rev64 v17.8h, v1.8h -+ ext v0.16b, v16.16b, v16.16b, #8 -+ ext v1.16b, v17.16b, v17.16b, #8 -+ -+ add v7.8h, v2.8h, v3.8h -+ sub v2.8h, v2.8h, v0.8h -+ sub v3.8h, v3.8h, v1.8h -+ ld1 {v0.8h}, [x4] -+ mul v2.8h, v2.8h, v0.8h -+ mul v3.8h, v3.8h, v0.8h -+ addp v2.8h, v2.8h, v3.8h -+ addp v2.8h, v2.8h, v2.8h -+ addp v2.4h, v2.4h, v2.4h -+ sshll v3.4s, v2.4h, #2 -+ saddw v2.4s, v3.4s, v2.4h -+ rshrn v4.4h, v2.4s, #6 -+ trn2 v5.4h, v4.4h, v4.4h -+ add v2.4h, v4.4h, v5.4h -+ shl v3.4h, v2.4h, #3 -+ ext v7.16b, v7.16b, v7.16b, #14 -+ sub v3.4h, v3.4h, v2.4h // 7 * (b + c) -+ add v7.4h, v7.4h, v0.4h -+ shl v2.4h, v7.4h, #4 -+ ssubl v2.4s, v2.4h, v3.4h -+ shl v3.4h, v4.4h, #4 -+ ext v0.16b, v0.16b, v0.16b, #14 -+ ssubl v6.4s, v5.4h, v3.4h -+ -+ mov v0.h[0], wzr -+ mul v0.8h, v0.8h, v4.h[0] -+ dup v16.4s, v2.s[0] -+ dup v17.4s, v2.s[0] -+ dup v2.8h, v4.h[0] -+ dup v3.4s, v6.s[0] -+ shl v2.8h, v2.8h, #3 -+ saddw v16.4s, v16.4s, v0.4h -+ saddw2 v17.4s, v17.4s, v0.8h -+ saddw v3.4s, v3.4s, v2.4h -+ -+ mov w3, #16 -+ mvni v4.8h, #0xFC, lsl #8 // 1023 for clipping -+1: -+ sqshrun v0.4h, v16.4s, #5 -+ sqshrun2 v0.8h, v17.4s, #5 -+ saddw v16.4s, v16.4s, v2.4h -+ saddw v17.4s, v17.4s, v2.4h -+ sqshrun v1.4h, v16.4s, #5 -+ sqshrun2 v1.8h, v17.4s, #5 -+ add v16.4s, v16.4s, v3.4s -+ add v17.4s, v17.4s, v3.4s -+ -+ subs w3, w3, #1 -+ -+ smin v0.8h, v0.8h, v4.8h -+ smin v1.8h, v1.8h, v4.8h -+ -+ st1 {v0.8h, v1.8h}, [x0], x1 -+ b.ne 1b -+ ret -+endfunc -+ -+function ff_pred8x8_hor_neon_10, export=1 -+ sub x2, x0, #2 -+ mov w3, #8 -+ -+1: ld1r {v0.8h}, [x2], x1 -+ subs w3, w3, #1 -+ st1 {v0.8h}, [x0], x1 -+ b.ne 1b -+ ret -+endfunc -+ -+function ff_pred8x8_vert_neon_10, export=1 -+ sub x2, x0, x1 -+ lsl x1, x1, #1 -+ -+ ld1 {v0.8h}, [x2], x1 -+ mov w3, #4 -+1: subs w3, w3, #1 -+ st1 {v0.8h}, [x0], x1 -+ st1 {v0.8h}, [x2], x1 -+ b.ne 1b -+ ret -+endfunc -+ -+function ff_pred8x8_plane_neon_10, export=1 -+ sub x3, x0, x1 -+ movrel x4, p8weight -+ movrel x5, p16weight -+ add x2, x3, #8 -+ sub x3, x3, #2 -+ ld1 {v0.d}[0], [x3] -+ ld1 {v2.d}[0], [x2], x1 -+ ldcol.16 v0, x3, x1, hi=1 -+ add x3, x3, x1 -+ ldcol.16 v3, x3, x1, 4 -+ add v7.8h, v2.8h, v3.8h -+ rev64 v0.8h, v0.8h -+ trn1 v2.2d, v2.2d, v3.2d -+ sub v2.8h, v2.8h, v0.8h -+ ld1 {v6.8h}, [x4] -+ mul v2.8h, v2.8h, v6.8h -+ ld1 {v0.8h}, [x5] -+ saddlp v2.4s, v2.8h -+ addp v2.4s, v2.4s, v2.4s -+ shl v3.4s, v2.4s, #4 -+ add v2.4s, v3.4s, v2.4s -+ rshrn v5.4h, v2.4s, #5 -+ addp v2.4h, v5.4h, v5.4h -+ shl v3.4h, v2.4h, #1 -+ add v3.4h, v3.4h, v2.4h -+ rev64 v7.4h, v7.4h -+ add v7.4h, v7.4h, v0.4h -+ shl v2.4h, v7.4h, #4 -+ ssubl v2.4s, v2.4h, v3.4h -+ ext v0.16b, v0.16b, v0.16b, #14 -+ mov v0.h[0], wzr -+ mul v0.8h, v0.8h, v5.h[0] -+ dup v1.4s, v2.s[0] -+ dup v2.4s, v2.s[0] -+ dup v3.8h, v5.h[1] -+ saddw v1.4s, v1.4s, v0.4h -+ saddw2 v2.4s, v2.4s, v0.8h -+ mov w3, #8 -+ mvni v4.8h, #0xFC, lsl #8 // 1023 for clipping -+1: -+ sqshrun v0.4h, v1.4s, #5 -+ sqshrun2 v0.8h, v2.4s, #5 -+ -+ saddw v1.4s, v1.4s, v3.4h -+ saddw v2.4s, v2.4s, v3.4h -+ -+ subs w3, w3, #1 -+ -+ smin v0.8h, v0.8h, v4.8h -+ -+ st1 {v0.8h}, [x0], x1 -+ b.ne 1b -+ ret -+endfunc -+ -+function ff_pred8x8_128_dc_neon_10, export=1 -+ movi v0.8h, #2, lsl #8 // 512, 1 << (bit_depth - 1) -+ movi v1.8h, #2, lsl #8 -+ b .L_pred8x8_dc_10_end -+endfunc -+ -+function ff_pred8x8_top_dc_neon_10, export=1 -+ sub x2, x0, x1 -+ ld1 {v0.8h}, [x2] -+ -+ addp v0.8h, v0.8h, v0.8h -+ addp v0.4h, v0.4h, v0.4h -+ zip1 v0.4h, v0.4h, v0.4h -+ urshr v2.4h, v0.4h, #2 -+ zip1 v0.8h, v2.8h, v2.8h -+ zip1 v1.8h, v2.8h, v2.8h -+ b .L_pred8x8_dc_10_end -+endfunc -+ -+function ff_pred8x8_left_dc_neon_10, export=1 -+ sub x2, x0, #2 -+ ldcol.16 v0, x2, x1, 8 -+ -+ addp v0.8h, v0.8h, v0.8h -+ addp v0.4h, v0.4h, v0.4h -+ urshr v2.4h, v0.4h, #2 -+ dup v1.8h, v2.h[1] -+ dup v0.8h, v2.h[0] -+ b .L_pred8x8_dc_10_end -+endfunc -+ -+function ff_pred8x8_dc_neon_10, export=1 -+ sub x2, x0, x1 -+ sub x3, x0, #2 -+ -+ ld1 {v0.8h}, [x2] -+ ldcol.16 v1, x3, x1, 8 -+ -+ addp v0.8h, v0.8h, v0.8h -+ addp v1.8h, v1.8h, v1.8h -+ trn1 v2.2s, v0.2s, v1.2s -+ trn2 v3.2s, v0.2s, v1.2s -+ addp v4.4h, v2.4h, v3.4h -+ addp v5.4h, v4.4h, v4.4h -+ urshr v6.4h, v5.4h, #3 -+ urshr v7.4h, v4.4h, #2 -+ dup v0.8h, v6.h[0] -+ dup v2.8h, v7.h[2] -+ dup v1.8h, v7.h[3] -+ dup v3.8h, v6.h[1] -+ zip1 v0.2d, v0.2d, v2.2d -+ zip1 v1.2d, v1.2d, v3.2d -+.L_pred8x8_dc_10_end: -+ mov w3, #4 -+ add x2, x0, x1, lsl #2 -+ -+6: st1 {v0.8h}, [x0], x1 -+ subs w3, w3, #1 -+ st1 {v1.8h}, [x2], x1 -+ b.ne 6b -+ ret -+endfunc -+ -+function ff_pred8x8_l0t_dc_neon_10, export=1 -+ sub x2, x0, x1 -+ sub x3, x0, #2 -+ -+ ld1 {v0.8h}, [x2] -+ ldcol.16 v1, x3, x1, 4 -+ -+ addp v0.8h, v0.8h, v0.8h -+ addp v1.4h, v1.4h, v1.4h -+ addp v0.4h, v0.4h, v0.4h -+ addp v1.4h, v1.4h, v1.4h -+ add v1.4h, v1.4h, v0.4h -+ -+ urshr v2.4h, v0.4h, #2 -+ urshr v3.4h, v1.4h, #3 // the pred4x4 part -+ -+ dup v4.4h, v3.h[0] -+ dup v5.4h, v2.h[0] -+ dup v6.4h, v2.h[1] -+ -+ zip1 v0.2d, v4.2d, v6.2d -+ zip1 v1.2d, v5.2d, v6.2d -+ b .L_pred8x8_dc_10_end -+endfunc -+ -+function ff_pred8x8_l00_dc_neon_10, export=1 -+ sub x2, x0, #2 -+ -+ ldcol.16 v0, x2, x1, 4 -+ -+ addp v0.4h, v0.4h, v0.4h -+ addp v0.4h, v0.4h, v0.4h -+ urshr v0.4h, v0.4h, #2 -+ -+ movi v1.8h, #2, lsl #8 // 512 -+ dup v0.8h, v0.h[0] -+ b .L_pred8x8_dc_10_end -+endfunc -+ -+function ff_pred8x8_0lt_dc_neon_10, export=1 -+ add x3, x0, x1, lsl #2 -+ sub x2, x0, x1 -+ sub x3, x3, #2 -+ -+ ld1 {v0.8h}, [x2] -+ ldcol.16 v1, x3, x1, hi=1 -+ -+ addp v0.8h, v0.8h, v0.8h -+ addp v1.8h, v1.8h, v1.8h -+ addp v0.4h, v0.4h, v0.4h -+ addp v1.4h, v1.4h, v1.4h -+ zip1 v0.2s, v0.2s, v1.2s -+ add v1.4h, v0.4h, v1.4h -+ -+ urshr v2.4h, v0.4h, #2 -+ urshr v3.4h, v1.4h, #3 -+ -+ dup v4.4h, v2.h[0] -+ dup v5.4h, v2.h[3] -+ dup v6.4h, v2.h[1] -+ dup v7.4h, v3.h[1] -+ -+ zip1 v0.2d, v4.2d, v6.2d -+ zip1 v1.2d, v5.2d, v7.2d -+ b .L_pred8x8_dc_10_end -+endfunc -+ -+function ff_pred8x8_0l0_dc_neon_10, export=1 -+ add x2, x0, x1, lsl #2 -+ sub x2, x2, #2 -+ -+ ldcol.16 v1, x2, x1, 4 -+ -+ addp v2.8h, v1.8h, v1.8h -+ addp v2.4h, v2.4h, v2.4h -+ urshr v1.4h, v2.4h, #2 -+ -+ movi v0.8h, #2, lsl #8 // 512 -+ dup v1.8h, v1.h[0] -+ b .L_pred8x8_dc_10_end -+endfunc -diff -Naur a/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c ---- a/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/idctdsp_init_aarch64.c 2023-04-06 12:49:40.249394729 +0200 -@@ -27,19 +27,29 @@ - #include "libavcodec/idctdsp.h" - #include "idct.h" - -+void ff_put_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t); -+void ff_put_signed_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t); -+void ff_add_pixels_clamped_neon(const int16_t *, uint8_t *, ptrdiff_t); -+ - av_cold void ff_idctdsp_init_aarch64(IDCTDSPContext *c, AVCodecContext *avctx, - unsigned high_bit_depth) - { - int cpu_flags = av_get_cpu_flags(); - -- if (have_neon(cpu_flags) && !avctx->lowres && !high_bit_depth) { -- if (avctx->idct_algo == FF_IDCT_AUTO || -- avctx->idct_algo == FF_IDCT_SIMPLEAUTO || -- avctx->idct_algo == FF_IDCT_SIMPLENEON) { -- c->idct_put = ff_simple_idct_put_neon; -- c->idct_add = ff_simple_idct_add_neon; -- c->idct = ff_simple_idct_neon; -- c->perm_type = FF_IDCT_PERM_PARTTRANS; -+ if (have_neon(cpu_flags)) { -+ if (!avctx->lowres && !high_bit_depth) { -+ if (avctx->idct_algo == FF_IDCT_AUTO || -+ avctx->idct_algo == FF_IDCT_SIMPLEAUTO || -+ avctx->idct_algo == FF_IDCT_SIMPLENEON) { -+ c->idct_put = ff_simple_idct_put_neon; -+ c->idct_add = ff_simple_idct_add_neon; -+ c->idct = ff_simple_idct_neon; -+ c->perm_type = FF_IDCT_PERM_PARTTRANS; -+ } - } -+ -+ c->add_pixels_clamped = ff_add_pixels_clamped_neon; -+ c->put_pixels_clamped = ff_put_pixels_clamped_neon; -+ c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_neon; - } - } -diff -Naur a/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S b/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S ---- a/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/idctdsp_neon.S 2023-04-06 12:49:40.249394729 +0200 -@@ -0,0 +1,130 @@ -+/* -+ * IDCT AArch64 NEON optimisations -+ * -+ * Copyright (c) 2022 Ben Avison -+ * -+ * 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" -+ -+// Clamp 16-bit signed block coefficients to unsigned 8-bit -+// On entry: -+// x0 -> array of 64x 16-bit coefficients -+// x1 -> 8-bit results -+// x2 = row stride for results, bytes -+function ff_put_pixels_clamped_neon, export=1 -+ ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x0], #64 -+ ld1 {v4.16b, v5.16b, v6.16b, v7.16b}, [x0] -+ sqxtun v0.8b, v0.8h -+ sqxtun v1.8b, v1.8h -+ sqxtun v2.8b, v2.8h -+ sqxtun v3.8b, v3.8h -+ sqxtun v4.8b, v4.8h -+ st1 {v0.8b}, [x1], x2 -+ sqxtun v0.8b, v5.8h -+ st1 {v1.8b}, [x1], x2 -+ sqxtun v1.8b, v6.8h -+ st1 {v2.8b}, [x1], x2 -+ sqxtun v2.8b, v7.8h -+ st1 {v3.8b}, [x1], x2 -+ st1 {v4.8b}, [x1], x2 -+ st1 {v0.8b}, [x1], x2 -+ st1 {v1.8b}, [x1], x2 -+ st1 {v2.8b}, [x1] -+ ret -+endfunc -+ -+// Clamp 16-bit signed block coefficients to signed 8-bit (biased by 128) -+// On entry: -+// x0 -> array of 64x 16-bit coefficients -+// x1 -> 8-bit results -+// x2 = row stride for results, bytes -+function ff_put_signed_pixels_clamped_neon, export=1 -+ ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x0], #64 -+ movi v4.8b, #128 -+ ld1 {v16.16b, v17.16b, v18.16b, v19.16b}, [x0] -+ sqxtn v0.8b, v0.8h -+ sqxtn v1.8b, v1.8h -+ sqxtn v2.8b, v2.8h -+ sqxtn v3.8b, v3.8h -+ sqxtn v5.8b, v16.8h -+ add v0.8b, v0.8b, v4.8b -+ sqxtn v6.8b, v17.8h -+ add v1.8b, v1.8b, v4.8b -+ sqxtn v7.8b, v18.8h -+ add v2.8b, v2.8b, v4.8b -+ sqxtn v16.8b, v19.8h -+ add v3.8b, v3.8b, v4.8b -+ st1 {v0.8b}, [x1], x2 -+ add v0.8b, v5.8b, v4.8b -+ st1 {v1.8b}, [x1], x2 -+ add v1.8b, v6.8b, v4.8b -+ st1 {v2.8b}, [x1], x2 -+ add v2.8b, v7.8b, v4.8b -+ st1 {v3.8b}, [x1], x2 -+ add v3.8b, v16.8b, v4.8b -+ st1 {v0.8b}, [x1], x2 -+ st1 {v1.8b}, [x1], x2 -+ st1 {v2.8b}, [x1], x2 -+ st1 {v3.8b}, [x1] -+ ret -+endfunc -+ -+// Add 16-bit signed block coefficients to unsigned 8-bit -+// On entry: -+// x0 -> array of 64x 16-bit coefficients -+// x1 -> 8-bit input and results -+// x2 = row stride for 8-bit input and results, bytes -+function ff_add_pixels_clamped_neon, export=1 -+ ld1 {v0.16b, v1.16b, v2.16b, v3.16b}, [x0], #64 -+ mov x3, x1 -+ ld1 {v4.8b}, [x1], x2 -+ ld1 {v5.8b}, [x1], x2 -+ ld1 {v6.8b}, [x1], x2 -+ ld1 {v7.8b}, [x1], x2 -+ ld1 {v16.16b, v17.16b, v18.16b, v19.16b}, [x0] -+ uaddw v0.8h, v0.8h, v4.8b -+ uaddw v1.8h, v1.8h, v5.8b -+ uaddw v2.8h, v2.8h, v6.8b -+ ld1 {v4.8b}, [x1], x2 -+ uaddw v3.8h, v3.8h, v7.8b -+ ld1 {v5.8b}, [x1], x2 -+ sqxtun v0.8b, v0.8h -+ ld1 {v6.8b}, [x1], x2 -+ sqxtun v1.8b, v1.8h -+ ld1 {v7.8b}, [x1] -+ sqxtun v2.8b, v2.8h -+ sqxtun v3.8b, v3.8h -+ uaddw v4.8h, v16.8h, v4.8b -+ st1 {v0.8b}, [x3], x2 -+ uaddw v0.8h, v17.8h, v5.8b -+ st1 {v1.8b}, [x3], x2 -+ uaddw v1.8h, v18.8h, v6.8b -+ st1 {v2.8b}, [x3], x2 -+ uaddw v2.8h, v19.8h, v7.8b -+ sqxtun v4.8b, v4.8h -+ sqxtun v0.8b, v0.8h -+ st1 {v3.8b}, [x3], x2 -+ sqxtun v1.8b, v1.8h -+ sqxtun v2.8b, v2.8h -+ st1 {v4.8b}, [x3], x2 -+ st1 {v0.8b}, [x3], x2 -+ st1 {v1.8b}, [x3], x2 -+ st1 {v2.8b}, [x3] -+ ret -+endfunc -diff -Naur a/media/ffvpx/libavcodec/aarch64/idct.h b/media/ffvpx/libavcodec/aarch64/idct.h ---- a/media/ffvpx/libavcodec/aarch64/idct.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/idct.h 2023-04-06 12:49:40.249394729 +0200 -@@ -19,6 +19,7 @@ - #ifndef AVCODEC_AARCH64_IDCT_H - #define AVCODEC_AARCH64_IDCT_H - -+#include - #include - - void ff_simple_idct_neon(int16_t *data); -diff -Naur a/media/ffvpx/libavcodec/aarch64/mdct_neon.S b/media/ffvpx/libavcodec/aarch64/mdct_neon.S ---- a/media/ffvpx/libavcodec/aarch64/mdct_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/mdct_neon.S 2023-04-06 12:50:06.969470973 +0200 -@@ -23,8 +23,8 @@ - #include "libavutil/aarch64/asm.S" - - function ff_imdct_half_neon, export=1 -- sub sp, sp, #32 -- stp x19, x20, [sp] -+ stp x19, x20, [sp, #-32]! -+ AARCH64_SIGN_LINK_REGISTER - str x30, [sp, #16] - mov x12, #1 - ldr w14, [x0, #28] // mdct_bits -@@ -119,16 +119,16 @@ - st2 {v4.2s,v5.2s}, [x0] - st2 {v6.2s,v7.2s}, [x8] - -- ldp x19, x20, [sp] - ldr x30, [sp, #16] -- add sp, sp, #32 -+ AARCH64_VALIDATE_LINK_REGISTER -+ ldp x19, x20, [sp], #32 - - ret - endfunc - - function ff_imdct_calc_neon, export=1 -- sub sp, sp, #32 -- stp x19, x20, [sp] -+ stp x19, x20, [sp, #-32]! -+ AARCH64_SIGN_LINK_REGISTER - str x30, [sp, #16] - ldr w3, [x0, #28] // mdct_bits - mov x19, #1 -@@ -160,16 +160,17 @@ - subs x19, x19, #16 - b.gt 1b - -- ldp x19, x20, [sp], #16 -- ldr x30, [sp], #16 -+ ldr x30, [sp, #16] -+ AARCH64_VALIDATE_LINK_REGISTER -+ ldp x19, x20, [sp], #32 - - ret - endfunc - - - function ff_mdct_calc_neon, export=1 -- sub sp, sp, #32 -- stp x19, x20, [sp] -+ stp x19, x20, [sp, #-32]! -+ AARCH64_SIGN_LINK_REGISTER - str x30, [sp, #16] - - mov x12, #1 -@@ -317,7 +318,9 @@ - st2 {v4.2s,v5.2s}, [x0] - st2 {v6.2s,v7.2s}, [x8] - -- ldp x19, x20, [sp], #16 -- ldr x30, [sp], #16 -+ ldr x30, [sp, #16] -+ AARCH64_VALIDATE_LINK_REGISTER -+ ldp x19, x20, [sp], #32 -+ - ret - endfunc -diff -Naur a/media/ffvpx/libavcodec/aarch64/moz.build b/media/ffvpx/libavcodec/aarch64/moz.build ---- a/media/ffvpx/libavcodec/aarch64/moz.build 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/moz.build 2023-04-06 12:49:40.249394729 +0200 -@@ -4,47 +4,55 @@ - ## License, v. 2.0. If a copy of the MPL was not distributed with this - ## file, You can obtain one at http://mozilla.org/MPL/2.0/. - --SOURCES += [ -- 'h264chroma_init_aarch64.c', -- 'h264cmc_neon.S', -- 'h264dsp_init_aarch64.c', -- 'h264dsp_neon.S', -- 'h264idct_neon.S', -- 'h264pred_init.c', -- 'h264pred_neon.S', -- 'hpeldsp_init_aarch64.c', -- 'hpeldsp_neon.S', -- 'idctdsp_init_aarch64.c', -- 'mdct_neon.S', -- 'mpegaudiodsp_init.c', -- 'mpegaudiodsp_neon.S', -- 'neon.S', -- 'simple_idct_neon.S', -- 'videodsp.S', -- 'videodsp_init.c', -- 'vp8dsp_init_aarch64.c', -- 'vp8dsp_neon.S', -- 'vp9dsp_init_10bpp_aarch64.c', -- 'vp9dsp_init_12bpp_aarch64.c', -- 'vp9dsp_init_aarch64.c', -- 'vp9itxfm_16bpp_neon.S', -- 'vp9itxfm_neon.S', -- 'vp9lpf_16bpp_neon.S', -- 'vp9lpf_neon.S', -- 'vp9mc_16bpp_neon.S', -- 'vp9mc_aarch64.S', -- 'vp9mc_neon.S', --] -- --if CONFIG['OS_ARCH'] == 'WINNT': -- USE_INTEGRATED_CLANGCL_AS = True -- DEFINES['EXTERN_ASM'] = '' -- --if CONFIG['MOZ_LIBAV_FFT']: -+if not CONFIG['MOZ_FFVPX_AUDIOONLY']: - SOURCES += [ - 'fft_init_aarch64.c', - 'fft_neon.S', -+ 'h264chroma_init_aarch64.c', -+ 'h264cmc_neon.S', -+ 'h264dsp_init_aarch64.c', -+ 'h264dsp_neon.S', -+ 'h264idct_neon.S', -+ 'h264pred_init.c', -+ 'h264pred_neon.S', -+ 'hpeldsp_init_aarch64.c', -+ 'hpeldsp_neon.S', -+ 'idctdsp_init_aarch64.c', -+ 'idctdsp_neon.S', -+ 'mdct_neon.S', -+ 'mpegaudiodsp_init.c', -+ 'mpegaudiodsp_neon.S', -+ 'neon.S', -+ 'simple_idct_neon.S', -+ 'videodsp.S', -+ 'videodsp_init.c', -+ 'vp8dsp_init_aarch64.c', -+ 'vp8dsp_neon.S', -+ 'vp9dsp_init_10bpp_aarch64.c', -+ 'vp9dsp_init_12bpp_aarch64.c', -+ 'vp9dsp_init_aarch64.c', -+ 'vp9itxfm_16bpp_neon.S', -+ 'vp9itxfm_neon.S', -+ 'vp9lpf_16bpp_neon.S', -+ 'vp9lpf_neon.S', -+ 'vp9mc_16bpp_neon.S', -+ 'vp9mc_aarch64.S', -+ 'vp9mc_neon.S', - ] -+else: -+ SOURCES += [ -+ 'fft_init_aarch64.c', -+ 'fft_neon.S', -+ 'idctdsp_init_aarch64.c', -+ 'idctdsp_neon.S', -+ 'mpegaudiodsp_init.c', -+ 'mpegaudiodsp_neon.S', -+ 'simple_idct_neon.S', -+ ] -+ -+if CONFIG['OS_ARCH'] == 'WINNT': -+ USE_INTEGRATED_CLANGCL_AS = True -+ DEFINES['EXTERN_ASM'] = '' - - FINAL_LIBRARY = 'mozavcodec' - -diff -Naur a/media/ffvpx/libavcodec/aarch64/neon.S b/media/ffvpx/libavcodec/aarch64/neon.S ---- a/media/ffvpx/libavcodec/aarch64/neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/neon.S 2023-04-06 12:49:40.249394729 +0200 -@@ -109,12 +109,25 @@ - trn2 \r5\().4H, \r0\().4H, \r1\().4H - trn1 \r6\().4H, \r2\().4H, \r3\().4H - trn2 \r7\().4H, \r2\().4H, \r3\().4H -+ - trn1 \r0\().2S, \r4\().2S, \r6\().2S - trn2 \r2\().2S, \r4\().2S, \r6\().2S - trn1 \r1\().2S, \r5\().2S, \r7\().2S - trn2 \r3\().2S, \r5\().2S, \r7\().2S - .endm - -+.macro transpose_4x8H r0, r1, r2, r3, t4, t5, t6, t7 -+ trn1 \t4\().8H, \r0\().8H, \r1\().8H -+ trn2 \t5\().8H, \r0\().8H, \r1\().8H -+ trn1 \t6\().8H, \r2\().8H, \r3\().8H -+ trn2 \t7\().8H, \r2\().8H, \r3\().8H -+ -+ trn1 \r0\().4S, \t4\().4S, \t6\().4S -+ trn2 \r2\().4S, \t4\().4S, \t6\().4S -+ trn1 \r1\().4S, \t5\().4S, \t7\().4S -+ trn2 \r3\().4S, \t5\().4S, \t7\().4S -+.endm -+ - .macro transpose_8x8H r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 - trn1 \r8\().8H, \r0\().8H, \r1\().8H - trn2 \r9\().8H, \r0\().8H, \r1\().8H -diff -Naur a/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S b/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S ---- a/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/simple_idct_neon.S 2023-04-06 12:49:40.249394729 +0200 -@@ -58,7 +58,7 @@ - .endm - - .macro idct_end -- br x10 -+ ret x10 - .endm - - .macro smull1 a, b, c -diff -Naur a/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c b/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c ---- a/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/vc1dsp_init_aarch64.c 2023-04-06 12:50:06.969470973 +0200 -@@ -21,27 +21,121 @@ - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" - #include "libavutil/aarch64/cpu.h" -+#include "libavutil/intreadwrite.h" - #include "libavcodec/vc1dsp.h" - - #include "config.h" - --void ff_put_vc1_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_vc1_inv_trans_8x8_neon(int16_t *block); -+void ff_vc1_inv_trans_8x4_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+void ff_vc1_inv_trans_4x8_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+void ff_vc1_inv_trans_4x4_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+ -+void ff_vc1_inv_trans_8x8_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+void ff_vc1_inv_trans_8x4_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+void ff_vc1_inv_trans_4x8_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+void ff_vc1_inv_trans_4x4_dc_neon(uint8_t *dest, ptrdiff_t stride, int16_t *block); -+ -+void ff_vc1_v_loop_filter4_neon(uint8_t *src, ptrdiff_t stride, int pq); -+void ff_vc1_h_loop_filter4_neon(uint8_t *src, ptrdiff_t stride, int pq); -+void ff_vc1_v_loop_filter8_neon(uint8_t *src, ptrdiff_t stride, int pq); -+void ff_vc1_h_loop_filter8_neon(uint8_t *src, ptrdiff_t stride, int pq); -+void ff_vc1_v_loop_filter16_neon(uint8_t *src, ptrdiff_t stride, int pq); -+void ff_vc1_h_loop_filter16_neon(uint8_t *src, ptrdiff_t stride, int pq); -+ -+void ff_put_vc1_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_avg_vc1_chroma_mc8_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_avg_vc1_chroma_mc8_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_put_vc1_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_put_vc1_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); --void ff_avg_vc1_chroma_mc4_neon(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -+void ff_avg_vc1_chroma_mc4_neon(uint8_t *dst, const uint8_t *src, ptrdiff_t stride, - int h, int x, int y); - -+int ff_vc1_unescape_buffer_helper_neon(const uint8_t *src, int size, uint8_t *dst); -+ -+static int vc1_unescape_buffer_neon(const uint8_t *src, int size, uint8_t *dst) -+{ -+ /* Dealing with starting and stopping, and removing escape bytes, are -+ * comparatively less time-sensitive, so are more clearly expressed using -+ * a C wrapper around the assembly inner loop. Note that we assume a -+ * little-endian machine that supports unaligned loads. */ -+ int dsize = 0; -+ while (size >= 4) -+ { -+ int found = 0; -+ while (!found && (((uintptr_t) dst) & 7) && size >= 4) -+ { -+ found = (AV_RL32(src) &~ 0x03000000) == 0x00030000; -+ if (!found) -+ { -+ *dst++ = *src++; -+ --size; -+ ++dsize; -+ } -+ } -+ if (!found) -+ { -+ int skip = size - ff_vc1_unescape_buffer_helper_neon(src, size, dst); -+ dst += skip; -+ src += skip; -+ size -= skip; -+ dsize += skip; -+ while (!found && size >= 4) -+ { -+ found = (AV_RL32(src) &~ 0x03000000) == 0x00030000; -+ if (!found) -+ { -+ *dst++ = *src++; -+ --size; -+ ++dsize; -+ } -+ } -+ } -+ if (found) -+ { -+ *dst++ = *src++; -+ *dst++ = *src++; -+ ++src; -+ size -= 3; -+ dsize += 2; -+ } -+ } -+ while (size > 0) -+ { -+ *dst++ = *src++; -+ --size; -+ ++dsize; -+ } -+ return dsize; -+} -+ - av_cold void ff_vc1dsp_init_aarch64(VC1DSPContext *dsp) - { - int cpu_flags = av_get_cpu_flags(); - - if (have_neon(cpu_flags)) { -+ dsp->vc1_inv_trans_8x8 = ff_vc1_inv_trans_8x8_neon; -+ dsp->vc1_inv_trans_8x4 = ff_vc1_inv_trans_8x4_neon; -+ dsp->vc1_inv_trans_4x8 = ff_vc1_inv_trans_4x8_neon; -+ dsp->vc1_inv_trans_4x4 = ff_vc1_inv_trans_4x4_neon; -+ dsp->vc1_inv_trans_8x8_dc = ff_vc1_inv_trans_8x8_dc_neon; -+ dsp->vc1_inv_trans_8x4_dc = ff_vc1_inv_trans_8x4_dc_neon; -+ dsp->vc1_inv_trans_4x8_dc = ff_vc1_inv_trans_4x8_dc_neon; -+ dsp->vc1_inv_trans_4x4_dc = ff_vc1_inv_trans_4x4_dc_neon; -+ -+ dsp->vc1_v_loop_filter4 = ff_vc1_v_loop_filter4_neon; -+ dsp->vc1_h_loop_filter4 = ff_vc1_h_loop_filter4_neon; -+ dsp->vc1_v_loop_filter8 = ff_vc1_v_loop_filter8_neon; -+ dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_neon; -+ dsp->vc1_v_loop_filter16 = ff_vc1_v_loop_filter16_neon; -+ dsp->vc1_h_loop_filter16 = ff_vc1_h_loop_filter16_neon; -+ - dsp->put_no_rnd_vc1_chroma_pixels_tab[0] = ff_put_vc1_chroma_mc8_neon; - dsp->avg_no_rnd_vc1_chroma_pixels_tab[0] = ff_avg_vc1_chroma_mc8_neon; - dsp->put_no_rnd_vc1_chroma_pixels_tab[1] = ff_put_vc1_chroma_mc4_neon; - dsp->avg_no_rnd_vc1_chroma_pixels_tab[1] = ff_avg_vc1_chroma_mc4_neon; -+ -+ dsp->vc1_unescape_buffer = vc1_unescape_buffer_neon; - } - } -diff -Naur a/media/ffvpx/libavcodec/aarch64/videodsp_init.c b/media/ffvpx/libavcodec/aarch64/videodsp_init.c ---- a/media/ffvpx/libavcodec/aarch64/videodsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/videodsp_init.c 2023-04-06 12:50:06.969470973 +0200 -@@ -21,7 +21,7 @@ - #include "libavutil/aarch64/cpu.h" - #include "libavcodec/videodsp.h" - --void ff_prefetch_aarch64(uint8_t *mem, ptrdiff_t stride, int h); -+void ff_prefetch_aarch64(const uint8_t *mem, ptrdiff_t stride, int h); - - av_cold void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc) - { -diff -Naur a/media/ffvpx/libavcodec/aarch64/videodsp.S b/media/ffvpx/libavcodec/aarch64/videodsp.S ---- a/media/ffvpx/libavcodec/aarch64/videodsp.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/videodsp.S 2023-04-06 12:49:40.249394729 +0200 -@@ -19,10 +19,11 @@ - #include "libavutil/aarch64/asm.S" - - function ff_prefetch_aarch64, export=1 -+1: - subs w2, w2, #2 - prfm pldl1strm, [x0] - prfm pldl1strm, [x0, x1] - add x0, x0, x1, lsl #1 -- b.gt X(ff_prefetch_aarch64) -+ b.gt 1b - ret - endfunc -diff -Naur a/media/ffvpx/libavcodec/aarch64/vp8dsp.h b/media/ffvpx/libavcodec/aarch64/vp8dsp.h ---- a/media/ffvpx/libavcodec/aarch64/vp8dsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/vp8dsp.h 2023-04-06 12:50:06.969470973 +0200 -@@ -53,7 +53,7 @@ - - #define VP8_MC(n, opt) \ - void ff_put_vp8_##n##_##opt(uint8_t *dst, ptrdiff_t dststride, \ -- uint8_t *src, ptrdiff_t srcstride, \ -+ const uint8_t *src, ptrdiff_t srcstride,\ - int h, int x, int y) - - #define VP8_EPEL(w, opt) \ -diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S b/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S ---- a/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/vp9itxfm_16bpp_neon.S 2023-04-06 12:49:40.249394729 +0200 -@@ -1040,7 +1040,7 @@ - .irp i, 16, 20, 24, 28, 17, 21, 25, 29, 18, 22, 26, 30, 19, 23, 27, 31 - store \i, x0, #16 - .endr -- br x14 -+ ret x14 - 1: - // Special case: For the last input column (x1 == 12), - // which would be stored as the last row in the temp buffer, -@@ -1068,7 +1068,7 @@ - mov v29.16b, v17.16b - mov v30.16b, v18.16b - mov v31.16b, v19.16b -- br x14 -+ ret x14 - endfunc - - // Read a vertical 4x16 slice out of a 16x16 matrix, do a transform on it, -@@ -1098,7 +1098,7 @@ - load_add_store v16.4s, v17.4s, v18.4s, v19.4s, v20.4s, v21.4s, v22.4s, v23.4s - load_add_store v24.4s, v25.4s, v26.4s, v27.4s, v28.4s, v29.4s, v30.4s, v31.4s - -- br x14 -+ ret x14 - endfunc - .endm - -@@ -1208,7 +1208,7 @@ - ldp d12, d13, [sp], 0x10 - ldp d14, d15, [sp], 0x10 - .endif -- br x15 -+ ret x15 - endfunc - - function ff_vp9_\txfm1\()_\txfm2\()_16x16_add_10_neon, export=1 -@@ -1264,7 +1264,7 @@ - st1 {v23.4s}, [x0], #16 - st1 {v27.4s}, [x0], #16 - st1 {v31.4s}, [x0], #16 -- br x14 -+ ret x14 - endfunc - - function idct16_1d_4x16_pass2_quarter_neon -@@ -1286,7 +1286,7 @@ - load_add_store v16.4s, v17.4s, v18.4s, v19.4s, v20.4s, v21.4s, v22.4s, v23.4s - load_add_store v24.4s, v25.4s, v26.4s, v27.4s, v28.4s, v29.4s, v30.4s, v31.4s - -- br x14 -+ ret x14 - endfunc - - function idct16_1d_4x16_pass1_half_neon -@@ -1313,7 +1313,7 @@ - .irp i, 16, 20, 24, 28, 17, 21, 25, 29, 18, 22, 26, 30, 19, 23, 27, 31 - store \i, x0, #16 - .endr -- br x14 -+ ret x14 - 1: - // Special case: For the second input column (r1 == 4), - // which would be stored as the second row in the temp buffer, -@@ -1341,7 +1341,7 @@ - mov v21.16b, v17.16b - mov v22.16b, v18.16b - mov v23.16b, v19.16b -- br x14 -+ ret x14 - endfunc - - function idct16_1d_4x16_pass2_half_neon -@@ -1364,7 +1364,7 @@ - load_add_store v16.4s, v17.4s, v18.4s, v19.4s, v20.4s, v21.4s, v22.4s, v23.4s - load_add_store v24.4s, v25.4s, v26.4s, v27.4s, v28.4s, v29.4s, v30.4s, v31.4s - -- br x14 -+ ret x14 - endfunc - - .macro idct16_partial size -@@ -1390,7 +1390,7 @@ - - add sp, sp, #1024 - ldp d8, d9, [sp], 0x10 -- br x15 -+ ret x15 - endfunc - .endm - -@@ -1729,7 +1729,7 @@ - store_rev v29.4s, v25.4s, v21.4s, v17.4s, v29.16b, v25.16b - store_rev v28.4s, v24.4s, v20.4s, v16.4s, v28.16b, v24.16b - .purgem store_rev -- br x14 -+ ret x14 - endfunc - - // This is mostly the same as 4x32_pass1, but without the transpose, -@@ -1849,7 +1849,7 @@ - load_acc_store v24.4s, v25.4s, v26.4s, v27.4s, 1 - load_acc_store v28.4s, v29.4s, v30.4s, v31.4s, 1 - .purgem load_acc_store -- br x14 -+ ret x14 - endfunc - .endm - -@@ -1943,7 +1943,7 @@ - ldp d10, d11, [sp], 0x10 - ldp d8, d9, [sp], 0x10 - -- br x15 -+ ret x15 - endfunc - - function ff_vp9_idct_idct_32x32_add_10_neon, export=1 -@@ -2009,7 +2009,7 @@ - ldp d10, d11, [sp], 0x10 - ldp d8, d9, [sp], 0x10 - -- br x15 -+ ret x15 - endfunc - .endm - -diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S b/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S ---- a/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/vp9itxfm_neon.S 2023-04-06 12:50:06.970471013 +0200 -@@ -787,7 +787,7 @@ - .irp i, 16, 24, 17, 25, 18, 26, 19, 27, 20, 28, 21, 29, 22, 30, 23, 31 - store \i, x0, #16 - .endr -- br x14 -+ ret x14 - 1: - // Special case: For the last input column (x1 == 8), - // which would be stored as the last row in the temp buffer, -@@ -806,7 +806,7 @@ - mov v29.16b, v21.16b - mov v30.16b, v22.16b - mov v31.16b, v23.16b -- br x14 -+ ret x14 - endfunc - - // Read a vertical 8x16 slice out of a 16x16 matrix, do a transform on it, -@@ -834,7 +834,7 @@ - load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b - load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b - -- br x14 -+ ret x14 - endfunc - .endm - -@@ -850,10 +850,10 @@ - mov x15, x30 - // iadst16 requires clobbering v8-v15, but idct16 doesn't need to. - .ifnc \txfm1\()_\txfm2,idct_idct -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - .endif - - sub sp, sp, #512 -@@ -920,12 +920,12 @@ - - add sp, sp, #512 - .ifnc \txfm1\()_\txfm2,idct_idct -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 - .endif -- br x15 -+ ret x15 - endfunc - .endm - -@@ -960,7 +960,7 @@ - .irp i, 24, 25, 26, 27 - store \i, x0, x9 - .endr -- br x14 -+ ret x14 - endfunc - - function idct16_1d_8x16_pass2_quarter_neon -@@ -978,7 +978,7 @@ - load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b - load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b - -- br x14 -+ ret x14 - endfunc - - function idct16_1d_8x16_pass1_half_neon -@@ -1003,7 +1003,7 @@ - .irp i, 24, 25, 26, 27, 28, 29, 30, 31 - store \i, x0, x9 - .endr -- br x14 -+ ret x14 - endfunc - - function idct16_1d_8x16_pass2_half_neon -@@ -1021,7 +1021,7 @@ - load_add_store v16.8h, v17.8h, v18.8h, v19.8h, v20.8h, v21.8h, v22.8h, v23.8h, v16.8b, v17.8b - load_add_store v24.8h, v25.8h, v26.8h, v27.8h, v28.8h, v29.8h, v30.8h, v31.8h, v16.8b, v17.8b - -- br x14 -+ ret x14 - endfunc - - .macro idct16_partial size -@@ -1038,7 +1038,7 @@ - .endr - - add sp, sp, #512 -- br x15 -+ ret x15 - endfunc - .endm - -@@ -1349,7 +1349,7 @@ - store_rev v25.8h, v17.8h - store_rev v24.8h, v16.8h - .purgem store_rev -- br x14 -+ ret x14 - endfunc - - // This is mostly the same as 8x32_pass1, but without the transpose, -@@ -1466,7 +1466,7 @@ - load_acc_store v24.8h, v25.8h, v26.8h, v27.8h, 1 - load_acc_store v28.8h, v29.8h, v30.8h, v31.8h, 1 - .purgem load_acc_store -- br x14 -+ ret x14 - endfunc - .endm - -@@ -1486,8 +1486,8 @@ - - mov x15, x30 - -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x20]! -+ stp d10, d11, [sp, #0x10] - - sub sp, sp, #2048 - -@@ -1544,10 +1544,10 @@ - - add sp, sp, #2048 - -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d8, d9, [sp], #0x20 - -- br x15 -+ ret x15 - endfunc - - .macro idct32_partial size -@@ -1569,10 +1569,10 @@ - - add sp, sp, #2048 - -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d8, d9, [sp], #0x20 - -- br x15 -+ ret x15 - endfunc - .endm - -diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S b/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S ---- a/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/vp9lpf_16bpp_neon.S 2023-04-06 12:50:06.970471013 +0200 -@@ -22,18 +22,6 @@ - #include "neon.S" - - --.macro transpose_4x8H r0, r1, r2, r3, t4, t5, t6, t7 -- trn1 \t4\().8h, \r0\().8h, \r1\().8h -- trn2 \t5\().8h, \r0\().8h, \r1\().8h -- trn1 \t6\().8h, \r2\().8h, \r3\().8h -- trn2 \t7\().8h, \r2\().8h, \r3\().8h -- -- trn1 \r0\().4s, \t4\().4s, \t6\().4s -- trn2 \r2\().4s, \t4\().4s, \t6\().4s -- trn1 \r1\().4s, \t5\().4s, \t7\().4s -- trn2 \r3\().4s, \t5\().4s, \t7\().4s --.endm -- - // The input to and output from this macro is in the registers v16-v31, - // and v0-v7 are used as scratch registers. - // p7 = v16 .. p3 = v20, p0 = v23, q0 = v24, q3 = v27, q7 = v31 -@@ -69,7 +57,7 @@ - mov x12, v4.d[1] - adds x11, x11, x12 - b.ne 1f -- br x10 -+ ret x10 - 1: - - .if \wd >= 8 -@@ -205,7 +193,7 @@ - b.eq 6f - .else - b.ne 1f -- br x13 -+ ret x13 - 1: - .endif - -@@ -264,7 +252,7 @@ - b.ne 1f - // If no pixels needed flat8in nor flat8out, jump to a - // writeout of the inner 4 pixels -- br x14 -+ ret x14 - 1: - - mov x11, v7.d[0] -@@ -272,7 +260,7 @@ - adds x11, x11, x12 - b.ne 1f - // If no pixels need flat8out, jump to a writeout of the inner 6 pixels -- br x15 -+ ret x15 - - 1: - // flat8out -@@ -429,10 +417,10 @@ - function ff_\func\()_\bpp\()_neon, export=1 - .if \push - mov x16, x30 -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - .endif - lsl w2, w2, #\bpp - 8 - lsl w3, w3, #\bpp - 8 -@@ -442,11 +430,11 @@ - mov x7, #((1 << \bpp) - 1) - .if \push - bl \func\()_16_neon -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x16 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x16 - .else - b \func\()_16_neon - .endif -@@ -462,10 +450,10 @@ - function ff_\func\()_\suffix\()_\bpp\()_neon, export=1 - mov x16, x30 - .if \push -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - .endif - lsl w2, w2, #\bpp - 8 - lsl w3, w3, #\bpp - 8 -@@ -481,12 +469,12 @@ - .endif - bl \func\()_\int_suffix\()_16_neon - .if \push -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], 0x40 - .endif -- br x16 -+ ret x16 - endfunc - .endm - -@@ -520,7 +508,7 @@ - lsl w3, w14, #\bpp - 8 - lsl w4, w15, #\bpp - 8 - bl vp9_loop_filter_\dir\()_\wd2\()_8_16_neon -- br x16 -+ ret x16 - endfunc - .endm - -@@ -553,7 +541,7 @@ - st1 {v25.8h}, [x0], x1 - sub x0, x0, x1, lsl #1 - -- br x10 -+ ret x10 - endfunc - - bpp_frontends vp9_loop_filter_v_4_8 -@@ -601,7 +589,7 @@ - sub x0, x0, x1, lsl #3 - add x0, x0, #4 - -- br x10 -+ ret x10 - endfunc - - bpp_frontends vp9_loop_filter_h_4_8 -@@ -632,7 +620,7 @@ - sub x0, x0, x1, lsl #1 - sub x0, x0, x1 - -- br x10 -+ ret x10 - 6: - sub x9, x0, x1, lsl #1 - st1 {v22.8h}, [x9], x1 -@@ -640,7 +628,7 @@ - st1 {v23.8h}, [x9], x1 - st1 {v25.8h}, [x0], x1 - sub x0, x0, x1, lsl #1 -- br x10 -+ ret x10 - endfunc - - bpp_frontends vp9_loop_filter_v_8_8 -@@ -683,7 +671,7 @@ - sub x0, x0, x1, lsl #3 - add x0, x0, #8 - -- br x10 -+ ret x10 - 6: - // If we didn't need to do the flat8in part, we use the same writeback - // as in loop_filter_h_4_8. -@@ -700,7 +688,7 @@ - st1 {v25.d}[1], [x0], x1 - sub x0, x0, x1, lsl #3 - add x0, x0, #4 -- br x10 -+ ret x10 - endfunc - - bpp_frontends vp9_loop_filter_h_8_8 -@@ -755,7 +743,7 @@ - sub x0, x0, x1, lsl #3 - add x0, x0, x1 - -- br x10 -+ ret x10 - 8: - add x9, x9, x1, lsl #2 - // If we didn't do the flat8out part, the output is left in the -@@ -768,7 +756,7 @@ - st1 {v26.8h}, [x0], x1 - sub x0, x0, x1, lsl #1 - sub x0, x0, x1 -- br x10 -+ ret x10 - 7: - sub x9, x0, x1, lsl #1 - st1 {v22.8h}, [x9], x1 -@@ -776,7 +764,7 @@ - st1 {v23.8h}, [x9], x1 - st1 {v25.8h}, [x0], x1 - sub x0, x0, x1, lsl #1 -- br x10 -+ ret x10 - endfunc - - bpp_frontends vp9_loop_filter_v_16_8, push=1 -@@ -833,7 +821,7 @@ - st1 {v31.8h}, [x0], x1 - sub x0, x0, x1, lsl #3 - -- br x10 -+ ret x10 - 8: - // The same writeback as in loop_filter_h_8_8 - sub x9, x0, #8 -@@ -850,7 +838,7 @@ - st1 {v27.8h}, [x0], x1 - sub x0, x0, x1, lsl #3 - add x0, x0, #8 -- br x10 -+ ret x10 - 7: - // The same writeback as in loop_filter_h_4_8 - sub x9, x0, #4 -@@ -866,7 +854,7 @@ - st1 {v25.d}[1], [x0], x1 - sub x0, x0, x1, lsl #3 - add x0, x0, #4 -- br x10 -+ ret x10 - endfunc - - bpp_frontends vp9_loop_filter_h_16_8, push=1 -diff -Naur a/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S b/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S ---- a/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/aarch64/vp9lpf_neon.S 2023-04-06 12:50:06.970471013 +0200 -@@ -399,7 +399,7 @@ - .endif - // If no pixels needed flat8in nor flat8out, jump to a - // writeout of the inner 4 pixels -- br x14 -+ ret x14 - 1: - - mov x5, v7.d[0] -@@ -411,7 +411,7 @@ - cbnz x5, 1f - .endif - // If no pixels need flat8out, jump to a writeout of the inner 6 pixels -- br x15 -+ ret x15 - - 1: - // flat8out -@@ -532,54 +532,54 @@ - loop_filter 4, .8b, 0, v16, v17, v18, v19, v28, v29, v30, v31 - ret - 9: -- br x10 -+ ret x10 - endfunc - - function vp9_loop_filter_4_16b_mix_44 - loop_filter 4, .16b, 44, v16, v17, v18, v19, v28, v29, v30, v31 - ret - 9: -- br x10 -+ ret x10 - endfunc - - function vp9_loop_filter_8 - loop_filter 8, .8b, 0, v16, v17, v18, v19, v28, v29, v30, v31 - ret - 6: -- br x13 -+ ret x13 - 9: -- br x10 -+ ret x10 - endfunc - - function vp9_loop_filter_8_16b_mix - loop_filter 8, .16b, 88, v16, v17, v18, v19, v28, v29, v30, v31 - ret - 6: -- br x13 -+ ret x13 - 9: -- br x10 -+ ret x10 - endfunc - - function vp9_loop_filter_16 - loop_filter 16, .8b, 0, v8, v9, v10, v11, v12, v13, v14, v15 - ret - 9: -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x10 - endfunc - - function vp9_loop_filter_16_16b - loop_filter 16, .16b, 0, v8, v9, v10, v11, v12, v13, v14, v15 - ret - 9: -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x10 - endfunc - - .macro loop_filter_4 -@@ -648,7 +648,7 @@ - st1 {v23.8b}, [x9], x1 - st1 {v25.8b}, [x0], x1 - -- br x10 -+ ret x10 - endfunc - - function ff_vp9_loop_filter_v_44_16_neon, export=1 -@@ -672,7 +672,7 @@ - st1 {v23.16b}, [x9], x1 - st1 {v25.16b}, [x0], x1 - -- br x10 -+ ret x10 - endfunc - - function ff_vp9_loop_filter_h_4_8_neon, export=1 -@@ -714,7 +714,7 @@ - st1 {v25.s}[0], [x9], x1 - st1 {v25.s}[1], [x0], x1 - -- br x10 -+ ret x10 - endfunc - - function ff_vp9_loop_filter_h_44_16_neon, export=1 -@@ -766,7 +766,7 @@ - st1 {v25.s}[1], [x9], x1 - st1 {v25.s}[3], [x0], x1 - -- br x10 -+ ret x10 - endfunc - - function ff_vp9_loop_filter_v_8_8_neon, export=1 -@@ -793,14 +793,14 @@ - st1 {v23.8b}, [x9], x1 - st1 {v26.8b}, [x0], x1 - -- br x10 -+ ret x10 - 6: - sub x9, x0, x1, lsl #1 - st1 {v22.8b}, [x9], x1 - st1 {v24.8b}, [x0], x1 - st1 {v23.8b}, [x9], x1 - st1 {v25.8b}, [x0], x1 -- br x10 -+ ret x10 - endfunc - - .macro mix_v_16 mix -@@ -828,14 +828,14 @@ - st1 {v23.16b}, [x9], x1 - st1 {v26.16b}, [x0], x1 - -- br x10 -+ ret x10 - 6: - sub x9, x0, x1, lsl #1 - st1 {v22.16b}, [x9], x1 - st1 {v24.16b}, [x0], x1 - st1 {v23.16b}, [x9], x1 - st1 {v25.16b}, [x0], x1 -- br x10 -+ ret x10 - endfunc - .endm - -@@ -876,7 +876,7 @@ - st1 {v23.8b}, [x9], x1 - st1 {v27.8b}, [x0], x1 - -- br x10 -+ ret x10 - 6: - // If we didn't need to do the flat8in part, we use the same writeback - // as in loop_filter_h_4_8. -@@ -891,7 +891,7 @@ - st1 {v24.s}[1], [x0], x1 - st1 {v25.s}[0], [x9], x1 - st1 {v25.s}[1], [x0], x1 -- br x10 -+ ret x10 - endfunc - - .macro mix_h_16 mix -@@ -942,7 +942,7 @@ - st1 {v27.8b}, [x9], x1 - st1 {v27.d}[1], [x0], x1 - -- br x10 -+ ret x10 - 6: - add x9, x9, #2 - add x0, x0, #2 -@@ -963,7 +963,7 @@ - st1 {v24.s}[3], [x0], x1 - st1 {v25.s}[1], [x9], x1 - st1 {v25.s}[3], [x0], x1 -- br x10 -+ ret x10 - endfunc - .endm - -@@ -973,10 +973,10 @@ - - function ff_vp9_loop_filter_v_16_8_neon, export=1 - mov x10, x30 -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - sub x9, x0, x1, lsl #3 - ld1 {v16.8b}, [x9], x1 // p7 - ld1 {v24.8b}, [x0], x1 // q0 -@@ -1018,11 +1018,11 @@ - st1 {v9.8b}, [x9], x1 - st1 {v17.8b}, [x0], x1 - 9: -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x10 - 8: - add x9, x9, x1, lsl #2 - // If we didn't do the flat8out part, the output is left in the -@@ -1045,10 +1045,10 @@ - - function ff_vp9_loop_filter_v_16_16_neon, export=1 - mov x10, x30 -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - sub x9, x0, x1, lsl #3 - ld1 {v16.16b}, [x9], x1 // p7 - ld1 {v24.16b}, [x0], x1 // q0 -@@ -1087,11 +1087,11 @@ - st1 {v9.16b}, [x9], x1 - st1 {v17.16b}, [x0], x1 - 9: -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x10 - 8: - add x9, x9, x1, lsl #2 - st1 {v21.16b}, [x9], x1 -@@ -1112,10 +1112,10 @@ - - function ff_vp9_loop_filter_h_16_8_neon, export=1 - mov x10, x30 -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - sub x9, x0, #8 - ld1 {v16.8b}, [x9], x1 - ld1 {v24.8b}, [x0], x1 -@@ -1164,11 +1164,11 @@ - st1 {v9.8b}, [x9], x1 - st1 {v31.8b}, [x0], x1 - 9: -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x10 - 8: - // The same writeback as in loop_filter_h_8_8 - sub x9, x0, #4 -@@ -1202,10 +1202,10 @@ - - function ff_vp9_loop_filter_h_16_16_neon, export=1 - mov x10, x30 -- stp d14, d15, [sp, #-0x10]! -- stp d12, d13, [sp, #-0x10]! -- stp d10, d11, [sp, #-0x10]! -- stp d8, d9, [sp, #-0x10]! -+ stp d8, d9, [sp, #-0x40]! -+ stp d14, d15, [sp, #0x30] -+ stp d12, d13, [sp, #0x20] -+ stp d10, d11, [sp, #0x10] - sub x9, x0, #8 - ld1 {v16.8b}, [x9], x1 - ld1 {v24.8b}, [x0], x1 -@@ -1283,11 +1283,11 @@ - st1 {v9.d}[1], [x9], x1 - st1 {v31.d}[1], [x0], x1 - 9: -- ldp d8, d9, [sp], 0x10 -- ldp d10, d11, [sp], 0x10 -- ldp d12, d13, [sp], 0x10 -- ldp d14, d15, [sp], 0x10 -- br x10 -+ ldp d10, d11, [sp, #0x10] -+ ldp d12, d13, [sp, #0x20] -+ ldp d14, d15, [sp, #0x30] -+ ldp d8, d9, [sp], #0x40 -+ ret x10 - 8: - sub x9, x0, #4 - add x0, x9, x1, lsl #3 -diff -Naur a/media/ffvpx/libavcodec/allcodecs.c b/media/ffvpx/libavcodec/allcodecs.c ---- a/media/ffvpx/libavcodec/allcodecs.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/allcodecs.c 2023-04-06 12:50:24.490176462 +0200 -@@ -24,821 +24,877 @@ - * Provide registration of all codecs, parsers and bitstream filters for libavcodec. - */ - -+#include -+#include -+ - #include "config.h" -+#include "config_components.h" - #include "libavutil/thread.h" --#include "avcodec.h" --#include "version.h" -- --extern AVCodec ff_a64multi_encoder; --extern AVCodec ff_a64multi5_encoder; --extern AVCodec ff_aasc_decoder; --extern AVCodec ff_aic_decoder; --extern AVCodec ff_alias_pix_encoder; --extern AVCodec ff_alias_pix_decoder; --extern AVCodec ff_agm_decoder; --extern AVCodec ff_amv_encoder; --extern AVCodec ff_amv_decoder; --extern AVCodec ff_anm_decoder; --extern AVCodec ff_ansi_decoder; --extern AVCodec ff_apng_encoder; --extern AVCodec ff_apng_decoder; --extern AVCodec ff_arbc_decoder; --extern AVCodec ff_argo_decoder; --extern AVCodec ff_asv1_encoder; --extern AVCodec ff_asv1_decoder; --extern AVCodec ff_asv2_encoder; --extern AVCodec ff_asv2_decoder; --extern AVCodec ff_aura_decoder; --extern AVCodec ff_aura2_decoder; --extern AVCodec ff_avrp_encoder; --extern AVCodec ff_avrp_decoder; --extern AVCodec ff_avrn_decoder; --extern AVCodec ff_avs_decoder; --extern AVCodec ff_avui_encoder; --extern AVCodec ff_avui_decoder; --extern AVCodec ff_ayuv_encoder; --extern AVCodec ff_ayuv_decoder; --extern AVCodec ff_bethsoftvid_decoder; --extern AVCodec ff_bfi_decoder; --extern AVCodec ff_bink_decoder; --extern AVCodec ff_bitpacked_decoder; --extern AVCodec ff_bmp_encoder; --extern AVCodec ff_bmp_decoder; --extern AVCodec ff_bmv_video_decoder; --extern AVCodec ff_brender_pix_decoder; --extern AVCodec ff_c93_decoder; --extern AVCodec ff_cavs_decoder; --extern AVCodec ff_cdgraphics_decoder; --extern AVCodec ff_cdtoons_decoder; --extern AVCodec ff_cdxl_decoder; --extern AVCodec ff_cfhd_encoder; --extern AVCodec ff_cfhd_decoder; --extern AVCodec ff_cinepak_encoder; --extern AVCodec ff_cinepak_decoder; --extern AVCodec ff_clearvideo_decoder; --extern AVCodec ff_cljr_encoder; --extern AVCodec ff_cljr_decoder; --extern AVCodec ff_cllc_decoder; --extern AVCodec ff_comfortnoise_encoder; --extern AVCodec ff_comfortnoise_decoder; --extern AVCodec ff_cpia_decoder; --extern AVCodec ff_cri_decoder; --extern AVCodec ff_cscd_decoder; --extern AVCodec ff_cyuv_decoder; --extern AVCodec ff_dds_decoder; --extern AVCodec ff_dfa_decoder; --extern AVCodec ff_dirac_decoder; --extern AVCodec ff_dnxhd_encoder; --extern AVCodec ff_dnxhd_decoder; --extern AVCodec ff_dpx_encoder; --extern AVCodec ff_dpx_decoder; --extern AVCodec ff_dsicinvideo_decoder; --extern AVCodec ff_dvaudio_decoder; --extern AVCodec ff_dvvideo_encoder; --extern AVCodec ff_dvvideo_decoder; --extern AVCodec ff_dxa_decoder; --extern AVCodec ff_dxtory_decoder; --extern AVCodec ff_dxv_decoder; --extern AVCodec ff_eacmv_decoder; --extern AVCodec ff_eamad_decoder; --extern AVCodec ff_eatgq_decoder; --extern AVCodec ff_eatgv_decoder; --extern AVCodec ff_eatqi_decoder; --extern AVCodec ff_eightbps_decoder; --extern AVCodec ff_eightsvx_exp_decoder; --extern AVCodec ff_eightsvx_fib_decoder; --extern AVCodec ff_escape124_decoder; --extern AVCodec ff_escape130_decoder; --extern AVCodec ff_exr_encoder; --extern AVCodec ff_exr_decoder; --extern AVCodec ff_ffv1_encoder; --extern AVCodec ff_ffv1_decoder; --extern AVCodec ff_ffvhuff_encoder; --extern AVCodec ff_ffvhuff_decoder; --extern AVCodec ff_fic_decoder; --extern AVCodec ff_fits_encoder; --extern AVCodec ff_fits_decoder; --extern AVCodec ff_flashsv_encoder; --extern AVCodec ff_flashsv_decoder; --extern AVCodec ff_flashsv2_encoder; --extern AVCodec ff_flashsv2_decoder; --extern AVCodec ff_flic_decoder; --extern AVCodec ff_flv_encoder; --extern AVCodec ff_flv_decoder; --extern AVCodec ff_fmvc_decoder; --extern AVCodec ff_fourxm_decoder; --extern AVCodec ff_fraps_decoder; --extern AVCodec ff_frwu_decoder; --extern AVCodec ff_g2m_decoder; --extern AVCodec ff_gdv_decoder; --extern AVCodec ff_gif_encoder; --extern AVCodec ff_gif_decoder; --extern AVCodec ff_h261_encoder; --extern AVCodec ff_h261_decoder; --extern AVCodec ff_h263_encoder; --extern AVCodec ff_h263_decoder; --extern AVCodec ff_h263i_decoder; --extern AVCodec ff_h263p_encoder; --extern AVCodec ff_h263p_decoder; --extern AVCodec ff_h263_v4l2m2m_decoder; --extern AVCodec ff_h264_decoder; --extern AVCodec ff_h264_crystalhd_decoder; --extern AVCodec ff_h264_v4l2m2m_decoder; --extern AVCodec ff_h264_mediacodec_decoder; --extern AVCodec ff_h264_mmal_decoder; --extern AVCodec ff_h264_qsv_decoder; --extern AVCodec ff_h264_rkmpp_decoder; --extern AVCodec ff_hap_encoder; --extern AVCodec ff_hap_decoder; --extern AVCodec ff_hevc_decoder; --extern AVCodec ff_hevc_qsv_decoder; --extern AVCodec ff_hevc_rkmpp_decoder; --extern AVCodec ff_hevc_v4l2m2m_decoder; --extern AVCodec ff_hnm4_video_decoder; --extern AVCodec ff_hq_hqa_decoder; --extern AVCodec ff_hqx_decoder; --extern AVCodec ff_huffyuv_encoder; --extern AVCodec ff_huffyuv_decoder; --extern AVCodec ff_hymt_decoder; --extern AVCodec ff_idcin_decoder; --extern AVCodec ff_iff_ilbm_decoder; --extern AVCodec ff_imm4_decoder; --extern AVCodec ff_imm5_decoder; --extern AVCodec ff_indeo2_decoder; --extern AVCodec ff_indeo3_decoder; --extern AVCodec ff_indeo4_decoder; --extern AVCodec ff_indeo5_decoder; --extern AVCodec ff_interplay_video_decoder; --extern AVCodec ff_ipu_decoder; --extern AVCodec ff_jpeg2000_encoder; --extern AVCodec ff_jpeg2000_decoder; --extern AVCodec ff_jpegls_encoder; --extern AVCodec ff_jpegls_decoder; --extern AVCodec ff_jv_decoder; --extern AVCodec ff_kgv1_decoder; --extern AVCodec ff_kmvc_decoder; --extern AVCodec ff_lagarith_decoder; --extern AVCodec ff_ljpeg_encoder; --extern AVCodec ff_loco_decoder; --extern AVCodec ff_lscr_decoder; --extern AVCodec ff_m101_decoder; --extern AVCodec ff_magicyuv_encoder; --extern AVCodec ff_magicyuv_decoder; --extern AVCodec ff_mdec_decoder; --extern AVCodec ff_mimic_decoder; --extern AVCodec ff_mjpeg_encoder; --extern AVCodec ff_mjpeg_decoder; --extern AVCodec ff_mjpegb_decoder; --extern AVCodec ff_mmvideo_decoder; --extern AVCodec ff_mobiclip_decoder; --extern AVCodec ff_motionpixels_decoder; --extern AVCodec ff_mpeg1video_encoder; --extern AVCodec ff_mpeg1video_decoder; --extern AVCodec ff_mpeg2video_encoder; --extern AVCodec ff_mpeg2video_decoder; --extern AVCodec ff_mpeg4_encoder; --extern AVCodec ff_mpeg4_decoder; --extern AVCodec ff_mpeg4_crystalhd_decoder; --extern AVCodec ff_mpeg4_v4l2m2m_decoder; --extern AVCodec ff_mpeg4_mmal_decoder; --extern AVCodec ff_mpegvideo_decoder; --extern AVCodec ff_mpeg1_v4l2m2m_decoder; --extern AVCodec ff_mpeg2_mmal_decoder; --extern AVCodec ff_mpeg2_crystalhd_decoder; --extern AVCodec ff_mpeg2_v4l2m2m_decoder; --extern AVCodec ff_mpeg2_qsv_decoder; --extern AVCodec ff_mpeg2_mediacodec_decoder; --extern AVCodec ff_msa1_decoder; --extern AVCodec ff_mscc_decoder; --extern AVCodec ff_msmpeg4v1_decoder; --extern AVCodec ff_msmpeg4v2_encoder; --extern AVCodec ff_msmpeg4v2_decoder; --extern AVCodec ff_msmpeg4v3_encoder; --extern AVCodec ff_msmpeg4v3_decoder; --extern AVCodec ff_msmpeg4_crystalhd_decoder; --extern AVCodec ff_msp2_decoder; --extern AVCodec ff_msrle_decoder; --extern AVCodec ff_mss1_decoder; --extern AVCodec ff_mss2_decoder; --extern AVCodec ff_msvideo1_encoder; --extern AVCodec ff_msvideo1_decoder; --extern AVCodec ff_mszh_decoder; --extern AVCodec ff_mts2_decoder; --extern AVCodec ff_mv30_decoder; --extern AVCodec ff_mvc1_decoder; --extern AVCodec ff_mvc2_decoder; --extern AVCodec ff_mvdv_decoder; --extern AVCodec ff_mvha_decoder; --extern AVCodec ff_mwsc_decoder; --extern AVCodec ff_mxpeg_decoder; --extern AVCodec ff_notchlc_decoder; --extern AVCodec ff_nuv_decoder; --extern AVCodec ff_paf_video_decoder; --extern AVCodec ff_pam_encoder; --extern AVCodec ff_pam_decoder; --extern AVCodec ff_pbm_encoder; --extern AVCodec ff_pbm_decoder; --extern AVCodec ff_pcx_encoder; --extern AVCodec ff_pcx_decoder; --extern AVCodec ff_pfm_encoder; --extern AVCodec ff_pfm_decoder; --extern AVCodec ff_pgm_encoder; --extern AVCodec ff_pgm_decoder; --extern AVCodec ff_pgmyuv_encoder; --extern AVCodec ff_pgmyuv_decoder; --extern AVCodec ff_pgx_decoder; --extern AVCodec ff_photocd_decoder; --extern AVCodec ff_pictor_decoder; --extern AVCodec ff_pixlet_decoder; --extern AVCodec ff_png_encoder; --extern AVCodec ff_png_decoder; --extern AVCodec ff_ppm_encoder; --extern AVCodec ff_ppm_decoder; --extern AVCodec ff_prores_encoder; --extern AVCodec ff_prores_decoder; --extern AVCodec ff_prores_aw_encoder; --extern AVCodec ff_prores_ks_encoder; --extern AVCodec ff_prosumer_decoder; --extern AVCodec ff_psd_decoder; --extern AVCodec ff_ptx_decoder; --extern AVCodec ff_qdraw_decoder; --extern AVCodec ff_qpeg_decoder; --extern AVCodec ff_qtrle_encoder; --extern AVCodec ff_qtrle_decoder; --extern AVCodec ff_r10k_encoder; --extern AVCodec ff_r10k_decoder; --extern AVCodec ff_r210_encoder; --extern AVCodec ff_r210_decoder; --extern AVCodec ff_rasc_decoder; --extern AVCodec ff_rawvideo_encoder; --extern AVCodec ff_rawvideo_decoder; --extern AVCodec ff_rl2_decoder; --extern AVCodec ff_roq_encoder; --extern AVCodec ff_roq_decoder; --extern AVCodec ff_rpza_encoder; --extern AVCodec ff_rpza_decoder; --extern AVCodec ff_rscc_decoder; --extern AVCodec ff_rv10_encoder; --extern AVCodec ff_rv10_decoder; --extern AVCodec ff_rv20_encoder; --extern AVCodec ff_rv20_decoder; --extern AVCodec ff_rv30_decoder; --extern AVCodec ff_rv40_decoder; --extern AVCodec ff_s302m_encoder; --extern AVCodec ff_s302m_decoder; --extern AVCodec ff_sanm_decoder; --extern AVCodec ff_scpr_decoder; --extern AVCodec ff_screenpresso_decoder; --extern AVCodec ff_sga_decoder; --extern AVCodec ff_sgi_encoder; --extern AVCodec ff_sgi_decoder; --extern AVCodec ff_sgirle_decoder; --extern AVCodec ff_sheervideo_decoder; --extern AVCodec ff_simbiosis_imx_decoder; --extern AVCodec ff_smacker_decoder; --extern AVCodec ff_smc_decoder; --extern AVCodec ff_smvjpeg_decoder; --extern AVCodec ff_snow_encoder; --extern AVCodec ff_snow_decoder; --extern AVCodec ff_sp5x_decoder; --extern AVCodec ff_speedhq_decoder; --extern AVCodec ff_speedhq_encoder; --extern AVCodec ff_srgc_decoder; --extern AVCodec ff_sunrast_encoder; --extern AVCodec ff_sunrast_decoder; --extern AVCodec ff_svq1_encoder; --extern AVCodec ff_svq1_decoder; --extern AVCodec ff_svq3_decoder; --extern AVCodec ff_targa_encoder; --extern AVCodec ff_targa_decoder; --extern AVCodec ff_targa_y216_decoder; --extern AVCodec ff_tdsc_decoder; --extern AVCodec ff_theora_decoder; --extern AVCodec ff_thp_decoder; --extern AVCodec ff_tiertexseqvideo_decoder; --extern AVCodec ff_tiff_encoder; --extern AVCodec ff_tiff_decoder; --extern AVCodec ff_tmv_decoder; --extern AVCodec ff_truemotion1_decoder; --extern AVCodec ff_truemotion2_decoder; --extern AVCodec ff_truemotion2rt_decoder; --extern AVCodec ff_tscc_decoder; --extern AVCodec ff_tscc2_decoder; --extern AVCodec ff_txd_decoder; --extern AVCodec ff_ulti_decoder; --extern AVCodec ff_utvideo_encoder; --extern AVCodec ff_utvideo_decoder; --extern AVCodec ff_v210_encoder; --extern AVCodec ff_v210_decoder; --extern AVCodec ff_v210x_decoder; --extern AVCodec ff_v308_encoder; --extern AVCodec ff_v308_decoder; --extern AVCodec ff_v408_encoder; --extern AVCodec ff_v408_decoder; --extern AVCodec ff_v410_encoder; --extern AVCodec ff_v410_decoder; --extern AVCodec ff_vb_decoder; --extern AVCodec ff_vble_decoder; --extern AVCodec ff_vc1_decoder; --extern AVCodec ff_vc1_crystalhd_decoder; --extern AVCodec ff_vc1image_decoder; --extern AVCodec ff_vc1_mmal_decoder; --extern AVCodec ff_vc1_qsv_decoder; --extern AVCodec ff_vc1_v4l2m2m_decoder; --extern AVCodec ff_vc2_encoder; --extern AVCodec ff_vcr1_decoder; --extern AVCodec ff_vmdvideo_decoder; --extern AVCodec ff_vmnc_decoder; --extern AVCodec ff_vp3_decoder; --extern AVCodec ff_vp4_decoder; --extern AVCodec ff_vp5_decoder; --extern AVCodec ff_vp6_decoder; --extern AVCodec ff_vp6a_decoder; --extern AVCodec ff_vp6f_decoder; --extern AVCodec ff_vp7_decoder; --extern AVCodec ff_vp8_decoder; --extern AVCodec ff_vp8_rkmpp_decoder; --extern AVCodec ff_vp8_v4l2m2m_decoder; --extern AVCodec ff_vp9_decoder; --extern AVCodec ff_vp9_rkmpp_decoder; --extern AVCodec ff_vp9_v4l2m2m_decoder; --extern AVCodec ff_vqa_decoder; --extern AVCodec ff_webp_decoder; --extern AVCodec ff_wcmv_decoder; --extern AVCodec ff_wrapped_avframe_encoder; --extern AVCodec ff_wrapped_avframe_decoder; --extern AVCodec ff_wmv1_encoder; --extern AVCodec ff_wmv1_decoder; --extern AVCodec ff_wmv2_encoder; --extern AVCodec ff_wmv2_decoder; --extern AVCodec ff_wmv3_decoder; --extern AVCodec ff_wmv3_crystalhd_decoder; --extern AVCodec ff_wmv3image_decoder; --extern AVCodec ff_wnv1_decoder; --extern AVCodec ff_xan_wc3_decoder; --extern AVCodec ff_xan_wc4_decoder; --extern AVCodec ff_xbm_encoder; --extern AVCodec ff_xbm_decoder; --extern AVCodec ff_xface_encoder; --extern AVCodec ff_xface_decoder; --extern AVCodec ff_xl_decoder; --extern AVCodec ff_xpm_decoder; --extern AVCodec ff_xwd_encoder; --extern AVCodec ff_xwd_decoder; --extern AVCodec ff_y41p_encoder; --extern AVCodec ff_y41p_decoder; --extern AVCodec ff_ylc_decoder; --extern AVCodec ff_yop_decoder; --extern AVCodec ff_yuv4_encoder; --extern AVCodec ff_yuv4_decoder; --extern AVCodec ff_zero12v_decoder; --extern AVCodec ff_zerocodec_decoder; --extern AVCodec ff_zlib_encoder; --extern AVCodec ff_zlib_decoder; --extern AVCodec ff_zmbv_encoder; --extern AVCodec ff_zmbv_decoder; -+#include "codec.h" -+#include "codec_id.h" -+#include "codec_internal.h" -+ -+extern const FFCodec ff_a64multi_encoder; -+extern const FFCodec ff_a64multi5_encoder; -+extern const FFCodec ff_aasc_decoder; -+extern const FFCodec ff_aic_decoder; -+extern const FFCodec ff_alias_pix_encoder; -+extern const FFCodec ff_alias_pix_decoder; -+extern const FFCodec ff_agm_decoder; -+extern const FFCodec ff_amv_encoder; -+extern const FFCodec ff_amv_decoder; -+extern const FFCodec ff_anm_decoder; -+extern const FFCodec ff_ansi_decoder; -+extern const FFCodec ff_apng_encoder; -+extern const FFCodec ff_apng_decoder; -+extern const FFCodec ff_arbc_decoder; -+extern const FFCodec ff_argo_decoder; -+extern const FFCodec ff_asv1_encoder; -+extern const FFCodec ff_asv1_decoder; -+extern const FFCodec ff_asv2_encoder; -+extern const FFCodec ff_asv2_decoder; -+extern const FFCodec ff_aura_decoder; -+extern const FFCodec ff_aura2_decoder; -+extern const FFCodec ff_avrp_encoder; -+extern const FFCodec ff_avrp_decoder; -+extern const FFCodec ff_avrn_decoder; -+extern const FFCodec ff_avs_decoder; -+extern const FFCodec ff_avui_encoder; -+extern const FFCodec ff_avui_decoder; -+#if FF_API_AYUV_CODECID -+extern const FFCodec ff_ayuv_encoder; -+extern const FFCodec ff_ayuv_decoder; -+#endif -+extern const FFCodec ff_bethsoftvid_decoder; -+extern const FFCodec ff_bfi_decoder; -+extern const FFCodec ff_bink_decoder; -+extern const FFCodec ff_bitpacked_decoder; -+extern const FFCodec ff_bitpacked_encoder; -+extern const FFCodec ff_bmp_encoder; -+extern const FFCodec ff_bmp_decoder; -+extern const FFCodec ff_bmv_video_decoder; -+extern const FFCodec ff_brender_pix_decoder; -+extern const FFCodec ff_c93_decoder; -+extern const FFCodec ff_cavs_decoder; -+extern const FFCodec ff_cdgraphics_decoder; -+extern const FFCodec ff_cdtoons_decoder; -+extern const FFCodec ff_cdxl_decoder; -+extern const FFCodec ff_cfhd_encoder; -+extern const FFCodec ff_cfhd_decoder; -+extern const FFCodec ff_cinepak_encoder; -+extern const FFCodec ff_cinepak_decoder; -+extern const FFCodec ff_clearvideo_decoder; -+extern const FFCodec ff_cljr_encoder; -+extern const FFCodec ff_cljr_decoder; -+extern const FFCodec ff_cllc_decoder; -+extern const FFCodec ff_comfortnoise_encoder; -+extern const FFCodec ff_comfortnoise_decoder; -+extern const FFCodec ff_cpia_decoder; -+extern const FFCodec ff_cri_decoder; -+extern const FFCodec ff_cscd_decoder; -+extern const FFCodec ff_cyuv_decoder; -+extern const FFCodec ff_dds_decoder; -+extern const FFCodec ff_dfa_decoder; -+extern const FFCodec ff_dirac_decoder; -+extern const FFCodec ff_dnxhd_encoder; -+extern const FFCodec ff_dnxhd_decoder; -+extern const FFCodec ff_dpx_encoder; -+extern const FFCodec ff_dpx_decoder; -+extern const FFCodec ff_dsicinvideo_decoder; -+extern const FFCodec ff_dvaudio_decoder; -+extern const FFCodec ff_dvvideo_encoder; -+extern const FFCodec ff_dvvideo_decoder; -+extern const FFCodec ff_dxa_decoder; -+extern const FFCodec ff_dxtory_decoder; -+extern const FFCodec ff_dxv_decoder; -+extern const FFCodec ff_eacmv_decoder; -+extern const FFCodec ff_eamad_decoder; -+extern const FFCodec ff_eatgq_decoder; -+extern const FFCodec ff_eatgv_decoder; -+extern const FFCodec ff_eatqi_decoder; -+extern const FFCodec ff_eightbps_decoder; -+extern const FFCodec ff_eightsvx_exp_decoder; -+extern const FFCodec ff_eightsvx_fib_decoder; -+extern const FFCodec ff_escape124_decoder; -+extern const FFCodec ff_escape130_decoder; -+extern const FFCodec ff_exr_encoder; -+extern const FFCodec ff_exr_decoder; -+extern const FFCodec ff_ffv1_encoder; -+extern const FFCodec ff_ffv1_decoder; -+extern const FFCodec ff_ffvhuff_encoder; -+extern const FFCodec ff_ffvhuff_decoder; -+extern const FFCodec ff_fic_decoder; -+extern const FFCodec ff_fits_encoder; -+extern const FFCodec ff_fits_decoder; -+extern const FFCodec ff_flashsv_encoder; -+extern const FFCodec ff_flashsv_decoder; -+extern const FFCodec ff_flashsv2_encoder; -+extern const FFCodec ff_flashsv2_decoder; -+extern const FFCodec ff_flic_decoder; -+extern const FFCodec ff_flv_encoder; -+extern const FFCodec ff_flv_decoder; -+extern const FFCodec ff_fmvc_decoder; -+extern const FFCodec ff_fourxm_decoder; -+extern const FFCodec ff_fraps_decoder; -+extern const FFCodec ff_frwu_decoder; -+extern const FFCodec ff_g2m_decoder; -+extern const FFCodec ff_gdv_decoder; -+extern const FFCodec ff_gem_decoder; -+extern const FFCodec ff_gif_encoder; -+extern const FFCodec ff_gif_decoder; -+extern const FFCodec ff_h261_encoder; -+extern const FFCodec ff_h261_decoder; -+extern const FFCodec ff_h263_encoder; -+extern const FFCodec ff_h263_decoder; -+extern const FFCodec ff_h263i_decoder; -+extern const FFCodec ff_h263p_encoder; -+extern const FFCodec ff_h263p_decoder; -+extern const FFCodec ff_h263_v4l2m2m_decoder; -+extern const FFCodec ff_h264_decoder; -+extern const FFCodec ff_h264_crystalhd_decoder; -+extern const FFCodec ff_h264_v4l2m2m_decoder; -+extern const FFCodec ff_h264_mediacodec_decoder; -+extern const FFCodec ff_h264_mediacodec_encoder; -+extern const FFCodec ff_h264_mmal_decoder; -+extern const FFCodec ff_h264_qsv_decoder; -+extern const FFCodec ff_h264_rkmpp_decoder; -+extern const FFCodec ff_hap_encoder; -+extern const FFCodec ff_hap_decoder; -+extern const FFCodec ff_hevc_decoder; -+extern const FFCodec ff_hevc_qsv_decoder; -+extern const FFCodec ff_hevc_rkmpp_decoder; -+extern const FFCodec ff_hevc_v4l2m2m_decoder; -+extern const FFCodec ff_hnm4_video_decoder; -+extern const FFCodec ff_hq_hqa_decoder; -+extern const FFCodec ff_hqx_decoder; -+extern const FFCodec ff_huffyuv_encoder; -+extern const FFCodec ff_huffyuv_decoder; -+extern const FFCodec ff_hymt_decoder; -+extern const FFCodec ff_idcin_decoder; -+extern const FFCodec ff_iff_ilbm_decoder; -+extern const FFCodec ff_imm4_decoder; -+extern const FFCodec ff_imm5_decoder; -+extern const FFCodec ff_indeo2_decoder; -+extern const FFCodec ff_indeo3_decoder; -+extern const FFCodec ff_indeo4_decoder; -+extern const FFCodec ff_indeo5_decoder; -+extern const FFCodec ff_interplay_video_decoder; -+extern const FFCodec ff_ipu_decoder; -+extern const FFCodec ff_jpeg2000_encoder; -+extern const FFCodec ff_jpeg2000_decoder; -+extern const FFCodec ff_jpegls_encoder; -+extern const FFCodec ff_jpegls_decoder; -+extern const FFCodec ff_jv_decoder; -+extern const FFCodec ff_kgv1_decoder; -+extern const FFCodec ff_kmvc_decoder; -+extern const FFCodec ff_lagarith_decoder; -+extern const FFCodec ff_ljpeg_encoder; -+extern const FFCodec ff_loco_decoder; -+extern const FFCodec ff_lscr_decoder; -+extern const FFCodec ff_m101_decoder; -+extern const FFCodec ff_magicyuv_encoder; -+extern const FFCodec ff_magicyuv_decoder; -+extern const FFCodec ff_mdec_decoder; -+extern const FFCodec ff_media100_decoder; -+extern const FFCodec ff_mimic_decoder; -+extern const FFCodec ff_mjpeg_encoder; -+extern const FFCodec ff_mjpeg_decoder; -+extern const FFCodec ff_mjpegb_decoder; -+extern const FFCodec ff_mmvideo_decoder; -+extern const FFCodec ff_mobiclip_decoder; -+extern const FFCodec ff_motionpixels_decoder; -+extern const FFCodec ff_mpeg1video_encoder; -+extern const FFCodec ff_mpeg1video_decoder; -+extern const FFCodec ff_mpeg2video_encoder; -+extern const FFCodec ff_mpeg2video_decoder; -+extern const FFCodec ff_mpeg4_encoder; -+extern const FFCodec ff_mpeg4_decoder; -+extern const FFCodec ff_mpeg4_crystalhd_decoder; -+extern const FFCodec ff_mpeg4_v4l2m2m_decoder; -+extern const FFCodec ff_mpeg4_mmal_decoder; -+extern const FFCodec ff_mpegvideo_decoder; -+extern const FFCodec ff_mpeg1_v4l2m2m_decoder; -+extern const FFCodec ff_mpeg2_mmal_decoder; -+extern const FFCodec ff_mpeg2_crystalhd_decoder; -+extern const FFCodec ff_mpeg2_v4l2m2m_decoder; -+extern const FFCodec ff_mpeg2_qsv_decoder; -+extern const FFCodec ff_mpeg2_mediacodec_decoder; -+extern const FFCodec ff_msa1_decoder; -+extern const FFCodec ff_mscc_decoder; -+extern const FFCodec ff_msmpeg4v1_decoder; -+extern const FFCodec ff_msmpeg4v2_encoder; -+extern const FFCodec ff_msmpeg4v2_decoder; -+extern const FFCodec ff_msmpeg4v3_encoder; -+extern const FFCodec ff_msmpeg4v3_decoder; -+extern const FFCodec ff_msmpeg4_crystalhd_decoder; -+extern const FFCodec ff_msp2_decoder; -+extern const FFCodec ff_msrle_decoder; -+extern const FFCodec ff_mss1_decoder; -+extern const FFCodec ff_mss2_decoder; -+extern const FFCodec ff_msvideo1_encoder; -+extern const FFCodec ff_msvideo1_decoder; -+extern const FFCodec ff_mszh_decoder; -+extern const FFCodec ff_mts2_decoder; -+extern const FFCodec ff_mv30_decoder; -+extern const FFCodec ff_mvc1_decoder; -+extern const FFCodec ff_mvc2_decoder; -+extern const FFCodec ff_mvdv_decoder; -+extern const FFCodec ff_mvha_decoder; -+extern const FFCodec ff_mwsc_decoder; -+extern const FFCodec ff_mxpeg_decoder; -+extern const FFCodec ff_notchlc_decoder; -+extern const FFCodec ff_nuv_decoder; -+extern const FFCodec ff_paf_video_decoder; -+extern const FFCodec ff_pam_encoder; -+extern const FFCodec ff_pam_decoder; -+extern const FFCodec ff_pbm_encoder; -+extern const FFCodec ff_pbm_decoder; -+extern const FFCodec ff_pcx_encoder; -+extern const FFCodec ff_pcx_decoder; -+extern const FFCodec ff_pfm_encoder; -+extern const FFCodec ff_pfm_decoder; -+extern const FFCodec ff_pgm_encoder; -+extern const FFCodec ff_pgm_decoder; -+extern const FFCodec ff_pgmyuv_encoder; -+extern const FFCodec ff_pgmyuv_decoder; -+extern const FFCodec ff_pgx_decoder; -+extern const FFCodec ff_phm_encoder; -+extern const FFCodec ff_phm_decoder; -+extern const FFCodec ff_photocd_decoder; -+extern const FFCodec ff_pictor_decoder; -+extern const FFCodec ff_pixlet_decoder; -+extern const FFCodec ff_png_encoder; -+extern const FFCodec ff_png_decoder; -+extern const FFCodec ff_ppm_encoder; -+extern const FFCodec ff_ppm_decoder; -+extern const FFCodec ff_prores_encoder; -+extern const FFCodec ff_prores_decoder; -+extern const FFCodec ff_prores_aw_encoder; -+extern const FFCodec ff_prores_ks_encoder; -+extern const FFCodec ff_prosumer_decoder; -+extern const FFCodec ff_psd_decoder; -+extern const FFCodec ff_ptx_decoder; -+extern const FFCodec ff_qdraw_decoder; -+extern const FFCodec ff_qoi_encoder; -+extern const FFCodec ff_qoi_decoder; -+extern const FFCodec ff_qpeg_decoder; -+extern const FFCodec ff_qtrle_encoder; -+extern const FFCodec ff_qtrle_decoder; -+extern const FFCodec ff_r10k_encoder; -+extern const FFCodec ff_r10k_decoder; -+extern const FFCodec ff_r210_encoder; -+extern const FFCodec ff_r210_decoder; -+extern const FFCodec ff_rasc_decoder; -+extern const FFCodec ff_rawvideo_encoder; -+extern const FFCodec ff_rawvideo_decoder; -+extern const FFCodec ff_rka_decoder; -+extern const FFCodec ff_rl2_decoder; -+extern const FFCodec ff_roq_encoder; -+extern const FFCodec ff_roq_decoder; -+extern const FFCodec ff_rpza_encoder; -+extern const FFCodec ff_rpza_decoder; -+extern const FFCodec ff_rscc_decoder; -+extern const FFCodec ff_rv10_encoder; -+extern const FFCodec ff_rv10_decoder; -+extern const FFCodec ff_rv20_encoder; -+extern const FFCodec ff_rv20_decoder; -+extern const FFCodec ff_rv30_decoder; -+extern const FFCodec ff_rv40_decoder; -+extern const FFCodec ff_s302m_encoder; -+extern const FFCodec ff_s302m_decoder; -+extern const FFCodec ff_sanm_decoder; -+extern const FFCodec ff_scpr_decoder; -+extern const FFCodec ff_screenpresso_decoder; -+extern const FFCodec ff_sga_decoder; -+extern const FFCodec ff_sgi_encoder; -+extern const FFCodec ff_sgi_decoder; -+extern const FFCodec ff_sgirle_decoder; -+extern const FFCodec ff_sheervideo_decoder; -+extern const FFCodec ff_simbiosis_imx_decoder; -+extern const FFCodec ff_smacker_decoder; -+extern const FFCodec ff_smc_encoder; -+extern const FFCodec ff_smc_decoder; -+extern const FFCodec ff_smvjpeg_decoder; -+extern const FFCodec ff_snow_encoder; -+extern const FFCodec ff_snow_decoder; -+extern const FFCodec ff_sp5x_decoder; -+extern const FFCodec ff_speedhq_decoder; -+extern const FFCodec ff_speedhq_encoder; -+extern const FFCodec ff_speex_decoder; -+extern const FFCodec ff_srgc_decoder; -+extern const FFCodec ff_sunrast_encoder; -+extern const FFCodec ff_sunrast_decoder; -+extern const FFCodec ff_svq1_encoder; -+extern const FFCodec ff_svq1_decoder; -+extern const FFCodec ff_svq3_decoder; -+extern const FFCodec ff_targa_encoder; -+extern const FFCodec ff_targa_decoder; -+extern const FFCodec ff_targa_y216_decoder; -+extern const FFCodec ff_tdsc_decoder; -+extern const FFCodec ff_theora_decoder; -+extern const FFCodec ff_thp_decoder; -+extern const FFCodec ff_tiertexseqvideo_decoder; -+extern const FFCodec ff_tiff_encoder; -+extern const FFCodec ff_tiff_decoder; -+extern const FFCodec ff_tmv_decoder; -+extern const FFCodec ff_truemotion1_decoder; -+extern const FFCodec ff_truemotion2_decoder; -+extern const FFCodec ff_truemotion2rt_decoder; -+extern const FFCodec ff_tscc_decoder; -+extern const FFCodec ff_tscc2_decoder; -+extern const FFCodec ff_txd_decoder; -+extern const FFCodec ff_ulti_decoder; -+extern const FFCodec ff_utvideo_encoder; -+extern const FFCodec ff_utvideo_decoder; -+extern const FFCodec ff_v210_encoder; -+extern const FFCodec ff_v210_decoder; -+extern const FFCodec ff_v210x_decoder; -+extern const FFCodec ff_v308_encoder; -+extern const FFCodec ff_v308_decoder; -+extern const FFCodec ff_v408_encoder; -+extern const FFCodec ff_v408_decoder; -+extern const FFCodec ff_v410_encoder; -+extern const FFCodec ff_v410_decoder; -+extern const FFCodec ff_vb_decoder; -+extern const FFCodec ff_vbn_encoder; -+extern const FFCodec ff_vbn_decoder; -+extern const FFCodec ff_vble_decoder; -+extern const FFCodec ff_vc1_decoder; -+extern const FFCodec ff_vc1_crystalhd_decoder; -+extern const FFCodec ff_vc1image_decoder; -+extern const FFCodec ff_vc1_mmal_decoder; -+extern const FFCodec ff_vc1_qsv_decoder; -+extern const FFCodec ff_vc1_v4l2m2m_decoder; -+extern const FFCodec ff_vc2_encoder; -+extern const FFCodec ff_vcr1_decoder; -+extern const FFCodec ff_vmdvideo_decoder; -+extern const FFCodec ff_vmnc_decoder; -+extern const FFCodec ff_vp3_decoder; -+extern const FFCodec ff_vp4_decoder; -+extern const FFCodec ff_vp5_decoder; -+extern const FFCodec ff_vp6_decoder; -+extern const FFCodec ff_vp6a_decoder; -+extern const FFCodec ff_vp6f_decoder; -+extern const FFCodec ff_vp7_decoder; -+extern const FFCodec ff_vp8_decoder; -+extern const FFCodec ff_vp8_rkmpp_decoder; -+extern const FFCodec ff_vp8_v4l2m2m_decoder; -+extern const FFCodec ff_vp9_decoder; -+extern const FFCodec ff_vp9_rkmpp_decoder; -+extern const FFCodec ff_vp9_v4l2m2m_decoder; -+extern const FFCodec ff_vqa_decoder; -+extern const FFCodec ff_vqc_decoder; -+extern const FFCodec ff_wbmp_decoder; -+extern const FFCodec ff_wbmp_encoder; -+extern const FFCodec ff_webp_decoder; -+extern const FFCodec ff_wcmv_decoder; -+extern const FFCodec ff_wrapped_avframe_encoder; -+extern const FFCodec ff_wrapped_avframe_decoder; -+extern const FFCodec ff_wmv1_encoder; -+extern const FFCodec ff_wmv1_decoder; -+extern const FFCodec ff_wmv2_encoder; -+extern const FFCodec ff_wmv2_decoder; -+extern const FFCodec ff_wmv3_decoder; -+extern const FFCodec ff_wmv3_crystalhd_decoder; -+extern const FFCodec ff_wmv3image_decoder; -+extern const FFCodec ff_wnv1_decoder; -+extern const FFCodec ff_xan_wc3_decoder; -+extern const FFCodec ff_xan_wc4_decoder; -+extern const FFCodec ff_xbm_encoder; -+extern const FFCodec ff_xbm_decoder; -+extern const FFCodec ff_xface_encoder; -+extern const FFCodec ff_xface_decoder; -+extern const FFCodec ff_xl_decoder; -+extern const FFCodec ff_xpm_decoder; -+extern const FFCodec ff_xwd_encoder; -+extern const FFCodec ff_xwd_decoder; -+extern const FFCodec ff_y41p_encoder; -+extern const FFCodec ff_y41p_decoder; -+extern const FFCodec ff_ylc_decoder; -+extern const FFCodec ff_yop_decoder; -+extern const FFCodec ff_yuv4_encoder; -+extern const FFCodec ff_yuv4_decoder; -+extern const FFCodec ff_zero12v_decoder; -+extern const FFCodec ff_zerocodec_decoder; -+extern const FFCodec ff_zlib_encoder; -+extern const FFCodec ff_zlib_decoder; -+extern const FFCodec ff_zmbv_encoder; -+extern const FFCodec ff_zmbv_decoder; - - /* audio codecs */ --extern AVCodec ff_aac_encoder; --extern AVCodec ff_aac_decoder; --extern AVCodec ff_aac_fixed_decoder; --extern AVCodec ff_aac_latm_decoder; --extern AVCodec ff_ac3_encoder; --extern AVCodec ff_ac3_decoder; --extern AVCodec ff_ac3_fixed_encoder; --extern AVCodec ff_ac3_fixed_decoder; --extern AVCodec ff_acelp_kelvin_decoder; --extern AVCodec ff_alac_encoder; --extern AVCodec ff_alac_decoder; --extern AVCodec ff_als_decoder; --extern AVCodec ff_amrnb_decoder; --extern AVCodec ff_amrwb_decoder; --extern AVCodec ff_ape_decoder; --extern AVCodec ff_aptx_encoder; --extern AVCodec ff_aptx_decoder; --extern AVCodec ff_aptx_hd_encoder; --extern AVCodec ff_aptx_hd_decoder; --extern AVCodec ff_atrac1_decoder; --extern AVCodec ff_atrac3_decoder; --extern AVCodec ff_atrac3al_decoder; --extern AVCodec ff_atrac3p_decoder; --extern AVCodec ff_atrac3pal_decoder; --extern AVCodec ff_atrac9_decoder; --extern AVCodec ff_binkaudio_dct_decoder; --extern AVCodec ff_binkaudio_rdft_decoder; --extern AVCodec ff_bmv_audio_decoder; --extern AVCodec ff_cook_decoder; --extern AVCodec ff_dca_encoder; --extern AVCodec ff_dca_decoder; --extern AVCodec ff_dolby_e_decoder; --extern AVCodec ff_dsd_lsbf_decoder; --extern AVCodec ff_dsd_msbf_decoder; --extern AVCodec ff_dsd_lsbf_planar_decoder; --extern AVCodec ff_dsd_msbf_planar_decoder; --extern AVCodec ff_dsicinaudio_decoder; --extern AVCodec ff_dss_sp_decoder; --extern AVCodec ff_dst_decoder; --extern AVCodec ff_eac3_encoder; --extern AVCodec ff_eac3_decoder; --extern AVCodec ff_evrc_decoder; --extern AVCodec ff_fastaudio_decoder; --extern AVCodec ff_ffwavesynth_decoder; --extern AVCodec ff_flac_encoder; --extern AVCodec ff_flac_decoder; --extern AVCodec ff_g723_1_encoder; --extern AVCodec ff_g723_1_decoder; --extern AVCodec ff_g729_decoder; --extern AVCodec ff_gsm_decoder; --extern AVCodec ff_gsm_ms_decoder; --extern AVCodec ff_hca_decoder; --extern AVCodec ff_hcom_decoder; --extern AVCodec ff_iac_decoder; --extern AVCodec ff_ilbc_decoder; --extern AVCodec ff_imc_decoder; --extern AVCodec ff_interplay_acm_decoder; --extern AVCodec ff_mace3_decoder; --extern AVCodec ff_mace6_decoder; --extern AVCodec ff_metasound_decoder; --extern AVCodec ff_mlp_encoder; --extern AVCodec ff_mlp_decoder; --extern AVCodec ff_mp1_decoder; --extern AVCodec ff_mp1float_decoder; --extern AVCodec ff_mp2_encoder; --extern AVCodec ff_mp2_decoder; --extern AVCodec ff_mp2float_decoder; --extern AVCodec ff_mp2fixed_encoder; --extern AVCodec ff_mp3float_decoder; --extern AVCodec ff_mp3_decoder; --extern AVCodec ff_mp3adufloat_decoder; --extern AVCodec ff_mp3adu_decoder; --extern AVCodec ff_mp3on4float_decoder; --extern AVCodec ff_mp3on4_decoder; --extern AVCodec ff_mpc7_decoder; --extern AVCodec ff_mpc8_decoder; --extern AVCodec ff_nellymoser_encoder; --extern AVCodec ff_nellymoser_decoder; --extern AVCodec ff_on2avc_decoder; --extern AVCodec ff_opus_encoder; --extern AVCodec ff_opus_decoder; --extern AVCodec ff_paf_audio_decoder; --extern AVCodec ff_qcelp_decoder; --extern AVCodec ff_qdm2_decoder; --extern AVCodec ff_qdmc_decoder; --extern AVCodec ff_ra_144_encoder; --extern AVCodec ff_ra_144_decoder; --extern AVCodec ff_ra_288_decoder; --extern AVCodec ff_ralf_decoder; --extern AVCodec ff_sbc_encoder; --extern AVCodec ff_sbc_decoder; --extern AVCodec ff_shorten_decoder; --extern AVCodec ff_sipr_decoder; --extern AVCodec ff_siren_decoder; --extern AVCodec ff_smackaud_decoder; --extern AVCodec ff_sonic_encoder; --extern AVCodec ff_sonic_decoder; --extern AVCodec ff_sonic_ls_encoder; --extern AVCodec ff_tak_decoder; --extern AVCodec ff_truehd_encoder; --extern AVCodec ff_truehd_decoder; --extern AVCodec ff_truespeech_decoder; --extern AVCodec ff_tta_encoder; --extern AVCodec ff_tta_decoder; --extern AVCodec ff_twinvq_decoder; --extern AVCodec ff_vmdaudio_decoder; --extern AVCodec ff_vorbis_encoder; --extern AVCodec ff_vorbis_decoder; --extern AVCodec ff_wavpack_encoder; --extern AVCodec ff_wavpack_decoder; --extern AVCodec ff_wmalossless_decoder; --extern AVCodec ff_wmapro_decoder; --extern AVCodec ff_wmav1_encoder; --extern AVCodec ff_wmav1_decoder; --extern AVCodec ff_wmav2_encoder; --extern AVCodec ff_wmav2_decoder; --extern AVCodec ff_wmavoice_decoder; --extern AVCodec ff_ws_snd1_decoder; --extern AVCodec ff_xma1_decoder; --extern AVCodec ff_xma2_decoder; -+extern const FFCodec ff_aac_encoder; -+extern const FFCodec ff_aac_decoder; -+extern const FFCodec ff_aac_fixed_decoder; -+extern const FFCodec ff_aac_latm_decoder; -+extern const FFCodec ff_ac3_encoder; -+extern const FFCodec ff_ac3_decoder; -+extern const FFCodec ff_ac3_fixed_encoder; -+extern const FFCodec ff_ac3_fixed_decoder; -+extern const FFCodec ff_acelp_kelvin_decoder; -+extern const FFCodec ff_alac_encoder; -+extern const FFCodec ff_alac_decoder; -+extern const FFCodec ff_als_decoder; -+extern const FFCodec ff_amrnb_decoder; -+extern const FFCodec ff_amrwb_decoder; -+extern const FFCodec ff_apac_decoder; -+extern const FFCodec ff_ape_decoder; -+extern const FFCodec ff_aptx_encoder; -+extern const FFCodec ff_aptx_decoder; -+extern const FFCodec ff_aptx_hd_encoder; -+extern const FFCodec ff_aptx_hd_decoder; -+extern const FFCodec ff_atrac1_decoder; -+extern const FFCodec ff_atrac3_decoder; -+extern const FFCodec ff_atrac3al_decoder; -+extern const FFCodec ff_atrac3p_decoder; -+extern const FFCodec ff_atrac3pal_decoder; -+extern const FFCodec ff_atrac9_decoder; -+extern const FFCodec ff_binkaudio_dct_decoder; -+extern const FFCodec ff_binkaudio_rdft_decoder; -+extern const FFCodec ff_bmv_audio_decoder; -+extern const FFCodec ff_bonk_decoder; -+extern const FFCodec ff_cook_decoder; -+extern const FFCodec ff_dca_encoder; -+extern const FFCodec ff_dca_decoder; -+extern const FFCodec ff_dfpwm_encoder; -+extern const FFCodec ff_dfpwm_decoder; -+extern const FFCodec ff_dolby_e_decoder; -+extern const FFCodec ff_dsd_lsbf_decoder; -+extern const FFCodec ff_dsd_msbf_decoder; -+extern const FFCodec ff_dsd_lsbf_planar_decoder; -+extern const FFCodec ff_dsd_msbf_planar_decoder; -+extern const FFCodec ff_dsicinaudio_decoder; -+extern const FFCodec ff_dss_sp_decoder; -+extern const FFCodec ff_dst_decoder; -+extern const FFCodec ff_eac3_encoder; -+extern const FFCodec ff_eac3_decoder; -+extern const FFCodec ff_evrc_decoder; -+extern const FFCodec ff_fastaudio_decoder; -+extern const FFCodec ff_ffwavesynth_decoder; -+extern const FFCodec ff_flac_encoder; -+extern const FFCodec ff_flac_decoder; -+extern const FFCodec ff_ftr_decoder; -+extern const FFCodec ff_g723_1_encoder; -+extern const FFCodec ff_g723_1_decoder; -+extern const FFCodec ff_g729_decoder; -+extern const FFCodec ff_gsm_decoder; -+extern const FFCodec ff_gsm_ms_decoder; -+extern const FFCodec ff_hca_decoder; -+extern const FFCodec ff_hcom_decoder; -+extern const FFCodec ff_hdr_encoder; -+extern const FFCodec ff_hdr_decoder; -+extern const FFCodec ff_iac_decoder; -+extern const FFCodec ff_ilbc_decoder; -+extern const FFCodec ff_imc_decoder; -+extern const FFCodec ff_interplay_acm_decoder; -+extern const FFCodec ff_mace3_decoder; -+extern const FFCodec ff_mace6_decoder; -+extern const FFCodec ff_metasound_decoder; -+extern const FFCodec ff_misc4_decoder; -+extern const FFCodec ff_mlp_encoder; -+extern const FFCodec ff_mlp_decoder; -+extern const FFCodec ff_mp1_decoder; -+extern const FFCodec ff_mp1float_decoder; -+extern const FFCodec ff_mp2_encoder; -+extern const FFCodec ff_mp2_decoder; -+extern const FFCodec ff_mp2float_decoder; -+extern const FFCodec ff_mp2fixed_encoder; -+extern const FFCodec ff_mp3float_decoder; -+extern const FFCodec ff_mp3_decoder; -+extern const FFCodec ff_mp3adufloat_decoder; -+extern const FFCodec ff_mp3adu_decoder; -+extern const FFCodec ff_mp3on4float_decoder; -+extern const FFCodec ff_mp3on4_decoder; -+extern const FFCodec ff_mpc7_decoder; -+extern const FFCodec ff_mpc8_decoder; -+extern const FFCodec ff_msnsiren_decoder; -+extern const FFCodec ff_nellymoser_encoder; -+extern const FFCodec ff_nellymoser_decoder; -+extern const FFCodec ff_on2avc_decoder; -+extern const FFCodec ff_opus_encoder; -+extern const FFCodec ff_opus_decoder; -+extern const FFCodec ff_paf_audio_decoder; -+extern const FFCodec ff_qcelp_decoder; -+extern const FFCodec ff_qdm2_decoder; -+extern const FFCodec ff_qdmc_decoder; -+extern const FFCodec ff_ra_144_encoder; -+extern const FFCodec ff_ra_144_decoder; -+extern const FFCodec ff_ra_288_decoder; -+extern const FFCodec ff_ralf_decoder; -+extern const FFCodec ff_sbc_encoder; -+extern const FFCodec ff_sbc_decoder; -+extern const FFCodec ff_shorten_decoder; -+extern const FFCodec ff_sipr_decoder; -+extern const FFCodec ff_siren_decoder; -+extern const FFCodec ff_smackaud_decoder; -+extern const FFCodec ff_sonic_encoder; -+extern const FFCodec ff_sonic_decoder; -+extern const FFCodec ff_sonic_ls_encoder; -+extern const FFCodec ff_tak_decoder; -+extern const FFCodec ff_truehd_encoder; -+extern const FFCodec ff_truehd_decoder; -+extern const FFCodec ff_truespeech_decoder; -+extern const FFCodec ff_tta_encoder; -+extern const FFCodec ff_tta_decoder; -+extern const FFCodec ff_twinvq_decoder; -+extern const FFCodec ff_vmdaudio_decoder; -+extern const FFCodec ff_vorbis_encoder; -+extern const FFCodec ff_vorbis_decoder; -+extern const FFCodec ff_wavarc_decoder; -+extern const FFCodec ff_wavpack_encoder; -+extern const FFCodec ff_wavpack_decoder; -+extern const FFCodec ff_wmalossless_decoder; -+extern const FFCodec ff_wmapro_decoder; -+extern const FFCodec ff_wmav1_encoder; -+extern const FFCodec ff_wmav1_decoder; -+extern const FFCodec ff_wmav2_encoder; -+extern const FFCodec ff_wmav2_decoder; -+extern const FFCodec ff_wmavoice_decoder; -+extern const FFCodec ff_ws_snd1_decoder; -+extern const FFCodec ff_xma1_decoder; -+extern const FFCodec ff_xma2_decoder; - - /* PCM codecs */ --extern AVCodec ff_pcm_alaw_encoder; --extern AVCodec ff_pcm_alaw_decoder; --extern AVCodec ff_pcm_bluray_decoder; --extern AVCodec ff_pcm_dvd_encoder; --extern AVCodec ff_pcm_dvd_decoder; --extern AVCodec ff_pcm_f16le_decoder; --extern AVCodec ff_pcm_f24le_decoder; --extern AVCodec ff_pcm_f32be_encoder; --extern AVCodec ff_pcm_f32be_decoder; --extern AVCodec ff_pcm_f32le_encoder; --extern AVCodec ff_pcm_f32le_decoder; --extern AVCodec ff_pcm_f64be_encoder; --extern AVCodec ff_pcm_f64be_decoder; --extern AVCodec ff_pcm_f64le_encoder; --extern AVCodec ff_pcm_f64le_decoder; --extern AVCodec ff_pcm_lxf_decoder; --extern AVCodec ff_pcm_mulaw_encoder; --extern AVCodec ff_pcm_mulaw_decoder; --extern AVCodec ff_pcm_s8_encoder; --extern AVCodec ff_pcm_s8_decoder; --extern AVCodec ff_pcm_s8_planar_encoder; --extern AVCodec ff_pcm_s8_planar_decoder; --extern AVCodec ff_pcm_s16be_encoder; --extern AVCodec ff_pcm_s16be_decoder; --extern AVCodec ff_pcm_s16be_planar_encoder; --extern AVCodec ff_pcm_s16be_planar_decoder; --extern AVCodec ff_pcm_s16le_encoder; --extern AVCodec ff_pcm_s16le_decoder; --extern AVCodec ff_pcm_s16le_planar_encoder; --extern AVCodec ff_pcm_s16le_planar_decoder; --extern AVCodec ff_pcm_s24be_encoder; --extern AVCodec ff_pcm_s24be_decoder; --extern AVCodec ff_pcm_s24daud_encoder; --extern AVCodec ff_pcm_s24daud_decoder; --extern AVCodec ff_pcm_s24le_encoder; --extern AVCodec ff_pcm_s24le_decoder; --extern AVCodec ff_pcm_s24le_planar_encoder; --extern AVCodec ff_pcm_s24le_planar_decoder; --extern AVCodec ff_pcm_s32be_encoder; --extern AVCodec ff_pcm_s32be_decoder; --extern AVCodec ff_pcm_s32le_encoder; --extern AVCodec ff_pcm_s32le_decoder; --extern AVCodec ff_pcm_s32le_planar_encoder; --extern AVCodec ff_pcm_s32le_planar_decoder; --extern AVCodec ff_pcm_s64be_encoder; --extern AVCodec ff_pcm_s64be_decoder; --extern AVCodec ff_pcm_s64le_encoder; --extern AVCodec ff_pcm_s64le_decoder; --extern AVCodec ff_pcm_sga_decoder; --extern AVCodec ff_pcm_u8_encoder; --extern AVCodec ff_pcm_u8_decoder; --extern AVCodec ff_pcm_u16be_encoder; --extern AVCodec ff_pcm_u16be_decoder; --extern AVCodec ff_pcm_u16le_encoder; --extern AVCodec ff_pcm_u16le_decoder; --extern AVCodec ff_pcm_u24be_encoder; --extern AVCodec ff_pcm_u24be_decoder; --extern AVCodec ff_pcm_u24le_encoder; --extern AVCodec ff_pcm_u24le_decoder; --extern AVCodec ff_pcm_u32be_encoder; --extern AVCodec ff_pcm_u32be_decoder; --extern AVCodec ff_pcm_u32le_encoder; --extern AVCodec ff_pcm_u32le_decoder; --extern AVCodec ff_pcm_vidc_encoder; --extern AVCodec ff_pcm_vidc_decoder; -+extern const FFCodec ff_pcm_alaw_encoder; -+extern const FFCodec ff_pcm_alaw_decoder; -+extern const FFCodec ff_pcm_bluray_encoder; -+extern const FFCodec ff_pcm_bluray_decoder; -+extern const FFCodec ff_pcm_dvd_encoder; -+extern const FFCodec ff_pcm_dvd_decoder; -+extern const FFCodec ff_pcm_f16le_decoder; -+extern const FFCodec ff_pcm_f24le_decoder; -+extern const FFCodec ff_pcm_f32be_encoder; -+extern const FFCodec ff_pcm_f32be_decoder; -+extern const FFCodec ff_pcm_f32le_encoder; -+extern const FFCodec ff_pcm_f32le_decoder; -+extern const FFCodec ff_pcm_f64be_encoder; -+extern const FFCodec ff_pcm_f64be_decoder; -+extern const FFCodec ff_pcm_f64le_encoder; -+extern const FFCodec ff_pcm_f64le_decoder; -+extern const FFCodec ff_pcm_lxf_decoder; -+extern const FFCodec ff_pcm_mulaw_encoder; -+extern const FFCodec ff_pcm_mulaw_decoder; -+extern const FFCodec ff_pcm_s8_encoder; -+extern const FFCodec ff_pcm_s8_decoder; -+extern const FFCodec ff_pcm_s8_planar_encoder; -+extern const FFCodec ff_pcm_s8_planar_decoder; -+extern const FFCodec ff_pcm_s16be_encoder; -+extern const FFCodec ff_pcm_s16be_decoder; -+extern const FFCodec ff_pcm_s16be_planar_encoder; -+extern const FFCodec ff_pcm_s16be_planar_decoder; -+extern const FFCodec ff_pcm_s16le_encoder; -+extern const FFCodec ff_pcm_s16le_decoder; -+extern const FFCodec ff_pcm_s16le_planar_encoder; -+extern const FFCodec ff_pcm_s16le_planar_decoder; -+extern const FFCodec ff_pcm_s24be_encoder; -+extern const FFCodec ff_pcm_s24be_decoder; -+extern const FFCodec ff_pcm_s24daud_encoder; -+extern const FFCodec ff_pcm_s24daud_decoder; -+extern const FFCodec ff_pcm_s24le_encoder; -+extern const FFCodec ff_pcm_s24le_decoder; -+extern const FFCodec ff_pcm_s24le_planar_encoder; -+extern const FFCodec ff_pcm_s24le_planar_decoder; -+extern const FFCodec ff_pcm_s32be_encoder; -+extern const FFCodec ff_pcm_s32be_decoder; -+extern const FFCodec ff_pcm_s32le_encoder; -+extern const FFCodec ff_pcm_s32le_decoder; -+extern const FFCodec ff_pcm_s32le_planar_encoder; -+extern const FFCodec ff_pcm_s32le_planar_decoder; -+extern const FFCodec ff_pcm_s64be_encoder; -+extern const FFCodec ff_pcm_s64be_decoder; -+extern const FFCodec ff_pcm_s64le_encoder; -+extern const FFCodec ff_pcm_s64le_decoder; -+extern const FFCodec ff_pcm_sga_decoder; -+extern const FFCodec ff_pcm_u8_encoder; -+extern const FFCodec ff_pcm_u8_decoder; -+extern const FFCodec ff_pcm_u16be_encoder; -+extern const FFCodec ff_pcm_u16be_decoder; -+extern const FFCodec ff_pcm_u16le_encoder; -+extern const FFCodec ff_pcm_u16le_decoder; -+extern const FFCodec ff_pcm_u24be_encoder; -+extern const FFCodec ff_pcm_u24be_decoder; -+extern const FFCodec ff_pcm_u24le_encoder; -+extern const FFCodec ff_pcm_u24le_decoder; -+extern const FFCodec ff_pcm_u32be_encoder; -+extern const FFCodec ff_pcm_u32be_decoder; -+extern const FFCodec ff_pcm_u32le_encoder; -+extern const FFCodec ff_pcm_u32le_decoder; -+extern const FFCodec ff_pcm_vidc_encoder; -+extern const FFCodec ff_pcm_vidc_decoder; - - /* DPCM codecs */ --extern AVCodec ff_derf_dpcm_decoder; --extern AVCodec ff_gremlin_dpcm_decoder; --extern AVCodec ff_interplay_dpcm_decoder; --extern AVCodec ff_roq_dpcm_encoder; --extern AVCodec ff_roq_dpcm_decoder; --extern AVCodec ff_sdx2_dpcm_decoder; --extern AVCodec ff_sol_dpcm_decoder; --extern AVCodec ff_xan_dpcm_decoder; -+extern const FFCodec ff_cbd2_dpcm_decoder; -+extern const FFCodec ff_derf_dpcm_decoder; -+extern const FFCodec ff_gremlin_dpcm_decoder; -+extern const FFCodec ff_interplay_dpcm_decoder; -+extern const FFCodec ff_roq_dpcm_encoder; -+extern const FFCodec ff_roq_dpcm_decoder; -+extern const FFCodec ff_sdx2_dpcm_decoder; -+extern const FFCodec ff_sol_dpcm_decoder; -+extern const FFCodec ff_xan_dpcm_decoder; -+extern const FFCodec ff_wady_dpcm_decoder; - - /* ADPCM codecs */ --extern AVCodec ff_adpcm_4xm_decoder; --extern AVCodec ff_adpcm_adx_encoder; --extern AVCodec ff_adpcm_adx_decoder; --extern AVCodec ff_adpcm_afc_decoder; --extern AVCodec ff_adpcm_agm_decoder; --extern AVCodec ff_adpcm_aica_decoder; --extern AVCodec ff_adpcm_argo_decoder; --extern AVCodec ff_adpcm_argo_encoder; --extern AVCodec ff_adpcm_ct_decoder; --extern AVCodec ff_adpcm_dtk_decoder; --extern AVCodec ff_adpcm_ea_decoder; --extern AVCodec ff_adpcm_ea_maxis_xa_decoder; --extern AVCodec ff_adpcm_ea_r1_decoder; --extern AVCodec ff_adpcm_ea_r2_decoder; --extern AVCodec ff_adpcm_ea_r3_decoder; --extern AVCodec ff_adpcm_ea_xas_decoder; --extern AVCodec ff_adpcm_g722_encoder; --extern AVCodec ff_adpcm_g722_decoder; --extern AVCodec ff_adpcm_g726_encoder; --extern AVCodec ff_adpcm_g726_decoder; --extern AVCodec ff_adpcm_g726le_encoder; --extern AVCodec ff_adpcm_g726le_decoder; --extern AVCodec ff_adpcm_ima_amv_decoder; --extern AVCodec ff_adpcm_ima_amv_encoder; --extern AVCodec ff_adpcm_ima_alp_decoder; --extern AVCodec ff_adpcm_ima_alp_encoder; --extern AVCodec ff_adpcm_ima_apc_decoder; --extern AVCodec ff_adpcm_ima_apm_decoder; --extern AVCodec ff_adpcm_ima_apm_encoder; --extern AVCodec ff_adpcm_ima_cunning_decoder; --extern AVCodec ff_adpcm_ima_dat4_decoder; --extern AVCodec ff_adpcm_ima_dk3_decoder; --extern AVCodec ff_adpcm_ima_dk4_decoder; --extern AVCodec ff_adpcm_ima_ea_eacs_decoder; --extern AVCodec ff_adpcm_ima_ea_sead_decoder; --extern AVCodec ff_adpcm_ima_iss_decoder; --extern AVCodec ff_adpcm_ima_moflex_decoder; --extern AVCodec ff_adpcm_ima_mtf_decoder; --extern AVCodec ff_adpcm_ima_oki_decoder; --extern AVCodec ff_adpcm_ima_qt_encoder; --extern AVCodec ff_adpcm_ima_qt_decoder; --extern AVCodec ff_adpcm_ima_rad_decoder; --extern AVCodec ff_adpcm_ima_ssi_decoder; --extern AVCodec ff_adpcm_ima_ssi_encoder; --extern AVCodec ff_adpcm_ima_smjpeg_decoder; --extern AVCodec ff_adpcm_ima_wav_encoder; --extern AVCodec ff_adpcm_ima_wav_decoder; --extern AVCodec ff_adpcm_ima_ws_decoder; --extern AVCodec ff_adpcm_ms_encoder; --extern AVCodec ff_adpcm_ms_decoder; --extern AVCodec ff_adpcm_mtaf_decoder; --extern AVCodec ff_adpcm_psx_decoder; --extern AVCodec ff_adpcm_sbpro_2_decoder; --extern AVCodec ff_adpcm_sbpro_3_decoder; --extern AVCodec ff_adpcm_sbpro_4_decoder; --extern AVCodec ff_adpcm_swf_encoder; --extern AVCodec ff_adpcm_swf_decoder; --extern AVCodec ff_adpcm_thp_decoder; --extern AVCodec ff_adpcm_thp_le_decoder; --extern AVCodec ff_adpcm_vima_decoder; --extern AVCodec ff_adpcm_xa_decoder; --extern AVCodec ff_adpcm_yamaha_encoder; --extern AVCodec ff_adpcm_yamaha_decoder; --extern AVCodec ff_adpcm_zork_decoder; -+extern const FFCodec ff_adpcm_4xm_decoder; -+extern const FFCodec ff_adpcm_adx_encoder; -+extern const FFCodec ff_adpcm_adx_decoder; -+extern const FFCodec ff_adpcm_afc_decoder; -+extern const FFCodec ff_adpcm_agm_decoder; -+extern const FFCodec ff_adpcm_aica_decoder; -+extern const FFCodec ff_adpcm_argo_decoder; -+extern const FFCodec ff_adpcm_argo_encoder; -+extern const FFCodec ff_adpcm_ct_decoder; -+extern const FFCodec ff_adpcm_dtk_decoder; -+extern const FFCodec ff_adpcm_ea_decoder; -+extern const FFCodec ff_adpcm_ea_maxis_xa_decoder; -+extern const FFCodec ff_adpcm_ea_r1_decoder; -+extern const FFCodec ff_adpcm_ea_r2_decoder; -+extern const FFCodec ff_adpcm_ea_r3_decoder; -+extern const FFCodec ff_adpcm_ea_xas_decoder; -+extern const FFCodec ff_adpcm_g722_encoder; -+extern const FFCodec ff_adpcm_g722_decoder; -+extern const FFCodec ff_adpcm_g726_encoder; -+extern const FFCodec ff_adpcm_g726_decoder; -+extern const FFCodec ff_adpcm_g726le_encoder; -+extern const FFCodec ff_adpcm_g726le_decoder; -+extern const FFCodec ff_adpcm_ima_acorn_decoder; -+extern const FFCodec ff_adpcm_ima_amv_decoder; -+extern const FFCodec ff_adpcm_ima_amv_encoder; -+extern const FFCodec ff_adpcm_ima_alp_decoder; -+extern const FFCodec ff_adpcm_ima_alp_encoder; -+extern const FFCodec ff_adpcm_ima_apc_decoder; -+extern const FFCodec ff_adpcm_ima_apm_decoder; -+extern const FFCodec ff_adpcm_ima_apm_encoder; -+extern const FFCodec ff_adpcm_ima_cunning_decoder; -+extern const FFCodec ff_adpcm_ima_dat4_decoder; -+extern const FFCodec ff_adpcm_ima_dk3_decoder; -+extern const FFCodec ff_adpcm_ima_dk4_decoder; -+extern const FFCodec ff_adpcm_ima_ea_eacs_decoder; -+extern const FFCodec ff_adpcm_ima_ea_sead_decoder; -+extern const FFCodec ff_adpcm_ima_iss_decoder; -+extern const FFCodec ff_adpcm_ima_moflex_decoder; -+extern const FFCodec ff_adpcm_ima_mtf_decoder; -+extern const FFCodec ff_adpcm_ima_oki_decoder; -+extern const FFCodec ff_adpcm_ima_qt_encoder; -+extern const FFCodec ff_adpcm_ima_qt_decoder; -+extern const FFCodec ff_adpcm_ima_rad_decoder; -+extern const FFCodec ff_adpcm_ima_ssi_decoder; -+extern const FFCodec ff_adpcm_ima_ssi_encoder; -+extern const FFCodec ff_adpcm_ima_smjpeg_decoder; -+extern const FFCodec ff_adpcm_ima_wav_encoder; -+extern const FFCodec ff_adpcm_ima_wav_decoder; -+extern const FFCodec ff_adpcm_ima_ws_encoder; -+extern const FFCodec ff_adpcm_ima_ws_decoder; -+extern const FFCodec ff_adpcm_ms_encoder; -+extern const FFCodec ff_adpcm_ms_decoder; -+extern const FFCodec ff_adpcm_mtaf_decoder; -+extern const FFCodec ff_adpcm_psx_decoder; -+extern const FFCodec ff_adpcm_sbpro_2_decoder; -+extern const FFCodec ff_adpcm_sbpro_3_decoder; -+extern const FFCodec ff_adpcm_sbpro_4_decoder; -+extern const FFCodec ff_adpcm_swf_encoder; -+extern const FFCodec ff_adpcm_swf_decoder; -+extern const FFCodec ff_adpcm_thp_decoder; -+extern const FFCodec ff_adpcm_thp_le_decoder; -+extern const FFCodec ff_adpcm_vima_decoder; -+extern const FFCodec ff_adpcm_xa_decoder; -+extern const FFCodec ff_adpcm_xmd_decoder; -+extern const FFCodec ff_adpcm_yamaha_encoder; -+extern const FFCodec ff_adpcm_yamaha_decoder; -+extern const FFCodec ff_adpcm_zork_decoder; - - /* subtitles */ --extern AVCodec ff_ssa_encoder; --extern AVCodec ff_ssa_decoder; --extern AVCodec ff_ass_encoder; --extern AVCodec ff_ass_decoder; --extern AVCodec ff_ccaption_decoder; --extern AVCodec ff_dvbsub_encoder; --extern AVCodec ff_dvbsub_decoder; --extern AVCodec ff_dvdsub_encoder; --extern AVCodec ff_dvdsub_decoder; --extern AVCodec ff_jacosub_decoder; --extern AVCodec ff_microdvd_decoder; --extern AVCodec ff_movtext_encoder; --extern AVCodec ff_movtext_decoder; --extern AVCodec ff_mpl2_decoder; --extern AVCodec ff_pgssub_decoder; --extern AVCodec ff_pjs_decoder; --extern AVCodec ff_realtext_decoder; --extern AVCodec ff_sami_decoder; --extern AVCodec ff_srt_encoder; --extern AVCodec ff_srt_decoder; --extern AVCodec ff_stl_decoder; --extern AVCodec ff_subrip_encoder; --extern AVCodec ff_subrip_decoder; --extern AVCodec ff_subviewer_decoder; --extern AVCodec ff_subviewer1_decoder; --extern AVCodec ff_text_encoder; --extern AVCodec ff_text_decoder; --extern AVCodec ff_ttml_encoder; --extern AVCodec ff_vplayer_decoder; --extern AVCodec ff_webvtt_encoder; --extern AVCodec ff_webvtt_decoder; --extern AVCodec ff_xsub_encoder; --extern AVCodec ff_xsub_decoder; -+extern const FFCodec ff_ssa_encoder; -+extern const FFCodec ff_ssa_decoder; -+extern const FFCodec ff_ass_encoder; -+extern const FFCodec ff_ass_decoder; -+extern const FFCodec ff_ccaption_decoder; -+extern const FFCodec ff_dvbsub_encoder; -+extern const FFCodec ff_dvbsub_decoder; -+extern const FFCodec ff_dvdsub_encoder; -+extern const FFCodec ff_dvdsub_decoder; -+extern const FFCodec ff_jacosub_decoder; -+extern const FFCodec ff_microdvd_decoder; -+extern const FFCodec ff_movtext_encoder; -+extern const FFCodec ff_movtext_decoder; -+extern const FFCodec ff_mpl2_decoder; -+extern const FFCodec ff_pgssub_decoder; -+extern const FFCodec ff_pjs_decoder; -+extern const FFCodec ff_realtext_decoder; -+extern const FFCodec ff_sami_decoder; -+extern const FFCodec ff_srt_encoder; -+extern const FFCodec ff_srt_decoder; -+extern const FFCodec ff_stl_decoder; -+extern const FFCodec ff_subrip_encoder; -+extern const FFCodec ff_subrip_decoder; -+extern const FFCodec ff_subviewer_decoder; -+extern const FFCodec ff_subviewer1_decoder; -+extern const FFCodec ff_text_encoder; -+extern const FFCodec ff_text_decoder; -+extern const FFCodec ff_ttml_encoder; -+extern const FFCodec ff_vplayer_decoder; -+extern const FFCodec ff_webvtt_encoder; -+extern const FFCodec ff_webvtt_decoder; -+extern const FFCodec ff_xsub_encoder; -+extern const FFCodec ff_xsub_decoder; - - /* external libraries */ --extern AVCodec ff_aac_at_encoder; --extern AVCodec ff_aac_at_decoder; --extern AVCodec ff_ac3_at_decoder; --extern AVCodec ff_adpcm_ima_qt_at_decoder; --extern AVCodec ff_alac_at_encoder; --extern AVCodec ff_alac_at_decoder; --extern AVCodec ff_amr_nb_at_decoder; --extern AVCodec ff_eac3_at_decoder; --extern AVCodec ff_gsm_ms_at_decoder; --extern AVCodec ff_ilbc_at_encoder; --extern AVCodec ff_ilbc_at_decoder; --extern AVCodec ff_mp1_at_decoder; --extern AVCodec ff_mp2_at_decoder; --extern AVCodec ff_mp3_at_decoder; --extern AVCodec ff_pcm_alaw_at_encoder; --extern AVCodec ff_pcm_alaw_at_decoder; --extern AVCodec ff_pcm_mulaw_at_encoder; --extern AVCodec ff_pcm_mulaw_at_decoder; --extern AVCodec ff_qdmc_at_decoder; --extern AVCodec ff_qdm2_at_decoder; --extern AVCodec ff_libaom_av1_encoder; --extern AVCodec ff_libaribb24_decoder; --extern AVCodec ff_libcelt_decoder; --extern AVCodec ff_libcodec2_encoder; --extern AVCodec ff_libcodec2_decoder; --extern AVCodec ff_libdav1d_decoder; --extern AVCodec ff_libdavs2_decoder; --extern AVCodec ff_libfdk_aac_encoder; --extern AVCodec ff_libfdk_aac_decoder; --extern AVCodec ff_libgsm_encoder; --extern AVCodec ff_libgsm_decoder; --extern AVCodec ff_libgsm_ms_encoder; --extern AVCodec ff_libgsm_ms_decoder; --extern AVCodec ff_libilbc_encoder; --extern AVCodec ff_libilbc_decoder; --extern AVCodec ff_libmp3lame_encoder; --extern AVCodec ff_libopencore_amrnb_encoder; --extern AVCodec ff_libopencore_amrnb_decoder; --extern AVCodec ff_libopencore_amrwb_decoder; --extern AVCodec ff_libopenjpeg_encoder; --extern AVCodec ff_libopenjpeg_decoder; --extern AVCodec ff_libopus_encoder; --extern AVCodec ff_libopus_decoder; --extern AVCodec ff_librav1e_encoder; --extern AVCodec ff_librsvg_decoder; --extern AVCodec ff_libshine_encoder; --extern AVCodec ff_libspeex_encoder; --extern AVCodec ff_libspeex_decoder; --extern AVCodec ff_libsvtav1_encoder; --extern AVCodec ff_libtheora_encoder; --extern AVCodec ff_libtwolame_encoder; --extern AVCodec ff_libuavs3d_decoder; --extern AVCodec ff_libvo_amrwbenc_encoder; --extern AVCodec ff_libvorbis_encoder; --extern AVCodec ff_libvorbis_decoder; --extern AVCodec ff_libvpx_vp8_encoder; --extern AVCodec ff_libvpx_vp8_decoder; --extern AVCodec ff_libvpx_vp9_encoder; --extern AVCodec ff_libvpx_vp9_decoder; -+extern const FFCodec ff_aac_at_encoder; -+extern const FFCodec ff_aac_at_decoder; -+extern const FFCodec ff_ac3_at_decoder; -+extern const FFCodec ff_adpcm_ima_qt_at_decoder; -+extern const FFCodec ff_alac_at_encoder; -+extern const FFCodec ff_alac_at_decoder; -+extern const FFCodec ff_amr_nb_at_decoder; -+extern const FFCodec ff_eac3_at_decoder; -+extern const FFCodec ff_gsm_ms_at_decoder; -+extern const FFCodec ff_ilbc_at_encoder; -+extern const FFCodec ff_ilbc_at_decoder; -+extern const FFCodec ff_mp1_at_decoder; -+extern const FFCodec ff_mp2_at_decoder; -+extern const FFCodec ff_mp3_at_decoder; -+extern const FFCodec ff_pcm_alaw_at_encoder; -+extern const FFCodec ff_pcm_alaw_at_decoder; -+extern const FFCodec ff_pcm_mulaw_at_encoder; -+extern const FFCodec ff_pcm_mulaw_at_decoder; -+extern const FFCodec ff_qdmc_at_decoder; -+extern const FFCodec ff_qdm2_at_decoder; -+extern FFCodec ff_libaom_av1_encoder; -+extern const FFCodec ff_libaribb24_decoder; -+extern const FFCodec ff_libcelt_decoder; -+extern const FFCodec ff_libcodec2_encoder; -+extern const FFCodec ff_libcodec2_decoder; -+extern const FFCodec ff_libdav1d_decoder; -+extern const FFCodec ff_libdavs2_decoder; -+extern const FFCodec ff_libfdk_aac_encoder; -+extern const FFCodec ff_libfdk_aac_decoder; -+extern const FFCodec ff_libgsm_encoder; -+extern const FFCodec ff_libgsm_decoder; -+extern const FFCodec ff_libgsm_ms_encoder; -+extern const FFCodec ff_libgsm_ms_decoder; -+extern const FFCodec ff_libilbc_encoder; -+extern const FFCodec ff_libilbc_decoder; -+extern const FFCodec ff_libjxl_decoder; -+extern const FFCodec ff_libjxl_encoder; -+extern const FFCodec ff_libmp3lame_encoder; -+extern const FFCodec ff_libopencore_amrnb_encoder; -+extern const FFCodec ff_libopencore_amrnb_decoder; -+extern const FFCodec ff_libopencore_amrwb_decoder; -+extern const FFCodec ff_libopenjpeg_encoder; -+extern const FFCodec ff_libopenjpeg_decoder; -+extern const FFCodec ff_libopus_encoder; -+extern const FFCodec ff_libopus_decoder; -+extern const FFCodec ff_librav1e_encoder; -+extern const FFCodec ff_librsvg_decoder; -+extern const FFCodec ff_libshine_encoder; -+extern const FFCodec ff_libspeex_encoder; -+extern const FFCodec ff_libspeex_decoder; -+extern const FFCodec ff_libsvtav1_encoder; -+extern const FFCodec ff_libtheora_encoder; -+extern const FFCodec ff_libtwolame_encoder; -+extern const FFCodec ff_libuavs3d_decoder; -+extern const FFCodec ff_libvo_amrwbenc_encoder; -+extern const FFCodec ff_libvorbis_encoder; -+extern const FFCodec ff_libvorbis_decoder; -+extern const FFCodec ff_libvpx_vp8_encoder; -+extern const FFCodec ff_libvpx_vp8_decoder; -+extern FFCodec ff_libvpx_vp9_encoder; -+extern FFCodec ff_libvpx_vp9_decoder; - /* preferred over libwebp */ --extern AVCodec ff_libwebp_anim_encoder; --extern AVCodec ff_libwebp_encoder; --extern AVCodec ff_libx262_encoder; --extern AVCodec ff_libx264_encoder; --extern AVCodec ff_libx264rgb_encoder; --extern AVCodec ff_libx265_encoder; --extern AVCodec ff_libxavs_encoder; --extern AVCodec ff_libxavs2_encoder; --extern AVCodec ff_libxvid_encoder; --extern AVCodec ff_libzvbi_teletext_decoder; -+extern const FFCodec ff_libwebp_anim_encoder; -+extern const FFCodec ff_libwebp_encoder; -+extern const FFCodec ff_libx262_encoder; -+#if CONFIG_LIBX264_ENCODER -+#include -+#if X264_BUILD < 153 -+#define LIBX264_CONST -+#else -+#define LIBX264_CONST const -+#endif -+extern LIBX264_CONST FFCodec ff_libx264_encoder; -+#endif -+extern const FFCodec ff_libx264rgb_encoder; -+extern FFCodec ff_libx265_encoder; -+extern const FFCodec ff_libxavs_encoder; -+extern const FFCodec ff_libxavs2_encoder; -+extern const FFCodec ff_libxvid_encoder; -+extern const FFCodec ff_libzvbi_teletext_decoder; - - /* text */ --extern AVCodec ff_bintext_decoder; --extern AVCodec ff_xbin_decoder; --extern AVCodec ff_idf_decoder; -+extern const FFCodec ff_bintext_decoder; -+extern const FFCodec ff_xbin_decoder; -+extern const FFCodec ff_idf_decoder; - - /* external libraries, that shouldn't be used by default if one of the - * above is available */ --extern AVCodec ff_aac_mf_encoder; --extern AVCodec ff_ac3_mf_encoder; --extern AVCodec ff_h263_v4l2m2m_encoder; --extern AVCodec ff_libaom_av1_decoder; -+extern const FFCodec ff_aac_mf_encoder; -+extern const FFCodec ff_ac3_mf_encoder; -+extern const FFCodec ff_h263_v4l2m2m_encoder; -+extern const FFCodec ff_libaom_av1_decoder; - /* hwaccel hooks only, so prefer external decoders */ --extern AVCodec ff_av1_decoder; --extern AVCodec ff_av1_cuvid_decoder; --extern AVCodec ff_av1_qsv_decoder; --extern AVCodec ff_libopenh264_encoder; --extern AVCodec ff_libopenh264_decoder; --extern AVCodec ff_h264_amf_encoder; --extern AVCodec ff_h264_cuvid_decoder; --extern AVCodec ff_h264_mf_encoder; --extern AVCodec ff_h264_nvenc_encoder; --extern AVCodec ff_h264_omx_encoder; --extern AVCodec ff_h264_qsv_encoder; --extern AVCodec ff_h264_v4l2m2m_encoder; --extern AVCodec ff_h264_vaapi_encoder; --extern AVCodec ff_h264_videotoolbox_encoder; --#if FF_API_NVENC_OLD_NAME --extern AVCodec ff_nvenc_encoder; --extern AVCodec ff_nvenc_h264_encoder; --extern AVCodec ff_nvenc_hevc_encoder; --#endif --extern AVCodec ff_hevc_amf_encoder; --extern AVCodec ff_hevc_cuvid_decoder; --extern AVCodec ff_hevc_mediacodec_decoder; --extern AVCodec ff_hevc_mf_encoder; --extern AVCodec ff_hevc_nvenc_encoder; --extern AVCodec ff_hevc_qsv_encoder; --extern AVCodec ff_hevc_v4l2m2m_encoder; --extern AVCodec ff_hevc_vaapi_encoder; --extern AVCodec ff_hevc_videotoolbox_encoder; --extern AVCodec ff_libkvazaar_encoder; --extern AVCodec ff_mjpeg_cuvid_decoder; --extern AVCodec ff_mjpeg_qsv_encoder; --extern AVCodec ff_mjpeg_qsv_decoder; --extern AVCodec ff_mjpeg_vaapi_encoder; --extern AVCodec ff_mp3_mf_encoder; --extern AVCodec ff_mpeg1_cuvid_decoder; --extern AVCodec ff_mpeg2_cuvid_decoder; --extern AVCodec ff_mpeg2_qsv_encoder; --extern AVCodec ff_mpeg2_vaapi_encoder; --extern AVCodec ff_mpeg4_cuvid_decoder; --extern AVCodec ff_mpeg4_mediacodec_decoder; --extern AVCodec ff_mpeg4_omx_encoder; --extern AVCodec ff_mpeg4_v4l2m2m_encoder; --extern AVCodec ff_vc1_cuvid_decoder; --extern AVCodec ff_vp8_cuvid_decoder; --extern AVCodec ff_vp8_mediacodec_decoder; --extern AVCodec ff_vp8_qsv_decoder; --extern AVCodec ff_vp8_v4l2m2m_encoder; --extern AVCodec ff_vp8_vaapi_encoder; --extern AVCodec ff_vp9_cuvid_decoder; --extern AVCodec ff_vp9_mediacodec_decoder; --extern AVCodec ff_vp9_qsv_decoder; --extern AVCodec ff_vp9_vaapi_encoder; --extern AVCodec ff_vp9_qsv_encoder; -+extern const FFCodec ff_av1_decoder; -+extern const FFCodec ff_av1_cuvid_decoder; -+extern const FFCodec ff_av1_mediacodec_decoder; -+extern const FFCodec ff_av1_nvenc_encoder; -+extern const FFCodec ff_av1_qsv_decoder; -+extern const FFCodec ff_av1_qsv_encoder; -+extern const FFCodec ff_av1_amf_encoder; -+extern const FFCodec ff_libopenh264_encoder; -+extern const FFCodec ff_libopenh264_decoder; -+extern const FFCodec ff_h264_amf_encoder; -+extern const FFCodec ff_h264_cuvid_decoder; -+extern const FFCodec ff_h264_mf_encoder; -+extern const FFCodec ff_h264_nvenc_encoder; -+extern const FFCodec ff_h264_omx_encoder; -+extern const FFCodec ff_h264_qsv_encoder; -+extern const FFCodec ff_h264_v4l2m2m_encoder; -+extern const FFCodec ff_h264_vaapi_encoder; -+extern const FFCodec ff_h264_videotoolbox_encoder; -+extern const FFCodec ff_hevc_amf_encoder; -+extern const FFCodec ff_hevc_cuvid_decoder; -+extern const FFCodec ff_hevc_mediacodec_decoder; -+extern const FFCodec ff_hevc_mediacodec_encoder; -+extern const FFCodec ff_hevc_mf_encoder; -+extern const FFCodec ff_hevc_nvenc_encoder; -+extern const FFCodec ff_hevc_qsv_encoder; -+extern const FFCodec ff_hevc_v4l2m2m_encoder; -+extern const FFCodec ff_hevc_vaapi_encoder; -+extern const FFCodec ff_hevc_videotoolbox_encoder; -+extern const FFCodec ff_libkvazaar_encoder; -+extern const FFCodec ff_mjpeg_cuvid_decoder; -+extern const FFCodec ff_mjpeg_qsv_encoder; -+extern const FFCodec ff_mjpeg_qsv_decoder; -+extern const FFCodec ff_mjpeg_vaapi_encoder; -+extern const FFCodec ff_mp3_mf_encoder; -+extern const FFCodec ff_mpeg1_cuvid_decoder; -+extern const FFCodec ff_mpeg2_cuvid_decoder; -+extern const FFCodec ff_mpeg2_qsv_encoder; -+extern const FFCodec ff_mpeg2_vaapi_encoder; -+extern const FFCodec ff_mpeg4_cuvid_decoder; -+extern const FFCodec ff_mpeg4_mediacodec_decoder; -+extern const FFCodec ff_mpeg4_omx_encoder; -+extern const FFCodec ff_mpeg4_v4l2m2m_encoder; -+extern const FFCodec ff_prores_videotoolbox_encoder; -+extern const FFCodec ff_vc1_cuvid_decoder; -+extern const FFCodec ff_vp8_cuvid_decoder; -+extern const FFCodec ff_vp8_mediacodec_decoder; -+extern const FFCodec ff_vp8_qsv_decoder; -+extern const FFCodec ff_vp8_v4l2m2m_encoder; -+extern const FFCodec ff_vp8_vaapi_encoder; -+extern const FFCodec ff_vp9_cuvid_decoder; -+extern const FFCodec ff_vp9_mediacodec_decoder; -+extern const FFCodec ff_vp9_qsv_decoder; -+extern const FFCodec ff_vp9_vaapi_encoder; -+extern const FFCodec ff_vp9_qsv_encoder; -+ -+// null codecs -+extern const FFCodec ff_vnull_decoder; -+extern const FFCodec ff_vnull_encoder; -+extern const FFCodec ff_anull_decoder; -+extern const FFCodec ff_anull_encoder; - - // The iterate API is not usable with ossfuzz due to the excessive size of binaries created - #if CONFIG_OSSFUZZ --AVCodec * codec_list[] = { -+const FFCodec * codec_list[] = { - NULL, - NULL, - NULL -@@ -852,62 +908,24 @@ - { - for (int i = 0; codec_list[i]; i++) { - if (codec_list[i]->init_static_data) -- codec_list[i]->init_static_data((AVCodec*)codec_list[i]); -+ codec_list[i]->init_static_data((FFCodec*)codec_list[i]); - } - } - - const AVCodec *av_codec_iterate(void **opaque) - { - uintptr_t i = (uintptr_t)*opaque; -- const AVCodec *c = codec_list[i]; -+ const FFCodec *c = codec_list[i]; - - ff_thread_once(&av_codec_static_init, av_codec_init_static); - -- if (c) -+ if (c) { - *opaque = (void*)(i + 1); -- -- return c; --} -- --#if FF_API_NEXT --FF_DISABLE_DEPRECATION_WARNINGS --static AVOnce av_codec_next_init = AV_ONCE_INIT; -- --static void av_codec_init_next(void) --{ -- AVCodec *prev = NULL, *p; -- void *i = 0; -- while ((p = (AVCodec*)av_codec_iterate(&i))) { -- if (prev) -- prev->next = p; -- prev = p; -+ return &c->p; - } -+ return NULL; - } - -- -- --av_cold void avcodec_register(AVCodec *codec) --{ -- ff_thread_once(&av_codec_next_init, av_codec_init_next); --} -- --AVCodec *av_codec_next(const AVCodec *c) --{ -- ff_thread_once(&av_codec_next_init, av_codec_init_next); -- -- if (c) -- return c->next; -- else -- return (AVCodec*)codec_list[0]; --} -- --void avcodec_register_all(void) --{ -- ff_thread_once(&av_codec_next_init, av_codec_init_next); --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - static enum AVCodecID remap_deprecated_codec_id(enum AVCodecID id) - { - switch(id){ -@@ -917,7 +935,7 @@ - } - } - --static AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) -+static const AVCodec *find_codec(enum AVCodecID id, int (*x)(const AVCodec *)) - { - const AVCodec *p, *experimental = NULL; - void *i = 0; -@@ -931,24 +949,24 @@ - if (p->capabilities & AV_CODEC_CAP_EXPERIMENTAL && !experimental) { - experimental = p; - } else -- return (AVCodec*)p; -+ return p; - } - } - -- return (AVCodec*)experimental; -+ return experimental; - } - --AVCodec *avcodec_find_encoder(enum AVCodecID id) -+const AVCodec *avcodec_find_encoder(enum AVCodecID id) - { - return find_codec(id, av_codec_is_encoder); - } - --AVCodec *avcodec_find_decoder(enum AVCodecID id) -+const AVCodec *avcodec_find_decoder(enum AVCodecID id) - { - return find_codec(id, av_codec_is_decoder); - } - --static AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) -+static const AVCodec *find_codec_by_name(const char *name, int (*x)(const AVCodec *)) - { - void *i = 0; - const AVCodec *p; -@@ -960,18 +978,18 @@ - if (!x(p)) - continue; - if (strcmp(name, p->name) == 0) -- return (AVCodec*)p; -+ return p; - } - - return NULL; - } - --AVCodec *avcodec_find_encoder_by_name(const char *name) -+const AVCodec *avcodec_find_encoder_by_name(const char *name) - { - return find_codec_by_name(name, av_codec_is_encoder); - } - --AVCodec *avcodec_find_decoder_by_name(const char *name) -+const AVCodec *avcodec_find_decoder_by_name(const char *name) - { - return find_codec_by_name(name, av_codec_is_decoder); - } -diff -Naur a/media/ffvpx/libavcodec/arm/fft_init_arm.c b/media/ffvpx/libavcodec/arm/fft_init_arm.c ---- a/media/ffvpx/libavcodec/arm/fft_init_arm.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/arm/fft_init_arm.c 2023-04-06 12:50:06.970471013 +0200 -@@ -48,8 +48,10 @@ - - if (have_neon(cpu_flags)) { - #if CONFIG_FFT -- s->fft_permute = ff_fft_permute_neon; -- s->fft_calc = ff_fft_calc_neon; -+ if (s->nbits < 17) { -+ s->fft_permute = ff_fft_permute_neon; -+ s->fft_calc = ff_fft_calc_neon; -+ } - #endif - #if CONFIG_MDCT - s->imdct_calc = ff_imdct_calc_neon; -diff -Naur a/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c b/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c ---- a/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/arm/flacdsp_init_arm.c 2023-04-06 12:50:06.970471013 +0200 -@@ -18,15 +18,13 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "libavutil/attributes.h" - #include "libavcodec/flacdsp.h" --#include "config.h" - - void ff_flac_lpc_16_arm(int32_t *samples, const int coeffs[32], int order, - int qlevel, int len); - --av_cold void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, -- int bps) -+av_cold void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels) - { -- if (CONFIG_FLAC_DECODER) -- c->lpc16 = ff_flac_lpc_16_arm; -+ c->lpc16 = ff_flac_lpc_16_arm; - } -diff -Naur a/media/ffvpx/libavcodec/atsc_a53.c b/media/ffvpx/libavcodec/atsc_a53.c ---- a/media/ffvpx/libavcodec/atsc_a53.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/atsc_a53.c 2023-04-06 12:49:40.250394769 +0200 -@@ -73,7 +73,7 @@ - int ret, cc_count; - - if (size < 3) -- return AVERROR(EINVAL); -+ return AVERROR_INVALIDDATA; - - ret = init_get_bits8(&gb, data, size); - if (ret < 0) -@@ -95,12 +95,12 @@ - - /* 3 bytes per CC plus one byte marker_bits at the end */ - if (cc_count * 3 >= (get_bits_left(&gb) >> 3)) -- return AVERROR(EINVAL); -+ return AVERROR_INVALIDDATA; - - new_size = (old_size + cc_count * 3); - - if (new_size > INT_MAX) -- return AVERROR(EINVAL); -+ return AVERROR_INVALIDDATA; - - /* Allow merging of the cc data from two fields. */ - ret = av_buffer_realloc(pbuf, new_size); -diff -Naur a/media/ffvpx/libavcodec/av1dec.c b/media/ffvpx/libavcodec/av1dec.c ---- a/media/ffvpx/libavcodec/av1dec.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/av1dec.c 2023-04-06 12:50:24.490176462 +0200 -@@ -18,15 +18,47 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config_components.h" -+ - #include "libavutil/film_grain_params.h" - #include "libavutil/pixdesc.h" - #include "libavutil/opt.h" - #include "avcodec.h" - #include "av1dec.h" - #include "bytestream.h" -+#include "codec_internal.h" -+#include "decode.h" - #include "hwconfig.h" --#include "internal.h" - #include "profiles.h" -+#include "thread.h" -+ -+/**< same with Div_Lut defined in spec 7.11.3.7 */ -+static const uint16_t div_lut[AV1_DIV_LUT_NUM] = { -+ 16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768, -+ 15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142, -+ 15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564, -+ 14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028, -+ 13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530, -+ 13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066, -+ 13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633, -+ 12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228, -+ 12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848, -+ 11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491, -+ 11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155, -+ 11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838, -+ 10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538, -+ 10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255, -+ 10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986, -+ 9963, 9939, 9916, 9892, 9869, 9846, 9823, 9800, 9777, 9754, 9732, -+ 9709, 9687, 9664, 9642, 9620, 9598, 9576, 9554, 9533, 9511, 9489, -+ 9468, 9447, 9425, 9404, 9383, 9362, 9341, 9321, 9300, 9279, 9259, -+ 9239, 9218, 9198, 9178, 9158, 9138, 9118, 9098, 9079, 9059, 9039, -+ 9020, 9001, 8981, 8962, 8943, 8924, 8905, 8886, 8867, 8849, 8830, -+ 8812, 8793, 8775, 8756, 8738, 8720, 8702, 8684, 8666, 8648, 8630, -+ 8613, 8595, 8577, 8560, 8542, 8525, 8508, 8490, 8473, 8456, 8439, -+ 8422, 8405, 8389, 8372, 8355, 8339, 8322, 8306, 8289, 8273, 8257, -+ 8240, 8224, 8208, 8192 -+}; - - static uint32_t inverse_recenter(int r, uint32_t v) - { -@@ -97,8 +129,72 @@ - -mx, mx + 1, r) << prec_diff) + round; - } - -+static uint64_t round_two(uint64_t x, uint16_t n) -+{ -+ if (n == 0) -+ return x; -+ return ((x + ((uint64_t)1 << (n - 1))) >> n); -+} -+ -+static int64_t round_two_signed(int64_t x, uint16_t n) -+{ -+ return ((x<0) ? -((int64_t)round_two(-x, n)) : (int64_t)round_two(x, n)); -+} -+ - /** --* update gm type/params, since cbs already implemented part of this funcation, -+ * Resolve divisor process. -+ * see spec 7.11.3.7 -+ */ -+static int16_t resolve_divisor(uint32_t d, uint16_t *shift) -+{ -+ int32_t e, f; -+ -+ *shift = av_log2(d); -+ e = d - (1 << (*shift)); -+ if (*shift > AV1_DIV_LUT_BITS) -+ f = round_two(e, *shift - AV1_DIV_LUT_BITS); -+ else -+ f = e << (AV1_DIV_LUT_BITS - (*shift)); -+ -+ *shift += AV1_DIV_LUT_PREC_BITS; -+ -+ return div_lut[f]; -+} -+ -+/** -+ * check if global motion params is valid. -+ * see spec 7.11.3.6 -+ */ -+static uint8_t get_shear_params_valid(AV1DecContext *s, int idx) -+{ -+ int16_t alpha, beta, gamma, delta, divf, divs; -+ int64_t v, w; -+ int32_t *param = &s->cur_frame.gm_params[idx][0]; -+ if (param[2] < 0) -+ return 0; -+ -+ alpha = av_clip_int16(param[2] - (1 << AV1_WARPEDMODEL_PREC_BITS)); -+ beta = av_clip_int16(param[3]); -+ divf = resolve_divisor(abs(param[2]), &divs); -+ v = (int64_t)param[4] * (1 << AV1_WARPEDMODEL_PREC_BITS); -+ w = (int64_t)param[3] * param[4]; -+ gamma = av_clip_int16((int)round_two_signed((v * divf), divs)); -+ delta = av_clip_int16(param[5] - (int)round_two_signed((w * divf), divs) - (1 << AV1_WARPEDMODEL_PREC_BITS)); -+ -+ alpha = round_two_signed(alpha, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; -+ beta = round_two_signed(beta, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; -+ gamma = round_two_signed(gamma, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; -+ delta = round_two_signed(delta, AV1_WARP_PARAM_REDUCE_BITS) << AV1_WARP_PARAM_REDUCE_BITS; -+ -+ if ((4 * abs(alpha) + 7 * abs(beta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS) || -+ (4 * abs(gamma) + 4 * abs(delta)) >= (1 << AV1_WARPEDMODEL_PREC_BITS)) -+ return 0; -+ -+ return 1; -+} -+ -+/** -+* update gm type/params, since cbs already implemented part of this function, - * so we don't need to full implement spec. - */ - static void global_motion_params(AV1DecContext *s) -@@ -144,6 +240,9 @@ - read_global_param(s, type, ref, 0); - read_global_param(s, type, ref, 1); - } -+ if (type <= AV1_WARP_MODEL_AFFINE) { -+ s->cur_frame.gm_invalid[ref] = !get_shear_params_valid(s, ref); -+ } - } - } - -@@ -342,7 +441,8 @@ - #define HWACCEL_MAX (CONFIG_AV1_DXVA2_HWACCEL + \ - CONFIG_AV1_D3D11VA_HWACCEL * 2 + \ - CONFIG_AV1_NVDEC_HWACCEL + \ -- CONFIG_AV1_VAAPI_HWACCEL) -+ CONFIG_AV1_VAAPI_HWACCEL + \ -+ CONFIG_AV1_VDPAU_HWACCEL) - enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; - - if (seq->seq_profile == 2 && seq->color_config.high_bitdepth) -@@ -404,9 +504,8 @@ - - if (pix_fmt == AV_PIX_FMT_NONE) - return -1; -- s->pix_fmt = pix_fmt; - -- switch (s->pix_fmt) { -+ switch (pix_fmt) { - case AV_PIX_FMT_YUV420P: - #if CONFIG_AV1_DXVA2_HWACCEL - *fmtp++ = AV_PIX_FMT_DXVA2_VLD; -@@ -421,6 +520,9 @@ - #if CONFIG_AV1_VAAPI_HWACCEL - *fmtp++ = AV_PIX_FMT_VAAPI; - #endif -+#if CONFIG_AV1_VDPAU_HWACCEL -+ *fmtp++ = AV_PIX_FMT_VDPAU; -+#endif - break; - case AV_PIX_FMT_YUV420P10: - #if CONFIG_AV1_DXVA2_HWACCEL -@@ -436,6 +538,9 @@ - #if CONFIG_AV1_VAAPI_HWACCEL - *fmtp++ = AV_PIX_FMT_VAAPI; - #endif -+#if CONFIG_AV1_VDPAU_HWACCEL -+ *fmtp++ = AV_PIX_FMT_VDPAU; -+#endif - break; - case AV_PIX_FMT_GRAY8: - #if CONFIG_AV1_NVDEC_HWACCEL -@@ -449,7 +554,7 @@ - break; - } - -- *fmtp++ = s->pix_fmt; -+ *fmtp++ = pix_fmt; - *fmtp = AV_PIX_FMT_NONE; - - ret = ff_thread_get_format(avctx, pix_fmts); -@@ -462,11 +567,12 @@ - * implemented in the future, need remove this check. - */ - if (!avctx->hwaccel) { -- av_log(avctx, AV_LOG_ERROR, "Your platform doesn't suppport" -+ av_log(avctx, AV_LOG_ERROR, "Your platform doesn't support" - " hardware accelerated AV1 decoding.\n"); - return AVERROR(ENOSYS); - } - -+ s->pix_fmt = pix_fmt; - avctx->pix_fmt = ret; - - return 0; -@@ -474,7 +580,7 @@ - - static void av1_frame_unref(AVCodecContext *avctx, AV1Frame *f) - { -- ff_thread_release_buffer(avctx, &f->tf); -+ ff_thread_release_buffer(avctx, f->f); - av_buffer_unref(&f->hwaccel_priv_buf); - f->hwaccel_picture_private = NULL; - av_buffer_unref(&f->header_ref); -@@ -490,16 +596,19 @@ - { - int ret; - -- ret = ff_thread_ref_frame(&dst->tf, &src->tf); -+ ret = av_buffer_replace(&dst->header_ref, src->header_ref); - if (ret < 0) - return ret; - -- dst->header_ref = av_buffer_ref(src->header_ref); -- if (!dst->header_ref) -- goto fail; -- - dst->raw_frame_header = src->raw_frame_header; - -+ if (!src->f->buf[0]) -+ return 0; -+ -+ ret = av_frame_ref(dst->f, src->f); -+ if (ret < 0) -+ goto fail; -+ - if (src->hwaccel_picture_private) { - dst->hwaccel_priv_buf = av_buffer_ref(src->hwaccel_priv_buf); - if (!dst->hwaccel_priv_buf) -@@ -509,6 +618,9 @@ - - dst->spatial_id = src->spatial_id; - dst->temporal_id = src->temporal_id; -+ memcpy(dst->gm_invalid, -+ src->gm_invalid, -+ AV1_NUM_REF_FRAMES * sizeof(uint8_t)); - memcpy(dst->gm_type, - src->gm_type, - AV1_NUM_REF_FRAMES * sizeof(uint8_t)); -@@ -536,10 +648,10 @@ - - for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { - av1_frame_unref(avctx, &s->ref[i]); -- av_frame_free(&s->ref[i].tf.f); -+ av_frame_free(&s->ref[i].f); - } - av1_frame_unref(avctx, &s->cur_frame); -- av_frame_free(&s->cur_frame.tf.f); -+ av_frame_free(&s->cur_frame.f); - - av_buffer_unref(&s->seq_ref); - av_buffer_unref(&s->header_ref); -@@ -575,6 +687,11 @@ - break; - } - -+ if (seq->film_grain_params_present) -+ avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; -+ else -+ avctx->properties &= ~FF_CODEC_PROPERTY_FILM_GRAIN; -+ - if (avctx->width != width || avctx->height != height) { - int ret = ff_set_dimensions(avctx, width, height); - if (ret < 0) -@@ -635,16 +752,16 @@ - s->pix_fmt = AV_PIX_FMT_NONE; - - for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { -- s->ref[i].tf.f = av_frame_alloc(); -- if (!s->ref[i].tf.f) { -+ s->ref[i].f = av_frame_alloc(); -+ if (!s->ref[i].f) { - av_log(avctx, AV_LOG_ERROR, - "Failed to allocate reference frame buffer %d.\n", i); - return AVERROR(ENOMEM); - } - } - -- s->cur_frame.tf.f = av_frame_alloc(); -- if (!s->cur_frame.tf.f) { -+ s->cur_frame.f = av_frame_alloc(); -+ if (!s->cur_frame.f) { - av_log(avctx, AV_LOG_ERROR, - "Failed to allocate current frame buffer.\n"); - return AVERROR(ENOMEM); -@@ -697,16 +814,10 @@ - return ret; - } - -- f->header_ref = av_buffer_ref(s->header_ref); -- if (!f->header_ref) -- return AVERROR(ENOMEM); -- -- f->raw_frame_header = s->raw_frame_header; -- -- if ((ret = ff_thread_get_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF)) < 0) -+ if ((ret = ff_thread_get_buffer(avctx, f->f, AV_GET_BUFFER_FLAG_REF)) < 0) - goto fail; - -- frame = f->tf.f; -+ frame = f->f; - frame->key_frame = header->frame_type == AV1_FRAME_KEY; - - switch (header->frame_type) { -@@ -805,7 +916,7 @@ - const AVPacket *pkt, int *got_frame) - { - AV1DecContext *s = avctx->priv_data; -- const AVFrame *srcframe = s->cur_frame.tf.f; -+ const AVFrame *srcframe = s->cur_frame.f; - int ret; - - // TODO: all layers -@@ -842,8 +953,7 @@ - - for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { - if (header->refresh_frame_flags & (1 << i)) { -- if (s->ref[i].tf.f->buf[0]) -- av1_frame_unref(avctx, &s->ref[i]); -+ av1_frame_unref(avctx, &s->ref[i]); - if ((ret = av1_frame_ref(avctx, &s->ref[i], &s->cur_frame)) < 0) { - av_log(avctx, AV_LOG_ERROR, - "Failed to update frame %d in reference list\n", i); -@@ -859,19 +969,32 @@ - AV1DecContext *s = avctx->priv_data; - int ret; - -- if (s->cur_frame.tf.f->buf[0]) -- av1_frame_unref(avctx, &s->cur_frame); -+ av1_frame_unref(avctx, &s->cur_frame); - -- ret = av1_frame_alloc(avctx, &s->cur_frame); -+ s->cur_frame.header_ref = av_buffer_ref(s->header_ref); -+ if (!s->cur_frame.header_ref) -+ return AVERROR(ENOMEM); -+ -+ s->cur_frame.raw_frame_header = s->raw_frame_header; -+ -+ ret = init_tile_data(s); - if (ret < 0) { -- av_log(avctx, AV_LOG_ERROR, -- "Failed to allocate space for current frame.\n"); -+ av_log(avctx, AV_LOG_ERROR, "Failed to init tile data.\n"); - return ret; - } - -- ret = init_tile_data(s); -+ if ((avctx->skip_frame >= AVDISCARD_NONINTRA && -+ (s->raw_frame_header->frame_type != AV1_FRAME_KEY && -+ s->raw_frame_header->frame_type != AV1_FRAME_INTRA_ONLY)) || -+ (avctx->skip_frame >= AVDISCARD_NONKEY && -+ s->raw_frame_header->frame_type != AV1_FRAME_KEY) || -+ avctx->skip_frame >= AVDISCARD_ALL) -+ return 0; -+ -+ ret = av1_frame_alloc(avctx, &s->cur_frame); - if (ret < 0) { -- av_log(avctx, AV_LOG_ERROR, "Failed to init tile data.\n"); -+ av_log(avctx, AV_LOG_ERROR, -+ "Failed to allocate space for current frame.\n"); - return ret; - } - -@@ -883,7 +1006,7 @@ - return ret; - } - --static int av1_decode_frame(AVCodecContext *avctx, void *frame, -+static int av1_decode_frame(AVCodecContext *avctx, AVFrame *frame, - int *got_frame, AVPacket *pkt) - { - AV1DecContext *s = avctx->priv_data; -@@ -974,8 +1097,7 @@ - s->raw_frame_header = &obu->obu.frame_header; - - if (s->raw_frame_header->show_existing_frame) { -- if (s->cur_frame.tf.f->buf[0]) -- av1_frame_unref(avctx, &s->cur_frame); -+ av1_frame_unref(avctx, &s->cur_frame); - - ret = av1_frame_ref(avctx, &s->cur_frame, - &s->ref[s->raw_frame_header->frame_to_show_map_idx]); -@@ -990,9 +1112,11 @@ - goto end; - } - -- ret = set_output_frame(avctx, frame, pkt, got_frame); -- if (ret < 0) -- av_log(avctx, AV_LOG_ERROR, "Set output frame error.\n"); -+ if (s->cur_frame.f->buf[0]) { -+ ret = set_output_frame(avctx, frame, pkt, got_frame); -+ if (ret < 0) -+ av_log(avctx, AV_LOG_ERROR, "Set output frame error.\n"); -+ } - - s->raw_frame_header = NULL; - -@@ -1008,7 +1132,7 @@ - s->cur_frame.spatial_id = header->spatial_id; - s->cur_frame.temporal_id = header->temporal_id; - -- if (avctx->hwaccel) { -+ if (avctx->hwaccel && s->cur_frame.f->buf[0]) { - ret = avctx->hwaccel->start_frame(avctx, unit->data, - unit->data_size); - if (ret < 0) { -@@ -1035,7 +1159,7 @@ - if (ret < 0) - goto end; - -- if (avctx->hwaccel) { -+ if (avctx->hwaccel && s->cur_frame.f->buf[0]) { - ret = avctx->hwaccel->decode_slice(avctx, - raw_tile_group->tile_data.data, - raw_tile_group->tile_data.data_size); -@@ -1058,7 +1182,7 @@ - } - - if (raw_tile_group && (s->tile_num == raw_tile_group->tg_end + 1)) { -- if (avctx->hwaccel) { -+ if (avctx->hwaccel && s->cur_frame.f->buf[0]) { - ret = avctx->hwaccel->end_frame(avctx); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "HW accel end frame fail.\n"); -@@ -1072,7 +1196,7 @@ - goto end; - } - -- if (s->raw_frame_header->show_frame) { -+ if (s->raw_frame_header->show_frame && s->cur_frame.f->buf[0]) { - ret = set_output_frame(avctx, frame, pkt, got_frame); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Set output frame error\n"); -@@ -1121,22 +1245,22 @@ - .version = LIBAVUTIL_VERSION_INT, - }; - --AVCodec ff_av1_decoder = { -- .name = "av1", -- .long_name = NULL_IF_CONFIG_SMALL("Alliance for Open Media AV1"), -- .type = AVMEDIA_TYPE_VIDEO, -- .id = AV_CODEC_ID_AV1, -+const FFCodec ff_av1_decoder = { -+ .p.name = "av1", -+ CODEC_LONG_NAME("Alliance for Open Media AV1"), -+ .p.type = AVMEDIA_TYPE_VIDEO, -+ .p.id = AV_CODEC_ID_AV1, - .priv_data_size = sizeof(AV1DecContext), - .init = av1_decode_init, - .close = av1_decode_free, -- .decode = av1_decode_frame, -- .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | -- FF_CODEC_CAP_INIT_CLEANUP | -+ FF_CODEC_DECODE_CB(av1_decode_frame), -+ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_AVOID_PROBING, -+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | - FF_CODEC_CAP_SETS_PKT_DTS, - .flush = av1_decode_flush, -- .profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles), -- .priv_class = &av1_class, -+ .p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles), -+ .p.priv_class = &av1_class, -+ .bsfs = "av1_frame_split", - .hw_configs = (const AVCodecHWConfigInternal *const []) { - #if CONFIG_AV1_DXVA2_HWACCEL - HWACCEL_DXVA2(av1), -@@ -1153,6 +1277,10 @@ - #if CONFIG_AV1_VAAPI_HWACCEL - HWACCEL_VAAPI(av1), - #endif -+#if CONFIG_AV1_VDPAU_HWACCEL -+ HWACCEL_VDPAU(av1), -+#endif -+ - NULL - }, - }; -diff -Naur a/media/ffvpx/libavcodec/av1dec.h b/media/ffvpx/libavcodec/av1dec.h ---- a/media/ffvpx/libavcodec/av1dec.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/av1dec.h 2023-04-06 12:49:40.250394769 +0200 -@@ -24,14 +24,14 @@ - #include - - #include "libavutil/buffer.h" -+#include "libavutil/frame.h" - #include "libavutil/pixfmt.h" - #include "avcodec.h" - #include "cbs.h" - #include "cbs_av1.h" --#include "thread.h" - - typedef struct AV1Frame { -- ThreadFrame tf; -+ AVFrame *f; - - AVBufferRef *hwaccel_priv_buf; - void *hwaccel_picture_private; -@@ -42,6 +42,7 @@ - int temporal_id; - int spatial_id; - -+ uint8_t gm_invalid[AV1_NUM_REF_FRAMES]; - uint8_t gm_type[AV1_NUM_REF_FRAMES]; - int32_t gm_params[AV1_NUM_REF_FRAMES][6]; - -diff -Naur a/media/ffvpx/libavcodec/av1.h b/media/ffvpx/libavcodec/av1.h ---- a/media/ffvpx/libavcodec/av1.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/av1.h 2023-04-06 12:50:06.970471013 +0200 -@@ -114,6 +114,13 @@ - AV1_WARP_MODEL_TRANSLATION = 1, - AV1_WARP_MODEL_ROTZOOM = 2, - AV1_WARP_MODEL_AFFINE = 3, -+ AV1_WARP_PARAM_REDUCE_BITS = 6, -+ -+ AV1_DIV_LUT_BITS = 8, -+ AV1_DIV_LUT_PREC_BITS = 14, -+ AV1_DIV_LUT_NUM = 257, -+ -+ AV1_MAX_LOOP_FILTER = 63, - }; - - -@@ -168,4 +175,10 @@ - AV1_RESTORE_SWITCHABLE = 3, - }; - -+// Sequence Headers are actually unbounded because one can use -+// an arbitrary number of leading zeroes when encoding via uvlc. -+// The following estimate is based around using the lowest number -+// of bits for uvlc encoding. -+#define AV1_SANE_SEQUENCE_HEADER_MAX_BITS 3138 -+ - #endif /* AVCODEC_AV1_H */ -diff -Naur a/media/ffvpx/libavcodec/av1_parse.h b/media/ffvpx/libavcodec/av1_parse.h ---- a/media/ffvpx/libavcodec/av1_parse.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/av1_parse.h 2023-04-06 12:49:40.250394769 +0200 -@@ -21,10 +21,14 @@ - #ifndef AVCODEC_AV1_PARSE_H - #define AVCODEC_AV1_PARSE_H - -+#include - #include - -+#include "libavutil/error.h" -+#include "libavutil/intmath.h" -+#include "libavutil/macros.h" -+ - #include "av1.h" --#include "avcodec.h" - #include "get_bits.h" - - // OBU header fields + max leb128 length -diff -Naur a/media/ffvpx/libavcodec/av1_parser.c b/media/ffvpx/libavcodec/av1_parser.c ---- a/media/ffvpx/libavcodec/av1_parser.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/av1_parser.c 2023-04-06 12:50:24.490176462 +0200 -@@ -20,10 +20,9 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "av1_parse.h" -+#include "libavutil/avassert.h" - #include "cbs.h" - #include "cbs_av1.h" --#include "internal.h" - #include "parser.h" - - typedef struct AV1ParseContext { -@@ -56,9 +55,9 @@ - { - AV1ParseContext *s = ctx->priv_data; - CodedBitstreamFragment *td = &s->temporal_unit; -- CodedBitstreamAV1Context *av1 = s->cbc->priv_data; -- AV1RawSequenceHeader *seq; -- AV1RawColorConfig *color; -+ const CodedBitstreamAV1Context *av1 = s->cbc->priv_data; -+ const AV1RawSequenceHeader *seq; -+ const AV1RawColorConfig *color; - int ret; - - *out_data = data; -@@ -96,9 +95,9 @@ - color = &seq->color_config; - - for (int i = 0; i < td->nb_units; i++) { -- CodedBitstreamUnit *unit = &td->units[i]; -- AV1RawOBU *obu = unit->content; -- AV1RawFrameHeader *frame; -+ const CodedBitstreamUnit *unit = &td->units[i]; -+ const AV1RawOBU *obu = unit->content; -+ const AV1RawFrameHeader *frame; - - if (unit->type == AV1_OBU_FRAME) - frame = &obu->obu.frame.header; -@@ -163,8 +162,11 @@ - avctx->color_trc = (enum AVColorTransferCharacteristic) color->transfer_characteristics; - avctx->color_range = color->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; - -- if (avctx->framerate.num) -- avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); -+ if (seq->timing_info_present_flag) { -+ const AV1RawTimingInfo *timing = &seq->timing_info; -+ av_reduce(&avctx->framerate.den, &avctx->framerate.num, -+ timing->num_units_in_display_tick, timing->time_scale, INT_MAX); -+ } - - end: - ff_cbs_fragment_reset(td); -@@ -205,33 +207,10 @@ - ff_cbs_close(&s->cbc); - } - --static int av1_parser_split(AVCodecContext *avctx, -- const uint8_t *buf, int buf_size) --{ -- AV1OBU obu; -- const uint8_t *ptr = buf, *end = buf + buf_size; -- -- while (ptr < end) { -- int len = ff_av1_extract_obu(&obu, ptr, buf_size, avctx); -- if (len < 0) -- break; -- -- if (obu.type == AV1_OBU_FRAME_HEADER || -- obu.type == AV1_OBU_FRAME) { -- return ptr - buf; -- } -- ptr += len; -- buf_size -= len; -- } -- -- return 0; --} -- --AVCodecParser ff_av1_parser = { -+const AVCodecParser ff_av1_parser = { - .codec_ids = { AV_CODEC_ID_AV1 }, - .priv_data_size = sizeof(AV1ParseContext), - .parser_init = av1_parser_init, - .parser_close = av1_parser_close, - .parser_parse = av1_parser_parse, -- .split = av1_parser_split, - }; -diff -Naur a/media/ffvpx/libavcodec/avcodec.c b/media/ffvpx/libavcodec/avcodec.c ---- a/media/ffvpx/libavcodec/avcodec.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/avcodec.c 2023-04-06 12:50:24.490176462 +0200 -@@ -26,43 +26,21 @@ - #include "config.h" - #include "libavutil/avassert.h" - #include "libavutil/avstring.h" -+#include "libavutil/bprint.h" -+#include "libavutil/channel_layout.h" -+#include "libavutil/fifo.h" - #include "libavutil/imgutils.h" - #include "libavutil/mem.h" - #include "libavutil/opt.h" - #include "libavutil/thread.h" - #include "avcodec.h" -+#include "bsf.h" -+#include "codec_internal.h" - #include "decode.h" - #include "encode.h" - #include "frame_thread_encoder.h" - #include "internal.h" - #include "thread.h" --#if CONFIG_ICONV --# include --#endif -- --#include "libavutil/ffversion.h" --const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION; -- --unsigned avcodec_version(void) --{ -- av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563); -- av_assert0(AV_CODEC_ID_ADPCM_G722==69660); -- av_assert0(AV_CODEC_ID_SRT==94216); -- av_assert0(LIBAVCODEC_VERSION_MICRO >= 100); -- -- return LIBAVCODEC_VERSION_INT; --} -- --const char *avcodec_configuration(void) --{ -- return FFMPEG_CONFIGURATION; --} -- --const char *avcodec_license(void) --{ --#define LICENSE_PREFIX "libavcodec license: " -- return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1]; --} - - int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size) - { -@@ -92,25 +70,18 @@ - - static AVMutex codec_mutex = AV_MUTEX_INITIALIZER; - --static void lock_avcodec(const AVCodec *codec) -+static void lock_avcodec(const FFCodec *codec) - { -- if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init) -+ if (codec->caps_internal & FF_CODEC_CAP_NOT_INIT_THREADSAFE && codec->init) - ff_mutex_lock(&codec_mutex); - } - --static void unlock_avcodec(const AVCodec *codec) -+static void unlock_avcodec(const FFCodec *codec) - { -- if (!(codec->caps_internal & FF_CODEC_CAP_INIT_THREADSAFE) && codec->init) -+ if (codec->caps_internal & FF_CODEC_CAP_NOT_INIT_THREADSAFE && codec->init) - ff_mutex_unlock(&codec_mutex); - } - --#if FF_API_LOCKMGR --int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) --{ -- return 0; --} --#endif -- - static int64_t get_bit_rate(AVCodecContext *ctx) - { - int64_t bit_rate; -@@ -126,7 +97,7 @@ - case AVMEDIA_TYPE_AUDIO: - bits_per_sample = av_get_bits_per_sample(ctx->codec_id); - if (bits_per_sample) { -- bit_rate = ctx->sample_rate * (int64_t)ctx->channels; -+ bit_rate = ctx->sample_rate * (int64_t)ctx->ch_layout.nb_channels; - if (bit_rate > INT64_MAX / bits_per_sample) { - bit_rate = 0; - } else -@@ -144,9 +115,8 @@ - int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options) - { - int ret = 0; -- int codec_init_ok = 0; -- AVDictionary *tmp = NULL; - AVCodecInternal *avci; -+ const FFCodec *codec2; - - if (avcodec_is_open(avctx)) - return 0; -@@ -162,14 +132,20 @@ - } - if (!codec) - codec = avctx->codec; -+ codec2 = ffcodec(codec); - -- if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE) -+ if ((avctx->codec_type != AVMEDIA_TYPE_UNKNOWN && avctx->codec_type != codec->type) || -+ (avctx->codec_id != AV_CODEC_ID_NONE && avctx->codec_id != codec->id)) { -+ av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n"); - return AVERROR(EINVAL); -+ } - -- if (options) -- av_dict_copy(&tmp, *options, 0); -+ avctx->codec_type = codec->type; -+ avctx->codec_id = codec->id; -+ avctx->codec = codec; - -- lock_avcodec(codec); -+ if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE) -+ return AVERROR(EINVAL); - - avci = av_mallocz(sizeof(*avci)); - if (!avci) { -@@ -178,33 +154,16 @@ - } - avctx->internal = avci; - --#if FF_API_OLD_ENCDEC -- avci->to_free = av_frame_alloc(); -- avci->compat_decode_frame = av_frame_alloc(); -- avci->compat_encode_packet = av_packet_alloc(); -- if (!avci->to_free || !avci->compat_decode_frame || !avci->compat_encode_packet) { -- ret = AVERROR(ENOMEM); -- goto free_and_end; -- } --#endif - avci->buffer_frame = av_frame_alloc(); - avci->buffer_pkt = av_packet_alloc(); -- avci->es.in_frame = av_frame_alloc(); -- avci->ds.in_pkt = av_packet_alloc(); -- avci->last_pkt_props = av_packet_alloc(); -- avci->pkt_props = av_fifo_alloc(sizeof(*avci->last_pkt_props)); -- if (!avci->buffer_frame || !avci->buffer_pkt || -- !avci->es.in_frame || !avci->ds.in_pkt || -- !avci->last_pkt_props || !avci->pkt_props) { -+ if (!avci->buffer_frame || !avci->buffer_pkt) { - ret = AVERROR(ENOMEM); - goto free_and_end; - } - -- avci->skip_samples_multiplier = 1; -- -- if (codec->priv_data_size > 0) { -+ if (codec2->priv_data_size > 0) { - if (!avctx->priv_data) { -- avctx->priv_data = av_mallocz(codec->priv_data_size); -+ avctx->priv_data = av_mallocz(codec2->priv_data_size); - if (!avctx->priv_data) { - ret = AVERROR(ENOMEM); - goto free_and_end; -@@ -214,12 +173,12 @@ - av_opt_set_defaults(avctx->priv_data); - } - } -- if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, &tmp)) < 0) -+ if (codec->priv_class && (ret = av_opt_set_dict(avctx->priv_data, options)) < 0) - goto free_and_end; - } else { - avctx->priv_data = NULL; - } -- if ((ret = av_opt_set_dict(avctx, &tmp)) < 0) -+ if ((ret = av_opt_set_dict(avctx, options)) < 0) - goto free_and_end; - - if (avctx->codec_whitelist && av_match_list(codec->name, avctx->codec_whitelist, ',') <= 0) { -@@ -256,44 +215,63 @@ - } - } - -- if (avctx->channels > FF_SANE_NB_CHANNELS || avctx->channels < 0) { -- av_log(avctx, AV_LOG_ERROR, "Too many or invalid channels: %d\n", avctx->channels); -+ if (avctx->sample_rate < 0) { -+ av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate); - ret = AVERROR(EINVAL); - goto free_and_end; - } -- if (av_codec_is_decoder(codec) && -- codec->type == AVMEDIA_TYPE_AUDIO && -- !(codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF) && -- avctx->channels == 0) { -- av_log(avctx, AV_LOG_ERROR, "Decoder requires channel count but channels not set\n"); -+ if (avctx->block_align < 0) { -+ av_log(avctx, AV_LOG_ERROR, "Invalid block align: %d\n", avctx->block_align); - ret = AVERROR(EINVAL); - goto free_and_end; - } - -- if (avctx->sample_rate < 0) { -- av_log(avctx, AV_LOG_ERROR, "Invalid sample rate: %d\n", avctx->sample_rate); -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ /* compat wrapper for old-style callers */ -+ if (avctx->channel_layout && !avctx->channels) -+ avctx->channels = av_popcount64(avctx->channel_layout); -+ -+ if ((avctx->channels && avctx->ch_layout.nb_channels != avctx->channels) || -+ (avctx->channel_layout && (avctx->ch_layout.order != AV_CHANNEL_ORDER_NATIVE || -+ avctx->ch_layout.u.mask != avctx->channel_layout))) { -+ av_channel_layout_uninit(&avctx->ch_layout); -+ if (avctx->channel_layout) { -+ av_channel_layout_from_mask(&avctx->ch_layout, avctx->channel_layout); -+ } else { -+ avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; -+ } -+ avctx->ch_layout.nb_channels = avctx->channels; -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ -+ /* AV_CODEC_CAP_CHANNEL_CONF is a decoder-only flag; so the code below -+ * in particular checks that nb_channels is set for all audio encoders. */ -+ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && !avctx->ch_layout.nb_channels -+ && !(codec->capabilities & AV_CODEC_CAP_CHANNEL_CONF)) { -+ av_log(avctx, AV_LOG_ERROR, "%s requires channel layout to be set\n", -+ av_codec_is_decoder(codec) ? "Decoder" : "Encoder"); - ret = AVERROR(EINVAL); - goto free_and_end; - } -- if (avctx->block_align < 0) { -- av_log(avctx, AV_LOG_ERROR, "Invalid block align: %d\n", avctx->block_align); -+ if (avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) { -+ av_log(avctx, AV_LOG_ERROR, "Invalid channel layout\n"); - ret = AVERROR(EINVAL); - goto free_and_end; - } -- -- avctx->codec = codec; -- if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) && -- avctx->codec_id == AV_CODEC_ID_NONE) { -- avctx->codec_type = codec->type; -- avctx->codec_id = codec->id; -- } -- if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type -- && avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) { -- av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n"); -+ if (avctx->ch_layout.nb_channels > FF_SANE_NB_CHANNELS) { -+ av_log(avctx, AV_LOG_ERROR, "Too many channels: %d\n", avctx->ch_layout.nb_channels); - ret = AVERROR(EINVAL); - goto free_and_end; - } -- avctx->frame_number = 0; -+ -+ avctx->frame_num = 0; -+#if FF_API_AVCTX_FRAME_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS -+ avctx->frame_number = avctx->frame_num; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id); - - if ((avctx->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) && -@@ -325,35 +303,30 @@ - if (ret < 0) - goto free_and_end; - -- if (!HAVE_THREADS) -- av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n"); -- -- if (CONFIG_FRAME_THREAD_ENCODER && av_codec_is_encoder(avctx->codec)) { -- unlock_avcodec(codec); //we will instantiate a few encoders thus kick the counter to prevent false detection of a problem -- ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL); -- lock_avcodec(codec); -- if (ret < 0) -- goto free_and_end; -- } -- -- if (HAVE_THREADS -- && !(avci->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))) { -+ if (HAVE_THREADS && !avci->frame_thread_encoder) { -+ /* Frame-threaded decoders call FFCodec.init for their child contexts. */ -+ lock_avcodec(codec2); - ret = ff_thread_init(avctx); -+ unlock_avcodec(codec2); - if (ret < 0) { - goto free_and_end; - } - } -- if (!HAVE_THREADS && !(codec->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) -+ if (!HAVE_THREADS && !(codec2->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) - avctx->thread_count = 1; - -- if ( avctx->codec->init && (!(avctx->active_thread_type&FF_THREAD_FRAME) -- || avci->frame_thread_encoder)) { -- ret = avctx->codec->init(avctx); -- if (ret < 0) { -- codec_init_ok = -1; -- goto free_and_end; -+ if (!(avctx->active_thread_type & FF_THREAD_FRAME) || -+ avci->frame_thread_encoder) { -+ if (codec2->init) { -+ lock_avcodec(codec2); -+ ret = codec2->init(avctx); -+ unlock_avcodec(codec2); -+ if (ret < 0) { -+ avci->needs_close = codec2->caps_internal & FF_CODEC_CAP_INIT_CLEANUP; -+ goto free_and_end; -+ } - } -- codec_init_ok = 1; -+ avci->needs_close = 1; - } - - ret=0; -@@ -361,23 +334,19 @@ - if (av_codec_is_decoder(avctx->codec)) { - if (!avctx->bit_rate) - avctx->bit_rate = get_bit_rate(avctx); -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ /* update the deprecated fields for old-style callers */ -+ avctx->channels = avctx->ch_layout.nb_channels; -+ avctx->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? -+ avctx->ch_layout.u.mask : 0; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ - /* validate channel layout from the decoder */ -- if (avctx->channel_layout) { -- int channels = av_get_channel_layout_nb_channels(avctx->channel_layout); -- if (!avctx->channels) -- avctx->channels = channels; -- else if (channels != avctx->channels) { -- char buf[512]; -- av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout); -- av_log(avctx, AV_LOG_WARNING, -- "Channel layout '%s' with %d channels does not match specified number of channels %d: " -- "ignoring specified channel layout\n", -- buf, channels, avctx->channels); -- avctx->channel_layout = 0; -- } -- } -- if (avctx->channels && avctx->channels < 0 || -- avctx->channels > FF_SANE_NB_CHANNELS) { -+ if ((avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) || -+ avctx->ch_layout.nb_channels > FF_SANE_NB_CHANNELS) { - ret = AVERROR(EINVAL); - goto free_and_end; - } -@@ -385,106 +354,15 @@ - ret = AVERROR(EINVAL); - goto free_and_end; - } -- if (avctx->sub_charenc) { -- if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) { -- av_log(avctx, AV_LOG_ERROR, "Character encoding is only " -- "supported with subtitles codecs\n"); -- ret = AVERROR(EINVAL); -- goto free_and_end; -- } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) { -- av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, " -- "subtitles character encoding will be ignored\n", -- avctx->codec_descriptor->name); -- avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING; -- } else { -- /* input character encoding is set for a text based subtitle -- * codec at this point */ -- if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC) -- avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER; -- -- if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) { --#if CONFIG_ICONV -- iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc); -- if (cd == (iconv_t)-1) { -- ret = AVERROR(errno); -- av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context " -- "with input character encoding \"%s\"\n", avctx->sub_charenc); -- goto free_and_end; -- } -- iconv_close(cd); --#else -- av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles " -- "conversion needs a libavcodec built with iconv support " -- "for this codec\n"); -- ret = AVERROR(ENOSYS); -- goto free_and_end; --#endif -- } -- } -- } -- --#if FF_API_AVCTX_TIMEBASE -- if (avctx->framerate.num > 0 && avctx->framerate.den > 0) -- avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); --#endif - } -- if (codec->priv_data_size > 0 && avctx->priv_data && codec->priv_class) { -+ if (codec->priv_class) - av_assert0(*(const AVClass **)avctx->priv_data == codec->priv_class); -- } - - end: -- unlock_avcodec(codec); -- if (options) { -- av_dict_free(options); -- *options = tmp; -- } - - return ret; - free_and_end: -- if (avctx->codec && avctx->codec->close && -- (codec_init_ok > 0 || (codec_init_ok < 0 && -- avctx->codec->caps_internal & FF_CODEC_CAP_INIT_CLEANUP))) -- avctx->codec->close(avctx); -- -- if (HAVE_THREADS && avci->thread_ctx) -- ff_thread_free(avctx); -- -- if (codec->priv_class && avctx->priv_data) -- av_opt_free(avctx->priv_data); -- av_opt_free(avctx); -- -- if (av_codec_is_encoder(avctx->codec)) { --#if FF_API_CODED_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- av_frame_free(&avctx->coded_frame); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- av_freep(&avctx->extradata); -- avctx->extradata_size = 0; -- } -- -- av_dict_free(&tmp); -- av_freep(&avctx->priv_data); -- av_freep(&avctx->subtitle_header); -- --#if FF_API_OLD_ENCDEC -- av_frame_free(&avci->to_free); -- av_frame_free(&avci->compat_decode_frame); -- av_packet_free(&avci->compat_encode_packet); --#endif -- av_frame_free(&avci->buffer_frame); -- av_packet_free(&avci->buffer_pkt); -- av_packet_free(&avci->last_pkt_props); -- av_fifo_freep(&avci->pkt_props); -- -- av_packet_free(&avci->ds.in_pkt); -- av_frame_free(&avci->es.in_frame); -- av_bsf_free(&avci->bsf); -- -- av_buffer_unref(&avci->pool); -- av_freep(&avci); -- avctx->internal = NULL; -- avctx->codec = NULL; -+ avcodec_close(avctx); - goto end; - } - -@@ -502,50 +380,30 @@ - "that doesn't support it\n"); - return; - } -+ if (avci->in_frame) -+ av_frame_unref(avci->in_frame); -+ if (avci->recon_frame) -+ av_frame_unref(avci->recon_frame); -+ } else { -+ av_packet_unref(avci->last_pkt_props); -+ av_packet_unref(avci->in_pkt); - -- // We haven't implemented flushing for frame-threaded encoders. -- av_assert0(!(caps & AV_CODEC_CAP_FRAME_THREADS)); -+ avctx->pts_correction_last_pts = -+ avctx->pts_correction_last_dts = INT64_MIN; -+ -+ av_bsf_flush(avci->bsf); - } - - avci->draining = 0; - avci->draining_done = 0; - avci->nb_draining_errors = 0; - av_frame_unref(avci->buffer_frame); --#if FF_API_OLD_ENCDEC -- av_frame_unref(avci->compat_decode_frame); -- av_packet_unref(avci->compat_encode_packet); --#endif - av_packet_unref(avci->buffer_pkt); - -- av_packet_unref(avci->last_pkt_props); -- while (av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) { -- av_fifo_generic_read(avci->pkt_props, -- avci->last_pkt_props, sizeof(*avci->last_pkt_props), -- NULL); -- av_packet_unref(avci->last_pkt_props); -- } -- av_fifo_reset(avci->pkt_props); -- -- av_frame_unref(avci->es.in_frame); -- av_packet_unref(avci->ds.in_pkt); -- - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) - ff_thread_flush(avctx); -- else if (avctx->codec->flush) -- avctx->codec->flush(avctx); -- -- avctx->pts_correction_last_pts = -- avctx->pts_correction_last_dts = INT64_MIN; -- -- if (av_codec_is_decoder(avctx->codec)) -- av_bsf_flush(avci->bsf); -- --#if FF_API_OLD_ENCDEC --FF_DISABLE_DEPRECATION_WARNINGS -- if (!avctx->refcounted_frames) -- av_frame_unref(avci->to_free); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -+ else if (ffcodec(avctx->codec)->flush) -+ ffcodec(avctx->codec)->flush(avctx); - } - - void avsubtitle_free(AVSubtitle *sub) -@@ -553,12 +411,15 @@ - int i; - - for (i = 0; i < sub->num_rects; i++) { -- av_freep(&sub->rects[i]->data[0]); -- av_freep(&sub->rects[i]->data[1]); -- av_freep(&sub->rects[i]->data[2]); -- av_freep(&sub->rects[i]->data[3]); -- av_freep(&sub->rects[i]->text); -- av_freep(&sub->rects[i]->ass); -+ AVSubtitleRect *const rect = sub->rects[i]; -+ -+ av_freep(&rect->data[0]); -+ av_freep(&rect->data[1]); -+ av_freep(&rect->data[2]); -+ av_freep(&rect->data[3]); -+ av_freep(&rect->text); -+ av_freep(&rect->ass); -+ - av_freep(&sub->rects[i]); - } - -@@ -575,45 +436,39 @@ - return 0; - - if (avcodec_is_open(avctx)) { -+ AVCodecInternal *avci = avctx->internal; -+ - if (CONFIG_FRAME_THREAD_ENCODER && -- avctx->internal->frame_thread_encoder && avctx->thread_count > 1) { -+ avci->frame_thread_encoder && avctx->thread_count > 1) { - ff_frame_thread_encoder_free(avctx); - } -- if (HAVE_THREADS && avctx->internal->thread_ctx) -+ if (HAVE_THREADS && avci->thread_ctx) - ff_thread_free(avctx); -- if (avctx->codec && avctx->codec->close) -- avctx->codec->close(avctx); -- avctx->internal->byte_buffer_size = 0; -- av_freep(&avctx->internal->byte_buffer); --#if FF_API_OLD_ENCDEC -- av_frame_free(&avctx->internal->to_free); -- av_frame_free(&avctx->internal->compat_decode_frame); -- av_packet_free(&avctx->internal->compat_encode_packet); --#endif -- av_frame_free(&avctx->internal->buffer_frame); -- av_packet_free(&avctx->internal->buffer_pkt); -- av_packet_unref(avctx->internal->last_pkt_props); -- while (av_fifo_size(avctx->internal->pkt_props) >= -- sizeof(*avctx->internal->last_pkt_props)) { -- av_fifo_generic_read(avctx->internal->pkt_props, -- avctx->internal->last_pkt_props, -- sizeof(*avctx->internal->last_pkt_props), -- NULL); -- av_packet_unref(avctx->internal->last_pkt_props); -- } -- av_packet_free(&avctx->internal->last_pkt_props); -- av_fifo_freep(&avctx->internal->pkt_props); -- -- av_packet_free(&avctx->internal->ds.in_pkt); -- av_frame_free(&avctx->internal->es.in_frame); -+ if (avci->needs_close && ffcodec(avctx->codec)->close) -+ ffcodec(avctx->codec)->close(avctx); -+ avci->byte_buffer_size = 0; -+ av_freep(&avci->byte_buffer); -+ av_frame_free(&avci->buffer_frame); -+ av_packet_free(&avci->buffer_pkt); -+ av_packet_free(&avci->last_pkt_props); -+ -+ av_packet_free(&avci->in_pkt); -+ av_frame_free(&avci->in_frame); -+ av_frame_free(&avci->recon_frame); - -- av_buffer_unref(&avctx->internal->pool); -+ av_buffer_unref(&avci->pool); - - if (avctx->hwaccel && avctx->hwaccel->uninit) - avctx->hwaccel->uninit(avctx); -- av_freep(&avctx->internal->hwaccel_priv_data); -+ av_freep(&avci->hwaccel_priv_data); -+ -+ av_bsf_free(&avci->bsf); -+ -+ av_channel_layout_uninit(&avci->initial_ch_layout); - -- av_bsf_free(&avctx->internal->bsf); -+#if CONFIG_LCMS2 -+ ff_icc_context_uninit(&avci->icc); -+#endif - - av_freep(&avctx->internal); - } -@@ -632,12 +487,10 @@ - av_freep(&avctx->priv_data); - if (av_codec_is_encoder(avctx->codec)) { - av_freep(&avctx->extradata); --#if FF_API_CODED_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- av_frame_free(&avctx->coded_frame); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- } -+ avctx->extradata_size = 0; -+ } else if (av_codec_is_decoder(avctx->codec)) -+ av_freep(&avctx->subtitle_header); -+ - avctx->codec = NULL; - avctx->active_thread_type = 0; - -@@ -654,6 +507,7 @@ - const char *codec_type; - const char *codec_name; - const char *profile = NULL; -+ AVBPrint bprint; - int64_t bitrate; - int new_line = 0; - AVRational display_aspect_ratio; -@@ -662,46 +516,54 @@ - - if (!buf || buf_size <= 0) - return; -+ av_bprint_init_for_buffer(&bprint, buf, buf_size); - codec_type = av_get_media_type_string(enc->codec_type); - codec_name = avcodec_get_name(enc->codec_id); - profile = avcodec_profile_name(enc->codec_id, enc->profile); - -- snprintf(buf, buf_size, "%s: %s", codec_type ? codec_type : "unknown", -- codec_name); -+ av_bprintf(&bprint, "%s: %s", codec_type ? codec_type : "unknown", -+ codec_name); - buf[0] ^= 'a' ^ 'A'; /* first letter in uppercase */ - - if (enc->codec && strcmp(enc->codec->name, codec_name)) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", enc->codec->name); -+ av_bprintf(&bprint, " (%s)", enc->codec->name); - - if (profile) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s)", profile); -+ av_bprintf(&bprint, " (%s)", profile); - if ( enc->codec_type == AVMEDIA_TYPE_VIDEO - && av_log_get_level() >= AV_LOG_VERBOSE - && enc->refs) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", %d reference frame%s", -- enc->refs, enc->refs > 1 ? "s" : ""); -+ av_bprintf(&bprint, ", %d reference frame%s", -+ enc->refs, enc->refs > 1 ? "s" : ""); - - if (enc->codec_tag) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s / 0x%04X)", -- av_fourcc2str(enc->codec_tag), enc->codec_tag); -+ av_bprintf(&bprint, " (%s / 0x%04X)", -+ av_fourcc2str(enc->codec_tag), enc->codec_tag); - - switch (enc->codec_type) { - case AVMEDIA_TYPE_VIDEO: - { -- char detail[256] = "("; -+ unsigned len; - -- av_strlcat(buf, separator, buf_size); -+ av_bprintf(&bprint, "%s%s", separator, -+ enc->pix_fmt == AV_PIX_FMT_NONE ? "none" : -+ unknown_if_null(av_get_pix_fmt_name(enc->pix_fmt))); -+ -+ av_bprint_chars(&bprint, '(', 1); -+ len = bprint.len; -+ -+ /* The following check ensures that '(' has been written -+ * and therefore allows us to erase it if it turns out -+ * to be unnecessary. */ -+ if (!av_bprint_is_complete(&bprint)) -+ return; - -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- "%s", enc->pix_fmt == AV_PIX_FMT_NONE ? "none" : -- unknown_if_null(av_get_pix_fmt_name(enc->pix_fmt))); - if (enc->bits_per_raw_sample && enc->pix_fmt != AV_PIX_FMT_NONE && - enc->bits_per_raw_sample < av_pix_fmt_desc_get(enc->pix_fmt)->comp[0].depth) -- av_strlcatf(detail, sizeof(detail), "%d bpc, ", enc->bits_per_raw_sample); -+ av_bprintf(&bprint, "%d bpc, ", enc->bits_per_raw_sample); - if (enc->color_range != AVCOL_RANGE_UNSPECIFIED && - (str = av_color_range_name(enc->color_range))) -- av_strlcatf(detail, sizeof(detail), "%s, ", str); -+ av_bprintf(&bprint, "%s, ", str); - - if (enc->colorspace != AVCOL_SPC_UNSPECIFIED || - enc->color_primaries != AVCOL_PRI_UNSPECIFIED || -@@ -711,10 +573,9 @@ - const char *trc = unknown_if_null(av_color_transfer_name(enc->color_trc)); - if (strcmp(col, pri) || strcmp(col, trc)) { - new_line = 1; -- av_strlcatf(detail, sizeof(detail), "%s/%s/%s, ", -- col, pri, trc); -+ av_bprintf(&bprint, "%s/%s/%s, ", col, pri, trc); - } else -- av_strlcatf(detail, sizeof(detail), "%s, ", col); -+ av_bprintf(&bprint, "%s, ", col); - } - - if (enc->field_order != AV_FIELD_UNKNOWN) { -@@ -728,120 +589,115 @@ - else if (enc->field_order == AV_FIELD_BT) - field_order = "bottom coded first (swapped)"; - -- av_strlcatf(detail, sizeof(detail), "%s, ", field_order); -+ av_bprintf(&bprint, "%s, ", field_order); - } - - if (av_log_get_level() >= AV_LOG_VERBOSE && - enc->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED && - (str = av_chroma_location_name(enc->chroma_sample_location))) -- av_strlcatf(detail, sizeof(detail), "%s, ", str); -+ av_bprintf(&bprint, "%s, ", str); - -- if (strlen(detail) > 1) { -- detail[strlen(detail) - 2] = 0; -- av_strlcatf(buf, buf_size, "%s)", detail); -+ if (len == bprint.len) { -+ bprint.str[len - 1] = '\0'; -+ bprint.len--; -+ } else { -+ if (bprint.len - 2 < bprint.size) { -+ /* Erase the last ", " */ -+ bprint.len -= 2; -+ bprint.str[bprint.len] = '\0'; -+ } -+ av_bprint_chars(&bprint, ')', 1); - } - } - - if (enc->width) { -- av_strlcat(buf, new_line ? separator : ", ", buf_size); -- -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- "%dx%d", -- enc->width, enc->height); -+ av_bprintf(&bprint, "%s%dx%d", new_line ? separator : ", ", -+ enc->width, enc->height); - - if (av_log_get_level() >= AV_LOG_VERBOSE && - (enc->width != enc->coded_width || - enc->height != enc->coded_height)) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- " (%dx%d)", enc->coded_width, enc->coded_height); -+ av_bprintf(&bprint, " (%dx%d)", -+ enc->coded_width, enc->coded_height); - - if (enc->sample_aspect_ratio.num) { - av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, - enc->width * (int64_t)enc->sample_aspect_ratio.num, - enc->height * (int64_t)enc->sample_aspect_ratio.den, - 1024 * 1024); -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- " [SAR %d:%d DAR %d:%d]", -+ av_bprintf(&bprint, " [SAR %d:%d DAR %d:%d]", - enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den, - display_aspect_ratio.num, display_aspect_ratio.den); - } - if (av_log_get_level() >= AV_LOG_DEBUG) { - int g = av_gcd(enc->time_base.num, enc->time_base.den); -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", %d/%d", -- enc->time_base.num / g, enc->time_base.den / g); -+ av_bprintf(&bprint, ", %d/%d", -+ enc->time_base.num / g, enc->time_base.den / g); - } - } - if (encode) { -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", q=%d-%d", enc->qmin, enc->qmax); -+ av_bprintf(&bprint, ", q=%d-%d", enc->qmin, enc->qmax); - } else { - if (enc->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", Closed Captions"); -+ av_bprintf(&bprint, ", Closed Captions"); -+ if (enc->properties & FF_CODEC_PROPERTY_FILM_GRAIN) -+ av_bprintf(&bprint, ", Film Grain"); - if (enc->properties & FF_CODEC_PROPERTY_LOSSLESS) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", lossless"); -+ av_bprintf(&bprint, ", lossless"); - } - break; - case AVMEDIA_TYPE_AUDIO: -- av_strlcat(buf, separator, buf_size); -+ av_bprintf(&bprint, "%s", separator); - - if (enc->sample_rate) { -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- "%d Hz, ", enc->sample_rate); -+ av_bprintf(&bprint, "%d Hz, ", enc->sample_rate); -+ } -+ { -+ char buf[512]; -+ int ret = av_channel_layout_describe(&enc->ch_layout, buf, sizeof(buf)); -+ if (ret >= 0) -+ av_bprintf(&bprint, "%s", buf); - } -- av_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout); - if (enc->sample_fmt != AV_SAMPLE_FMT_NONE && - (str = av_get_sample_fmt_name(enc->sample_fmt))) { -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", %s", str); -+ av_bprintf(&bprint, ", %s", str); - } - if ( enc->bits_per_raw_sample > 0 - && enc->bits_per_raw_sample != av_get_bytes_per_sample(enc->sample_fmt) * 8) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- " (%d bit)", enc->bits_per_raw_sample); -+ av_bprintf(&bprint, " (%d bit)", enc->bits_per_raw_sample); - if (av_log_get_level() >= AV_LOG_VERBOSE) { - if (enc->initial_padding) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", delay %d", enc->initial_padding); -+ av_bprintf(&bprint, ", delay %d", enc->initial_padding); - if (enc->trailing_padding) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", padding %d", enc->trailing_padding); -+ av_bprintf(&bprint, ", padding %d", enc->trailing_padding); - } - break; - case AVMEDIA_TYPE_DATA: - if (av_log_get_level() >= AV_LOG_DEBUG) { - int g = av_gcd(enc->time_base.num, enc->time_base.den); - if (g) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", %d/%d", -- enc->time_base.num / g, enc->time_base.den / g); -+ av_bprintf(&bprint, ", %d/%d", -+ enc->time_base.num / g, enc->time_base.den / g); - } - break; - case AVMEDIA_TYPE_SUBTITLE: - if (enc->width) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", %dx%d", enc->width, enc->height); -+ av_bprintf(&bprint, ", %dx%d", enc->width, enc->height); - break; - default: - return; - } - if (encode) { - if (enc->flags & AV_CODEC_FLAG_PASS1) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", pass 1"); -+ av_bprintf(&bprint, ", pass 1"); - if (enc->flags & AV_CODEC_FLAG_PASS2) -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", pass 2"); -+ av_bprintf(&bprint, ", pass 2"); - } - bitrate = get_bit_rate(enc); - if (bitrate != 0) { -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", %"PRId64" kb/s", bitrate / 1000); -+ av_bprintf(&bprint, ", %"PRId64" kb/s", bitrate / 1000); - } else if (enc->rc_max_rate > 0) { -- snprintf(buf + strlen(buf), buf_size - strlen(buf), -- ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000); -+ av_bprintf(&bprint, ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000); - } - } - -@@ -849,3 +705,12 @@ - { - return !!s->internal; - } -+ -+int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) -+{ -+ av_frame_unref(frame); -+ -+ if (av_codec_is_decoder(avctx->codec)) -+ return ff_decode_receive_frame(avctx, frame); -+ return ff_encode_receive_frame(avctx, frame); -+} -diff -Naur a/media/ffvpx/libavcodec/avcodec.h b/media/ffvpx/libavcodec/avcodec.h ---- a/media/ffvpx/libavcodec/avcodec.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/avcodec.h 2023-04-06 12:50:24.491176503 +0200 -@@ -27,27 +27,29 @@ - * Libavcodec external API header - */ - --#include - #include "libavutil/samplefmt.h" - #include "libavutil/attributes.h" - #include "libavutil/avutil.h" - #include "libavutil/buffer.h" --#include "libavutil/cpu.h" --#include "libavutil/channel_layout.h" - #include "libavutil/dict.h" - #include "libavutil/frame.h" --#include "libavutil/hwcontext.h" - #include "libavutil/log.h" - #include "libavutil/pixfmt.h" - #include "libavutil/rational.h" - --#include "bsf.h" - #include "codec.h" - #include "codec_desc.h" - #include "codec_par.h" - #include "codec_id.h" -+#include "defs.h" - #include "packet.h" -+#include "version_major.h" -+#ifndef HAVE_AV_CONFIG_H -+/* When included as part of the ffmpeg build, only include the major version -+ * to avoid unnecessary rebuilds. When included externally, keep including -+ * the full version information. */ - #include "version.h" -+#endif - - /** - * @defgroup libavc libavcodec -@@ -155,29 +157,6 @@ - * at least will not fail with AVERROR(EAGAIN). In general, no codec will - * permit unlimited buffering of input or output. - * -- * This API replaces the following legacy functions: -- * - avcodec_decode_video2() and avcodec_decode_audio4(): -- * Use avcodec_send_packet() to feed input to the decoder, then use -- * avcodec_receive_frame() to receive decoded frames after each packet. -- * Unlike with the old video decoding API, multiple frames might result from -- * a packet. For audio, splitting the input packet into frames by partially -- * decoding packets becomes transparent to the API user. You never need to -- * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then -- * no data was read from the packet). -- * Additionally, sending a flush/draining packet is required only once. -- * - avcodec_encode_video2()/avcodec_encode_audio2(): -- * Use avcodec_send_frame() to feed input to the encoder, then use -- * avcodec_receive_packet() to receive encoded packets. -- * Providing user-allocated buffers for avcodec_receive_packet() is not -- * possible. -- * - The new API does not handle subtitles yet. -- * -- * Mixing new and old function calls on the same AVCodecContext is not allowed, -- * and will result in undefined behavior. -- * -- * Some codecs might require using the new API; using the old API will return -- * an error when calling it. All codecs support the new API. -- * - * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This - * would be an invalid state, which could put the codec user into an endless - * loop. The API has no concept of time either: it cannot happen that trying to -@@ -205,16 +184,6 @@ - */ - - /** -- * @ingroup lavc_decoding -- * Required number of additionally allocated bytes at the end of the input bitstream for decoding. -- * This is mainly needed because some optimized bitstream readers read -- * 32 or 64 bit at once and could read over the end.
-- * Note: If the first 23 bits of the additional bytes are not 0, then damaged -- * MPEG bitstreams could cause overread and segfault. -- */ --#define AV_INPUT_BUFFER_PADDING_SIZE 64 -- --/** - * @ingroup lavc_encoding - * minimum encoding buffer size - * Used to avoid some checks during header writing. -@@ -222,34 +191,6 @@ - #define AV_INPUT_BUFFER_MIN_SIZE 16384 - - /** -- * @ingroup lavc_decoding -- */ --enum AVDiscard{ -- /* We leave some space between them for extensions (drop some -- * keyframes for intra-only or drop just some bidir frames). */ -- AVDISCARD_NONE =-16, ///< discard nothing -- AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi -- AVDISCARD_NONREF = 8, ///< discard all non reference -- AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames -- AVDISCARD_NONINTRA= 24, ///< discard all non intra frames -- AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes -- AVDISCARD_ALL = 48, ///< discard all --}; -- --enum AVAudioServiceType { -- AV_AUDIO_SERVICE_TYPE_MAIN = 0, -- AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, -- AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, -- AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, -- AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, -- AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, -- AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, -- AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, -- AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, -- AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI --}; -- --/** - * @ingroup lavc_encoding - */ - typedef struct RcOverride{ -@@ -291,6 +232,58 @@ - */ - #define AV_CODEC_FLAG_DROPCHANGED (1 << 5) - /** -+ * Request the encoder to output reconstructed frames, i.e.\ frames that would -+ * be produced by decoding the encoded bistream. These frames may be retrieved -+ * by calling avcodec_receive_frame() immediately after a successful call to -+ * avcodec_receive_packet(). -+ * -+ * Should only be used with encoders flagged with the -+ * @ref AV_CODEC_CAP_ENCODER_RECON_FRAME capability. -+ */ -+#define AV_CODEC_FLAG_RECON_FRAME (1 << 6) -+/** -+ * @par decoding -+ * Request the decoder to propagate each packets AVPacket.opaque and -+ * AVPacket.opaque_ref to its corresponding output AVFrame. -+ * -+ * @par encoding: -+ * Request the encoder to propagate each frame's AVFrame.opaque and -+ * AVFrame.opaque_ref values to its corresponding output AVPacket. -+ * -+ * @par -+ * May only be set on encoders that have the -+ * @ref AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability flag. -+ * -+ * @note -+ * While in typical cases one input frame produces exactly one output packet -+ * (perhaps after a delay), in general the mapping of frames to packets is -+ * M-to-N, so -+ * - Any number of input frames may be associated with any given output packet. -+ * This includes zero - e.g. some encoders may output packets that carry only -+ * metadata about the whole stream. -+ * - A given input frame may be associated with any number of output packets. -+ * Again this includes zero - e.g. some encoders may drop frames under certain -+ * conditions. -+ * . -+ * This implies that when using this flag, the caller must NOT assume that -+ * - a given input frame's opaques will necessarily appear on some output packet; -+ * - every output packet will have some non-NULL opaque value. -+ * . -+ * When an output packet contains multiple frames, the opaque values will be -+ * taken from the first of those. -+ * -+ * @note -+ * The converse holds for decoders, with frames and packets switched. -+ */ -+#define AV_CODEC_FLAG_COPY_OPAQUE (1 << 7) -+/** -+ * Signal to the encoder that the values of AVFrame.duration are valid and -+ * should be used (typically for transferring them to output packets). -+ * -+ * If this flag is not set, frame durations are ignored. -+ */ -+#define AV_CODEC_FLAG_FRAME_DURATION (1 << 8) -+/** - * Use internal 2pass ratecontrol in first pass mode. - */ - #define AV_CODEC_FLAG_PASS1 (1 << 9) -@@ -311,11 +304,6 @@ - */ - #define AV_CODEC_FLAG_PSNR (1 << 15) - /** -- * Input bitstream might be truncated at a random location -- * instead of only at frame boundaries. -- */ --#define AV_CODEC_FLAG_TRUNCATED (1 << 16) --/** - * Use interlaced DCT. - */ - #define AV_CODEC_FLAG_INTERLACED_DCT (1 << 18) -@@ -356,11 +344,6 @@ - #define AV_CODEC_FLAG2_LOCAL_HEADER (1 << 3) - - /** -- * timecode is in drop frame format. DEPRECATED!!!! -- */ --#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13) -- --/** - * Input bitstream might be truncated at a packet boundaries - * instead of only at frame boundaries. - */ -@@ -386,13 +369,12 @@ - * Do not reset ASS ReadOrder field on flush (subtitles decoding) - */ - #define AV_CODEC_FLAG2_RO_FLUSH_NOOP (1 << 30) -- --/* Unsupported options : -- * Syntax Arithmetic coding (SAC) -- * Reference Picture Selection -- * Independent Segment Decoding */ --/* /Fx */ --/* codec capabilities */ -+/** -+ * Generate/parse ICC profiles on encode/decode, as appropriate for the type of -+ * file. No effect on codecs which cannot contain embedded ICC profiles, or -+ * when compiled without support for lcms2. -+ */ -+#define AV_CODEC_FLAG2_ICC_PROFILES (1U << 31) - - /* Exported side data. - These flags can be passed in AVCodecContext.export_side_data before initialization. -@@ -417,98 +399,6 @@ - #define AV_CODEC_EXPORT_DATA_FILM_GRAIN (1 << 3) - - /** -- * Pan Scan area. -- * This specifies the area which should be displayed. -- * Note there may be multiple such areas for one frame. -- */ --typedef struct AVPanScan { -- /** -- * id -- * - encoding: Set by user. -- * - decoding: Set by libavcodec. -- */ -- int id; -- -- /** -- * width and height in 1/16 pel -- * - encoding: Set by user. -- * - decoding: Set by libavcodec. -- */ -- int width; -- int height; -- -- /** -- * position of the top left corner in 1/16 pel for up to 3 fields/frames -- * - encoding: Set by user. -- * - decoding: Set by libavcodec. -- */ -- int16_t position[3][2]; --} AVPanScan; -- --/** -- * This structure describes the bitrate properties of an encoded bitstream. It -- * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD -- * parameters for H.264/HEVC. -- */ --typedef struct AVCPBProperties { -- /** -- * Maximum bitrate of the stream, in bits per second. -- * Zero if unknown or unspecified. -- */ --#if FF_API_UNSANITIZED_BITRATES -- int max_bitrate; --#else -- int64_t max_bitrate; --#endif -- /** -- * Minimum bitrate of the stream, in bits per second. -- * Zero if unknown or unspecified. -- */ --#if FF_API_UNSANITIZED_BITRATES -- int min_bitrate; --#else -- int64_t min_bitrate; --#endif -- /** -- * Average bitrate of the stream, in bits per second. -- * Zero if unknown or unspecified. -- */ --#if FF_API_UNSANITIZED_BITRATES -- int avg_bitrate; --#else -- int64_t avg_bitrate; --#endif -- -- /** -- * The size of the buffer to which the ratecontrol is applied, in bits. -- * Zero if unknown or unspecified. -- */ -- int buffer_size; -- -- /** -- * The delay between the time the packet this structure is associated with -- * is received and the time when it should be decoded, in periods of a 27MHz -- * clock. -- * -- * UINT64_MAX when unknown or unspecified. -- */ -- uint64_t vbv_delay; --} AVCPBProperties; -- --/** -- * This structure supplies correlation between a packet timestamp and a wall clock -- * production time. The definition follows the Producer Reference Time ('prft') -- * as defined in ISO/IEC 14496-12 -- */ --typedef struct AVProducerReferenceTime { -- /** -- * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). -- */ -- int64_t wallclock; -- int flags; --} AVProducerReferenceTime; -- --/** - * The decoder will keep a reference to the frame and may reuse it later. - */ - #define AV_GET_BUFFER_FLAG_REF (1 << 0) -@@ -653,8 +543,7 @@ - * (fixed_vop_rate == 0 implies that it is different from the framerate) - * - * - encoding: MUST be set by user. -- * - decoding: the use of this field for decoding is deprecated. -- * Use framerate instead. -+ * - decoding: unused. - */ - AVRational time_base; - -@@ -697,7 +586,7 @@ - * picture width / height. - * - * @note Those fields may not match the values of the last -- * AVFrame output by avcodec_decode_video2 due frame -+ * AVFrame output by avcodec_receive_frame() due frame - * reordering. - * - * - encoding: MUST be set by user. -@@ -773,17 +662,29 @@ - int y, int type, int height); - - /** -- * callback to negotiate the pixelFormat -- * @param fmt is the list of formats which are supported by the codec, -- * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. -- * The first is always the native one. -- * @note The callback may be called again immediately if initialization for -- * the selected (hardware-accelerated) pixel format failed. -- * @warning Behavior is undefined if the callback returns a value not -- * in the fmt list of formats. -- * @return the chosen format -- * - encoding: unused -- * - decoding: Set by user, if not set the native format will be chosen. -+ * Callback to negotiate the pixel format. Decoding only, may be set by the -+ * caller before avcodec_open2(). -+ * -+ * Called by some decoders to select the pixel format that will be used for -+ * the output frames. This is mainly used to set up hardware acceleration, -+ * then the provided format list contains the corresponding hwaccel pixel -+ * formats alongside the "software" one. The software pixel format may also -+ * be retrieved from \ref sw_pix_fmt. -+ * -+ * This callback will be called when the coded frame properties (such as -+ * resolution, pixel format, etc.) change and more than one output format is -+ * supported for those new properties. If a hardware pixel format is chosen -+ * and initialization for it fails, the callback may be called again -+ * immediately. -+ * -+ * This callback may be called from different threads if the decoder is -+ * multi-threaded, but not from more than one thread simultaneously. -+ * -+ * @param fmt list of formats which may be used in the current -+ * configuration, terminated by AV_PIX_FMT_NONE. -+ * @warning Behavior is undefined if the callback returns a value other -+ * than one of the formats in fmt or AV_PIX_FMT_NONE. -+ * @return the chosen format or AV_PIX_FMT_NONE - */ - enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - -@@ -804,12 +705,6 @@ - */ - float b_quant_factor; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int b_frame_strategy; --#endif -- - /** - * qscale offset between IP and B-frames - * - encoding: Set by user. -@@ -825,12 +720,6 @@ - */ - int has_b_frames; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int mpeg_quant; --#endif -- - /** - * qscale factor between P- and I-frames - * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset). -@@ -889,15 +778,6 @@ - */ - int slice_count; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int prediction_method; --#define FF_PRED_LEFT 0 --#define FF_PRED_PLANE 1 --#define FF_PRED_MEDIAN 2 --#endif -- - /** - * slice offsets in the frame in bytes - * - encoding: Set/allocated by libavcodec. -@@ -970,12 +850,6 @@ - */ - int last_predictor_count; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int pre_me; --#endif -- - /** - * motion estimation prepass comparison function - * - encoding: Set by user. -@@ -1044,16 +918,6 @@ - */ - uint16_t *inter_matrix; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int scenechange_threshold; -- -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int noise_reduction; --#endif -- - /** - * precision of the intra DC coefficient - 8 - * - encoding: Set by user. -@@ -1089,26 +953,12 @@ - */ - int mb_lmax; - --#if FF_API_PRIVATE_OPT -- /** -- * @deprecated use encoder private options instead -- */ -- attribute_deprecated -- int me_penalty_compensation; --#endif -- - /** - * - encoding: Set by user. - * - decoding: unused - */ - int bidir_refine; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int brd_scale; --#endif -- - /** - * minimum GOP size - * - encoding: Set by user. -@@ -1123,12 +973,6 @@ - */ - int refs; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int chromaoffset; --#endif -- - /** - * Note: Value depends upon the compare function used for fullpel ME. - * - encoding: Set by user. -@@ -1136,12 +980,6 @@ - */ - int mv0_threshold; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int b_sensitivity; --#endif -- - /** - * Chromaticity coordinates of the source primaries. - * - encoding: Set by user -@@ -1194,7 +1032,15 @@ - - /* audio only */ - int sample_rate; ///< samples per second -- int channels; ///< number of audio channels -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * number of audio channels -+ * @deprecated use ch_layout.nb_channels -+ */ -+ attribute_deprecated -+ int channels; -+#endif - - /** - * audio sample format -@@ -1215,6 +1061,7 @@ - */ - int frame_size; - -+#if FF_API_AVCTX_FRAME_NUMBER - /** - * Frame counter, set by libavcodec. - * -@@ -1223,8 +1070,11 @@ - * - * @note the counter is not incremented if encoding/decoding resulted in - * an error. -+ * @deprecated use frame_num instead - */ -+ attribute_deprecated - int frame_number; -+#endif - - /** - * number of bytes per packet if constant and known or 0 -@@ -1239,19 +1089,25 @@ - */ - int cutoff; - -+#if FF_API_OLD_CHANNEL_LAYOUT - /** - * Audio channel layout. - * - encoding: set by user. - * - decoding: set by user, may be overwritten by libavcodec. -+ * @deprecated use ch_layout - */ -+ attribute_deprecated - uint64_t channel_layout; - - /** - * Request decoder to use this channel layout if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. -+ * @deprecated use "downmix" codec private option - */ -+ attribute_deprecated - uint64_t request_channel_layout; -+#endif - - /** - * Type of service that the audio stream conveys. -@@ -1350,24 +1206,6 @@ - */ - int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags); - --#if FF_API_OLD_ENCDEC -- /** -- * If non-zero, the decoded audio and video frames returned from -- * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted -- * and are valid indefinitely. The caller must free them with -- * av_frame_unref() when they are not needed anymore. -- * Otherwise, the decoded frames must not be freed by the caller and are -- * only valid until the next decode call. -- * -- * This is always automatically enabled if avcodec_receive_frame() is used. -- * -- * - encoding: unused -- * - decoding: set by the caller before avcodec_open2(). -- */ -- attribute_deprecated -- int refcounted_frames; --#endif -- - /* - encoding parameters */ - float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0) - float qblur; ///< amount of qscale smoothing over time (0.0-1.0) -@@ -1443,42 +1281,6 @@ - */ - int rc_initial_buffer_occupancy; - --#if FF_API_CODER_TYPE --#define FF_CODER_TYPE_VLC 0 --#define FF_CODER_TYPE_AC 1 --#define FF_CODER_TYPE_RAW 2 --#define FF_CODER_TYPE_RLE 3 -- /** -- * @deprecated use encoder private options instead -- */ -- attribute_deprecated -- int coder_type; --#endif /* FF_API_CODER_TYPE */ -- --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int context_model; --#endif -- --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int frame_skip_threshold; -- -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int frame_skip_factor; -- -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int frame_skip_exp; -- -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int frame_skip_cmp; --#endif /* FF_API_PRIVATE_OPT */ -- - /** - * trellis RD quantization - * - encoding: Set by user. -@@ -1486,69 +1288,6 @@ - */ - int trellis; - --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int min_prediction_order; -- -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int max_prediction_order; -- -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int64_t timecode_frame_start; --#endif -- --#if FF_API_RTP_CALLBACK -- /** -- * @deprecated unused -- */ -- /* The RTP callback: This function is called */ -- /* every time the encoder has a packet to send. */ -- /* It depends on the encoder if the data starts */ -- /* with a Start Code (it should). H.263 does. */ -- /* mb_nb contains the number of macroblocks */ -- /* encoded in the RTP payload. */ -- attribute_deprecated -- void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb); --#endif -- --#if FF_API_PRIVATE_OPT -- /** @deprecated use encoder private options instead */ -- attribute_deprecated -- int rtp_payload_size; /* The size of the RTP payload: the coder will */ -- /* do its best to deliver a chunk with size */ -- /* below rtp_payload_size, the chunk will start */ -- /* with a start code on some codecs like H.263. */ -- /* This doesn't take account of any particular */ -- /* headers inside the transmitted RTP payload. */ --#endif -- --#if FF_API_STAT_BITS -- /* statistics, used for 2-pass encoding */ -- attribute_deprecated -- int mv_bits; -- attribute_deprecated -- int header_bits; -- attribute_deprecated -- int i_tex_bits; -- attribute_deprecated -- int p_tex_bits; -- attribute_deprecated -- int i_count; -- attribute_deprecated -- int p_count; -- attribute_deprecated -- int skip_count; -- attribute_deprecated -- int misc_bits; -- -- /** @deprecated this field is unused */ -- attribute_deprecated -- int frame_bits; --#endif -- - /** - * pass1 encoding statistics output buffer - * - encoding: Set by libavcodec. -@@ -1597,13 +1336,9 @@ - * unofficial and experimental (that is, they always try to decode things - * when they can) unless they are explicitly asked to behave stupidly - * (=strictly conform to the specs) -+ * This may only be set to one of the FF_COMPLIANCE_* values in defs.h. - */ - int strict_std_compliance; --#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. --#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. --#define FF_COMPLIANCE_NORMAL 0 --#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions --#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. - - /** - * error concealment flags -@@ -1639,28 +1374,14 @@ - - /** - * Error recognition; may misdetect some more or less valid parts as errors. -+ * This is a bitfield of the AV_EF_* values defined in defs.h. -+ * - * - encoding: Set by user. - * - decoding: Set by user. - */ - int err_recognition; - --/** -- * Verify checksums embedded in the bitstream (could be of either encoded or -- * decoded data, depending on the codec) and print an error message on mismatch. -- * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the -- * decoder returning an error. -- */ --#define AV_EF_CRCCHECK (1<<0) --#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations --#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length --#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection -- --#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue --#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors --#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors --#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder should not do as an error -- -- -+#if FF_API_REORDERED_OPAQUE - /** - * opaque 64-bit number (generally a PTS) that will be reordered and - * output in AVFrame.reordered_opaque -@@ -1669,8 +1390,12 @@ - * supported by encoders with the - * AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE capability. - * - decoding: Set by user. -+ * -+ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead - */ -+ attribute_deprecated - int64_t reordered_opaque; -+#endif - - /** - * Hardware accelerator in use -@@ -1680,14 +1405,26 @@ - const struct AVHWAccel *hwaccel; - - /** -- * Hardware accelerator context. -- * For some hardware accelerators, a global context needs to be -- * provided by the user. In that case, this holds display-dependent -- * data FFmpeg cannot instantiate itself. Please refer to the -- * FFmpeg HW accelerator documentation to know how to fill this -- * is. e.g. for VA API, this is a struct vaapi_context. -- * - encoding: unused -- * - decoding: Set by user -+ * Legacy hardware accelerator context. -+ * -+ * For some hardware acceleration methods, the caller may use this field to -+ * signal hwaccel-specific data to the codec. The struct pointed to by this -+ * pointer is hwaccel-dependent and defined in the respective header. Please -+ * refer to the FFmpeg HW accelerator documentation to know how to fill -+ * this. -+ * -+ * In most cases this field is optional - the necessary information may also -+ * be provided to libavcodec through @ref hw_frames_ctx or @ref -+ * hw_device_ctx (see avcodec_get_hw_config()). However, in some cases it -+ * may be the only method of signalling some (optional) information. -+ * -+ * The struct and its contents are owned by the caller. -+ * -+ * - encoding: May be set by the caller before avcodec_open2(). Must remain -+ * valid until avcodec_free_context(). -+ * - decoding: May be set by the caller in the get_format() callback. -+ * Must remain valid until the next get_format() call, -+ * or avcodec_free_context() (whichever comes first). - */ - void *hwaccel_context; - -@@ -1729,7 +1466,10 @@ - #define FF_IDCT_SIMPLEARMV6 17 - #define FF_IDCT_FAAN 20 - #define FF_IDCT_SIMPLENEON 22 --#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ -+#if FF_API_IDCT_NONE -+// formerly used by xvmc -+#define FF_IDCT_NONE 24 -+#endif - #define FF_IDCT_SIMPLEAUTO 128 - - /** -@@ -1753,17 +1493,6 @@ - */ - int lowres; - --#if FF_API_CODED_FRAME -- /** -- * the picture in the bitstream -- * - encoding: Set by libavcodec. -- * - decoding: unused -- * -- * @deprecated use the quality factor packet side data instead -- */ -- attribute_deprecated AVFrame *coded_frame; --#endif -- - /** - * thread count - * is used to decide how many independent tasks should be passed to execute() -@@ -1791,27 +1520,6 @@ - */ - int active_thread_type; - --#if FF_API_THREAD_SAFE_CALLBACKS -- /** -- * Set by the client if its custom get_buffer() callback can be called -- * synchronously from another thread, which allows faster multithreaded decoding. -- * draw_horiz_band() will be called from other threads regardless of this setting. -- * Ignored if the default get_buffer() is used. -- * - encoding: Set by user. -- * - decoding: Set by user. -- * -- * @deprecated the custom get_buffer2() callback should always be -- * thread-safe. Thread-unsafe get_buffer2() implementations will be -- * invalid starting with LIBAVCODEC_VERSION_MAJOR=60; in other words, -- * libavcodec will behave as if this field was always set to 1. -- * Callers that want to be forward compatible with future libavcodec -- * versions should wrap access to this field in -- * #if LIBAVCODEC_VERSION_MAJOR < 60 -- */ -- attribute_deprecated -- int thread_safe_callbacks; --#endif -- - /** - * The codec may call this to execute several independent things. - * It will return only after finishing all tasks. -@@ -1828,7 +1536,6 @@ - * It will return only after finishing all tasks. - * The user may replace this with some multithreaded implementation, - * the default implementation will execute the parts serially. -- * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. - * @param c context passed also to func - * @param count the number of things to execute - * @param arg2 argument passed unchanged to func -@@ -1947,6 +1654,7 @@ - #define FF_PROFILE_HEVC_MAIN_10 2 - #define FF_PROFILE_HEVC_MAIN_STILL_PICTURE 3 - #define FF_PROFILE_HEVC_REXT 4 -+#define FF_PROFILE_HEVC_SCC 9 - - #define FF_PROFILE_VVC_MAIN_10 1 - #define FF_PROFILE_VVC_MAIN_10_444 33 -@@ -2016,34 +1724,6 @@ - uint8_t *subtitle_header; - int subtitle_header_size; - --#if FF_API_VBV_DELAY -- /** -- * VBV delay coded in the last frame (in periods of a 27 MHz clock). -- * Used for compliant TS muxing. -- * - encoding: Set by libavcodec. -- * - decoding: unused. -- * @deprecated this value is now exported as a part of -- * AV_PKT_DATA_CPB_PROPERTIES packet side data -- */ -- attribute_deprecated -- uint64_t vbv_delay; --#endif -- --#if FF_API_SIDEDATA_ONLY_PKT -- /** -- * Encoding only and set by default. Allow encoders to output packets -- * that do not contain any encoded data, only side data. -- * -- * Some encoders need to output such packets, e.g. to update some stream -- * parameters at the end of encoding. -- * -- * @deprecated this field disables the default behaviour and -- * it is kept only for compatibility. -- */ -- attribute_deprecated -- int side_data_only_packets; --#endif -- - /** - * Audio only. The number of "priming" samples (padding) inserted by the - * encoder at the beginning of the audio. I.e. this number of leading -@@ -2141,17 +1821,6 @@ - */ - int seek_preroll; - --#if FF_API_DEBUG_MV -- /** -- * @deprecated unused -- */ -- attribute_deprecated -- int debug_mv; --#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames --#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames --#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames --#endif -- - /** - * custom intra quantization matrix - * - encoding: Set by user, can be NULL. -@@ -2183,6 +1852,7 @@ - unsigned properties; - #define FF_CODEC_PROPERTY_LOSSLESS 0x00000001 - #define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002 -+#define FF_CODEC_PROPERTY_FILM_GRAIN 0x00000004 - - /** - * Additional data associated with the entire coded stream. -@@ -2218,17 +1888,6 @@ - AVBufferRef *hw_frames_ctx; - - /** -- * Control the form of AVSubtitle.rects[N]->ass -- * - decoding: set by user -- * - encoding: unused -- */ -- int sub_text_format; --#define FF_SUB_TEXT_FMT_ASS 0 --#if FF_API_ASS_TIMING --#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1 --#endif -- -- /** - * Audio only. The amount of padding (in samples) appended by the encoder to - * the end of the audio. I.e. this number of decoded samples must be - * discarded by the caller from the end of the stream to get the original -@@ -2355,6 +2014,10 @@ - * This callback must use the above value to calculate the required buffer size, - * which must padded by at least AV_INPUT_BUFFER_PADDING_SIZE bytes. - * -+ * In some specific cases, the encoder may not use the entire buffer allocated by this -+ * callback. This will be reflected in the size value in the packet once returned by -+ * avcodec_receive_packet(). -+ * - * This callback must fill the following fields in the packet: - * - data: alignment requirements for AVPacket apply, if any. Some architectures and - * encoders may benefit from having aligned data. -@@ -2382,50 +2045,26 @@ - * - decoding: unused - */ - int (*get_encode_buffer)(struct AVCodecContext *s, AVPacket *pkt, int flags); --} AVCodecContext; -- --#if FF_API_CODEC_GET_SET --/** -- * Accessors for some AVCodecContext fields. These used to be provided for ABI -- * compatibility, and do not need to be used anymore. -- */ --attribute_deprecated --AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); --attribute_deprecated --void av_codec_set_pkt_timebase (AVCodecContext *avctx, AVRational val); -- --attribute_deprecated --const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx); --attribute_deprecated --void av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc); -- --attribute_deprecated --unsigned av_codec_get_codec_properties(const AVCodecContext *avctx); -- --attribute_deprecated --int av_codec_get_lowres(const AVCodecContext *avctx); --attribute_deprecated --void av_codec_set_lowres(AVCodecContext *avctx, int val); -- --attribute_deprecated --int av_codec_get_seek_preroll(const AVCodecContext *avctx); --attribute_deprecated --void av_codec_set_seek_preroll(AVCodecContext *avctx, int val); -- --attribute_deprecated --uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx); --attribute_deprecated --void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val); --#endif - --struct AVSubtitle; -- --#if FF_API_CODEC_GET_SET --attribute_deprecated --int av_codec_get_max_lowres(const AVCodec *codec); --#endif -+ /** -+ * Audio channel layout. -+ * - encoding: must be set by the caller, to one of AVCodec.ch_layouts. -+ * - decoding: may be set by the caller if known e.g. from the container. -+ * The decoder can then override during decoding as needed. -+ */ -+ AVChannelLayout ch_layout; - --struct MpegEncContext; -+ /** -+ * Frame counter, set by libavcodec. -+ * -+ * - decoding: total number of frames returned from the decoder so far. -+ * - encoding: total number of frames passed to the encoder so far. -+ * -+ * @note the counter is not incremented if encoding/decoding resulted in -+ * an error. -+ */ -+ int64_t frame_num; -+} AVCodecContext; - - /** - * @defgroup lavc_hwaccel AVHWAccel -@@ -2518,7 +2157,6 @@ - * - * Meaningful slice information (codec specific) is guaranteed to - * be parsed at this point. This function is mandatory. -- * The only exception is XvMC, that works on MB level. - * - * @param avctx the codec context - * @param buf the slice data buffer base -@@ -2548,17 +2186,6 @@ - int frame_priv_data_size; - - /** -- * Called for every Macroblock in a slice. -- * -- * XvMC uses it to replace the ff_mpv_reconstruct_mb(). -- * Instead of decoding to raw picture, MB parameters are -- * stored in an array provided by the video driver. -- * -- * @param s the mpeg context -- */ -- void (*decode_mb)(struct MpegEncContext *s); -- -- /** - * Initialize the hwaccel private data. - * - * This will be called from ff_get_format(), after hwaccel and -@@ -2634,35 +2261,24 @@ - #define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) - - /** -- * @} -- */ -- --#if FF_API_AVPICTURE --/** -- * @defgroup lavc_picture AVPicture -- * -- * Functions for working with AVPicture -- * @{ -- */ -- --/** -- * Picture data structure. -- * -- * Up to four components can be stored into it, the last component is -- * alpha. -- * @deprecated use AVFrame or imgutils functions instead -+ * Some hardware decoders (namely nvdec) can either output direct decoder -+ * surfaces, or make an on-device copy and return said copy. -+ * There is a hard limit on how many decoder surfaces there can be, and it -+ * cannot be accurately guessed ahead of time. -+ * For some processing chains, this can be okay, but others will run into the -+ * limit and in turn produce very confusing errors that require fine tuning of -+ * more or less obscure options by the user, or in extreme cases cannot be -+ * resolved at all without inserting an avfilter that forces a copy. -+ * -+ * Thus, the hwaccel will by default make a copy for safety and resilience. -+ * If a users really wants to minimize the amount of copies, they can set this -+ * flag and ensure their processing chain does not exhaust the surface pool. - */ --typedef struct AVPicture { -- attribute_deprecated -- uint8_t *data[AV_NUM_DATA_POINTERS]; ///< pointers to the image data planes -- attribute_deprecated -- int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line --} AVPicture; -+#define AV_HWACCEL_FLAG_UNSAFE_OUTPUT (1 << 3) - - /** - * @} - */ --#endif - - enum AVSubtitleType { - SUBTITLE_NONE, -@@ -2691,13 +2307,6 @@ - int h; ///< height of pict, undefined when pict is not set - int nb_colors; ///< number of colors in pict, undefined when pict is not set - --#if FF_API_AVPICTURE -- /** -- * @deprecated unused -- */ -- attribute_deprecated -- AVPicture pict; --#endif - /** - * data+linesize for the bitmap of this subtitle. - * Can be set for text/ass as well once they are rendered. -@@ -2728,16 +2337,6 @@ - int64_t pts; ///< Same as packet pts, in AV_TIME_BASE - } AVSubtitle; - --#if FF_API_NEXT --/** -- * If c is NULL, returns the first registered codec, -- * if c is non-NULL, returns the next registered codec after c, -- * or NULL if c is the last one. -- */ --attribute_deprecated --AVCodec *av_codec_next(const AVCodec *c); --#endif -- - /** - * Return the LIBAVCODEC_VERSION_INT constant. - */ -@@ -2753,20 +2352,6 @@ - */ - const char *avcodec_license(void); - --#if FF_API_NEXT --/** -- * @deprecated Calling this function is unnecessary. -- */ --attribute_deprecated --void avcodec_register(AVCodec *codec); -- --/** -- * @deprecated Calling this function is unnecessary. -- */ --attribute_deprecated --void avcodec_register_all(void); --#endif -- - /** - * Allocate an AVCodecContext and set its fields to default values. The - * resulting struct should be freed with avcodec_free_context(). -@@ -2788,15 +2373,6 @@ - */ - void avcodec_free_context(AVCodecContext **avctx); - --#if FF_API_GET_CONTEXT_DEFAULTS --/** -- * @deprecated This function should not be used, as closing and opening a codec -- * context multiple time is not supported. A new codec context should be -- * allocated for each new use. -- */ --int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec); --#endif -- - /** - * Get the AVClass for AVCodecContext. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. -@@ -2805,14 +2381,6 @@ - */ - const AVClass *avcodec_get_class(void); - --#if FF_API_GET_FRAME_CLASS --/** -- * @deprecated This function should not be used. -- */ --attribute_deprecated --const AVClass *avcodec_get_frame_class(void); --#endif -- - /** - * Get the AVClass for AVSubtitleRect. It can be used in combination with - * AV_OPT_SEARCH_FAKE_OBJ for examining options. -@@ -2821,28 +2389,6 @@ - */ - const AVClass *avcodec_get_subtitle_rect_class(void); - --#if FF_API_COPY_CONTEXT --/** -- * Copy the settings of the source AVCodecContext into the destination -- * AVCodecContext. The resulting destination codec context will be -- * unopened, i.e. you are required to call avcodec_open2() before you -- * can use this AVCodecContext to decode/encode video/audio data. -- * -- * @param dest target codec context, should be initialized with -- * avcodec_alloc_context3(NULL), but otherwise uninitialized -- * @param src source codec context -- * @return AVERROR() on error (e.g. memory allocation error), 0 on success -- * -- * @deprecated The semantics of this function are ill-defined and it should not -- * be used. If you need to transfer the stream parameters from one codec context -- * to another, use an intermediate AVCodecParameters instance and the -- * avcodec_parameters_from_context() / avcodec_parameters_to_context() -- * functions. -- */ --attribute_deprecated --int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src); --#endif -- - /** - * Fill the parameters struct based on the values from the supplied codec - * context. Any allocated fields in par are freed and replaced with duplicates -@@ -2872,8 +2418,6 @@ - * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for - * retrieving a codec. - * -- * @warning This function is not thread safe! -- * - * @note Always call this function before using decoding routines (such as - * @ref avcodec_receive_frame()). - * -@@ -2967,6 +2511,7 @@ - void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, - int linesize_align[AV_NUM_DATA_POINTERS]); - -+#ifdef FF_API_AVCODEC_CHROMA_POS - /** - * Converts AVChromaLocation to swscale x/y chroma position. - * -@@ -2975,7 +2520,9 @@ - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position -+ * @deprecated Use av_chroma_location_enum_to_pos() instead. - */ -+ attribute_deprecated - int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos); - - /** -@@ -2986,116 +2533,10 @@ - * - * @param xpos horizontal chroma sample position - * @param ypos vertical chroma sample position -+ * @deprecated Use av_chroma_location_pos_to_enum() instead. - */ -+ attribute_deprecated - enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos); -- --#if FF_API_OLD_ENCDEC --/** -- * Decode the audio frame of size avpkt->size from avpkt->data into frame. -- * -- * Some decoders may support multiple frames in a single AVPacket. Such -- * decoders would then just decode the first frame and the return value would be -- * less than the packet size. In this case, avcodec_decode_audio4 has to be -- * called again with an AVPacket containing the remaining data in order to -- * decode the second frame, etc... Even if no frames are returned, the packet -- * needs to be fed to the decoder with remaining data until it is completely -- * consumed or an error occurs. -- * -- * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input -- * and output. This means that for some packets they will not immediately -- * produce decoded output and need to be flushed at the end of decoding to get -- * all the decoded data. Flushing is done by calling this function with packets -- * with avpkt->data set to NULL and avpkt->size set to 0 until it stops -- * returning samples. It is safe to flush even those decoders that are not -- * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. -- * -- * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE -- * larger than the actual read bytes because some optimized bitstream -- * readers read 32 or 64 bits at once and could read over the end. -- * -- * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() -- * before packets may be fed to the decoder. -- * -- * @param avctx the codec context -- * @param[out] frame The AVFrame in which to store decoded audio samples. -- * The decoder will allocate a buffer for the decoded frame by -- * calling the AVCodecContext.get_buffer2() callback. -- * When AVCodecContext.refcounted_frames is set to 1, the frame is -- * reference counted and the returned reference belongs to the -- * caller. The caller must release the frame using av_frame_unref() -- * when the frame is no longer needed. The caller may safely write -- * to the frame if av_frame_is_writable() returns 1. -- * When AVCodecContext.refcounted_frames is set to 0, the returned -- * reference belongs to the decoder and is valid only until the -- * next call to this function or until closing or flushing the -- * decoder. The caller may not write to it. -- * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is -- * non-zero. Note that this field being set to zero -- * does not mean that an error has occurred. For -- * decoders with AV_CODEC_CAP_DELAY set, no given decode -- * call is guaranteed to produce a frame. -- * @param[in] avpkt The input AVPacket containing the input buffer. -- * At least avpkt->data and avpkt->size should be set. Some -- * decoders might also require additional fields to be set. -- * @return A negative error code is returned if an error occurred during -- * decoding, otherwise the number of bytes consumed from the input -- * AVPacket is returned. -- * --* @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). -- */ --attribute_deprecated --int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame, -- int *got_frame_ptr, const AVPacket *avpkt); -- --/** -- * Decode the video frame of size avpkt->size from avpkt->data into picture. -- * Some decoders may support multiple frames in a single AVPacket, such -- * decoders would then just decode the first frame. -- * -- * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than -- * the actual read bytes because some optimized bitstream readers read 32 or 64 -- * bits at once and could read over the end. -- * -- * @warning The end of the input buffer buf should be set to 0 to ensure that -- * no overreading happens for damaged MPEG streams. -- * -- * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay -- * between input and output, these need to be fed with avpkt->data=NULL, -- * avpkt->size=0 at the end to return the remaining frames. -- * -- * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() -- * before packets may be fed to the decoder. -- * -- * @param avctx the codec context -- * @param[out] picture The AVFrame in which the decoded video frame will be stored. -- * Use av_frame_alloc() to get an AVFrame. The codec will -- * allocate memory for the actual bitmap by calling the -- * AVCodecContext.get_buffer2() callback. -- * When AVCodecContext.refcounted_frames is set to 1, the frame is -- * reference counted and the returned reference belongs to the -- * caller. The caller must release the frame using av_frame_unref() -- * when the frame is no longer needed. The caller may safely write -- * to the frame if av_frame_is_writable() returns 1. -- * When AVCodecContext.refcounted_frames is set to 0, the returned -- * reference belongs to the decoder and is valid only until the -- * next call to this function or until closing or flushing the -- * decoder. The caller may not write to it. -- * -- * @param[in] avpkt The input AVPacket containing the input buffer. -- * You can create such packet with av_init_packet() and by then setting -- * data and size, some decoders might in addition need other fields like -- * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least -- * fields possible. -- * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. -- * @return On error a negative value is returned, otherwise the number of bytes -- * used or zero if no frame could be decompressed. -- * -- * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). -- */ --attribute_deprecated --int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, -- int *got_picture_ptr, -- const AVPacket *avpkt); - #endif - - /** -@@ -3126,8 +2567,7 @@ - * @param[in] avpkt The input AVPacket containing the input buffer. - */ - int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, -- int *got_sub_ptr, -- AVPacket *avpkt); -+ int *got_sub_ptr, const AVPacket *avpkt); - - /** - * Supply raw packet data as input to a decoder. -@@ -3141,10 +2581,6 @@ - * larger than the actual read bytes because some optimized bitstream - * readers read 32 or 64 bits at once and could read over the end. - * -- * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) -- * on the same AVCodecContext. It will return unexpected results now -- * or in future libavcodec versions. -- * - * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() - * before packets may be fed to the decoder. - * -@@ -3167,40 +2603,41 @@ - * still has frames buffered, it will return them after sending - * a flush packet. - * -- * @return 0 on success, otherwise negative error code: -- * AVERROR(EAGAIN): input is not accepted in the current state - user -- * must read output with avcodec_receive_frame() (once -- * all output is read, the packet should be resent, and -- * the call will not fail with EAGAIN). -- * AVERROR_EOF: the decoder has been flushed, and no new packets can -- * be sent to it (also returned if more than 1 flush -- * packet is sent) -- * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush -- * AVERROR(ENOMEM): failed to add packet to internal queue, or similar -- * other errors: legitimate decoding errors -+ * @retval 0 success -+ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user -+ * must read output with avcodec_receive_frame() (once -+ * all output is read, the packet should be resent, -+ * and the call will not fail with EAGAIN). -+ * @retval AVERROR_EOF the decoder has been flushed, and no new packets can be -+ * sent to it (also returned if more than 1 flush -+ * packet is sent) -+ * @retval AVERROR(EINVAL) codec not opened, it is an encoder, or requires flush -+ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar -+ * @retval "another negative error code" legitimate decoding errors - */ - int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); - - /** -- * Return decoded output data from a decoder. -+ * Return decoded output data from a decoder or encoder (when the -+ * AV_CODEC_FLAG_RECON_FRAME flag is used). - * - * @param avctx codec context - * @param frame This will be set to a reference-counted video or audio - * frame (depending on the decoder type) allocated by the -- * decoder. Note that the function will always call -+ * codec. Note that the function will always call - * av_frame_unref(frame) before doing anything else. - * -- * @return -- * 0: success, a frame was returned -- * AVERROR(EAGAIN): output is not available in this state - user must try -- * to send new input -- * AVERROR_EOF: the decoder has been fully flushed, and there will be -- * no more output frames -- * AVERROR(EINVAL): codec not opened, or it is an encoder -- * AVERROR_INPUT_CHANGED: current decoded frame has changed parameters -- * with respect to first decoded frame. Applicable -- * when flag AV_CODEC_FLAG_DROPCHANGED is set. -- * other negative values: legitimate decoding errors -+ * @retval 0 success, a frame was returned -+ * @retval AVERROR(EAGAIN) output is not available in this state - user must -+ * try to send new input -+ * @retval AVERROR_EOF the codec has been fully flushed, and there will be -+ * no more output frames -+ * @retval AVERROR(EINVAL) codec not opened, or it is an encoder without the -+ * AV_CODEC_FLAG_RECON_FRAME flag enabled -+ * @retval AVERROR_INPUT_CHANGED current decoded frame has changed parameters with -+ * respect to first decoded frame. Applicable when flag -+ * AV_CODEC_FLAG_DROPCHANGED is set. -+ * @retval "other negative error code" legitimate decoding errors - */ - int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); - -@@ -3227,17 +2664,16 @@ - * If it is not set, frame->nb_samples must be equal to - * avctx->frame_size for all frames except the last. - * The final frame may be smaller than avctx->frame_size. -- * @return 0 on success, otherwise negative error code: -- * AVERROR(EAGAIN): input is not accepted in the current state - user -- * must read output with avcodec_receive_packet() (once -- * all output is read, the packet should be resent, and -- * the call will not fail with EAGAIN). -- * AVERROR_EOF: the encoder has been flushed, and no new frames can -- * be sent to it -- * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a -- * decoder, or requires flush -- * AVERROR(ENOMEM): failed to add packet to internal queue, or similar -- * other errors: legitimate encoding errors -+ * @retval 0 success -+ * @retval AVERROR(EAGAIN) input is not accepted in the current state - user must -+ * read output with avcodec_receive_packet() (once all -+ * output is read, the packet should be resent, and the -+ * call will not fail with EAGAIN). -+ * @retval AVERROR_EOF the encoder has been flushed, and no new frames can -+ * be sent to it -+ * @retval AVERROR(EINVAL) codec not opened, it is a decoder, or requires flush -+ * @retval AVERROR(ENOMEM) failed to add packet to internal queue, or similar -+ * @retval "another negative error code" legitimate encoding errors - */ - int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); - -@@ -3248,13 +2684,13 @@ - * @param avpkt This will be set to a reference-counted packet allocated by the - * encoder. Note that the function will always call - * av_packet_unref(avpkt) before doing anything else. -- * @return 0 on success, otherwise negative error code: -- * AVERROR(EAGAIN): output is not available in the current state - user -- * must try to send input -- * AVERROR_EOF: the encoder has been fully flushed, and there will be -- * no more output packets -- * AVERROR(EINVAL): codec not opened, or it is a decoder -- * other errors: legitimate encoding errors -+ * @retval 0 success -+ * @retval AVERROR(EAGAIN) output is not available in the current state - user must -+ * try to send input -+ * @retval AVERROR_EOF the encoder has been fully flushed, and there will be no -+ * more output packets -+ * @retval AVERROR(EINVAL) codec not opened, or it is a decoder -+ * @retval "another negative error code" legitimate encoding errors - */ - int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt); - -@@ -3368,15 +2804,15 @@ - */ - - enum AVPictureStructure { -- AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown -- AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field -- AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field -- AV_PICTURE_STRUCTURE_FRAME, //< coded as frame -+ AV_PICTURE_STRUCTURE_UNKNOWN, ///< unknown -+ AV_PICTURE_STRUCTURE_TOP_FIELD, ///< coded as top field -+ AV_PICTURE_STRUCTURE_BOTTOM_FIELD, ///< coded as bottom field -+ AV_PICTURE_STRUCTURE_FRAME, ///< coded as frame - }; - - typedef struct AVCodecParserContext { - void *priv_data; -- struct AVCodecParser *parser; -+ const struct AVCodecParser *parser; - int64_t frame_offset; /* offset of the current frame */ - int64_t cur_offset; /* current offset - (incremented by each av_parser_parse()) */ -@@ -3425,14 +2861,6 @@ - */ - int key_frame; - --#if FF_API_CONVERGENCE_DURATION -- /** -- * @deprecated unused -- */ -- attribute_deprecated -- int64_t convergence_duration; --#endif -- - // Timestamp generation support: - /** - * Synchronization point for start of timestamp generation. -@@ -3542,7 +2970,7 @@ - } AVCodecParserContext; - - typedef struct AVCodecParser { -- int codec_ids[5]; /* several codec IDs are permitted */ -+ int codec_ids[7]; /* several codec IDs are permitted */ - int priv_data_size; - int (*parser_init)(AVCodecParserContext *s); - /* This callback never returns an error, a negative value means that -@@ -3553,10 +2981,6 @@ - const uint8_t *buf, int buf_size); - void (*parser_close)(AVCodecParserContext *s); - int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size); --#if FF_API_NEXT -- attribute_deprecated -- struct AVCodecParser *next; --#endif - } AVCodecParser; - - /** -@@ -3570,13 +2994,6 @@ - */ - const AVCodecParser *av_parser_iterate(void **opaque); - --#if FF_API_NEXT --attribute_deprecated --AVCodecParser *av_parser_next(const AVCodecParser *c); -- --attribute_deprecated --void av_register_codec_parser(AVCodecParser *parser); --#endif - AVCodecParserContext *av_parser_init(int codec_id); - - /** -@@ -3617,18 +3034,6 @@ - int64_t pts, int64_t dts, - int64_t pos); - --#if FF_API_PARSER_CHANGE --/** -- * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed -- * @deprecated Use dump_extradata, remove_extra or extract_extradata -- * bitstream filters instead. -- */ --attribute_deprecated --int av_parser_change(AVCodecParserContext *s, -- AVCodecContext *avctx, -- uint8_t **poutbuf, int *poutbuf_size, -- const uint8_t *buf, int buf_size, int keyframe); --#endif - void av_parser_close(AVCodecParserContext *s); - - /** -@@ -3641,95 +3046,6 @@ - * @{ - */ - --#if FF_API_OLD_ENCDEC --/** -- * Encode a frame of audio. -- * -- * Takes input samples from frame and writes the next output packet, if -- * available, to avpkt. The output packet does not necessarily contain data for -- * the most recent frame, as encoders can delay, split, and combine input frames -- * internally as needed. -- * -- * @param avctx codec context -- * @param avpkt output AVPacket. -- * The user can supply an output buffer by setting -- * avpkt->data and avpkt->size prior to calling the -- * function, but if the size of the user-provided data is not -- * large enough, encoding will fail. If avpkt->data and -- * avpkt->size are set, avpkt->destruct must also be set. All -- * other AVPacket fields will be reset by the encoder using -- * av_init_packet(). If avpkt->data is NULL, the encoder will -- * allocate it. The encoder will set avpkt->size to the size -- * of the output packet. -- * -- * If this function fails or produces no output, avpkt will be -- * freed using av_packet_unref(). -- * @param[in] frame AVFrame containing the raw audio data to be encoded. -- * May be NULL when flushing an encoder that has the -- * AV_CODEC_CAP_DELAY capability set. -- * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame -- * can have any number of samples. -- * If it is not set, frame->nb_samples must be equal to -- * avctx->frame_size for all frames except the last. -- * The final frame may be smaller than avctx->frame_size. -- * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the -- * output packet is non-empty, and to 0 if it is -- * empty. If the function returns an error, the -- * packet can be assumed to be invalid, and the -- * value of got_packet_ptr is undefined and should -- * not be used. -- * @return 0 on success, negative error code on failure -- * -- * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. -- * If allowed and required, set AVCodecContext.get_encode_buffer to -- * a custom function to pass user supplied output buffers. -- */ --attribute_deprecated --int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt, -- const AVFrame *frame, int *got_packet_ptr); -- --/** -- * Encode a frame of video. -- * -- * Takes input raw video data from frame and writes the next output packet, if -- * available, to avpkt. The output packet does not necessarily contain data for -- * the most recent frame, as encoders can delay and reorder input frames -- * internally as needed. -- * -- * @param avctx codec context -- * @param avpkt output AVPacket. -- * The user can supply an output buffer by setting -- * avpkt->data and avpkt->size prior to calling the -- * function, but if the size of the user-provided data is not -- * large enough, encoding will fail. All other AVPacket fields -- * will be reset by the encoder using av_init_packet(). If -- * avpkt->data is NULL, the encoder will allocate it. -- * The encoder will set avpkt->size to the size of the -- * output packet. The returned data (if any) belongs to the -- * caller, he is responsible for freeing it. -- * -- * If this function fails or produces no output, avpkt will be -- * freed using av_packet_unref(). -- * @param[in] frame AVFrame containing the raw video data to be encoded. -- * May be NULL when flushing an encoder that has the -- * AV_CODEC_CAP_DELAY capability set. -- * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the -- * output packet is non-empty, and to 0 if it is -- * empty. If the function returns an error, the -- * packet can be assumed to be invalid, and the -- * value of got_packet_ptr is undefined and should -- * not be used. -- * @return 0 on success, negative error code on failure -- * -- * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead. -- * If allowed and required, set AVCodecContext.get_encode_buffer to -- * a custom function to pass user supplied output buffers. -- */ --attribute_deprecated --int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt, -- const AVFrame *frame, int *got_packet_ptr); --#endif -- - int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub); - -@@ -3738,71 +3054,6 @@ - * @} - */ - --#if FF_API_AVPICTURE --/** -- * @addtogroup lavc_picture -- * @{ -- */ -- --/** -- * @deprecated unused -- */ --attribute_deprecated --int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height); -- --/** -- * @deprecated unused -- */ --attribute_deprecated --void avpicture_free(AVPicture *picture); -- --/** -- * @deprecated use av_image_fill_arrays() instead. -- */ --attribute_deprecated --int avpicture_fill(AVPicture *picture, const uint8_t *ptr, -- enum AVPixelFormat pix_fmt, int width, int height); -- --/** -- * @deprecated use av_image_copy_to_buffer() instead. -- */ --attribute_deprecated --int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt, -- int width, int height, -- unsigned char *dest, int dest_size); -- --/** -- * @deprecated use av_image_get_buffer_size() instead. -- */ --attribute_deprecated --int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height); -- --/** -- * @deprecated av_image_copy() instead. -- */ --attribute_deprecated --void av_picture_copy(AVPicture *dst, const AVPicture *src, -- enum AVPixelFormat pix_fmt, int width, int height); -- --/** -- * @deprecated unused -- */ --attribute_deprecated --int av_picture_crop(AVPicture *dst, const AVPicture *src, -- enum AVPixelFormat pix_fmt, int top_band, int left_band); -- --/** -- * @deprecated unused -- */ --attribute_deprecated --int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt, -- int padtop, int padbottom, int padleft, int padright, int *color); -- --/** -- * @} -- */ --#endif -- - /** - * @defgroup lavc_misc Utility functions - * @ingroup libavc -@@ -3819,15 +3070,6 @@ - * @{ - */ - --#if FF_API_GETCHROMA --/** -- * @deprecated Use av_pix_fmt_get_chroma_sub_sample -- */ -- --attribute_deprecated --void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); --#endif -- - /** - * Return a value representing the fourCC code associated to the - * pixel format pix_fmt, or 0 if no associated fourCC code can be -@@ -3856,71 +3098,14 @@ - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr); - --#if FF_API_AVCODEC_PIX_FMT --/** -- * @deprecated see av_get_pix_fmt_loss() -- */ --attribute_deprecated --int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt, -- int has_alpha); --/** -- * @deprecated see av_find_best_pix_fmt_of_2() -- */ --attribute_deprecated --enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, -- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); -- --attribute_deprecated --enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, -- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr); --#endif -- - enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt); - - /** - * @} - */ - --#if FF_API_TAG_STRING --/** -- * Put a string representing the codec tag codec_tag in buf. -- * -- * @param buf buffer to place codec tag in -- * @param buf_size size in bytes of buf -- * @param codec_tag codec tag to assign -- * @return the length of the string that would have been generated if -- * enough space had been available, excluding the trailing null -- * -- * @deprecated see av_fourcc_make_string() and av_fourcc2str(). -- */ --attribute_deprecated --size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); --#endif -- - void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); - --/** -- * Return a name for the specified profile, if available. -- * -- * @param codec the codec that is searched for the given profile -- * @param profile the profile value for which a name is requested -- * @return A name for the profile if found, NULL otherwise. -- */ --const char *av_get_profile_name(const AVCodec *codec, int profile); -- --/** -- * Return a name for the specified profile, if available. -- * -- * @param codec_id the ID of the codec to which the requested profile belongs -- * @param profile the profile value for which a name is requested -- * @return A name for the profile if found, NULL otherwise. -- * -- * @note unlike av_get_profile_name(), which searches a list of profiles -- * supported by a specific decoder or encoder implementation, this -- * function searches the list of profiles from the AVCodecDescriptor -- */ --const char *avcodec_profile_name(enum AVCodecID codec_id, int profile); -- - int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size); - int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); - //FIXME func typedef -@@ -3956,11 +3141,8 @@ - * Reset the internal codec state / flush internal buffers. Should be called - * e.g. when seeking or when switching to a different stream. - * -- * @note for decoders, when refcounted frames are not used -- * (i.e. avctx->refcounted_frames is 0), this invalidates the frames previously -- * returned from the decoder. When refcounted frames are used, the decoder just -- * releases any references it might keep internally, but the caller's reference -- * remains valid. -+ * @note for decoders, this function just releases any references the decoder -+ * might keep internally, but the caller's references remain valid. - * - * @note for encoders, this function will only do something if the encoder - * declares support for AV_CODEC_CAP_ENCODER_FLUSH. When called, the encoder -@@ -3972,32 +3154,6 @@ - void avcodec_flush_buffers(AVCodecContext *avctx); - - /** -- * Return codec bits per sample. -- * -- * @param[in] codec_id the codec -- * @return Number of bits per sample or zero if unknown for the given codec. -- */ --int av_get_bits_per_sample(enum AVCodecID codec_id); -- --/** -- * Return the PCM codec associated with a sample format. -- * @param be endianness, 0 for little, 1 for big, -- * -1 (or anything else) for native -- * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE -- */ --enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be); -- --/** -- * Return codec bits per sample. -- * Only return non-zero if the bits per sample is exactly correct, not an -- * approximation. -- * -- * @param[in] codec_id the codec -- * @return Number of bits per sample or zero if unknown for the given codec. -- */ --int av_get_exact_bits_per_sample(enum AVCodecID codec_id); -- --/** - * Return audio frame duration. - * - * @param avctx codec context -@@ -4007,69 +3163,6 @@ - */ - int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes); - --/** -- * This function is the same as av_get_audio_frame_duration(), except it works -- * with AVCodecParameters instead of an AVCodecContext. -- */ --int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); -- --#if FF_API_OLD_BSF --typedef struct AVBitStreamFilterContext { -- void *priv_data; -- const struct AVBitStreamFilter *filter; -- AVCodecParserContext *parser; -- struct AVBitStreamFilterContext *next; -- /** -- * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). -- * Not for access by library users. -- */ -- char *args; --} AVBitStreamFilterContext; -- --/** -- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) -- * is deprecated. Use the new bitstream filtering API (using AVBSFContext). -- */ --attribute_deprecated --void av_register_bitstream_filter(AVBitStreamFilter *bsf); --/** -- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) -- * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init() -- * from the new bitstream filtering API (using AVBSFContext). -- */ --attribute_deprecated --AVBitStreamFilterContext *av_bitstream_filter_init(const char *name); --/** -- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) -- * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the -- * new bitstream filtering API (using AVBSFContext). -- */ --attribute_deprecated --int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, -- AVCodecContext *avctx, const char *args, -- uint8_t **poutbuf, int *poutbuf_size, -- const uint8_t *buf, int buf_size, int keyframe); --/** -- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) -- * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using -- * AVBSFContext). -- */ --attribute_deprecated --void av_bitstream_filter_close(AVBitStreamFilterContext *bsf); --/** -- * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext) -- * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using -- * AVBSFContext). -- */ --attribute_deprecated --const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f); --#endif -- --#if FF_API_NEXT --attribute_deprecated --const AVBitStreamFilter *av_bsf_next(void **opaque); --#endif -- - /* memory */ - - /** -@@ -4088,96 +3181,12 @@ - void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size); - - /** -- * Encode extradata length to a buffer. Used by xiph codecs. -- * -- * @param s buffer to write to; must be at least (v/255+1) bytes long -- * @param v size of extradata in bytes -- * @return number of bytes written to the buffer. -- */ --unsigned int av_xiphlacing(unsigned char *s, unsigned int v); -- --#if FF_API_USER_VISIBLE_AVHWACCEL --/** -- * Register the hardware accelerator hwaccel. -- * -- * @deprecated This function doesn't do anything. -- */ --attribute_deprecated --void av_register_hwaccel(AVHWAccel *hwaccel); -- --/** -- * If hwaccel is NULL, returns the first registered hardware accelerator, -- * if hwaccel is non-NULL, returns the next registered hardware accelerator -- * after hwaccel, or NULL if hwaccel is the last one. -- * -- * @deprecated AVHWaccel structures contain no user-serviceable parts, so -- * this function should not be used. -- */ --attribute_deprecated --AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel); --#endif -- --#if FF_API_LOCKMGR --/** -- * Lock operation used by lockmgr -- * -- * @deprecated Deprecated together with av_lockmgr_register(). -- */ --enum AVLockOp { -- AV_LOCK_CREATE, ///< Create a mutex -- AV_LOCK_OBTAIN, ///< Lock the mutex -- AV_LOCK_RELEASE, ///< Unlock the mutex -- AV_LOCK_DESTROY, ///< Free mutex resources --}; -- --/** -- * Register a user provided lock manager supporting the operations -- * specified by AVLockOp. The "mutex" argument to the function points -- * to a (void *) where the lockmgr should store/get a pointer to a user -- * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the -- * value left by the last call for all other ops. If the lock manager is -- * unable to perform the op then it should leave the mutex in the same -- * state as when it was called and return a non-zero value. However, -- * when called with AV_LOCK_DESTROY the mutex will always be assumed to -- * have been successfully destroyed. If av_lockmgr_register succeeds -- * it will return a non-negative value, if it fails it will return a -- * negative value and destroy all mutex and unregister all callbacks. -- * av_lockmgr_register is not thread-safe, it must be called from a -- * single thread before any calls which make use of locking are used. -- * -- * @param cb User defined callback. av_lockmgr_register invokes calls -- * to this callback and the previously registered callback. -- * The callback will be used to create more than one mutex -- * each of which must be backed by its own underlying locking -- * mechanism (i.e. do not use a single static object to -- * implement your lock manager). If cb is set to NULL the -- * lockmgr will be unregistered. -- * -- * @deprecated This function does nothing, and always returns 0. Be sure to -- * build with thread support to get basic thread safety. -- */ --attribute_deprecated --int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)); --#endif -- --/** - * @return a positive value if s is open (i.e. avcodec_open2() was called on it - * with no corresponding avcodec_close()), 0 otherwise. - */ - int avcodec_is_open(AVCodecContext *s); - - /** -- * Allocate a CPB properties structure and initialize its fields to default -- * values. -- * -- * @param size if non-NULL, the size of the allocated struct will be written -- * here. This is useful for embedding it in side data. -- * -- * @return the newly allocated struct or NULL on failure -- */ --AVCPBProperties *av_cpb_properties_alloc(size_t *size); -- --/** - * @} - */ - -diff -Naur a/media/ffvpx/libavcodec/avcodec.symbols b/media/ffvpx/libavcodec/avcodec.symbols ---- a/media/ffvpx/libavcodec/avcodec.symbols 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/avcodec.symbols 2023-04-06 12:50:28.394333574 +0200 -@@ -1,47 +1,26 @@ - av_codec_ffversion --av_codec_get_chroma_intra_matrix --av_codec_get_codec_descriptor --av_codec_get_codec_properties --av_codec_get_lowres --av_codec_get_max_lowres --av_codec_get_pkt_timebase --av_codec_get_seek_preroll - av_codec_is_decoder - av_codec_is_encoder - av_codec_iterate --av_codec_next --av_codec_set_chroma_intra_matrix --av_codec_set_codec_descriptor --av_codec_set_lowres --av_codec_set_pkt_timebase --av_codec_set_seek_preroll --av_copy_packet --av_copy_packet_side_data --av_dup_packet - av_fast_padded_malloc - av_fast_padded_mallocz --av_free_packet - av_get_audio_frame_duration - av_get_bits_per_sample --av_get_codec_tag_string - av_get_exact_bits_per_sample - av_get_pcm_codec - av_get_profile_name - av_grow_packet --av_hwaccel_next - av_hwdevice_ctx_init - av_hwdevice_ctx_alloc - av_hwdevice_ctx_create_derived - av_hwframe_transfer_get_formats - av_hwframe_ctx_alloc - av_init_packet --av_lockmgr_register - av_new_packet - av_packet_copy_props - av_packet_free_side_data - av_packet_from_data - av_packet_get_side_data --av_packet_merge_side_data - av_packet_move_ref - av_packet_new_side_data - av_packet_pack_dictionary -@@ -49,21 +28,16 @@ - av_packet_rescale_ts - av_packet_shrink_side_data - av_packet_side_data_name --av_packet_split_side_data - av_packet_unpack_dictionary - av_packet_unref --av_parser_change - av_parser_close - av_parser_init --av_parser_next - av_parser_parse2 - #ifdef MOZ_LIBAV_FFT - av_rdft_calc - av_rdft_end - av_rdft_init - #endif --av_register_codec_parser --av_register_hwaccel - av_shrink_packet - av_vorbis_parse_frame - av_vorbis_parse_frame_flags -@@ -77,10 +51,7 @@ - avcodec_chroma_pos_to_enum - avcodec_close - avcodec_configuration --avcodec_copy_context --avcodec_decode_audio4 - avcodec_decode_subtitle2 --avcodec_decode_video2 - avcodec_default_execute - avcodec_default_execute2 - avcodec_default_get_buffer2 -@@ -97,8 +68,6 @@ - avcodec_flush_buffers - avcodec_free_context - avcodec_get_class --avcodec_get_context_defaults3 --avcodec_get_frame_class - avcodec_get_hw_config - avcodec_get_name - avcodec_get_subtitle_rect_class -@@ -106,10 +75,12 @@ - avcodec_is_open - avcodec_license - avcodec_open2 --avcodec_register --avcodec_register_all - avcodec_string - avcodec_version - avsubtitle_free - avcodec_send_packet - avcodec_receive_frame -+ff_init_vlc_from_lengths -+ff_init_vlc_sparse -+ff_mpa_freq_tab -+ff_mpa_bitrate_tab -diff -Naur a/media/ffvpx/libavcodec/avpacket.c b/media/ffvpx/libavcodec/avpacket.c ---- a/media/ffvpx/libavcodec/avpacket.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/avpacket.c 2023-04-06 12:50:24.491176503 +0200 -@@ -22,13 +22,12 @@ - #include - - #include "libavutil/avassert.h" --#include "libavutil/common.h" --#include "libavutil/internal.h" -+#include "libavutil/intreadwrite.h" - #include "libavutil/mathematics.h" - #include "libavutil/mem.h" -+#include "libavutil/rational.h" - --#include "bytestream.h" --#include "internal.h" -+#include "defs.h" - #include "packet.h" - #include "packet_internal.h" - -@@ -39,16 +38,14 @@ - pkt->dts = AV_NOPTS_VALUE; - pkt->pos = -1; - pkt->duration = 0; --#if FF_API_CONVERGENCE_DURATION --FF_DISABLE_DEPRECATION_WARNINGS -- pkt->convergence_duration = 0; --FF_ENABLE_DEPRECATION_WARNINGS --#endif - pkt->flags = 0; - pkt->stream_index = 0; - pkt->buf = NULL; - pkt->side_data = NULL; - pkt->side_data_elems = 0; -+ pkt->opaque = NULL; -+ pkt->opaque_ref = NULL; -+ pkt->time_base = av_make_q(0, 1); - } - #endif - -@@ -59,11 +56,12 @@ - pkt->pts = AV_NOPTS_VALUE; - pkt->dts = AV_NOPTS_VALUE; - pkt->pos = -1; -+ pkt->time_base = av_make_q(0, 1); - } - - AVPacket *av_packet_alloc(void) - { -- AVPacket *pkt = av_mallocz(sizeof(AVPacket)); -+ AVPacket *pkt = av_malloc(sizeof(AVPacket)); - if (!pkt) - return pkt; - -@@ -142,7 +140,14 @@ - - if (new_size + data_offset > pkt->buf->size || - !av_buffer_is_writable(pkt->buf)) { -- int ret = av_buffer_realloc(&pkt->buf, new_size + data_offset); -+ int ret; -+ -+ // allocate slightly more than requested to avoid excessive -+ // reallocations -+ if (new_size + data_offset < INT_MAX - new_size/16) -+ new_size += new_size/16; -+ -+ ret = av_buffer_realloc(&pkt->buf, new_size + data_offset); - if (ret < 0) { - pkt->data = old_data; - return ret; -@@ -179,108 +184,6 @@ - return 0; - } - --#if FF_API_AVPACKET_OLD_API --FF_DISABLE_DEPRECATION_WARNINGS --#define ALLOC_MALLOC(data, size) data = av_malloc(size) --#define ALLOC_BUF(data, size) \ --do { \ -- av_buffer_realloc(&pkt->buf, size); \ -- data = pkt->buf ? pkt->buf->data : NULL; \ --} while (0) -- --#define DUP_DATA(dst, src, size, padding, ALLOC) \ -- do { \ -- void *data; \ -- if (padding) { \ -- if ((unsigned)(size) > \ -- (unsigned)(size) + AV_INPUT_BUFFER_PADDING_SIZE) \ -- goto failed_alloc; \ -- ALLOC(data, size + AV_INPUT_BUFFER_PADDING_SIZE); \ -- } else { \ -- ALLOC(data, size); \ -- } \ -- if (!data) \ -- goto failed_alloc; \ -- memcpy(data, src, size); \ -- if (padding) \ -- memset((uint8_t *)data + size, 0, \ -- AV_INPUT_BUFFER_PADDING_SIZE); \ -- dst = data; \ -- } while (0) -- --/* Makes duplicates of data, side_data, but does not copy any other fields */ --static int copy_packet_data(AVPacket *pkt, const AVPacket *src, int dup) --{ -- pkt->data = NULL; -- pkt->side_data = NULL; -- pkt->side_data_elems = 0; -- if (pkt->buf) { -- AVBufferRef *ref = av_buffer_ref(src->buf); -- if (!ref) -- return AVERROR(ENOMEM); -- pkt->buf = ref; -- pkt->data = ref->data; -- } else { -- DUP_DATA(pkt->data, src->data, pkt->size, 1, ALLOC_BUF); -- } -- if (src->side_data_elems && dup) { -- pkt->side_data = src->side_data; -- pkt->side_data_elems = src->side_data_elems; -- } -- if (src->side_data_elems && !dup) { -- return av_copy_packet_side_data(pkt, src); -- } -- return 0; -- --failed_alloc: -- av_packet_unref(pkt); -- return AVERROR(ENOMEM); --} -- --int av_copy_packet_side_data(AVPacket *pkt, const AVPacket *src) --{ -- if (src->side_data_elems) { -- int i; -- DUP_DATA(pkt->side_data, src->side_data, -- src->side_data_elems * sizeof(*src->side_data), 0, ALLOC_MALLOC); -- if (src != pkt) { -- memset(pkt->side_data, 0, -- src->side_data_elems * sizeof(*src->side_data)); -- } -- for (i = 0; i < src->side_data_elems; i++) { -- DUP_DATA(pkt->side_data[i].data, src->side_data[i].data, -- src->side_data[i].size, 1, ALLOC_MALLOC); -- pkt->side_data[i].size = src->side_data[i].size; -- pkt->side_data[i].type = src->side_data[i].type; -- } -- } -- pkt->side_data_elems = src->side_data_elems; -- return 0; -- --failed_alloc: -- av_packet_unref(pkt); -- return AVERROR(ENOMEM); --} -- --int av_dup_packet(AVPacket *pkt) --{ -- AVPacket tmp_pkt; -- -- if (!pkt->buf && pkt->data) { -- tmp_pkt = *pkt; -- return copy_packet_data(pkt, &tmp_pkt, 1); -- } -- return 0; --} -- --int av_copy_packet(AVPacket *dst, const AVPacket *src) --{ -- *dst = *src; -- return copy_packet_data(dst, src, 0); --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - void av_packet_free_side_data(AVPacket *pkt) - { - int i; -@@ -290,22 +193,6 @@ - pkt->side_data_elems = 0; - } - --#if FF_API_AVPACKET_OLD_API --FF_DISABLE_DEPRECATION_WARNINGS --void av_free_packet(AVPacket *pkt) --{ -- if (pkt) { -- if (pkt->buf) -- av_buffer_unref(&pkt->buf); -- pkt->data = NULL; -- pkt->size = 0; -- -- av_packet_free_side_data(pkt); -- } --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, - uint8_t *data, size_t size) - { -@@ -341,16 +228,12 @@ - - - uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -- buffer_size_t size) -+ size_t size) - { - int ret; - uint8_t *data; - --#if FF_API_BUFFER_SIZE_T -- if ((unsigned)size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) --#else - if (size > SIZE_MAX - AV_INPUT_BUFFER_PADDING_SIZE) --#endif - return NULL; - data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); - if (!data) -@@ -366,7 +249,7 @@ - } - - uint8_t *av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, -- buffer_size_t *size) -+ size_t *size) - { - int i; - -@@ -416,102 +299,12 @@ - case AV_PKT_DATA_ICC_PROFILE: return "ICC Profile"; - case AV_PKT_DATA_DOVI_CONF: return "DOVI configuration record"; - case AV_PKT_DATA_S12M_TIMECODE: return "SMPTE ST 12-1:2014 timecode"; -+ case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return "HDR10+ Dynamic Metadata (SMPTE 2094-40)"; - } - return NULL; - } - --#if FF_API_MERGE_SD_API -- --#define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL -- --int av_packet_merge_side_data(AVPacket *pkt){ -- if(pkt->side_data_elems){ -- AVBufferRef *buf; -- int i; -- uint8_t *p; -- uint64_t size= pkt->size + 8LL + AV_INPUT_BUFFER_PADDING_SIZE; -- AVPacket old= *pkt; -- for (i=0; i INT_MAX) -- return AVERROR(EINVAL); -- buf = av_buffer_alloc(size); -- if (!buf) -- return AVERROR(ENOMEM); -- pkt->buf = buf; -- pkt->data = p = buf->data; -- pkt->size = size - AV_INPUT_BUFFER_PADDING_SIZE; -- bytestream_put_buffer(&p, old.data, old.size); -- for (i=old.side_data_elems-1; i>=0; i--) { -- bytestream_put_buffer(&p, old.side_data[i].data, old.side_data[i].size); -- bytestream_put_be32(&p, old.side_data[i].size); -- *p++ = old.side_data[i].type | ((i==old.side_data_elems-1)*128); -- } -- bytestream_put_be64(&p, FF_MERGE_MARKER); -- av_assert0(p-pkt->data == pkt->size); -- memset(p, 0, AV_INPUT_BUFFER_PADDING_SIZE); -- av_packet_unref(&old); -- pkt->side_data_elems = 0; -- pkt->side_data = NULL; -- return 1; -- } -- return 0; --} -- --int av_packet_split_side_data(AVPacket *pkt){ -- if (!pkt->side_data_elems && pkt->size >12 && AV_RB64(pkt->data + pkt->size - 8) == FF_MERGE_MARKER){ -- int i; -- unsigned int size; -- uint8_t *p; -- -- p = pkt->data + pkt->size - 8 - 5; -- for (i=1; ; i++){ -- size = AV_RB32(p); -- if (size>INT_MAX - 5 || p - pkt->data < size) -- return 0; -- if (p[4]&128) -- break; -- if (p - pkt->data < size + 5) -- return 0; -- p-= size+5; -- } -- -- if (i > AV_PKT_DATA_NB) -- return AVERROR(ERANGE); -- -- pkt->side_data = av_malloc_array(i, sizeof(*pkt->side_data)); -- if (!pkt->side_data) -- return AVERROR(ENOMEM); -- -- p= pkt->data + pkt->size - 8 - 5; -- for (i=0; ; i++){ -- size= AV_RB32(p); -- av_assert0(size<=INT_MAX - 5 && p - pkt->data >= size); -- pkt->side_data[i].data = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); -- pkt->side_data[i].size = size; -- pkt->side_data[i].type = p[4]&127; -- if (!pkt->side_data[i].data) -- return AVERROR(ENOMEM); -- memcpy(pkt->side_data[i].data, p-size, size); -- pkt->size -= size + 5; -- if(p[4]&128) -- break; -- p-= size+5; -- } -- pkt->size -= 8; -- pkt->side_data_elems = i+1; -- return 1; -- } -- return 0; --} --#endif -- --#if FF_API_BUFFER_SIZE_T --uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size) --#else - uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size) --#endif - { - uint8_t *data = NULL; - *size = 0; -@@ -523,18 +316,14 @@ - const AVDictionaryEntry *t = NULL; - size_t total_length = 0; - -- while ((t = av_dict_get(dict, "", t, AV_DICT_IGNORE_SUFFIX))) { -+ while ((t = av_dict_iterate(dict, t))) { - for (int i = 0; i < 2; i++) { - const char *str = i ? t->value : t->key; - const size_t len = strlen(str) + 1; - - if (pass) - memcpy(data + total_length, str, len); --#if FF_API_BUFFER_SIZE_T -- else if (len > INT_MAX - total_length) --#else - else if (len > SIZE_MAX - total_length) --#endif - return NULL; - total_length += len; - } -@@ -550,12 +339,8 @@ - return data; - } - --#if FF_API_BUFFER_SIZE_T --int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict) --#else - int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict) --#endif - { - const uint8_t *end; - int ret; -@@ -582,7 +367,7 @@ - } - - int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, -- buffer_size_t size) -+ size_t size) - { - int i; - -@@ -599,29 +384,32 @@ - - int av_packet_copy_props(AVPacket *dst, const AVPacket *src) - { -- int i; -+ int i, ret; - - dst->pts = src->pts; - dst->dts = src->dts; - dst->pos = src->pos; - dst->duration = src->duration; --#if FF_API_CONVERGENCE_DURATION --FF_DISABLE_DEPRECATION_WARNINGS -- dst->convergence_duration = src->convergence_duration; --FF_ENABLE_DEPRECATION_WARNINGS --#endif - dst->flags = src->flags; - dst->stream_index = src->stream_index; -- -+ dst->opaque = src->opaque; -+ dst->time_base = src->time_base; -+ dst->opaque_ref = NULL; - dst->side_data = NULL; - dst->side_data_elems = 0; -+ -+ ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); -+ if (ret < 0) -+ return ret; -+ - for (i = 0; i < src->side_data_elems; i++) { - enum AVPacketSideDataType type = src->side_data[i].type; -- buffer_size_t size = src->side_data[i].size; -+ size_t size = src->side_data[i].size; - uint8_t *src_data = src->side_data[i].data; - uint8_t *dst_data = av_packet_new_side_data(dst, type, size); - - if (!dst_data) { -+ av_buffer_unref(&dst->opaque_ref); - av_packet_free_side_data(dst); - return AVERROR(ENOMEM); - } -@@ -634,6 +422,7 @@ - void av_packet_unref(AVPacket *pkt) - { - av_packet_free_side_data(pkt); -+ av_buffer_unref(&pkt->opaque_ref); - av_buffer_unref(&pkt->buf); - get_packet_defaults(pkt); - } -@@ -742,27 +531,21 @@ - pkt->dts = av_rescale_q(pkt->dts, src_tb, dst_tb); - if (pkt->duration > 0) - pkt->duration = av_rescale_q(pkt->duration, src_tb, dst_tb); --#if FF_API_CONVERGENCE_DURATION --FF_DISABLE_DEPRECATION_WARNINGS -- if (pkt->convergence_duration > 0) -- pkt->convergence_duration = av_rescale_q(pkt->convergence_duration, src_tb, dst_tb); --FF_ENABLE_DEPRECATION_WARNINGS --#endif - } - --int avpriv_packet_list_put(PacketList **packet_buffer, -- PacketList **plast_pktl, -+int avpriv_packet_list_put(PacketList *packet_buffer, - AVPacket *pkt, - int (*copy)(AVPacket *dst, const AVPacket *src), - int flags) - { -- PacketList *pktl = av_mallocz(sizeof(PacketList)); -+ PacketListEntry *pktl = av_malloc(sizeof(*pktl)); - int ret; - - if (!pktl) - return AVERROR(ENOMEM); - - if (copy) { -+ get_packet_defaults(&pktl->pkt); - ret = copy(&pktl->pkt, pkt); - if (ret < 0) { - av_free(pktl); -@@ -777,50 +560,49 @@ - av_packet_move_ref(&pktl->pkt, pkt); - } - -- if (*packet_buffer) -- (*plast_pktl)->next = pktl; -+ pktl->next = NULL; -+ -+ if (packet_buffer->head) -+ packet_buffer->tail->next = pktl; - else -- *packet_buffer = pktl; -+ packet_buffer->head = pktl; - - /* Add the packet in the buffered packet list. */ -- *plast_pktl = pktl; -+ packet_buffer->tail = pktl; - return 0; - } - --int avpriv_packet_list_get(PacketList **pkt_buffer, -- PacketList **pkt_buffer_end, -+int avpriv_packet_list_get(PacketList *pkt_buffer, - AVPacket *pkt) - { -- PacketList *pktl; -- if (!*pkt_buffer) -+ PacketListEntry *pktl = pkt_buffer->head; -+ if (!pktl) - return AVERROR(EAGAIN); -- pktl = *pkt_buffer; - *pkt = pktl->pkt; -- *pkt_buffer = pktl->next; -- if (!pktl->next) -- *pkt_buffer_end = NULL; -+ pkt_buffer->head = pktl->next; -+ if (!pkt_buffer->head) -+ pkt_buffer->tail = NULL; - av_freep(&pktl); - return 0; - } - --void avpriv_packet_list_free(PacketList **pkt_buf, PacketList **pkt_buf_end) -+void avpriv_packet_list_free(PacketList *pkt_buf) - { -- PacketList *tmp = *pkt_buf; -+ PacketListEntry *tmp = pkt_buf->head; - - while (tmp) { -- PacketList *pktl = tmp; -+ PacketListEntry *pktl = tmp; - tmp = pktl->next; - av_packet_unref(&pktl->pkt); - av_freep(&pktl); - } -- *pkt_buf = NULL; -- *pkt_buf_end = NULL; -+ pkt_buf->head = pkt_buf->tail = NULL; - } - - int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type) - { - uint8_t *side_data; -- buffer_size_t side_data_size; -+ size_t side_data_size; - int i; - - side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_QUALITY_STATS, &side_data_size); -@@ -846,7 +628,7 @@ - { - AVProducerReferenceTime *prft; - uint8_t *side_data; -- buffer_size_t side_data_size; -+ size_t side_data_size; - - side_data = av_packet_get_side_data(pkt, AV_PKT_DATA_PRFT, &side_data_size); - if (!side_data) { -diff -Naur a/media/ffvpx/libavcodec/bitstream.c b/media/ffvpx/libavcodec/bitstream.c ---- a/media/ffvpx/libavcodec/bitstream.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bitstream.c 2023-04-06 12:49:40.251394809 +0200 -@@ -28,33 +28,13 @@ - * bitstream api. - */ - -+#include -+#include -+ -+#include "config.h" - #include "libavutil/avassert.h" --#include "libavutil/qsort.h" --#include "avcodec.h" --#include "internal.h" --#include "mathops.h" -+#include "libavutil/intreadwrite.h" - #include "put_bits.h" --#include "vlc.h" -- --const uint8_t ff_log2_run[41]={ -- 0, 0, 0, 0, 1, 1, 1, 1, -- 2, 2, 2, 2, 3, 3, 3, 3, -- 4, 4, 5, 5, 6, 6, 7, 7, -- 8, 9,10,11,12,13,14,15, --16,17,18,19,20,21,22,23, --24, --}; -- --#if FF_API_AVPRIV_PUT_BITS --void avpriv_align_put_bits(PutBitContext *s) --{ -- align_put_bits(s); --} --void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length) --{ -- ff_copy_bits(pb, src, length); --} --#endif - - void ff_put_string(PutBitContext *pb, const char *string, int terminate_string) - { -@@ -90,345 +70,3 @@ - - put_bits(pb, bits, AV_RB16(src + 2 * words) >> (16 - bits)); - } -- --/* VLC decoding */ -- --#define GET_DATA(v, table, i, wrap, size) \ --{ \ -- const uint8_t *ptr = (const uint8_t *)table + i * wrap; \ -- switch(size) { \ -- case 1: \ -- v = *(const uint8_t *)ptr; \ -- break; \ -- case 2: \ -- v = *(const uint16_t *)ptr; \ -- break; \ -- case 4: \ -- default: \ -- av_assert1(size == 4); \ -- v = *(const uint32_t *)ptr; \ -- break; \ -- } \ --} -- -- --static int alloc_table(VLC *vlc, int size, int use_static) --{ -- int index = vlc->table_size; -- -- vlc->table_size += size; -- if (vlc->table_size > vlc->table_allocated) { -- if (use_static) -- abort(); // cannot do anything, init_vlc() is used with too little memory -- vlc->table_allocated += (1 << vlc->bits); -- vlc->table = av_realloc_f(vlc->table, vlc->table_allocated, sizeof(VLC_TYPE) * 2); -- if (!vlc->table) { -- vlc->table_allocated = 0; -- vlc->table_size = 0; -- return AVERROR(ENOMEM); -- } -- memset(vlc->table + vlc->table_allocated - (1 << vlc->bits), 0, sizeof(VLC_TYPE) * 2 << vlc->bits); -- } -- return index; --} -- --#define LOCALBUF_ELEMS 1500 // the maximum currently needed is 1296 by rv34 -- --typedef struct VLCcode { -- uint8_t bits; -- VLC_TYPE symbol; -- /** codeword, with the first bit-to-be-read in the msb -- * (even if intended for a little-endian bitstream reader) */ -- uint32_t code; --} VLCcode; -- --static int vlc_common_init(VLC *vlc_arg, int nb_bits, int nb_codes, -- VLC **vlc, VLC *localvlc, VLCcode **buf, -- int flags) --{ -- *vlc = vlc_arg; -- (*vlc)->bits = nb_bits; -- if (flags & INIT_VLC_USE_NEW_STATIC) { -- av_assert0(nb_codes <= LOCALBUF_ELEMS); -- *localvlc = *vlc_arg; -- *vlc = localvlc; -- (*vlc)->table_size = 0; -- } else { -- (*vlc)->table = NULL; -- (*vlc)->table_allocated = 0; -- (*vlc)->table_size = 0; -- } -- if (nb_codes > LOCALBUF_ELEMS) { -- *buf = av_malloc_array(nb_codes, sizeof(VLCcode)); -- if (!*buf) -- return AVERROR(ENOMEM); -- } -- -- return 0; --} -- --static int compare_vlcspec(const void *a, const void *b) --{ -- const VLCcode *sa = a, *sb = b; -- return (sa->code >> 1) - (sb->code >> 1); --} --/** -- * Build VLC decoding tables suitable for use with get_vlc(). -- * -- * @param vlc the context to be initialized -- * -- * @param table_nb_bits max length of vlc codes to store directly in this table -- * (Longer codes are delegated to subtables.) -- * -- * @param nb_codes number of elements in codes[] -- * -- * @param codes descriptions of the vlc codes -- * These must be ordered such that codes going into the same subtable are contiguous. -- * Sorting by VLCcode.code is sufficient, though not necessary. -- */ --static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, -- VLCcode *codes, int flags) --{ -- int table_size, table_index, index, code_prefix, symbol, subtable_bits; -- int i, j, k, n, nb, inc; -- uint32_t code; -- volatile VLC_TYPE (* volatile table)[2]; // the double volatile is needed to prevent an internal compiler error in gcc 4.2 -- -- if (table_nb_bits > 30) -- return AVERROR(EINVAL); -- table_size = 1 << table_nb_bits; -- table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); -- ff_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size); -- if (table_index < 0) -- return table_index; -- table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index]; -- -- /* first pass: map codes and compute auxiliary table sizes */ -- for (i = 0; i < nb_codes; i++) { -- n = codes[i].bits; -- code = codes[i].code; -- symbol = codes[i].symbol; -- ff_dlog(NULL, "i=%d n=%d code=0x%"PRIx32"\n", i, n, code); -- if (n <= table_nb_bits) { -- /* no need to add another table */ -- j = code >> (32 - table_nb_bits); -- nb = 1 << (table_nb_bits - n); -- inc = 1; -- if (flags & INIT_VLC_OUTPUT_LE) { -- j = bitswap_32(code); -- inc = 1 << n; -- } -- for (k = 0; k < nb; k++) { -- int bits = table[j][1]; -- int oldsym = table[j][0]; -- ff_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n); -- if ((bits || oldsym) && (bits != n || oldsym != symbol)) { -- av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); -- return AVERROR_INVALIDDATA; -- } -- table[j][1] = n; //bits -- table[j][0] = symbol; -- j += inc; -- } -- } else { -- /* fill auxiliary table recursively */ -- n -= table_nb_bits; -- code_prefix = code >> (32 - table_nb_bits); -- subtable_bits = n; -- codes[i].bits = n; -- codes[i].code = code << table_nb_bits; -- for (k = i+1; k < nb_codes; k++) { -- n = codes[k].bits - table_nb_bits; -- if (n <= 0) -- break; -- code = codes[k].code; -- if (code >> (32 - table_nb_bits) != code_prefix) -- break; -- codes[k].bits = n; -- codes[k].code = code << table_nb_bits; -- subtable_bits = FFMAX(subtable_bits, n); -- } -- subtable_bits = FFMIN(subtable_bits, table_nb_bits); -- j = (flags & INIT_VLC_OUTPUT_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix; -- table[j][1] = -subtable_bits; -- ff_dlog(NULL, "%4x: n=%d (subtable)\n", -- j, codes[i].bits + table_nb_bits); -- index = build_table(vlc, subtable_bits, k-i, codes+i, flags); -- if (index < 0) -- return index; -- /* note: realloc has been done, so reload tables */ -- table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index]; -- table[j][0] = index; //code -- if (table[j][0] != index) { -- avpriv_request_sample(NULL, "strange codes"); -- return AVERROR_PATCHWELCOME; -- } -- i = k-1; -- } -- } -- -- for (i = 0; i < table_size; i++) { -- if (table[i][1] == 0) //bits -- table[i][0] = -1; //codes -- } -- -- return table_index; --} -- --static int vlc_common_end(VLC *vlc, int nb_bits, int nb_codes, VLCcode *codes, -- int flags, VLC *vlc_arg, VLCcode localbuf[LOCALBUF_ELEMS]) --{ -- int ret = build_table(vlc, nb_bits, nb_codes, codes, flags); -- -- if (flags & INIT_VLC_USE_NEW_STATIC) { -- if (vlc->table_size != vlc->table_allocated && -- !(flags & (INIT_VLC_STATIC_OVERLONG & ~INIT_VLC_USE_NEW_STATIC))) -- av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); -- av_assert0(ret >= 0); -- *vlc_arg = *vlc; -- } else { -- if (codes != localbuf) -- av_free(codes); -- if (ret < 0) { -- av_freep(&vlc->table); -- return ret; -- } -- } -- return 0; --} -- --/* Build VLC decoding tables suitable for use with get_vlc(). -- -- 'nb_bits' sets the decoding table size (2^nb_bits) entries. The -- bigger it is, the faster is the decoding. But it should not be too -- big to save memory and L1 cache. '9' is a good compromise. -- -- 'nb_codes' : number of vlcs codes -- -- 'bits' : table which gives the size (in bits) of each vlc code. -- -- 'codes' : table which gives the bit pattern of of each vlc code. -- -- 'symbols' : table which gives the values to be returned from get_vlc(). -- -- 'xxx_wrap' : give the number of bytes between each entry of the -- 'bits' or 'codes' tables. -- -- 'xxx_size' : gives the number of bytes of each entry of the 'bits' -- or 'codes' tables. Currently 1,2 and 4 are supported. -- -- 'wrap' and 'size' make it possible to use any memory configuration and types -- (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables. --*/ --int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, -- const void *bits, int bits_wrap, int bits_size, -- const void *codes, int codes_wrap, int codes_size, -- const void *symbols, int symbols_wrap, int symbols_size, -- int flags) --{ -- VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; -- int i, j, ret; -- VLC localvlc, *vlc; -- -- ret = vlc_common_init(vlc_arg, nb_bits, nb_codes, &vlc, &localvlc, -- &buf, flags); -- if (ret < 0) -- return ret; -- -- av_assert0(symbols_size <= 2 || !symbols); -- j = 0; --#define COPY(condition)\ -- for (i = 0; i < nb_codes; i++) { \ -- unsigned len; \ -- GET_DATA(len, bits, i, bits_wrap, bits_size); \ -- if (!(condition)) \ -- continue; \ -- if (len > 3*nb_bits || len > 32) { \ -- av_log(NULL, AV_LOG_ERROR, "Too long VLC (%u) in init_vlc\n", len);\ -- if (buf != localbuf) \ -- av_free(buf); \ -- return AVERROR(EINVAL); \ -- } \ -- buf[j].bits = len; \ -- GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \ -- if (buf[j].code >= (1LL< nb_bits); -- // qsort is the slowest part of init_vlc, and could probably be improved or avoided -- AV_QSORT(buf, j, struct VLCcode, compare_vlcspec); -- COPY(len && len <= nb_bits); -- nb_codes = j; -- -- return vlc_common_end(vlc, nb_bits, nb_codes, buf, -- flags, vlc_arg, localbuf); --} -- --int ff_init_vlc_from_lengths(VLC *vlc_arg, int nb_bits, int nb_codes, -- const int8_t *lens, int lens_wrap, -- const void *symbols, int symbols_wrap, int symbols_size, -- int offset, int flags, void *logctx) --{ -- VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; -- VLC localvlc, *vlc; -- uint64_t code; -- int ret, j, len_max = FFMIN(32, 3 * nb_bits); -- -- ret = vlc_common_init(vlc_arg, nb_bits, nb_codes, &vlc, &localvlc, -- &buf, flags); -- if (ret < 0) -- return ret; -- -- j = code = 0; -- for (int i = 0; i < nb_codes; i++, lens += lens_wrap) { -- int len = *lens; -- if (len > 0) { -- unsigned sym; -- -- buf[j].bits = len; -- if (symbols) -- GET_DATA(sym, symbols, i, symbols_wrap, symbols_size) -- else -- sym = i; -- buf[j].symbol = sym + offset; -- buf[j++].code = code; -- } else if (len < 0) { -- len = -len; -- } else -- continue; -- if (len > len_max || code & ((1U << (32 - len)) - 1)) { -- av_log(logctx, AV_LOG_ERROR, "Invalid VLC (length %u)\n", len); -- goto fail; -- } -- code += 1U << (32 - len); -- if (code > UINT32_MAX + 1ULL) { -- av_log(logctx, AV_LOG_ERROR, "Overdetermined VLC tree\n"); -- goto fail; -- } -- } -- return vlc_common_end(vlc, nb_bits, j, buf, -- flags, vlc_arg, localbuf); --fail: -- if (buf != localbuf) -- av_free(buf); -- return AVERROR_INVALIDDATA; --} -- --void ff_free_vlc(VLC *vlc) --{ -- av_freep(&vlc->table); --} -diff -Naur a/media/ffvpx/libavcodec/bitstream_filter.c b/media/ffvpx/libavcodec/bitstream_filter.c ---- a/media/ffvpx/libavcodec/bitstream_filter.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bitstream_filter.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,185 +0,0 @@ --/* -- * copyright (c) 2006 Michael Niedermayer -- * -- * 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 -- --#include "avcodec.h" --#include "libavutil/internal.h" --#include "libavutil/mem.h" --#include "libavutil/opt.h" -- --#if FF_API_OLD_BSF --FF_DISABLE_DEPRECATION_WARNINGS -- --const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f) --{ -- const AVBitStreamFilter *filter = NULL; -- void *opaque = NULL; -- -- while (filter != f) -- filter = av_bsf_iterate(&opaque); -- -- return av_bsf_iterate(&opaque); --} -- --void av_register_bitstream_filter(AVBitStreamFilter *bsf) --{ --} -- --typedef struct BSFCompatContext { -- AVBSFContext *ctx; -- int extradata_updated; --} BSFCompatContext; -- --AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) --{ -- AVBitStreamFilterContext *ctx = NULL; -- BSFCompatContext *priv = NULL; -- const AVBitStreamFilter *bsf; -- -- bsf = av_bsf_get_by_name(name); -- if (!bsf) -- return NULL; -- -- ctx = av_mallocz(sizeof(*ctx)); -- if (!ctx) -- return NULL; -- -- priv = av_mallocz(sizeof(*priv)); -- if (!priv) -- goto fail; -- -- -- ctx->filter = bsf; -- ctx->priv_data = priv; -- -- return ctx; -- --fail: -- if (priv) -- av_bsf_free(&priv->ctx); -- av_freep(&priv); -- av_freep(&ctx); -- return NULL; --} -- --void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc) --{ -- BSFCompatContext *priv; -- -- if (!bsfc) -- return; -- -- priv = bsfc->priv_data; -- -- av_bsf_free(&priv->ctx); -- av_freep(&bsfc->priv_data); -- av_free(bsfc); --} -- --int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, -- AVCodecContext *avctx, const char *args, -- uint8_t **poutbuf, int *poutbuf_size, -- const uint8_t *buf, int buf_size, int keyframe) --{ -- BSFCompatContext *priv = bsfc->priv_data; -- AVPacket pkt = { 0 }; -- int ret; -- -- if (!priv->ctx) { -- ret = av_bsf_alloc(bsfc->filter, &priv->ctx); -- if (ret < 0) -- return ret; -- -- ret = avcodec_parameters_from_context(priv->ctx->par_in, avctx); -- if (ret < 0) -- return ret; -- -- priv->ctx->time_base_in = avctx->time_base; -- -- if (bsfc->args && bsfc->filter->priv_class) { -- const AVOption *opt = av_opt_next(priv->ctx->priv_data, NULL); -- const char * shorthand[2] = {NULL}; -- -- if (opt) -- shorthand[0] = opt->name; -- -- ret = av_opt_set_from_string(priv->ctx->priv_data, bsfc->args, shorthand, "=", ":"); -- if (ret < 0) -- return ret; -- } -- -- ret = av_bsf_init(priv->ctx); -- if (ret < 0) -- return ret; -- } -- -- pkt.data = (uint8_t *)buf; -- pkt.size = buf_size; -- -- ret = av_bsf_send_packet(priv->ctx, &pkt); -- if (ret < 0) -- return ret; -- -- *poutbuf = NULL; -- *poutbuf_size = 0; -- -- ret = av_bsf_receive_packet(priv->ctx, &pkt); -- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) -- return 0; -- else if (ret < 0) -- return ret; -- -- *poutbuf = av_malloc(pkt.size + AV_INPUT_BUFFER_PADDING_SIZE); -- if (!*poutbuf) { -- av_packet_unref(&pkt); -- return AVERROR(ENOMEM); -- } -- -- *poutbuf_size = pkt.size; -- memcpy(*poutbuf, pkt.data, pkt.size); -- -- av_packet_unref(&pkt); -- -- /* drain all the remaining packets we cannot return */ -- while (ret >= 0) { -- ret = av_bsf_receive_packet(priv->ctx, &pkt); -- av_packet_unref(&pkt); -- } -- -- if (!priv->extradata_updated) { -- /* update extradata in avctx from the output codec parameters */ -- if (priv->ctx->par_out->extradata_size && (!args || !strstr(args, "private_spspps_buf"))) { -- av_freep(&avctx->extradata); -- avctx->extradata_size = 0; -- avctx->extradata = av_mallocz(priv->ctx->par_out->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); -- if (!avctx->extradata) -- return AVERROR(ENOMEM); -- memcpy(avctx->extradata, priv->ctx->par_out->extradata, priv->ctx->par_out->extradata_size); -- avctx->extradata_size = priv->ctx->par_out->extradata_size; -- } -- -- priv->extradata_updated = 1; -- } -- -- return 1; --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -diff -Naur a/media/ffvpx/libavcodec/bitstream_filters.c b/media/ffvpx/libavcodec/bitstream_filters.c ---- a/media/ffvpx/libavcodec/bitstream_filters.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bitstream_filters.c 2023-04-06 12:50:24.491176503 +0200 -@@ -16,70 +16,69 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "config.h" -+#include -+#include - --#include "libavutil/common.h" - #include "libavutil/log.h" - --#include "avcodec.h" -+#include "bsf.h" - #include "bsf_internal.h" - --extern const AVBitStreamFilter ff_aac_adtstoasc_bsf; --extern const AVBitStreamFilter ff_av1_frame_merge_bsf; --extern const AVBitStreamFilter ff_av1_frame_split_bsf; --extern const AVBitStreamFilter ff_av1_metadata_bsf; --extern const AVBitStreamFilter ff_chomp_bsf; --extern const AVBitStreamFilter ff_dump_extradata_bsf; --extern const AVBitStreamFilter ff_dca_core_bsf; --extern const AVBitStreamFilter ff_eac3_core_bsf; --extern const AVBitStreamFilter ff_extract_extradata_bsf; --extern const AVBitStreamFilter ff_filter_units_bsf; --extern const AVBitStreamFilter ff_h264_metadata_bsf; --extern const AVBitStreamFilter ff_h264_mp4toannexb_bsf; --extern const AVBitStreamFilter ff_h264_redundant_pps_bsf; --extern const AVBitStreamFilter ff_hapqa_extract_bsf; --extern const AVBitStreamFilter ff_hevc_metadata_bsf; --extern const AVBitStreamFilter ff_hevc_mp4toannexb_bsf; --extern const AVBitStreamFilter ff_imx_dump_header_bsf; --extern const AVBitStreamFilter ff_mjpeg2jpeg_bsf; --extern const AVBitStreamFilter ff_mjpega_dump_header_bsf; --extern const AVBitStreamFilter ff_mp3_header_decompress_bsf; --extern const AVBitStreamFilter ff_mpeg2_metadata_bsf; --extern const AVBitStreamFilter ff_mpeg4_unpack_bframes_bsf; --extern const AVBitStreamFilter ff_mov2textsub_bsf; --extern const AVBitStreamFilter ff_noise_bsf; --extern const AVBitStreamFilter ff_null_bsf; --extern const AVBitStreamFilter ff_opus_metadata_bsf; --extern const AVBitStreamFilter ff_pcm_rechunk_bsf; --extern const AVBitStreamFilter ff_prores_metadata_bsf; --extern const AVBitStreamFilter ff_remove_extradata_bsf; --extern const AVBitStreamFilter ff_setts_bsf; --extern const AVBitStreamFilter ff_text2movsub_bsf; --extern const AVBitStreamFilter ff_trace_headers_bsf; --extern const AVBitStreamFilter ff_truehd_core_bsf; --extern const AVBitStreamFilter ff_vp9_metadata_bsf; --extern const AVBitStreamFilter ff_vp9_raw_reorder_bsf; --extern const AVBitStreamFilter ff_vp9_superframe_bsf; --extern const AVBitStreamFilter ff_vp9_superframe_split_bsf; -+extern const FFBitStreamFilter ff_aac_adtstoasc_bsf; -+extern const FFBitStreamFilter ff_av1_frame_merge_bsf; -+extern const FFBitStreamFilter ff_av1_frame_split_bsf; -+extern const FFBitStreamFilter ff_av1_metadata_bsf; -+extern const FFBitStreamFilter ff_chomp_bsf; -+extern const FFBitStreamFilter ff_dump_extradata_bsf; -+extern const FFBitStreamFilter ff_dca_core_bsf; -+extern const FFBitStreamFilter ff_dts2pts_bsf; -+extern const FFBitStreamFilter ff_dv_error_marker_bsf; -+extern const FFBitStreamFilter ff_eac3_core_bsf; -+extern const FFBitStreamFilter ff_extract_extradata_bsf; -+extern const FFBitStreamFilter ff_filter_units_bsf; -+extern const FFBitStreamFilter ff_h264_metadata_bsf; -+extern const FFBitStreamFilter ff_h264_mp4toannexb_bsf; -+extern const FFBitStreamFilter ff_h264_redundant_pps_bsf; -+extern const FFBitStreamFilter ff_hapqa_extract_bsf; -+extern const FFBitStreamFilter ff_hevc_metadata_bsf; -+extern const FFBitStreamFilter ff_hevc_mp4toannexb_bsf; -+extern const FFBitStreamFilter ff_imx_dump_header_bsf; -+extern const FFBitStreamFilter ff_media100_to_mjpegb_bsf; -+extern const FFBitStreamFilter ff_mjpeg2jpeg_bsf; -+extern const FFBitStreamFilter ff_mjpega_dump_header_bsf; -+extern const FFBitStreamFilter ff_mp3_header_decompress_bsf; -+extern const FFBitStreamFilter ff_mpeg2_metadata_bsf; -+extern const FFBitStreamFilter ff_mpeg4_unpack_bframes_bsf; -+extern const FFBitStreamFilter ff_mov2textsub_bsf; -+extern const FFBitStreamFilter ff_noise_bsf; -+extern const FFBitStreamFilter ff_null_bsf; -+extern const FFBitStreamFilter ff_opus_metadata_bsf; -+extern const FFBitStreamFilter ff_pcm_rechunk_bsf; -+extern const FFBitStreamFilter ff_pgs_frame_merge_bsf; -+extern const FFBitStreamFilter ff_prores_metadata_bsf; -+extern const FFBitStreamFilter ff_remove_extradata_bsf; -+extern const FFBitStreamFilter ff_setts_bsf; -+extern const FFBitStreamFilter ff_text2movsub_bsf; -+extern const FFBitStreamFilter ff_trace_headers_bsf; -+extern const FFBitStreamFilter ff_truehd_core_bsf; -+extern const FFBitStreamFilter ff_vp9_metadata_bsf; -+extern const FFBitStreamFilter ff_vp9_raw_reorder_bsf; -+extern const FFBitStreamFilter ff_vp9_superframe_bsf; -+extern const FFBitStreamFilter ff_vp9_superframe_split_bsf; - - #include "libavcodec/bsf_list.c" - - const AVBitStreamFilter *av_bsf_iterate(void **opaque) - { - uintptr_t i = (uintptr_t)*opaque; -- const AVBitStreamFilter *f = bitstream_filters[i]; -+ const FFBitStreamFilter *f = bitstream_filters[i]; - -- if (f) -+ if (f) { - *opaque = (void*)(i + 1); -- -- return f; --} -- --#if FF_API_NEXT --const AVBitStreamFilter *av_bsf_next(void **opaque) { -- return av_bsf_iterate(opaque); -+ return &f->p; -+ } -+ return NULL; - } --#endif - - const AVBitStreamFilter *av_bsf_get_by_name(const char *name) - { -@@ -97,28 +96,6 @@ - return NULL; - } - --#if FF_API_CHILD_CLASS_NEXT --const AVClass *ff_bsf_child_class_next(const AVClass *prev) --{ -- const AVBitStreamFilter *f = NULL; -- void *i = 0; -- -- /* find the filter that corresponds to prev */ -- while (prev && (f = av_bsf_iterate(&i))) { -- if (f->priv_class == prev) { -- break; -- } -- } -- -- /* find next filter with priv options */ -- while ((f = av_bsf_iterate(&i))) { -- if (f->priv_class) -- return f->priv_class; -- } -- return NULL; --} --#endif -- - const AVClass *ff_bsf_child_class_iterate(void **opaque) - { - const AVBitStreamFilter *f; -diff -Naur a/media/ffvpx/libavcodec/blockdsp.h b/media/ffvpx/libavcodec/blockdsp.h ---- a/media/ffvpx/libavcodec/blockdsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/blockdsp.h 2023-04-06 12:50:06.970471013 +0200 -@@ -22,9 +22,6 @@ - #include - #include - --#include "avcodec.h" --#include "version.h" -- - /* add and put pixel (decoding) - * Block sizes for op_pixels_func are 8x4,8x8 16x8 16x16. - * h for op_pixels_func is limited to { width / 2, width }, -@@ -39,12 +36,12 @@ - op_fill_func fill_block_tab[2]; - } BlockDSPContext; - --void ff_blockdsp_init(BlockDSPContext *c, AVCodecContext *avctx); -+void ff_blockdsp_init(BlockDSPContext *c); - - void ff_blockdsp_init_alpha(BlockDSPContext *c); - void ff_blockdsp_init_arm(BlockDSPContext *c); - void ff_blockdsp_init_ppc(BlockDSPContext *c); --void ff_blockdsp_init_x86(BlockDSPContext *c, AVCodecContext *avctx); -+void ff_blockdsp_init_x86(BlockDSPContext *c); - void ff_blockdsp_init_mips(BlockDSPContext *c); - - #endif /* AVCODEC_BLOCKDSP_H */ -diff -Naur a/media/ffvpx/libavcodec/bsf.c b/media/ffvpx/libavcodec/bsf.c ---- a/media/ffvpx/libavcodec/bsf.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bsf.c 2023-04-06 12:49:40.251394809 +0200 -@@ -18,6 +18,8 @@ - - #include - -+#include "config_components.h" -+ - #include "libavutil/avassert.h" - #include "libavutil/log.h" - #include "libavutil/mem.h" -@@ -32,29 +34,40 @@ - - #define IS_EMPTY(pkt) (!(pkt)->data && !(pkt)->side_data_elems) - --struct AVBSFInternal { -+static av_always_inline const FFBitStreamFilter *ff_bsf(const AVBitStreamFilter *bsf) -+{ -+ return (const FFBitStreamFilter*)bsf; -+} -+ -+typedef struct FFBSFContext { -+ AVBSFContext pub; - AVPacket *buffer_pkt; - int eof; --}; -+} FFBSFContext; -+ -+static av_always_inline FFBSFContext *ffbsfcontext(AVBSFContext *ctx) -+{ -+ return (FFBSFContext *)ctx; -+} - - void av_bsf_free(AVBSFContext **pctx) - { - AVBSFContext *ctx; -+ FFBSFContext *bsfi; - - if (!pctx || !*pctx) - return; -- ctx = *pctx; -+ ctx = *pctx; -+ bsfi = ffbsfcontext(ctx); - -- if (ctx->internal) { -- if (ctx->filter->close) -- ctx->filter->close(ctx); -- av_packet_free(&ctx->internal->buffer_pkt); -- av_freep(&ctx->internal); -+ if (ctx->priv_data) { -+ if (ff_bsf(ctx->filter)->close) -+ ff_bsf(ctx->filter)->close(ctx); -+ if (ctx->filter->priv_class) -+ av_opt_free(ctx->priv_data); -+ av_freep(&ctx->priv_data); - } -- if (ctx->filter->priv_class && ctx->priv_data) -- av_opt_free(ctx->priv_data); -- -- av_freep(&ctx->priv_data); -+ av_packet_free(&bsfi->buffer_pkt); - - avcodec_parameters_free(&ctx->par_in); - avcodec_parameters_free(&ctx->par_out); -@@ -80,9 +93,6 @@ - .item_name = bsf_to_name, - .version = LIBAVUTIL_VERSION_INT, - .child_next = bsf_child_next, --#if FF_API_CHILD_CLASS_NEXT -- .child_class_next = ff_bsf_child_class_next, --#endif - .child_class_iterate = ff_bsf_child_class_iterate, - .category = AV_CLASS_CATEGORY_BITSTREAM_FILTER, - }; -@@ -95,12 +105,13 @@ - int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx) - { - AVBSFContext *ctx; -- AVBSFInternal *bsfi; -+ FFBSFContext *bsfi; - int ret; - -- ctx = av_mallocz(sizeof(*ctx)); -- if (!ctx) -+ bsfi = av_mallocz(sizeof(*bsfi)); -+ if (!bsfi) - return AVERROR(ENOMEM); -+ ctx = &bsfi->pub; - - ctx->av_class = &bsf_class; - ctx->filter = filter; -@@ -112,8 +123,8 @@ - goto fail; - } - /* allocate priv data and init private options */ -- if (filter->priv_data_size) { -- ctx->priv_data = av_mallocz(filter->priv_data_size); -+ if (ff_bsf(filter)->priv_data_size) { -+ ctx->priv_data = av_mallocz(ff_bsf(filter)->priv_data_size); - if (!ctx->priv_data) { - ret = AVERROR(ENOMEM); - goto fail; -@@ -123,15 +134,6 @@ - av_opt_set_defaults(ctx->priv_data); - } - } -- /* Allocate AVBSFInternal; must happen after priv_data has been allocated -- * so that a filter->close needing priv_data is never called without. */ -- bsfi = av_mallocz(sizeof(*bsfi)); -- if (!bsfi) { -- ret = AVERROR(ENOMEM); -- goto fail; -- } -- ctx->internal = bsfi; -- - bsfi->buffer_pkt = av_packet_alloc(); - if (!bsfi->buffer_pkt) { - ret = AVERROR(ENOMEM); -@@ -160,9 +162,9 @@ - "bitstream filter '%s'. Supported codecs are: ", - desc ? desc->name : "unknown", ctx->par_in->codec_id, ctx->filter->name); - for (i = 0; ctx->filter->codec_ids[i] != AV_CODEC_ID_NONE; i++) { -- desc = avcodec_descriptor_get(ctx->filter->codec_ids[i]); -+ enum AVCodecID codec_id = ctx->filter->codec_ids[i]; - av_log(ctx, AV_LOG_ERROR, "%s (%d) ", -- desc ? desc->name : "unknown", ctx->filter->codec_ids[i]); -+ avcodec_get_name(codec_id), codec_id); - } - av_log(ctx, AV_LOG_ERROR, "\n"); - return AVERROR(EINVAL); -@@ -177,8 +179,8 @@ - - ctx->time_base_out = ctx->time_base_in; - -- if (ctx->filter->init) { -- ret = ctx->filter->init(ctx); -+ if (ff_bsf(ctx->filter)->init) { -+ ret = ff_bsf(ctx->filter)->init(ctx); - if (ret < 0) - return ret; - } -@@ -188,22 +190,24 @@ - - void av_bsf_flush(AVBSFContext *ctx) - { -- AVBSFInternal *bsfi = ctx->internal; -+ FFBSFContext *const bsfi = ffbsfcontext(ctx); - - bsfi->eof = 0; - - av_packet_unref(bsfi->buffer_pkt); - -- if (ctx->filter->flush) -- ctx->filter->flush(ctx); -+ if (ff_bsf(ctx->filter)->flush) -+ ff_bsf(ctx->filter)->flush(ctx); - } - - int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt) - { -- AVBSFInternal *bsfi = ctx->internal; -+ FFBSFContext *const bsfi = ffbsfcontext(ctx); - int ret; - - if (!pkt || IS_EMPTY(pkt)) { -+ if (pkt) -+ av_packet_unref(pkt); - bsfi->eof = 1; - return 0; - } -@@ -226,12 +230,12 @@ - - int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt) - { -- return ctx->filter->filter(ctx, pkt); -+ return ff_bsf(ctx->filter)->filter(ctx, pkt); - } - - int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt) - { -- AVBSFInternal *bsfi = ctx->internal; -+ FFBSFContext *const bsfi = ffbsfcontext(ctx); - AVPacket *tmp_pkt; - - if (bsfi->eof) -@@ -252,7 +256,7 @@ - - int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt) - { -- AVBSFInternal *bsfi = ctx->internal; -+ FFBSFContext *const bsfi = ffbsfcontext(ctx); - - if (bsfi->eof) - return AVERROR_EOF; -@@ -399,10 +403,10 @@ - .version = LIBAVUTIL_VERSION_INT, - }; - --const AVBitStreamFilter ff_list_bsf = { -- .name = "bsf_list", -+static const FFBitStreamFilter list_bsf = { -+ .p.name = "bsf_list", -+ .p.priv_class = &bsf_list_class, - .priv_data_size = sizeof(BSFListContext), -- .priv_class = &bsf_list_class, - .init = bsf_list_init, - .filter = bsf_list_filter, - .flush = bsf_list_flush, -@@ -495,7 +499,7 @@ - goto end; - } - -- ret = av_bsf_alloc(&ff_list_bsf, bsf); -+ ret = av_bsf_alloc(&list_bsf.p, bsf); - if (ret < 0) - return ret; - -@@ -523,7 +527,6 @@ - int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst) - { - AVBSFList *lst; -- char *bsf_str, *buf, *dup, *saveptr; - int ret; - - if (!str) -@@ -533,28 +536,27 @@ - if (!lst) - return AVERROR(ENOMEM); - -- if (!(dup = buf = av_strdup(str))) { -- ret = AVERROR(ENOMEM); -- goto end; -- } -- -- while (bsf_str = av_strtok(buf, ",", &saveptr)) { -+ do { -+ char *bsf_str = av_get_token(&str, ","); - ret = bsf_parse_single(bsf_str, lst); -+ av_free(bsf_str); - if (ret < 0) - goto end; -- -- buf = NULL; -- } -+ } while (*str && *++str); - - ret = av_bsf_list_finalize(&lst, bsf_lst); - end: - if (ret < 0) - av_bsf_list_free(&lst); -- av_free(dup); - return ret; - } - - int av_bsf_get_null_filter(AVBSFContext **bsf) - { -- return av_bsf_alloc(&ff_list_bsf, bsf); -+#if CONFIG_NULL_BSF -+ extern const FFBitStreamFilter ff_null_bsf; -+ return av_bsf_alloc(&ff_null_bsf.p, bsf); -+#else -+ return av_bsf_alloc(&list_bsf.p, bsf); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/bsf.h b/media/ffvpx/libavcodec/bsf.h ---- a/media/ffvpx/libavcodec/bsf.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bsf.h 2023-04-06 12:50:06.970471013 +0200 -@@ -30,12 +30,31 @@ - #include "packet.h" - - /** -- * @addtogroup lavc_core -+ * @defgroup lavc_bsf Bitstream filters -+ * @ingroup libavc -+ * -+ * Bitstream filters transform encoded media data without decoding it. This -+ * allows e.g. manipulating various header values. Bitstream filters operate on -+ * @ref AVPacket "AVPackets". -+ * -+ * The bitstream filtering API is centered around two structures: -+ * AVBitStreamFilter and AVBSFContext. The former represents a bitstream filter -+ * in abstract, the latter a specific filtering process. Obtain an -+ * AVBitStreamFilter using av_bsf_get_by_name() or av_bsf_iterate(), then pass -+ * it to av_bsf_alloc() to create an AVBSFContext. Fill in the user-settable -+ * AVBSFContext fields, as described in its documentation, then call -+ * av_bsf_init() to prepare the filter context for use. -+ * -+ * Submit packets for filtering using av_bsf_send_packet(), obtain filtered -+ * results with av_bsf_receive_packet(). When no more input packets will be -+ * sent, submit a NULL AVPacket to signal the end of the stream to the filter. -+ * av_bsf_receive_packet() will then return trailing packets, if any are -+ * produced by the filter. -+ * -+ * Finally, free the filter context with av_bsf_free(). - * @{ - */ - --typedef struct AVBSFInternal AVBSFInternal; -- - /** - * The bitstream filter state. - * -@@ -58,12 +77,6 @@ - const struct AVBitStreamFilter *filter; - - /** -- * Opaque libavcodec internal data. Must not be touched by the caller in any -- * way. -- */ -- AVBSFInternal *internal; -- -- /** - * Opaque filter-specific private data. If filter->priv_class is non-NULL, - * this is an AVOptions-enabled struct. - */ -@@ -115,20 +128,6 @@ - * code to this class. - */ - const AVClass *priv_class; -- -- /***************************************************************** -- * No fields below this line are part of the public API. They -- * may not be used outside of libavcodec and can be changed and -- * removed at will. -- * New public fields should be added right above. -- ***************************************************************** -- */ -- -- int priv_data_size; -- int (*init)(AVBSFContext *ctx); -- int (*filter)(AVBSFContext *ctx, AVPacket *pkt); -- void (*close)(AVBSFContext *ctx); -- void (*flush)(AVBSFContext *ctx); - } AVBitStreamFilter; - - /** -@@ -154,9 +153,9 @@ - * av_bsf_init() before sending any data to the filter. - * - * @param filter the filter for which to allocate an instance. -- * @param ctx a pointer into which the pointer to the newly-allocated context -- * will be written. It must be freed with av_bsf_free() after the -- * filtering is done. -+ * @param[out] ctx a pointer into which the pointer to the newly-allocated context -+ * will be written. It must be freed with av_bsf_free() after the -+ * filtering is done. - * - * @return 0 on success, a negative AVERROR code on failure - */ -@@ -165,6 +164,8 @@ - /** - * Prepare the filter for use, after all the parameters and options have been - * set. -+ * -+ * @param ctx a AVBSFContext previously allocated with av_bsf_alloc() - */ - int av_bsf_init(AVBSFContext *ctx); - -@@ -175,6 +176,7 @@ - * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or - * AVERROR_EOF. - * -+ * @param ctx an initialized AVBSFContext - * @param pkt the packet to filter. The bitstream filter will take ownership of - * the packet and reset the contents of pkt. pkt is not touched if an error occurs. - * If pkt is empty (i.e. NULL, or pkt->data is NULL and pkt->side_data_elems zero), -@@ -182,15 +184,18 @@ - * sending more empty packets does nothing) and will cause the filter to output - * any packets it may have buffered internally. - * -- * @return 0 on success. AVERROR(EAGAIN) if packets need to be retrieved from the -- * filter (using av_bsf_receive_packet()) before new input can be consumed. Another -- * negative AVERROR value if an error occurs. -+ * @return -+ * - 0 on success. -+ * - AVERROR(EAGAIN) if packets need to be retrieved from the filter (using -+ * av_bsf_receive_packet()) before new input can be consumed. -+ * - Another negative AVERROR value if an error occurs. - */ - int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt); - - /** - * Retrieve a filtered packet. - * -+ * @param ctx an initialized AVBSFContext - * @param[out] pkt this struct will be filled with the contents of the filtered - * packet. It is owned by the caller and must be freed using - * av_packet_unref() when it is no longer needed. -@@ -201,10 +206,12 @@ - * overwritten by the returned data. On failure, pkt is not - * touched. - * -- * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the -- * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there -- * will be no further output from the filter. Another negative AVERROR value if -- * an error occurs. -+ * @return -+ * - 0 on success. -+ * - AVERROR(EAGAIN) if more packets need to be sent to the filter (using -+ * av_bsf_send_packet()) to get more output. -+ * - AVERROR_EOF if there will be no further output from the filter. -+ * - Another negative AVERROR value if an error occurs. - * - * @note one input packet may result in several output packets, so after sending - * a packet with av_bsf_send_packet(), this function needs to be called -diff -Naur a/media/ffvpx/libavcodec/bsf_internal.h b/media/ffvpx/libavcodec/bsf_internal.h ---- a/media/ffvpx/libavcodec/bsf_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bsf_internal.h 2023-04-06 12:49:40.251394809 +0200 -@@ -24,6 +24,19 @@ - #include "bsf.h" - #include "packet.h" - -+typedef struct FFBitStreamFilter { -+ /** -+ * The public AVBitStreamFilter. See bsf.h for it. -+ */ -+ AVBitStreamFilter p; -+ -+ int priv_data_size; -+ int (*init)(AVBSFContext *ctx); -+ int (*filter)(AVBSFContext *ctx, AVPacket *pkt); -+ void (*close)(AVBSFContext *ctx); -+ void (*flush)(AVBSFContext *ctx); -+} FFBitStreamFilter; -+ - /** - * Called by the bitstream filters to get the next packet for filtering. - * The filter is responsible for either freeing the packet or passing it to the -@@ -42,10 +55,6 @@ - */ - int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt); - --#if FF_API_CHILD_CLASS_NEXT --const AVClass *ff_bsf_child_class_next(const AVClass *prev); --#endif -- - const AVClass *ff_bsf_child_class_iterate(void **opaque); - - #endif /* AVCODEC_BSF_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavcodec/bsf_list.c b/media/ffvpx/libavcodec/bsf_list.c ---- a/media/ffvpx/libavcodec/bsf_list.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/bsf_list.c 2023-04-06 12:49:45.615610885 +0200 -@@ -1,4 +1,6 @@ --static const AVBitStreamFilter * const bitstream_filters[] = { -+#include "config_components.h" -+ -+static const FFBitStreamFilter * const bitstream_filters[] = { - &ff_null_bsf, - #if CONFIG_VP9_SUPERFRAME_SPLIT_BSF - &ff_vp9_superframe_split_bsf, -diff -Naur a/media/ffvpx/libavcodec/cbs_av1.c b/media/ffvpx/libavcodec/cbs_av1.c ---- a/media/ffvpx/libavcodec/cbs_av1.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/cbs_av1.c 2023-04-06 12:50:06.971471053 +0200 -@@ -20,10 +20,10 @@ - #include "libavutil/opt.h" - #include "libavutil/pixfmt.h" - -+#include "avcodec.h" - #include "cbs.h" - #include "cbs_internal.h" - #include "cbs_av1.h" --#include "internal.h" - - - static int cbs_av1_read_uvlc(CodedBitstreamContext *ctx, GetBitContext *gbc, -@@ -828,7 +828,7 @@ - goto fail; - } - -- err = ff_cbs_insert_unit_data(frag, -1, header.obu_type, -+ err = ff_cbs_append_unit_data(frag, header.obu_type, - data, obu_length, frag->data_ref); - if (err < 0) - goto fail; -@@ -878,7 +878,7 @@ - GetBitContext gbc; - int err, start_pos, end_pos; - -- err = ff_cbs_alloc_unit_content2(ctx, unit); -+ err = ff_cbs_alloc_unit_content(ctx, unit); - if (err < 0) - return err; - obu = unit->content; -@@ -1058,15 +1058,31 @@ - AV1RawTileData *td; - size_t header_size; - int err, start_pos, end_pos, data_pos; -+ CodedBitstreamAV1Context av1ctx; - - // OBUs in the normal bitstream format must contain a size field - // in every OBU (in annex B it is optional, but we don't support - // writing that). - obu->header.obu_has_size_field = 1; -+ av1ctx = *priv; -+ -+ if (priv->sequence_header_ref) { -+ av1ctx.sequence_header_ref = av_buffer_ref(priv->sequence_header_ref); -+ if (!av1ctx.sequence_header_ref) -+ return AVERROR(ENOMEM); -+ } -+ -+ if (priv->frame_header_ref) { -+ av1ctx.frame_header_ref = av_buffer_ref(priv->frame_header_ref); -+ if (!av1ctx.frame_header_ref) { -+ err = AVERROR(ENOMEM); -+ goto error; -+ } -+ } - - err = cbs_av1_write_obu_header(ctx, pbc, &obu->header); - if (err < 0) -- return err; -+ goto error; - - if (obu->header.obu_has_size_field) { - pbc_tmp = *pbc; -@@ -1084,18 +1100,21 @@ - err = cbs_av1_write_sequence_header_obu(ctx, pbc, - &obu->obu.sequence_header); - if (err < 0) -- return err; -+ goto error; - - av_buffer_unref(&priv->sequence_header_ref); - priv->sequence_header = NULL; - - err = ff_cbs_make_unit_refcounted(ctx, unit); - if (err < 0) -- return err; -+ goto error; - - priv->sequence_header_ref = av_buffer_ref(unit->content_ref); -- if (!priv->sequence_header_ref) -- return AVERROR(ENOMEM); -+ if (!priv->sequence_header_ref) { -+ err = AVERROR(ENOMEM); -+ goto error; -+ } -+ - priv->sequence_header = &obu->obu.sequence_header; - } - break; -@@ -1103,7 +1122,7 @@ - { - err = cbs_av1_write_temporal_delimiter_obu(ctx, pbc); - if (err < 0) -- return err; -+ goto error; - } - break; - case AV1_OBU_FRAME_HEADER: -@@ -1115,7 +1134,7 @@ - AV1_OBU_REDUNDANT_FRAME_HEADER, - NULL); - if (err < 0) -- return err; -+ goto error; - } - break; - case AV1_OBU_TILE_GROUP: -@@ -1123,7 +1142,7 @@ - err = cbs_av1_write_tile_group_obu(ctx, pbc, - &obu->obu.tile_group); - if (err < 0) -- return err; -+ goto error; - - td = &obu->obu.tile_group.tile_data; - } -@@ -1132,7 +1151,7 @@ - { - err = cbs_av1_write_frame_obu(ctx, pbc, &obu->obu.frame, NULL); - if (err < 0) -- return err; -+ goto error; - - td = &obu->obu.frame.tile_group.tile_data; - } -@@ -1141,7 +1160,7 @@ - { - err = cbs_av1_write_tile_list_obu(ctx, pbc, &obu->obu.tile_list); - if (err < 0) -- return err; -+ goto error; - - td = &obu->obu.tile_list.tile_data; - } -@@ -1150,18 +1169,19 @@ - { - err = cbs_av1_write_metadata_obu(ctx, pbc, &obu->obu.metadata); - if (err < 0) -- return err; -+ goto error; - } - break; - case AV1_OBU_PADDING: - { - err = cbs_av1_write_padding_obu(ctx, pbc, &obu->obu.padding); - if (err < 0) -- return err; -+ goto error; - } - break; - default: -- return AVERROR(ENOSYS); -+ err = AVERROR(ENOSYS); -+ goto error; - } - - end_pos = put_bits_count(pbc); -@@ -1172,7 +1192,7 @@ - // Add trailing bits and recalculate. - err = cbs_av1_write_trailing_bits(ctx, pbc, 8 - end_pos % 8); - if (err < 0) -- return err; -+ goto error; - end_pos = put_bits_count(pbc); - obu->obu_size = header_size = (end_pos - start_pos + 7) / 8; - } else { -@@ -1190,14 +1210,19 @@ - *pbc = pbc_tmp; - err = cbs_av1_write_leb128(ctx, pbc, "obu_size", obu->obu_size); - if (err < 0) -- return err; -+ goto error; - - data_pos = put_bits_count(pbc) / 8; - flush_put_bits(pbc); - av_assert0(data_pos <= start_pos); - -- if (8 * obu->obu_size > put_bits_left(pbc)) -+ if (8 * obu->obu_size > put_bits_left(pbc)) { -+ av_buffer_unref(&priv->sequence_header_ref); -+ av_buffer_unref(&priv->frame_header_ref); -+ *priv = av1ctx; -+ - return AVERROR(ENOSPC); -+ } - - if (obu->obu_size > 0) { - memmove(pbc->buf + data_pos, -@@ -1213,8 +1238,13 @@ - - // OBU data must be byte-aligned. - av_assert0(put_bits_count(pbc) % 8 == 0); -+ err = 0; - -- return 0; -+error: -+ av_buffer_unref(&av1ctx.sequence_header_ref); -+ av_buffer_unref(&av1ctx.frame_header_ref); -+ -+ return err; - } - - static int cbs_av1_assemble_fragment(CodedBitstreamContext *ctx, -diff -Naur a/media/ffvpx/libavcodec/cbs_av1_syntax_template.c b/media/ffvpx/libavcodec/cbs_av1_syntax_template.c ---- a/media/ffvpx/libavcodec/cbs_av1_syntax_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/cbs_av1_syntax_template.c 2023-04-06 12:50:24.491176503 +0200 -@@ -355,7 +355,7 @@ - AV1_REF_FRAME_ALTREF2, AV1_REF_FRAME_ALTREF - }; - int8_t ref_frame_idx[AV1_REFS_PER_FRAME], used_frame[AV1_NUM_REF_FRAMES]; -- int8_t shifted_order_hints[AV1_NUM_REF_FRAMES]; -+ int16_t shifted_order_hints[AV1_NUM_REF_FRAMES]; - int cur_frame_hint, latest_order_hint, earliest_order_hint, ref; - int i, j; - -@@ -1862,11 +1862,8 @@ - fb(16, white_point_chromaticity_x); - fb(16, white_point_chromaticity_y); - -- fc(32, luminance_max, 1, MAX_UINT_BITS(32)); -- // luminance_min must be lower than luminance_max. Convert luminance_max from -- // 24.8 fixed point to 18.14 fixed point in order to compare them. -- fc(32, luminance_min, 0, FFMIN(((uint64_t)current->luminance_max << 6) - 1, -- MAX_UINT_BITS(32))); -+ fb(32, luminance_max); -+ fb(32, luminance_min); - - return 0; - } -diff -Naur a/media/ffvpx/libavcodec/cbs.c b/media/ffvpx/libavcodec/cbs.c ---- a/media/ffvpx/libavcodec/cbs.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/cbs.c 2023-04-06 12:50:06.971471053 +0200 -@@ -25,6 +25,7 @@ - #include "libavutil/common.h" - #include "libavutil/opt.h" - -+#include "avcodec.h" - #include "cbs.h" - #include "cbs_internal.h" - -@@ -72,8 +73,8 @@ - AV_CODEC_ID_NONE - }; - --int ff_cbs_init(CodedBitstreamContext **ctx_ptr, -- enum AVCodecID codec_id, void *log_ctx) -+av_cold int ff_cbs_init(CodedBitstreamContext **ctx_ptr, -+ enum AVCodecID codec_id, void *log_ctx) - { - CodedBitstreamContext *ctx; - const CodedBitstreamType *type; -@@ -117,13 +118,13 @@ - return 0; - } - --void ff_cbs_flush(CodedBitstreamContext *ctx) -+av_cold void ff_cbs_flush(CodedBitstreamContext *ctx) - { - if (ctx->codec->flush) - ctx->codec->flush(ctx); - } - --void ff_cbs_close(CodedBitstreamContext **ctx_ptr) -+av_cold void ff_cbs_close(CodedBitstreamContext **ctx_ptr) - { - CodedBitstreamContext *ctx = *ctx_ptr; - -@@ -167,7 +168,7 @@ - frag->data_bit_padding = 0; - } - --void ff_cbs_fragment_free(CodedBitstreamFragment *frag) -+av_cold void ff_cbs_fragment_free(CodedBitstreamFragment *frag) - { - ff_cbs_fragment_reset(frag); - -@@ -293,6 +294,19 @@ - pkt->data, pkt->size, 0); - } - -+int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx, -+ CodedBitstreamFragment *frag, -+ const AVPacket *pkt) -+{ -+ size_t side_data_size; -+ const uint8_t *side_data = -+ av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, -+ &side_data_size); -+ -+ return cbs_read_data(ctx, frag, NULL, -+ side_data, side_data_size, 1); -+} -+ - int ff_cbs_read(CodedBitstreamContext *ctx, - CodedBitstreamFragment *frag, - const uint8_t *data, size_t size) -@@ -301,6 +315,28 @@ - data, size, 0); - } - -+/** -+ * Allocate a new internal data buffer of the given size in the unit. -+ * -+ * The data buffer will have input padding. -+ */ -+static int cbs_alloc_unit_data(CodedBitstreamUnit *unit, -+ size_t size) -+{ -+ av_assert0(!unit->data && !unit->data_ref); -+ -+ unit->data_ref = av_buffer_alloc(size + AV_INPUT_BUFFER_PADDING_SIZE); -+ if (!unit->data_ref) -+ return AVERROR(ENOMEM); -+ -+ unit->data = unit->data_ref->data; -+ unit->data_size = size; -+ -+ memset(unit->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); -+ -+ return 0; -+} -+ - static int cbs_write_unit_data(CodedBitstreamContext *ctx, - CodedBitstreamUnit *unit) - { -@@ -346,7 +382,7 @@ - - flush_put_bits(&pbc); - -- ret = ff_cbs_alloc_unit_data(unit, put_bits_count(&pbc) / 8); -+ ret = cbs_alloc_unit_data(unit, put_bytes_output(&pbc)); - if (ret < 0) - return ret; - -@@ -402,6 +438,10 @@ - return err; - - av_freep(&par->extradata); -+ par->extradata_size = 0; -+ -+ if (!frag->data_size) -+ return 0; - - par->extradata = av_malloc(frag->data_size + - AV_INPUT_BUFFER_PADDING_SIZE); -@@ -659,43 +699,6 @@ - } - - --int ff_cbs_alloc_unit_content(CodedBitstreamUnit *unit, -- size_t size, -- void (*free)(void *opaque, uint8_t *data)) --{ -- av_assert0(!unit->content && !unit->content_ref); -- -- unit->content = av_mallocz(size); -- if (!unit->content) -- return AVERROR(ENOMEM); -- -- unit->content_ref = av_buffer_create(unit->content, size, -- free, NULL, 0); -- if (!unit->content_ref) { -- av_freep(&unit->content); -- return AVERROR(ENOMEM); -- } -- -- return 0; --} -- --int ff_cbs_alloc_unit_data(CodedBitstreamUnit *unit, -- size_t size) --{ -- av_assert0(!unit->data && !unit->data_ref); -- -- unit->data_ref = av_buffer_alloc(size + AV_INPUT_BUFFER_PADDING_SIZE); -- if (!unit->data_ref) -- return AVERROR(ENOMEM); -- -- unit->data = unit->data_ref->data; -- unit->data_size = size; -- -- memset(unit->data + size, 0, AV_INPUT_BUFFER_PADDING_SIZE); -- -- return 0; --} -- - static int cbs_insert_unit(CodedBitstreamFragment *frag, - int position) - { -@@ -770,18 +773,16 @@ - return 0; - } - --int ff_cbs_insert_unit_data(CodedBitstreamFragment *frag, -- int position, -- CodedBitstreamUnitType type, -- uint8_t *data, size_t data_size, -- AVBufferRef *data_buf) -+static int cbs_insert_unit_data(CodedBitstreamFragment *frag, -+ CodedBitstreamUnitType type, -+ uint8_t *data, size_t data_size, -+ AVBufferRef *data_buf, -+ int position) - { - CodedBitstreamUnit *unit; - AVBufferRef *data_ref; - int err; - -- if (position == -1) -- position = frag->nb_units; - av_assert0(position >= 0 && position <= frag->nb_units); - - if (data_buf) -@@ -809,6 +810,16 @@ - return 0; - } - -+int ff_cbs_append_unit_data(CodedBitstreamFragment *frag, -+ CodedBitstreamUnitType type, -+ uint8_t *data, size_t data_size, -+ AVBufferRef *data_buf) -+{ -+ return cbs_insert_unit_data(frag, type, -+ data, data_size, data_buf, -+ frag->nb_units); -+} -+ - void ff_cbs_delete_unit(CodedBitstreamFragment *frag, - int position) - { -@@ -828,12 +839,10 @@ - static void cbs_default_free_unit_content(void *opaque, uint8_t *data) - { - const CodedBitstreamUnitTypeDescriptor *desc = opaque; -- if (desc->content_type == CBS_CONTENT_TYPE_INTERNAL_REFS) { -- int i; -- for (i = 0; i < desc->nb_ref_offsets; i++) { -- void **ptr = (void**)(data + desc->ref_offsets[i]); -- av_buffer_unref((AVBufferRef**)(ptr + 1)); -- } -+ -+ for (int i = 0; i < desc->type.ref.nb_offsets; i++) { -+ void **ptr = (void**)(data + desc->type.ref.offsets[i]); -+ av_buffer_unref((AVBufferRef**)(ptr + 1)); - } - av_free(data); - } -@@ -853,12 +862,12 @@ - if (desc->nb_unit_types == 0) - break; - if (desc->nb_unit_types == CBS_UNIT_TYPE_RANGE) { -- if (unit->type >= desc->unit_type_range_start && -- unit->type <= desc->unit_type_range_end) -+ if (unit->type >= desc->unit_type.range.start && -+ unit->type <= desc->unit_type.range.end) - return desc; - } else { - for (j = 0; j < desc->nb_unit_types; j++) { -- if (desc->unit_types[j] == unit->type) -+ if (desc->unit_type.list[j] == unit->type) - return desc; - } - } -@@ -866,8 +875,8 @@ - return NULL; - } - --int ff_cbs_alloc_unit_content2(CodedBitstreamContext *ctx, -- CodedBitstreamUnit *unit) -+int ff_cbs_alloc_unit_content(CodedBitstreamContext *ctx, -+ CodedBitstreamUnit *unit) - { - const CodedBitstreamUnitTypeDescriptor *desc; - -@@ -883,7 +892,8 @@ - - unit->content_ref = - av_buffer_create(unit->content, desc->content_size, -- desc->content_free ? desc->content_free -+ desc->content_type == CBS_CONTENT_TYPE_COMPLEX -+ ? desc->type.complex.content_free - : cbs_default_free_unit_content, - (void*)desc, 0); - if (!unit->content_ref) { -@@ -894,13 +904,12 @@ - return 0; - } - --static int cbs_clone_unit_content(AVBufferRef **clone_ref, -- CodedBitstreamUnit *unit, -- const CodedBitstreamUnitTypeDescriptor *desc) --{ -- uint8_t *src, *copy; -- uint8_t **src_ptr, **copy_ptr; -- AVBufferRef **src_buf, **copy_buf; -+static int cbs_clone_internal_refs_unit_content(AVBufferRef **clone_ref, -+ const CodedBitstreamUnit *unit, -+ const CodedBitstreamUnitTypeDescriptor *desc) -+{ -+ const uint8_t *src; -+ uint8_t *copy; - int err, i; - - av_assert0(unit->content); -@@ -910,17 +919,17 @@ - if (!copy) - return AVERROR(ENOMEM); - -- for (i = 0; i < desc->nb_ref_offsets; i++) { -- src_ptr = (uint8_t**)(src + desc->ref_offsets[i]); -- src_buf = (AVBufferRef**)(src_ptr + 1); -- copy_ptr = (uint8_t**)(copy + desc->ref_offsets[i]); -- copy_buf = (AVBufferRef**)(copy_ptr + 1); -+ for (i = 0; i < desc->type.ref.nb_offsets; i++) { -+ const uint8_t *const *src_ptr = (const uint8_t* const*)(src + desc->type.ref.offsets[i]); -+ const AVBufferRef *src_buf = *(AVBufferRef**)(src_ptr + 1); -+ uint8_t **copy_ptr = (uint8_t**)(copy + desc->type.ref.offsets[i]); -+ AVBufferRef **copy_buf = (AVBufferRef**)(copy_ptr + 1); - - if (!*src_ptr) { -- av_assert0(!*src_buf); -+ av_assert0(!src_buf); - continue; - } -- if (!*src_buf) { -+ if (!src_buf) { - // We can't handle a non-refcounted pointer here - we don't - // have enough information to handle whatever structure lies - // at the other end of it. -@@ -928,21 +937,14 @@ - goto fail; - } - -- // src_ptr is required to point somewhere inside src_buf. If it -- // doesn't, there is a bug somewhere. -- av_assert0(*src_ptr >= (*src_buf)->data && -- *src_ptr < (*src_buf)->data + (*src_buf)->size); -- -- *copy_buf = av_buffer_ref(*src_buf); -+ *copy_buf = av_buffer_ref(src_buf); - if (!*copy_buf) { - err = AVERROR(ENOMEM); - goto fail; - } -- *copy_ptr = (*copy_buf)->data + (*src_ptr - (*src_buf)->data); - } - - *clone_ref = av_buffer_create(copy, desc->content_size, -- desc->content_free ? desc->content_free : - cbs_default_free_unit_content, - (void*)desc, 0); - if (!*clone_ref) { -@@ -954,46 +956,37 @@ - - fail: - for (--i; i >= 0; i--) -- av_buffer_unref((AVBufferRef**)(copy + desc->ref_offsets[i])); -+ av_buffer_unref((AVBufferRef**)(copy + desc->type.ref.offsets[i])); - av_freep(©); - *clone_ref = NULL; - return err; - } - --int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, -- CodedBitstreamUnit *unit) -+/* -+ * On success, unit->content and unit->content_ref are updated with -+ * the new content; unit is untouched on failure. -+ * Any old content_ref is simply overwritten and not freed. -+ */ -+static int cbs_clone_unit_content(CodedBitstreamContext *ctx, -+ CodedBitstreamUnit *unit) - { - const CodedBitstreamUnitTypeDescriptor *desc; - AVBufferRef *ref; - int err; - -- av_assert0(unit->content); -- if (unit->content_ref) { -- // Already refcounted, nothing to do. -- return 0; -- } -- - desc = cbs_find_unit_type_desc(ctx, unit); - if (!desc) - return AVERROR(ENOSYS); - - switch (desc->content_type) { -- case CBS_CONTENT_TYPE_POD: -- ref = av_buffer_alloc(desc->content_size); -- if (!ref) -- return AVERROR(ENOMEM); -- memcpy(ref->data, unit->content, desc->content_size); -- err = 0; -- break; -- - case CBS_CONTENT_TYPE_INTERNAL_REFS: -- err = cbs_clone_unit_content(&ref, unit, desc); -+ err = cbs_clone_internal_refs_unit_content(&ref, unit, desc); - break; - - case CBS_CONTENT_TYPE_COMPLEX: -- if (!desc->content_clone) -+ if (!desc->type.complex.content_clone) - return AVERROR_PATCHWELCOME; -- err = desc->content_clone(&ref, unit); -+ err = desc->type.complex.content_clone(&ref, unit); - break; - - default: -@@ -1008,51 +1001,28 @@ - return 0; - } - -+int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, -+ CodedBitstreamUnit *unit) -+{ -+ av_assert0(unit->content); -+ if (unit->content_ref) -+ return 0; -+ return cbs_clone_unit_content(ctx, unit); -+} -+ - int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx, - CodedBitstreamUnit *unit) - { -- const CodedBitstreamUnitTypeDescriptor *desc; -- AVBufferRef *ref; -+ AVBufferRef *ref = unit->content_ref; - int err; - -- // This can only be applied to refcounted units. -- err = ff_cbs_make_unit_refcounted(ctx, unit); -- if (err < 0) -- return err; -- av_assert0(unit->content && unit->content_ref); -- -- if (av_buffer_is_writable(unit->content_ref)) -+ av_assert0(unit->content); -+ if (ref && av_buffer_is_writable(ref)) - return 0; - -- desc = cbs_find_unit_type_desc(ctx, unit); -- if (!desc) -- return AVERROR(ENOSYS); -- -- switch (desc->content_type) { -- case CBS_CONTENT_TYPE_POD: -- err = av_buffer_make_writable(&unit->content_ref); -- break; -- -- case CBS_CONTENT_TYPE_INTERNAL_REFS: -- err = cbs_clone_unit_content(&ref, unit, desc); -- break; -- -- case CBS_CONTENT_TYPE_COMPLEX: -- if (!desc->content_clone) -- return AVERROR_PATCHWELCOME; -- err = desc->content_clone(&ref, unit); -- break; -- -- default: -- av_assert0(0 && "Invalid content type."); -- } -+ err = cbs_clone_unit_content(ctx, unit); - if (err < 0) - return err; -- -- if (desc->content_type != CBS_CONTENT_TYPE_POD) { -- av_buffer_unref(&unit->content_ref); -- unit->content_ref = ref; -- } -- unit->content = unit->content_ref->data; -+ av_buffer_unref(&ref); - return 0; - } -diff -Naur a/media/ffvpx/libavcodec/cbs.h b/media/ffvpx/libavcodec/cbs.h ---- a/media/ffvpx/libavcodec/cbs.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/cbs.h 2023-04-06 12:50:06.971471053 +0200 -@@ -24,7 +24,9 @@ - - #include "libavutil/buffer.h" - --#include "avcodec.h" -+#include "codec_id.h" -+#include "codec_par.h" -+#include "packet.h" - - - /* -@@ -40,6 +42,7 @@ - * bitstream. - */ - -+struct AVCodecContext; - struct CodedBitstreamType; - - /** -@@ -271,7 +274,11 @@ - */ - int ff_cbs_read_extradata_from_codec(CodedBitstreamContext *ctx, - CodedBitstreamFragment *frag, -- const AVCodecContext *avctx); -+ const struct AVCodecContext *avctx); -+ -+int ff_cbs_read_packet_side_data(CodedBitstreamContext *ctx, -+ CodedBitstreamFragment *frag, -+ const AVPacket *pkt); - - /** - * Read the data bitstream from a packet into a fragment, then -@@ -357,30 +364,12 @@ - void ff_cbs_fragment_free(CodedBitstreamFragment *frag); - - /** -- * Allocate a new internal content buffer of the given size in the unit. -- * -- * The content will be zeroed. -- */ --int ff_cbs_alloc_unit_content(CodedBitstreamUnit *unit, -- size_t size, -- void (*free)(void *opaque, uint8_t *content)); -- --/** - * Allocate a new internal content buffer matching the type of the unit. - * - * The content will be zeroed. - */ --int ff_cbs_alloc_unit_content2(CodedBitstreamContext *ctx, -- CodedBitstreamUnit *unit); -- -- --/** -- * Allocate a new internal data buffer of the given size in the unit. -- * -- * The data buffer will have input padding. -- */ --int ff_cbs_alloc_unit_data(CodedBitstreamUnit *unit, -- size_t size); -+int ff_cbs_alloc_unit_content(CodedBitstreamContext *ctx, -+ CodedBitstreamUnit *unit); - - /** - * Insert a new unit into a fragment with the given content. -@@ -395,14 +384,13 @@ - AVBufferRef *content_buf); - - /** -- * Insert a new unit into a fragment with the given data bitstream. -+ * Add a new unit to a fragment with the given data bitstream. - * - * If data_buf is not supplied then data must have been allocated with - * av_malloc() and will on success become owned by the unit after this - * call or freed on error. - */ --int ff_cbs_insert_unit_data(CodedBitstreamFragment *frag, -- int position, -+int ff_cbs_append_unit_data(CodedBitstreamFragment *frag, - CodedBitstreamUnitType type, - uint8_t *data, size_t data_size, - AVBufferRef *data_buf); -diff -Naur a/media/ffvpx/libavcodec/cbs_internal.h b/media/ffvpx/libavcodec/cbs_internal.h ---- a/media/ffvpx/libavcodec/cbs_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/cbs_internal.h 2023-04-06 12:50:06.971471053 +0200 -@@ -19,16 +19,19 @@ - #ifndef AVCODEC_CBS_INTERNAL_H - #define AVCODEC_CBS_INTERNAL_H - --#include "avcodec.h" -+#include -+ -+#include "libavutil/buffer.h" -+#include "libavutil/log.h" -+ - #include "cbs.h" -+#include "codec_id.h" - #include "get_bits.h" - #include "put_bits.h" - - - enum CBSContentType { -- // Unit content is a simple structure. -- CBS_CONTENT_TYPE_POD, -- // Unit content contains some references to other structures, but all -+ // Unit content may contain some references to other structures, but all - // managed via buffer reference counting. The descriptor defines the - // structure offsets of every buffer reference. - CBS_CONTENT_TYPE_INTERNAL_REFS, -@@ -38,9 +41,9 @@ - }; - - enum { -- // Maximum number of unit types described by the same unit type -- // descriptor. -- CBS_MAX_UNIT_TYPES = 3, -+ // Maximum number of unit types described by the same non-range -+ // unit type descriptor. -+ CBS_MAX_LIST_UNIT_TYPES = 3, - // Maximum number of reference buffer offsets in any one unit. - CBS_MAX_REF_OFFSETS = 2, - // Special value used in a unit type descriptor to indicate that it -@@ -55,13 +58,16 @@ - // used instead. - int nb_unit_types; - -- // Array of unit types that this entry describes. -- const CodedBitstreamUnitType unit_types[CBS_MAX_UNIT_TYPES]; -- -- // Start and end of unit type range, used if nb_unit_types is -- // CBS_UNIT_TYPE_RANGE. -- const CodedBitstreamUnitType unit_type_range_start; -- const CodedBitstreamUnitType unit_type_range_end; -+ union { -+ // Array of unit types that this entry describes. -+ CodedBitstreamUnitType list[CBS_MAX_LIST_UNIT_TYPES]; -+ // Start and end of unit type range, used if nb_unit_types is -+ // CBS_UNIT_TYPE_RANGE. -+ struct { -+ CodedBitstreamUnitType start; -+ CodedBitstreamUnitType end; -+ } range; -+ } unit_type; - - // The type of content described. - enum CBSContentType content_type; -@@ -69,18 +75,27 @@ - // the decomposed content of this type of unit. - size_t content_size; - -- // Number of entries in the ref_offsets array. Only used if the -- // content_type is CBS_CONTENT_TYPE_INTERNAL_REFS. -- int nb_ref_offsets; -- // The structure must contain two adjacent elements: -- // type *field; -- // AVBufferRef *field_ref; -- // where field points to something in the buffer referred to by -- // field_ref. This offset is then set to offsetof(struct, field). -- size_t ref_offsets[CBS_MAX_REF_OFFSETS]; -- -- void (*content_free)(void *opaque, uint8_t *data); -- int (*content_clone)(AVBufferRef **ref, CodedBitstreamUnit *unit); -+ union { -+ // This union's state is determined by content_type: -+ // ref for CBS_CONTENT_TYPE_INTERNAL_REFS, -+ // complex for CBS_CONTENT_TYPE_COMPLEX. -+ struct { -+ // Number of entries in the ref_offsets array. -+ // May be zero, then the structure is POD-like. -+ int nb_offsets; -+ // The structure must contain two adjacent elements: -+ // type *field; -+ // AVBufferRef *field_ref; -+ // where field points to something in the buffer referred to by -+ // field_ref. This offset is then set to offsetof(struct, field). -+ size_t offsets[CBS_MAX_REF_OFFSETS]; -+ } ref; -+ -+ struct { -+ void (*content_free)(void *opaque, uint8_t *data); -+ int (*content_clone)(AVBufferRef **ref, CodedBitstreamUnit *unit); -+ } complex; -+ } type; - } CodedBitstreamUnitTypeDescriptor; - - typedef struct CodedBitstreamType { -@@ -176,28 +191,54 @@ - // range_min in the above functions. - #define MIN_INT_BITS(length) (-(INT64_C(1) << ((length) - 1))) - -- --#define CBS_UNIT_TYPE_POD(type, structure) { \ -+#define TYPE_LIST(...) { __VA_ARGS__ } -+#define CBS_UNIT_TYPE_POD(type_, structure) { \ - .nb_unit_types = 1, \ -- .unit_types = { type }, \ -- .content_type = CBS_CONTENT_TYPE_POD, \ -+ .unit_type.list = { type_ }, \ -+ .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ - .content_size = sizeof(structure), \ -+ .type.ref = { .nb_offsets = 0 }, \ - } --#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field) { \ -- .nb_unit_types = 1, \ -- .unit_types = { type }, \ -+#define CBS_UNIT_RANGE_POD(range_start, range_end, structure) { \ -+ .nb_unit_types = CBS_UNIT_TYPE_RANGE, \ -+ .unit_type.range.start = range_start, \ -+ .unit_type.range.end = range_end, \ -+ .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ -+ .content_size = sizeof(structure), \ -+ .type.ref = { .nb_offsets = 0 }, \ -+ } -+ -+#define CBS_UNIT_TYPES_INTERNAL_REF(types, structure, ref_field) { \ -+ .nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \ -+ .unit_type.list = TYPE_LIST types, \ - .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ - .content_size = sizeof(structure), \ -- .nb_ref_offsets = 1, \ -- .ref_offsets = { offsetof(structure, ref_field) }, \ -+ .type.ref = { .nb_offsets = 1, \ -+ .offsets = { offsetof(structure, ref_field) } }, \ - } --#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) { \ -- .nb_unit_types = 1, \ -- .unit_types = { type }, \ -+#define CBS_UNIT_TYPE_INTERNAL_REF(type, structure, ref_field) \ -+ CBS_UNIT_TYPES_INTERNAL_REF((type), structure, ref_field) -+ -+#define CBS_UNIT_RANGE_INTERNAL_REF(range_start, range_end, structure, ref_field) { \ -+ .nb_unit_types = CBS_UNIT_TYPE_RANGE, \ -+ .unit_type.range.start = range_start, \ -+ .unit_type.range.end = range_end, \ -+ .content_type = CBS_CONTENT_TYPE_INTERNAL_REFS, \ -+ .content_size = sizeof(structure), \ -+ .type.ref = { .nb_offsets = 1, \ -+ .offsets = { offsetof(structure, ref_field) } }, \ -+ } -+ -+#define CBS_UNIT_TYPES_COMPLEX(types, structure, free_func) { \ -+ .nb_unit_types = FF_ARRAY_ELEMS((CodedBitstreamUnitType[])TYPE_LIST types), \ -+ .unit_type.list = TYPE_LIST types, \ - .content_type = CBS_CONTENT_TYPE_COMPLEX, \ - .content_size = sizeof(structure), \ -- .content_free = free_func, \ -+ .type.complex = { .content_free = free_func }, \ - } -+#define CBS_UNIT_TYPE_COMPLEX(type, structure, free_func) \ -+ CBS_UNIT_TYPES_COMPLEX((type), structure, free_func) -+ - #define CBS_UNIT_TYPE_END_OF_LIST { .nb_unit_types = 0 } - - -diff -Naur a/media/ffvpx/libavcodec/codec_desc.c b/media/ffvpx/libavcodec/codec_desc.c ---- a/media/ffvpx/libavcodec/codec_desc.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec_desc.c 2023-04-06 12:50:24.491176503 +0200 -@@ -19,15 +19,15 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include - #include - --#include "libavutil/common.h" - #include "libavutil/internal.h" -+#include "libavutil/macros.h" - - #include "codec_id.h" - #include "codec_desc.h" - #include "profiles.h" --#include "version.h" - - #define MT(...) (const char *const[]){ __VA_ARGS__, NULL } - -@@ -1462,6 +1462,7 @@ - .long_name = NULL_IF_CONFIG_SMALL("Avid Meridien Uncompressed"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, - }, -+#if FF_API_AYUV_CODECID - { - .id = AV_CODEC_ID_AYUV, - .type = AVMEDIA_TYPE_VIDEO, -@@ -1469,6 +1470,7 @@ - .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed MS 4:4:4:4"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, - }, -+#endif - { - .id = AV_CODEC_ID_TARGA_Y216, - .type = AVMEDIA_TYPE_VIDEO, -@@ -1856,6 +1858,71 @@ - .long_name = NULL_IF_CONFIG_SMALL("Digital Pictures SGA Video"), - .props = AV_CODEC_PROP_LOSSY, - }, -+ { -+ .id = AV_CODEC_ID_GEM, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "gem", -+ .long_name = NULL_IF_CONFIG_SMALL("GEM Raster image"), -+ .props = AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_VBN, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "vbn", -+ .long_name = NULL_IF_CONFIG_SMALL("Vizrt Binary Image"), -+ .props = AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_JPEGXL, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "jpegxl", -+ .long_name = NULL_IF_CONFIG_SMALL("JPEG XL"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | -+ AV_CODEC_PROP_LOSSLESS, -+ .mime_types= MT("image/jxl"), -+ }, -+ { -+ .id = AV_CODEC_ID_QOI, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "qoi", -+ .long_name = NULL_IF_CONFIG_SMALL("QOI (Quite OK Image)"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ }, -+ { -+ .id = AV_CODEC_ID_PHM, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "phm", -+ .long_name = NULL_IF_CONFIG_SMALL("PHM (Portable HalfFloatMap) image"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ }, -+ { -+ .id = AV_CODEC_ID_RADIANCE_HDR, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "hdr", -+ .long_name = NULL_IF_CONFIG_SMALL("HDR (Radiance RGBE format) image"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_WBMP, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "wbmp", -+ .long_name = NULL_IF_CONFIG_SMALL("WBMP (Wireless Application Protocol Bitmap) image"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ }, -+ { -+ .id = AV_CODEC_ID_MEDIA100, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "media100", -+ .long_name = NULL_IF_CONFIG_SMALL("Media 100i"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_VQC, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "vqc", -+ .long_name = NULL_IF_CONFIG_SMALL("ViewQuest VQC"), -+ .props = AV_CODEC_PROP_LOSSY, -+ }, - - /* various PCM "codecs" */ - { -@@ -2462,6 +2529,20 @@ - .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA MobiClip MOFLEX"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, - }, -+ { -+ .id = AV_CODEC_ID_ADPCM_IMA_ACORN, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "adpcm_ima_acorn", -+ .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Acorn Replay"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_ADPCM_XMD, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "adpcm_xmd", -+ .long_name = NULL_IF_CONFIG_SMALL("ADPCM Konami XMD"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, - - /* AMR */ - { -@@ -2545,6 +2626,20 @@ - .long_name = NULL_IF_CONFIG_SMALL("DPCM Xilam DERF"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, - }, -+ { -+ .id = AV_CODEC_ID_WADY_DPCM, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "wady_dpcm", -+ .long_name = NULL_IF_CONFIG_SMALL("DPCM Marble WADY"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_CBD2_DPCM, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "cbd2_dpcm", -+ .long_name = NULL_IF_CONFIG_SMALL("DPCM Cuberoot-Delta-Exact"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, - - /* audio codecs */ - { -@@ -2758,7 +2853,7 @@ - .type = AVMEDIA_TYPE_AUDIO, - .name = "mlp", - .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"), -- .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ .props = AV_CODEC_PROP_LOSSLESS, - }, - { - .id = AV_CODEC_ID_GSM_MS, -@@ -3216,6 +3311,62 @@ - .long_name = NULL_IF_CONFIG_SMALL("MobiClip FastAudio"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, - }, -+ { -+ .id = AV_CODEC_ID_MSNSIREN, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "msnsiren", -+ .long_name = NULL_IF_CONFIG_SMALL("MSN Siren"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_DFPWM, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "dfpwm", -+ .long_name = NULL_IF_CONFIG_SMALL("DFPWM (Dynamic Filter Pulse Width Modulation)"), -+ .props = AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_BONK, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "bonk", -+ .long_name = NULL_IF_CONFIG_SMALL("Bonk audio"), -+ .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ }, -+ { -+ .id = AV_CODEC_ID_MISC4, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "misc4", -+ .long_name = NULL_IF_CONFIG_SMALL("Micronas SC-4 Audio"), -+ .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_INTRA_ONLY, -+ }, -+ { -+ .id = AV_CODEC_ID_APAC, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "apac", -+ .long_name = NULL_IF_CONFIG_SMALL("Marian's A-pac audio"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ }, -+ { -+ .id = AV_CODEC_ID_FTR, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "ftr", -+ .long_name = NULL_IF_CONFIG_SMALL("FTR Voice"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, -+ }, -+ { -+ .id = AV_CODEC_ID_WAVARC, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "wavarc", -+ .long_name = NULL_IF_CONFIG_SMALL("Waveform Archiver"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, -+ }, -+ { -+ .id = AV_CODEC_ID_RKA, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "rka", -+ .long_name = NULL_IF_CONFIG_SMALL("RKA (RK Audio)"), -+ .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, -+ }, - - /* subtitle codecs */ - { -@@ -3488,6 +3639,18 @@ - .long_name = NULL_IF_CONFIG_SMALL("AVFrame to AVPacket passthrough"), - .props = AV_CODEC_PROP_LOSSLESS, - }, -+ { -+ .id = AV_CODEC_ID_VNULL, -+ .type = AVMEDIA_TYPE_VIDEO, -+ .name = "vnull", -+ .long_name = NULL_IF_CONFIG_SMALL("Null video codec"), -+ }, -+ { -+ .id = AV_CODEC_ID_ANULL, -+ .type = AVMEDIA_TYPE_AUDIO, -+ .name = "anull", -+ .long_name = NULL_IF_CONFIG_SMALL("Null audio codec"), -+ }, - }; - - static int descriptor_compare(const void *key, const void *member) -diff -Naur a/media/ffvpx/libavcodec/codec.h b/media/ffvpx/libavcodec/codec.h ---- a/media/ffvpx/libavcodec/codec.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec.h 2023-04-06 12:50:24.491176503 +0200 -@@ -31,7 +31,7 @@ - #include "libavutil/samplefmt.h" - - #include "libavcodec/codec_id.h" --#include "libavcodec/version.h" -+#include "libavcodec/version_major.h" - - /** - * @addtogroup lavc_core -@@ -50,7 +50,6 @@ - * avcodec_default_get_buffer2 or avcodec_default_get_encode_buffer. - */ - #define AV_CODEC_CAP_DR1 (1 << 1) --#define AV_CODEC_CAP_TRUNCATED (1 << 3) - /** - * Encoder or decoder requires flushing with NULL input at the end in order to - * give the complete and correct output. -@@ -120,9 +119,6 @@ - * multithreading-capable external libraries. - */ - #define AV_CODEC_CAP_OTHER_THREADS (1 << 15) --#if FF_API_AUTO_THREADS --#define AV_CODEC_CAP_AUTO_THREADS AV_CODEC_CAP_OTHER_THREADS --#endif - /** - * Audio encoder supports receiving a different number of samples in each call. - */ -@@ -138,17 +134,6 @@ - */ - #define AV_CODEC_CAP_AVOID_PROBING (1 << 17) - --#if FF_API_UNUSED_CODEC_CAPS --/** -- * Deprecated and unused. Use AVCodecDescriptor.props instead -- */ --#define AV_CODEC_CAP_INTRA_ONLY 0x40000000 --/** -- * Deprecated and unused. Use AVCodecDescriptor.props instead -- */ --#define AV_CODEC_CAP_LOSSLESS 0x80000000 --#endif -- - /** - * Codec is backed by a hardware implementation. Typically used to - * identify a non-hwaccel hardware decoder. For information about hwaccels, use -@@ -164,9 +149,9 @@ - #define AV_CODEC_CAP_HYBRID (1 << 19) - - /** -- * This codec takes the reordered_opaque field from input AVFrames -- * and returns it in the corresponding field in AVCodecContext after -- * encoding. -+ * This encoder can reorder user opaque values from input AVFrames and return -+ * them with corresponding output packets. -+ * @see AV_CODEC_FLAG_COPY_OPAQUE - */ - #define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE (1 << 20) - -@@ -178,6 +163,14 @@ - #define AV_CODEC_CAP_ENCODER_FLUSH (1 << 21) - - /** -+ * The encoder is able to output reconstructed frame data, i.e. raw frames that -+ * would be produced by decoding the encoded bitstream. -+ * -+ * Reconstructed frame output is enabled by the AV_CODEC_FLAG_RECON_FRAME flag. -+ */ -+#define AV_CODEC_CAP_ENCODER_RECON_FRAME (1 << 22) -+ -+/** - * AVProfile. - */ - typedef struct AVProfile { -@@ -185,12 +178,6 @@ - const char *name; ///< short name for the profile - } AVProfile; - --typedef struct AVCodecDefault AVCodecDefault; -- --struct AVCodecContext; --struct AVSubtitle; --struct AVPacket; -- - /** - * AVCodec. - */ -@@ -214,12 +201,18 @@ - * see AV_CODEC_CAP_* - */ - int capabilities; -+ uint8_t max_lowres; ///< maximum value for lowres supported by the decoder - const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} - const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 - const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 - const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * @deprecated use ch_layouts instead -+ */ -+ attribute_deprecated - const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 -- uint8_t max_lowres; ///< maximum value for lowres supported by the decoder -+#endif - const AVClass *priv_class; ///< AVClass for the private context - const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} - -@@ -235,117 +228,10 @@ - */ - const char *wrapper_name; - -- /***************************************************************** -- * No fields below this line are part of the public API. They -- * may not be used outside of libavcodec and can be changed and -- * removed at will. -- * New public fields should be added right above. -- ***************************************************************** -- */ -- int priv_data_size; --#if FF_API_NEXT -- struct AVCodec *next; --#endif -- /** -- * @name Frame-level threading support functions -- * @{ -- */ -- /** -- * Copy necessary context variables from a previous thread context to the current one. -- * If not defined, the next thread will start automatically; otherwise, the codec -- * must call ff_thread_finish_setup(). -- * -- * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. -- */ -- int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); -- /** @} */ -- -- /** -- * Private codec-specific defaults. -- */ -- const AVCodecDefault *defaults; -- - /** -- * Initialize codec static data, called from av_codec_iterate(). -- * -- * This is not intended for time consuming operations as it is -- * run for every codec regardless of that codec being used. -+ * Array of supported channel layouts, terminated with a zeroed layout. - */ -- void (*init_static_data)(struct AVCodec *codec); -- -- int (*init)(struct AVCodecContext *); -- int (*encode_sub)(struct AVCodecContext *, uint8_t *buf, int buf_size, -- const struct AVSubtitle *sub); -- /** -- * Encode data to an AVPacket. -- * -- * @param avctx codec context -- * @param avpkt output AVPacket -- * @param[in] frame AVFrame containing the raw data to be encoded -- * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a -- * non-empty packet was returned in avpkt. -- * @return 0 on success, negative error code on failure -- */ -- int (*encode2)(struct AVCodecContext *avctx, struct AVPacket *avpkt, -- const struct AVFrame *frame, int *got_packet_ptr); -- /** -- * Decode picture or subtitle data. -- * -- * @param avctx codec context -- * @param outdata codec type dependent output struct -- * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that a -- * non-empty frame or subtitle was returned in -- * outdata. -- * @param[in] avpkt AVPacket containing the data to be decoded -- * @return amount of bytes read from the packet on success, negative error -- * code on failure -- */ -- int (*decode)(struct AVCodecContext *avctx, void *outdata, -- int *got_frame_ptr, struct AVPacket *avpkt); -- int (*close)(struct AVCodecContext *); -- /** -- * Encode API with decoupled frame/packet dataflow. This function is called -- * to get one output packet. It should call ff_encode_get_frame() to obtain -- * input data. -- */ -- int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); -- -- /** -- * Decode API with decoupled packet/frame dataflow. This function is called -- * to get one output frame. It should call ff_decode_get_packet() to obtain -- * input data. -- */ -- int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); -- /** -- * Flush buffers. -- * Will be called when seeking -- */ -- void (*flush)(struct AVCodecContext *); -- /** -- * Internal codec capabilities. -- * See FF_CODEC_CAP_* in internal.h -- */ -- int caps_internal; -- -- /** -- * Decoding only, a comma-separated list of bitstream filters to apply to -- * packets before decoding. -- */ -- const char *bsfs; -- -- /** -- * Array of pointers to hardware configurations supported by the codec, -- * or NULL if no hardware supported. The array is terminated by a NULL -- * pointer. -- * -- * The user can only access this field via avcodec_get_hw_config(). -- */ -- const struct AVCodecHWConfigInternal *const *hw_configs; -- -- /** -- * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. -- */ -- const uint32_t *codec_tags; -+ const AVChannelLayout *ch_layouts; - } AVCodec; - - /** -@@ -365,7 +251,7 @@ - * @param id AVCodecID of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ --AVCodec *avcodec_find_decoder(enum AVCodecID id); -+const AVCodec *avcodec_find_decoder(enum AVCodecID id); - - /** - * Find a registered decoder with the specified name. -@@ -373,7 +259,7 @@ - * @param name name of the requested decoder - * @return A decoder if one was found, NULL otherwise. - */ --AVCodec *avcodec_find_decoder_by_name(const char *name); -+const AVCodec *avcodec_find_decoder_by_name(const char *name); - - /** - * Find a registered encoder with a matching codec ID. -@@ -381,7 +267,7 @@ - * @param id AVCodecID of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ --AVCodec *avcodec_find_encoder(enum AVCodecID id); -+const AVCodec *avcodec_find_encoder(enum AVCodecID id); - - /** - * Find a registered encoder with the specified name. -@@ -389,7 +275,7 @@ - * @param name name of the requested encoder - * @return An encoder if one was found, NULL otherwise. - */ --AVCodec *avcodec_find_encoder_by_name(const char *name); -+const AVCodec *avcodec_find_encoder_by_name(const char *name); - /** - * @return a non-zero number if codec is an encoder, zero otherwise - */ -@@ -400,6 +286,15 @@ - */ - int av_codec_is_decoder(const AVCodec *codec); - -+/** -+ * Return a name for the specified profile, if available. -+ * -+ * @param codec the codec that is searched for the given profile -+ * @param profile the profile value for which a name is requested -+ * @return A name for the profile if found, NULL otherwise. -+ */ -+const char *av_get_profile_name(const AVCodec *codec, int profile); -+ - enum { - /** - * The codec supports this format via the hw_device_ctx interface. -diff -Naur a/media/ffvpx/libavcodec/codec_id.h b/media/ffvpx/libavcodec/codec_id.h ---- a/media/ffvpx/libavcodec/codec_id.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec_id.h 2023-04-06 12:50:24.491176503 +0200 -@@ -24,6 +24,8 @@ - #include "libavutil/avutil.h" - #include "libavutil/samplefmt.h" - -+#include "version_major.h" -+ - /** - * @addtogroup lavc_core - * @{ -@@ -251,7 +253,9 @@ - AV_CODEC_ID_AVRP, - AV_CODEC_ID_012V, - AV_CODEC_ID_AVUI, -+#if FF_API_AYUV_CODECID - AV_CODEC_ID_AYUV, -+#endif - AV_CODEC_ID_TARGA_Y216, - AV_CODEC_ID_V308, - AV_CODEC_ID_V408, -@@ -308,6 +312,14 @@ - AV_CODEC_ID_SIMBIOSIS_IMX, - AV_CODEC_ID_SGA_VIDEO, - AV_CODEC_ID_GEM, -+ AV_CODEC_ID_VBN, -+ AV_CODEC_ID_JPEGXL, -+ AV_CODEC_ID_QOI, -+ AV_CODEC_ID_PHM, -+ AV_CODEC_ID_RADIANCE_HDR, -+ AV_CODEC_ID_WBMP, -+ AV_CODEC_ID_MEDIA100, -+ AV_CODEC_ID_VQC, - - /* various PCM "codecs" */ - AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs -@@ -401,6 +413,7 @@ - AV_CODEC_ID_ADPCM_IMA_CUNNING, - AV_CODEC_ID_ADPCM_IMA_MOFLEX, - AV_CODEC_ID_ADPCM_IMA_ACORN, -+ AV_CODEC_ID_ADPCM_XMD, - - /* AMR */ - AV_CODEC_ID_AMR_NB = 0x12000, -@@ -418,6 +431,8 @@ - AV_CODEC_ID_SDX2_DPCM, - AV_CODEC_ID_GREMLIN_DPCM, - AV_CODEC_ID_DERF_DPCM, -+ AV_CODEC_ID_WADY_DPCM, -+ AV_CODEC_ID_CBD2_DPCM, - - /* audio codecs */ - AV_CODEC_ID_MP2 = 0x15000, -@@ -516,6 +531,13 @@ - AV_CODEC_ID_HCA, - AV_CODEC_ID_FASTAUDIO, - AV_CODEC_ID_MSNSIREN, -+ AV_CODEC_ID_DFPWM, -+ AV_CODEC_ID_BONK, -+ AV_CODEC_ID_MISC4, -+ AV_CODEC_ID_APAC, -+ AV_CODEC_ID_FTR, -+ AV_CODEC_ID_WAVARC, -+ AV_CODEC_ID_RKA, - - /* subtitle codecs */ - AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. -@@ -570,6 +592,16 @@ - * stream (only used by libavformat) */ - AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information. - AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket -+ /** -+ * Dummy null video codec, useful mainly for development and debugging. -+ * Null encoder/decoder discard all input and never return any output. -+ */ -+ AV_CODEC_ID_VNULL, -+ /** -+ * Dummy null audio codec, useful mainly for development and debugging. -+ * Null encoder/decoder discard all input and never return any output. -+ */ -+ AV_CODEC_ID_ANULL, - }; - - /** -diff -Naur a/media/ffvpx/libavcodec/codec_internal.h b/media/ffvpx/libavcodec/codec_internal.h ---- a/media/ffvpx/libavcodec/codec_internal.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec_internal.h 2023-04-06 12:50:24.491176503 +0200 -@@ -0,0 +1,330 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVCODEC_CODEC_INTERNAL_H -+#define AVCODEC_CODEC_INTERNAL_H -+ -+#include -+ -+#include "libavutil/attributes.h" -+#include "codec.h" -+#include "config.h" -+ -+/** -+ * The codec is not known to be init-threadsafe (i.e. it might be unsafe -+ * to initialize this codec and another codec concurrently, typically because -+ * the codec calls external APIs that are not known to be thread-safe). -+ * Therefore calling the codec's init function needs to be guarded with a lock. -+ */ -+#define FF_CODEC_CAP_NOT_INIT_THREADSAFE (1 << 0) -+/** -+ * The codec allows calling the close function for deallocation even if -+ * the init function returned a failure. Without this capability flag, a -+ * codec does such cleanup internally when returning failures from the -+ * init function and does not expect the close function to be called at -+ * all. -+ */ -+#define FF_CODEC_CAP_INIT_CLEANUP (1 << 1) -+/** -+ * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set -+ * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite -+ * this field. If it's unset, decode.c tries to guess the pkt_dts field -+ * from the input AVPacket. -+ */ -+#define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2) -+/** -+ * The decoder extracts and fills its parameters even if the frame is -+ * skipped due to the skip_frame setting. -+ */ -+#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3) -+/** -+ * The decoder sets the cropping fields in the output frames manually. -+ * If this cap is set, the generic code will initialize output frame -+ * dimensions to coded rather than display values. -+ */ -+#define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4) -+/** -+ * Codec initializes slice-based threading with a main function -+ */ -+#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5) -+/* -+ * The codec supports frame threading and has inter-frame dependencies, so it -+ * uses ff_thread_report/await_progress(). -+ */ -+#define FF_CODEC_CAP_ALLOCATE_PROGRESS (1 << 6) -+/** -+ * Codec handles avctx->thread_count == 0 (auto) internally. -+ */ -+#define FF_CODEC_CAP_AUTO_THREADS (1 << 7) -+/** -+ * Codec handles output frame properties internally instead of letting the -+ * internal logic derive them from AVCodecInternal.last_pkt_props. -+ */ -+#define FF_CODEC_CAP_SETS_FRAME_PROPS (1 << 8) -+/** -+ * Codec supports embedded ICC profiles (AV_FRAME_DATA_ICC_PROFILE). -+ */ -+#define FF_CODEC_CAP_ICC_PROFILES (1 << 9) -+/** -+ * The encoder has AV_CODEC_CAP_DELAY set, but does not actually have delay - it -+ * only wants to be flushed at the end to update some context variables (e.g. -+ * 2pass stats) or produce a trailing packet. Besides that it immediately -+ * produces exactly one output packet per each input frame, just as no-delay -+ * encoders do. -+ */ -+#define FF_CODEC_CAP_EOF_FLUSH (1 << 10) -+ -+/** -+ * FFCodec.codec_tags termination value -+ */ -+#define FF_CODEC_TAGS_END -1 -+ -+typedef struct FFCodecDefault { -+ const char *key; -+ const char *value; -+} FFCodecDefault; -+ -+struct AVCodecContext; -+struct AVSubtitle; -+struct AVPacket; -+ -+enum FFCodecType { -+ /* The codec is a decoder using the decode callback; -+ * audio and video codecs only. */ -+ FF_CODEC_CB_TYPE_DECODE, -+ /* The codec is a decoder using the decode_sub callback; -+ * subtitle codecs only. */ -+ FF_CODEC_CB_TYPE_DECODE_SUB, -+ /* The codec is a decoder using the receive_frame callback; -+ * audio and video codecs only. */ -+ FF_CODEC_CB_TYPE_RECEIVE_FRAME, -+ /* The codec is an encoder using the encode callback; -+ * audio and video codecs only. */ -+ FF_CODEC_CB_TYPE_ENCODE, -+ /* The codec is an encoder using the encode_sub callback; -+ * subtitle codecs only. */ -+ FF_CODEC_CB_TYPE_ENCODE_SUB, -+ /* The codec is an encoder using the receive_packet callback; -+ * audio and video codecs only. */ -+ FF_CODEC_CB_TYPE_RECEIVE_PACKET, -+}; -+ -+typedef struct FFCodec { -+ /** -+ * The public AVCodec. See codec.h for it. -+ */ -+ AVCodec p; -+ -+ /** -+ * Internal codec capabilities FF_CODEC_CAP_*. -+ */ -+ unsigned caps_internal:29; -+ -+ /** -+ * This field determines the type of the codec (decoder/encoder) -+ * and also the exact callback cb implemented by the codec. -+ * cb_type uses enum FFCodecType values. -+ */ -+ unsigned cb_type:3; -+ -+ int priv_data_size; -+ /** -+ * @name Frame-level threading support functions -+ * @{ -+ */ -+ /** -+ * Copy necessary context variables from a previous thread context to the current one. -+ * If not defined, the next thread will start automatically; otherwise, the codec -+ * must call ff_thread_finish_setup(). -+ * -+ * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. -+ */ -+ int (*update_thread_context)(struct AVCodecContext *dst, const struct AVCodecContext *src); -+ -+ /** -+ * Copy variables back to the user-facing context -+ */ -+ int (*update_thread_context_for_user)(struct AVCodecContext *dst, const struct AVCodecContext *src); -+ /** @} */ -+ -+ /** -+ * Private codec-specific defaults. -+ */ -+ const FFCodecDefault *defaults; -+ -+ /** -+ * Initialize codec static data, called from av_codec_iterate(). -+ * -+ * This is not intended for time consuming operations as it is -+ * run for every codec regardless of that codec being used. -+ */ -+ void (*init_static_data)(struct FFCodec *codec); -+ -+ int (*init)(struct AVCodecContext *); -+ -+ union { -+ /** -+ * Decode to an AVFrame. -+ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE. -+ * -+ * @param avctx codec context -+ * @param[out] frame AVFrame for output -+ * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that -+ * a non-empty frame was returned in frame. -+ * @param[in] avpkt AVPacket containing the data to be decoded -+ * @return amount of bytes read from the packet on success, -+ * negative error code on failure -+ */ -+ int (*decode)(struct AVCodecContext *avctx, struct AVFrame *frame, -+ int *got_frame_ptr, struct AVPacket *avpkt); -+ /** -+ * Decode subtitle data to an AVSubtitle. -+ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE_SUB. -+ * -+ * Apart from that this is like the decode callback. -+ */ -+ int (*decode_sub)(struct AVCodecContext *avctx, struct AVSubtitle *sub, -+ int *got_frame_ptr, const struct AVPacket *avpkt); -+ /** -+ * Decode API with decoupled packet/frame dataflow. -+ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_FRAME. -+ * -+ * This function is called to get one output frame. It should call -+ * ff_decode_get_packet() to obtain input data. -+ */ -+ int (*receive_frame)(struct AVCodecContext *avctx, struct AVFrame *frame); -+ /** -+ * Encode data to an AVPacket. -+ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE -+ * -+ * @param avctx codec context -+ * @param[out] avpkt output AVPacket -+ * @param[in] frame AVFrame containing the input to be encoded -+ * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a -+ * non-empty packet was returned in avpkt. -+ * @return 0 on success, negative error code on failure -+ */ -+ int (*encode)(struct AVCodecContext *avctx, struct AVPacket *avpkt, -+ const struct AVFrame *frame, int *got_packet_ptr); -+ /** -+ * Encode subtitles to a raw buffer. -+ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE_SUB. -+ */ -+ int (*encode_sub)(struct AVCodecContext *avctx, uint8_t *buf, -+ int buf_size, const struct AVSubtitle *sub); -+ /** -+ * Encode API with decoupled frame/packet dataflow. -+ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_PACKET. -+ * -+ * This function is called to get one output packet. -+ * It should call ff_encode_get_frame() to obtain input data. -+ */ -+ int (*receive_packet)(struct AVCodecContext *avctx, struct AVPacket *avpkt); -+ } cb; -+ -+ int (*close)(struct AVCodecContext *); -+ -+ /** -+ * Flush buffers. -+ * Will be called when seeking -+ */ -+ void (*flush)(struct AVCodecContext *); -+ -+ /** -+ * Decoding only, a comma-separated list of bitstream filters to apply to -+ * packets before decoding. -+ */ -+ const char *bsfs; -+ -+ /** -+ * Array of pointers to hardware configurations supported by the codec, -+ * or NULL if no hardware supported. The array is terminated by a NULL -+ * pointer. -+ * -+ * The user can only access this field via avcodec_get_hw_config(). -+ */ -+ const struct AVCodecHWConfigInternal *const *hw_configs; -+ -+ /** -+ * List of supported codec_tags, terminated by FF_CODEC_TAGS_END. -+ */ -+ const uint32_t *codec_tags; -+} FFCodec; -+ -+#if CONFIG_SMALL -+#define CODEC_LONG_NAME(str) .p.long_name = NULL -+#else -+#define CODEC_LONG_NAME(str) .p.long_name = str -+#endif -+ -+#if HAVE_THREADS -+#define UPDATE_THREAD_CONTEXT(func) \ -+ .update_thread_context = (func) -+#define UPDATE_THREAD_CONTEXT_FOR_USER(func) \ -+ .update_thread_context_for_user = (func) -+#else -+#define UPDATE_THREAD_CONTEXT(func) \ -+ .update_thread_context = NULL -+#define UPDATE_THREAD_CONTEXT_FOR_USER(func) \ -+ .update_thread_context_for_user = NULL -+#endif -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+#define CODEC_OLD_CHANNEL_LAYOUTS(...) CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(((const uint64_t[]) { __VA_ARGS__, 0 })) -+#if defined(__clang__) -+#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) \ -+ FF_DISABLE_DEPRECATION_WARNINGS \ -+ .p.channel_layouts = (array), \ -+ FF_ENABLE_DEPRECATION_WARNINGS -+#else -+#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) .p.channel_layouts = (array), -+#endif -+#else -+/* This is only provided to allow to test disabling FF_API_OLD_CHANNEL_LAYOUT -+ * without removing all the FF_API_OLD_CHANNEL_LAYOUT codeblocks. -+ * It is of course still expected to be removed when FF_API_OLD_CHANNEL_LAYOUT -+ * will be finally removed (along with all usages of these macros). */ -+#define CODEC_OLD_CHANNEL_LAYOUTS(...) -+#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) -+#endif -+ -+#define FF_CODEC_DECODE_CB(func) \ -+ .cb_type = FF_CODEC_CB_TYPE_DECODE, \ -+ .cb.decode = (func) -+#define FF_CODEC_DECODE_SUB_CB(func) \ -+ .cb_type = FF_CODEC_CB_TYPE_DECODE_SUB, \ -+ .cb.decode_sub = (func) -+#define FF_CODEC_RECEIVE_FRAME_CB(func) \ -+ .cb_type = FF_CODEC_CB_TYPE_RECEIVE_FRAME, \ -+ .cb.receive_frame = (func) -+#define FF_CODEC_ENCODE_CB(func) \ -+ .cb_type = FF_CODEC_CB_TYPE_ENCODE, \ -+ .cb.encode = (func) -+#define FF_CODEC_ENCODE_SUB_CB(func) \ -+ .cb_type = FF_CODEC_CB_TYPE_ENCODE_SUB, \ -+ .cb.encode_sub = (func) -+#define FF_CODEC_RECEIVE_PACKET_CB(func) \ -+ .cb_type = FF_CODEC_CB_TYPE_RECEIVE_PACKET, \ -+ .cb.receive_packet = (func) -+ -+static av_always_inline const FFCodec *ffcodec(const AVCodec *codec) -+{ -+ return (const FFCodec*)codec; -+} -+ -+#endif /* AVCODEC_CODEC_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavcodec/codec_list.c b/media/ffvpx/libavcodec/codec_list.c ---- a/media/ffvpx/libavcodec/codec_list.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec_list.c 2023-04-06 12:49:45.617610966 +0200 -@@ -1,4 +1,4 @@ --static const AVCodec * const codec_list[] = { -+static const FFCodec * const codec_list[] = { - #if CONFIG_VP8_DECODER - &ff_vp8_decoder, - #endif -diff -Naur a/media/ffvpx/libavcodec/codec_par.c b/media/ffvpx/libavcodec/codec_par.c ---- a/media/ffvpx/libavcodec/codec_par.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec_par.c 2023-04-06 12:49:40.252394850 +0200 -@@ -31,12 +31,14 @@ - static void codec_parameters_reset(AVCodecParameters *par) - { - av_freep(&par->extradata); -+ av_channel_layout_uninit(&par->ch_layout); - - memset(par, 0, sizeof(*par)); - - par->codec_type = AVMEDIA_TYPE_UNKNOWN; - par->codec_id = AV_CODEC_ID_NONE; - par->format = -1; -+ par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; - par->field_order = AV_FIELD_UNKNOWN; - par->color_range = AVCOL_RANGE_UNSPECIFIED; - par->color_primaries = AVCOL_PRI_UNSPECIFIED; -@@ -71,9 +73,12 @@ - - int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src) - { -+ int ret; -+ - codec_parameters_reset(dst); - memcpy(dst, src, sizeof(*dst)); - -+ dst->ch_layout = (AVChannelLayout){0}; - dst->extradata = NULL; - dst->extradata_size = 0; - if (src->extradata) { -@@ -84,12 +89,18 @@ - dst->extradata_size = src->extradata_size; - } - -+ ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); -+ if (ret < 0) -+ return ret; -+ - return 0; - } - - int avcodec_parameters_from_context(AVCodecParameters *par, - const AVCodecContext *codec) - { -+ int ret; -+ - codec_parameters_reset(par); - - par->codec_type = codec->codec_type; -@@ -118,8 +129,32 @@ - break; - case AVMEDIA_TYPE_AUDIO: - par->format = codec->sample_fmt; -- par->channel_layout = codec->channel_layout; -- par->channels = codec->channels; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ // if the old/new fields are set inconsistently, prefer the old ones -+ if ((codec->channels && codec->channels != codec->ch_layout.nb_channels) || -+ (codec->channel_layout && (codec->ch_layout.order != AV_CHANNEL_ORDER_NATIVE || -+ codec->ch_layout.u.mask != codec->channel_layout))) { -+ if (codec->channel_layout) -+ av_channel_layout_from_mask(&par->ch_layout, codec->channel_layout); -+ else { -+ par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; -+ par->ch_layout.nb_channels = codec->channels; -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+ } else { -+#endif -+ ret = av_channel_layout_copy(&par->ch_layout, &codec->ch_layout); -+ if (ret < 0) -+ return ret; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ } -+ par->channel_layout = par->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? -+ par->ch_layout.u.mask : 0; -+ par->channels = par->ch_layout.nb_channels; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - par->sample_rate = codec->sample_rate; - par->block_align = codec->block_align; - par->frame_size = codec->frame_size; -@@ -147,6 +182,8 @@ - int avcodec_parameters_to_context(AVCodecContext *codec, - const AVCodecParameters *par) - { -+ int ret; -+ - codec->codec_type = par->codec_type; - codec->codec_id = par->codec_id; - codec->codec_tag = par->codec_tag; -@@ -173,8 +210,32 @@ - break; - case AVMEDIA_TYPE_AUDIO: - codec->sample_fmt = par->format; -- codec->channel_layout = par->channel_layout; -- codec->channels = par->channels; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ // if the old/new fields are set inconsistently, prefer the old ones -+ if ((par->channels && par->channels != par->ch_layout.nb_channels) || -+ (par->channel_layout && (par->ch_layout.order != AV_CHANNEL_ORDER_NATIVE || -+ par->ch_layout.u.mask != par->channel_layout))) { -+ if (par->channel_layout) -+ av_channel_layout_from_mask(&codec->ch_layout, par->channel_layout); -+ else { -+ codec->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; -+ codec->ch_layout.nb_channels = par->channels; -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+ } else { -+#endif -+ ret = av_channel_layout_copy(&codec->ch_layout, &par->ch_layout); -+ if (ret < 0) -+ return ret; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ } -+ codec->channel_layout = codec->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? -+ codec->ch_layout.u.mask : 0; -+ codec->channels = codec->ch_layout.nb_channels; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - codec->sample_rate = par->sample_rate; - codec->block_align = par->block_align; - codec->frame_size = par->frame_size; -diff -Naur a/media/ffvpx/libavcodec/codec_par.h b/media/ffvpx/libavcodec/codec_par.h ---- a/media/ffvpx/libavcodec/codec_par.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/codec_par.h 2023-04-06 12:50:06.971471053 +0200 -@@ -24,6 +24,7 @@ - #include - - #include "libavutil/avutil.h" -+#include "libavutil/channel_layout.h" - #include "libavutil/rational.h" - #include "libavutil/pixfmt.h" - -@@ -31,15 +32,16 @@ - - /** - * @addtogroup lavc_core -+ * @{ - */ - - enum AVFieldOrder { - AV_FIELD_UNKNOWN, - AV_FIELD_PROGRESSIVE, -- AV_FIELD_TT, //< Top coded_first, top displayed first -- AV_FIELD_BB, //< Bottom coded first, bottom displayed first -- AV_FIELD_TB, //< Top coded first, bottom displayed first -- AV_FIELD_BT, //< Bottom coded first, top displayed first -+ AV_FIELD_TT, ///< Top coded_first, top displayed first -+ AV_FIELD_BB, ///< Bottom coded first, bottom displayed first -+ AV_FIELD_TB, ///< Top coded first, bottom displayed first -+ AV_FIELD_BT, ///< Bottom coded first, top displayed first - }; - - /** -@@ -154,16 +156,22 @@ - */ - int video_delay; - -+#if FF_API_OLD_CHANNEL_LAYOUT - /** - * Audio only. The channel layout bitmask. May be 0 if the channel layout is - * unknown or unspecified, otherwise the number of bits set must be equal to - * the channels field. -+ * @deprecated use ch_layout - */ -+ attribute_deprecated - uint64_t channel_layout; - /** - * Audio only. The number of audio channels. -+ * @deprecated use ch_layout.nb_channels - */ -+ attribute_deprecated - int channels; -+#endif - /** - * Audio only. The number of audio samples per second. - */ -@@ -198,6 +206,11 @@ - * Audio only. Number of samples to skip after a discontinuity. - */ - int seek_preroll; -+ -+ /** -+ * Audio only. The channel layout and number of channels. -+ */ -+ AVChannelLayout ch_layout; - } AVCodecParameters; - - /** -diff -Naur a/media/ffvpx/libavcodec/dct.c b/media/ffvpx/libavcodec/dct.c ---- a/media/ffvpx/libavcodec/dct.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/dct.c 2023-04-06 12:49:40.252394850 +0200 -@@ -30,7 +30,9 @@ - #include - #include - -+#include "libavutil/error.h" - #include "libavutil/mathematics.h" -+#include "libavutil/mem.h" - #include "dct.h" - #include "dct32.h" - -@@ -212,8 +214,9 @@ - } - - s->dct32 = ff_dct32_float; -- if (ARCH_X86) -- ff_dct_init_x86(s); -+#if ARCH_X86 -+ ff_dct_init_x86(s); -+#endif - - return 0; - } -diff -Naur a/media/ffvpx/libavcodec/decode.c b/media/ffvpx/libavcodec/decode.c ---- a/media/ffvpx/libavcodec/decode.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/decode.c 2023-04-06 12:50:24.491176503 +0200 -@@ -30,7 +30,9 @@ - #include "libavutil/avassert.h" - #include "libavutil/avstring.h" - #include "libavutil/bprint.h" -+#include "libavutil/channel_layout.h" - #include "libavutil/common.h" -+#include "libavutil/fifo.h" - #include "libavutil/frame.h" - #include "libavutil/hwcontext.h" - #include "libavutil/imgutils.h" -@@ -40,34 +42,17 @@ - - #include "avcodec.h" - #include "bytestream.h" -+#include "bsf.h" -+#include "codec_internal.h" - #include "decode.h" - #include "hwconfig.h" - #include "internal.h" - #include "thread.h" - --typedef struct FramePool { -- /** -- * Pools for each data plane. For audio all the planes have the same size, -- * so only pools[0] is used. -- */ -- AVBufferPool *pools[4]; -- -- /* -- * Pool parameters -- */ -- int format; -- int width, height; -- int stride_align[AV_NUM_DATA_POINTERS]; -- int linesize[4]; -- int planes; -- int channels; -- int samples; --} FramePool; -- - static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt) - { - int ret; -- buffer_size_t size; -+ size_t size; - const uint8_t *data; - uint32_t flags; - int64_t val; -@@ -89,6 +74,8 @@ - flags = bytestream_get_le32(&data); - size -= 4; - -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) { - if (size < 4) - goto fail; -@@ -107,6 +94,8 @@ - avctx->channel_layout = bytestream_get_le64(&data); - size -= 8; - } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) { - if (size < 4) - goto fail; -@@ -143,59 +132,31 @@ - return 0; - } - --#define IS_EMPTY(pkt) (!(pkt)->data) -- --static int copy_packet_props(AVPacket *dst, const AVPacket *src) --{ -- int ret = av_packet_copy_props(dst, src); -- if (ret < 0) -- return ret; -- -- dst->size = src->size; // HACK: Needed for ff_decode_frame_props(). -- dst->data = (void*)1; // HACK: Needed for IS_EMPTY(). -- -- return 0; --} -- - static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt) - { -- AVPacket tmp = { 0 }; - int ret = 0; - -- if (IS_EMPTY(avci->last_pkt_props)) { -- if (av_fifo_size(avci->pkt_props) >= sizeof(*pkt)) { -- av_fifo_generic_read(avci->pkt_props, avci->last_pkt_props, -- sizeof(*avci->last_pkt_props), NULL); -- } else -- return copy_packet_props(avci->last_pkt_props, pkt); -- } -- -- if (av_fifo_space(avci->pkt_props) < sizeof(*pkt)) { -- ret = av_fifo_grow(avci->pkt_props, sizeof(*pkt)); -- if (ret < 0) -- return ret; -+ av_packet_unref(avci->last_pkt_props); -+ if (pkt) { -+ ret = av_packet_copy_props(avci->last_pkt_props, pkt); -+ if (!ret) -+ avci->last_pkt_props->opaque = (void *)(intptr_t)pkt->size; // Needed for ff_decode_frame_props(). - } -- -- ret = copy_packet_props(&tmp, pkt); -- if (ret < 0) -- return ret; -- -- av_fifo_generic_write(avci->pkt_props, &tmp, sizeof(tmp), NULL); -- -- return 0; -+ return ret; - } - - static int decode_bsfs_init(AVCodecContext *avctx) - { - AVCodecInternal *avci = avctx->internal; -+ const FFCodec *const codec = ffcodec(avctx->codec); - int ret; - - if (avci->bsf) - return 0; - -- ret = av_bsf_list_parse_str(avctx->codec->bsfs, &avci->bsf); -+ ret = av_bsf_list_parse_str(codec->bsfs, &avci->bsf); - if (ret < 0) { -- av_log(avctx, AV_LOG_ERROR, "Error parsing decoder bitstream filters '%s': %s\n", avctx->codec->bsfs, av_err2str(ret)); -+ av_log(avctx, AV_LOG_ERROR, "Error parsing decoder bitstream filters '%s': %s\n", codec->bsfs, av_err2str(ret)); - if (ret != AVERROR(ENOMEM)) - ret = AVERROR_BUG; - goto fail; -@@ -233,7 +194,7 @@ - if (ret < 0) - return ret; - -- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { -+ if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { - ret = extract_packet_props(avctx->internal, pkt); - if (ret < 0) - goto finish; -@@ -243,11 +204,6 @@ - if (ret < 0) - goto finish; - --#if FF_API_OLD_ENCDEC -- if (avctx->codec->receive_frame) -- avci->compat_decode_consumed += pkt->size; --#endif -- - return 0; - finish: - av_packet_unref(pkt); -@@ -299,8 +255,8 @@ - static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, int64_t *discarded_samples) - { - AVCodecInternal *avci = avctx->internal; -- DecodeSimpleContext *ds = &avci->ds; -- AVPacket *pkt = ds->in_pkt; -+ AVPacket *const pkt = avci->in_pkt; -+ const FFCodec *const codec = ffcodec(avctx->codec); - int got_frame, actual_got_frame; - int ret; - -@@ -326,9 +282,9 @@ - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) { - ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt); - } else { -- ret = avctx->codec->decode(avctx, frame, &got_frame, pkt); -+ ret = codec->cb.decode(avctx, frame, &got_frame, pkt); - -- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) -+ if (!(codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) - frame->pkt_dts = pkt->dts; - if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { - if(!avctx->has_b_frames) -@@ -351,7 +307,7 @@ - got_frame = 0; - } else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { - uint8_t *side; -- buffer_size_t side_size; -+ size_t side_size; - uint32_t discard_padding = 0; - uint8_t skip_reason = 0; - uint8_t discard_reason = 0; -@@ -359,17 +315,30 @@ - if (ret >= 0 && got_frame) { - if (frame->format == AV_SAMPLE_FMT_NONE) - frame->format = avctx->sample_fmt; -+ if (!frame->ch_layout.nb_channels) { -+ int ret2 = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); -+ if (ret2 < 0) { -+ ret = ret2; -+ got_frame = 0; -+ } -+ } -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - if (!frame->channel_layout) -- frame->channel_layout = avctx->channel_layout; -+ frame->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? -+ avctx->ch_layout.u.mask : 0; - if (!frame->channels) -- frame->channels = avctx->channels; -+ frame->channels = avctx->ch_layout.nb_channels; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - if (!frame->sample_rate) - frame->sample_rate = avctx->sample_rate; - } - - side= av_packet_get_side_data(avci->last_pkt_props, AV_PKT_DATA_SKIP_SAMPLES, &side_size); - if(side && side_size>=10) { -- avci->skip_samples = AV_RL32(side) * avci->skip_samples_multiplier; -+ avci->skip_samples = AV_RL32(side); -+ avci->skip_samples = FFMAX(0, avci->skip_samples); - discard_padding = AV_RL32(side + 4); - av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n", - avci->skip_samples, (int)discard_padding); -@@ -394,23 +363,17 @@ - avci->skip_samples); - } else { - av_samples_copy(frame->extended_data, frame->extended_data, 0, avci->skip_samples, -- frame->nb_samples - avci->skip_samples, avctx->channels, frame->format); -+ frame->nb_samples - avci->skip_samples, avctx->ch_layout.nb_channels, frame->format); - if(avctx->pkt_timebase.num && avctx->sample_rate) { - int64_t diff_ts = av_rescale_q(avci->skip_samples, - (AVRational){1, avctx->sample_rate}, - avctx->pkt_timebase); - if(frame->pts!=AV_NOPTS_VALUE) - frame->pts += diff_ts; --#if FF_API_PKT_PTS --FF_DISABLE_DEPRECATION_WARNINGS -- if(frame->pkt_pts!=AV_NOPTS_VALUE) -- frame->pkt_pts += diff_ts; --FF_ENABLE_DEPRECATION_WARNINGS --#endif - if(frame->pkt_dts!=AV_NOPTS_VALUE) - frame->pkt_dts += diff_ts; -- if (frame->pkt_duration >= diff_ts) -- frame->pkt_duration -= diff_ts; -+ if (frame->duration >= diff_ts) -+ frame->duration -= diff_ts; - } else { - av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n"); - } -@@ -432,7 +395,7 @@ - int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding, - (AVRational){1, avctx->sample_rate}, - avctx->pkt_timebase); -- frame->pkt_duration = diff_ts; -+ frame->duration = diff_ts; - } else { - av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n"); - } -@@ -464,14 +427,9 @@ - if (!got_frame) - av_frame_unref(frame); - -- if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO && !(avctx->flags & AV_CODEC_FLAG_TRUNCATED)) -+ if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO) - ret = pkt->size; - --#if FF_API_AVCTX_TIMEBASE -- if (avctx->framerate.num > 0 && avctx->framerate.den > 0) -- avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); --#endif -- - /* do not stop draining when actual_got_frame != 0 or ret < 0 */ - /* got_frame == 0 but actual_got_frame != 0 when frame is discarded */ - if (avci->draining && !actual_got_frame) { -@@ -492,13 +450,8 @@ - } - } - --#if FF_API_OLD_ENCDEC -- avci->compat_decode_consumed += ret; --#endif -- - if (ret >= pkt->size || ret < 0) { - av_packet_unref(pkt); -- av_packet_unref(avci->last_pkt_props); - } else { - int consumed = ret; - -@@ -506,8 +459,9 @@ - pkt->size -= consumed; - pkt->pts = AV_NOPTS_VALUE; - pkt->dts = AV_NOPTS_VALUE; -- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { -- avci->last_pkt_props->size -= consumed; // See extract_packet_props() comment. -+ if (!(codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { -+ // See extract_packet_props() comment. -+ avci->last_pkt_props->opaque = (void *)((intptr_t)avci->last_pkt_props->opaque - consumed); - avci->last_pkt_props->pts = AV_NOPTS_VALUE; - avci->last_pkt_props->dts = AV_NOPTS_VALUE; - } -@@ -519,6 +473,54 @@ - return ret < 0 ? ret : 0; - } - -+#if CONFIG_LCMS2 -+static int detect_colorspace(AVCodecContext *avctx, AVFrame *frame) -+{ -+ AVCodecInternal *avci = avctx->internal; -+ enum AVColorTransferCharacteristic trc; -+ AVColorPrimariesDesc coeffs; -+ enum AVColorPrimaries prim; -+ cmsHPROFILE profile; -+ AVFrameSideData *sd; -+ int ret; -+ if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES)) -+ return 0; -+ -+ sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE); -+ if (!sd || !sd->size) -+ return 0; -+ -+ if (!avci->icc.avctx) { -+ ret = ff_icc_context_init(&avci->icc, avctx); -+ if (ret < 0) -+ return ret; -+ } -+ -+ profile = cmsOpenProfileFromMemTHR(avci->icc.ctx, sd->data, sd->size); -+ if (!profile) -+ return AVERROR_INVALIDDATA; -+ -+ ret = ff_icc_profile_read_primaries(&avci->icc, profile, &coeffs); -+ if (!ret) -+ ret = ff_icc_profile_detect_transfer(&avci->icc, profile, &trc); -+ cmsCloseProfile(profile); -+ if (ret < 0) -+ return ret; -+ -+ prim = av_csp_primaries_id_from_desc(&coeffs); -+ if (prim != AVCOL_PRI_UNSPECIFIED) -+ frame->color_primaries = prim; -+ if (trc != AVCOL_TRC_UNSPECIFIED) -+ frame->color_trc = trc; -+ return 0; -+} -+#else /* !CONFIG_LCMS2 */ -+static int detect_colorspace(av_unused AVCodecContext *c, av_unused AVFrame *f) -+{ -+ return 0; -+} -+#endif -+ - static int decode_simple_receive_frame(AVCodecContext *avctx, AVFrame *frame) - { - int ret; -@@ -538,30 +540,37 @@ - static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) - { - AVCodecInternal *avci = avctx->internal; -- int ret; -+ const FFCodec *const codec = ffcodec(avctx->codec); -+ int ret, ok; - - av_assert0(!frame->buf[0]); - -- if (avctx->codec->receive_frame) { -- ret = avctx->codec->receive_frame(avctx, frame); -- if (ret != AVERROR(EAGAIN)) -- av_packet_unref(avci->last_pkt_props); -+ if (codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME) { -+ ret = codec->cb.receive_frame(avctx, frame); - } else - ret = decode_simple_receive_frame(avctx, frame); - - if (ret == AVERROR_EOF) - avci->draining_done = 1; - -- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS) && -- IS_EMPTY(avci->last_pkt_props) && av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props)) -- av_fifo_generic_read(avci->pkt_props, -- avci->last_pkt_props, sizeof(*avci->last_pkt_props), NULL); -+ /* preserve ret */ -+ ok = detect_colorspace(avctx, frame); -+ if (ok < 0) { -+ av_frame_unref(frame); -+ return ok; -+ } - - if (!ret) { - frame->best_effort_timestamp = guess_correct_pts(avctx, - frame->pts, - frame->pkt_dts); - -+#if FF_API_PKT_DURATION -+FF_DISABLE_DEPRECATION_WARNINGS -+ frame->pkt_duration = frame->duration; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ - /* the only case where decode data is not set should be decoders - * that do not call ff_get_buffer() */ - av_assert0((frame->private_ref && frame->private_ref->size == sizeof(FrameDecodeData)) || -@@ -649,13 +658,38 @@ - AV_FRAME_CROP_UNALIGNED : 0); - } - --int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) -+// make sure frames returned to the caller are valid -+static int frame_validate(AVCodecContext *avctx, AVFrame *frame) -+{ -+ if (!frame->buf[0] || frame->format < 0) -+ goto fail; -+ -+ switch (avctx->codec_type) { -+ case AVMEDIA_TYPE_VIDEO: -+ if (frame->width <= 0 || frame->height <= 0) -+ goto fail; -+ break; -+ case AVMEDIA_TYPE_AUDIO: -+ if (!av_channel_layout_check(&frame->ch_layout) || -+ frame->sample_rate <= 0) -+ goto fail; -+ -+ break; -+ default: av_assert0(0); -+ } -+ -+ return 0; -+fail: -+ av_log(avctx, AV_LOG_ERROR, "An invalid frame was output by a decoder. " -+ "This is a bug, please report it.\n"); -+ return AVERROR_BUG; -+} -+ -+int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame) - { - AVCodecInternal *avci = avctx->internal; - int ret, changed; - -- av_frame_unref(frame); -- - if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec)) - return AVERROR(EINVAL); - -@@ -667,19 +701,26 @@ - return ret; - } - -+ ret = frame_validate(avctx, frame); -+ if (ret < 0) -+ goto fail; -+ - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - ret = apply_cropping(avctx, frame); -- if (ret < 0) { -- av_frame_unref(frame); -- return ret; -- } -+ if (ret < 0) -+ goto fail; - } - -- avctx->frame_number++; -+ avctx->frame_num++; -+#if FF_API_AVCTX_FRAME_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS -+ avctx->frame_number = avctx->frame_num; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - - if (avctx->flags & AV_CODEC_FLAG_DROPCHANGED) { - -- if (avctx->frame_number == 1) { -+ if (avctx->frame_num == 1) { - avci->initial_format = frame->format; - switch(avctx->codec_type) { - case AVMEDIA_TYPE_VIDEO: -@@ -689,13 +730,14 @@ - case AVMEDIA_TYPE_AUDIO: - avci->initial_sample_rate = frame->sample_rate ? frame->sample_rate : - avctx->sample_rate; -- avci->initial_channels = frame->channels; -- avci->initial_channel_layout = frame->channel_layout; -+ ret = av_channel_layout_copy(&avci->initial_ch_layout, &frame->ch_layout); -+ if (ret < 0) -+ goto fail; - break; - } - } - -- if (avctx->frame_number > 1) { -+ if (avctx->frame_num > 1) { - changed = avci->initial_format != frame->format; - - switch(avctx->codec_type) { -@@ -706,171 +748,27 @@ - case AVMEDIA_TYPE_AUDIO: - changed |= avci->initial_sample_rate != frame->sample_rate || - avci->initial_sample_rate != avctx->sample_rate || -- avci->initial_channels != frame->channels || -- avci->initial_channel_layout != frame->channel_layout; -+ av_channel_layout_compare(&avci->initial_ch_layout, &frame->ch_layout); - break; - } - - if (changed) { - avci->changed_frames_dropped++; -- av_log(avctx, AV_LOG_INFO, "dropped changed frame #%d pts %"PRId64 -+ av_log(avctx, AV_LOG_INFO, "dropped changed frame #%"PRId64" pts %"PRId64 - " drop count: %d \n", -- avctx->frame_number, frame->pts, -+ avctx->frame_num, frame->pts, - avci->changed_frames_dropped); -- av_frame_unref(frame); -- return AVERROR_INPUT_CHANGED; -+ ret = AVERROR_INPUT_CHANGED; -+ goto fail; - } - } - } - return 0; --} -- --#if FF_API_OLD_ENCDEC --FF_DISABLE_DEPRECATION_WARNINGS --static int unrefcount_frame(AVCodecInternal *avci, AVFrame *frame) --{ -- int ret; -- -- /* move the original frame to our backup */ -- av_frame_unref(avci->to_free); -- av_frame_move_ref(avci->to_free, frame); -- -- /* now copy everything except the AVBufferRefs back -- * note that we make a COPY of the side data, so calling av_frame_free() on -- * the caller's frame will work properly */ -- ret = av_frame_copy_props(frame, avci->to_free); -- if (ret < 0) -- return ret; -- -- memcpy(frame->data, avci->to_free->data, sizeof(frame->data)); -- memcpy(frame->linesize, avci->to_free->linesize, sizeof(frame->linesize)); -- if (avci->to_free->extended_data != avci->to_free->data) { -- int planes = avci->to_free->channels; -- int size = planes * sizeof(*frame->extended_data); -- -- if (!size) { -- av_frame_unref(frame); -- return AVERROR_BUG; -- } -- -- frame->extended_data = av_malloc(size); -- if (!frame->extended_data) { -- av_frame_unref(frame); -- return AVERROR(ENOMEM); -- } -- memcpy(frame->extended_data, avci->to_free->extended_data, -- size); -- } else -- frame->extended_data = frame->data; -- -- frame->format = avci->to_free->format; -- frame->width = avci->to_free->width; -- frame->height = avci->to_free->height; -- frame->channel_layout = avci->to_free->channel_layout; -- frame->nb_samples = avci->to_free->nb_samples; -- frame->channels = avci->to_free->channels; -- -- return 0; --} -- --static int compat_decode(AVCodecContext *avctx, AVFrame *frame, -- int *got_frame, const AVPacket *pkt) --{ -- AVCodecInternal *avci = avctx->internal; -- int ret = 0; -- -- av_assert0(avci->compat_decode_consumed == 0); -- -- if (avci->draining_done && pkt && pkt->size != 0) { -- av_log(avctx, AV_LOG_WARNING, "Got unexpected packet after EOF\n"); -- avcodec_flush_buffers(avctx); -- } -- -- *got_frame = 0; -- -- if (avci->compat_decode_partial_size > 0 && -- avci->compat_decode_partial_size != pkt->size) { -- av_log(avctx, AV_LOG_ERROR, -- "Got unexpected packet size after a partial decode\n"); -- ret = AVERROR(EINVAL); -- goto finish; -- } -- -- if (!avci->compat_decode_partial_size) { -- ret = avcodec_send_packet(avctx, pkt); -- if (ret == AVERROR_EOF) -- ret = 0; -- else if (ret == AVERROR(EAGAIN)) { -- /* we fully drain all the output in each decode call, so this should not -- * ever happen */ -- ret = AVERROR_BUG; -- goto finish; -- } else if (ret < 0) -- goto finish; -- } -- -- while (ret >= 0) { -- ret = avcodec_receive_frame(avctx, frame); -- if (ret < 0) { -- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) -- ret = 0; -- goto finish; -- } -- -- if (frame != avci->compat_decode_frame) { -- if (!avctx->refcounted_frames) { -- ret = unrefcount_frame(avci, frame); -- if (ret < 0) -- goto finish; -- } -- -- *got_frame = 1; -- frame = avci->compat_decode_frame; -- } else { -- if (!avci->compat_decode_warned) { -- av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_decode_* " -- "API cannot return all the frames for this decoder. " -- "Some frames will be dropped. Update your code to the " -- "new decoding API to fix this.\n"); -- avci->compat_decode_warned = 1; -- } -- } -- -- if (avci->draining || (!avctx->codec->bsfs && avci->compat_decode_consumed < pkt->size)) -- break; -- } -- --finish: -- if (ret == 0) { -- /* if there are any bsfs then assume full packet is always consumed */ -- if (avctx->codec->bsfs) -- ret = pkt->size; -- else -- ret = FFMIN(avci->compat_decode_consumed, pkt->size); -- } -- avci->compat_decode_consumed = 0; -- avci->compat_decode_partial_size = (ret >= 0) ? pkt->size - ret : 0; -- -+fail: -+ av_frame_unref(frame); - return ret; - } - --int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, -- int *got_picture_ptr, -- const AVPacket *avpkt) --{ -- return compat_decode(avctx, picture, got_picture_ptr, avpkt); --} -- --int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, -- AVFrame *frame, -- int *got_frame_ptr, -- const AVPacket *avpkt) --{ -- return compat_decode(avctx, frame, got_frame_ptr, avpkt); --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - static void get_subtitle_defaults(AVSubtitle *sub) - { - memset(sub, 0, sizeof(*sub)); -@@ -878,8 +776,8 @@ - } - - #define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */ --static int recode_subtitle(AVCodecContext *avctx, AVPacket **outpkt, -- AVPacket *inpkt, AVPacket *buf_pkt) -+static int recode_subtitle(AVCodecContext *avctx, const AVPacket **outpkt, -+ const AVPacket *inpkt, AVPacket *buf_pkt) - { - #if CONFIG_ICONV - iconv_t cd = (iconv_t)-1; -@@ -958,82 +856,8 @@ - return 1; - } - --#if FF_API_ASS_TIMING --static void insert_ts(AVBPrint *buf, int ts) --{ -- if (ts == -1) { -- av_bprintf(buf, "9:59:59.99,"); -- } else { -- int h, m, s; -- -- h = ts/360000; ts -= 360000*h; -- m = ts/ 6000; ts -= 6000*m; -- s = ts/ 100; ts -= 100*s; -- av_bprintf(buf, "%d:%02d:%02d.%02d,", h, m, s, ts); -- } --} -- --static int convert_sub_to_old_ass_form(AVSubtitle *sub, const AVPacket *pkt, AVRational tb) --{ -- int i; -- AVBPrint buf; -- -- av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); -- -- for (i = 0; i < sub->num_rects; i++) { -- char *final_dialog; -- const char *dialog; -- AVSubtitleRect *rect = sub->rects[i]; -- int ts_start, ts_duration = -1; -- long int layer; -- -- if (rect->type != SUBTITLE_ASS || !strncmp(rect->ass, "Dialogue: ", 10)) -- continue; -- -- av_bprint_clear(&buf); -- -- /* skip ReadOrder */ -- dialog = strchr(rect->ass, ','); -- if (!dialog) -- continue; -- dialog++; -- -- /* extract Layer or Marked */ -- layer = strtol(dialog, (char**)&dialog, 10); -- if (*dialog != ',') -- continue; -- dialog++; -- -- /* rescale timing to ASS time base (ms) */ -- ts_start = av_rescale_q(pkt->pts, tb, av_make_q(1, 100)); -- if (pkt->duration != -1) -- ts_duration = av_rescale_q(pkt->duration, tb, av_make_q(1, 100)); -- sub->end_display_time = FFMAX(sub->end_display_time, 10 * ts_duration); -- -- /* construct ASS (standalone file form with timestamps) string */ -- av_bprintf(&buf, "Dialogue: %ld,", layer); -- insert_ts(&buf, ts_start); -- insert_ts(&buf, ts_duration == -1 ? -1 : ts_start + ts_duration); -- av_bprintf(&buf, "%s\r\n", dialog); -- -- final_dialog = av_strdup(buf.str); -- if (!av_bprint_is_complete(&buf) || !final_dialog) { -- av_freep(&final_dialog); -- av_bprint_finalize(&buf, NULL); -- return AVERROR(ENOMEM); -- } -- av_freep(&rect->ass); -- rect->ass = final_dialog; -- } -- -- av_bprint_finalize(&buf, NULL); -- return 0; --} --#endif -- - int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, -- int *got_sub_ptr, -- AVPacket *avpkt) -+ int *got_sub_ptr, const AVPacket *avpkt) - { - int ret = 0; - -@@ -1053,7 +877,7 @@ - - if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) { - AVCodecInternal *avci = avctx->internal; -- AVPacket *pkt; -+ const AVPacket *pkt; - - ret = recode_subtitle(avctx, &pkt, avpkt, avci->buffer_pkt); - if (ret < 0) -@@ -1062,20 +886,15 @@ - if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE) - sub->pts = av_rescale_q(avpkt->pts, - avctx->pkt_timebase, AV_TIME_BASE_Q); -- ret = avctx->codec->decode(avctx, sub, got_sub_ptr, pkt); -- av_assert1((ret >= 0) >= !!*got_sub_ptr && -- !!*got_sub_ptr >= !!sub->num_rects); -- --#if FF_API_ASS_TIMING -- if (avctx->sub_text_format == FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS -- && *got_sub_ptr && sub->num_rects) { -- const AVRational tb = avctx->pkt_timebase.num ? avctx->pkt_timebase -- : avctx->time_base; -- int err = convert_sub_to_old_ass_form(sub, avpkt, tb); -- if (err < 0) -- ret = err; -+ ret = ffcodec(avctx->codec)->cb.decode_sub(avctx, sub, got_sub_ptr, pkt); -+ if (pkt == avci->buffer_pkt) // did we recode? -+ av_packet_unref(avci->buffer_pkt); -+ if (ret < 0) { -+ *got_sub_ptr = 0; -+ avsubtitle_free(sub); -+ return ret; - } --#endif -+ av_assert1(!sub->num_rects || *got_sub_ptr); - - if (sub->num_rects && !sub->end_display_time && avpkt->duration && - avctx->pkt_timebase.num) { -@@ -1096,16 +915,18 @@ - "Invalid UTF-8 in decoded subtitles text; " - "maybe missing -sub_charenc option\n"); - avsubtitle_free(sub); -- ret = AVERROR_INVALIDDATA; -- break; -+ *got_sub_ptr = 0; -+ return AVERROR_INVALIDDATA; - } - } - - if (*got_sub_ptr) -- avctx->frame_number++; -- -- if (pkt == avci->buffer_pkt) // did we recode? -- av_packet_unref(avci->buffer_pkt); -+ avctx->frame_num++; -+#if FF_API_AVCTX_FRAME_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS -+ avctx->frame_number = avctx->frame_num; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - } - - return ret; -@@ -1120,11 +941,11 @@ - - // If a device was supplied when the codec was opened, assume that the - // user wants to use it. -- if (avctx->hw_device_ctx && avctx->codec->hw_configs) { -+ if (avctx->hw_device_ctx && ffcodec(avctx->codec)->hw_configs) { - AVHWDeviceContext *device_ctx = - (AVHWDeviceContext*)avctx->hw_device_ctx->data; - for (i = 0;; i++) { -- config = &avctx->codec->hw_configs[i]->public; -+ config = &ffcodec(avctx->codec)->hw_configs[i]->public; - if (!config) - break; - if (!(config->methods & -@@ -1236,7 +1057,7 @@ - int i, ret; - - for (i = 0;; i++) { -- hw_config = avctx->codec->hw_configs[i]; -+ hw_config = ffcodec(avctx->codec)->hw_configs[i]; - if (!hw_config) - return AVERROR(ENOENT); - if (hw_config->public.pix_fmt == hw_pix_fmt) -@@ -1344,12 +1165,10 @@ - avctx->sw_pix_fmt = fmt[n - 1]; - } - -- choices = av_malloc_array(n + 1, sizeof(*choices)); -+ choices = av_memdup(fmt, (n + 1) * sizeof(*choices)); - if (!choices) - return AV_PIX_FMT_NONE; - -- memcpy(choices, fmt, (n + 1) * sizeof(*choices)); -- - for (;;) { - // Remove the previous hwaccel, if there was one. - hwaccel_uninit(avctx); -@@ -1382,9 +1201,9 @@ - break; - } - -- if (avctx->codec->hw_configs) { -+ if (ffcodec(avctx->codec)->hw_configs) { - for (i = 0;; i++) { -- hw_config = avctx->codec->hw_configs[i]; -+ hw_config = ffcodec(avctx->codec)->hw_configs[i]; - if (!hw_config) - break; - if (hw_config->public.pix_fmt == user_choice) -@@ -1460,265 +1279,9 @@ - return ret; - } - --static void frame_pool_free(void *opaque, uint8_t *data) --{ -- FramePool *pool = (FramePool*)data; -- int i; -- -- for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++) -- av_buffer_pool_uninit(&pool->pools[i]); -- -- av_freep(&data); --} -- --static AVBufferRef *frame_pool_alloc(void) --{ -- FramePool *pool = av_mallocz(sizeof(*pool)); -- AVBufferRef *buf; -- -- if (!pool) -- return NULL; -- -- buf = av_buffer_create((uint8_t*)pool, sizeof(*pool), -- frame_pool_free, NULL, 0); -- if (!buf) { -- av_freep(&pool); -- return NULL; -- } -- -- return buf; --} -- --static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) --{ -- FramePool *pool = avctx->internal->pool ? -- (FramePool*)avctx->internal->pool->data : NULL; -- AVBufferRef *pool_buf; -- int i, ret, ch, planes; -- -- if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { -- int planar = av_sample_fmt_is_planar(frame->format); -- ch = frame->channels; -- planes = planar ? ch : 1; -- } -- -- if (pool && pool->format == frame->format) { -- if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && -- pool->width == frame->width && pool->height == frame->height) -- return 0; -- if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && pool->planes == planes && -- pool->channels == ch && frame->nb_samples == pool->samples) -- return 0; -- } -- -- pool_buf = frame_pool_alloc(); -- if (!pool_buf) -- return AVERROR(ENOMEM); -- pool = (FramePool*)pool_buf->data; -- -- switch (avctx->codec_type) { -- case AVMEDIA_TYPE_VIDEO: { -- int linesize[4]; -- int w = frame->width; -- int h = frame->height; -- int unaligned; -- ptrdiff_t linesize1[4]; -- size_t size[4]; -- -- avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); -- -- do { -- // NOTE: do not align linesizes individually, this breaks e.g. assumptions -- // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 -- ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w); -- if (ret < 0) -- goto fail; -- // increase alignment of w for next try (rhs gives the lowest bit set in w) -- w += w & ~(w - 1); -- -- unaligned = 0; -- for (i = 0; i < 4; i++) -- unaligned |= linesize[i] % pool->stride_align[i]; -- } while (unaligned); -- -- for (i = 0; i < 4; i++) -- linesize1[i] = linesize[i]; -- ret = av_image_fill_plane_sizes(size, avctx->pix_fmt, h, linesize1); -- if (ret < 0) -- goto fail; -- -- for (i = 0; i < 4; i++) { -- pool->linesize[i] = linesize[i]; -- if (size[i]) { -- if (size[i] > INT_MAX - (16 + STRIDE_ALIGN - 1)) { -- ret = AVERROR(EINVAL); -- goto fail; -- } -- pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1, -- CONFIG_MEMORY_POISONING ? -- NULL : -- av_buffer_allocz); -- if (!pool->pools[i]) { -- ret = AVERROR(ENOMEM); -- goto fail; -- } -- } -- } -- pool->format = frame->format; -- pool->width = frame->width; -- pool->height = frame->height; -- -- break; -- } -- case AVMEDIA_TYPE_AUDIO: { -- ret = av_samples_get_buffer_size(&pool->linesize[0], ch, -- frame->nb_samples, frame->format, 0); -- if (ret < 0) -- goto fail; -- -- pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL); -- if (!pool->pools[0]) { -- ret = AVERROR(ENOMEM); -- goto fail; -- } -- -- pool->format = frame->format; -- pool->planes = planes; -- pool->channels = ch; -- pool->samples = frame->nb_samples; -- break; -- } -- default: av_assert0(0); -- } -- -- av_buffer_unref(&avctx->internal->pool); -- avctx->internal->pool = pool_buf; -- -- return 0; --fail: -- av_buffer_unref(&pool_buf); -- return ret; --} -- --static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) --{ -- FramePool *pool = (FramePool*)avctx->internal->pool->data; -- int planes = pool->planes; -- int i; -- -- frame->linesize[0] = pool->linesize[0]; -- -- if (planes > AV_NUM_DATA_POINTERS) { -- frame->extended_data = av_mallocz_array(planes, sizeof(*frame->extended_data)); -- frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS; -- frame->extended_buf = av_mallocz_array(frame->nb_extended_buf, -- sizeof(*frame->extended_buf)); -- if (!frame->extended_data || !frame->extended_buf) { -- av_freep(&frame->extended_data); -- av_freep(&frame->extended_buf); -- return AVERROR(ENOMEM); -- } -- } else { -- frame->extended_data = frame->data; -- av_assert0(frame->nb_extended_buf == 0); -- } -- -- for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) { -- frame->buf[i] = av_buffer_pool_get(pool->pools[0]); -- if (!frame->buf[i]) -- goto fail; -- frame->extended_data[i] = frame->data[i] = frame->buf[i]->data; -- } -- for (i = 0; i < frame->nb_extended_buf; i++) { -- frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]); -- if (!frame->extended_buf[i]) -- goto fail; -- frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data; -- } -- -- if (avctx->debug & FF_DEBUG_BUFFERS) -- av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame); -- -- return 0; --fail: -- av_frame_unref(frame); -- return AVERROR(ENOMEM); --} -- --static int video_get_buffer(AVCodecContext *s, AVFrame *pic) --{ -- FramePool *pool = (FramePool*)s->internal->pool->data; -- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format); -- int i; -- -- if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) { -- av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n"); -- return -1; -- } -- -- if (!desc) { -- av_log(s, AV_LOG_ERROR, -- "Unable to get pixel format descriptor for format %s\n", -- av_get_pix_fmt_name(pic->format)); -- return AVERROR(EINVAL); -- } -- -- memset(pic->data, 0, sizeof(pic->data)); -- pic->extended_data = pic->data; -- -- for (i = 0; i < 4 && pool->pools[i]; i++) { -- pic->linesize[i] = pool->linesize[i]; -- -- pic->buf[i] = av_buffer_pool_get(pool->pools[i]); -- if (!pic->buf[i]) -- goto fail; -- -- pic->data[i] = pic->buf[i]->data; -- } -- for (; i < AV_NUM_DATA_POINTERS; i++) { -- pic->data[i] = NULL; -- pic->linesize[i] = 0; -- } -- if (desc->flags & AV_PIX_FMT_FLAG_PAL || -- ((desc->flags & FF_PSEUDOPAL) && pic->data[1])) -- avpriv_set_systematic_pal2((uint32_t *)pic->data[1], pic->format); -- -- if (s->debug & FF_DEBUG_BUFFERS) -- av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic); -- -- return 0; --fail: -- av_frame_unref(pic); -- return AVERROR(ENOMEM); --} -- --int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) --{ -- int ret; -- -- if (avctx->hw_frames_ctx) { -- ret = av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); -- frame->width = avctx->coded_width; -- frame->height = avctx->coded_height; -- return ret; -- } -- -- if ((ret = update_frame_pool(avctx, frame)) < 0) -- return ret; -- -- switch (avctx->codec_type) { -- case AVMEDIA_TYPE_VIDEO: -- return video_get_buffer(avctx, frame); -- case AVMEDIA_TYPE_AUDIO: -- return audio_get_buffer(avctx, frame); -- default: -- return -1; -- } --} -- - static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) - { -- buffer_size_t size; -+ size_t size; - const uint8_t *side_metadata; - - AVDictionary **frame_md = &frame->metadata; -@@ -1728,9 +1291,9 @@ - return av_packet_unpack_dictionary(side_metadata, size, frame_md); - } - --int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) -+int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, -+ AVFrame *frame, const AVPacket *pkt) - { -- AVPacket *pkt = avctx->internal->last_pkt_props; - static const struct { - enum AVPacketSideDataType packet; - enum AVFrameSideDataType frame; -@@ -1745,41 +1308,60 @@ - { AV_PKT_DATA_A53_CC, AV_FRAME_DATA_A53_CC }, - { AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE }, - { AV_PKT_DATA_S12M_TIMECODE, AV_FRAME_DATA_S12M_TIMECODE }, -+ { AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, - }; - -- if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { -- frame->pts = pkt->pts; --#if FF_API_PKT_PTS --FF_DISABLE_DEPRECATION_WARNINGS -- frame->pkt_pts = pkt->pts; --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- frame->pkt_pos = pkt->pos; -- frame->pkt_duration = pkt->duration; -- frame->pkt_size = pkt->size; -- -- for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) { -- buffer_size_t size; -- uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); -- if (packet_sd) { -- AVFrameSideData *frame_sd = av_frame_new_side_data(frame, -- sd[i].frame, -- size); -- if (!frame_sd) -- return AVERROR(ENOMEM); -+ frame->pts = pkt->pts; -+ frame->pkt_pos = pkt->pos; -+ frame->duration = pkt->duration; -+ frame->pkt_size = pkt->size; -+ -+ for (int i = 0; i < FF_ARRAY_ELEMS(sd); i++) { -+ size_t size; -+ uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); -+ if (packet_sd) { -+ AVFrameSideData *frame_sd = av_frame_new_side_data(frame, -+ sd[i].frame, -+ size); -+ if (!frame_sd) -+ return AVERROR(ENOMEM); - -- memcpy(frame_sd->data, packet_sd, size); -- } -+ memcpy(frame_sd->data, packet_sd, size); - } -- add_metadata_from_side_data(pkt, frame); -+ } -+ add_metadata_from_side_data(pkt, frame); - -- if (pkt->flags & AV_PKT_FLAG_DISCARD) { -- frame->flags |= AV_FRAME_FLAG_DISCARD; -- } else { -- frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); -- } -+ if (pkt->flags & AV_PKT_FLAG_DISCARD) { -+ frame->flags |= AV_FRAME_FLAG_DISCARD; -+ } else { -+ frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); - } -+ -+ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { -+ int ret = av_buffer_replace(&frame->opaque_ref, pkt->opaque_ref); -+ if (ret < 0) -+ return ret; -+ frame->opaque = pkt->opaque; -+ } -+ -+ return 0; -+} -+ -+int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) -+{ -+ const AVPacket *pkt = avctx->internal->last_pkt_props; -+ -+ if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SETS_FRAME_PROPS)) { -+ int ret = ff_decode_frame_props_from_pkt(avctx, frame, pkt); -+ if (ret < 0) -+ return ret; -+ frame->pkt_size = (int)(intptr_t)pkt->opaque; -+ } -+#if FF_API_REORDERED_OPAQUE -+FF_DISABLE_DEPRECATION_WARNINGS - frame->reordered_opaque = avctx->reordered_opaque; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - - if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) - frame->color_primaries = avctx->color_primaries; -@@ -1813,25 +1395,18 @@ - frame->sample_rate = avctx->sample_rate; - if (frame->format < 0) - frame->format = avctx->sample_fmt; -- if (!frame->channel_layout) { -- if (avctx->channel_layout) { -- if (av_get_channel_layout_nb_channels(avctx->channel_layout) != -- avctx->channels) { -- av_log(avctx, AV_LOG_ERROR, "Inconsistent channel " -- "configuration.\n"); -- return AVERROR(EINVAL); -- } -- -- frame->channel_layout = avctx->channel_layout; -- } else { -- if (avctx->channels > FF_SANE_NB_CHANNELS) { -- av_log(avctx, AV_LOG_ERROR, "Too many channels: %d.\n", -- avctx->channels); -- return AVERROR(ENOSYS); -- } -- } -+ if (!frame->ch_layout.nb_channels) { -+ int ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); -+ if (ret < 0) -+ return ret; - } -- frame->channels = avctx->channels; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ frame->channels = frame->ch_layout.nb_channels; -+ frame->channel_layout = frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? -+ frame->ch_layout.u.mask : 0; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - break; - } - return 0; -@@ -1846,8 +1421,6 @@ - int flags = desc ? desc->flags : 0; - if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PAL)) - num_planes = 2; -- if ((flags & FF_PSEUDOPAL) && frame->data[1]) -- num_planes = 2; - for (i = 0; i < num_planes; i++) { - av_assert0(frame->data[i]); - } -@@ -1903,6 +1476,8 @@ - int override_dimensions = 1; - int ret; - -+ av_assert0(av_codec_is_decoder(avctx->codec)); -+ - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - if ((unsigned)avctx->width > INT_MAX - STRIDE_ALIGN || - (ret = av_image_check_size2(FFALIGN(avctx->width, STRIDE_ALIGN), avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx)) < 0 || avctx->pix_fmt<0) { -@@ -1923,7 +1498,16 @@ - goto fail; - } - } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { -- if (frame->nb_samples * (int64_t)avctx->channels > avctx->max_samples) { -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ /* compat layer for old-style get_buffer() implementations */ -+ avctx->channels = avctx->ch_layout.nb_channels; -+ avctx->channel_layout = (avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE) ? -+ avctx->ch_layout.u.mask : 0; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ -+ if (frame->nb_samples * (int64_t)avctx->ch_layout.nb_channels > avctx->max_samples) { - av_log(avctx, AV_LOG_ERROR, "samples per frame %d, exceeds max_samples %"PRId64"\n", frame->nb_samples, avctx->max_samples); - ret = AVERROR(EINVAL); - goto fail; -@@ -1953,7 +1537,7 @@ - - end: - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions && -- !(avctx->codec->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)) { -+ !(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)) { - frame->width = avctx->width; - frame->height = avctx->height; - } -@@ -2014,30 +1598,53 @@ - - int ff_decode_preinit(AVCodecContext *avctx) - { -+ AVCodecInternal *avci = avctx->internal; - int ret = 0; - - /* if the decoder init function was already called previously, - * free the already allocated subtitle_header before overwriting it */ - av_freep(&avctx->subtitle_header); - --#if FF_API_THREAD_SAFE_CALLBACKS --FF_DISABLE_DEPRECATION_WARNINGS -- if ((avctx->thread_type & FF_THREAD_FRAME) && -- avctx->get_buffer2 != avcodec_default_get_buffer2 && -- !avctx->thread_safe_callbacks) { -- av_log(avctx, AV_LOG_WARNING, "Requested frame threading with a " -- "custom get_buffer2() implementation which is not marked as " -- "thread safe. This is not supported anymore, make your " -- "callback thread-safe.\n"); -- } --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - if (avctx->codec->max_lowres < avctx->lowres || avctx->lowres < 0) { - av_log(avctx, AV_LOG_WARNING, "The maximum value for lowres supported by the decoder is %d\n", - avctx->codec->max_lowres); - avctx->lowres = avctx->codec->max_lowres; - } -+ if (avctx->sub_charenc) { -+ if (avctx->codec_type != AVMEDIA_TYPE_SUBTITLE) { -+ av_log(avctx, AV_LOG_ERROR, "Character encoding is only " -+ "supported with subtitles codecs\n"); -+ return AVERROR(EINVAL); -+ } else if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) { -+ av_log(avctx, AV_LOG_WARNING, "Codec '%s' is bitmap-based, " -+ "subtitles character encoding will be ignored\n", -+ avctx->codec_descriptor->name); -+ avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_DO_NOTHING; -+ } else { -+ /* input character encoding is set for a text based subtitle -+ * codec at this point */ -+ if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_AUTOMATIC) -+ avctx->sub_charenc_mode = FF_SUB_CHARENC_MODE_PRE_DECODER; -+ -+ if (avctx->sub_charenc_mode == FF_SUB_CHARENC_MODE_PRE_DECODER) { -+#if CONFIG_ICONV -+ iconv_t cd = iconv_open("UTF-8", avctx->sub_charenc); -+ if (cd == (iconv_t)-1) { -+ ret = AVERROR(errno); -+ av_log(avctx, AV_LOG_ERROR, "Unable to open iconv context " -+ "with input character encoding \"%s\"\n", avctx->sub_charenc); -+ return ret; -+ } -+ iconv_close(cd); -+#else -+ av_log(avctx, AV_LOG_ERROR, "Character encoding subtitles " -+ "conversion needs a libavcodec built with iconv support " -+ "for this codec\n"); -+ return AVERROR(ENOSYS); -+#endif -+ } -+ } -+ } - - avctx->pts_correction_num_faulty_pts = - avctx->pts_correction_num_faulty_dts = 0; -@@ -2052,9 +1659,29 @@ - avctx->export_side_data |= AV_CODEC_EXPORT_DATA_MVS; - } - -+ avci->in_pkt = av_packet_alloc(); -+ avci->last_pkt_props = av_packet_alloc(); -+ if (!avci->in_pkt || !avci->last_pkt_props) -+ return AVERROR(ENOMEM); -+ - ret = decode_bsfs_init(avctx); - if (ret < 0) - return ret; - - return 0; - } -+ -+int ff_copy_palette(void *dst, const AVPacket *src, void *logctx) -+{ -+ size_t size; -+ const void *pal = av_packet_get_side_data(src, AV_PKT_DATA_PALETTE, &size); -+ -+ if (pal && size == AVPALETTE_SIZE) { -+ memcpy(dst, pal, AVPALETTE_SIZE); -+ return 1; -+ } else if (pal) { -+ av_log(logctx, AV_LOG_ERROR, -+ "Palette size %"SIZE_SPECIFIER" is wrong\n", size); -+ } -+ return 0; -+} -diff -Naur a/media/ffvpx/libavcodec/decode.h b/media/ffvpx/libavcodec/decode.h ---- a/media/ffvpx/libavcodec/decode.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/decode.h 2023-04-06 12:50:24.491176503 +0200 -@@ -54,6 +54,11 @@ - } FrameDecodeData; - - /** -+ * avcodec_receive_frame() implementation for decoders. -+ */ -+int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame); -+ -+/** - * Called by decoders to get the next packet for decoding. - * - * @param pkt An empty packet to be filled with data. -@@ -65,6 +70,12 @@ - int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt); - - /** -+ * Set various frame properties from the provided packet. -+ */ -+int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, -+ AVFrame *frame, const AVPacket *pkt); -+ -+/** - * Set various frame properties from the codec context / packet data. - */ - int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame); -@@ -80,9 +91,63 @@ - int ff_attach_decode_data(AVFrame *frame); - - /** -+ * Check whether the side-data of src contains a palette of -+ * size AVPALETTE_SIZE; if so, copy it to dst and return 1; -+ * else return 0. -+ * Also emit an error message upon encountering a palette -+ * with invalid size. -+ */ -+int ff_copy_palette(void *dst, const AVPacket *src, void *logctx); -+ -+/** - * Perform decoder initialization and validation. -- * Called when opening the decoder, before the AVCodec.init() call. -+ * Called when opening the decoder, before the FFCodec.init() call. - */ - int ff_decode_preinit(AVCodecContext *avctx); - -+/** -+ * Check that the provided frame dimensions are valid and set them on the codec -+ * context. -+ */ -+int ff_set_dimensions(AVCodecContext *s, int width, int height); -+ -+/** -+ * Check that the provided sample aspect ratio is valid and set it on the codec -+ * context. -+ */ -+int ff_set_sar(AVCodecContext *avctx, AVRational sar); -+ -+/** -+ * Select the (possibly hardware accelerated) pixel format. -+ * This is a wrapper around AVCodecContext.get_format() and should be used -+ * instead of calling get_format() directly. -+ * -+ * The list of pixel formats must contain at least one valid entry, and is -+ * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software, -+ * the last entry in the list must be the most accurate software format. -+ * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt -+ * must be set before calling this function. -+ */ -+int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); -+ -+/** -+ * Get a buffer for a frame. This is a wrapper around -+ * AVCodecContext.get_buffer() and should be used instead calling get_buffer() -+ * directly. -+ */ -+int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); -+ -+#define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable -+/** -+ * Identical in function to ff_get_buffer(), except it reuses the existing buffer -+ * if available. -+ */ -+int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); -+ -+/** -+ * Add or update AV_FRAME_DATA_MATRIXENCODING side data. -+ */ -+int ff_side_data_update_matrix_encoding(AVFrame *frame, -+ enum AVMatrixEncoding matrix_encoding); -+ - #endif /* AVCODEC_DECODE_H */ -diff -Naur a/media/ffvpx/libavcodec/defs.h b/media/ffvpx/libavcodec/defs.h ---- a/media/ffvpx/libavcodec/defs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/defs.h 2023-04-06 12:50:06.971471053 +0200 -@@ -0,0 +1,192 @@ -+/* -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_DEFS_H -+#define AVCODEC_DEFS_H -+ -+/** -+ * @file -+ * @ingroup libavc -+ * Misc types and constants that do not belong anywhere else. -+ */ -+ -+#include -+#include -+ -+/** -+ * @ingroup lavc_decoding -+ * Required number of additionally allocated bytes at the end of the input bitstream for decoding. -+ * This is mainly needed because some optimized bitstream readers read -+ * 32 or 64 bit at once and could read over the end.
-+ * Note: If the first 23 bits of the additional bytes are not 0, then damaged -+ * MPEG bitstreams could cause overread and segfault. -+ */ -+#define AV_INPUT_BUFFER_PADDING_SIZE 64 -+ -+/** -+ * Verify checksums embedded in the bitstream (could be of either encoded or -+ * decoded data, depending on the format) and print an error message on mismatch. -+ * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the -+ * decoder/demuxer returning an error. -+ */ -+#define AV_EF_CRCCHECK (1<<0) -+#define AV_EF_BITSTREAM (1<<1) ///< detect bitstream specification deviations -+#define AV_EF_BUFFER (1<<2) ///< detect improper bitstream length -+#define AV_EF_EXPLODE (1<<3) ///< abort decoding on minor error detection -+ -+#define AV_EF_IGNORE_ERR (1<<15) ///< ignore errors and continue -+#define AV_EF_CAREFUL (1<<16) ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors -+#define AV_EF_COMPLIANT (1<<17) ///< consider all spec non compliances as errors -+#define AV_EF_AGGRESSIVE (1<<18) ///< consider things that a sane encoder/muxer should not do as an error -+ -+#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software. -+#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences. -+#define FF_COMPLIANCE_NORMAL 0 -+#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions -+#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things. -+ -+/** -+ * @ingroup lavc_decoding -+ */ -+enum AVDiscard{ -+ /* We leave some space between them for extensions (drop some -+ * keyframes for intra-only or drop just some bidir frames). */ -+ AVDISCARD_NONE =-16, ///< discard nothing -+ AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi -+ AVDISCARD_NONREF = 8, ///< discard all non reference -+ AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames -+ AVDISCARD_NONINTRA= 24, ///< discard all non intra frames -+ AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes -+ AVDISCARD_ALL = 48, ///< discard all -+}; -+ -+enum AVAudioServiceType { -+ AV_AUDIO_SERVICE_TYPE_MAIN = 0, -+ AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, -+ AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, -+ AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, -+ AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, -+ AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, -+ AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, -+ AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, -+ AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, -+ AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI -+}; -+ -+/** -+ * Pan Scan area. -+ * This specifies the area which should be displayed. -+ * Note there may be multiple such areas for one frame. -+ */ -+typedef struct AVPanScan { -+ /** -+ * id -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int id; -+ -+ /** -+ * width and height in 1/16 pel -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int width; -+ int height; -+ -+ /** -+ * position of the top left corner in 1/16 pel for up to 3 fields/frames -+ * - encoding: Set by user. -+ * - decoding: Set by libavcodec. -+ */ -+ int16_t position[3][2]; -+} AVPanScan; -+ -+/** -+ * This structure describes the bitrate properties of an encoded bitstream. It -+ * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD -+ * parameters for H.264/HEVC. -+ */ -+typedef struct AVCPBProperties { -+ /** -+ * Maximum bitrate of the stream, in bits per second. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t max_bitrate; -+ /** -+ * Minimum bitrate of the stream, in bits per second. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t min_bitrate; -+ /** -+ * Average bitrate of the stream, in bits per second. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t avg_bitrate; -+ -+ /** -+ * The size of the buffer to which the ratecontrol is applied, in bits. -+ * Zero if unknown or unspecified. -+ */ -+ int64_t buffer_size; -+ -+ /** -+ * The delay between the time the packet this structure is associated with -+ * is received and the time when it should be decoded, in periods of a 27MHz -+ * clock. -+ * -+ * UINT64_MAX when unknown or unspecified. -+ */ -+ uint64_t vbv_delay; -+} AVCPBProperties; -+ -+/** -+ * Allocate a CPB properties structure and initialize its fields to default -+ * values. -+ * -+ * @param size if non-NULL, the size of the allocated struct will be written -+ * here. This is useful for embedding it in side data. -+ * -+ * @return the newly allocated struct or NULL on failure -+ */ -+AVCPBProperties *av_cpb_properties_alloc(size_t *size); -+ -+/** -+ * This structure supplies correlation between a packet timestamp and a wall clock -+ * production time. The definition follows the Producer Reference Time ('prft') -+ * as defined in ISO/IEC 14496-12 -+ */ -+typedef struct AVProducerReferenceTime { -+ /** -+ * A UTC timestamp, in microseconds, since Unix epoch (e.g, av_gettime()). -+ */ -+ int64_t wallclock; -+ int flags; -+} AVProducerReferenceTime; -+ -+/** -+ * Encode extradata length to a buffer. Used by xiph codecs. -+ * -+ * @param s buffer to write to; must be at least (v/255+1) bytes long -+ * @param v size of extradata in bytes -+ * @return number of bytes written to the buffer. -+ */ -+unsigned int av_xiphlacing(unsigned char *s, unsigned int v); -+ -+#endif // AVCODEC_DEFS_H -diff -Naur a/media/ffvpx/libavcodec/encode.c b/media/ffvpx/libavcodec/encode.c ---- a/media/ffvpx/libavcodec/encode.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/encode.c 2023-04-06 12:50:24.491176503 +0200 -@@ -20,17 +20,19 @@ - - #include "libavutil/attributes.h" - #include "libavutil/avassert.h" -+#include "libavutil/channel_layout.h" - #include "libavutil/frame.h" - #include "libavutil/imgutils.h" - #include "libavutil/internal.h" - #include "libavutil/samplefmt.h" - - #include "avcodec.h" -+#include "codec_internal.h" - #include "encode.h" - #include "frame_thread_encoder.h" - #include "internal.h" - --int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size) -+int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size) - { - if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) { - av_log(avctx, AV_LOG_ERROR, "Invalid minimum required packet size %"PRId64" (max allowed is %d)\n", -@@ -40,18 +42,14 @@ - - av_assert0(!avpkt->data); - -- if (avctx && 2*min_size < size) { // FIXME The factor needs to be finetuned -- av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size); -- avpkt->data = avctx->internal->byte_buffer; -- avpkt->size = size; -- } -- -+ av_fast_padded_malloc(&avctx->internal->byte_buffer, -+ &avctx->internal->byte_buffer_size, size); -+ avpkt->data = avctx->internal->byte_buffer; - if (!avpkt->data) { -- int ret = av_new_packet(avpkt, size); -- if (ret < 0) -- av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size); -- return ret; -+ av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size); -+ return AVERROR(ENOMEM); - } -+ avpkt->size = size; - - return 0; - } -@@ -74,7 +72,6 @@ - return ret; - } - avpkt->data = avpkt->buf->data; -- memset(avpkt->data + avpkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); - - return 0; - } -@@ -98,6 +95,7 @@ - ret = AVERROR(EINVAL); - goto fail; - } -+ memset(avpkt->data + avpkt->size, 0, AV_INPUT_BUFFER_PADDING_SIZE); - - ret = 0; - fail: -@@ -109,17 +107,35 @@ - return ret; - } - -+static int encode_make_refcounted(AVCodecContext *avctx, AVPacket *avpkt) -+{ -+ uint8_t *data = avpkt->data; -+ int ret; -+ -+ if (avpkt->buf) -+ return 0; -+ -+ avpkt->data = NULL; -+ ret = ff_get_encode_buffer(avctx, avpkt, avpkt->size, 0); -+ if (ret < 0) -+ return ret; -+ memcpy(avpkt->data, data, avpkt->size); -+ -+ return 0; -+} -+ - /** - * Pad last frame with silence. - */ --static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src) -+static int pad_last_frame(AVCodecContext *s, AVFrame *frame, const AVFrame *src, int out_samples) - { - int ret; - - frame->format = src->format; -- frame->channel_layout = src->channel_layout; -- frame->channels = src->channels; -- frame->nb_samples = s->frame_size; -+ frame->nb_samples = out_samples; -+ ret = av_channel_layout_copy(&frame->ch_layout, &s->ch_layout); -+ if (ret < 0) -+ goto fail; - ret = av_frame_get_buffer(frame, 0); - if (ret < 0) - goto fail; -@@ -129,17 +145,19 @@ - goto fail; - - if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0, -- src->nb_samples, s->channels, s->sample_fmt)) < 0) -+ src->nb_samples, s->ch_layout.nb_channels, -+ s->sample_fmt)) < 0) - goto fail; - if ((ret = av_samples_set_silence(frame->extended_data, src->nb_samples, - frame->nb_samples - src->nb_samples, -- s->channels, s->sample_fmt)) < 0) -+ s->ch_layout.nb_channels, s->sample_fmt)) < 0) - goto fail; - - return 0; - - fail: - av_frame_unref(frame); -+ s->internal->last_audio_frame = 0; - return ret; - } - -@@ -152,8 +170,13 @@ - return -1; - } - -- ret = avctx->codec->encode_sub(avctx, buf, buf_size, sub); -- avctx->frame_number++; -+ ret = ffcodec(avctx->codec)->cb.encode_sub(avctx, buf, buf_size, sub); -+ avctx->frame_num++; -+#if FF_API_AVCTX_FRAME_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS -+ avctx->frame_number = avctx->frame_num; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - return ret; - } - -@@ -172,11 +195,87 @@ - return 0; - } - -+int ff_encode_reordered_opaque(AVCodecContext *avctx, -+ AVPacket *pkt, const AVFrame *frame) -+{ -+#if FF_API_REORDERED_OPAQUE -+FF_DISABLE_DEPRECATION_WARNINGS -+ avctx->reordered_opaque = frame->reordered_opaque; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ -+ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { -+ int ret = av_buffer_replace(&pkt->opaque_ref, frame->opaque_ref); -+ if (ret < 0) -+ return ret; -+ pkt->opaque = frame->opaque; -+ } -+ -+ return 0; -+} -+ -+int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, -+ AVFrame *frame, int *got_packet) -+{ -+ const FFCodec *const codec = ffcodec(avctx->codec); -+ int ret; -+ -+ ret = codec->cb.encode(avctx, avpkt, frame, got_packet); -+ emms_c(); -+ av_assert0(ret <= 0); -+ -+ if (!ret && *got_packet) { -+ if (avpkt->data) { -+ ret = encode_make_refcounted(avctx, avpkt); -+ if (ret < 0) -+ goto unref; -+ // Date returned by encoders must always be ref-counted -+ av_assert0(avpkt->buf); -+ } -+ -+ // set the timestamps for the simple no-delay case -+ // encoders with delay have to set the timestamps themselves -+ if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || -+ (frame && (codec->caps_internal & FF_CODEC_CAP_EOF_FLUSH))) { -+ if (avpkt->pts == AV_NOPTS_VALUE) -+ avpkt->pts = frame->pts; -+ -+ if (!avpkt->duration) { -+ if (frame->duration) -+ avpkt->duration = frame->duration; -+ else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { -+ avpkt->duration = ff_samples_to_time_base(avctx, -+ frame->nb_samples); -+ } -+ } -+ -+ ret = ff_encode_reordered_opaque(avctx, avpkt, frame); -+ if (ret < 0) -+ goto unref; -+ } -+ -+ // dts equals pts unless there is reordering -+ // there can be no reordering if there is no encoder delay -+ if (!(avctx->codec_descriptor->props & AV_CODEC_PROP_REORDER) || -+ !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || -+ (codec->caps_internal & FF_CODEC_CAP_EOF_FLUSH)) -+ avpkt->dts = avpkt->pts; -+ } else { -+unref: -+ av_packet_unref(avpkt); -+ } -+ -+ if (frame) -+ av_frame_unref(frame); -+ -+ return ret; -+} -+ - static int encode_simple_internal(AVCodecContext *avctx, AVPacket *avpkt) - { - AVCodecInternal *avci = avctx->internal; -- EncodeSimpleContext *es = &avci->es; -- AVFrame *frame = es->in_frame; -+ AVFrame *frame = avci->in_frame; -+ const FFCodec *const codec = ffcodec(avctx->codec); - int got_packet; - int ret; - -@@ -192,7 +291,7 @@ - - if (!frame->buf[0]) { - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY || -- (avci->frame_thread_encoder && avctx->active_thread_type & FF_THREAD_FRAME))) -+ avci->frame_thread_encoder)) - return AVERROR_EOF; - - // Flushing is signaled with a NULL frame -@@ -201,69 +300,18 @@ - - got_packet = 0; - -- av_assert0(avctx->codec->encode2); -+ av_assert0(codec->cb_type == FF_CODEC_CB_TYPE_ENCODE); - -- if (CONFIG_FRAME_THREAD_ENCODER && -- avci->frame_thread_encoder && (avctx->active_thread_type & FF_THREAD_FRAME)) -- /* This might modify frame, but it doesn't matter, because -- * the frame properties used below are not used for video -- * (due to the delay inherent in frame threaded encoding, it makes -- * no sense to use the properties of the current frame anyway). */ -+ if (CONFIG_FRAME_THREAD_ENCODER && avci->frame_thread_encoder) -+ /* This will unref frame. */ - ret = ff_thread_video_encode_frame(avctx, avpkt, frame, &got_packet); - else { -- ret = avctx->codec->encode2(avctx, avpkt, frame, &got_packet); -- if (avctx->codec->type == AVMEDIA_TYPE_VIDEO && !ret && got_packet && -- !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) -- avpkt->pts = avpkt->dts = frame->pts; -- } -- -- av_assert0(ret <= 0); -- -- emms_c(); -- -- if (!ret && got_packet) { -- if (avpkt->data) { -- ret = av_packet_make_refcounted(avpkt); -- if (ret < 0) -- goto end; -- } -- -- if (frame && !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) { -- if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { -- if (avpkt->pts == AV_NOPTS_VALUE) -- avpkt->pts = frame->pts; -- if (!avpkt->duration) -- avpkt->duration = ff_samples_to_time_base(avctx, -- frame->nb_samples); -- } -- } -- if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { -- /* NOTE: if we add any audio encoders which output non-keyframe packets, -- * this needs to be moved to the encoders, but for now we can do it -- * here to simplify things */ -- avpkt->flags |= AV_PKT_FLAG_KEY; -- avpkt->dts = avpkt->pts; -- } -+ ret = ff_encode_encode_cb(avctx, avpkt, frame, &got_packet); - } - - if (avci->draining && !got_packet) - avci->draining_done = 1; - --end: -- if (ret < 0 || !got_packet) -- av_packet_unref(avpkt); -- -- if (frame) { -- if (!ret) -- avctx->frame_number++; -- av_frame_unref(frame); -- } -- -- if (got_packet) -- // Encoders must always return ref-counted buffers. -- // Side-data only packets have no data and can be not ref-counted. -- av_assert0(!avpkt->data || avpkt->buf); -- - return ret; - } - -@@ -297,8 +345,8 @@ - return AVERROR(EINVAL); - } - -- if (avctx->codec->receive_packet) { -- ret = avctx->codec->receive_packet(avctx, avpkt); -+ if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_RECEIVE_PACKET) { -+ ret = ffcodec(avctx->codec)->cb.receive_packet(avctx, avpkt); - if (ret < 0) - av_packet_unref(avpkt); - else -@@ -307,6 +355,8 @@ - av_assert0(!avpkt->data || avpkt->buf); - } else - ret = encode_simple_receive_packet(avctx, avpkt); -+ if (ret >= 0) -+ avpkt->flags |= avci->intra_only_flag; - - if (ret == AVERROR_EOF) - avci->draining_done = 1; -@@ -314,6 +364,53 @@ - return ret; - } - -+#if CONFIG_LCMS2 -+static int encode_generate_icc_profile(AVCodecContext *avctx, AVFrame *frame) -+{ -+ enum AVColorTransferCharacteristic trc = frame->color_trc; -+ enum AVColorPrimaries prim = frame->color_primaries; -+ const FFCodec *const codec = ffcodec(avctx->codec); -+ AVCodecInternal *avci = avctx->internal; -+ cmsHPROFILE profile; -+ int ret; -+ -+ /* don't generate ICC profiles if disabled or unsupported */ -+ if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES)) -+ return 0; -+ if (!(codec->caps_internal & FF_CODEC_CAP_ICC_PROFILES)) -+ return 0; -+ -+ if (trc == AVCOL_TRC_UNSPECIFIED) -+ trc = avctx->color_trc; -+ if (prim == AVCOL_PRI_UNSPECIFIED) -+ prim = avctx->color_primaries; -+ if (trc == AVCOL_TRC_UNSPECIFIED || prim == AVCOL_PRI_UNSPECIFIED) -+ return 0; /* can't generate ICC profile with missing csp tags */ -+ -+ if (av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE)) -+ return 0; /* don't overwrite existing ICC profile */ -+ -+ if (!avci->icc.avctx) { -+ ret = ff_icc_context_init(&avci->icc, avctx); -+ if (ret < 0) -+ return ret; -+ } -+ -+ ret = ff_icc_profile_generate(&avci->icc, prim, trc, &profile); -+ if (ret < 0) -+ return ret; -+ -+ ret = ff_icc_profile_attach(&avci->icc, profile, frame); -+ cmsCloseProfile(profile); -+ return ret; -+} -+#else /* !CONFIG_LCMS2 */ -+static int encode_generate_icc_profile(av_unused AVCodecContext *c, av_unused AVFrame *f) -+{ -+ return 0; -+} -+#endif -+ - static int encode_send_frame_internal(AVCodecContext *avctx, const AVFrame *src) - { - AVCodecInternal *avci = avctx->internal; -@@ -327,37 +424,59 @@ - avctx->audio_service_type = *(enum AVAudioServiceType*)sd->data; - - /* check for valid frame size */ -- if (avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME) { -- if (src->nb_samples > avctx->frame_size) { -- av_log(avctx, AV_LOG_ERROR, "more samples than frame size\n"); -- return AVERROR(EINVAL); -- } -- } else if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { -+ if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { - /* if we already got an undersized frame, that must have been the last */ - if (avctx->internal->last_audio_frame) { - av_log(avctx, AV_LOG_ERROR, "frame_size (%d) was not respected for a non-last frame\n", avctx->frame_size); - return AVERROR(EINVAL); - } -- -+ if (src->nb_samples > avctx->frame_size) { -+ av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) > frame_size (%d)\n", src->nb_samples, avctx->frame_size); -+ return AVERROR(EINVAL); -+ } - if (src->nb_samples < avctx->frame_size) { -- ret = pad_last_frame(avctx, dst, src); -- if (ret < 0) -- return ret; -- - avctx->internal->last_audio_frame = 1; -- } else if (src->nb_samples > avctx->frame_size) { -- av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d)\n", src->nb_samples, avctx->frame_size); -- return AVERROR(EINVAL); -+ if (!(avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME)) { -+ int pad_samples = avci->pad_samples ? avci->pad_samples : avctx->frame_size; -+ int out_samples = (src->nb_samples + pad_samples - 1) / pad_samples * pad_samples; -+ -+ if (out_samples != src->nb_samples) { -+ ret = pad_last_frame(avctx, dst, src, out_samples); -+ if (ret < 0) -+ return ret; -+ goto finish; -+ } -+ } - } - } - } - -- if (!dst->data[0]) { -- ret = av_frame_ref(dst, src); -+ ret = av_frame_ref(dst, src); -+ if (ret < 0) -+ return ret; -+ -+finish: -+ -+#if FF_API_PKT_DURATION -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (dst->pkt_duration && dst->pkt_duration != dst->duration) -+ dst->duration = dst->pkt_duration; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ -+ if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { -+ ret = encode_generate_icc_profile(avctx, dst); - if (ret < 0) -- return ret; -+ return ret; - } - -+ // unset frame duration unless AV_CODEC_FLAG_FRAME_DURATION is set, -+ // since otherwise we cannot be sure that whatever value it has is in the -+ // right timebase, so we would produce an incorrect value, which is worse -+ // than none at all -+ if (!(avctx->flags & AV_CODEC_FLAG_FRAME_DURATION)) -+ dst->duration = 0; -+ - return 0; - } - -@@ -372,7 +491,7 @@ - if (avci->draining) - return AVERROR_EOF; - -- if (avci->buffer_frame->data[0]) -+ if (avci->buffer_frame->buf[0]) - return AVERROR(EAGAIN); - - if (!frame) { -@@ -389,6 +508,13 @@ - return ret; - } - -+ avctx->frame_num++; -+#if FF_API_AVCTX_FRAME_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS -+ avctx->frame_number = avctx->frame_num; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ - return 0; - } - -@@ -413,139 +539,82 @@ - return 0; - } - --#if FF_API_OLD_ENCDEC --static int compat_encode(AVCodecContext *avctx, AVPacket *avpkt, -- int *got_packet, const AVFrame *frame) -+static int encode_preinit_video(AVCodecContext *avctx) - { -- AVCodecInternal *avci = avctx->internal; -- AVPacket user_pkt; -- int ret; -- -- *got_packet = 0; -+ const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt); -+ int i; - -- if (frame && avctx->codec->type == AVMEDIA_TYPE_VIDEO) { -- if (frame->format == AV_PIX_FMT_NONE) -- av_log(avctx, AV_LOG_WARNING, "AVFrame.format is not set\n"); -- if (frame->width == 0 || frame->height == 0) -- av_log(avctx, AV_LOG_WARNING, "AVFrame.width or height is not set\n"); -+ if (avctx->codec->pix_fmts) { -+ for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++) -+ if (avctx->pix_fmt == avctx->codec->pix_fmts[i]) -+ break; -+ if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE) { -+ char buf[128]; -+ snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt); -+ av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n", -+ (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf)); -+ return AVERROR(EINVAL); -+ } -+ if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P || -+ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P || -+ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P || -+ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P || -+ avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P) -+ avctx->color_range = AVCOL_RANGE_JPEG; - } - -- if (avctx->codec->capabilities & AV_CODEC_CAP_DR1) { -- av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_encode_* API does not support " -- "AV_CODEC_CAP_DR1 encoders\n"); -- return AVERROR(ENOSYS); -+ if ( avctx->bits_per_raw_sample < 0 -+ || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) { -+ av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n", -+ avctx->bits_per_raw_sample, pixdesc->comp[0].depth); -+ avctx->bits_per_raw_sample = pixdesc->comp[0].depth; -+ } -+ if (avctx->width <= 0 || avctx->height <= 0) { -+ av_log(avctx, AV_LOG_ERROR, "dimensions not set\n"); -+ return AVERROR(EINVAL); - } - -- ret = avcodec_send_frame(avctx, frame); -- if (ret == AVERROR_EOF) -- ret = 0; -- else if (ret == AVERROR(EAGAIN)) { -- /* we fully drain all the output in each encode call, so this should not -- * ever happen */ -- return AVERROR_BUG; -- } else if (ret < 0) -- return ret; -- -- av_packet_move_ref(&user_pkt, avpkt); -- while (ret >= 0) { -- ret = avcodec_receive_packet(avctx, avpkt); -- if (ret < 0) { -- if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) -- ret = 0; -- goto finish; -- } -- -- if (avpkt != avci->compat_encode_packet) { -- if (avpkt->data && user_pkt.data) { -- if (user_pkt.size >= avpkt->size) { -- memcpy(user_pkt.data, avpkt->data, avpkt->size); -- av_buffer_unref(&avpkt->buf); -- avpkt->buf = user_pkt.buf; -- avpkt->data = user_pkt.data; --FF_DISABLE_DEPRECATION_WARNINGS -- av_init_packet(&user_pkt); --FF_ENABLE_DEPRECATION_WARNINGS -- } else { -- av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size); -- av_packet_unref(avpkt); -- ret = AVERROR(EINVAL); -- goto finish; -- } -- } -+ if (avctx->ticks_per_frame && avctx->time_base.num && -+ avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { -+ av_log(avctx, AV_LOG_ERROR, -+ "ticks_per_frame %d too large for the timebase %d/%d.", -+ avctx->ticks_per_frame, -+ avctx->time_base.num, -+ avctx->time_base.den); -+ return AVERROR(EINVAL); -+ } - -- *got_packet = 1; -- avpkt = avci->compat_encode_packet; -- } else { -- if (!avci->compat_decode_warned) { -- av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_encode_* " -- "API cannot return all the packets for this encoder. " -- "Some packets will be dropped. Update your code to the " -- "new encoding API to fix this.\n"); -- avci->compat_decode_warned = 1; -- av_packet_unref(avpkt); -- } -+ if (avctx->hw_frames_ctx) { -+ AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; -+ if (frames_ctx->format != avctx->pix_fmt) { -+ av_log(avctx, AV_LOG_ERROR, -+ "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n"); -+ return AVERROR(EINVAL); - } -- -- if (avci->draining) -- break; -+ if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE && -+ avctx->sw_pix_fmt != frames_ctx->sw_format) { -+ av_log(avctx, AV_LOG_ERROR, -+ "Mismatching AVCodecContext.sw_pix_fmt (%s) " -+ "and AVHWFramesContext.sw_format (%s)\n", -+ av_get_pix_fmt_name(avctx->sw_pix_fmt), -+ av_get_pix_fmt_name(frames_ctx->sw_format)); -+ return AVERROR(EINVAL); -+ } -+ avctx->sw_pix_fmt = frames_ctx->sw_format; - } - --finish: -- if (ret < 0) -- av_packet_unref(&user_pkt); -- -- return ret; --} -- --int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, -- AVPacket *avpkt, -- const AVFrame *frame, -- int *got_packet_ptr) --{ -- int ret = compat_encode(avctx, avpkt, got_packet_ptr, frame); -- -- if (ret < 0) -- av_packet_unref(avpkt); -- -- return ret; --} -- --int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, -- AVPacket *avpkt, -- const AVFrame *frame, -- int *got_packet_ptr) --{ -- int ret = compat_encode(avctx, avpkt, got_packet_ptr, frame); -- -- if (ret < 0) -- av_packet_unref(avpkt); -- -- return ret; -+ return 0; - } --#endif - --int ff_encode_preinit(AVCodecContext *avctx) -+static int encode_preinit_audio(AVCodecContext *avctx) - { - int i; --#if FF_API_CODED_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- avctx->coded_frame = av_frame_alloc(); -- if (!avctx->coded_frame) { -- return AVERROR(ENOMEM); -- } --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- -- if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) { -- av_log(avctx, AV_LOG_ERROR, "The encoder timebase is not set.\n"); -- return AVERROR(EINVAL); -- } - - if (avctx->codec->sample_fmts) { - for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++) { - if (avctx->sample_fmt == avctx->codec->sample_fmts[i]) - break; -- if (avctx->channels == 1 && -+ if (avctx->ch_layout.nb_channels == 1 && - av_get_planar_sample_fmt(avctx->sample_fmt) == - av_get_planar_sample_fmt(avctx->codec->sample_fmts[i])) { - avctx->sample_fmt = avctx->codec->sample_fmts[i]; -@@ -560,26 +629,6 @@ - return AVERROR(EINVAL); - } - } -- if (avctx->codec->pix_fmts) { -- for (i = 0; avctx->codec->pix_fmts[i] != AV_PIX_FMT_NONE; i++) -- if (avctx->pix_fmt == avctx->codec->pix_fmts[i]) -- break; -- if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_NONE -- && !(avctx->codec_id == AV_CODEC_ID_MJPEG -- && avctx->strict_std_compliance <= FF_COMPLIANCE_UNOFFICIAL)) { -- char buf[128]; -- snprintf(buf, sizeof(buf), "%d", avctx->pix_fmt); -- av_log(avctx, AV_LOG_ERROR, "Specified pixel format %s is invalid or not supported\n", -- (char *)av_x_if_null(av_get_pix_fmt_name(avctx->pix_fmt), buf)); -- return AVERROR(EINVAL); -- } -- if (avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ420P || -- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ411P || -- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ422P || -- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ440P || -- avctx->codec->pix_fmts[i] == AV_PIX_FMT_YUVJ444P) -- avctx->color_range = AVCOL_RANGE_JPEG; -- } - if (avctx->codec->supported_samplerates) { - for (i = 0; avctx->codec->supported_samplerates[i] != 0; i++) - if (avctx->sample_rate == avctx->codec->supported_samplerates[i]) -@@ -595,52 +644,50 @@ - avctx->sample_rate); - return AVERROR(EINVAL); - } -- if (avctx->codec->channel_layouts) { -- if (!avctx->channel_layout) { -- av_log(avctx, AV_LOG_WARNING, "Channel layout not specified\n"); -- } else { -- for (i = 0; avctx->codec->channel_layouts[i] != 0; i++) -- if (avctx->channel_layout == avctx->codec->channel_layouts[i]) -- break; -- if (avctx->codec->channel_layouts[i] == 0) { -- char buf[512]; -- av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout); -- av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf); -- return AVERROR(EINVAL); -- } -+ if (avctx->codec->ch_layouts) { -+ for (i = 0; avctx->codec->ch_layouts[i].nb_channels; i++) { -+ if (!av_channel_layout_compare(&avctx->ch_layout, &avctx->codec->ch_layouts[i])) -+ break; - } -- } -- if (avctx->channel_layout && avctx->channels) { -- int channels = av_get_channel_layout_nb_channels(avctx->channel_layout); -- if (channels != avctx->channels) { -+ if (!avctx->codec->ch_layouts[i].nb_channels) { - char buf[512]; -- av_get_channel_layout_string(buf, sizeof(buf), -1, avctx->channel_layout); -- av_log(avctx, AV_LOG_ERROR, -- "Channel layout '%s' with %d channels does not match number of specified channels %d\n", -- buf, channels, avctx->channels); -+ int ret = av_channel_layout_describe(&avctx->ch_layout, buf, sizeof(buf)); -+ if (ret > 0) -+ av_log(avctx, AV_LOG_ERROR, "Specified channel layout '%s' is not supported\n", buf); - return AVERROR(EINVAL); - } -- } else if (avctx->channel_layout) { -- avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout); - } -- if (avctx->channels < 0) { -- av_log(avctx, AV_LOG_ERROR, "Specified number of channels %d is not supported\n", -- avctx->channels); -- return AVERROR(EINVAL); -- } -- if(avctx->codec_type == AVMEDIA_TYPE_VIDEO) { -- const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(avctx->pix_fmt); -- if ( avctx->bits_per_raw_sample < 0 -- || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) { -- av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n", -- avctx->bits_per_raw_sample, pixdesc->comp[0].depth); -- avctx->bits_per_raw_sample = pixdesc->comp[0].depth; -- } -- if (avctx->width <= 0 || avctx->height <= 0) { -- av_log(avctx, AV_LOG_ERROR, "dimensions not set\n"); -- return AVERROR(EINVAL); -- } -+ -+ if (!avctx->bits_per_raw_sample) -+ avctx->bits_per_raw_sample = 8 * av_get_bytes_per_sample(avctx->sample_fmt); -+ -+ return 0; -+} -+ -+int ff_encode_preinit(AVCodecContext *avctx) -+{ -+ AVCodecInternal *avci = avctx->internal; -+ int ret = 0; -+ -+ if (avctx->time_base.num <= 0 || avctx->time_base.den <= 0) { -+ av_log(avctx, AV_LOG_ERROR, "The encoder timebase is not set.\n"); -+ return AVERROR(EINVAL); -+ } -+ -+ if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE && -+ !(avctx->codec->capabilities & AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE)) { -+ av_log(avctx, AV_LOG_ERROR, "The copy_opaque flag is set, but the " -+ "encoder does not support it.\n"); -+ return AVERROR(EINVAL); -+ } -+ -+ switch (avctx->codec_type) { -+ case AVMEDIA_TYPE_VIDEO: ret = encode_preinit_video(avctx); break; -+ case AVMEDIA_TYPE_AUDIO: ret = encode_preinit_audio(avctx); break; - } -+ if (ret < 0) -+ return ret; -+ - if ( (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO) - && avctx->bit_rate>0 && avctx->bit_rate<1000) { - av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", avctx->bit_rate, avctx->bit_rate); -@@ -649,34 +696,79 @@ - if (!avctx->rc_initial_buffer_occupancy) - avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4; - -- if (avctx->ticks_per_frame && avctx->time_base.num && -- avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { -- av_log(avctx, AV_LOG_ERROR, -- "ticks_per_frame %d too large for the timebase %d/%d.", -- avctx->ticks_per_frame, -- avctx->time_base.num, -- avctx->time_base.den); -- return AVERROR(EINVAL); -+ if (avctx->codec_descriptor->props & AV_CODEC_PROP_INTRA_ONLY) -+ avctx->internal->intra_only_flag = AV_PKT_FLAG_KEY; -+ -+ if (ffcodec(avctx->codec)->cb_type == FF_CODEC_CB_TYPE_ENCODE) { -+ avci->in_frame = av_frame_alloc(); -+ if (!avci->in_frame) -+ return AVERROR(ENOMEM); - } - -- if (avctx->hw_frames_ctx) { -- AVHWFramesContext *frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; -- if (frames_ctx->format != avctx->pix_fmt) { -- av_log(avctx, AV_LOG_ERROR, -- "Mismatching AVCodecContext.pix_fmt and AVHWFramesContext.format\n"); -- return AVERROR(EINVAL); -+ if ((avctx->flags & AV_CODEC_FLAG_RECON_FRAME)) { -+ if (!(avctx->codec->capabilities & AV_CODEC_CAP_ENCODER_RECON_FRAME)) { -+ av_log(avctx, AV_LOG_ERROR, "Reconstructed frame output requested " -+ "from an encoder not supporting it\n"); -+ return AVERROR(ENOSYS); - } -- if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE && -- avctx->sw_pix_fmt != frames_ctx->sw_format) { -- av_log(avctx, AV_LOG_ERROR, -- "Mismatching AVCodecContext.sw_pix_fmt (%s) " -- "and AVHWFramesContext.sw_format (%s)\n", -- av_get_pix_fmt_name(avctx->sw_pix_fmt), -- av_get_pix_fmt_name(frames_ctx->sw_format)); -- return AVERROR(EINVAL); -+ -+ avci->recon_frame = av_frame_alloc(); -+ if (!avci->recon_frame) -+ return AVERROR(ENOMEM); -+ } -+ -+ if (CONFIG_FRAME_THREAD_ENCODER) { -+ ret = ff_frame_thread_encoder_init(avctx); -+ if (ret < 0) -+ return ret; -+ } -+ -+ return 0; -+} -+ -+int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame) -+{ -+ int ret; -+ -+ switch (avctx->codec->type) { -+ case AVMEDIA_TYPE_VIDEO: -+ frame->format = avctx->pix_fmt; -+ if (frame->width <= 0 || frame->height <= 0) { -+ frame->width = FFMAX(avctx->width, avctx->coded_width); -+ frame->height = FFMAX(avctx->height, avctx->coded_height); - } -- avctx->sw_pix_fmt = frames_ctx->sw_format; -+ -+ break; -+ case AVMEDIA_TYPE_AUDIO: -+ frame->sample_rate = avctx->sample_rate; -+ frame->format = avctx->sample_fmt; -+ if (!frame->ch_layout.nb_channels) { -+ ret = av_channel_layout_copy(&frame->ch_layout, &avctx->ch_layout); -+ if (ret < 0) -+ return ret; -+ } -+ break; - } - -+ ret = avcodec_default_get_buffer2(avctx, frame, 0); -+ if (ret < 0) { -+ av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); -+ av_frame_unref(frame); -+ return ret; -+ } -+ -+ return 0; -+} -+ -+int ff_encode_receive_frame(AVCodecContext *avctx, AVFrame *frame) -+{ -+ AVCodecInternal *avci = avctx->internal; -+ -+ if (!avci->recon_frame) -+ return AVERROR(EINVAL); -+ if (!avci->recon_frame->buf[0]) -+ return avci->draining_done ? AVERROR_EOF : AVERROR(EAGAIN); -+ -+ av_frame_move_ref(frame, avci->recon_frame); - return 0; - } -diff -Naur a/media/ffvpx/libavcodec/encode.h b/media/ffvpx/libavcodec/encode.h ---- a/media/ffvpx/libavcodec/encode.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/encode.h 2023-04-06 12:50:24.491176503 +0200 -@@ -27,6 +27,11 @@ - #include "packet.h" - - /** -+ * avcodec_receive_frame() implementation for encoders. -+ */ -+int ff_encode_receive_frame(AVCodecContext *avctx, AVFrame *frame); -+ -+/** - * Called by encoders to get the next frame for encoding. - * - * @param frame An empty frame to be filled with data. -@@ -44,10 +49,51 @@ - */ - int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags); - -+/** -+ * Allocate buffers for a frame. Encoder equivalent to ff_get_buffer(). -+ */ -+int ff_encode_alloc_frame(AVCodecContext *avctx, AVFrame *frame); -+ -+/** -+ * Check AVPacket size and allocate data. -+ * -+ * Encoders of type FF_CODEC_CB_TYPE_ENCODE can use this as a convenience to -+ * obtain a big enough buffer for the encoded bitstream. -+ * -+ * @param avctx the AVCodecContext of the encoder -+ * @param avpkt The AVPacket: on success, avpkt->data will point to a buffer -+ * of size at least `size`; the packet will not be refcounted. -+ * This packet must be initially blank. -+ * @param size an upper bound of the size of the packet to encode -+ * @return non negative on success, negative error code on failure -+ */ -+int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size); -+ -+/** -+ * Propagate user opaque values from the frame to avctx/pkt as needed. -+ */ -+int ff_encode_reordered_opaque(AVCodecContext *avctx, -+ AVPacket *pkt, const AVFrame *frame); -+ - /* - * Perform encoder initialization and validation. -- * Called when opening the encoder, before the AVCodec.init() call. -+ * Called when opening the encoder, before the FFCodec.init() call. - */ - int ff_encode_preinit(AVCodecContext *avctx); - -+int ff_encode_encode_cb(AVCodecContext *avctx, AVPacket *avpkt, -+ AVFrame *frame, int *got_packet); -+ -+/** -+ * Rescale from sample rate to AVCodecContext.time_base. -+ */ -+static av_always_inline int64_t ff_samples_to_time_base(const AVCodecContext *avctx, -+ int64_t samples) -+{ -+ if (samples == AV_NOPTS_VALUE) -+ return AV_NOPTS_VALUE; -+ return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate }, -+ avctx->time_base); -+} -+ - #endif /* AVCODEC_ENCODE_H */ -diff -Naur a/media/ffvpx/libavcodec/error_resilience.h b/media/ffvpx/libavcodec/error_resilience.h ---- a/media/ffvpx/libavcodec/error_resilience.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/error_resilience.h 2023-04-06 12:50:06.971471053 +0200 -@@ -24,7 +24,7 @@ - - #include "avcodec.h" - #include "me_cmp.h" --#include "thread.h" -+#include "threadframe.h" - - ///< current MB is the first after a resync marker - #define VP_START 1 -@@ -52,7 +52,8 @@ - - typedef struct ERContext { - AVCodecContext *avctx; -- MECmpContext mecc; -+ -+ me_cmp_func sad; - int mecc_inited; - - int *mb_index2xy; -@@ -74,14 +75,13 @@ - ERPicture last_pic; - ERPicture next_pic; - -- AVBufferRef *ref_index_buf[2]; -- AVBufferRef *motion_val_buf[2]; -+ int8_t *ref_index[2]; -+ int16_t (*motion_val_base[2])[2]; - - uint16_t pp_time; - uint16_t pb_time; - int quarter_sample; - int partitioned_frame; -- int ref_count; - - void (*decode_mb)(void *opaque, int ref, int mv_dir, int mv_type, - int (*mv)[2][4][2], -diff -Naur a/media/ffvpx/libavcodec/fdctdsp.c b/media/ffvpx/libavcodec/fdctdsp.c ---- a/media/ffvpx/libavcodec/fdctdsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/fdctdsp.c 2023-04-06 12:49:40.252394850 +0200 -@@ -25,7 +25,7 @@ - - av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx) - { -- const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; -+ av_unused const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; - - if (avctx->bits_per_raw_sample == 10 || avctx->bits_per_raw_sample == 9) { - c->fdct = ff_jpeg_fdct_islow_10; -@@ -43,8 +43,9 @@ - c->fdct248 = ff_fdct248_islow_8; - } - -- if (ARCH_PPC) -- ff_fdctdsp_init_ppc(c, avctx, high_bit_depth); -- if (ARCH_X86) -- ff_fdctdsp_init_x86(c, avctx, high_bit_depth); -+#if ARCH_PPC -+ ff_fdctdsp_init_ppc(c, avctx, high_bit_depth); -+#elif ARCH_X86 -+ ff_fdctdsp_init_x86(c, avctx, high_bit_depth); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/fft_fixed_32.c b/media/ffvpx/libavcodec/fft_fixed_32.c ---- a/media/ffvpx/libavcodec/fft_fixed_32.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/fft_fixed_32.c 2023-04-06 12:49:40.252394850 +0200 -@@ -48,5 +48,4 @@ - */ - - #define FFT_FLOAT 0 --#define FFT_FIXED_32 1 - #include "fft_template.c" -diff -Naur a/media/ffvpx/libavcodec/fft_float.c b/media/ffvpx/libavcodec/fft_float.c ---- a/media/ffvpx/libavcodec/fft_float.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/fft_float.c 2023-04-06 12:49:40.252394850 +0200 -@@ -17,5 +17,4 @@ - */ - - #define FFT_FLOAT 1 --#define FFT_FIXED_32 0 - #include "fft_template.c" -diff -Naur a/media/ffvpx/libavcodec/fft.h b/media/ffvpx/libavcodec/fft.h ---- a/media/ffvpx/libavcodec/fft.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/fft.h 2023-04-06 12:50:06.971471053 +0200 -@@ -26,13 +26,10 @@ - #define FFT_FLOAT 1 - #endif - --#ifndef FFT_FIXED_32 --#define FFT_FIXED_32 0 --#endif -- - #include - #include "config.h" - -+#include "libavutil/attributes_internal.h" - #include "libavutil/mem_internal.h" - - #if FFT_FLOAT -@@ -45,15 +42,11 @@ - - #else - --#if FFT_FIXED_32 -- - #define Q31(x) (int)((x)*2147483648.0 + 0.5) - #define FFT_NAME(x) x ## _fixed_32 - - typedef int32_t FFTSample; - --#endif /* FFT_FIXED_32 */ -- - typedef struct FFTComplex { - FFTSample re, im; - } FFTComplex; -@@ -122,7 +115,7 @@ - #endif - - #define COSTABLE(size) \ -- COSTABLE_CONST DECLARE_ALIGNED(32, FFTSample, FFT_NAME(ff_cos_##size))[size/2] -+ COSTABLE_CONST attribute_visibility_hidden DECLARE_ALIGNED(32, FFTSample, FFT_NAME(ff_cos_##size))[size/2] - - extern COSTABLE(16); - extern COSTABLE(32); -diff -Naur a/media/ffvpx/libavcodec/fft-internal.h b/media/ffvpx/libavcodec/fft-internal.h ---- a/media/ffvpx/libavcodec/fft-internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/fft-internal.h 2023-04-06 12:49:40.252394850 +0200 -@@ -19,6 +19,9 @@ - #ifndef AVCODEC_FFT_INTERNAL_H - #define AVCODEC_FFT_INTERNAL_H - -+#include "libavutil/mathematics.h" -+#include "fft.h" -+ - #if FFT_FLOAT - - #define FIX15(v) (v) -@@ -36,10 +39,6 @@ - - #else /* FFT_FLOAT */ - --#define SCALE_FLOAT(a, bits) lrint((a) * (double)(1 << (bits))) -- --#if FFT_FIXED_32 -- - #define CMUL(dre, dim, are, aim, bre, bim) do { \ - int64_t accu; \ - (accu) = (int64_t)(bre) * (are); \ -@@ -50,10 +49,6 @@ - (dim) = (int)(((accu) + 0x40000000) >> 31); \ - } while (0) - --#define FIX15(a) av_clip(SCALE_FLOAT(a, 31), -2147483647, 2147483647) -- --#endif /* FFT_FIXED_32 */ -- - #endif /* FFT_FLOAT */ - - #define ff_imdct_calc_c FFT_NAME(ff_imdct_calc_c) -diff -Naur a/media/ffvpx/libavcodec/fft_template.c b/media/ffvpx/libavcodec/fft_template.c ---- a/media/ffvpx/libavcodec/fft_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/fft_template.c 2023-04-06 12:49:40.252394850 +0200 -@@ -33,9 +33,9 @@ - #include "fft.h" - #include "fft-internal.h" - --#if FFT_FIXED_32 -+#if !FFT_FLOAT - #include "fft_table.h" --#else /* FFT_FIXED_32 */ -+#else /* !FFT_FLOAT */ - - /* cos(2*pi*x/n) for 0<=x<=n/4, followed by its reverse */ - #if !CONFIG_HARDCODED_TABLES -@@ -136,7 +136,7 @@ - FFT_NAME(ff_cos_131072), - }; - --#endif /* FFT_FIXED_32 */ -+#endif /* FFT_FLOAT */ - - static void fft_permute_c(FFTContext *s, FFTComplex *z); - static void fft_calc_c(FFTContext *s, FFTComplex *z); -@@ -226,20 +226,25 @@ - s->mdct_calc = ff_mdct_calc_c; - #endif - --#if FFT_FIXED_32 -- ff_fft_lut_init(); --#else /* FFT_FIXED_32 */ - #if FFT_FLOAT -- if (ARCH_AARCH64) ff_fft_init_aarch64(s); -- if (ARCH_ARM) ff_fft_init_arm(s); -- if (ARCH_PPC) ff_fft_init_ppc(s); -- if (ARCH_X86) ff_fft_init_x86(s); -- if (HAVE_MIPSFPU) ff_fft_init_mips(s); -+#if ARCH_AARCH64 -+ ff_fft_init_aarch64(s); -+#elif ARCH_ARM -+ ff_fft_init_arm(s); -+#elif ARCH_PPC -+ ff_fft_init_ppc(s); -+#elif ARCH_X86 -+ ff_fft_init_x86(s); -+#endif -+#if HAVE_MIPSFPU -+ ff_fft_init_mips(s); - #endif - for(j=4; j<=nbits; j++) { - ff_init_ff_cos_tabs(j); - } --#endif /* FFT_FIXED_32 */ -+#else /* FFT_FLOAT */ -+ ff_fft_lut_init(); -+#endif - - - if (ARCH_X86 && FFT_FLOAT && s->fft_permutation == FF_FFT_PERM_AVX) { -@@ -312,7 +317,7 @@ - av_freep(&s->tmp_buf); - } - --#if FFT_FIXED_32 -+#if !FFT_FLOAT - - static void fft_calc_c(FFTContext *s, FFTComplex *z) { - -@@ -470,7 +475,7 @@ - } - } - --#else /* FFT_FIXED_32 */ -+#else /* !FFT_FLOAT */ - - #define BUTTERFLIES(a0,a1,a2,a3) {\ - BF(t3, t5, t5, t1);\ -@@ -620,4 +625,4 @@ - { - fft_dispatch[s->nbits-2](z); - } --#endif /* FFT_FIXED_32 */ -+#endif /* !FFT_FLOAT */ -diff -Naur a/media/ffvpx/libavcodec/flac.c b/media/ffvpx/libavcodec/flac.c ---- a/media/ffvpx/libavcodec/flac.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flac.c 2023-04-06 12:50:24.491176503 +0200 -@@ -26,18 +26,19 @@ - #include "get_bits.h" - #include "flac.h" - #include "flacdata.h" -+#include "flac_parse.h" - --static const int8_t sample_size_table[] = { 0, 8, 12, 0, 16, 20, 24, 0 }; -+static const int8_t sample_size_table[] = { 0, 8, 12, 0, 16, 20, 24, 32 }; - --static const uint64_t flac_channel_layouts[8] = { -- AV_CH_LAYOUT_MONO, -- AV_CH_LAYOUT_STEREO, -- AV_CH_LAYOUT_SURROUND, -- AV_CH_LAYOUT_QUAD, -- AV_CH_LAYOUT_5POINT0, -- AV_CH_LAYOUT_5POINT1, -- AV_CH_LAYOUT_6POINT1, -- AV_CH_LAYOUT_7POINT1 -+static const AVChannelLayout flac_channel_layouts[8] = { -+ AV_CHANNEL_LAYOUT_MONO, -+ AV_CHANNEL_LAYOUT_STEREO, -+ AV_CHANNEL_LAYOUT_SURROUND, -+ AV_CHANNEL_LAYOUT_QUAD, -+ AV_CHANNEL_LAYOUT_5POINT0, -+ AV_CHANNEL_LAYOUT_5POINT1, -+ AV_CHANNEL_LAYOUT_6POINT1, -+ AV_CHANNEL_LAYOUT_7POINT1 - }; - - static int64_t get_utf8(GetBitContext *gb) -@@ -81,7 +82,7 @@ - - /* bits per sample */ - bps_code = get_bits(gb, 3); -- if (bps_code == 3 || bps_code == 7) { -+ if (bps_code == 3) { - av_log(avctx, AV_LOG_ERROR + log_level_offset, - "invalid sample size code (%d)\n", - bps_code); -@@ -145,29 +146,7 @@ - return 0; - } - --int ff_flac_get_max_frame_size(int blocksize, int ch, int bps) --{ -- /* Technically, there is no limit to FLAC frame size, but an encoder -- should not write a frame that is larger than if verbatim encoding mode -- were to be used. */ -- -- int count; -- -- count = 16; /* frame header */ -- count += ch * ((7+bps+7)/8); /* subframe headers */ -- if (ch == 2) { -- /* for stereo, need to account for using decorrelation */ -- count += (( 2*bps+1) * blocksize + 7) / 8; -- } else { -- count += ( ch*bps * blocksize + 7) / 8; -- } -- count += 2; /* frame footer */ -- -- return count; --} -- - int ff_flac_is_extradata_valid(AVCodecContext *avctx, -- enum FLACExtradataFormat *format, - uint8_t **streaminfo_start) - { - if (!avctx->extradata || avctx->extradata_size < FLAC_STREAMINFO_SIZE) { -@@ -180,25 +159,29 @@ - av_log(avctx, AV_LOG_WARNING, "extradata contains %d bytes too many.\n", - FLAC_STREAMINFO_SIZE-avctx->extradata_size); - } -- *format = FLAC_EXTRADATA_FORMAT_STREAMINFO; - *streaminfo_start = avctx->extradata; - } else { - if (avctx->extradata_size < 8+FLAC_STREAMINFO_SIZE) { - av_log(avctx, AV_LOG_ERROR, "extradata too small.\n"); - return 0; - } -- *format = FLAC_EXTRADATA_FORMAT_FULL_HEADER; - *streaminfo_start = &avctx->extradata[8]; - } - return 1; - } - --void ff_flac_set_channel_layout(AVCodecContext *avctx) -+void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels) - { -- if (avctx->channels <= FF_ARRAY_ELEMS(flac_channel_layouts)) -- avctx->channel_layout = flac_channel_layouts[avctx->channels - 1]; -+ if (channels == avctx->ch_layout.nb_channels && -+ avctx->ch_layout.order != AV_CHANNEL_ORDER_UNSPEC) -+ return; -+ -+ av_channel_layout_uninit(&avctx->ch_layout); -+ if (channels <= FF_ARRAY_ELEMS(flac_channel_layouts)) -+ avctx->ch_layout = flac_channel_layouts[channels - 1]; - else -- avctx->channel_layout = 0; -+ avctx->ch_layout = (AVChannelLayout){ .order = AV_CHANNEL_ORDER_UNSPEC, -+ .nb_channels = channels }; - } - - int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, -@@ -229,13 +212,9 @@ - return AVERROR_INVALIDDATA; - } - -- avctx->channels = s->channels; - avctx->sample_rate = s->samplerate; - avctx->bits_per_raw_sample = s->bps; -- -- if (!avctx->channel_layout || -- av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) -- ff_flac_set_channel_layout(avctx); -+ ff_flac_set_channel_layout(avctx, s->channels); - - s->samples = get_bits64(&gb, 36); - -diff -Naur a/media/ffvpx/libavcodec/flacdata.c b/media/ffvpx/libavcodec/flacdata.c ---- a/media/ffvpx/libavcodec/flacdata.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdata.c 2023-04-06 12:49:40.253394890 +0200 -@@ -19,7 +19,7 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "internal.h" -+#include "flacdata.h" - - const int ff_flac_sample_rate_table[16] = - { 0, -diff -Naur a/media/ffvpx/libavcodec/flacdata.h b/media/ffvpx/libavcodec/flacdata.h ---- a/media/ffvpx/libavcodec/flacdata.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdata.h 2023-04-06 12:49:40.253394890 +0200 -@@ -22,7 +22,7 @@ - #ifndef AVCODEC_FLACDATA_H - #define AVCODEC_FLACDATA_H - --#include "internal.h" -+#include - - extern const int ff_flac_sample_rate_table[16]; - -diff -Naur a/media/ffvpx/libavcodec/flacdec.c b/media/ffvpx/libavcodec/flacdec.c ---- a/media/ffvpx/libavcodec/flacdec.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdec.c 2023-04-06 12:50:24.491176503 +0200 -@@ -37,20 +37,21 @@ - #include "libavutil/crc.h" - #include "libavutil/opt.h" - #include "avcodec.h" --#include "internal.h" -+#include "codec_internal.h" - #include "get_bits.h" - #include "bytestream.h" - #include "golomb.h" - #include "flac.h" - #include "flacdata.h" - #include "flacdsp.h" -+#include "flac_parse.h" - #include "thread.h" - #include "unary.h" - - - typedef struct FLACContext { - AVClass *class; -- struct FLACStreaminfo flac_stream_info; -+ FLACStreaminfo stream_info; - - AVCodecContext *avctx; ///< parent AVCodecContext - GetBitContext gb; ///< GetBitContext initialized to start at the current frame -@@ -63,6 +64,9 @@ - int32_t *decoded[FLAC_MAX_CHANNELS]; ///< decoded samples - uint8_t *decoded_buffer; - unsigned int decoded_buffer_size; -+ int64_t *decoded_33bps; ///< decoded samples for a 33 bps subframe -+ uint8_t *decoded_buffer_33bps; -+ unsigned int decoded_buffer_size_33bps; - int buggy_lpc; ///< use workaround for old lavc encoded files - - FLACDSPContext dsp; -@@ -73,7 +77,7 @@ - static void flac_set_bps(FLACContext *s) - { - enum AVSampleFormat req = s->avctx->request_sample_fmt; -- int need32 = s->flac_stream_info.bps > 16; -+ int need32 = s->stream_info.bps > 16; - int want32 = av_get_bytes_per_sample(req) > 2; - int planar = av_sample_fmt_is_planar(req); - -@@ -82,19 +86,18 @@ - s->avctx->sample_fmt = AV_SAMPLE_FMT_S32P; - else - s->avctx->sample_fmt = AV_SAMPLE_FMT_S32; -- s->sample_shift = 32 - s->flac_stream_info.bps; -+ s->sample_shift = 32 - s->stream_info.bps; - } else { - if (planar) - s->avctx->sample_fmt = AV_SAMPLE_FMT_S16P; - else - s->avctx->sample_fmt = AV_SAMPLE_FMT_S16; -- s->sample_shift = 16 - s->flac_stream_info.bps; -+ s->sample_shift = 16 - s->stream_info.bps; - } - } - - static av_cold int flac_decode_init(AVCodecContext *avctx) - { -- enum FLACExtradataFormat format; - uint8_t *streaminfo; - int ret; - FLACContext *s = avctx->priv_data; -@@ -105,11 +108,11 @@ - if (!avctx->extradata) - return 0; - -- if (!ff_flac_is_extradata_valid(avctx, &format, &streaminfo)) -+ if (!ff_flac_is_extradata_valid(avctx, &streaminfo)) - return AVERROR_INVALIDDATA; - - /* initialize based on the demuxer-supplied streamdata header */ -- ret = ff_flac_parse_streaminfo(avctx, &s->flac_stream_info, streaminfo); -+ ret = ff_flac_parse_streaminfo(avctx, &s->stream_info, streaminfo); - if (ret < 0) - return ret; - ret = allocate_buffers(s); -@@ -117,7 +120,7 @@ - return ret; - flac_set_bps(s); - ff_flacdsp_init(&s->dsp, avctx->sample_fmt, -- s->flac_stream_info.channels, s->flac_stream_info.bps); -+ s->stream_info.channels); - s->got_streaminfo = 1; - - return 0; -@@ -137,10 +140,10 @@ - int buf_size; - int ret; - -- av_assert0(s->flac_stream_info.max_blocksize); -+ av_assert0(s->stream_info.max_blocksize); - -- buf_size = av_samples_get_buffer_size(NULL, s->flac_stream_info.channels, -- s->flac_stream_info.max_blocksize, -+ buf_size = av_samples_get_buffer_size(NULL, s->stream_info.channels, -+ s->stream_info.max_blocksize, - AV_SAMPLE_FMT_S32P, 0); - if (buf_size < 0) - return buf_size; -@@ -151,9 +154,27 @@ - - ret = av_samples_fill_arrays((uint8_t **)s->decoded, NULL, - s->decoded_buffer, -- s->flac_stream_info.channels, -- s->flac_stream_info.max_blocksize, -+ s->stream_info.channels, -+ s->stream_info.max_blocksize, - AV_SAMPLE_FMT_S32P, 0); -+ if (ret >= 0 && s->stream_info.bps == 32 && s->stream_info.channels == 2) { -+ buf_size = av_samples_get_buffer_size(NULL, 1, -+ s->stream_info.max_blocksize, -+ AV_SAMPLE_FMT_S64P, 0); -+ if (buf_size < 0) -+ return buf_size; -+ -+ av_fast_malloc(&s->decoded_buffer_33bps, &s->decoded_buffer_size_33bps, buf_size); -+ if (!s->decoded_buffer_33bps) -+ return AVERROR(ENOMEM); -+ -+ ret = av_samples_fill_arrays((uint8_t **)&s->decoded_33bps, NULL, -+ s->decoded_buffer_33bps, -+ 1, -+ s->stream_info.max_blocksize, -+ AV_SAMPLE_FMT_S64P, 0); -+ -+ } - return ret < 0 ? ret : 0; - } - -@@ -177,7 +198,7 @@ - metadata_size != FLAC_STREAMINFO_SIZE) { - return AVERROR_INVALIDDATA; - } -- ret = ff_flac_parse_streaminfo(s->avctx, &s->flac_stream_info, &buf[8]); -+ ret = ff_flac_parse_streaminfo(s->avctx, &s->stream_info, &buf[8]); - if (ret < 0) - return ret; - ret = allocate_buffers(s); -@@ -185,7 +206,7 @@ - return ret; - flac_set_bps(s); - ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, -- s->flac_stream_info.channels, s->flac_stream_info.bps); -+ s->stream_info.channels); - s->got_streaminfo = 1; - - return 0; -@@ -260,7 +281,7 @@ - for (; i < samples; i++) - *decoded++ = get_sbits_long(&gb, tmp); - } else { -- int real_limit = tmp ? (INT_MAX >> tmp) + 2 : INT_MAX; -+ int real_limit = (tmp > 1) ? (INT_MAX >> (tmp - 1)) + 2 : INT_MAX; - for (; i < samples; i++) { - int v = get_sr_golomb_flac(&gb, tmp, real_limit, 1); - if (v == 0x80000000){ -@@ -331,6 +352,62 @@ - return 0; - } - -+#define DECODER_SUBFRAME_FIXED_WIDE(residual) { \ -+ const int blocksize = s->blocksize; \ -+ int ret; \ -+ \ -+ if ((ret = decode_residuals(s, residual, pred_order)) < 0) \ -+ return ret; \ -+ \ -+ switch (pred_order) { \ -+ case 0: \ -+ for (int i = pred_order; i < blocksize; i++) \ -+ decoded[i] = residual[i]; \ -+ break; \ -+ case 1: \ -+ for (int i = pred_order; i < blocksize; i++) \ -+ decoded[i] = (int64_t)residual[i] + (int64_t)decoded[i-1];\ -+ break; \ -+ case 2: \ -+ for (int i = pred_order; i < blocksize; i++) \ -+ decoded[i] = (int64_t)residual[i] + 2*(int64_t)decoded[i-1] - (int64_t)decoded[i-2]; \ -+ break; \ -+ case 3: \ -+ for (int i = pred_order; i < blocksize; i++) \ -+ decoded[i] = (int64_t)residual[i] + 3*(int64_t)decoded[i-1] - 3*(int64_t)decoded[i-2] + (int64_t)decoded[i-3]; \ -+ break; \ -+ case 4: \ -+ for (int i = pred_order; i < blocksize; i++) \ -+ decoded[i] = (int64_t)residual[i] + 4*(int64_t)decoded[i-1] - 6*(int64_t)decoded[i-2] + 4*(int64_t)decoded[i-3] - (int64_t)decoded[i-4]; \ -+ break; \ -+ default: \ -+ av_log(s->avctx, AV_LOG_ERROR, "illegal pred order %d\n", pred_order); \ -+ return AVERROR_INVALIDDATA; \ -+ } \ -+ return 0; \ -+} -+ -+static int decode_subframe_fixed_wide(FLACContext *s, int32_t *decoded, -+ int pred_order, int bps) -+{ -+ /* warm up samples */ -+ for (int i = 0; i < pred_order; i++) { -+ decoded[i] = get_sbits_long(&s->gb, bps); -+ } -+ DECODER_SUBFRAME_FIXED_WIDE(decoded); -+} -+ -+ -+static int decode_subframe_fixed_33bps(FLACContext *s, int64_t *decoded, -+ int32_t *residual, int pred_order) -+{ -+ /* warm up samples */ \ -+ for (int i = 0; i < pred_order; i++) { \ -+ decoded[i] = get_sbits64(&s->gb, 33); \ -+ } \ -+ DECODER_SUBFRAME_FIXED_WIDE(residual); -+} -+ - static void lpc_analyze_remodulate(SUINT32 *decoded, const int coeffs[32], - int order, int qlevel, int len, int bps) - { -@@ -389,25 +466,66 @@ - if ((ret = decode_residuals(s, decoded, pred_order)) < 0) - return ret; - -- if ( ( s->buggy_lpc && s->flac_stream_info.bps <= 16) -+ if ( ( s->buggy_lpc && s->stream_info.bps <= 16) - || ( !s->buggy_lpc && bps <= 16 - && bps + coeff_prec + av_log2(pred_order) <= 32)) { - s->dsp.lpc16(decoded, coeffs, pred_order, qlevel, s->blocksize); - } else { - s->dsp.lpc32(decoded, coeffs, pred_order, qlevel, s->blocksize); -- if (s->flac_stream_info.bps <= 16) -+ if (s->stream_info.bps <= 16) - lpc_analyze_remodulate(decoded, coeffs, pred_order, qlevel, s->blocksize, bps); - } - - return 0; - } - -+static int decode_subframe_lpc_33bps(FLACContext *s, int64_t *decoded, -+ int32_t *residual, int pred_order) -+{ -+ int i, j, ret; -+ int coeff_prec, qlevel; -+ int coeffs[32]; -+ -+ /* warm up samples */ -+ for (i = 0; i < pred_order; i++) { -+ decoded[i] = get_sbits64(&s->gb, 33); -+ } -+ -+ coeff_prec = get_bits(&s->gb, 4) + 1; -+ if (coeff_prec == 16) { -+ av_log(s->avctx, AV_LOG_ERROR, "invalid coeff precision\n"); -+ return AVERROR_INVALIDDATA; -+ } -+ qlevel = get_sbits(&s->gb, 5); -+ if (qlevel < 0) { -+ av_log(s->avctx, AV_LOG_ERROR, "qlevel %d not supported, maybe buggy stream\n", -+ qlevel); -+ return AVERROR_INVALIDDATA; -+ } -+ -+ for (i = 0; i < pred_order; i++) { -+ coeffs[pred_order - i - 1] = get_sbits(&s->gb, coeff_prec); -+ } -+ -+ if ((ret = decode_residuals(s, residual, pred_order)) < 0) -+ return ret; -+ -+ for (i = pred_order; i < s->blocksize; i++, decoded++) { -+ int64_t sum = 0; -+ for (j = 0; j < pred_order; j++) -+ sum += (int64_t)coeffs[j] * decoded[j]; -+ decoded[j] = residual[i] + (sum >> qlevel); -+ } -+ -+ return 0; -+} -+ - static inline int decode_subframe(FLACContext *s, int channel) - { - int32_t *decoded = s->decoded[channel]; - int type, wasted = 0; -- int bps = s->flac_stream_info.bps; -- int i, tmp, ret; -+ int bps = s->stream_info.bps; -+ int i, ret; - - if (channel == 0) { - if (s->ch_mode == FLAC_CHMODE_RIGHT_SIDE) -@@ -427,7 +545,7 @@ - int left = get_bits_left(&s->gb); - if ( left <= 0 || - (left < bps && !show_bits_long(&s->gb, left)) || -- !show_bits_long(&s->gb, bps)) { -+ !show_bits_long(&s->gb, bps-1)) { - av_log(s->avctx, AV_LOG_ERROR, - "Invalid number of wasted bits > available bits (%d) - left=%d\n", - bps, left); -@@ -436,34 +554,63 @@ - wasted = 1 + get_unary(&s->gb, 1, get_bits_left(&s->gb)); - bps -= wasted; - } -- if (bps > 32) { -- avpriv_report_missing_feature(s->avctx, "Decorrelated bit depth > 32"); -- return AVERROR_PATCHWELCOME; -- } - - //FIXME use av_log2 for types - if (type == 0) { -- tmp = get_sbits_long(&s->gb, bps); -- for (i = 0; i < s->blocksize; i++) -- decoded[i] = tmp; -+ if (bps < 33) { -+ int32_t tmp = get_sbits_long(&s->gb, bps); -+ for (i = 0; i < s->blocksize; i++) -+ decoded[i] = tmp; -+ } else { -+ int64_t tmp = get_sbits64(&s->gb, 33); -+ for (i = 0; i < s->blocksize; i++) -+ s->decoded_33bps[i] = tmp; -+ } - } else if (type == 1) { -- for (i = 0; i < s->blocksize; i++) -- decoded[i] = get_sbits_long(&s->gb, bps); -+ if (bps < 33) { -+ for (i = 0; i < s->blocksize; i++) -+ decoded[i] = get_sbits_long(&s->gb, bps); -+ } else { -+ for (i = 0; i < s->blocksize; i++) -+ s->decoded_33bps[i] = get_sbits64(&s->gb, 33); -+ } - } else if ((type >= 8) && (type <= 12)) { -- if ((ret = decode_subframe_fixed(s, decoded, type & ~0x8, bps)) < 0) -- return ret; -+ int order = type & ~0x8; -+ if (bps < 33) { -+ if (bps + order <= 32) { -+ if ((ret = decode_subframe_fixed(s, decoded, order, bps)) < 0) -+ return ret; -+ } else { -+ if ((ret = decode_subframe_fixed_wide(s, decoded, order, bps)) < 0) -+ return ret; -+ } -+ } else { -+ if ((ret = decode_subframe_fixed_33bps(s, s->decoded_33bps, decoded, order)) < 0) -+ return ret; -+ } - } else if (type >= 32) { -- if ((ret = decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps)) < 0) -- return ret; -+ if (bps < 33) { -+ if ((ret = decode_subframe_lpc(s, decoded, (type & ~0x20)+1, bps)) < 0) -+ return ret; -+ } else { -+ if ((ret = decode_subframe_lpc_33bps(s, s->decoded_33bps, decoded, (type & ~0x20)+1)) < 0) -+ return ret; -+ } - } else { - av_log(s->avctx, AV_LOG_ERROR, "invalid coding type\n"); - return AVERROR_INVALIDDATA; - } - -- if (wasted && wasted < 32) { -- int i; -- for (i = 0; i < s->blocksize; i++) -- decoded[i] = (unsigned)decoded[i] << wasted; -+ if (wasted) { -+ if (wasted+bps == 33) { -+ int i; -+ for (i = 0; i < s->blocksize; i++) -+ s->decoded_33bps[i] = (uint64_t)decoded[i] << wasted; -+ } else if (wasted < 32) { -+ int i; -+ for (i = 0; i < s->blocksize; i++) -+ decoded[i] = (unsigned)decoded[i] << wasted; -+ } - } - - return 0; -@@ -480,69 +627,68 @@ - return ret; - } - -- if ( s->flac_stream_info.channels -- && fi.channels != s->flac_stream_info.channels -+ if ( s->stream_info.channels -+ && fi.channels != s->stream_info.channels - && s->got_streaminfo) { -- s->flac_stream_info.channels = s->avctx->channels = fi.channels; -- ff_flac_set_channel_layout(s->avctx); -+ s->stream_info.channels = fi.channels; -+ ff_flac_set_channel_layout(s->avctx, fi.channels); - ret = allocate_buffers(s); - if (ret < 0) - return ret; - } -- s->flac_stream_info.channels = s->avctx->channels = fi.channels; -- if (!s->avctx->channel_layout) -- ff_flac_set_channel_layout(s->avctx); -+ s->stream_info.channels = fi.channels; -+ ff_flac_set_channel_layout(s->avctx, fi.channels); - s->ch_mode = fi.ch_mode; - -- if (!s->flac_stream_info.bps && !fi.bps) { -+ if (!s->stream_info.bps && !fi.bps) { - av_log(s->avctx, AV_LOG_ERROR, "bps not found in STREAMINFO or frame header\n"); - return AVERROR_INVALIDDATA; - } - if (!fi.bps) { -- fi.bps = s->flac_stream_info.bps; -- } else if (s->flac_stream_info.bps && fi.bps != s->flac_stream_info.bps) { -+ fi.bps = s->stream_info.bps; -+ } else if (s->stream_info.bps && fi.bps != s->stream_info.bps) { - av_log(s->avctx, AV_LOG_ERROR, "switching bps mid-stream is not " - "supported\n"); - return AVERROR_INVALIDDATA; - } - -- if (!s->flac_stream_info.bps) { -- s->flac_stream_info.bps = s->avctx->bits_per_raw_sample = fi.bps; -+ if (!s->stream_info.bps) { -+ s->stream_info.bps = s->avctx->bits_per_raw_sample = fi.bps; - flac_set_bps(s); - } - -- if (!s->flac_stream_info.max_blocksize) -- s->flac_stream_info.max_blocksize = FLAC_MAX_BLOCKSIZE; -- if (fi.blocksize > s->flac_stream_info.max_blocksize) { -+ if (!s->stream_info.max_blocksize) -+ s->stream_info.max_blocksize = FLAC_MAX_BLOCKSIZE; -+ if (fi.blocksize > s->stream_info.max_blocksize) { - av_log(s->avctx, AV_LOG_ERROR, "blocksize %d > %d\n", fi.blocksize, -- s->flac_stream_info.max_blocksize); -+ s->stream_info.max_blocksize); - return AVERROR_INVALIDDATA; - } - s->blocksize = fi.blocksize; - -- if (!s->flac_stream_info.samplerate && !fi.samplerate) { -+ if (!s->stream_info.samplerate && !fi.samplerate) { - av_log(s->avctx, AV_LOG_ERROR, "sample rate not found in STREAMINFO" - " or frame header\n"); - return AVERROR_INVALIDDATA; - } - if (fi.samplerate == 0) -- fi.samplerate = s->flac_stream_info.samplerate; -- s->flac_stream_info.samplerate = s->avctx->sample_rate = fi.samplerate; -+ fi.samplerate = s->stream_info.samplerate; -+ s->stream_info.samplerate = s->avctx->sample_rate = fi.samplerate; - - if (!s->got_streaminfo) { - ret = allocate_buffers(s); - if (ret < 0) - return ret; - s->got_streaminfo = 1; -- dump_headers(s->avctx, &s->flac_stream_info); -+ dump_headers(s->avctx, &s->stream_info); - } - ff_flacdsp_init(&s->dsp, s->avctx->sample_fmt, -- s->flac_stream_info.channels, s->flac_stream_info.bps); -+ s->stream_info.channels); - --// dump_headers(s->avctx, &s->flac_stream_info); -+// dump_headers(s->avctx, &s->stream_info); - - /* subframes */ -- for (i = 0; i < s->flac_stream_info.channels; i++) { -+ for (i = 0; i < s->stream_info.channels; i++) { - if ((ret = decode_subframe(s, i)) < 0) - return ret; - } -@@ -555,11 +701,29 @@ - return 0; - } - --static int flac_decode_frame(AVCodecContext *avctx, void *data, -+static void decorrelate_33bps(int ch_mode, int32_t **decoded, int64_t *decoded_33bps, int len) -+{ -+ int i; -+ if (ch_mode == FLAC_CHMODE_LEFT_SIDE ) { -+ for (i = 0; i < len; i++) -+ decoded[1][i] = decoded[0][i] - decoded_33bps[i]; -+ } else if (ch_mode == FLAC_CHMODE_RIGHT_SIDE ) { -+ for (i = 0; i < len; i++) -+ decoded[0][i] = decoded[1][i] + decoded_33bps[i]; -+ } else if (ch_mode == FLAC_CHMODE_MID_SIDE ) { -+ for (i = 0; i < len; i++) { -+ uint64_t a = decoded[0][i]; -+ int64_t b = decoded_33bps[i]; -+ a -= b >> 1; -+ decoded[0][i] = (a + b); -+ decoded[1][i] = a; -+ } -+ } -+} -+ -+static int flac_decode_frame(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, AVPacket *avpkt) - { -- AVFrame *frame = data; -- ThreadFrame tframe = { .f = data }; - const uint8_t *buf = avpkt->data; - int buf_size = avpkt->size; - FLACContext *s = avctx->priv_data; -@@ -568,12 +732,6 @@ - - *got_frame_ptr = 0; - -- if (s->flac_stream_info.max_framesize == 0) { -- s->flac_stream_info.max_framesize = -- ff_flac_get_max_frame_size(s->flac_stream_info.max_blocksize ? s->flac_stream_info.max_blocksize : FLAC_MAX_BLOCKSIZE, -- FLAC_MAX_CHANNELS, 32); -- } -- - if (buf_size > 5 && !memcmp(buf, "\177FLAC", 5)) { - av_log(s->avctx, AV_LOG_DEBUG, "skipping flac header packet 1\n"); - return buf_size; -@@ -586,7 +744,7 @@ - - /* check that there is at least the smallest decodable amount of data. - this amount corresponds to the smallest valid FLAC frame possible. -- FF F8 69 02 00 00 9A 00 00 34 46 */ -+ FF F8 69 02 00 00 9A 00 00 34 */ - if (buf_size < FLAC_MIN_FRAME_SIZE) - return buf_size; - -@@ -618,12 +776,18 @@ - - /* get output buffer */ - frame->nb_samples = s->blocksize; -- if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0) -+ if ((ret = ff_thread_get_buffer(avctx, frame, 0)) < 0) - return ret; - -- s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, -- s->flac_stream_info.channels, -- s->blocksize, s->sample_shift); -+ if (s->stream_info.bps == 32 && s->ch_mode > 0) { -+ decorrelate_33bps(s->ch_mode, s->decoded, s->decoded_33bps, s->blocksize); -+ s->dsp.decorrelate[0](frame->data, s->decoded, s->stream_info.channels, -+ s->blocksize, s->sample_shift); -+ } else { -+ s->dsp.decorrelate[s->ch_mode](frame->data, s->decoded, -+ s->stream_info.channels, -+ s->blocksize, s->sample_shift); -+ } - - if (bytes_read > buf_size) { - av_log(s->avctx, AV_LOG_ERROR, "overread: %d\n", bytes_read - buf_size); -@@ -644,6 +808,7 @@ - FLACContext *s = avctx->priv_data; - - av_freep(&s->decoded_buffer); -+ av_freep(&s->decoded_buffer_33bps); - - return 0; - } -@@ -660,22 +825,22 @@ - .version = LIBAVUTIL_VERSION_INT, - }; - --AVCodec ff_flac_decoder = { -- .name = "flac", -- .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"), -- .type = AVMEDIA_TYPE_AUDIO, -- .id = AV_CODEC_ID_FLAC, -+const FFCodec ff_flac_decoder = { -+ .p.name = "flac", -+ CODEC_LONG_NAME("FLAC (Free Lossless Audio Codec)"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_FLAC, - .priv_data_size = sizeof(FLACContext), - .init = flac_decode_init, - .close = flac_decode_close, -- .decode = flac_decode_frame, -- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | -+ FF_CODEC_DECODE_CB(flac_decode_frame), -+ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | - AV_CODEC_CAP_DR1 | - AV_CODEC_CAP_FRAME_THREADS, -- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, -+ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, - AV_SAMPLE_FMT_S16P, - AV_SAMPLE_FMT_S32, - AV_SAMPLE_FMT_S32P, - AV_SAMPLE_FMT_NONE }, -- .priv_class = &flac_decoder_class, -+ .p.priv_class = &flac_decoder_class, - }; -diff -Naur a/media/ffvpx/libavcodec/flacdsp.c b/media/ffvpx/libavcodec/flacdsp.c ---- a/media/ffvpx/libavcodec/flacdsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdsp.c 2023-04-06 12:50:06.972471094 +0200 -@@ -19,6 +19,7 @@ - */ - - #include "libavutil/attributes.h" -+#include "libavutil/internal.h" - #include "libavutil/samplefmt.h" - #include "flacdsp.h" - #include "config.h" -@@ -26,7 +27,6 @@ - #define SAMPLE_SIZE 16 - #define PLANAR 0 - #include "flacdsp_template.c" --#include "flacdsp_lpc_template.c" - - #undef PLANAR - #define PLANAR 1 -@@ -37,7 +37,6 @@ - #define SAMPLE_SIZE 32 - #define PLANAR 0 - #include "flacdsp_template.c" --#include "flacdsp_lpc_template.c" - - #undef PLANAR - #define PLANAR 1 -@@ -85,13 +84,10 @@ - - } - --av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, -- int bps) -+av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels) - { - c->lpc16 = flac_lpc_16_c; - c->lpc32 = flac_lpc_32_c; -- c->lpc16_encode = flac_lpc_encode_c_16; -- c->lpc32_encode = flac_lpc_encode_c_32; - - switch (fmt) { - case AV_SAMPLE_FMT_S32: -@@ -123,8 +119,9 @@ - break; - } - -- if (ARCH_ARM) -- ff_flacdsp_init_arm(c, fmt, channels, bps); -- if (ARCH_X86) -- ff_flacdsp_init_x86(c, fmt, channels, bps); -+#if ARCH_ARM -+ ff_flacdsp_init_arm(c, fmt, channels); -+#elif ARCH_X86 -+ ff_flacdsp_init_x86(c, fmt, channels); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/flacdsp.h b/media/ffvpx/libavcodec/flacdsp.h ---- a/media/ffvpx/libavcodec/flacdsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdsp.h 2023-04-06 12:50:06.972471094 +0200 -@@ -20,7 +20,7 @@ - #define AVCODEC_FLACDSP_H - - #include --#include "libavutil/internal.h" -+ - #include "libavutil/samplefmt.h" - - typedef struct FLACDSPContext { -@@ -36,8 +36,8 @@ - const int32_t coefs[32], int shift); - } FLACDSPContext; - --void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps); --void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps); --void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps); -+void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels); -+void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels); -+void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels); - - #endif /* AVCODEC_FLACDSP_H */ -diff -Naur a/media/ffvpx/libavcodec/flacdsp_lpc_template.c b/media/ffvpx/libavcodec/flacdsp_lpc_template.c ---- a/media/ffvpx/libavcodec/flacdsp_lpc_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdsp_lpc_template.c 2023-04-06 12:49:40.253394890 +0200 -@@ -17,7 +17,7 @@ - */ - - #include --#include "libavutil/avutil.h" -+#include "libavutil/common.h" - #include "mathops.h" - - #undef FUNC -diff -Naur a/media/ffvpx/libavcodec/flacdsp_template.c b/media/ffvpx/libavcodec/flacdsp_template.c ---- a/media/ffvpx/libavcodec/flacdsp_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flacdsp_template.c 2023-04-06 12:49:40.253394890 +0200 -@@ -19,7 +19,7 @@ - */ - - #include --#include "libavutil/avutil.h" -+#include "libavutil/macros.h" - - #undef FUNC - #undef FSUF -@@ -66,8 +66,8 @@ - int i; - - for (i = 0; i < len; i++) { -- int a = in[0][i]; -- int b = in[1][i]; -+ unsigned a = in[0][i]; -+ unsigned b = in[1][i]; - S(samples, 0, i) = a << shift; - S(samples, 1, i) = (a - b) << shift; - } -@@ -80,8 +80,8 @@ - int i; - - for (i = 0; i < len; i++) { -- int a = in[0][i]; -- int b = in[1][i]; -+ unsigned a = in[0][i]; -+ unsigned b = in[1][i]; - S(samples, 0, i) = (a + b) << shift; - S(samples, 1, i) = b << shift; - } -@@ -94,7 +94,7 @@ - int i; - - for (i = 0; i < len; i++) { -- int a = in[0][i]; -+ unsigned a = in[0][i]; - int b = in[1][i]; - a -= b >> 1; - S(samples, 0, i) = (a + b) << shift; -diff -Naur a/media/ffvpx/libavcodec/flac.h b/media/ffvpx/libavcodec/flac.h ---- a/media/ffvpx/libavcodec/flac.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flac.h 2023-04-06 12:50:06.971471053 +0200 -@@ -1,5 +1,5 @@ - /* -- * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions -+ * FLAC (Free Lossless Audio Codec) common stuff - * Copyright (c) 2008 Justin Ruggles - * - * This file is part of FFmpeg. -@@ -21,21 +21,19 @@ - - /** - * @file -- * FLAC (Free Lossless Audio Codec) decoder/demuxer common functions -+ * FLAC (Free Lossless Audio Codec) common stuff - */ - - #ifndef AVCODEC_FLAC_H - #define AVCODEC_FLAC_H - --#include "avcodec.h" --#include "bytestream.h" --#include "get_bits.h" -+#include "libavutil/intreadwrite.h" - - #define FLAC_STREAMINFO_SIZE 34 - #define FLAC_MAX_CHANNELS 8 - #define FLAC_MIN_BLOCKSIZE 16 - #define FLAC_MAX_BLOCKSIZE 65535 --#define FLAC_MIN_FRAME_SIZE 11 -+#define FLAC_MIN_FRAME_SIZE 10 - - enum { - FLAC_CHMODE_INDEPENDENT = 0, -@@ -55,84 +53,6 @@ - FLAC_METADATA_TYPE_INVALID = 127 - }; - --enum FLACExtradataFormat { -- FLAC_EXTRADATA_FORMAT_STREAMINFO = 0, -- FLAC_EXTRADATA_FORMAT_FULL_HEADER = 1 --}; -- --#define FLACCOMMONINFO \ -- int samplerate; /**< sample rate */\ -- int channels; /**< number of channels */\ -- int bps; /**< bits-per-sample */\ -- --/** -- * Data needed from the Streaminfo header for use by the raw FLAC demuxer -- * and/or the FLAC decoder. -- */ --#define FLACSTREAMINFO \ -- FLACCOMMONINFO \ -- int max_blocksize; /**< maximum block size, in samples */\ -- int max_framesize; /**< maximum frame size, in bytes */\ -- int64_t samples; /**< total number of samples */\ -- --typedef struct FLACStreaminfo { -- FLACSTREAMINFO --} FLACStreaminfo; -- --typedef struct FLACFrameInfo { -- FLACCOMMONINFO -- int blocksize; /**< block size of the frame */ -- int ch_mode; /**< channel decorrelation mode */ -- int64_t frame_or_sample_num; /**< frame number or sample number */ -- int is_var_size; /**< specifies if the stream uses variable -- block sizes or a fixed block size; -- also determines the meaning of -- frame_or_sample_num */ --} FLACFrameInfo; -- --/** -- * Parse the Streaminfo metadata block -- * @param[out] avctx codec context to set basic stream parameters -- * @param[out] s where parsed information is stored -- * @param[in] buffer pointer to start of 34-byte streaminfo data -- * -- * @return negative error code on faiure or >= 0 on success -- */ --int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, -- const uint8_t *buffer); -- --/** -- * Validate the FLAC extradata. -- * @param[in] avctx codec context containing the extradata. -- * @param[out] format extradata format. -- * @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data. -- * @return 1 if valid, 0 if not valid. -- */ --int ff_flac_is_extradata_valid(AVCodecContext *avctx, -- enum FLACExtradataFormat *format, -- uint8_t **streaminfo_start); -- --/** -- * Calculate an estimate for the maximum frame size based on verbatim mode. -- * @param blocksize block size, in samples -- * @param ch number of channels -- * @param bps bits-per-sample -- */ --int ff_flac_get_max_frame_size(int blocksize, int ch, int bps); -- --/** -- * Validate and decode a frame header. -- * @param avctx AVCodecContext to use as av_log() context -- * @param gb GetBitContext from which to read frame header -- * @param[out] fi frame information -- * @param log_level_offset log level offset. can be used to silence error messages. -- * @return non-zero on error, 0 if ok -- */ --int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, -- FLACFrameInfo *fi, int log_level_offset); -- --void ff_flac_set_channel_layout(AVCodecContext *avctx); -- - /** - * Parse the metadata block parameters from the header. - * @param[in] block_header header data, at least 4 bytes -@@ -143,13 +63,13 @@ - static av_always_inline void flac_parse_block_header(const uint8_t *block_header, - int *last, int *type, int *size) - { -- int tmp = bytestream_get_byte(&block_header); -+ int tmp = *block_header; - if (last) - *last = tmp & 0x80; - if (type) - *type = tmp & 0x7F; - if (size) -- *size = bytestream_get_be24(&block_header); -+ *size = AV_RB24(block_header + 1); - } - - #endif /* AVCODEC_FLAC_H */ -diff -Naur a/media/ffvpx/libavcodec/flac_parse.h b/media/ffvpx/libavcodec/flac_parse.h ---- a/media/ffvpx/libavcodec/flac_parse.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/flac_parse.h 2023-04-06 12:50:06.971471053 +0200 -@@ -0,0 +1,89 @@ -+/* -+ * FLAC (Free Lossless Audio Codec) decoder/parser common functions -+ * Copyright (c) 2008 Justin Ruggles -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * FLAC (Free Lossless Audio Codec) decoder/parser common functions -+ */ -+ -+#ifndef AVCODEC_FLAC_PARSE_H -+#define AVCODEC_FLAC_PARSE_H -+ -+#include "avcodec.h" -+#include "get_bits.h" -+ -+typedef struct FLACStreaminfo { -+ int samplerate; /**< sample rate */ -+ int channels; /**< number of channels */ -+ int bps; /**< bits-per-sample */ -+ int max_blocksize; /**< maximum block size, in samples */ -+ int max_framesize; /**< maximum frame size, in bytes */ -+ int64_t samples; /**< total number of samples */ -+} FLACStreaminfo; -+ -+typedef struct FLACFrameInfo { -+ int samplerate; /**< sample rate */ -+ int channels; /**< number of channels */ -+ int bps; /**< bits-per-sample */ -+ int blocksize; /**< block size of the frame */ -+ int ch_mode; /**< channel decorrelation mode */ -+ int64_t frame_or_sample_num; /**< frame number or sample number */ -+ int is_var_size; /**< specifies if the stream uses variable -+ block sizes or a fixed block size; -+ also determines the meaning of -+ frame_or_sample_num */ -+} FLACFrameInfo; -+ -+/** -+ * Parse the Streaminfo metadata block -+ * @param[out] avctx codec context to set basic stream parameters -+ * @param[out] s where parsed information is stored -+ * @param[in] buffer pointer to start of 34-byte streaminfo data -+ * -+ * @return negative error code on faiure or >= 0 on success -+ */ -+int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, -+ const uint8_t *buffer); -+ -+/** -+ * Validate the FLAC extradata. -+ * @param[in] avctx codec context containing the extradata. -+ * @param[out] format extradata format. -+ * @param[out] streaminfo_start pointer to start of 34-byte STREAMINFO data. -+ * @return 1 if valid, 0 if not valid. -+ */ -+int ff_flac_is_extradata_valid(AVCodecContext *avctx, -+ uint8_t **streaminfo_start); -+ -+/** -+ * Validate and decode a frame header. -+ * @param avctx AVCodecContext to use as av_log() context -+ * @param gb GetBitContext from which to read frame header -+ * @param[out] fi frame information -+ * @param log_level_offset log level offset. can be used to silence error messages. -+ * @return non-zero on error, 0 if ok -+ */ -+int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, -+ FLACFrameInfo *fi, int log_level_offset); -+ -+void ff_flac_set_channel_layout(AVCodecContext *avctx, int channels); -+ -+#endif /* AVCODEC_FLAC_PARSE_H */ -diff -Naur a/media/ffvpx/libavcodec/frame_thread_encoder.h b/media/ffvpx/libavcodec/frame_thread_encoder.h ---- a/media/ffvpx/libavcodec/frame_thread_encoder.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/frame_thread_encoder.h 2023-04-06 12:49:40.253394890 +0200 -@@ -27,7 +27,7 @@ - * Initialize frame thread encoder. - * @note hardware encoders are not supported - */ --int ff_frame_thread_encoder_init(AVCodecContext *avctx, AVDictionary *options); -+int ff_frame_thread_encoder_init(AVCodecContext *avctx); - void ff_frame_thread_encoder_free(AVCodecContext *avctx); - int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, - AVFrame *frame, int *got_packet_ptr); -diff -Naur a/media/ffvpx/libavcodec/get_bits.h b/media/ffvpx/libavcodec/get_bits.h ---- a/media/ffvpx/libavcodec/get_bits.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/get_bits.h 2023-04-06 12:50:24.492176543 +0200 -@@ -1,6 +1,5 @@ - /* - * Copyright (c) 2004 Michael Niedermayer -- * Copyright (c) 2016 Alexandra Hájková - * - * This file is part of FFmpeg. - * -@@ -31,9 +30,9 @@ - - #include "libavutil/common.h" - #include "libavutil/intreadwrite.h" --#include "libavutil/log.h" - #include "libavutil/avassert.h" --#include "avcodec.h" -+ -+#include "defs.h" - #include "mathops.h" - #include "vlc.h" - -@@ -58,12 +57,55 @@ - #define CACHED_BITSTREAM_READER 0 - #endif - -+#if CACHED_BITSTREAM_READER -+ -+// we always want the LE implementation, to provide get_bits_le() -+#define BITSTREAM_LE -+ -+#ifndef BITSTREAM_READER_LE -+# define BITSTREAM_BE -+# define BITSTREAM_DEFAULT_BE -+#endif -+ -+#include "bitstream.h" -+ -+#undef BITSTREAM_LE -+#undef BITSTREAM_BE -+#undef BITSTREAM_DEFAULT_BE -+ -+typedef BitstreamContext GetBitContext; -+ -+#define get_bits_count bits_tell -+#define get_bits_left bits_left -+#define skip_bits_long bits_skip -+#define skip_bits bits_skip -+#define get_bits bits_read_nz -+#define get_bitsz bits_read -+#define get_bits_long bits_read -+#define get_bits1 bits_read_bit -+#define get_bits64 bits_read_64 -+#define get_xbits bits_read_xbits -+#define get_sbits bits_read_signed_nz -+#define get_sbits_long bits_read_signed -+#define show_bits bits_peek -+#define show_bits_long bits_peek -+#define init_get_bits bits_init -+#define init_get_bits8 bits_init8 -+#define align_get_bits bits_align -+#define get_vlc2 bits_read_vlc -+ -+#define init_get_bits8_le(s, buffer, byte_size) bits_init8_le((BitstreamContextLE*)s, buffer, byte_size) -+#define get_bits_le(s, n) bits_read_le((BitstreamContextLE*)s, n) -+ -+#define show_bits1(s) bits_peek(s, 1) -+#define skip_bits1(s) bits_skip(s, 1) -+ -+#define skip_1stop_8data_bits bits_skip_1stop_8data -+ -+#else // CACHED_BITSTREAM_READER -+ - typedef struct GetBitContext { - const uint8_t *buffer, *buffer_end; --#if CACHED_BITSTREAM_READER -- uint64_t cache; -- unsigned bits_left; --#endif - int index; - int size_in_bits; - int size_in_bits_plus8; -@@ -120,16 +162,12 @@ - * For examples see get_bits, show_bits, skip_bits, get_vlc. - */ - --#if CACHED_BITSTREAM_READER --# define MIN_CACHE_BITS 64 --#elif defined LONG_BITSTREAM_READER -+#if defined LONG_BITSTREAM_READER - # define MIN_CACHE_BITS 32 - #else - # define MIN_CACHE_BITS 25 - #endif - --#if !CACHED_BITSTREAM_READER -- - #define OPEN_READER_NOSIZE(name, gb) \ - unsigned int name ## _index = (gb)->index; \ - unsigned int av_unused name ## _cache -@@ -214,73 +252,12 @@ - - #define GET_CACHE(name, gb) ((uint32_t) name ## _cache) - --#endif - - static inline int get_bits_count(const GetBitContext *s) - { --#if CACHED_BITSTREAM_READER -- return s->index - s->bits_left; --#else - return s->index; --#endif --} -- --#if CACHED_BITSTREAM_READER --static inline void refill_32(GetBitContext *s, int is_le) --{ --#if !UNCHECKED_BITSTREAM_READER -- if (s->index >> 3 >= s->buffer_end - s->buffer) -- return; --#endif -- -- if (is_le) -- s->cache = (uint64_t)AV_RL32(s->buffer + (s->index >> 3)) << s->bits_left | s->cache; -- else -- s->cache = s->cache | (uint64_t)AV_RB32(s->buffer + (s->index >> 3)) << (32 - s->bits_left); -- s->index += 32; -- s->bits_left += 32; - } - --static inline void refill_64(GetBitContext *s, int is_le) --{ --#if !UNCHECKED_BITSTREAM_READER -- if (s->index >> 3 >= s->buffer_end - s->buffer) -- return; --#endif -- -- if (is_le) -- s->cache = AV_RL64(s->buffer + (s->index >> 3)); -- else -- s->cache = AV_RB64(s->buffer + (s->index >> 3)); -- s->index += 64; -- s->bits_left = 64; --} -- --static inline uint64_t get_val(GetBitContext *s, unsigned n, int is_le) --{ -- uint64_t ret; -- av_assert2(n>0 && n<=63); -- if (is_le) { -- ret = s->cache & ((UINT64_C(1) << n) - 1); -- s->cache >>= n; -- } else { -- ret = s->cache >> (64 - n); -- s->cache <<= n; -- } -- s->bits_left -= n; -- return ret; --} -- --static inline unsigned show_val(const GetBitContext *s, unsigned n) --{ --#ifdef BITSTREAM_READER_LE -- return s->cache & ((UINT64_C(1) << n) - 1); --#else -- return s->cache >> (64 - n); --#endif --} --#endif -- - /** - * Skips the specified number of bits. - * @param n the number of bits to skip, -@@ -290,29 +267,13 @@ - */ - static inline void skip_bits_long(GetBitContext *s, int n) - { --#if CACHED_BITSTREAM_READER -- skip_bits(s, n); --#else - #if UNCHECKED_BITSTREAM_READER - s->index += n; - #else - s->index += av_clip(n, -s->index, s->size_in_bits_plus8 - s->index); - #endif --#endif - } - --#if CACHED_BITSTREAM_READER --static inline void skip_remaining(GetBitContext *s, unsigned n) --{ --#ifdef BITSTREAM_READER_LE -- s->cache >>= n; --#else -- s->cache <<= n; --#endif -- s->bits_left -= n; --} --#endif -- - /** - * Read MPEG-1 dc-style VLC (sign bit + mantissa with no MSB). - * if MSB not set it is negative -@@ -320,13 +281,6 @@ - */ - static inline int get_xbits(GetBitContext *s, int n) - { --#if CACHED_BITSTREAM_READER -- int32_t cache = show_bits(s, 32); -- int sign = ~cache >> 31; -- skip_remaining(s, n); -- -- return ((((uint32_t)(sign ^ cache)) >> (32 - n)) ^ sign) - sign; --#else - register int sign; - register int32_t cache; - OPEN_READER(re, s); -@@ -337,10 +291,8 @@ - LAST_SKIP_BITS(re, s, n); - CLOSE_READER(re, s); - return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; --#endif - } - --#if !CACHED_BITSTREAM_READER - static inline int get_xbits_le(GetBitContext *s, int n) - { - register int sign; -@@ -354,22 +306,16 @@ - CLOSE_READER(re, s); - return (zero_extend(sign ^ cache, n) ^ sign) - sign; - } --#endif - - static inline int get_sbits(GetBitContext *s, int n) - { - register int tmp; --#if CACHED_BITSTREAM_READER -- av_assert2(n>0 && n<=25); -- tmp = sign_extend(get_bits(s, n), n); --#else - OPEN_READER(re, s); - av_assert2(n>0 && n<=25); - UPDATE_CACHE(re, s); - tmp = SHOW_SBITS(re, s, n); - LAST_SKIP_BITS(re, s, n); - CLOSE_READER(re, s); --#endif - return tmp; - } - -@@ -379,32 +325,12 @@ - static inline unsigned int get_bits(GetBitContext *s, int n) - { - register unsigned int tmp; --#if CACHED_BITSTREAM_READER -- -- av_assert2(n>0 && n<=32); -- if (n > s->bits_left) { --#ifdef BITSTREAM_READER_LE -- refill_32(s, 1); --#else -- refill_32(s, 0); --#endif -- if (s->bits_left < 32) -- s->bits_left = n; -- } -- --#ifdef BITSTREAM_READER_LE -- tmp = get_val(s, n, 1); --#else -- tmp = get_val(s, n, 0); --#endif --#else - OPEN_READER(re, s); - av_assert2(n>0 && n<=25); - UPDATE_CACHE(re, s); - tmp = SHOW_UBITS(re, s, n); - LAST_SKIP_BITS(re, s, n); - CLOSE_READER(re, s); --#endif - av_assert2(tmp < UINT64_C(1) << n); - return tmp; - } -@@ -419,16 +345,6 @@ - - static inline unsigned int get_bits_le(GetBitContext *s, int n) - { --#if CACHED_BITSTREAM_READER -- av_assert2(n>0 && n<=32); -- if (n > s->bits_left) { -- refill_32(s, 1); -- if (s->bits_left < 32) -- s->bits_left = n; -- } -- -- return get_val(s, n, 1); --#else - register int tmp; - OPEN_READER(re, s); - av_assert2(n>0 && n<=25); -@@ -437,7 +353,6 @@ - LAST_SKIP_BITS(re, s, n); - CLOSE_READER(re, s); - return tmp; --#endif - } - - /** -@@ -446,71 +361,22 @@ - static inline unsigned int show_bits(GetBitContext *s, int n) - { - register unsigned int tmp; --#if CACHED_BITSTREAM_READER -- if (n > s->bits_left) --#ifdef BITSTREAM_READER_LE -- refill_32(s, 1); --#else -- refill_32(s, 0); --#endif -- -- tmp = show_val(s, n); --#else - OPEN_READER_NOSIZE(re, s); - av_assert2(n>0 && n<=25); - UPDATE_CACHE(re, s); - tmp = SHOW_UBITS(re, s, n); --#endif - return tmp; - } - - static inline void skip_bits(GetBitContext *s, int n) - { --#if CACHED_BITSTREAM_READER -- if (n < s->bits_left) -- skip_remaining(s, n); -- else { -- n -= s->bits_left; -- s->cache = 0; -- s->bits_left = 0; -- -- if (n >= 64) { -- unsigned skip = (n / 8) * 8; -- -- n -= skip; -- s->index += skip; -- } --#ifdef BITSTREAM_READER_LE -- refill_64(s, 1); --#else -- refill_64(s, 0); --#endif -- if (n) -- skip_remaining(s, n); -- } --#else - OPEN_READER(re, s); - LAST_SKIP_BITS(re, s, n); - CLOSE_READER(re, s); --#endif - } - - static inline unsigned int get_bits1(GetBitContext *s) - { --#if CACHED_BITSTREAM_READER -- if (!s->bits_left) --#ifdef BITSTREAM_READER_LE -- refill_64(s, 1); --#else -- refill_64(s, 0); --#endif -- --#ifdef BITSTREAM_READER_LE -- return get_val(s, 1, 1); --#else -- return get_val(s, 1, 0); --#endif --#else - unsigned int index = s->index; - uint8_t result = s->buffer[index >> 3]; - #ifdef BITSTREAM_READER_LE -@@ -527,7 +393,6 @@ - s->index = index; - - return result; --#endif - } - - static inline unsigned int show_bits1(GetBitContext *s) -@@ -548,10 +413,6 @@ - av_assert2(n>=0 && n<=32); - if (!n) { - return 0; --#if CACHED_BITSTREAM_READER -- } -- return get_bits(s, n); --#else - } else if (n <= MIN_CACHE_BITS) { - return get_bits(s, n); - } else { -@@ -563,7 +424,6 @@ - return ret | get_bits(s, n - 16); - #endif - } --#endif - } - - /** -@@ -597,6 +457,18 @@ - } - - /** -+ * Read 0-64 bits as a signed integer. -+ */ -+static inline int64_t get_sbits64(GetBitContext *s, int n) -+{ -+ // sign_extend(x, 0) is undefined -+ if (!n) -+ return 0; -+ -+ return sign_extend64(get_bits64(s, n), n); -+} -+ -+/** - * Show 0-32 bits. - */ - static inline unsigned int show_bits_long(GetBitContext *s, int n) -@@ -609,18 +481,17 @@ - } - } - --static inline int check_marker(void *logctx, GetBitContext *s, const char *msg) --{ -- int bit = get_bits1(s); -- if (!bit) -- av_log(logctx, AV_LOG_INFO, "Marker bit missing at %d of %d %s\n", -- get_bits_count(s) - 1, s->size_in_bits, msg); -- -- return bit; --} - --static inline int init_get_bits_xe(GetBitContext *s, const uint8_t *buffer, -- int bit_size, int is_le) -+/** -+ * Initialize GetBitContext. -+ * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes -+ * larger than the actual read bits because some optimized bitstream -+ * readers read 32 or 64 bit at once and could read over the end -+ * @param bit_size the size of the buffer in bits -+ * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow. -+ */ -+static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer, -+ int bit_size) - { - int buffer_size; - int ret = 0; -@@ -639,12 +510,6 @@ - s->buffer_end = buffer + buffer_size; - s->index = 0; - --#if CACHED_BITSTREAM_READER -- s->cache = 0; -- s->bits_left = 0; -- refill_64(s, is_le); --#endif -- - return ret; - } - -@@ -653,24 +518,6 @@ - * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes - * larger than the actual read bits because some optimized bitstream - * readers read 32 or 64 bit at once and could read over the end -- * @param bit_size the size of the buffer in bits -- * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow. -- */ --static inline int init_get_bits(GetBitContext *s, const uint8_t *buffer, -- int bit_size) --{ --#ifdef BITSTREAM_READER_LE -- return init_get_bits_xe(s, buffer, bit_size, 1); --#else -- return init_get_bits_xe(s, buffer, bit_size, 0); --#endif --} -- --/** -- * Initialize GetBitContext. -- * @param buffer bitstream buffer, must be AV_INPUT_BUFFER_PADDING_SIZE bytes -- * larger than the actual read bits because some optimized bitstream -- * readers read 32 or 64 bit at once and could read over the end - * @param byte_size the size of the buffer in bytes - * @return 0 on success, AVERROR_INVALIDDATA if the buffer_size would overflow. - */ -@@ -687,7 +534,7 @@ - { - if (byte_size > INT_MAX / 8 || byte_size < 0) - byte_size = -1; -- return init_get_bits_xe(s, buffer, byte_size * 8, 1); -+ return init_get_bits(s, buffer, byte_size * 8); - } - - static inline const uint8_t *align_get_bits(GetBitContext *s) -@@ -709,8 +556,8 @@ - unsigned int index; \ - \ - index = SHOW_UBITS(name, gb, bits); \ -- code = table[index][0]; \ -- n = table[index][1]; \ -+ code = table[index].sym; \ -+ n = table[index].len; \ - \ - if (max_depth > 1 && n < 0) { \ - LAST_SKIP_BITS(name, gb, bits); \ -@@ -719,8 +566,8 @@ - nb_bits = -n; \ - \ - index = SHOW_UBITS(name, gb, nb_bits) + code; \ -- code = table[index][0]; \ -- n = table[index][1]; \ -+ code = table[index].sym; \ -+ n = table[index].len; \ - if (max_depth > 2 && n < 0) { \ - LAST_SKIP_BITS(name, gb, nb_bits); \ - UPDATE_CACHE(name, gb); \ -@@ -728,8 +575,8 @@ - nb_bits = -n; \ - \ - index = SHOW_UBITS(name, gb, nb_bits) + code; \ -- code = table[index][0]; \ -- n = table[index][1]; \ -+ code = table[index].sym; \ -+ n = table[index].len; \ - } \ - } \ - SKIP_BITS(name, gb, n); \ -@@ -772,19 +619,6 @@ - SKIP_BITS(name, gb, n); \ - } while (0) - --/* Return the LUT element for the given bitstream configuration. */ --static inline int set_idx(GetBitContext *s, int code, int *n, int *nb_bits, -- VLC_TYPE (*table)[2]) --{ -- unsigned idx; -- -- *nb_bits = -*n; -- idx = show_bits(s, *nb_bits) + code; -- *n = table[idx][1]; -- -- return table[idx][0]; --} -- - /** - * Parse a vlc code. - * @param bits is the number of bits which will be read at once, must be -@@ -794,27 +628,9 @@ - * = (max_vlc_length + bits - 1) / bits - * @returns the code parsed or -1 if no vlc matches - */ --static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2], -+static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, - int bits, int max_depth) - { --#if CACHED_BITSTREAM_READER -- int nb_bits; -- unsigned idx = show_bits(s, bits); -- int code = table[idx][0]; -- int n = table[idx][1]; -- -- if (max_depth > 1 && n < 0) { -- skip_remaining(s, bits); -- code = set_idx(s, code, &n, &nb_bits, table); -- if (max_depth > 2 && n < 0) { -- skip_remaining(s, nb_bits); -- code = set_idx(s, code, &n, &nb_bits, table); -- } -- } -- skip_remaining(s, n); -- -- return code; --#else - int code; - - OPEN_READER(re, s); -@@ -825,7 +641,6 @@ - CLOSE_READER(re, s); - - return code; --#endif - } - - static inline int decode012(GetBitContext *gb) -@@ -865,4 +680,6 @@ - return 0; - } - -+#endif // CACHED_BITSTREAM_READER -+ - #endif /* AVCODEC_GET_BITS_H */ -diff -Naur a/media/ffvpx/libavcodec/get_buffer.c b/media/ffvpx/libavcodec/get_buffer.c ---- a/media/ffvpx/libavcodec/get_buffer.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/get_buffer.c 2023-04-06 12:50:06.972471094 +0200 -@@ -0,0 +1,304 @@ -+/* -+ * The default get_buffer2() implementation -+ * -+ * 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 -+ -+#include "libavutil/avassert.h" -+#include "libavutil/avutil.h" -+#include "libavutil/buffer.h" -+#include "libavutil/frame.h" -+#include "libavutil/hwcontext.h" -+#include "libavutil/imgutils.h" -+#include "libavutil/mem.h" -+#include "libavutil/samplefmt.h" -+#include "libavutil/version.h" -+ -+#include "avcodec.h" -+#include "internal.h" -+ -+typedef struct FramePool { -+ /** -+ * Pools for each data plane. For audio all the planes have the same size, -+ * so only pools[0] is used. -+ */ -+ AVBufferPool *pools[4]; -+ -+ /* -+ * Pool parameters -+ */ -+ int format; -+ int width, height; -+ int stride_align[AV_NUM_DATA_POINTERS]; -+ int linesize[4]; -+ int planes; -+ int channels; -+ int samples; -+} FramePool; -+ -+static void frame_pool_free(void *opaque, uint8_t *data) -+{ -+ FramePool *pool = (FramePool*)data; -+ int i; -+ -+ for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++) -+ av_buffer_pool_uninit(&pool->pools[i]); -+ -+ av_freep(&data); -+} -+ -+static AVBufferRef *frame_pool_alloc(void) -+{ -+ FramePool *pool = av_mallocz(sizeof(*pool)); -+ AVBufferRef *buf; -+ -+ if (!pool) -+ return NULL; -+ -+ buf = av_buffer_create((uint8_t*)pool, sizeof(*pool), -+ frame_pool_free, NULL, 0); -+ if (!buf) { -+ av_freep(&pool); -+ return NULL; -+ } -+ -+ return buf; -+} -+ -+static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) -+{ -+ FramePool *pool = avctx->internal->pool ? -+ (FramePool*)avctx->internal->pool->data : NULL; -+ AVBufferRef *pool_buf; -+ int i, ret, ch, planes; -+ -+ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { -+ int planar = av_sample_fmt_is_planar(frame->format); -+ ch = frame->ch_layout.nb_channels; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (!ch) -+ ch = frame->channels; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ planes = planar ? ch : 1; -+ } -+ -+ if (pool && pool->format == frame->format) { -+ if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && -+ pool->width == frame->width && pool->height == frame->height) -+ return 0; -+ if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && pool->planes == planes && -+ pool->channels == ch && frame->nb_samples == pool->samples) -+ return 0; -+ } -+ -+ pool_buf = frame_pool_alloc(); -+ if (!pool_buf) -+ return AVERROR(ENOMEM); -+ pool = (FramePool*)pool_buf->data; -+ -+ switch (avctx->codec_type) { -+ case AVMEDIA_TYPE_VIDEO: { -+ int linesize[4]; -+ int w = frame->width; -+ int h = frame->height; -+ int unaligned; -+ ptrdiff_t linesize1[4]; -+ size_t size[4]; -+ -+ avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); -+ -+ do { -+ // NOTE: do not align linesizes individually, this breaks e.g. assumptions -+ // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 -+ ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w); -+ if (ret < 0) -+ goto fail; -+ // increase alignment of w for next try (rhs gives the lowest bit set in w) -+ w += w & ~(w - 1); -+ -+ unaligned = 0; -+ for (i = 0; i < 4; i++) -+ unaligned |= linesize[i] % pool->stride_align[i]; -+ } while (unaligned); -+ -+ for (i = 0; i < 4; i++) -+ linesize1[i] = linesize[i]; -+ ret = av_image_fill_plane_sizes(size, avctx->pix_fmt, h, linesize1); -+ if (ret < 0) -+ goto fail; -+ -+ for (i = 0; i < 4; i++) { -+ pool->linesize[i] = linesize[i]; -+ if (size[i]) { -+ if (size[i] > INT_MAX - (16 + STRIDE_ALIGN - 1)) { -+ ret = AVERROR(EINVAL); -+ goto fail; -+ } -+ pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1, -+ CONFIG_MEMORY_POISONING ? -+ NULL : -+ av_buffer_allocz); -+ if (!pool->pools[i]) { -+ ret = AVERROR(ENOMEM); -+ goto fail; -+ } -+ } -+ } -+ pool->format = frame->format; -+ pool->width = frame->width; -+ pool->height = frame->height; -+ -+ break; -+ } -+ case AVMEDIA_TYPE_AUDIO: { -+ ret = av_samples_get_buffer_size(&pool->linesize[0], ch, -+ frame->nb_samples, frame->format, 0); -+ if (ret < 0) -+ goto fail; -+ -+ pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL); -+ if (!pool->pools[0]) { -+ ret = AVERROR(ENOMEM); -+ goto fail; -+ } -+ -+ pool->format = frame->format; -+ pool->planes = planes; -+ pool->channels = ch; -+ pool->samples = frame->nb_samples; -+ break; -+ } -+ default: av_assert0(0); -+ } -+ -+ av_buffer_unref(&avctx->internal->pool); -+ avctx->internal->pool = pool_buf; -+ -+ return 0; -+fail: -+ av_buffer_unref(&pool_buf); -+ return ret; -+} -+ -+static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) -+{ -+ FramePool *pool = (FramePool*)avctx->internal->pool->data; -+ int planes = pool->planes; -+ int i; -+ -+ frame->linesize[0] = pool->linesize[0]; -+ -+ if (planes > AV_NUM_DATA_POINTERS) { -+ frame->extended_data = av_calloc(planes, sizeof(*frame->extended_data)); -+ frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS; -+ frame->extended_buf = av_calloc(frame->nb_extended_buf, -+ sizeof(*frame->extended_buf)); -+ if (!frame->extended_data || !frame->extended_buf) { -+ av_freep(&frame->extended_data); -+ av_freep(&frame->extended_buf); -+ return AVERROR(ENOMEM); -+ } -+ } else { -+ frame->extended_data = frame->data; -+ av_assert0(frame->nb_extended_buf == 0); -+ } -+ -+ for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) { -+ frame->buf[i] = av_buffer_pool_get(pool->pools[0]); -+ if (!frame->buf[i]) -+ goto fail; -+ frame->extended_data[i] = frame->data[i] = frame->buf[i]->data; -+ } -+ for (i = 0; i < frame->nb_extended_buf; i++) { -+ frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]); -+ if (!frame->extended_buf[i]) -+ goto fail; -+ frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data; -+ } -+ -+ if (avctx->debug & FF_DEBUG_BUFFERS) -+ av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame); -+ -+ return 0; -+fail: -+ av_frame_unref(frame); -+ return AVERROR(ENOMEM); -+} -+ -+static int video_get_buffer(AVCodecContext *s, AVFrame *pic) -+{ -+ FramePool *pool = (FramePool*)s->internal->pool->data; -+ int i; -+ -+ if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) { -+ av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n"); -+ return -1; -+ } -+ -+ memset(pic->data, 0, sizeof(pic->data)); -+ pic->extended_data = pic->data; -+ -+ for (i = 0; i < 4 && pool->pools[i]; i++) { -+ pic->linesize[i] = pool->linesize[i]; -+ -+ pic->buf[i] = av_buffer_pool_get(pool->pools[i]); -+ if (!pic->buf[i]) -+ goto fail; -+ -+ pic->data[i] = pic->buf[i]->data; -+ } -+ for (; i < AV_NUM_DATA_POINTERS; i++) { -+ pic->data[i] = NULL; -+ pic->linesize[i] = 0; -+ } -+ -+ if (s->debug & FF_DEBUG_BUFFERS) -+ av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic); -+ -+ return 0; -+fail: -+ av_frame_unref(pic); -+ return AVERROR(ENOMEM); -+} -+ -+int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) -+{ -+ int ret; -+ -+ if (avctx->hw_frames_ctx) { -+ ret = av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); -+ frame->width = avctx->coded_width; -+ frame->height = avctx->coded_height; -+ return ret; -+ } -+ -+ if ((ret = update_frame_pool(avctx, frame)) < 0) -+ return ret; -+ -+ switch (avctx->codec_type) { -+ case AVMEDIA_TYPE_VIDEO: -+ return video_get_buffer(avctx, frame); -+ case AVMEDIA_TYPE_AUDIO: -+ return audio_get_buffer(avctx, frame); -+ default: -+ return -1; -+ } -+} -diff -Naur a/media/ffvpx/libavcodec/golomb.c b/media/ffvpx/libavcodec/golomb.c ---- a/media/ffvpx/libavcodec/golomb.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/golomb.c 2023-04-06 12:49:40.253394890 +0200 -@@ -26,7 +26,7 @@ - * @author Michael Niedermayer - */ - --#include "libavutil/common.h" -+#include - - const uint8_t ff_golomb_vlc_len[512]={ - 19,17,15,15,13,13,13,13,11,11,11,11,11,11,11,11,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, -diff -Naur a/media/ffvpx/libavcodec/golomb.h b/media/ffvpx/libavcodec/golomb.h ---- a/media/ffvpx/libavcodec/golomb.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/golomb.h 2023-04-06 12:49:40.253394890 +0200 -@@ -33,14 +33,12 @@ - #include - - #include "get_bits.h" --#include "put_bits.h" - - #define INVALID_VLC 0x80000000 - - extern const uint8_t ff_golomb_vlc_len[512]; - extern const uint8_t ff_ue_golomb_vlc_code[512]; - extern const int8_t ff_se_golomb_vlc_code[512]; --extern const uint8_t ff_ue_golomb_len[256]; - - extern const uint8_t ff_interleaved_golomb_vlc_len[256]; - extern const uint8_t ff_interleaved_ue_golomb_vlc_code[256]; -@@ -615,135 +613,4 @@ - #define get_te0_golomb(a, r) get_te(a, r, __FILE__, __func__, __LINE__) - - #endif /* TRACE */ -- --/** -- * write unsigned exp golomb code. 2^16 - 2 at most -- */ --static inline void set_ue_golomb(PutBitContext *pb, int i) --{ -- av_assert2(i >= 0); -- av_assert2(i <= 0xFFFE); -- -- if (i < 256) -- put_bits(pb, ff_ue_golomb_len[i], i + 1); -- else { -- int e = av_log2(i + 1); -- put_bits(pb, 2 * e + 1, i + 1); -- } --} -- --/** -- * write unsigned exp golomb code. 2^32-2 at most. -- */ --static inline void set_ue_golomb_long(PutBitContext *pb, uint32_t i) --{ -- av_assert2(i <= (UINT32_MAX - 1)); -- -- if (i < 256) -- put_bits(pb, ff_ue_golomb_len[i], i + 1); -- else { -- int e = av_log2(i + 1); -- put_bits64(pb, 2 * e + 1, i + 1); -- } --} -- --/** -- * write truncated unsigned exp golomb code. -- */ --static inline void set_te_golomb(PutBitContext *pb, int i, int range) --{ -- av_assert2(range >= 1); -- av_assert2(i <= range); -- -- if (range == 2) -- put_bits(pb, 1, i ^ 1); -- else -- set_ue_golomb(pb, i); --} -- --/** -- * write signed exp golomb code. 16 bits at most. -- */ --static inline void set_se_golomb(PutBitContext *pb, int i) --{ -- i = 2 * i - 1; -- if (i < 0) -- i ^= -1; //FIXME check if gcc does the right thing -- set_ue_golomb(pb, i); --} -- --/** -- * write unsigned golomb rice code (ffv1). -- */ --static inline void set_ur_golomb(PutBitContext *pb, int i, int k, int limit, -- int esc_len) --{ -- int e; -- -- av_assert2(i >= 0); -- -- e = i >> k; -- if (e < limit) -- put_bits(pb, e + k + 1, (1 << k) + av_mod_uintp2(i, k)); -- else -- put_bits(pb, limit + esc_len, i - limit + 1); --} -- --/** -- * write unsigned golomb rice code (jpegls). -- */ --static inline void set_ur_golomb_jpegls(PutBitContext *pb, int i, int k, -- int limit, int esc_len) --{ -- int e; -- -- av_assert2(i >= 0); -- -- e = (i >> k) + 1; -- if (e < limit) { -- while (e > 31) { -- put_bits(pb, 31, 0); -- e -= 31; -- } -- put_bits(pb, e, 1); -- if (k) -- put_sbits(pb, k, i); -- } else { -- while (limit > 31) { -- put_bits(pb, 31, 0); -- limit -= 31; -- } -- put_bits(pb, limit, 1); -- put_bits(pb, esc_len, i - 1); -- } --} -- --/** -- * write signed golomb rice code (ffv1). -- */ --static inline void set_sr_golomb(PutBitContext *pb, int i, int k, int limit, -- int esc_len) --{ -- int v; -- -- v = -2 * i - 1; -- v ^= (v >> 31); -- -- set_ur_golomb(pb, v, k, limit, esc_len); --} -- --/** -- * write signed golomb rice code (flac). -- */ --static inline void set_sr_golomb_flac(PutBitContext *pb, int i, int k, -- int limit, int esc_len) --{ -- int v; -- -- v = -2 * i - 1; -- v ^= (v >> 31); -- -- set_ur_golomb_jpegls(pb, v, k, limit, esc_len); --} -- - #endif /* AVCODEC_GOLOMB_H */ -diff -Naur a/media/ffvpx/libavcodec/h264chroma.h b/media/ffvpx/libavcodec/h264chroma.h ---- a/media/ffvpx/libavcodec/h264chroma.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/h264chroma.h 2023-04-06 12:50:06.972471094 +0200 -@@ -22,7 +22,7 @@ - #include - #include - --typedef void (*h264_chroma_mc_func)(uint8_t *dst /*align 8*/, uint8_t *src /*align 1*/, ptrdiff_t srcStride, int h, int x, int y); -+typedef void (*h264_chroma_mc_func)(uint8_t *dst /*align 8*/, const uint8_t *src /*align 1*/, ptrdiff_t srcStride, int h, int x, int y); - - typedef struct H264ChromaContext { - h264_chroma_mc_func put_h264_chroma_pixels_tab[4]; -@@ -36,5 +36,6 @@ - void ff_h264chroma_init_ppc(H264ChromaContext *c, int bit_depth); - void ff_h264chroma_init_x86(H264ChromaContext *c, int bit_depth); - void ff_h264chroma_init_mips(H264ChromaContext *c, int bit_depth); -+void ff_h264chroma_init_loongarch(H264ChromaContext *c, int bit_depth); - - #endif /* AVCODEC_H264CHROMA_H */ -diff -Naur a/media/ffvpx/libavcodec/h264dsp.h b/media/ffvpx/libavcodec/h264dsp.h ---- a/media/ffvpx/libavcodec/h264dsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/h264dsp.h 2023-04-06 12:49:40.253394890 +0200 -@@ -89,16 +89,16 @@ - - void (*h264_idct_add16)(uint8_t *dst /*align 16*/, const int *blockoffset, - int16_t *block /*align 16*/, int stride, -- const uint8_t nnzc[15 * 8]); -+ const uint8_t nnzc[5 * 8]); - void (*h264_idct8_add4)(uint8_t *dst /*align 16*/, const int *blockoffset, - int16_t *block /*align 16*/, int stride, -- const uint8_t nnzc[15 * 8]); -+ const uint8_t nnzc[5 * 8]); - void (*h264_idct_add8)(uint8_t **dst /*align 16*/, const int *blockoffset, - int16_t *block /*align 16*/, int stride, - const uint8_t nnzc[15 * 8]); - void (*h264_idct_add16intra)(uint8_t *dst /*align 16*/, const int *blockoffset, - int16_t *block /*align 16*/, -- int stride, const uint8_t nnzc[15 * 8]); -+ int stride, const uint8_t nnzc[5 * 8]); - void (*h264_luma_dc_dequant_idct)(int16_t *output, - int16_t *input /*align 16*/, int qmul); - void (*h264_chroma_dc_dequant_idct)(int16_t *block, int qmul); -@@ -129,5 +129,7 @@ - const int chroma_format_idc); - void ff_h264dsp_init_mips(H264DSPContext *c, const int bit_depth, - const int chroma_format_idc); -+void ff_h264dsp_init_loongarch(H264DSPContext *c, const int bit_depth, -+ const int chroma_format_idc); - - #endif /* AVCODEC_H264DSP_H */ -diff -Naur a/media/ffvpx/libavcodec/h264pred.c b/media/ffvpx/libavcodec/h264pred.c ---- a/media/ffvpx/libavcodec/h264pred.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/h264pred.c 2023-04-06 12:49:40.253394890 +0200 -@@ -25,11 +25,13 @@ - * @author Michael Niedermayer - */ - -+#include "config.h" - #include "libavutil/attributes.h" - #include "libavutil/avassert.h" - #include "libavutil/intreadwrite.h" --#include "avcodec.h" -+#include "codec_id.h" - #include "h264pred.h" -+#include "mathops.h" - - #define BIT_DEPTH 8 - #include "h264pred_template.c" -@@ -51,6 +53,30 @@ - #include "h264pred_template.c" - #undef BIT_DEPTH - -+static void pred4x4_127_dc_c(uint8_t *src, const uint8_t *topright, -+ ptrdiff_t _stride) -+{ -+ int stride = _stride; -+ const uint32_t a = 0x7F7F7F7FU; -+ -+ AV_WN32A(src + 0 * stride, a); -+ AV_WN32A(src + 1 * stride, a); -+ AV_WN32A(src + 2 * stride, a); -+ AV_WN32A(src + 3 * stride, a); -+} -+ -+static void pred4x4_129_dc_c(uint8_t *src, const uint8_t *topright, -+ ptrdiff_t _stride) -+{ -+ int stride = _stride; -+ const uint32_t a = 0x81818181U; -+ -+ AV_WN32A(src + 0 * stride, a); -+ AV_WN32A(src + 1 * stride, a); -+ AV_WN32A(src + 2 * stride, a); -+ AV_WN32A(src + 3 * stride, a); -+} -+ - static void pred4x4_vertical_vp8_c(uint8_t *src, const uint8_t *topright, - ptrdiff_t stride) - { -@@ -419,56 +445,19 @@ - #define FUNCD(a) a ## _c - - #define H264_PRED(depth) \ -- if(codec_id != AV_CODEC_ID_RV40){\ -- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {\ -- h->pred4x4[VERT_PRED ]= FUNCD(pred4x4_vertical_vp8);\ -- h->pred4x4[HOR_PRED ]= FUNCD(pred4x4_horizontal_vp8);\ -- } else {\ -- h->pred4x4[VERT_PRED ]= FUNCC(pred4x4_vertical , depth);\ -- h->pred4x4[HOR_PRED ]= FUNCC(pred4x4_horizontal , depth);\ -- }\ -- h->pred4x4[DC_PRED ]= FUNCC(pred4x4_dc , depth);\ -- if(codec_id == AV_CODEC_ID_SVQ3)\ -- h->pred4x4[DIAG_DOWN_LEFT_PRED ]= FUNCD(pred4x4_down_left_svq3);\ -- else\ -- h->pred4x4[DIAG_DOWN_LEFT_PRED ]= FUNCC(pred4x4_down_left , depth);\ -- h->pred4x4[DIAG_DOWN_RIGHT_PRED]= FUNCC(pred4x4_down_right , depth);\ -- h->pred4x4[VERT_RIGHT_PRED ]= FUNCC(pred4x4_vertical_right , depth);\ -- h->pred4x4[HOR_DOWN_PRED ]= FUNCC(pred4x4_horizontal_down , depth);\ -- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {\ -- h->pred4x4[VERT_LEFT_PRED ]= FUNCD(pred4x4_vertical_left_vp8);\ -- } else\ -- h->pred4x4[VERT_LEFT_PRED ]= FUNCC(pred4x4_vertical_left , depth);\ -- h->pred4x4[HOR_UP_PRED ]= FUNCC(pred4x4_horizontal_up , depth);\ -- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) {\ -- h->pred4x4[LEFT_DC_PRED ]= FUNCC(pred4x4_left_dc , depth);\ -- h->pred4x4[TOP_DC_PRED ]= FUNCC(pred4x4_top_dc , depth);\ -- } else {\ -- h->pred4x4[TM_VP8_PRED ]= FUNCD(pred4x4_tm_vp8);\ -- h->pred4x4[DC_127_PRED ]= FUNCC(pred4x4_127_dc , depth);\ -- h->pred4x4[DC_129_PRED ]= FUNCC(pred4x4_129_dc , depth);\ -- h->pred4x4[VERT_VP8_PRED ]= FUNCC(pred4x4_vertical , depth);\ -- h->pred4x4[HOR_VP8_PRED ]= FUNCC(pred4x4_horizontal , depth);\ -- }\ -- if (codec_id != AV_CODEC_ID_VP8)\ -- h->pred4x4[DC_128_PRED ]= FUNCC(pred4x4_128_dc , depth);\ -- }else{\ -- h->pred4x4[VERT_PRED ]= FUNCC(pred4x4_vertical , depth);\ -- h->pred4x4[HOR_PRED ]= FUNCC(pred4x4_horizontal , depth);\ -- h->pred4x4[DC_PRED ]= FUNCC(pred4x4_dc , depth);\ -- h->pred4x4[DIAG_DOWN_LEFT_PRED ]= FUNCD(pred4x4_down_left_rv40);\ -- h->pred4x4[DIAG_DOWN_RIGHT_PRED]= FUNCC(pred4x4_down_right , depth);\ -- h->pred4x4[VERT_RIGHT_PRED ]= FUNCC(pred4x4_vertical_right , depth);\ -- h->pred4x4[HOR_DOWN_PRED ]= FUNCC(pred4x4_horizontal_down , depth);\ -- h->pred4x4[VERT_LEFT_PRED ]= FUNCD(pred4x4_vertical_left_rv40);\ -- h->pred4x4[HOR_UP_PRED ]= FUNCD(pred4x4_horizontal_up_rv40);\ -- h->pred4x4[LEFT_DC_PRED ]= FUNCC(pred4x4_left_dc , depth);\ -- h->pred4x4[TOP_DC_PRED ]= FUNCC(pred4x4_top_dc , depth);\ -- h->pred4x4[DC_128_PRED ]= FUNCC(pred4x4_128_dc , depth);\ -- h->pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN]= FUNCD(pred4x4_down_left_rv40_nodown);\ -- h->pred4x4[HOR_UP_PRED_RV40_NODOWN]= FUNCD(pred4x4_horizontal_up_rv40_nodown);\ -- h->pred4x4[VERT_LEFT_PRED_RV40_NODOWN]= FUNCD(pred4x4_vertical_left_rv40_nodown);\ -- }\ -+ h->pred4x4[VERT_PRED ] = FUNCC(pred4x4_vertical, depth);\ -+ h->pred4x4[HOR_PRED ] = FUNCC(pred4x4_horizontal, depth);\ -+ h->pred4x4[DC_PRED ] = FUNCC(pred4x4_dc, depth);\ -+ h->pred4x4[DIAG_DOWN_LEFT_PRED ] = FUNCC(pred4x4_down_left, depth);\ -+ h->pred4x4[DIAG_DOWN_RIGHT_PRED] = FUNCC(pred4x4_down_right, depth);\ -+ h->pred4x4[VERT_RIGHT_PRED ] = FUNCC(pred4x4_vertical_right, depth);\ -+ h->pred4x4[HOR_DOWN_PRED ] = FUNCC(pred4x4_horizontal_down, depth);\ -+ h->pred4x4[VERT_LEFT_PRED ] = FUNCC(pred4x4_vertical_left, depth);\ -+ h->pred4x4[HOR_UP_PRED ] = FUNCC(pred4x4_horizontal_up, depth);\ -+ h->pred4x4[LEFT_DC_PRED ] = FUNCC(pred4x4_left_dc, depth);\ -+ h->pred4x4[TOP_DC_PRED ] = FUNCC(pred4x4_top_dc, depth);\ -+ if (depth > 8 || codec_id != AV_CODEC_ID_VP8)\ -+ h->pred4x4[DC_128_PRED ] = FUNCC(pred4x4_128_dc, depth);\ - \ - h->pred8x8l[VERT_PRED ]= FUNCC(pred8x8l_vertical , depth);\ - h->pred8x8l[HOR_PRED ]= FUNCC(pred8x8l_horizontal , depth);\ -@@ -486,20 +475,15 @@ - if (chroma_format_idc <= 1) {\ - h->pred8x8[VERT_PRED8x8 ]= FUNCC(pred8x8_vertical , depth);\ - h->pred8x8[HOR_PRED8x8 ]= FUNCC(pred8x8_horizontal , depth);\ -+ h->pred8x8[PLANE_PRED8x8] = FUNCC(pred8x8_plane, depth);\ - } else {\ - h->pred8x8[VERT_PRED8x8 ]= FUNCC(pred8x16_vertical , depth);\ - h->pred8x8[HOR_PRED8x8 ]= FUNCC(pred8x16_horizontal , depth);\ -+ h->pred8x8[PLANE_PRED8x8] = FUNCC(pred8x16_plane, depth);\ - }\ -- if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8) {\ -- if (chroma_format_idc <= 1) {\ -- h->pred8x8[PLANE_PRED8x8]= FUNCC(pred8x8_plane , depth);\ -- } else {\ -- h->pred8x8[PLANE_PRED8x8]= FUNCC(pred8x16_plane , depth);\ -- }\ -- } else\ -- h->pred8x8[PLANE_PRED8x8]= FUNCD(pred8x8_tm_vp8);\ -- if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 && \ -- codec_id != AV_CODEC_ID_VP8) {\ -+ if (depth > 8 || (codec_id != AV_CODEC_ID_RV40 && \ -+ codec_id != AV_CODEC_ID_VP7 && \ -+ codec_id != AV_CODEC_ID_VP8)) { \ - if (chroma_format_idc <= 1) {\ - h->pred8x8[DC_PRED8x8 ]= FUNCC(pred8x8_dc , depth);\ - h->pred8x8[LEFT_DC_PRED8x8]= FUNCC(pred8x8_left_dc , depth);\ -@@ -521,10 +505,6 @@ - h->pred8x8[DC_PRED8x8 ]= FUNCD(pred8x8_dc_rv40);\ - h->pred8x8[LEFT_DC_PRED8x8]= FUNCD(pred8x8_left_dc_rv40);\ - h->pred8x8[TOP_DC_PRED8x8 ]= FUNCD(pred8x8_top_dc_rv40);\ -- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {\ -- h->pred8x8[DC_127_PRED8x8]= FUNCC(pred8x8_127_dc , depth);\ -- h->pred8x8[DC_129_PRED8x8]= FUNCC(pred8x8_129_dc , depth);\ -- }\ - }\ - if (chroma_format_idc <= 1) {\ - h->pred8x8[DC_128_PRED8x8 ]= FUNCC(pred8x8_128_dc , depth);\ -@@ -535,23 +515,7 @@ - h->pred16x16[DC_PRED8x8 ]= FUNCC(pred16x16_dc , depth);\ - h->pred16x16[VERT_PRED8x8 ]= FUNCC(pred16x16_vertical , depth);\ - h->pred16x16[HOR_PRED8x8 ]= FUNCC(pred16x16_horizontal , depth);\ -- switch(codec_id){\ -- case AV_CODEC_ID_SVQ3:\ -- h->pred16x16[PLANE_PRED8x8 ]= FUNCD(pred16x16_plane_svq3);\ -- break;\ -- case AV_CODEC_ID_RV40:\ -- h->pred16x16[PLANE_PRED8x8 ]= FUNCD(pred16x16_plane_rv40);\ -- break;\ -- case AV_CODEC_ID_VP7:\ -- case AV_CODEC_ID_VP8:\ -- h->pred16x16[PLANE_PRED8x8 ]= FUNCD(pred16x16_tm_vp8);\ -- h->pred16x16[DC_127_PRED8x8]= FUNCC(pred16x16_127_dc , depth);\ -- h->pred16x16[DC_129_PRED8x8]= FUNCC(pred16x16_129_dc , depth);\ -- break;\ -- default:\ -- h->pred16x16[PLANE_PRED8x8 ]= FUNCC(pred16x16_plane , depth);\ -- break;\ -- }\ -+ h->pred16x16[PLANE_PRED8x8 ]= FUNCC(pred16x16_plane , depth);\ - h->pred16x16[LEFT_DC_PRED8x8]= FUNCC(pred16x16_left_dc , depth);\ - h->pred16x16[TOP_DC_PRED8x8 ]= FUNCC(pred16x16_top_dc , depth);\ - h->pred16x16[DC_128_PRED8x8 ]= FUNCC(pred16x16_128_dc , depth);\ -@@ -564,8 +528,8 @@ - h->pred8x8l_filter_add [VERT_PRED ]= FUNCC(pred8x8l_vertical_filter_add , depth);\ - h->pred8x8l_filter_add [ HOR_PRED ]= FUNCC(pred8x8l_horizontal_filter_add , depth);\ - if (chroma_format_idc <= 1) {\ -- h->pred8x8_add [VERT_PRED8x8]= FUNCC(pred8x8_vertical_add , depth);\ -- h->pred8x8_add [ HOR_PRED8x8]= FUNCC(pred8x8_horizontal_add , depth);\ -+ h->pred8x8_add[VERT_PRED8x8] = FUNCC(pred8x8_vertical_add, depth);\ -+ h->pred8x8_add[ HOR_PRED8x8] = FUNCC(pred8x8_horizontal_add, depth);\ - } else {\ - h->pred8x8_add [VERT_PRED8x8]= FUNCC(pred8x16_vertical_add , depth);\ - h->pred8x8_add [ HOR_PRED8x8]= FUNCC(pred8x16_horizontal_add , depth);\ -@@ -589,15 +553,50 @@ - default: - av_assert0(bit_depth<=8); - H264_PRED(8) -+ switch (codec_id) { -+ case AV_CODEC_ID_SVQ3: -+ h->pred4x4[DIAG_DOWN_LEFT_PRED] = FUNCD(pred4x4_down_left_svq3); -+ h->pred16x16[PLANE_PRED8x8 ] = FUNCD(pred16x16_plane_svq3); -+ break; -+ case AV_CODEC_ID_RV40: -+ h->pred4x4[DIAG_DOWN_LEFT_PRED] = FUNCD(pred4x4_down_left_rv40); -+ h->pred4x4[VERT_LEFT_PRED ] = FUNCD(pred4x4_vertical_left_rv40); -+ h->pred4x4[HOR_UP_PRED ] = FUNCD(pred4x4_horizontal_up_rv40); -+ h->pred4x4[DIAG_DOWN_LEFT_PRED_RV40_NODOWN] = FUNCD(pred4x4_down_left_rv40_nodown); -+ h->pred4x4[HOR_UP_PRED_RV40_NODOWN] = FUNCD(pred4x4_horizontal_up_rv40_nodown); -+ h->pred4x4[VERT_LEFT_PRED_RV40_NODOWN] = FUNCD(pred4x4_vertical_left_rv40_nodown); -+ h->pred16x16[PLANE_PRED8x8 ] = FUNCD(pred16x16_plane_rv40); -+ break; -+ case AV_CODEC_ID_VP7: -+ case AV_CODEC_ID_VP8: -+ h->pred4x4[VERT_PRED ] = FUNCD(pred4x4_vertical_vp8); -+ h->pred4x4[HOR_PRED ] = FUNCD(pred4x4_horizontal_vp8); -+ h->pred4x4[VERT_LEFT_PRED ] = FUNCD(pred4x4_vertical_left_vp8); -+ h->pred4x4[TM_VP8_PRED ] = FUNCD(pred4x4_tm_vp8); -+ h->pred4x4[VERT_VP8_PRED ] = FUNCC(pred4x4_vertical, 8); -+ h->pred4x4[DC_127_PRED ] = FUNCD(pred4x4_127_dc); -+ h->pred4x4[DC_129_PRED ] = FUNCD(pred4x4_129_dc); -+ h->pred4x4[HOR_VP8_PRED ] = FUNCC(pred4x4_horizontal, 8); -+ h->pred8x8[PLANE_PRED8x8 ] = FUNCD(pred8x8_tm_vp8); -+ h->pred8x8[DC_127_PRED8x8 ] = FUNCC(pred8x8_127_dc, 8); -+ h->pred8x8[DC_129_PRED8x8 ] = FUNCC(pred8x8_129_dc, 8); -+ h->pred16x16[PLANE_PRED8x8 ] = FUNCD(pred16x16_tm_vp8); -+ h->pred16x16[DC_127_PRED8x8] = FUNCC(pred16x16_127_dc, 8); -+ h->pred16x16[DC_129_PRED8x8] = FUNCC(pred16x16_129_dc, 8); -+ break; -+ } - break; - } - -- if (ARCH_AARCH64) -- ff_h264_pred_init_aarch64(h, codec_id, bit_depth, chroma_format_idc); -- if (ARCH_ARM) -- ff_h264_pred_init_arm(h, codec_id, bit_depth, chroma_format_idc); -- if (ARCH_X86) -- ff_h264_pred_init_x86(h, codec_id, bit_depth, chroma_format_idc); -- if (ARCH_MIPS) -- ff_h264_pred_init_mips(h, codec_id, bit_depth, chroma_format_idc); -+#if ARCH_AARCH64 -+ ff_h264_pred_init_aarch64(h, codec_id, bit_depth, chroma_format_idc); -+#elif ARCH_ARM -+ ff_h264_pred_init_arm(h, codec_id, bit_depth, chroma_format_idc); -+#elif ARCH_X86 -+ ff_h264_pred_init_x86(h, codec_id, bit_depth, chroma_format_idc); -+#elif ARCH_MIPS -+ ff_h264_pred_init_mips(h, codec_id, bit_depth, chroma_format_idc); -+#elif ARCH_LOONGARCH -+ ff_h264_pred_init_loongarch(h, codec_id, bit_depth, chroma_format_idc); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/h264pred.h b/media/ffvpx/libavcodec/h264pred.h ---- a/media/ffvpx/libavcodec/h264pred.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/h264pred.h 2023-04-06 12:49:40.253394890 +0200 -@@ -86,6 +86,8 @@ - #define DC_129_PRED8x8 8 - //@} - -+#define PART_NOT_AVAILABLE -2 -+ - /** - * Context for storing H.264 prediction functions - */ -@@ -122,5 +124,7 @@ - const int bit_depth, const int chroma_format_idc); - void ff_h264_pred_init_mips(H264PredContext *h, int codec_id, - const int bit_depth, const int chroma_format_idc); -+void ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id, -+ const int bit_depth, const int chroma_format_idc); - - #endif /* AVCODEC_H264PRED_H */ -diff -Naur a/media/ffvpx/libavcodec/h264pred_template.c b/media/ffvpx/libavcodec/h264pred_template.c ---- a/media/ffvpx/libavcodec/h264pred_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/h264pred_template.c 2023-04-06 12:49:40.253394890 +0200 -@@ -111,32 +111,6 @@ - AV_WN4PA(src+3*stride, a); - } - --static void FUNCC(pred4x4_127_dc)(uint8_t *_src, const uint8_t *topright, -- ptrdiff_t _stride) --{ -- pixel *src = (pixel*)_src; -- int stride = _stride>>(sizeof(pixel)-1); -- const pixel4 a = PIXEL_SPLAT_X4((1<<(BIT_DEPTH-1))-1); -- -- AV_WN4PA(src+0*stride, a); -- AV_WN4PA(src+1*stride, a); -- AV_WN4PA(src+2*stride, a); -- AV_WN4PA(src+3*stride, a); --} -- --static void FUNCC(pred4x4_129_dc)(uint8_t *_src, const uint8_t *topright, -- ptrdiff_t _stride) --{ -- pixel *src = (pixel*)_src; -- int stride = _stride>>(sizeof(pixel)-1); -- const pixel4 a = PIXEL_SPLAT_X4((1<<(BIT_DEPTH-1))+1); -- -- AV_WN4PA(src+0*stride, a); -- AV_WN4PA(src+1*stride, a); -- AV_WN4PA(src+2*stride, a); -- AV_WN4PA(src+3*stride, a); --} -- - - #define LOAD_TOP_RIGHT_EDGE\ - const unsigned av_unused t4 = topright[0];\ -@@ -427,9 +401,11 @@ - PREDICT_16x16_DC(PIXEL_SPLAT_X4(v));\ - } - --PRED16x16_X(127, (1<<(BIT_DEPTH-1))-1) - PRED16x16_X(128, (1<<(BIT_DEPTH-1))+0) -+#if BIT_DEPTH == 8 -+PRED16x16_X(127, (1<<(BIT_DEPTH-1))-1) - PRED16x16_X(129, (1<<(BIT_DEPTH-1))+1) -+#endif - - static inline void FUNCC(pred16x16_plane_compat)(uint8_t *_src, - ptrdiff_t _stride, -@@ -551,9 +527,11 @@ - }\ - } - --PRED8x8_X(127, (1<<(BIT_DEPTH-1))-1) - PRED8x8_X(128, (1<<(BIT_DEPTH-1))+0) -+#if BIT_DEPTH == 8 -+PRED8x8_X(127, (1<<(BIT_DEPTH-1))-1) - PRED8x8_X(129, (1<<(BIT_DEPTH-1))+1) -+#endif - - static void FUNCC(pred8x16_128_dc)(uint8_t *_src, ptrdiff_t stride) - { -diff -Naur a/media/ffvpx/libavcodec/hpeldsp.h b/media/ffvpx/libavcodec/hpeldsp.h ---- a/media/ffvpx/libavcodec/hpeldsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/hpeldsp.h 2023-04-06 12:49:40.253394890 +0200 -@@ -102,5 +102,6 @@ - void ff_hpeldsp_init_ppc(HpelDSPContext *c, int flags); - void ff_hpeldsp_init_x86(HpelDSPContext *c, int flags); - void ff_hpeldsp_init_mips(HpelDSPContext *c, int flags); -+void ff_hpeldsp_init_loongarch(HpelDSPContext *c, int flags); - - #endif /* AVCODEC_HPELDSP_H */ -diff -Naur a/media/ffvpx/libavcodec/hwaccels.h b/media/ffvpx/libavcodec/hwaccels.h ---- a/media/ffvpx/libavcodec/hwaccels.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/hwaccels.h 2023-04-06 12:50:06.972471094 +0200 -@@ -26,6 +26,7 @@ - extern const AVHWAccel ff_av1_dxva2_hwaccel; - extern const AVHWAccel ff_av1_nvdec_hwaccel; - extern const AVHWAccel ff_av1_vaapi_hwaccel; -+extern const AVHWAccel ff_av1_vdpau_hwaccel; - extern const AVHWAccel ff_h263_vaapi_hwaccel; - extern const AVHWAccel ff_h263_videotoolbox_hwaccel; - extern const AVHWAccel ff_h264_d3d11va_hwaccel; -@@ -47,7 +48,6 @@ - extern const AVHWAccel ff_mpeg1_nvdec_hwaccel; - extern const AVHWAccel ff_mpeg1_vdpau_hwaccel; - extern const AVHWAccel ff_mpeg1_videotoolbox_hwaccel; --extern const AVHWAccel ff_mpeg1_xvmc_hwaccel; - extern const AVHWAccel ff_mpeg2_d3d11va_hwaccel; - extern const AVHWAccel ff_mpeg2_d3d11va2_hwaccel; - extern const AVHWAccel ff_mpeg2_nvdec_hwaccel; -@@ -55,11 +55,11 @@ - extern const AVHWAccel ff_mpeg2_vaapi_hwaccel; - extern const AVHWAccel ff_mpeg2_vdpau_hwaccel; - extern const AVHWAccel ff_mpeg2_videotoolbox_hwaccel; --extern const AVHWAccel ff_mpeg2_xvmc_hwaccel; - extern const AVHWAccel ff_mpeg4_nvdec_hwaccel; - extern const AVHWAccel ff_mpeg4_vaapi_hwaccel; - extern const AVHWAccel ff_mpeg4_vdpau_hwaccel; - extern const AVHWAccel ff_mpeg4_videotoolbox_hwaccel; -+extern const AVHWAccel ff_prores_videotoolbox_hwaccel; - extern const AVHWAccel ff_vc1_d3d11va_hwaccel; - extern const AVHWAccel ff_vc1_d3d11va2_hwaccel; - extern const AVHWAccel ff_vc1_dxva2_hwaccel; -@@ -74,6 +74,7 @@ - extern const AVHWAccel ff_vp9_nvdec_hwaccel; - extern const AVHWAccel ff_vp9_vaapi_hwaccel; - extern const AVHWAccel ff_vp9_vdpau_hwaccel; -+extern const AVHWAccel ff_vp9_videotoolbox_hwaccel; - extern const AVHWAccel ff_wmv3_d3d11va_hwaccel; - extern const AVHWAccel ff_wmv3_d3d11va2_hwaccel; - extern const AVHWAccel ff_wmv3_dxva2_hwaccel; -diff -Naur a/media/ffvpx/libavcodec/hwconfig.h b/media/ffvpx/libavcodec/hwconfig.h ---- a/media/ffvpx/libavcodec/hwconfig.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/hwconfig.h 2023-04-06 12:49:40.253394890 +0200 -@@ -78,8 +78,6 @@ - HW_CONFIG_HWACCEL(1, 1, 1, VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel) - #define HWACCEL_D3D11VA(codec) \ - HW_CONFIG_HWACCEL(0, 0, 1, D3D11VA_VLD, NONE, ff_ ## codec ## _d3d11va_hwaccel) --#define HWACCEL_XVMC(codec) \ -- HW_CONFIG_HWACCEL(0, 0, 1, XVMC, NONE, ff_ ## codec ## _xvmc_hwaccel) - - #define HW_CONFIG_ENCODER(device, frames, ad_hoc, format, device_type_) \ - &(const AVCodecHWConfigInternal) { \ -diff -Naur a/media/ffvpx/libavcodec/idctdsp.c b/media/ffvpx/libavcodec/idctdsp.c ---- a/media/ffvpx/libavcodec/idctdsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/idctdsp.c 2023-04-06 12:50:06.972471094 +0200 -@@ -17,6 +17,7 @@ - */ - - #include "config.h" -+#include "config_components.h" - #include "libavutil/attributes.h" - #include "libavutil/common.h" - #include "avcodec.h" -@@ -26,24 +27,12 @@ - #include "simple_idct.h" - #include "xvididct.h" - --av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, -- const uint8_t *src_scantable) -+av_cold void ff_permute_scantable(uint8_t dst[64], const uint8_t src[64], -+ const uint8_t permutation[64]) - { -- int i, end; -- -- st->scantable = src_scantable; -- -- for (i = 0; i < 64; i++) { -- int j = src_scantable[i]; -- st->permutated[i] = permutation[j]; -- } -- -- end = -1; -- for (i = 0; i < 64; i++) { -- int j = st->permutated[i]; -- if (j > end) -- end = j; -- st->raster_end[i] = end; -+ for (int i = 0; i < 64; i++) { -+ int j = src[i]; -+ dst[i] = permutation[j]; - } - } - -@@ -52,10 +41,11 @@ - { - int i; - -- if (ARCH_X86) -- if (ff_init_scantable_permutation_x86(idct_permutation, -- perm_type)) -- return; -+#if ARCH_X86 -+ if (ff_init_scantable_permutation_x86(idct_permutation, -+ perm_type)) -+ return; -+#endif - - switch (perm_type) { - case FF_IDCT_PERM_NONE: -@@ -237,7 +227,7 @@ - - av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx) - { -- const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; -+ av_unused const unsigned high_bit_depth = avctx->bits_per_raw_sample > 8; - - if (avctx->lowres==1) { - c->idct_put = ff_jref_idct4_put; -@@ -287,7 +277,6 @@ - c->perm_type = FF_IDCT_PERM_NONE; - #endif /* CONFIG_FAANIDCT */ - } else { // accurate/default -- /* Be sure FF_IDCT_NONE will select this one, since it uses FF_IDCT_PERM_NONE */ - c->idct_put = ff_simple_idct_put_int16_8bit; - c->idct_add = ff_simple_idct_add_int16_8bit; - c->idct = ff_simple_idct_int16_8bit; -@@ -303,18 +292,23 @@ - if (CONFIG_MPEG4_DECODER && avctx->idct_algo == FF_IDCT_XVID) - ff_xvid_idct_init(c, avctx); - -- if (ARCH_AARCH64) -- ff_idctdsp_init_aarch64(c, avctx, high_bit_depth); -- if (ARCH_ALPHA) -- ff_idctdsp_init_alpha(c, avctx, high_bit_depth); -- if (ARCH_ARM) -- ff_idctdsp_init_arm(c, avctx, high_bit_depth); -- if (ARCH_PPC) -- ff_idctdsp_init_ppc(c, avctx, high_bit_depth); -- if (ARCH_X86) -- ff_idctdsp_init_x86(c, avctx, high_bit_depth); -- if (ARCH_MIPS) -- ff_idctdsp_init_mips(c, avctx, high_bit_depth); -+#if ARCH_AARCH64 -+ ff_idctdsp_init_aarch64(c, avctx, high_bit_depth); -+#elif ARCH_ALPHA -+ ff_idctdsp_init_alpha(c, avctx, high_bit_depth); -+#elif ARCH_ARM -+ ff_idctdsp_init_arm(c, avctx, high_bit_depth); -+#elif ARCH_PPC -+ ff_idctdsp_init_ppc(c, avctx, high_bit_depth); -+#elif ARCH_RISCV -+ ff_idctdsp_init_riscv(c, avctx, high_bit_depth); -+#elif ARCH_X86 -+ ff_idctdsp_init_x86(c, avctx, high_bit_depth); -+#elif ARCH_MIPS -+ ff_idctdsp_init_mips(c, avctx, high_bit_depth); -+#elif ARCH_LOONGARCH -+ ff_idctdsp_init_loongarch(c, avctx, high_bit_depth); -+#endif - - ff_init_scantable_permutation(c->idct_permutation, - c->perm_type); -diff -Naur a/media/ffvpx/libavcodec/idctdsp.h b/media/ffvpx/libavcodec/idctdsp.h ---- a/media/ffvpx/libavcodec/idctdsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/idctdsp.h 2023-04-06 12:50:06.972471094 +0200 -@@ -25,15 +25,6 @@ - - #include "avcodec.h" - --/** -- * Scantable. -- */ --typedef struct ScanTable { -- const uint8_t *scantable; -- uint8_t permutated[64]; -- uint8_t raster_end[64]; --} ScanTable; -- - enum idct_permutation_type { - FF_IDCT_PERM_NONE, - FF_IDCT_PERM_LIBMPEG2, -@@ -43,8 +34,8 @@ - FF_IDCT_PERM_SSE2, - }; - --void ff_init_scantable(uint8_t *permutation, ScanTable *st, -- const uint8_t *src_scantable); -+void ff_permute_scantable(uint8_t dst[64], const uint8_t src[64], -+ const uint8_t permutation[64]); - void ff_init_scantable_permutation(uint8_t *idct_permutation, - enum idct_permutation_type perm_type); - int ff_init_scantable_permutation_x86(uint8_t *idct_permutation, -@@ -114,9 +105,13 @@ - unsigned high_bit_depth); - void ff_idctdsp_init_ppc(IDCTDSPContext *c, AVCodecContext *avctx, - unsigned high_bit_depth); -+void ff_idctdsp_init_riscv(IDCTDSPContext *c, AVCodecContext *avctx, -+ unsigned high_bit_depth); - void ff_idctdsp_init_x86(IDCTDSPContext *c, AVCodecContext *avctx, - unsigned high_bit_depth); - void ff_idctdsp_init_mips(IDCTDSPContext *c, AVCodecContext *avctx, - unsigned high_bit_depth); -+void ff_idctdsp_init_loongarch(IDCTDSPContext *c, AVCodecContext *avctx, -+ unsigned high_bit_depth); - - #endif /* AVCODEC_IDCTDSP_H */ -diff -Naur a/media/ffvpx/libavcodec/imgconvert.c b/media/ffvpx/libavcodec/imgconvert.c ---- a/media/ffvpx/libavcodec/imgconvert.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/imgconvert.c 2023-04-06 12:49:40.253394890 +0200 -@@ -25,46 +25,9 @@ - */ - - #include "avcodec.h" --#include "internal.h" --#include "mathops.h" --#include "libavutil/avassert.h" --#include "libavutil/colorspace.h" --#include "libavutil/common.h" - #include "libavutil/pixdesc.h" --#include "libavutil/internal.h" --#include "libavutil/imgutils.h" -+#include "libavutil/pixfmt.h" - --#if FF_API_GETCHROMA --void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift) --{ -- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); -- av_assert0(desc); -- *h_shift = desc->log2_chroma_w; -- *v_shift = desc->log2_chroma_h; --} --#endif -- --#if FF_API_AVCODEC_PIX_FMT --int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, -- enum AVPixelFormat src_pix_fmt, -- int has_alpha) --{ -- return av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha); --} -- --enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, -- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr) --{ -- return av_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, has_alpha, loss_ptr); --} -- --enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, -- enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr) --{ -- return av_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, has_alpha, loss_ptr); --} -- --#endif - enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list, - enum AVPixelFormat src_pix_fmt, - int has_alpha, int *loss_ptr){ -@@ -83,152 +46,3 @@ - return best; - } - --#if FF_API_AVPICTURE --FF_DISABLE_DEPRECATION_WARNINGS --/* return true if yuv planar */ --static inline int is_yuv_planar(const AVPixFmtDescriptor *desc) --{ -- int i; -- int planes[4] = { 0 }; -- -- if ( desc->flags & AV_PIX_FMT_FLAG_RGB -- || !(desc->flags & AV_PIX_FMT_FLAG_PLANAR)) -- return 0; -- -- /* set the used planes */ -- for (i = 0; i < desc->nb_components; i++) -- planes[desc->comp[i].plane] = 1; -- -- /* if there is an unused plane, the format is not planar */ -- for (i = 0; i < desc->nb_components; i++) -- if (!planes[i]) -- return 0; -- return 1; --} -- --int av_picture_crop(AVPicture *dst, const AVPicture *src, -- enum AVPixelFormat pix_fmt, int top_band, int left_band) --{ -- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); -- int y_shift; -- int x_shift; -- int max_step[4]; -- -- if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB) -- return -1; -- -- y_shift = desc->log2_chroma_h; -- x_shift = desc->log2_chroma_w; -- av_image_fill_max_pixsteps(max_step, NULL, desc); -- -- if (is_yuv_planar(desc)) { -- dst->data[0] = src->data[0] + (top_band * src->linesize[0]) + left_band; -- dst->data[1] = src->data[1] + ((top_band >> y_shift) * src->linesize[1]) + (left_band >> x_shift); -- dst->data[2] = src->data[2] + ((top_band >> y_shift) * src->linesize[2]) + (left_band >> x_shift); -- } else{ -- if(top_band % (1<data[0] = src->data[0] + (top_band * src->linesize[0]) + (left_band * max_step[0]); -- } -- -- dst->linesize[0] = src->linesize[0]; -- dst->linesize[1] = src->linesize[1]; -- dst->linesize[2] = src->linesize[2]; -- return 0; --} -- --int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, -- enum AVPixelFormat pix_fmt, int padtop, int padbottom, int padleft, int padright, -- int *color) --{ -- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); -- uint8_t *optr; -- int y_shift; -- int x_shift; -- int yheight; -- int i, y; -- int max_step[4]; -- -- if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB) -- return -1; -- -- if (!is_yuv_planar(desc)) { -- if (src) -- return -1; //TODO: Not yet implemented -- -- av_image_fill_max_pixsteps(max_step, NULL, desc); -- -- if (padtop || padleft) { -- memset(dst->data[0], color[0], -- dst->linesize[0] * padtop + (padleft * max_step[0])); -- } -- -- if (padleft || padright) { -- optr = dst->data[0] + dst->linesize[0] * padtop + -- (dst->linesize[0] - (padright * max_step[0])); -- yheight = height - 1 - (padtop + padbottom); -- for (y = 0; y < yheight; y++) { -- memset(optr, color[0], (padleft + padright) * max_step[0]); -- optr += dst->linesize[0]; -- } -- } -- -- if (padbottom || padright) { -- optr = dst->data[0] + dst->linesize[0] * (height - padbottom) - -- (padright * max_step[0]); -- memset(optr, color[0], dst->linesize[0] * padbottom + -- (padright * max_step[0])); -- } -- -- return 0; -- } -- -- for (i = 0; i < 3; i++) { -- x_shift = i ? desc->log2_chroma_w : 0; -- y_shift = i ? desc->log2_chroma_h : 0; -- -- if (padtop || padleft) { -- memset(dst->data[i], color[i], -- dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift)); -- } -- -- if (padleft || padright) { -- optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + -- (dst->linesize[i] - (padright >> x_shift)); -- yheight = (height - 1 - (padtop + padbottom)) >> y_shift; -- for (y = 0; y < yheight; y++) { -- memset(optr, color[i], (padleft + padright) >> x_shift); -- optr += dst->linesize[i]; -- } -- } -- -- if (src) { /* first line */ -- uint8_t *iptr = src->data[i]; -- optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + -- (padleft >> x_shift); -- memcpy(optr, iptr, (width - padleft - padright) >> x_shift); -- iptr += src->linesize[i]; -- optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) + -- (dst->linesize[i] - (padright >> x_shift)); -- yheight = (height - 1 - (padtop + padbottom)) >> y_shift; -- for (y = 0; y < yheight; y++) { -- memset(optr, color[i], (padleft + padright) >> x_shift); -- memcpy(optr + ((padleft + padright) >> x_shift), iptr, -- (width - padleft - padright) >> x_shift); -- iptr += src->linesize[i]; -- optr += dst->linesize[i]; -- } -- } -- -- if (padbottom || padright) { -- optr = dst->data[i] + dst->linesize[i] * -- ((height - padbottom) >> y_shift) - (padright >> x_shift); -- memset(optr, color[i],dst->linesize[i] * -- (padbottom >> y_shift) + (padright >> x_shift)); -- } -- } -- -- return 0; --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif /* FF_API_AVPICTURE */ -diff -Naur a/media/ffvpx/libavcodec/internal.h b/media/ffvpx/libavcodec/internal.h ---- a/media/ffvpx/libavcodec/internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/internal.h 2023-04-06 12:50:24.492176543 +0200 -@@ -28,86 +28,17 @@ - - #include "libavutil/buffer.h" - #include "libavutil/channel_layout.h" --#include "libavutil/fifo.h" - #include "libavutil/mathematics.h" - #include "libavutil/pixfmt.h" - #include "avcodec.h" - #include "config.h" - --/** -- * The codec does not modify any global variables in the init function, -- * allowing to call the init function without locking any global mutexes. -- */ --#define FF_CODEC_CAP_INIT_THREADSAFE (1 << 0) --/** -- * The codec allows calling the close function for deallocation even if -- * the init function returned a failure. Without this capability flag, a -- * codec does such cleanup internally when returning failures from the -- * init function and does not expect the close function to be called at -- * all. -- */ --#define FF_CODEC_CAP_INIT_CLEANUP (1 << 1) --/** -- * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set -- * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite -- * this field. If it's unset, decode.c tries to guess the pkt_dts field -- * from the input AVPacket. -- */ --#define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2) --/** -- * The decoder extracts and fills its parameters even if the frame is -- * skipped due to the skip_frame setting. -- */ --#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3) --/** -- * The decoder sets the cropping fields in the output frames manually. -- * If this cap is set, the generic code will initialize output frame -- * dimensions to coded rather than display values. -- */ --#define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4) --/** -- * Codec initializes slice-based threading with a main function -- */ --#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5) --/* -- * The codec supports frame threading and has inter-frame dependencies, so it -- * uses ff_thread_report/await_progress(). -- */ --#define FF_CODEC_CAP_ALLOCATE_PROGRESS (1 << 6) --/** -- * Codec handles avctx->thread_count == 0 (auto) internally. -- */ --#define FF_CODEC_CAP_AUTO_THREADS (1 << 7) --/** -- * Codec handles output frame properties internally instead of letting the -- * internal logic derive them from AVCodecInternal.last_pkt_props. -- */ --#define FF_CODEC_CAP_SETS_FRAME_PROPS (1 << 8) -- --/** -- * AVCodec.codec_tags termination value -- */ --#define FF_CODEC_TAGS_END -1 -- -- --#ifdef TRACE --# define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__) --#else --# define ff_tlog(ctx, ...) do { } while(0) -+#if CONFIG_LCMS2 -+# include "fflcms2.h" - #endif - -- --#define FF_DEFAULT_QUANT_BIAS 999999 -- --#define FF_QSCALE_TYPE_MPEG1 0 --#define FF_QSCALE_TYPE_MPEG2 1 --#define FF_QSCALE_TYPE_H264 2 --#define FF_QSCALE_TYPE_VP56 3 -- - #define FF_SANE_NB_CHANNELS 512U - --#define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1) -- - #if HAVE_SIMD_ALIGN_64 - # define STRIDE_ALIGN 64 /* AVX-512 */ - #elif HAVE_SIMD_ALIGN_32 -@@ -118,46 +49,45 @@ - # define STRIDE_ALIGN 8 - #endif - --typedef struct DecodeSimpleContext { -- AVPacket *in_pkt; --} DecodeSimpleContext; -- --typedef struct EncodeSimpleContext { -- AVFrame *in_frame; --} EncodeSimpleContext; -- - typedef struct AVCodecInternal { - /** -- * Whether the parent AVCodecContext is a copy of the context which had -- * init() called on it. -- * This is used by multithreading - shared tables and picture pointers -- * should be freed from the original context only. -+ * When using frame-threaded decoding, this field is set for the first -+ * worker thread (e.g. to decode extradata just once). - */ - int is_copy; - - /** -- * An audio frame with less than required samples has been submitted and -- * padded with silence. Reject all subsequent frames. -+ * An audio frame with less than required samples has been submitted (and -+ * potentially padded with silence). Reject all subsequent frames. - */ - int last_audio_frame; - --#if FF_API_OLD_ENCDEC -- AVFrame *to_free; --#endif -+ /** -+ * Audio encoders can set this flag during init to indicate that they -+ * want the small last frame to be padded to a multiple of pad_samples. -+ */ -+ int pad_samples; - - AVBufferRef *pool; - - void *thread_ctx; - -- DecodeSimpleContext ds; -- AVBSFContext *bsf; -+ /** -+ * This packet is used to hold the packet given to decoders -+ * implementing the .decode API; it is unused by the generic -+ * code for decoders implementing the .receive_frame API and -+ * may be freely used (but not freed) by them with the caveat -+ * that the packet will be unreferenced generically in -+ * avcodec_flush_buffers(). -+ */ -+ AVPacket *in_pkt; -+ struct AVBSFContext *bsf; - - /** - * Properties (timestamps+side data) extracted from the last packet passed - * for decoding. - */ - AVPacket *last_pkt_props; -- AVFifoBuffer *pkt_props; - - /** - * temporary buffer used for encoders to store their bitstream -@@ -165,9 +95,36 @@ - uint8_t *byte_buffer; - unsigned int byte_buffer_size; - -+ /** -+ * This is set to AV_PKT_FLAG_KEY for encoders that encode intra-only -+ * formats (i.e. whose codec descriptor has AV_CODEC_PROP_INTRA_ONLY set). -+ * This is used to set said flag generically for said encoders. -+ */ -+ int intra_only_flag; -+ - void *frame_thread_encoder; - -- EncodeSimpleContext es; -+ /** -+ * The input frame is stored here for encoders implementing the simple -+ * encode API. -+ * -+ * Not allocated in other cases. -+ */ -+ AVFrame *in_frame; -+ -+ /** -+ * When the AV_CODEC_FLAG_RECON_FRAME flag is used. the encoder should store -+ * here the reconstructed frame corresponding to the last returned packet. -+ * -+ * Not allocated in other cases. -+ */ -+ AVFrame *recon_frame; -+ -+ /** -+ * If this is set, then FFCodec->close (if existing) needs to be called -+ * for the parent AVCodecContext. -+ */ -+ int needs_close; - - /** - * Number of audio samples to skip at the start of the next decoded frame -@@ -185,28 +142,14 @@ - int draining; - - /** -- * buffers for using new encode/decode API through legacy API -+ * Temporary buffers for newly received or not yet output packets/frames. - */ - AVPacket *buffer_pkt; - AVFrame *buffer_frame; - int draining_done; - --#if FF_API_OLD_ENCDEC -- int compat_decode_warned; -- /* this variable is set by the decoder internals to signal to the old -- * API compat wrappers the amount of data consumed from the last packet */ -- size_t compat_decode_consumed; -- /* when a partial packet has been consumed, this stores the remaining size -- * of the packet (that should be submitted in the next decode call */ -- size_t compat_decode_partial_size; -- AVFrame *compat_decode_frame; -- AVPacket *compat_encode_packet; --#endif -- - int showed_multi_packet_warning; - -- int skip_samples_multiplier; -- - /* to prevent infinite loop on errors when draining */ - int nb_draining_errors; - -@@ -215,16 +158,12 @@ - int initial_format; - int initial_width, initial_height; - int initial_sample_rate; -- int initial_channels; -- uint64_t initial_channel_layout; --} AVCodecInternal; -- --struct AVCodecDefault { -- const uint8_t *key; -- const uint8_t *value; --}; -+ AVChannelLayout initial_ch_layout; - --extern const uint8_t ff_log2_run[41]; -+#if CONFIG_LCMS2 -+ FFIccContext icc; /* used to read and write embedded ICC profiles */ -+#endif -+} AVCodecInternal; - - /** - * Return the index into tab at which {a,b} match elements {[0],[1]} of tab. -@@ -232,7 +171,7 @@ - */ - int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); - --unsigned int avpriv_toupper4(unsigned int x); -+unsigned int ff_toupper4(unsigned int x); - - void ff_color_frame(AVFrame *frame, const int color[4]); - -@@ -244,46 +183,6 @@ - #define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE) - - /** -- * Check AVPacket size and/or allocate data. -- * -- * Encoders supporting AVCodec.encode2() can use this as a convenience to -- * ensure the output packet data is large enough, whether provided by the user -- * or allocated in this function. -- * -- * @param avctx the AVCodecContext of the encoder -- * @param avpkt the AVPacket -- * If avpkt->data is already set, avpkt->size is checked -- * to ensure it is large enough. -- * If avpkt->data is NULL, a new buffer is allocated. -- * avpkt->size is set to the specified size. -- * All other AVPacket fields will be reset with av_init_packet(). -- * @param size the minimum required packet size -- * @param min_size This is a hint to the allocation algorithm, which indicates -- * to what minimal size the caller might later shrink the packet -- * to. Encoders often allocate packets which are larger than the -- * amount of data that is written into them as the exact amount is -- * not known at the time of allocation. min_size represents the -- * size a packet might be shrunk to by the caller. Can be set to -- * 0. setting this roughly correctly allows the allocation code -- * to choose between several allocation strategies to improve -- * speed slightly. -- * @return non negative on success, negative error code on failure -- */ --int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size); -- --/** -- * Rescale from sample rate to AVCodecContext.time_base. -- */ --static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, -- int64_t samples) --{ -- if(samples == AV_NOPTS_VALUE) -- return AV_NOPTS_VALUE; -- return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate }, -- avctx->time_base); --} -- --/** - * 2^(x) for integer x - * @return correctly rounded float - */ -@@ -302,62 +201,11 @@ - return 0; - } - --/** -- * Get a buffer for a frame. This is a wrapper around -- * AVCodecContext.get_buffer() and should be used instead calling get_buffer() -- * directly. -- */ --int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); -- --#define FF_REGET_BUFFER_FLAG_READONLY 1 ///< the returned buffer does not need to be writable --/** -- * Identical in function to ff_get_buffer(), except it reuses the existing buffer -- * if available. -- */ --int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags); -- --int ff_thread_can_start_frame(AVCodecContext *avctx); -- - int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx); - --const uint8_t *avpriv_find_start_code(const uint8_t *p, -- const uint8_t *end, -- uint32_t *state); -- - int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec); - - /** -- * Check that the provided frame dimensions are valid and set them on the codec -- * context. -- */ --int ff_set_dimensions(AVCodecContext *s, int width, int height); -- --/** -- * Check that the provided sample aspect ratio is valid and set it on the codec -- * context. -- */ --int ff_set_sar(AVCodecContext *avctx, AVRational sar); -- --/** -- * Add or update AV_FRAME_DATA_MATRIXENCODING side data. -- */ --int ff_side_data_update_matrix_encoding(AVFrame *frame, -- enum AVMatrixEncoding matrix_encoding); -- --/** -- * Select the (possibly hardware accelerated) pixel format. -- * This is a wrapper around AVCodecContext.get_format() and should be used -- * instead of calling get_format() directly. -- * -- * The list of pixel formats must contain at least one valid entry, and is -- * terminated with AV_PIX_FMT_NONE. If it is possible to decode to software, -- * the last entry in the list must be the most accurate software format. -- * If it is not possible to decode to software, AVCodecContext.sw_pix_fmt -- * must be set before calling this function. -- */ --int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); -- --/** - * Add a CPB properties side data to an encoding context. - */ - AVCPBProperties *ff_add_cpb_side_data(AVCodecContext *avctx); -@@ -396,12 +244,4 @@ - int ff_int_from_list_or_default(void *ctx, const char * val_name, int val, - const int * array_valid_values, int default_value); - --void ff_dvdsub_parse_palette(uint32_t *palette, const char *p); -- --#if defined(_WIN32) && CONFIG_SHARED && !defined(BUILDING_avcodec) --# define av_export_avcodec __declspec(dllimport) --#else --# define av_export_avcodec --#endif -- - #endif /* AVCODEC_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavcodec/jfdctfst.c b/media/ffvpx/libavcodec/jfdctfst.c ---- a/media/ffvpx/libavcodec/jfdctfst.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/jfdctfst.c 2023-04-06 12:49:40.253394890 +0200 -@@ -66,9 +66,8 @@ - * Independent JPEG Group's fast AAN dct. - */ - --#include --#include --#include "libavutil/common.h" -+#include -+#include "libavutil/attributes.h" - #include "dct.h" - - #define DCTSIZE 8 -diff -Naur a/media/ffvpx/libavcodec/jrevdct.c b/media/ffvpx/libavcodec/jrevdct.c ---- a/media/ffvpx/libavcodec/jrevdct.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/jrevdct.c 2023-04-06 12:50:06.972471094 +0200 -@@ -62,7 +62,9 @@ - * Independent JPEG Group's LLM idct. - */ - --#include "libavutil/common.h" -+#include -+#include -+ - #include "libavutil/intreadwrite.h" - - #include "dct.h" -@@ -253,7 +255,7 @@ - if (d0) { - /* Compute a 32 bit value to assign. */ - int16_t dcval = (int16_t) (d0 * (1 << PASS1_BITS)); -- register int v = (dcval & 0xffff) | ((dcval * (1 << 16)) & 0xffff0000); -+ register unsigned v = (dcval & 0xffff) | ((uint32_t)dcval << 16); - - AV_WN32A(&idataptr[ 0], v); - AV_WN32A(&idataptr[ 4], v); -@@ -986,8 +988,8 @@ - /* AC terms all zero */ - if (d0) { - /* Compute a 32 bit value to assign. */ -- int16_t dcval = (int16_t) (d0 << PASS1_BITS); -- register int v = (dcval & 0xffff) | ((dcval << 16) & 0xffff0000); -+ int16_t dcval = (int16_t) (d0 * (1 << PASS1_BITS)); -+ register unsigned v = (dcval & 0xffff) | ((uint32_t)dcval << 16); - - AV_WN32A(&idataptr[0], v); - AV_WN32A(&idataptr[4], v); -@@ -1006,8 +1008,8 @@ - tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); - tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); - -- tmp0 = (d0 + d4) << CONST_BITS; -- tmp1 = (d0 - d4) << CONST_BITS; -+ tmp0 = (d0 + d4) * (1 << CONST_BITS); -+ tmp1 = (d0 - d4) * (1 << CONST_BITS); - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; -@@ -1018,8 +1020,8 @@ - tmp2 = MULTIPLY(-d6, FIX_1_306562965); - tmp3 = MULTIPLY(d6, FIX_0_541196100); - -- tmp0 = (d0 + d4) << CONST_BITS; -- tmp1 = (d0 - d4) << CONST_BITS; -+ tmp0 = (d0 + d4) * (1 << CONST_BITS); -+ tmp1 = (d0 - d4) * (1 << CONST_BITS); - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; -@@ -1032,8 +1034,8 @@ - tmp2 = MULTIPLY(d2, FIX_0_541196100); - tmp3 = MULTIPLY(d2, FIX_1_306562965); - -- tmp0 = (d0 + d4) << CONST_BITS; -- tmp1 = (d0 - d4) << CONST_BITS; -+ tmp0 = (d0 + d4) * (1 << CONST_BITS); -+ tmp1 = (d0 - d4) * (1 << CONST_BITS); - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; -@@ -1041,8 +1043,8 @@ - tmp12 = tmp1 - tmp2; - } else { - /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ -- tmp10 = tmp13 = (d0 + d4) << CONST_BITS; -- tmp11 = tmp12 = (d0 - d4) << CONST_BITS; -+ tmp10 = tmp13 = (d0 + d4) * (1 << CONST_BITS); -+ tmp11 = tmp12 = (d0 - d4) * (1 << CONST_BITS); - } - } - -@@ -1084,8 +1086,8 @@ - tmp2 = z1 + MULTIPLY(-d6, FIX_1_847759065); - tmp3 = z1 + MULTIPLY(d2, FIX_0_765366865); - -- tmp0 = (d0 + d4) << CONST_BITS; -- tmp1 = (d0 - d4) << CONST_BITS; -+ tmp0 = (d0 + d4) * (1 << CONST_BITS); -+ tmp1 = (d0 - d4) * (1 << CONST_BITS); - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; -@@ -1096,8 +1098,8 @@ - tmp2 = MULTIPLY(-d6, FIX_1_306562965); - tmp3 = MULTIPLY(d6, FIX_0_541196100); - -- tmp0 = (d0 + d4) << CONST_BITS; -- tmp1 = (d0 - d4) << CONST_BITS; -+ tmp0 = (d0 + d4) * (1 << CONST_BITS); -+ tmp1 = (d0 - d4) * (1 << CONST_BITS); - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; -@@ -1110,8 +1112,8 @@ - tmp2 = MULTIPLY(d2, FIX_0_541196100); - tmp3 = MULTIPLY(d2, FIX_1_306562965); - -- tmp0 = (d0 + d4) << CONST_BITS; -- tmp1 = (d0 - d4) << CONST_BITS; -+ tmp0 = (d0 + d4) * (1 << CONST_BITS); -+ tmp1 = (d0 - d4) * (1 << CONST_BITS); - - tmp10 = tmp0 + tmp3; - tmp13 = tmp0 - tmp3; -@@ -1119,8 +1121,8 @@ - tmp12 = tmp1 - tmp2; - } else { - /* d0 != 0, d2 == 0, d4 != 0, d6 == 0 */ -- tmp10 = tmp13 = (d0 + d4) << CONST_BITS; -- tmp11 = tmp12 = (d0 - d4) << CONST_BITS; -+ tmp10 = tmp13 = (d0 + d4) * (1 << CONST_BITS); -+ tmp11 = tmp12 = (d0 - d4) * (1 << CONST_BITS); - } - } - -diff -Naur a/media/ffvpx/libavcodec/libdav1d.c b/media/ffvpx/libavcodec/libdav1d.c ---- a/media/ffvpx/libavcodec/libdav1d.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/libdav1d.c 2023-04-06 12:50:24.492176543 +0200 -@@ -19,9 +19,10 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "dav1d/dav1d.h" -+#include - - #include "libavutil/avassert.h" -+#include "libavutil/cpu.h" - #include "libavutil/film_grain_params.h" - #include "libavutil/mastering_display_metadata.h" - #include "libavutil/imgutils.h" -@@ -30,6 +31,7 @@ - #include "atsc_a53.h" - #include "avcodec.h" - #include "bytestream.h" -+#include "codec_internal.h" - #include "decode.h" - #include "internal.h" - -@@ -45,6 +47,7 @@ - Dav1dData data; - int tile_threads; - int frame_threads; -+ int max_frame_delay; - int apply_grain; - int operating_point; - int all_layers; -@@ -123,11 +126,94 @@ - av_buffer_unref(&buf); - } - -+static void libdav1d_init_params(AVCodecContext *c, const Dav1dSequenceHeader *seq) -+{ -+ c->profile = seq->profile; -+ c->level = ((seq->operating_points[0].major_level - 2) << 2) -+ | seq->operating_points[0].minor_level; -+ -+ switch (seq->chr) { -+ case DAV1D_CHR_VERTICAL: -+ c->chroma_sample_location = AVCHROMA_LOC_LEFT; -+ break; -+ case DAV1D_CHR_COLOCATED: -+ c->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; -+ break; -+ } -+ c->colorspace = (enum AVColorSpace) seq->mtrx; -+ c->color_primaries = (enum AVColorPrimaries) seq->pri; -+ c->color_trc = (enum AVColorTransferCharacteristic) seq->trc; -+ c->color_range = seq->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; -+ -+ if (seq->layout == DAV1D_PIXEL_LAYOUT_I444 && -+ seq->mtrx == DAV1D_MC_IDENTITY && -+ seq->pri == DAV1D_COLOR_PRI_BT709 && -+ seq->trc == DAV1D_TRC_SRGB) -+ c->pix_fmt = pix_fmt_rgb[seq->hbd]; -+ else -+ c->pix_fmt = pix_fmt[seq->layout][seq->hbd]; -+ -+ if (seq->num_units_in_tick && seq->time_scale) { -+ av_reduce(&c->framerate.den, &c->framerate.num, -+ seq->num_units_in_tick, seq->time_scale, INT_MAX); -+ if (seq->equal_picture_interval) -+ c->ticks_per_frame = seq->num_ticks_per_picture; -+ } -+ -+ if (seq->film_grain_present) -+ c->properties |= FF_CODEC_PROPERTY_FILM_GRAIN; -+ else -+ c->properties &= ~FF_CODEC_PROPERTY_FILM_GRAIN; -+} -+ -+static av_cold int libdav1d_parse_extradata(AVCodecContext *c) -+{ -+ Dav1dSequenceHeader seq; -+ size_t offset = 0; -+ int res; -+ -+ if (!c->extradata || c->extradata_size <= 0) -+ return 0; -+ -+ if (c->extradata[0] & 0x80) { -+ int version = c->extradata[0] & 0x7F; -+ -+ if (version != 1 || c->extradata_size < 4) { -+ int explode = !!(c->err_recognition & AV_EF_EXPLODE); -+ av_log(c, explode ? AV_LOG_ERROR : AV_LOG_WARNING, -+ "Error decoding extradata\n"); -+ return explode ? AVERROR_INVALIDDATA : 0; -+ } -+ -+ // Do nothing if there are no configOBUs to parse -+ if (c->extradata_size == 4) -+ return 0; -+ -+ offset = 4; -+ } -+ -+ res = dav1d_parse_sequence_header(&seq, c->extradata + offset, -+ c->extradata_size - offset); -+ if (res < 0) -+ return 0; // Assume no seqhdr OBUs are present -+ -+ libdav1d_init_params(c, &seq); -+ res = ff_set_dimensions(c, seq.max_width, seq.max_height); -+ if (res < 0) -+ return res; -+ -+ return 0; -+} -+ - static av_cold int libdav1d_init(AVCodecContext *c) - { - Libdav1dContext *dav1d = c->priv_data; - Dav1dSettings s; -+#if FF_DAV1D_VERSION_AT_LEAST(6,0) -+ int threads = c->thread_count; -+#else - int threads = (c->thread_count ? c->thread_count : av_cpu_count()) * 3 / 2; -+#endif - int res; - - av_log(c, AV_LOG_INFO, "libdav1d %s\n", dav1d_version()); -@@ -141,19 +227,24 @@ - s.frame_size_limit = c->max_pixels; - if (dav1d->apply_grain >= 0) - s.apply_grain = dav1d->apply_grain; -- else if (c->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) -- s.apply_grain = 0; -+ else -+ s.apply_grain = !(c->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN); - - s.all_layers = dav1d->all_layers; - if (dav1d->operating_point >= 0) - s.operating_point = dav1d->operating_point; -+#if FF_DAV1D_VERSION_AT_LEAST(6,2) -+ s.strict_std_compliance = c->strict_std_compliance > 0; -+#endif - - #if FF_DAV1D_VERSION_AT_LEAST(6,0) - if (dav1d->frame_threads || dav1d->tile_threads) - s.n_threads = FFMAX(dav1d->frame_threads, dav1d->tile_threads); - else - s.n_threads = FFMIN(threads, DAV1D_MAX_THREADS); -- s.max_frame_delay = (c->flags & AV_CODEC_FLAG_LOW_DELAY) ? 1 : s.n_threads; -+ if (dav1d->max_frame_delay > 0 && (c->flags & AV_CODEC_FLAG_LOW_DELAY)) -+ av_log(c, AV_LOG_WARNING, "Low delay mode requested, forcing max_frame_delay 1\n"); -+ s.max_frame_delay = (c->flags & AV_CODEC_FLAG_LOW_DELAY) ? 1 : dav1d->max_frame_delay; - av_log(c, AV_LOG_DEBUG, "Using %d threads, %d max_frame_delay\n", - s.n_threads, s.max_frame_delay); - #else -@@ -163,10 +254,25 @@ - s.n_frame_threads = dav1d->frame_threads - ? dav1d->frame_threads - : FFMIN(ceil(threads / s.n_tile_threads), DAV1D_MAX_FRAME_THREADS); -+ if (dav1d->max_frame_delay > 0) -+ s.n_frame_threads = FFMIN(s.n_frame_threads, dav1d->max_frame_delay); - av_log(c, AV_LOG_DEBUG, "Using %d frame threads, %d tile threads\n", - s.n_frame_threads, s.n_tile_threads); - #endif - -+#if FF_DAV1D_VERSION_AT_LEAST(6,8) -+ if (c->skip_frame >= AVDISCARD_NONKEY) -+ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_KEY; -+ else if (c->skip_frame >= AVDISCARD_NONINTRA) -+ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_INTRA; -+ else if (c->skip_frame >= AVDISCARD_NONREF) -+ s.decode_frame_type = DAV1D_DECODEFRAMETYPE_REFERENCE; -+#endif -+ -+ res = libdav1d_parse_extradata(c); -+ if (res < 0) -+ return res; -+ - res = dav1d_open(&dav1d->c, &s); - if (res < 0) - return AVERROR(ENOMEM); -@@ -182,6 +288,13 @@ - dav1d_flush(dav1d->c); - } - -+typedef struct OpaqueData { -+ void *pkt_orig_opaque; -+#if FF_API_REORDERED_OPAQUE -+ int64_t reordered_opaque; -+#endif -+} OpaqueData; -+ - static void libdav1d_data_free(const uint8_t *data, void *opaque) { - AVBufferRef *buf = opaque; - -@@ -189,8 +302,10 @@ - } - - static void libdav1d_user_data_free(const uint8_t *data, void *opaque) { -+ AVPacket *pkt = opaque; - av_assert0(data == opaque); -- av_free(opaque); -+ av_free(pkt->opaque); -+ av_packet_free(&pkt); - } - - static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) -@@ -198,45 +313,68 @@ - Libdav1dContext *dav1d = c->priv_data; - Dav1dData *data = &dav1d->data; - Dav1dPicture pic = { 0 }, *p = &pic; -+ AVPacket *pkt; -+ OpaqueData *od = NULL; -+#if FF_DAV1D_VERSION_AT_LEAST(5,1) -+ enum Dav1dEventFlags event_flags = 0; -+#endif - int res; - - if (!data->sz) { -- AVPacket pkt = { 0 }; -+ pkt = av_packet_alloc(); -+ -+ if (!pkt) -+ return AVERROR(ENOMEM); - -- res = ff_decode_get_packet(c, &pkt); -- if (res < 0 && res != AVERROR_EOF) -+ res = ff_decode_get_packet(c, pkt); -+ if (res < 0 && res != AVERROR_EOF) { -+ av_packet_free(&pkt); - return res; -+ } - -- if (pkt.size) { -- res = dav1d_data_wrap(data, pkt.data, pkt.size, libdav1d_data_free, pkt.buf); -+ if (pkt->size) { -+ res = dav1d_data_wrap(data, pkt->data, pkt->size, -+ libdav1d_data_free, pkt->buf); - if (res < 0) { -- av_packet_unref(&pkt); -+ av_packet_free(&pkt); - return res; - } - -- data->m.timestamp = pkt.pts; -- data->m.offset = pkt.pos; -- data->m.duration = pkt.duration; -- -- pkt.buf = NULL; -- av_packet_unref(&pkt); -- -- if (c->reordered_opaque != AV_NOPTS_VALUE) { -- uint8_t *reordered_opaque = av_malloc(sizeof(c->reordered_opaque)); -- if (!reordered_opaque) { -+ pkt->buf = NULL; -+ -+FF_DISABLE_DEPRECATION_WARNINGS -+ if ( -+#if FF_API_REORDERED_OPAQUE -+ c->reordered_opaque != AV_NOPTS_VALUE || -+#endif -+ (pkt->opaque && (c->flags & AV_CODEC_FLAG_COPY_OPAQUE))) { -+ od = av_mallocz(sizeof(*od)); -+ if (!od) { -+ av_packet_free(&pkt); - dav1d_data_unref(data); - return AVERROR(ENOMEM); - } -+ od->pkt_orig_opaque = pkt->opaque; -+#if FF_API_REORDERED_OPAQUE -+ od->reordered_opaque = c->reordered_opaque; -+#endif -+FF_ENABLE_DEPRECATION_WARNINGS -+ } -+ pkt->opaque = od; - -- memcpy(reordered_opaque, &c->reordered_opaque, sizeof(c->reordered_opaque)); -- res = dav1d_data_wrap_user_data(data, reordered_opaque, -- libdav1d_user_data_free, reordered_opaque); -- if (res < 0) { -- av_free(reordered_opaque); -- dav1d_data_unref(data); -- return res; -- } -+ res = dav1d_data_wrap_user_data(data, (const uint8_t *)pkt, -+ libdav1d_user_data_free, pkt); -+ if (res < 0) { -+ av_free(pkt->opaque); -+ av_packet_free(&pkt); -+ dav1d_data_unref(data); -+ return res; - } -+ pkt = NULL; -+ } else { -+ av_packet_free(&pkt); -+ if (res >= 0) -+ return AVERROR(EAGAIN); - } - } - -@@ -244,8 +382,10 @@ - if (res < 0) { - if (res == AVERROR(EINVAL)) - res = AVERROR_INVALIDDATA; -- if (res != AVERROR(EAGAIN)) -+ if (res != AVERROR(EAGAIN)) { -+ dav1d_data_unref(data); - return res; -+ } - } - - res = dav1d_get_picture(dav1d->c, p); -@@ -274,9 +414,16 @@ - frame->linesize[1] = p->stride[1]; - frame->linesize[2] = p->stride[1]; - -- c->profile = p->seq_hdr->profile; -- c->level = ((p->seq_hdr->operating_points[0].major_level - 2) << 2) -- | p->seq_hdr->operating_points[0].minor_level; -+#if FF_DAV1D_VERSION_AT_LEAST(5,1) -+ dav1d_get_event_flags(dav1d->c, &event_flags); -+ if (c->pix_fmt == AV_PIX_FMT_NONE || -+ event_flags & DAV1D_EVENT_FLAG_NEW_SEQUENCE) -+#endif -+ libdav1d_init_params(c, p->seq_hdr); -+ res = ff_decode_frame_props(c, frame); -+ if (res < 0) -+ goto fail; -+ - frame->width = p->p.w; - frame->height = p->p.h; - if (c->width != p->p.w || c->height != p->p.h) { -@@ -292,50 +439,29 @@ - INT_MAX); - ff_set_sar(c, frame->sample_aspect_ratio); - -- switch (p->seq_hdr->chr) { -- case DAV1D_CHR_VERTICAL: -- frame->chroma_location = c->chroma_sample_location = AVCHROMA_LOC_LEFT; -- break; -- case DAV1D_CHR_COLOCATED: -- frame->chroma_location = c->chroma_sample_location = AVCHROMA_LOC_TOPLEFT; -- break; -- } -- frame->colorspace = c->colorspace = (enum AVColorSpace) p->seq_hdr->mtrx; -- frame->color_primaries = c->color_primaries = (enum AVColorPrimaries) p->seq_hdr->pri; -- frame->color_trc = c->color_trc = (enum AVColorTransferCharacteristic) p->seq_hdr->trc; -- frame->color_range = c->color_range = p->seq_hdr->color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; -- -- if (p->p.layout == DAV1D_PIXEL_LAYOUT_I444 && -- p->seq_hdr->mtrx == DAV1D_MC_IDENTITY && -- p->seq_hdr->pri == DAV1D_COLOR_PRI_BT709 && -- p->seq_hdr->trc == DAV1D_TRC_SRGB) -- frame->format = c->pix_fmt = pix_fmt_rgb[p->seq_hdr->hbd]; -- else -- frame->format = c->pix_fmt = pix_fmt[p->p.layout][p->seq_hdr->hbd]; -- -- if (p->m.user_data.data) -- memcpy(&frame->reordered_opaque, p->m.user_data.data, sizeof(frame->reordered_opaque)); -+ pkt = (AVPacket *)p->m.user_data.data; -+ od = pkt->opaque; -+#if FF_API_REORDERED_OPAQUE -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (od && od->reordered_opaque != AV_NOPTS_VALUE) -+ frame->reordered_opaque = od->reordered_opaque; - else - frame->reordered_opaque = AV_NOPTS_VALUE; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - -- if (p->seq_hdr->num_units_in_tick && p->seq_hdr->time_scale) { -- av_reduce(&c->framerate.den, &c->framerate.num, -- p->seq_hdr->num_units_in_tick, p->seq_hdr->time_scale, INT_MAX); -- if (p->seq_hdr->equal_picture_interval) -- c->ticks_per_frame = p->seq_hdr->num_ticks_per_picture; -- } -+ // restore the original user opaque value for -+ // ff_decode_frame_props_from_pkt() -+ pkt->opaque = od ? od->pkt_orig_opaque : NULL; -+ av_freep(&od); - - // match timestamps and packet size -- frame->pts = p->m.timestamp; --#if FF_API_PKT_PTS --FF_DISABLE_DEPRECATION_WARNINGS -- frame->pkt_pts = p->m.timestamp; --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- frame->pkt_dts = p->m.timestamp; -- frame->pkt_pos = p->m.offset; -- frame->pkt_size = p->m.size; -- frame->pkt_duration = p->m.duration; -+ res = ff_decode_frame_props_from_pkt(c, frame, pkt); -+ pkt->opaque = NULL; -+ if (res < 0) -+ goto fail; -+ -+ frame->pkt_dts = pkt->pts; - frame->key_frame = p->frame_hdr->frame_type == DAV1D_FRAME_TYPE_KEY; - - switch (p->frame_hdr->frame_type) { -@@ -475,12 +601,16 @@ - #ifndef DAV1D_MAX_TILE_THREADS - #define DAV1D_MAX_TILE_THREADS DAV1D_MAX_THREADS - #endif -+#ifndef DAV1D_MAX_FRAME_DELAY -+#define DAV1D_MAX_FRAME_DELAY DAV1D_MAX_FRAME_THREADS -+#endif - - #define OFFSET(x) offsetof(Libdav1dContext, x) - #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM - static const AVOption libdav1d_options[] = { -- { "tilethreads", "Tile threads", OFFSET(tile_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_TILE_THREADS, VD }, -- { "framethreads", "Frame threads", OFFSET(frame_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_THREADS, VD }, -+ { "tilethreads", "Tile threads", OFFSET(tile_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_TILE_THREADS, VD | AV_OPT_FLAG_DEPRECATED }, -+ { "framethreads", "Frame threads", OFFSET(frame_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_THREADS, VD | AV_OPT_FLAG_DEPRECATED }, -+ { "max_frame_delay", "Max frame delay", OFFSET(max_frame_delay), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, DAV1D_MAX_FRAME_DELAY, VD }, - { "filmgrain", "Apply Film Grain", OFFSET(apply_grain), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VD | AV_OPT_FLAG_DEPRECATED }, - { "oppoint", "Select an operating point of the scalable bitstream", OFFSET(operating_point), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 31, VD }, - { "alllayers", "Output all spatial layers", OFFSET(all_layers), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VD }, -@@ -494,19 +624,19 @@ - .version = LIBAVUTIL_VERSION_INT, - }; - --AVCodec ff_libdav1d_decoder = { -- .name = "libdav1d", -- .long_name = NULL_IF_CONFIG_SMALL("dav1d AV1 decoder by VideoLAN"), -- .type = AVMEDIA_TYPE_VIDEO, -- .id = AV_CODEC_ID_AV1, -+const FFCodec ff_libdav1d_decoder = { -+ .p.name = "libdav1d", -+ CODEC_LONG_NAME("dav1d AV1 decoder by VideoLAN"), -+ .p.type = AVMEDIA_TYPE_VIDEO, -+ .p.id = AV_CODEC_ID_AV1, - .priv_data_size = sizeof(Libdav1dContext), - .init = libdav1d_init, - .close = libdav1d_close, - .flush = libdav1d_flush, -- .receive_frame = libdav1d_receive_frame, -- .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_SETS_PKT_DTS | -+ FF_CODEC_RECEIVE_FRAME_CB(libdav1d_receive_frame), -+ .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS, -+ .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS | FF_CODEC_CAP_SETS_FRAME_PROPS | - FF_CODEC_CAP_AUTO_THREADS, -- .priv_class = &libdav1d_class, -- .wrapper_name = "libdav1d", -+ .p.priv_class = &libdav1d_class, -+ .p.wrapper_name = "libdav1d", - }; -diff -Naur a/media/ffvpx/libavcodec/mathops.h b/media/ffvpx/libavcodec/mathops.h ---- a/media/ffvpx/libavcodec/mathops.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mathops.h 2023-04-06 12:50:24.492176543 +0200 -@@ -24,15 +24,16 @@ - - #include - -+#include "libavutil/attributes_internal.h" - #include "libavutil/common.h" --#include "libavutil/reverse.h" - #include "config.h" - - #define MAX_NEG_CROP 1024 - - extern const uint32_t ff_inverse[257]; -+extern const uint8_t ff_log2_run[41]; - extern const uint8_t ff_sqrt_tab[256]; --extern const uint8_t ff_crop_tab[256 + 2 * MAX_NEG_CROP]; -+extern const uint8_t attribute_visibility_hidden ff_crop_tab[256 + 2 * MAX_NEG_CROP]; - extern const uint8_t ff_zigzag_direct[64]; - extern const uint8_t ff_zigzag_scan[16+1]; - -@@ -126,6 +127,8 @@ - } - #endif - -+#define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1) -+ - #ifndef sign_extend - static inline av_const int sign_extend(int val, unsigned bits) - { -@@ -135,6 +138,15 @@ - } - #endif - -+#ifndef sign_extend64 -+static inline av_const int64_t sign_extend64(int64_t val, unsigned bits) -+{ -+ unsigned shift = 8 * sizeof(int64_t) - bits; -+ union { uint64_t u; int64_t s; } v = { (uint64_t) val << shift }; -+ return v.s >> shift; -+} -+#endif -+ - #ifndef zero_extend - static inline av_const unsigned zero_extend(unsigned val, unsigned bits) - { -@@ -240,12 +252,4 @@ - return b.s8; - } - --static av_always_inline uint32_t bitswap_32(uint32_t x) --{ -- return (uint32_t)ff_reverse[ x & 0xFF] << 24 | -- (uint32_t)ff_reverse[(x >> 8) & 0xFF] << 16 | -- (uint32_t)ff_reverse[(x >> 16) & 0xFF] << 8 | -- (uint32_t)ff_reverse[ x >> 24]; --} -- - #endif /* AVCODEC_MATHOPS_H */ -diff -Naur a/media/ffvpx/libavcodec/mathtables.c b/media/ffvpx/libavcodec/mathtables.c ---- a/media/ffvpx/libavcodec/mathtables.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mathtables.c 2023-04-06 12:49:40.254394930 +0200 -@@ -112,3 +112,12 @@ - 1 + 2 * 4, 0 + 3 * 4, 1 + 3 * 4, 2 + 2 * 4, - 3 + 1 * 4, 3 + 2 * 4, 2 + 3 * 4, 3 + 3 * 4, - }; -+ -+const uint8_t ff_log2_run[41] = { -+ 0, 0, 0, 0, 1, 1, 1, 1, -+ 2, 2, 2, 2, 3, 3, 3, 3, -+ 4, 4, 5, 5, 6, 6, 7, 7, -+ 8, 9, 10, 11, 12, 13, 14, 15, -+16, 17, 18, 19, 20, 21, 22, 23, -+24, -+}; -diff -Naur a/media/ffvpx/libavcodec/me_cmp.h b/media/ffvpx/libavcodec/me_cmp.h ---- a/media/ffvpx/libavcodec/me_cmp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/me_cmp.h 2023-04-06 12:50:06.972471094 +0200 -@@ -21,9 +21,11 @@ - - #include - -+#include "libavutil/attributes_internal.h" -+ - #include "avcodec.h" - --extern const uint32_t ff_square_tab[512]; -+extern const uint32_t attribute_visibility_hidden ff_square_tab[512]; - - - /* minimum alignment rules ;) -@@ -46,12 +48,12 @@ - * Although currently h < 4 is not used as functions with - * width < 8 are neither used nor implemented. */ - typedef int (*me_cmp_func)(struct MpegEncContext *c, -- uint8_t *blk1 /* align width (8 or 16) */, -- uint8_t *blk2 /* align 1 */, ptrdiff_t stride, -+ const uint8_t *blk1 /* align width (8 or 16) */, -+ const uint8_t *blk2 /* align 1 */, ptrdiff_t stride, - int h); - - typedef struct MECmpContext { -- int (*sum_abs_dctelem)(int16_t *block /* align 16 */); -+ int (*sum_abs_dctelem)(const int16_t *block /* align 16 */); - - me_cmp_func sad[6]; /* identical to pix_absAxA except additional void * */ - me_cmp_func sse[6]; -@@ -80,6 +82,7 @@ - } MECmpContext; - - void ff_me_cmp_init(MECmpContext *c, AVCodecContext *avctx); -+void ff_me_cmp_init_aarch64(MECmpContext *c, AVCodecContext *avctx); - void ff_me_cmp_init_alpha(MECmpContext *c, AVCodecContext *avctx); - void ff_me_cmp_init_arm(MECmpContext *c, AVCodecContext *avctx); - void ff_me_cmp_init_ppc(MECmpContext *c, AVCodecContext *avctx); -diff -Naur a/media/ffvpx/libavcodec/motion_est.h b/media/ffvpx/libavcodec/motion_est.h ---- a/media/ffvpx/libavcodec/motion_est.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/motion_est.h 2023-04-06 12:50:24.492176543 +0200 -@@ -51,10 +51,7 @@ - int direct_basis_mv[4][2]; - uint8_t *scratchpad; /**< data area for the ME algo, so that - * the ME does not need to malloc/free. */ -- uint8_t *best_mb; -- uint8_t *temp_mb[2]; - uint8_t *temp; -- int best_bits; - uint32_t *map; ///< map to avoid duplicate evaluations - uint32_t *score_map; ///< map to store the scores - unsigned map_generation; -@@ -77,8 +74,8 @@ - int ymax; - int pred_x; - int pred_y; -- uint8_t *src[4][4]; -- uint8_t *ref[4][4]; -+ const uint8_t *src[4][4]; -+ const uint8_t *ref[4][4]; - int stride; - int uvstride; - /* temp variables for picture complexity calculation */ -@@ -118,14 +115,14 @@ - - int ff_epzs_motion_search(struct MpegEncContext *s, int *mx_ptr, int *my_ptr, - int P[10][2], int src_index, int ref_index, -- int16_t (*last_mv)[2], int ref_mv_scale, int size, -- int h); -+ const int16_t (*last_mv)[2], int ref_mv_scale, -+ int size, int h); - - int ff_get_mb_score(struct MpegEncContext *s, int mx, int my, int src_index, - int ref_index, int size, int h, int add_rate); - - int ff_get_best_fcode(struct MpegEncContext *s, -- int16_t (*mv_table)[2], int type); -+ const int16_t (*mv_table)[2], int type); - - void ff_fix_long_p_mvs(struct MpegEncContext *s, int type); - void ff_fix_long_mvs(struct MpegEncContext *s, uint8_t *field_select_table, -diff -Naur a/media/ffvpx/libavcodec/moz.build b/media/ffvpx/libavcodec/moz.build ---- a/media/ffvpx/libavcodec/moz.build 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/moz.build 2023-04-06 12:50:06.972471094 +0200 -@@ -9,11 +9,12 @@ - if CONFIG['FFVPX_ASFLAGS']: - if CONFIG['CPU_ARCH'] == 'x86' or CONFIG['CPU_ARCH'] == 'x86_64': - DIRS += ['x86'] -- elif CONFIG['CPU_ARCH'] == 'aarch64': -- DIRS += ['aarch64'] - elif CONFIG['CPU_ARCH'] == 'arm': - DIRS += ['arm'] - -+if CONFIG['CPU_ARCH'] == 'aarch64': -+ DIRS += ['aarch64'] -+ - SharedLibrary('mozavcodec') - SOURCES += [ - 'allcodecs.c', -@@ -40,6 +41,7 @@ - 'flacdata.c', - 'flacdec.c', - 'flacdsp.c', -+ 'get_buffer.c', - 'idctdsp.c', - 'jfdctfst.c', - 'jfdctint.c', -@@ -54,10 +56,12 @@ - 'mpegaudiodsp_data.c', - 'mpegaudiodsp_fixed.c', - 'mpegaudiodsp_float.c', -+ 'mpegaudiotabs.c', - 'null_bsf.c', - 'options.c', - 'parser.c', - 'parsers.c', -+ 'profiles.c', - 'pthread.c', - 'pthread_frame.c', - 'pthread_slice.c', -@@ -65,26 +69,27 @@ - 'reverse.c', - 'simple_idct.c', - 'utils.c', -+ 'version.c', -+ 'vlc.c', - 'vorbis_parser.c', - 'xiph.c' - ] - - if not CONFIG['MOZ_FFVPX_AUDIOONLY']: - SOURCES += [ -+ 'atsc_a53.c', - 'av1dec.c', - 'avpicture.c', -- 'bitstream_filter.c', - 'cbs.c', - 'cbs_av1.c', - 'golomb.c', - 'h264pred.c', - 'imgconvert.c', -+ 'libdav1d.c', - 'mathtables.c', -- 'profiles.c', - 'qsv_api.c', - 'raw.c', - 'videodsp.c', -- 'vp56rac.c', - 'vp8.c', - 'vp8_parser.c', - 'vp8dsp.c', -@@ -100,21 +105,22 @@ - 'vp9lpf.c', - 'vp9mvs.c', - 'vp9prob.c', -- 'vp9recon.c' -+ 'vp9recon.c', -+ 'vpx_rac.c', -+ ] -+ USE_LIBS += [ -+ 'dav1d', -+ 'media_libdav1d_asm', - ] - if CONFIG['MOZ_WAYLAND']: - LOCAL_INCLUDES += ['/media/mozva'] - SOURCES += [ -- 'atsc_a53.c', -- 'libdav1d.c', - 'vaapi_av1.c', - 'vaapi_decode.c', - 'vaapi_vp8.c', - 'vaapi_vp9.c', - ] - USE_LIBS += [ -- 'dav1d', -- 'media_libdav1d_asm', - 'mozva' - ] - -diff -Naur a/media/ffvpx/libavcodec/mpeg12data.h b/media/ffvpx/libavcodec/mpeg12data.h ---- a/media/ffvpx/libavcodec/mpeg12data.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpeg12data.h 2023-04-06 12:50:06.972471094 +0200 -@@ -30,7 +30,6 @@ - - #include - #include "libavutil/rational.h" --#include "rl.h" - - extern const uint16_t ff_mpeg1_default_intra_matrix[]; - extern const uint16_t ff_mpeg1_default_non_intra_matrix[64]; -@@ -40,9 +39,6 @@ - extern const uint16_t ff_mpeg12_vlc_dc_chroma_code[12]; - extern const unsigned char ff_mpeg12_vlc_dc_chroma_bits[12]; - --extern RLTable ff_rl_mpeg1; --extern RLTable ff_rl_mpeg2; -- - extern const uint8_t ff_mpeg12_mbAddrIncrTable[36][2]; - extern const uint8_t ff_mpeg12_mbPatTable[64][2]; - -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodata.c b/media/ffvpx/libavcodec/mpegaudiodata.c ---- a/media/ffvpx/libavcodec/mpegaudiodata.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodata.c 2023-04-06 12:49:40.254394930 +0200 -@@ -26,19 +26,6 @@ - - #include "mpegaudiodata.h" - -- --const uint16_t avpriv_mpa_bitrate_tab[2][3][15] = { -- { {0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 }, -- {0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 }, -- {0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 } }, -- { {0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256}, -- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160}, -- {0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160} -- } --}; -- --const uint16_t avpriv_mpa_freq_tab[3] = { 44100, 48000, 32000 }; -- - /*******************************************************/ - /* layer 2 tables */ - -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodata.h b/media/ffvpx/libavcodec/mpegaudiodata.h ---- a/media/ffvpx/libavcodec/mpegaudiodata.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodata.h 2023-04-06 12:49:40.254394930 +0200 -@@ -31,14 +31,13 @@ - - #include "config.h" - --#include "internal.h" - #include "vlc.h" - - #define MODE_EXT_MS_STEREO 2 - #define MODE_EXT_I_STEREO 1 - --extern av_export_avcodec const uint16_t avpriv_mpa_bitrate_tab[2][3][15]; --extern av_export_avcodec const uint16_t avpriv_mpa_freq_tab[3]; -+extern const uint16_t ff_mpa_bitrate_tab[2][3][15]; -+extern const uint16_t ff_mpa_freq_tab[3]; - extern const int ff_mpa_sblimit_table[5]; - extern const int ff_mpa_quant_steps[17]; - extern const int ff_mpa_quant_bits[17]; -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodec_common.c b/media/ffvpx/libavcodec/mpegaudiodec_common.c ---- a/media/ffvpx/libavcodec/mpegaudiodec_common.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodec_common.c 2023-04-06 12:50:06.972471094 +0200 -@@ -28,6 +28,7 @@ - #include - - #include "libavutil/avassert.h" -+#include "libavutil/libm.h" - #include "libavutil/thread.h" - - #include "mpegaudiodata.h" -@@ -64,10 +65,10 @@ - - /* mpegaudio layer 3 huffman tables */ - VLC ff_huff_vlc[16]; --static VLC_TYPE huff_vlc_tables[128 + 128 + 128 + 130 + 128 + 154 + 166 + 142 + -- 204 + 190 + 170 + 542 + 460 + 662 + 414][2]; -+static VLCElem huff_vlc_tables[128 + 128 + 128 + 130 + 128 + 154 + 166 + 142 + -+ 204 + 190 + 170 + 542 + 460 + 662 + 414]; - VLC ff_huff_quad_vlc[2]; --static VLC_TYPE huff_quad_vlc_tables[64 + 16][2]; -+static VLCElem huff_quad_vlc_tables[64 + 16]; - - static const uint8_t mpa_hufflens[] = { - /* Huffman table 1 - 4 entries */ -@@ -368,7 +369,7 @@ - { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */ - { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, -- 18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */ -+ 18, 22, 26, 32, 38, 46, 54, 62, 70, 76, 36, }, /* 24000 */ - { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, - 20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */ - { 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16, -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodec_fixed.c b/media/ffvpx/libavcodec/mpegaudiodec_fixed.c ---- a/media/ffvpx/libavcodec/mpegaudiodec_fixed.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodec_fixed.c 2023-04-06 12:50:06.972471094 +0200 -@@ -19,10 +19,12 @@ - */ - - #include "config.h" -+#include "config_components.h" - #include "libavutil/samplefmt.h" - - #define USE_FLOATS 0 - -+#include "codec_internal.h" - #include "mpegaudio.h" - - #define SHR(a,b) (((int)(a))>>(b)) -@@ -59,92 +61,88 @@ - #include "mpegaudiodec_template.c" - - #if CONFIG_MP1_DECODER --AVCodec ff_mp1_decoder = { -- .name = "mp1", -- .long_name = NULL_IF_CONFIG_SMALL("MP1 (MPEG audio layer 1)"), -- .type = AVMEDIA_TYPE_AUDIO, -- .id = AV_CODEC_ID_MP1, -+const FFCodec ff_mp1_decoder = { -+ .p.name = "mp1", -+ CODEC_LONG_NAME("MP1 (MPEG audio layer 1)"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_MP1, - .priv_data_size = sizeof(MPADecodeContext), - .init = decode_init, -- .decode = decode_frame, -- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | -+ FF_CODEC_DECODE_CB(decode_frame), -+ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | - AV_CODEC_CAP_DR1, - .flush = flush, -- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, -+ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, - AV_SAMPLE_FMT_S16, - AV_SAMPLE_FMT_NONE }, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, - }; - #endif - #if CONFIG_MP2_DECODER --AVCodec ff_mp2_decoder = { -- .name = "mp2", -- .long_name = NULL_IF_CONFIG_SMALL("MP2 (MPEG audio layer 2)"), -- .type = AVMEDIA_TYPE_AUDIO, -- .id = AV_CODEC_ID_MP2, -+const FFCodec ff_mp2_decoder = { -+ .p.name = "mp2", -+ CODEC_LONG_NAME("MP2 (MPEG audio layer 2)"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_MP2, - .priv_data_size = sizeof(MPADecodeContext), - .init = decode_init, -- .decode = decode_frame, -- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | -+ FF_CODEC_DECODE_CB(decode_frame), -+ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | - AV_CODEC_CAP_DR1, - .flush = flush, -- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, -+ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, - AV_SAMPLE_FMT_S16, - AV_SAMPLE_FMT_NONE }, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, - }; - #endif - #if CONFIG_MP3_DECODER --AVCodec ff_mp3_decoder = { -- .name = "mp3", -- .long_name = NULL_IF_CONFIG_SMALL("MP3 (MPEG audio layer 3)"), -- .type = AVMEDIA_TYPE_AUDIO, -- .id = AV_CODEC_ID_MP3, -+const FFCodec ff_mp3_decoder = { -+ .p.name = "mp3", -+ CODEC_LONG_NAME("MP3 (MPEG audio layer 3)"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_MP3, - .priv_data_size = sizeof(MPADecodeContext), - .init = decode_init, -- .decode = decode_frame, -- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | -+ FF_CODEC_DECODE_CB(decode_frame), -+ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | - AV_CODEC_CAP_DR1, - .flush = flush, -- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, -+ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, - AV_SAMPLE_FMT_S16, - AV_SAMPLE_FMT_NONE }, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, - }; - #endif - #if CONFIG_MP3ADU_DECODER --AVCodec ff_mp3adu_decoder = { -- .name = "mp3adu", -- .long_name = NULL_IF_CONFIG_SMALL("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), -- .type = AVMEDIA_TYPE_AUDIO, -- .id = AV_CODEC_ID_MP3ADU, -+const FFCodec ff_mp3adu_decoder = { -+ .p.name = "mp3adu", -+ CODEC_LONG_NAME("ADU (Application Data Unit) MP3 (MPEG audio layer 3)"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_MP3ADU, - .priv_data_size = sizeof(MPADecodeContext), - .init = decode_init, -- .decode = decode_frame_adu, -- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | -+ FF_CODEC_DECODE_CB(decode_frame_adu), -+ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | - AV_CODEC_CAP_DR1, - .flush = flush, -- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, -+ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, - AV_SAMPLE_FMT_S16, - AV_SAMPLE_FMT_NONE }, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, - }; - #endif - #if CONFIG_MP3ON4_DECODER --AVCodec ff_mp3on4_decoder = { -- .name = "mp3on4", -- .long_name = NULL_IF_CONFIG_SMALL("MP3onMP4"), -- .type = AVMEDIA_TYPE_AUDIO, -- .id = AV_CODEC_ID_MP3ON4, -+const FFCodec ff_mp3on4_decoder = { -+ .p.name = "mp3on4", -+ CODEC_LONG_NAME("MP3onMP4"), -+ .p.type = AVMEDIA_TYPE_AUDIO, -+ .p.id = AV_CODEC_ID_MP3ON4, - .priv_data_size = sizeof(MP3On4DecodeContext), - .init = decode_init_mp3on4, - .close = decode_close_mp3on4, -- .decode = decode_frame_mp3on4, -- .capabilities = AV_CODEC_CAP_CHANNEL_CONF | -+ FF_CODEC_DECODE_CB(decode_frame_mp3on4), -+ .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | - AV_CODEC_CAP_DR1, - .flush = flush_mp3on4, -- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, -+ .p.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, - AV_SAMPLE_FMT_NONE }, -- .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, -+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - }; - #endif -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodecheader.c b/media/ffvpx/libavcodec/mpegaudiodecheader.c ---- a/media/ffvpx/libavcodec/mpegaudiodecheader.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodecheader.c 2023-04-06 12:49:40.254394930 +0200 -@@ -24,10 +24,8 @@ - * MPEG Audio header decoder. - */ - --#include "libavutil/common.h" -+#include "libavutil/macros.h" - --#include "avcodec.h" --#include "internal.h" - #include "mpegaudio.h" - #include "mpegaudiodata.h" - #include "mpegaudiodecheader.h" -@@ -54,9 +52,9 @@ - s->layer = 4 - ((header >> 17) & 3); - /* extract frequency */ - sample_rate_index = (header >> 10) & 3; -- if (sample_rate_index >= FF_ARRAY_ELEMS(avpriv_mpa_freq_tab)) -+ if (sample_rate_index >= FF_ARRAY_ELEMS(ff_mpa_freq_tab)) - sample_rate_index = 0; -- sample_rate = avpriv_mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25); -+ sample_rate = ff_mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25); - sample_rate_index += 3 * (s->lsf + mpeg25); - s->sample_rate_index = sample_rate_index; - s->error_protection = ((header >> 16) & 1) ^ 1; -@@ -77,7 +75,7 @@ - s->nb_channels = 2; - - if (bitrate_index != 0) { -- frame_size = avpriv_mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index]; -+ frame_size = ff_mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index]; - s->bit_rate = frame_size * 1000; - switch(s->layer) { - case 1: -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodecheader.h b/media/ffvpx/libavcodec/mpegaudiodecheader.h ---- a/media/ffvpx/libavcodec/mpegaudiodecheader.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodecheader.h 2023-04-06 12:49:40.254394930 +0200 -@@ -27,7 +27,8 @@ - #ifndef AVCODEC_MPEGAUDIODECHEADER_H - #define AVCODEC_MPEGAUDIODECHEADER_H - --#include "avcodec.h" -+#include -+#include "codec_id.h" - - #define MP3_MASK 0xFFFE0CCF - -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodec_template.c b/media/ffvpx/libavcodec/mpegaudiodec_template.c ---- a/media/ffvpx/libavcodec/mpegaudiodec_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodec_template.c 2023-04-06 12:50:06.972471094 +0200 -@@ -24,6 +24,8 @@ - * MPEG Audio decoder - */ - -+#include "config_components.h" -+ - #include "libavutil/attributes.h" - #include "libavutil/avassert.h" - #include "libavutil/channel_layout.h" -@@ -34,8 +36,8 @@ - #include "libavutil/thread.h" - - #include "avcodec.h" -+#include "decode.h" - #include "get_bits.h" --#include "internal.h" - #include "mathops.h" - #include "mpegaudiodsp.h" - -@@ -372,7 +374,7 @@ - crc_val = av_crc(crc_tab, crc_val, &buf[6], sec_byte_len); - - AV_WB32(tmp_buf, -- ((buf[6 + sec_byte_len] & (0xFF00 >> sec_rem_bits)) << 24) + -+ ((buf[6 + sec_byte_len] & (0xFF00U >> sec_rem_bits)) << 24) + - ((s->crc << 16) >> sec_rem_bits)); - - crc_val = av_crc(crc_tab, crc_val, tmp_buf, 3); -@@ -1546,8 +1548,8 @@ - return nb_frames * 32 * sizeof(OUT_INT) * s->nb_channels; - } - --static int decode_frame(AVCodecContext * avctx, void *data, int *got_frame_ptr, -- AVPacket *avpkt) -+static int decode_frame(AVCodecContext *avctx, AVFrame *frame, -+ int *got_frame_ptr, AVPacket *avpkt) - { - const uint8_t *buf = avpkt->data; - int buf_size = avpkt->size; -@@ -1580,8 +1582,9 @@ - return AVERROR_INVALIDDATA; - } - /* update codec info */ -- avctx->channels = s->nb_channels; -- avctx->channel_layout = s->nb_channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; -+ av_channel_layout_uninit(&avctx->ch_layout); -+ avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO : -+ (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; - if (!avctx->bit_rate) - avctx->bit_rate = s->bit_rate; - -@@ -1593,7 +1596,7 @@ - buf_size= s->frame_size; - } - -- s->frame = data; -+ s->frame = frame; - - ret = mp_decode_frame(s, NULL, buf, buf_size); - if (ret >= 0) { -@@ -1630,7 +1633,7 @@ - } - - #if CONFIG_MP3ADU_DECODER || CONFIG_MP3ADUFLOAT_DECODER --static int decode_frame_adu(AVCodecContext *avctx, void *data, -+static int decode_frame_adu(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, AVPacket *avpkt) - { - const uint8_t *buf = avpkt->data; -@@ -1638,7 +1641,6 @@ - MPADecodeContext *s = avctx->priv_data; - uint32_t header; - int len, ret; -- int av_unused out_size; - - len = buf_size; - -@@ -1662,14 +1664,15 @@ - } - /* update codec info */ - avctx->sample_rate = s->sample_rate; -- avctx->channels = s->nb_channels; -- avctx->channel_layout = s->nb_channels == 1 ? AV_CH_LAYOUT_MONO : AV_CH_LAYOUT_STEREO; -+ av_channel_layout_uninit(&avctx->ch_layout); -+ avctx->ch_layout = s->nb_channels == 1 ? (AVChannelLayout)AV_CHANNEL_LAYOUT_MONO : -+ (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO; - if (!avctx->bit_rate) - avctx->bit_rate = s->bit_rate; - - s->frame_size = len; - -- s->frame = data; -+ s->frame = frame; - - ret = mp_decode_frame(s, NULL, buf, buf_size); - if (ret < 0) { -@@ -1757,8 +1760,8 @@ - } - s->frames = mp3Frames[cfg.chan_config]; - s->coff = chan_offset[cfg.chan_config]; -- avctx->channels = ff_mpeg4audio_channels[cfg.chan_config]; -- avctx->channel_layout = chan_layout[cfg.chan_config]; -+ av_channel_layout_uninit(&avctx->ch_layout); -+ av_channel_layout_from_mask(&avctx->ch_layout, chan_layout[cfg.chan_config]); - - if (cfg.sample_rate < 16000) - s->syncword = 0xffe00000; -@@ -1810,10 +1813,9 @@ - } - - --static int decode_frame_mp3on4(AVCodecContext *avctx, void *data, -+static int decode_frame_mp3on4(AVCodecContext *avctx, AVFrame *frame, - int *got_frame_ptr, AVPacket *avpkt) - { -- AVFrame *frame = data; - const uint8_t *buf = avpkt->data; - int buf_size = avpkt->size; - MP3On4DecodeContext *s = avctx->priv_data; -@@ -1855,8 +1857,8 @@ - return AVERROR_INVALIDDATA; - } - -- if (ch + m->nb_channels > avctx->channels || -- s->coff[fr] + m->nb_channels > avctx->channels) { -+ if (ch + m->nb_channels > avctx->ch_layout.nb_channels || -+ s->coff[fr] + m->nb_channels > avctx->ch_layout.nb_channels) { - av_log(avctx, AV_LOG_ERROR, "frame channel count exceeds codec " - "channel count\n"); - return AVERROR_INVALIDDATA; -@@ -1881,7 +1883,7 @@ - - avctx->bit_rate += m->bit_rate; - } -- if (ch != avctx->channels) { -+ if (ch != avctx->ch_layout.nb_channels) { - av_log(avctx, AV_LOG_ERROR, "failed to decode all channels\n"); - return AVERROR_INVALIDDATA; - } -@@ -1889,7 +1891,7 @@ - /* update codec info */ - avctx->sample_rate = s->mp3decctx[0]->sample_rate; - -- frame->nb_samples = out_size / (avctx->channels * sizeof(OUT_INT)); -+ frame->nb_samples = out_size / (avctx->ch_layout.nb_channels * sizeof(OUT_INT)); - *got_frame_ptr = 1; - - return buf_size; -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodsp.c b/media/ffvpx/libavcodec/mpegaudiodsp.c ---- a/media/ffvpx/libavcodec/mpegaudiodsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodsp.c 2023-04-06 12:49:40.254394930 +0200 -@@ -74,8 +74,9 @@ - } - } - -- if (ARCH_X86) -- ff_mpadsp_init_x86_tabs(); -+#if ARCH_X86 -+ ff_mpadsp_init_x86_tabs(); -+#endif - } - - av_cold void ff_mpadsp_init(MPADSPContext *s) -@@ -94,10 +95,19 @@ - s->imdct36_blocks_float = ff_imdct36_blocks_float; - s->imdct36_blocks_fixed = ff_imdct36_blocks_fixed; - -- if (ARCH_AARCH64) ff_mpadsp_init_aarch64(s); -- if (ARCH_ARM) ff_mpadsp_init_arm(s); -- if (ARCH_PPC) ff_mpadsp_init_ppc(s); -- if (ARCH_X86) ff_mpadsp_init_x86(s); -- if (HAVE_MIPSFPU) ff_mpadsp_init_mipsfpu(s); -- if (HAVE_MIPSDSP) ff_mpadsp_init_mipsdsp(s); -+#if ARCH_AARCH64 -+ ff_mpadsp_init_aarch64(s); -+#elif ARCH_ARM -+ ff_mpadsp_init_arm(s); -+#elif ARCH_PPC -+ ff_mpadsp_init_ppc(s); -+#elif ARCH_X86 -+ ff_mpadsp_init_x86(s); -+#endif -+#if HAVE_MIPSFPU -+ ff_mpadsp_init_mipsfpu(s); -+#endif -+#if HAVE_MIPSDSP -+ ff_mpadsp_init_mipsdsp(s); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodsp.h b/media/ffvpx/libavcodec/mpegaudiodsp.h ---- a/media/ffvpx/libavcodec/mpegaudiodsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodsp.h 2023-04-06 12:49:40.254394930 +0200 -@@ -22,7 +22,7 @@ - #include - #include - --#include "libavutil/common.h" -+#include "libavutil/macros.h" - - typedef struct MPADSPContext { - void (*apply_window_float)(float *synth_buf, float *window, -diff -Naur a/media/ffvpx/libavcodec/mpegaudiodsp_template.c b/media/ffvpx/libavcodec/mpegaudiodsp_template.c ---- a/media/ffvpx/libavcodec/mpegaudiodsp_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiodsp_template.c 2023-04-06 12:49:40.254394930 +0200 -@@ -21,7 +21,6 @@ - #include - - #include "libavutil/attributes.h" --#include "libavutil/mem.h" - #include "libavutil/mem_internal.h" - #include "libavutil/thread.h" - -diff -Naur a/media/ffvpx/libavcodec/mpegaudiotab.h b/media/ffvpx/libavcodec/mpegaudiotab.h ---- a/media/ffvpx/libavcodec/mpegaudiotab.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiotab.h 2023-04-06 12:49:40.254394930 +0200 -@@ -0,0 +1,102 @@ -+/* -+ * mpeg audio layer 2 tables. Most of them come from the mpeg audio -+ * specification. -+ * -+ * Copyright (c) 2000, 2001 Fabrice Bellard -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * mpeg audio layer 2 tables. -+ * Most of them come from the mpeg audio specification. -+ */ -+ -+#ifndef AVCODEC_MPEGAUDIOTAB_H -+#define AVCODEC_MPEGAUDIOTAB_H -+ -+#include -+#include "mpegaudio.h" -+ -+static const int costab32[30] = { -+ FIX(0.54119610014619701222), -+ FIX(1.3065629648763763537), -+ -+ FIX(0.50979557910415917998), -+ FIX(2.5629154477415054814), -+ FIX(0.89997622313641556513), -+ FIX(0.60134488693504528634), -+ -+ FIX(0.5024192861881556782), -+ FIX(5.1011486186891552563), -+ FIX(0.78815462345125020249), -+ FIX(0.64682178335999007679), -+ FIX(0.56694403481635768927), -+ FIX(1.0606776859903470633), -+ FIX(1.7224470982383341955), -+ FIX(0.52249861493968885462), -+ -+ FIX(10.19000812354803287), -+ FIX(0.674808341455005678), -+ FIX(1.1694399334328846596), -+ FIX(0.53104259108978413284), -+ FIX(2.0577810099534108446), -+ FIX(0.58293496820613388554), -+ FIX(0.83934964541552681272), -+ FIX(0.50547095989754364798), -+ FIX(3.4076084184687189804), -+ FIX(0.62250412303566482475), -+ FIX(0.97256823786196078263), -+ FIX(0.51544730992262455249), -+ FIX(1.4841646163141661852), -+ FIX(0.5531038960344445421), -+ FIX(0.74453627100229857749), -+ FIX(0.5006029982351962726), -+}; -+ -+static const int bitinv32[32] = { -+ 0, 16, 8, 24, 4, 20, 12, 28, -+ 2, 18, 10, 26, 6, 22, 14, 30, -+ 1, 17, 9, 25, 5, 21, 13, 29, -+ 3, 19, 11, 27, 7, 23, 15, 31 -+}; -+ -+ -+/* signal to noise ratio of each quantification step (could be -+ computed from quant_steps[]). The values are dB multiplied by 10 -+*/ -+static const unsigned short quant_snr[17] = { -+ 70, 110, 160, 208, -+ 253, 316, 378, 439, -+ 499, 559, 620, 680, -+ 740, 800, 861, 920, -+ 980 -+}; -+ -+/* fixed psycho acoustic model. Values of SNR taken from the 'toolame' -+ project */ -+static const float fixed_smr[SBLIMIT] = { -+ 30, 17, 16, 10, 3, 12, 8, 2.5, -+ 5, 5, 6, 6, 5, 6, 10, 6, -+ -4, -10, -21, -30, -42, -55, -68, -75, -+ -75, -75, -75, -75, -91, -107, -110, -108 -+}; -+ -+static const unsigned char nb_scale_factors[4] = { 3, 2, 1, 2 }; -+ -+#endif /* AVCODEC_MPEGAUDIOTAB_H */ -diff -Naur a/media/ffvpx/libavcodec/mpegaudiotabs.c b/media/ffvpx/libavcodec/mpegaudiotabs.c ---- a/media/ffvpx/libavcodec/mpegaudiotabs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiotabs.c 2023-04-06 12:49:40.254394930 +0200 -@@ -0,0 +1,22 @@ -+/* -+ * MPEG Audio common tables -+ * copyright (c) 2002 Fabrice Bellard -+ * -+ * 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 "mpegaudiotabs.h" -diff -Naur a/media/ffvpx/libavcodec/mpegaudiotabs.h b/media/ffvpx/libavcodec/mpegaudiotabs.h ---- a/media/ffvpx/libavcodec/mpegaudiotabs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegaudiotabs.h 2023-04-06 12:49:40.254394930 +0200 -@@ -0,0 +1,39 @@ -+/* -+ * MPEG Audio common tables -+ * copyright (c) 2002 Fabrice Bellard -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_MPEGAUDIOTABS_H -+#define AVCODEC_MPEGAUDIOTABS_H -+ -+#include -+ -+const uint16_t ff_mpa_bitrate_tab[2][3][15] = { -+ { { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448 }, -+ { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384 }, -+ { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 } }, -+ { { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256 }, -+ { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 }, -+ { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160 } -+ } -+}; -+ -+const uint16_t ff_mpa_freq_tab[3] = { 44100, 48000, 32000 }; -+ -+#endif -diff -Naur a/media/ffvpx/libavcodec/mpegpicture.h b/media/ffvpx/libavcodec/mpegpicture.h ---- a/media/ffvpx/libavcodec/mpegpicture.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegpicture.h 2023-04-06 12:50:24.492176543 +0200 -@@ -27,8 +27,9 @@ - - #include "avcodec.h" - #include "motion_est.h" --#include "thread.h" -+#include "threadframe.h" - -+#define MPEGVIDEO_MAX_PLANES 4 - #define MAX_PICTURE_COUNT 36 - #define EDGE_WIDTH 16 - -@@ -61,34 +62,23 @@ - AVBufferRef *ref_index_buf[2]; - int8_t *ref_index[2]; - -- AVBufferRef *mb_var_buf; -- uint16_t *mb_var; ///< Table for MB variances -- -- AVBufferRef *mc_mb_var_buf; -- uint16_t *mc_mb_var; ///< Table for motion compensated MB variances -- - int alloc_mb_width; ///< mb_width used to allocate tables - int alloc_mb_height; ///< mb_height used to allocate tables - int alloc_mb_stride; ///< mb_stride used to allocate tables - -- AVBufferRef *mb_mean_buf; -- uint8_t *mb_mean; ///< Table for MB luminance -- - AVBufferRef *hwaccel_priv_buf; - void *hwaccel_picture_private; ///< Hardware accelerator private data - - int field_picture; ///< whether or not the picture was encoded in separate fields - -- int64_t mb_var_sum; ///< sum of MB variance for current frame -- int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame -- - int b_frame_score; - int needs_realloc; ///< Picture needs to be reallocated (eg due to a frame size change) - - int reference; - int shared; - -- uint64_t encoding_error[AV_NUM_DATA_POINTERS]; -+ int display_picture_number; -+ int coded_picture_number; - } Picture; - - /** -@@ -107,8 +97,8 @@ - int ff_mpeg_ref_picture(AVCodecContext *avctx, Picture *dst, Picture *src); - void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *picture); - --void ff_free_picture_tables(Picture *pic); --int ff_update_picture_tables(Picture *dst, Picture *src); -+void ff_mpv_picture_free(AVCodecContext *avctx, Picture *pic); -+int ff_update_picture_tables(Picture *dst, const Picture *src); - - int ff_find_unused_picture(AVCodecContext *avctx, Picture *picture, int shared); - -diff -Naur a/media/ffvpx/libavcodec/mpegutils.h b/media/ffvpx/libavcodec/mpegutils.h ---- a/media/ffvpx/libavcodec/mpegutils.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegutils.h 2023-04-06 12:50:06.972471094 +0200 -@@ -26,7 +26,6 @@ - #include "libavutil/frame.h" - - #include "avcodec.h" --#include "version.h" - - /** - * Return value for header parsers if frame is not coded. -@@ -38,12 +37,6 @@ - #define PICT_BOTTOM_FIELD 2 - #define PICT_FRAME 3 - --/** -- * Value of Picture.reference when Picture is not a reference picture, but -- * is held for delayed output. -- */ --#define DELAYED_PIC_REF 4 -- - #define MAX_MB_BYTES (30 * 16 * 16 * 3 / 8 + 120) - #define MAX_FCODE 7 - -@@ -134,16 +127,16 @@ - * - * @param h is the normal height, this will be reduced automatically if needed - */ --void ff_draw_horiz_band(AVCodecContext *avctx, AVFrame *cur, AVFrame *last, -+void ff_draw_horiz_band(AVCodecContext *avctx, const AVFrame *cur, const AVFrame *last, - int y, int h, int picture_structure, int first_field, - int low_delay); - - /** - * Print debugging info for the given picture. - */ --void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, uint8_t *mbskip_table, -- uint32_t *mbtype_table, int8_t *qscale_table, int16_t (*motion_val[2])[2], -- int *low_delay, -- int mb_width, int mb_height, int mb_stride, int quarter_sample); -+void ff_print_debug_info2(AVCodecContext *avctx, AVFrame *pict, -+ const uint8_t *mbskip_table, const uint32_t *mbtype_table, -+ const int8_t *qscale_table, int16_t (*const motion_val[2])[2], -+ int mb_width, int mb_height, int mb_stride, int quarter_sample); - - #endif /* AVCODEC_MPEGUTILS_H */ -diff -Naur a/media/ffvpx/libavcodec/mpegvideodata.h b/media/ffvpx/libavcodec/mpegvideodata.h ---- a/media/ffvpx/libavcodec/mpegvideodata.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegvideodata.h 2023-04-06 12:50:06.972471094 +0200 -@@ -21,15 +21,19 @@ - - #include - -+#include "libavutil/attributes_internal.h" -+ -+FF_VISIBILITY_PUSH_HIDDEN - /* encoding scans */ - extern const uint8_t ff_alternate_horizontal_scan[64]; - extern const uint8_t ff_alternate_vertical_scan[64]; - --extern const uint8_t ff_mpeg1_dc_scale_table[128]; --extern const uint8_t * const ff_mpeg2_dc_scale_table[4]; -+extern const uint8_t ff_mpeg12_dc_scale_table[4][32]; -+static const uint8_t *const ff_mpeg1_dc_scale_table = ff_mpeg12_dc_scale_table[0]; - - extern const uint8_t ff_mpeg2_non_linear_qscale[32]; - - extern const uint8_t ff_default_chroma_qscale_table[32]; -+FF_VISIBILITY_POP_HIDDEN - - #endif /* AVCODEC_MPEGVIDEODATA_H */ -diff -Naur a/media/ffvpx/libavcodec/mpegvideoencdsp.h b/media/ffvpx/libavcodec/mpegvideoencdsp.h ---- a/media/ffvpx/libavcodec/mpegvideoencdsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegvideoencdsp.h 2023-04-06 12:50:06.973471134 +0200 -@@ -30,12 +30,12 @@ - #define EDGE_BOTTOM 2 - - typedef struct MpegvideoEncDSPContext { -- int (*try_8x8basis)(int16_t rem[64], int16_t weight[64], -- int16_t basis[64], int scale); -- void (*add_8x8basis)(int16_t rem[64], int16_t basis[64], int scale); -+ int (*try_8x8basis)(const int16_t rem[64], const int16_t weight[64], -+ const int16_t basis[64], int scale); -+ void (*add_8x8basis)(int16_t rem[64], const int16_t basis[64], int scale); - -- int (*pix_sum)(uint8_t *pix, int line_size); -- int (*pix_norm1)(uint8_t *pix, int line_size); -+ int (*pix_sum)(const uint8_t *pix, int line_size); -+ int (*pix_norm1)(const uint8_t *pix, int line_size); - - void (*shrink[4])(uint8_t *dst, int dst_wrap, const uint8_t *src, - int src_wrap, int width, int height); -diff -Naur a/media/ffvpx/libavcodec/mpegvideo.h b/media/ffvpx/libavcodec/mpegvideo.h ---- a/media/ffvpx/libavcodec/mpegvideo.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/mpegvideo.h 2023-04-06 12:50:24.492176543 +0200 -@@ -28,8 +28,6 @@ - #ifndef AVCODEC_MPEGVIDEO_H - #define AVCODEC_MPEGVIDEO_H - --#include -- - #include "avcodec.h" - #include "blockdsp.h" - #include "error_resilience.h" -@@ -39,41 +37,29 @@ - #include "h263dsp.h" - #include "hpeldsp.h" - #include "idctdsp.h" --#include "internal.h" - #include "me_cmp.h" - #include "motion_est.h" - #include "mpegpicture.h" --#include "mpegvideodsp.h" - #include "mpegvideoencdsp.h" --#include "mpegvideodata.h" - #include "pixblockdsp.h" - #include "put_bits.h" - #include "ratecontrol.h" --#include "parser.h" - #include "mpegutils.h" --#include "mpeg12data.h" - #include "qpeldsp.h" --#include "thread.h" - #include "videodsp.h" - --#include "libavutil/opt.h" --#include "libavutil/timecode.h" -- - #define MAX_THREADS 32 - - #define MAX_B_FRAMES 16 - --/* Start codes. */ --#define SEQ_END_CODE 0x000001b7 --#define SEQ_START_CODE 0x000001b3 --#define GOP_START_CODE 0x000001b8 --#define PICTURE_START_CODE 0x00000100 --#define SLICE_MIN_START_CODE 0x00000101 --#define SLICE_MAX_START_CODE 0x000001af --#define EXT_START_CODE 0x000001b5 --#define USER_START_CODE 0x000001b2 --#define SLICE_START_CODE 0x000001b7 -- -+/** -+ * Scantable. -+ */ -+typedef struct ScanTable { -+ const uint8_t *scantable; -+ uint8_t permutated[64]; -+ uint8_t raster_end[64]; -+} ScanTable; - - /** - * MpegEncContext. -@@ -88,14 +74,18 @@ - - /* scantables */ - ScanTable inter_scantable; ///< if inter == intra then intra should be used to reduce the cache usage -- ScanTable intra_scantable; -- ScanTable intra_h_scantable; -- ScanTable intra_v_scantable; - - /* WARNING: changes above this line require updates to hardcoded - * offsets used in ASM. */ - -+ ScanTable intra_scantable; -+ uint8_t permutated_intra_h_scantable[64]; -+ uint8_t permutated_intra_v_scantable[64]; -+ - struct AVCodecContext *avctx; -+ /* The following pointer is intended for codecs sharing code -+ * between decoder and encoder and in need of a common context to do so. */ -+ void *private_ctx; - /* the following parameters must be initialized before encoding */ - int width, height;///< picture size. must be a multiple of 16 - int gop_size; -@@ -115,7 +105,6 @@ - int max_b_frames; ///< max number of B-frames for encoding - int luma_elim_threshold; - int chroma_elim_threshold; -- int strict_std_compliance; ///< strictly follow the std (MPEG-4, ...) - int workaround_bugs; ///< workaround bugs in encoders which cannot be detected automatically - int codec_tag; ///< internal codec_tag upper case converted from avctx codec_tag - /* the following fields are managed internally by the encoder */ -@@ -125,6 +114,7 @@ - int input_picture_number; ///< used to set pic->display_picture_number, should not be used for/by anything else - int coded_picture_number; ///< used to set pic->coded_picture_number, should not be used for/by anything else - int picture_number; //FIXME remove, unclear definition -+ int extradata_parsed; - int picture_in_gop_number; ///< 0-> first pic in gop, ... - int mb_width, mb_height; ///< number of MBs horizontally & vertically - int mb_stride; ///< mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11 -@@ -137,7 +127,7 @@ - Picture **input_picture; ///< next pictures on display order for encoding - Picture **reordered_input_picture; ///< pointer to the next pictures in coded order for encoding - -- int64_t user_specified_pts; ///< last non-zero pts from AVFrame which was passed into avcodec_encode_video2() -+ int64_t user_specified_pts; ///< last non-zero pts from AVFrame which was passed into avcodec_send_frame() - /** - * pts difference between the first and second input frame, used for - * calculating dts of the first frame when there's a delay */ -@@ -168,10 +158,10 @@ - Picture next_picture; - - /** -- * copy of the source picture structure for encoding. -+ * Reference to the source picture for encoding. - * note, linesize & data, might not match the source picture (for field pictures) - */ -- Picture new_picture; -+ AVFrame *new_picture; - - /** - * copy of the current picture structure. -@@ -182,6 +172,7 @@ - Picture *last_picture_ptr; ///< pointer to the previous picture. - Picture *next_picture_ptr; ///< pointer to the next picture (for bidir pred) - Picture *current_picture_ptr; ///< pointer to the current picture -+ int skipped_last_frame; - int last_dc[3]; ///< last DC values for MPEG-1 - int16_t *dc_val_base; - int16_t *dc_val[3]; ///< used for MPEG-4 DC prediction, all 3 arrays must be continuous -@@ -208,14 +199,11 @@ - int *lambda_table; - int adaptive_quant; ///< use adaptive quantization - int dquant; ///< qscale difference to prev qscale -- int closed_gop; ///< MPEG1/2 GOP is closed - int pict_type; ///< AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ... - int vbv_delay; - int last_pict_type; //FIXME removes - int last_non_b_pict_type; ///< used for MPEG-4 gmc B-frames & ratecontrol - int droppable; -- int frame_rate_index; -- AVRational mpeg2_frame_rate_ext; - int last_lambda_for[5]; ///< last lambda for a specific pict type - int skipdct; ///< skip dct and code zero residual - -@@ -229,7 +217,6 @@ - HpelDSPContext hdsp; - IDCTDSPContext idsp; - MECmpContext mecc; -- MpegVideoDSPContext mdsp; - MpegvideoEncDSPContext mpvencdsp; - PixblockDSPContext pdsp; - QpelDSPContext qdsp; -@@ -243,8 +230,8 @@ - int16_t (*b_bidir_forw_mv_table_base)[2]; - int16_t (*b_bidir_back_mv_table_base)[2]; - int16_t (*b_direct_mv_table_base)[2]; -- int16_t (*p_field_mv_table_base[2][2])[2]; -- int16_t (*b_field_mv_table_base[2][2][2])[2]; -+ int16_t (*p_field_mv_table_base)[2]; -+ int16_t (*b_field_mv_table_base)[2]; - int16_t (*p_mv_table)[2]; ///< MV table (1MV per MB) P-frame encoding - int16_t (*b_forw_mv_table)[2]; ///< MV table (1MV per MB) forward mode B-frame encoding - int16_t (*b_back_mv_table)[2]; ///< MV table (1MV per MB) backward mode B-frame encoding -@@ -253,8 +240,17 @@ - int16_t (*b_direct_mv_table)[2]; ///< MV table (1MV per MB) direct mode B-frame encoding - int16_t (*p_field_mv_table[2][2])[2]; ///< MV table (2MV per MB) interlaced P-frame encoding - int16_t (*b_field_mv_table[2][2][2])[2];///< MV table (4MV per MB) interlaced B-frame encoding -- uint8_t (*p_field_select_table[2]); -- uint8_t (*b_field_select_table[2][2]); -+ uint8_t (*p_field_select_table[2]); ///< Only the first element is allocated -+ uint8_t (*b_field_select_table[2][2]); ///< Only the first element is allocated -+ -+ /* The following fields are encoder-only */ -+ uint16_t *mb_var; ///< Table for MB variances -+ uint16_t *mc_mb_var; ///< Table for motion compensated MB variances -+ uint8_t *mb_mean; ///< Table for MB luminance -+ int64_t mb_var_sum; ///< sum of MB variance for current frame -+ int64_t mc_mb_var_sum; ///< motion compensated MB variance for current frame -+ uint64_t encoding_error[MPEGVIDEO_MAX_PLANES]; -+ - int motion_est; ///< ME algorithm - int me_penalty_compensation; - int me_pre; ///< prepass for motion estimation -@@ -301,7 +297,6 @@ - uint16_t chroma_intra_matrix[64]; - uint16_t inter_matrix[64]; - uint16_t chroma_inter_matrix[64]; -- int force_duplicated_matrix; ///< Force duplication of mjpeg matrices, useful for rtp streaming - - int intra_quant_bias; ///< bias for the quantizer - int inter_quant_bias; ///< bias for the quantizer -@@ -315,7 +310,6 @@ - uint8_t *inter_ac_vlc_length; - uint8_t *inter_ac_vlc_last_length; - uint8_t *luma_dc_vlc_length; --#define UNI_AC_ENC_INDEX(run,level) ((run)*128 + (level)) - - int coded_score[12]; - -@@ -346,8 +340,6 @@ - int i_tex_bits; - int p_tex_bits; - int i_count; -- int f_count; -- int b_count; - int skip_count; - int misc_bits; ///< cbp, mb_type - int last_bits; ///< temp var used for calculating the above vars -@@ -357,9 +349,6 @@ - int resync_mb_y; ///< y position of last resync marker - GetBitContext last_resync_gb; ///< used to search for the next resync marker - int mb_num_left; ///< number of MBs left in this video packet (for partitioned Slices only) -- int next_p_frame_damaged; ///< set if the next p frame is damaged, to avoid showing trashed B-frames -- -- ParseContext parse_context; - - /* H.263 specific */ - int gob_index; -@@ -369,9 +358,6 @@ - uint8_t *mb_info_ptr; - int mb_info_size; - int ehc_mode; --#if FF_API_MPV_RC_STRATEGY -- int rc_strategy; ///< deprecated --#endif - - /* H.263+ specific */ - int umvplus; ///< == H.263+ && unrestricted_mv -@@ -395,18 +381,12 @@ - uint16_t pb_time; ///< time distance between the last b and p,s,i frame - uint16_t pp_field_time; - uint16_t pb_field_time; ///< like above, just for interlaced -- int real_sprite_warping_points; -- int sprite_offset[2][2]; ///< sprite offset[isChroma][isMVY] -- int sprite_delta[2][2]; ///< sprite_delta [isY][isMVY] - int mcsel; - int quant_precision; - int quarter_sample; ///< 1->qpel, 0->half pel ME/MC -- int aspect_ratio_info; //FIXME remove -- int sprite_warping_accuracy; - int data_partitioning; ///< data partitioning flag from header - int partitioned_frame; ///< is current frame partitioned - int low_delay; ///< no reordering needed / has no B-frames -- int vo_type; - PutBitContext tex_pb; ///< used for data partitioned VOPs - PutBitContext pb2; ///< used for data partitioned VOPs - int mpeg_quant; -@@ -425,8 +405,6 @@ - /* MJPEG specific */ - struct MJpegContext *mjpeg_ctx; - int esc_pos; -- int pred; -- int huffman; - - /* MSMPEG4 specific */ - int mv_table_index; -@@ -441,31 +419,23 @@ - int per_mb_rl_table; - int esc3_level_length; - int esc3_run_length; -- /** [mb_intra][isChroma][level][run][last] */ -- int (*ac_stats)[2][MAX_LEVEL+1][MAX_RUN+1][2]; - int inter_intra_pred; - int mspel; - -- /* SpeedHQ specific */ -- int slice_start; -- - /* decompression specific */ - GetBitContext gb; - - /* MPEG-1 specific */ -- int gop_picture_number; ///< index of the first picture of a GOP based on fake_pic_num & MPEG-1 specific - int last_mv_dir; ///< last mv_dir, used for B-frame encoding -- uint8_t *vbv_delay_ptr; ///< pointer to vbv_delay in the bitstream -+ int vbv_delay_pos; ///< offset of vbv_delay in the bitstream - - /* MPEG-2-specific - I wished not to have to support this mess. */ - int progressive_sequence; - int mpeg_f_code[2][2]; -- int a53_cc; - - // picture structure defines are loaded from mpegutils.h - int picture_structure; - -- int64_t timecode_frame_start; ///< GOP timecode frame start number, in non drop frame format - int intra_dc_precision; - int frame_pred_frame_dct; - int top_field_first; -@@ -474,14 +444,6 @@ - int brd_scale; - int intra_vlc_format; - int alternate_scan; -- int seq_disp_ext; -- int video_format; --#define VIDEO_FORMAT_COMPONENT 0 --#define VIDEO_FORMAT_PAL 1 --#define VIDEO_FORMAT_NTSC 2 --#define VIDEO_FORMAT_SECAM 3 --#define VIDEO_FORMAT_MAC 4 --#define VIDEO_FORMAT_UNSPECIFIED 5 - int repeat_first_field; - int chroma_420_type; - int chroma_format; -@@ -495,29 +457,18 @@ - int full_pel[2]; - int interlaced_dct; - int first_field; ///< is 1 for the first field of a field picture 0 otherwise -- int drop_frame_timecode; ///< timecode is in drop frame format. -- int scan_offset; ///< reserve space for SVCD scan offset user data. - - /* RTP specific */ - int rtp_mode; - int rtp_payload_size; - -- char *tc_opt_str; ///< timecode option string -- AVTimecode tc; ///< timecode context -- - uint8_t *ptr_lastgob; -- int swap_uv; //vcr2 codec is an MPEG-2 variant with U and V swapped -- int pack_pblocks; //xvmc needs to keep blocks without gaps. - int16_t (*pblocks[12])[64]; - - int16_t (*block)[64]; ///< points to one of the following blocks - int16_t (*blocks)[12][64]; // for HQ mode we need to keep the best block - int (*decode_mb)(struct MpegEncContext *s, int16_t block[12][64]); // used by some codecs to avoid a switch() - -- int32_t (*block32)[12][64]; -- int dpcm_direction; // 0 = DCT, 1 = DPCM top to bottom scan, -1 = DPCM bottom to top scan -- int16_t (*dpcm_macroblock)[3][256]; -- - #define SLICE_OK 0 - #define SLICE_ERROR -1 - #define SLICE_END -2 ///", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ --{ "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\ -- FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ --{ "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\ -- FF_MPV_OFFSET(chroma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ --{ "quantizer_noise_shaping", NULL, FF_MPV_OFFSET(quantizer_noise_shaping), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ --{ "error_rate", "Simulate errors in the bitstream to test error concealment.", \ -- FF_MPV_OFFSET(error_rate), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FF_MPV_OPT_FLAGS },\ --{"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", \ -- FF_MPV_OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0, 99, FF_MPV_OPT_FLAGS}, \ --{"rc_qmod_amp", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ --{"rc_qmod_freq", "experimental quantizer modulation", FF_MPV_OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS}, \ --{"rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " \ -- "defined in the section 'Expression Evaluation', the following functions are available: " \ -- "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ -- "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ -- FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ --{"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ --{"rc_buf_aggressivity", "currently useless", FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ --{"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ --{"lmin", "minimum Lagrange factor (VBR)", FF_MPV_OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 2*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"lmax", "maximum Lagrange factor (VBR)", FF_MPV_OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 31*FF_QP2LAMBDA }, 0, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"ibias", "intra quant bias", FF_MPV_OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"pbias", "inter quant bias", FF_MPV_OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" }, \ --{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ --{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ --{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ --{ "force_duplicated_matrix", "Always write luma and chroma matrix for mjpeg, useful for rtp streaming.", FF_MPV_OFFSET(force_duplicated_matrix), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS }, \ --{"b_strategy", "Strategy to choose between I/P/B-frames", FF_MPV_OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 2, FF_MPV_OPT_FLAGS }, \ --{"b_sensitivity", "Adjust sensitivity of b_frame_strategy 1", FF_MPV_OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, \ --{"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ --{"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"mpeg_quant", "Use MPEG quantizers instead of H.263", FF_MPV_OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 1, FF_MPV_OPT_FLAGS }, \ --{"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"mepre", "pre motion estimation", FF_MPV_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ --{"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ --{"a53cc", "Use A53 Closed Captions (if available)", FF_MPV_OFFSET(a53_cc), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FF_MPV_OPT_FLAGS }, \ --FF_MPV_RC_STRATEGY_OPTS -- --extern const AVOption ff_mpv_generic_options[]; - - /** - * Set the given MpegEncContext to common defaults (same for encoding -@@ -689,8 +548,6 @@ - */ - void ff_mpv_common_defaults(MpegEncContext *s); - --void ff_dct_encode_init_x86(MpegEncContext *s); -- - int ff_mpv_common_init(MpegEncContext *s); - void ff_mpv_common_init_arm(MpegEncContext *s); - void ff_mpv_common_init_axp(MpegEncContext *s); -@@ -698,58 +555,48 @@ - void ff_mpv_common_init_ppc(MpegEncContext *s); - void ff_mpv_common_init_x86(MpegEncContext *s); - void ff_mpv_common_init_mips(MpegEncContext *s); -+/** -+ * Initialize an MpegEncContext's thread contexts. Presumes that -+ * slice_context_count is already set and that all the fields -+ * that are freed/reset in free_duplicate_context() are NULL. -+ */ -+int ff_mpv_init_duplicate_contexts(MpegEncContext *s); -+/** -+ * Initialize and allocates MpegEncContext fields dependent on the resolution. -+ */ -+int ff_mpv_init_context_frame(MpegEncContext *s); -+/** -+ * Frees and resets MpegEncContext fields depending on the resolution -+ * as well as the slice thread contexts. -+ * Is used during resolution changes to avoid a full reinitialization of the -+ * codec. -+ */ -+void ff_mpv_free_context_frame(MpegEncContext *s); - --int ff_mpv_common_frame_size_change(MpegEncContext *s); - void ff_mpv_common_end(MpegEncContext *s); - --void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx); --void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]); --void ff_mpv_report_decode_progress(MpegEncContext *s); -- --int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx); --void ff_mpv_frame_end(MpegEncContext *s); -- --int ff_mpv_encode_init(AVCodecContext *avctx); --void ff_mpv_encode_init_x86(MpegEncContext *s); -- --int ff_mpv_encode_end(AVCodecContext *avctx); --int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, -- const AVFrame *frame, int *got_packet); --int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase); -- - void ff_clean_intra_table_entries(MpegEncContext *s); --void ff_mpeg_draw_horiz_band(MpegEncContext *s, int y, int h); --void ff_mpeg_flush(AVCodecContext *avctx); -- --void ff_print_debug_info(MpegEncContext *s, Picture *p, AVFrame *pict); -- --int ff_mpv_export_qp_table(MpegEncContext *s, AVFrame *f, Picture *p, int qp_type); -- --void ff_write_quant_matrix(PutBitContext *pb, uint16_t *matrix); - --int ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src); --int ff_mpeg_update_thread_context(AVCodecContext *dst, const AVCodecContext *src); -+int ff_update_duplicate_context(MpegEncContext *dst, const MpegEncContext *src); - void ff_set_qscale(MpegEncContext * s, int qscale); - - void ff_mpv_idct_init(MpegEncContext *s); --int ff_dct_encode_init(MpegEncContext *s); --void ff_convert_matrix(MpegEncContext *s, int (*qmat)[64], uint16_t (*qmat16)[2][64], -- const uint16_t *quant_matrix, int bias, int qmin, int qmax, int intra); --int ff_dct_quantize_c(MpegEncContext *s, int16_t *block, int n, int qscale, int *overflow); --void ff_block_permute(int16_t *block, uint8_t *permutation, -- const uint8_t *scantable, int last); -+void ff_init_scantable(const uint8_t *permutation, ScanTable *st, -+ const uint8_t *src_scantable); - void ff_init_block_index(MpegEncContext *s); - - void ff_mpv_motion(MpegEncContext *s, - uint8_t *dest_y, uint8_t *dest_cb, - uint8_t *dest_cr, int dir, -- uint8_t **ref_picture, -+ uint8_t *const *ref_picture, - op_pixels_func (*pix_op)[4], - qpel_mc_func (*qpix_op)[16]); - --static inline void ff_update_block_index(MpegEncContext *s){ -- const int bytes_per_pixel = 1 + (s->avctx->bits_per_raw_sample > 8); -- const int block_size= (8*bytes_per_pixel) >> s->avctx->lowres; -+static inline void ff_update_block_index(MpegEncContext *s, int bits_per_raw_sample, -+ int lowres, int chroma_x_shift) -+{ -+ const int bytes_per_pixel = 1 + (bits_per_raw_sample > 8); -+ const int block_size = (8 * bytes_per_pixel) >> lowres; - - s->block_index[0]+=2; - s->block_index[1]+=2; -@@ -758,26 +605,8 @@ - s->block_index[4]++; - s->block_index[5]++; - s->dest[0]+= 2*block_size; -- s->dest[1]+= (2 >> s->chroma_x_shift) * block_size; -- s->dest[2]+= (2 >> s->chroma_x_shift) * block_size; --} -- --static inline int get_bits_diff(MpegEncContext *s){ -- const int bits= put_bits_count(&s->pb); -- const int last= s->last_bits; -- -- s->last_bits = bits; -- -- return bits - last; --} -- --static inline int mpeg_get_qscale(MpegEncContext *s) --{ -- int qscale = get_bits(&s->gb, 5); -- if (s->q_scale_type) -- return ff_mpeg2_non_linear_qscale[qscale]; -- else -- return qscale << 1; -+ s->dest[1] += (2 >> chroma_x_shift) * block_size; -+ s->dest[2] += (2 >> chroma_x_shift) * block_size; - } - - #endif /* AVCODEC_MPEGVIDEO_H */ -diff -Naur a/media/ffvpx/libavcodec/null_bsf.c b/media/ffvpx/libavcodec/null_bsf.c ---- a/media/ffvpx/libavcodec/null_bsf.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/null_bsf.c 2023-04-06 12:49:40.254394930 +0200 -@@ -21,10 +21,9 @@ - * Null bitstream filter -- pass the input through unchanged. - */ - --#include "bsf.h" - #include "bsf_internal.h" - --const AVBitStreamFilter ff_null_bsf = { -- .name = "null", -+const FFBitStreamFilter ff_null_bsf = { -+ .p.name = "null", - .filter = ff_bsf_get_packet_ref, - }; -diff -Naur a/media/ffvpx/libavcodec/options.c b/media/ffvpx/libavcodec/options.c ---- a/media/ffvpx/libavcodec/options.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/options.c 2023-04-06 12:50:24.492176543 +0200 -@@ -24,8 +24,10 @@ - * Options definition for AVCodecContext. - */ - -+#include "config_components.h" -+ - #include "avcodec.h" --#include "internal.h" -+#include "codec_internal.h" - #include "libavutil/avassert.h" - #include "libavutil/internal.h" - #include "libavutil/mem.h" -@@ -39,7 +41,7 @@ - static const char* context_to_name(void* ptr) { - AVCodecContext *avc= ptr; - -- if(avc && avc->codec && avc->codec->name) -+ if (avc && avc->codec) - return avc->codec->name; - else - return "NULL"; -@@ -53,25 +55,6 @@ - return NULL; - } - --#if FF_API_CHILD_CLASS_NEXT --static const AVClass *codec_child_class_next(const AVClass *prev) --{ -- void *iter = NULL; -- const AVCodec *c = NULL; -- -- /* find the codec that corresponds to prev */ -- while (prev && (c = av_codec_iterate(&iter))) -- if (c->priv_class == prev) -- break; -- -- /* find next codec with priv options */ -- while (c = av_codec_iterate(&iter)) -- if (c->priv_class) -- return c->priv_class; -- return NULL; --} --#endif -- - static const AVClass *codec_child_class_iterate(void **iter) - { - const AVCodec *c; -@@ -85,8 +68,10 @@ - static AVClassCategory get_category(void *ptr) - { - AVCodecContext* avctx = ptr; -- if(avctx->codec && avctx->codec->decode) return AV_CLASS_CATEGORY_DECODER; -- else return AV_CLASS_CATEGORY_ENCODER; -+ if (avctx->codec && av_codec_is_decoder(avctx->codec)) -+ return AV_CLASS_CATEGORY_DECODER; -+ else -+ return AV_CLASS_CATEGORY_ENCODER; - } - - static const AVClass av_codec_context_class = { -@@ -96,9 +81,6 @@ - .version = LIBAVUTIL_VERSION_INT, - .log_level_offset_offset = offsetof(AVCodecContext, log_level_offset), - .child_next = codec_child_next, --#if FF_API_CHILD_CLASS_NEXT -- .child_class_next = codec_child_class_next, --#endif - .child_class_iterate = codec_child_class_iterate, - .category = AV_CLASS_CATEGORY_ENCODER, - .get_category = get_category, -@@ -106,6 +88,7 @@ - - static int init_context_defaults(AVCodecContext *s, const AVCodec *codec) - { -+ const FFCodec *const codec2 = ffcodec(codec); - int flags=0; - memset(s, 0, sizeof(AVCodecContext)); - -@@ -125,6 +108,8 @@ - flags= AV_OPT_FLAG_SUBTITLE_PARAM; - av_opt_set_defaults2(s, flags, flags); - -+ av_channel_layout_uninit(&s->ch_layout); -+ - s->time_base = (AVRational){0,1}; - s->framerate = (AVRational){ 0, 1 }; - s->pkt_timebase = (AVRational){ 0, 1 }; -@@ -134,26 +119,28 @@ - s->execute = avcodec_default_execute; - s->execute2 = avcodec_default_execute2; - s->sample_aspect_ratio = (AVRational){0,1}; -+ s->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; - s->pix_fmt = AV_PIX_FMT_NONE; - s->sw_pix_fmt = AV_PIX_FMT_NONE; - s->sample_fmt = AV_SAMPLE_FMT_NONE; - -+#if FF_API_REORDERED_OPAQUE -+FF_DISABLE_DEPRECATION_WARNINGS - s->reordered_opaque = AV_NOPTS_VALUE; -- if(codec && codec->priv_data_size){ -- if(!s->priv_data){ -- s->priv_data= av_mallocz(codec->priv_data_size); -- if (!s->priv_data) { -- return AVERROR(ENOMEM); -- } -- } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ if(codec && codec2->priv_data_size){ -+ s->priv_data = av_mallocz(codec2->priv_data_size); -+ if (!s->priv_data) -+ return AVERROR(ENOMEM); - if(codec->priv_class){ - *(const AVClass**)s->priv_data = codec->priv_class; - av_opt_set_defaults(s->priv_data); - } - } -- if (codec && codec->defaults) { -+ if (codec && codec2->defaults) { - int ret; -- const AVCodecDefault *d = codec->defaults; -+ const FFCodecDefault *d = codec2->defaults; - while (d->key) { - ret = av_opt_set(s, d->key, d->value, 0); - av_assert0(ret >= 0); -@@ -163,13 +150,6 @@ - return 0; - } - --#if FF_API_GET_CONTEXT_DEFAULTS --int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec) --{ -- return init_context_defaults(s, codec); --} --#endif -- - AVCodecContext *avcodec_alloc_context3(const AVCodec *codec) - { - AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext)); -@@ -199,149 +179,16 @@ - av_freep(&avctx->intra_matrix); - av_freep(&avctx->inter_matrix); - av_freep(&avctx->rc_override); -+ av_channel_layout_uninit(&avctx->ch_layout); - - av_freep(pavctx); - } - --#if FF_API_COPY_CONTEXT --static void copy_context_reset(AVCodecContext *avctx) --{ -- int i; -- -- av_opt_free(avctx); --#if FF_API_CODED_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- av_frame_free(&avctx->coded_frame); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- av_freep(&avctx->rc_override); -- av_freep(&avctx->intra_matrix); -- av_freep(&avctx->inter_matrix); -- av_freep(&avctx->extradata); -- av_freep(&avctx->subtitle_header); -- av_buffer_unref(&avctx->hw_frames_ctx); -- av_buffer_unref(&avctx->hw_device_ctx); -- for (i = 0; i < avctx->nb_coded_side_data; i++) -- av_freep(&avctx->coded_side_data[i].data); -- av_freep(&avctx->coded_side_data); -- avctx->subtitle_header_size = 0; -- avctx->nb_coded_side_data = 0; -- avctx->extradata_size = 0; --} -- --int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src) --{ -- const AVCodec *orig_codec = dest->codec; -- uint8_t *orig_priv_data = dest->priv_data; -- -- if (avcodec_is_open(dest)) { // check that the dest context is uninitialized -- av_log(dest, AV_LOG_ERROR, -- "Tried to copy AVCodecContext %p into already-initialized %p\n", -- src, dest); -- return AVERROR(EINVAL); -- } -- -- copy_context_reset(dest); -- -- memcpy(dest, src, sizeof(*dest)); -- av_opt_copy(dest, src); -- -- dest->priv_data = orig_priv_data; -- dest->codec = orig_codec; -- -- if (orig_priv_data && src->codec && src->codec->priv_class && -- dest->codec && dest->codec->priv_class) -- av_opt_copy(orig_priv_data, src->priv_data); -- -- -- /* set values specific to opened codecs back to their default state */ -- dest->slice_offset = NULL; -- dest->hwaccel = NULL; -- dest->internal = NULL; --#if FF_API_CODED_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- dest->coded_frame = NULL; --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- -- /* reallocate values that should be allocated separately */ -- dest->extradata = NULL; -- dest->coded_side_data = NULL; -- dest->intra_matrix = NULL; -- dest->inter_matrix = NULL; -- dest->rc_override = NULL; -- dest->subtitle_header = NULL; -- dest->hw_frames_ctx = NULL; -- dest->hw_device_ctx = NULL; -- dest->nb_coded_side_data = 0; -- --#define alloc_and_copy_or_fail(obj, size, pad) \ -- if (src->obj && size > 0) { \ -- dest->obj = av_malloc(size + pad); \ -- if (!dest->obj) \ -- goto fail; \ -- memcpy(dest->obj, src->obj, size); \ -- if (pad) \ -- memset(((uint8_t *) dest->obj) + size, 0, pad); \ -- } -- alloc_and_copy_or_fail(extradata, src->extradata_size, -- AV_INPUT_BUFFER_PADDING_SIZE); -- dest->extradata_size = src->extradata_size; -- alloc_and_copy_or_fail(intra_matrix, 64 * sizeof(int16_t), 0); -- alloc_and_copy_or_fail(inter_matrix, 64 * sizeof(int16_t), 0); -- alloc_and_copy_or_fail(rc_override, src->rc_override_count * sizeof(*src->rc_override), 0); -- alloc_and_copy_or_fail(subtitle_header, src->subtitle_header_size, 1); -- av_assert0(dest->subtitle_header_size == src->subtitle_header_size); --#undef alloc_and_copy_or_fail -- -- if (src->hw_frames_ctx) { -- dest->hw_frames_ctx = av_buffer_ref(src->hw_frames_ctx); -- if (!dest->hw_frames_ctx) -- goto fail; -- } -- -- return 0; -- --fail: -- copy_context_reset(dest); -- return AVERROR(ENOMEM); --} --#endif -- - const AVClass *avcodec_get_class(void) - { - return &av_codec_context_class; - } - --#if FF_API_GET_FRAME_CLASS --#define FOFFSET(x) offsetof(AVFrame,x) -- --static const AVOption frame_options[]={ --{"best_effort_timestamp", "", FOFFSET(best_effort_timestamp), AV_OPT_TYPE_INT64, {.i64 = AV_NOPTS_VALUE }, INT64_MIN, INT64_MAX, 0}, --{"pkt_pos", "", FOFFSET(pkt_pos), AV_OPT_TYPE_INT64, {.i64 = -1 }, INT64_MIN, INT64_MAX, 0}, --{"pkt_size", "", FOFFSET(pkt_size), AV_OPT_TYPE_INT64, {.i64 = -1 }, INT64_MIN, INT64_MAX, 0}, --{"sample_aspect_ratio", "", FOFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0 }, 0, INT_MAX, 0}, --{"width", "", FOFFSET(width), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, --{"height", "", FOFFSET(height), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, --{"format", "", FOFFSET(format), AV_OPT_TYPE_INT, {.i64 = -1 }, 0, INT_MAX, 0}, --{"channel_layout", "", FOFFSET(channel_layout), AV_OPT_TYPE_INT64, {.i64 = 0 }, 0, INT64_MAX, 0}, --{"sample_rate", "", FOFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, --{NULL}, --}; -- --static const AVClass av_frame_class = { -- .class_name = "AVFrame", -- .item_name = NULL, -- .option = frame_options, -- .version = LIBAVUTIL_VERSION_INT, --}; -- --const AVClass *avcodec_get_frame_class(void) --{ -- return &av_frame_class; --} --#endif -- - #define SROFFSET(x) offsetof(AVSubtitleRect,x) - - static const AVOption subtitle_rect_options[]={ -diff -Naur a/media/ffvpx/libavcodec/options_table.h b/media/ffvpx/libavcodec/options_table.h ---- a/media/ffvpx/libavcodec/options_table.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/options_table.h 2023-04-06 12:50:24.492176543 +0200 -@@ -22,13 +22,15 @@ - #ifndef AVCODEC_OPTIONS_TABLE_H - #define AVCODEC_OPTIONS_TABLE_H - -+#include "config_components.h" -+ - #include - #include - #include - - #include "libavutil/opt.h" - #include "avcodec.h" --#include "version.h" -+#include "version_major.h" - - #define OFFSET(x) offsetof(AVCodecContext,x) - #define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C -@@ -55,11 +57,13 @@ - {"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"}, - {"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"}, - {"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"}, -+{"recon_frame", "export reconstructed frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_RECON_FRAME}, .unit = "flags"}, -+{"copy_opaque", "propagate opaque values", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_COPY_OPAQUE}, .unit = "flags"}, -+{"frame_duration", "use frame durations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_FRAME_DURATION}, .unit = "flags"}, - {"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, - {"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"}, - {"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"}, - {"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"}, --{"truncated", "Input bitstream might be randomly truncated", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, V|D, "flags"}, - {"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"}, - {"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, "flags"}, - {"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, "flags"}, -@@ -79,6 +83,7 @@ - {"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"}, - {"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, "flags2"}, - {"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"}, -+{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, "flags2"}, - {"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, "export_side_data"}, - {"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, "export_side_data"}, - {"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, "export_side_data"}, -@@ -87,10 +92,12 @@ - {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX}, - {"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E}, - {"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, -+#if FF_API_OLD_CHANNEL_LAYOUT - {"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, -+#endif - {"cutoff", "set cutoff bandwidth", OFFSET(cutoff), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|E}, - {"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|E}, --{"frame_number", NULL, OFFSET(frame_number), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, -+{"frame_number", NULL, OFFSET(frame_num), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, - {"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, - {"qcomp", "video quantizer scale compression (VBR). Constant of ratecontrol equation. " - "Recommended range for default rc_eq: 0.0-1.0", -@@ -101,21 +108,6 @@ - {"qdiff", "maximum difference between the quantizer scales (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.i64 = 3 }, INT_MIN, INT_MAX, V|E}, - {"bf", "set maximum number of B-frames between non-B-frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E}, - {"b_qfactor", "QP factor between P- and B-frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E}, --#if FF_API_PRIVATE_OPT --{"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, V|E}, --{"ps", "RTP payload size in bytes", OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif --#if FF_API_STAT_BITS --{"mv_bits", NULL, OFFSET(mv_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"header_bits", NULL, OFFSET(header_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"i_tex_bits", NULL, OFFSET(i_tex_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"p_tex_bits", NULL, OFFSET(p_tex_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"i_count", NULL, OFFSET(i_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"p_count", NULL, OFFSET(p_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"skip_count", NULL, OFFSET(skip_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"misc_bits", NULL, OFFSET(misc_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --{"frame_bits", NULL, OFFSET(frame_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, --#endif - {"codec_tag", NULL, OFFSET(codec_tag), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, - {"bug", "work around not autodetected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"}, - {"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"}, -@@ -151,9 +143,6 @@ - {"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE | AV_EF_COMPLIANT | AV_EF_CAREFUL}, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, - {"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, - {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, --#if FF_API_PRIVATE_OPT --{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif - {"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, - {"maxrate", "maximum bitrate (in bits/s). Used for VBV together with bufsize.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT_MAX, V|A|E}, - {"minrate", "minimum bitrate (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise.", -@@ -194,12 +183,6 @@ - {"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"}, - {"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, "ec"}, - {"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, --#if FF_API_PRIVATE_OPT --{"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"}, --{"left", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"}, --{"plane", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_PLANE }, INT_MIN, INT_MAX, V|E, "pred"}, --{"median", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_MEDIAN }, INT_MIN, INT_MAX, V|E, "pred"}, --#endif - {"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E}, - {"sar", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E}, - {"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"}, -@@ -220,34 +203,15 @@ - {"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, "debug"}, - {"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, - {"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#if FF_API_PRIVATE_OPT --{"preme", "pre motion estimation", OFFSET(pre_me), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif - {"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, - {"subq", "sub-pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E}, - {"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, - {"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, --#if FF_API_CODER_TYPE --{"coder", NULL, OFFSET(coder_type), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "coder"}, --{"vlc", "variable length coder / Huffman coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_VLC }, INT_MIN, INT_MAX, V|E, "coder"}, --{"ac", "arithmetic coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_AC }, INT_MIN, INT_MAX, V|E, "coder"}, --{"raw", "raw (no encoding)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_RAW }, INT_MIN, INT_MAX, V|E, "coder"}, --{"rle", "run-length coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_RLE }, INT_MIN, INT_MAX, V|E, "coder"}, --#endif /* FF_API_CODER_TYPE */ --#if FF_API_PRIVATE_OPT --{"context", "context model", OFFSET(context_model), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif - {"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, - {"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, "mbd"}, - {"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"}, - {"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"}, - {"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"}, --#if FF_API_PRIVATE_OPT --{"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif --#if FF_API_PRIVATE_OPT --{"nr", "noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif - {"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, - {"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, "threads"}, - {"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"}, -@@ -261,12 +225,6 @@ - {"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, "avctx.level"}, - {"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "avctx.level"}, - {"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|A|D}, --#if FF_API_PRIVATE_OPT --{"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --{"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --{"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --{"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"}, --#endif - {"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, - {"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, - {"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -@@ -292,9 +250,6 @@ - {"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, - {"mblmin", "minimum macroblock Lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E}, - {"mblmax", "maximum macroblock Lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E}, --#if FF_API_PRIVATE_OPT --{"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, V|E}, --#endif - {"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, - {"skip_idct" , "skip IDCT/dequantization for the selected frames", OFFSET(skip_idct), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, - {"skip_frame" , "skip decoding for the selected frames", OFFSET(skip_frame), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -@@ -306,28 +261,17 @@ - {"nointra" , "discard all frames except I frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, "avdiscard"}, - {"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "avdiscard"}, - {"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, 4, V|E}, --#if FF_API_PRIVATE_OPT --{"brd_scale", "downscale frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 10, V|E}, --#endif - {"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.i64 = 25 }, INT_MIN, INT_MAX, V|E}, - {"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.i64 = 1 }, INT_MIN, INT_MAX, V|E}, --#if FF_API_PRIVATE_OPT --{"chromaoffset", "chroma QP offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, --#endif - {"trellis", "rate-distortion optimal quantization", OFFSET(trellis), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, - {"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.i64 = 256 }, 0, INT_MAX, V|E}, --#if FF_API_PRIVATE_OPT --{"b_sensitivity", "adjust sensitivity of b_frame_strategy 1", OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, V|E}, --#endif - {"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.i64 = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E}, --#if FF_API_PRIVATE_OPT --{"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, --{"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, --{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, V|E}, --#endif - {"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, --{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"}, --{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"}, -+{"ch_layout", NULL, OFFSET(ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL }, 0, 0, A|E|D, "ch_layout"}, -+#if FF_API_OLD_CHANNEL_LAYOUT -+{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"}, -+{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"}, -+#endif - {"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0.0, FLT_MAX, V|E}, - {"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), AV_OPT_TYPE_FLOAT, {.dbl = 3 }, 0.0, FLT_MAX, V|E}, - {"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D}, -@@ -432,21 +376,6 @@ - {"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, - {"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, - {"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, --#if FF_API_ASS_TIMING --{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, 0, 1, S|D, "sub_text_format"}, --#else --{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS}, 0, 1, S|D, "sub_text_format"}, --#endif --{"ass", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, --#if FF_API_ASS_TIMING --{"ass_with_timings", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, --#endif --#if FF_API_OLD_ENCDEC --{"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, A|V|D }, --#endif --#if FF_API_SIDEDATA_ONLY_PKT --{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, A|V|E }, --#endif - {"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, V | D }, - {"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, V|D }, - {"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, "field_order" }, -@@ -465,6 +394,7 @@ - {"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, "hwaccel_flags" }, - {"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, - {"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, -+{"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, - {"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D }, - {"discard_damaged_percentage", "Percentage of damaged samples to discard a frame", OFFSET(discard_damaged_percentage), AV_OPT_TYPE_INT, {.i64 = 95 }, 0, 100, V|D }, - {NULL}, -diff -Naur a/media/ffvpx/libavcodec/packet.h b/media/ffvpx/libavcodec/packet.h ---- a/media/ffvpx/libavcodec/packet.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/packet.h 2023-04-06 12:50:06.973471134 +0200 -@@ -28,8 +28,9 @@ - #include "libavutil/buffer.h" - #include "libavutil/dict.h" - #include "libavutil/rational.h" -+#include "libavutil/version.h" - --#include "libavcodec/version.h" -+#include "libavcodec/version_major.h" - - /** - * @defgroup lavc_packet AVPacket -@@ -160,7 +161,7 @@ - * the packet may contain "dual mono" audio specific to Japanese DTV - * and if it is true, recommends only the selected channel to be used. - * @code -- * u8 selected channels (0=mail/left, 1=sub/right, 2=both) -+ * u8 selected channels (0=main/left, 1=sub/right, 2=both) - * @endcode - */ - AV_PKT_DATA_JP_DUALMONO, -@@ -291,6 +292,14 @@ - AV_PKT_DATA_S12M_TIMECODE, - - /** -+ * HDR10+ dynamic metadata associated with a video frame. The metadata is in -+ * the form of the AVDynamicHDRPlus struct and contains -+ * information for color volume transform - application 4 of -+ * SMPTE 2094-40:2016 standard. -+ */ -+ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, -+ -+ /** - * The number of side data types. - * This is not part of the public API/ABI in the sense that it may - * change when new side data types are added. -@@ -305,11 +314,7 @@ - - typedef struct AVPacketSideData { - uint8_t *data; --#if FF_API_BUFFER_SIZE_T -- int size; --#else - size_t size; --#endif - enum AVPacketSideDataType type; - } AVPacketSideData; - -@@ -388,15 +393,29 @@ - - int64_t pos; ///< byte position in stream, -1 if unknown - --#if FF_API_CONVERGENCE_DURATION - /** -- * @deprecated Same as the duration field, but as int64_t. This was required -- * for Matroska subtitles, whose duration values could overflow when the -- * duration field was still an int. -+ * for some private data of the user - */ -- attribute_deprecated -- int64_t convergence_duration; --#endif -+ void *opaque; -+ -+ /** -+ * AVBufferRef for free use by the API user. FFmpeg will never check the -+ * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when -+ * the packet is unreferenced. av_packet_copy_props() calls create a new -+ * reference with av_buffer_ref() for the target packet's opaque_ref field. -+ * -+ * This is unrelated to the opaque field, although it serves a similar -+ * purpose. -+ */ -+ AVBufferRef *opaque_ref; -+ -+ /** -+ * Time base of the packet's timestamps. -+ * In the future, this field may be set on packets output by encoders or -+ * demuxers, but its value will be by default ignored on input to decoders -+ * or muxers. -+ */ -+ AVRational time_base; - } AVPacket; - - #if FF_API_INIT_PACKET -@@ -429,8 +448,13 @@ - #define AV_PKT_FLAG_DISPOSABLE 0x0010 - - enum AVSideDataParamChangeFlags { -+#if FF_API_OLD_CHANNEL_LAYOUT -+ /** -+ * @deprecated those are not used by any decoder -+ */ - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, - AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002, -+#endif - AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004, - AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008, - }; -@@ -529,45 +553,6 @@ - */ - int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size); - --#if FF_API_AVPACKET_OLD_API --/** -- * @warning This is a hack - the packet memory allocation stuff is broken. The -- * packet is allocated if it was not really allocated. -- * -- * @deprecated Use av_packet_ref or av_packet_make_refcounted -- */ --attribute_deprecated --int av_dup_packet(AVPacket *pkt); --/** -- * Copy packet, including contents -- * -- * @return 0 on success, negative AVERROR on fail -- * -- * @deprecated Use av_packet_ref -- */ --attribute_deprecated --int av_copy_packet(AVPacket *dst, const AVPacket *src); -- --/** -- * Copy packet side data -- * -- * @return 0 on success, negative AVERROR on fail -- * -- * @deprecated Use av_packet_copy_props -- */ --attribute_deprecated --int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); -- --/** -- * Free a packet. -- * -- * @deprecated Use av_packet_unref -- * -- * @param pkt packet to free -- */ --attribute_deprecated --void av_free_packet(AVPacket *pkt); --#endif - /** - * Allocate new information of a packet. - * -@@ -577,11 +562,7 @@ - * @return pointer to fresh allocated data or NULL otherwise - */ - uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, --#if FF_API_BUFFER_SIZE_T -- int size); --#else - size_t size); --#endif - - /** - * Wrap an existing array as a packet side data. -@@ -608,11 +589,7 @@ - * @return 0 on success, < 0 on failure - */ - int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, --#if FF_API_BUFFER_SIZE_T -- int size); --#else - size_t size); --#endif - - /** - * Get side information from packet. -@@ -624,19 +601,7 @@ - * @return pointer to data if present or NULL otherwise - */ - uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, --#if FF_API_BUFFER_SIZE_T -- int *size); --#else - size_t *size); --#endif -- --#if FF_API_MERGE_SD_API --attribute_deprecated --int av_packet_merge_side_data(AVPacket *pkt); -- --attribute_deprecated --int av_packet_split_side_data(AVPacket *pkt); --#endif - - const char *av_packet_side_data_name(enum AVPacketSideDataType type); - -@@ -647,11 +612,7 @@ - * @param size pointer to store the size of the returned data - * @return pointer to data if successful, NULL otherwise - */ --#if FF_API_BUFFER_SIZE_T --uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size); --#else - uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size); --#endif - /** - * Unpack a dictionary from side_data. - * -@@ -660,12 +621,8 @@ - * @param dict the metadata storage dictionary - * @return 0 on success, < 0 on failure - */ --#if FF_API_BUFFER_SIZE_T --int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict); --#else - int av_packet_unpack_dictionary(const uint8_t *data, size_t size, - AVDictionary **dict); --#endif - - /** - * Convenience function to free all the side data stored. -diff -Naur a/media/ffvpx/libavcodec/packet_internal.h b/media/ffvpx/libavcodec/packet_internal.h ---- a/media/ffvpx/libavcodec/packet_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/packet_internal.h 2023-04-06 12:49:40.255394971 +0200 -@@ -23,16 +23,19 @@ - - #include "packet.h" - --typedef struct PacketList { -+typedef struct PacketListEntry { -+ struct PacketListEntry *next; - AVPacket pkt; -- struct PacketList *next; -+} PacketListEntry; -+ -+typedef struct PacketList { -+ PacketListEntry *head, *tail; - } PacketList; - - /** - * Append an AVPacket to the list. - * -- * @param head List head element -- * @param tail List tail element -+ * @param list A PacketList - * @param pkt The packet being appended. The data described in it will - * be made reference counted if it isn't already. - * @param copy A callback to copy the contents of the packet to the list. -@@ -41,8 +44,7 @@ - * @return 0 on success, negative AVERROR value on failure. On failure, - the packet and the list are unchanged. - */ --int avpriv_packet_list_put(PacketList **head, PacketList **tail, -- AVPacket *pkt, -+int avpriv_packet_list_put(PacketList *list, AVPacket *pkt, - int (*copy)(AVPacket *dst, const AVPacket *src), - int flags); - -@@ -52,22 +54,17 @@ - * @note The pkt will be overwritten completely on success. The caller - * owns the packet and must unref it by itself. - * -- * @param head List head element -- * @param tail List tail element -+ * @param head A pointer to a PacketList struct - * @param pkt Pointer to an AVPacket struct - * @return 0 on success, and a packet is returned. AVERROR(EAGAIN) if - * the list was empty. - */ --int avpriv_packet_list_get(PacketList **head, PacketList **tail, -- AVPacket *pkt); -+int avpriv_packet_list_get(PacketList *list, AVPacket *pkt); - - /** - * Wipe the list and unref all the packets in it. -- * -- * @param head List head element -- * @param tail List tail element - */ --void avpriv_packet_list_free(PacketList **head, PacketList **tail); -+void avpriv_packet_list_free(PacketList *list); - - int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type); - -diff -Naur a/media/ffvpx/libavcodec/parser.c b/media/ffvpx/libavcodec/parser.c ---- a/media/ffvpx/libavcodec/parser.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/parser.c 2023-04-06 12:49:40.255394971 +0200 -@@ -25,10 +25,8 @@ - #include - - #include "libavutil/avassert.h" --#include "libavutil/internal.h" - #include "libavutil/mem.h" - --#include "internal.h" - #include "parser.h" - - AVCodecParserContext *av_parser_init(int codec_id) -@@ -46,7 +44,9 @@ - parser->codec_ids[1] == codec_id || - parser->codec_ids[2] == codec_id || - parser->codec_ids[3] == codec_id || -- parser->codec_ids[4] == codec_id) -+ parser->codec_ids[4] == codec_id || -+ parser->codec_ids[5] == codec_id || -+ parser->codec_ids[6] == codec_id) - goto found; - } - return NULL; -@@ -55,7 +55,7 @@ - s = av_mallocz(sizeof(AVCodecParserContext)); - if (!s) - goto err_out; -- s->parser = (AVCodecParser*)parser; -+ s->parser = parser; - s->priv_data = av_mallocz(parser->priv_data_size); - if (!s->priv_data) - goto err_out; -@@ -67,11 +67,6 @@ - goto err_out; - } - s->key_frame = -1; --#if FF_API_CONVERGENCE_DURATION --FF_DISABLE_DEPRECATION_WARNINGS -- s->convergence_duration = 0; --FF_ENABLE_DEPRECATION_WARNINGS --#endif - s->dts_sync_point = INT_MIN; - s->dts_ref_dts_delta = INT_MIN; - s->pts_dts_delta = INT_MIN; -@@ -132,7 +127,9 @@ - avctx->codec_id == s->parser->codec_ids[1] || - avctx->codec_id == s->parser->codec_ids[2] || - avctx->codec_id == s->parser->codec_ids[3] || -- avctx->codec_id == s->parser->codec_ids[4]); -+ avctx->codec_id == s->parser->codec_ids[4] || -+ avctx->codec_id == s->parser->codec_ids[5] || -+ avctx->codec_id == s->parser->codec_ids[6]); - - if (!(s->flags & PARSER_FLAG_FETCHED_OFFSET)) { - s->next_frame_offset = -@@ -189,42 +186,6 @@ - return index; - } - --#if FF_API_PARSER_CHANGE --int av_parser_change(AVCodecParserContext *s, AVCodecContext *avctx, -- uint8_t **poutbuf, int *poutbuf_size, -- const uint8_t *buf, int buf_size, int keyframe) --{ -- if (s && s->parser->split) { -- if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER || -- avctx->flags2 & AV_CODEC_FLAG2_LOCAL_HEADER) { -- int i = s->parser->split(avctx, buf, buf_size); -- buf += i; -- buf_size -= i; -- } -- } -- -- /* cast to avoid warning about discarding qualifiers */ -- *poutbuf = (uint8_t *) buf; -- *poutbuf_size = buf_size; -- if (avctx->extradata) { -- if (keyframe && (avctx->flags2 & AV_CODEC_FLAG2_LOCAL_HEADER)) { -- int size = buf_size + avctx->extradata_size; -- -- *poutbuf_size = size; -- *poutbuf = av_malloc(size + AV_INPUT_BUFFER_PADDING_SIZE); -- if (!*poutbuf) -- return AVERROR(ENOMEM); -- -- memcpy(*poutbuf, avctx->extradata, avctx->extradata_size); -- memcpy(*poutbuf + avctx->extradata_size, buf, -- buf_size + AV_INPUT_BUFFER_PADDING_SIZE); -- return 1; -- } -- } -- -- return 0; --} --#endif - void av_parser_close(AVCodecParserContext *s) - { - if (s) { -@@ -326,17 +287,3 @@ - - av_freep(&pc->buffer); - } -- --int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, int buf_size) --{ -- uint32_t state = -1; -- const uint8_t *ptr = buf, *end = buf + buf_size; -- -- while (ptr < end) { -- ptr = avpriv_find_start_code(ptr, end, &state); -- if (state == 0x1B3 || state == 0x1B6) -- return ptr - 4 - buf; -- } -- -- return 0; --} -diff -Naur a/media/ffvpx/libavcodec/parser.h b/media/ffvpx/libavcodec/parser.h ---- a/media/ffvpx/libavcodec/parser.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/parser.h 2023-04-06 12:50:06.973471134 +0200 -@@ -45,8 +45,6 @@ - * AVERROR(ENOMEM) if there was a memory allocation error - */ - int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size); --int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf, -- int buf_size); - void ff_parse_close(AVCodecParserContext *s); - - /** -diff -Naur a/media/ffvpx/libavcodec/parser_list.c b/media/ffvpx/libavcodec/parser_list.c ---- a/media/ffvpx/libavcodec/parser_list.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/parser_list.c 2023-04-06 12:49:45.623611208 +0200 -@@ -1,3 +1,5 @@ -+#include "config_components.h" -+ - static const AVCodecParser * const parser_list[] = { - #if CONFIG_VP8_PARSER - &ff_vp8_parser, -diff -Naur a/media/ffvpx/libavcodec/parsers.c b/media/ffvpx/libavcodec/parsers.c ---- a/media/ffvpx/libavcodec/parsers.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/parsers.c 2023-04-06 12:50:06.973471134 +0200 -@@ -18,98 +18,69 @@ - - #include - --#include "libavutil/thread.h" -- - #include "avcodec.h" --#include "version.h" - --extern AVCodecParser ff_aac_parser; --extern AVCodecParser ff_aac_latm_parser; --extern AVCodecParser ff_ac3_parser; --extern AVCodecParser ff_adx_parser; --extern AVCodecParser ff_av1_parser; --extern AVCodecParser ff_avs2_parser; --extern AVCodecParser ff_avs3_parser; --extern AVCodecParser ff_bmp_parser; --extern AVCodecParser ff_cavsvideo_parser; --extern AVCodecParser ff_cook_parser; --extern AVCodecParser ff_cri_parser; --extern AVCodecParser ff_dca_parser; --extern AVCodecParser ff_dirac_parser; --extern AVCodecParser ff_dnxhd_parser; --extern AVCodecParser ff_dolby_e_parser; --extern AVCodecParser ff_dpx_parser; --extern AVCodecParser ff_dvaudio_parser; --extern AVCodecParser ff_dvbsub_parser; --extern AVCodecParser ff_dvdsub_parser; --extern AVCodecParser ff_dvd_nav_parser; --extern AVCodecParser ff_flac_parser; --extern AVCodecParser ff_g723_1_parser; --extern AVCodecParser ff_g729_parser; --extern AVCodecParser ff_gif_parser; --extern AVCodecParser ff_gsm_parser; --extern AVCodecParser ff_h261_parser; --extern AVCodecParser ff_h263_parser; --extern AVCodecParser ff_h264_parser; --extern AVCodecParser ff_hevc_parser; --extern AVCodecParser ff_ipu_parser; --extern AVCodecParser ff_jpeg2000_parser; --extern AVCodecParser ff_mjpeg_parser; --extern AVCodecParser ff_mlp_parser; --extern AVCodecParser ff_mpeg4video_parser; --extern AVCodecParser ff_mpegaudio_parser; --extern AVCodecParser ff_mpegvideo_parser; --extern AVCodecParser ff_opus_parser; --extern AVCodecParser ff_png_parser; --extern AVCodecParser ff_pnm_parser; --extern AVCodecParser ff_rv30_parser; --extern AVCodecParser ff_rv40_parser; --extern AVCodecParser ff_sbc_parser; --extern AVCodecParser ff_sipr_parser; --extern AVCodecParser ff_tak_parser; --extern AVCodecParser ff_vc1_parser; --extern AVCodecParser ff_vorbis_parser; --extern AVCodecParser ff_vp3_parser; --extern AVCodecParser ff_vp8_parser; --extern AVCodecParser ff_vp9_parser; --extern AVCodecParser ff_webp_parser; --extern AVCodecParser ff_xbm_parser; --extern AVCodecParser ff_xma_parser; -+extern const AVCodecParser ff_aac_parser; -+extern const AVCodecParser ff_aac_latm_parser; -+extern const AVCodecParser ff_ac3_parser; -+extern const AVCodecParser ff_adx_parser; -+extern const AVCodecParser ff_amr_parser; -+extern const AVCodecParser ff_av1_parser; -+extern const AVCodecParser ff_avs2_parser; -+extern const AVCodecParser ff_avs3_parser; -+extern const AVCodecParser ff_bmp_parser; -+extern const AVCodecParser ff_cavsvideo_parser; -+extern const AVCodecParser ff_cook_parser; -+extern const AVCodecParser ff_cri_parser; -+extern const AVCodecParser ff_dca_parser; -+extern const AVCodecParser ff_dirac_parser; -+extern const AVCodecParser ff_dnxhd_parser; -+extern const AVCodecParser ff_dolby_e_parser; -+extern const AVCodecParser ff_dpx_parser; -+extern const AVCodecParser ff_dvaudio_parser; -+extern const AVCodecParser ff_dvbsub_parser; -+extern const AVCodecParser ff_dvdsub_parser; -+extern const AVCodecParser ff_dvd_nav_parser; -+extern const AVCodecParser ff_flac_parser; -+extern const AVCodecParser ff_ftr_parser; -+extern const AVCodecParser ff_g723_1_parser; -+extern const AVCodecParser ff_g729_parser; -+extern const AVCodecParser ff_gif_parser; -+extern const AVCodecParser ff_gsm_parser; -+extern const AVCodecParser ff_h261_parser; -+extern const AVCodecParser ff_h263_parser; -+extern const AVCodecParser ff_h264_parser; -+extern const AVCodecParser ff_hevc_parser; -+extern const AVCodecParser ff_hdr_parser; -+extern const AVCodecParser ff_ipu_parser; -+extern const AVCodecParser ff_jpeg2000_parser; -+extern const AVCodecParser ff_misc4_parser; -+extern const AVCodecParser ff_mjpeg_parser; -+extern const AVCodecParser ff_mlp_parser; -+extern const AVCodecParser ff_mpeg4video_parser; -+extern const AVCodecParser ff_mpegaudio_parser; -+extern const AVCodecParser ff_mpegvideo_parser; -+extern const AVCodecParser ff_opus_parser; -+extern const AVCodecParser ff_png_parser; -+extern const AVCodecParser ff_pnm_parser; -+extern const AVCodecParser ff_qoi_parser; -+extern const AVCodecParser ff_rv30_parser; -+extern const AVCodecParser ff_rv40_parser; -+extern const AVCodecParser ff_sbc_parser; -+extern const AVCodecParser ff_sipr_parser; -+extern const AVCodecParser ff_tak_parser; -+extern const AVCodecParser ff_vc1_parser; -+extern const AVCodecParser ff_vorbis_parser; -+extern const AVCodecParser ff_vp3_parser; -+extern const AVCodecParser ff_vp8_parser; -+extern const AVCodecParser ff_vp9_parser; -+extern const AVCodecParser ff_webp_parser; -+extern const AVCodecParser ff_xbm_parser; -+extern const AVCodecParser ff_xma_parser; -+extern const AVCodecParser ff_xwd_parser; - - #include "libavcodec/parser_list.c" - --#if FF_API_NEXT --FF_DISABLE_DEPRECATION_WARNINGS --static AVOnce av_parser_next_init = AV_ONCE_INIT; -- --static void av_parser_init_next(void) --{ -- AVCodecParser *prev = NULL, *p; -- int i = 0; -- while ((p = (AVCodecParser*)parser_list[i++])) { -- if (prev) -- prev->next = p; -- prev = p; -- } --} -- --AVCodecParser *av_parser_next(const AVCodecParser *p) --{ -- ff_thread_once(&av_parser_next_init, av_parser_init_next); -- -- if (p) -- return p->next; -- else -- return (AVCodecParser*)parser_list[0]; --} -- --void av_register_codec_parser(AVCodecParser *parser) --{ -- ff_thread_once(&av_parser_next_init, av_parser_init_next); --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - const AVCodecParser *av_parser_iterate(void **opaque) - { - uintptr_t i = (uintptr_t)*opaque; -diff -Naur a/media/ffvpx/libavcodec/pixblockdsp.h b/media/ffvpx/libavcodec/pixblockdsp.h ---- a/media/ffvpx/libavcodec/pixblockdsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/pixblockdsp.h 2023-04-06 12:50:06.973471134 +0200 -@@ -52,6 +52,8 @@ - unsigned high_bit_depth); - void ff_pixblockdsp_init_ppc(PixblockDSPContext *c, AVCodecContext *avctx, - unsigned high_bit_depth); -+void ff_pixblockdsp_init_riscv(PixblockDSPContext *c, AVCodecContext *avctx, -+ unsigned high_bit_depth); - void ff_pixblockdsp_init_x86(PixblockDSPContext *c, AVCodecContext *avctx, - unsigned high_bit_depth); - void ff_pixblockdsp_init_mips(PixblockDSPContext *c, AVCodecContext *avctx, -diff -Naur a/media/ffvpx/libavcodec/profiles.c b/media/ffvpx/libavcodec/profiles.c ---- a/media/ffvpx/libavcodec/profiles.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/profiles.c 2023-04-06 12:50:24.492176543 +0200 -@@ -85,6 +85,7 @@ - { FF_PROFILE_HEVC_MAIN_10, "Main 10" }, - { FF_PROFILE_HEVC_MAIN_STILL_PICTURE, "Main Still Picture" }, - { FF_PROFILE_HEVC_REXT, "Rext" }, -+ { FF_PROFILE_HEVC_SCC, "Scc" }, - { FF_PROFILE_UNKNOWN }, - }; - -diff -Naur a/media/ffvpx/libavcodec/pthread.c b/media/ffvpx/libavcodec/pthread.c ---- a/media/ffvpx/libavcodec/pthread.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/pthread.c 2023-04-06 12:50:24.492176543 +0200 -@@ -29,8 +29,10 @@ - * @see doc/multithreading.txt - */ - -+#include "libavutil/thread.h" -+ - #include "avcodec.h" --#include "internal.h" -+#include "codec_internal.h" - #include "pthread_internal.h" - #include "thread.h" - -@@ -46,7 +48,6 @@ - static void validate_thread_parameters(AVCodecContext *avctx) - { - int frame_threading_supported = (avctx->codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) -- && !(avctx->flags & AV_CODEC_FLAG_TRUNCATED) - && !(avctx->flags & AV_CODEC_FLAG_LOW_DELAY) - && !(avctx->flags2 & AV_CODEC_FLAG2_CHUNKS); - if (avctx->thread_count == 1) { -@@ -56,7 +57,7 @@ - } else if (avctx->codec->capabilities & AV_CODEC_CAP_SLICE_THREADS && - avctx->thread_type & FF_THREAD_SLICE) { - avctx->active_thread_type = FF_THREAD_SLICE; -- } else if (!(avctx->codec->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) { -+ } else if (!(ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) { - avctx->thread_count = 1; - avctx->active_thread_type = 0; - } -@@ -86,3 +87,39 @@ - else - ff_slice_thread_free(avctx); - } -+ -+av_cold void ff_pthread_free(void *obj, const unsigned offsets[]) -+{ -+ unsigned cnt = *(unsigned*)((char*)obj + offsets[0]); -+ const unsigned *cur_offset = offsets; -+ -+ *(unsigned*)((char*)obj + offsets[0]) = 0; -+ -+ for (; *(++cur_offset) != THREAD_SENTINEL && cnt; cnt--) -+ pthread_mutex_destroy((pthread_mutex_t*)((char*)obj + *cur_offset)); -+ for (; *(++cur_offset) != THREAD_SENTINEL && cnt; cnt--) -+ pthread_cond_destroy ((pthread_cond_t *)((char*)obj + *cur_offset)); -+} -+ -+av_cold int ff_pthread_init(void *obj, const unsigned offsets[]) -+{ -+ const unsigned *cur_offset = offsets; -+ unsigned cnt = 0; -+ int err; -+ -+#define PTHREAD_INIT_LOOP(type) \ -+ for (; *(++cur_offset) != THREAD_SENTINEL; cnt++) { \ -+ pthread_ ## type ## _t *dst = (void*)((char*)obj + *cur_offset); \ -+ err = pthread_ ## type ## _init(dst, NULL); \ -+ if (err) { \ -+ err = AVERROR(err); \ -+ goto fail; \ -+ } \ -+ } -+ PTHREAD_INIT_LOOP(mutex) -+ PTHREAD_INIT_LOOP(cond) -+ -+fail: -+ *(unsigned*)((char*)obj + offsets[0]) = cnt; -+ return err; -+} -diff -Naur a/media/ffvpx/libavcodec/pthread_frame.c b/media/ffvpx/libavcodec/pthread_frame.c ---- a/media/ffvpx/libavcodec/pthread_frame.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/pthread_frame.c 2023-04-06 12:50:24.492176543 +0200 -@@ -28,11 +28,14 @@ - #include - - #include "avcodec.h" -+#include "codec_internal.h" -+#include "decode.h" - #include "hwconfig.h" - #include "internal.h" - #include "pthread_internal.h" - #include "thread.h" --#include "version.h" -+#include "threadframe.h" -+#include "version_major.h" - - #include "libavutil/avassert.h" - #include "libavutil/buffer.h" -@@ -66,7 +69,7 @@ - - enum { - UNINITIALIZED, ///< Thread has not been created, AVCodec->close mustn't be called -- NEEDS_CLOSE, ///< AVCodec->close needs to be called -+ NEEDS_CLOSE, ///< FFCodec->close needs to be called - INITIALIZED, ///< Thread has been properly set up - }; - -@@ -96,22 +99,6 @@ - - atomic_int state; - --#if FF_API_THREAD_SAFE_CALLBACKS -- /** -- * Array of frames passed to ff_thread_release_buffer(). -- * Frames are released after all threads referencing them are finished. -- */ -- AVFrame **released_buffers; -- int num_released_buffers; -- int released_buffers_allocated; -- -- AVFrame *requested_frame; ///< AVFrame the codec passed to get_buffer() -- int requested_flags; ///< flags passed to get_buffer() for requested_frame -- -- const enum AVPixelFormat *available_formats; ///< Format array for get_format() -- enum AVPixelFormat result_format; ///< get_format() result --#endif -- - int die; ///< Set when the thread should exit. - - int hwaccel_serializing; -@@ -145,12 +132,13 @@ - * Set for the first N packets, where N is the number of threads. - * While it is set, ff_thread_en/decode_frame won't return any results. - */ --} FrameThreadContext; - --#if FF_API_THREAD_SAFE_CALLBACKS --#define THREAD_SAFE_CALLBACKS(avctx) \ --((avctx)->thread_safe_callbacks || (avctx)->get_buffer2 == avcodec_default_get_buffer2) --#endif -+ /* hwaccel state is temporarily stored here in order to transfer its ownership -+ * to the next decoding thread without the need for extra synchronization */ -+ const AVHWAccel *stash_hwaccel; -+ void *stash_hwaccel_context; -+ void *stash_hwaccel_priv; -+} FrameThreadContext; - - static void async_lock(FrameThreadContext *fctx) - { -@@ -170,6 +158,17 @@ - pthread_mutex_unlock(&fctx->async_mutex); - } - -+static void thread_set_name(PerThreadContext *p) -+{ -+ AVCodecContext *avctx = p->avctx; -+ int idx = p - p->parent->threads; -+ char name[16]; -+ -+ snprintf(name, sizeof(name), "av:%.7s:df%d", avctx->codec->name, idx); -+ -+ ff_thread_setname(name); -+} -+ - /** - * Codec worker thread. - * -@@ -181,7 +180,9 @@ - { - PerThreadContext *p = arg; - AVCodecContext *avctx = p->avctx; -- const AVCodec *codec = avctx->codec; -+ const FFCodec *codec = ffcodec(avctx->codec); -+ -+ thread_set_name(p); - - pthread_mutex_lock(&p->mutex); - while (1) { -@@ -190,14 +191,8 @@ - - if (p->die) break; - --FF_DISABLE_DEPRECATION_WARNINGS -- if (!codec->update_thread_context --#if FF_API_THREAD_SAFE_CALLBACKS -- && THREAD_SAFE_CALLBACKS(avctx) --#endif -- ) -+ if (!codec->update_thread_context) - ff_thread_finish_setup(avctx); --FF_ENABLE_DEPRECATION_WARNINGS - - /* If a decoder supports hwaccel, then it must call ff_get_format(). - * Since that call must happen before ff_thread_finish_setup(), the -@@ -216,22 +211,26 @@ - - av_frame_unref(p->frame); - p->got_frame = 0; -- p->result = codec->decode(avctx, p->frame, &p->got_frame, p->avpkt); -+ p->result = codec->cb.decode(avctx, p->frame, &p->got_frame, p->avpkt); - -- if ((p->result < 0 || !p->got_frame) && p->frame->buf[0]) { -- if (avctx->codec->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) -- av_log(avctx, AV_LOG_ERROR, "A frame threaded decoder did not " -- "free the frame on failure. This is a bug, please report it.\n"); -- av_frame_unref(p->frame); -- } -+ if ((p->result < 0 || !p->got_frame) && p->frame->buf[0]) -+ ff_thread_release_buffer(avctx, p->frame); - - if (atomic_load(&p->state) == STATE_SETTING_UP) - ff_thread_finish_setup(avctx); - - if (p->hwaccel_serializing) { -+ /* wipe hwaccel state to avoid stale pointers lying around; -+ * the state was transferred to FrameThreadContext in -+ * ff_thread_finish_setup(), so nothing is leaked */ -+ avctx->hwaccel = NULL; -+ avctx->hwaccel_context = NULL; -+ avctx->internal->hwaccel_priv_data = NULL; -+ - p->hwaccel_serializing = 0; - pthread_mutex_unlock(&p->parent->hwaccel_mutex); - } -+ av_assert0(!avctx->hwaccel); - - if (p->async_serializing) { - p->async_serializing = 0; -@@ -262,9 +261,10 @@ - */ - static int update_context_from_thread(AVCodecContext *dst, AVCodecContext *src, int for_user) - { -+ const FFCodec *const codec = ffcodec(dst->codec); - int err = 0; - -- if (dst != src && (for_user || src->codec->update_thread_context)) { -+ if (dst != src && (for_user || codec->update_thread_context)) { - dst->time_base = src->time_base; - dst->framerate = src->framerate; - dst->width = src->width; -@@ -277,6 +277,7 @@ - - dst->has_b_frames = src->has_b_frames; - dst->idct_algo = src->idct_algo; -+ dst->properties = src->properties; - - dst->bits_per_coded_sample = src->bits_per_coded_sample; - dst->sample_aspect_ratio = src->sample_aspect_ratio; -@@ -293,14 +294,17 @@ - dst->color_range = src->color_range; - dst->chroma_sample_location = src->chroma_sample_location; - -- dst->hwaccel = src->hwaccel; -- dst->hwaccel_context = src->hwaccel_context; -- -- dst->channels = src->channels; - dst->sample_rate = src->sample_rate; - dst->sample_fmt = src->sample_fmt; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ dst->channels = src->channels; - dst->channel_layout = src->channel_layout; -- dst->internal->hwaccel_priv_data = src->internal->hwaccel_priv_data; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ err = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); -+ if (err < 0) -+ return err; - - if (!!dst->hw_frames_ctx != !!src->hw_frames_ctx || - (dst->hw_frames_ctx && dst->hw_frames_ctx->data != src->hw_frames_ctx->data)) { -@@ -321,14 +325,11 @@ - } - - if (for_user) { --#if FF_API_CODED_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- dst->coded_frame = src->coded_frame; --FF_ENABLE_DEPRECATION_WARNINGS --#endif -+ if (codec->update_thread_context_for_user) -+ err = codec->update_thread_context_for_user(dst, src); - } else { -- if (dst->codec->update_thread_context) -- err = dst->codec->update_thread_context(dst, src); -+ if (codec->update_thread_context) -+ err = codec->update_thread_context(dst, src); - } - - return err; -@@ -343,6 +344,8 @@ - */ - static int update_context_from_user(AVCodecContext *dst, AVCodecContext *src) - { -+ int err; -+ - dst->flags = src->flags; - - dst->draw_horiz_band= src->draw_horiz_band; -@@ -359,11 +362,15 @@ - dst->skip_idct = src->skip_idct; - dst->skip_frame = src->skip_frame; - -+ dst->frame_num = src->frame_num; -+#if FF_API_AVCTX_FRAME_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS - dst->frame_number = src->frame_number; -- dst->reordered_opaque = src->reordered_opaque; --#if FF_API_THREAD_SAFE_CALLBACKS -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+#if FF_API_REORDERED_OPAQUE - FF_DISABLE_DEPRECATION_WARNINGS -- dst->thread_safe_callbacks = src->thread_safe_callbacks; -+ dst->reordered_opaque = src->reordered_opaque; - FF_ENABLE_DEPRECATION_WARNINGS - #endif - -@@ -378,31 +385,14 @@ - src->slice_count * sizeof(*dst->slice_offset)); - } - dst->slice_count = src->slice_count; -- return 0; --} -- --#if FF_API_THREAD_SAFE_CALLBACKS --/// Releases the buffers that this decoding thread was the last user of. --static void release_delayed_buffers(PerThreadContext *p) --{ -- FrameThreadContext *fctx = p->parent; -- -- while (p->num_released_buffers > 0) { -- AVFrame *f; - -- pthread_mutex_lock(&fctx->buffer_mutex); -- -- // fix extended data in case the caller screwed it up -- av_assert0(p->avctx->codec_type == AVMEDIA_TYPE_VIDEO || -- p->avctx->codec_type == AVMEDIA_TYPE_AUDIO); -- f = p->released_buffers[--p->num_released_buffers]; -- f->extended_data = f->data; -- av_frame_unref(f); -+ av_packet_unref(dst->internal->last_pkt_props); -+ err = av_packet_copy_props(dst->internal->last_pkt_props, src->internal->last_pkt_props); -+ if (err < 0) -+ return err; - -- pthread_mutex_unlock(&fctx->buffer_mutex); -- } -+ return 0; - } --#endif - - static int submit_packet(PerThreadContext *p, AVCodecContext *user_avctx, - AVPacket *avpkt) -@@ -426,10 +416,6 @@ - (p->avctx->debug & FF_DEBUG_THREADS) != 0, - memory_order_relaxed); - --#if FF_API_THREAD_SAFE_CALLBACKS -- release_delayed_buffers(p); --#endif -- - if (prev_thread) { - int err; - if (atomic_load(&prev_thread->state) == STATE_SETTING_UP) { -@@ -446,6 +432,12 @@ - } - } - -+ /* transfer the stashed hwaccel state, if any */ -+ av_assert0(!p->avctx->hwaccel); -+ FFSWAP(const AVHWAccel*, p->avctx->hwaccel, fctx->stash_hwaccel); -+ FFSWAP(void*, p->avctx->hwaccel_context, fctx->stash_hwaccel_context); -+ FFSWAP(void*, p->avctx->internal->hwaccel_priv_data, fctx->stash_hwaccel_priv); -+ - av_packet_unref(p->avpkt); - ret = av_packet_ref(p->avpkt, avpkt); - if (ret < 0) { -@@ -458,44 +450,6 @@ - pthread_cond_signal(&p->input_cond); - pthread_mutex_unlock(&p->mutex); - --#if FF_API_THREAD_SAFE_CALLBACKS --FF_DISABLE_DEPRECATION_WARNINGS -- /* -- * If the client doesn't have a thread-safe get_buffer(), -- * then decoding threads call back to the main thread, -- * and it calls back to the client here. -- */ -- -- if (!p->avctx->thread_safe_callbacks && ( -- p->avctx->get_format != avcodec_default_get_format || -- p->avctx->get_buffer2 != avcodec_default_get_buffer2)) { -- while (atomic_load(&p->state) != STATE_SETUP_FINISHED && atomic_load(&p->state) != STATE_INPUT_READY) { -- int call_done = 1; -- pthread_mutex_lock(&p->progress_mutex); -- while (atomic_load(&p->state) == STATE_SETTING_UP) -- pthread_cond_wait(&p->progress_cond, &p->progress_mutex); -- -- switch (atomic_load_explicit(&p->state, memory_order_acquire)) { -- case STATE_GET_BUFFER: -- p->result = ff_get_buffer(p->avctx, p->requested_frame, p->requested_flags); -- break; -- case STATE_GET_FORMAT: -- p->result_format = ff_get_format(p->avctx, p->available_formats); -- break; -- default: -- call_done = 0; -- break; -- } -- if (call_done) { -- atomic_store(&p->state, STATE_SETTING_UP); -- pthread_cond_signal(&p->progress_cond); -- } -- pthread_mutex_unlock(&p->progress_mutex); -- } -- } --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - fctx->prev_thread = p; - fctx->next_decoding++; - -@@ -610,7 +564,7 @@ - pthread_mutex_unlock(&p->progress_mutex); - } - --void ff_thread_await_progress(ThreadFrame *f, int n, int field) -+void ff_thread_await_progress(const ThreadFrame *f, int n, int field) - { - PerThreadContext *p; - atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL; -@@ -649,6 +603,14 @@ - async_lock(p->parent); - } - -+ /* save hwaccel state for passing to the next thread; -+ * this is done here so that this worker thread can wipe its own hwaccel -+ * state after decoding, without requiring synchronization */ -+ av_assert0(!p->parent->stash_hwaccel); -+ p->parent->stash_hwaccel = avctx->hwaccel; -+ p->parent->stash_hwaccel_context = avctx->hwaccel_context; -+ p->parent->stash_hwaccel_priv = avctx->internal->hwaccel_priv_data; -+ - pthread_mutex_lock(&p->progress_mutex); - if(atomic_load(&p->state) == STATE_SETUP_FINISHED){ - av_log(avctx, AV_LOG_WARNING, "Multiple ff_thread_finish_setup() calls\n"); -@@ -682,81 +644,26 @@ - async_lock(fctx); - } - --#define SENTINEL 0 // This forbids putting a mutex/condition variable at the front. --#define OFFSET_ARRAY(...) __VA_ARGS__, SENTINEL --#define DEFINE_OFFSET_ARRAY(type, name, mutexes, conds) \ --static const unsigned name ## _offsets[] = { offsetof(type, pthread_init_cnt),\ -- OFFSET_ARRAY mutexes, \ -- OFFSET_ARRAY conds } -- - #define OFF(member) offsetof(FrameThreadContext, member) --DEFINE_OFFSET_ARRAY(FrameThreadContext, thread_ctx, -+DEFINE_OFFSET_ARRAY(FrameThreadContext, thread_ctx, pthread_init_cnt, - (OFF(buffer_mutex), OFF(hwaccel_mutex), OFF(async_mutex)), - (OFF(async_cond))); - #undef OFF - - #define OFF(member) offsetof(PerThreadContext, member) --DEFINE_OFFSET_ARRAY(PerThreadContext, per_thread, -+DEFINE_OFFSET_ARRAY(PerThreadContext, per_thread, pthread_init_cnt, - (OFF(progress_mutex), OFF(mutex)), - (OFF(input_cond), OFF(progress_cond), OFF(output_cond))); - #undef OFF - --static av_cold void free_pthread(void *obj, const unsigned offsets[]) --{ -- unsigned cnt = *(unsigned*)((char*)obj + offsets[0]); -- const unsigned *cur_offset = offsets; -- -- for (; *(++cur_offset) != SENTINEL && cnt; cnt--) -- pthread_mutex_destroy((pthread_mutex_t*)((char*)obj + *cur_offset)); -- for (; *(++cur_offset) != SENTINEL && cnt; cnt--) -- pthread_cond_destroy ((pthread_cond_t *)((char*)obj + *cur_offset)); --} -- --static av_cold int init_pthread(void *obj, const unsigned offsets[]) --{ -- const unsigned *cur_offset = offsets; -- unsigned cnt = 0; -- int err; -- --#define PTHREAD_INIT_LOOP(type) \ -- for (; *(++cur_offset) != SENTINEL; cnt++) { \ -- pthread_ ## type ## _t *dst = (void*)((char*)obj + *cur_offset); \ -- err = pthread_ ## type ## _init(dst, NULL); \ -- if (err) { \ -- err = AVERROR(err); \ -- goto fail; \ -- } \ -- } -- PTHREAD_INIT_LOOP(mutex) -- PTHREAD_INIT_LOOP(cond) -- --fail: -- *(unsigned*)((char*)obj + offsets[0]) = cnt; -- return err; --} -- - void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) - { - FrameThreadContext *fctx = avctx->internal->thread_ctx; -- const AVCodec *codec = avctx->codec; -+ const FFCodec *codec = ffcodec(avctx->codec); - int i; - - park_frame_worker_threads(fctx, thread_count); - -- if (fctx->prev_thread && avctx->internal->hwaccel_priv_data != -- fctx->prev_thread->avctx->internal->hwaccel_priv_data) { -- if (update_context_from_thread(avctx, fctx->prev_thread->avctx, 1) < 0) { -- av_log(avctx, AV_LOG_ERROR, "Failed to update user thread.\n"); -- } -- } -- -- if (fctx->prev_thread && fctx->prev_thread != fctx->threads) -- if (update_context_from_thread(fctx->threads->avctx, fctx->prev_thread->avctx, 0) < 0) { -- av_log(avctx, AV_LOG_ERROR, "Final thread update failed\n"); -- fctx->prev_thread->avctx->internal->is_copy = fctx->threads->avctx->internal->is_copy; -- fctx->threads->avctx->internal->is_copy = 1; -- } -- - for (i = 0; i < thread_count; i++) { - PerThreadContext *p = &fctx->threads[i]; - AVCodecContext *ctx = p->avctx; -@@ -773,14 +680,8 @@ - if (codec->close && p->thread_init != UNINITIALIZED) - codec->close(ctx); - --#if FF_API_THREAD_SAFE_CALLBACKS -- release_delayed_buffers(p); -- for (int j = 0; j < p->released_buffers_allocated; j++) -- av_frame_free(&p->released_buffers[j]); -- av_freep(&p->released_buffers); --#endif - if (ctx->priv_data) { -- if (codec->priv_class) -+ if (codec->p.priv_class) - av_opt_free(ctx->priv_data); - av_freep(&ctx->priv_data); - } -@@ -788,38 +689,42 @@ - av_freep(&ctx->slice_offset); - - av_buffer_unref(&ctx->internal->pool); -+ av_packet_free(&ctx->internal->last_pkt_props); - av_freep(&ctx->internal); - av_buffer_unref(&ctx->hw_frames_ctx); - } - - av_frame_free(&p->frame); - -- free_pthread(p, per_thread_offsets); -+ ff_pthread_free(p, per_thread_offsets); - av_packet_free(&p->avpkt); - - av_freep(&p->avctx); - } - - av_freep(&fctx->threads); -- free_pthread(fctx, thread_ctx_offsets); -+ ff_pthread_free(fctx, thread_ctx_offsets); - -- av_freep(&avctx->internal->thread_ctx); -+ /* if we have stashed hwaccel state, move it to the user-facing context, -+ * so it will be freed in avcodec_close() */ -+ av_assert0(!avctx->hwaccel); -+ FFSWAP(const AVHWAccel*, avctx->hwaccel, fctx->stash_hwaccel); -+ FFSWAP(void*, avctx->hwaccel_context, fctx->stash_hwaccel_context); -+ FFSWAP(void*, avctx->internal->hwaccel_priv_data, fctx->stash_hwaccel_priv); - -- if (avctx->priv_data && avctx->codec && avctx->codec->priv_class) -- av_opt_free(avctx->priv_data); -- avctx->codec = NULL; -+ av_freep(&avctx->internal->thread_ctx); - } - - static av_cold int init_thread(PerThreadContext *p, int *threads_to_free, - FrameThreadContext *fctx, AVCodecContext *avctx, -- AVCodecContext *src, const AVCodec *codec, int first) -+ const FFCodec *codec, int first) - { - AVCodecContext *copy; - int err; - - atomic_init(&p->state, STATE_INPUT_READY); - -- copy = av_memdup(src, sizeof(*src)); -+ copy = av_memdup(avctx, sizeof(*avctx)); - if (!copy) - return AVERROR(ENOMEM); - copy->priv_data = NULL; -@@ -831,7 +736,7 @@ - p->parent = fctx; - p->avctx = copy; - -- copy->internal = av_memdup(src->internal, sizeof(*src->internal)); -+ copy->internal = av_mallocz(sizeof(*copy->internal)); - if (!copy->internal) - return AVERROR(ENOMEM); - copy->internal->thread_ctx = p; -@@ -843,26 +748,29 @@ - if (!copy->priv_data) - return AVERROR(ENOMEM); - -- if (codec->priv_class) { -- *(const AVClass **)copy->priv_data = codec->priv_class; -- err = av_opt_copy(copy->priv_data, src->priv_data); -+ if (codec->p.priv_class) { -+ *(const AVClass **)copy->priv_data = codec->p.priv_class; -+ err = av_opt_copy(copy->priv_data, avctx->priv_data); - if (err < 0) - return err; - } - } - -- err = init_pthread(p, per_thread_offsets); -+ err = ff_pthread_init(p, per_thread_offsets); - if (err < 0) - return err; - - if (!(p->frame = av_frame_alloc()) || - !(p->avpkt = av_packet_alloc())) - return AVERROR(ENOMEM); -- copy->internal->last_pkt_props = p->avpkt; - - if (!first) - copy->internal->is_copy = 1; - -+ copy->internal->last_pkt_props = av_packet_alloc(); -+ if (!copy->internal->last_pkt_props) -+ return AVERROR(ENOMEM); -+ - if (codec->init) { - err = codec->init(copy); - if (err < 0) { -@@ -889,8 +797,7 @@ - int ff_frame_thread_init(AVCodecContext *avctx) - { - int thread_count = avctx->thread_count; -- const AVCodec *codec = avctx->codec; -- AVCodecContext *src = avctx; -+ const FFCodec *codec = ffcodec(avctx->codec); - FrameThreadContext *fctx; - int err, i = 0; - -@@ -912,9 +819,9 @@ - if (!fctx) - return AVERROR(ENOMEM); - -- err = init_pthread(fctx, thread_ctx_offsets); -+ err = ff_pthread_init(fctx, thread_ctx_offsets); - if (err < 0) { -- free_pthread(fctx, thread_ctx_offsets); -+ ff_pthread_free(fctx, thread_ctx_offsets); - av_freep(&avctx->internal->thread_ctx); - return err; - } -@@ -922,10 +829,10 @@ - fctx->async_lock = 1; - fctx->delaying = 1; - -- if (codec->type == AVMEDIA_TYPE_VIDEO) -- avctx->delay = src->thread_count - 1; -+ if (codec->p.type == AVMEDIA_TYPE_VIDEO) -+ avctx->delay = avctx->thread_count - 1; - -- fctx->threads = av_mallocz_array(thread_count, sizeof(PerThreadContext)); -+ fctx->threads = av_calloc(thread_count, sizeof(*fctx->threads)); - if (!fctx->threads) { - err = AVERROR(ENOMEM); - goto error; -@@ -935,7 +842,7 @@ - PerThreadContext *p = &fctx->threads[i]; - int first = !i; - -- err = init_thread(p, &i, fctx, avctx, src, codec, first); -+ err = init_thread(p, &i, fctx, avctx, codec, first); - if (err < 0) - goto error; - } -@@ -970,130 +877,49 @@ - av_frame_unref(p->frame); - p->result = 0; - --#if FF_API_THREAD_SAFE_CALLBACKS -- release_delayed_buffers(p); --#endif -- -- if (avctx->codec->flush) -- avctx->codec->flush(p->avctx); -+ if (ffcodec(avctx->codec)->flush) -+ ffcodec(avctx->codec)->flush(p->avctx); - } - } - - int ff_thread_can_start_frame(AVCodecContext *avctx) - { - PerThreadContext *p = avctx->internal->thread_ctx; --FF_DISABLE_DEPRECATION_WARNINGS -+ - if ((avctx->active_thread_type&FF_THREAD_FRAME) && atomic_load(&p->state) != STATE_SETTING_UP && -- (avctx->codec->update_thread_context --#if FF_API_THREAD_SAFE_CALLBACKS -- || !THREAD_SAFE_CALLBACKS(avctx) --#endif -- )) { -+ ffcodec(avctx->codec)->update_thread_context) { - return 0; - } --FF_ENABLE_DEPRECATION_WARNINGS -+ - return 1; - } - --static int thread_get_buffer_internal(AVCodecContext *avctx, ThreadFrame *f, int flags) -+static int thread_get_buffer_internal(AVCodecContext *avctx, AVFrame *f, int flags) - { -- PerThreadContext *p = avctx->internal->thread_ctx; -+ PerThreadContext *p; - int err; - -- f->owner[0] = f->owner[1] = avctx; -- - if (!(avctx->active_thread_type & FF_THREAD_FRAME)) -- return ff_get_buffer(avctx, f->f, flags); -+ return ff_get_buffer(avctx, f, flags); - -+ p = avctx->internal->thread_ctx; - FF_DISABLE_DEPRECATION_WARNINGS - if (atomic_load(&p->state) != STATE_SETTING_UP && -- (avctx->codec->update_thread_context --#if FF_API_THREAD_SAFE_CALLBACKS -- || !THREAD_SAFE_CALLBACKS(avctx) --#endif -- )) { -+ ffcodec(avctx->codec)->update_thread_context) { - FF_ENABLE_DEPRECATION_WARNINGS - av_log(avctx, AV_LOG_ERROR, "get_buffer() cannot be called after ff_thread_finish_setup()\n"); - return -1; - } - -- if (avctx->codec->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) { -- atomic_int *progress; -- f->progress = av_buffer_alloc(2 * sizeof(*progress)); -- if (!f->progress) { -- return AVERROR(ENOMEM); -- } -- progress = (atomic_int*)f->progress->data; -- -- atomic_init(&progress[0], -1); -- atomic_init(&progress[1], -1); -- } -- - pthread_mutex_lock(&p->parent->buffer_mutex); --#if !FF_API_THREAD_SAFE_CALLBACKS -- err = ff_get_buffer(avctx, f->f, flags); --#else --FF_DISABLE_DEPRECATION_WARNINGS -- if (THREAD_SAFE_CALLBACKS(avctx)) { -- err = ff_get_buffer(avctx, f->f, flags); -- } else { -- pthread_mutex_lock(&p->progress_mutex); -- p->requested_frame = f->f; -- p->requested_flags = flags; -- atomic_store_explicit(&p->state, STATE_GET_BUFFER, memory_order_release); -- pthread_cond_broadcast(&p->progress_cond); -- -- while (atomic_load(&p->state) != STATE_SETTING_UP) -- pthread_cond_wait(&p->progress_cond, &p->progress_mutex); -- -- err = p->result; -- -- pthread_mutex_unlock(&p->progress_mutex); -- -- } -- if (!THREAD_SAFE_CALLBACKS(avctx) && !avctx->codec->update_thread_context) -- ff_thread_finish_setup(avctx); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- if (err) -- av_buffer_unref(&f->progress); -+ err = ff_get_buffer(avctx, f, flags); - - pthread_mutex_unlock(&p->parent->buffer_mutex); - - return err; - } - --#if FF_API_THREAD_SAFE_CALLBACKS --FF_DISABLE_DEPRECATION_WARNINGS --enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) --{ -- enum AVPixelFormat res; -- PerThreadContext *p = avctx->internal->thread_ctx; -- if (!(avctx->active_thread_type & FF_THREAD_FRAME) || avctx->thread_safe_callbacks || -- avctx->get_format == avcodec_default_get_format) -- return ff_get_format(avctx, fmt); -- if (atomic_load(&p->state) != STATE_SETTING_UP) { -- av_log(avctx, AV_LOG_ERROR, "get_format() cannot be called after ff_thread_finish_setup()\n"); -- return -1; -- } -- pthread_mutex_lock(&p->progress_mutex); -- p->available_formats = fmt; -- atomic_store(&p->state, STATE_GET_FORMAT); -- pthread_cond_broadcast(&p->progress_cond); -- -- while (atomic_load(&p->state) != STATE_SETTING_UP) -- pthread_cond_wait(&p->progress_cond, &p->progress_mutex); -- -- res = p->result_format; -- -- pthread_mutex_unlock(&p->progress_mutex); -- -- return res; --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- --int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) -+int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags) - { - int ret = thread_get_buffer_internal(avctx, f, flags); - if (ret < 0) -@@ -1101,71 +927,51 @@ - return ret; - } - --void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f) -+int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) - { --#if FF_API_THREAD_SAFE_CALLBACKS --FF_DISABLE_DEPRECATION_WARNINGS -- PerThreadContext *p = avctx->internal->thread_ctx; -- FrameThreadContext *fctx; -- AVFrame *dst; -- int ret = 0; -- int can_direct_free = !(avctx->active_thread_type & FF_THREAD_FRAME) || -- THREAD_SAFE_CALLBACKS(avctx); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- -- if (!f->f) -- return; -- -- if (avctx->debug & FF_DEBUG_BUFFERS) -- av_log(avctx, AV_LOG_DEBUG, "thread_release_buffer called on pic %p\n", f); -- -- av_buffer_unref(&f->progress); -- f->owner[0] = f->owner[1] = NULL; -- --#if !FF_API_THREAD_SAFE_CALLBACKS -- av_frame_unref(f->f); --#else -- // when the frame buffers are not allocated, just reset it to clean state -- if (can_direct_free || !f->f->buf[0]) { -- av_frame_unref(f->f); -- return; -- } -+ int ret; - -- fctx = p->parent; -- pthread_mutex_lock(&fctx->buffer_mutex); -+ f->owner[0] = f->owner[1] = avctx; -+ /* Hint: It is possible for this function to be called with codecs -+ * that don't support frame threading at all, namely in case -+ * a frame-threaded decoder shares code with codecs that are not. -+ * This currently affects non-MPEG-4 mpegvideo codecs and and VP7. -+ * The following check will always be true for them. */ -+ if (!(avctx->active_thread_type & FF_THREAD_FRAME)) -+ return ff_get_buffer(avctx, f->f, flags); - -- if (p->num_released_buffers == p->released_buffers_allocated) { -- AVFrame **tmp = av_realloc_array(p->released_buffers, p->released_buffers_allocated + 1, -- sizeof(*p->released_buffers)); -- if (tmp) { -- tmp[p->released_buffers_allocated] = av_frame_alloc(); -- p->released_buffers = tmp; -+ if (ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_ALLOCATE_PROGRESS) { -+ atomic_int *progress; -+ f->progress = av_buffer_alloc(2 * sizeof(*progress)); -+ if (!f->progress) { -+ return AVERROR(ENOMEM); - } -+ progress = (atomic_int*)f->progress->data; - -- if (!tmp || !tmp[p->released_buffers_allocated]) { -- ret = AVERROR(ENOMEM); -- goto fail; -- } -- p->released_buffers_allocated++; -+ atomic_init(&progress[0], -1); -+ atomic_init(&progress[1], -1); - } - -- dst = p->released_buffers[p->num_released_buffers]; -- av_frame_move_ref(dst, f->f); -+ ret = ff_thread_get_buffer(avctx, f->f, flags); -+ if (ret) -+ av_buffer_unref(&f->progress); -+ return ret; -+} - -- p->num_released_buffers++; -+void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f) -+{ -+ if (!f) -+ return; - --fail: -- pthread_mutex_unlock(&fctx->buffer_mutex); -+ if (avctx->debug & FF_DEBUG_BUFFERS) -+ av_log(avctx, AV_LOG_DEBUG, "thread_release_buffer called on pic %p\n", f); - -- // make sure the frame is clean even if we fail to free it -- // this leaks, but it is better than crashing -- if (ret < 0) { -- av_log(avctx, AV_LOG_ERROR, "Could not queue a frame for freeing, this will leak\n"); -- memset(f->f->buf, 0, sizeof(f->f->buf)); -- if (f->f->extended_buf) -- memset(f->f->extended_buf, 0, f->f->nb_extended_buf * sizeof(*f->f->extended_buf)); -- av_frame_unref(f->f); -- } --#endif -+ av_frame_unref(f); -+} -+ -+void ff_thread_release_ext_buffer(AVCodecContext *avctx, ThreadFrame *f) -+{ -+ av_buffer_unref(&f->progress); -+ f->owner[0] = f->owner[1] = NULL; -+ ff_thread_release_buffer(avctx, f->f); - } -diff -Naur a/media/ffvpx/libavcodec/pthread_internal.h b/media/ffvpx/libavcodec/pthread_internal.h ---- a/media/ffvpx/libavcodec/pthread_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/pthread_internal.h 2023-04-06 12:49:40.255394971 +0200 -@@ -31,4 +31,36 @@ - int ff_frame_thread_init(AVCodecContext *avctx); - void ff_frame_thread_free(AVCodecContext *avctx, int thread_count); - -+#define THREAD_SENTINEL 0 // This forbids putting a mutex/condition variable at the front. -+/** -+ * Initialize/destroy a list of mutexes/conditions contained in a structure. -+ * The positions of these mutexes/conditions in the structure are given by -+ * their offsets. Because it is undefined behaviour to destroy -+ * an uninitialized mutex/condition, ff_pthread_init() stores the number -+ * of successfully initialized mutexes and conditions in the object itself -+ * and ff_pthread_free() uses this number to destroy exactly the mutexes and -+ * condition variables that have been successfully initialized. -+ * -+ * @param obj The object containing the mutexes/conditions. -+ * @param[in] offsets An array of offsets. Its first member gives the offset -+ * of the variable that contains the count of successfully -+ * initialized mutexes/condition variables; said variable -+ * must be an unsigned int. Two arrays of offsets, each -+ * delimited by a THREAD_SENTINEL follow. The first -+ * contains the offsets of all the mutexes, the second -+ * contains the offsets of all the condition variables. -+ */ -+int ff_pthread_init(void *obj, const unsigned offsets[]); -+void ff_pthread_free(void *obj, const unsigned offsets[]); -+ -+/** -+ * Macros to help creating the above lists. mutexes and conds need -+ * to be parentheses-enclosed lists of offsets in the containing structure. -+ */ -+#define OFFSET_ARRAY(...) __VA_ARGS__, THREAD_SENTINEL -+#define DEFINE_OFFSET_ARRAY(type, name, cnt_variable, mutexes, conds) \ -+static const unsigned name ## _offsets[] = { offsetof(type, cnt_variable), \ -+ OFFSET_ARRAY mutexes, \ -+ OFFSET_ARRAY conds } -+ - #endif // AVCODEC_PTHREAD_INTERNAL_H -diff -Naur a/media/ffvpx/libavcodec/pthread_slice.c b/media/ffvpx/libavcodec/pthread_slice.c ---- a/media/ffvpx/libavcodec/pthread_slice.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/pthread_slice.c 2023-04-06 12:50:06.973471134 +0200 -@@ -25,6 +25,7 @@ - #include "config.h" - - #include "avcodec.h" -+#include "codec_internal.h" - #include "internal.h" - #include "pthread_internal.h" - #include "thread.h" -@@ -40,6 +41,11 @@ - typedef int (action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr); - typedef int (main_func)(AVCodecContext *c); - -+typedef struct Progress { -+ pthread_cond_t cond; -+ pthread_mutex_t mutex; -+} Progress; -+ - typedef struct SliceThreadContext { - AVSliceThread *thread; - action_func *func; -@@ -52,8 +58,7 @@ - int *entries; - int entries_count; - int thread_count; -- pthread_cond_t *progress_cond; -- pthread_mutex_t *progress_mutex; -+ Progress *progress; - } SliceThreadContext; - - static void main_function(void *priv) { -@@ -82,13 +87,13 @@ - avpriv_slicethread_free(&c->thread); - - for (i = 0; i < c->thread_count; i++) { -- pthread_mutex_destroy(&c->progress_mutex[i]); -- pthread_cond_destroy(&c->progress_cond[i]); -+ Progress *const progress = &c->progress[i]; -+ pthread_mutex_destroy(&progress->mutex); -+ pthread_cond_destroy(&progress->cond); - } - - av_freep(&c->entries); -- av_freep(&c->progress_mutex); -- av_freep(&c->progress_cond); -+ av_freep(&c->progress); - av_freep(&avctx->internal->thread_ctx); - } - -@@ -155,7 +160,7 @@ - } - - avctx->internal->thread_ctx = c = av_mallocz(sizeof(*c)); -- mainfunc = avctx->codec->caps_internal & FF_CODEC_CAP_SLICE_THREAD_HAS_MF ? &main_function : NULL; -+ mainfunc = ffcodec(avctx->codec)->caps_internal & FF_CODEC_CAP_SLICE_THREAD_HAS_MF ? &main_function : NULL; - if (!c || (thread_count = avpriv_slicethread_create(&c->thread, avctx, worker_func, mainfunc, thread_count)) <= 1) { - if (c) - avpriv_slicethread_free(&c->thread); -@@ -171,72 +176,85 @@ - return 0; - } - -+int av_cold ff_slice_thread_init_progress(AVCodecContext *avctx) -+{ -+ SliceThreadContext *const p = avctx->internal->thread_ctx; -+ int err, i = 0, thread_count = avctx->thread_count; -+ -+ p->progress = av_calloc(thread_count, sizeof(*p->progress)); -+ if (!p->progress) { -+ err = AVERROR(ENOMEM); -+ goto fail; -+ } -+ -+ for (; i < thread_count; i++) { -+ Progress *const progress = &p->progress[i]; -+ err = pthread_mutex_init(&progress->mutex, NULL); -+ if (err) { -+ err = AVERROR(err); -+ goto fail; -+ } -+ err = pthread_cond_init (&progress->cond, NULL); -+ if (err) { -+ err = AVERROR(err); -+ pthread_mutex_destroy(&progress->mutex); -+ goto fail; -+ } -+ } -+ err = 0; -+fail: -+ p->thread_count = i; -+ return err; -+} -+ - void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n) - { - SliceThreadContext *p = avctx->internal->thread_ctx; -+ Progress *const progress = &p->progress[thread]; - int *entries = p->entries; - -- pthread_mutex_lock(&p->progress_mutex[thread]); -+ pthread_mutex_lock(&progress->mutex); - entries[field] +=n; -- pthread_cond_signal(&p->progress_cond[thread]); -- pthread_mutex_unlock(&p->progress_mutex[thread]); -+ pthread_cond_signal(&progress->cond); -+ pthread_mutex_unlock(&progress->mutex); - } - - void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift) - { - SliceThreadContext *p = avctx->internal->thread_ctx; -+ Progress *progress; - int *entries = p->entries; - - if (!entries || !field) return; - - thread = thread ? thread - 1 : p->thread_count - 1; -+ progress = &p->progress[thread]; - -- pthread_mutex_lock(&p->progress_mutex[thread]); -+ pthread_mutex_lock(&progress->mutex); - while ((entries[field - 1] - entries[field]) < shift){ -- pthread_cond_wait(&p->progress_cond[thread], &p->progress_mutex[thread]); -+ pthread_cond_wait(&progress->cond, &progress->mutex); - } -- pthread_mutex_unlock(&p->progress_mutex[thread]); -+ pthread_mutex_unlock(&progress->mutex); - } - --int ff_alloc_entries(AVCodecContext *avctx, int count) -+int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) - { -- int i; -- - if (avctx->active_thread_type & FF_THREAD_SLICE) { - SliceThreadContext *p = avctx->internal->thread_ctx; - -- if (p->entries) { -- av_assert0(p->thread_count == avctx->thread_count); -- av_freep(&p->entries); -+ if (p->entries_count == count) { -+ memset(p->entries, 0, p->entries_count * sizeof(*p->entries)); -+ return 0; - } -+ av_freep(&p->entries); - -- p->thread_count = avctx->thread_count; -- p->entries = av_mallocz_array(count, sizeof(int)); -- -- if (!p->progress_mutex) { -- p->progress_mutex = av_malloc_array(p->thread_count, sizeof(pthread_mutex_t)); -- p->progress_cond = av_malloc_array(p->thread_count, sizeof(pthread_cond_t)); -- } -- -- if (!p->entries || !p->progress_mutex || !p->progress_cond) { -- av_freep(&p->entries); -- av_freep(&p->progress_mutex); -- av_freep(&p->progress_cond); -+ p->entries = av_calloc(count, sizeof(*p->entries)); -+ if (!p->entries) { -+ p->entries_count = 0; - return AVERROR(ENOMEM); - } - p->entries_count = count; -- -- for (i = 0; i < p->thread_count; i++) { -- pthread_mutex_init(&p->progress_mutex[i], NULL); -- pthread_cond_init(&p->progress_cond[i], NULL); -- } - } - - return 0; - } -- --void ff_reset_entries(AVCodecContext *avctx) --{ -- SliceThreadContext *p = avctx->internal->thread_ctx; -- memset(p->entries, 0, p->entries_count * sizeof(int)); --} -diff -Naur a/media/ffvpx/libavcodec/put_bits.h b/media/ffvpx/libavcodec/put_bits.h ---- a/media/ffvpx/libavcodec/put_bits.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/put_bits.h 2023-04-06 12:50:24.492176543 +0200 -@@ -32,12 +32,18 @@ - #include "config.h" - #include "libavutil/intreadwrite.h" - #include "libavutil/avassert.h" -+#include "libavutil/common.h" - --#include "version.h" -- -+#if ARCH_X86_64 -+// TODO: Benchmark and optionally enable on other 64-bit architectures. -+typedef uint64_t BitBuf; -+#define AV_WBBUF AV_WB64 -+#define AV_WLBUF AV_WL64 -+#else - typedef uint32_t BitBuf; - #define AV_WBBUF AV_WB32 - #define AV_WLBUF AV_WL32 -+#endif - - static const int BUF_BITS = 8 * sizeof(BitBuf); - -@@ -45,7 +51,6 @@ - BitBuf bit_buf; - int bit_left; - uint8_t *buf, *buf_ptr, *buf_end; -- int size_in_bits; - } PutBitContext; - - /** -@@ -62,7 +67,6 @@ - buffer = NULL; - } - -- s->size_in_bits = 8 * buffer_size; - s->buf = buffer; - s->buf_end = s->buf + buffer_size; - s->buf_ptr = s->buf; -@@ -79,6 +83,26 @@ - } - - /** -+ * @return the number of bytes output so far; may only be called -+ * when the PutBitContext is freshly initialized or flushed. -+ */ -+static inline int put_bytes_output(const PutBitContext *s) -+{ -+ av_assert2(s->bit_left == BUF_BITS); -+ return s->buf_ptr - s->buf; -+} -+ -+/** -+ * @param round_up When set, the number of bits written so far will be -+ * rounded up to the next byte. -+ * @return the number of bytes output so far. -+ */ -+static inline int put_bytes_count(const PutBitContext *s, int round_up) -+{ -+ return s->buf_ptr - s->buf + ((BUF_BITS - s->bit_left + (round_up ? 7 : 0)) >> 3); -+} -+ -+/** - * Rebase the bit writer onto a reallocated buffer. - * - * @param buffer the buffer where to put bits -@@ -93,7 +117,6 @@ - s->buf_end = buffer + buffer_size; - s->buf_ptr = buffer + (s->buf_ptr - s->buf); - s->buf = buffer; -- s->size_in_bits = 8 * buffer_size; - } - - /** -@@ -105,6 +128,16 @@ - } - - /** -+ * @param round_up When set, the number of bits written will be -+ * rounded up to the next byte. -+ * @return the number of bytes left. -+ */ -+static inline int put_bytes_left(const PutBitContext *s, int round_up) -+{ -+ return s->buf_end - s->buf_ptr - ((BUF_BITS - s->bit_left + (round_up ? 7 : 0)) >> 3); -+} -+ -+/** - * Pad the end of the output stream with zeros. - */ - static inline void flush_put_bits(PutBitContext *s) -@@ -140,11 +173,6 @@ - s->bit_buf = 0; - } - --#if FF_API_AVPRIV_PUT_BITS --void avpriv_align_put_bits(PutBitContext *s); --void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length); --#endif -- - #ifdef BITSTREAM_WRITER_LE - #define ff_put_string ff_put_string_unsupported_here - #define ff_copy_bits ff_copy_bits_unsupported_here -@@ -335,6 +363,13 @@ - } - } - -+static inline void put_sbits63(PutBitContext *pb, int n, int64_t value) -+{ -+ av_assert2(n >= 0 && n < 64); -+ -+ put_bits64(pb, n, (uint64_t)(value) & (~(UINT64_MAX << n))); -+} -+ - /** - * Return the pointer to the byte where the bitstream writer will put - * the next bit. -@@ -377,7 +412,6 @@ - { - av_assert0(size <= INT_MAX/8 - BUF_BITS); - s->buf_end = s->buf + size; -- s->size_in_bits = 8*size; - } - - /** -diff -Naur a/media/ffvpx/libavcodec/ratecontrol.h b/media/ffvpx/libavcodec/ratecontrol.h ---- a/media/ffvpx/libavcodec/ratecontrol.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/ratecontrol.h 2023-04-06 12:50:24.492176543 +0200 -@@ -80,9 +80,6 @@ - int frame_count[5]; - int last_non_b_pict_type; - -- void *non_lavc_opaque; ///< context for non lavc rc code (for example xvid) -- float dry_run_qscale; ///< for xvid rc -- int last_picture_number; ///< for xvid rc - AVExpr * rc_eq_eval; - }RateControlContext; - -diff -Naur a/media/ffvpx/libavcodec/raw.c b/media/ffvpx/libavcodec/raw.c ---- a/media/ffvpx/libavcodec/raw.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/raw.c 2023-04-06 12:50:06.973471134 +0200 -@@ -24,11 +24,11 @@ - * Raw Video Codec - */ - -+#include "libavutil/macros.h" - #include "avcodec.h" - #include "raw.h" --#include "libavutil/common.h" - --const PixelFormatTag ff_raw_pix_fmt_tags[] = { -+static const PixelFormatTag raw_pix_fmt_tags[] = { - { AV_PIX_FMT_YUV420P, MKTAG('I', '4', '2', '0') }, /* Planar formats */ - { AV_PIX_FMT_YUV420P, MKTAG('I', 'Y', 'U', 'V') }, - { AV_PIX_FMT_YUV420P, MKTAG('y', 'v', '1', '2') }, -@@ -72,6 +72,7 @@ - { AV_PIX_FMT_GRAY8, MKTAG('G', 'R', 'E', 'Y') }, - { AV_PIX_FMT_NV12, MKTAG('N', 'V', '1', '2') }, - { AV_PIX_FMT_NV21, MKTAG('N', 'V', '2', '1') }, -+ { AV_PIX_FMT_VUYA, MKTAG('A', 'Y', 'U', 'V') }, /* MS 4:4:4:4 */ - - /* nut */ - { AV_PIX_FMT_RGB555LE, MKTAG('R', 'G', 'B', 15) }, -@@ -299,12 +300,12 @@ - - const struct PixelFormatTag *avpriv_get_raw_pix_fmt_tags(void) - { -- return ff_raw_pix_fmt_tags; -+ return raw_pix_fmt_tags; - } - - unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat fmt) - { -- const PixelFormatTag *tags = ff_raw_pix_fmt_tags; -+ const PixelFormatTag *tags = raw_pix_fmt_tags; - while (tags->pix_fmt >= 0) { - if (tags->pix_fmt == fmt) - return tags->fourcc; -@@ -313,7 +314,7 @@ - return 0; - } - --const PixelFormatTag avpriv_pix_fmt_bps_avi[] = { -+static const PixelFormatTag pix_fmt_bps_avi[] = { - { AV_PIX_FMT_PAL8, 1 }, - { AV_PIX_FMT_PAL8, 2 }, - { AV_PIX_FMT_PAL8, 4 }, -@@ -326,7 +327,7 @@ - { AV_PIX_FMT_NONE, 0 }, - }; - --const PixelFormatTag avpriv_pix_fmt_bps_mov[] = { -+static const PixelFormatTag pix_fmt_bps_mov[] = { - { AV_PIX_FMT_PAL8, 1 }, - { AV_PIX_FMT_PAL8, 2 }, - { AV_PIX_FMT_PAL8, 4 }, -@@ -337,3 +338,33 @@ - { AV_PIX_FMT_PAL8, 33 }, - { AV_PIX_FMT_NONE, 0 }, - }; -+ -+static enum AVPixelFormat find_pix_fmt(const PixelFormatTag *tags, -+ unsigned int fourcc) -+{ -+ while (tags->pix_fmt != AV_PIX_FMT_NONE) { -+ if (tags->fourcc == fourcc) -+ return tags->pix_fmt; -+ tags++; -+ } -+ return AV_PIX_FMT_NONE; -+} -+ -+enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, -+ unsigned fourcc) -+{ -+ const PixelFormatTag *tags; -+ -+ switch (list) { -+ case PIX_FMT_LIST_RAW: -+ tags = raw_pix_fmt_tags; -+ break; -+ case PIX_FMT_LIST_AVI: -+ tags = pix_fmt_bps_avi; -+ break; -+ case PIX_FMT_LIST_MOV: -+ tags = pix_fmt_bps_mov; -+ break; -+ } -+ return find_pix_fmt(tags, fourcc); -+} -diff -Naur a/media/ffvpx/libavcodec/raw.h b/media/ffvpx/libavcodec/raw.h ---- a/media/ffvpx/libavcodec/raw.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/raw.h 2023-04-06 12:49:40.255394971 +0200 -@@ -27,22 +27,22 @@ - #ifndef AVCODEC_RAW_H - #define AVCODEC_RAW_H - --#include "avcodec.h" --#include "internal.h" --#include "libavutil/internal.h" -+#include "libavutil/pixfmt.h" - - typedef struct PixelFormatTag { - enum AVPixelFormat pix_fmt; - unsigned int fourcc; - } PixelFormatTag; - --extern const PixelFormatTag ff_raw_pix_fmt_tags[]; // exposed through avpriv_get_raw_pix_fmt_tags() -- - const struct PixelFormatTag *avpriv_get_raw_pix_fmt_tags(void); - --enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc); -+enum PixelFormatTagLists { -+ PIX_FMT_LIST_RAW, -+ PIX_FMT_LIST_AVI, -+ PIX_FMT_LIST_MOV, -+}; - --extern av_export_avcodec const PixelFormatTag avpriv_pix_fmt_bps_avi[]; --extern av_export_avcodec const PixelFormatTag avpriv_pix_fmt_bps_mov[]; -+enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, -+ unsigned fourcc); - - #endif /* AVCODEC_RAW_H */ -diff -Naur a/media/ffvpx/libavcodec/rdft.c b/media/ffvpx/libavcodec/rdft.c ---- a/media/ffvpx/libavcodec/rdft.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/rdft.c 2023-04-06 12:49:40.255394971 +0200 -@@ -20,6 +20,7 @@ - */ - #include - #include -+#include "libavutil/error.h" - #include "libavutil/mathematics.h" - #include "rdft.h" - -@@ -106,7 +107,9 @@ - s->tsin = ff_cos_tabs[nbits] + (n >> 2); - s->rdft_calc = rdft_calc_c; - -- if (ARCH_ARM) ff_rdft_init_arm(s); -+#if ARCH_ARM -+ ff_rdft_init_arm(s); -+#endif - - return 0; - } -diff -Naur a/media/ffvpx/libavcodec/rl.h b/media/ffvpx/libavcodec/rl.h ---- a/media/ffvpx/libavcodec/rl.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/rl.h 2023-04-06 12:50:06.973471134 +0200 -@@ -49,23 +49,45 @@ - } RLTable; - - /** -+ * Initialize max_level and index_run from table_run and table_level; -+ * this is equivalent to initializing RLTable.max_level[0] and -+ * RLTable.index_run[0] with ff_rl_init(). -+ */ -+void ff_rl_init_level_run(uint8_t max_level[MAX_LEVEL + 1], -+ uint8_t index_run[MAX_RUN + 1], -+ const uint8_t table_run[/* n */], -+ const uint8_t table_level[/* n*/], int n); -+ -+/** -+ * Initialize index_run, max_level and max_run from n, last, table_vlc, -+ * table_run and table_level. - * @param static_store static uint8_t array[2][2*MAX_RUN + MAX_LEVEL + 3] - * to hold the level and run tables. -+ * @note This function does not touch rl_vlc at all, hence there is no need -+ * to synchronize calls to ff_rl_init() and ff_rl_init_vlc() using the -+ * same RLTable. - */ - void ff_rl_init(RLTable *rl, uint8_t static_store[2][2*MAX_RUN + MAX_LEVEL + 3]); -+ -+/** -+ * Initialize rl_vlc from n, last, table_vlc, table_run and table_level. -+ * All rl_vlc pointers to be initialized must already point to a static -+ * buffer of `static_size` RL_VLC_ELEM elements; if a pointer is NULL, -+ * initializing further VLCs stops. -+ * @note This function does not touch what ff_rl_init() initializes at all, -+ * hence there is no need to synchronize calls to ff_rl_init() and -+ * ff_rl_init_vlc() using the same RLTable. -+ */ - void ff_rl_init_vlc(RLTable *rl, unsigned static_size); - - #define INIT_VLC_RL(rl, static_size)\ - {\ -- int q;\ - static RL_VLC_ELEM rl_vlc_table[32][static_size];\ - \ -- if(!rl.rl_vlc[0]){\ -- for(q=0; q<32; q++)\ -- rl.rl_vlc[q]= rl_vlc_table[q];\ -+ for (int q = 0; q < 32; q++) \ -+ rl.rl_vlc[q] = rl_vlc_table[q]; \ - \ -- ff_rl_init_vlc(&rl, static_size);\ -- }\ -+ ff_rl_init_vlc(&rl, static_size); \ - } - - #define INIT_FIRST_VLC_RL(rl, static_size) \ -diff -Naur a/media/ffvpx/libavcodec/simple_idct.c b/media/ffvpx/libavcodec/simple_idct.c ---- a/media/ffvpx/libavcodec/simple_idct.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/simple_idct.c 2023-04-06 12:49:40.255394971 +0200 -@@ -26,7 +26,6 @@ - */ - - #include "libavutil/intreadwrite.h" --#include "avcodec.h" - #include "mathops.h" - #include "simple_idct.h" - -diff -Naur a/media/ffvpx/libavcodec/startcode.h b/media/ffvpx/libavcodec/startcode.h ---- a/media/ffvpx/libavcodec/startcode.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/startcode.h 2023-04-06 12:49:40.255394971 +0200 -@@ -0,0 +1,36 @@ -+/* -+ * 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 -+ */ -+ -+/** -+ * @file -+ * Accelerated start code search function for start codes common to -+ * MPEG-1/2/4 video, VC-1, H.264/5 -+ */ -+ -+#ifndef AVCODEC_STARTCODE_H -+#define AVCODEC_STARTCODE_H -+ -+#include -+ -+const uint8_t *avpriv_find_start_code(const uint8_t *p, -+ const uint8_t *end, -+ uint32_t *state); -+ -+int ff_startcode_find_candidate_c(const uint8_t *buf, int size); -+ -+#endif /* AVCODEC_STARTCODE_H */ -diff -Naur a/media/ffvpx/libavcodec/threadframe.h b/media/ffvpx/libavcodec/threadframe.h ---- a/media/ffvpx/libavcodec/threadframe.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/threadframe.h 2023-04-06 12:50:06.973471134 +0200 -@@ -0,0 +1,89 @@ -+/* -+ * Copyright (c) 2022 Andreas Rheinhardt -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_THREADFRAME_H -+#define AVCODEC_THREADFRAME_H -+ -+#include "libavutil/frame.h" -+#include "avcodec.h" -+ -+typedef struct ThreadFrame { -+ AVFrame *f; -+ AVCodecContext *owner[2]; -+ // progress->data is an array of 2 ints holding progress for top/bottom -+ // fields -+ AVBufferRef *progress; -+} ThreadFrame; -+ -+/** -+ * Notify later decoding threads when part of their reference picture is ready. -+ * Call this when some part of the picture is finished decoding. -+ * Later calls with lower values of progress have no effect. -+ * -+ * @param f The picture being decoded. -+ * @param progress Value, in arbitrary units, of how much of the picture has decoded. -+ * @param field The field being decoded, for field-picture codecs. -+ * 0 for top field or frame pictures, 1 for bottom field. -+ */ -+void ff_thread_report_progress(ThreadFrame *f, int progress, int field); -+ -+/** -+ * Wait for earlier decoding threads to finish reference pictures. -+ * Call this before accessing some part of a picture, with a given -+ * value for progress, and it will return after the responsible decoding -+ * thread calls ff_thread_report_progress() with the same or -+ * higher value for progress. -+ * -+ * @param f The picture being referenced. -+ * @param progress Value, in arbitrary units, to wait for. -+ * @param field The field being referenced, for field-picture codecs. -+ * 0 for top field or frame pictures, 1 for bottom field. -+ */ -+void ff_thread_await_progress(const ThreadFrame *f, int progress, int field); -+ -+/** -+ * Wrapper around ff_get_buffer() for frame-multithreaded codecs. -+ * Call this function instead of ff_get_buffer() if you might need -+ * to wait for progress on this frame. -+ * Cannot be called after the codec has called ff_thread_finish_setup(). -+ * -+ * @param avctx The current context. -+ * @param f The frame to write into. -+ * @note: It is fine to call this with codecs that do not support -+ * frame threading. -+ */ -+int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags); -+ -+/** -+ * Unref a ThreadFrame. -+ * -+ * This is basically a wrapper around av_frame_unref() and should -+ * be called instead of it. -+ * -+ * @param avctx The current context. -+ * @param f The picture being released. -+ */ -+void ff_thread_release_ext_buffer(AVCodecContext *avctx, ThreadFrame *f); -+ -+int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src); -+ -+int ff_thread_can_start_frame(AVCodecContext *avctx); -+ -+#endif -diff -Naur a/media/ffvpx/libavcodec/thread.h b/media/ffvpx/libavcodec/thread.h ---- a/media/ffvpx/libavcodec/thread.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/thread.h 2023-04-06 12:50:24.492176543 +0200 -@@ -31,14 +31,6 @@ - - #include "avcodec.h" - --typedef struct ThreadFrame { -- AVFrame *f; -- AVCodecContext *owner[2]; -- // progress->data is an array of 2 ints holding progress for top/bottom -- // fields -- AVBufferRef *progress; --} ThreadFrame; -- - /** - * Wait for decoding threads to finish and reset internal state. - * Called by avcodec_flush_buffers(). -@@ -52,10 +44,10 @@ - * Returns the next available frame in picture. *got_picture_ptr - * will be 0 if none is available. - * The return value on success is the size of the consumed packet for -- * compatibility with avcodec_decode_video2(). This means the decoder -+ * compatibility with FFCodec.decode. This means the decoder - * has to consume the full packet. - * -- * Parameters are the same as avcodec_decode_video2(). -+ * Parameters are the same as FFCodec.decode. - */ - int ff_thread_decode_frame(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, AVPacket *avpkt); -@@ -70,45 +62,7 @@ - */ - void ff_thread_finish_setup(AVCodecContext *avctx); - --/** -- * Notify later decoding threads when part of their reference picture is ready. -- * Call this when some part of the picture is finished decoding. -- * Later calls with lower values of progress have no effect. -- * -- * @param f The picture being decoded. -- * @param progress Value, in arbitrary units, of how much of the picture has decoded. -- * @param field The field being decoded, for field-picture codecs. -- * 0 for top field or frame pictures, 1 for bottom field. -- */ --void ff_thread_report_progress(ThreadFrame *f, int progress, int field); -- --/** -- * Wait for earlier decoding threads to finish reference pictures. -- * Call this before accessing some part of a picture, with a given -- * value for progress, and it will return after the responsible decoding -- * thread calls ff_thread_report_progress() with the same or -- * higher value for progress. -- * -- * @param f The picture being referenced. -- * @param progress Value, in arbitrary units, to wait for. -- * @param field The field being referenced, for field-picture codecs. -- * 0 for top field or frame pictures, 1 for bottom field. -- */ --void ff_thread_await_progress(ThreadFrame *f, int progress, int field); -- --#if FF_API_THREAD_SAFE_CALLBACKS --/** -- * Wrapper around get_format() for frame-multithreaded codecs. -- * Call this function instead of avctx->get_format(). -- * Cannot be called after the codec has called ff_thread_finish_setup(). -- * -- * @param avctx The current context. -- * @param fmt The list of available formats. -- */ --enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt); --#else - #define ff_thread_get_format ff_get_format --#endif - - /** - * Wrapper around get_buffer() for frame-multithreaded codecs. -@@ -118,7 +72,7 @@ - * @param avctx The current context. - * @param f The frame to write into. - */ --int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags); -+int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags); - - /** - * Wrapper around release_buffer() frame-for multithreaded codecs. -@@ -131,17 +85,15 @@ - * @param avctx The current context. - * @param f The picture being released. - */ --void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f); -- --int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src); -+void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f); - - int ff_thread_init(AVCodecContext *s); - int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, - int (*action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr), - int (*main_func)(AVCodecContext *c), void *arg, int *ret, int job_count); - void ff_thread_free(AVCodecContext *s); --int ff_alloc_entries(AVCodecContext *avctx, int count); --void ff_reset_entries(AVCodecContext *avctx); -+int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count); -+int ff_slice_thread_init_progress(AVCodecContext *avctx); - void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n); - void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift); - -diff -Naur a/media/ffvpx/libavcodec/utils.c b/media/ffvpx/libavcodec/utils.c ---- a/media/ffvpx/libavcodec/utils.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/utils.c 2023-04-06 12:50:24.492176543 +0200 -@@ -27,25 +27,24 @@ - - #include "config.h" - #include "libavutil/avassert.h" --#include "libavutil/avstring.h" -+#include "libavutil/channel_layout.h" - #include "libavutil/intreadwrite.h" --#include "libavutil/mem_internal.h" -+#include "libavutil/mem.h" - #include "libavutil/pixdesc.h" - #include "libavutil/imgutils.h" - #include "libavutil/pixfmt.h" - #include "avcodec.h" - #include "codec.h" -+#include "codec_internal.h" -+#include "decode.h" - #include "hwconfig.h" - #include "thread.h" -+#include "threadframe.h" - #include "internal.h" - #include "put_bits.h" --#include "raw.h" --#include "version.h" -+#include "startcode.h" - #include --#include --#include - #include --#include - - void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size) - { -@@ -55,7 +54,8 @@ - *size = 0; - return; - } -- if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1)) -+ av_fast_mallocz(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE); -+ if (*p) - memset(*p + min_size, 0, AV_INPUT_BUFFER_PADDING_SIZE); - } - -@@ -67,18 +67,25 @@ - *size = 0; - return; - } -- if (!ff_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE, 1)) -+ av_fast_malloc(p, size, min_size + AV_INPUT_BUFFER_PADDING_SIZE); -+ if (*p) - memset(*p, 0, min_size + AV_INPUT_BUFFER_PADDING_SIZE); - } - --int av_codec_is_encoder(const AVCodec *codec) -+int av_codec_is_encoder(const AVCodec *avcodec) - { -- return codec && (codec->encode_sub || codec->encode2 || codec->receive_packet); -+ const FFCodec *const codec = ffcodec(avcodec); -+ return codec && (codec->cb_type == FF_CODEC_CB_TYPE_ENCODE || -+ codec->cb_type == FF_CODEC_CB_TYPE_ENCODE_SUB || -+ codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_PACKET); - } - --int av_codec_is_decoder(const AVCodec *codec) -+int av_codec_is_decoder(const AVCodec *avcodec) - { -- return codec && (codec->decode || codec->receive_frame); -+ const FFCodec *const codec = ffcodec(avcodec); -+ return codec && (codec->cb_type == FF_CODEC_CB_TYPE_DECODE || -+ codec->cb_type == FF_CODEC_CB_TYPE_DECODE_SUB || -+ codec->cb_type == FF_CODEC_CB_TYPE_RECEIVE_FRAME); - } - - int ff_set_dimensions(AVCodecContext *s, int width, int height) -@@ -236,6 +243,8 @@ - case AV_PIX_FMT_GBRAP16BE: - w_align = 16; //FIXME assume 16 pixel per macroblock - h_align = 16 * 2; // interlaced needs 2 macroblocks height -+ if (s->codec_id == AV_CODEC_ID_BINKVIDEO) -+ w_align = 16*2; - break; - case AV_PIX_FMT_YUV411P: - case AV_PIX_FMT_YUVJ411P: -@@ -314,6 +323,7 @@ - *width = FFALIGN(*width, w_align); - *height = FFALIGN(*height, h_align); - if (s->codec_id == AV_CODEC_ID_H264 || s->lowres || -+ s->codec_id == AV_CODEC_ID_VC1 || s->codec_id == AV_CODEC_ID_WMV3 || - s->codec_id == AV_CODEC_ID_VP5 || s->codec_id == AV_CODEC_ID_VP6 || - s->codec_id == AV_CODEC_ID_VP6F || s->codec_id == AV_CODEC_ID_VP6A - ) { -@@ -327,6 +337,9 @@ - // the next rounded up width is 32 - *width = FFMAX(*width, 32); - } -+ if (s->codec_id == AV_CODEC_ID_SVQ3) { -+ *width = FFMAX(*width, 32); -+ } - - for (i = 0; i < 4; i++) - linesize_align[i] = STRIDE_ALIGN; -@@ -346,29 +359,17 @@ - align = FFMAX3(align, linesize_align[1], linesize_align[2]); - *width = FFALIGN(*width, align); - } -- -+#if FF_API_AVCODEC_CHROMA_POS - int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos) - { -- if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB) -- return AVERROR(EINVAL); -- pos--; -- -- *xpos = (pos&1) * 128; -- *ypos = ((pos>>1)^(pos<4)) * 128; -- -- return 0; -+ return av_chroma_location_enum_to_pos(xpos, ypos, pos); - } - - enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos) - { -- int pos, xout, yout; -- -- for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) { -- if (avcodec_enum_to_chroma_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos) -- return pos; -- } -- return AVCHROMA_LOC_UNSPECIFIED; -+ return av_chroma_location_pos_to_enum(xpos, ypos); - } -+#endif - - int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, - enum AVSampleFormat sample_fmt, const uint8_t *buf, -@@ -384,8 +385,7 @@ - - planar = av_sample_fmt_is_planar(sample_fmt); - if (planar && nb_channels > AV_NUM_DATA_POINTERS) { -- if (!(frame->extended_data = av_mallocz_array(nb_channels, -- sizeof(*frame->extended_data)))) -+ if (!FF_ALLOCZ_TYPED_ARRAY(frame->extended_data, nb_channels)) - return AVERROR(ENOMEM); - } else { - frame->extended_data = frame->data; -@@ -435,37 +435,8 @@ - } - } - --enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, -- unsigned int fourcc) --{ -- while (tags->pix_fmt >= 0) { -- if (tags->fourcc == fourcc) -- return tags->pix_fmt; -- tags++; -- } -- return AV_PIX_FMT_NONE; --} -- --#if FF_API_CODEC_GET_SET --MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase) --MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor) --MAKE_ACCESSORS(AVCodecContext, codec, int, lowres) --MAKE_ACCESSORS(AVCodecContext, codec, int, seek_preroll) --MAKE_ACCESSORS(AVCodecContext, codec, uint16_t*, chroma_intra_matrix) -- --unsigned av_codec_get_codec_properties(const AVCodecContext *codec) --{ -- return codec->properties; --} -- --int av_codec_get_max_lowres(const AVCodec *codec) --{ -- return codec->max_lowres; --} --#endif -- - int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){ -- return !!(codec->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM); -+ return !!(ffcodec(codec)->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM); - } - - const char *avcodec_get_name(enum AVCodecID id) -@@ -488,28 +459,6 @@ - return "unknown_codec"; - } - --#if FF_API_TAG_STRING --size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag) --{ -- int i, len, ret = 0; -- --#define TAG_PRINT(x) \ -- (((x) >= '0' && (x) <= '9') || \ -- ((x) >= 'a' && (x) <= 'z') || ((x) >= 'A' && (x) <= 'Z') || \ -- ((x) == '.' || (x) == ' ' || (x) == '-' || (x) == '_')) -- -- for (i = 0; i < 4; i++) { -- len = snprintf(buf, buf_size, -- TAG_PRINT(codec_tag & 0xFF) ? "%c" : "[%d]", codec_tag & 0xFF); -- buf += len; -- buf_size = buf_size > len ? buf_size - len : 0; -- ret += len; -- codec_tag >>= 8; -- } -- return ret; --} --#endif -- - const char *av_get_profile_name(const AVCodec *codec, int profile) - { - const AVProfile *p; -@@ -541,6 +490,8 @@ - int av_get_exact_bits_per_sample(enum AVCodecID codec_id) - { - switch (codec_id) { -+ case AV_CODEC_ID_DFPWM: -+ return 1; - case AV_CODEC_ID_8SVX_EXP: - case AV_CODEC_ID_8SVX_FIB: - case AV_CODEC_ID_ADPCM_ARGO: -@@ -569,7 +520,9 @@ - case AV_CODEC_ID_PCM_SGA: - case AV_CODEC_ID_PCM_U8: - case AV_CODEC_ID_SDX2_DPCM: -+ case AV_CODEC_ID_CBD2_DPCM: - case AV_CODEC_ID_DERF_DPCM: -+ case AV_CODEC_ID_WADY_DPCM: - return 8; - case AV_CODEC_ID_PCM_S16BE: - case AV_CODEC_ID_PCM_S16BE_PLANAR: -@@ -630,6 +583,8 @@ - int av_get_bits_per_sample(enum AVCodecID codec_id) - { - switch (codec_id) { -+ case AV_CODEC_ID_DFPWM: -+ return 1; - case AV_CODEC_ID_ADPCM_SBPRO_2: - return 2; - case AV_CODEC_ID_ADPCM_SBPRO_3: -@@ -680,6 +635,7 @@ - case AV_CODEC_ID_MP2: - case AV_CODEC_ID_MUSEPACK7: return 1152; - case AV_CODEC_ID_AC3: return 1536; -+ case AV_CODEC_ID_FTR: return 1024; - } - - if (sr > 0) { -@@ -723,6 +679,10 @@ - return 256 * (frame_bytes / 64); - if (id == AV_CODEC_ID_RA_144) - return 160 * (frame_bytes / 20); -+ if (id == AV_CODEC_ID_APTX) -+ return 4 * (frame_bytes / 4); -+ if (id == AV_CODEC_ID_APTX_HD) -+ return 4 * (frame_bytes / 6); - - if (bps > 0) { - /* calc from frame_bytes and bits_per_coded_sample */ -@@ -746,6 +706,7 @@ - return 0; - return frame_bytes * 28; - case AV_CODEC_ID_ADPCM_4XM: -+ case AV_CODEC_ID_ADPCM_IMA_ACORN: - case AV_CODEC_ID_ADPCM_IMA_DAT4: - case AV_CODEC_ID_ADPCM_IMA_ISS: - return (frame_bytes - 4 * ch) * 2 / ch; -@@ -812,6 +773,9 @@ - case AV_CODEC_ID_ADPCM_MTAF: - tmp = blocks * (ba - 16LL) * 2 / ch; - break; -+ case AV_CODEC_ID_ADPCM_XMD: -+ tmp = blocks * 32; -+ break; - } - if (tmp) { - if (tmp != (int)tmp) -@@ -854,8 +818,16 @@ - - int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) - { -- int duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, -- avctx->channels, avctx->block_align, -+ int channels = avctx->ch_layout.nb_channels; -+ int duration; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (!channels) -+ channels = avctx->channels; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate, -+ channels, avctx->block_align, - avctx->codec_tag, avctx->bits_per_coded_sample, - avctx->bit_rate, avctx->extradata, avctx->frame_size, - frame_bytes); -@@ -864,8 +836,16 @@ - - int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes) - { -- int duration = get_audio_frame_duration(par->codec_id, par->sample_rate, -- par->channels, par->block_align, -+ int channels = par->ch_layout.nb_channels; -+ int duration; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (!channels) -+ channels = par->channels; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ duration = get_audio_frame_duration(par->codec_id, par->sample_rate, -+ channels, par->block_align, - par->codec_tag, par->bits_per_coded_sample, - par->bit_rate, par->extradata, par->frame_size, - frame_bytes); -@@ -901,8 +881,9 @@ - return i; - } - --const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index) -+const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *avcodec, int index) - { -+ const FFCodec *const codec = ffcodec(avcodec); - int i; - if (!codec->hw_configs || index < 0) - return NULL; -@@ -912,25 +893,6 @@ - return &codec->hw_configs[index]->public; - } - --#if FF_API_USER_VISIBLE_AVHWACCEL --AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel) --{ -- return NULL; --} -- --void av_register_hwaccel(AVHWAccel *hwaccel) --{ --} --#endif -- --unsigned int avpriv_toupper4(unsigned int x) --{ -- return av_toupper(x & 0xFF) + -- (av_toupper((x >> 8) & 0xFF) << 8) + -- (av_toupper((x >> 16) & 0xFF) << 16) + --((unsigned)av_toupper((x >> 24) & 0xFF) << 24); --} -- - int ff_thread_ref_frame(ThreadFrame *dst, const ThreadFrame *src) - { - int ret; -@@ -946,7 +908,7 @@ - - if (src->progress && - !(dst->progress = av_buffer_ref(src->progress))) { -- ff_thread_release_buffer(dst->owner[0], dst); -+ ff_thread_release_ext_buffer(dst->owner[0], dst); - return AVERROR(ENOMEM); - } - -@@ -955,19 +917,26 @@ - - #if !HAVE_THREADS - --enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) -+int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f, int flags) - { -- return ff_get_format(avctx, fmt); -+ return ff_get_buffer(avctx, f, flags); - } - --int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) -+int ff_thread_get_ext_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) - { - f->owner[0] = f->owner[1] = avctx; - return ff_get_buffer(avctx, f->f, flags); - } - --void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f) -+void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f) - { -+ if (f) -+ av_frame_unref(f); -+} -+ -+void ff_thread_release_ext_buffer(AVCodecContext *avctx, ThreadFrame *f) -+{ -+ f->owner[0] = f->owner[1] = NULL; - if (f->f) - av_frame_unref(f->f); - } -@@ -980,7 +949,7 @@ - { - } - --void ff_thread_await_progress(ThreadFrame *f, int progress, int field) -+void ff_thread_await_progress(const ThreadFrame *f, int progress, int field) - { - } - -@@ -989,13 +958,14 @@ - return 1; - } - --int ff_alloc_entries(AVCodecContext *avctx, int count) -+int ff_slice_thread_init_progress(AVCodecContext *avctx) - { - return 0; - } - --void ff_reset_entries(AVCodecContext *avctx) -+int ff_slice_thread_allocz_entries(AVCodecContext *avctx, int count) - { -+ return 0; - } - - void ff_thread_await_progress2(AVCodecContext *avctx, int field, int thread, int shift) -diff -Naur a/media/ffvpx/libavcodec/vaapi_av1.c b/media/ffvpx/libavcodec/vaapi_av1.c ---- a/media/ffvpx/libavcodec/vaapi_av1.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vaapi_av1.c 2023-04-06 12:50:24.492176543 +0200 -@@ -18,15 +18,37 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "libavutil/frame.h" - #include "libavutil/pixdesc.h" - #include "hwconfig.h" - #include "vaapi_decode.h" -+#include "internal.h" - #include "av1dec.h" -+#include "thread.h" -+ -+typedef struct VAAPIAV1FrameRef { -+ AVFrame *frame; -+ int valid; -+} VAAPIAV1FrameRef; -+ -+typedef struct VAAPIAV1DecContext { -+ VAAPIDecodeContext base; -+ -+ /** -+ * For film grain case, VAAPI generate 2 output for each frame, -+ * current_frame will not apply film grain, and will be used for -+ * references for next frames. Maintain the reference list without -+ * applying film grain here. And current_display_picture will be -+ * used to apply film grain and push to downstream. -+ */ -+ VAAPIAV1FrameRef ref_tab[AV1_NUM_REF_FRAMES]; -+ AVFrame *tmp_frame; -+} VAAPIAV1DecContext; - - static VASurfaceID vaapi_av1_surface_id(AV1Frame *vf) - { - if (vf) -- return ff_vaapi_get_surface_id(vf->tf.f); -+ return ff_vaapi_get_surface_id(vf->f); - else - return VA_INVALID_SURFACE; - } -@@ -49,6 +71,48 @@ - return bit_depth == 8 ? 0 : bit_depth == 10 ? 1 : 2; - } - -+static int vaapi_av1_decode_init(AVCodecContext *avctx) -+{ -+ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; -+ -+ ctx->tmp_frame = av_frame_alloc(); -+ if (!ctx->tmp_frame) { -+ av_log(avctx, AV_LOG_ERROR, -+ "Failed to allocate frame.\n"); -+ return AVERROR(ENOMEM); -+ } -+ -+ for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) { -+ ctx->ref_tab[i].frame = av_frame_alloc(); -+ if (!ctx->ref_tab[i].frame) { -+ av_log(avctx, AV_LOG_ERROR, -+ "Failed to allocate reference table frame %d.\n", i); -+ return AVERROR(ENOMEM); -+ } -+ ctx->ref_tab[i].valid = 0; -+ } -+ -+ return ff_vaapi_decode_init(avctx); -+} -+ -+static int vaapi_av1_decode_uninit(AVCodecContext *avctx) -+{ -+ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; -+ -+ if (ctx->tmp_frame->buf[0]) -+ ff_thread_release_buffer(avctx, ctx->tmp_frame); -+ av_frame_free(&ctx->tmp_frame); -+ -+ for (int i = 0; i < FF_ARRAY_ELEMS(ctx->ref_tab); i++) { -+ if (ctx->ref_tab[i].frame->buf[0]) -+ ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame); -+ av_frame_free(&ctx->ref_tab[i].frame); -+ } -+ -+ return ff_vaapi_decode_uninit(avctx); -+} -+ -+ - static int vaapi_av1_start_frame(AVCodecContext *avctx, - av_unused const uint8_t *buffer, - av_unused uint32_t size) -@@ -58,40 +122,62 @@ - const AV1RawFrameHeader *frame_header = s->raw_frame_header; - const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; - VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; -+ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; - VADecPictureParameterBufferAV1 pic_param; - int8_t bit_depth_idx; - int err = 0; - int apply_grain = !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; - uint8_t remap_lr_type[4] = {AV1_RESTORE_NONE, AV1_RESTORE_SWITCHABLE, AV1_RESTORE_WIENER, AV1_RESTORE_SGRPROJ}; -- -- pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); -+ uint8_t segmentation_feature_signed[AV1_SEG_LVL_MAX] = {1, 1, 1, 1, 1, 0, 0, 0}; -+ uint8_t segmentation_feature_max[AV1_SEG_LVL_MAX] = {255, AV1_MAX_LOOP_FILTER, -+ AV1_MAX_LOOP_FILTER, AV1_MAX_LOOP_FILTER, AV1_MAX_LOOP_FILTER, 7 , 0 , 0 }; - - bit_depth_idx = vaapi_av1_get_bit_depth_idx(avctx); - if (bit_depth_idx < 0) - goto fail; - -+ if (apply_grain) { -+ if (ctx->tmp_frame->buf[0]) -+ ff_thread_release_buffer(avctx, ctx->tmp_frame); -+ err = ff_thread_get_buffer(avctx, ctx->tmp_frame, AV_GET_BUFFER_FLAG_REF); -+ if (err < 0) -+ goto fail; -+ pic->output_surface = ff_vaapi_get_surface_id(ctx->tmp_frame); -+ } else { -+ pic->output_surface = vaapi_av1_surface_id(&s->cur_frame); -+ } -+ - memset(&pic_param, 0, sizeof(VADecPictureParameterBufferAV1)); - pic_param = (VADecPictureParameterBufferAV1) { -- .profile = seq->seq_profile, -- .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, -- .bit_depth_idx = bit_depth_idx, -- .current_frame = pic->output_surface, -- .current_display_picture = pic->output_surface, -- .frame_width_minus1 = frame_header->frame_width_minus_1, -- .frame_height_minus1 = frame_header->frame_height_minus_1, -- .primary_ref_frame = frame_header->primary_ref_frame, -- .order_hint = frame_header->order_hint, -- .tile_cols = frame_header->tile_cols, -- .tile_rows = frame_header->tile_rows, -- .context_update_tile_id = frame_header->context_update_tile_id, -- .interp_filter = frame_header->interpolation_filter, -- .filter_level[0] = frame_header->loop_filter_level[0], -- .filter_level[1] = frame_header->loop_filter_level[1], -- .filter_level_u = frame_header->loop_filter_level[2], -- .filter_level_v = frame_header->loop_filter_level[3], -- .base_qindex = frame_header->base_q_idx, -- .cdef_damping_minus_3 = frame_header->cdef_damping_minus_3, -- .cdef_bits = frame_header->cdef_bits, -+ .profile = seq->seq_profile, -+ .order_hint_bits_minus_1 = seq->order_hint_bits_minus_1, -+ .bit_depth_idx = bit_depth_idx, -+ .matrix_coefficients = seq->color_config.matrix_coefficients, -+ .current_frame = pic->output_surface, -+ .current_display_picture = vaapi_av1_surface_id(&s->cur_frame), -+ .frame_width_minus1 = frame_header->frame_width_minus_1, -+ .frame_height_minus1 = frame_header->frame_height_minus_1, -+ .primary_ref_frame = frame_header->primary_ref_frame, -+ .order_hint = frame_header->order_hint, -+ .tile_cols = frame_header->tile_cols, -+ .tile_rows = frame_header->tile_rows, -+ .context_update_tile_id = frame_header->context_update_tile_id, -+ .superres_scale_denominator = frame_header->use_superres ? -+ frame_header->coded_denom + AV1_SUPERRES_DENOM_MIN : -+ AV1_SUPERRES_NUM, -+ .interp_filter = frame_header->interpolation_filter, -+ .filter_level[0] = frame_header->loop_filter_level[0], -+ .filter_level[1] = frame_header->loop_filter_level[1], -+ .filter_level_u = frame_header->loop_filter_level[2], -+ .filter_level_v = frame_header->loop_filter_level[3], -+ .base_qindex = frame_header->base_q_idx, -+ .y_dc_delta_q = frame_header->delta_q_y_dc, -+ .u_dc_delta_q = frame_header->delta_q_u_dc, -+ .u_ac_delta_q = frame_header->delta_q_u_ac, -+ .v_dc_delta_q = frame_header->delta_q_v_dc, -+ .v_ac_delta_q = frame_header->delta_q_v_ac, -+ .cdef_damping_minus_3 = frame_header->cdef_damping_minus_3, -+ .cdef_bits = frame_header->cdef_bits, - .seq_info_fields.fields = { - .still_picture = seq->still_picture, - .use_128x128_superblock = seq->use_128x128_superblock, -@@ -162,12 +248,15 @@ - .mode_ref_delta_update = frame_header->loop_filter_delta_update, - }, - .mode_control_fields.bits = { -- .delta_q_present_flag = frame_header->delta_q_present, -- .log2_delta_q_res = frame_header->delta_q_res, -- .tx_mode = frame_header->tx_mode, -- .reference_select = frame_header->reference_select, -- .reduced_tx_set_used = frame_header->reduced_tx_set, -- .skip_mode_present = frame_header->skip_mode_present, -+ .delta_q_present_flag = frame_header->delta_q_present, -+ .log2_delta_q_res = frame_header->delta_q_res, -+ .delta_lf_present_flag = frame_header->delta_lf_present, -+ .log2_delta_lf_res = frame_header->delta_lf_res, -+ .delta_lf_multi = frame_header->delta_lf_multi, -+ .tx_mode = frame_header->tx_mode, -+ .reference_select = frame_header->reference_select, -+ .reduced_tx_set_used = frame_header->reduced_tx_set, -+ .skip_mode_present = frame_header->skip_mode_present, - }, - .loop_restoration_fields.bits = { - .yframe_restoration_type = remap_lr_type[frame_header->lr_type[0]], -@@ -178,14 +267,19 @@ - }, - .qmatrix_fields.bits = { - .using_qmatrix = frame_header->using_qmatrix, -+ .qm_y = frame_header->qm_y, -+ .qm_u = frame_header->qm_u, -+ .qm_v = frame_header->qm_v, - } - }; - - for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { -- if (pic_param.pic_info_fields.bits.frame_type == AV1_FRAME_KEY) -+ if (pic_param.pic_info_fields.bits.frame_type == AV1_FRAME_KEY && frame_header->show_frame) - pic_param.ref_frame_map[i] = VA_INVALID_ID; - else -- pic_param.ref_frame_map[i] = vaapi_av1_surface_id(&s->ref[i]); -+ pic_param.ref_frame_map[i] = ctx->ref_tab[i].valid ? -+ ff_vaapi_get_surface_id(ctx->ref_tab[i].frame) : -+ vaapi_av1_surface_id(&s->ref[i]); - } - for (int i = 0; i < AV1_REFS_PER_FRAME; i++) { - pic_param.ref_frame_idx[i] = frame_header->ref_frame_idx[i]; -@@ -213,10 +307,22 @@ - frame_header->height_in_sbs_minus_1[i]; - } - for (int i = AV1_REF_FRAME_LAST; i <= AV1_REF_FRAME_ALTREF; i++) { -- pic_param.wm[i - 1].wmtype = s->cur_frame.gm_type[i]; -+ pic_param.wm[i - 1].invalid = s->cur_frame.gm_invalid[i]; -+ pic_param.wm[i - 1].wmtype = s->cur_frame.gm_type[i]; - for (int j = 0; j < 6; j++) - pic_param.wm[i - 1].wmmat[j] = s->cur_frame.gm_params[i][j]; - } -+ for (int i = 0; i < AV1_MAX_SEGMENTS; i++) { -+ for (int j = 0; j < AV1_SEG_LVL_MAX; j++) { -+ pic_param.seg_info.feature_mask[i] |= (frame_header->feature_enabled[i][j] << j); -+ if (segmentation_feature_signed[j]) -+ pic_param.seg_info.feature_data[i][j] = av_clip(frame_header->feature_value[i][j], -+ -segmentation_feature_max[j], segmentation_feature_max[j]); -+ else -+ pic_param.seg_info.feature_data[i][j] = av_clip(frame_header->feature_value[i][j], -+ 0, segmentation_feature_max[j]); -+ } -+ } - if (apply_grain) { - for (int i = 0; i < film_grain->num_y_points; i++) { - pic_param.film_grain_info.point_y_value[i] = -@@ -263,8 +369,34 @@ - static int vaapi_av1_end_frame(AVCodecContext *avctx) - { - const AV1DecContext *s = avctx->priv_data; -+ const AV1RawFrameHeader *header = s->raw_frame_header; -+ const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain; - VAAPIDecodePicture *pic = s->cur_frame.hwaccel_picture_private; -- return ff_vaapi_decode_issue(avctx, pic); -+ VAAPIAV1DecContext *ctx = avctx->internal->hwaccel_priv_data; -+ -+ int apply_grain = !(avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && film_grain->apply_grain; -+ int ret; -+ ret = ff_vaapi_decode_issue(avctx, pic); -+ if (ret < 0) -+ return ret; -+ -+ for (int i = 0; i < AV1_NUM_REF_FRAMES; i++) { -+ if (header->refresh_frame_flags & (1 << i)) { -+ if (ctx->ref_tab[i].frame->buf[0]) -+ ff_thread_release_buffer(avctx, ctx->ref_tab[i].frame); -+ -+ if (apply_grain) { -+ ret = av_frame_ref(ctx->ref_tab[i].frame, ctx->tmp_frame); -+ if (ret < 0) -+ return ret; -+ ctx->ref_tab[i].valid = 1; -+ } else { -+ ctx->ref_tab[i].valid = 0; -+ } -+ } -+ } -+ -+ return 0; - } - - static int vaapi_av1_decode_slice(AVCodecContext *avctx, -@@ -311,9 +443,9 @@ - .end_frame = vaapi_av1_end_frame, - .decode_slice = vaapi_av1_decode_slice, - .frame_priv_data_size = sizeof(VAAPIDecodePicture), -- .init = ff_vaapi_decode_init, -- .uninit = ff_vaapi_decode_uninit, -+ .init = vaapi_av1_decode_init, -+ .uninit = vaapi_av1_decode_uninit, - .frame_params = ff_vaapi_common_frame_params, -- .priv_data_size = sizeof(VAAPIDecodeContext), -+ .priv_data_size = sizeof(VAAPIAV1DecContext), - .caps_internal = HWACCEL_CAP_ASYNC_SAFE, - }; -diff -Naur a/media/ffvpx/libavcodec/vaapi_decode.c b/media/ffvpx/libavcodec/vaapi_decode.c ---- a/media/ffvpx/libavcodec/vaapi_decode.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vaapi_decode.c 2023-04-06 12:50:24.492176543 +0200 -@@ -16,6 +16,8 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config_components.h" -+ - #include "libavutil/avassert.h" - #include "libavutil/common.h" - #include "libavutil/pixdesc.h" -@@ -261,14 +263,29 @@ - #ifdef VA_FOURCC_Y210 - MAP(Y210, Y210), - #endif -+#ifdef VA_FOURCC_Y212 -+ MAP(Y212, Y212), -+#endif - // 4:4:0 - MAP(422V, YUV440P), - // 4:4:4 - MAP(444P, YUV444P), -+#ifdef VA_FOURCC_XYUV -+ MAP(XYUV, VUYX), -+#endif -+#ifdef VA_FOURCC_Y410 -+ MAP(Y410, XV30), -+#endif -+#ifdef VA_FOURCC_Y412 -+ MAP(Y412, XV36), -+#endif - // 4:2:0 10-bit - #ifdef VA_FOURCC_P010 - MAP(P010, P010), - #endif -+#ifdef VA_FOURCC_P012 -+ MAP(P012, P012), -+#endif - #ifdef VA_FOURCC_I010 - MAP(I010, YUV420P10), - #endif -@@ -355,6 +372,8 @@ - - ctx->pixel_format_attribute = (VASurfaceAttrib) { - .type = VASurfaceAttribPixelFormat, -+ .flags = VA_SURFACE_ATTRIB_SETTABLE, -+ .value.type = VAGenericValueTypeInteger, - .value.value.i = best_fourcc, - }; - -@@ -391,7 +410,9 @@ - #endif - #if VA_CHECK_VERSION(1, 2, 0) && CONFIG_HEVC_VAAPI_HWACCEL - MAP(HEVC, HEVC_REXT, None, -- ff_vaapi_parse_hevc_rext_profile ), -+ ff_vaapi_parse_hevc_rext_scc_profile ), -+ MAP(HEVC, HEVC_SCC, None, -+ ff_vaapi_parse_hevc_rext_scc_profile ), - #endif - MAP(MJPEG, MJPEG_HUFFMAN_BASELINE_DCT, - JPEGBaseline), -@@ -408,7 +429,9 @@ - MAP(VP9, VP9_0, VP9Profile0 ), - #endif - #if VA_CHECK_VERSION(0, 39, 0) -+ MAP(VP9, VP9_1, VP9Profile1 ), - MAP(VP9, VP9_2, VP9Profile2 ), -+ MAP(VP9, VP9_3, VP9Profile3 ), - #endif - #if VA_CHECK_VERSION(1, 8, 0) - MAP(AV1, AV1_MAIN, AV1Profile0), -@@ -577,10 +600,10 @@ - switch (avctx->codec_id) { - case AV_CODEC_ID_H264: - case AV_CODEC_ID_HEVC: -+ case AV_CODEC_ID_AV1: - frames->initial_pool_size += 16; - break; - case AV_CODEC_ID_VP9: -- case AV_CODEC_ID_AV1: - frames->initial_pool_size += 8; - break; - case AV_CODEC_ID_VP8: -@@ -640,46 +663,6 @@ - ctx->va_config = VA_INVALID_ID; - ctx->va_context = VA_INVALID_ID; - --#if FF_API_STRUCT_VAAPI_CONTEXT -- if (avctx->hwaccel_context) { -- av_log(avctx, AV_LOG_WARNING, "Using deprecated struct " -- "vaapi_context in decode.\n"); -- -- ctx->have_old_context = 1; -- ctx->old_context = avctx->hwaccel_context; -- -- // Really we only want the VAAPI device context, but this -- // allocates a whole generic device context because we don't -- // have any other way to determine how big it should be. -- ctx->device_ref = -- av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_VAAPI); -- if (!ctx->device_ref) { -- err = AVERROR(ENOMEM); -- goto fail; -- } -- ctx->device = (AVHWDeviceContext*)ctx->device_ref->data; -- ctx->hwctx = ctx->device->hwctx; -- -- ctx->hwctx->display = ctx->old_context->display; -- -- // The old VAAPI decode setup assumed this quirk was always -- // present, so set it here to avoid the behaviour changing. -- ctx->hwctx->driver_quirks = -- AV_VAAPI_DRIVER_QUIRK_RENDER_PARAM_BUFFERS; -- -- } --#endif -- --#if FF_API_STRUCT_VAAPI_CONTEXT -- if (ctx->have_old_context) { -- ctx->va_config = ctx->old_context->config_id; -- ctx->va_context = ctx->old_context->context_id; -- -- av_log(avctx, AV_LOG_DEBUG, "Using user-supplied decoder " -- "context: %#x/%#x.\n", ctx->va_config, ctx->va_context); -- } else { --#endif -- - err = ff_decode_get_hw_frames_ctx(avctx, AV_HWDEVICE_TYPE_VAAPI); - if (err < 0) - goto fail; -@@ -690,7 +673,7 @@ - ctx->hwctx = ctx->device->hwctx; - - err = vaapi_decode_make_config(avctx, ctx->frames->device_ref, -- &ctx->va_config, avctx->hw_frames_ctx); -+ &ctx->va_config, NULL); - if (err) - goto fail; - -@@ -709,9 +692,6 @@ - - av_log(avctx, AV_LOG_DEBUG, "Decode context initialised: " - "%#x/%#x.\n", ctx->va_config, ctx->va_context); --#if FF_API_STRUCT_VAAPI_CONTEXT -- } --#endif - - return 0; - -@@ -725,12 +705,6 @@ - VAAPIDecodeContext *ctx = avctx->internal->hwaccel_priv_data; - VAStatus vas; - --#if FF_API_STRUCT_VAAPI_CONTEXT -- if (ctx->have_old_context) { -- av_buffer_unref(&ctx->device_ref); -- } else { --#endif -- - if (ctx->va_context != VA_INVALID_ID) { - vas = vaDestroyContext(ctx->hwctx->display, ctx->va_context); - if (vas != VA_STATUS_SUCCESS) { -@@ -748,9 +722,5 @@ - } - } - --#if FF_API_STRUCT_VAAPI_CONTEXT -- } --#endif -- - return 0; - } -diff -Naur a/media/ffvpx/libavcodec/vaapi_decode.h b/media/ffvpx/libavcodec/vaapi_decode.h ---- a/media/ffvpx/libavcodec/vaapi_decode.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vaapi_decode.h 2023-04-06 12:49:40.256395011 +0200 -@@ -27,11 +27,6 @@ - - #include "avcodec.h" - --#include "version.h" --#if FF_API_STRUCT_VAAPI_CONTEXT --#include "vaapi.h" --#endif -- - static inline VASurfaceID ff_vaapi_get_surface_id(AVFrame *pic) - { - return (uintptr_t)pic->data[3]; -@@ -56,14 +51,6 @@ - VAConfigID va_config; - VAContextID va_context; - --#if FF_API_STRUCT_VAAPI_CONTEXT --FF_DISABLE_DEPRECATION_WARNINGS -- int have_old_context; -- struct vaapi_context *old_context; -- AVBufferRef *device_ref; --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - AVHWDeviceContext *device; - AVVAAPIDeviceContext *hwctx; - -diff -Naur a/media/ffvpx/libavcodec/vaapi_hevc.h b/media/ffvpx/libavcodec/vaapi_hevc.h ---- a/media/ffvpx/libavcodec/vaapi_hevc.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vaapi_hevc.h 2023-04-06 12:50:24.492176543 +0200 -@@ -22,6 +22,6 @@ - #include - #include "avcodec.h" - --VAProfile ff_vaapi_parse_hevc_rext_profile(AVCodecContext *avctx); -+VAProfile ff_vaapi_parse_hevc_rext_scc_profile(AVCodecContext *avctx); - - #endif /* AVCODEC_VAAPI_HEVC_H */ -diff -Naur a/media/ffvpx/libavcodec/vaapi_vp8.c b/media/ffvpx/libavcodec/vaapi_vp8.c ---- a/media/ffvpx/libavcodec/vaapi_vp8.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vaapi_vp8.c 2023-04-06 12:50:06.973471134 +0200 -@@ -36,21 +36,21 @@ - av_unused uint32_t size) - { - const VP8Context *s = avctx->priv_data; -- VAAPIDecodePicture *pic = s->framep[VP56_FRAME_CURRENT]->hwaccel_picture_private; -+ VAAPIDecodePicture *pic = s->framep[VP8_FRAME_CURRENT]->hwaccel_picture_private; - VAPictureParameterBufferVP8 pp; - VAProbabilityDataBufferVP8 prob; - VAIQMatrixBufferVP8 quant; - int err, i, j, k; - -- pic->output_surface = vaapi_vp8_surface_id(s->framep[VP56_FRAME_CURRENT]); -+ pic->output_surface = vaapi_vp8_surface_id(s->framep[VP8_FRAME_CURRENT]); - - pp = (VAPictureParameterBufferVP8) { - .frame_width = avctx->width, - .frame_height = avctx->height, - -- .last_ref_frame = vaapi_vp8_surface_id(s->framep[VP56_FRAME_PREVIOUS]), -- .golden_ref_frame = vaapi_vp8_surface_id(s->framep[VP56_FRAME_GOLDEN]), -- .alt_ref_frame = vaapi_vp8_surface_id(s->framep[VP56_FRAME_GOLDEN2]), -+ .last_ref_frame = vaapi_vp8_surface_id(s->framep[VP8_FRAME_PREVIOUS]), -+ .golden_ref_frame = vaapi_vp8_surface_id(s->framep[VP8_FRAME_GOLDEN]), -+ .alt_ref_frame = vaapi_vp8_surface_id(s->framep[VP8_FRAME_ALTREF]), - .out_of_loop_frame = VA_INVALID_SURFACE, - - .pic_fields.bits = { -@@ -67,8 +67,8 @@ - .loop_filter_adj_enable = s->lf_delta.enabled, - .mode_ref_lf_delta_update = s->lf_delta.update, - -- .sign_bias_golden = s->sign_bias[VP56_FRAME_GOLDEN], -- .sign_bias_alternate = s->sign_bias[VP56_FRAME_GOLDEN2], -+ .sign_bias_golden = s->sign_bias[VP8_FRAME_GOLDEN], -+ .sign_bias_alternate = s->sign_bias[VP8_FRAME_ALTREF], - - .mb_no_coeff_skip = s->mbskip_enabled, - .loop_filter_disable = s->filter.level == 0, -@@ -177,7 +177,7 @@ - static int vaapi_vp8_end_frame(AVCodecContext *avctx) - { - const VP8Context *s = avctx->priv_data; -- VAAPIDecodePicture *pic = s->framep[VP56_FRAME_CURRENT]->hwaccel_picture_private; -+ VAAPIDecodePicture *pic = s->framep[VP8_FRAME_CURRENT]->hwaccel_picture_private; - - return ff_vaapi_decode_issue(avctx, pic); - } -@@ -187,7 +187,7 @@ - uint32_t size) - { - const VP8Context *s = avctx->priv_data; -- VAAPIDecodePicture *pic = s->framep[VP56_FRAME_CURRENT]->hwaccel_picture_private; -+ VAAPIDecodePicture *pic = s->framep[VP8_FRAME_CURRENT]->hwaccel_picture_private; - VASliceParameterBufferVP8 sp; - int err, i; - -diff -Naur a/media/ffvpx/libavcodec/version.c b/media/ffvpx/libavcodec/version.c ---- a/media/ffvpx/libavcodec/version.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/version.c 2023-04-06 12:49:40.256395011 +0200 -@@ -0,0 +1,50 @@ -+/* -+ * Version functions. -+ * -+ * 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 "config.h" -+ -+#include "libavutil/avassert.h" -+#include "avcodec.h" -+#include "codec_id.h" -+#include "version.h" -+ -+#include "libavutil/ffversion.h" -+const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION; -+ -+unsigned avcodec_version(void) -+{ -+ av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563); -+ av_assert0(AV_CODEC_ID_ADPCM_G722==69660); -+ av_assert0(AV_CODEC_ID_SRT==94216); -+ av_assert0(LIBAVCODEC_VERSION_MICRO >= 100); -+ -+ return LIBAVCODEC_VERSION_INT; -+} -+ -+const char *avcodec_configuration(void) -+{ -+ return FFMPEG_CONFIGURATION; -+} -+ -+const char *avcodec_license(void) -+{ -+#define LICENSE_PREFIX "libavcodec license: " -+ return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1]; -+} -diff -Naur a/media/ffvpx/libavcodec/version.h b/media/ffvpx/libavcodec/version.h ---- a/media/ffvpx/libavcodec/version.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/version.h 2023-04-06 12:50:24.492176543 +0200 -@@ -27,8 +27,9 @@ - - #include "libavutil/version.h" - --#define LIBAVCODEC_VERSION_MAJOR 58 --#define LIBAVCODEC_VERSION_MINOR 134 -+#include "version_major.h" -+ -+#define LIBAVCODEC_VERSION_MINOR 5 - #define LIBAVCODEC_VERSION_MICRO 100 - - #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ -@@ -41,132 +42,4 @@ - - #define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION) - --/** -- * FF_API_* defines may be placed below to indicate public API that will be -- * dropped at a future version bump. The defines themselves are not part of -- * the public API and may change, break or disappear at any time. -- * -- * @note, when bumping the major version it is recommended to manually -- * disable each FF_API_* in its own commit instead of disabling them all -- * at once through the bump. This improves the git bisect-ability of the change. -- */ -- --#ifndef FF_API_AVCTX_TIMEBASE --#define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_CODED_FRAME --#define FF_API_CODED_FRAME (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_SIDEDATA_ONLY_PKT --#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_VDPAU_PROFILE --#define FF_API_VDPAU_PROFILE (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_CONVERGENCE_DURATION --#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_AVPICTURE --#define FF_API_AVPICTURE (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_AVPACKET_OLD_API --#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_RTP_CALLBACK --#define FF_API_RTP_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_VBV_DELAY --#define FF_API_VBV_DELAY (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_CODER_TYPE --#define FF_API_CODER_TYPE (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_STAT_BITS --#define FF_API_STAT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_PRIVATE_OPT --#define FF_API_PRIVATE_OPT (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_ASS_TIMING --#define FF_API_ASS_TIMING (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_OLD_BSF --#define FF_API_OLD_BSF (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_COPY_CONTEXT --#define FF_API_COPY_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_GET_CONTEXT_DEFAULTS --#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_NVENC_OLD_NAME --#define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_STRUCT_VAAPI_CONTEXT --#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_MERGE_SD_API --#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_TAG_STRING --#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_GETCHROMA --#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_CODEC_GET_SET --#define FF_API_CODEC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_USER_VISIBLE_AVHWACCEL --#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_LOCKMGR --#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_NEXT --#define FF_API_NEXT (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_UNSANITIZED_BITRATES --#define FF_API_UNSANITIZED_BITRATES (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_OPENH264_SLICE_MODE --#define FF_API_OPENH264_SLICE_MODE (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_OPENH264_CABAC --#define FF_API_OPENH264_CABAC (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_UNUSED_CODEC_CAPS --#define FF_API_UNUSED_CODEC_CAPS (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_AVPRIV_PUT_BITS --#define FF_API_AVPRIV_PUT_BITS (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_OLD_ENCDEC --#define FF_API_OLD_ENCDEC (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_AVCODEC_PIX_FMT --#define FF_API_AVCODEC_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_MPV_RC_STRATEGY --#define FF_API_MPV_RC_STRATEGY (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_PARSER_CHANGE --#define FF_API_PARSER_CHANGE (LIBAVCODEC_VERSION_MAJOR < 59) --#endif --#ifndef FF_API_THREAD_SAFE_CALLBACKS --#define FF_API_THREAD_SAFE_CALLBACKS (LIBAVCODEC_VERSION_MAJOR < 60) --#endif --#ifndef FF_API_DEBUG_MV --#define FF_API_DEBUG_MV (LIBAVCODEC_VERSION_MAJOR < 60) --#endif --#ifndef FF_API_GET_FRAME_CLASS --#define FF_API_GET_FRAME_CLASS (LIBAVCODEC_VERSION_MAJOR < 60) --#endif --#ifndef FF_API_AUTO_THREADS --#define FF_API_AUTO_THREADS (LIBAVCODEC_VERSION_MAJOR < 60) --#endif --#ifndef FF_API_INIT_PACKET --#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 60) --#endif -- - #endif /* AVCODEC_VERSION_H */ -diff -Naur a/media/ffvpx/libavcodec/version_major.h b/media/ffvpx/libavcodec/version_major.h ---- a/media/ffvpx/libavcodec/version_major.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/version_major.h 2023-04-06 12:50:24.492176543 +0200 -@@ -0,0 +1,52 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVCODEC_VERSION_MAJOR_H -+#define AVCODEC_VERSION_MAJOR_H -+ -+/** -+ * @file -+ * @ingroup libavc -+ * Libavcodec version macros. -+ */ -+ -+#define LIBAVCODEC_VERSION_MAJOR 60 -+ -+/** -+ * FF_API_* defines may be placed below to indicate public API that will be -+ * dropped at a future version bump. The defines themselves are not part of -+ * the public API and may change, break or disappear at any time. -+ * -+ * @note, when bumping the major version it is recommended to manually -+ * disable each FF_API_* in its own commit instead of disabling them all -+ * at once through the bump. This improves the git bisect-ability of the change. -+ */ -+ -+#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_IDCT_NONE (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_AYUV_CODECID (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_VT_OUTPUT_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61) -+#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61) -+ -+// reminder to remove CrystalHD decoders on next major bump -+#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61) -+ -+#endif /* AVCODEC_VERSION_MAJOR_H */ -diff -Naur a/media/ffvpx/libavcodec/videodsp.c b/media/ffvpx/libavcodec/videodsp.c ---- a/media/ffvpx/libavcodec/videodsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/videodsp.c 2023-04-06 12:50:06.973471134 +0200 -@@ -18,9 +18,10 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config.h" - #include "libavutil/attributes.h" - #include "libavutil/avassert.h" --#include "libavutil/common.h" -+#include "libavutil/macros.h" - #include "videodsp.h" - - #define BIT_DEPTH 8 -@@ -31,7 +32,7 @@ - #include "videodsp_template.c" - #undef BIT_DEPTH - --static void just_return(uint8_t *buf, ptrdiff_t stride, int h) -+static void just_return(const uint8_t *buf, ptrdiff_t stride, int h) - { - } - -@@ -44,14 +45,17 @@ - ctx->emulated_edge_mc = ff_emulated_edge_mc_16; - } - -- if (ARCH_AARCH64) -- ff_videodsp_init_aarch64(ctx, bpc); -- if (ARCH_ARM) -- ff_videodsp_init_arm(ctx, bpc); -- if (ARCH_PPC) -- ff_videodsp_init_ppc(ctx, bpc); -- if (ARCH_X86) -- ff_videodsp_init_x86(ctx, bpc); -- if (ARCH_MIPS) -- ff_videodsp_init_mips(ctx, bpc); -+#if ARCH_AARCH64 -+ ff_videodsp_init_aarch64(ctx, bpc); -+#elif ARCH_ARM -+ ff_videodsp_init_arm(ctx, bpc); -+#elif ARCH_PPC -+ ff_videodsp_init_ppc(ctx, bpc); -+#elif ARCH_X86 -+ ff_videodsp_init_x86(ctx, bpc); -+#elif ARCH_MIPS -+ ff_videodsp_init_mips(ctx, bpc); -+#elif ARCH_LOONGARCH64 -+ ff_videodsp_init_loongarch(ctx, bpc); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/videodsp.h b/media/ffvpx/libavcodec/videodsp.h ---- a/media/ffvpx/libavcodec/videodsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/videodsp.h 2023-04-06 12:50:06.973471134 +0200 -@@ -36,7 +36,6 @@ - int src_x, int src_y, int w, int h); - - EMULATED_EDGE(8) --EMULATED_EDGE(16) - - typedef struct VideoDSPContext { - /** -@@ -73,7 +72,7 @@ - * @param stride distance between two lines of buf (in bytes) - * @param h number of lines to prefetch - */ -- void (*prefetch)(uint8_t *buf, ptrdiff_t stride, int h); -+ void (*prefetch)(const uint8_t *buf, ptrdiff_t stride, int h); - } VideoDSPContext; - - void ff_videodsp_init(VideoDSPContext *ctx, int bpc); -@@ -84,5 +83,6 @@ - void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc); - void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc); - void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc); -+void ff_videodsp_init_loongarch(VideoDSPContext *ctx, int bpc); - - #endif /* AVCODEC_VIDEODSP_H */ -diff -Naur a/media/ffvpx/libavcodec/videodsp_template.c b/media/ffvpx/libavcodec/videodsp_template.c ---- a/media/ffvpx/libavcodec/videodsp_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/videodsp_template.c 2023-04-06 12:50:24.492176543 +0200 -@@ -20,6 +20,10 @@ - */ - - #include "bit_depth_template.c" -+#if BIT_DEPTH != 8 -+// ff_emulated_edge_mc_8 is used by the x86 MpegVideoDSP API. -+static -+#endif - void FUNC(ff_emulated_edge_mc)(uint8_t *buf, const uint8_t *src, - ptrdiff_t buf_linesize, - ptrdiff_t src_linesize, -@@ -60,7 +64,7 @@ - av_assert2(start_x < end_x && block_w); - - w = end_x - start_x; -- src += start_y * src_linesize + start_x * sizeof(pixel); -+ src += start_y * src_linesize + start_x * (ptrdiff_t)sizeof(pixel); - buf += start_x * sizeof(pixel); - - // top -@@ -83,7 +87,7 @@ - buf += buf_linesize; - } - -- buf -= block_h * buf_linesize + start_x * sizeof(pixel); -+ buf -= block_h * buf_linesize + start_x * (ptrdiff_t)sizeof(pixel); - while (block_h--) { - pixel *bufp = (pixel *) buf; - -diff -Naur a/media/ffvpx/libavcodec/vlc.c b/media/ffvpx/libavcodec/vlc.c ---- a/media/ffvpx/libavcodec/vlc.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vlc.c 2023-04-06 12:49:40.256395011 +0200 -@@ -0,0 +1,378 @@ -+/* -+ * API for creating VLC trees -+ * Copyright (c) 2000, 2001 Fabrice Bellard -+ * Copyright (c) 2002-2004 Michael Niedermayer -+ * Copyright (c) 2010 Loren Merritt -+ * -+ * 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 -+#include -+#include -+#include -+ -+#include "libavutil/attributes.h" -+#include "libavutil/avassert.h" -+#include "libavutil/error.h" -+#include "libavutil/internal.h" -+#include "libavutil/log.h" -+#include "libavutil/macros.h" -+#include "libavutil/mem.h" -+#include "libavutil/qsort.h" -+#include "libavutil/reverse.h" -+#include "vlc.h" -+ -+#define GET_DATA(v, table, i, wrap, size) \ -+{ \ -+ const uint8_t *ptr = (const uint8_t *)table + i * wrap; \ -+ switch(size) { \ -+ case 1: \ -+ v = *(const uint8_t *)ptr; \ -+ break; \ -+ case 2: \ -+ v = *(const uint16_t *)ptr; \ -+ break; \ -+ case 4: \ -+ default: \ -+ av_assert1(size == 4); \ -+ v = *(const uint32_t *)ptr; \ -+ break; \ -+ } \ -+} -+ -+ -+static int alloc_table(VLC *vlc, int size, int use_static) -+{ -+ int index = vlc->table_size; -+ -+ vlc->table_size += size; -+ if (vlc->table_size > vlc->table_allocated) { -+ if (use_static) -+ abort(); // cannot do anything, init_vlc() is used with too little memory -+ vlc->table_allocated += (1 << vlc->bits); -+ vlc->table = av_realloc_f(vlc->table, vlc->table_allocated, sizeof(*vlc->table)); -+ if (!vlc->table) { -+ vlc->table_allocated = 0; -+ vlc->table_size = 0; -+ return AVERROR(ENOMEM); -+ } -+ memset(vlc->table + vlc->table_allocated - (1 << vlc->bits), 0, sizeof(*vlc->table) << vlc->bits); -+ } -+ return index; -+} -+ -+#define LOCALBUF_ELEMS 1500 // the maximum currently needed is 1296 by rv34 -+ -+static av_always_inline uint32_t bitswap_32(uint32_t x) -+{ -+ return (uint32_t)ff_reverse[ x & 0xFF] << 24 | -+ (uint32_t)ff_reverse[(x >> 8) & 0xFF] << 16 | -+ (uint32_t)ff_reverse[(x >> 16) & 0xFF] << 8 | -+ (uint32_t)ff_reverse[ x >> 24]; -+} -+ -+typedef struct VLCcode { -+ uint8_t bits; -+ VLCBaseType symbol; -+ /** codeword, with the first bit-to-be-read in the msb -+ * (even if intended for a little-endian bitstream reader) */ -+ uint32_t code; -+} VLCcode; -+ -+static int vlc_common_init(VLC *vlc, int nb_bits, int nb_codes, -+ VLCcode **buf, int flags) -+{ -+ vlc->bits = nb_bits; -+ vlc->table_size = 0; -+ if (flags & INIT_VLC_USE_NEW_STATIC) { -+ av_assert0(nb_codes <= LOCALBUF_ELEMS); -+ } else { -+ vlc->table = NULL; -+ vlc->table_allocated = 0; -+ } -+ if (nb_codes > LOCALBUF_ELEMS) { -+ *buf = av_malloc_array(nb_codes, sizeof(VLCcode)); -+ if (!*buf) -+ return AVERROR(ENOMEM); -+ } -+ -+ return 0; -+} -+ -+static int compare_vlcspec(const void *a, const void *b) -+{ -+ const VLCcode *sa = a, *sb = b; -+ return (sa->code >> 1) - (sb->code >> 1); -+} -+ -+/** -+ * Build VLC decoding tables suitable for use with get_vlc(). -+ * -+ * @param vlc the context to be initialized -+ * -+ * @param table_nb_bits max length of vlc codes to store directly in this table -+ * (Longer codes are delegated to subtables.) -+ * -+ * @param nb_codes number of elements in codes[] -+ * -+ * @param codes descriptions of the vlc codes -+ * These must be ordered such that codes going into the same subtable are contiguous. -+ * Sorting by VLCcode.code is sufficient, though not necessary. -+ */ -+static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, -+ VLCcode *codes, int flags) -+{ -+ int table_size, table_index; -+ VLCElem *table; -+ -+ if (table_nb_bits > 30) -+ return AVERROR(EINVAL); -+ table_size = 1 << table_nb_bits; -+ table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC); -+ ff_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size); -+ if (table_index < 0) -+ return table_index; -+ table = &vlc->table[table_index]; -+ -+ /* first pass: map codes and compute auxiliary table sizes */ -+ for (int i = 0; i < nb_codes; i++) { -+ int n = codes[i].bits; -+ uint32_t code = codes[i].code; -+ int symbol = codes[i].symbol; -+ ff_dlog(NULL, "i=%d n=%d code=0x%"PRIx32"\n", i, n, code); -+ if (n <= table_nb_bits) { -+ /* no need to add another table */ -+ int j = code >> (32 - table_nb_bits); -+ int nb = 1 << (table_nb_bits - n); -+ int inc = 1; -+ -+ if (flags & INIT_VLC_OUTPUT_LE) { -+ j = bitswap_32(code); -+ inc = 1 << n; -+ } -+ for (int k = 0; k < nb; k++) { -+ int bits = table[j].len; -+ int oldsym = table[j].sym; -+ ff_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n); -+ if ((bits || oldsym) && (bits != n || oldsym != symbol)) { -+ av_log(NULL, AV_LOG_ERROR, "incorrect codes\n"); -+ return AVERROR_INVALIDDATA; -+ } -+ table[j].len = n; -+ table[j].sym = symbol; -+ j += inc; -+ } -+ } else { -+ /* fill auxiliary table recursively */ -+ uint32_t code_prefix; -+ int index, subtable_bits, j, k; -+ -+ n -= table_nb_bits; -+ code_prefix = code >> (32 - table_nb_bits); -+ subtable_bits = n; -+ codes[i].bits = n; -+ codes[i].code = code << table_nb_bits; -+ for (k = i + 1; k < nb_codes; k++) { -+ n = codes[k].bits - table_nb_bits; -+ if (n <= 0) -+ break; -+ code = codes[k].code; -+ if (code >> (32 - table_nb_bits) != code_prefix) -+ break; -+ codes[k].bits = n; -+ codes[k].code = code << table_nb_bits; -+ subtable_bits = FFMAX(subtable_bits, n); -+ } -+ subtable_bits = FFMIN(subtable_bits, table_nb_bits); -+ j = (flags & INIT_VLC_OUTPUT_LE) ? bitswap_32(code_prefix) >> (32 - table_nb_bits) : code_prefix; -+ table[j].len = -subtable_bits; -+ ff_dlog(NULL, "%4x: n=%d (subtable)\n", -+ j, codes[i].bits + table_nb_bits); -+ index = build_table(vlc, subtable_bits, k-i, codes+i, flags); -+ if (index < 0) -+ return index; -+ /* note: realloc has been done, so reload tables */ -+ table = &vlc->table[table_index]; -+ table[j].sym = index; -+ if (table[j].sym != index) { -+ avpriv_request_sample(NULL, "strange codes"); -+ return AVERROR_PATCHWELCOME; -+ } -+ i = k-1; -+ } -+ } -+ -+ for (int i = 0; i < table_size; i++) { -+ if (table[i].len == 0) -+ table[i].sym = -1; -+ } -+ -+ return table_index; -+} -+ -+static int vlc_common_end(VLC *vlc, int nb_bits, int nb_codes, VLCcode *codes, -+ int flags, VLCcode localbuf[LOCALBUF_ELEMS]) -+{ -+ int ret = build_table(vlc, nb_bits, nb_codes, codes, flags); -+ -+ if (flags & INIT_VLC_USE_NEW_STATIC) { -+ if (vlc->table_size != vlc->table_allocated && -+ !(flags & (INIT_VLC_STATIC_OVERLONG & ~INIT_VLC_USE_NEW_STATIC))) -+ av_log(NULL, AV_LOG_ERROR, "needed %d had %d\n", vlc->table_size, vlc->table_allocated); -+ av_assert0(ret >= 0); -+ } else { -+ if (codes != localbuf) -+ av_free(codes); -+ if (ret < 0) { -+ av_freep(&vlc->table); -+ return ret; -+ } -+ } -+ return 0; -+} -+ -+/* Build VLC decoding tables suitable for use with get_vlc(). -+ -+ 'nb_bits' sets the decoding table size (2^nb_bits) entries. The -+ bigger it is, the faster is the decoding. But it should not be too -+ big to save memory and L1 cache. '9' is a good compromise. -+ -+ 'nb_codes' : number of vlcs codes -+ -+ 'bits' : table which gives the size (in bits) of each vlc code. -+ -+ 'codes' : table which gives the bit pattern of of each vlc code. -+ -+ 'symbols' : table which gives the values to be returned from get_vlc(). -+ -+ 'xxx_wrap' : give the number of bytes between each entry of the -+ 'bits' or 'codes' tables. -+ -+ 'xxx_size' : gives the number of bytes of each entry of the 'bits' -+ or 'codes' tables. Currently 1,2 and 4 are supported. -+ -+ 'wrap' and 'size' make it possible to use any memory configuration and types -+ (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables. -+*/ -+int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, -+ const void *bits, int bits_wrap, int bits_size, -+ const void *codes, int codes_wrap, int codes_size, -+ const void *symbols, int symbols_wrap, int symbols_size, -+ int flags) -+{ -+ VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; -+ int j, ret; -+ -+ ret = vlc_common_init(vlc, nb_bits, nb_codes, &buf, flags); -+ if (ret < 0) -+ return ret; -+ -+ av_assert0(symbols_size <= 2 || !symbols); -+ j = 0; -+#define COPY(condition)\ -+ for (int i = 0; i < nb_codes; i++) { \ -+ unsigned len; \ -+ GET_DATA(len, bits, i, bits_wrap, bits_size); \ -+ if (!(condition)) \ -+ continue; \ -+ if (len > 3*nb_bits || len > 32) { \ -+ av_log(NULL, AV_LOG_ERROR, "Too long VLC (%u) in init_vlc\n", len);\ -+ if (buf != localbuf) \ -+ av_free(buf); \ -+ return AVERROR(EINVAL); \ -+ } \ -+ buf[j].bits = len; \ -+ GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \ -+ if (buf[j].code >= (1LL< nb_bits); -+ // qsort is the slowest part of init_vlc, and could probably be improved or avoided -+ AV_QSORT(buf, j, struct VLCcode, compare_vlcspec); -+ COPY(len && len <= nb_bits); -+ nb_codes = j; -+ -+ return vlc_common_end(vlc, nb_bits, nb_codes, buf, -+ flags, localbuf); -+} -+ -+int ff_init_vlc_from_lengths(VLC *vlc, int nb_bits, int nb_codes, -+ const int8_t *lens, int lens_wrap, -+ const void *symbols, int symbols_wrap, int symbols_size, -+ int offset, int flags, void *logctx) -+{ -+ VLCcode localbuf[LOCALBUF_ELEMS], *buf = localbuf; -+ uint64_t code; -+ int ret, j, len_max = FFMIN(32, 3 * nb_bits); -+ -+ ret = vlc_common_init(vlc, nb_bits, nb_codes, &buf, flags); -+ if (ret < 0) -+ return ret; -+ -+ j = code = 0; -+ for (int i = 0; i < nb_codes; i++, lens += lens_wrap) { -+ int len = *lens; -+ if (len > 0) { -+ unsigned sym; -+ -+ buf[j].bits = len; -+ if (symbols) -+ GET_DATA(sym, symbols, i, symbols_wrap, symbols_size) -+ else -+ sym = i; -+ buf[j].symbol = sym + offset; -+ buf[j++].code = code; -+ } else if (len < 0) { -+ len = -len; -+ } else -+ continue; -+ if (len > len_max || code & ((1U << (32 - len)) - 1)) { -+ av_log(logctx, AV_LOG_ERROR, "Invalid VLC (length %u)\n", len); -+ goto fail; -+ } -+ code += 1U << (32 - len); -+ if (code > UINT32_MAX + 1ULL) { -+ av_log(logctx, AV_LOG_ERROR, "Overdetermined VLC tree\n"); -+ goto fail; -+ } -+ } -+ return vlc_common_end(vlc, nb_bits, j, buf, flags, localbuf); -+fail: -+ if (buf != localbuf) -+ av_free(buf); -+ return AVERROR_INVALIDDATA; -+} -+ -+void ff_free_vlc(VLC *vlc) -+{ -+ av_freep(&vlc->table); -+} -diff -Naur a/media/ffvpx/libavcodec/vlc.h b/media/ffvpx/libavcodec/vlc.h ---- a/media/ffvpx/libavcodec/vlc.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vlc.h 2023-04-06 12:49:40.256395011 +0200 -@@ -21,11 +21,16 @@ - - #include - --#define VLC_TYPE int16_t -+// When changing this, be sure to also update tableprint_vlc.h accordingly. -+typedef int16_t VLCBaseType; -+ -+typedef struct VLCElem { -+ VLCBaseType sym, len; -+} VLCElem; - - typedef struct VLC { - int bits; -- VLC_TYPE (*table)[2]; ///< code, bits -+ VLCElem *table; - int table_size, table_allocated; - } VLC; - -@@ -98,7 +103,7 @@ - #define INIT_CUSTOM_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \ - h, i, j, flags, static_size) \ - do { \ -- static VLC_TYPE table[static_size][2]; \ -+ static VLCElem table[static_size]; \ - (vlc)->table = table; \ - (vlc)->table_allocated = static_size; \ - ff_init_vlc_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \ -@@ -127,7 +132,7 @@ - symbols, symbols_wrap, symbols_size, \ - offset, flags, static_size) \ - do { \ -- static VLC_TYPE table[static_size][2]; \ -+ static VLCElem table[static_size]; \ - (vlc)->table = table; \ - (vlc)->table_allocated = static_size; \ - ff_init_vlc_from_lengths(vlc, bits, nb_codes, lens, len_wrap, \ -diff -Naur a/media/ffvpx/libavcodec/vorbis_parser.c b/media/ffvpx/libavcodec/vorbis_parser.c ---- a/media/ffvpx/libavcodec/vorbis_parser.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vorbis_parser.c 2023-04-06 12:49:40.256395011 +0200 -@@ -25,6 +25,8 @@ - * Determines the duration for each packet. - */ - -+#include "config_components.h" -+ - #include "libavutil/log.h" - - #include "get_bits.h" -@@ -332,7 +334,7 @@ - av_vorbis_parse_free(&s->vp); - } - --AVCodecParser ff_vorbis_parser = { -+const AVCodecParser ff_vorbis_parser = { - .codec_ids = { AV_CODEC_ID_VORBIS }, - .priv_data_size = sizeof(VorbisParseContext), - .parser_parse = vorbis_parse, -diff -Naur a/media/ffvpx/libavcodec/vp56.h b/media/ffvpx/libavcodec/vp56.h ---- a/media/ffvpx/libavcodec/vp56.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp56.h 2023-04-06 12:50:06.973471134 +0200 -@@ -31,11 +31,11 @@ - #include "avcodec.h" - #include "get_bits.h" - #include "hpeldsp.h" --#include "bytestream.h" - #include "h264chroma.h" - #include "videodsp.h" - #include "vp3dsp.h" - #include "vp56dsp.h" -+#include "vpx_rac.h" - - typedef struct vp56_context VP56Context; - -@@ -44,7 +44,6 @@ - VP56_FRAME_CURRENT = 0, - VP56_FRAME_PREVIOUS = 1, - VP56_FRAME_GOLDEN = 2, -- VP56_FRAME_GOLDEN2 = 3, - } VP56Frame; - - typedef enum { -@@ -84,16 +83,6 @@ - typedef int (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf, - int buf_size); - --typedef struct VP56RangeCoder { -- int high; -- int bits; /* stored negated (i.e. negative "bits" is a positive number of -- bits left) in order to eliminate a negate in cache refilling */ -- const uint8_t *buffer; -- const uint8_t *end; -- unsigned int code_word; -- int end_reached; --} VP56RangeCoder; -- - typedef struct VP56RefDc { - uint8_t not_null_dc; - VP56Frame ref_frame; -@@ -134,9 +123,9 @@ - AVFrame *frames[4]; - uint8_t *edge_emu_buffer_alloc; - uint8_t *edge_emu_buffer; -- VP56RangeCoder c; -- VP56RangeCoder cc; -- VP56RangeCoder *ccp; -+ VPXRangeCoder c; -+ VPXRangeCoder cc; -+ VPXRangeCoder *ccp; - int sub_version; - - /* frame info */ -@@ -216,174 +205,47 @@ - }; - - --int ff_vp56_init(AVCodecContext *avctx, int flip, int has_alpha); -+/** -+ * Initializes an VP56Context. Expects its caller to clean up -+ * in case of error. -+ */ - int ff_vp56_init_context(AVCodecContext *avctx, VP56Context *s, - int flip, int has_alpha); --int ff_vp56_free(AVCodecContext *avctx); - int ff_vp56_free_context(VP56Context *s); - void ff_vp56_init_dequant(VP56Context *s, int quantizer); --int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, -- AVPacket *avpkt); -+int ff_vp56_decode_frame(AVCodecContext *avctx, AVFrame *frame, -+ int *got_frame, AVPacket *avpkt); - - - /** - * vp56 specific range coder implementation - */ - --extern const uint8_t ff_vp56_norm_shift[256]; --int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size); -- --/** -- * vp5689 returns 1 if the end of the stream has been reached, 0 otherwise. -- */ --static av_always_inline int vpX_rac_is_end(VP56RangeCoder *c) --{ -- if (c->end <= c->buffer && c->bits >= 0) -- c->end_reached ++; -- return c->end_reached > 10; --} -- --static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c) --{ -- int shift = ff_vp56_norm_shift[c->high]; -- int bits = c->bits; -- unsigned int code_word = c->code_word; -- -- c->high <<= shift; -- code_word <<= shift; -- bits += shift; -- if(bits >= 0 && c->buffer < c->end) { -- code_word |= bytestream_get_be16(&c->buffer) << bits; -- bits -= 16; -- } -- c->bits = bits; -- return code_word; --} -- --#if ARCH_ARM --#include "arm/vp56_arith.h" --#elif ARCH_X86 --#include "x86/vp56_arith.h" --#endif -- --#ifndef vp56_rac_get_prob --#define vp56_rac_get_prob vp56_rac_get_prob --static av_always_inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob) --{ -- unsigned int code_word = vp56_rac_renorm(c); -- unsigned int low = 1 + (((c->high - 1) * prob) >> 8); -- unsigned int low_shift = low << 16; -- int bit = code_word >= low_shift; -- -- c->high = bit ? c->high - low : low; -- c->code_word = bit ? code_word - low_shift : code_word; -- -- return bit; --} --#endif -- --#ifndef vp56_rac_get_prob_branchy --// branchy variant, to be used where there's a branch based on the bit decoded --static av_always_inline int vp56_rac_get_prob_branchy(VP56RangeCoder *c, int prob) --{ -- unsigned long code_word = vp56_rac_renorm(c); -- unsigned low = 1 + (((c->high - 1) * prob) >> 8); -- unsigned low_shift = low << 16; -- -- if (code_word >= low_shift) { -- c->high -= low; -- c->code_word = code_word - low_shift; -- return 1; -- } -- -- c->high = low; -- c->code_word = code_word; -- return 0; --} --#endif -- --static av_always_inline int vp56_rac_get(VP56RangeCoder *c) --{ -- unsigned int code_word = vp56_rac_renorm(c); -- /* equiprobable */ -- int low = (c->high + 1) >> 1; -- unsigned int low_shift = low << 16; -- int bit = code_word >= low_shift; -- if (bit) { -- c->high -= low; -- code_word -= low_shift; -- } else { -- c->high = low; -- } -- -- c->code_word = code_word; -- return bit; --} -- --// rounding is different than vp56_rac_get, is vp56_rac_get wrong? --static av_always_inline int vp8_rac_get(VP56RangeCoder *c) --{ -- return vp56_rac_get_prob(c, 128); --} -- --static int vp56_rac_gets(VP56RangeCoder *c, int bits) -+static int vp56_rac_gets(VPXRangeCoder *c, int bits) - { - int value = 0; - - while (bits--) { -- value = (value << 1) | vp56_rac_get(c); -+ value = (value << 1) | vpx_rac_get(c); - } - - return value; - } - --static int vp8_rac_get_uint(VP56RangeCoder *c, int bits) --{ -- int value = 0; -- -- while (bits--) { -- value = (value << 1) | vp8_rac_get(c); -- } -- -- return value; --} -- --// fixme: add 1 bit to all the calls to this? --static av_unused int vp8_rac_get_sint(VP56RangeCoder *c, int bits) --{ -- int v; -- -- if (!vp8_rac_get(c)) -- return 0; -- -- v = vp8_rac_get_uint(c, bits); -- -- if (vp8_rac_get(c)) -- v = -v; -- -- return v; --} -- - // P(7) --static av_unused int vp56_rac_gets_nn(VP56RangeCoder *c, int bits) -+static av_unused int vp56_rac_gets_nn(VPXRangeCoder *c, int bits) - { - int v = vp56_rac_gets(c, 7) << 1; - return v + !v; - } - --static av_unused int vp8_rac_get_nn(VP56RangeCoder *c) --{ -- int v = vp8_rac_get_uint(c, 7) << 1; -- return v + !v; --} -- - static av_always_inline --int vp56_rac_get_tree(VP56RangeCoder *c, -+int vp56_rac_get_tree(VPXRangeCoder *c, - const VP56Tree *tree, - const uint8_t *probs) - { - while (tree->val > 0) { -- if (vp56_rac_get_prob_branchy(c, probs[tree->prob_idx])) -+ if (vpx_rac_get_prob_branchy(c, probs[tree->prob_idx])) - tree += tree->val; - else - tree++; -@@ -391,30 +253,4 @@ - return -tree->val; - } - --// how probabilities are associated with decisions is different I think --// well, the new scheme fits in the old but this way has one fewer branches per decision --static av_always_inline int vp8_rac_get_tree(VP56RangeCoder *c, const int8_t (*tree)[2], -- const uint8_t *probs) --{ -- int i = 0; -- -- do { -- i = tree[i][vp56_rac_get_prob(c, probs[i])]; -- } while (i > 0); -- -- return -i; --} -- --// DCTextra --static av_always_inline int vp8_rac_get_coeff(VP56RangeCoder *c, const uint8_t *prob) --{ -- int v = 0; -- -- do { -- v = (v<<1) + vp56_rac_get_prob(c, *prob++); -- } while (*prob); -- -- return v; --} -- - #endif /* AVCODEC_VP56_H */ -diff -Naur a/media/ffvpx/libavcodec/vp56rac.c b/media/ffvpx/libavcodec/vp56rac.c ---- a/media/ffvpx/libavcodec/vp56rac.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp56rac.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,51 +0,0 @@ --/* -- * VP5/6/8 decoder -- * Copyright (c) 2010 Fiona Glaser -- * -- * 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/common.h" --#include "vp56.h" -- --const uint8_t ff_vp56_norm_shift[256]= { -- 8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, -- 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, --}; -- --int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size) --{ -- c->high = 255; -- c->bits = -16; -- c->buffer = buf; -- c->end = buf + buf_size; -- c->end_reached = 0; -- if (buf_size < 1) -- return AVERROR_INVALIDDATA; -- c->code_word = bytestream_get_be24(&c->buffer); -- return 0; --} -diff -Naur a/media/ffvpx/libavcodec/vp89_rac.h b/media/ffvpx/libavcodec/vp89_rac.h ---- a/media/ffvpx/libavcodec/vp89_rac.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp89_rac.h 2023-04-06 12:50:06.974471174 +0200 -@@ -0,0 +1,66 @@ -+/* -+ * Copyright (C) 2006 Aurelien Jacobs -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * Range decoder functions common to VP8 and VP9 -+ */ -+ -+#ifndef AVCODEC_VP89_RAC_H -+#define AVCODEC_VP89_RAC_H -+ -+#include -+ -+#include "libavutil/attributes.h" -+ -+#include "vpx_rac.h" -+ -+// rounding is different than vpx_rac_get, is vpx_rac_get wrong? -+static av_always_inline int vp89_rac_get(VPXRangeCoder *c) -+{ -+ return vpx_rac_get_prob(c, 128); -+} -+ -+static av_unused int vp89_rac_get_uint(VPXRangeCoder *c, int bits) -+{ -+ int value = 0; -+ -+ while (bits--) { -+ value = (value << 1) | vp89_rac_get(c); -+ } -+ -+ return value; -+} -+ -+// how probabilities are associated with decisions is different I think -+// well, the new scheme fits in the old but this way has one fewer branches per decision -+static av_always_inline int vp89_rac_get_tree(VPXRangeCoder *c, const int8_t (*tree)[2], -+ const uint8_t *probs) -+{ -+ int i = 0; -+ -+ do { -+ i = tree[i][vpx_rac_get_prob(c, probs[i])]; -+ } while (i > 0); -+ -+ return -i; -+} -+ -+#endif /* AVCODEC_VP89_RAC_H */ -diff -Naur a/media/ffvpx/libavcodec/vp8.c b/media/ffvpx/libavcodec/vp8.c ---- a/media/ffvpx/libavcodec/vp8.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp8.c 2023-04-06 12:50:24.493176583 +0200 -@@ -24,29 +24,59 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "libavutil/imgutils.h" -+#include "config_components.h" -+ - #include "libavutil/mem_internal.h" - - #include "avcodec.h" -+#include "codec_internal.h" -+#include "decode.h" - #include "hwconfig.h" --#include "internal.h" - #include "mathops.h" --#include "rectangle.h" - #include "thread.h" -+#include "threadframe.h" - #include "vp8.h" -+#include "vp89_rac.h" - #include "vp8data.h" -+#include "vpx_rac.h" - - #if ARCH_ARM - # include "arm/vp8.h" - #endif - --#if CONFIG_VP7_DECODER && CONFIG_VP8_DECODER --#define VPX(vp7, f) (vp7 ? vp7_ ## f : vp8_ ## f) --#elif CONFIG_VP7_DECODER --#define VPX(vp7, f) vp7_ ## f --#else // CONFIG_VP8_DECODER --#define VPX(vp7, f) vp8_ ## f --#endif -+// fixme: add 1 bit to all the calls to this? -+static int vp8_rac_get_sint(VPXRangeCoder *c, int bits) -+{ -+ int v; -+ -+ if (!vp89_rac_get(c)) -+ return 0; -+ -+ v = vp89_rac_get_uint(c, bits); -+ -+ if (vp89_rac_get(c)) -+ v = -v; -+ -+ return v; -+} -+ -+static int vp8_rac_get_nn(VPXRangeCoder *c) -+{ -+ int v = vp89_rac_get_uint(c, 7) << 1; -+ return v + !v; -+} -+ -+// DCTextra -+static int vp8_rac_get_coeff(VPXRangeCoder *c, const uint8_t *prob) -+{ -+ int v = 0; -+ -+ do { -+ v = (v<<1) + vpx_rac_get_prob(c, *prob++); -+ } while (*prob); -+ -+ return v; -+} - - static void free_buffers(VP8Context *s) - { -@@ -71,8 +101,8 @@ - static int vp8_alloc_frame(VP8Context *s, VP8Frame *f, int ref) - { - int ret; -- if ((ret = ff_thread_get_buffer(s->avctx, &f->tf, -- ref ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) -+ if ((ret = ff_thread_get_ext_buffer(s->avctx, &f->tf, -+ ref ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) - return ret; - if (!(f->seg_map = av_buffer_allocz(s->mb_width * s->mb_height))) - goto fail; -@@ -89,7 +119,7 @@ - - fail: - av_buffer_unref(&f->seg_map); -- ff_thread_release_buffer(s->avctx, &f->tf); -+ ff_thread_release_ext_buffer(s->avctx, &f->tf); - return AVERROR(ENOMEM); - } - -@@ -98,11 +128,11 @@ - av_buffer_unref(&f->seg_map); - av_buffer_unref(&f->hwaccel_priv_buf); - f->hwaccel_picture_private = NULL; -- ff_thread_release_buffer(s->avctx, &f->tf); -+ ff_thread_release_ext_buffer(s->avctx, &f->tf); - } - - #if CONFIG_VP8_DECODER --static int vp8_ref_frame(VP8Context *s, VP8Frame *dst, VP8Frame *src) -+static int vp8_ref_frame(VP8Context *s, VP8Frame *dst, const VP8Frame *src) - { - int ret; - -@@ -151,10 +181,10 @@ - - // find a free buffer - for (i = 0; i < 5; i++) -- if (&s->frames[i] != s->framep[VP56_FRAME_CURRENT] && -- &s->frames[i] != s->framep[VP56_FRAME_PREVIOUS] && -- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN] && -- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN2]) { -+ if (&s->frames[i] != s->framep[VP8_FRAME_CURRENT] && -+ &s->frames[i] != s->framep[VP8_FRAME_PREVIOUS] && -+ &s->frames[i] != s->framep[VP8_FRAME_GOLDEN] && -+ &s->frames[i] != s->framep[VP8_FRAME_ALTREF]) { - frame = &s->frames[i]; - break; - } -@@ -262,14 +292,14 @@ - - static void parse_segment_info(VP8Context *s) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int i; - -- s->segmentation.update_map = vp8_rac_get(c); -- s->segmentation.update_feature_data = vp8_rac_get(c); -+ s->segmentation.update_map = vp89_rac_get(c); -+ s->segmentation.update_feature_data = vp89_rac_get(c); - - if (s->segmentation.update_feature_data) { -- s->segmentation.absolute_vals = vp8_rac_get(c); -+ s->segmentation.absolute_vals = vp89_rac_get(c); - - for (i = 0; i < 4; i++) - s->segmentation.base_quant[i] = vp8_rac_get_sint(c, 7); -@@ -279,28 +309,28 @@ - } - if (s->segmentation.update_map) - for (i = 0; i < 3; i++) -- s->prob->segmentid[i] = vp8_rac_get(c) ? vp8_rac_get_uint(c, 8) : 255; -+ s->prob->segmentid[i] = vp89_rac_get(c) ? vp89_rac_get_uint(c, 8) : 255; - } - - static void update_lf_deltas(VP8Context *s) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int i; - - for (i = 0; i < 4; i++) { -- if (vp8_rac_get(c)) { -- s->lf_delta.ref[i] = vp8_rac_get_uint(c, 6); -+ if (vp89_rac_get(c)) { -+ s->lf_delta.ref[i] = vp89_rac_get_uint(c, 6); - -- if (vp8_rac_get(c)) -+ if (vp89_rac_get(c)) - s->lf_delta.ref[i] = -s->lf_delta.ref[i]; - } - } - - for (i = MODE_I4x4; i <= VP8_MVMODE_SPLIT; i++) { -- if (vp8_rac_get(c)) { -- s->lf_delta.mode[i] = vp8_rac_get_uint(c, 6); -+ if (vp89_rac_get(c)) { -+ s->lf_delta.mode[i] = vp89_rac_get_uint(c, 6); - -- if (vp8_rac_get(c)) -+ if (vp89_rac_get(c)) - s->lf_delta.mode[i] = -s->lf_delta.mode[i]; - } - } -@@ -312,7 +342,7 @@ - int i; - int ret; - -- s->num_coeff_partitions = 1 << vp8_rac_get_uint(&s->c, 2); -+ s->num_coeff_partitions = 1 << vp89_rac_get_uint(&s->c, 2); - - buf += 3 * (s->num_coeff_partitions - 1); - buf_size -= 3 * (s->num_coeff_partitions - 1); -@@ -325,7 +355,7 @@ - return -1; - s->coeff_partition_size[i] = size; - -- ret = ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, size); -+ ret = ff_vpx_init_range_decoder(&s->coeff_partition[i], buf, size); - if (ret < 0) - return ret; - buf += size; -@@ -333,21 +363,21 @@ - } - - s->coeff_partition_size[i] = buf_size; -- ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, buf_size); -+ ff_vpx_init_range_decoder(&s->coeff_partition[i], buf, buf_size); - - return 0; - } - - static void vp7_get_quants(VP8Context *s) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - -- int yac_qi = vp8_rac_get_uint(c, 7); -- int ydc_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; -- int y2dc_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; -- int y2ac_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; -- int uvdc_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; -- int uvac_qi = vp8_rac_get(c) ? vp8_rac_get_uint(c, 7) : yac_qi; -+ int yac_qi = vp89_rac_get_uint(c, 7); -+ int ydc_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; -+ int y2dc_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; -+ int y2ac_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; -+ int uvdc_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; -+ int uvac_qi = vp89_rac_get(c) ? vp89_rac_get_uint(c, 7) : yac_qi; - - s->qmat[0].luma_qmul[0] = vp7_ydc_qlookup[ydc_qi]; - s->qmat[0].luma_qmul[1] = vp7_yac_qlookup[yac_qi]; -@@ -359,10 +389,10 @@ - - static void vp8_get_quants(VP8Context *s) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int i, base_qi; - -- s->quant.yac_qi = vp8_rac_get_uint(c, 7); -+ s->quant.yac_qi = vp89_rac_get_uint(c, 7); - s->quant.ydc_delta = vp8_rac_get_sint(c, 4); - s->quant.y2dc_delta = vp8_rac_get_sint(c, 4); - s->quant.y2ac_delta = vp8_rac_get_sint(c, 4); -@@ -395,28 +425,28 @@ - * The spec isn't clear here, so I'm going by my understanding of what libvpx does - * - * Intra frames update all 3 references -- * Inter frames update VP56_FRAME_PREVIOUS if the update_last flag is set -+ * Inter frames update VP8_FRAME_PREVIOUS if the update_last flag is set - * If the update (golden|altref) flag is set, it's updated with the current frame -- * if update_last is set, and VP56_FRAME_PREVIOUS otherwise. -+ * if update_last is set, and VP8_FRAME_PREVIOUS otherwise. - * If the flag is not set, the number read means: - * 0: no update -- * 1: VP56_FRAME_PREVIOUS -+ * 1: VP8_FRAME_PREVIOUS - * 2: update golden with altref, or update altref with golden - */ --static VP56Frame ref_to_update(VP8Context *s, int update, VP56Frame ref) -+static VP8FrameType ref_to_update(VP8Context *s, int update, VP8FrameType ref) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - - if (update) -- return VP56_FRAME_CURRENT; -+ return VP8_FRAME_CURRENT; - -- switch (vp8_rac_get_uint(c, 2)) { -+ switch (vp89_rac_get_uint(c, 2)) { - case 1: -- return VP56_FRAME_PREVIOUS; -+ return VP8_FRAME_PREVIOUS; - case 2: -- return (ref == VP56_FRAME_GOLDEN) ? VP56_FRAME_GOLDEN2 : VP56_FRAME_GOLDEN; -+ return (ref == VP8_FRAME_GOLDEN) ? VP8_FRAME_ALTREF : VP8_FRAME_GOLDEN; - } -- return VP56_FRAME_NONE; -+ return VP8_FRAME_NONE; - } - - static void vp78_reset_probability_tables(VP8Context *s) -@@ -430,15 +460,15 @@ - - static void vp78_update_probability_tables(VP8Context *s) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int i, j, k, l, m; - - for (i = 0; i < 4; i++) - for (j = 0; j < 8; j++) - for (k = 0; k < 3; k++) - for (l = 0; l < NUM_DCT_TOKENS-1; l++) -- if (vp56_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l])) { -- int prob = vp8_rac_get_uint(c, 8); -+ if (vpx_rac_get_prob_branchy(c, vp8_token_update_probs[i][j][k][l])) { -+ int prob = vp89_rac_get_uint(c, 8); - for (m = 0; vp8_coeff_band_indexes[j][m] >= 0; m++) - s->prob->token[i][vp8_coeff_band_indexes[j][m]][k][l] = prob; - } -@@ -450,35 +480,35 @@ - static void vp78_update_pred16x16_pred8x8_mvc_probabilities(VP8Context *s, - int mvc_size) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int i, j; - -- if (vp8_rac_get(c)) -+ if (vp89_rac_get(c)) - for (i = 0; i < 4; i++) -- s->prob->pred16x16[i] = vp8_rac_get_uint(c, 8); -- if (vp8_rac_get(c)) -+ s->prob->pred16x16[i] = vp89_rac_get_uint(c, 8); -+ if (vp89_rac_get(c)) - for (i = 0; i < 3; i++) -- s->prob->pred8x8c[i] = vp8_rac_get_uint(c, 8); -+ s->prob->pred8x8c[i] = vp89_rac_get_uint(c, 8); - - // 17.2 MV probability update - for (i = 0; i < 2; i++) - for (j = 0; j < mvc_size; j++) -- if (vp56_rac_get_prob_branchy(c, vp8_mv_update_prob[i][j])) -+ if (vpx_rac_get_prob_branchy(c, vp8_mv_update_prob[i][j])) - s->prob->mvc[i][j] = vp8_rac_get_nn(c); - } - - static void update_refs(VP8Context *s) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - -- int update_golden = vp8_rac_get(c); -- int update_altref = vp8_rac_get(c); -+ int update_golden = vp89_rac_get(c); -+ int update_altref = vp89_rac_get(c); - -- s->update_golden = ref_to_update(s, update_golden, VP56_FRAME_GOLDEN); -- s->update_altref = ref_to_update(s, update_altref, VP56_FRAME_GOLDEN2); -+ s->update_golden = ref_to_update(s, update_golden, VP8_FRAME_GOLDEN); -+ s->update_altref = ref_to_update(s, update_altref, VP8_FRAME_ALTREF); - } - --static void copy_chroma(AVFrame *dst, AVFrame *src, int width, int height) -+static void copy_chroma(AVFrame *dst, const AVFrame *src, int width, int height) - { - int i, j; - -@@ -512,24 +542,25 @@ - if (!s->keyframe && (alpha || beta)) { - int width = s->mb_width * 16; - int height = s->mb_height * 16; -- AVFrame *src, *dst; -+ const AVFrame *src; -+ AVFrame *dst; - -- if (!s->framep[VP56_FRAME_PREVIOUS] || -- !s->framep[VP56_FRAME_GOLDEN]) { -+ if (!s->framep[VP8_FRAME_PREVIOUS] || -+ !s->framep[VP8_FRAME_GOLDEN]) { - av_log(s->avctx, AV_LOG_WARNING, "Discarding interframe without a prior keyframe!\n"); - return AVERROR_INVALIDDATA; - } - -- dst = -- src = s->framep[VP56_FRAME_PREVIOUS]->tf.f; -+ src = -+ dst = s->framep[VP8_FRAME_PREVIOUS]->tf.f; - - /* preserve the golden frame, write a new previous frame */ -- if (s->framep[VP56_FRAME_GOLDEN] == s->framep[VP56_FRAME_PREVIOUS]) { -- s->framep[VP56_FRAME_PREVIOUS] = vp8_find_free_buffer(s); -- if ((ret = vp8_alloc_frame(s, s->framep[VP56_FRAME_PREVIOUS], 1)) < 0) -+ if (s->framep[VP8_FRAME_GOLDEN] == s->framep[VP8_FRAME_PREVIOUS]) { -+ s->framep[VP8_FRAME_PREVIOUS] = vp8_find_free_buffer(s); -+ if ((ret = vp8_alloc_frame(s, s->framep[VP8_FRAME_PREVIOUS], 1)) < 0) - return ret; - -- dst = s->framep[VP56_FRAME_PREVIOUS]->tf.f; -+ dst = s->framep[VP8_FRAME_PREVIOUS]->tf.f; - - copy_chroma(dst, src, width, height); - } -@@ -544,12 +575,13 @@ - - static int vp7_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_size) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int part1_size, hscale, vscale, i, j, ret; - int width = s->avctx->width; - int height = s->avctx->height; - int alpha = 0; - int beta = 0; -+ int fade_present = 1; - - if (buf_size < 4) { - return AVERROR_INVALIDDATA; -@@ -575,7 +607,7 @@ - - memcpy(s->put_pixels_tab, s->vp8dsp.put_vp8_epel_pixels_tab, sizeof(s->put_pixels_tab)); - -- ret = ff_vp56_init_range_decoder(c, buf, part1_size); -+ ret = ff_vpx_init_range_decoder(c, buf, part1_size); - if (ret < 0) - return ret; - buf += part1_size; -@@ -583,14 +615,14 @@ - - /* A. Dimension information (keyframes only) */ - if (s->keyframe) { -- width = vp8_rac_get_uint(c, 12); -- height = vp8_rac_get_uint(c, 12); -- hscale = vp8_rac_get_uint(c, 2); -- vscale = vp8_rac_get_uint(c, 2); -+ width = vp89_rac_get_uint(c, 12); -+ height = vp89_rac_get_uint(c, 12); -+ hscale = vp89_rac_get_uint(c, 2); -+ vscale = vp89_rac_get_uint(c, 2); - if (hscale || vscale) - avpriv_request_sample(s->avctx, "Upscaling"); - -- s->update_golden = s->update_altref = VP56_FRAME_CURRENT; -+ s->update_golden = s->update_altref = VP8_FRAME_CURRENT; - vp78_reset_probability_tables(s); - memcpy(s->prob->pred16x16, vp8_pred16x16_prob_inter, - sizeof(s->prob->pred16x16)); -@@ -609,18 +641,18 @@ - - /* B. Decoding information for all four macroblock-level features */ - for (i = 0; i < 4; i++) { -- s->feature_enabled[i] = vp8_rac_get(c); -+ s->feature_enabled[i] = vp89_rac_get(c); - if (s->feature_enabled[i]) { -- s->feature_present_prob[i] = vp8_rac_get_uint(c, 8); -+ s->feature_present_prob[i] = vp89_rac_get_uint(c, 8); - - for (j = 0; j < 3; j++) - s->feature_index_prob[i][j] = -- vp8_rac_get(c) ? vp8_rac_get_uint(c, 8) : 255; -+ vp89_rac_get(c) ? vp89_rac_get_uint(c, 8) : 255; - - if (vp7_feature_value_size[s->profile][i]) - for (j = 0; j < 4; j++) - s->feature_value[i][j] = -- vp8_rac_get(c) ? vp8_rac_get_uint(c, vp7_feature_value_size[s->profile][i]) : 0; -+ vp89_rac_get(c) ? vp89_rac_get_uint(c, vp7_feature_value_size[s->profile][i]) : 0; - } - } - -@@ -629,7 +661,7 @@ - s->lf_delta.enabled = 0; - - s->num_coeff_partitions = 1; -- ret = ff_vp56_init_range_decoder(&s->coeff_partition[0], buf, buf_size); -+ ret = ff_vpx_init_range_decoder(&s->coeff_partition[0], buf, buf_size); - if (ret < 0) - return ret; - -@@ -645,45 +677,44 @@ - - /* D. Golden frame update flag (a Flag) for interframes only */ - if (!s->keyframe) { -- s->update_golden = vp8_rac_get(c) ? VP56_FRAME_CURRENT : VP56_FRAME_NONE; -- s->sign_bias[VP56_FRAME_GOLDEN] = 0; -+ s->update_golden = vp89_rac_get(c) ? VP8_FRAME_CURRENT : VP8_FRAME_NONE; -+ s->sign_bias[VP8_FRAME_GOLDEN] = 0; - } - - s->update_last = 1; - s->update_probabilities = 1; -- s->fade_present = 1; - - if (s->profile > 0) { -- s->update_probabilities = vp8_rac_get(c); -+ s->update_probabilities = vp89_rac_get(c); - if (!s->update_probabilities) - s->prob[1] = s->prob[0]; - - if (!s->keyframe) -- s->fade_present = vp8_rac_get(c); -+ fade_present = vp89_rac_get(c); - } - -- if (vpX_rac_is_end(c)) -+ if (vpx_rac_is_end(c)) - return AVERROR_INVALIDDATA; - /* E. Fading information for previous frame */ -- if (s->fade_present && vp8_rac_get(c)) { -- alpha = (int8_t) vp8_rac_get_uint(c, 8); -- beta = (int8_t) vp8_rac_get_uint(c, 8); -+ if (fade_present && vp89_rac_get(c)) { -+ alpha = (int8_t) vp89_rac_get_uint(c, 8); -+ beta = (int8_t) vp89_rac_get_uint(c, 8); - } - - /* F. Loop filter type */ - if (!s->profile) -- s->filter.simple = vp8_rac_get(c); -+ s->filter.simple = vp89_rac_get(c); - - /* G. DCT coefficient ordering specification */ -- if (vp8_rac_get(c)) -+ if (vp89_rac_get(c)) - for (i = 1; i < 16; i++) -- s->prob[0].scan[i] = ff_zigzag_scan[vp8_rac_get_uint(c, 4)]; -+ s->prob[0].scan[i] = ff_zigzag_scan[vp89_rac_get_uint(c, 4)]; - - /* H. Loop filter levels */ - if (s->profile > 0) -- s->filter.simple = vp8_rac_get(c); -- s->filter.level = vp8_rac_get_uint(c, 6); -- s->filter.sharpness = vp8_rac_get_uint(c, 3); -+ s->filter.simple = vp89_rac_get(c); -+ s->filter.level = vp89_rac_get_uint(c, 6); -+ s->filter.sharpness = vp89_rac_get_uint(c, 3); - - /* I. DCT coefficient probability update; 13.3 Token Probability Updates */ - vp78_update_probability_tables(s); -@@ -692,12 +723,12 @@ - - /* J. The remaining frame header data occurs ONLY FOR INTERFRAMES */ - if (!s->keyframe) { -- s->prob->intra = vp8_rac_get_uint(c, 8); -- s->prob->last = vp8_rac_get_uint(c, 8); -+ s->prob->intra = vp89_rac_get_uint(c, 8); -+ s->prob->last = vp89_rac_get_uint(c, 8); - vp78_update_pred16x16_pred8x8_mvc_probabilities(s, VP7_MVC_SIZE); - } - -- if (vpX_rac_is_end(c)) -+ if (vpx_rac_is_end(c)) - return AVERROR_INVALIDDATA; - - if ((ret = vp7_fade_frame(s, alpha, beta)) < 0) -@@ -708,7 +739,7 @@ - - static int vp8_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_size) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int header_size, hscale, vscale, ret; - int width = s->avctx->width; - int height = s->avctx->height; -@@ -758,7 +789,7 @@ - if (hscale || vscale) - avpriv_request_sample(s->avctx, "Upscaling"); - -- s->update_golden = s->update_altref = VP56_FRAME_CURRENT; -+ s->update_golden = s->update_altref = VP8_FRAME_CURRENT; - vp78_reset_probability_tables(s); - memcpy(s->prob->pred16x16, vp8_pred16x16_prob_inter, - sizeof(s->prob->pred16x16)); -@@ -770,30 +801,30 @@ - memset(&s->lf_delta, 0, sizeof(s->lf_delta)); - } - -- ret = ff_vp56_init_range_decoder(c, buf, header_size); -+ ret = ff_vpx_init_range_decoder(c, buf, header_size); - if (ret < 0) - return ret; - buf += header_size; - buf_size -= header_size; - - if (s->keyframe) { -- s->colorspace = vp8_rac_get(c); -+ s->colorspace = vp89_rac_get(c); - if (s->colorspace) - av_log(s->avctx, AV_LOG_WARNING, "Unspecified colorspace\n"); -- s->fullrange = vp8_rac_get(c); -+ s->fullrange = vp89_rac_get(c); - } - -- if ((s->segmentation.enabled = vp8_rac_get(c))) -+ if ((s->segmentation.enabled = vp89_rac_get(c))) - parse_segment_info(s); - else - s->segmentation.update_map = 0; // FIXME: move this to some init function? - -- s->filter.simple = vp8_rac_get(c); -- s->filter.level = vp8_rac_get_uint(c, 6); -- s->filter.sharpness = vp8_rac_get_uint(c, 3); -+ s->filter.simple = vp89_rac_get(c); -+ s->filter.level = vp89_rac_get_uint(c, 6); -+ s->filter.sharpness = vp89_rac_get_uint(c, 3); - -- if ((s->lf_delta.enabled = vp8_rac_get(c))) { -- s->lf_delta.update = vp8_rac_get(c); -+ if ((s->lf_delta.enabled = vp89_rac_get(c))) { -+ s->lf_delta.update = vp89_rac_get(c); - if (s->lf_delta.update) - update_lf_deltas(s); - } -@@ -813,31 +844,31 @@ - - if (!s->keyframe) { - update_refs(s); -- s->sign_bias[VP56_FRAME_GOLDEN] = vp8_rac_get(c); -- s->sign_bias[VP56_FRAME_GOLDEN2 /* altref */] = vp8_rac_get(c); -+ s->sign_bias[VP8_FRAME_GOLDEN] = vp89_rac_get(c); -+ s->sign_bias[VP8_FRAME_ALTREF] = vp89_rac_get(c); - } - - // if we aren't saving this frame's probabilities for future frames, - // make a copy of the current probabilities -- if (!(s->update_probabilities = vp8_rac_get(c))) -+ if (!(s->update_probabilities = vp89_rac_get(c))) - s->prob[1] = s->prob[0]; - -- s->update_last = s->keyframe || vp8_rac_get(c); -+ s->update_last = s->keyframe || vp89_rac_get(c); - - vp78_update_probability_tables(s); - -- if ((s->mbskip_enabled = vp8_rac_get(c))) -- s->prob->mbskip = vp8_rac_get_uint(c, 8); -+ if ((s->mbskip_enabled = vp89_rac_get(c))) -+ s->prob->mbskip = vp89_rac_get_uint(c, 8); - - if (!s->keyframe) { -- s->prob->intra = vp8_rac_get_uint(c, 8); -- s->prob->last = vp8_rac_get_uint(c, 8); -- s->prob->golden = vp8_rac_get_uint(c, 8); -+ s->prob->intra = vp89_rac_get_uint(c, 8); -+ s->prob->last = vp89_rac_get_uint(c, 8); -+ s->prob->golden = vp89_rac_get_uint(c, 8); - vp78_update_pred16x16_pred8x8_mvc_probabilities(s, VP8_MVC_SIZE); - } - - // Record the entropy coder state here so that hwaccels can use it. -- s->c.code_word = vp56_rac_renorm(&s->c); -+ s->c.code_word = vpx_rac_renorm(&s->c); - s->coder_state_at_header_end.input = s->c.buffer - (-s->c.bits / 8); - s->coder_state_at_header_end.range = s->c.high; - s->coder_state_at_header_end.value = s->c.code_word >> 16; -@@ -847,7 +878,7 @@ - } - - static av_always_inline --void clamp_mv(VP8mvbounds *s, VP56mv *dst, const VP56mv *src) -+void clamp_mv(const VP8mvbounds *s, VP8mv *dst, const VP8mv *src) - { - dst->x = av_clip(src->x, av_clip(s->mv_min.x, INT16_MIN, INT16_MAX), - av_clip(s->mv_max.x, INT16_MIN, INT16_MAX)); -@@ -858,40 +889,40 @@ - /** - * Motion vector coding, 17.1. - */ --static av_always_inline int read_mv_component(VP56RangeCoder *c, const uint8_t *p, int vp7) -+static av_always_inline int read_mv_component(VPXRangeCoder *c, const uint8_t *p, int vp7) - { - int bit, x = 0; - -- if (vp56_rac_get_prob_branchy(c, p[0])) { -+ if (vpx_rac_get_prob_branchy(c, p[0])) { - int i; - - for (i = 0; i < 3; i++) -- x += vp56_rac_get_prob(c, p[9 + i]) << i; -+ x += vpx_rac_get_prob(c, p[9 + i]) << i; - for (i = (vp7 ? 7 : 9); i > 3; i--) -- x += vp56_rac_get_prob(c, p[9 + i]) << i; -- if (!(x & (vp7 ? 0xF0 : 0xFFF0)) || vp56_rac_get_prob(c, p[12])) -+ x += vpx_rac_get_prob(c, p[9 + i]) << i; -+ if (!(x & (vp7 ? 0xF0 : 0xFFF0)) || vpx_rac_get_prob(c, p[12])) - x += 8; - } else { - // small_mvtree - const uint8_t *ps = p + 2; -- bit = vp56_rac_get_prob(c, *ps); -+ bit = vpx_rac_get_prob(c, *ps); - ps += 1 + 3 * bit; - x += 4 * bit; -- bit = vp56_rac_get_prob(c, *ps); -+ bit = vpx_rac_get_prob(c, *ps); - ps += 1 + bit; - x += 2 * bit; -- x += vp56_rac_get_prob(c, *ps); -+ x += vpx_rac_get_prob(c, *ps); - } - -- return (x && vp56_rac_get_prob(c, p[1])) ? -x : x; -+ return (x && vpx_rac_get_prob(c, p[1])) ? -x : x; - } - --static int vp7_read_mv_component(VP56RangeCoder *c, const uint8_t *p) -+static int vp7_read_mv_component(VPXRangeCoder *c, const uint8_t *p) - { - return read_mv_component(c, p, 1); - } - --static int vp8_read_mv_component(VP56RangeCoder *c, const uint8_t *p) -+static int vp8_read_mv_component(VPXRangeCoder *c, const uint8_t *p) - { - return read_mv_component(c, p, 0); - } -@@ -914,18 +945,18 @@ - * @returns the number of motion vectors parsed (2, 4 or 16) - */ - static av_always_inline --int decode_splitmvs(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb, -+int decode_splitmvs(const VP8Context *s, VPXRangeCoder *c, VP8Macroblock *mb, - int layout, int is_vp7) - { - int part_idx; - int n, num; -- VP8Macroblock *top_mb; -- VP8Macroblock *left_mb = &mb[-1]; -+ const VP8Macroblock *top_mb; -+ const VP8Macroblock *left_mb = &mb[-1]; - const uint8_t *mbsplits_left = vp8_mbsplits[left_mb->partitioning]; - const uint8_t *mbsplits_top, *mbsplits_cur, *firstidx; -- VP56mv *top_mv; -- VP56mv *left_mv = left_mb->bmv; -- VP56mv *cur_mv = mb->bmv; -+ const VP8mv *top_mv; -+ const VP8mv *left_mv = left_mb->bmv; -+ const VP8mv *cur_mv = mb->bmv; - - if (!layout) // layout is inlined, s->mb_layout is not - top_mb = &mb[2]; -@@ -934,9 +965,9 @@ - mbsplits_top = vp8_mbsplits[top_mb->partitioning]; - top_mv = top_mb->bmv; - -- if (vp56_rac_get_prob_branchy(c, vp8_mbsplit_prob[0])) { -- if (vp56_rac_get_prob_branchy(c, vp8_mbsplit_prob[1])) -- part_idx = VP8_SPLITMVMODE_16x8 + vp56_rac_get_prob(c, vp8_mbsplit_prob[2]); -+ if (vpx_rac_get_prob_branchy(c, vp8_mbsplit_prob[0])) { -+ if (vpx_rac_get_prob_branchy(c, vp8_mbsplit_prob[1])) -+ part_idx = VP8_SPLITMVMODE_16x8 + vpx_rac_get_prob(c, vp8_mbsplit_prob[2]); - else - part_idx = VP8_SPLITMVMODE_8x8; - } else { -@@ -964,9 +995,9 @@ - - submv_prob = get_submv_prob(left, above, is_vp7); - -- if (vp56_rac_get_prob_branchy(c, submv_prob[0])) { -- if (vp56_rac_get_prob_branchy(c, submv_prob[1])) { -- if (vp56_rac_get_prob_branchy(c, submv_prob[2])) { -+ if (vpx_rac_get_prob_branchy(c, submv_prob[0])) { -+ if (vpx_rac_get_prob_branchy(c, submv_prob[1])) { -+ if (vpx_rac_get_prob_branchy(c, submv_prob[2])) { - mb->bmv[n].y = mb->mv.y + - read_mv_component(c, s->prob->mvc[0], is_vp7); - mb->bmv[n].x = mb->mv.x + -@@ -1009,7 +1040,7 @@ - return 1; - } - --static const VP56mv *get_bmv_ptr(const VP8Macroblock *mb, int subblock) -+static const VP8mv *get_bmv_ptr(const VP8Macroblock *mb, int subblock) - { - return &mb->bmv[mb->mode == VP8_MVMODE_SPLIT ? vp8_mbsplits[mb->partitioning][subblock] : 0]; - } -@@ -1018,13 +1049,12 @@ - void vp7_decode_mvs(VP8Context *s, VP8Macroblock *mb, - int mb_x, int mb_y, int layout) - { -- VP8Macroblock *mb_edge[12]; - enum { CNT_ZERO, CNT_NEAREST, CNT_NEAR }; - enum { VP8_EDGE_TOP, VP8_EDGE_LEFT, VP8_EDGE_TOPLEFT }; - int idx = CNT_ZERO; -- VP56mv near_mv[3]; -+ VP8mv near_mv[3]; - uint8_t cnt[3] = { 0 }; -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - int i; - - AV_ZERO32(&near_mv[0]); -@@ -1037,11 +1067,11 @@ - - if (vp7_calculate_mb_offset(mb_x, mb_y, s->mb_width, pred->xoffset, - pred->yoffset, !s->profile, &edge_x, &edge_y)) { -- VP8Macroblock *edge = mb_edge[i] = (s->mb_layout == 1) -- ? s->macroblocks_base + 1 + edge_x + -- (s->mb_width + 1) * (edge_y + 1) -- : s->macroblocks + edge_x + -- (s->mb_height - edge_y - 1) * 2; -+ const VP8Macroblock *edge = (s->mb_layout == 1) -+ ? s->macroblocks_base + 1 + edge_x + -+ (s->mb_width + 1) * (edge_y + 1) -+ : s->macroblocks + edge_x + -+ (s->mb_height - edge_y - 1) * 2; - uint32_t mv = AV_RN32A(get_bmv_ptr(edge, vp7_mv_pred[i].subblock)); - if (mv) { - if (AV_RN32A(&near_mv[CNT_NEAREST])) { -@@ -1070,19 +1100,19 @@ - - mb->partitioning = VP8_SPLITMVMODE_NONE; - -- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_ZERO]][0])) { -+ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_ZERO]][0])) { - mb->mode = VP8_MVMODE_MV; - -- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAREST]][1])) { -+ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAREST]][1])) { - -- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][2])) { -+ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][2])) { - - if (cnt[CNT_NEAREST] > cnt[CNT_NEAR]) - AV_WN32A(&mb->mv, cnt[CNT_ZERO] > cnt[CNT_NEAREST] ? 0 : AV_RN32A(&near_mv[CNT_NEAREST])); - else - AV_WN32A(&mb->mv, cnt[CNT_ZERO] > cnt[CNT_NEAR] ? 0 : AV_RN32A(&near_mv[CNT_NEAR])); - -- if (vp56_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][3])) { -+ if (vpx_rac_get_prob_branchy(c, vp7_mode_contexts[cnt[CNT_NEAR]][3])) { - mb->mode = VP8_MVMODE_SPLIT; - mb->mv = mb->bmv[decode_splitmvs(s, c, mb, layout, IS_VP7) - 1]; - } else { -@@ -1106,7 +1136,7 @@ - } - - static av_always_inline --void vp8_decode_mvs(VP8Context *s, VP8mvbounds *mv_bounds, VP8Macroblock *mb, -+void vp8_decode_mvs(VP8Context *s, const VP8mvbounds *mv_bounds, VP8Macroblock *mb, - int mb_x, int mb_y, int layout) - { - VP8Macroblock *mb_edge[3] = { 0 /* top */, -@@ -1116,10 +1146,10 @@ - enum { VP8_EDGE_TOP, VP8_EDGE_LEFT, VP8_EDGE_TOPLEFT }; - int idx = CNT_ZERO; - int cur_sign_bias = s->sign_bias[mb->ref_frame]; -- int8_t *sign_bias = s->sign_bias; -- VP56mv near_mv[4]; -+ const int8_t *sign_bias = s->sign_bias; -+ VP8mv near_mv[4]; - uint8_t cnt[4] = { 0 }; -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - - if (!layout) { // layout is inlined (s->mb_layout is not) - mb_edge[0] = mb + 2; -@@ -1136,9 +1166,9 @@ - /* Process MB on top, left and top-left */ - #define MV_EDGE_CHECK(n) \ - { \ -- VP8Macroblock *edge = mb_edge[n]; \ -+ const VP8Macroblock *edge = mb_edge[n]; \ - int edge_ref = edge->ref_frame; \ -- if (edge_ref != VP56_FRAME_CURRENT) { \ -+ if (edge_ref != VP8_FRAME_CURRENT) { \ - uint32_t mv = AV_RN32A(&edge->mv); \ - if (mv) { \ - if (cur_sign_bias != sign_bias[edge_ref]) { \ -@@ -1160,7 +1190,7 @@ - MV_EDGE_CHECK(2) - - mb->partitioning = VP8_SPLITMVMODE_NONE; -- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_ZERO]][0])) { -+ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_ZERO]][0])) { - mb->mode = VP8_MVMODE_MV; - - /* If we have three distinct MVs, merge first and last if they're the same */ -@@ -1171,18 +1201,18 @@ - /* Swap near and nearest if necessary */ - if (cnt[CNT_NEAR] > cnt[CNT_NEAREST]) { - FFSWAP(uint8_t, cnt[CNT_NEAREST], cnt[CNT_NEAR]); -- FFSWAP( VP56mv, near_mv[CNT_NEAREST], near_mv[CNT_NEAR]); -+ FFSWAP(VP8mv, near_mv[CNT_NEAREST], near_mv[CNT_NEAR]); - } - -- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAREST]][1])) { -- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAR]][2])) { -+ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAREST]][1])) { -+ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAR]][2])) { - /* Choose the best mv out of 0,0 and the nearest mv */ - clamp_mv(mv_bounds, &mb->mv, &near_mv[CNT_ZERO + (cnt[CNT_NEAREST] >= cnt[CNT_ZERO])]); - cnt[CNT_SPLITMV] = ((mb_edge[VP8_EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + - (mb_edge[VP8_EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + - (mb_edge[VP8_EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); - -- if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_SPLITMV]][3])) { -+ if (vpx_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_SPLITMV]][3])) { - mb->mode = VP8_MVMODE_SPLIT; - mb->mv = mb->bmv[decode_splitmvs(s, c, mb, layout, IS_VP8) - 1]; - } else { -@@ -1206,7 +1236,7 @@ - } - - static av_always_inline --void decode_intra4x4_modes(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb, -+void decode_intra4x4_modes(VP8Context *s, VPXRangeCoder *c, VP8Macroblock *mb, - int mb_x, int keyframe, int layout) - { - uint8_t *intra4x4 = mb->intra4x4_pred_mode_mb; -@@ -1227,7 +1257,7 @@ - for (x = 0; x < 4; x++) { - const uint8_t *ctx; - ctx = vp8_pred4x4_prob_intra[top[x]][left[y]]; -- *intra4x4 = vp8_rac_get_tree(c, vp8_pred4x4_tree, ctx); -+ *intra4x4 = vp89_rac_get_tree(c, vp8_pred4x4_tree, ctx); - left[y] = top[x] = *intra4x4; - intra4x4++; - } -@@ -1235,17 +1265,17 @@ - } else { - int i; - for (i = 0; i < 16; i++) -- intra4x4[i] = vp8_rac_get_tree(c, vp8_pred4x4_tree, -- vp8_pred4x4_prob_inter); -+ intra4x4[i] = vp89_rac_get_tree(c, vp8_pred4x4_tree, -+ vp8_pred4x4_prob_inter); - } - } - - static av_always_inline --void decode_mb_mode(VP8Context *s, VP8mvbounds *mv_bounds, -+void decode_mb_mode(VP8Context *s, const VP8mvbounds *mv_bounds, - VP8Macroblock *mb, int mb_x, int mb_y, -- uint8_t *segment, uint8_t *ref, int layout, int is_vp7) -+ uint8_t *segment, const uint8_t *ref, int layout, int is_vp7) - { -- VP56RangeCoder *c = &s->c; -+ VPXRangeCoder *c = &s->c; - static const char * const vp7_feature_name[] = { "q-index", - "lf-delta", - "partial-golden-update", -@@ -1255,9 +1285,9 @@ - *segment = 0; - for (i = 0; i < 4; i++) { - if (s->feature_enabled[i]) { -- if (vp56_rac_get_prob_branchy(c, s->feature_present_prob[i])) { -- int index = vp8_rac_get_tree(c, vp7_feature_index_tree, -- s->feature_index_prob[i]); -+ if (vpx_rac_get_prob_branchy(c, s->feature_present_prob[i])) { -+ int index = vp89_rac_get_tree(c, vp7_feature_index_tree, -+ s->feature_index_prob[i]); - av_log(s->avctx, AV_LOG_WARNING, - "Feature %s present in macroblock (value 0x%x)\n", - vp7_feature_name[i], s->feature_value[i][index]); -@@ -1265,17 +1295,17 @@ - } - } - } else if (s->segmentation.update_map) { -- int bit = vp56_rac_get_prob(c, s->prob->segmentid[0]); -- *segment = vp56_rac_get_prob(c, s->prob->segmentid[1+bit]) + 2*bit; -+ int bit = vpx_rac_get_prob(c, s->prob->segmentid[0]); -+ *segment = vpx_rac_get_prob(c, s->prob->segmentid[1+bit]) + 2*bit; - } else if (s->segmentation.enabled) - *segment = ref ? *ref : *segment; - mb->segment = *segment; - -- mb->skip = s->mbskip_enabled ? vp56_rac_get_prob(c, s->prob->mbskip) : 0; -+ mb->skip = s->mbskip_enabled ? vpx_rac_get_prob(c, s->prob->mbskip) : 0; - - if (s->keyframe) { -- mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_intra, -- vp8_pred16x16_prob_intra); -+ mb->mode = vp89_rac_get_tree(c, vp8_pred16x16_tree_intra, -+ vp8_pred16x16_prob_intra); - - if (mb->mode == MODE_I4x4) { - decode_intra4x4_modes(s, c, mb, mb_x, 1, layout); -@@ -1289,17 +1319,17 @@ - AV_WN32A(s->intra4x4_pred_mode_left, modes); - } - -- mb->chroma_pred_mode = vp8_rac_get_tree(c, vp8_pred8x8c_tree, -- vp8_pred8x8c_prob_intra); -- mb->ref_frame = VP56_FRAME_CURRENT; -- } else if (vp56_rac_get_prob_branchy(c, s->prob->intra)) { -+ mb->chroma_pred_mode = vp89_rac_get_tree(c, vp8_pred8x8c_tree, -+ vp8_pred8x8c_prob_intra); -+ mb->ref_frame = VP8_FRAME_CURRENT; -+ } else if (vpx_rac_get_prob_branchy(c, s->prob->intra)) { - // inter MB, 16.2 -- if (vp56_rac_get_prob_branchy(c, s->prob->last)) -+ if (vpx_rac_get_prob_branchy(c, s->prob->last)) - mb->ref_frame = -- (!is_vp7 && vp56_rac_get_prob(c, s->prob->golden)) ? VP56_FRAME_GOLDEN2 /* altref */ -- : VP56_FRAME_GOLDEN; -+ (!is_vp7 && vpx_rac_get_prob(c, s->prob->golden)) ? VP8_FRAME_ALTREF -+ : VP8_FRAME_GOLDEN; - else -- mb->ref_frame = VP56_FRAME_PREVIOUS; -+ mb->ref_frame = VP8_FRAME_PREVIOUS; - s->ref_count[mb->ref_frame - 1]++; - - // motion vectors, 16.3 -@@ -1309,14 +1339,15 @@ - vp8_decode_mvs(s, mv_bounds, mb, mb_x, mb_y, layout); - } else { - // intra MB, 16.1 -- mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_inter, s->prob->pred16x16); -+ mb->mode = vp89_rac_get_tree(c, vp8_pred16x16_tree_inter, -+ s->prob->pred16x16); - - if (mb->mode == MODE_I4x4) - decode_intra4x4_modes(s, c, mb, mb_x, 0, layout); - -- mb->chroma_pred_mode = vp8_rac_get_tree(c, vp8_pred8x8c_tree, -- s->prob->pred8x8c); -- mb->ref_frame = VP56_FRAME_CURRENT; -+ mb->chroma_pred_mode = vp89_rac_get_tree(c, vp8_pred8x8c_tree, -+ s->prob->pred8x8c); -+ mb->ref_frame = VP8_FRAME_CURRENT; - mb->partitioning = VP8_SPLITMVMODE_NONE; - AV_ZERO32(&mb->bmv[0]); - } -@@ -1333,21 +1364,21 @@ - * otherwise, the index of the last coeff decoded plus one - */ - static av_always_inline --int decode_block_coeffs_internal(VP56RangeCoder *r, int16_t block[16], -+int decode_block_coeffs_internal(VPXRangeCoder *r, int16_t block[16], - uint8_t probs[16][3][NUM_DCT_TOKENS - 1], -- int i, uint8_t *token_prob, int16_t qmul[2], -+ int i, const uint8_t *token_prob, const int16_t qmul[2], - const uint8_t scan[16], int vp7) - { -- VP56RangeCoder c = *r; -+ VPXRangeCoder c = *r; - goto skip_eob; - do { - int coeff; - restart: -- if (!vp56_rac_get_prob_branchy(&c, token_prob[0])) // DCT_EOB -+ if (!vpx_rac_get_prob_branchy(&c, token_prob[0])) // DCT_EOB - break; - - skip_eob: -- if (!vp56_rac_get_prob_branchy(&c, token_prob[1])) { // DCT_0 -+ if (!vpx_rac_get_prob_branchy(&c, token_prob[1])) { // DCT_0 - if (++i == 16) - break; // invalid input; blocks should end with EOB - token_prob = probs[i][0]; -@@ -1356,28 +1387,28 @@ - goto skip_eob; - } - -- if (!vp56_rac_get_prob_branchy(&c, token_prob[2])) { // DCT_1 -+ if (!vpx_rac_get_prob_branchy(&c, token_prob[2])) { // DCT_1 - coeff = 1; - token_prob = probs[i + 1][1]; - } else { -- if (!vp56_rac_get_prob_branchy(&c, token_prob[3])) { // DCT 2,3,4 -- coeff = vp56_rac_get_prob_branchy(&c, token_prob[4]); -+ if (!vpx_rac_get_prob_branchy(&c, token_prob[3])) { // DCT 2,3,4 -+ coeff = vpx_rac_get_prob_branchy(&c, token_prob[4]); - if (coeff) -- coeff += vp56_rac_get_prob(&c, token_prob[5]); -+ coeff += vpx_rac_get_prob(&c, token_prob[5]); - coeff += 2; - } else { - // DCT_CAT* -- if (!vp56_rac_get_prob_branchy(&c, token_prob[6])) { -- if (!vp56_rac_get_prob_branchy(&c, token_prob[7])) { // DCT_CAT1 -- coeff = 5 + vp56_rac_get_prob(&c, vp8_dct_cat1_prob[0]); -+ if (!vpx_rac_get_prob_branchy(&c, token_prob[6])) { -+ if (!vpx_rac_get_prob_branchy(&c, token_prob[7])) { // DCT_CAT1 -+ coeff = 5 + vpx_rac_get_prob(&c, vp8_dct_cat1_prob[0]); - } else { // DCT_CAT2 - coeff = 7; -- coeff += vp56_rac_get_prob(&c, vp8_dct_cat2_prob[0]) << 1; -- coeff += vp56_rac_get_prob(&c, vp8_dct_cat2_prob[1]); -+ coeff += vpx_rac_get_prob(&c, vp8_dct_cat2_prob[0]) << 1; -+ coeff += vpx_rac_get_prob(&c, vp8_dct_cat2_prob[1]); - } - } else { // DCT_CAT3 and up -- int a = vp56_rac_get_prob(&c, token_prob[8]); -- int b = vp56_rac_get_prob(&c, token_prob[9 + a]); -+ int a = vpx_rac_get_prob(&c, token_prob[8]); -+ int b = vpx_rac_get_prob(&c, token_prob[9 + a]); - int cat = (a << 1) + b; - coeff = 3 + (8 << cat); - coeff += vp8_rac_get_coeff(&c, ff_vp8_dct_cat_prob[cat]); -@@ -1385,7 +1416,7 @@ - } - token_prob = probs[i + 1][2]; - } -- block[scan[i]] = (vp8_rac_get(&c) ? -coeff : coeff) * qmul[!!i]; -+ block[scan[i]] = (vp89_rac_get(&c) ? -coeff : coeff) * qmul[!!i]; - } while (++i < 16); - - *r = c; -@@ -1415,11 +1446,11 @@ - return ret; - } - --static int vp7_decode_block_coeffs_internal(VP56RangeCoder *r, -+static int vp7_decode_block_coeffs_internal(VPXRangeCoder *r, - int16_t block[16], - uint8_t probs[16][3][NUM_DCT_TOKENS - 1], -- int i, uint8_t *token_prob, -- int16_t qmul[2], -+ int i, const uint8_t *token_prob, -+ const int16_t qmul[2], - const uint8_t scan[16]) - { - return decode_block_coeffs_internal(r, block, probs, i, -@@ -1427,11 +1458,11 @@ - } - - #ifndef vp8_decode_block_coeffs_internal --static int vp8_decode_block_coeffs_internal(VP56RangeCoder *r, -+static int vp8_decode_block_coeffs_internal(VPXRangeCoder *r, - int16_t block[16], - uint8_t probs[16][3][NUM_DCT_TOKENS - 1], -- int i, uint8_t *token_prob, -- int16_t qmul[2]) -+ int i, const uint8_t *token_prob, -+ const int16_t qmul[2]) - { - return decode_block_coeffs_internal(r, block, probs, i, - token_prob, qmul, ff_zigzag_scan, IS_VP8); -@@ -1452,13 +1483,13 @@ - * otherwise, the index of the last coeff decoded plus one - */ - static av_always_inline --int decode_block_coeffs(VP56RangeCoder *c, int16_t block[16], -+int decode_block_coeffs(VPXRangeCoder *c, int16_t block[16], - uint8_t probs[16][3][NUM_DCT_TOKENS - 1], -- int i, int zero_nhood, int16_t qmul[2], -+ int i, int zero_nhood, const int16_t qmul[2], - const uint8_t scan[16], int vp7) - { -- uint8_t *token_prob = probs[i][zero_nhood]; -- if (!vp56_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB -+ const uint8_t *token_prob = probs[i][zero_nhood]; -+ if (!vpx_rac_get_prob_branchy(c, token_prob[0])) // DCT_EOB - return 0; - return vp7 ? vp7_decode_block_coeffs_internal(c, block, probs, i, - token_prob, qmul, scan) -@@ -1467,7 +1498,7 @@ - } - - static av_always_inline --void decode_mb_coeffs(VP8Context *s, VP8ThreadData *td, VP56RangeCoder *c, -+void decode_mb_coeffs(VP8Context *s, VP8ThreadData *td, VPXRangeCoder *c, - VP8Macroblock *mb, uint8_t t_nnz[9], uint8_t l_nnz[9], - int is_vp7) - { -@@ -1542,8 +1573,8 @@ - } - - static av_always_inline --void backup_mb_border(uint8_t *top_border, uint8_t *src_y, -- uint8_t *src_cb, uint8_t *src_cr, -+void backup_mb_border(uint8_t *top_border, const uint8_t *src_y, -+ const uint8_t *src_cb, const uint8_t *src_cr, - ptrdiff_t linesize, ptrdiff_t uvlinesize, int simple) - { - AV_COPY128(top_border, src_y + 15 * linesize); -@@ -1668,7 +1699,7 @@ - } - - static av_always_inline --void intra_predict(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], -+void intra_predict(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], - VP8Macroblock *mb, int mb_x, int mb_y, int is_vp7) - { - int x, y, mode, nnz; -@@ -1686,14 +1717,14 @@ - s->hpc.pred16x16[mode](dst[0], s->linesize); - } else { - uint8_t *ptr = dst[0]; -- uint8_t *intra4x4 = mb->intra4x4_pred_mode_mb; -+ const uint8_t *intra4x4 = mb->intra4x4_pred_mode_mb; - const uint8_t lo = is_vp7 ? 128 : 127; - const uint8_t hi = is_vp7 ? 128 : 129; -- uint8_t tr_top[4] = { lo, lo, lo, lo }; -+ const uint8_t tr_top[4] = { lo, lo, lo, lo }; - - // all blocks on the right edge of the macroblock use bottom edge - // the top macroblock for their topright edge -- uint8_t *tr_right = ptr - s->linesize + 16; -+ const uint8_t *tr_right = ptr - s->linesize + 16; - - // if we're on the right edge of the frame, said edge is extended - // from the top macroblock -@@ -1706,7 +1737,7 @@ - AV_ZERO128(td->non_zero_count_cache); - - for (y = 0; y < 4; y++) { -- uint8_t *topright = ptr + 4 - s->linesize; -+ const uint8_t *topright = ptr + 4 - s->linesize; - for (x = 0; x < 4; x++) { - int copy = 0; - ptrdiff_t linesize = s->linesize; -@@ -1807,12 +1838,12 @@ - */ - static av_always_inline - void vp8_mc_luma(VP8Context *s, VP8ThreadData *td, uint8_t *dst, -- ThreadFrame *ref, const VP56mv *mv, -+ const ThreadFrame *ref, const VP8mv *mv, - int x_off, int y_off, int block_w, int block_h, - int width, int height, ptrdiff_t linesize, - vp8_mc_func mc_func[3][3]) - { -- uint8_t *src = ref->f->data[0]; -+ const uint8_t *src = ref->f->data[0]; - - if (AV_RN32A(mv)) { - ptrdiff_t src_linesize = linesize; -@@ -1865,12 +1896,12 @@ - */ - static av_always_inline - void vp8_mc_chroma(VP8Context *s, VP8ThreadData *td, uint8_t *dst1, -- uint8_t *dst2, ThreadFrame *ref, const VP56mv *mv, -+ uint8_t *dst2, const ThreadFrame *ref, const VP8mv *mv, - int x_off, int y_off, int block_w, int block_h, - int width, int height, ptrdiff_t linesize, - vp8_mc_func mc_func[3][3]) - { -- uint8_t *src1 = ref->f->data[1], *src2 = ref->f->data[2]; -+ const uint8_t *src1 = ref->f->data[1], *src2 = ref->f->data[2]; - - if (AV_RN32A(mv)) { - int mx = mv->x & 7, mx_idx = subpel_idx[0][mx]; -@@ -1914,12 +1945,12 @@ - } - - static av_always_inline --void vp8_mc_part(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], -- ThreadFrame *ref_frame, int x_off, int y_off, -+void vp8_mc_part(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], -+ const ThreadFrame *ref_frame, int x_off, int y_off, - int bx_off, int by_off, int block_w, int block_h, -- int width, int height, VP56mv *mv) -+ int width, int height, const VP8mv *mv) - { -- VP56mv uvmv = *mv; -+ VP8mv uvmv = *mv; - - /* Y */ - vp8_mc_luma(s, td, dst[0] + by_off * s->linesize + bx_off, -@@ -1952,8 +1983,8 @@ - /* Fetch pixels for estimated mv 4 macroblocks ahead. - * Optimized for 64-byte cache lines. Inspired by ffh264 prefetch_motion. */ - static av_always_inline --void prefetch_motion(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, -- int mb_xy, int ref) -+void prefetch_motion(const VP8Context *s, const VP8Macroblock *mb, -+ int mb_x, int mb_y, int mb_xy, int ref) - { - /* Don't prefetch refs that haven't been used very often this frame. */ - if (s->ref_count[ref - 1] > (mb_xy >> 5)) { -@@ -1975,13 +2006,13 @@ - * Apply motion vectors to prediction buffer, chapter 18. - */ - static av_always_inline --void inter_predict(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], -+void inter_predict(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], - VP8Macroblock *mb, int mb_x, int mb_y) - { - int x_off = mb_x << 4, y_off = mb_y << 4; - int width = 16 * s->mb_width, height = 16 * s->mb_height; -- ThreadFrame *ref = &s->framep[mb->ref_frame]->tf; -- VP56mv *bmv = mb->bmv; -+ const ThreadFrame *ref = &s->framep[mb->ref_frame]->tf; -+ const VP8mv *bmv = mb->bmv; - - switch (mb->partitioning) { - case VP8_SPLITMVMODE_NONE: -@@ -1990,7 +2021,7 @@ - break; - case VP8_SPLITMVMODE_4x4: { - int x, y; -- VP56mv uvmv; -+ VP8mv uvmv; - - /* Y */ - for (y = 0; y < 4; y++) { -@@ -2059,7 +2090,8 @@ - } - - static av_always_inline --void idct_mb(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], VP8Macroblock *mb) -+void idct_mb(VP8Context *s, VP8ThreadData *td, uint8_t *const dst[3], -+ const VP8Macroblock *mb) - { - int x, y, ch; - -@@ -2121,7 +2153,7 @@ - } - - static av_always_inline --void filter_level_for_mb(VP8Context *s, VP8Macroblock *mb, -+void filter_level_for_mb(const VP8Context *s, const VP8Macroblock *mb, - VP8FilterStrength *f, int is_vp7) - { - int interior_limit, filter_level; -@@ -2154,7 +2186,7 @@ - } - - static av_always_inline --void filter_mb(VP8Context *s, uint8_t *dst[3], VP8FilterStrength *f, -+void filter_mb(const VP8Context *s, uint8_t *const dst[3], const VP8FilterStrength *f, - int mb_x, int mb_y, int is_vp7) - { - int mbedge_lim, bedge_lim_y, bedge_lim_uv, hev_thresh; -@@ -2241,7 +2273,7 @@ - } - - static av_always_inline --void filter_mb_simple(VP8Context *s, uint8_t *dst, VP8FilterStrength *f, -+void filter_mb_simple(const VP8Context *s, uint8_t *dst, const VP8FilterStrength *f, - int mb_x, int mb_y) - { - int mbedge_lim, bedge_lim; -@@ -2276,7 +2308,7 @@ - #define MARGIN (16 << 2) - static av_always_inline - int vp78_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *curframe, -- VP8Frame *prev_frame, int is_vp7) -+ const VP8Frame *prev_frame, int is_vp7) - { - VP8Context *s = avctx->priv_data; - int mb_x, mb_y; -@@ -2294,7 +2326,7 @@ - s->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; - - for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) { -- if (vpX_rac_is_end(&s->c)) { -+ if (vpx_rac_is_end(&s->c)) { - return AVERROR_INVALIDDATA; - } - if (mb_y == 0) -@@ -2313,13 +2345,13 @@ - } - - static int vp7_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, -- VP8Frame *prev_frame) -+ const VP8Frame *prev_frame) - { - return vp78_decode_mv_mb_modes(avctx, cur_frame, prev_frame, IS_VP7); - } - - static int vp8_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, -- VP8Frame *prev_frame) -+ const VP8Frame *prev_frame) - { - return vp78_decode_mv_mb_modes(avctx, cur_frame, prev_frame, IS_VP8); - } -@@ -2370,8 +2402,10 @@ - int mb_y = atomic_load(&td->thread_mb_pos) >> 16; - int mb_x, mb_xy = mb_y * s->mb_width; - int num_jobs = s->num_jobs; -- VP8Frame *curframe = s->curframe, *prev_frame = s->prev_frame; -- VP56RangeCoder *c = &s->coeff_partition[mb_y & (s->num_coeff_partitions - 1)]; -+ const VP8Frame *prev_frame = s->prev_frame; -+ VP8Frame *curframe = s->curframe; -+ VPXRangeCoder *coeff_c = &s->coeff_partition[mb_y & (s->num_coeff_partitions - 1)]; -+ - VP8Macroblock *mb; - uint8_t *dst[3] = { - curframe->tf.f->data[0] + 16 * mb_y * s->linesize, -@@ -2379,7 +2413,7 @@ - curframe->tf.f->data[2] + 8 * mb_y * s->uvlinesize - }; - -- if (vpX_rac_is_end(c)) -+ if (vpx_rac_is_end(&s->c)) - return AVERROR_INVALIDDATA; - - if (mb_y == 0) -@@ -2410,7 +2444,7 @@ - td->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; - - for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) { -- if (vpX_rac_is_end(c)) -+ if (vpx_rac_is_end(&s->c)) - return AVERROR_INVALIDDATA; - // Wait for previous thread to read mb_x+2, and reach mb_y-1. - if (prev_td != td) { -@@ -2435,17 +2469,20 @@ - prev_frame && prev_frame->seg_map ? - prev_frame->seg_map->data + mb_xy : NULL, 0, is_vp7); - -- prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP56_FRAME_PREVIOUS); -+ prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_PREVIOUS); - -- if (!mb->skip) -- decode_mb_coeffs(s, td, c, mb, s->top_nnz[mb_x], td->left_nnz, is_vp7); -+ if (!mb->skip) { -+ if (vpx_rac_is_end(coeff_c)) -+ return AVERROR_INVALIDDATA; -+ decode_mb_coeffs(s, td, coeff_c, mb, s->top_nnz[mb_x], td->left_nnz, is_vp7); -+ } - - if (mb->mode <= MODE_I4x4) - intra_predict(s, td, dst, mb, mb_x, mb_y, is_vp7); - else - inter_predict(s, td, dst, mb, mb_x, mb_y); - -- prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP56_FRAME_GOLDEN); -+ prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_GOLDEN); - - if (!mb->skip) { - idct_mb(s, td, dst, mb); -@@ -2473,7 +2510,7 @@ - dst[1], dst[2], s->linesize, s->uvlinesize, 0); - } - -- prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP56_FRAME_GOLDEN2); -+ prefetch_motion(s, mb, mb_x, mb_y, mb_xy, VP8_FRAME_ALTREF); - - dst[0] += 16; - dst[1] += 8; -@@ -2532,7 +2569,7 @@ - next_td = &s->thread_data[(jobnr + 1) % num_jobs]; - - for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb++) { -- VP8FilterStrength *f = &td->filter_strength[mb_x]; -+ const VP8FilterStrength *f = &td->filter_strength[mb_x]; - if (prev_td != td) - check_thread_pos(td, prev_td, - (mb_x + 1) + (s->mb_width + 3), mb_y - 1); -@@ -2577,7 +2614,7 @@ - int vp78_decode_mb_row_sliced(AVCodecContext *avctx, void *tdata, int jobnr, - int threadnr, int is_vp7) - { -- VP8Context *s = avctx->priv_data; -+ const VP8Context *s = avctx->priv_data; - VP8ThreadData *td = &s->thread_data[jobnr]; - VP8ThreadData *next_td = NULL, *prev_td = NULL; - VP8Frame *curframe = s->curframe; -@@ -2621,7 +2658,7 @@ - } - - static av_always_inline --int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, -+int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, - const AVPacket *avpkt, int is_vp7) - { - VP8Context *s = avctx->priv_data; -@@ -2648,10 +2685,10 @@ - avctx->pix_fmt = s->pix_fmt; - } - -- prev_frame = s->framep[VP56_FRAME_CURRENT]; -+ prev_frame = s->framep[VP8_FRAME_CURRENT]; - -- referenced = s->update_last || s->update_golden == VP56_FRAME_CURRENT || -- s->update_altref == VP56_FRAME_CURRENT; -+ referenced = s->update_last || s->update_golden == VP8_FRAME_CURRENT || -+ s->update_altref == VP8_FRAME_CURRENT; - - skip_thresh = !referenced ? AVDISCARD_NONREF - : !s->keyframe ? AVDISCARD_NONKEY -@@ -2668,12 +2705,12 @@ - for (i = 0; i < 5; i++) - if (s->frames[i].tf.f->buf[0] && - &s->frames[i] != prev_frame && -- &s->frames[i] != s->framep[VP56_FRAME_PREVIOUS] && -- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN] && -- &s->frames[i] != s->framep[VP56_FRAME_GOLDEN2]) -+ &s->frames[i] != s->framep[VP8_FRAME_PREVIOUS] && -+ &s->frames[i] != s->framep[VP8_FRAME_GOLDEN] && -+ &s->frames[i] != s->framep[VP8_FRAME_ALTREF]) - vp8_release_frame(s, &s->frames[i]); - -- curframe = s->framep[VP56_FRAME_CURRENT] = vp8_find_free_buffer(s); -+ curframe = s->framep[VP8_FRAME_CURRENT] = vp8_find_free_buffer(s); - - if (!s->colorspace) - avctx->colorspace = AVCOL_SPC_BT470BG; -@@ -2686,9 +2723,9 @@ - * likely that the values we have on a random interframe are complete - * junk if we didn't start decode on a keyframe. So just don't display - * anything rather than junk. */ -- if (!s->keyframe && (!s->framep[VP56_FRAME_PREVIOUS] || -- !s->framep[VP56_FRAME_GOLDEN] || -- !s->framep[VP56_FRAME_GOLDEN2])) { -+ if (!s->keyframe && (!s->framep[VP8_FRAME_PREVIOUS] || -+ !s->framep[VP8_FRAME_GOLDEN] || -+ !s->framep[VP8_FRAME_ALTREF])) { - av_log(avctx, AV_LOG_WARNING, - "Discarding interframe without a prior keyframe!\n"); - ret = AVERROR_INVALIDDATA; -@@ -2702,24 +2739,24 @@ - goto err; - - // check if golden and altref are swapped -- if (s->update_altref != VP56_FRAME_NONE) -- s->next_framep[VP56_FRAME_GOLDEN2] = s->framep[s->update_altref]; -+ if (s->update_altref != VP8_FRAME_NONE) -+ s->next_framep[VP8_FRAME_ALTREF] = s->framep[s->update_altref]; - else -- s->next_framep[VP56_FRAME_GOLDEN2] = s->framep[VP56_FRAME_GOLDEN2]; -+ s->next_framep[VP8_FRAME_ALTREF] = s->framep[VP8_FRAME_ALTREF]; - -- if (s->update_golden != VP56_FRAME_NONE) -- s->next_framep[VP56_FRAME_GOLDEN] = s->framep[s->update_golden]; -+ if (s->update_golden != VP8_FRAME_NONE) -+ s->next_framep[VP8_FRAME_GOLDEN] = s->framep[s->update_golden]; - else -- s->next_framep[VP56_FRAME_GOLDEN] = s->framep[VP56_FRAME_GOLDEN]; -+ s->next_framep[VP8_FRAME_GOLDEN] = s->framep[VP8_FRAME_GOLDEN]; - - if (s->update_last) -- s->next_framep[VP56_FRAME_PREVIOUS] = curframe; -+ s->next_framep[VP8_FRAME_PREVIOUS] = curframe; - else -- s->next_framep[VP56_FRAME_PREVIOUS] = s->framep[VP56_FRAME_PREVIOUS]; -+ s->next_framep[VP8_FRAME_PREVIOUS] = s->framep[VP8_FRAME_PREVIOUS]; - -- s->next_framep[VP56_FRAME_CURRENT] = curframe; -+ s->next_framep[VP8_FRAME_CURRENT] = curframe; - -- if (avctx->codec->update_thread_context) -+ if (ffcodec(avctx->codec)->update_thread_context) - ff_thread_finish_setup(avctx); - - if (avctx->hwaccel) { -@@ -2796,7 +2833,7 @@ - s->prob[0] = s->prob[1]; - - if (!s->invisible) { -- if ((ret = av_frame_ref(data, curframe->tf.f)) < 0) -+ if ((ret = av_frame_ref(rframe, curframe->tf.f)) < 0) - return ret; - *got_frame = 1; - } -@@ -2807,17 +2844,17 @@ - return ret; - } - --int ff_vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, -- AVPacket *avpkt) -+int ff_vp8_decode_frame(AVCodecContext *avctx, AVFrame *frame, -+ int *got_frame, AVPacket *avpkt) - { -- return vp78_decode_frame(avctx, data, got_frame, avpkt, IS_VP8); -+ return vp78_decode_frame(avctx, frame, got_frame, avpkt, IS_VP8); - } - - #if CONFIG_VP7_DECODER --static int vp7_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, -- AVPacket *avpkt) -+static int vp7_decode_frame(AVCodecContext *avctx, AVFrame *frame, -+ int *got_frame, AVPacket *avpkt) - { -- return vp78_decode_frame(avctx, data, got_frame, avpkt, IS_VP7); -+ return vp78_decode_frame(avctx, frame, got_frame, avpkt, IS_VP7); - } - #endif /* CONFIG_VP7_DECODER */ - -@@ -2826,9 +2863,6 @@ - VP8Context *s = avctx->priv_data; - int i; - -- if (!s) -- return 0; -- - vp8_decode_flush_impl(avctx, 1); - for (i = 0; i < FF_ARRAY_ELEMS(s->frames); i++) - av_frame_free(&s->frames[i].tf.f); -@@ -2938,34 +2972,35 @@ - #endif /* CONFIG_VP8_DECODER */ - - #if CONFIG_VP7_DECODER --AVCodec ff_vp7_decoder = { -- .name = "vp7", -- .long_name = NULL_IF_CONFIG_SMALL("On2 VP7"), -- .type = AVMEDIA_TYPE_VIDEO, -- .id = AV_CODEC_ID_VP7, -+const FFCodec ff_vp7_decoder = { -+ .p.name = "vp7", -+ CODEC_LONG_NAME("On2 VP7"), -+ .p.type = AVMEDIA_TYPE_VIDEO, -+ .p.id = AV_CODEC_ID_VP7, - .priv_data_size = sizeof(VP8Context), - .init = vp7_decode_init, - .close = ff_vp8_decode_free, -- .decode = vp7_decode_frame, -- .capabilities = AV_CODEC_CAP_DR1, -+ FF_CODEC_DECODE_CB(vp7_decode_frame), -+ .p.capabilities = AV_CODEC_CAP_DR1, - .flush = vp8_decode_flush, - }; - #endif /* CONFIG_VP7_DECODER */ - - #if CONFIG_VP8_DECODER --AVCodec ff_vp8_decoder = { -- .name = "vp8", -- .long_name = NULL_IF_CONFIG_SMALL("On2 VP8"), -- .type = AVMEDIA_TYPE_VIDEO, -- .id = AV_CODEC_ID_VP8, -+const FFCodec ff_vp8_decoder = { -+ .p.name = "vp8", -+ CODEC_LONG_NAME("On2 VP8"), -+ .p.type = AVMEDIA_TYPE_VIDEO, -+ .p.id = AV_CODEC_ID_VP8, - .priv_data_size = sizeof(VP8Context), - .init = ff_vp8_decode_init, - .close = ff_vp8_decode_free, -- .decode = ff_vp8_decode_frame, -- .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | -+ FF_CODEC_DECODE_CB(ff_vp8_decode_frame), -+ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | - AV_CODEC_CAP_SLICE_THREADS, -+ .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS, - .flush = vp8_decode_flush, -- .update_thread_context = ONLY_IF_THREADS_ENABLED(vp8_decode_update_thread_context), -+ UPDATE_THREAD_CONTEXT(vp8_decode_update_thread_context), - .hw_configs = (const AVCodecHWConfigInternal *const []) { - #if CONFIG_VP8_VAAPI_HWACCEL - HWACCEL_VAAPI(vp8), -@@ -2975,6 +3010,5 @@ - #endif - NULL - }, -- .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS, - }; - #endif /* CONFIG_VP7_DECODER */ -diff -Naur a/media/ffvpx/libavcodec/vp8dsp.c b/media/ffvpx/libavcodec/vp8dsp.c ---- a/media/ffvpx/libavcodec/vp8dsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp8dsp.c 2023-04-06 12:50:06.974471174 +0200 -@@ -25,6 +25,8 @@ - * VP8 compatible video decoder - */ - -+#include "config_components.h" -+ - #include "libavutil/common.h" - #include "libavutil/intreadwrite.h" - -@@ -466,7 +468,7 @@ - - #define PUT_PIXELS(WIDTH) \ - static void put_vp8_pixels ## WIDTH ## _c(uint8_t *dst, ptrdiff_t dststride, \ -- uint8_t *src, ptrdiff_t srcstride, \ -+ const uint8_t *src, ptrdiff_t srcstride, \ - int h, int x, int y) \ - { \ - int i; \ -@@ -490,7 +492,7 @@ - #define VP8_EPEL_H(SIZE, TAPS) \ - static void put_vp8_epel ## SIZE ## _h ## TAPS ## _c(uint8_t *dst, \ - ptrdiff_t dststride, \ -- uint8_t *src, \ -+ const uint8_t *src, \ - ptrdiff_t srcstride, \ - int h, int mx, int my) \ - { \ -@@ -508,7 +510,7 @@ - #define VP8_EPEL_V(SIZE, TAPS) \ - static void put_vp8_epel ## SIZE ## _v ## TAPS ## _c(uint8_t *dst, \ - ptrdiff_t dststride, \ -- uint8_t *src, \ -+ const uint8_t *src, \ - ptrdiff_t srcstride, \ - int h, int mx, int my) \ - { \ -@@ -527,7 +529,7 @@ - static void \ - put_vp8_epel ## SIZE ## _h ## HTAPS ## v ## VTAPS ## _c(uint8_t *dst, \ - ptrdiff_t dststride, \ -- uint8_t *src, \ -+ const uint8_t *src, \ - ptrdiff_t srcstride, \ - int h, int mx, \ - int my) \ -@@ -584,7 +586,7 @@ - - #define VP8_BILINEAR(SIZE) \ - static void put_vp8_bilinear ## SIZE ## _h_c(uint8_t *dst, ptrdiff_t dstride, \ -- uint8_t *src, ptrdiff_t sstride, \ -+ const uint8_t *src, ptrdiff_t sstride, \ - int h, int mx, int my) \ - { \ - int a = 8 - mx, b = mx; \ -@@ -598,7 +600,7 @@ - } \ - \ - static void put_vp8_bilinear ## SIZE ## _v_c(uint8_t *dst, ptrdiff_t dstride, \ -- uint8_t *src, ptrdiff_t sstride, \ -+ const uint8_t *src, ptrdiff_t sstride, \ - int h, int mx, int my) \ - { \ - int c = 8 - my, d = my; \ -@@ -613,7 +615,7 @@ - \ - static void put_vp8_bilinear ## SIZE ## _hv_c(uint8_t *dst, \ - ptrdiff_t dstride, \ -- uint8_t *src, \ -+ const uint8_t *src, \ - ptrdiff_t sstride, \ - int h, int mx, int my) \ - { \ -@@ -673,14 +675,15 @@ - VP78_BILINEAR_MC_FUNC(1, 8); - VP78_BILINEAR_MC_FUNC(2, 4); - -- if (ARCH_AARCH64) -- ff_vp78dsp_init_aarch64(dsp); -- if (ARCH_ARM) -- ff_vp78dsp_init_arm(dsp); -- if (ARCH_PPC) -- ff_vp78dsp_init_ppc(dsp); -- if (ARCH_X86) -- ff_vp78dsp_init_x86(dsp); -+#if ARCH_AARCH64 -+ ff_vp78dsp_init_aarch64(dsp); -+#elif ARCH_ARM -+ ff_vp78dsp_init_arm(dsp); -+#elif ARCH_PPC -+ ff_vp78dsp_init_ppc(dsp); -+#elif ARCH_X86 -+ ff_vp78dsp_init_x86(dsp); -+#endif - } - - #if CONFIG_VP7_DECODER -@@ -735,13 +738,16 @@ - dsp->vp8_v_loop_filter_simple = vp8_v_loop_filter_simple_c; - dsp->vp8_h_loop_filter_simple = vp8_h_loop_filter_simple_c; - -- if (ARCH_AARCH64) -- ff_vp8dsp_init_aarch64(dsp); -- if (ARCH_ARM) -- ff_vp8dsp_init_arm(dsp); -- if (ARCH_X86) -- ff_vp8dsp_init_x86(dsp); -- if (ARCH_MIPS) -- ff_vp8dsp_init_mips(dsp); -+#if ARCH_AARCH64 -+ ff_vp8dsp_init_aarch64(dsp); -+#elif ARCH_ARM -+ ff_vp8dsp_init_arm(dsp); -+#elif ARCH_X86 -+ ff_vp8dsp_init_x86(dsp); -+#elif ARCH_MIPS -+ ff_vp8dsp_init_mips(dsp); -+#elif ARCH_LOONGARCH -+ ff_vp8dsp_init_loongarch(dsp); -+#endif - } - #endif /* CONFIG_VP8_DECODER */ -diff -Naur a/media/ffvpx/libavcodec/vp8dsp.h b/media/ffvpx/libavcodec/vp8dsp.h ---- a/media/ffvpx/libavcodec/vp8dsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp8dsp.h 2023-04-06 12:50:06.974471174 +0200 -@@ -31,7 +31,7 @@ - #include - - typedef void (*vp8_mc_func)(uint8_t *dst /* align 8 */, ptrdiff_t dstStride, -- uint8_t *src /* align 1 */, ptrdiff_t srcStride, -+ const uint8_t *src /* align 1 */, ptrdiff_t srcStride, - int h, int x, int y); - - typedef struct VP8DSPContext { -@@ -81,13 +81,6 @@ - vp8_mc_func put_vp8_bilinear_pixels_tab[3][3][3]; - } VP8DSPContext; - --void ff_put_vp8_pixels16_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -- int h, int x, int y); --void ff_put_vp8_pixels8_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -- int h, int x, int y); --void ff_put_vp8_pixels4_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, -- int h, int x, int y); -- - void ff_vp7dsp_init(VP8DSPContext *c); - - void ff_vp78dsp_init(VP8DSPContext *c); -@@ -101,6 +94,7 @@ - void ff_vp8dsp_init_arm(VP8DSPContext *c); - void ff_vp8dsp_init_x86(VP8DSPContext *c); - void ff_vp8dsp_init_mips(VP8DSPContext *c); -+void ff_vp8dsp_init_loongarch(VP8DSPContext *c); - - #define IS_VP7 1 - #define IS_VP8 0 -diff -Naur a/media/ffvpx/libavcodec/vp8.h b/media/ffvpx/libavcodec/vp8.h ---- a/media/ffvpx/libavcodec/vp8.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp8.h 2023-04-06 12:50:06.974471174 +0200 -@@ -33,12 +33,21 @@ - #include "libavutil/thread.h" - - #include "h264pred.h" --#include "thread.h" --#include "vp56.h" -+#include "threadframe.h" -+#include "videodsp.h" - #include "vp8dsp.h" -+#include "vpx_rac.h" - - #define VP8_MAX_QUANT 127 - -+typedef enum { -+ VP8_FRAME_NONE = -1, -+ VP8_FRAME_CURRENT = 0, -+ VP8_FRAME_PREVIOUS = 1, -+ VP8_FRAME_GOLDEN = 2, -+ VP8_FRAME_ALTREF = 3, -+} VP8FrameType; -+ - enum dct_token { - DCT_0, - DCT_1, -@@ -73,6 +82,11 @@ - VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs - }; - -+typedef struct VP8mv { -+ DECLARE_ALIGNED(4, int16_t, x); -+ int16_t y; -+} VP8mv; -+ - typedef struct VP8FilterStrength { - uint8_t filter_level; - uint8_t inner_limit; -@@ -90,8 +104,8 @@ - uint8_t segment; - uint8_t intra4x4_pred_mode_mb[16]; - DECLARE_ALIGNED(4, uint8_t, intra4x4_pred_mode_top)[4]; -- VP56mv mv; -- VP56mv bmv[16]; -+ VP8mv mv; -+ VP8mv bmv[16]; - } VP8Macroblock; - - typedef struct VP8intmv { -@@ -234,10 +248,10 @@ - - /** - * filter strength adjustment for macroblocks that reference: -- * [0] - intra / VP56_FRAME_CURRENT -- * [1] - VP56_FRAME_PREVIOUS -- * [2] - VP56_FRAME_GOLDEN -- * [3] - altref / VP56_FRAME_GOLDEN2 -+ * [0] - intra / VP8_FRAME_CURRENT -+ * [1] - VP8_FRAME_PREVIOUS -+ * [2] - VP8_FRAME_GOLDEN -+ * [3] - altref / VP8_FRAME_ALTREF - */ - int8_t ref[4]; - } lf_delta; -@@ -245,7 +259,7 @@ - uint8_t (*top_border)[16 + 8 + 8]; - uint8_t (*top_nnz)[9]; - -- VP56RangeCoder c; ///< header context, includes mb modes and motion vectors -+ VPXRangeCoder c; ///< header context, includes mb modes and motion vectors - - /* This contains the entropy coder state at the end of the header - * block, in the form specified by the standard. For use by -@@ -282,8 +296,8 @@ - - VP8Macroblock *macroblocks_base; - int invisible; -- int update_last; ///< update VP56_FRAME_PREVIOUS with the current one -- int update_golden; ///< VP56_FRAME_NONE if not updated, or which frame to copy if so -+ int update_last; ///< update VP8_FRAME_PREVIOUS with the current one -+ int update_golden; ///< VP8_FRAME_NONE if not updated, or which frame to copy if so - int update_altref; - - /** -@@ -297,7 +311,7 @@ - * There can be 1, 2, 4, or 8 of these after the header context. - */ - int num_coeff_partitions; -- VP56RangeCoder coeff_partition[8]; -+ VPXRangeCoder coeff_partition[8]; - int coeff_partition_size[8]; - VideoDSPContext vdsp; - VP8DSPContext vp8dsp; -@@ -322,14 +336,9 @@ - int vp7; - - /** -- * Fade bit present in bitstream (VP7) -- */ -- int fade_present; -- -- /** - * Interframe DC prediction (VP7) -- * [0] VP56_FRAME_PREVIOUS -- * [1] VP56_FRAME_GOLDEN -+ * [0] VP8_FRAME_PREVIOUS -+ * [1] VP8_FRAME_GOLDEN - */ - uint16_t inter_dc_pred[2][2]; - -@@ -344,8 +353,8 @@ - - int ff_vp8_decode_init(AVCodecContext *avctx); - --int ff_vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, -- AVPacket *avpkt); -+int ff_vp8_decode_frame(AVCodecContext *avctx, AVFrame *frame, -+ int *got_frame, AVPacket *avpkt); - - int ff_vp8_decode_free(AVCodecContext *avctx); - -diff -Naur a/media/ffvpx/libavcodec/vp8_parser.c b/media/ffvpx/libavcodec/vp8_parser.c ---- a/media/ffvpx/libavcodec/vp8_parser.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp8_parser.c 2023-04-06 12:49:40.256395011 +0200 -@@ -73,7 +73,7 @@ - return buf_size; - } - --AVCodecParser ff_vp8_parser = { -+const AVCodecParser ff_vp8_parser = { - .codec_ids = { AV_CODEC_ID_VP8 }, - .parser_parse = parse, - }; -diff -Naur a/media/ffvpx/libavcodec/vp9block.c b/media/ffvpx/libavcodec/vp9block.c ---- a/media/ffvpx/libavcodec/vp9block.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9block.c 2023-04-06 12:50:06.974471174 +0200 -@@ -23,13 +23,12 @@ - - #include "libavutil/avassert.h" - --#include "avcodec.h" --#include "internal.h" --#include "videodsp.h" --#include "vp56.h" -+#include "threadframe.h" -+#include "vp89_rac.h" - #include "vp9.h" - #include "vp9data.h" - #include "vp9dec.h" -+#include "vpx_rac.h" - - static av_always_inline void setctx_2d(uint8_t *ptr, int w, int h, - ptrdiff_t stride, int v) -@@ -89,7 +88,7 @@ - TX_32X32, TX_32X32, TX_32X32, TX_32X32, TX_16X16, TX_16X16, - TX_16X16, TX_8X8, TX_8X8, TX_8X8, TX_4X4, TX_4X4, TX_4X4 - }; -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - int row = td->row, col = td->col, row7 = td->row7; - enum TxfmMode max_tx = max_tx_for_bl_bp[b->bs]; -@@ -102,10 +101,11 @@ - b->seg_id = 0; - } else if (s->s.h.keyframe || s->s.h.intraonly) { - b->seg_id = !s->s.h.segmentation.update_map ? 0 : -- vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, s->s.h.segmentation.prob); -+ vp89_rac_get_tree(td->c, ff_vp9_segmentation_tree, -+ s->s.h.segmentation.prob); - } else if (!s->s.h.segmentation.update_map || - (s->s.h.segmentation.temporal && -- vp56_rac_get_prob_branchy(td->c, -+ vpx_rac_get_prob_branchy(td->c, - s->s.h.segmentation.pred_prob[s->above_segpred_ctx[col] + - td->left_segpred_ctx[row7]]))) { - if (!s->s.h.errorres && s->s.frames[REF_FRAME_SEGMAP].segmentation_map) { -@@ -128,8 +128,8 @@ - memset(&s->above_segpred_ctx[col], 1, w4); - memset(&td->left_segpred_ctx[row7], 1, h4); - } else { -- b->seg_id = vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, -- s->s.h.segmentation.prob); -+ b->seg_id = vp89_rac_get_tree(td->c, ff_vp9_segmentation_tree, -+ s->s.h.segmentation.prob); - - memset(&s->above_segpred_ctx[col], 0, w4); - memset(&td->left_segpred_ctx[row7], 0, h4); -@@ -144,7 +144,7 @@ - s->s.h.segmentation.feat[b->seg_id].skip_enabled; - if (!b->skip) { - int c = td->left_skip_ctx[row7] + s->above_skip_ctx[col]; -- b->skip = vp56_rac_get_prob(td->c, s->prob.p.skip[c]); -+ b->skip = vpx_rac_get_prob(td->c, s->prob.p.skip[c]); - td->counts.skip[c][b->skip]++; - } - -@@ -162,7 +162,7 @@ - c = have_a ? 2 * s->above_intra_ctx[col] : - have_l ? 2 * td->left_intra_ctx[row7] : 0; - } -- bit = vp56_rac_get_prob(td->c, s->prob.p.intra[c]); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.intra[c]); - td->counts.intra[c][bit]++; - b->intra = !bit; - } -@@ -187,22 +187,22 @@ - } - switch (max_tx) { - case TX_32X32: -- b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][0]); -+ b->tx = vpx_rac_get_prob(td->c, s->prob.p.tx32p[c][0]); - if (b->tx) { -- b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][1]); -+ b->tx += vpx_rac_get_prob(td->c, s->prob.p.tx32p[c][1]); - if (b->tx == 2) -- b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][2]); -+ b->tx += vpx_rac_get_prob(td->c, s->prob.p.tx32p[c][2]); - } - td->counts.tx32p[c][b->tx]++; - break; - case TX_16X16: -- b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][0]); -+ b->tx = vpx_rac_get_prob(td->c, s->prob.p.tx16p[c][0]); - if (b->tx) -- b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][1]); -+ b->tx += vpx_rac_get_prob(td->c, s->prob.p.tx16p[c][1]); - td->counts.tx16p[c][b->tx]++; - break; - case TX_8X8: -- b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx8p[c]); -+ b->tx = vpx_rac_get_prob(td->c, s->prob.p.tx8p[c]); - td->counts.tx8p[c][b->tx]++; - break; - case TX_4X4: -@@ -223,11 +223,11 @@ - // necessary, they're just there to make the code slightly - // simpler for now - b->mode[0] = -- a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- ff_vp9_default_kf_ymode_probs[a[0]][l[0]]); -+ a[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ ff_vp9_default_kf_ymode_probs[a[0]][l[0]]); - if (b->bs != BS_8x4) { -- b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- ff_vp9_default_kf_ymode_probs[a[1]][b->mode[0]]); -+ b->mode[1] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ ff_vp9_default_kf_ymode_probs[a[1]][b->mode[0]]); - l[0] = - a[1] = b->mode[1]; - } else { -@@ -237,11 +237,11 @@ - } - if (b->bs != BS_4x8) { - b->mode[2] = -- a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- ff_vp9_default_kf_ymode_probs[a[0]][l[1]]); -+ a[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ ff_vp9_default_kf_ymode_probs[a[0]][l[1]]); - if (b->bs != BS_8x4) { -- b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- ff_vp9_default_kf_ymode_probs[a[1]][b->mode[2]]); -+ b->mode[3] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ ff_vp9_default_kf_ymode_probs[a[1]][b->mode[2]]); - l[1] = - a[1] = b->mode[3]; - } else { -@@ -256,8 +256,8 @@ - b->mode[3] = b->mode[1]; - } - } else { -- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- ff_vp9_default_kf_ymode_probs[*a][*l]); -+ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ ff_vp9_default_kf_ymode_probs[*a][*l]); - b->mode[3] = - b->mode[2] = - b->mode[1] = b->mode[0]; -@@ -265,28 +265,28 @@ - memset(a, b->mode[0], ff_vp9_bwh_tab[0][b->bs][0]); - memset(l, b->mode[0], ff_vp9_bwh_tab[0][b->bs][1]); - } -- b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- ff_vp9_default_kf_uvmode_probs[b->mode[3]]); -+ b->uvmode = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ ff_vp9_default_kf_uvmode_probs[b->mode[3]]); - } else if (b->intra) { - b->comp = 0; - if (b->bs > BS_8x8) { -- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- s->prob.p.y_mode[0]); -+ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ s->prob.p.y_mode[0]); - td->counts.y_mode[0][b->mode[0]]++; - if (b->bs != BS_8x4) { -- b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- s->prob.p.y_mode[0]); -+ b->mode[1] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ s->prob.p.y_mode[0]); - td->counts.y_mode[0][b->mode[1]]++; - } else { - b->mode[1] = b->mode[0]; - } - if (b->bs != BS_4x8) { -- b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- s->prob.p.y_mode[0]); -+ b->mode[2] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ s->prob.p.y_mode[0]); - td->counts.y_mode[0][b->mode[2]]++; - if (b->bs != BS_8x4) { -- b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- s->prob.p.y_mode[0]); -+ b->mode[3] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ s->prob.p.y_mode[0]); - td->counts.y_mode[0][b->mode[3]]++; - } else { - b->mode[3] = b->mode[2]; -@@ -301,15 +301,15 @@ - }; - int sz = size_group[b->bs]; - -- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- s->prob.p.y_mode[sz]); -+ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ s->prob.p.y_mode[sz]); - b->mode[1] = - b->mode[2] = - b->mode[3] = b->mode[0]; - td->counts.y_mode[sz][b->mode[3]]++; - } -- b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, -- s->prob.p.uv_mode[b->mode[3]]); -+ b->uvmode = vp89_rac_get_tree(td->c, ff_vp9_intramode_tree, -+ s->prob.p.uv_mode[b->mode[3]]); - td->counts.uv_mode[b->mode[3]][b->uvmode]++; - } else { - static const uint8_t inter_mode_ctx_lut[14][14] = { -@@ -367,7 +367,7 @@ - } else { - c = 1; - } -- b->comp = vp56_rac_get_prob(td->c, s->prob.p.comp[c]); -+ b->comp = vpx_rac_get_prob(td->c, s->prob.p.comp[c]); - td->counts.comp[c][b->comp]++; - } - -@@ -439,7 +439,7 @@ - } else { - c = 2; - } -- bit = vp56_rac_get_prob(td->c, s->prob.p.comp_ref[c]); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.comp_ref[c]); - b->ref[var_idx] = s->s.h.varcompref[bit]; - td->counts.comp_ref[c][bit]++; - } else /* single reference */ { -@@ -479,7 +479,7 @@ - } else { - c = 2; - } -- bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][0]); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.single_ref[c][0]); - td->counts.single_ref[c][0][bit]++; - if (!bit) { - b->ref[0] = 0; -@@ -566,7 +566,7 @@ - } else { - c = 2; - } -- bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][1]); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.single_ref[c][1]); - td->counts.single_ref[c][1][bit]++; - b->ref[0] = 1 + bit; - } -@@ -589,8 +589,8 @@ - int c = inter_mode_ctx_lut[s->above_mode_ctx[col + off[b->bs]]] - [td->left_mode_ctx[row7 + off[b->bs]]]; - -- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -- s->prob.p.mv_mode[c]); -+ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -+ s->prob.p.mv_mode[c]); - b->mode[1] = - b->mode[2] = - b->mode[3] = b->mode[0]; -@@ -614,8 +614,8 @@ - c = 3; - } - -- filter_id = vp8_rac_get_tree(td->c, ff_vp9_filter_tree, -- s->prob.p.filter[c]); -+ filter_id = vp89_rac_get_tree(td->c, ff_vp9_filter_tree, -+ s->prob.p.filter[c]); - td->counts.filter[c][filter_id]++; - b->filter = ff_vp9_filter_lut[filter_id]; - } else { -@@ -625,14 +625,14 @@ - if (b->bs > BS_8x8) { - int c = inter_mode_ctx_lut[s->above_mode_ctx[col]][td->left_mode_ctx[row7]]; - -- b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -- s->prob.p.mv_mode[c]); -+ b->mode[0] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -+ s->prob.p.mv_mode[c]); - td->counts.mv_mode[c][b->mode[0] - 10]++; - ff_vp9_fill_mv(td, b->mv[0], b->mode[0], 0); - - if (b->bs != BS_8x4) { -- b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -- s->prob.p.mv_mode[c]); -+ b->mode[1] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -+ s->prob.p.mv_mode[c]); - td->counts.mv_mode[c][b->mode[1] - 10]++; - ff_vp9_fill_mv(td, b->mv[1], b->mode[1], 1); - } else { -@@ -642,14 +642,14 @@ - } - - if (b->bs != BS_4x8) { -- b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -- s->prob.p.mv_mode[c]); -+ b->mode[2] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -+ s->prob.p.mv_mode[c]); - td->counts.mv_mode[c][b->mode[2] - 10]++; - ff_vp9_fill_mv(td, b->mv[2], b->mode[2], 2); - - if (b->bs != BS_8x4) { -- b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -- s->prob.p.mv_mode[c]); -+ b->mode[3] = vp89_rac_get_tree(td->c, ff_vp9_inter_mode_tree, -+ s->prob.p.mv_mode[c]); - td->counts.mv_mode[c][b->mode[3] - 10]++; - ff_vp9_fill_mv(td, b->mv[3], b->mode[3], 3); - } else { -@@ -802,11 +802,11 @@ - - // FIXME merge cnt/eob arguments? - static av_always_inline int --decode_coeffs_b_generic(VP56RangeCoder *c, int16_t *coef, int n_coeffs, -+decode_coeffs_b_generic(VPXRangeCoder *c, int16_t *coef, int n_coeffs, - int is_tx32x32, int is8bitsperpixel, int bpp, unsigned (*cnt)[6][3], -- unsigned (*eob)[6][2], uint8_t (*p)[6][11], -+ unsigned (*eob)[6][2], const uint8_t (*p)[6][11], - int nnz, const int16_t *scan, const int16_t (*nb)[2], -- const int16_t *band_counts, int16_t *qmul) -+ const int16_t *band_counts, const int16_t *qmul) - { - int i = 0, band = 0, band_left = band_counts[band]; - const uint8_t *tp = p[0][nnz]; -@@ -815,13 +815,13 @@ - do { - int val, rc; - -- val = vp56_rac_get_prob_branchy(c, tp[0]); // eob -+ val = vpx_rac_get_prob_branchy(c, tp[0]); // eob - eob[band][nnz][val]++; - if (!val) - break; - - skip_eob: -- if (!vp56_rac_get_prob_branchy(c, tp[1])) { // zero -+ if (!vpx_rac_get_prob_branchy(c, tp[1])) { // zero - cnt[band][nnz][0]++; - if (!--band_left) - band_left = band_counts[++band]; -@@ -834,70 +834,70 @@ - } - - rc = scan[i]; -- if (!vp56_rac_get_prob_branchy(c, tp[2])) { // one -+ if (!vpx_rac_get_prob_branchy(c, tp[2])) { // one - cnt[band][nnz][1]++; - val = 1; - cache[rc] = 1; - } else { - cnt[band][nnz][2]++; -- if (!vp56_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4 -- if (!vp56_rac_get_prob_branchy(c, tp[4])) { -+ if (!vpx_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4 -+ if (!vpx_rac_get_prob_branchy(c, tp[4])) { - cache[rc] = val = 2; - } else { -- val = 3 + vp56_rac_get_prob(c, tp[5]); -+ val = 3 + vpx_rac_get_prob(c, tp[5]); - cache[rc] = 3; - } -- } else if (!vp56_rac_get_prob_branchy(c, tp[6])) { // cat1/2 -+ } else if (!vpx_rac_get_prob_branchy(c, tp[6])) { // cat1/2 - cache[rc] = 4; -- if (!vp56_rac_get_prob_branchy(c, tp[7])) { -- val = vp56_rac_get_prob(c, 159) + 5; -+ if (!vpx_rac_get_prob_branchy(c, tp[7])) { -+ val = vpx_rac_get_prob(c, 159) + 5; - } else { -- val = (vp56_rac_get_prob(c, 165) << 1) + 7; -- val += vp56_rac_get_prob(c, 145); -+ val = (vpx_rac_get_prob(c, 165) << 1) + 7; -+ val += vpx_rac_get_prob(c, 145); - } - } else { // cat 3-6 - cache[rc] = 5; -- if (!vp56_rac_get_prob_branchy(c, tp[8])) { -- if (!vp56_rac_get_prob_branchy(c, tp[9])) { -- val = 11 + (vp56_rac_get_prob(c, 173) << 2); -- val += (vp56_rac_get_prob(c, 148) << 1); -- val += vp56_rac_get_prob(c, 140); -+ if (!vpx_rac_get_prob_branchy(c, tp[8])) { -+ if (!vpx_rac_get_prob_branchy(c, tp[9])) { -+ val = 11 + (vpx_rac_get_prob(c, 173) << 2); -+ val += (vpx_rac_get_prob(c, 148) << 1); -+ val += vpx_rac_get_prob(c, 140); - } else { -- val = 19 + (vp56_rac_get_prob(c, 176) << 3); -- val += (vp56_rac_get_prob(c, 155) << 2); -- val += (vp56_rac_get_prob(c, 140) << 1); -- val += vp56_rac_get_prob(c, 135); -+ val = 19 + (vpx_rac_get_prob(c, 176) << 3); -+ val += (vpx_rac_get_prob(c, 155) << 2); -+ val += (vpx_rac_get_prob(c, 140) << 1); -+ val += vpx_rac_get_prob(c, 135); - } -- } else if (!vp56_rac_get_prob_branchy(c, tp[10])) { -- val = (vp56_rac_get_prob(c, 180) << 4) + 35; -- val += (vp56_rac_get_prob(c, 157) << 3); -- val += (vp56_rac_get_prob(c, 141) << 2); -- val += (vp56_rac_get_prob(c, 134) << 1); -- val += vp56_rac_get_prob(c, 130); -+ } else if (!vpx_rac_get_prob_branchy(c, tp[10])) { -+ val = (vpx_rac_get_prob(c, 180) << 4) + 35; -+ val += (vpx_rac_get_prob(c, 157) << 3); -+ val += (vpx_rac_get_prob(c, 141) << 2); -+ val += (vpx_rac_get_prob(c, 134) << 1); -+ val += vpx_rac_get_prob(c, 130); - } else { - val = 67; - if (!is8bitsperpixel) { - if (bpp == 12) { -- val += vp56_rac_get_prob(c, 255) << 17; -- val += vp56_rac_get_prob(c, 255) << 16; -+ val += vpx_rac_get_prob(c, 255) << 17; -+ val += vpx_rac_get_prob(c, 255) << 16; - } -- val += (vp56_rac_get_prob(c, 255) << 15); -- val += (vp56_rac_get_prob(c, 255) << 14); -+ val += (vpx_rac_get_prob(c, 255) << 15); -+ val += (vpx_rac_get_prob(c, 255) << 14); - } -- val += (vp56_rac_get_prob(c, 254) << 13); -- val += (vp56_rac_get_prob(c, 254) << 12); -- val += (vp56_rac_get_prob(c, 254) << 11); -- val += (vp56_rac_get_prob(c, 252) << 10); -- val += (vp56_rac_get_prob(c, 249) << 9); -- val += (vp56_rac_get_prob(c, 243) << 8); -- val += (vp56_rac_get_prob(c, 230) << 7); -- val += (vp56_rac_get_prob(c, 196) << 6); -- val += (vp56_rac_get_prob(c, 177) << 5); -- val += (vp56_rac_get_prob(c, 153) << 4); -- val += (vp56_rac_get_prob(c, 140) << 3); -- val += (vp56_rac_get_prob(c, 133) << 2); -- val += (vp56_rac_get_prob(c, 130) << 1); -- val += vp56_rac_get_prob(c, 129); -+ val += (vpx_rac_get_prob(c, 254) << 13); -+ val += (vpx_rac_get_prob(c, 254) << 12); -+ val += (vpx_rac_get_prob(c, 254) << 11); -+ val += (vpx_rac_get_prob(c, 252) << 10); -+ val += (vpx_rac_get_prob(c, 249) << 9); -+ val += (vpx_rac_get_prob(c, 243) << 8); -+ val += (vpx_rac_get_prob(c, 230) << 7); -+ val += (vpx_rac_get_prob(c, 196) << 6); -+ val += (vpx_rac_get_prob(c, 177) << 5); -+ val += (vpx_rac_get_prob(c, 153) << 4); -+ val += (vpx_rac_get_prob(c, 140) << 3); -+ val += (vpx_rac_get_prob(c, 133) << 2); -+ val += (vpx_rac_get_prob(c, 130) << 1); -+ val += vpx_rac_get_prob(c, 129); - } - } - } -@@ -911,9 +911,9 @@ - if (!--band_left) - band_left = band_counts[++band]; - if (is_tx32x32) -- STORE_COEF(coef, rc, (int)((vp8_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]) / 2); -+ STORE_COEF(coef, rc, (int)((vp89_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]) / 2); - else -- STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]); -+ STORE_COEF(coef, rc, (vp89_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]); - nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1; - tp = p[band][nnz]; - } while (++i < n_coeffs); -@@ -923,9 +923,9 @@ - - static int decode_coeffs_b_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], -- uint8_t (*p)[6][11], int nnz, const int16_t *scan, -+ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, -- int16_t *qmul) -+ const int16_t *qmul) - { - return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 1, 8, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -@@ -933,9 +933,9 @@ - - static int decode_coeffs_b32_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], -- uint8_t (*p)[6][11], int nnz, const int16_t *scan, -+ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, -- int16_t *qmul) -+ const int16_t *qmul) - { - return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 1, 8, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -@@ -943,9 +943,9 @@ - - static int decode_coeffs_b_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], -- uint8_t (*p)[6][11], int nnz, const int16_t *scan, -+ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, -- int16_t *qmul) -+ const int16_t *qmul) - { - return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 0, td->s->s.h.bpp, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -@@ -953,9 +953,9 @@ - - static int decode_coeffs_b32_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], -- uint8_t (*p)[6][11], int nnz, const int16_t *scan, -+ const uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, -- int16_t *qmul) -+ const int16_t *qmul) - { - return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 0, td->s->s.h.bpp, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -@@ -963,17 +963,17 @@ - - static av_always_inline int decode_coeffs(VP9TileData *td, int is8bitsperpixel) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - int row = td->row, col = td->col; -- uint8_t (*p)[6][11] = s->prob.coef[b->tx][0 /* y */][!b->intra]; -+ const uint8_t (*p)[6][11] = s->prob.coef[b->tx][0 /* y */][!b->intra]; - unsigned (*c)[6][3] = td->counts.coef[b->tx][0 /* y */][!b->intra]; - unsigned (*e)[6][2] = td->counts.eob[b->tx][0 /* y */][!b->intra]; - int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, h4 = ff_vp9_bwh_tab[1][b->bs][1] << 1; - int end_x = FFMIN(2 * (s->cols - col), w4); - int end_y = FFMIN(2 * (s->rows - row), h4); - int n, pl, x, y, ret; -- int16_t (*qmul)[2] = s->s.h.segmentation.feat[b->seg_id].qmul; -+ const int16_t (*qmul)[2] = s->s.h.segmentation.feat[b->seg_id].qmul; - int tx = 4 * s->s.h.lossless + b->tx; - const int16_t * const *yscans = ff_vp9_scans[tx]; - const int16_t (* const * ynbs)[2] = ff_vp9_scans_nb[tx]; -@@ -1264,7 +1264,7 @@ - VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, - enum BlockLevel bl, enum BlockPartition bp) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - enum BlockSize bs = bl * 3 + bp; - int bytesperpixel = s->bytesperpixel; -diff -Naur a/media/ffvpx/libavcodec/vp9.c b/media/ffvpx/libavcodec/vp9.c ---- a/media/ffvpx/libavcodec/vp9.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9.c 2023-04-06 12:50:06.974471174 +0200 -@@ -21,17 +21,24 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config_components.h" -+ - #include "avcodec.h" -+#include "codec_internal.h" -+#include "decode.h" - #include "get_bits.h" - #include "hwconfig.h" --#include "internal.h" - #include "profiles.h" - #include "thread.h" -+#include "threadframe.h" -+#include "pthread_internal.h" -+ - #include "videodsp.h" --#include "vp56.h" -+#include "vp89_rac.h" - #include "vp9.h" - #include "vp9data.h" - #include "vp9dec.h" -+#include "vpx_rac.h" - #include "libavutil/avassert.h" - #include "libavutil/pixdesc.h" - #include "libavutil/video_enc_params.h" -@@ -39,15 +46,9 @@ - #define VP9_SYNCCODE 0x498342 - - #if HAVE_THREADS --static void vp9_free_entries(AVCodecContext *avctx) { -- VP9Context *s = avctx->priv_data; -- -- if (avctx->active_thread_type & FF_THREAD_SLICE) { -- pthread_mutex_destroy(&s->progress_mutex); -- pthread_cond_destroy(&s->progress_cond); -- av_freep(&s->entries); -- } --} -+DEFINE_OFFSET_ARRAY(VP9Context, vp9_context, pthread_init_cnt, -+ (offsetof(VP9Context, progress_mutex)), -+ (offsetof(VP9Context, progress_cond))); - - static int vp9_alloc_entries(AVCodecContext *avctx, int n) { - VP9Context *s = avctx->priv_data; -@@ -58,17 +59,11 @@ - av_freep(&s->entries); - - s->entries = av_malloc_array(n, sizeof(atomic_int)); -- -- if (!s->entries) { -- av_freep(&s->entries); -+ if (!s->entries) - return AVERROR(ENOMEM); -- } - - for (i = 0; i < n; i++) - atomic_init(&s->entries[i], 0); -- -- pthread_mutex_init(&s->progress_mutex, NULL); -- pthread_cond_init(&s->progress_cond, NULL); - } - return 0; - } -@@ -90,7 +85,6 @@ - pthread_mutex_unlock(&s->progress_mutex); - } - #else --static void vp9_free_entries(AVCodecContext *avctx) {} - static int vp9_alloc_entries(AVCodecContext *avctx, int n) { return 0; } - #endif - -@@ -103,7 +97,7 @@ - - static void vp9_frame_unref(AVCodecContext *avctx, VP9Frame *f) - { -- ff_thread_release_buffer(avctx, &f->tf); -+ ff_thread_release_ext_buffer(avctx, &f->tf); - av_buffer_unref(&f->extradata); - av_buffer_unref(&f->hwaccel_priv_buf); - f->segmentation_map = NULL; -@@ -115,7 +109,7 @@ - VP9Context *s = avctx->priv_data; - int ret, sz; - -- ret = ff_thread_get_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF); -+ ret = ff_thread_get_ext_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF); - if (ret < 0) - return ret; - -@@ -192,7 +186,8 @@ - CONFIG_VP9_D3D11VA_HWACCEL * 2 + \ - CONFIG_VP9_NVDEC_HWACCEL + \ - CONFIG_VP9_VAAPI_HWACCEL + \ -- CONFIG_VP9_VDPAU_HWACCEL) -+ CONFIG_VP9_VDPAU_HWACCEL + \ -+ CONFIG_VP9_VIDEOTOOLBOX_HWACCEL) - enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; - VP9Context *s = avctx->priv_data; - uint8_t *p; -@@ -224,6 +219,9 @@ - #if CONFIG_VP9_VDPAU_HWACCEL - *fmtp++ = AV_PIX_FMT_VDPAU; - #endif -+#if CONFIG_VP9_VIDEOTOOLBOX_HWACCEL -+ *fmtp++ = AV_PIX_FMT_VIDEOTOOLBOX; -+#endif - break; - case AV_PIX_FMT_YUV420P12: - #if CONFIG_VP9_NVDEC_HWACCEL -@@ -236,6 +234,13 @@ - *fmtp++ = AV_PIX_FMT_VDPAU; - #endif - break; -+ case AV_PIX_FMT_YUV444P: -+ case AV_PIX_FMT_YUV444P10: -+ case AV_PIX_FMT_YUV444P12: -+#if CONFIG_VP9_VAAPI_HWACCEL -+ *fmtp++ = AV_PIX_FMT_VAAPI; -+#endif -+ break; - } - - *fmtp++ = s->pix_fmt; -@@ -277,7 +282,7 @@ - assign(s->intra_pred_data[2], uint8_t *, 64 * bytesperpixel); - assign(s->above_y_nnz_ctx, uint8_t *, 16); - assign(s->above_mode_ctx, uint8_t *, 16); -- assign(s->above_mv_ctx, VP56mv(*)[2], 16); -+ assign(s->above_mv_ctx, VP9mv(*)[2], 16); - assign(s->above_uv_nnz_ctx[0], uint8_t *, 16); - assign(s->above_uv_nnz_ctx[1], uint8_t *, 16); - assign(s->above_partition_ctx, uint8_t *, 8); -@@ -382,7 +387,7 @@ - } - - // differential forward probability updates --static int update_prob(VP56RangeCoder *c, int p) -+static int update_prob(VPXRangeCoder *c, int p) - { - static const uint8_t inv_map_table[255] = { - 7, 20, 33, 46, 59, 72, 85, 98, 111, 124, 137, 150, 163, 176, -@@ -422,16 +427,16 @@ - * updates vs. the 'fine, exact' updates further down the range, which - * adds one extra dimension to this differential update model. */ - -- if (!vp8_rac_get(c)) { -- d = vp8_rac_get_uint(c, 4) + 0; -- } else if (!vp8_rac_get(c)) { -- d = vp8_rac_get_uint(c, 4) + 16; -- } else if (!vp8_rac_get(c)) { -- d = vp8_rac_get_uint(c, 5) + 32; -+ if (!vp89_rac_get(c)) { -+ d = vp89_rac_get_uint(c, 4) + 0; -+ } else if (!vp89_rac_get(c)) { -+ d = vp89_rac_get_uint(c, 4) + 16; -+ } else if (!vp89_rac_get(c)) { -+ d = vp89_rac_get_uint(c, 5) + 32; - } else { -- d = vp8_rac_get_uint(c, 7); -+ d = vp89_rac_get_uint(c, 7); - if (d >= 65) -- d = (d << 1) - 65 + vp8_rac_get(c); -+ d = (d << 1) - 65 + vp89_rac_get(c); - d += 64; - av_assert2(d < FF_ARRAY_ELEMS(inv_map_table)); - } -@@ -787,16 +792,15 @@ - s->s.h.tiling.tile_rows = 1 << s->s.h.tiling.log2_tile_rows; - if (s->s.h.tiling.tile_cols != (1 << s->s.h.tiling.log2_tile_cols)) { - int n_range_coders; -- VP56RangeCoder *rc; -+ VPXRangeCoder *rc; - - if (s->td) { - for (i = 0; i < s->active_tile_cols; i++) - vp9_tile_data_free(&s->td[i]); -- av_free(s->td); -+ av_freep(&s->td); - } - - s->s.h.tiling.tile_cols = 1 << s->s.h.tiling.log2_tile_cols; -- vp9_free_entries(avctx); - s->active_tile_cols = avctx->active_thread_type == FF_THREAD_SLICE ? - s->s.h.tiling.tile_cols : 1; - vp9_alloc_entries(avctx, s->sb_rows); -@@ -805,11 +809,11 @@ - } else { - n_range_coders = s->s.h.tiling.tile_cols; - } -- s->td = av_mallocz_array(s->active_tile_cols, sizeof(VP9TileData) + -- n_range_coders * sizeof(VP56RangeCoder)); -+ s->td = av_calloc(s->active_tile_cols, sizeof(VP9TileData) + -+ n_range_coders * sizeof(VPXRangeCoder)); - if (!s->td) - return AVERROR(ENOMEM); -- rc = (VP56RangeCoder *) &s->td[s->active_tile_cols]; -+ rc = (VPXRangeCoder *) &s->td[s->active_tile_cols]; - for (i = 0; i < s->active_tile_cols; i++) { - s->td[i].s = s; - s->td[i].c_b = rc; -@@ -881,11 +885,11 @@ - av_log(avctx, AV_LOG_ERROR, "Invalid compressed header size\n"); - return AVERROR_INVALIDDATA; - } -- ret = ff_vp56_init_range_decoder(&s->c, data2, size2); -+ ret = ff_vpx_init_range_decoder(&s->c, data2, size2); - if (ret < 0) - return ret; - -- if (vp56_rac_get_prob_branchy(&s->c, 128)) { // marker bit -+ if (vpx_rac_get_prob_branchy(&s->c, 128)) { // marker bit - av_log(avctx, AV_LOG_ERROR, "Marker bit was set\n"); - return AVERROR_INVALIDDATA; - } -@@ -909,22 +913,22 @@ - if (s->s.h.lossless) { - s->s.h.txfmmode = TX_4X4; - } else { -- s->s.h.txfmmode = vp8_rac_get_uint(&s->c, 2); -+ s->s.h.txfmmode = vp89_rac_get_uint(&s->c, 2); - if (s->s.h.txfmmode == 3) -- s->s.h.txfmmode += vp8_rac_get(&s->c); -+ s->s.h.txfmmode += vp89_rac_get(&s->c); - - if (s->s.h.txfmmode == TX_SWITCHABLE) { - for (i = 0; i < 2; i++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.tx8p[i] = update_prob(&s->c, s->prob.p.tx8p[i]); - for (i = 0; i < 2; i++) - for (j = 0; j < 2; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.tx16p[i][j] = - update_prob(&s->c, s->prob.p.tx16p[i][j]); - for (i = 0; i < 2; i++) - for (j = 0; j < 3; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.tx32p[i][j] = - update_prob(&s->c, s->prob.p.tx32p[i][j]); - } -@@ -933,7 +937,7 @@ - // coef updates - for (i = 0; i < 4; i++) { - uint8_t (*ref)[2][6][6][3] = s->prob_ctx[c].coef[i]; -- if (vp8_rac_get(&s->c)) { -+ if (vp89_rac_get(&s->c)) { - for (j = 0; j < 2; j++) - for (k = 0; k < 2; k++) - for (l = 0; l < 6; l++) -@@ -943,7 +947,7 @@ - if (m >= 3 && l == 0) // dc only has 3 pt - break; - for (n = 0; n < 3; n++) { -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - p[n] = update_prob(&s->c, r[n]); - else - p[n] = r[n]; -@@ -969,33 +973,33 @@ - - // mode updates - for (i = 0; i < 3; i++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.skip[i] = update_prob(&s->c, s->prob.p.skip[i]); - if (!s->s.h.keyframe && !s->s.h.intraonly) { - for (i = 0; i < 7; i++) - for (j = 0; j < 3; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_mode[i][j] = - update_prob(&s->c, s->prob.p.mv_mode[i][j]); - - if (s->s.h.filtermode == FILTER_SWITCHABLE) - for (i = 0; i < 4; i++) - for (j = 0; j < 2; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.filter[i][j] = - update_prob(&s->c, s->prob.p.filter[i][j]); - - for (i = 0; i < 4; i++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.intra[i] = update_prob(&s->c, s->prob.p.intra[i]); - - if (s->s.h.allowcompinter) { -- s->s.h.comppredmode = vp8_rac_get(&s->c); -+ s->s.h.comppredmode = vp89_rac_get(&s->c); - if (s->s.h.comppredmode) -- s->s.h.comppredmode += vp8_rac_get(&s->c); -+ s->s.h.comppredmode += vp89_rac_get(&s->c); - if (s->s.h.comppredmode == PRED_SWITCHABLE) - for (i = 0; i < 5; i++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.comp[i] = - update_prob(&s->c, s->prob.p.comp[i]); - } else { -@@ -1004,10 +1008,10 @@ - - if (s->s.h.comppredmode != PRED_COMPREF) { - for (i = 0; i < 5; i++) { -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.single_ref[i][0] = - update_prob(&s->c, s->prob.p.single_ref[i][0]); -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.single_ref[i][1] = - update_prob(&s->c, s->prob.p.single_ref[i][1]); - } -@@ -1015,72 +1019,72 @@ - - if (s->s.h.comppredmode != PRED_SINGLEREF) { - for (i = 0; i < 5; i++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.comp_ref[i] = - update_prob(&s->c, s->prob.p.comp_ref[i]); - } - - for (i = 0; i < 4; i++) - for (j = 0; j < 9; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.y_mode[i][j] = - update_prob(&s->c, s->prob.p.y_mode[i][j]); - - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) - for (k = 0; k < 3; k++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.partition[3 - i][j][k] = - update_prob(&s->c, - s->prob.p.partition[3 - i][j][k]); - - // mv fields don't use the update_prob subexp model for some reason - for (i = 0; i < 3; i++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -- s->prob.p.mv_joint[i] = (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) -+ s->prob.p.mv_joint[i] = (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - - for (i = 0; i < 2; i++) { -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].sign = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - - for (j = 0; j < 10; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].classes[j] = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].class0 = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - - for (j = 0; j < 10; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].bits[j] = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - } - - for (i = 0; i < 2; i++) { - for (j = 0; j < 2; j++) - for (k = 0; k < 3; k++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].class0_fp[j][k] = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - - for (j = 0; j < 3; j++) -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].fp[j] = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - } - - if (s->s.h.highprecisionmvs) { - for (i = 0; i < 2; i++) { -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].class0_hp = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - -- if (vp56_rac_get_prob_branchy(&s->c, 252)) -+ if (vpx_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].hp = -- (vp8_rac_get_uint(&s->c, 7) << 1) | 1; -+ (vp89_rac_get_uint(&s->c, 7) << 1) | 1; - } - } - } -@@ -1103,11 +1107,11 @@ - int bytesperpixel = s->bytesperpixel; - - if (bl == BL_8X8) { -- bp = vp8_rac_get_tree(td->c, ff_vp9_partition_tree, p); -+ bp = vp89_rac_get_tree(td->c, ff_vp9_partition_tree, p); - ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); - } else if (col + hbs < s->cols) { // FIXME why not <=? - if (row + hbs < s->rows) { // FIXME why not <=? -- bp = vp8_rac_get_tree(td->c, ff_vp9_partition_tree, p); -+ bp = vp89_rac_get_tree(td->c, ff_vp9_partition_tree, p); - switch (bp) { - case PARTITION_NONE: - ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); -@@ -1139,7 +1143,7 @@ - default: - av_assert0(0); - } -- } else if (vp56_rac_get_prob_branchy(td->c, p[1])) { -+ } else if (vpx_rac_get_prob_branchy(td->c, p[1])) { - bp = PARTITION_SPLIT; - decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); - decode_sb(td, row, col + hbs, lflvl, -@@ -1150,7 +1154,7 @@ - ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); - } - } else if (row + hbs < s->rows) { // FIXME why not <=? -- if (vp56_rac_get_prob_branchy(td->c, p[2])) { -+ if (vpx_rac_get_prob_branchy(td->c, p[2])) { - bp = PARTITION_SPLIT; - decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); - yoff += hbs * 8 * y_stride; -@@ -1244,14 +1248,17 @@ - } - av_buffer_pool_uninit(&s->frame_extradata_pool); - for (i = 0; i < 8; i++) { -- ff_thread_release_buffer(avctx, &s->s.refs[i]); -+ ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); - av_frame_free(&s->s.refs[i].f); -- ff_thread_release_buffer(avctx, &s->next_refs[i]); -+ ff_thread_release_ext_buffer(avctx, &s->next_refs[i]); - av_frame_free(&s->next_refs[i].f); - } - - free_buffers(s); -- vp9_free_entries(avctx); -+#if HAVE_THREADS -+ av_freep(&s->entries); -+ ff_pthread_free(s, vp9_context_offsets); -+#endif - av_freep(&s->td); - return 0; - } -@@ -1288,17 +1295,13 @@ - data += 4; - size -= 4; - } -- if (tile_size > size) { -- ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); -+ if (tile_size > size) - return AVERROR_INVALIDDATA; -- } -- ret = ff_vp56_init_range_decoder(&td->c_b[tile_col], data, tile_size); -+ ret = ff_vpx_init_range_decoder(&td->c_b[tile_col], data, tile_size); - if (ret < 0) - return ret; -- if (vp56_rac_get_prob_branchy(&td->c_b[tile_col], 128)) { // marker bit -- ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); -+ if (vpx_rac_get_prob_branchy(&td->c_b[tile_col], 128)) // marker bit - return AVERROR_INVALIDDATA; -- } - data += tile_size; - size -= tile_size; - } -@@ -1341,7 +1344,7 @@ - decode_sb_mem(td, row, col, lflvl_ptr, - yoff2, uvoff2, BL_64X64); - } else { -- if (vpX_rac_is_end(td->c)) { -+ if (vpx_rac_is_end(td->c)) { - return AVERROR_INVALIDDATA; - } - decode_sb(td, row, col, lflvl_ptr, -@@ -1551,7 +1554,7 @@ - return 0; - } - --static int vp9_decode_frame(AVCodecContext *avctx, void *frame, -+static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, - int *got_frame, AVPacket *pkt) - { - const uint8_t *data = pkt->data; -@@ -1571,16 +1574,11 @@ - } - if ((ret = av_frame_ref(frame, s->s.refs[ref].f)) < 0) - return ret; -- ((AVFrame *)frame)->pts = pkt->pts; --#if FF_API_PKT_PTS --FF_DISABLE_DEPRECATION_WARNINGS -- ((AVFrame *)frame)->pkt_pts = pkt->pts; --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- ((AVFrame *)frame)->pkt_dts = pkt->dts; -+ frame->pts = pkt->pts; -+ frame->pkt_dts = pkt->dts; - for (i = 0; i < 8; i++) { - if (s->next_refs[i].f->buf[0]) -- ff_thread_release_buffer(avctx, &s->next_refs[i]); -+ ff_thread_release_ext_buffer(avctx, &s->next_refs[i]); - if (s->s.refs[i].f->buf[0] && - (ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i])) < 0) - return ret; -@@ -1620,7 +1618,7 @@ - // ref frame setup - for (i = 0; i < 8; i++) { - if (s->next_refs[i].f->buf[0]) -- ff_thread_release_buffer(avctx, &s->next_refs[i]); -+ ff_thread_release_ext_buffer(avctx, &s->next_refs[i]); - if (s->s.h.refreshrefmask & (1 << i)) { - ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.frames[CUR_FRAME].tf); - } else if (s->s.refs[i].f->buf[0]) { -@@ -1720,10 +1718,10 @@ - } - if (tile_size > size) - return AVERROR_INVALIDDATA; -- ret = ff_vp56_init_range_decoder(&s->td[tile_col].c_b[tile_row], data, tile_size); -+ ret = ff_vpx_init_range_decoder(&s->td[tile_col].c_b[tile_row], data, tile_size); - if (ret < 0) - return ret; -- if (vp56_rac_get_prob_branchy(&s->td[tile_col].c_b[tile_row], 128)) // marker bit -+ if (vpx_rac_get_prob_branchy(&s->td[tile_col].c_b[tile_row], 128)) // marker bit - return AVERROR_INVALIDDATA; - data += tile_size; - size -= tile_size; -@@ -1769,7 +1767,7 @@ - // ref frame setup - for (i = 0; i < 8; i++) { - if (s->s.refs[i].f->buf[0]) -- ff_thread_release_buffer(avctx, &s->s.refs[i]); -+ ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); - if (s->next_refs[i].f->buf[0] && - (ret = ff_thread_ref_frame(&s->s.refs[i], &s->next_refs[i])) < 0) - return ret; -@@ -1792,45 +1790,39 @@ - for (i = 0; i < 3; i++) - vp9_frame_unref(avctx, &s->s.frames[i]); - for (i = 0; i < 8; i++) -- ff_thread_release_buffer(avctx, &s->s.refs[i]); -+ ff_thread_release_ext_buffer(avctx, &s->s.refs[i]); - } - --static int init_frames(AVCodecContext *avctx) -+static av_cold int vp9_decode_init(AVCodecContext *avctx) - { - VP9Context *s = avctx->priv_data; -- int i; -+ int ret; - -- for (i = 0; i < 3; i++) { -+ s->last_bpp = 0; -+ s->s.h.filter.sharpness = -1; -+ -+#if HAVE_THREADS -+ if (avctx->active_thread_type & FF_THREAD_SLICE) { -+ ret = ff_pthread_init(s, vp9_context_offsets); -+ if (ret < 0) -+ return ret; -+ } -+#endif -+ -+ for (int i = 0; i < 3; i++) { - s->s.frames[i].tf.f = av_frame_alloc(); -- if (!s->s.frames[i].tf.f) { -- vp9_decode_free(avctx); -- av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); -+ if (!s->s.frames[i].tf.f) - return AVERROR(ENOMEM); -- } - } -- for (i = 0; i < 8; i++) { -- s->s.refs[i].f = av_frame_alloc(); -- s->next_refs[i].f = av_frame_alloc(); -- if (!s->s.refs[i].f || !s->next_refs[i].f) { -- vp9_decode_free(avctx); -- av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); -+ for (int i = 0; i < 8; i++) { -+ s->s.refs[i].f = av_frame_alloc(); -+ s->next_refs[i].f = av_frame_alloc(); -+ if (!s->s.refs[i].f || !s->next_refs[i].f) - return AVERROR(ENOMEM); -- } - } -- - return 0; - } - --static av_cold int vp9_decode_init(AVCodecContext *avctx) --{ -- VP9Context *s = avctx->priv_data; -- -- s->last_bpp = 0; -- s->s.h.filter.sharpness = -1; -- -- return init_frames(avctx); --} -- - #if HAVE_THREADS - static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) - { -@@ -1847,7 +1839,7 @@ - } - for (i = 0; i < 8; i++) { - if (s->s.refs[i].f->buf[0]) -- ff_thread_release_buffer(dst, &s->s.refs[i]); -+ ff_thread_release_ext_buffer(dst, &s->s.refs[i]); - if (ssrc->next_refs[i].f->buf[0]) { - if ((ret = ff_thread_ref_frame(&s->s.refs[i], &ssrc->next_refs[i])) < 0) - return ret; -@@ -1878,21 +1870,22 @@ - } - #endif - --AVCodec ff_vp9_decoder = { -- .name = "vp9", -- .long_name = NULL_IF_CONFIG_SMALL("Google VP9"), -- .type = AVMEDIA_TYPE_VIDEO, -- .id = AV_CODEC_ID_VP9, -+const FFCodec ff_vp9_decoder = { -+ .p.name = "vp9", -+ CODEC_LONG_NAME("Google VP9"), -+ .p.type = AVMEDIA_TYPE_VIDEO, -+ .p.id = AV_CODEC_ID_VP9, - .priv_data_size = sizeof(VP9Context), - .init = vp9_decode_init, - .close = vp9_decode_free, -- .decode = vp9_decode_frame, -- .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, -- .caps_internal = FF_CODEC_CAP_SLICE_THREAD_HAS_MF | -+ FF_CODEC_DECODE_CB(vp9_decode_frame), -+ .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, -+ .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | -+ FF_CODEC_CAP_SLICE_THREAD_HAS_MF | - FF_CODEC_CAP_ALLOCATE_PROGRESS, - .flush = vp9_decode_flush, -- .update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context), -- .profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), -+ UPDATE_THREAD_CONTEXT(vp9_decode_update_thread_context), -+ .p.profiles = NULL_IF_CONFIG_SMALL(ff_vp9_profiles), - .bsfs = "vp9_superframe_split", - .hw_configs = (const AVCodecHWConfigInternal *const []) { - #if CONFIG_VP9_DXVA2_HWACCEL -@@ -1913,6 +1906,9 @@ - #if CONFIG_VP9_VDPAU_HWACCEL - HWACCEL_VDPAU(vp9), - #endif -+#if CONFIG_VP9_VIDEOTOOLBOX_HWACCEL -+ HWACCEL_VIDEOTOOLBOX(vp9), -+#endif - NULL - }, - }; -diff -Naur a/media/ffvpx/libavcodec/vp9dec.h b/media/ffvpx/libavcodec/vp9dec.h ---- a/media/ffvpx/libavcodec/vp9dec.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9dec.h 2023-04-06 12:50:06.974471174 +0200 -@@ -33,9 +33,12 @@ - #include "libavutil/thread.h" - #include "libavutil/internal.h" - -+#include "get_bits.h" -+#include "videodsp.h" - #include "vp9.h" - #include "vp9dsp.h" - #include "vp9shared.h" -+#include "vpx_rac.h" - - #define REF_INVALID_SCALE 0xFFFF - -@@ -82,7 +85,7 @@ - typedef struct VP9Block { - uint8_t seg_id, intra, comp, ref[2], mode[4], uvmode, skip; - enum FilterMode filter; -- VP56mv mv[4 /* b_idx */][2 /* ref */]; -+ VP9mv mv[4 /* b_idx */][2 /* ref */]; - enum BlockSize bs; - enum TxfmMode tx, uvtx; - enum BlockLevel bl; -@@ -98,13 +101,14 @@ - VP9DSPContext dsp; - VideoDSPContext vdsp; - GetBitContext gb; -- VP56RangeCoder c; -+ VPXRangeCoder c; - int pass, active_tile_cols; - - #if HAVE_THREADS - pthread_mutex_t progress_mutex; - pthread_cond_t progress_cond; - atomic_int *entries; -+ unsigned pthread_init_cnt; - #endif - - uint8_t ss_h, ss_v; -@@ -145,7 +149,7 @@ - uint8_t *above_comp_ctx; // 1bit - uint8_t *above_ref_ctx; // 2bit - uint8_t *above_filter_ctx; -- VP56mv (*above_mv_ctx)[2]; -+ VP9mv (*above_mv_ctx)[2]; - - // whole-frame cache - uint8_t *intra_pred_data[3]; -@@ -162,11 +166,9 @@ - } VP9Context; - - struct VP9TileData { -- //VP9Context should be const, but because of the threading API(generates -- //a lot of warnings) it's not. -- VP9Context *s; -- VP56RangeCoder *c_b; -- VP56RangeCoder *c; -+ const VP9Context *s; -+ VPXRangeCoder *c_b; -+ VPXRangeCoder *c; - int row, row7, col, col7; - uint8_t *dst[3]; - ptrdiff_t y_stride, uv_stride; -@@ -208,7 +210,7 @@ - // contextual (left) cache - DECLARE_ALIGNED(16, uint8_t, left_y_nnz_ctx)[16]; - DECLARE_ALIGNED(16, uint8_t, left_mode_ctx)[16]; -- DECLARE_ALIGNED(16, VP56mv, left_mv_ctx)[16][2]; -+ DECLARE_ALIGNED(16, VP9mv, left_mv_ctx)[16][2]; - DECLARE_ALIGNED(16, uint8_t, left_uv_nnz_ctx)[2][16]; - DECLARE_ALIGNED(8, uint8_t, left_partition_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_skip_ctx)[8]; -@@ -236,7 +238,7 @@ - unsigned int nb_block_structure; - }; - --void ff_vp9_fill_mv(VP9TileData *td, VP56mv *mv, int mode, int sb); -+void ff_vp9_fill_mv(VP9TileData *td, VP9mv *mv, int mode, int sb); - - void ff_vp9_adapt_probs(VP9Context *s); - -diff -Naur a/media/ffvpx/libavcodec/vp9dsp.c b/media/ffvpx/libavcodec/vp9dsp.c ---- a/media/ffvpx/libavcodec/vp9dsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9dsp.c 2023-04-06 12:49:40.257395051 +0200 -@@ -21,8 +21,10 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config.h" -+ -+#include "libavutil/attributes.h" - #include "libavutil/avassert.h" --#include "libavutil/common.h" - #include "libavutil/mem_internal.h" - - #include "vp9dsp.h" -@@ -94,8 +96,15 @@ - ff_vp9dsp_init_12(dsp); - } - -- if (ARCH_AARCH64) ff_vp9dsp_init_aarch64(dsp, bpp); -- if (ARCH_ARM) ff_vp9dsp_init_arm(dsp, bpp); -- if (ARCH_X86) ff_vp9dsp_init_x86(dsp, bpp, bitexact); -- if (ARCH_MIPS) ff_vp9dsp_init_mips(dsp, bpp); -+#if ARCH_AARCH64 -+ ff_vp9dsp_init_aarch64(dsp, bpp); -+#elif ARCH_ARM -+ ff_vp9dsp_init_arm(dsp, bpp); -+#elif ARCH_X86 -+ ff_vp9dsp_init_x86(dsp, bpp, bitexact); -+#elif ARCH_MIPS -+ ff_vp9dsp_init_mips(dsp, bpp); -+#elif ARCH_LOONGARCH -+ ff_vp9dsp_init_loongarch(dsp, bpp); -+#endif - } -diff -Naur a/media/ffvpx/libavcodec/vp9dsp.h b/media/ffvpx/libavcodec/vp9dsp.h ---- a/media/ffvpx/libavcodec/vp9dsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9dsp.h 2023-04-06 12:50:06.974471174 +0200 -@@ -28,6 +28,7 @@ - #include - - #include "libavcodec/vp9.h" -+#include "libavutil/attributes_internal.h" - - typedef void (*vp9_mc_func)(uint8_t *dst, ptrdiff_t dst_stride, - const uint8_t *ref, ptrdiff_t ref_stride, -@@ -120,7 +121,7 @@ - vp9_scaled_mc_func smc[5][N_FILTERS][2]; - } VP9DSPContext; - --extern const int16_t ff_vp9_subpel_filters[3][16][8]; -+extern const int16_t attribute_visibility_hidden ff_vp9_subpel_filters[3][16][8]; - - void ff_vp9dsp_init(VP9DSPContext *dsp, int bpp, int bitexact); - -@@ -132,5 +133,6 @@ - void ff_vp9dsp_init_arm(VP9DSPContext *dsp, int bpp); - void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact); - void ff_vp9dsp_init_mips(VP9DSPContext *dsp, int bpp); -+void ff_vp9dsp_init_loongarch(VP9DSPContext *dsp, int bpp); - - #endif /* AVCODEC_VP9DSP_H */ -diff -Naur a/media/ffvpx/libavcodec/vp9_mc_template.c b/media/ffvpx/libavcodec/vp9_mc_template.c ---- a/media/ffvpx/libavcodec/vp9_mc_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9_mc_template.c 2023-04-06 12:50:06.974471174 +0200 -@@ -22,9 +22,9 @@ - */ - - #define ROUNDED_DIV_MVx2(a, b) \ -- (VP56mv) { .x = ROUNDED_DIV(a.x + b.x, 2), .y = ROUNDED_DIV(a.y + b.y, 2) } -+ (VP9mv) { .x = ROUNDED_DIV(a.x + b.x, 2), .y = ROUNDED_DIV(a.y + b.y, 2) } - #define ROUNDED_DIV_MVx4(a, b, c, d) \ -- (VP56mv) { .x = ROUNDED_DIV(a.x + b.x + c.x + d.x, 4), \ -+ (VP9mv) { .x = ROUNDED_DIV(a.x + b.x + c.x + d.x, 4), \ - .y = ROUNDED_DIV(a.y + b.y + c.y + d.y, 4) } - - static void FN(inter_pred)(VP9TileData *td) -@@ -33,11 +33,11 @@ - { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, - { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, - }; -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - int row = td->row, col = td->col; -- ThreadFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; -- AVFrame *ref1 = tref1->f, *ref2; -+ const ThreadFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; -+ const AVFrame *ref1 = tref1->f, *ref2; - int w1 = ref1->width, h1 = ref1->height, w2, h2; - ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; - int bytesperpixel = BYTES_PER_PIXEL; -@@ -51,7 +51,7 @@ - - // y inter pred - if (b->bs > BS_8x8) { -- VP56mv uvmv; -+ VP9mv uvmv; - - #if SCALED == 0 - if (b->bs == BS_8x4) { -diff -Naur a/media/ffvpx/libavcodec/vp9mvs.c b/media/ffvpx/libavcodec/vp9mvs.c ---- a/media/ffvpx/libavcodec/vp9mvs.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9mvs.c 2023-04-06 12:50:06.974471174 +0200 -@@ -21,13 +21,13 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "internal.h" --#include "vp56.h" --#include "vp9.h" -+#include "threadframe.h" -+#include "vp89_rac.h" - #include "vp9data.h" - #include "vp9dec.h" -+#include "vpx_rac.h" - --static av_always_inline void clamp_mv(VP56mv *dst, const VP56mv *src, -+static av_always_inline void clamp_mv(VP9mv *dst, const VP9mv *src, - VP9TileData *td) - { - dst->x = av_clip(src->x, td->min_mv.x, td->max_mv.x); -@@ -35,7 +35,7 @@ - } - - static void find_ref_mvs(VP9TileData *td, -- VP56mv *pmv, int ref, int z, int idx, int sb) -+ VP9mv *pmv, int ref, int z, int idx, int sb) - { - static const int8_t mv_ref_blk_off[N_BS_SIZES][8][2] = { - [BS_64x64] = { { 3, -1 }, { -1, 3 }, { 4, -1 }, { -1, 4 }, -@@ -65,7 +65,7 @@ - [BS_4x4] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, - { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } }, - }; -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - int row = td->row, col = td->col, row7 = td->row7; - const int8_t (*p)[2] = mv_ref_blk_off[b->bs]; -@@ -99,7 +99,7 @@ - #define RETURN_MV(mv) \ - do { \ - if (sb > 0) { \ -- VP56mv tmp; \ -+ VP9mv tmp; \ - uint32_t m; \ - av_assert2(idx == 1); \ - av_assert2(mem != INVALID_MV); \ -@@ -185,7 +185,7 @@ - #define RETURN_SCALE_MV(mv, scale) \ - do { \ - if (scale) { \ -- VP56mv mv_temp = { -mv.x, -mv.y }; \ -+ VP9mv mv_temp = { -mv.x, -mv.y }; \ - RETURN_MV(mv_temp); \ - } else { \ - RETURN_MV(mv); \ -@@ -235,10 +235,10 @@ - - static av_always_inline int read_mv_component(VP9TileData *td, int idx, int hp) - { -- VP9Context *s = td->s; -- int bit, sign = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].sign); -- int n, c = vp8_rac_get_tree(td->c, ff_vp9_mv_class_tree, -- s->prob.p.mv_comp[idx].classes); -+ const VP9Context *s = td->s; -+ int bit, sign = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].sign); -+ int n, c = vp89_rac_get_tree(td->c, ff_vp9_mv_class_tree, -+ s->prob.p.mv_comp[idx].classes); - - td->counts.mv_comp[idx].sign[sign]++; - td->counts.mv_comp[idx].classes[c]++; -@@ -246,17 +246,17 @@ - int m; - - for (n = 0, m = 0; m < c; m++) { -- bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].bits[m]); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].bits[m]); - n |= bit << m; - td->counts.mv_comp[idx].bits[m][bit]++; - } - n <<= 3; -- bit = vp8_rac_get_tree(td->c, ff_vp9_mv_fp_tree, -- s->prob.p.mv_comp[idx].fp); -+ bit = vp89_rac_get_tree(td->c, ff_vp9_mv_fp_tree, -+ s->prob.p.mv_comp[idx].fp); - n |= bit << 1; - td->counts.mv_comp[idx].fp[bit]++; - if (hp) { -- bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].hp); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].hp); - td->counts.mv_comp[idx].hp[bit]++; - n |= bit; - } else { -@@ -267,14 +267,14 @@ - } - n += 8 << c; - } else { -- n = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0); -+ n = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0); - td->counts.mv_comp[idx].class0[n]++; -- bit = vp8_rac_get_tree(td->c, ff_vp9_mv_fp_tree, -- s->prob.p.mv_comp[idx].class0_fp[n]); -+ bit = vp89_rac_get_tree(td->c, ff_vp9_mv_fp_tree, -+ s->prob.p.mv_comp[idx].class0_fp[n]); - td->counts.mv_comp[idx].class0_fp[n][bit]++; - n = (n << 3) | (bit << 1); - if (hp) { -- bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0_hp); -+ bit = vpx_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0_hp); - td->counts.mv_comp[idx].class0_hp[bit]++; - n |= bit; - } else { -@@ -288,9 +288,9 @@ - return sign ? -(n + 1) : (n + 1); - } - --void ff_vp9_fill_mv(VP9TileData *td, VP56mv *mv, int mode, int sb) -+void ff_vp9_fill_mv(VP9TileData *td, VP9mv *mv, int mode, int sb) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - - if (mode == ZEROMV) { -@@ -319,8 +319,8 @@ - } - } - if (mode == NEWMV) { -- enum MVJoint j = vp8_rac_get_tree(td->c, ff_vp9_mv_joint_tree, -- s->prob.p.mv_joint); -+ enum MVJoint j = vp89_rac_get_tree(td->c, ff_vp9_mv_joint_tree, -+ s->prob.p.mv_joint); - - td->counts.mv_joint[j]++; - if (j >= MV_JOINT_V) -@@ -350,8 +350,8 @@ - } - } - if (mode == NEWMV) { -- enum MVJoint j = vp8_rac_get_tree(td->c, ff_vp9_mv_joint_tree, -- s->prob.p.mv_joint); -+ enum MVJoint j = vp89_rac_get_tree(td->c, ff_vp9_mv_joint_tree, -+ s->prob.p.mv_joint); - - td->counts.mv_joint[j]++; - if (j >= MV_JOINT_V) -diff -Naur a/media/ffvpx/libavcodec/vp9_parser.c b/media/ffvpx/libavcodec/vp9_parser.c ---- a/media/ffvpx/libavcodec/vp9_parser.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9_parser.c 2023-04-06 12:49:40.256395011 +0200 -@@ -64,7 +64,7 @@ - return size; - } - --AVCodecParser ff_vp9_parser = { -+const AVCodecParser ff_vp9_parser = { - .codec_ids = { AV_CODEC_ID_VP9 }, - .parser_parse = parse, - }; -diff -Naur a/media/ffvpx/libavcodec/vp9prob.c b/media/ffvpx/libavcodec/vp9prob.c ---- a/media/ffvpx/libavcodec/vp9prob.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9prob.c 2023-04-06 12:50:06.974471174 +0200 -@@ -21,9 +21,7 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "vp56.h" - #include "vp9.h" --#include "vp9data.h" - #include "vp9dec.h" - - static av_always_inline void adapt_prob(uint8_t *p, unsigned ct0, unsigned ct1, -diff -Naur a/media/ffvpx/libavcodec/vp9recon.c b/media/ffvpx/libavcodec/vp9recon.c ---- a/media/ffvpx/libavcodec/vp9recon.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9recon.c 2023-04-06 12:50:06.974471174 +0200 -@@ -24,8 +24,7 @@ - #include "libavutil/avassert.h" - #include "libavutil/mem_internal.h" - --#include "avcodec.h" --#include "internal.h" -+#include "threadframe.h" - #include "videodsp.h" - #include "vp9data.h" - #include "vp9dec.h" -@@ -37,7 +36,7 @@ - int row, int y, enum TxfmMode tx, - int p, int ss_h, int ss_v, int bytesperpixel) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - int have_top = row > 0 || y > 0; - int have_left = col > td->tile_col_start || x > 0; - int have_right = x < w - 1; -@@ -219,7 +218,7 @@ - static av_always_inline void intra_recon(VP9TileData *td, ptrdiff_t y_off, - ptrdiff_t uv_off, int bytesperpixel) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - int row = td->row, col = td->col; - int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, step1d = 1 << b->tx, n; -@@ -296,14 +295,14 @@ - intra_recon(td, y_off, uv_off, 2); - } - --static av_always_inline void mc_luma_unscaled(VP9TileData *td, vp9_mc_func (*mc)[2], -+static av_always_inline void mc_luma_unscaled(VP9TileData *td, const vp9_mc_func (*mc)[2], - uint8_t *dst, ptrdiff_t dst_stride, - const uint8_t *ref, ptrdiff_t ref_stride, -- ThreadFrame *ref_frame, -- ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, -+ const ThreadFrame *ref_frame, -+ ptrdiff_t y, ptrdiff_t x, const VP9mv *mv, - int bw, int bh, int w, int h, int bytesperpixel) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - int mx = mv->x, my = mv->y, th; - - y += my >> 3; -@@ -332,16 +331,16 @@ - mc[!!mx][!!my](dst, dst_stride, ref, ref_stride, bh, mx << 1, my << 1); - } - --static av_always_inline void mc_chroma_unscaled(VP9TileData *td, vp9_mc_func (*mc)[2], -+static av_always_inline void mc_chroma_unscaled(VP9TileData *td, const vp9_mc_func (*mc)[2], - uint8_t *dst_u, uint8_t *dst_v, - ptrdiff_t dst_stride, - const uint8_t *ref_u, ptrdiff_t src_stride_u, - const uint8_t *ref_v, ptrdiff_t src_stride_v, -- ThreadFrame *ref_frame, -- ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, -+ const ThreadFrame *ref_frame, -+ ptrdiff_t y, ptrdiff_t x, const VP9mv *mv, - int bw, int bh, int w, int h, int bytesperpixel) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - int mx = mv->x * (1 << !s->ss_h), my = mv->y * (1 << !s->ss_v), th; - - y += my >> 4; -@@ -405,16 +404,16 @@ - #undef SCALED - - static av_always_inline void mc_luma_scaled(VP9TileData *td, vp9_scaled_mc_func smc, -- vp9_mc_func (*mc)[2], -+ const vp9_mc_func (*mc)[2], - uint8_t *dst, ptrdiff_t dst_stride, - const uint8_t *ref, ptrdiff_t ref_stride, -- ThreadFrame *ref_frame, -- ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, -+ const ThreadFrame *ref_frame, -+ ptrdiff_t y, ptrdiff_t x, const VP9mv *in_mv, - int px, int py, int pw, int ph, - int bw, int bh, int w, int h, int bytesperpixel, - const uint16_t *scale, const uint8_t *step) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && - s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { - mc_luma_unscaled(td, mc, dst, dst_stride, ref, ref_stride, ref_frame, -@@ -424,7 +423,7 @@ - int mx, my; - int refbw_m1, refbh_m1; - int th; -- VP56mv mv; -+ VP9mv mv; - - mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 8, (s->cols * 8 - x + px + 3) * 8); - mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 8, (s->rows * 8 - y + py + 3) * 8); -@@ -463,18 +462,18 @@ - } - - static av_always_inline void mc_chroma_scaled(VP9TileData *td, vp9_scaled_mc_func smc, -- vp9_mc_func (*mc)[2], -+ const vp9_mc_func (*mc)[2], - uint8_t *dst_u, uint8_t *dst_v, - ptrdiff_t dst_stride, - const uint8_t *ref_u, ptrdiff_t src_stride_u, - const uint8_t *ref_v, ptrdiff_t src_stride_v, -- ThreadFrame *ref_frame, -- ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, -+ const ThreadFrame *ref_frame, -+ ptrdiff_t y, ptrdiff_t x, const VP9mv *in_mv, - int px, int py, int pw, int ph, - int bw, int bh, int w, int h, int bytesperpixel, - const uint16_t *scale, const uint8_t *step) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && - s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { - mc_chroma_unscaled(td, mc, dst_u, dst_v, dst_stride, ref_u, src_stride_u, -@@ -484,7 +483,7 @@ - int mx, my; - int refbw_m1, refbh_m1; - int th; -- VP56mv mv; -+ VP9mv mv; - - if (s->ss_h) { - // BUG https://code.google.com/p/webm/issues/detail?id=820 -@@ -569,7 +568,7 @@ - - static av_always_inline void inter_recon(VP9TileData *td, int bytesperpixel) - { -- VP9Context *s = td->s; -+ const VP9Context *s = td->s; - VP9Block *b = td->b; - int row = td->row, col = td->col; - -diff -Naur a/media/ffvpx/libavcodec/vp9shared.h b/media/ffvpx/libavcodec/vp9shared.h ---- a/media/ffvpx/libavcodec/vp9shared.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9shared.h 2023-04-06 12:50:06.974471174 +0200 -@@ -27,9 +27,10 @@ - #include - #include - -+#include "libavutil/mem_internal.h" -+ - #include "vp9.h" --#include "thread.h" --#include "vp56.h" -+#include "threadframe.h" - - enum BlockPartition { - PARTITION_NONE, // [ ] <-. -@@ -51,8 +52,13 @@ - PRED_SWITCHABLE, - }; - -+typedef struct VP9mv { -+ DECLARE_ALIGNED(4, int16_t, x); -+ int16_t y; -+} VP9mv; -+ - typedef struct VP9mvrefPair { -- VP56mv mv[2]; -+ VP9mv mv[2]; - int8_t ref[2]; - } VP9mvrefPair; - -diff -Naur a/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c b/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c ---- a/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vp9_superframe_split_bsf.c 2023-04-06 12:49:40.257395051 +0200 -@@ -51,6 +51,9 @@ - return ret; - in = s->buffer_pkt; - -+ if (!in->size) -+ goto passthrough; -+ - marker = in->data[in->size - 1]; - if ((marker & 0xe0) == 0xc0) { - int length_size = 1 + ((marker >> 3) & 0x3); -@@ -70,7 +73,7 @@ - frame_size |= bytestream2_get_byte(&bc) << (j * 8); - - total_size += frame_size; -- if (frame_size < 0 || total_size > in->size - idx_size) { -+ if (frame_size <= 0 || total_size > in->size - idx_size) { - av_log(ctx, AV_LOG_ERROR, - "Invalid frame size in a superframe: %d\n", frame_size); - ret = AVERROR(EINVAL); -@@ -121,6 +124,7 @@ - out->pts = AV_NOPTS_VALUE; - - } else { -+passthrough: - av_packet_move_ref(out, s->buffer_pkt); - } - -@@ -155,12 +159,12 @@ - av_packet_free(&s->buffer_pkt); - } - --const AVBitStreamFilter ff_vp9_superframe_split_bsf = { -- .name = "vp9_superframe_split", -+const FFBitStreamFilter ff_vp9_superframe_split_bsf = { -+ .p.name = "vp9_superframe_split", -+ .p.codec_ids = (const enum AVCodecID []){ AV_CODEC_ID_VP9, AV_CODEC_ID_NONE }, - .priv_data_size = sizeof(VP9SFSplitContext), - .init = vp9_superframe_split_init, - .flush = vp9_superframe_split_flush, - .close = vp9_superframe_split_uninit, - .filter = vp9_superframe_split_filter, -- .codec_ids = (const enum AVCodecID []){ AV_CODEC_ID_VP9, AV_CODEC_ID_NONE }, - }; -diff -Naur a/media/ffvpx/libavcodec/vpx_rac.c b/media/ffvpx/libavcodec/vpx_rac.c ---- a/media/ffvpx/libavcodec/vpx_rac.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vpx_rac.c 2023-04-06 12:50:06.974471174 +0200 -@@ -0,0 +1,53 @@ -+/* -+ * VP5/6/8 decoder -+ * Copyright (c) 2010 Fiona Glaser -+ * -+ * 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 -+#include "libavutil/error.h" -+#include "bytestream.h" -+#include "vpx_rac.h" -+ -+const uint8_t ff_vpx_norm_shift[256]= { -+ 8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4, -+ 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -+ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -+}; -+ -+int ff_vpx_init_range_decoder(VPXRangeCoder *c, const uint8_t *buf, int buf_size) -+{ -+ c->high = 255; -+ c->bits = -16; -+ c->buffer = buf; -+ c->end = buf + buf_size; -+ c->end_reached = 0; -+ if (buf_size < 1) -+ return AVERROR_INVALIDDATA; -+ c->code_word = bytestream_get_be24(&c->buffer); -+ return 0; -+} -diff -Naur a/media/ffvpx/libavcodec/vpx_rac.h b/media/ffvpx/libavcodec/vpx_rac.h ---- a/media/ffvpx/libavcodec/vpx_rac.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/vpx_rac.h 2023-04-06 12:50:06.975471215 +0200 -@@ -0,0 +1,135 @@ -+/* -+ * Copyright (C) 2006 Aurelien Jacobs -+ * -+ * 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 -+ */ -+ -+/** -+ * @file -+ * Common VP5-VP9 range decoder stuff -+ */ -+ -+#ifndef AVCODEC_VPX_RAC_H -+#define AVCODEC_VPX_RAC_H -+ -+#include -+ -+#include "config.h" -+#include "libavutil/attributes.h" -+#include "bytestream.h" -+ -+typedef struct VPXRangeCoder { -+ int high; -+ int bits; /* stored negated (i.e. negative "bits" is a positive number of -+ bits left) in order to eliminate a negate in cache refilling */ -+ const uint8_t *buffer; -+ const uint8_t *end; -+ unsigned int code_word; -+ int end_reached; -+} VPXRangeCoder; -+ -+extern const uint8_t ff_vpx_norm_shift[256]; -+int ff_vpx_init_range_decoder(VPXRangeCoder *c, const uint8_t *buf, int buf_size); -+ -+/** -+ * returns 1 if the end of the stream has been reached, 0 otherwise. -+ */ -+static av_always_inline int vpx_rac_is_end(VPXRangeCoder *c) -+{ -+ if (c->end <= c->buffer && c->bits >= 0) -+ c->end_reached ++; -+ return c->end_reached > 10; -+} -+ -+static av_always_inline unsigned int vpx_rac_renorm(VPXRangeCoder *c) -+{ -+ int shift = ff_vpx_norm_shift[c->high]; -+ int bits = c->bits; -+ unsigned int code_word = c->code_word; -+ -+ c->high <<= shift; -+ code_word <<= shift; -+ bits += shift; -+ if(bits >= 0 && c->buffer < c->end) { -+ code_word |= bytestream_get_be16(&c->buffer) << bits; -+ bits -= 16; -+ } -+ c->bits = bits; -+ return code_word; -+} -+ -+#if ARCH_ARM -+#include "arm/vpx_arith.h" -+#elif ARCH_X86 -+#include "x86/vpx_arith.h" -+#endif -+ -+#ifndef vpx_rac_get_prob -+#define vpx_rac_get_prob vpx_rac_get_prob -+static av_always_inline int vpx_rac_get_prob(VPXRangeCoder *c, uint8_t prob) -+{ -+ unsigned int code_word = vpx_rac_renorm(c); -+ unsigned int low = 1 + (((c->high - 1) * prob) >> 8); -+ unsigned int low_shift = low << 16; -+ int bit = code_word >= low_shift; -+ -+ c->high = bit ? c->high - low : low; -+ c->code_word = bit ? code_word - low_shift : code_word; -+ -+ return bit; -+} -+#endif -+ -+#ifndef vpx_rac_get_prob_branchy -+// branchy variant, to be used where there's a branch based on the bit decoded -+static av_always_inline int vpx_rac_get_prob_branchy(VPXRangeCoder *c, int prob) -+{ -+ unsigned long code_word = vpx_rac_renorm(c); -+ unsigned low = 1 + (((c->high - 1) * prob) >> 8); -+ unsigned low_shift = low << 16; -+ -+ if (code_word >= low_shift) { -+ c->high -= low; -+ c->code_word = code_word - low_shift; -+ return 1; -+ } -+ -+ c->high = low; -+ c->code_word = code_word; -+ return 0; -+} -+#endif -+ -+static av_always_inline int vpx_rac_get(VPXRangeCoder *c) -+{ -+ unsigned int code_word = vpx_rac_renorm(c); -+ /* equiprobable */ -+ int low = (c->high + 1) >> 1; -+ unsigned int low_shift = low << 16; -+ int bit = code_word >= low_shift; -+ if (bit) { -+ c->high -= low; -+ code_word -= low_shift; -+ } else { -+ c->high = low; -+ } -+ -+ c->code_word = code_word; -+ return bit; -+} -+ -+#endif /* AVCODEC_VPX_RAC_H */ -diff -Naur a/media/ffvpx/libavcodec/x86/dct32.asm b/media/ffvpx/libavcodec/x86/dct32.asm ---- a/media/ffvpx/libavcodec/x86/dct32.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/dct32.asm 2023-04-06 12:49:40.257395051 +0200 -@@ -387,7 +387,7 @@ - %endif - - --; void ff_dct32_float_sse(FFTSample *out, const FFTSample *in) -+; void ff_dct32_float(FFTSample *out, const FFTSample *in) - %macro DCT32_FUNC 0 - cglobal dct32_float, 2, 3, 16, out, in, tmp - ; pass 1 -@@ -474,18 +474,8 @@ - %endmacro - - %macro LOAD_INV 2 --%if cpuflag(sse2) - pshufd %1, %2, 0x1b --%elif cpuflag(sse) -- movaps %1, %2 -- shufps %1, %1, 0x1b --%endif - %endmacro - --%if ARCH_X86_32 --INIT_XMM sse --DCT32_FUNC --%endif -- - INIT_XMM sse2 - DCT32_FUNC -diff -Naur a/media/ffvpx/libavcodec/x86/dct_init.c b/media/ffvpx/libavcodec/x86/dct_init.c ---- a/media/ffvpx/libavcodec/x86/dct_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/dct_init.c 2023-04-06 12:49:40.257395051 +0200 -@@ -22,7 +22,6 @@ - #include "libavutil/x86/cpu.h" - #include "libavcodec/dct.h" - --void ff_dct32_float_sse(FFTSample *out, const FFTSample *in); - void ff_dct32_float_sse2(FFTSample *out, const FFTSample *in); - void ff_dct32_float_avx(FFTSample *out, const FFTSample *in); - -@@ -30,10 +29,6 @@ - { - int cpu_flags = av_get_cpu_flags(); - --#if ARCH_X86_32 -- if (EXTERNAL_SSE(cpu_flags)) -- s->dct32 = ff_dct32_float_sse; --#endif - if (EXTERNAL_SSE2(cpu_flags)) - s->dct32 = ff_dct32_float_sse2; - if (EXTERNAL_AVX_FAST(cpu_flags)) -diff -Naur a/media/ffvpx/libavcodec/x86/fdct.c b/media/ffvpx/libavcodec/x86/fdct.c ---- a/media/ffvpx/libavcodec/x86/fdct.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/fdct.c 2023-04-06 12:49:40.257395051 +0200 -@@ -30,12 +30,14 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "libavutil/common.h" -+#include "config.h" -+#include "libavutil/attributes.h" -+#include "libavutil/macros.h" - #include "libavutil/mem_internal.h" - #include "libavutil/x86/asm.h" - #include "fdct.h" - --#if HAVE_MMX_INLINE -+#if HAVE_SSE2_INLINE - - ////////////////////////////////////////////////////////////////////// - // -@@ -69,8 +71,6 @@ - - DECLARE_ALIGNED(16, static const int16_t, fdct_one_corr)[8] = { X8(1) }; - --DECLARE_ALIGNED(8, static const int32_t, fdct_r_row)[2] = {RND_FRW_ROW, RND_FRW_ROW }; -- - static const struct - { - DECLARE_ALIGNED(16, const int32_t, fdct_r_row_sse2)[4]; -@@ -80,80 +80,6 @@ - }}; - //DECLARE_ALIGNED(16, static const long, fdct_r_row_sse2)[4] = {RND_FRW_ROW, RND_FRW_ROW, RND_FRW_ROW, RND_FRW_ROW}; - --DECLARE_ALIGNED(8, static const int16_t, tab_frw_01234567)[] = { // forward_dct coeff table -- 16384, 16384, 22725, 19266, -- 16384, 16384, 12873, 4520, -- 21407, 8867, 19266, -4520, -- -8867, -21407, -22725, -12873, -- 16384, -16384, 12873, -22725, -- -16384, 16384, 4520, 19266, -- 8867, -21407, 4520, -12873, -- 21407, -8867, 19266, -22725, -- -- 22725, 22725, 31521, 26722, -- 22725, 22725, 17855, 6270, -- 29692, 12299, 26722, -6270, -- -12299, -29692, -31521, -17855, -- 22725, -22725, 17855, -31521, -- -22725, 22725, 6270, 26722, -- 12299, -29692, 6270, -17855, -- 29692, -12299, 26722, -31521, -- -- 21407, 21407, 29692, 25172, -- 21407, 21407, 16819, 5906, -- 27969, 11585, 25172, -5906, -- -11585, -27969, -29692, -16819, -- 21407, -21407, 16819, -29692, -- -21407, 21407, 5906, 25172, -- 11585, -27969, 5906, -16819, -- 27969, -11585, 25172, -29692, -- -- 19266, 19266, 26722, 22654, -- 19266, 19266, 15137, 5315, -- 25172, 10426, 22654, -5315, -- -10426, -25172, -26722, -15137, -- 19266, -19266, 15137, -26722, -- -19266, 19266, 5315, 22654, -- 10426, -25172, 5315, -15137, -- 25172, -10426, 22654, -26722, -- -- 16384, 16384, 22725, 19266, -- 16384, 16384, 12873, 4520, -- 21407, 8867, 19266, -4520, -- -8867, -21407, -22725, -12873, -- 16384, -16384, 12873, -22725, -- -16384, 16384, 4520, 19266, -- 8867, -21407, 4520, -12873, -- 21407, -8867, 19266, -22725, -- -- 19266, 19266, 26722, 22654, -- 19266, 19266, 15137, 5315, -- 25172, 10426, 22654, -5315, -- -10426, -25172, -26722, -15137, -- 19266, -19266, 15137, -26722, -- -19266, 19266, 5315, 22654, -- 10426, -25172, 5315, -15137, -- 25172, -10426, 22654, -26722, -- -- 21407, 21407, 29692, 25172, -- 21407, 21407, 16819, 5906, -- 27969, 11585, 25172, -5906, -- -11585, -27969, -29692, -16819, -- 21407, -21407, 16819, -29692, -- -21407, 21407, 5906, 25172, -- 11585, -27969, 5906, -16819, -- 27969, -11585, 25172, -29692, -- -- 22725, 22725, 31521, 26722, -- 22725, 22725, 17855, 6270, -- 29692, 12299, 26722, -6270, -- -12299, -29692, -31521, -17855, -- 22725, -22725, 17855, -31521, -- -22725, 22725, 6270, 26722, -- 12299, -29692, 6270, -17855, -- 29692, -12299, 26722, -31521, --}; -- - static const struct - { - DECLARE_ALIGNED(16, const int16_t, tab_frw_01234567_sse2)[256]; -@@ -373,7 +299,6 @@ - "r" (out + offset), "r" (ocos_4_16)); \ - } - --FDCT_COL(mmx, mm, movq) - FDCT_COL(sse2, xmm, movdqa) - - static av_always_inline void fdct_row_sse2(const int16_t *in, int16_t *out) -@@ -441,148 +366,6 @@ - ); - } - --static av_always_inline void fdct_row_mmxext(const int16_t *in, int16_t *out, -- const int16_t *table) --{ -- __asm__ volatile ( -- "pshufw $0x1B, 8(%0), %%mm5 \n\t" -- "movq (%0), %%mm0 \n\t" -- "movq %%mm0, %%mm1 \n\t" -- "paddsw %%mm5, %%mm0 \n\t" -- "psubsw %%mm5, %%mm1 \n\t" -- "movq %%mm0, %%mm2 \n\t" -- "punpckldq %%mm1, %%mm0 \n\t" -- "punpckhdq %%mm1, %%mm2 \n\t" -- "movq (%1), %%mm1 \n\t" -- "movq 8(%1), %%mm3 \n\t" -- "movq 16(%1), %%mm4 \n\t" -- "movq 24(%1), %%mm5 \n\t" -- "movq 32(%1), %%mm6 \n\t" -- "movq 40(%1), %%mm7 \n\t" -- "pmaddwd %%mm0, %%mm1 \n\t" -- "pmaddwd %%mm2, %%mm3 \n\t" -- "pmaddwd %%mm0, %%mm4 \n\t" -- "pmaddwd %%mm2, %%mm5 \n\t" -- "pmaddwd %%mm0, %%mm6 \n\t" -- "pmaddwd %%mm2, %%mm7 \n\t" -- "pmaddwd 48(%1), %%mm0 \n\t" -- "pmaddwd 56(%1), %%mm2 \n\t" -- "paddd %%mm1, %%mm3 \n\t" -- "paddd %%mm4, %%mm5 \n\t" -- "paddd %%mm6, %%mm7 \n\t" -- "paddd %%mm0, %%mm2 \n\t" -- "movq (%2), %%mm0 \n\t" -- "paddd %%mm0, %%mm3 \n\t" -- "paddd %%mm0, %%mm5 \n\t" -- "paddd %%mm0, %%mm7 \n\t" -- "paddd %%mm0, %%mm2 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm3 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm5 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm7 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm2 \n\t" -- "packssdw %%mm5, %%mm3 \n\t" -- "packssdw %%mm2, %%mm7 \n\t" -- "movq %%mm3, (%3) \n\t" -- "movq %%mm7, 8(%3) \n\t" -- : -- : "r" (in), "r" (table), "r" (fdct_r_row), "r" (out)); --} -- --static av_always_inline void fdct_row_mmx(const int16_t *in, int16_t *out, const int16_t *table) --{ -- //FIXME reorder (I do not have an old MMX-only CPU here to benchmark ...) -- __asm__ volatile( -- "movd 12(%0), %%mm1 \n\t" -- "punpcklwd 8(%0), %%mm1 \n\t" -- "movq %%mm1, %%mm2 \n\t" -- "psrlq $0x20, %%mm1 \n\t" -- "movq 0(%0), %%mm0 \n\t" -- "punpcklwd %%mm2, %%mm1 \n\t" -- "movq %%mm0, %%mm5 \n\t" -- "paddsw %%mm1, %%mm0 \n\t" -- "psubsw %%mm1, %%mm5 \n\t" -- "movq %%mm0, %%mm2 \n\t" -- "punpckldq %%mm5, %%mm0 \n\t" -- "punpckhdq %%mm5, %%mm2 \n\t" -- "movq 0(%1), %%mm1 \n\t" -- "movq 8(%1), %%mm3 \n\t" -- "movq 16(%1), %%mm4 \n\t" -- "movq 24(%1), %%mm5 \n\t" -- "movq 32(%1), %%mm6 \n\t" -- "movq 40(%1), %%mm7 \n\t" -- "pmaddwd %%mm0, %%mm1 \n\t" -- "pmaddwd %%mm2, %%mm3 \n\t" -- "pmaddwd %%mm0, %%mm4 \n\t" -- "pmaddwd %%mm2, %%mm5 \n\t" -- "pmaddwd %%mm0, %%mm6 \n\t" -- "pmaddwd %%mm2, %%mm7 \n\t" -- "pmaddwd 48(%1), %%mm0 \n\t" -- "pmaddwd 56(%1), %%mm2 \n\t" -- "paddd %%mm1, %%mm3 \n\t" -- "paddd %%mm4, %%mm5 \n\t" -- "paddd %%mm6, %%mm7 \n\t" -- "paddd %%mm0, %%mm2 \n\t" -- "movq (%2), %%mm0 \n\t" -- "paddd %%mm0, %%mm3 \n\t" -- "paddd %%mm0, %%mm5 \n\t" -- "paddd %%mm0, %%mm7 \n\t" -- "paddd %%mm0, %%mm2 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm3 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm5 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm7 \n\t" -- "psrad $"S(SHIFT_FRW_ROW)", %%mm2 \n\t" -- "packssdw %%mm5, %%mm3 \n\t" -- "packssdw %%mm2, %%mm7 \n\t" -- "movq %%mm3, 0(%3) \n\t" -- "movq %%mm7, 8(%3) \n\t" -- : -- : "r" (in), "r" (table), "r" (fdct_r_row), "r" (out)); --} -- --void ff_fdct_mmx(int16_t *block) --{ -- DECLARE_ALIGNED(8, int64_t, align_tmp)[16]; -- int16_t * block1= (int16_t*)align_tmp; -- const int16_t *table= tab_frw_01234567; -- int i; -- -- fdct_col_mmx(block, block1, 0); -- fdct_col_mmx(block, block1, 4); -- -- for(i=8;i>0;i--) { -- fdct_row_mmx(block1, block, table); -- block1 += 8; -- table += 32; -- block += 8; -- } --} -- --#endif /* HAVE_MMX_INLINE */ -- --#if HAVE_MMXEXT_INLINE -- --void ff_fdct_mmxext(int16_t *block) --{ -- DECLARE_ALIGNED(8, int64_t, align_tmp)[16]; -- int16_t *block1= (int16_t*)align_tmp; -- const int16_t *table= tab_frw_01234567; -- int i; -- -- fdct_col_mmx(block, block1, 0); -- fdct_col_mmx(block, block1, 4); -- -- for(i=8;i>0;i--) { -- fdct_row_mmxext(block1, block, table); -- block1 += 8; -- table += 32; -- block += 8; -- } --} -- --#endif /* HAVE_MMXEXT_INLINE */ -- --#if HAVE_SSE2_INLINE -- - void ff_fdct_sse2(int16_t *block) - { - DECLARE_ALIGNED(16, int64_t, align_tmp)[16]; -diff -Naur a/media/ffvpx/libavcodec/x86/fdctdsp_init.c b/media/ffvpx/libavcodec/x86/fdctdsp_init.c ---- a/media/ffvpx/libavcodec/x86/fdctdsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/fdctdsp_init.c 2023-04-06 12:49:40.257395051 +0200 -@@ -31,12 +31,6 @@ - - if (!high_bit_depth) { - if ((dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX)) { -- if (INLINE_MMX(cpu_flags)) -- c->fdct = ff_fdct_mmx; -- -- if (INLINE_MMXEXT(cpu_flags)) -- c->fdct = ff_fdct_mmxext; -- - if (INLINE_SSE2(cpu_flags)) - c->fdct = ff_fdct_sse2; - } -diff -Naur a/media/ffvpx/libavcodec/x86/fdct.h b/media/ffvpx/libavcodec/x86/fdct.h ---- a/media/ffvpx/libavcodec/x86/fdct.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/fdct.h 2023-04-06 12:49:40.257395051 +0200 -@@ -21,8 +21,6 @@ - - #include - --void ff_fdct_mmx(int16_t *block); --void ff_fdct_mmxext(int16_t *block); - void ff_fdct_sse2(int16_t *block); - - #endif /* AVCODEC_X86_FDCT_H */ -diff -Naur a/media/ffvpx/libavcodec/x86/fft.asm b/media/ffvpx/libavcodec/x86/fft.asm ---- a/media/ffvpx/libavcodec/x86/fft.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/fft.asm 2023-04-06 12:50:24.493176583 +0200 -@@ -1,5 +1,5 @@ - ;****************************************************************************** --;* FFT transform with SSE/3DNow optimizations -+;* FFT transform with SSE/AVX optimizations - ;* Copyright (c) 2008 Loren Merritt - ;* Copyright (c) 2011 Vitor Sessak - ;* -@@ -92,29 +92,6 @@ - - SECTION .text - --%macro T2_3DNOW 4 ; z0, z1, mem0, mem1 -- mova %1, %3 -- mova %2, %1 -- pfadd %1, %4 -- pfsub %2, %4 --%endmacro -- --%macro T4_3DNOW 6 ; z0, z1, z2, z3, tmp0, tmp1 -- mova %5, %3 -- pfsub %3, %4 -- pfadd %5, %4 ; {t6,t5} -- pxor %3, [ps_m1p1] ; {t8,t7} -- mova %6, %1 -- movd [r0+12], %3 -- punpckhdq %3, [r0+8] -- pfadd %1, %5 ; {r0,i0} -- pfsub %6, %5 ; {r2,i2} -- mova %4, %2 -- pfadd %2, %3 ; {r1,i1} -- pfsub %4, %3 ; {r3,i3} -- SWAP %3, %6 --%endmacro -- - ; in: %1 = {r0,i0,r2,i2,r4,i4,r6,i6} - ; %2 = {r1,i1,r3,i3,r5,i5,r7,i7} - ; %3, %4, %5 tmp -@@ -199,7 +176,7 @@ - vextractf128 %4 %+ H(%5), %3, 0 - vextractf128 %4(%5 + 1), %2, 1 - vextractf128 %4 %+ H(%5 + 1), %3, 1 --%elif cpuflag(sse) || cpuflag(3dnow) -+%elif cpuflag(sse) - mova %3, %2 - unpcklps %2, %1 - unpckhps %3, %1 -@@ -310,12 +287,6 @@ - %endif - %endmacro - --%macro PUNPCK 3 -- mova %3, %1 -- punpckldq %1, %2 -- punpckhdq %3, %2 --%endmacro -- - %define Z(x) [r0+mmsize*x] - %define Z2(x) [r0+mmsize*x] - %define ZH(x) [r0+mmsize*x+mmsize/2] -@@ -462,68 +433,6 @@ - ret - - --%macro FFT48_3DNOW 0 --align 16 --fft4 %+ SUFFIX: -- T2_3DNOW m0, m1, Z(0), Z(1) -- mova m2, Z(2) -- mova m3, Z(3) -- T4_3DNOW m0, m1, m2, m3, m4, m5 -- PUNPCK m0, m1, m4 -- PUNPCK m2, m3, m5 -- mova Z(0), m0 -- mova Z(1), m4 -- mova Z(2), m2 -- mova Z(3), m5 -- ret -- --align 16 --fft8 %+ SUFFIX: -- T2_3DNOW m0, m1, Z(0), Z(1) -- mova m2, Z(2) -- mova m3, Z(3) -- T4_3DNOW m0, m1, m2, m3, m4, m5 -- mova Z(0), m0 -- mova Z(2), m2 -- T2_3DNOW m4, m5, Z(4), Z(5) -- T2_3DNOW m6, m7, Z2(6), Z2(7) -- PSWAPD m0, m5 -- PSWAPD m2, m7 -- pxor m0, [ps_m1p1] -- pxor m2, [ps_m1p1] -- pfsub m5, m0 -- pfadd m7, m2 -- pfmul m5, [ps_root2] -- pfmul m7, [ps_root2] -- T4_3DNOW m1, m3, m5, m7, m0, m2 -- mova Z(5), m5 -- mova Z2(7), m7 -- mova m0, Z(0) -- mova m2, Z(2) -- T4_3DNOW m0, m2, m4, m6, m5, m7 -- PUNPCK m0, m1, m5 -- PUNPCK m2, m3, m7 -- mova Z(0), m0 -- mova Z(1), m5 -- mova Z(2), m2 -- mova Z(3), m7 -- PUNPCK m4, Z(5), m5 -- PUNPCK m6, Z2(7), m7 -- mova Z(4), m4 -- mova Z(5), m5 -- mova Z2(6), m6 -- mova Z2(7), m7 -- ret --%endmacro -- --%if ARCH_X86_32 --INIT_MMX 3dnowext --FFT48_3DNOW -- --INIT_MMX 3dnow --FFT48_3DNOW --%endif -- - %define Z(x) [zcq + o1q*(x&6) + mmsize*(x&1)] - %define Z2(x) [zcq + o3q + mmsize*(x&1)] - %define ZH(x) [zcq + o1q*(x&6) + mmsize*(x&1) + mmsize/2] -@@ -566,7 +475,7 @@ - mov r0, r1 - mov r1, r3 - FFT_DISPATCH _interleave %+ SUFFIX, r1 -- REP_RET -+ RET - - %endif - -@@ -575,7 +484,7 @@ - DECL_PASS pass_sse, PASS_BIG 1 - DECL_PASS pass_interleave_sse, PASS_BIG 0 - --%macro FFT_CALC_FUNC 0 -+INIT_XMM sse - cglobal fft_calc, 2,5,8 - mov r3d, [r0 + FFTContext.nbits] - PUSH r1 -@@ -592,36 +501,16 @@ - shl r2, cl - sub r4, r2 - .loop: --%if mmsize == 8 -- PSWAPD m0, [r4 + r2 + 4] -- mova [r4 + r2 + 4], m0 --%else - movaps xmm0, [r4 + r2] - movaps xmm1, xmm0 - unpcklps xmm0, [r4 + r2 + 16] - unpckhps xmm1, [r4 + r2 + 16] - movaps [r4 + r2], xmm0 - movaps [r4 + r2 + 16], xmm1 --%endif - add r2, mmsize*2 - jl .loop - .end: --%if cpuflag(3dnow) -- femms - RET --%else -- REP_RET --%endif --%endmacro -- --%if ARCH_X86_32 --INIT_MMX 3dnow --FFT_CALC_FUNC --INIT_MMX 3dnowext --FFT_CALC_FUNC --%endif --INIT_XMM sse --FFT_CALC_FUNC - - cglobal fft_permute, 2,7,1 - mov r4, [r0 + FFTContext.revtab] -@@ -654,9 +543,9 @@ - movaps [r1 + r2 + 16], xmm1 - add r2, 32 - jl .loopcopy -- REP_RET -+ RET - --%macro IMDCT_CALC_FUNC 0 -+INIT_XMM sse - cglobal imdct_calc, 3,5,3 - mov r3d, [r0 + FFTContext.mdctsize] - mov r4, [r0 + FFTContext.imdcthalf] -@@ -684,52 +573,17 @@ - neg r2 - mova m2, [ps_neg] - .loop: --%if mmsize == 8 -- PSWAPD m0, [r1 + r3] -- PSWAPD m1, [r0 + r2] -- pxor m0, m2 --%else - mova m0, [r1 + r3] - mova m1, [r0 + r2] - shufps m0, m0, 0x1b - shufps m1, m1, 0x1b - xorps m0, m2 --%endif - mova [r0 + r3], m1 - mova [r1 + r2], m0 - sub r3, mmsize - add r2, mmsize - jl .loop --%if cpuflag(3dnow) -- femms - RET --%else -- REP_RET --%endif --%endmacro -- --%if ARCH_X86_32 --INIT_MMX 3dnow --IMDCT_CALC_FUNC --INIT_MMX 3dnowext --IMDCT_CALC_FUNC --%endif -- --INIT_XMM sse --IMDCT_CALC_FUNC -- --%if ARCH_X86_32 --INIT_MMX 3dnow --%define mulps pfmul --%define addps pfadd --%define subps pfsub --%define unpcklps punpckldq --%define unpckhps punpckhdq --DECL_PASS pass_3dnow, PASS_SMALL 1, [wq], [wq+o1q] --DECL_PASS pass_interleave_3dnow, PASS_BIG 0 --%define pass_3dnowext pass_3dnow --%define pass_interleave_3dnowext pass_interleave_3dnow --%endif - - %ifdef PIC - %define SECTION_REL - $$ -@@ -785,14 +639,6 @@ - INIT_XMM sse - DECL_FFT 5 - DECL_FFT 5, _interleave --%if ARCH_X86_32 --INIT_MMX 3dnow --DECL_FFT 4 --DECL_FFT 4, _interleave --INIT_MMX 3dnowext --DECL_FFT 4 --DECL_FFT 4, _interleave --%endif - - INIT_XMM sse - %undef mulps -@@ -802,37 +648,6 @@ - %undef unpckhps - - %macro PREROTATER 5 ;-2*k, 2*k, input+n4, tcos+n8, tsin+n8 --%if mmsize == 8 ; j*2+2-n4, n4-2-j*2, input+n4, tcos+n8, tsin+n8 -- PSWAPD m0, [%3+%2*4] -- movq m2, [%3+%1*4-8] -- movq m3, m0 -- punpckldq m0, m2 -- punpckhdq m2, m3 -- movd m1, [%4+%1*2-4] ; tcos[j] -- movd m3, [%4+%2*2] ; tcos[n4-j-1] -- punpckldq m1, [%5+%1*2-4] ; tsin[j] -- punpckldq m3, [%5+%2*2] ; tsin[n4-j-1] -- -- mova m4, m0 -- PSWAPD m5, m1 -- pfmul m0, m1 -- pfmul m4, m5 -- mova m6, m2 -- PSWAPD m5, m3 -- pfmul m2, m3 -- pfmul m6, m5 --%if cpuflag(3dnowext) -- pfpnacc m0, m4 -- pfpnacc m2, m6 --%else -- SBUTTERFLY dq, 0, 4, 1 -- SBUTTERFLY dq, 2, 6, 3 -- pxor m4, m7 -- pxor m6, m7 -- pfadd m0, m4 -- pfadd m2, m6 --%endif --%else - movaps xmm0, [%3+%2*4] - movaps xmm1, [%3+%1*4-0x10] - movaps xmm2, xmm0 -@@ -853,29 +668,15 @@ - movaps xmm0, xmm1 - unpcklps xmm1, xmm2 - unpckhps xmm0, xmm2 --%endif - %endmacro - - %macro CMUL 6 ;j, xmm0, xmm1, 3, 4, 5 --%if cpuflag(sse) - mulps m6, %3, [%5+%1] - mulps m7, %2, [%5+%1] - mulps %2, %2, [%6+%1] - mulps %3, %3, [%6+%1] - subps %2, %2, m6 - addps %3, %3, m7 --%elif cpuflag(3dnow) -- mova m6, [%1+%2*2] -- mova %3, [%1+%2*2+8] -- mova %4, m6 -- mova m7, %3 -- pfmul m6, [%5+%2] -- pfmul %3, [%6+%2] -- pfmul %4, [%6+%2] -- pfmul m7, [%5+%2] -- pfsub %3, m6 -- pfadd %4, m7 --%endif - %endmacro - - %macro POSROTATESHUF 5 ;j, k, z+n8, tcos+n8, tsin+n8 -@@ -909,7 +710,7 @@ - sub %2, 0x20 - add %1, 0x20 - jl .post --%elif cpuflag(sse) -+%else - movaps xmm1, [%3+%1*2] - movaps xmm0, [%3+%1*2+0x10] - CMUL %1, xmm0, xmm1, %3, %4, %5 -@@ -931,24 +732,6 @@ - sub %2, 0x10 - add %1, 0x10 - jl .post --%elif cpuflag(3dnow) -- CMUL %3, %1, m0, m1, %4, %5 -- CMUL %3, %2, m2, m3, %4, %5 -- movd [%3+%1*2+ 0], m0 -- movd [%3+%2*2+12], m1 -- movd [%3+%2*2+ 0], m2 -- movd [%3+%1*2+12], m3 -- psrlq m0, 32 -- psrlq m1, 32 -- psrlq m2, 32 -- psrlq m3, 32 -- movd [%3+%1*2+ 8], m0 -- movd [%3+%2*2+ 4], m1 -- movd [%3+%2*2+ 8], m2 -- movd [%3+%1*2+ 4], m3 -- sub %2, 8 -- add %1, 8 -- jl .post - %endif - %endmacro - -@@ -981,39 +764,21 @@ - push rrevtab - %endif - --%if mmsize == 8 -- sub r3, 2 --%else - sub r3, 4 --%endif --%if ARCH_X86_64 || mmsize == 8 -+%if ARCH_X86_64 - xor r4, r4 - sub r4, r3 - %endif --%if notcpuflag(3dnowext) && mmsize == 8 -- movd m7, [ps_neg] --%endif - .pre: - %if ARCH_X86_64 == 0 - ;unspill --%if mmsize != 8 - xor r4, r4 - sub r4, r3 --%endif - mov rtcos, [esp+8] - mov rtsin, [esp+4] - %endif - - PREROTATER r4, r3, r2, rtcos, rtsin --%if mmsize == 8 -- mov r6, [esp] ; rrevtab = ptr+n8 -- movzx r5, word [rrevtab+r4-2] ; rrevtab[j] -- movzx r6, word [rrevtab+r3] ; rrevtab[n4-j-1] -- mova [r1+r5*8], m0 -- mova [r1+r6*8], m2 -- add r4, 2 -- sub r3, 2 --%else - %if ARCH_X86_64 - movzx r5, word [rrevtab+r4-4] - movzx r6, word [rrevtab+r4-2] -@@ -1036,7 +801,6 @@ - movhps [r1+r4*8], xmm1 - %endif - sub r3, 4 --%endif - jns .pre - - mov r5, r0 -@@ -1062,22 +826,11 @@ - %if ARCH_X86_64 == 0 - add esp, 12 - %endif --%if mmsize == 8 -- femms --%endif - RET - %endmacro - - DECL_IMDCT - --%if ARCH_X86_32 --INIT_MMX 3dnow --DECL_IMDCT -- --INIT_MMX 3dnowext --DECL_IMDCT --%endif -- - INIT_YMM avx - - %if HAVE_AVX_EXTERNAL -diff -Naur a/media/ffvpx/libavcodec/x86/fft.h b/media/ffvpx/libavcodec/x86/fft.h ---- a/media/ffvpx/libavcodec/x86/fft.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/fft.h 2023-04-06 12:49:40.257395051 +0200 -@@ -24,13 +24,7 @@ - void ff_fft_permute_sse(FFTContext *s, FFTComplex *z); - void ff_fft_calc_avx(FFTContext *s, FFTComplex *z); - void ff_fft_calc_sse(FFTContext *s, FFTComplex *z); --void ff_fft_calc_3dnow(FFTContext *s, FFTComplex *z); --void ff_fft_calc_3dnowext(FFTContext *s, FFTComplex *z); - --void ff_imdct_calc_3dnow(FFTContext *s, FFTSample *output, const FFTSample *input); --void ff_imdct_half_3dnow(FFTContext *s, FFTSample *output, const FFTSample *input); --void ff_imdct_calc_3dnowext(FFTContext *s, FFTSample *output, const FFTSample *input); --void ff_imdct_half_3dnowext(FFTContext *s, FFTSample *output, const FFTSample *input); - void ff_imdct_calc_sse(FFTContext *s, FFTSample *output, const FFTSample *input); - void ff_imdct_half_sse(FFTContext *s, FFTSample *output, const FFTSample *input); - void ff_imdct_half_avx(FFTContext *s, FFTSample *output, const FFTSample *input); -diff -Naur a/media/ffvpx/libavcodec/x86/fft_init.c b/media/ffvpx/libavcodec/x86/fft_init.c ---- a/media/ffvpx/libavcodec/x86/fft_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/fft_init.c 2023-04-06 12:49:40.257395051 +0200 -@@ -31,20 +31,6 @@ - if (s->nbits > 16) - return; - --#if ARCH_X86_32 -- if (EXTERNAL_AMD3DNOW(cpu_flags)) { -- s->imdct_calc = ff_imdct_calc_3dnow; -- s->imdct_half = ff_imdct_half_3dnow; -- s->fft_calc = ff_fft_calc_3dnow; -- } -- -- if (EXTERNAL_AMD3DNOWEXT(cpu_flags)) { -- s->imdct_calc = ff_imdct_calc_3dnowext; -- s->imdct_half = ff_imdct_half_3dnowext; -- s->fft_calc = ff_fft_calc_3dnowext; -- } --#endif /* ARCH_X86_32 */ -- - if (EXTERNAL_SSE(cpu_flags)) { - s->imdct_calc = ff_imdct_calc_sse; - s->imdct_half = ff_imdct_half_sse; -diff -Naur a/media/ffvpx/libavcodec/x86/flacdsp.asm b/media/ffvpx/libavcodec/x86/flacdsp.asm ---- a/media/ffvpx/libavcodec/x86/flacdsp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/flacdsp.asm 2023-04-06 12:50:24.493176583 +0200 -@@ -23,6 +23,10 @@ - - %include "libavutil/x86/x86util.asm" - -+SECTION_RODATA -+ -+vector: db 0,1,4,5,8,9,12,13,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,4,5,8,9,12,13, -+ - SECTION .text - - %macro PMACSDQL 5 -@@ -75,7 +79,7 @@ - movd [decodedq+4], m1 - jg .loop_sample - .ret: -- REP_RET -+ RET - %endmacro - - %if HAVE_XOP_EXTERNAL -@@ -89,6 +93,9 @@ - ;---------------------------------------------------------------------------------- - %macro FLAC_DECORRELATE_16 3-4 - cglobal flac_decorrelate_%1_16, 2, 4, 4, out, in0, in1, len -+%ifidn %1, indep2 -+ VBROADCASTI128 m2, [vector] -+%endif - %if ARCH_X86_32 - mov lend, lenm - %endif -@@ -112,15 +119,21 @@ - %endif - %ifnidn %1, indep2 - p%4d m2, m0, m1 -+ packssdw m%2, m%2 -+ packssdw m%3, m%3 -+ punpcklwd m%2, m%3 -+ psllw m%2, m3 -+%else -+ pslld m%2, m3 -+ pslld m%3, m3 -+ pshufb m%2, m%2, m2 -+ pshufb m%3, m%3, m2 -+ punpcklwd m%2, m%3 - %endif -- packssdw m%2, m%2 -- packssdw m%3, m%3 -- punpcklwd m%2, m%3 -- psllw m%2, m3 - mova [outq + lenq], m%2 - add lenq, 16 - jl .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse2 -@@ -164,7 +177,7 @@ - add outq, mmsize*2 - sub lend, mmsize/4 - jg .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse2 -@@ -289,10 +302,10 @@ - add outq, mmsize*REPCOUNT - sub lend, mmsize/4 - jg .loop -- REP_RET -+ RET - %endmacro - --INIT_XMM sse2 -+INIT_XMM ssse3 - FLAC_DECORRELATE_16 indep2, 0, 1 ; Reuse stereo 16bits macro - FLAC_DECORRELATE_INDEP 32, 2, 3, d - FLAC_DECORRELATE_INDEP 16, 4, 3, w -diff -Naur a/media/ffvpx/libavcodec/x86/flacdsp_init.c b/media/ffvpx/libavcodec/x86/flacdsp_init.c ---- a/media/ffvpx/libavcodec/x86/flacdsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/flacdsp_init.c 2023-04-06 12:50:06.975471215 +0200 -@@ -18,6 +18,7 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "libavutil/attributes.h" - #include "libavcodec/flacdsp.h" - #include "libavutil/x86/cpu.h" - #include "config.h" -@@ -27,15 +28,15 @@ - void ff_flac_lpc_32_xop(int32_t *samples, const int coeffs[32], int order, - int qlevel, int len); - --void ff_flac_enc_lpc_16_sse4(int32_t *, const int32_t *, int, int, const int32_t *,int); -- - #define DECORRELATE_FUNCS(fmt, opt) \ - void ff_flac_decorrelate_ls_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ - int len, int shift); \ - void ff_flac_decorrelate_rs_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ - int len, int shift); \ - void ff_flac_decorrelate_ms_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ -- int len, int shift); \ -+ int len, int shift) -+ -+#define DECORRELATE_IFUNCS(fmt, opt) \ - void ff_flac_decorrelate_indep2_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ - int len, int shift); \ - void ff_flac_decorrelate_indep4_##fmt##_##opt(uint8_t **out, int32_t **in, int channels, \ -@@ -49,39 +50,46 @@ - DECORRELATE_FUNCS(16, avx); - DECORRELATE_FUNCS(32, sse2); - DECORRELATE_FUNCS(32, avx); -+DECORRELATE_IFUNCS(16, ssse3); -+DECORRELATE_IFUNCS(16, avx); -+DECORRELATE_IFUNCS(32, ssse3); -+DECORRELATE_IFUNCS(32, avx); - --av_cold void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, -- int bps) -+av_cold void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels) - { - #if HAVE_X86ASM - int cpu_flags = av_get_cpu_flags(); - --#if CONFIG_FLAC_DECODER - if (EXTERNAL_SSE2(cpu_flags)) { - if (fmt == AV_SAMPLE_FMT_S16) { -+ c->decorrelate[1] = ff_flac_decorrelate_ls_16_sse2; -+ c->decorrelate[2] = ff_flac_decorrelate_rs_16_sse2; -+ c->decorrelate[3] = ff_flac_decorrelate_ms_16_sse2; -+ } else if (fmt == AV_SAMPLE_FMT_S32) { -+ c->decorrelate[1] = ff_flac_decorrelate_ls_32_sse2; -+ c->decorrelate[2] = ff_flac_decorrelate_rs_32_sse2; -+ c->decorrelate[3] = ff_flac_decorrelate_ms_32_sse2; -+ } -+ } -+ if (EXTERNAL_SSSE3(cpu_flags)) { -+ if (fmt == AV_SAMPLE_FMT_S16) { - if (channels == 2) -- c->decorrelate[0] = ff_flac_decorrelate_indep2_16_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep2_16_ssse3; - else if (channels == 4) -- c->decorrelate[0] = ff_flac_decorrelate_indep4_16_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep4_16_ssse3; - else if (channels == 6) -- c->decorrelate[0] = ff_flac_decorrelate_indep6_16_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep6_16_ssse3; - else if (ARCH_X86_64 && channels == 8) -- c->decorrelate[0] = ff_flac_decorrelate_indep8_16_sse2; -- c->decorrelate[1] = ff_flac_decorrelate_ls_16_sse2; -- c->decorrelate[2] = ff_flac_decorrelate_rs_16_sse2; -- c->decorrelate[3] = ff_flac_decorrelate_ms_16_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep8_16_ssse3; - } else if (fmt == AV_SAMPLE_FMT_S32) { - if (channels == 2) -- c->decorrelate[0] = ff_flac_decorrelate_indep2_32_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep2_32_ssse3; - else if (channels == 4) -- c->decorrelate[0] = ff_flac_decorrelate_indep4_32_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep4_32_ssse3; - else if (channels == 6) -- c->decorrelate[0] = ff_flac_decorrelate_indep6_32_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep6_32_ssse3; - else if (ARCH_X86_64 && channels == 8) -- c->decorrelate[0] = ff_flac_decorrelate_indep8_32_sse2; -- c->decorrelate[1] = ff_flac_decorrelate_ls_32_sse2; -- c->decorrelate[2] = ff_flac_decorrelate_rs_32_sse2; -- c->decorrelate[3] = ff_flac_decorrelate_ms_32_sse2; -+ c->decorrelate[0] = ff_flac_decorrelate_indep8_32_ssse3; - } - } - if (EXTERNAL_SSE4(cpu_flags)) { -@@ -103,13 +111,5 @@ - if (EXTERNAL_XOP(cpu_flags)) { - c->lpc32 = ff_flac_lpc_32_xop; - } --#endif -- --#if CONFIG_FLAC_ENCODER -- if (EXTERNAL_SSE4(cpu_flags)) { -- if (CONFIG_GPL) -- c->lpc16_encode = ff_flac_enc_lpc_16_sse4; -- } --#endif - #endif /* HAVE_X86ASM */ - } -diff -Naur a/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm b/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm ---- a/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm 2023-04-06 12:50:24.493176583 +0200 -@@ -327,19 +327,14 @@ - lea r0, [r0+r1*2] - dec r2d - jg .loop -- REP_RET -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_predict_8x8_dc_10(pixel *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - %macro MOV8 2-3 - ; sort of a hack, but it works --%if mmsize==8 -- movq [%1+0], %2 -- movq [%1+8], %3 --%else - movdqa [%1], %2 --%endif - %endmacro - - %macro PRED8x8_DC 1 -@@ -348,17 +343,9 @@ - pxor m4, m4 - movq m0, [r0+0] - movq m1, [r0+8] --%if mmsize==16 - punpcklwd m0, m1 - movhlps m1, m0 - paddw m0, m1 --%else -- pshufw m2, m0, 00001110b -- pshufw m3, m1, 00001110b -- paddw m0, m2 -- paddw m1, m3 -- punpcklwd m0, m1 --%endif - %1 m2, m0, 00001110b - paddw m0, m2 - -@@ -389,17 +376,10 @@ - paddw m0, m3 - psrlw m0, 2 - pavgw m0, m4 ; s0+s2, s1, s3, s1+s3 --%if mmsize==16 - punpcklwd m0, m0 - pshufd m3, m0, 11111010b - punpckldq m0, m0 - SWAP 0,1 --%else -- pshufw m1, m0, 0x00 -- pshufw m2, m0, 0x55 -- pshufw m3, m0, 0xaa -- pshufw m4, m0, 0xff --%endif - MOV8 r0+r1*1, m1, m2 - MOV8 r0+r1*2, m1, m2 - MOV8 r0+r5*1, m1, m2 -@@ -411,8 +391,6 @@ - RET - %endmacro - --INIT_MMX mmxext --PRED8x8_DC pshufw - INIT_XMM sse2 - PRED8x8_DC pshuflw - -@@ -503,14 +481,14 @@ - add r0, r1 - dec r2d - jg .loop -- REP_RET -+ RET - - - ;----------------------------------------------------------------------------- - ; void ff_pred8x8l_128_dc_10(pixel *src, int has_topleft, int has_topright, - ; ptrdiff_t stride) - ;----------------------------------------------------------------------------- --%macro PRED8x8L_128_DC 0 -+INIT_XMM sse2 - cglobal pred8x8l_128_dc_10, 4, 4 - mova m0, [pw_512] ; (1<<(BIT_DEPTH-1)) - lea r1, [r3*3] -@@ -524,12 +502,6 @@ - MOV8 r2+r3*2, m0, m0 - MOV8 r2+r1*1, m0, m0 - RET --%endmacro -- --INIT_MMX mmxext --PRED8x8L_128_DC --INIT_XMM sse2 --PRED8x8L_128_DC - - ;----------------------------------------------------------------------------- - ; void ff_pred8x8l_top_dc_10(pixel *src, int has_topleft, int has_topright, -@@ -1008,40 +980,26 @@ - %macro MOV16 3-5 - mova [%1+ 0], %2 - mova [%1+mmsize], %3 --%if mmsize==8 -- mova [%1+ 16], %4 -- mova [%1+ 24], %5 --%endif - %endmacro - --%macro PRED16x16_VERTICAL 0 -+INIT_XMM sse2 - cglobal pred16x16_vertical_10, 2, 3 - sub r0, r1 - mov r2d, 8 - mova m0, [r0+ 0] - mova m1, [r0+mmsize] --%if mmsize==8 -- mova m2, [r0+16] -- mova m3, [r0+24] --%endif - .loop: - MOV16 r0+r1*1, m0, m1, m2, m3 - MOV16 r0+r1*2, m0, m1, m2, m3 - lea r0, [r0+r1*2] - dec r2d - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PRED16x16_VERTICAL --INIT_XMM sse2 --PRED16x16_VERTICAL -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred16x16_horizontal_10(pixel *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- --%macro PRED16x16_HORIZONTAL 0 -+INIT_XMM sse2 - cglobal pred16x16_horizontal_10, 2, 3 - mov r2d, 8 - .vloop: -@@ -1054,27 +1012,17 @@ - lea r0, [r0+r1*2] - dec r2d - jg .vloop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PRED16x16_HORIZONTAL --INIT_XMM sse2 --PRED16x16_HORIZONTAL -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred16x16_dc_10(pixel *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- --%macro PRED16x16_DC 0 -+INIT_XMM sse2 - cglobal pred16x16_dc_10, 2, 6 - mov r5, r0 - sub r0, r1 - mova m0, [r0+0] - paddw m0, [r0+mmsize] --%if mmsize==8 -- paddw m0, [r0+16] -- paddw m0, [r0+24] --%endif - HADDW m0, m2 - - lea r0, [r0+r1-2] -@@ -1100,26 +1048,16 @@ - lea r5, [r5+r1*2] - dec r3d - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PRED16x16_DC --INIT_XMM sse2 --PRED16x16_DC -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred16x16_top_dc_10(pixel *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- --%macro PRED16x16_TOP_DC 0 -+INIT_XMM sse2 - cglobal pred16x16_top_dc_10, 2, 3 - sub r0, r1 - mova m0, [r0+0] - paddw m0, [r0+mmsize] --%if mmsize==8 -- paddw m0, [r0+16] -- paddw m0, [r0+24] --%endif - HADDW m0, m2 - - SPLATW m0, m0 -@@ -1132,18 +1070,12 @@ - lea r0, [r0+r1*2] - dec r2d - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PRED16x16_TOP_DC --INIT_XMM sse2 --PRED16x16_TOP_DC -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred16x16_left_dc_10(pixel *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- --%macro PRED16x16_LEFT_DC 0 -+INIT_XMM sse2 - cglobal pred16x16_left_dc_10, 2, 6 - mov r5, r0 - -@@ -1169,18 +1101,12 @@ - lea r5, [r5+r1*2] - dec r3d - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PRED16x16_LEFT_DC --INIT_XMM sse2 --PRED16x16_LEFT_DC -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred16x16_128_dc_10(pixel *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- --%macro PRED16x16_128_DC 0 -+INIT_XMM sse2 - cglobal pred16x16_128_dc_10, 2,3 - mova m0, [pw_512] - mov r2d, 8 -@@ -1190,10 +1116,4 @@ - lea r0, [r0+r1*2] - dec r2d - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PRED16x16_128_DC --INIT_XMM sse2 --PRED16x16_128_DC -+ RET -diff -Naur a/media/ffvpx/libavcodec/x86/h264_intrapred.asm b/media/ffvpx/libavcodec/x86/h264_intrapred.asm ---- a/media/ffvpx/libavcodec/x86/h264_intrapred.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/h264_intrapred.asm 2023-04-06 12:50:24.493176583 +0200 -@@ -48,22 +48,6 @@ - ; void ff_pred16x16_vertical_8(uint8_t *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --INIT_MMX mmx --cglobal pred16x16_vertical_8, 2,3 -- sub r0, r1 -- mov r2, 8 -- movq mm0, [r0+0] -- movq mm1, [r0+8] --.loop: -- movq [r0+r1*1+0], mm0 -- movq [r0+r1*1+8], mm1 -- movq [r0+r1*2+0], mm0 -- movq [r0+r1*2+8], mm1 -- lea r0, [r0+r1*2] -- dec r2 -- jg .loop -- REP_RET -- - INIT_XMM sse - cglobal pred16x16_vertical_8, 2,3 - sub r0, r1 -@@ -78,7 +62,7 @@ - lea r0, [r0+r1*2] - dec r2 - jg .loop -- REP_RET -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred16x16_horizontal_8(uint8_t *src, ptrdiff_t stride) -@@ -111,11 +95,9 @@ - lea r0, [r0+r1*2] - dec r2 - jg .loop -- REP_RET -+ RET - %endmacro - --INIT_MMX mmx --PRED16x16_H - INIT_MMX mmxext - PRED16x16_H - INIT_XMM ssse3 -@@ -154,14 +136,6 @@ - %endif - SPLATB_REG m0, r2, m1 - --%if mmsize==8 -- mov r3d, 8 --.loop: -- mova [r4+r1*0+0], m0 -- mova [r4+r1*0+8], m0 -- mova [r4+r1*1+0], m0 -- mova [r4+r1*1+8], m0 --%else - mov r3d, 4 - .loop: - mova [r4+r1*0], m0 -@@ -169,15 +143,12 @@ - lea r4, [r4+r1*2] - mova [r4+r1*0], m0 - mova [r4+r1*1], m0 --%endif - lea r4, [r4+r1*2] - dec r3d - jg .loop -- REP_RET -+ RET - %endmacro - --INIT_MMX mmxext --PRED16x16_DC - INIT_XMM sse2 - PRED16x16_DC - INIT_XMM ssse3 -@@ -187,47 +158,6 @@ - ; void ff_pred16x16_tm_vp8_8(uint8_t *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --%macro PRED16x16_TM 0 --cglobal pred16x16_tm_vp8_8, 2,5 -- sub r0, r1 -- pxor mm7, mm7 -- movq mm0, [r0+0] -- movq mm2, [r0+8] -- movq mm1, mm0 -- movq mm3, mm2 -- punpcklbw mm0, mm7 -- punpckhbw mm1, mm7 -- punpcklbw mm2, mm7 -- punpckhbw mm3, mm7 -- movzx r3d, byte [r0-1] -- mov r4d, 16 --.loop: -- movzx r2d, byte [r0+r1-1] -- sub r2d, r3d -- movd mm4, r2d -- SPLATW mm4, mm4, 0 -- movq mm5, mm4 -- movq mm6, mm4 -- movq mm7, mm4 -- paddw mm4, mm0 -- paddw mm5, mm1 -- paddw mm6, mm2 -- paddw mm7, mm3 -- packuswb mm4, mm5 -- packuswb mm6, mm7 -- movq [r0+r1+0], mm4 -- movq [r0+r1+8], mm6 -- add r0, r1 -- dec r4d -- jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmx --PRED16x16_TM --INIT_MMX mmxext --PRED16x16_TM -- - INIT_XMM sse2 - cglobal pred16x16_tm_vp8_8, 2,6,6 - sub r0, r1 -@@ -262,7 +192,7 @@ - lea r0, [r0+r1*2] - dec r5d - jg .loop -- REP_RET -+ RET - - %if HAVE_AVX2_EXTERNAL - INIT_YMM avx2 -@@ -298,7 +228,7 @@ - lea dstq, [dstq+strideq*4] - dec iterationd - jg .loop -- REP_RET -+ RET - %endif - - ;----------------------------------------------------------------------------- -@@ -311,22 +241,6 @@ - neg r1 ; -stride - - movh m0, [r0+r1 -1] --%if mmsize == 8 -- pxor m4, m4 -- movh m1, [r0+r1 +3 ] -- movh m2, [r0+r1 +8 ] -- movh m3, [r0+r1 +12] -- punpcklbw m0, m4 -- punpcklbw m1, m4 -- punpcklbw m2, m4 -- punpcklbw m3, m4 -- pmullw m0, [pw_m8tom1 ] -- pmullw m1, [pw_m8tom1+8] -- pmullw m2, [pw_1to8 ] -- pmullw m3, [pw_1to8 +8] -- paddw m0, m2 -- paddw m1, m3 --%else ; mmsize == 16 - %if cpuflag(ssse3) - movhps m0, [r0+r1 +8] - pmaddubsw m0, [plane_shuf] ; H coefficients -@@ -340,21 +254,10 @@ - paddw m0, m1 - %endif - movhlps m1, m0 --%endif - paddw m0, m1 --%if cpuflag(mmxext) - PSHUFLW m1, m0, 0xE --%elif cpuflag(mmx) -- mova m1, m0 -- psrlq m1, 32 --%endif - paddw m0, m1 --%if cpuflag(mmxext) - PSHUFLW m1, m0, 0x1 --%elif cpuflag(mmx) -- mova m1, m0 -- psrlq m1, 16 --%endif - paddw m0, m1 ; sum of H coefficients - - lea r4, [r0+r2*8-1] -@@ -496,24 +399,10 @@ - SWAP 0, 1 - %endif - mova m2, m0 --%if mmsize == 8 -- mova m5, m0 --%endif - pmullw m0, [pw_0to7] ; 0*H, 1*H, ..., 7*H (words) --%if mmsize == 16 - psllw m2, 3 --%else -- psllw m5, 3 -- psllw m2, 2 -- mova m6, m5 -- paddw m6, m2 --%endif - paddw m0, m3 ; a + {0,1,2,3,4,5,6,7}*H - paddw m2, m0 ; a + {8,9,10,11,12,13,14,15}*H --%if mmsize == 8 -- paddw m5, m0 ; a + {8,9,10,11}*H -- paddw m6, m0 ; a + {12,13,14,15}*H --%endif - - mov r4, 8 - .loop: -@@ -523,20 +412,8 @@ - psraw m4, 5 - packuswb m3, m4 - mova [r0], m3 --%if mmsize == 8 -- mova m3, m5 ; b[8..11] -- mova m4, m6 ; b[12..15] -- psraw m3, 5 -- psraw m4, 5 -- packuswb m3, m4 -- mova [r0+8], m3 --%endif - paddw m0, m1 - paddw m2, m1 --%if mmsize == 8 -- paddw m5, m1 -- paddw m6, m1 --%endif - - mova m3, m0 ; b[0..7] - mova m4, m2 ; b[8..15] -@@ -544,35 +421,15 @@ - psraw m4, 5 - packuswb m3, m4 - mova [r0+r2], m3 --%if mmsize == 8 -- mova m3, m5 ; b[8..11] -- mova m4, m6 ; b[12..15] -- psraw m3, 5 -- psraw m4, 5 -- packuswb m3, m4 -- mova [r0+r2+8], m3 --%endif - paddw m0, m1 - paddw m2, m1 --%if mmsize == 8 -- paddw m5, m1 -- paddw m6, m1 --%endif - - lea r0, [r0+r2*2] - dec r4 - jg .loop -- REP_RET -+ RET - %endmacro - --INIT_MMX mmx --H264_PRED16x16_PLANE h264 --H264_PRED16x16_PLANE rv40 --H264_PRED16x16_PLANE svq3 --INIT_MMX mmxext --H264_PRED16x16_PLANE h264 --H264_PRED16x16_PLANE rv40 --H264_PRED16x16_PLANE svq3 - INIT_XMM sse2 - H264_PRED16x16_PLANE h264 - H264_PRED16x16_PLANE rv40 -@@ -592,14 +449,6 @@ - neg r1 ; -stride - - movd m0, [r0+r1 -1] --%if mmsize == 8 -- pxor m2, m2 -- movh m1, [r0+r1 +4 ] -- punpcklbw m0, m2 -- punpcklbw m1, m2 -- pmullw m0, [pw_m4to4] -- pmullw m1, [pw_m4to4+8] --%else ; mmsize == 16 - %if cpuflag(ssse3) - movhps m0, [r0+r1 +4] ; this reads 4 bytes more than necessary - pmaddubsw m0, [plane8_shuf] ; H coefficients -@@ -611,25 +460,14 @@ - pmullw m0, [pw_m4to4] - %endif - movhlps m1, m0 --%endif - paddw m0, m1 - - %if notcpuflag(ssse3) --%if cpuflag(mmxext) - PSHUFLW m1, m0, 0xE --%elif cpuflag(mmx) -- mova m1, m0 -- psrlq m1, 32 --%endif - paddw m0, m1 - %endif ; !ssse3 - --%if cpuflag(mmxext) - PSHUFLW m1, m0, 0x1 --%elif cpuflag(mmx) -- mova m1, m0 -- psrlq m1, 16 --%endif - paddw m0, m1 ; sum of H coefficients - - lea r4, [r0+r2*4-1] -@@ -699,20 +537,12 @@ - SPLATW m0, m0, 0 ; H - SPLATW m1, m1, 0 ; V - SPLATW m3, m3, 0 ; a --%if mmsize == 8 -- mova m2, m0 --%endif - pmullw m0, [pw_0to7] ; 0*H, 1*H, ..., 7*H (words) - paddw m0, m3 ; a + {0,1,2,3,4,5,6,7}*H --%if mmsize == 8 -- psllw m2, 2 -- paddw m2, m0 ; a + {4,5,6,7}*H --%endif - - mov r4, 4 - ALIGN 16 - .loop: --%if mmsize == 16 - mova m3, m0 ; b[0..7] - paddw m0, m1 - psraw m3, 5 -@@ -722,35 +552,13 @@ - packuswb m3, m4 - movh [r0], m3 - movhps [r0+r2], m3 --%else ; mmsize == 8 -- mova m3, m0 ; b[0..3] -- mova m4, m2 ; b[4..7] -- paddw m0, m1 -- paddw m2, m1 -- psraw m3, 5 -- psraw m4, 5 -- mova m5, m0 ; V+b[0..3] -- mova m6, m2 ; V+b[4..7] -- paddw m0, m1 -- paddw m2, m1 -- psraw m5, 5 -- psraw m6, 5 -- packuswb m3, m4 -- packuswb m5, m6 -- mova [r0], m3 -- mova [r0+r2], m5 --%endif - - lea r0, [r0+r2*2] - dec r4 - jg .loop -- REP_RET -+ RET - %endmacro - --INIT_MMX mmx --H264_PRED8x8_PLANE --INIT_MMX mmxext --H264_PRED8x8_PLANE - INIT_XMM sse2 - H264_PRED8x8_PLANE - INIT_XMM ssse3 -@@ -791,11 +599,9 @@ - lea r0, [r0+r1*2] - dec r2 - jg .loop -- REP_RET -+ RET - %endmacro - --INIT_MMX mmx --PRED8x8_H - INIT_MMX mmxext - PRED8x8_H - INIT_MMX ssse3 -@@ -931,52 +737,12 @@ - lea r4, [r4+r1*2] - dec r3d - jg .loop -- REP_RET -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_pred8x8_tm_vp8_8(uint8_t *src, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --%macro PRED8x8_TM 0 --cglobal pred8x8_tm_vp8_8, 2,6 -- sub r0, r1 -- pxor mm7, mm7 -- movq mm0, [r0] -- movq mm1, mm0 -- punpcklbw mm0, mm7 -- punpckhbw mm1, mm7 -- movzx r4d, byte [r0-1] -- mov r5d, 4 --.loop: -- movzx r2d, byte [r0+r1*1-1] -- movzx r3d, byte [r0+r1*2-1] -- sub r2d, r4d -- sub r3d, r4d -- movd mm2, r2d -- movd mm4, r3d -- SPLATW mm2, mm2, 0 -- SPLATW mm4, mm4, 0 -- movq mm3, mm2 -- movq mm5, mm4 -- paddw mm2, mm0 -- paddw mm3, mm1 -- paddw mm4, mm0 -- paddw mm5, mm1 -- packuswb mm2, mm3 -- packuswb mm4, mm5 -- movq [r0+r1*1], mm2 -- movq [r0+r1*2], mm4 -- lea r0, [r0+r1*2] -- dec r5d -- jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmx --PRED8x8_TM --INIT_MMX mmxext --PRED8x8_TM -- - INIT_XMM sse2 - cglobal pred8x8_tm_vp8_8, 2,6,4 - sub r0, r1 -@@ -1004,7 +770,7 @@ - lea r0, [r0+r1*2] - dec r5d - jg .loop -- REP_RET -+ RET - - INIT_XMM ssse3 - cglobal pred8x8_tm_vp8_8, 2,3,6 -@@ -1031,7 +797,7 @@ - lea r0, [r0+r1*2] - dec r2d - jg .loop -- REP_RET -+ RET - - ; dest, left, right, src, tmp - ; output: %1 = (t[n-1] + t[n]*2 + t[n+1] + 2) >> 2 -@@ -1333,114 +1099,6 @@ - ; int has_topright, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --INIT_MMX mmxext --cglobal pred8x8l_down_left_8, 4,5 -- sub r0, r3 -- movq mm0, [r0-8] -- movq mm3, [r0] -- movq mm1, [r0+8] -- movq mm2, mm3 -- movq mm4, mm3 -- PALIGNR mm2, mm0, 7, mm0 -- PALIGNR mm1, mm4, 1, mm4 -- test r1d, r1d -- jz .fix_lt_2 -- test r2d, r2d -- jz .fix_tr_1 -- jmp .do_top --.fix_lt_2: -- movq mm5, mm3 -- pxor mm5, mm2 -- psllq mm5, 56 -- psrlq mm5, 56 -- pxor mm2, mm5 -- test r2d, r2d -- jnz .do_top --.fix_tr_1: -- movq mm5, mm3 -- pxor mm5, mm1 -- psrlq mm5, 56 -- psllq mm5, 56 -- pxor mm1, mm5 -- jmp .do_top --.fix_tr_2: -- punpckhbw mm3, mm3 -- pshufw mm1, mm3, 0xFF -- jmp .do_topright --.do_top: -- PRED4x4_LOWPASS mm4, mm2, mm1, mm3, mm5 -- movq mm7, mm4 -- test r2d, r2d -- jz .fix_tr_2 -- movq mm0, [r0+8] -- movq mm5, mm0 -- movq mm2, mm0 -- movq mm4, mm0 -- psrlq mm5, 56 -- PALIGNR mm2, mm3, 7, mm3 -- PALIGNR mm5, mm4, 1, mm4 -- PRED4x4_LOWPASS mm1, mm2, mm5, mm0, mm4 --.do_topright: -- lea r1, [r0+r3*2] -- movq mm6, mm1 -- psrlq mm1, 56 -- movq mm4, mm1 -- lea r2, [r1+r3*2] -- movq mm2, mm6 -- PALIGNR mm2, mm7, 1, mm0 -- movq mm3, mm6 -- PALIGNR mm3, mm7, 7, mm0 -- PALIGNR mm4, mm6, 1, mm0 -- movq mm5, mm7 -- movq mm1, mm7 -- movq mm7, mm6 -- lea r4, [r2+r3*2] -- psllq mm1, 8 -- PRED4x4_LOWPASS mm0, mm1, mm2, mm5, mm6 -- PRED4x4_LOWPASS mm1, mm3, mm4, mm7, mm6 -- movq [r4+r3*2], mm1 -- movq mm2, mm0 -- psllq mm1, 8 -- psrlq mm2, 56 -- psllq mm0, 8 -- por mm1, mm2 -- movq [r4+r3*1], mm1 -- movq mm2, mm0 -- psllq mm1, 8 -- psrlq mm2, 56 -- psllq mm0, 8 -- por mm1, mm2 -- movq [r2+r3*2], mm1 -- movq mm2, mm0 -- psllq mm1, 8 -- psrlq mm2, 56 -- psllq mm0, 8 -- por mm1, mm2 -- movq [r2+r3*1], mm1 -- movq mm2, mm0 -- psllq mm1, 8 -- psrlq mm2, 56 -- psllq mm0, 8 -- por mm1, mm2 -- movq [r1+r3*2], mm1 -- movq mm2, mm0 -- psllq mm1, 8 -- psrlq mm2, 56 -- psllq mm0, 8 -- por mm1, mm2 -- movq [r1+r3*1], mm1 -- movq mm2, mm0 -- psllq mm1, 8 -- psrlq mm2, 56 -- psllq mm0, 8 -- por mm1, mm2 -- movq [r0+r3*2], mm1 -- psllq mm1, 8 -- psrlq mm0, 56 -- por mm1, mm0 -- movq [r0+r3*1], mm1 -- RET -- - %macro PRED8x8L_DOWN_LEFT 0 - cglobal pred8x8l_down_left_8, 4,4 - sub r0, r3 -@@ -1530,142 +1188,10 @@ - PRED8x8L_DOWN_LEFT - - ;----------------------------------------------------------------------------- --; void ff_pred8x8l_down_right_8_mmxext(uint8_t *src, int has_topleft, --; int has_topright, ptrdiff_t stride) -+; void ff_pred8x8l_down_right_8(uint8_t *src, int has_topleft, -+; int has_topright, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --INIT_MMX mmxext --cglobal pred8x8l_down_right_8, 4,5 -- sub r0, r3 -- lea r4, [r0+r3*2] -- movq mm0, [r0+r3*1-8] -- punpckhbw mm0, [r0+r3*0-8] -- movq mm1, [r4+r3*1-8] -- punpckhbw mm1, [r0+r3*2-8] -- mov r4, r0 -- punpckhwd mm1, mm0 -- lea r0, [r0+r3*4] -- movq mm2, [r0+r3*1-8] -- punpckhbw mm2, [r0+r3*0-8] -- lea r0, [r0+r3*2] -- movq mm3, [r0+r3*1-8] -- punpckhbw mm3, [r0+r3*0-8] -- punpckhwd mm3, mm2 -- punpckhdq mm3, mm1 -- lea r0, [r0+r3*2] -- movq mm0, [r0+r3*0-8] -- movq mm1, [r4] -- mov r0, r4 -- movq mm4, mm3 -- movq mm2, mm3 -- PALIGNR mm4, mm0, 7, mm0 -- PALIGNR mm1, mm2, 1, mm2 -- test r1d, r1d ; top_left -- jz .fix_lt_1 --.do_left: -- movq mm0, mm4 -- PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5 -- movq mm4, mm0 -- movq mm7, mm2 -- movq mm6, mm2 -- PRED4x4_LOWPASS mm1, mm3, mm0, mm4, mm5 -- psllq mm1, 56 -- PALIGNR mm7, mm1, 7, mm3 -- movq mm0, [r0-8] -- movq mm3, [r0] -- movq mm1, [r0+8] -- movq mm2, mm3 -- movq mm4, mm3 -- PALIGNR mm2, mm0, 7, mm0 -- PALIGNR mm1, mm4, 1, mm4 -- test r1d, r1d ; top_left -- jz .fix_lt_2 -- test r2d, r2d ; top_right -- jz .fix_tr_1 --.do_top: -- PRED4x4_LOWPASS mm4, mm2, mm1, mm3, mm5 -- movq mm5, mm4 -- jmp .body --.fix_lt_1: -- movq mm5, mm3 -- pxor mm5, mm4 -- psrlq mm5, 56 -- psllq mm5, 48 -- pxor mm1, mm5 -- jmp .do_left --.fix_lt_2: -- movq mm5, mm3 -- pxor mm5, mm2 -- psllq mm5, 56 -- psrlq mm5, 56 -- pxor mm2, mm5 -- test r2d, r2d ; top_right -- jnz .do_top --.fix_tr_1: -- movq mm5, mm3 -- pxor mm5, mm1 -- psrlq mm5, 56 -- psllq mm5, 56 -- pxor mm1, mm5 -- jmp .do_top --.body: -- lea r1, [r0+r3*2] -- movq mm1, mm7 -- movq mm7, mm5 -- movq mm5, mm6 -- movq mm2, mm7 -- lea r2, [r1+r3*2] -- PALIGNR mm2, mm6, 1, mm0 -- movq mm3, mm7 -- PALIGNR mm3, mm6, 7, mm0 -- movq mm4, mm7 -- lea r4, [r2+r3*2] -- psrlq mm4, 8 -- PRED4x4_LOWPASS mm0, mm1, mm2, mm5, mm6 -- PRED4x4_LOWPASS mm1, mm3, mm4, mm7, mm6 -- movq [r4+r3*2], mm0 -- movq mm2, mm1 -- psrlq mm0, 8 -- psllq mm2, 56 -- psrlq mm1, 8 -- por mm0, mm2 -- movq [r4+r3*1], mm0 -- movq mm2, mm1 -- psrlq mm0, 8 -- psllq mm2, 56 -- psrlq mm1, 8 -- por mm0, mm2 -- movq [r2+r3*2], mm0 -- movq mm2, mm1 -- psrlq mm0, 8 -- psllq mm2, 56 -- psrlq mm1, 8 -- por mm0, mm2 -- movq [r2+r3*1], mm0 -- movq mm2, mm1 -- psrlq mm0, 8 -- psllq mm2, 56 -- psrlq mm1, 8 -- por mm0, mm2 -- movq [r1+r3*2], mm0 -- movq mm2, mm1 -- psrlq mm0, 8 -- psllq mm2, 56 -- psrlq mm1, 8 -- por mm0, mm2 -- movq [r1+r3*1], mm0 -- movq mm2, mm1 -- psrlq mm0, 8 -- psllq mm2, 56 -- psrlq mm1, 8 -- por mm0, mm2 -- movq [r0+r3*2], mm0 -- psrlq mm0, 8 -- psllq mm1, 56 -- por mm0, mm1 -- movq [r0+r3*1], mm0 -- RET -- - %macro PRED8x8L_DOWN_RIGHT 0 - cglobal pred8x8l_down_right_8, 4,5 - sub r0, r3 -@@ -1786,113 +1312,6 @@ - ; int has_topright, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --INIT_MMX mmxext --cglobal pred8x8l_vertical_right_8, 4,5 -- sub r0, r3 -- lea r4, [r0+r3*2] -- movq mm0, [r0+r3*1-8] -- punpckhbw mm0, [r0+r3*0-8] -- movq mm1, [r4+r3*1-8] -- punpckhbw mm1, [r0+r3*2-8] -- mov r4, r0 -- punpckhwd mm1, mm0 -- lea r0, [r0+r3*4] -- movq mm2, [r0+r3*1-8] -- punpckhbw mm2, [r0+r3*0-8] -- lea r0, [r0+r3*2] -- movq mm3, [r0+r3*1-8] -- punpckhbw mm3, [r0+r3*0-8] -- punpckhwd mm3, mm2 -- punpckhdq mm3, mm1 -- lea r0, [r0+r3*2] -- movq mm0, [r0+r3*0-8] -- movq mm1, [r4] -- mov r0, r4 -- movq mm4, mm3 -- movq mm2, mm3 -- PALIGNR mm4, mm0, 7, mm0 -- PALIGNR mm1, mm2, 1, mm2 -- test r1d, r1d -- jz .fix_lt_1 -- jmp .do_left --.fix_lt_1: -- movq mm5, mm3 -- pxor mm5, mm4 -- psrlq mm5, 56 -- psllq mm5, 48 -- pxor mm1, mm5 -- jmp .do_left --.fix_lt_2: -- movq mm5, mm3 -- pxor mm5, mm2 -- psllq mm5, 56 -- psrlq mm5, 56 -- pxor mm2, mm5 -- test r2d, r2d -- jnz .do_top --.fix_tr_1: -- movq mm5, mm3 -- pxor mm5, mm1 -- psrlq mm5, 56 -- psllq mm5, 56 -- pxor mm1, mm5 -- jmp .do_top --.do_left: -- movq mm0, mm4 -- PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5 -- movq mm7, mm2 -- movq mm0, [r0-8] -- movq mm3, [r0] -- movq mm1, [r0+8] -- movq mm2, mm3 -- movq mm4, mm3 -- PALIGNR mm2, mm0, 7, mm0 -- PALIGNR mm1, mm4, 1, mm4 -- test r1d, r1d -- jz .fix_lt_2 -- test r2d, r2d -- jz .fix_tr_1 --.do_top: -- PRED4x4_LOWPASS mm6, mm2, mm1, mm3, mm5 -- lea r1, [r0+r3*2] -- movq mm2, mm6 -- movq mm3, mm6 -- PALIGNR mm3, mm7, 7, mm0 -- PALIGNR mm6, mm7, 6, mm1 -- movq mm4, mm3 -- pavgb mm3, mm2 -- lea r2, [r1+r3*2] -- PRED4x4_LOWPASS mm0, mm6, mm2, mm4, mm5 -- movq [r0+r3*1], mm3 -- movq [r0+r3*2], mm0 -- movq mm5, mm0 -- movq mm6, mm3 -- movq mm1, mm7 -- movq mm2, mm1 -- psllq mm2, 8 -- movq mm3, mm1 -- psllq mm3, 16 -- lea r4, [r2+r3*2] -- PRED4x4_LOWPASS mm0, mm1, mm3, mm2, mm4 -- PALIGNR mm6, mm0, 7, mm2 -- movq [r1+r3*1], mm6 -- psllq mm0, 8 -- PALIGNR mm5, mm0, 7, mm1 -- movq [r1+r3*2], mm5 -- psllq mm0, 8 -- PALIGNR mm6, mm0, 7, mm2 -- movq [r2+r3*1], mm6 -- psllq mm0, 8 -- PALIGNR mm5, mm0, 7, mm1 -- movq [r2+r3*2], mm5 -- psllq mm0, 8 -- PALIGNR mm6, mm0, 7, mm2 -- movq [r4+r3*1], mm6 -- psllq mm0, 8 -- PALIGNR mm5, mm0, 7, mm1 -- movq [r4+r3*2], mm5 -- RET -- - %macro PRED8x8L_VERTICAL_RIGHT 0 - cglobal pred8x8l_vertical_right_8, 4,5,7 - ; manually spill XMM registers for Win64 because -@@ -2192,121 +1611,6 @@ - ; int has_topright, ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --INIT_MMX mmxext --cglobal pred8x8l_horizontal_down_8, 4,5 -- sub r0, r3 -- lea r4, [r0+r3*2] -- movq mm0, [r0+r3*1-8] -- punpckhbw mm0, [r0+r3*0-8] -- movq mm1, [r4+r3*1-8] -- punpckhbw mm1, [r0+r3*2-8] -- mov r4, r0 -- punpckhwd mm1, mm0 -- lea r0, [r0+r3*4] -- movq mm2, [r0+r3*1-8] -- punpckhbw mm2, [r0+r3*0-8] -- lea r0, [r0+r3*2] -- movq mm3, [r0+r3*1-8] -- punpckhbw mm3, [r0+r3*0-8] -- punpckhwd mm3, mm2 -- punpckhdq mm3, mm1 -- lea r0, [r0+r3*2] -- movq mm0, [r0+r3*0-8] -- movq mm1, [r4] -- mov r0, r4 -- movq mm4, mm3 -- movq mm2, mm3 -- PALIGNR mm4, mm0, 7, mm0 -- PALIGNR mm1, mm2, 1, mm2 -- test r1d, r1d -- jnz .do_left --.fix_lt_1: -- movq mm5, mm3 -- pxor mm5, mm4 -- psrlq mm5, 56 -- psllq mm5, 48 -- pxor mm1, mm5 -- jmp .do_left --.fix_lt_2: -- movq mm5, mm3 -- pxor mm5, mm2 -- psllq mm5, 56 -- psrlq mm5, 56 -- pxor mm2, mm5 -- test r2d, r2d -- jnz .do_top --.fix_tr_1: -- movq mm5, mm3 -- pxor mm5, mm1 -- psrlq mm5, 56 -- psllq mm5, 56 -- pxor mm1, mm5 -- jmp .do_top --.do_left: -- movq mm0, mm4 -- PRED4x4_LOWPASS mm2, mm1, mm4, mm3, mm5 -- movq mm4, mm0 -- movq mm7, mm2 -- movq mm6, mm2 -- PRED4x4_LOWPASS mm1, mm3, mm0, mm4, mm5 -- psllq mm1, 56 -- PALIGNR mm7, mm1, 7, mm3 -- movq mm0, [r0-8] -- movq mm3, [r0] -- movq mm1, [r0+8] -- movq mm2, mm3 -- movq mm4, mm3 -- PALIGNR mm2, mm0, 7, mm0 -- PALIGNR mm1, mm4, 1, mm4 -- test r1d, r1d -- jz .fix_lt_2 -- test r2d, r2d -- jz .fix_tr_1 --.do_top: -- PRED4x4_LOWPASS mm4, mm2, mm1, mm3, mm5 -- movq mm5, mm4 -- lea r1, [r0+r3*2] -- psllq mm7, 56 -- movq mm2, mm5 -- movq mm3, mm6 -- movq mm4, mm2 -- PALIGNR mm2, mm6, 7, mm5 -- PALIGNR mm6, mm7, 7, mm0 -- lea r2, [r1+r3*2] -- PALIGNR mm4, mm3, 1, mm7 -- movq mm5, mm3 -- pavgb mm3, mm6 -- PRED4x4_LOWPASS mm0, mm4, mm6, mm5, mm7 -- movq mm4, mm2 -- movq mm1, mm2 -- lea r4, [r2+r3*2] -- psrlq mm4, 16 -- psrlq mm1, 8 -- PRED4x4_LOWPASS mm6, mm4, mm2, mm1, mm5 -- movq mm7, mm3 -- punpcklbw mm3, mm0 -- punpckhbw mm7, mm0 -- movq mm1, mm7 -- movq mm0, mm7 -- movq mm4, mm7 -- movq [r4+r3*2], mm3 -- PALIGNR mm7, mm3, 2, mm5 -- movq [r4+r3*1], mm7 -- PALIGNR mm1, mm3, 4, mm5 -- movq [r2+r3*2], mm1 -- PALIGNR mm0, mm3, 6, mm3 -- movq [r2+r3*1], mm0 -- movq mm2, mm6 -- movq mm3, mm6 -- movq [r1+r3*2], mm4 -- PALIGNR mm6, mm4, 2, mm5 -- movq [r1+r3*1], mm6 -- PALIGNR mm2, mm4, 4, mm5 -- movq [r0+r3*2], mm2 -- PALIGNR mm3, mm4, 6, mm4 -- movq [r0+r3*1], mm3 -- RET -- - %macro PRED8x8L_HORIZONTAL_DOWN 0 - cglobal pred8x8l_horizontal_down_8, 4,5 - sub r0, r3 -@@ -2472,7 +1776,7 @@ - ; ptrdiff_t stride) - ;----------------------------------------------------------------------------- - --%macro PRED4x4_TM 0 -+INIT_MMX mmxext - cglobal pred4x4_tm_vp8_8, 3,6 - sub r0, r2 - pxor mm7, mm7 -@@ -2487,15 +1791,8 @@ - sub r3d, r4d - movd mm2, r1d - movd mm4, r3d --%if cpuflag(mmxext) - pshufw mm2, mm2, 0 - pshufw mm4, mm4, 0 --%else -- punpcklwd mm2, mm2 -- punpcklwd mm4, mm4 -- punpckldq mm2, mm2 -- punpckldq mm4, mm4 --%endif - paddw mm2, mm0 - paddw mm4, mm0 - packuswb mm2, mm2 -@@ -2505,13 +1802,7 @@ - lea r0, [r0+r2*2] - dec r5d - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmx --PRED4x4_TM --INIT_MMX mmxext --PRED4x4_TM -+ RET - - INIT_XMM ssse3 - cglobal pred4x4_tm_vp8_8, 3,3 -diff -Naur a/media/ffvpx/libavcodec/x86/h264_intrapred_init.c b/media/ffvpx/libavcodec/x86/h264_intrapred_init.c ---- a/media/ffvpx/libavcodec/x86/h264_intrapred_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/h264_intrapred_init.c 2023-04-06 12:49:40.257395051 +0200 -@@ -18,10 +18,13 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include -+#include -+#include "config.h" - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" - #include "libavutil/x86/cpu.h" --#include "libavcodec/avcodec.h" -+#include "libavcodec/codec_id.h" - #include "libavcodec/h264pred.h" - - #define PRED4x4(TYPE, DEPTH, OPT) \ -@@ -49,7 +52,6 @@ - void ff_pred8x8_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ - ptrdiff_t stride); - --PRED8x8(dc, 10, mmxext) - PRED8x8(dc, 10, sse2) - PRED8x8(top_dc, 10, sse2) - PRED8x8(plane, 10, sse2) -@@ -64,7 +66,6 @@ - - PRED8x8L(dc, 10, sse2) - PRED8x8L(dc, 10, avx) --PRED8x8L(128_dc, 10, mmxext) - PRED8x8L(128_dc, 10, sse2) - PRED8x8L(top_dc, 10, sse2) - PRED8x8L(top_dc, 10, avx) -@@ -90,42 +91,25 @@ - void ff_pred16x16_ ## TYPE ## _ ## DEPTH ## _ ## OPT (uint8_t *src, \ - ptrdiff_t stride); - --PRED16x16(dc, 10, mmxext) - PRED16x16(dc, 10, sse2) --PRED16x16(top_dc, 10, mmxext) - PRED16x16(top_dc, 10, sse2) --PRED16x16(128_dc, 10, mmxext) - PRED16x16(128_dc, 10, sse2) --PRED16x16(left_dc, 10, mmxext) - PRED16x16(left_dc, 10, sse2) --PRED16x16(vertical, 10, mmxext) - PRED16x16(vertical, 10, sse2) --PRED16x16(horizontal, 10, mmxext) - PRED16x16(horizontal, 10, sse2) - - /* 8-bit versions */ --PRED16x16(vertical, 8, mmx) - PRED16x16(vertical, 8, sse) --PRED16x16(horizontal, 8, mmx) - PRED16x16(horizontal, 8, mmxext) - PRED16x16(horizontal, 8, ssse3) --PRED16x16(dc, 8, mmxext) - PRED16x16(dc, 8, sse2) - PRED16x16(dc, 8, ssse3) --PRED16x16(plane_h264, 8, mmx) --PRED16x16(plane_h264, 8, mmxext) - PRED16x16(plane_h264, 8, sse2) - PRED16x16(plane_h264, 8, ssse3) --PRED16x16(plane_rv40, 8, mmx) --PRED16x16(plane_rv40, 8, mmxext) - PRED16x16(plane_rv40, 8, sse2) - PRED16x16(plane_rv40, 8, ssse3) --PRED16x16(plane_svq3, 8, mmx) --PRED16x16(plane_svq3, 8, mmxext) - PRED16x16(plane_svq3, 8, sse2) - PRED16x16(plane_svq3, 8, ssse3) --PRED16x16(tm_vp8, 8, mmx) --PRED16x16(tm_vp8, 8, mmxext) - PRED16x16(tm_vp8, 8, sse2) - PRED16x16(tm_vp8, 8, avx2) - -@@ -133,15 +117,10 @@ - PRED8x8(dc_rv40, 8, mmxext) - PRED8x8(dc, 8, mmxext) - PRED8x8(vertical, 8, mmx) --PRED8x8(horizontal, 8, mmx) - PRED8x8(horizontal, 8, mmxext) - PRED8x8(horizontal, 8, ssse3) --PRED8x8(plane, 8, mmx) --PRED8x8(plane, 8, mmxext) - PRED8x8(plane, 8, sse2) - PRED8x8(plane, 8, ssse3) --PRED8x8(tm_vp8, 8, mmx) --PRED8x8(tm_vp8, 8, mmxext) - PRED8x8(tm_vp8, 8, sse2) - PRED8x8(tm_vp8, 8, ssse3) - -@@ -153,20 +132,16 @@ - PRED8x8L(horizontal, 8, ssse3) - PRED8x8L(vertical, 8, mmxext) - PRED8x8L(vertical, 8, ssse3) --PRED8x8L(down_left, 8, mmxext) - PRED8x8L(down_left, 8, sse2) - PRED8x8L(down_left, 8, ssse3) --PRED8x8L(down_right, 8, mmxext) - PRED8x8L(down_right, 8, sse2) - PRED8x8L(down_right, 8, ssse3) --PRED8x8L(vertical_right, 8, mmxext) - PRED8x8L(vertical_right, 8, sse2) - PRED8x8L(vertical_right, 8, ssse3) - PRED8x8L(vertical_left, 8, sse2) - PRED8x8L(vertical_left, 8, ssse3) - PRED8x8L(horizontal_up, 8, mmxext) - PRED8x8L(horizontal_up, 8, ssse3) --PRED8x8L(horizontal_down, 8, mmxext) - PRED8x8L(horizontal_down, 8, sse2) - PRED8x8L(horizontal_down, 8, ssse3) - -@@ -177,7 +152,6 @@ - PRED4x4(vertical_right, 8, mmxext) - PRED4x4(horizontal_up, 8, mmxext) - PRED4x4(horizontal_down, 8, mmxext) --PRED4x4(tm_vp8, 8, mmx) - PRED4x4(tm_vp8, 8, mmxext) - PRED4x4(tm_vp8, 8, ssse3) - PRED4x4(vertical_vp8, 8, mmxext) -@@ -190,44 +164,20 @@ - - if (bit_depth == 8) { - if (EXTERNAL_MMX(cpu_flags)) { -- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_8_mmx; -- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmx; - if (chroma_format_idc <= 1) { - h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmx; -- h->pred8x8 [HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmx; -- } -- if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { -- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmx; -- h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmx; -- h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmx; -- } else { -- if (chroma_format_idc <= 1) -- h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmx; -- if (codec_id == AV_CODEC_ID_SVQ3) { -- if (cpu_flags & AV_CPU_FLAG_CMOV) -- h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_svq3_8_mmx; -- } else if (codec_id == AV_CODEC_ID_RV40) { -- h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_rv40_8_mmx; -- } else { -- h->pred16x16[PLANE_PRED8x8] = ff_pred16x16_plane_h264_8_mmx; -- } - } - } - - if (EXTERNAL_MMXEXT(cpu_flags)) { - h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmxext; -- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_mmxext; - if (chroma_format_idc <= 1) - h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmxext; - h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmxext; - h->pred8x8l [DC_PRED ] = ff_pred8x8l_dc_8_mmxext; - h->pred8x8l [HOR_PRED ] = ff_pred8x8l_horizontal_8_mmxext; - h->pred8x8l [VERT_PRED ] = ff_pred8x8l_vertical_8_mmxext; -- h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_mmxext; -- h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_mmxext; - h->pred8x8l [HOR_UP_PRED ] = ff_pred8x8l_horizontal_up_8_mmxext; -- h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_mmxext; -- h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_mmxext; - h->pred4x4 [DIAG_DOWN_RIGHT_PRED ] = ff_pred4x4_down_right_8_mmxext; - h->pred4x4 [VERT_RIGHT_PRED ] = ff_pred4x4_vertical_right_8_mmxext; - h->pred4x4 [HOR_DOWN_PRED ] = ff_pred4x4_horizontal_down_8_mmxext; -@@ -249,21 +199,9 @@ - } - } - if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { -- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_mmxext; - h->pred8x8 [DC_PRED8x8 ] = ff_pred8x8_dc_rv40_8_mmxext; -- h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_mmxext; - h->pred4x4 [TM_VP8_PRED ] = ff_pred4x4_tm_vp8_8_mmxext; - h->pred4x4 [VERT_PRED ] = ff_pred4x4_vertical_vp8_8_mmxext; -- } else { -- if (chroma_format_idc <= 1) -- h->pred8x8 [PLANE_PRED8x8] = ff_pred8x8_plane_8_mmxext; -- if (codec_id == AV_CODEC_ID_SVQ3) { -- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_svq3_8_mmxext; -- } else if (codec_id == AV_CODEC_ID_RV40) { -- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_rv40_8_mmxext; -- } else { -- h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_plane_h264_8_mmxext; -- } - } - } - -@@ -334,18 +272,6 @@ - if (EXTERNAL_MMXEXT(cpu_flags)) { - h->pred4x4[DC_PRED ] = ff_pred4x4_dc_10_mmxext; - h->pred4x4[HOR_UP_PRED ] = ff_pred4x4_horizontal_up_10_mmxext; -- -- if (chroma_format_idc <= 1) -- h->pred8x8[DC_PRED8x8 ] = ff_pred8x8_dc_10_mmxext; -- -- h->pred8x8l[DC_128_PRED ] = ff_pred8x8l_128_dc_10_mmxext; -- -- h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_10_mmxext; -- h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_10_mmxext; -- h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_10_mmxext; -- h->pred16x16[LEFT_DC_PRED8x8 ] = ff_pred16x16_left_dc_10_mmxext; -- h->pred16x16[VERT_PRED8x8 ] = ff_pred16x16_vertical_10_mmxext; -- h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_10_mmxext; - } - if (EXTERNAL_SSE2(cpu_flags)) { - h->pred4x4[DIAG_DOWN_LEFT_PRED ] = ff_pred4x4_down_left_10_sse2; -diff -Naur a/media/ffvpx/libavcodec/x86/idctdsp.asm b/media/ffvpx/libavcodec/x86/idctdsp.asm ---- a/media/ffvpx/libavcodec/x86/idctdsp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/idctdsp.asm 2023-04-06 12:49:40.257395051 +0200 -@@ -37,47 +37,24 @@ - %macro PUT_SIGNED_PIXELS_CLAMPED_HALF 1 - mova m1, [blockq+mmsize*0+%1] - mova m2, [blockq+mmsize*2+%1] --%if mmsize == 8 -- mova m3, [blockq+mmsize*4+%1] -- mova m4, [blockq+mmsize*6+%1] --%endif - packsswb m1, [blockq+mmsize*1+%1] - packsswb m2, [blockq+mmsize*3+%1] --%if mmsize == 8 -- packsswb m3, [blockq+mmsize*5+%1] -- packsswb m4, [blockq+mmsize*7+%1] --%endif - paddb m1, m0 - paddb m2, m0 --%if mmsize == 8 -- paddb m3, m0 -- paddb m4, m0 -- movq [pixelsq+lsizeq*0], m1 -- movq [pixelsq+lsizeq*1], m2 -- movq [pixelsq+lsizeq*2], m3 -- movq [pixelsq+lsize3q ], m4 --%else - movq [pixelsq+lsizeq*0], m1 - movhps [pixelsq+lsizeq*1], m1 - movq [pixelsq+lsizeq*2], m2 - movhps [pixelsq+lsize3q ], m2 --%endif - %endmacro - --%macro PUT_SIGNED_PIXELS_CLAMPED 1 --cglobal put_signed_pixels_clamped, 3, 4, %1, block, pixels, lsize, lsize3 -+INIT_XMM sse2 -+cglobal put_signed_pixels_clamped, 3, 4, 3, block, pixels, lsize, lsize3 - mova m0, [pb_80] - lea lsize3q, [lsizeq*3] - PUT_SIGNED_PIXELS_CLAMPED_HALF 0 - lea pixelsq, [pixelsq+lsizeq*4] - PUT_SIGNED_PIXELS_CLAMPED_HALF 64 - RET --%endmacro -- --INIT_MMX mmx --PUT_SIGNED_PIXELS_CLAMPED 0 --INIT_XMM sse2 --PUT_SIGNED_PIXELS_CLAMPED 3 - - ;-------------------------------------------------------------------------- - ; void ff_put_pixels_clamped(const int16_t *block, uint8_t *pixels, -@@ -87,40 +64,21 @@ - %macro PUT_PIXELS_CLAMPED_HALF 1 - mova m0, [blockq+mmsize*0+%1] - mova m1, [blockq+mmsize*2+%1] --%if mmsize == 8 -- mova m2, [blockq+mmsize*4+%1] -- mova m3, [blockq+mmsize*6+%1] --%endif - packuswb m0, [blockq+mmsize*1+%1] - packuswb m1, [blockq+mmsize*3+%1] --%if mmsize == 8 -- packuswb m2, [blockq+mmsize*5+%1] -- packuswb m3, [blockq+mmsize*7+%1] -- movq [pixelsq], m0 -- movq [lsizeq+pixelsq], m1 -- movq [2*lsizeq+pixelsq], m2 -- movq [lsize3q+pixelsq], m3 --%else - movq [pixelsq], m0 - movhps [lsizeq+pixelsq], m0 - movq [2*lsizeq+pixelsq], m1 - movhps [lsize3q+pixelsq], m1 --%endif - %endmacro - --%macro PUT_PIXELS_CLAMPED 0 -+INIT_XMM sse2 - cglobal put_pixels_clamped, 3, 4, 2, block, pixels, lsize, lsize3 - lea lsize3q, [lsizeq*3] - PUT_PIXELS_CLAMPED_HALF 0 - lea pixelsq, [pixelsq+lsizeq*4] - PUT_PIXELS_CLAMPED_HALF 64 - RET --%endmacro -- --INIT_MMX mmx --PUT_PIXELS_CLAMPED --INIT_XMM sse2 --PUT_PIXELS_CLAMPED - - ;-------------------------------------------------------------------------- - ; void ff_add_pixels_clamped(const int16_t *block, uint8_t *pixels, -@@ -130,41 +88,18 @@ - %macro ADD_PIXELS_CLAMPED 1 - mova m0, [blockq+mmsize*0+%1] - mova m1, [blockq+mmsize*1+%1] --%if mmsize == 8 -- mova m5, [blockq+mmsize*2+%1] -- mova m6, [blockq+mmsize*3+%1] --%endif - movq m2, [pixelsq] - movq m3, [pixelsq+lsizeq] --%if mmsize == 8 -- mova m7, m2 -- punpcklbw m2, m4 -- punpckhbw m7, m4 -- paddsw m0, m2 -- paddsw m1, m7 -- mova m7, m3 -- punpcklbw m3, m4 -- punpckhbw m7, m4 -- paddsw m5, m3 -- paddsw m6, m7 --%else - punpcklbw m2, m4 - punpcklbw m3, m4 - paddsw m0, m2 - paddsw m1, m3 --%endif - packuswb m0, m1 --%if mmsize == 8 -- packuswb m5, m6 -- movq [pixelsq], m0 -- movq [pixelsq+lsizeq], m5 --%else - movq [pixelsq], m0 - movhps [pixelsq+lsizeq], m0 --%endif - %endmacro - --%macro ADD_PIXELS_CLAMPED 0 -+INIT_XMM sse2 - cglobal add_pixels_clamped, 3, 3, 5, block, pixels, lsize - pxor m4, m4 - ADD_PIXELS_CLAMPED 0 -@@ -175,9 +110,3 @@ - lea pixelsq, [pixelsq+lsizeq*2] - ADD_PIXELS_CLAMPED 96 - RET --%endmacro -- --INIT_MMX mmx --ADD_PIXELS_CLAMPED --INIT_XMM sse2 --ADD_PIXELS_CLAMPED -diff -Naur a/media/ffvpx/libavcodec/x86/idctdsp.h b/media/ffvpx/libavcodec/x86/idctdsp.h ---- a/media/ffvpx/libavcodec/x86/idctdsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/idctdsp.h 2023-04-06 12:49:40.257395051 +0200 -@@ -22,16 +22,10 @@ - #include - #include - --void ff_add_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, -- ptrdiff_t line_size); - void ff_add_pixels_clamped_sse2(const int16_t *block, uint8_t *pixels, - ptrdiff_t line_size); --void ff_put_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, -- ptrdiff_t line_size); - void ff_put_pixels_clamped_sse2(const int16_t *block, uint8_t *pixels, - ptrdiff_t line_size); --void ff_put_signed_pixels_clamped_mmx(const int16_t *block, uint8_t *pixels, -- ptrdiff_t line_size); - void ff_put_signed_pixels_clamped_sse2(const int16_t *block, uint8_t *pixels, - ptrdiff_t line_size); - -diff -Naur a/media/ffvpx/libavcodec/x86/idctdsp_init.c b/media/ffvpx/libavcodec/x86/idctdsp_init.c ---- a/media/ffvpx/libavcodec/x86/idctdsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/idctdsp_init.c 2023-04-06 12:49:40.258395091 +0200 -@@ -63,28 +63,24 @@ - { - int cpu_flags = av_get_cpu_flags(); - -+#if ARCH_X86_32 - if (EXTERNAL_MMX(cpu_flags)) { -- c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_mmx; -- c->put_pixels_clamped = ff_put_pixels_clamped_mmx; -- c->add_pixels_clamped = ff_add_pixels_clamped_mmx; -- - if (!high_bit_depth && - avctx->lowres == 0 && - (avctx->idct_algo == FF_IDCT_AUTO || - avctx->idct_algo == FF_IDCT_SIMPLEAUTO || - avctx->idct_algo == FF_IDCT_SIMPLEMMX)) { -- c->idct_put = ff_simple_idct_put_mmx; -- c->idct_add = ff_simple_idct_add_mmx; - c->idct = ff_simple_idct_mmx; -- c->perm_type = FF_IDCT_PERM_SIMPLE; - } - } -+#endif - - if (EXTERNAL_SSE2(cpu_flags)) { - c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_sse2; - c->put_pixels_clamped = ff_put_pixels_clamped_sse2; - c->add_pixels_clamped = ff_add_pixels_clamped_sse2; - -+#if ARCH_X86_32 - if (!high_bit_depth && - avctx->lowres == 0 && - (avctx->idct_algo == FF_IDCT_AUTO || -@@ -94,6 +90,7 @@ - c->idct_add = ff_simple_idct_add_sse2; - c->perm_type = FF_IDCT_PERM_SIMPLE; - } -+#endif - - if (ARCH_X86_64 && - !high_bit_depth && -diff -Naur a/media/ffvpx/libavcodec/x86/imdct36.asm b/media/ffvpx/libavcodec/x86/imdct36.asm ---- a/media/ffvpx/libavcodec/x86/imdct36.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/imdct36.asm 2023-04-06 12:49:40.258395091 +0200 -@@ -373,11 +373,6 @@ - RET - %endmacro - --%if ARCH_X86_32 --INIT_XMM sse --DEFINE_IMDCT --%endif -- - INIT_XMM sse2 - DEFINE_IMDCT - -diff -Naur a/media/ffvpx/libavcodec/x86/moz.build b/media/ffvpx/libavcodec/x86/moz.build ---- a/media/ffvpx/libavcodec/x86/moz.build 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/moz.build 2023-04-06 12:49:40.258395091 +0200 -@@ -19,7 +19,6 @@ - 'idctdsp_init.c', - 'imdct36.asm', - 'mpegaudiodsp.c', -- 'simple_idct.asm', - 'videodsp.asm', - 'videodsp_init.c', - 'vp8dsp.asm', -@@ -39,10 +38,11 @@ - 'vp9mc_16bpp.asm', - ] - --if CONFIG['CPU_ARCH'] == "x86_64": -- SOURCES += [ -- 'simple_idct10.asm', -- ] -+if CONFIG['CPU_ARCH'] == 'x86': -+ SOURCES += [ 'simple_idct.asm' ] -+ -+if CONFIG['CPU_ARCH'] == 'x86_64': -+ SOURCES += [ 'simple_idct10.asm' ] - - if CONFIG['MOZ_LIBAV_FFT']: - SOURCES += [ -diff -Naur a/media/ffvpx/libavcodec/x86/mpegaudiodsp.c b/media/ffvpx/libavcodec/x86/mpegaudiodsp.c ---- a/media/ffvpx/libavcodec/x86/mpegaudiodsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/mpegaudiodsp.c 2023-04-06 12:49:40.258395091 +0200 -@@ -19,9 +19,11 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include -+ -+#include "config.h" - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" --#include "libavutil/internal.h" - #include "libavutil/mem_internal.h" - #include "libavutil/x86/asm.h" - #include "libavutil/x86/cpu.h" -@@ -32,9 +34,6 @@ - void ff_imdct36_float_ ## CPU(float *out, float *buf, float *in, float *win); - - #if HAVE_X86ASM --#if ARCH_X86_32 --DECL(sse) --#endif - DECL(sse2) - DECL(sse3) - DECL(ssse3) -@@ -228,9 +227,6 @@ - } - - #if HAVE_SSE --#if ARCH_X86_32 --DECL_IMDCT_BLOCKS(sse,sse) --#endif - DECL_IMDCT_BLOCKS(sse2,sse) - DECL_IMDCT_BLOCKS(sse3,sse) - DECL_IMDCT_BLOCKS(ssse3,sse) -@@ -269,11 +265,6 @@ - - #if HAVE_X86ASM - #if HAVE_SSE --#if ARCH_X86_32 -- if (EXTERNAL_SSE(cpu_flags)) { -- s->imdct36_blocks_float = imdct36_blocks_sse; -- } --#endif - if (EXTERNAL_SSE2(cpu_flags)) { - s->imdct36_blocks_float = imdct36_blocks_sse2; - } -diff -Naur a/media/ffvpx/libavcodec/x86/simple_idct.asm b/media/ffvpx/libavcodec/x86/simple_idct.asm ---- a/media/ffvpx/libavcodec/x86/simple_idct.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/simple_idct.asm 2023-04-06 12:50:06.975471215 +0200 -@@ -27,6 +27,7 @@ - - SECTION_RODATA - -+%if ARCH_X86_32 - cextern pb_80 - - wm1010: dw 0, 0xffff, 0, 0xffff -@@ -846,26 +847,6 @@ - IDCT - RET - --cglobal simple_idct_put, 3, 5, 8, 128, pixels, lsize, block, lsize3, t0 -- IDCT -- lea lsize3q, [lsizeq*3] -- PUT_PIXELS_CLAMPED_HALF 0 -- lea pixelsq, [pixelsq+lsizeq*4] -- PUT_PIXELS_CLAMPED_HALF 64 --RET -- --cglobal simple_idct_add, 3, 4, 8, 128, pixels, lsize, block, t0 -- IDCT -- pxor m4, m4 -- ADD_PIXELS_CLAMPED 0 -- lea pixelsq, [pixelsq+lsizeq*2] -- ADD_PIXELS_CLAMPED 32 -- lea pixelsq, [pixelsq+lsizeq*2] -- ADD_PIXELS_CLAMPED 64 -- lea pixelsq, [pixelsq+lsizeq*2] -- ADD_PIXELS_CLAMPED 96 --RET -- - INIT_XMM sse2 - - cglobal simple_idct_put, 3, 5, 8, 128, pixels, lsize, block, lsize3, t0 -@@ -887,3 +868,4 @@ - lea pixelsq, [pixelsq+lsizeq*2] - ADD_PIXELS_CLAMPED 96 - RET -+%endif -diff -Naur a/media/ffvpx/libavcodec/x86/videodsp.asm b/media/ffvpx/libavcodec/x86/videodsp.asm ---- a/media/ffvpx/libavcodec/x86/videodsp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/videodsp.asm 2023-04-06 12:50:24.493176583 +0200 -@@ -45,7 +45,6 @@ - jnz .%1_y_loop - %endmacro - --%macro vvar_fn 0 - ; .----. <- zero - ; | | <- top is copied from first line in body of source - ; |----| <- start_y -@@ -53,6 +52,7 @@ - ; |----| <- end_y - ; | | <- bottom is copied from last line in body of source - ; '----' <- bh -+INIT_XMM sse - %if ARCH_X86_64 - cglobal emu_edge_vvar, 7, 8, 1, dst, dst_stride, src, src_stride, \ - start_y, end_y, bh, w -@@ -81,15 +81,6 @@ - V_COPY_ROW bottom, bhq ; v_copy_row(bottom, bh) - .end: ; } - RET --%endmacro -- --%if ARCH_X86_32 --INIT_MMX mmx --vvar_fn --%endif -- --INIT_XMM sse --vvar_fn - - %macro hvar_fn 0 - cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w -@@ -105,11 +96,7 @@ - imul wd, 0x01010101 ; w *= 0x01010101 - movd m0, wd - mov wq, n_wordsq ; initialize w --%if cpuflag(sse2) - pshufd m0, m0, q0000 ; splat --%else ; mmx -- punpckldq m0, m0 ; splat --%endif ; mmx/sse - %endif ; avx2 - .x_loop: ; do { - movu [dstq+wq*2], m0 ; write($reg, $mmsize) -@@ -123,11 +110,6 @@ - RET - %endmacro - --%if ARCH_X86_32 --INIT_MMX mmx --hvar_fn --%endif -- - INIT_XMM sse2 - hvar_fn - -@@ -338,9 +320,6 @@ - - INIT_MMX mmx - VERTICAL_EXTEND 1, 15 --%if ARCH_X86_32 --VERTICAL_EXTEND 16, 22 --%endif - - INIT_XMM sse - VERTICAL_EXTEND 16, 22 -@@ -438,9 +417,6 @@ - - INIT_MMX mmx - H_EXTEND 2, 14 --%if ARCH_X86_32 --H_EXTEND 16, 22 --%endif - - INIT_XMM sse2 - H_EXTEND 16, 22 -@@ -450,19 +426,11 @@ - H_EXTEND 8, 22 - %endif - --%macro PREFETCH_FN 1 -+INIT_MMX mmxext - cglobal prefetch, 3, 3, 0, buf, stride, h - .loop: -- %1 [bufq] -+ prefetcht0 [bufq] - add bufq, strideq - dec hd - jg .loop -- REP_RET --%endmacro -- --INIT_MMX mmxext --PREFETCH_FN prefetcht0 --%if ARCH_X86_32 --INIT_MMX 3dnow --PREFETCH_FN prefetch --%endif -+ RET -diff -Naur a/media/ffvpx/libavcodec/x86/videodsp_init.c b/media/ffvpx/libavcodec/x86/videodsp_init.c ---- a/media/ffvpx/libavcodec/x86/videodsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/videodsp_init.c 2023-04-06 12:50:06.975471215 +0200 -@@ -24,7 +24,6 @@ - #include "libavutil/avassert.h" - #include "libavutil/common.h" - #include "libavutil/cpu.h" --#include "libavutil/mem.h" - #include "libavutil/x86/asm.h" - #include "libavutil/x86/cpu.h" - #include "libavcodec/videodsp.h" -@@ -53,26 +52,6 @@ - extern emu_edge_vfix_func ff_emu_edge_vfix13_mmx; - extern emu_edge_vfix_func ff_emu_edge_vfix14_mmx; - extern emu_edge_vfix_func ff_emu_edge_vfix15_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix16_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix17_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix18_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix19_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix20_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix21_mmx; --extern emu_edge_vfix_func ff_emu_edge_vfix22_mmx; --#if ARCH_X86_32 --static emu_edge_vfix_func * const vfixtbl_mmx[22] = { -- &ff_emu_edge_vfix1_mmx, &ff_emu_edge_vfix2_mmx, &ff_emu_edge_vfix3_mmx, -- &ff_emu_edge_vfix4_mmx, &ff_emu_edge_vfix5_mmx, &ff_emu_edge_vfix6_mmx, -- &ff_emu_edge_vfix7_mmx, &ff_emu_edge_vfix8_mmx, &ff_emu_edge_vfix9_mmx, -- &ff_emu_edge_vfix10_mmx, &ff_emu_edge_vfix11_mmx, &ff_emu_edge_vfix12_mmx, -- &ff_emu_edge_vfix13_mmx, &ff_emu_edge_vfix14_mmx, &ff_emu_edge_vfix15_mmx, -- &ff_emu_edge_vfix16_mmx, &ff_emu_edge_vfix17_mmx, &ff_emu_edge_vfix18_mmx, -- &ff_emu_edge_vfix19_mmx, &ff_emu_edge_vfix20_mmx, &ff_emu_edge_vfix21_mmx, -- &ff_emu_edge_vfix22_mmx --}; --#endif --extern emu_edge_vvar_func ff_emu_edge_vvar_mmx; - extern emu_edge_vfix_func ff_emu_edge_vfix16_sse; - extern emu_edge_vfix_func ff_emu_edge_vfix17_sse; - extern emu_edge_vfix_func ff_emu_edge_vfix18_sse; -@@ -104,19 +83,6 @@ - extern emu_edge_hfix_func ff_emu_edge_hfix10_mmx; - extern emu_edge_hfix_func ff_emu_edge_hfix12_mmx; - extern emu_edge_hfix_func ff_emu_edge_hfix14_mmx; --extern emu_edge_hfix_func ff_emu_edge_hfix16_mmx; --extern emu_edge_hfix_func ff_emu_edge_hfix18_mmx; --extern emu_edge_hfix_func ff_emu_edge_hfix20_mmx; --extern emu_edge_hfix_func ff_emu_edge_hfix22_mmx; --#if ARCH_X86_32 --static emu_edge_hfix_func * const hfixtbl_mmx[11] = { -- ff_emu_edge_hfix2_mmx, ff_emu_edge_hfix4_mmx, ff_emu_edge_hfix6_mmx, -- ff_emu_edge_hfix8_mmx, ff_emu_edge_hfix10_mmx, ff_emu_edge_hfix12_mmx, -- ff_emu_edge_hfix14_mmx, ff_emu_edge_hfix16_mmx, ff_emu_edge_hfix18_mmx, -- ff_emu_edge_hfix20_mmx, ff_emu_edge_hfix22_mmx --}; --#endif --extern emu_edge_hvar_func ff_emu_edge_hvar_mmx; - extern emu_edge_hfix_func ff_emu_edge_hfix16_sse2; - extern emu_edge_hfix_func ff_emu_edge_hfix18_sse2; - extern emu_edge_hfix_func ff_emu_edge_hfix20_sse2; -@@ -222,30 +188,6 @@ - } - } - --#if ARCH_X86_32 --static av_noinline void emulated_edge_mc_mmx(uint8_t *buf, const uint8_t *src, -- ptrdiff_t buf_stride, -- ptrdiff_t src_stride, -- int block_w, int block_h, -- int src_x, int src_y, int w, int h) --{ -- emulated_edge_mc(buf, src, buf_stride, src_stride, block_w, block_h, -- src_x, src_y, w, h, vfixtbl_mmx, &ff_emu_edge_vvar_mmx, -- hfixtbl_mmx, &ff_emu_edge_hvar_mmx); --} -- --static av_noinline void emulated_edge_mc_sse(uint8_t *buf, const uint8_t *src, -- ptrdiff_t buf_stride, -- ptrdiff_t src_stride, -- int block_w, int block_h, -- int src_x, int src_y, int w, int h) --{ -- emulated_edge_mc(buf, src, buf_stride, src_stride, block_w, block_h, -- src_x, src_y, w, h, vfixtbl_sse, &ff_emu_edge_vvar_sse, -- hfixtbl_mmx, &ff_emu_edge_hvar_mmx); --} --#endif -- - static av_noinline void emulated_edge_mc_sse2(uint8_t *buf, const uint8_t *src, - ptrdiff_t buf_stride, - ptrdiff_t src_stride, -@@ -273,30 +215,16 @@ - #endif /* HAVE_AVX2_EXTERNAL */ - #endif /* HAVE_X86ASM */ - --void ff_prefetch_mmxext(uint8_t *buf, ptrdiff_t stride, int h); --void ff_prefetch_3dnow(uint8_t *buf, ptrdiff_t stride, int h); -+void ff_prefetch_mmxext(const uint8_t *buf, ptrdiff_t stride, int h); - - av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc) - { - #if HAVE_X86ASM - int cpu_flags = av_get_cpu_flags(); - --#if ARCH_X86_32 -- if (EXTERNAL_MMX(cpu_flags) && bpc <= 8) { -- ctx->emulated_edge_mc = emulated_edge_mc_mmx; -- } -- if (EXTERNAL_AMD3DNOW(cpu_flags)) { -- ctx->prefetch = ff_prefetch_3dnow; -- } --#endif /* ARCH_X86_32 */ - if (EXTERNAL_MMXEXT(cpu_flags)) { - ctx->prefetch = ff_prefetch_mmxext; - } --#if ARCH_X86_32 -- if (EXTERNAL_SSE(cpu_flags) && bpc <= 8) { -- ctx->emulated_edge_mc = emulated_edge_mc_sse; -- } --#endif /* ARCH_X86_32 */ - if (EXTERNAL_SSE2(cpu_flags) && bpc <= 8) { - ctx->emulated_edge_mc = emulated_edge_mc_sse2; - } -diff -Naur a/media/ffvpx/libavcodec/x86/vp56_arith.h b/media/ffvpx/libavcodec/x86/vp56_arith.h ---- a/media/ffvpx/libavcodec/x86/vp56_arith.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp56_arith.h 2023-04-06 12:49:40.258395091 +0200 -@@ -25,6 +25,8 @@ - #define AVCODEC_X86_VP56_ARITH_H - - #if HAVE_INLINE_ASM && HAVE_FAST_CMOV && HAVE_6REGS -+#include "libavutil/attributes.h" -+ - #define vp56_rac_get_prob vp56_rac_get_prob - static av_always_inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob) - { -diff -Naur a/media/ffvpx/libavcodec/x86/vp8dsp.asm b/media/ffvpx/libavcodec/x86/vp8dsp.asm ---- a/media/ffvpx/libavcodec/x86/vp8dsp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp8dsp.asm 2023-04-06 12:50:24.493176583 +0200 -@@ -157,7 +157,7 @@ - ; subpel MC functions: - ; - ; void ff_put_vp8_epel_hv_(uint8_t *dst, ptrdiff_t deststride, --; uint8_t *src, ptrdiff_t srcstride, -+; const uint8_t *src, ptrdiff_t srcstride, - ; int height, int mx, int my); - ;------------------------------------------------------------------------------- - -@@ -200,7 +200,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - cglobal put_vp8_epel%1_h4, 6, 6 + npicregs, 7, dst, dststride, src, srcstride, height, mx, picreg - shl mxd, 4 -@@ -230,7 +230,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - cglobal put_vp8_epel%1_v4, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my - shl myd, 4 -@@ -268,7 +268,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - cglobal put_vp8_epel%1_v6, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my - lea myd, [myq*3] -@@ -314,7 +314,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - %endmacro - - INIT_MMX ssse3 -@@ -368,7 +368,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - ; 4x4 block, H-only 6-tap filter - INIT_MMX mmxext -@@ -426,7 +426,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - INIT_XMM sse2 - cglobal put_vp8_epel8_h4, 6, 6 + npicregs, 10, dst, dststride, src, srcstride, height, mx, picreg -@@ -474,7 +474,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - INIT_XMM sse2 - cglobal put_vp8_epel8_h6, 6, 6 + npicregs, 14, dst, dststride, src, srcstride, height, mx, picreg -@@ -537,7 +537,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - %macro FILTER_V 1 - ; 4x4 block, V-only 4-tap filter -@@ -590,7 +590,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - - - ; 4x4 block, V-only 6-tap filter -@@ -655,7 +655,7 @@ - add srcq, srcstrideq - dec heightd ; next row - jg .nextrow -- REP_RET -+ RET - %endmacro - - INIT_MMX mmxext -@@ -738,7 +738,7 @@ - lea srcq, [srcq+srcstrideq*2] - sub heightd, 2 - jg .nextrow -- REP_RET -+ RET - - %if cpuflag(ssse3) - cglobal put_vp8_bilinear%1_h, 6, 6 + npicregs, 5, dst, dststride, src, srcstride, height, mx, picreg -@@ -815,7 +815,7 @@ - lea srcq, [srcq+srcstrideq*2] - sub heightd, 2 - jg .nextrow -- REP_RET -+ RET - %endmacro - - INIT_MMX mmxext -@@ -838,26 +838,7 @@ - lea dstq, [dstq+dststrideq*2] - sub heightd, 2 - jg .nextrow -- REP_RET -- --%if ARCH_X86_32 --INIT_MMX mmx --cglobal put_vp8_pixels16, 5, 5, 0, dst, dststride, src, srcstride, height --.nextrow: -- movq mm0, [srcq+srcstrideq*0+0] -- movq mm1, [srcq+srcstrideq*0+8] -- movq mm2, [srcq+srcstrideq*1+0] -- movq mm3, [srcq+srcstrideq*1+8] -- lea srcq, [srcq+srcstrideq*2] -- movq [dstq+dststrideq*0+0], mm0 -- movq [dstq+dststrideq*0+8], mm1 -- movq [dstq+dststrideq*1+0], mm2 -- movq [dstq+dststrideq*1+8], mm3 -- lea dstq, [dstq+dststrideq*2] -- sub heightd, 2 -- jg .nextrow -- REP_RET --%endif -+ RET - - INIT_XMM sse - cglobal put_vp8_pixels16, 5, 5, 2, dst, dststride, src, srcstride, height -@@ -870,7 +851,7 @@ - lea dstq, [dstq+dststrideq*2] - sub heightd, 2 - jg .nextrow -- REP_RET -+ RET - - ;----------------------------------------------------------------------------- - ; void ff_vp8_idct_dc_add_(uint8_t *dst, int16_t block[16], ptrdiff_t stride); -@@ -895,32 +876,6 @@ - %4 [dst2q+strideq+%3], m5 - %endmacro - --%if ARCH_X86_32 --INIT_MMX mmx --cglobal vp8_idct_dc_add, 3, 3, 0, dst, block, stride -- ; load data -- movd m0, [blockq] -- -- ; calculate DC -- paddw m0, [pw_4] -- pxor m1, m1 -- psraw m0, 3 -- movd [blockq], m1 -- psubw m1, m0 -- packuswb m0, m0 -- packuswb m1, m1 -- punpcklbw m0, m0 -- punpcklbw m1, m1 -- punpcklwd m0, m0 -- punpcklwd m1, m1 -- -- ; add DC -- DEFINE_ARGS dst1, dst2, stride -- lea dst2q, [dst1q+strideq*2] -- ADD_DC m0, m1, 0, movh -- RET --%endif -- - %macro VP8_IDCT_DC_ADD 0 - cglobal vp8_idct_dc_add, 3, 3, 6, dst, block, stride - ; load data -@@ -971,44 +926,6 @@ - ; void ff_vp8_idct_dc_add4y_(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride); - ;----------------------------------------------------------------------------- - --%if ARCH_X86_32 --INIT_MMX mmx --cglobal vp8_idct_dc_add4y, 3, 3, 0, dst, block, stride -- ; load data -- movd m0, [blockq+32*0] ; A -- movd m1, [blockq+32*2] ; C -- punpcklwd m0, [blockq+32*1] ; A B -- punpcklwd m1, [blockq+32*3] ; C D -- punpckldq m0, m1 ; A B C D -- pxor m6, m6 -- -- ; calculate DC -- paddw m0, [pw_4] -- movd [blockq+32*0], m6 -- movd [blockq+32*1], m6 -- movd [blockq+32*2], m6 -- movd [blockq+32*3], m6 -- psraw m0, 3 -- psubw m6, m0 -- packuswb m0, m0 -- packuswb m6, m6 -- punpcklbw m0, m0 ; AABBCCDD -- punpcklbw m6, m6 ; AABBCCDD -- movq m1, m0 -- movq m7, m6 -- punpcklbw m0, m0 ; AAAABBBB -- punpckhbw m1, m1 ; CCCCDDDD -- punpcklbw m6, m6 ; AAAABBBB -- punpckhbw m7, m7 ; CCCCDDDD -- -- ; add DC -- DEFINE_ARGS dst1, dst2, stride -- lea dst2q, [dst1q+strideq*2] -- ADD_DC m0, m6, 0, mova -- ADD_DC m1, m7, 8, mova -- RET --%endif -- - INIT_XMM sse2 - cglobal vp8_idct_dc_add4y, 3, 3, 6, dst, block, stride - ; load data -@@ -1117,7 +1034,7 @@ - SWAP %4, %3 - %endmacro - --%macro VP8_IDCT_ADD 0 -+INIT_MMX sse - cglobal vp8_idct_add, 3, 3, 0, dst, block, stride - ; load block data - movq m0, [blockq+ 0] -@@ -1126,17 +1043,9 @@ - movq m3, [blockq+24] - movq m6, [pw_20091] - movq m7, [pw_17734] --%if cpuflag(sse) - xorps xmm0, xmm0 - movaps [blockq+ 0], xmm0 - movaps [blockq+16], xmm0 --%else -- pxor m4, m4 -- movq [blockq+ 0], m4 -- movq [blockq+ 8], m4 -- movq [blockq+16], m4 -- movq [blockq+24], m4 --%endif - - ; actual IDCT - VP8_IDCT_TRANSFORM4x4_1D 0, 1, 2, 3, 4, 5 -@@ -1153,14 +1062,6 @@ - STORE_DIFFx2 m2, m3, m6, m7, m4, 3, dst2q, strideq - - RET --%endmacro -- --%if ARCH_X86_32 --INIT_MMX mmx --VP8_IDCT_ADD --%endif --INIT_MMX sse --VP8_IDCT_ADD - - ;----------------------------------------------------------------------------- - ; void ff_vp8_luma_dc_wht(int16_t block[4][4][16], int16_t dc[16]) -@@ -1193,23 +1094,15 @@ - SWAP %1, %4, %3 - %endmacro - --%macro VP8_DC_WHT 0 -+INIT_MMX sse - cglobal vp8_luma_dc_wht, 2, 3, 0, block, dc1, dc2 - movq m0, [dc1q] - movq m1, [dc1q+8] - movq m2, [dc1q+16] - movq m3, [dc1q+24] --%if cpuflag(sse) - xorps xmm0, xmm0 - movaps [dc1q+ 0], xmm0 - movaps [dc1q+16], xmm0 --%else -- pxor m4, m4 -- movq [dc1q+ 0], m4 -- movq [dc1q+ 8], m4 -- movq [dc1q+16], m4 -- movq [dc1q+24], m4 --%endif - HADAMARD4_1D 0, 1, 2, 3 - TRANSPOSE4x4W 0, 1, 2, 3, 4 - paddw m0, [pw_3] -@@ -1221,11 +1114,3 @@ - SCATTER_WHT 0, 1, 0 - SCATTER_WHT 2, 3, 2 - RET --%endmacro -- --%if ARCH_X86_32 --INIT_MMX mmx --VP8_DC_WHT --%endif --INIT_MMX sse --VP8_DC_WHT -diff -Naur a/media/ffvpx/libavcodec/x86/vp8dsp_init.c b/media/ffvpx/libavcodec/x86/vp8dsp_init.c ---- a/media/ffvpx/libavcodec/x86/vp8dsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp8dsp_init.c 2023-04-06 12:50:06.975471215 +0200 -@@ -22,7 +22,6 @@ - - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" --#include "libavutil/mem.h" - #include "libavutil/mem_internal.h" - #include "libavutil/x86/cpu.h" - #include "libavcodec/vp8dsp.h" -@@ -33,96 +32,93 @@ - * MC functions - */ - void ff_put_vp8_epel4_h4_mmxext(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel4_h6_mmxext(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel4_v4_mmxext(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel4_v6_mmxext(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - - void ff_put_vp8_epel8_h4_sse2 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_h6_sse2 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_v4_sse2 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_v6_sse2 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - - void ff_put_vp8_epel4_h4_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel4_h6_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel4_v4_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel4_v6_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_h4_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_h6_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_v4_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_epel8_v6_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - - void ff_put_vp8_bilinear4_h_mmxext(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_bilinear8_h_sse2 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_bilinear4_h_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_bilinear8_h_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - - void ff_put_vp8_bilinear4_v_mmxext(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_bilinear8_v_sse2 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_bilinear4_v_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_bilinear8_v_ssse3 (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - - - void ff_put_vp8_pixels8_mmx (uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -- int height, int mx, int my); --void ff_put_vp8_pixels16_mmx(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - void ff_put_vp8_pixels16_sse(uint8_t *dst, ptrdiff_t dststride, -- uint8_t *src, ptrdiff_t srcstride, -+ const uint8_t *src, ptrdiff_t srcstride, - int height, int mx, int my); - - #define TAP_W16(OPT, FILTERTYPE, TAPTYPE) \ - static void ff_put_vp8_ ## FILTERTYPE ## 16_ ## TAPTYPE ## _ ## OPT( \ -- uint8_t *dst, ptrdiff_t dststride, uint8_t *src, \ -+ uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ - ptrdiff_t srcstride, int height, int mx, int my) \ - { \ - ff_put_vp8_ ## FILTERTYPE ## 8_ ## TAPTYPE ## _ ## OPT( \ -@@ -141,19 +137,6 @@ - dst + 4, dststride, src + 4, srcstride, height, mx, my); \ - } - --#if ARCH_X86_32 --TAP_W8 (mmxext, epel, h4) --TAP_W8 (mmxext, epel, h6) --TAP_W16(mmxext, epel, h6) --TAP_W8 (mmxext, epel, v4) --TAP_W8 (mmxext, epel, v6) --TAP_W16(mmxext, epel, v6) --TAP_W8 (mmxext, bilinear, h) --TAP_W16(mmxext, bilinear, h) --TAP_W8 (mmxext, bilinear, v) --TAP_W16(mmxext, bilinear, v) --#endif -- - TAP_W16(sse2, epel, h6) - TAP_W16(sse2, epel, v6) - TAP_W16(sse2, bilinear, h) -@@ -166,7 +149,7 @@ - - #define HVTAP(OPT, ALIGN, TAPNUMX, TAPNUMY, SIZE, MAXHEIGHT) \ - static void ff_put_vp8_epel ## SIZE ## _h ## TAPNUMX ## v ## TAPNUMY ## _ ## OPT( \ -- uint8_t *dst, ptrdiff_t dststride, uint8_t *src, \ -+ uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ - ptrdiff_t srcstride, int height, int mx, int my) \ - { \ - LOCAL_ALIGNED(ALIGN, uint8_t, tmp, [SIZE * (MAXHEIGHT + TAPNUMY - 1)]); \ -@@ -178,16 +161,8 @@ - dst, dststride, tmpptr, SIZE, height, mx, my); \ - } - --#if ARCH_X86_32 --#define HVTAPMMX(x, y) \ --HVTAP(mmxext, 8, x, y, 4, 8) \ --HVTAP(mmxext, 8, x, y, 8, 16) -- --HVTAP(mmxext, 8, 6, 6, 16, 16) --#else - #define HVTAPMMX(x, y) \ - HVTAP(mmxext, 8, x, y, 4, 8) --#endif - - HVTAPMMX(4, 4) - HVTAPMMX(4, 6) -@@ -211,7 +186,7 @@ - - #define HVBILIN(OPT, ALIGN, SIZE, MAXHEIGHT) \ - static void ff_put_vp8_bilinear ## SIZE ## _hv_ ## OPT( \ -- uint8_t *dst, ptrdiff_t dststride, uint8_t *src, \ -+ uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ - ptrdiff_t srcstride, int height, int mx, int my) \ - { \ - LOCAL_ALIGNED(ALIGN, uint8_t, tmp, [SIZE * (MAXHEIGHT + 2)]); \ -@@ -222,31 +197,21 @@ - } - - HVBILIN(mmxext, 8, 4, 8) --#if ARCH_X86_32 --HVBILIN(mmxext, 8, 8, 16) --HVBILIN(mmxext, 8, 16, 16) --#endif - HVBILIN(sse2, 8, 8, 16) - HVBILIN(sse2, 8, 16, 16) - HVBILIN(ssse3, 8, 4, 8) - HVBILIN(ssse3, 8, 8, 16) - HVBILIN(ssse3, 8, 16, 16) - --void ff_vp8_idct_dc_add_mmx(uint8_t *dst, int16_t block[16], -- ptrdiff_t stride); - void ff_vp8_idct_dc_add_sse2(uint8_t *dst, int16_t block[16], - ptrdiff_t stride); - void ff_vp8_idct_dc_add_sse4(uint8_t *dst, int16_t block[16], - ptrdiff_t stride); --void ff_vp8_idct_dc_add4y_mmx(uint8_t *dst, int16_t block[4][16], -- ptrdiff_t stride); - void ff_vp8_idct_dc_add4y_sse2(uint8_t *dst, int16_t block[4][16], - ptrdiff_t stride); - void ff_vp8_idct_dc_add4uv_mmx(uint8_t *dst, int16_t block[2][16], - ptrdiff_t stride); --void ff_vp8_luma_dc_wht_mmx(int16_t block[4][4][16], int16_t dc[16]); - void ff_vp8_luma_dc_wht_sse(int16_t block[4][4][16], int16_t dc[16]); --void ff_vp8_idct_add_mmx(uint8_t *dst, int16_t block[16], ptrdiff_t stride); - void ff_vp8_idct_add_sse(uint8_t *dst, int16_t block[16], ptrdiff_t stride); - - #define DECLARE_LOOP_FILTER(NAME) \ -@@ -285,8 +250,6 @@ - ptrdiff_t s, \ - int e, int i, int hvt); - --DECLARE_LOOP_FILTER(mmx) --DECLARE_LOOP_FILTER(mmxext) - DECLARE_LOOP_FILTER(sse2) - DECLARE_LOOP_FILTER(ssse3) - DECLARE_LOOP_FILTER(sse4) -@@ -323,10 +286,6 @@ - int cpu_flags = av_get_cpu_flags(); - - if (EXTERNAL_MMX(cpu_flags)) { --#if ARCH_X86_32 -- c->put_vp8_epel_pixels_tab[0][0][0] = -- c->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_mmx; --#endif - c->put_vp8_epel_pixels_tab[1][0][0] = - c->put_vp8_bilinear_pixels_tab[1][0][0] = ff_put_vp8_pixels8_mmx; - } -@@ -336,12 +295,6 @@ - if (EXTERNAL_MMXEXT(cpu_flags)) { - VP8_MC_FUNC(2, 4, mmxext); - VP8_BILINEAR_MC_FUNC(2, 4, mmxext); --#if ARCH_X86_32 -- VP8_LUMA_MC_FUNC(0, 16, mmxext); -- VP8_MC_FUNC(1, 8, mmxext); -- VP8_BILINEAR_MC_FUNC(0, 16, mmxext); -- VP8_BILINEAR_MC_FUNC(1, 8, mmxext); --#endif - } - - if (EXTERNAL_SSE(cpu_flags)) { -@@ -349,7 +302,7 @@ - c->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_sse; - } - -- if (EXTERNAL_SSE2(cpu_flags) || EXTERNAL_SSE2_SLOW(cpu_flags)) { -+ if (EXTERNAL_SSE2_SLOW(cpu_flags)) { - VP8_LUMA_MC_FUNC(0, 16, sse2); - VP8_MC_FUNC(1, 8, sse2); - VP8_BILINEAR_MC_FUNC(0, 16, sse2); -@@ -374,44 +327,6 @@ - - if (EXTERNAL_MMX(cpu_flags)) { - c->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmx; --#if ARCH_X86_32 -- c->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmx; -- c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmx; -- c->vp8_idct_add = ff_vp8_idct_add_mmx; -- c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmx; -- -- c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmx; -- c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmx; -- -- c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_mmx; -- c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_mmx; -- c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmx; -- c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmx; -- -- c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmx; -- c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmx; -- c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmx; -- c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmx; --#endif -- } -- -- /* note that 4-tap width=16 functions are missing because w=16 -- * is only used for luma, and luma is always a copy or sixtap. */ -- if (EXTERNAL_MMXEXT(cpu_flags)) { --#if ARCH_X86_32 -- c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_mmxext; -- c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_mmxext; -- -- c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_mmxext; -- c->vp8_h_loop_filter16y_inner = ff_vp8_h_loop_filter16y_inner_mmxext; -- c->vp8_v_loop_filter8uv_inner = ff_vp8_v_loop_filter8uv_inner_mmxext; -- c->vp8_h_loop_filter8uv_inner = ff_vp8_h_loop_filter8uv_inner_mmxext; -- -- c->vp8_v_loop_filter16y = ff_vp8_v_loop_filter16y_mbedge_mmxext; -- c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_mmxext; -- c->vp8_v_loop_filter8uv = ff_vp8_v_loop_filter8uv_mbedge_mmxext; -- c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_mmxext; --#endif - } - - if (EXTERNAL_SSE(cpu_flags)) { -@@ -419,7 +334,7 @@ - c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_sse; - } - -- if (EXTERNAL_SSE2(cpu_flags) || EXTERNAL_SSE2_SLOW(cpu_flags)) { -+ if (EXTERNAL_SSE2_SLOW(cpu_flags)) { - c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_sse2; - - c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_sse2; -diff -Naur a/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm b/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm ---- a/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm 2023-04-06 12:49:40.258395091 +0200 -@@ -46,30 +46,6 @@ - ; void ff_vp8_h/v_loop_filter_simple_(uint8_t *dst, ptrdiff_t stride, int flim); - ;----------------------------------------------------------------------------- - --; macro called with 7 mm register indexes as argument, and 4 regular registers --; --; first 4 mm registers will carry the transposed pixel data --; the other three are scratchspace (one would be sufficient, but this allows --; for more spreading/pipelining and thus faster execution on OOE CPUs) --; --; first two regular registers are buf+4*stride and buf+5*stride --; third is -stride, fourth is +stride --%macro READ_8x4_INTERLEAVED 11 -- ; interleave 8 (A-H) rows of 4 pixels each -- movd m%1, [%8+%10*4] ; A0-3 -- movd m%5, [%9+%10*4] ; B0-3 -- movd m%2, [%8+%10*2] ; C0-3 -- movd m%6, [%8+%10] ; D0-3 -- movd m%3, [%8] ; E0-3 -- movd m%7, [%9] ; F0-3 -- movd m%4, [%9+%11] ; G0-3 -- punpcklbw m%1, m%5 ; A/B interleaved -- movd m%5, [%9+%11*2] ; H0-3 -- punpcklbw m%2, m%6 ; C/D interleaved -- punpcklbw m%3, m%7 ; E/F interleaved -- punpcklbw m%4, m%5 ; G/H interleaved --%endmacro -- - ; macro called with 7 mm register indexes as argument, and 5 regular registers - ; first 11 mean the same as READ_8x4_TRANSPOSED above - ; fifth regular register is scratchspace to reach the bottom 8 rows, it -@@ -112,26 +88,6 @@ - punpcklbw m%4, m%5 ; G/H/O/P interleaved - %endmacro - --; write 4 mm registers of 2 dwords each --; first four arguments are mm register indexes containing source data --; last four are registers containing buf+4*stride, buf+5*stride, --; -stride and +stride --%macro WRITE_4x2D 8 -- ; write out (2 dwords per register) -- movd [%5+%7*4], m%1 -- movd [%5+%7*2], m%2 -- movd [%5], m%3 -- movd [%6+%8], m%4 -- punpckhdq m%1, m%1 -- punpckhdq m%2, m%2 -- punpckhdq m%3, m%3 -- punpckhdq m%4, m%4 -- movd [%6+%7*4], m%1 -- movd [%5+%7], m%2 -- movd [%6], m%3 -- movd [%6+%8*2], m%4 --%endmacro -- - ; write 4 xmm registers of 4 dwords each - ; arguments same as WRITE_2x4D, but with an extra register, so that the 5 regular - ; registers contain buf+4*stride, buf+5*stride, buf+12*stride, -stride and +stride -@@ -192,42 +148,6 @@ - movd [%7+%9*2], m%4 - %endmacro - --; write 4 or 8 words in the mmx/xmm registers as 8 lines --; 1 and 2 are the registers to write, this can be the same (for SSE2) --; for pre-SSE4: --; 3 is a general-purpose register that we will clobber --; for SSE4: --; 3 is a pointer to the destination's 5th line --; 4 is a pointer to the destination's 4th line --; 5/6 is -stride and +stride --%macro WRITE_2x4W 6 -- movd %3d, %1 -- punpckhdq %1, %1 -- mov [%4+%5*4], %3w -- shr %3, 16 -- add %4, %6 -- mov [%4+%5*4], %3w -- -- movd %3d, %1 -- add %4, %5 -- mov [%4+%5*2], %3w -- shr %3, 16 -- mov [%4+%5 ], %3w -- -- movd %3d, %2 -- punpckhdq %2, %2 -- mov [%4 ], %3w -- shr %3, 16 -- mov [%4+%6 ], %3w -- -- movd %3d, %2 -- add %4, %6 -- mov [%4+%6 ], %3w -- shr %3, 16 -- mov [%4+%6*2], %3w -- add %4, %5 --%endmacro -- - %macro WRITE_8W 5 - %if cpuflag(sse4) - pextrw [%3+%4*4], %1, 0 -@@ -269,29 +189,19 @@ - - %macro SIMPLE_LOOPFILTER 2 - cglobal vp8_%1_loop_filter_simple, 3, %2, 8, dst, stride, flim, cntr --%if mmsize == 8 ; mmx/mmxext -- mov cntrq, 2 --%endif - %if cpuflag(ssse3) - pxor m0, m0 - %endif - SPLATB_REG m7, flim, m0 ; splat "flim" into register - - ; set up indexes to address 4 rows --%if mmsize == 8 -- DEFINE_ARGS dst1, mstride, stride, cntr, dst2 --%else - DEFINE_ARGS dst1, mstride, stride, dst3, dst2 --%endif - mov strideq, mstrideq - neg mstrideq - %ifidn %1, h - lea dst1q, [dst1q+4*strideq-2] - %endif - --%if mmsize == 8 ; mmx / mmxext --.next8px: --%endif - %ifidn %1, v - ; read 4 half/full rows of pixels - mova m0, [dst1q+mstrideq*2] ; p1 -@@ -301,11 +211,7 @@ - %else ; h - lea dst2q, [dst1q+ strideq] - --%if mmsize == 8 ; mmx/mmxext -- READ_8x4_INTERLEAVED 0, 1, 2, 3, 4, 5, 6, dst1q, dst2q, mstrideq, strideq --%else ; sse2 - READ_16x4_INTERLEAVED 0, 1, 2, 3, 4, 5, 6, dst1q, dst2q, mstrideq, strideq, dst3q --%endif - TRANSPOSE4x4W 0, 1, 2, 3, 4 - %endif - -@@ -380,7 +286,6 @@ - inc dst1q - SBUTTERFLY bw, 6, 4, 0 - --%if mmsize == 16 ; sse2 - %if cpuflag(sse4) - inc dst2q - %endif -@@ -390,35 +295,11 @@ - inc dst3q - %endif - WRITE_8W m4, dst3q, dst2q, mstrideq, strideq --%else ; mmx/mmxext -- WRITE_2x4W m6, m4, dst2q, dst1q, mstrideq, strideq --%endif - %endif - --%if mmsize == 8 ; mmx/mmxext -- ; next 8 pixels --%ifidn %1, v -- add dst1q, 8 ; advance 8 cols = pixels --%else ; h -- lea dst1q, [dst1q+strideq*8-1] ; advance 8 rows = lines --%endif -- dec cntrq -- jg .next8px -- REP_RET --%else ; sse2 - RET --%endif - %endmacro - --%if ARCH_X86_32 --INIT_MMX mmx --SIMPLE_LOOPFILTER v, 4 --SIMPLE_LOOPFILTER h, 5 --INIT_MMX mmxext --SIMPLE_LOOPFILTER v, 4 --SIMPLE_LOOPFILTER h, 5 --%endif -- - INIT_XMM sse2 - SIMPLE_LOOPFILTER v, 3 - SIMPLE_LOOPFILTER h, 5 -@@ -485,9 +366,6 @@ - - %if %2 == 8 ; chroma - DEFINE_ARGS dst1, dst8, mstride, stride, dst2 --%elif mmsize == 8 -- DEFINE_ARGS dst1, mstride, stride, dst2, cntr -- mov cntrq, 2 - %else - DEFINE_ARGS dst1, mstride, stride, dst2, dst8 - %endif -@@ -500,9 +378,6 @@ - %endif - %endif - --%if mmsize == 8 --.next8px: --%endif - ; read - lea dst2q, [dst1q+strideq] - %ifidn %1, v -@@ -527,33 +402,7 @@ - movhps m7, [dst8q+ strideq*2] - add dst8q, mstrideq - %endif --%elif mmsize == 8 ; mmx/mmxext (h) -- ; read 8 rows of 8px each -- movu m0, [dst1q+mstrideq*4] -- movu m1, [dst2q+mstrideq*4] -- movu m2, [dst1q+mstrideq*2] -- movu m3, [dst1q+mstrideq ] -- movu m4, [dst1q] -- movu m5, [dst2q] -- movu m6, [dst2q+ strideq ] -- -- ; 8x8 transpose -- TRANSPOSE4x4B 0, 1, 2, 3, 7 -- mova m_q0backup, m1 -- movu m7, [dst2q+ strideq*2] -- TRANSPOSE4x4B 4, 5, 6, 7, 1 -- SBUTTERFLY dq, 0, 4, 1 ; p3/p2 -- SBUTTERFLY dq, 2, 6, 1 ; q0/q1 -- SBUTTERFLY dq, 3, 7, 1 ; q2/q3 -- mova m1, m_q0backup -- mova m_q0backup, m2 ; store q0 -- SBUTTERFLY dq, 1, 5, 2 ; p1/p0 -- mova m_p0backup, m5 ; store p0 -- SWAP 1, 4 -- SWAP 2, 4 -- SWAP 6, 3 -- SWAP 5, 3 --%else ; sse2 (h) -+%else ; h - %if %2 == 16 - lea dst8q, [dst1q+ strideq*8] - %endif -@@ -641,25 +490,9 @@ - psubusb m6, m5 ; q2-q1 - por m6, m4 ; abs(q2-q1) - --%if notcpuflag(mmxext) -- mova m4, m_flimI -- pxor m3, m3 -- psubusb m0, m4 -- psubusb m1, m4 -- psubusb m7, m4 -- psubusb m6, m4 -- pcmpeqb m0, m3 ; abs(p3-p2) <= I -- pcmpeqb m1, m3 ; abs(p2-p1) <= I -- pcmpeqb m7, m3 ; abs(q3-q2) <= I -- pcmpeqb m6, m3 ; abs(q2-q1) <= I -- pand m0, m1 -- pand m7, m6 -- pand m0, m7 --%else ; mmxext/sse2 - pmaxub m0, m1 - pmaxub m6, m7 - pmaxub m0, m6 --%endif - - ; normal_limit and high_edge_variance for p1-p0, q1-q0 - SWAP 7, 3 ; now m7 is zero -@@ -681,18 +514,8 @@ - psubusb m1, m3 ; p1-p0 - psubusb m6, m2 ; p0-p1 - por m1, m6 ; abs(p1-p0) --%if notcpuflag(mmxext) -- mova m6, m1 -- psubusb m1, m4 -- psubusb m6, m_hevthr -- pcmpeqb m1, m7 ; abs(p1-p0) <= I -- pcmpeqb m6, m7 ; abs(p1-p0) <= hev_thresh -- pand m0, m1 -- mova m_maskres, m6 --%else ; mmxext/sse2 - pmaxub m0, m1 ; max_I - SWAP 1, 4 ; max_hev_thresh --%endif - - SWAP 6, 4 ; now m6 is I - %ifidn %1, v -@@ -712,17 +535,6 @@ - psubusb m1, m5 ; q0-q1 - psubusb m7, m4 ; q1-q0 - por m1, m7 ; abs(q1-q0) --%if notcpuflag(mmxext) -- mova m7, m1 -- psubusb m1, m6 -- psubusb m7, m_hevthr -- pxor m6, m6 -- pcmpeqb m1, m6 ; abs(q1-q0) <= I -- pcmpeqb m7, m6 ; abs(q1-q0) <= hev_thresh -- mova m6, m_maskres -- pand m0, m1 ; abs([pq][321]-[pq][210]) <= I -- pand m6, m7 --%else ; mmxext/sse2 - pxor m7, m7 - pmaxub m0, m1 - pmaxub m6, m1 -@@ -730,7 +542,6 @@ - psubusb m6, m_hevthr - pcmpeqb m0, m7 ; max(abs(..)) <= I - pcmpeqb m6, m7 ; !(max(abs..) > thresh) --%endif - %ifdef m12 - SWAP 6, 12 - %else -@@ -820,25 +631,12 @@ - %else - mova m6, m_maskres - %endif --%if notcpuflag(mmxext) -- mova m7, [pb_1] --%else ; mmxext/sse2 - pxor m7, m7 --%endif - pand m0, m6 - pand m1, m6 --%if notcpuflag(mmxext) -- paddusb m0, m7 -- pand m1, [pb_FE] -- pandn m7, m0 -- psrlq m1, 1 -- psrlq m7, 1 -- SWAP 0, 7 --%else ; mmxext/sse2 - psubusb m1, [pb_1] - pavgb m0, m7 ; a - pavgb m1, m7 ; -a --%endif - psubusb m5, m0 - psubusb m2, m1 - paddusb m5, m1 ; q1-a -@@ -863,51 +661,13 @@ - ; 4x8/16 transpose - TRANSPOSE4x4B 2, 3, 4, 5, 6 - --%if mmsize == 8 ; mmx/mmxext (h) -- WRITE_4x2D 2, 3, 4, 5, dst1q, dst2q, mstrideq, strideq --%else ; sse2 (h) - lea dst8q, [dst8q+mstrideq +2] - WRITE_4x4D 2, 3, 4, 5, dst1q, dst2q, dst8q, mstrideq, strideq, %2 - %endif --%endif - --%if mmsize == 8 --%if %2 == 8 ; chroma --%ifidn %1, h -- sub dst1q, 2 --%endif -- cmp dst1q, dst8q -- mov dst1q, dst8q -- jnz .next8px --%else --%ifidn %1, h -- lea dst1q, [dst1q+ strideq*8-2] --%else ; v -- add dst1q, 8 --%endif -- dec cntrq -- jg .next8px --%endif -- REP_RET --%else ; mmsize == 16 - RET --%endif - %endmacro - --%if ARCH_X86_32 --INIT_MMX mmx --INNER_LOOPFILTER v, 16 --INNER_LOOPFILTER h, 16 --INNER_LOOPFILTER v, 8 --INNER_LOOPFILTER h, 8 -- --INIT_MMX mmxext --INNER_LOOPFILTER v, 16 --INNER_LOOPFILTER h, 16 --INNER_LOOPFILTER v, 8 --INNER_LOOPFILTER h, 8 --%endif -- - INIT_XMM sse2 - INNER_LOOPFILTER v, 16 - INNER_LOOPFILTER h, 16 -@@ -992,9 +752,6 @@ - - %if %2 == 8 ; chroma - DEFINE_ARGS dst1, dst8, mstride, stride, dst2 --%elif mmsize == 8 -- DEFINE_ARGS dst1, mstride, stride, dst2, cntr -- mov cntrq, 2 - %else - DEFINE_ARGS dst1, mstride, stride, dst2, dst8 - %endif -@@ -1007,9 +764,6 @@ - %endif - %endif - --%if mmsize == 8 --.next8px: --%endif - ; read - lea dst2q, [dst1q+ strideq ] - %ifidn %1, v -@@ -1034,33 +788,7 @@ - movhps m7, [dst8q+ strideq*2] - add dst8q, mstrideq - %endif --%elif mmsize == 8 ; mmx/mmxext (h) -- ; read 8 rows of 8px each -- movu m0, [dst1q+mstrideq*4] -- movu m1, [dst2q+mstrideq*4] -- movu m2, [dst1q+mstrideq*2] -- movu m3, [dst1q+mstrideq ] -- movu m4, [dst1q] -- movu m5, [dst2q] -- movu m6, [dst2q+ strideq ] -- -- ; 8x8 transpose -- TRANSPOSE4x4B 0, 1, 2, 3, 7 -- mova m_q0backup, m1 -- movu m7, [dst2q+ strideq*2] -- TRANSPOSE4x4B 4, 5, 6, 7, 1 -- SBUTTERFLY dq, 0, 4, 1 ; p3/p2 -- SBUTTERFLY dq, 2, 6, 1 ; q0/q1 -- SBUTTERFLY dq, 3, 7, 1 ; q2/q3 -- mova m1, m_q0backup -- mova m_q0backup, m2 ; store q0 -- SBUTTERFLY dq, 1, 5, 2 ; p1/p0 -- mova m_p0backup, m5 ; store p0 -- SWAP 1, 4 -- SWAP 2, 4 -- SWAP 6, 3 -- SWAP 5, 3 --%else ; sse2 (h) -+%else ; h - %if %2 == 16 - lea dst8q, [dst1q+ strideq*8 ] - %endif -@@ -1150,25 +878,9 @@ - psubusb m6, m5 ; q2-q1 - por m6, m4 ; abs(q2-q1) - --%if notcpuflag(mmxext) -- mova m4, m_flimI -- pxor m3, m3 -- psubusb m0, m4 -- psubusb m1, m4 -- psubusb m7, m4 -- psubusb m6, m4 -- pcmpeqb m0, m3 ; abs(p3-p2) <= I -- pcmpeqb m1, m3 ; abs(p2-p1) <= I -- pcmpeqb m7, m3 ; abs(q3-q2) <= I -- pcmpeqb m6, m3 ; abs(q2-q1) <= I -- pand m0, m1 -- pand m7, m6 -- pand m0, m7 --%else ; mmxext/sse2 - pmaxub m0, m1 - pmaxub m6, m7 - pmaxub m0, m6 --%endif - - ; normal_limit and high_edge_variance for p1-p0, q1-q0 - SWAP 7, 3 ; now m7 is zero -@@ -1190,18 +902,8 @@ - psubusb m1, m3 ; p1-p0 - psubusb m6, m2 ; p0-p1 - por m1, m6 ; abs(p1-p0) --%if notcpuflag(mmxext) -- mova m6, m1 -- psubusb m1, m4 -- psubusb m6, m_hevthr -- pcmpeqb m1, m7 ; abs(p1-p0) <= I -- pcmpeqb m6, m7 ; abs(p1-p0) <= hev_thresh -- pand m0, m1 -- mova m_maskres, m6 --%else ; mmxext/sse2 - pmaxub m0, m1 ; max_I - SWAP 1, 4 ; max_hev_thresh --%endif - - SWAP 6, 4 ; now m6 is I - %ifidn %1, v -@@ -1221,17 +923,6 @@ - psubusb m1, m5 ; q0-q1 - psubusb m7, m4 ; q1-q0 - por m1, m7 ; abs(q1-q0) --%if notcpuflag(mmxext) -- mova m7, m1 -- psubusb m1, m6 -- psubusb m7, m_hevthr -- pxor m6, m6 -- pcmpeqb m1, m6 ; abs(q1-q0) <= I -- pcmpeqb m7, m6 ; abs(q1-q0) <= hev_thresh -- mova m6, m_maskres -- pand m0, m1 ; abs([pq][321]-[pq][210]) <= I -- pand m6, m7 --%else ; mmxext/sse2 - pxor m7, m7 - pmaxub m0, m1 - pmaxub m6, m1 -@@ -1239,7 +930,6 @@ - psubusb m6, m_hevthr - pcmpeqb m0, m7 ; max(abs(..)) <= I - pcmpeqb m6, m7 ; !(max(abs..) > thresh) --%endif - %ifdef m12 - SWAP 6, 12 - %else -@@ -1510,11 +1200,6 @@ - TRANSPOSE4x4B 1, 2, 3, 4, 0 - SBUTTERFLY bw, 5, 6, 0 - --%if mmsize == 8 ; mmx/mmxext (h) -- WRITE_4x2D 1, 2, 3, 4, dst1q, dst2q, mstrideq, strideq -- add dst1q, 4 -- WRITE_2x4W m5, m6, dst2q, dst1q, mstrideq, strideq --%else ; sse2 (h) - lea dst8q, [dst8q+mstrideq+1] - WRITE_4x4D 1, 2, 3, 4, dst1q, dst2q, dst8q, mstrideq, strideq, %2 - lea dst1q, [dst2q+mstrideq+4] -@@ -1528,45 +1213,10 @@ - %endif - WRITE_8W m6, dst2q, dst8q, mstrideq, strideq - %endif --%endif - --%if mmsize == 8 --%if %2 == 8 ; chroma --%ifidn %1, h -- sub dst1q, 5 --%endif -- cmp dst1q, dst8q -- mov dst1q, dst8q -- jnz .next8px --%else --%ifidn %1, h -- lea dst1q, [dst1q+ strideq*8-5] --%else ; v -- add dst1q, 8 --%endif -- dec cntrq -- jg .next8px --%endif -- REP_RET --%else ; mmsize == 16 - RET --%endif - %endmacro - --%if ARCH_X86_32 --INIT_MMX mmx --MBEDGE_LOOPFILTER v, 16 --MBEDGE_LOOPFILTER h, 16 --MBEDGE_LOOPFILTER v, 8 --MBEDGE_LOOPFILTER h, 8 -- --INIT_MMX mmxext --MBEDGE_LOOPFILTER v, 16 --MBEDGE_LOOPFILTER h, 16 --MBEDGE_LOOPFILTER v, 8 --MBEDGE_LOOPFILTER h, 8 --%endif -- - INIT_XMM sse2 - MBEDGE_LOOPFILTER v, 16 - MBEDGE_LOOPFILTER h, 16 -diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c ---- a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c 2023-04-06 12:49:40.258395091 +0200 -@@ -22,7 +22,6 @@ - - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" --#include "libavutil/mem.h" - #include "libavutil/x86/cpu.h" - #include "libavcodec/vp9dsp.h" - #include "libavcodec/x86/vp9dsp_init.h" -@@ -55,6 +54,8 @@ - decl_ipred_fn(dl, 32, 16, avx2); - decl_ipred_fn(dr, 16, 16, avx2); - decl_ipred_fn(dr, 32, 16, avx2); -+decl_ipred_fn(vl, 16, 16, avx2); -+decl_ipred_fn(hd, 16, 16, avx2); - - #define decl_ipred_dir_funcs(type) \ - decl_ipred_fns(type, 16, sse2, sse2); \ -@@ -140,6 +141,8 @@ - init_ipred_func(dl, DIAG_DOWN_LEFT, 16, 16, avx2); - init_ipred_func(dl, DIAG_DOWN_LEFT, 32, 16, avx2); - init_ipred_func(dr, DIAG_DOWN_RIGHT, 16, 16, avx2); -+ init_ipred_func(vl, VERT_LEFT, 16, 16, avx2); -+ init_ipred_func(hd, HOR_DOWN, 16, 16, avx2); - #if ARCH_X86_64 - init_ipred_func(dr, DIAG_DOWN_RIGHT, 32, 16, avx2); - #endif -diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c ---- a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c 2023-04-06 12:49:40.258395091 +0200 -@@ -22,7 +22,6 @@ - - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" --#include "libavutil/mem.h" - #include "libavutil/x86/cpu.h" - #include "libavcodec/vp9dsp.h" - #include "libavcodec/x86/vp9dsp_init.h" -diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init.c b/media/ffvpx/libavcodec/x86/vp9dsp_init.c ---- a/media/ffvpx/libavcodec/x86/vp9dsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp9dsp_init.c 2023-04-06 12:49:40.258395091 +0200 -@@ -22,7 +22,6 @@ - - #include "libavutil/attributes.h" - #include "libavutil/cpu.h" --#include "libavutil/mem.h" - #include "libavutil/x86/cpu.h" - #include "libavcodec/vp9dsp.h" - #include "libavcodec/x86/vp9dsp_init.h" -diff -Naur a/media/ffvpx/libavcodec/x86/vp9dsp_init.h b/media/ffvpx/libavcodec/x86/vp9dsp_init.h ---- a/media/ffvpx/libavcodec/x86/vp9dsp_init.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp9dsp_init.h 2023-04-06 12:49:40.258395091 +0200 -@@ -23,6 +23,7 @@ - #ifndef AVCODEC_X86_VP9DSP_INIT_H - #define AVCODEC_X86_VP9DSP_INIT_H - -+#include "libavutil/attributes.h" - #include "libavutil/mem_internal.h" - - #include "libavcodec/vp9dsp.h" -diff -Naur a/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm b/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm ---- a/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm 2023-04-06 12:49:40.258395091 +0200 -@@ -1222,6 +1222,111 @@ - mova [dst3q+strideq*4], m5 ; 7 - RET - -+cglobal vp9_ipred_vl_16x16_16, 4, 5, 7, dst, stride, l, a -+ movifnidn aq, amp -+ mova m0, [aq] ; abcdefghijklmnop -+ vpbroadcastw xm1, [aq+30] ; pppppppp -+ vperm2i128 m2, m0, m1, q0201 ; ijklmnoppppppppp -+ vpalignr m3, m2, m0, 2 ; bcdefghijklmnopp -+ vperm2i128 m4, m3, m1, q0201 ; jklmnopppppppppp -+ vpalignr m5, m2, m0, 4 ; cdefghijklmnoppp -+ vperm2i128 m6, m5, m1, q0201 ; klmnoppppppppppp -+ LOWPASS 5, 3, 0 ; BCDEFGHIJKLMNOPP -+ LOWPASS 6, 4, 2 ; JKLMNOPPPPPPPPPP -+ pavgw m3, m0 ; abcdefghijklmnop -+ pavgw m4, m2 ; ijklmnoppppppppp -+ DEFINE_ARGS dst, stride, stride3, stride5, dst4 -+ lea dst4q, [dstq+strideq*4] -+ lea stride3q, [strideq*3] -+ lea stride5q, [stride3q+strideq*2] -+ -+ mova [dstq+strideq*0], m3 ; 0 abcdefghijklmnop -+ mova [dstq+strideq*1], m5 ; 1 BCDEFGHIJKLMNOPP -+ vpalignr m0, m4, m3, 2 -+ vpalignr m1, m6, m5, 2 -+ mova [dstq+strideq*2 ], m0 ; 2 bcdefghijklmnopp -+ mova [dstq+stride3q*1], m1 ; 3 CDEFGHIJKLMNOPPP -+ vpalignr m0, m4, m3, 4 -+ vpalignr m1, m6, m5, 4 -+ mova [dst4q+strideq*0], m0 ; 4 cdefghijklmnoppp -+ mova [dstq+stride5q*1], m1 ; 5 DEFGHIJKLMNOPPPP -+ vpalignr m0, m4, m3, 6 -+ vpalignr m1, m6, m5, 6 -+ mova [ dstq+stride3q*2], m0 ; 6 defghijklmnopppp -+ mova [dst4q+stride3q*1], m1 ; 7 EFGHIJKLMNOPPPPP -+ vpalignr m0, m4, m3, 8 -+ vpalignr m1, m6, m5, 8 -+ mova [ dstq+strideq*8], m0 ; 8 efghijklmnoppppp -+ mova [dst4q+stride5q*1], m1 ; 9 FGHIJKLMNOPPPPPP -+ vpalignr m0, m4, m3, 10 -+ mova [dstq+stride5q*2], m0 ; 10 fghijklmnopppppp -+ vpalignr m0, m4, m3, 12 -+ mova [dst4q+strideq*8], m0 ; 12 ghijklmnoppppppp -+ vpalignr m0, m4, m3, 14 -+ mova [dst4q+stride5q*2], m0 ; 14 hijklmnopppppppp -+ sub dst4q, strideq -+ vpalignr m1, m6, m5, 10 -+ mova [dst4q+strideq*8], m1 ; 11 GHIJKLMNOPPPPPPP -+ vpalignr m1, m6, m5, 12 -+ mova [dst4q+stride5q*2], m1 ; 13 HIJKLMNOPPPPPPPP -+ vpalignr m1, m6, m5, 14 -+ mova [dst4q+stride3q*4], m1 ; 15 IJKLMNOPPPPPPPPP -+ RET -+ -+cglobal vp9_ipred_hd_16x16_16, 4, 5, 7, dst, stride, l, a -+ movu m0, [aq-2] ; *abcdefghijklmno -+ mova m1, [lq] ; klmnopqrstuvwxyz -+ vperm2i128 m2, m1, m0, q0201 ; stuvwxyz*abcdefg -+ vpalignr m3, m2, m1, 2 ; lmnopqrstuvwxyz* -+ vpalignr m4, m2, m1, 4 ; mnopqrstuvwxyz*a -+ LOWPASS 4, 3, 1 ; LMNOPQRSTUVWXYZ# -+ pavgw m3, m1 ; klmnopqrstuvwxyz -+ mova m1, [aq] ; abcdefghijklmnop -+ movu m2, [aq+2] ; bcdefghijklmnop. -+ LOWPASS 2, 1, 0 ; ABCDEFGHIJKLMNO. -+ vpunpcklwd m0, m3, m4 ; kLlMmNnOsTtUuVvW -+ vpunpckhwd m1, m3, m4 ; oPpQqRrSwXxYyZz# -+ vperm2i128 m3, m1, m0, q0002 ; kLlMmNnOoPpQqRrS -+ vperm2i128 m4, m0, m1, q0301 ; sTtUuVvWwXxYyZz# -+ vperm2i128 m0, m4, m2, q0201 ; wXxYyZz#ABCDEFGH -+ vperm2i128 m1, m3, m4, q0201 ; oPpQqRrSsTtUuVvW -+ DEFINE_ARGS dst, stride, stride3, stride5, dst5 -+ lea stride3q, [strideq*3] -+ lea stride5q, [stride3q+strideq*2] -+ lea dst5q, [dstq+stride5q] -+ -+ mova [dst5q+stride5q*2], m3 ; 15 kLlMmNnOoPpQqRrS -+ mova [dst5q+stride3q*2], m1 ; 11 oPpQqRrSsTtUuVvW -+ mova [dst5q+strideq*2], m4 ; 7 sTtUuVvWwXxYyZz# -+ mova [dstq+stride3q*1], m0 ; 3 wXxYyZz#ABCDEFGH -+ vpalignr m5, m4, m1, 4 -+ mova [dstq+stride5q*2], m5 ; 10 pQqRrSsTtUuVvWwX -+ vpalignr m5, m0, m4, 4 -+ vpalignr m6, m2, m0, 4 -+ mova [dstq+stride3q*2], m5 ; 6 tUuVvWwXxYyZz#AB -+ mova [dstq+strideq*2], m6 ; 2 xYyZz#ABCDEFGHIJ -+ vpalignr m5, m4, m1, 8 -+ mova [dst5q+strideq*4], m5 ; 9 qRrSsTtUuVvWwXxY -+ vpalignr m5, m0, m4, 8 -+ vpalignr m6, m2, m0, 8 -+ mova [dstq+stride5q*1], m5 ; 5 uVvWwXxYyZz#ABCD -+ mova [dstq+strideq*1], m6 ; 1 yZz#ABCDEFGHIJKL -+ vpalignr m5, m1, m3, 12 -+ vpalignr m6, m4, m1, 12 -+ mova [dstq+stride3q*4], m5 ; 12 nOoPpQqRrSsTtUuV -+ mova [dst5q+stride3q], m6 ; 8 rSsTtUuVvWwXxYyZ -+ vpalignr m5, m0, m4, 12 -+ vpalignr m6, m2, m0, 12 -+ mova [dstq+strideq*4], m5 ; 4 nOoPpQqRrSsTtUuV -+ mova [dstq+strideq*0], m6 ; 0 z#ABCDEFGHIJKLMN -+ sub dst5q, strideq -+ vpalignr m5, m1, m3, 4 -+ mova [dst5q+stride5q*2], m5 ; 14 lMmNnOoPpQqRrSsT -+ sub dst5q, strideq -+ vpalignr m5, m1, m3, 8 -+ mova [dst5q+stride5q*2], m5 ; 13 mNnOoPpQqRrSsTtU -+ RET -+ - %if ARCH_X86_64 - cglobal vp9_ipred_dr_32x32_16, 4, 7, 10, dst, stride, l, a - mova m0, [lq+mmsize*0+0] ; l[0-15] -diff -Naur a/media/ffvpx/libavcodec/x86/vp9mc.asm b/media/ffvpx/libavcodec/x86/vp9mc.asm ---- a/media/ffvpx/libavcodec/x86/vp9mc.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vp9mc.asm 2023-04-06 12:49:40.258395091 +0200 -@@ -604,7 +604,12 @@ - %%pavg m0, [dstq] - %%pavg m1, [dstq+d%3] - %%pavg m2, [dstq+d%4] -+%if %2 == 4 -+ %%srcfn m4, [dstq+d%5] -+ %%pavg m3, m4 -+%else - %%pavg m3, [dstq+d%5] -+%endif - %if %2/mmsize == 8 - %%pavg m4, [dstq+mmsize*4] - %%pavg m5, [dstq+mmsize*5] -diff -Naur a/media/ffvpx/libavcodec/x86/vpx_arith.h b/media/ffvpx/libavcodec/x86/vpx_arith.h ---- a/media/ffvpx/libavcodec/x86/vpx_arith.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavcodec/x86/vpx_arith.h 2023-04-06 12:50:06.975471215 +0200 -@@ -0,0 +1,55 @@ -+/** -+ * VP5 and VP6 compatible video decoder (arith decoder) -+ * -+ * Copyright (C) 2006 Aurelien Jacobs -+ * Copyright (C) 2010 Eli Friedman -+ * -+ * 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 -+ */ -+ -+#ifndef AVCODEC_X86_VPX_ARITH_H -+#define AVCODEC_X86_VPX_ARITH_H -+ -+#include "libavutil/x86/asm.h" -+ -+#if HAVE_INLINE_ASM && HAVE_FAST_CMOV && HAVE_6REGS -+#include "libavutil/attributes.h" -+ -+#define vpx_rac_get_prob vpx_rac_get_prob -+static av_always_inline int vpx_rac_get_prob(VPXRangeCoder *c, uint8_t prob) -+{ -+ unsigned int code_word = vpx_rac_renorm(c); -+ unsigned int low = 1 + (((c->high - 1) * prob) >> 8); -+ unsigned int low_shift = low << 16; -+ int bit = 0; -+ c->code_word = code_word; -+ -+ __asm__( -+ "subl %4, %1 \n\t" -+ "subl %3, %2 \n\t" -+ "setae %b0 \n\t" -+ "cmovb %4, %1 \n\t" -+ "cmovb %5, %2 \n\t" -+ : "+q"(bit), "+&r"(c->high), "+&r"(c->code_word) -+ : "r"(low_shift), "r"(low), "r"(code_word) -+ ); -+ -+ return bit; -+} -+#endif -+ -+#endif /* AVCODEC_X86_VPX_ARITH_H */ -diff -Naur a/media/ffvpx/libavcodec/xiph.c b/media/ffvpx/libavcodec/xiph.c ---- a/media/ffvpx/libavcodec/xiph.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/xiph.c 2023-04-06 12:49:40.258395091 +0200 -@@ -18,6 +18,8 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include -+#include "libavutil/error.h" - #include "libavutil/intreadwrite.h" - #include "xiph.h" - -diff -Naur a/media/ffvpx/libavcodec/xiph.h b/media/ffvpx/libavcodec/xiph.h ---- a/media/ffvpx/libavcodec/xiph.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavcodec/xiph.h 2023-04-06 12:49:40.258395091 +0200 -@@ -21,7 +21,7 @@ - #ifndef AVCODEC_XIPH_H - #define AVCODEC_XIPH_H - --#include "libavutil/common.h" -+#include - - /** - * Split a single extradata buffer into the three headers that most -diff -Naur a/media/ffvpx/libavutil/aarch64/asm.S b/media/ffvpx/libavutil/aarch64/asm.S ---- a/media/ffvpx/libavutil/aarch64/asm.S 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/aarch64/asm.S 2023-04-06 12:49:40.258395091 +0200 -@@ -36,6 +36,125 @@ - # define __has_feature(x) 0 - #endif - -+ -+/* Support macros for -+ * - Armv8.3-A Pointer Authentication and -+ * - Armv8.5-A Branch Target Identification -+ * features which require emitting a .note.gnu.property section with the -+ * appropriate architecture-dependent feature bits set. -+ * -+ * |AARCH64_SIGN_LINK_REGISTER| and |AARCH64_VALIDATE_LINK_REGISTER| expand to -+ * PACIxSP and AUTIxSP, respectively. |AARCH64_SIGN_LINK_REGISTER| should be -+ * used immediately before saving the LR register (x30) to the stack. -+ * |AARCH64_VALIDATE_LINK_REGISTER| should be used immediately after restoring -+ * it. Note |AARCH64_SIGN_LINK_REGISTER|'s modifications to LR must be undone -+ * with |AARCH64_VALIDATE_LINK_REGISTER| before RET. The SP register must also -+ * have the same value at the two points. For example: -+ * -+ * .global f -+ * f: -+ * AARCH64_SIGN_LINK_REGISTER -+ * stp x29, x30, [sp, #-96]! -+ * mov x29, sp -+ * ... -+ * ldp x29, x30, [sp], #96 -+ * AARCH64_VALIDATE_LINK_REGISTER -+ * ret -+ * -+ * |AARCH64_VALID_CALL_TARGET| expands to BTI 'c'. Either it, or -+ * |AARCH64_SIGN_LINK_REGISTER|, must be used at every point that may be an -+ * indirect call target. In particular, all symbols exported from a file must -+ * begin with one of these macros. For example, a leaf function that does not -+ * save LR can instead use |AARCH64_VALID_CALL_TARGET|: -+ * -+ * .globl return_zero -+ * return_zero: -+ * AARCH64_VALID_CALL_TARGET -+ * mov x0, #0 -+ * ret -+ * -+ * A non-leaf function which does not immediately save LR may need both macros -+ * because |AARCH64_SIGN_LINK_REGISTER| appears late. For example, the function -+ * may jump to an alternate implementation before setting up the stack: -+ * -+ * .globl with_early_jump -+ * with_early_jump: -+ * AARCH64_VALID_CALL_TARGET -+ * cmp x0, #128 -+ * b.lt .Lwith_early_jump_128 -+ * AARCH64_SIGN_LINK_REGISTER -+ * stp x29, x30, [sp, #-96]! -+ * mov x29, sp -+ * ... -+ * ldp x29, x30, [sp], #96 -+ * AARCH64_VALIDATE_LINK_REGISTER -+ * ret -+ * -+ * .Lwith_early_jump_128: -+ * ... -+ * ret -+ * -+ * These annotations are only required with indirect calls. Private symbols that -+ * are only the target of direct calls do not require annotations. Also note -+ * that |AARCH64_VALID_CALL_TARGET| is only valid for indirect calls (BLR), not -+ * indirect jumps (BR). Indirect jumps in assembly are supported through -+ * |AARCH64_VALID_JUMP_TARGET|. Landing Pads which shall serve for jumps and -+ * calls can be created using |AARCH64_VALID_JUMP_CALL_TARGET|. -+ * -+ * Although not necessary, it is safe to use these macros in 32-bit ARM -+ * assembly. This may be used to simplify dual 32-bit and 64-bit files. -+ * -+ * References: -+ * - "ELF for the Arm® 64-bit Architecture" -+ * https: *github.com/ARM-software/abi-aa/blob/master/aaelf64/aaelf64.rst -+ * - "Providing protection for complex software" -+ * https://developer.arm.com/architectures/learn-the-architecture/providing-protection-for-complex-software -+ */ -+#if defined(__ARM_FEATURE_BTI_DEFAULT) && (__ARM_FEATURE_BTI_DEFAULT == 1) -+# define GNU_PROPERTY_AARCH64_BTI (1 << 0) // Has BTI -+# define AARCH64_VALID_CALL_TARGET hint #34 // BTI 'c' -+# define AARCH64_VALID_JUMP_TARGET hint #38 // BTI 'j' -+#else -+# define GNU_PROPERTY_AARCH64_BTI 0 // No BTI -+# define AARCH64_VALID_CALL_TARGET -+# define AARCH64_VALID_JUMP_TARGET -+#endif -+ -+#if defined(__ARM_FEATURE_PAC_DEFAULT) -+# if ((__ARM_FEATURE_PAC_DEFAULT & (1 << 0)) != 0) // authentication using key A -+# define AARCH64_SIGN_LINK_REGISTER paciasp -+# define AARCH64_VALIDATE_LINK_REGISTER autiasp -+# elif ((__ARM_FEATURE_PAC_DEFAULT & (1 << 1)) != 0) // authentication using key B -+# define AARCH64_SIGN_LINK_REGISTER pacibsp -+# define AARCH64_VALIDATE_LINK_REGISTER autibsp -+# else -+# error Pointer authentication defines no valid key! -+# endif -+# if ((__ARM_FEATURE_PAC_DEFAULT & (1 << 2)) != 0) -+# error Authentication of leaf functions is enabled but not supported in FFmpeg! -+# endif -+# define GNU_PROPERTY_AARCH64_PAC (1 << 1) -+#else -+# define GNU_PROPERTY_AARCH64_PAC 0 -+# define AARCH64_SIGN_LINK_REGISTER -+# define AARCH64_VALIDATE_LINK_REGISTER -+#endif -+ -+ -+#if (GNU_PROPERTY_AARCH64_BTI != 0 || GNU_PROPERTY_AARCH64_PAC != 0) && defined(__ELF__) -+ .pushsection .note.gnu.property, "a" -+ .balign 8 -+ .long 4 -+ .long 0x10 -+ .long 0x5 -+ .asciz "GNU" -+ .long 0xc0000000 /* GNU_PROPERTY_AARCH64_FEATURE_1_AND */ -+ .long 4 -+ .long (GNU_PROPERTY_AARCH64_BTI | GNU_PROPERTY_AARCH64_PAC) -+ .long 0 -+ .popsection -+#endif -+ - .macro function name, export=0, align=2 - .macro endfunc - ELF .size \name, . - \name -@@ -49,6 +168,7 @@ - ELF .type EXTERN_ASM\name, %function - FUNC .func EXTERN_ASM\name - EXTERN_ASM\name: -+ AARCH64_VALID_CALL_TARGET - .else - ELF .type \name, %function - FUNC .func \name -diff -Naur a/media/ffvpx/libavutil/aarch64/bswap.h b/media/ffvpx/libavutil/aarch64/bswap.h ---- a/media/ffvpx/libavutil/aarch64/bswap.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/aarch64/bswap.h 2023-04-06 12:50:06.975471215 +0200 -@@ -28,24 +28,29 @@ - #define av_bswap16 av_bswap16 - static av_always_inline av_const unsigned av_bswap16(unsigned x) - { -- __asm__("rev16 %w0, %w0" : "+r"(x)); -- return x; -+ unsigned y; -+ -+ __asm__("rev16 %w0, %w1" : "=r"(y) : "r"(x)); -+ return y; - } - - #define av_bswap32 av_bswap32 - static av_always_inline av_const uint32_t av_bswap32(uint32_t x) - { -- __asm__("rev %w0, %w0" : "+r"(x)); -- return x; -+ uint32_t y; -+ -+ __asm__("rev %w0, %w1" : "=r"(y) : "r"(x)); -+ return y; - } - - #define av_bswap64 av_bswap64 - static av_always_inline av_const uint64_t av_bswap64(uint64_t x) - { -- __asm__("rev %0, %0" : "+r"(x)); -- return x; -+ uint64_t y; -+ -+ __asm__("rev %0, %1" : "=r"(y) : "r"(x)); -+ return y; - } - - #endif /* HAVE_INLINE_ASM */ -- - #endif /* AVUTIL_AARCH64_BSWAP_H */ -diff -Naur a/media/ffvpx/libavutil/adler32.c b/media/ffvpx/libavutil/adler32.c ---- a/media/ffvpx/libavutil/adler32.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/adler32.c 2023-04-06 12:49:40.258395091 +0200 -@@ -32,8 +32,8 @@ - - #include "config.h" - #include "adler32.h" --#include "common.h" - #include "intreadwrite.h" -+#include "macros.h" - - #define BASE 65521L /* largest prime smaller than 65536 */ - -@@ -41,12 +41,7 @@ - #define DO4(buf) DO1(buf); DO1(buf); DO1(buf); DO1(buf); - #define DO16(buf) DO4(buf); DO4(buf); DO4(buf); DO4(buf); - --#if FF_API_CRYPTO_SIZE_T --unsigned long av_adler32_update(unsigned long adler, const uint8_t * buf, -- unsigned int len) --#else - AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, size_t len) --#endif - { - unsigned long s1 = adler & 0xffff; - unsigned long s2 = adler >> 16; -diff -Naur a/media/ffvpx/libavutil/adler32.h b/media/ffvpx/libavutil/adler32.h ---- a/media/ffvpx/libavutil/adler32.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/adler32.h 2023-04-06 12:49:40.259395132 +0200 -@@ -30,7 +30,6 @@ - #include - #include - #include "attributes.h" --#include "version.h" - - /** - * @defgroup lavu_adler32 Adler-32 -@@ -40,11 +39,7 @@ - * @{ - */ - --#if FF_API_CRYPTO_SIZE_T --typedef unsigned long AVAdler; --#else - typedef uint32_t AVAdler; --#endif - - /** - * Calculate the Adler32 checksum of a buffer. -@@ -59,11 +54,7 @@ - * @return updated checksum - */ - AVAdler av_adler32_update(AVAdler adler, const uint8_t *buf, --#if FF_API_CRYPTO_SIZE_T -- unsigned int len) av_pure; --#else - size_t len) av_pure; --#endif - - /** - * @} -diff -Naur a/media/ffvpx/libavutil/arm/bswap.h b/media/ffvpx/libavutil/arm/bswap.h ---- a/media/ffvpx/libavutil/arm/bswap.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/arm/bswap.h 2023-04-06 12:50:06.975471215 +0200 -@@ -39,8 +39,10 @@ - #define av_bswap16 av_bswap16 - static av_always_inline av_const unsigned av_bswap16(unsigned x) - { -- __asm__("rev16 %0, %0" : "+r"(x)); -- return x; -+ unsigned y; -+ -+ __asm__("rev16 %0, %1" : "=r"(y) : "r"(x)); -+ return y; - } - #endif - -@@ -48,17 +50,18 @@ - #define av_bswap32 av_bswap32 - static av_always_inline av_const uint32_t av_bswap32(uint32_t x) - { -+ uint32_t y; - #if HAVE_ARMV6_INLINE -- __asm__("rev %0, %0" : "+r"(x)); -+ __asm__("rev %0, %1" : "=r"(y) : "r"(x)); - #else - uint32_t t; -- __asm__ ("eor %1, %0, %0, ror #16 \n\t" -+ __asm__ ("eor %1, %2, %2, ror #16 \n\t" - "bic %1, %1, #0xFF0000 \n\t" -- "mov %0, %0, ror #8 \n\t" -+ "mov %0, %2, ror #8 \n\t" - "eor %0, %0, %1, lsr #8 \n\t" -- : "+r"(x), "=&r"(t)); -+ : "=r"(y), "=&r"(t) : "r"(x)); - #endif /* HAVE_ARMV6_INLINE */ -- return x; -+ return y; - } - #endif /* AV_GCC_VERSION_AT_MOST(4,4) */ - -diff -Naur a/media/ffvpx/libavutil/arm/cpu.c b/media/ffvpx/libavutil/arm/cpu.c ---- a/media/ffvpx/libavutil/arm/cpu.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/arm/cpu.c 2023-04-06 12:49:40.259395132 +0200 -@@ -38,6 +38,10 @@ - #include - #include "libavutil/avstring.h" - -+#if HAVE_GETAUXVAL -+#include -+#endif -+ - #define AT_HWCAP 16 - - /* Relevant HWCAP values from kernel headers */ -@@ -48,6 +52,19 @@ - #define HWCAP_VFPv3 (1 << 13) - #define HWCAP_TLS (1 << 15) - -+static int get_auxval(uint32_t *hwcap) -+{ -+#if HAVE_GETAUXVAL -+ unsigned long ret = getauxval(AT_HWCAP); -+ if (ret == 0) -+ return -1; -+ *hwcap = ret; -+ return 0; -+#else -+ return -1; -+#endif -+} -+ - static int get_hwcap(uint32_t *hwcap) - { - struct { uint32_t a_type; uint32_t a_val; } auxv; -@@ -106,9 +123,10 @@ - int flags = CORE_CPU_FLAGS; - uint32_t hwcap; - -- if (get_hwcap(&hwcap) < 0) -- if (get_cpuinfo(&hwcap) < 0) -- return flags; -+ if (get_auxval(&hwcap) < 0) -+ if (get_hwcap(&hwcap) < 0) -+ if (get_cpuinfo(&hwcap) < 0) -+ return flags; - - #define check_cap(cap, flag) do { \ - if (hwcap & HWCAP_ ## cap) \ -diff -Naur a/media/ffvpx/libavutil/arm/intmath.h b/media/ffvpx/libavutil/arm/intmath.h ---- a/media/ffvpx/libavutil/arm/intmath.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/arm/intmath.h 2023-04-06 12:50:06.975471215 +0200 -@@ -65,17 +65,29 @@ - #define av_clip_intp2 av_clip_intp2_arm - static av_always_inline av_const int av_clip_intp2_arm(int a, int p) - { -- unsigned x; -- __asm__ ("ssat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p+1)); -- return x; -+ if (av_builtin_constant_p(p)) { -+ unsigned x; -+ __asm__ ("ssat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p+1)); -+ return x; -+ } else { -+ if (((unsigned)a + (1 << p)) & ~((2 << p) - 1)) -+ return (a >> 31) ^ ((1 << p) - 1); -+ else -+ return a; -+ } - } - - #define av_clip_uintp2 av_clip_uintp2_arm - static av_always_inline av_const unsigned av_clip_uintp2_arm(int a, int p) - { -- unsigned x; -- __asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p)); -- return x; -+ if (av_builtin_constant_p(p)) { -+ unsigned x; -+ __asm__ ("usat %0, %2, %1" : "=r"(x) : "r"(a), "i"(p)); -+ return x; -+ } else { -+ if (a & ~((1<> 31 & ((1< --#include "avutil.h" - #include "log.h" -+#include "macros.h" - - /** - * assert() equivalent, that is always enabled. -diff -Naur a/media/ffvpx/libavutil/avconfig.h b/media/ffvpx/libavutil/avconfig.h ---- a/media/ffvpx/libavutil/avconfig.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/avconfig.h 2023-04-06 12:49:40.259395132 +0200 -@@ -1,4 +1,4 @@ --/* Generated by ffconf */ -+/* Generated by ffmpeg configure */ - #ifndef AVUTIL_AVCONFIG_H - #define AVUTIL_AVCONFIG_H - #define AV_HAVE_BIGENDIAN 0 -diff -Naur a/media/ffvpx/libavutil/avsscanf.c b/media/ffvpx/libavutil/avsscanf.c ---- a/media/ffvpx/libavutil/avsscanf.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavutil/avsscanf.c 2023-04-06 12:49:40.259395132 +0200 -@@ -0,0 +1,970 @@ -+/* -+ * Copyright (c) 2005-2014 Rich Felker, et al. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject to -+ * the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "avstring.h" -+#include "libm.h" -+ -+typedef struct FFFILE { -+ size_t buf_size; -+ unsigned char *buf; -+ unsigned char *rpos, *rend; -+ unsigned char *shend; -+ ptrdiff_t shlim, shcnt; -+ void *cookie; -+ size_t (*read)(struct FFFILE *, unsigned char *, size_t); -+} FFFILE; -+ -+#define SIZE_hh -2 -+#define SIZE_h -1 -+#define SIZE_def 0 -+#define SIZE_l 1 -+#define SIZE_L 2 -+#define SIZE_ll 3 -+ -+#define shcnt(f) ((f)->shcnt + ((f)->rpos - (f)->buf)) -+ -+static int fftoread(FFFILE *f) -+{ -+ f->rpos = f->rend = f->buf + f->buf_size; -+ return 0; -+} -+ -+static size_t ffstring_read(FFFILE *f, unsigned char *buf, size_t len) -+{ -+ char *src = f->cookie; -+ size_t k = len+256; -+ char *end = memchr(src, 0, k); -+ -+ if (end) k = end-src; -+ if (k < len) len = k; -+ memcpy(buf, src, len); -+ f->rpos = (void *)(src+len); -+ f->rend = (void *)(src+k); -+ f->cookie = src+k; -+ -+ return len; -+} -+ -+static int ffuflow(FFFILE *f) -+{ -+ unsigned char c; -+ if (!fftoread(f) && f->read(f, &c, 1)==1) return c; -+ return EOF; -+} -+ -+static void ffshlim(FFFILE *f, ptrdiff_t lim) -+{ -+ f->shlim = lim; -+ f->shcnt = f->buf - f->rpos; -+ /* If lim is nonzero, rend must be a valid pointer. */ -+ if (lim && f->rend - f->rpos > lim) -+ f->shend = f->rpos + lim; -+ else -+ f->shend = f->rend; -+} -+ -+static int ffshgetc(FFFILE *f) -+{ -+ int c; -+ ptrdiff_t cnt = shcnt(f); -+ if (f->shlim && cnt >= f->shlim || (c=ffuflow(f)) < 0) { -+ f->shcnt = f->buf - f->rpos + cnt; -+ f->shend = 0; -+ return EOF; -+ } -+ cnt++; -+ if (f->shlim && f->rend - f->rpos > f->shlim - cnt) -+ f->shend = f->rpos + (f->shlim - cnt); -+ else -+ f->shend = f->rend; -+ f->shcnt = f->buf - f->rpos + cnt; -+ if (f->rpos[-1] != c) f->rpos[-1] = c; -+ return c; -+} -+ -+#define shlim(f, lim) ffshlim((f), (lim)) -+#define shgetc(f) (((f)->rpos < (f)->shend) ? *(f)->rpos++ : ffshgetc(f)) -+#define shunget(f) ((f)->shend ? (void)(f)->rpos-- : (void)0) -+ -+static const unsigned char table[] = { -1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1,-1,-1,-1,-1,-1, -+ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, -+ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, -+ -1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24, -+ 25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -+}; -+ -+static unsigned long long ffintscan(FFFILE *f, unsigned base, int pok, unsigned long long lim) -+{ -+ const unsigned char *val = table+1; -+ int c, neg=0; -+ unsigned x; -+ unsigned long long y; -+ if (base > 36 || base == 1) { -+ errno = EINVAL; -+ return 0; -+ } -+ while (av_isspace((c=shgetc(f)))); -+ if (c=='+' || c=='-') { -+ neg = -(c=='-'); -+ c = shgetc(f); -+ } -+ if ((base == 0 || base == 16) && c=='0') { -+ c = shgetc(f); -+ if ((c|32)=='x') { -+ c = shgetc(f); -+ if (val[c]>=16) { -+ shunget(f); -+ if (pok) shunget(f); -+ else shlim(f, 0); -+ return 0; -+ } -+ base = 16; -+ } else if (base == 0) { -+ base = 8; -+ } -+ } else { -+ if (base == 0) base = 10; -+ if (val[c] >= base) { -+ shunget(f); -+ shlim(f, 0); -+ errno = EINVAL; -+ return 0; -+ } -+ } -+ if (base == 10) { -+ for (x=0; c-'0'<10U && x<=UINT_MAX/10-1; c=shgetc(f)) -+ x = x*10 + (c-'0'); -+ for (y=x; c-'0'<10U && y<=ULLONG_MAX/10 && 10*y<=ULLONG_MAX-(c-'0'); c=shgetc(f)) -+ y = y*10 + (c-'0'); -+ if (c-'0'>=10U) goto done; -+ } else if (!(base & base-1)) { -+ int bs = "\0\1\2\4\7\3\6\5"[(0x17*base)>>5&7]; -+ for (x=0; val[c]>bs; c=shgetc(f)) -+ y = y<=lim) { -+ if (!(lim&1) && !neg) { -+ errno = ERANGE; -+ return lim-1; -+ } else if (y>lim) { -+ errno = ERANGE; -+ return lim; -+ } -+ } -+ return (y^neg)-neg; -+} -+ -+static long long scanexp(FFFILE *f, int pok) -+{ -+ int c; -+ int x; -+ long long y; -+ int neg = 0; -+ -+ c = shgetc(f); -+ if (c=='+' || c=='-') { -+ neg = (c=='-'); -+ c = shgetc(f); -+ if (c-'0'>=10U && pok) shunget(f); -+ } -+ if (c-'0'>=10U) { -+ shunget(f); -+ return LLONG_MIN; -+ } -+ for (x=0; c-'0'<10U && x=0) { -+ shunget(f); -+ } -+ if (!gotdig) { -+ errno = EINVAL; -+ shlim(f, 0); -+ return 0; -+ } -+ -+ /* Handle zero specially to avoid nasty special cases later */ -+ if (!x[0]) return sign * 0.0; -+ -+ /* Optimize small integers (w/no exponent) and over/under-flow */ -+ if (lrp==dc && dc<10 && (bits>30 || x[0]>>bits==0)) -+ return sign * (double)x[0]; -+ if (lrp > -emin/2) { -+ errno = ERANGE; -+ return sign * DBL_MAX * DBL_MAX; -+ } -+ if (lrp < emin-2*DBL_MANT_DIG) { -+ errno = ERANGE; -+ return sign * DBL_MIN * DBL_MIN; -+ } -+ -+ /* Align incomplete final B1B digit */ -+ if (j) { -+ for (; j<9; j++) x[k]*=10; -+ k++; -+ j=0; -+ } -+ -+ a = 0; -+ z = k; -+ e2 = 0; -+ rp = lrp; -+ -+ /* Optimize small to mid-size integers (even in exp. notation) */ -+ if (lnz<9 && lnz<=rp && rp < 18) { -+ int bitlim; -+ if (rp == 9) return sign * (double)x[0]; -+ if (rp < 9) return sign * (double)x[0] / p10s[8-rp]; -+ bitlim = bits-3*(int)(rp-9); -+ if (bitlim>30 || x[0]>>bitlim==0) -+ return sign * (double)x[0] * p10s[rp-10]; -+ } -+ -+ /* Drop trailing zeros */ -+ for (; !x[z-1]; z--); -+ -+ /* Align radix point to B1B digit boundary */ -+ if (rp % 9) { -+ int rpm9 = rp>=0 ? rp%9 : rp%9+9; -+ int p10 = p10s[8-rpm9]; -+ uint32_t carry = 0; -+ for (k=a; k!=z; k++) { -+ uint32_t tmp = x[k] % p10; -+ x[k] = x[k]/p10 + carry; -+ carry = 1000000000/p10 * tmp; -+ if (k==a && !x[k]) { -+ a = (a+1 & MASK); -+ rp -= 9; -+ } -+ } -+ if (carry) x[z++] = carry; -+ rp += 9-rpm9; -+ } -+ -+ /* Upscale until desired number of bits are left of radix point */ -+ while (rp < 9*LD_B1B_DIG || (rp == 9*LD_B1B_DIG && x[a] 1000000000) { -+ carry = tmp / 1000000000; -+ x[k] = tmp % 1000000000; -+ } else { -+ carry = 0; -+ x[k] = tmp; -+ } -+ if (k==(z-1 & MASK) && k!=a && !x[k]) z = k; -+ if (k==a) break; -+ } -+ if (carry) { -+ rp += 9; -+ a = (a-1 & MASK); -+ if (a == z) { -+ z = (z-1 & MASK); -+ x[z-1 & MASK] |= x[z]; -+ } -+ x[a] = carry; -+ } -+ } -+ -+ /* Downscale until exactly number of bits are left of radix point */ -+ for (;;) { -+ uint32_t carry = 0; -+ int sh = 1; -+ for (i=0; i th[i]) break; -+ } -+ if (i==LD_B1B_DIG && rp==9*LD_B1B_DIG) break; -+ /* FIXME: find a way to compute optimal sh */ -+ if (rp > 9+9*LD_B1B_DIG) sh = 9; -+ e2 += sh; -+ for (k=a; k!=z; k=(k+1 & MASK)) { -+ uint32_t tmp = x[k] & (1<>sh) + carry; -+ carry = (1000000000>>sh) * tmp; -+ if (k==a && !x[k]) { -+ a = (a+1 & MASK); -+ i--; -+ rp -= 9; -+ } -+ } -+ if (carry) { -+ if ((z+1 & MASK) != a) { -+ x[z] = carry; -+ z = (z+1 & MASK); -+ } else x[z-1 & MASK] |= 1; -+ } -+ } -+ -+ /* Assemble desired bits into floating point variable */ -+ for (y=i=0; i DBL_MANT_DIG+e2-emin) { -+ bits = DBL_MANT_DIG+e2-emin; -+ if (bits<0) bits=0; -+ denormal = 1; -+ } -+ -+ /* Calculate bias term to force rounding, move out lower bits */ -+ if (bits < DBL_MANT_DIG) { -+ bias = copysign(scalbn(1, 2*DBL_MANT_DIG-bits-1), y); -+ frac = fmod(y, scalbn(1, DBL_MANT_DIG-bits)); -+ y -= frac; -+ y += bias; -+ } -+ -+ /* Process tail of decimal input so it can affect rounding */ -+ if ((a+i & MASK) != z) { -+ uint32_t t = x[a+i & MASK]; -+ if (t < 500000000 && (t || (a+i+1 & MASK) != z)) -+ frac += 0.25*sign; -+ else if (t > 500000000) -+ frac += 0.75*sign; -+ else if (t == 500000000) { -+ if ((a+i+1 & MASK) == z) -+ frac += 0.5*sign; -+ else -+ frac += 0.75*sign; -+ } -+ if (DBL_MANT_DIG-bits >= 2 && !fmod(frac, 1)) -+ frac++; -+ } -+ -+ y += frac; -+ y -= bias; -+ -+ if ((e2+DBL_MANT_DIG & INT_MAX) > emax-5) { -+ if (fabs(y) >= pow(2, DBL_MANT_DIG)) { -+ if (denormal && bits==DBL_MANT_DIG+e2-emin) -+ denormal = 0; -+ y *= 0.5; -+ e2++; -+ } -+ if (e2+DBL_MANT_DIG>emax || (denormal && frac)) -+ errno = ERANGE; -+ } -+ -+ return scalbn(y, e2); -+} -+ -+static double hexfloat(FFFILE *f, int bits, int emin, int sign, int pok) -+{ -+ uint32_t x = 0; -+ double y = 0; -+ double scale = 1; -+ double bias = 0; -+ int gottail = 0, gotrad = 0, gotdig = 0; -+ long long rp = 0; -+ long long dc = 0; -+ long long e2 = 0; -+ int d; -+ int c; -+ -+ c = shgetc(f); -+ -+ /* Skip leading zeros */ -+ for (; c=='0'; c = shgetc(f)) -+ gotdig = 1; -+ -+ if (c=='.') { -+ gotrad = 1; -+ c = shgetc(f); -+ /* Count zeros after the radix point before significand */ -+ for (rp=0; c=='0'; c = shgetc(f), rp--) gotdig = 1; -+ } -+ -+ for (; c-'0'<10U || (c|32)-'a'<6U || c=='.'; c = shgetc(f)) { -+ if (c=='.') { -+ if (gotrad) break; -+ rp = dc; -+ gotrad = 1; -+ } else { -+ gotdig = 1; -+ if (c > '9') d = (c|32)+10-'a'; -+ else d = c-'0'; -+ if (dc<8) { -+ x = x*16 + d; -+ } else if (dc < DBL_MANT_DIG/4+1) { -+ y += d*(scale/=16); -+ } else if (d && !gottail) { -+ y += 0.5*scale; -+ gottail = 1; -+ } -+ dc++; -+ } -+ } -+ if (!gotdig) { -+ shunget(f); -+ if (pok) { -+ shunget(f); -+ if (gotrad) shunget(f); -+ } else { -+ shlim(f, 0); -+ } -+ return sign * 0.0; -+ } -+ if (!gotrad) rp = dc; -+ while (dc<8) x *= 16, dc++; -+ if ((c|32)=='p') { -+ e2 = scanexp(f, pok); -+ if (e2 == LLONG_MIN) { -+ if (pok) { -+ shunget(f); -+ } else { -+ shlim(f, 0); -+ return 0; -+ } -+ e2 = 0; -+ } -+ } else { -+ shunget(f); -+ } -+ e2 += 4*rp - 32; -+ -+ if (!x) return sign * 0.0; -+ if (e2 > -emin) { -+ errno = ERANGE; -+ return sign * DBL_MAX * DBL_MAX; -+ } -+ if (e2 < emin-2*DBL_MANT_DIG) { -+ errno = ERANGE; -+ return sign * DBL_MIN * DBL_MIN; -+ } -+ -+ while (x < 0x80000000) { -+ if (y>=0.5) { -+ x += x + 1; -+ y += y - 1; -+ } else { -+ x += x; -+ y += y; -+ } -+ e2--; -+ } -+ -+ if (bits > 32+e2-emin) { -+ bits = 32+e2-emin; -+ if (bits<0) bits=0; -+ } -+ -+ if (bits < DBL_MANT_DIG) -+ bias = copysign(scalbn(1, 32+DBL_MANT_DIG-bits-1), sign); -+ -+ if (bits<32 && y && !(x&1)) x++, y=0; -+ -+ y = bias + sign*(double)x + sign*y; -+ y -= bias; -+ -+ if (!y) errno = ERANGE; -+ -+ return scalbn(y, e2); -+} -+ -+static double fffloatscan(FFFILE *f, int prec, int pok) -+{ -+ int sign = 1; -+ size_t i; -+ int bits; -+ int emin; -+ int c; -+ -+ switch (prec) { -+ case 0: -+ bits = FLT_MANT_DIG; -+ emin = FLT_MIN_EXP-bits; -+ break; -+ case 1: -+ bits = DBL_MANT_DIG; -+ emin = DBL_MIN_EXP-bits; -+ break; -+ case 2: -+ bits = DBL_MANT_DIG; -+ emin = DBL_MIN_EXP-bits; -+ break; -+ default: -+ return 0; -+ } -+ -+ while (av_isspace((c = shgetc(f)))); -+ -+ if (c=='+' || c=='-') { -+ sign -= 2*(c=='-'); -+ c = shgetc(f); -+ } -+ -+ for (i=0; i<8 && (c|32)=="infinity"[i]; i++) -+ if (i<7) c = shgetc(f); -+ if (i==3 || i==8 || (i>3 && pok)) { -+ if (i!=8) { -+ shunget(f); -+ if (pok) for (; i>3; i--) shunget(f); -+ } -+ return sign * INFINITY; -+ } -+ if (!i) for (i=0; i<3 && (c|32)=="nan"[i]; i++) -+ if (i<2) c = shgetc(f); -+ if (i==3) { -+ if (shgetc(f) != '(') { -+ shunget(f); -+ return NAN; -+ } -+ for (i=1; ; i++) { -+ c = shgetc(f); -+ if (c-'0'<10U || c-'A'<26U || c-'a'<26U || c=='_') -+ continue; -+ if (c==')') return NAN; -+ shunget(f); -+ if (!pok) { -+ errno = EINVAL; -+ shlim(f, 0); -+ return 0; -+ } -+ while (i--) shunget(f); -+ return NAN; -+ } -+ return NAN; -+ } -+ -+ if (i) { -+ shunget(f); -+ errno = EINVAL; -+ shlim(f, 0); -+ return 0; -+ } -+ -+ if (c=='0') { -+ c = shgetc(f); -+ if ((c|32) == 'x') -+ return hexfloat(f, bits, emin, sign, pok); -+ shunget(f); -+ c = '0'; -+ } -+ -+ return decfloat(f, c, bits, emin, sign, pok); -+} -+ -+static void *arg_n(va_list ap, unsigned int n) -+{ -+ void *p; -+ unsigned int i; -+ va_list ap2; -+ va_copy(ap2, ap); -+ for (i=n; i>1; i--) va_arg(ap2, void *); -+ p = va_arg(ap2, void *); -+ va_end(ap2); -+ return p; -+} -+ -+static void store_int(void *dest, int size, unsigned long long i) -+{ -+ if (!dest) return; -+ switch (size) { -+ case SIZE_hh: -+ *(char *)dest = i; -+ break; -+ case SIZE_h: -+ *(short *)dest = i; -+ break; -+ case SIZE_def: -+ *(int *)dest = i; -+ break; -+ case SIZE_l: -+ *(long *)dest = i; -+ break; -+ case SIZE_ll: -+ *(long long *)dest = i; -+ break; -+ } -+} -+ -+static int ff_vfscanf(FFFILE *f, const char *fmt, va_list ap) -+{ -+ int width; -+ int size; -+ int base; -+ const unsigned char *p; -+ int c, t; -+ char *s; -+ void *dest=NULL; -+ int invert; -+ int matches=0; -+ unsigned long long x; -+ double y; -+ ptrdiff_t pos = 0; -+ unsigned char scanset[257]; -+ size_t i; -+ -+ for (p=(const unsigned char *)fmt; *p; p++) { -+ -+ if (av_isspace(*p)) { -+ while (av_isspace(p[1])) p++; -+ shlim(f, 0); -+ while (av_isspace(shgetc(f))); -+ shunget(f); -+ pos += shcnt(f); -+ continue; -+ } -+ if (*p != '%' || p[1] == '%') { -+ shlim(f, 0); -+ if (*p == '%') { -+ p++; -+ while (av_isspace((c=shgetc(f)))); -+ } else { -+ c = shgetc(f); -+ } -+ if (c!=*p) { -+ shunget(f); -+ if (c<0) goto input_fail; -+ goto match_fail; -+ } -+ pos += shcnt(f); -+ continue; -+ } -+ -+ p++; -+ if (*p=='*') { -+ dest = 0; p++; -+ } else if (av_isdigit(*p) && p[1]=='$') { -+ dest = arg_n(ap, *p-'0'); p+=2; -+ } else { -+ dest = va_arg(ap, void *); -+ } -+ -+ for (width=0; av_isdigit(*p); p++) { -+ width = 10*width + *p - '0'; -+ } -+ -+ if (*p=='m') { -+ s = 0; -+ p++; -+ } -+ -+ size = SIZE_def; -+ switch (*p++) { -+ case 'h': -+ if (*p == 'h') p++, size = SIZE_hh; -+ else size = SIZE_h; -+ break; -+ case 'l': -+ if (*p == 'l') p++, size = SIZE_ll; -+ else size = SIZE_l; -+ break; -+ case 'j': -+ size = SIZE_ll; -+ break; -+ case 'z': -+ case 't': -+ size = SIZE_l; -+ break; -+ case 'L': -+ size = SIZE_L; -+ break; -+ case 'd': case 'i': case 'o': case 'u': case 'x': -+ case 'a': case 'e': case 'f': case 'g': -+ case 'A': case 'E': case 'F': case 'G': case 'X': -+ case 's': case 'c': case '[': -+ case 'S': case 'C': -+ case 'p': case 'n': -+ p--; -+ break; -+ default: -+ goto fmt_fail; -+ } -+ -+ t = *p; -+ -+ /* C or S */ -+ if ((t&0x2f) == 3) { -+ t |= 32; -+ size = SIZE_l; -+ } -+ -+ switch (t) { -+ case 'c': -+ if (width < 1) width = 1; -+ case '[': -+ break; -+ case 'n': -+ store_int(dest, size, pos); -+ /* do not increment match count, etc! */ -+ continue; -+ default: -+ shlim(f, 0); -+ while (av_isspace(shgetc(f))); -+ shunget(f); -+ pos += shcnt(f); -+ } -+ -+ shlim(f, width); -+ if (shgetc(f) < 0) goto input_fail; -+ shunget(f); -+ -+ switch (t) { -+ case 's': -+ case 'c': -+ case '[': -+ if (t == 'c' || t == 's') { -+ memset(scanset, -1, sizeof scanset); -+ scanset[0] = 0; -+ if (t == 's') { -+ scanset[1 + '\t'] = 0; -+ scanset[1 + '\n'] = 0; -+ scanset[1 + '\v'] = 0; -+ scanset[1 + '\f'] = 0; -+ scanset[1 + '\r'] = 0; -+ scanset[1 + ' ' ] = 0; -+ } -+ } else { -+ if (*++p == '^') p++, invert = 1; -+ else invert = 0; -+ memset(scanset, invert, sizeof scanset); -+ scanset[0] = 0; -+ if (*p == '-') p++, scanset[1+'-'] = 1-invert; -+ else if (*p == ']') p++, scanset[1+']'] = 1-invert; -+ for (; *p != ']'; p++) { -+ if (!*p) goto fmt_fail; -+ if (*p=='-' && p[1] && p[1] != ']') -+ for (c=p++[-1]; c<*p; c++) -+ scanset[1+c] = 1-invert; -+ scanset[1+*p] = 1-invert; -+ } -+ } -+ s = 0; -+ i = 0; -+ if ((s = dest)) { -+ while (scanset[(c=shgetc(f))+1]) -+ s[i++] = c; -+ } else { -+ while (scanset[(c=shgetc(f))+1]); -+ } -+ shunget(f); -+ if (!shcnt(f)) goto match_fail; -+ if (t == 'c' && shcnt(f) != width) goto match_fail; -+ if (t != 'c') { -+ if (s) s[i] = 0; -+ } -+ break; -+ case 'p': -+ case 'X': -+ case 'x': -+ base = 16; -+ goto int_common; -+ case 'o': -+ base = 8; -+ goto int_common; -+ case 'd': -+ case 'u': -+ base = 10; -+ goto int_common; -+ case 'i': -+ base = 0; -+int_common: -+ x = ffintscan(f, base, 0, ULLONG_MAX); -+ if (!shcnt(f)) -+ goto match_fail; -+ if (t=='p' && dest) -+ *(void **)dest = (void *)(uintptr_t)x; -+ else -+ store_int(dest, size, x); -+ break; -+ case 'a': case 'A': -+ case 'e': case 'E': -+ case 'f': case 'F': -+ case 'g': case 'G': -+ y = fffloatscan(f, size, 0); -+ if (!shcnt(f)) -+ goto match_fail; -+ if (dest) { -+ switch (size) { -+ case SIZE_def: -+ *(float *)dest = y; -+ break; -+ case SIZE_l: -+ *(double *)dest = y; -+ break; -+ case SIZE_L: -+ *(double *)dest = y; -+ break; -+ } -+ } -+ break; -+ } -+ -+ pos += shcnt(f); -+ if (dest) matches++; -+ } -+ if (0) { -+fmt_fail: -+input_fail: -+ if (!matches) matches--; -+ } -+match_fail: -+ return matches; -+} -+ -+static int ff_vsscanf(const char *s, const char *fmt, va_list ap) -+{ -+ FFFILE f = { -+ .buf = (void *)s, .cookie = (void *)s, -+ .read = ffstring_read, -+ }; -+ -+ return ff_vfscanf(&f, fmt, ap); -+} -+ -+int av_sscanf(const char *string, const char *format, ...) -+{ -+ int ret; -+ va_list ap; -+ va_start(ap, format); -+ ret = ff_vsscanf(string, format, ap); -+ va_end(ap); -+ return ret; -+} -diff -Naur a/media/ffvpx/libavutil/avstring.c b/media/ffvpx/libavutil/avstring.c ---- a/media/ffvpx/libavutil/avstring.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/avstring.c 2023-04-06 12:50:24.493176583 +0200 -@@ -19,17 +19,20 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include - #include - #include - #include - #include - - #include "config.h" --#include "common.h" - #include "mem.h" - #include "avassert.h" - #include "avstring.h" - #include "bprint.h" -+#include "error.h" -+#include "macros.h" -+#include "version.h" - - int av_strstart(const char *str, const char *pfx, const char **ptr) - { -@@ -136,16 +139,6 @@ - return p; - } - --#if FF_API_D2STR --char *av_d2str(double d) --{ -- char *str = av_malloc(16); -- if (str) -- snprintf(str, 16, "%f", d); -- return str; --} --#endif -- - #define WHITESPACES " \n\t\r" - - char *av_get_token(const char **buf, const char *term) -diff -Naur a/media/ffvpx/libavutil/avstring.h b/media/ffvpx/libavutil/avstring.h ---- a/media/ffvpx/libavutil/avstring.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/avstring.h 2023-04-06 12:50:24.493176583 +0200 -@@ -135,6 +135,7 @@ - /** - * Get the count of continuous non zero chars starting from the beginning. - * -+ * @param s the string whose length to count - * @param len maximum number of characters to check in the string, that - * is the maximum value which is returned by the function - */ -@@ -156,15 +157,6 @@ - */ - char *av_asprintf(const char *fmt, ...) av_printf_format(1, 2); - --#if FF_API_D2STR --/** -- * Convert a number to an av_malloced string. -- * @deprecated use av_asprintf() with "%f" or a more specific format -- */ --attribute_deprecated --char *av_d2str(double d); --#endif -- - /** - * Unescape the given string until a non escaped terminating char, - * and return the token corresponding to the unescaped string. -diff -Naur a/media/ffvpx/libavutil/avutil.h b/media/ffvpx/libavutil/avutil.h ---- a/media/ffvpx/libavutil/avutil.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/avutil.h 2023-04-06 12:49:40.259395132 +0200 -@@ -331,12 +331,18 @@ - #define av_int_list_length(list, term) \ - av_int_list_length_for_size(sizeof(*(list)), list, term) - -+#if FF_API_AV_FOPEN_UTF8 - /** - * Open a file using a UTF-8 filename. - * The API of this function matches POSIX fopen(), errors are returned through - * errno. -+ * @deprecated Avoid using it, as on Windows, the FILE* allocated by this -+ * function may be allocated with a different CRT than the caller -+ * who uses the FILE*. No replacement provided in public API. - */ -+attribute_deprecated - FILE *av_fopen_utf8(const char *path, const char *mode); -+#endif - - /** - * Return the fractional representation of the internal time base. -diff -Naur a/media/ffvpx/libavutil/avutil.symbols b/media/ffvpx/libavutil/avutil.symbols ---- a/media/ffvpx/libavutil/avutil.symbols 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/avutil.symbols 2023-04-06 12:55:20.669080807 +0200 -@@ -30,15 +30,23 @@ - av_buffer_ref - av_buffer_unref - av_calloc -+av_channel_layout_check -+av_channel_layout_copy -+av_channel_layout_compare - av_channel_layout_extract_channel -+av_channel_layout_describe -+av_channel_layout_from_mask -+av_channel_layout_uninit - av_chroma_location_name -+av_chroma_location_enum_to_pos -+av_chroma_location_pos_to_enum - av_color_primaries_name - av_color_range_name - av_color_space_name - av_color_transfer_name - av_compare_mod - av_compare_ts --#ifdef MOZ_WAYLAND -+#ifndef MOZ_FFVPX_AUDIOONLY - av_content_light_metadata_create_side_data - #endif - av_cpu_count -@@ -46,7 +54,6 @@ - av_crc_get_table - av_crc_init - av_d2q --av_d2str - av_default_get_category - av_default_item_name - av_dict_copy -@@ -54,6 +61,7 @@ - av_dict_free - av_dict_get - av_dict_get_string -+av_dict_iterate - av_dict_parse_string - av_dict_set - av_dict_set_int -@@ -68,20 +76,26 @@ - av_expr_parse - av_expr_parse_and_eval - av_fast_malloc -+av_fast_mallocz - av_fast_realloc - av_fifo_alloc -+av_fifo_alloc2 - av_fifo_alloc_array -+av_fifo_can_read - av_fifo_drain - av_fifo_free - av_fifo_freep -+av_fifo_freep2 - av_fifo_generic_peek - av_fifo_generic_read - av_fifo_generic_write - av_fifo_grow - av_fifo_realloc2 -+av_fifo_read - av_fifo_reset - av_fifo_size - av_fifo_space -+av_fifo_write - av_find_best_pix_fmt_of_2 - av_find_info_tag - av_find_nearest_q_idx -@@ -96,42 +110,16 @@ - av_frame_copy - av_frame_copy_props - av_frame_free --av_frame_get_best_effort_timestamp - av_frame_get_buffer --av_frame_get_channel_layout --av_frame_get_channels --av_frame_get_color_range --av_frame_get_colorspace --av_frame_get_decode_error_flags --av_frame_get_metadata --av_frame_get_pkt_duration --av_frame_get_pkt_pos --av_frame_get_pkt_size - av_frame_get_plane_buffer --av_frame_get_qp_table --av_frame_get_sample_rate - av_frame_get_side_data - av_frame_is_writable - av_frame_make_writable - av_frame_move_ref - av_frame_new_side_data --#ifdef MOZ_WAYLAND - av_frame_new_side_data_from_buf --#endif - av_frame_ref - av_frame_remove_side_data --av_frame_set_best_effort_timestamp --av_frame_set_channel_layout --av_frame_set_channels --av_frame_set_color_range --av_frame_set_colorspace --av_frame_set_decode_error_flags --av_frame_set_metadata --av_frame_set_pkt_duration --av_frame_set_pkt_pos --av_frame_set_pkt_size --av_frame_set_qp_table --av_frame_set_sample_rate - av_frame_side_data_name - av_frame_unref - av_free -@@ -146,7 +134,6 @@ - av_get_channel_layout_nb_channels - av_get_channel_layout_string - av_get_channel_name --av_get_colorspace_name - av_get_cpu_flags - av_get_default_channel_layout - av_get_known_color_name -@@ -201,9 +188,7 @@ - av_log_set_level - av_malloc - av_mallocz --#ifdef MOZ_WAYLAND - av_mastering_display_metadata_create_side_data --#endif - av_match_list - av_match_name - av_max_alloc -@@ -211,7 +196,6 @@ - av_memdup - av_mul_q - av_nearer_q --av_opt_child_class_next - av_opt_child_next - av_opt_copy - av_opt_eval_double -@@ -262,7 +246,6 @@ - av_opt_show2 - av_parse_color - av_parse_cpu_caps --av_parse_cpu_flags - av_parse_ratio - av_parse_time - av_parse_video_rate -@@ -293,7 +276,6 @@ - av_samples_fill_arrays - av_samples_get_buffer_size - av_samples_set_silence --av_set_cpu_flags_mask - av_set_options_string - av_small_strptime - av_strcasecmp -@@ -314,9 +296,7 @@ - av_timegm - av_usleep - av_utf8_decode --av_util_ffversion - av_vbprintf --av_version_info - #ifndef MOZ_FFVPX_AUDIOONLY - av_video_enc_params_create_side_data - #endif -@@ -328,9 +308,6 @@ - avpriv_request_sample - avpriv_scalarproduct_float_c - avpriv_set_systematic_pal2 --avutil_configuration --avutil_license --avutil_version - #if defined(XP_WIN) && !defined(_ARM64_) - avpriv_emms_asm - #endif -@@ -345,4 +322,3 @@ - av_hwframe_transfer_get_formats - av_hwdevice_ctx_create_derived - av_malloc_array --av_mallocz_array -diff -Naur a/media/ffvpx/libavutil/base64.c b/media/ffvpx/libavutil/base64.c ---- a/media/ffvpx/libavutil/base64.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/base64.c 2023-04-06 12:49:40.259395132 +0200 -@@ -24,10 +24,12 @@ - * @author Ryan Martell (with lots of Michael) - */ - --#include "common.h" -+#include -+#include -+ - #include "base64.h" -+#include "error.h" - #include "intreadwrite.h" --#include "timer.h" - - /* ---------------- private code */ - static const uint8_t map2[256] = -diff -Naur a/media/ffvpx/libavutil/bprint.c b/media/ffvpx/libavutil/bprint.c ---- a/media/ffvpx/libavutil/bprint.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/bprint.c 2023-04-06 12:49:40.259395132 +0200 -@@ -18,16 +18,16 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include - #include - #include - #include - #include --#include "avassert.h" - #include "avstring.h" - #include "bprint.h" --#include "common.h" - #include "compat/va_copy.h" - #include "error.h" -+#include "macros.h" - #include "mem.h" - - #define av_bprint_room(buf) ((buf)->size - FFMIN((buf)->len, (buf)->size)) -@@ -245,10 +245,8 @@ - str = buf->str; - buf->str = NULL; - } else { -- str = av_malloc(real_size); -- if (str) -- memcpy(str, buf->str, real_size); -- else -+ str = av_memdup(buf->str, real_size); -+ if (!str) - ret = AVERROR(ENOMEM); - } - *ret_str = str; -diff -Naur a/media/ffvpx/libavutil/bprint.h b/media/ffvpx/libavutil/bprint.h ---- a/media/ffvpx/libavutil/bprint.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/bprint.h 2023-04-06 12:50:06.975471215 +0200 -@@ -18,6 +18,12 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+/** -+ * @file -+ * @ingroup lavu_avbprint -+ * AVBPrint public header -+ */ -+ - #ifndef AVUTIL_BPRINT_H - #define AVUTIL_BPRINT_H - -@@ -27,6 +33,14 @@ - #include "avstring.h" - - /** -+ * @defgroup lavu_avbprint AVBPrint -+ * @ingroup lavu_data -+ * -+ * A buffer to print data progressively -+ * @{ -+ */ -+ -+/** - * Define a structure with extra padding to a fixed size - * This helps ensuring binary compatibility with future versions. - */ -@@ -48,14 +62,14 @@ - * Small buffers are kept in the structure itself, and thus require no - * memory allocation at all (unless the contents of the buffer is needed - * after the structure goes out of scope). This is almost as lightweight as -- * declaring a local "char buf[512]". -+ * declaring a local `char buf[512]`. - * - * The length of the string can go beyond the allocated size: the buffer is - * then truncated, but the functions still keep account of the actual total - * length. - * -- * In other words, buf->len can be greater than buf->size and records the -- * total length of what would have been to the buffer if there had been -+ * In other words, AVBPrint.len can be greater than AVBPrint.size and records -+ * the total length of what would have been to the buffer if there had been - * enough memory. - * - * Append operations do not need to be tested for failure: if a memory -@@ -63,20 +77,17 @@ - * is still updated. This situation can be tested with - * av_bprint_is_complete(). - * -- * The size_max field determines several possible behaviours: -- * -- * size_max = -1 (= UINT_MAX) or any large value will let the buffer be -- * reallocated as necessary, with an amortized linear cost. -- * -- * size_max = 0 prevents writing anything to the buffer: only the total -- * length is computed. The write operations can then possibly be repeated in -- * a buffer with exactly the necessary size -- * (using size_init = size_max = len + 1). -- * -- * size_max = 1 is automatically replaced by the exact size available in the -- * structure itself, thus ensuring no dynamic memory allocation. The -- * internal buffer is large enough to hold a reasonable paragraph of text, -- * such as the current paragraph. -+ * The AVBPrint.size_max field determines several possible behaviours: -+ * - `size_max = -1` (= `UINT_MAX`) or any large value will let the buffer be -+ * reallocated as necessary, with an amortized linear cost. -+ * - `size_max = 0` prevents writing anything to the buffer: only the total -+ * length is computed. The write operations can then possibly be repeated in -+ * a buffer with exactly the necessary size -+ * (using `size_init = size_max = len + 1`). -+ * - `size_max = 1` is automatically replaced by the exact size available in the -+ * structure itself, thus ensuring no dynamic memory allocation. The -+ * internal buffer is large enough to hold a reasonable paragraph of text, -+ * such as the current paragraph. - */ - - FF_PAD_STRUCTURE(AVBPrint, 1024, -@@ -88,12 +99,31 @@ - ) - - /** -+ * @name Max size special values - * Convenience macros for special values for av_bprint_init() size_max - * parameter. -+ * @{ -+ */ -+ -+/** -+ * Buffer will be reallocated as necessary, with an amortized linear cost. - */ - #define AV_BPRINT_SIZE_UNLIMITED ((unsigned)-1) -+/** -+ * Use the exact size available in the AVBPrint structure itself. -+ * -+ * Thus ensuring no dynamic memory allocation. The internal buffer is large -+ * enough to hold a reasonable paragraph of text, such as the current paragraph. -+ */ - #define AV_BPRINT_SIZE_AUTOMATIC 1 -+/** -+ * Do not write anything to the buffer, only calculate the total length. -+ * -+ * The write operations can then possibly be repeated in a buffer with -+ * exactly the necessary size (using `size_init = size_max = AVBPrint.len + 1`). -+ */ - #define AV_BPRINT_SIZE_COUNT_ONLY 0 -+/** @} */ - - /** - * Init a print buffer. -@@ -101,12 +131,12 @@ - * @param buf buffer to init - * @param size_init initial size (including the final 0) - * @param size_max maximum size; -- * 0 means do not write anything, just count the length; -- * 1 is replaced by the maximum value for automatic storage; -- * any large value means that the internal buffer will be -- * reallocated as needed up to that limit; -1 is converted to -- * UINT_MAX, the largest limit possible. -- * Check also AV_BPRINT_SIZE_* macros. -+ * - `0` means do not write anything, just count the length -+ * - `1` is replaced by the maximum value for automatic storage -+ * any large value means that the internal buffer will be -+ * reallocated as needed up to that limit -+ * - `-1` is converted to `UINT_MAX`, the largest limit possible. -+ * Check also `AV_BPRINT_SIZE_*` macros. - */ - void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); - -@@ -216,4 +246,6 @@ - void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_chars, - enum AVEscapeMode mode, int flags); - -+/** @} */ -+ - #endif /* AVUTIL_BPRINT_H */ -diff -Naur a/media/ffvpx/libavutil/bswap.h b/media/ffvpx/libavutil/bswap.h ---- a/media/ffvpx/libavutil/bswap.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/bswap.h 2023-04-06 12:50:06.975471215 +0200 -@@ -40,6 +40,8 @@ - # include "arm/bswap.h" - #elif ARCH_AVR32 - # include "avr32/bswap.h" -+#elif ARCH_RISCV -+# include "riscv/bswap.h" - #elif ARCH_SH4 - # include "sh4/bswap.h" - #elif ARCH_X86 -diff -Naur a/media/ffvpx/libavutil/buffer.c b/media/ffvpx/libavutil/buffer.c ---- a/media/ffvpx/libavutil/buffer.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/buffer.c 2023-04-06 12:50:06.975471215 +0200 -@@ -26,16 +26,11 @@ - #include "mem.h" - #include "thread.h" - --AVBufferRef *av_buffer_create(uint8_t *data, buffer_size_t size, -- void (*free)(void *opaque, uint8_t *data), -- void *opaque, int flags) -+static AVBufferRef *buffer_create(AVBuffer *buf, uint8_t *data, size_t size, -+ void (*free)(void *opaque, uint8_t *data), -+ void *opaque, int flags) - { - AVBufferRef *ref = NULL; -- AVBuffer *buf = NULL; -- -- buf = av_mallocz(sizeof(*buf)); -- if (!buf) -- return NULL; - - buf->data = data; - buf->size = size; -@@ -47,10 +42,8 @@ - buf->flags = flags; - - ref = av_mallocz(sizeof(*ref)); -- if (!ref) { -- av_freep(&buf); -+ if (!ref) - return NULL; -- } - - ref->buffer = buf; - ref->data = data; -@@ -59,12 +52,29 @@ - return ref; - } - -+AVBufferRef *av_buffer_create(uint8_t *data, size_t size, -+ void (*free)(void *opaque, uint8_t *data), -+ void *opaque, int flags) -+{ -+ AVBufferRef *ret; -+ AVBuffer *buf = av_mallocz(sizeof(*buf)); -+ if (!buf) -+ return NULL; -+ -+ ret = buffer_create(buf, data, size, free, opaque, flags); -+ if (!ret) { -+ av_free(buf); -+ return NULL; -+ } -+ return ret; -+} -+ - void av_buffer_default_free(void *opaque, uint8_t *data) - { - av_free(data); - } - --AVBufferRef *av_buffer_alloc(buffer_size_t size) -+AVBufferRef *av_buffer_alloc(size_t size) - { - AVBufferRef *ret = NULL; - uint8_t *data = NULL; -@@ -80,7 +90,7 @@ - return ret; - } - --AVBufferRef *av_buffer_allocz(buffer_size_t size) -+AVBufferRef *av_buffer_allocz(size_t size) - { - AVBufferRef *ret = av_buffer_alloc(size); - if (!ret) -@@ -90,7 +100,7 @@ - return ret; - } - --AVBufferRef *av_buffer_ref(AVBufferRef *buf) -+AVBufferRef *av_buffer_ref(const AVBufferRef *buf) - { - AVBufferRef *ret = av_mallocz(sizeof(*ret)); - -@@ -117,8 +127,12 @@ - av_freep(dst); - - if (atomic_fetch_sub_explicit(&b->refcount, 1, memory_order_acq_rel) == 1) { -+ /* b->free below might already free the structure containing *b, -+ * so we have to read the flag now to avoid use-after-free. */ -+ int free_avbuffer = !(b->flags_internal & BUFFER_FLAG_NO_FREE); - b->free(b->opaque, b->data); -- av_freep(&b); -+ if (free_avbuffer) -+ av_free(b); - } - } - -@@ -166,7 +180,7 @@ - return 0; - } - --int av_buffer_realloc(AVBufferRef **pbuf, buffer_size_t size) -+int av_buffer_realloc(AVBufferRef **pbuf, size_t size) - { - AVBufferRef *buf = *pbuf; - uint8_t *tmp; -@@ -216,7 +230,7 @@ - return 0; - } - --int av_buffer_replace(AVBufferRef **pdst, AVBufferRef *src) -+int av_buffer_replace(AVBufferRef **pdst, const AVBufferRef *src) - { - AVBufferRef *dst = *pdst; - AVBufferRef *tmp; -@@ -242,8 +256,8 @@ - return 0; - } - --AVBufferPool *av_buffer_pool_init2(buffer_size_t size, void *opaque, -- AVBufferRef* (*alloc)(void *opaque, buffer_size_t size), -+AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, -+ AVBufferRef* (*alloc)(void *opaque, size_t size), - void (*pool_free)(void *opaque)) - { - AVBufferPool *pool = av_mallocz(sizeof(*pool)); -@@ -263,7 +277,7 @@ - return pool; - } - --AVBufferPool *av_buffer_pool_init(buffer_size_t size, AVBufferRef* (*alloc)(buffer_size_t size)) -+AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)) - { - AVBufferPool *pool = av_mallocz(sizeof(*pool)); - if (!pool) -@@ -327,9 +341,6 @@ - BufferPoolEntry *buf = opaque; - AVBufferPool *pool = buf->pool; - -- if(CONFIG_MEMORY_POISONING) -- memset(buf->data, FF_MEMORY_POISON, pool->size); -- - ff_mutex_lock(&pool->mutex); - buf->next = pool->pool; - pool->pool = buf; -@@ -378,11 +389,13 @@ - ff_mutex_lock(&pool->mutex); - buf = pool->pool; - if (buf) { -- ret = av_buffer_create(buf->data, pool->size, pool_release_buffer, -- buf, 0); -+ memset(&buf->buffer, 0, sizeof(buf->buffer)); -+ ret = buffer_create(&buf->buffer, buf->data, pool->size, -+ pool_release_buffer, buf, 0); - if (ret) { - pool->pool = buf->next; - buf->next = NULL; -+ buf->buffer.flags_internal |= BUFFER_FLAG_NO_FREE; - } - } else { - ret = pool_alloc_buffer(pool); -@@ -395,7 +408,7 @@ - return ret; - } - --void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref) -+void *av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref) - { - BufferPoolEntry *buf = ref->buffer->opaque; - av_assert0(buf); -diff -Naur a/media/ffvpx/libavutil/buffer.h b/media/ffvpx/libavutil/buffer.h ---- a/media/ffvpx/libavutil/buffer.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/buffer.h 2023-04-06 12:49:40.259395132 +0200 -@@ -28,8 +28,6 @@ - #include - #include - --#include "version.h" -- - /** - * @defgroup lavu_buffer AVBuffer - * @ingroup lavu_data -@@ -93,11 +91,7 @@ - /** - * Size of data in bytes. - */ --#if FF_API_BUFFER_SIZE_T -- int size; --#else - size_t size; --#endif - } AVBufferRef; - - /** -@@ -105,21 +99,13 @@ - * - * @return an AVBufferRef of given size or NULL when out of memory - */ --#if FF_API_BUFFER_SIZE_T --AVBufferRef *av_buffer_alloc(int size); --#else - AVBufferRef *av_buffer_alloc(size_t size); --#endif - - /** - * Same as av_buffer_alloc(), except the returned buffer will be initialized - * to zero. - */ --#if FF_API_BUFFER_SIZE_T --AVBufferRef *av_buffer_allocz(int size); --#else - AVBufferRef *av_buffer_allocz(size_t size); --#endif - - /** - * Always treat the buffer as read-only, even when it has only one -@@ -142,11 +128,7 @@ - * - * @return an AVBufferRef referring to data on success, NULL on failure. - */ --#if FF_API_BUFFER_SIZE_T --AVBufferRef *av_buffer_create(uint8_t *data, int size, --#else - AVBufferRef *av_buffer_create(uint8_t *data, size_t size, --#endif - void (*free)(void *opaque, uint8_t *data), - void *opaque, int flags); - -@@ -163,7 +145,7 @@ - * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on - * failure. - */ --AVBufferRef *av_buffer_ref(AVBufferRef *buf); -+AVBufferRef *av_buffer_ref(const AVBufferRef *buf); - - /** - * Free a given reference and automatically free the buffer if there are no more -@@ -214,11 +196,7 @@ - * reference to it (i.e. the one passed to this function). In all other cases - * a new buffer is allocated and the data is copied. - */ --#if FF_API_BUFFER_SIZE_T --int av_buffer_realloc(AVBufferRef **buf, int size); --#else - int av_buffer_realloc(AVBufferRef **buf, size_t size); --#endif - - /** - * Ensure dst refers to the same data as src. -@@ -234,7 +212,7 @@ - * @return 0 on success - * AVERROR(ENOMEM) on memory allocation failure. - */ --int av_buffer_replace(AVBufferRef **dst, AVBufferRef *src); -+int av_buffer_replace(AVBufferRef **dst, const AVBufferRef *src); - - /** - * @} -@@ -285,11 +263,7 @@ - * (av_buffer_alloc()). - * @return newly created buffer pool on success, NULL on error. - */ --#if FF_API_BUFFER_SIZE_T --AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); --#else - AVBufferPool *av_buffer_pool_init(size_t size, AVBufferRef* (*alloc)(size_t size)); --#endif - - /** - * Allocate and initialize a buffer pool with a more complex allocator. -@@ -306,13 +280,8 @@ - * data. May be NULL. - * @return newly created buffer pool on success, NULL on error. - */ --#if FF_API_BUFFER_SIZE_T --AVBufferPool *av_buffer_pool_init2(int size, void *opaque, -- AVBufferRef* (*alloc)(void *opaque, int size), --#else - AVBufferPool *av_buffer_pool_init2(size_t size, void *opaque, - AVBufferRef* (*alloc)(void *opaque, size_t size), --#endif - void (*pool_free)(void *opaque)); - - /** -@@ -344,7 +313,7 @@ - * therefore you have to use this function to access the original opaque - * parameter of an allocated buffer. - */ --void *av_buffer_pool_buffer_get_opaque(AVBufferRef *ref); -+void *av_buffer_pool_buffer_get_opaque(const AVBufferRef *ref); - - /** - * @} -diff -Naur a/media/ffvpx/libavutil/buffer_internal.h b/media/ffvpx/libavutil/buffer_internal.h ---- a/media/ffvpx/libavutil/buffer_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/buffer_internal.h 2023-04-06 12:49:40.259395132 +0200 -@@ -22,7 +22,6 @@ - #include - #include - --#include "internal.h" - #include "buffer.h" - #include "thread.h" - -@@ -30,10 +29,15 @@ - * The buffer was av_realloc()ed, so it is reallocatable. - */ - #define BUFFER_FLAG_REALLOCATABLE (1 << 0) -+/** -+ * The AVBuffer structure is part of a larger structure -+ * and should not be freed. -+ */ -+#define BUFFER_FLAG_NO_FREE (1 << 1) - - struct AVBuffer { - uint8_t *data; /**< data described by this buffer */ -- buffer_size_t size; /**< size of data in bytes */ -+ size_t size; /**< size of data in bytes */ - - /** - * number of existing AVBufferRef instances referring to this buffer -@@ -73,6 +77,12 @@ - - AVBufferPool *pool; - struct BufferPoolEntry *next; -+ -+ /* -+ * An AVBuffer structure to (re)use as AVBuffer for subsequent uses -+ * of this BufferPoolEntry. -+ */ -+ AVBuffer buffer; - } BufferPoolEntry; - - struct AVBufferPool { -@@ -90,10 +100,10 @@ - */ - atomic_uint refcount; - -- buffer_size_t size; -+ size_t size; - void *opaque; -- AVBufferRef* (*alloc)(buffer_size_t size); -- AVBufferRef* (*alloc2)(void *opaque, buffer_size_t size); -+ AVBufferRef* (*alloc)(size_t size); -+ AVBufferRef* (*alloc2)(void *opaque, size_t size); - void (*pool_free)(void *opaque); - }; - -diff -Naur a/media/ffvpx/libavutil/channel_layout.c b/media/ffvpx/libavutil/channel_layout.c ---- a/media/ffvpx/libavutil/channel_layout.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/channel_layout.c 2023-04-06 12:50:24.493176583 +0200 -@@ -24,12 +24,19 @@ - */ - - #include -+#include -+#include - --#include "avstring.h" --#include "avutil.h" -+#include "avassert.h" - #include "channel_layout.h" - #include "bprint.h" - #include "common.h" -+#include "error.h" -+#include "macros.h" -+#include "opt.h" -+ -+#define CHAN_IS_AMBI(x) ((x) >= AV_CHAN_AMBISONIC_BASE &&\ -+ (x) <= AV_CHAN_AMBISONIC_END) - - struct channel_name { - const char *name; -@@ -37,81 +44,168 @@ - }; - - static const struct channel_name channel_names[] = { -- [0] = { "FL", "front left" }, -- [1] = { "FR", "front right" }, -- [2] = { "FC", "front center" }, -- [3] = { "LFE", "low frequency" }, -- [4] = { "BL", "back left" }, -- [5] = { "BR", "back right" }, -- [6] = { "FLC", "front left-of-center" }, -- [7] = { "FRC", "front right-of-center" }, -- [8] = { "BC", "back center" }, -- [9] = { "SL", "side left" }, -- [10] = { "SR", "side right" }, -- [11] = { "TC", "top center" }, -- [12] = { "TFL", "top front left" }, -- [13] = { "TFC", "top front center" }, -- [14] = { "TFR", "top front right" }, -- [15] = { "TBL", "top back left" }, -- [16] = { "TBC", "top back center" }, -- [17] = { "TBR", "top back right" }, -- [29] = { "DL", "downmix left" }, -- [30] = { "DR", "downmix right" }, -- [31] = { "WL", "wide left" }, -- [32] = { "WR", "wide right" }, -- [33] = { "SDL", "surround direct left" }, -- [34] = { "SDR", "surround direct right" }, -- [35] = { "LFE2", "low frequency 2" }, -- [36] = { "TSL", "top side left" }, -- [37] = { "TSR", "top side right" }, -- [38] = { "BFC", "bottom front center" }, -- [39] = { "BFL", "bottom front left" }, -- [40] = { "BFR", "bottom front right" }, -+ [AV_CHAN_FRONT_LEFT ] = { "FL", "front left" }, -+ [AV_CHAN_FRONT_RIGHT ] = { "FR", "front right" }, -+ [AV_CHAN_FRONT_CENTER ] = { "FC", "front center" }, -+ [AV_CHAN_LOW_FREQUENCY ] = { "LFE", "low frequency" }, -+ [AV_CHAN_BACK_LEFT ] = { "BL", "back left" }, -+ [AV_CHAN_BACK_RIGHT ] = { "BR", "back right" }, -+ [AV_CHAN_FRONT_LEFT_OF_CENTER ] = { "FLC", "front left-of-center" }, -+ [AV_CHAN_FRONT_RIGHT_OF_CENTER] = { "FRC", "front right-of-center" }, -+ [AV_CHAN_BACK_CENTER ] = { "BC", "back center" }, -+ [AV_CHAN_SIDE_LEFT ] = { "SL", "side left" }, -+ [AV_CHAN_SIDE_RIGHT ] = { "SR", "side right" }, -+ [AV_CHAN_TOP_CENTER ] = { "TC", "top center" }, -+ [AV_CHAN_TOP_FRONT_LEFT ] = { "TFL", "top front left" }, -+ [AV_CHAN_TOP_FRONT_CENTER ] = { "TFC", "top front center" }, -+ [AV_CHAN_TOP_FRONT_RIGHT ] = { "TFR", "top front right" }, -+ [AV_CHAN_TOP_BACK_LEFT ] = { "TBL", "top back left" }, -+ [AV_CHAN_TOP_BACK_CENTER ] = { "TBC", "top back center" }, -+ [AV_CHAN_TOP_BACK_RIGHT ] = { "TBR", "top back right" }, -+ [AV_CHAN_STEREO_LEFT ] = { "DL", "downmix left" }, -+ [AV_CHAN_STEREO_RIGHT ] = { "DR", "downmix right" }, -+ [AV_CHAN_WIDE_LEFT ] = { "WL", "wide left" }, -+ [AV_CHAN_WIDE_RIGHT ] = { "WR", "wide right" }, -+ [AV_CHAN_SURROUND_DIRECT_LEFT ] = { "SDL", "surround direct left" }, -+ [AV_CHAN_SURROUND_DIRECT_RIGHT] = { "SDR", "surround direct right" }, -+ [AV_CHAN_LOW_FREQUENCY_2 ] = { "LFE2", "low frequency 2" }, -+ [AV_CHAN_TOP_SIDE_LEFT ] = { "TSL", "top side left" }, -+ [AV_CHAN_TOP_SIDE_RIGHT ] = { "TSR", "top side right" }, -+ [AV_CHAN_BOTTOM_FRONT_CENTER ] = { "BFC", "bottom front center" }, -+ [AV_CHAN_BOTTOM_FRONT_LEFT ] = { "BFL", "bottom front left" }, -+ [AV_CHAN_BOTTOM_FRONT_RIGHT ] = { "BFR", "bottom front right" }, - }; - --static const char *get_channel_name(int channel_id) -+static const char *get_channel_name(enum AVChannel channel_id) - { -- if (channel_id < 0 || channel_id >= FF_ARRAY_ELEMS(channel_names)) -+ if ((unsigned) channel_id >= FF_ARRAY_ELEMS(channel_names) || -+ !channel_names[channel_id].name) - return NULL; - return channel_names[channel_id].name; - } - --static const struct { -+void av_channel_name_bprint(AVBPrint *bp, enum AVChannel channel_id) -+{ -+ if (channel_id >= AV_CHAN_AMBISONIC_BASE && -+ channel_id <= AV_CHAN_AMBISONIC_END) -+ av_bprintf(bp, "AMBI%d", channel_id - AV_CHAN_AMBISONIC_BASE); -+ else if ((unsigned)channel_id < FF_ARRAY_ELEMS(channel_names) && -+ channel_names[channel_id].name) -+ av_bprintf(bp, "%s", channel_names[channel_id].name); -+ else if (channel_id == AV_CHAN_NONE) -+ av_bprintf(bp, "NONE"); -+ else -+ av_bprintf(bp, "USR%d", channel_id); -+} -+ -+int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel_id) -+{ -+ AVBPrint bp; -+ -+ if (!buf && buf_size) -+ return AVERROR(EINVAL); -+ -+ av_bprint_init_for_buffer(&bp, buf, buf_size); -+ av_channel_name_bprint(&bp, channel_id); -+ -+ return bp.len; -+} -+ -+void av_channel_description_bprint(AVBPrint *bp, enum AVChannel channel_id) -+{ -+ if (channel_id >= AV_CHAN_AMBISONIC_BASE && -+ channel_id <= AV_CHAN_AMBISONIC_END) -+ av_bprintf(bp, "ambisonic ACN %d", channel_id - AV_CHAN_AMBISONIC_BASE); -+ else if ((unsigned)channel_id < FF_ARRAY_ELEMS(channel_names) && -+ channel_names[channel_id].description) -+ av_bprintf(bp, "%s", channel_names[channel_id].description); -+ else if (channel_id == AV_CHAN_NONE) -+ av_bprintf(bp, "none"); -+ else -+ av_bprintf(bp, "user %d", channel_id); -+} -+ -+int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel_id) -+{ -+ AVBPrint bp; -+ -+ if (!buf && buf_size) -+ return AVERROR(EINVAL); -+ -+ av_bprint_init_for_buffer(&bp, buf, buf_size); -+ av_channel_description_bprint(&bp, channel_id); -+ -+ return bp.len; -+} -+ -+enum AVChannel av_channel_from_string(const char *str) -+{ -+ int i; -+ char *endptr = (char *)str; -+ enum AVChannel id = AV_CHAN_NONE; -+ -+ if (!strncmp(str, "AMBI", 4)) { -+ i = strtol(str + 4, NULL, 0); -+ if (i < 0 || i > AV_CHAN_AMBISONIC_END - AV_CHAN_AMBISONIC_BASE) -+ return AV_CHAN_NONE; -+ return AV_CHAN_AMBISONIC_BASE + i; -+ } -+ -+ for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) { -+ if (channel_names[i].name && !strcmp(str, channel_names[i].name)) -+ return i; -+ } -+ if (!strncmp(str, "USR", 3)) { -+ const char *p = str + 3; -+ id = strtol(p, &endptr, 0); -+ } -+ if (id >= 0 && !*endptr) -+ return id; -+ -+ return AV_CHAN_NONE; -+} -+ -+struct channel_layout_name { - const char *name; -- int nb_channels; -- uint64_t layout; --} channel_layout_map[] = { -- { "mono", 1, AV_CH_LAYOUT_MONO }, -- { "stereo", 2, AV_CH_LAYOUT_STEREO }, -- { "2.1", 3, AV_CH_LAYOUT_2POINT1 }, -- { "3.0", 3, AV_CH_LAYOUT_SURROUND }, -- { "3.0(back)", 3, AV_CH_LAYOUT_2_1 }, -- { "4.0", 4, AV_CH_LAYOUT_4POINT0 }, -- { "quad", 4, AV_CH_LAYOUT_QUAD }, -- { "quad(side)", 4, AV_CH_LAYOUT_2_2 }, -- { "3.1", 4, AV_CH_LAYOUT_3POINT1 }, -- { "5.0", 5, AV_CH_LAYOUT_5POINT0_BACK }, -- { "5.0(side)", 5, AV_CH_LAYOUT_5POINT0 }, -- { "4.1", 5, AV_CH_LAYOUT_4POINT1 }, -- { "5.1", 6, AV_CH_LAYOUT_5POINT1_BACK }, -- { "5.1(side)", 6, AV_CH_LAYOUT_5POINT1 }, -- { "6.0", 6, AV_CH_LAYOUT_6POINT0 }, -- { "6.0(front)", 6, AV_CH_LAYOUT_6POINT0_FRONT }, -- { "hexagonal", 6, AV_CH_LAYOUT_HEXAGONAL }, -- { "6.1", 7, AV_CH_LAYOUT_6POINT1 }, -- { "6.1(back)", 7, AV_CH_LAYOUT_6POINT1_BACK }, -- { "6.1(front)", 7, AV_CH_LAYOUT_6POINT1_FRONT }, -- { "7.0", 7, AV_CH_LAYOUT_7POINT0 }, -- { "7.0(front)", 7, AV_CH_LAYOUT_7POINT0_FRONT }, -- { "7.1", 8, AV_CH_LAYOUT_7POINT1 }, -- { "7.1(wide)", 8, AV_CH_LAYOUT_7POINT1_WIDE_BACK }, -- { "7.1(wide-side)", 8, AV_CH_LAYOUT_7POINT1_WIDE }, -- { "octagonal", 8, AV_CH_LAYOUT_OCTAGONAL }, -- { "hexadecagonal", 16, AV_CH_LAYOUT_HEXADECAGONAL }, -- { "downmix", 2, AV_CH_LAYOUT_STEREO_DOWNMIX, }, -- { "22.2", 24, AV_CH_LAYOUT_22POINT2, }, -+ AVChannelLayout layout; -+}; -+ -+static const struct channel_layout_name channel_layout_map[] = { -+ { "mono", AV_CHANNEL_LAYOUT_MONO }, -+ { "stereo", AV_CHANNEL_LAYOUT_STEREO }, -+ { "2.1", AV_CHANNEL_LAYOUT_2POINT1 }, -+ { "3.0", AV_CHANNEL_LAYOUT_SURROUND }, -+ { "3.0(back)", AV_CHANNEL_LAYOUT_2_1 }, -+ { "4.0", AV_CHANNEL_LAYOUT_4POINT0 }, -+ { "quad", AV_CHANNEL_LAYOUT_QUAD }, -+ { "quad(side)", AV_CHANNEL_LAYOUT_2_2 }, -+ { "3.1", AV_CHANNEL_LAYOUT_3POINT1 }, -+ { "5.0", AV_CHANNEL_LAYOUT_5POINT0_BACK }, -+ { "5.0(side)", AV_CHANNEL_LAYOUT_5POINT0 }, -+ { "4.1", AV_CHANNEL_LAYOUT_4POINT1 }, -+ { "5.1", AV_CHANNEL_LAYOUT_5POINT1_BACK }, -+ { "5.1(side)", AV_CHANNEL_LAYOUT_5POINT1 }, -+ { "6.0", AV_CHANNEL_LAYOUT_6POINT0 }, -+ { "6.0(front)", AV_CHANNEL_LAYOUT_6POINT0_FRONT }, -+ { "hexagonal", AV_CHANNEL_LAYOUT_HEXAGONAL }, -+ { "6.1", AV_CHANNEL_LAYOUT_6POINT1 }, -+ { "6.1(back)", AV_CHANNEL_LAYOUT_6POINT1_BACK }, -+ { "6.1(front)", AV_CHANNEL_LAYOUT_6POINT1_FRONT }, -+ { "7.0", AV_CHANNEL_LAYOUT_7POINT0 }, -+ { "7.0(front)", AV_CHANNEL_LAYOUT_7POINT0_FRONT }, -+ { "7.1", AV_CHANNEL_LAYOUT_7POINT1 }, -+ { "7.1(wide)", AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK }, -+ { "7.1(wide-side)", AV_CHANNEL_LAYOUT_7POINT1_WIDE }, -+ { "7.1(top)", AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK }, -+ { "octagonal", AV_CHANNEL_LAYOUT_OCTAGONAL }, -+ { "cube", AV_CHANNEL_LAYOUT_CUBE }, -+ { "hexadecagonal", AV_CHANNEL_LAYOUT_HEXADECAGONAL }, -+ { "downmix", AV_CHANNEL_LAYOUT_STEREO_DOWNMIX, }, -+ { "22.2", AV_CHANNEL_LAYOUT_22POINT2, }, - }; - -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - static uint64_t get_channel_layout_single(const char *name, int name_len) - { - int i; -@@ -121,7 +215,7 @@ - for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) { - if (strlen(channel_layout_map[i].name) == name_len && - !memcmp(channel_layout_map[i].name, name, name_len)) -- return channel_layout_map[i].layout; -+ return channel_layout_map[i].layout.u.mask; - } - for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) - if (channel_names[i].name && -@@ -189,8 +283,8 @@ - nb_channels = av_get_channel_layout_nb_channels(channel_layout); - - for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) -- if (nb_channels == channel_layout_map[i].nb_channels && -- channel_layout == channel_layout_map[i].layout) { -+ if (nb_channels == channel_layout_map[i].layout.nb_channels && -+ channel_layout == channel_layout_map[i].layout.u.mask) { - av_bprintf(bp, "%s", channel_layout_map[i].name); - return; - } -@@ -231,8 +325,8 @@ - int64_t av_get_default_channel_layout(int nb_channels) { - int i; - for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) -- if (nb_channels == channel_layout_map[i].nb_channels) -- return channel_layout_map[i].layout; -+ if (nb_channels == channel_layout_map[i].layout.nb_channels) -+ return channel_layout_map[i].layout.u.mask; - return 0; - } - -@@ -287,7 +381,626 @@ - { - if (index >= FF_ARRAY_ELEMS(channel_layout_map)) - return AVERROR_EOF; -- if (layout) *layout = channel_layout_map[index].layout; -+ if (layout) *layout = channel_layout_map[index].layout.u.mask; - if (name) *name = channel_layout_map[index].name; - return 0; - } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ -+int av_channel_layout_from_mask(AVChannelLayout *channel_layout, -+ uint64_t mask) -+{ -+ if (!mask) -+ return AVERROR(EINVAL); -+ -+ channel_layout->order = AV_CHANNEL_ORDER_NATIVE; -+ channel_layout->nb_channels = av_popcount64(mask); -+ channel_layout->u.mask = mask; -+ -+ return 0; -+} -+ -+int av_channel_layout_from_string(AVChannelLayout *channel_layout, -+ const char *str) -+{ -+ int i; -+ int channels = 0, nb_channels = 0, native = 1; -+ enum AVChannel highest_channel = AV_CHAN_NONE; -+ const char *dup; -+ char *chlist, *end; -+ uint64_t mask = 0; -+ -+ /* channel layout names */ -+ for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) { -+ if (channel_layout_map[i].name && !strcmp(str, channel_layout_map[i].name)) { -+ *channel_layout = channel_layout_map[i].layout; -+ return 0; -+ } -+ } -+ -+ /* ambisonic */ -+ if (!strncmp(str, "ambisonic ", 10)) { -+ const char *p = str + 10; -+ char *endptr; -+ AVChannelLayout extra = {0}; -+ int order; -+ -+ order = strtol(p, &endptr, 0); -+ if (order < 0 || order + 1 > INT_MAX / (order + 1) || -+ (*endptr && *endptr != '+')) -+ return AVERROR(EINVAL); -+ -+ channel_layout->order = AV_CHANNEL_ORDER_AMBISONIC; -+ channel_layout->nb_channels = (order + 1) * (order + 1); -+ -+ if (*endptr) { -+ int ret = av_channel_layout_from_string(&extra, endptr + 1); -+ if (ret < 0) -+ return ret; -+ if (extra.nb_channels >= INT_MAX - channel_layout->nb_channels) { -+ av_channel_layout_uninit(&extra); -+ return AVERROR(EINVAL); -+ } -+ -+ if (extra.order == AV_CHANNEL_ORDER_NATIVE) { -+ channel_layout->u.mask = extra.u.mask; -+ } else { -+ channel_layout->order = AV_CHANNEL_ORDER_CUSTOM; -+ channel_layout->u.map = -+ av_calloc(channel_layout->nb_channels + extra.nb_channels, -+ sizeof(*channel_layout->u.map)); -+ if (!channel_layout->u.map) { -+ av_channel_layout_uninit(&extra); -+ return AVERROR(ENOMEM); -+ } -+ -+ for (i = 0; i < channel_layout->nb_channels; i++) -+ channel_layout->u.map[i].id = AV_CHAN_AMBISONIC_BASE + i; -+ for (i = 0; i < extra.nb_channels; i++) { -+ enum AVChannel ch = av_channel_layout_channel_from_index(&extra, i); -+ if (CHAN_IS_AMBI(ch)) { -+ av_channel_layout_uninit(&extra); -+ return AVERROR(EINVAL); -+ } -+ channel_layout->u.map[channel_layout->nb_channels + i].id = ch; -+ if (extra.order == AV_CHANNEL_ORDER_CUSTOM && -+ extra.u.map[i].name[0]) -+ av_strlcpy(channel_layout->u.map[channel_layout->nb_channels + i].name, -+ extra.u.map[i].name, -+ sizeof(channel_layout->u.map[channel_layout->nb_channels + i].name)); -+ } -+ } -+ channel_layout->nb_channels += extra.nb_channels; -+ av_channel_layout_uninit(&extra); -+ } -+ -+ return 0; -+ } -+ -+ chlist = av_strdup(str); -+ if (!chlist) -+ return AVERROR(ENOMEM); -+ -+ /* channel names */ -+ av_sscanf(str, "%d channels (%[^)]", &nb_channels, chlist); -+ end = strchr(str, ')'); -+ -+ dup = chlist; -+ while (*dup) { -+ char *channel, *chname; -+ int ret = av_opt_get_key_value(&dup, "@", "+", AV_OPT_FLAG_IMPLICIT_KEY, &channel, &chname); -+ if (ret < 0) { -+ av_free(chlist); -+ return ret; -+ } -+ if (*dup) -+ dup++; // skip separator -+ if (channel && !*channel) -+ av_freep(&channel); -+ for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) { -+ if (channel_names[i].name && !strcmp(channel ? channel : chname, channel_names[i].name)) { -+ if (channel || i < highest_channel || mask & (1ULL << i)) -+ native = 0; // Not a native layout, use a custom one -+ highest_channel = i; -+ mask |= 1ULL << i; -+ break; -+ } -+ } -+ -+ if (!channel && i >= FF_ARRAY_ELEMS(channel_names)) { -+ char *endptr = chname; -+ enum AVChannel id = AV_CHAN_NONE; -+ -+ if (!strncmp(chname, "USR", 3)) { -+ const char *p = chname + 3; -+ id = strtol(p, &endptr, 0); -+ } -+ if (id < 0 || *endptr) { -+ native = 0; // Unknown channel name -+ channels = 0; -+ mask = 0; -+ av_free(chname); -+ break; -+ } -+ if (id > 63) -+ native = 0; // Not a native layout, use a custom one -+ else { -+ if (id < highest_channel || mask & (1ULL << id)) -+ native = 0; // Not a native layout, use a custom one -+ highest_channel = id; -+ mask |= 1ULL << id; -+ } -+ } -+ channels++; -+ av_free(channel); -+ av_free(chname); -+ } -+ -+ if (mask && native) { -+ av_free(chlist); -+ if (nb_channels && ((nb_channels != channels) || (!end || *++end))) -+ return AVERROR(EINVAL); -+ av_channel_layout_from_mask(channel_layout, mask); -+ return 0; -+ } -+ -+ /* custom layout of channel names */ -+ if (channels && !native) { -+ int idx = 0; -+ -+ if (nb_channels && ((nb_channels != channels) || (!end || *++end))) { -+ av_free(chlist); -+ return AVERROR(EINVAL); -+ } -+ -+ channel_layout->u.map = av_calloc(channels, sizeof(*channel_layout->u.map)); -+ if (!channel_layout->u.map) { -+ av_free(chlist); -+ return AVERROR(ENOMEM); -+ } -+ -+ channel_layout->order = AV_CHANNEL_ORDER_CUSTOM; -+ channel_layout->nb_channels = channels; -+ -+ dup = chlist; -+ while (*dup) { -+ char *channel, *chname; -+ int ret = av_opt_get_key_value(&dup, "@", "+", AV_OPT_FLAG_IMPLICIT_KEY, &channel, &chname); -+ if (ret < 0) { -+ av_freep(&channel_layout->u.map); -+ av_free(chlist); -+ return ret; -+ } -+ if (*dup) -+ dup++; // skip separator -+ for (i = 0; i < FF_ARRAY_ELEMS(channel_names); i++) { -+ if (channel_names[i].name && !strcmp(channel ? channel : chname, channel_names[i].name)) { -+ channel_layout->u.map[idx].id = i; -+ if (channel) -+ av_strlcpy(channel_layout->u.map[idx].name, chname, sizeof(channel_layout->u.map[idx].name)); -+ idx++; -+ break; -+ } -+ } -+ if (i >= FF_ARRAY_ELEMS(channel_names)) { -+ const char *p = (channel ? channel : chname) + 3; -+ channel_layout->u.map[idx].id = strtol(p, NULL, 0); -+ if (channel) -+ av_strlcpy(channel_layout->u.map[idx].name, chname, sizeof(channel_layout->u.map[idx].name)); -+ idx++; -+ } -+ av_free(channel); -+ av_free(chname); -+ } -+ av_free(chlist); -+ -+ return 0; -+ } -+ av_freep(&chlist); -+ -+ errno = 0; -+ mask = strtoull(str, &end, 0); -+ -+ /* channel layout mask */ -+ if (!errno && !*end && !strchr(str, '-') && mask) { -+ av_channel_layout_from_mask(channel_layout, mask); -+ return 0; -+ } -+ -+ errno = 0; -+ channels = strtol(str, &end, 10); -+ -+ /* number of channels */ -+ if (!errno && !strcmp(end, "c") && channels > 0) { -+ av_channel_layout_default(channel_layout, channels); -+ if (channel_layout->order == AV_CHANNEL_ORDER_NATIVE) -+ return 0; -+ } -+ -+ /* number of unordered channels */ -+ if (!errno && (!strcmp(end, "C") || !strcmp(end, " channels")) -+ && channels > 0) { -+ channel_layout->order = AV_CHANNEL_ORDER_UNSPEC; -+ channel_layout->nb_channels = channels; -+ return 0; -+ } -+ -+ return AVERROR(EINVAL); -+} -+ -+void av_channel_layout_uninit(AVChannelLayout *channel_layout) -+{ -+ if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) -+ av_freep(&channel_layout->u.map); -+ memset(channel_layout, 0, sizeof(*channel_layout)); -+} -+ -+int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src) -+{ -+ av_channel_layout_uninit(dst); -+ *dst = *src; -+ if (src->order == AV_CHANNEL_ORDER_CUSTOM) { -+ dst->u.map = av_malloc_array(src->nb_channels, sizeof(*dst->u.map)); -+ if (!dst->u.map) -+ return AVERROR(ENOMEM); -+ memcpy(dst->u.map, src->u.map, src->nb_channels * sizeof(*src->u.map)); -+ } -+ return 0; -+} -+ -+/** -+ * If the layout is n-th order standard-order ambisonic, with optional -+ * extra non-diegetic channels at the end, return the order. -+ * Return a negative error code otherwise. -+ */ -+static int ambisonic_order(const AVChannelLayout *channel_layout) -+{ -+ int i, highest_ambi, order; -+ -+ highest_ambi = -1; -+ if (channel_layout->order == AV_CHANNEL_ORDER_AMBISONIC) -+ highest_ambi = channel_layout->nb_channels - av_popcount64(channel_layout->u.mask) - 1; -+ else { -+ const AVChannelCustom *map = channel_layout->u.map; -+ av_assert0(channel_layout->order == AV_CHANNEL_ORDER_CUSTOM); -+ -+ for (i = 0; i < channel_layout->nb_channels; i++) { -+ int is_ambi = CHAN_IS_AMBI(map[i].id); -+ -+ /* ambisonic following non-ambisonic */ -+ if (i > 0 && is_ambi && !CHAN_IS_AMBI(map[i - 1].id)) -+ return AVERROR(EINVAL); -+ -+ /* non-default ordering */ -+ if (is_ambi && map[i].id - AV_CHAN_AMBISONIC_BASE != i) -+ return AVERROR(EINVAL); -+ -+ if (CHAN_IS_AMBI(map[i].id)) -+ highest_ambi = i; -+ } -+ } -+ /* no ambisonic channels*/ -+ if (highest_ambi < 0) -+ return AVERROR(EINVAL); -+ -+ order = floor(sqrt(highest_ambi)); -+ /* incomplete order - some harmonics are missing */ -+ if ((order + 1) * (order + 1) != highest_ambi + 1) -+ return AVERROR(EINVAL); -+ -+ return order; -+} -+ -+/** -+ * If the custom layout is n-th order standard-order ambisonic, with optional -+ * extra non-diegetic channels at the end, write its string description in bp. -+ * Return a negative error code otherwise. -+ */ -+static int try_describe_ambisonic(AVBPrint *bp, const AVChannelLayout *channel_layout) -+{ -+ int nb_ambi_channels; -+ int order = ambisonic_order(channel_layout); -+ if (order < 0) -+ return order; -+ -+ av_bprintf(bp, "ambisonic %d", order); -+ -+ /* extra channels present */ -+ nb_ambi_channels = (order + 1) * (order + 1); -+ if (nb_ambi_channels < channel_layout->nb_channels) { -+ AVChannelLayout extra = { 0 }; -+ -+ if (channel_layout->order == AV_CHANNEL_ORDER_AMBISONIC) { -+ extra.order = AV_CHANNEL_ORDER_NATIVE; -+ extra.nb_channels = av_popcount64(channel_layout->u.mask); -+ extra.u.mask = channel_layout->u.mask; -+ } else { -+ extra.order = AV_CHANNEL_ORDER_CUSTOM; -+ extra.nb_channels = channel_layout->nb_channels - nb_ambi_channels; -+ extra.u.map = channel_layout->u.map + nb_ambi_channels; -+ } -+ -+ av_bprint_chars(bp, '+', 1); -+ av_channel_layout_describe_bprint(&extra, bp); -+ /* Not calling uninit here on extra because we don't own the u.map pointer */ -+ } -+ -+ return 0; -+} -+ -+int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, -+ AVBPrint *bp) -+{ -+ int i; -+ -+ switch (channel_layout->order) { -+ case AV_CHANNEL_ORDER_NATIVE: -+ for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) -+ if (channel_layout->u.mask == channel_layout_map[i].layout.u.mask) { -+ av_bprintf(bp, "%s", channel_layout_map[i].name); -+ return 0; -+ } -+ // fall-through -+ case AV_CHANNEL_ORDER_CUSTOM: -+ if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) { -+ int res = try_describe_ambisonic(bp, channel_layout); -+ if (res >= 0) -+ return 0; -+ } -+ if (channel_layout->nb_channels) -+ av_bprintf(bp, "%d channels (", channel_layout->nb_channels); -+ for (i = 0; i < channel_layout->nb_channels; i++) { -+ enum AVChannel ch = av_channel_layout_channel_from_index(channel_layout, i); -+ -+ if (i) -+ av_bprintf(bp, "+"); -+ av_channel_name_bprint(bp, ch); -+ if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM && -+ channel_layout->u.map[i].name[0]) -+ av_bprintf(bp, "@%s", channel_layout->u.map[i].name); -+ } -+ if (channel_layout->nb_channels) { -+ av_bprintf(bp, ")"); -+ return 0; -+ } -+ // fall-through -+ case AV_CHANNEL_ORDER_UNSPEC: -+ av_bprintf(bp, "%d channels", channel_layout->nb_channels); -+ return 0; -+ case AV_CHANNEL_ORDER_AMBISONIC: -+ return try_describe_ambisonic(bp, channel_layout); -+ default: -+ return AVERROR(EINVAL); -+ } -+} -+ -+int av_channel_layout_describe(const AVChannelLayout *channel_layout, -+ char *buf, size_t buf_size) -+{ -+ AVBPrint bp; -+ int ret; -+ -+ if (!buf && buf_size) -+ return AVERROR(EINVAL); -+ -+ av_bprint_init_for_buffer(&bp, buf, buf_size); -+ ret = av_channel_layout_describe_bprint(channel_layout, &bp); -+ if (ret < 0) -+ return ret; -+ -+ return bp.len; -+} -+ -+enum AVChannel -+av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, -+ unsigned int idx) -+{ -+ int i; -+ -+ if (idx >= channel_layout->nb_channels) -+ return AV_CHAN_NONE; -+ -+ switch (channel_layout->order) { -+ case AV_CHANNEL_ORDER_CUSTOM: -+ return channel_layout->u.map[idx].id; -+ case AV_CHANNEL_ORDER_AMBISONIC: { -+ int ambi_channels = channel_layout->nb_channels - av_popcount64(channel_layout->u.mask); -+ if (idx < ambi_channels) -+ return AV_CHAN_AMBISONIC_BASE + idx; -+ idx -= ambi_channels; -+ } -+ // fall-through -+ case AV_CHANNEL_ORDER_NATIVE: -+ for (i = 0; i < 64; i++) { -+ if ((1ULL << i) & channel_layout->u.mask && !idx--) -+ return i; -+ } -+ default: -+ return AV_CHAN_NONE; -+ } -+} -+ -+enum AVChannel -+av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, -+ const char *str) -+{ -+ int index = av_channel_layout_index_from_string(channel_layout, str); -+ -+ if (index < 0) -+ return AV_CHAN_NONE; -+ -+ return av_channel_layout_channel_from_index(channel_layout, index); -+} -+ -+int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, -+ enum AVChannel channel) -+{ -+ int i; -+ -+ if (channel == AV_CHAN_NONE) -+ return AVERROR(EINVAL); -+ -+ switch (channel_layout->order) { -+ case AV_CHANNEL_ORDER_CUSTOM: -+ for (i = 0; i < channel_layout->nb_channels; i++) -+ if (channel_layout->u.map[i].id == channel) -+ return i; -+ return AVERROR(EINVAL); -+ case AV_CHANNEL_ORDER_AMBISONIC: -+ case AV_CHANNEL_ORDER_NATIVE: { -+ uint64_t mask = channel_layout->u.mask; -+ int ambi_channels = channel_layout->nb_channels - av_popcount64(mask); -+ if (channel_layout->order == AV_CHANNEL_ORDER_AMBISONIC && -+ channel >= AV_CHAN_AMBISONIC_BASE) { -+ if (channel - AV_CHAN_AMBISONIC_BASE >= ambi_channels) -+ return AVERROR(EINVAL); -+ return channel - AV_CHAN_AMBISONIC_BASE; -+ } -+ if ((unsigned)channel > 63 || !(mask & (1ULL << channel))) -+ return AVERROR(EINVAL); -+ mask &= (1ULL << channel) - 1; -+ return av_popcount64(mask) + ambi_channels; -+ } -+ default: -+ return AVERROR(EINVAL); -+ } -+} -+ -+int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, -+ const char *str) -+{ -+ char *chname; -+ enum AVChannel ch = AV_CHAN_NONE; -+ -+ switch (channel_layout->order) { -+ case AV_CHANNEL_ORDER_CUSTOM: -+ chname = strstr(str, "@"); -+ if (chname) { -+ char buf[16]; -+ chname++; -+ av_strlcpy(buf, str, FFMIN(sizeof(buf), chname - str)); -+ if (!*chname) -+ chname = NULL; -+ ch = av_channel_from_string(buf); -+ if (ch == AV_CHAN_NONE && *buf) -+ return AVERROR(EINVAL); -+ } -+ for (int i = 0; chname && i < channel_layout->nb_channels; i++) { -+ if (!strcmp(chname, channel_layout->u.map[i].name) && -+ (ch == AV_CHAN_NONE || ch == channel_layout->u.map[i].id)) -+ return i; -+ } -+ // fall-through -+ case AV_CHANNEL_ORDER_AMBISONIC: -+ case AV_CHANNEL_ORDER_NATIVE: -+ ch = av_channel_from_string(str); -+ if (ch == AV_CHAN_NONE) -+ return AVERROR(EINVAL); -+ return av_channel_layout_index_from_channel(channel_layout, ch); -+ } -+ -+ return AVERROR(EINVAL); -+} -+ -+int av_channel_layout_check(const AVChannelLayout *channel_layout) -+{ -+ if (channel_layout->nb_channels <= 0) -+ return 0; -+ -+ switch (channel_layout->order) { -+ case AV_CHANNEL_ORDER_NATIVE: -+ return av_popcount64(channel_layout->u.mask) == channel_layout->nb_channels; -+ case AV_CHANNEL_ORDER_CUSTOM: -+ if (!channel_layout->u.map) -+ return 0; -+ for (int i = 0; i < channel_layout->nb_channels; i++) { -+ if (channel_layout->u.map[i].id == AV_CHAN_NONE) -+ return 0; -+ } -+ return 1; -+ case AV_CHANNEL_ORDER_AMBISONIC: -+ /* If non-diegetic channels are present, ensure they are taken into account */ -+ return av_popcount64(channel_layout->u.mask) < channel_layout->nb_channels; -+ case AV_CHANNEL_ORDER_UNSPEC: -+ return 1; -+ default: -+ return 0; -+ } -+} -+ -+int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1) -+{ -+ int i; -+ -+ /* different channel counts -> not equal */ -+ if (chl->nb_channels != chl1->nb_channels) -+ return 1; -+ -+ /* if only one is unspecified -> not equal */ -+ if ((chl->order == AV_CHANNEL_ORDER_UNSPEC) != -+ (chl1->order == AV_CHANNEL_ORDER_UNSPEC)) -+ return 1; -+ /* both are unspecified -> equal */ -+ else if (chl->order == AV_CHANNEL_ORDER_UNSPEC) -+ return 0; -+ -+ /* can compare masks directly */ -+ if ((chl->order == AV_CHANNEL_ORDER_NATIVE || -+ chl->order == AV_CHANNEL_ORDER_AMBISONIC) && -+ chl->order == chl1->order) -+ return chl->u.mask != chl1->u.mask; -+ -+ /* compare channel by channel */ -+ for (i = 0; i < chl->nb_channels; i++) -+ if (av_channel_layout_channel_from_index(chl, i) != -+ av_channel_layout_channel_from_index(chl1, i)) -+ return 1; -+ return 0; -+} -+ -+void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels) -+{ -+ int i; -+ for (i = 0; i < FF_ARRAY_ELEMS(channel_layout_map); i++) -+ if (nb_channels == channel_layout_map[i].layout.nb_channels) { -+ *ch_layout = channel_layout_map[i].layout; -+ return; -+ } -+ -+ ch_layout->order = AV_CHANNEL_ORDER_UNSPEC; -+ ch_layout->nb_channels = nb_channels; -+} -+ -+const AVChannelLayout *av_channel_layout_standard(void **opaque) -+{ -+ uintptr_t i = (uintptr_t)*opaque; -+ const AVChannelLayout *ch_layout = NULL; -+ -+ if (i < FF_ARRAY_ELEMS(channel_layout_map)) { -+ ch_layout = &channel_layout_map[i].layout; -+ *opaque = (void*)(i + 1); -+ } -+ -+ return ch_layout; -+} -+ -+uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, -+ uint64_t mask) -+{ -+ uint64_t ret = 0; -+ int i; -+ -+ switch (channel_layout->order) { -+ case AV_CHANNEL_ORDER_NATIVE: -+ case AV_CHANNEL_ORDER_AMBISONIC: -+ return channel_layout->u.mask & mask; -+ case AV_CHANNEL_ORDER_CUSTOM: -+ for (i = 0; i < 64; i++) -+ if (mask & (1ULL << i) && av_channel_layout_index_from_channel(channel_layout, i) >= 0) -+ ret |= (1ULL << i); -+ break; -+ } -+ -+ return ret; -+} -diff -Naur a/media/ffvpx/libavutil/channel_layout.h b/media/ffvpx/libavutil/channel_layout.h ---- a/media/ffvpx/libavutil/channel_layout.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/channel_layout.h 2023-04-06 12:50:24.493176583 +0200 -@@ -23,17 +23,132 @@ - #define AVUTIL_CHANNEL_LAYOUT_H - - #include -+#include -+ -+#include "version.h" -+#include "attributes.h" - - /** - * @file -- * audio channel layout utility functions -+ * @ingroup lavu_audio_channels -+ * Public libavutil channel layout APIs header. - */ - -+ - /** -- * @addtogroup lavu_audio -+ * @defgroup lavu_audio_channels Audio channels -+ * @ingroup lavu_audio -+ * -+ * Audio channel layout utility functions -+ * - * @{ - */ - -+enum AVChannel { -+ ///< Invalid channel index -+ AV_CHAN_NONE = -1, -+ AV_CHAN_FRONT_LEFT, -+ AV_CHAN_FRONT_RIGHT, -+ AV_CHAN_FRONT_CENTER, -+ AV_CHAN_LOW_FREQUENCY, -+ AV_CHAN_BACK_LEFT, -+ AV_CHAN_BACK_RIGHT, -+ AV_CHAN_FRONT_LEFT_OF_CENTER, -+ AV_CHAN_FRONT_RIGHT_OF_CENTER, -+ AV_CHAN_BACK_CENTER, -+ AV_CHAN_SIDE_LEFT, -+ AV_CHAN_SIDE_RIGHT, -+ AV_CHAN_TOP_CENTER, -+ AV_CHAN_TOP_FRONT_LEFT, -+ AV_CHAN_TOP_FRONT_CENTER, -+ AV_CHAN_TOP_FRONT_RIGHT, -+ AV_CHAN_TOP_BACK_LEFT, -+ AV_CHAN_TOP_BACK_CENTER, -+ AV_CHAN_TOP_BACK_RIGHT, -+ /** Stereo downmix. */ -+ AV_CHAN_STEREO_LEFT = 29, -+ /** See above. */ -+ AV_CHAN_STEREO_RIGHT, -+ AV_CHAN_WIDE_LEFT, -+ AV_CHAN_WIDE_RIGHT, -+ AV_CHAN_SURROUND_DIRECT_LEFT, -+ AV_CHAN_SURROUND_DIRECT_RIGHT, -+ AV_CHAN_LOW_FREQUENCY_2, -+ AV_CHAN_TOP_SIDE_LEFT, -+ AV_CHAN_TOP_SIDE_RIGHT, -+ AV_CHAN_BOTTOM_FRONT_CENTER, -+ AV_CHAN_BOTTOM_FRONT_LEFT, -+ AV_CHAN_BOTTOM_FRONT_RIGHT, -+ -+ /** Channel is empty can be safely skipped. */ -+ AV_CHAN_UNUSED = 0x200, -+ -+ /** Channel contains data, but its position is unknown. */ -+ AV_CHAN_UNKNOWN = 0x300, -+ -+ /** -+ * Range of channels between AV_CHAN_AMBISONIC_BASE and -+ * AV_CHAN_AMBISONIC_END represent Ambisonic components using the ACN system. -+ * -+ * Given a channel id `` between AV_CHAN_AMBISONIC_BASE and -+ * AV_CHAN_AMBISONIC_END (inclusive), the ACN index of the channel `` is -+ * ` = - AV_CHAN_AMBISONIC_BASE`. -+ * -+ * @note these values are only used for AV_CHANNEL_ORDER_CUSTOM channel -+ * orderings, the AV_CHANNEL_ORDER_AMBISONIC ordering orders the channels -+ * implicitly by their position in the stream. -+ */ -+ AV_CHAN_AMBISONIC_BASE = 0x400, -+ // leave space for 1024 ids, which correspond to maximum order-32 harmonics, -+ // which should be enough for the foreseeable use cases -+ AV_CHAN_AMBISONIC_END = 0x7ff, -+}; -+ -+enum AVChannelOrder { -+ /** -+ * Only the channel count is specified, without any further information -+ * about the channel order. -+ */ -+ AV_CHANNEL_ORDER_UNSPEC, -+ /** -+ * The native channel order, i.e. the channels are in the same order in -+ * which they are defined in the AVChannel enum. This supports up to 63 -+ * different channels. -+ */ -+ AV_CHANNEL_ORDER_NATIVE, -+ /** -+ * The channel order does not correspond to any other predefined order and -+ * is stored as an explicit map. For example, this could be used to support -+ * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE) -+ * channels at arbitrary positions. -+ */ -+ AV_CHANNEL_ORDER_CUSTOM, -+ /** -+ * The audio is represented as the decomposition of the sound field into -+ * spherical harmonics. Each channel corresponds to a single expansion -+ * component. Channels are ordered according to ACN (Ambisonic Channel -+ * Number). -+ * -+ * The channel with the index n in the stream contains the spherical -+ * harmonic of degree l and order m given by -+ * @code{.unparsed} -+ * l = floor(sqrt(n)), -+ * m = n - l * (l + 1). -+ * @endcode -+ * -+ * Conversely given a spherical harmonic of degree l and order m, the -+ * corresponding channel index n is given by -+ * @code{.unparsed} -+ * n = l * (l + 1) + m. -+ * @endcode -+ * -+ * Normalization is assumed to be SN3D (Schmidt Semi-Normalization) -+ * as defined in AmbiX format $ 2.1. -+ */ -+ AV_CHANNEL_ORDER_AMBISONIC, -+}; -+ -+ - /** - * @defgroup channel_masks Audio channel masks - * -@@ -46,41 +161,46 @@ - * - * @{ - */ --#define AV_CH_FRONT_LEFT 0x00000001 --#define AV_CH_FRONT_RIGHT 0x00000002 --#define AV_CH_FRONT_CENTER 0x00000004 --#define AV_CH_LOW_FREQUENCY 0x00000008 --#define AV_CH_BACK_LEFT 0x00000010 --#define AV_CH_BACK_RIGHT 0x00000020 --#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040 --#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080 --#define AV_CH_BACK_CENTER 0x00000100 --#define AV_CH_SIDE_LEFT 0x00000200 --#define AV_CH_SIDE_RIGHT 0x00000400 --#define AV_CH_TOP_CENTER 0x00000800 --#define AV_CH_TOP_FRONT_LEFT 0x00001000 --#define AV_CH_TOP_FRONT_CENTER 0x00002000 --#define AV_CH_TOP_FRONT_RIGHT 0x00004000 --#define AV_CH_TOP_BACK_LEFT 0x00008000 --#define AV_CH_TOP_BACK_CENTER 0x00010000 --#define AV_CH_TOP_BACK_RIGHT 0x00020000 --#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix. --#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT. --#define AV_CH_WIDE_LEFT 0x0000000080000000ULL --#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL --#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL --#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL --#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL --#define AV_CH_TOP_SIDE_LEFT 0x0000001000000000ULL --#define AV_CH_TOP_SIDE_RIGHT 0x0000002000000000ULL --#define AV_CH_BOTTOM_FRONT_CENTER 0x0000004000000000ULL --#define AV_CH_BOTTOM_FRONT_LEFT 0x0000008000000000ULL --#define AV_CH_BOTTOM_FRONT_RIGHT 0x0000010000000000ULL -+#define AV_CH_FRONT_LEFT (1ULL << AV_CHAN_FRONT_LEFT ) -+#define AV_CH_FRONT_RIGHT (1ULL << AV_CHAN_FRONT_RIGHT ) -+#define AV_CH_FRONT_CENTER (1ULL << AV_CHAN_FRONT_CENTER ) -+#define AV_CH_LOW_FREQUENCY (1ULL << AV_CHAN_LOW_FREQUENCY ) -+#define AV_CH_BACK_LEFT (1ULL << AV_CHAN_BACK_LEFT ) -+#define AV_CH_BACK_RIGHT (1ULL << AV_CHAN_BACK_RIGHT ) -+#define AV_CH_FRONT_LEFT_OF_CENTER (1ULL << AV_CHAN_FRONT_LEFT_OF_CENTER ) -+#define AV_CH_FRONT_RIGHT_OF_CENTER (1ULL << AV_CHAN_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_BACK_CENTER (1ULL << AV_CHAN_BACK_CENTER ) -+#define AV_CH_SIDE_LEFT (1ULL << AV_CHAN_SIDE_LEFT ) -+#define AV_CH_SIDE_RIGHT (1ULL << AV_CHAN_SIDE_RIGHT ) -+#define AV_CH_TOP_CENTER (1ULL << AV_CHAN_TOP_CENTER ) -+#define AV_CH_TOP_FRONT_LEFT (1ULL << AV_CHAN_TOP_FRONT_LEFT ) -+#define AV_CH_TOP_FRONT_CENTER (1ULL << AV_CHAN_TOP_FRONT_CENTER ) -+#define AV_CH_TOP_FRONT_RIGHT (1ULL << AV_CHAN_TOP_FRONT_RIGHT ) -+#define AV_CH_TOP_BACK_LEFT (1ULL << AV_CHAN_TOP_BACK_LEFT ) -+#define AV_CH_TOP_BACK_CENTER (1ULL << AV_CHAN_TOP_BACK_CENTER ) -+#define AV_CH_TOP_BACK_RIGHT (1ULL << AV_CHAN_TOP_BACK_RIGHT ) -+#define AV_CH_STEREO_LEFT (1ULL << AV_CHAN_STEREO_LEFT ) -+#define AV_CH_STEREO_RIGHT (1ULL << AV_CHAN_STEREO_RIGHT ) -+#define AV_CH_WIDE_LEFT (1ULL << AV_CHAN_WIDE_LEFT ) -+#define AV_CH_WIDE_RIGHT (1ULL << AV_CHAN_WIDE_RIGHT ) -+#define AV_CH_SURROUND_DIRECT_LEFT (1ULL << AV_CHAN_SURROUND_DIRECT_LEFT ) -+#define AV_CH_SURROUND_DIRECT_RIGHT (1ULL << AV_CHAN_SURROUND_DIRECT_RIGHT) -+#define AV_CH_LOW_FREQUENCY_2 (1ULL << AV_CHAN_LOW_FREQUENCY_2 ) -+#define AV_CH_TOP_SIDE_LEFT (1ULL << AV_CHAN_TOP_SIDE_LEFT ) -+#define AV_CH_TOP_SIDE_RIGHT (1ULL << AV_CHAN_TOP_SIDE_RIGHT ) -+#define AV_CH_BOTTOM_FRONT_CENTER (1ULL << AV_CHAN_BOTTOM_FRONT_CENTER ) -+#define AV_CH_BOTTOM_FRONT_LEFT (1ULL << AV_CHAN_BOTTOM_FRONT_LEFT ) -+#define AV_CH_BOTTOM_FRONT_RIGHT (1ULL << AV_CHAN_BOTTOM_FRONT_RIGHT ) - -+#if FF_API_OLD_CHANNEL_LAYOUT - /** Channel mask value used for AVCodecContext.request_channel_layout - to indicate that the user requests the channel order of the decoder output -- to be the native codec channel order. */ -+ to be the native codec channel order. -+ @deprecated channel order is now indicated in a special field in -+ AVChannelLayout -+ */ - #define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL -+#endif - - /** - * @} -@@ -112,7 +232,9 @@ - #define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) - #define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) - #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) -+#define AV_CH_LAYOUT_7POINT1_TOP_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) - #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) -+#define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT) - #define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) - #define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) - #define AV_CH_LAYOUT_22POINT2 (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER|AV_CH_BACK_CENTER|AV_CH_LOW_FREQUENCY_2|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_CENTER|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_SIDE_LEFT|AV_CH_TOP_SIDE_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_BOTTOM_FRONT_CENTER|AV_CH_BOTTOM_FRONT_LEFT|AV_CH_BOTTOM_FRONT_RIGHT) -@@ -129,6 +251,164 @@ - }; - - /** -+ * @} -+ */ -+ -+/** -+ * An AVChannelCustom defines a single channel within a custom order layout -+ * -+ * Unlike most structures in FFmpeg, sizeof(AVChannelCustom) is a part of the -+ * public ABI. -+ * -+ * No new fields may be added to it without a major version bump. -+ */ -+typedef struct AVChannelCustom { -+ enum AVChannel id; -+ char name[16]; -+ void *opaque; -+} AVChannelCustom; -+ -+/** -+ * An AVChannelLayout holds information about the channel layout of audio data. -+ * -+ * A channel layout here is defined as a set of channels ordered in a specific -+ * way (unless the channel order is AV_CHANNEL_ORDER_UNSPEC, in which case an -+ * AVChannelLayout carries only the channel count). -+ * All orders may be treated as if they were AV_CHANNEL_ORDER_UNSPEC by -+ * ignoring everything but the channel count, as long as av_channel_layout_check() -+ * considers they are valid. -+ * -+ * Unlike most structures in FFmpeg, sizeof(AVChannelLayout) is a part of the -+ * public ABI and may be used by the caller. E.g. it may be allocated on stack -+ * or embedded in caller-defined structs. -+ * -+ * AVChannelLayout can be initialized as follows: -+ * - default initialization with {0}, followed by setting all used fields -+ * correctly; -+ * - by assigning one of the predefined AV_CHANNEL_LAYOUT_* initializers; -+ * - with a constructor function, such as av_channel_layout_default(), -+ * av_channel_layout_from_mask() or av_channel_layout_from_string(). -+ * -+ * The channel layout must be unitialized with av_channel_layout_uninit() -+ * -+ * Copying an AVChannelLayout via assigning is forbidden, -+ * av_channel_layout_copy() must be used instead (and its return value should -+ * be checked) -+ * -+ * No new fields may be added to it without a major version bump, except for -+ * new elements of the union fitting in sizeof(uint64_t). -+ */ -+typedef struct AVChannelLayout { -+ /** -+ * Channel order used in this layout. -+ * This is a mandatory field. -+ */ -+ enum AVChannelOrder order; -+ -+ /** -+ * Number of channels in this layout. Mandatory field. -+ */ -+ int nb_channels; -+ -+ /** -+ * Details about which channels are present in this layout. -+ * For AV_CHANNEL_ORDER_UNSPEC, this field is undefined and must not be -+ * used. -+ */ -+ union { -+ /** -+ * This member must be used for AV_CHANNEL_ORDER_NATIVE, and may be used -+ * for AV_CHANNEL_ORDER_AMBISONIC to signal non-diegetic channels. -+ * It is a bitmask, where the position of each set bit means that the -+ * AVChannel with the corresponding value is present. -+ * -+ * I.e. when (mask & (1 << AV_CHAN_FOO)) is non-zero, then AV_CHAN_FOO -+ * is present in the layout. Otherwise it is not present. -+ * -+ * @note when a channel layout using a bitmask is constructed or -+ * modified manually (i.e. not using any of the av_channel_layout_* -+ * functions), the code doing it must ensure that the number of set bits -+ * is equal to nb_channels. -+ */ -+ uint64_t mask; -+ /** -+ * This member must be used when the channel order is -+ * AV_CHANNEL_ORDER_CUSTOM. It is a nb_channels-sized array, with each -+ * element signalling the presence of the AVChannel with the -+ * corresponding value in map[i].id. -+ * -+ * I.e. when map[i].id is equal to AV_CHAN_FOO, then AV_CH_FOO is the -+ * i-th channel in the audio data. -+ * -+ * When map[i].id is in the range between AV_CHAN_AMBISONIC_BASE and -+ * AV_CHAN_AMBISONIC_END (inclusive), the channel contains an ambisonic -+ * component with ACN index (as defined above) -+ * n = map[i].id - AV_CHAN_AMBISONIC_BASE. -+ * -+ * map[i].name may be filled with a 0-terminated string, in which case -+ * it will be used for the purpose of identifying the channel with the -+ * convenience functions below. Otherise it must be zeroed. -+ */ -+ AVChannelCustom *map; -+ } u; -+ -+ /** -+ * For some private data of the user. -+ */ -+ void *opaque; -+} AVChannelLayout; -+ -+#define AV_CHANNEL_LAYOUT_MASK(nb, m) \ -+ { .order = AV_CHANNEL_ORDER_NATIVE, .nb_channels = (nb), .u = { .mask = (m) }} -+ -+/** -+ * @name Common pre-defined channel layouts -+ * @{ -+ */ -+#define AV_CHANNEL_LAYOUT_MONO AV_CHANNEL_LAYOUT_MASK(1, AV_CH_LAYOUT_MONO) -+#define AV_CHANNEL_LAYOUT_STEREO AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO) -+#define AV_CHANNEL_LAYOUT_2POINT1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2POINT1) -+#define AV_CHANNEL_LAYOUT_2_1 AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_2_1) -+#define AV_CHANNEL_LAYOUT_SURROUND AV_CHANNEL_LAYOUT_MASK(3, AV_CH_LAYOUT_SURROUND) -+#define AV_CHANNEL_LAYOUT_3POINT1 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_3POINT1) -+#define AV_CHANNEL_LAYOUT_4POINT0 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_4POINT0) -+#define AV_CHANNEL_LAYOUT_4POINT1 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_4POINT1) -+#define AV_CHANNEL_LAYOUT_2_2 AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_2_2) -+#define AV_CHANNEL_LAYOUT_QUAD AV_CHANNEL_LAYOUT_MASK(4, AV_CH_LAYOUT_QUAD) -+#define AV_CHANNEL_LAYOUT_5POINT0 AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0) -+#define AV_CHANNEL_LAYOUT_5POINT1 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1) -+#define AV_CHANNEL_LAYOUT_5POINT0_BACK AV_CHANNEL_LAYOUT_MASK(5, AV_CH_LAYOUT_5POINT0_BACK) -+#define AV_CHANNEL_LAYOUT_5POINT1_BACK AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_5POINT1_BACK) -+#define AV_CHANNEL_LAYOUT_6POINT0 AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0) -+#define AV_CHANNEL_LAYOUT_6POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_6POINT0_FRONT) -+#define AV_CHANNEL_LAYOUT_HEXAGONAL AV_CHANNEL_LAYOUT_MASK(6, AV_CH_LAYOUT_HEXAGONAL) -+#define AV_CHANNEL_LAYOUT_6POINT1 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1) -+#define AV_CHANNEL_LAYOUT_6POINT1_BACK AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_BACK) -+#define AV_CHANNEL_LAYOUT_6POINT1_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_6POINT1_FRONT) -+#define AV_CHANNEL_LAYOUT_7POINT0 AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0) -+#define AV_CHANNEL_LAYOUT_7POINT0_FRONT AV_CHANNEL_LAYOUT_MASK(7, AV_CH_LAYOUT_7POINT0_FRONT) -+#define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1) -+#define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE) -+#define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK) -+#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK) -+#define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL) -+#define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) -+#define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL) -+#define AV_CHANNEL_LAYOUT_STEREO_DOWNMIX AV_CHANNEL_LAYOUT_MASK(2, AV_CH_LAYOUT_STEREO_DOWNMIX) -+#define AV_CHANNEL_LAYOUT_22POINT2 AV_CHANNEL_LAYOUT_MASK(24, AV_CH_LAYOUT_22POINT2) -+#define AV_CHANNEL_LAYOUT_AMBISONIC_FIRST_ORDER \ -+ { .order = AV_CHANNEL_ORDER_AMBISONIC, .nb_channels = 4, .u = { .mask = 0 }} -+/** @} */ -+ -+struct AVBPrint; -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+/** -+ * @name Deprecated Functions -+ * @{ -+ */ -+ -+/** - * Return a channel layout id that matches name, or 0 if no match is found. - * - * name can be one or several of the following notations, -@@ -144,7 +424,10 @@ - * AV_CH_* macros). - * - * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" -+ * -+ * @deprecated use av_channel_layout_from_string() - */ -+attribute_deprecated - uint64_t av_get_channel_layout(const char *name); - - /** -@@ -158,7 +441,9 @@ - * @param[out] nb_channels number of channels - * - * @return 0 on success, AVERROR(EINVAL) if the parsing fails. -+ * @deprecated use av_channel_layout_from_string() - */ -+attribute_deprecated - int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); - - /** -@@ -167,47 +452,66 @@ - * - * @param buf put here the string containing the channel layout - * @param buf_size size in bytes of the buffer -+ * @param nb_channels number of channels -+ * @param channel_layout channel layout bitset -+ * @deprecated use av_channel_layout_describe() - */ -+attribute_deprecated - void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout); - --struct AVBPrint; - /** - * Append a description of a channel layout to a bprint buffer. -+ * @deprecated use av_channel_layout_describe() - */ -+attribute_deprecated - void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout); - - /** - * Return the number of channels in the channel layout. -+ * @deprecated use AVChannelLayout.nb_channels - */ -+attribute_deprecated - int av_get_channel_layout_nb_channels(uint64_t channel_layout); - - /** - * Return default channel layout for a given number of channels. -+ * -+ * @deprecated use av_channel_layout_default() - */ -+attribute_deprecated - int64_t av_get_default_channel_layout(int nb_channels); - - /** - * Get the index of a channel in channel_layout. - * -+ * @param channel_layout channel layout bitset - * @param channel a channel layout describing exactly one channel which must be - * present in channel_layout. - * - * @return index of channel in channel_layout on success, a negative AVERROR - * on error. -+ * -+ * @deprecated use av_channel_layout_index_from_channel() - */ -+attribute_deprecated - int av_get_channel_layout_channel_index(uint64_t channel_layout, - uint64_t channel); - - /** - * Get the channel with the given index in channel_layout. -+ * @deprecated use av_channel_layout_channel_from_index() - */ -+attribute_deprecated - uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index); - - /** - * Get the name of a given channel. - * - * @return channel name on success, NULL on error. -+ * -+ * @deprecated use av_channel_name() - */ -+attribute_deprecated - const char *av_get_channel_name(uint64_t channel); - - /** -@@ -215,7 +519,9 @@ - * - * @param channel a channel layout with a single channel - * @return channel description on success, NULL on error -+ * @deprecated use av_channel_description() - */ -+attribute_deprecated - const char *av_get_channel_description(uint64_t channel); - - /** -@@ -226,12 +532,251 @@ - * @param[out] name name of the layout - * @return 0 if the layout exists, - * <0 if index is beyond the limits -+ * @deprecated use av_channel_layout_standard() - */ -+attribute_deprecated - int av_get_standard_channel_layout(unsigned index, uint64_t *layout, - const char **name); -- - /** - * @} -+ */ -+#endif -+ -+/** -+ * Get a human readable string in an abbreviated form describing a given channel. -+ * This is the inverse function of @ref av_channel_from_string(). -+ * -+ * @param buf pre-allocated buffer where to put the generated string -+ * @param buf_size size in bytes of the buffer. -+ * @param channel the AVChannel whose name to get -+ * @return amount of bytes needed to hold the output string, or a negative AVERROR -+ * on failure. If the returned value is bigger than buf_size, then the -+ * string was truncated. -+ */ -+int av_channel_name(char *buf, size_t buf_size, enum AVChannel channel); -+ -+/** -+ * bprint variant of av_channel_name(). -+ * -+ * @note the string will be appended to the bprint buffer. -+ */ -+void av_channel_name_bprint(struct AVBPrint *bp, enum AVChannel channel_id); -+ -+/** -+ * Get a human readable string describing a given channel. -+ * -+ * @param buf pre-allocated buffer where to put the generated string -+ * @param buf_size size in bytes of the buffer. -+ * @param channel the AVChannel whose description to get -+ * @return amount of bytes needed to hold the output string, or a negative AVERROR -+ * on failure. If the returned value is bigger than buf_size, then the -+ * string was truncated. -+ */ -+int av_channel_description(char *buf, size_t buf_size, enum AVChannel channel); -+ -+/** -+ * bprint variant of av_channel_description(). -+ * -+ * @note the string will be appended to the bprint buffer. -+ */ -+void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_id); -+ -+/** -+ * This is the inverse function of @ref av_channel_name(). -+ * -+ * @return the channel with the given name -+ * AV_CHAN_NONE when name does not identify a known channel -+ */ -+enum AVChannel av_channel_from_string(const char *name); -+ -+/** -+ * Initialize a native channel layout from a bitmask indicating which channels -+ * are present. -+ * -+ * @param channel_layout the layout structure to be initialized -+ * @param mask bitmask describing the channel layout -+ * -+ * @return 0 on success -+ * AVERROR(EINVAL) for invalid mask values -+ */ -+int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask); -+ -+/** -+ * Initialize a channel layout from a given string description. -+ * The input string can be represented by: -+ * - the formal channel layout name (returned by av_channel_layout_describe()) -+ * - single or multiple channel names (returned by av_channel_name(), eg. "FL", -+ * or concatenated with "+", each optionally containing a custom name after -+ * a "@", eg. "FL@Left+FR@Right+LFE") -+ * - a decimal or hexadecimal value of a native channel layout (eg. "4" or "0x4") -+ * - the number of channels with default layout (eg. "4c") -+ * - the number of unordered channels (eg. "4C" or "4 channels") -+ * - the ambisonic order followed by optional non-diegetic channels (eg. -+ * "ambisonic 2+stereo") -+ * -+ * @param channel_layout input channel layout -+ * @param str string describing the channel layout -+ * @return 0 channel layout was detected, AVERROR_INVALIDATATA otherwise -+ */ -+int av_channel_layout_from_string(AVChannelLayout *channel_layout, -+ const char *str); -+ -+/** -+ * Get the default channel layout for a given number of channels. -+ * -+ * @param ch_layout the layout structure to be initialized -+ * @param nb_channels number of channels -+ */ -+void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels); -+ -+/** -+ * Iterate over all standard channel layouts. -+ * -+ * @param opaque a pointer where libavutil will store the iteration state. Must -+ * point to NULL to start the iteration. -+ * -+ * @return the standard channel layout or NULL when the iteration is -+ * finished -+ */ -+const AVChannelLayout *av_channel_layout_standard(void **opaque); -+ -+/** -+ * Free any allocated data in the channel layout and reset the channel -+ * count to 0. -+ * -+ * @param channel_layout the layout structure to be uninitialized -+ */ -+void av_channel_layout_uninit(AVChannelLayout *channel_layout); -+ -+/** -+ * Make a copy of a channel layout. This differs from just assigning src to dst -+ * in that it allocates and copies the map for AV_CHANNEL_ORDER_CUSTOM. -+ * -+ * @note the destination channel_layout will be always uninitialized before copy. -+ * -+ * @param dst destination channel layout -+ * @param src source channel layout -+ * @return 0 on success, a negative AVERROR on error. -+ */ -+int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src); -+ -+/** -+ * Get a human-readable string describing the channel layout properties. -+ * The string will be in the same format that is accepted by -+ * @ref av_channel_layout_from_string(), allowing to rebuild the same -+ * channel layout, except for opaque pointers. -+ * -+ * @param channel_layout channel layout to be described -+ * @param buf pre-allocated buffer where to put the generated string -+ * @param buf_size size in bytes of the buffer. -+ * @return amount of bytes needed to hold the output string, or a negative AVERROR -+ * on failure. If the returned value is bigger than buf_size, then the -+ * string was truncated. -+ */ -+int av_channel_layout_describe(const AVChannelLayout *channel_layout, -+ char *buf, size_t buf_size); -+ -+/** -+ * bprint variant of av_channel_layout_describe(). -+ * -+ * @note the string will be appended to the bprint buffer. -+ * @return 0 on success, or a negative AVERROR value on failure. -+ */ -+int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, -+ struct AVBPrint *bp); -+ -+/** -+ * Get the channel with the given index in a channel layout. -+ * -+ * @param channel_layout input channel layout -+ * @param idx index of the channel -+ * @return channel with the index idx in channel_layout on success or -+ * AV_CHAN_NONE on failure (if idx is not valid or the channel order is -+ * unspecified) -+ */ -+enum AVChannel -+av_channel_layout_channel_from_index(const AVChannelLayout *channel_layout, unsigned int idx); -+ -+/** -+ * Get the index of a given channel in a channel layout. In case multiple -+ * channels are found, only the first match will be returned. -+ * -+ * @param channel_layout input channel layout -+ * @param channel the channel whose index to obtain -+ * @return index of channel in channel_layout on success or a negative number if -+ * channel is not present in channel_layout. -+ */ -+int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, -+ enum AVChannel channel); -+ -+/** -+ * Get the index in a channel layout of a channel described by the given string. -+ * In case multiple channels are found, only the first match will be returned. -+ * -+ * This function accepts channel names in the same format as -+ * @ref av_channel_from_string(). -+ * -+ * @param channel_layout input channel layout -+ * @param name string describing the channel whose index to obtain -+ * @return a channel index described by the given string, or a negative AVERROR -+ * value. -+ */ -+int av_channel_layout_index_from_string(const AVChannelLayout *channel_layout, -+ const char *name); -+ -+/** -+ * Get a channel described by the given string. -+ * -+ * This function accepts channel names in the same format as -+ * @ref av_channel_from_string(). -+ * -+ * @param channel_layout input channel layout -+ * @param name string describing the channel to obtain -+ * @return a channel described by the given string in channel_layout on success -+ * or AV_CHAN_NONE on failure (if the string is not valid or the channel -+ * order is unspecified) -+ */ -+enum AVChannel -+av_channel_layout_channel_from_string(const AVChannelLayout *channel_layout, -+ const char *name); -+ -+/** -+ * Find out what channels from a given set are present in a channel layout, -+ * without regard for their positions. -+ * -+ * @param channel_layout input channel layout -+ * @param mask a combination of AV_CH_* representing a set of channels -+ * @return a bitfield representing all the channels from mask that are present -+ * in channel_layout -+ */ -+uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, -+ uint64_t mask); -+ -+/** -+ * Check whether a channel layout is valid, i.e. can possibly describe audio -+ * data. -+ * -+ * @param channel_layout input channel layout -+ * @return 1 if channel_layout is valid, 0 otherwise. -+ */ -+int av_channel_layout_check(const AVChannelLayout *channel_layout); -+ -+/** -+ * Check whether two channel layouts are semantically the same, i.e. the same -+ * channels are present on the same positions in both. -+ * -+ * If one of the channel layouts is AV_CHANNEL_ORDER_UNSPEC, while the other is -+ * not, they are considered to be unequal. If both are AV_CHANNEL_ORDER_UNSPEC, -+ * they are considered equal iff the channel counts are the same in both. -+ * -+ * @param chl input channel layout -+ * @param chl1 input channel layout -+ * @return 0 if chl and chl1 are equal, 1 if they are not equal. A negative -+ * AVERROR code if one or both are invalid. -+ */ -+int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1); -+ -+/** - * @} - */ - -diff -Naur a/media/ffvpx/libavutil/color_utils.c b/media/ffvpx/libavutil/color_utils.c ---- a/media/ffvpx/libavutil/color_utils.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/color_utils.c 2023-04-06 12:49:40.259395132 +0200 -@@ -21,7 +21,6 @@ - #include - #include - --#include "common.h" - #include "libavutil/color_utils.h" - #include "libavutil/pixfmt.h" - -diff -Naur a/media/ffvpx/libavutil/common.h b/media/ffvpx/libavutil/common.h ---- a/media/ffvpx/libavutil/common.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/common.h 2023-04-06 12:49:40.259395132 +0200 -@@ -41,14 +41,6 @@ - - #include "attributes.h" - #include "macros.h" --#include "version.h" --#include "libavutil/avconfig.h" -- --#if AV_HAVE_BIGENDIAN --# define AV_NE(be, le) (be) --#else --# define AV_NE(be, le) (le) --#endif - - //rounded division & shift - #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) -@@ -89,25 +81,6 @@ - #define FFABSU(a) ((a) <= 0 ? -(unsigned)(a) : (unsigned)(a)) - #define FFABS64U(a) ((a) <= 0 ? -(uint64_t)(a) : (uint64_t)(a)) - --/** -- * Comparator. -- * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 -- * if x == y. This is useful for instance in a qsort comparator callback. -- * Furthermore, compilers are able to optimize this to branchless code, and -- * there is no risk of overflow with signed types. -- * As with many macros, this evaluates its argument multiple times, it thus -- * must not have a side-effect. -- */ --#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) -- --#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) --#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) --#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) --#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) -- --#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) --#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) -- - /* misc math functions */ - - #ifdef HAVE_AV_CONFIG_H -@@ -405,6 +378,8 @@ - - /** - * Clip a float value into the amin-amax range. -+ * If a is nan or -inf amin will be returned. -+ * If a is +inf amax will be returned. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range -@@ -415,13 +390,13 @@ - #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); - #endif -- if (a < amin) return amin; -- else if (a > amax) return amax; -- else return a; -+ return FFMIN(FFMAX(a, amin), amax); - } - - /** - * Clip a double value into the amin-amax range. -+ * If a is nan or -inf amin will be returned. -+ * If a is +inf amax will be returned. - * @param a value to clip - * @param amin minimum value of the clip range - * @param amax maximum value of the clip range -@@ -432,9 +407,7 @@ - #if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); - #endif -- if (a < amin) return amin; -- else if (a > amax) return amax; -- else return a; -+ return FFMIN(FFMAX(a, amin), amax); - } - - /** Compute ceil(log2(x)). -@@ -475,9 +448,6 @@ - return av_popcount(v) & 1; - } - --#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) --#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) -- - /** - * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. - * -diff -Naur a/media/ffvpx/libavutil/cpu.c b/media/ffvpx/libavutil/cpu.c ---- a/media/ffvpx/libavutil/cpu.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/cpu.c 2023-04-06 12:50:06.975471215 +0200 -@@ -16,6 +16,15 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "config.h" -+ -+#if HAVE_SCHED_GETAFFINITY -+#ifndef _GNU_SOURCE -+# define _GNU_SOURCE -+#endif -+#include -+#endif -+ - #include - #include - #include -@@ -23,16 +32,9 @@ - #include "attributes.h" - #include "cpu.h" - #include "cpu_internal.h" --#include "config.h" - #include "opt.h" - #include "common.h" - --#if HAVE_SCHED_GETAFFINITY --#ifndef _GNU_SOURCE --# define _GNU_SOURCE --#endif --#include --#endif - #if HAVE_GETPROCESSAFFINITYMASK || HAVE_WINRT - #include - #endif -@@ -48,19 +50,25 @@ - #endif - - static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1); -+static atomic_int cpu_count = ATOMIC_VAR_INIT(-1); - - static int get_cpu_flags(void) - { -- if (ARCH_MIPS) -- return ff_get_cpu_flags_mips(); -- if (ARCH_AARCH64) -- return ff_get_cpu_flags_aarch64(); -- if (ARCH_ARM) -- return ff_get_cpu_flags_arm(); -- if (ARCH_PPC) -- return ff_get_cpu_flags_ppc(); -- if (ARCH_X86) -- return ff_get_cpu_flags_x86(); -+#if ARCH_MIPS -+ return ff_get_cpu_flags_mips(); -+#elif ARCH_AARCH64 -+ return ff_get_cpu_flags_aarch64(); -+#elif ARCH_ARM -+ return ff_get_cpu_flags_arm(); -+#elif ARCH_PPC -+ return ff_get_cpu_flags_ppc(); -+#elif ARCH_RISCV -+ return ff_get_cpu_flags_riscv(); -+#elif ARCH_X86 -+ return ff_get_cpu_flags_x86(); -+#elif ARCH_LOONGARCH -+ return ff_get_cpu_flags_loongarch(); -+#endif - return 0; - } - -@@ -102,97 +110,6 @@ - return flags; - } - --void av_set_cpu_flags_mask(int mask) --{ -- atomic_store_explicit(&cpu_flags, get_cpu_flags() & mask, -- memory_order_relaxed); --} -- --int av_parse_cpu_flags(const char *s) --{ --#define CPUFLAG_MMXEXT (AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT | AV_CPU_FLAG_CMOV) --#define CPUFLAG_3DNOW (AV_CPU_FLAG_3DNOW | AV_CPU_FLAG_MMX) --#define CPUFLAG_3DNOWEXT (AV_CPU_FLAG_3DNOWEXT | CPUFLAG_3DNOW) --#define CPUFLAG_SSE (AV_CPU_FLAG_SSE | CPUFLAG_MMXEXT) --#define CPUFLAG_SSE2 (AV_CPU_FLAG_SSE2 | CPUFLAG_SSE) --#define CPUFLAG_SSE2SLOW (AV_CPU_FLAG_SSE2SLOW | CPUFLAG_SSE2) --#define CPUFLAG_SSE3 (AV_CPU_FLAG_SSE3 | CPUFLAG_SSE2) --#define CPUFLAG_SSE3SLOW (AV_CPU_FLAG_SSE3SLOW | CPUFLAG_SSE3) --#define CPUFLAG_SSSE3 (AV_CPU_FLAG_SSSE3 | CPUFLAG_SSE3) --#define CPUFLAG_SSE4 (AV_CPU_FLAG_SSE4 | CPUFLAG_SSSE3) --#define CPUFLAG_SSE42 (AV_CPU_FLAG_SSE42 | CPUFLAG_SSE4) --#define CPUFLAG_AVX (AV_CPU_FLAG_AVX | CPUFLAG_SSE42) --#define CPUFLAG_AVXSLOW (AV_CPU_FLAG_AVXSLOW | CPUFLAG_AVX) --#define CPUFLAG_XOP (AV_CPU_FLAG_XOP | CPUFLAG_AVX) --#define CPUFLAG_FMA3 (AV_CPU_FLAG_FMA3 | CPUFLAG_AVX) --#define CPUFLAG_FMA4 (AV_CPU_FLAG_FMA4 | CPUFLAG_AVX) --#define CPUFLAG_AVX2 (AV_CPU_FLAG_AVX2 | CPUFLAG_AVX) --#define CPUFLAG_BMI2 (AV_CPU_FLAG_BMI2 | AV_CPU_FLAG_BMI1) --#define CPUFLAG_AESNI (AV_CPU_FLAG_AESNI | CPUFLAG_SSE42) --#define CPUFLAG_AVX512 (AV_CPU_FLAG_AVX512 | CPUFLAG_AVX2) -- static const AVOption cpuflags_opts[] = { -- { "flags" , NULL, 0, AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT64_MIN, INT64_MAX, .unit = "flags" }, --#if ARCH_PPC -- { "altivec" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ALTIVEC }, .unit = "flags" }, --#elif ARCH_X86 -- { "mmx" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMX }, .unit = "flags" }, -- { "mmxext" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_MMXEXT }, .unit = "flags" }, -- { "sse" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE }, .unit = "flags" }, -- { "sse2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE2 }, .unit = "flags" }, -- { "sse2slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE2SLOW }, .unit = "flags" }, -- { "sse3" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE3 }, .unit = "flags" }, -- { "sse3slow", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE3SLOW }, .unit = "flags" }, -- { "ssse3" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSSE3 }, .unit = "flags" }, -- { "atom" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ATOM }, .unit = "flags" }, -- { "sse4.1" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE4 }, .unit = "flags" }, -- { "sse4.2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_SSE42 }, .unit = "flags" }, -- { "avx" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX }, .unit = "flags" }, -- { "avxslow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVXSLOW }, .unit = "flags" }, -- { "xop" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_XOP }, .unit = "flags" }, -- { "fma3" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_FMA3 }, .unit = "flags" }, -- { "fma4" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_FMA4 }, .unit = "flags" }, -- { "avx2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX2 }, .unit = "flags" }, -- { "bmi1" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_BMI1 }, .unit = "flags" }, -- { "bmi2" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_BMI2 }, .unit = "flags" }, -- { "3dnow" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOW }, .unit = "flags" }, -- { "3dnowext", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_3DNOWEXT }, .unit = "flags" }, -- { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" }, -- { "aesni" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AESNI }, .unit = "flags" }, -- { "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = CPUFLAG_AVX512 }, .unit = "flags" }, --#elif ARCH_ARM -- { "armv5te", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV5TE }, .unit = "flags" }, -- { "armv6", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6 }, .unit = "flags" }, -- { "armv6t2", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV6T2 }, .unit = "flags" }, -- { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, -- { "vfp_vm", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP_VM }, .unit = "flags" }, -- { "vfpv3", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFPV3 }, .unit = "flags" }, -- { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" }, --#elif ARCH_AARCH64 -- { "armv8", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_ARMV8 }, .unit = "flags" }, -- { "neon", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_NEON }, .unit = "flags" }, -- { "vfp", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_VFP }, .unit = "flags" }, --#elif ARCH_MIPS -- { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, -- { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, --#endif -- { NULL }, -- }; -- static const AVClass class = { -- .class_name = "cpuflags", -- .item_name = av_default_item_name, -- .option = cpuflags_opts, -- .version = LIBAVUTIL_VERSION_INT, -- }; -- -- int flags = 0, ret; -- const AVClass *pclass = &class; -- -- if ((ret = av_opt_eval_flags(&pclass, &cpuflags_opts[0], s, &flags)) < 0) -- return ret; -- -- return flags & INT_MAX; --} -- - int av_parse_cpu_caps(unsigned *flags, const char *s) - { - static const AVOption cpuflags_opts[] = { -@@ -225,6 +142,8 @@ - { "cmov", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_CMOV }, .unit = "flags" }, - { "aesni", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AESNI }, .unit = "flags" }, - { "avx512" , NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512 }, .unit = "flags" }, -+ { "avx512icl", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_AVX512ICL }, .unit = "flags" }, -+ { "slowgather", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_SLOW_GATHER }, .unit = "flags" }, - - #define CPU_FLAG_P2 AV_CPU_FLAG_CMOV | AV_CPU_FLAG_MMX - #define CPU_FLAG_P3 CPU_FLAG_P2 | AV_CPU_FLAG_MMX2 | AV_CPU_FLAG_SSE -@@ -258,6 +177,18 @@ - #elif ARCH_MIPS - { "mmi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MMI }, .unit = "flags" }, - { "msa", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_MSA }, .unit = "flags" }, -+#elif ARCH_LOONGARCH -+ { "lsx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LSX }, .unit = "flags" }, -+ { "lasx", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_LASX }, .unit = "flags" }, -+#elif ARCH_RISCV -+ { "rvi", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVI }, .unit = "flags" }, -+ { "rvf", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVF }, .unit = "flags" }, -+ { "rvd", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVD }, .unit = "flags" }, -+ { "rvv-i32", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_I32 }, .unit = "flags" }, -+ { "rvv-f32", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_F32 }, .unit = "flags" }, -+ { "rvv-i64", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_I64 }, .unit = "flags" }, -+ { "rvv", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVV_F64 }, .unit = "flags" }, -+ { "rvb-basic",NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AV_CPU_FLAG_RVB_BASIC }, .unit = "flags" }, - #endif - { NULL }, - }; -@@ -274,9 +205,10 @@ - - int av_cpu_count(void) - { -- static volatile int printed; -+ static atomic_int printed = ATOMIC_VAR_INIT(0); - - int nb_cpus = 1; -+ int count = 0; - #if HAVE_WINRT - SYSTEM_INFO sysinfo; - #endif -@@ -312,26 +244,39 @@ - nb_cpus = sysinfo.dwNumberOfProcessors; - #endif - -- if (!printed) { -+ if (!atomic_exchange_explicit(&printed, 1, memory_order_relaxed)) - av_log(NULL, AV_LOG_DEBUG, "detected %d logical cores\n", nb_cpus); -- printed = 1; -+ -+ count = atomic_load_explicit(&cpu_count, memory_order_relaxed); -+ -+ if (count > 0) { -+ nb_cpus = count; -+ av_log(NULL, AV_LOG_DEBUG, "overriding to %d logical cores\n", nb_cpus); - } - - return nb_cpus; - } - -+void av_cpu_force_count(int count) -+{ -+ atomic_store_explicit(&cpu_count, count, memory_order_relaxed); -+} -+ - size_t av_cpu_max_align(void) - { -- if (ARCH_MIPS) -- return ff_get_cpu_max_align_mips(); -- if (ARCH_AARCH64) -- return ff_get_cpu_max_align_aarch64(); -- if (ARCH_ARM) -- return ff_get_cpu_max_align_arm(); -- if (ARCH_PPC) -- return ff_get_cpu_max_align_ppc(); -- if (ARCH_X86) -- return ff_get_cpu_max_align_x86(); -+#if ARCH_MIPS -+ return ff_get_cpu_max_align_mips(); -+#elif ARCH_AARCH64 -+ return ff_get_cpu_max_align_aarch64(); -+#elif ARCH_ARM -+ return ff_get_cpu_max_align_arm(); -+#elif ARCH_PPC -+ return ff_get_cpu_max_align_ppc(); -+#elif ARCH_X86 -+ return ff_get_cpu_max_align_x86(); -+#elif ARCH_LOONGARCH -+ return ff_get_cpu_max_align_loongarch(); -+#endif - - return 8; - } -diff -Naur a/media/ffvpx/libavutil/cpu.h b/media/ffvpx/libavutil/cpu.h ---- a/media/ffvpx/libavutil/cpu.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/cpu.h 2023-04-06 12:50:06.975471215 +0200 -@@ -23,8 +23,6 @@ - - #include - --#include "attributes.h" -- - #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ - - /* lower 16 bits - CPU features */ -@@ -56,6 +54,8 @@ - #define AV_CPU_FLAG_BMI1 0x20000 ///< Bit Manipulation Instruction Set 1 - #define AV_CPU_FLAG_BMI2 0x40000 ///< Bit Manipulation Instruction Set 2 - #define AV_CPU_FLAG_AVX512 0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used -+#define AV_CPU_FLAG_AVX512ICL 0x200000 ///< F/CD/BW/DQ/VL/VNNI/IFMA/VBMI/VBMI2/VPOPCNTDQ/BITALG/GFNI/VAES/VPCLMULQDQ -+#define AV_CPU_FLAG_SLOW_GATHER 0x2000000 ///< CPU has slow gathers. - - #define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard - #define AV_CPU_FLAG_VSX 0x0002 ///< ISA 2.06 -@@ -74,6 +74,20 @@ - #define AV_CPU_FLAG_MMI (1 << 0) - #define AV_CPU_FLAG_MSA (1 << 1) - -+//Loongarch SIMD extension. -+#define AV_CPU_FLAG_LSX (1 << 0) -+#define AV_CPU_FLAG_LASX (1 << 1) -+ -+// RISC-V extensions -+#define AV_CPU_FLAG_RVI (1 << 0) ///< I (full GPR bank) -+#define AV_CPU_FLAG_RVF (1 << 1) ///< F (single precision FP) -+#define AV_CPU_FLAG_RVD (1 << 2) ///< D (double precision FP) -+#define AV_CPU_FLAG_RVV_I32 (1 << 3) ///< Vectors of 8/16/32-bit int's */ -+#define AV_CPU_FLAG_RVV_F32 (1 << 4) ///< Vectors of float's */ -+#define AV_CPU_FLAG_RVV_I64 (1 << 5) ///< Vectors of 64-bit int's */ -+#define AV_CPU_FLAG_RVV_F64 (1 << 6) ///< Vectors of double's -+#define AV_CPU_FLAG_RVB_BASIC (1 << 7) ///< Basic bit-manipulations -+ - /** - * Return the flags which specify extensions supported by the CPU. - * The returned value is affected by av_force_cpu_flags() if that was used -@@ -89,25 +103,6 @@ - void av_force_cpu_flags(int flags); - - /** -- * Set a mask on flags returned by av_get_cpu_flags(). -- * This function is mainly useful for testing. -- * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible -- */ --attribute_deprecated void av_set_cpu_flags_mask(int mask); -- --/** -- * Parse CPU flags from a string. -- * -- * The returned flags contain the specified flags as well as related unspecified flags. -- * -- * This function exists only for compatibility with libav. -- * Please use av_parse_cpu_caps() when possible. -- * @return a combination of AV_CPU_* flags, negative on error. -- */ --attribute_deprecated --int av_parse_cpu_flags(const char *s); -- --/** - * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. - * - * @return negative on error. -@@ -120,6 +115,12 @@ - int av_cpu_count(void); - - /** -+ * Overrides cpu count detection and forces the specified count. -+ * Count < 1 disables forcing of specific count. -+ */ -+void av_cpu_force_count(int count); -+ -+/** - * Get the maximum data alignment that may be required by FFmpeg. - * - * Note that this is affected by the build configuration and the CPU flags mask, -diff -Naur a/media/ffvpx/libavutil/cpu_internal.h b/media/ffvpx/libavutil/cpu_internal.h ---- a/media/ffvpx/libavutil/cpu_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/cpu_internal.h 2023-04-06 12:50:06.975471215 +0200 -@@ -30,12 +30,15 @@ - (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \ - !((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW)) - -+#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) \ -+ (HAVE_ ## cpuext ## suffix && \ -+ ((flags) & (AV_CPU_FLAG_ ## cpuext | AV_CPU_FLAG_ ## cpuext ## SLOW))) -+ - #define CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, slow_cpuext) \ - (HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \ -- ((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW)) -+ ((flags) & (AV_CPU_FLAG_ ## slow_cpuext | AV_CPU_FLAG_ ## slow_cpuext ## SLOW))) - - #define CPUEXT_SUFFIX_FAST(flags, suffix, cpuext) CPUEXT_SUFFIX_FAST2(flags, suffix, cpuext, cpuext) --#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, cpuext) - - #define CPUEXT(flags, cpuext) CPUEXT_SUFFIX(flags, , cpuext) - #define CPUEXT_FAST(flags, cpuext) CPUEXT_SUFFIX_FAST(flags, , cpuext) -@@ -45,12 +48,15 @@ - int ff_get_cpu_flags_aarch64(void); - int ff_get_cpu_flags_arm(void); - int ff_get_cpu_flags_ppc(void); -+int ff_get_cpu_flags_riscv(void); - int ff_get_cpu_flags_x86(void); -+int ff_get_cpu_flags_loongarch(void); - - size_t ff_get_cpu_max_align_mips(void); - size_t ff_get_cpu_max_align_aarch64(void); - size_t ff_get_cpu_max_align_arm(void); - size_t ff_get_cpu_max_align_ppc(void); - size_t ff_get_cpu_max_align_x86(void); -+size_t ff_get_cpu_max_align_loongarch(void); - - #endif /* AVUTIL_CPU_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavutil/crc.c b/media/ffvpx/libavutil/crc.c ---- a/media/ffvpx/libavutil/crc.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/crc.c 2023-04-06 12:49:40.260395172 +0200 -@@ -23,8 +23,8 @@ - #include "thread.h" - #include "avassert.h" - #include "bswap.h" --#include "common.h" - #include "crc.h" -+#include "error.h" - - #if CONFIG_HARDCODED_TABLES - static const AVCRC av_crc_table[AV_CRC_MAX][257] = { -diff -Naur a/media/ffvpx/libavutil/crc.h b/media/ffvpx/libavutil/crc.h ---- a/media/ffvpx/libavutil/crc.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/crc.h 2023-04-06 12:50:06.975471215 +0200 -@@ -30,7 +30,6 @@ - #include - #include - #include "attributes.h" --#include "version.h" - - /** - * @defgroup lavu_crc32 CRC -@@ -85,7 +84,10 @@ - - /** - * Calculate the CRC of a block. -+ * @param ctx initialized AVCRC array (see av_crc_init()) - * @param crc CRC of previous blocks if any or initial value for CRC -+ * @param buffer buffer whose CRC to calculate -+ * @param length length of the buffer - * @return CRC updated with the data from the given block - * - * @see av_crc_init() "le" parameter -diff -Naur a/media/ffvpx/libavutil/dict.c b/media/ffvpx/libavutil/dict.c ---- a/media/ffvpx/libavutil/dict.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/dict.c 2023-04-06 12:50:24.493176583 +0200 -@@ -20,8 +20,10 @@ - - #include - -+#include "avassert.h" - #include "avstring.h" - #include "dict.h" -+#include "dict_internal.h" - #include "internal.h" - #include "mem.h" - #include "time_internal.h" -@@ -37,21 +39,35 @@ - return m ? m->count : 0; - } - --AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, -- const AVDictionaryEntry *prev, int flags) -+const AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, -+ const AVDictionaryEntry *prev) - { -- unsigned int i, j; -+ int i = 0; - - if (!m) - return NULL; - - if (prev) - i = prev - m->elems + 1; -- else -- i = 0; - -- for (; i < m->count; i++) { -- const char *s = m->elems[i].key; -+ av_assert2(i >= 0); -+ if (i >= m->count) -+ return NULL; -+ -+ return &m->elems[i]; -+} -+ -+AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, -+ const AVDictionaryEntry *prev, int flags) -+{ -+ const AVDictionaryEntry *entry = prev; -+ unsigned int j; -+ -+ if (!key) -+ return NULL; -+ -+ while ((entry = av_dict_iterate(m, entry))) { -+ const char *s = entry->key; - if (flags & AV_DICT_MATCH_CASE) - for (j = 0; s[j] == key[j] && key[j]; j++) - ; -@@ -62,7 +78,7 @@ - continue; - if (s[j] && !(flags & AV_DICT_IGNORE_SUFFIX)) - continue; -- return &m->elems[i]; -+ return (AVDictionaryEntry *)entry; - } - return NULL; - } -@@ -72,8 +88,17 @@ - { - AVDictionary *m = *pm; - AVDictionaryEntry *tag = NULL; -- char *oldval = NULL, *copy_key = NULL, *copy_value = NULL; -+ char *copy_key = NULL, *copy_value = NULL; -+ int err; - -+ if (flags & AV_DICT_DONT_STRDUP_VAL) -+ copy_value = (void *)value; -+ else if (value) -+ copy_value = av_strdup(value); -+ if (!key) { -+ err = AVERROR(EINVAL); -+ goto err_out; -+ } - if (!(flags & AV_DICT_MULTIKEY)) { - tag = av_dict_get(m, key, NULL, flags); - } -@@ -81,14 +106,10 @@ - copy_key = (void *)key; - else - copy_key = av_strdup(key); -- if (flags & AV_DICT_DONT_STRDUP_VAL) -- copy_value = (void *)value; -- else if (copy_key) -- copy_value = av_strdup(value); - if (!m) - m = *pm = av_mallocz(sizeof(*m)); -- if (!m || (key && !copy_key) || (value && !copy_value)) -- goto err_out; -+ if (!m || !copy_key || (value && !copy_value)) -+ goto enomem; - - if (tag) { - if (flags & AV_DICT_DONT_OVERWRITE) { -@@ -96,9 +117,17 @@ - av_free(copy_value); - return 0; - } -- if (flags & AV_DICT_APPEND) -- oldval = tag->value; -- else -+ if (copy_value && flags & AV_DICT_APPEND) { -+ size_t oldlen = strlen(tag->value); -+ size_t new_part_len = strlen(copy_value); -+ size_t len = oldlen + new_part_len + 1; -+ char *newval = av_realloc(tag->value, len); -+ if (!newval) -+ goto enomem; -+ memcpy(newval + oldlen, copy_value, new_part_len + 1); -+ av_freep(©_value); -+ copy_value = newval; -+ } else - av_free(tag->value); - av_free(tag->key); - *tag = m->elems[--m->count]; -@@ -106,34 +135,25 @@ - AVDictionaryEntry *tmp = av_realloc_array(m->elems, - m->count + 1, sizeof(*m->elems)); - if (!tmp) -- goto err_out; -+ goto enomem; - m->elems = tmp; - } - if (copy_value) { - m->elems[m->count].key = copy_key; - m->elems[m->count].value = copy_value; -- if (oldval && flags & AV_DICT_APPEND) { -- size_t len = strlen(oldval) + strlen(copy_value) + 1; -- char *newval = av_mallocz(len); -- if (!newval) -- goto err_out; -- av_strlcat(newval, oldval, len); -- av_freep(&oldval); -- av_strlcat(newval, copy_value, len); -- m->elems[m->count].value = newval; -- av_freep(©_value); -- } - m->count++; - } else { -+ if (!m->count) { -+ av_freep(&m->elems); -+ av_freep(pm); -+ } - av_freep(©_key); - } -- if (!m->count) { -- av_freep(&m->elems); -- av_freep(pm); -- } - - return 0; - -+enomem: -+ err = AVERROR(ENOMEM); - err_out: - if (m && !m->count) { - av_freep(&m->elems); -@@ -141,7 +161,7 @@ - } - av_free(copy_key); - av_free(copy_value); -- return AVERROR(ENOMEM); -+ return err; - } - - int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, -@@ -216,9 +236,9 @@ - - int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags) - { -- AVDictionaryEntry *t = NULL; -+ const AVDictionaryEntry *t = NULL; - -- while ((t = av_dict_get(src, "", t, AV_DICT_IGNORE_SUFFIX))) { -+ while ((t = av_dict_iterate(src, t))) { - int ret = av_dict_set(dst, t->key, t->value, flags); - if (ret < 0) - return ret; -@@ -230,7 +250,7 @@ - int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep) - { -- AVDictionaryEntry *t = NULL; -+ const AVDictionaryEntry *t = NULL; - AVBPrint bprint; - int cnt = 0; - char special_chars[] = {pairs_sep, key_val_sep, '\0'}; -@@ -245,7 +265,7 @@ - } - - av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED); -- while ((t = av_dict_get(m, "", t, AV_DICT_IGNORE_SUFFIX))) { -+ while ((t = av_dict_iterate(m, t))) { - if (cnt++) - av_bprint_append_data(&bprint, &pairs_sep, 1); - av_bprint_escape(&bprint, t->key, special_chars, AV_ESCAPE_MODE_BACKSLASH, 0); -diff -Naur a/media/ffvpx/libavutil/dict.h b/media/ffvpx/libavutil/dict.h ---- a/media/ffvpx/libavutil/dict.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/dict.h 2023-04-06 12:50:24.493176583 +0200 -@@ -32,8 +32,6 @@ - - #include - --#include "version.h" -- - /** - * @addtogroup lavu_dict AVDictionary - * @ingroup lavu_data -@@ -41,13 +39,15 @@ - * @brief Simple key:value store - * - * @{ -- * Dictionaries are used for storing key:value pairs. To create -- * an AVDictionary, simply pass an address of a NULL pointer to -- * av_dict_set(). NULL can be used as an empty dictionary wherever -- * a pointer to an AVDictionary is required. -- * Use av_dict_get() to retrieve an entry or iterate over all -- * entries and finally av_dict_free() to free the dictionary -- * and all its contents. -+ * Dictionaries are used for storing key-value pairs. -+ * -+ * - To **create an AVDictionary**, simply pass an address of a NULL -+ * pointer to av_dict_set(). NULL can be used as an empty dictionary -+ * wherever a pointer to an AVDictionary is required. -+ * - To **insert an entry**, use av_dict_set(). -+ * - Use av_dict_get() to **retrieve an entry**. -+ * - To **iterate over all entries**, use av_dict_iterate(). -+ * - In order to **free the dictionary and all its contents**, use av_dict_free(). - * - @code - AVDictionary *d = NULL; // "create" an empty dictionary -@@ -59,13 +59,18 @@ - char *v = av_strdup("value"); // you can avoid copying them like this - av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL); - -- while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) { -- <....> // iterate over all entries in d -+ while ((t = av_dict_iterate(d, t))) { -+ <....> // iterate over all entries in d - } - av_dict_free(&d); - @endcode - */ - -+/** -+ * @name AVDictionary Flags -+ * Flags that influence behavior of the matching of keys or insertion to the dictionary. -+ * @{ -+ */ - #define AV_DICT_MATCH_CASE 1 /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */ - #define AV_DICT_IGNORE_SUFFIX 2 /**< Return first entry in a dictionary whose first part corresponds to the search key, - ignoring the suffix of the found key string. Only relevant in av_dict_get(). */ -@@ -73,10 +78,13 @@ - allocated with av_malloc() or another memory allocation function. */ - #define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been - allocated with av_malloc() or another memory allocation function. */ --#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries. -+#define AV_DICT_DONT_OVERWRITE 16 /**< Don't overwrite existing entries. */ - #define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no -- delimiter is added, the strings are simply concatenated. */ -+ delimiter is added, the strings are simply concatenated. */ - #define AV_DICT_MULTIKEY 64 /**< Allow to store several equal keys in the dictionary */ -+/** -+ * @} -+ */ - - typedef struct AVDictionaryEntry { - char *key; -@@ -91,19 +99,45 @@ - * The returned entry key or value must not be changed, or it will - * cause undefined behavior. - * -- * To iterate through all the dictionary entries, you can set the matching key -- * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. -+ * @param prev Set to the previous matching element to find the next. -+ * If set to NULL the first matching element is returned. -+ * @param key Matching key -+ * @param flags A collection of AV_DICT_* flags controlling how the -+ * entry is retrieved - * -- * @param prev Set to the previous matching element to find the next. -- * If set to NULL the first matching element is returned. -- * @param key matching key -- * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved -- * @return found entry or NULL in case no matching entry was found in the dictionary -+ * @return Found entry or NULL in case no matching entry was found in the dictionary - */ - AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key, - const AVDictionaryEntry *prev, int flags); - - /** -+ * Iterate over a dictionary -+ * -+ * Iterates through all entries in the dictionary. -+ * -+ * @warning The returned AVDictionaryEntry key/value must not be changed. -+ * -+ * @warning As av_dict_set() invalidates all previous entries returned -+ * by this function, it must not be called while iterating over the dict. -+ * -+ * Typical usage: -+ * @code -+ * const AVDictionaryEntry *e = NULL; -+ * while ((e = av_dict_iterate(m, e))) { -+ * // ... -+ * } -+ * @endcode -+ * -+ * @param m The dictionary to iterate over -+ * @param prev Pointer to the previous AVDictionaryEntry, NULL initially -+ * -+ * @retval AVDictionaryEntry* The next element in the dictionary -+ * @retval NULL No more elements in the dictionary -+ */ -+const AVDictionaryEntry *av_dict_iterate(const AVDictionary *m, -+ const AVDictionaryEntry *prev); -+ -+/** - * Get number of entries in dictionary. - * - * @param m dictionary -@@ -117,23 +151,24 @@ - * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, - * these arguments will be freed on error. - * -- * Warning: Adding a new entry to a dictionary invalidates all existing entries -- * previously returned with av_dict_get. -+ * @warning Adding a new entry to a dictionary invalidates all existing entries -+ * previously returned with av_dict_get() or av_dict_iterate(). - * -- * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL -- * a dictionary struct is allocated and put in *pm. -- * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) -- * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). -- * Passing a NULL value will cause an existing entry to be deleted. -- * @return >= 0 on success otherwise an error code <0 -+ * @param pm Pointer to a pointer to a dictionary struct. If *pm is NULL -+ * a dictionary struct is allocated and put in *pm. -+ * @param key Entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) -+ * @param value Entry value to add to *pm (will be av_strduped or added as a new key depending on flags). -+ * Passing a NULL value will cause an existing entry to be deleted. -+ * -+ * @return >= 0 on success otherwise an error code <0 - */ - int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags); - - /** -- * Convenience wrapper for av_dict_set that converts the value to a string -+ * Convenience wrapper for av_dict_set() that converts the value to a string - * and stores it. - * -- * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. -+ * Note: If ::AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. - */ - int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags); - -@@ -143,14 +178,15 @@ - * In case of failure, all the successfully set entries are stored in - * *pm. You may need to manually free the created dictionary. - * -- * @param key_val_sep a 0-terminated list of characters used to separate -+ * @param key_val_sep A 0-terminated list of characters used to separate - * key from value -- * @param pairs_sep a 0-terminated list of characters used to separate -+ * @param pairs_sep A 0-terminated list of characters used to separate - * two pairs from each other -- * @param flags flags to use when adding to dictionary. -- * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL -+ * @param flags Flags to use when adding to the dictionary. -+ * ::AV_DICT_DONT_STRDUP_KEY and ::AV_DICT_DONT_STRDUP_VAL - * are ignored since the key/value tokens will always - * be duplicated. -+ * - * @return 0 on success, negative AVERROR code on failure - */ - int av_dict_parse_string(AVDictionary **pm, const char *str, -@@ -159,11 +195,14 @@ - - /** - * Copy entries from one AVDictionary struct into another. -- * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, -- * this function will allocate a struct for you and put it in *dst -- * @param src pointer to source AVDictionary struct -- * @param flags flags to use when setting entries in *dst -- * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag -+ * -+ * @note Metadata is read using the ::AV_DICT_IGNORE_SUFFIX flag -+ * -+ * @param dst Pointer to a pointer to a AVDictionary struct to copy into. If *dst is NULL, -+ * this function will allocate a struct for you and put it in *dst -+ * @param src Pointer to the source AVDictionary struct to copy items from. -+ * @param flags Flags to use when setting entries in *dst -+ * - * @return 0 on success, negative AVERROR code on failure. If dst was allocated - * by this function, callers should free the associated memory. - */ -@@ -182,13 +221,15 @@ - * Such string may be passed back to av_dict_parse_string(). - * @note String is escaped with backslashes ('\'). - * -- * @param[in] m dictionary -+ * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. -+ * -+ * @param[in] m The dictionary - * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. - * Buffer must be freed by the caller when is no longer needed. -- * @param[in] key_val_sep character used to separate key from value -- * @param[in] pairs_sep character used to separate two pairs from each other -+ * @param[in] key_val_sep Character used to separate key from value -+ * @param[in] pairs_sep Character used to separate two pairs from each other -+ * - * @return >= 0 on success, negative on error -- * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. - */ - int av_dict_get_string(const AVDictionary *m, char **buffer, - const char key_val_sep, const char pairs_sep); -diff -Naur a/media/ffvpx/libavutil/dict_internal.h b/media/ffvpx/libavutil/dict_internal.h ---- a/media/ffvpx/libavutil/dict_internal.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavutil/dict_internal.h 2023-04-06 12:50:06.975471215 +0200 -@@ -0,0 +1,37 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVUTIL_DICT_INTERNAL_H -+#define AVUTIL_DICT_INTERNAL_H -+ -+#include -+ -+#include "dict.h" -+ -+/** -+ * Set a dictionary value to an ISO-8601 compliant timestamp string. -+ * -+ * @param dict pointer to a pointer to a dictionary struct. If *dict is NULL -+ * a dictionary struct is allocated and put in *dict. -+ * @param key metadata key -+ * @param timestamp unix timestamp in microseconds -+ * @return <0 on error -+ */ -+int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp); -+ -+#endif /* AVUTIL_DICT_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavutil/error.c b/media/ffvpx/libavutil/error.c ---- a/media/ffvpx/libavutil/error.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/error.c 2023-04-06 12:49:40.260395172 +0200 -@@ -18,9 +18,12 @@ - - #undef _GNU_SOURCE - #define _XOPEN_SOURCE 600 /* XSI-compliant version of strerror_r */ --#include "avutil.h" -+#include -+#include -+#include "config.h" - #include "avstring.h" --#include "common.h" -+#include "error.h" -+#include "macros.h" - - struct error_entry { - int num; -diff -Naur a/media/ffvpx/libavutil/error.h b/media/ffvpx/libavutil/error.h ---- a/media/ffvpx/libavutil/error.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/error.h 2023-04-06 12:49:40.260395172 +0200 -@@ -27,6 +27,8 @@ - #include - #include - -+#include "macros.h" -+ - /** - * @addtogroup lavu_error - * -diff -Naur a/media/ffvpx/libavutil/eval.h b/media/ffvpx/libavutil/eval.h ---- a/media/ffvpx/libavutil/eval.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/eval.h 2023-04-06 12:50:06.975471215 +0200 -@@ -26,8 +26,6 @@ - #ifndef AVUTIL_EVAL_H - #define AVUTIL_EVAL_H - --#include "avutil.h" -- - typedef struct AVExpr AVExpr; - - /** -@@ -44,6 +42,7 @@ - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 -+ * @param log_offset log level offset, can be used to silence error messages - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise -@@ -67,6 +66,7 @@ - * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument - * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers - * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments -+ * @param log_offset log level offset, can be used to silence error messages - * @param log_ctx parent logging context - * @return >= 0 in case of success, a negative value corresponding to an - * AVERROR code otherwise -@@ -80,6 +80,7 @@ - /** - * Evaluate a previously parsed expression. - * -+ * @param e the AVExpr to evaluate - * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names - * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2 - * @return the value of the expression -@@ -89,6 +90,7 @@ - /** - * Track the presence of variables and their number of occurrences in a parsed expression - * -+ * @param e the AVExpr to track variables in - * @param counter a zero-initialized array where the count of each variable will be stored - * @param size size of array - * @return 0 on success, a negative value indicates that no expression or array was passed -@@ -100,6 +102,7 @@ - * Track the presence of user provided functions and their number of occurrences - * in a parsed expression. - * -+ * @param e the AVExpr to track user provided functions in - * @param counter a zero-initialized array where the count of each function will be stored - * if you passed 5 functions with 2 arguments to av_expr_parse() - * then for arg=2 this will use upto 5 entries. -diff -Naur a/media/ffvpx/libavutil/ffversion.h b/media/ffvpx/libavutil/ffversion.h ---- a/media/ffvpx/libavutil/ffversion.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/ffversion.h 2023-04-06 12:50:24.493176583 +0200 -@@ -1,5 +1,5 @@ - /* Automatically generated by version.sh, do not manually edit! */ - #ifndef AVUTIL_FFVERSION_H - #define AVUTIL_FFVERSION_H --#define FFMPEG_VERSION "n4.0.2-6-g2be51cbeea" -+#define FFMPEG_VERSION "N-109117-g6a3e174ad1" - #endif /* AVUTIL_FFVERSION_H */ -diff -Naur a/media/ffvpx/libavutil/fifo.c b/media/ffvpx/libavutil/fifo.c ---- a/media/ffvpx/libavutil/fifo.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/fifo.c 2023-04-06 12:49:40.260395172 +0200 -@@ -20,13 +20,291 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include -+#include -+ - #include "avassert.h" --#include "common.h" -+#include "error.h" - #include "fifo.h" -+#include "macros.h" -+#include "mem.h" -+ -+// by default the FIFO can be auto-grown to 1MB -+#define AUTO_GROW_DEFAULT_BYTES (1024 * 1024) -+ -+struct AVFifo { -+ uint8_t *buffer; -+ -+ size_t elem_size, nb_elems; -+ size_t offset_r, offset_w; -+ // distinguishes the ambiguous situation offset_r == offset_w -+ int is_empty; -+ -+ unsigned int flags; -+ size_t auto_grow_limit; -+}; -+ -+AVFifo *av_fifo_alloc2(size_t nb_elems, size_t elem_size, -+ unsigned int flags) -+{ -+ AVFifo *f; -+ void *buffer = NULL; -+ -+ if (!elem_size) -+ return NULL; -+ -+ if (nb_elems) { -+ buffer = av_realloc_array(NULL, nb_elems, elem_size); -+ if (!buffer) -+ return NULL; -+ } -+ f = av_mallocz(sizeof(*f)); -+ if (!f) { -+ av_free(buffer); -+ return NULL; -+ } -+ f->buffer = buffer; -+ f->nb_elems = nb_elems; -+ f->elem_size = elem_size; -+ f->is_empty = 1; -+ -+ f->flags = flags; -+ f->auto_grow_limit = FFMAX(AUTO_GROW_DEFAULT_BYTES / elem_size, 1); -+ -+ return f; -+} -+ -+void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems) -+{ -+ f->auto_grow_limit = max_elems; -+} -+ -+size_t av_fifo_elem_size(const AVFifo *f) -+{ -+ return f->elem_size; -+} -+ -+size_t av_fifo_can_read(const AVFifo *f) -+{ -+ if (f->offset_w <= f->offset_r && !f->is_empty) -+ return f->nb_elems - f->offset_r + f->offset_w; -+ return f->offset_w - f->offset_r; -+} -+ -+size_t av_fifo_can_write(const AVFifo *f) -+{ -+ return f->nb_elems - av_fifo_can_read(f); -+} -+ -+int av_fifo_grow2(AVFifo *f, size_t inc) -+{ -+ uint8_t *tmp; -+ -+ if (inc > SIZE_MAX - f->nb_elems) -+ return AVERROR(EINVAL); -+ -+ tmp = av_realloc_array(f->buffer, f->nb_elems + inc, f->elem_size); -+ if (!tmp) -+ return AVERROR(ENOMEM); -+ f->buffer = tmp; -+ -+ // move the data from the beginning of the ring buffer -+ // to the newly allocated space -+ if (f->offset_w <= f->offset_r && !f->is_empty) { -+ const size_t copy = FFMIN(inc, f->offset_w); -+ memcpy(tmp + f->nb_elems * f->elem_size, tmp, copy * f->elem_size); -+ if (copy < f->offset_w) { -+ memmove(tmp, tmp + copy * f->elem_size, -+ (f->offset_w - copy) * f->elem_size); -+ f->offset_w -= copy; -+ } else -+ f->offset_w = copy == inc ? 0 : f->nb_elems + copy; -+ } -+ -+ f->nb_elems += inc; -+ -+ return 0; -+} -+ -+static int fifo_check_space(AVFifo *f, size_t to_write) -+{ -+ const size_t can_write = av_fifo_can_write(f); -+ const size_t need_grow = to_write > can_write ? to_write - can_write : 0; -+ size_t can_grow; -+ -+ if (!need_grow) -+ return 0; -+ -+ can_grow = f->auto_grow_limit > f->nb_elems ? -+ f->auto_grow_limit - f->nb_elems : 0; -+ if ((f->flags & AV_FIFO_FLAG_AUTO_GROW) && need_grow <= can_grow) { -+ // allocate a bit more than necessary, if we can -+ const size_t inc = (need_grow < can_grow / 2 ) ? need_grow * 2 : can_grow; -+ return av_fifo_grow2(f, inc); -+ } -+ -+ return AVERROR(ENOSPC); -+} -+ -+static int fifo_write_common(AVFifo *f, const uint8_t *buf, size_t *nb_elems, -+ AVFifoCB read_cb, void *opaque) -+{ -+ size_t to_write = *nb_elems; -+ size_t offset_w; -+ int ret = 0; -+ -+ ret = fifo_check_space(f, to_write); -+ if (ret < 0) -+ return ret; -+ -+ offset_w = f->offset_w; -+ -+ while (to_write > 0) { -+ size_t len = FFMIN(f->nb_elems - offset_w, to_write); -+ uint8_t *wptr = f->buffer + offset_w * f->elem_size; -+ -+ if (read_cb) { -+ ret = read_cb(opaque, wptr, &len); -+ if (ret < 0 || len == 0) -+ break; -+ } else { -+ memcpy(wptr, buf, len * f->elem_size); -+ buf += len * f->elem_size; -+ } -+ offset_w += len; -+ if (offset_w >= f->nb_elems) -+ offset_w = 0; -+ to_write -= len; -+ } -+ f->offset_w = offset_w; -+ -+ if (*nb_elems != to_write) -+ f->is_empty = 0; -+ *nb_elems -= to_write; -+ -+ return ret; -+} -+ -+int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems) -+{ -+ return fifo_write_common(f, buf, &nb_elems, NULL, NULL); -+} -+ -+int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, -+ void *opaque, size_t *nb_elems) -+{ -+ return fifo_write_common(f, NULL, nb_elems, read_cb, opaque); -+} -+ -+static int fifo_peek_common(const AVFifo *f, uint8_t *buf, size_t *nb_elems, -+ size_t offset, AVFifoCB write_cb, void *opaque) -+{ -+ size_t to_read = *nb_elems; -+ size_t offset_r = f->offset_r; -+ size_t can_read = av_fifo_can_read(f); -+ int ret = 0; -+ -+ if (offset > can_read || to_read > can_read - offset) { -+ *nb_elems = 0; -+ return AVERROR(EINVAL); -+ } - --static AVFifoBuffer *fifo_alloc_common(void *buffer, size_t size) -+ if (offset_r >= f->nb_elems - offset) -+ offset_r -= f->nb_elems - offset; -+ else -+ offset_r += offset; -+ -+ while (to_read > 0) { -+ size_t len = FFMIN(f->nb_elems - offset_r, to_read); -+ uint8_t *rptr = f->buffer + offset_r * f->elem_size; -+ -+ if (write_cb) { -+ ret = write_cb(opaque, rptr, &len); -+ if (ret < 0 || len == 0) -+ break; -+ } else { -+ memcpy(buf, rptr, len * f->elem_size); -+ buf += len * f->elem_size; -+ } -+ offset_r += len; -+ if (offset_r >= f->nb_elems) -+ offset_r = 0; -+ to_read -= len; -+ } -+ -+ *nb_elems -= to_read; -+ -+ return ret; -+} -+ -+int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems) -+{ -+ int ret = fifo_peek_common(f, buf, &nb_elems, 0, NULL, NULL); -+ av_fifo_drain2(f, nb_elems); -+ return ret; -+} -+ -+int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, -+ void *opaque, size_t *nb_elems) -+{ -+ int ret = fifo_peek_common(f, NULL, nb_elems, 0, write_cb, opaque); -+ av_fifo_drain2(f, *nb_elems); -+ return ret; -+} -+ -+int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset) -+{ -+ return fifo_peek_common(f, buf, &nb_elems, offset, NULL, NULL); -+} -+ -+int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque, -+ size_t *nb_elems, size_t offset) -+{ -+ return fifo_peek_common(f, NULL, nb_elems, offset, write_cb, opaque); -+} -+ -+void av_fifo_drain2(AVFifo *f, size_t size) -+{ -+ const size_t cur_size = av_fifo_can_read(f); -+ -+ av_assert0(cur_size >= size); -+ if (cur_size == size) -+ f->is_empty = 1; -+ -+ if (f->offset_r >= f->nb_elems - size) -+ f->offset_r -= f->nb_elems - size; -+ else -+ f->offset_r += size; -+} -+ -+void av_fifo_reset2(AVFifo *f) -+{ -+ f->offset_r = f->offset_w = 0; -+ f->is_empty = 1; -+} -+ -+void av_fifo_freep2(AVFifo **f) -+{ -+ if (*f) { -+ av_freep(&(*f)->buffer); -+ av_freep(f); -+ } -+} -+ -+ -+#if FF_API_FIFO_OLD_API -+FF_DISABLE_DEPRECATION_WARNINGS -+#define OLD_FIFO_SIZE_MAX (size_t)FFMIN3(INT_MAX, UINT32_MAX, SIZE_MAX) -+ -+AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) - { - AVFifoBuffer *f; -+ void *buffer; -+ -+ if (nmemb > OLD_FIFO_SIZE_MAX / size) -+ return NULL; -+ -+ buffer = av_realloc_array(NULL, nmemb, size); - if (!buffer) - return NULL; - f = av_mallocz(sizeof(AVFifoBuffer)); -@@ -35,21 +313,14 @@ - return NULL; - } - f->buffer = buffer; -- f->end = f->buffer + size; -+ f->end = f->buffer + nmemb * size; - av_fifo_reset(f); - return f; - } - - AVFifoBuffer *av_fifo_alloc(unsigned int size) - { -- void *buffer = av_malloc(size); -- return fifo_alloc_common(buffer, size); --} -- --AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size) --{ -- void *buffer = av_malloc_array(nmemb, size); -- return fifo_alloc_common(buffer, nmemb * size); -+ return av_fifo_alloc_array(size, 1); - } - - void av_fifo_free(AVFifoBuffer *f) -@@ -88,18 +359,35 @@ - { - unsigned int old_size = f->end - f->buffer; - -+ if (new_size > OLD_FIFO_SIZE_MAX) -+ return AVERROR(EINVAL); -+ - if (old_size < new_size) { -- int len = av_fifo_size(f); -- AVFifoBuffer *f2 = av_fifo_alloc(new_size); -+ size_t offset_r = f->rptr - f->buffer; -+ size_t offset_w = f->wptr - f->buffer; -+ uint8_t *tmp; - -- if (!f2) -+ tmp = av_realloc(f->buffer, new_size); -+ if (!tmp) - return AVERROR(ENOMEM); -- av_fifo_generic_read(f, f2->buffer, len, NULL); -- f2->wptr += len; -- f2->wndx += len; -- av_free(f->buffer); -- *f = *f2; -- av_free(f2); -+ -+ // move the data from the beginning of the ring buffer -+ // to the newly allocated space -+ // the second condition distinguishes full vs empty fifo -+ if (offset_w <= offset_r && av_fifo_size(f)) { -+ const size_t copy = FFMIN(new_size - old_size, offset_w); -+ memcpy(tmp + old_size, tmp, copy); -+ if (copy < offset_w) { -+ memmove(tmp, tmp + copy , offset_w - copy); -+ offset_w -= copy; -+ } else -+ offset_w = old_size + copy; -+ } -+ -+ f->buffer = tmp; -+ f->end = f->buffer + new_size; -+ f->rptr = f->buffer + offset_r; -+ f->wptr = f->buffer + offset_w; - } - return 0; - } -@@ -126,6 +414,9 @@ - uint32_t wndx= f->wndx; - uint8_t *wptr= f->wptr; - -+ if (size > av_fifo_space(f)) -+ return AVERROR(ENOSPC); -+ - do { - int len = FFMIN(f->end - wptr, size); - if (func) { -@@ -136,7 +427,6 @@ - memcpy(wptr, src, len); - src = (uint8_t *)src + len; - } --// Write memory barrier needed for SMP here in theory - wptr += len; - if (wptr >= f->end) - wptr = f->buffer; -@@ -152,13 +442,8 @@ - { - uint8_t *rptr = f->rptr; - -- av_assert2(offset >= 0); -- -- /* -- * *ndx are indexes modulo 2^32, they are intended to overflow, -- * to handle *ndx greater than 4gb. -- */ -- av_assert2(buf_size + (unsigned)offset <= f->wndx - f->rndx); -+ if (offset < 0 || buf_size > av_fifo_size(f) - offset) -+ return AVERROR(EINVAL); - - if (offset >= f->end - rptr) - rptr += offset - (f->end - f->buffer); -@@ -189,31 +474,15 @@ - int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, - void (*func)(void *, void *, int)) - { --// Read memory barrier needed for SMP here in theory -- uint8_t *rptr = f->rptr; -- -- do { -- int len = FFMIN(f->end - rptr, buf_size); -- if (func) -- func(dest, rptr, len); -- else { -- memcpy(dest, rptr, len); -- dest = (uint8_t *)dest + len; -- } --// memory barrier needed for SMP here in theory -- rptr += len; -- if (rptr >= f->end) -- rptr -= f->end - f->buffer; -- buf_size -= len; -- } while (buf_size > 0); -- -- return 0; -+ return av_fifo_generic_peek_at(f, dest, 0, buf_size, func); - } - - int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, - void (*func)(void *, void *, int)) - { --// Read memory barrier needed for SMP here in theory -+ if (buf_size > av_fifo_size(f)) -+ return AVERROR(EINVAL); -+ - do { - int len = FFMIN(f->end - f->rptr, buf_size); - if (func) -@@ -222,7 +491,6 @@ - memcpy(dest, f->rptr, len); - dest = (uint8_t *)dest + len; - } --// memory barrier needed for SMP here in theory - av_fifo_drain(f, len); - buf_size -= len; - } while (buf_size > 0); -@@ -238,3 +506,5 @@ - f->rptr -= f->end - f->buffer; - f->rndx += size; - } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -diff -Naur a/media/ffvpx/libavutil/fifo.h b/media/ffvpx/libavutil/fifo.h ---- a/media/ffvpx/libavutil/fifo.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/fifo.h 2023-04-06 12:50:06.976471255 +0200 -@@ -18,16 +18,229 @@ - - /** - * @file -- * a very simple circular buffer FIFO implementation -+ * @ingroup lavu_fifo -+ * A generic FIFO API - */ - - #ifndef AVUTIL_FIFO_H - #define AVUTIL_FIFO_H - -+#include - #include --#include "avutil.h" -+ - #include "attributes.h" -+#include "version.h" -+ -+/** -+ * @defgroup lavu_fifo AVFifo -+ * @ingroup lavu_data -+ * -+ * @{ -+ * A generic FIFO API -+ */ -+ -+typedef struct AVFifo AVFifo; -+ -+/** -+ * Callback for writing or reading from a FIFO, passed to (and invoked from) the -+ * av_fifo_*_cb() functions. It may be invoked multiple times from a single -+ * av_fifo_*_cb() call and may process less data than the maximum size indicated -+ * by nb_elems. -+ * -+ * @param opaque the opaque pointer provided to the av_fifo_*_cb() function -+ * @param buf the buffer for reading or writing the data, depending on which -+ * av_fifo_*_cb function is called -+ * @param nb_elems On entry contains the maximum number of elements that can be -+ * read from / written into buf. On success, the callback should -+ * update it to contain the number of elements actually written. -+ * -+ * @return 0 on success, a negative error code on failure (will be returned from -+ * the invoking av_fifo_*_cb() function) -+ */ -+typedef int AVFifoCB(void *opaque, void *buf, size_t *nb_elems); -+ -+/** -+ * Automatically resize the FIFO on writes, so that the data fits. This -+ * automatic resizing happens up to a limit that can be modified with -+ * av_fifo_auto_grow_limit(). -+ */ -+#define AV_FIFO_FLAG_AUTO_GROW (1 << 0) -+ -+/** -+ * Allocate and initialize an AVFifo with a given element size. -+ * -+ * @param elems initial number of elements that can be stored in the FIFO -+ * @param elem_size Size in bytes of a single element. Further operations on -+ * the returned FIFO will implicitly use this element size. -+ * @param flags a combination of AV_FIFO_FLAG_* -+ * -+ * @return newly-allocated AVFifo on success, a negative error code on failure -+ */ -+AVFifo *av_fifo_alloc2(size_t elems, size_t elem_size, -+ unsigned int flags); -+ -+/** -+ * @return Element size for FIFO operations. This element size is set at -+ * FIFO allocation and remains constant during its lifetime -+ */ -+size_t av_fifo_elem_size(const AVFifo *f); - -+/** -+ * Set the maximum size (in elements) to which the FIFO can be resized -+ * automatically. Has no effect unless AV_FIFO_FLAG_AUTO_GROW is used. -+ */ -+void av_fifo_auto_grow_limit(AVFifo *f, size_t max_elems); -+ -+/** -+ * @return number of elements available for reading from the given FIFO. -+ */ -+size_t av_fifo_can_read(const AVFifo *f); -+ -+/** -+ * @return Number of elements that can be written into the given FIFO without -+ * growing it. -+ * -+ * In other words, this number of elements or less is guaranteed to fit -+ * into the FIFO. More data may be written when the -+ * AV_FIFO_FLAG_AUTO_GROW flag was specified at FIFO creation, but this -+ * may involve memory allocation, which can fail. -+ */ -+size_t av_fifo_can_write(const AVFifo *f); -+ -+/** -+ * Enlarge an AVFifo. -+ * -+ * On success, the FIFO will be large enough to hold exactly -+ * inc + av_fifo_can_read() + av_fifo_can_write() -+ * elements. In case of failure, the old FIFO is kept unchanged. -+ * -+ * @param f AVFifo to resize -+ * @param inc number of elements to allocate for, in addition to the current -+ * allocated size -+ * @return a non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_grow2(AVFifo *f, size_t inc); -+ -+/** -+ * Write data into a FIFO. -+ * -+ * In case nb_elems > av_fifo_can_write(f) and the AV_FIFO_FLAG_AUTO_GROW flag -+ * was not specified at FIFO creation, nothing is written and an error -+ * is returned. -+ * -+ * Calling function is guaranteed to succeed if nb_elems <= av_fifo_can_write(f). -+ * -+ * @param f the FIFO buffer -+ * @param buf Data to be written. nb_elems * av_fifo_elem_size(f) bytes will be -+ * read from buf on success. -+ * @param nb_elems number of elements to write into FIFO -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_write(AVFifo *f, const void *buf, size_t nb_elems); -+ -+/** -+ * Write data from a user-provided callback into a FIFO. -+ * -+ * @param f the FIFO buffer -+ * @param read_cb Callback supplying the data to the FIFO. May be called -+ * multiple times. -+ * @param opaque opaque user data to be provided to read_cb -+ * @param nb_elems Should point to the maximum number of elements that can be -+ * written. Will be updated to contain the number of elements -+ * actually written. -+ * -+ * @return non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_write_from_cb(AVFifo *f, AVFifoCB read_cb, -+ void *opaque, size_t *nb_elems); -+ -+/** -+ * Read data from a FIFO. -+ * -+ * In case nb_elems > av_fifo_can_read(f), nothing is read and an error -+ * is returned. -+ * -+ * @param f the FIFO buffer -+ * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes -+ * will be written into buf on success. -+ * @param nb_elems number of elements to read from FIFO -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_read(AVFifo *f, void *buf, size_t nb_elems); -+ -+/** -+ * Feed data from a FIFO into a user-provided callback. -+ * -+ * @param f the FIFO buffer -+ * @param write_cb Callback the data will be supplied to. May be called -+ * multiple times. -+ * @param opaque opaque user data to be provided to write_cb -+ * @param nb_elems Should point to the maximum number of elements that can be -+ * read. Will be updated to contain the total number of elements -+ * actually sent to the callback. -+ * -+ * @return non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_read_to_cb(AVFifo *f, AVFifoCB write_cb, -+ void *opaque, size_t *nb_elems); -+ -+/** -+ * Read data from a FIFO without modifying FIFO state. -+ * -+ * Returns an error if an attempt is made to peek to nonexistent elements -+ * (i.e. if offset + nb_elems is larger than av_fifo_can_read(f)). -+ * -+ * @param f the FIFO buffer -+ * @param buf Buffer to store the data. nb_elems * av_fifo_elem_size(f) bytes -+ * will be written into buf. -+ * @param nb_elems number of elements to read from FIFO -+ * @param offset number of initial elements to skip. -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_peek(AVFifo *f, void *buf, size_t nb_elems, size_t offset); -+ -+/** -+ * Feed data from a FIFO into a user-provided callback. -+ * -+ * @param f the FIFO buffer -+ * @param write_cb Callback the data will be supplied to. May be called -+ * multiple times. -+ * @param opaque opaque user data to be provided to write_cb -+ * @param nb_elems Should point to the maximum number of elements that can be -+ * read. Will be updated to contain the total number of elements -+ * actually sent to the callback. -+ * @param offset number of initial elements to skip; offset + *nb_elems must not -+ * be larger than av_fifo_can_read(f). -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ */ -+int av_fifo_peek_to_cb(AVFifo *f, AVFifoCB write_cb, void *opaque, -+ size_t *nb_elems, size_t offset); -+ -+/** -+ * Discard the specified amount of data from an AVFifo. -+ * @param size number of elements to discard, MUST NOT be larger than -+ * av_fifo_can_read(f) -+ */ -+void av_fifo_drain2(AVFifo *f, size_t size); -+ -+/* -+ * Empty the AVFifo. -+ * @param f AVFifo to reset -+ */ -+void av_fifo_reset2(AVFifo *f); -+ -+/** -+ * Free an AVFifo and reset pointer to NULL. -+ * @param f Pointer to an AVFifo to free. *f == NULL is allowed. -+ */ -+void av_fifo_freep2(AVFifo **f); -+ -+ -+#if FF_API_FIFO_OLD_API - typedef struct AVFifoBuffer { - uint8_t *buffer; - uint8_t *rptr, *wptr, *end; -@@ -38,7 +251,9 @@ - * Initialize an AVFifoBuffer. - * @param size of FIFO - * @return AVFifoBuffer or NULL in case of memory allocation failure -+ * @deprecated use av_fifo_alloc2() - */ -+attribute_deprecated - AVFifoBuffer *av_fifo_alloc(unsigned int size); - - /** -@@ -46,25 +261,33 @@ - * @param nmemb number of elements - * @param size size of the single element - * @return AVFifoBuffer or NULL in case of memory allocation failure -+ * @deprecated use av_fifo_alloc2() - */ -+attribute_deprecated - AVFifoBuffer *av_fifo_alloc_array(size_t nmemb, size_t size); - - /** - * Free an AVFifoBuffer. - * @param f AVFifoBuffer to free -+ * @deprecated use the AVFifo API with av_fifo_freep2() - */ -+attribute_deprecated - void av_fifo_free(AVFifoBuffer *f); - - /** - * Free an AVFifoBuffer and reset pointer to NULL. - * @param f AVFifoBuffer to free -+ * @deprecated use the AVFifo API with av_fifo_freep2() - */ -+attribute_deprecated - void av_fifo_freep(AVFifoBuffer **f); - - /** - * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied. - * @param f AVFifoBuffer to reset -+ * @deprecated use av_fifo_reset2() with the new AVFifo-API - */ -+attribute_deprecated - void av_fifo_reset(AVFifoBuffer *f); - - /** -@@ -72,7 +295,9 @@ - * amount of data you can read from it. - * @param f AVFifoBuffer to read from - * @return size -+ * @deprecated use av_fifo_can_read() with the new AVFifo-API - */ -+attribute_deprecated - int av_fifo_size(const AVFifoBuffer *f); - - /** -@@ -80,7 +305,9 @@ - * amount of data you can write into it. - * @param f AVFifoBuffer to write into - * @return size -+ * @deprecated use av_fifo_can_write() with the new AVFifo-API - */ -+attribute_deprecated - int av_fifo_space(const AVFifoBuffer *f); - - /** -@@ -91,7 +318,13 @@ - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL, -+ * av_fifo_peek_to_cb() otherwise - */ -+attribute_deprecated - int av_fifo_generic_peek_at(AVFifoBuffer *f, void *dest, int offset, int buf_size, void (*func)(void*, void*, int)); - - /** -@@ -101,7 +334,13 @@ - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_peek() when func == NULL, -+ * av_fifo_peek_to_cb() otherwise - */ -+attribute_deprecated - int av_fifo_generic_peek(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - - /** -@@ -110,7 +349,13 @@ - * @param buf_size number of bytes to read - * @param func generic read function - * @param dest data destination -+ * -+ * @return a non-negative number on success, a negative error code on failure -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_read() when func == NULL, -+ * av_fifo_read_to_cb() otherwise - */ -+attribute_deprecated - int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int)); - - /** -@@ -124,8 +369,12 @@ - * func must return the number of bytes written to dest_buf, or <= 0 to - * indicate no more data available to write. - * If func is NULL, src is interpreted as a simple byte array for source data. -- * @return the number of bytes written to the FIFO -+ * @return the number of bytes written to the FIFO or a negative error code on failure -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_write() when func == NULL, -+ * av_fifo_write_from_cb() otherwise - */ -+attribute_deprecated - int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int)); - - /** -@@ -135,7 +384,11 @@ - * @param f AVFifoBuffer to resize - * @param size new AVFifoBuffer size in bytes - * @return <0 for failure, >=0 otherwise -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_grow2() to increase FIFO size, -+ * decreasing FIFO size is not supported - */ -+attribute_deprecated - int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size); - - /** -@@ -146,16 +399,24 @@ - * @param f AVFifoBuffer to resize - * @param additional_space the amount of space in bytes to allocate in addition to av_fifo_size() - * @return <0 for failure, >=0 otherwise -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_grow2(); note that unlike -+ * this function it adds to the allocated size, rather than to the used size - */ -+attribute_deprecated - int av_fifo_grow(AVFifoBuffer *f, unsigned int additional_space); - - /** - * Read and discard the specified amount of data from an AVFifoBuffer. - * @param f AVFifoBuffer to read from - * @param size amount of data to read in bytes -+ * -+ * @deprecated use the new AVFifo-API with av_fifo_drain2() - */ -+attribute_deprecated - void av_fifo_drain(AVFifoBuffer *f, int size); - -+#if FF_API_FIFO_PEEK2 - /** - * Return a pointer to the data stored in a FIFO buffer at a certain offset. - * The FIFO buffer is not modified. -@@ -165,7 +426,9 @@ - * than the used buffer size or the returned pointer will - * point outside to the buffer data. - * The used buffer size can be checked with av_fifo_size(). -+ * @deprecated use the new AVFifo-API with av_fifo_peek() or av_fifo_peek_to_cb() - */ -+attribute_deprecated - static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs) - { - uint8_t *ptr = f->rptr + offs; -@@ -175,5 +438,11 @@ - ptr = f->end - (f->buffer - ptr); - return ptr; - } -+#endif -+#endif -+ -+/** -+ * @} -+ */ - - #endif /* AVUTIL_FIFO_H */ -diff -Naur a/media/ffvpx/libavutil/film_grain_params.h b/media/ffvpx/libavutil/film_grain_params.h ---- a/media/ffvpx/libavutil/film_grain_params.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/film_grain_params.h 2023-04-06 12:49:40.260395172 +0200 -@@ -28,6 +28,11 @@ - * The union is valid when interpreted as AVFilmGrainAOMParams (codec.aom) - */ - AV_FILM_GRAIN_PARAMS_AV1, -+ -+ /** -+ * The union is valid when interpreted as AVFilmGrainH274Params (codec.h274) -+ */ -+ AV_FILM_GRAIN_PARAMS_H274, - }; - - /** -@@ -118,6 +123,89 @@ - } AVFilmGrainAOMParams; - - /** -+ * This structure describes how to handle film grain synthesis for codecs using -+ * the ITU-T H.274 Versatile suplemental enhancement information message. -+ * -+ * @note The struct must be allocated as part of AVFilmGrainParams using -+ * av_film_grain_params_alloc(). Its size is not a part of the public ABI. -+ */ -+typedef struct AVFilmGrainH274Params { -+ /** -+ * Specifies the film grain simulation mode. -+ * 0 = Frequency filtering, 1 = Auto-regression -+ */ -+ int model_id; -+ -+ /** -+ * Specifies the bit depth used for the luma component. -+ */ -+ int bit_depth_luma; -+ -+ /** -+ * Specifies the bit depth used for the chroma components. -+ */ -+ int bit_depth_chroma; -+ -+ enum AVColorRange color_range; -+ enum AVColorPrimaries color_primaries; -+ enum AVColorTransferCharacteristic color_trc; -+ enum AVColorSpace color_space; -+ -+ /** -+ * Specifies the blending mode used to blend the simulated film grain -+ * with the decoded images. -+ * -+ * 0 = Additive, 1 = Multiplicative -+ */ -+ int blending_mode_id; -+ -+ /** -+ * Specifies a scale factor used in the film grain characterization equations. -+ */ -+ int log2_scale_factor; -+ -+ /** -+ * Indicates if the modelling of film grain for a given component is present. -+ */ -+ int component_model_present[3 /* y, cb, cr */]; -+ -+ /** -+ * Specifies the number of intensity intervals for which a specific set of -+ * model values has been estimated, with a range of [1, 256]. -+ */ -+ uint16_t num_intensity_intervals[3 /* y, cb, cr */]; -+ -+ /** -+ * Specifies the number of model values present for each intensity interval -+ * in which the film grain has been modelled, with a range of [1, 6]. -+ */ -+ uint8_t num_model_values[3 /* y, cb, cr */]; -+ -+ /** -+ * Specifies the lower ounds of each intensity interval for whichthe set of -+ * model values applies for the component. -+ */ -+ uint8_t intensity_interval_lower_bound[3 /* y, cb, cr */][256 /* intensity interval */]; -+ -+ /** -+ * Specifies the upper bound of each intensity interval for which the set of -+ * model values applies for the component. -+ */ -+ uint8_t intensity_interval_upper_bound[3 /* y, cb, cr */][256 /* intensity interval */]; -+ -+ /** -+ * Specifies the model values for the component for each intensity interval. -+ * - When model_id == 0, the following applies: -+ * For comp_model_value[y], the range of values is [0, 2^bit_depth_luma - 1] -+ * For comp_model_value[cb..cr], the range of values is [0, 2^bit_depth_chroma - 1] -+ * - Otherwise, the following applies: -+ * For comp_model_value[y], the range of values is [-2^(bit_depth_luma - 1), 2^(bit_depth_luma - 1) - 1] -+ * For comp_model_value[cb..cr], the range of values is [-2^(bit_depth_chroma - 1), 2^(bit_depth_chroma - 1) - 1] -+ */ -+ int16_t comp_model_value[3 /* y, cb, cr */][256 /* intensity interval */][6 /* model value */]; -+} AVFilmGrainH274Params; -+ -+/** - * This structure describes how to handle film grain synthesis in video - * for specific codecs. Must be present on every frame where film grain is - * meant to be synthesised for correct presentation. -@@ -133,6 +221,9 @@ - - /** - * Seed to use for the synthesis process, if the codec allows for it. -+ * -+ * @note For H.264, this refers to `pic_offset` as defined in -+ * SMPTE RDD 5-2006. - */ - uint64_t seed; - -@@ -143,6 +234,7 @@ - */ - union { - AVFilmGrainAOMParams aom; -+ AVFilmGrainH274Params h274; - } codec; - } AVFilmGrainParams; - -diff -Naur a/media/ffvpx/libavutil/fixed_dsp.c b/media/ffvpx/libavutil/fixed_dsp.c ---- a/media/ffvpx/libavutil/fixed_dsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/fixed_dsp.c 2023-04-06 12:50:06.976471255 +0200 -@@ -45,6 +45,7 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "common.h" - #include "fixed_dsp.h" - - static void vector_fmul_add_c(int *dst, const int *src0, const int *src1, const int *src2, int len){ -@@ -134,7 +135,7 @@ - return (int)(p >> 31); - } - --static void butterflies_fixed_c(int *v1s, int *v2, int len) -+static void butterflies_fixed_c(int *av_restrict v1s, int *av_restrict v2, int len) - { - int i; - unsigned int *v1 = v1s; -@@ -161,8 +162,11 @@ - fdsp->butterflies_fixed = butterflies_fixed_c; - fdsp->scalarproduct_fixed = scalarproduct_fixed_c; - -- if (ARCH_X86) -- ff_fixed_dsp_init_x86(fdsp); -+#if ARCH_RISCV -+ ff_fixed_dsp_init_riscv(fdsp); -+#elif ARCH_X86 -+ ff_fixed_dsp_init_x86(fdsp); -+#endif - - return fdsp; - } -diff -Naur a/media/ffvpx/libavutil/fixed_dsp.h b/media/ffvpx/libavutil/fixed_dsp.h ---- a/media/ffvpx/libavutil/fixed_dsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/fixed_dsp.h 2023-04-06 12:50:06.976471255 +0200 -@@ -49,8 +49,8 @@ - #define AVUTIL_FIXED_DSP_H - - #include -+#include "config.h" - #include "attributes.h" --#include "common.h" - #include "libavcodec/mathops.h" - - typedef struct AVFixedDSPContext { -@@ -161,6 +161,7 @@ - */ - AVFixedDSPContext * avpriv_alloc_fixed_dsp(int strict); - -+void ff_fixed_dsp_init_riscv(AVFixedDSPContext *fdsp); - void ff_fixed_dsp_init_x86(AVFixedDSPContext *fdsp); - - /** -diff -Naur a/media/ffvpx/libavutil/float_dsp.c b/media/ffvpx/libavutil/float_dsp.c ---- a/media/ffvpx/libavutil/float_dsp.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/float_dsp.c 2023-04-06 12:50:06.976471255 +0200 -@@ -150,15 +150,18 @@ - fdsp->butterflies_float = butterflies_float_c; - fdsp->scalarproduct_float = avpriv_scalarproduct_float_c; - -- if (ARCH_AARCH64) -- ff_float_dsp_init_aarch64(fdsp); -- if (ARCH_ARM) -- ff_float_dsp_init_arm(fdsp); -- if (ARCH_PPC) -- ff_float_dsp_init_ppc(fdsp, bit_exact); -- if (ARCH_X86) -- ff_float_dsp_init_x86(fdsp); -- if (ARCH_MIPS) -- ff_float_dsp_init_mips(fdsp); -+#if ARCH_AARCH64 -+ ff_float_dsp_init_aarch64(fdsp); -+#elif ARCH_ARM -+ ff_float_dsp_init_arm(fdsp); -+#elif ARCH_PPC -+ ff_float_dsp_init_ppc(fdsp, bit_exact); -+#elif ARCH_RISCV -+ ff_float_dsp_init_riscv(fdsp); -+#elif ARCH_X86 -+ ff_float_dsp_init_x86(fdsp); -+#elif ARCH_MIPS -+ ff_float_dsp_init_mips(fdsp); -+#endif - return fdsp; - } -diff -Naur a/media/ffvpx/libavutil/float_dsp.h b/media/ffvpx/libavutil/float_dsp.h ---- a/media/ffvpx/libavutil/float_dsp.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/float_dsp.h 2023-04-06 12:50:06.976471255 +0200 -@@ -205,6 +205,7 @@ - void ff_float_dsp_init_aarch64(AVFloatDSPContext *fdsp); - void ff_float_dsp_init_arm(AVFloatDSPContext *fdsp); - void ff_float_dsp_init_ppc(AVFloatDSPContext *fdsp, int strict); -+void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp); - void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp); - void ff_float_dsp_init_mips(AVFloatDSPContext *fdsp); - -diff -Naur a/media/ffvpx/libavutil/frame.c b/media/ffvpx/libavutil/frame.c ---- a/media/ffvpx/libavutil/frame.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/frame.c 2023-04-06 12:50:24.493176583 +0200 -@@ -20,6 +20,7 @@ - #include "avassert.h" - #include "buffer.h" - #include "common.h" -+#include "cpu.h" - #include "dict.h" - #include "frame.h" - #include "imgutils.h" -@@ -27,133 +28,29 @@ - #include "samplefmt.h" - #include "hwcontext.h" - --#if FF_API_FRAME_GET_SET --MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp) --MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_duration) --MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos) --MAKE_ACCESSORS(AVFrame, frame, int64_t, channel_layout) --MAKE_ACCESSORS(AVFrame, frame, int, channels) --MAKE_ACCESSORS(AVFrame, frame, int, sample_rate) --MAKE_ACCESSORS(AVFrame, frame, AVDictionary *, metadata) --MAKE_ACCESSORS(AVFrame, frame, int, decode_error_flags) --MAKE_ACCESSORS(AVFrame, frame, int, pkt_size) --MAKE_ACCESSORS(AVFrame, frame, enum AVColorSpace, colorspace) --MAKE_ACCESSORS(AVFrame, frame, enum AVColorRange, color_range) --#endif -- -+#if FF_API_OLD_CHANNEL_LAYOUT - #define CHECK_CHANNELS_CONSISTENCY(frame) \ - av_assert2(!(frame)->channel_layout || \ - (frame)->channels == \ - av_get_channel_layout_nb_channels((frame)->channel_layout)) -- --#if FF_API_FRAME_QP --struct qp_properties { -- int stride; -- int type; --}; -- --int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int qp_type) --{ -- struct qp_properties *p; -- AVFrameSideData *sd; -- AVBufferRef *ref; -- --FF_DISABLE_DEPRECATION_WARNINGS -- av_buffer_unref(&f->qp_table_buf); -- -- f->qp_table_buf = buf; -- f->qscale_table = buf->data; -- f->qstride = stride; -- f->qscale_type = qp_type; --FF_ENABLE_DEPRECATION_WARNINGS -- -- av_frame_remove_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES); -- av_frame_remove_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA); -- -- ref = av_buffer_ref(buf); -- if (!av_frame_new_side_data_from_buf(f, AV_FRAME_DATA_QP_TABLE_DATA, ref)) { -- av_buffer_unref(&ref); -- return AVERROR(ENOMEM); -- } -- -- sd = av_frame_new_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES, -- sizeof(struct qp_properties)); -- if (!sd) -- return AVERROR(ENOMEM); -- -- p = (struct qp_properties *)sd->data; -- p->stride = stride; -- p->type = qp_type; -- -- return 0; --} -- --int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type) --{ -- AVBufferRef *buf = NULL; -- -- *stride = 0; -- *type = 0; -- --FF_DISABLE_DEPRECATION_WARNINGS -- if (f->qp_table_buf) { -- *stride = f->qstride; -- *type = f->qscale_type; -- buf = f->qp_table_buf; --FF_ENABLE_DEPRECATION_WARNINGS -- } else { -- AVFrameSideData *sd; -- struct qp_properties *p; -- sd = av_frame_get_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES); -- if (!sd) -- return NULL; -- p = (struct qp_properties *)sd->data; -- sd = av_frame_get_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA); -- if (!sd) -- return NULL; -- *stride = p->stride; -- *type = p->type; -- buf = sd->buf; -- } -- -- return buf ? buf->data : NULL; --} - #endif - --const char *av_get_colorspace_name(enum AVColorSpace val) --{ -- static const char * const name[] = { -- [AVCOL_SPC_RGB] = "GBR", -- [AVCOL_SPC_BT709] = "bt709", -- [AVCOL_SPC_FCC] = "fcc", -- [AVCOL_SPC_BT470BG] = "bt470bg", -- [AVCOL_SPC_SMPTE170M] = "smpte170m", -- [AVCOL_SPC_SMPTE240M] = "smpte240m", -- [AVCOL_SPC_YCOCG] = "YCgCo", -- }; -- if ((unsigned)val >= FF_ARRAY_ELEMS(name)) -- return NULL; -- return name[val]; --} -- - static void get_frame_defaults(AVFrame *frame) - { -- if (frame->extended_data != frame->data) -- av_freep(&frame->extended_data); -- - memset(frame, 0, sizeof(*frame)); - - frame->pts = - frame->pkt_dts = AV_NOPTS_VALUE; --#if FF_API_PKT_PTS -+ frame->best_effort_timestamp = AV_NOPTS_VALUE; -+ frame->duration = 0; -+#if FF_API_PKT_DURATION - FF_DISABLE_DEPRECATION_WARNINGS -- frame->pkt_pts = AV_NOPTS_VALUE; -+ frame->pkt_duration = 0; - FF_ENABLE_DEPRECATION_WARNINGS - #endif -- frame->best_effort_timestamp = AV_NOPTS_VALUE; -- frame->pkt_duration = 0; - frame->pkt_pos = -1; - frame->pkt_size = -1; -+ frame->time_base = (AVRational){ 0, 1 }; - frame->key_frame = 1; - frame->sample_aspect_ratio = (AVRational){ 0, 1 }; - frame->format = -1; /* unknown */ -@@ -189,12 +86,11 @@ - - AVFrame *av_frame_alloc(void) - { -- AVFrame *frame = av_mallocz(sizeof(*frame)); -+ AVFrame *frame = av_malloc(sizeof(*frame)); - - if (!frame) - return NULL; - -- frame->extended_data = NULL; - get_frame_defaults(frame); - - return frame; -@@ -280,18 +176,27 @@ - - static int get_audio_buffer(AVFrame *frame, int align) - { -- int channels; - int planar = av_sample_fmt_is_planar(frame->format); -- int planes; -+ int channels, planes; - int ret, i; - -- if (!frame->channels) -- frame->channels = av_get_channel_layout_nb_channels(frame->channel_layout); -- -- channels = frame->channels; -- planes = planar ? channels : 1; -- -- CHECK_CHANNELS_CONSISTENCY(frame); -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (!frame->ch_layout.nb_channels) { -+ if (frame->channel_layout) { -+ av_channel_layout_from_mask(&frame->ch_layout, frame->channel_layout); -+ } else { -+ frame->ch_layout.nb_channels = frame->channels; -+ frame->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; -+ } -+ } -+ frame->channels = frame->ch_layout.nb_channels; -+ frame->channel_layout = frame->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ? -+ frame->ch_layout.u.mask : 0; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ channels = frame->ch_layout.nb_channels; -+ planes = planar ? channels : 1; - if (!frame->linesize[0]) { - ret = av_samples_get_buffer_size(&frame->linesize[0], channels, - frame->nb_samples, frame->format, -@@ -301,9 +206,9 @@ - } - - if (planes > AV_NUM_DATA_POINTERS) { -- frame->extended_data = av_mallocz_array(planes, -+ frame->extended_data = av_calloc(planes, - sizeof(*frame->extended_data)); -- frame->extended_buf = av_mallocz_array((planes - AV_NUM_DATA_POINTERS), -+ frame->extended_buf = av_calloc(planes - AV_NUM_DATA_POINTERS, - sizeof(*frame->extended_buf)); - if (!frame->extended_data || !frame->extended_buf) { - av_freep(&frame->extended_data); -@@ -339,10 +244,17 @@ - if (frame->format < 0) - return AVERROR(EINVAL); - -+FF_DISABLE_DEPRECATION_WARNINGS - if (frame->width > 0 && frame->height > 0) - return get_video_buffer(frame, align); -- else if (frame->nb_samples > 0 && (frame->channel_layout || frame->channels > 0)) -+ else if (frame->nb_samples > 0 && -+ (av_channel_layout_check(&frame->ch_layout) -+#if FF_API_OLD_CHANNEL_LAYOUT -+ || frame->channel_layout || frame->channels > 0 -+#endif -+ )) - return get_audio_buffer(frame, align); -+FF_ENABLE_DEPRECATION_WARNINGS - - return AVERROR(EINVAL); - } -@@ -359,26 +271,35 @@ - dst->crop_left = src->crop_left; - dst->crop_right = src->crop_right; - dst->pts = src->pts; -+ dst->duration = src->duration; - dst->repeat_pict = src->repeat_pict; - dst->interlaced_frame = src->interlaced_frame; - dst->top_field_first = src->top_field_first; - dst->palette_has_changed = src->palette_has_changed; - dst->sample_rate = src->sample_rate; - dst->opaque = src->opaque; --#if FF_API_PKT_PTS --FF_DISABLE_DEPRECATION_WARNINGS -- dst->pkt_pts = src->pkt_pts; --FF_ENABLE_DEPRECATION_WARNINGS --#endif - dst->pkt_dts = src->pkt_dts; - dst->pkt_pos = src->pkt_pos; - dst->pkt_size = src->pkt_size; -+#if FF_API_PKT_DURATION -+FF_DISABLE_DEPRECATION_WARNINGS - dst->pkt_duration = src->pkt_duration; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ dst->time_base = src->time_base; -+#if FF_API_REORDERED_OPAQUE -+FF_DISABLE_DEPRECATION_WARNINGS - dst->reordered_opaque = src->reordered_opaque; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - dst->quality = src->quality; - dst->best_effort_timestamp = src->best_effort_timestamp; -+#if FF_API_FRAME_PICTURE_NUMBER -+FF_DISABLE_DEPRECATION_WARNINGS - dst->coded_picture_number = src->coded_picture_number; - dst->display_picture_number = src->display_picture_number; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - dst->flags = src->flags; - dst->decode_error_flags = src->decode_error_flags; - dst->color_primaries = src->color_primaries; -@@ -389,12 +310,6 @@ - - av_dict_copy(&dst->metadata, src->metadata, 0); - --#if FF_API_ERROR_FRAME --FF_DISABLE_DEPRECATION_WARNINGS -- memcpy(dst->error, src->error, sizeof(dst->error)); --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - for (i = 0; i < src->nb_side_data; i++) { - const AVFrameSideData *sd_src = src->side_data[i]; - AVFrameSideData *sd_dst; -@@ -421,20 +336,6 @@ - av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); - } - --#if FF_API_FRAME_QP --FF_DISABLE_DEPRECATION_WARNINGS -- dst->qscale_table = NULL; -- dst->qstride = 0; -- dst->qscale_type = 0; -- av_buffer_replace(&dst->qp_table_buf, src->qp_table_buf); -- if (dst->qp_table_buf) { -- dst->qscale_table = dst->qp_table_buf->data; -- dst->qstride = src->qstride; -- dst->qscale_type = src->qscale_type; -- } --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - ret = av_buffer_replace(&dst->opaque_ref, src->opaque_ref); - ret |= av_buffer_replace(&dst->private_ref, src->private_ref); - return ret; -@@ -445,19 +346,44 @@ - int i, ret = 0; - - av_assert1(dst->width == 0 && dst->height == 0); -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - av_assert1(dst->channels == 0); -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ av_assert1(dst->ch_layout.nb_channels == 0 && -+ dst->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC); - - dst->format = src->format; - dst->width = src->width; - dst->height = src->height; -+ dst->nb_samples = src->nb_samples; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - dst->channels = src->channels; - dst->channel_layout = src->channel_layout; -- dst->nb_samples = src->nb_samples; -+ if (!av_channel_layout_check(&src->ch_layout)) { -+ if (src->channel_layout) -+ av_channel_layout_from_mask(&dst->ch_layout, src->channel_layout); -+ else { -+ dst->ch_layout.nb_channels = src->channels; -+ dst->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; -+ } -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - - ret = frame_copy_props(dst, src, 0); - if (ret < 0) - goto fail; - -+ // this check is needed only until FF_API_OLD_CHANNEL_LAYOUT is out -+ if (av_channel_layout_check(&src->ch_layout)) { -+ ret = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout); -+ if (ret < 0) -+ goto fail; -+ } -+ - /* duplicate the frame data if it's not refcounted */ - if (!src->buf[0]) { - ret = av_frame_get_buffer(dst, 0); -@@ -468,7 +394,7 @@ - if (ret < 0) - goto fail; - -- return ret; -+ return 0; - } - - /* ref the buffers */ -@@ -483,8 +409,8 @@ - } - - if (src->extended_buf) { -- dst->extended_buf = av_mallocz_array(sizeof(*dst->extended_buf), -- src->nb_extended_buf); -+ dst->extended_buf = av_calloc(src->nb_extended_buf, -+ sizeof(*dst->extended_buf)); - if (!dst->extended_buf) { - ret = AVERROR(ENOMEM); - goto fail; -@@ -510,13 +436,12 @@ - - /* duplicate extended data */ - if (src->extended_data != src->data) { -- int ch = src->channels; -+ int ch = dst->ch_layout.nb_channels; - - if (!ch) { - ret = AVERROR(EINVAL); - goto fail; - } -- CHECK_CHANNELS_CONSISTENCY(src); - - dst->extended_data = av_malloc_array(sizeof(*dst->extended_data), ch); - if (!dst->extended_data) { -@@ -565,29 +490,34 @@ - av_buffer_unref(&frame->extended_buf[i]); - av_freep(&frame->extended_buf); - av_dict_free(&frame->metadata); --#if FF_API_FRAME_QP --FF_DISABLE_DEPRECATION_WARNINGS -- av_buffer_unref(&frame->qp_table_buf); --FF_ENABLE_DEPRECATION_WARNINGS --#endif - - av_buffer_unref(&frame->hw_frames_ctx); - - av_buffer_unref(&frame->opaque_ref); - av_buffer_unref(&frame->private_ref); - -+ if (frame->extended_data != frame->data) -+ av_freep(&frame->extended_data); -+ -+ av_channel_layout_uninit(&frame->ch_layout); -+ - get_frame_defaults(frame); - } - - void av_frame_move_ref(AVFrame *dst, AVFrame *src) - { - av_assert1(dst->width == 0 && dst->height == 0); -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - av_assert1(dst->channels == 0); -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ av_assert1(dst->ch_layout.nb_channels == 0 && -+ dst->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC); - - *dst = *src; - if (src->extended_data == src->data) - dst->extended_data = dst->data; -- memset(src, 0, sizeof(*src)); - get_frame_defaults(src); - } - -@@ -613,9 +543,6 @@ - AVFrame tmp; - int ret; - -- if (!frame->buf[0]) -- return AVERROR(EINVAL); -- - if (av_frame_is_writable(frame)) - return 0; - -@@ -623,9 +550,18 @@ - tmp.format = frame->format; - tmp.width = frame->width; - tmp.height = frame->height; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - tmp.channels = frame->channels; - tmp.channel_layout = frame->channel_layout; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - tmp.nb_samples = frame->nb_samples; -+ ret = av_channel_layout_copy(&tmp.ch_layout, &frame->ch_layout); -+ if (ret < 0) { -+ av_frame_unref(&tmp); -+ return ret; -+ } - - if (frame->hw_frames_ctx) - ret = av_hwframe_get_buffer(frame->hw_frames_ctx, &tmp, 0); -@@ -666,10 +602,18 @@ - int planes, i; - - if (frame->nb_samples) { -- int channels = frame->channels; -+ int channels = frame->ch_layout.nb_channels; -+ -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (!channels) { -+ channels = frame->channels; -+ CHECK_CHANNELS_CONSISTENCY(frame); -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - if (!channels) - return NULL; -- CHECK_CHANNELS_CONSISTENCY(frame); - planes = av_sample_fmt_is_planar(frame->format) ? channels : 1; - } else - planes = 4; -@@ -725,7 +669,7 @@ - - AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, -- buffer_size_t size) -+ size_t size) - { - AVFrameSideData *ret; - AVBufferRef *buf = av_buffer_alloc(size); -@@ -775,16 +719,35 @@ - static int frame_copy_audio(AVFrame *dst, const AVFrame *src) - { - int planar = av_sample_fmt_is_planar(dst->format); -- int channels = dst->channels; -+ int channels = dst->ch_layout.nb_channels; - int planes = planar ? channels : 1; - int i; - -- if (dst->nb_samples != src->nb_samples || -- dst->channels != src->channels || -- dst->channel_layout != src->channel_layout) -- return AVERROR(EINVAL); -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS -+ if (!channels || !src->ch_layout.nb_channels) { -+ if (dst->channels != src->channels || -+ dst->channel_layout != src->channel_layout) -+ return AVERROR(EINVAL); -+ CHECK_CHANNELS_CONSISTENCY(src); -+ } -+ if (!channels) { -+ channels = dst->channels; -+ planes = planar ? channels : 1; -+ } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - -- CHECK_CHANNELS_CONSISTENCY(src); -+ if (dst->nb_samples != src->nb_samples || -+#if FF_API_OLD_CHANNEL_LAYOUT -+ (av_channel_layout_check(&dst->ch_layout) && -+ av_channel_layout_check(&src->ch_layout) && -+#endif -+ av_channel_layout_compare(&dst->ch_layout, &src->ch_layout)) -+#if FF_API_OLD_CHANNEL_LAYOUT -+ ) -+#endif -+ return AVERROR(EINVAL); - - for (i = 0; i < planes; i++) - if (!dst->extended_data[i] || !src->extended_data[i]) -@@ -801,10 +764,17 @@ - if (dst->format != src->format || dst->format < 0) - return AVERROR(EINVAL); - -+FF_DISABLE_DEPRECATION_WARNINGS - if (dst->width > 0 && dst->height > 0) - return frame_copy_video(dst, src); -- else if (dst->nb_samples > 0 && dst->channels > 0) -+ else if (dst->nb_samples > 0 && -+ (av_channel_layout_check(&dst->ch_layout) -+#if FF_API_OLD_CHANNEL_LAYOUT -+ || dst->channels > 0 -+#endif -+ )) - return frame_copy_audio(dst, src); -+FF_ENABLE_DEPRECATION_WARNINGS - - return AVERROR(EINVAL); - } -@@ -843,15 +813,16 @@ - case AV_FRAME_DATA_S12M_TIMECODE: return "SMPTE 12-1 timecode"; - case AV_FRAME_DATA_SPHERICAL: return "Spherical Mapping"; - case AV_FRAME_DATA_ICC_PROFILE: return "ICC profile"; --#if FF_API_FRAME_QP -- case AV_FRAME_DATA_QP_TABLE_PROPERTIES: return "QP table properties"; -- case AV_FRAME_DATA_QP_TABLE_DATA: return "QP table data"; --#endif - case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: return "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)"; -+ case AV_FRAME_DATA_DYNAMIC_HDR_VIVID: return "HDR Dynamic Metadata CUVA 005.1 2021 (Vivid)"; - case AV_FRAME_DATA_REGIONS_OF_INTEREST: return "Regions Of Interest"; - case AV_FRAME_DATA_VIDEO_ENC_PARAMS: return "Video encoding parameters"; - case AV_FRAME_DATA_SEI_UNREGISTERED: return "H.26[45] User Data Unregistered SEI message"; - case AV_FRAME_DATA_FILM_GRAIN_PARAMS: return "Film grain parameters"; -+ case AV_FRAME_DATA_DETECTION_BBOXES: return "Bounding boxes for object detection and classification"; -+ case AV_FRAME_DATA_DOVI_RPU_BUFFER: return "Dolby Vision RPU Data"; -+ case AV_FRAME_DATA_DOVI_METADATA: return "Dolby Vision Metadata"; -+ case AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT: return "Ambient viewing environment"; - } - return NULL; - } -@@ -866,7 +837,7 @@ - int shift_x = (i == 1 || i == 2) ? desc->log2_chroma_w : 0; - int shift_y = (i == 1 || i == 2) ? desc->log2_chroma_h : 0; - -- if (desc->flags & (AV_PIX_FMT_FLAG_PAL | FF_PSEUDOPAL) && i == 1) { -+ if (desc->flags & AV_PIX_FMT_FLAG_PAL && i == 1) { - offsets[i] = 0; - break; - } -diff -Naur a/media/ffvpx/libavutil/frame.h b/media/ffvpx/libavutil/frame.h ---- a/media/ffvpx/libavutil/frame.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/frame.h 2023-04-06 12:50:24.493176583 +0200 -@@ -30,6 +30,7 @@ - - #include "avutil.h" - #include "buffer.h" -+#include "channel_layout.h" - #include "dict.h" - #include "rational.h" - #include "samplefmt.h" -@@ -142,23 +143,6 @@ - */ - AV_FRAME_DATA_ICC_PROFILE, - --#if FF_API_FRAME_QP -- /** -- * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA. -- * The contents of this side data are undocumented and internal; use -- * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a -- * meaningful way instead. -- */ -- AV_FRAME_DATA_QP_TABLE_PROPERTIES, -- -- /** -- * Raw QP table data. Its format is described by -- * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and -- * av_frame_get_qp_table() to access this instead. -- */ -- AV_FRAME_DATA_QP_TABLE_DATA, --#endif -- - /** - * Timecode which conforms to SMPTE ST 12-1. The data is an array of 4 uint32_t - * where the first uint32_t describes how many (1-3) of the other timecodes are used. -@@ -198,6 +182,38 @@ - * Must be present for every frame which should have film grain applied. - */ - AV_FRAME_DATA_FILM_GRAIN_PARAMS, -+ -+ /** -+ * Bounding boxes for object detection and classification, -+ * as described by AVDetectionBBoxHeader. -+ */ -+ AV_FRAME_DATA_DETECTION_BBOXES, -+ -+ /** -+ * Dolby Vision RPU raw data, suitable for passing to x265 -+ * or other libraries. Array of uint8_t, with NAL emulation -+ * bytes intact. -+ */ -+ AV_FRAME_DATA_DOVI_RPU_BUFFER, -+ -+ /** -+ * Parsed Dolby Vision metadata, suitable for passing to a software -+ * implementation. The payload is the AVDOVIMetadata struct defined in -+ * libavutil/dovi_meta.h. -+ */ -+ AV_FRAME_DATA_DOVI_METADATA, -+ -+ /** -+ * HDR Vivid dynamic metadata associated with a video frame. The payload is -+ * an AVDynamicHDRVivid type and contains information for color -+ * volume transform - CUVA 005.1-2021. -+ */ -+ AV_FRAME_DATA_DYNAMIC_HDR_VIVID, -+ -+ /** -+ * Ambient viewing environment metadata, as defined by H.274. -+ */ -+ AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT, - }; - - enum AVActiveFormatDescription { -@@ -220,11 +236,7 @@ - typedef struct AVFrameSideData { - enum AVFrameSideDataType type; - uint8_t *data; --#if FF_API_BUFFER_SIZE_T -- int size; --#else - size_t size; --#endif - AVDictionary *metadata; - AVBufferRef *buf; - } AVFrameSideData; -@@ -319,21 +331,32 @@ - #define AV_NUM_DATA_POINTERS 8 - /** - * pointer to the picture/channel planes. -- * This might be different from the first allocated byte -+ * This might be different from the first allocated byte. For video, -+ * it could even point to the end of the image data. -+ * -+ * All pointers in data and extended_data must point into one of the -+ * AVBufferRef in buf or extended_buf. - * - * Some decoders access areas outside 0,0 - width,height, please - * see avcodec_align_dimensions2(). Some filters and swscale can read - * up to 16 bytes beyond the planes, if these filters are to be used, - * then 16 extra bytes must be allocated. - * -- * NOTE: Except for hwaccel formats, pointers not needed by the format -- * MUST be set to NULL. -+ * NOTE: Pointers not needed by the format MUST be set to NULL. -+ * -+ * @attention In case of video, the data[] pointers can point to the -+ * end of image data in order to reverse line order, when used in -+ * combination with negative values in the linesize[] array. - */ - uint8_t *data[AV_NUM_DATA_POINTERS]; - - /** -- * For video, size in bytes of each picture line. -- * For audio, size in bytes of each plane. -+ * For video, a positive or negative value, which is typically indicating -+ * the size in bytes of each picture line, but it can also be: -+ * - the negative byte size of lines for vertical flipping -+ * (with data[n] pointing to the end of the data -+ * - a positive or negative multiple of the byte size as for accessing -+ * even and odd fields of a frame (possibly flipped) - * - * For audio, only linesize[0] may be set. For planar audio, each channel - * plane must be the same size. -@@ -345,6 +368,9 @@ - * - * @note The linesize may be larger than the size of usable data -- there - * may be extra padding present for performance reasons. -+ * -+ * @attention In case of video, line size values can be negative to achieve -+ * a vertically inverted iteration over image lines. - */ - int linesize[AV_NUM_DATA_POINTERS]; - -@@ -410,15 +436,6 @@ - */ - int64_t pts; - --#if FF_API_PKT_PTS -- /** -- * PTS copied from the AVPacket that was decoded to produce this frame. -- * @deprecated use the pts field instead -- */ -- attribute_deprecated -- int64_t pkt_pts; --#endif -- - /** - * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) - * This is also the Presentation time of this AVFrame calculated from -@@ -427,13 +444,25 @@ - int64_t pkt_dts; - - /** -+ * Time base for the timestamps in this frame. -+ * In the future, this field may be set on frames output by decoders or -+ * filters, but its value will be by default ignored on input to encoders -+ * or filters. -+ */ -+ AVRational time_base; -+ -+#if FF_API_FRAME_PICTURE_NUMBER -+ /** - * picture number in bitstream order - */ -+ attribute_deprecated - int coded_picture_number; - /** - * picture number in display order - */ -+ attribute_deprecated - int display_picture_number; -+#endif - - /** - * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) -@@ -445,14 +474,6 @@ - */ - void *opaque; - --#if FF_API_ERROR_FRAME -- /** -- * @deprecated unused -- */ -- attribute_deprecated -- uint64_t error[AV_NUM_DATA_POINTERS]; --#endif -- - /** - * When decoding, this signals how much the picture must be delayed. - * extra_delay = repeat_pict / (2*fps) -@@ -474,6 +495,7 @@ - */ - int palette_has_changed; - -+#if FF_API_REORDERED_OPAQUE - /** - * reordered opaque 64 bits (generally an integer or a double precision float - * PTS but can be anything). -@@ -481,24 +503,32 @@ - * that time, - * the decoder reorders values as needed and sets AVFrame.reordered_opaque - * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque -+ * -+ * @deprecated Use AV_CODEC_FLAG_COPY_OPAQUE instead - */ -+ attribute_deprecated - int64_t reordered_opaque; -+#endif - - /** - * Sample rate of the audio data. - */ - int sample_rate; - -+#if FF_API_OLD_CHANNEL_LAYOUT - /** - * Channel layout of the audio data. -+ * @deprecated use ch_layout instead - */ -+ attribute_deprecated - uint64_t channel_layout; -+#endif - - /** -- * AVBuffer references backing the data for this frame. If all elements of -- * this array are NULL, then this frame is not reference counted. This array -- * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must -- * also be non-NULL for all j < i. -+ * AVBuffer references backing the data for this frame. All the pointers in -+ * data and extended_data must point inside one of the buffers in buf or -+ * extended_buf. This array must be filled contiguously -- if buf[i] is -+ * non-NULL then buf[j] must also be non-NULL for all j < i. - * - * There may be at most one AVBuffer per data plane, so for video this array - * always contains all the references. For planar audio with more than -@@ -588,13 +618,18 @@ - */ - int64_t pkt_pos; - -+#if FF_API_PKT_DURATION - /** - * duration of the corresponding packet, expressed in - * AVStream->time_base units, 0 if unknown. - * - encoding: unused - * - decoding: Read by user. -+ * -+ * @deprecated use duration instead - */ -+ attribute_deprecated - int64_t pkt_duration; -+#endif - - /** - * metadata. -@@ -616,12 +651,16 @@ - #define FF_DECODE_ERROR_CONCEALMENT_ACTIVE 4 - #define FF_DECODE_ERROR_DECODE_SLICES 8 - -+#if FF_API_OLD_CHANNEL_LAYOUT - /** - * number of audio channels, only used for audio. - * - encoding: unused - * - decoding: Read by user. -+ * @deprecated use ch_layout instead - */ -+ attribute_deprecated - int channels; -+#endif - - /** - * size of the corresponding packet containing the compressed -@@ -632,24 +671,6 @@ - */ - int pkt_size; - --#if FF_API_FRAME_QP -- /** -- * QP table -- */ -- attribute_deprecated -- int8_t *qscale_table; -- /** -- * QP store stride -- */ -- attribute_deprecated -- int qstride; -- -- attribute_deprecated -- int qscale_type; -- -- attribute_deprecated -- AVBufferRef *qp_table_buf; --#endif - /** - * For hwaccel-format frames, this should be a reference to the - * AVHWFramesContext describing the frame. -@@ -695,70 +716,18 @@ - * for the target frame's private_ref field. - */ - AVBufferRef *private_ref; --} AVFrame; - --#if FF_API_FRAME_GET_SET --/** -- * Accessors for some AVFrame fields. These used to be provided for ABI -- * compatibility, and do not need to be used anymore. -- */ --attribute_deprecated --int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); --attribute_deprecated --void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); --attribute_deprecated --int64_t av_frame_get_pkt_duration (const AVFrame *frame); --attribute_deprecated --void av_frame_set_pkt_duration (AVFrame *frame, int64_t val); --attribute_deprecated --int64_t av_frame_get_pkt_pos (const AVFrame *frame); --attribute_deprecated --void av_frame_set_pkt_pos (AVFrame *frame, int64_t val); --attribute_deprecated --int64_t av_frame_get_channel_layout (const AVFrame *frame); --attribute_deprecated --void av_frame_set_channel_layout (AVFrame *frame, int64_t val); --attribute_deprecated --int av_frame_get_channels (const AVFrame *frame); --attribute_deprecated --void av_frame_set_channels (AVFrame *frame, int val); --attribute_deprecated --int av_frame_get_sample_rate (const AVFrame *frame); --attribute_deprecated --void av_frame_set_sample_rate (AVFrame *frame, int val); --attribute_deprecated --AVDictionary *av_frame_get_metadata (const AVFrame *frame); --attribute_deprecated --void av_frame_set_metadata (AVFrame *frame, AVDictionary *val); --attribute_deprecated --int av_frame_get_decode_error_flags (const AVFrame *frame); --attribute_deprecated --void av_frame_set_decode_error_flags (AVFrame *frame, int val); --attribute_deprecated --int av_frame_get_pkt_size(const AVFrame *frame); --attribute_deprecated --void av_frame_set_pkt_size(AVFrame *frame, int val); --#if FF_API_FRAME_QP --attribute_deprecated --int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type); --attribute_deprecated --int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type); --#endif --attribute_deprecated --enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame); --attribute_deprecated --void av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val); --attribute_deprecated --enum AVColorRange av_frame_get_color_range(const AVFrame *frame); --attribute_deprecated --void av_frame_set_color_range(AVFrame *frame, enum AVColorRange val); --#endif -+ /** -+ * Channel layout of the audio data. -+ */ -+ AVChannelLayout ch_layout; -+ -+ /** -+ * Duration of the frame, in the same units as pts. 0 if unknown. -+ */ -+ int64_t duration; -+} AVFrame; - --/** -- * Get the name of a colorspace. -- * @return a static string identifying the colorspace; can be NULL. -- */ --const char *av_get_colorspace_name(enum AVColorSpace val); - - /** - * Allocate an AVFrame and set its fields to default values. The resulting -@@ -827,7 +796,7 @@ - * The following fields must be set on frame before calling this function: - * - format (pixel format for video, sample format for audio) - * - width and height for video -- * - nb_samples and channel_layout for audio -+ * - nb_samples and ch_layout for audio - * - * This function will fill AVFrame.data and AVFrame.buf arrays and, if - * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. -@@ -864,7 +833,8 @@ - * Ensure that the frame data is writable, avoiding data copy if possible. - * - * Do nothing if the frame is writable, allocate new buffers and copy the data -- * if it is not. -+ * if it is not. Non-refcounted frames behave as non-writable, i.e. a copy -+ * is always made. - * - * @return 0 on success, a negative AVERROR on error. - * -@@ -899,6 +869,7 @@ - /** - * Get the buffer reference a given data plane is stored in. - * -+ * @param frame the frame to get the plane's buffer from - * @param plane index of the data plane of interest in frame->extended_data. - * - * @return the buffer reference that contains the plane or NULL if the input -@@ -917,11 +888,7 @@ - */ - AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, --#if FF_API_BUFFER_SIZE_T -- int size); --#else - size_t size); --#endif - - /** - * Add a new side data to a frame from an existing AVBufferRef -diff -Naur a/media/ffvpx/libavutil/hwcontext.c b/media/ffvpx/libavutil/hwcontext.c ---- a/media/ffvpx/libavutil/hwcontext.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/hwcontext.c 2023-04-06 12:50:24.493176583 +0200 -@@ -18,6 +18,7 @@ - - #include "config.h" - -+#include "avassert.h" - #include "buffer.h" - #include "common.h" - #include "hwcontext.h" -@@ -308,7 +309,7 @@ - AVFrame **frames; - int i, ret = 0; - -- frames = av_mallocz_array(ctx->initial_pool_size, sizeof(*frames)); -+ frames = av_calloc(ctx->initial_pool_size, sizeof(*frames)); - if (!frames) - return AVERROR(ENOMEM); - -@@ -396,10 +397,14 @@ - - static int transfer_data_alloc(AVFrame *dst, const AVFrame *src, int flags) - { -- AVHWFramesContext *ctx = (AVHWFramesContext*)src->hw_frames_ctx->data; -+ AVHWFramesContext *ctx; - AVFrame *frame_tmp; - int ret = 0; - -+ if (!src->hw_frames_ctx) -+ return AVERROR(EINVAL); -+ ctx = (AVHWFramesContext*)src->hw_frames_ctx->data; -+ - frame_tmp = av_frame_alloc(); - if (!frame_tmp) - return AVERROR(ENOMEM); -@@ -788,6 +793,8 @@ - - int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags) - { -+ AVBufferRef *orig_dst_frames = dst->hw_frames_ctx; -+ enum AVPixelFormat orig_dst_fmt = dst->format; - AVHWFramesContext *src_frames, *dst_frames; - HWMapDescriptor *hwmap; - int ret; -@@ -824,8 +831,10 @@ - src_frames->internal->hw_type->map_from) { - ret = src_frames->internal->hw_type->map_from(src_frames, - dst, src, flags); -- if (ret != AVERROR(ENOSYS)) -+ if (ret >= 0) - return ret; -+ else if (ret != AVERROR(ENOSYS)) -+ goto fail; - } - } - -@@ -836,12 +845,30 @@ - dst_frames->internal->hw_type->map_to) { - ret = dst_frames->internal->hw_type->map_to(dst_frames, - dst, src, flags); -- if (ret != AVERROR(ENOSYS)) -+ if (ret >= 0) - return ret; -+ else if (ret != AVERROR(ENOSYS)) -+ goto fail; - } - } - - return AVERROR(ENOSYS); -+ -+fail: -+ // if the caller provided dst frames context, it should be preserved -+ // by this function -+ av_assert0(orig_dst_frames == NULL || -+ orig_dst_frames == dst->hw_frames_ctx); -+ -+ // preserve user-provided dst frame fields, but clean -+ // anything we might have set -+ dst->hw_frames_ctx = NULL; -+ av_frame_unref(dst); -+ -+ dst->hw_frames_ctx = orig_dst_frames; -+ dst->format = orig_dst_fmt; -+ -+ return ret; - } - - int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, -diff -Naur a/media/ffvpx/libavutil/hwcontext_drm.h b/media/ffvpx/libavutil/hwcontext_drm.h ---- a/media/ffvpx/libavutil/hwcontext_drm.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/media/ffvpx/libavutil/hwcontext_drm.h 2023-04-06 12:49:40.260395172 +0200 -@@ -0,0 +1,169 @@ -+/* -+ * 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 -+ */ -+ -+#ifndef AVUTIL_HWCONTEXT_DRM_H -+#define AVUTIL_HWCONTEXT_DRM_H -+ -+#include -+#include -+ -+/** -+ * @file -+ * API-specific header for AV_HWDEVICE_TYPE_DRM. -+ * -+ * Internal frame allocation is not currently supported - all frames -+ * must be allocated by the user. Thus AVHWFramesContext is always -+ * NULL, though this may change if support for frame allocation is -+ * added in future. -+ */ -+ -+enum { -+ /** -+ * The maximum number of layers/planes in a DRM frame. -+ */ -+ AV_DRM_MAX_PLANES = 4 -+}; -+ -+/** -+ * DRM object descriptor. -+ * -+ * Describes a single DRM object, addressing it as a PRIME file -+ * descriptor. -+ */ -+typedef struct AVDRMObjectDescriptor { -+ /** -+ * DRM PRIME fd for the object. -+ */ -+ int fd; -+ /** -+ * Total size of the object. -+ * -+ * (This includes any parts not which do not contain image data.) -+ */ -+ size_t size; -+ /** -+ * Format modifier applied to the object (DRM_FORMAT_MOD_*). -+ * -+ * If the format modifier is unknown then this should be set to -+ * DRM_FORMAT_MOD_INVALID. -+ */ -+ uint64_t format_modifier; -+} AVDRMObjectDescriptor; -+ -+/** -+ * DRM plane descriptor. -+ * -+ * Describes a single plane of a layer, which is contained within -+ * a single object. -+ */ -+typedef struct AVDRMPlaneDescriptor { -+ /** -+ * Index of the object containing this plane in the objects -+ * array of the enclosing frame descriptor. -+ */ -+ int object_index; -+ /** -+ * Offset within that object of this plane. -+ */ -+ ptrdiff_t offset; -+ /** -+ * Pitch (linesize) of this plane. -+ */ -+ ptrdiff_t pitch; -+} AVDRMPlaneDescriptor; -+ -+/** -+ * DRM layer descriptor. -+ * -+ * Describes a single layer within a frame. This has the structure -+ * defined by its format, and will contain one or more planes. -+ */ -+typedef struct AVDRMLayerDescriptor { -+ /** -+ * Format of the layer (DRM_FORMAT_*). -+ */ -+ uint32_t format; -+ /** -+ * Number of planes in the layer. -+ * -+ * This must match the number of planes required by format. -+ */ -+ int nb_planes; -+ /** -+ * Array of planes in this layer. -+ */ -+ AVDRMPlaneDescriptor planes[AV_DRM_MAX_PLANES]; -+} AVDRMLayerDescriptor; -+ -+/** -+ * DRM frame descriptor. -+ * -+ * This is used as the data pointer for AV_PIX_FMT_DRM_PRIME frames. -+ * It is also used by user-allocated frame pools - allocating in -+ * AVHWFramesContext.pool must return AVBufferRefs which contain -+ * an object of this type. -+ * -+ * The fields of this structure should be set such it can be -+ * imported directly by EGL using the EGL_EXT_image_dma_buf_import -+ * and EGL_EXT_image_dma_buf_import_modifiers extensions. -+ * (Note that the exact layout of a particular format may vary between -+ * platforms - we only specify that the same platform should be able -+ * to import it.) -+ * -+ * The total number of planes must not exceed AV_DRM_MAX_PLANES, and -+ * the order of the planes by increasing layer index followed by -+ * increasing plane index must be the same as the order which would -+ * be used for the data pointers in the equivalent software format. -+ */ -+typedef struct AVDRMFrameDescriptor { -+ /** -+ * Number of DRM objects making up this frame. -+ */ -+ int nb_objects; -+ /** -+ * Array of objects making up the frame. -+ */ -+ AVDRMObjectDescriptor objects[AV_DRM_MAX_PLANES]; -+ /** -+ * Number of layers in the frame. -+ */ -+ int nb_layers; -+ /** -+ * Array of layers in the frame. -+ */ -+ AVDRMLayerDescriptor layers[AV_DRM_MAX_PLANES]; -+} AVDRMFrameDescriptor; -+ -+/** -+ * DRM device. -+ * -+ * Allocated as AVHWDeviceContext.hwctx. -+ */ -+typedef struct AVDRMDeviceContext { -+ /** -+ * File descriptor of DRM device. -+ * -+ * This is used as the device to create frames on, and may also be -+ * used in some derivation and mapping operations. -+ * -+ * If no device is required, set to -1. -+ */ -+ int fd; -+} AVDRMDeviceContext; -+ -+#endif /* AVUTIL_HWCONTEXT_DRM_H */ -diff -Naur a/media/ffvpx/libavutil/hwcontext.h b/media/ffvpx/libavutil/hwcontext.h ---- a/media/ffvpx/libavutil/hwcontext.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/hwcontext.h 2023-04-06 12:50:06.976471255 +0200 -@@ -249,7 +249,7 @@ - /** - * Iterate over supported device types. - * -- * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type -+ * @param prev AV_HWDEVICE_TYPE_NONE initially, then the previous type - * returned by this function in subsequent iterations. - * @return The next usable device type from enum AVHWDeviceType, or - * AV_HWDEVICE_TYPE_NONE if there are no more. -@@ -571,6 +571,10 @@ - * possible with the given arguments and hwframe setup, while other return - * values indicate that it failed somehow. - * -+ * On failure, the destination frame will be left blank, except for the -+ * hw_frames_ctx/format fields thay may have been set by the caller - those will -+ * be preserved as they were. -+ * - * @param dst Destination frame, to contain the mapping. - * @param src Source frame, to be mapped. - * @param flags Some combination of AV_HWFRAME_MAP_* flags. -@@ -587,6 +591,7 @@ - * - * @param derived_frame_ctx On success, a reference to the newly created - * AVHWFramesContext. -+ * @param format The AVPixelFormat for the derived context. - * @param derived_device_ctx A reference to the device to create the new - * AVHWFramesContext on. - * @param source_frame_ctx A reference to an existing AVHWFramesContext -diff -Naur a/media/ffvpx/libavutil/hwcontext_vaapi.c b/media/ffvpx/libavutil/hwcontext_vaapi.c ---- a/media/ffvpx/libavutil/hwcontext_vaapi.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/hwcontext_vaapi.c 2023-04-06 12:50:24.493176583 +0200 -@@ -81,6 +81,9 @@ - unsigned int rt_format; - // Whether vaDeriveImage works. - int derive_works; -+ // Caches whether VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2 is unsupported for -+ // surface imports. -+ int prime_2_import_unsupported; - } VAAPIFramesContext; - - typedef struct VAAPIMapping { -@@ -121,13 +124,22 @@ - #ifdef VA_FOURCC_Y210 - MAP(Y210, YUV422_10, Y210, 0), - #endif -+#ifdef VA_FOURCC_Y212 -+ MAP(Y212, YUV422_12, Y212, 0), -+#endif - MAP(411P, YUV411, YUV411P, 0), - MAP(422V, YUV422, YUV440P, 0), - MAP(444P, YUV444, YUV444P, 0), -+#ifdef VA_FOURCC_XYUV -+ MAP(XYUV, YUV444, VUYX, 0), -+#endif - MAP(Y800, YUV400, GRAY8, 0), - #ifdef VA_FOURCC_P010 - MAP(P010, YUV420_10BPP, P010, 0), - #endif -+#ifdef VA_FOURCC_P012 -+ MAP(P012, YUV420_12, P012, 0), -+#endif - MAP(BGRA, RGB32, BGRA, 0), - MAP(BGRX, RGB32, BGR0, 0), - MAP(RGBA, RGB32, RGBA, 0), -@@ -141,6 +153,16 @@ - #ifdef VA_FOURCC_X2R10G10B10 - MAP(X2R10G10B10, RGB32_10, X2RGB10, 0), - #endif -+#ifdef VA_FOURCC_Y410 -+ // libva doesn't include a fourcc for XV30 and the driver only declares -+ // support for Y410, so we must fudge the mapping here. -+ MAP(Y410, YUV444_10, XV30, 0), -+#endif -+#ifdef VA_FOURCC_Y412 -+ // libva doesn't include a fourcc for XV36 and the driver only declares -+ // support for Y412, so we must fudge the mapping here. -+ MAP(Y412, YUV444_12, XV36, 0), -+#endif - }; - #undef MAP - -@@ -466,7 +488,7 @@ - } - } - --static AVBufferRef *vaapi_pool_alloc(void *opaque, buffer_size_t size) -+static AVBufferRef *vaapi_pool_alloc(void *opaque, size_t size) - { - AVHWFramesContext *hwfc = opaque; - VAAPIFramesContext *ctx = hwfc->internal->priv; -@@ -991,11 +1013,15 @@ - } vaapi_drm_format_map[] = { - #ifdef DRM_FORMAT_R8 - DRM_MAP(NV12, 2, DRM_FORMAT_R8, DRM_FORMAT_RG88), -+ DRM_MAP(NV12, 2, DRM_FORMAT_R8, DRM_FORMAT_GR88), - #endif - DRM_MAP(NV12, 1, DRM_FORMAT_NV12), - #if defined(VA_FOURCC_P010) && defined(DRM_FORMAT_R16) - DRM_MAP(P010, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), - #endif -+#if defined(VA_FOURCC_P012) && defined(DRM_FORMAT_R16) -+ DRM_MAP(P012, 2, DRM_FORMAT_R16, DRM_FORMAT_RG1616), -+#endif - DRM_MAP(BGRA, 1, DRM_FORMAT_ARGB8888), - DRM_MAP(BGRX, 1, DRM_FORMAT_XRGB8888), - DRM_MAP(RGBA, 1, DRM_FORMAT_ABGR8888), -@@ -1006,6 +1032,15 @@ - #endif - DRM_MAP(ARGB, 1, DRM_FORMAT_BGRA8888), - DRM_MAP(XRGB, 1, DRM_FORMAT_BGRX8888), -+#if defined(VA_FOURCC_XYUV) && defined(DRM_FORMAT_XYUV8888) -+ DRM_MAP(XYUV, 1, DRM_FORMAT_XYUV8888), -+#endif -+#if defined(VA_FOURCC_Y412) && defined(DRM_FORMAT_XVYU2101010) -+ DRM_MAP(Y410, 1, DRM_FORMAT_XVYU2101010), -+#endif -+#if defined(VA_FOURCC_Y412) && defined(DRM_FORMAT_XVYU12_16161616) -+ DRM_MAP(Y412, 1, DRM_FORMAT_XVYU12_16161616), -+#endif - }; - #undef DRM_MAP - -@@ -1024,16 +1059,23 @@ - static int vaapi_map_from_drm(AVHWFramesContext *src_fc, AVFrame *dst, - const AVFrame *src, int flags) - { -+#if VA_CHECK_VERSION(1, 1, 0) -+ VAAPIFramesContext *src_vafc = src_fc->internal->priv; -+ int use_prime2; -+#else -+ int k; -+#endif - AVHWFramesContext *dst_fc = - (AVHWFramesContext*)dst->hw_frames_ctx->data; - AVVAAPIDeviceContext *dst_dev = dst_fc->device_ctx->hwctx; - const AVDRMFrameDescriptor *desc; - const VAAPIFormatDescriptor *format_desc; - VASurfaceID surface_id; -- VAStatus vas; -+ VAStatus vas = VA_STATUS_SUCCESS; - uint32_t va_fourcc; -- int err, i, j, k; -+ int err, i, j; - -+#if !VA_CHECK_VERSION(1, 1, 0) - unsigned long buffer_handle; - VASurfaceAttribExternalBuffers buffer_desc; - VASurfaceAttrib attrs[2] = { -@@ -1050,6 +1092,7 @@ - .value.value.p = &buffer_desc, - } - }; -+#endif - - desc = (AVDRMFrameDescriptor*)src->data[0]; - -@@ -1085,6 +1128,119 @@ - format_desc = vaapi_format_from_fourcc(va_fourcc); - av_assert0(format_desc); - -+#if VA_CHECK_VERSION(1, 1, 0) -+ use_prime2 = !src_vafc->prime_2_import_unsupported && -+ desc->objects[0].format_modifier != DRM_FORMAT_MOD_INVALID; -+ if (use_prime2) { -+ VADRMPRIMESurfaceDescriptor prime_desc; -+ VASurfaceAttrib prime_attrs[2] = { -+ { -+ .type = VASurfaceAttribMemoryType, -+ .flags = VA_SURFACE_ATTRIB_SETTABLE, -+ .value.type = VAGenericValueTypeInteger, -+ .value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME_2, -+ }, -+ { -+ .type = VASurfaceAttribExternalBufferDescriptor, -+ .flags = VA_SURFACE_ATTRIB_SETTABLE, -+ .value.type = VAGenericValueTypePointer, -+ .value.value.p = &prime_desc, -+ } -+ }; -+ prime_desc.fourcc = va_fourcc; -+ prime_desc.width = src_fc->width; -+ prime_desc.height = src_fc->height; -+ prime_desc.num_objects = desc->nb_objects; -+ for (i = 0; i < desc->nb_objects; ++i) { -+ prime_desc.objects[i].fd = desc->objects[i].fd; -+ prime_desc.objects[i].size = desc->objects[i].size; -+ prime_desc.objects[i].drm_format_modifier = -+ desc->objects[i].format_modifier; -+ } -+ -+ prime_desc.num_layers = desc->nb_layers; -+ for (i = 0; i < desc->nb_layers; ++i) { -+ prime_desc.layers[i].drm_format = desc->layers[i].format; -+ prime_desc.layers[i].num_planes = desc->layers[i].nb_planes; -+ for (j = 0; j < desc->layers[i].nb_planes; ++j) { -+ prime_desc.layers[i].object_index[j] = -+ desc->layers[i].planes[j].object_index; -+ prime_desc.layers[i].offset[j] = desc->layers[i].planes[j].offset; -+ prime_desc.layers[i].pitch[j] = desc->layers[i].planes[j].pitch; -+ } -+ -+ if (format_desc->chroma_planes_swapped && -+ desc->layers[i].nb_planes == 3) { -+ FFSWAP(uint32_t, prime_desc.layers[i].pitch[1], -+ prime_desc.layers[i].pitch[2]); -+ FFSWAP(uint32_t, prime_desc.layers[i].offset[1], -+ prime_desc.layers[i].offset[2]); -+ } -+ } -+ -+ /* -+ * We can query for PRIME_2 support with vaQuerySurfaceAttributes, but that -+ * that needs the config_id which we don't have here . Both Intel and -+ * Gallium seem to do the correct error checks, so lets just try the -+ * PRIME_2 import first. -+ */ -+ vas = vaCreateSurfaces(dst_dev->display, format_desc->rt_format, -+ src->width, src->height, &surface_id, 1, -+ prime_attrs, FF_ARRAY_ELEMS(prime_attrs)); -+ if (vas != VA_STATUS_SUCCESS) -+ src_vafc->prime_2_import_unsupported = 1; -+ } -+ -+ if (!use_prime2 || vas != VA_STATUS_SUCCESS) { -+ int k; -+ unsigned long buffer_handle; -+ VASurfaceAttribExternalBuffers buffer_desc; -+ VASurfaceAttrib buffer_attrs[2] = { -+ { -+ .type = VASurfaceAttribMemoryType, -+ .flags = VA_SURFACE_ATTRIB_SETTABLE, -+ .value.type = VAGenericValueTypeInteger, -+ .value.value.i = VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME, -+ }, -+ { -+ .type = VASurfaceAttribExternalBufferDescriptor, -+ .flags = VA_SURFACE_ATTRIB_SETTABLE, -+ .value.type = VAGenericValueTypePointer, -+ .value.value.p = &buffer_desc, -+ } -+ }; -+ -+ buffer_handle = desc->objects[0].fd; -+ buffer_desc.pixel_format = va_fourcc; -+ buffer_desc.width = src_fc->width; -+ buffer_desc.height = src_fc->height; -+ buffer_desc.data_size = desc->objects[0].size; -+ buffer_desc.buffers = &buffer_handle; -+ buffer_desc.num_buffers = 1; -+ buffer_desc.flags = 0; -+ -+ k = 0; -+ for (i = 0; i < desc->nb_layers; i++) { -+ for (j = 0; j < desc->layers[i].nb_planes; j++) { -+ buffer_desc.pitches[k] = desc->layers[i].planes[j].pitch; -+ buffer_desc.offsets[k] = desc->layers[i].planes[j].offset; -+ ++k; -+ } -+ } -+ buffer_desc.num_planes = k; -+ -+ if (format_desc->chroma_planes_swapped && -+ buffer_desc.num_planes == 3) { -+ FFSWAP(uint32_t, buffer_desc.pitches[1], buffer_desc.pitches[2]); -+ FFSWAP(uint32_t, buffer_desc.offsets[1], buffer_desc.offsets[2]); -+ } -+ -+ vas = vaCreateSurfaces(dst_dev->display, format_desc->rt_format, -+ src->width, src->height, -+ &surface_id, 1, -+ buffer_attrs, FF_ARRAY_ELEMS(buffer_attrs)); -+ } -+#else - buffer_handle = desc->objects[0].fd; - buffer_desc.pixel_format = va_fourcc; - buffer_desc.width = src_fc->width; -@@ -1114,6 +1270,7 @@ - src->width, src->height, - &surface_id, 1, - attrs, FF_ARRAY_ELEMS(attrs)); -+#endif - if (vas != VA_STATUS_SUCCESS) { - av_log(dst_fc, AV_LOG_ERROR, "Failed to create surface from DRM " - "object: %d (%s).\n", vas, vaErrorStr(vas)); -@@ -1164,8 +1321,17 @@ - surface_id = (VASurfaceID)(uintptr_t)src->data[3]; - - export_flags = VA_EXPORT_SURFACE_SEPARATE_LAYERS; -- if (flags & AV_HWFRAME_MAP_READ) -+ if (flags & AV_HWFRAME_MAP_READ) { - export_flags |= VA_EXPORT_SURFACE_READ_ONLY; -+ -+ vas = vaSyncSurface(hwctx->display, surface_id); -+ if (vas != VA_STATUS_SUCCESS) { -+ av_log(hwfc, AV_LOG_ERROR, "Failed to sync surface " -+ "%#x: %d (%s).\n", surface_id, vas, vaErrorStr(vas)); -+ return AVERROR(EIO); -+ } -+ } -+ - if (flags & AV_HWFRAME_MAP_WRITE) - export_flags |= VA_EXPORT_SURFACE_WRITE_ONLY; - -@@ -1356,7 +1522,7 @@ - goto fail_derived; - } - -- av_log(hwfc, AV_LOG_DEBUG, "DRM PRIME fd is %ld.\n", -+ av_log(hwfc, AV_LOG_DEBUG, "DRM PRIME fd is %"PRIdPTR".\n", - mapping->buffer_info.handle); - - mapping->drm_desc.nb_objects = 1; -@@ -1545,6 +1711,7 @@ - char path[64]; - int n, max_devices = 8; - #if CONFIG_LIBDRM -+ drmVersion *info; - const AVDictionaryEntry *kernel_driver; - kernel_driver = av_dict_get(opts, "kernel_driver", NULL, 0); - #endif -@@ -1558,9 +1725,15 @@ - break; - } - #if CONFIG_LIBDRM -+ info = drmGetVersion(priv->drm_fd); -+ if (!info) { -+ av_log(ctx, AV_LOG_VERBOSE, -+ "Failed to get DRM version for device %d.\n", n); -+ close(priv->drm_fd); -+ priv->drm_fd = -1; -+ continue; -+ } - if (kernel_driver) { -- drmVersion *info; -- info = drmGetVersion(priv->drm_fd); - if (strcmp(kernel_driver->value, info->name)) { - av_log(ctx, AV_LOG_VERBOSE, "Ignoring device %d " - "with non-matching kernel driver (%s).\n", -@@ -1575,12 +1748,20 @@ - "with matching kernel driver (%s).\n", - n, info->name); - drmFreeVersion(info); -- } else --#endif -- { -- av_log(ctx, AV_LOG_VERBOSE, "Trying to use " -- "DRM render node for device %d.\n", n); -+ break; -+ // drmGetVersion() ensures |info->name| is 0-terminated. -+ } else if (!strcmp(info->name, "vgem")) { -+ av_log(ctx, AV_LOG_VERBOSE, -+ "Skipping vgem node for device %d.\n", n); -+ drmFreeVersion(info); -+ close(priv->drm_fd); -+ priv->drm_fd = -1; -+ continue; - } -+ drmFreeVersion(info); -+#endif -+ av_log(ctx, AV_LOG_VERBOSE, "Trying to use " -+ "DRM render node for device %d.\n", n); - break; - } - if (n >= max_devices) -diff -Naur a/media/ffvpx/libavutil/imgutils.c b/media/ffvpx/libavutil/imgutils.c ---- a/media/ffvpx/libavutil/imgutils.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/imgutils.c 2023-04-06 12:49:40.260395172 +0200 -@@ -123,8 +123,7 @@ - return AVERROR(EINVAL); - sizes[0] = linesizes[0] * (size_t)height; - -- if (desc->flags & AV_PIX_FMT_FLAG_PAL || -- desc->flags & FF_PSEUDOPAL) { -+ if (desc->flags & AV_PIX_FMT_FLAG_PAL) { - sizes[1] = 256 * 4; /* palette is stored here as 256 32 bits words */ - return 0; - } -@@ -166,6 +165,9 @@ - ret += sizes[i]; - } - -+ if (!ptr) -+ return ret; -+ - data[0] = ptr; - for (i = 1; i < 4 && sizes[i]; i++) - data[i] = data[i - 1] + sizes[i - 1]; -@@ -250,7 +252,7 @@ - av_free(buf); - return ret; - } -- if (desc->flags & AV_PIX_FMT_FLAG_PAL || (desc->flags & FF_PSEUDOPAL && pointers[1])) { -+ if (desc->flags & AV_PIX_FMT_FLAG_PAL) { - avpriv_set_systematic_pal2((uint32_t*)pointers[1], pix_fmt); - if (align < 4) { - av_log(NULL, AV_LOG_ERROR, "Formats with a palette require a minimum alignment of 4\n"); -@@ -259,8 +261,7 @@ - } - } - -- if ((desc->flags & AV_PIX_FMT_FLAG_PAL || -- desc->flags & FF_PSEUDOPAL) && pointers[1] && -+ if (desc->flags & AV_PIX_FMT_FLAG_PAL && pointers[1] && - pointers[1] - pointers[0] > linesizes[0] * h) { - /* zero-initialize the padding before the palette */ - memset(pointers[0] + linesizes[0] * h, 0, -@@ -355,9 +356,9 @@ - } - } - --static void image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, -- const uint8_t *src, ptrdiff_t src_linesize, -- ptrdiff_t bytewidth, int height) -+void av_image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, -+ const uint8_t *src, ptrdiff_t src_linesize, -+ ptrdiff_t bytewidth, int height) - { - int ret = -1; - -@@ -388,8 +389,7 @@ - if (!desc || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) - return; - -- if (desc->flags & AV_PIX_FMT_FLAG_PAL || -- desc->flags & FF_PSEUDOPAL) { -+ if (desc->flags & AV_PIX_FMT_FLAG_PAL) { - copy_plane(dst_data[0], dst_linesizes[0], - src_data[0], src_linesizes[0], - width, height); -@@ -440,7 +440,7 @@ - enum AVPixelFormat pix_fmt, int width, int height) - { - image_copy(dst_data, dst_linesizes, src_data, src_linesizes, pix_fmt, -- width, height, image_copy_plane_uc_from); -+ width, height, av_image_copy_plane_uc_from); - } - - int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], -@@ -478,10 +478,6 @@ - if (ret < 0) - return ret; - -- // do not include palette for these pseudo-paletted formats -- if (desc->flags & FF_PSEUDOPAL) -- return FFALIGN(width, align) * height; -- - ret = av_image_fill_linesizes(linesize, pix_fmt, width); - if (ret < 0) - return ret; -diff -Naur a/media/ffvpx/libavutil/imgutils.h b/media/ffvpx/libavutil/imgutils.h ---- a/media/ffvpx/libavutil/imgutils.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/imgutils.h 2023-04-06 12:50:06.976471255 +0200 -@@ -27,8 +27,10 @@ - * @{ - */ - --#include "avutil.h" -+#include -+#include - #include "pixdesc.h" -+#include "pixfmt.h" - #include "rational.h" - - /** -@@ -46,6 +48,7 @@ - * component in the plane with the max pixel step. - * @param max_pixstep_comps an array which is filled with the component - * for each plane which has the max pixel step. May be NULL. -+ * @param pixdesc the AVPixFmtDescriptor for the image, describing its format - */ - void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4], - const AVPixFmtDescriptor *pixdesc); -@@ -63,6 +66,8 @@ - * width width. - * - * @param linesizes array to be filled with the linesize for each plane -+ * @param pix_fmt the AVPixelFormat of the image -+ * @param width width of the image in pixels - * @return >= 0 in case of success, a negative error code otherwise - */ - int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width); -@@ -71,6 +76,8 @@ - * Fill plane sizes for an image with pixel format pix_fmt and height height. - * - * @param size the array to be filled with the size of each image plane -+ * @param pix_fmt the AVPixelFormat of the image -+ * @param height height of the image in pixels - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() - * @return >= 0 in case of success, a negative error code otherwise -@@ -86,6 +93,8 @@ - * height height. - * - * @param data pointers array to be filled with the pointer for each image plane -+ * @param pix_fmt the AVPixelFormat of the image -+ * @param height height of the image in pixels - * @param ptr the pointer to a buffer which will contain the image - * @param linesizes the array containing the linesize for each - * plane, should be filled by av_image_fill_linesizes() -@@ -101,6 +110,11 @@ - * The allocated image buffer has to be freed by using - * av_freep(&pointers[0]). - * -+ * @param pointers array to be filled with the pointer for each image plane -+ * @param linesizes the array filled with the linesize for each plane -+ * @param w width of the image in pixels -+ * @param h height of the image in pixels -+ * @param pix_fmt the AVPixelFormat of the image - * @param align the value to use for buffer size alignment - * @return the size in bytes required for the image buffer, a negative - * error code in case of failure -@@ -117,18 +131,44 @@ - * bytewidth must be contained by both absolute values of dst_linesize - * and src_linesize, otherwise the function behavior is undefined. - * -+ * @param dst destination plane to copy to - * @param dst_linesize linesize for the image plane in dst -+ * @param src source plane to copy from - * @param src_linesize linesize for the image plane in src -+ * @param height height (number of lines) of the plane - */ - void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height); - - /** -+ * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where -+ * available, this function will use special functionality for reading from such -+ * memory, which may result in greatly improved performance compared to plain -+ * av_image_copy_plane(). -+ * -+ * bytewidth must be contained by both absolute values of dst_linesize -+ * and src_linesize, otherwise the function behavior is undefined. -+ * -+ * @note The linesize parameters have the type ptrdiff_t here, while they are -+ * int for av_image_copy_plane(). -+ * @note On x86, the linesizes currently need to be aligned to the cacheline -+ * size (i.e. 64) to get improved performance. -+ */ -+void av_image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, -+ const uint8_t *src, ptrdiff_t src_linesize, -+ ptrdiff_t bytewidth, int height); -+ -+/** - * Copy image in src_data to dst_data. - * -+ * @param dst_data destination image data buffer to copy to - * @param dst_linesizes linesizes for the image in dst_data -+ * @param src_data source image data buffer to copy from - * @param src_linesizes linesizes for the image in src_data -+ * @param pix_fmt the AVPixelFormat of the image -+ * @param width width of the image in pixels -+ * @param height height of the image in pixels - */ - void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], -diff -Naur a/media/ffvpx/libavutil/integer.c b/media/ffvpx/libavutil/integer.c ---- a/media/ffvpx/libavutil/integer.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/integer.c 2023-04-06 12:50:06.976471255 +0200 -@@ -25,9 +25,11 @@ - * @author Michael Niedermayer - */ - --#include "common.h" -+#include -+ - #include "integer.h" - #include "avassert.h" -+#include "intmath.h" - - static const AVInteger zero_i; - -@@ -101,8 +103,8 @@ - for(i=0; i>4); - unsigned int v=0; -- if(index+1> (s&15); - } - return out; -@@ -156,11 +158,9 @@ - } - - int64_t av_i2int(AVInteger a){ -- int i; -- int64_t out=(int8_t)a.v[AV_INTEGER_SIZE-1]; -+ uint64_t out = a.v[3]; - -- for(i= AV_INTEGER_SIZE-2; i>=0; i--){ -- out = (out<<16) + a.v[i]; -- } -+ for (int i = 2; i >= 0; i--) -+ out = (out << 16) | a.v[i]; - return out; - } -diff -Naur a/media/ffvpx/libavutil/integer.h b/media/ffvpx/libavutil/integer.h ---- a/media/ffvpx/libavutil/integer.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/integer.h 2023-04-06 12:49:40.261395212 +0200 -@@ -29,7 +29,7 @@ - #define AVUTIL_INTEGER_H - - #include --#include "common.h" -+#include "attributes.h" - - #define AV_INTEGER_SIZE 8 - -diff -Naur a/media/ffvpx/libavutil/internal.h b/media/ffvpx/libavutil/internal.h ---- a/media/ffvpx/libavutil/internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/internal.h 2023-04-06 12:50:06.976471255 +0200 -@@ -37,14 +37,12 @@ - #include - #include - #include -+#include - #include "config.h" - #include "attributes.h" - #include "timer.h" --#include "cpu.h" --#include "dict.h" - #include "macros.h" - #include "pixfmt.h" --#include "version.h" - - #if ARCH_X86 - # include "x86/emms.h" -@@ -87,10 +85,6 @@ - - #define FF_MEMORY_POISON 0x2a - --#define MAKE_ACCESSORS(str, name, type, field) \ -- type av_##name##_get_##field(const str *s) { return s->field; } \ -- void av_##name##_set_##field(str *s, type v) { s->field = v; } -- - /* Check if the hard coded offset of a struct member still matches reality. - * Induce a compilation failure if not. - */ -@@ -100,16 +94,20 @@ - - - #define FF_ALLOC_TYPED_ARRAY(p, nelem) (p = av_malloc_array(nelem, sizeof(*p))) --#define FF_ALLOCZ_TYPED_ARRAY(p, nelem) (p = av_mallocz_array(nelem, sizeof(*p))) -+#define FF_ALLOCZ_TYPED_ARRAY(p, nelem) (p = av_calloc(nelem, sizeof(*p))) - - #define FF_PTR_ADD(ptr, off) ((off) ? (ptr) + (off) : (ptr)) - -+/** -+ * Access a field in a structure by its offset. -+ */ -+#define FF_FIELD_AT(type, off, obj) (*(type *)((char *)&(obj) + (off))) -+ - #include "libm.h" - - /** - * Return NULL if CONFIG_SMALL is true, otherwise the argument -- * without modification. Used to disable the definition of strings -- * (for example AVCodec long_names). -+ * without modification. Used to disable the definition of strings. - */ - #if CONFIG_SMALL - # define NULL_IF_CONFIG_SMALL(x) NULL -@@ -118,45 +116,6 @@ - #endif - - /** -- * Define a function with only the non-default version specified. -- * -- * On systems with ELF shared libraries, all symbols exported from -- * FFmpeg libraries are tagged with the name and major version of the -- * library to which they belong. If a function is moved from one -- * library to another, a wrapper must be retained in the original -- * location to preserve binary compatibility. -- * -- * Functions defined with this macro will never be used to resolve -- * symbols by the build-time linker. -- * -- * @param type return type of function -- * @param name name of function -- * @param args argument list of function -- * @param ver version tag to assign function -- */ --#if HAVE_SYMVER_ASM_LABEL --# define FF_SYMVER(type, name, args, ver) \ -- type ff_##name args __asm__ (EXTERN_PREFIX #name "@" ver); \ -- type ff_##name args --#elif HAVE_SYMVER_GNU_ASM --# define FF_SYMVER(type, name, args, ver) \ -- __asm__ (".symver ff_" #name "," EXTERN_PREFIX #name "@" ver); \ -- type ff_##name args; \ -- type ff_##name args --#endif -- --/** -- * Return NULL if a threading library has not been enabled. -- * Used to disable threading functions in AVCodec definitions -- * when not needed. -- */ --#if HAVE_THREADS --# define ONLY_IF_THREADS_ENABLED(x) x --#else --# define ONLY_IF_THREADS_ENABLED(x) NULL --#endif -- --/** - * Log a generic warning message about a missing feature. - * - * @param[in] avc a pointer to an arbitrary struct of which the first -@@ -184,8 +143,6 @@ - #pragma comment(linker, "/include:" EXTERN_PREFIX "avpriv_snprintf") - #endif - --#define avpriv_open ff_open --#define avpriv_tempfile ff_tempfile - #define PTRDIFF_SPECIFIER "Id" - #define SIZE_SPECIFIER "Iu" - #else -@@ -199,6 +156,12 @@ - # define ff_dlog(ctx, ...) do { if (0) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) - #endif - -+#ifdef TRACE -+# define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__) -+#else -+# define ff_tlog(ctx, ...) do { } while(0) -+#endif -+ - // For debuging we use signed operations so overflows can be detected (by ubsan) - // For production we use unsigned so there are no undefined operations - #ifdef CHECKED -@@ -209,61 +172,6 @@ - #define SUINT32 uint32_t - #endif - --/** -- * Clip and convert a double value into the long long amin-amax range. -- * This function is needed because conversion of floating point to integers when -- * it does not fit in the integer's representation does not necessarily saturate -- * correctly (usually converted to a cvttsd2si on x86) which saturates numbers -- * > INT64_MAX to INT64_MIN. The standard marks such conversions as undefined -- * behavior, allowing this sort of mathematically bogus conversions. This provides -- * a safe alternative that is slower obviously but assures safety and better -- * mathematical behavior. -- * @param a value to clip -- * @param amin minimum value of the clip range -- * @param amax maximum value of the clip range -- * @return clipped value -- */ --static av_always_inline av_const int64_t ff_rint64_clip(double a, int64_t amin, int64_t amax) --{ -- int64_t res; --#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -- if (amin > amax) abort(); --#endif -- // INT64_MAX+1,INT64_MIN are exactly representable as IEEE doubles -- // do range checks first -- if (a >= 9223372036854775808.0) -- return amax; -- if (a <= -9223372036854775808.0) -- return amin; -- -- // safe to call llrint and clip accordingly -- res = llrint(a); -- if (res > amax) -- return amax; -- if (res < amin) -- return amin; -- return res; --} -- --/** -- * A wrapper for open() setting O_CLOEXEC. -- */ --av_warn_unused_result --int avpriv_open(const char *filename, int flags, ...); -- --/** -- * Wrapper to work around the lack of mkstemp() on mingw. -- * Also, tries to create file in /tmp first, if possible. -- * *prefix can be a character constant; *filename will be allocated internally. -- * @return file descriptor of opened file (or negative value corresponding to an -- * AVERROR code on error) -- * and opened file name in **filename. -- * @note On very old libcs it is necessary to set a secure umask before -- * calling this, av_tempfile() can't call umask itself as it is used in -- * libraries and could interfere with the calling application. -- */ --int avpriv_tempfile(const char *prefix, char **filename, int log_offset, void *log_ctx); -- - int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt); - - static av_always_inline av_const int avpriv_mirror(int x, int w) -@@ -279,33 +187,4 @@ - return x; - } - --void ff_check_pixfmt_descriptors(void); -- --/** -- * Set a dictionary value to an ISO-8601 compliant timestamp string. -- * -- * @param dict pointer to a pointer to a dictionary struct. If *dict is NULL -- * a dictionary struct is allocated and put in *dict. -- * @param key metadata key -- * @param timestamp unix timestamp in microseconds -- * @return <0 on error -- */ --int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp); -- --// Helper macro for AV_PIX_FMT_FLAG_PSEUDOPAL deprecation. Code inside FFmpeg --// should always use FF_PSEUDOPAL. Once the public API flag gets removed, all --// code using it is dead code. --#if FF_API_PSEUDOPAL --#define FF_PSEUDOPAL AV_PIX_FMT_FLAG_PSEUDOPAL --#else --#define FF_PSEUDOPAL 0 --#endif -- --// Temporary typedef to simplify porting all AVBufferRef users to size_t --#if FF_API_BUFFER_SIZE_T --typedef int buffer_size_t; --#else --typedef size_t buffer_size_t; --#endif -- - #endif /* AVUTIL_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavutil/intmath.h b/media/ffvpx/libavutil/intmath.h ---- a/media/ffvpx/libavutil/intmath.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/intmath.h 2023-04-06 12:50:06.976471255 +0200 -@@ -28,8 +28,9 @@ - - #if ARCH_ARM - # include "arm/intmath.h" --#endif --#if ARCH_X86 -+#elif ARCH_RISCV -+# include "riscv/intmath.h" -+#elif ARCH_X86 - # include "x86/intmath.h" - #endif - -diff -Naur a/media/ffvpx/libavutil/lls.c b/media/ffvpx/libavutil/lls.c ---- a/media/ffvpx/libavutil/lls.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/lls.c 2023-04-06 12:49:40.261395212 +0200 -@@ -28,9 +28,8 @@ - #include - #include - -+#include "config.h" - #include "attributes.h" --#include "internal.h" --#include "version.h" - #include "lls.h" - - static void update_lls(LLSModel *m, const double *var) -@@ -118,6 +117,7 @@ - m->indep_count = indep_count; - m->update_lls = update_lls; - m->evaluate_lls = evaluate_lls; -- if (ARCH_X86) -- ff_init_lls_x86(m); -+#if ARCH_X86 -+ ff_init_lls_x86(m); -+#endif - } -diff -Naur a/media/ffvpx/libavutil/lls.h b/media/ffvpx/libavutil/lls.h ---- a/media/ffvpx/libavutil/lls.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/lls.h 2023-04-06 12:49:40.261395212 +0200 -@@ -25,7 +25,6 @@ - - #include "macros.h" - #include "mem_internal.h" --#include "version.h" - - #define MAX_VARS 32 - #define MAX_VARS_ALIGN FFALIGN(MAX_VARS+1,4) -diff -Naur a/media/ffvpx/libavutil/log.c b/media/ffvpx/libavutil/log.c ---- a/media/ffvpx/libavutil/log.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/log.c 2023-04-06 12:49:40.261395212 +0200 -@@ -32,9 +32,11 @@ - #if HAVE_IO_H - #include - #endif -+#include - #include -+#include - #include --#include "avutil.h" -+#include - #include "bprint.h" - #include "common.h" - #include "internal.h" -diff -Naur a/media/ffvpx/libavutil/log.h b/media/ffvpx/libavutil/log.h ---- a/media/ffvpx/libavutil/log.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/log.h 2023-04-06 12:49:40.261395212 +0200 -@@ -22,7 +22,6 @@ - #define AVUTIL_LOG_H - - #include --#include "avutil.h" - #include "attributes.h" - #include "version.h" - -@@ -108,24 +107,6 @@ - int parent_log_context_offset; - - /** -- * Return next AVOptions-enabled child or NULL -- */ -- void* (*child_next)(void *obj, void *prev); -- --#if FF_API_CHILD_CLASS_NEXT -- /** -- * Return an AVClass corresponding to the next potential -- * AVOptions-enabled child. -- * -- * The difference between child_next and this is that -- * child_next iterates over _already existing_ objects, while -- * child_class_next iterates over _all possible_ children. -- */ -- attribute_deprecated -- const struct AVClass* (*child_class_next)(const struct AVClass *prev); --#endif -- -- /** - * Category used for visualization (like color) - * This is only set if the category is equal for all objects using this class. - * available since version (51 << 16 | 56 << 8 | 100) -@@ -145,6 +126,11 @@ - int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags); - - /** -+ * Return next AVOptions-enabled child or NULL -+ */ -+ void* (*child_next)(void *obj, void *prev); -+ -+ /** - * Iterate over the AVClasses corresponding to potential AVOptions-enabled - * children. - * -diff -Naur a/media/ffvpx/libavutil/macros.h b/media/ffvpx/libavutil/macros.h ---- a/media/ffvpx/libavutil/macros.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/macros.h 2023-04-06 12:49:40.261395212 +0200 -@@ -25,6 +25,36 @@ - #ifndef AVUTIL_MACROS_H - #define AVUTIL_MACROS_H - -+#include "libavutil/avconfig.h" -+ -+#if AV_HAVE_BIGENDIAN -+# define AV_NE(be, le) (be) -+#else -+# define AV_NE(be, le) (le) -+#endif -+ -+/** -+ * Comparator. -+ * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0 -+ * if x == y. This is useful for instance in a qsort comparator callback. -+ * Furthermore, compilers are able to optimize this to branchless code, and -+ * there is no risk of overflow with signed types. -+ * As with many macros, this evaluates its argument multiple times, it thus -+ * must not have a side-effect. -+ */ -+#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y))) -+ -+#define FFMAX(a,b) ((a) > (b) ? (a) : (b)) -+#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c) -+#define FFMIN(a,b) ((a) > (b) ? (b) : (a)) -+#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c) -+ -+#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0) -+#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0])) -+ -+#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24)) -+#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24)) -+ - /** - * @addtogroup preproc_misc Preprocessor String Macros - * -diff -Naur a/media/ffvpx/libavutil/mathematics.c b/media/ffvpx/libavutil/mathematics.c ---- a/media/ffvpx/libavutil/mathematics.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/mathematics.c 2023-04-06 12:49:40.261395212 +0200 -@@ -26,11 +26,11 @@ - #include - #include - -+#include "avutil.h" - #include "mathematics.h" - #include "libavutil/intmath.h" - #include "libavutil/common.h" - #include "avassert.h" --#include "version.h" - - /* Stein's binary GCD algorithm: - * https://en.wikipedia.org/wiki/Binary_GCD_algorithm */ -diff -Naur a/media/ffvpx/libavutil/mathematics.h b/media/ffvpx/libavutil/mathematics.h ---- a/media/ffvpx/libavutil/mathematics.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/mathematics.h 2023-04-06 12:50:06.976471255 +0200 -@@ -111,7 +111,8 @@ - /** - * Compute the greatest common divisor of two integer operands. - * -- * @param a,b Operands -+ * @param a Operand -+ * @param b Operand - * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; - * if a == 0 and b == 0, returns 0. - */ -@@ -186,7 +187,8 @@ - * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) - * @endcode - * -- * @param a,b Operands -+ * @param a Operand -+ * @param b Operand - * @param mod Divisor; must be a power of 2 - * @return - * - a negative value if `a % mod < b % mod` -diff -Naur a/media/ffvpx/libavutil/mem.c b/media/ffvpx/libavutil/mem.c ---- a/media/ffvpx/libavutil/mem.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/mem.c 2023-04-06 12:50:24.494176623 +0200 -@@ -31,16 +31,19 @@ - #include - #include - #include -+#include - #include - #if HAVE_MALLOC_H - #include - #endif - -+#include "attributes.h" - #include "avassert.h" --#include "avutil.h" --#include "common.h" - #include "dynarray.h" -+#include "error.h" -+#include "internal.h" - #include "intreadwrite.h" -+#include "macros.h" - #include "mem.h" - - #ifdef MALLOC_PREFIX -@@ -59,8 +62,6 @@ - - #endif /* MALLOC_PREFIX */ - --#include "mem_internal.h" -- - #define ALIGN (HAVE_AVX512 ? 64 : (HAVE_AVX ? 32 : 16)) - - /* NOTE: if you want to override these functions with your own -@@ -68,17 +69,35 @@ - * dynamic libraries and remove -Wl,-Bsymbolic from the linker flags. - * Note that this will cost performance. */ - --static size_t max_alloc_size= INT_MAX; -+static atomic_size_t max_alloc_size = ATOMIC_VAR_INIT(INT_MAX); - - void av_max_alloc(size_t max){ -- max_alloc_size = max; -+ atomic_store_explicit(&max_alloc_size, max, memory_order_relaxed); -+} -+ -+static int size_mult(size_t a, size_t b, size_t *r) -+{ -+ size_t t; -+ -+#if (!defined(__INTEL_COMPILER) && AV_GCC_VERSION_AT_LEAST(5,1)) || AV_HAS_BUILTIN(__builtin_mul_overflow) -+ if (__builtin_mul_overflow(a, b, &t)) -+ return AVERROR(EINVAL); -+#else -+ t = a * b; -+ /* Hack inspired from glibc: don't try the division if nelem and elsize -+ * are both less than sqrt(SIZE_MAX). */ -+ if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) -+ return AVERROR(EINVAL); -+#endif -+ *r = t; -+ return 0; - } - - void *av_malloc(size_t size) - { - void *ptr = NULL; - -- if (size > max_alloc_size) -+ if (size > atomic_load_explicit(&max_alloc_size, memory_order_relaxed)) - return NULL; - - #if HAVE_POSIX_MEMALIGN -@@ -133,14 +152,20 @@ - - void *av_realloc(void *ptr, size_t size) - { -- if (size > max_alloc_size) -+ void *ret; -+ if (size > atomic_load_explicit(&max_alloc_size, memory_order_relaxed)) - return NULL; - - #if HAVE_ALIGNED_MALLOC -- return _aligned_realloc(ptr, size + !size, ALIGN); -+ ret = _aligned_realloc(ptr, size + !size, ALIGN); - #else -- return realloc(ptr, size + !size); -+ ret = realloc(ptr, size + !size); -+#endif -+#if CONFIG_MEMORY_POISONING -+ if (ret && !ptr) -+ memset(ret, FF_MEMORY_POISON, size); - #endif -+ return ret; - } - - void *av_realloc_f(void *ptr, size_t nelem, size_t elsize) -@@ -148,7 +173,7 @@ - size_t size; - void *r; - -- if (av_size_mult(elsize, nelem, &size)) { -+ if (size_mult(elsize, nelem, &size)) { - av_free(ptr); - return NULL; - } -@@ -182,23 +207,15 @@ - void *av_malloc_array(size_t nmemb, size_t size) - { - size_t result; -- if (av_size_mult(nmemb, size, &result) < 0) -+ if (size_mult(nmemb, size, &result) < 0) - return NULL; - return av_malloc(result); - } - --void *av_mallocz_array(size_t nmemb, size_t size) --{ -- size_t result; -- if (av_size_mult(nmemb, size, &result) < 0) -- return NULL; -- return av_mallocz(result); --} -- - void *av_realloc_array(void *ptr, size_t nmemb, size_t size) - { - size_t result; -- if (av_size_mult(nmemb, size, &result) < 0) -+ if (size_mult(nmemb, size, &result) < 0) - return NULL; - return av_realloc(ptr, result); - } -@@ -245,7 +262,7 @@ - void *av_calloc(size_t nmemb, size_t size) - { - size_t result; -- if (av_size_mult(nmemb, size, &result) < 0) -+ if (size_mult(nmemb, size, &result) < 0) - return NULL; - return av_mallocz(result); - } -@@ -477,15 +494,21 @@ - - void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size) - { -+ size_t max_size; -+ - if (min_size <= *size) - return ptr; - -- if (min_size > max_alloc_size) { -+ max_size = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); -+ /* *size is an unsigned, so the real maximum is <= UINT_MAX. */ -+ max_size = FFMIN(max_size, UINT_MAX); -+ -+ if (min_size > max_size) { - *size = 0; - return NULL; - } - -- min_size = FFMIN(max_alloc_size, FFMAX(min_size + min_size / 16 + 32, min_size)); -+ min_size = FFMIN(max_size, FFMAX(min_size + min_size / 16 + 32, min_size)); - - ptr = av_realloc(ptr, min_size); - /* we could set this to the unmodified min_size but this is safer -@@ -499,12 +522,47 @@ - return ptr; - } - -+static inline void fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc) -+{ -+ size_t max_size; -+ void *val; -+ -+ memcpy(&val, ptr, sizeof(val)); -+ if (min_size <= *size) { -+ av_assert0(val || !min_size); -+ return; -+ } -+ -+ max_size = atomic_load_explicit(&max_alloc_size, memory_order_relaxed); -+ /* *size is an unsigned, so the real maximum is <= UINT_MAX. */ -+ max_size = FFMIN(max_size, UINT_MAX); -+ -+ if (min_size > max_size) { -+ av_freep(ptr); -+ *size = 0; -+ return; -+ } -+ min_size = FFMIN(max_size, FFMAX(min_size + min_size / 16 + 32, min_size)); -+ av_freep(ptr); -+ val = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size); -+ memcpy(ptr, &val, sizeof(val)); -+ if (!val) -+ min_size = 0; -+ *size = min_size; -+ return; -+} -+ - void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size) - { -- ff_fast_malloc(ptr, size, min_size, 0); -+ fast_malloc(ptr, size, min_size, 0); - } - - void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size) - { -- ff_fast_malloc(ptr, size, min_size, 1); -+ fast_malloc(ptr, size, min_size, 1); -+} -+ -+int av_size_mult(size_t a, size_t b, size_t *r) -+{ -+ return size_mult(a, b, r); - } -diff -Naur a/media/ffvpx/libavutil/mem.h b/media/ffvpx/libavutil/mem.h ---- a/media/ffvpx/libavutil/mem.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/mem.h 2023-04-06 12:50:24.494176623 +0200 -@@ -31,7 +31,6 @@ - #include - - #include "attributes.h" --#include "error.h" - #include "avutil.h" - #include "version.h" - -@@ -52,86 +51,6 @@ - * @{ - */ - --#if FF_API_DECLARE_ALIGNED --/** -- * -- * @defgroup lavu_mem_macros Alignment Macros -- * Helper macros for declaring aligned variables. -- * @{ -- */ -- --/** -- * @def DECLARE_ALIGNED(n,t,v) -- * Declare a variable that is aligned in memory. -- * -- * @code{.c} -- * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42; -- * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128]; -- * -- * // The default-alignment equivalent would be -- * uint16_t aligned_int = 42; -- * uint8_t aligned_array[128]; -- * @endcode -- * -- * @param n Minimum alignment in bytes -- * @param t Type of the variable (or array element) -- * @param v Name of the variable -- */ -- --/** -- * @def DECLARE_ASM_ALIGNED(n,t,v) -- * Declare an aligned variable appropriate for use in inline assembly code. -- * -- * @code{.c} -- * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); -- * @endcode -- * -- * @param n Minimum alignment in bytes -- * @param t Type of the variable (or array element) -- * @param v Name of the variable -- */ -- --/** -- * @def DECLARE_ASM_CONST(n,t,v) -- * Declare a static constant aligned variable appropriate for use in inline -- * assembly code. -- * -- * @code{.c} -- * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008); -- * @endcode -- * -- * @param n Minimum alignment in bytes -- * @param t Type of the variable (or array element) -- * @param v Name of the variable -- */ -- --#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C) -- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v -- #define DECLARE_ASM_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v -- #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v --#elif defined(__DJGPP__) -- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v -- #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v -- #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v --#elif defined(__GNUC__) || defined(__clang__) -- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v -- #define DECLARE_ASM_ALIGNED(n,t,v) t av_used __attribute__ ((aligned (n))) v -- #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v --#elif defined(_MSC_VER) -- #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v -- #define DECLARE_ASM_ALIGNED(n,t,v) __declspec(align(n)) t v -- #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v --#else -- #define DECLARE_ALIGNED(n,t,v) t v -- #define DECLARE_ASM_ALIGNED(n,t,v) t v -- #define DECLARE_ASM_CONST(n,t,v) static const t v --#endif -- --/** -- * @} -- */ --#endif -- - /** - * @defgroup lavu_mem_attrs Function Attributes - * Function attributes applicable to memory handling functions. -@@ -238,20 +157,12 @@ - * @see av_mallocz() - * @see av_malloc_array() - */ --av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size); -- --/** -- * Non-inlined equivalent of av_mallocz_array(). -- * -- * Created for symmetry with the calloc() C function. -- */ --void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib; -+void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib av_alloc_size(1, 2); - - /** - * Allocate, reallocate, or free a block of memory. - * -- * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is -- * zero, free the memory block pointed to by `ptr`. Otherwise, expand or -+ * If `ptr` is `NULL` and `size` > 0, allocate a new block. Otherwise, expand or - * shrink that block of memory according to `size`. - * - * @param ptr Pointer to a memory block already allocated with -@@ -260,10 +171,11 @@ - * reallocated - * - * @return Pointer to a newly-reallocated block or `NULL` if the block -- * cannot be reallocated or the function is used to free the memory block -+ * cannot be reallocated - * - * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be -- * correctly aligned. -+ * correctly aligned. The returned pointer must be freed after even -+ * if size is zero. - * @see av_fast_realloc() - * @see av_reallocp() - */ -@@ -311,8 +223,7 @@ - /** - * Allocate, reallocate, or free an array. - * -- * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If -- * `nmemb` is zero, free the memory block pointed to by `ptr`. -+ * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. - * - * @param ptr Pointer to a memory block already allocated with - * av_realloc() or `NULL` -@@ -320,19 +231,19 @@ - * @param size Size of the single element of the array - * - * @return Pointer to a newly-reallocated block or NULL if the block -- * cannot be reallocated or the function is used to free the memory block -+ * cannot be reallocated - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be -- * correctly aligned. -+ * correctly aligned. The returned pointer must be freed after even if -+ * nmemb is zero. - * @see av_reallocp_array() - */ - av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size); - - /** -- * Allocate, reallocate, or free an array through a pointer to a pointer. -+ * Allocate, reallocate an array through a pointer to a pointer. - * -- * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is -- * zero, free the memory block pointed to by `*ptr`. -+ * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. - * - * @param[in,out] ptr Pointer to a pointer to a memory block already - * allocated with av_realloc(), or a pointer to `NULL`. -@@ -343,7 +254,7 @@ - * @return Zero on success, an AVERROR error code on failure - * - * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be -- * correctly aligned. -+ * correctly aligned. *ptr must be freed after even if nmemb is zero. - */ - int av_reallocp_array(void *ptr, size_t nmemb, size_t size); - -@@ -668,20 +579,12 @@ - /** - * Multiply two `size_t` values checking for overflow. - * -- * @param[in] a,b Operands of multiplication -+ * @param[in] a Operand of multiplication -+ * @param[in] b Operand of multiplication - * @param[out] r Pointer to the result of the operation - * @return 0 on success, AVERROR(EINVAL) on overflow - */ --static inline int av_size_mult(size_t a, size_t b, size_t *r) --{ -- size_t t = a * b; -- /* Hack inspired from glibc: don't try the division if nelem and elsize -- * are both less than sqrt(SIZE_MAX). */ -- if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) -- return AVERROR(EINVAL); -- *r = t; -- return 0; --} -+int av_size_mult(size_t a, size_t b, size_t *r); - - /** - * Set the maximum size that may be allocated in one block. -diff -Naur a/media/ffvpx/libavutil/mem_internal.h b/media/ffvpx/libavutil/mem_internal.h ---- a/media/ffvpx/libavutil/mem_internal.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/mem_internal.h 2023-04-06 12:50:24.494176623 +0200 -@@ -25,11 +25,11 @@ - - #include - --#include "avassert.h" -+#include "attributes.h" -+#include "macros.h" - #include "mem.h" - #include "version.h" - --#if !FF_API_DECLARE_ALIGNED - /** - * @def DECLARE_ALIGNED(n,t,v) - * Declare a variable that is aligned in memory. -@@ -96,7 +96,6 @@ - #define DECLARE_ASM_ALIGNED(n,t,v) t v - #define DECLARE_ASM_CONST(n,t,v) static const t v - #endif --#endif - - // Some broken preprocessors need a second expansion - // to be forced to tokenize __VA_ARGS__ -@@ -136,22 +135,4 @@ - # define LOCAL_ALIGNED_32(t, v, ...) E1(LOCAL_ALIGNED_A(32, t, v, __VA_ARGS__,,)) - #endif - --static inline int ff_fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc) --{ -- void *val; -- -- memcpy(&val, ptr, sizeof(val)); -- if (min_size <= *size) { -- av_assert0(val || !min_size); -- return 0; -- } -- min_size = FFMAX(min_size + min_size / 16 + 32, min_size); -- av_freep(ptr); -- val = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size); -- memcpy(ptr, &val, sizeof(val)); -- if (!val) -- min_size = 0; -- *size = min_size; -- return 1; --} - #endif /* AVUTIL_MEM_INTERNAL_H */ -diff -Naur a/media/ffvpx/libavutil/moz.build b/media/ffvpx/libavutil/moz.build ---- a/media/ffvpx/libavutil/moz.build 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/moz.build 2023-04-06 12:49:40.261395212 +0200 -@@ -11,11 +11,13 @@ - DIRS += ['x86'] - elif CONFIG['CPU_ARCH'] == 'arm': - DIRS += ['arm'] -- elif CONFIG['CPU_ARCH'] == 'aarch64': -- DIRS += ['aarch64'] -+ -+if CONFIG['CPU_ARCH'] == 'aarch64': -+ DIRS += ['aarch64'] - - SharedLibrary('mozavutil') - SOURCES += [ -+ 'avsscanf.c', - 'avstring.c', - 'bprint.c', - 'buffer.c', -@@ -45,6 +47,7 @@ - 'time.c', - 'utils.c' - ] -+ - if not CONFIG['MOZ_FFVPX_AUDIOONLY']: - SOURCES += [ - 'adler32.c', -@@ -54,6 +57,7 @@ - 'integer.c', - 'intmath.c', - 'lls.c', -+ 'mastering_display_metadata.c', - 'pixelutils.c', - 'threadmessage.c', - 'timecode.c', -@@ -63,7 +67,6 @@ - LOCAL_INCLUDES += ['/media/mozva'] - SOURCES += [ - 'hwcontext_vaapi.c', -- 'mastering_display_metadata.c', - ] - USE_LIBS += ['mozva'] - -diff -Naur a/media/ffvpx/libavutil/opt.c b/media/ffvpx/libavutil/opt.c ---- a/media/ffvpx/libavutil/opt.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/opt.c 2023-04-06 12:50:24.494176623 +0200 -@@ -39,6 +39,7 @@ - #include "opt.h" - #include "samplefmt.h" - #include "bprint.h" -+#include "version.h" - - #include - -@@ -71,7 +72,11 @@ - case AV_OPT_TYPE_INT: - *intnum = *(int *)dst; - return 0; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - case AV_OPT_TYPE_DURATION: - case AV_OPT_TYPE_INT64: - case AV_OPT_TYPE_UINT64: -@@ -126,7 +131,11 @@ - *(int *)dst = llrint(num / den) * intnum; - break; - case AV_OPT_TYPE_DURATION: -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - case AV_OPT_TYPE_INT64:{ - double d = num / den; - if (intnum == 1 && d == (double)INT64_MAX) { -@@ -262,9 +271,12 @@ - const char * const_names[64]; - int search_flags = (o->flags & AV_OPT_FLAG_CHILD_CONSTS) ? AV_OPT_SEARCH_CHILDREN : 0; - const AVOption *o_named = av_opt_find(target_obj, i ? buf : val, o->unit, 0, search_flags); -- if (o_named && o_named->type == AV_OPT_TYPE_CONST) -+ if (o_named && o_named->type == AV_OPT_TYPE_CONST) { - d = DEFAULT_NUMVAL(o_named); -- else { -+ if (o_named->flags & AV_OPT_FLAG_DEPRECATED) -+ av_log(obj, AV_LOG_WARNING, "The \"%s\" option is deprecated: %s\n", -+ o_named->name, o_named->help); -+ } else { - if (o->unit) { - for (o_named = NULL; o_named = av_opt_next(target_obj, o_named); ) { - if (o_named->type == AV_OPT_TYPE_CONST && -@@ -462,6 +474,16 @@ - return 0; - } - -+static int set_string_channel_layout(void *obj, const AVOption *o, -+ const char *val, void *dst) -+{ -+ AVChannelLayout *channel_layout = dst; -+ av_channel_layout_uninit(channel_layout); -+ if (!val) -+ return 0; -+ return av_channel_layout_from_string(channel_layout, val); -+} -+ - int av_opt_set(void *obj, const char *name, const char *val, int search_flags) - { - int ret = 0; -@@ -469,12 +491,17 @@ - const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); - if (!o || !target_obj) - return AVERROR_OPTION_NOT_FOUND; -+FF_DISABLE_DEPRECATION_WARNINGS - if (!val && (o->type != AV_OPT_TYPE_STRING && - o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT && - o->type != AV_OPT_TYPE_IMAGE_SIZE && - o->type != AV_OPT_TYPE_DURATION && o->type != AV_OPT_TYPE_COLOR && -- o->type != AV_OPT_TYPE_CHANNEL_LAYOUT && o->type != AV_OPT_TYPE_BOOL)) -+#if FF_API_OLD_CHANNEL_LAYOUT -+ o->type != AV_OPT_TYPE_CHANNEL_LAYOUT && -+#endif -+ o->type != AV_OPT_TYPE_BOOL)) - return AVERROR(EINVAL); -+FF_ENABLE_DEPRECATION_WARNINGS - - if (o->flags & AV_OPT_FLAG_READONLY) - return AVERROR(EINVAL); -@@ -530,6 +557,8 @@ - } - case AV_OPT_TYPE_COLOR: - return set_string_color(obj, o, val, dst); -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: - if (!val || !strcmp(val, "none")) { - *(int64_t *)dst = 0; -@@ -543,6 +572,15 @@ - return ret; - } - break; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ case AV_OPT_TYPE_CHLAYOUT: -+ ret = set_string_channel_layout(obj, o, val, dst); -+ if (ret < 0) { -+ av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as channel layout\n", val); -+ ret = AVERROR(EINVAL); -+ } -+ return ret; - case AV_OPT_TYPE_DICT: - return set_string_dict(obj, o, val, dst); - } -@@ -706,6 +744,8 @@ - return set_format(obj, name, fmt, search_flags, AV_OPT_TYPE_SAMPLE_FMT, "sample", AV_SAMPLE_FMT_NB); - } - -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - int av_opt_set_channel_layout(void *obj, const char *name, int64_t cl, int search_flags) - { - void *target_obj; -@@ -721,6 +761,8 @@ - *(int64_t *)(((uint8_t *)target_obj) + o->offset) = cl; - return 0; - } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - - int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, - int search_flags) -@@ -741,6 +783,22 @@ - return 0; - } - -+int av_opt_set_chlayout(void *obj, const char *name, -+ const AVChannelLayout *channel_layout, -+ int search_flags) -+{ -+ void *target_obj; -+ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); -+ AVChannelLayout *dst; -+ -+ if (!o || !target_obj) -+ return AVERROR_OPTION_NOT_FOUND; -+ -+ dst = (AVChannelLayout*)((uint8_t*)target_obj + o->offset); -+ -+ return av_channel_layout_copy(dst, channel_layout); -+} -+ - static void format_duration(char *buf, size_t size, int64_t d) - { - char *e; -@@ -869,10 +927,18 @@ - (int)((uint8_t *)dst)[0], (int)((uint8_t *)dst)[1], - (int)((uint8_t *)dst)[2], (int)((uint8_t *)dst)[3]); - break; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+ - i64 = *(int64_t *)dst; - ret = snprintf(buf, sizeof(buf), "0x%"PRIx64, i64); - break; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ case AV_OPT_TYPE_CHLAYOUT: -+ ret = av_channel_layout_describe(dst, buf, sizeof(buf)); -+ break; - case AV_OPT_TYPE_DICT: - if (!*(AVDictionary **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { - *out_val = NULL; -@@ -917,7 +983,10 @@ - - if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) - return ret; -- *out_val = num * intnum / den; -+ if (num == den) -+ *out_val = intnum; -+ else -+ *out_val = num * intnum / den; - return 0; - } - -@@ -1011,6 +1080,8 @@ - return get_format(obj, name, search_flags, out_fmt, AV_OPT_TYPE_SAMPLE_FMT, "sample"); - } - -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *cl) - { - void *dst, *target_obj; -@@ -1027,6 +1098,24 @@ - *cl = *(int64_t *)dst; - return 0; - } -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif -+ -+int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *cl) -+{ -+ void *dst, *target_obj; -+ const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); -+ if (!o || !target_obj) -+ return AVERROR_OPTION_NOT_FOUND; -+ if (o->type != AV_OPT_TYPE_CHLAYOUT) { -+ av_log(obj, AV_LOG_ERROR, -+ "The value for option '%s' is not a channel layout.\n", name); -+ return AVERROR(EINVAL); -+ } -+ -+ dst = ((uint8_t*)target_obj) + o->offset; -+ return av_channel_layout_copy(cl, dst); -+} - - int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val) - { -@@ -1167,7 +1256,7 @@ - av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name); - else - av_log(av_log_obj, AV_LOG_INFO, " %s%-17s ", -- (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? "" : "-", -+ (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? " " : "-", - opt->name); - - switch (opt->type) { -@@ -1219,7 +1308,12 @@ - case AV_OPT_TYPE_COLOR: - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; -+ case AV_OPT_TYPE_CHLAYOUT: -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - case AV_OPT_TYPE_BOOL: -@@ -1235,17 +1329,18 @@ - av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); - break; - } -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_FILTERING_PARAM)? 'F' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.'); -- av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.'); -+ av_log(av_log_obj, AV_LOG_INFO, "%c%c%c%c%c%c%c%c%c%c%c", -+ (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.', -+ (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.', -+ (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? 'F' : '.', -+ (opt->flags & AV_OPT_FLAG_VIDEO_PARAM) ? 'V' : '.', -+ (opt->flags & AV_OPT_FLAG_AUDIO_PARAM) ? 'A' : '.', -+ (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.', -+ (opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.', -+ (opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.', -+ (opt->flags & AV_OPT_FLAG_BSF_PARAM) ? 'B' : '.', -+ (opt->flags & AV_OPT_FLAG_RUNTIME_PARAM) ? 'T' : '.', -+ (opt->flags & AV_OPT_FLAG_DEPRECATED) ? 'P' : '.'); - - if (opt->help) - av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); -@@ -1276,6 +1371,7 @@ - opt->type == AV_OPT_TYPE_IMAGE_SIZE || - opt->type == AV_OPT_TYPE_STRING || - opt->type == AV_OPT_TYPE_DICT || -+ opt->type == AV_OPT_TYPE_CHLAYOUT || - opt->type == AV_OPT_TYPE_VIDEO_RATE) && - !opt->default_val.str)) { - av_log(av_log_obj, AV_LOG_INFO, " (default "); -@@ -1328,11 +1424,16 @@ - case AV_OPT_TYPE_STRING: - case AV_OPT_TYPE_DICT: - case AV_OPT_TYPE_VIDEO_RATE: -+ case AV_OPT_TYPE_CHLAYOUT: - av_log(av_log_obj, AV_LOG_INFO, "\"%s\"", opt->default_val.str); - break; -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: - av_log(av_log_obj, AV_LOG_INFO, "0x%"PRIx64, opt->default_val.i64); - break; -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - } - av_log(av_log_obj, AV_LOG_INFO, ")"); - } -@@ -1382,7 +1483,11 @@ - case AV_OPT_TYPE_INT64: - case AV_OPT_TYPE_UINT64: - case AV_OPT_TYPE_DURATION: -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - case AV_OPT_TYPE_PIXEL_FMT: - case AV_OPT_TYPE_SAMPLE_FMT: - write_number(s, opt, dst, 1, 1, opt->default_val.i64); -@@ -1415,6 +1520,9 @@ - case AV_OPT_TYPE_BINARY: - set_string_binary(s, opt, opt->default_val.str, dst); - break; -+ case AV_OPT_TYPE_CHLAYOUT: -+ set_string_channel_layout(s, opt, opt->default_val.str, dst); -+ break; - case AV_OPT_TYPE_DICT: - set_string_dict(s, opt, opt->default_val.str, dst); - break; -@@ -1622,6 +1730,10 @@ - av_dict_free((AVDictionary **)(((uint8_t *)obj) + o->offset)); - break; - -+ case AV_OPT_TYPE_CHLAYOUT: -+ av_channel_layout_uninit((AVChannelLayout *)(((uint8_t *)obj) + o->offset)); -+ break; -+ - default: - break; - } -@@ -1630,27 +1742,26 @@ - - int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags) - { -- AVDictionaryEntry *t = NULL; -+ const AVDictionaryEntry *t = NULL; - AVDictionary *tmp = NULL; -- int ret = 0; -+ int ret; - - if (!options) - return 0; - -- while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) { -+ while ((t = av_dict_iterate(*options, t))) { - ret = av_opt_set(obj, t->key, t->value, search_flags); - if (ret == AVERROR_OPTION_NOT_FOUND) -- ret = av_dict_set(&tmp, t->key, t->value, 0); -+ ret = av_dict_set(&tmp, t->key, t->value, AV_DICT_MULTIKEY); - if (ret < 0) { - av_log(obj, AV_LOG_ERROR, "Error setting option %s to value %s.\n", t->key, t->value); - av_dict_free(&tmp); - return ret; - } -- ret = 0; - } - av_dict_free(options); - *options = tmp; -- return ret; -+ return 0; - } - - int av_opt_set_dict(void *obj, AVDictionary **options) -@@ -1717,29 +1828,10 @@ - return NULL; - } - --#if FF_API_CHILD_CLASS_NEXT --FF_DISABLE_DEPRECATION_WARNINGS --const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev) --{ -- if (parent->child_class_next) -- return parent->child_class_next(prev); -- return NULL; --} --FF_ENABLE_DEPRECATION_WARNINGS --#endif -- - const AVClass *av_opt_child_class_iterate(const AVClass *parent, void **iter) - { - if (parent->child_class_iterate) - return parent->child_class_iterate(iter); --#if FF_API_CHILD_CLASS_NEXT --FF_DISABLE_DEPRECATION_WARNINGS -- if (parent->child_class_next) { -- *iter = parent->child_class_next(*iter); -- return *iter; -- } --FF_ENABLE_DEPRECATION_WARNINGS --#endif - return NULL; - } - -@@ -1759,7 +1851,11 @@ - case AV_OPT_TYPE_FLAGS: - return sizeof(int); - case AV_OPT_TYPE_DURATION: -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - case AV_OPT_TYPE_INT64: - case AV_OPT_TYPE_UINT64: - return sizeof(int64_t); -@@ -1826,12 +1922,16 @@ - } else if (o->type == AV_OPT_TYPE_DICT) { - AVDictionary **sdict = (AVDictionary **) field_src; - AVDictionary **ddict = (AVDictionary **) field_dst; -+ int ret2; - if (*sdict != *ddict) - av_dict_free(ddict); - *ddict = NULL; -- av_dict_copy(ddict, *sdict, 0); -- if (av_dict_count(*sdict) != av_dict_count(*ddict)) -- ret = AVERROR(ENOMEM); -+ ret2 = av_dict_copy(ddict, *sdict, 0); -+ if (ret2 < 0) -+ ret = ret2; -+ } else if (o->type == AV_OPT_TYPE_CHLAYOUT) { -+ if (field_dst != field_src) -+ ret = av_channel_layout_copy(field_dst, field_src); - } else { - int size = opt_size(o->type); - if (size < 0) -@@ -1847,10 +1947,7 @@ - { - int ret; - const AVClass *c = *(AVClass**)obj; -- int (*callback)(AVOptionRanges **, void *obj, const char *key, int flags) = NULL; -- -- if (c->version > (52 << 16 | 11 << 8)) -- callback = c->query_ranges; -+ int (*callback)(AVOptionRanges **, void *obj, const char *key, int flags) = c->query_ranges; - - if (!callback) - callback = av_opt_query_ranges_default; -@@ -1898,7 +1995,11 @@ - case AV_OPT_TYPE_DOUBLE: - case AV_OPT_TYPE_DURATION: - case AV_OPT_TYPE_COLOR: -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - break; - case AV_OPT_TYPE_STRING: - range->component_min = 0; -@@ -1978,12 +2079,24 @@ - case AV_OPT_TYPE_PIXEL_FMT: - case AV_OPT_TYPE_SAMPLE_FMT: - case AV_OPT_TYPE_INT: -+#if FF_API_OLD_CHANNEL_LAYOUT -+FF_DISABLE_DEPRECATION_WARNINGS - case AV_OPT_TYPE_CHANNEL_LAYOUT: -+FF_ENABLE_DEPRECATION_WARNINGS -+#endif - case AV_OPT_TYPE_DURATION: - case AV_OPT_TYPE_INT64: - case AV_OPT_TYPE_UINT64: - read_number(o, dst, NULL, NULL, &i64); - return o->default_val.i64 == i64; -+ case AV_OPT_TYPE_CHLAYOUT: { -+ AVChannelLayout ch_layout = { 0 }; -+ if (o->default_val.str) { -+ if ((ret = av_channel_layout_from_string(&ch_layout, o->default_val.str)) < 0) -+ return ret; -+ } -+ return !av_channel_layout_compare((AVChannelLayout *)dst, &ch_layout); -+ } - case AV_OPT_TYPE_STRING: - str = *(char **)dst; - if (str == o->default_val.str) //2 NULLs -@@ -2024,16 +2137,16 @@ - case AV_OPT_TYPE_DICT: { - AVDictionary *dict1 = NULL; - AVDictionary *dict2 = *(AVDictionary **)dst; -- AVDictionaryEntry *en1 = NULL; -- AVDictionaryEntry *en2 = NULL; -+ const AVDictionaryEntry *en1 = NULL; -+ const AVDictionaryEntry *en2 = NULL; - ret = av_dict_parse_string(&dict1, o->default_val.str, "=", ":", 0); - if (ret < 0) { - av_dict_free(&dict1); - return ret; - } - do { -- en1 = av_dict_get(dict1, "", en1, AV_DICT_IGNORE_SUFFIX); -- en2 = av_dict_get(dict2, "", en2, AV_DICT_IGNORE_SUFFIX); -+ en1 = av_dict_iterate(dict1, en1); -+ en2 = av_dict_iterate(dict2, en2); - } while (en1 && en2 && !strcmp(en1->key, en2->key) && !strcmp(en1->value, en2->value)); - av_dict_free(&dict1); - return (!en1 && !en2); -diff -Naur a/media/ffvpx/libavutil/opt.h b/media/ffvpx/libavutil/opt.h ---- a/media/ffvpx/libavutil/opt.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/opt.h 2023-04-06 12:49:40.261395212 +0200 -@@ -29,11 +29,11 @@ - - #include "rational.h" - #include "avutil.h" -+#include "channel_layout.h" - #include "dict.h" - #include "log.h" - #include "pixfmt.h" - #include "samplefmt.h" --#include "version.h" - - /** - * @defgroup avoptions AVOptions -@@ -238,8 +238,11 @@ - AV_OPT_TYPE_VIDEO_RATE, ///< offset must point to AVRational - AV_OPT_TYPE_DURATION, - AV_OPT_TYPE_COLOR, -+#if FF_API_OLD_CHANNEL_LAYOUT - AV_OPT_TYPE_CHANNEL_LAYOUT, -+#endif - AV_OPT_TYPE_BOOL, -+ AV_OPT_TYPE_CHLAYOUT, - }; - - /** -@@ -648,19 +651,6 @@ - */ - void *av_opt_child_next(void *obj, void *prev); - --#if FF_API_CHILD_CLASS_NEXT --/** -- * Iterate over potential AVOptions-enabled children of parent. -- * -- * @param prev result of a previous call to this function or NULL -- * @return AVClass corresponding to next potential child or NULL -- * -- * @deprecated use av_opt_child_class_iterate -- */ --attribute_deprecated --const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev); --#endif -- - /** - * Iterate over potential AVOptions-enabled children of parent. - * -@@ -707,7 +697,11 @@ - int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags); - int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags); - int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags); -+#if FF_API_OLD_CHANNEL_LAYOUT -+attribute_deprecated - int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags); -+#endif -+int av_opt_set_chlayout(void *obj, const char *name, const AVChannelLayout *layout, int search_flags); - /** - * @note Any old dictionary present is discarded and replaced with a copy of the new one. The - * caller still owns val is and responsible for freeing it. -@@ -762,7 +756,11 @@ - int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt); - int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt); - int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val); -+#if FF_API_OLD_CHANNEL_LAYOUT -+attribute_deprecated - int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout); -+#endif -+int av_opt_get_chlayout(void *obj, const char *name, int search_flags, AVChannelLayout *layout); - /** - * @param[out] out_val The returned dictionary is a copy of the actual value and must - * be freed with av_dict_free() by the caller -@@ -804,9 +802,16 @@ - /** - * Copy options from src object into dest object. - * -+ * The underlying AVClass of both src and dest must coincide. The guarantee -+ * below does not apply if this is not fulfilled. -+ * - * Options that require memory allocation (e.g. string or binary) are malloc'ed in dest object. - * Original memory allocated for such options is freed unless both src and dest options points to the same memory. - * -+ * Even on error it is guaranteed that allocated options from src and dest -+ * no longer alias each other afterwards; in particular calling av_opt_free() -+ * on both src and dest is safe afterwards if dest has been memdup'ed from src. -+ * - * @param dest Object to copy from - * @param src Object to copy into - * @return 0 on success, negative on error -diff -Naur a/media/ffvpx/libavutil/parseutils.c b/media/ffvpx/libavutil/parseutils.c ---- a/media/ffvpx/libavutil/parseutils.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/parseutils.c 2023-04-06 12:50:20.234005184 +0200 -@@ -28,7 +28,7 @@ - #include "common.h" - #include "eval.h" - #include "log.h" --//#include "random_seed.h" -+/* #include "random_seed.h" */ - #include "time_internal.h" - #include "parseutils.h" - #include "fftime.h" -@@ -102,6 +102,7 @@ - { "wsxga", 1600,1024 }, - { "wuxga", 1920,1200 }, - { "woxga", 2560,1600 }, -+ { "wqhd", 2560,1440 }, - { "wqsxga", 3200,2048 }, - { "wquxga", 3840,2400 }, - { "whsxga", 6400,4096 }, -@@ -111,6 +112,7 @@ - { "hd480", 852, 480 }, - { "hd720", 1280, 720 }, - { "hd1080", 1920,1080 }, -+ { "quadhd", 2560,1440 }, - { "2k", 2048,1080 }, /* Digital Cinema System Specification */ - { "2kdci", 2048,1080 }, - { "2kflat", 1998,1080 }, -diff -Naur a/media/ffvpx/libavutil/parseutils.h b/media/ffvpx/libavutil/parseutils.h ---- a/media/ffvpx/libavutil/parseutils.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/parseutils.h 2023-04-06 12:50:06.976471255 +0200 -@@ -79,6 +79,8 @@ - /** - * Put the RGBA values that correspond to color_string in rgba_color. - * -+ * @param rgba_color 4-elements array of uint8_t values, where the respective -+ * red, green, blue and alpha component values are written. - * @param color_string a string specifying a color. It can be the name of - * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence, - * possibly followed by "@" and a string representing the alpha -@@ -92,6 +94,8 @@ - * @param slen length of the initial part of color_string containing the - * color. It can be set to -1 if color_string is a null terminated string - * containing nothing else than the color. -+ * @param log_ctx a pointer to an arbitrary struct of which the first field -+ * is a pointer to an AVClass struct (used for av_log()). Can be NULL. - * @return >= 0 in case of success, a negative value in case of - * failure (for example if color_string cannot be parsed). - */ -@@ -106,7 +110,7 @@ - * av_parse_color(). - * - * @param color_idx index of the requested color, starting from 0 -- * @param rgbp if not NULL, will point to a 3-elements array with the color value in RGB -+ * @param rgb if not NULL, will point to a 3-elements array with the color value in RGB - * @return the color name string or NULL if color_idx is not in the array - */ - const char *av_get_known_color_name(int color_idx, const uint8_t **rgb); -@@ -162,19 +166,19 @@ - * by the standard strptime(). - * - * The supported input field descriptors are listed below. -- * - %H: the hour as a decimal number, using a 24-hour clock, in the -+ * - `%%H`: the hour as a decimal number, using a 24-hour clock, in the - * range '00' through '23' -- * - %J: hours as a decimal number, in the range '0' through INT_MAX -- * - %M: the minute as a decimal number, using a 24-hour clock, in the -+ * - `%%J`: hours as a decimal number, in the range '0' through INT_MAX -+ * - `%%M`: the minute as a decimal number, using a 24-hour clock, in the - * range '00' through '59' -- * - %S: the second as a decimal number, using a 24-hour clock, in the -+ * - `%%S`: the second as a decimal number, using a 24-hour clock, in the - * range '00' through '59' -- * - %Y: the year as a decimal number, using the Gregorian calendar -- * - %m: the month as a decimal number, in the range '1' through '12' -- * - %d: the day of the month as a decimal number, in the range '1' -+ * - `%%Y`: the year as a decimal number, using the Gregorian calendar -+ * - `%%m`: the month as a decimal number, in the range '1' through '12' -+ * - `%%d`: the day of the month as a decimal number, in the range '1' - * through '31' -- * - %T: alias for '%H:%M:%S' -- * - %%: a literal '%' -+ * - `%%T`: alias for `%%H:%%M:%%S` -+ * - `%%`: a literal `%` - * - * @return a pointer to the first character not processed in this function - * call. In case the input string contains more characters than -diff -Naur a/media/ffvpx/libavutil/pixdesc.c b/media/ffvpx/libavutil/pixdesc.c ---- a/media/ffvpx/libavutil/pixdesc.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/pixdesc.c 2023-04-06 12:50:24.494176623 +0200 -@@ -22,14 +22,11 @@ - #include - #include - --#include "avassert.h" - #include "avstring.h" - #include "common.h" - #include "pixfmt.h" - #include "pixdesc.h" --#include "internal.h" - #include "intreadwrite.h" --#include "version.h" - - void av_read_image_line2(void *dst, - const uint8_t *data[4], const int linesize[4], -@@ -49,19 +46,35 @@ - uint32_t *dst32 = dst; - - if (flags & AV_PIX_FMT_FLAG_BITSTREAM) { -- int skip = x * step + comp.offset; -- const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); -- int shift = 8 - depth - (skip & 7); -+ if (depth == 10) { -+ // Assume all channels are packed into a 32bit value -+ const uint8_t *byte_p = data[plane] + y * linesize[plane]; -+ const uint32_t *p = (uint32_t *)byte_p; - -- while (w--) { -- int val = (*p >> shift) & mask; -- if (read_pal_component) -- val = data[1][4*val + c]; -- shift -= step; -- p -= shift >> 3; -- shift &= 7; -- if (dst_element_size == 4) *dst32++ = val; -- else *dst16++ = val; -+ while (w--) { -+ int val = AV_RB32(p); -+ val = (val >> comp.offset) & mask; -+ if (read_pal_component) -+ val = data[1][4*val + c]; -+ if (dst_element_size == 4) *dst32++ = val; -+ else *dst16++ = val; -+ p++; -+ } -+ } else { -+ int skip = x * step + comp.offset; -+ const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); -+ int shift = 8 - depth - (skip & 7); -+ -+ while (w--) { -+ int val = (*p >> shift) & mask; -+ if (read_pal_component) -+ val = data[1][4*val + c]; -+ shift -= step; -+ p -= shift >> 3; -+ shift &= 7; -+ if (dst_element_size == 4) *dst32++ = val; -+ else *dst16++ = val; -+ } - } - } else { - const uint8_t *p = data[plane] + y * linesize[plane] + -@@ -112,15 +125,29 @@ - const uint16_t *src16 = src; - - if (flags & AV_PIX_FMT_FLAG_BITSTREAM) { -- int skip = x * step + comp.offset; -- uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); -- int shift = 8 - depth - (skip & 7); -+ if (depth == 10) { -+ // Assume all channels are packed into a 32bit value -+ const uint8_t *byte_p = data[plane] + y * linesize[plane]; -+ uint32_t *p = (uint32_t *)byte_p; -+ int offset = comp.offset; -+ uint32_t mask = ((1ULL << depth) - 1) << offset; - -- while (w--) { -- *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift; -- shift -= step; -- p -= shift >> 3; -- shift &= 7; -+ while (w--) { -+ uint16_t val = src_element_size == 4 ? *src32++ : *src16++; -+ AV_WB32(p, (AV_RB32(p) & ~mask) | (val << offset)); -+ p++; -+ } -+ } else { -+ int skip = x * step + comp.offset; -+ uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); -+ int shift = 8 - depth - (skip & 7); -+ -+ while (w--) { -+ *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift; -+ shift -= step; -+ p -= shift >> 3; -+ shift &= 7; -+ } - } - } else { - int shift = comp.shift; -@@ -167,9 +194,6 @@ - av_write_image_line2(src, data, linesize, desc, x, y, c, w, 2); - } - --#if FF_API_PLUS1_MINUS1 --FF_DISABLE_DEPRECATION_WARNINGS --#endif - static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { - [AV_PIX_FMT_YUV420P] = { - .name = "yuv420p", -@@ -177,9 +201,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -189,9 +213,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* U */ -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* V */ -+ { 0, 2, 0, 0, 8 }, /* Y */ -+ { 0, 4, 1, 0, 8 }, /* U */ -+ { 0, 4, 3, 0, 8 }, /* V */ - }, - }, - [AV_PIX_FMT_YVYU422] = { -@@ -200,9 +224,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */ -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* U */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* V */ -+ { 0, 2, 0, 0, 8 }, /* Y */ -+ { 0, 4, 3, 0, 8 }, /* U */ -+ { 0, 4, 1, 0, 8 }, /* V */ - }, - }, - [AV_PIX_FMT_Y210LE] = { -@@ -211,9 +235,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 0, 6, 10, 3, 9, 1 }, /* Y */ -- { 0, 8, 2, 6, 10, 7, 9, 3 }, /* U */ -- { 0, 8, 6, 6, 10, 7, 9, 7 }, /* V */ -+ { 0, 4, 0, 6, 10 }, /* Y */ -+ { 0, 8, 2, 6, 10 }, /* U */ -+ { 0, 8, 6, 6, 10 }, /* V */ - }, - }, - [AV_PIX_FMT_Y210BE] = { -@@ -222,9 +246,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 0, 6, 10, 3, 9, 1 }, /* Y */ -- { 0, 8, 2, 6, 10, 7, 9, 3 }, /* U */ -- { 0, 8, 6, 6, 10, 7, 9, 7 }, /* V */ -+ { 0, 4, 0, 6, 10 }, /* Y */ -+ { 0, 8, 2, 6, 10 }, /* U */ -+ { 0, 8, 6, 6, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - }, -@@ -234,9 +258,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 3, 0, 0, 8, 2, 7, 1 }, /* R */ -- { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */ -- { 0, 3, 2, 0, 8, 2, 7, 3 }, /* B */ -+ { 0, 3, 0, 0, 8 }, /* R */ -+ { 0, 3, 1, 0, 8 }, /* G */ -+ { 0, 3, 2, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -246,9 +270,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 3, 2, 0, 8, 2, 7, 3 }, /* R */ -- { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */ -- { 0, 3, 0, 0, 8, 2, 7, 1 }, /* B */ -+ { 0, 3, 2, 0, 8 }, /* R */ -+ { 0, 3, 1, 0, 8 }, /* G */ -+ { 0, 3, 0, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -258,9 +282,9 @@ - .log2_chroma_w= 0, - .log2_chroma_h= 0, - .comp = { -- { 0, 4, 2, 4, 10, 3, 9, 2 }, /* R */ -- { 0, 4, 1, 2, 10, 3, 9, 3 }, /* G */ -- { 0, 4, 0, 0, 10, 3, 9, 4 }, /* B */ -+ { 0, 4, 2, 4, 10 }, /* R */ -+ { 0, 4, 1, 2, 10 }, /* G */ -+ { 0, 4, 0, 0, 10 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -270,9 +294,33 @@ - .log2_chroma_w= 0, - .log2_chroma_h= 0, - .comp = { -- { 0, 4, 0, 4, 10, 3, 9, 2 }, /* R */ -- { 0, 4, 1, 2, 10, 3, 9, 3 }, /* G */ -- { 0, 4, 2, 0, 10, 3, 9, 4 }, /* B */ -+ { 0, 4, 0, 4, 10 }, /* R */ -+ { 0, 4, 1, 2, 10 }, /* G */ -+ { 0, 4, 2, 0, 10 }, /* B */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_X2BGR10LE] = { -+ .name = "x2bgr10le", -+ .nb_components= 3, -+ .log2_chroma_w= 0, -+ .log2_chroma_h= 0, -+ .comp = { -+ { 0, 4, 0, 0, 10 }, /* R */ -+ { 0, 4, 1, 2, 10 }, /* G */ -+ { 0, 4, 2, 4, 10 }, /* B */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_RGB, -+ }, -+ [AV_PIX_FMT_X2BGR10BE] = { -+ .name = "x2bgr10be", -+ .nb_components= 3, -+ .log2_chroma_w= 0, -+ .log2_chroma_h= 0, -+ .comp = { -+ { 0, 4, 2, 0, 10 }, /* R */ -+ { 0, 4, 1, 2, 10 }, /* G */ -+ { 0, 4, 0, 4, 10 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, - }, -@@ -282,9 +330,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -294,9 +342,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -306,9 +354,9 @@ - .log2_chroma_w = 2, - .log2_chroma_h = 2, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -318,9 +366,9 @@ - .log2_chroma_w = 2, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -330,9 +378,9 @@ - .log2_chroma_w = 2, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -342,9 +390,8 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -+ { 0, 1, 0, 0, 8 }, /* Y */ - }, -- .flags = FF_PSEUDOPAL, - .alias = "gray8,y8", - }, - [AV_PIX_FMT_MONOWHITE] = { -@@ -353,7 +400,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 1, 0, 0, 1 }, /* Y */ -+ { 0, 1, 0, 0, 1 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BITSTREAM, - }, -@@ -363,7 +410,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 7, 1, 0, 0, 1 }, /* Y */ -+ { 0, 1, 0, 7, 1 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BITSTREAM, - }, -@@ -373,7 +420,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, -+ { 0, 1, 0, 0, 8 }, - }, - .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -383,9 +430,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -395,9 +442,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -407,25 +454,27 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -+#if FF_API_XVMC - [AV_PIX_FMT_XVMC] = { - .name = "xvmc", - .flags = AV_PIX_FMT_FLAG_HWACCEL, - }, -+#endif - [AV_PIX_FMT_UYVY422] = { - .name = "uyvy422", - .nb_components = 3, - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 1, 0, 8, 1, 7, 2 }, /* Y */ -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* U */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* V */ -+ { 0, 2, 1, 0, 8 }, /* Y */ -+ { 0, 4, 0, 0, 8 }, /* U */ -+ { 0, 4, 2, 0, 8 }, /* V */ - }, - }, - [AV_PIX_FMT_UYYVYY411] = { -@@ -434,9 +483,9 @@ - .log2_chroma_w = 2, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* Y */ -- { 0, 6, 0, 0, 8, 5, 7, 1 }, /* U */ -- { 0, 6, 3, 0, 8, 5, 7, 4 }, /* V */ -+ { 0, 4, 1, 0, 8 }, /* Y */ -+ { 0, 6, 0, 0, 8 }, /* U */ -+ { 0, 6, 3, 0, 8 }, /* V */ - }, - }, - [AV_PIX_FMT_BGR8] = { -@@ -445,11 +494,11 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 3, 0, 2, 1 }, /* R */ -- { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */ -- { 0, 1, 0, 6, 2, 0, 1, 1 }, /* B */ -+ { 0, 1, 0, 0, 3 }, /* R */ -+ { 0, 1, 0, 3, 3 }, /* G */ -+ { 0, 1, 0, 6, 2 }, /* B */ - }, -- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, -+ .flags = AV_PIX_FMT_FLAG_RGB, - }, - [AV_PIX_FMT_BGR4] = { - .name = "bgr4", -@@ -457,9 +506,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 3, 0, 1, 3, 0, 4 }, /* R */ -- { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */ -- { 0, 4, 0, 0, 1, 3, 0, 1 }, /* B */ -+ { 0, 4, 3, 0, 1 }, /* R */ -+ { 0, 4, 1, 0, 2 }, /* G */ -+ { 0, 4, 0, 0, 1 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB, - }, -@@ -469,11 +518,11 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 1, 0, 0, 1 }, /* R */ -- { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */ -- { 0, 1, 0, 3, 1, 0, 0, 1 }, /* B */ -+ { 0, 1, 0, 0, 1 }, /* R */ -+ { 0, 1, 0, 1, 2 }, /* G */ -+ { 0, 1, 0, 3, 1 }, /* B */ - }, -- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, -+ .flags = AV_PIX_FMT_FLAG_RGB, - }, - [AV_PIX_FMT_RGB8] = { - .name = "rgb8", -@@ -481,11 +530,11 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 6, 2, 0, 1, 1 }, /* R */ -- { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */ -- { 0, 1, 0, 0, 3, 0, 2, 1 }, /* B */ -+ { 0, 1, 0, 6, 2 }, /* R */ -+ { 0, 1, 0, 3, 3 }, /* G */ -+ { 0, 1, 0, 0, 3 }, /* B */ - }, -- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, -+ .flags = AV_PIX_FMT_FLAG_RGB, - }, - [AV_PIX_FMT_RGB4] = { - .name = "rgb4", -@@ -493,9 +542,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 0, 0, 1, 3, 0, 1 }, /* R */ -- { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */ -- { 0, 4, 3, 0, 1, 3, 0, 4 }, /* B */ -+ { 0, 4, 0, 0, 1 }, /* R */ -+ { 0, 4, 1, 0, 2 }, /* G */ -+ { 0, 4, 3, 0, 1 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB, - }, -@@ -505,11 +554,11 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 3, 1, 0, 0, 1 }, /* R */ -- { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */ -- { 0, 1, 0, 0, 1, 0, 0, 1 }, /* B */ -+ { 0, 1, 0, 3, 1 }, /* R */ -+ { 0, 1, 0, 1, 2 }, /* G */ -+ { 0, 1, 0, 0, 1 }, /* B */ - }, -- .flags = AV_PIX_FMT_FLAG_RGB | FF_PSEUDOPAL, -+ .flags = AV_PIX_FMT_FLAG_RGB, - }, - [AV_PIX_FMT_NV12] = { - .name = "nv12", -@@ -517,9 +566,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */ -- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 2, 0, 0, 8 }, /* U */ -+ { 1, 2, 1, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -529,9 +578,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */ -- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 2, 1, 0, 8 }, /* U */ -+ { 1, 2, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -541,10 +590,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */ -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */ -+ { 0, 4, 1, 0, 8 }, /* R */ -+ { 0, 4, 2, 0, 8 }, /* G */ -+ { 0, 4, 3, 0, 8 }, /* B */ -+ { 0, 4, 0, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -554,10 +603,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */ -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */ -+ { 0, 4, 0, 0, 8 }, /* R */ -+ { 0, 4, 1, 0, 8 }, /* G */ -+ { 0, 4, 2, 0, 8 }, /* B */ -+ { 0, 4, 3, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -567,10 +616,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */ -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */ -+ { 0, 4, 3, 0, 8 }, /* R */ -+ { 0, 4, 2, 0, 8 }, /* G */ -+ { 0, 4, 1, 0, 8 }, /* B */ -+ { 0, 4, 0, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -580,10 +629,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */ -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */ -+ { 0, 4, 2, 0, 8 }, /* R */ -+ { 0, 4, 1, 0, 8 }, /* G */ -+ { 0, 4, 0, 0, 8 }, /* B */ -+ { 0, 4, 3, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -593,9 +642,9 @@ - .log2_chroma_w= 0, - .log2_chroma_h= 0, - .comp = { -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */ -+ { 0, 4, 1, 0, 8 }, /* R */ -+ { 0, 4, 2, 0, 8 }, /* G */ -+ { 0, 4, 3, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -605,9 +654,9 @@ - .log2_chroma_w= 0, - .log2_chroma_h= 0, - .comp = { -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */ -+ { 0, 4, 0, 0, 8 }, /* R */ -+ { 0, 4, 1, 0, 8 }, /* G */ -+ { 0, 4, 2, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -617,9 +666,9 @@ - .log2_chroma_w= 0, - .log2_chroma_h= 0, - .comp = { -- { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */ -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */ -+ { 0, 4, 3, 0, 8 }, /* R */ -+ { 0, 4, 2, 0, 8 }, /* G */ -+ { 0, 4, 1, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -629,9 +678,9 @@ - .log2_chroma_w= 0, - .log2_chroma_h= 0, - .comp = { -- { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */ -- { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */ -- { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */ -+ { 0, 4, 2, 0, 8 }, /* R */ -+ { 0, 4, 1, 0, 8 }, /* G */ -+ { 0, 4, 0, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -641,7 +690,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -+ { 0, 2, 0, 0, 9 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - .alias = "y9be", -@@ -652,7 +701,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -+ { 0, 2, 0, 0, 9 }, /* Y */ - }, - .alias = "y9le", - }, -@@ -662,7 +711,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -+ { 0, 2, 0, 0, 10 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - .alias = "y10be", -@@ -673,7 +722,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -+ { 0, 2, 0, 0, 10 }, /* Y */ - }, - .alias = "y10le", - }, -@@ -683,7 +732,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -+ { 0, 2, 0, 0, 12 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - .alias = "y12be", -@@ -694,7 +743,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -+ { 0, 2, 0, 0, 12 }, /* Y */ - }, - .alias = "y12le", - }, -@@ -704,7 +753,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -+ { 0, 2, 0, 0, 14 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - .alias = "y14be", -@@ -715,7 +764,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -+ { 0, 2, 0, 0, 14 }, /* Y */ - }, - .alias = "y14le", - }, -@@ -725,7 +774,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -+ { 0, 2, 0, 0, 16 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - .alias = "y16be", -@@ -736,7 +785,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -+ { 0, 2, 0, 0, 16 }, /* Y */ - }, - .alias = "y16le", - }, -@@ -746,9 +795,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -758,9 +807,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -770,9 +819,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -782,9 +831,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -794,9 +843,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -806,9 +855,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -818,10 +867,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ -+ { 3, 1, 0, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -831,10 +880,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ -+ { 3, 1, 0, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -844,10 +893,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */ -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */ -- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 1, 0, 0, 8 }, /* U */ -+ { 2, 1, 0, 0, 8 }, /* V */ -+ { 3, 1, 0, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -857,10 +906,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ -+ { 3, 2, 0, 0, 9 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -870,10 +919,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ -+ { 3, 2, 0, 0, 9 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -883,10 +932,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ -+ { 3, 2, 0, 0, 9 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -896,10 +945,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ -+ { 3, 2, 0, 0, 9 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -909,10 +958,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ -+ { 3, 2, 0, 0, 9 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -922,10 +971,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -- { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ -+ { 3, 2, 0, 0, 9 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -935,10 +984,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -948,10 +997,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -961,10 +1010,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -974,10 +1023,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -987,10 +1036,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1000,10 +1049,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1013,10 +1062,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1026,10 +1075,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1039,10 +1088,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1052,10 +1101,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1065,10 +1114,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1078,10 +1127,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1091,9 +1140,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */ -- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ -- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */ -+ { 0, 6, 0, 0, 16 }, /* R */ -+ { 0, 6, 2, 0, 16 }, /* G */ -+ { 0, 6, 4, 0, 16 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, - }, -@@ -1103,9 +1152,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */ -- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ -- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */ -+ { 0, 6, 0, 0, 16 }, /* R */ -+ { 0, 6, 2, 0, 16 }, /* G */ -+ { 0, 6, 4, 0, 16 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1115,10 +1164,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */ -- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ -- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */ -- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ -+ { 0, 8, 0, 0, 16 }, /* R */ -+ { 0, 8, 2, 0, 16 }, /* G */ -+ { 0, 8, 4, 0, 16 }, /* B */ -+ { 0, 8, 6, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1128,10 +1177,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */ -- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ -- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */ -- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ -+ { 0, 8, 0, 0, 16 }, /* R */ -+ { 0, 8, 2, 0, 16 }, /* G */ -+ { 0, 8, 4, 0, 16 }, /* B */ -+ { 0, 8, 6, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1141,9 +1190,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, -1, 3, 5, 1, 4, 0 }, /* R */ -- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ -+ { 0, 2, -1, 3, 5 }, /* R */ -+ { 0, 2, 0, 5, 6 }, /* G */ -+ { 0, 2, 0, 0, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1153,9 +1202,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 1, 3, 5, 1, 4, 2 }, /* R */ -- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ -+ { 0, 2, 1, 3, 5 }, /* R */ -+ { 0, 2, 0, 5, 6 }, /* G */ -+ { 0, 2, 0, 0, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1165,9 +1214,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, -1, 2, 5, 1, 4, 0 }, /* R */ -- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ -+ { 0, 2, -1, 2, 5 }, /* R */ -+ { 0, 2, 0, 5, 5 }, /* G */ -+ { 0, 2, 0, 0, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1177,9 +1226,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 1, 2, 5, 1, 4, 2 }, /* R */ -- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */ -+ { 0, 2, 1, 2, 5 }, /* R */ -+ { 0, 2, 0, 5, 5 }, /* G */ -+ { 0, 2, 0, 0, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1189,9 +1238,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, -1, 0, 4, 1, 3, 0 }, /* R */ -- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ -- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */ -+ { 0, 2, -1, 0, 4 }, /* R */ -+ { 0, 2, 0, 4, 4 }, /* G */ -+ { 0, 2, 0, 0, 4 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1201,9 +1250,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 1, 0, 4, 1, 3, 2 }, /* R */ -- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ -- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */ -+ { 0, 2, 1, 0, 4 }, /* R */ -+ { 0, 2, 0, 4, 4 }, /* G */ -+ { 0, 2, 0, 0, 4 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1213,9 +1262,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */ -- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ -- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */ -+ { 0, 6, 4, 0, 16 }, /* R */ -+ { 0, 6, 2, 0, 16 }, /* G */ -+ { 0, 6, 0, 0, 16 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1225,9 +1274,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */ -- { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */ -- { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */ -+ { 0, 6, 4, 0, 16 }, /* R */ -+ { 0, 6, 2, 0, 16 }, /* G */ -+ { 0, 6, 0, 0, 16 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1237,10 +1286,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */ -- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ -- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */ -- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ -+ { 0, 8, 4, 0, 16 }, /* R */ -+ { 0, 8, 2, 0, 16 }, /* G */ -+ { 0, 8, 0, 0, 16 }, /* B */ -+ { 0, 8, 6, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1250,10 +1299,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */ -- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */ -- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */ -- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */ -+ { 0, 8, 4, 0, 16 }, /* R */ -+ { 0, 8, 2, 0, 16 }, /* G */ -+ { 0, 8, 0, 0, 16 }, /* B */ -+ { 0, 8, 6, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1263,9 +1312,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ -- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ -- { 0, 2, -1, 3, 5, 1, 4, 0 }, /* B */ -+ { 0, 2, 0, 0, 5 }, /* R */ -+ { 0, 2, 0, 5, 6 }, /* G */ -+ { 0, 2, -1, 3, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1275,9 +1324,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ -- { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */ -- { 0, 2, 1, 3, 5, 1, 4, 2 }, /* B */ -+ { 0, 2, 0, 0, 5 }, /* R */ -+ { 0, 2, 0, 5, 6 }, /* G */ -+ { 0, 2, 1, 3, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1287,9 +1336,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ -- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ -- { 0, 2, -1, 2, 5, 1, 4, 0 }, /* B */ -+ { 0, 2, 0, 0, 5 }, /* R */ -+ { 0, 2, 0, 5, 5 }, /* G */ -+ { 0, 2, -1, 2, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1299,9 +1348,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */ -- { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */ -- { 0, 2, 1, 2, 5, 1, 4, 2 }, /* B */ -+ { 0, 2, 0, 0, 5 }, /* R */ -+ { 0, 2, 0, 5, 5 }, /* G */ -+ { 0, 2, 1, 2, 5 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, -@@ -1311,9 +1360,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */ -- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ -- { 0, 2, -1, 0, 4, 1, 3, 0 }, /* B */ -+ { 0, 2, 0, 0, 4 }, /* R */ -+ { 0, 2, 0, 4, 4 }, /* G */ -+ { 0, 2, -1, 0, 4 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1323,48 +1372,27 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */ -- { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */ -- { 0, 2, 1, 0, 4, 1, 3, 2 }, /* B */ -+ { 0, 2, 0, 0, 4 }, /* R */ -+ { 0, 2, 0, 4, 4 }, /* G */ -+ { 0, 2, 1, 0, 4 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_RGB, - }, --#if FF_API_VAAPI -- [AV_PIX_FMT_VAAPI_MOCO] = { -- .name = "vaapi_moco", -- .log2_chroma_w = 1, -- .log2_chroma_h = 1, -- .flags = AV_PIX_FMT_FLAG_HWACCEL, -- }, -- [AV_PIX_FMT_VAAPI_IDCT] = { -- .name = "vaapi_idct", -- .log2_chroma_w = 1, -- .log2_chroma_h = 1, -- .flags = AV_PIX_FMT_FLAG_HWACCEL, -- }, -- [AV_PIX_FMT_VAAPI_VLD] = { -- .name = "vaapi_vld", -- .log2_chroma_w = 1, -- .log2_chroma_h = 1, -- .flags = AV_PIX_FMT_FLAG_HWACCEL, -- }, --#else - [AV_PIX_FMT_VAAPI] = { - .name = "vaapi", - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .flags = AV_PIX_FMT_FLAG_HWACCEL, - }, --#endif - [AV_PIX_FMT_YUV420P9LE] = { - .name = "yuv420p9le", - .nb_components = 3, - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1374,9 +1402,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1386,9 +1414,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1398,9 +1426,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1410,9 +1438,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1422,9 +1450,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1434,9 +1462,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ -+ { 0, 2, 0, 0, 14 }, /* Y */ -+ { 1, 2, 0, 0, 14 }, /* U */ -+ { 2, 2, 0, 0, 14 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1446,9 +1474,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ -+ { 0, 2, 0, 0, 14 }, /* Y */ -+ { 1, 2, 0, 0, 14 }, /* U */ -+ { 2, 2, 0, 0, 14 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1458,9 +1486,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1470,9 +1498,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1482,9 +1510,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1494,9 +1522,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1506,9 +1534,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1518,9 +1546,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1530,9 +1558,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1542,9 +1570,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1554,9 +1582,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ -+ { 0, 2, 0, 0, 14 }, /* Y */ -+ { 1, 2, 0, 0, 14 }, /* U */ -+ { 2, 2, 0, 0, 14 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1566,9 +1594,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ -+ { 0, 2, 0, 0, 14 }, /* Y */ -+ { 1, 2, 0, 0, 14 }, /* U */ -+ { 2, 2, 0, 0, 14 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1578,9 +1606,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1590,9 +1618,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1602,9 +1630,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1614,9 +1642,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */ -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 2, 0, 0, 16 }, /* U */ -+ { 2, 2, 0, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1626,9 +1654,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1638,9 +1666,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */ -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 2, 0, 0, 10 }, /* U */ -+ { 2, 2, 0, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1650,9 +1678,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1662,9 +1690,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */ -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */ -+ { 0, 2, 0, 0, 9 }, /* Y */ -+ { 1, 2, 0, 0, 9 }, /* U */ -+ { 2, 2, 0, 0, 9 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1674,9 +1702,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1686,9 +1714,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1698,9 +1726,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ -+ { 0, 2, 0, 0, 14 }, /* Y */ -+ { 1, 2, 0, 0, 14 }, /* U */ -+ { 2, 2, 0, 0, 14 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1710,9 +1738,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* Y */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* U */ -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* V */ -+ { 0, 2, 0, 0, 14 }, /* Y */ -+ { 1, 2, 0, 0, 14 }, /* U */ -+ { 2, 2, 0, 0, 14 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -1732,8 +1760,8 @@ - .name = "ya8", - .nb_components = 2, - .comp = { -- { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */ -- { 0, 2, 1, 0, 8, 1, 7, 2 }, /* A */ -+ { 0, 2, 0, 0, 8 }, /* Y */ -+ { 0, 2, 1, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_ALPHA, - .alias = "gray8a", -@@ -1742,8 +1770,8 @@ - .name = "ya16le", - .nb_components = 2, - .comp = { -- { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */ -- { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */ -+ { 0, 4, 0, 0, 16 }, /* Y */ -+ { 0, 4, 2, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1751,8 +1779,8 @@ - .name = "ya16be", - .nb_components = 2, - .comp = { -- { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */ -- { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */ -+ { 0, 4, 0, 0, 16 }, /* Y */ -+ { 0, 4, 2, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -1766,9 +1794,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */ -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */ -+ { 2, 1, 0, 0, 8 }, /* R */ -+ { 0, 1, 0, 0, 8 }, /* G */ -+ { 1, 1, 0, 0, 8 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1778,9 +1806,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */ -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */ -+ { 2, 2, 0, 0, 9 }, /* R */ -+ { 0, 2, 0, 0, 9 }, /* G */ -+ { 1, 2, 0, 0, 9 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1790,9 +1818,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */ -- { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */ -- { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */ -+ { 2, 2, 0, 0, 9 }, /* R */ -+ { 0, 2, 0, 0, 9 }, /* G */ -+ { 1, 2, 0, 0, 9 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1802,9 +1830,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ -+ { 2, 2, 0, 0, 10 }, /* R */ -+ { 0, 2, 0, 0, 10 }, /* G */ -+ { 1, 2, 0, 0, 10 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1814,9 +1842,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ -+ { 2, 2, 0, 0, 10 }, /* R */ -+ { 0, 2, 0, 0, 10 }, /* G */ -+ { 1, 2, 0, 0, 10 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1826,9 +1854,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ -+ { 2, 2, 0, 0, 12 }, /* R */ -+ { 0, 2, 0, 0, 12 }, /* G */ -+ { 1, 2, 0, 0, 12 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1838,9 +1866,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ -+ { 2, 2, 0, 0, 12 }, /* R */ -+ { 0, 2, 0, 0, 12 }, /* G */ -+ { 1, 2, 0, 0, 12 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1850,9 +1878,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */ -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */ -+ { 2, 2, 0, 0, 14 }, /* R */ -+ { 0, 2, 0, 0, 14 }, /* G */ -+ { 1, 2, 0, 0, 14 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1862,9 +1890,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 14, 1, 13, 1 }, /* R */ -- { 0, 2, 0, 0, 14, 1, 13, 1 }, /* G */ -- { 1, 2, 0, 0, 14, 1, 13, 1 }, /* B */ -+ { 2, 2, 0, 0, 14 }, /* R */ -+ { 0, 2, 0, 0, 14 }, /* G */ -+ { 1, 2, 0, 0, 14 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1874,9 +1902,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ -+ { 2, 2, 0, 0, 16 }, /* R */ -+ { 0, 2, 0, 0, 16 }, /* G */ -+ { 1, 2, 0, 0, 16 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1886,9 +1914,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ -+ { 2, 2, 0, 0, 16 }, /* R */ -+ { 0, 2, 0, 0, 16 }, /* G */ -+ { 1, 2, 0, 0, 16 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, - }, -@@ -1898,10 +1926,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */ -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */ -- { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */ -- { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */ -+ { 2, 1, 0, 0, 8 }, /* R */ -+ { 0, 1, 0, 0, 8 }, /* G */ -+ { 1, 1, 0, 0, 8 }, /* B */ -+ { 3, 1, 0, 0, 8 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | - AV_PIX_FMT_FLAG_ALPHA, -@@ -1912,10 +1940,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 2, 2, 0, 0, 16 }, /* R */ -+ { 0, 2, 0, 0, 16 }, /* G */ -+ { 1, 2, 0, 0, 16 }, /* B */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | - AV_PIX_FMT_FLAG_ALPHA, -@@ -1926,10 +1954,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */ -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */ -- { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */ -- { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */ -+ { 2, 2, 0, 0, 16 }, /* R */ -+ { 0, 2, 0, 0, 16 }, /* G */ -+ { 1, 2, 0, 0, 16 }, /* B */ -+ { 3, 2, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | - AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, -@@ -1946,9 +1974,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */ -- { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */ -- { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */ -+ { 0, 6, 0, 4, 12 }, /* X */ -+ { 0, 6, 2, 4, 12 }, /* Y */ -+ { 0, 6, 4, 4, 12 }, /* Z */ - }, - /*.flags = -- not used*/ - }, -@@ -1958,9 +1986,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */ -- { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */ -- { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */ -+ { 0, 6, 0, 4, 12 }, /* X */ -+ { 0, 6, 2, 4, 12 }, /* Y */ -+ { 0, 6, 4, 4, 12 }, /* Z */ - }, - .flags = AV_PIX_FMT_FLAG_BE, - }, -@@ -1970,9 +1998,9 @@ - .log2_chroma_w= 0, \ - .log2_chroma_h= 0, \ - .comp = { \ -- {0,1,0,0,2,0,1,1},\ -- {0,1,0,0,4,0,3,1},\ -- {0,1,0,0,2,0,1,1},\ -+ { 0, 1, 0, 0, 2 }, \ -+ { 0, 1, 0, 0, 4 }, \ -+ { 0, 1, 0, 0, 2 }, \ - }, \ - - #define BAYER16_DESC_COMMON \ -@@ -1980,9 +2008,9 @@ - .log2_chroma_w= 0, \ - .log2_chroma_h= 0, \ - .comp = { \ -- {0,2,0,0,4,1,3,1},\ -- {0,2,0,0,8,1,7,1},\ -- {0,2,0,0,4,1,3,1},\ -+ { 0, 2, 0, 0, 4 }, \ -+ { 0, 2, 0, 0, 8 }, \ -+ { 0, 2, 0, 0, 4 }, \ - }, \ - - [AV_PIX_FMT_BAYER_BGGR8] = { -@@ -2051,9 +2079,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */ -- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 2, 0, 0, 8 }, /* U */ -+ { 1, 2, 1, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -2063,9 +2091,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */ -- { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 4, 0, 0, 10 }, /* U */ -+ { 1, 4, 2, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -2075,9 +2103,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ -- { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */ -- { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */ -+ { 0, 2, 0, 0, 10 }, /* Y */ -+ { 1, 4, 0, 0, 10 }, /* U */ -+ { 1, 4, 2, 0, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, - }, -@@ -2103,10 +2131,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */ -- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */ -- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */ -- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */ -+ { 0, 8, 2, 0, 16 }, /* Y */ -+ { 0, 8, 4, 0, 16 }, /* U */ -+ { 0, 8, 6, 0, 16 }, /* V */ -+ { 0, 8, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -2116,10 +2144,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 8, 2, 0, 16, 7, 15, 3 }, /* Y */ -- { 0, 8, 4, 0, 16, 7, 15, 5 }, /* U */ -- { 0, 8, 6, 0, 16, 7, 15, 7 }, /* V */ -- { 0, 8, 0, 0, 16, 7, 15, 1 }, /* A */ -+ { 0, 8, 2, 0, 16 }, /* Y */ -+ { 0, 8, 4, 0, 16 }, /* U */ -+ { 0, 8, 6, 0, 16 }, /* V */ -+ { 0, 8, 0, 0, 16 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -2129,9 +2157,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */ -- { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */ -- { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */ -+ { 0, 2, 0, 6, 10 }, /* Y */ -+ { 1, 4, 0, 6, 10 }, /* U */ -+ { 1, 4, 2, 6, 10 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -2141,9 +2169,33 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */ -- { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */ -- { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */ -+ { 0, 2, 0, 6, 10 }, /* Y */ -+ { 1, 4, 0, 6, 10 }, /* U */ -+ { 1, 4, 2, 6, 10 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_P012LE] = { -+ .name = "p012le", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 1, -+ .comp = { -+ { 0, 2, 0, 4, 12 }, /* Y */ -+ { 1, 4, 0, 4, 12 }, /* U */ -+ { 1, 4, 2, 4, 12 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR, -+ }, -+ [AV_PIX_FMT_P012BE] = { -+ .name = "p012be", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 1, -+ .comp = { -+ { 0, 2, 0, 4, 12 }, /* Y */ -+ { 1, 4, 0, 4, 12 }, /* U */ -+ { 1, 4, 2, 4, 12 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, - }, -@@ -2153,9 +2205,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */ -- { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 4, 0, 0, 16 }, /* U */ -+ { 1, 4, 2, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -2165,9 +2217,9 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 1, - .comp = { -- { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ -- { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */ -- { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */ -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 4, 0, 0, 16 }, /* U */ -+ { 1, 4, 2, 0, 16 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, - }, -@@ -2177,10 +2229,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ -- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ -+ { 2, 2, 0, 0, 12 }, /* R */ -+ { 0, 2, 0, 0, 12 }, /* G */ -+ { 1, 2, 0, 0, 12 }, /* B */ -+ { 3, 2, 0, 0, 12 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | - AV_PIX_FMT_FLAG_ALPHA, -@@ -2191,10 +2243,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */ -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */ -- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ -+ { 2, 2, 0, 0, 12 }, /* R */ -+ { 0, 2, 0, 0, 12 }, /* G */ -+ { 1, 2, 0, 0, 12 }, /* B */ -+ { 3, 2, 0, 0, 12 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | - AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, -@@ -2205,10 +2257,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 2, 2, 0, 0, 10 }, /* R */ -+ { 0, 2, 0, 0, 10 }, /* G */ -+ { 1, 2, 0, 0, 10 }, /* B */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | - AV_PIX_FMT_FLAG_ALPHA, -@@ -2219,10 +2271,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */ -- { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */ -- { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */ -- { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */ -+ { 2, 2, 0, 0, 10 }, /* R */ -+ { 0, 2, 0, 0, 10 }, /* G */ -+ { 1, 2, 0, 0, 10 }, /* B */ -+ { 3, 2, 0, 0, 10 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | - AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, -@@ -2237,9 +2289,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ -- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ -- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ -+ { 2, 4, 0, 0, 32 }, /* R */ -+ { 0, 4, 0, 0, 32 }, /* G */ -+ { 1, 4, 0, 0, 32 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | - AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, -@@ -2250,9 +2302,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ -- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ -- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ -+ { 2, 4, 0, 0, 32 }, /* R */ -+ { 0, 4, 0, 0, 32 }, /* G */ -+ { 1, 4, 0, 0, 32 }, /* B */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB, - }, -@@ -2262,10 +2314,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ -- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ -- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ -- { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ -+ { 2, 4, 0, 0, 32 }, /* R */ -+ { 0, 4, 0, 0, 32 }, /* G */ -+ { 1, 4, 0, 0, 32 }, /* B */ -+ { 3, 4, 0, 0, 32 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | - AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB | -@@ -2277,10 +2329,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ -- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ -- { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ -- { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ -+ { 2, 4, 0, 0, 32 }, /* R */ -+ { 0, 4, 0, 0, 32 }, /* G */ -+ { 1, 4, 0, 0, 32 }, /* B */ -+ { 3, 4, 0, 0, 32 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA | - AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, -@@ -2299,7 +2351,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ -+ { 0, 4, 0, 0, 32 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT, - .alias = "yf32be", -@@ -2310,7 +2362,7 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 4, 0, 0, 32, 3, 31, 1 }, /* Y */ -+ { 0, 4, 0, 0, 32 }, /* Y */ - }, - .flags = AV_PIX_FMT_FLAG_FLOAT, - .alias = "yf32le", -@@ -2321,10 +2373,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ -+ { 3, 2, 0, 0, 12 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -2334,10 +2386,10 @@ - .log2_chroma_w = 1, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ -+ { 3, 2, 0, 0, 12 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -2347,10 +2399,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ -+ { 3, 2, 0, 0, 12 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -2360,10 +2412,10 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ -- { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */ -- { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */ -- { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */ -+ { 0, 2, 0, 0, 12 }, /* Y */ -+ { 1, 2, 0, 0, 12 }, /* U */ -+ { 2, 2, 0, 0, 12 }, /* V */ -+ { 3, 2, 0, 0, 12 }, /* A */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, - }, -@@ -2373,9 +2425,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */ -- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 2, 0, 0, 8 }, /* U */ -+ { 1, 2, 1, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -2385,9 +2437,9 @@ - .log2_chroma_w = 0, - .log2_chroma_h = 0, - .comp = { -- { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */ -- { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */ -- { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */ -+ { 0, 1, 0, 0, 8 }, /* Y */ -+ { 1, 2, 1, 0, 8 }, /* U */ -+ { 1, 2, 0, 0, 8 }, /* V */ - }, - .flags = AV_PIX_FMT_FLAG_PLANAR, - }, -@@ -2395,10 +2447,277 @@ - .name = "vulkan", - .flags = AV_PIX_FMT_FLAG_HWACCEL, - }, -+ [AV_PIX_FMT_P210BE] = { -+ .name = "p210be", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 6, 10 }, /* Y */ -+ { 1, 4, 0, 6, 10 }, /* U */ -+ { 1, 4, 2, 6, 10 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_P210LE] = { -+ .name = "p210le", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 6, 10 }, /* Y */ -+ { 1, 4, 0, 6, 10 }, /* U */ -+ { 1, 4, 2, 6, 10 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR, -+ }, -+ [AV_PIX_FMT_P410BE] = { -+ .name = "p410be", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 6, 10 }, /* Y */ -+ { 1, 4, 0, 6, 10 }, /* U */ -+ { 1, 4, 2, 6, 10 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_P410LE] = { -+ .name = "p410le", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 6, 10 }, /* Y */ -+ { 1, 4, 0, 6, 10 }, /* U */ -+ { 1, 4, 2, 6, 10 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR, -+ }, -+ [AV_PIX_FMT_P216BE] = { -+ .name = "p216be", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 4, 0, 0, 16 }, /* U */ -+ { 1, 4, 2, 0, 16 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_P216LE] = { -+ .name = "p216le", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 4, 0, 0, 16 }, /* U */ -+ { 1, 4, 2, 0, 16 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR, -+ }, -+ [AV_PIX_FMT_P416BE] = { -+ .name = "p416be", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 4, 0, 0, 16 }, /* U */ -+ { 1, 4, 2, 0, 16 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_P416LE] = { -+ .name = "p416le", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 2, 0, 0, 16 }, /* Y */ -+ { 1, 4, 0, 0, 16 }, /* U */ -+ { 1, 4, 2, 0, 16 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_PLANAR, -+ }, -+ [AV_PIX_FMT_VUYA] = { -+ .name = "vuya", -+ .nb_components = 4, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 4, 2, 0, 8 }, /* Y */ -+ { 0, 4, 1, 0, 8 }, /* U */ -+ { 0, 4, 0, 0, 8 }, /* V */ -+ { 0, 4, 3, 0, 8 }, /* A */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_ALPHA, -+ }, -+ [AV_PIX_FMT_VUYX] = { -+ .name = "vuyx", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 4, 2, 0, 8 }, /* Y */ -+ { 0, 4, 1, 0, 8 }, /* U */ -+ { 0, 4, 0, 0, 8 }, /* V */ -+ }, -+ }, -+ [AV_PIX_FMT_RGBAF16BE] = { -+ .name = "rgbaf16be", -+ .nb_components = 4, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 8, 0, 0, 16 }, /* R */ -+ { 0, 8, 2, 0, 16 }, /* G */ -+ { 0, 8, 4, 0, 16 }, /* B */ -+ { 0, 8, 6, 0, 16 }, /* A */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | -+ AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_FLOAT, -+ }, -+ [AV_PIX_FMT_RGBAF16LE] = { -+ .name = "rgbaf16le", -+ .nb_components = 4, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 8, 0, 0, 16 }, /* R */ -+ { 0, 8, 2, 0, 16 }, /* G */ -+ { 0, 8, 4, 0, 16 }, /* B */ -+ { 0, 8, 6, 0, 16 }, /* A */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA | -+ AV_PIX_FMT_FLAG_FLOAT, -+ }, -+ [AV_PIX_FMT_Y212LE] = { -+ .name = "y212le", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 4, 0, 4, 12 }, /* Y */ -+ { 0, 8, 2, 4, 12 }, /* U */ -+ { 0, 8, 6, 4, 12 }, /* V */ -+ }, -+ }, -+ [AV_PIX_FMT_Y212BE] = { -+ .name = "y212be", -+ .nb_components = 3, -+ .log2_chroma_w = 1, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 4, 0, 4, 12 }, /* Y */ -+ { 0, 8, 2, 4, 12 }, /* U */ -+ { 0, 8, 6, 4, 12 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_XV30LE] = { -+ .name = "xv30le", -+ .nb_components= 3, -+ .log2_chroma_w= 0, -+ .log2_chroma_h= 0, -+ .comp = { -+ { 0, 4, 1, 2, 10 }, /* Y */ -+ { 0, 4, 0, 0, 10 }, /* U */ -+ { 0, 4, 2, 4, 10 }, /* V */ -+ }, -+ }, -+ [AV_PIX_FMT_XV30BE] = { -+ .name = "xv30be", -+ .nb_components= 3, -+ .log2_chroma_w= 0, -+ .log2_chroma_h= 0, -+ .comp = { -+ { 0, 32, 10, 0, 10 }, /* Y */ -+ { 0, 32, 0, 0, 10 }, /* U */ -+ { 0, 32, 20, 0, 10 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_BITSTREAM, -+ }, -+ [AV_PIX_FMT_XV36LE] = { -+ .name = "xv36le", -+ .nb_components= 3, -+ .log2_chroma_w= 0, -+ .log2_chroma_h= 0, -+ .comp = { -+ { 0, 8, 2, 4, 12 }, /* Y */ -+ { 0, 8, 0, 4, 12 }, /* U */ -+ { 0, 8, 4, 4, 12 }, /* V */ -+ }, -+ }, -+ [AV_PIX_FMT_XV36BE] = { -+ .name = "xv36be", -+ .nb_components= 3, -+ .log2_chroma_w= 0, -+ .log2_chroma_h= 0, -+ .comp = { -+ { 0, 8, 2, 4, 12 }, /* Y */ -+ { 0, 8, 0, 4, 12 }, /* U */ -+ { 0, 8, 4, 4, 12 }, /* V */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_BE, -+ }, -+ [AV_PIX_FMT_RGBF32BE] = { -+ .name = "rgbf32be", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 12, 0, 0, 32 }, /* R */ -+ { 0, 12, 4, 0, 32 }, /* G */ -+ { 0, 12, 8, 0, 32 }, /* B */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | -+ AV_PIX_FMT_FLAG_FLOAT, -+ }, -+ [AV_PIX_FMT_RGBF32LE] = { -+ .name = "rgbf32le", -+ .nb_components = 3, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 12, 0, 0, 32 }, /* R */ -+ { 0, 12, 4, 0, 32 }, /* G */ -+ { 0, 12, 8, 0, 32 }, /* B */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, -+ }, -+ [AV_PIX_FMT_RGBAF32BE] = { -+ .name = "rgbaf32be", -+ .nb_components = 4, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 16, 0, 0, 32 }, /* R */ -+ { 0, 16, 4, 0, 32 }, /* G */ -+ { 0, 16, 8, 0, 32 }, /* B */ -+ { 0, 16, 12, 0, 32 }, /* A */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | -+ AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_ALPHA, -+ }, -+ [AV_PIX_FMT_RGBAF32LE] = { -+ .name = "rgbaf32le", -+ .nb_components = 4, -+ .log2_chroma_w = 0, -+ .log2_chroma_h = 0, -+ .comp = { -+ { 0, 16, 0, 0, 32 }, /* R */ -+ { 0, 16, 4, 0, 32 }, /* G */ -+ { 0, 16, 8, 0, 32 }, /* B */ -+ { 0, 16, 12, 0, 32 }, /* A */ -+ }, -+ .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT | -+ AV_PIX_FMT_FLAG_ALPHA, -+ }, - }; --#if FF_API_PLUS1_MINUS1 --FF_ENABLE_DEPRECATION_WARNINGS --#endif - - static const char * const color_range_names[] = { - [AVCOL_RANGE_UNSPECIFIED] = "unknown", -@@ -2515,10 +2834,6 @@ - pix_fmt = get_pix_fmt_internal(name2); - } - --#if FF_API_VAAPI -- if (pix_fmt == AV_PIX_FMT_NONE && !strcmp(name, "vaapi")) -- pix_fmt = AV_PIX_FMT_VAAPI; --#endif - return pix_fmt; - } - -@@ -2625,47 +2940,6 @@ - return ret; - } - --void ff_check_pixfmt_descriptors(void){ -- int i, j; -- -- for (i=0; iname && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags) -- continue; --// av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name); -- av_assert0(d->log2_chroma_w <= 3); -- av_assert0(d->log2_chroma_h <= 3); -- av_assert0(d->nb_components <= 4); -- av_assert0(d->name && d->name[0]); -- av_assert2(av_get_pix_fmt(d->name) == i); -- -- for (j=0; jcomp); j++) { -- const AVComponentDescriptor *c = &d->comp[j]; -- if(j>=d->nb_components) { -- av_assert0(!c->plane && !c->step && !c->offset && !c->shift && !c->depth); -- continue; -- } -- if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) { -- av_assert0(c->step >= c->depth); -- } else { -- av_assert0(8*c->step >= c->depth); -- } -- if (d->flags & AV_PIX_FMT_FLAG_BAYER) -- continue; -- av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0); -- av_assert0(tmp[0] == 0 && tmp[1] == 0); -- tmp[0] = tmp[1] = (1ULL << c->depth) - 1; -- av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2); -- } -- } --} -- -- - enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt) - { - const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); -@@ -2779,9 +3053,16 @@ - - for (i = 0; i < nb_components; i++) { - int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1); -- if (src_desc->comp[i].depth - 1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) { -+ int depth_delta = src_desc->comp[i].depth - 1 - depth_minus1; -+ if (depth_delta > 0 && (consider & FF_LOSS_DEPTH)) { - loss |= FF_LOSS_DEPTH; - score -= 65536 >> depth_minus1; -+ } else if (depth_delta < 0 && (consider & FF_LOSS_EXCESS_DEPTH)) { -+ // Favour formats where bit depth exactly matches. If all other -+ // scoring is equal, we'd rather use the bit depth that most closely -+ // matches the source. -+ loss |= FF_LOSS_EXCESS_DEPTH; -+ score += depth_delta; - } - } - -@@ -2801,6 +3082,28 @@ - } - } - -+ if (consider & FF_LOSS_EXCESS_RESOLUTION) { -+ // Favour formats where chroma subsampling exactly matches. If all other -+ // scoring is equal, we'd rather use the subsampling that most closely -+ // matches the source. -+ if (dst_desc->log2_chroma_w < src_desc->log2_chroma_w) { -+ loss |= FF_LOSS_EXCESS_RESOLUTION; -+ score -= 1 << (src_desc->log2_chroma_w - dst_desc->log2_chroma_w); -+ } -+ -+ if (dst_desc->log2_chroma_h < src_desc->log2_chroma_h) { -+ loss |= FF_LOSS_EXCESS_RESOLUTION; -+ score -= 1 << (src_desc->log2_chroma_h - dst_desc->log2_chroma_h); -+ } -+ -+ // don't favour 411 over 420, because 420 has much better support on the -+ // decoder side. -+ if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 2 && -+ dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 2) { -+ score += 4; -+ } -+ } -+ - if(consider & FF_LOSS_COLORSPACE) - switch(dst_color) { - case FF_COLOR_RGB: -@@ -2999,3 +3302,26 @@ - - return AVERROR(EINVAL); - } -+ -+int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos) -+{ -+ if (pos <= AVCHROMA_LOC_UNSPECIFIED || pos >= AVCHROMA_LOC_NB) -+ return AVERROR(EINVAL); -+ pos--; -+ -+ *xpos = (pos&1) * 128; -+ *ypos = ((pos>>1)^(pos<4)) * 128; -+ -+ return 0; -+} -+ -+enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos) -+{ -+ int pos, xout, yout; -+ -+ for (pos = AVCHROMA_LOC_UNSPECIFIED + 1; pos < AVCHROMA_LOC_NB; pos++) { -+ if (av_chroma_location_enum_to_pos(&xout, &yout, pos) == 0 && xout == xpos && yout == ypos) -+ return pos; -+ } -+ return AVCHROMA_LOC_UNSPECIFIED; -+} -diff -Naur a/media/ffvpx/libavutil/pixdesc.h b/media/ffvpx/libavutil/pixdesc.h ---- a/media/ffvpx/libavutil/pixdesc.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/pixdesc.h 2023-04-06 12:50:06.977471295 +0200 -@@ -26,7 +26,6 @@ - - #include "attributes.h" - #include "pixfmt.h" --#include "version.h" - - typedef struct AVComponentDescriptor { - /** -@@ -56,17 +55,6 @@ - * Number of bits in the component. - */ - int depth; -- --#if FF_API_PLUS1_MINUS1 -- /** deprecated, use step instead */ -- attribute_deprecated int step_minus1; -- -- /** deprecated, use depth instead */ -- attribute_deprecated int depth_minus1; -- -- /** deprecated, use offset instead */ -- attribute_deprecated int offset_plus1; --#endif - } AVComponentDescriptor; - - /** -@@ -147,26 +135,6 @@ - */ - #define AV_PIX_FMT_FLAG_RGB (1 << 5) - --#if FF_API_PSEUDOPAL --/** -- * The pixel format is "pseudo-paletted". This means that it contains a -- * fixed palette in the 2nd plane but the palette is fixed/constant for each -- * PIX_FMT. This allows interpreting the data as if it was PAL8, which can -- * in some cases be simpler. Or the data can be interpreted purely based on -- * the pixel format without using the palette. -- * An example of a pseudo-paletted format is AV_PIX_FMT_GRAY8 -- * -- * @deprecated This flag is deprecated, and will be removed. When it is removed, -- * the extra palette allocation in AVFrame.data[1] is removed as well. Only -- * actual paletted formats (as indicated by AV_PIX_FMT_FLAG_PAL) will have a -- * palette. Starting with FFmpeg versions which have this flag deprecated, the -- * extra "pseudo" palette is already ignored, and API users are not required to -- * allocate a palette for AV_PIX_FMT_FLAG_PSEUDOPAL formats (it was required -- * before the deprecation, though). -- */ --#define AV_PIX_FMT_FLAG_PSEUDOPAL (1 << 6) --#endif -- - /** - * The pixel format has an alpha channel. This is set on all formats that - * support alpha in some way, including AV_PIX_FMT_PAL8. The alpha is always -@@ -297,6 +265,28 @@ - int av_chroma_location_from_name(const char *name); - - /** -+ * Converts AVChromaLocation to swscale x/y chroma position. -+ * -+ * The positions represent the chroma (0,0) position in a coordinates system -+ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 -+ * -+ * @param xpos horizontal chroma sample position -+ * @param ypos vertical chroma sample position -+ */ -+int av_chroma_location_enum_to_pos(int *xpos, int *ypos, enum AVChromaLocation pos); -+ -+/** -+ * Converts swscale x/y chroma position to AVChromaLocation. -+ * -+ * The positions represent the chroma (0,0) position in a coordinates system -+ * with luma (0,0) representing the origin and luma(1,1) representing 256,256 -+ * -+ * @param xpos horizontal chroma sample position -+ * @param ypos vertical chroma sample position -+ */ -+enum AVChromaLocation av_chroma_location_pos_to_enum(int xpos, int ypos); -+ -+/** - * Return the pixel format corresponding to name. - * - * If there is no pixel format with name name, then looks for a -@@ -389,12 +379,15 @@ - */ - enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt); - --#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ --#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ --#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ --#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ --#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ --#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ -+#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */ -+#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */ -+#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */ -+#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */ -+#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */ -+#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */ -+#define FF_LOSS_EXCESS_RESOLUTION 0x0040 /**< loss due to unneeded extra resolution */ -+#define FF_LOSS_EXCESS_DEPTH 0x0080 /**< loss due to unneeded extra color depth */ -+ - - /** - * Compute what kind of losses will occur when converting from one specific -diff -Naur a/media/ffvpx/libavutil/pixelutils.c b/media/ffvpx/libavutil/pixelutils.c ---- a/media/ffvpx/libavutil/pixelutils.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/pixelutils.c 2023-04-06 12:49:40.262395253 +0200 -@@ -16,12 +16,17 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include -+ - #include "config.h" --#include "common.h" - #include "pixelutils.h" --#include "internal.h" - - #if CONFIG_PIXELUTILS -+#include -+#include -+ -+#include "attributes.h" -+#include "macros.h" - - #include "x86/pixelutils.h" - -@@ -60,7 +65,8 @@ - block_sad_16x16_c, - block_sad_32x32_c, - }; -- -+#else -+#include "log.h" - #endif /* CONFIG_PIXELUTILS */ - - av_pixelutils_sad_fn av_pixelutils_get_sad_fn(int w_bits, int h_bits, int aligned, void *log_ctx) -diff -Naur a/media/ffvpx/libavutil/pixelutils.h b/media/ffvpx/libavutil/pixelutils.h ---- a/media/ffvpx/libavutil/pixelutils.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/pixelutils.h 2023-04-06 12:49:40.262395253 +0200 -@@ -21,7 +21,6 @@ - - #include - #include --#include "common.h" - - /** - * Sum of abs(src1[x] - src2[x]) -diff -Naur a/media/ffvpx/libavutil/pixfmt.h b/media/ffvpx/libavutil/pixfmt.h ---- a/media/ffvpx/libavutil/pixfmt.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/pixfmt.h 2023-04-06 12:50:24.494176623 +0200 -@@ -112,21 +112,11 @@ - AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian , X=unused/undefined - AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined - --#if FF_API_VAAPI -- /** @name Deprecated pixel formats */ -- /**@{*/ -- AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers -- AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers -- AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID -- /**@}*/ -- AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, --#else - /** - * Hardware acceleration through VA-API, data[3] contains a - * VASurfaceID. - */ - AV_PIX_FMT_VAAPI, --#endif - - AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian - AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian -@@ -216,8 +206,36 @@ - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian - /** -- * HW acceleration through QSV, data[3] contains a pointer to the -- * mfxFrameSurface1 structure. -+ * HW acceleration through QSV, data[3] contains a pointer to the -+ * mfxFrameSurface1 structure. -+ * -+ * Before FFmpeg 5.0: -+ * mfxFrameSurface1.Data.MemId contains a pointer when importing -+ * the following frames as QSV frames: -+ * -+ * VAAPI: -+ * mfxFrameSurface1.Data.MemId contains a pointer to VASurfaceID -+ * -+ * DXVA2: -+ * mfxFrameSurface1.Data.MemId contains a pointer to IDirect3DSurface9 -+ * -+ * FFmpeg 5.0 and above: -+ * mfxFrameSurface1.Data.MemId contains a pointer to the mfxHDLPair -+ * structure when importing the following frames as QSV frames: -+ * -+ * VAAPI: -+ * mfxHDLPair.first contains a VASurfaceID pointer. -+ * mfxHDLPair.second is always MFX_INFINITE. -+ * -+ * DXVA2: -+ * mfxHDLPair.first contains IDirect3DSurface9 pointer. -+ * mfxHDLPair.second is always MFX_INFINITE. -+ * -+ * D3D11: -+ * mfxHDLPair.first contains a ID3D11Texture2D pointer. -+ * mfxHDLPair.second contains the texture array index of the frame if the -+ * ID3D11Texture2D is an array texture, or always MFX_INFINITE if it is a -+ * normal texture. - */ - AV_PIX_FMT_QSV, - /** -@@ -270,7 +288,9 @@ - AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian - AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian - -+#if FF_API_XVMC - AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing -+#endif - - AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian - AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian -@@ -360,6 +380,46 @@ - - AV_PIX_FMT_X2RGB10LE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), little-endian, X=unused/undefined - AV_PIX_FMT_X2RGB10BE, ///< packed RGB 10:10:10, 30bpp, (msb)2X 10R 10G 10B(lsb), big-endian, X=unused/undefined -+ AV_PIX_FMT_X2BGR10LE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), little-endian, X=unused/undefined -+ AV_PIX_FMT_X2BGR10BE, ///< packed BGR 10:10:10, 30bpp, (msb)2X 10B 10G 10R(lsb), big-endian, X=unused/undefined -+ -+ AV_PIX_FMT_P210BE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, big-endian -+ AV_PIX_FMT_P210LE, ///< interleaved chroma YUV 4:2:2, 20bpp, data in the high bits, little-endian -+ -+ AV_PIX_FMT_P410BE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, big-endian -+ AV_PIX_FMT_P410LE, ///< interleaved chroma YUV 4:4:4, 30bpp, data in the high bits, little-endian -+ -+ AV_PIX_FMT_P216BE, ///< interleaved chroma YUV 4:2:2, 32bpp, big-endian -+ AV_PIX_FMT_P216LE, ///< interleaved chroma YUV 4:2:2, 32bpp, little-endian -+ -+ AV_PIX_FMT_P416BE, ///< interleaved chroma YUV 4:4:4, 48bpp, big-endian -+ AV_PIX_FMT_P416LE, ///< interleaved chroma YUV 4:4:4, 48bpp, little-endian -+ -+ AV_PIX_FMT_VUYA, ///< packed VUYA 4:4:4, 32bpp, VUYAVUYA... -+ -+ AV_PIX_FMT_RGBAF16BE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., big-endian -+ AV_PIX_FMT_RGBAF16LE, ///< IEEE-754 half precision packed RGBA 16:16:16:16, 64bpp, RGBARGBA..., little-endian -+ -+ AV_PIX_FMT_VUYX, ///< packed VUYX 4:4:4, 32bpp, Variant of VUYA where alpha channel is left undefined -+ -+ AV_PIX_FMT_P012LE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, little-endian -+ AV_PIX_FMT_P012BE, ///< like NV12, with 12bpp per component, data in the high bits, zeros in the low bits, big-endian -+ -+ AV_PIX_FMT_Y212BE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, big-endian -+ AV_PIX_FMT_Y212LE, ///< packed YUV 4:2:2 like YUYV422, 24bpp, data in the high bits, zeros in the low bits, little-endian -+ -+ AV_PIX_FMT_XV30BE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), big-endian, variant of Y410 where alpha channel is left undefined -+ AV_PIX_FMT_XV30LE, ///< packed XVYU 4:4:4, 32bpp, (msb)2X 10V 10Y 10U(lsb), little-endian, variant of Y410 where alpha channel is left undefined -+ -+ AV_PIX_FMT_XV36BE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, big-endian, variant of Y412 where alpha channel is left undefined -+ AV_PIX_FMT_XV36LE, ///< packed XVYU 4:4:4, 48bpp, data in the high bits, zeros in the low bits, little-endian, variant of Y412 where alpha channel is left undefined -+ -+ AV_PIX_FMT_RGBF32BE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., big-endian -+ AV_PIX_FMT_RGBF32LE, ///< IEEE-754 single precision packed RGB 32:32:32, 96bpp, RGBRGB..., little-endian -+ -+ AV_PIX_FMT_RGBAF32BE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., big-endian -+ AV_PIX_FMT_RGBAF32LE, ///< IEEE-754 single precision packed RGBA 32:32:32:32, 128bpp, RGBARGBA..., little-endian -+ - AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions - }; - -@@ -446,39 +506,54 @@ - #define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) - #define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) - #define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) -+#define AV_PIX_FMT_P012 AV_PIX_FMT_NE(P012BE, P012LE) - #define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) - - #define AV_PIX_FMT_Y210 AV_PIX_FMT_NE(Y210BE, Y210LE) -+#define AV_PIX_FMT_Y212 AV_PIX_FMT_NE(Y212BE, Y212LE) -+#define AV_PIX_FMT_XV30 AV_PIX_FMT_NE(XV30BE, XV30LE) -+#define AV_PIX_FMT_XV36 AV_PIX_FMT_NE(XV36BE, XV36LE) - #define AV_PIX_FMT_X2RGB10 AV_PIX_FMT_NE(X2RGB10BE, X2RGB10LE) -+#define AV_PIX_FMT_X2BGR10 AV_PIX_FMT_NE(X2BGR10BE, X2BGR10LE) -+ -+#define AV_PIX_FMT_P210 AV_PIX_FMT_NE(P210BE, P210LE) -+#define AV_PIX_FMT_P410 AV_PIX_FMT_NE(P410BE, P410LE) -+#define AV_PIX_FMT_P216 AV_PIX_FMT_NE(P216BE, P216LE) -+#define AV_PIX_FMT_P416 AV_PIX_FMT_NE(P416BE, P416LE) -+ -+#define AV_PIX_FMT_RGBAF16 AV_PIX_FMT_NE(RGBAF16BE, RGBAF16LE) -+ -+#define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE) -+#define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE) - - /** - * Chromaticity coordinates of the source primaries. -- * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. -+ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.1 and ITU-T H.273. - */ - enum AVColorPrimaries { - AVCOL_PRI_RESERVED0 = 0, -- AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B -+ AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP 177 Annex B - AVCOL_PRI_UNSPECIFIED = 2, - AVCOL_PRI_RESERVED = 3, - AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - - AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM - AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC -- AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above -+ AVCOL_PRI_SMPTE240M = 7, ///< identical to above, also called "SMPTE C" even though it uses D65 - AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C - AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 -- AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E / JEDEC P22 phosphors -+ AVCOL_PRI_EBU3213 = 22, ///< EBU Tech. 3213-E (nothing there) / one of JEDEC P22 group phosphors - AVCOL_PRI_JEDEC_P22 = AVCOL_PRI_EBU3213, - AVCOL_PRI_NB ///< Not part of ABI - }; - - /** - * Color Transfer Characteristic. -- * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. -+ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.2. - */ - enum AVColorTransferCharacteristic { - AVCOL_TRC_RESERVED0 = 0, -@@ -507,18 +582,18 @@ - - /** - * YUV colorspace type. -- * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. -+ * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. - */ - enum AVColorSpace { -- AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) -- AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B -+ AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1 -+ AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B - AVCOL_SPC_UNSPECIFIED = 2, -- AVCOL_SPC_RESERVED = 3, -+ AVCOL_SPC_RESERVED = 3, ///< reserved for future use by ITU-T and ISO/IEC just like 15-255 are - AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) - AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 -- AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC -- AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above -- AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 -+ AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above -+ AVCOL_SPC_SMPTE240M = 7, ///< derived from 170M primaries and D65 white point, 170M is derived from BT470 System M's primaries -+ AVCOL_SPC_YCGCO = 8, ///< used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 - AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, - AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system - AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system -@@ -540,9 +615,9 @@ - * recommended, as it also defines the full range representation. - * - * Common definitions: -- * - For RGB and luminance planes such as Y in YCbCr and I in ICtCp, -+ * - For RGB and luma planes such as Y in YCbCr and I in ICtCp, - * 'E' is the original value in range of 0.0 to 1.0. -- * - For chrominance planes such as Cb,Cr and Ct,Cp, 'E' is the original -+ * - For chroma planes such as Cb,Cr and Ct,Cp, 'E' is the original - * value in range of -0.5 to 0.5. - * - 'n' is the output bit depth. - * - For additional definitions such as rounding and clipping to valid n -@@ -554,13 +629,13 @@ - /** - * Narrow or limited range content. - * -- * - For luminance planes: -+ * - For luma planes: - * - * (219 * E + 16) * 2^(n-8) - * - * F.ex. the range of 16-235 for 8 bits - * -- * - For chrominance planes: -+ * - For chroma planes: - * - * (224 * E + 128) * 2^(n-8) - * -@@ -571,13 +646,13 @@ - /** - * Full range content. - * -- * - For RGB and luminance planes: -+ * - For RGB and luma planes: - * - * (2^n - 1) * E - * - * F.ex. the range of 0-255 for 8 bits - * -- * - For chrominance planes: -+ * - For chroma planes: - * - * (2^n - 1) * E + 2^(n - 1) - * -diff -Naur a/media/ffvpx/libavutil/qsort.h b/media/ffvpx/libavutil/qsort.h ---- a/media/ffvpx/libavutil/qsort.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/qsort.h 2023-04-06 12:49:40.262395253 +0200 -@@ -21,7 +21,7 @@ - #ifndef AVUTIL_QSORT_H - #define AVUTIL_QSORT_H - --#include "common.h" -+#include "macros.h" - - - /** -diff -Naur a/media/ffvpx/libavutil/rational.h b/media/ffvpx/libavutil/rational.h ---- a/media/ffvpx/libavutil/rational.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/rational.h 2023-04-06 12:50:06.977471295 +0200 -@@ -179,7 +179,8 @@ - * Find which of the two rationals is closer to another rational. - * - * @param q Rational to be compared against -- * @param q1,q2 Rationals to be tested -+ * @param q1 Rational to be tested -+ * @param q2 Rational to be tested - * @return One of the following values: - * - 1 if `q1` is nearer to `q` than `q2` - * - -1 if `q2` is nearer to `q` than `q1` -diff -Naur a/media/ffvpx/libavutil/samplefmt.c b/media/ffvpx/libavutil/samplefmt.c ---- a/media/ffvpx/libavutil/samplefmt.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/samplefmt.c 2023-04-06 12:49:40.262395253 +0200 -@@ -16,11 +16,13 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include "common.h" -+#include "error.h" -+#include "macros.h" -+#include "mem.h" - #include "samplefmt.h" - -+#include - #include --#include - #include - - typedef struct SampleFmtInfo { -@@ -160,13 +162,20 @@ - if (buf_size < 0) - return buf_size; - -+ if (linesize) -+ *linesize = line_size; -+ -+ memset(audio_data, 0, planar -+ ? sizeof(*audio_data) * nb_channels -+ : sizeof(*audio_data)); -+ -+ if (!buf) -+ return buf_size; -+ - audio_data[0] = (uint8_t *)buf; - for (ch = 1; planar && ch < nb_channels; ch++) - audio_data[ch] = audio_data[ch-1] + line_size; - -- if (linesize) -- *linesize = line_size; -- - return buf_size; - } - -diff -Naur a/media/ffvpx/libavutil/samplefmt.h b/media/ffvpx/libavutil/samplefmt.h ---- a/media/ffvpx/libavutil/samplefmt.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/samplefmt.h 2023-04-06 12:50:06.977471295 +0200 -@@ -21,9 +21,6 @@ - - #include - --#include "avutil.h" --#include "attributes.h" -- - /** - * @addtogroup lavu_audio - * @{ -@@ -195,9 +192,8 @@ - * @param nb_samples the number of samples in a single channel - * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) -- * @return >=0 on success or a negative error code on failure -- * @todo return minimum size in bytes required for the buffer in case -- * of success at the next bump -+ * @return minimum size in bytes required for the buffer on success, -+ * or a negative error code on failure - */ - int av_samples_fill_arrays(uint8_t **audio_data, int *linesize, - const uint8_t *buf, -@@ -217,6 +213,7 @@ - * @param[out] linesize aligned size for audio buffer(s), may be NULL - * @param nb_channels number of audio channels - * @param nb_samples number of samples per channel -+ * @param sample_fmt the sample format - * @param align buffer size alignment (0 = default, 1 = no alignment) - * @return >=0 on success or a negative error code on failure - * @todo return the size of the allocated buffer in case of success at the next bump -diff -Naur a/media/ffvpx/libavutil/slicethread.c b/media/ffvpx/libavutil/slicethread.c ---- a/media/ffvpx/libavutil/slicethread.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/slicethread.c 2023-04-06 12:50:06.977471295 +0200 -@@ -17,11 +17,15 @@ - */ - - #include -+#include "cpu.h" -+#include "internal.h" - #include "slicethread.h" - #include "mem.h" - #include "thread.h" - #include "avassert.h" - -+#define MAX_AUTO_THREADS 16 -+ - #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS - - typedef struct WorkerContext { -@@ -103,7 +107,7 @@ - if (!nb_threads) { - int nb_cpus = av_cpu_count(); - if (nb_cpus > 1) -- nb_threads = nb_cpus + 1; -+ nb_threads = FFMIN(nb_cpus + 1, MAX_AUTO_THREADS); - else - nb_threads = 1; - } -@@ -239,7 +243,7 @@ - int nb_threads) - { - *pctx = NULL; -- return AVERROR(EINVAL); -+ return AVERROR(ENOSYS); - } - - void avpriv_slicethread_execute(AVSliceThread *ctx, int nb_jobs, int execute_main) -diff -Naur a/media/ffvpx/libavutil/thread.h b/media/ffvpx/libavutil/thread.h ---- a/media/ffvpx/libavutil/thread.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/thread.h 2023-04-06 12:50:06.977471295 +0200 -@@ -24,6 +24,12 @@ - - #include "config.h" - -+#if HAVE_PRCTL -+#include -+#endif -+ -+#include "error.h" -+ - #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS - - #if HAVE_PTHREADS -@@ -31,7 +37,10 @@ - - #if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1 - -+#include -+ - #include "log.h" -+#include "macros.h" - - #define ASSERT_PTHREAD_ABORT(func, ret) do { \ - char errbuf[AV_ERROR_MAX_STRING_SIZE] = ""; \ -@@ -183,4 +192,13 @@ - - #endif - -+static inline int ff_thread_setname(const char *name) -+{ -+#if HAVE_PRCTL -+ return AVERROR(prctl(PR_SET_NAME, name)); -+#endif -+ -+ return AVERROR(ENOSYS); -+} -+ - #endif /* AVUTIL_THREAD_H */ -diff -Naur a/media/ffvpx/libavutil/threadmessage.c b/media/ffvpx/libavutil/threadmessage.c ---- a/media/ffvpx/libavutil/threadmessage.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/threadmessage.c 2023-04-06 12:49:40.262395253 +0200 -@@ -18,13 +18,15 @@ - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include - #include "fifo.h" -+#include "mem.h" - #include "threadmessage.h" - #include "thread.h" - - struct AVThreadMessageQueue { - #if HAVE_THREADS -- AVFifoBuffer *fifo; -+ AVFifo *fifo; - pthread_mutex_t lock; - pthread_cond_t cond_recv; - pthread_cond_t cond_send; -@@ -64,7 +66,7 @@ - av_free(rmq); - return AVERROR(ret); - } -- if (!(rmq->fifo = av_fifo_alloc(elsize * nelem))) { -+ if (!(rmq->fifo = av_fifo_alloc2(nelem, elsize, 0))) { - pthread_cond_destroy(&rmq->cond_send); - pthread_cond_destroy(&rmq->cond_recv); - pthread_mutex_destroy(&rmq->lock); -@@ -93,7 +95,7 @@ - #if HAVE_THREADS - if (*mq) { - av_thread_message_flush(*mq); -- av_fifo_freep(&(*mq)->fifo); -+ av_fifo_freep2(&(*mq)->fifo); - pthread_cond_destroy(&(*mq)->cond_send); - pthread_cond_destroy(&(*mq)->cond_recv); - pthread_mutex_destroy(&(*mq)->lock); -@@ -107,9 +109,9 @@ - #if HAVE_THREADS - int ret; - pthread_mutex_lock(&mq->lock); -- ret = av_fifo_size(mq->fifo); -+ ret = av_fifo_can_read(mq->fifo); - pthread_mutex_unlock(&mq->lock); -- return ret / mq->elsize; -+ return ret; - #else - return AVERROR(ENOSYS); - #endif -@@ -121,14 +123,14 @@ - void *msg, - unsigned flags) - { -- while (!mq->err_send && av_fifo_space(mq->fifo) < mq->elsize) { -+ while (!mq->err_send && !av_fifo_can_write(mq->fifo)) { - if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) - return AVERROR(EAGAIN); - pthread_cond_wait(&mq->cond_send, &mq->lock); - } - if (mq->err_send) - return mq->err_send; -- av_fifo_generic_write(mq->fifo, msg, mq->elsize, NULL); -+ av_fifo_write(mq->fifo, msg, 1); - /* one message is sent, signal one receiver */ - pthread_cond_signal(&mq->cond_recv); - return 0; -@@ -138,14 +140,14 @@ - void *msg, - unsigned flags) - { -- while (!mq->err_recv && av_fifo_size(mq->fifo) < mq->elsize) { -+ while (!mq->err_recv && !av_fifo_can_read(mq->fifo)) { - if ((flags & AV_THREAD_MESSAGE_NONBLOCK)) - return AVERROR(EAGAIN); - pthread_cond_wait(&mq->cond_recv, &mq->lock); - } -- if (av_fifo_size(mq->fifo) < mq->elsize) -+ if (!av_fifo_can_read(mq->fifo)) - return mq->err_recv; -- av_fifo_generic_read(mq->fifo, msg, mq->elsize, NULL); -+ av_fifo_read(mq->fifo, msg, 1); - /* one message space appeared, signal one sender */ - pthread_cond_signal(&mq->cond_send); - return 0; -@@ -208,25 +210,25 @@ - } - - #if HAVE_THREADS --static void free_func_wrap(void *arg, void *msg, int size) -+static int free_func_wrap(void *arg, void *buf, size_t *nb_elems) - { - AVThreadMessageQueue *mq = arg; -- mq->free_func(msg); -+ uint8_t *msg = buf; -+ for (size_t i = 0; i < *nb_elems; i++) -+ mq->free_func(msg + i * mq->elsize); -+ return 0; - } - #endif - - void av_thread_message_flush(AVThreadMessageQueue *mq) - { - #if HAVE_THREADS -- int used, off; -- void *free_func = mq->free_func; -+ size_t used; - - pthread_mutex_lock(&mq->lock); -- used = av_fifo_size(mq->fifo); -- if (free_func) -- for (off = 0; off < used; off += mq->elsize) -- av_fifo_generic_peek_at(mq->fifo, mq, off, mq->elsize, free_func_wrap); -- av_fifo_drain(mq->fifo, used); -+ used = av_fifo_can_read(mq->fifo); -+ if (mq->free_func) -+ av_fifo_read_to_cb(mq->fifo, free_func_wrap, mq, &used); - /* only the senders need to be notified since the queue is empty and there - * is nothing to read */ - pthread_cond_broadcast(&mq->cond_send); -diff -Naur a/media/ffvpx/libavutil/time.c b/media/ffvpx/libavutil/time.c ---- a/media/ffvpx/libavutil/time.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/time.c 2023-04-06 12:50:20.234005184 +0200 -@@ -33,7 +33,7 @@ - #include - #endif - --#include "time.h" -+#include "fftime.h" - #include "error.h" - - int64_t av_gettime(void) -diff -Naur a/media/ffvpx/libavutil/timecode.c b/media/ffvpx/libavutil/timecode.c ---- a/media/ffvpx/libavutil/timecode.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/timecode.c 2023-04-06 12:49:40.262395253 +0200 -@@ -27,6 +27,7 @@ - */ - - #include -+#include "common.h" - #include "timecode.h" - #include "log.h" - #include "error.h" -@@ -103,7 +104,7 @@ - { - int fps = tc->fps; - int drop = tc->flags & AV_TIMECODE_FLAG_DROPFRAME; -- int hh, mm, ss, ff, neg = 0; -+ int hh, mm, ss, ff, ff_len, neg = 0; - - framenum += tc->start; - if (drop) -@@ -118,9 +119,10 @@ - hh = framenum / (fps*3600LL); - if (tc->flags & AV_TIMECODE_FLAG_24HOURSMAX) - hh = hh % 24; -- snprintf(buf, AV_TIMECODE_STR_SIZE, "%s%02d:%02d:%02d%c%02d", -+ ff_len = fps > 10000 ? 5 : fps > 1000 ? 4 : fps > 100 ? 3 : fps > 10 ? 2 : 1; -+ snprintf(buf, AV_TIMECODE_STR_SIZE, "%s%02d:%02d:%02d%c%0*d", - neg ? "-" : "", -- hh, mm, ss, drop ? ';' : ':', ff); -+ hh, mm, ss, drop ? ';' : ':', ff_len, ff); - return buf; - } - -diff -Naur a/media/ffvpx/libavutil/timer.h b/media/ffvpx/libavutil/timer.h ---- a/media/ffvpx/libavutil/timer.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/timer.h 2023-04-06 12:50:06.977471295 +0200 -@@ -42,10 +42,13 @@ - #include - #include - --#if HAVE_MACH_ABSOLUTE_TIME -+#if CONFIG_MACOS_KPERF -+#include "macos_kperf.h" -+#elif HAVE_MACH_ABSOLUTE_TIME - #include - #endif - -+#include "common.h" - #include "log.h" - - #if ARCH_AARCH64 -@@ -54,6 +57,8 @@ - # include "arm/timer.h" - #elif ARCH_PPC - # include "ppc/timer.h" -+#elif ARCH_RISCV -+# include "riscv/timer.h" - #elif ARCH_X86 - # include "x86/timer.h" - #endif -@@ -125,6 +130,16 @@ - read(linux_perf_fd, &tperf, sizeof(tperf)); \ - TIMER_REPORT(id, tperf) - -+#elif CONFIG_MACOS_KPERF -+ -+#define START_TIMER \ -+ uint64_t tperf; \ -+ ff_kperf_init(); \ -+ tperf = ff_kperf_cycles(); -+ -+#define STOP_TIMER(id) \ -+ TIMER_REPORT(id, ff_kperf_cycles() - tperf); -+ - #elif defined(AV_READ_TIME) - #define START_TIMER \ - uint64_t tend; \ -diff -Naur a/media/ffvpx/libavutil/utils.c b/media/ffvpx/libavutil/utils.c ---- a/media/ffvpx/libavutil/utils.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/utils.c 2023-04-06 12:49:40.262395253 +0200 -@@ -19,60 +19,12 @@ - #include "config.h" - #include "avutil.h" - #include "avassert.h" --#include "samplefmt.h" --#include "internal.h" - - /** - * @file - * various utility functions - */ - --#include "libavutil/ffversion.h" --const char av_util_ffversion[] = "FFmpeg version " FFMPEG_VERSION; -- --const char *av_version_info(void) --{ -- return FFMPEG_VERSION; --} -- --unsigned avutil_version(void) --{ -- static int checks_done; -- if (checks_done) -- return LIBAVUTIL_VERSION_INT; -- -- av_assert0(AV_SAMPLE_FMT_DBLP == 9); -- av_assert0(AVMEDIA_TYPE_ATTACHMENT == 4); -- av_assert0(AV_PICTURE_TYPE_BI == 7); -- av_assert0(LIBAVUTIL_VERSION_MICRO >= 100); -- av_assert0(HAVE_MMX2 == HAVE_MMXEXT); -- -- av_assert0(((size_t)-1) > 0); // C guarantees this but if false on a platform we care about revert at least b284e1ffe343d6697fb950d1ee517bafda8a9844 -- -- if (av_sat_dadd32(1, 2) != 5) { -- av_log(NULL, AV_LOG_FATAL, "Libavutil has been built with a broken binutils, please upgrade binutils and rebuild\n"); -- abort(); -- } -- -- if (llrint(1LL<<60) != 1LL<<60) { -- av_log(NULL, AV_LOG_ERROR, "Libavutil has been linked to a broken llrint()\n"); -- } -- -- checks_done = 1; -- return LIBAVUTIL_VERSION_INT; --} -- --const char *avutil_configuration(void) --{ -- return FFMPEG_CONFIGURATION; --} -- --const char *avutil_license(void) --{ --#define LICENSE_PREFIX "libavutil license: " -- return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1]; --} -- - const char *av_get_media_type_string(enum AVMediaType media_type) - { - switch (media_type) { -diff -Naur a/media/ffvpx/libavutil/version.h b/media/ffvpx/libavutil/version.h ---- a/media/ffvpx/libavutil/version.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/version.h 2023-04-06 12:50:24.494176623 +0200 -@@ -78,8 +78,8 @@ - * @{ - */ - --#define LIBAVUTIL_VERSION_MAJOR 56 --#define LIBAVUTIL_VERSION_MINOR 70 -+#define LIBAVUTIL_VERSION_MAJOR 58 -+#define LIBAVUTIL_VERSION_MINOR 3 - #define LIBAVUTIL_VERSION_MICRO 100 - - #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ -@@ -105,42 +105,14 @@ - * @{ - */ - --#ifndef FF_API_VAAPI --#define FF_API_VAAPI (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_FRAME_QP --#define FF_API_FRAME_QP (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_PLUS1_MINUS1 --#define FF_API_PLUS1_MINUS1 (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_ERROR_FRAME --#define FF_API_ERROR_FRAME (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_PKT_PTS --#define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_CRYPTO_SIZE_T --#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_FRAME_GET_SET --#define FF_API_FRAME_GET_SET (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_PSEUDOPAL --#define FF_API_PSEUDOPAL (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_CHILD_CLASS_NEXT --#define FF_API_CHILD_CLASS_NEXT (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_BUFFER_SIZE_T --#define FF_API_BUFFER_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 57) --#endif --#ifndef FF_API_D2STR --#define FF_API_D2STR (LIBAVUTIL_VERSION_MAJOR < 58) --#endif --#ifndef FF_API_DECLARE_ALIGNED --#define FF_API_DECLARE_ALIGNED (LIBAVUTIL_VERSION_MAJOR < 58) --#endif -+#define FF_API_FIFO_PEEK2 (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_FIFO_OLD_API (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_XVMC (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_OLD_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_AV_FOPEN_UTF8 (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_PKT_DURATION (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_REORDERED_OPAQUE (LIBAVUTIL_VERSION_MAJOR < 59) -+#define FF_API_FRAME_PICTURE_NUMBER (LIBAVUTIL_VERSION_MAJOR < 59) - - /** - * @} -diff -Naur a/media/ffvpx/libavutil/video_enc_params.c b/media/ffvpx/libavutil/video_enc_params.c ---- a/media/ffvpx/libavutil/video_enc_params.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/video_enc_params.c 2023-04-06 12:50:24.494176623 +0200 -@@ -16,12 +16,10 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - --#include - #include - #include - - #include "buffer.h" --#include "common.h" - #include "frame.h" - #include "mem.h" - #include "video_enc_params.h" -@@ -29,10 +27,14 @@ - AVVideoEncParams *av_video_enc_params_alloc(enum AVVideoEncParamsType type, - unsigned int nb_blocks, size_t *out_size) - { -+ struct TestStruct { -+ AVVideoEncParams p; -+ AVVideoBlockParams b; -+ }; -+ const size_t blocks_offset = offsetof(struct TestStruct, b); -+ size_t size = blocks_offset; - AVVideoEncParams *par; -- size_t size; - -- size = sizeof(*par); - if (nb_blocks > (SIZE_MAX - size) / sizeof(AVVideoBlockParams)) - return NULL; - size += sizeof(AVVideoBlockParams) * nb_blocks; -@@ -44,7 +46,7 @@ - par->type = type; - par->nb_blocks = nb_blocks; - par->block_size = sizeof(AVVideoBlockParams); -- par->blocks_offset = sizeof(*par); -+ par->blocks_offset = blocks_offset; - - if (out_size) - *out_size = size; -@@ -63,10 +65,6 @@ - par = av_video_enc_params_alloc(type, nb_blocks, &size); - if (!par) - return NULL; -- if (size > INT_MAX) { -- av_free(par); -- return NULL; -- } - buf = av_buffer_create((uint8_t *)par, size, NULL, NULL, 0); - if (!buf) { - av_freep(&par); -diff -Naur a/media/ffvpx/libavutil/x86/cpu.c b/media/ffvpx/libavutil/x86/cpu.c ---- a/media/ffvpx/libavutil/x86/cpu.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/cpu.c 2023-04-06 12:49:40.262395253 +0200 -@@ -150,9 +150,13 @@ - rval |= AV_CPU_FLAG_AVX2; - #if HAVE_AVX512 /* F, CD, BW, DQ, VL */ - if ((xcr0_lo & 0xe0) == 0xe0) { /* OPMASK/ZMM state */ -- if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000) -+ if ((rval & AV_CPU_FLAG_AVX2) && (ebx & 0xd0030000) == 0xd0030000) { - rval |= AV_CPU_FLAG_AVX512; -- -+#if HAVE_AVX512ICL -+ if ((ebx & 0xd0200000) == 0xd0200000 && (ecx & 0x5f42) == 0x5f42) -+ rval |= AV_CPU_FLAG_AVX512ICL; -+#endif /* HAVE_AVX512ICL */ -+ } - } - #endif /* HAVE_AVX512 */ - #endif /* HAVE_AVX2 */ -@@ -196,6 +200,10 @@ - used unless explicitly disabled by checking AV_CPU_FLAG_AVXSLOW. */ - if ((family == 0x15 || family == 0x16) && (rval & AV_CPU_FLAG_AVX)) - rval |= AV_CPU_FLAG_AVXSLOW; -+ -+ /* Zen 3 and earlier have slow gather */ -+ if ((family <= 0x19) && (rval & AV_CPU_FLAG_AVX2)) -+ rval |= AV_CPU_FLAG_SLOW_GATHER; - } - - /* XOP and FMA4 use the AVX instruction coding scheme, so they can't be -@@ -235,6 +243,10 @@ - if ((rval & AV_CPU_FLAG_SSSE3) && !(rval & AV_CPU_FLAG_SSE4) && - family == 6 && model < 23) - rval |= AV_CPU_FLAG_SSSE3SLOW; -+ -+ /* Haswell has slow gather */ -+ if ((rval & AV_CPU_FLAG_AVX2) && family == 6 && model < 70) -+ rval |= AV_CPU_FLAG_SLOW_GATHER; - } - - #endif /* cpuid */ -diff -Naur a/media/ffvpx/libavutil/x86/cpu.h b/media/ffvpx/libavutil/x86/cpu.h ---- a/media/ffvpx/libavutil/x86/cpu.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/cpu.h 2023-04-06 12:49:40.262395253 +0200 -@@ -80,6 +80,7 @@ - #define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX) - #define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI) - #define EXTERNAL_AVX512(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512) -+#define EXTERNAL_AVX512ICL(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX512ICL) - - #define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW) - #define INLINE_AMD3DNOWEXT(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOWEXT) -diff -Naur a/media/ffvpx/libavutil/x86/cpuid.asm b/media/ffvpx/libavutil/x86/cpuid.asm ---- a/media/ffvpx/libavutil/x86/cpuid.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/cpuid.asm 2023-04-06 12:49:40.262395253 +0200 -@@ -21,7 +21,7 @@ - ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ;****************************************************************************** - --%include "x86util.asm" -+%include "libavutil/x86/x86util.asm" - - SECTION .text - -diff -Naur a/media/ffvpx/libavutil/x86/emms.asm b/media/ffvpx/libavutil/x86/emms.asm ---- a/media/ffvpx/libavutil/x86/emms.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/emms.asm 2023-04-06 12:49:40.262395253 +0200 -@@ -18,7 +18,7 @@ - ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ;****************************************************************************** - --%include "x86util.asm" -+%include "libavutil/x86/x86util.asm" - - SECTION .text - -diff -Naur a/media/ffvpx/libavutil/x86/emms.h b/media/ffvpx/libavutil/x86/emms.h ---- a/media/ffvpx/libavutil/x86/emms.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/emms.h 2023-04-06 12:49:40.262395253 +0200 -@@ -21,11 +21,14 @@ - - #include "config.h" - #include "libavutil/attributes.h" --#include "libavutil/cpu.h" - - void avpriv_emms_asm(void); - - #if HAVE_MMX_INLINE -+#ifndef __MMX__ -+#include "libavutil/cpu.h" -+#endif -+ - # define emms_c emms_c - /** - * Empty mmx state. -diff -Naur a/media/ffvpx/libavutil/x86/fixed_dsp.asm b/media/ffvpx/libavutil/x86/fixed_dsp.asm ---- a/media/ffvpx/libavutil/x86/fixed_dsp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/fixed_dsp.asm 2023-04-06 12:49:40.262395253 +0200 -@@ -20,7 +20,7 @@ - ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ;****************************************************************************** - --%include "x86util.asm" -+%include "libavutil/x86/x86util.asm" - - SECTION .text - -diff -Naur a/media/ffvpx/libavutil/x86/fixed_dsp_init.c b/media/ffvpx/libavutil/x86/fixed_dsp_init.c ---- a/media/ffvpx/libavutil/x86/fixed_dsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/fixed_dsp_init.c 2023-04-06 12:50:06.977471295 +0200 -@@ -23,7 +23,7 @@ - #include "libavutil/fixed_dsp.h" - #include "cpu.h" - --void ff_butterflies_fixed_sse2(int *src0, int *src1, int len); -+void ff_butterflies_fixed_sse2(int *av_restrict src0, int *av_restrict src1, int len); - - av_cold void ff_fixed_dsp_init_x86(AVFixedDSPContext *fdsp) - { -diff -Naur a/media/ffvpx/libavutil/x86/float_dsp.asm b/media/ffvpx/libavutil/x86/float_dsp.asm ---- a/media/ffvpx/libavutil/x86/float_dsp.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/float_dsp.asm 2023-04-06 12:50:24.494176623 +0200 -@@ -20,7 +20,7 @@ - ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ;****************************************************************************** - --%include "x86util.asm" -+%include "libavutil/x86/x86util.asm" - - SECTION_RODATA 32 - pd_reverse: dd 7, 6, 5, 4, 3, 2, 1, 0 -@@ -48,7 +48,7 @@ - - sub lenq, 64 - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse -@@ -141,7 +141,7 @@ - %endif ; mmsize - sub lenq, 64 - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse -@@ -178,7 +178,7 @@ - mova [dstq+lenq], m1 - sub lenq, mmsize - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse -@@ -233,7 +233,7 @@ - movaps [dstq+lenq+3*mmsize], m4 - sub lenq, mmsize*4 - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse2 -@@ -280,7 +280,7 @@ - movaps [dstq+lenq+mmsize], m2 - sub lenq, 2*mmsize - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse2 -@@ -294,7 +294,7 @@ - ; vector_fmul_window(float *dst, const float *src0, - ; const float *src1, const float *win, int len); - ;----------------------------------------------------------------------------- --%macro VECTOR_FMUL_WINDOW 0 -+INIT_XMM sse - cglobal vector_fmul_window, 5, 6, 6, dst, src0, src1, win, len, len1 - shl lend, 2 - lea len1q, [lenq - mmsize] -@@ -305,7 +305,6 @@ - .loop: - mova m0, [winq + lenq] - mova m4, [src0q + lenq] --%if cpuflag(sse) - mova m1, [winq + len1q] - mova m5, [src1q + len1q] - shufps m1, m1, 0x1b -@@ -319,34 +318,12 @@ - addps m2, m3 - subps m1, m0 - shufps m2, m2, 0x1b --%else -- pswapd m1, [winq + len1q] -- pswapd m5, [src1q + len1q] -- mova m2, m0 -- mova m3, m1 -- pfmul m2, m4 -- pfmul m3, m5 -- pfmul m1, m4 -- pfmul m0, m5 -- pfadd m2, m3 -- pfsub m1, m0 -- pswapd m2, m2 --%endif - mova [dstq + lenq], m1 - mova [dstq + len1q], m2 - sub len1q, mmsize - add lenq, mmsize - jl .loop --%if mmsize == 8 -- femms --%endif -- REP_RET --%endmacro -- --INIT_MMX 3dnowext --VECTOR_FMUL_WINDOW --INIT_XMM sse --VECTOR_FMUL_WINDOW -+ RET - - ;----------------------------------------------------------------------------- - ; vector_fmul_add(float *dst, const float *src0, const float *src1, -@@ -375,7 +352,7 @@ - - sub lenq, 2*mmsize - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse -@@ -424,7 +401,7 @@ - add src1q, 2*mmsize - sub lenq, 2*mmsize - jge .loop -- REP_RET -+ RET - %endmacro - - INIT_XMM sse -@@ -463,6 +440,133 @@ - %endif - RET - -+INIT_YMM fma3 -+cglobal scalarproduct_float, 3,5,8, v1, v2, size, len, offset -+ xor offsetq, offsetq -+ xorps m0, m0, m0 -+ shl sized, 2 -+ mov lenq, sizeq -+ cmp lenq, 32 -+ jl .l16 -+ cmp lenq, 64 -+ jl .l32 -+ xorps m1, m1, m1 -+ cmp lenq, 128 -+ jl .l64 -+ and lenq, ~127 -+ xorps m2, m2, m2 -+ xorps m3, m3, m3 -+.loop128: -+ movups m4, [v1q+offsetq] -+ movups m5, [v1q+offsetq + 32] -+ movups m6, [v1q+offsetq + 64] -+ movups m7, [v1q+offsetq + 96] -+ fmaddps m0, m4, [v2q+offsetq ], m0 -+ fmaddps m1, m5, [v2q+offsetq + 32], m1 -+ fmaddps m2, m6, [v2q+offsetq + 64], m2 -+ fmaddps m3, m7, [v2q+offsetq + 96], m3 -+ add offsetq, 128 -+ cmp offsetq, lenq -+ jl .loop128 -+ addps m0, m0, m2 -+ addps m1, m1, m3 -+ mov lenq, sizeq -+ and lenq, 127 -+ cmp lenq, 64 -+ jge .l64 -+ addps m0, m0, m1 -+ cmp lenq, 32 -+ jge .l32 -+ vextractf128 xmm2, m0, 1 -+ addps xmm0, xmm2 -+ cmp lenq, 16 -+ jge .l16 -+ movhlps xmm1, xmm0 -+ addps xmm0, xmm1 -+ movss xmm1, xmm0 -+ shufps xmm0, xmm0, 1 -+ addss xmm0, xmm1 -+%if ARCH_X86_64 == 0 -+ movss r0m, xm0 -+ fld dword r0m -+%endif -+ RET -+.l64: -+ and lenq, ~63 -+ add lenq, offsetq -+.loop64: -+ movups m4, [v1q+offsetq] -+ movups m5, [v1q+offsetq + 32] -+ fmaddps m0, m4, [v2q+offsetq], m0 -+ fmaddps m1, m5, [v2q+offsetq + 32], m1 -+ add offsetq, 64 -+ cmp offsetq, lenq -+ jl .loop64 -+ addps m0, m0, m1 -+ mov lenq, sizeq -+ and lenq, 63 -+ cmp lenq, 32 -+ jge .l32 -+ vextractf128 xmm2, m0, 1 -+ addps xmm0, xmm2 -+ cmp lenq, 16 -+ jge .l16 -+ movhlps xmm1, xmm0 -+ addps xmm0, xmm1 -+ movss xmm1, xmm0 -+ shufps xmm0, xmm0, 1 -+ addss xmm0, xmm1 -+%if ARCH_X86_64 == 0 -+ movss r0m, xm0 -+ fld dword r0m -+%endif -+ RET -+.l32: -+ and lenq, ~31 -+ add lenq, offsetq -+.loop32: -+ movups m4, [v1q+offsetq] -+ fmaddps m0, m4, [v2q+offsetq], m0 -+ add offsetq, 32 -+ cmp offsetq, lenq -+ jl .loop32 -+ vextractf128 xmm2, m0, 1 -+ addps xmm0, xmm2 -+ mov lenq, sizeq -+ and lenq, 31 -+ cmp lenq, 16 -+ jge .l16 -+ movhlps xmm1, xmm0 -+ addps xmm0, xmm1 -+ movss xmm1, xmm0 -+ shufps xmm0, xmm0, 1 -+ addss xmm0, xmm1 -+%if ARCH_X86_64 == 0 -+ movss r0m, xm0 -+ fld dword r0m -+%endif -+ RET -+.l16: -+ and lenq, ~15 -+ add lenq, offsetq -+.loop16: -+ movaps xmm1, [v1q+offsetq] -+ mulps xmm1, [v2q+offsetq] -+ addps xmm0, xmm1 -+ add offsetq, 16 -+ cmp offsetq, lenq -+ jl .loop16 -+ movhlps xmm1, xmm0 -+ addps xmm0, xmm1 -+ movss xmm1, xmm0 -+ shufps xmm0, xmm0, 1 -+ addss xmm0, xmm1 -+%if ARCH_X86_64 == 0 -+ movss r0m, xm0 -+ fld dword r0m -+%endif -+ RET -+ - ;----------------------------------------------------------------------------- - ; void ff_butterflies_float(float *src0, float *src1, int len); - ;----------------------------------------------------------------------------- -@@ -481,4 +585,4 @@ - mova [src0q + lenq], m0 - add lenq, mmsize - jl .loop -- REP_RET -+ RET -diff -Naur a/media/ffvpx/libavutil/x86/float_dsp_init.c b/media/ffvpx/libavutil/x86/float_dsp_init.c ---- a/media/ffvpx/libavutil/x86/float_dsp_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/float_dsp_init.c 2023-04-06 12:50:06.977471295 +0200 -@@ -56,8 +56,6 @@ - void ff_vector_dmul_scalar_avx(double *dst, const double *src, - double mul, int len); - --void ff_vector_fmul_window_3dnowext(float *dst, const float *src0, -- const float *src1, const float *win, int len); - void ff_vector_fmul_window_sse(float *dst, const float *src0, - const float *src1, const float *win, int len); - -@@ -76,6 +74,7 @@ - const float *src1, int len); - - float ff_scalarproduct_float_sse(const float *v1, const float *v2, int order); -+float ff_scalarproduct_float_fma3(const float *v1, const float *v2, int order); - - void ff_butterflies_float_sse(float *av_restrict src0, float *av_restrict src1, int len); - -@@ -83,9 +82,6 @@ - { - int cpu_flags = av_get_cpu_flags(); - -- if (EXTERNAL_AMD3DNOWEXT(cpu_flags)) { -- fdsp->vector_fmul_window = ff_vector_fmul_window_3dnowext; -- } - if (EXTERNAL_SSE(cpu_flags)) { - fdsp->vector_fmul = ff_vector_fmul_sse; - fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_sse; -@@ -117,5 +113,6 @@ - fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_fma3; - fdsp->vector_fmul_add = ff_vector_fmul_add_fma3; - fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_fma3; -+ fdsp->scalarproduct_float = ff_scalarproduct_float_fma3; - } - } -diff -Naur a/media/ffvpx/libavutil/x86/imgutils_init.c b/media/ffvpx/libavutil/x86/imgutils_init.c ---- a/media/ffvpx/libavutil/x86/imgutils_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/imgutils_init.c 2023-04-06 12:49:40.262395253 +0200 -@@ -21,9 +21,8 @@ - - #include "libavutil/cpu.h" - #include "libavutil/error.h" --#include "libavutil/imgutils.h" - #include "libavutil/imgutils_internal.h" --#include "libavutil/internal.h" -+#include "libavutil/macros.h" - - #include "cpu.h" - -diff -Naur a/media/ffvpx/libavutil/x86/intmath.h b/media/ffvpx/libavutil/x86/intmath.h ---- a/media/ffvpx/libavutil/x86/intmath.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/intmath.h 2023-04-06 12:49:40.263395293 +0200 -@@ -110,8 +110,8 @@ - #if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); - #endif -- __asm__ ("minsd %2, %0 \n\t" -- "maxsd %1, %0 \n\t" -+ __asm__ ("maxsd %1, %0 \n\t" -+ "minsd %2, %0 \n\t" - : "+&x"(a) : "xm"(amin), "xm"(amax)); - return a; - } -@@ -126,14 +126,44 @@ - #if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 - if (amin > amax) abort(); - #endif -- __asm__ ("minss %2, %0 \n\t" -- "maxss %1, %0 \n\t" -+ __asm__ ("maxss %1, %0 \n\t" -+ "minss %2, %0 \n\t" - : "+&x"(a) : "xm"(amin), "xm"(amax)); - return a; - } - - #endif /* __SSE__ */ - -+#if defined(__AVX__) && !defined(__INTEL_COMPILER) -+ -+#undef av_clipd -+#define av_clipd av_clipd_avx -+static av_always_inline av_const double av_clipd_avx(double a, double amin, double amax) -+{ -+#if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -+ if (amin > amax) abort(); -+#endif -+ __asm__ ("vmaxsd %1, %0, %0 \n\t" -+ "vminsd %2, %0, %0 \n\t" -+ : "+&x"(a) : "xm"(amin), "xm"(amax)); -+ return a; -+} -+ -+#undef av_clipf -+#define av_clipf av_clipf_avx -+static av_always_inline av_const float av_clipf_avx(float a, float amin, float amax) -+{ -+#if defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2 -+ if (amin > amax) abort(); -+#endif -+ __asm__ ("vmaxss %1, %0, %0 \n\t" -+ "vminss %2, %0, %0 \n\t" -+ : "+&x"(a) : "xm"(amin), "xm"(amax)); -+ return a; -+} -+ -+#endif /* __AVX__ */ -+ - #endif /* __GNUC__ */ - - #endif /* AVUTIL_X86_INTMATH_H */ -diff -Naur a/media/ffvpx/libavutil/x86/intreadwrite.h b/media/ffvpx/libavutil/x86/intreadwrite.h ---- a/media/ffvpx/libavutil/x86/intreadwrite.h 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/intreadwrite.h 2023-04-06 12:50:06.977471295 +0200 -@@ -29,6 +29,8 @@ - - #if !HAVE_FAST_64BIT && defined(__MMX__) - -+#define FF_COPY_SWAP_ZERO_USES_MMX -+ - #define AV_COPY64 AV_COPY64 - static av_always_inline void AV_COPY64(void *d, const void *s) - { -diff -Naur a/media/ffvpx/libavutil/x86/lls.asm b/media/ffvpx/libavutil/x86/lls.asm ---- a/media/ffvpx/libavutil/x86/lls.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/lls.asm 2023-04-06 12:50:24.494176623 +0200 -@@ -20,7 +20,7 @@ - ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ;****************************************************************************** - --%include "x86util.asm" -+%include "libavutil/x86/x86util.asm" - - SECTION .text - -@@ -123,7 +123,7 @@ - test id, id - jle .loop2x1 - .ret: -- REP_RET -+ RET - - %macro UPDATE_LLS 0 - cglobal update_lls, 3,6,8, ctx, var, count, i, j, count2 -@@ -240,7 +240,7 @@ - cmp id, countd - jle .loop2x1 - .ret: -- REP_RET -+ RET - %endmacro ; UPDATE_LLS - - %if HAVE_AVX_EXTERNAL -diff -Naur a/media/ffvpx/libavutil/x86/lls_init.c b/media/ffvpx/libavutil/x86/lls_init.c ---- a/media/ffvpx/libavutil/x86/lls_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/lls_init.c 2023-04-06 12:49:40.263395293 +0200 -@@ -20,6 +20,7 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -+#include "libavutil/attributes.h" - #include "libavutil/lls.h" - #include "libavutil/x86/cpu.h" - -diff -Naur a/media/ffvpx/libavutil/x86/pixelutils.asm b/media/ffvpx/libavutil/x86/pixelutils.asm ---- a/media/ffvpx/libavutil/x86/pixelutils.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/pixelutils.asm 2023-04-06 12:49:40.263395293 +0200 -@@ -21,49 +21,11 @@ - ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ;****************************************************************************** - --%include "x86util.asm" -+%include "libavutil/x86/x86util.asm" - - SECTION .text - - ;------------------------------------------------------------------------------- --; int ff_pixelutils_sad_8x8_mmx(const uint8_t *src1, ptrdiff_t stride1, --; const uint8_t *src2, ptrdiff_t stride2); --;------------------------------------------------------------------------------- --INIT_MMX mmx --cglobal pixelutils_sad_8x8, 4,4,0, src1, stride1, src2, stride2 -- pxor m7, m7 -- pxor m6, m6 --%rep 4 -- mova m0, [src1q] -- mova m2, [src1q + stride1q] -- mova m1, [src2q] -- mova m3, [src2q + stride2q] -- psubusb m4, m0, m1 -- psubusb m5, m2, m3 -- psubusb m1, m0 -- psubusb m3, m2 -- por m1, m4 -- por m3, m5 -- punpcklbw m0, m1, m7 -- punpcklbw m2, m3, m7 -- punpckhbw m1, m7 -- punpckhbw m3, m7 -- paddw m0, m1 -- paddw m2, m3 -- paddw m0, m2 -- paddw m6, m0 -- lea src1q, [src1q + 2*stride1q] -- lea src2q, [src2q + 2*stride2q] --%endrep -- psrlq m0, m6, 32 -- paddw m6, m0 -- psrlq m0, m6, 16 -- paddw m6, m0 -- movd eax, m6 -- movzx eax, ax -- RET -- --;------------------------------------------------------------------------------- - ; int ff_pixelutils_sad_8x8_mmxext(const uint8_t *src1, ptrdiff_t stride1, - ; const uint8_t *src2, ptrdiff_t stride2); - ;------------------------------------------------------------------------------- -@@ -82,26 +44,6 @@ - %endrep - movd eax, m2 - RET -- --;------------------------------------------------------------------------------- --; int ff_pixelutils_sad_16x16_mmxext(const uint8_t *src1, ptrdiff_t stride1, --; const uint8_t *src2, ptrdiff_t stride2); --;------------------------------------------------------------------------------- --INIT_MMX mmxext --cglobal pixelutils_sad_16x16, 4,4,0, src1, stride1, src2, stride2 -- pxor m2, m2 --%rep 16 -- mova m0, [src1q] -- mova m1, [src1q + 8] -- psadbw m0, [src2q] -- psadbw m1, [src2q + 8] -- paddw m2, m0 -- paddw m2, m1 -- add src1q, stride1q -- add src2q, stride2q --%endrep -- movd eax, m2 -- RET - - ;------------------------------------------------------------------------------- - ; int ff_pixelutils_sad_16x16_sse2(const uint8_t *src1, ptrdiff_t stride1, -diff -Naur a/media/ffvpx/libavutil/x86/pixelutils_init.c b/media/ffvpx/libavutil/x86/pixelutils_init.c ---- a/media/ffvpx/libavutil/x86/pixelutils_init.c 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/pixelutils_init.c 2023-04-06 12:49:40.263395293 +0200 -@@ -21,13 +21,9 @@ - #include "pixelutils.h" - #include "cpu.h" - --int ff_pixelutils_sad_8x8_mmx(const uint8_t *src1, ptrdiff_t stride1, -- const uint8_t *src2, ptrdiff_t stride2); - int ff_pixelutils_sad_8x8_mmxext(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - --int ff_pixelutils_sad_16x16_mmxext(const uint8_t *src1, ptrdiff_t stride1, -- const uint8_t *src2, ptrdiff_t stride2); - int ff_pixelutils_sad_16x16_sse2(const uint8_t *src1, ptrdiff_t stride1, - const uint8_t *src2, ptrdiff_t stride2); - int ff_pixelutils_sad_a_16x16_sse2(const uint8_t *src1, ptrdiff_t stride1, -@@ -53,10 +49,6 @@ - { - int cpu_flags = av_get_cpu_flags(); - -- if (EXTERNAL_MMX(cpu_flags)) { -- sad[2] = ff_pixelutils_sad_8x8_mmx; -- } -- - // The best way to use SSE2 would be to do 2 SADs in parallel, - // but we'd have to modify the pixelutils API to return SIMD functions. - -@@ -65,7 +57,6 @@ - // so just use the MMX 8x8 version even when SSE2 is available. - if (EXTERNAL_MMXEXT(cpu_flags)) { - sad[2] = ff_pixelutils_sad_8x8_mmxext; -- sad[3] = ff_pixelutils_sad_16x16_mmxext; - } - - if (EXTERNAL_SSE2(cpu_flags)) { -diff -Naur a/media/ffvpx/libavutil/x86/x86inc.asm b/media/ffvpx/libavutil/x86/x86inc.asm ---- a/media/ffvpx/libavutil/x86/x86inc.asm 2023-03-10 00:59:37.000000000 +0100 -+++ b/media/ffvpx/libavutil/x86/x86inc.asm 2023-04-06 12:49:40.263395293 +0200 -@@ -817,32 +817,33 @@ - - ; cpuflags - --%assign cpuflags_mmx (1<<0) --%assign cpuflags_mmx2 (1<<1) | cpuflags_mmx --%assign cpuflags_3dnow (1<<2) | cpuflags_mmx --%assign cpuflags_3dnowext (1<<3) | cpuflags_3dnow --%assign cpuflags_sse (1<<4) | cpuflags_mmx2 --%assign cpuflags_sse2 (1<<5) | cpuflags_sse --%assign cpuflags_sse2slow (1<<6) | cpuflags_sse2 --%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2 --%assign cpuflags_sse3 (1<<8) | cpuflags_sse2 --%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3 --%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3 --%assign cpuflags_sse42 (1<<11)| cpuflags_sse4 --%assign cpuflags_aesni (1<<12)| cpuflags_sse42 --%assign cpuflags_avx (1<<13)| cpuflags_sse42 --%assign cpuflags_xop (1<<14)| cpuflags_avx --%assign cpuflags_fma4 (1<<15)| cpuflags_avx --%assign cpuflags_fma3 (1<<16)| cpuflags_avx --%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt --%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1 --%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2 --%assign cpuflags_avx512 (1<<20)| cpuflags_avx2 ; F, CD, BW, DQ, VL -+%assign cpuflags_mmx (1<<0) -+%assign cpuflags_mmx2 (1<<1) | cpuflags_mmx -+%assign cpuflags_3dnow (1<<2) | cpuflags_mmx -+%assign cpuflags_3dnowext (1<<3) | cpuflags_3dnow -+%assign cpuflags_sse (1<<4) | cpuflags_mmx2 -+%assign cpuflags_sse2 (1<<5) | cpuflags_sse -+%assign cpuflags_sse2slow (1<<6) | cpuflags_sse2 -+%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2 -+%assign cpuflags_sse3 (1<<8) | cpuflags_sse2 -+%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3 -+%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3 -+%assign cpuflags_sse42 (1<<11)| cpuflags_sse4 -+%assign cpuflags_aesni (1<<12)| cpuflags_sse42 -+%assign cpuflags_avx (1<<13)| cpuflags_sse42 -+%assign cpuflags_xop (1<<14)| cpuflags_avx -+%assign cpuflags_fma4 (1<<15)| cpuflags_avx -+%assign cpuflags_fma3 (1<<16)| cpuflags_avx -+%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt -+%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1 -+%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2 -+%assign cpuflags_avx512 (1<<20)| cpuflags_avx2 ; F, CD, BW, DQ, VL -+%assign cpuflags_avx512icl (1<<25)| cpuflags_avx512 - --%assign cpuflags_cache32 (1<<21) --%assign cpuflags_cache64 (1<<22) --%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant --%assign cpuflags_atom (1<<24) -+%assign cpuflags_cache32 (1<<21) -+%assign cpuflags_cache64 (1<<22) -+%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant -+%assign cpuflags_atom (1<<24) - - ; Returns a boolean value expressing whether or not the specified cpuflag is enabled. - %define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1) -diff -Naur a/toolkit/moz.configure b/toolkit/moz.configure ---- a/toolkit/moz.configure 2023-03-10 00:59:39.000000000 +0100 -+++ b/toolkit/moz.configure 2023-04-06 12:49:19.193546510 +0200 -@@ -2142,7 +2142,7 @@ - - @depends(target) - def libav_fft(target): -- return target.kernel == "WINNT" or target.cpu == "x86_64" -+ return target.kernel in ("WINNT", "Darwin") or target.cpu == "x86_64" - - set_config("MOZ_LIBAV_FFT", depends(when=libav_fft)(lambda: True)) - set_define("MOZ_LIBAV_FFT", depends(when=libav_fft)(lambda: True)) -@@ -2173,18 +2173,20 @@ - flags = ["-DPIC", "-DWIN64"] - use_nasm = False - elif target.kernel == "Darwin": -+ # 32/64-bit macosx assemblers need to prefix symbols with an -+ # underscore. -+ flags = [ -+ "-DPIC", -+ "-DMACHO", -+ "-DPREFIX" -+ ] - if target.cpu == "x86_64": -- # 32/64-bit macosx asemblers need to prefix symbols with an -- # underscore. -- flags = [ -+ flags += [ - "-D__x86_64__", -- "-DPIC", -- "-DMACHO", -- "-DPREFIX", - "-Pconfig_darwin64.asm", - ] -- else: -- flac_only = True -+ elif target.cpu == "aarch64": -+ use_nasm = False - elif target.cpu == "x86_64": - flags = ["-D__x86_64__", "-DPIC", "-DELF", "-Pconfig_unix64.asm"] - elif target.cpu in ("x86", "arm", "aarch64"): -@@ -2195,10 +2197,6 @@ - if flac_only or not enable: - use_nasm = False - -- if use_nasm: -- # default disabled components -- flags.append("-Pdefaults_disabled.asm") -- - return namespace( - enable=enable, - use_nasm=use_nasm, -diff -Naur a/tools/rewriting/ThirdPartyPaths.txt b/tools/rewriting/ThirdPartyPaths.txt ---- a/tools/rewriting/ThirdPartyPaths.txt 2023-03-10 00:59:39.000000000 +0100 -+++ b/tools/rewriting/ThirdPartyPaths.txt 2023-04-06 12:58:33.700797413 +0200 -@@ -32,6 +32,7 @@ - dom/media/platforms/ffmpeg/ffmpeg57/ - dom/media/platforms/ffmpeg/ffmpeg58/ - dom/media/platforms/ffmpeg/ffmpeg59/ -+dom/media/platforms/ffmpeg/ffmpeg60/ - dom/media/platforms/ffmpeg/libav53/ - dom/media/platforms/ffmpeg/libav54/ - dom/media/platforms/ffmpeg/libav55/ diff --git a/user/zotero/firefox-esr.post-upgrade b/user/zotero/firefox-esr.post-upgrade deleted file mode 100644 index aaec4e4..0000000 --- a/user/zotero/firefox-esr.post-upgrade +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -ver_old=$2 - -if [ "$(apk version -t "$ver_old" '102.2.0-r4')" = '<' ]; then - # renamed appid, needs profile migration - cat 1>&2 <<-EOF - * - * firefox-esr now has a different appid, so you will see a default new - * profile upon starting it. to use your old profile again, you have to - * first migrate it using 'firefox-esr --ProfileManager'. select the - * previous one (if you didn't rename it, it's probably named - * default-something) to migrate it. - * - EOF -fi - -exit 0 diff --git a/user/zotero/fix-neon-aom.patch b/user/zotero/fix-neon-aom.patch deleted file mode 100644 index 7ea16e7..0000000 --- a/user/zotero/fix-neon-aom.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/media/libaom/moz.build b/media/libaom/moz.build -index fd8c7f2..db3f9ca 100644 ---- a/media/libaom/moz.build -+++ b/media/libaom/moz.build -@@ -55,7 +55,7 @@ elif CONFIG['CPU_ARCH'] == 'arm': - - for f in SOURCES: - if f.endswith('neon.c'): -- SOURCES[f].flags += CONFIG['VPX_ASFLAGS'] -+ SOURCES[f].flags += CONFIG['NEON_FLAGS'] - - if CONFIG['OS_TARGET'] == 'Android': - # For cpu-features.h diff --git a/user/zotero/gcc13.patch b/user/zotero/gcc13.patch deleted file mode 100644 index c3619f3..0000000 --- a/user/zotero/gcc13.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/gfx/2d/Rect.h -+++ b/gfx/2d/Rect.h -@@ -14,6 +14,7 @@ - #include "Tools.h" - #include "mozilla/Maybe.h" - -+#include - #include - - namespace mozilla { ---- a/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp -+++ b/dom/media/webrtc/sdp/RsdparsaSdpGlue.cpp -@@ -3,6 +3,7 @@ - /* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ -+#include - #include - - #include "sdp/RsdparsaSdpInc.h" ---- a/toolkit/components/telemetry/pingsender/pingsender.cpp -+++ b/toolkit/components/telemetry/pingsender/pingsender.cpp -@@ -3,6 +3,7 @@ - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -+#include - #include - #include - #include diff --git a/user/zotero/hunspell-dont-build-unused-function.patch b/user/zotero/hunspell-dont-build-unused-function.patch deleted file mode 100644 index 8bd04db..0000000 --- a/user/zotero/hunspell-dont-build-unused-function.patch +++ /dev/null @@ -1,69 +0,0 @@ -new file mode 100644 ---- /dev/null -+++ b/extensions/spellcheck/hunspell/patches/bug1838113.patch -@@ -0,0 +1,20 @@ -+diff --git a/extensions/spellcheck/hunspell/src/csutil.cxx b/extensions/spellcheck/hunspell/src/csutil.cxx -+index 48e58ff4b2677..39a54d38023c8 100644 -+--- a/extensions/spellcheck/hunspell/src/csutil.cxx -++++ b/extensions/spellcheck/hunspell/src/csutil.cxx -+@@ -108,6 +108,7 @@ static struct unicode_info2* utf_tbl = NULL; -+ static int utf_tbl_count = -+ 0; // utf_tbl can be used by multiple Hunspell instances -+ -++#ifndef MOZILLA_CLIENT -+ void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mode) -+ { -+ #if defined(_WIN32) && defined(_MSC_VER) -+@@ -127,6 +128,7 @@ void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mod -+ #endif -+ stream.open(path, mode); -+ } -++#endif -+ -+ std::string& u16_u8(std::string& dest, const std::vector& src) { -+ dest.clear(); ---- a/extensions/spellcheck/hunspell/src/csutil.cxx -+++ b/extensions/spellcheck/hunspell/src/csutil.cxx -@@ -103,16 +103,17 @@ struct unicode_info2 { - unsigned short cupper; - unsigned short clower; - }; - - static struct unicode_info2* utf_tbl = NULL; - static int utf_tbl_count = - 0; // utf_tbl can be used by multiple Hunspell instances - -+#ifndef MOZILLA_CLIENT - void myopen(std::ifstream& stream, const char* path, std::ios_base::openmode mode) - { - #if defined(_WIN32) && defined(_MSC_VER) - #define WIN32_LONG_PATH_PREFIX "\\\\?\\" - if (strncmp(path, WIN32_LONG_PATH_PREFIX, 4) == 0) { - int len = MultiByteToWideChar(CP_UTF8, 0, path, -1, NULL, 0); - wchar_t* buff = new wchar_t[len]; - wchar_t* buff2 = new wchar_t[len]; -@@ -122,16 +123,17 @@ void myopen(std::ifstream& stream, const - } - delete [] buff; - delete [] buff2; - } - else - #endif - stream.open(path, mode); - } -+#endif - - std::string& u16_u8(std::string& dest, const std::vector& src) { - dest.clear(); - std::vector::const_iterator u2 = src.begin(); - std::vector::const_iterator u2_max = src.end(); - while (u2 < u2_max) { - signed char u8; - if (u2->h) { // > 0xFF ---- a/extensions/spellcheck/hunspell/update.sh -+++ b/extensions/spellcheck/hunspell/update.sh -@@ -29,3 +29,4 @@ rm -rf ${tmpclonedir} - cd ${hunspell_dir}/src - patch -p5 < ../patches/bug1410214.patch - patch -p5 < ../patches/bug1739761.patch -+patch -p5 < ../patches/bug1838113.patch diff --git a/user/zotero/mallinfo.patch b/user/zotero/mallinfo.patch deleted file mode 100644 index 7916a20..0000000 --- a/user/zotero/mallinfo.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/xpcom/base/nsMemoryReporterManager.cpp b/xpcom/base/nsMemoryReporterManager.cpp -index 865e1b5430..9a00dafecb 100644 ---- a/xpcom/base/nsMemoryReporterManager.cpp -+++ b/xpcom/base/nsMemoryReporterManager.cpp -@@ -124,6 +124,7 @@ static MOZ_MUST_USE nsresult ResidentUniqueDistinguishedAmount(int64_t* aN) { - return GetProcSelfSmapsPrivate(aN); - } - -+#ifdef __GLIBC__ - # ifdef HAVE_MALLINFO - # define HAVE_SYSTEM_HEAP_REPORTER 1 - static MOZ_MUST_USE nsresult SystemHeapSize(int64_t* aSizeOut) { -@@ -143,6 +144,7 @@ static MOZ_MUST_USE nsresult SystemHeapSize(int64_t* aSizeOut) { - return NS_OK; - } - # endif -+#endif - - #elif defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || \ - defined(__OpenBSD__) || defined(__FreeBSD_kernel__) diff --git a/user/zotero/no-ccache-stats.patch b/user/zotero/no-ccache-stats.patch new file mode 100644 index 0000000..4d557a0 --- /dev/null +++ b/user/zotero/no-ccache-stats.patch @@ -0,0 +1,13 @@ +prevents a call to ccache +diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py +index bf7009a..011c012 100644 +--- a/python/mozbuild/mozbuild/controller/building.py ++++ b/python/mozbuild/mozbuild/controller/building.py +@@ -570,6 +570,7 @@ class BuildMonitor(MozbuildObject): + ) + + def ccache_stats(self, ccache=None): ++ return None + ccache_stats = None + + if ccache is None: diff --git a/user/zotero/ppc-musttail.patch b/user/zotero/ppc-musttail.patch new file mode 100644 index 0000000..ebe06c0 --- /dev/null +++ b/user/zotero/ppc-musttail.patch @@ -0,0 +1,30 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc-musttail.patch +-- +commit 5e66655e1456c9d26637ceaed3f4533b537322c4 +Author: Daniel Kolesa +Date: Sat May 13 23:00:04 2023 +0200 + + disable musttail on ppc + + 41:38.04 LLVM ERROR: failed to perform tail call elimination on a call site marked musttail + 41:38.04 PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. + 41:38.04 Stack dump: + 41:38.04 0. Running pass 'Function Pass Manager' on module '/builddir/thunderbird-114.0_beta1/obj-powerpc64le-unknown-linux-musl/toolkit/library/build/../../../gfx/skia/SkOpts.o'. + 41:38.04 1. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@_ZN8portableL15init_lane_masksEPNS_6ParamsEP21SkRasterPipelineStageffff' + 41:38.95 clang-16: error: unable to execute command: Aborted + + To be investigated later. + +diff --git a/gfx/skia/skia/src/core/SkRasterPipeline.h b/gfx/skia/skia/src/core/SkRasterPipeline.h +index 766bb0c..88c6cb2 100644 +--- a/gfx/skia/skia/src/core/SkRasterPipeline.h ++++ b/gfx/skia/skia/src/core/SkRasterPipeline.h +@@ -24,7 +24,7 @@ enum SkColorType : int; + struct SkImageInfo; + struct skcms_TransferFunction; + +-#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) ++#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc__) + #define SK_HAS_MUSTTAIL 1 + #else + #define SK_HAS_MUSTTAIL 0 diff --git a/user/zotero/ppc-webrtc.patch b/user/zotero/ppc-webrtc.patch new file mode 100644 index 0000000..bf4afdd --- /dev/null +++ b/user/zotero/ppc-webrtc.patch @@ -0,0 +1,23 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc64-webrtc.patch +-- +commit 010bfb0441168d51e0fffe98d1f50e0602e7947f +Author: Daniel Kolesa +Date: Sat May 13 23:40:41 2023 +0200 + + fix webrtc on ppc64 + +diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build +index 976cf37..d35d447 100644 +--- a/third_party/libwebrtc/moz.build ++++ b/third_party/libwebrtc/moz.build +@@ -643,3 +643,10 @@ if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "WINNT": + "/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn", + "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn" + ] ++ ++if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": ++ ++ DIRS += [ ++ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", ++ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn" ++ ] diff --git a/user/zotero/python-deps.patch b/user/zotero/python-deps.patch index dea6345..dfdd3b2 100644 --- a/user/zotero/python-deps.patch +++ b/user/zotero/python-deps.patch @@ -1,9 +1,12 @@ +diff --git a/python/sites/mach.txt b/python/sites/mach.txt +index 55cc6fb..51bf67d 100644 --- a/python/sites/mach.txt +++ b/python/sites/mach.txt -@@ -134,4 +134,4 @@ +@@ -141,5 +141,5 @@ pypi-optional:glean-sdk==52.7.0:telemetry will not be collected + # Mach gracefully handles the case where `psutil` is unavailable. # We aren't (yet) able to pin packages in automation, so we have to # support down to the oldest locally-installed version (5.4.2). --pypi-optional:psutil>=5.4.2,<=5.8.0:telemetry will be missing some data +-pypi-optional:psutil>=5.4.2,<=5.9.4:telemetry will be missing some data +-pypi-optional:zstandard>=0.11.1,<=0.22.0:zstd archives will not be possible to extract +pypi-optional:psutil>=5.4.2,<=5.10.0:telemetry will be missing some data --pypi-optional:zstandard>=0.11.1,<=0.17.0:zstd archives will not be possible to extract -+pypi-optional:zstandard>=0.11.1,<=0.18.0:zstd archives will not be possible to extract ++pypi-optional:zstandard>=0.11.1,<=0.24.0:zstd archives will not be possible to extract diff --git a/user/zotero/rust-lto-thin.patch b/user/zotero/rust-lto-thin.patch index 147acca..788fcea 100644 --- a/user/zotero/rust-lto-thin.patch +++ b/user/zotero/rust-lto-thin.patch @@ -1,11 +1,11 @@ -set rust crate lto to thin to not use fatlto for gkrust which ooms on 32-bit +set rust crate lto to thin to not use fatlto for gkrust which fails sometimes --- a/config/makefiles/rust.mk +++ b/config/makefiles/rust.mk -@@ -94,7 +94,7 @@ +@@ -92,7 +92,7 @@ # Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045. ifndef MOZ_CODE_COVERAGE ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE))) --cargo_rustc_flags += -Clto +-cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat) +cargo_rustc_flags += -Clto=thin endif # We need -Cembed-bitcode=yes for all crates when using -Clto. diff --git a/user/zotero/sandbox-sched_setscheduler.patch b/user/zotero/sandbox-sched_setscheduler.patch index 3163c9e..ffdf126 100644 --- a/user/zotero/sandbox-sched_setscheduler.patch +++ b/user/zotero/sandbox-sched_setscheduler.patch @@ -1,9 +1,9 @@ upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1657849 +diff --git a/security/sandbox/linux/SandboxFilter.cpp b/security/sandbox/linux/SandboxFilter.cpp +index ed958bc..9824433 100644 --- a/security/sandbox/linux/SandboxFilter.cpp +++ b/security/sandbox/linux/SandboxFilter.cpp -@@ -1694,10 +1694,10 @@ - return Allow(); - case __NR_sched_get_priority_min: +@@ -1751,6 +1751,6 @@ class GMPSandboxPolicy : public SandboxPolicyCommon { case __NR_sched_get_priority_max: + case __NR_sched_setscheduler: return Allow(); @@ -12,5 +12,13 @@ upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1657849 - case __NR_sched_setscheduler: { + case __NR_sched_getscheduler: { Arg pid(0); - return If(pid == 0, Allow()).Else(Trap(SchedTrap, nullptr)); +@@ -1926,3 +1926,2 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { + case __NR_sched_getscheduler: +- case __NR_sched_setscheduler: + case __NR_sched_getattr: +@@ -1932,2 +1931,5 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { } ++ // sched_setscheduler gets special treatment here (bug 1657849): ++ case __NR_sched_setscheduler: ++ return Allow(); + diff --git a/user/zotero/update-from-packed-simd-2-to-simd1.patch b/user/zotero/update-from-packed-simd-2-to-simd1.patch deleted file mode 100644 index 4b0ea89..0000000 --- a/user/zotero/update-from-packed-simd-2-to-simd1.patch +++ /dev/null @@ -1,1707 +0,0 @@ -diff --git a/.cargo/config.in b/.cargo/config.in -index 2e5bad6fed..f265f49511 100644 ---- a/.cargo/config.in -+++ b/.cargo/config.in -@@ -70,7 +70,7 @@ rev = "746743227485a83123784df0c53227ab466612ed" - [source."https://github.com/hsivonen/packed_simd"] - git = "https://github.com/hsivonen/packed_simd" - replace-with = "vendored-sources" --rev = "f38664024b29d44c506431eada7c112629bb1aa9" -+rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" - - [source."https://github.com/hsivonen/chardetng_c"] - git = "https://github.com/hsivonen/chardetng_c" -diff --git a/.gitignore b/.gitignore -index b409ec5837..6140a867bd 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -193,3 +193,6 @@ config/external/icu4x - # Ignore Storybook generated files - browser/components/storybook/node_modules/ - browser/components/storybook/storybook-static/ -+ -+*.org -+*.rej -diff --git a/Cargo.lock b/Cargo.lock -index 9206cf64db..54106f3e9d 100644 ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -1456,12 +1456,12 @@ dependencies = [ - - [[package]] - name = "encoding_rs" --version = "0.8.31" -+version = "0.8.33" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" - dependencies = [ - "cfg-if 1.0.0", -- "packed_simd_2", -+ "packed_simd", - ] - - [[package]] -@@ -3827,12 +3827,13 @@ dependencies = [ - ] - - [[package]] --name = "packed_simd_2" --version = "0.3.8" --source = "git+https://github.com/hsivonen/packed_simd?rev=f38664024b29d44c506431eada7c112629bb1aa9#f38664024b29d44c506431eada7c112629bb1aa9" -+name = "packed_simd" -+version = "0.3.9" -+source = "git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4#e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" - dependencies = [ - "cfg-if 1.0.0", - "rustc_version", -+ "num-traits", - ] - - [[package]] -diff --git a/Cargo.toml b/Cargo.toml -index 45a6bdb688..670c739298 100644 ---- a/Cargo.toml -+++ b/Cargo.toml -@@ -120,7 +120,7 @@ chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f90 - coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } - fog = { path = "toolkit/components/glean/api" } - libudev-sys = { path = "dom/webauthn/libudev-sys" } --packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="f38664024b29d44c506431eada7c112629bb1aa9" } -+packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" } - midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" } - minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" } - -diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk -index a243ee5f7f..5ea931e8ce 100644 ---- a/config/makefiles/rust.mk -+++ b/config/makefiles/rust.mk -@@ -248,7 +248,7 @@ endif - ifndef RUSTC_BOOTSTRAP - RUSTC_BOOTSTRAP := mozglue_static,qcms - ifdef MOZ_RUST_SIMD --RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd_2 -+RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd - endif - export RUSTC_BOOTSTRAP - endif -diff --git a/third_party/rust/encoding_rs/Cargo.toml b/third_party/rust/encoding_rs/Cargo.toml -index 5fafdfa9ae..e9fd6c0af2 100644 ---- a/third_party/rust/encoding_rs/Cargo.toml -+++ b/third_party/rust/encoding_rs/Cargo.toml -@@ -12,7 +12,7 @@ - [package] - edition = "2018" - name = "encoding_rs" --version = "0.8.31" -+version = "0.8.33" - authors = ["Henri Sivonen "] - description = "A Gecko-oriented implementation of the Encoding Standard" - homepage = "https://docs.rs/encoding_rs/" -@@ -40,9 +40,8 @@ lto = true - version = "1.0" - - [dependencies.packed_simd] --version = "0.3.4" -+version = "0.3.9" - optional = true --package = "packed_simd_2" - - [dependencies.serde] - version = "1.0" -diff --git a/third_party/rust/encoding_rs/README.md b/third_party/rust/encoding_rs/README.md -index d75d77d9a1..087308f07e 100644 ---- a/third_party/rust/encoding_rs/README.md -+++ b/third_party/rust/encoding_rs/README.md -@@ -167,7 +167,7 @@ There are currently these optional cargo features: - - ### `simd-accel` - --Enables SIMD acceleration using the nightly-dependent `packed_simd_2` crate. -+Enables SIMD acceleration using the nightly-dependent `packed_simd` crate. - - This is an opt-in feature, because enabling this feature _opts out_ of Rust's - guarantees of future compilers compiling old code (aka. "stability story"). -@@ -188,7 +188,7 @@ feature. - _Note!_ If you are compiling for a target that does not have 128-bit SIMD - enabled as part of the target definition and you are enabling 128-bit SIMD - using `-C target_feature`, you need to enable the `core_arch` Cargo feature --for `packed_simd_2` to compile a crates.io snapshot of `core_arch` instead of -+for `packed_simd` to compile a crates.io snapshot of `core_arch` instead of - using the standard-library copy of `core::arch`, because the `core::arch` - module of the pre-compiled standard library has been compiled with the - assumption that the CPU doesn't have 128-bit SIMD. At present this applies -@@ -450,6 +450,10 @@ To regenerate the generated code: - - ## Release Notes - -+### 0.8.33 -+ -+* Use `packed_simd` instead of `packed_simd_2` again now that updates are back under the `packed_simd` name. Only affects the `simd-accel` optional nightly feature. -+ - ### 0.8.31 - - * Use SPDX with parentheses now that crates.io supports parentheses. -diff --git a/third_party/rust/packed_simd_2/.appveyor.yml b/third_party/rust/packed_simd/.appveyor.yml -similarity index 100% -rename from third_party/rust/packed_simd_2/.appveyor.yml -rename to third_party/rust/packed_simd/.appveyor.yml -diff --git a/third_party/rust/packed_simd_2/.travis.yml b/third_party/rust/packed_simd/.travis.yml -similarity index 100% -rename from third_party/rust/packed_simd_2/.travis.yml -rename to third_party/rust/packed_simd/.travis.yml -diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml -similarity index 76% -rename from third_party/rust/packed_simd_2/Cargo.toml -rename to third_party/rust/packed_simd/Cargo.toml -index 49338742dc..2ec2161851 100644 ---- a/third_party/rust/packed_simd_2/Cargo.toml -+++ b/third_party/rust/packed_simd/Cargo.toml -@@ -1,6 +1,6 @@ - [package] --name = "packed_simd_2" --version = "0.3.8" -+name = "packed_simd" -+version = "0.3.9" - description = "Portable Packed SIMD vectors" - documentation = "https://docs.rs/crate/packed_simd/" - homepage = "https://github.com/rust-lang/packed_simd" -@@ -31,8 +38,19 @@ default = [] - into_bits = [] - libcore_neon = [] - -+[package.metadata.docs.rs] -+features = ["into_bits"] -+rustdoc-args = [ -+ "--cfg", -+ "doc_cfg", -+] -+ -+[dependencies.num-traits] -+version = "0.2.14" -+default-features = false -+ - [dev-dependencies] --paste = "^0.1.3" -+paste = "^1" - arrayvec = { version = "^0.5", default-features = false } - - [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys] -@@ -41,5 +59,5 @@ optional = true - - [target.wasm32-unknown-unknown.dev-dependencies] - # Keep in sync with the version on Dockerfile. --wasm-bindgen = "=0.2.73" --wasm-bindgen-test = "=0.3.23" -+wasm-bindgen = "=0.2.87" -+wasm-bindgen-test = "=0.3.37" -diff --git a/third_party/rust/packed_simd_2/LICENSE-APACHE b/third_party/rust/packed_simd/LICENSE-APACHE -similarity index 100% -rename from third_party/rust/packed_simd_2/LICENSE-APACHE -rename to third_party/rust/packed_simd/LICENSE-APACHE -diff --git a/third_party/rust/packed_simd_2/LICENSE-MIT b/third_party/rust/packed_simd/LICENSE-MIT -similarity index 100% -rename from third_party/rust/packed_simd_2/LICENSE-MIT -rename to third_party/rust/packed_simd/LICENSE-MIT -diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd/README.md -similarity index 76% -rename from third_party/rust/packed_simd_2/README.md -rename to third_party/rust/packed_simd/README.md -index eb3101c33d..59db13fe4f 100644 ---- a/third_party/rust/packed_simd_2/README.md -+++ b/third_party/rust/packed_simd/README.md -@@ -1,24 +1,11 @@ --# The Crates.io Version Can No Longer Be Updated! -- --The original maintainer is out of contact, and the new maintainers (the Portable SIMD Project Group) do not have the appropriate crates.io permissions to issue updates. -- --We are aware that the version available on crates.io is currently broken, and will not build. -- --If you need to continue to use the crate, we have published a "next version" under an alternative name. -- --Adjust your `[dependencies]` section of `Cargo.toml` to be the following: --```toml --packed_simd = { version = "0.3.8", package = "packed_simd_2" } --``` -- - # `Simd<[T; N]>` - - ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366] - --[![Travis-CI Status]][travis] [![Latest Version]][crates.io] [![docs]][master_docs] -+[![Latest Version]][crates.io] [![docs]][master_docs] - - **WARNING**: this crate only supports the most recent nightly Rust toolchain --and will be superseded by [stdsimd](https://github.com/rust-lang/stdsimd). -+and will be superseded by [`#![feature(portable_simd)]`](https://github.com/rust-lang/portable-simd). - - ## Documentation - -@@ -84,30 +71,25 @@ whether the test suite passes for a given target. - | `i586-unknown-linux-gnu` | ✓ | ✗ | - | `i686-unknown-linux-gnu` | ✓ | ✗ | - | `x86_64-unknown-linux-gnu` | ✓ | ✓ | --| `arm-unknown-linux-gnueabi` | ✗ | ✗ | - | `arm-unknown-linux-gnueabihf` | ✓ | ✓ | - | `armv7-unknown-linux-gnueabi` | ✓ | ✓ | - | `aarch64-unknown-linux-gnu` | ✓ | ✓ | --| `mips-unknown-linux-gnu` | ✓ | ✗ | --| `mipsel-unknown-linux-musl` | ✓ | ✗ | --| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ | --| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ | --| `powerpc-unknown-linux-gnu` | ✗ | ✗ | --| `powerpc64-unknown-linux-gnu` | ✗ | ✗ | -+| `powerpc-unknown-linux-gnu` | ✓ | ✗ | -+| `powerpc64-unknown-linux-gnu` | ✓ | ✗ | - | `powerpc64le-unknown-linux-gnu` | ✓ | ✓ | --| `s390x-unknown-linux-gnu` | ✗ | ✗ | -+| `s390x-unknown-linux-gnu` | ✓ | ✗ | - | `sparc64-unknown-linux-gnu` | ✓ | ✗ | - | `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ | - | **MacOSX** | **build** | **run** | - | `x86_64-apple-darwin` | ✓ | ✓ | - | **Android** | **build** | **run** | - | `x86_64-linux-android` | ✓ | ✓ | --| `arm-linux-androideabi` | ✓ | ✓ | --| `aarch64-linux-android` | ✓ | ✓ | --| `thumbv7neon-linux-androideabi` | ✗ | ✗ | -+| `armv7-linux-androideabi` | ✓ | ✗ | -+| `aarch64-linux-android` | ✓ | ✗ | -+| `thumbv7neon-linux-androideabi` | ✓ | ✗ | - | **iOS** | **build** | **run** | --| `x86_64-apple-ios` | ✓ | ✗ | --| `aarch64-apple-ios` | ✓ | ✗ | -+| `x86_64-apple-ios` | ✗ | ✗ | -+| `aarch64-apple-ios` | ✗ | ✗ | - - - ## Machine code verification -@@ -146,11 +128,11 @@ dual licensed as above, without any additional terms or conditions. - [Travis-CI Status]: https://travis-ci.com/rust-lang/packed_simd.svg?branch=master - [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd - [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true --[Latest Version]: https://img.shields.io/crates/v/packed_simd_2.svg --[crates.io]: https://crates.io/crates/packed_simd_2 --[docs]: https://docs.rs/packed_simd_2/badge.svg --[docs.rs]: https://docs.rs/packed_simd_2 --[master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd_2/ -+[Latest Version]: https://img.shields.io/crates/v/packed_simd.svg -+[crates.io]: https://crates.io/crates/packed_simd -+[docs]: https://docs.rs/packed_simd/badge.svg -+[docs.rs]: https://docs.rs/packed_simd -+[master_docs]: https://rust-lang-nursery.github.io/packed_simd/packed_simd/ - [perf_guide]: https://rust-lang-nursery.github.io/packed_simd/perf-guide/ - [rfc2366]: https://github.com/rust-lang/rfcs/pull/2366 - [ISPC]: https://ispc.github.io/ -diff --git a/third_party/rust/packed_simd_2/bors.toml b/third_party/rust/packed_simd/bors.toml -similarity index 100% -rename from third_party/rust/packed_simd_2/bors.toml -rename to third_party/rust/packed_simd/bors.toml -diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd/build.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/build.rs -rename to third_party/rust/packed_simd/build.rs -diff --git a/third_party/rust/packed_simd_2/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/all.sh -rename to third_party/rust/packed_simd/ci/all.sh -diff --git a/third_party/rust/packed_simd/ci/android-install-ndk.sh b/third_party/rust/packed_simd/ci/android-install-ndk.sh -new file mode 100644 -index 0000000000..5370853937 ---- /dev/null -+++ b/third_party/rust/packed_simd/ci/android-install-ndk.sh -@@ -0,0 +1,21 @@ -+#!/usr/bin/env sh -+# Copyright 2016 The Rust Project Developers. See the COPYRIGHT -+# file at the top-level directory of this distribution and at -+# http://rust-lang.org/COPYRIGHT. -+# -+# Licensed under the Apache License, Version 2.0 or the MIT license -+# , at your -+# option. This file may not be copied, modified, or distributed -+# except according to those terms. -+ -+set -ex -+ -+ANDROID_NDK_URL=https://dl.google.com/android/repository -+ANDROID_NDK_ARCHIVE=android-ndk-r25b-linux.zip -+ -+curl -fO "$ANDROID_NDK_URL/$ANDROID_NDK_ARCHIVE" -+unzip -q $ANDROID_NDK_ARCHIVE -+rm $ANDROID_NDK_ARCHIVE -+mv android-ndk-* ndk -+rm -rf android-ndk-* -diff --git a/third_party/rust/packed_simd_2/ci/android-install-sdk.sh b/third_party/rust/packed_simd/ci/android-install-sdk.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/android-install-sdk.sh -rename to third_party/rust/packed_simd/ci/android-install-sdk.sh -diff --git a/third_party/rust/packed_simd_2/ci/android-sysimage.sh b/third_party/rust/packed_simd/ci/android-sysimage.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/android-sysimage.sh -rename to third_party/rust/packed_simd/ci/android-sysimage.sh -diff --git a/third_party/rust/packed_simd_2/ci/benchmark.sh b/third_party/rust/packed_simd/ci/benchmark.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/benchmark.sh -rename to third_party/rust/packed_simd/ci/benchmark.sh -diff --git a/third_party/rust/packed_simd_2/ci/deploy_and_run_on_ios_simulator.rs b/third_party/rust/packed_simd/ci/deploy_and_run_on_ios_simulator.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/deploy_and_run_on_ios_simulator.rs -rename to third_party/rust/packed_simd/ci/deploy_and_run_on_ios_simulator.rs -diff --git a/third_party/rust/packed_simd_2/ci/docker/aarch64-linux-android/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-linux-android/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/aarch64-linux-android/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/aarch64-linux-android/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/aarch64-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabi/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/arm-linux-androideabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-linux-androideabi/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/arm-linux-androideabi/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/armv7-linux-androideabi/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/i586-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/i686-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/mips-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/mipsel-unknown-linux-musl/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile -diff --git a/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json -similarity index 100% -rename from third_party/rust/packed_simd_2/.cargo-checksum.json -rename to third_party/rust/packed_simd/.cargo-checksum.json -diff --git a/third_party/rust/packed_simd_2/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -similarity index 96% -rename from third_party/rust/packed_simd_2/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -index 80cfee8ab5..15ba58e60c 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile -@@ -1,4 +1,4 @@ --FROM ubuntu:18.04 -+FROM ubuntu:22.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ -diff --git a/third_party/rust/packed_simd_2/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -similarity index 96% -rename from third_party/rust/packed_simd_2/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -index 74031a2a3e..21c296dc44 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile -@@ -1,4 +1,4 @@ --FROM ubuntu:18.04 -+FROM ubuntu:22.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc \ -diff --git a/third_party/rust/packed_simd_2/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -similarity index 96% -rename from third_party/rust/packed_simd_2/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -index 471a7d9651..8034145fc0 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile -@@ -1,4 +1,4 @@ --FROM ubuntu:18.04 -+FROM ubuntu:22.04 - - RUN apt-get update && apt-get install -y --no-install-recommends \ - gcc libc6-dev qemu-user ca-certificates \ -diff --git a/third_party/rust/packed_simd_2/ci/docker/s390x-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/s390x-unknown-linux-gnu/Dockerfile -similarity index 90% -rename from third_party/rust/packed_simd_2/ci/docker/s390x-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/s390x-unknown-linux-gnu/Dockerfile -index c645b0bcc2..e785ca370c 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/s390x-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/s390x-unknown-linux-gnu/Dockerfile -@@ -1,4 +1,4 @@ --FROM ubuntu:18.10 -+FROM ubuntu:22.04 - - RUN apt-get update && \ - apt-get install -y --no-install-recommends \ -@@ -17,4 +17,4 @@ ENV CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_LINKER=s390x-linux-gnu-gcc \ - CARGO_TARGET_S390X_UNKNOWN_LINUX_GNU_RUNNER="qemu-s390x -L /usr/s390x-linux-gnu" \ - CC_s390x_unknown_linux_gnu=s390x-linux-gnu-gcc \ - CXX_s390x_unknown_linux_gnu=s390x-linux-gnu-g++ \ -- OBJDUMP=s390x-linux-gnu-objdump -\ No newline at end of file -+ OBJDUMP=s390x-linux-gnu-objdump -diff --git a/third_party/rust/packed_simd_2/ci/docker/sparc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/sparc64-unknown-linux-gnu/Dockerfile -similarity index 92% -rename from third_party/rust/packed_simd_2/ci/docker/sparc64-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/sparc64-unknown-linux-gnu/Dockerfile -index fe12af14da..c35f4d8f31 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/sparc64-unknown-linux-gnu/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/sparc64-unknown-linux-gnu/Dockerfile -@@ -1,4 +1,4 @@ --FROM debian:stretch -+FROM debian:bookworm - - RUN apt-get update && apt-get install -y --no-install-recommends \ - curl ca-certificates \ -@@ -15,4 +15,4 @@ COPY test-runner-linux / - ENV CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_LINKER=sparc64-linux-gnu-gcc \ - CARGO_TARGET_SPARC64_UNKNOWN_LINUX_GNU_RUNNER="/test-runner-linux sparc64" \ - CC_sparc64_unknown_linux_gnu=sparc64-linux-gnu-gcc \ -- PATH=$PATH:/rust/bin -\ No newline at end of file -+ PATH=$PATH:/rust/bin -diff --git a/third_party/rust/packed_simd_2/ci/docker/thumbv7neon-linux-androideabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-linux-androideabi/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/thumbv7neon-linux-androideabi/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/thumbv7neon-linux-androideabi/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/wasm32-unknown-unknown/Dockerfile b/third_party/rust/packed_simd/ci/docker/wasm32-unknown-unknown/Dockerfile -similarity index 86% -rename from third_party/rust/packed_simd_2/ci/docker/wasm32-unknown-unknown/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/wasm32-unknown-unknown/Dockerfile -index bd97170bc7..51ee13e6c9 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/wasm32-unknown-unknown/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/wasm32-unknown-unknown/Dockerfile -@@ -1,4 +1,4 @@ --FROM ubuntu:18.04 -+FROM ubuntu:22.04 - - RUN apt-get update -y && apt-get install -y --no-install-recommends \ - ca-certificates \ -@@ -8,7 +8,8 @@ RUN apt-get update -y && apt-get install -y --no-install-recommends \ - git \ - libc6-dev \ - make \ -- python \ -+ ninja-build \ -+ python-is-python3 \ - xz-utils - - # Install `wasm2wat` -@@ -17,10 +18,10 @@ RUN make -C wabt -j$(nproc) - ENV PATH=$PATH:/wabt/bin - - # Install `wasm-bindgen-test-runner` --RUN curl -L https://github.com/rustwasm/wasm-bindgen/releases/download/0.2.73/wasm-bindgen-0.2.73-x86_64-unknown-linux-musl.tar.gz \ -+RUN curl -L https://github.com/rustwasm/wasm-bindgen/releases/download/0.2.87/wasm-bindgen-0.2.87-x86_64-unknown-linux-musl.tar.gz \ - | tar xzf - - # Keep in sync with the version on Cargo.toml. --ENV PATH=$PATH:/wasm-bindgen-0.2.73-x86_64-unknown-linux-musl -+ENV PATH=$PATH:/wasm-bindgen-0.2.87-x86_64-unknown-linux-musl - ENV CARGO_TARGET_WASM32_UNKNOWN_UNKNOWN_RUNNER=wasm-bindgen-test-runner - - # Install `node` -diff --git a/third_party/rust/packed_simd_2/ci/docker/x86_64-linux-android/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-linux-android/Dockerfile -similarity index 62% -rename from third_party/rust/packed_simd_2/ci/docker/x86_64-linux-android/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/x86_64-linux-android/Dockerfile -index d52dd45b12..785936d347 100644 ---- a/third_party/rust/packed_simd_2/ci/docker/x86_64-linux-android/Dockerfile -+++ b/third_party/rust/packed_simd/ci/docker/x86_64-linux-android/Dockerfile -@@ -1,4 +1,4 @@ --FROM ubuntu:16.04 -+FROM ubuntu:20.04 - - RUN apt-get update && \ - apt-get install -y --no-install-recommends \ -@@ -14,16 +14,18 @@ RUN apt-get update && \ - WORKDIR /android/ - ENV ANDROID_ARCH=x86_64 - COPY android-install-ndk.sh /android/ --RUN sh /android/android-install-ndk.sh $ANDROID_ARCH -+RUN sh /android/android-install-ndk.sh -+ -+ENV STDARCH_ASSERT_INSTR_LIMIT=30 - - # We do not run x86_64-linux-android tests on an android emulator. - # See ci/android-sysimage.sh for informations about how tests are run. - COPY android-sysimage.sh /android/ - RUN bash /android/android-sysimage.sh x86_64 x86_64-24_r07.zip - --ENV PATH=$PATH:/rust/bin:/android/ndk-$ANDROID_ARCH/bin \ -- CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android-gcc \ -- CC_x86_64_linux_android=x86_64-linux-android-gcc \ -- CXX_x86_64_linux_android=x86_64-linux-android-g++ \ -- OBJDUMP=x86_64-linux-android-objdump \ -+ENV PATH=$PATH:/rust/bin:/android/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin \ -+ CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER=x86_64-linux-android21-clang \ -+ CC_x86_64_linux_android=x86_64-linux-android21-clang \ -+ CXX_x86_64_linux_android=x86_64-linux-android21-clang++ \ -+ OBJDUMP=llvm-objdump \ - HOME=/tmp -diff --git a/third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/docker/x86_64-unknown-linux-gnu/Dockerfile -rename to third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile -diff --git a/third_party/rust/packed_simd_2/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/dox.sh -rename to third_party/rust/packed_simd/ci/dox.sh -diff --git a/third_party/rust/packed_simd_2/ci/linux-s390x.sh b/third_party/rust/packed_simd/ci/linux-s390x.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/linux-s390x.sh -rename to third_party/rust/packed_simd/ci/linux-s390x.sh -diff --git a/third_party/rust/packed_simd_2/ci/linux-sparc64.sh b/third_party/rust/packed_simd/ci/linux-sparc64.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/linux-sparc64.sh -rename to third_party/rust/packed_simd/ci/linux-sparc64.sh -diff --git a/third_party/rust/packed_simd_2/ci/lld-shim.rs b/third_party/rust/packed_simd/ci/lld-shim.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/lld-shim.rs -rename to third_party/rust/packed_simd/ci/lld-shim.rs -diff --git a/third_party/rust/packed_simd_2/ci/max_line_width.sh b/third_party/rust/packed_simd/ci/max_line_width.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/max_line_width.sh -rename to third_party/rust/packed_simd/ci/max_line_width.sh -diff --git a/third_party/rust/packed_simd_2/ci/run-docker.sh b/third_party/rust/packed_simd/ci/run-docker.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/run-docker.sh -rename to third_party/rust/packed_simd/ci/run-docker.sh -diff --git a/third_party/rust/packed_simd_2/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh -similarity index 96% -rename from third_party/rust/packed_simd_2/ci/run.sh -rename to third_party/rust/packed_simd/ci/run.sh -index 428a5d8902..b1b22ebd7c 100755 ---- a/third_party/rust/packed_simd_2/ci/run.sh -+++ b/third_party/rust/packed_simd/ci/run.sh -@@ -95,4 +95,5 @@ if [[ "${NOVERIFY}" != "1" ]]; then - cargo_test --release --manifest-path=target/verify/Cargo.toml - fi - --. ci/run_examples.sh -+# FIXME: Figure out which examples take too long to run and ignore or adjust those -+#. ci/run_examples.sh -diff --git a/third_party/rust/packed_simd_2/ci/run_examples.sh b/third_party/rust/packed_simd/ci/run_examples.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/run_examples.sh -rename to third_party/rust/packed_simd/ci/run_examples.sh -diff --git a/third_party/rust/packed_simd_2/ci/runtest-android.rs b/third_party/rust/packed_simd/ci/runtest-android.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/runtest-android.rs -rename to third_party/rust/packed_simd/ci/runtest-android.rs -diff --git a/third_party/rust/packed_simd_2/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/setup_benchmarks.sh -rename to third_party/rust/packed_simd/ci/setup_benchmarks.sh -diff --git a/third_party/rust/packed_simd_2/ci/test-runner-linux b/third_party/rust/packed_simd/ci/test-runner-linux -similarity index 100% -rename from third_party/rust/packed_simd_2/ci/test-runner-linux -rename to third_party/rust/packed_simd/ci/test-runner-linux -diff --git a/third_party/rust/packed_simd_2/contributing.md b/third_party/rust/packed_simd/contributing.md -similarity index 100% -rename from third_party/rust/packed_simd_2/contributing.md -rename to third_party/rust/packed_simd/contributing.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/.gitignore b/third_party/rust/packed_simd/perf-guide/.gitignore -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/.gitignore -rename to third_party/rust/packed_simd/perf-guide/.gitignore -diff --git a/third_party/rust/packed_simd_2/perf-guide/book.toml b/third_party/rust/packed_simd/perf-guide/book.toml -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/book.toml -rename to third_party/rust/packed_simd/perf-guide/book.toml -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/SUMMARY.md b/third_party/rust/packed_simd/perf-guide/src/SUMMARY.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/SUMMARY.md -rename to third_party/rust/packed_simd/perf-guide/src/SUMMARY.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/ascii.css b/third_party/rust/packed_simd/perf-guide/src/ascii.css -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/ascii.css -rename to third_party/rust/packed_simd/perf-guide/src/ascii.css -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/bound_checks.md b/third_party/rust/packed_simd/perf-guide/src/bound_checks.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/bound_checks.md -rename to third_party/rust/packed_simd/perf-guide/src/bound_checks.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/approx.md b/third_party/rust/packed_simd/perf-guide/src/float-math/approx.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/approx.md -rename to third_party/rust/packed_simd/perf-guide/src/float-math/approx.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/fma.md b/third_party/rust/packed_simd/perf-guide/src/float-math/fma.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/fma.md -rename to third_party/rust/packed_simd/perf-guide/src/float-math/fma.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/fp.md b/third_party/rust/packed_simd/perf-guide/src/float-math/fp.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/fp.md -rename to third_party/rust/packed_simd/perf-guide/src/float-math/fp.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/float-math/svml.md b/third_party/rust/packed_simd/perf-guide/src/float-math/svml.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/float-math/svml.md -rename to third_party/rust/packed_simd/perf-guide/src/float-math/svml.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/introduction.md b/third_party/rust/packed_simd/perf-guide/src/introduction.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/introduction.md -rename to third_party/rust/packed_simd/perf-guide/src/introduction.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/prof/linux.md b/third_party/rust/packed_simd/perf-guide/src/prof/linux.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/prof/linux.md -rename to third_party/rust/packed_simd/perf-guide/src/prof/linux.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/prof/mca.md b/third_party/rust/packed_simd/perf-guide/src/prof/mca.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/prof/mca.md -rename to third_party/rust/packed_simd/perf-guide/src/prof/mca.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/prof/profiling.md b/third_party/rust/packed_simd/perf-guide/src/prof/profiling.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/prof/profiling.md -rename to third_party/rust/packed_simd/perf-guide/src/prof/profiling.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/attribute.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/attribute.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/attribute.md -rename to third_party/rust/packed_simd/perf-guide/src/target-feature/attribute.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/features.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/features.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/features.md -rename to third_party/rust/packed_simd/perf-guide/src/target-feature/features.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/inlining.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/inlining.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/inlining.md -rename to third_party/rust/packed_simd/perf-guide/src/target-feature/inlining.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/practice.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/practice.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/practice.md -rename to third_party/rust/packed_simd/perf-guide/src/target-feature/practice.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/runtime.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/runtime.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/runtime.md -rename to third_party/rust/packed_simd/perf-guide/src/target-feature/runtime.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/target-feature/rustflags.md b/third_party/rust/packed_simd/perf-guide/src/target-feature/rustflags.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/target-feature/rustflags.md -rename to third_party/rust/packed_simd/perf-guide/src/target-feature/rustflags.md -diff --git a/third_party/rust/packed_simd_2/perf-guide/src/vert-hor-ops.md b/third_party/rust/packed_simd/perf-guide/src/vert-hor-ops.md -similarity index 100% -rename from third_party/rust/packed_simd_2/perf-guide/src/vert-hor-ops.md -rename to third_party/rust/packed_simd/perf-guide/src/vert-hor-ops.md -diff --git a/third_party/rust/packed_simd_2/rustfmt.toml b/third_party/rust/packed_simd/rustfmt.toml -similarity index 100% -rename from third_party/rust/packed_simd_2/rustfmt.toml -rename to third_party/rust/packed_simd/rustfmt.toml -diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd/src/api.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api.rs -rename to third_party/rust/packed_simd/src/api.rs -diff --git a/third_party/rust/packed_simd_2/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs -similarity index 99% -rename from third_party/rust/packed_simd_2/src/api/bit_manip.rs -rename to third_party/rust/packed_simd/src/api/bit_manip.rs -index 6d8865706d..c1e90bb0fb 100644 ---- a/third_party/rust/packed_simd_2/src/api/bit_manip.rs -+++ b/third_party/rust/packed_simd/src/api/bit_manip.rs -@@ -34,7 +34,7 @@ macro_rules! impl_bit_manip { - - test_if! { - $test_tt: -- paste::item_with_macros! { -+ paste::item! { - #[allow(overflowing_literals)] - pub mod [<$id _bit_manip>] { - #![allow(const_item_mutation)] -diff --git a/third_party/rust/packed_simd_2/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs -similarity index 91% -rename from third_party/rust/packed_simd_2/src/api/bitmask.rs -rename to third_party/rust/packed_simd/src/api/bitmask.rs -index a06ff0fab1..8f4868f328 100644 ---- a/third_party/rust/packed_simd_2/src/api/bitmask.rs -+++ b/third_party/rust/packed_simd/src/api/bitmask.rs -@@ -17,13 +17,10 @@ macro_rules! impl_bitmask { - test_if! { - $test_tt: - paste::item! { -- #[cfg(not(any( -+ #[cfg(not( - // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210 -- all(target_arch = "mips", target_endian = "big"), -- all(target_arch = "mips64", target_endian = "big"), -- target_arch = "sparc64", -- target_arch = "s390x", -- )))] -+ target_endian = "big" -+ ))] - pub mod [<$id _bitmask>] { - use super::*; - #[cfg_attr(not(target_arch = "wasm32"), test)] -diff --git a/third_party/rust/packed_simd_2/src/api/cast.rs b/third_party/rust/packed_simd/src/api/cast.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast.rs -rename to third_party/rust/packed_simd/src/api/cast.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/macros.rs b/third_party/rust/packed_simd/src/api/cast/macros.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/macros.rs -rename to third_party/rust/packed_simd/src/api/cast/macros.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/v128.rs -rename to third_party/rust/packed_simd/src/api/cast/v128.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/v16.rs -rename to third_party/rust/packed_simd/src/api/cast/v16.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/v256.rs -rename to third_party/rust/packed_simd/src/api/cast/v256.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/v32.rs -rename to third_party/rust/packed_simd/src/api/cast/v32.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/v512.rs -rename to third_party/rust/packed_simd/src/api/cast/v512.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cast/v64.rs -rename to third_party/rust/packed_simd/src/api/cast/v64.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cmp.rs b/third_party/rust/packed_simd/src/api/cmp.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cmp.rs -rename to third_party/rust/packed_simd/src/api/cmp.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cmp/eq.rs b/third_party/rust/packed_simd/src/api/cmp/eq.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cmp/eq.rs -rename to third_party/rust/packed_simd/src/api/cmp/eq.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cmp/ord.rs b/third_party/rust/packed_simd/src/api/cmp/ord.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cmp/ord.rs -rename to third_party/rust/packed_simd/src/api/cmp/ord.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cmp/partial_eq.rs b/third_party/rust/packed_simd/src/api/cmp/partial_eq.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cmp/partial_eq.rs -rename to third_party/rust/packed_simd/src/api/cmp/partial_eq.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cmp/partial_ord.rs b/third_party/rust/packed_simd/src/api/cmp/partial_ord.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cmp/partial_ord.rs -rename to third_party/rust/packed_simd/src/api/cmp/partial_ord.rs -diff --git a/third_party/rust/packed_simd_2/src/api/cmp/vertical.rs b/third_party/rust/packed_simd/src/api/cmp/vertical.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/cmp/vertical.rs -rename to third_party/rust/packed_simd/src/api/cmp/vertical.rs -diff --git a/third_party/rust/packed_simd_2/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/default.rs -rename to third_party/rust/packed_simd/src/api/default.rs -diff --git a/third_party/rust/packed_simd_2/src/api/fmt.rs b/third_party/rust/packed_simd/src/api/fmt.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/fmt.rs -rename to third_party/rust/packed_simd/src/api/fmt.rs -diff --git a/third_party/rust/packed_simd_2/src/api/fmt/binary.rs b/third_party/rust/packed_simd/src/api/fmt/binary.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/fmt/binary.rs -rename to third_party/rust/packed_simd/src/api/fmt/binary.rs -diff --git a/third_party/rust/packed_simd_2/src/api/fmt/debug.rs b/third_party/rust/packed_simd/src/api/fmt/debug.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/fmt/debug.rs -rename to third_party/rust/packed_simd/src/api/fmt/debug.rs -diff --git a/third_party/rust/packed_simd_2/src/api/fmt/lower_hex.rs b/third_party/rust/packed_simd/src/api/fmt/lower_hex.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/fmt/lower_hex.rs -rename to third_party/rust/packed_simd/src/api/fmt/lower_hex.rs -diff --git a/third_party/rust/packed_simd_2/src/api/fmt/octal.rs b/third_party/rust/packed_simd/src/api/fmt/octal.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/fmt/octal.rs -rename to third_party/rust/packed_simd/src/api/fmt/octal.rs -diff --git a/third_party/rust/packed_simd_2/src/api/fmt/upper_hex.rs b/third_party/rust/packed_simd/src/api/fmt/upper_hex.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/fmt/upper_hex.rs -rename to third_party/rust/packed_simd/src/api/fmt/upper_hex.rs -diff --git a/third_party/rust/packed_simd_2/src/api/from.rs b/third_party/rust/packed_simd/src/api/from.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/from.rs -rename to third_party/rust/packed_simd/src/api/from.rs -diff --git a/third_party/rust/packed_simd_2/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs -similarity index 99% -rename from third_party/rust/packed_simd_2/src/api/from/from_array.rs -rename to third_party/rust/packed_simd/src/api/from/from_array.rs -index b83f938162..5c7801ddaf 100644 ---- a/third_party/rust/packed_simd_2/src/api/from/from_array.rs -+++ b/third_party/rust/packed_simd/src/api/from/from_array.rs -@@ -61,6 +61,7 @@ macro_rules! impl_from_array { - mod [<$id _from>] { - use super::*; - #[test] -+ #[cfg_attr(miri, ignore)] - fn array() { - let vec: $id = Default::default(); - -diff --git a/third_party/rust/packed_simd_2/src/api/from/from_vector.rs b/third_party/rust/packed_simd/src/api/from/from_vector.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/from/from_vector.rs -rename to third_party/rust/packed_simd/src/api/from/from_vector.rs -diff --git a/third_party/rust/packed_simd_2/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/hash.rs -rename to third_party/rust/packed_simd/src/api/hash.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits.rs b/third_party/rust/packed_simd/src/api/into_bits.rs -similarity index 91% -rename from third_party/rust/packed_simd_2/src/api/into_bits.rs -rename to third_party/rust/packed_simd/src/api/into_bits.rs -index 32b6d2ddce..03fbe4bff7 100644 ---- a/third_party/rust/packed_simd_2/src/api/into_bits.rs -+++ b/third_party/rust/packed_simd/src/api/into_bits.rs -@@ -1,12 +1,14 @@ - //! Implementation of `FromBits` and `IntoBits`. - - /// Safe lossless bitwise conversion from `T` to `Self`. -+#[cfg_attr(doc_cfg, doc(cfg(feature = "into_bits")))] - pub trait FromBits: crate::marker::Sized { - /// Safe lossless bitwise transmute from `T` to `Self`. - fn from_bits(t: T) -> Self; - } - - /// Safe lossless bitwise conversion from `Self` to `T`. -+#[cfg_attr(doc_cfg, doc(cfg(feature = "into_bits")))] - pub trait IntoBits: crate::marker::Sized { - /// Safe lossless bitwise transmute from `self` to `T`. - fn into_bits(self) -> T; -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/arch_specific.rs -rename to third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/macros.rs b/third_party/rust/packed_simd/src/api/into_bits/macros.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/macros.rs -rename to third_party/rust/packed_simd/src/api/into_bits/macros.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/v128.rs -rename to third_party/rust/packed_simd/src/api/into_bits/v128.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/v16.rs -rename to third_party/rust/packed_simd/src/api/into_bits/v16.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/v256.rs -rename to third_party/rust/packed_simd/src/api/into_bits/v256.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/v32.rs -rename to third_party/rust/packed_simd/src/api/into_bits/v32.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/v512.rs -rename to third_party/rust/packed_simd/src/api/into_bits/v512.rs -diff --git a/third_party/rust/packed_simd_2/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/into_bits/v64.rs -rename to third_party/rust/packed_simd/src/api/into_bits/v64.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math.rs b/third_party/rust/packed_simd/src/api/math.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math.rs -rename to third_party/rust/packed_simd/src/api/math.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float.rs b/third_party/rust/packed_simd/src/api/math/float.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float.rs -rename to third_party/rust/packed_simd/src/api/math/float.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/abs.rs b/third_party/rust/packed_simd/src/api/math/float/abs.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/abs.rs -rename to third_party/rust/packed_simd/src/api/math/float/abs.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/consts.rs b/third_party/rust/packed_simd/src/api/math/float/consts.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/consts.rs -rename to third_party/rust/packed_simd/src/api/math/float/consts.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/cos.rs b/third_party/rust/packed_simd/src/api/math/float/cos.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/cos.rs -rename to third_party/rust/packed_simd/src/api/math/float/cos.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/exp.rs b/third_party/rust/packed_simd/src/api/math/float/exp.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/exp.rs -rename to third_party/rust/packed_simd/src/api/math/float/exp.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/ln.rs b/third_party/rust/packed_simd/src/api/math/float/ln.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/ln.rs -rename to third_party/rust/packed_simd/src/api/math/float/ln.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/mul_add.rs b/third_party/rust/packed_simd/src/api/math/float/mul_add.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/mul_add.rs -rename to third_party/rust/packed_simd/src/api/math/float/mul_add.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/mul_adde.rs b/third_party/rust/packed_simd/src/api/math/float/mul_adde.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/mul_adde.rs -rename to third_party/rust/packed_simd/src/api/math/float/mul_adde.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/powf.rs b/third_party/rust/packed_simd/src/api/math/float/powf.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/powf.rs -rename to third_party/rust/packed_simd/src/api/math/float/powf.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/recpre.rs b/third_party/rust/packed_simd/src/api/math/float/recpre.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/recpre.rs -rename to third_party/rust/packed_simd/src/api/math/float/recpre.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/rsqrte.rs b/third_party/rust/packed_simd/src/api/math/float/rsqrte.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/rsqrte.rs -rename to third_party/rust/packed_simd/src/api/math/float/rsqrte.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/sin.rs b/third_party/rust/packed_simd/src/api/math/float/sin.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/sin.rs -rename to third_party/rust/packed_simd/src/api/math/float/sin.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/sqrt.rs b/third_party/rust/packed_simd/src/api/math/float/sqrt.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/sqrt.rs -rename to third_party/rust/packed_simd/src/api/math/float/sqrt.rs -diff --git a/third_party/rust/packed_simd_2/src/api/math/float/sqrte.rs b/third_party/rust/packed_simd/src/api/math/float/sqrte.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/math/float/sqrte.rs -rename to third_party/rust/packed_simd/src/api/math/float/sqrte.rs -diff --git a/third_party/rust/packed_simd_2/src/api/minimal.rs b/third_party/rust/packed_simd/src/api/minimal.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/minimal.rs -rename to third_party/rust/packed_simd/src/api/minimal.rs -diff --git a/third_party/rust/packed_simd_2/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/minimal/iuf.rs -rename to third_party/rust/packed_simd/src/api/minimal/iuf.rs -diff --git a/third_party/rust/packed_simd_2/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/minimal/mask.rs -rename to third_party/rust/packed_simd/src/api/minimal/mask.rs -diff --git a/third_party/rust/packed_simd_2/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs -similarity index 99% -rename from third_party/rust/packed_simd_2/src/api/minimal/ptr.rs -rename to third_party/rust/packed_simd/src/api/minimal/ptr.rs -index c3d61fbf6d..d9e47c9ccb 100644 ---- a/third_party/rust/packed_simd_2/src/api/minimal/ptr.rs -+++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs -@@ -583,7 +583,7 @@ macro_rules! impl_minimal_p { - pub fn from_slice_aligned(slice: &[$elem_ty]) -> Self { - unsafe { - assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked(0) as *const $elem_ty; -+ let target_ptr = slice.as_ptr(); - assert!( - target_ptr.align_offset(crate::mem::align_of::()) - == 0 -@@ -615,7 +615,7 @@ macro_rules! impl_minimal_p { - pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) - -> Self { - #[allow(clippy::cast_ptr_alignment)] -- *(slice.get_unchecked(0) as *const $elem_ty as *const Self) -+ *(slice.as_ptr().cast()) - } - - /// Instantiates a new vector with the values of the `slice`. -@@ -628,8 +628,7 @@ macro_rules! impl_minimal_p { - slice: &[$elem_ty], - ) -> Self { - use crate::mem::size_of; -- let target_ptr = -- slice.get_unchecked(0) as *const $elem_ty as *const u8; -+ let target_ptr = slice.as_ptr().cast(); - let mut x = Self::splat(crate::ptr::null_mut() as $elem_ty); - let self_ptr = &mut x as *mut Self as *mut u8; - crate::ptr::copy_nonoverlapping( -@@ -798,8 +797,7 @@ macro_rules! impl_minimal_p { - pub fn write_to_slice_aligned(self, slice: &mut [$elem_ty]) { - unsafe { - assert!(slice.len() >= $elem_count); -- let target_ptr = -- slice.get_unchecked_mut(0) as *mut $elem_ty; -+ let target_ptr = slice.as_mut_ptr(); - assert!( - target_ptr.align_offset(crate::mem::align_of::()) - == 0 -@@ -833,8 +831,7 @@ macro_rules! impl_minimal_p { - self, slice: &mut [$elem_ty], - ) { - #[allow(clippy::cast_ptr_alignment)] -- *(slice.get_unchecked_mut(0) as *mut $elem_ty as *mut Self) = -- self; -+ *(slice.as_mut_ptr().cast()) = self; - } - - /// Writes the values of the vector to the `slice`. -@@ -846,8 +843,7 @@ macro_rules! impl_minimal_p { - pub unsafe fn write_to_slice_unaligned_unchecked( - self, slice: &mut [$elem_ty], - ) { -- let target_ptr = -- slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; -+ let target_ptr = slice.as_mut_ptr().cast(); - let self_ptr = &self as *const Self as *const u8; - crate::ptr::copy_nonoverlapping( - self_ptr, -diff --git a/third_party/rust/packed_simd_2/src/api/ops.rs b/third_party/rust/packed_simd/src/api/ops.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops.rs -rename to third_party/rust/packed_simd/src/api/ops.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_arithmetic.rs b/third_party/rust/packed_simd/src/api/ops/scalar_arithmetic.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/scalar_arithmetic.rs -rename to third_party/rust/packed_simd/src/api/ops/scalar_arithmetic.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/scalar_bitwise.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/scalar_bitwise.rs -rename to third_party/rust/packed_simd/src/api/ops/scalar_bitwise.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_mask_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/scalar_mask_bitwise.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/scalar_mask_bitwise.rs -rename to third_party/rust/packed_simd/src/api/ops/scalar_mask_bitwise.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/scalar_shifts.rs b/third_party/rust/packed_simd/src/api/ops/scalar_shifts.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/scalar_shifts.rs -rename to third_party/rust/packed_simd/src/api/ops/scalar_shifts.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_arithmetic.rs b/third_party/rust/packed_simd/src/api/ops/vector_arithmetic.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_arithmetic.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_arithmetic.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/vector_bitwise.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_bitwise.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_bitwise.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_float_min_max.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_int_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_int_min_max.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_int_min_max.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_int_min_max.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_mask_bitwise.rs b/third_party/rust/packed_simd/src/api/ops/vector_mask_bitwise.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_mask_bitwise.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_mask_bitwise.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_neg.rs b/third_party/rust/packed_simd/src/api/ops/vector_neg.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_neg.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_neg.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_rotates.rs b/third_party/rust/packed_simd/src/api/ops/vector_rotates.rs -similarity index 97% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_rotates.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_rotates.rs -index 147fc2e37d..6c4bed72a2 100644 ---- a/third_party/rust/packed_simd_2/src/api/ops/vector_rotates.rs -+++ b/third_party/rust/packed_simd/src/api/ops/vector_rotates.rs -@@ -23,8 +23,8 @@ macro_rules! impl_ops_vector_rotates { - /// amount in the corresponding lane of `n`, wrapping the - /// truncated bits to the beginning of the resulting integer. - /// -- /// Note: this is neither the same operation as `<<` nor equivalent -- /// to `slice::rotate_left`. -+ /// Note: this is neither the same operation as `>>` nor equivalent -+ /// to `slice::rotate_right`. - #[inline] - pub fn rotate_right(self, n: $id) -> $id { - const LANE_WIDTH: $elem_ty = -diff --git a/third_party/rust/packed_simd_2/src/api/ops/vector_shifts.rs b/third_party/rust/packed_simd/src/api/ops/vector_shifts.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ops/vector_shifts.rs -rename to third_party/rust/packed_simd/src/api/ops/vector_shifts.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ptr.rs b/third_party/rust/packed_simd/src/api/ptr.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ptr.rs -rename to third_party/rust/packed_simd/src/api/ptr.rs -diff --git a/third_party/rust/packed_simd_2/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/ptr/gather_scatter.rs -rename to third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs -diff --git a/third_party/rust/packed_simd_2/src/api/reductions.rs b/third_party/rust/packed_simd/src/api/reductions.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/reductions.rs -rename to third_party/rust/packed_simd/src/api/reductions.rs -diff --git a/third_party/rust/packed_simd_2/src/api/reductions/bitwise.rs b/third_party/rust/packed_simd/src/api/reductions/bitwise.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/reductions/bitwise.rs -rename to third_party/rust/packed_simd/src/api/reductions/bitwise.rs -diff --git a/third_party/rust/packed_simd_2/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/reductions/float_arithmetic.rs -rename to third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs -diff --git a/third_party/rust/packed_simd_2/src/api/reductions/integer_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/integer_arithmetic.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/reductions/integer_arithmetic.rs -rename to third_party/rust/packed_simd/src/api/reductions/integer_arithmetic.rs -diff --git a/third_party/rust/packed_simd_2/src/api/reductions/mask.rs b/third_party/rust/packed_simd/src/api/reductions/mask.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/reductions/mask.rs -rename to third_party/rust/packed_simd/src/api/reductions/mask.rs -diff --git a/third_party/rust/packed_simd_2/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/reductions/min_max.rs -rename to third_party/rust/packed_simd/src/api/reductions/min_max.rs -diff --git a/third_party/rust/packed_simd_2/src/api/select.rs b/third_party/rust/packed_simd/src/api/select.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/select.rs -rename to third_party/rust/packed_simd/src/api/select.rs -diff --git a/third_party/rust/packed_simd_2/src/api/shuffle.rs b/third_party/rust/packed_simd/src/api/shuffle.rs -similarity index 99% -rename from third_party/rust/packed_simd_2/src/api/shuffle.rs -rename to third_party/rust/packed_simd/src/api/shuffle.rs -index fda29ccddc..1c17bd766e 100644 ---- a/third_party/rust/packed_simd_2/src/api/shuffle.rs -+++ b/third_party/rust/packed_simd/src/api/shuffle.rs -@@ -27,7 +27,7 @@ - /// Shuffling elements of two vectors: - /// - /// ``` --/// # use packed_simd_2::*; -+/// # use packed_simd::*; - /// # fn main() { - /// // Shuffle allows reordering the elements: - /// let x = i32x4::new(1, 2, 3, 4); -@@ -49,7 +49,7 @@ - /// Shuffling elements of one vector: - /// - /// ``` --/// # use packed_simd_2::*; -+/// # use packed_simd::*; - /// # fn main() { - /// // Shuffle allows reordering the elements of a vector: - /// let x = i32x4::new(1, 2, 3, 4); -diff --git a/third_party/rust/packed_simd_2/src/api/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/api/shuffle1_dyn.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/shuffle1_dyn.rs -rename to third_party/rust/packed_simd/src/api/shuffle1_dyn.rs -diff --git a/third_party/rust/packed_simd_2/src/api/slice.rs b/third_party/rust/packed_simd/src/api/slice.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/api/slice.rs -rename to third_party/rust/packed_simd/src/api/slice.rs -diff --git a/third_party/rust/packed_simd_2/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs -similarity index 97% -rename from third_party/rust/packed_simd_2/src/api/slice/from_slice.rs -rename to third_party/rust/packed_simd/src/api/slice/from_slice.rs -index 50f3914f7b..cafd6f8213 100644 ---- a/third_party/rust/packed_simd_2/src/api/slice/from_slice.rs -+++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs -@@ -13,7 +13,7 @@ macro_rules! impl_slice_from_slice { - pub fn from_slice_aligned(slice: &[$elem_ty]) -> Self { - unsafe { - assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked(0) as *const $elem_ty; -+ let target_ptr = slice.as_ptr(); - assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); - Self::from_slice_aligned_unchecked(slice) - } -@@ -41,7 +41,7 @@ macro_rules! impl_slice_from_slice { - #[inline] - pub unsafe fn from_slice_aligned_unchecked(slice: &[$elem_ty]) -> Self { - debug_assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked(0) as *const $elem_ty; -+ let target_ptr = slice.as_ptr(); - debug_assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); - - #[allow(clippy::cast_ptr_alignment)] -@@ -57,7 +57,7 @@ macro_rules! impl_slice_from_slice { - pub unsafe fn from_slice_unaligned_unchecked(slice: &[$elem_ty]) -> Self { - use crate::mem::size_of; - debug_assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked(0) as *const $elem_ty as *const u8; -+ let target_ptr = slice.as_ptr().cast(); - let mut x = Self::splat(0 as $elem_ty); - let self_ptr = &mut x as *mut Self as *mut u8; - crate::ptr::copy_nonoverlapping(target_ptr, self_ptr, size_of::()); -diff --git a/third_party/rust/packed_simd_2/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs -similarity index 97% -rename from third_party/rust/packed_simd_2/src/api/slice/write_to_slice.rs -rename to third_party/rust/packed_simd/src/api/slice/write_to_slice.rs -index dd04a2634d..5abd4916e0 100644 ---- a/third_party/rust/packed_simd_2/src/api/slice/write_to_slice.rs -+++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs -@@ -13,7 +13,7 @@ macro_rules! impl_slice_write_to_slice { - pub fn write_to_slice_aligned(self, slice: &mut [$elem_ty]) { - unsafe { - assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked_mut(0) as *mut $elem_ty; -+ let target_ptr = slice.as_mut_ptr(); - assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); - self.write_to_slice_aligned_unchecked(slice); - } -@@ -42,7 +42,7 @@ macro_rules! impl_slice_write_to_slice { - #[inline] - pub unsafe fn write_to_slice_aligned_unchecked(self, slice: &mut [$elem_ty]) { - debug_assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked_mut(0) as *mut $elem_ty; -+ let target_ptr = slice.as_mut_ptr(); - debug_assert_eq!(target_ptr.align_offset(crate::mem::align_of::()), 0); - - #[allow(clippy::cast_ptr_alignment)] -@@ -60,7 +60,7 @@ macro_rules! impl_slice_write_to_slice { - #[inline] - pub unsafe fn write_to_slice_unaligned_unchecked(self, slice: &mut [$elem_ty]) { - debug_assert!(slice.len() >= $elem_count); -- let target_ptr = slice.get_unchecked_mut(0) as *mut $elem_ty as *mut u8; -+ let target_ptr = slice.as_mut_ptr().cast(); - let self_ptr = &self as *const Self as *const u8; - crate::ptr::copy_nonoverlapping(self_ptr, target_ptr, crate::mem::size_of::()); - } -diff --git a/third_party/rust/packed_simd_2/src/api/swap_bytes.rs b/third_party/rust/packed_simd/src/api/swap_bytes.rs -similarity index 99% -rename from third_party/rust/packed_simd_2/src/api/swap_bytes.rs -rename to third_party/rust/packed_simd/src/api/swap_bytes.rs -index 53bba25bd3..4649ed679b 100644 ---- a/third_party/rust/packed_simd_2/src/api/swap_bytes.rs -+++ b/third_party/rust/packed_simd/src/api/swap_bytes.rs -@@ -76,7 +76,7 @@ macro_rules! impl_swap_bytes { - - test_if! { - $test_tt: -- paste::item_with_macros! { -+ paste::item! { - pub mod [<$id _swap_bytes>] { - use super::*; - -diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen.rs -rename to third_party/rust/packed_simd/src/codegen.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/bit_manip.rs -rename to third_party/rust/packed_simd/src/codegen/bit_manip.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs -similarity index 85% -rename from third_party/rust/packed_simd_2/src/codegen/llvm.rs -rename to third_party/rust/packed_simd/src/codegen/llvm.rs -index b4c09849bc..bb482fac66 100644 ---- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs -+++ b/third_party/rust/packed_simd/src/codegen/llvm.rs -@@ -5,14 +5,8 @@ use crate::sealed::Shuffle; - #[allow(unused_imports)] // FIXME: spurious warning? - use crate::sealed::Simd; - --// Shuffle intrinsics: expanded in users' crates, therefore public. - extern "platform-intrinsic" { -- pub fn simd_shuffle2(x: T, y: T, idx: [u32; 2]) -> U; -- pub fn simd_shuffle4(x: T, y: T, idx: [u32; 4]) -> U; -- pub fn simd_shuffle8(x: T, y: T, idx: [u32; 8]) -> U; -- pub fn simd_shuffle16(x: T, y: T, idx: [u32; 16]) -> U; -- pub fn simd_shuffle32(x: T, y: T, idx: [u32; 32]) -> U; -- pub fn simd_shuffle64(x: T, y: T, idx: [u32; 64]) -> U; -+ fn simd_shuffle(x: T, y: T, idx: I) -> U; - } - - #[allow(clippy::missing_safety_doc)] -@@ -22,7 +16,7 @@ where - T: Simd, - ::Element: Shuffle<[u32; 2], Output = U>, - { -- simd_shuffle2(x, y, IDX) -+ simd_shuffle(x, y, IDX) - } - - #[allow(clippy::missing_safety_doc)] -@@ -32,7 +26,7 @@ where - T: Simd, - ::Element: Shuffle<[u32; 4], Output = U>, - { -- simd_shuffle4(x, y, IDX) -+ simd_shuffle(x, y, IDX) - } - - #[allow(clippy::missing_safety_doc)] -@@ -42,7 +36,7 @@ where - T: Simd, - ::Element: Shuffle<[u32; 8], Output = U>, - { -- simd_shuffle8(x, y, IDX) -+ simd_shuffle(x, y, IDX) - } - - #[allow(clippy::missing_safety_doc)] -@@ -52,7 +46,7 @@ where - T: Simd, - ::Element: Shuffle<[u32; 16], Output = U>, - { -- simd_shuffle16(x, y, IDX) -+ simd_shuffle(x, y, IDX) - } - - #[allow(clippy::missing_safety_doc)] -@@ -62,7 +56,7 @@ where - T: Simd, - ::Element: Shuffle<[u32; 32], Output = U>, - { -- simd_shuffle32(x, y, IDX) -+ simd_shuffle(x, y, IDX) - } - - #[allow(clippy::missing_safety_doc)] -@@ -72,7 +66,7 @@ where - T: Simd, - ::Element: Shuffle<[u32; 64], Output = U>, - { -- simd_shuffle64(x, y, IDX) -+ simd_shuffle(x, y, IDX) - } - - extern "platform-intrinsic" { -diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd/src/codegen/math.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math.rs -rename to third_party/rust/packed_simd/src/codegen/math.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd/src/codegen/math/float.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float.rs -rename to third_party/rust/packed_simd/src/codegen/math/float.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd/src/codegen/math/float/abs.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/abs.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd/src/codegen/math/float/cos.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/cos.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd/src/codegen/math/float/cos_pi.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/cos_pi.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd/src/codegen/math/float/exp.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/exp.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd/src/codegen/math/float/ln.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/ln.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/macros.rs b/third_party/rust/packed_simd/src/codegen/math/float/macros.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/macros.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/macros.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd/src/codegen/math/float/mul_add.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/mul_add.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd/src/codegen/math/float/mul_adde.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/mul_adde.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd/src/codegen/math/float/powf.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/powf.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd/src/codegen/math/float/sin.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/sin.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd/src/codegen/math/float/sin_cos_pi.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/sin_cos_pi.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd/src/codegen/math/float/sin_pi.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/sin_pi.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd/src/codegen/math/float/sqrt.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/sqrt.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd/src/codegen/math/float/sqrte.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs -rename to third_party/rust/packed_simd/src/codegen/math/float/sqrte.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd/src/codegen/pointer_sized_int.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs -rename to third_party/rust/packed_simd/src/codegen/pointer_sized_int.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd/src/codegen/reductions.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions.rs -rename to third_party/rust/packed_simd/src/codegen/reductions.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/aarch64.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/aarch64.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/aarch64.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/aarch64.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/arm.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/arm.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/arm.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/arm.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/fallback.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/fallback.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback_impl.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/fallback_impl.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/fallback_impl.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/fallback_impl.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx2.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx2.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/avx2.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/avx2.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse2.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse2.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/reductions/mask/x86/sse2.rs -rename to third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse2.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/shuffle.rs -rename to third_party/rust/packed_simd/src/codegen/shuffle.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/shuffle1_dyn.rs -rename to third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd/src/codegen/swap_bytes.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs -rename to third_party/rust/packed_simd/src/codegen/swap_bytes.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/v128.rs b/third_party/rust/packed_simd/src/codegen/v128.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/v128.rs -rename to third_party/rust/packed_simd/src/codegen/v128.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/v16.rs b/third_party/rust/packed_simd/src/codegen/v16.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/v16.rs -rename to third_party/rust/packed_simd/src/codegen/v16.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/v256.rs b/third_party/rust/packed_simd/src/codegen/v256.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/v256.rs -rename to third_party/rust/packed_simd/src/codegen/v256.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/v32.rs b/third_party/rust/packed_simd/src/codegen/v32.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/v32.rs -rename to third_party/rust/packed_simd/src/codegen/v32.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/v512.rs b/third_party/rust/packed_simd/src/codegen/v512.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/v512.rs -rename to third_party/rust/packed_simd/src/codegen/v512.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/v64.rs b/third_party/rust/packed_simd/src/codegen/v64.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/v64.rs -rename to third_party/rust/packed_simd/src/codegen/v64.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/vPtr.rs -rename to third_party/rust/packed_simd/src/codegen/vPtr.rs -diff --git a/third_party/rust/packed_simd_2/src/codegen/vSize.rs b/third_party/rust/packed_simd/src/codegen/vSize.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/codegen/vSize.rs -rename to third_party/rust/packed_simd/src/codegen/vSize.rs -diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs -similarity index 98% -rename from third_party/rust/packed_simd_2/src/lib.rs -rename to third_party/rust/packed_simd/src/lib.rs -index cd8a86805d..fdc64f1e46 100644 ---- a/third_party/rust/packed_simd_2/src/lib.rs -+++ b/third_party/rust/packed_simd/src/lib.rs -@@ -26,7 +26,7 @@ - //! are applied to each vector lane in isolation of the others: - //! - //! ``` --//! # use packed_simd_2::*; -+//! # use packed_simd::*; - //! let a = i32x4::new(1, 2, 3, 4); - //! let b = i32x4::new(5, 6, 7, 8); - //! assert_eq!(a + b, i32x4::new(6, 8, 10, 12)); -@@ -35,7 +35,7 @@ - //! Many "horizontal" operations are also provided: - //! - //! ``` --//! # use packed_simd_2::*; -+//! # use packed_simd::*; - //! # let a = i32x4::new(1, 2, 3, 4); - //! assert_eq!(a.wrapping_sum(), 10); - //! ``` -@@ -47,7 +47,7 @@ - //! and performing a single horizontal operation at the end: - //! - //! ``` --//! # use packed_simd_2::*; -+//! # use packed_simd::*; - //! fn reduce(x: &[i32]) -> i32 { - //! assert_eq!(x.len() % 4, 0); - //! let mut sum = i32x4::splat(0); // [0, 0, 0, 0] -@@ -79,7 +79,7 @@ - //! ## Basic operations - //! - //! ``` --//! # use packed_simd_2::*; -+//! # use packed_simd::*; - //! // Sets all elements to `0`: - //! let a = i32x4::splat(0); - //! -@@ -107,7 +107,7 @@ - //! to be performed: - //! - //! ``` --//! # use packed_simd_2::*; -+//! # use packed_simd::*; - //! let a = i32x4::new(1, 1, 2, 2); - //! - //! // Add `1` to the first two lanes of the vector. -@@ -140,7 +140,7 @@ - //! All vertical comparison operations returns masks: - //! - //! ``` --//! # use packed_simd_2::*; -+//! # use packed_simd::*; - //! let a = i32x4::new(1, 1, 3, 3); - //! let b = i32x4::new(2, 2, 0, 0); - //! -@@ -242,6 +242,7 @@ - clippy::from_over_into, - )] - #![cfg_attr(test, feature(hashmap_internals))] -+#![cfg_attr(doc_cfg, feature(doc_cfg))] - #![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)] - #![no_std] - -@@ -280,7 +281,7 @@ pub use crate::sealed::{Mask, Shuffle, Simd as SimdVector, SimdArray}; - /// # Examples - /// - /// ``` --/// # use packed_simd_2::Simd; -+/// # use packed_simd::Simd; - /// let v = Simd::<[i32; 4]>::new(0, 1, 2, 3); - /// assert_eq!(v.extract(2), 2); - /// ``` -diff --git a/third_party/rust/packed_simd_2/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/masks.rs -rename to third_party/rust/packed_simd/src/masks.rs -diff --git a/third_party/rust/packed_simd_2/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/sealed.rs -rename to third_party/rust/packed_simd/src/sealed.rs -diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd/src/testing.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/testing.rs -rename to third_party/rust/packed_simd/src/testing.rs -diff --git a/third_party/rust/packed_simd_2/src/testing/macros.rs b/third_party/rust/packed_simd/src/testing/macros.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/testing/macros.rs -rename to third_party/rust/packed_simd/src/testing/macros.rs -diff --git a/third_party/rust/packed_simd_2/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/testing/utils.rs -rename to third_party/rust/packed_simd/src/testing/utils.rs -diff --git a/third_party/rust/packed_simd_2/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/v128.rs -rename to third_party/rust/packed_simd/src/v128.rs -diff --git a/third_party/rust/packed_simd_2/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/v16.rs -rename to third_party/rust/packed_simd/src/v16.rs -diff --git a/third_party/rust/packed_simd_2/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/v256.rs -rename to third_party/rust/packed_simd/src/v256.rs -diff --git a/third_party/rust/packed_simd_2/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/v32.rs -rename to third_party/rust/packed_simd/src/v32.rs -diff --git a/third_party/rust/packed_simd_2/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/v512.rs -rename to third_party/rust/packed_simd/src/v512.rs -diff --git a/third_party/rust/packed_simd_2/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/v64.rs -rename to third_party/rust/packed_simd/src/v64.rs -diff --git a/third_party/rust/packed_simd_2/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/vPtr.rs -rename to third_party/rust/packed_simd/src/vPtr.rs -diff --git a/third_party/rust/packed_simd_2/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs -similarity index 100% -rename from third_party/rust/packed_simd_2/src/vSize.rs -rename to third_party/rust/packed_simd/src/vSize.rs -diff --git a/third_party/rust/packed_simd_2/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs -similarity index 99% -rename from third_party/rust/packed_simd_2/tests/endianness.rs -rename to third_party/rust/packed_simd/tests/endianness.rs -index da12c2338b..17a7796b1b 100644 ---- a/third_party/rust/packed_simd_2/tests/endianness.rs -+++ b/third_party/rust/packed_simd/tests/endianness.rs -@@ -1,7 +1,7 @@ - #[cfg(target_arch = "wasm32")] - use wasm_bindgen_test::*; - --use packed_simd_2::*; -+use packed_simd::*; - use std::{mem, slice}; - - #[cfg_attr(not(target_arch = "wasm32"), test)] -diff --git a/third_party/rust/packed_simd_2/ci/android-install-ndk.sh b/third_party/rust/packed_simd_2/ci/android-install-ndk.sh -deleted file mode 100644 -index 818e78446a..0000000000 ---- a/third_party/rust/packed_simd_2/ci/android-install-ndk.sh -+++ /dev/null -@@ -1,37 +0,0 @@ --#!/usr/bin/env sh --# Copyright 2016 The Rust Project Developers. See the COPYRIGHT --# file at the top-level directory of this distribution and at --# http://rust-lang.org/COPYRIGHT. --# --# Licensed under the Apache License, Version 2.0 or the MIT license --# , at your --# option. This file may not be copied, modified, or distributed --# except according to those terms. -- --set -ex -- --curl --retry 5 -O https://dl.google.com/android/repository/android-ndk-r15b-linux-x86_64.zip --unzip -q android-ndk-r15b-linux-x86_64.zip -- --case "$1" in -- aarch64) -- arch=arm64 -- ;; -- -- i686) -- arch=x86 -- ;; -- -- *) -- arch=$1 -- ;; --esac; -- --android-ndk-r15b/build/tools/make_standalone_toolchain.py \ -- --unified-headers \ -- --install-dir "/android/ndk-${1}" \ -- --arch "${arch}" \ -- --api 24 -- --rm -rf ./android-ndk-r15b-linux-x86_64.zip ./android-ndk-r15b diff --git a/user/zotero/utils-libc-lfs64.patch b/user/zotero/utils-libc-lfs64.patch deleted file mode 100644 index 020b4aa..0000000 --- a/user/zotero/utils-libc-lfs64.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/third_party/rust/getrandom/src/util_libc.rs.orig b/third_party/rust/getrandom/src/util_libc.rs -index 3cecb1d..6316b38 100644 ---- a/third_party/rust/getrandom/src/util_libc.rs.orig -+++ b/third_party/rust/getrandom/src/util_libc.rs -@@ -101,7 +101,7 @@ impl Weak { - - cfg_if! { - if #[cfg(any(target_os = "linux", target_os = "emscripten"))] { -- use libc::open64 as open; -+ use libc::open as open; - } else { - use libc::open; - } diff --git a/user/zotero/zotero_build-modifications.patch b/user/zotero/zotero_build-modifications.patch index 1d0d045..22aa90e 100644 --- a/user/zotero/zotero_build-modifications.patch +++ b/user/zotero/zotero_build-modifications.patch @@ -43,66 +43,6 @@ index 649d629..7d078b8 100755 cp "$CALLDIR/linux/icons/icon64.png" "$APPDIR/icons/" cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" -diff --git a/zotero/app/scripts/fetch_xulrunner b/zotero/app/scripts/fetch_xulrunner -index 8b3d918..120b085 100755 ---- a/zotero/app/scripts/fetch_xulrunner -+++ b/zotero/app/scripts/fetch_xulrunner -@@ -132,15 +132,6 @@ function modify_omni { - # Continue using app.update.auto in prefs.js on Windows - replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.jsm - -- # Prompt if major update is available instead of installing automatically on restart -- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { -- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); -- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); -- Services.obs.notifyObservers(update, "update-available", "show-prompt"); -- return; -- } -- if (!updateAuto) {' modules/UpdateService.jsm -- - # Avoid console warning about resource://gre/modules/FxAccountsCommon.js - replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.jsm - -@@ -470,36 +461,11 @@ fi - - if [ $BUILD_LINUX == 1 ]; then - GECKO_VERSION="$GECKO_VERSION_LINUX" -- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" - -+ pushd firefox -+ modify_omni linux64 -+ popd - -- # Include 32-bit build if not in CI -- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then -- arches="x86_64" -- else -- arches="i686 x86_64" -- fi -- for arch in $arches; do -- xdir="firefox-$arch" -- rm -rf $xdir -- -- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" -- if [ -e "$archived_file" ]; then -- echo "Using $archived_file" -- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" -- else -- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" -- fi -- -- tar xvf firefox-$GECKO_VERSION.tar.bz2 -- mv firefox firefox-$arch -- -- pushd firefox-$arch -- modify_omni -- popd -- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux -- rm "firefox-$GECKO_VERSION.tar.bz2" -- done - fi - - echo Done diff --git a/zotero/app/build.sh.orig b/zotero/app/build.sh index 702f499..3ee7e34 100755 --- a/zotero/app/build.sh.orig @@ -142,3 +82,63 @@ index 702f499..3ee7e34 100755 rm -rf "$APPDIR" mkdir "$APPDIR" +diff --git a/zotero/app/scripts/fetch_xulrunner.orig b/zotero/app/scripts/fetch_xulrunner +index 2b57bfb..2bbc110 100755 +--- a/zotero/app/scripts/fetch_xulrunner.orig ++++ b/zotero/app/scripts/fetch_xulrunner +@@ -134,15 +134,6 @@ function modify_omni { + # Continue using app.update.auto in prefs.js on Windows + replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.sys.mjs + +- # Prompt if major update is available instead of installing automatically on restart +- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { +- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); +- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); +- Services.obs.notifyObservers(update, "update-available", "show-prompt"); +- return; +- } +- if (!updateAuto) {' modules/UpdateService.sys.mjs +- + # Avoid console warning about resource://gre/modules/FxAccountsCommon.js + replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.sys.mjs + +@@ -516,36 +507,10 @@ fi + + if [ $BUILD_LINUX == 1 ]; then + GECKO_VERSION="$GECKO_VERSION_LINUX" +- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" + +- +- # Include 32-bit build if not in CI +- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then +- arches="x86_64" +- else +- arches="i686 x86_64" +- fi +- for arch in $arches; do +- xdir="firefox-$arch" +- rm -rf $xdir +- +- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" +- if [ -e "$archived_file" ]; then +- echo "Using $archived_file" +- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" +- else +- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" +- fi +- +- tar xvf firefox-$GECKO_VERSION.tar.bz2 +- mv firefox firefox-$arch +- +- pushd firefox-$arch +- modify_omni $arch +- popd +- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux +- rm "firefox-$GECKO_VERSION.tar.bz2" +- done ++ pushd firefox ++ modify_omni linux64 ++ popd + fi + + echo Done diff --git a/user/zotero/zstandard.patch b/user/zotero/zstandard.patch deleted file mode 100644 index e842843..0000000 --- a/user/zotero/zstandard.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- a/python/sites/mach.txt -+++ b/python/sites/mach.txt -@@ -134,4 +134,4 @@ - # We aren't (yet) able to pin packages in automation, so we have to - # support down to the oldest locally-installed version (5.4.2). - pypi-optional:psutil>=5.4.2,<=5.10.0:telemetry will be missing some data --pypi-optional:zstandard>=0.11.1,<=0.18.0:zstd archives will not be possible to extract -+pypi-optional:zstandard>=0.11.1:zstd archives will not be possible to extract From ab1839013894b75a3ed3f5084ebe723d783d035c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:34:27 -0400 Subject: [PATCH 229/738] backports/uranium: rebuild --- .../874_fix-simplebutton-use-of-um-colorimage.patch | 1 + backports/uranium/APKBUILD | 11 +++++------ .../uranium/fix-logger-used-but-not-imported.patch | 2 ++ backports/uranium/qt-try-ints-then-bytes.patch | 2 ++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch index 5a4f1bd..3112c9c 100644 --- a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch +++ b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch @@ -1,4 +1,5 @@ From 88fd460a63263d66173f1e0127b0f208577d7f4e Mon Sep 17 00:00:00 2001 +Patch-Source: https://github.com/Ultimaker/Uranium/pull/874 From: fieldOfView Date: Sat, 20 May 2023 21:14:36 +0200 Subject: [PATCH] Fix SimpleButton use of UM.ColorImage diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD index 76ff04d..a26eae0 100644 --- a/backports/uranium/APKBUILD +++ b/backports/uranium/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=uranium pkgver=5.2.2 -pkgrel=3 +pkgrel=4 pkgdesc="A Python framework for building Desktop applications" url="https://github.com/Ultimaker/Uranium" arch="noarch !armhf !riscv64" # armhf: no py3-qt5, rv64: no py3-shapely @@ -20,11 +20,10 @@ checkdepends="py3-pytest py3-pytest-benchmark py3-twisted" options="!check" # checks broken from 5.x onward source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Uranium/archive/refs/tags/$pkgver.tar.gz cmake.patch - cmake-helpers.patch 874_fix-simplebutton-use-of-um-colorimage.patch fix-logger-used-but-not-imported.patch qt-try-ints-then-bytes.patch - " + cmake-helpers.patch" builddir="$srcdir/Uranium-$pkgver" build() { @@ -55,8 +54,8 @@ package() { sha512sums=" a9c222400022e05b5c42c72843b024204a58f5d233805bdffa610a2d9cbd1873773868b049aabbe52c6e859f235ca5428fcdfdbb86651f428483999060611e10 uranium-5.2.2.tar.gz 196a04164de288f5bffeebb73ace9390059dcffebaf40395368f413d1af2e2c668d85dd4c761ad226732540d41598235c2c368152cc157d2e89445ce27738c9b cmake.patch +c50b37a3a44c4d4f66d115e72a430b82a8125efa49ce51271d5cad7fac15b2941a6a82b71fd07cef751b159296b64d783b348cebe7dfd865f0121815d2cf41f4 874_fix-simplebutton-use-of-um-colorimage.patch +78e1415133bc4135f93633375bdb71a9e04b9cd128067d223985d0878f0e3de3ed1d336117fc527f0804b99878bd56817e3eb7a5aa545cc877b9f43386e17e78 fix-logger-used-but-not-imported.patch +26489638fcf80822d16b0a295aee21a8973c23a023b1daf7f2cf5f7be7c56e72a15edd87ac6993f8a2ad09086d7d1a8b7d32247522c9429183625e3a0b63f2ae qt-try-ints-then-bytes.patch aa185ce3592036f045e3386266015cc08443c2e4f9b9a4c03c77c13525af98d68eaa3360e8858e0561417a826c73bf8a2b209bcad91d2cc16cce32fb0231fcf8 cmake-helpers.patch -d0957ec427070f1b8ebe9257447402e09e3af7a89fe9b3c5967a4c40bfc753fab0ea8f0b0c49e17f5895abcd69888b59e4735d130cb47280207af1b8dbec1e71 874_fix-simplebutton-use-of-um-colorimage.patch -b23701d49d6bc7b8e87e7720ca52b96b9b7dc0e20562c12832eb710aed38dad77f93c20413bd93bc1e2f8026a57af44a1aa06a90cf6488b6f887e3ba0b7ca51c fix-logger-used-but-not-imported.patch -2a277b2e6e4acd701bc72924ec718127d8525192ef8e37a4d99d73b03b6c13462c2cb269704b5ee4c58203991cc3d3bd3ed32dadd5f153d5813eb2a946f02942 qt-try-ints-then-bytes.patch " diff --git a/backports/uranium/fix-logger-used-but-not-imported.patch b/backports/uranium/fix-logger-used-but-not-imported.patch index be29d31..151893c 100644 --- a/backports/uranium/fix-logger-used-but-not-imported.patch +++ b/backports/uranium/fix-logger-used-but-not-imported.patch @@ -1,3 +1,5 @@ +Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch + diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py index 945b789..ef042a5 100644 --- a/UM/View/SelectionPass.py.orig diff --git a/backports/uranium/qt-try-ints-then-bytes.patch b/backports/uranium/qt-try-ints-then-bytes.patch index ab8f67e..8f7d6db 100644 --- a/backports/uranium/qt-try-ints-then-bytes.patch +++ b/backports/uranium/qt-try-ints-then-bytes.patch @@ -1,3 +1,5 @@ +Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch + diff --git a/UM/View/RenderBatch.py.orig b/UM/View/RenderBatch.py index 6deeeb1..5f1eda5 100644 --- a/UM/View/RenderBatch.py.orig From 7b533ea0017d5376ae0eabc4be33f65fe41e08d4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:22:24 -0400 Subject: [PATCH 230/738] backports/py3-cbor2: upgrade to 5.6.1 --- backports/py3-cbor2/APKBUILD | 14 +++++------ backports/py3-cbor2/fix-32bit-tests.patch | 29 +++++++++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 backports/py3-cbor2/fix-32bit-tests.patch diff --git a/backports/py3-cbor2/APKBUILD b/backports/py3-cbor2/APKBUILD index 3266f84..015e6a1 100644 --- a/backports/py3-cbor2/APKBUILD +++ b/backports/py3-cbor2/APKBUILD @@ -1,15 +1,12 @@ # Contributor: Marian Buschsieweke # Maintainer: Marian Buschsieweke pkgname=py3-cbor2 -pkgver=5.5.0 +pkgver=5.6.1 pkgrel=0 pkgdesc="encoding and decoding for CBOR (RFC 8949)" url="https://github.com/agronholm/cbor2" arch="all" license="MIT" -depends=" - python3 - " makedepends=" py3-gpep517 py3-setuptools @@ -24,8 +21,10 @@ checkdepends=" py3-tomli " subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/c/cbor2/cbor2-$pkgver.tar.gz" -builddir="$srcdir/"cbor2-$pkgver +source="$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/c/cbor2/cbor2-$pkgver.tar.gz + fix-32bit-tests.patch + " +builddir="$srcdir/cbor2-$pkgver" build() { gpep517 build-wheel \ @@ -45,5 +44,6 @@ package() { } sha512sums=" -64b9ef0e358ac02113f85a2e633ed52900c4d5d6c89f889d9322f181e29fbdf9462663b5eaec7a255d5e6d47c82c4902cb7ff56999251c5ec070c7b610e615b3 py3-cbor2-5.5.0.tar.gz +9ddf2c3690780816ff50ff4ed371435ca45b597b706254c37c9f01d1f1a699892e2c945a72e69b5506a803c41692f399b58b4e32d9409a0197c677e537e656b2 py3-cbor2-5.6.1.tar.gz +ba8a19a73fe2dc747846b77fde6cd621ccb500a514ba61192dfa28c875720003666165ad12c767260b31148b0dd25454e36e4f43dd8bb1d11928944c6a5b61dd fix-32bit-tests.patch " diff --git a/backports/py3-cbor2/fix-32bit-tests.patch b/backports/py3-cbor2/fix-32bit-tests.patch new file mode 100644 index 0000000..de8fdbb --- /dev/null +++ b/backports/py3-cbor2/fix-32bit-tests.patch @@ -0,0 +1,29 @@ +Patch-Source: https://github.com/agronholm/cbor2/commit/75279162a019d20db3bff8d64d41c7e97b555b53 +From 75279162a019d20db3bff8d64d41c7e97b555b53 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= +Date: Tue, 6 Feb 2024 15:43:23 +0200 +Subject: [PATCH] Fixed test_oversized_read failing on 32-bit platforms + +Fixes #215. +--- + tests/test_decoder.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tests/test_decoder.py b/tests/test_decoder.py +index cd0b45a..d11be6e 100644 +--- a/tests/test_decoder.py ++++ b/tests/test_decoder.py +@@ -939,11 +939,11 @@ def test_decimal_payload_unpacking(impl, data, expected): + "payload", + [ + pytest.param( +- unhexlify("5b7fffffffffffff00"), ++ unhexlify("41"), + id="bytestring", + ), + pytest.param( +- unhexlify("7b7fffffffffffff00"), ++ unhexlify("61"), + id="unicode", + ), + ], From c2257cc7ce650fc4f1e00e6883095b6b3a3b4ad8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:27:06 -0400 Subject: [PATCH 231/738] backports/py3-limits: upgrade to 3.10.1 --- backports/py3-limits/APKBUILD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD index 13f5fba..67f4a82 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.6.0 +pkgver=3.10.1 pkgrel=0 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" @@ -19,7 +19,6 @@ checkdepends=" py3-pytest-asyncio py3-pytest-benchmark py3-pytest-cov - py3-pytest-lazy-fixture py3-redis " subpackages="$pkgname-pyc" @@ -46,6 +45,6 @@ package() { } sha512sums=" -30cb675c801c770d266363e8367d4a0b2a98ad3e98b1088d1ab11d697b3694cf5318089cacd250fb964c205bcd571158035388bf0c52f536d937cbbb39465b1e limits-3.6.0.tar.gz +5daa23a2a53dc56ba8e24fe72000bd69bfade9956a159c02731ef3a240682f467c4ae1f58878139fd9d0f67806bf115f6f97999160a2f66f34c64fdad1503d70 limits-3.10.1.tar.gz 8db0d96f860a07bbc554504a6e94b61546a6be22c0b9736c6b5aca628db9b618efc30609fce3702ee8e3812e1e34329c04d2f34bd69fdaecaa7c7fa0a2bde8a7 our-std-is-good-enough.patch " From a30c134fd311ae444ff9116edd1f058fe1d41ffa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:26:31 -0400 Subject: [PATCH 232/738] backports/py3-levenshtein: upgrade to 0.25.1 --- backports/py3-levenshtein/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/py3-levenshtein/APKBUILD b/backports/py3-levenshtein/APKBUILD index 486f4c1..c146867 100644 --- a/backports/py3-levenshtein/APKBUILD +++ b/backports/py3-levenshtein/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Galen Abell # Maintainer: Galen Abell pkgname=py3-levenshtein -pkgver=0.23.0 -pkgrel=0 +pkgver=0.25.1 +pkgrel=2 pkgdesc="Python extension for computing string edit distances and similarities" url="https://github.com/maxbachmann/Levenshtein" arch="all" @@ -41,5 +41,5 @@ package() { } sha512sums=" -137116f337f576534bf2c12dc49d35f81a3b267eb613e5e6cca6cb80e5701dd0adbfd97c1cec4ea8f1bb4dee2bc67deeb19553474348ea78af4e05b79ce01fdf py3-levenshtein-0.23.0.tar.gz +936dab36b15df6f2ee5425efb1fdb1490fb8f618ba453f464a6dd615bcc427e55ceee7474f06b34392871d9f38470b853602a11d8f9776eee66ec34156511ca4 py3-levenshtein-0.25.1.tar.gz " From c47a11880409582886ff6a6305dc17338ef8052c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:24:50 -0400 Subject: [PATCH 233/738] backports/py3-flask-principal: rebuild --- backports/py3-flask-principal/APKBUILD | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backports/py3-flask-principal/APKBUILD b/backports/py3-flask-principal/APKBUILD index 0043b92..001d4a0 100644 --- a/backports/py3-flask-principal/APKBUILD +++ b/backports/py3-flask-principal/APKBUILD @@ -3,31 +3,36 @@ pkgname=py3-flask-principal _pkgname=flask-principal pkgver=0.4.0 -pkgrel=6 +pkgrel=7 pkgdesc="Flask Identity management" url="https://pythonhosted.org/Flask-Principal/" arch="noarch" license="MIT" depends="python3 py3-blinker py3-flask" -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517 py3-wheel" checkdepends="py3-nose" subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/mattupstate/flask-principal/archive/$pkgver.tar.gz" builddir="$srcdir"/$_pkgname-$pkgver -replaces="py-flask-principal" # Backwards compatibility +replaces="py-flask-principal" # Backwards compatibility provides="py-flask-principal=$pkgver-r$pkgrel" # Backwards compatibility build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { - nosetests + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m nose } package() { - python3 setup.py install --skip-build --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums="ed8cb28c4e8d936de96db0bf9f7cb45b253dc204c4b8f8dd8022ef1552592ff6324b4a33d3ee862794a6e20eb8c32a0365e7b9397d427da5022c5ded3dfa308a py3-flask-principal-0.4.0.tar.gz" From 07a38065e6ae79ef3ac63bef28df7d11d3bc5d2a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:23:04 -0400 Subject: [PATCH 234/738] backports/py3-dateparser: upgrade to 1.2.0 --- backports/py3-dateparser/APKBUILD | 58 ++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD index 99c4bf3..b3dd959 100644 --- a/backports/py3-dateparser/APKBUILD +++ b/backports/py3-dateparser/APKBUILD @@ -1,28 +1,68 @@ # Maintainer: Hoang Nguyen pkgname=py3-dateparser _pyname=${pkgname#py3-} -pkgver=1.1.8 -pkgrel=1 +pkgver=1.2.0 +pkgrel=0 pkgdesc="Python parser for human readable dates" url="https://github.com/scrapinghub/dateparser" arch="noarch" license="BSD-3-Clause" -depends="python3 py3-dateutil py3-regex py3-tz py3-tzlocal" -makedepends="py3-setuptools" +depends=" + python3 + py3-dateutil + py3-regex + py3-tz + py3-tzlocal + " +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + " +checkdepends=" + py3-fasttext + py3-gitpython + py3-langdetect + py3-parameterized + py3-parsel + py3-pytest + py3-requests + py3-ruamel.yaml + " subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/scrapinghub/dateparser/archive/refs/tags/v$pkgver.tar.gz" builddir="$srcdir/$_pyname-$pkgver" -# Requires py3-langdetect and py3-fasttext, which are not in the repository -options="!check" build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + _test_filter='not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english' + # test_custom_language_detect_fast_text fails due to wrong file format + case "$CARCH" in + s390x) + _test_filter="$_test_filter and not test_custom_language_detect_fast_text" + ;; + esac + + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + + # test_hijri.py: needs hijri_converter, test_jalali.py: convertdate + .testenv/bin/python3 -m pytest tests \ + -k "$_test_filter" \ + --ignore tests/test_hijri.py \ + --ignore tests/test_jalali.py } package() { - python3 setup.py install --skip-build --root="$pkgdir" + python3 -m installer -d "$pkgdir" \ + .dist/*.whl } sha512sums=" -89761427ab0bd194f74d5458930dd3bc01cf654a535547b3bdde651c766d4222d1a9ddc0986c3659d1b2de3a200d6b7dccc227578efabdc208ff98d4f547323a py3-dateparser-1.1.8.tar.gz +2d37115f25c2076c4521b77b89ef1cff3cd0a5233c45beb00d78a5c9b1a384dcd993ff7cdd1f77db95a53ce566cf7d709d46ffa2e63eb468ac954fda178a5b6e py3-dateparser-1.2.0.tar.gz " From f74257961022a937133104d6ded099b51267ecf7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:23:53 -0400 Subject: [PATCH 235/738] backports/py3-django-debug-toolbar: upgrade to 4.3 --- backports/py3-django-debug-toolbar/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/py3-django-debug-toolbar/APKBUILD b/backports/py3-django-debug-toolbar/APKBUILD index 3ffd5cb..4becc02 100644 --- a/backports/py3-django-debug-toolbar/APKBUILD +++ b/backports/py3-django-debug-toolbar/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Leonardo Arena -# Maintainer: +# Maintainer: Will Sinatra pkgname=py3-django-debug-toolbar _pkgname=django-debug-toolbar -pkgver=4.2 +pkgver=4.3 pkgrel=0 pkgdesc="Configurable set of panels that display various debug information about the current request/response" options="!check" # Requires unpackaged Selenium python3 module @@ -34,5 +34,5 @@ package() { } sha512sums=" -5731fc7a1ec5209a7bd44f2e31d6c3ebde8ff1e24265878c1773610e69f2469f595b8a9641d345dcc6169c5f131d132006456cdc9aebd89cc4ec4f15a0a25341 py3-django-debug-toolbar-4.2.tar.gz +caa8563d38e8c96305828b7a07006ce2ee0afae099d70d75d332f2196fc3ffcf7f3848440ea22c00f2b918029477672a172e30714f6f73a630404175aef3b925 py3-django-debug-toolbar-4.3.tar.gz " From 512c400b00b376027ca3d45c80471554fbc2f353 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:16:00 -0400 Subject: [PATCH 236/738] backports/libmedc: rebuild --- backports/libmedc/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD index 9df22d2..c10dfd3 100644 --- a/backports/libmedc/APKBUILD +++ b/backports/libmedc/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=libmedc pkgver=4.1.1 -pkgrel=0 +pkgrel=1 pkgdesc="Open source library for numerical simulation" url="https://www.salome-platform.org/" arch="all" @@ -11,11 +11,11 @@ makedepends="cmake hdf5-dev swig python3-dev samurai" options="!check" #test suite is nonfunctional with python bindings subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" source=" - https://ftp.kaist.ac.kr/macports/distfiles/libmed/med-$pkgver.tar.gz + https://files.salome-platform.org/Salome/medfile/med-$pkgver.tar.gz hdf5.patch cmake-config-dir.patch " -builddir="$srcdir/med-${pkgver}_SRC" +builddir="$srcdir/med-$pkgver" build() { cmake -B build -G Ninja \ @@ -37,7 +37,7 @@ _py() { } sha512sums=" -8917e7ecfe30e1259b0927c8e1c3d6efd86ed2386813f6d90217bd95589199478e587f0815031ab65cacf7901a30b77a6307414f9073caffe6e7f013e710d768 med-4.1.1.tar.gz +f211fa82750a7cc935baa3a50a55d16e40117a0f2254b482492ba8396d82781ca84960995da7a16b2b5be0b93ce76368bf4b311bb8af0e5f0243e7051c9c554c med-4.1.1.tar.gz 68d9291e73a68d674081314028c0fce7bbd4a7b78b93b7e5078117ce62f2d07318bc33ec95091ce677148ec3926c1ce653d0760c34e74b29257a7be59210f040 hdf5.patch 8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch " From 5e58780bc1d0ea718af2e85402f15db104185e5e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:29:00 -0400 Subject: [PATCH 237/738] backports/py3-trimesh: rebuild --- backports/py3-trimesh/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD index 41b4e5f..b804328 100644 --- a/backports/py3-trimesh/APKBUILD +++ b/backports/py3-trimesh/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=py3-trimesh pkgver=3.22.1 -pkgrel=0 +pkgrel=1 pkgdesc="Python library for working with triangular meshes" url="https://github.com/mikedh/trimesh" # x86, armhf, armv7 Tests fail on int64 to int32 casts on these arches @@ -32,8 +32,8 @@ makedepends=" py3-wheel " checkdepends="py3-pytest py3-pytest-xdist py3-pyinstrument" -options="!check" # Failing test units subpackages="$pkgname-pyc" +options="!check" # stuck test source="$pkgname-$pkgver.tar.gz::https://github.com/mikedh/trimesh/archive/refs/tags/$pkgver.tar.gz" builddir="$srcdir/trimesh-$pkgver" From 390a01796e9bc95f680d89705551a3b3b7079928 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:19:20 -0400 Subject: [PATCH 238/738] backports/py3-svgpath: rebuild against python 3.12 --- backports/py3-svgpath/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD index e0d19f4..9cab4db 100644 --- a/backports/py3-svgpath/APKBUILD +++ b/backports/py3-svgpath/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=py3-svgpath pkgver=6.3 -pkgrel=0 +pkgrel=1 pkgdesc="SVG path and object parser" url="https://github.com/regebro/svg.path" arch="noarch" From 2510dce5422da2249ef7d876e9c044f17d151828 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:19:44 -0400 Subject: [PATCH 239/738] backports/py3-mapbox-earcut: rebuild against python 3.12 --- backports/py3-mapbox-earcut/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD index 99db5b5..222a870 100644 --- a/backports/py3-mapbox-earcut/APKBUILD +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=py3-mapbox-earcut pkgver=1.0.1 -pkgrel=0 +pkgrel=1 pkgdesc="Python bindings for the mapbox earcut c++ library" url="https://github.com/skogler/mapbox_earcut_python" arch="all" From d6fee0eb4dcf722f5451e70e8eadf771be265686 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:20:03 -0400 Subject: [PATCH 240/738] backports/py3-rtree: rebuild against python 3.12 --- backports/py3-rtree/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD index 4a53d92..52acba3 100644 --- a/backports/py3-rtree/APKBUILD +++ b/backports/py3-rtree/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-rtree _pkgname=rtree pkgver=1.1.0 -pkgrel=0 +pkgrel=1 pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" url="https://pypi.org/project/Rtree/" # s390x: Test failed: IndexSerialization::test_interleaving - AssertionError From c1991a2c082838923885aed2e5e2975f48d791ff Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:25:24 -0400 Subject: [PATCH 241/738] backports/py3-gitlab: upgrade to 4.4.0 --- backports/py3-gitlab/APKBUILD | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backports/py3-gitlab/APKBUILD b/backports/py3-gitlab/APKBUILD index 28ba7f9..a8e281c 100644 --- a/backports/py3-gitlab/APKBUILD +++ b/backports/py3-gitlab/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Hoang Nguyen pkgname=py3-gitlab _pyname=${pkgname/py3/python} -pkgver=4.1.1 +pkgver=4.4.0 pkgrel=0 pkgdesc="Python wrapper for Gitlab's API" url="https://github.com/python-gitlab/python-gitlab" @@ -20,6 +20,7 @@ makedepends=" checkdepends="py3-pytest py3-responses py3-build" subpackages="$pkgname-doc $pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/python-gitlab/python-gitlab/archive/refs/tags/v$pkgver.tar.gz" +options="!check" # Failing tests builddir="$srcdir/$_pyname-$pkgver" build() { @@ -43,5 +44,5 @@ package() { } sha512sums=" -a536204fde999f570156498fffbdf357727279492740989aa02e2747473a8f492136a2eaff5a0c90ffc82081879d9b75891c76c6fcd00b6a53b81a8f0fd20045 py3-gitlab-4.1.1.tar.gz +cb572d169d948dcd74b1d85fb4e8fc2b2593ad167dd708f38bcaf5cccacc8a8b32231b2231d9cb69909e63ba0ce2c6f1cf522f21df56659343314ea2c0d39645 py3-gitlab-4.4.0.tar.gz " From 4a0505901e5054489eeac06e49cbefd96972ac13 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:17:47 -0400 Subject: [PATCH 242/738] backports/py3-sphinzcontrib-autoprogram: rebuild against python 3.12 --- backports/py3-sphinxcontrib-autoprogram/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-sphinxcontrib-autoprogram/APKBUILD b/backports/py3-sphinxcontrib-autoprogram/APKBUILD index 15686d0..9a1f6f8 100644 --- a/backports/py3-sphinxcontrib-autoprogram/APKBUILD +++ b/backports/py3-sphinxcontrib-autoprogram/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Hoang Nguyen pkgname=py3-sphinxcontrib-autoprogram pkgver=0.1.8 -pkgrel=1 +pkgrel=2 pkgdesc="Sphinx extension to document CLI programs" url="https://github.com/sphinx-contrib/autoprogram" arch="noarch" From 93aaeb31b9eaddc83f46ca7e67155505ea8c7280 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 18:14:38 -0400 Subject: [PATCH 243/738] backports/freetube: upgrade to 0.20.0 --- backports/freetube/APKBUILD | 38 +- backports/freetube/disable-asar.patch | 26 - backports/freetube/electron27.patch | 6303 ----------------- backports/freetube/freetube.desktop | 10 - backports/freetube/freetube.sh | 2 +- .../freetube/package-only-necessary.patch | 28 - backports/freetube/tasje-dotdash.patch | 12 + 7 files changed, 34 insertions(+), 6385 deletions(-) delete mode 100644 backports/freetube/disable-asar.patch delete mode 100644 backports/freetube/electron27.patch delete mode 100644 backports/freetube/freetube.desktop delete mode 100644 backports/freetube/package-only-necessary.patch create mode 100644 backports/freetube/tasje-dotdash.patch diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index d10ea9e..73d76af 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freetube -pkgver=0.19.1 +pkgver=0.20.0 pkgrel=0 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron @@ -11,42 +11,46 @@ depends=" font-roboto " makedepends=" - npm + electron-tasje + nodejs yarn " url="https://freetubeapp.io" source=" $pkgname-$pkgver.tar.gz::https://github.com/FreeTubeApp/FreeTube/archive/v$pkgver-beta.tar.gz freetube.sh - freetube.desktop - electron27.patch - package-only-necessary.patch - disable-asar.patch + tasje-dotdash.patch " options="net !check" # No testsuite builddir="$srcdir"/FreeTube-$pkgver-beta +export npm_config_nodedir=/usr/include/electron/node_headers +export npm_config_build_from_source=true + +prepare() { + default_prepare + + yarn --cache-folder "$srcdir"/yarn-cache install --frozen-lockfile --ignore-scripts +} + build() { - yarn --cache-folder "$srcdir"/yarn-cache install - yarn --cache-folder "$srcdir"/yarn-cache --frozen-lockfile build + yarn --cache-folder "$srcdir"/yarn-cache run pack + + tasje --config _scripts/ebuilder.config.js pack } package() { # directory creation + program copy - install -dm755 "$pkgdir"/usr/lib - cp -r "$builddir"/build/linux-unpacked/resources/app "$pkgdir"/usr/lib/$pkgname + install -Dm755 build/resources/app.asar -t "$pkgdir"/usr/lib/$pkgname/ # link binaries + other items install -Dm755 "$srcdir"/freetube.sh "$pkgdir"/usr/bin/$pkgname install -Dm644 "$builddir"/_icons/icon.svg "$pkgdir"/usr/share/icons/hicolor/scalable/$pkgname.svg - install -Dm644 "$srcdir"/freetube.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop + install -Dm644 build/freetube.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop } sha512sums=" -2b607754092af7239e7afcc441d86009dba1295bf6f836ab0f2fe9ceffb3045c7da1e4d175a25aa72179241ea62d4905185c6990641213e8e66573d4daa74bfe freetube-0.19.1.tar.gz -8508af3d983b305b9e3c8ffb478c723feb4f8301a69cd1ad588854ce13e9b51bab1b68599c2f7f8a6005e9aa8949d36d057a3660d70e4acf2f4d125e5f8ef136 freetube.sh -0b74e115852e71f665730a09e4d06a07fd3ae68fbc9bf8aaf280a32b70298910c692c99535cd2294df95394ad9b3b9f4a127bb6c9d50824946895dbb54649872 freetube.desktop -f12c19969981fe22c05d14007d6d9900e854757119ab16b5af8185d94850f3d96b0e22ef03bddc776e47088bc3de88d86bcd631e5e15fb74616f26b021b2a93f electron27.patch -0869c3de3b93b92b8964d3baffa3dc3cf584cd1185af29104cad7bd928c39d9bc30209ed6113053afe96ca624f72fd3cc44de241f96f1cb757f16908b037ad0f package-only-necessary.patch -67107797825cbb98cc3a46e288fe92e06e0cc91b1a44a10edcf68045d06c9679c587bd2706051ce0b109091295247b5e8ec572297cd0c72532afd529cf56449d disable-asar.patch +b82cdaff82d7bd325f3127794160382c97be3b72c5ef4bb3f327a8ada6b609043bc30a1f6af59c38e23237aac7d8b6ea2685c22aa82469c8d08b96cb839a3099 freetube-0.20.0.tar.gz +2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh +d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch " diff --git a/backports/freetube/disable-asar.patch b/backports/freetube/disable-asar.patch deleted file mode 100644 index db6c913..0000000 --- a/backports/freetube/disable-asar.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 913f1a251bee06fc8e8380b9c5e5ac3ceadcb876 Mon Sep 17 00:00:00 2001 -From: Antoine Martin -Date: Fri, 12 Aug 2022 22:34:57 -0400 -Subject: [PATCH 1/1] disable-asar - ---- - package.json | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/package.json b/package.json -index 842bdda8..a82a1ec3 100644 ---- a/package.json -+++ b/package.json -@@ -18,6 +18,9 @@ - "bugs": { - "url": "https://github.com/FreeTubeApp/FreeTube/issues" - }, -+ "build": { -+ "asar" : false -+ }, - "scripts": { - "build": "run-s rebuild:electron pack build-release", - "build:arm64": "run-s rebuild:electron pack build-release:arm64", --- -2.36.2 - diff --git a/backports/freetube/electron27.patch b/backports/freetube/electron27.patch deleted file mode 100644 index 72e065b..0000000 --- a/backports/freetube/electron27.patch +++ /dev/null @@ -1,6303 +0,0 @@ -diff --git a/package.json.orig b/package.json -index e51a34f..5f9e4b8 100644 ---- a/package.json.orig -+++ b/package.json -@@ -90,7 +90,7 @@ - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", -- "electron": "^22.3.25", -+ "electron": "^27.0.0", - "electron-builder": "^24.6.4", - "eslint": "^8.50.0", - "eslint-config-prettier": "^9.0.0", -diff --git a/yarn.lock.orig b/yarn.lock -index f82875a..48b7310 100644 ---- a/yarn.lock.orig -+++ b/yarn.lock -@@ -2,10 +2,10 @@ - # yarn lockfile v1 - - --"7zip-bin@~5.1.1": -- version "5.1.1" -- resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" -- integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== -+"7zip-bin@~5.2.0": -+ version "5.2.0" -+ resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.2.0.tgz#7a03314684dd6572b7dfa89e68ce31d60286854d" -+ integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== - - "@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" -@@ -13,41 +13,41 @@ - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - - "@ampproject/remapping@^2.2.0": -- version "2.2.0" -- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" -- integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== -+ version "2.2.1" -+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" -+ integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: -- "@jridgewell/gen-mapping" "^0.1.0" -+ "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - --"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13": -- version "7.22.13" -- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" -- integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== -+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" -+ integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== - dependencies: -- "@babel/highlight" "^7.22.13" -+ "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - --"@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": -- version "7.22.20" -- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" -- integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== -+"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" -+ integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== - - "@babel/core@^7.23.0": -- version "7.23.0" -- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" -- integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" -+ integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" -- "@babel/generator" "^7.23.0" -+ "@babel/generator" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" -- "@babel/helper-module-transforms" "^7.23.0" -- "@babel/helpers" "^7.23.0" -- "@babel/parser" "^7.23.0" -+ "@babel/helper-module-transforms" "^7.23.3" -+ "@babel/helpers" "^7.23.2" -+ "@babel/parser" "^7.23.3" - "@babel/template" "^7.22.15" -- "@babel/traverse" "^7.23.0" -- "@babel/types" "^7.23.0" -+ "@babel/traverse" "^7.23.3" -+ "@babel/types" "^7.23.3" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" -@@ -55,31 +55,24 @@ - semver "^6.3.1" - - "@babel/eslint-parser@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz#263f059c476e29ca4972481a17b8b660cb025a34" -- integrity sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg== -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.23.3.tgz#7bf0db1c53b54da0c8a12627373554a0828479ca" -+ integrity sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw== - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals" "5.1.1-v1" - eslint-visitor-keys "^2.1.0" - semver "^6.3.1" - --"@babel/generator@^7.23.0": -- version "7.23.0" -- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" -- integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== -+"@babel/generator@^7.23.3", "@babel/generator@^7.23.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" -+ integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== - dependencies: -- "@babel/types" "^7.23.0" -+ "@babel/types" "^7.23.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - --"@babel/helper-annotate-as-pure@^7.18.6": -- version "7.18.6" -- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" -- integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== -- dependencies: -- "@babel/types" "^7.18.6" -- - "@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" -@@ -87,14 +80,14 @@ - dependencies: - "@babel/types" "^7.22.5" - --"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" -- integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== -+"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": -+ version "7.22.15" -+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" -+ integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: -- "@babel/types" "^7.22.5" -+ "@babel/types" "^7.22.15" - --"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": -+"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== -@@ -105,70 +98,34 @@ - lru-cache "^5.1.1" - semver "^6.3.1" - --"@babel/helper-create-class-features-plugin@^7.18.6": -- version "7.18.13" -- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.13.tgz#63e771187bd06d234f95fdf8bd5f8b6429de6298" -- integrity sha512-hDvXp+QYxSRL+23mpAlSGxHMDyIGChm0/AwTfTAAK5Ufe40nCsyNdaYCGuK91phn/fVu9kqayImRDkvNAgdrsA== -- dependencies: -- "@babel/helper-annotate-as-pure" "^7.18.6" -- "@babel/helper-environment-visitor" "^7.18.9" -- "@babel/helper-function-name" "^7.18.9" -- "@babel/helper-member-expression-to-functions" "^7.18.9" -- "@babel/helper-optimise-call-expression" "^7.18.6" -- "@babel/helper-replace-supers" "^7.18.9" -- "@babel/helper-split-export-declaration" "^7.18.6" -- --"@babel/helper-create-class-features-plugin@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz#4078686740459eeb4af3494a273ac09148dfb213" -- integrity sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ== -+"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15": -+ version "7.22.15" -+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" -+ integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" -- "@babel/helper-member-expression-to-functions" "^7.22.5" -+ "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - --"@babel/helper-create-class-features-plugin@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" -- integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== -- dependencies: -- "@babel/helper-annotate-as-pure" "^7.22.5" -- "@babel/helper-environment-visitor" "^7.22.5" -- "@babel/helper-function-name" "^7.22.5" -- "@babel/helper-member-expression-to-functions" "^7.22.5" -- "@babel/helper-optimise-call-expression" "^7.22.5" -- "@babel/helper-replace-supers" "^7.22.5" -- "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -- "@babel/helper-split-export-declaration" "^7.22.5" -- semver "^6.3.0" -- --"@babel/helper-create-regexp-features-plugin@^7.18.6": -- version "7.18.6" -- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz#3e35f4e04acbbf25f1b3534a657610a000543d3c" -- integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== -- dependencies: -- "@babel/helper-annotate-as-pure" "^7.18.6" -- regexpu-core "^5.1.0" -- --"@babel/helper-create-regexp-features-plugin@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" -- integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== -+"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": -+ version "7.22.15" -+ resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" -+ integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" -- semver "^6.3.0" -+ semver "^6.3.1" - --"@babel/helper-define-polyfill-provider@^0.4.2": -- version "0.4.2" -- resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" -- integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== -+"@babel/helper-define-polyfill-provider@^0.4.3": -+ version "0.4.3" -+ resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" -+ integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" -@@ -176,38 +133,12 @@ - lodash.debounce "^4.0.8" - resolve "^1.14.2" - --"@babel/helper-environment-visitor@^7.18.9": -- version "7.18.9" -- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" -- integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -- --"@babel/helper-environment-visitor@^7.22.20": -+"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - --"@babel/helper-environment-visitor@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" -- integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -- --"@babel/helper-function-name@^7.18.9": -- version "7.18.9" -- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" -- integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== -- dependencies: -- "@babel/template" "^7.18.6" -- "@babel/types" "^7.18.9" -- --"@babel/helper-function-name@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" -- integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== -- dependencies: -- "@babel/template" "^7.22.5" -- "@babel/types" "^7.22.5" -- --"@babel/helper-function-name@^7.23.0": -+"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== -@@ -222,19 +153,12 @@ - dependencies: - "@babel/types" "^7.22.5" - --"@babel/helper-member-expression-to-functions@^7.18.9": -- version "7.18.9" -- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" -- integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== -+"@babel/helper-member-expression-to-functions@^7.22.15": -+ version "7.23.0" -+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" -+ integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: -- "@babel/types" "^7.18.9" -- --"@babel/helper-member-expression-to-functions@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" -- integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== -- dependencies: -- "@babel/types" "^7.22.5" -+ "@babel/types" "^7.23.0" - - "@babel/helper-module-imports@^7.22.15": - version "7.22.15" -@@ -243,17 +167,10 @@ - dependencies: - "@babel/types" "^7.22.15" - --"@babel/helper-module-imports@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" -- integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== -- dependencies: -- "@babel/types" "^7.22.5" -- --"@babel/helper-module-transforms@^7.22.15", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9", "@babel/helper-module-transforms@^7.23.0": -- version "7.23.0" -- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" -- integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== -+"@babel/helper-module-transforms@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" -+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" -@@ -261,13 +178,6 @@ - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - --"@babel/helper-optimise-call-expression@^7.18.6": -- version "7.18.6" -- resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" -- integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== -- dependencies: -- "@babel/types" "^7.18.6" -- - "@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" -@@ -280,55 +190,22 @@ - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - --"@babel/helper-remap-async-to-generator@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" -- integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== -+"@babel/helper-remap-async-to-generator@^7.22.20": -+ version "7.22.20" -+ resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" -+ integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" -- "@babel/helper-environment-visitor" "^7.22.5" -- "@babel/helper-wrap-function" "^7.22.5" -- "@babel/types" "^7.22.5" -+ "@babel/helper-environment-visitor" "^7.22.20" -+ "@babel/helper-wrap-function" "^7.22.20" - --"@babel/helper-remap-async-to-generator@^7.22.9": -- version "7.22.9" -- resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" -- integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== -+"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": -+ version "7.22.20" -+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" -+ integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: -- "@babel/helper-annotate-as-pure" "^7.22.5" -- "@babel/helper-environment-visitor" "^7.22.5" -- "@babel/helper-wrap-function" "^7.22.9" -- --"@babel/helper-replace-supers@^7.18.9": -- version "7.18.9" -- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" -- integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== -- dependencies: -- "@babel/helper-environment-visitor" "^7.18.9" -- "@babel/helper-member-expression-to-functions" "^7.18.9" -- "@babel/helper-optimise-call-expression" "^7.18.6" -- "@babel/traverse" "^7.18.9" -- "@babel/types" "^7.18.9" -- --"@babel/helper-replace-supers@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" -- integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== -- dependencies: -- "@babel/helper-environment-visitor" "^7.22.5" -- "@babel/helper-member-expression-to-functions" "^7.22.5" -- "@babel/helper-optimise-call-expression" "^7.22.5" -- "@babel/template" "^7.22.5" -- "@babel/traverse" "^7.22.5" -- "@babel/types" "^7.22.5" -- --"@babel/helper-replace-supers@^7.22.9": -- version "7.22.9" -- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" -- integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== -- dependencies: -- "@babel/helper-environment-visitor" "^7.22.5" -- "@babel/helper-member-expression-to-functions" "^7.22.5" -+ "@babel/helper-environment-visitor" "^7.22.20" -+ "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - - "@babel/helper-simple-access@^7.22.5": -@@ -345,20 +222,6 @@ - dependencies: - "@babel/types" "^7.22.5" - --"@babel/helper-split-export-declaration@^7.18.6": -- version "7.18.6" -- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" -- integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== -- dependencies: -- "@babel/types" "^7.18.6" -- --"@babel/helper-split-export-declaration@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" -- integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== -- dependencies: -- "@babel/types" "^7.22.5" -- - "@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" -@@ -366,83 +229,76 @@ - dependencies: - "@babel/types" "^7.22.5" - --"@babel/helper-string-parser@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" -- integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -+"@babel/helper-string-parser@^7.23.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" -+ integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - --"@babel/helper-validator-identifier@^7.22.20": -+"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.22.5": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - --"@babel/helper-validator-identifier@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" -- integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== -- - "@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== - --"@babel/helper-wrap-function@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" -- integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== -+"@babel/helper-wrap-function@^7.22.20": -+ version "7.22.20" -+ resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" -+ integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" -- "@babel/template" "^7.22.5" -- "@babel/traverse" "^7.22.5" -- "@babel/types" "^7.22.5" -- --"@babel/helper-wrap-function@^7.22.9": -- version "7.22.10" -- resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" -- integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== -- dependencies: -- "@babel/helper-function-name" "^7.22.5" -- "@babel/template" "^7.22.5" -- "@babel/types" "^7.22.10" -+ "@babel/template" "^7.22.15" -+ "@babel/types" "^7.22.19" - --"@babel/helpers@^7.23.0": -- version "7.23.1" -- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" -- integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== -+"@babel/helpers@^7.23.2": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" -+ integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== - dependencies: - "@babel/template" "^7.22.15" -- "@babel/traverse" "^7.23.0" -- "@babel/types" "^7.23.0" -+ "@babel/traverse" "^7.23.4" -+ "@babel/types" "^7.23.4" - --"@babel/highlight@^7.22.13": -- version "7.22.13" -- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" -- integrity sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ== -+"@babel/highlight@^7.23.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" -+ integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: -- "@babel/helper-validator-identifier" "^7.22.5" -+ "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - --"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": -- version "7.23.0" -- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" -- integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== -+"@babel/parser@^7.18.4", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" -+ integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== - --"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" -- integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== -+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" -+ integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" -- integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== -+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" -+ integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -- "@babel/plugin-transform-optional-chaining" "^7.22.15" -+ "@babel/plugin-transform-optional-chaining" "^7.23.3" -+ -+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" -+ integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== -+ dependencies: -+ "@babel/helper-environment-visitor" "^7.22.20" -+ "@babel/helper-plugin-utils" "^7.22.5" - - "@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" -@@ -492,17 +348,17 @@ - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - --"@babel/plugin-syntax-import-assertions@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" -- integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== -+"@babel/plugin-syntax-import-assertions@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" -+ integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-syntax-import-attributes@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" -- integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== -+"@babel/plugin-syntax-import-attributes@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" -+ integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -@@ -584,211 +440,211 @@ - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - --"@babel/plugin-transform-arrow-functions@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" -- integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== -+"@babel/plugin-transform-arrow-functions@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" -+ integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-async-generator-functions@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" -- integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== -+"@babel/plugin-transform-async-generator-functions@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" -+ integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== - dependencies: -- "@babel/helper-environment-visitor" "^7.22.5" -+ "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" -- "@babel/helper-remap-async-to-generator" "^7.22.9" -+ "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - --"@babel/plugin-transform-async-to-generator@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" -- integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== -+"@babel/plugin-transform-async-to-generator@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" -+ integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== - dependencies: -- "@babel/helper-module-imports" "^7.22.5" -+ "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" -- "@babel/helper-remap-async-to-generator" "^7.22.5" -+ "@babel/helper-remap-async-to-generator" "^7.22.20" - --"@babel/plugin-transform-block-scoped-functions@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" -- integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== -+"@babel/plugin-transform-block-scoped-functions@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" -+ integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-block-scoping@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz#494eb82b87b5f8b1d8f6f28ea74078ec0a10a841" -- integrity sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw== -+"@babel/plugin-transform-block-scoping@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" -+ integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-class-properties@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" -- integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== -+"@babel/plugin-transform-class-properties@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" -+ integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== - dependencies: -- "@babel/helper-create-class-features-plugin" "^7.22.5" -+ "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-class-static-block@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" -- integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== -+"@babel/plugin-transform-class-static-block@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" -+ integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== - dependencies: -- "@babel/helper-create-class-features-plugin" "^7.22.11" -+ "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - --"@babel/plugin-transform-classes@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" -- integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== -+"@babel/plugin-transform-classes@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" -+ integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" -- "@babel/helper-environment-visitor" "^7.22.5" -- "@babel/helper-function-name" "^7.22.5" -+ "@babel/helper-environment-visitor" "^7.22.20" -+ "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" -- "@babel/helper-replace-supers" "^7.22.9" -+ "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - --"@babel/plugin-transform-computed-properties@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" -- integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== -+"@babel/plugin-transform-computed-properties@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" -+ integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" -- "@babel/template" "^7.22.5" -+ "@babel/template" "^7.22.15" - --"@babel/plugin-transform-destructuring@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz#e7404ea5bb3387073b9754be654eecb578324694" -- integrity sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ== -+"@babel/plugin-transform-destructuring@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" -+ integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-dotall-regex@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" -- integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== -+"@babel/plugin-transform-dotall-regex@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" -+ integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== - dependencies: -- "@babel/helper-create-regexp-features-plugin" "^7.22.5" -+ "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-duplicate-keys@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" -- integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== -+"@babel/plugin-transform-duplicate-keys@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" -+ integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-dynamic-import@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" -- integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== -+"@babel/plugin-transform-dynamic-import@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" -+ integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - --"@babel/plugin-transform-exponentiation-operator@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" -- integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== -+"@babel/plugin-transform-exponentiation-operator@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" -+ integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== - dependencies: -- "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" -+ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-export-namespace-from@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" -- integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== -+"@babel/plugin-transform-export-namespace-from@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" -+ integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - --"@babel/plugin-transform-for-of@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" -- integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== -+"@babel/plugin-transform-for-of@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" -+ integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-function-name@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" -- integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== -+"@babel/plugin-transform-function-name@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" -+ integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== - dependencies: -- "@babel/helper-compilation-targets" "^7.22.5" -- "@babel/helper-function-name" "^7.22.5" -+ "@babel/helper-compilation-targets" "^7.22.15" -+ "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-json-strings@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" -- integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== -+"@babel/plugin-transform-json-strings@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" -+ integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - --"@babel/plugin-transform-literals@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" -- integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== -+"@babel/plugin-transform-literals@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" -+ integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-logical-assignment-operators@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" -- integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== -+"@babel/plugin-transform-logical-assignment-operators@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" -+ integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - --"@babel/plugin-transform-member-expression-literals@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" -- integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== -+"@babel/plugin-transform-member-expression-literals@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" -+ integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-modules-amd@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" -- integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== -+"@babel/plugin-transform-modules-amd@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" -+ integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== - dependencies: -- "@babel/helper-module-transforms" "^7.22.5" -+ "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-modules-commonjs@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz#b11810117ed4ee7691b29bd29fd9f3f98276034f" -- integrity sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg== -+"@babel/plugin-transform-modules-commonjs@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" -+ integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== - dependencies: -- "@babel/helper-module-transforms" "^7.22.15" -+ "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - --"@babel/plugin-transform-modules-systemjs@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz#3386be5875d316493b517207e8f1931d93154bb1" -- integrity sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA== -+"@babel/plugin-transform-modules-systemjs@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" -+ integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" -- "@babel/helper-module-transforms" "^7.22.9" -+ "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" -- "@babel/helper-validator-identifier" "^7.22.5" -+ "@babel/helper-validator-identifier" "^7.22.20" - --"@babel/plugin-transform-modules-umd@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" -- integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== -+"@babel/plugin-transform-modules-umd@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" -+ integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== - dependencies: -- "@babel/helper-module-transforms" "^7.22.5" -+ "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - - "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": -@@ -799,198 +655,199 @@ - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-new-target@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" -- integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== -+"@babel/plugin-transform-new-target@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" -+ integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" -- integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== -+"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" -+ integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - --"@babel/plugin-transform-numeric-separator@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" -- integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== -+"@babel/plugin-transform-numeric-separator@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" -+ integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - --"@babel/plugin-transform-object-rest-spread@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" -- integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== -+"@babel/plugin-transform-object-rest-spread@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" -+ integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== - dependencies: -- "@babel/compat-data" "^7.22.9" -+ "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" -- "@babel/plugin-transform-parameters" "^7.22.15" -+ "@babel/plugin-transform-parameters" "^7.23.3" - --"@babel/plugin-transform-object-super@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" -- integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== -+"@babel/plugin-transform-object-super@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" -+ integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" -- "@babel/helper-replace-supers" "^7.22.5" -+ "@babel/helper-replace-supers" "^7.22.20" - --"@babel/plugin-transform-optional-catch-binding@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" -- integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== -+"@babel/plugin-transform-optional-catch-binding@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" -+ integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - --"@babel/plugin-transform-optional-chaining@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz#d7a5996c2f7ca4ad2ad16dbb74444e5c4385b1ba" -- integrity sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A== -+"@babel/plugin-transform-optional-chaining@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" -+ integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - --"@babel/plugin-transform-parameters@^7.22.15": -- version "7.22.15" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" -- integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== -+"@babel/plugin-transform-parameters@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" -+ integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-private-methods@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" -- integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== -+"@babel/plugin-transform-private-methods@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" -+ integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== - dependencies: -- "@babel/helper-create-class-features-plugin" "^7.22.5" -+ "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-private-property-in-object@^7.22.11": -- version "7.22.11" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" -- integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== -+"@babel/plugin-transform-private-property-in-object@^7.23.3": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" -+ integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" -- "@babel/helper-create-class-features-plugin" "^7.22.11" -+ "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - --"@babel/plugin-transform-property-literals@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" -- integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== -+"@babel/plugin-transform-property-literals@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" -+ integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-regenerator@^7.22.10": -- version "7.22.10" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" -- integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== -+"@babel/plugin-transform-regenerator@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" -+ integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - --"@babel/plugin-transform-reserved-words@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" -- integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== -+"@babel/plugin-transform-reserved-words@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" -+ integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-shorthand-properties@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" -- integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== -+"@babel/plugin-transform-shorthand-properties@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" -+ integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-spread@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" -- integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== -+"@babel/plugin-transform-spread@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" -+ integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - --"@babel/plugin-transform-sticky-regex@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" -- integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== -+"@babel/plugin-transform-sticky-regex@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" -+ integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-template-literals@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" -- integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== -+"@babel/plugin-transform-template-literals@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" -+ integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-typeof-symbol@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" -- integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== -+"@babel/plugin-transform-typeof-symbol@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" -+ integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-unicode-escapes@^7.22.10": -- version "7.22.10" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" -- integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== -+"@babel/plugin-transform-unicode-escapes@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" -+ integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-unicode-property-regex@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" -- integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== -+"@babel/plugin-transform-unicode-property-regex@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" -+ integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== - dependencies: -- "@babel/helper-create-regexp-features-plugin" "^7.22.5" -+ "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-unicode-regex@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" -- integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== -+"@babel/plugin-transform-unicode-regex@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" -+ integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== - dependencies: -- "@babel/helper-create-regexp-features-plugin" "^7.22.5" -+ "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - --"@babel/plugin-transform-unicode-sets-regex@^7.22.5": -- version "7.22.5" -- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" -- integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== -+"@babel/plugin-transform-unicode-sets-regex@^7.23.3": -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" -+ integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== - dependencies: -- "@babel/helper-create-regexp-features-plugin" "^7.22.5" -+ "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - - "@babel/preset-env@^7.22.20": -- version "7.22.20" -- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" -- integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== -+ version "7.23.3" -+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.3.tgz#d299e0140a7650684b95c62be2db0ef8c975143e" -+ integrity sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q== - dependencies: -- "@babel/compat-data" "^7.22.20" -+ "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" -- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" -- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" -+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" -+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" -+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -- "@babel/plugin-syntax-import-assertions" "^7.22.5" -- "@babel/plugin-syntax-import-attributes" "^7.22.5" -+ "@babel/plugin-syntax-import-assertions" "^7.23.3" -+ "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -@@ -1002,59 +859,58 @@ - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" -- "@babel/plugin-transform-arrow-functions" "^7.22.5" -- "@babel/plugin-transform-async-generator-functions" "^7.22.15" -- "@babel/plugin-transform-async-to-generator" "^7.22.5" -- "@babel/plugin-transform-block-scoped-functions" "^7.22.5" -- "@babel/plugin-transform-block-scoping" "^7.22.15" -- "@babel/plugin-transform-class-properties" "^7.22.5" -- "@babel/plugin-transform-class-static-block" "^7.22.11" -- "@babel/plugin-transform-classes" "^7.22.15" -- "@babel/plugin-transform-computed-properties" "^7.22.5" -- "@babel/plugin-transform-destructuring" "^7.22.15" -- "@babel/plugin-transform-dotall-regex" "^7.22.5" -- "@babel/plugin-transform-duplicate-keys" "^7.22.5" -- "@babel/plugin-transform-dynamic-import" "^7.22.11" -- "@babel/plugin-transform-exponentiation-operator" "^7.22.5" -- "@babel/plugin-transform-export-namespace-from" "^7.22.11" -- "@babel/plugin-transform-for-of" "^7.22.15" -- "@babel/plugin-transform-function-name" "^7.22.5" -- "@babel/plugin-transform-json-strings" "^7.22.11" -- "@babel/plugin-transform-literals" "^7.22.5" -- "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" -- "@babel/plugin-transform-member-expression-literals" "^7.22.5" -- "@babel/plugin-transform-modules-amd" "^7.22.5" -- "@babel/plugin-transform-modules-commonjs" "^7.22.15" -- "@babel/plugin-transform-modules-systemjs" "^7.22.11" -- "@babel/plugin-transform-modules-umd" "^7.22.5" -+ "@babel/plugin-transform-arrow-functions" "^7.23.3" -+ "@babel/plugin-transform-async-generator-functions" "^7.23.3" -+ "@babel/plugin-transform-async-to-generator" "^7.23.3" -+ "@babel/plugin-transform-block-scoped-functions" "^7.23.3" -+ "@babel/plugin-transform-block-scoping" "^7.23.3" -+ "@babel/plugin-transform-class-properties" "^7.23.3" -+ "@babel/plugin-transform-class-static-block" "^7.23.3" -+ "@babel/plugin-transform-classes" "^7.23.3" -+ "@babel/plugin-transform-computed-properties" "^7.23.3" -+ "@babel/plugin-transform-destructuring" "^7.23.3" -+ "@babel/plugin-transform-dotall-regex" "^7.23.3" -+ "@babel/plugin-transform-duplicate-keys" "^7.23.3" -+ "@babel/plugin-transform-dynamic-import" "^7.23.3" -+ "@babel/plugin-transform-exponentiation-operator" "^7.23.3" -+ "@babel/plugin-transform-export-namespace-from" "^7.23.3" -+ "@babel/plugin-transform-for-of" "^7.23.3" -+ "@babel/plugin-transform-function-name" "^7.23.3" -+ "@babel/plugin-transform-json-strings" "^7.23.3" -+ "@babel/plugin-transform-literals" "^7.23.3" -+ "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" -+ "@babel/plugin-transform-member-expression-literals" "^7.23.3" -+ "@babel/plugin-transform-modules-amd" "^7.23.3" -+ "@babel/plugin-transform-modules-commonjs" "^7.23.3" -+ "@babel/plugin-transform-modules-systemjs" "^7.23.3" -+ "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" -- "@babel/plugin-transform-new-target" "^7.22.5" -- "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" -- "@babel/plugin-transform-numeric-separator" "^7.22.11" -- "@babel/plugin-transform-object-rest-spread" "^7.22.15" -- "@babel/plugin-transform-object-super" "^7.22.5" -- "@babel/plugin-transform-optional-catch-binding" "^7.22.11" -- "@babel/plugin-transform-optional-chaining" "^7.22.15" -- "@babel/plugin-transform-parameters" "^7.22.15" -- "@babel/plugin-transform-private-methods" "^7.22.5" -- "@babel/plugin-transform-private-property-in-object" "^7.22.11" -- "@babel/plugin-transform-property-literals" "^7.22.5" -- "@babel/plugin-transform-regenerator" "^7.22.10" -- "@babel/plugin-transform-reserved-words" "^7.22.5" -- "@babel/plugin-transform-shorthand-properties" "^7.22.5" -- "@babel/plugin-transform-spread" "^7.22.5" -- "@babel/plugin-transform-sticky-regex" "^7.22.5" -- "@babel/plugin-transform-template-literals" "^7.22.5" -- "@babel/plugin-transform-typeof-symbol" "^7.22.5" -- "@babel/plugin-transform-unicode-escapes" "^7.22.10" -- "@babel/plugin-transform-unicode-property-regex" "^7.22.5" -- "@babel/plugin-transform-unicode-regex" "^7.22.5" -- "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" -+ "@babel/plugin-transform-new-target" "^7.23.3" -+ "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" -+ "@babel/plugin-transform-numeric-separator" "^7.23.3" -+ "@babel/plugin-transform-object-rest-spread" "^7.23.3" -+ "@babel/plugin-transform-object-super" "^7.23.3" -+ "@babel/plugin-transform-optional-catch-binding" "^7.23.3" -+ "@babel/plugin-transform-optional-chaining" "^7.23.3" -+ "@babel/plugin-transform-parameters" "^7.23.3" -+ "@babel/plugin-transform-private-methods" "^7.23.3" -+ "@babel/plugin-transform-private-property-in-object" "^7.23.3" -+ "@babel/plugin-transform-property-literals" "^7.23.3" -+ "@babel/plugin-transform-regenerator" "^7.23.3" -+ "@babel/plugin-transform-reserved-words" "^7.23.3" -+ "@babel/plugin-transform-shorthand-properties" "^7.23.3" -+ "@babel/plugin-transform-spread" "^7.23.3" -+ "@babel/plugin-transform-sticky-regex" "^7.23.3" -+ "@babel/plugin-transform-template-literals" "^7.23.3" -+ "@babel/plugin-transform-typeof-symbol" "^7.23.3" -+ "@babel/plugin-transform-unicode-escapes" "^7.23.3" -+ "@babel/plugin-transform-unicode-property-regex" "^7.23.3" -+ "@babel/plugin-transform-unicode-regex" "^7.23.3" -+ "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" -- "@babel/types" "^7.22.19" -- babel-plugin-polyfill-corejs2 "^0.4.5" -- babel-plugin-polyfill-corejs3 "^0.8.3" -- babel-plugin-polyfill-regenerator "^0.5.2" -+ babel-plugin-polyfill-corejs2 "^0.4.6" -+ babel-plugin-polyfill-corejs3 "^0.8.5" -+ babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" - semver "^6.3.1" - -@@ -1073,13 +929,13 @@ - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - - "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": -- version "7.17.9" -- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72" -- integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg== -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.4.tgz#36fa1d2b36db873d25ec631dcc4923fdc1cf2e2e" -+ integrity sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg== - dependencies: -- regenerator-runtime "^0.13.4" -+ regenerator-runtime "^0.14.0" - --"@babel/template@^7.18.6", "@babel/template@^7.22.15", "@babel/template@^7.22.5": -+"@babel/template@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== -@@ -1088,45 +944,45 @@ - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - --"@babel/traverse@^7.18.9", "@babel/traverse@^7.22.5", "@babel/traverse@^7.23.0": -- version "7.23.0" -- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" -- integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== -+"@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" -+ integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== - dependencies: -- "@babel/code-frame" "^7.22.13" -- "@babel/generator" "^7.23.0" -+ "@babel/code-frame" "^7.23.4" -+ "@babel/generator" "^7.23.4" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" -- "@babel/parser" "^7.23.0" -- "@babel/types" "^7.23.0" -+ "@babel/parser" "^7.23.4" -+ "@babel/types" "^7.23.4" - debug "^4.1.0" - globals "^11.1.0" - --"@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.22.10", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.4.4": -- version "7.23.0" -- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" -- integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== -+"@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.23.4", "@babel/types@^7.4.4": -+ version "7.23.4" -+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" -+ integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== - dependencies: -- "@babel/helper-string-parser" "^7.22.5" -+ "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - - "@csstools/css-parser-algorithms@^2.3.1": -- version "2.3.1" -- resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a" -- integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA== -+ version "2.3.2" -+ resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz#1e0d581dbf4518cb3e939c3b863cb7180c8cedad" -+ integrity sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA== - - "@csstools/css-tokenizer@^2.2.0": -- version "2.2.0" -- resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5" -- integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA== -+ version "2.2.1" -+ resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz#9dc431c9a5f61087af626e41ac2a79cce7bb253d" -+ integrity sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg== - - "@csstools/media-query-list-parser@^2.1.4": -- version "2.1.4" -- resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz#0017f99945f6c16dd81a7aacf6821770933c3a5c" -- integrity sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw== -+ version "2.1.5" -+ resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz#94bc8b3c3fd7112a40b7bf0b483e91eba0654a0f" -+ integrity sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ== - - "@csstools/selector-specificity@^3.0.0": - version "3.0.0" -@@ -1154,19 +1010,18 @@ - postcss "^8.4.19" - - "@electron/asar@^3.2.1": -- version "3.2.4" -- resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864" -- integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g== -+ version "3.2.8" -+ resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.8.tgz#2ea722f3452583dbd4ffdcc4b4f5dc903f1d8178" -+ integrity sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg== - dependencies: -- chromium-pickle-js "^0.2.0" - commander "^5.0.0" - glob "^7.1.6" - minimatch "^3.0.4" - - "@electron/get@^2.0.0": -- version "2.0.2" -- resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" -- integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== -+ version "2.0.3" -+ resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960" -+ integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" -@@ -1219,15 +1074,15 @@ - dependencies: - eslint-visitor-keys "^3.3.0" - --"@eslint-community/regexpp@^4.5.0", "@eslint-community/regexpp@^4.6.1": -- version "4.6.2" -- resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.6.2.tgz#1816b5f6948029c5eaacb0703b850ee0cb37d8f8" -- integrity sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw== -+"@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": -+ version "4.10.0" -+ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" -+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - --"@eslint/eslintrc@^2.1.2": -- version "2.1.2" -- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" -- integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== -+"@eslint/eslintrc@^2.1.3": -+ version "2.1.3" -+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" -+ integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" -@@ -1239,10 +1094,15 @@ - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - --"@eslint/js@8.50.0": -- version "8.50.0" -- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" -- integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== -+"@eslint/js@8.54.0": -+ version "8.54.0" -+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" -+ integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== -+ -+"@fastify/busboy@^2.0.0": -+ version "2.1.0" -+ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" -+ integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== - - "@fortawesome/fontawesome-common-types@6.4.2": - version "6.4.2" -@@ -1275,12 +1135,12 @@ - resolved "https://registry.yarnpkg.com/@fortawesome/vue-fontawesome/-/vue-fontawesome-2.0.10.tgz#b10721425d7efdee6d83fba21c64cad86fa51904" - integrity sha512-OTETSXz+3ygD2OK2/vy82cmUBpuJqeOAg4gfnnv+f2Rir1tDIhQg026Q3NQxznq83ZLz8iNqGG9XJm26inpDeg== - --"@humanwhocodes/config-array@^0.11.11": -- version "0.11.11" -- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" -- integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== -+"@humanwhocodes/config-array@^0.11.13": -+ version "0.11.13" -+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" -+ integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== - dependencies: -- "@humanwhocodes/object-schema" "^1.2.1" -+ "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" - minimatch "^3.0.5" - -@@ -1289,10 +1149,10 @@ - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - --"@humanwhocodes/object-schema@^1.2.1": -- version "1.2.1" -- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" -- integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -+"@humanwhocodes/object-schema@^2.0.1": -+ version "2.0.1" -+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" -+ integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== - - "@isaacs/cliui@^8.0.2": - version "8.0.2" -@@ -1306,77 +1166,64 @@ - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - --"@jest/schemas@^29.4.3": -- version "29.4.3" -- resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" -- integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== -+"@jest/schemas@^29.6.3": -+ version "29.6.3" -+ resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" -+ integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: -- "@sinclair/typebox" "^0.25.16" -+ "@sinclair/typebox" "^0.27.8" - --"@jest/types@^29.5.0": -- version "29.5.0" -- resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" -- integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== -+"@jest/types@^29.6.3": -+ version "29.6.3" -+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" -+ integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: -- "@jest/schemas" "^29.4.3" -+ "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - --"@jridgewell/gen-mapping@^0.1.0": -- version "0.1.1" -- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" -- integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== -- dependencies: -- "@jridgewell/set-array" "^1.0.0" -- "@jridgewell/sourcemap-codec" "^1.4.10" -- - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": -- version "0.3.2" -- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" -- integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== -+ version "0.3.3" -+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" -+ integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - --"@jridgewell/resolve-uri@3.1.0": -- version "3.1.0" -- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" -- integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -- --"@jridgewell/set-array@^1.0.0": -- version "1.1.1" -- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" -- integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== -+"@jridgewell/resolve-uri@^3.1.0": -+ version "3.1.1" -+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" -+ integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - - "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - --"@jridgewell/source-map@^0.3.2": -- version "0.3.2" -- resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" -- integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== -+"@jridgewell/source-map@^0.3.3": -+ version "0.3.5" -+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" -+ integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - --"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": -- version "1.4.14" -- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" -- integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": -+ version "1.4.15" -+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" -+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - - "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": -- version "0.3.18" -- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" -- integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== -+ version "0.3.20" -+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" -+ integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: -- "@jridgewell/resolve-uri" "3.1.0" -- "@jridgewell/sourcemap-codec" "1.4.14" -+ "@jridgewell/resolve-uri" "^3.1.0" -+ "@jridgewell/sourcemap-codec" "^1.4.14" - - "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" -@@ -1460,16 +1307,16 @@ - util "^0.12.4" - - "@silvermine/videojs-quality-selector@^1.3.0": -- version "1.3.0" -- resolved "https://registry.yarnpkg.com/@silvermine/videojs-quality-selector/-/videojs-quality-selector-1.3.0.tgz#6527d73929edea60419b0a189d4babbc21cb2600" -- integrity sha512-Ps63kVXHyod0vNEEtogkVtE+8I6ozMTcRowAPqKF1Ggjr0yl7d8L2fGCnHL919MV2tBRVxnGpYaMmVVcRq6Hjw== -+ version "1.3.1" -+ resolved "https://registry.yarnpkg.com/@silvermine/videojs-quality-selector/-/videojs-quality-selector-1.3.1.tgz#23307dd3d5be442f7aa127c01820f16a3d9476a3" -+ integrity sha512-uo6gs2HVG2TD0bpZAl0AT6RkDXzk9PnAxtmmW5zXexa2uJvkdFT64QvJoMlEUd2FUUwqYqqAuWGFDJdBh5+KcQ== - dependencies: - underscore "1.13.1" - --"@sinclair/typebox@^0.25.16": -- version "0.25.24" -- resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" -- integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== -+"@sinclair/typebox@^0.27.8": -+ version "0.27.8" -+ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" -+ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - - "@sindresorhus/is@^4.0.0": - version "4.6.0" -@@ -1494,17 +1341,17 @@ - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - - "@types/body-parser@*": -- version "1.19.2" -- resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" -- integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== -+ version "1.19.5" -+ resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" -+ integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - - "@types/bonjour@^3.5.9": -- version "3.5.10" -- resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" -- integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== -+ version "3.5.13" -+ resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" -+ integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== - dependencies: - "@types/node" "*" - -@@ -1519,64 +1366,65 @@ - "@types/responselike" "^1.0.0" - - "@types/connect-history-api-fallback@^1.3.5": -- version "1.3.5" -- resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" -- integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== -+ version "1.5.4" -+ resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz#7de71645a103056b48ac3ce07b3520b819c1d5b3" -+ integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - - "@types/connect@*": -- version "3.4.35" -- resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" -- integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== -+ version "3.4.38" -+ resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" -+ integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - - "@types/debug@^4.1.6": -- version "4.1.7" -- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" -- integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== -+ version "4.1.12" -+ resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" -+ integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - - "@types/eslint-scope@^3.7.3": -- version "3.7.3" -- resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" -- integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== -+ version "3.7.7" -+ resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" -+ integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - - "@types/eslint@*": -- version "8.4.2" -- resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.2.tgz#48f2ac58ab9c631cb68845c3d956b28f79fad575" -- integrity sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA== -+ version "8.44.7" -+ resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.7.tgz#430b3cc96db70c81f405e6a08aebdb13869198f5" -+ integrity sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - - "@types/estree@*", "@types/estree@^1.0.0": -- version "1.0.0" -- resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" -- integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== -+ version "1.0.5" -+ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" -+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - --"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": -- version "4.17.28" -- resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" -- integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== -+"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": -+ version "4.17.41" -+ resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" -+ integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" -+ "@types/send" "*" - - "@types/express@*", "@types/express@^4.17.13": -- version "4.17.13" -- resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" -- integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== -+ version "4.17.21" -+ resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" -+ integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" -- "@types/express-serve-static-core" "^4.17.18" -+ "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -@@ -1593,45 +1441,50 @@ - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - - "@types/http-cache-semantics@*": -- version "4.0.1" -- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" -- integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== -+ version "4.0.4" -+ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" -+ integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -+ -+"@types/http-errors@*": -+ version "2.0.4" -+ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" -+ integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - - "@types/http-proxy@^1.17.8": -- version "1.17.9" -- resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.9.tgz#7f0e7931343761efde1e2bf48c40f02f3f75705a" -- integrity sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw== -+ version "1.17.14" -+ resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" -+ integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== - dependencies: - "@types/node" "*" - - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": -- version "2.0.4" -- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" -- integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== -+ version "2.0.6" -+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" -+ integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - - "@types/istanbul-lib-report@*": -- version "3.0.0" -- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" -- integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== -+ version "3.0.3" -+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" -+ integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - - "@types/istanbul-reports@^3.0.0": -- version "3.0.1" -- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" -- integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== -+ version "3.0.4" -+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" -+ integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - - "@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": -- version "7.0.11" -- resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" -- integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -+ version "7.0.15" -+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" -+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - - "@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" -- integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -+ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - - "@types/keyv@^3.1.4": - version "3.1.4" -@@ -1641,57 +1494,73 @@ - "@types/node" "*" - - "@types/mime@*": -- version "3.0.1" -- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" -- integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== -+ version "3.0.4" -+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" -+ integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== -+ -+"@types/mime@^1": -+ version "1.3.5" -+ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" -+ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - - "@types/minimist@^1.2.2": -- version "1.2.2" -- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" -- integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== -+ version "1.2.5" -+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" -+ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== - - "@types/ms@*": -- version "0.7.31" -- resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" -- integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -+ version "0.7.34" -+ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" -+ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -+ -+"@types/node-forge@^1.3.0": -+ version "1.3.10" -+ resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.10.tgz#62a19d4f75a8b03290578c2b04f294b1a5a71b07" -+ integrity sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw== -+ dependencies: -+ "@types/node" "*" - - "@types/node@*": -- version "17.0.33" -- resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.33.tgz#3c1879b276dc63e73030bb91165e62a4509cd506" -- integrity sha512-miWq2m2FiQZmaHfdZNcbpp9PuXg34W5JZ5CrJ/BaS70VuhoJENBEQybeiYSaPBRNq6KQGnjfEnc/F3PN++D+XQ== -+ version "20.10.0" -+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" -+ integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== -+ dependencies: -+ undici-types "~5.26.4" - --"@types/node@^16.11.26": -- version "16.11.45" -- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.45.tgz#155b13a33c665ef2b136f7f245fa525da419e810" -- integrity sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ== -+"@types/node@^18.11.18": -+ version "18.18.13" -+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.13.tgz#ae0f76c0bfe79d8fad0f910b78ae3e59b333c6e8" -+ integrity sha512-vXYZGRrSCreZmq1rEjMRLXJhiy8MrIeVasx+PCVlP414N7CJLHnMf+juVvjdprHyH+XRy3zKZLHeNueOpJCn0g== -+ dependencies: -+ undici-types "~5.26.4" - - "@types/normalize-package-data@^2.4.0": -- version "2.4.1" -- resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" -- integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== -+ version "2.4.4" -+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" -+ integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== - - "@types/plist@^3.0.1": -- version "3.0.2" -- resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01" -- integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== -+ version "3.0.5" -+ resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0" -+ integrity sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA== - dependencies: - "@types/node" "*" - xmlbuilder ">=11.0.1" - - "@types/qs@*": -- version "6.9.7" -- resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" -- integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== -+ version "6.9.10" -+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" -+ integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== - - "@types/range-parser@*": -- version "1.2.4" -- resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" -- integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -+ version "1.2.7" -+ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" -+ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - - "@types/responselike@^1.0.0": -- version "1.0.0" -- resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" -- integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== -+ version "1.0.3" -+ resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" -+ integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -@@ -1700,59 +1569,73 @@ - resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -+"@types/send@*": -+ version "0.17.4" -+ resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" -+ integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== -+ dependencies: -+ "@types/mime" "^1" -+ "@types/node" "*" -+ - "@types/serve-index@^1.9.1": -- version "1.9.1" -- resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" -- integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== -+ version "1.9.4" -+ resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" -+ integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - - "@types/serve-static@*", "@types/serve-static@^1.13.10": -- version "1.15.0" -- resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" -- integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== -+ version "1.15.5" -+ resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" -+ integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: -+ "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - - "@types/sockjs@^0.3.33": -- version "0.3.33" -- resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" -- integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== -+ version "0.3.36" -+ resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" -+ integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - - "@types/verror@^1.10.3": -- version "1.10.5" -- resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.5.tgz#2a1413aded46e67a1fe2386800e291123ed75eb1" -- integrity sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw== -+ version "1.10.9" -+ resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.9.tgz#420c32adb9a2dd50b3db4c8f96501e05a0e72941" -+ integrity sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ== - - "@types/ws@^8.5.5": -- version "8.5.5" -- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" -- integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== -+ version "8.5.10" -+ resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" -+ integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - dependencies: - "@types/node" "*" - - "@types/yargs-parser@*": -- version "21.0.0" -- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" -- integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== -+ version "21.0.3" -+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" -+ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - - "@types/yargs@^17.0.8": -- version "17.0.13" -- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" -- integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== -+ version "17.0.32" -+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" -+ integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - - "@types/yauzl@^2.9.1": -- version "2.10.0" -- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" -- integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== -+ version "2.10.3" -+ resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" -+ integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - -+"@ungap/structured-clone@^1.2.0": -+ version "1.2.0" -+ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" -+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -+ - "@videojs/http-streaming@2.16.2": - version "2.16.2" - resolved "https://registry.yarnpkg.com/@videojs/http-streaming/-/http-streaming-2.16.2.tgz#a9be925b4e368a41dbd67d49c4f566715169b84b" -@@ -1767,6 +1650,20 @@ - mux.js "6.0.1" - video.js "^6 || ^7" - -+"@videojs/http-streaming@3.7.0": -+ version "3.7.0" -+ resolved "https://registry.yarnpkg.com/@videojs/http-streaming/-/http-streaming-3.7.0.tgz#48ece0582602e24a3b403c2410bbcdf320bfcccd" -+ integrity sha512-5uLFKBL8CvD56dxxJyuxqB5CY0tdoa4SE9KbXakeiAy6iFBUEPvTr2YGLKEWvQ8Lojs1wl+FQndLdv+GO7t9Fw== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ "@videojs/vhs-utils" "4.0.0" -+ aes-decrypter "4.0.1" -+ global "^4.4.0" -+ m3u8-parser "^7.1.0" -+ mpd-parser "^1.2.2" -+ mux.js "7.0.1" -+ video.js "^7 || ^8" -+ - "@videojs/vhs-utils@3.0.5", "@videojs/vhs-utils@^3.0.4", "@videojs/vhs-utils@^3.0.5": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz#665ba70d78258ba1ab977364e2fe9f4d4799c46c" -@@ -1776,6 +1673,15 @@ - global "^4.4.0" - url-toolkit "^2.2.1" - -+"@videojs/vhs-utils@4.0.0", "@videojs/vhs-utils@^4.0.0": -+ version "4.0.0" -+ resolved "https://registry.yarnpkg.com/@videojs/vhs-utils/-/vhs-utils-4.0.0.tgz#4d4dbf5d61a9fbd2da114b84ec747c3a483bc60d" -+ integrity sha512-xJp7Yd4jMLwje2vHCUmi8MOUU76nxiwII3z4Eg3Ucb+6rrkFVGosrXlMgGnaLjq724j3wzNElRZ71D/CKrTtxg== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ global "^4.4.0" -+ url-toolkit "^2.2.1" -+ - "@videojs/xhr@2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@videojs/xhr/-/xhr-2.6.0.tgz#cd897e0ad54faf497961bcce3fa16dc15a26bb80" -@@ -1785,10 +1691,10 @@ - global "~4.4.0" - is-function "^1.0.1" - --"@vue/compiler-sfc@2.7.14": -- version "2.7.14" -- resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz#3446fd2fbb670d709277fc3ffa88efc5e10284fd" -- integrity sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA== -+"@vue/compiler-sfc@2.7.15": -+ version "2.7.15" -+ resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz#62135fb2f69559fc723fd9c56b8e8b0ac7864a0b" -+ integrity sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg== - dependencies: - "@babel/parser" "^7.18.4" - postcss "^8.4.14" -@@ -1810,125 +1716,125 @@ - optionalDependencies: - prettier "^1.18.2 || ^2.0.0" - --"@webassemblyjs/ast@1.11.5", "@webassemblyjs/ast@^1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.5.tgz#6e818036b94548c1fb53b754b5cae3c9b208281c" -- integrity sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ== -+"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" -+ integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: -- "@webassemblyjs/helper-numbers" "1.11.5" -- "@webassemblyjs/helper-wasm-bytecode" "1.11.5" -+ "@webassemblyjs/helper-numbers" "1.11.6" -+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - --"@webassemblyjs/floating-point-hex-parser@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz#e85dfdb01cad16b812ff166b96806c050555f1b4" -- integrity sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ== -+"@webassemblyjs/floating-point-hex-parser@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" -+ integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - --"@webassemblyjs/helper-api-error@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz#1e82fa7958c681ddcf4eabef756ce09d49d442d1" -- integrity sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA== -+"@webassemblyjs/helper-api-error@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" -+ integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - --"@webassemblyjs/helper-buffer@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz#91381652ea95bb38bbfd270702351c0c89d69fba" -- integrity sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg== -+"@webassemblyjs/helper-buffer@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" -+ integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - --"@webassemblyjs/helper-numbers@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz#23380c910d56764957292839006fecbe05e135a9" -- integrity sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA== -+"@webassemblyjs/helper-numbers@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" -+ integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: -- "@webassemblyjs/floating-point-hex-parser" "1.11.5" -- "@webassemblyjs/helper-api-error" "1.11.5" -+ "@webassemblyjs/floating-point-hex-parser" "1.11.6" -+ "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - --"@webassemblyjs/helper-wasm-bytecode@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz#e258a25251bc69a52ef817da3001863cc1c24b9f" -- integrity sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA== -+"@webassemblyjs/helper-wasm-bytecode@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" -+ integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - --"@webassemblyjs/helper-wasm-section@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz#966e855a6fae04d5570ad4ec87fbcf29b42ba78e" -- integrity sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA== -+"@webassemblyjs/helper-wasm-section@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" -+ integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: -- "@webassemblyjs/ast" "1.11.5" -- "@webassemblyjs/helper-buffer" "1.11.5" -- "@webassemblyjs/helper-wasm-bytecode" "1.11.5" -- "@webassemblyjs/wasm-gen" "1.11.5" -+ "@webassemblyjs/ast" "1.11.6" -+ "@webassemblyjs/helper-buffer" "1.11.6" -+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -+ "@webassemblyjs/wasm-gen" "1.11.6" - --"@webassemblyjs/ieee754@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz#b2db1b33ce9c91e34236194c2b5cba9b25ca9d60" -- integrity sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg== -+"@webassemblyjs/ieee754@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" -+ integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - --"@webassemblyjs/leb128@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.5.tgz#482e44d26b6b949edf042a8525a66c649e38935a" -- integrity sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ== -+"@webassemblyjs/leb128@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" -+ integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - --"@webassemblyjs/utf8@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.5.tgz#83bef94856e399f3740e8df9f63bc47a987eae1a" -- integrity sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ== -+"@webassemblyjs/utf8@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" -+ integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - - "@webassemblyjs/wasm-edit@^1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz#93ee10a08037657e21c70de31c47fdad6b522b2d" -- integrity sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ== -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" -+ integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: -- "@webassemblyjs/ast" "1.11.5" -- "@webassemblyjs/helper-buffer" "1.11.5" -- "@webassemblyjs/helper-wasm-bytecode" "1.11.5" -- "@webassemblyjs/helper-wasm-section" "1.11.5" -- "@webassemblyjs/wasm-gen" "1.11.5" -- "@webassemblyjs/wasm-opt" "1.11.5" -- "@webassemblyjs/wasm-parser" "1.11.5" -- "@webassemblyjs/wast-printer" "1.11.5" -+ "@webassemblyjs/ast" "1.11.6" -+ "@webassemblyjs/helper-buffer" "1.11.6" -+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -+ "@webassemblyjs/helper-wasm-section" "1.11.6" -+ "@webassemblyjs/wasm-gen" "1.11.6" -+ "@webassemblyjs/wasm-opt" "1.11.6" -+ "@webassemblyjs/wasm-parser" "1.11.6" -+ "@webassemblyjs/wast-printer" "1.11.6" - --"@webassemblyjs/wasm-gen@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz#ceb1c82b40bf0cf67a492c53381916756ef7f0b1" -- integrity sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA== -+"@webassemblyjs/wasm-gen@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" -+ integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: -- "@webassemblyjs/ast" "1.11.5" -- "@webassemblyjs/helper-wasm-bytecode" "1.11.5" -- "@webassemblyjs/ieee754" "1.11.5" -- "@webassemblyjs/leb128" "1.11.5" -- "@webassemblyjs/utf8" "1.11.5" -+ "@webassemblyjs/ast" "1.11.6" -+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -+ "@webassemblyjs/ieee754" "1.11.6" -+ "@webassemblyjs/leb128" "1.11.6" -+ "@webassemblyjs/utf8" "1.11.6" - --"@webassemblyjs/wasm-opt@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz#b52bac29681fa62487e16d3bb7f0633d5e62ca0a" -- integrity sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw== -+"@webassemblyjs/wasm-opt@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" -+ integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: -- "@webassemblyjs/ast" "1.11.5" -- "@webassemblyjs/helper-buffer" "1.11.5" -- "@webassemblyjs/wasm-gen" "1.11.5" -- "@webassemblyjs/wasm-parser" "1.11.5" -+ "@webassemblyjs/ast" "1.11.6" -+ "@webassemblyjs/helper-buffer" "1.11.6" -+ "@webassemblyjs/wasm-gen" "1.11.6" -+ "@webassemblyjs/wasm-parser" "1.11.6" - --"@webassemblyjs/wasm-parser@1.11.5", "@webassemblyjs/wasm-parser@^1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz#7ba0697ca74c860ea13e3ba226b29617046982e2" -- integrity sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew== -+"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" -+ integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: -- "@webassemblyjs/ast" "1.11.5" -- "@webassemblyjs/helper-api-error" "1.11.5" -- "@webassemblyjs/helper-wasm-bytecode" "1.11.5" -- "@webassemblyjs/ieee754" "1.11.5" -- "@webassemblyjs/leb128" "1.11.5" -- "@webassemblyjs/utf8" "1.11.5" -+ "@webassemblyjs/ast" "1.11.6" -+ "@webassemblyjs/helper-api-error" "1.11.6" -+ "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -+ "@webassemblyjs/ieee754" "1.11.6" -+ "@webassemblyjs/leb128" "1.11.6" -+ "@webassemblyjs/utf8" "1.11.6" - --"@webassemblyjs/wast-printer@1.11.5": -- version "1.11.5" -- resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz#7a5e9689043f3eca82d544d7be7a8e6373a6fa98" -- integrity sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA== -+"@webassemblyjs/wast-printer@1.11.6": -+ version "1.11.6" -+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" -+ integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: -- "@webassemblyjs/ast" "1.11.5" -+ "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - - "@webpack-cli/configtest@^2.1.1": -@@ -1946,12 +1852,7 @@ - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" - integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== - --"@xmldom/xmldom@^0.8.3": -- version "0.8.6" -- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440" -- integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg== -- --"@xmldom/xmldom@^0.8.8": -+"@xmldom/xmldom@^0.8.3", "@xmldom/xmldom@^0.8.8": - version "0.8.10" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99" - integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw== -@@ -1984,10 +1885,10 @@ acorn-jsx@^5.3.2: - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - --acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.9.0: -- version "8.9.0" -- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" -- integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== -+acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0: -+ version "8.11.2" -+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" -+ integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - - aes-decrypter@3.1.3: - version "3.1.3" -@@ -1999,6 +1900,16 @@ aes-decrypter@3.1.3: - global "^4.4.0" - pkcs7 "^1.0.4" - -+aes-decrypter@4.0.1, aes-decrypter@^4.0.1: -+ version "4.0.1" -+ resolved "https://registry.yarnpkg.com/aes-decrypter/-/aes-decrypter-4.0.1.tgz#c1a81d0bde0e96fed0674488d2a31a6d7ab9b7a7" -+ integrity sha512-H1nh/P9VZXUf17AA5NQfJML88CFjVBDuGkp5zDHa7oEhYN9TTpNLJknRY1ie0iSKWlDf6JRnJKaZVDSQdPy6Cg== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ "@videojs/vhs-utils" "^3.0.5" -+ global "^4.4.0" -+ pkcs7 "^1.0.4" -+ - agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" -@@ -2080,9 +1991,9 @@ ansi-styles@^6.1.0: - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - - anymatch@~3.1.2: -- version "3.1.2" -- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" -- integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== -+ version "3.1.3" -+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" -+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" -@@ -2092,12 +2003,12 @@ app-builder-bin@4.0.0: - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" - integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== - --app-builder-lib@24.6.4: -- version "24.6.4" -- resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.6.4.tgz#5bf77dd89d3ee557bc615b9ddfaf383f3e51577b" -- integrity sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg== -+app-builder-lib@24.9.1: -+ version "24.9.1" -+ resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.9.1.tgz#bf3568529298b4de8595ed1acbb351fe27db5ba4" -+ integrity sha512-Q1nYxZcio4r+W72cnIRVYofEAyjBd3mG47o+zms8HlD51zWtA/YxJb01Jei5F+jkWhge/PTQK+uldsPh6d0/4g== - dependencies: -- "7zip-bin" "~5.1.1" -+ "7zip-bin" "~5.2.0" - "@develar/schema-utils" "~2.6.5" - "@electron/notarize" "2.1.0" - "@electron/osx-sign" "1.0.5" -@@ -2106,12 +2017,12 @@ app-builder-lib@24.6.4: - "@types/fs-extra" "9.0.13" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.9" -- builder-util "24.5.0" -- builder-util-runtime "9.2.1" -+ builder-util "24.8.1" -+ builder-util-runtime "9.2.3" - chromium-pickle-js "^0.2.0" - debug "^4.3.4" - ejs "^3.1.8" -- electron-publish "24.5.0" -+ electron-publish "24.8.1" - form-data "^4.0.0" - fs-extra "^10.1.0" - hosted-git-info "^4.1.0" -@@ -2149,22 +2060,22 @@ array-buffer-byte-length@^1.0.0: - array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -- integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= -+ integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - - array-flatten@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - --array-includes@^3.1.6: -- version "3.1.6" -- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" -- integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== -+array-includes@^3.1.7: -+ version "3.1.7" -+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" -+ integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -- get-intrinsic "^1.1.3" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" -+ get-intrinsic "^1.2.1" - is-string "^1.0.7" - - array-union@^2.1.0: -@@ -2172,45 +2083,46 @@ array-union@^2.1.0: - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - --array.prototype.findlastindex@^1.2.2: -- version "1.2.2" -- resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz#bc229aef98f6bd0533a2bc61ff95209875526c9b" -- integrity sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw== -+array.prototype.findlastindex@^1.2.3: -+ version "1.2.3" -+ resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" -+ integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" -- get-intrinsic "^1.1.3" -+ get-intrinsic "^1.2.1" - --array.prototype.flat@^1.3.1: -- version "1.3.1" -- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" -- integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== -+array.prototype.flat@^1.3.2: -+ version "1.3.2" -+ resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" -+ integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - --array.prototype.flatmap@^1.3.1: -- version "1.3.1" -- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" -- integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== -+array.prototype.flatmap@^1.3.2: -+ version "1.3.2" -+ resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" -+ integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - --arraybuffer.prototype.slice@^1.0.1: -- version "1.0.1" -- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb" -- integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw== -+arraybuffer.prototype.slice@^1.0.2: -+ version "1.0.2" -+ resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" -+ integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" -+ es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" -@@ -2230,7 +2142,7 @@ asn1@~0.2.3: - assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -- integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -+ integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - - astral-regex@^2.0.0: - version "2.0.0" -@@ -2243,14 +2155,14 @@ async-exit-hook@^2.0.1: - integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== - - async@^3.2.3: -- version "3.2.3" -- resolved "https://registry.yarnpkg.com/async/-/async-3.2.3.tgz#ac53dafd3f4720ee9e8a160628f18ea91df196c9" -- integrity sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g== -+ version "3.2.5" -+ resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" -+ integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - - asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - - at-least-node@^1.0.0: - version "1.0.0" -@@ -2272,12 +2184,12 @@ available-typed-arrays@^1.0.5: - aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -- integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -+ integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - - aws4@^1.8.0: -- version "1.11.0" -- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" -- integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -+ version "1.12.0" -+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" -+ integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - - babel-loader@^9.1.3: - version "9.1.3" -@@ -2287,29 +2199,29 @@ babel-loader@^9.1.3: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - --babel-plugin-polyfill-corejs2@^0.4.5: -- version "0.4.5" -- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" -- integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== -+babel-plugin-polyfill-corejs2@^0.4.6: -+ version "0.4.6" -+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" -+ integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== - dependencies: - "@babel/compat-data" "^7.22.6" -- "@babel/helper-define-polyfill-provider" "^0.4.2" -+ "@babel/helper-define-polyfill-provider" "^0.4.3" - semver "^6.3.1" - --babel-plugin-polyfill-corejs3@^0.8.3: -- version "0.8.3" -- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" -- integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== -+babel-plugin-polyfill-corejs3@^0.8.5: -+ version "0.8.6" -+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" -+ integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== - dependencies: -- "@babel/helper-define-polyfill-provider" "^0.4.2" -- core-js-compat "^3.31.0" -+ "@babel/helper-define-polyfill-provider" "^0.4.3" -+ core-js-compat "^3.33.1" - --babel-plugin-polyfill-regenerator@^0.5.2: -- version "0.5.2" -- resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" -- integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== -+babel-plugin-polyfill-regenerator@^0.5.3: -+ version "0.5.3" -+ resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" -+ integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== - dependencies: -- "@babel/helper-define-polyfill-provider" "^0.4.2" -+ "@babel/helper-define-polyfill-provider" "^0.4.3" - - balanced-match@^1.0.0: - version "1.0.2" -@@ -2329,19 +2241,19 @@ base64-js@^1.3.1, base64-js@^1.5.1: - batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" -- integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -+ integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - - bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" -- integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= -+ integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - - big-integer@^1.6.44: -- version "1.6.51" -- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" -- integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -+ version "1.6.52" -+ resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" -+ integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== - - big.js@^5.2.2: - version "5.2.2" -@@ -2365,10 +2277,10 @@ bluebird@^3.1.1, bluebird@^3.5.5: - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - --body-parser@1.20.0: -- version "1.20.0" -- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" -- integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== -+body-parser@1.20.1: -+ version "1.20.1" -+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" -+ integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" -@@ -2378,25 +2290,25 @@ body-parser@1.20.0: - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" -- qs "6.10.3" -+ qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - - bonjour-service@^1.0.11: -- version "1.0.12" -- resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.0.12.tgz#28fbd4683f5f2e36feedb833e24ba661cac960c3" -- integrity sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw== -+ version "1.1.1" -+ resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" -+ integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== - dependencies: - array-flatten "^2.1.2" - dns-equal "^1.0.0" - fast-deep-equal "^3.1.3" -- multicast-dns "^7.2.4" -+ multicast-dns "^7.2.5" - - boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -- integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -+ integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - - boolean@^3.0.1: - version "3.2.0" -@@ -2432,20 +2344,20 @@ braces@^3.0.2, braces@~3.0.2: - dependencies: - fill-range "^7.0.1" - --browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.21.9: -- version "4.21.9" -- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" -- integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== -+browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1: -+ version "4.22.1" -+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" -+ integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: -- caniuse-lite "^1.0.30001503" -- electron-to-chromium "^1.4.431" -- node-releases "^2.0.12" -- update-browserslist-db "^1.0.11" -+ caniuse-lite "^1.0.30001541" -+ electron-to-chromium "^1.4.535" -+ node-releases "^2.0.13" -+ update-browserslist-db "^1.0.13" - - buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" -- integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= -+ integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - - buffer-equal@^1.0.0: - version "1.0.1" -@@ -2465,24 +2377,24 @@ buffer@^5.1.0: - base64-js "^1.3.1" - ieee754 "^1.1.13" - --builder-util-runtime@9.2.1: -- version "9.2.1" -- resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd" -- integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA== -+builder-util-runtime@9.2.3: -+ version "9.2.3" -+ resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz#0a82c7aca8eadef46d67b353c638f052c206b83c" -+ integrity sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw== - dependencies: - debug "^4.3.4" - sax "^1.2.4" - --builder-util@24.5.0: -- version "24.5.0" -- resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.5.0.tgz#8683c9a7a1c5c9f9a4c4d2789ecca0e47dddd3f9" -- integrity sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ== -+builder-util@24.8.1: -+ version "24.8.1" -+ resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.8.1.tgz#594d45b0c86d1d17f5c7bebbb77405080b2571c2" -+ integrity sha512-ibmQ4BnnqCnJTNrdmdNlnhF48kfqhNzSeqFMXHLIl+o9/yhn6QfOaVrloZ9YUu3m0k3rexvlT5wcki6LWpjTZw== - dependencies: -- "7zip-bin" "~5.1.1" -+ "7zip-bin" "~5.2.0" - "@types/debug" "^4.1.6" - app-builder-bin "4.0.0" - bluebird-lst "^1.0.9" -- builder-util-runtime "9.2.1" -+ builder-util-runtime "9.2.3" - chalk "^4.1.2" - cross-spawn "^7.0.3" - debug "^4.3.4" -@@ -2514,17 +2426,10 @@ bundle-name@^3.0.0: - dependencies: - run-applescript "^5.0.0" - --busboy@^1.6.0: -- version "1.6.0" -- resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" -- integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== -- dependencies: -- streamsearch "^1.1.0" -- - bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" -- integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -+ integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - - bytes@3.1.2: - version "3.1.2" -@@ -2537,9 +2442,9 @@ cacheable-lookup@^5.0.3: - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - - cacheable-request@^7.0.2: -- version "7.0.2" -- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" -- integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== -+ version "7.0.4" -+ resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" -+ integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" -@@ -2549,13 +2454,14 @@ cacheable-request@^7.0.2: - normalize-url "^6.0.1" - responselike "^2.0.0" - --call-bind@^1.0.0, call-bind@^1.0.2: -- version "1.0.2" -- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" -- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== -+call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: -+ version "1.0.5" -+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" -+ integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: -- function-bind "^1.1.1" -- get-intrinsic "^1.0.2" -+ function-bind "^1.1.2" -+ get-intrinsic "^1.2.1" -+ set-function-length "^1.1.1" - - callsites@^3.0.0: - version "3.1.0" -@@ -2595,20 +2501,15 @@ caniuse-api@^3.0.0: - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - --caniuse-lite@^1.0.0: -- version "1.0.30001431" -- resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz" -- integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ== -- --caniuse-lite@^1.0.30001503: -- version "1.0.30001514" -- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001514.tgz#e2a7e184a23affc9367b7c8d734e7ec4628c1309" -- integrity sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ== -+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001541: -+ version "1.0.30001564" -+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz#eaa8bbc58c0cbccdcb7b41186df39dd2ba591889" -+ integrity sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg== - - caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -- integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -+ integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - - chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" -@@ -2655,17 +2556,17 @@ chrome-trace-event@^1.0.2: - chromium-pickle-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" -- integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= -+ integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== - - ci-info@^3.2.0, ci-info@^3.8.0: -- version "3.8.0" -- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" -- integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== -+ version "3.9.0" -+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" -+ integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - - clean-css@^5.2.2: -- version "5.3.0" -- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.0.tgz#ad3d8238d5f3549e83d5f87205189494bc7cbb59" -- integrity sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ== -+ version "5.3.2" -+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" -+ integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -@@ -2703,9 +2604,9 @@ clone-deep@^4.0.1: - shallow-clone "^3.0.0" - - clone-response@^1.0.2: -- version "1.0.2" -- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" -- integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= -+ version "1.0.3" -+ resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" -+ integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -@@ -2726,7 +2627,7 @@ color-convert@^2.0.1: - color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - - color-name@~1.1.4: - version "1.1.4" -@@ -2739,9 +2640,9 @@ colord@^2.9.1, colord@^2.9.3: - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - - colorette@^2.0.10, colorette@^2.0.14: -- version "2.0.16" -- resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" -- integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== -+ version "2.0.20" -+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" -+ integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - - combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" -@@ -2783,7 +2684,7 @@ common-path-prefix@^3.0.0: - compare-version@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" -- integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA= -+ integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== - - compressible@~2.0.16: - version "2.0.18" -@@ -2808,7 +2709,7 @@ compression@^1.7.4: - concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - - config-file-ts@^0.2.4: - version "0.2.4" -@@ -2838,9 +2739,9 @@ content-disposition@0.5.4: - safe-buffer "5.2.1" - - content-type@~1.0.4: -- version "1.0.4" -- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -- integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -+ version "1.0.5" -+ resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" -+ integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - - convert-source-map@^2.0.0: - version "2.0.0" -@@ -2850,7 +2751,7 @@ convert-source-map@^2.0.0: - cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" -- integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -+ integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - - cookie@0.5.0: - version "0.5.0" -@@ -2869,17 +2770,17 @@ copy-webpack-plugin@^11.0.0: - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - --core-js-compat@^3.31.0: -- version "3.31.1" -- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" -- integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== -+core-js-compat@^3.31.0, core-js-compat@^3.33.1: -+ version "3.33.3" -+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" -+ integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== - dependencies: -- browserslist "^4.21.9" -+ browserslist "^4.22.1" - - core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -+ integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - - core-util-is@~1.0.0: - version "1.0.3" -@@ -2887,13 +2788,13 @@ core-util-is@~1.0.0: - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - - cosmiconfig@^8.2.0: -- version "8.2.0" -- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" -- integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== -+ version "8.3.6" -+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" -+ integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: -- import-fresh "^3.2.1" -+ import-fresh "^3.3.0" - js-yaml "^4.1.0" -- parse-json "^5.0.0" -+ parse-json "^5.2.0" - path-type "^4.0.0" - - crc@^3.8.0: -@@ -2924,14 +2825,14 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - which "^2.0.1" - - css-declaration-sorter@^6.3.1: -- version "6.4.0" -- resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" -- integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== -+ version "6.4.1" -+ resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" -+ integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - --css-functions-list@^3.2.0: -- version "3.2.0" -- resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.0.tgz#8290b7d064bf483f48d6559c10e98dc4d1ad19ee" -- integrity sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg== -+css-functions-list@^3.2.1: -+ version "3.2.1" -+ resolved "https://registry.yarnpkg.com/css-functions-list/-/css-functions-list-3.2.1.tgz#2eb205d8ce9f9ce74c5c1d7490b66b77c45ce3ea" -+ integrity sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ== - - css-loader@^6.8.1: - version "6.8.1" -@@ -3055,7 +2956,7 @@ cssnano@^6.0.1: - cssnano-preset-default "^6.0.1" - lilconfig "^2.1.0" - --csso@^5.0.5: -+csso@5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== -@@ -3063,14 +2964,14 @@ csso@^5.0.5: - css-tree "~2.2.0" - - csstype@^3.1.0: -- version "3.1.1" -- resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9" -- integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw== -+ version "3.1.2" -+ resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" -+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - - dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" -- integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= -+ integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -@@ -3155,6 +3056,15 @@ defer-to-connect@^2.0.0: - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -+define-data-property@^1.0.1, define-data-property@^1.1.1: -+ version "1.1.1" -+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" -+ integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== -+ dependencies: -+ get-intrinsic "^1.2.1" -+ gopd "^1.0.1" -+ has-property-descriptors "^1.0.0" -+ - define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" -@@ -3165,26 +3075,19 @@ define-lazy-prop@^3.0.0: - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" - integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== - --define-properties@^1.1.3, define-properties@^1.1.4: -- version "1.1.4" -- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" -- integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== -- dependencies: -- has-property-descriptors "^1.0.0" -- object-keys "^1.1.1" -- --define-properties@^1.2.0: -- version "1.2.0" -- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" -- integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== -+define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: -+ version "1.2.1" -+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" -+ integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: -+ define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - - delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" -- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - - depd@2.0.0: - version "2.0.0" -@@ -3194,7 +3097,7 @@ depd@2.0.0: - depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" -- integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -+ integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - - dequal@^2.0.3: - version "2.0.3" -@@ -3226,14 +3129,14 @@ dir-glob@^3.0.1: - dependencies: - path-type "^4.0.0" - --dmg-builder@24.6.4: -- version "24.6.4" -- resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.6.4.tgz#e19b8305f7e1ea0b4faaa30382c81b9d6de39863" -- integrity sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw== -+dmg-builder@24.9.1: -+ version "24.9.1" -+ resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.9.1.tgz#04bf6c0dcd235f6214511f2358a78ed2b9379421" -+ integrity sha512-huC+O6hvHd24Ubj3cy2GMiGLe2xGFKN3klqVMLAdcbB6SWMd1yPSdZvV8W1O01ICzCCRlZDHiv4VrNUgnPUfbQ== - dependencies: -- app-builder-lib "24.6.4" -- builder-util "24.5.0" -- builder-util-runtime "9.2.1" -+ app-builder-lib "24.9.1" -+ builder-util "24.8.1" -+ builder-util-runtime "9.2.3" - fs-extra "^10.1.0" - iconv-lite "^0.6.2" - js-yaml "^4.1.0" -@@ -3257,12 +3160,12 @@ dmg-license@^1.0.11: - dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" -- integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= -+ integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== - - dns-packet@^5.2.2: -- version "5.4.0" -- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.4.0.tgz#1f88477cf9f27e78a213fb6d118ae38e759a879b" -- integrity sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g== -+ version "5.6.1" -+ resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" -+ integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -@@ -3322,7 +3225,7 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - dependencies: - domelementtype "^2.2.0" - --domhandler@^5.0.1, domhandler@^5.0.2: -+domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== -@@ -3339,13 +3242,13 @@ domutils@^2.5.2, domutils@^2.8.0: - domhandler "^4.2.0" - - domutils@^3.0.1: -- version "3.0.1" -- resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" -- integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== -+ version "3.1.0" -+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" -+ integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" -- domhandler "^5.0.1" -+ domhandler "^5.0.3" - - dot-case@^3.0.4: - version "3.0.4" -@@ -3373,7 +3276,7 @@ eastasianwidth@^0.2.0: - ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" -- integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= -+ integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" -@@ -3381,7 +3284,7 @@ ecc-jsbn@~0.1.1: - ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -- integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -+ integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - - ejs@^3.1.8: - version "3.1.9" -@@ -3391,15 +3294,15 @@ ejs@^3.1.8: - jake "^10.8.5" - - electron-builder@^24.6.4: -- version "24.6.4" -- resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.6.4.tgz#c51271e49b9a02c9a3ec444f866b6008c4d98a1d" -- integrity sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA== -+ version "24.9.1" -+ resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.9.1.tgz#4aee03947963b829a7f48a850fe02c219311ef63" -+ integrity sha512-v7BuakDuY6sKMUYM8mfQGrwyjBpZ/ObaqnenU0H+igEL10nc6ht049rsCw2HghRBdEwJxGIBuzs3jbEhNaMDmg== - dependencies: -- app-builder-lib "24.6.4" -- builder-util "24.5.0" -- builder-util-runtime "9.2.1" -+ app-builder-lib "24.9.1" -+ builder-util "24.8.1" -+ builder-util-runtime "9.2.3" - chalk "^4.1.2" -- dmg-builder "24.6.4" -+ dmg-builder "24.9.1" - fs-extra "^10.1.0" - is-ci "^3.0.0" - lazy-val "^1.0.5" -@@ -3417,9 +3320,9 @@ electron-context-menu@^3.6.1: - electron-is-dev "^2.0.0" - - electron-dl@^3.2.1: -- version "3.3.1" -- resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-3.3.1.tgz#14164595bebcc636c671eb791b2a3265003f76c4" -- integrity sha512-kmcSYZyHVEHHHFKlZWW58GiCmu2NSu3Rdwnl3+/fr/ftQYHJULVf1QkrCBPFE2bp/Ly113Za7c8wJZs1nBy04A== -+ version "3.5.1" -+ resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-3.5.1.tgz#781287c0c8537e707f034eb3415f4adaded8a7de" -+ integrity sha512-5Yb9s/iPVJ5mW5x3j6XkKxt7WEqREr/AhYxZmtEfW1ffQHs1+aGoiQ2fXCAU6UIXMnWog2MXK82vrxJsjA3nbQ== - dependencies: - ext-name "^5.0.0" - pupa "^2.0.1" -@@ -3430,37 +3333,37 @@ electron-is-dev@^2.0.0: - resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-2.0.0.tgz#833487a069b8dad21425c67a19847d9064ab19bd" - integrity sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA== - --electron-publish@24.5.0: -- version "24.5.0" -- resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.5.0.tgz#492a4d7caa232e88ee3c18f5c3b4dc637e5e1b3a" -- integrity sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA== -+electron-publish@24.8.1: -+ version "24.8.1" -+ resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.8.1.tgz#4216740372bf4297a429543402a1a15ce8c3560b" -+ integrity sha512-IFNXkdxMVzUdweoLJNXSupXkqnvgbrn3J4vognuOY06LaS/m0xvfFYIf+o1CM8if6DuWYWoQFKPcWZt/FUjZPw== - dependencies: - "@types/fs-extra" "^9.0.11" -- builder-util "24.5.0" -- builder-util-runtime "9.2.1" -+ builder-util "24.8.1" -+ builder-util-runtime "9.2.3" - chalk "^4.1.2" - fs-extra "^10.1.0" - lazy-val "^1.0.5" - mime "^2.5.2" - --electron-to-chromium@^1.4.431: -- version "1.4.454" -- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.454.tgz#774dc7cb5e58576d0125939ec34a4182f3ccc87d" -- integrity sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ== -+electron-to-chromium@^1.4.535: -+ version "1.4.594" -+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.594.tgz#f69f207fba80735a44a988df42f3f439115d0515" -+ integrity sha512-xT1HVAu5xFn7bDfkjGQi9dNpMqGchUkebwf1GL7cZN32NSwwlHRPMSDJ1KN6HkS0bWUtndbSQZqvpQftKG2uFQ== - --electron@^22.3.25: -- version "22.3.25" -- resolved "https://registry.yarnpkg.com/electron/-/electron-22.3.25.tgz#a9a70b63a6712c658cd7fab343129b2a78450f80" -- integrity sha512-AjrP7bebMs/IPsgmyowptbA7jycTkrJC7jLZTb5JoH30PkBC6pZx/7XQ0aDok82SsmSiF4UJDOg+HoLrEBiqmg== -+electron@^27.0.0: -+ version "27.1.2" -+ resolved "https://registry.yarnpkg.com/electron/-/electron-27.1.2.tgz#d3074c91cce94c1e19b5904b1cdf78c830f2558d" -+ integrity sha512-Dy6BUuGLiIJv+zfsXwr78TV2TNppi24rXF4PIIS+OjDblEKdkI9r1iM8JUd3/x3sbGUy5mdLMSPhvmu//IhkgA== - dependencies: - "@electron/get" "^2.0.0" -- "@types/node" "^16.11.26" -+ "@types/node" "^18.11.18" - extract-zip "^2.0.1" - - emoji-regex@^10.0.0: -- version "10.2.1" -- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f" -- integrity sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA== -+ version "10.3.0" -+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" -+ integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== - - emoji-regex@^8.0.0: - version "8.0.0" -@@ -3480,7 +3383,7 @@ emojis-list@^3.0.0: - encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" -- integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -+ integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - - end-of-stream@^1.1.0: - version "1.4.4" -@@ -3503,9 +3406,9 @@ entities@^2.0.0: - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - - entities@^4.2.0: -- version "4.4.0" -- resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" -- integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== -+ version "4.5.0" -+ resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" -+ integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - - env-paths@^2.2.0: - version "2.2.1" -@@ -3513,9 +3416,9 @@ env-paths@^2.2.0: - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - - envinfo@^7.7.3: -- version "7.8.1" -- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" -- integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== -+ version "7.11.0" -+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" -+ integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== - - err-code@^2.0.2: - version "2.0.3" -@@ -3529,124 +3432,26 @@ error-ex@^1.3.1: - dependencies: - is-arrayish "^0.2.1" - --es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: -- version "1.20.0" -- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.0.tgz#b2d526489cceca004588296334726329e0a6bfb6" -- integrity sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA== -- dependencies: -- call-bind "^1.0.2" -- es-to-primitive "^1.2.1" -- function-bind "^1.1.1" -- function.prototype.name "^1.1.5" -- get-intrinsic "^1.1.1" -- get-symbol-description "^1.0.0" -- has "^1.0.3" -- has-property-descriptors "^1.0.0" -- has-symbols "^1.0.3" -- internal-slot "^1.0.3" -- is-callable "^1.2.4" -- is-negative-zero "^2.0.2" -- is-regex "^1.1.4" -- is-shared-array-buffer "^1.0.2" -- is-string "^1.0.7" -- is-weakref "^1.0.2" -- object-inspect "^1.12.0" -- object-keys "^1.1.1" -- object.assign "^4.1.2" -- regexp.prototype.flags "^1.4.1" -- string.prototype.trimend "^1.0.5" -- string.prototype.trimstart "^1.0.5" -- unbox-primitive "^1.0.2" -- --es-abstract@^1.20.0: -- version "1.20.3" -- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.3.tgz#90b143ff7aedc8b3d189bcfac7f1e3e3f81e9da1" -- integrity sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw== -- dependencies: -- call-bind "^1.0.2" -- es-to-primitive "^1.2.1" -- function-bind "^1.1.1" -- function.prototype.name "^1.1.5" -- get-intrinsic "^1.1.3" -- get-symbol-description "^1.0.0" -- has "^1.0.3" -- has-property-descriptors "^1.0.0" -- has-symbols "^1.0.3" -- internal-slot "^1.0.3" -- is-callable "^1.2.6" -- is-negative-zero "^2.0.2" -- is-regex "^1.1.4" -- is-shared-array-buffer "^1.0.2" -- is-string "^1.0.7" -- is-weakref "^1.0.2" -- object-inspect "^1.12.2" -- object-keys "^1.1.1" -- object.assign "^4.1.4" -- regexp.prototype.flags "^1.4.3" -- safe-regex-test "^1.0.0" -- string.prototype.trimend "^1.0.5" -- string.prototype.trimstart "^1.0.5" -- unbox-primitive "^1.0.2" -- --es-abstract@^1.20.4: -- version "1.21.1" -- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.1.tgz#e6105a099967c08377830a0c9cb589d570dd86c6" -- integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== -- dependencies: -- available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -- es-set-tostringtag "^2.0.1" -- es-to-primitive "^1.2.1" -- function-bind "^1.1.1" -- function.prototype.name "^1.1.5" -- get-intrinsic "^1.1.3" -- get-symbol-description "^1.0.0" -- globalthis "^1.0.3" -- gopd "^1.0.1" -- has "^1.0.3" -- has-property-descriptors "^1.0.0" -- has-proto "^1.0.1" -- has-symbols "^1.0.3" -- internal-slot "^1.0.4" -- is-array-buffer "^3.0.1" -- is-callable "^1.2.7" -- is-negative-zero "^2.0.2" -- is-regex "^1.1.4" -- is-shared-array-buffer "^1.0.2" -- is-string "^1.0.7" -- is-typed-array "^1.1.10" -- is-weakref "^1.0.2" -- object-inspect "^1.12.2" -- object-keys "^1.1.1" -- object.assign "^4.1.4" -- regexp.prototype.flags "^1.4.3" -- safe-regex-test "^1.0.0" -- string.prototype.trimend "^1.0.6" -- string.prototype.trimstart "^1.0.6" -- typed-array-length "^1.0.4" -- unbox-primitive "^1.0.2" -- which-typed-array "^1.1.9" -- --es-abstract@^1.21.2: -- version "1.22.1" -- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc" -- integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw== -+es-abstract@^1.22.1: -+ version "1.22.3" -+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" -+ integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" -- arraybuffer.prototype.slice "^1.0.1" -+ arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -+ call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" -- function.prototype.name "^1.1.5" -- get-intrinsic "^1.2.1" -+ function.prototype.name "^1.1.6" -+ get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" -- has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" -+ hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" -@@ -3654,44 +3459,44 @@ es-abstract@^1.21.2: - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" -- is-typed-array "^1.1.10" -+ is-typed-array "^1.1.12" - is-weakref "^1.0.2" -- object-inspect "^1.12.3" -+ object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.4" -- regexp.prototype.flags "^1.5.0" -- safe-array-concat "^1.0.0" -+ regexp.prototype.flags "^1.5.1" -+ safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" -- string.prototype.trim "^1.2.7" -- string.prototype.trimend "^1.0.6" -- string.prototype.trimstart "^1.0.6" -+ string.prototype.trim "^1.2.8" -+ string.prototype.trimend "^1.0.7" -+ string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" -- which-typed-array "^1.1.10" -+ which-typed-array "^1.1.13" - - es-module-lexer@^1.2.1: -- version "1.2.1" -- resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.2.1.tgz#ba303831f63e6a394983fde2f97ad77b22324527" -- integrity sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg== -+ version "1.4.1" -+ resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" -+ integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== - - es-set-tostringtag@^2.0.1: -- version "2.0.1" -- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" -- integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== -+ version "2.0.2" -+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" -+ integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: -- get-intrinsic "^1.1.3" -- has "^1.0.3" -+ get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" -+ hasown "^2.0.0" - - es-shim-unscopables@^1.0.0: -- version "1.0.0" -- resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" -- integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== -+ version "1.0.2" -+ resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" -+ integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: -- has "^1.0.3" -+ hasown "^2.0.0" - - es-to-primitive@^1.2.1: - version "1.2.1" -@@ -3720,18 +3525,23 @@ escape-goat@^2.0.0: - escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -- integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -+ integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - - escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - - escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -+eslint-compat-utils@^0.1.0, eslint-compat-utils@^0.1.2: -+ version "0.1.2" -+ resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" -+ integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== -+ - eslint-config-prettier@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" -@@ -3742,14 +3552,14 @@ eslint-config-standard@^17.1.0: - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" - integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== - --eslint-import-resolver-node@^0.3.7: -- version "0.3.7" -- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" -- integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== -+eslint-import-resolver-node@^0.3.9: -+ version "0.3.9" -+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" -+ integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" -- is-core-module "^2.11.0" -- resolve "^1.22.1" -+ is-core-module "^2.13.0" -+ resolve "^1.22.4" - - eslint-module-utils@^2.8.0: - version "2.8.0" -@@ -3759,64 +3569,67 @@ eslint-module-utils@^2.8.0: - debug "^3.2.7" - - eslint-plugin-es-x@^7.1.0: -- version "7.1.0" -- resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.1.0.tgz#f0d5421e658cca95c1cfb2355831851bdc83322d" -- integrity sha512-AhiaF31syh4CCQ+C5ccJA0VG6+kJK8+5mXKKE7Qs1xcPRg02CDPOj3mWlQxuWS/AYtg7kxrDNgW9YW3vc0Q+Mw== -+ version "7.4.0" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.4.0.tgz#ae3132b5502c28821e3e6eb80314123a4143a87c" -+ integrity sha512-WJa3RhYzBtl8I37ebY9p76s61UhZyi4KaFOnX2A5r32RPazkXj5yoT6PGnD02dhwzEUj0KwsUdqfKDd/OuvGsw== - dependencies: - "@eslint-community/eslint-utils" "^4.1.2" -- "@eslint-community/regexpp" "^4.5.0" -+ "@eslint-community/regexpp" "^4.6.0" -+ eslint-compat-utils "^0.1.2" - - eslint-plugin-import@^2.28.1: -- version "2.28.1" -- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz#63b8b5b3c409bfc75ebaf8fb206b07ab435482c4" -- integrity sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A== -+ version "2.29.0" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155" -+ integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg== - dependencies: -- array-includes "^3.1.6" -- array.prototype.findlastindex "^1.2.2" -- array.prototype.flat "^1.3.1" -- array.prototype.flatmap "^1.3.1" -+ array-includes "^3.1.7" -+ array.prototype.findlastindex "^1.2.3" -+ array.prototype.flat "^1.3.2" -+ array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" -- eslint-import-resolver-node "^0.3.7" -+ eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" -- has "^1.0.3" -- is-core-module "^2.13.0" -+ hasown "^2.0.0" -+ is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" -- object.fromentries "^2.0.6" -- object.groupby "^1.0.0" -- object.values "^1.1.6" -+ object.fromentries "^2.0.7" -+ object.groupby "^1.0.1" -+ object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.14.2" - - eslint-plugin-jsonc@^2.9.0: -- version "2.9.0" -- resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.9.0.tgz#df3bff1339e10bdef72aafef3b2c132a1a08c23f" -- integrity sha512-RK+LeONVukbLwT2+t7/OY54NJRccTXh/QbnXzPuTLpFMVZhPuq1C9E07+qWenGx7rrQl0kAalAWl7EmB+RjpGA== -+ version "2.10.0" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.10.0.tgz#4286fd49a79ee3dd86f9c6c61b6f3c65f30b954f" -+ integrity sha512-9d//o6Jyh4s1RxC9fNSt1+MMaFN2ruFdXPG9XZcb/mR2KkfjADYiNL/hbU6W0Cyxfg3tS/XSFuhl5LgtMD8hmw== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" -+ eslint-compat-utils "^0.1.2" - jsonc-eslint-parser "^2.0.4" - natural-compare "^1.4.0" - - eslint-plugin-n@^16.1.0: -- version "16.1.0" -- resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.1.0.tgz#73d24fe3e37d04519c1f9230bdbd3aa567c66799" -- integrity sha512-3wv/TooBst0N4ND+pnvffHuz9gNPmk/NkLwAxOt2JykTl/hcuECe6yhTtLJcZjIxtZwN+GX92ACp/QTLpHA3Hg== -+ version "16.3.1" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz#6cd377d1349fed10854b6535392e91fb4123193b" -+ integrity sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - builtins "^5.0.1" - eslint-plugin-es-x "^7.1.0" - get-tsconfig "^4.7.0" - ignore "^5.2.4" -+ is-builtin-module "^3.2.1" - is-core-module "^2.12.1" - minimatch "^3.1.2" - resolve "^1.22.2" - semver "^7.5.3" - - eslint-plugin-prettier@^5.0.0: -- version "5.0.0" -- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" -- integrity sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w== -+ version "5.0.1" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515" -+ integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg== - dependencies: - prettier-linter-helpers "^1.0.0" - synckit "^0.8.5" -@@ -3848,9 +3661,9 @@ eslint-plugin-unicorn@^48.0.1: - strip-indent "^3.0.0" - - eslint-plugin-vue@^9.17.0: -- version "9.17.0" -- resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz#4501547373f246547083482838b4c8f4b28e5932" -- integrity sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ== -+ version "9.18.1" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz#73cf29df7450ce5913296465f8d1dc545344920c" -+ integrity sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - natural-compare "^1.4.0" -@@ -3870,11 +3683,12 @@ eslint-plugin-vuejs-accessibility@^2.2.0: - vue-eslint-parser "^9.0.1" - - eslint-plugin-yml@^1.9.0: -- version "1.9.0" -- resolved "https://registry.yarnpkg.com/eslint-plugin-yml/-/eslint-plugin-yml-1.9.0.tgz#4daa4137a38fa26e38e28e847c490991326c9010" -- integrity sha512-ayuC57WyVQ5+QZ02y62GiB//5+zsiyzUGxUX/mrhLni+jfsKA4KoITjkbR65iUdjjhWpyTJHPcAIFLKQIOwgsw== -+ version "1.10.0" -+ resolved "https://registry.yarnpkg.com/eslint-plugin-yml/-/eslint-plugin-yml-1.10.0.tgz#0c750253825ff352fb11b824d80864d8a2df3408" -+ integrity sha512-53SUwuNDna97lVk38hL/5++WXDuugPM9SUQ1T645R0EHMRCdBIIxGye/oOX2qO3FQ7aImxaUZJU/ju+NMUBrLQ== - dependencies: - debug "^4.3.2" -+ eslint-compat-utils "^0.1.0" - lodash "^4.17.21" - natural-compare "^1.4.0" - yaml-eslint-parser "^1.2.1" -@@ -3906,17 +3720,18 @@ eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4 - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - - eslint@^8.50.0: -- version "8.50.0" -- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2" -- integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg== -+ version "8.54.0" -+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" -+ integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" -- "@eslint/eslintrc" "^2.1.2" -- "@eslint/js" "8.50.0" -- "@humanwhocodes/config-array" "^0.11.11" -+ "@eslint/eslintrc" "^2.1.3" -+ "@eslint/js" "8.54.0" -+ "@humanwhocodes/config-array" "^0.11.13" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" -+ "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" -@@ -3989,7 +3804,7 @@ esutils@^2.0.2: - etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" -- integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -+ integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - - eventemitter3@^4.0.0: - version "4.0.7" -@@ -4032,13 +3847,13 @@ execa@^7.1.1: - strip-final-newline "^3.0.0" - - express@^4.17.3: -- version "4.18.1" -- resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" -- integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== -+ version "4.18.2" -+ resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" -+ integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" -- body-parser "1.20.0" -+ body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" -@@ -4057,7 +3872,7 @@ express@^4.17.3: - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" -- qs "6.10.3" -+ qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" -@@ -4102,7 +3917,7 @@ extract-zip@^2.0.1: - extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" -- integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -+ integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - - extsprintf@^1.2.0: - version "1.4.1" -@@ -4115,14 +3930,14 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - - fast-diff@^1.1.2: -- version "1.2.0" -- resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" -- integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -+ version "1.3.0" -+ resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" -+ integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - - fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: -- version "3.3.1" -- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" -- integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== -+ version "3.3.2" -+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" -+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" -@@ -4138,7 +3953,7 @@ fast-json-stable-stringify@^2.0.0: - fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -- integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - - fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: - version "1.0.16" -@@ -4146,9 +3961,9 @@ fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - - fastq@^1.6.0: -- version "1.13.0" -- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" -- integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== -+ version "1.15.0" -+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" -+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -@@ -4162,7 +3977,7 @@ faye-websocket@^0.11.3: - fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" -- integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= -+ integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -@@ -4173,7 +3988,14 @@ file-entry-cache@^6.0.1: - dependencies: - flat-cache "^3.0.4" - --filelist@^1.0.1: -+file-entry-cache@^7.0.0: -+ version "7.0.2" -+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-7.0.2.tgz#2d61bb70ba89b9548e3035b7c9173fe91deafff0" -+ integrity sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g== -+ dependencies: -+ flat-cache "^3.2.0" -+ -+filelist@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" - integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== -@@ -4232,23 +4054,29 @@ find-up@^6.3.0: - locate-path "^7.1.0" - path-exists "^5.0.0" - --flat-cache@^3.0.4: -- version "3.0.4" -- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" -- integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== -+flat-cache@^3.0.4, flat-cache@^3.2.0: -+ version "3.2.0" -+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" -+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: -- flatted "^3.1.0" -+ flatted "^3.2.9" -+ keyv "^4.5.3" - rimraf "^3.0.2" - --flatted@^3.1.0: -- version "3.2.5" -- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" -- integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== -+flat@^5.0.2: -+ version "5.0.2" -+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" -+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -+ -+flatted@^3.2.9: -+ version "3.2.9" -+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" -+ integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - - follow-redirects@^1.0.0: -- version "1.15.0" -- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" -- integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== -+ version "1.15.3" -+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" -+ integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== - - for-each@^0.3.3: - version "0.3.3" -@@ -4268,7 +4096,7 @@ foreground-child@^3.1.0: - forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -- integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -+ integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - - form-data@^4.0.0: - version "4.0.0" -@@ -4296,7 +4124,7 @@ forwarded@0.2.0: - fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -- integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -+ integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - - fs-extra@^10.0.0, fs-extra@^10.1.0: - version "10.1.0" -@@ -4333,37 +4161,37 @@ fs-minipass@^2.0.0: - dependencies: - minipass "^3.0.0" - --fs-monkey@1.0.3: -- version "1.0.3" -- resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" -- integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== -+fs-monkey@^1.0.4: -+ version "1.0.5" -+ resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" -+ integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - - fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - - fsevents@~2.3.2: -- version "2.3.2" -- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" -- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -+ version "2.3.3" -+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" -+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - --function-bind@^1.1.1: -- version "1.1.1" -- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" -- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -+function-bind@^1.1.2: -+ version "1.1.2" -+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" -+ integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - --function.prototype.name@^1.1.5: -- version "1.1.5" -- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" -- integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== -+function.prototype.name@^1.1.6: -+ version "1.1.6" -+ resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" -+ integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.3" -- es-abstract "^1.19.0" -- functions-have-names "^1.2.2" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" -+ functions-have-names "^1.2.3" - --functions-have-names@^1.2.2, functions-have-names@^1.2.3: -+functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -@@ -4378,33 +4206,15 @@ get-caller-file@^2.0.5: - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - --get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: -- version "1.1.1" -- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" -- integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== -+get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: -+ version "1.2.2" -+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" -+ integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: -- function-bind "^1.1.1" -- has "^1.0.3" -- has-symbols "^1.0.1" -- --get-intrinsic@^1.1.3: -- version "1.1.3" -- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" -- integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== -- dependencies: -- function-bind "^1.1.1" -- has "^1.0.3" -- has-symbols "^1.0.3" -- --get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: -- version "1.2.1" -- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" -- integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== -- dependencies: -- function-bind "^1.1.1" -- has "^1.0.3" -+ function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" -+ hasown "^2.0.0" - - get-stream@^5.1.0: - version "5.2.0" -@@ -4427,16 +4237,16 @@ get-symbol-description@^1.0.0: - get-intrinsic "^1.1.1" - - get-tsconfig@^4.7.0: -- version "4.7.0" -- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" -- integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== -+ version "4.7.2" -+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" -+ integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== - dependencies: - resolve-pkg-maps "^1.0.0" - - getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" -- integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= -+ integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -@@ -4510,7 +4320,7 @@ global-prefix@^3.0.0: - kind-of "^6.0.2" - which "^1.3.1" - --global@^4.3.1, global@^4.3.2, global@^4.4.0, global@~4.4.0: -+global@4.4.0, global@^4.3.1, global@^4.3.2, global@^4.4.0, global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== -@@ -4524,9 +4334,9 @@ globals@^11.1.0: - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - - globals@^13.19.0: -- version "13.19.0" -- resolved "https://registry.yarnpkg.com/globals/-/globals-13.19.0.tgz#7a42de8e6ad4f7242fbcca27ea5b23aca367b5c8" -- integrity sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ== -+ version "13.23.0" -+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" -+ integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== - dependencies: - type-fest "^0.20.2" - -@@ -4550,13 +4360,13 @@ globby@^11.1.0: - slash "^3.0.0" - - globby@^13.1.1: -- version "13.1.2" -- resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" -- integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== -+ version "13.2.2" -+ resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" -+ integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" -- fast-glob "^3.2.11" -- ignore "^5.2.0" -+ fast-glob "^3.3.0" -+ ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -@@ -4573,9 +4383,9 @@ gopd@^1.0.1: - get-intrinsic "^1.1.3" - - got@^11.8.5: -- version "11.8.5" -- resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" -- integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== -+ version "11.8.6" -+ resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" -+ integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" -@@ -4590,9 +4400,9 @@ got@^11.8.5: - responselike "^2.0.0" - - graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: -- version "4.2.10" -- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" -- integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -+ version "4.2.11" -+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" -+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - - graphemer@^1.4.0: - version "1.4.0" -@@ -4607,7 +4417,7 @@ handle-thing@^2.0.0: - har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -- integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -+ integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - - har-validator@~5.1.3: - version "5.1.5" -@@ -4630,7 +4440,7 @@ has-bigints@^1.0.1, has-bigints@^1.0.2: - has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" -- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - - has-flag@^4.0.0: - version "4.0.0" -@@ -4638,18 +4448,18 @@ has-flag@^4.0.0: - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - - has-property-descriptors@^1.0.0: -- version "1.0.0" -- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" -- integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== -+ version "1.0.1" -+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" -+ integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: -- get-intrinsic "^1.1.1" -+ get-intrinsic "^1.2.2" - - has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - --has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: -+has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -@@ -4661,17 +4471,17 @@ has-tostringtag@^1.0.0: - dependencies: - has-symbols "^1.0.2" - --has@^1.0.3: -- version "1.0.3" -- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" -- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== -- dependencies: -- function-bind "^1.1.1" -- - hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" -- integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= -+ integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== -+ -+hasown@^2.0.0: -+ version "2.0.0" -+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" -+ integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== -+ dependencies: -+ function-bind "^1.1.2" - - he@^1.2.0: - version "1.2.0" -@@ -4693,7 +4503,7 @@ hosted-git-info@^4.0.1, hosted-git-info@^4.1.0: - hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" -- integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= -+ integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" -@@ -4701,9 +4511,9 @@ hpack.js@^2.1.6: - wbuf "^1.1.0" - - html-entities@^2.3.2: -- version "2.3.3" -- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" -- integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== -+ version "2.4.0" -+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" -+ integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - - html-minifier-terser@^6.0.2: - version "6.1.0" -@@ -4752,7 +4562,7 @@ http-cache-semantics@^4.0.0: - http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" -- integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -+ integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - - http-errors@2.0.0: - version "2.0.0" -@@ -4768,7 +4578,7 @@ http-errors@2.0.0: - http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" -- integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= -+ integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" -@@ -4776,9 +4586,9 @@ http-errors@~1.6.2: - statuses ">= 1.4.0 < 2" - - http-parser-js@>=0.5.1: -- version "0.5.6" -- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" -- integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== -+ version "0.5.8" -+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" -+ integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - - http-proxy-agent@^5.0.0: - version "5.0.0" -@@ -4812,7 +4622,7 @@ http-proxy@^1.18.1: - http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" -- integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= -+ integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" -@@ -4877,21 +4687,21 @@ ieee754@^1.1.13: - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - - ignore@^5.2.0, ignore@^5.2.4: -- version "5.2.4" -- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" -- integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -+ version "5.3.0" -+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" -+ integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== - - immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" -- integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= -+ integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - - immutable@^4.0.0: -- version "4.0.0" -- resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" -- integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== -+ version "4.3.4" -+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f" -+ integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== - --import-fresh@^3.2.1: -+import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== -@@ -4915,7 +4725,7 @@ import-local@^3.0.2: - imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -- integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - - indent-string@^4.0.0: - version "4.0.0" -@@ -4930,12 +4740,12 @@ indent-string@^5.0.0: - individual@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97" -- integrity sha1-gzsJfa0jKU52EXqY+zjg2a1hu5c= -+ integrity sha512-pWt8hBCqJsUWI/HtcfWod7+N9SgAqyPEaF7JQjwzjn5vGrpg6aQ5qeAFQ7dx//UH4J1O+7xqew+gCeeFt6xN/g== - - inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" -- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= -+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" -@@ -4948,38 +4758,20 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -- integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -+ integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - - ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - --internal-slot@^1.0.3: -- version "1.0.3" -- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" -- integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== -- dependencies: -- get-intrinsic "^1.1.0" -- has "^1.0.3" -- side-channel "^1.0.4" -- --internal-slot@^1.0.4: -- version "1.0.4" -- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.4.tgz#8551e7baf74a7a6ba5f749cfb16aa60722f0d6f3" -- integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== -- dependencies: -- get-intrinsic "^1.1.3" -- has "^1.0.3" -- side-channel "^1.0.4" -- - internal-slot@^1.0.5: -- version "1.0.5" -- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" -- integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== -+ version "1.0.6" -+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" -+ integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: -- get-intrinsic "^1.2.0" -- has "^1.0.3" -+ get-intrinsic "^1.2.2" -+ hasown "^2.0.0" - side-channel "^1.0.4" - - interpret@^3.1.1: -@@ -4993,9 +4785,9 @@ ipaddr.js@1.9.1: - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - - ipaddr.js@^2.0.1: -- version "2.0.1" -- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" -- integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== -+ version "2.1.0" -+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" -+ integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - - is-arguments@^1.0.4: - version "1.1.1" -@@ -5005,16 +4797,7 @@ is-arguments@^1.0.4: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - --is-array-buffer@^3.0.1: -- version "3.0.1" -- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.1.tgz#deb1db4fcae48308d54ef2442706c0393997052a" -- integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== -- dependencies: -- call-bind "^1.0.2" -- get-intrinsic "^1.1.3" -- is-typed-array "^1.1.10" -- --is-array-buffer@^3.0.2: -+is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== -@@ -5026,7 +4809,7 @@ is-array-buffer@^3.0.2: - is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" -- integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -+ integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - - is-bigint@^1.0.1: - version "1.0.4" -@@ -5057,16 +4840,11 @@ is-builtin-module@^3.2.1: - dependencies: - builtin-modules "^3.3.0" - --is-callable@^1.1.3, is-callable@^1.2.6, is-callable@^1.2.7: -+is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - --is-callable@^1.1.4, is-callable@^1.2.4: -- version "1.2.4" -- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" -- integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== -- - is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" -@@ -5074,12 +4852,12 @@ is-ci@^3.0.0: - dependencies: - ci-info "^3.2.0" - --is-core-module@^2.11.0, is-core-module@^2.12.0, is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.5.0: -- version "2.13.0" -- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" -- integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== -+is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1, is-core-module@^2.5.0: -+ version "2.13.1" -+ resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" -+ integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: -- has "^1.0.3" -+ hasown "^2.0.0" - - is-date-object@^1.0.1: - version "1.0.5" -@@ -5101,7 +4879,7 @@ is-docker@^3.0.0: - is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" -- integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - - is-fullwidth-code-point@^3.0.0: - version "3.0.0" -@@ -5159,7 +4937,7 @@ is-path-inside@^3.0.3: - is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" -- integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -+ integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== - - is-plain-obj@^3.0.0: - version "3.0.0" -@@ -5217,32 +4995,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: - dependencies: - has-symbols "^1.0.2" - --is-typed-array@^1.1.10: -- version "1.1.10" -- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" -- integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== -+is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: -+ version "1.1.12" -+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" -+ integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: -- available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -- for-each "^0.3.3" -- gopd "^1.0.1" -- has-tostringtag "^1.0.0" -- --is-typed-array@^1.1.3, is-typed-array@^1.1.9: -- version "1.1.9" -- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.9.tgz#246d77d2871e7d9f5aeb1d54b9f52c71329ece67" -- integrity sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A== -- dependencies: -- available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -- es-abstract "^1.20.0" -- for-each "^0.3.3" -- has-tostringtag "^1.0.0" -+ which-typed-array "^1.1.11" - - is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -- integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -+ integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - - is-weakref@^1.0.2: - version "1.0.2" -@@ -5266,7 +5029,7 @@ isarray@^2.0.5: - isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - - isbinaryfile@^4.0.8: - version "4.0.10" -@@ -5281,17 +5044,17 @@ isbinaryfile@^5.0.0: - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" -- integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - - isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" -- integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -+ integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - - isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -- integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -+ integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - - jackspeak@^2.3.5: - version "2.3.6" -@@ -5303,21 +5066,21 @@ jackspeak@^2.3.5: - "@pkgjs/parseargs" "^0.11.0" - - jake@^10.8.5: -- version "10.8.5" -- resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" -- integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== -+ version "10.8.7" -+ resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" -+ integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== - dependencies: - async "^3.2.3" - chalk "^4.0.2" -- filelist "^1.0.1" -- minimatch "^3.0.4" -+ filelist "^1.0.4" -+ minimatch "^3.1.2" - --jest-util@^29.5.0: -- version "29.5.0" -- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" -- integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== -+jest-util@^29.7.0: -+ version "29.7.0" -+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" -+ integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: -- "@jest/types" "^29.5.0" -+ "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" -@@ -5334,12 +5097,12 @@ jest-worker@^27.4.5: - supports-color "^8.0.0" - - jest-worker@^29.4.3: -- version "29.5.0" -- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" -- integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== -+ version "29.7.0" -+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" -+ integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" -- jest-util "^29.5.0" -+ jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -@@ -5365,7 +5128,7 @@ js-yaml@^4.1.0: - jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -- integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -+ integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - - jsesc@^2.5.1: - version "2.5.2" -@@ -5380,7 +5143,7 @@ jsesc@^3.0.2: - jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -- integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -+ integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - - json-buffer@3.0.1: - version "3.0.1" -@@ -5422,12 +5185,12 @@ json-schema@0.4.0: - json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" -- integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -+ integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - - json5@^1.0.1, json5@^1.0.2: - version "1.0.2" -@@ -5442,9 +5205,9 @@ json5@^2.2.0, json5@^2.2.3: - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - - jsonc-eslint-parser@^2.0.4: -- version "2.1.0" -- resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.1.0.tgz#4c126b530aa583d85308d0b3041ff81ce402bbb2" -- integrity sha512-qCRJWlbP2v6HbmKW7R3lFbeiVWHo+oMJ0j+MizwvauqnCV/EvtAeEeuCgoc/ErtsuoKgYB8U4Ih8AxJbXoE6/g== -+ version "2.4.0" -+ resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" -+ integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== - dependencies: - acorn "^8.5.0" - eslint-visitor-keys "^3.0.0" -@@ -5454,7 +5217,7 @@ jsonc-eslint-parser@^2.0.4: - jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" -- integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= -+ integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -@@ -5477,15 +5240,20 @@ jsprim@^1.2.2: - json-schema "0.4.0" - verror "1.10.0" - -+keycode@2.2.0: -+ version "2.2.0" -+ resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.0.tgz#3d0af56dc7b8b8e5cba8d0a97f107204eec22b04" -+ integrity sha512-ps3I9jAdNtRpJrbBvQjpzyFbss/skHqzS+eu4RxKLaEAtFqkjZaB6TZMSivPbLxf4K7VI4SjR0P5mRCX5+Q25A== -+ - keycode@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff" - integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg== - --keyv@^4.0.0: -- version "4.5.2" -- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" -- integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== -+keyv@^4.0.0, keyv@^4.5.3: -+ version "4.5.4" -+ resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" -+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -@@ -5494,77 +5262,77 @@ kind-of@^6.0.2, kind-of@^6.0.3: - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - --known-css-properties@^0.28.0: -- version "0.28.0" -- resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.28.0.tgz#8a8be010f368b3036fe6ab0ef4bbbed972bd6274" -- integrity sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ== -+known-css-properties@^0.29.0: -+ version "0.29.0" -+ resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.29.0.tgz#e8ba024fb03886f23cb882e806929f32d814158f" -+ integrity sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ== - - launch-editor@^2.6.0: -- version "2.6.0" -- resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" -- integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== -+ version "2.6.1" -+ resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" -+ integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== - dependencies: - picocolors "^1.0.0" -- shell-quote "^1.7.3" -+ shell-quote "^1.8.1" - - lazy-val@^1.0.4, lazy-val@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" - integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== - --lefthook-darwin-arm64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.5.0.tgz#f439bc8539993fdf188f3768d854205cb5b8c376" -- integrity sha512-URLZLiaIbwCuN9RD9r99udSvLPbsbGpQ4lFEVuWTkdI5f9pKFBv7Kw5wsCRiQk2vYQFP/vINMXQKO4g2NmToSw== -+lefthook-darwin-arm64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.5.3.tgz#a3d0150e988fc67b6dc6f0ef4d2eeb27fa9e730e" -+ integrity sha512-MZhbxsm42LNSzGn9tC7ZkEelr+JYpwT83Uozxk1XKyYk9cl65ZjfFYm6LPSEoYl+LMp5hTLR2Cn6f3W+egjwew== - --lefthook-darwin-x64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.5.0.tgz#e6aac95c1625038c5bc117f40e4ed2d4fe564a23" -- integrity sha512-IrpnZ7Gw4DGNQhE2tWim2v8XFBO5+8CtaOsI+dvXnDyE8OSN2iyojByuqoA4vsLfrYjoG7AykFzoWp6FZZsRng== -+lefthook-darwin-x64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-darwin-x64/-/lefthook-darwin-x64-1.5.3.tgz#6a60de7ec11e9463fd69d10cdef6ab70631fb65a" -+ integrity sha512-0gaJe6zazaDovIzguVvvULM/ORnhOvC10QxY9fRslCZQO9wZpHSyYskqbW2+KWPbheGcA+MLn2PmBXbcQ4+ckA== - --lefthook-freebsd-arm64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.5.0.tgz#e92fb10de53869ae781352e7b924fb4353bc00c7" -- integrity sha512-sVVABorbSa+KWqT/8Sb3PlIlzeO8BQJxBcECRPwjCNd2o34ocVpeZCmRFs5jn3aF+QzUqCSAFyH6XOTvw+G74A== -+lefthook-freebsd-arm64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.5.3.tgz#dfbb97151d42b06d5dab6962dfbb91fbb8ad9ff6" -+ integrity sha512-TgNW9Rc7W6B7WEkquUGaKR6mdgYmjAvf8Wg9cRLWmXG9yzZjwBlDSzJMNwaLFIWakkkLZ/nODbhPldR4+mOyBA== - --lefthook-freebsd-x64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.5.0.tgz#418b37b38a6b05e84008057f6067a2fc2f5118d6" -- integrity sha512-cHnpP67BWYDTnx6o4eq52JWYuV4dbpGRJeKH3FItnSpiwbmWJlnXgOI5PVfD9uxB8B6KQ4iaaff8zh2pdUaSPA== -+lefthook-freebsd-x64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.5.3.tgz#5a6ba8396b63705d2832c2e7e93565b8101a5d67" -+ integrity sha512-ihrHaZ3QEBP6rQhvIgNElZcoqHXjAIArak86KIQydtCHpPU5ZqcQO47/NLyWfbG1E0GC0MdC3dWL4gmo//e3Gg== - --lefthook-linux-arm64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.5.0.tgz#276bd2e1f4e50a1dec1347c2f5ba98f201a7f0b5" -- integrity sha512-gPB+Tta9xt3dDcB539uSHvKAE3bcxmWbkkQpW3NGlKJOoSLbtHEFd9ZJlNXTJryNxf3zR0uPZj3z4YvfsQUeug== -+lefthook-linux-arm64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-linux-arm64/-/lefthook-linux-arm64-1.5.3.tgz#d3cfb6a2cedf41c083d28953a7a02ac085c39e8a" -+ integrity sha512-Nwj6V8aQjROrngoEByfzeYmIYcZb0z7kwvh6rH3zyy/VtHhqXgaoqelBfHrSgwL6HCFgh4cry/BAPvZzS5kLGA== - --lefthook-linux-x64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.5.0.tgz#ec648225a3466db2741d467484aba69be57af0d4" -- integrity sha512-Y3GiUC+8inZpA1bKI0LT9huk0ZGB1VCItdltys5Xe9FCFtkYYgBt981jTjiy2uxDy18DpWnDBlVwjhpyS6kYGw== -+lefthook-linux-x64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-linux-x64/-/lefthook-linux-x64-1.5.3.tgz#812607a70c8b65a598378e670c4d5f9aad2b7cc9" -+ integrity sha512-ue3M4qCBcdKQJ6CeVz32zwUPYH2AnuytbR4yYVPFfWxLklqG0NtMNOaK0muJRvmXW8PSJr06z0me1z+ld6FwpQ== - --lefthook-windows-arm64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.5.0.tgz#5a824f334f4771b647fdb15b352cb073ec1cb36c" -- integrity sha512-A/sLFrVy1Ivzz61Exv+ymM1T21d/7sraR9+SjpvJ5rz01GhZHbs0Y+T2R/cO0vJfN56gGW+lRrLDEk6UkbURCQ== -+lefthook-windows-arm64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-windows-arm64/-/lefthook-windows-arm64-1.5.3.tgz#0026307930837e8b8669012ec1312a52ceef3b63" -+ integrity sha512-6pgUJAnyhGvIcej74KVuUwmSVkK7Boi8E9vuzpeQ0wFGN2lNMkVcYTaMI5bLKCX0l15f1htMnvOfKLnWEmxCfg== - --lefthook-windows-x64@1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.5.0.tgz#3f89ddc5dcb25790ddea8be43bbdab844e2ce4a5" -- integrity sha512-FBAEhsAXaPMj0dN9a7/GFxaY1N9i1NRbr9TnEDId4lsdNvN3+Al1jNYoTuDRkH5Z5UipruR3j7KhiHX4T+K8cw== -+lefthook-windows-x64@1.5.3: -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook-windows-x64/-/lefthook-windows-x64-1.5.3.tgz#5a3abb7fe5bef6260445e39881c29eb6ac609509" -+ integrity sha512-t8Pipk1zkniqXh9sL1KEtvPLA6t+Q/q/m5kcugFmT8r/IcMJLwEZC4DYfX0z7j7H2fSkZfTXaMPAJblfXJ7MJw== - - lefthook@^1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.5.0.tgz#1e714f8b3ca9cd440fb45bdec5730f6f0c8dbb58" -- integrity sha512-XDmHDgtWD3wydwdtkZc7Kw7QPp3z+QLIXJeFO+hlZjSUDnezUetKRDByY6YenzEU9Ij4ckKlc4iP7m+fnlwW8A== -+ version "1.5.3" -+ resolved "https://registry.yarnpkg.com/lefthook/-/lefthook-1.5.3.tgz#f82ddd39695bc3a77d4c9bc5d14ad692a13f14f9" -+ integrity sha512-s3ZtCTsEZt9NOxiUFNwu4czNvuycsMQYdKAn4pvxNCslmjcTlvIIpzOdPUtP/QfSuRhRWjk0fMQL2MJwblEppQ== - optionalDependencies: -- lefthook-darwin-arm64 "1.5.0" -- lefthook-darwin-x64 "1.5.0" -- lefthook-freebsd-arm64 "1.5.0" -- lefthook-freebsd-x64 "1.5.0" -- lefthook-linux-arm64 "1.5.0" -- lefthook-linux-x64 "1.5.0" -- lefthook-windows-arm64 "1.5.0" -- lefthook-windows-x64 "1.5.0" -+ lefthook-darwin-arm64 "1.5.3" -+ lefthook-darwin-x64 "1.5.3" -+ lefthook-freebsd-arm64 "1.5.3" -+ lefthook-freebsd-x64 "1.5.3" -+ lefthook-linux-arm64 "1.5.3" -+ lefthook-linux-x64 "1.5.3" -+ lefthook-windows-arm64 "1.5.3" -+ lefthook-windows-x64 "1.5.3" - - levn@^0.4.1: - version "0.4.1" -@@ -5577,7 +5345,7 @@ levn@^0.4.1: - lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" -- integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= -+ integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== - dependencies: - immediate "~3.0.5" - -@@ -5594,7 +5362,7 @@ lines-and-columns@^1.1.6: - load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" -- integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= -+ integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" -@@ -5646,7 +5414,7 @@ locate-path@^7.1.0: - lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" -- integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -+ integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - - lodash.memoize@^4.1.2: - version "4.1.2" -@@ -5661,7 +5429,7 @@ lodash.merge@^4.6.2: - lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" -- integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -+ integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - - lodash.uniq@^4.5.0: - version "4.5.0" -@@ -5708,9 +5476,9 @@ lru-cache@^6.0.0: - yallist "^4.0.0" - - "lru-cache@^9.1.1 || ^10.0.0": -- version "10.0.1" -- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" -- integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== -+ version "10.1.0" -+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" -+ integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - - m3u8-parser@4.8.0: - version "4.8.0" -@@ -5721,6 +5489,24 @@ m3u8-parser@4.8.0: - "@videojs/vhs-utils" "^3.0.5" - global "^4.4.0" - -+m3u8-parser@^6.0.0: -+ version "6.2.0" -+ resolved "https://registry.yarnpkg.com/m3u8-parser/-/m3u8-parser-6.2.0.tgz#5b2f2fe103b76bd3ffc77c6b1eafc3772b1251dd" -+ integrity sha512-qlC00JTxYOxawcqg+RB8jbyNwL3foY/nCY61kyWP+RCuJE9APLeqB/nSlTjb4Mg0yRmyERgjswpdQxMvkeoDrg== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ "@videojs/vhs-utils" "^3.0.5" -+ global "^4.4.0" -+ -+m3u8-parser@^7.1.0: -+ version "7.1.0" -+ resolved "https://registry.yarnpkg.com/m3u8-parser/-/m3u8-parser-7.1.0.tgz#fa92ee22fc798150397c297152c879fe09f066c6" -+ integrity sha512-7N+pk79EH4oLKPEYdgRXgAsKDyA/VCo0qCHlUwacttQA0WqsjZQYmNfywMvjlY9MpEBVZEt0jKFd73Kv15EBYQ== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ "@videojs/vhs-utils" "^3.0.5" -+ global "^4.4.0" -+ - map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" -@@ -5732,9 +5518,9 @@ map-obj@^4.1.0: - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - - marked@^9.0.3: -- version "9.0.3" -- resolved "https://registry.yarnpkg.com/marked/-/marked-9.0.3.tgz#95be5e8cba93f2c2ca1d6503794c4f02d81c97d9" -- integrity sha512-pI/k4nzBG1PEq1J3XFEHxVvjicfjl8rgaMaqclouGSMPhk7Q3Ejb2ZRxx/ZQOcQ1909HzVoWCFYq6oLgtL4BpQ== -+ version "9.1.6" -+ resolved "https://registry.yarnpkg.com/marked/-/marked-9.1.6.tgz#5d2a3f8180abfbc5d62e3258a38a1c19c0381695" -+ integrity sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q== - - matcher@^3.0.0: - version "3.0.0" -@@ -5761,19 +5547,19 @@ mdn-data@2.0.30: - media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" -- integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -+ integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - --memfs@^3.4.1: -- version "3.4.1" -- resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" -- integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== -+memfs@^3.4.3: -+ version "3.6.0" -+ resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" -+ integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: -- fs-monkey "1.0.3" -+ fs-monkey "^1.0.4" - - memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" -- integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= -+ integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - - meow@^10.1.5: - version "10.1.5" -@@ -5796,7 +5582,7 @@ meow@^10.1.5: - merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" -- integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -+ integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - - merge-source-map@^1.1.0: - version "1.1.0" -@@ -5818,7 +5604,7 @@ merge2@^1.3.0, merge2@^1.4.1: - methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -- integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -+ integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - - micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" -@@ -5873,7 +5659,7 @@ mimic-response@^3.1.0: - min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" -- integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= -+ integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -@@ -5909,9 +5695,9 @@ minimatch@^5.0.1, minimatch@^5.1.1: - brace-expansion "^2.0.1" - - minimatch@^9.0.1: -- version "9.0.1" -- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" -- integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== -+ version "9.0.3" -+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" -+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -@@ -5925,14 +5711,14 @@ minimist-options@4.1.0: - kind-of "^6.0.3" - - minimist@^1.2.0, minimist@^1.2.6: -- version "1.2.7" -- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" -- integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -+ version "1.2.8" -+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" -+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - - minipass@^3.0.0: -- version "3.3.4" -- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" -- integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== -+ version "3.3.6" -+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" -+ integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -@@ -5962,7 +5748,7 @@ mkdirp@^1.0.3: - modify-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1" -- integrity sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE= -+ integrity sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog== - - mpd-parser@0.22.1, mpd-parser@^0.22.1: - version "0.22.1" -@@ -5974,10 +5760,20 @@ mpd-parser@0.22.1, mpd-parser@^0.22.1: - "@xmldom/xmldom" "^0.8.3" - global "^4.4.0" - -+mpd-parser@^1.0.1, mpd-parser@^1.2.2: -+ version "1.2.2" -+ resolved "https://registry.yarnpkg.com/mpd-parser/-/mpd-parser-1.2.2.tgz#bf479cbb0bec605130075c0e904a853b29265973" -+ integrity sha512-QCfB1koOoZw6E5La1cx+W/Yd0EZlRhHMqMr4TAJez0eRTuPDzPM5FWoiOqjyo37W+ISPLzmfJACSbJFEBjbL4Q== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ "@videojs/vhs-utils" "^3.0.5" -+ "@xmldom/xmldom" "^0.8.3" -+ global "^4.4.0" -+ - ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -+ integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - - ms@2.1.2: - version "2.1.2" -@@ -5989,10 +5785,10 @@ ms@2.1.3, ms@^2.1.1: - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - --multicast-dns@^7.2.4: -- version "7.2.4" -- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.4.tgz#cf0b115c31e922aeb20b64e6556cbeb34cf0dd19" -- integrity sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw== -+multicast-dns@^7.2.5: -+ version "7.2.5" -+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" -+ integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" -@@ -6005,15 +5801,23 @@ mux.js@6.0.1: - "@babel/runtime" "^7.11.2" - global "^4.4.0" - -+mux.js@7.0.1, mux.js@^7.0.1: -+ version "7.0.1" -+ resolved "https://registry.yarnpkg.com/mux.js/-/mux.js-7.0.1.tgz#745c77b0fb8aa81dbb47e96651428bfada49b08e" -+ integrity sha512-Omz79uHqYpMP1V80JlvEdCiOW1hiw4mBvDh9gaZEpxvB+7WYb2soZSzfuSRrK2Kh9Pm6eugQNrIpY/Bnyhk4hw== -+ dependencies: -+ "@babel/runtime" "^7.11.2" -+ global "^4.4.0" -+ - nanoid@^3.3.6: -- version "3.3.6" -- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" -- integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== -+ version "3.3.7" -+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" -+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - - natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -- integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - - negotiator@0.6.3: - version "0.6.3" -@@ -6048,10 +5852,10 @@ node-forge@^1: - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - --node-releases@^2.0.12: -- version "2.0.12" -- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" -- integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== -+node-releases@^2.0.13: -+ version "2.0.13" -+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" -+ integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - - normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" -@@ -6124,36 +5928,16 @@ oauth-sign@~0.9.0: - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - --object-inspect@^1.12.0, object-inspect@^1.9.0: -- version "1.12.0" -- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" -- integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== -- --object-inspect@^1.12.2: -- version "1.12.2" -- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" -- integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== -- --object-inspect@^1.12.3: -- version "1.12.3" -- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" -- integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -+object-inspect@^1.13.1, object-inspect@^1.9.0: -+ version "1.13.1" -+ resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" -+ integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - - object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - --object.assign@^4.1.2: -- version "4.1.2" -- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" -- integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== -- dependencies: -- call-bind "^1.0.0" -- define-properties "^1.1.3" -- has-symbols "^1.0.1" -- object-keys "^1.1.1" -- - object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" -@@ -6164,33 +5948,33 @@ object.assign@^4.1.4: - has-symbols "^1.0.3" - object-keys "^1.1.1" - --object.fromentries@^2.0.6: -- version "2.0.6" -- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" -- integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== -+object.fromentries@^2.0.7: -+ version "2.0.7" -+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" -+ integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - --object.groupby@^1.0.0: -- version "1.0.0" -- resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.0.tgz#cb29259cf90f37e7bac6437686c1ea8c916d12a9" -- integrity sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw== -+object.groupby@^1.0.1: -+ version "1.0.1" -+ resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" -+ integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" -- es-abstract "^1.21.2" -+ es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - --object.values@^1.1.6: -- version "1.1.6" -- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" -- integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== -+object.values@^1.1.7: -+ version "1.1.7" -+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" -+ integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - - obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" -@@ -6212,7 +5996,7 @@ on-headers@~1.0.2: - once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" -- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= -+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -@@ -6231,9 +6015,9 @@ onetime@^6.0.0: - mimic-fn "^4.0.0" - - open@^8.0.9: -- version "8.4.0" -- resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8" -- integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q== -+ version "8.4.2" -+ resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" -+ integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" -@@ -6339,7 +6123,7 @@ parent-module@^1.0.0: - parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" -- integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= -+ integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" -@@ -6385,12 +6169,12 @@ path-exists@^5.0.0: - path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - - path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" -- integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -+ integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - - path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" -@@ -6418,7 +6202,7 @@ path-scurry@^1.10.1: - path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" -- integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -+ integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - - path-type@^3.0.0: - version "3.0.0" -@@ -6435,12 +6219,12 @@ path-type@^4.0.0: - pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" -- integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= -+ integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - - performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -- integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -+ integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - - picocolors@^0.2.1: - version "0.2.1" -@@ -6465,7 +6249,7 @@ pidtree@^0.3.0: - pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" -- integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -+ integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - - pkcs7@^1.0.4: - version "1.0.4" -@@ -6488,15 +6272,7 @@ pkg-dir@^7.0.0: - dependencies: - find-up "^6.3.0" - --plist@^3.0.4: -- version "3.0.5" -- resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987" -- integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== -- dependencies: -- base64-js "^1.5.1" -- xmlbuilder "^9.0.7" -- --plist@^3.0.5: -+plist@^3.0.4, plist@^3.0.5: - version "3.1.0" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" - integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== -@@ -6775,7 +6551,7 @@ postcss@^7.0.36: - picocolors "^0.2.1" - source-map "^0.6.1" - --postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.27, postcss@^8.4.31: -+postcss@^8.4.14, postcss@^8.4.19, postcss@^8.4.21, postcss@^8.4.24, postcss@^8.4.28, postcss@^8.4.31: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== -@@ -6843,12 +6619,12 @@ proxy-addr@~2.0.7: - pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -- integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -+ integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== - - psl@^1.1.28: -- version "1.8.0" -- resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" -- integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -+ version "1.9.0" -+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" -+ integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - - pump@^3.0.0: - version "3.0.0" -@@ -6859,9 +6635,9 @@ pump@^3.0.0: - once "^1.3.1" - - punycode@^2.1.0, punycode@^2.1.1: -- version "2.1.1" -- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" -- integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -+ version "2.3.1" -+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" -+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - - pupa@^2.0.1: - version "2.1.1" -@@ -6870,10 +6646,10 @@ pupa@^2.0.1: - dependencies: - escape-goat "^2.0.0" - --qs@6.10.3: -- version "6.10.3" -- resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" -- integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== -+qs@6.11.0: -+ version "6.11.0" -+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" -+ integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -@@ -6947,7 +6723,7 @@ read-pkg-up@^8.0.0: - read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" -- integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= -+ integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" -@@ -6974,9 +6750,9 @@ read-pkg@^6.0.0: - type-fest "^1.0.1" - - readable-stream@^2.0.1: -- version "2.3.7" -- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" -- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== -+ version "2.3.8" -+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" -+ integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" -@@ -6987,9 +6763,9 @@ readable-stream@^2.0.1: - util-deprecate "~1.0.1" - - readable-stream@^3.0.6: -- version "3.6.0" -- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" -- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== -+ version "3.6.2" -+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" -+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" -@@ -7017,17 +6793,10 @@ redent@^4.0.0: - indent-string "^5.0.0" - strip-indent "^4.0.0" - --regenerate-unicode-properties@^10.0.1: -- version "10.0.1" -- resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz#7f442732aa7934a3740c779bb9b3340dccc1fb56" -- integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== -- dependencies: -- regenerate "^1.4.2" -- - regenerate-unicode-properties@^10.1.0: -- version "10.1.0" -- resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" -- integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== -+ version "10.1.1" -+ resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" -+ integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -@@ -7036,10 +6805,10 @@ regenerate@^1.4.2: - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - --regenerator-runtime@^0.13.4: -- version "0.13.9" -- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" -- integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -+regenerator-runtime@^0.14.0: -+ version "0.14.0" -+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" -+ integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - - regenerator-transform@^0.15.2: - version "0.15.2" -@@ -7053,35 +6822,14 @@ regexp-tree@^0.1.27: - resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" - integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== - --regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3: -- version "1.4.3" -- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" -- integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== -- dependencies: -- call-bind "^1.0.2" -- define-properties "^1.1.3" -- functions-have-names "^1.2.2" -- --regexp.prototype.flags@^1.5.0: -- version "1.5.0" -- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" -- integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== -+regexp.prototype.flags@^1.5.1: -+ version "1.5.1" -+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" -+ integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" -- functions-have-names "^1.2.3" -- --regexpu-core@^5.1.0: -- version "5.1.0" -- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" -- integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== -- dependencies: -- regenerate "^1.4.2" -- regenerate-unicode-properties "^10.0.1" -- regjsgen "^0.6.0" -- regjsparser "^0.8.2" -- unicode-match-property-ecmascript "^2.0.0" -- unicode-match-property-value-ecmascript "^2.0.0" -+ set-function-name "^2.0.0" - - regexpu-core@^5.3.1: - version "5.3.2" -@@ -7095,11 +6843,6 @@ regexpu-core@^5.3.1: - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - --regjsgen@^0.6.0: -- version "0.6.0" -- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" -- integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== -- - regjsparser@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.10.0.tgz#b1ed26051736b436f22fdec1c8f72635f9f44892" -@@ -7107,13 +6850,6 @@ regjsparser@^0.10.0: - dependencies: - jsesc "~0.5.0" - --regjsparser@^0.8.2: -- version "0.8.4" -- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" -- integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== -- dependencies: -- jsesc "~0.5.0" -- - regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" -@@ -7124,7 +6860,7 @@ regjsparser@^0.9.1: - relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" -- integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= -+ integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - - renderkid@^3.0.0: - version "3.0.0" -@@ -7166,7 +6902,7 @@ request@^2.88.2: - require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" -- integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - - require-from-string@^2.0.2: - version "2.0.2" -@@ -7176,7 +6912,7 @@ require-from-string@^2.0.2: - requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" -- integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -+ integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - - resolve-alpn@^1.0.0: - version "1.2.1" -@@ -7205,12 +6941,12 @@ resolve-pkg-maps@^1.0.0: - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - --resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.2: -- version "1.22.3" -- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.3.tgz#4b4055349ffb962600972da1fdc33c46a4eb3283" -- integrity sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw== -+resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: -+ version "1.22.8" -+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" -+ integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: -- is-core-module "^2.12.0" -+ is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -@@ -7279,17 +7015,17 @@ run-parallel@^1.1.9: - rust-result@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rust-result/-/rust-result-1.0.0.tgz#34c75b2e6dc39fe5875e5bdec85b5e0f91536f72" -- integrity sha1-NMdbLm3Dn+WHXlveyFteD5FTb3I= -+ integrity sha512-6cJzSBU+J/RJCF063onnQf0cDUOHs9uZI1oroSGnHOph+CQTIJ5Pp2hK5kEQq1+7yE/EEWfulSNXAQ2jikPthA== - dependencies: - individual "^2.0.0" - --safe-array-concat@^1.0.0: -- version "1.0.0" -- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060" -- integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ== -+safe-array-concat@^1.0.1: -+ version "1.0.1" -+ resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" -+ integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" -- get-intrinsic "^1.2.0" -+ get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -@@ -7306,7 +7042,7 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, - safe-json-parse@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz#7c0f578cfccd12d33a71c0e05413e2eca171eaac" -- integrity sha1-fA9XjPzNEtM6ccDgVBPi7KFx6qw= -+ integrity sha512-RjZPPHugjK0TOzFrLZ8inw44s9bKox99/0AZW9o/BEQVrJfhI+fIHMErnPyRa89/yRXUUr93q+tiN6zhoVV4wQ== - dependencies: - rust-result "^1.0.0" - -@@ -7339,18 +7075,18 @@ sass-loader@^13.3.2: - neo-async "^2.6.2" - - sass@^1.68.0: -- version "1.68.0" -- resolved "https://registry.yarnpkg.com/sass/-/sass-1.68.0.tgz#0034b0cc9a50248b7d1702ac166fd25990023669" -- integrity sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA== -+ version "1.69.5" -+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.69.5.tgz#23e18d1c757a35f2e52cc81871060b9ad653dfde" -+ integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - - sax@^1.2.4: -- version "1.2.4" -- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -+ version "1.3.0" -+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" -+ integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== - - schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" -@@ -7374,26 +7110,27 @@ schema-utils@^4.0.0, schema-utils@^4.0.1: - select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" -- integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -+ integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - - selfsigned@^2.1.1: -- version "2.1.1" -- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" -- integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== -+ version "2.4.1" -+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" -+ integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== - dependencies: -+ "@types/node-forge" "^1.3.0" - node-forge "^1" - - semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" -- integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= -+ integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== - - "semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - --semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: -+semver@^6.2.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -@@ -7441,7 +7178,7 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" -- integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= -+ integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" -@@ -7461,6 +7198,25 @@ serve-static@1.15.0: - parseurl "~1.3.3" - send "0.18.0" - -+set-function-length@^1.1.1: -+ version "1.1.1" -+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" -+ integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== -+ dependencies: -+ define-data-property "^1.1.1" -+ get-intrinsic "^1.2.1" -+ gopd "^1.0.1" -+ has-property-descriptors "^1.0.0" -+ -+set-function-name@^2.0.0: -+ version "2.0.1" -+ resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" -+ integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== -+ dependencies: -+ define-data-property "^1.0.1" -+ functions-have-names "^1.2.3" -+ has-property-descriptors "^1.0.0" -+ - setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -@@ -7481,7 +7237,7 @@ shallow-clone@^3.0.0: - shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" -- integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= -+ integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -@@ -7495,22 +7251,17 @@ shebang-command@^2.0.0: - shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -- integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= -+ integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - - shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - --shell-quote@^1.6.1: -- version "1.7.3" -- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" -- integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== -- --shell-quote@^1.7.3: -- version "1.8.0" -- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" -- integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== -+shell-quote@^1.6.1, shell-quote@^1.8.1: -+ version "1.8.1" -+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" -+ integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - - side-channel@^1.0.4: - version "1.0.4" -@@ -7527,9 +7278,9 @@ signal-exit@^3.0.3, signal-exit@^3.0.7: - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - - signal-exit@^4.0.1: -- version "4.0.2" -- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" -- integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== -+ version "4.1.0" -+ resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" -+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - - simple-update-notifier@2.0.0: - version "2.0.0" -@@ -7583,14 +7334,14 @@ sockjs@^0.3.24: - sort-keys-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" -- integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= -+ integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== - dependencies: - sort-keys "^1.0.0" - - sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" -- integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= -+ integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== - dependencies: - is-plain-obj "^1.0.0" - -@@ -7613,9 +7364,9 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - - spdx-correct@^3.0.0: -- version "3.1.1" -- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" -- integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== -+ version "3.2.0" -+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" -+ integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" -@@ -7634,9 +7385,9 @@ spdx-expression-parse@^3.0.0: - spdx-license-ids "^3.0.0" - - spdx-license-ids@^3.0.0: -- version "3.0.11" -- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" -- integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== -+ version "3.0.16" -+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" -+ integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== - - spdy-transport@^3.0.0: - version "3.0.0" -@@ -7662,14 +7413,14 @@ spdy@^4.0.2: - spdy-transport "^3.0.0" - - sprintf-js@^1.1.2: -- version "1.1.2" -- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" -- integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== -+ version "1.1.3" -+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" -+ integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== - - sshpk@^1.7.0: -- version "1.17.0" -- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" -- integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== -+ version "1.18.0" -+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" -+ integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" -@@ -7694,12 +7445,7 @@ statuses@2.0.1: - "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -- integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -- --streamsearch@^1.1.0: -- version "1.1.0" -- resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" -- integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -+ integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - - "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" -@@ -7720,58 +7466,40 @@ string-width@^5.0.1, string-width@^5.1.2: - strip-ansi "^7.0.1" - - string.prototype.padend@^3.0.0: -- version "3.1.3" -- resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" -- integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== -+ version "3.1.5" -+ resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz#311ef3a4e3c557dd999cdf88fbdde223f2ac0f95" -+ integrity sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.3" -- es-abstract "^1.19.1" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - --string.prototype.trim@^1.2.7: -- version "1.2.7" -- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" -- integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== -+string.prototype.trim@^1.2.8: -+ version "1.2.8" -+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" -+ integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - --string.prototype.trimend@^1.0.5: -- version "1.0.5" -- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" -- integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== -+string.prototype.trimend@^1.0.7: -+ version "1.0.7" -+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" -+ integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.19.5" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - --string.prototype.trimend@^1.0.6: -- version "1.0.6" -- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" -- integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== -+string.prototype.trimstart@^1.0.7: -+ version "1.0.7" -+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" -+ integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -- --string.prototype.trimstart@^1.0.5: -- version "1.0.5" -- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" -- integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== -- dependencies: -- call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.19.5" -- --string.prototype.trimstart@^1.0.6: -- version "1.0.6" -- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" -- integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== -- dependencies: -- call-bind "^1.0.2" -- define-properties "^1.1.4" -- es-abstract "^1.20.4" -+ define-properties "^1.2.0" -+ es-abstract "^1.22.1" - - string_decoder@^1.1.1: - version "1.3.0" -@@ -7795,16 +7523,16 @@ string_decoder@~1.1.1: - ansi-regex "^5.0.1" - - strip-ansi@^7.0.1: -- version "7.0.1" -- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" -- integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== -+ version "7.1.0" -+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" -+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - - strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -- integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= -+ integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - - strip-final-newline@^2.0.0: - version "2.0.0" -@@ -7891,9 +7619,9 @@ stylelint-use-logical-spec@^5.0.0: - integrity sha512-uLF876lrsGVWFPQ8haGhfDfsTyAzPoJq2AAExuSzE2V1uC8uCmuy6S66NseiEwcf0AGqWzS56kPVzF/hVvWIjA== - - stylelint@^15.10.3: -- version "15.10.3" -- resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.10.3.tgz#995e4512fdad450fb83e13f3472001f6edb6469c" -- integrity sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA== -+ version "15.11.0" -+ resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-15.11.0.tgz#3ff8466f5f5c47362bc7c8c9d382741c58bc3292" -+ integrity sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw== - dependencies: - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" -@@ -7902,12 +7630,12 @@ stylelint@^15.10.3: - balanced-match "^2.0.0" - colord "^2.9.3" - cosmiconfig "^8.2.0" -- css-functions-list "^3.2.0" -+ css-functions-list "^3.2.1" - css-tree "^2.3.1" - debug "^4.3.4" - fast-glob "^3.3.1" - fastest-levenshtein "^1.0.16" -- file-entry-cache "^6.0.1" -+ file-entry-cache "^7.0.0" - global-modules "^2.0.0" - globby "^11.1.0" - globjoin "^0.1.4" -@@ -7916,13 +7644,13 @@ stylelint@^15.10.3: - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - is-plain-object "^5.0.0" -- known-css-properties "^0.28.0" -+ known-css-properties "^0.29.0" - mathml-tag-names "^2.1.3" - meow "^10.1.5" - micromatch "^4.0.5" - normalize-path "^3.0.0" - picocolors "^1.0.0" -- postcss "^8.4.27" -+ postcss "^8.4.28" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^6.0.0" - postcss-selector-parser "^6.0.13" -@@ -7983,15 +7711,16 @@ svg-tags@^1.0.0: - integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA== - - svgo@^3.0.2: -- version "3.0.2" -- resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" -- integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== -+ version "3.0.4" -+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.4.tgz#67b40a710743e358e8d19ec288de8f1e388afbb4" -+ integrity sha512-T+Xul3JwuJ6VGXKo/p2ndqx1ibxNKnLTvRc1ZTWKCfyKS/GgNjRZcYsK84fxTsy/izr91g/Rwx6fGnVgaFSI5g== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.2.1" -- csso "^5.0.5" -+ css-what "^6.1.0" -+ csso "5.0.5" - picocolors "^1.0.0" - - synckit@^0.8.5: -@@ -8019,9 +7748,9 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - - tar@^6.1.12: -- version "6.1.15" -- resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" -- integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== -+ version "6.2.0" -+ resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" -+ integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" -@@ -8039,40 +7768,30 @@ temp-file@^3.4.0: - fs-extra "^10.0.0" - - terser-webpack-plugin@^5.3.7: -- version "5.3.7" -- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" -- integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== -+ version "5.3.9" -+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" -+ integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" -- terser "^5.16.5" -+ terser "^5.16.8" - --terser@^5.10.0: -- version "5.14.2" -- resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" -- integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== -+terser@^5.10.0, terser@^5.16.8: -+ version "5.24.0" -+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" -+ integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== - dependencies: -- "@jridgewell/source-map" "^0.3.2" -- acorn "^8.5.0" -- commander "^2.20.0" -- source-map-support "~0.5.20" -- --terser@^5.16.5: -- version "5.16.9" -- resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.9.tgz#7a28cb178e330c484369886f2afd623d9847495f" -- integrity sha512-HPa/FdTB9XGI2H1/keLFZHxl6WNvAI4YalHGtDQTlMnJcoqSab1UwL4l1hGEhs6/GmLHBZIg/YgB++jcbzoOEg== -- dependencies: -- "@jridgewell/source-map" "^0.3.2" -- acorn "^8.5.0" -+ "@jridgewell/source-map" "^0.3.3" -+ acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - - text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -- integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - - thunky@^1.0.2: - version "1.1.0" -@@ -8106,7 +7825,7 @@ tmp@^0.2.0: - to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" -- integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - - to-regex-range@^5.0.1: - version "5.0.1" -@@ -8141,7 +7860,7 @@ trim-newlines@^4.0.2: - truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" -- integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= -+ integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== - dependencies: - utf8-byte-length "^1.0.1" - -@@ -8163,14 +7882,14 @@ tslib@^2.0.3, tslib@^2.3.0, tslib@^2.5.0, tslib@^2.6.0: - tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" -- integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= -+ integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - - tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" -- integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -+ integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - - type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" -@@ -8271,12 +7990,17 @@ underscore@1.13.1: - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" - integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== - -+undici-types@~5.26.4: -+ version "5.26.5" -+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" -+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -+ - undici@^5.19.1: -- version "5.19.1" -- resolved "https://registry.yarnpkg.com/undici/-/undici-5.19.1.tgz#92b1fd3ab2c089b5a6bd3e579dcda8f1934ebf6d" -- integrity sha512-YiZ61LPIgY73E7syxCDxxa3LV2yl3sN8spnIuTct60boiiRaE1J8mNWHO8Im2Zi/sFrPusjLlmRPrsyraSqX6A== -+ version "5.28.0" -+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.0.tgz#09f6aa4a6f34de8996eec585fe4ceebaa9ef3f36" -+ integrity sha512-gM12DkXhlAc5+/TPe60iy9P6ETgVfqTuRJ6aQ4w8RYu0MqKuXhaq3/b86GfzDQnNA3NUO6aUNdvevrKH59D0Nw== - dependencies: -- busboy "^1.6.0" -+ "@fastify/busboy" "^2.0.0" - - unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" -@@ -8291,20 +8015,15 @@ unicode-match-property-ecmascript@^2.0.0: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - --unicode-match-property-value-ecmascript@^2.0.0: -- version "2.0.0" -- resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" -- integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -- - unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - - unicode-property-aliases-ecmascript@^2.0.0: -- version "2.0.0" -- resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" -- integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== -+ version "2.1.0" -+ resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" -+ integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - - universalify@^0.1.0: - version "0.1.2" -@@ -8312,14 +8031,14 @@ universalify@^0.1.0: - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - - universalify@^2.0.0: -- version "2.0.0" -- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" -- integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -+ version "2.0.1" -+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" -+ integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - - unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" -- integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - - untildify@^4.0.0: - version "4.0.0" -@@ -8334,10 +8053,10 @@ unused-filename@^2.1.0: - modify-filename "^1.1.0" - path-exists "^4.0.0" - --update-browserslist-db@^1.0.11: -- version "1.0.11" -- resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" -- integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== -+update-browserslist-db@^1.0.13: -+ version "1.0.13" -+ resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" -+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" -@@ -8357,34 +8076,33 @@ url-toolkit@^2.2.1: - utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" -- integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= -+ integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== - - util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - - util@^0.12.4: -- version "0.12.4" -- resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" -- integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== -+ version "0.12.5" -+ resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" -+ integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" -- safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - - utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" -- integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= -+ integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - - utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -- integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -+ integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - - uuid@^3.3.2: - version "3.4.0" -@@ -8407,12 +8125,12 @@ validate-npm-package-license@^3.0.1: - vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -- integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= -+ integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - - verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" -- integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= -+ integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" -@@ -8427,7 +8145,7 @@ verror@^1.10.0: - core-util-is "1.0.2" - extsprintf "^1.2.0" - --video.js@7.21.5, "video.js@^6 || ^7", "video.js@^6 || ^7 || ^8", video.js@^7.0.0, "video.js@^7.2.0 || ^6.6.0": -+video.js@7.21.5, "video.js@^6 || ^7", video.js@^7.0.0, "video.js@^7.2.0 || ^6.6.0": - version "7.21.5" - resolved "https://registry.yarnpkg.com/video.js/-/video.js-7.21.5.tgz#36fcbbdeded757089a10bbb78f49c360a2d0c9d4" - integrity sha512-WRq86tXZKrThA9mK+IR+v4tIQVVvnb5LhvL71fD2AX7TxVOPdaeK1X/wyuUruBqWaOG3w2sZXoMY6HF2Jlo9qA== -@@ -8446,6 +8164,33 @@ video.js@7.21.5, "video.js@^6 || ^7", "video.js@^6 || ^7 || ^8", video.js@^7.0.0 - videojs-font "3.2.0" - videojs-vtt.js "^0.15.5" - -+"video.js@^6 || ^7 || ^8", "video.js@^7 || ^8": -+ version "8.6.1" -+ resolved "https://registry.yarnpkg.com/video.js/-/video.js-8.6.1.tgz#d25f59fbf30fb21c0bcf04a1de6a98dfd137997c" -+ integrity sha512-CNYVJ5WWIZ7bOhbkkfcKqLGoc6WsE3Ft2RfS1lXdQTWk8UiSsPW2Ssk2JzPCA8qnIlUG9os/faCFsYWjyu4JcA== -+ dependencies: -+ "@babel/runtime" "^7.12.5" -+ "@videojs/http-streaming" "3.7.0" -+ "@videojs/vhs-utils" "^4.0.0" -+ "@videojs/xhr" "2.6.0" -+ aes-decrypter "^4.0.1" -+ global "4.4.0" -+ keycode "2.2.0" -+ m3u8-parser "^6.0.0" -+ mpd-parser "^1.0.1" -+ mux.js "^7.0.1" -+ safe-json-parse "4.0.0" -+ videojs-contrib-quality-levels "4.0.0" -+ videojs-font "4.1.0" -+ videojs-vtt.js "0.15.5" -+ -+videojs-contrib-quality-levels@4.0.0: -+ version "4.0.0" -+ resolved "https://registry.yarnpkg.com/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-4.0.0.tgz#faa8096594cdbfc3ccbefe8572fc20531ba23f3d" -+ integrity sha512-u5rmd8BjLwANp7XwuQ0Q/me34bMe6zg9PQdHfTS7aXgiVRbNTb4djcmfG7aeSrkpZjg+XCLezFNenlJaCjBHKw== -+ dependencies: -+ global "^4.4.0" -+ - videojs-contrib-quality-levels@^2.0.4: - version "2.2.1" - resolved "https://registry.yarnpkg.com/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-2.2.1.tgz#46bd7e1db25e6e45824dadf933b08f0c6ec724a1" -@@ -8466,6 +8211,11 @@ videojs-font@3.2.0: - resolved "https://registry.yarnpkg.com/videojs-font/-/videojs-font-3.2.0.tgz#212c9d3f4e4ec3fa7345167d64316add35e92232" - integrity sha512-g8vHMKK2/JGorSfqAZQUmYYNnXmfec4MLhwtEFS+mMs2IDY398GLysy6BH6K+aS1KMNu/xWZ8Sue/X/mdQPliA== - -+videojs-font@4.1.0: -+ version "4.1.0" -+ resolved "https://registry.yarnpkg.com/videojs-font/-/videojs-font-4.1.0.tgz#3ae1dbaac60b4f0f1c4e6f7ff9662a89df176015" -+ integrity sha512-X1LuPfLZPisPLrANIAKCknZbZu5obVM/ylfd1CN+SsCmPZQ3UMDPcvLTpPBJxcBuTpHQq2MO1QCFt7p8spnZ/w== -+ - videojs-http-source-selector@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/videojs-http-source-selector/-/videojs-http-source-selector-1.1.6.tgz#073aadbea0106ba6c98d6b611094dbf8554ffa1f" -@@ -8499,7 +8249,7 @@ videojs-vtt-thumbnails-freetube@0.0.15: - request "^2.88.2" - video.js "^7.2.0 || ^6.6.0" - --videojs-vtt.js@^0.15.5: -+videojs-vtt.js@0.15.5, videojs-vtt.js@^0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/videojs-vtt.js/-/videojs-vtt.js-0.15.5.tgz#567776eaf2a7a928d88b148a8b401ade2406f2ca" - integrity sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ== -@@ -8512,9 +8262,9 @@ vue-devtools@^5.1.4: - integrity sha512-EBAEXvAHUinsPzoSiElps0JgtLXUnJXKIJbP6nfdz/R63VdKBMfJ34/rFip+4iT7iMbVS5lA4W6N1jq4Hj4LCg== - - vue-eslint-parser@^9.0.1, vue-eslint-parser@^9.3.1: -- version "9.3.1" -- resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.1.tgz#429955e041ae5371df5f9e37ebc29ba046496182" -- integrity sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g== -+ version "9.3.2" -+ resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz#6f9638e55703f1c77875a19026347548d93fd499" -+ integrity sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg== - dependencies: - debug "^4.3.4" - eslint-scope "^7.1.1" -@@ -8535,9 +8285,9 @@ vue-i18n@^8.28.2: - integrity sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA== - - vue-loader@^15.10.0: -- version "15.10.0" -- resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.10.0.tgz#2a12695c421a2a2cc2138f05a949d04ed086e38b" -- integrity sha512-VU6tuO8eKajrFeBzMssFUP9SvakEeeSi1BxdTH5o3+1yUyrldp8IERkSdXlMI2t4kxF2sqYUDsQY+WJBxzBmZg== -+ version "15.11.1" -+ resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.11.1.tgz#dee91169211276ed43c5715caef88a56b1f497b0" -+ integrity sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" -@@ -8577,11 +8327,11 @@ vue-tiny-slider@^0.1.39: - tiny-slider "^2.9.2" - - vue@^2.7.14: -- version "2.7.14" -- resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.14.tgz#3743dcd248fd3a34d421ae456b864a0246bafb17" -- integrity sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ== -+ version "2.7.15" -+ resolved "https://registry.yarnpkg.com/vue/-/vue-2.7.15.tgz#94cd34e6e9f22cd2d35a02143f96a5beac1c1f54" -+ integrity sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ== - dependencies: -- "@vue/compiler-sfc" "2.7.14" -+ "@vue/compiler-sfc" "2.7.15" - csstype "^3.1.0" - - vuex@^3.6.2: -@@ -8624,12 +8374,12 @@ webpack-cli@^5.1.4: - webpack-merge "^5.7.3" - - webpack-dev-middleware@^5.3.1: -- version "5.3.1" -- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" -- integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== -+ version "5.3.3" -+ resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" -+ integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" -- memfs "^3.4.1" -+ memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" -@@ -8671,11 +8421,12 @@ webpack-dev-server@^4.15.1: - ws "^8.13.0" - - webpack-merge@^5.7.3: -- version "5.8.0" -- resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" -- integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== -+ version "5.10.0" -+ resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177" -+ integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" -+ flat "^5.0.2" - wildcard "^2.0.0" - - webpack-sources@^3.2.3: -@@ -8684,9 +8435,9 @@ webpack-sources@^3.2.3: - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - - webpack@^5.88.2: -- version "5.88.2" -- resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" -- integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== -+ version "5.89.0" -+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" -+ integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" -@@ -8738,41 +8489,17 @@ which-boxed-primitive@^1.0.2: - is-string "^1.0.5" - is-symbol "^1.0.3" - --which-typed-array@^1.1.10: -- version "1.1.11" -- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" -- integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== -+which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.2: -+ version "1.1.13" -+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" -+ integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -+ call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - --which-typed-array@^1.1.2: -- version "1.1.8" -- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.8.tgz#0cfd53401a6f334d90ed1125754a42ed663eb01f" -- integrity sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw== -- dependencies: -- available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -- es-abstract "^1.20.0" -- for-each "^0.3.3" -- has-tostringtag "^1.0.0" -- is-typed-array "^1.1.9" -- --which-typed-array@^1.1.9: -- version "1.1.9" -- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" -- integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== -- dependencies: -- available-typed-arrays "^1.0.5" -- call-bind "^1.0.2" -- for-each "^0.3.3" -- gopd "^1.0.1" -- has-tostringtag "^1.0.0" -- is-typed-array "^1.1.10" -- - which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" -@@ -8788,9 +8515,9 @@ which@^2.0.1: - isexe "^2.0.0" - - wildcard@^2.0.0: -- version "2.0.0" -- resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" -- integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== -+ version "2.0.1" -+ resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" -+ integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" -@@ -8813,7 +8540,7 @@ wrap-ansi@^8.1.0: - wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - - write-file-atomic@^5.0.1: - version "5.0.1" -@@ -8824,9 +8551,9 @@ write-file-atomic@^5.0.1: - signal-exit "^4.0.1" - - ws@^8.13.0: -- version "8.13.0" -- resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" -- integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -+ version "8.14.2" -+ resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" -+ integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - - xml-name-validator@^4.0.0: - version "4.0.0" -@@ -8838,11 +8565,6 @@ xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1: - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" - integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== - --xmlbuilder@^9.0.7: -- version "9.0.7" -- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" -- integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= -- - y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" -@@ -8851,7 +8573,7 @@ y18n@^5.0.5: - yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -- integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -+ integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - - yallist@^3.0.2: - version "3.1.1" -@@ -8873,9 +8595,9 @@ yaml-eslint-parser@^1.2.1, yaml-eslint-parser@^1.2.2: - yaml "^2.0.0" - - yaml@^2.0.0: -- version "2.2.2" -- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" -- integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== -+ version "2.3.4" -+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" -+ integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== - - yargs-parser@^20.2.9: - version "20.2.9" -@@ -8903,7 +8625,7 @@ yargs@^17.6.2: - yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" -- integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= -+ integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/backports/freetube/freetube.desktop b/backports/freetube/freetube.desktop deleted file mode 100644 index 649183b..0000000 --- a/backports/freetube/freetube.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=FreeTube -GenericName=YouTube Player -Comment=An open source desktop YouTube player built with privacy in mind. -Exec=freetube %U -Terminal=false -Type=Application -Icon=freetube -MimeType=x-scheme-handler/freetube; -Categories=Network; diff --git a/backports/freetube/freetube.sh b/backports/freetube/freetube.sh index 487ae8b..5d2bb77 100644 --- a/backports/freetube/freetube.sh +++ b/backports/freetube/freetube.sh @@ -1,3 +1,3 @@ #!/bin/sh -exec electron /usr/lib/freetube "$@" +exec electron /usr/lib/freetube/app.asar "$@" diff --git a/backports/freetube/package-only-necessary.patch b/backports/freetube/package-only-necessary.patch deleted file mode 100644 index c89f141..0000000 --- a/backports/freetube/package-only-necessary.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/_scripts/build.js.orig b/_scripts/build.js -index 035f986..75991d9 100644 ---- a/_scripts/build.js.orig -+++ b/_scripts/build.js -@@ -36,12 +36,13 @@ if (platform === 'darwin') { - arch = Arch.armv7l - } - -- targets = Platform.LINUX.createTarget(['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'], arch) -+ targets = Platform.LINUX.createTarget(['dir'], arch) - } - - const config = { - appId: `io.freetubeapp.${name}`, - copyright: 'Copyleft © 2020-2023 freetubeapp@protonmail.com', -+ electronDist: '/usr/lib/electron', - // asar: false, - // compression: 'store', - productName, -@@ -85,7 +86,7 @@ const config = { - linux: { - category: 'Network', - icon: '_icons/icon.svg', -- target: ['deb', 'zip', '7z', 'apk', 'rpm', 'AppImage', 'pacman'], -+ target: ['dir'], - }, - // See the following issues for more information - // https://github.com/jordansissel/fpm/issues/1503 diff --git a/backports/freetube/tasje-dotdash.patch b/backports/freetube/tasje-dotdash.patch new file mode 100644 index 0000000..9f2c2e0 --- /dev/null +++ b/backports/freetube/tasje-dotdash.patch @@ -0,0 +1,12 @@ +https://codeberg.org/selfisekai/electron_tasje/issues/27 +--- ./_scripts/ebuilder.config.js.orig ++++ ./_scripts/ebuilder.config.js +@@ -20,7 +20,7 @@ + files: [ + '_icons/iconColor.*', + 'icon.svg', +- './dist/**/*', ++ 'dist/**/*', + '!dist/web/*', + '!node_modules/**/*', + ], From b652dddfcf69d6d5ea73801442c8a26611aa04ec Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:48:14 -0400 Subject: [PATCH 244/738] backports/py3-*: rebuild remain against python 3.12 --- backports/py3-codespell/APKBUILD | 2 +- backports/py3-colored/APKBUILD | 2 +- backports/py3-fuzzywuzzy/APKBUILD | 2 +- backports/py3-numpy-stl/APKBUILD | 2 +- backports/py3-pathvalidate/APKBUILD | 2 +- backports/py3-pivy/APKBUILD | 2 +- backports/py3-utils/APKBUILD | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backports/py3-codespell/APKBUILD b/backports/py3-codespell/APKBUILD index 3eba852..c33abbb 100644 --- a/backports/py3-codespell/APKBUILD +++ b/backports/py3-codespell/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-codespell _pkgname=${pkgname#py3-} pkgver=2.2.6 -pkgrel=0 +pkgrel=2 pkgdesc="Fix common misspellings in text files, primarily source code" url="https://github.com/codespell-project/codespell/" arch="noarch" diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD index 215aaee..d11a554 100644 --- a/backports/py3-colored/APKBUILD +++ b/backports/py3-colored/APKBUILD @@ -2,7 +2,7 @@ pkgname=py3-colored _pyname=${pkgname/py3-/} pkgver=1.4.4 -pkgrel=1 +pkgrel=2 pkgdesc="Simple Python library for color and formatting in terminal" url="https://gitlab.com/dslackw/colored" arch="noarch" diff --git a/backports/py3-fuzzywuzzy/APKBUILD b/backports/py3-fuzzywuzzy/APKBUILD index 1c0c382..ad0fce2 100644 --- a/backports/py3-fuzzywuzzy/APKBUILD +++ b/backports/py3-fuzzywuzzy/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-fuzzywuzzy _pyname=fuzzywuzzy pkgver=0.18.0 -pkgrel=5 +pkgrel=6 pkgdesc="Fuzzy string matching in python" url="https://github.com/seatgeek/fuzzywuzzy" arch="noarch" diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD index 958e76b..6ef430b 100644 --- a/backports/py3-numpy-stl/APKBUILD +++ b/backports/py3-numpy-stl/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=py3-numpy-stl pkgver=3.0.1 -pkgrel=1 +pkgrel=2 pkgdesc="Library for working with STLs" url="https://github.com/WoLpH/numpy-stl" # s390x: no py3-utils diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD index 31729d3..6ea6d42 100644 --- a/backports/py3-pathvalidate/APKBUILD +++ b/backports/py3-pathvalidate/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: lauren n. liberda pkgname=py3-pathvalidate pkgver=3.2.0 -pkgrel=0 +pkgrel=1 pkgdesc="Python library to sanitize/validate a string such as filenames/file-paths/etc" url="https://github.com/thombashi/pathvalidate" arch="noarch" diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD index ec0324e..26054bc 100644 --- a/backports/py3-pivy/APKBUILD +++ b/backports/py3-pivy/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-pivy _pkgname=pivy pkgver=0.6.8 -pkgrel=2 +pkgrel=3 pkgdesc="Python3 bindings for coin" url="https://github.com/coin3d/pivy" # riscv64 blocked by qt5-qtwebengine via py3-pyside2 diff --git a/backports/py3-utils/APKBUILD b/backports/py3-utils/APKBUILD index 4740a2d..b89b2bf 100644 --- a/backports/py3-utils/APKBUILD +++ b/backports/py3-utils/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-utils _pkgname=python-utils pkgver=3.8.1 -pkgrel=0 +pkgrel=1 pkgdesc="Convenient utilities not included with the standard Python install" url="https://github.com/WoLpH/python-utils" arch="noarch" From edf1e0a0c5ffdf4c437c8ac46f83a27f4ac55274 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:55:56 -0400 Subject: [PATCH 245/738] backports/py3-pyside2: new aport --- backports/py3-pyside2/APKBUILD | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 backports/py3-pyside2/APKBUILD diff --git a/backports/py3-pyside2/APKBUILD b/backports/py3-pyside2/APKBUILD new file mode 100644 index 0000000..c7eb151 --- /dev/null +++ b/backports/py3-pyside2/APKBUILD @@ -0,0 +1,75 @@ +# Maintainer: Luca Weiss +pkgname=py3-pyside2 +pkgver=5.15.11 +pkgrel=0 +pkgdesc="Enables the use of Qt5 APIs in Python applications" +url="https://doc.qt.io/qtforpython-5/" +# armhf blocked by shiboken2 +arch="all !armhf" +license="LGPL-3.0-only AND GPL-2.0-only" +_llvmver=15 +depends="py3-shiboken2" +makedepends=" + clang$_llvmver-dev + cmake + libshiboken2-dev + qt5-qt3d-dev + qt5-qtbase-dev + qt5-qtcharts-dev + qt5-qtdatavis3d-dev + qt5-qtdeclarative-dev + qt5-qtlocation-dev + qt5-qtmultimedia-dev + qt5-qtquickcontrols2-dev + qt5-qtremoteobjects-dev + qt5-qtscript-dev + qt5-qtscxml-dev + qt5-qtsensors-dev + qt5-qtserialport-dev + qt5-qtspeech-dev + qt5-qtsvg-dev + qt5-qttools-dev + qt5-qtwebchannel-dev + qt5-qtwebsockets-dev + qt5-qtx11extras-dev + qt5-qtxmlpatterns-dev + samurai + shiboken2 + py3-setuptools + py3-zope-event + " +case "$CARCH" in +armv7|aarch64|x86|x86_64) + makedepends="$makedepends qt5-qtwebengine-dev" + ;; +esac +subpackages="$pkgname-dev" +source="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/pyside-setup-opensource-src-$pkgver.tar.xz" +builddir="$srcdir/pyside-setup-opensource-src-$pkgver" +options="!check" # Tests fail + +build() { + export LLVM_INSTALL_DIR=/usr/lib/llvm$_llvmver + cmake -B build -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DBUILD_SHARED_LIBS=True \ + -DCMAKE_BUILD_TYPE=None \ + -DPYTHON_EXECUTABLE=/usr/bin/python3 \ + -DBUILD_TESTS=OFF \ + sources/pyside2 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build + + # Install egg info + export PATH="/usr/lib/qt5/bin:$PATH" + python3 setup.py egg_info --build-type=pyside2 + pythonpath="$(python3 -c "from sysconfig import get_path; print(get_path('platlib'))")" + cp -r PySide2.egg-info "$pkgdir/$pythonpath" +} + +sha512sums=" +377b3f6a793313cf7f5bea0dcef6630bac32d79b247e213d0b1b719805b35692aa8dd9a8896c75c6266f05af38809f574051d64b1a2f958a48c90167feccfb91 pyside-setup-opensource-src-5.15.11.tar.xz +" From 9a92d96a50fbc5556a8e54e709018677d33d1608 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 15 Apr 2024 23:57:27 -0400 Subject: [PATCH 246/738] backports/shiboken2: new aport --- backports/shiboken2/APKBUILD | 94 ++++++++++++++++ backports/shiboken2/numpy-1.23.patch | 15 +++ backports/shiboken2/py3.11.patch | 162 +++++++++++++++++++++++++++ 3 files changed, 271 insertions(+) create mode 100644 backports/shiboken2/APKBUILD create mode 100644 backports/shiboken2/numpy-1.23.patch create mode 100644 backports/shiboken2/py3.11.patch diff --git a/backports/shiboken2/APKBUILD b/backports/shiboken2/APKBUILD new file mode 100644 index 0000000..21abb74 --- /dev/null +++ b/backports/shiboken2/APKBUILD @@ -0,0 +1,94 @@ +# Contributor: Leo +# Maintainer: +pkgname=shiboken2 +pkgver=5.15.10 +pkgrel=0 +pkgdesc="CPython bindings generator for C++ libraries" +url="https://wiki.qt.io/Qt_for_Python/Shiboken" +arch="all !armhf" # qt5-qtxmlpatterns -> qt5-qtdeclarative +license="GPL-2.0-or-later" +_llvmver=15 +depends_dev="python3-dev" +makedepends=" + $depends_dev + clang$_llvmver-dev + cmake + libxml2-dev + libxslt-dev + llvm$_llvmver-dev + py3-numpy-dev + py3-setuptools + qt5-qtbase-dev + qt5-qtxmlpatterns-dev + samurai + " +subpackages="lib$pkgname:libs lib$pkgname-dev py3-$pkgname:py3" +source="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/pyside-setup-opensource-src-$pkgver.tar.xz + numpy-1.23.patch + py3.11.patch + " +builddir="$srcdir/pyside-setup-opensource-src-$pkgver" + +provides="shiboken=$pkgver-r$pkgrel" # For backward compatibility +replaces="shiboken" # For backward compatibility + +prepare() { + default_prepare + sed -e 's|0x030AFFFF|0x030BFFFF|' -i sources/shiboken2/libshiboken/pep384impl.h +} + +build() { + export LLVM_INSTALL_DIR=/usr/lib/llvm$_llvmver + cmake -B build -S sources/shiboken2 \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_BUILD_TYPE=None \ + -DBUILD_TESTS=OFF \ + -DUSE_PYTHON_VERSION=3 + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +libs() { + license="LGPL-2.1-or-later" + default_libs +} + +dev() { + license="LGPL-2.1-or-later" + default_dev + provides="shiboken-dev=$pkgver-r$pkgrel" + replaces="shiboken-dev" + depends=" + $depends_dev + lib$pkgname=$pkgver-r$pkgrel + $pkgname=$pkgver-r$pkgrel + py3-$pkgname=$pkgver-r$pkgrel + " +} + +py3() { + license="LGPL-2.1-or-later" + depends="" + pkgdesc="Python3 shiboken bindings" + mkdir -p "$subpkgdir"/usr/lib + mv "$pkgdir"/usr/lib/python3* "$subpkgdir"/usr/lib + provides="py3-shiboken=$pkgver-r$pkgrel" # For backward compatibility + replaces="py3-shiboken" # For backward compatibility + + # Install egg info + cd "$builddir" + export PATH="/usr/lib/qt5/bin:$PATH" + python3 setup.py egg_info --build-type=shiboken2 + pythonpath="$(python3 -c "from sysconfig import get_path; print(get_path('platlib'))")" + cp -r shiboken2.egg-info "$subpkgdir/$pythonpath" +} + +sha512sums=" +dc548ab870fcc5cc637de1bcb2f428527c650287fdb3720a3ade4638cc0bb12bc4a1ed87e7f6a4ec730a26742e08ceec806bcac6af91c7a01ddc0ce7980a79d2 pyside-setup-opensource-src-5.15.10.tar.xz +449b4f4b1717b131c05e798549d49186f73215b893843ccae4c434dd95ad3f4dce0f886fe5cbd3443100d4852cb6b3d6a6d2f0a102f69f2a095bb6c500d69244 numpy-1.23.patch +985ff9a10da017db2fcf1526aa1d3502a22c29c7a640e9f8a46bc67ed2acea74f6eec4daa1baf04b90fbdbffe80ecce07aaa0f267783ff66f279120f1ff64ec5 py3.11.patch +" diff --git a/backports/shiboken2/numpy-1.23.patch b/backports/shiboken2/numpy-1.23.patch new file mode 100644 index 0000000..eb18637 --- /dev/null +++ b/backports/shiboken2/numpy-1.23.patch @@ -0,0 +1,15 @@ +diff --git a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp +index 996968f..a072dfd 100644 +--- a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp ++++ b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp +@@ -116,8 +116,8 @@ std::ostream &operator<<(std::ostream &str, PyArrayObject *o) + str << " NPY_ARRAY_NOTSWAPPED"; + if ((flags & NPY_ARRAY_WRITEABLE) != 0) + str << " NPY_ARRAY_WRITEABLE"; +- if ((flags & NPY_ARRAY_UPDATEIFCOPY) != 0) +- str << " NPY_ARRAY_UPDATEIFCOPY"; ++ if ((flags & NPY_ARRAY_WRITEBACKIFCOPY) != 0) ++ str << " NPY_ARRAY_WRITEBACKIFCOPY"; + } else { + str << '0'; + } diff --git a/backports/shiboken2/py3.11.patch b/backports/shiboken2/py3.11.patch new file mode 100644 index 0000000..8b7ac02 --- /dev/null +++ b/backports/shiboken2/py3.11.patch @@ -0,0 +1,162 @@ +From b64ad27d8dfeeecaaa8a98051252a32c9d998df4 Mon Sep 17 00:00:00 2001 +From: Friedemann Kleint +Date: Thu, 9 Jun 2022 16:50:41 +0200 +Subject: [PATCH] libshiboken: Fix a crash in Shiboken::Object::isValid() for + Python 3.11 + +The function is passed type objects for class methods, which caused +it to crash. + +The first clause did not catch this, and so it was cast to SbkObject +below. + +Add a type check to prevent this. + +Pick-to: 6.3 6.2 5.15 +Task-number: PYSIDE-1960 +Change-Id: Icfdd6fefb7156ac5961444bd5395109849a1d66e +Reviewed-by: Christian Tismer +Reviewed-by: Qt CI Bot +--- + sources/shiboken2/libshiboken/basewrapper.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/build_scripts/config.py b/build_scripts/config.py +index 00cbd3f..63e52a2 100644 +--- a/build_scripts/config.py ++++ b/build_scripts/config.py +@@ -94,6 +94,8 @@ class Config(object): + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', ++ 'Programming Language :: Python :: 3.11', ++ 'Programming Language :: Python :: 3.12', + ] + + self.setup_script_dir = None +diff --git a/sources/pyside2/libpyside/pysideqflags.cpp b/sources/pyside2/libpyside/pysideqflags.cpp +index 8b224f2..784082a 100644 +--- a/sources/pyside2/libpyside/pysideqflags.cpp ++++ b/sources/pyside2/libpyside/pysideqflags.cpp +@@ -192,7 +192,7 @@ namespace QFlags + } + newspec.slots = SbkNewQFlagsType_spec.slots; + PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec); +- Py_TYPE(type) = &PyType_Type; ++ Py_SET_TYPE(type, &PyType_Type); + + PySideQFlagsType *flagsType = reinterpret_cast(type); + PepType_PFTP(flagsType)->converterPtr = &PepType_PFTP(flagsType)->converter; +diff --git a/sources/pyside2/libpyside/pysidesignal.cpp b/sources/pyside2/libpyside/pysidesignal.cpp +index b5069a0..ce89a9d 100644 +--- a/sources/pyside2/libpyside/pysidesignal.cpp ++++ b/sources/pyside2/libpyside/pysidesignal.cpp +@@ -162,7 +162,7 @@ PyTypeObject *PySideSignalTypeF(void) + if (!type) { + type = reinterpret_cast(SbkType_FromSpec(&PySideSignalType_spec)); + PyTypeObject *hold = Py_TYPE(type); +- Py_TYPE(type) = PySideMetaSignalTypeF(); ++ Py_SET_TYPE(type, PySideMetaSignalTypeF()); + Py_INCREF(Py_TYPE(type)); + Py_DECREF(hold); + } +diff --git a/sources/pyside2/libpyside/pysideweakref.cpp b/sources/pyside2/libpyside/pysideweakref.cpp +index cd90634..730990f 100644 +--- a/sources/pyside2/libpyside/pysideweakref.cpp ++++ b/sources/pyside2/libpyside/pysideweakref.cpp +@@ -90,7 +90,7 @@ PyObject *create(PyObject *obj, PySideWeakRefFunction func, void *userData) + + if (Py_TYPE(PySideCallableObjectTypeF()) == 0) + { +- Py_TYPE(PySideCallableObjectTypeF()) = &PyType_Type; ++ Py_SET_TYPE(PySideCallableObjectTypeF(), &PyType_Type); + PyType_Ready(PySideCallableObjectTypeF()); + } + +diff --git a/sources/shiboken2/libshiboken/basewrapper.cpp b/sources/shiboken2/libshiboken/basewrapper.cpp +index 7ac7fad..e2eccd0 100644 +--- a/sources/shiboken2/libshiboken/basewrapper.cpp ++++ b/sources/shiboken2/libshiboken/basewrapper.cpp +@@ -377,7 +377,7 @@ SbkObjectType *SbkObject_TypeF(void) + static PyTypeObject *type = nullptr; + if (!type) { + type = reinterpret_cast(SbkType_FromSpec(&SbkObject_Type_spec)); +- Py_TYPE(type) = SbkObjectType_TypeF(); ++ Py_SET_TYPE(type, SbkObjectType_TypeF()); + Py_INCREF(Py_TYPE(type)); + type->tp_weaklistoffset = offsetof(SbkObject, weakreflist); + type->tp_dictoffset = offsetof(SbkObject, ob_dict); +@@ -1160,7 +1160,7 @@ introduceWrapperType(PyObject *enclosingObject, + typeSpec->slots[0].pfunc = reinterpret_cast(baseType ? baseType : SbkObject_TypeF()); + + PyObject *heaptype = SbkType_FromSpecWithBases(typeSpec, baseTypes); +- Py_TYPE(heaptype) = SbkObjectType_TypeF(); ++ Py_SET_TYPE(heaptype, SbkObjectType_TypeF()); + Py_INCREF(Py_TYPE(heaptype)); + auto *type = reinterpret_cast(heaptype); + #if PY_VERSION_HEX < 0x03000000 +@@ -1525,6 +1525,7 @@ bool setCppPointer(SbkObject *sbkObj, PyTypeObject *desiredType, void *cptr) + bool isValid(PyObject *pyObj) + { + if (!pyObj || pyObj == Py_None ++ || PyType_Check(pyObj) != 0 + || Py_TYPE(Py_TYPE(pyObj)) != SbkObjectType_TypeF()) { + return true; + } +diff --git a/sources/shiboken2/libshiboken/sbkenum.cpp b/sources/shiboken2/libshiboken/sbkenum.cpp +index 7dc73df..9459e42 100644 +--- a/sources/shiboken2/libshiboken/sbkenum.cpp ++++ b/sources/shiboken2/libshiboken/sbkenum.cpp +@@ -754,7 +754,7 @@ newTypeWithName(const char *name, + PyTuple_SetItem(bases, 0, reinterpret_cast(basetype)); + auto *type = reinterpret_cast(SbkType_FromSpecWithBases(&newspec, bases)); + PyErr_Print(); +- Py_TYPE(type) = SbkEnumType_TypeF(); ++ Py_SET_TYPE(type, SbkEnumType_TypeF()); + + auto *enumType = reinterpret_cast(type); + PepType_SETP(enumType)->cppName = cppName; +diff --git a/sources/shiboken2/libshiboken/sbkstring.cpp b/sources/shiboken2/libshiboken/sbkstring.cpp +index 077fb53..a9d451c 100644 +--- a/sources/shiboken2/libshiboken/sbkstring.cpp ++++ b/sources/shiboken2/libshiboken/sbkstring.cpp +@@ -41,8 +41,14 @@ + #include "sbkstaticstrings_p.h" + #include "autodecref.h" + +-#include +-#include ++#if PY_VERSION_HEX >= 0x030B0000 || defined(Py_LIMITED_API) ++# define USE_INTERN_STRINGS ++#endif ++ ++#ifndef USE_INTERN_STRINGS ++# include ++# include ++#endif + + namespace Shiboken + { +@@ -233,6 +239,13 @@ Py_ssize_t len(PyObject *str) + // PyObject *attr = PyObject_GetAttr(obj, name()); + // + ++#ifdef USE_INTERN_STRINGS ++PyObject *createStaticString(const char *str) ++{ ++ return PyUnicode_InternFromString(str); ++} ++#else ++ + using StaticStrings = std::unordered_set; + + static void finalizeStaticStrings(); // forward +@@ -283,6 +296,8 @@ PyObject *createStaticString(const char *str) + return result; + } + ++#endif // !USE_INTERN_STRINGS ++ + /////////////////////////////////////////////////////////////////////// + // + // PYSIDE-1019: Helper function for snake_case vs. camelCase names From b22efac80a3f21562d85d665229cee9d0e3adf6c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 00:15:30 -0400 Subject: [PATCH 247/738] backports/py3-pyside2: disabled due to segfault --- backports/py3-pyside2/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-pyside2/APKBUILD b/backports/py3-pyside2/APKBUILD index c7eb151..aabc0a6 100644 --- a/backports/py3-pyside2/APKBUILD +++ b/backports/py3-pyside2/APKBUILD @@ -5,7 +5,7 @@ pkgrel=0 pkgdesc="Enables the use of Qt5 APIs in Python applications" url="https://doc.qt.io/qtforpython-5/" # armhf blocked by shiboken2 -arch="all !armhf" +#arch="all !armhf" license="LGPL-3.0-only AND GPL-2.0-only" _llvmver=15 depends="py3-shiboken2" From 5dddb230f9f1c113a7bd2440cd54c2cb1326324d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 00:15:48 -0400 Subject: [PATCH 248/738] backports/py3-pivy: disable to due broken py3-pyside2 --- backports/py3-pivy/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD index 26054bc..e681d20 100644 --- a/backports/py3-pivy/APKBUILD +++ b/backports/py3-pivy/APKBUILD @@ -8,7 +8,8 @@ pkgdesc="Python3 bindings for coin" url="https://github.com/coin3d/pivy" # riscv64 blocked by qt5-qtwebengine via py3-pyside2 # py3-pyside2 is not available on armhf -arch="all !armhf !riscv64" +# py3-pyside2 broken +#arch="all !armhf !riscv64" license="ISC" depends="py3-pyside2" makedepends="swig soqt-dev qt5-qtbase-dev python3-dev glu-dev cmake samurai" From 8e13b2c4425a1d132e56a7bce97ce0c4f4508c5f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 07:45:20 -0400 Subject: [PATCH 249/738] backports/py3-flask-limiter: rebuild against python 3.12 --- backports/py3-flask-limiter/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index bd9df29..491f4cf 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: lauren n. liberda pkgname=py3-flask-limiter pkgver=3.5.0 -pkgrel=0 +pkgrel=1 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" arch="noarch" From 11ac1c742cc69971bb6953541bc2ecc9d7798e08 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 08:57:45 -0400 Subject: [PATCH 250/738] Revert "backports/py3-validators: drop for in community" This reverts commit cd8c8dc55de69de3c4694324e7d06a162e26da15. --- backports/py3-validators/APKBUILD | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 backports/py3-validators/APKBUILD diff --git a/backports/py3-validators/APKBUILD b/backports/py3-validators/APKBUILD new file mode 100644 index 0000000..b4d0dd2 --- /dev/null +++ b/backports/py3-validators/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Leo +# Maintainer: +pkgname=py3-validators +pkgver=0.20.0 +pkgrel=0 +pkgdesc="Python3 Data Validation for Humans" +url="https://github.com/python-validators/validators" +arch="noarch" +license="MIT" +depends="py3-decorator py3-six" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-isort py3-pytest py3-flake8" +subpackages="$pkgname-pyc" +source="https://github.com/python-validators/validators/archive/$pkgver/py3-validators-$pkgver.tar.gz" +builddir="$srcdir/validators-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +45a07c061022da453c31fc946950be3a701f36afbf0e0eb82b91f4bdb26c4d2d0ab47f6958ac88fd2e0a1563201e946014a5cb93cfa1c6710411982852d571c7 py3-validators-0.20.0.tar.gz +" From 5e65c0abb98adc00a59d52ad0aca20ef83f552f8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 08:58:28 -0400 Subject: [PATCH 251/738] backports/py3-validators: rebuild against python 3.12 --- backports/py3-validators/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-validators/APKBUILD b/backports/py3-validators/APKBUILD index b4d0dd2..f14a156 100644 --- a/backports/py3-validators/APKBUILD +++ b/backports/py3-validators/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: pkgname=py3-validators pkgver=0.20.0 -pkgrel=0 +pkgrel=1 pkgdesc="Python3 Data Validation for Humans" url="https://github.com/python-validators/validators" arch="noarch" From f3779d8d89298d84867e6c0110960eaf7b447668 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 10:09:29 -0400 Subject: [PATCH 252/738] backports/py3-pytube: new aport --- backports/py3-pytube/APKBUILD | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 backports/py3-pytube/APKBUILD diff --git a/backports/py3-pytube/APKBUILD b/backports/py3-pytube/APKBUILD new file mode 100644 index 0000000..6d27b69 --- /dev/null +++ b/backports/py3-pytube/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-pytube +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=pytube +pkgver=15.0.0 +pkgrel=1 +pkgdesc="Python 3 library for downloading YouTube Videos." +url="https://pypi.python.org/project/pytube" +arch="noarch" +license="Unlicense" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/pytube/pytube/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" +# 7/131 units failing due to: +# AttributeError: 'NoneType' object has no attribute 'register_on_progress_callback' +# AttributeError: 'YouTube' object has no attribute 'stream_monostate' +# StopIteration +options="!check" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +fc28d87c56bae9da3def68224a03687cc521c26e6f38dd41abe81e84f91bb2cab73dc8c7dbbc388787cf066f7d7304c78162cc60c544b99e75187b760c64b4a3 py3-pytube-15.0.0.tar.gz +" From da35bc172081c57c03bb6252b1ef643fc2dd58cd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 11:03:27 -0400 Subject: [PATCH 253/738] backports/py3-django-auth-ldap: add aport --- backports/py3-django-auth-ldap/APKBUILD | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 backports/py3-django-auth-ldap/APKBUILD diff --git a/backports/py3-django-auth-ldap/APKBUILD b/backports/py3-django-auth-ldap/APKBUILD new file mode 100644 index 0000000..91b8055 --- /dev/null +++ b/backports/py3-django-auth-ldap/APKBUILD @@ -0,0 +1,51 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-auth-ldap +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-auth-ldap +pkgver=4.8.0 +pkgrel=1 +pkgdesc="Django LDAP authentication backend" +url="https://pypi.python.org/project/django-auth-ldap" +# s390x | riscv64: test failure +arch="noarch !s390x !riscv64" +license="BSD" +# RuntimeError: slapd exited before opening port +options="!check" +depends="py3-django py3-ldap" +checkdepends=" + py3-pytest + py3-pytest-django + py3-pytest-black + py3-isort + py3-flake8 + openldap + openldap-back-mdb + openldap-clients + openldap-overlay-syncprov + " +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/django-auth-ldap/django-auth-ldap/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -Wa -b -m django test --settings tests.settings +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +559d6c0a556ccab2a0440866db9e1260b236e0bd4de92d07082660118b99886e7d362824cf0453de1f1d87ce1d5b5ab23d5181b8c970086d3a100ae32a29c482 py3-django-auth-ldap-4.8.0.tar.gz +" From 2a65046a45215d1843399815f1e2f5aecd1f06a3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 11:03:39 -0400 Subject: [PATCH 254/738] backports/py3-webdavclient3: add aport --- backports/py3-webdavclient3/APKBUILD | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 backports/py3-webdavclient3/APKBUILD diff --git a/backports/py3-webdavclient3/APKBUILD b/backports/py3-webdavclient3/APKBUILD new file mode 100644 index 0000000..482d2ac --- /dev/null +++ b/backports/py3-webdavclient3/APKBUILD @@ -0,0 +1,39 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-webdavclient3 +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=webdav-client-python-3 +pkgver=3.14.6 +pkgrel=0 +pkgdesc="WebDAV client" +url="https://pypi.python.org/project/webdavclient3" +arch="noarch" +license="MIT" +depends="py3-requests py3-lxml py3-dateutil" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source="$pkgname-$pkgver.tar.gz::https://github.com/ezhov-evgeny/webdav-client-python-3/archive/refs/tags/v$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" +options="!check" # Test suite needs more work to be setup to work in aports env + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +4621dfe3fdde4a60a7580b37aaf2bf778ebae1615946e9ff5aedcf3d2d17b3e60511a4522f8023bd4756139c66027149a2afafbd07bf02d029d811bec172057d py3-webdavclient3-3.14.6.tar.gz +" From ca8eea2b548c8cf2376d1fa38cc63cec885e3826 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 12:23:01 -0400 Subject: [PATCH 255/738] backports/py3-webdavclient3: bump --- backports/py3-webdavclient3/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-webdavclient3/APKBUILD b/backports/py3-webdavclient3/APKBUILD index 482d2ac..0e47759 100644 --- a/backports/py3-webdavclient3/APKBUILD +++ b/backports/py3-webdavclient3/APKBUILD @@ -4,7 +4,7 @@ pkgname=py3-webdavclient3 #_pkgreal is used by apkbuild-pypi to find modules at PyPI _pkgreal=webdav-client-python-3 pkgver=3.14.6 -pkgrel=0 +pkgrel=1 pkgdesc="WebDAV client" url="https://pypi.python.org/project/webdavclient3" arch="noarch" From d0300ac8b32b23b8e3baed57a50d3105c3e1d037 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:37:54 -0400 Subject: [PATCH 256/738] user/authentik: rebuild for python3.12 --- user/authentik/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 31bd16b..05f723c 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=authentik pkgver=2024.2.2 -pkgrel=0 +pkgrel=1 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" # s390x: missing py3-celery py3-flower and py3-kombu From 36ed3813a0c869fb438dd1c50781bed3ca273e65 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:37:57 -0400 Subject: [PATCH 257/738] user/calibre-web: rebuild for python3.12 --- user/calibre-web/APKBUILD | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/user/calibre-web/APKBUILD b/user/calibre-web/APKBUILD index 07d9d70..df1b79a 100644 --- a/user/calibre-web/APKBUILD +++ b/user/calibre-web/APKBUILD @@ -1,9 +1,8 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=calibre-web pkgver=0.6.21 -pkgrel=0 +pkgrel=1 pkgdesc="Web app for browsing, reading and downloading eBooks stored in a Calibre database" arch='noarch' url="https://github.com/janeczku/calibre-web" @@ -11,7 +10,7 @@ license='GPL-3.0-only' depends=" py3-apscheduler py3-babel - py3-backports-abc + py3-backports_abc py3-blinker py3-chardet py3-flask-babel From 8cddad5d7278ac9cd7a940e1818eb8ae87c3dc43 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:37:58 -0400 Subject: [PATCH 258/738] user/grpc: rebuild for python3.12 --- user/grpc/APKBUILD | 4 +- user/grpc/cython3.patch | 172 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 user/grpc/cython3.patch diff --git a/user/grpc/APKBUILD b/user/grpc/APKBUILD index 2ebdecb..1572117 100644 --- a/user/grpc/APKBUILD +++ b/user/grpc/APKBUILD @@ -3,7 +3,7 @@ # Maintainer: wener pkgname=grpc pkgver=1.58.0 -pkgrel=1 +pkgrel=2 pkgdesc="The C based gRPC" url="https://grpc.io/" arch="all" @@ -73,6 +73,7 @@ source="https://github.com/grpc/grpc/archive/v$pkgver/grpc-v$pkgver.tar.gz ruby-use-shared-libs.patch ruby-use-system-certs.patch makefile-use-system-abseil.patch + cython3.patch " options="net !check" # sometimes hang indefinitely on builders @@ -268,4 +269,5 @@ fb2fd211a22dd777cf4df39a9dd72e5c8014f1546a89d3910b006503aac80a74d5797705e02911e9 7123bf1bbc48ceb303ce1e9820ea45a06dabd25e20e3c1c116ef68e629e80f229cf20314c415d74f0c5c1725f23a00b446656e0cffba3dcd3cc766ae29d8fb2f ruby-use-shared-libs.patch 631af4b9ac29c1ebabb2c88394ea2993e36cec1beda38195e1587dbd9d3c8c9eef75a17d2326d3cd2e682de551401216075ba08fdc501c098b8092d718ded381 ruby-use-system-certs.patch 89e260934da83eb45fa6b73884cba1b1c30f99c0eb883a726e2d36ee4788246f4c6fa1b201077038af956bcb58e625f83bedba4f186c711785ec240373ce4fc5 makefile-use-system-abseil.patch +896d2771fbb726db97efc7a76687a8fddfae18b0492977fc1f7cec4002803f7aed29e8276c94c6b60a06ecfe3ee7795d4ec3f8f90031dd3eda32d3e23dc9c98c cython3.patch " diff --git a/user/grpc/cython3.patch b/user/grpc/cython3.patch new file mode 100644 index 0000000..9068927 --- /dev/null +++ b/user/grpc/cython3.patch @@ -0,0 +1,172 @@ +From b3277bac1585ddee88a170b0a95c260d909cce9c Mon Sep 17 00:00:00 2001 +From: Atri Bhattacharya +Date: Sat, 24 Feb 2024 04:06:08 +0530 +Subject: [PATCH] [python] Cython 3 compatibility: declare functions noexcept. + +In Cython 3, cdef functions that really will not raise exceptions must +be declared as `noexcept`. Fixed by this commit. + +Update requirements to `cython >= 3.0` in requirements*.txt and +setup.py. + +Fixes issue #33918. +--- + requirements.bazel.txt | 2 +- + requirements.txt | 2 +- + setup.py | 2 +- + .../grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi | 2 +- + .../grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi | 2 +- + src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi | 2 +- + src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi | 6 +++--- + src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi | 6 +++--- + src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi | 6 +++--- + 9 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/requirements.bazel.txt b/requirements.bazel.txt +index f46432cc88891..905c092ce4c33 100644 +--- a/requirements.bazel.txt ++++ b/requirements.bazel.txt +@@ -1,6 +1,6 @@ + # GRPC Python setup requirements + coverage==4.5.4 +-cython==0.29.21 ++cython==3.0.0 + protobuf>=3.5.0.post1, < 4.0dev + wheel==0.38.1 + oauth2client==4.1.0 +diff --git a/requirements.txt b/requirements.txt +index 05390850559f1..56169434b1b78 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -1,5 +1,5 @@ + # GRPC Python setup requirements + coverage>=4.0 +-cython>=0.29.8,<3.0.0rc1 ++cython>=3.0.0 + protobuf>=4.21.3,<5.0dev + wheel>=0.29 +diff --git a/setup.py b/setup.py +index 2ce5fef422316..8b4ce5c16736a 100644 +--- a/setup.py ++++ b/setup.py +@@ -539,7 +539,7 @@ def cython_extensions_and_necessity(): + sys.stderr.write( + "We could not find Cython. Setup may take 10-20 minutes.\n" + ) +- SETUP_REQUIRES += ("cython>=0.23,<3.0.0rc1",) ++ SETUP_REQUIRES += ("cython>=3.0.0",) + + COMMAND_CLASS = { + "doc": commands.SphinxDocumentation, +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi +index e54e5107547c1..26edbdb917b10 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi +@@ -48,7 +48,7 @@ cdef class CallbackWrapper: + @staticmethod + cdef void functor_run( + grpc_completion_queue_functor* functor, +- int succeed) ++ int succeed) noexcept + + cdef grpc_completion_queue_functor *c_functor(self) + +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi +index 14a0098fc2041..2b0df0e5ce7f7 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi +@@ -50,7 +50,7 @@ cdef class CallbackWrapper: + @staticmethod + cdef void functor_run( + grpc_completion_queue_functor* functor, +- int success): ++ int success) noexcept: + cdef CallbackContext *context = functor + cdef object waiter = context.waiter + if not waiter.cancelled(): +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +index 74a3f16d72dbb..600c0f304e067 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi +@@ -316,7 +316,7 @@ def server_credentials_ssl_dynamic_cert_config(initial_cert_config, + return credentials + + cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapper( +- void* user_data, grpc_ssl_server_certificate_config **config) with gil: ++ void* user_data, grpc_ssl_server_certificate_config **config) noexcept with gil: + # This is a credentials.ServerCertificateConfig + cdef ServerCertificateConfig cert_config = None + if not user_data: +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi +index 13a02434787ba..b300883abae81 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi +@@ -12,10 +12,10 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + +-cdef void __prefork() nogil ++cdef void __prefork() noexcept nogil + + +-cdef void __postfork_parent() nogil ++cdef void __postfork_parent() noexcept nogil + + +-cdef void __postfork_child() nogil +\ No newline at end of file ++cdef void __postfork_child() noexcept nogil +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi +index 565f483b2ae00..d901cfddf4321 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi +@@ -35,7 +35,7 @@ _GRPC_ENABLE_FORK_SUPPORT = ( + + _fork_handler_failed = False + +-cdef void __prefork() nogil: ++cdef void __prefork() noexcept nogil: + with gil: + global _fork_handler_failed + _fork_handler_failed = False +@@ -49,14 +49,14 @@ cdef void __prefork() nogil: + _fork_handler_failed = True + + +-cdef void __postfork_parent() nogil: ++cdef void __postfork_parent() noexcept nogil: + with gil: + with _fork_state.fork_in_progress_condition: + _fork_state.fork_in_progress = False + _fork_state.fork_in_progress_condition.notify_all() + + +-cdef void __postfork_child() nogil: ++cdef void __postfork_child() noexcept nogil: + with gil: + try: + if _fork_handler_failed: +diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi +index da4b81bd97e65..f59410073b736 100644 +--- a/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi ++++ b/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi +@@ -13,16 +13,16 @@ + # limitations under the License. + + # TODO(https://github.com/grpc/grpc/issues/15662): Reform this. +-cdef void* _copy_pointer(void* pointer): ++cdef void* _copy_pointer(void* pointer) noexcept: + return pointer + + + # TODO(https://github.com/grpc/grpc/issues/15662): Reform this. +-cdef void _destroy_pointer(void* pointer): ++cdef void _destroy_pointer(void* pointer) noexcept: + pass + + +-cdef int _compare_pointer(void* first_pointer, void* second_pointer): ++cdef int _compare_pointer(void* first_pointer, void* second_pointer) noexcept: + if first_pointer < second_pointer: + return -1 + elif first_pointer > second_pointer: From 12511e2a64ef9877f6db6d245a888a5d1326ec1f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:37:59 -0400 Subject: [PATCH 259/738] user/jellysub: rebuild for python3.12 --- user/jellysub/APKBUILD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/user/jellysub/APKBUILD b/user/jellysub/APKBUILD index 78e6356..fb42a9d 100644 --- a/user/jellysub/APKBUILD +++ b/user/jellysub/APKBUILD @@ -1,10 +1,9 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=jellysub _pkgname=$pkgname pkgver=0.0.6 -pkgrel=0 +pkgrel=1 arch="noarch" pkgdesc="Jellysub is an HTTP service which sits between Subsonic-compatible clients and a Jellyfin server." url="https://pypi.python.org/project/$pkgname" From b7deeb738fde8bf51161ff7e09f60b0cef5db0e2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:00 -0400 Subject: [PATCH 260/738] user/kb: rebuild for python3.12 --- user/kb/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/kb/APKBUILD b/user/kb/APKBUILD index 5a56196..a8f9c74 100644 --- a/user/kb/APKBUILD +++ b/user/kb/APKBUILD @@ -3,7 +3,7 @@ pkgname=kb _pkgreal=kb-manager pkgver=0.1.7 -pkgrel=1 +pkgrel=2 pkgdesc="A command line minimalist knowledge base manager" arch="noarch" url="https://github.com/gnebbia/kb" From ea5b5e2f608c9caa9c5e641c87f8ded51a258362 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:02 -0400 Subject: [PATCH 261/738] user/mastodon: rebuild for python3.12 --- user/mastodon/APKBUILD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 6db4457..29f1f81 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -1,11 +1,10 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=mastodon _pkgname=$pkgname pkgver=4.2.8 _gittag=v$pkgver -pkgrel=0 +pkgrel=1 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" arch="x86_64" url="https://github.com/mastodon/mastodon" From 02aec4ffd3ee108e500a6d783c2c586326ec9fa8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:03 -0400 Subject: [PATCH 262/738] user/paperless-ngx: rebuild for python3.12 --- user/paperless-ngx/APKBUILD | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/user/paperless-ngx/APKBUILD b/user/paperless-ngx/APKBUILD index 522ed33..3e017fb 100644 --- a/user/paperless-ngx/APKBUILD +++ b/user/paperless-ngx/APKBUILD @@ -1,9 +1,8 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=paperless-ngx pkgver=1.17.4 -pkgrel=0 +pkgrel=1 pkgdesc="A community-supported supercharged version of paperless: scan, index and archive all your physical documents" url="https://github.com/paperless-ngx/paperless-ngx" license="GPL-3.0-only" @@ -37,6 +36,8 @@ depends=" py3-celery py3-chardet py3-charset-normalizer + py3-channels + py3-channels_redis py3-click py3-concurrent-log-handler py3-constantly @@ -45,8 +46,6 @@ depends=" py3-dateparser py3-deprecation py3-django-allauth - py3-django-channels - py3-django-channels-redis py3-django-compression-middleware py3-django-celery-results py3-django-cors-headers @@ -54,7 +53,7 @@ depends=" py3-django-filter py3-django-guardian py3-django-picklefield - py3-django-q + py3-django-q2 py3-django-rest-framework py3-django-rest-framework-guardian py3-filelock @@ -68,9 +67,9 @@ depends=" py3-idna py3-imap-tools py3-incremental - py3-inotify-simple + py3-inotify_simple py3-inotifyrecursive - py3-ipware + py3-python-ipware py3-joblib py3-langdetect py3-lxml From ddebcf35a4b7a07aa5bd4ff68f633336d29ca8cf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:05 -0400 Subject: [PATCH 263/738] user/py3-microdata: rebuild for python3.12 --- user/py3-microdata/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/py3-microdata/APKBUILD b/user/py3-microdata/APKBUILD index 6af9534..7d310b6 100644 --- a/user/py3-microdata/APKBUILD +++ b/user/py3-microdata/APKBUILD @@ -4,7 +4,7 @@ pkgname=py3-microdata #_pkgreal is used by apkbuild-pypi to find modules at PyPI _pkgreal=microdata pkgver=0.8.0 -pkgrel=0 +pkgrel=1 pkgdesc="html5lib extension for parsing microdata" url="https://pypi.python.org/project/microdata" license="CC0-1.0" From 3d459468bd6ca5ba1931adca4435d270fb99423a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:06 -0400 Subject: [PATCH 264/738] user/py3-python3-saml: rebuild for python3.12 --- user/py3-python3-saml/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/py3-python3-saml/APKBUILD b/user/py3-python3-saml/APKBUILD index d11b7c9..450d060 100644 --- a/user/py3-python3-saml/APKBUILD +++ b/user/py3-python3-saml/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-python3-saml _pkgreal=python3-saml pkgver=1.16.0 -pkgrel=0 +pkgrel=1 pkgdesc="Saml Python Toolkit. Add SAML support to your Python software using this library" url="http://packages.python.org/pypi/python3-saml" arch="noarch" From 736ce391503fd18436e194db681fcbf3b8c90b09 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:07 -0400 Subject: [PATCH 265/738] user/py3-xmlsec: rebuild for python3.12 --- user/py3-xmlsec/APKBUILD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/user/py3-xmlsec/APKBUILD b/user/py3-xmlsec/APKBUILD index 263410e..64489f0 100644 --- a/user/py3-xmlsec/APKBUILD +++ b/user/py3-xmlsec/APKBUILD @@ -1,10 +1,9 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) _pyname=xmlsec pkgname="py3-$_pyname" pkgver=1.3.13 -pkgrel=5 +pkgrel=6 arch="all" pkgdesc="Python bindings for the XML Security Library" url="https://pypi.python.org/project/$_pyname" From 4bb69fce05f27419809b3d9f68a83a47602cd714 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:09 -0400 Subject: [PATCH 266/738] user/rm-extractor: rebuild for python3.12 --- user/rm-extractor/APKBUILD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/user/rm-extractor/APKBUILD b/user/rm-extractor/APKBUILD index 6de5b57..f581976 100644 --- a/user/rm-extractor/APKBUILD +++ b/user/rm-extractor/APKBUILD @@ -1,10 +1,9 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=rm-extractor _gittag=9d37e9437affea379dadb59e646a819b3b9147dd pkgver=0.0.1 -pkgrel=3 +pkgrel=4 pkgdesc="Image extractor for reMarkable firmware files" arch="noarch" url="https://github.com/ddvk/remarkable-update" From a10a4d40b701734b7cb01a459e16d886d30cd521 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:10 -0400 Subject: [PATCH 267/738] user/roxy-wi: rebuild for python3.12 --- user/roxy-wi/APKBUILD | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/user/roxy-wi/APKBUILD b/user/roxy-wi/APKBUILD index 515b04a..93782fb 100644 --- a/user/roxy-wi/APKBUILD +++ b/user/roxy-wi/APKBUILD @@ -1,9 +1,8 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=roxy-wi pkgver=6.3.7.0 -pkgrel=0 +pkgrel=1 pkgdesc="Web interface for managing HAProxy, Nginx and Keepalived servers" arch='noarch' url="https://github.com/Aidaho12/haproxy-wi" From b4c8cce0cf2376bb9d1a42dc8a0645c2657b5fae Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 14 Apr 2024 17:38:11 -0400 Subject: [PATCH 268/738] user/tandoor-recipes: rebuild for python3.12 --- user/tandoor-recipes/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 0d6acea..72a3d33 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=tandoor-recipes pkgver=1.5.12 -pkgrel=0 +pkgrel=1 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." arch="noarch" url="https://github.com/TandoorRecipes/recipes" From 050ac7ca90d458d9fe987a53f1830a4537d674e8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Apr 2024 07:58:01 -0400 Subject: [PATCH 269/738] unmaintained/roxy-wi: move from user --- {user => unmaintained}/roxy-wi/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/roxy-wi/APKBUILD (100%) diff --git a/user/roxy-wi/APKBUILD b/unmaintained/roxy-wi/APKBUILD similarity index 100% rename from user/roxy-wi/APKBUILD rename to unmaintained/roxy-wi/APKBUILD From 708afd7f0e31bb9c58fec6971a1cfb9f368dd180 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Apr 2024 16:28:41 -0400 Subject: [PATCH 270/738] user/zotero: rebuild with firefox 115.10.0 --- user/zotero/APKBUILD | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 4074407..c7182bf 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -2,8 +2,8 @@ # Maintainer: Antoine Martin (ayakael) pkgname=zotero pkgver=7.0.0_beta74 -pkgrel=0 -_fxver=115.9.1 +pkgrel=1 +_fxver=115.10.0 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) # https://www.mozilla.org/firefox/organizations/notes/ @@ -61,6 +61,7 @@ makedepends=" py3-psutil py3-zstandard python3 + rsync sed unzip wasi-sdk @@ -323,7 +324,7 @@ package() { } sha512sums=" -9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz +0626e2c68ce43f24dfc2b9216e2565537ad8781daf4195d53420e1b78d57d0f6360fbe56b0ddbedae3818546c72472c85c1ff2b208c123d32a0543e666f42b65 firefox-115.10.0esr.source.tar.xz 3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch 454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch From 5b0ae29dcab6b472e714e52ae7571e79ad1a4836 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 18 Apr 2024 16:50:05 -0400 Subject: [PATCH 271/738] user/uptime-kuma: upgrade to 1.23.12 --- user/uptime-kuma/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/uptime-kuma/APKBUILD b/user/uptime-kuma/APKBUILD index 0b7766e..c87ab2b 100644 --- a/user/uptime-kuma/APKBUILD +++ b/user/uptime-kuma/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=uptime-kuma -pkgver=1.23.11 +pkgver=1.23.12 pkgrel=0 pkgdesc='A fancy self-hosted monitoring tool' arch="all" @@ -43,7 +43,7 @@ package() { mv "$pkgdir"/usr/share/webapps/uptime-kuma/LICENSE "$pkgdir"/usr/share/licenses/uptime-kuma/. } sha512sums=" -6cd6aef96ac93597334b8fc7987611420b20ee45c5c1348ab42f05865fb679913038fd333416d239c43e047c9995553d2ab8e6fb7a05cea00d290fa05a26fa4e uptime-kuma-1.23.11.tar.gz +2ea10707ddd778990ecbd122d2c66d409218f0182b1f4d9183a3678799c161edb5afa0373874bc0a791b774e2bf3582d245b0ed07365d07569390f1895017ae2 uptime-kuma-1.23.12.tar.gz 0ceddb98a6f318029b8bd8b5a49b55c883e77a5f8fffe2b9b271c9abf0ac52dc7a6ea4dbb4a881124a7857f1e43040f18755c1c2a034479e6a94d2b65a73d847 uptime-kuma.openrc 1dbae536b23e3624e139155abbff383bba3209ff2219983da2616b4376b1a5041df812d1e5164716fc6e967a8446d94baae3b96ee575d400813cc6fdc2cc274e uptime-kuma.conf " From 97356cba4fe32da8aa069787c06fbc5251666d5b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 22 Apr 2024 13:00:10 -0400 Subject: [PATCH 272/738] user/py3-python3-saml: drop for in aports community --- user/py3-python3-saml/APKBUILD | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 user/py3-python3-saml/APKBUILD diff --git a/user/py3-python3-saml/APKBUILD b/user/py3-python3-saml/APKBUILD deleted file mode 100644 index 450d060..0000000 --- a/user/py3-python3-saml/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-python3-saml -_pkgreal=python3-saml -pkgver=1.16.0 -pkgrel=1 -pkgdesc="Saml Python Toolkit. Add SAML support to your Python software using this library" -url="http://packages.python.org/pypi/python3-saml" -arch="noarch" -license="MIT" -depends="py3-xmlsec py3-isodate py3-lxml" -makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/python3-saml/python3-saml-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -715c96f701be3de9002a37198d01715519f11173d37d2870b8d6f20e007440368f76340abfa17ad8556560296a8dfaa999f1774ccb5dd3d9b04b125afc06ac31 py3-python3-saml-1.16.0.tar.gz -" From b2496b6e092af464b8e9751dce788b36304dcd05 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 22 Apr 2024 13:00:22 -0400 Subject: [PATCH 273/738] user/py3-xmlsec: drop for in aports community --- user/py3-xmlsec/253_pkcs11-support.patch | 925 ------------------ user/py3-xmlsec/264_xmlsec3-support.patch | 105 -- .../280_fix-function-deprecation.patch | 35 - user/py3-xmlsec/APKBUILD | 56 -- 4 files changed, 1121 deletions(-) delete mode 100644 user/py3-xmlsec/253_pkcs11-support.patch delete mode 100644 user/py3-xmlsec/264_xmlsec3-support.patch delete mode 100644 user/py3-xmlsec/280_fix-function-deprecation.patch delete mode 100644 user/py3-xmlsec/APKBUILD diff --git a/user/py3-xmlsec/253_pkcs11-support.patch b/user/py3-xmlsec/253_pkcs11-support.patch deleted file mode 100644 index e8be41d..0000000 --- a/user/py3-xmlsec/253_pkcs11-support.patch +++ /dev/null @@ -1,925 +0,0 @@ -From a7f95d55cd660d1a212fa76a527063b3b7dbe8bb Mon Sep 17 00:00:00 2001 -From: Dan Vella -Date: Fri, 17 Mar 2023 13:58:25 +0100 -Subject: [PATCH 1/7] Added changes to enable 3.11 builds - ---- - .appveyor.yml | 4 ++++ - .github/workflows/macosx.yml | 2 +- - .github/workflows/manylinux.yml | 6 +++--- - .github/workflows/opensuse-tumbleweed.yml | 2 +- - .github/workflows/sdist.yml | 4 ++-- - .travis.yml | 3 +++ - setup.py | 1 + - 7 files changed, 15 insertions(+), 7 deletions(-) - -diff --git a/setup.py b/setup.py -index 9a3c927..5c7e0da 100644 ---- a/setup.py -+++ b/setup.py -@@ -533,6 +533,7 @@ def prepare_static_build_linux(self): - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', -+ 'Programming Language :: Python :: 3.11', - 'Topic :: Text Processing :: Markup :: XML', - 'Typing :: Typed', - ], - -From b7683774f747c7aed6a0b30e6045da679bc68760 Mon Sep 17 00:00:00 2001 -From: Dan Vella -Date: Fri, 17 Mar 2023 14:00:32 +0100 -Subject: [PATCH 2/7] Added changes to enable 3.11 builds - ---- - .appveyor.yml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -From bddf28e68a2509a287f9889aaeadc3adab80ccbc Mon Sep 17 00:00:00 2001 -From: Dan Vella -Date: Fri, 17 Mar 2023 14:52:40 +0100 -Subject: [PATCH 3/7] bumped isort to 5.11.5 - ---- - .pre-commit-config.yaml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -From 2c58d43eedf72590e3e201252f5fc5ddae36f8c6 Mon Sep 17 00:00:00 2001 -From: Tomas Divis -Date: Wed, 22 Mar 2023 20:36:45 +0100 -Subject: [PATCH 4/7] Fix #244 - Fix failing test with libxmlsec-1.2.36, also - make libxmlsec version available from Python. - ---- - src/main.c | 13 ++++ - tests/data/sign5-out-xmlsec_1_2_36_to_37.xml | 67 ++++++++++++++++++++ - tests/test_ds.py | 6 +- - 3 files changed, 85 insertions(+), 1 deletion(-) - create mode 100644 tests/data/sign5-out-xmlsec_1_2_36_to_37.xml - -diff --git a/src/main.c b/src/main.c -index ffcae14..5773db3 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -119,6 +119,13 @@ static PyObject* PyXmlSec_PyShutdown(PyObject* self) { - Py_RETURN_NONE; - } - -+static char PyXmlSec_GetLibXmlSecVersion__doc__[] = \ -+ "get_libxmlsec_version() -> tuple\n" -+ "Returns Version tuple of wrapped libxml library."; -+static PyObject* PyXmlSec_GetLibXmlSecVersion() { -+ return Py_BuildValue("(iii)", XMLSEC_VERSION_MAJOR, XMLSEC_VERSION_MINOR, XMLSEC_VERSION_SUBMINOR); -+} -+ - static char PyXmlSec_PyEnableDebugOutput__doc__[] = \ - "enable_debug_trace(enabled) -> None\n" - "Enables or disables calling LibXML2 callback from the default errors callback.\n\n" -@@ -386,6 +393,12 @@ static PyMethodDef PyXmlSec_MainMethods[] = { - METH_NOARGS, - PyXmlSec_PyShutdown__doc__ - }, -+ { -+ "get_libxmlsec_version", -+ (PyCFunction)PyXmlSec_GetLibXmlSecVersion, -+ METH_NOARGS, -+ PyXmlSec_GetLibXmlSecVersion__doc__ -+ }, - { - "enable_debug_trace", - (PyCFunction)PyXmlSec_PyEnableDebugOutput, -diff --git a/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml b/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml -new file mode 100644 -index 0000000..f359b13 ---- /dev/null -+++ b/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml -@@ -0,0 +1,67 @@ -+ -+ -+ -+ -+ Hello, World! -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+HjY8ilZAIEM2tBbPn5mYO1ieIX4= -+ -+ -+SIaj/6KY3C1SmDXU2++Gm31U1xTadFp04WhBgfsJFbxrL+q7GKSKN9kfQ+UpN9+i -+D5fWmuavXEHe4Gw6RMaMEkq2URQo7F68+d5J/ajq8/l4n+xE6/reGScVwT6L4dEP -+XXVJcAi2ZnQ3O7GTNvNGCPibL9mUcyCWBFZ92Uemtc/vJFCQ7ZyKMdMfACgxOwyN -+T/9971oog241/2doudhonc0I/3mgPYWkZdX6yvr62mEjnG+oUZkhWYJ4ewZJ4hM4 -+JjbFqZO+OEzDRSbw3DkmuBA/mtlx+3t13SESfEub5hqoMdVmtth/eTb64dsPdl9r -+3k1ACVX9f8aHfQQdJOmLFQ== -+ -+ -+ -+ -+ -+ -+Test Issuer -+1 -+ -+MIIE3zCCBEigAwIBAgIBBTANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCVVMx -+EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVN1bm55dmFsZTE9MDsGA1UE -+ChM0WE1MIFNlY3VyaXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20v -+eG1sc2VjKTEZMBcGA1UECxMQUm9vdCBDZXJ0aWZpY2F0ZTEWMBQGA1UEAxMNQWxl -+a3NleSBTYW5pbjEhMB8GCSqGSIb3DQEJARYSeG1sc2VjQGFsZWtzZXkuY29tMB4X -+DTAzMDMzMTA0MDIyMloXDTEzMDMyODA0MDIyMlowgb8xCzAJBgNVBAYTAlVTMRMw -+EQYDVQQIEwpDYWxpZm9ybmlhMT0wOwYDVQQKEzRYTUwgU2VjdXJpdHkgTGlicmFy -+eSAoaHR0cDovL3d3dy5hbGVrc2V5LmNvbS94bWxzZWMpMSEwHwYDVQQLExhFeGFt -+cGxlcyBSU0EgQ2VydGlmaWNhdGUxFjAUBgNVBAMTDUFsZWtzZXkgU2FuaW4xITAf -+BgkqhkiG9w0BCQEWEnhtbHNlY0BhbGVrc2V5LmNvbTCCASIwDQYJKoZIhvcNAQEB -+BQADggEPADCCAQoCggEBAJe4/rQ/gzV4FokE7CthjL/EXwCBSkXm2c3p4jyXO0Wt -+quaNC3dxBwFPfPl94hmq3ZFZ9PHPPbp4RpYRnLZbRjlzVSOq954AXOXpSew7nD+E -+mTqQrd9+ZIbGJnLOMQh5fhMVuOW/1lYCjWAhTCcYZPv7VXD2M70vVXDVXn6ZrqTg -+qkVHE6gw1aCKncwg7OSOUclUxX8+Zi10v6N6+PPslFc5tKwAdWJhVLTQ4FKG+F53 -+7FBDnNK6p4xiWryy/vPMYn4jYGvHUUk3eH4lFTCr+rSuJY8i/KNIf/IKim7g/o3w -+Ae3GM8xrof2mgO8GjK/2QDqOQhQgYRIf4/wFsQXVZcMCAwEAAaOCAVcwggFTMAkG -+A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp -+ZmljYXRlMB0GA1UdDgQWBBQkhCzy1FkgYosuXIaQo6owuicanDCB+AYDVR0jBIHw -+MIHtgBS0ue+a5pcOaGUemM76VQ2JBttMfKGB0aSBzjCByzELMAkGA1UEBhMCVVMx -+EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVN1bm55dmFsZTE9MDsGA1UE -+ChM0WE1MIFNlY3VyaXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20v -+eG1sc2VjKTEZMBcGA1UECxMQUm9vdCBDZXJ0aWZpY2F0ZTEWMBQGA1UEAxMNQWxl -+a3NleSBTYW5pbjEhMB8GCSqGSIb3DQEJARYSeG1sc2VjQGFsZWtzZXkuY29tggEA -+MA0GCSqGSIb3DQEBBAUAA4GBALU/mzIxSv8vhDuomxFcplzwdlLZbvSQrfoNkMGY -+1UoS3YJrN+jZLWKSyWE3mIaPpElqXiXQGGkwD5iPQ1iJMbI7BeLvx6ZxX/f+c8Wn -+ss0uc1NxfahMaBoyG15IL4+beqO182fosaKJTrJNG3mc//ANGU9OsQM9mfBEt4oL -+NJ2D -+ -+ -+ -+ -+ -diff --git a/tests/test_ds.py b/tests/test_ds.py -index 694ad43..38f0b25 100644 ---- a/tests/test_ds.py -+++ b/tests/test_ds.py -@@ -182,7 +182,11 @@ def test_sign_case5(self): - self.assertEqual("rsakey.pem", ctx.key.name) - - ctx.sign(sign) -- self.assertEqual(self.load_xml("sign5-out.xml"), root) -+ if (1, 2, 36) <= xmlsec.get_libxmlsec_version() <= (1, 2, 37): -+ expected_xml_file = 'sign5-out-xmlsec_1_2_36_to_37.xml' -+ else: -+ expected_xml_file = 'sign5-out.xml' -+ self.assertEqual(self.load_xml(expected_xml_file), root) - - def test_sign_binary_bad_args(self): - ctx = xmlsec.SignatureContext() - -From 1cf6785b3e06c2b8f6cac1266cf8f1934650bc4b Mon Sep 17 00:00:00 2001 -From: Tomas Divis -Date: Wed, 21 Dec 2022 14:01:14 +0100 -Subject: [PATCH 5/7] Fix #164 - Add support for loading keys from engine (e.g. - pkcs11). - ---- - README.rst | 2 +- - src/keys.c | 47 +++++++++++++++++++++++++++++++++++++++++ - src/xmlsec/__init__.pyi | 2 ++ - 3 files changed, 50 insertions(+), 1 deletion(-) - -diff --git a/README.rst b/README.rst -index 34bdd37..e192465 100644 ---- a/README.rst -+++ b/README.rst -@@ -37,7 +37,7 @@ Check the `examples `_ se - Requirements - ************ - - ``libxml2 >= 2.9.1`` --- ``libxmlsec1 >= 1.2.18`` -+- ``libxmlsec1 >= 1.2.33`` - - Install - ******* -diff --git a/src/keys.c b/src/keys.c -index 1362b12..1440331 100644 ---- a/src/keys.c -+++ b/src/keys.c -@@ -185,6 +185,47 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject* - return NULL; - } - -+static const char PyXmlSec_KeyFromEngine__doc__[] = \ -+ "from_engine(engine_and_key_id) -> xmlsec.Key\n" -+ "Loads PKI key from an engine.\n\n" -+ ":param engine_and_key_id: engine and key id, i.e. 'pkcs11;pkcs11:token=XmlsecToken;object=XmlsecKey;pin-value=password'\n" -+ ":type engine_and_key_id: :class:`str`, " -+ ":return: pointer to newly created key\n" -+ ":rtype: :class:`~xmlsec.Key`"; -+static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject* kwargs) { -+ static char *kwlist[] = {"engine_and_key_id", NULL}; -+ -+ const char* engine_and_key_id = NULL; -+ PyXmlSec_Key* key = NULL; -+ -+ PYXMLSEC_DEBUG("load key from engine - start"); -+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:from_engine", kwlist, &engine_and_key_id)) { -+ goto ON_FAIL; -+ } -+ -+ if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL; -+ -+ Py_BEGIN_ALLOW_THREADS; -+ key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), -+ (void*)engine_and_key_id); -+ Py_END_ALLOW_THREADS; -+ -+ if (key->handle == NULL) { -+ PyXmlSec_SetLastError("cannot read key"); -+ goto ON_FAIL; -+ } -+ -+ key->is_own = 1; -+ -+ PYXMLSEC_DEBUG("load key from engine - ok"); -+ return (PyObject*)key; -+ -+ON_FAIL: -+ PYXMLSEC_DEBUG("load key from engine - fail"); -+ Py_XDECREF(key); -+ return NULL; -+} -+ - static const char PyXmlSec_KeyGenerate__doc__[] = \ - "generate(klass, size, type) -> xmlsec.Key\n" - "Generates key of kind ``klass`` with ``size`` and ``type``.\n\n" -@@ -494,6 +535,12 @@ static PyMethodDef PyXmlSec_KeyMethods[] = { - METH_CLASS|METH_VARARGS|METH_KEYWORDS, - PyXmlSec_KeyFromFile__doc__ - }, -+ { -+ "from_engine", -+ (PyCFunction)PyXmlSec_KeyFromEngine, -+ METH_CLASS|METH_VARARGS|METH_KEYWORDS, -+ PyXmlSec_KeyFromEngine__doc__ -+ }, - { - "generate", - (PyCFunction)PyXmlSec_KeyGenerate, -diff --git a/src/xmlsec/__init__.pyi b/src/xmlsec/__init__.pyi -index 56356e5..6c326f5 100644 ---- a/src/xmlsec/__init__.pyi -+++ b/src/xmlsec/__init__.pyi -@@ -49,6 +49,8 @@ class Key: - @classmethod - def from_file(cls: type[Self], file: GenericPath[AnyStr] | IO[AnyStr], format: int, password: str | None = ...) -> Self: ... - @classmethod -+ def from_engine(cls: type[Self], engine_and_key_id: AnyStr) -> Self: ... -+ @classmethod - def from_memory(cls: type[Self], data: AnyStr, format: int, password: str | None = ...) -> Self: ... - @classmethod - def generate(cls: type[Self], klass: KeyData, size: int, type: int) -> Self: ... - -From 0b5939fc65e98cebb669d311b4fb58844bf887e5 Mon Sep 17 00:00:00 2001 -From: Tomas Divis -Date: Thu, 13 Apr 2023 14:28:02 +0200 -Subject: [PATCH 6/7] Fix #164 - Add tests for pkcs11 (softhsm) key. - ---- - .github/workflows/sdist.yml | 3 +- - tests/softhsm_setup.py | 265 ++++++++++++++++++++++++++++++++++++ - tests/test_pkcs11.py | 57 ++++++++ - 3 files changed, 323 insertions(+), 2 deletions(-) - create mode 100644 tests/softhsm_setup.py - create mode 100644 tests/test_pkcs11.py - -diff --git a/tests/softhsm_setup.py b/tests/softhsm_setup.py -new file mode 100644 -index 0000000..0a7c37d ---- /dev/null -+++ b/tests/softhsm_setup.py -@@ -0,0 +1,265 @@ -+""" -+Testing the PKCS#11 shim layer. -+Heavily inspired by from https://github.com/IdentityPython/pyXMLSecurity by leifj -+under licence "As is", see https://github.com/IdentityPython/pyXMLSecurity/blob/master/LICENSE.txt -+""" -+ -+import logging -+import os -+import shutil -+import subprocess -+import tempfile -+import traceback -+import unittest -+from typing import Dict, List, Optional, Tuple -+ -+DATA_DIR = os.path.join(os.path.dirname(__file__), "data") -+ -+ -+def paths_for_component(component: str, default_paths: List[str]): -+ env_path = os.environ.get(component) -+ return [env_path] if env_path else default_paths -+ -+ -+def find_alts(component_name, alts: List[str]) -> str: -+ for a in alts: -+ if os.path.exists(a): -+ return a -+ raise unittest.SkipTest("Required component is missing: {}".format(component_name)) -+ -+ -+def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]: -+ env = {} -+ if softhsm_conf is not None: -+ env['SOFTHSM_CONF'] = softhsm_conf -+ env['SOFTHSM2_CONF'] = softhsm_conf -+ proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) -+ out, err = proc.communicate() -+ if err is not None and len(err) > 0: -+ logging.error(err) -+ if out is not None and len(out) > 0: -+ logging.debug(out) -+ rv = proc.wait() -+ if rv: -+ with open(softhsm_conf) as f: -+ conf = f.read() -+ msg = '[cmd: {cmd}] [code: {code}] [stdout: {out}] [stderr: {err}] [config: {conf}]' -+ msg = msg.format( -+ cmd=" ".join(args), code=rv, out=out.strip(), err=err.strip(), conf=conf, -+ ) -+ raise RuntimeError(msg) -+ return out, err -+ -+ -+component_default_paths: Dict[str, List[str]] = { -+ 'P11_MODULE': [ -+ '/usr/lib/softhsm/libsofthsm2.so', -+ '/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so', -+ '/usr/lib/softhsm/libsofthsm.so', -+ '/usr/lib64/softhsm/libsofthsm2.so', -+ ], -+ 'P11_ENGINE': [ -+ '/usr/lib/ssl/engines/libpkcs11.so', -+ '/usr/lib/engines/engine_pkcs11.so', -+ '/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so', -+ '/usr/lib64/engines-1.1/pkcs11.so', -+ '/usr/lib64/engines-1.1/libpkcs11.so', -+ '/usr/lib64/engines-3/pkcs11.so', -+ '/usr/lib64/engines-3/libpkcs11.so', -+ '/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so', -+ '/usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so', -+ ], -+ 'PKCS11_TOOL': [ -+ '/usr/bin/pkcs11-tool', -+ ], -+ 'SOFTHSM': [ -+ '/usr/bin/softhsm2-util', -+ '/usr/bin/softhsm', -+ ], -+ 'OPENSSL': [ -+ '/usr/bin/openssl', -+ ], -+} -+ -+component_path: Dict[str, str] = { -+ component_name: find_alts(component_name, paths_for_component(component_name, default_paths)) -+ for component_name, default_paths in component_default_paths.items() -+} -+ -+softhsm_version = 1 -+if component_path['SOFTHSM'].endswith('softhsm2-util'): -+ softhsm_version = 2 -+ -+openssl_version = subprocess.check_output([component_path['OPENSSL'], -+ 'version'] -+ )[8:11].decode() -+ -+p11_test_files: List[str] = [] -+softhsm_conf: Optional[str] = None -+softhsm_db: Optional[str] = None -+ -+ -+def _temp_file() -> str: -+ f = tempfile.NamedTemporaryFile(delete=False) -+ p11_test_files.append(f.name) -+ return f.name -+ -+ -+def _temp_dir() -> str: -+ d = tempfile.mkdtemp() -+ p11_test_files.append(d) -+ return d -+ -+ -+@unittest.skipIf(component_path['P11_MODULE'] is None, "SoftHSM PKCS11 module not installed") -+def setup() -> None: -+ logging.debug("Creating test pkcs11 token using softhsm") -+ try: -+ global softhsm_conf -+ softhsm_conf = _temp_file() -+ logging.debug("Generating softhsm.conf") -+ with open(softhsm_conf, "w") as f: -+ if softhsm_version == 2: -+ softhsm_db = _temp_dir() -+ f.write(""" -+# Generated by test -+directories.tokendir = %s -+objectstore.backend = file -+log.level = DEBUG -+""" % softhsm_db) -+ else: -+ softhsm_db = _temp_file() -+ f.write(""" -+# Generated by test -+0:%s -+""" % softhsm_db) -+ -+ logging.debug("Initializing the token") -+ out, err = run_cmd([component_path['SOFTHSM'], -+ '--slot', '0', -+ '--label', 'test', -+ '--init-token', -+ '--pin', 'secret1', -+ '--so-pin', 'secret2'], -+ softhsm_conf=softhsm_conf) -+ -+ # logging.debug("Generating 1024 bit RSA key in token") -+ # run_cmd([component_path['PKCS11_TOOL'], -+ # '--module', component_path['P11_MODULE'], -+ # '-l', -+ # '-k', -+ # '--key-type', 'rsa:1024', -+ # '--id', 'a1b2', -+ # '--label', 'test', -+ # '--pin', 'secret1'], softhsm_conf=softhsm_conf) -+ -+ hash_priv_key = _temp_file() -+ logging.debug("Converting test private key to format for softhsm") -+ run_cmd([component_path['OPENSSL'], 'pkcs8', -+ '-topk8', -+ '-inform', 'PEM', -+ '-outform', 'PEM', -+ '-nocrypt', -+ '-in', os.path.join(DATA_DIR, 'rsakey.pem'), -+ '-out', hash_priv_key], softhsm_conf=softhsm_conf) -+ -+ logging.debug("Importing the test key to softhsm") -+ run_cmd([component_path['SOFTHSM'], -+ '--import', hash_priv_key, -+ '--token', 'test', -+ '--id', 'a1b2', -+ '--label', 'test', -+ '--pin', 'secret1'], -+ softhsm_conf=softhsm_conf) -+ run_cmd([component_path['PKCS11_TOOL'], -+ '--module', component_path['P11_MODULE'], -+ '-l', -+ '--pin', 'secret1', '-O'], softhsm_conf=softhsm_conf) -+ signer_cert_pem = _temp_file() -+ openssl_conf = _temp_file() -+ logging.debug("Generating OpenSSL config for version {}".format(openssl_version)) -+ with open(openssl_conf, "w") as f: -+ # Might be needed with some versions of openssl, but in more recent versions dynamic_path breaks it. -+ # dynamic_path = ( -+ # "dynamic_path = %s" % component_path['P11_ENGINE'] -+ # if openssl_version.startswith(b'1.') -+ # else "" -+ # ) -+ f.write("\n".join([ -+ "openssl_conf = openssl_def", -+ "[openssl_def]", -+ "engines = engine_section", -+ "[engine_section]", -+ "pkcs11 = pkcs11_section", -+ "[req]", -+ "distinguished_name = req_distinguished_name", -+ "[req_distinguished_name]", -+ "[pkcs11_section]", -+ "engine_id = pkcs11", -+ # dynamic_path, -+ "MODULE_PATH = %s" % component_path['P11_MODULE'], -+ "init = 0", -+ ])) -+ -+ with open(openssl_conf, "r") as f: -+ logging.debug('-------- START DEBUG openssl_conf --------') -+ logging.debug(f.readlines()) -+ logging.debug('-------- END DEBUG openssl_conf --------') -+ logging.debug('-------- START DEBUG paths --------') -+ logging.debug(run_cmd(['ls', '-ld', component_path['P11_ENGINE']])) -+ logging.debug(run_cmd(['ls', '-ld', component_path['P11_MODULE']])) -+ logging.debug('-------- END DEBUG paths --------') -+ -+ signer_cert_der = _temp_file() -+ -+ logging.debug("Generating self-signed certificate") -+ run_cmd([component_path['OPENSSL'], 'req', -+ '-new', -+ '-x509', -+ '-subj', "/CN=Test Signer", -+ '-engine', 'pkcs11', -+ '-config', openssl_conf, -+ '-keyform', 'engine', -+ '-key', 'label_test', -+ '-passin', 'pass:secret1', -+ '-out', signer_cert_pem], softhsm_conf=softhsm_conf) -+ -+ run_cmd([component_path['OPENSSL'], 'x509', -+ '-inform', 'PEM', -+ '-outform', 'DER', -+ '-in', signer_cert_pem, -+ '-out', signer_cert_der], softhsm_conf=softhsm_conf) -+ -+ logging.debug("Importing certificate into token") -+ -+ run_cmd([component_path['PKCS11_TOOL'], -+ '--module', component_path['P11_MODULE'], -+ '-l', -+ '--slot-index', '0', -+ '--id', 'a1b2', -+ '--label', 'test', -+ '-y', 'cert', -+ '-w', signer_cert_der, -+ '--pin', 'secret1'], softhsm_conf=softhsm_conf) -+ -+ # TODO: Should be teardowned in teardown: -+ os.environ['SOFTHSM_CONF'] = softhsm_conf -+ os.environ['SOFTHSM2_CONF'] = softhsm_conf -+ -+ except Exception as ex: -+ print("-" * 64) -+ traceback.print_exc() -+ print("-" * 64) -+ logging.error("PKCS11 tests disabled: unable to initialize test token: %s" % ex) -+ raise ex -+ -+ -+def teardown() -> None: -+ global p11_test_files -+ for o in p11_test_files: -+ if os.path.exists(o): -+ if os.path.isdir(o): -+ shutil.rmtree(o) -+ else: -+ os.unlink(o) -+ p11_test_files = [] -diff --git a/tests/test_pkcs11.py b/tests/test_pkcs11.py -new file mode 100644 -index 0000000..accd29a ---- /dev/null -+++ b/tests/test_pkcs11.py -@@ -0,0 +1,57 @@ -+import xmlsec -+from tests import base -+from xmlsec import constants as consts -+ -+KEY_URL = "pkcs11;pkcs11:token=test;object=test;pin-value=secret1" -+ -+ -+def setUpModule(): -+ from tests import softhsm_setup -+ -+ softhsm_setup.setup() -+ -+ -+def tearDownModule(): -+ from tests import softhsm_setup -+ -+ softhsm_setup.teardown() -+ -+ -+class TestKeys(base.TestMemoryLeaks): -+ def test_del_key(self): -+ ctx = xmlsec.SignatureContext(manager=xmlsec.KeysManager()) -+ ctx.key = xmlsec.Key.from_engine(KEY_URL) -+ del ctx.key -+ self.assertIsNone(ctx.key) -+ -+ def test_set_key(self): -+ ctx = xmlsec.SignatureContext(manager=xmlsec.KeysManager()) -+ ctx.key = xmlsec.Key.from_engine(KEY_URL) -+ self.assertIsNotNone(ctx.key) -+ -+ def test_sign_bad_args(self): -+ ctx = xmlsec.SignatureContext() -+ ctx.key = xmlsec.Key.from_engine(KEY_URL) -+ with self.assertRaises(TypeError): -+ ctx.sign('') -+ -+ def test_sign_fail(self): -+ ctx = xmlsec.SignatureContext() -+ ctx.key = xmlsec.Key.from_engine(KEY_URL) -+ with self.assertRaisesRegex(xmlsec.Error, 'failed to sign'): -+ ctx.sign(self.load_xml('sign1-in.xml')) -+ -+ def test_sign_case1(self): -+ """Should sign a pre-constructed template file using a key from a pkcs11 engine.""" -+ root = self.load_xml("sign1-in.xml") -+ sign = xmlsec.tree.find_node(root, consts.NodeSignature) -+ self.assertIsNotNone(sign) -+ -+ ctx = xmlsec.SignatureContext() -+ ctx.key = xmlsec.Key.from_engine(KEY_URL) -+ self.assertIsNotNone(ctx.key) -+ ctx.key.name = 'rsakey.pem' -+ self.assertEqual("rsakey.pem", ctx.key.name) -+ -+ ctx.sign(sign) -+ self.assertEqual(self.load_xml("sign1-out.xml"), root) - -From 4f5daea286df89c64fbfc615f422be62b2cdf114 Mon Sep 17 00:00:00 2001 -From: "pre-commit-ci[bot]" - <66853113+pre-commit-ci[bot]@users.noreply.github.com> -Date: Mon, 17 Apr 2023 11:55:28 +0000 -Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks - -for more information, see https://pre-commit.ci ---- - tests/softhsm_setup.py | 220 +++++++++++++++++++++++++++-------------- - 1 file changed, 147 insertions(+), 73 deletions(-) - -diff --git a/tests/softhsm_setup.py b/tests/softhsm_setup.py -index 0a7c37d..432d4b1 100644 ---- a/tests/softhsm_setup.py -+++ b/tests/softhsm_setup.py -@@ -45,7 +45,11 @@ def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]: - conf = f.read() - msg = '[cmd: {cmd}] [code: {code}] [stdout: {out}] [stderr: {err}] [config: {conf}]' - msg = msg.format( -- cmd=" ".join(args), code=rv, out=out.strip(), err=err.strip(), conf=conf, -+ cmd=" ".join(args), -+ code=rv, -+ out=out.strip(), -+ err=err.strip(), -+ conf=conf, - ) - raise RuntimeError(msg) - return out, err -@@ -90,9 +94,7 @@ def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]: - if component_path['SOFTHSM'].endswith('softhsm2-util'): - softhsm_version = 2 - --openssl_version = subprocess.check_output([component_path['OPENSSL'], -- 'version'] -- )[8:11].decode() -+openssl_version = subprocess.check_output([component_path['OPENSSL'], 'version'])[8:11].decode() - - p11_test_files: List[str] = [] - softhsm_conf: Optional[str] = None -@@ -121,27 +123,41 @@ def setup() -> None: - with open(softhsm_conf, "w") as f: - if softhsm_version == 2: - softhsm_db = _temp_dir() -- f.write(""" -+ f.write( -+ """ - # Generated by test - directories.tokendir = %s - objectstore.backend = file - log.level = DEBUG --""" % softhsm_db) -+""" -+ % softhsm_db -+ ) - else: - softhsm_db = _temp_file() -- f.write(""" -+ f.write( -+ """ - # Generated by test - 0:%s --""" % softhsm_db) -+""" -+ % softhsm_db -+ ) - - logging.debug("Initializing the token") -- out, err = run_cmd([component_path['SOFTHSM'], -- '--slot', '0', -- '--label', 'test', -- '--init-token', -- '--pin', 'secret1', -- '--so-pin', 'secret2'], -- softhsm_conf=softhsm_conf) -+ out, err = run_cmd( -+ [ -+ component_path['SOFTHSM'], -+ '--slot', -+ '0', -+ '--label', -+ 'test', -+ '--init-token', -+ '--pin', -+ 'secret1', -+ '--so-pin', -+ 'secret2', -+ ], -+ softhsm_conf=softhsm_conf, -+ ) - - # logging.debug("Generating 1024 bit RSA key in token") - # run_cmd([component_path['PKCS11_TOOL'], -@@ -155,26 +171,45 @@ def setup() -> None: - - hash_priv_key = _temp_file() - logging.debug("Converting test private key to format for softhsm") -- run_cmd([component_path['OPENSSL'], 'pkcs8', -- '-topk8', -- '-inform', 'PEM', -- '-outform', 'PEM', -- '-nocrypt', -- '-in', os.path.join(DATA_DIR, 'rsakey.pem'), -- '-out', hash_priv_key], softhsm_conf=softhsm_conf) -+ run_cmd( -+ [ -+ component_path['OPENSSL'], -+ 'pkcs8', -+ '-topk8', -+ '-inform', -+ 'PEM', -+ '-outform', -+ 'PEM', -+ '-nocrypt', -+ '-in', -+ os.path.join(DATA_DIR, 'rsakey.pem'), -+ '-out', -+ hash_priv_key, -+ ], -+ softhsm_conf=softhsm_conf, -+ ) - - logging.debug("Importing the test key to softhsm") -- run_cmd([component_path['SOFTHSM'], -- '--import', hash_priv_key, -- '--token', 'test', -- '--id', 'a1b2', -- '--label', 'test', -- '--pin', 'secret1'], -- softhsm_conf=softhsm_conf) -- run_cmd([component_path['PKCS11_TOOL'], -- '--module', component_path['P11_MODULE'], -- '-l', -- '--pin', 'secret1', '-O'], softhsm_conf=softhsm_conf) -+ run_cmd( -+ [ -+ component_path['SOFTHSM'], -+ '--import', -+ hash_priv_key, -+ '--token', -+ 'test', -+ '--id', -+ 'a1b2', -+ '--label', -+ 'test', -+ '--pin', -+ 'secret1', -+ ], -+ softhsm_conf=softhsm_conf, -+ ) -+ run_cmd( -+ [component_path['PKCS11_TOOL'], '--module', component_path['P11_MODULE'], '-l', '--pin', 'secret1', '-O'], -+ softhsm_conf=softhsm_conf, -+ ) - signer_cert_pem = _temp_file() - openssl_conf = _temp_file() - logging.debug("Generating OpenSSL config for version {}".format(openssl_version)) -@@ -185,21 +220,25 @@ def setup() -> None: - # if openssl_version.startswith(b'1.') - # else "" - # ) -- f.write("\n".join([ -- "openssl_conf = openssl_def", -- "[openssl_def]", -- "engines = engine_section", -- "[engine_section]", -- "pkcs11 = pkcs11_section", -- "[req]", -- "distinguished_name = req_distinguished_name", -- "[req_distinguished_name]", -- "[pkcs11_section]", -- "engine_id = pkcs11", -- # dynamic_path, -- "MODULE_PATH = %s" % component_path['P11_MODULE'], -- "init = 0", -- ])) -+ f.write( -+ "\n".join( -+ [ -+ "openssl_conf = openssl_def", -+ "[openssl_def]", -+ "engines = engine_section", -+ "[engine_section]", -+ "pkcs11 = pkcs11_section", -+ "[req]", -+ "distinguished_name = req_distinguished_name", -+ "[req_distinguished_name]", -+ "[pkcs11_section]", -+ "engine_id = pkcs11", -+ # dynamic_path, -+ "MODULE_PATH = %s" % component_path['P11_MODULE'], -+ "init = 0", -+ ] -+ ) -+ ) - - with open(openssl_conf, "r") as f: - logging.debug('-------- START DEBUG openssl_conf --------') -@@ -213,34 +252,69 @@ def setup() -> None: - signer_cert_der = _temp_file() - - logging.debug("Generating self-signed certificate") -- run_cmd([component_path['OPENSSL'], 'req', -- '-new', -- '-x509', -- '-subj', "/CN=Test Signer", -- '-engine', 'pkcs11', -- '-config', openssl_conf, -- '-keyform', 'engine', -- '-key', 'label_test', -- '-passin', 'pass:secret1', -- '-out', signer_cert_pem], softhsm_conf=softhsm_conf) -- -- run_cmd([component_path['OPENSSL'], 'x509', -- '-inform', 'PEM', -- '-outform', 'DER', -- '-in', signer_cert_pem, -- '-out', signer_cert_der], softhsm_conf=softhsm_conf) -+ run_cmd( -+ [ -+ component_path['OPENSSL'], -+ 'req', -+ '-new', -+ '-x509', -+ '-subj', -+ "/CN=Test Signer", -+ '-engine', -+ 'pkcs11', -+ '-config', -+ openssl_conf, -+ '-keyform', -+ 'engine', -+ '-key', -+ 'label_test', -+ '-passin', -+ 'pass:secret1', -+ '-out', -+ signer_cert_pem, -+ ], -+ softhsm_conf=softhsm_conf, -+ ) -+ -+ run_cmd( -+ [ -+ component_path['OPENSSL'], -+ 'x509', -+ '-inform', -+ 'PEM', -+ '-outform', -+ 'DER', -+ '-in', -+ signer_cert_pem, -+ '-out', -+ signer_cert_der, -+ ], -+ softhsm_conf=softhsm_conf, -+ ) - - logging.debug("Importing certificate into token") - -- run_cmd([component_path['PKCS11_TOOL'], -- '--module', component_path['P11_MODULE'], -- '-l', -- '--slot-index', '0', -- '--id', 'a1b2', -- '--label', 'test', -- '-y', 'cert', -- '-w', signer_cert_der, -- '--pin', 'secret1'], softhsm_conf=softhsm_conf) -+ run_cmd( -+ [ -+ component_path['PKCS11_TOOL'], -+ '--module', -+ component_path['P11_MODULE'], -+ '-l', -+ '--slot-index', -+ '0', -+ '--id', -+ 'a1b2', -+ '--label', -+ 'test', -+ '-y', -+ 'cert', -+ '-w', -+ signer_cert_der, -+ '--pin', -+ 'secret1', -+ ], -+ softhsm_conf=softhsm_conf, -+ ) - - # TODO: Should be teardowned in teardown: - os.environ['SOFTHSM_CONF'] = softhsm_conf diff --git a/user/py3-xmlsec/264_xmlsec3-support.patch b/user/py3-xmlsec/264_xmlsec3-support.patch deleted file mode 100644 index 12096a7..0000000 --- a/user/py3-xmlsec/264_xmlsec3-support.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 5f57f2eac756df213e83a2fdb452057909e2dd21 Mon Sep 17 00:00:00 2001 -From: David Adamec -Date: Fri, 15 Sep 2023 17:49:15 -0700 -Subject: [PATCH 1/3] Add compatibility for xmlsec 1.3 - ---- - doc/source/modules/constants.rst | 6 ------ - src/constants.c | 2 -- - src/enc.c | 7 +++++++ - src/xmlsec/constants.pyi | 2 -- - 4 files changed, 7 insertions(+), 10 deletions(-) - -diff --git a/src/constants.c b/src/constants.c -index 34c81b2..72ae217 100644 ---- a/src/constants.c -+++ b/src/constants.c -@@ -316,8 +316,6 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) { - PYXMLSEC_ADD_NS_CONSTANT(XPathNs, "XPATH"); - PYXMLSEC_ADD_NS_CONSTANT(XPath2Ns, "XPATH2"); - PYXMLSEC_ADD_NS_CONSTANT(XPointerNs, "XPOINTER"); -- PYXMLSEC_ADD_NS_CONSTANT(Soap11Ns, "SOAP11"); -- PYXMLSEC_ADD_NS_CONSTANT(Soap12Ns, "SOAP12"); - PYXMLSEC_ADD_NS_CONSTANT(NsExcC14N, "EXC_C14N"); - PYXMLSEC_ADD_NS_CONSTANT(NsExcC14NWithComments, "EXC_C14N_WITH_COMMENT"); - -diff --git a/src/enc.c b/src/enc.c -index aaf35ae..475cd2d 100644 ---- a/src/enc.c -+++ b/src/enc.c -@@ -50,6 +50,13 @@ static int PyXmlSec_EncryptionContext__init__(PyObject* self, PyObject* args, Py - } - ctx->manager = manager; - PYXMLSEC_DEBUGF("%p: init enc context - ok, manager - %p", self, manager); -+ -+ // xmlsec 1.3 changed the key search to strict mode, causing various examples -+ // in the docs to fail. For backwards compatibility, this changes it back to -+ // lax mode for now. -+ ctx->handle->keyInfoReadCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH; -+ ctx->handle->keyInfoWriteCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH; -+ - return 0; - ON_FAIL: - PYXMLSEC_DEBUGF("%p: init enc context - failed", self); -diff --git a/src/xmlsec/constants.pyi b/src/xmlsec/constants.pyi -index 3430a02..9fd24e5 100644 ---- a/src/xmlsec/constants.pyi -+++ b/src/xmlsec/constants.pyi -@@ -85,8 +85,6 @@ NodeX509Data: Final[str] - Ns: Final[str] - NsExcC14N: Final[str] - NsExcC14NWithComments: Final[str] --Soap11Ns: Final[str] --Soap12Ns: Final[str] - TransformAes128Cbc: Final[__Transform] - TransformAes128Gcm: Final[__Transform] - TransformAes192Cbc: Final[__Transform] - -From 0e7c5e718e8d221331b0a5f851094a5b4181eeae Mon Sep 17 00:00:00 2001 -From: David Adamec -Date: Fri, 15 Sep 2023 18:07:07 -0700 -Subject: [PATCH 2/3] fix 1.2 compatibility - ---- - src/enc.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/enc.c b/src/enc.c -index 475cd2d..5453ef9 100644 ---- a/src/enc.c -+++ b/src/enc.c -@@ -17,6 +17,11 @@ - #include - #include - -+// Backwards compatibility with xmlsec 1.2 -+#ifndef XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH -+#define XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH 0x00008000 -+#endif -+ - typedef struct { - PyObject_HEAD - xmlSecEncCtxPtr handle; - -From 40c14c45a352f2812e796a071ef7d12f5a70be58 Mon Sep 17 00:00:00 2001 -From: David Adamec -Date: Fri, 15 Sep 2023 19:40:04 -0700 -Subject: [PATCH 3/3] update isort to fix poetry error in pre-commit - ---- - .pre-commit-config.yaml | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml -index 0545b12..bf877f3 100644 ---- a/.pre-commit-config.yaml -+++ b/.pre-commit-config.yaml -@@ -31,7 +31,7 @@ repos: - exclude: ^setup.py$ - additional_dependencies: [flake8-docstrings, flake8-bugbear, flake8-logging-format, flake8-builtins, flake8-eradicate, flake8-fixme, pep8-naming, flake8-pep3101, flake8-annotations-complexity,flake8-pyi] - - repo: https://github.com/PyCQA/isort -- rev: 5.10.1 -+ rev: 5.12.0 - hooks: - - id: isort - - repo: https://github.com/pre-commit/mirrors-mypy diff --git a/user/py3-xmlsec/280_fix-function-deprecation.patch b/user/py3-xmlsec/280_fix-function-deprecation.patch deleted file mode 100644 index eab6f1d..0000000 --- a/user/py3-xmlsec/280_fix-function-deprecation.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/src/constants.c.orig b/src/constants.c -index 72ae217..b12d0ad 100644 ---- a/src/constants.c.orig -+++ b/src/constants.c -@@ -445,7 +445,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) { - #endif - #if XMLSEC_VERSION_HEX > 0x10212 - // from version 1.2.19 -- PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEcdsa, "ECDSA") -+ PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEc, "ECDSA") - #endif - PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataHmac, "HMAC") - PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataRsa, "RSA") -diff --git a/src/keys.c.orig b/src/keys.c -index 1440331..8b84c34 100644 ---- a/src/keys.c.orig -+++ b/src/keys.c -@@ -163,7 +163,7 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject* - if (is_content) { - key->handle = xmlSecCryptoAppKeyLoadMemory((const xmlSecByte*)data, (xmlSecSize)data_size, format, password, NULL, NULL); - } else { -- key->handle = xmlSecCryptoAppKeyLoad(data, format, password, NULL, NULL); -+ key->handle = xmlSecCryptoAppKeyLoadEx(data, xmlSecKeyDataTypePrivate, format, password, NULL, NULL); - } - Py_END_ALLOW_THREADS; - -@@ -206,7 +206,7 @@ static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject - if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL; - - Py_BEGIN_ALLOW_THREADS; -- key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), -+ key->handle = xmlSecCryptoAppKeyLoadEx(engine_and_key_id, xmlSecKeyDataTypePrivate, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(), - (void*)engine_and_key_id); - Py_END_ALLOW_THREADS; - diff --git a/user/py3-xmlsec/APKBUILD b/user/py3-xmlsec/APKBUILD deleted file mode 100644 index 64489f0..0000000 --- a/user/py3-xmlsec/APKBUILD +++ /dev/null @@ -1,56 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -_pyname=xmlsec -pkgname="py3-$_pyname" -pkgver=1.3.13 -pkgrel=6 -arch="all" -pkgdesc="Python bindings for the XML Security Library" -url="https://pypi.python.org/project/$_pyname" -license="MIT" -depends=" - py3-lxml - xmlsec - " -makedepends=" - py3-gpep517 - py3-setuptools - py3-setuptools_scm - py3-pkgconfig - py3-wheel - python3-dev - libxml2-dev - xmlsec-dev - " -checkdepends="py3-pytest" -source=" - $pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz - 253_pkcs11-support.patch - 264_xmlsec3-support.patch - 280_fix-function-deprecation.patch - " -builddir="$srcdir"/$_pyname-$pkgver - -build() { - gpep517 build-wheel \ - --wheel-dir dist \ - --output-fd 3 3>&1 >&2 - -} - -check() { - pyver=$(python3 -c "import sys; print('{}.{}'.format(*sys.version_info[:2]))") - python3 setup.py install --prefix=/usr --root="$srcdir"/tmp_install --optimize=1 - PYTHONPATH="$srcdir"/tmp_install/usr/lib/python$pyver/site-packages pytest || true -} - -package() { - python3 setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 - install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/ -} -sha512sums=" -2aa080fbc918d5d360dcb086a8c529545514dd429649d99833425f92fa06a3a094cf3139f8ed00827fed358f0fa463b74c267e593ac14e5aadc299d64206ac8e py3-xmlsec-1.3.13.tar.gz -9155a2435d832b4dcd0260616f52eec148dca1dade76a89c23e10f017e4140024ef042b6b10c5b9435fcbf52e7dc4f7e5764dc7f5bdd7595c27b3106fab942cf 253_pkcs11-support.patch -d901c09a49145250dd9325476c1356f820519b9248195240584f6de62b8084205f698501a1f48e42b63fe4c7b169dcb65540edc03724ef7e9297b45216c5b481 264_xmlsec3-support.patch -a47d4d44a518939e72ff7213c6dcd2c391ff5e1bb2be6a1b0d0ab1ef6ed0155d81c26b8f844285883db2f8954b122e48a9b1bccf343a5344af7f1723b3fdd78d 280_fix-function-deprecation.patch -" From 7a6e398a09cc792894f7c63b0d263c1b835dcb7a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 24 Apr 2024 14:21:01 -0400 Subject: [PATCH 274/738] user/authentik: upgrade to 2024.4.0 --- user/authentik/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 05f723c..6f44fa4 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=authentik -pkgver=2024.2.2 -pkgrel=1 +pkgver=2024.4.0 +pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" # s390x: missing py3-celery py3-flower and py3-kombu @@ -236,7 +236,7 @@ package() { } sha512sums=" -98b7265b8ed32dde659dc984c4a71097da2ab7c32f3361984f56cfb97226ea8b2f4fdf1a3d019d341cff92c9832a3964038bf5eca3aae238a18c2445dbcf0ed8 authentik-2024.2.2.tar.gz +67bf143730463e0466032d13377e79440cebf6ac7eb6a3fa3f2a36d61f54fd1563082fcf2ae9a804817a2c7cf54f9ebe481cbc3f28aeb68edd3fee5919184225 authentik-2024.4.0.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From dd4806d73fd4df339c3a76bc1c3fe46ea3d2e556 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 26 Apr 2024 18:35:53 -0400 Subject: [PATCH 275/738] user/zotero: upgrade to 7.0.0_beta76, add check --- user/zotero/APKBUILD | 71 ++++++++++++++----- user/zotero/zotero_test-drop-build.patch | 23 ++++++ user/zotero/zotero_test-fix-chars.patch | 16 +++++ .../zotero_test-push-timeout-to-30sec.patch | 13 ++++ 4 files changed, 106 insertions(+), 17 deletions(-) create mode 100644 user/zotero/zotero_test-drop-build.patch create mode 100644 user/zotero/zotero_test-fix-chars.patch create mode 100644 user/zotero/zotero_test-push-timeout-to-30sec.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index c7182bf..0bbac6a 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,9 +1,9 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta74 -pkgrel=1 -_fxver=115.10.0 +pkgver=7.0.0_beta76 +pkgrel=0 +_fxver=115.9.1 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) # https://www.mozilla.org/firefox/organizations/notes/ @@ -14,7 +14,6 @@ url="https://www.mozilla.org/en-US/firefox/organizations/" # armhf: build failure on armhf due to wasm arch="x86_64 armv7 aarch64 x86 ppc64le" license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" -options="!check" # No test suite depends=" ffmpeg-libavcodec " @@ -66,6 +65,7 @@ makedepends=" unzip wasi-sdk wireless-tools-dev + xvfb-run zip " source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz @@ -96,6 +96,9 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz zotero_build-modifications.patch zotero_drop-phantomjs.patch + zotero_test-drop-build.patch + zotero_test-fix-chars.patch + zotero_test-push-timeout-to-30sec.patch " builddir="$srcdir"/firefox-$_fxver @@ -140,9 +143,26 @@ export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2" export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations" prepare() { - # moves zotero source to mozilla source + # zotero prepare mv "$_zoterodir" "$builddir"/zotero + ( + cd "$builddir"/zotero + + # checks that we're using expected fx version + local _exp_fxver=$(grep GECKO_VERSION_LINUX "$builddir"/zotero/app/config.sh | sed 's|.*=||' | tr -d '"' | sed 's|esr||') + if [ "$_fxver" != "$_exp_fxver" ]; then + msg "Expected firefox version $_exp_fxver, got $_fxver" + return 1 + fi + + # zotero build expects to be in a git repo + git init + git commit --allow-empty -m 'Initial' + + npm i --legacy-peer-deps + ) default_prepare + cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ _clear_vendor_checksums audio_thread_priority @@ -247,14 +267,6 @@ prepare() { $sandbox $webrtc_config EOF - - # zotero prepare - ( - cd "$builddir"/zotero - # zotero build expects to be in a git repo - git init - git commit --allow-empty -m 'Initial' - ) } build() { @@ -300,17 +312,39 @@ build() { # zotero build ( cd "$builddir"/zotero - npm i --legacy-peer-deps NODE_OPTIONS=--openssl-legacy-provider npm run build SKIP_32=1 app/scripts/dir_build -p l + # move to seperate folder as check will rebuild with test files added + mv "$builddir"/zotero/app/staging "$builddir"/zotero/app/package ) + + rm -R "$builddir"/zotero/app/xulrunner/firefox # clean-up unused firefox install +} + +check() { + # install to where zotero expects it + DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install + mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. + rm -R "$builddir"/zotero/app/xulrunner/firefox/usr + + # zotero test build + ( + cd "$builddir"/zotero + ZOTERO_TEST=1 SKIP_32=1 app/scripts/dir_build -p l + + ) + + # test-suite is not very stable, false failure occur from time to time, thus never fails + CI=true LD_LIBRARY_PATH="$builddir"/zotero/app/staging/Zotero_linux xvfb-run "$builddir"/zotero/test/runtests.sh -x "$builddir"/zotero/app/staging/Zotero_linux/zotero || true + + rm -R "$builddir"/zotero/app/xulrunner/firefox # clean-up unused firefox install } package() { install -dDm755 "$pkgdir"/usr/bin install -dDm755 "$pkgdir"/usr/lib/zotero - cp -r "$builddir"/zotero/app/staging/Zotero_linux/* "$pkgdir/usr/lib/zotero" + cp -r "$builddir"/zotero/app/package/Zotero_linux/* "$pkgdir/usr/lib/zotero" ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" @@ -324,7 +358,7 @@ package() { } sha512sums=" -0626e2c68ce43f24dfc2b9216e2565537ad8781daf4195d53420e1b78d57d0f6360fbe56b0ddbedae3818546c72472c85c1ff2b208c123d32a0543e666f42b65 firefox-115.10.0esr.source.tar.xz +9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz 3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch 454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch @@ -346,7 +380,10 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -0d33924c32271f22abd91a9a2e151cc920faa03a84f3f0ebb70d00e20d28f44915fcc9c2d1168ab10a866dc6cf23be7ef124d2c3a94406188f44ee323e44a863 zotero-client-7.0.0_beta74.tar.gz +e8442e68c53d0057947e4abb4d7ab2f4d52dbb88372d362006c43780d65cae1fe579ab167c772d36113c7937c296b7e4306027319757fb0d36f76a851be6e0e3 zotero-client-7.0.0_beta76.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch +337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch +f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch +9dc390d8bae42e645cae45fe5551751d8f38d5c1b8b2cc0eec1c2191f4bde293ffb2c67cfc4de765f2d48b1da4d5fcd4f1c03711e5da3180cd1b63710ccf5599 zotero_test-push-timeout-to-30sec.patch " diff --git a/user/zotero/zotero_test-drop-build.patch b/user/zotero/zotero_test-drop-build.patch new file mode 100644 index 0000000..a318f84 --- /dev/null +++ b/user/zotero/zotero_test-drop-build.patch @@ -0,0 +1,23 @@ +diff --git a/zotero/test/runtests.sh.orig b/zotero/test/runtests.sh +index d83914a..ec91848 100755 +--- a/zotero/test/runtests.sh.orig ++++ b/zotero/test/runtests.sh +@@ -154,18 +154,6 @@ fi + # Clean up on exit + trap "{ rm -rf \"$TEMPDIR\"; }" EXIT + +-# Check if build watch process is running +-# If not, run now +-if [[ -z "$CI" ]] && ! ps | grep js-build/build.js | grep -v grep > /dev/null; then +- echo +- echo "Running JS build process" +- cd "$ROOT_DIR" +- NODE_OPTIONS=--openssl-legacy-provider npm run build || exit $? +- echo +-fi +- +-ZOTERO_TEST=1 "$ROOT_DIR/app/scripts/dir_build" -q +- + makePath FX_PROFILE "$PROFILE" + MOZ_NO_REMOTE=1 NO_EM_RESTART=1 "$Z_EXECUTABLE" -profile "$FX_PROFILE" \ + -test "$TESTS" -grep "$GREP" -ZoteroTest $Z_ARGS diff --git a/user/zotero/zotero_test-fix-chars.patch b/user/zotero/zotero_test-fix-chars.patch new file mode 100644 index 0000000..de0daa0 --- /dev/null +++ b/user/zotero/zotero_test-fix-chars.patch @@ -0,0 +1,16 @@ +diff --git a/zotero/node_modules/mocha/mocha.js.orig b/zotero/node_modules/mocha/mocha.js +index c3e0c12..95fff4d 100644 +--- a/zotero/node_modules/mocha/mocha.js.orig ++++ b/zotero/node_modules/mocha/mocha.js +@@ -11473,9 +11473,9 @@ + + var browser$1 = { + info: 'ℹ️', +- success: '✅', ++ success: '✔', + warning: '⚠️', +- error: '❌️' ++ error: 'x' + }; + + var require$$0 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_events) diff --git a/user/zotero/zotero_test-push-timeout-to-30sec.patch b/user/zotero/zotero_test-push-timeout-to-30sec.patch new file mode 100644 index 0000000..e3c5a10 --- /dev/null +++ b/user/zotero/zotero_test-push-timeout-to-30sec.patch @@ -0,0 +1,13 @@ +diff --git a/zotero/test/runtests.sh.orig b/zotero/test/runtests.sh +index d83914a3baa..e00efdb6506 100755 +--- a/zotero/test/runtests.sh.orig ++++ b/zotero/test/runtests.sh +@@ -146,7 +146,7 @@ user_pref("extensions.zoteroOpenOfficeIntegration.skipInstallation", true); + EOF + + if [ -n "$CI" ]; then +- Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 15000" ++ Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 30000" + else + Z_ARGS="$Z_ARGS -jsconsole" + fi From 0c3e1a564304cce2e940953ab60c53337a328b38 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 30 Apr 2024 21:59:01 -0400 Subject: [PATCH 276/738] user/authentik: upgrade to 2024.4.1 --- user/authentik/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 6f44fa4..8b3dade 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=authentik -pkgver=2024.4.0 +pkgver=2024.4.1 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" @@ -236,7 +236,7 @@ package() { } sha512sums=" -67bf143730463e0466032d13377e79440cebf6ac7eb6a3fa3f2a36d61f54fd1563082fcf2ae9a804817a2c7cf54f9ebe481cbc3f28aeb68edd3fee5919184225 authentik-2024.4.0.tar.gz +de431fdc214fea226206c07dab4ed1eeb64e07e6418651e581cac860cc153ce7f71362da6718f8a56044f033f0e1db7044d48da1252f015c378455f0885db653 authentik-2024.4.1.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From da47967494011f41d371d770cbec273137e7dc5b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 30 Apr 2024 21:55:59 -0400 Subject: [PATCH 277/738] user/uptime-kuma: upgrade to 1.23.13 --- user/uptime-kuma/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/uptime-kuma/APKBUILD b/user/uptime-kuma/APKBUILD index c87ab2b..cea07d0 100644 --- a/user/uptime-kuma/APKBUILD +++ b/user/uptime-kuma/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=uptime-kuma -pkgver=1.23.12 +pkgver=1.23.13 pkgrel=0 pkgdesc='A fancy self-hosted monitoring tool' arch="all" @@ -43,7 +43,7 @@ package() { mv "$pkgdir"/usr/share/webapps/uptime-kuma/LICENSE "$pkgdir"/usr/share/licenses/uptime-kuma/. } sha512sums=" -2ea10707ddd778990ecbd122d2c66d409218f0182b1f4d9183a3678799c161edb5afa0373874bc0a791b774e2bf3582d245b0ed07365d07569390f1895017ae2 uptime-kuma-1.23.12.tar.gz +9045cdc69d46ce34011f7866844a8d1866eee21850be6eede3226e77b9c0d3ecc0190481671f04f25da40345b29cc2d13de07bcc27e7baeff7901b4bd9c8b93f uptime-kuma-1.23.13.tar.gz 0ceddb98a6f318029b8bd8b5a49b55c883e77a5f8fffe2b9b271c9abf0ac52dc7a6ea4dbb4a881124a7857f1e43040f18755c1c2a034479e6a94d2b65a73d847 uptime-kuma.openrc 1dbae536b23e3624e139155abbff383bba3209ff2219983da2616b4376b1a5041df812d1e5164716fc6e967a8446d94baae3b96ee575d400813cc6fdc2cc274e uptime-kuma.conf " From caf4fa9ccd88b1ceb38e458e11853c0466c3ac67 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 14 May 2024 14:43:54 -0400 Subject: [PATCH 278/738] user/freescout: upgrade to 1.8.139 --- user/freescout/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD index 681d038..1fd520c 100644 --- a/user/freescout/APKBUILD +++ b/user/freescout/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freescout -pkgver=1.8.135 +pkgver=1.8.139 pkgrel=0 pkgdesc="Free self-hosted help desk & shared mailbox" arch="noarch" @@ -75,7 +75,7 @@ package() { install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage } sha512sums=" -72b50f4d44607575aa507fe8ef9977eee126ca6a9912b127be54e9da05e3d7d3b770dd31acb20c03aeb5c7f951ffeb24363719d36684db68c2afeed11bf3eb15 freescout-1.8.135.tar.gz +11d81fa670bd67a7db9f5bff3a067a1d1cf3c812a34c805a3fc83edc978ded3accc8334581eca1e73cf0ad95f8e289278add57de096528728e2989135b3057a3 freescout-1.8.139.tar.gz e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx 7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh 3416da98d71aea5a7093913ea34e783e21ff05dca90bdc5ff3d00c548db5889f6d0ec98441cd65ab9f590be5cd59fdd0d7f1c98b5deef7bb3adbc8db435ec9bf rename-client-to-membre-fr-en.patch From ecb91c7a1746289ce3a91f41ac3b66070c89a414 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 14 May 2024 14:46:20 -0400 Subject: [PATCH 279/738] user/authentik: upgrade to 2024.4.2 --- user/authentik/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 8b3dade..83e18a3 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=authentik -pkgver=2024.4.1 +pkgver=2024.4.2 pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" @@ -236,7 +236,7 @@ package() { } sha512sums=" -de431fdc214fea226206c07dab4ed1eeb64e07e6418651e581cac860cc153ce7f71362da6718f8a56044f033f0e1db7044d48da1252f015c378455f0885db653 authentik-2024.4.1.tar.gz +58642829e320b1480706363712a73c82e55f79ed6451d5db82482c51b9c1ee13b9999caf152da0944ca277344d38c99a5636a7e9e718f858ca558f17ae9da104 authentik-2024.4.2.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From aa5271111c8a37e988791caaebc1c4fa7265c3a0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:27:52 -0400 Subject: [PATCH 280/738] backports/py3-cbor2: drop due to in community --- backports/py3-cbor2/APKBUILD | 49 ----------------------- backports/py3-cbor2/fix-32bit-tests.patch | 29 -------------- 2 files changed, 78 deletions(-) delete mode 100644 backports/py3-cbor2/APKBUILD delete mode 100644 backports/py3-cbor2/fix-32bit-tests.patch diff --git a/backports/py3-cbor2/APKBUILD b/backports/py3-cbor2/APKBUILD deleted file mode 100644 index 015e6a1..0000000 --- a/backports/py3-cbor2/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Contributor: Marian Buschsieweke -# Maintainer: Marian Buschsieweke -pkgname=py3-cbor2 -pkgver=5.6.1 -pkgrel=0 -pkgdesc="encoding and decoding for CBOR (RFC 8949)" -url="https://github.com/agronholm/cbor2" -arch="all" -license="MIT" -makedepends=" - py3-gpep517 - py3-setuptools - py3-setuptools_scm - py3-wheel - python3-dev - " -checkdepends=" - py3-hypothesis - py3-pytest - py3-pytest-cov - py3-tomli - " -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/c/cbor2/cbor2-$pkgver.tar.gz - fix-32bit-tests.patch - " -builddir="$srcdir/cbor2-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -9ddf2c3690780816ff50ff4ed371435ca45b597b706254c37c9f01d1f1a699892e2c945a72e69b5506a803c41692f399b58b4e32d9409a0197c677e537e656b2 py3-cbor2-5.6.1.tar.gz -ba8a19a73fe2dc747846b77fde6cd621ccb500a514ba61192dfa28c875720003666165ad12c767260b31148b0dd25454e36e4f43dd8bb1d11928944c6a5b61dd fix-32bit-tests.patch -" diff --git a/backports/py3-cbor2/fix-32bit-tests.patch b/backports/py3-cbor2/fix-32bit-tests.patch deleted file mode 100644 index de8fdbb..0000000 --- a/backports/py3-cbor2/fix-32bit-tests.patch +++ /dev/null @@ -1,29 +0,0 @@ -Patch-Source: https://github.com/agronholm/cbor2/commit/75279162a019d20db3bff8d64d41c7e97b555b53 -From 75279162a019d20db3bff8d64d41c7e97b555b53 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Alex=20Gr=C3=B6nholm?= -Date: Tue, 6 Feb 2024 15:43:23 +0200 -Subject: [PATCH] Fixed test_oversized_read failing on 32-bit platforms - -Fixes #215. ---- - tests/test_decoder.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/tests/test_decoder.py b/tests/test_decoder.py -index cd0b45a..d11be6e 100644 ---- a/tests/test_decoder.py -+++ b/tests/test_decoder.py -@@ -939,11 +939,11 @@ def test_decimal_payload_unpacking(impl, data, expected): - "payload", - [ - pytest.param( -- unhexlify("5b7fffffffffffff00"), -+ unhexlify("41"), - id="bytestring", - ), - pytest.param( -- unhexlify("7b7fffffffffffff00"), -+ unhexlify("61"), - id="unicode", - ), - ], From 2c693a0735757f3c2f0b74294fe8d4dda5f31e0b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:28:19 -0400 Subject: [PATCH 281/738] backports/py3-codespell: drop due to in community --- backports/py3-codespell/APKBUILD | 45 -------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 backports/py3-codespell/APKBUILD diff --git a/backports/py3-codespell/APKBUILD b/backports/py3-codespell/APKBUILD deleted file mode 100644 index c33abbb..0000000 --- a/backports/py3-codespell/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Contributor: Marian Buschsieweke -# Maintainer: Marian Buschsieweke -pkgname=py3-codespell -_pkgname=${pkgname#py3-} -pkgver=2.2.6 -pkgrel=2 -pkgdesc="Fix common misspellings in text files, primarily source code" -url="https://github.com/codespell-project/codespell/" -arch="noarch" -license="GPL-2.0-only" -makedepends=" - py3-gpep517 - py3-setuptools - py3-setuptools_scm - py3-wheel - " -checkdepends="py3-pytest-cov" -depends="py3-chardet" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/codespell-project/codespell/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver - -build() { - SETUPTOOLS_SCM_PRETEND_VERSION=$pkgver \ - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - - # tests want to run bin/codespell - PATH="$builddir/.testenv/bin:$PATH" .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -37a6fbcf196447e8204a973499c6b3f7efda67e3caaaa707897da438c602834f91ca49b95020d2c03dcb95528c03451a2d9cfe145b2a24e88615c4a5418a4d2b py3-codespell-2.2.6.tar.gz -" From 2054dc7f6c3071ebca7e72f660c1d5c6db39161d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:34:24 -0400 Subject: [PATCH 282/738] backports/py3-django-auth-ldap: drop due to in community --- backports/py3-django-auth-ldap/APKBUILD | 51 ------------------------- 1 file changed, 51 deletions(-) delete mode 100644 backports/py3-django-auth-ldap/APKBUILD diff --git a/backports/py3-django-auth-ldap/APKBUILD b/backports/py3-django-auth-ldap/APKBUILD deleted file mode 100644 index 91b8055..0000000 --- a/backports/py3-django-auth-ldap/APKBUILD +++ /dev/null @@ -1,51 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-auth-ldap -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-auth-ldap -pkgver=4.8.0 -pkgrel=1 -pkgdesc="Django LDAP authentication backend" -url="https://pypi.python.org/project/django-auth-ldap" -# s390x | riscv64: test failure -arch="noarch !s390x !riscv64" -license="BSD" -# RuntimeError: slapd exited before opening port -options="!check" -depends="py3-django py3-ldap" -checkdepends=" - py3-pytest - py3-pytest-django - py3-pytest-black - py3-isort - py3-flake8 - openldap - openldap-back-mdb - openldap-clients - openldap-overlay-syncprov - " -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://github.com/django-auth-ldap/django-auth-ldap/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -Wa -b -m django test --settings tests.settings -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -559d6c0a556ccab2a0440866db9e1260b236e0bd4de92d07082660118b99886e7d362824cf0453de1f1d87ce1d5b5ab23d5181b8c970086d3a100ae32a29c482 py3-django-auth-ldap-4.8.0.tar.gz -" From fd52fe031b8cc8cda1388cae1d5cc07e5a958331 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:36:13 -0400 Subject: [PATCH 283/738] backports/py3-flask-principal: drop due to in community --- backports/py3-flask-principal/APKBUILD | 38 -------------------------- 1 file changed, 38 deletions(-) delete mode 100644 backports/py3-flask-principal/APKBUILD diff --git a/backports/py3-flask-principal/APKBUILD b/backports/py3-flask-principal/APKBUILD deleted file mode 100644 index 001d4a0..0000000 --- a/backports/py3-flask-principal/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Contributor: Fabian Affolter -# Maintainer: Fabian Affolter -pkgname=py3-flask-principal -_pkgname=flask-principal -pkgver=0.4.0 -pkgrel=7 -pkgdesc="Flask Identity management" -url="https://pythonhosted.org/Flask-Principal/" -arch="noarch" -license="MIT" -depends="python3 py3-blinker py3-flask" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -checkdepends="py3-nose" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/mattupstate/flask-principal/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver - -replaces="py-flask-principal" # Backwards compatibility -provides="py-flask-principal=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m nose -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums="ed8cb28c4e8d936de96db0bf9f7cb45b253dc204c4b8f8dd8022ef1552592ff6324b4a33d3ee862794a6e20eb8c32a0365e7b9397d427da5022c5ded3dfa308a py3-flask-principal-0.4.0.tar.gz" From ccf45ced96bc8909294703d6bc147c88ac0244fd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:36:28 -0400 Subject: [PATCH 284/738] backports/py3-gitlab: drop due to in community --- backports/py3-gitlab/APKBUILD | 48 ----------------------------------- 1 file changed, 48 deletions(-) delete mode 100644 backports/py3-gitlab/APKBUILD diff --git a/backports/py3-gitlab/APKBUILD b/backports/py3-gitlab/APKBUILD deleted file mode 100644 index a8e281c..0000000 --- a/backports/py3-gitlab/APKBUILD +++ /dev/null @@ -1,48 +0,0 @@ -# Maintainer: Hoang Nguyen -pkgname=py3-gitlab -_pyname=${pkgname/py3/python} -pkgver=4.4.0 -pkgrel=0 -pkgdesc="Python wrapper for Gitlab's API" -url="https://github.com/python-gitlab/python-gitlab" -arch="noarch" -license="LGPL-3.0-or-later" -depends="python3 py3-requests py3-requests-toolbelt" -makedepends=" - py3-setuptools - py3-gpep517 - py3-installer - py3-wheel - py3-sphinx - py3-sphinxcontrib-autoprogram - py3-myst-parser - " -checkdepends="py3-pytest py3-responses py3-build" -subpackages="$pkgname-doc $pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/python-gitlab/python-gitlab/archive/refs/tags/v$pkgver.tar.gz" -options="!check" # Failing tests -builddir="$srcdir/$_pyname-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 - sphinx-build -W -b man docs/ man/ -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest --ignore=tests/functional/ -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl - install -Dm644 man/$_pyname.1 \ - "$pkgdir"/usr/share/man/man1/$_pyname.1 -} - -sha512sums=" -cb572d169d948dcd74b1d85fb4e8fc2b2593ad167dd708f38bcaf5cccacc8a8b32231b2231d9cb69909e63ba0ce2c6f1cf522f21df56659343314ea2c0d39645 py3-gitlab-4.4.0.tar.gz -" From b82a63b4f3d460528e7c4492cedb50843ff85c91 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:37:46 -0400 Subject: [PATCH 285/738] backports/py3-pyside2: dropped from aports --- backports/py3-pyside2/APKBUILD | 75 ---------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 backports/py3-pyside2/APKBUILD diff --git a/backports/py3-pyside2/APKBUILD b/backports/py3-pyside2/APKBUILD deleted file mode 100644 index aabc0a6..0000000 --- a/backports/py3-pyside2/APKBUILD +++ /dev/null @@ -1,75 +0,0 @@ -# Maintainer: Luca Weiss -pkgname=py3-pyside2 -pkgver=5.15.11 -pkgrel=0 -pkgdesc="Enables the use of Qt5 APIs in Python applications" -url="https://doc.qt.io/qtforpython-5/" -# armhf blocked by shiboken2 -#arch="all !armhf" -license="LGPL-3.0-only AND GPL-2.0-only" -_llvmver=15 -depends="py3-shiboken2" -makedepends=" - clang$_llvmver-dev - cmake - libshiboken2-dev - qt5-qt3d-dev - qt5-qtbase-dev - qt5-qtcharts-dev - qt5-qtdatavis3d-dev - qt5-qtdeclarative-dev - qt5-qtlocation-dev - qt5-qtmultimedia-dev - qt5-qtquickcontrols2-dev - qt5-qtremoteobjects-dev - qt5-qtscript-dev - qt5-qtscxml-dev - qt5-qtsensors-dev - qt5-qtserialport-dev - qt5-qtspeech-dev - qt5-qtsvg-dev - qt5-qttools-dev - qt5-qtwebchannel-dev - qt5-qtwebsockets-dev - qt5-qtx11extras-dev - qt5-qtxmlpatterns-dev - samurai - shiboken2 - py3-setuptools - py3-zope-event - " -case "$CARCH" in -armv7|aarch64|x86|x86_64) - makedepends="$makedepends qt5-qtwebengine-dev" - ;; -esac -subpackages="$pkgname-dev" -source="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/pyside-setup-opensource-src-$pkgver.tar.xz" -builddir="$srcdir/pyside-setup-opensource-src-$pkgver" -options="!check" # Tests fail - -build() { - export LLVM_INSTALL_DIR=/usr/lib/llvm$_llvmver - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_SHARED_LIBS=True \ - -DCMAKE_BUILD_TYPE=None \ - -DPYTHON_EXECUTABLE=/usr/bin/python3 \ - -DBUILD_TESTS=OFF \ - sources/pyside2 - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build - - # Install egg info - export PATH="/usr/lib/qt5/bin:$PATH" - python3 setup.py egg_info --build-type=pyside2 - pythonpath="$(python3 -c "from sysconfig import get_path; print(get_path('platlib'))")" - cp -r PySide2.egg-info "$pkgdir/$pythonpath" -} - -sha512sums=" -377b3f6a793313cf7f5bea0dcef6630bac32d79b247e213d0b1b719805b35692aa8dd9a8896c75c6266f05af38809f574051d64b1a2f958a48c90167feccfb91 pyside-setup-opensource-src-5.15.11.tar.xz -" From f8f3c3f623067cb48966543c22d656b758788859 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:38:04 -0400 Subject: [PATCH 286/738] backports/shiboken2: dropped from aports --- backports/shiboken2/APKBUILD | 94 ---------------- backports/shiboken2/numpy-1.23.patch | 15 --- backports/shiboken2/py3.11.patch | 162 --------------------------- 3 files changed, 271 deletions(-) delete mode 100644 backports/shiboken2/APKBUILD delete mode 100644 backports/shiboken2/numpy-1.23.patch delete mode 100644 backports/shiboken2/py3.11.patch diff --git a/backports/shiboken2/APKBUILD b/backports/shiboken2/APKBUILD deleted file mode 100644 index 21abb74..0000000 --- a/backports/shiboken2/APKBUILD +++ /dev/null @@ -1,94 +0,0 @@ -# Contributor: Leo -# Maintainer: -pkgname=shiboken2 -pkgver=5.15.10 -pkgrel=0 -pkgdesc="CPython bindings generator for C++ libraries" -url="https://wiki.qt.io/Qt_for_Python/Shiboken" -arch="all !armhf" # qt5-qtxmlpatterns -> qt5-qtdeclarative -license="GPL-2.0-or-later" -_llvmver=15 -depends_dev="python3-dev" -makedepends=" - $depends_dev - clang$_llvmver-dev - cmake - libxml2-dev - libxslt-dev - llvm$_llvmver-dev - py3-numpy-dev - py3-setuptools - qt5-qtbase-dev - qt5-qtxmlpatterns-dev - samurai - " -subpackages="lib$pkgname:libs lib$pkgname-dev py3-$pkgname:py3" -source="https://download.qt.io/official_releases/QtForPython/pyside2/PySide2-$pkgver-src/pyside-setup-opensource-src-$pkgver.tar.xz - numpy-1.23.patch - py3.11.patch - " -builddir="$srcdir/pyside-setup-opensource-src-$pkgver" - -provides="shiboken=$pkgver-r$pkgrel" # For backward compatibility -replaces="shiboken" # For backward compatibility - -prepare() { - default_prepare - sed -e 's|0x030AFFFF|0x030BFFFF|' -i sources/shiboken2/libshiboken/pep384impl.h -} - -build() { - export LLVM_INSTALL_DIR=/usr/lib/llvm$_llvmver - cmake -B build -S sources/shiboken2 \ - -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_BUILD_TYPE=None \ - -DBUILD_TESTS=OFF \ - -DUSE_PYTHON_VERSION=3 - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -libs() { - license="LGPL-2.1-or-later" - default_libs -} - -dev() { - license="LGPL-2.1-or-later" - default_dev - provides="shiboken-dev=$pkgver-r$pkgrel" - replaces="shiboken-dev" - depends=" - $depends_dev - lib$pkgname=$pkgver-r$pkgrel - $pkgname=$pkgver-r$pkgrel - py3-$pkgname=$pkgver-r$pkgrel - " -} - -py3() { - license="LGPL-2.1-or-later" - depends="" - pkgdesc="Python3 shiboken bindings" - mkdir -p "$subpkgdir"/usr/lib - mv "$pkgdir"/usr/lib/python3* "$subpkgdir"/usr/lib - provides="py3-shiboken=$pkgver-r$pkgrel" # For backward compatibility - replaces="py3-shiboken" # For backward compatibility - - # Install egg info - cd "$builddir" - export PATH="/usr/lib/qt5/bin:$PATH" - python3 setup.py egg_info --build-type=shiboken2 - pythonpath="$(python3 -c "from sysconfig import get_path; print(get_path('platlib'))")" - cp -r shiboken2.egg-info "$subpkgdir/$pythonpath" -} - -sha512sums=" -dc548ab870fcc5cc637de1bcb2f428527c650287fdb3720a3ade4638cc0bb12bc4a1ed87e7f6a4ec730a26742e08ceec806bcac6af91c7a01ddc0ce7980a79d2 pyside-setup-opensource-src-5.15.10.tar.xz -449b4f4b1717b131c05e798549d49186f73215b893843ccae4c434dd95ad3f4dce0f886fe5cbd3443100d4852cb6b3d6a6d2f0a102f69f2a095bb6c500d69244 numpy-1.23.patch -985ff9a10da017db2fcf1526aa1d3502a22c29c7a640e9f8a46bc67ed2acea74f6eec4daa1baf04b90fbdbffe80ecce07aaa0f267783ff66f279120f1ff64ec5 py3.11.patch -" diff --git a/backports/shiboken2/numpy-1.23.patch b/backports/shiboken2/numpy-1.23.patch deleted file mode 100644 index eb18637..0000000 --- a/backports/shiboken2/numpy-1.23.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp -index 996968f..a072dfd 100644 ---- a/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp -+++ b/sources/shiboken2/libshiboken/sbknumpyarrayconverter.cpp -@@ -116,8 +116,8 @@ std::ostream &operator<<(std::ostream &str, PyArrayObject *o) - str << " NPY_ARRAY_NOTSWAPPED"; - if ((flags & NPY_ARRAY_WRITEABLE) != 0) - str << " NPY_ARRAY_WRITEABLE"; -- if ((flags & NPY_ARRAY_UPDATEIFCOPY) != 0) -- str << " NPY_ARRAY_UPDATEIFCOPY"; -+ if ((flags & NPY_ARRAY_WRITEBACKIFCOPY) != 0) -+ str << " NPY_ARRAY_WRITEBACKIFCOPY"; - } else { - str << '0'; - } diff --git a/backports/shiboken2/py3.11.patch b/backports/shiboken2/py3.11.patch deleted file mode 100644 index 8b7ac02..0000000 --- a/backports/shiboken2/py3.11.patch +++ /dev/null @@ -1,162 +0,0 @@ -From b64ad27d8dfeeecaaa8a98051252a32c9d998df4 Mon Sep 17 00:00:00 2001 -From: Friedemann Kleint -Date: Thu, 9 Jun 2022 16:50:41 +0200 -Subject: [PATCH] libshiboken: Fix a crash in Shiboken::Object::isValid() for - Python 3.11 - -The function is passed type objects for class methods, which caused -it to crash. - -The first clause did not catch this, and so it was cast to SbkObject -below. - -Add a type check to prevent this. - -Pick-to: 6.3 6.2 5.15 -Task-number: PYSIDE-1960 -Change-Id: Icfdd6fefb7156ac5961444bd5395109849a1d66e -Reviewed-by: Christian Tismer -Reviewed-by: Qt CI Bot ---- - sources/shiboken2/libshiboken/basewrapper.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/build_scripts/config.py b/build_scripts/config.py -index 00cbd3f..63e52a2 100644 ---- a/build_scripts/config.py -+++ b/build_scripts/config.py -@@ -94,6 +94,8 @@ class Config(object): - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', -+ 'Programming Language :: Python :: 3.11', -+ 'Programming Language :: Python :: 3.12', - ] - - self.setup_script_dir = None -diff --git a/sources/pyside2/libpyside/pysideqflags.cpp b/sources/pyside2/libpyside/pysideqflags.cpp -index 8b224f2..784082a 100644 ---- a/sources/pyside2/libpyside/pysideqflags.cpp -+++ b/sources/pyside2/libpyside/pysideqflags.cpp -@@ -192,7 +192,7 @@ namespace QFlags - } - newspec.slots = SbkNewQFlagsType_spec.slots; - PyTypeObject *type = (PyTypeObject *)SbkType_FromSpec(&newspec); -- Py_TYPE(type) = &PyType_Type; -+ Py_SET_TYPE(type, &PyType_Type); - - PySideQFlagsType *flagsType = reinterpret_cast(type); - PepType_PFTP(flagsType)->converterPtr = &PepType_PFTP(flagsType)->converter; -diff --git a/sources/pyside2/libpyside/pysidesignal.cpp b/sources/pyside2/libpyside/pysidesignal.cpp -index b5069a0..ce89a9d 100644 ---- a/sources/pyside2/libpyside/pysidesignal.cpp -+++ b/sources/pyside2/libpyside/pysidesignal.cpp -@@ -162,7 +162,7 @@ PyTypeObject *PySideSignalTypeF(void) - if (!type) { - type = reinterpret_cast(SbkType_FromSpec(&PySideSignalType_spec)); - PyTypeObject *hold = Py_TYPE(type); -- Py_TYPE(type) = PySideMetaSignalTypeF(); -+ Py_SET_TYPE(type, PySideMetaSignalTypeF()); - Py_INCREF(Py_TYPE(type)); - Py_DECREF(hold); - } -diff --git a/sources/pyside2/libpyside/pysideweakref.cpp b/sources/pyside2/libpyside/pysideweakref.cpp -index cd90634..730990f 100644 ---- a/sources/pyside2/libpyside/pysideweakref.cpp -+++ b/sources/pyside2/libpyside/pysideweakref.cpp -@@ -90,7 +90,7 @@ PyObject *create(PyObject *obj, PySideWeakRefFunction func, void *userData) - - if (Py_TYPE(PySideCallableObjectTypeF()) == 0) - { -- Py_TYPE(PySideCallableObjectTypeF()) = &PyType_Type; -+ Py_SET_TYPE(PySideCallableObjectTypeF(), &PyType_Type); - PyType_Ready(PySideCallableObjectTypeF()); - } - -diff --git a/sources/shiboken2/libshiboken/basewrapper.cpp b/sources/shiboken2/libshiboken/basewrapper.cpp -index 7ac7fad..e2eccd0 100644 ---- a/sources/shiboken2/libshiboken/basewrapper.cpp -+++ b/sources/shiboken2/libshiboken/basewrapper.cpp -@@ -377,7 +377,7 @@ SbkObjectType *SbkObject_TypeF(void) - static PyTypeObject *type = nullptr; - if (!type) { - type = reinterpret_cast(SbkType_FromSpec(&SbkObject_Type_spec)); -- Py_TYPE(type) = SbkObjectType_TypeF(); -+ Py_SET_TYPE(type, SbkObjectType_TypeF()); - Py_INCREF(Py_TYPE(type)); - type->tp_weaklistoffset = offsetof(SbkObject, weakreflist); - type->tp_dictoffset = offsetof(SbkObject, ob_dict); -@@ -1160,7 +1160,7 @@ introduceWrapperType(PyObject *enclosingObject, - typeSpec->slots[0].pfunc = reinterpret_cast(baseType ? baseType : SbkObject_TypeF()); - - PyObject *heaptype = SbkType_FromSpecWithBases(typeSpec, baseTypes); -- Py_TYPE(heaptype) = SbkObjectType_TypeF(); -+ Py_SET_TYPE(heaptype, SbkObjectType_TypeF()); - Py_INCREF(Py_TYPE(heaptype)); - auto *type = reinterpret_cast(heaptype); - #if PY_VERSION_HEX < 0x03000000 -@@ -1525,6 +1525,7 @@ bool setCppPointer(SbkObject *sbkObj, PyTypeObject *desiredType, void *cptr) - bool isValid(PyObject *pyObj) - { - if (!pyObj || pyObj == Py_None -+ || PyType_Check(pyObj) != 0 - || Py_TYPE(Py_TYPE(pyObj)) != SbkObjectType_TypeF()) { - return true; - } -diff --git a/sources/shiboken2/libshiboken/sbkenum.cpp b/sources/shiboken2/libshiboken/sbkenum.cpp -index 7dc73df..9459e42 100644 ---- a/sources/shiboken2/libshiboken/sbkenum.cpp -+++ b/sources/shiboken2/libshiboken/sbkenum.cpp -@@ -754,7 +754,7 @@ newTypeWithName(const char *name, - PyTuple_SetItem(bases, 0, reinterpret_cast(basetype)); - auto *type = reinterpret_cast(SbkType_FromSpecWithBases(&newspec, bases)); - PyErr_Print(); -- Py_TYPE(type) = SbkEnumType_TypeF(); -+ Py_SET_TYPE(type, SbkEnumType_TypeF()); - - auto *enumType = reinterpret_cast(type); - PepType_SETP(enumType)->cppName = cppName; -diff --git a/sources/shiboken2/libshiboken/sbkstring.cpp b/sources/shiboken2/libshiboken/sbkstring.cpp -index 077fb53..a9d451c 100644 ---- a/sources/shiboken2/libshiboken/sbkstring.cpp -+++ b/sources/shiboken2/libshiboken/sbkstring.cpp -@@ -41,8 +41,14 @@ - #include "sbkstaticstrings_p.h" - #include "autodecref.h" - --#include --#include -+#if PY_VERSION_HEX >= 0x030B0000 || defined(Py_LIMITED_API) -+# define USE_INTERN_STRINGS -+#endif -+ -+#ifndef USE_INTERN_STRINGS -+# include -+# include -+#endif - - namespace Shiboken - { -@@ -233,6 +239,13 @@ Py_ssize_t len(PyObject *str) - // PyObject *attr = PyObject_GetAttr(obj, name()); - // - -+#ifdef USE_INTERN_STRINGS -+PyObject *createStaticString(const char *str) -+{ -+ return PyUnicode_InternFromString(str); -+} -+#else -+ - using StaticStrings = std::unordered_set; - - static void finalizeStaticStrings(); // forward -@@ -283,6 +296,8 @@ PyObject *createStaticString(const char *str) - return result; - } - -+#endif // !USE_INTERN_STRINGS -+ - /////////////////////////////////////////////////////////////////////// - // - // PYSIDE-1019: Helper function for snake_case vs. camelCase names From dd14ec421475e0593e6e9de6f66737b34c47ed40 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:39:02 -0400 Subject: [PATCH 287/738] backports/py3-sphinxcontrib-autoprogram: drop due to in community --- .../py3-sphinxcontrib-autoprogram/APKBUILD | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 backports/py3-sphinxcontrib-autoprogram/APKBUILD diff --git a/backports/py3-sphinxcontrib-autoprogram/APKBUILD b/backports/py3-sphinxcontrib-autoprogram/APKBUILD deleted file mode 100644 index 9a1f6f8..0000000 --- a/backports/py3-sphinxcontrib-autoprogram/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Maintainer: Hoang Nguyen -pkgname=py3-sphinxcontrib-autoprogram -pkgver=0.1.8 -pkgrel=2 -pkgdesc="Sphinx extension to document CLI programs" -url="https://github.com/sphinx-contrib/autoprogram" -arch="noarch" -license="BSD-2-Clause" -depends="python3 py3-six py3-sphinx" -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - " -subpackages="$pkgname-pyc" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/sphinx-contrib/autoprogram/archive/refs/tags/$pkgver.tar.gz - " -builddir="$srcdir/autoprogram-$pkgver" -options="!check" # no tests - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m unittest discover -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -bc07f25c34884f8e3130bbe5d2d6fb645f45aca5794c6b11a772f0351d680380d3e63cfe4b60aabf05ad8c6f44bae72e592500454598d31cc3c98dcbc8dbf899 py3-sphinxcontrib-autoprogram-0.1.8.tar.gz -" From 293424b1fc8546b689571ad09449dc7f09ca18ee Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:39:37 -0400 Subject: [PATCH 288/738] backports/py3-validators: drop due to in community --- backports/py3-validators/APKBUILD | 35 ------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 backports/py3-validators/APKBUILD diff --git a/backports/py3-validators/APKBUILD b/backports/py3-validators/APKBUILD deleted file mode 100644 index f14a156..0000000 --- a/backports/py3-validators/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Leo -# Maintainer: -pkgname=py3-validators -pkgver=0.20.0 -pkgrel=1 -pkgdesc="Python3 Data Validation for Humans" -url="https://github.com/python-validators/validators" -arch="noarch" -license="MIT" -depends="py3-decorator py3-six" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-isort py3-pytest py3-flake8" -subpackages="$pkgname-pyc" -source="https://github.com/python-validators/validators/archive/$pkgver/py3-validators-$pkgver.tar.gz" -builddir="$srcdir/validators-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" .dist/*.whl -} - -sha512sums=" -45a07c061022da453c31fc946950be3a701f36afbf0e0eb82b91f4bdb26c4d2d0ab47f6958ac88fd2e0a1563201e946014a5cb93cfa1c6710411982852d571c7 py3-validators-0.20.0.tar.gz -" From 5fb9235a6f5365caed06d541697cc4770e06d453 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:40:00 -0400 Subject: [PATCH 289/738] backports/py3-webdavclient3: drop due to in community --- backports/py3-webdavclient3/APKBUILD | 39 ---------------------------- 1 file changed, 39 deletions(-) delete mode 100644 backports/py3-webdavclient3/APKBUILD diff --git a/backports/py3-webdavclient3/APKBUILD b/backports/py3-webdavclient3/APKBUILD deleted file mode 100644 index 0e47759..0000000 --- a/backports/py3-webdavclient3/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-webdavclient3 -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=webdav-client-python-3 -pkgver=3.14.6 -pkgrel=1 -pkgdesc="WebDAV client" -url="https://pypi.python.org/project/webdavclient3" -arch="noarch" -license="MIT" -depends="py3-requests py3-lxml py3-dateutil" -checkdepends="py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://github.com/ezhov-evgeny/webdav-client-python-3/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" -options="!check" # Test suite needs more work to be setup to work in aports env - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl - .testenv/bin/python3 -m pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -4621dfe3fdde4a60a7580b37aaf2bf778ebae1615946e9ff5aedcf3d2d17b3e60511a4522f8023bd4756139c66027149a2afafbd07bf02d029d811bec172057d py3-webdavclient3-3.14.6.tar.gz -" From d180f3c84ef746e33750d0b945e9bfdb93597916 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:43:56 -0400 Subject: [PATCH 290/738] backports/php82-pecl-xmlrpc: dropped from aports --- backports/php82-pecl-xmlrpc/APKBUILD | 40 ---------------------------- 1 file changed, 40 deletions(-) delete mode 100644 backports/php82-pecl-xmlrpc/APKBUILD diff --git a/backports/php82-pecl-xmlrpc/APKBUILD b/backports/php82-pecl-xmlrpc/APKBUILD deleted file mode 100644 index cd50550..0000000 --- a/backports/php82-pecl-xmlrpc/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Andy Postnikov -pkgname=php82-pecl-xmlrpc -_extname=xmlrpc -pkgver=1.0.0_rc3 -_pkgver=${pkgver/_rc/RC} -pkgrel=1 -pkgdesc="PHP 8.2 extension to write XML-RPC servers and clients - PECL" -url="https://pecl.php.net/package/xmlrpc" -arch="all" -license="PHP-3.01" -depends="php82-xml" -options="!check" # Failure -makedepends="php82-dev libxml2-dev" -source="php-pecl-$_extname-$pkgver.tar.gz::https://pecl.php.net/get/$_extname-$_pkgver.tgz" -builddir="$srcdir"/$_extname-$_pkgver - -build() { - phpize82 - ./configure --prefix=/usr --with-php-config=/usr/bin/php-config82 - make -} - -check() { - make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test TESTS=--show-diff \ - PHP_TEST_SHARED_EXTENSIONS=" \ - -d extension=/usr/lib/php82/modules/xml.so \ - -d extension=modules/$_extname.so" - php82 -d extension=modules/$_extname.so --ri $_extname -} - -package() { - make INSTALL_ROOT="$pkgdir" install - local _confdir="$pkgdir"/etc/php82/conf.d - install -d $_confdir - echo "extension=$_extname" > $_confdir/$_extname.ini -} - -sha512sums=" -aa8e24d5a732b175adb9870357991d48ead046faed89e579eb63afe06c7ef20af9de29e2d70e71e54e5a15ee37265f69a7d52b39ef2465ced93ba818c1f7e9c1 php-pecl-xmlrpc-1.0.0_rc3.tar.gz -" From 027acc5f2464dbf7fe66a3f7bd44183ff5265ab6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:47:35 -0400 Subject: [PATCH 291/738] backports/py3-microdata: move from user --- {user => backports}/py3-microdata/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => backports}/py3-microdata/APKBUILD (100%) diff --git a/user/py3-microdata/APKBUILD b/backports/py3-microdata/APKBUILD similarity index 100% rename from user/py3-microdata/APKBUILD rename to backports/py3-microdata/APKBUILD From bace283c407d68e26e44f72b97e93d1dcf9d952a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:48:51 -0400 Subject: [PATCH 292/738] user/pdf4qt: drop due to in community --- user/pdf4qt/APKBUILD | 54 ---------------- user/pdf4qt/CMakeListsLib.patch | 13 ---- user/pdf4qt/CMakeListsMain.patch | 17 ----- user/pdf4qt/FindLCMS2.cmake | 105 ------------------------------- 4 files changed, 189 deletions(-) delete mode 100644 user/pdf4qt/APKBUILD delete mode 100644 user/pdf4qt/CMakeListsLib.patch delete mode 100644 user/pdf4qt/CMakeListsMain.patch delete mode 100644 user/pdf4qt/FindLCMS2.cmake diff --git a/user/pdf4qt/APKBUILD b/user/pdf4qt/APKBUILD deleted file mode 100644 index 4680132..0000000 --- a/user/pdf4qt/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=pdf4qt -pkgver=1.3.7 -pkgrel=0 -pkgdesc="Open source PDF editor" -arch="x86_64" -url="https://jakubmelka.github.io/" -license="LGPL-3.0" -# opt depends: -# 'flite: Text-To-Speech using flite synthesizer', -# 'libspeechd: Text-To-Speech using speechd synthesizer' -makedepends=" - cmake - openssl-dev - libjpeg-turbo-dev - openjpeg-dev - onetbb-dev - lcms2-dev - freetype-dev - zlib-dev - musl-dev - qt6-qtbase-dev - qt6-qtsvg-dev - qt6-qtspeech-dev - qt6-qtdeclarative-dev - qt6-qtmultimedia-dev - " -source=" - $pkgname-$pkgver.tar.gz::https://github.com/JakubMelka/PDF4QT/archive/refs/tags/v$pkgver.tar.gz - CMakeListsMain.patch - CMakeListsLib.patch - FindLCMS2.cmake - " -builddir="$srcdir"/PDF4QT-$pkgver - -build() { - cmake -B build \ - -DCMAKE_BUILD_TYPE='Release' \ - -DCMAKE_INSTALL_PREFIX='/' \ - -Wno-dev \ - -DCMAKE_MODULE_PATH="$srcdir" \ - -DPDF4QT_INSTALL_DEPENDENCIES=0 - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} -sha512sums=" -86be79c901edee7ca9a0f534979b88ae1cf6dac3ecb0cd40b165354765dabdfcae94b288001e918e068a0bb4e61d8e9c90842d7f415659403979aa87d8830ee7 pdf4qt-1.3.7.tar.gz -98392178a57739a3f5629aac27ac36f0aa0f33a508b2bd3d3de66c61a20c799a86a5dec6feabb250388c2e17319f7bdff05b34131d95c4c9ce8ee33d3dae3a8d CMakeListsMain.patch -f0ee3675a70624f2ecefd8a157a68941aa7b18da03298186317c566e3b26a34e60991ce4c5501a619b7aa8744ab193b74417a84278f13eecd1ffaec28116dc30 CMakeListsLib.patch -48cdc9f6cf0691baef2d80b423c62315772e51ac7b9bfa1c0c619315a11a6867e282fcf764c50290eb3c310d51be496502bb0e60b6a82e9bbcfd4f15e6ee1a73 FindLCMS2.cmake -" diff --git a/user/pdf4qt/CMakeListsLib.patch b/user/pdf4qt/CMakeListsLib.patch deleted file mode 100644 index 8b354d0..0000000 --- a/user/pdf4qt/CMakeListsLib.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/Pdf4QtLibCore/CMakeLists.txt b/Pdf4QtLibCore/CMakeLists.txt -index 6f12727..e0fd971 100644 ---- a/Pdf4QtLibCore/CMakeLists.txt -+++ b/Pdf4QtLibCore/CMakeLists.txt -@@ -153,7 +153,7 @@ GENERATE_EXPORT_HEADER(Pdf4QtLibCore - EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/pdf4qtlibcore_export.h") - - target_link_libraries(Pdf4QtLibCore PRIVATE Qt6::Core Qt6::Gui Qt6::Xml Qt6::Svg) --target_link_libraries(Pdf4QtLibCore PRIVATE lcms2::lcms2) -+target_link_libraries(Pdf4QtLibCore PRIVATE LCMS2::LCMS2) - target_link_libraries(Pdf4QtLibCore PRIVATE OpenSSL::SSL OpenSSL::Crypto) - target_link_libraries(Pdf4QtLibCore PRIVATE ZLIB::ZLIB) - target_link_libraries(Pdf4QtLibCore PRIVATE Freetype::Freetype) diff --git a/user/pdf4qt/CMakeListsMain.patch b/user/pdf4qt/CMakeListsMain.patch deleted file mode 100644 index c2109ca..0000000 --- a/user/pdf4qt/CMakeListsMain.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 7dc98bc..ea790b1 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -64,10 +64,10 @@ endif() - qt_standard_project_setup() - - find_package(OpenSSL REQUIRED) --find_package(lcms REQUIRED) -+find_package(LCMS2 REQUIRED) - find_package(ZLIB REQUIRED) - find_package(Freetype REQUIRED) --find_package(OpenJPEG CONFIG REQUIRED) -+find_package(OpenJPEG REQUIRED) - find_package(JPEG REQUIRED) - find_package(PNG REQUIRED) - diff --git a/user/pdf4qt/FindLCMS2.cmake b/user/pdf4qt/FindLCMS2.cmake deleted file mode 100644 index 10db145..0000000 --- a/user/pdf4qt/FindLCMS2.cmake +++ /dev/null @@ -1,105 +0,0 @@ -# Copyright (C) 2021 Igalia S.L. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS -# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -# THE POSSIBILITY OF SUCH DAMAGE. - -#[=======================================================================[.rst: -FindLCMS2 ---------- - -Find LCMS2 headers and libraries. - -Imported Targets -^^^^^^^^^^^^^^^^ - -``LCMS2::LCMS2`` - The LCMS2 library, if found. - -Result Variables -^^^^^^^^^^^^^^^^ - -This will define the following variables in your project: - -``LCMS2_FOUND`` - true if (the requested version of) LCMS2 is available. -``LCMS2_VERSION`` - the version of LCMS2. -``LCMS2_LIBRARIES`` - the libraries to link against to use LCMS2. -``LCMS2_INCLUDE_DIRS`` - where to find the LCMS2 headers. -``LCMS2_COMPILE_OPTIONS`` - this should be passed to target_compile_options(), if the - target is not used for linking - -#]=======================================================================] - -find_package(PkgConfig QUIET) -if (PkgConfig_FOUND) - pkg_check_modules(PC_LCMS2 QUIET lcms2) - set(LCMS2_COMPILE_OPTIONS ${PC_LCMS2_CFLAGS_OTHER}) - set(LCMS2_VERSION ${PC_LCMS2_VERSION}) -endif () - -find_path(LCMS2_INCLUDE_DIR - NAMES lcms2.h - HINTS ${PC_LCMS2_INCLUDEDIR} ${PC_LCMS2_INCLUDE_DIRS} ${LCMS2_INCLUDE_DIR} - PATH_SUFFIXES lcms2 liblcms2 -) - -find_library(LCMS2_LIBRARY - NAMES ${LCMS2_NAMES} lcms2 liblcms2 lcms-2 liblcms-2 - HINTS ${PC_LCMS2_LIBDIR} ${PC_LCMS2_LIBRARY_DIRS} - PATH_SUFFIXES lcms2 -) - -if (LCMS2_INCLUDE_DIR AND NOT LCMS_VERSION) - file(READ ${LCMS2_INCLUDE_DIR}/lcms2.h LCMS2_VERSION_CONTENT) - string(REGEX MATCH "#define[ \t]+LCMS_VERSION[ \t]+([0-9]+)[ \t]*\n" LCMS2_VERSION_MATCH ${LCMS2_VERSION_CONTENT}) - if (LCMS2_VERSION_MATCH) - string(SUBSTRING ${CMAKE_MATCH_1} 0 1 LCMS2_VERSION_MAJOR) - string(SUBSTRING ${CMAKE_MATCH_1} 1 2 LCMS2_VERSION_MINOR) - set(LCMS2_VERSION "${LCMS2_VERSION_MAJOR}.${LCMS2_VERSION_MINOR}") - endif () -endif () - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(LCMS2 - FOUND_VAR LCMS2_FOUND - REQUIRED_VARS LCMS2_LIBRARY LCMS2_INCLUDE_DIR - VERSION_VAR LCMS2_VERSION -) - -if (LCMS2_LIBRARY AND NOT TARGET LCMS2::LCMS2) - add_library(LCMS2::LCMS2 UNKNOWN IMPORTED GLOBAL) - set_target_properties(LCMS2::LCMS2 PROPERTIES - IMPORTED_LOCATION "${LCMS2_LIBRARY}" - INTERFACE_COMPILE_OPTIONS "${LCMS2_COMPILE_OPTIONS}" - INTERFACE_INCLUDE_DIRECTORIES "${LCMS2_INCLUDE_DIR}" - ) -endif () - -mark_as_advanced(LCMS2_INCLUDE_DIR LCMS2_LIBRARY) - -if (LCMS2_FOUND) - set(LCMS2_LIBRARIES ${LCMS2_LIBRARY}) - set(LCMS2_INCLUDE_DIRS ${LCMS2_INCLUDE_DIR}) -endif () From 123f23ae473e89be38c5de628f34c4056cb29766 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:49:56 -0400 Subject: [PATCH 293/738] unmaintained/airsonic: move from user --- {user => unmaintained}/airsonic/APKBUILD | 0 {user => unmaintained}/airsonic/airsonic.conf | 0 {user => unmaintained}/airsonic/airsonic.initd | 0 {user => unmaintained}/airsonic/airsonic.sh | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/airsonic/APKBUILD (100%) rename {user => unmaintained}/airsonic/airsonic.conf (100%) rename {user => unmaintained}/airsonic/airsonic.initd (100%) rename {user => unmaintained}/airsonic/airsonic.sh (100%) diff --git a/user/airsonic/APKBUILD b/unmaintained/airsonic/APKBUILD similarity index 100% rename from user/airsonic/APKBUILD rename to unmaintained/airsonic/APKBUILD diff --git a/user/airsonic/airsonic.conf b/unmaintained/airsonic/airsonic.conf similarity index 100% rename from user/airsonic/airsonic.conf rename to unmaintained/airsonic/airsonic.conf diff --git a/user/airsonic/airsonic.initd b/unmaintained/airsonic/airsonic.initd similarity index 100% rename from user/airsonic/airsonic.initd rename to unmaintained/airsonic/airsonic.initd diff --git a/user/airsonic/airsonic.sh b/unmaintained/airsonic/airsonic.sh similarity index 100% rename from user/airsonic/airsonic.sh rename to unmaintained/airsonic/airsonic.sh From 7fe91bbe550c19712d871e76426a856ce3da7f23 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:50:34 -0400 Subject: [PATCH 294/738] user/perl-crypt-random-source: drop due to in community --- user/perl-crypt-random-source/APKBUILD | 48 -------------------------- 1 file changed, 48 deletions(-) delete mode 100644 user/perl-crypt-random-source/APKBUILD diff --git a/user/perl-crypt-random-source/APKBUILD b/user/perl-crypt-random-source/APKBUILD deleted file mode 100644 index ffe4aba..0000000 --- a/user/perl-crypt-random-source/APKBUILD +++ /dev/null @@ -1,48 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_cpaname="Crypt-Random-Source" -_cpanauthor=ETHER -pkgname=perl-crypt-random-source -pkgver=0.14 -pkgrel=1 -pkgdesc="Perl Crypt::Random::Source CPAN module - load and instantiate sources of random data" -arch="noarch" -url="http://search.cpan.org/dist/$_cpaname/" -license="GPL"$ -makedepends=" - perl-module-build-tiny - " -depends=" - perl-capture-tiny - perl-module-find - perl-module-runtime - perl-moo - perl-namespace-clean - perl-sub-exporter - perl-sub-name - perl-test-fatal - perl-type-tiny - perl-yaml - " -source="http://www.cpan.org/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_cpaname-$pkgver - -build() { - export PERL_MM_FALLBACK_SILENCE_WARNING=true - perl Makefile.PL - make -} - -check() { - make test -} - -package() { - make install INSTALLDIRS=vendor DESTDIR="$pkgdir" - rm "$pkgdir"/usr/lib/perl5/core_perl/perllocal.pod -} -sha512sums=" -25760ccfae42f44bd132915e3796042b43c1bc43195a97fc1236579c90b96957b3d86d2e68adde9d7dd486336f132982867413af251c66e527584e7309e0c729 Crypt-Random-Source-0.14.tar.gz -" From c2788b3527a97c3ca43b95c1437e1dc0785be5e5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:51:08 -0400 Subject: [PATCH 295/738] user/perl-math-random-isaac: drop due to in community --- user/perl-math-random-isaac/APKBUILD | 36 ---------------------------- 1 file changed, 36 deletions(-) delete mode 100644 user/perl-math-random-isaac/APKBUILD diff --git a/user/perl-math-random-isaac/APKBUILD b/user/perl-math-random-isaac/APKBUILD deleted file mode 100644 index 6c9ef3c..0000000 --- a/user/perl-math-random-isaac/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=perl-math-random-isaac -pkgver=1.004 -pkgrel=1 -pkgdesc="Perl interface to the ISAAC PRNG algorithm" -arch="noarch" -url='https://search.cpan.org/dist/Math-Random-ISAAC/' -license="GPL" -depends="perl" -makedepends="perl-test-nowarnings" -source="https://search.cpan.org/CPAN/authors/id/J/JA/JAWNSY/Math-Random-ISAAC-$pkgver.tar.gz" -builddir="$srcdir"/Math-Random-ISAAC-$pkgver -subpackages="$pkgname-doc" - -build() { - export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps \ - PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR=$pkgdir" \ - PERL_MB_OPT="--installdirs vendor --destdir $pkgdir" \ - MODULEBUILDRC=/dev/null - perl Makefile.PL - make -} - -check() { - make test -} - -package() { - make install - find "$pkgdir" \( -name .packlist -o -name perllocal.pod \) -delete -} -sha512sums=" -98fdfb28b207b4afe72ab82a2b564b06c5daaac15cdab2ce2ef698b16c0dcf5b23ac28fbebe170d2c6c7239fe6c97f634e5c03a8f2bd0aeb8369d0008b9ae0a2 Math-Random-ISAAC-1.004.tar.gz -" From 106ef2e7c05b406b231ed79a973bd6c5130387fb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:51:52 -0400 Subject: [PATCH 296/738] user/perl-math-random-secure: drop due to in community --- user/perl-math-random-secure/APKBUILD | 44 --------------------------- 1 file changed, 44 deletions(-) delete mode 100644 user/perl-math-random-secure/APKBUILD diff --git a/user/perl-math-random-secure/APKBUILD b/user/perl-math-random-secure/APKBUILD deleted file mode 100644 index e7b2a24..0000000 --- a/user/perl-math-random-secure/APKBUILD +++ /dev/null @@ -1,44 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_cpaname=Math-Random-Secure -_cpanauthor=FREW -pkgname=perl-math-random-secure -pkgver=0.080001 -pkgrel=1 -pkgdesc="Perl Math::Random::Secure CPAN module - cryptographically-secure, cross-platform replacement for rand()" -arch="noarch" -url="http://search.cpan.org/dist/$_cpaname/" -license="GPL" -options="!check" # Failure -makedepends=" - perl-moo - perl-moose - perl-test-sharedfork - perl-test-warn -" -depends=" - perl-crypt-random-source - perl-math-random-isaac -" -source="http://search.cpan.org/CPAN/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_cpaname-$pkgver - -build() { - perl Makefile.PL - make -} - -check() { - make test -} - -package() { - make install INSTALLDIRS=vendor DESTDIR="$pkgdir" - # provided by perl-crypt-random-source - rm "$pkgdir"/usr/lib/*/core_perl/perllocal.pod -} -sha512sums=" -2092fc01e224ebb438f927f72e835095efdb8790d8f4ef845fc7c4af3e20a05848e7632b0e752221bbe76cebbfa8186638043457ff4f80ff5727a42baec317ce Math-Random-Secure-0.080001.tar.gz -" From 6c21bf267af9eb3913185cfcb4ad6e9d4d5fd12e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:52:18 -0400 Subject: [PATCH 297/738] user/perl-net-domain-tld: drop due to in community --- user/perl-net-domain-tld/APKBUILD | 34 ------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 user/perl-net-domain-tld/APKBUILD diff --git a/user/perl-net-domain-tld/APKBUILD b/user/perl-net-domain-tld/APKBUILD deleted file mode 100644 index efa4b57..0000000 --- a/user/perl-net-domain-tld/APKBUILD +++ /dev/null @@ -1,34 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -_cpaname="Net-Domain-TLD" -_cpanauthor=ALEXP -pkgname=perl-net-domain-tld -pkgver=1.75 -pkgrel=1 -pkgdesc="Work with TLD names" -arch="noarch" -url="http://search.cpan.org/dist/$_cpaname/" -license="GPL" -depends="perl" -source="http://www.cpan.org/authors/id/${_cpanauthor::1}/${_cpanauthor::2}/$_cpanauthor/$_cpaname-$pkgver.tar.gz" -subpackages="$pkgname-doc" -builddir="$srcdir"/$_cpaname-$pkgver - -build() { - export PERL_MM_FALLBACK_SILENCE_WARNING=true - perl Makefile.PL - make -} - -check() { - make test -} - -package() { - make install INSTALLDIRS=vendor DESTDIR="$pkgdir" - rm "$pkgdir"/usr/lib/perl5/core_perl/perllocal.pod -} -sha512sums=" -88b090f427e7fccd8394059b643f260a83fe9ec3fd6741972ec388325bb8c178d9d89fc8da9b1338441972e6744117c4effe3551c2c3f95d52022496667fa4f1 Net-Domain-TLD-1.75.tar.gz -" From ad6af41168c14d07293ef0895501416eaae6de03 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:54:21 -0400 Subject: [PATCH 298/738] unmaintained/php82-pecl-inotify: move from user --- {user => unmaintained}/php82-pecl-inotify/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/php82-pecl-inotify/APKBUILD (100%) diff --git a/user/php82-pecl-inotify/APKBUILD b/unmaintained/php82-pecl-inotify/APKBUILD similarity index 100% rename from user/php82-pecl-inotify/APKBUILD rename to unmaintained/php82-pecl-inotify/APKBUILD From 04adb3958cc504e337886c2901a7aa2edd7403dd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:54:50 -0400 Subject: [PATCH 299/738] user/php81-pecl-inotify: drop --- user/php81-pecl-inotify/APKBUILD | 33 -------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 user/php81-pecl-inotify/APKBUILD diff --git a/user/php81-pecl-inotify/APKBUILD b/user/php81-pecl-inotify/APKBUILD deleted file mode 100644 index 20a311c..0000000 --- a/user/php81-pecl-inotify/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -# Contributor: Fabio Ribeiro -# Maintainer: Andy Postnikov -pkgname=php81-pecl-inotify -_extname=inotify -pkgver=3.0.0 -pkgrel=0 -pkgdesc="Inotify bindings for PHP 8.1" -url="https://pecl.php.net/package/inotify" -arch="all" -license="PHP-3.01" -depends="php81-common" -makedepends="php81-dev" -source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" -builddir="$srcdir"/$_extname-$pkgver - -build() { - phpize81 - ./configure --prefix=/usr --with-php-config=php-config81 - make -} - -check() { - make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test -} - -package() { - make INSTALL_ROOT="$pkgdir" install - local _confdir="$pkgdir"/etc/php81/conf.d - install -d $_confdir - echo "extension=$_extname" > $_confdir/70_$_extname.ini -} - -sha512sums="f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz" From 8447cddacbe8d7e309c0c52ced76ad2e8ae2c75f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 18:56:40 -0400 Subject: [PATCH 300/738] backports/php81-pecl-xmlrpc: dropped from aports --- backports/php81-pecl-xmlrpc/APKBUILD | 39 ---------------------------- 1 file changed, 39 deletions(-) delete mode 100644 backports/php81-pecl-xmlrpc/APKBUILD diff --git a/backports/php81-pecl-xmlrpc/APKBUILD b/backports/php81-pecl-xmlrpc/APKBUILD deleted file mode 100644 index 2d6c6b0..0000000 --- a/backports/php81-pecl-xmlrpc/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Maintainer: Andy Postnikov -pkgname=php81-pecl-xmlrpc -_extname=xmlrpc -pkgver=1.0.0_rc3 -_pkgver=${pkgver/_rc/RC} -pkgrel=1 -pkgdesc="PHP 8.1 extension to write XML-RPC servers and clients - PECL" -url="https://pecl.php.net/package/xmlrpc" -arch="all" -license="PHP-3.01" -depends="php81-xml" -makedepends="php81-dev libxml2-dev" -source="php-pecl-$_extname-$pkgver.tar.gz::https://pecl.php.net/get/$_extname-$_pkgver.tgz" -builddir="$srcdir"/$_extname-$_pkgver - -build() { - phpize81 - ./configure --prefix=/usr --with-php-config=/usr/bin/php-config81 - make -} - -check() { - make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test TESTS=--show-diff \ - PHP_TEST_SHARED_EXTENSIONS=" \ - -d extension=/usr/lib/php81/modules/xml.so \ - -d extension=modules/$_extname.so" - php81 -d extension=modules/$_extname.so --ri $_extname -} - -package() { - make INSTALL_ROOT="$pkgdir" install - local _confdir="$pkgdir"/etc/php81/conf.d - install -d $_confdir - echo "extension=$_extname" > $_confdir/$_extname.ini -} - -sha512sums=" -aa8e24d5a732b175adb9870357991d48ead046faed89e579eb63afe06c7ef20af9de29e2d70e71e54e5a15ee37265f69a7d52b39ef2465ced93ba818c1f7e9c1 php-pecl-xmlrpc-1.0.0_rc3.tar.gz -" From 22a9e782c25ed92c02e8b7c92769e6e8b4c06824 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:05:52 -0400 Subject: [PATCH 301/738] backports/freecad: disable due to missing py3-pyside2 depend --- backports/freecad/APKBUILD | 26 +- .../freecad/missing-include-cstdint.patch | 11 + backports/freecad/no-workaround-spnav.patch | 69 ++ backports/freecad/numpy-1.20.patch | 25 + backports/freecad/opencascade-7.8.0.patch | 877 ++++++++++++++++++ backports/freecad/resourceDirectory.patch | 11 + 6 files changed, 1012 insertions(+), 7 deletions(-) create mode 100644 backports/freecad/missing-include-cstdint.patch create mode 100644 backports/freecad/no-workaround-spnav.patch create mode 100644 backports/freecad/numpy-1.20.patch create mode 100644 backports/freecad/opencascade-7.8.0.patch create mode 100644 backports/freecad/resourceDirectory.patch diff --git a/backports/freecad/APKBUILD b/backports/freecad/APKBUILD index 279a09b..30c9eb5 100644 --- a/backports/freecad/APKBUILD +++ b/backports/freecad/APKBUILD @@ -1,12 +1,13 @@ # Contributor: Aiden Grossman # Maintainer: Aiden Grossman pkgname=freecad -pkgver=0.21.0 -pkgrel=0 +pkgver=0.20.2 +pkgrel=5 pkgdesc="Free and open source 3D parametric modeler" url="https://freecadweb.org/" license="LGPL-2.0-or-later" -arch="x86_64" # dependency OpenCascade is only x86_64 +arch="" # removed dependency py3-pyside2 +#arch="x86_64" # dependency OpenCascade is only x86_64 depends=" graphviz hdf5 @@ -44,11 +45,16 @@ makedepends=" vtk-dev xerces-c-dev " -options="!check" # Failing test units upstream as well checkdepends="xvfb-run mesa mesa-dri-gallium font-opensans" source="https://github.com/FreeCAD/FreeCAD/archive/$pkgver/freecad-$pkgver.tar.gz - $pkgname-cstdint.patch::https://github.com/FreeCAD/FreeCAD/commit/f8f02f089537497a1bf46bc1057f01659b6636c1.patch + $pkgname-python3.11-1.patch::https://github.com/FreeCAD/FreeCAD/commit/fe02d63c8c9b1280978be841d04e68a0a55cceb9.patch + numpy-1.20.patch no-execinfo.patch + no-workaround-spnav.patch + resourceDirectory.patch + tests.patch + opencascade-7.8.0.patch + missing-include-cstdint.patch " builddir="$srcdir/FreeCAD-$pkgver" @@ -90,7 +96,13 @@ package() { } sha512sums=" -f5b4428217d9abd18aed1dcd8a5c77132b90173d07627ff9164919a87f04d242f9d616e9655751ec06ff57fc3e242090cc4d7e1d7045fdae9bc2e281e7855281 freecad-0.21.0.tar.gz -27dffdbb124096e7fcbec3589cdcfc587ea09bf039c1c1108edb68a9a4fd1278f66a39642636f98b8759a44da92485fd748f8b3d615b0625bc37fc717130e237 freecad-cstdint.patch +c3acd77dd2bb9a2a23ac354da3b6102effb89c95d675e91421d65486414dfe8cc0188a7212245e0deb63f17b9c5df76133017be09e4cd14b833be8cbec52a08d freecad-0.20.2.tar.gz +75a237f7ed7a89a98c0e5bdb3d3f0788749602daf718089aa0814e05f93ced1e15ad5867c7c87f170b48c5984f9ace1bbc95c4f386ce72bfb8d616323b47f1e5 freecad-python3.11-1.patch +80b08b031810fce7b6d698c662f64fa4f8a904f283f46b478b1d718529164c0ee61ce190f633abf04e03212720480f3f0603b0c1e160af79d7b6bb82da3bd0e4 numpy-1.20.patch 73aaba7015dce7048eb7d2456131b5b5ba4673cc980503331987be54d99daed5f61db015ca33d7d2ef0f02bd3192da8ce122c103c3b93f9959927deb4f0b933e no-execinfo.patch +15696bdaaf77482f1b5d3806535a8004c8cec7d598d62092d9f0394b4ca9e2ad6cedd77c4b86a83a06324d16678c1c6bbf3a390b807729717a2f513e858afd50 no-workaround-spnav.patch +8ba13b17bad66316757d180c1b9e9e72a24382627eac7c43a2264b3b5101e6e8f701775f2b805ed733f500fbcd8b0e8e422ec58a9ab3d948d613b666157d4c52 resourceDirectory.patch +5db19e0aa2ca1fd21f4c56afc9db54390a799262aaa0a741704c2c304b0068fd6ca1dcc086465e12e9c0cfe06aac750aaf9b8f5f4db324539af4dd3394803ff9 tests.patch +f933680dea8744e147f38abce389cb7fd0ec3fb3566454fdd5e6ea07b2faaac5fe61aabe1df3bda9f0d7b4fca16055aa2ad700e9cce10d2604ae37b761b68ade opencascade-7.8.0.patch +fec515cc63830f0e715527c7890173705b24e7d99d225821ec4300104cf3affdee49243bbd4d0a331a902cf04db756a1b8f18f0a17cc71f5757f8b5c73c78ede missing-include-cstdint.patch " diff --git a/backports/freecad/missing-include-cstdint.patch b/backports/freecad/missing-include-cstdint.patch new file mode 100644 index 0000000..363a706 --- /dev/null +++ b/backports/freecad/missing-include-cstdint.patch @@ -0,0 +1,11 @@ +diff --color -rupN a/src/3rdParty/libE57Format/include/E57Format.h b/src/3rdParty/libE57Format/include/E57Format.h +--- a/src/3rdParty/libE57Format/include/E57Format.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/libE57Format/include/E57Format.h 2024-02-27 14:06:29.308892531 +0100 +@@ -32,6 +32,7 @@ + //! @file E57Format.h header file for the E57 API + + #include ++#include + #include + #include + diff --git a/backports/freecad/no-workaround-spnav.patch b/backports/freecad/no-workaround-spnav.patch new file mode 100644 index 0000000..ee4fead --- /dev/null +++ b/backports/freecad/no-workaround-spnav.patch @@ -0,0 +1,69 @@ +Patch-Source: https://github.com/FreeCAD/FreeCAD/commit/7b377a216b9185960e4cee980a6504dc1a755f50 +fixes stderr reassignment +-- +From 7b377a216b9185960e4cee980a6504dc1a755f50 Mon Sep 17 00:00:00 2001 +From: wmayer +Date: Wed, 29 Jun 2022 15:19:18 +0200 +Subject: [PATCH] Gui: remove workaround for spnav 0.23 due to build failure + with musl libc + +--- + src/Gui/3Dconnexion/GuiNativeEventLinux.cpp | 27 --------------------- + 1 file changed, 27 deletions(-) + +diff --git a/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp b/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp +index 7f0ddd75d262..455ece0b36bd 100644 +--- a/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp ++++ b/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp +@@ -21,42 +21,17 @@ + ***************************************************************************/ + + #include +-#include + + #include "GuiNativeEventLinux.h" + + #include "GuiApplicationNativeEventAware.h" + #include +-#include + #include + + #include + + #include + +-namespace { +-class RedirectStdErr +-{ +-public: +- RedirectStdErr() +- : fi(Base::FileInfo::getTempFileName()) +- , file(stderr) +- { +- stderr = fopen(fi.filePath().c_str(), "w"); +- } +- ~RedirectStdErr() +- { +- fclose(stderr); +- fi.deleteFile(); +- stderr = file; +- } +- +-private: +- Base::FileInfo fi; +- FILE* file; +-}; +-} +- + Gui::GuiNativeEvent::GuiNativeEvent(Gui::GUIApplicationNativeEventAware *app) + : GuiAbstractNativeEvent(app) + { +@@ -72,8 +47,6 @@ Gui::GuiNativeEvent::~GuiNativeEvent() + + void Gui::GuiNativeEvent::initSpaceball(QMainWindow *window) + { +- // tmp. redirect stderr to a file to suppress an error message from spnav_open() +- RedirectStdErr err; + Q_UNUSED(window) + if (spnav_open() == -1) { + Base::Console().Log("Couldn't connect to spacenav daemon. Please ignore if you don't have a spacemouse.\n"); diff --git a/backports/freecad/numpy-1.20.patch b/backports/freecad/numpy-1.20.patch new file mode 100644 index 0000000..20f4b41 --- /dev/null +++ b/backports/freecad/numpy-1.20.patch @@ -0,0 +1,25 @@ +Patch-Source: https://github.com/FreeCAD/FreeCAD/commit/8b0df1dc936b544091f6a2d68df1c1a14ae3de5b +-- +From 8b0df1dc936b544091f6a2d68df1c1a14ae3de5b Mon Sep 17 00:00:00 2001 +From: lorenz +Date: Tue, 27 Dec 2022 04:59:35 +0100 +Subject: [PATCH] FEM: femmesh: fix AttributeError: module 'numpy' has no + attribute 'int' + +--- + src/Mod/Fem/femmesh/meshtools.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/Mod/Fem/femmesh/meshtools.py b/src/Mod/Fem/femmesh/meshtools.py +index dd8671b..d2e2b0a 100644 +--- a/src/Mod/Fem/femmesh/meshtools.py ++++ b/src/Mod/Fem/femmesh/meshtools.py +@@ -485,7 +485,7 @@ def get_femelement_sets( + # fem_objects = FreeCAD FEM document objects + # get femelements for reference shapes of each obj.References + count_femelements = 0 +- referenced_femelements = np.zeros((max(femelement_table.keys())+1,),dtype=np.int) ++ referenced_femelements = np.zeros((max(femelement_table.keys())+1,),dtype=int) + has_remaining_femelements = None + for fem_object_i, fem_object in enumerate(fem_objects): + obj = fem_object["Object"] diff --git a/backports/freecad/opencascade-7.8.0.patch b/backports/freecad/opencascade-7.8.0.patch new file mode 100644 index 0000000..582fbde --- /dev/null +++ b/backports/freecad/opencascade-7.8.0.patch @@ -0,0 +1,877 @@ +Fix compilation with opencascase 7.8.0 + +Base on https://github.com/FreeCAD/FreeCAD/pull/11909 + +diff --color -rupN a/cMake/FindOCC.cmake b/cMake/FindOCC.cmake +--- a/cMake/FindOCC.cmake 2022-12-07 03:35:37.000000000 +0100 ++++ b/cMake/FindOCC.cmake 2024-02-27 15:00:48.248873883 +0100 +@@ -127,8 +127,6 @@ if(OCC_FOUND) + TKG2d + TKG3d + TKMath +- TKIGES +- TKSTL + TKShHealing + TKXSBase + TKBool +@@ -139,10 +137,6 @@ if(OCC_FOUND) + TKGeomBase + TKOffset + TKPrim +- TKSTEPBase +- TKSTEPAttr +- TKSTEP209 +- TKSTEP + TKHLR + TKFeat + ) +@@ -154,17 +148,19 @@ if(OCC_FOUND) + TKLCAF + TKVCAF + TKCDF +- TKXDESTEP +- TKXDEIGES + TKMeshVS + TKService + TKV3d + ) +- if(OCC_VERSION_STRING VERSION_LESS 6.7.3) +- list(APPEND OCC_OCAF_LIBRARIES TKAdvTools) +- elseif(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) ++ if(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) + list(APPEND OCC_OCAF_LIBRARIES TKRWMesh) +- endif(OCC_VERSION_STRING VERSION_LESS 6.7.3) ++ endif(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) ++ if(OCC_VERSION_STRING VERSION_LESS 7.8.0) ++ list(APPEND OCC_LIBRARIES TKIGES TKSTL TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP) ++ list(APPEND OCC_OCAF_LIBRARIES TKXDESTEP TKXDEIGES) ++ else(OCC_VERSION_STRING VERSION_LESS 7.8.0) ++ list(APPEND OCC_LIBRARIES TKDESTEP TKDEIGES TKDEGLTF TKDESTL) ++ endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) + message(STATUS "-- Found OCE/OpenCASCADE version: ${OCC_VERSION_STRING}") + message(STATUS "-- OCE/OpenCASCADE include directory: ${OCC_INCLUDE_DIR}") + message(STATUS "-- OCE/OpenCASCADE shared libraries directory: ${OCC_LIBRARY_DIR}") +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx b/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx 2024-02-27 15:00:48.248873883 +0100 +@@ -29,22 +29,35 @@ + + #include + ++#include ++ + /* + * This method needed for instance NCollection_DataMap with TopoDS_Shape as key + */ ++#if OCC_VERSION_HEX >= 0x070800 + struct SMESHDS_Hasher + { +- static inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, +- const TopoDS_Shape& S2) +- { +- return S1.IsSame(S2); ++ size_t operator()(const TopoDS_Shape& S) const noexcept { ++ return std::hash{}(S); + } +- static inline Standard_Integer HashCode(const TopoDS_Shape& S, +- const Standard_Integer Upper) +- { +- return ::HashCode( S, Upper); ++ size_t operator()(const TopoDS_Shape& S1, const TopoDS_Shape& S2) const noexcept { ++ return S1.IsSame(S2); + } + }; +- ++#else ++struct SMESHDS_Hasher ++{ ++static inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, ++ const TopoDS_Shape& S2) ++{ ++ return S1.IsSame(S2); ++} ++static inline Standard_Integer HashCode(const TopoDS_Shape& S, ++ const Standard_Integer Upper) ++{ ++ return ::HashCode( S, Upper); ++} ++}; ++#endif + + #endif +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx b/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx 2024-02-27 15:00:48.248873883 +0100 +@@ -57,9 +57,6 @@ + #ifndef _MeshVS_EntityType_HeaderFile + #include + #endif +-#ifndef _Standard_Address_HeaderFile +-#include +-#endif + #ifndef _TColStd_HArray1OfInteger_HeaderFile + #include + #endif +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx b/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx 2024-02-27 15:00:48.248873883 +0100 +@@ -37,4 +37,5 @@ + #define SMESH_EXPORT + #endif + ++#include + #endif +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx b/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx 2024-02-27 15:00:48.252207183 +0100 +@@ -28,10 +28,11 @@ + + #include "SMESH_SMESH.hxx" + +-#include + #if OCC_VERSION_HEX >= 0x060703 + #include + #include ++#else ++#include + #endif + + typedef const SMDS_MeshNode* SMDS_MeshNodePtr; +diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx b/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx +--- a/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx 2024-02-27 15:00:48.252207183 +0100 +@@ -185,11 +185,18 @@ typedef std::vector< UVPtStruct > UVPtSt + + // -------------------------------------------------------------------------------- + // class SMESH_SequenceOfElemPtr ++#include ++#if OCC_VERSION_HEX >= 0x060703 ++#include ++#else + #include ++#endif + + class SMDS_MeshElement; + + typedef const SMDS_MeshElement* SMDS_MeshElementPtr; ++#define DEFINE_SEQUENCE(_ClassName_, _BaseCollection_, TheItemType) \ ++typedef NCollection_Sequence _ClassName_; + + DEFINE_SEQUENCE (SMESH_SequenceOfElemPtr, SMESH_BaseCollectionElemPtr, SMDS_MeshElementPtr) + +diff --color -rupN a/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp +--- a/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -33,10 +33,33 @@ + #include "SMDS_MeshNode.hxx" + #include "SMESH_File.hxx" + ++#include ++ + namespace + { + struct Hasher + { ++#if OCC_VERSION_HEX >= 0x070800 ++ size_t operator()(const gp_Pnt& point) const noexcept ++ { ++ union ++ { ++ Standard_Real R[3]; ++ Standard_Integer I[6]; ++ } U; ++ ++ point.Coord( U.R[0], U.R[1], U.R[2] ); ++ return std::hash{}(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7); ++ } ++ ++ size_t operator()(const gp_Pnt& point1, const gp_Pnt& point2) const noexcept ++ { ++ static Standard_Real tab1[3], tab2[3]; ++ point1.Coord(tab1[0],tab1[1],tab1[2]); ++ point2.Coord(tab2[0],tab2[1],tab2[2]); ++ return (memcmp(tab1,tab2,sizeof(tab1)) == 0); ++ } ++#else + //======================================================================= + //function : HashCode + //purpose : +@@ -51,9 +74,9 @@ namespace + } U; + + point.Coord( U.R[0], U.R[1], U.R[2] ); +- +- return ::HashCode(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7,Upper); ++ return std::hash{}(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7); + } ++ + //======================================================================= + //function : IsEqual + //purpose : +@@ -66,7 +89,9 @@ namespace + point2.Coord(tab2[0],tab2[1],tab2[2]); + return (memcmp(tab1,tab2,sizeof(tab1)) == 0); + } ++#endif + }; ++ + typedef NCollection_DataMap TDataMapOfPntNodePtr; + + const int HEADER_SIZE = 84; +diff --color -rupN a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp +--- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -48,7 +48,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Drawing/App/PreCompiled.h b/src/Mod/Drawing/App/PreCompiled.h +--- a/src/Mod/Drawing/App/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Drawing/App/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 +@@ -70,7 +70,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Drawing/Gui/TaskDialog.cpp b/src/Mod/Drawing/Gui/TaskDialog.cpp +--- a/src/Mod/Drawing/Gui/TaskDialog.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Drawing/Gui/TaskDialog.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -29,7 +29,6 @@ + #endif + + +-#include + #include "TaskDialog.h" + #include + #include +diff --color -rupN a/src/Mod/Fem/Gui/PreCompiled.h b/src/Mod/Fem/Gui/PreCompiled.h +--- a/src/Mod/Fem/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Fem/Gui/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 +@@ -63,7 +63,6 @@ + #endif + + // OCC +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp b/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp +--- a/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -28,7 +28,6 @@ + + # include + # include +-# include + #endif + + #include +diff --color -rupN a/src/Mod/Import/App/ImportOCAF.cpp b/src/Mod/Import/App/ImportOCAF.cpp +--- a/src/Mod/Import/App/ImportOCAF.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Import/App/ImportOCAF.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -165,7 +165,11 @@ void ImportOCAF::loadShapes(const TDF_La + std::vector localValue; + + if (aShapeTool->GetShape(label,aShape)) { ++#if OCC_VERSION_HEX >= 0x070800 ++ hash = std::hash{}(aShape); ++#else + hash = aShape.HashCode(HashUpper); ++#endif + } + + Handle(TDataStd_Name) name; +@@ -235,7 +239,11 @@ void ImportOCAF::loadShapes(const TDF_La + if (isRef || myRefShapes.find(hash) == myRefShapes.end()) { + TopoDS_Shape aShape; + if (isRef && aShapeTool->GetShape(label, aShape)) ++#if OCC_VERSION_HEX >= 0x070800 ++ myRefShapes.insert(std::hash{}(aShape)); ++#else + myRefShapes.insert(aShape.HashCode(HashUpper)); ++#endif + + if (aShapeTool->IsSimpleShape(label) && (isRef || aShapeTool->IsFree(label))) { + if (!asm_name.empty()) +@@ -565,7 +573,11 @@ void ImportXCAF::createShape(const TopoD + part->Label.setValue(default_name); + part->Shape.setValue(shape); + std::map::const_iterator jt; ++#if OCC_VERSION_HEX >= 0x070800 ++ jt = myColorMap.find(std::hash{}(shape)); ++#else + jt = myColorMap.find(shape.HashCode(INT_MAX)); ++#endif + + App::Color partColor(0.8f,0.8f,0.8f); + #if 0//TODO +@@ -586,7 +598,11 @@ void ImportXCAF::createShape(const TopoD + // set label name if defined + if (setname && !myNameMap.empty()) { + std::map::const_iterator jt; ++#if OCC_VERSION_HEX >= 0x070800 ++ jt = myNameMap.find(std::hash{}(shape)); ++#else + jt = myNameMap.find(shape.HashCode(INT_MAX)); ++#endif + if (jt != myNameMap.end()) { + part->Label.setValue(jt->second); + } +@@ -606,7 +622,11 @@ void ImportXCAF::createShape(const TopoD + faceColors.resize(faces.Extent(), partColor); + xp.Init(shape,TopAbs_FACE); + while (xp.More()) { ++#if OCC_VERSION_HEX >= 0x070800 ++ jt = myColorMap.find(std::hash{}(xp.Current())); ++#else + jt = myColorMap.find(xp.Current().HashCode(INT_MAX)); ++#endif + if (jt != myColorMap.end()) { + int index = faces.FindIndex(xp.Current()); + faceColors[index-1] = convertColor(jt->second); +@@ -641,23 +661,51 @@ void ImportXCAF::loadShapes(const TDF_La + // add the shapes + TopExp_Explorer xp; + for (xp.Init(aShape, TopAbs_SOLID); xp.More(); xp.Next(), ctSolids++) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->mySolids[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->mySolids[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_SHELL, TopAbs_SOLID); xp.More(); xp.Next(), ctShells++) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShells[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShells[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + // if no solids and no shells were found then go for compounds + if (ctSolids == 0 && ctShells == 0) { + for (xp.Init(aShape, TopAbs_COMPOUND); xp.More(); xp.Next(), ctComps++) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myCompds[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myCompds[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + } + if (ctComps == 0) { + for (xp.Init(aShape, TopAbs_FACE, TopAbs_SHELL); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_WIRE, TopAbs_FACE); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_EDGE, TopAbs_WIRE); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + for (xp.Init(aShape, TopAbs_VERTEX, TopAbs_EDGE); xp.More(); xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); ++#else + this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); ++#endif + } + } + +@@ -667,7 +715,11 @@ void ImportXCAF::loadShapes(const TDF_La + hColors->GetColor(label, XCAFDoc_ColorSurf, col) || + hColors->GetColor(label, XCAFDoc_ColorCurv, col)) { + // add defined color ++#if OCC_VERSION_HEX >= 0x070800 ++ myColorMap[std::hash{}(aShape)] = col; ++#else + myColorMap[aShape.HashCode(INT_MAX)] = col; ++#endif + } + else { + // http://www.opencascade.org/org/forum/thread_17107/ +@@ -677,7 +729,11 @@ void ImportXCAF::loadShapes(const TDF_La + hColors->GetColor(it.Value(), XCAFDoc_ColorSurf, col) || + hColors->GetColor(it.Value(), XCAFDoc_ColorCurv, col)) { + // add defined color ++#if OCC_VERSION_HEX >= 0x070800 ++ myColorMap[std::hash{}(it.Value())] = col; ++#else + myColorMap[it.Value().HashCode(INT_MAX)] = col; ++#endif + } + } + } +@@ -690,7 +746,11 @@ void ImportXCAF::loadShapes(const TDF_La + extstr.ToUTF8CString(str); + std::string labelName(str); + if (!labelName.empty()) ++#if OCC_VERSION_HEX >= 0x070800 ++ myNameMap[std::hash{}(aShape)] = labelName; ++#else + myNameMap[aShape.HashCode(INT_MAX)] = labelName; ++#endif + delete [] str; + } + +diff --color -rupN a/src/Mod/Import/App/ImportOCAF.h b/src/Mod/Import/App/ImportOCAF.h +--- a/src/Mod/Import/App/ImportOCAF.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Import/App/ImportOCAF.h 2024-02-27 15:00:48.252207183 +0100 +@@ -29,7 +29,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Import/App/ImportOCAF2.h b/src/Mod/Import/App/ImportOCAF2.h +--- a/src/Mod/Import/App/ImportOCAF2.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Import/App/ImportOCAF2.h 2024-02-27 15:06:12.358890276 +0100 +@@ -27,7 +27,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -57,13 +56,21 @@ namespace Import { + + struct ShapeHasher { + std::size_t operator()(const TopoDS_Shape &s) const { ++#if OCC_VERSION_HEX >= 0x070800 ++ return std::hash{}(s); ++#else + return s.HashCode(INT_MAX); ++#endif + } + }; + + struct LabelHasher { + std::size_t operator()(const TDF_Label &l) const { ++#if OCC_VERSION_HEX >= 0x070800 ++ return std::hash {}(l); ++#else + return TDF_LabelMapHasher::HashCode(l,INT_MAX); ++#endif + } + }; + +diff --color -rupN a/src/Mod/MeshPart/App/CurveProjector.h b/src/Mod/MeshPart/App/CurveProjector.h +--- a/src/Mod/MeshPart/App/CurveProjector.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/MeshPart/App/CurveProjector.h 2024-02-27 15:00:48.252207183 +0100 +@@ -20,6 +20,7 @@ + * * + ***************************************************************************/ + ++#include + + #ifndef _CurveProjector_h_ + #define _CurveProjector_h_ +@@ -64,8 +65,13 @@ public: + + template + struct TopoDSLess { +- bool operator()(const T& x, const T& y) const { +- return x.HashCode(INT_MAX-1) < y.HashCode(INT_MAX-1); ++ bool operator()(const T& x, const T& y) const { ++#if OCC_VERSION_HEX >= 0x070800 ++ std::hash hasher; ++ return hasher(x) < hasher(y); ++#else ++ return x.HashCode(INT_MAX-1) < y.HashCode(INT_MAX-1); ++#endif + } + }; + +diff --color -rupN a/src/Mod/MeshPart/App/PreCompiled.h b/src/Mod/MeshPart/App/PreCompiled.h +--- a/src/Mod/MeshPart/App/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/MeshPart/App/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 +@@ -76,7 +76,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/MeshPart/Gui/CrossSections.cpp b/src/Mod/MeshPart/Gui/CrossSections.cpp +--- a/src/Mod/MeshPart/Gui/CrossSections.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/MeshPart/Gui/CrossSections.cpp 2024-02-27 15:00:48.252207183 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + #ifndef _PreComp_ + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/App/ImportStep.cpp b/src/Mod/Part/App/ImportStep.cpp +--- a/src/Mod/Part/App/ImportStep.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/ImportStep.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -167,7 +167,12 @@ int Part::ImportStepParts(App::Document + // This is a trick to access the GUI via Python and set the color property + // of the associated view provider. If no GUI is up an exception is thrown + // and cleared immediately ++#if OCC_VERSION_HEX >= 0x070800 ++ std::hash hasher; ++ std::map::iterator it = hash_col.find(hasher(aSolid)); ++#else + std::map::iterator it = hash_col.find(aSolid.HashCode(INT_MAX)); ++#endif + if (it != hash_col.end()) { + try { + Py::Object obj(pcFeature->getPyObject(), true); +diff --color -rupN a/src/Mod/Part/App/OCCError.h b/src/Mod/Part/App/OCCError.h +--- a/src/Mod/Part/App/OCCError.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/OCCError.h 2024-02-27 15:00:48.255540482 +0100 +@@ -50,7 +50,6 @@ + # include + # include + # include +-# include + # include + # include + +diff --color -rupN a/src/Mod/Part/App/OpenCascadeAll.h b/src/Mod/Part/App/OpenCascadeAll.h +--- a/src/Mod/Part/App/OpenCascadeAll.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/OpenCascadeAll.h 2024-02-27 15:00:48.255540482 +0100 +@@ -49,7 +49,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp +--- a/src/Mod/Part/App/TopoShapePyImp.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/App/TopoShapePyImp.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -1321,7 +1321,11 @@ PyObject* TopoShapePy::ancestorsOfType( + TopTools_ListIteratorOfListOfShape it(ancestors); + for (; it.More(); it.Next()) { + // make sure to avoid duplicates ++#if OCC_VERSION_HEX >= 0x070800 ++ const size_t code = std::hash{}(static_cast(it.Value())); ++#else + Standard_Integer code = it.Value().HashCode(INT_MAX); ++#endif + if (hashes.find(code) == hashes.end()) { + list.append(shape2pyshape(it.Value())); + hashes.insert(code); +@@ -1943,7 +1947,11 @@ PyObject* TopoShapePy::hashCode(PyObject + if (!PyArg_ParseTuple(args, "|i",&upper)) + return nullptr; + ++#if OCC_VERSION_HEX >= 0x070800 ++ int hc = std::hash{}(getTopoShapePtr()->getShape()); ++#else + int hc = getTopoShapePtr()->getShape().HashCode(upper); ++#endif + return Py_BuildValue("i", hc); + } + +diff --color -rupN a/src/Mod/Part/Gui/AppPartGui.cpp b/src/Mod/Part/Gui/AppPartGui.cpp +--- a/src/Mod/Part/Gui/AppPartGui.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/AppPartGui.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -11,9 +11,6 @@ + + + #include "PreCompiled.h" +-#ifndef _PreComp_ +-# include +-#endif + + #include + #include +diff --color -rupN a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp +--- a/src/Mod/Part/Gui/Command.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/Command.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -26,7 +26,6 @@ + # include + # include + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/CommandSimple.cpp b/src/Mod/Part/Gui/CommandSimple.cpp +--- a/src/Mod/Part/Gui/CommandSimple.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/CommandSimple.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -22,9 +22,6 @@ + + + #include "PreCompiled.h" +-#ifndef _PreComp_ +-# include +-#endif + + #include + #include +diff --color -rupN a/src/Mod/Part/Gui/CrossSections.cpp b/src/Mod/Part/Gui/CrossSections.cpp +--- a/src/Mod/Part/Gui/CrossSections.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/CrossSections.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -23,7 +23,6 @@ + + #include "PreCompiled.h" + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/ViewProvider2DObject.cpp b/src/Mod/Part/Gui/ViewProvider2DObject.cpp +--- a/src/Mod/Part/Gui/ViewProvider2DObject.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProvider2DObject.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -26,8 +26,6 @@ + #ifndef _PreComp_ + # include + +-# include +- + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp +--- a/src/Mod/Part/Gui/ViewProviderExt.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderExt.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -978,7 +978,11 @@ void ViewProviderPartExt::updateVisual() + + TopExp_Explorer xp; + for (xp.Init(faceMap(i),TopAbs_EDGE);xp.More();xp.Next()) ++#if OCC_VERSION_HEX >= 0x070800 ++ faceEdges.insert(std::hash{}(xp.Current())); ++#else + faceEdges.insert(xp.Current().HashCode(INT_MAX)); ++#endif + numFaces++; + } + +@@ -1006,7 +1010,11 @@ void ViewProviderPartExt::updateVisual() + // So, we have to store the hashes of the edges associated to a face. + // If the hash of a given edge is not in this list we know it's really + // a free edge. ++#if OCC_VERSION_HEX >= 0x070800 ++ int hash = std::hash{}(aEdge); ++#else + int hash = aEdge.HashCode(INT_MAX); ++#endif + if (faceEdges.find(hash) == faceEdges.end()) { + Handle(Poly_Polygon3D) aPoly = Part::Tools::polygonOfEdge(aEdge, aLoc); + if (!aPoly.IsNull()) { +@@ -1205,7 +1213,11 @@ void ViewProviderPartExt::updateVisual() + TopLoc_Location aLoc; + + // handling of the free edge that are not associated to a face ++#if OCC_VERSION_HEX >= 0x070800 ++ int hash = std::hash{}(aEdge); ++#else + int hash = aEdge.HashCode(INT_MAX); ++#endif + if (faceEdges.find(hash) == faceEdges.end()) { + Handle(Poly_Polygon3D) aPoly = Part::Tools::polygonOfEdge(aEdge, aLoc); + if (!aPoly.IsNull()) { +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderExt.h b/src/Mod/Part/Gui/ViewProviderExt.h +--- a/src/Mod/Part/Gui/ViewProviderExt.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderExt.h 2024-02-27 15:00:48.255540482 +0100 +@@ -24,7 +24,6 @@ + #ifndef PARTGUI_VIEWPROVIDERPARTEXT_H + #define PARTGUI_VIEWPROVIDERPARTEXT_H + +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderMirror.cpp b/src/Mod/Part/Gui/ViewProviderMirror.cpp +--- a/src/Mod/Part/Gui/ViewProviderMirror.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderMirror.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -27,7 +27,6 @@ + # include + # include + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderPython.cpp b/src/Mod/Part/Gui/ViewProviderPython.cpp +--- a/src/Mod/Part/Gui/ViewProviderPython.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderPython.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -23,7 +23,6 @@ + + #include "PreCompiled.h" + +-#include + #ifndef _PreComp_ + # include + #endif +diff --color -rupN a/src/Mod/Part/Gui/ViewProviderReference.h b/src/Mod/Part/Gui/ViewProviderReference.h +--- a/src/Mod/Part/Gui/ViewProviderReference.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Part/Gui/ViewProviderReference.h 2024-02-27 15:00:48.255540482 +0100 +@@ -24,7 +24,6 @@ + #ifndef PARTGUI_ViewProviderPartReference_H + #define PARTGUI_ViewProviderPartReference_H + +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/PartDesign/Gui/PreCompiled.h b/src/Mod/PartDesign/Gui/PreCompiled.h +--- a/src/Mod/PartDesign/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/PartDesign/Gui/PreCompiled.h 2024-02-27 15:00:48.255540482 +0100 +@@ -44,7 +44,6 @@ + #include + + // OCC +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/Path/App/Voronoi.cpp b/src/Mod/Path/App/Voronoi.cpp +--- a/src/Mod/Path/App/Voronoi.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Path/App/Voronoi.cpp 2024-02-27 15:00:48.255540482 +0100 +@@ -23,10 +23,6 @@ + + #include "PreCompiled.h" + +-#ifndef _PreComp_ +-# include +-#endif +- + #include + + #include "Voronoi.h" +diff --color -rupN a/src/Mod/Path/Gui/PreCompiled.h b/src/Mod/Path/Gui/PreCompiled.h +--- a/src/Mod/Path/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Path/Gui/PreCompiled.h 2024-02-27 15:00:48.258873781 +0100 +@@ -38,8 +38,6 @@ + # define PathGuiExport + #endif + +-#include +- + #ifdef _MSC_VER + # pragma warning( disable : 4273 ) + #endif +diff --color -rupN a/src/Mod/Robot/Gui/PreCompiled.h b/src/Mod/Robot/Gui/PreCompiled.h +--- a/src/Mod/Robot/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Robot/Gui/PreCompiled.h 2024-02-27 15:00:48.258873781 +0100 +@@ -39,8 +39,6 @@ + # define RobotGuiExport + #endif + +-#include +- + #ifdef _MSC_VER + # pragma warning(disable : 4005) + # pragma warning(disable : 4273) +diff --color -rupN a/src/Mod/Sandbox/Gui/AppSandboxGui.cpp b/src/Mod/Sandbox/Gui/AppSandboxGui.cpp +--- a/src/Mod/Sandbox/Gui/AppSandboxGui.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sandbox/Gui/AppSandboxGui.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + #ifndef _PreComp_ + # include +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/App/SketchAnalysis.cpp b/src/Mod/Sketcher/App/SketchAnalysis.cpp +--- a/src/Mod/Sketcher/App/SketchAnalysis.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/App/SketchAnalysis.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -25,7 +25,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp +--- a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp +--- a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -23,7 +23,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + /// Qt Include Files + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp b/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp +--- a/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + # include + # include + # include +diff --color -rupN a/src/Mod/Sketcher/Gui/ViewProviderPython.cpp b/src/Mod/Sketcher/Gui/ViewProviderPython.cpp +--- a/src/Mod/Sketcher/Gui/ViewProviderPython.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/ViewProviderPython.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -23,7 +23,6 @@ + + #include "PreCompiled.h" + +-#include + #ifndef _PreComp_ + # include + #endif +diff --color -rupN a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +--- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -24,7 +24,6 @@ + #include "PreCompiled.h" + + #ifndef _PreComp_ +-# include + + # include + # include +diff --color -rupN a/src/Mod/Surface/Gui/Command.cpp b/src/Mod/Surface/Gui/Command.cpp +--- a/src/Mod/Surface/Gui/Command.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/Surface/Gui/Command.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -31,7 +31,6 @@ + #include + #include + #include +-#include + #include + #include + #include +diff --color -rupN a/src/Mod/TechDraw/Gui/TaskProjection.cpp b/src/Mod/TechDraw/Gui/TaskProjection.cpp +--- a/src/Mod/TechDraw/Gui/TaskProjection.cpp 2022-12-07 03:35:37.000000000 +0100 ++++ b/src/Mod/TechDraw/Gui/TaskProjection.cpp 2024-02-27 15:00:48.258873781 +0100 +@@ -29,9 +29,6 @@ + # include + #endif + +- +-#include +- + #include + #include + #include diff --git a/backports/freecad/resourceDirectory.patch b/backports/freecad/resourceDirectory.patch new file mode 100644 index 0000000..a2a16d1 --- /dev/null +++ b/backports/freecad/resourceDirectory.patch @@ -0,0 +1,11 @@ +--- ./cMake/FreeCAD_Helpers/ConfigureCMakeVariables.cmake.orig ++++ ./cMake/FreeCAD_Helpers/ConfigureCMakeVariables.cmake +@@ -23,7 +23,7 @@ + "Path to the directory containing PyCXX's cxxextensions.c source file") + + # used as compiler defines +- set(RESOURCEDIR "${CMAKE_INSTALL_DATADIR}") ++ set(RESOURCEDIR "../../share/freecad") + set(LIBRARYDIR "${CMAKE_INSTALL_LIBDIR}") + set(DOCDIR "${CMAKE_INSTALL_DOCDIR}") + From 0b85dd2b35132bdae306e0859e4ee6c7937ce520 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:06:57 -0400 Subject: [PATCH 302/738] backports/freetube: bump pkgrel --- backports/freetube/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index 73d76af..e1b9cae 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freetube pkgver=0.20.0 -pkgrel=0 +pkgrel=1 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron license="AGPL-3.0-only" From e1c46033572e2e927939329fb075f8765c34e015 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:08:23 -0400 Subject: [PATCH 303/738] backports/libmedc: bump pkgrel --- backports/libmedc/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD index c10dfd3..ffc22e4 100644 --- a/backports/libmedc/APKBUILD +++ b/backports/libmedc/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=libmedc pkgver=4.1.1 -pkgrel=1 +pkgrel=3 pkgdesc="Open source library for numerical simulation" url="https://www.salome-platform.org/" arch="all" From 58efa9d1c522b3bf99dfeb5e2e0392d3570966d4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:09:09 -0400 Subject: [PATCH 304/738] backports/libnest2d: bump pkgrel --- backports/libnest2d/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/libnest2d/APKBUILD b/backports/libnest2d/APKBUILD index 3cb42f7..bc8059b 100644 --- a/backports/libnest2d/APKBUILD +++ b/backports/libnest2d/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=libnest2d pkgver=0.4 -pkgrel=5 +pkgrel=6 pkgdesc="2D irregular bin packaging and nesting library written in modern C++" url="https://github.com/tamasmeszaros/libnest2d" arch="noarch" From de61d62ece6f578d0dd4978a08e7eb24ca0f5a69 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:10:17 -0400 Subject: [PATCH 305/738] backports/openssl1.1-compat: fix build --- backports/openssl1.1-compat/APKBUILD | 3 --- 1 file changed, 3 deletions(-) diff --git a/backports/openssl1.1-compat/APKBUILD b/backports/openssl1.1-compat/APKBUILD index 29eb65b..294cbc1 100644 --- a/backports/openssl1.1-compat/APKBUILD +++ b/backports/openssl1.1-compat/APKBUILD @@ -79,9 +79,6 @@ build() { case "$CARCH" in aarch64*) _target="linux-aarch64" ;; arm*) _target="linux-armv4" ;; - mips64*) _target="linux64-mips64" ;; - # explicit _optflags is needed to prevent automatic -mips3 addition - mips*) _target="linux-mips32"; _optflags="-mips32" ;; ppc) _target="linux-ppc" ;; ppc64) _target="linux-ppc64" ;; ppc64le) _target="linux-ppc64le" ;; From 78a43bb4dee515bda850a78d201aecf8805f653e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:11:26 -0400 Subject: [PATCH 306/738] backports/py3-daemon: remove docutils depend --- backports/py3-daemon/APKBUILD | 8 ++++++-- .../py3-daemon/remove-docutils-depend.patch | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 backports/py3-daemon/remove-docutils-depend.patch diff --git a/backports/py3-daemon/APKBUILD b/backports/py3-daemon/APKBUILD index 6414d62..416cd99 100644 --- a/backports/py3-daemon/APKBUILD +++ b/backports/py3-daemon/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Noel Kuntze pkgname=py3-daemon pkgver=2.3.2 -pkgrel=2 +pkgrel=4 pkgdesc="Library to implement a well-behaved Unix daemon process" url="https://pagure.io/python-daemon" options="!check" # Has lots of dependencies @@ -11,7 +11,10 @@ license="Apache-2.0 AND GPL-3.0-or-later" depends="py3-setuptools py3-lockfile" makedepends="py3-docutils" subpackages="$pkgname-pyc" -source="https://pypi.io/packages/source/p/python-daemon/python-daemon-$pkgver.tar.gz" +source=" + https://pypi.io/packages/source/p/python-daemon/python-daemon-$pkgver.tar.gz + remove-docutils-depend.patch +" builddir="$srcdir/python-daemon-$pkgver" prepare() { @@ -33,4 +36,5 @@ package() { sha512sums=" d9f6e6c376a496fae96bd9efed0a56d00a137617a3d1d5ef74802ef176bc813bb1d49bbb9164cdbec03213529f944b32b257bcc64283abfa4a3522ff00826bfd python-daemon-2.3.2.tar.gz +20bc4bce7fba9754d1c9bca298f9b4ff7fe90ecf51769df2020912f370650a5997f91c99c6be2ecffed10a6b359a29b1f64b0c391772451eb3c04769df381015 remove-docutils-depend.patch " diff --git a/backports/py3-daemon/remove-docutils-depend.patch b/backports/py3-daemon/remove-docutils-depend.patch new file mode 100644 index 0000000..2bbc3be --- /dev/null +++ b/backports/py3-daemon/remove-docutils-depend.patch @@ -0,0 +1,16 @@ +diff --git a/setup.py.orig b/setup.py +index 24f0e7cb98a..d712294c20b 100644 +--- a/setup.py.orig ++++ b/setup.py +@@ -96,11 +96,6 @@ setup_kwargs = dict( + ], + ) + +-# Docutils is only required for building, but Setuptools can't distinguish +-# dependencies properly. +-# See . +-setup_kwargs['install_requires'].append("docutils") +- + + if __name__ == '__main__': + setup(**setup_kwargs) From e7e9e8df9ce2411f17c4b7e153fc83d32d579f5d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:12:55 -0400 Subject: [PATCH 307/738] backports/py3-dateparser: bump pkgrel --- backports/py3-dateparser/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD index b3dd959..6a342fb 100644 --- a/backports/py3-dateparser/APKBUILD +++ b/backports/py3-dateparser/APKBUILD @@ -2,7 +2,7 @@ pkgname=py3-dateparser _pyname=${pkgname#py3-} pkgver=1.2.0 -pkgrel=0 +pkgrel=1 pkgdesc="Python parser for human readable dates" url="https://github.com/scrapinghub/dateparser" arch="noarch" From 8ea01a36bf9f24e0387f800b840d74d7ba556382 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:19:26 -0400 Subject: [PATCH 308/738] backports/py3-django-debug-toolbar: bump pkgrel --- backports/py3-django-debug-toolbar/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-django-debug-toolbar/APKBUILD b/backports/py3-django-debug-toolbar/APKBUILD index 4becc02..b0974d3 100644 --- a/backports/py3-django-debug-toolbar/APKBUILD +++ b/backports/py3-django-debug-toolbar/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-django-debug-toolbar _pkgname=django-debug-toolbar pkgver=4.3 -pkgrel=0 +pkgrel=1 pkgdesc="Configurable set of panels that display various debug information about the current request/response" options="!check" # Requires unpackaged Selenium python3 module url="https://github.com/jazzband/django-debug-toolbar" From 7380fdd1acfc0f179578bee6fb90af236f3fa214 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:19:38 -0400 Subject: [PATCH 309/738] backports/py3-django-mapbox-earcut: bump pkgrel --- backports/py3-mapbox-earcut/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD index 222a870..99db5b5 100644 --- a/backports/py3-mapbox-earcut/APKBUILD +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=py3-mapbox-earcut pkgver=1.0.1 -pkgrel=1 +pkgrel=0 pkgdesc="Python bindings for the mapbox earcut c++ library" url="https://github.com/skogler/mapbox_earcut_python" arch="all" From 8f83341ebec604e6af96c04054a501f4af9c4990 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:19:49 -0400 Subject: [PATCH 310/738] backports/py3-microdata: bump pkgrel --- backports/py3-microdata/APKBUILD | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backports/py3-microdata/APKBUILD b/backports/py3-microdata/APKBUILD index 7d310b6..ecc0268 100644 --- a/backports/py3-microdata/APKBUILD +++ b/backports/py3-microdata/APKBUILD @@ -4,15 +4,14 @@ pkgname=py3-microdata #_pkgreal is used by apkbuild-pypi to find modules at PyPI _pkgreal=microdata pkgver=0.8.0 -pkgrel=1 +pkgrel=0 pkgdesc="html5lib extension for parsing microdata" url="https://pypi.python.org/project/microdata" license="CC0-1.0" arch="noarch" depends="py3-html5lib" -checkdepends="python3-dev" makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/m/microdata/microdata-$pkgver.tar.gz" +source="$pkgname-$pkgver.tar.gz::https://github.com/edsu/microdata/archive/refs/tags/v$pkgver.tar.gz" builddir="$srcdir/$_pkgreal-$pkgver" subpackages="$pkgname-pyc" @@ -22,11 +21,17 @@ build() { --output-fd 3 3>&1 >&2 } +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 setup.py test +} + package() { python3 -m installer -d "$pkgdir" \ .dist/*.whl } sha512sums=" -85ce750f11960e4bcae1cd7f7babbb43e47ad2e0133cc66fb8abb153b1471296b11dc642bee91059f89b45da363fcdd10cfe3770b43d3e7d4d82ff10ab700743 py3-microdata-0.8.0.tar.gz +e48c8c267f595faec97397fae470a3aa1f4f33d9f4ea7d186f07b104166b373ea768db7d73423aedd28af3e310f6b9fa268d946420c6aed9676d15f38396b07e py3-microdata-0.8.0.tar.gz " From e1da3f4eb19d45aa61b9085accbfe2c80a460088 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:20:03 -0400 Subject: [PATCH 311/738] backports/py3-pyinstrument: bump pkgrel --- backports/py3-pyinstrument/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD index 5c3fa36..50f4f80 100644 --- a/backports/py3-pyinstrument/APKBUILD +++ b/backports/py3-pyinstrument/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=py3-pyinstrument pkgver=4.6.2 -pkgrel=0 +pkgrel=1 pkgdesc="Call stack profiler for Python" url="https://github.com/joerick/pyinstrument" arch="all" From ec037fc6fd2846622212a003f9dddb8e7b8aa4b2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:20:12 -0400 Subject: [PATCH 312/738] backports/py3-rapidjson: bump pkgrel --- backports/py3-rapidjson/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-rapidjson/APKBUILD b/backports/py3-rapidjson/APKBUILD index 6208593..1418ad7 100644 --- a/backports/py3-rapidjson/APKBUILD +++ b/backports/py3-rapidjson/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Marian Buschsieweke pkgname=py3-rapidjson pkgver=1.12 -pkgrel=0 +pkgrel=1 pkgdesc="Python3 wrapper around RapidJSON" url="https://github.com/python-rapidjson/python-rapidjson" arch="all" From b84114435d54047d0177f0f2991c2d5816eb8512 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:20:29 -0400 Subject: [PATCH 313/738] backports/py3-svgpath: bump pkgrel --- backports/py3-svgpath/APKBUILD | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD index 9cab4db..12901b9 100644 --- a/backports/py3-svgpath/APKBUILD +++ b/backports/py3-svgpath/APKBUILD @@ -2,13 +2,12 @@ # Maintainer: Aiden Grossman pkgname=py3-svgpath pkgver=6.3 -pkgrel=1 +pkgrel=2 pkgdesc="SVG path and object parser" url="https://github.com/regebro/svg.path" arch="noarch" license="MIT" -depends="python3" -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517 py3-wheel" checkdepends="py3-pytest py3-pillow" subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz @@ -17,7 +16,9 @@ source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/ref builddir="$srcdir/svg.path-$pkgver" build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { @@ -25,7 +26,8 @@ check() { } package() { - python3 setup.py install --skip-build --root="$pkgdir" + python3 -m installer -d "$pkgdir" \ + .dist/*.whl } sha512sums=" From 53a721ead8f9cb3b09e65ddc011c3b3de301aef6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:20:38 -0400 Subject: [PATCH 314/738] backports/py3-trimesh: bump pkgrel --- backports/py3-trimesh/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD index b804328..bab0b96 100644 --- a/backports/py3-trimesh/APKBUILD +++ b/backports/py3-trimesh/APKBUILD @@ -9,6 +9,8 @@ url="https://github.com/mikedh/trimesh" # s390x, no py3-rtree # riscv64, no py3-shapely arch="noarch !x86 !armhf !armv7 !s390x !riscv64" +# TODO: investigate why checks stall +options="!check" license="MIT" depends=" py3-colorlog @@ -33,7 +35,6 @@ makedepends=" " checkdepends="py3-pytest py3-pytest-xdist py3-pyinstrument" subpackages="$pkgname-pyc" -options="!check" # stuck test source="$pkgname-$pkgver.tar.gz::https://github.com/mikedh/trimesh/archive/refs/tags/$pkgver.tar.gz" builddir="$srcdir/trimesh-$pkgver" From a4df28e246f4680bf9268e4f8ce33cbaccc0d1be Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:20:47 -0400 Subject: [PATCH 315/738] backports/uranium: bump pkgrel --- backports/uranium/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD index a26eae0..2b98a85 100644 --- a/backports/uranium/APKBUILD +++ b/backports/uranium/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=uranium pkgver=5.2.2 -pkgrel=4 +pkgrel=3 pkgdesc="A Python framework for building Desktop applications" url="https://github.com/Ultimaker/Uranium" arch="noarch !armhf !riscv64" # armhf: no py3-qt5, rv64: no py3-shapely From 2e84eef9d9f5fadf9bc4933b532ea99b0aef9f7f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:21:40 -0400 Subject: [PATCH 316/738] user/thelounge: move from backports --- {backports => user}/thelounge/APKBUILD | 0 {backports => user}/thelounge/allow-https-for-connect-src.patch | 0 {backports => user}/thelounge/no-version-test.patch | 0 {backports => user}/thelounge/thelounge.initd | 0 {backports => user}/thelounge/thelounge.post-install | 0 {backports => user}/thelounge/thelounge.pre-install | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {backports => user}/thelounge/APKBUILD (100%) rename {backports => user}/thelounge/allow-https-for-connect-src.patch (100%) rename {backports => user}/thelounge/no-version-test.patch (100%) rename {backports => user}/thelounge/thelounge.initd (100%) rename {backports => user}/thelounge/thelounge.post-install (100%) rename {backports => user}/thelounge/thelounge.pre-install (100%) diff --git a/backports/thelounge/APKBUILD b/user/thelounge/APKBUILD similarity index 100% rename from backports/thelounge/APKBUILD rename to user/thelounge/APKBUILD diff --git a/backports/thelounge/allow-https-for-connect-src.patch b/user/thelounge/allow-https-for-connect-src.patch similarity index 100% rename from backports/thelounge/allow-https-for-connect-src.patch rename to user/thelounge/allow-https-for-connect-src.patch diff --git a/backports/thelounge/no-version-test.patch b/user/thelounge/no-version-test.patch similarity index 100% rename from backports/thelounge/no-version-test.patch rename to user/thelounge/no-version-test.patch diff --git a/backports/thelounge/thelounge.initd b/user/thelounge/thelounge.initd similarity index 100% rename from backports/thelounge/thelounge.initd rename to user/thelounge/thelounge.initd diff --git a/backports/thelounge/thelounge.post-install b/user/thelounge/thelounge.post-install similarity index 100% rename from backports/thelounge/thelounge.post-install rename to user/thelounge/thelounge.post-install diff --git a/backports/thelounge/thelounge.pre-install b/user/thelounge/thelounge.pre-install similarity index 100% rename from backports/thelounge/thelounge.pre-install rename to user/thelounge/thelounge.pre-install From d8dcb89d2d23ef6e456c160a57ad1384fe37e981 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:00:27 -0400 Subject: [PATCH 317/738] backports/cura: fix build --- backports/cura/APKBUILD | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backports/cura/APKBUILD b/backports/cura/APKBUILD index 0a49e8e..c6964f8 100644 --- a/backports/cura/APKBUILD +++ b/backports/cura/APKBUILD @@ -4,7 +4,7 @@ pkgname=cura # uranium and curaengine packages must be updated in sync with this verion number # py3-pynest2d and fdm-materials should be checked as well, but their versions are not always in sync pkgver=5.2.2 -pkgrel=0 +pkgrel=1 pkgdesc="3D printer / slicing GUI built on top of the Uranium framework" url="https://ultimaker.com/software/ultimaker-cura" arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" # ppc64le: no py3-keyring @@ -42,8 +42,10 @@ builddir="$srcdir/Cura-$pkgver" options="!check" # tests broken after v5.x build() { + local pyver="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" cmake -B build -G Ninja \ -DCURA_VERSION=$pkgver \ + -DPython_VERSION=$pyver \ -DURANIUM_DIR=/usr/share/uranium \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=lib \ From d9314aa56bd52464199b483c0b5d3295cc8e6cc0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:03:45 -0400 Subject: [PATCH 318/738] backports/py3-arcus: upgrade to 5.3.0 --- backports/py3-arcus/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD index 604c5b1..0a04535 100644 --- a/backports/py3-arcus/APKBUILD +++ b/backports/py3-arcus/APKBUILD @@ -2,8 +2,8 @@ # Maintainer: Aiden Grossman pkgname=py3-arcus # Needs to be upgraded in sync with libarcus -pkgver=5.2.2 -pkgrel=3 +pkgver=5.3.0 +pkgrel=0 pkgdesc="Python bindings for libarcus" url="https://github.com/Ultimaker/pyArcus" arch="all" @@ -35,7 +35,7 @@ package() { } sha512sums=" -b24cbb9a5d7aa917b1b21e46f935b1293645e731d4e475a5abe364237f35708e8e96a1c6f06fe78e2e0e381737f4a27a6db87e42a5f4de9d48091d9de096f9b0 py3-arcus-5.2.2.tar.gz +d4a114994fa3e3156eae95dde58df13237b8bb0571a1219d6dee6b6338fd65f911f27887d6ab32b7a3cb32bc45ca6c25147e7c2d246cb0707326b88246abfbcd py3-arcus-5.3.0.tar.gz f14e55cd31c13051981f26364e34da8c94e8eb5227b1cfd6fe44b9f97b5a4dcf6142a1751fa62eb0514a47583e6ec2d51dc253f23cf72c3fe6a1cb5dca136f21 cmake.patch de75b985607feae0a9c511742915814e9c3d4bc467183f010ccc334ce4d0d952b6ff86020360b78558c4738cc03cf62c386b44ed76bcec12075c4a93dd03eeb7 cmake-helpers.patch ef593230d5c78da8ba0fc6ea83225c4543857de1837d3151c45e59ffd7c98063b8f97f25d01c15b6a8f90c26c919206f9f7fa26c9650117f4ce7be49ebca876f pyproject.patch From 78d9f3488910372067f378617554ca81fd7dadec Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:04:00 -0400 Subject: [PATCH 319/738] backports/py3-pynest2d: bump pkgrel --- backports/py3-pynest2d/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-pynest2d/APKBUILD b/backports/py3-pynest2d/APKBUILD index 5be721e..357a1c3 100644 --- a/backports/py3-pynest2d/APKBUILD +++ b/backports/py3-pynest2d/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=py3-pynest2d pkgver=5.2.2 -pkgrel=2 +pkgrel=4 pkgdesc="Python bindings for libnest2d" url="https://github.com/Ultimaker/pynest2d" arch="all" From 34a6944283e0a83039180a97e09b9f01bb96bcf2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:16:47 -0400 Subject: [PATCH 320/738] backports/py3-pivy: upgrade to 0.6.9_alpha0 --- backports/py3-pivy/APKBUILD | 24 +++++++++--------------- backports/py3-pivy/qt5.patch | 11 ----------- 2 files changed, 9 insertions(+), 26 deletions(-) delete mode 100644 backports/py3-pivy/qt5.patch diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD index e681d20..86d3112 100644 --- a/backports/py3-pivy/APKBUILD +++ b/backports/py3-pivy/APKBUILD @@ -1,24 +1,19 @@ # Contributor: Aiden Grossman # Maintainer: Aiden Grossman pkgname=py3-pivy -_pkgname=pivy -pkgver=0.6.8 -pkgrel=3 +pkgver=0.6.9_alpha0 +pkgrel=0 pkgdesc="Python3 bindings for coin" url="https://github.com/coin3d/pivy" -# riscv64 blocked by qt5-qtwebengine via py3-pyside2 -# py3-pyside2 is not available on armhf -# py3-pyside2 broken -#arch="all !armhf !riscv64" +# riscv64 blocked by py3-pyside6 +arch="all !riscv64" license="ISC" -depends="py3-pyside2" -makedepends="swig soqt-dev qt5-qtbase-dev python3-dev glu-dev cmake samurai" +depends="py3-pyside6" +makedepends="swig soqt-dev qt6-qtbase-dev python3-dev glu-dev cmake samurai" checkdepends="py3-pytest" options="!check" # test suite is interactive and requires full installation -source="$pkgname-$pkgver.tar.gz::https://github.com/coin3d/pivy/archive/refs/tags/$pkgver.tar.gz - qt5.patch - " -builddir="$srcdir/$_pkgname-$pkgver" +source="$pkgname-$pkgver.tar.gz::https://github.com/coin3d/pivy/archive/refs/tags/${pkgver//_alpha/.a}.tar.gz" +builddir="$srcdir/pivy-${pkgver//_alpha/.a}" build() { if [ "$CBUILD" != "$CHOST" ]; then @@ -37,6 +32,5 @@ package() { } sha512sums=" -723b09028f2e3075056b9588cebad0ddccbc98d0c15552b9565c177b0de764b9645f88ea2bc534ccf606f2e0b59f91e1d03551b55ece66c0654ce9cdf09a1a7c py3-pivy-0.6.8.tar.gz -7750ded3eb09da510ba5f84e7957c2ae1f92be0df280901fd9c9eba4164758a8f2d436e2d6ae7634a91aed12609f4eefd181922e6caed0b4906c6bc9dbd7b562 qt5.patch +1bfefd58d2921c8be170a97efa30cad53b01f636ea0cf236acca242be4f691669a4c310cd61c64d3e0c55e55e8be96d36945cd244380ddc0b3a06170d0f8b691 py3-pivy-0.6.9_alpha0.tar.gz " diff --git a/backports/py3-pivy/qt5.patch b/backports/py3-pivy/qt5.patch deleted file mode 100644 index 7dfdc97..0000000 --- a/backports/py3-pivy/qt5.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./qtinfo.py -+++ ./qtinfo.py -@@ -7,7 +7,7 @@ - if qmake_command: - self._qmake_command = qmake_command - else: -- self._qmake_command = [find_executable("qmake"),] -+ self._qmake_command = [find_executable("qmake-qt5"),] - self._dict = {} - # bind all variables early at __init__ time. - for thing in self.__class__.__dict__: From 2932096ea6034908a7c3032dd3a8b891e2dbd8b9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:02:17 -0400 Subject: [PATCH 321/738] community/electron: upgrade to 30.0.5 --- backports/electron/APKBUILD | 338 ++++++++++------ backports/electron/chromium-icu-74.patch | 20 - .../electron/chromium-use-alpine-target.patch | 30 -- backports/electron/compiler.patch | 132 +++++++ .../crbug-1407202-mediarouter-crash.patch | 372 ------------------ backports/electron/default.conf | 6 +- .../electron/disable-dns_config_service.patch | 15 + .../electron/disable-failing-tests.patch | 361 +++++++++++++++++ backports/electron/electron-launcher.sh | 2 + backports/electron/fc-cache-version.patch | 13 + backports/electron/fix-opus.patch | 12 + backports/electron/fstatat-32bit.patch | 17 + .../electron/generic-sensor-include.patch | 11 + backports/electron/icon.patch | 6 +- backports/electron/jsoncpp.patch | 39 -- backports/electron/libstdc++13.patch | 50 --- backports/electron/mman.patch | 4 +- backports/electron/musl-auxv.patch | 11 + backports/electron/no-execinfo.patch | 36 +- backports/electron/no-mallinfo.patch | 8 +- backports/electron/no-mte.patch | 13 - .../electron/partalloc-no-tagging-arm64.patch | 14 + backports/electron/perfetto-libstdc++.patch | 20 + backports/electron/pvalloc.patch | 33 ++ backports/electron/quiche-array.patch | 12 + backports/electron/random-fixes.patch | 94 +++++ backports/electron/remove-broken-patch.patch | 10 - backports/electron/system-zstd.patch | 46 +++ backports/electron/unbundle-node.patch | 68 ++++ backports/electron/vector-const.patch | 113 ------ backports/electron/yes-musl.patch | 11 + 31 files changed, 1111 insertions(+), 806 deletions(-) delete mode 100644 backports/electron/chromium-icu-74.patch delete mode 100644 backports/electron/chromium-use-alpine-target.patch create mode 100644 backports/electron/compiler.patch delete mode 100644 backports/electron/crbug-1407202-mediarouter-crash.patch create mode 100644 backports/electron/disable-dns_config_service.patch create mode 100644 backports/electron/disable-failing-tests.patch create mode 100644 backports/electron/fc-cache-version.patch create mode 100644 backports/electron/fix-opus.patch create mode 100644 backports/electron/fstatat-32bit.patch create mode 100644 backports/electron/generic-sensor-include.patch delete mode 100644 backports/electron/jsoncpp.patch create mode 100644 backports/electron/musl-auxv.patch delete mode 100644 backports/electron/no-mte.patch create mode 100644 backports/electron/partalloc-no-tagging-arm64.patch create mode 100644 backports/electron/perfetto-libstdc++.patch create mode 100644 backports/electron/pvalloc.patch create mode 100644 backports/electron/quiche-array.patch create mode 100644 backports/electron/random-fixes.patch delete mode 100644 backports/electron/remove-broken-patch.patch create mode 100644 backports/electron/system-zstd.patch create mode 100644 backports/electron/unbundle-node.patch delete mode 100644 backports/electron/vector-const.patch create mode 100644 backports/electron/yes-musl.patch diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index afd4439..ee12f67 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,36 +1,41 @@ # Maintainer: lauren n. liberda pkgname=electron -pkgver=27.1.2 +pkgver=30.0.5 _semver="${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=118.0.5993.162 -_depot_tools=b5509953468edd0906f2dc297886939abbd2bed5 -_extra_patches=118.0.5993.11 +_chromium=124.0.6367.207 +_copium_tag=124.5 +_depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" makedepends=" + ada-dev alsa-lib-dev aom-dev + base64-dev bash brotli-dev bsd-compat-headers bzip2-dev c-ares-dev cairo-dev - clang16-dev + clang-dev clang-extra-tools compiler-rt + crc32c-dev cups-dev curl-dev dav1d-dev dbus-glib-dev + double-conversion-dev eudev-dev ffmpeg-dev findutils flac-dev + flatbuffers-dev flex freetype-dev gperf @@ -38,23 +43,26 @@ makedepends=" gn gzip harfbuzz-dev + hdrhistogram-c-dev + highway-dev hunspell-dev http-parser-dev hwdata-dev java-jdk jpeg-dev - jsoncpp-dev krb5-dev lcms2-dev libarchive-tools libavif-dev libbsd-dev libcap-dev + libdrm-dev libevent-dev libexif-dev libgcrypt-dev libjpeg-turbo-dev libnotify-dev + libsecret-dev libusb-dev libva-dev libwebp-dev @@ -67,31 +75,31 @@ makedepends=" libxslt-dev linux-headers lld - llvm16 + llvm mesa-dev minizip-dev nghttp2-dev nodejs npm nss-dev + openh264-dev opus-dev pciutils-dev perl pipewire-dev pulseaudio-dev py3-httplib2 + py3-jinja2 py3-parsing + py3-setuptools py3-six python3 qt5-qtbase-dev - re2-dev rsync rust samurai - snappy-dev speex-dev sqlite-dev - woff2-dev xcb-proto yarn zlib-dev @@ -99,59 +107,82 @@ makedepends=" " subpackages="$pkgname-lang $pkgname-dev" # the lower patches are specific to electron, the top ones are from the equivalent chromium version -source="https://s3.sakamoto.pl/lnl-aports-snapshots/electron-$_semver-$_chromium.tar.zst - https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/$_extra_patches/chromium-patches-$_extra_patches.tar.gz +source="https://ab-sn.lnl.gay/electron-$_semver-$_chromium.tar.zst + copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz chromium-revert-drop-of-system-java.patch - chromium-use-alpine-target.patch + compiler.patch + disable-dns_config_service.patch + disable-failing-tests.patch + fc-cache-version.patch fix-missing-cstdint-include-musl.patch + fix-opus.patch + fstatat-32bit.patch gdbinit.patch + generic-sensor-include.patch import-version.patch libstdc++13.patch mman.patch + musl-auxv.patch musl-sandbox.patch musl-tid-caching.patch musl-v8-monotonic-pthread-cont_timedwait.patch no-execinfo.patch no-mallinfo.patch - no-mte.patch no-res-ninit-nclose.patch no-sandbox-settls.patch + partalloc-no-tagging-arm64.patch + perfetto-libstdc++.patch + pvalloc.patch + random-fixes.patch + quiche-array.patch + system-zstd.patch temp-failure-retry.patch + yes-musl.patch icon.patch python-jinja-3.10.patch - vector-const.patch webpack-hash.patch - chromium-icu-74.patch + unbundle-node.patch default.conf electron.desktop electron-launcher.sh " +_copium_patches=" + cr124-iwyu-sys-select-dawn-terminal.patch + cr124-libwebp-shim-sharpyuv.patch + " # tests are todo for some base checks options="!check net suid" builddir="$srcdir/electron-$_semver-$_chromium" export PATH="$PATH:/usr/lib/qt5/bin" -# clang uses much less memory (and this doesn't support gcc) -export CC=clang-16 -export CXX=clang++-16 +export CC=clang +export CXX=clang++ # required to find the tools -export AR=llvm16-ar -export NM=llvm16-nm -export LD=clang++-16 +export AR=llvm-ar +export NM=llvm-nm +export LD=clang++ # less log spam, reproducible -export CFLAGS="${CFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" -export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" +export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes" +export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-invalid-constexpr" export CPPFLAGS="${CPPFLAGS/-g/} -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" +case "$CARCH" in + aarch64|arm*|riscv64) + # not supported by clang here + export CFLAGS="${CFLAGS/-fstack-clash-protection}" + export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection}" + ;; +esac # breaks chromium-based stuff export CXXFLAGS="${CXXFLAGS/-D_GLIBCXX_ASSERTIONS=1}" # creates a dist tarball that does not need to git clone everything at build time. +_distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { deps # vpython3 execs system python3 with this set @@ -159,14 +190,6 @@ snapshot() { export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools" mkdir -p "$srcdir" cd "$srcdir" - if ! [ -d src ]; then - git clone --branch=$_chromium --depth=1 \ - https://chromium.googlesource.com/chromium/src.git - fi - - if ! [ -d electron ]; then - git clone https://github.com/electron/electron.git - fi if ! [ -d depot_tools ]; then ( @@ -182,19 +205,18 @@ snapshot() { echo "solutions = [ { \"name\": \"src/electron\", - \"url\": \"file://$srcdir/electron@v$_semver\", + \"url\": \"https://github.com/electron/electron.git@v$_semver\", \"deps_file\": \"DEPS\", \"managed\": False, \"custom_deps\": { - \"src\": None, + \"src\": \"https://chromium.googlesource.com/chromium/src.git@$_chromium\", }, \"custom_vars\": {}, }, ]" > .gclient python3 depot_tools/gclient.py sync \ - --with_branch_heads \ - --with_tags \ + --no-history \ --nohooks python3 src/build/landmines.py @@ -206,22 +228,11 @@ snapshot() { python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ -s src/third_party/skia --header src/skia/ext/skia_commit_hash.h - # why? - cp -r electron/patches/ffmpeg src/electron/patches/ + # rolled newer chromium with it included + sed -i '/reland_mojom_ts_generator_handle_empty_module_path_identically_to.patch/d' src/electron/patches/chromium/.patches - python3 electron/script/apply_all_patches.py \ - electron/patches/config.json - - python3 src/tools/update_pgo_profiles.py \ - --target=linux \ - update \ - --gs-url-base=chromium-optimization-profiles/pgo_profiles - - python3 src/tools/download_optimization_profile.py \ - --newest_state=src/chrome/android/profiles/newest.txt \ - --local_state=src/chrome/android/profiles/local.txt \ - --output_name=src/chrome/android/profiles/afdo.prof \ - --gs_url_base=chromeos-prebuilt/afdo-job/llvm + python3 src/electron/script/apply_all_patches.py \ + src/electron/patches/config.json mv src $pkgname-$_semver-$_chromium @@ -241,24 +252,28 @@ snapshot() { --exclude-vcs \ $pkgname-$_semver-$_chromium - zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_semver-$_chromium.tar -} - -_extra_patch() { - msg chromium-"$1".patch - patch -Np1 < "$srcdir"/chromium-patches-"$_extra_patches"/chromium-"$1".patch + zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_semver-$_chromium.tar -o "$SRCDEST"/$pkgname-$_semver-$_chromium.tar.zst + mcli cp "$SRCDEST"/$pkgname-$_semver-$_chromium.tar.zst "$_distbucket" } prepare() { - dos2unix third_party/vulkan_memory_allocator/include/vk_mem_alloc.h - default_prepare - _extra_patch 118-SensorReadingField-include - _extra_patch 117-material-color-include - _extra_patch 118-system-freetype - _extra_patch 117-system-zstd - _extra_patch 118-compiler + for i in $_copium_patches; do + case "$i" in + *.patch) + msg "${i%::*}" + patch -p1 -i "$srcdir/copium/$i" || failed="$failed $i" + ;; + esac + done + if [ ! -z "$failed" ]; then + error "The following patches failed to apply:" + for i in $failed; do + printf " %s\n" "$i" >&2 + done + exit 1 + fi git init -q . @@ -286,32 +301,39 @@ prepare() { ./update_npm_deps ) + # reusable system library settings + # libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9 # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ - local use_system=" + # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 + # jsoncpp, re2, snappy, swiftshader, vulkan, woff2 - needs use_custom_libcxx=false + local chromium_use_system=" + brotli + crc32c dav1d + double-conversion ffmpeg flac + flatbuffers fontconfig freetype harfbuzz-ng + highway icu - jsoncpp - libavif libdrm libevent libjpeg + libsecret + libusb libwebp libxml libxslt + openh264 opus - re2 - snappy - woff2 zlib zstd " - for _lib in $use_system libjpeg_turbo; do + for _lib in $chromium_use_system jinja2 libjpeg_turbo; do msg "Removing buildscripts for system provided $_lib" find . -type f -path "*third_party/$_lib/*" \ \! -path "*third_party/$_lib/chromium/*" \ @@ -321,10 +343,39 @@ prepare() { \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \ - \! -regex '.*\.\(gn\|gni\|isolate\|py\)' \ + \! -regex '.*\.\(gn\|gni\|gyp\|gypi\|isolate\|py\)' \ -delete done + # llhttp - 9.x needed, 8.x in repo (2023-12-17) + # ada - needs use_custom_libcxx=false + local node_use_system=" + base64 + brotli + cares + corepack + histogram + nghttp2 + nghttp3 + ngtcp2 + zlib + " + # some of these are provided by system, e.g. brotli. some are from chromium, + # e.g. boringssl (as openssl). some are not in use at all (corepack) + for _lib in $node_use_system openssl; do + msg "Removing buildscripts for $_lib" + find . -type f -path "*third_party/electron_node/deps/$_lib/*" \ + \! -path "*third_party/electron_node/deps/$_lib/chromium/*" \ + \! -path "*third_party/electron_node/deps/$_lib/google/*" \ + \! -regex '.*\.\(gn\|gni\|gyp\|gypi\|isolate\|py\)' \ + -delete + done + # XXX: hack. unbundle-node.patch uses this list to switch things + # in config.gypi. https://github.com/electron/electron/issues/40836 + echo $node_use_system > third_party/electron_node/use_system.txt + + rm -rf third_party/electron_node/tools/inspector_protocol/jinja2 + # https://groups.google.com/a/chromium.org/d/topic/chromium-packagers/9JX1N2nf4PU/discussion touch chrome/test/data/webui/i18n_process_css_test.html # Use the file at run time instead of effectively compiling it in @@ -333,7 +384,7 @@ prepare() { msg "Running debundle script" python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ - $use_system + $chromium_use_system python3 third_party/libaddressinput/chromium/tools/update-strings.py # prevent annoying errors when regenerating gni @@ -358,63 +409,77 @@ _configure() { cd "$builddir" msg "Configuring build" + local clang_ver="$(clang -dumpversion)" + + case "$USE_CCACHE" in + 1) + local cc_wrapper="ccache" + ;; + *) + local cc_wrapper="" + ;; + esac + + local maglev=true + local symbol_level=0 + local vaapi=true + # shellcheck disable=2089 local gn_config=" - clang_base_path=\"/usr\" - custom_toolchain=\"//build/toolchain/linux/unbundle:default\" - host_toolchain=\"//build/toolchain/linux/unbundle:default\" import(\"//electron/build/args/release.gn\") blink_enable_generated_code_formatting=false + cc_wrapper=\"$cc_wrapper\" chrome_pgo_phase=0 + clang_base_path=\"/usr\" clang_use_chrome_plugins=false + clang_version=\"${clang_ver%%.*}\" + custom_toolchain=\"//build/toolchain/linux/unbundle:default\" + disable_fieldtrial_testing_config=true + enable_hangout_services_extension=true + enable_nacl=false + enable_nocompile_tests=false + enable_stripping=false + enable_rust=true + enable_vr=false fatal_linker_warnings=false ffmpeg_branding=\"Chrome\" - icu_use_data_file=true + host_toolchain=\"//build/toolchain/linux/unbundle:default\" + icu_use_data_file=false is_cfi=false is_clang=true is_component_ffmpeg=true is_debug=false is_official_build=true - symbol_level=0 - treat_warnings_as_errors=false - - angle_enable_gl_null=false - build_tflite_with_xnnpack=false - build_with_tflite_lib=true - disable_fieldtrial_testing_config=true - enable_hangout_services_extension=true - enable_library_cdms=false - enable_media_remoting=false - enable_nacl=false - enable_paint_preview=false - enable_reading_list=false - enable_remoting=false - enable_reporting=false - enable_rust=false - enable_screen_ai_service=false - enable_service_discovery=false - enable_stripping=false - enable_vr=false - ozone_platform_headless=false - link_pulseaudio=true proprietary_codecs=true + regenerate_x11_protos=true rtc_link_pipewire=true rtc_use_pipewire=true - use_custom_libcxx=false - use_dawn=false + rustc_version=\"yes\" + rust_sysroot_absolute=\"/usr\" + symbol_level=$symbol_level + treat_warnings_as_errors=false + use_custom_libcxx=true + use_lld=true use_pulseaudio=true - use_sysroot=false - use_system_cares=true - use_system_freetype=true - use_system_harfbuzz=true - use_system_lcms2=true - use_system_libdrm=true + use_safe_libstdcxx=false use_system_libffi=true - use_system_libjpeg=true + use_sysroot=false + use_thin_lto=false + use_vaapi=$vaapi + v8_enable_maglev=$maglev + + skia_use_dawn=false + use_dawn=false + use_system_ada=false + use_system_base64=true + use_system_cares=true + use_system_histogram=true + use_system_lcms2=true + use_system_libffi=true + use_system_llhttp=false use_system_nghttp2=true - use_vaapi=true " # shellcheck disable=2086,2090,2116 @@ -425,11 +490,15 @@ _configure() { build() { export PATH="$PATH:/usr/lib/qt5/bin" - ninja -C out/Release \ + # ~1 GB per concurrent job is not enough with gcc + _njobs="${NJOBS:-"$(python3 -c 'import os; print(max((os.cpu_count() - (10 if os.uname().machine == "aarch64" else 8), 1)))')"}" + + ninja -C out/Release -j$_njobs \ electron_dist_zip \ node_gypi_headers \ - node_version_header \ - tar_headers + node_version_header + + cp -vf out/Release/gen/node_headers/include/node/config.gypi third_party/electron_node/config.gypi } package() { @@ -444,7 +513,12 @@ package() { mkdir -p "$pkgdir"/usr/include/electron - mv -v "$builddir"/out/Release/gen/node_headers "$pkgdir"/usr/include/electron + ( + cd third_party/electron_node/ + HEADERS_ONLY=1 python3 ./tools/install.py install "$pkgdir" "/usr/include/electron/node_headers" + ) + # required overrides + install -Dm644 out/Release/gen/node_headers/include/node/* -t "$pkgdir"/usr/include/electron/node_headers/include/node ln -sv /usr/include/electron/node_headers/include/node "$pkgdir"/usr/include/electron/node mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan @@ -470,30 +544,42 @@ lang() { } sha512sums=" -07f653f24e7fe1ef96a0ff676fa3c987fd0826980b5e9611705cb7fc44f00182fa62e67e67c6df5a3b1b4c063d99a3266054a83aa67fb44b11ffffcd8e23c3eb electron-27.1.2-118.0.5993.162.tar.zst -194c3a7a0fa03a85df6fe52ece3d53d4d15b9d0cb440b56a2ccb1b5c0d3f6481b6f7287aa705c596ceea92d475677ddaf58926f3b31c03a3c20e80ad7e481ce7 chromium-patches-118.0.5993.11.tar.gz +79a1e072e071b879b885825d7184a3905cacd18a95c4e821eb51d21dbda3624ba8a3d508a93d7bc9b974e544ebda4cbff3b34f1a7d96cd23e8493b2998afd874 electron-30.0.5-124.0.6367.207.tar.zst +13c647dc2024e27ae8a4d7e8f1202037a342f4a7054477226665c332029e1b6f1d8b99004c2b2809bcf1e6c19b1359ef5e1c971552d7ced59c5b43d5a836af88 copium-124.5.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch -fa291e941076146d0edd5b96c088240a44a6e0aca3dfc744929655607182d2dc47e6c35ecb419f7c623fcf7f26dc3c4dd924dbf5ed10c3b986283f5ef2f72573 chromium-use-alpine-target.patch +54eb147c0af2ba096d1df375a289b339ee855ab1a9114e7c747753f0274a6bafb7212c1859b7885454c4529d9a5e3bd9559fc14e8e006f23ccd381895fa68d15 compiler.patch +4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch +111bc22fb704d97759988268a40d6b356c51b0bd7a8119a694e905ffe21850ff64e91566cd0dd0c9d62fcb46dca8acc821436c34eb0ba78be872ee4f7ec88a7b disable-failing-tests.patch +5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch 9200f78bad70e95c648a5e8392d50642190600f655c6baa366ff6467ebad52d3b3f305dad58f3610da67136f4b723557653b174ec5c25be8d8737ee04d9ee09f fix-missing-cstdint-include-musl.patch +b24563e9a738c00fce7ff2fbdee3d7c024d9125d7c74d9ab90af6bdb16f7ec8419f2c8aa78c0640f6d5d81c17dc2c673a194401d354f466749672729b48ed068 fix-opus.patch +c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch +36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch 8de65109ece27ea63bd469f2220c56b8c752ba0a50fdf390082a2d5ae74b8e010199126175569f6d5084270dd4e0571e68aec32c0bca8211a6699925b3a09124 import-version.patch -49851d42ce8ccd533d01d1bb2477930802b0bcebab8dd52f2da292088378c6ed9b74146e7dad55edfe096281fc84b2c55abaf832744fd4553a97c38ed891df3a libstdc++13.patch -0e991842e23a4b9133898125eeb39e45e3f86f886eef5d2f0d9a72ee143a3e124b3b4f60be94edd57ce4185bcd69704edb51f76d08fdb6207f5559a08dd41ab0 mman.patch +c49a1b06e061faa430d66dd5b404ef6c843e4d8a6e9012e963009a161b4726f8eb92c4da8fa710f8861f6e4daa8be5f68abee41a7d9fc02f2a0eb61ce53b5fdd libstdc++13.patch +e75f57ae34c97ca1caf15fa4b4106c6c1e79c31ed66869cf92ed9ea0c449886c9511e455047c17c1e9ad8b9a46ad4948511a4f2995a4b6030fb4d1c7ae21d038 mman.patch +99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch 50c274a420bb8a7f14fcb56e40920dac8f708792a4520789b4987facea459bef88113d5a2b60fa8c57bee6e92bff3617d6b73fa305c8c44614c638971cffd440 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch 92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch -8cc774e8d84e434960222c0497ad8193ae35c0732f98d3282d5fd4b4930f914809eec97832c199517ca89ca6b9d1d011db5ce533c40c68ce5fa464609d131a23 no-execinfo.patch -b5479874d125ee95a311295f227f8881a83023ec34fded7a6160b3ae32ea3ba0f2b833a9fb264c57f3d22746b6d8b00bdc8eb2ff86c43c412d6d3b55ae15b16b no-mallinfo.patch -8a52ff52201a5e20344f5497ee2ffef0520f7b2d934be92227e49c3f2c12a94c33650eefc88a0e451a6b81d44ce197db421aaec7388e6bb1cb525a43628779d3 no-mte.patch +73bca6c6f9873f2f11cef04f3f41f71e0ae86e7e2d77e14db4298675fec390744c5081f6fdb14052e5ee2b5885be1198c3aa6068eb2b656d1a665c0c3f36e708 no-execinfo.patch +8e17101d69e23b456a9c03dc2fe95bcd56846389707ba6f4720192a9e9168406d20d9168dbebbb3a47d921ec92e478f0e390f46e6b9bb43a34dda217c6e6448b no-mallinfo.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch +d4ac7f350806b4410ccb1df3b0ad7e90a7b6d724a16919761aa2d47a6f21008c7374da528b05b754ee712b85d23adfb113c7f7b9ca2ed5b47644fe3ea0cb9119 partalloc-no-tagging-arm64.patch +8e1aca983890c78d81a6f888b2cf1aa42878d1f8523e87d63b800e1e468cbfd33e5ff6a0975775ca222fe82f30c6497da95505da01b091c8776a44c98ac86f0f perfetto-libstdc++.patch +2eb434b4fc6aee77026492644cd86772a543d9845f112a75cd4c3e1f25c9435cc31f8454c1c73223451fc9be69b86e822ff68821978f67f2fc8bcba50296d8e0 pvalloc.patch +803b8117c65132f76bec42054a4b2257a078b15b07fd08645fec2dfd51aa4e0075a9015300cd579d4ae0d757d9850b9988e080cfc2eea093f6684fdf82c4722c random-fixes.patch +86f612dd2b39602984a75b1b11c2ab8bc8cc6b4e78fae998570a777a6901ae45fdcdb22e46dd006dab703a0674e64c72cf8120af2dc5b9e78004f402c7e65358 quiche-array.patch +b3beb98b539fe160fbc493ba410ae0f68540cc4b6834f1f8ce9a22c3f4f59ef5d583ad48793e10549fd02a701f833a3969791ef4524322cd1e715ca5bf226bc8 system-zstd.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch -905565c10f5e5600e7d4db965c892cc45009a258e9995da958974d838ace469e1db1019195307e8807860d5b55ba6bfeea478b1f39a9b99e82c619b2816a1a22 icon.patch +914ccf649d7771f19f209ab97f99c481aebc6f66174d68e8b539f6ad4a70bc8cb0fae2df6dadbf0415958ffb3574c420fe029079dcce45f5e5add4db2e903566 yes-musl.patch +465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 python-jinja-3.10.patch -71571b15cf8bd6259b7fd22bea0e46b64890f3db776365de33fe539f26ce9ef99459e05c3dde9434c3657225bc67160abc915acd93033cb487c770c6a2a5975f vector-const.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 webpack-hash.patch -4c540972fa12acd9f0aafb8dc7e9987c3d6e4f28ff679dde522ebcec2dc5ae1a62d9d255bed0a30b9c79ae3b90ab0f5b9ae1ef5b7bf338612e28d9ef70250ca3 chromium-icu-74.patch -07e9203b05402f81c0ded5871a845e37bdc4c09b7bb2839312396f298a9ce8196e2c24508675e3d6f695f1e2b0ff1c2c64f4e9dfff3ff5359a87cb7b9b972393 default.conf +ebb18a0e2eba4b4606e900fa82f4b57fe91dcbdc943e17544bccb3c9a011a49b4331cdbee59629e44b80184bad4ea54ec887c0bfcd00cda8d5686060dbf365e3 unbundle-node.patch +e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop -ff1844036c8ae0a0a57a16211a816bc0ad550ccf6ea1cf718e228b8c95b9c4f5c9772d1a1a23638c0e140703a7b52874371e27a0d9d54a7b9468e5c384759be5 electron-launcher.sh +5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh " diff --git a/backports/electron/chromium-icu-74.patch b/backports/electron/chromium-icu-74.patch deleted file mode 100644 index 02a44b7..0000000 --- a/backports/electron/chromium-icu-74.patch +++ /dev/null @@ -1,20 +0,0 @@ -See ICU change https://github.com/unicode-org/icu/commit/2e45e6ec0e84a1c01812015a254ea31b286316fb - -Similar has happened in the past. See: -https://chromium.googlesource.com/chromium/src/+/e60b571faa3f14dd9119a6792dccf12f8bf80192 - -diff --git a/third_party/blink/renderer/platform/text/text_break_iterator.cc b/third_party/blink/renderer/platform/text/text_break_iterator.cc -index ddfbd51..247da06 100644 ---- a/third_party/blink/renderer/platform/text/text_break_iterator.cc -+++ b/third_party/blink/renderer/platform/text/text_break_iterator.cc -@@ -161,7 +161,9 @@ static const unsigned char kAsciiLineBreakTable[][(kAsciiLineBreakTableLastChar - }; - // clang-format on - --#if U_ICU_VERSION_MAJOR_NUM >= 58 -+#if U_ICU_VERSION_MAJOR_NUM >= 74 -+#define BA_LB_COUNT (U_LB_COUNT - 8) -+#elif U_ICU_VERSION_MAJOR_NUM >= 58 - #define BA_LB_COUNT (U_LB_COUNT - 3) - #else - #define BA_LB_COUNT U_LB_COUNT diff --git a/backports/electron/chromium-use-alpine-target.patch b/backports/electron/chromium-use-alpine-target.patch deleted file mode 100644 index ae57735..0000000 --- a/backports/electron/chromium-use-alpine-target.patch +++ /dev/null @@ -1,30 +0,0 @@ -building for arm targets by default passes --target to clang, because it -assumes it's cross compiling (so passes --target as if the host is different, -instead of assuming default) - -probably also works: removing this entirely. but to be safe, pass the alpine clang host triple --- ---- a/build/config/compiler/BUILD.gn -+++ b/build/config/compiler/BUILD.gn -@@ -915,8 +915,8 @@ config("compiler_cpu_abi") { - } else if (current_cpu == "arm") { - if (is_clang && !is_android && !is_nacl && - !(is_chromeos_lacros && is_chromeos_device)) { -- cflags += [ "--target=arm-linux-gnueabihf" ] -- ldflags += [ "--target=arm-linux-gnueabihf" ] -+ cflags += [ "--target=armv7-alpine-linux-musleabihf" ] -+ ldflags += [ "--target=armv7-alpine-linux-musleabihf" ] - } - if (!is_nacl) { - cflags += [ -@@ -930,8 +930,8 @@ config("compiler_cpu_abi") { - } else if (current_cpu == "arm64") { - if (is_clang && !is_android && !is_nacl && !is_fuchsia && - !(is_chromeos_lacros && is_chromeos_device)) { -- cflags += [ "--target=aarch64-linux-gnu" ] -- ldflags += [ "--target=aarch64-linux-gnu" ] -+ cflags += [ "--target=aarch64-alpine-linux-musl" ] -+ ldflags += [ "--target=aarch64-alpine-linux-musl" ] - } - if (is_android) { - # Outline atomics crash on Exynos 9810. http://crbug.com/1272795 diff --git a/backports/electron/compiler.patch b/backports/electron/compiler.patch new file mode 100644 index 0000000..fedc978 --- /dev/null +++ b/backports/electron/compiler.patch @@ -0,0 +1,132 @@ +--- ./build/config/compiler/BUILD.gn.orig ++++ ./build/config/compiler/BUILD.gn +@@ -613,24 +613,6 @@ + } + } + +- # TODO(crbug.com/1488374): This causes binary size growth and potentially +- # other problems. +- # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version. +- if (default_toolchain != "//build/toolchain/cros:target" && +- !llvm_android_mainline) { +- cflags += [ +- "-mllvm", +- "-split-threshold-for-reg-with-hint=0", +- ] +- if (use_thin_lto && is_a_target_toolchain) { +- if (is_win) { +- ldflags += [ "-mllvm:-split-threshold-for-reg-with-hint=0" ] +- } else { +- ldflags += [ "-Wl,-mllvm,-split-threshold-for-reg-with-hint=0" ] +- } +- } +- } +- + # TODO(crbug.com/1235145): Investigate why/if this should be needed. + if (is_win) { + cflags += [ "/clang:-ffp-contract=off" ] +@@ -1005,17 +987,6 @@ + # `-nodefaultlibs` from the linker invocation from Rust, which would be used + # to compile dylibs on Android, such as for constructing unit test APKs. + "-Cdefault-linker-libraries", +- +- # To make Rust .d files compatible with ninja +- "-Zdep-info-omit-d-target", +- +- # If a macro panics during compilation, show which macro and where it is +- # defined. +- "-Zmacro-backtrace", +- +- # For deterministic builds, keep the local machine's current working +- # directory from appearing in build outputs. +- "-Zremap-cwd-prefix=.", + ] + + if (!is_win || force_rustc_color_output) { +@@ -1182,8 +1153,8 @@ + } else if (current_cpu == "arm") { + if (is_clang && !is_android && !is_nacl && + !(is_chromeos_lacros && is_chromeos_device)) { +- cflags += [ "--target=arm-linux-gnueabihf" ] +- ldflags += [ "--target=arm-linux-gnueabihf" ] ++ cflags += [ "--target=armv7-alpine-linux-musleabihf" ] ++ ldflags += [ "--target=armv7-alpine-linux-musleabihf" ] + } + if (!is_nacl) { + cflags += [ +@@ -1197,8 +1168,8 @@ + } else if (current_cpu == "arm64") { + if (is_clang && !is_android && !is_nacl && !is_fuchsia && + !(is_chromeos_lacros && is_chromeos_device)) { +- cflags += [ "--target=aarch64-linux-gnu" ] +- ldflags += [ "--target=aarch64-linux-gnu" ] ++ cflags += [ "--target=aarch64-alpine-linux-musl" ] ++ ldflags += [ "--target=aarch64-alpine-linux-musl" ] + } + } else if (current_cpu == "mipsel" && !is_nacl) { + ldflags += [ "-Wl,--hash-style=sysv" ] +@@ -1983,7 +1954,7 @@ + defines = [ "_HAS_NODISCARD" ] + } + } else { +- cflags = [ "-Wall" ] ++ cflags = [] + if (is_clang) { + # Enable extra warnings for chromium_code when we control the compiler. + cflags += [ "-Wextra" ] +--- ./build/config/rust.gni.orig ++++ ./build/config/rust.gni +@@ -186,11 +186,11 @@ + rust_abi_target = "" + if (is_linux || is_chromeos) { + if (current_cpu == "arm64") { +- rust_abi_target = "aarch64-unknown-linux-gnu" ++ rust_abi_target = "aarch64-alpine-linux-musl" + } else if (current_cpu == "x86") { +- rust_abi_target = "i686-unknown-linux-gnu" ++ rust_abi_target = "i586-alpine-linux-musl" + } else if (current_cpu == "x64") { +- rust_abi_target = "x86_64-unknown-linux-gnu" ++ rust_abi_target = "x86_64-alpine-linux-musl" + } else if (current_cpu == "arm") { + if (arm_float_abi == "hard") { + float_suffix = "hf" +@@ -199,13 +199,13 @@ + } + if (arm_arch == "armv7-a" || arm_arch == "armv7") { + # No way to inform Rust about the -a suffix. +- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix ++ rust_abi_target = "armv7-alpine-linux-musleabi" + float_suffix + } else { +- rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix ++ rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix + } + } else { + # Best guess for other future platforms. +- rust_abi_target = current_cpu + "-unknown-linux-gnu" ++ rust_abi_target = current_cpu + "-alpine-linux-musl" + } + } else if (is_android) { + import("//build/config/android/abi.gni") +--- ./build/config/clang/BUILD.gn.orig ++++ ./build/config/clang/BUILD.gn +@@ -128,14 +128,15 @@ + } else if (is_apple) { + _dir = "darwin" + } else if (is_linux || is_chromeos) { ++ _dir = "linux" + if (current_cpu == "x64") { +- _dir = "x86_64-unknown-linux-gnu" ++ _suffix = "-x86_64" + } else if (current_cpu == "x86") { +- _dir = "i386-unknown-linux-gnu" ++ _suffix = "-i386" + } else if (current_cpu == "arm") { +- _dir = "armv7-unknown-linux-gnueabihf" ++ _suffix = "-armhf" + } else if (current_cpu == "arm64") { +- _dir = "aarch64-unknown-linux-gnu" ++ _suffix = "-aarch64" + } else { + assert(false) # Unhandled cpu type + } diff --git a/backports/electron/crbug-1407202-mediarouter-crash.patch b/backports/electron/crbug-1407202-mediarouter-crash.patch deleted file mode 100644 index 6bd5c3a..0000000 --- a/backports/electron/crbug-1407202-mediarouter-crash.patch +++ /dev/null @@ -1,372 +0,0 @@ -From d0c1f5ee1f56c165bdf550c9e3be0d7313587b80 Mon Sep 17 00:00:00 2001 -From: Elly Fong-Jones -Date: Wed, 18 Jan 2023 22:33:11 +0000 -Subject: [PATCH] media: untangle MediaRouterUI lifetimes - -Currently, MediaRouterUI is owned by MediaItemUIDeviceSelectorView. -There is an observer method named "OnControllerInvalidated" which -MediaItemUIDeviceSelectorView reacts to by deleting the MediaRouterUI it -owns. However, OnControllerInvalidated can actually be called in two -different situations: - -* From MediaRouterUI::TakeMediaRouteStarter(), in which case the - MediaRouterUI object is *not* being destroyed, but should be, because - it can't be safely used after TakeMediaRouteStarter() ends; -* From MediaRouterUI::~MediaRouterUI(), in which case the MediaRouterUI - object *is* being destroyed already and should not be. - -In the second case, only the fact that libc++ nulls out unique_ptr -before destroying the pointed-to object saves us from a use-after-free; -under libstdc++, we UaF immediately by re-entering the destructor. Even -under libc++ though this is still very dangerous, because any observers -that happened to be registered after MediaItemUIDeviceSelectorView will -be invoked after the destruction of the object they're observing. Right -now there are no such other observers, but the fact remains that this -interface is basically a UaF timebomb. - -This change separates "this object is about to be destroyed" (an -observable state) from "please destroy this object, it is no longer -useful" (a callback that is made to the object's owner) by: - -1. Renaming OnControllerInvalidated to OnControllerDestroying, to make - it very clear what is happening to the object, and -2. Adding a RegisterDestructor method to CastDialogController, which - allows MediaItemUIDeviceSelectorView to pass a callback into - MediaRouterUI which MediaRouterUI can use to arrange for its own - destruction. - -This is still a bit tangled and ungainly, but it's safe. A fuller -writeup is on the linked bug. - -Fixed: 1407202 -Change-Id: Id9410de1fbf2cb42f13957dde316b7c9259f192f -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4165967 -Reviewed-by: Peter Kasting -Reviewed-by: Takumi Fujimoto -Commit-Queue: Elly Fong-Jones -Cr-Commit-Position: refs/heads/main@{#1094110} ---- - -diff --git a/chrome/browser/ui/media_router/cast_dialog_controller.h b/chrome/browser/ui/media_router/cast_dialog_controller.h -index 2a8de976..c3c0553 100644 ---- a/chrome/browser/ui/media_router/cast_dialog_controller.h -+++ b/chrome/browser/ui/media_router/cast_dialog_controller.h -@@ -24,10 +24,12 @@ - public: - virtual ~Observer() = default; - -- virtual void OnModelUpdated(const CastDialogModel& model) = 0; -+ virtual void OnModelUpdated(const CastDialogModel& model) {} - -- // Observer should drop its reference to the controller when this is called. -- virtual void OnControllerInvalidated() = 0; -+ // Notifies observers that the observed object is being destroyed. Observers -+ // MUST NOT try to destroy the observed object in response - to manage the -+ // lifetime of a CastDialogController, use RegisterDestructor() below. -+ virtual void OnControllerDestroying() {} - }; - - virtual ~CastDialogController() = default; -@@ -55,6 +57,16 @@ - // intended that this API should only be used to transfer ownership to some - // new component that will want to start casting on this dialog box's behalf. - virtual std::unique_ptr TakeMediaRouteStarter() = 0; -+ -+ // Registers a callback for when the CastDialogController has given up -+ // ownership of its MediaRouteStarter and is no longer safe to use. The -+ // provided closure must destroy |this| or otherwise ensure it is never used -+ // again. This method can only be called once. -+ // -+ // TODO(https://crbug.com/1408494): It's awkward that CastDialogController has -+ // a state where it exists but is unsafe to use, and doubly awkward that we -+ // have to paper over that with this callback. Can that be fixed? -+ virtual void RegisterDestructor(base::OnceClosure destructor) = 0; - }; - - } // namespace media_router -diff --git a/chrome/browser/ui/media_router/media_router_ui.cc b/chrome/browser/ui/media_router/media_router_ui.cc -index 1865115f..644d131 100644 ---- a/chrome/browser/ui/media_router/media_router_ui.cc -+++ b/chrome/browser/ui/media_router/media_router_ui.cc -@@ -83,6 +83,9 @@ - MediaRouterUI::~MediaRouterUI() { - if (media_route_starter_) - DetachFromMediaRouteStarter(); -+ for (CastDialogController::Observer& observer : observers_) { -+ observer.OnControllerDestroying(); -+ } - } - - // static -@@ -145,9 +148,6 @@ - } - - void MediaRouterUI::DetachFromMediaRouteStarter() { -- for (CastDialogController::Observer& observer : observers_) -- observer.OnControllerInvalidated(); -- - media_route_starter()->RemovePresentationRequestSourceObserver(this); - media_route_starter()->RemoveMediaSinkWithCastModesObserver(this); - } -@@ -181,8 +181,16 @@ - - std::unique_ptr MediaRouterUI::TakeMediaRouteStarter() { - DCHECK(media_route_starter_) << "MediaRouteStarter already taken!"; -- DetachFromMediaRouteStarter(); -- return std::move(media_route_starter_); -+ auto starter = std::move(media_route_starter_); -+ if (destructor_) { -+ std::move(destructor_).Run(); // May destroy `this`. -+ } -+ return starter; -+} -+ -+void MediaRouterUI::RegisterDestructor(base::OnceClosure destructor) { -+ DCHECK(!destructor_); -+ destructor_ = std::move(destructor); - } - - bool MediaRouterUI::CreateRoute(const MediaSink::Id& sink_id, -diff --git a/chrome/browser/ui/media_router/media_router_ui.h b/chrome/browser/ui/media_router/media_router_ui.h -index 5c2f14e..7afe775 100644 ---- a/chrome/browser/ui/media_router/media_router_ui.h -+++ b/chrome/browser/ui/media_router/media_router_ui.h -@@ -100,8 +100,10 @@ - void StopCasting(const std::string& route_id) override; - void ClearIssue(const Issue::Id& issue_id) override; - // Note that |MediaRouterUI| should not be used after |TakeMediaRouteStarter| -- // is called. -+ // is called. To enforce that, |TakeMediaRouteStarter| calls the destructor -+ // callback given to |RegisterDestructor| to destroy itself. - std::unique_ptr TakeMediaRouteStarter() override; -+ void RegisterDestructor(base::OnceClosure destructor) override; - - // Requests a route be created from the source mapped to - // |cast_mode|, to the sink given by |sink_id|. -@@ -337,6 +339,8 @@ - raw_ptr router_; - raw_ptr logger_; - -+ base::OnceClosure destructor_; -+ - // NOTE: Weak pointers must be invalidated before all other member variables. - // Therefore |weak_factory_| must be placed at the end. - base::WeakPtrFactory weak_factory_{this}; -diff --git a/chrome/browser/ui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/media_router/media_router_ui_unittest.cc -index 2cc243d1..c33437b 100644 ---- a/chrome/browser/ui/media_router/media_router_ui_unittest.cc -+++ b/chrome/browser/ui/media_router/media_router_ui_unittest.cc -@@ -80,11 +80,11 @@ - } - - MOCK_METHOD1(OnModelUpdated, void(const CastDialogModel& model)); -- void OnControllerInvalidated() override { -+ void OnControllerDestroying() override { - controller_ = nullptr; -- OnControllerInvalidatedInternal(); -+ OnControllerDestroyingInternal(); - } -- MOCK_METHOD0(OnControllerInvalidatedInternal, void()); -+ MOCK_METHOD0(OnControllerDestroyingInternal, void()); - - private: - raw_ptr controller_ = nullptr; -@@ -295,7 +295,7 @@ - }))); - NotifyUiOnRoutesUpdated({route}); - -- EXPECT_CALL(observer, OnControllerInvalidatedInternal()); -+ EXPECT_CALL(observer, OnControllerDestroyingInternal()); - ui_.reset(); - } - -diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc -index 34dad46..d843bba 100644 ---- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc -+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.cc -@@ -222,6 +222,11 @@ - if (cast_controller) { - cast_controller_ = std::move(cast_controller); - cast_controller_->AddObserver(this); -+ cast_controller_->RegisterDestructor( -+ base::BindOnce(&MediaItemUIDeviceSelectorView::DestroyCastController, -+ // Unretained is safe: this callback is held by -+ // cast_controller_, which is owned by this object. -+ base::Unretained(this))); - } - } - -@@ -499,10 +504,6 @@ - observer.OnMediaItemUIDeviceSelectorUpdated(device_entry_ui_map_); - } - --void MediaItemUIDeviceSelectorView::OnControllerInvalidated() { -- cast_controller_.reset(); --} -- - void MediaItemUIDeviceSelectorView::OnDeviceSelected(int tag) { - auto it = device_entry_ui_map_.find(tag); - DCHECK(it != device_entry_ui_map_.end()); -@@ -658,5 +659,9 @@ - weak_ptr_factory_.GetWeakPtr())); - } - -+void MediaItemUIDeviceSelectorView::DestroyCastController() { -+ cast_controller_.reset(); -+} -+ - BEGIN_METADATA(MediaItemUIDeviceSelectorView, views::View) - END_METADATA -diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h -index e950565..222fc20 100644 ---- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h -+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view.h -@@ -81,7 +81,6 @@ - - // media_router::CastDialogController::Observer - void OnModelUpdated(const media_router::CastDialogModel& model) override; -- void OnControllerInvalidated() override; - - // MediaItemUIFooterView::Delegate - void OnDeviceSelected(int tag) override; -@@ -121,6 +120,7 @@ - void RecordCastDeviceCount(); - DeviceEntryUI* GetDeviceEntryUI(views::View* view) const; - void RegisterAudioDeviceCallbacks(); -+ void DestroyCastController(); - - bool has_expand_button_been_shown_ = false; - bool have_devices_been_shown_ = false; -diff --git a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc -index c3bcc6cc..6ae3dde8 100644 ---- a/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc -+++ b/chrome/browser/ui/views/global_media_controls/media_item_ui_device_selector_view_unittest.cc -@@ -156,6 +156,7 @@ - MOCK_METHOD1(ClearIssue, void(const media_router::Issue::Id& issue_id)); - MOCK_METHOD0(TakeMediaRouteStarter, - std::unique_ptr()); -+ MOCK_METHOD1(RegisterDestructor, void(base::OnceClosure)); - }; - - } // anonymous namespace -diff --git a/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc -index f6c80d6a..2dedc7e 100644 ---- a/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc -+++ b/chrome/browser/ui/views/media_router/cast_dialog_coordinator_unittest.cc -@@ -40,6 +40,7 @@ - MOCK_METHOD(void, StopCasting, (const std::string& route_id)); - MOCK_METHOD(void, ClearIssue, (const Issue::Id& issue_id)); - MOCK_METHOD(std::unique_ptr, TakeMediaRouteStarter, ()); -+ MOCK_METHOD(void, RegisterDestructor, (base::OnceClosure)); - }; - - class CastDialogCoordinatorTest : public TestWithBrowserView { -diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.cc b/chrome/browser/ui/views/media_router/cast_dialog_view.cc -index e3c7dadb..711d081 100644 ---- a/chrome/browser/ui/views/media_router/cast_dialog_view.cc -+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.cc -@@ -125,9 +125,9 @@ - observer.OnDialogModelUpdated(this); - } - --void CastDialogView::OnControllerInvalidated() { -+void CastDialogView::OnControllerDestroying() { - controller_ = nullptr; -- // We don't destroy the dialog here because if the invalidation was caused by -+ // We don't destroy the dialog here because if the destruction was caused by - // activating the toolbar icon in order to close the dialog, then it would - // cause the dialog to immediately open again. - } -diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.h b/chrome/browser/ui/views/media_router/cast_dialog_view.h -index d87fdda..d44d4e0 100644 ---- a/chrome/browser/ui/views/media_router/cast_dialog_view.h -+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.h -@@ -66,7 +66,7 @@ - - // CastDialogController::Observer: - void OnModelUpdated(const CastDialogModel& model) override; -- void OnControllerInvalidated() override; -+ void OnControllerDestroying() override; - - // views::BubbleDialogDelegateView: - void OnPaint(gfx::Canvas* canvas) override; -diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc -index 1c584120..a7af3c8 100644 ---- a/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc -+++ b/chrome/browser/ui/views/media_router/cast_dialog_view_browsertest.cc -@@ -70,6 +70,7 @@ - override { - return nullptr; - } -+ void RegisterDestructor(base::OnceClosure destructor) override {} - }; - - } // namespace -diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc -index 5326467..988cb07a 100644 ---- a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc -+++ b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc -@@ -91,6 +91,7 @@ - MOCK_METHOD1(StopCasting, void(const std::string& route_id)); - MOCK_METHOD1(ClearIssue, void(const Issue::Id& issue_id)); - MOCK_METHOD0(TakeMediaRouteStarter, std::unique_ptr()); -+ MOCK_METHOD1(RegisterDestructor, void(base::OnceClosure)); - }; - - class CastDialogViewTest : public ChromeViewsTestBase { -diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc -index ad379b2..244d523 100644 ---- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc -+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc -@@ -51,7 +51,7 @@ - std::move(context)); - } - -- ShowGlobalMeidaControlsDialog(std::move(context)); -+ ShowGlobalMediaControlsDialog(std::move(context)); - return true; - } - -@@ -155,9 +155,20 @@ - initiator(), std::move(start_presentation_context_)) - : MediaRouterUI::CreateWithDefaultMediaSourceAndMirroring( - initiator()); -+ ui_->RegisterDestructor( -+ base::BindOnce(&MediaRouterDialogControllerViews::DestroyMediaRouterUI, -+ // Safe to use base::Unretained here: the callback being -+ // bound is held by the MediaRouterUI we are creating and -+ // owning, and ownership of |ui_| is never transferred -+ // away from this object. -+ base::Unretained(this))); - } - --void MediaRouterDialogControllerViews::ShowGlobalMeidaControlsDialog( -+void MediaRouterDialogControllerViews::DestroyMediaRouterUI() { -+ ui_.reset(); -+} -+ -+void MediaRouterDialogControllerViews::ShowGlobalMediaControlsDialog( - std::unique_ptr context) { - // Show the WebContents requesting a dialog. - initiator()->GetDelegate()->ActivateContents(initiator()); -diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h -index 0a5fdb1..7c97211 100644 ---- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h -+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.h -@@ -69,13 +69,14 @@ - // MediaRouterUIService::Observer: - void OnServiceDisabled() override; - -- // Initializes |ui_|. -+ // Initializes and destroys |ui_| respectively. - void InitializeMediaRouterUI(); -+ void DestroyMediaRouterUI(); - - // If there exists a media button, show the GMC dialog anchored to the media - // button. Otherwise, show the dialog anchored to the top center of the web - // contents. -- void ShowGlobalMeidaControlsDialog( -+ void ShowGlobalMediaControlsDialog( - std::unique_ptr context); - - // Returns the media button from the browser that initiates the request to diff --git a/backports/electron/default.conf b/backports/electron/default.conf index 2fb04de..41f3f03 100644 --- a/backports/electron/default.conf +++ b/backports/electron/default.conf @@ -2,4 +2,8 @@ # the electron launcher. # Options to pass to electron. -ELECTRON_FLAGS="--ozone-platform-hint=auto --enable-features=WebRTCPipeWireCapturer" +ELECTRON_FLAGS="--enable-features=WebRTCPipeWireCapturer" + +# This can be 'x11', 'wayland', or 'auto'. Overriding default to 'auto', +# but respecting the variable content if any +ELECTRON_OZONE_PLATFORM_HINT="${ELECTRON_OZONE_PLATFORM_HINT:-auto}" diff --git a/backports/electron/disable-dns_config_service.patch b/backports/electron/disable-dns_config_service.patch new file mode 100644 index 0000000..a72e1c4 --- /dev/null +++ b/backports/electron/disable-dns_config_service.patch @@ -0,0 +1,15 @@ +diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn +index f36bf68..805d9a6 100644 +--- a/net/dns/BUILD.gn ++++ b/net/dns/BUILD.gn +@@ -130,8 +130,8 @@ source_set("dns") { + ] + } else if (is_linux) { + sources += [ +- "dns_config_service_linux.cc", +- "dns_config_service_linux.h", ++ "dns_config_service_fuchsia.cc", ++ "dns_config_service_fuchsia.h", + ] + } else if (is_posix) { + sources += [ diff --git a/backports/electron/disable-failing-tests.patch b/backports/electron/disable-failing-tests.patch new file mode 100644 index 0000000..2ee8f2b --- /dev/null +++ b/backports/electron/disable-failing-tests.patch @@ -0,0 +1,361 @@ +safesprintf emitnull: + error: conversion from 'std::nullptr_t' to 'const internal::Arg' is ambiguous + const internal::Arg arg_array[] = { args... }; + +flatmap incompletetype: + error: static assertion failed due to requirement 'std::__is_complete_or_unbounded(std::__type_identity>{})': template argument must be a complete class or an unbounded array + static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), + +i18n, time: + various icu failures (new icu time formatting? internal api difference?) + a ton of these fail: + + Expected equality of these values: + u"Monday 16 May – Saturday 28 May" + Which is: u"Monday 16 May \x2013 Saturday 28 May" + DateIntervalFormat(begin_time, end_time, DATE_FORMAT_MONTH_WEEKDAY_DAY) + Which is: u"Monday 16\x2009\x2013\x2009Saturday 28 May" + + ../../base/i18n/time_formatting_unittest.cc:84: Failure + Expected equality of these values: + clock12h_pm + Which is: u"3:42 PM" + TimeFormatTimeOfDay(time) + Which is: u"3:42\x202FPM" + + .. and so on + +fileutiltest filetofile: + ../../base/files/file_util_unittest.cc:2692: Failure + Value of: stream + Actual: true + Expected: false + +stacktracetest: crashes (this doesn't seem to use execinfo so probably relies on glibc internal layout for tracing here) + +platformthreadtest canchangethreadtype: + ../../base/threading/platform_thread_unittest.cc:445: Failure + Expected equality of these values: + PlatformThread::CanChangeThreadType(ThreadType::kBackground, ThreadType::kResourceEfficient) + Which is: true + kCanIncreasePriority + Which is: false + +scopedfdownershiptrackingtest crashonunownedclose: fails due to scoped-file-no-close.patch + +stackcontainer customallocator: + ../../base/containers/stack_container_unittest.cc:211: Failure + Expected equality of these values: + 1 + Allocator::deallocated + Which is: 0 + +nativelibrarytest loadlibrarypreferownsymbols: crashes (probably musl dlopen does not play nice here) + +spantest empty: crashes (this looks fishy) + +readelfbuildid: crashes (this looks like glibc dynamic linker semantics) + +nss db unittest: various nss failures: e.g.: + ../../net/cert/nss_cert_database_unittest.cc:209: Failure + Expected equality of these values: + OK + Which is: 0 + cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, u"12345", true, nullptr) + Which is: -702 + +processutiltest cloneflags: fails in CI (ulimit? too many threads?) + ../../base/process/process_util_unittest.cc:1434: Failure + Value of: process.IsValid() + Actual: false + Expected: true + +addresstrackerlinuxnetlinktest: + ../../net/base/address_tracker_linux_unittest.cc:886: Failure + Value of: child.process.IsValid() + Actual: false + Expected: true + +ToAddressDoesNotDereference: ; Expected `get_for_extraction_cnt` to be 1 but got 0; + +DataCapturedManyThreads: flaky + +ProcessAlternativeServicesTest.Process*: crashed ? + +--- a/base/strings/safe_sprintf_unittest.cc ++++ b/base/strings/safe_sprintf_unittest.cc +@@ -740,6 +740,7 @@ + #endif + } + ++#if 0 + TEST(SafeSPrintfTest, EmitNULL) { + char buf[40]; + #if defined(__GNUC__) +@@ -756,6 +757,7 @@ + #pragma GCC diagnostic pop + #endif + } ++#endif + + TEST(SafeSPrintfTest, PointerSize) { + // The internal data representation is a 64bit value, independent of the +--- a/base/containers/flat_map_unittest.cc ++++ b/base/containers/flat_map_unittest.cc +@@ -52,6 +52,7 @@ + + } // namespace + ++#if 0 + TEST(FlatMap, IncompleteType) { + struct A { + using Map = flat_map; +@@ -65,6 +66,7 @@ + + A a; + } ++#endif + + TEST(FlatMap, RangeConstructor) { + flat_map::value_type input_vals[] = { +--- a/base/BUILD.gn ++++ b/base/BUILD.gn +@@ -3194,21 +3194,6 @@ + "hash/md5_constexpr_unittest.cc", + "hash/md5_unittest.cc", + "hash/sha1_unittest.cc", +- "i18n/break_iterator_unittest.cc", +- "i18n/case_conversion_unittest.cc", +- "i18n/char_iterator_unittest.cc", +- "i18n/character_encoding_unittest.cc", +- "i18n/file_util_icu_unittest.cc", +- "i18n/icu_string_conversions_unittest.cc", +- "i18n/icu_util_unittest.cc", +- "i18n/message_formatter_unittest.cc", +- "i18n/number_formatting_unittest.cc", +- "i18n/rtl_unittest.cc", +- "i18n/streaming_utf8_validator_unittest.cc", +- "i18n/string_search_unittest.cc", +- "i18n/time_formatting_unittest.cc", +- "i18n/timezone_unittest.cc", +- "i18n/transliterator_unittest.cc", + "immediate_crash_unittest.cc", + "json/json_parser_unittest.cc", + "json/json_reader_unittest.cc", +--- a/base/files/file_util_unittest.cc ++++ b/base/files/file_util_unittest.cc +@@ -2686,6 +2686,7 @@ + } + } + ++#if 0 + TEST_F(FileUtilTest, FileToFILE) { + File file; + FILE* stream = FileToFILE(std::move(file), "w"); +@@ -2700,6 +2701,7 @@ + EXPECT_FALSE(file.IsValid()); + EXPECT_TRUE(CloseFile(stream)); + } ++#endif + + TEST_F(FileUtilTest, FILEToFile) { + ScopedFILE stream; +--- a/base/debug/stack_trace_unittest.cc ++++ b/base/debug/stack_trace_unittest.cc +@@ -345,6 +345,7 @@ + // sometimes we read fp / pc from the place that previously held + // uninitialized value. + // TODO(crbug.com/1132511): Enable this test on Fuchsia. ++#if 0 + #if defined(MEMORY_SANITIZER) || BUILDFLAG(IS_FUCHSIA) + #define MAYBE_TraceStackFramePointersFromBuffer \ + DISABLED_TraceStackFramePointersFromBuffer +@@ -357,6 +358,7 @@ + const void* frames[kDepth]; + ExpectStackFramePointers(frames, kDepth, /*copy_stack=*/true); + } ++#endif + + #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE) + #define MAYBE_StackEnd StackEnd +--- a/base/threading/platform_thread_unittest.cc ++++ b/base/threading/platform_thread_unittest.cc +@@ -416,6 +416,7 @@ + // platforms for all priorities. This not being the case. This test documents + // and hardcodes what we know. Please inform scheduler-dev@chromium.org if this + // proprerty changes for a given platform. ++#if 0 + TEST(PlatformThreadTest, CanChangeThreadType) { + #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) + // On Ubuntu, RLIMIT_NICE and RLIMIT_RTPRIO are 0 by default, so we won't be +@@ -472,6 +473,7 @@ + ThreadType::kBackground)); + #endif + } ++#endif + + TEST(PlatformThreadTest, SetCurrentThreadTypeTest) { + TestPriorityResultingFromThreadType(ThreadType::kBackground, +--- a/base/files/scoped_file_linux_unittest.cc ++++ b/base/files/scoped_file_linux_unittest.cc +@@ -42,11 +42,13 @@ + EXPECT_DEATH(ScopedFD(fd.get()), ""); + } + ++#if 0 + TEST_F(ScopedFDOwnershipTrackingTest, CrashOnUnownedClose) { + ScopedFD fd = OpenFD(); + subtle::EnableFDOwnershipEnforcement(true); + EXPECT_DEATH(close(fd.get()), ""); + } ++#endif + + #endif // defined(GTEST_HAS_DEATH_TEST) + +--- a/base/native_library_unittest.cc ++++ b/base/native_library_unittest.cc +@@ -139,6 +139,7 @@ + // Verifies that the |prefer_own_symbols| option satisfies its guarantee that + // a loaded library will always prefer local symbol resolution before + // considering global symbols. ++#if 0 + TEST(NativeLibraryTest, LoadLibraryPreferOwnSymbols) { + NativeLibraryOptions options; + options.prefer_own_symbols = true; +@@ -171,6 +172,7 @@ + EXPECT_EQ(2, NativeLibraryTestIncrement()); + EXPECT_EQ(3, NativeLibraryTestIncrement()); + } ++#endif + + #endif // !BUILDFLAG(IS_ANDROID) && !defined(THREAD_SANITIZER) && \ + // !defined(MEMORY_SANITIZER) +--- a/base/containers/span_unittest.cc ++++ b/base/containers/span_unittest.cc +@@ -995,6 +995,7 @@ + } + } + ++#if 0 + TEST(SpanTest, Empty) { + { + span span; +@@ -1014,6 +1015,7 @@ + EXPECT_TRUE(span_of_checked_iterators.empty()); + } + } ++#endif + + TEST(SpanTest, OperatorAt) { + static constexpr int kArray[] = {1, 6, 1, 8, 0}; +--- a/base/debug/elf_reader_unittest.cc ++++ b/base/debug/elf_reader_unittest.cc +@@ -194,6 +194,7 @@ + } + } + ++#if 0 + TEST(ElfReaderTestWithCurrentImage, ReadElfBuildId) { + #if BUILDFLAG(IS_ANDROID) + // On Android the library loader memory maps the full so file. +@@ -229,6 +230,7 @@ + UnloadNativeLibrary(library); + #endif + } ++#endif + + } // namespace debug + } // namespace base +--- a/net/BUILD.gn ++++ b/net/BUILD.gn +@@ -4826,7 +4826,6 @@ + sources += [ + "cert/internal/system_trust_store_nss_unittest.cc", + "cert/internal/trust_store_nss_unittest.cc", +- "cert/nss_cert_database_unittest.cc", + "cert/x509_util_nss_unittest.cc", + ] + if (!is_castos) { +--- a/base/process/process_util_unittest.cc ++++ b/base/process/process_util_unittest.cc +@@ -1419,7 +1419,7 @@ + return kSuccess; + } + +-#if defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) ++#if 0 && defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) + TEST_F(ProcessUtilTest, CloneFlags) { + if (!PathExists(FilePath("/proc/self/ns/user")) || + !PathExists(FilePath("/proc/self/ns/pid"))) { +--- a/net/base/address_tracker_linux_unittest.cc ++++ b/net/base/address_tracker_linux_unittest.cc +@@ -831,6 +831,7 @@ + // + // This test creates multiple concurrent `AddressTrackerLinux` instances in + // separate processes, each in their own PID namespaces. ++#if 0 + TEST(AddressTrackerLinuxNetlinkTest, TestInitializeTwoTrackersInPidNamespaces) { + // This test initializes `kNumChildren` instances of `AddressTrackerLinux` in + // tracking mode, each in their own child process running in a PID namespace. +@@ -901,6 +902,7 @@ + ASSERT_EQ(exit_code, 0); + } + } ++#endif + + MULTIPROCESS_TEST_MAIN(ChildProcessInitializeTrackerForTesting) { + base::test::TaskEnvironment task_env( +--- a/base/trace_event/trace_event_unittest.cc ++++ b/base/trace_event/trace_event_unittest.cc +@@ -1368,6 +1368,7 @@ + } + + // Test that data sent from multiple threads is gathered ++#if 0 + TEST_F(TraceEventTestFixture, DataCapturedManyThreads) { + BeginTrace(); + +@@ -1408,6 +1409,7 @@ + delete task_complete_events[i]; + } + } ++#endif + + // Test that thread and process names show up in the trace. + // In SDK build, thread names are not tracked inside //base. Instead, there's +--- a/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc +@@ -1481,6 +1481,7 @@ + // `base::to_address()` will use the dereference operator. This is not + // what we want; this test enforces extraction semantics for + // `to_address()`. ++#if 0 + TEST_F(RawPtrTest, ToAddressDoesNotDereference) { + CountingRawPtr ptr = nullptr; + int* raw = base::to_address(ptr); +@@ -1492,6 +1493,7 @@ + .get_for_duplication_cnt = 0}), + CountersMatch()); + } ++#endif + + TEST_F(RawPtrTest, ToAddressGivesBackRawAddress) { + int* raw = nullptr; +--- a/net/http/http_stream_factory_unittest.cc ++++ b/net/http/http_stream_factory_unittest.cc +@@ -3477,6 +3477,7 @@ + DefaultCTPolicyEnforcer ct_policy_enforcer_; + }; + ++#if 0 + TEST_F(ProcessAlternativeServicesTest, ProcessEmptyAltSvc) { + session_ = + std::make_unique(session_params_, session_context_); +@@ -3585,6 +3586,7 @@ + alternatives[0].host_port_pair()); + EXPECT_EQ(0u, alternatives[0].advertised_versions().size()); + } ++#endif + + } // namespace + diff --git a/backports/electron/electron-launcher.sh b/backports/electron/electron-launcher.sh index e49141f..546d4cc 100644 --- a/backports/electron/electron-launcher.sh +++ b/backports/electron/electron-launcher.sh @@ -10,6 +10,8 @@ done # Prefer user defined ELECTRON_USER_FLAGS (from env) over system # default ELECTRON_FLAGS (from /etc/electron/default.conf). export ELECTRON_FLAGS="$ELECTRON_FLAGS ${ELECTRON_USER_FLAGS:-"$ELECTRON_USER_FLAGS"}" +# Re-export, for it to be accessible by the process +export ELECTRON_OZONE_PLATFORM_HINT="${ELECTRON_OZONE_PLATFORM_HINT}" if [ "$ELECTRON_RUN_AS_NODE" == "1" ] && [ "$ELECTRON_STILL_PASS_THE_DEFAULT_FLAGS" != "1" ]; then exec "/usr/lib/electron/electron" "$@" diff --git a/backports/electron/fc-cache-version.patch b/backports/electron/fc-cache-version.patch new file mode 100644 index 0000000..3b76897 --- /dev/null +++ b/backports/electron/fc-cache-version.patch @@ -0,0 +1,13 @@ +instead of hardcoding the version, use the defined macro. +-- +--- a/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc ++++ b/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc +@@ -56,7 +56,7 @@ + FcFini(); + + // Check existence of intended fontconfig cache file. +- auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-9"; ++ auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-" + FC_CACHE_VERSION; + bool cache_exists = access(cache.c_str(), F_OK) == 0; + return !cache_exists; + } diff --git a/backports/electron/fix-opus.patch b/backports/electron/fix-opus.patch new file mode 100644 index 0000000..8841a32 --- /dev/null +++ b/backports/electron/fix-opus.patch @@ -0,0 +1,12 @@ +--- a/media/filters/ffmpeg_glue.cc ++++ b/media/filters/ffmpeg_glue.cc +@@ -142,7 +142,7 @@ const char* FFmpegGlue::GetAllowedAudioDecoders() { + static const base::NoDestructor kAllowedAudioCodecs([]() { + // This should match the configured lists in //third_party/ffmpeg. + std::string allowed_decoders( +- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," ++ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," + "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw"); + #if BUILDFLAG(USE_PROPRIETARY_CODECS) + allowed_decoders += ",aac"; + diff --git a/backports/electron/fstatat-32bit.patch b/backports/electron/fstatat-32bit.patch new file mode 100644 index 0000000..1627ffa --- /dev/null +++ b/backports/electron/fstatat-32bit.patch @@ -0,0 +1,17 @@ +fstatat64 is macrod to fstatat in sys/stat.h in musl- but then that fstatat is +used in the _syscall4 macro mapping to __NR_$name, and __NR_fstatat is not +defined anywhere here, as it wants the 64 name. + +so, just let it keep the name with an undef of the stat.h macro, then the macro +expansion below evaluates correctly. +--- a/third_party/lss/linux_syscall_support.h ++++ b/third_party/lss/linux_syscall_support.h +@@ -4947,7 +4947,8 @@ + # endif + #endif + #if defined(__NR_fstatat64) ++ #undef fstatat64 + LSS_INLINE _syscall4(int, fstatat64, int, d, + const char *, p, + struct kernel_stat64 *, b, int, f) + #endif diff --git a/backports/electron/generic-sensor-include.patch b/backports/electron/generic-sensor-include.patch new file mode 100644 index 0000000..e8e2563 --- /dev/null +++ b/backports/electron/generic-sensor-include.patch @@ -0,0 +1,11 @@ +--- a/services/device/public/cpp/generic_sensor/sensor_reading.h ++++ b/services/device/public/cpp/generic_sensor/sensor_reading.h +@@ -5,6 +5,8 @@ + #ifndef SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_H_ + #define SERVICES_DEVICE_PUBLIC_CPP_GENERIC_SENSOR_SENSOR_READING_H_ + ++#include ++#include + #include + + namespace device { diff --git a/backports/electron/icon.patch b/backports/electron/icon.patch index 6a999f1..101b60a 100644 --- a/backports/electron/icon.patch +++ b/backports/electron/icon.patch @@ -1,11 +1,11 @@ --- a/electron/default_app/default_app.ts +++ b/electron/default_app/default_app.ts -@@ -60,7 +60,7 @@ +@@ -61,7 +61,7 @@ }; if (process.platform === 'linux') { -- options.icon = path.join(__dirname, 'icon.png'); -+ options.icon = '/usr/share/icons/hicolor/1024x1024/apps/electron.png'; +- options.icon = url.fileURLToPath(new URL('icon.png', import.meta.url)); ++ options.icon = 'file:///usr/share/icons/hicolor/1024x1024/apps/electron.png'; } mainWindow = new BrowserWindow(options); diff --git a/backports/electron/jsoncpp.patch b/backports/electron/jsoncpp.patch deleted file mode 100644 index c9ea765..0000000 --- a/backports/electron/jsoncpp.patch +++ /dev/null @@ -1,39 +0,0 @@ -Patch-Source: https://github.com/archlinux/svntogit-packages/blob/bf2401407df5bcc938382eb03748fbef41e41c89/trunk/unbundle-jsoncpp-avoid-CFI-faults-with-is_cfi-true.patch -From ed8d931e35f81d8566835a579caf7d61368f85b7 Mon Sep 17 00:00:00 2001 -From: Evangelos Foutras -Date: Tue, 27 Sep 2022 22:20:41 +0000 -Subject: [PATCH] unbundle/jsoncpp: avoid CFI faults with is_cfi=true - -Ensure jsoncpp symbols have public visibility and are thus excluded from -CFI checks and whole-program optimization. This is achieved by defining -JSON_DLL_BUILD which in turn causes json/config.h to define JSON_API as -__attribute__((visibility("default"))). The latter macro is used to tag -jsoncpp classes and namespace functions throughout jsoncpp's headers. - -BUG=1365218 - -Change-Id: I56277737b7d9ecaeb5e17c8d21a2e55f3d5d5bc9 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3919652 -Reviewed-by: Thomas Anderson -Commit-Queue: Thomas Anderson -Cr-Commit-Position: refs/heads/main@{#1052077} ---- - build/linux/unbundle/jsoncpp.gn | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/build/linux/unbundle/jsoncpp.gn b/build/linux/unbundle/jsoncpp.gn -index 544f9d13c9..e84a0ef27a 100644 ---- a/build/linux/unbundle/jsoncpp.gn -+++ b/build/linux/unbundle/jsoncpp.gn -@@ -3,6 +3,11 @@ import("//build/shim_headers.gni") - - pkg_config("jsoncpp_config") { - packages = [ "jsoncpp" ] -+ -+ # Defining JSON_DLL_BUILD applies public visibility to jsoncpp classes -+ # thus deactivating CFI checks for them. This avoids CFI violations in -+ # virtual calls to system jsoncpp library (https://crbug.com/1365218). -+ defines = [ "JSON_DLL_BUILD" ] - } - - shim_headers("jsoncpp_shim") { diff --git a/backports/electron/libstdc++13.patch b/backports/electron/libstdc++13.patch index b85df2c..c49f7e8 100644 --- a/backports/electron/libstdc++13.patch +++ b/backports/electron/libstdc++13.patch @@ -1,15 +1,5 @@ missing libstdc++13 includes -- ---- a/third_party/ruy/src/ruy/profiler/instrumentation.h -+++ b/third_party/ruy/src/ruy/profiler/instrumentation.h -@@ -19,6 +19,7 @@ - #ifdef RUY_PROFILER - #include - #include -+#include - #include - #endif - --- a/third_party/openscreen/src/platform/base/error.h +++ b/third_party/openscreen/src/platform/base/error.h @@ -6,6 +6,7 @@ @@ -20,26 +10,6 @@ missing libstdc++13 includes #include #include #include ---- a/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h -+++ b/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h -@@ -2389,6 +2389,7 @@ - #undef VMA_IMPLEMENTATION - - #include -+#include - #include - #include - #include ---- a/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h -+++ b/third_party/vulkan-deps/vulkan-validation-layers/src/layers/external/vma/vk_mem_alloc.h -@@ -2389,6 +2389,7 @@ - #undef VMA_IMPLEMENTATION - - #include -+#include - #include - #include - #include --- a/ui/base/prediction/kalman_filter.h +++ b/ui/base/prediction/kalman_filter.h @@ -8,6 +8,8 @@ @@ -265,16 +235,6 @@ missing libstdc++13 includes #include #include #include ---- a/chrome/browser/privacy_budget/encountered_surface_tracker.h -+++ b/chrome/browser/privacy_budget/encountered_surface_tracker.h -@@ -5,6 +5,7 @@ - #ifndef CHROME_BROWSER_PRIVACY_BUDGET_ENCOUNTERED_SURFACE_TRACKER_H_ - #define CHROME_BROWSER_PRIVACY_BUDGET_ENCOUNTERED_SURFACE_TRACKER_H_ - -+#include - #include - - #include "base/containers/flat_set.h" --- a/chrome/browser/resource_coordinator/decision_details.h +++ b/chrome/browser/resource_coordinator/decision_details.h @@ -5,6 +5,7 @@ @@ -296,16 +256,6 @@ missing libstdc++13 includes namespace quic { // This interface writes encoder/decoder data to peer. ---- a/third_party/perfetto/src/trace_processor/sqlite/query_constraints.h -+++ b/third_party/perfetto/src/trace_processor/sqlite/query_constraints.h -@@ -17,6 +17,7 @@ - #ifndef SRC_TRACE_PROCESSOR_SQLITE_QUERY_CONSTRAINTS_H_ - #define SRC_TRACE_PROCESSOR_SQLITE_QUERY_CONSTRAINTS_H_ - -+#include - #include - #include - --- a/third_party/perfetto/include/perfetto/base/export.h +++ b/third_party/perfetto/include/perfetto/base/export.h @@ -17,6 +17,8 @@ diff --git a/backports/electron/mman.patch b/backports/electron/mman.patch index 748696c..d15605a 100644 --- a/backports/electron/mman.patch +++ b/backports/electron/mman.patch @@ -1,8 +1,8 @@ needed for PKEY_DISABLE_WRITE. these are documented as also being from sys/ mman.h with GNU_SOURCE, but musl doesn't do that, so these are strictly from kernel headers ---- a/base/allocator/partition_allocator/partition_alloc_unittest.cc -+++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc +--- a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc @@ -60,6 +60,7 @@ #include #include diff --git a/backports/electron/musl-auxv.patch b/backports/electron/musl-auxv.patch new file mode 100644 index 0000000..ce348cc --- /dev/null +++ b/backports/electron/musl-auxv.patch @@ -0,0 +1,11 @@ +--- ./v8/src/base/cpu.cc.orig ++++ ./v8/src/base/cpu.cc +@@ -14,7 +14,7 @@ + #if V8_OS_LINUX + #include // AT_HWCAP + #endif +-#if V8_GLIBC_PREREQ(2, 16) || V8_OS_ANDROID ++#if 1 + #include // getauxval() + #endif + #if V8_OS_QNX diff --git a/backports/electron/no-execinfo.patch b/backports/electron/no-execinfo.patch index 79e3327..b1705f5 100644 --- a/backports/electron/no-execinfo.patch +++ b/backports/electron/no-execinfo.patch @@ -37,25 +37,24 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1 #define HAVE_FCNTL_H 1 --- a/base/debug/stack_trace.cc +++ b/base/debug/stack_trace.cc -@@ -251,7 +253,9 @@ - } - - void StackTrace::OutputToStream(std::ostream* os) const { -+#if defined(__GLIBC__) && !defined(_AIX) - OutputToStreamWithPrefix(os, nullptr); -+#endif - } - - std::string StackTrace::ToString() const { -@@ -281,7 +281,7 @@ +@@ -291,7 +291,7 @@ } std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const { std::stringstream stream; -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) - OutputToStreamWithPrefix(&stream, prefix_string); - #endif - return stream.str(); + if (ShouldSuppressOutput()) { + return "Backtrace suppressed."; + } +@@ -301,7 +301,7 @@ + } + + std::ostream& operator<<(std::ostream& os, const StackTrace& s) { +-#if !defined(__UCLIBC__) && !defined(_AIX) ++#if defined(__GLIBC__) && !defined(_AIX) + s.OutputToStream(&os); + #else + os << "StackTrace::OutputToStream not implemented."; --- a/base/debug/stack_trace_unittest.cc +++ b/base/debug/stack_trace_unittest.cc @@ -33,7 +33,7 @@ @@ -67,12 +66,3 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1 // StackTrace::OutputToStream() is not implemented under uclibc, nor AIX. // See https://crbug.com/706728 -@@ -156,7 +156,7 @@ - - #endif // !defined(__UCLIBC__) && !defined(_AIX) - --#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) -+#if (BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !BUILDFLAG(IS_ANDROID) - #if !BUILDFLAG(IS_IOS) - static char* newArray() { - // Clang warns about the mismatched new[]/delete if they occur in the same diff --git a/backports/electron/no-mallinfo.patch b/backports/electron/no-mallinfo.patch index 90824e8..37abb3f 100644 --- a/backports/electron/no-mallinfo.patch +++ b/backports/electron/no-mallinfo.patch @@ -100,8 +100,8 @@ musl does not implement mallinfo()/mallinfo2() /* Define to 1 if you have the header file. */ #define HAVE_MALLOC_H 1 ---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc -+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc.cc +--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc @@ -717,7 +717,7 @@ #endif // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID) @@ -111,8 +111,8 @@ musl does not implement mallinfo()/mallinfo2() SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW { base::SimplePartitionStatsDumper allocator_dumper; Allocator()->DumpStats("malloc", true, &allocator_dumper); ---- a/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc -+++ b/base/allocator/partition_allocator/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc +--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc @@ -24,7 +24,7 @@ #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) diff --git a/backports/electron/no-mte.patch b/backports/electron/no-mte.patch deleted file mode 100644 index 2f5cead..0000000 --- a/backports/electron/no-mte.patch +++ /dev/null @@ -1,13 +0,0 @@ -M115 needs ifuncs for this --- ---- a/base/allocator/partition_allocator/partition_alloc_config.h -+++ b/base/allocator/partition_allocator/partition_alloc_config.h -@@ -155,7 +155,7 @@ - #define PA_CONFIG_HAS_MEMORY_TAGGING() \ - (defined(ARCH_CPU_ARM64) && defined(__clang__) && \ - !defined(ADDRESS_SANITIZER) && \ -- (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_ANDROID))) -+ ((BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_ANDROID))) - - #if PA_CONFIG(HAS_MEMORY_TAGGING) - static_assert(sizeof(void*) == 8); diff --git a/backports/electron/partalloc-no-tagging-arm64.patch b/backports/electron/partalloc-no-tagging-arm64.patch new file mode 100644 index 0000000..e5c7525 --- /dev/null +++ b/backports/electron/partalloc-no-tagging-arm64.patch @@ -0,0 +1,14 @@ +Hard-disable memory tagging on ARM64 - it does exist there but musl is +missing some required interface headers for it, and it's not clear how +to make the partalloc support code for it work. +--- ./base/allocator/partition_allocator/partition_alloc.gni.orig ++++ ./base/allocator/partition_allocator/partition_alloc.gni +@@ -30,7 +30,7 @@ + } + + has_memory_tagging = +- current_cpu == "arm64" && is_clang && !is_asan && (is_linux || is_android) ++ false + + declare_args() { + # Causes all the allocations to be routed via allocator_shim.cc. Usually, diff --git a/backports/electron/perfetto-libstdc++.patch b/backports/electron/perfetto-libstdc++.patch new file mode 100644 index 0000000..31ff9d9 --- /dev/null +++ b/backports/electron/perfetto-libstdc++.patch @@ -0,0 +1,20 @@ +--- a/third_party/perfetto/src/trace_processor/perfetto_sql/engine/created_function.cc ++++ b/third_party/perfetto/src/trace_processor/perfetto_sql/engine/created_function.cc +@@ -107,7 +107,7 @@ + // the destructors run correctly for non-trivial members of the + // union. + using Data = +- std::variant; ++ std::variant; + + StoredSqlValue(SqlValue value) { + switch (value.type) { +@@ -132,7 +132,7 @@ + } + + SqlValue AsSqlValue() { +- if (std::holds_alternative(data)) { ++ if (std::holds_alternative(data)) { + return SqlValue(); + } else if (std::holds_alternative(data)) { + return SqlValue::Long(std::get(data)); diff --git a/backports/electron/pvalloc.patch b/backports/electron/pvalloc.patch new file mode 100644 index 0000000..1d874d6 --- /dev/null +++ b/backports/electron/pvalloc.patch @@ -0,0 +1,33 @@ +the pvalloc/valloc symbols are obsolete and not implemented in musl +-- +--- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc ++++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc +@@ -375,7 +375,7 @@ + ASSERT_GE(aligned_allocs_intercepted_by_alignment[128], 1u); + ASSERT_GE(aligned_allocs_intercepted_by_size[53], 1u); + +-#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) && defined(__GLIBC__) + void* pvalloc_ptr = pvalloc(67); + ASSERT_NE(nullptr, pvalloc_ptr); + ASSERT_EQ(0u, reinterpret_cast(pvalloc_ptr) % kPageSize); +@@ -414,7 +414,7 @@ + free(memalign_ptr); + ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u); + +-#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) ++#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) && defined(__GLIBC__) + free(pvalloc_ptr); + ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u); + #endif // BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) +--- a/base/process/memory_unittest.cc ++++ b/base/process/memory_unittest.cc +@@ -359,7 +359,7 @@ + #endif // BUILDFLAG(IS_WIN) + #endif // !BUILDFLAG(IS_MAC) + +-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) ++#if (BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_CHROMEOS) + + TEST_F(OutOfMemoryDeathTest, Valloc) { + ASSERT_OOM_DEATH({ diff --git a/backports/electron/quiche-array.patch b/backports/electron/quiche-array.patch new file mode 100644 index 0000000..d016b38 --- /dev/null +++ b/backports/electron/quiche-array.patch @@ -0,0 +1,12 @@ +needed for push_back on array +-- +--- a/net/third_party/quiche/src/quiche/common/quiche_endian.h ++++ b/net/third_party/quiche/src/quiche/common/quiche_endian.h +@@ -6,6 +6,7 @@ + #define QUICHE_COMMON_QUICHE_ENDIAN_H_ + + #include ++#include + #include + #include + diff --git a/backports/electron/random-fixes.patch b/backports/electron/random-fixes.patch new file mode 100644 index 0000000..5bfdef5 --- /dev/null +++ b/backports/electron/random-fixes.patch @@ -0,0 +1,94 @@ +Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/chromium/-/blob/c073b0c20935d7eb452732e0f3b2860a96c3db21/random-build-fixes.patch +-- +diff --git a/chrome/browser/download/bubble/download_bubble_update_service.cc b/chrome/browser/download/bubble/download_bubble_update_service.cc +index 41b647f7b44..8940c6bb7fc 100644 +--- a/chrome/browser/download/bubble/download_bubble_update_service.cc ++++ b/chrome/browser/download/bubble/download_bubble_update_service.cc +@@ -91,7 +91,7 @@ ItemSortKey GetSortKey(const Item& item) { + // Helper to get an iterator to the last element in the cache. The cache + // must not be empty. + template +-SortedItems::const_iterator GetLastIter(const SortedItems& cache) { ++typename SortedItems::const_iterator GetLastIter(const SortedItems& cache) { + CHECK(!cache.empty()); + auto it = cache.end(); + return std::prev(it); +@@ -967,9 +967,9 @@ bool DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheImpl( + } + + template +-SortedItems::iterator ++typename SortedItems::iterator + DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheByIter( +- SortedItems::iterator iter, ++ typename SortedItems::iterator iter, + SortedItems& cache, + IterMap& iter_map) { + CHECK(iter != cache.end()); +diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc +index c0708681ebd..98b8494d170 100644 +--- a/chrome/test/chromedriver/capabilities.cc ++++ b/chrome/test/chromedriver/capabilities.cc +@@ -355,7 +355,7 @@ Status ParseMobileEmulation(const base::Value& option, + "'version' field of type string"); + } + +- brands.emplace_back(*brand, *version); ++ brands.emplace_back(BrandVersion{*brand, *version}); + } + + client_hints.brands = std::move(brands); +@@ -392,7 +392,7 @@ Status ParseMobileEmulation(const base::Value& option, + "a 'version' field of type string"); + } + +- full_version_list.emplace_back(*brand, *version); ++ full_version_list.emplace_back(BrandVersion{*brand, *version}); + } + + client_hints.full_version_list = std::move(full_version_list); +diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h +index c4f750f4684..b5635f4108b 100644 +--- a/components/optimization_guide/core/tflite_model_executor.h ++++ b/components/optimization_guide/core/tflite_model_executor.h +@@ -189,7 +189,7 @@ class TFLiteModelExecutor : public ModelExecutor { + void SendForBatchExecution( + BatchExecutionCallback callback_on_complete, + base::TimeTicks start_time, +- ModelExecutor::ConstRefInputVector inputs) ++ typename ModelExecutor::ConstRefInputVector inputs) + override { + DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); +diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc +index 2dc0b304092..a82f255090b 100644 +--- a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc ++++ b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc +@@ -169,7 +169,7 @@ class HTMLFastPathParser { + using Span = base::span; + using USpan = base::span; + // 32 matches that used by HTMLToken::Attribute. +- typedef std::conditional, ++ typedef typename std::conditional, + UCharLiteralBuffer<32>, + LCharLiteralBuffer<32>>::type LiteralBufferType; + typedef UCharLiteralBuffer<32> UCharLiteralBufferType; +diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc +index f0b49139147..a308fb67982 100644 +--- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc ++++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc +@@ -91,12 +91,12 @@ void CanvasStyle::ApplyToFlags(cc::PaintFlags& flags, + case kGradient: + GetCanvasGradient()->GetGradient()->ApplyToFlags(flags, SkMatrix::I(), + ImageDrawOptions()); +- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); ++ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha}); + break; + case kImagePattern: + GetCanvasPattern()->GetPattern()->ApplyToFlags( + flags, AffineTransformToSkMatrix(GetCanvasPattern()->GetTransform())); +- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); ++ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha}); + break; + default: + NOTREACHED(); diff --git a/backports/electron/remove-broken-patch.patch b/backports/electron/remove-broken-patch.patch deleted file mode 100644 index cf57c12..0000000 --- a/backports/electron/remove-broken-patch.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/third_party/node/update_npm_deps -+++ b/third_party/node/update_npm_deps -@@ -20,7 +20,6 @@ - - patch -d node_modules/@types/d3/ -p1 < chromium_d3_types_index.patch - patch -d node_modules/html-minifier/ -p1 < html_minifier.patch --patch -p1 < typescript.patch - - rsync -c --delete -r -q --include-from="npm_include.txt" --exclude-from="npm_exclude.txt" \ - --prune-empty-dirs "node_modules/" "node_modules_filtered/" diff --git a/backports/electron/system-zstd.patch b/backports/electron/system-zstd.patch new file mode 100644 index 0000000..0fcd3ef --- /dev/null +++ b/backports/electron/system-zstd.patch @@ -0,0 +1,46 @@ +From ae3ae3711784865bdc38bf119a6182a7b8dae91c Mon Sep 17 00:00:00 2001 +From: Matt Jolly +Date: Sun, 17 Sep 2023 16:51:42 +1000 +Subject: [PATCH] Add system-zstd + +--- a/build/linux/unbundle/replace_gn_files.py ++++ b/build/linux/unbundle/replace_gn_files.py +@@ -74,6 +74,7 @@ REPLACEMENTS = { + # + 'woff2': 'third_party/woff2/BUILD.gn', + 'zlib': 'third_party/zlib/BUILD.gn', ++ 'zstd': 'third_party/zstd/BUILD.gn', + } + + +--- /dev/null ++++ b/build/linux/unbundle/zstd.gn +@@ -0,0 +1,25 @@ ++import("//build/config/linux/pkg_config.gni") ++import("//build/shim_headers.gni") ++ ++pkg_config("system_zstd") { ++ packages = [ "libzstd" ] ++} ++ ++shim_headers("zstd_shim") { ++ root_path = "src/lib" ++ headers = [ ++ "zdict.h", ++ "zstd.h", ++ "zstd_errors.h", ++ ] ++} ++ ++source_set("zstd") { ++ deps = [ ":zstd_shim" ] ++ public_configs = [ ":system_zstd" ] ++} ++ ++source_set("decompress") { ++ deps = [ ":zstd_shim" ] ++ public_configs = [ ":system_zstd" ] ++} +-- +2.42.0 + diff --git a/backports/electron/unbundle-node.patch b/backports/electron/unbundle-node.patch new file mode 100644 index 0000000..08122af --- /dev/null +++ b/backports/electron/unbundle-node.patch @@ -0,0 +1,68 @@ +--- ./third_party/electron_node/BUILD.gn.orig ++++ ./third_party/electron_node/BUILD.gn +@@ -40,6 +40,8 @@ + node_release_urlbase = "" + + # Allows downstream packagers (eg. Linux distributions) to build Electron against system shared libraries. ++ use_system_ada = false ++ use_system_base64 = false + use_system_cares = false + use_system_nghttp2 = false + use_system_llhttp = false +@@ -48,6 +50,16 @@ + + if (is_linux) { + import("//build/config/linux/pkg_config.gni") ++ if (use_system_ada) { ++ config("ada") { ++ libs = [ "ada" ] ++ } ++ } ++ if (use_system_base64) { ++ pkg_config("base64") { ++ packages = [ "base64" ] ++ } ++ } + if (use_system_cares) { + pkg_config("cares") { + packages = [ "libcares" ] +@@ -258,8 +270,6 @@ + deps = [ + ":node_js2c_exec", + "deps/googletest:gtest", +- "deps/ada", +- "deps/base64", + "deps/simdutf", + "deps/uvwasi", + "//third_party/zlib", +@@ -267,6 +277,16 @@ + "//third_party/brotli:enc", + "//v8:v8_libplatform", + ] ++ if (use_system_ada) { ++ configs += [ ":ada" ] ++ } else { ++ deps += [ "deps/ada" ] ++ } ++ if (use_system_base64) { ++ configs += [ ":base64" ] ++ } else { ++ deps += [ "deps/base64" ] ++ } + if (use_system_cares) { + configs += [ ":cares" ] + } else { +--- ./electron/script/generate-config-gypi.py.orig ++++ ./electron/script/generate-config-gypi.py +@@ -62,6 +62,11 @@ + # Used by certain versions of node-gyp. + v['build_v8_with_gn'] = 'false' + ++ with open(os.path.join(NODE_DIR, 'use_system.txt')) as f: ++ for dep in f.read().strip().split(' '): ++ if v.get(f'node_shared_{dep}') is not None: ++ v[f'node_shared_{dep}'] = 'true' ++ + with open(target_file, 'w+') as f: + f.write(pprint.pformat(config, indent=2)) + diff --git a/backports/electron/vector-const.patch b/backports/electron/vector-const.patch deleted file mode 100644 index cb65e12..0000000 --- a/backports/electron/vector-const.patch +++ /dev/null @@ -1,113 +0,0 @@ ---- a/chrome/browser/process_singleton_posix.cc -+++ b/chrome/browser/process_singleton_posix.cc -@@ -607,7 +607,7 @@ - // |reader| is for sending back ACK message. - void HandleMessage(const std::string& current_dir, - const std::vector& argv, -- const std::vector additional_data, -+ const std::vector additional_data, - SocketReader* reader); - - private: -@@ -664,7 +664,7 @@ - void ProcessSingleton::LinuxWatcher::HandleMessage( - const std::string& current_dir, - const std::vector& argv, -- const std::vector additional_data, -+ const std::vector additional_data, - SocketReader* reader) { - DCHECK(ui_task_runner_->BelongsToCurrentThread()); - DCHECK(reader); -@@ -754,7 +754,7 @@ - base::StringToSizeT(tokens[0], &num_args); - std::vector command_line(tokens.begin() + 1, tokens.begin() + 1 + num_args); - -- std::vector additional_data; -+ std::vector additional_data; - if (tokens.size() >= 3 + num_args) { - size_t additional_data_size; - base::StringToSizeT(tokens[1 + num_args], &additional_data_size); -@@ -763,7 +763,7 @@ - std::string(1, kTokenDelimiter)); - const uint8_t* additional_data_bits = - reinterpret_cast(remaining_args.c_str()); -- additional_data = std::vector( -+ additional_data = std::vector( - additional_data_bits, additional_data_bits + additional_data_size); - } - ---- a/chrome/browser/process_singleton.h -+++ b/chrome/browser/process_singleton.h -@@ -102,7 +102,7 @@ - using NotificationCallback = - base::RepeatingCallback additional_data)>; -+ const std::vector additional_data)>; - - #if BUILDFLAG(IS_WIN) - ProcessSingleton(const std::string& program_name, ---- a/chrome/browser/process_singleton_win.cc -+++ b/chrome/browser/process_singleton_win.cc -@@ -81,7 +81,7 @@ - bool ParseCommandLine(const COPYDATASTRUCT* cds, - base::CommandLine* parsed_command_line, - base::FilePath* current_directory, -- std::vector* parsed_additional_data) { -+ std::vector* parsed_additional_data) { - // We should have enough room for the shortest command (min_message_size) - // and also be a multiple of wchar_t bytes. The shortest command - // possible is L"START\0\0" (empty command line, current directory, -@@ -163,7 +163,7 @@ - msg.substr(fourth_null + 1, fifth_null - fourth_null); - const uint8_t* additional_data_bytes = - reinterpret_cast(additional_data.c_str()); -- *parsed_additional_data = std::vector(additional_data_bytes, -+ *parsed_additional_data = std::vector(additional_data_bytes, - additional_data_bytes + additional_data_length); - - return true; -@@ -187,7 +187,7 @@ - - base::CommandLine parsed_command_line(base::CommandLine::NO_PROGRAM); - base::FilePath current_directory; -- std::vector additional_data; -+ std::vector additional_data; - if (!ParseCommandLine(cds, &parsed_command_line, ¤t_directory, &additional_data)) { - *result = TRUE; - return true; ---- a/electron/shell/browser/api/electron_api_app.cc -+++ b/electron/shell/browser/api/electron_api_app.cc -@@ -519,10 +519,10 @@ - const base::RepeatingCallback< - void(const base::CommandLine& command_line, - const base::FilePath& current_directory, -- const std::vector additional_data)>& callback, -+ const std::vector additional_data)>& callback, - const base::CommandLine& cmd, - const base::FilePath& cwd, -- const std::vector additional_data) { -+ const std::vector additional_data) { - // Make sure the callback is called after app gets ready. - if (Browser::Get()->is_ready()) { - callback.Run(cmd, cwd, std::move(additional_data)); -@@ -1082,7 +1082,7 @@ - - void App::OnSecondInstance(const base::CommandLine& cmd, - const base::FilePath& cwd, -- const std::vector additional_data) { -+ const std::vector additional_data) { - v8::Isolate* isolate = JavascriptEnvironment::GetIsolate(); - v8::Locker locker(isolate); - v8::HandleScope handle_scope(isolate); ---- a/electron/shell/browser/api/electron_api_app.h -+++ b/electron/shell/browser/api/electron_api_app.h -@@ -195,7 +195,7 @@ - std::string GetLocaleCountryCode(); - void OnSecondInstance(const base::CommandLine& cmd, - const base::FilePath& cwd, -- const std::vector additional_data); -+ const std::vector additional_data); - bool HasSingleInstanceLock() const; - bool RequestSingleInstanceLock(gin::Arguments* args); - void ReleaseSingleInstanceLock(); diff --git a/backports/electron/yes-musl.patch b/backports/electron/yes-musl.patch new file mode 100644 index 0000000..e860b8e --- /dev/null +++ b/backports/electron/yes-musl.patch @@ -0,0 +1,11 @@ +--- ./buildtools/third_party/libc++/__config_site.orig ++++ ./buildtools/third_party/libc++/__config_site +@@ -18,7 +18,7 @@ + /* #undef _LIBCPP_ABI_FORCE_MICROSOFT */ + /* #undef _LIBCPP_HAS_NO_THREADS */ + /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */ +-/* #undef _LIBCPP_HAS_MUSL_LIBC */ ++#define _LIBCPP_HAS_MUSL_LIBC 1 + /* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */ + /* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */ + /* #undef _LIBCPP_HAS_THREAD_API_WIN32 */ From c2f2218c0a47f38b119902e1c0eb828cf027b700 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:14:24 -0400 Subject: [PATCH 322/738] backports/py3-flask-limiter: upgrade to 3.7.0 --- backports/py3-flask-limiter/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index 491f4cf..9555218 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-flask-limiter -pkgver=3.5.0 -pkgrel=1 +pkgver=3.7.0 +pkgrel=0 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" arch="noarch" @@ -45,6 +45,6 @@ package() { } sha512sums=" -f97fd830fd0bbb2186c82451643413420be93872ed17d71d20c830a76ec3aee999bcda3a07b9d27d4602ef5fcd33f78888dc5d75c220eae5cb83ef02853151e6 flask-limiter-3.5.0.tar.gz +f546536e3efb86571515aac5b578155c240049fb1ccf96e55d4b1814d9e227e41cc18fc587f115706606154bb12a84b381533cf069cdfc56453b0f170ec19449 flask-limiter-3.7.0.tar.gz 1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch " From 7f99c70ce51a719f03fe7429f9490eb12254b6a0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:15:29 -0400 Subject: [PATCH 323/738] backports/py3-limits: upgrade to 3.12.0 --- backports/py3-limits/APKBUILD | 6 +++--- backports/py3-limits/our-std-is-good-enough.patch | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD index 67f4a82..ed4a82e 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.10.1 +pkgver=3.12.0 pkgrel=0 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" @@ -45,6 +45,6 @@ package() { } sha512sums=" -5daa23a2a53dc56ba8e24fe72000bd69bfade9956a159c02731ef3a240682f467c4ae1f58878139fd9d0f67806bf115f6f97999160a2f66f34c64fdad1503d70 limits-3.10.1.tar.gz -8db0d96f860a07bbc554504a6e94b61546a6be22c0b9736c6b5aca628db9b618efc30609fce3702ee8e3812e1e34329c04d2f34bd69fdaecaa7c7fa0a2bde8a7 our-std-is-good-enough.patch +2803dc26b18015e177342ed89e879f4dd680908579c99f9069d695edfa2beb3008b5bc47454ea2120a425bbcbc8a08928ab93a3058b33e11a2ae29431dfd9cd1 limits-3.12.0.tar.gz +0364d51f9f879b95c6a4a3c9e9fd3d7d1e15ea214c50ae98cd36826b8c0b2d903cf1128741ac83738e305a207dae8955a0b2c8679484d2d6643e334595bdb1d7 our-std-is-good-enough.patch " diff --git a/backports/py3-limits/our-std-is-good-enough.patch b/backports/py3-limits/our-std-is-good-enough.patch index f2247e7..94c0c30 100644 --- a/backports/py3-limits/our-std-is-good-enough.patch +++ b/backports/py3-limits/our-std-is-good-enough.patch @@ -11,12 +11,12 @@ from limits.typing import Dict, List, NamedTuple, Optional, Tuple, Type, Union --- ./limits/typing.py.orig +++ ./limits/typing.py -@@ -11,7 +11,7 @@ +@@ -13,7 +13,7 @@ Union, ) --from typing_extensions import ClassVar, Counter, ParamSpec, Protocol -+from typing import ClassVar, Counter, ParamSpec, Protocol +-from typing_extensions import ClassVar, Counter, ParamSpec, Protocol, TypeAlias ++from typing import ClassVar, Counter, ParamSpec, Protocol, TypeAlias Serializable = Union[int, str, float] From 70a9a1d2ef402c531302c9166e54b5500dae8ede Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:18:20 -0400 Subject: [PATCH 324/738] backports/signal-desktop: upgrade to 7.9.0 --- backports/signal-desktop/APKBUILD | 21 +++++++++---------- .../signal-disable-updates.patch | 4 ++-- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index aebfd3b..5a7b53b 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,13 +1,12 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.4.0 +pkgver=7.9.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron -# aarch64: polyval-0.5.3 crate subdep uses unstable stdsimd feature -arch="x86_64" +arch="aarch64 x86_64" license="AGPL-3.0-only" depends=" electron @@ -64,14 +63,14 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.41.2 +_libsignalver=0.45.0 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.39.2 +_ringrtcver=2.41.0 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6261c +_webrtcver=6261g # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.7.1 @@ -472,14 +471,14 @@ package() { } sha512sums=" -51edb647832a1f9658abb7fddb4c35e8c84f5ea73c36f52bb02cf3460b871ace5bc6a86b439df738d6fbc418f0753e717962a0edefa95a0d4b2ca846fa11371e Signal-Desktop-7.4.0.tar.gz -a311dd8d61d6c072a76e247bf4e4d752f1fe9dfcf0993d1b14790dc2eeec65d3c1bf8b8288156dee5ff89cbed9e282b73a58fcdd69bda9b49441fc9c443a83ec libsignal-0.41.2.tar.gz -c36eb4f3ab02cfa341ccb42a80d5fed53bf21bf495eb3627712db912c97bd76f4fb8fa1951ecfeff1b64c36fdfe72aec59bf459b27a612da5b4e16a885c225e4 ringrtc-2.39.2.tar.gz -341144563eafbd6e263c46cca5cf4954c9d8c72ba4caea1c9342b5b5311e7f618f3e595051195f9894662928cc5015641303aae2c5d5bbc18b22fb36651ee2e8 webrtc-6261c.tar.zst +53ef9feccdbe1c52eee88d2e2ed337746dcaf0fd18ee0d462ba3faaef02b38e9ba7269857e975f241c719d6750ce01fc42b0d90bbd9ef7bbee14b9b4540adbb8 Signal-Desktop-7.9.0.tar.gz +70f2cb7d05e019235cd044c401bcf072a934fdfea4a161ef5be988d2e3932ba5233110b4b06525e6f33ea9cad036def442e70adad15eab883903d9246969896e libsignal-0.45.0.tar.gz +3adccc33d4efa29e003175d0e00cceb169426a73f467ea32406e9cd721c72aeaa45a7816985e484b8adceb2de2a6405f306f6d609b43a25c950b18dd49a14476 ringrtc-2.41.0.tar.gz +6dc8c709986816e724a57d056a165cf72db70644593e8de8e3026e511d1f8f3d6d5e171d500cfabe760309c5a81795b667b4399c9885be30163d326cbc82c1b4 webrtc-6261g.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 92de6fc7cc5f2b6d65bedbd74cc733dd86dafc9cbfb9b727c3267aef63a71a07247cde9b163c68fddfeb9096dcd7f554d36d0b2de078d8905e3825645ddbd6eb libsignal-auditable.patch -f13389dd7a1360022d919fa1350210a92e5b832aa32b0ac278b63b1f41462c7807ac28c7867eecf71dac8f3ca699fd0fb0d87de8d1244c3e65cc4b78304e8ef4 signal-disable-updates.patch +152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch 646d303fe58cae3f0896ae0275a66695b902fae6ddde7c568cc9798157dee9f45ceff907bc951fadc4c511d512a73d114b4e4f7c8914e2311c63929d29e1621a signal-show-window-please.patch ab51b8fdcda1d8811213d2c5d8cb5d8457b478a02e23ce40f36b38ec56d45a3bd7a2d184720c27046f98a27771551cfad93c1290fe93856cc02695d318b33e47 ringrtc-webrtc-renamed.patch diff --git a/backports/signal-desktop/signal-disable-updates.patch b/backports/signal-desktop/signal-disable-updates.patch index 1e38199..9b9c134 100644 --- a/backports/signal-desktop/signal-disable-updates.patch +++ b/backports/signal-desktop/signal-disable-updates.patch @@ -1,9 +1,9 @@ --- a/config/production.json +++ b/config/production.json -@@ -15,5 +15,5 @@ - "serverPublicParams": "AMhf5ywVwITZMsff/eCyudZx9JDmkkkbV6PInzG4p8x3VqVJSFiMvnvlEKWuRob/1eaIetR31IYeAbm0NdOuHH8Qi+Rexi1wLlpzIo1gstHWBfZzy1+qHRV5A4TqPp15YzBPm0WSggW6PbSn+F4lf57VCnHF7p8SvzAA2ZZJPYJURt8X7bbg+H3i+PEjH9DXItNEqs2sNcug37xZQDLm7X36nOoGPs54XsEGzPdEV+itQNGUFEjY6X9Uv+Acuks7NpyGvCoKxGwgKgE5XyJ+nNKlyHHOLb6N1NuHyBrZrgtY/JYJHRooo5CEqYKBqdFnmbTVGEkCvJKxLnjwKWf+fEPoWeQFj5ObDjcKMZf2Jm2Ae69x+ikU5gBXsRmoF94GXTLfN0/vLt98KDPnxwAQL9j5V1jGOY8jQl6MLxEs56cwXN0dqCnImzVH3TZT1cJ8SW1BRX6qIVxEzjsSGx3yxF3suAilPMqGRp4ffyopjMD1JXiKR2RwLKzizUe5e8XyGOy9fplzhw3jVzTRyUZTRSZKkMLWcQ/gv0E4aONNqs4P+NameAZYOD12qRkxosQQP5uux6B2nRyZ7sAV54DgFyLiRcq1FvwKw2EPQdk4HDoePrO/RNUbyNddnM/mMgj4FW65xCoT1LmjrIjsv/Ggdlx46ueczhMgtBunx1/w8k8V+l8LVZ8gAT6wkU5J+DPQalQguMg12Jzug3q4TbdHiGCmD9EunCwOmsLuLJkz6EcSYXtrlDEnAM+hicw7iergYLLlMXpfTdGxJCWJmP4zqUFeTTmsmhsjGBt7NiEB/9pFFEB3pSbf4iiUukw63Eo8Aqnf4iwob6X1QviCWuc8t0I=", +@@ -16,5 +16,5 @@ "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", + "backupServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O", - "updatesEnabled": true + "updatesEnabled": false } From 9115f3f4387f4a1368c8081ac094f7758b2a84ac Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 2 Jun 2024 19:37:44 -0400 Subject: [PATCH 325/738] backports/coin: bump pkgrel --- backports/coin/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD index 782df0b..7881fd9 100644 --- a/backports/coin/APKBUILD +++ b/backports/coin/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Aiden Grossman pkgname=coin pkgver=4.0.0 -pkgrel=5 +pkgrel=6 pkgdesc="OpenGL OpenInventor compatible graphics library" url="https://github.com/coin3d/coin" license="BSD-3-Clause" From d070b3f938b4dbcbbdf0d9814b491d6d33b200c0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:30:32 -0400 Subject: [PATCH 326/738] backports/electron: upgrade to 30.0.9 --- backports/electron/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index ee12f67..a35cba1 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,9 +1,9 @@ # Maintainer: lauren n. liberda pkgname=electron -pkgver=30.0.5 +pkgver=30.0.9 _semver="${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=124.0.6367.207 +_chromium=124.0.6367.233 _copium_tag=124.5 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" @@ -302,6 +302,7 @@ prepare() { ) # reusable system library settings + # flatbuffers - tensorflow has a few static_asserts for a specific patch version # libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9 # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 @@ -313,7 +314,6 @@ prepare() { double-conversion ffmpeg flac - flatbuffers fontconfig freetype harfbuzz-ng @@ -544,7 +544,7 @@ lang() { } sha512sums=" -79a1e072e071b879b885825d7184a3905cacd18a95c4e821eb51d21dbda3624ba8a3d508a93d7bc9b974e544ebda4cbff3b34f1a7d96cd23e8493b2998afd874 electron-30.0.5-124.0.6367.207.tar.zst +97024407a16fb41ec56fcc6df5552165ce4eea34fc51b17ecbf30a7e35406baccf8a3001a795a06d1e92d32e134d9d7a18d59fa74eda1b1bc23b59bc4947929b electron-30.0.9-124.0.6367.233.tar.zst 13c647dc2024e27ae8a4d7e8f1202037a342f4a7054477226665c332029e1b6f1d8b99004c2b2809bcf1e6c19b1359ef5e1c971552d7ced59c5b43d5a836af88 copium-124.5.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch 54eb147c0af2ba096d1df375a289b339ee855ab1a9114e7c747753f0274a6bafb7212c1859b7885454c4529d9a5e3bd9559fc14e8e006f23ccd381895fa68d15 compiler.patch From c1565cc31e855d2f40479a0b0d3c5e2f55b5d903 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:33:11 -0400 Subject: [PATCH 327/738] backports/signal-desktop: disable due to build failure --- backports/signal-desktop/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 5a7b53b..9a512bb 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -6,7 +6,8 @@ pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron -arch="aarch64 x86_64" +# build failure +#arch="aarch64 x86_64" license="AGPL-3.0-only" depends=" electron From 72ee0d8d1a7ee1da86af58ba14c5479c1d2e30b3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:34:46 -0400 Subject: [PATCH 328/738] user/py3-validators: backports old version for tandoor --- user/py3-validators/APKBUILD | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 user/py3-validators/APKBUILD diff --git a/user/py3-validators/APKBUILD b/user/py3-validators/APKBUILD new file mode 100644 index 0000000..f14a156 --- /dev/null +++ b/user/py3-validators/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Leo +# Maintainer: +pkgname=py3-validators +pkgver=0.20.0 +pkgrel=1 +pkgdesc="Python3 Data Validation for Humans" +url="https://github.com/python-validators/validators" +arch="noarch" +license="MIT" +depends="py3-decorator py3-six" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-isort py3-pytest py3-flake8" +subpackages="$pkgname-pyc" +source="https://github.com/python-validators/validators/archive/$pkgver/py3-validators-$pkgver.tar.gz" +builddir="$srcdir/validators-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" .dist/*.whl +} + +sha512sums=" +45a07c061022da453c31fc946950be3a701f36afbf0e0eb82b91f4bdb26c4d2d0ab47f6958ac88fd2e0a1563201e946014a5cb93cfa1c6710411982852d571c7 py3-validators-0.20.0.tar.gz +" From 1687c6e040717d4a2a9d837c109265b170a7678e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:59:10 -0400 Subject: [PATCH 329/738] user/firefly-iii: disable due to build failure --- user/firefly-iii/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/firefly-iii/APKBUILD b/user/firefly-iii/APKBUILD index c8dfe1f..0b61b8a 100644 --- a/user/firefly-iii/APKBUILD +++ b/user/firefly-iii/APKBUILD @@ -5,7 +5,7 @@ pkgname=firefly-iii pkgver=5.7.18 pkgrel=0 pkgdesc="PHP personal finances manager" -arch="noarch" +#arch="noarch" url="https://github.com/firefly-iii/firefly-iii" license="AGPL-3.0-only" options="!check" # No testsuite From 99aad33f768ef814b5f00c624fc7d42732b62744 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:59:19 -0400 Subject: [PATCH 330/738] user/firefly-iii-plaid-connector: disable due to build failure --- user/firefly-iii-plaid-connector/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/firefly-iii-plaid-connector/APKBUILD b/user/firefly-iii-plaid-connector/APKBUILD index 77c50a9..13a222e 100644 --- a/user/firefly-iii-plaid-connector/APKBUILD +++ b/user/firefly-iii-plaid-connector/APKBUILD @@ -5,7 +5,7 @@ pkgname=firefly-iii-plaid-connector pkgver=0.3.1 pkgrel=7 pkgdesc="The Free Software Media System" -arch="x86_64" +#arch="x86_64" url="https://gitlab.com/GeorgeHahn/firefly-plaid-connector" license="MIT" options="!check" From 536488e38ae15ba534b6272e336b7c46262243c5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:59:33 -0400 Subject: [PATCH 331/738] user/gitlab-foss: disable due to build failure --- user/gitlab-foss/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 12b33fb..4b95adc 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -8,7 +8,7 @@ _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" -arch="x86_64 aarch64" +#arch="x86_64 aarch64" license="MIT" # ruby-irb is needed only for Rails console (gitlab-rails console) depends=" From 0fda66c95d53c5ffbe2d85bf5fdc6dccefc3176e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:59:42 -0400 Subject: [PATCH 332/738] user/mastodon: disable due to build failure --- user/mastodon/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 29f1f81..f7aa068 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -6,7 +6,7 @@ pkgver=4.2.8 _gittag=v$pkgver pkgrel=1 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" -arch="x86_64" +#arch="x86_64" url="https://github.com/mastodon/mastodon" license="AGPL-3.0-only" depends=" From cead3482d0c145569b250b6eac0a7212b3247835 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 09:59:50 -0400 Subject: [PATCH 333/738] user/peertube: disable due to build failure --- user/peertube/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/peertube/APKBUILD b/user/peertube/APKBUILD index f50d1c1..68affc9 100644 --- a/user/peertube/APKBUILD +++ b/user/peertube/APKBUILD @@ -4,7 +4,7 @@ pkgname=peertube pkgver=6.0.2 pkgrel=0 pkgdesc="ActivityPub-federated video streaming platform using P2P directly in your web browser" -arch="x86_64" +#arch="x86_64" url="https://joinpeertube.org/" license="AGPL" depends=" From 3ab0e08102656a58a86f81b2658015cc5a80b868 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:00:02 -0400 Subject: [PATCH 334/738] user/rstudio-desktop: disable due to build failure --- user/rstudio-desktop/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/rstudio-desktop/APKBUILD b/user/rstudio-desktop/APKBUILD index 0993211..958ac4b 100644 --- a/user/rstudio-desktop/APKBUILD +++ b/user/rstudio-desktop/APKBUILD @@ -7,7 +7,7 @@ _gittag=v2023.03.0+386 _panmirrortag=aea3027882718af657d60221818c3ff35f413219 pkgrel=0 pkgdesc="A powerful and productive integrated development environment (IDE) for R programming language" -arch="x86_64" +#arch="x86_64" url="https://www.rstudio.com/products/rstudio/" license='AGPL3' options="!check" # No testsuite From 01bb50572f75ae2866420a72aab31f79dff250ea Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:00:10 -0400 Subject: [PATCH 335/738] user/zotero: disable due to build failure --- user/zotero/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 0bbac6a..c3645cf 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -12,7 +12,7 @@ pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share url="https://www.mozilla.org/en-US/firefox/organizations/" # s390x and riscv64: blocked by rust and cargo # armhf: build failure on armhf due to wasm -arch="x86_64 armv7 aarch64 x86 ppc64le" +#arch="x86_64 armv7 aarch64 x86 ppc64le" license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" depends=" ffmpeg-libavcodec From aa38757ca452a3ba51af0f3bcf63d2b12ddc77f7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 13:44:17 -0400 Subject: [PATCH 336/738] user/wallabag: use php83 --- user/wallabag/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/wallabag/APKBUILD b/user/wallabag/APKBUILD index c697fca..a568868 100644 --- a/user/wallabag/APKBUILD +++ b/user/wallabag/APKBUILD @@ -3,12 +3,12 @@ pkgname=wallabag pkgver=2.5.4 -pkgrel=0 +pkgrel=1 pkgdesc="Self hostable application for saving web pages" arch="noarch" url="http://www.wallabag.org/" license="MIT" -_php=php81 +_php=php83 _php_mods="-gd -tidy -tokenizer -bcmath -dom -curl -session -ctype -simplexml -xml -sockets -xmlreader -intl" depends="$_php ${_php_mods//-/$_php-} pcre composer" From 4c1e2a5ad15c509437a9679a3e18173a278c472f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:28:05 -0400 Subject: [PATCH 337/738] user/zotero: enable build --- user/zotero/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index c3645cf..0bbac6a 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -12,7 +12,7 @@ pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share url="https://www.mozilla.org/en-US/firefox/organizations/" # s390x and riscv64: blocked by rust and cargo # armhf: build failure on armhf due to wasm -#arch="x86_64 armv7 aarch64 x86 ppc64le" +arch="x86_64 armv7 aarch64 x86 ppc64le" license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" depends=" ffmpeg-libavcodec From 0c00fe0b12e13e19f09e034da0e2607908e1a520 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 13:43:01 -0400 Subject: [PATCH 338/738] user/zotero: upgrade to 7.0.0_beta83 --- user/zotero/APKBUILD | 15 ++- user/zotero/rust1.78-qcms-stdsimd.patch | 64 ++++++++++++ user/zotero/zotero_drop-phantomjs.patch | 123 ++---------------------- 3 files changed, 81 insertions(+), 121 deletions(-) create mode 100644 user/zotero/rust1.78-qcms-stdsimd.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 0bbac6a..2dca9e0 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,13 +1,13 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta76 +pkgver=7.0.0_beta83 pkgrel=0 _fxver=115.9.1 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) # https://www.mozilla.org/firefox/organizations/notes/ -_releasedate=2024-03-22 +_releasedate=2024-06-03 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." url="https://www.mozilla.org/en-US/firefox/organizations/" # s390x and riscv64: blocked by rust and cargo @@ -82,6 +82,8 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox ppc-webrtc.patch python-deps.patch rust-lto-thin.patch + https://dev.alpinelinux.org/archive/firefox/rust1.78-packed-to-portable_simd.patch + rust1.78-qcms-stdsimd.patch sandbox-fork.patch sandbox-largefile.patch sandbox-sched_setscheduler.patch @@ -93,9 +95,9 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox vendor-prefs.js zotero.desktop + zotero_drop-phantomjs.patch https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz zotero_build-modifications.patch - zotero_drop-phantomjs.patch zotero_test-drop-build.patch zotero_test-fix-chars.patch zotero_test-push-timeout-to-30sec.patch @@ -163,6 +165,7 @@ prepare() { ) default_prepare + rm -rf third_party/rust/packed_simd/ cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ _clear_vendor_checksums audio_thread_priority @@ -372,6 +375,8 @@ c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc53633703 6f60e83599041db1b707c21784197ea9816b2c936b89a274bfc24554a600981e6f28448fe41fab0942bd31acd49b1c00beb2eb0961149f2ffa6a4154be123ea7 ppc-webrtc.patch 4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch 1c6918dd6655d3a1251bfd4af2e1c561cbb00d540a883b4c1ebf7f5de530d754d9ac07b4b5f56cdab6c511d25c8910ec94043f5733e97501a67abffe1bafaeb1 rust-lto-thin.patch +e4795b88e572bb3b6f009dbacc7872b59db2f8facbe2b07f14dd4f45a77c22049783581869f18c6bb3f04d6edb3da59347278321cce2bfa629a4d35e136cda5c rust1.78-packed-to-portable_simd.patch +eae1afad93cc5fa7699b156619600ca4b41e67943b8b6e05ab972d449aece93bbf1e68a5ea1a7b1c9278633dbf7cf31503255558e3e06ddf168b3937a0e014e8 rust1.78-qcms-stdsimd.patch 2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch @@ -380,9 +385,9 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -e8442e68c53d0057947e4abb4d7ab2f4d52dbb88372d362006c43780d65cae1fe579ab167c772d36113c7937c296b7e4306027319757fb0d36f76a851be6e0e3 zotero-client-7.0.0_beta76.tar.gz +abbcb92fe89029833bbfb15a8a65204c4043c8c9a372d1aa3d18756584cea32078238caded7f0099314228093b09ac10e18ac3c8ecb8138d30f57664c63f7f8a zotero_drop-phantomjs.patch +4b5125ae1cc235803e6f4eb89787c631b3b55c6b34263fe16aef4b2c371df28d9daf05d83a7e2fa36c05a2153585d674a23bec98e0488d9dc9eabe5f5924a873 zotero-client-7.0.0_beta83.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch -cfe583f2da7508a4e07734a42519d7c28265928fe14c14b2f650ca6e56c35cb79272b03ed3bfb81e06c4e01458b55e04d10df5cbdd549da0d97206b2c10c3530 zotero_drop-phantomjs.patch 337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch 9dc390d8bae42e645cae45fe5551751d8f38d5c1b8b2cc0eec1c2191f4bde293ffb2c67cfc4de765f2d48b1da4d5fcd4f1c03711e5da3180cd1b63710ccf5599 zotero_test-push-timeout-to-30sec.patch diff --git a/user/zotero/rust1.78-qcms-stdsimd.patch b/user/zotero/rust1.78-qcms-stdsimd.patch new file mode 100644 index 0000000..2c86aa1 --- /dev/null +++ b/user/zotero/rust1.78-qcms-stdsimd.patch @@ -0,0 +1,64 @@ +Relevant bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1882291 + + +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -4274,10 +4274,11 @@ + [[package]] + name = "qcms" + version = "0.2.0" + dependencies = [ + "libc", ++ "version_check", + ] + + [[package]] + name = "qlog" + version = "0.4.0" +diff --git a/gfx/qcms/Cargo.toml b/gfx/qcms/Cargo.toml +--- a/gfx/qcms/Cargo.toml ++++ b/gfx/qcms/Cargo.toml +@@ -18,5 +18,8 @@ + iccv4-enabled = [] + cmyk = [] + + [dependencies] + libc = {version = "0.2", optional = true } ++ ++[build-dependencies] ++version_check = "0.9" +diff --git a/gfx/qcms/build.rs b/gfx/qcms/build.rs +new file mode 100644 +--- /dev/null ++++ b/gfx/qcms/build.rs +@@ -0,0 +1,7 @@ ++extern crate version_check as rustc; ++ ++fn main() { ++ if rustc::is_min_version("1.78.0").unwrap_or(false) { ++ println!("cargo:rustc-cfg=stdsimd_split"); ++ } ++} +diff --git a/gfx/qcms/src/lib.rs b/gfx/qcms/src/lib.rs +--- a/gfx/qcms/src/lib.rs ++++ b/gfx/qcms/src/lib.rs +@@ -5,13 +5,15 @@ + #![allow(non_camel_case_types)] + #![allow(non_snake_case)] + #![allow(non_upper_case_globals)] + // These are needed for the neon SIMD code and can be removed once the MSRV supports the + // instrinsics we use +-#![cfg_attr(feature = "neon", feature(stdsimd))] ++#![cfg_attr(all(stdsimd_split, target_arch = "arm", feature = "neon"), feature(stdarch_arm_neon_intrinsics))] ++#![cfg_attr(all(stdsimd_split, target_arch = "arm", feature = "neon"), feature(stdarch_arm_feature_detection))] ++#![cfg_attr(all(not(stdsimd_split), target_arch = "arm", feature = "neon"), feature(stdsimd))] + #![cfg_attr( +- feature = "neon", ++ all(target_arch = "arm", feature = "neon"), + feature(arm_target_feature, raw_ref_op) + + )] + + /// These values match the Rendering Intent values from the ICC spec + diff --git a/user/zotero/zotero_drop-phantomjs.patch b/user/zotero/zotero_drop-phantomjs.patch index 1333cbe..7d54ebc 100644 --- a/user/zotero/zotero_drop-phantomjs.patch +++ b/user/zotero/zotero_drop-phantomjs.patch @@ -1,117 +1,8 @@ -diff --git a/zotero/reader/epubjs/epub.js/package.json.orig b/zotero/reader/epubjs/epub.js/package.json -index bb440ac..b4c5c32 100644 ---- a/zotero/reader/epubjs/epub.js/package.json.orig -+++ b/zotero/reader/epubjs/epub.js/package.json -@@ -41,7 +41,6 @@ - "karma-chrome-launcher": "^3.1.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", -- "karma-phantomjs-launcher": "^1.0.4", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", - "mocha": "^7.2.0", -diff --git a/zotero/reader/epubjs/epub.js/package-lock.json.orig b/zotero/reader/epubjs/epub.js/package-lock.json -index 6d728e7..c889b68 100644 ---- a/zotero/reader/epubjs/epub.js/package-lock.json.orig -+++ b/zotero/reader/epubjs/epub.js/package-lock.json -@@ -28,7 +28,6 @@ - "karma-chrome-launcher": "^3.1.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", -- "karma-phantomjs-launcher": "^1.0.4", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", - "mocha": "^7.2.0", -@@ -8855,16 +8854,6 @@ - "node": ">=4" - } - }, -- "node_modules/karma-phantomjs-launcher": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", -- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", -- "dev": true, -- "dependencies": { -- "lodash": "^4.0.1", -- "phantomjs-prebuilt": "^2.1.7" -- } -- }, - "node_modules/karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", -@@ -11342,26 +11331,6 @@ - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, -- "node_modules/phantomjs-prebuilt": { -- "version": "2.1.14", -- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", -- "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", -- "dev": true, -- "dependencies": { -- "es6-promise": "~4.0.3", -- "extract-zip": "~1.5.0", -- "fs-extra": "~1.0.0", -- "hasha": "~2.2.0", -- "kew": "~0.7.0", -- "progress": "~1.1.8", -- "request": "~2.79.0", -- "request-progress": "~2.0.1", -- "which": "~1.2.10" -- }, -- "bin": { -- "phantomjs": "bin/phantomjs" -- } -- }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", -@@ -22124,16 +22093,6 @@ - } - } - }, -- "karma-phantomjs-launcher": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", -- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", -- "dev": true, -- "requires": { -- "lodash": "^4.0.1", -- "phantomjs-prebuilt": "^2.1.7" -- } -- }, - "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", -@@ -23984,23 +23943,6 @@ - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, -- "phantomjs-prebuilt": { -- "version": "2.1.14", -- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", -- "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", -- "dev": true, -- "requires": { -- "es6-promise": "~4.0.3", -- "extract-zip": "~1.5.0", -- "fs-extra": "~1.0.0", -- "hasha": "~2.2.0", -- "kew": "~0.7.0", -- "progress": "~1.1.8", -- "request": "~2.79.0", -- "request-progress": "~2.0.1", -- "which": "~1.2.10" -- } -- }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", diff --git a/zotero/reader/package-lock.json.orig b/zotero/reader/package-lock.json -index 949e5de..0485ddd 100644 +index e3a638f..0800781 100644 --- a/zotero/reader/package-lock.json.orig +++ b/zotero/reader/package-lock.json -@@ -83,7 +83,6 @@ +@@ -84,7 +84,6 @@ "karma-chrome-launcher": "^3.1.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", @@ -119,7 +10,7 @@ index 949e5de..0485ddd 100644 "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^5.0.0", "mocha": "^7.2.0", -@@ -12332,20 +12331,6 @@ +@@ -12342,20 +12341,6 @@ "node": ">=4" } }, @@ -140,7 +31,7 @@ index 949e5de..0485ddd 100644 "node_modules/karma-sourcemap-loader": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", -@@ -15330,40 +15315,6 @@ +@@ -15340,40 +15325,6 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, @@ -181,7 +72,7 @@ index 949e5de..0485ddd 100644 "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", -@@ -27177,7 +27128,6 @@ +@@ -27192,7 +27143,6 @@ "karma-chrome-launcher": "^3.1.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", @@ -189,7 +80,7 @@ index 949e5de..0485ddd 100644 "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^5.0.0", "mocha": "^7.2.0", -@@ -30497,16 +30447,6 @@ +@@ -30512,16 +30462,6 @@ } } }, @@ -206,7 +97,7 @@ index 949e5de..0485ddd 100644 "karma-sourcemap-loader": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", -@@ -32672,34 +32612,6 @@ +@@ -32687,34 +32627,6 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, From 068b275bf0361a510ae35a99b640c5db804ff6aa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:31:21 -0400 Subject: [PATCH 339/738] user/gitlab-foss: enable build --- user/gitlab-foss/APKBUILD | 9 +++------ user/gitlab-foss/gitlab.rails.initd | 5 +++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 4b95adc..4dc5509 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -8,7 +8,7 @@ _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" url="https://gitlab.com/gitlab-org/gitlab-foss" -#arch="x86_64 aarch64" +arch="x86_64 aarch64" license="MIT" # ruby-irb is needed only for Rails console (gitlab-rails console) depends=" @@ -239,10 +239,7 @@ package() { "$datadir"/packages \ "$datadir"/pages \ "$datadir"/terraform_state \ - "$datadir"/uploads \ - "$pkgdir"/var/tmp/gitlab \ - "$pkgdir"/var/tmp/gitlab/downloads \ - "$pkgdir"/var/tmp/gitlab/backups + "$datadir"/uploads install -d -m0750 -o git -g www-data \ "$datadir"/pages @@ -386,7 +383,7 @@ d17ff841977d157965337774ac8ebed409e058bb1617d3fadeb8330d46efe32a091483ba30955c88 daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd -b6a6d9ba20557e61efa24f2d5a489873fefbb981f7d4465794a857b2971263c08ec29cc001c372522cdc0d48245e59751307c9f44f6ef4d87bf2e3ec5c23fb1c gitlab.rails.initd +d8cdeb54c46f8204936bf5750833649e4586d3dd1942eed45955ed1661ae5f5080f59184fcb59a8f73c1405faccbf02b3db3d2c12fc2a4a81424cd35ce390768 gitlab.rails.initd cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08dd943afb961df888c73af1334dcbe054dfd361e74f492fd86 gitlab.sidekiq.initd 85c4e257a030832bd70ad1e257ae7cb568b31e01201fc845abac02d00f02492ca694be1fa2bf743dd8c8623e6a79d36adee3f4de02040134c11158a6001c064b gitlab.workhorse.initd 4dc00b16462f30591297fcb535fc364185d3ed76e9956597f0423a8dfd8a9a351f6ac29d9f0c73052c11324fba4768eb89a21c6bef4da99f15baaea8c9ab8407 gitlab.confd diff --git a/user/gitlab-foss/gitlab.rails.initd b/user/gitlab-foss/gitlab.rails.initd index 051cbcd..4c824d9 100644 --- a/user/gitlab-foss/gitlab.rails.initd +++ b/user/gitlab-foss/gitlab.rails.initd @@ -77,6 +77,11 @@ start_pre() { if [ -n "$downloads_path" ]; then checkpath -d -m 700 -o $command_user -q "$downloads_path" fi + + checkpath --directory --owner $command_user --mode 0775 \ + /var/tmp/gitlab/downloads \ + /var/tmp/gitlab/backups + } reload() { From 34e075776305206b6112e4138f9726ec54e174da Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:32:29 -0400 Subject: [PATCH 340/738] user/mastodon: enable build --- user/mastodon/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index f7aa068..29f1f81 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -6,7 +6,7 @@ pkgver=4.2.8 _gittag=v$pkgver pkgrel=1 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" -#arch="x86_64" +arch="x86_64" url="https://github.com/mastodon/mastodon" license="AGPL-3.0-only" depends=" From 104708e9a671af850a7c516f05b4c4ec3e4c7889 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:35:01 -0400 Subject: [PATCH 341/738] user/firefly-iii: use php83 --- user/firefly-iii/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/firefly-iii/APKBUILD b/user/firefly-iii/APKBUILD index 0b61b8a..cc3f123 100644 --- a/user/firefly-iii/APKBUILD +++ b/user/firefly-iii/APKBUILD @@ -5,11 +5,11 @@ pkgname=firefly-iii pkgver=5.7.18 pkgrel=0 pkgdesc="PHP personal finances manager" -#arch="noarch" +arch="noarch" url="https://github.com/firefly-iii/firefly-iii" license="AGPL-3.0-only" options="!check" # No testsuite -_php=php82 +_php=php83 _php_mods="-intl -curl -bcmath -zip -gd -xml -mbstring -ldap -session -fileinfo -simplexml -sodium -tokenizer -xmlwriter -dom -pdo" depends="$_php ${_php_mods//-/$_php-}" makedepends="composer" From fddd91b20c4e6f1d990534fd47849694de394a7b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:35:53 -0400 Subject: [PATCH 342/738] unmaintained/firefly-iii-plaid-connector: move from user --- .../firefly-iii-plaid-connector/APKBUILD | 43 +++++++++---------- .../net6-support.patch | 0 user/firefly-iii-plaid-connector/APKBUILD | 29 ------------- 3 files changed, 20 insertions(+), 52 deletions(-) rename {user => unmaintained}/firefly-iii-plaid-connector/net6-support.patch (100%) delete mode 100644 user/firefly-iii-plaid-connector/APKBUILD diff --git a/unmaintained/firefly-iii-plaid-connector/APKBUILD b/unmaintained/firefly-iii-plaid-connector/APKBUILD index 66c3fea..13a222e 100644 --- a/unmaintained/firefly-iii-plaid-connector/APKBUILD +++ b/unmaintained/firefly-iii-plaid-connector/APKBUILD @@ -1,32 +1,29 @@ -# Maintainer: Antoine Martin +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) pkgname=firefly-iii-plaid-connector pkgver=0.3.1 -pkgrel=5 -pkgdesc='The Free Software Media System' -arch='i686 x86_64' -url='https://gitlab.com/GeorgeHahn/firefly-plaid-connector' -license='MIT' -options="!strip !check" -#depends='firefly-iii dotnet31-runtime' -makedepends='dotnet31-sdk' -source="firefly-plaid-connector-$pkgver.tar.gz::https://gitlab.com/GeorgeHahn/firefly-plaid-connector/-/archive/v${pkgver}/firefly-plaid-connector-v${pkgver}.tar.gz" -builddir="${srcdir}/firefly-plaid-connector-v${pkgver}" +pkgrel=7 +pkgdesc="The Free Software Media System" +#arch="x86_64" +url="https://gitlab.com/GeorgeHahn/firefly-plaid-connector" +license="MIT" +options="!check" +depends="firefly-iii dotnet6-runtime" +makedepends="dotnet6-sdk" +source="firefly-plaid-connector-$pkgver.tar.gz::https://gitlab.com/GeorgeHahn/firefly-plaid-connector/-/archive/v$pkgver/firefly-plaid-connector-v$pkgver.tar.gz net6-support.patch" +builddir="$srcdir/firefly-plaid-connector-v$pkgver" -build(){ - cd "${builddir}" - - # Disable dotnet telemetry - export DOTNET_CLI_TELEMETRY_OPTOUT=1 - - # publish app and libraries - dotnet publish --configuration Release --output "$PWD"/publish +build() { + dotnet publish --configuration Release --output ./publish --use-current-runtime --no-self-contained } package() { - mkdir -p "${pkgdir}"/var/lib - cp -r "${builddir}"/publish "$pkgdir"/var/lib/firefly-plaid-connector - + mkdir -p "$pkgdir"/usr/lib + cp -r "$builddir"/publish "$pkgdir"/usr/lib/firefly-plaid-connector } -sha512sums="57a64673bf2e8cae00cb215e1dc90eb02bddf50010835a9318f55f83313c00f19d6c8d8af65e2739b0fb6fd4522a2327941bdc7d11cbe59c9537ff6c1575765e firefly-plaid-connector-0.3.1.tar.gz" +sha512sums=" +57a64673bf2e8cae00cb215e1dc90eb02bddf50010835a9318f55f83313c00f19d6c8d8af65e2739b0fb6fd4522a2327941bdc7d11cbe59c9537ff6c1575765e firefly-plaid-connector-0.3.1.tar.gz +f795fe58659763082e3f2bba0e6e2a70c4732bc6b402a4e586104bf09525ffca1d3586acda43ccba3b71d15e1a0a62794574f72a2fc6cd3d1905dcb2e8782dc2 net6-support.patch +" diff --git a/user/firefly-iii-plaid-connector/net6-support.patch b/unmaintained/firefly-iii-plaid-connector/net6-support.patch similarity index 100% rename from user/firefly-iii-plaid-connector/net6-support.patch rename to unmaintained/firefly-iii-plaid-connector/net6-support.patch diff --git a/user/firefly-iii-plaid-connector/APKBUILD b/user/firefly-iii-plaid-connector/APKBUILD deleted file mode 100644 index 13a222e..0000000 --- a/user/firefly-iii-plaid-connector/APKBUILD +++ /dev/null @@ -1,29 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=firefly-iii-plaid-connector -pkgver=0.3.1 -pkgrel=7 -pkgdesc="The Free Software Media System" -#arch="x86_64" -url="https://gitlab.com/GeorgeHahn/firefly-plaid-connector" -license="MIT" -options="!check" -depends="firefly-iii dotnet6-runtime" -makedepends="dotnet6-sdk" -source="firefly-plaid-connector-$pkgver.tar.gz::https://gitlab.com/GeorgeHahn/firefly-plaid-connector/-/archive/v$pkgver/firefly-plaid-connector-v$pkgver.tar.gz net6-support.patch" -builddir="$srcdir/firefly-plaid-connector-v$pkgver" - -build() { - dotnet publish --configuration Release --output ./publish --use-current-runtime --no-self-contained -} - -package() { - mkdir -p "$pkgdir"/usr/lib - cp -r "$builddir"/publish "$pkgdir"/usr/lib/firefly-plaid-connector -} - -sha512sums=" -57a64673bf2e8cae00cb215e1dc90eb02bddf50010835a9318f55f83313c00f19d6c8d8af65e2739b0fb6fd4522a2327941bdc7d11cbe59c9537ff6c1575765e firefly-plaid-connector-0.3.1.tar.gz -f795fe58659763082e3f2bba0e6e2a70c4732bc6b402a4e586104bf09525ffca1d3586acda43ccba3b71d15e1a0a62794574f72a2fc6cd3d1905dcb2e8782dc2 net6-support.patch -" From e9d494a147e4fb71e731de14dc1a39fc0a31565c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:33:50 -0400 Subject: [PATCH 343/738] user/peertube: enable build --- user/peertube/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/peertube/APKBUILD b/user/peertube/APKBUILD index 68affc9..f50d1c1 100644 --- a/user/peertube/APKBUILD +++ b/user/peertube/APKBUILD @@ -4,7 +4,7 @@ pkgname=peertube pkgver=6.0.2 pkgrel=0 pkgdesc="ActivityPub-federated video streaming platform using P2P directly in your web browser" -#arch="x86_64" +arch="x86_64" url="https://joinpeertube.org/" license="AGPL" depends=" From c9d0bd0b1e7b086dfe5404649e8c24fdbd936016 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 3 Jun 2024 10:26:59 -0400 Subject: [PATCH 344/738] backports/signal-desktop: upgrade to 7.11.0 --- backports/signal-desktop/APKBUILD | 23 +++++++------- .../ringrtc-webrtc-renamed.patch | 30 +++++++++++-------- .../signal-fix-dns-fallback.patch | 12 ++++++++ 3 files changed, 41 insertions(+), 24 deletions(-) create mode 100644 backports/signal-desktop/signal-fix-dns-fallback.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 9a512bb..b804d51 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,13 +1,12 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.9.0 +pkgver=7.11.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron -# build failure -#arch="aarch64 x86_64" +arch="aarch64 x86_64" license="AGPL-3.0-only" depends=" electron @@ -64,14 +63,14 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.45.0 +_libsignalver=0.46.2 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.41.0 +_ringrtcver=2.42.0 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6261g +_webrtcver=6261i # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.7.1 @@ -89,6 +88,7 @@ source=" signal-disable-updates.patch signal-update-links.patch signal-show-window-please.patch + signal-fix-dns-fallback.patch ringrtc-webrtc-renamed.patch webrtc-shared-like-my-wife.patch webrtc-compiler.patch @@ -472,17 +472,18 @@ package() { } sha512sums=" -53ef9feccdbe1c52eee88d2e2ed337746dcaf0fd18ee0d462ba3faaef02b38e9ba7269857e975f241c719d6750ce01fc42b0d90bbd9ef7bbee14b9b4540adbb8 Signal-Desktop-7.9.0.tar.gz -70f2cb7d05e019235cd044c401bcf072a934fdfea4a161ef5be988d2e3932ba5233110b4b06525e6f33ea9cad036def442e70adad15eab883903d9246969896e libsignal-0.45.0.tar.gz -3adccc33d4efa29e003175d0e00cceb169426a73f467ea32406e9cd721c72aeaa45a7816985e484b8adceb2de2a6405f306f6d609b43a25c950b18dd49a14476 ringrtc-2.41.0.tar.gz -6dc8c709986816e724a57d056a165cf72db70644593e8de8e3026e511d1f8f3d6d5e171d500cfabe760309c5a81795b667b4399c9885be30163d326cbc82c1b4 webrtc-6261g.tar.zst +cebb1c8412089fe6f5faa9d4bfcb8bb4e8c9d2f3e4a13eef15e8f36d97b4bc65eae3c0865af0a7c82a0af2fd0597482b3d7c1f25e7d51465ea2589c817183b19 Signal-Desktop-7.11.0.tar.gz +6be40fcfbcb9bd20c51dd9ef1c65e7f586fbbee04af66af89a5b8c0ce3fa2ce5efd586e10de1d6d5c579126ed4bb2f31e50a8448ed5390d12e226cd075537007 libsignal-0.46.2.tar.gz +5cb7e88e8c04244a8f4727237dd0662357eb84dfb384de57c6579f01f0c53944d019a2af29efe37c4d30993fdba4be6f9bd9f7975ac24e43207fe814e0b95f95 ringrtc-2.42.0.tar.gz +89796d611bd7cda7c0e98318826753b1acc373396d77f2a0a826bf95e9e28d2c0f33181705b50b1afc52fdf12dbf3d35e30ad86b0ce3052ed9131ea20c842d04 webrtc-6261i.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 92de6fc7cc5f2b6d65bedbd74cc733dd86dafc9cbfb9b727c3267aef63a71a07247cde9b163c68fddfeb9096dcd7f554d36d0b2de078d8905e3825645ddbd6eb libsignal-auditable.patch 152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch 646d303fe58cae3f0896ae0275a66695b902fae6ddde7c568cc9798157dee9f45ceff907bc951fadc4c511d512a73d114b4e4f7c8914e2311c63929d29e1621a signal-show-window-please.patch -ab51b8fdcda1d8811213d2c5d8cb5d8457b478a02e23ce40f36b38ec56d45a3bd7a2d184720c27046f98a27771551cfad93c1290fe93856cc02695d318b33e47 ringrtc-webrtc-renamed.patch +3df878d259cdc12fe116651e9978deb6c15b5bce477d692b2301f17bc660327b29ac4412cfd6966bd0cef15c90675c56ce7c3abd8e2119899cc5d281ab1d9474 signal-fix-dns-fallback.patch +b11fdd930943ca327650e4738ed85cd6b5eea779455a5895bccebba98e449bafc6b0f09bcf4545f2b2e16644355664e9768dd6d4d62f87619207c430367f72c5 ringrtc-webrtc-renamed.patch 9d92389637cdda83a0a7039fa6c52516d7bc491d0b1e42d5374b9d1f4fa7b9c930642f2dca896da17a2dc3344fa1bb97434c8dddd0539a4fedfd0dec809fc875 webrtc-shared-like-my-wife.patch e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch 88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch diff --git a/backports/signal-desktop/ringrtc-webrtc-renamed.patch b/backports/signal-desktop/ringrtc-webrtc-renamed.patch index 2d2a61a..228c308 100644 --- a/backports/signal-desktop/ringrtc-webrtc-renamed.patch +++ b/backports/signal-desktop/ringrtc-webrtc-renamed.patch @@ -1,19 +1,23 @@ --- ./src/rust/build.rs.orig +++ ./src/rust/build.rs -@@ -41,15 +41,15 @@ - if cfg!(feature = "native") { - if let Ok(out_dir) = out_dir { - println!( -- "cargo:rustc-link-search=native={}/{}/obj/", -+ "cargo:rustc-link-search=native={}/{}/", - out_dir, build_type, - ); -- println!("cargo:rerun-if-changed={}/{}/obj/", out_dir, build_type,); -+ println!("cargo:rerun-if-changed={}/{}/", out_dir, build_type,); - } else { - println!("cargo:warning=No WebRTC output directory (OUTPUT_DIR) defined!"); - } +@@ -79,6 +79,7 @@ + if cfg!(feature = "native") { + let webrtc_dir = if cfg!(feature = "prebuilt_webrtc") { ++ panic!("trying to download prebuild webrtc"); + if let Err(e) = fs::create_dir_all(&out_dir) { + panic!("Failed to create webrtc out directory: {:?}", e); + } +@@ -86,12 +87,12 @@ + // Ignore build type since we only have release prebuilts + format!("{}/release/obj/", out_dir) + } else { +- format!("{}/{}/obj", out_dir, build_type) ++ format!("{}/{}", out_dir, build_type) + }; + println!("cargo:rerun-if-changed={}", webrtc_dir); + println!("cargo:rerun-if-changed={}", config_dir()); + println!("cargo:rustc-link-search=native={}", webrtc_dir); - println!("cargo:rustc-link-lib=webrtc"); + println!("cargo:rustc-link-lib=dylib=signaldeswebrtc"); diff --git a/backports/signal-desktop/signal-fix-dns-fallback.patch b/backports/signal-desktop/signal-fix-dns-fallback.patch new file mode 100644 index 0000000..b4f54be --- /dev/null +++ b/backports/signal-desktop/signal-fix-dns-fallback.patch @@ -0,0 +1,12 @@ +diff --git a/ts/scripts/generate-dns-fallback.ts.orig b/ts/scripts/generate-dns-fallback.ts +index dec7023..39f442f 100644 +--- a/ts/scripts/generate-dns-fallback.ts.orig ++++ b/ts/scripts/generate-dns-fallback.ts +@@ -20,7 +20,6 @@ const FALLBACK_DOMAINS = [ + 'cdn3.signal.org', + 'updates2.signal.org', + 'sfu.voip.signal.org', +- 'create.signal.art', + ]; + + async function main() { From d3888ec0a30223f6541639d45330a78fd8e408ee Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 4 Jun 2024 13:31:31 -0400 Subject: [PATCH 345/738] user/zotero: add missing git info --- user/zotero/APKBUILD | 2 ++ 1 file changed, 2 insertions(+) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 2dca9e0..fcca8c0 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -159,6 +159,8 @@ prepare() { # zotero build expects to be in a git repo git init + git config user.name info + git config user.email info@example.org git commit --allow-empty -m 'Initial' npm i --legacy-peer-deps From 8ac74918a3f0c256eead59cadc6531c64c5a3407 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 7 Jun 2024 14:11:00 -0400 Subject: [PATCH 346/738] user/gitlab-foss: upgrade to 16.9.8 --- user/gitlab-foss/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 4dc5509..9d13bd8 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.9.3 +pkgver=16.9.8 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -18,7 +18,7 @@ depends=" exiftool git>=2.42.0 gitaly~=16.9 - gitlab-shell~=14.34 + gitlab-shell>=14.34 graphicsmagick http-parser procps @@ -379,7 +379,7 @@ assets() { } sha512sums=" -d17ff841977d157965337774ac8ebed409e058bb1617d3fadeb8330d46efe32a091483ba30955c883e654b138d9a3ae7740a528418cd30eb1ed18cced508ddb8 gitlab-foss-v16.9.3.tar.gz +95120e8bdd2245b54b1c520b3d32b72747cffadede3bcd9eb43d2de68887ac4b96581ce14a647f2c380fd41878d8b1d2a999c0412db50b75d94b4965195f064b gitlab-foss-v16.9.8.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From ab3231afda395e585172af9eaf0d2129a1212e07 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 7 Jun 2024 14:11:36 -0400 Subject: [PATCH 347/738] user/gitlab-shell: upgrade to 14.35.0 --- user/gitlab-shell/APKBUILD | 6 +++--- user/gitlab-shell/config.patch | 6 ++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD index 544bd55..b370c2c 100644 --- a/user/gitlab-shell/APKBUILD +++ b/user/gitlab-shell/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-shell -pkgver=14.34.0 +pkgver=14.35.0 pkgrel=0 pkgdesc="GitLab Shell handles git SSH sessions for GitLab" url="https://gitlab.com/gitlab-org/gitlab-shell" @@ -59,8 +59,8 @@ package() { } sha512sums=" -703685c8aae6498ad42103a70a65e18b4d2a617687a5488a52bf4c8147cd56a724a109ea27456ca93a723b458499ab09590ad5d1591eb5d3c38d8d33870736eb gitlab-shell-v14.34.0.tar.gz -5123f639de976b83a961f5d0a9f53b0ff7559ceb4e73b25a8029423932ba6249c430b8bb04dae4dce2e13330e95d4a7a88e63376ead2d6369f6adb264fd36d49 config.patch +eec1020dfa579dfec61ce3fbaea7c98a415be257595b7894a980b9d9157e225d74e6fe5ca768938eb25a1d88992e8806bb475f7e5adffb8dbffa0f01256d1fc1 gitlab-shell-v14.35.0.tar.gz +e9dd69c57c65197493f75bdde682075c6ab22892ed07d37c7a73129fb42a8349a676d5986bfd17f1df331645334248383845f21ce08d1e9664c38e4bbf5343ba config.patch 499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig " diff --git a/user/gitlab-shell/config.patch b/user/gitlab-shell/config.patch index 27d6771..6dabe44 100644 --- a/user/gitlab-shell/config.patch +++ b/user/gitlab-shell/config.patch @@ -1,5 +1,5 @@ diff --git a/config.yml.example.orig b/config.yml.example -index 13850e6..98eb0e3 100644 +index fb147c4..98eb0e3 100644 --- a/config.yml.example.orig +++ b/config.yml.example @@ -13,7 +13,7 @@ user: git @@ -47,7 +47,7 @@ index 13850e6..98eb0e3 100644 # Audit usernames. # Set to true to see real usernames in the logs instead of key ids, which is easier to follow, but -@@ -62,60 +62,6 @@ audit_usernames: false +@@ -62,62 +62,6 @@ audit_usernames: false # For more details, visit https://docs.gitlab.com/ee/development/distributed_tracing.html # gitlab_tracing: opentracing://driver @@ -87,6 +87,8 @@ index 13850e6..98eb0e3 100644 - kex_algorithms: [curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1] - # Specified the ciphers allowed - ciphers: [aes128-gcm@openssh.com, chacha20-poly1305@openssh.com, aes256-gcm@openssh.com, aes128-ctr, aes192-ctr,aes256-ctr] +- # Specified the available Public Key algorithms +- public_key_algorithms: [ssh-rsa, ssh-dss, ecdsa-sha2-nistp256, sk-ecdsa-sha2-nistp256@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519, sk-ssh-ed25519@openssh.com, rsa-sha2-256, rsa-sha2-512] - # SSH host key files. - host_key_files: - - /run/secrets/ssh-hostkeys/ssh_host_rsa_key From 29d690fe5219e7f00537be43a97101f155788239 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 7 Jun 2024 14:12:32 -0400 Subject: [PATCH 348/738] user/gitaly: upgrade to 16.9.8 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 3a56350..3d17edb 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.9.3 +pkgver=16.9.8 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -c3784b7fb692d2e57a484b3a33b719de76d3ee8bfabc95919e7dabd89f5429f06000c615e433c99f18c1a6706ecd389dcf15d55a59ed546f62c10b585e20ad7b gitaly-v16.9.3.tar.gz +f3a7c7e2e5d96d5238bad16f9d0d79a8819b15be5228bb3a7fc8c796488eb7a7914355a4d6ec1ae0b0fa971d3299068735816518005f62dacc6211b59bdc58f7 gitaly-v16.9.8.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From ae8c40104c7209d053970bb35727de05f00012e1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 7 Jun 2024 14:12:52 -0400 Subject: [PATCH 349/738] user/gitlab-pages: upgrade to 16.9.8 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index ec35745..18e54c9 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.9.3 +pkgver=16.9.8 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -5a97176d820f787b96cac54dc040a0232c6b0e8a98f7e737af2f5c9a0cff10ce79263a35fdf560c58eb84eaaf1ed109a75121b050f059b4bdf493d05b58861bc gitlab-pages-v16.9.3.tar.gz +aeef1c9c226238f5846080c5bbd3d2481f6cb5741ce80fc39ba98669f24959c7142fa491a7c65239d61084f8d7c0feba384a99d17f6c60b5b1a7aee9db1c41e9 gitlab-pages-v16.9.8.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 849cc1d7b32f62a87a52f70b60aed0c590322a11 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 7 Jun 2024 17:02:25 -0400 Subject: [PATCH 350/738] user/mastodon: upgrade to 4.2.9 --- user/mastodon/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 29f1f81..03c8960 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.8 +pkgver=4.2.9 _gittag=v$pkgver pkgrel=1 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" @@ -192,7 +192,7 @@ assets() { } sha512sums=" -c48a04df9c59518f7325b8119bf943436e29ccbfaecff3f7b96162e77fa2012df3f5d4e92e209e233ca7c4646205f5e34bf5f7d22b973115b8e16b3b5ada1fb0 mastodon-v4.2.8.tar.gz +a90d7e68c1c0dd493119a1347f7093c466bc08c26d24fbee0dbf88735938bd79f5a6ba1dc0cc972cae08748a258a54b7bf9185f60f6e4c3ccc47bc484c609dc9 mastodon-v4.2.9.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From d87a333de80bb0057a1d86e6e4e5d15a46e46b3c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 10 Jun 2024 09:34:33 -0400 Subject: [PATCH 351/738] user/py3-django-tenants: new aports --- .../997_update-from-pgclone-schema.patch | 3823 +++++++++++++++++ user/py3-django-tenants/APKBUILD | 43 + 2 files changed, 3866 insertions(+) create mode 100644 user/py3-django-tenants/997_update-from-pgclone-schema.patch create mode 100644 user/py3-django-tenants/APKBUILD diff --git a/user/py3-django-tenants/997_update-from-pgclone-schema.patch b/user/py3-django-tenants/997_update-from-pgclone-schema.patch new file mode 100644 index 0000000..b2999d2 --- /dev/null +++ b/user/py3-django-tenants/997_update-from-pgclone-schema.patch @@ -0,0 +1,3823 @@ +From 07e14a3442d080bd4e873dc74e441296b8291ae2 Mon Sep 17 00:00:00 2001 +From: Marc 'risson' Schmitt +Date: Thu, 16 Nov 2023 13:26:16 +0100 +Subject: [PATCH 1/3] clone: update from pg-clone-schema + +Signed-off-by: Marc 'risson' Schmitt +--- + django_tenants/clone.py | 3407 ++++++++++++++++++++++++++++++++++----- + 1 file changed, 2977 insertions(+), 430 deletions(-) + +diff --git a/django_tenants/clone.py b/django_tenants/clone.py +index 426e81b8..3afce109 100644 +--- a/django_tenants/clone.py ++++ b/django_tenants/clone.py +@@ -6,24 +6,592 @@ + from django_tenants.utils import schema_exists + + CLONE_SCHEMA_FUNCTION = r""" +--- https://github.com/denishpatel/pg-clone-schema/ rev 0d3b522 ++-- https://github.com/denishpatel/pg-clone-schema/ rev 073922e + -- https://github.com/tomturner/django-tenants/issues/322 + +--- Function: clone_schema(text, text, boolean, boolean) ++do $$ ++<> ++DECLARE ++ cnt int; ++BEGIN ++ DROP TYPE IF EXISTS public.cloneparms CASCADE; ++ CREATE TYPE public.cloneparms AS ENUM ('DATA', 'NODATA','DDLONLY','NOOWNER','NOACL','VERBOSE','DEBUG','FILECOPY'); ++ -- END IF; ++end first_block $$; ++ ++ ++-- select * from public.get_insert_stmt_ddl('clone1','sample','address'); ++CREATE OR REPLACE FUNCTION public.get_insert_stmt_ddl( ++ source_schema text, ++ target_schema text, ++ atable text, ++ bTextCast boolean default False ++) ++RETURNS text ++LANGUAGE plpgsql VOLATILE ++AS ++$$ ++ DECLARE ++ -- the ddl we're building ++ v_insert_ddl text := ''; ++ v_cols text := ''; ++ v_cols_sel text := ''; ++ v_cnt int := 0; ++ v_colrec record; ++ v_schema text; ++ BEGIN ++ FOR v_colrec IN ++ SELECT c.column_name, c.data_type, c.udt_name, c.udt_schema, c.character_maximum_length, c.is_nullable, c.column_default, c.numeric_precision, c.numeric_scale, c.is_identity, c.identity_generation, c.is_generated ++ FROM information_schema.columns c WHERE (table_schema, table_name) = (source_schema, atable) ORDER BY ordinal_position ++ LOOP ++ IF v_colrec.udt_schema = 'public' THEN ++ v_schema = 'public'; ++ ELSE ++ v_schema = target_schema; ++ END IF; ++ ++ v_cnt = v_cnt + 1; ++ IF v_colrec.is_identity = 'YES' OR v_colrec.is_generated = 'ALWAYS' THEN ++ -- skip ++ continue; ++ END IF; ++ ++ IF v_colrec.data_type = 'USER-DEFINED' THEN ++ IF v_cols = '' THEN ++ v_cols = v_colrec.column_name; ++ IF bTextCast THEN ++ -- v_cols_sel = v_colrec.column_name || '::text::' || v_schema || '.' || v_colrec.udt_name; ++ IF v_schema = 'public' THEN ++ v_cols_sel = v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; ++ ELSE ++ v_cols_sel = v_colrec.column_name || '::text::' || v_colrec.udt_name; ++ END IF; ++ ELSE ++ v_cols_sel = v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; ++ END IF; ++ ELSE ++ v_cols = v_cols || ', ' || v_colrec.column_name; ++ IF bTextCast THEN ++ -- v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::text::' || v_schema || '.' || v_colrec.udt_name; ++ IF v_schema = 'public' THEN ++ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; ++ ELSE ++ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::text::' || v_colrec.udt_name; ++ END IF; ++ ELSE ++ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; ++ END IF; ++ END IF; ++ ELSE ++ IF v_cols = '' THEN ++ v_cols = v_colrec.column_name; ++ v_cols_sel = v_colrec.column_name; ++ ELSE ++ v_cols = v_cols || ', ' || v_colrec.column_name; ++ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name; ++ END IF; ++ END IF; ++ END LOOP; ++ ++ -- put it all together and return the insert statement ++ -- INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address; ++ v_insert_ddl = 'INSERT INTO ' || target_schema || '.' || atable || ' (' || v_cols || ') ' || 'SELECT ' || v_cols_sel || ' FROM ' || source_schema || '.' || atable || ';'; ++ RETURN v_insert_ddl; ++ END; ++$$; ++ ++ ++CREATE OR REPLACE FUNCTION public.get_table_ddl_complex( ++ src_schema text, ++ dst_schema text, ++ in_table text, ++ sq_server_version_num integer ++) ++RETURNS text ++LANGUAGE plpgsql VOLATILE ++AS ++$$ ++ DECLARE ++ v_table_ddl text; ++ v_buffer1 text; ++ v_buffer2 text; ++ ++ BEGIN ++ IF sq_server_version_num < 110000 THEN ++ SELECT 'CREATE TABLE ' ++ || quote_ident(dst_schema) ++ || '.' ++ || pc.relname ++ || E'(\n' ++ || string_agg( ++ pa.attname ++ || ' ' ++ || pg_catalog.format_type(pa.atttypid, pa.atttypmod) ++ || coalesce( ++ ' DEFAULT ' ++ || ( ++ SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid) ++ FROM pg_catalog.pg_attrdef d ++ WHERE d.adrelid = pa.attrelid ++ AND d.adnum = pa.attnum ++ AND pa.atthasdef ++ ), ++ '' ++ ) ++ || ' ' ++ || CASE pa.attnotnull ++ WHEN TRUE THEN 'NOT NULL' ++ ELSE 'NULL' ++ END, ++ E',\n' ++ ) ++ || coalesce( ++ ( ++ SELECT ++ E',\n' ++ || string_agg( ++ 'CONSTRAINT ' ++ || pc1.conname ++ || ' ' ++ || pg_get_constraintdef(pc1.oid), ++ E',\n' ++ ORDER BY pc1.conindid ++ ) ++ FROM pg_constraint pc1 ++ --Issue#103: do not return FKEYS for partitions since we assume it is implied by the one done on the parent table, otherwise error for trying to define it again. ++ WHERE pc1.conrelid = pa.attrelid ++ ), ++ '' ++ ) ++ INTO v_buffer1 ++ FROM pg_catalog.pg_attribute pa ++ JOIN pg_catalog.pg_class pc ON pc.oid = pa.attrelid ++ AND pc.relname = quote_ident(in_table) ++ JOIN pg_catalog.pg_namespace pn ON pn.oid = pc.relnamespace ++ AND pn.nspname = quote_ident(src_schema) ++ WHERE pa.attnum > 0 ++ AND NOT pa.attisdropped ++ GROUP BY pn.nspname, pc.relname, pa.attrelid; ++ ++ ELSE ++ SELECT 'CREATE TABLE ' ++ || quote_ident(dst_schema) ++ || '.' ++ || pc.relname ++ || E'(\n' ++ || string_agg( ++ pa.attname ++ || ' ' ++ || pg_catalog.format_type(pa.atttypid, pa.atttypmod) ++ || coalesce( ++ ' DEFAULT ' ++ || ( ++ SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid) ++ FROM pg_catalog.pg_attrdef d ++ WHERE d.adrelid = pa.attrelid ++ AND d.adnum = pa.attnum ++ AND pa.atthasdef ++ ), ++ '' ++ ) ++ || ' ' ++ || CASE pa.attnotnull ++ WHEN TRUE THEN 'NOT NULL' ++ ELSE 'NULL' ++ END, ++ E',\n' ++ ) ++ || coalesce( ++ ( ++ SELECT ++ E',\n' ++ || string_agg( ++ 'CONSTRAINT ' ++ || pc1.conname ++ || ' ' ++ || pg_get_constraintdef(pc1.oid), ++ E',\n' ++ ORDER BY pc1.conindid ++ ) ++ FROM pg_constraint pc1 ++ --Issue#103: do not return FKEYS for partitions since we assume it is implied by the one done on the parent table, otherwise error for trying to define it again. ++ WHERE pc1.conrelid = pa.attrelid AND pc1.conparentid = 0 ++ ), ++ '' ++ ) ++ INTO v_buffer1 ++ FROM pg_catalog.pg_attribute pa ++ JOIN pg_catalog.pg_class pc ON pc.oid = pa.attrelid ++ AND pc.relname = quote_ident(in_table) ++ JOIN pg_catalog.pg_namespace pn ON pn.oid = pc.relnamespace ++ AND pn.nspname = quote_ident(src_schema) ++ WHERE pa.attnum > 0 ++ AND NOT pa.attisdropped ++ GROUP BY pn.nspname, pc.relname, pa.attrelid; ++ END IF; ++ ++ -- append partition keyword to it ++ SELECT pg_catalog.pg_get_partkeydef(c.oid::pg_catalog.oid) into v_buffer2 ++ FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ++ WHERE c.relname = quote_ident(in_table) COLLATE pg_catalog.default AND n.nspname = quote_ident(src_schema) COLLATE pg_catalog.default; ++ ++ v_table_ddl := v_buffer1 || ') PARTITION BY ' || v_buffer2 || ';'; ++ ++ RETURN v_table_ddl; ++ END; ++$$; ++ ++ ++-- SELECT * FROM public.get_table_ddl('sample', 'address', True); ++CREATE OR REPLACE FUNCTION public.get_table_ddl( ++ in_schema varchar, ++ in_table varchar, ++ bfkeys boolean ++) ++RETURNS text ++LANGUAGE plpgsql VOLATILE ++AS ++$$ ++ DECLARE ++ -- the ddl we're building ++ v_table_ddl text; ++ ++ -- data about the target table ++ v_table_oid int; ++ ++ -- records for looping ++ v_colrec record; ++ v_constraintrec record; ++ v_indexrec record; ++ v_primary boolean := False; ++ v_constraint_name text; ++ v_src_path_old text := ''; ++ v_src_path_new text := ''; ++ v_dummy text; ++ v_partbound text; ++ v_pgversion int; ++ v_parent text := ''; ++ v_relopts text := ''; ++ v_tablespace text; ++ v_partition_key text := ''; ++ v_temp text; ++ bPartitioned bool := False; ++ bInheritance bool := False; ++ bRelispartition bool; ++ constraintarr text[] := '{{}}'; ++ constraintelement text; ++ bSkip boolean; ++ ++ BEGIN ++ SELECT c.oid, ( ++ SELECT setting ++ FROM pg_settings ++ WHERE name = 'server_version_num') INTO v_table_oid, v_pgversion ++ FROM pg_catalog.pg_class c ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ++ WHERE c.relkind IN ('r', 'p') ++ AND c.relname = in_table ++ AND n.nspname = in_schema; ++ IF (v_table_oid IS NULL) THEN ++ RAISE EXCEPTION 'table does not exist'; ++ END IF; ++ ++ -- get user-defined tablespaces if applicable ++ SELECT TABLESPACE INTO v_temp ++ FROM pg_tables ++ WHERE schemaname = in_schema ++ AND tablename = in_table ++ AND TABLESPACE IS NOT NULL; ++ -- Issue#99 Fix: simple coding error! ++ -- IF v_tablespace IS NULL THEN ++ IF v_temp IS NULL THEN ++ v_tablespace := 'TABLESPACE pg_default'; ++ ELSE ++ v_tablespace := 'TABLESPACE ' || v_temp; ++ END IF; ++ -- also see if there are any SET commands for this table, ie, autovacuum_enabled=off, fillfactor=70 ++ WITH relopts AS ( ++ SELECT unnest(c.reloptions) relopts ++ FROM pg_class c, pg_namespace n ++ WHERE n.nspname = in_schema ++ AND n.oid = c.relnamespace ++ AND c.relname = in_table ++ ) ++ SELECT string_agg(r.relopts, ', ') AS relopts INTO v_temp ++ FROM relopts r; ++ IF v_temp IS NULL THEN ++ v_relopts := ''; ++ ELSE ++ v_relopts := ' WITH (' || v_temp || ')'; ++ END IF; ++ ++ -- Issue#61 FIX: set search_path = public before we do anything to force explicit schema qualification but dont forget to set it back before exiting... ++ SELECT setting INTO v_src_path_old FROM pg_settings WHERE name = 'search_path'; ++ ++ SELECT REPLACE(REPLACE(setting, '"$user"', '$user'), '$user', '"$user"') INTO v_src_path_old ++ FROM pg_settings ++ WHERE name = 'search_path'; ++ -- RAISE INFO 'DEBUG tableddl: saving old search_path: ***%***', v_src_path_old; ++ EXECUTE 'SET search_path = "public"'; ++ SELECT setting INTO v_src_path_new FROM pg_settings WHERE name = 'search_path'; ++ ++ -- grab the oid of the table; https://www.postgresql.org/docs/8.3/catalog-pg-class.html ++ SELECT c.oid INTO v_table_oid ++ FROM pg_catalog.pg_class c ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ++ WHERE 1 = 1 ++ AND c.relkind = 'r' ++ AND c.relname = in_table ++ AND n.nspname = in_schema; ++ ++ IF (v_table_oid IS NULL) THEN ++ -- Dont give up yet. It might be a partitioned table ++ SELECT c.oid INTO v_table_oid ++ FROM pg_catalog.pg_class c ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ++ WHERE 1 = 1 ++ AND c.relkind = 'p' ++ AND c.relname = in_table ++ AND n.nspname = in_schema; ++ ++ IF (v_table_oid IS NULL) THEN ++ RAISE EXCEPTION 'table does not exist'; ++ END IF; ++ bPartitioned := True; ++ END IF; ++ IF v_pgversion < 100000 THEN ++ SELECT c2.relname parent INTO v_parent ++ FROM pg_class c1, pg_namespace n, pg_inherits i, pg_class c2 ++ WHERE n.nspname = in_schema ++ AND n.oid = c1.relnamespace ++ AND c1.relname = in_table ++ AND c1.oid = i.inhrelid ++ AND i.inhparent = c2.oid ++ AND c1.relkind = 'r'; ++ ++ IF (v_parent IS NOT NULL) THEN ++ bPartitioned := True; ++ bInheritance := True; ++ END IF; ++ ELSE ++ SELECT c2.relname parent, c1.relispartition, pg_get_expr(c1.relpartbound, c1.oid, TRUE) INTO v_parent, bRelispartition, v_partbound ++ FROM pg_class c1, pg_namespace n, pg_inherits i, pg_class c2 ++ WHERE n.nspname = in_schema ++ AND n.oid = c1.relnamespace ++ AND c1.relname = in_table ++ AND c1.oid = i.inhrelid ++ AND i.inhparent = c2.oid ++ AND c1.relkind = 'r'; ++ ++ IF (v_parent IS NOT NULL) THEN ++ bPartitioned := True; ++ IF bRelispartition THEN ++ bInheritance := False; ++ ELSE ++ bInheritance := True; ++ END IF; ++ END IF; ++ END IF; ++ -- RAISE NOTICE 'version=% schema=% parent=% relopts=% tablespace=% partitioned=% inherited=% relispartition=%',v_pgversion, in_schema, v_parent, v_relopts, v_tablespace, bPartitioned, bInheritance, bRelispartition; ++ ++ -- start the create definition ++ v_table_ddl := 'CREATE TABLE ' || in_schema || '.' || in_table || ' (' || E'\n'; ++ ++ -- define all of the columns in the table; https://stackoverflow.com/a/8153081/3068233 ++ FOR v_colrec IN ++ SELECT c.column_name, c.data_type, c.udt_name, c.udt_schema, c.character_maximum_length, c.is_nullable, c.column_default, c.numeric_precision, c.numeric_scale, c.is_identity, c.identity_generation ++ FROM information_schema.columns c ++ WHERE (table_schema, table_name) = (in_schema, in_table) ++ ORDER BY ordinal_position ++ LOOP ++ v_table_ddl := v_table_ddl || ' ' -- note: two char spacer to start, to indent the column ++ || v_colrec.column_name || ' ' ++ -- FIX #82, FIX #100 as well by adding 'citext' to the list ++ -- FIX #105 by overriding the previous fixes (#82, #100), which presumed "public" was always the schema for extensions. It could be a custom schema. ++ -- so assume udt_schema for all USER-DEFINED datatypes ++ -- || CASE WHEN v_colrec.udt_name in ('geometry', 'box2d', 'box2df', 'box3d', 'geography', 'geometry_dump', 'gidx', 'spheroid', 'valid_detail','citext') ++ -- THEN v_colrec.udt_name ++ || CASE WHEN v_colrec.data_type = 'USER-DEFINED' ++ -- THEN in_schema || '.' || v_colrec.udt_name ELSE v_colrec.data_type END ++ THEN v_colrec.udt_schema || '.' || v_colrec.udt_name ELSE v_colrec.data_type END ++ || CASE WHEN v_colrec.is_identity = 'YES' ++ THEN ++ CASE WHEN v_colrec.identity_generation = 'ALWAYS' ++ THEN ' GENERATED ALWAYS AS IDENTITY' ELSE ' GENERATED BY DEFAULT AS IDENTITY' END ELSE '' END ++ || CASE WHEN v_colrec.character_maximum_length IS NOT NULL ++ THEN ('(' || v_colrec.character_maximum_length || ')') ++ WHEN v_colrec.numeric_precision > 0 AND v_colrec.numeric_scale > 0 ++ THEN '(' || v_colrec.numeric_precision || ',' || v_colrec.numeric_scale || ')' ++ ELSE '' END || ' ' ++ || CASE WHEN v_colrec.is_nullable = 'NO' ++ THEN 'NOT NULL' ELSE 'NULL' END ++ || CASE WHEN v_colrec.column_default IS NOT null ++ THEN (' DEFAULT ' || v_colrec.column_default) ELSE '' END ++ || ',' || E'\n'; ++ END LOOP; ++ -- define all the constraints in the; https://www.postgresql.org/docs/9.1/catalog-pg-constraint.html && https://dba.stackexchange.com/a/214877/75296 ++ -- Issue#103: do not get foreign keys for partitions since they are defined on the parent and this will cause an "already exists" error otherwise ++ -- Also conparentid is not in V10, so bypass since we do not have FKEYS in partitioned tables in V10 ++ IF v_pgversion < 110000 THEN ++ FOR v_constraintrec IN ++ SELECT ++ con.conname as constraint_name, ++ con.contype as constraint_type, ++ CASE ++ WHEN con.contype = 'p' THEN 1 -- primary key constraint ++ WHEN con.contype = 'u' THEN 2 -- unique constraint ++ WHEN con.contype = 'f' THEN 3 -- foreign key constraint ++ WHEN con.contype = 'c' THEN 4 ++ ELSE 5 ++ END as type_rank, ++ pg_get_constraintdef(con.oid) as constraint_definition ++ FROM pg_catalog.pg_constraint con ++ JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid ++ JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace ++ WHERE nsp.nspname = in_schema ++ AND rel.relname = in_table ++ ORDER BY type_rank ++ LOOP ++ -- Issue#85 fix ++ -- constraintarr := constraintarr || v_constraintrec.constraint_name; ++ constraintarr := constraintarr || v_constraintrec.constraint_name::text; ++ IF v_constraintrec.type_rank = 1 THEN ++ v_primary := True; ++ v_constraint_name := v_constraintrec.constraint_name; ++ END IF; ++ IF NOT bfkeys AND v_constraintrec.constraint_type = 'f' THEN ++ continue; ++ END IF; ++ v_table_ddl := v_table_ddl || ' ' -- note: two char spacer to start, to indent the column ++ || 'CONSTRAINT' || ' ' ++ || v_constraintrec.constraint_name || ' ' ++ || v_constraintrec.constraint_definition ++ || ',' || E'\n'; ++ END LOOP; ++ ELSE ++ FOR v_constraintrec IN ++ SELECT ++ con.conname as constraint_name, ++ con.contype as constraint_type, ++ CASE ++ WHEN con.contype = 'p' THEN 1 -- primary key constraint ++ WHEN con.contype = 'u' THEN 2 -- unique constraint ++ WHEN con.contype = 'f' THEN 3 -- foreign key constraint ++ WHEN con.contype = 'c' THEN 4 ++ ELSE 5 ++ END as type_rank, ++ pg_get_constraintdef(con.oid) as constraint_definition ++ FROM pg_catalog.pg_constraint con ++ JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid ++ JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace ++ WHERE nsp.nspname = in_schema ++ AND rel.relname = in_table ++ -- Issue#103: do not get partitioned tables ++ AND con.conparentid = 0 ++ ORDER BY type_rank ++ LOOP ++ -- Issue#85 fix ++ -- constraintarr := constraintarr || v_constraintrec.constraint_name; ++ constraintarr := constraintarr || v_constraintrec.constraint_name::text; ++ IF v_constraintrec.type_rank = 1 THEN ++ v_primary := True; ++ v_constraint_name := v_constraintrec.constraint_name; ++ END IF; ++ IF NOT bfkeys AND v_constraintrec.constraint_type = 'f' THEN ++ continue; ++ END IF; ++ v_table_ddl := v_table_ddl || ' ' -- note: two char spacer to start, to indent the column ++ || 'CONSTRAINT' || ' ' ++ || v_constraintrec.constraint_name || ' ' ++ || v_constraintrec.constraint_definition ++ || ',' || E'\n'; ++ END LOOP; ++ END IF; ++ ++ -- drop the last comma before ending the create statement ++ v_table_ddl = substr(v_table_ddl, 0, length(v_table_ddl) - 1) || E'\n'; ++ -- end the create table def but add inherits clause if valid ++ IF bPartitioned and bInheritance THEN ++ v_table_ddl := v_table_ddl || ') INHERITS (' || in_schema || '.' || v_parent || ') ' || v_relopts || ' ' || v_tablespace || ';' || E'\n'; ++ ELSIF v_pgversion >= 100000 AND bPartitioned and NOT bInheritance THEN ++ -- See if this is a partitioned table (pg_class.relkind = 'p') and add the partitioned key ++ SELECT pg_get_partkeydef (c1.oid) AS partition_key INTO v_partition_key ++ FROM pg_class c1 ++ JOIN pg_namespace n ON (n.oid = c1.relnamespace) ++ LEFT JOIN pg_partitioned_table p ON (c1.oid = p.partrelid) ++ WHERE n.nspname = in_schema ++ AND n.oid = c1.relnamespace ++ AND c1.relname = in_table ++ AND c1.relkind = 'p'; ++ END IF; ++ IF v_partition_key IS NOT NULL AND v_partition_key <> '' THEN ++ -- add partition clause ++ -- NOTE: cannot specify default tablespace for partitioned relations ++ v_table_ddl := v_table_ddl || ') PARTITION BY ' || v_partition_key || ';' || E'\n'; ++ ELSIF bPartitioned AND not bInheritance THEN ++ IF v_relopts <> '' THEN ++ v_table_ddl := 'CREATE TABLE ' || in_schema || '.' || in_table || ' PARTITION OF ' || in_schema || '.' || v_parent || ' ' || v_partbound || v_relopts || ' ' || v_tablespace || '; ' || E'\n'; ++ ELSE ++ v_table_ddl := 'CREATE TABLE ' || in_schema || '.' || in_table || ' PARTITION OF ' || in_schema || '.' || v_parent || ' ' || v_partbound || ' ' || v_tablespace || '; ' || E'\n'; ++ END IF; ++ ELSIF bPartitioned and bInheritance THEN ++ -- we already did this above ++ v_table_ddl := v_table_ddl; ++ ELSIF v_relopts <> '' THEN ++ v_table_ddl := v_table_ddl || ') ' || v_relopts || ' ' || v_tablespace || ';' || E'\n'; ++ ELSE ++ v_table_ddl := v_table_ddl || ') ' || v_tablespace || ';' || E'\n'; ++ END IF; ++ -- suffix create statement with all of the indexes on the table ++ FOR v_indexrec IN ++ SELECT indexdef, indexname ++ FROM pg_indexes ++ WHERE (schemaname, tablename) = (in_schema, in_table) ++ LOOP ++ -- Issue#83 fix: loop through constraints and skip ones already defined ++ bSkip = False; ++ FOREACH constraintelement IN ARRAY constraintarr ++ LOOP ++ IF constraintelement = v_indexrec.indexname THEN ++ bSkip = True; ++ EXIT; ++ END IF; ++ END LOOP; ++ if bSkip THEN CONTINUE; END IF; ++ v_table_ddl := v_table_ddl ++ || v_indexrec.indexdef ++ || ';' || E'\n'; ++ END LOOP; ++ ++ -- reset search_path back to what it was ++ IF v_src_path_old = '' THEN ++ SELECT set_config('search_path', '', false) into v_dummy; ++ ELSE ++ EXECUTE 'SET search_path = ' || v_src_path_old; ++ END IF; ++ -- RAISE NOTICE 'DEBUG tableddl: reset search_path back to ***%***', v_src_path_old; ++ ++ -- return the ddl ++ RETURN v_table_ddl; ++ END; ++$$; + +--- DROP FUNCTION clone_schema(text, text, boolean, boolean); + ++-- Function: clone_schema(text, text, boolean, boolean, boolean) ++-- DROP FUNCTION clone_schema(text, text, boolean, boolean, boolean); ++-- DROP FUNCTION IF EXISTS public.clone_schema(text, text, boolean, boolean); ++ ++DROP FUNCTION IF EXISTS public.clone_schema(text, text, cloneparms[]); + CREATE OR REPLACE FUNCTION public.clone_schema( + source_schema text, + dest_schema text, +- include_recs boolean, +- ddl_only boolean) ++ VARIADIC arr public.cloneparms[] DEFAULT '{{}}':: public.cloneparms[]) + RETURNS void AS + $BODY$ + + -- This function will clone all sequences, tables, data, views & functions from any existing schema to a new one + -- SAMPLE CALL: +--- SELECT clone_schema('public', 'new_schema', True, False); ++-- SELECT clone_schema('sample', 'sample_clone2'); + + DECLARE + src_oid oid; +@@ -32,20 +600,37 @@ + object text; + buffer text; + buffer2 text; ++ buffer3 text; + srctbl text; ++ aname text; + default_ text; + column_ text; + qry text; + ix_old_name text; + ix_new_name text; ++ relpersist text; ++ udt_name text; ++ udt_schema text; ++ bRelispart bool; ++ bChild bool; ++ relknd text; ++ data_type text; ++ ocomment text; ++ adef text; + dest_qry text; + v_def text; ++ part_range text; + src_path_old text; ++ src_path_new text; + aclstr text; ++ -- issue#80 initialize arrays properly ++ tblarray text[] := '{{}}'; ++ tblarray2 text[] := '{{}}'; ++ tblarray3 text[] := '{{}}'; ++ tblelement text; + grantor text; + grantee text; + privs text; +- records_count bigint; + seqval bigint; + sq_last_value bigint; + sq_max_value bigint; +@@ -53,16 +638,28 @@ + sq_increment_by bigint; + sq_min_value bigint; + sq_cache_value bigint; +- sq_is_called boolean; ++ sq_is_called boolean := True; + sq_is_cycled boolean; ++ is_prokind boolean; ++ abool boolean; + sq_data_type text; + sq_cycled char(10); ++ sq_owned text; ++ sq_version text; ++ sq_server_version text; ++ sq_server_version_num integer; ++ bWindows boolean; + arec RECORD; + cnt integer; ++ cnt1 integer; + cnt2 integer; +- seq_cnt integer; ++ cnt3 integer; ++ cnt4 integer; + pos integer; ++ tblscopied integer := 0; ++ l_child integer; + action text := 'N/A'; ++ tblname text; + v_ret text; + v_diag1 text; + v_diag2 text; +@@ -70,48 +667,209 @@ + v_diag4 text; + v_diag5 text; + v_diag6 text; ++ v_dummy text; ++ spath text; ++ spath_tmp text; ++ -- issue#86 fix ++ isGenerated text; ++ ++ -- issue#91 fix ++ tblowner text; ++ func_owner text; ++ func_name text; ++ func_args text; ++ func_argno integer; ++ view_owner text; ++ ++ -- issue#92 ++ calleruser text; ++ ++ -- issue#94 ++ bData boolean := False; ++ bDDLOnly boolean := False; ++ bVerbose boolean := False; ++ bDebug boolean := False; ++ bNoACL boolean := False; ++ bNoOwner boolean := False; ++ arglen integer; ++ vargs text; ++ avarg public.cloneparms; ++ ++ -- issue#98 ++ mvarray text[] := '{{}}'; ++ mvscopied integer := 0; ++ ++ -- issue#99 tablespaces ++ tblspace text; ++ ++ -- issue#101 ++ bFileCopy boolean := False; ++ ++ t timestamptz := clock_timestamp(); ++ r timestamptz; ++ s timestamptz; ++ lastsql text := ''; ++ v_version text := '1.19 September 07, 2023'; + + BEGIN ++ -- Make sure NOTICE are shown ++ SET client_min_messages = 'notice'; ++ RAISE NOTICE 'clone_schema version %', v_version; ++ ++ IF 'DEBUG' = ANY ($3) THEN bDebug = True; END IF; ++ IF 'VERBOSE' = ANY ($3) THEN bVerbose = True; END IF; ++ ++ -- IF bVerbose THEN RAISE NOTICE 'START: %',clock_timestamp() - t; END IF; ++ ++ arglen := array_length($3, 1); ++ IF arglen IS NULL THEN ++ -- nothing to do, so defaults are assumed ++ NULL; ++ ELSE ++ -- loop thru args ++ -- IF 'NO_TRIGGERS' = ANY ($3) ++ -- select array_to_string($3, ',', '***') INTO vargs; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: arguments=%', $3; END IF; ++ FOREACH avarg IN ARRAY $3 LOOP ++ IF bDebug THEN RAISE NOTICE 'DEBUG: arg=%', avarg; END IF; ++ IF avarg = 'DATA' THEN ++ bData = True; ++ ELSEIF avarg = 'NODATA' THEN ++ -- already set to that by default ++ bData = False; ++ ELSEIF avarg = 'DDLONLY' THEN ++ bDDLOnly = True; ++ ELSEIF avarg = 'NOACL' THEN ++ bNoACL = True; ++ ELSEIF avarg = 'NOOWNER' THEN ++ bNoOwner = True; ++ -- issue#101 fix ++ ELSEIF avarg = 'FILECOPY' THEN ++ bFileCopy = True; ++ END IF; ++ END LOOP; ++ IF bData and bDDLOnly THEN ++ RAISE WARNING 'You can only specify DDLONLY or DATA, but not both.'; ++ RETURN; ++ END IF; ++ END IF; ++ ++ -- Get server version info to handle certain things differently based on the version. ++ SELECT setting INTO sq_server_version ++ FROM pg_settings ++ WHERE name = 'server_version'; ++ SELECT version() INTO sq_version; ++ ++ IF POSITION('compiled by Visual C++' IN sq_version) > 0 THEN ++ bWindows = True; ++ RAISE NOTICE 'Windows: %', sq_version; ++ ELSE ++ bWindows = False; ++ RAISE NOTICE 'Linux: %', sq_version; ++ END IF; ++ SELECT setting INTO sq_server_version_num ++ FROM pg_settings ++ WHERE name = 'server_version_num'; ++ ++ IF sq_server_version_num < 100000 THEN ++ IF sq_server_version_num > 90600 THEN ++ RAISE WARNING 'Server Version:% Number:% PG Versions older than v10 are not supported. Will try however for PG 9.6...', sq_server_version, sq_server_version_num; ++ ELSE ++ RAISE WARNING 'Server Version:% Number:% PG Versions older than v10 are not supported. You need to be at minimum version 9.6 to at least try', sq_server_version, sq_server_version_num; ++ RETURN; ++ END IF; ++ END IF; + + -- Check that source_schema exists + SELECT oid INTO src_oid +- FROM pg_namespace +- WHERE nspname = quote_ident(source_schema); ++ FROM pg_namespace ++ WHERE nspname = quote_ident(source_schema); ++ + IF NOT FOUND + THEN +- RAISE NOTICE 'source schema % does not exist!', source_schema; ++ RAISE NOTICE ' source schema % does not exist!', source_schema; + RETURN ; + END IF; + ++ -- Check for case-sensitive target schemas and reject them for now. ++ SELECT lower(dest_schema) = dest_schema INTO abool; ++ IF not abool THEN ++ RAISE NOTICE 'Case-sensitive target schemas are not supported at this time.'; ++ RETURN; ++ END IF; ++ + -- Check that dest_schema does not yet exist + PERFORM nspname +- FROM pg_namespace +- WHERE nspname = quote_ident(dest_schema); ++ FROM pg_namespace ++ WHERE nspname = quote_ident(dest_schema); ++ + IF FOUND + THEN +- RAISE NOTICE 'dest schema % already exists!', dest_schema; ++ RAISE NOTICE ' dest schema % already exists!', dest_schema; + RETURN ; + END IF; +- IF ddl_only and include_recs THEN ++ IF bDDLOnly and bData THEN + RAISE WARNING 'You cannot specify to clone data and generate ddl at the same time.'; + RETURN ; + END IF; + ++ -- Issue#92 ++ SELECT current_user into calleruser; ++ + -- Set the search_path to source schema. Before exiting set it back to what it was before. +- SELECT setting INTO src_path_old FROM pg_settings WHERE name='search_path'; ++ -- In order to avoid issues with the special schema name "$user" that may be ++ -- returned unquoted by some applications, we ensure it remains double quoted. ++ -- MJV FIX: #47 ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name='search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path=%', v_dummy; END IF; ++ ++ SELECT REPLACE(REPLACE(setting, '"$user"', '$user'), '$user', '"$user"') INTO src_path_old ++ FROM pg_settings WHERE name = 'search_path'; ++ ++ IF bDebug THEN RAISE NOTICE 'DEBUG: src_path_old=%', src_path_old; END IF; ++ + EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; +- -- RAISE NOTICE 'Using source search_path=%', buffer; ++ SELECT setting INTO src_path_new FROM pg_settings WHERE name='search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: new search_path=%', src_path_new; END IF; + + -- Validate required types exist. If not, create them. +- select a.objtypecnt, b.permtypecnt INTO cnt, cnt2 FROM +- (SELECT count(*) as objtypecnt FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace +- WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) +- AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) +- AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND pg_catalog.pg_type_is_visible(t.oid) AND pg_catalog.format_type(t.oid, NULL) = 'obj_type') a, +- (SELECT count(*) as permtypecnt FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace +- WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) +- AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) +- AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND pg_catalog.pg_type_is_visible(t.oid) AND pg_catalog.format_type(t.oid, NULL) = 'perm_type') b; ++ SELECT a.objtypecnt, b.permtypecnt INTO cnt, cnt2 ++ FROM ( ++ SELECT count(*) AS objtypecnt ++ FROM pg_catalog.pg_type t ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ WHERE (t.typrelid = 0 ++ OR ( ++ SELECT c.relkind = 'c' ++ FROM pg_catalog.pg_class c ++ WHERE c.oid = t.typrelid)) ++ AND NOT EXISTS ( ++ SELECT 1 ++ FROM pg_catalog.pg_type el ++ WHERE el.oid = t.typelem ++ AND el.typarray = t.oid) ++ AND n.nspname <> 'pg_catalog' ++ AND n.nspname <> 'information_schema' ++ AND pg_catalog.pg_type_is_visible(t.oid) ++ AND pg_catalog.format_type(t.oid, NULL) = 'obj_type') a, ( ++ SELECT count(*) AS permtypecnt ++ FROM pg_catalog.pg_type t ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ WHERE (t.typrelid = 0 ++ OR ( ++ SELECT c.relkind = 'c' ++ FROM pg_catalog.pg_class c ++ WHERE c.oid = t.typrelid)) ++ AND NOT EXISTS ( ++ SELECT 1 ++ FROM pg_catalog.pg_type el ++ WHERE el.oid = t.typelem ++ AND el.typarray = t.oid) ++ AND n.nspname <> 'pg_catalog' ++ AND n.nspname <> 'information_schema' ++ AND pg_catalog.pg_type_is_visible(t.oid) ++ AND pg_catalog.format_type(t.oid, NULL) = 'perm_type') b; ++ + IF cnt = 0 THEN + CREATE TYPE obj_type AS ENUM ('TABLE','VIEW','COLUMN','SEQUENCE','FUNCTION','SCHEMA','DATABASE'); + END IF; +@@ -119,53 +877,148 @@ + CREATE TYPE perm_type AS ENUM ('SELECT','INSERT','UPDATE','DELETE','TRUNCATE','REFERENCES','TRIGGER','USAGE','CREATE','EXECUTE','CONNECT','TEMPORARY'); + END IF; + +- IF ddl_only THEN +- RAISE NOTICE 'Only generating DDL, not actually creating anything...'; ++ -- Issue#95 ++ SELECT pg_catalog.pg_get_userbyid(nspowner) INTO buffer FROM pg_namespace WHERE nspname = quote_ident(source_schema); ++ ++ IF bDDLOnly THEN ++ RAISE NOTICE ' Only generating DDL, not actually creating anything...'; ++ -- issue#95 ++ IF bNoOwner THEN ++ RAISE INFO 'CREATE SCHEMA %;', quote_ident(dest_schema); ++ ELSE ++ RAISE INFO 'CREATE SCHEMA % AUTHORIZATION %;', quote_ident(dest_schema), buffer; ++ END IF; ++ RAISE NOTICE 'SET search_path=%;', quote_ident(dest_schema); ++ ELSE ++ -- issue#95 ++ IF bNoOwner THEN ++ EXECUTE 'CREATE SCHEMA ' || quote_ident(dest_schema) ; ++ ELSE ++ EXECUTE 'CREATE SCHEMA ' || quote_ident(dest_schema) || ' AUTHORIZATION ' || buffer; ++ END IF; + END IF; + +- IF ddl_only THEN +- RAISE NOTICE '%', 'CREATE SCHEMA ' || quote_ident(dest_schema); ++ -- Do system table validations for subsequent system table queries ++ -- Issue#65 Fix ++ SELECT count(*) into cnt ++ FROM pg_attribute ++ WHERE attrelid = 'pg_proc'::regclass AND attname = 'prokind'; ++ ++ IF cnt = 0 THEN ++ is_prokind = False; + ELSE +- EXECUTE 'CREATE SCHEMA ' || quote_ident(dest_schema) ; ++ is_prokind = True; + END IF; + + -- MV: Create Collations + action := 'Collations'; + cnt := 0; +- FOR arec IN +- SELECT n.nspname as schemaname, a.rolname as ownername , c.collname, c.collprovider, c.collcollate as locale, +- 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'c' THEN 'libc' ELSE '' END || ', locale = ''' || c.collcollate || ''');' as COLL_DDL +- FROM pg_collation c JOIN pg_namespace n ON (c.collnamespace = n.oid) JOIN pg_roles a ON (c.collowner = a.oid) WHERE n.nspname = quote_ident(source_schema) order by c.collname +- LOOP +- BEGIN +- cnt := cnt + 1; +- IF ddl_only THEN +- RAISE INFO '%', arec.coll_ddl; +- ELSE +- EXECUTE arec.coll_ddl; +- END IF; +- END; +- END LOOP; ++ -- Issue#96 Handle differently based on PG Versions (PG15 rely on colliculocale, not collcolocate) ++ -- perhaps use this logic instead: COALESCE(c.collcollate, c.colliculocale) AS lc_collate, COALESCE(c.collctype, c.colliculocale) AS lc_type ++ IF sq_server_version_num > 150000 THEN ++ FOR arec IN ++ SELECT n.nspname AS schemaname, a.rolname AS ownername, c.collname, c.collprovider, c.collcollate AS locale, ++ 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || ++ CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'c' THEN 'libc' ELSE '' END || ++ ', locale = ''' || c.colliculocale || ''');' AS COLL_DDL ++ FROM pg_collation c ++ JOIN pg_namespace n ON (c.collnamespace = n.oid) ++ JOIN pg_roles a ON (c.collowner = a.oid) ++ WHERE n.nspname = quote_ident(source_schema) ++ ORDER BY c.collname ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.coll_ddl; ++ ELSE ++ EXECUTE arec.coll_ddl; ++ END IF; ++ END; ++ END LOOP; ++ ELSIF sq_server_version_num > 100000 THEN ++ FOR arec IN ++ SELECT n.nspname AS schemaname, a.rolname AS ownername, c.collname, c.collprovider, c.collcollate AS locale, ++ 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || ++ CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'c' THEN 'libc' ELSE '' END || ++ ', locale = ''' || c.collcollate || ''');' AS COLL_DDL ++ FROM pg_collation c ++ JOIN pg_namespace n ON (c.collnamespace = n.oid) ++ JOIN pg_roles a ON (c.collowner = a.oid) ++ WHERE n.nspname = quote_ident(source_schema) ++ ORDER BY c.collname ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.coll_ddl; ++ ELSE ++ EXECUTE arec.coll_ddl; ++ END IF; ++ END; ++ END LOOP; ++ ELSE ++ -- handle 9.6 that is missing some columns in pg_collation ++ FOR arec IN ++ SELECT n.nspname AS schemaname, a.rolname AS ownername, c.collname, c.collcollate AS locale, ++ 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || ++ ', locale = ''' || c.collcollate || ''');' AS COLL_DDL ++ FROM pg_collation c ++ JOIN pg_namespace n ON (c.collnamespace = n.oid) ++ JOIN pg_roles a ON (c.collowner = a.oid) ++ WHERE n.nspname = quote_ident(source_schema) ++ ORDER BY c.collname ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.coll_ddl; ++ ELSE ++ EXECUTE arec.coll_ddl; ++ END IF; ++ END; ++ END LOOP; ++ END IF; + RAISE NOTICE ' COLLATIONS cloned: %', LPAD(cnt::text, 5, ' '); + + -- MV: Create Domains + action := 'Domains'; + cnt := 0; + FOR arec IN +- SELECT n.nspname as "Schema", t.typname as "Name", pg_catalog.format_type(t.typbasetype, t.typtypmod) as "Type", +- (SELECT c.collname FROM pg_catalog.pg_collation c, pg_catalog.pg_type bt WHERE c.oid = t.typcollation AND +- bt.oid = t.typbasetype AND t.typcollation <> bt.typcollation) as "Collation", +- CASE WHEN t.typnotnull THEN 'not null' END as "Nullable", t.typdefault as "Default", +- pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid), ' ') as "Check", +- 'CREATE DOMAIN ' || quote_ident(dest_schema) || '.' || t.typname || ' AS ' || pg_catalog.format_type(t.typbasetype, t.typtypmod) || +- CASE WHEN t.typnotnull IS NOT NULL THEN ' NOT NULL ' ELSE ' ' END || CASE WHEN t.typdefault IS NOT NULL THEN 'DEFAULT ' || t.typdefault || ' ' ELSE ' ' END || +- pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid), ' ') || ';' AS DOM_DDL +- FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace +- WHERE t.typtype = 'd' AND n.nspname = quote_ident(source_schema) AND pg_catalog.pg_type_is_visible(t.oid) ORDER BY 1, 2 ++ SELECT n.nspname AS "Schema", t.typname AS "Name", pg_catalog.format_type(t.typbasetype, t.typtypmod) AS "Type", ( ++ SELECT c.collname ++ FROM pg_catalog.pg_collation c, pg_catalog.pg_type bt ++ WHERE c.oid = t.typcollation ++ AND bt.oid = t.typbasetype ++ AND t.typcollation <> bt.typcollation) AS "Collation", CASE WHEN t.typnotnull THEN ++ 'not null' ++ END AS "Nullable", t.typdefault AS "Default", pg_catalog.array_to_string(ARRAY ( ++ SELECT pg_catalog.pg_get_constraintdef(r.oid, TRUE) ++ FROM pg_catalog.pg_constraint r ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on t.typename ++ WHERE t.oid = r.contypid), ' ') AS "Check", 'CREATE DOMAIN ' || quote_ident(dest_schema) || '.' || quote_ident(t.typname) || ' AS ' || pg_catalog.format_type(t.typbasetype, t.typtypmod) || ++ CASE WHEN t.typnotnull IS NOT NULL THEN ++ ' NOT NULL ' ++ ELSE ++ ' ' ++ END || CASE WHEN t.typdefault IS NOT NULL THEN ++ 'DEFAULT ' || t.typdefault || ' ' ++ ELSE ++ ' ' ++ END || pg_catalog.array_to_string(ARRAY ( ++ SELECT pg_catalog.pg_get_constraintdef(r.oid, TRUE) ++ FROM pg_catalog.pg_constraint r ++ WHERE t.oid = r.contypid), ' ') || ';' AS DOM_DDL ++ FROM pg_catalog.pg_type t ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ WHERE t.typtype = 'd' ++ AND n.nspname = quote_ident(source_schema) ++ AND pg_catalog.pg_type_is_visible(t.oid) ++ ORDER BY 1, 2 + LOOP + BEGIN + cnt := cnt + 1; +- IF ddl_only THEN ++ IF bDDLOnly THEN + RAISE INFO '%', arec.dom_ddl; + ELSE + EXECUTE arec.dom_ddl; +@@ -177,36 +1030,70 @@ + -- MV: Create types + action := 'Types'; + cnt := 0; ++ lastsql = ''; + FOR arec IN +- SELECT c.relkind, n.nspname AS schemaname, t.typname AS typname, t.typcategory, CASE WHEN t.typcategory='C' THEN +- 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS (' || array_to_string(array_agg(a.attname || ' ' || pg_catalog.format_type(a.atttypid, a.atttypmod) ORDER BY c.relname, a.attnum),', ') || ');' +- WHEN t.typcategory='E' THEN +- 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS ENUM (' || REPLACE(quote_literal(array_to_string(array_agg(e.enumlabel ORDER BY e.enumsortorder),',')), ',', ''',''') || ');' +- ELSE '' END AS type_ddl FROM pg_type t JOIN pg_namespace n ON (n.oid = t.typnamespace) +- LEFT JOIN pg_enum e ON (t.oid = e.enumtypid) +- LEFT JOIN pg_class c ON (c.reltype = t.oid) LEFT JOIN pg_attribute a ON (a.attrelid = c.oid) +- WHERE n.nspname = quote_ident(source_schema) and (c.relkind IS NULL or c.relkind = 'c') and t.typcategory in ('C', 'E') group by 1,2,3,4 order by n.nspname, t.typcategory, t.typname ++ -- Fixed Issue#108:enclose double-quote roles with special characters for setting "OWNER TO" ++ -- SELECT c.relkind, n.nspname AS schemaname, t.typname AS typname, t.typcategory, pg_catalog.pg_get_userbyid(t.typowner) AS owner, CASE WHEN t.typcategory = 'C' THEN ++ SELECT c.relkind, n.nspname AS schemaname, t.typname AS typname, t.typcategory, '"' || pg_catalog.pg_get_userbyid(t.typowner) || '"' AS owner, CASE WHEN t.typcategory = 'C' THEN ++ 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS (' || array_to_string(array_agg(a.attname || ' ' || pg_catalog.format_type(a.atttypid, a.atttypmod) ++ ORDER BY c.relname, a.attnum), ', ') || ');' ++ WHEN t.typcategory = 'E' THEN ++ 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS ENUM (' || REPLACE(quote_literal(array_to_string(array_agg(e.enumlabel ORDER BY e.enumsortorder), ',')), ',', ''',''') || ');' ++ ELSE ++ '' ++ END AS type_ddl ++ FROM pg_type t ++ JOIN pg_namespace n ON (n.oid = t.typnamespace) ++ LEFT JOIN pg_enum e ON (t.oid = e.enumtypid) ++ LEFT JOIN pg_class c ON (c.reltype = t.oid) ++ LEFT JOIN pg_attribute a ON (a.attrelid = c.oid) ++ WHERE n.nspname = quote_ident(source_schema) ++ AND (c.relkind IS NULL ++ OR c.relkind = 'c') ++ AND t.typcategory IN ('C', 'E') ++ GROUP BY 1, 2, 3, 4, 5 ++ ORDER BY n.nspname, t.typcategory, t.typname ++ + LOOP + BEGIN + cnt := cnt + 1; + -- Keep composite and enum types in separate branches for fine tuning later if needed. + IF arec.typcategory = 'E' THEN +- -- RAISE NOTICE '%', arec.type_ddl; +- IF ddl_only THEN +- RAISE INFO '%', arec.type_ddl; +- ELSE +- EXECUTE arec.type_ddl; +- END IF; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.type_ddl; ++ ++ --issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TYPE % OWNER TO %;', quote_ident(dest_schema) || '.' || arec.typname, arec.owner; ++ END IF; ++ ELSE ++ EXECUTE arec.type_ddl; + +- ELSEIF arec.typcategory = 'C' THEN +- -- RAISE NOTICE '%', arec.type_ddl; +- IF ddl_only THEN ++ --issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ EXECUTE 'ALTER TYPE ' || quote_ident(dest_schema) || '.' || arec.typname || ' OWNER TO ' || arec.owner; ++ END IF; ++ END IF; ++ ELSIF arec.typcategory = 'C' THEN ++ IF bDDLOnly THEN + RAISE INFO '%', arec.type_ddl; ++ --issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TYPE % OWNER TO %;', quote_ident(dest_schema) || '.' || arec.typname, arec.owner; ++ END IF; + ELSE + EXECUTE arec.type_ddl; ++ --issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ EXECUTE 'ALTER TYPE ' || quote_ident(dest_schema) || '.' || arec.typname || ' OWNER TO ' || arec.owner; ++ END IF; + END IF; + ELSE +- RAISE NOTICE 'Unhandled type:%-%', arec.typcategory, arec.typname; ++ RAISE NOTICE ' Unhandled type:%-%', arec.typcategory, arec.typname; + END IF; + END; + END LOOP; +@@ -214,82 +1101,361 @@ + + -- Create sequences + action := 'Sequences'; +- seq_cnt := 0; +- -- TODO: Find a way to make this sequence's owner is the correct table. +- FOR object IN +- SELECT sequence_name::text +- FROM information_schema.sequences +- WHERE sequence_schema = quote_ident(source_schema) ++ ++ cnt := 0; ++ -- fix#63 get from pg_sequences not information_schema ++ -- fix#63 take 2: get it from information_schema.sequences since we need to treat IDENTITY columns differently. ++ -- fix#95 get owner as well by joining to pg_sequences ++ -- fix#106 we can get owner info with pg_class, pg_user/pg_group, and information_schema.sequences, so we can avoid the hit to pg_sequences which is not available in 9.6 ++ FOR object, buffer IN ++ -- Fixed Issue#108: ++ -- SELECT s1.sequence_name::text, s2.sequenceowner FROM information_schema.sequences s1 JOIN pg_sequences s2 ON (s1.sequence_schema = s2.schemaname AND s1.sequence_name = s2.sequencename) AND s1.sequence_schema = quote_ident(source_schema) ++ -- SELECT s.sequence_name::text, '"' || u.usename || '"' as owner FROM information_schema.sequences s JOIN pg_class c ON (s.sequence_name = c.relname AND s.sequence_schema = c.relnamespace::regnamespace::text) JOIN pg_user u ON (c.relowner = u.usesysid) ++ -- WHERE c.relkind = 'S' AND s.sequence_schema = quote_ident(source_schema) ++ -- UNION SELECT s.sequence_name::text, g.groname as owner FROM information_schema.sequences s JOIN pg_class c ON (s.sequence_name = c.relname AND s.sequence_schema = c.relnamespace::regnamespace::text) JOIN pg_group g ON (c.relowner = g.grosysid) ++ -- WHERE c.relkind = 'S' AND s.sequence_schema = quote_ident(source_schema) ++ SELECT sequencename::text, sequenceowner FROM pg_catalog.pg_sequences WHERE schemaname = quote_ident(source_schema) + LOOP +- seq_cnt := seq_cnt + 1; +- IF ddl_only THEN ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ -- issue#95 + RAISE INFO '%', 'CREATE SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ';'; ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO '%', 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ' OWNER TO ' || buffer || ';'; ++ END IF; + ELSE + EXECUTE 'CREATE SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object); ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ EXECUTE 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ' OWNER TO ' || buffer; ++ END IF; + END IF; + srctbl := quote_ident(source_schema) || '.' || quote_ident(object); + +- EXECUTE 'SELECT last_value, is_called +- FROM ' || quote_ident(source_schema) || '.' || quote_ident(object) || ';' +- INTO sq_last_value, sq_is_called; +- +- EXECUTE 'SELECT max_value, start_value, increment_by, min_value, cache_size, cycle, data_type +- FROM pg_catalog.pg_sequences WHERE schemaname='|| quote_literal(source_schema) || ' AND sequencename=' || quote_literal(object) || ';' +- INTO sq_max_value, sq_start_value, sq_increment_by, sq_min_value, sq_cache_value, sq_is_cycled, sq_data_type ; ++ IF sq_server_version_num < 100000 THEN ++ EXECUTE 'SELECT last_value, is_called FROM ' || quote_ident(source_schema) || '.' || quote_ident(object) || ';' INTO sq_last_value, sq_is_called; ++ EXECUTE 'SELECT maximum_value, start_value, increment, minimum_value, 1 cache_size, cycle_option, data_type ++ FROM information_schema.sequences WHERE sequence_schema='|| quote_literal(source_schema) || ' AND sequence_name=' || quote_literal(object) || ';' ++ INTO sq_max_value, sq_start_value, sq_increment_by, sq_min_value, sq_cache_value, sq_is_cycled, sq_data_type; ++ IF sq_is_cycled ++ THEN ++ sq_cycled := 'CYCLE'; ++ ELSE ++ sq_cycled := 'NO CYCLE'; ++ END IF; + +- IF sq_is_cycled +- THEN +- sq_cycled := 'CYCLE'; ++ qry := 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) ++ || ' INCREMENT BY ' || sq_increment_by ++ || ' MINVALUE ' || sq_min_value ++ || ' MAXVALUE ' || sq_max_value ++ -- will update current sequence value after this ++ || ' START WITH ' || sq_start_value ++ || ' RESTART ' || sq_min_value ++ || ' CACHE ' || sq_cache_value ++ || ' ' || sq_cycled || ' ;' ; + ELSE +- sq_cycled := 'NO CYCLE'; +- END IF; ++ EXECUTE 'SELECT max_value, start_value, increment_by, min_value, cache_size, cycle, data_type, COALESCE(last_value, 1) ++ FROM pg_catalog.pg_sequences WHERE schemaname='|| quote_literal(source_schema) || ' AND sequencename=' || quote_literal(object) || ';' ++ INTO sq_max_value, sq_start_value, sq_increment_by, sq_min_value, sq_cache_value, sq_is_cycled, sq_data_type, sq_last_value; ++ IF sq_is_cycled ++ THEN ++ sq_cycled := 'CYCLE'; ++ ELSE ++ sq_cycled := 'NO CYCLE'; ++ END IF; + +- qry := 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) +- || ' AS ' || sq_data_type +- || ' INCREMENT BY ' || sq_increment_by +- || ' MINVALUE ' || sq_min_value +- || ' MAXVALUE ' || sq_max_value +- || ' START WITH ' || sq_start_value +- || ' RESTART ' || sq_min_value +- || ' CACHE ' || sq_cache_value +- || ' ' || sq_cycled || ' ;' ; ++ qry := 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) ++ || ' AS ' || sq_data_type ++ || ' INCREMENT BY ' || sq_increment_by ++ || ' MINVALUE ' || sq_min_value ++ || ' MAXVALUE ' || sq_max_value ++ -- will update current sequence value after this ++ || ' START WITH ' || sq_start_value ++ || ' RESTART ' || sq_min_value ++ || ' CACHE ' || sq_cache_value ++ || ' ' || sq_cycled || ' ;' ; ++ END IF; + +- IF ddl_only THEN ++ IF bDDLOnly THEN + RAISE INFO '%', qry; + ELSE + EXECUTE qry; + END IF; + + buffer := quote_ident(dest_schema) || '.' || quote_ident(object); +- IF include_recs THEN ++ IF bData THEN + EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; + ELSE +- if ddl_only THEN +- RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; ++ if bDDLOnly THEN ++ -- fix#63 ++ -- RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; ++ RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; + ELSE +- EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; ++ -- fix#63 ++ -- EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; ++ EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; + END IF; + + END IF; + END LOOP; +- RAISE NOTICE ' SEQUENCES cloned: %', LPAD(seq_cnt::text, 5, ' '); ++ RAISE NOTICE ' SEQUENCES cloned: %', LPAD(cnt::text, 5, ' '); ++ + +--- Create tables ++ -- Create tables including partitioned ones (parent/children) and unlogged ones. Order by is critical since child partition range logic is dependent on it. + action := 'Tables'; +- cnt := 0; +- FOR object IN +- SELECT TABLE_NAME::text +- FROM information_schema.tables +- WHERE table_schema = quote_ident(source_schema) +- AND table_type = 'BASE TABLE' ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name='search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path=%', v_dummy; END IF; + ++ cnt := 0; ++ -- Issue#61 FIX: use set_config for empty string ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: setting search_path to empty string:%', v_dummy; END IF; ++ -- Fix#86 add isgenerated to column list ++ -- Fix#91 add tblowner for setting the table ownership to that of the source ++ -- Fix#99 added join to pg_tablespace ++ ++ -- Handle PG versions greater than last major/minor version of PG 9.6.24 ++ IF sq_server_version_num > 90624 THEN ++ FOR tblname, relpersist, bRelispart, relknd, data_type, udt_name, udt_schema, ocomment, l_child, isGenerated, tblowner, tblspace IN ++ -- 2021-03-08 MJV #39 fix: change sql to get indicator of user-defined columns to issue warnings ++ -- select c.relname, c.relpersistence, c.relispartition, c.relkind ++ -- FROM pg_class c, pg_namespace n where n.oid = c.relnamespace and n.nspname = quote_ident(source_schema) and c.relkind in ('r','p') and ++ -- order by c.relkind desc, c.relname ++ --Fix#65 add another left join to distinguish child tables by inheritance ++ -- Fix#86 add is_generated to column select ++ -- Fix#91 add tblowner to the select ++ -- Fix#105 need a different kinda distinct to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT ++ --SELECT DISTINCT c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, ++ -- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace ++ -- fixed #108 by enclosing owner in double quotes to avoid errors for bad characters like #.@... ++ -- SELECT DISTINCT ON (c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type) c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, ++ SELECT DISTINCT ON (c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type) c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, ++ COALESCE(co.is_generated, ''), '"' || pg_catalog.pg_get_userbyid(c.relowner) || '"' as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace ++ FROM pg_class c ++ JOIN pg_namespace n ON (n.oid = c.relnamespace ++ AND n.nspname = quote_ident(source_schema) ++ AND c.relkind IN ('r', 'p')) ++ LEFT JOIN information_schema.columns co ON (co.table_schema = n.nspname ++ AND co.table_name = c.relname ++ AND (co.data_type = 'USER-DEFINED' OR co.is_generated = 'ALWAYS')) ++ LEFT JOIN pg_inherits i ON (c.oid = i.inhrelid) ++ -- issue#99 added join ++ LEFT JOIN pg_tablespace ts ON (c.reltablespace = ts.oid) ++ ORDER BY c.relkind DESC, c.relname + LOOP + cnt := cnt + 1; +- buffer := quote_ident(dest_schema) || '.' || quote_ident(object); +- IF ddl_only THEN +- RAISE INFO '%', 'CREATE TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(object) || ' INCLUDING ALL)'; ++ lastsql = ''; ++ IF l_child IS NULL THEN ++ bChild := False; + ELSE +- EXECUTE 'CREATE TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(object) || ' INCLUDING ALL)'; ++ bChild := True; ++ END IF; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: TABLE START --> table=% bRelispart=% relkind=% bChild=%',tblname, bRelispart, relknd, bChild; END IF; ++ ++ IF data_type = 'USER-DEFINED' THEN ++ -- RAISE NOTICE ' Table (%) has column(s) with user-defined types so using get_table_ddl() instead of CREATE TABLE LIKE construct.',tblname; ++ cnt :=cnt; ++ END IF; ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); ++ buffer2 := ''; ++ IF relpersist = 'u' THEN ++ buffer2 := 'UNLOGGED '; ++ END IF; ++ IF relknd = 'r' THEN ++ IF bDDLOnly THEN ++ IF data_type = 'USER-DEFINED' THEN ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ RAISE INFO '%', buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; ++ END IF; ++ ELSE ++ IF NOT bChild THEN ++ RAISE INFO '%', 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL);'; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; ++ END IF; ++ ++ -- issue#99 ++ IF tblspace <> 'pg_default' THEN ++ -- replace with user-defined tablespace ++ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; ++ RAISE INFO 'ALTER TABLE IF EXISTS % SET TABLESPACE %;', quote_ident(dest_schema) || '.' || tblname, tblspace; ++ END IF; ++ ELSE ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ RAISE INFO '%', buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; ++ END IF; ++ END IF; ++ END IF; ++ ELSE ++ IF data_type = 'USER-DEFINED' THEN ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef01:%', buffer3; END IF; ++ -- #82: Table def should be fully qualified with target schema, ++ -- so just make search path = public to handle extension types that should reside in public schema ++ v_dummy = 'public'; ++ SELECT set_config('search_path', v_dummy, false) into v_dummy; ++ EXECUTE buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ELSE ++ IF (NOT bChild OR bRelispart) THEN ++ buffer3 := 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL)'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef02:%', buffer3; END IF; ++ EXECUTE buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ++ -- issue#99 ++ IF tblspace <> 'pg_default' THEN ++ -- replace with user-defined tablespace ++ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' SET TABLESPACE ' || tblspace; ++ EXECUTE buffer3; ++ END IF; ++ ++ ELSE ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ -- set client_min_messages higher to avoid messages like this: ++ -- NOTICE: merging column "city_id" with inherited definition ++ set client_min_messages = 'WARNING'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef03:%', buffer3; END IF; ++ EXECUTE buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ++ -- reset it back, only get these for inheritance-based tables ++ set client_min_messages = 'notice'; ++ END IF; ++ END IF; ++ -- Add table comment. ++ IF ocomment IS NOT NULL THEN ++ EXECUTE 'COMMENT ON TABLE ' || buffer || ' IS ' || quote_literal(ocomment); ++ END IF; ++ END IF; ++ ELSIF relknd = 'p' THEN ++ -- define parent table and assume child tables have already been created based on top level sort order. ++ -- Issue #103 Put the complex query into its own function, get_table_ddl_complex() ++ SELECT * INTO qry FROM public.get_table_ddl_complex(source_schema, dest_schema, tblname, sq_server_version_num); ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 - %', buffer; END IF; ++ ++ -- consider replacing complicated query above with this simple call to get_table_ddl()... ++ -- SELECT * INTO qry FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ -- qry := REPLACE(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || quote_ident(tblname), tblowner; ++ END IF; ++ ELSE ++ -- Issue#103: we need to always set search_path priority to target schema when we execute DDL ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 context: old search path=% new search path=% current search path=%', src_path_old, src_path_new, v_dummy; END IF; ++ SELECT setting INTO spath_tmp FROM pg_settings WHERE name = 'search_path'; ++ IF spath_tmp <> dest_schema THEN ++ -- change it to target schema and don't forget to change it back after we execute the DDL ++ spath = 'SET search_path = "' || dest_schema || '"'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: changing search_path --> %', spath; END IF; ++ EXECUTE spath; ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed to %', v_dummy; END IF; ++ END IF; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04:%', qry; END IF; ++ EXECUTE qry; ++ ++ -- Issue#103 ++ -- Set search path back to what it was ++ spath = 'SET search_path = "' || spath_tmp || '"'; ++ EXECUTE spath; ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed back to %', v_dummy; END IF; ++ ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ++ END IF; ++ -- loop for child tables and alter them to attach to parent for specific partition method. ++ -- Issue#103 fix: only loop for the table we are currently processing, tblname! ++ FOR aname, part_range, object IN ++ SELECT quote_ident(dest_schema) || '.' || c1.relname as tablename, pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) as partrange, quote_ident(dest_schema) || '.' || c2.relname as object ++ FROM pg_catalog.pg_class c1, pg_namespace n, pg_catalog.pg_inherits i, pg_class c2 ++ WHERE n.nspname = quote_ident(source_schema) AND c1.relnamespace = n.oid AND c1.relkind = 'r' ++ -- Issue#103: added this condition to only work on current partitioned table. The problem was regression testing previously only worked on one partition table clone case ++ AND c2.relname = tblname AND ++ c1.relispartition AND c1.oid=i.inhrelid AND i.inhparent = c2.oid AND c2.relnamespace = n.oid ORDER BY pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) = 'DEFAULT', ++ c1.oid::pg_catalog.regclass::pg_catalog.text ++ LOOP ++ qry := 'ALTER TABLE ONLY ' || object || ' ATTACH PARTITION ' || aname || ' ' || part_range || ';'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: %',qry; END IF; ++ -- issue#91, not sure if we need to do this for child tables ++ -- issue#95 we dont set ownership here ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ IF NOT bNoOwner THEN ++ NULL; ++ END IF; ++ ELSE ++ EXECUTE qry; ++ IF NOT bNoOwner THEN ++ NULL; ++ END IF; ++ END IF; ++ END LOOP; + END IF; + + -- INCLUDING ALL creates new index names, we restore them to the old name. +@@ -300,171 +1466,975 @@ + WHERE old.schemaname = source_schema + AND new.schemaname = dest_schema + AND old.tablename = new.tablename +- AND old.tablename = object ++ AND old.tablename = tblname + AND old.indexname <> new.indexname + AND regexp_replace(old.indexdef, E'.*USING','') = regexp_replace(new.indexdef, E'.*USING','') +- ORDER BY old.indexname, new.indexname ++ ORDER BY old.indexdef, new.indexdef + LOOP +- IF ddl_only THEN ++ IF bDDLOnly THEN + RAISE INFO '%', 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; + ELSE +- EXECUTE 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; ++ -- The SELECT query above may return duplicate names when a column is ++ -- indexed twice the same manner with 2 different names. Therefore, to ++ -- avoid a 'relation "xxx" already exists' we test if the index name ++ -- is in use or free. Skipping existing index will fallback on unused ++ -- ones and every duplicate will be mapped to distinct old names. ++ IF NOT EXISTS ( ++ SELECT TRUE ++ FROM pg_indexes ++ WHERE schemaname = dest_schema ++ AND tablename = tblname ++ AND indexname = quote_ident(ix_old_name)) ++ AND EXISTS ( ++ SELECT TRUE ++ FROM pg_indexes ++ WHERE schemaname = dest_schema ++ AND tablename = tblname ++ AND indexname = quote_ident(ix_new_name)) ++ THEN ++ EXECUTE 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; ++ END IF; + END IF; + END LOOP; + +- records_count := 0; +- IF include_recs +- THEN ++ lastsql = ''; ++ IF bData THEN + -- Insert records from source table +- RAISE NOTICE 'Populating cloned table, %', buffer; +- EXECUTE 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(object) || ';'; +- +- -- restart the counter for PK's internal identity sequence +- EXECUTE 'SELECT count(*) FROM ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ';' INTO records_count; +- FOR column_ IN +- SELECT column_name::text +- FROM information_schema.columns +- WHERE +- table_schema = dest_schema AND +- table_name = object AND +- is_identity = 'YES' +- LOOP +- EXECUTE 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ' ALTER COLUMN ' || quote_ident(column_) || ' RESTART WITH ' || records_count + 1 || ';'; +- END LOOP; ++ ++ -- 2021-03-03 MJV FIX ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); ++ ++ -- 2020/06/18 - Issue #31 fix: add "OVERRIDING SYSTEM VALUE" for IDENTITY columns marked as GENERATED ALWAYS. ++ select count(*) into cnt2 from pg_class c, pg_attribute a, pg_namespace n ++ where a.attrelid = c.oid and c.relname = quote_ident(tblname) and n.oid = c.relnamespace and n.nspname = quote_ident(source_schema) and a.attidentity = 'a'; ++ buffer3 := ''; ++ IF cnt2 > 0 THEN ++ buffer3 := ' OVERRIDING SYSTEM VALUE'; ++ END IF; ++ -- BUG for inserting rows from tables with user-defined columns ++ -- INSERT INTO sample_clone.address OVERRIDING SYSTEM VALUE SELECT * FROM sample.address; ++ -- ERROR: column "id2" is of type sample_clone.udt_myint but expression is of type udt_myint ++ ++ -- Issue#86 fix: ++ -- IF data_type = 'USER-DEFINED' THEN ++ IF bDebug THEN RAISE NOTICE 'DEBUG: includerecs branch table=% data_type=% isgenerated=% buffer3=%', tblname, data_type, isGenerated, buffer3; END IF; ++ IF data_type = 'USER-DEFINED' OR isGenerated = 'ALWAYS' THEN ++ ++ -- RAISE WARNING 'Bypassing copying rows for table (%) with user-defined data types. You must copy them manually.', tblname; ++ -- won't work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address; ++ -- Issue#101 --> INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address; ++ ++ -- Issue#79 implementation follows ++ -- COPY sample.statuses(id, s) TO '/tmp/statuses.txt' WITH DELIMITER AS ','; ++ -- COPY sample_clone1.statuses FROM '/tmp/statuses.txt' (DELIMITER ',', NULL ''); ++ -- Issue#101 fix: use text cast to get around the problem. ++ IF bFileCopy THEN ++ IF bWindows THEN ++ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''C:\WINDOWS\TEMP\cloneschema.tmp'' WITH DELIMITER AS '','';'; ++ tblarray2 := tblarray2 || buffer2; ++ -- Issue #81 reformat COPY command for upload ++ -- buffer2:= 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL '''');'; ++ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; ++ tblarray2 := tblarray2 || buffer2; ++ ELSE ++ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''/tmp/cloneschema.tmp'' WITH DELIMITER AS '','';'; ++ tblarray2 := tblarray2 || buffer2; ++ -- Issue #81 reformat COPY command for upload ++ -- buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL '''');'; ++ -- works--> COPY sample.timestamptbl2 FROM '/tmp/cloneschema.tmp' WITH (DELIMITER ',', NULL '\N', FORMAT CSV) ; ++ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; ++ tblarray2 := tblarray2 || buffer2; ++ END IF; ++ ELSE ++ -- Issue#101: assume direct copy with text cast, add to separate array ++ SELECT * INTO buffer3 FROM public.get_insert_stmt_ddl(quote_ident(source_schema), quote_ident(dest_schema), quote_ident(tblname), True); ++ tblarray3 := tblarray3 || buffer3; ++ END IF; ++ ELSE ++ -- bypass child tables since we populate them when we populate the parents ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tblname=% bRelispart=% relknd=% l_child=% bChild=%', tblname, bRelispart, relknd, l_child, bChild; END IF; ++ IF NOT bRelispart AND NOT bChild THEN ++ -- Issue#75: Must defer population of tables until child tables have been added to parents ++ -- Issue#101 Offer alternative of copy to/from file. Although originally intended for tables with UDTs, it is now expanded to handle all cases for performance improvement perhaps for large tables. ++ -- Issue#106 buffer3 shouldn't be in the mix ++ -- revisited: buffer3 should be in play for PG versions that handle IDENTITIES ++ buffer2 := 'INSERT INTO ' || buffer || buffer3 || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; ++ -- buffer2 := 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: buffer2=%',buffer2; END IF; ++ IF bFileCopy THEN ++ tblarray2:= tblarray2 || buffer2; ++ ELSE ++ tblarray := tblarray || buffer2; ++ END IF; ++ END IF; ++ END IF; + END IF; + +- SET search_path = ''; ++ -- Issue#61 FIX: use set_config for empty string ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ + FOR column_, default_ IN + SELECT column_name::text, +- REPLACE(column_default::text, source_schema, dest_schema) +- FROM information_schema.COLUMNS +- WHERE table_schema = source_schema +- AND TABLE_NAME = object +- AND column_default LIKE 'nextval(%' || quote_ident(source_schema) || '%::regclass)' ++ REPLACE(column_default::text, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') ++ FROM information_schema.COLUMNS ++ WHERE table_schema = source_schema ++ AND TABLE_NAME = tblname ++ AND column_default LIKE 'nextval(%' || quote_ident(source_schema) || '%::regclass)' + LOOP +- IF ddl_only THEN ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on column name ++ buffer2 = 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || quote_ident(column_) || ' SET DEFAULT ' || default_ || ';'; ++ IF bDDLOnly THEN + -- May need to come back and revisit this since previous sql will not return anything since no schema as created! +- RAISE INFO '%', 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || column_ || ' SET DEFAULT ' || default_ || ';'; ++ RAISE INFO '%', buffer2; + ELSE +- EXECUTE 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || column_ || ' SET DEFAULT ' || default_; ++ EXECUTE buffer2; + END IF; + END LOOP; +- EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; + ++ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; + END LOOP; +- RAISE NOTICE ' TABLES cloned: %', LPAD(cnt::text, 5, ' '); +- +- -- add FK constraint +- action := 'FK Constraints'; +- cnt := 0; +- SET search_path = ''; +- FOR qry IN +- SELECT 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || quote_ident(rn.relname) +- || ' ADD CONSTRAINT ' || quote_ident(ct.conname) || ' ' || REPLACE(pg_get_constraintdef(ct.oid), 'REFERENCES ' ||quote_ident(source_schema), 'REFERENCES ' || quote_ident(dest_schema)) || ';' +- FROM pg_constraint ct +- JOIN pg_class rn ON rn.oid = ct.conrelid +- WHERE connamespace = src_oid +- AND rn.relkind = 'r' +- AND ct.contype = 'f' ++ ELSE ++ -- Handle 9.6 versions 90600 ++ FOR tblname, relpersist, relknd, data_type, udt_name, udt_schema, ocomment, l_child, isGenerated, tblowner, tblspace IN ++ -- 2021-03-08 MJV #39 fix: change sql to get indicator of user-defined columns to issue warnings ++ -- select c.relname, c.relpersistence, c.relispartition, c.relkind ++ -- FROM pg_class c, pg_namespace n where n.oid = c.relnamespace and n.nspname = quote_ident(source_schema) and c.relkind in ('r','p') and ++ -- order by c.relkind desc, c.relname ++ --Fix#65 add another left join to distinguish child tables by inheritance ++ -- Fix#86 add is_generated to column select ++ -- Fix#91 add tblowner to the select ++ -- Fix#105 need a different kinda distinct to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT ++ -- Fixed Issue#108: double quote roles to avoid problems with special characters in OWNER TO statements ++ --SELECT DISTINCT c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, ++ -- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace ++ -- SELECT DISTINCT ON (c.relname, c.relpersistence, c.relkind, co.data_type) c.relname, c.relpersistence, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, ++ -- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace ++ SELECT DISTINCT ON (c.relname, c.relpersistence, c.relkind, co.data_type) c.relname, c.relpersistence, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, ++ COALESCE(co.is_generated, ''), '"' || pg_catalog.pg_get_userbyid(c.relowner) || '"' as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace ++ FROM pg_class c ++ JOIN pg_namespace n ON (n.oid = c.relnamespace ++ AND n.nspname = quote_ident(source_schema) ++ AND c.relkind IN ('r', 'p')) ++ LEFT JOIN information_schema.columns co ON (co.table_schema = n.nspname ++ AND co.table_name = c.relname ++ AND (co.data_type = 'USER-DEFINED' OR co.is_generated = 'ALWAYS')) ++ LEFT JOIN pg_inherits i ON (c.oid = i.inhrelid) ++ -- issue#99 added join ++ LEFT JOIN pg_tablespace ts ON (c.reltablespace = ts.oid) ++ ORDER BY c.relkind DESC, c.relname + LOOP + cnt := cnt + 1; +- IF ddl_only THEN +- RAISE INFO '%', qry; ++ IF l_child IS NULL THEN ++ bChild := False; + ELSE +- EXECUTE qry; ++ bChild := True; + END IF; +- END LOOP; +- EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; +- RAISE NOTICE ' FKEYS cloned: %', LPAD(cnt::text, 5, ' '); +- +--- Create views +- action := 'Views'; +- cnt := 0; +- FOR object IN +- SELECT table_name::text, +- view_definition +- FROM information_schema.views +- WHERE table_schema = quote_ident(source_schema) +- +- LOOP +- cnt := cnt + 1; +- buffer := quote_ident(dest_schema) || '.' || quote_ident(object); +- SELECT view_definition INTO v_def +- FROM information_schema.views +- WHERE table_schema = quote_ident(source_schema) +- AND table_name = quote_ident(object); ++ IF bDebug THEN RAISE NOTICE 'DEBUG: TABLE START --> table=% bRelispart=NA relkind=% bChild=%',tblname, relknd, bChild; END IF; + +- IF ddl_only THEN +- RAISE INFO '%', 'CREATE OR REPLACE VIEW ' || buffer || ' AS ' || v_def || ';' ; +- ELSE +- EXECUTE 'CREATE OR REPLACE VIEW ' || buffer || ' AS ' || v_def || ';' ; ++ IF data_type = 'USER-DEFINED' THEN ++ -- RAISE NOTICE ' Table (%) has column(s) with user-defined types so using get_table_ddl() instead of CREATE TABLE LIKE construct.',tblname; ++ cnt :=cnt; + END IF; +- END LOOP; +- RAISE NOTICE ' VIEWS cloned: %', LPAD(cnt::text, 5, ' '); +- +- -- Create Materialized views +- action := 'Mat. Views'; +- cnt := 0; +- FOR object IN +- SELECT matviewname::text, +- definition +- FROM pg_catalog.pg_matviews +- WHERE schemaname = quote_ident(source_schema) +- +- LOOP +- cnt := cnt + 1; +- buffer := dest_schema || '.' || quote_ident(object); +- SELECT replace(definition,';','') INTO v_def +- FROM pg_catalog.pg_matviews +- WHERE schemaname = quote_ident(source_schema) +- AND matviewname = quote_ident(object); +- +- IF include_recs THEN +- EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || v_def || ';' ; +- ELSE +- IF ddl_only THEN +- RAISE INFO '%', 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || v_def || ' WITH NO DATA;' ; +- ELSE +- EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || v_def || ' WITH NO DATA;' ; +- END IF; ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); ++ buffer2 := ''; ++ IF relpersist = 'u' THEN ++ buffer2 := 'UNLOGGED '; ++ END IF; ++ IF relknd = 'r' THEN ++ IF bDDLOnly THEN ++ IF data_type = 'USER-DEFINED' THEN ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ RAISE INFO '%', buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; ++ END IF; ++ ELSE ++ IF NOT bChild THEN ++ RAISE INFO '%', 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL);'; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; ++ END IF; + +- END IF; ++ -- issue#99 ++ IF tblspace <> 'pg_default' THEN ++ -- replace with user-defined tablespace ++ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; ++ RAISE INFO 'ALTER TABLE IF EXISTS % SET TABLESPACE %;', quote_ident(dest_schema) || '.' || tblname, tblspace; ++ END IF; ++ ELSE ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ RAISE INFO '%', buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; ++ END IF; ++ END IF; ++ END IF; ++ ELSE ++ IF data_type = 'USER-DEFINED' THEN ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef01:%', buffer3; END IF; ++ -- #82: Table def should be fully qualified with target schema, ++ -- so just make search path = public to handle extension types that should reside in public schema ++ v_dummy = 'public'; ++ SELECT set_config('search_path', v_dummy, false) into v_dummy; ++ EXECUTE buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ELSE ++ IF (NOT bChild) THEN ++ buffer3 := 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL)'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef02:%', buffer3; END IF; ++ EXECUTE buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ++ -- issue#99 ++ IF tblspace <> 'pg_default' THEN ++ -- replace with user-defined tablespace ++ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' SET TABLESPACE ' || tblspace; ++ EXECUTE buffer3; ++ END IF; ++ ++ ELSE ++ -- FIXED #65, #67 ++ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); ++ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ ++ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ -- set client_min_messages higher to avoid messages like this: ++ -- NOTICE: merging column "city_id" with inherited definition ++ set client_min_messages = 'WARNING'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef03:%', buffer3; END IF; ++ EXECUTE buffer3; ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; ++ lastsql = buffer3; ++ EXECUTE buffer3; ++ END IF; ++ ++ -- reset it back, only get these for inheritance-based tables ++ set client_min_messages = 'notice'; ++ END IF; ++ END IF; ++ -- Add table comment. ++ IF ocomment IS NOT NULL THEN ++ EXECUTE 'COMMENT ON TABLE ' || buffer || ' IS ' || quote_literal(ocomment); ++ END IF; ++ END IF; ++ ELSIF relknd = 'p' THEN ++ -- define parent table and assume child tables have already been created based on top level sort order. ++ -- Issue #103 Put the complex query into its own function, get_table_ddl_complex() ++ SELECT * INTO qry FROM public.get_table_ddl_complex(source_schema, dest_schema, tblname, sq_server_version_num); ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 - %', buffer; END IF; ++ ++ -- consider replacing complicated query above with this simple call to get_table_ddl()... ++ -- SELECT * INTO qry FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); ++ -- qry := REPLACE(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || quote_ident(tblname), tblowner; ++ END IF; ++ ELSE ++ -- Issue#103: we need to always set search_path priority to target schema when we execute DDL ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 context: old search path=% new search path=% current search path=%', src_path_old, src_path_new, v_dummy; END IF; ++ SELECT setting INTO spath_tmp FROM pg_settings WHERE name = 'search_path'; ++ IF spath_tmp <> dest_schema THEN ++ -- change it to target schema and don't forget to change it back after we execute the DDL ++ spath = 'SET search_path = "' || dest_schema || '"'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: changing search_path --> %', spath; END IF; ++ EXECUTE spath; ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed to %', v_dummy; END IF; ++ END IF; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04:%', qry; END IF; ++ EXECUTE qry; ++ ++ -- Issue#103 ++ -- Set search path back to what it was ++ spath = 'SET search_path = "' || spath_tmp || '"'; ++ EXECUTE spath; ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed back to %', v_dummy; END IF; ++ ++ -- issue#91 fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; ++ EXECUTE buffer3; ++ END IF; ++ ++ END IF; ++ -- loop for child tables and alter them to attach to parent for specific partition method. ++ -- Issue#103 fix: only loop for the table we are currently processing, tblname! ++ FOR aname, part_range, object IN ++ SELECT quote_ident(dest_schema) || '.' || c1.relname as tablename, pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) as partrange, quote_ident(dest_schema) || '.' || c2.relname as object ++ FROM pg_catalog.pg_class c1, pg_namespace n, pg_catalog.pg_inherits i, pg_class c2 ++ WHERE n.nspname = quote_ident(source_schema) AND c1.relnamespace = n.oid AND c1.relkind = 'r' ++ -- Issue#103: added this condition to only work on current partitioned table. The problem was regression testing previously only worked on one partition table clone case ++ AND c2.relname = tblname AND ++ c1.relispartition AND c1.oid=i.inhrelid AND i.inhparent = c2.oid AND c2.relnamespace = n.oid ORDER BY pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) = 'DEFAULT', ++ c1.oid::pg_catalog.regclass::pg_catalog.text ++ LOOP ++ qry := 'ALTER TABLE ONLY ' || object || ' ATTACH PARTITION ' || aname || ' ' || part_range || ';'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: %',qry; END IF; ++ -- issue#91, not sure if we need to do this for child tables ++ -- issue#95 we dont set ownership here ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ IF NOT bNoOwner THEN ++ NULL; ++ END IF; ++ ELSE ++ EXECUTE qry; ++ IF NOT bNoOwner THEN ++ NULL; ++ END IF; ++ END IF; ++ END LOOP; ++ END IF; ++ ++ -- INCLUDING ALL creates new index names, we restore them to the old name. ++ -- There should be no conflicts since they live in different schemas ++ FOR ix_old_name, ix_new_name IN ++ SELECT old.indexname, new.indexname ++ FROM pg_indexes old, pg_indexes new ++ WHERE old.schemaname = source_schema ++ AND new.schemaname = dest_schema ++ AND old.tablename = new.tablename ++ AND old.tablename = tblname ++ AND old.indexname <> new.indexname ++ AND regexp_replace(old.indexdef, E'.*USING','') = regexp_replace(new.indexdef, E'.*USING','') ++ ORDER BY old.indexdef, new.indexdef ++ LOOP ++ lastsql = ''; ++ IF bDDLOnly THEN ++ RAISE INFO '%', 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; ++ ELSE ++ -- The SELECT query above may return duplicate names when a column is ++ -- indexed twice the same manner with 2 different names. Therefore, to ++ -- avoid a 'relation "xxx" already exists' we test if the index name ++ -- is in use or free. Skipping existing index will fallback on unused ++ -- ones and every duplicate will be mapped to distinct old names. ++ IF NOT EXISTS ( ++ SELECT TRUE ++ FROM pg_indexes ++ WHERE schemaname = dest_schema ++ AND tablename = tblname ++ AND indexname = quote_ident(ix_old_name)) ++ AND EXISTS ( ++ SELECT TRUE ++ FROM pg_indexes ++ WHERE schemaname = dest_schema ++ AND tablename = tblname ++ AND indexname = quote_ident(ix_new_name)) ++ THEN ++ EXECUTE 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; ++ END IF; ++ END IF; ++ END LOOP; + ++ IF bData THEN ++ -- Insert records from source table ++ ++ -- 2021-03-03 MJV FIX ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); ++ ++ -- Issue#86 fix: ++ -- IF data_type = 'USER-DEFINED' THEN ++ IF bDebug THEN RAISE NOTICE 'DEBUG: includerecs branch table=% data_type=% isgenerated=%', tblname, data_type, isGenerated; END IF; ++ IF data_type = 'USER-DEFINED' OR isGenerated = 'ALWAYS' THEN ++ ++ -- RAISE WARNING 'Bypassing copying rows for table (%) with user-defined data types. You must copy them manually.', tblname; ++ -- won't work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address; ++ -- Issue#101 --> INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address; ++ ++ -- Issue#79 implementation follows ++ -- COPY sample.statuses(id, s) TO '/tmp/statuses.txt' WITH DELIMITER AS ','; ++ -- COPY sample_clone1.statuses FROM '/tmp/statuses.txt' (DELIMITER ',', NULL ''); ++ -- Issue#101 fix: use text cast to get around the problem. ++ IF bFileCopy THEN ++ IF bWindows THEN ++ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''C:\WINDOWS\TEMP\cloneschema.tmp'' WITH DELIMITER AS '','';'; ++ tblarray2 := tblarray2 || buffer2; ++ -- Issue #81 reformat COPY command for upload ++ -- buffer2:= 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL '''');'; ++ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; ++ tblarray2 := tblarray2 || buffer2; ++ ELSE ++ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''/tmp/cloneschema.tmp'' WITH DELIMITER AS '','';'; ++ tblarray2 := tblarray2 || buffer2; ++ -- Issue #81 reformat COPY command for upload ++ -- buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL '''');'; ++ -- works--> COPY sample.timestamptbl2 FROM '/tmp/cloneschema.tmp' WITH (DELIMITER ',', NULL '\N', FORMAT CSV) ; ++ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; ++ tblarray2 := tblarray2 || buffer2; ++ END IF; ++ ELSE ++ -- Issue#101: assume direct copy with text cast, add to separate array ++ SELECT * INTO buffer3 FROM public.get_insert_stmt_ddl(quote_ident(source_schema), quote_ident(dest_schema), quote_ident(tblname), True); ++ tblarray3 := tblarray3 || buffer3; ++ END IF; ++ ELSE ++ -- bypass child tables since we populate them when we populate the parents ++ IF bDebug THEN RAISE NOTICE 'DEBUG: tblname=% bRelispart=NA relknd=% l_child=% bChild=%', tblname, relknd, l_child, bChild; END IF; ++ ++ IF NOT bChild THEN ++ -- Issue#75: Must defer population of tables until child tables have been added to parents ++ -- Issue#101 Offer alternative of copy to/from file. Although originally intended for tables with UDTs, it is now expanded to handle all cases for performance improvement perhaps for large tables. ++ -- buffer2 := 'INSERT INTO ' || buffer || buffer3 || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; ++ buffer2 := 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: buffer2=%',buffer2; END IF; ++ IF bFileCopy THEN ++ tblarray2:= tblarray2 || buffer2; ++ ELSE ++ tblarray := tblarray || buffer2; ++ END IF; ++ END IF; ++ END IF; ++ END IF; ++ ++ -- Issue#61 FIX: use set_config for empty string ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ ++ FOR column_, default_ IN ++ SELECT column_name::text, ++ REPLACE(column_default::text, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') ++ FROM information_schema.COLUMNS ++ WHERE table_schema = source_schema ++ AND TABLE_NAME = tblname ++ AND column_default LIKE 'nextval(%' || quote_ident(source_schema) || '%::regclass)' ++ LOOP ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on column name ++ buffer2 = 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || quote_ident(column_) || ' SET DEFAULT ' || default_ || ';'; ++ IF bDDLOnly THEN ++ -- May need to come back and revisit this since previous sql will not return anything since no schema as created! ++ RAISE INFO '%', buffer2; ++ ELSE ++ EXECUTE buffer2; ++ END IF; + END LOOP; +- RAISE NOTICE ' MAT VIEWS cloned: %', LPAD(cnt::text, 5, ' '); + +--- Create functions +- action := 'Functions'; ++ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; ++ END LOOP; ++ END IF; ++ -- end of 90600 branch ++ ++ RAISE NOTICE ' TABLES cloned: %', LPAD(cnt::text, 5, ' '); ++ ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path=%', v_dummy; END IF; ++ ++ -- Assigning sequences to table columns. ++ action := 'Sequences assigning'; + cnt := 0; +- FOR func_oid IN +- SELECT oid +- FROM pg_proc +- WHERE pronamespace = src_oid ++ FOR object IN ++ SELECT sequence_name::text ++ FROM information_schema.sequences ++ WHERE sequence_schema = quote_ident(source_schema) + LOOP + cnt := cnt + 1; +- SELECT pg_get_functiondef(func_oid) INTO qry; +- SELECT replace(qry, source_schema, dest_schema) INTO dest_qry; +- IF ddl_only THEN +- RAISE INFO '%', dest_qry; ++ srctbl := quote_ident(source_schema) || '.' || quote_ident(object); ++ ++ -- Get owning column, inspired from Sadique Ali post at: ++ -- https://sadique.io/blog/2019/05/07/viewing-sequence-ownership-information-in-postgres/ ++ -- Fixed via pull request#109 ++ SELECT ' OWNED BY ' ++ || quote_ident(dest_schema) ++ || '.' ++ || quote_ident(dc.relname) ++ || '.' ++ || quote_ident(a.attname) ++ INTO sq_owned ++ FROM pg_class AS c ++ JOIN pg_namespace n ON c.relnamespace = n.oid ++ JOIN pg_depend AS d ON c.relfilenode = d.objid ++ JOIN pg_class AS dc ON ( ++ d.refobjid = dc.relfilenode ++ AND dc.relnamespace = n.oid ++ ) ++ JOIN pg_attribute AS a ON ( ++ a.attnum = d.refobjsubid ++ AND a.attrelid = d.refobjid ++ ) ++ WHERE n.nspname = quote_ident(source_schema) ++ AND c.relkind = 'S' ++ AND c.relname = object; ++ ++ IF sq_owned IS NOT NULL THEN ++ qry := 'ALTER SEQUENCE ' ++ || quote_ident(dest_schema) ++ || '.' ++ || quote_ident(object) ++ || sq_owned ++ || ';'; ++ ++ IF bDDLOnly THEN ++ RAISE NOTICE 'DEBUG: %',qry; ++ RAISE INFO '%', qry; ++ ELSE ++ EXECUTE qry; ++ END IF; ++ ++ END IF; ++ ++ END LOOP; ++ RAISE NOTICE ' SEQUENCES set: %', LPAD(cnt::text, 5, ' '); ++ ++ -- Update IDENTITY sequences to the last value, bypass 9.6 versions ++ IF sq_server_version_num > 90624 THEN ++ action := 'Identity updating'; ++ cnt := 0; ++ FOR object, sq_last_value IN ++ SELECT sequencename::text, COALESCE(last_value, -999) from pg_sequences where schemaname = quote_ident(source_schema) ++ AND NOT EXISTS ++ (select 1 from information_schema.sequences where sequence_schema = quote_ident(source_schema) and sequence_name = sequencename) ++ LOOP ++ IF sq_last_value = -999 THEN ++ continue; ++ END IF; ++ cnt := cnt + 1; ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(object); ++ IF bData THEN ++ EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; ++ ELSE ++ if bDDLOnly THEN ++ -- fix#63 ++ RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; ++ ELSE ++ -- fix#63 ++ EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; ++ END IF; ++ END IF; ++ END LOOP; ++ -- Fixed Issue#107: set lpad from 2 to 5 ++ RAISE NOTICE ' IDENTITIES set: %', LPAD(cnt::text, 5, ' '); ++ ELSE ++ -- Fixed Issue#107: set lpad from 2 to 5 ++ RAISE NOTICE ' IDENTITIES set: %', LPAD('-1'::text, 5, ' '); ++ END IF; ++ ++ -- Issue#78 forces us to defer FKeys until the end since we previously did row copies before FKeys ++ -- add FK constraint ++ -- action := 'FK Constraints'; ++ ++ -- Issue#62: Add comments on indexes, and then removed them from here and reworked later below. ++ ++ -- Issue 90: moved functions to here, before views or MVs that might use them ++ -- Create functions ++ action := 'Functions'; ++ cnt := 0; ++ -- MJV FIX per issue# 34 ++ -- SET search_path = ''; ++ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; ++ ++ -- Fixed Issue#65 ++ -- Fixed Issue#97 ++ -- FOR func_oid IN SELECT oid FROM pg_proc WHERE pronamespace = src_oid AND prokind != 'a' ++ IF is_prokind THEN ++ FOR func_oid, func_owner, func_name, func_args, func_argno, buffer3 IN ++ SELECT p.oid, pg_catalog.pg_get_userbyid(p.proowner), p.proname, oidvectortypes(p.proargtypes), p.pronargs, ++ CASE WHEN prokind = 'p' THEN 'PROCEDURE' WHEN prokind = 'f' THEN 'FUNCTION' ELSE '' END ++ FROM pg_proc p WHERE p.pronamespace = src_oid AND p.prokind != 'a' ++ LOOP ++ cnt := cnt + 1; ++ SELECT pg_get_functiondef(func_oid) ++ INTO qry; ++ ++ SELECT replace(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO dest_qry; ++ IF bDDLOnly THEN ++ RAISE INFO '%;', dest_qry; ++ -- Issue#91 Fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ IF func_argno = 0 THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER % %() OWNER TO %', buffer3, quote_ident(dest_schema) || '.' || quote_ident(func_name), '"' || func_owner || '";'; ++ ELSE ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO 'ALTER % % OWNER TO %', buffer3, quote_ident(dest_schema) || '.' || quote_ident(func_name) || '(' || func_args || ')', '"' || func_owner || '";'; ++ END IF; ++ END IF; ++ ELSE ++ IF bDebug THEN RAISE NOTICE 'DEBUG: %', dest_qry; END IF; ++ EXECUTE dest_qry; ++ ++ -- Issue#91 Fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ IF func_argno = 0 THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ dest_qry = 'ALTER ' || buffer3 || ' ' || quote_ident(dest_schema) || '.' || quote_ident(func_name) || '() OWNER TO ' || '"' || func_owner || '";'; ++ ELSE ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ dest_qry = 'ALTER ' || buffer3 || ' ' || quote_ident(dest_schema) || '.' || quote_ident(func_name) || '(' || func_args || ') OWNER TO ' || '"' || func_owner || '";'; ++ END IF; ++ END IF; ++ EXECUTE dest_qry; ++ END IF; ++ END LOOP; ++ ELSE ++ FOR func_oid IN SELECT oid ++ FROM pg_proc ++ WHERE pronamespace = src_oid AND not proisagg ++ LOOP ++ cnt := cnt + 1; ++ SELECT pg_get_functiondef(func_oid) INTO qry; ++ SELECT replace(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO dest_qry; ++ IF bDDLOnly THEN ++ RAISE INFO '%;', dest_qry; ++ ELSE ++ EXECUTE dest_qry; ++ END IF; ++ END LOOP; ++ END IF; ++ ++ -- Create aggregate functions. ++ -- Fixed Issue#65 ++ -- FOR func_oid IN SELECT oid FROM pg_proc WHERE pronamespace = src_oid AND prokind = 'a' ++ IF is_prokind THEN ++ FOR func_oid IN ++ SELECT oid ++ FROM pg_proc ++ WHERE pronamespace = src_oid AND prokind = 'a' ++ LOOP ++ cnt := cnt + 1; ++ SELECT ++ 'CREATE AGGREGATE ' ++ || dest_schema ++ || '.' ++ || p.proname ++ || '(' ++ -- || format_type(a.aggtranstype, NULL) ++ -- Issue#65 Fixes for specific datatype mappings ++ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8' ++ WHEN format_type(a.aggtranstype, NULL) = 'anyarray' THEN 'anyelement' ++ ELSE format_type(a.aggtranstype, NULL) END ++ || ') (sfunc = ' ++ || regexp_replace(a.aggtransfn::text, '(^|\W)' || quote_ident(source_schema) || '\.', '\1' || quote_ident(dest_schema) || '.') ++ || ', stype = ' ++ -- || format_type(a.aggtranstype, NULL) ++ -- Issue#65 Fixes for specific datatype mappings ++ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8[]' ELSE format_type(a.aggtranstype, NULL) END ++ || CASE ++ WHEN op.oprname IS NULL THEN '' ++ ELSE ', sortop = ' || op.oprname ++ END ++ || CASE ++ WHEN a.agginitval IS NULL THEN '' ++ ELSE ', initcond = ''' || a.agginitval || '''' ++ END ++ || ')' ++ INTO dest_qry ++ FROM pg_proc p ++ JOIN pg_aggregate a ON a.aggfnoid = p.oid ++ LEFT JOIN pg_operator op ON op.oid = a.aggsortop ++ WHERE p.oid = func_oid; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%;', dest_qry; ++ ELSE ++ EXECUTE dest_qry; ++ END IF; ++ ++ END LOOP; ++ RAISE NOTICE ' FUNCTIONS cloned: %', LPAD(cnt::text, 5, ' '); ++ + ELSE +- EXECUTE dest_qry; ++ FOR func_oid IN SELECT oid FROM pg_proc WHERE pronamespace = src_oid AND proisagg ++ LOOP ++ cnt := cnt + 1; ++ SELECT ++ 'CREATE AGGREGATE ' ++ || dest_schema ++ || '.' ++ || p.proname ++ || '(' ++ -- || format_type(a.aggtranstype, NULL) ++ -- Issue#65 Fixes for specific datatype mappings ++ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8' ++ WHEN format_type(a.aggtranstype, NULL) = 'anyarray' THEN 'anyelement' ++ ELSE format_type(a.aggtranstype, NULL) END ++ || ') (sfunc = ' ++ || regexp_replace(a.aggtransfn::text, '(^|\W)' || quote_ident(source_schema) || '\.', '\1' || quote_ident(dest_schema) || '.') ++ || ', stype = ' ++ -- || format_type(a.aggtranstype, NULL) ++ -- Issue#65 Fixes for specific datatype mappings ++ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8[]' ELSE format_type(a.aggtranstype, NULL) END ++ || CASE ++ WHEN op.oprname IS NULL THEN '' ++ ELSE ', sortop = ' || op.oprname ++ END ++ || CASE ++ WHEN a.agginitval IS NULL THEN '' ++ ELSE ', initcond = ''' || a.agginitval || '''' ++ END ++ || ')' ++ INTO dest_qry ++ FROM pg_proc p ++ JOIN pg_aggregate a ON a.aggfnoid = p.oid ++ LEFT JOIN pg_operator op ON op.oid = a.aggsortop ++ WHERE p.oid = func_oid; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%;', dest_qry; ++ ELSE ++ EXECUTE dest_qry; ++ END IF; ++ ++ END LOOP; ++ RAISE NOTICE ' FUNCTIONS cloned: %', LPAD(cnt::text, 5, ' '); + END IF; + ++ -- Create views ++ action := 'Views'; ++ ++ -- Issue#61 FIX: use set_config for empty string ++ -- MJV FIX #43: also had to reset search_path from source schema to empty. ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) ++ INTO v_dummy; ++ ++ cnt := 0; ++ --FOR object IN ++ -- SELECT table_name::text, view_definition ++ -- FROM information_schema.views ++ -- WHERE table_schema = quote_ident(source_schema) ++ ++ -- Issue#73 replace loop query to handle dependencies ++ -- Issue#91 get view_owner ++ FOR srctbl, aname, view_owner, object IN ++ WITH RECURSIVE views AS ( ++ SELECT n.nspname as schemaname, v.relname as tablename, v.oid::regclass AS viewname, ++ v.relkind = 'm' AS is_materialized, pg_catalog.pg_get_userbyid(v.relowner) as owner, ++ 1 AS level ++ FROM pg_depend AS d ++ JOIN pg_rewrite AS r ++ ON r.oid = d.objid ++ JOIN pg_class AS v ++ ON v.oid = r.ev_class ++ JOIN pg_namespace n ++ ON n.oid = v.relnamespace ++ -- WHERE v.relkind IN ('v', 'm') ++ WHERE v.relkind IN ('v') ++ AND d.classid = 'pg_rewrite'::regclass ++ AND d.refclassid = 'pg_class'::regclass ++ AND d.deptype = 'n' ++ UNION ++ -- add the views that depend on these ++ SELECT n.nspname as schemaname, v.relname as tablename, v.oid::regclass AS viewname, ++ v.relkind = 'm', pg_catalog.pg_get_userbyid(v.relowner) as owner, ++ views.level + 1 ++ FROM views ++ JOIN pg_depend AS d ++ ON d.refobjid = views.viewname ++ JOIN pg_rewrite AS r ++ ON r.oid = d.objid ++ JOIN pg_class AS v ++ ON v.oid = r.ev_class ++ JOIN pg_namespace n ++ ON n.oid = v.relnamespace ++ -- WHERE v.relkind IN ('v', 'm') ++ WHERE v.relkind IN ('v') ++ AND d.classid = 'pg_rewrite'::regclass ++ AND d.refclassid = 'pg_class'::regclass ++ AND d.deptype = 'n' ++ AND v.oid <> views.viewname ++ ) ++ SELECT tablename, viewname, owner, format('CREATE OR REPLACE%s VIEW %s AS%s', ++ CASE WHEN is_materialized ++ THEN ' MATERIALIZED' ++ ELSE '' ++ END, ++ viewname, ++ pg_get_viewdef(viewname)) ++ FROM views ++ WHERE schemaname = quote_ident(source_schema) ++ GROUP BY schemaname, tablename, viewname, owner, is_materialized ++ ORDER BY max(level), schemaname, tablename ++ LOOP ++ cnt := cnt + 1; ++ -- Issue#73 replace logic based on new loop sql ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(aname); ++ -- MJV FIX: #43 ++ -- SELECT view_definition INTO v_def ++ -- SELECT REPLACE(view_definition, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO v_def ++ -- FROM information_schema.views ++ -- WHERE table_schema = quote_ident(source_schema) ++ -- AND table_name = quote_ident(object); ++ SELECT REPLACE(object, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO v_def; ++ -- NOTE: definition already includes the closing statement semicolon ++ SELECT REPLACE(aname, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO buffer3; ++ IF bDDLOnly THEN ++ RAISE INFO '%', v_def; ++ -- Issue#91 Fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ -- RAISE INFO 'ALTER TABLE % OWNER TO %', buffer3, view_owner || ';'; ++ RAISE INFO 'ALTER TABLE % OWNER TO %', buffer3, '"' ||view_owner || '";'; ++ END IF; ++ ELSE ++ -- EXECUTE 'CREATE OR REPLACE VIEW ' || buffer || ' AS ' || v_def; ++ EXECUTE v_def; ++ -- Issue#73: commented out comment logic for views since we do it elsewhere now. ++ -- Issue#91 Fix ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ v_def = 'ALTER TABLE ' || buffer3 || ' OWNER TO ' || '"' || view_owner || '";'; ++ EXECUTE v_def; ++ END IF; ++ END IF; + END LOOP; +- RAISE NOTICE ' FUNCTIONS cloned: %', LPAD(cnt::text, 5, ' '); ++ RAISE NOTICE ' VIEWS cloned: %', LPAD(cnt::text, 5, ' '); ++ ++ -- Create Materialized views ++ action := 'Mat. Views'; ++ cnt := 0; ++ -- Issue#91 get view_owner ++ FOR object, view_owner, v_def IN ++ SELECT matviewname::text, '"' || matviewowner::text || '"', replace(definition,';','') FROM pg_catalog.pg_matviews WHERE schemaname = quote_ident(source_schema) ++ LOOP ++ cnt := cnt + 1; ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on target schema and object ++ buffer := quote_ident(dest_schema) || '.' || quote_ident(object); ++ ++ -- MJV FIX: #72 remove source schema in MV def ++ SELECT REPLACE(v_def, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO buffer2; ++ ++ IF bData THEN ++ -- issue#98 defer creation until after regular tables are populated. Also defer the ownership as well. ++ -- EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH DATA;' ; ++ buffer3 = 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH DATA;'; ++ mvarray := mvarray || buffer3; ++ ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- buffer3 = 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; ++ -- EXECUTE buffer3; ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; ++ mvarray := mvarray || buffer3; ++ END IF; ++ ELSE ++ IF bDDLOnly THEN ++ RAISE INFO '%', 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH NO DATA;' ; ++ -- Issue#91 ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ RAISE INFO '%', 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; ++ END IF; ++ ELSE ++ EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH NO DATA;' ; ++ -- Issue#91 ++ -- issue#95 ++ IF NOT bNoOwner THEN ++ -- Fixed Issue#108: double-quote roles in case they have special characters ++ buffer3 = 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; ++ EXECUTE buffer3; ++ END IF; ++ END IF; ++ END IF; ++ SELECT coalesce(obj_description(oid), '') into adef from pg_class where relkind = 'm' and relname = object; ++ IF adef <> '' THEN ++ IF bDDLOnly THEN ++ RAISE INFO '%', 'COMMENT ON MATERIALIZED VIEW ' || quote_ident(dest_schema) || '.' || object || ' IS ''' || adef || ''';'; ++ ELSE ++ -- Issue#$98: also defer if copy rows is on since we defer MVIEWS in that case ++ IF bData THEN ++ buffer3 = 'COMMENT ON MATERIALIZED VIEW ' || quote_ident(dest_schema) || '.' || object || ' IS ''' || adef || ''';'; ++ mvarray = mvarray || buffer3; ++ ELSE ++ EXECUTE 'COMMENT ON MATERIALIZED VIEW ' || quote_ident(dest_schema) || '.' || object || ' IS ''' || adef || ''';'; ++ END IF; ++ ++ END IF; ++ END IF; ++ ++ FOR aname, adef IN ++ SELECT indexname, replace(indexdef, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') as newdef FROM pg_indexes where schemaname = quote_ident(source_schema) and tablename = object order by indexname ++ LOOP ++ IF bDDLOnly THEN ++ RAISE INFO '%', adef || ';'; ++ ELSE ++ EXECUTE adef || ';'; ++ END IF; ++ END LOOP; ++ ++ END LOOP; ++ RAISE NOTICE ' MAT VIEWS cloned: %', LPAD(cnt::text, 5, ' '); ++ ++ -- Issue 90 Move create functions to before views + + -- MV: Create Triggers ++ ++ -- MJV FIX: #38 ++ -- EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; ++ ++ -- Issue#61 FIX: use set_config for empty string ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ + action := 'Triggers'; + cnt := 0; + FOR arec IN +- SELECT trigger_schema, trigger_name, event_object_table, action_order, action_condition, action_statement, action_orientation, action_timing, array_to_string(array_agg(event_manipulation::text), ' OR '), +- 'CREATE TRIGGER ' || trigger_name || ' ' || action_timing || ' ' || array_to_string(array_agg(event_manipulation::text), ' OR ') || ' ON ' || quote_ident(dest_schema) || '.' || event_object_table || +- ' FOR EACH ' || action_orientation || ' ' || action_statement || ';' as TRIG_DDL +- FROM information_schema.triggers where trigger_schema = quote_ident(source_schema) GROUP BY 1,2,3,4,5,6,7,8 ++ -- 2021-03-09 MJV FIX: #40 fixed sql to get the def using pg_get_triggerdef() sql ++ SELECT n.nspname, c.relname, t.tgname, p.proname, REPLACE(pg_get_triggerdef(t.oid), quote_ident(source_schema), quote_ident(dest_schema)) || ';' AS trig_ddl ++ FROM pg_trigger t, pg_class c, pg_namespace n, pg_proc p ++ WHERE n.nspname = quote_ident(source_schema) ++ AND n.oid = c.relnamespace ++ AND c.relkind in ('r','p') ++ AND n.oid = p.pronamespace ++ AND c.oid = t.tgrelid ++ AND p.oid = t.tgfoid ++ ORDER BY c.relname, t.tgname + LOOP + BEGIN + cnt := cnt + 1; +- IF ddl_only THEN ++ IF bDDLOnly THEN + RAISE INFO '%', arec.trig_ddl; + ELSE + EXECUTE arec.trig_ddl; +@@ -474,55 +2444,383 @@ + END LOOP; + RAISE NOTICE ' TRIGGERS cloned: %', LPAD(cnt::text, 5, ' '); + +- -- --------------------- +- -- MV: Permissions: Defaults +- -- --------------------- +- action := 'PRIVS: Defaults'; ++ ++ -- MV: Create Rules ++ -- Fixes Issue#59 Implement Rules ++ action := 'Rules'; + cnt := 0; + FOR arec IN +- SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "owner", n.nspname AS schema, +- CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS atype, +- d.defaclacl as defaclacl, pg_catalog.array_to_string(d.defaclacl, ',') as defaclstr +- FROM pg_catalog.pg_default_acl d LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = d.defaclnamespace) WHERE n.nspname IS NOT NULL and n.nspname = quote_ident(source_schema) ORDER BY 3, 2, 1 ++ SELECT regexp_replace(definition, E'[\\n\\r]+', ' ', 'g' ) as definition ++ FROM pg_rules ++ WHERE schemaname = quote_ident(source_schema) + LOOP +- BEGIN +- -- RAISE NOTICE 'owner=% type=% defaclacl=% defaclstr=%', arec.owner, arec.atype, arec.defaclacl, arec.defaclstr; ++ cnt := cnt + 1; ++ buffer := REPLACE(arec.definition, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ END LOOP; ++ RAISE NOTICE ' RULES cloned: %', LPAD(cnt::text, 5, ' '); ++ ++ ++ -- MV: Create Policies ++ -- Fixes Issue#66 Implement Security policies for RLS ++ action := 'Policies'; ++ cnt := 0; ++ -- #106 Handle 9.6 which doesn't have "permissive" ++ IF sq_server_version_num > 90624 THEN ++ FOR arec IN ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on policy, tablename ++ SELECT schemaname as schemaname, tablename as tablename, 'CREATE POLICY ' || policyname || ' ON ' || quote_ident(dest_schema) || '.' || quote_ident(tablename) || ' AS ' || permissive || ' FOR ' || cmd || ' TO ' ++ || array_to_string(roles, ',', '*') || ' USING (' || regexp_replace(qual, E'[\\n\\r]+', ' ', 'g' ) || ')' ++ || CASE WHEN with_check IS NOT NULL THEN ' WITH CHECK (' ELSE '' END || coalesce(with_check, '') || CASE WHEN with_check IS NOT NULL THEN ');' ELSE ';' END as definition ++ FROM pg_policies ++ WHERE schemaname = quote_ident(source_schema) ++ ORDER BY policyname ++ LOOP ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.definition; ++ ELSE ++ EXECUTE arec.definition; ++ END IF; ++ ++ -- Issue#76: Enable row security if indicated ++ SELECT c.relrowsecurity INTO abool FROM pg_class c, pg_namespace n where n.nspname = quote_ident(arec.schemaname) AND n.oid = c.relnamespace AND c.relname = quote_ident(arec.tablename) and c.relkind = 'r'; ++ IF abool THEN ++ buffer = 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || arec.tablename || ' ENABLE ROW LEVEL SECURITY;'; ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ END IF; ++ END LOOP; ++ ELSE ++ -- handle 9.6 versions ++ FOR arec IN ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on policy, tablename ++ SELECT schemaname as schemaname, tablename as tablename, 'CREATE POLICY ' || policyname || ' ON ' || quote_ident(dest_schema) || '.' || quote_ident(tablename) || ' FOR ' || cmd || ' TO ' ++ || array_to_string(roles, ',', '*') || ' USING (' || regexp_replace(qual, E'[\\n\\r]+', ' ', 'g' ) || ')' ++ || CASE WHEN with_check IS NOT NULL THEN ' WITH CHECK (' ELSE '' END || coalesce(with_check, '') || CASE WHEN with_check IS NOT NULL THEN ');' ELSE ';' END as definition ++ FROM pg_policies ++ WHERE schemaname = quote_ident(source_schema) ++ ORDER BY policyname ++ LOOP ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.definition; ++ ELSE ++ EXECUTE arec.definition; ++ END IF; ++ ++ -- Issue#76: Enable row security if indicated ++ SELECT c.relrowsecurity INTO abool FROM pg_class c, pg_namespace n where n.nspname = quote_ident(arec.schemaname) AND n.oid = c.relnamespace AND c.relname = quote_ident(arec.tablename) and c.relkind = 'r'; ++ IF abool THEN ++ buffer = 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || arec.tablename || ' ENABLE ROW LEVEL SECURITY;'; ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ END IF; ++ END LOOP; ++ END IF; ++ RAISE NOTICE ' POLICIES cloned: %', LPAD(cnt::text, 5, ' '); ++ ++ ++ -- MJV Fixed #62 for comments (PASS 1) ++ action := 'Comments1'; ++ cnt := 0; ++ FOR qry IN ++ -- Issue#74 Fix: Change schema from source to target. Also, do not include comments on foreign tables since we do not clone foreign tables at this time. ++ SELECT 'COMMENT ON ' || CASE WHEN c.relkind in ('r','p') AND a.attname IS NULL THEN 'TABLE ' WHEN c.relkind in ('r','p') AND ++ a.attname IS NOT NULL THEN 'COLUMN ' WHEN c.relkind = 'f' THEN 'FOREIGN TABLE ' WHEN c.relkind = 'm' THEN 'MATERIALIZED VIEW ' WHEN c.relkind = 'v' THEN 'VIEW ' ++ WHEN c.relkind = 'i' THEN 'INDEX ' WHEN c.relkind = 'S' THEN 'SEQUENCE ' ELSE 'XX' END || quote_ident(dest_schema) || '.' || CASE WHEN c.relkind in ('r','p') AND ++ -- Issue#78: handle case-sensitive names with quote_ident() ++ a.attname IS NOT NULL THEN quote_ident(c.relname) || '.' || a.attname ELSE quote_ident(c.relname) END || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_class c ++ JOIN pg_namespace n ON (n.oid = c.relnamespace) ++ LEFT JOIN pg_description d ON (c.oid = d.objoid) ++ LEFT JOIN pg_attribute a ON (c.oid = a.attrelid ++ AND a.attnum > 0 and a.attnum = d.objsubid) ++ WHERE c.relkind <> 'f' AND d.description IS NOT NULL AND n.nspname = quote_ident(source_schema) ++ ORDER BY ddl ++ LOOP ++ cnt := cnt + 1; ++ ++ -- BAD : "COMMENT ON SEQUENCE sample_clone2.CaseSensitive_ID_seq IS 'just a comment on CaseSensitive sequence';" ++ -- GOOD: "COMMENT ON SEQUENCE "CaseSensitive_ID_seq" IS 'just a comment on CaseSensitive sequence';" ++ ++ -- Issue#98 For MVs we create comments when we create the MVs ++ IF substring(qry,1,28) = 'COMMENT ON MATERIALIZED VIEW' THEN ++ IF bDebug THEN RAISE NOTICE 'DEBUG: deferring comments on MVs'; END IF; ++ cnt = cnt - 1; ++ continue; ++ END IF; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ ELSE ++ EXECUTE qry; ++ END IF; ++ END LOOP; ++ RAISE NOTICE ' COMMENTS(1) cloned: %', LPAD(cnt::text, 5, ' '); ++ ++ -- MJV Fixed #62 for comments (PASS 2) ++ action := 'Comments2'; ++ cnt2 := 0; ++ IF is_prokind THEN ++ FOR qry IN ++ -- Issue#74 Fix: Change schema from source to target. ++ SELECT 'COMMENT ON SCHEMA ' || quote_ident(dest_schema) || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ from pg_namespace n, pg_description d where d.objoid = n.oid and n.nspname = quote_ident(source_schema) ++ UNION ++ -- Issue#74 Fix: need to replace source schema inline ++ -- SELECT 'COMMENT ON TYPE ' || pg_catalog.format_type(t.oid, NULL) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl ++ SELECT 'COMMENT ON TYPE ' || REPLACE(pg_catalog.format_type(t.oid, NULL), quote_ident(source_schema), quote_ident(dest_schema)) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl ++ FROM pg_catalog.pg_type t ++ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) ++ AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) ++ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default ++ AND pg_catalog.obj_description(t.oid, 'pg_type') IS NOT NULL and t.typtype = 'c' ++ UNION ++ -- Issue#78: handle case-sensitive names with quote_ident() ++ SELECT 'COMMENT ON COLLATION ' || quote_ident(dest_schema) || '.' || quote_ident(c.collname) || ' IS ''' || pg_catalog.obj_description(c.oid, 'pg_collation') || ''';' as ddl ++ FROM pg_catalog.pg_collation c, pg_catalog.pg_namespace n ++ WHERE n.oid = c.collnamespace AND c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding())) ++ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default AND pg_catalog.obj_description(c.oid, 'pg_collation') IS NOT NULL ++ UNION ++ SELECT 'COMMENT ON ' || CASE WHEN p.prokind = 'f' THEN 'FUNCTION ' WHEN p.prokind = 'p' THEN 'PROCEDURE ' WHEN p.prokind = 'a' THEN 'AGGREGATE ' END || ++ quote_ident(dest_schema) || '.' || p.proname || ' (' || oidvectortypes(p.proargtypes) || ')' ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_catalog.pg_namespace n ++ JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid ++ JOIN pg_description d ON (d.objoid = p.oid) ++ WHERE n.nspname = quote_ident(source_schema) ++ UNION ++ SELECT 'COMMENT ON POLICY ' || p1.policyname || ' ON ' || quote_ident(dest_schema) || '.' || p1.tablename || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_policies p1, pg_policy p2, pg_class c, pg_namespace n, pg_description d ++ WHERE p1.schemaname = n.nspname AND p1.tablename = c.relname AND n.oid = c.relnamespace ++ AND c.relkind in ('r','p') AND p1.policyname = p2.polname AND d.objoid = p2.oid AND p1.schemaname = quote_ident(source_schema) ++ UNION ++ SELECT 'COMMENT ON DOMAIN ' || quote_ident(dest_schema) || '.' || t.typname || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_catalog.pg_type t ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ JOIN pg_catalog.pg_description d ON d.classoid = t.tableoid AND d.objoid = t.oid AND d.objsubid = 0 ++ WHERE t.typtype = 'd' AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default ++ ORDER BY 1 ++ LOOP ++ cnt2 := cnt2 + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ ELSE ++ EXECUTE qry; ++ END IF; ++ END LOOP; ++ ELSE -- must be v 10 or less ++ FOR qry IN ++ -- Issue#74 Fix: Change schema from source to target. ++ SELECT 'COMMENT ON SCHEMA ' || quote_ident(dest_schema) || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ from pg_namespace n, pg_description d where d.objoid = n.oid and n.nspname = quote_ident(source_schema) ++ UNION ++ -- Issue#74 Fix: need to replace source schema inline ++ -- SELECT 'COMMENT ON TYPE ' || pg_catalog.format_type(t.oid, NULL) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl ++ SELECT 'COMMENT ON TYPE ' || REPLACE(pg_catalog.format_type(t.oid, NULL), quote_ident(source_schema), quote_ident(dest_schema)) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl ++ FROM pg_catalog.pg_type t ++ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' ++ FROM pg_catalog.pg_class c ++ WHERE c.oid = t.typrelid)) ++ AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el ++ WHERE el.oid = t.typelem AND el.typarray = t.oid) ++ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default ++ AND pg_catalog.obj_description(t.oid, 'pg_type') IS NOT NULL and t.typtype = 'c' ++ UNION ++ -- FIX Issue#87 by adding double quotes around collation name ++ SELECT 'COMMENT ON COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" IS ''' || pg_catalog.obj_description(c.oid, 'pg_collation') || ''';' as ddl ++ FROM pg_catalog.pg_collation c, pg_catalog.pg_namespace n ++ WHERE n.oid = c.collnamespace AND c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding())) ++ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default AND pg_catalog.obj_description(c.oid, 'pg_collation') IS NOT NULL ++ UNION ++ SELECT 'COMMENT ON ' || CASE WHEN proisagg THEN 'AGGREGATE ' ELSE 'FUNCTION ' END || ++ quote_ident(dest_schema) || '.' || p.proname || ' (' || oidvectortypes(p.proargtypes) || ')' ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_catalog.pg_namespace n ++ JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid ++ JOIN pg_description d ON (d.objoid = p.oid) ++ WHERE n.nspname = quote_ident(source_schema) ++ UNION ++ SELECT 'COMMENT ON POLICY ' || p1.policyname || ' ON ' || quote_ident(dest_schema) || '.' || p1.tablename || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_policies p1, pg_policy p2, pg_class c, pg_namespace n, pg_description d ++ WHERE p1.schemaname = n.nspname AND p1.tablename = c.relname AND n.oid = c.relnamespace ++ AND c.relkind in ('r','p') AND p1.policyname = p2.polname AND d.objoid = p2.oid AND p1.schemaname = quote_ident(source_schema) ++ UNION ++ SELECT 'COMMENT ON DOMAIN ' || quote_ident(dest_schema) || '.' || t.typname || ++ -- Issue#74 Fix ++ -- ' IS ''' || d.description || ''';' as ddl ++ ' IS ' || quote_literal(d.description) || ';' as ddl ++ FROM pg_catalog.pg_type t ++ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace ++ JOIN pg_catalog.pg_description d ON d.classoid = t.tableoid AND d.objoid = t.oid AND d.objsubid = 0 ++ WHERE t.typtype = 'd' AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default ++ ORDER BY 1 ++ LOOP ++ cnt2 := cnt2 + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ ELSE ++ EXECUTE qry; ++ END IF; ++ END LOOP; ++ END IF; ++ RAISE NOTICE ' COMMENTS(2) cloned: %', LPAD(cnt2::text, 5, ' '); + +- FOREACH aclstr IN ARRAY arec.defaclacl +- LOOP +- cnt := cnt + 1; +- -- RAISE NOTICE 'aclstr=%', aclstr; +- -- break up into grantor, grantee, and privs, mydb_update=rwU/mydb_owner +- SELECT split_part(aclstr, '=',1) INTO grantee; +- SELECT split_part(aclstr, '=',2) INTO grantor; +- SELECT split_part(grantor, '/',1) INTO privs; +- SELECT split_part(grantor, '/',2) INTO grantor; +- -- RAISE NOTICE 'grantor=% grantee=% privs=%', grantor, grantee, privs; +- +- IF arec.atype = 'function' THEN +- -- Just having execute is enough to grant all apparently. +- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON FUNCTIONS TO "' || grantee || '";'; +- IF ddl_only THEN +- RAISE INFO '%', buffer; +- ELSE +- EXECUTE buffer; +- END IF; + +- ELSIF arec.atype = 'sequence' THEN +- IF POSITION('r' IN privs) > 0 AND POSITION('w' IN privs) > 0 AND POSITION('U' IN privs) > 0 THEN +- -- arU is enough for all privs +- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON SEQUENCES TO "' || grantee || '";'; +- IF ddl_only THEN ++ -- Issue#95 bypass if No ACL specified. ++ IF NOT bNoACL THEN ++ -- --------------------- ++ -- MV: Permissions: Defaults ++ -- --------------------- ++ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; ++ action := 'PRIVS: Defaults'; ++ cnt := 0; ++ FOR arec IN ++ SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "owner", n.nspname AS schema, ++ CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS atype, ++ d.defaclacl as defaclacl, pg_catalog.array_to_string(d.defaclacl, ',') as defaclstr ++ FROM pg_catalog.pg_default_acl d LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = d.defaclnamespace) ++ WHERE n.nspname IS NOT NULL AND n.nspname = quote_ident(source_schema) ++ ORDER BY 3, 2, 1 ++ LOOP ++ BEGIN ++ -- RAISE NOTICE ' owner=% type=% defaclacl=% defaclstr=%', arec.owner, arec.atype, arec.defaclacl, arec.defaclstr; ++ ++ FOREACH aclstr IN ARRAY arec.defaclacl ++ LOOP ++ cnt := cnt + 1; ++ -- RAISE NOTICE ' aclstr=%', aclstr; ++ -- break up into grantor, grantee, and privs, mydb_update=rwU/mydb_owner ++ SELECT split_part(aclstr, '=',1) INTO grantee; ++ SELECT split_part(aclstr, '=',2) INTO grantor; ++ SELECT split_part(grantor, '/',1) INTO privs; ++ SELECT split_part(grantor, '/',2) INTO grantor; ++ -- RAISE NOTICE ' grantor=% grantee=% privs=%', grantor, grantee, privs; ++ ++ IF arec.atype = 'function' THEN ++ -- Just having execute is enough to grant all apparently. ++ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON FUNCTIONS TO "' || grantee || '";'; ++ ++ -- Issue#92 Fix ++ -- set role = cm_stage_ro_grp; ++ -- ALTER DEFAULT PRIVILEGES FOR ROLE cm_stage_ro_grp IN SCHEMA cm_stage GRANT REFERENCES, TRIGGER ON TABLES TO cm_stage_ro_grp; ++ IF grantor = grantee THEN ++ -- append set role to statement ++ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; ++ END IF; ++ ++ IF bDDLOnly THEN + RAISE INFO '%', buffer; + ELSE + EXECUTE buffer; + END IF; ++ -- Issue#92 Fix: ++ EXECUTE 'SET ROLE = ' || calleruser; ++ ++ ELSIF arec.atype = 'sequence' THEN ++ IF POSITION('r' IN privs) > 0 AND POSITION('w' IN privs) > 0 AND POSITION('U' IN privs) > 0 THEN ++ -- arU is enough for all privs ++ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON SEQUENCES TO "' || grantee || '";'; ++ ++ -- Issue#92 Fix ++ IF grantor = grantee THEN ++ -- append set role to statement ++ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; ++ END IF; + +- ELSE +- -- have to specify each priv individually ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ -- Issue#92 Fix: ++ EXECUTE 'SET ROLE = ' || calleruser; ++ ++ ELSE ++ -- have to specify each priv individually ++ buffer2 := ''; ++ IF POSITION('r' IN privs) > 0 THEN ++ buffer2 := 'SELECT'; ++ END IF; ++ IF POSITION('w' IN privs) > 0 THEN ++ IF buffer2 = '' THEN ++ buffer2 := 'UPDATE'; ++ ELSE ++ buffer2 := buffer2 || ', UPDATE'; ++ END IF; ++ END IF; ++ IF POSITION('U' IN privs) > 0 THEN ++ IF buffer2 = '' THEN ++ buffer2 := 'USAGE'; ++ ELSE ++ buffer2 := buffer2 || ', USAGE'; ++ END IF; ++ END IF; ++ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON SEQUENCES TO "' || grantee || '";'; ++ ++ -- Issue#92 Fix ++ IF grantor = grantee THEN ++ -- append set role to statement ++ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; ++ END IF; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ select current_user into buffer; ++ -- Issue#92 Fix: ++ EXECUTE 'SET ROLE = ' || calleruser; ++ END IF; ++ ++ ELSIF arec.atype = 'table' THEN ++ -- do each priv individually, jeeeesh! + buffer2 := ''; ++ IF POSITION('a' IN privs) > 0 THEN ++ buffer2 := 'INSERT'; ++ END IF; + IF POSITION('r' IN privs) > 0 THEN +- buffer2 := 'SELECT'; ++ IF buffer2 = '' THEN ++ buffer2 := 'SELECT'; ++ ELSE ++ buffer2 := buffer2 || ', SELECT'; ++ END IF; + END IF; + IF POSITION('w' IN privs) > 0 THEN + IF buffer2 = '' THEN +@@ -531,181 +2829,431 @@ + buffer2 := buffer2 || ', UPDATE'; + END IF; + END IF; +- IF POSITION('U' IN privs) > 0 THEN +- IF buffer2 = '' THEN +- buffer2 := 'USAGE'; ++ IF POSITION('d' IN privs) > 0 THEN ++ IF buffer2 = '' THEN ++ buffer2 := 'DELETE'; + ELSE +- buffer2 := buffer2 || ', USAGE'; ++ buffer2 := buffer2 || ', DELETE'; + END IF; + END IF; +- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON SEQUENCES TO "' || grantee || '";'; +- IF ddl_only THEN +- RAISE INFO '%', buffer; +- ELSE +- EXECUTE buffer; +- END IF; +- +- END IF; +- ELSIF arec.atype = 'table' THEN +- -- do each priv individually, jeeeesh! +- buffer2 := ''; +- IF POSITION('a' IN privs) > 0 THEN +- buffer2 := 'INSERT'; +- END IF; +- IF POSITION('r' IN privs) > 0 THEN +- IF buffer2 = '' THEN +- buffer2 := 'SELECT'; +- ELSE +- buffer2 := buffer2 || ', SELECT'; ++ IF POSITION('t' IN privs) > 0 THEN ++ IF buffer2 = '' THEN ++ buffer2 := 'TRIGGER'; ++ ELSE ++ buffer2 := buffer2 || ', TRIGGER'; ++ END IF; + END IF; +- END IF; +- IF POSITION('w' IN privs) > 0 THEN +- IF buffer2 = '' THEN +- buffer2 := 'UPDATE'; +- ELSE +- buffer2 := buffer2 || ', UPDATE'; ++ IF POSITION('T' IN privs) > 0 THEN ++ IF buffer2 = '' THEN ++ buffer2 := 'TRUNCATE'; ++ ELSE ++ buffer2 := buffer2 || ', TRUNCATE'; ++ END IF; + END IF; +- END IF; +- IF POSITION('d' IN privs) > 0 THEN +- IF buffer2 = '' THEN +- buffer2 := 'DELETE'; +- ELSE +- buffer2 := buffer2 || ', DELETE'; ++ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON TABLES TO "' || grantee || '";'; ++ ++ -- Issue#92 Fix ++ IF grantor = grantee THEN ++ -- append set role to statement ++ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; + END IF; +- END IF; +- IF POSITION('t' IN privs) > 0 THEN +- IF buffer2 = '' THEN +- buffer2 := 'TRIGGER'; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; + ELSE +- buffer2 := buffer2 || ', TRIGGER'; ++ EXECUTE buffer; + END IF; +- END IF; +- IF POSITION('T' IN privs) > 0 THEN +- IF buffer2 = '' THEN +- buffer2 := 'TRUNCATE'; ++ select current_user into buffer; ++ -- Issue#92 Fix: ++ EXECUTE 'SET ROLE = ' || calleruser; ++ ++ ELSIF arec.atype = 'type' THEN ++ IF POSITION('r' IN privs) > 0 AND POSITION('w' IN privs) > 0 AND POSITION('U' IN privs) > 0 THEN ++ -- arU is enough for all privs ++ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON TYPES TO "' || grantee || '";'; ++ ++ -- Issue#92 Fix ++ IF grantor = grantee THEN ++ -- append set role to statement ++ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; ++ END IF; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ -- Issue#92 Fix: ++ EXECUTE 'SET ROLE = ' || calleruser; ++ ++ ELSIF POSITION('U' IN privs) THEN ++ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT USAGE ON TYPES TO "' || grantee || '";'; ++ ++ -- Issue#92 Fix ++ IF grantor = grantee THEN ++ -- append set role to statement ++ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; ++ END IF; ++ ++ IF bDDLOnly THEN ++ RAISE INFO '%', buffer; ++ ELSE ++ EXECUTE buffer; ++ END IF; ++ -- Issue#92 Fix: ++ EXECUTE 'SET ROLE = ' || calleruser; ++ + ELSE +- buffer2 := buffer2 || ', TRUNCATE'; +- END IF; ++ RAISE WARNING 'Unhandled TYPE Privs:: type=% privs=% owner=% defaclacl=% defaclstr=% grantor=% grantee=% ', arec.atype, privs, arec.owner, arec.defaclacl, arec.defaclstr, grantor, grantee; + END IF; +- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON TABLES TO "' || grantee || '";'; +- IF ddl_only THEN +- RAISE INFO '%', buffer; +- ELSE +- EXECUTE buffer; +- END IF; +- + ELSE +- RAISE WARNING 'Doing nothing for type=% privs=%', arec.atype, privs; ++ RAISE WARNING 'Unhandled Privs:: type=% privs=% owner=% defaclacl=% defaclstr=% grantor=% grantee=% ', arec.atype, privs, arec.owner, arec.defaclacl, arec.defaclstr, grantor, grantee; + END IF; +- END LOOP; +- END; +- END LOOP; ++ END LOOP; ++ END; ++ END LOOP; + +- RAISE NOTICE ' DFLT PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ RAISE NOTICE ' DFLT PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ END IF; -- NO ACL BRANCH + +- -- MV: PRIVS: schema +- -- crunchy data extension, check_access +- -- SELECT role_path, base_role, as_role, objtype, schemaname, objname, array_to_string(array_agg(privname),',') as privs FROM all_access() +- -- WHERE base_role != CURRENT_USER and objtype = 'schema' and schemaname = 'public' group by 1,2,3,4,5,6; ++ -- Issue#95 bypass if No ACL specified ++ IF NOT bNoACL THEN ++ -- MV: PRIVS: schema ++ -- crunchy data extension, check_access ++ -- SELECT role_path, base_role, as_role, objtype, schemaname, objname, array_to_string(array_agg(privname),',') as privs FROM all_access() ++ -- WHERE base_role != CURRENT_USER and objtype = 'schema' and schemaname = 'public' group by 1,2,3,4,5,6; + +- action := 'PRIVS: Schema'; +- cnt := 0; +- FOR arec IN +- SELECT 'GRANT ' || p.perm::perm_type || ' ON SCHEMA ' || quote_ident(dest_schema) || ' TO "' || r.rolname || '";' as schema_ddl +- FROM pg_catalog.pg_namespace AS n CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES ('USAGE'), ('CREATE')) AS p(perm) +- WHERE n.nspname = quote_ident(source_schema) AND NOT r.rolsuper AND has_schema_privilege(r.oid, n.oid, p.perm) order by r.rolname, p.perm::perm_type +- LOOP +- BEGIN +- cnt := cnt + 1; +- IF ddl_only THEN +- RAISE INFO '%', arec.schema_ddl; +- ELSE +- EXECUTE arec.schema_ddl; +- END IF; ++ action := 'PRIVS: Schema'; ++ cnt := 0; ++ FOR arec IN ++ SELECT 'GRANT ' || p.perm::perm_type || ' ON SCHEMA ' || quote_ident(dest_schema) || ' TO "' || r.rolname || '";' as schema_ddl ++ FROM pg_catalog.pg_namespace AS n ++ CROSS JOIN pg_catalog.pg_roles AS r ++ CROSS JOIN (VALUES ('USAGE'), ('CREATE')) AS p(perm) ++ WHERE n.nspname = quote_ident(source_schema) AND NOT r.rolsuper AND has_schema_privilege(r.oid, n.oid, p.perm) ++ ORDER BY r.rolname, p.perm::perm_type ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.schema_ddl; ++ ELSE ++ EXECUTE arec.schema_ddl; ++ END IF; + +- END; +- END LOOP; +- RAISE NOTICE 'SCHEMA PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ END; ++ END LOOP; ++ RAISE NOTICE 'SCHEMA PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ END IF; -- NO ACL BRANCH + +- -- MV: PRIVS: sequences +- action := 'PRIVS: Sequences'; +- cnt := 0; +- FOR arec IN +- SELECT 'GRANT ' || p.perm::perm_type || ' ON ' || quote_ident(dest_schema) || '.' || t.relname::text || ' TO "' || r.rolname || '";' as seq_ddl +- FROM pg_catalog.pg_class AS t CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES ('SELECT'), ('USAGE'), ('UPDATE')) AS p(perm) +- WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind = 'S' AND NOT r.rolsuper AND has_sequence_privilege(r.oid, t.oid, p.perm) +- LOOP +- BEGIN +- cnt := cnt + 1; +- IF ddl_only OR seq_cnt = 0 THEN +- RAISE INFO '%', arec.seq_ddl; +- ELSE +- EXECUTE arec.seq_ddl; +- END IF; ++ -- Issue#95 bypass if No ACL specified ++ IF NOT bNoACL THEN ++ -- MV: PRIVS: sequences ++ action := 'PRIVS: Sequences'; ++ cnt := 0; ++ FOR arec IN ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on t.relname ++ SELECT 'GRANT ' || p.perm::perm_type || ' ON ' || quote_ident(dest_schema) || '.' || quote_ident(t.relname::text) || ' TO "' || r.rolname || '";' as seq_ddl ++ FROM pg_catalog.pg_class AS t ++ CROSS JOIN pg_catalog.pg_roles AS r ++ CROSS JOIN (VALUES ('SELECT'), ('USAGE'), ('UPDATE')) AS p(perm) ++ WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind = 'S' AND NOT r.rolsuper AND has_sequence_privilege(r.oid, t.oid, p.perm) ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ -- IF bDebug THEN RAISE NOTICE 'DEBUG: ddl=%', arec.seq_ddl; END IF; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.seq_ddl; ++ ELSE ++ EXECUTE arec.seq_ddl; ++ END IF; ++ END; ++ END LOOP; ++ RAISE NOTICE ' SEQ. PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ END IF; -- NO ACL BRANCH + +- END; +- END LOOP; +- RAISE NOTICE ' SEQ. PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ -- Issue#95 bypass if No ACL specified ++ IF NOT bNoACL THEN ++ -- MV: PRIVS: functions ++ action := 'PRIVS: Functions/Procedures'; ++ cnt := 0; + +- -- MV: PRIVS: functions +- action := 'PRIVS: Functions'; +- cnt := 0; +- FOR arec IN +- SELECT 'GRANT EXECUTE ON FUNCTION ' || quote_ident(dest_schema) || '.' || regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', '') || ' TO "' || r.rolname || '";' as func_ddl +- FROM pg_catalog.pg_proc f CROSS JOIN pg_catalog.pg_roles AS r WHERE f.pronamespace::regnamespace::name = quote_ident(source_schema) AND NOT r.rolsuper AND has_function_privilege(r.oid, f.oid, 'EXECUTE') +- order by regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', '') +- LOOP +- BEGIN +- cnt := cnt + 1; +- IF ddl_only THEN +- RAISE INFO '%', arec.func_ddl; +- ELSE +- EXECUTE arec.func_ddl; ++ -- Issue#61 FIX: use set_config for empty string ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ ++ -- RAISE NOTICE ' source_schema=% dest_schema=%',source_schema, dest_schema; ++ FOR arec IN ++ -- 2021-03-05 MJV FIX: issue#35: caused exception in some functions with parameters and gave privileges to other users that should not have gotten them. ++ -- SELECT 'GRANT EXECUTE ON FUNCTION ' || quote_ident(dest_schema) || '.' || replace(regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', ''), source_schema, dest_schema) || ' TO "' || r.rolname || '";' as func_ddl ++ -- FROM pg_catalog.pg_proc f CROSS JOIN pg_catalog.pg_roles AS r WHERE f.pronamespace::regnamespace::name = quote_ident(source_schema) AND NOT r.rolsuper AND has_function_privilege(r.oid, f.oid, 'EXECUTE') ++ -- order by regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', '') ++ ++ -- 2021-03-05 MJV FIX: issue#37: defaults cause problems, use system function that returns args WITHOUT DEFAULTS ++ -- COALESCE(r.routine_type, 'FUNCTION'): for aggregate functions, information_schema.routines contains NULL as routine_type value. ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on rp.routine_name ++ SELECT 'GRANT ' || rp.privilege_type || ' ON ' || COALESCE(r.routine_type, 'FUNCTION') || ' ' || quote_ident(dest_schema) || '.' || quote_ident(rp.routine_name) || ' (' || pg_get_function_identity_arguments(p.oid) || ') TO ' || string_agg(distinct rp.grantee, ',') || ';' as func_dcl ++ FROM information_schema.routine_privileges rp, information_schema.routines r, pg_proc p, pg_namespace n ++ WHERE rp.routine_schema = quote_ident(source_schema) ++ AND rp.is_grantable = 'YES' ++ AND rp.routine_schema = r.routine_schema ++ AND rp.routine_name = r.routine_name ++ AND rp.routine_schema = n.nspname ++ AND n.oid = p.pronamespace ++ AND p.proname = r.routine_name ++ GROUP BY rp.privilege_type, r.routine_type, rp.routine_name, pg_get_function_identity_arguments(p.oid) ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.func_dcl; ++ ELSE ++ EXECUTE arec.func_dcl; ++ END IF; ++ END; ++ END LOOP; ++ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; ++ RAISE NOTICE ' FUNC PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ END IF; -- NO ACL BRANCH ++ ++ -- Issue#95 bypass if No ACL specified ++ IF NOT bNoACL THEN ++ -- MV: PRIVS: tables ++ action := 'PRIVS: Tables'; ++ -- regular, partitioned, and foreign tables plus view and materialized view permissions. Ignored for now: implement foreign table defs. ++ cnt := 0; ++ FOR arec IN ++ -- SELECT 'GRANT ' || p.perm::perm_type || CASE WHEN t.relkind in ('r', 'p', 'f') THEN ' ON TABLE ' WHEN t.relkind in ('v', 'm') THEN ' ON ' END || quote_ident(dest_schema) || '.' || t.relname::text || ' TO "' || r.rolname || '";' as tbl_ddl, ++ -- has_table_privilege(r.oid, t.oid, p.perm) AS granted, t.relkind ++ -- FROM pg_catalog.pg_class AS t CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES (TEXT 'SELECT'), ('INSERT'), ('UPDATE'), ('DELETE'), ('TRUNCATE'), ('REFERENCES'), ('TRIGGER')) AS p(perm) ++ -- WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind in ('r', 'p', 'f', 'v', 'm') AND NOT r.rolsuper AND has_table_privilege(r.oid, t.oid, p.perm) order by t.relname::text, t.relkind ++ -- 2021-03-05 MJV FIX: Fixed Issue#36 for tables ++ SELECT c.relkind, 'GRANT ' || tb.privilege_type || CASE WHEN c.relkind in ('r', 'p') THEN ' ON TABLE ' WHEN c.relkind in ('v', 'm') THEN ' ON ' END || ++ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on t.relname ++ -- Issue#108 FIX: enclose double-quote grantees with special characters ++ -- quote_ident(dest_schema) || '.' || quote_ident(tb.table_name) || ' TO ' || string_agg(tb.grantee, ',') || ';' as tbl_dcl ++ quote_ident(dest_schema) || '.' || quote_ident(tb.table_name) || ' TO ' || string_agg('"' || tb.grantee || '"', ',') || ';' as tbl_dcl ++ FROM information_schema.table_privileges tb, pg_class c, pg_namespace n ++ WHERE tb.table_schema = quote_ident(source_schema) AND tb.table_name = c.relname AND c.relkind in ('r', 'p', 'v', 'm') ++ AND c.relnamespace = n.oid AND n.nspname = quote_ident(source_schema) ++ GROUP BY c.relkind, tb.privilege_type, tb.table_schema, tb.table_name ++ LOOP ++ BEGIN ++ cnt := cnt + 1; ++ -- IF bDebug THEN RAISE NOTICE 'DEBUG: ddl=%', arec.tbl_dcl; END IF; ++ -- Issue#46. Fixed reference to invalid record name (tbl_ddl --> tbl_dcl). ++ IF arec.relkind = 'f' THEN ++ RAISE WARNING 'Foreign tables are not currently implemented, so skipping privs for them. ddl=%', arec.tbl_dcl; ++ ELSE ++ IF bDDLOnly THEN ++ RAISE INFO '%', arec.tbl_dcl; ++ ELSE ++ EXECUTE arec.tbl_dcl; ++ END IF; + END IF; ++ END; ++ END LOOP; ++ RAISE NOTICE ' TABLE PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ END IF; -- NO ACL BRANCH ++ ++ -- LOOP for regular tables and populate them if specified ++ -- Issue#75 moved from big table loop above to here. ++ IF bData THEN ++ r = clock_timestamp(); ++ -- IF bVerbose THEN RAISE NOTICE 'START: copy rows %',clock_timestamp() - t; END IF; ++ IF bVerbose THEN RAISE NOTICE 'Copying rows...'; END IF; ++ ++ EXECUTE 'SET search_path = ' || quote_ident(dest_schema) ; ++ action := 'Copy Rows'; ++ FOREACH tblelement IN ARRAY tblarray ++ LOOP ++ s = clock_timestamp(); ++ IF bDebug THEN RAISE NOTICE 'DEBUG1: no UDTs %', tblelement; END IF; ++ EXECUTE tblelement; ++ GET DIAGNOSTICS cnt = ROW_COUNT; ++ buffer = substring(tblelement, 13); ++ SELECT POSITION(' OVERRIDING SYSTEM VALUE SELECT ' IN buffer) INTO cnt2; ++ IF cnt2 = 0 THEN ++ SELECT POSITION(' SELECT ' IN buffer) INTO cnt2; ++ buffer = substring(buffer,1, cnt2); ++ ELSE ++ buffer = substring(buffer,1, cnt2); ++ END IF; ++ SELECT RPAD(buffer, 35, ' ') INTO buffer; ++ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); ++ IF bVerbose THEN RAISE NOTICE 'Populated cloned table, % Rows Copied: % seconds: %', buffer, LPAD(cnt::text, 10, ' '), LPAD(cnt2::text, 5, ' '); END IF; ++ tblscopied := tblscopied + 1; ++ END LOOP; + +- END; +- END LOOP; +- RAISE NOTICE ' FUNC PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ -- Issue#79 implementation ++ -- Do same for tables with user-defined elements using copy to file method ++ FOREACH tblelement IN ARRAY tblarray2 ++ LOOP ++ s = clock_timestamp(); ++ IF bDebug THEN RAISE NOTICE 'DEBUG2: UDTs %', tblelement; END IF; ++ EXECUTE tblelement; ++ GET DIAGNOSTICS cnt = ROW_COUNT; ++ ++ -- STATEMENT LOOKS LIKE THIS: ++ -- INSERT INTO sample11.warehouses SELECT * FROM sample.warehouses; ++ -- INSERT INTO sample11.person OVERRIDING SYSTEM VALUE SELECT * FROM sample.person; ++ -- COPY sample.address TO '/tmp/cloneschema.tmp' WITH DELIMITER AS ',';\ ++ buffer = TRIM(tblelement::text); ++ -- RAISE NOTICE 'element=%', buffer; ++ cnt1 = POSITION('INSERT INTO' IN buffer); ++ cnt2 = POSITION('COPY ' IN buffer); ++ IF cnt1 > 0 THEN ++ buffer = substring(buffer, 12); ++ ELSIF cnt2 > 0 THEN ++ buffer = substring(buffer, 5); ++ ELSE ++ RAISE EXCEPTION 'Programming Error for parsing tblarray2.'; ++ END IF; ++ ++ -- RAISE NOTICE 'buffer1=%', buffer; ++ cnt1 = POSITION(' OVERRIDING ' IN buffer); ++ cnt2 = POSITION('SELECT * FROM ' IN buffer); ++ cnt3 = POSITION(' FROM ' IN buffer); ++ cnt4 = POSITION(' TO ' IN buffer); ++ IF cnt1 > 0 THEN ++ buffer = substring(buffer, 1, cnt1-2); ++ ELSIF cnt2 > 0 THEN ++ buffer = substring(buffer, 1, cnt2-2); ++ ELSIF cnt3 > 0 THEN ++ buffer = substring(buffer, 1, cnt3-1); ++ ELSIF cnt4 > 0 THEN ++ -- skip the COPY TO statements ++ continue; ++ ELSE ++ RAISE EXCEPTION 'Programming Error for parsing tblarray2.'; ++ END IF; ++ -- RAISE NOTICE 'buffer2=%', buffer; ++ ++ SELECT RPAD(buffer, 35, ' ') INTO buffer; ++ -- RAISE NOTICE 'buffer3=%', buffer; ++ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); ++ IF bVerbose THEN RAISE NOTICE 'Populated cloned table, % Rows Copied: % seconds: %', buffer, LPAD(cnt::text, 10, ' '), LPAD(cnt2::text, 5, ' '); END IF; ++ tblscopied := tblscopied + 1; ++ END LOOP; + +- -- MV: PRIVS: tables +- action := 'PRIVS: Tables'; +- -- regular, partitioned, and foreign tables plus view and materialized view permissions. TODO: implement foreign table defs. ++ -- Issue#101 ++ -- Do same for tables with user-defined elements using direct method with text cast ++ FOREACH tblelement IN ARRAY tblarray3 ++ LOOP ++ s = clock_timestamp(); ++ IF bDebug THEN RAISE NOTICE 'DEBUG3: UDTs %', tblelement; END IF; ++ EXECUTE tblelement; ++ GET DIAGNOSTICS cnt = ROW_COUNT; ++ cnt2 = POSITION(' (' IN tblelement::text); ++ IF cnt2 > 0 THEN ++ buffer = substring(tblelement, 1, cnt2); ++ buffer = substring(buffer, 6); ++ SELECT RPAD(buffer, 35, ' ') INTO buffer; ++ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); ++ IF bVerbose THEN RAISE NOTICE 'Populated cloned table, % Rows Copied: % seconds: %', buffer, LPAD(cnt::text, 10, ' '), LPAD(cnt2::text, 5, ' '); END IF; ++ tblscopied := tblscopied + 1; ++ END IF; ++ END LOOP; ++ ++ -- Issue#98 MVs deferred until now ++ FOREACH tblelement IN ARRAY mvarray ++ LOOP ++ s = clock_timestamp(); ++ EXECUTE tblelement; ++ -- get diagnostics for MV creates or refreshes does not work, always returns 1 ++ GET DIAGNOSTICS cnt = ROW_COUNT; ++ buffer = substring(tblelement, 25); ++ cnt2 = POSITION(' AS ' IN buffer); ++ IF cnt2 > 0 THEN ++ buffer = substring(buffer, 1, cnt2); ++ SELECT RPAD(buffer, 36, ' ') INTO buffer; ++ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); ++ IF bVerbose THEN RAISE NOTICE 'Populated Mat. View, % Rows Inserted: ? seconds: %', buffer, LPAD(cnt2::text, 5, ' '); END IF; ++ mvscopied := mvscopied + 1; ++ END IF; ++ END LOOP; ++ ++ cnt := cast(extract(epoch from (clock_timestamp() - r)) as numeric(18,3)); ++ IF bVerbose THEN RAISE NOTICE 'Copy rows duration: % seconds',cnt; END IF; ++ END IF; ++ RAISE NOTICE ' TABLES copied: %', LPAD(tblscopied::text, 5, ' '); ++ RAISE NOTICE ' MATVIEWS refreshed: %', LPAD(mvscopied::text, 5, ' '); ++ ++ ++ -- Issue#78 forces us to defer FKeys until the end since we previously did row copies before FKeys ++ -- add FK constraint ++ action := 'FK Constraints'; + cnt := 0; +- FOR arec IN +- SELECT 'GRANT ' || p.perm::perm_type || CASE WHEN t.relkind in ('r', 'p', 'f') THEN ' ON TABLE ' WHEN t.relkind in ('v', 'm') THEN ' ON ' END || quote_ident(dest_schema) || '.' || t.relname::text || ' TO "' || r.rolname || '";' as tbl_ddl, +- has_table_privilege(r.oid, t.oid, p.perm) AS granted, t.relkind +- FROM pg_catalog.pg_class AS t CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES (TEXT 'SELECT'), ('INSERT'), ('UPDATE'), ('DELETE'), ('TRUNCATE'), ('REFERENCES'), ('TRIGGER')) AS p(perm) +- WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind in ('r', 'p', 'f', 'v', 'm') AND NOT r.rolsuper AND has_table_privilege(r.oid, t.oid, p.perm) order by t.relname::text, t.relkind +- LOOP +- BEGIN +- cnt := cnt + 1; +- -- RAISE NOTICE 'ddl=%', arec.tbl_ddl; +- IF arec.relkind = 'f' THEN +- RAISE WARNING 'Foreign tables are not currently implemented, so skipping privs for them. ddl=%', arec.tbl_ddl; +- ELSE +- IF ddl_only THEN +- RAISE INFO '%', arec.tbl_ddl; +- ELSE +- EXECUTE arec.tbl_ddl; +- END IF; + +- END IF; +- END; ++ -- Issue#61 FIX: use set_config for empty string ++ -- SET search_path = ''; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ ++ FOR qry IN ++ SELECT 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || quote_ident(rn.relname) ++ || ' ADD CONSTRAINT ' || quote_ident(ct.conname) || ' ' || REPLACE(pg_get_constraintdef(ct.oid), 'REFERENCES ' || quote_ident(source_schema) || '.', 'REFERENCES ' ++ || quote_ident(dest_schema) || '.') || ';' ++ FROM pg_constraint ct ++ JOIN pg_class rn ON rn.oid = ct.conrelid ++ -- Issue#103 needed to add this left join ++ LEFT JOIN pg_inherits i ON (rn.oid = i.inhrelid) ++ WHERE connamespace = src_oid ++ AND rn.relkind = 'r' ++ AND ct.contype = 'f' ++ -- Issue#103 fix: needed to also add this null check ++ AND i.inhrelid is null ++ LOOP ++ cnt := cnt + 1; ++ IF bDDLOnly THEN ++ RAISE INFO '%', qry; ++ ELSE ++ IF bDebug THEN RAISE NOTICE 'DEBUG: adding FKEY constraint: %', qry; END IF; ++ EXECUTE qry; ++ END IF; + END LOOP; +- RAISE NOTICE ' TABLE PRIVS cloned: %', LPAD(cnt::text, 5, ' '); ++ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; ++ RAISE NOTICE ' FKEYS cloned: %', LPAD(cnt::text, 5, ' '); + +- -- Set the search_path back to what it was before +- EXECUTE 'SET search_path = ' || src_path_old; ++ ++ IF src_path_old = '' OR src_path_old = '""' THEN ++ -- RAISE NOTICE 'Restoring old search_path to empty string'; ++ SELECT set_config('search_path', '', false) into v_dummy; ++ ELSE ++ -- RAISE NOTICE 'Restoring old search_path to:%', src_path_old; ++ EXECUTE 'SET search_path = ' || src_path_old; ++ END IF; ++ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; ++ IF bDebug THEN RAISE NOTICE 'DEBUG: setting search_path back to what it was: %', v_dummy; END IF; ++ cnt := cast(extract(epoch from (clock_timestamp() - t)) as numeric(18,3)); ++ IF bVerbose THEN RAISE NOTICE 'clone_schema duration: % seconds',cnt; END IF; + + EXCEPTION + WHEN others THEN + BEGIN + GET STACKED DIAGNOSTICS v_diag1 = MESSAGE_TEXT, v_diag2 = PG_EXCEPTION_DETAIL, v_diag3 = PG_EXCEPTION_HINT, v_diag4 = RETURNED_SQLSTATE, v_diag5 = PG_CONTEXT, v_diag6 = PG_EXCEPTION_CONTEXT; +- -- v_ret := 'line=' || v_diag6 || '. '|| v_diag4 || '. ' || v_diag1 || ' .' || v_diag2 || ' .' || v_diag3; +- v_ret := 'line=' || v_diag6 || '. '|| v_diag4 || '. ' || v_diag1; +- RAISE EXCEPTION 'Action: % Diagnostics: %',action, v_ret; +- -- Set the search_path back to what it was before +- EXECUTE 'SET search_path = ' || src_path_old; ++ v_ret := 'line=' || v_diag6 || '. '|| v_diag4 || '. ' || v_diag1; ++ -- Issue#101: added version to exception output ++ -- RAISE NOTICE 'v_diag1=% v_diag2=% v_diag3=% v_diag4=% v_diag5=% v_diag6=%', v_diag1, v_diag2, v_diag3, v_diag4, v_diag5, v_diag6; ++ buffer2 = ''; ++ IF action = 'Copy Rows' AND v_diag4 = '42704' THEN ++ -- Issue#105 Help user to fix the problem. ++ buffer2 = 'It appears you have a USER-DEFINED column type mismatch. Try running clone_schema with the FILECOPY option. '; ++ END IF; ++ IF lastsql <> '' THEN ++ buffer = v_ret || E'\n'|| buffer2 || E'\n'|| lastsql; ++ ELSE ++ buffer = v_ret || E'\n'|| buffer2; ++ END IF; ++ RAISE EXCEPTION 'Version: % Action: % Diagnostics: %',v_version, action, buffer; ++ ++ IF src_path_old = '' THEN ++ -- RAISE NOTICE 'setting old search_path to empty string'; ++ SELECT set_config('search_path', '', false); ++ ELSE ++ -- RAISE NOTICE 'setting old search_path to:%', src_path_old; ++ EXECUTE 'SET search_path = ' || src_path_old; ++ END IF; ++ + RETURN; + END; + +@@ -713,14 +3261,14 @@ + END; + + $BODY$ +- LANGUAGE plpgsql VOLATILE +- COST 100; +-ALTER FUNCTION public.clone_schema(text, text, boolean, boolean) OWNER TO "{db_user}"; +-""" ++ LANGUAGE plpgsql VOLATILE COST 100; + ++ALTER FUNCTION public.clone_schema(text, text, cloneparms[]) OWNER TO "{db_user}"; ++-- REVOKE ALL PRIVILEGES ON FUNCTION clone_schema(text, text, cloneparms[]) FROM public; ++""" # noqa + +-class CloneSchema: + ++class CloneSchema: + def _create_clone_schema_function(self): + """ + Creates a postgres function `clone_schema` that copies a schema and its +@@ -752,9 +3300,8 @@ def clone_schema(self, base_schema_name, new_schema_name, set_connection=True): + if schema_exists(new_schema_name): + raise ValidationError("New schema name already exists") + +- sql = 'SELECT clone_schema(%(base_schema)s, %(new_schema)s, true, false)' ++ sql = "SELECT clone_schema(%(base_schema)s, %(new_schema)s, 'DATA')" + cursor.execute( +- sql, +- {'base_schema': base_schema_name, 'new_schema': new_schema_name} ++ sql, {"base_schema": base_schema_name, "new_schema": new_schema_name} + ) + cursor.close() + +From c49b4a1c254ebe713259515a4c8373a9b19dd000 Mon Sep 17 00:00:00 2001 +From: Marc 'risson' Schmitt +Date: Thu, 16 Nov 2023 13:32:06 +0100 +Subject: [PATCH 2/3] clone: allow setting up the clone mode (DATA, NODATA) + +Signed-off-by: Marc 'risson' Schmitt +--- + django_tenants/clone.py | 13 ++++++++++--- + django_tenants/models.py | 11 ++++++++++- + 2 files changed, 20 insertions(+), 4 deletions(-) + +diff --git a/django_tenants/clone.py b/django_tenants/clone.py +index 3afce109..6fa52c04 100644 +--- a/django_tenants/clone.py ++++ b/django_tenants/clone.py +@@ -3281,7 +3281,9 @@ def _create_clone_schema_function(self): + cursor.execute(CLONE_SCHEMA_FUNCTION.format(db_user=db_user)) + cursor.close() + +- def clone_schema(self, base_schema_name, new_schema_name, set_connection=True): ++ def clone_schema( ++ self, base_schema_name, new_schema_name, clone_mode="DATA", set_connection=True ++ ): + """ + Creates a new schema `new_schema_name` as a clone of an existing schema + `old_schema_name`. +@@ -3300,8 +3302,13 @@ def clone_schema(self, base_schema_name, new_schema_name, set_connection=True): + if schema_exists(new_schema_name): + raise ValidationError("New schema name already exists") + +- sql = "SELECT clone_schema(%(base_schema)s, %(new_schema)s, 'DATA')" ++ sql = "SELECT clone_schema(%(base_schema)s, %(new_schema)s, %(clone_mode)s)" + cursor.execute( +- sql, {"base_schema": base_schema_name, "new_schema": new_schema_name} ++ sql, ++ { ++ "base_schema": base_schema_name, ++ "new_schema": new_schema_name, ++ "clone_mode": clone_mode, ++ }, + ) + cursor.close() +diff --git a/django_tenants/models.py b/django_tenants/models.py +index 0d1812d8..655e1994 100644 +--- a/django_tenants/models.py ++++ b/django_tenants/models.py +@@ -29,6 +29,13 @@ class TenantMixin(models.Model): + to be automatically created upon save. + """ + ++ clone_mode = "DATA" ++ """ ++ One of "DATA", "NODATA". ++ When using TENANT_BASE_SCHEMA, controls whether only the database ++ structure will be copied, or if data will be copied along with it. ++ """ ++ + schema_name = models.CharField(max_length=63, unique=True, db_index=True, + validators=[_check_schema_name]) + +@@ -184,7 +191,9 @@ def create_schema(self, check_if_exists=False, sync_schema=True, + # copy tables and data from provided model schema + base_schema = get_tenant_base_schema() + clone_schema = CloneSchema() +- clone_schema.clone_schema(base_schema, self.schema_name) ++ clone_schema.clone_schema( ++ base_schema, self.schema_name, self.clone_mode ++ ) + + call_command('migrate_schemas', + tenant=True, + +From 218fbcd3bfa555b20c6fb904e5fcf307d69f18af Mon Sep 17 00:00:00 2001 +From: Marc 'risson' Schmitt +Date: Thu, 16 Nov 2023 13:32:54 +0100 +Subject: [PATCH 3/3] clone: always (re-)create the clone_schema function + +Signed-off-by: Marc 'risson' Schmitt +--- + django_tenants/clone.py | 10 +++------- + 1 file changed, 3 insertions(+), 7 deletions(-) + +diff --git a/django_tenants/clone.py b/django_tenants/clone.py +index 6fa52c04..63fb8e22 100644 +--- a/django_tenants/clone.py ++++ b/django_tenants/clone.py +@@ -1,7 +1,6 @@ + from django.conf import settings + from django.core.exceptions import ValidationError + from django.db import connection, transaction +-from django.db.utils import ProgrammingError + + from django_tenants.utils import schema_exists + +@@ -3292,12 +3291,9 @@ def clone_schema( + connection.set_schema_to_public() + cursor = connection.cursor() + +- # check if the clone_schema function already exists in the db +- try: +- cursor.execute("SELECT 'clone_schema'::regproc") +- except ProgrammingError: +- self._create_clone_schema_function() +- transaction.commit() ++ # create or update the clone_schema function in the db ++ self._create_clone_schema_function() ++ transaction.commit() + + if schema_exists(new_schema_name): + raise ValidationError("New schema name already exists") diff --git a/user/py3-django-tenants/APKBUILD b/user/py3-django-tenants/APKBUILD new file mode 100644 index 0000000..f12eac2 --- /dev/null +++ b/user/py3-django-tenants/APKBUILD @@ -0,0 +1,43 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-tenants +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=django-tenants +pkgver=3.6.1 +pkgrel=0 +pkgdesc="Tenant support for Django using PostgreSQL schemas." +url="https://pypi.python.org/project/django-tenants" +arch="noarch" +license="KIT" +depends="py3-django py3-psycopg py3-gunicorn py3-coverage" +checkdepends="python3-dev py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source=" + $pkgname-$pkgver.tar.gz::https://codeload.github.com/django-tenants/django-tenants/tar.gz/refs/tags/v$pkgver + 997_update-from-pgclone-schema.patch + " +builddir="$srcdir/$_pkgreal-$pkgver" +options="!check" # Requires setting up test database +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + DJANGO_SETTINGS_MODULE=tests.settings .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +b18afce81ccc89e49fcc4ebe85d90be602415ca898c1660a4e71e2bef6a3ed2e8c724e94b61d8c6f48f3fb19eb2a87d6a6f5bbf449b3e2f661f87e4b5638eafb py3-django-tenants-3.6.1.tar.gz +f2424bb188db2e3c7d13c15e5bdf0959c6f794e68dbc677c8b876d4faa321f78aded5565539f1bfd97583c6df0fcc19ec05abe203b08407e4446dd7194756825 997_update-from-pgclone-schema.patch +" From b29ff4dcae12ca4f30b95a8b17be8b3ed2165aa2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 10 Jun 2024 09:35:21 -0400 Subject: [PATCH 352/738] user/py3-tenant-schemas-celery: new aports --- user/py3-tenant-schemas-celery/APKBUILD | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 user/py3-tenant-schemas-celery/APKBUILD diff --git a/user/py3-tenant-schemas-celery/APKBUILD b/user/py3-tenant-schemas-celery/APKBUILD new file mode 100644 index 0000000..4398eae --- /dev/null +++ b/user/py3-tenant-schemas-celery/APKBUILD @@ -0,0 +1,41 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-tenant-schemas-celery +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=tenant-schemas-celery +pkgver=2.2.0 +pkgrel=0 +pkgdesc="Celery integration for django-tenant-schemas and django-tenants" +url="https://pypi.python.org/project/tenant-schemas-celery" +arch="noarch" +license="MIT" +depends="py3-django-tenants py3-celery" +checkdepends="python3-dev py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel" +source=" + $pkgname-$pkgver.tar.gz::https://codeload.github.com/maciej-gol/tenant-schemas-celery/tar.gz/refs/tags/$pkgver + " +options="!check" # Test suite wants docker +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + DJANGO_SETTINGS_MODULE=tests.settings .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +dad71011306936dc84d966797b113008780750e9e973513092bec892be0d1468e0a0e7e8e2fcca9765309a27767e1c72bdaad7c8aca16353ae1eef783c239148 py3-tenant-schemas-celery-2.2.0.tar.gz +" From 2a72f32a3ad2eb43172375a44ef06e1e50287707 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 10 Jun 2024 10:05:57 -0400 Subject: [PATCH 353/738] user/py3-scim2-filter-parser: new aport --- user/py3-scim2-filter-parser/APKBUILD | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 user/py3-scim2-filter-parser/APKBUILD diff --git a/user/py3-scim2-filter-parser/APKBUILD b/user/py3-scim2-filter-parser/APKBUILD new file mode 100644 index 0000000..784a660 --- /dev/null +++ b/user/py3-scim2-filter-parser/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-scim2-filter-parser +#_pkgreal is used by apkbuild-pypi to find modules at PyPI +_pkgreal=scim2-filter-parser +pkgver=0.5.0 +pkgrel=0 +pkgdesc="A customizable parser/transpiler for SCIM2.0 filters" +url="https://pypi.python.org/project/scim2-filter-parser" +arch="noarch" +license="MIT" +depends="py3-django py3-sly" +checkdepends="py3-pytest" +makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" +source="$pkgname-$pkgver.tar.gz::https://github.com/15five/scim2-filter-parser/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir/$_pkgreal-$pkgver" +subpackages="$pkgname-pyc" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +5347852af6b82a764a32bc491a7e0f05f06b4f4d93dfa375668b5ca1a15ee58f488702536e350100fe5c96a5c94c492ea8cbd0e1952c5920d5a10e1453357f8c py3-scim2-filter-parser-0.5.0.tar.gz +" From 43905a4a7240b07a8393f56fc521016d3e25f0e2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 10 Jun 2024 10:14:54 -0400 Subject: [PATCH 354/738] user/py3-django-rest-framework: fix to version 3.14.0 --- user/py3-django-rest-framework/APKBUILD | 59 +++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 user/py3-django-rest-framework/APKBUILD diff --git a/user/py3-django-rest-framework/APKBUILD b/user/py3-django-rest-framework/APKBUILD new file mode 100644 index 0000000..4a82cb3 --- /dev/null +++ b/user/py3-django-rest-framework/APKBUILD @@ -0,0 +1,59 @@ +# Contributor: Leonardo Arena +# Contributor: Justin Berthault +# Maintainer: Antoine Martin (ayakael) +pkgname=py3-django-rest-framework +_pkgname=django-rest-framework +pkgver=3.14.0 +pkgrel=0 +pkgdesc="Web APIs for Django" +url="https://github.com/encode/django-rest-framework" +arch="noarch" +license="Custom" +depends=" + py3-django + py3-tz +" +makedepends=" + py3-setuptools + py3-gpep517 + py3-wheel +" +checkdepends=" + py3-pytest-django + py3-pytest-cov + py3-core-api + py3-jinja2 + py3-uritemplate + py3-django-guardian + py3-psycopg2 + py3-markdown + py3-yaml + py3-inflection +" +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.tar.gz::https://github.com/encode/$_pkgname/archive/$pkgver.tar.gz" +options="!check" # Failing tests +builddir="$srcdir"/$_pkgname-$pkgver + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl + # test_urlpatterns: AssertionError: assert [] is not [] + # test_markdown: rather hard to decipher assertion error + .testenv/bin/python3 -m pytest -v -k 'not test_urlpatterns and not test_markdown' +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +c1012c656b427e0318b2056e2f984ddc75a5b4e85f375c76fba165ad06e285848eee1bc6dc76c097daec57d780efb2551110199d62ce636a03951aec13ab4013 py3-django-rest-framework-3.14.0.tar.gz +" From e5237392b1657e9a1373b49852946d245ba077bb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 10 Jun 2024 09:36:38 -0400 Subject: [PATCH 355/738] user/authentik: add missing depends --- user/authentik/APKBUILD | 19 +++++++++++++------ user/authentik/authentik-manage.sh | 1 - user/authentik/authentik-worker.openrc | 4 ++-- user/authentik/fix-ak-bash.patch | 10 ++++++++++ .../root-settings-csrf_trusted_origins.patch | 8 ++++---- 5 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 user/authentik/fix-ak-bash.patch diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 83e18a3..e9c3b87 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=authentik pkgver=2024.4.2 -pkgrel=0 +pkgrel=1 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" # s390x: missing py3-celery py3-flower and py3-kombu @@ -60,8 +60,10 @@ depends=" py3-django-otp py3-django-prometheus py3-django-redis - py3-django-rest-framework + py3-django-rest-framework~=3.14.0 py3-django-rest-framework-guardian + py3-django-storages + py3-django-tenants py3-docker-py py3-dotenv py3-dumb-init @@ -69,6 +71,7 @@ depends=" py3-drf-spectacular py3-email-validator py3-facebook-sdk + py3-fido2 py3-flower py3-frozenlist py3-geoip2 @@ -101,7 +104,6 @@ depends=" py3-prompt_toolkit py3-psycopg py3-psycopg-c - py3-pycryptodome py3-pydantic-scim py3-pynacl py3-pyrsistent @@ -110,6 +112,8 @@ depends=" py3-requests py3-requests-oauthlib py3-rsa + py3-scim2-filter-parser + py3-setproctitle py3-sentry-sdk py3-service_identity py3-setuptools @@ -122,6 +126,7 @@ depends=" py3-twilio py3-twisted py3-txaio + py3-tenant-schemas-celery py3-typing-extensions py3-tz py3-ua-parser @@ -158,6 +163,7 @@ source=" authentik-ldap.openrc authentik-ldap.conf authentik-manage.sh + fix-ak-bash.patch root-settings-csrf_trusted_origins.patch " builddir="$srcdir/"authentik-version-$pkgver @@ -238,9 +244,10 @@ package() { sha512sums=" 58642829e320b1480706363712a73c82e55f79ed6451d5db82482c51b9c1ee13b9999caf152da0944ca277344d38c99a5636a7e9e718f858ca558f17ae9da104 authentik-2024.4.2.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc -5d7f28bf5a9f358a0fc3634b2bac6d070c276c3f8181d26fa7e94a17503a4d54556bf7c3207ccd6cb924b81754ed965795d5e2a8aa1af409fd9e32d390ec4cf5 authentik-worker.openrc +6cb03b9b69df39bb4539fe05c966536314d766b2e9307a92d87070ba5f5b7e7ab70f1b5ee1ab3c0c50c23454f9c5a4caec29e63fdf411bbb7a124ad687569b89 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc 89ee5f0ffdade1c153f3a56ff75b25a7104aa81d8c7a97802a8f4b0eab34850cee39f874dabe0f3c6da3f71d6a0f938f5e8904169e8cdd34d407c8984adee6b0 authentik-ldap.conf -d2df285e09d05bb78b17cdbf156cb19883764d0ae61d4c8faed599c015277b75c3f51e5fcb35e01fc25d5847f667ff2089d5e6c48b85a3a6b4523278b2eea89d authentik-manage.sh -a50ceddb239851d869212cd5064df117ab977d0e01bf0bc5fa7b5fa6e6428a4af59f802ca223a7e840753f86bfdb0df17d330f9ba4cbaa30a167f51d8aecb9bd root-settings-csrf_trusted_origins.patch +f1a3cb215b6210fa7d857a452a9f2bc4dc0520e49b9fa7027547cff093d740a7e2548f1bf1f8831f7d5ccb80c8e523ee0c8bafcc4dc42d2788725f2137d21bee authentik-manage.sh +3e47db684a3f353dcecdb7bab8836b9d5198766735d77f676a51d952141a0cf9903fcb92e6306c48d2522d7a1f3028b37247fdc1dc74d4d6e043da7eb4f36d49 fix-ak-bash.patch +5c60e54b6a7829d611af66f5cb8184a002b5ae927efbd024c054a7c176fcb9efcfbe5685279ffcf0390b0f0abb3bb03e02782c6867c2b38d1ad2d508aae83fa0 root-settings-csrf_trusted_origins.patch " diff --git a/user/authentik/authentik-manage.sh b/user/authentik/authentik-manage.sh index 43244b0..ef7357d 100644 --- a/user/authentik/authentik-manage.sh +++ b/user/authentik/authentik-manage.sh @@ -1,4 +1,3 @@ - #!/bin/sh BUNDLE_DIR='/usr/share/webapps/authentik' diff --git a/user/authentik/authentik-worker.openrc b/user/authentik/authentik-worker.openrc index e7970cc..f0fa964 100644 --- a/user/authentik/authentik-worker.openrc +++ b/user/authentik/authentik-worker.openrc @@ -4,8 +4,8 @@ name="$RC_SVCNAME" cfgfile="/etc/conf.d/$RC_SVCNAME.conf" pidfile="/run/$RC_SVCNAME.pid" working_directory="/usr/share/webapps/authentik" -command="celery" -command_args="-A authentik.root.celery worker -Ofair --max-tasks-per-child=1 --autoscale 3,1 -E -B -s /tmp/celerybeat-schedule -Q authentik,authentik_scheduled,authentik_events" +command="/usr/bin/authentik-manage" +command_args="worker" command_user="authentik" command_group="authentik" start_stop_daemon_args="" diff --git a/user/authentik/fix-ak-bash.patch b/user/authentik/fix-ak-bash.patch new file mode 100644 index 0000000..c6afafb --- /dev/null +++ b/user/authentik/fix-ak-bash.patch @@ -0,0 +1,10 @@ +diff --git a/lifecycle/ak.orig b/lifecycle/ak +index 615bfe9..1646274 100755 +--- a/lifecycle/ak.orig ++++ b/lifecycle/ak +@@ -1,4 +1,4 @@ +-#!/usr/bin/env -S bash -e ++#!/usr/bin/env bash + MODE_FILE="${TMPDIR}/authentik-mode" + + function log { diff --git a/user/authentik/root-settings-csrf_trusted_origins.patch b/user/authentik/root-settings-csrf_trusted_origins.patch index 52a892f..4c235f9 100644 --- a/user/authentik/root-settings-csrf_trusted_origins.patch +++ b/user/authentik/root-settings-csrf_trusted_origins.patch @@ -1,8 +1,8 @@ -diff --git a/authentik/root/settings.py.orig b/authentik/root/settings.py -index ebfc471..ce1ef3b 100644 ---- a/authentik/root/settings.py.orig +diff --git a/authentik/root/settings.py b/authentik/root/settings.py +index 15e689b06..8b0c1d744 100644 +--- a/authentik/root/settings.py +++ b/authentik/root/settings.py -@@ -56,6 +56,7 @@ AUTH_USER_MODEL = "authentik_core.User" +@@ -33,6 +33,7 @@ AUTH_USER_MODEL = "authentik_core.User" CSRF_COOKIE_NAME = "authentik_csrf" CSRF_HEADER_NAME = "HTTP_X_AUTHENTIK_CSRF" From 1f7767fc5b0d93158ae0268ec80fb9d503f86309 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 13:43:27 -0400 Subject: [PATCH 356/738] user/php83-pecl-inotify: new aport --- .../php83-pecl-inotify}/APKBUILD | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) rename {unmaintained/php82-pecl-inotify => user/php83-pecl-inotify}/APKBUILD (58%) diff --git a/unmaintained/php82-pecl-inotify/APKBUILD b/user/php83-pecl-inotify/APKBUILD similarity index 58% rename from unmaintained/php82-pecl-inotify/APKBUILD rename to user/php83-pecl-inotify/APKBUILD index 698f0d5..771466f 100644 --- a/unmaintained/php82-pecl-inotify/APKBUILD +++ b/user/php83-pecl-inotify/APKBUILD @@ -1,21 +1,21 @@ # Contributor: Fabio Ribeiro # Maintainer: Andy Postnikov -pkgname=php82-pecl-inotify +pkgname=php83-pecl-inotify _extname=inotify pkgver=3.0.0 pkgrel=0 -pkgdesc="Inotify bindings for PHP 8.2" +pkgdesc="Inotify bindings for PHP 8.3" url="https://pecl.php.net/package/inotify" arch="all" license="PHP-3.01" -depends="php82-common" -makedepends="php82-dev" +depends="php83-common" +makedepends="php83-dev" source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" builddir="$srcdir"/$_extname-$pkgver build() { - phpize82 - ./configure --prefix=/usr --with-php-config=php-config82 + phpize83 + ./configure --prefix=/usr --with-php-config=php-config83 make } @@ -25,9 +25,11 @@ check() { package() { make INSTALL_ROOT="$pkgdir" install - local _confdir="$pkgdir"/etc/php82/conf.d + local _confdir="$pkgdir"/etc/php83/conf.d install -d $_confdir echo "extension=$_extname" > $_confdir/70_$_extname.ini } -sha512sums="f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz" +sha512sums=" +f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz +" From ecc61a2182fa5c5deb77c0447f9fe25d2e2da01d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 16:20:16 -0400 Subject: [PATCH 357/738] user/php82-pecl-inotify: new aport --- user/php82-pecl-inotify/APKBUILD | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 user/php82-pecl-inotify/APKBUILD diff --git a/user/php82-pecl-inotify/APKBUILD b/user/php82-pecl-inotify/APKBUILD new file mode 100644 index 0000000..44903a1 --- /dev/null +++ b/user/php82-pecl-inotify/APKBUILD @@ -0,0 +1,35 @@ +# Contributor: Fabio Ribeiro +# Maintainer: Andy Postnikov +pkgname=php82-pecl-inotify +_extname=inotify +pkgver=3.0.0 +pkgrel=0 +pkgdesc="Inotify bindings for PHP 8.3" +url="https://pecl.php.net/package/inotify" +arch="all" +license="PHP-3.01" +depends="php82-common" +makedepends="php82-dev" +source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" +builddir="$srcdir"/$_extname-$pkgver + +build() { + phpize82 + ./configure --prefix=/usr --with-php-config=php-config82 + make +} + +check() { + make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test +} + +package() { + make INSTALL_ROOT="$pkgdir" install + local _confdir="$pkgdir"/etc/php82/conf.d + install -d $_confdir + echo "extension=$_extname" > $_confdir/70_$_extname.ini +} + +sha512sums=" +f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz +" From f5bbad0712750eea9175fbaf7fceaa8ae08dd52f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 12 Jun 2024 20:11:40 -0400 Subject: [PATCH 358/738] user/gitaly: upgrade to 16.11.4 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 3d17edb..801d299 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.9.8 +pkgver=16.11.4 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -f3a7c7e2e5d96d5238bad16f9d0d79a8819b15be5228bb3a7fc8c796488eb7a7914355a4d6ec1ae0b0fa971d3299068735816518005f62dacc6211b59bdc58f7 gitaly-v16.9.8.tar.gz +c8107d5058bb7470244bc368fd1cec827a6fac32efef3ed4ffe637b1897bac6c440001e7a17bac97a22942c2dcba118c7fdd9dde49b8f286a0676c483aa815e4 gitaly-v16.11.4.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 507663db3b844f0dec3c4341e8112b62f06cbd79 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 12 Jun 2024 20:12:14 -0400 Subject: [PATCH 359/738] user/gitlab-pages: upgrade to 16.11.4 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index 18e54c9..ab65b67 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.9.8 +pkgver=16.11.4 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -aeef1c9c226238f5846080c5bbd3d2481f6cb5741ce80fc39ba98669f24959c7142fa491a7c65239d61084f8d7c0feba384a99d17f6c60b5b1a7aee9db1c41e9 gitlab-pages-v16.9.8.tar.gz +09b8fa7e094698ad196de1e75c07fdce3d6b37a11ce7aa57bb2953b098bfd1fd9661911488a914d8e458b3c282c805649219189cf4fc75a45c54785ad87b4074 gitlab-pages-v16.11.4.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 65a5f41649d09416dbb44fe0f2a2c86f12087de7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 12 Jun 2024 20:12:46 -0400 Subject: [PATCH 360/738] user/gitlab-foss: upgrade to 16.11.4 --- user/gitlab-foss/APKBUILD | 8 ++++---- ...tch => upgrade-sys-filesystem-depend.patch} | 18 ++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) rename user/gitlab-foss/{downgrade-sys-filesystem-depend.patch => upgrade-sys-filesystem-depend.patch} (73%) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 9d13bd8..9925aa5 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.9.8 +pkgver=16.11.4 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -78,7 +78,7 @@ source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss $_pkgname.confd $_pkgname.logrotate bin-wrapper.in - downgrade-sys-filesystem-depend.patch + upgrade-sys-filesystem-depend.patch " builddir="$srcdir/gitlab-foss-$_gittag" @@ -379,7 +379,7 @@ assets() { } sha512sums=" -95120e8bdd2245b54b1c520b3d32b72747cffadede3bcd9eb43d2de68887ac4b96581ce14a647f2c380fd41878d8b1d2a999c0412db50b75d94b4965195f064b gitlab-foss-v16.9.8.tar.gz +8b9438778b61901dbfbc5c8af699a72e2279fb25f4e129ebdda294a6a0885056d0b1d2d51d760ad00a86f8ee61eb52bbf82cb96122fe5ccb2d5bffb485e720d3 gitlab-foss-v16.11.4.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd @@ -389,5 +389,5 @@ cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08d 4dc00b16462f30591297fcb535fc364185d3ed76e9956597f0423a8dfd8a9a351f6ac29d9f0c73052c11324fba4768eb89a21c6bef4da99f15baaea8c9ab8407 gitlab.confd 57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in -ab9a09fca6126b18b76e61380990dc217f915162985880e90b905b3210a1fef229af3db1f1ca180177d3cba91ab5fe33798ac685055abf0adc44a1b630f71b39 downgrade-sys-filesystem-depend.patch +0eaa7de9a906ddb0fe84b7afbaec893a134bbbdb9e71da75cf4095ef40404643e51447aee88d3cad6e565bc709b34ffd8901cc93061e4a2a410838aed42d3644 upgrade-sys-filesystem-depend.patch " diff --git a/user/gitlab-foss/downgrade-sys-filesystem-depend.patch b/user/gitlab-foss/upgrade-sys-filesystem-depend.patch similarity index 73% rename from user/gitlab-foss/downgrade-sys-filesystem-depend.patch rename to user/gitlab-foss/upgrade-sys-filesystem-depend.patch index 3ed59d0..d608191 100644 --- a/user/gitlab-foss/downgrade-sys-filesystem-depend.patch +++ b/user/gitlab-foss/upgrade-sys-filesystem-depend.patch @@ -7,31 +7,29 @@ index c1e9e34..a4448b7 100644 # System information gem 'vmstat', '~> 2.3.0' # rubocop:todo Gemfile/MissingFeatureCategory -gem 'sys-filesystem', '~> 1.4.3' # rubocop:todo Gemfile/MissingFeatureCategory -+gem 'sys-filesystem', '= 1.3.2' # rubocop:todo Gemfile/MissingFeatureCategory ++gem 'sys-filesystem', '~> 1.4.5' # rubocop:todo Gemfile/MissingFeatureCategory # NTP client gem 'net-ntp' # rubocop:todo Gemfile/MissingFeatureCategory diff --git a/Gemfile.lock.orig b/Gemfile.lock -index e2ebb91..39b6df3 100644 +index bb66169..a4da10b 100644 --- a/Gemfile.lock.orig +++ b/Gemfile.lock -@@ -1605,8 +1605,8 @@ GEM +@@ -1657,7 +1657,7 @@ GEM attr_required (>= 0.0.5) httpclient (>= 2.4) sync (0.5.0) - sys-filesystem (1.4.3) -- ffi (~> 1.1) -+ sys-filesystem (1.3.2) -+ ffi (>= 0) ++ sys-filesystem (1.4.5) + ffi (~> 1.1) sysexits (1.2.0) table_print (1.5.7) - tanuki_emoji (0.9.0) -@@ -2061,7 +2059,7 @@ DEPENDENCIES - ssh_data (~> 1.3) +@@ -2123,7 +2123,7 @@ DEPENDENCIES stackprof (~> 0.2.25) state_machines-activerecord (~> 0.8.0) + static_holmes (~> 0.7.7) - sys-filesystem (~> 1.4.3) -+ sys-filesystem (= 1.3.2) ++ sys-filesystem (~> 1.4.5) tanuki_emoji (~> 0.9) telesignenterprise (~> 2.2) terser (= 1.0.2) From 7440e781b8b09bf6eb86d8bcd8feeb0fae9ba36b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 10:06:26 -0400 Subject: [PATCH 361/738] user/gitlab-foss: upgrade to 17.0.2 --- user/gitlab-foss/APKBUILD | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 9925aa5..88e4982 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=16.11.4 +pkgver=17.0.2 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -17,8 +17,8 @@ depends=" cmd:dpkg-deb exiftool git>=2.42.0 - gitaly~=16.9 - gitlab-shell>=14.34 + gitaly~=17.0 + gitlab-shell>=14.35 graphicsmagick http-parser procps @@ -59,8 +59,6 @@ makedepends=" protobuf-dev re2-dev ruby3.2-dev - ruby3.2-grpc~=1.58 - ruby3.2-rugged rust yarn>=1.2.0 " @@ -91,8 +89,6 @@ export BUNDLE_FROZEN=true export BUNDLE_JOBS=1 prepare() { - local sysgemdir=$(ruby -e 'puts Gem.default_dir') - default_prepare # The default log level is very chatty. @@ -108,17 +104,6 @@ prepare() { # Allow use of any bundler sed -i -e '/BUNDLED/,+1d' Gemfile.lock - - # Some gems are broken, so we copy our fixed version - # instead of installing it from RubyGems using Bundler. - for i in grpc rugged; do - mkdir -p vendor/gems/$i/src/ruby/lib/$i - cp -r "$sysgemdir"/gems/$i-*/* vendor/gems/$i/ - cp "$sysgemdir"/specifications/$i-*.gemspec \ - vendor/gems/$i/$i.gemspec - cp "$sysgemdir"/extensions/*/*/$i-*/$i/*.so \ - vendor/gems/$i/src/ruby/lib/$i/ - done } build() { @@ -154,9 +139,6 @@ build() { # Remove faulty RPATH. chrpath -d vendor/bundle/ruby/*/extensions/*/*/ruby-magic-*/magic/magic.so - # cp grpc lib - cp vendor/gems/grpc/src/ruby/lib/grpc/grpc_c.so vendor/bundle/ruby/*/gems/grpc-*/src/ruby/lib/grpc/grpc_c.so - # Patch installed gem gitlab-markup to use python3. # Option "-S" causes that Python cannot find docutils module. sed -i 's/python2 -S/python3/g' \ @@ -379,7 +361,7 @@ assets() { } sha512sums=" -8b9438778b61901dbfbc5c8af699a72e2279fb25f4e129ebdda294a6a0885056d0b1d2d51d760ad00a86f8ee61eb52bbf82cb96122fe5ccb2d5bffb485e720d3 gitlab-foss-v16.11.4.tar.gz +f9e9a5c4dec5a15281e9173ad93b260315330d4707985e5393d86e08d3dc1883cb107f5e4f6fd2c0d2d3e3325a99e678471a04aa613f8a4a99e9e965f7626466 gitlab-foss-v17.0.2.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From f57dc997f71f69de0e66a883eeef25563ab4b95e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 10:07:13 -0400 Subject: [PATCH 362/738] user/gitaly: upgrade to 17.0.2 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index 801d299..a925e15 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=16.11.4 +pkgver=17.0.2 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -c8107d5058bb7470244bc368fd1cec827a6fac32efef3ed4ffe637b1897bac6c440001e7a17bac97a22942c2dcba118c7fdd9dde49b8f286a0676c483aa815e4 gitaly-v16.11.4.tar.gz +645673511a9fbf868094e58c36395867228ba8a9c8e829d499e8008d8a713bab5b0f0bd0daec3f2acea5349435ccfff3559d086a2a96edca97573f8dcbb92fbd gitaly-v17.0.2.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 81ac0611da2411ddc16e123bc5eb71439d6625bf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 10:07:23 -0400 Subject: [PATCH 363/738] user/gitlab-pages: upgrade to 17.0.2 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index ab65b67..7d8ef86 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=16.11.4 +pkgver=17.0.2 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -09b8fa7e094698ad196de1e75c07fdce3d6b37a11ce7aa57bb2953b098bfd1fd9661911488a914d8e458b3c282c805649219189cf4fc75a45c54785ad87b4074 gitlab-pages-v16.11.4.tar.gz +3cbd35acdd98acac4300bf1eadedd53db8925ae70c1af7c94eaff26399b501490b81432631c493988ca5fa91154b72b0eb8b00441caec6f67771be3079bee526 gitlab-pages-v17.0.2.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 08ee79d0320b134632d4a97b93f7e0e833c9da22 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 18:11:32 -0400 Subject: [PATCH 364/738] user/grpc: drop due to not needed --- user/grpc/01-chttp2-maybe-uninitialized.patch | 10 - user/grpc/APKBUILD | 273 ------------------ user/grpc/cython3.patch | 172 ----------- user/grpc/find-dependency.patch | 13 - user/grpc/makefile-use-system-abseil.patch | 22 -- user/grpc/ruby-fix-protoc-path.patch | 25 -- user/grpc/ruby-use-shared-libs.patch | 81 ------ user/grpc/ruby-use-system-certs.patch | 15 - 8 files changed, 611 deletions(-) delete mode 100644 user/grpc/01-chttp2-maybe-uninitialized.patch delete mode 100644 user/grpc/APKBUILD delete mode 100644 user/grpc/cython3.patch delete mode 100644 user/grpc/find-dependency.patch delete mode 100644 user/grpc/makefile-use-system-abseil.patch delete mode 100644 user/grpc/ruby-fix-protoc-path.patch delete mode 100644 user/grpc/ruby-use-shared-libs.patch delete mode 100644 user/grpc/ruby-use-system-certs.patch diff --git a/user/grpc/01-chttp2-maybe-uninitialized.patch b/user/grpc/01-chttp2-maybe-uninitialized.patch deleted file mode 100644 index b531fbc..0000000 --- a/user/grpc/01-chttp2-maybe-uninitialized.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/src/core/ext/transport/chttp2/transport/chttp2_transport.cc -+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.cc -@@ -978,6 +978,7 @@ - } else { - r = grpc_chttp2_begin_write(t); - } -+ #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" - if (r.writing) { - if (r.partial) { - GRPC_STATS_INC_HTTP2_PARTIAL_WRITES(); diff --git a/user/grpc/APKBUILD b/user/grpc/APKBUILD deleted file mode 100644 index 1572117..0000000 --- a/user/grpc/APKBUILD +++ /dev/null @@ -1,273 +0,0 @@ -# Contributor: Keith Maxwell -# Contributor: wener -# Maintainer: wener -pkgname=grpc -pkgver=1.58.0 -pkgrel=2 -pkgdesc="The C based gRPC" -url="https://grpc.io/" -arch="all" -# BSD-3-Clause: third_party/upb, third_party/address_sorting -# MIT: third_party/upb/third_party/utf8_range -license="Apache-2.0 AND BSD-3-Clause AND MIT" -depends="ca-certificates" -depends_dev=" - $pkgname-cpp=$pkgver-r$pkgrel - $pkgname-plugins=$pkgver-r$pkgrel - " -_pythondepends=" - cython - python3-dev - py3-setuptools - " -_rubydepends=" - $pkgname=$pkgver-r$pkgrel - ruby3.2-google-protobuf>=3.19 - " -makedepends=" - abseil-cpp-dev - autoconf - automake - benchmark-dev - c-ares-dev - chrpath - cmake - libstdc++ - libtool - linux-headers - openssl-dev>3 - protobuf-dev - re2-dev - ruby3.2-dev - samurai - yaml-dev - xxhash-dev - zlib-dev - $_pythondepends - $_rubydepends - " -checkdepends="coreutils python3 py3-six" -subpackages=" - $pkgname-dev - $pkgname-cpp - $pkgname-plugins - $pkgname-doc - py3-grpcio-pyc - py3-grpcio:grpcio - ruby3.2-grpc:_ruby - libaddress_sorting:lib - libgpr:lib - libgrpc:lib - libgrpc_authorization_provider:lib - libgrpc_unsecure:lib - libupb:lib - " -_googletest_rev=0e402173c97aea7a00749e825b194bfede4f2e45 - -# ruby-dont-strip-library.patch: abuild will dot the strip -source="https://github.com/grpc/grpc/archive/v$pkgver/grpc-v$pkgver.tar.gz - googletest-$_googletest_rev.tar.gz::https://github.com/google/googletest/archive/$_googletest_rev.tar.gz - 01-chttp2-maybe-uninitialized.patch - find-dependency.patch - ruby-fix-protoc-path.patch - ruby-use-shared-libs.patch - ruby-use-system-certs.patch - makefile-use-system-abseil.patch - cython3.patch - " -options="net !check" # sometimes hang indefinitely on builders - -prepare() { - rm -r third_party/googletest - mv "$srcdir"/googletest-$_googletest_rev third_party/googletest - - # Remove bundled xxhash. - # Since grpc sets XXH_INCLUDE_ALL wherever it uses xxhash, it is using xxhash - # as a header-only library. This means we can replace it with the system copy - # by doing nothing further; xxhash.h is in the system include path and will be - # found instead, and there are no linker flags to add. See also - # https://github.com/grpc/grpc/issues/25945. - rm -rvf third_party/xxhash/* - - # This will be replaced with a symlink to system certs. - echo '' > etc/roots.pem - - default_prepare - - # Remove some bundled dependencies from the gem's files list. - sed -i \ - -e '/etc\/roots.pem/d' \ - -e '/third_party\/abseil/d' \ - -e '/third_party\/boringssl/d' \ - -e '/third_party\/cares/d' \ - -e '/third_party\/re2/d' \ - -e '/third_party\/xxhash/d' \ - -e '/third_party\/zlib/d' \ - grpc.gemspec - - # Remove unused dependency from gemspec - it's not required anyhwere, - # it's just Google pushing their crap everywhere... - sed -i '/add_dependency.*googleapis-common-protos-types/d' \ - grpc.gemspec -} - -build() { - export CFLAGS="$CFLAGS -flto=auto -DNDEBUG -O2" - export CXXFLAGS="$CXXFLAGS -flto=auto -DNDEBUG -O2" - cmake -B _build -G Ninja \ - -DCMAKE_BUILD_TYPE=None \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_CXX_STANDARD=17 \ - -DBUILD_SHARED_LIBS=True \ - -DgRPC_INSTALL=ON \ - -DgRPC_CARES_PROVIDER=package \ - -DgRPC_PROTOBUF_PROVIDER=package \ - -DgRPC_SSL_PROVIDER=package \ - -DgRPC_ZLIB_PROVIDER=package \ - -DgRPC_ABSL_PROVIDER=package \ - -DgRPC_BENCHMARK_PROVIDER=package \ - -DgRPC_RE2_PROVIDER=package \ - -DgRPC_BACKWARDS_COMPATIBILITY_MODE=OFF \ - -DgRPC_BUILD_TESTS="$(want_check && echo ON || echo OFF)" - cmake --build _build - - GRPC_PYTHON_CFLAGS="-std=c++17" \ - GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 \ - GRPC_PYTHON_BUILD_SYSTEM_CARES=1 \ - GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 \ - GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 \ - GRPC_PYTHON_BUILD_SYSTEM_RE2=1 \ - GRPC_PYTHON_BUILD_SYSTEM_ABSL=1 \ - python3 setup.py build - - # grpcio-tools - cd tools/distrib/python - python3 make_grpcio_tools.py - - cd "$builddir" - gem build grpc.gemspec - TOPDIR="$PWD/_build" gem install \ - --local \ - --install-dir _build/ruby \ - --ignore-dependencies \ - --no-document \ - --verbose \ - grpc-$pkgver.gem -} - -check() { - # delete times out in ci or broken for ci tests - rm -f _build/spinlock_test _build/resolve_address_using_ares_resolver_posix_test build/resolve_address_using_native_resolver_posix_test - rm -f _build/flaky_network_test _build/unknown_frame_bad_client_test _build/ssl_transport_security_test _build/httpscli_test - rm -f _build/headers_bad_client_test _build/httpcli_test - case $CARCH in - aarch64|ppc64le) rm -f _build/server_test _build/grpc_tool_test ;; - s390x) rm -f _build/client_lb_end2end_test _build/alts_frame_protector_test _build/alts_iovec_record_protocol_test ;; - armv7) rm -f _build/initial_settings_frame_bad_client_test ;; - x86) rm -f _build/time_jump_test _build/connection_prefix_bad_client_test ;; - esac - - # start helper - ./tools/run_tests/start_port_server.py & - find build/ -maxdepth 1 -type f -executable -name "*_test" -exec {} \; - # kill helper - pkill -9 python3 -} - -package() { - DESTDIR="$pkgdir" cmake --install _build - python3 setup.py install --skip-build --root="$pkgdir" - - cd doc - find ./ -type f -print -exec install -Dm644 {} "$pkgdir"/usr/share/doc/grpc/{} \; - rm "$pkgdir"/usr/share/doc/grpc/.gitignore - - find "$pkgdir" -type f -name roots.pem -exec \ - sh -c 'rm $0 && ln -s /etc/ssl/certs/ca-certificates.crt $0' "{}" \; -} - -cpp() { - pkgdesc="C++ language bindings for gRPC" - depends="$pkgname=$pkgver-r$pkgrel" - - amove usr/lib/libgrpc++*.so.* - amove usr/lib/libgrpc_plugin_support.so.* - amove usr/lib/libgrpcpp*.so.* -} - -plugins() { - pkgdesc="Protocol buffers compiler plugins for gRPC" - depends="$pkgname-cpp=$pkgver-r$pkgrel protobuf" - - amove usr/bin/grpc_*_plugin -} - -cli() { - pkgdesc="gRPC command line tool" - - install -Dm644 -t "$subpkgdir"/usr/lib "$builddir"/_build/libgrpc++_test_config.so.$pkgver - install -Dm755 -t "$subpkgdir"/usr/bin "$builddir"/_build/grpc_cli - - # Fix "Has /home/... in rpath" - chrpath -d "$subpkgdir"/usr/lib/libgrpc++_test_config.so.$pkgver - chrpath -d "$subpkgdir"/usr/bin/grpc_cli -} - -grpcio() { - pkgdesc="gRPC Python HTTP/2-based RPC framework" - depends="py3-six" - - amove usr/lib/python3* -} - -_ruby() { - pkgdesc="Send RPCs from Ruby using GRPC" - depends="$_rubydepends" - - local gemdir="$subpkgdir/$(ruby -e 'puts Gem.default_dir')" - - cd "$builddir"/_build/ruby - - mkdir -p "$gemdir" - cp -r extensions gems specifications "$gemdir"/ - - # Remove unnecessary files and rubbish... - cd "$gemdir"/extensions/*/*/grpc-$pkgver - rm gem_make.out mkmf.log || true - - cd "$gemdir"/gems/grpc-$pkgver - rm -rf .yardopts \ - Makefile \ - include/ \ - src/core/ \ - third_party/ - - cd src/ruby - rm -rf bin/ \ - ext/ \ - lib/grpc/*.so \ - pb/generate_proto_ruby.sh \ - pb/README.md \ - pb/src/ \ - pb/test/ \ - spec/ -} - -lib() { - pkgdesc="$pkgdesc ($subpkgname library)" - depends="$pkgname=$pkgver-r$pkgrel" - - amove usr/lib/$subpkgname.so.* -} - -sha512sums=" -fb2fd211a22dd777cf4df39a9dd72e5c8014f1546a89d3910b006503aac80a74d5797705e02911e9c07316ed973f71110b94cc0e86225f648d4ff91773748a43 grpc-v1.58.0.tar.gz -5c5eaf6ff9f3c1bca025b7ef0234ba97232ba85b43e6354a92f49b7208f5c47581ebaf18bf58618498e5d264f2620c2b6676e81bb0f7df77112b96ba271ececf googletest-0e402173c97aea7a00749e825b194bfede4f2e45.tar.gz -7fa146ce86ddd4f160bb1ca9ff01cb7aca6b2b8c9aa50e4fa6b84504b9117b104be0d1e31ccb452d846549dfe1e9012ceccfcdc1f2357ed567621d71fb8b08c5 01-chttp2-maybe-uninitialized.patch -6702e39c6a3c065fe4ff5ae48898057135c09bf6851e35fc958cf95ee5d77e9dd34e8c34d978efe60682384e46c4c4b2e51156d546b06a0eb1feed89adcc024b find-dependency.patch -4ea72d2acd8bee9c9022a4412aa0af0477faca7b0810d14decb3ad5d4da044247f51189512323bfee855b9b260a7f82b812310391451e5d8ee718297800d7a73 ruby-fix-protoc-path.patch -7123bf1bbc48ceb303ce1e9820ea45a06dabd25e20e3c1c116ef68e629e80f229cf20314c415d74f0c5c1725f23a00b446656e0cffba3dcd3cc766ae29d8fb2f ruby-use-shared-libs.patch -631af4b9ac29c1ebabb2c88394ea2993e36cec1beda38195e1587dbd9d3c8c9eef75a17d2326d3cd2e682de551401216075ba08fdc501c098b8092d718ded381 ruby-use-system-certs.patch -89e260934da83eb45fa6b73884cba1b1c30f99c0eb883a726e2d36ee4788246f4c6fa1b201077038af956bcb58e625f83bedba4f186c711785ec240373ce4fc5 makefile-use-system-abseil.patch -896d2771fbb726db97efc7a76687a8fddfae18b0492977fc1f7cec4002803f7aed29e8276c94c6b60a06ecfe3ee7795d4ec3f8f90031dd3eda32d3e23dc9c98c cython3.patch -" diff --git a/user/grpc/cython3.patch b/user/grpc/cython3.patch deleted file mode 100644 index 9068927..0000000 --- a/user/grpc/cython3.patch +++ /dev/null @@ -1,172 +0,0 @@ -From b3277bac1585ddee88a170b0a95c260d909cce9c Mon Sep 17 00:00:00 2001 -From: Atri Bhattacharya -Date: Sat, 24 Feb 2024 04:06:08 +0530 -Subject: [PATCH] [python] Cython 3 compatibility: declare functions noexcept. - -In Cython 3, cdef functions that really will not raise exceptions must -be declared as `noexcept`. Fixed by this commit. - -Update requirements to `cython >= 3.0` in requirements*.txt and -setup.py. - -Fixes issue #33918. ---- - requirements.bazel.txt | 2 +- - requirements.txt | 2 +- - setup.py | 2 +- - .../grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi | 2 +- - .../grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi | 2 +- - src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi | 2 +- - src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi | 6 +++--- - src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi | 6 +++--- - src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi | 6 +++--- - 9 files changed, 15 insertions(+), 15 deletions(-) - -diff --git a/requirements.bazel.txt b/requirements.bazel.txt -index f46432cc88891..905c092ce4c33 100644 ---- a/requirements.bazel.txt -+++ b/requirements.bazel.txt -@@ -1,6 +1,6 @@ - # GRPC Python setup requirements - coverage==4.5.4 --cython==0.29.21 -+cython==3.0.0 - protobuf>=3.5.0.post1, < 4.0dev - wheel==0.38.1 - oauth2client==4.1.0 -diff --git a/requirements.txt b/requirements.txt -index 05390850559f1..56169434b1b78 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -1,5 +1,5 @@ - # GRPC Python setup requirements - coverage>=4.0 --cython>=0.29.8,<3.0.0rc1 -+cython>=3.0.0 - protobuf>=4.21.3,<5.0dev - wheel>=0.29 -diff --git a/setup.py b/setup.py -index 2ce5fef422316..8b4ce5c16736a 100644 ---- a/setup.py -+++ b/setup.py -@@ -539,7 +539,7 @@ def cython_extensions_and_necessity(): - sys.stderr.write( - "We could not find Cython. Setup may take 10-20 minutes.\n" - ) -- SETUP_REQUIRES += ("cython>=0.23,<3.0.0rc1",) -+ SETUP_REQUIRES += ("cython>=3.0.0",) - - COMMAND_CLASS = { - "doc": commands.SphinxDocumentation, -diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi -index e54e5107547c1..26edbdb917b10 100644 ---- a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi -+++ b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pxd.pxi -@@ -48,7 +48,7 @@ cdef class CallbackWrapper: - @staticmethod - cdef void functor_run( - grpc_completion_queue_functor* functor, -- int succeed) -+ int succeed) noexcept - - cdef grpc_completion_queue_functor *c_functor(self) - -diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi -index 14a0098fc2041..2b0df0e5ce7f7 100644 ---- a/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi -+++ b/src/python/grpcio/grpc/_cython/_cygrpc/aio/callback_common.pyx.pxi -@@ -50,7 +50,7 @@ cdef class CallbackWrapper: - @staticmethod - cdef void functor_run( - grpc_completion_queue_functor* functor, -- int success): -+ int success) noexcept: - cdef CallbackContext *context = functor - cdef object waiter = context.waiter - if not waiter.cancelled(): -diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi -index 74a3f16d72dbb..600c0f304e067 100644 ---- a/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi -+++ b/src/python/grpcio/grpc/_cython/_cygrpc/credentials.pyx.pxi -@@ -316,7 +316,7 @@ def server_credentials_ssl_dynamic_cert_config(initial_cert_config, - return credentials - - cdef grpc_ssl_certificate_config_reload_status _server_cert_config_fetcher_wrapper( -- void* user_data, grpc_ssl_server_certificate_config **config) with gil: -+ void* user_data, grpc_ssl_server_certificate_config **config) noexcept with gil: - # This is a credentials.ServerCertificateConfig - cdef ServerCertificateConfig cert_config = None - if not user_data: -diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi -index 13a02434787ba..b300883abae81 100644 ---- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi -+++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pxd.pxi -@@ -12,10 +12,10 @@ - # See the License for the specific language governing permissions and - # limitations under the License. - --cdef void __prefork() nogil -+cdef void __prefork() noexcept nogil - - --cdef void __postfork_parent() nogil -+cdef void __postfork_parent() noexcept nogil - - --cdef void __postfork_child() nogil -\ No newline at end of file -+cdef void __postfork_child() noexcept nogil -diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi -index 565f483b2ae00..d901cfddf4321 100644 ---- a/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi -+++ b/src/python/grpcio/grpc/_cython/_cygrpc/fork_posix.pyx.pxi -@@ -35,7 +35,7 @@ _GRPC_ENABLE_FORK_SUPPORT = ( - - _fork_handler_failed = False - --cdef void __prefork() nogil: -+cdef void __prefork() noexcept nogil: - with gil: - global _fork_handler_failed - _fork_handler_failed = False -@@ -49,14 +49,14 @@ cdef void __prefork() nogil: - _fork_handler_failed = True - - --cdef void __postfork_parent() nogil: -+cdef void __postfork_parent() noexcept nogil: - with gil: - with _fork_state.fork_in_progress_condition: - _fork_state.fork_in_progress = False - _fork_state.fork_in_progress_condition.notify_all() - - --cdef void __postfork_child() nogil: -+cdef void __postfork_child() noexcept nogil: - with gil: - try: - if _fork_handler_failed: -diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi b/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi -index da4b81bd97e65..f59410073b736 100644 ---- a/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi -+++ b/src/python/grpcio/grpc/_cython/_cygrpc/vtable.pyx.pxi -@@ -13,16 +13,16 @@ - # limitations under the License. - - # TODO(https://github.com/grpc/grpc/issues/15662): Reform this. --cdef void* _copy_pointer(void* pointer): -+cdef void* _copy_pointer(void* pointer) noexcept: - return pointer - - - # TODO(https://github.com/grpc/grpc/issues/15662): Reform this. --cdef void _destroy_pointer(void* pointer): -+cdef void _destroy_pointer(void* pointer) noexcept: - pass - - --cdef int _compare_pointer(void* first_pointer, void* second_pointer): -+cdef int _compare_pointer(void* first_pointer, void* second_pointer) noexcept: - if first_pointer < second_pointer: - return -1 - elif first_pointer > second_pointer: diff --git a/user/grpc/find-dependency.patch b/user/grpc/find-dependency.patch deleted file mode 100644 index f846e16..0000000 --- a/user/grpc/find-dependency.patch +++ /dev/null @@ -1,13 +0,0 @@ -without this find_dependency() doesn't exist --- -diff --git a/cmake/gRPCConfig.cmake.in b/cmake/gRPCConfig.cmake.in -index 98d8c6d..5500ca2 100644 ---- a/cmake/gRPCConfig.cmake.in -+++ b/cmake/gRPCConfig.cmake.in -@@ -1,5 +1,6 @@ - # Module path - list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/modules) -+include(CMakeFindDependencyMacro) - - # Depend packages - @_gRPC_FIND_ZLIB@ diff --git a/user/grpc/makefile-use-system-abseil.patch b/user/grpc/makefile-use-system-abseil.patch deleted file mode 100644 index ac4f9fc..0000000 --- a/user/grpc/makefile-use-system-abseil.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- a/Makefile -+++ b/Makefile -@@ -575,8 +575,8 @@ - - # Setup abseil dependency - --GRPC_ABSEIL_DEP = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a --GRPC_ABSEIL_MERGE_LIBS = $(LIBDIR)/$(CONFIG)/libgrpc_abseil.a -+GRPC_ABSEIL_DEP = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal -+GRPC_ABSEIL_MERGE_LIBS = -labsl_base -labsl_int128 -labsl_strings -labsl_time -labsl_bad_optional_access -labsl_throw_delegate -labsl_str_format_internal - - # Setup re2 dependency - -@@ -2809,7 +2809,7 @@ - third_party/abseil-cpp/absl/types/bad_variant_access.cc \ - - --LIBGRPC_ABSEIL_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_ABSEIL_SRC)))) -+LIBGRPC_ABSEIL_OBJS = - - $(LIBGRPC_ABSEIL_OBJS): CPPFLAGS += -g -Ithird_party/abseil-cpp - diff --git a/user/grpc/ruby-fix-protoc-path.patch b/user/grpc/ruby-fix-protoc-path.patch deleted file mode 100644 index 91f0268..0000000 --- a/user/grpc/ruby-fix-protoc-path.patch +++ /dev/null @@ -1,25 +0,0 @@ -Patch-Source: https://sources.debian.org/src/grpc/1.44.0-3/debian/patches/fix-protoc-path.patch (modified) - ---- a/src/ruby/end2end/package_with_underscore_test.rb -+++ b/src/ruby/end2end/package_with_underscore_test.rb -@@ -20,8 +20,8 @@ def main - pb_dir = File.join(root_dir, 'src', 'ruby', 'end2end', 'protos') - -- bins_dir = File.join(root_dir, 'cmake', 'build') -+ bins_dir = '/usr/bin' - plugin = File.join(bins_dir, 'grpc_ruby_plugin') -- protoc = File.join(bins_dir, 'third_party', 'protobuf', 'protoc') -+ protoc = File.join(bins_dir, 'protoc') - - got = nil - ---- a/src/ruby/tools/bin/grpc_tools_ruby_protoc -+++ b/src/ruby/tools/bin/grpc_tools_ruby_protoc -@@ -25,6 +25,5 @@ plugin_name = 'grpc_ruby_plugin' + ext - --protoc_dir = File.join(File.dirname(__FILE__), -- PLATFORM.architecture + '-' + PLATFORM.os_name) -+protoc_dir = '/usr/bin' - - protoc_path = File.join(protoc_dir, protoc_name) - diff --git a/user/grpc/ruby-use-shared-libs.patch b/user/grpc/ruby-use-shared-libs.patch deleted file mode 100644 index 736869a..0000000 --- a/user/grpc/ruby-use-shared-libs.patch +++ /dev/null @@ -1,81 +0,0 @@ -From: Jakub Jirutka -Date: Wed, 24 Aug 2022 21:20:22 +0200 -Subject: [PATCH] Link with shared libraries, don't embed anything - -- Don't statically link openssl, zlib and cares. -- Don't build and statically link libgrpc, link shared libgrpc. -- Don't statically link libgcc and libstdc++. - -diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb -index 98a8876..808ecfe 100644 ---- a/src/ruby/ext/grpc/extconf.rb -+++ b/src/ruby/ext/grpc/extconf.rb -@@ -69,11 +69,11 @@ if apple_toolchain && !cross_compiling - end - - # Don't embed on TruffleRuby (constant-time crypto is unsafe with Sulong, slow build times) --ENV['EMBED_OPENSSL'] = (RUBY_ENGINE != 'truffleruby').to_s -+ENV['EMBED_OPENSSL'] = 'false' - # Don't embed on TruffleRuby (the system zlib is already linked for the zlib C extension, slow build times) --ENV['EMBED_ZLIB'] = (RUBY_ENGINE != 'truffleruby').to_s -+ENV['EMBED_ZLIB'] = 'false' - --ENV['EMBED_CARES'] = 'true' -+ENV['EMBED_CARES'] = 'false' - - ENV['ARCH_FLAGS'] = RbConfig::CONFIG['ARCH_FLAG'] - if apple_toolchain && !cross_compiling -@@ -97,32 +97,7 @@ - strip_tool = RbConfig::CONFIG['STRIP'] - strip_tool += ' -x' if apple_toolchain - --unless windows -- puts 'Building internal gRPC into ' + grpc_lib_dir -- nproc = 4 -- nproc = Etc.nprocessors if Etc.respond_to? :nprocessors -- nproc_override = ENV['GRPC_RUBY_BUILD_PROCS'] -- unless nproc_override.nil? or nproc_override.size == 0 -- nproc = nproc_override -- puts "Overriding make parallelism to #{nproc}" -- end -- make = bsd ? 'gmake' : 'make' -- cmd = "#{make} -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config} Q=" -- puts "Building grpc native library: #{cmd}" -- system(cmd) -- exit 1 unless $? == 0 -- -- if grpc_config == 'opt' -- rm_obj_cmd = "rm -rf #{File.join(output_dir, 'objs')}" -- puts "Removing grpc object files: #{rm_obj_cmd}" -- system(rm_obj_cmd) -- exit 1 unless $? == 0 -- strip_cmd = "#{strip_tool} #{grpc_lib_dir}/*.a" -- puts "Stripping grpc native library: #{strip_cmd}" -- system(strip_cmd) -- exit 1 unless $? == 0 -- end --end -+$LDFLAGS << ' -L' + ENV.fetch('TOPDIR', '.') - - $CFLAGS << ' -DGRPC_RUBY_WINDOWS_UCRT' if windows_ucrt - $CFLAGS << ' -I' + File.join(grpc_root, 'include') -@@ -118,7 +103,7 @@ ext_export_file += '-truffleruby' if RUBY_ENGINE == 'truffleruby' - $LDFLAGS << ' -Wl,--version-script="' + ext_export_file + '.gcc"' if linux - $LDFLAGS << ' -Wl,-exported_symbols_list,"' + ext_export_file + '.clang"' if apple_toolchain - --$LDFLAGS << ' ' + File.join(grpc_lib_dir, 'libgrpc.a') unless windows -+$LDFLAGS << ' -Wl,-wrap,memcpy -lgrpc' unless windows - if grpc_config == 'gcov' - $CFLAGS << ' -O0 -fprofile-arcs -ftest-coverage' - $LDFLAGS << ' -fprofile-arcs -ftest-coverage -rdynamic' -@@ -129,10 +114,6 @@ if grpc_config == 'dbg' - end - - $LDFLAGS << ' -Wl,-wrap,memcpy' if linux --# Do not statically link standard libraries on TruffleRuby as this does not work when compiling to bitcode --if linux && RUBY_ENGINE != 'truffleruby' -- $LDFLAGS << ' -static-libgcc -static-libstdc++' --end - $LDFLAGS << ' -static' if windows - - $CFLAGS << ' -std=c11 ' diff --git a/user/grpc/ruby-use-system-certs.patch b/user/grpc/ruby-use-system-certs.patch deleted file mode 100644 index 5d3ba16..0000000 --- a/user/grpc/ruby-use-system-certs.patch +++ /dev/null @@ -1,15 +0,0 @@ -From: Jakub Jirutka -Date: Fri, 20 May 2017 01:35:00 +0200 -Subject: [PATCH] Use system CA certificates - ---- a/src/ruby/lib/grpc.rb -+++ b/src/ruby/lib/grpc.rb -@@ -12,7 +12,7 @@ - # See the License for the specific language governing permissions and - # limitations under the License. - --ssl_roots_path = File.expand_path('../../../../etc/roots.pem', __FILE__) -+ssl_roots_path = '/etc/ssl/certs/ca-certificates.crt' - - require_relative 'grpc/errors' - require_relative 'grpc/structs' From 1c7eeb3dcef1a6901a329ee2637a06d75d523480 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Jun 2024 18:11:43 -0400 Subject: [PATCH 365/738] user/ruby3.2-rugged: drop due to not needed --- user/ruby3.2-rugged/APKBUILD | 75 ---------------- .../fix-extconf-version-check.patch | 13 --- user/ruby3.2-rugged/libgit2-1.7.patch | 90 ------------------- user/ruby3.2-rugged/libgit2-fixture-dir.patch | 12 --- user/ruby3.2-rugged/skip-online-tests.patch | 15 ---- .../skip-test_discover_false.patch | 27 ------ .../skip-test_read_global_config_file.patch | 13 --- 7 files changed, 245 deletions(-) delete mode 100644 user/ruby3.2-rugged/APKBUILD delete mode 100644 user/ruby3.2-rugged/fix-extconf-version-check.patch delete mode 100644 user/ruby3.2-rugged/libgit2-1.7.patch delete mode 100644 user/ruby3.2-rugged/libgit2-fixture-dir.patch delete mode 100644 user/ruby3.2-rugged/skip-online-tests.patch delete mode 100644 user/ruby3.2-rugged/skip-test_discover_false.patch delete mode 100644 user/ruby3.2-rugged/skip-test_read_global_config_file.patch diff --git a/user/ruby3.2-rugged/APKBUILD b/user/ruby3.2-rugged/APKBUILD deleted file mode 100644 index 42f7818..0000000 --- a/user/ruby3.2-rugged/APKBUILD +++ /dev/null @@ -1,75 +0,0 @@ -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-rugged -_gemname=rugged -pkgver=1.6.3 -pkgrel=1 -pkgdesc="Ruby bindings to libgit2" -url="https://github.com/libgit2/rugged" -arch="all" -license="MIT" -checkdepends=" - git - libgit2-tests - ruby3.2-minitest - ruby3.2-rake - ruby3.2-rake-compiler - " -makedepends=" - libgit2-dev>=${pkgver%.*} - ruby3.2 - ruby3.2-dev - " -source="$_gemname-$pkgver.tar.gz::https://github.com/libgit2/$_gemname/archive/v$pkgver.tar.gz - fix-extconf-version-check.patch - libgit2-fixture-dir.patch - libgit2-1.7.patch - skip-test_discover_false.patch - skip-test_read_global_config_file.patch - skip-online-tests.patch - " -builddir="$srcdir/$_gemname-$pkgver" -# Rugged::ConfigError: repository path '/tmp/' is not owned by current user -# requires tmp persmissions on host -options="!check" - -build() { - gem build $_gemname.gemspec - - RUGGED_USE_SYSTEM_LIBRARIES=1 gem install --local \ - --install-dir dist \ - --ignore-dependencies \ - --no-document \ - --verbose \ - $_gemname - - # Needed for tests. - cp -l dist/extensions/*/*/$_gemname-*/$_gemname/*.so lib/$_gemname/ -} - -check() { - rake test LIBGIT2_FIXTURE_DIR="/usr/src/libgit2/tests/resources" -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - cd "$builddir"/dist - - mkdir -p "$gemdir" - cp -r extensions gems specifications "$gemdir"/ - - # Remove unnecessary and duplicated files. - rm -f "$gemdir"/extensions/*/*/$_gemname-*/mkmf.log - cd "$gemdir"/gems/$_gemname-$pkgver - rm -rf ext/ lib/$_gemname/*.so LICENSE* README* -} - -sha512sums=" -4d54b5df04382628aff7e1abbf5fbd9730564c9bcb4e17da34ac59578b306db567b15151629a10c4a6d8174a31cd8be03c27ff0d1514cb19de237e773f4b64ce rugged-1.6.3.tar.gz -0e55aff667175496e9df1920c6d49042077196aa992a729323628224e7930a6f976bcbfae70d2af733a043c173e8cd5f571606f0b898b008472b40fcefe6b425 fix-extconf-version-check.patch -0c749aeb8d6a29aed51737bab09c7b0a6669ac691461758c856ede5d8510ad6edfa284cddd1b54982bf614a45ba817b70e838e071889a9b05e1b0580111ec826 libgit2-fixture-dir.patch -bcf7b554390fb2b1ef9043f8c934ae51a299f223ec1d7826dcb8eed078961cd084c05148c84142d60cc0a3213653bd416af1fbb09bfa5b26c9ce87fca79f6a18 libgit2-1.7.patch -33464eeefc7669fe3bf5f47c4016cacdcba4f7455ed22b441383b49721870072b5095dbb68832cdb933a7659a415476db64b579a98c888b83900d092bb8b54be skip-test_discover_false.patch -b9e028f18830e447773e895046eb03489e94bb5a76fede51f93545ed67f7249ed8f37ed4bb832eb68a2db281ff3e2b84dab8b72bb21eea4b835b0f1ce23943c3 skip-test_read_global_config_file.patch -5f0ad88eb7ac8c69605c43712e046efd47b727f48e98ee4047be850da4fea48c11fc2a383c791810a1bc81c08ca00428d4906c1af02a0d0da6e1ffbd4723b8f3 skip-online-tests.patch -" diff --git a/user/ruby3.2-rugged/fix-extconf-version-check.patch b/user/ruby3.2-rugged/fix-extconf-version-check.patch deleted file mode 100644 index fc22612..0000000 --- a/user/ruby3.2-rugged/fix-extconf-version-check.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/ext/rugged/extconf.rb b/ext/rugged/extconf.rb -index 7dbd2b3..92251e3 100644 ---- a/ext/rugged/extconf.rb -+++ b/ext/rugged/extconf.rb -@@ -70,7 +70,7 @@ if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES']) - - major = minor = nil - -- File.readlines(File.join(LIBGIT2_DIR, "include", "git2", "version.h")).each do |line| -+ File.readlines(File.join("/usr", "include", "git2", "version.h")).each do |line| - if !major && (matches = line.match(/^#define LIBGIT2_VER_MAJOR\s+([0-9]+)$/)) - major = matches[1] - next diff --git a/user/ruby3.2-rugged/libgit2-1.7.patch b/user/ruby3.2-rugged/libgit2-1.7.patch deleted file mode 100644 index 4fe0884..0000000 --- a/user/ruby3.2-rugged/libgit2-1.7.patch +++ /dev/null @@ -1,90 +0,0 @@ -Patch-Source: https://github.com/libgit2/rugged/pull/964 -safe as we apply the libgit2 fix to libgit. --- -From 508fbc2bcd8fdc400fcc4513b53d5205c4b7e9d4 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Carlos=20Mart=C3=ADn=20Nieto?= -Date: Tue, 18 Jul 2023 10:27:37 +0200 -Subject: [PATCH 1/3] Update libgit2 to v1.7.0 - ---- - vendor/libgit2 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/rugged/rugged_allocator.c b/ext/rugged/rugged_allocator.c -index 30ee537..0059af6 100644 ---- a/ext/rugged/rugged_allocator.c -+++ b/ext/rugged/rugged_allocator.c -@@ -13,58 +13,11 @@ static void *rugged_gmalloc(size_t n, const char *file, int line) - return xmalloc(n); - } - --static void *rugged_gcalloc(size_t nelem, size_t elsize, const char *file, int line) --{ -- return xcalloc(nelem, elsize); --} -- --static char *rugged_gstrdup(const char *str, const char *file, int line) --{ -- return ruby_strdup(str); --} -- --static char *rugged_gstrndup(const char *str, size_t n, const char *file, int line) --{ -- size_t len; -- char *newstr; -- -- len = strnlen(str, n); -- if (len < n) -- n = len; -- -- newstr = xmalloc(n+1); -- memcpy(newstr, str, n); -- newstr[n] = '\0'; -- -- return newstr; --} -- --static char *rugged_gsubstrdup(const char *str, size_t n, const char *file, int line) --{ -- char *newstr; -- -- newstr = xmalloc(n+1); -- memcpy(newstr, str, n); -- newstr[n] = '\0'; -- -- return newstr; --} -- - static void *rugged_grealloc(void *ptr, size_t size, const char *file, int line) - { - return xrealloc(ptr, size); - } - --static void *rugged_greallocarray(void *ptr, size_t nelem, size_t elsize, const char *file, int line) --{ -- return xrealloc2(ptr, nelem, elsize); --} -- --static void *rugged_gmallocarray(size_t nelem, size_t elsize, const char *file, int line) --{ -- return xmalloc2(nelem, elsize); --} -- - static void rugged_gfree(void *ptr) - { - xfree(ptr); -@@ -75,14 +28,7 @@ void rugged_set_allocator(void) - git_allocator allocator; - - allocator.gmalloc = rugged_gmalloc; -- allocator.gcalloc = rugged_gcalloc; -- allocator.gstrdup = rugged_gstrdup; -- allocator.gstrndup = rugged_gstrndup; -- allocator.gstrndup = rugged_gstrndup; -- allocator.gsubstrdup = rugged_gsubstrdup; - allocator.grealloc = rugged_grealloc; -- allocator.greallocarray = rugged_greallocarray; -- allocator.gmallocarray = rugged_gmallocarray; - allocator.gfree = rugged_gfree; - - git_libgit2_opts(GIT_OPT_SET_ALLOCATOR, &allocator); diff --git a/user/ruby3.2-rugged/libgit2-fixture-dir.patch b/user/ruby3.2-rugged/libgit2-fixture-dir.patch deleted file mode 100644 index 9d6a24d..0000000 --- a/user/ruby3.2-rugged/libgit2-fixture-dir.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/test/test_helper.rb -+++ b/test/test_helper.rb -@@ -130,7 +130,8 @@ - end - - TEST_DIR = File.dirname(File.expand_path(__FILE__)) -- LIBGIT2_FIXTURE_DIR = File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) -+ LIBGIT2_FIXTURE_DIR = ENV['LIBGIT2_FIXTURE_DIR'] \ -+ || File.expand_path("../../vendor/libgit2/tests/resources", __FILE__) - end - - class OnlineTestCase < TestCase diff --git a/user/ruby3.2-rugged/skip-online-tests.patch b/user/ruby3.2-rugged/skip-online-tests.patch deleted file mode 100644 index c0cb6a6..0000000 --- a/user/ruby3.2-rugged/skip-online-tests.patch +++ /dev/null @@ -1,15 +0,0 @@ -Skip all online tests. - ---- a/test/test_helper.rb -+++ b/test/test_helper.rb -@@ -155,6 +156,10 @@ - end - - super -+ end -+ else -+ def before_setup -+ skip 'online tests have been disabled' - end - end - diff --git a/user/ruby3.2-rugged/skip-test_discover_false.patch b/user/ruby3.2-rugged/skip-test_discover_false.patch deleted file mode 100644 index e968c02..0000000 --- a/user/ruby3.2-rugged/skip-test_discover_false.patch +++ /dev/null @@ -1,27 +0,0 @@ -Skip these two tests: - - 1) Failure: -RepositoryDiscoverTest#test_discover_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:426]: -Rugged::RepositoryError expected but nothing was raised. - - 2) Failure: -RepositoryDiscoverTest#test_discover_nested_false [/home/jirutjak/aports/testing/ruby-rugged/src/rugged-0.26.0/test/repo_test.rb:432]: -Rugged::RepositoryError expected but nothing was raised. - ---- a/test/repo_test.rb -+++ b/test/repo_test.rb -@@ -423,12 +423,14 @@ - end - - def test_discover_false -+ skip 'I have no idea why this test does not pass :(' - assert_raises Rugged::RepositoryError do - Rugged::Repository.discover(@tmpdir) - end - end - - def test_discover_nested_false -+ skip 'I have no idea why this test does not pass :(' - assert_raises Rugged::RepositoryError do - Rugged::Repository.discover(File.join(@tmpdir, 'foo')) - end diff --git a/user/ruby3.2-rugged/skip-test_read_global_config_file.patch b/user/ruby3.2-rugged/skip-test_read_global_config_file.patch deleted file mode 100644 index d3a3310..0000000 --- a/user/ruby3.2-rugged/skip-test_read_global_config_file.patch +++ /dev/null @@ -1,13 +0,0 @@ -It seems that this test fails when user.name is NOT set in ~/.gitconfig -on the build system. - ---- a/test/config_test.rb -+++ b/test/config_test.rb -@@ -17,6 +17,7 @@ - end - - def test_read_global_config_file -+ skip 'This test is flawed, it runs on real FS, i.e. it is not isolated' - config = Rugged::Config.global - refute_nil config['user.name'] - assert_nil config['core.bare'] From bdb37e35ee802ee8db2efdf3d6dc7eea81dd4c67 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 16 Jun 2024 21:20:24 -0400 Subject: [PATCH 366/738] user/wikijs: new aport --- user/wikijs/APKBUILD | 60 +++++++++++++++++++++++++++++ user/wikijs/config.sample.yml.patch | 13 +++++++ user/wikijs/wikijs.initd | 24 ++++++++++++ user/wikijs/wikijs.post-install | 18 +++++++++ user/wikijs/wikijs.pre-install | 20 ++++++++++ 5 files changed, 135 insertions(+) create mode 100644 user/wikijs/APKBUILD create mode 100644 user/wikijs/config.sample.yml.patch create mode 100644 user/wikijs/wikijs.initd create mode 100755 user/wikijs/wikijs.post-install create mode 100644 user/wikijs/wikijs.pre-install diff --git a/user/wikijs/APKBUILD b/user/wikijs/APKBUILD new file mode 100644 index 0000000..aeaad93 --- /dev/null +++ b/user/wikijs/APKBUILD @@ -0,0 +1,60 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) + +pkgname=wikijs +pkgver=2.5.303 +pkgrel=0 +pkgdesc="Wiki.js | A modern, lightweight and powerful wiki app built on Node.js" +license="AGPL-3.0" +arch="!armv7 x86_64" +options="!check" # No test suite +depends=" + libcap-setcap + nodejs>=10.12.0 + postgresql + python3 + " +makedepends=" + yarn + npm + " +url="https://github.com/Requarks/wiki" +subpackages="$pkgname-openrc" +install="$pkgname.post-install $pkgname.pre-install" +builddir="$srcdir"/wiki-$pkgver +pkgusers="wikijs" +pkggroups="wikijs" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/requarks/wiki/archive/refs/tags/v$pkgver.tar.gz + wikijs.initd + config.sample.yml.patch +" + +prepare() { + default_prepare + sed -i "s|\"version.*|\"version\": \"$pkgver\",|" "$builddir"/package.json + sed -i 's|"dev": true.*|"dev": "false",|' "$builddir"/package.json +} +build() { + yarn --frozen-lockfile --non-interactive + yarn build + rm -rf node_modules + yarn --production --frozen-lockfile --non-interactive +} + +package() { + install -Dm755 "$srcdir"/wikijs.initd "$pkgdir"/etc/init.d/wikijs + + install -Dm644 -o 5494 -g 5494 "$builddir"/config.sample.yml "$pkgdir"/etc/wikijs/config.yml + + install -Dm644 "$builddir"/package.json -t "$pkgdir"/usr/lib/bundles/wikijs + cp -aR "$builddir"/assets "$builddir"/server "$builddir"/node_modules "$pkgdir"/usr/lib/bundles/wikijs + + mkdir -p "$pkgdir"/var/lib/wikijs + chown 5494:5494 "$pkgdir"/var/lib/wikijs +} +sha512sums=" +a463d79ad0d8ff15dbe568b839094d697c6de0b2e991b77a4944e2a82f9789de6840e504a4673e4e0900d61596e880ca276008de86dac4f05f5823dc0427d2fc wikijs-2.5.303.tar.gz +355131ee5617348b82681cb8543c784eea59689990a268ecd3b77d44fe9abcca9c86fb8b047f0a8faeba079c650faa7790c5dd65418d313cd7561f38bb590c03 wikijs.initd +07b536c20e370d2a926038165f0e953283259c213a80a8648419565f5359ab05f528ac310e81606914013da212270df6feddb22e514cbcb2464c8274c956e4af config.sample.yml.patch +" diff --git a/user/wikijs/config.sample.yml.patch b/user/wikijs/config.sample.yml.patch new file mode 100644 index 0000000..6532c25 --- /dev/null +++ b/user/wikijs/config.sample.yml.patch @@ -0,0 +1,13 @@ +diff --git a/config.sample.yml.orig b/config.sample.yml +index 47edd8d..458472a 100644 +--- a/config.sample.yml.orig ++++ b/config.sample.yml +@@ -136,7 +136,7 @@ ha: false + # Data Path + # --------------------------------------------------------------------- + # Writeable data path used for cache and temporary user uploads. +-dataPath: ./data ++dataPath: /var/lib/wikijs/data + + # --------------------------------------------------------------------- + # Body Parser Limit diff --git a/user/wikijs/wikijs.initd b/user/wikijs/wikijs.initd new file mode 100644 index 0000000..680efbf --- /dev/null +++ b/user/wikijs/wikijs.initd @@ -0,0 +1,24 @@ +#!/sbin/openrc-run +name="$RC_SVCNAME" +cfgfile="/etc/conf.d/$RC_SVCNAME" +pidfile="/var/run/$RC_SVCNAME.pid" +command="/usr/bin/node server" +command_args="" +command_user="wikijs" +command_group="wikijs" +supervisor="supervise-daemon" +start_stop_daemon_args="" +command_background="yes" +output_log="/var/log/$RC_SVCNAME/$RC_SVCNAME.log" +error_log="/var/log/$RC_SVCNAME/$RC_SVCNAME.err" +working_directory="/usr/lib/bundles/wikijs" + +start_pre() { + checkpath --directory --owner $command_user:$command_user --mode 0775 \ + /var/log/$RC_SVCNAME \ + /var/lib/$RC_SVCNAME + export NODE_ENV=production + export CONFIG_FILE=/etc/wikijs/config.yml + cd "$working_directory" +} + diff --git a/user/wikijs/wikijs.post-install b/user/wikijs/wikijs.post-install new file mode 100755 index 0000000..748e847 --- /dev/null +++ b/user/wikijs/wikijs.post-install @@ -0,0 +1,18 @@ +#!/bin/sh +set -eu + +group=wikijs +config_file='/etc/wikijs/config.yml' + +setcap 'cap_net_bind_service=+ep' /usr/bin/node + +cat >&2 <<-EOF +* +* 1. Adjust settings in /etc/wikijs/config.yml. +* +* 2. Create database for wikijs: +* +* psql -c "CREATE ROLE wikijs PASSWORD 'top-secret' INHERIT LOGIN;" +* psql -c "CREATE DATABASE wkijs OWNER wikijs ENCODING 'UTF-8';" +* +EOF diff --git a/user/wikijs/wikijs.pre-install b/user/wikijs/wikijs.pre-install new file mode 100644 index 0000000..579485d --- /dev/null +++ b/user/wikijs/wikijs.pre-install @@ -0,0 +1,20 @@ +#!/bin/sh +# It's very important to set user/group correctly. + +wikijs_dir='/var/lib/wikijs' + +if ! getent group wikijs 1>/dev/null; then + echo '* Creating group wikijs' 1>&2 + + addgroup -S wikijs -g 5494 +fi + +if ! id wikijs 2>/dev/null 1>&2; then + echo '* Creating user wikijs' 1>&2 + + adduser -DHS -G wikijs -h "$wikijs_dir" -u 5494 -s /bin/sh \ + -g "added by apk for wikijs" wikijs + passwd -u wikijs 1>/dev/null # unlock +fi + +exit 0 From ddb15faac687c66c46b81f07538537a538385e67 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 3 Jul 2024 16:42:14 -0400 Subject: [PATCH 367/738] user/i18nspector: new aport --- user/i18nspector/APKBUILD | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 user/i18nspector/APKBUILD diff --git a/user/i18nspector/APKBUILD b/user/i18nspector/APKBUILD new file mode 100644 index 0000000..96d499d --- /dev/null +++ b/user/i18nspector/APKBUILD @@ -0,0 +1,31 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=i18nspector +pkgver=0.27.1 +pkgrel=0 +pkgdesc="checking tool for gettext POT, PO and MO files" +url="https://jwilk.net/software/i18nspector" +arch="noarch" +license="MIT" +depends="py3-polib py3-rply" +checkdepends="python3-dev py3-pytest" +makedepends="py3-docutils py3-setuptools py3-gpep517 py3-wheel perl" +source="$pkgname-$pkgver.tar.gz::https://github.com/jwilk/i18nspector/archive/refs/tags/$pkgver.tar.gz" +subpackages="$pkgname-doc" +options="!check" # test failure + +build() { + make -C doc +} + +check() { + pytest -v +} + +package() { + make PREFIX=/usr DESTDIR="$pkgdir" install +} + +sha512sums=" +b6b3d68ba03ead88393d6fff7233ec6d67196496f3eaaba8fe036ac9976746370885f72ec3c4e6b4dbf892f3d04c505a306900fafade1623e90ec9c1ad546166 i18nspector-0.27.1.tar.gz +" From a5cd9ca9692b8b39e1d44c25672f601774d320d8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 30 Jun 2024 10:29:59 -0400 Subject: [PATCH 368/738] user/authentik: upgrade to 2024.4.3 --- user/authentik/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index e9c3b87..47eedda 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=authentik -pkgver=2024.4.2 -pkgrel=1 +pkgver=2024.4.3 +pkgrel=0 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" # s390x: missing py3-celery py3-flower and py3-kombu @@ -242,7 +242,7 @@ package() { } sha512sums=" -58642829e320b1480706363712a73c82e55f79ed6451d5db82482c51b9c1ee13b9999caf152da0944ca277344d38c99a5636a7e9e718f858ca558f17ae9da104 authentik-2024.4.2.tar.gz +121ed925d81a5cb2a14fed8ec8b324352e40b1fcbba83573bfdc1d1f66a91d9670cd64d7ef752c8a2df6c34fc3e19e8aec5c6752d33e87b487a462a590212ab0 authentik-2024.4.3.tar.gz 4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc 6cb03b9b69df39bb4539fe05c966536314d766b2e9307a92d87070ba5f5b7e7ab70f1b5ee1ab3c0c50c23454f9c5a4caec29e63fdf411bbb7a124ad687569b89 authentik-worker.openrc 351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc From 64d88aa2e17e8b5b67e5d6eaa8c79026dfef5f9a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 30 Jun 2024 23:51:52 -0400 Subject: [PATCH 369/738] user/authentik: add custom css to config dir --- user/authentik/APKBUILD | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD index 47eedda..d10a575 100644 --- a/user/authentik/APKBUILD +++ b/user/authentik/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=authentik pkgver=2024.4.3 -pkgrel=0 +pkgrel=1 pkgdesc="An open-source Identity Provider focused on flexibility and versatility" url="https://github.com/goauthentik/authentik" # s390x: missing py3-celery py3-flower and py3-kombu @@ -231,6 +231,11 @@ package() { install -Dm640 "$builddir"/authentik/lib/default.yml \ "$pkgdir"/etc/authentik/config.yml chown root:www-data "$pkgdir"/etc/authentik/config.yml + + mv "$pkgdir"/usr/share/webapps/authentik/web/dist/custom.css "$pkgdir"/etc/authentik/custom.css + ln -s "/etc/authentik/custom.css" "$pkgdir"/usr/share/webapps/authentik/web/dist/custom.css + chown root:www-data "$pkgdir"/etc/authentik/custom.css + sed -i 's|cert_discovery_dir.*|cert_discovery_dir: /var/lib/authentik/certs|' "$pkgdir"/etc/authentik/config.yml sed -i 's|blueprints_dir.*|blueprints_dir: /var/lib/authentik/blueprints|' "$pkgdir"/etc/authentik/config.yml sed -i 's|template_dir.*|template_dir: /var/lib/authentik/templates|' "$pkgdir"/etc/authentik/config.yml From 3124031a00b9c3d4633fdfc6ec77becccfb4bafe Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Jun 2024 18:30:33 -0400 Subject: [PATCH 370/738] user/gitlab-foss: upgrade to 17.0.3 --- user/gitlab-foss/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index 88e4982..df28390 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=17.0.2 +pkgver=17.0.3 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -361,7 +361,7 @@ assets() { } sha512sums=" -f9e9a5c4dec5a15281e9173ad93b260315330d4707985e5393d86e08d3dc1883cb107f5e4f6fd2c0d2d3e3325a99e678471a04aa613f8a4a99e9e965f7626466 gitlab-foss-v17.0.2.tar.gz +38678e8d6c42673ecd983db28d32e322958c3cf366756b847d729609a5eb13602cfedbbf003953adeb7b8d566ad3431e29d5081089f1fac7813afb3499b7800b gitlab-foss-v17.0.3.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch 55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd From 948e244824f11fcce83abf7e00959495a07a66b5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Jun 2024 18:30:49 -0400 Subject: [PATCH 371/738] user/gitlab-pages: upgrade to 17.0.3 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index 7d8ef86..ec6dd1b 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=17.0.2 +pkgver=17.0.3 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -3cbd35acdd98acac4300bf1eadedd53db8925ae70c1af7c94eaff26399b501490b81432631c493988ca5fa91154b72b0eb8b00441caec6f67771be3079bee526 gitlab-pages-v17.0.2.tar.gz +58f5c5864f79d9edec07760b9ca209a7f56ced4be7194ef1cd52ac8274baf978205612b29f031e6e362b2c8baf693a35be5adf05bbd799643fa12ef521cc6fc2 gitlab-pages-v17.0.3.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 0b3331610d9b8c60a420c5adb0464f8b2d1c1a64 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Jun 2024 18:31:08 -0400 Subject: [PATCH 372/738] user/gitaly: upgrade to 17.0.3 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index a925e15..d3e417f 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=17.0.2 +pkgver=17.0.3 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -645673511a9fbf868094e58c36395867228ba8a9c8e829d499e8008d8a713bab5b0f0bd0daec3f2acea5349435ccfff3559d086a2a96edca97573f8dcbb92fbd gitaly-v17.0.2.tar.gz +7f5a302dd505e2917f32c319df77fedc4ad50fdd6c61f99777a1ca1c50b7984572de0a0272c7d42922e8c4064ee524c3fca7e48c22a6d833992d0db468e7b094 gitaly-v17.0.3.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 091908e87ec6a2db5af16dc8c710c35bf76f52a3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Jun 2024 18:31:42 -0400 Subject: [PATCH 373/738] user/gitlab-shell: upgrade to 14.36.0 --- user/gitlab-shell/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD index b370c2c..b1d202a 100644 --- a/user/gitlab-shell/APKBUILD +++ b/user/gitlab-shell/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-shell -pkgver=14.35.0 +pkgver=14.36.0 pkgrel=0 pkgdesc="GitLab Shell handles git SSH sessions for GitLab" url="https://gitlab.com/gitlab-org/gitlab-shell" @@ -59,7 +59,7 @@ package() { } sha512sums=" -eec1020dfa579dfec61ce3fbaea7c98a415be257595b7894a980b9d9157e225d74e6fe5ca768938eb25a1d88992e8806bb475f7e5adffb8dbffa0f01256d1fc1 gitlab-shell-v14.35.0.tar.gz +6b302be3630e60e3c9f76e58c61674bf08c3fe1395c9af5f354b9a557ecd1ddb43d27c9a995f868c4e4e2e734dd424a37c73e78d26b00f1f6a78f8670b45c371 gitlab-shell-v14.36.0.tar.gz e9dd69c57c65197493f75bdde682075c6ab22892ed07d37c7a73129fb42a8349a676d5986bfd17f1df331645334248383845f21ce08d1e9664c38e4bbf5343ba config.patch 499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig From 07ea5d4b030b945416c3659364b08b08a6ba6c6a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jul 2024 22:53:50 -0400 Subject: [PATCH 374/738] user/mastodon: upgrade to 4.2.10 --- user/mastodon/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 03c8960..4613907 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -2,9 +2,9 @@ # Maintainer: Antoine Martin (ayakael) pkgname=mastodon _pkgname=$pkgname -pkgver=4.2.9 +pkgver=4.2.10 _gittag=v$pkgver -pkgrel=1 +pkgrel=0 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" arch="x86_64" url="https://github.com/mastodon/mastodon" @@ -192,7 +192,7 @@ assets() { } sha512sums=" -a90d7e68c1c0dd493119a1347f7093c466bc08c26d24fbee0dbf88735938bd79f5a6ba1dc0cc972cae08748a258a54b7bf9185f60f6e4c3ccc47bc484c609dc9 mastodon-v4.2.9.tar.gz +1fe5417136bc020a83b83eaccef7f1f46c13fc8318681f12ba556b1b6b03e25ef7b6335c28f4e6722101e97b63020cbd0d3fbacdaf9b3b5a4b73c3cf3e230813 mastodon-v4.2.10.tar.gz 36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd 9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd 6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd From eb0374cfba6cf034d21f2a9a1bc3e94c98f98c8c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 10 Jul 2024 21:42:04 -0400 Subject: [PATCH 375/738] user/mastodon: fix initd scripts --- user/mastodon/APKBUILD | 10 +++++----- user/mastodon/mastodon.initd | 1 + user/mastodon/mastodon.sidekiq.initd | 2 +- user/mastodon/mastodon.streaming.initd | 2 +- user/mastodon/mastodon.web.initd | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD index 4613907..954ff0b 100644 --- a/user/mastodon/APKBUILD +++ b/user/mastodon/APKBUILD @@ -4,7 +4,7 @@ pkgname=mastodon _pkgname=$pkgname pkgver=4.2.10 _gittag=v$pkgver -pkgrel=0 +pkgrel=1 pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" arch="x86_64" url="https://github.com/mastodon/mastodon" @@ -193,10 +193,10 @@ assets() { sha512sums=" 1fe5417136bc020a83b83eaccef7f1f46c13fc8318681f12ba556b1b6b03e25ef7b6335c28f4e6722101e97b63020cbd0d3fbacdaf9b3b5a4b73c3cf3e230813 mastodon-v4.2.10.tar.gz -36604cd630f0f5b4d88b630b1512cd26e922f859e5d19cbb85106ff29fc9048d2349f926d5c4b6947c655f67e60ec33e2f524a8154405a4369f283e00be7cdce mastodon.initd -9e77061fbdebe90492398f8089a7d2612ff4b6e70b5462dd67330b66d9788cb0133eab38c372b1f27a7214aacdd9f7f70381d4ecc6e92c8c38d794404ae0f840 mastodon.web.initd -6dacafca86dd39f6a6efa773cfe35b4632098175605a7c64488027237b01028d9785e50a3a0532b88ebf8f857c9a594c7b68f9e577b46e95104e7cffde51ccf8 mastodon.sidekiq.initd -63b67ec16107e4d1747ae956cdd41edd03be71da1ed96d21a18710cbba69ce37c856f4abc080a61f172a10859d0b9a33ba9290fc69213e1bc15a1ce8f8d40108 mastodon.streaming.initd +d49fea9451c97ccefe5e35b68e4274aeb427f9d1e910b89c1f6c810489c3bec1ccff72952fdaef95abf944b8aff0da84a52347540d36ff1fba5ccc19e1d935c6 mastodon.initd +eefe12a31268245f802222c0001dac884e03adb0d301e53a1512a3cd204836ca03ad083908cd14d146cf0dce99e3a4366570efd0e40a9a490ccd381d4c63c32f mastodon.web.initd +8fc9249c01693bb02b8d1a6177288d5d3549addde8c03eb35cc7a32dde669171872ebc2b5deb8019dc7a12970098f1af707171fa41129be31b04e1dc1651a777 mastodon.sidekiq.initd +03433a2f58600ca0d58e7c3713df2146ccdfc92033ccfe801dbd38bac39b66d6297f2b5ca02300caa36455b484eab2caa68c912c2f72150203bfa0e106c375fc mastodon.streaming.initd 83b3bae5b6fdb4d0dbc1cbe546c62c0aa77397b97d1a5d5377af032466677de188065b556710c0d96576bbae89cc76800f1ffb8cd718155eb2784da818f27619 mastodon.logrotate dfd0e43ac6c28387bd4aa57fd98ae41aeb5a098b6deb3e44b89f07818e2470773b025364afee7ef6fd0f664cb86bbbbe8796c9f222f5436c256a787282fbe3e1 bin-wrapper.in " diff --git a/user/mastodon/mastodon.initd b/user/mastodon/mastodon.initd index 6d9c704..1454603 100644 --- a/user/mastodon/mastodon.initd +++ b/user/mastodon/mastodon.initd @@ -6,6 +6,7 @@ description="Meta script for starting/stopping all the Mastodon components" subservices="mastodon.sidekiq mastodon.streaming mastodon.web" depend() { + need redis postgresql use net } diff --git a/user/mastodon/mastodon.sidekiq.initd b/user/mastodon/mastodon.sidekiq.initd index f7d62b0..98c0377 100644 --- a/user/mastodon/mastodon.sidekiq.initd +++ b/user/mastodon/mastodon.sidekiq.initd @@ -1,7 +1,7 @@ #!/sbin/openrc-run name="Mastodon background workers Service" -root="/usr/share/webapps/mastodon" +root="/usr/lib/bundles/mastodon" pidfile="/run/mastodon-sidekiq.pid" logfile="/var/log/mastodon/sidekiq.log" diff --git a/user/mastodon/mastodon.streaming.initd b/user/mastodon/mastodon.streaming.initd index 647f719..b41adc2 100644 --- a/user/mastodon/mastodon.streaming.initd +++ b/user/mastodon/mastodon.streaming.initd @@ -1,7 +1,7 @@ #!/sbin/openrc-run name="Mastodon streaming API service" -root="/usr/share/webapps/mastodon" +root="/usr/lib/bundles/mastodon" pidfile="/run/mastodon-streaming.pid" logfile="/var/log/mastodon/streaming.log" diff --git a/user/mastodon/mastodon.web.initd b/user/mastodon/mastodon.web.initd index 1a82acb..42eace6 100644 --- a/user/mastodon/mastodon.web.initd +++ b/user/mastodon/mastodon.web.initd @@ -1,7 +1,7 @@ #!/sbin/openrc-run name="Mastodon Web Service" -root="/usr/share/webapps/mastodon" +root="/usr/lib/bundles/mastodon" pidfile="/run/mastodon-web.pid" logfile="/var/log/mastodon/web.log" From e5f83095e3242ad7dfa43ad94b2ba7f3b5a1ab45 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 26 Jul 2024 23:38:03 -0400 Subject: [PATCH 376/738] backports/py3-{pyqt6-sip, qt6, sip}: new aport --- backports/py3-pyqt6-sip/APKBUILD | 36 +++++++++++++++++++ backports/py3-qt6/APKBUILD | 59 ++++++++++++++++++++++++++++++++ backports/py3-sip/APKBUILD | 38 ++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 backports/py3-pyqt6-sip/APKBUILD create mode 100644 backports/py3-qt6/APKBUILD create mode 100644 backports/py3-sip/APKBUILD diff --git a/backports/py3-pyqt6-sip/APKBUILD b/backports/py3-pyqt6-sip/APKBUILD new file mode 100644 index 0000000..936b29d --- /dev/null +++ b/backports/py3-pyqt6-sip/APKBUILD @@ -0,0 +1,36 @@ +# Contributor: Rosie K Languet +# Maintainer: Rosie K Languet +pkgname=py3-pyqt6-sip +pkgver=13.6.0 +pkgrel=1 +pkgdesc="The sip module support for PyQt6" +url="https://riverbankcomputing.com/software/sip" +arch="all" +license="custom:sip" +depends="python3" +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + python3-dev + " +source="https://pypi.python.org/packages/source/P/PyQt6-sip/PyQt6_sip-$pkgver.tar.gz" +options="!check" # No tests +builddir="$srcdir/PyQt6_sip-$pkgver" + +build() { + export CFLAGS="$CFLAGS -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -O2 -flto=auto" + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +bd2fa70d64544d8104d3477cb650a0e6bcefa0008680afcf7d187ba3fb1117871c0237d3a7f047144c8a8a8eeb8da941a3b206f8ee0601cb2cc734243cdb9d46 PyQt6_sip-13.6.0.tar.gz +" diff --git a/backports/py3-qt6/APKBUILD b/backports/py3-qt6/APKBUILD new file mode 100644 index 0000000..fbf7cb7 --- /dev/null +++ b/backports/py3-qt6/APKBUILD @@ -0,0 +1,59 @@ +# Contributor: Rosie K Languet +# Maintainer: Rosie K Languet +pkgname=py3-qt6 +pkgver=6.7.1 +pkgrel=0 +pkgdesc="Python 3 bindings for the Qt toolkit" +url="https://www.riverbankcomputing.com/software/pyqt/" +arch="all" +license="GPL-3.0-only" +depends=" + py3-pyqt6-sip + python3 + " +makedepends=" + libx11-dev + py3-dbus-dev + py3-opengl + py3-pyqt-builder + py3-sip + python3-dev + qt6-qtbase-dev + qt6-qtconnectivity-dev + qt6-qtdeclarative-dev + qt6-qtmultimedia-dev + qt6-qtserialport-dev + qt6-qtsvg-dev + qt6-qttools-dev + qt6-qtwebchannel-dev + qt6-qtwebsockets-dev + " + +subpackages="$pkgname-pyc" +source="https://pypi.python.org/packages/source/P/PyQt6/PyQt6-$pkgver.tar.gz" +builddir="$srcdir/PyQt6-$pkgver" + +build() { + export CFLAGS="$CFLAGS -O2 -flto=auto" + export CXXFLAGS="$CXXFLAGS -O2 -flto=auto" + sip-build \ + --confirm-license \ + --qmake /usr/lib/qt6/bin/qmake \ + --api-dir /usr/share/qt6/qsci/api/python \ + --pep484-pyi \ + --no-make + make -C build +} + +check() { + make -C build check +} + +package() { + make DESTDIR="$pkgdir" INSTALL_ROOT="$pkgdir" -C build install -j1 + python3 -m compileall -j 0 "$pkgdir"/usr/lib/python3* +} + +sha512sums=" +1e0fec009e1823b06460fd96eddc00ed31388c20f6d832aa0ebaa130baf06d83514df43af7961c3cb2872570d27e539d6db7bf6143ccdfd61a19da7521be2c7e PyQt6-6.7.1.tar.gz +" diff --git a/backports/py3-sip/APKBUILD b/backports/py3-sip/APKBUILD new file mode 100644 index 0000000..8469075 --- /dev/null +++ b/backports/py3-sip/APKBUILD @@ -0,0 +1,38 @@ +# Contributor: Francesco Colista +# Maintainer: Francesco Colista +pkgname=py3-sip +pkgver=6.8.6 +pkgrel=0 +pkgdesc="A tool that makes it easy to create Python bindings for C and C++ libraries" +options="!check" # No testsuite +url="https://www.riverbankcomputing.com/software/sip/" +arch="all" +license="custom:sip" +depends=" + py3-packaging + py3-ply + py3-setuptools + py3-toml + " +makedepends="python3-dev py3-gpep517 py3-wheel" +subpackages="$pkgname-pyc" +source="https://pypi.python.org/packages/source/s/sip/sip-$pkgver.tar.gz" +builddir="$srcdir/sip-$pkgver" + +replaces="py-sip" # Backwards comptibility +provides="py-sip=$pkgver-r$pkgrel" # Backwards comptibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/sip-*.whl +} + +sha512sums=" +c884c58fc51708e2dd247453f2214e6b01d7e1a9a0166b4228feb5d996310ace2665238dde26af34907e596a0a1c710fc130ae79297f430f73f639a3eb781a50 sip-6.8.6.tar.gz +" From 72ad06acd79331f2611c09aa55a6bfbe9829878b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 27 Jul 2024 00:51:52 -0400 Subject: [PATCH 377/738] backports/py3-pyqt6-sip: upgrade to 13.8.0 --- backports/py3-pyqt6-sip/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/py3-pyqt6-sip/APKBUILD b/backports/py3-pyqt6-sip/APKBUILD index 936b29d..59f6c14 100644 --- a/backports/py3-pyqt6-sip/APKBUILD +++ b/backports/py3-pyqt6-sip/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Rosie K Languet # Maintainer: Rosie K Languet pkgname=py3-pyqt6-sip -pkgver=13.6.0 -pkgrel=1 +pkgver=13.8.0 +pkgrel=0 pkgdesc="The sip module support for PyQt6" url="https://riverbankcomputing.com/software/sip" arch="all" @@ -32,5 +32,5 @@ package() { } sha512sums=" -bd2fa70d64544d8104d3477cb650a0e6bcefa0008680afcf7d187ba3fb1117871c0237d3a7f047144c8a8a8eeb8da941a3b206f8ee0601cb2cc734243cdb9d46 PyQt6_sip-13.6.0.tar.gz +6947690e61fe65a21f61d034ae9de7b7adb001c59a4a362933c5441648fe27140b43666efa73f981b138cfc73fac72777bb7318b98accc3c7f808687e3fc5d81 PyQt6_sip-13.8.0.tar.gz " From 59705e34868c961675c5b908fc3c44bee70cabac Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 10 Jul 2024 21:39:40 -0400 Subject: [PATCH 378/738] user/gitaly: upgrade to 17.0.4 --- user/gitaly/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD index d3e417f..1b400ca 100644 --- a/user/gitaly/APKBUILD +++ b/user/gitaly/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitaly -pkgver=17.0.3 +pkgver=17.0.4 pkgrel=0 pkgdesc="A Git RPC service for handling all the git calls made by GitLab" url="https://gitlab.com/gitlab-org/gitaly/" @@ -80,7 +80,7 @@ praefect() { } sha512sums=" -7f5a302dd505e2917f32c319df77fedc4ad50fdd6c61f99777a1ca1c50b7984572de0a0272c7d42922e8c4064ee524c3fca7e48c22a6d833992d0db468e7b094 gitaly-v17.0.3.tar.gz +2d06498c519c20804dd592cac3214cf8124ece1dda0d15342f8ccc6d9c9d2715dad24f9940e4d87b824320483c9882004bcef3747a8de347c1d48ec983a9f5cb gitaly-v17.0.4.tar.gz 7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd " From 4d473acf9e03b56253d16112364f39083eb0bfca Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 10 Jul 2024 21:39:19 -0400 Subject: [PATCH 379/738] user/gitlab-pages: upgrade to 17.0.4 --- user/gitlab-pages/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD index ec6dd1b..6ab7745 100644 --- a/user/gitlab-pages/APKBUILD +++ b/user/gitlab-pages/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Contributor: Jakub Jirutka pkgname=gitlab-pages -pkgver=17.0.3 +pkgver=17.0.4 _gittag="v$pkgver" pkgrel=0 pkgdesc="A daemon used to serve static websites for GitLab users" @@ -29,7 +29,7 @@ package() { } sha512sums=" -58f5c5864f79d9edec07760b9ca209a7f56ced4be7194ef1cd52ac8274baf978205612b29f031e6e362b2c8baf693a35be5adf05bbd799643fa12ef521cc6fc2 gitlab-pages-v17.0.3.tar.gz +fde33d01f7b3810a9a094c09fce19976c41a2ccc9eaf720a0f4dd285eb2d0f35de8d2d607cdbaa670221711919043d681fd3fda6e14d67ae1454619746c1e453 gitlab-pages-v17.0.4.tar.gz 710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch 20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd " From 65f2a53a44d1fb7f11dd7b26d6af664a3445cf6d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 10 Jul 2024 21:39:00 -0400 Subject: [PATCH 380/738] user/gitlab-foss: upgrade to 17.0.4, fix initd --- user/gitlab-foss/APKBUILD | 6 +++--- user/gitlab-foss/gitlab.initd | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD index df28390..21331a4 100644 --- a/user/gitlab-foss/APKBUILD +++ b/user/gitlab-foss/APKBUILD @@ -3,7 +3,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=gitlab-foss _pkgname=${pkgname%-foss} -pkgver=17.0.3 +pkgver=17.0.4 _gittag=v$pkgver pkgrel=0 pkgdesc="A version control for your server" @@ -361,9 +361,9 @@ assets() { } sha512sums=" -38678e8d6c42673ecd983db28d32e322958c3cf366756b847d729609a5eb13602cfedbbf003953adeb7b8d566ad3431e29d5081089f1fac7813afb3499b7800b gitlab-foss-v17.0.3.tar.gz +e09cfbbe4237f42bd8509c551031fd3526b75762beae7dac5164ecc4056ae07890a3ddb8500f1573f0ca9d697150654d1fcab3b3d0a3b93e5382addcee298c5b gitlab-foss-v17.0.4.tar.gz daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch -55b0667d3969113ffd6860652ee8bdb9a534c25f413f33b2739e922c886988e7cea72c1c00c7eecf29fcff3682b1324156365605ffc6aae45d1e0ccddf96288b gitlab.initd +80d9bf2d064c1d4310566e087e14220e075430c46d9a6c4641c1141fbdc05381ae14a3ae7dfcb7dcb75dbf7af17a136f81764c7a4d109f248a81033782dce23b gitlab.initd 1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd d8cdeb54c46f8204936bf5750833649e4586d3dd1942eed45955ed1661ae5f5080f59184fcb59a8f73c1405faccbf02b3db3d2c12fc2a4a81424cd35ce390768 gitlab.rails.initd cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08dd943afb961df888c73af1334dcbe054dfd361e74f492fd86 gitlab.sidekiq.initd diff --git a/user/gitlab-foss/gitlab.initd b/user/gitlab-foss/gitlab.initd index c286ae2..cdf212e 100644 --- a/user/gitlab-foss/gitlab.initd +++ b/user/gitlab-foss/gitlab.initd @@ -15,6 +15,7 @@ if yesno "$pages_enabled" && [ -e /etc/init.d/gitlab.pages ]; then fi depend() { + need redis postgresql use net } From 7671a9d5674f3d7e1964abbcc3de78bd1838228b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 30 Jul 2024 23:39:19 -0400 Subject: [PATCH 381/738] backports/looking-glass: new aport --- backports/looking-glass/APKBUILD | 97 +++++++++++++++++++ .../looking-glass.post-deinstall | 2 + .../looking-glass/missing-includes.patch | 92 ++++++++++++++++++ .../module_1075-fix-build-linux64.patch | 25 +++++ .../module_1124-fix-build-linux610.patch | 23 +++++ backports/looking-glass/obs-plugins-lib.patch | 12 +++ backports/looking-glass/werror.patch | 24 +++++ 7 files changed, 275 insertions(+) create mode 100644 backports/looking-glass/APKBUILD create mode 100644 backports/looking-glass/looking-glass.post-deinstall create mode 100644 backports/looking-glass/missing-includes.patch create mode 100644 backports/looking-glass/module_1075-fix-build-linux64.patch create mode 100644 backports/looking-glass/module_1124-fix-build-linux610.patch create mode 100644 backports/looking-glass/obs-plugins-lib.patch create mode 100644 backports/looking-glass/werror.patch diff --git a/backports/looking-glass/APKBUILD b/backports/looking-glass/APKBUILD new file mode 100644 index 0000000..73f00bb --- /dev/null +++ b/backports/looking-glass/APKBUILD @@ -0,0 +1,97 @@ +# Contributor: Rogério da Silva Yokomizo +# Contributor: Antoine Martin (ayakael) +# Maintainer: Rogério da Silva Yokomizo +pkgname=looking-glass +_pkgver=B6 +pkgver=6b +pkgrel=3 +pkgdesc="Allows the use of a KVM configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse" +url="https://looking-glass.io/" +arch="x86_64" +license="GPL-2.0-or-later" +makedepends=" + cmake + fontconfig-dev + libsamplerate-dev + libx11-dev + libxcursor-dev + libxfixes-dev + libxi-dev + libxinerama-dev + libxkbcommon-dev + libxpresent-dev + libxscrnsaver-dev + nettle-dev + obs-studio-dev + pipewire-dev + pulseaudio-dev + samurai + spice-dev + wayland-dev + wayland-protocols + " +source="$pkgname-$_pkgver.tar.gz::https://looking-glass.io/artifact/$_pkgver/source + missing-includes.patch + obs-plugins-lib.patch + werror.patch + module_1075-fix-build-linux64.patch + module_1124-fix-build-linux610.patch + " +subpackages="$pkgname-obs $pkgname-module" +builddir="$srcdir/$pkgname-$_pkgver" +options="!check" # There are no tests nor --version. + +build() { + cmake -S client -B build-client -G Ninja \ + -DENABLE_BACKTRACE=OFF \ + -DOPTIMIZE_FOR_NATIVE=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr + + cmake -S obs -B build-obs -G Ninja \ + -DENABLE_BACKTRACE=OFF \ + -DOPTIMIZE_FOR_NATIVE=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr + + cmake --build build-client + cmake --build build-obs +} + +package() { + DESTDIR="$pkgdir" cmake --install build-client + DESTDIR="$pkgdir" cmake --install build-obs +} + +module() { + pkgdesc="Looking Glass kernel module (AKMS)" + depends="akms" + install_if="looking-glass=$pkgver-r$pkgrel" + _modver=$(awk -F "=" '{if($1=="PACKAGE_VERSION"){print $2}}' src/looking-glass-B6/module/dkms.conf | tr -d '"') + + install -Dm644 "$builddir"/module/Makefile "$subpkgdir"/usr/src/looking-glass/Makefile + install -Dm644 "$builddir"/module/kvmfr* "$subpkgdir"/usr/src/looking-glass/. + + cat ->> "$subpkgdir"/usr/src/looking-glass/AKMBUILD < "$subpkgdir"/etc/udev/rules.d/99-kvmfr.rules + +} + +obs() { + pkgdesc="$pkgdesc (obs plugin)" + amove usr/lib/obs-plugins +} + +sha512sums=" +558981d6b32098076ef0775a748da349941551352cbef836e37310e43e5cd6072df3dec6fa2418a9abecc7729ef0c1c6869e3168d05a3d76bea46c6eb8c4e82c looking-glass-B6.tar.gz +6d2449764a8316dd3c1b5cc0aa552671068f89ed2f95297f3c5256af8529b93e5ec7af8f979bd2e744fd09b11063e8a93f3ed26284f0e49294e467ca10f6e772 missing-includes.patch +33c5463412a16691f47d7833ebf81d7cf20c560a077dca141dcc9f02a5d6dfb676e483835f39a06012b114be9f509dda4614fe253bb1c72a0142e82dc265a5ca obs-plugins-lib.patch +b952d1fd284aed15bcfe7990f160dec3a4565fb5833ce339920f62de6bb46fbc09265a0a79fe80d212eecc6a1813614e1e193a8846c37e2afd18431dc3a89ca4 werror.patch +1b9d9f7f1054df3af43f989018aa86505ceb69052aad2e328f882a7c4ac1c6581633ea4e9e6d9ca88ce4ca38dd8e2ba00234e7eaf9bbaf50fdd40ee18b4c41ef module_1075-fix-build-linux64.patch +0b4540aec6595ac11c9298634a82dad968ea37024cd398d2de8c58f3128a7a3097ec03a19419ebe9df2d721ab12c2a2bb6ef1fd32d55c6fd78f7ff99ee23c5f6 module_1124-fix-build-linux610.patch +" diff --git a/backports/looking-glass/looking-glass.post-deinstall b/backports/looking-glass/looking-glass.post-deinstall new file mode 100644 index 0000000..f193065 --- /dev/null +++ b/backports/looking-glass/looking-glass.post-deinstall @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/sbin/akms uninstall kvmfr diff --git a/backports/looking-glass/missing-includes.patch b/backports/looking-glass/missing-includes.patch new file mode 100644 index 0000000..635752c --- /dev/null +++ b/backports/looking-glass/missing-includes.patch @@ -0,0 +1,92 @@ +--- a/repos/PureSpice/src/agent.c ++++ b/repos/PureSpice/src/agent.c +@@ -31,6 +31,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include + #include + #include ++#include + #include + + #include +--- a/repos/PureSpice/src/channel_cursor.c ++++ b/repos/PureSpice/src/channel_cursor.c +@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include "channel_cursor.h" + + #include ++#include + + #include "messages.h" + +--- a/repos/PureSpice/src/channel_display.c ++++ b/repos/PureSpice/src/channel_display.c +@@ -19,6 +19,7 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include "purespice.h" + #include ++#include + + #include "ps.h" + #include "log.h" +--- a/repos/PureSpice/src/channel_inputs.c ++++ b/repos/PureSpice/src/channel_inputs.c +@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include "messages.h" + + #include ++#include + + const SpiceLinkHeader * channelInputs_getConnectPacket(void) + { +--- a/repos/PureSpice/src/channel_main.c ++++ b/repos/PureSpice/src/channel_main.c +@@ -24,6 +24,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include "messages.h" + + #include ++#include + + struct ChannelMain + { +--- a/repos/PureSpice/src/channel_playback.c ++++ b/repos/PureSpice/src/channel_playback.c +@@ -26,6 +26,8 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include "messages.h" + ++#include ++ + const SpiceLinkHeader * channelPlayback_getConnectPacket(void) + { + typedef struct +--- a/repos/PureSpice/src/channel_record.c ++++ b/repos/PureSpice/src/channel_record.c +@@ -26,6 +26,8 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include "messages.h" + ++#include ++ + const SpiceLinkHeader * channelRecord_getConnectPacket(void) + { + typedef struct +--- a/repos/PureSpice/src/log.c ++++ b/repos/PureSpice/src/log.c +@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 + + #include + #include ++#include + + static void log_stdout(const char * file, unsigned int line, + const char * function, const char * format, ...) +--- a/repos/PureSpice/src/ps.c ++++ b/repos/PureSpice/src/ps.c +@@ -37,6 +37,7 @@ Place, Suite 330, Boston, MA 02111-1307 + #include + #include + #include ++#include + #include + #include + diff --git a/backports/looking-glass/module_1075-fix-build-linux64.patch b/backports/looking-glass/module_1075-fix-build-linux64.patch new file mode 100644 index 0000000..bf594b5 --- /dev/null +++ b/backports/looking-glass/module_1075-fix-build-linux64.patch @@ -0,0 +1,25 @@ +From e32b292cc1ba089db6ed28e4d5eb0fc8cc4c2235 Mon Sep 17 00:00:00 2001 +From: esi +Date: Fri, 12 May 2023 16:28:01 -0400 +Subject: [PATCH] [module] Fix build on Linux 6.4 (fixes #1075) + +--- + module/dkms.conf | 2 +- + module/kvmfr.c | 4 ++++ + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/module/kvmfr.c b/module/kvmfr.c +index ca0cca685..c711e000e 100644 +--- a/module/kvmfr.c ++++ b/module/kvmfr.c +@@ -539,7 +539,11 @@ static int __init kvmfr_module_init(void) + if (kvmfr->major < 0) + goto out_free; + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 4, 0) + kvmfr->pClass = class_create(THIS_MODULE, KVMFR_DEV_NAME); ++#else ++ kvmfr->pClass = class_create(KVMFR_DEV_NAME); ++#endif + if (IS_ERR(kvmfr->pClass)) + goto out_unreg; diff --git a/backports/looking-glass/module_1124-fix-build-linux610.patch b/backports/looking-glass/module_1124-fix-build-linux610.patch new file mode 100644 index 0000000..c194c78 --- /dev/null +++ b/backports/looking-glass/module_1124-fix-build-linux610.patch @@ -0,0 +1,23 @@ +From 7305ce36af211220419eeab302ff28793d515df2 Mon Sep 17 00:00:00 2001 +From: Geoffrey McRae +Date: Fri, 7 Jun 2024 19:01:38 +1000 +Subject: [PATCH] [module] fix build on linux 6.10 + +Fixes #1124 - Thanks @pongo1231 +--- + module/dkms.conf | 2 +- + module/kvmfr.c | 1 + + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/module/kvmfr.c b/module/kvmfr.c +index b5acd18de..c99a5d79c 100644 +--- a/module/kvmfr.c ++++ b/module/kvmfr.c +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + + #include + diff --git a/backports/looking-glass/obs-plugins-lib.patch b/backports/looking-glass/obs-plugins-lib.patch new file mode 100644 index 0000000..1390adb --- /dev/null +++ b/backports/looking-glass/obs-plugins-lib.patch @@ -0,0 +1,12 @@ +--- a/obs/CMakeLists.txt ++++ b/obs/CMakeLists.txt +@@ -84,7 +84,8 @@ target_link_libraries(looking-glass-obs + ) + + install(TARGETS looking-glass-obs +- LIBRARY DESTINATION ${OBS_PLUGIN_PREFIX}/${CMAKE_PROJECT_NAME}/bin/${OBS_PLUGIN_DIR} ++ # LIBRARY DESTINATION ${OBS_PLUGIN_PREFIX}/${CMAKE_PROJECT_NAME}/bin/${OBS_PLUGIN_DIR} ++ LIBRARY DESTINATION /usr/lib/obs-plugins + ) + + feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES) diff --git a/backports/looking-glass/werror.patch b/backports/looking-glass/werror.patch new file mode 100644 index 0000000..436419f --- /dev/null +++ b/backports/looking-glass/werror.patch @@ -0,0 +1,24 @@ +diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt +index 836f814..7047365 100644 +--- a/client/CMakeLists.txt ++++ b/client/CMakeLists.txt +@@ -68,7 +68,6 @@ add_compile_options( + "-Wno-unused-parameter" + "$<$:-Wstrict-prototypes>" + "$<$:-Wimplicit-fallthrough=2>" +- "-Werror" + "-Wfatal-errors" + "-ffast-math" + "-fdata-sections" +diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt +index 0491e65..60b37ff 100644 +--- a/obs/CMakeLists.txt ++++ b/obs/CMakeLists.txt +@@ -18,7 +18,6 @@ add_feature_info(ENABLE_BACKTRACE ENABLE_BACKTRACE "Backtrace support.") + + add_compile_options( + "-Wall" +- "-Werror" + "-Wfatal-errors" + "-ffast-math" + "-fdata-sections" From 87e02ab716aa313ae08fb9fb68b9eec19403a6c0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 4 Jul 2024 22:51:27 -0400 Subject: [PATCH 382/738] user/zotero: upgrade to 7.0.0_beta109 --- user/zotero/APKBUILD | 26 +- user/zotero/llvm18-bindgen.patch | 619 +++ user/zotero/llvm18.patch | 23 + user/zotero/moz-system-jpeg.patch | 15 + user/zotero/nrappkit-qsort.patch | 34 + .../rust1.78-packed-to-portable_simd.patch | 3582 +++++++++++++++++ user/zotero/zotero_drop-jazzer.patch | 12 + user/zotero/zotero_drop-phantomjs.patch | 134 - 8 files changed, 4302 insertions(+), 143 deletions(-) create mode 100644 user/zotero/llvm18-bindgen.patch create mode 100644 user/zotero/llvm18.patch create mode 100644 user/zotero/moz-system-jpeg.patch create mode 100644 user/zotero/nrappkit-qsort.patch create mode 100644 user/zotero/rust1.78-packed-to-portable_simd.patch create mode 100644 user/zotero/zotero_drop-jazzer.patch delete mode 100644 user/zotero/zotero_drop-phantomjs.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index fcca8c0..2347394 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,18 +1,19 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta83 +pkgver=7.0.0_beta109 pkgrel=0 _fxver=115.9.1 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) # https://www.mozilla.org/firefox/organizations/notes/ -_releasedate=2024-06-03 +_releasedate=2024-08-01 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." url="https://www.mozilla.org/en-US/firefox/organizations/" # s390x and riscv64: blocked by rust and cargo # armhf: build failure on armhf due to wasm -arch="x86_64 armv7 aarch64 x86 ppc64le" +# ppc64le: test suite stalls +arch="x86_64 armv7 aarch64 x86" license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" depends=" ffmpeg-libavcodec @@ -57,8 +58,6 @@ makedepends=" perl pipewire-dev pulseaudio-dev - py3-psutil - py3-zstandard python3 rsync sed @@ -77,12 +76,16 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox fix-webrtc-glibcisms.patch icu74.patch lfs64.patch + llvm18-bindgen.patch + llvm18.patch + moz-system-jpeg.patch no-ccache-stats.patch + nrappkit-qsort.patch ppc-musttail.patch ppc-webrtc.patch python-deps.patch rust-lto-thin.patch - https://dev.alpinelinux.org/archive/firefox/rust1.78-packed-to-portable_simd.patch + rust1.78-packed-to-portable_simd.patch rust1.78-qcms-stdsimd.patch sandbox-fork.patch sandbox-largefile.patch @@ -95,12 +98,12 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox vendor-prefs.js zotero.desktop - zotero_drop-phantomjs.patch https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz zotero_build-modifications.patch zotero_test-drop-build.patch zotero_test-fix-chars.patch zotero_test-push-timeout-to-30sec.patch + zotero_drop-jazzer.patch " builddir="$srcdir"/firefox-$_fxver @@ -171,6 +174,7 @@ prepare() { cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ _clear_vendor_checksums audio_thread_priority + _clear_vendor_checksums bindgen base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key @@ -372,7 +376,11 @@ cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549 305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c6033e9b888f02775d1b0443a00329b7a632ee399122a391c13a icu74.patch 5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch +d7a9443cd81d3ef4a6baa1b5d05f2497bc07c1de815a4d85b613b734989e7c589019dd860ea2eb9e32067973efbfd1c913790c6c238778da23d76fbd904128d1 llvm18-bindgen.patch +8c4de34188f634833d99d17bc389c43ab9576b3f0581387407ae77f636a890779cd02786b632fbdfd8b0305575517d51b04f76b9aa3f1a94c3d822578286fc6f llvm18.patch +e28b1fe2967d46c888b41a0a03ee1b6de763124a0281b68aebac04ec3b76cb6fdb56a376d419a003fd87f79e9d086aafd4aaa24efa3345f9857352d3d489356f moz-system-jpeg.patch c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc536337030d349fb3ba4460097b75b0c7c5b8fb2d39d8b0a392948936 no-ccache-stats.patch +b586ddb21b50fa8fba798c3a269518049c38cc52fd91ad00e96a3f1144e6b2879d9df1a182a2fb181898042043ae98381a70d0e4acbf8aa705d2b4f62c17a5a1 nrappkit-qsort.patch 2d8dff86212d6d2a904cbb5a5a1d6c17b89adc929fc6a3f4c6cb669f5e83ecddff5a799225319ba445a187b04d111251af75dd3ce8a039164bc14d2a432a2a04 ppc-musttail.patch 6f60e83599041db1b707c21784197ea9816b2c936b89a274bfc24554a600981e6f28448fe41fab0942bd31acd49b1c00beb2eb0961149f2ffa6a4154be123ea7 ppc-webrtc.patch 4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch @@ -387,10 +395,10 @@ d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d1 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -abbcb92fe89029833bbfb15a8a65204c4043c8c9a372d1aa3d18756584cea32078238caded7f0099314228093b09ac10e18ac3c8ecb8138d30f57664c63f7f8a zotero_drop-phantomjs.patch -4b5125ae1cc235803e6f4eb89787c631b3b55c6b34263fe16aef4b2c371df28d9daf05d83a7e2fa36c05a2153585d674a23bec98e0488d9dc9eabe5f5924a873 zotero-client-7.0.0_beta83.tar.gz +da70afc3c7cd9c6d1547561f2e780fcd583a37f7aeaafb79b4e31257e3f319f88008ef7b8c7951607050a87710ca900abd4d9959d103427baf41b20798032cf9 zotero-client-7.0.0_beta109.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch 337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch 9dc390d8bae42e645cae45fe5551751d8f38d5c1b8b2cc0eec1c2191f4bde293ffb2c67cfc4de765f2d48b1da4d5fcd4f1c03711e5da3180cd1b63710ccf5599 zotero_test-push-timeout-to-30sec.patch +eb6b6ccb8955adab541cb26cd3b378c7ab0e0cb50d8546413f086c924f50a07db99ea29f050a4744e46d81ee9be5cd6a4f32248f4205e4f6360856c98377b973 zotero_drop-jazzer.patch " diff --git a/user/zotero/llvm18-bindgen.patch b/user/zotero/llvm18-bindgen.patch new file mode 100644 index 0000000..67270f3 --- /dev/null +++ b/user/zotero/llvm18-bindgen.patch @@ -0,0 +1,619 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/899c997/contrib/thunderbird/patches/llvm18-bindgen.patch +https://github.com/rust-lang/rust-bindgen/pull/2689 +-- +diff --git a/ir/item.rs b/ir/item.rs +index 40f6f7d..87d09da 100644 +--- a/third_party/rust/bindgen/ir/item.rs ++++ b/third_party/rust/bindgen/ir/item.rs +@@ -6,8 +6,8 @@ use super::annotations::Annotations; + use super::comp::{CompKind, MethodKind}; + use super::context::{BindgenContext, ItemId, PartialType, TypeId}; + use super::derive::{ +- CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveEq, +- CanDeriveHash, CanDeriveOrd, CanDerivePartialEq, CanDerivePartialOrd, ++ CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveEq, CanDeriveHash, CanDeriveOrd, ++ CanDerivePartialEq, CanDerivePartialOrd, + }; + use super::dot::DotAttributes; + use super::function::{Function, FunctionKind}; +@@ -59,10 +59,7 @@ pub trait ItemCanonicalPath { + /// Get the namespace-aware canonical path for this item. This means that if + /// namespaces are disabled, you'll get a single item, and otherwise you get + /// the whole path. +- fn namespace_aware_canonical_path( +- &self, +- ctx: &BindgenContext, +- ) -> Vec; ++ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec; + + /// Get the canonical path for this item. + fn canonical_path(&self, ctx: &BindgenContext) -> Vec; +@@ -159,11 +156,7 @@ where + { + type Extra = (); + +- fn as_template_param( +- &self, +- ctx: &BindgenContext, +- _: &(), +- ) -> Option { ++ fn as_template_param(&self, ctx: &BindgenContext, _: &()) -> Option { + ctx.resolve_item((*self).into()).as_template_param(ctx, &()) + } + } +@@ -171,11 +164,7 @@ where + impl AsTemplateParam for Item { + type Extra = (); + +- fn as_template_param( +- &self, +- ctx: &BindgenContext, +- _: &(), +- ) -> Option { ++ fn as_template_param(&self, ctx: &BindgenContext, _: &()) -> Option { + self.kind.as_template_param(ctx, self) + } + } +@@ -183,16 +172,10 @@ impl AsTemplateParam for Item { + impl AsTemplateParam for ItemKind { + type Extra = Item; + +- fn as_template_param( +- &self, +- ctx: &BindgenContext, +- item: &Item, +- ) -> Option { ++ fn as_template_param(&self, ctx: &BindgenContext, item: &Item) -> Option { + match *self { + ItemKind::Type(ref ty) => ty.as_template_param(ctx, item), +- ItemKind::Module(..) | +- ItemKind::Function(..) | +- ItemKind::Var(..) => None, ++ ItemKind::Module(..) | ItemKind::Function(..) | ItemKind::Var(..) => None, + } + } + } +@@ -214,10 +197,7 @@ impl ItemCanonicalPath for T + where + T: Copy + Into, + { +- fn namespace_aware_canonical_path( +- &self, +- ctx: &BindgenContext, +- ) -> Vec { ++ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec { + debug_assert!( + ctx.in_codegen_phase(), + "You're not supposed to call this yet" +@@ -282,9 +262,7 @@ impl Trace for Item { + // There are some types, like resolved type references, where we + // don't want to stop collecting types even though they may be + // opaque. +- if ty.should_be_traced_unconditionally() || +- !self.is_opaque(ctx, &()) +- { ++ if ty.should_be_traced_unconditionally() || !self.is_opaque(ctx, &()) { + ty.trace(ctx, tracer, self); + } + } +@@ -450,11 +428,7 @@ impl Item { + } + + /// Construct a new opaque item type. +- pub fn new_opaque_type( +- with_id: ItemId, +- ty: &clang::Type, +- ctx: &mut BindgenContext, +- ) -> TypeId { ++ pub fn new_opaque_type(with_id: ItemId, ty: &clang::Type, ctx: &mut BindgenContext) -> TypeId { + let location = ty.declaration().location(); + let ty = Opaque::from_clang_ty(ty, ctx); + let kind = ItemKind::Type(ty); +@@ -497,12 +471,11 @@ impl Item { + self.ancestors(ctx) + .filter(|id| { + ctx.resolve_item(*id).as_module().map_or(false, |module| { +- !module.is_inline() || +- ctx.options().conservative_inline_namespaces ++ !module.is_inline() || ctx.options().conservative_inline_namespaces + }) + }) +- .count() + +- 1 ++ .count() ++ + 1 + } + + /// Get this `Item`'s comment, if it has any, already preprocessed and with +@@ -577,9 +550,9 @@ impl Item { + pub fn is_toplevel(&self, ctx: &BindgenContext) -> bool { + // FIXME: Workaround for some types falling behind when parsing weird + // stl classes, for example. +- if ctx.options().enable_cxx_namespaces && +- self.kind().is_module() && +- self.id() != ctx.root_module() ++ if ctx.options().enable_cxx_namespaces ++ && self.kind().is_module() ++ && self.id() != ctx.root_module() + { + return false; + } +@@ -593,9 +566,7 @@ impl Item { + + if parent_item.id() == ctx.root_module() { + return true; +- } else if ctx.options().enable_cxx_namespaces || +- !parent_item.kind().is_module() +- { ++ } else if ctx.options().enable_cxx_namespaces || !parent_item.kind().is_module() { + return false; + } + +@@ -656,15 +627,13 @@ impl Item { + + let path = self.path_for_allowlisting(ctx); + let name = path[1..].join("::"); +- ctx.options().blocklisted_items.matches(&name) || +- match self.kind { ++ ctx.options().blocklisted_items.matches(&name) ++ || match self.kind { + ItemKind::Type(..) => { +- ctx.options().blocklisted_types.matches(&name) || +- ctx.is_replaced_type(path, self.id) +- } +- ItemKind::Function(..) => { +- ctx.options().blocklisted_functions.matches(&name) ++ ctx.options().blocklisted_types.matches(&name) ++ || ctx.is_replaced_type(path, self.id) + } ++ ItemKind::Function(..) => ctx.options().blocklisted_functions.matches(&name), + // TODO: Add constant / namespace blocklisting? + ItemKind::Var(..) | ItemKind::Module(..) => false, + } +@@ -723,12 +692,7 @@ impl Item { + } + + /// Helper function for full_disambiguated_name +- fn push_disambiguated_name( +- &self, +- ctx: &BindgenContext, +- to: &mut String, +- level: u8, +- ) { ++ fn push_disambiguated_name(&self, ctx: &BindgenContext, to: &mut String, level: u8) { + to.push_str(&self.canonical_name(ctx)); + if let ItemKind::Type(ref ty) = *self.kind() { + if let TypeKind::TemplateInstantiation(ref inst) = *ty.kind() { +@@ -791,16 +755,14 @@ impl Item { + + match *self.kind() { + ItemKind::Var(ref var) => var.name().to_owned(), +- ItemKind::Module(ref module) => { +- module.name().map(ToOwned::to_owned).unwrap_or_else(|| { +- format!("_bindgen_mod_{}", self.exposed_id(ctx)) +- }) +- } +- ItemKind::Type(ref ty) => { +- ty.sanitized_name(ctx).map(Into::into).unwrap_or_else(|| { +- format!("_bindgen_ty_{}", self.exposed_id(ctx)) +- }) +- } ++ ItemKind::Module(ref module) => module ++ .name() ++ .map(ToOwned::to_owned) ++ .unwrap_or_else(|| format!("_bindgen_mod_{}", self.exposed_id(ctx))), ++ ItemKind::Type(ref ty) => ty ++ .sanitized_name(ctx) ++ .map(Into::into) ++ .unwrap_or_else(|| format!("_bindgen_ty_{}", self.exposed_id(ctx))), + ItemKind::Function(ref fun) => { + let mut name = fun.name().to_owned(); + +@@ -839,11 +801,7 @@ impl Item { + /// If `BindgenOptions::disable_nested_struct_naming` is true then returned + /// name is the inner most non-anonymous name plus all the anonymous base names + /// that follows. +- pub fn real_canonical_name( +- &self, +- ctx: &BindgenContext, +- opt: &NameOptions, +- ) -> String { ++ pub fn real_canonical_name(&self, ctx: &BindgenContext, opt: &NameOptions) -> String { + let target = ctx.resolve_item(self.name_target(ctx)); + + // Short-circuit if the target has an override, and just use that. +@@ -874,9 +832,7 @@ impl Item { + }) + .filter(|id| { + if !ctx.options().conservative_inline_namespaces { +- if let ItemKind::Module(ref module) = +- *ctx.resolve_item(*id).kind() +- { ++ if let ItemKind::Module(ref module) = *ctx.resolve_item(*id).kind() { + return !module.is_inline(); + } + } +@@ -947,9 +903,9 @@ impl Item { + let ty_kind = self.kind().as_type().map(|t| t.kind()); + if let Some(ty_kind) = ty_kind { + match *ty_kind { +- TypeKind::Comp(..) | +- TypeKind::TemplateInstantiation(..) | +- TypeKind::Enum(..) => return self.local_id(ctx).to_string(), ++ TypeKind::Comp(..) | TypeKind::TemplateInstantiation(..) | TypeKind::Enum(..) => { ++ return self.local_id(ctx).to_string() ++ } + _ => {} + } + } +@@ -990,8 +946,7 @@ impl Item { + + match *type_.kind() { + TypeKind::Enum(ref enum_) => { +- enum_.computed_enum_variation(ctx, self) == +- EnumVariation::ModuleConsts ++ enum_.computed_enum_variation(ctx, self) == EnumVariation::ModuleConsts + } + TypeKind::Alias(inner_id) => { + // TODO(emilio): Make this "hop through type aliases that aren't +@@ -1018,18 +973,12 @@ impl Item { + ItemKind::Type(_) => cc.types(), + ItemKind::Function(ref f) => match f.kind() { + FunctionKind::Function => cc.functions(), +- FunctionKind::Method(MethodKind::Constructor) => { +- cc.constructors() +- } +- FunctionKind::Method(MethodKind::Destructor) | +- FunctionKind::Method(MethodKind::VirtualDestructor { +- .. +- }) => cc.destructors(), +- FunctionKind::Method(MethodKind::Static) | +- FunctionKind::Method(MethodKind::Normal) | +- FunctionKind::Method(MethodKind::Virtual { .. }) => { +- cc.methods() +- } ++ FunctionKind::Method(MethodKind::Constructor) => cc.constructors(), ++ FunctionKind::Method(MethodKind::Destructor) ++ | FunctionKind::Method(MethodKind::VirtualDestructor { .. }) => cc.destructors(), ++ FunctionKind::Method(MethodKind::Static) ++ | FunctionKind::Method(MethodKind::Normal) ++ | FunctionKind::Method(MethodKind::Virtual { .. }) => cc.methods(), + }, + } + } +@@ -1041,14 +990,9 @@ impl Item { + .borrow_with(|| self.compute_path(ctx, UserMangled::No)) + } + +- fn compute_path( +- &self, +- ctx: &BindgenContext, +- mangled: UserMangled, +- ) -> Vec { ++ fn compute_path(&self, ctx: &BindgenContext, mangled: UserMangled) -> Vec { + if let Some(path) = self.annotations().use_instead_of() { +- let mut ret = +- vec![ctx.resolve_item(ctx.root_module()).name(ctx).get()]; ++ let mut ret = vec![ctx.resolve_item(ctx.root_module()).name(ctx).get()]; + ret.extend_from_slice(path); + return ret; + } +@@ -1059,10 +1003,9 @@ impl Item { + .chain(iter::once(ctx.root_module().into())) + .map(|id| ctx.resolve_item(id)) + .filter(|item| { +- item.id() == target.id() || +- item.as_module().map_or(false, |module| { +- !module.is_inline() || +- ctx.options().conservative_inline_namespaces ++ item.id() == target.id() ++ || item.as_module().map_or(false, |module| { ++ !module.is_inline() || ctx.options().conservative_inline_namespaces + }) + }) + .map(|item| { +@@ -1123,9 +1066,9 @@ impl IsOpaque for Item { + ctx.in_codegen_phase(), + "You're not supposed to call this yet" + ); +- self.annotations.opaque() || +- self.as_type().map_or(false, |ty| ty.is_opaque(ctx, self)) || +- ctx.opaque_by_name(self.path_for_allowlisting(ctx)) ++ self.annotations.opaque() ++ || self.as_type().map_or(false, |ty| ty.is_opaque(ctx, self)) ++ || ctx.opaque_by_name(self.path_for_allowlisting(ctx)) + } + } + +@@ -1225,11 +1168,7 @@ impl HasFloat for Item { + pub type ItemSet = BTreeSet; + + impl DotAttributes for Item { +- fn dot_attributes( +- &self, +- ctx: &BindgenContext, +- out: &mut W, +- ) -> io::Result<()> ++ fn dot_attributes(&self, ctx: &BindgenContext, out: &mut W) -> io::Result<()> + where + W: io::Write, + { +@@ -1306,17 +1245,10 @@ fn visit_child( + } + + impl Item { +- pub(crate) fn builtin_type( +- kind: TypeKind, +- is_const: bool, +- ctx: &mut BindgenContext, +- ) -> TypeId { ++ pub(crate) fn builtin_type(kind: TypeKind, is_const: bool, ctx: &mut BindgenContext) -> TypeId { + // Feel free to add more here, I'm just lazy. + match kind { +- TypeKind::Void | +- TypeKind::Int(..) | +- TypeKind::Pointer(..) | +- TypeKind::Float(..) => {} ++ TypeKind::Void | TypeKind::Int(..) | TypeKind::Pointer(..) | TypeKind::Float(..) => {} + _ => panic!("Unsupported builtin type"), + } + +@@ -1428,52 +1360,44 @@ impl Item { + } + + // Guess how does clang treat extern "C" blocks? +- if cursor.kind() == CXCursor_UnexposedDecl { +- Err(ParseError::Recurse) +- } else { ++ match cursor.kind() { ++ // On Clang 18+, extern "C" is reported accurately as a LinkageSpec. ++ // Older LLVM treat it as UnexposedDecl. ++ CXCursor_LinkageSpec | CXCursor_UnexposedDecl => Err(ParseError::Recurse), + // We allowlist cursors here known to be unhandled, to prevent being + // too noisy about this. +- match cursor.kind() { +- CXCursor_MacroDefinition | +- CXCursor_MacroExpansion | +- CXCursor_UsingDeclaration | +- CXCursor_UsingDirective | +- CXCursor_StaticAssert | +- CXCursor_FunctionTemplate => { +- debug!( +- "Unhandled cursor kind {:?}: {:?}", +- cursor.kind(), +- cursor +- ); +- } +- CXCursor_InclusionDirective => { +- let file = cursor.get_included_file_name(); +- match file { +- None => { +- warn!( +- "Inclusion of a nameless file in {:?}", +- cursor +- ); +- } +- Some(filename) => { +- ctx.include_file(filename); +- } +- } +- } +- _ => { +- // ignore toplevel operator overloads +- let spelling = cursor.spelling(); +- if !spelling.starts_with("operator") { +- warn!( +- "Unhandled cursor kind {:?}: {:?}", +- cursor.kind(), +- cursor +- ); +- } +- } ++ CXCursor_MacroDefinition ++ | CXCursor_MacroExpansion ++ | CXCursor_UsingDeclaration ++ | CXCursor_UsingDirective ++ | CXCursor_StaticAssert ++ | CXCursor_FunctionTemplate => { ++ debug!("Unhandled cursor kind {:?}: {:?}", cursor.kind(), cursor); ++ Err(ParseError::Continue) + } + +- Err(ParseError::Continue) ++ CXCursor_InclusionDirective => { ++ let file = cursor.get_included_file_name(); ++ match file { ++ None => { ++ warn!("Inclusion of a nameless file in {:?}", cursor); ++ } ++ Some(included_file) => { ++ for cb in &ctx.options().parse_callbacks { ++ cb.include_file(&included_file); ++ } ++ } ++ } ++ Err(ParseError::Continue) ++ } ++ _ => { ++ // ignore toplevel operator overloads ++ let spelling = cursor.spelling(); ++ if !spelling.starts_with("operator") { ++ warn!("Unhandled cursor kind {:?}: {:?}", cursor.kind(), cursor); ++ } ++ Err(ParseError::Continue) ++ } + } + } + +@@ -1511,22 +1435,11 @@ impl Item { + + if ctx.collected_typerefs() { + debug!("refs already collected, resolving directly"); +- return Item::from_ty_with_id( +- potential_id, +- &ty, +- location, +- parent_id, +- ctx, +- ) +- .unwrap_or_else(|_| Item::new_opaque_type(potential_id, &ty, ctx)); ++ return Item::from_ty_with_id(potential_id, &ty, location, parent_id, ctx) ++ .unwrap_or_else(|_| Item::new_opaque_type(potential_id, &ty, ctx)); + } + +- if let Some(ty) = ctx.builtin_or_resolved_ty( +- potential_id, +- parent_id, +- &ty, +- Some(location), +- ) { ++ if let Some(ty) = ctx.builtin_or_resolved_ty(potential_id, parent_id, &ty, Some(location)) { + debug!("{:?} already resolved: {:?}", ty, location); + return ty; + } +@@ -1586,12 +1499,10 @@ impl Item { + id, ty, location + ); + +- if ty.kind() == clang_sys::CXType_Unexposed || +- location.cur_type().kind() == clang_sys::CXType_Unexposed ++ if ty.kind() == clang_sys::CXType_Unexposed ++ || location.cur_type().kind() == clang_sys::CXType_Unexposed + { +- if ty.is_associated_type() || +- location.cur_type().is_associated_type() +- { ++ if ty.is_associated_type() || location.cur_type().is_associated_type() { + return Ok(Item::new_opaque_type(id, ty, ctx)); + } + +@@ -1618,8 +1529,7 @@ impl Item { + }; + + let comment = decl.raw_comment().or_else(|| location.raw_comment()); +- let annotations = +- Annotations::new(&decl).or_else(|| Annotations::new(&location)); ++ let annotations = Annotations::new(&decl).or_else(|| Annotations::new(&location)); + + if let Some(ref annotations) = annotations { + if let Some(replaced) = annotations.use_instead_of() { +@@ -1627,9 +1537,7 @@ impl Item { + } + } + +- if let Some(ty) = +- ctx.builtin_or_resolved_ty(id, parent_id, ty, Some(location)) +- { ++ if let Some(ty) = ctx.builtin_or_resolved_ty(id, parent_id, ty, Some(location)) { + return Ok(ty); + } + +@@ -1665,9 +1573,7 @@ impl Item { + let result = Type::from_clang_ty(id, ty, location, parent_id, ctx); + let relevant_parent_id = parent_id.unwrap_or(current_module); + let ret = match result { +- Ok(ParseResult::AlreadyResolved(ty)) => { +- Ok(ty.as_type_id_unchecked()) +- } ++ Ok(ParseResult::AlreadyResolved(ty)) => Ok(ty.as_type_id_unchecked()), + Ok(ParseResult::New(item, declaration)) => { + ctx.add_item( + Item::new( +@@ -1698,13 +1604,10 @@ impl Item { + assert_eq!(*finished.decl(), declaration_to_look_for); + } + +- location.visit(|cur| { +- visit_child(cur, id, ty, parent_id, ctx, &mut result) +- }); ++ location.visit(|cur| visit_child(cur, id, ty, parent_id, ctx, &mut result)); + + if valid_decl { +- let partial_ty = +- PartialType::new(declaration_to_look_for, id); ++ let partial_ty = PartialType::new(declaration_to_look_for, id); + ctx.begin_parsing(partial_ty); + } + +@@ -1813,10 +1716,7 @@ impl Item { + // but maintaining these scopes properly would require more changes to + // the whole libclang -> IR parsing code. + +- fn is_template_with_spelling( +- refd: &clang::Cursor, +- spelling: &str, +- ) -> bool { ++ fn is_template_with_spelling(refd: &clang::Cursor, spelling: &str) -> bool { + lazy_static! { + static ref ANON_TYPE_PARAM_RE: regex::Regex = + regex::Regex::new(r"^type\-parameter\-\d+\-\d+$").unwrap(); +@@ -1838,11 +1738,7 @@ impl Item { + } else if location.kind() == clang_sys::CXCursor_TypeRef { + // Situation (2) + match location.referenced() { +- Some(refd) +- if is_template_with_spelling(&refd, &ty_spelling) => +- { +- refd +- } ++ Some(refd) if is_template_with_spelling(&refd, &ty_spelling) => refd, + _ => return None, + } + } else { +@@ -1851,16 +1747,11 @@ impl Item { + + location.visit(|child| { + let child_ty = child.cur_type(); +- if child_ty.kind() == clang_sys::CXCursor_TypeRef && +- child_ty.spelling() == ty_spelling ++ if child_ty.kind() == clang_sys::CXCursor_TypeRef ++ && child_ty.spelling() == ty_spelling + { + match child.referenced() { +- Some(refd) +- if is_template_with_spelling( +- &refd, +- &ty_spelling, +- ) => +- { ++ Some(refd) if is_template_with_spelling(&refd, &ty_spelling) => { + definition = Some(refd); + return clang_sys::CXChildVisit_Break; + } +@@ -1883,12 +1774,7 @@ impl Item { + + if let Some(id) = ctx.get_type_param(&definition) { + if let Some(with_id) = with_id { +- return Some(ctx.build_ty_wrapper( +- with_id, +- id, +- Some(parent), +- &ty, +- )); ++ return Some(ctx.build_ty_wrapper(with_id, id, Some(parent), &ty)); + } else { + return Some(id); + } +@@ -1920,8 +1806,8 @@ impl ItemCanonicalName for Item { + ); + self.canonical_name + .borrow_with(|| { +- let in_namespace = ctx.options().enable_cxx_namespaces || +- ctx.options().disable_name_namespacing; ++ let in_namespace = ++ ctx.options().enable_cxx_namespaces || ctx.options().disable_name_namespacing; + + if in_namespace { + self.name(ctx).within_namespaces().get() +@@ -1934,10 +1820,7 @@ impl ItemCanonicalName for Item { + } + + impl ItemCanonicalPath for Item { +- fn namespace_aware_canonical_path( +- &self, +- ctx: &BindgenContext, +- ) -> Vec { ++ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec { + let mut path = self.canonical_path(ctx); + + // ASSUMPTION: (disable_name_namespacing && cxx_namespaces) diff --git a/user/zotero/llvm18.patch b/user/zotero/llvm18.patch new file mode 100644 index 0000000..2f0fd99 --- /dev/null +++ b/user/zotero/llvm18.patch @@ -0,0 +1,23 @@ +Patch-Source: https://github.com/chimera-linux/cports/blob/899c997/contrib/thunderbird/patches/llvm18.patch +--- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp ++++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp +@@ -540,7 +540,7 @@ + + webrtc::VideoFrameType ft; + GmpFrameTypeToWebrtcFrameType(aEncodedFrame->FrameType(), &ft); +- uint32_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; ++ uint64_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; + + GMP_LOG_DEBUG("GMP Encoded: %" PRIu64 ", type %d, len %d", + aEncodedFrame->TimeStamp(), aEncodedFrame->BufferType(), +--- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h ++++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h +@@ -302,7 +302,7 @@ + int64_t timestamp_us; + }; + // Map rtp time -> input image data +- DataMutex> mInputImageMap; ++ DataMutex> mInputImageMap; + + MediaEventProducer mInitPluginEvent; + MediaEventProducer mReleasePluginEvent; diff --git a/user/zotero/moz-system-jpeg.patch b/user/zotero/moz-system-jpeg.patch new file mode 100644 index 0000000..27e9eb2 --- /dev/null +++ b/user/zotero/moz-system-jpeg.patch @@ -0,0 +1,15 @@ +Patch-Source: https://phabricator.services.mozilla.com/D212612 + +diff --git a/toolkit/moz.configure b/toolkit/moz.configure +index 6d5485325c..c5dcc65dd5 100644 +--- a/toolkit/moz.configure ++++ b/toolkit/moz.configure +@@ -2426,6 +2426,8 @@ with only_when(compile_environment): + & jpeg_arm_neon_vld1q_u8_x4, + ) + ++ set_config("MOZ_SYSTEM_JPEG", True, when="--with-system-jpeg") ++ + + # PNG + # === diff --git a/user/zotero/nrappkit-qsort.patch b/user/zotero/nrappkit-qsort.patch new file mode 100644 index 0000000..21d6d45 --- /dev/null +++ b/user/zotero/nrappkit-qsort.patch @@ -0,0 +1,34 @@ +missing include to use qsort() + +https://bugzil.la/1906955 + +--- a/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c 2024-07-09 18:11:39.207125821 +0200 ++++ b/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c 2024-07-09 18:12:07.657013364 +0200 +@@ -53,6 +53,7 @@ + #include + #endif + #include ++#include + #include "registry.h" + #include "registry_int.h" + #include "registry_vtbl.h" +@@ -62,6 +63,10 @@ + #include "r_errors.h" + #include "r_macros.h" + ++static int nr_compare_string(const void *arg1, const void *arg2) { ++ return strcasecmp(*(const char **)arg1, *(const char **)arg2); ++} ++ + /* if C were an object-oriented language, nr_scalar_registry_node and + * nr_array_registry_node would subclass nr_registry_node, but it isn't + * object-oriented language, so this is used in cases where the pointer +@@ -1067,7 +1072,7 @@ + } + + assert(sizeof(*arg.children) == sizeof(NR_registry)); +- qsort(arg.children, arg.length, sizeof(*arg.children), (void*)strcasecmp); ++ qsort(arg.children, arg.length, sizeof(*arg.children), nr_compare_string); + + *length = arg.length; + diff --git a/user/zotero/rust1.78-packed-to-portable_simd.patch b/user/zotero/rust1.78-packed-to-portable_simd.patch new file mode 100644 index 0000000..e03f577 --- /dev/null +++ b/user/zotero/rust1.78-packed-to-portable_simd.patch @@ -0,0 +1,3582 @@ +Adapted from https://hg.mozilla.org/mozilla-central/rev/1db2ef126a6a +-- + +# HG changeset patch +# User Henri Sivonen +# Date 1714462184 0 +# Node ID 1db2ef126a6a8555dbf50345e16492c977b42e92 +# Parent a545e84b3674c4878f2e618b7bce23058f2ac690 +Bug 1882209 - Update encoding_rs to 0.8.34 to deal with rustc changes. r=glandium,supply-chain-reviewers + +Differential Revision: https://phabricator.services.mozilla.com/D207167 + +diff --git a/.cargo/config.in b/.cargo/config.in +--- a/.cargo/config.in ++++ b/.cargo/config.in +@@ -35,31 +35,31 @@ git = "https://github.com/gfx-rs/wgpu" + rev = "f71a1bc736fde37509262ca03e91d8f56a13aeb5" + replace-with = "vendored-sources" + + [source."git+https://github.com/glandium/warp?rev=4af45fae95bc98b0eba1ef0db17e1dac471bb23d"] + git = "https://github.com/glandium/warp" + rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" + replace-with = "vendored-sources" + ++[source."git+https://github.com/hsivonen/any_all_workaround?rev=7fb1b7034c9f172aade21ee1c8554e8d8a48af80"] ++git = "https://github.com/hsivonen/any_all_workaround" ++rev = "7fb1b7034c9f172aade21ee1c8554e8d8a48af80" ++replace-with = "vendored-sources" ++ + [source."git+https://github.com/hsivonen/chardetng?rev=3484d3e3ebdc8931493aa5df4d7ee9360a90e76b"] + git = "https://github.com/hsivonen/chardetng" + rev = "3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" + replace-with = "vendored-sources" + + [source."git+https://github.com/hsivonen/chardetng_c?rev=ed8a4c6f900a90d4dbc1d64b856e61490a1c3570"] + git = "https://github.com/hsivonen/chardetng_c" + rev = "ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" + replace-with = "vendored-sources" + +-[source."git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4"] +-git = "https://github.com/hsivonen/packed_simd" +-rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" +-replace-with = "vendored-sources" +- + [source."git+https://github.com/jfkthame/mapped_hyph.git?rev=c7651a0cffff41996ad13c44f689bd9cd2192c01"] + git = "https://github.com/jfkthame/mapped_hyph.git" + rev = "c7651a0cffff41996ad13c44f689bd9cd2192c01" + replace-with = "vendored-sources" + + [source."git+https://github.com/mozilla-spidermonkey/jsparagus?rev=64ba08e24749616de2344112f226d1ef4ba893ae"] + git = "https://github.com/mozilla-spidermonkey/jsparagus" + rev = "64ba08e24749616de2344112f226d1ef4ba893ae" +diff --git a/Cargo.lock b/Cargo.lock +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -80,16 +80,25 @@ dependencies = [ + name = "android_system_properties" + version = "0.1.5" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" + dependencies = [ + "libc", + ] + ++[[package]] ++name = "any_all_workaround" ++version = "0.1.0" ++source = "git+https://github.com/hsivonen/any_all_workaround?rev=7fb1b7034c9f172aade21ee1c8554e8d8a48af80#7fb1b7034c9f172aade21ee1c8554e8d8a48af80" ++dependencies = [ ++ "cfg-if 1.0.0", ++ "version_check", ++] ++ + [[package]] + name = "anyhow" + version = "1.0.69" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + + [[package]] + name = "app_services_logger" +@@ -1431,22 +1440,22 @@ dependencies = [ + "encoding_rs", + "nserror", + "nsstring", + "xmldecl", + ] + + [[package]] + name = "encoding_rs" +-version = "0.8.33" ++version = "0.8.34" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" ++checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" + dependencies = [ ++ "any_all_workaround", + "cfg-if 1.0.0", +- "packed_simd", + ] + + [[package]] + name = "enum-primitive-derive" + version = "0.2.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e" + dependencies = [ +@@ -3901,25 +3910,16 @@ checksum = "8d91edf4fbb970279443471345a4e8c491bf05bb283b3e6c88e4e606fd8c181b" + [[package]] + name = "oxilangtag-ffi" + version = "0.1.0" + dependencies = [ + "nsstring", + "oxilangtag", + ] + +-[[package]] +-name = "packed_simd" +-version = "0.3.9" +-source = "git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4#e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" +-dependencies = [ +- "cfg-if 1.0.0", +- "num-traits", +-] +- + [[package]] + name = "parking_lot" + version = "0.11.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" + dependencies = [ + "instant", + "lock_api", +diff --git a/Cargo.toml b/Cargo.toml +--- a/Cargo.toml ++++ b/Cargo.toml +@@ -154,22 +154,22 @@ rure = { path = "third_party/rust/rure" } + + # 0.31.1 but without rust-cssparser#342. + # TODO: Remove these, and just use v0.31.1 once bug 1836219 lands + # (which will get syn 2 into the tree). + cssparser = { path = "third_party/rust/cssparser" } + cssparser-macros = { path = "third_party/rust/cssparser-macros" } + + # Other overrides ++any_all_workaround = { git = "https://github.com/hsivonen/any_all_workaround", rev = "7fb1b7034c9f172aade21ee1c8554e8d8a48af80" } + chardetng = { git = "https://github.com/hsivonen/chardetng", rev="3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" } + chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" } + coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } + firefox-on-glean = { path = "toolkit/components/glean/api" } + libudev-sys = { path = "dom/webauthn/libudev-sys" } +-packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" } + midir = { git = "https://github.com/mozilla/midir.git", rev = "519e651241e867af3391db08f9ae6400bc023e18" } + # warp 0.3.3 + https://github.com/seanmonstar/warp/pull/1007 + warp = { git = "https://github.com/glandium/warp", rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" } + + # application-services overrides to make updating them all simpler. + interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } + sql-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } + sync15 = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } +diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk +--- a/config/makefiles/rust.mk ++++ b/config/makefiles/rust.mk +@@ -260,17 +260,17 @@ export COREAUDIO_SDK_PATH=$(IPHONEOS_SDK + export IPHONEOS_SDK_DIR + PATH := $(topsrcdir)/build/macosx:$(PATH) + endif + endif + + ifndef RUSTC_BOOTSTRAP + RUSTC_BOOTSTRAP := mozglue_static,qcms + ifdef MOZ_RUST_SIMD +-RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd ++RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,any_all_workaround + endif + export RUSTC_BOOTSTRAP + endif + + target_rust_ltoable := force-cargo-library-build $(ADD_RUST_LTOABLE) + target_rust_nonltoable := force-cargo-test-run force-cargo-program-build + + ifdef MOZ_PGO_RUST +diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml +--- a/supply-chain/audits.toml ++++ b/supply-chain/audits.toml +@@ -596,16 +596,29 @@ who = "Mike Hommey "] ++description = "Workaround for bad LLVM codegen for boolean reductions on 32-bit ARM" ++homepage = "https://docs.rs/any_all_workaround/" ++documentation = "https://docs.rs/any_all_workaround/" ++readme = "README.md" ++license = "MIT OR Apache-2.0" ++repository = "https://github.com/hsivonen/any_all_workaround" ++ ++[dependencies] ++cfg-if = "1.0" ++ ++[build-dependencies] ++version_check = "0.9" +diff --git a/third_party/rust/packed_simd/LICENSE-APACHE b/third_party/rust/any_all_workaround/LICENSE-APACHE +rename from third_party/rust/packed_simd/LICENSE-APACHE +rename to third_party/rust/any_all_workaround/LICENSE-APACHE +diff --git a/third_party/rust/packed_simd/LICENSE-MIT b/third_party/rust/any_all_workaround/LICENSE-MIT +rename from third_party/rust/packed_simd/LICENSE-MIT +rename to third_party/rust/any_all_workaround/LICENSE-MIT +diff --git a/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS b/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS +@@ -0,0 +1,21 @@ ++qcms ++Copyright (C) 2009-2024 Mozilla Corporation ++Copyright (C) 1998-2007 Marti Maria ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the "Software"), ++to deal in the Software without restriction, including without limitation ++the rights to use, copy, modify, merge, publish, distribute, sublicense, ++and/or sell copies of the Software, and to permit persons to whom the Software ++is furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ++THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE ++LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION ++OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION ++WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +diff --git a/third_party/rust/any_all_workaround/README.md b/third_party/rust/any_all_workaround/README.md +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/README.md +@@ -0,0 +1,13 @@ ++# any_all_workaround ++ ++This is a workaround for bad codegen ([Rust bug](https://github.com/rust-lang/portable-simd/issues/146), [LLVM bug](https://github.com/llvm/llvm-project/issues/50466)) for the `any()` and `all()` reductions for NEON-backed SIMD vectors on 32-bit ARM. On other platforms these delegate to `any()` and `all()` in `core::simd`. ++ ++The plan is to abandon this crate once the LLVM bug is fixed or `core::simd` works around the LLVM bug. ++ ++The code is forked from the [`packed_simd` crate](https://raw.githubusercontent.com/hsivonen/packed_simd/d938e39bee9bc5c222f5f2f2a0df9e53b5ce36ae/src/codegen/reductions/mask/arm.rs). ++ ++This crate requires Nightly Rust as it depends on the `portable_simd` feature. ++ ++# License ++ ++`MIT OR Apache-2.0`, since that's how `packed_simd` is licensed. (The ARM intrinsics Rust version workaround is from qcms, see LICENSE-MIT-QCMS.) +diff --git a/third_party/rust/any_all_workaround/build.rs b/third_party/rust/any_all_workaround/build.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/build.rs +@@ -0,0 +1,7 @@ ++extern crate version_check as rustc; ++ ++fn main() { ++ if rustc::is_min_version("1.78.0").unwrap_or(false) { ++ println!("cargo:rustc-cfg=stdsimd_split"); ++ } ++} +diff --git a/third_party/rust/any_all_workaround/src/lib.rs b/third_party/rust/any_all_workaround/src/lib.rs +new file mode 100644 +--- /dev/null ++++ b/third_party/rust/any_all_workaround/src/lib.rs +@@ -0,0 +1,110 @@ ++// This code began as a fork of ++// https://raw.githubusercontent.com/rust-lang/packed_simd/d938e39bee9bc5c222f5f2f2a0df9e53b5ce36ae/src/codegen/reductions/mask/arm.rs ++// which didn't have a license header on the file, but Cargo.toml said "MIT OR Apache-2.0". ++// See LICENSE-MIT and LICENSE-APACHE. ++ ++#![no_std] ++#![feature(portable_simd)] ++#![cfg_attr( ++ all( ++ stdsimd_split, ++ target_arch = "arm", ++ target_endian = "little", ++ target_feature = "neon", ++ target_feature = "v7" ++ ), ++ feature(stdarch_arm_neon_intrinsics) ++)] ++#![cfg_attr( ++ all( ++ not(stdsimd_split), ++ target_arch = "arm", ++ target_endian = "little", ++ target_feature = "neon", ++ target_feature = "v7" ++ ), ++ feature(stdsimd) ++)] ++ ++use cfg_if::cfg_if; ++use core::simd::mask16x8; ++use core::simd::mask32x4; ++use core::simd::mask8x16; ++ ++cfg_if! { ++ if #[cfg(all(target_arch = "arm", target_endian = "little", target_feature = "neon", target_feature = "v7"))] { ++ use core::simd::mask8x8; ++ use core::simd::mask16x4; ++ use core::simd::mask32x2; ++ macro_rules! arm_128_v7_neon_impl { ++ ($all:ident, $any:ident, $id:ident, $half:ident, $vpmin:ident, $vpmax:ident) => { ++ #[inline] ++ pub fn $all(s: $id) -> bool { ++ use core::arch::arm::$vpmin; ++ use core::mem::transmute; ++ unsafe { ++ union U { ++ halves: ($half, $half), ++ vec: $id, ++ } ++ let halves = U { vec: s }.halves; ++ let h: $half = transmute($vpmin(transmute(halves.0), transmute(halves.1))); ++ h.all() ++ } ++ } ++ #[inline] ++ pub fn $any(s: $id) -> bool { ++ use core::arch::arm::$vpmax; ++ use core::mem::transmute; ++ unsafe { ++ union U { ++ halves: ($half, $half), ++ vec: $id, ++ } ++ let halves = U { vec: s }.halves; ++ let h: $half = transmute($vpmax(transmute(halves.0), transmute(halves.1))); ++ h.any() ++ } ++ } ++ } ++ } ++ } else { ++ macro_rules! arm_128_v7_neon_impl { ++ ($all:ident, $any:ident, $id:ident, $half:ident, $vpmin:ident, $vpmax:ident) => { ++ #[inline(always)] ++ pub fn $all(s: $id) -> bool { ++ s.all() ++ } ++ #[inline(always)] ++ pub fn $any(s: $id) -> bool { ++ s.any() ++ } ++ } ++ } ++ } ++} ++ ++arm_128_v7_neon_impl!( ++ all_mask8x16, ++ any_mask8x16, ++ mask8x16, ++ mask8x8, ++ vpmin_u8, ++ vpmax_u8 ++); ++arm_128_v7_neon_impl!( ++ all_mask16x8, ++ any_mask16x8, ++ mask16x8, ++ mask16x4, ++ vpmin_u16, ++ vpmax_u16 ++); ++arm_128_v7_neon_impl!( ++ all_mask32x4, ++ any_mask32x4, ++ mask32x4, ++ mask32x2, ++ vpmin_u32, ++ vpmax_u32 ++); +diff --git a/third_party/rust/encoding_rs/.cargo-checksum.json b/third_party/rust/encoding_rs/.cargo-checksum.json +--- a/third_party/rust/encoding_rs/.cargo-checksum.json ++++ b/third_party/rust/encoding_rs/.cargo-checksum.json +@@ -1,1 +1,1 @@ +-{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"42fa83322aa9fd6723b77d35d0cacb92cbb6e7f573ce11c55f5225292866f8f4","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"d938e8ab0b9ab67e74a1a4f48f23fdce956d0ad3a3f6147ae7612a92763c88d5","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"c1b522b5a799884e5001da661f42c5a8f4d0acb9ef1d74b206f22b5f65365606","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"dc71378a8f07a2d8659f69ee81fb8791fef56ba86f124b429978285237bb4a7b","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"be989dd25c6b946e3e8745fdc8e8a80fcf24b3be99ad0b4b78153ba3f6ab6310","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"c44c002641adb5ebc4368707a8cc0a076d2f33e6a5c27b1b69988eb515f5653d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"8a617cc57032092d65850eb27e00de687c80aea3299e839a1f58b42d0b35abf3","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"808587168d73f0c80f8520f0ca9b161866ed2efeb17a05e85fdf3b8efe7ba28a","src/handles.rs":"cc83dc0754751d67f5688a65c5e0191cba02f6bacce81a0813a243cba55eef7a","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"1dc07b818e45846b16ddcaf0de46c8862dd7df8099123ec38b95c3f8ad9c91ec","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"0bf34103e0ad1b842a13a082dee2b920b05cf4fb0f145c9ee7f608f4cb4a544f","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"2612aba86e1d201096d7e47a859bc3444f85934cc82d8adc6d39a4304d9eecfc","src/single_byte.rs":"3c9e9c1f946ae622c725ba9421240c1faa9a05e95fa10dd4642a25cb276a1edc","src/test_data/big5_in.txt":"4c5a8691f8dc717311889c63894026d2fb62725a86c4208ca274a9cc8d42a503","src/test_data/big5_in_ref.txt":"99d399e17750cf9c7cf30bb253dbfe35b81c4fcbdead93cfa48b1429213473c7","src/test_data/big5_out.txt":"6193ca97c297aa20e09396038d18e938bb7ea331c26f0f2454097296723a0b13","src/test_data/big5_out_ref.txt":"36567691f557df144f6cc520015a87038dfa156f296fcf103b56ae9a718be1fc","src/test_data/euc_kr_in.txt":"c86a7224f3215fa0d04e685622a752fdc72763e8ae076230c7fd62de57ec4074","src/test_data/euc_kr_in_ref.txt":"1f419f4ca47d708b54c73c461545a022ae2e20498fdbf8005a483d752a204883","src/test_data/euc_kr_out.txt":"e7f32e026f70be1e1b58e0047baf7d3d2c520269c4f9b9992e158b4decb0a1a3","src/test_data/euc_kr_out_ref.txt":"c9907857980b20b8e9e3b584482ed6567a2be6185d72237b6322f0404944924e","src/test_data/gb18030_in.txt":"ab7231b2d3e9afacdbd7d7f3b9e5361a7ff9f7e1cfdb4f3bd905b9362b309e53","src/test_data/gb18030_in_ref.txt":"dc5069421adca2043c55f5012b55a76fdff651d22e6e699fd0978f8d5706815c","src/test_data/gb18030_out.txt":"f0208d527f5ca63de7d9a0323be8d5cf12d8a104b2943d92c2701f0c3364dac1","src/test_data/gb18030_out_ref.txt":"6819fe47627e4ea01027003fc514b9f21a1322e732d7f1fb92cc6c5455bc6c07","src/test_data/iso_2022_jp_in.txt":"cd24bbdcb1834e25db54646fbf4c41560a13dc7540f6be3dba4f5d97d44513af","src/test_data/iso_2022_jp_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/iso_2022_jp_out.txt":"9b6f015329dda6c3f9ee5ce6dbd6fa9c89acc21283e886836c78b8d833480c21","src/test_data/iso_2022_jp_out_ref.txt":"78cb260093a20116ad9a42f43b05d1848c5ab100b6b9a850749809e943884b35","src/test_data/jis0208_in.txt":"6df3030553ffb0a6615bb33dc8ea9dca6d9623a9028e2ffec754ce3c3da824cc","src/test_data/jis0208_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/jis0208_out.txt":"4ec24477e1675ce750733bdc3c5add1cd27b6bd4ce1f09289564646e9654e857","src/test_data/jis0208_out_ref.txt":"c3e1cef5032b2b1d93a406f31ff940c4e2dfe8859b8b17ca2761fee7a75a0e48","src/test_data/jis0212_in.txt":"c011f0dd72bd7c8cd922df9374ef8d2769a77190514c77f6c62b415852eeb9fe","src/test_data/jis0212_in_ref.txt":"7d9458b3d2f73e7092a7f505c08ce1d233dde18aa679fbcf9889256239cc9e06","src/test_data/shift_jis_in.txt":"02e389ccef0dd2122e63f503899402cb7f797912c2444cc80ab93131116c5524","src/test_data/shift_jis_in_ref.txt":"512f985950ca902e643c88682dba9708b7c38d3c5ec2925168ab00ac94ab19f9","src/test_data/shift_jis_out.txt":"5fbc44da7bf639bf6cfe0fa1fd3eba7102b88f81919c9ea991302712f69426fb","src/test_data/shift_jis_out_ref.txt":"466322c6fed8286c64582731755290c2296508efdd258826e6279686649b481f","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"c9c010730dfb9f141d4fed19350c08a21af240913a54bb64f5ca89ff93b6b7d1"},"package":"7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"} +\ No newline at end of file ++{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"22a4d210c92dae9f32c6944ef340ee8fdd027f99c081577e8907123e2a93383e","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"1d08aefcb92afa81b18154049c9abbcad4540a23f7172e9f9bbed5af33f1a087","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"c1b522b5a799884e5001da661f42c5a8f4d0acb9ef1d74b206f22b5f65365606","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"dc71378a8f07a2d8659f69ee81fb8791fef56ba86f124b429978285237bb4a7b","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"be989dd25c6b946e3e8745fdc8e8a80fcf24b3be99ad0b4b78153ba3f6ab6310","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"588e38b01e666d5e7462617ea7e90a108d608dec9e016f3d273ac0744af2e05d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"8a617cc57032092d65850eb27e00de687c80aea3299e839a1f58b42d0b35abf3","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"808587168d73f0c80f8520f0ca9b161866ed2efeb17a05e85fdf3b8efe7ba28a","src/handles.rs":"b08cef1f5785bb6a4822f2e844c6df1b046b737b7a075e4593eaa8c4208e9fe2","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"834f44b670ec48ee82c0e12223d1567313fdd9f88bca5f4b117c82c1828f559f","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"948571137d3b151df8db4fb2c733e74ae595d055cdf0ad83abcab9341d6adabe","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"05c6e77af74bfe73cd39a752067c11425d6b46e5da419910f54bf75a5c02a984","src/single_byte.rs":"3ad87116fb339434a4b58e8f2b15485f2b66b9f7814d708f16194ed08f6d6ccf","src/test_data/big5_in.txt":"4c5a8691f8dc717311889c63894026d2fb62725a86c4208ca274a9cc8d42a503","src/test_data/big5_in_ref.txt":"99d399e17750cf9c7cf30bb253dbfe35b81c4fcbdead93cfa48b1429213473c7","src/test_data/big5_out.txt":"6193ca97c297aa20e09396038d18e938bb7ea331c26f0f2454097296723a0b13","src/test_data/big5_out_ref.txt":"36567691f557df144f6cc520015a87038dfa156f296fcf103b56ae9a718be1fc","src/test_data/euc_kr_in.txt":"c86a7224f3215fa0d04e685622a752fdc72763e8ae076230c7fd62de57ec4074","src/test_data/euc_kr_in_ref.txt":"1f419f4ca47d708b54c73c461545a022ae2e20498fdbf8005a483d752a204883","src/test_data/euc_kr_out.txt":"e7f32e026f70be1e1b58e0047baf7d3d2c520269c4f9b9992e158b4decb0a1a3","src/test_data/euc_kr_out_ref.txt":"c9907857980b20b8e9e3b584482ed6567a2be6185d72237b6322f0404944924e","src/test_data/gb18030_in.txt":"ab7231b2d3e9afacdbd7d7f3b9e5361a7ff9f7e1cfdb4f3bd905b9362b309e53","src/test_data/gb18030_in_ref.txt":"dc5069421adca2043c55f5012b55a76fdff651d22e6e699fd0978f8d5706815c","src/test_data/gb18030_out.txt":"f0208d527f5ca63de7d9a0323be8d5cf12d8a104b2943d92c2701f0c3364dac1","src/test_data/gb18030_out_ref.txt":"6819fe47627e4ea01027003fc514b9f21a1322e732d7f1fb92cc6c5455bc6c07","src/test_data/iso_2022_jp_in.txt":"cd24bbdcb1834e25db54646fbf4c41560a13dc7540f6be3dba4f5d97d44513af","src/test_data/iso_2022_jp_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/iso_2022_jp_out.txt":"9b6f015329dda6c3f9ee5ce6dbd6fa9c89acc21283e886836c78b8d833480c21","src/test_data/iso_2022_jp_out_ref.txt":"78cb260093a20116ad9a42f43b05d1848c5ab100b6b9a850749809e943884b35","src/test_data/jis0208_in.txt":"6df3030553ffb0a6615bb33dc8ea9dca6d9623a9028e2ffec754ce3c3da824cc","src/test_data/jis0208_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/jis0208_out.txt":"4ec24477e1675ce750733bdc3c5add1cd27b6bd4ce1f09289564646e9654e857","src/test_data/jis0208_out_ref.txt":"c3e1cef5032b2b1d93a406f31ff940c4e2dfe8859b8b17ca2761fee7a75a0e48","src/test_data/jis0212_in.txt":"c011f0dd72bd7c8cd922df9374ef8d2769a77190514c77f6c62b415852eeb9fe","src/test_data/jis0212_in_ref.txt":"7d9458b3d2f73e7092a7f505c08ce1d233dde18aa679fbcf9889256239cc9e06","src/test_data/shift_jis_in.txt":"02e389ccef0dd2122e63f503899402cb7f797912c2444cc80ab93131116c5524","src/test_data/shift_jis_in_ref.txt":"512f985950ca902e643c88682dba9708b7c38d3c5ec2925168ab00ac94ab19f9","src/test_data/shift_jis_out.txt":"5fbc44da7bf639bf6cfe0fa1fd3eba7102b88f81919c9ea991302712f69426fb","src/test_data/shift_jis_out_ref.txt":"466322c6fed8286c64582731755290c2296508efdd258826e6279686649b481f","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"9456ca46168ef86c98399a2536f577ef7be3cdde90c0c51392d8ac48519d3fae"},"package":"b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"} +\ No newline at end of file +diff --git a/third_party/rust/encoding_rs/Cargo.toml b/third_party/rust/encoding_rs/Cargo.toml +--- a/third_party/rust/encoding_rs/Cargo.toml ++++ b/third_party/rust/encoding_rs/Cargo.toml +@@ -6,18 +6,19 @@ + # to registry (e.g., crates.io) dependencies. + # + # If you are reading this file be aware that the original Cargo.toml + # will likely look very different (and much more reasonable). + # See Cargo.toml.orig for the original contents. + + [package] + edition = "2018" ++rust-version = "1.36" + name = "encoding_rs" +-version = "0.8.33" ++version = "0.8.34" + authors = ["Henri Sivonen "] + description = "A Gecko-oriented implementation of the Encoding Standard" + homepage = "https://docs.rs/encoding_rs/" + documentation = "https://docs.rs/encoding_rs/" + readme = "README.md" + keywords = [ + "encoding", + "web", +@@ -31,23 +32,23 @@ categories = [ + "internationalization", + ] + license = "(Apache-2.0 OR MIT) AND BSD-3-Clause" + repository = "https://github.com/hsivonen/encoding_rs" + + [profile.release] + lto = true + ++[dependencies.any_all_workaround] ++version = "0.1.0" ++optional = true ++ + [dependencies.cfg-if] + version = "1.0" + +-[dependencies.packed_simd] +-version = "0.3.9" +-optional = true +- + [dependencies.serde] + version = "1.0" + optional = true + + [dev-dependencies.bincode] + version = "1.0" + + [dev-dependencies.serde_derive] +@@ -69,15 +70,9 @@ fast-legacy-encode = [ + "fast-hanja-encode", + "fast-kanji-encode", + "fast-gb-hanzi-encode", + "fast-big5-hanzi-encode", + ] + less-slow-big5-hanzi-encode = [] + less-slow-gb-hanzi-encode = [] + less-slow-kanji-encode = [] +-simd-accel = [ +- "packed_simd", +- "packed_simd/into_bits", +-] +- +-[badges.travis-ci] +-repository = "hsivonen/encoding_rs" ++simd-accel = ["any_all_workaround"] +diff --git a/third_party/rust/encoding_rs/README.md b/third_party/rust/encoding_rs/README.md +--- a/third_party/rust/encoding_rs/README.md ++++ b/third_party/rust/encoding_rs/README.md +@@ -162,50 +162,36 @@ wrappers. + * [C++](https://github.com/hsivonen/recode_cpp) + + ## Optional features + + There are currently these optional cargo features: + + ### `simd-accel` + +-Enables SIMD acceleration using the nightly-dependent `packed_simd` crate. ++Enables SIMD acceleration using the nightly-dependent `portable_simd` standard ++library feature. + + This is an opt-in feature, because enabling this feature _opts out_ of Rust's + guarantees of future compilers compiling old code (aka. "stability story"). + + Currently, this has not been tested to be an improvement except for these +-targets: ++targets and enabling the `simd-accel` feature is expected to break the build ++on other targets: + + * x86_64 + * i686 + * aarch64 + * thumbv7neon + + If you use nightly Rust, you use targets whose first component is one of the + above, and you are prepared _to have to revise your configuration when updating + Rust_, you should enable this feature. Otherwise, please _do not_ enable this + feature. + +-_Note!_ If you are compiling for a target that does not have 128-bit SIMD +-enabled as part of the target definition and you are enabling 128-bit SIMD +-using `-C target_feature`, you need to enable the `core_arch` Cargo feature +-for `packed_simd` to compile a crates.io snapshot of `core_arch` instead of +-using the standard-library copy of `core::arch`, because the `core::arch` +-module of the pre-compiled standard library has been compiled with the +-assumption that the CPU doesn't have 128-bit SIMD. At present this applies +-mainly to 32-bit ARM targets whose first component does not include the +-substring `neon`. +- +-The encoding_rs side of things has not been properly set up for POWER, +-PowerPC, MIPS, etc., SIMD at this time, so even if you were to follow +-the advice from the previous paragraph, you probably shouldn't use +-the `simd-accel` option on the less mainstream architectures at this +-time. +- + Used by Firefox. + + ### `serde` + + Enables support for serializing and deserializing `&'static Encoding`-typed + struct fields using [Serde][1]. + + [1]: https://serde.rs/ +@@ -376,18 +362,19 @@ It is a goal to support the latest stabl + the version of Rust that's used for Firefox Nightly. + + At this time, there is no firm commitment to support a version older than + what's required by Firefox, and there is no commitment to treat MSRV changes + as semver-breaking, because this crate depends on `cfg-if`, which doesn't + appear to treat MSRV changes as semver-breaking, so it would be useless for + this crate to treat MSRV changes as semver-breaking. + +-As of 2021-02-04, MSRV appears to be Rust 1.36.0 for using the crate and ++As of 2024-04-04, MSRV appears to be Rust 1.36.0 for using the crate and + 1.42.0 for doc tests to pass without errors about the global allocator. ++With the `simd-accel` feature, the MSRV is even higher. + + ## Compatibility with rust-encoding + + A compatibility layer that implements the rust-encoding API on top of + encoding_rs is + [provided as a separate crate](https://github.com/hsivonen/encoding_rs_compat) + (cannot be uploaded to crates.io). The compatibility layer was originally + written with the assuption that Firefox would need it, but it is not currently +@@ -441,20 +428,27 @@ To regenerate the generated code: + - [x] Implement the rust-encoding API in terms of encoding_rs. + - [x] Add SIMD acceleration for Aarch64. + - [x] Investigate the use of NEON on 32-bit ARM. + - [ ] ~Investigate Björn Höhrmann's lookup table acceleration for UTF-8 as + adapted to Rust in rust-encoding.~ + - [x] Add actually fast CJK encode options. + - [ ] ~Investigate [Bob Steagall's lookup table acceleration for UTF-8](https://github.com/BobSteagall/CppNow2018/blob/master/FastConversionFromUTF-8/Fast%20Conversion%20From%20UTF-8%20with%20C%2B%2B%2C%20DFAs%2C%20and%20SSE%20Intrinsics%20-%20Bob%20Steagall%20-%20C%2B%2BNow%202018.pdf).~ + - [x] Provide a build mode that works without `alloc` (with lesser API surface). +-- [ ] Migrate to `std::simd` once it is stable and declare 1.0. ++- [x] Migrate to `std::simd` ~once it is stable and declare 1.0.~ ++- [ ] Migrate `unsafe` slice access by larger types than `u8`/`u16` to `align_to`. + + ## Release Notes + ++### 0.8.34 ++ ++* Use the `portable_simd` nightly feature of the standard library instead of the `packed_simd` crate. Only affects the `simd-accel` optional nightly feature. ++* Internal documentation improvements and minor code improvements around `unsafe`. ++* Added `rust-version` to `Cargo.toml`. ++ + ### 0.8.33 + + * Use `packed_simd` instead of `packed_simd_2` again now that updates are back under the `packed_simd` name. Only affects the `simd-accel` optional nightly feature. + + ### 0.8.32 + + * Removed `build.rs`. (This removal should resolve false positives reported by some antivirus products. This may break some build configurations that have opted out of Rust's guarantees against future build breakage.) + * Internal change to what API is used for reinterpreting the lane configuration of SIMD vectors. +diff --git a/third_party/rust/encoding_rs/src/ascii.rs b/third_party/rust/encoding_rs/src/ascii.rs +--- a/third_party/rust/encoding_rs/src/ascii.rs ++++ b/third_party/rust/encoding_rs/src/ascii.rs +@@ -46,71 +46,87 @@ cfg_if! { + #[allow(dead_code)] + #[inline(always)] + fn likely(b: bool) -> bool { + b + } + } + } + ++// Safety invariants for masks: data & mask = 0 for valid ASCII or basic latin utf-16 ++ + // `as` truncates, so works on 32-bit, too. + #[allow(dead_code)] + pub const ASCII_MASK: usize = 0x8080_8080_8080_8080u64 as usize; + + // `as` truncates, so works on 32-bit, too. + #[allow(dead_code)] + pub const BASIC_LATIN_MASK: usize = 0xFF80_FF80_FF80_FF80u64 as usize; + + #[allow(unused_macros)] + macro_rules! ascii_naive { + ($name:ident, $src_unit:ty, $dst_unit:ty) => { ++ /// Safety: src and dst must have len_unit elements and be aligned ++ /// Safety-usable invariant: will return Some() when it fails ++ /// to convert. The first value will be a u8 that is > 127. + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + // Yes, manually omitting the bound check here matters + // a lot for perf. + for i in 0..len { ++ // Safety: len invariant used here + let code_unit = *(src.add(i)); ++ // Safety: Upholds safety-usable invariant here + if code_unit > 127 { + return Some((code_unit, i)); + } ++ // Safety: len invariant used here + *(dst.add(i)) = code_unit as $dst_unit; + } + return None; + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_alu { + ($name:ident, ++ // safety invariant: src/dst MUST be u8 + $src_unit:ty, + $dst_unit:ty, ++ // Safety invariant: stride_fn must consume and produce two usizes, and return the index of the first non-ascii when it fails + $stride_fn:ident) => { ++ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for ++ /// write ++ /// Safety-usable invariant: will return Some() when it fails ++ /// to convert. The first value will be a u8 that is > 127. + #[cfg_attr(feature = "cargo-clippy", allow(never_loop, cast_ptr_alignment))] + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; + // This loop is only broken out of as a `goto` forward + loop { ++ // Safety: until_alignment becomes the number of bytes we need to munch until we are aligned to usize + let mut until_alignment = { + // Check if the other unit aligns if we move the narrower unit + // to alignment. + // if ::core::mem::size_of::<$src_unit>() == ::core::mem::size_of::<$dst_unit>() { + // ascii_to_ascii + let src_alignment = (src as usize) & ALU_ALIGNMENT_MASK; + let dst_alignment = (dst as usize) & ALU_ALIGNMENT_MASK; + if src_alignment != dst_alignment { ++ // Safety: bails early and ends up in the naïve branch where usize-alignment doesn't matter + break; + } + (ALU_ALIGNMENT - src_alignment) & ALU_ALIGNMENT_MASK + // } else if ::core::mem::size_of::<$src_unit>() < ::core::mem::size_of::<$dst_unit>() { + // ascii_to_basic_latin + // let src_until_alignment = (ALIGNMENT - ((src as usize) & ALIGNMENT_MASK)) & ALIGNMENT_MASK; + // if (dst.add(src_until_alignment) as usize) & ALIGNMENT_MASK != 0 { + // break; +@@ -129,74 +145,104 @@ macro_rules! ascii_alu { + // Moving pointers to alignment seems to be a pessimization on + // x86_64 for operations that have UTF-16 as the internal + // Unicode representation. However, since it seems to be a win + // on ARM (tested ARMv7 code running on ARMv8 [rpi3]), except + // mixed results when encoding from UTF-16 and since x86 and + // x86_64 should be using SSE2 in due course, keeping the move + // to alignment here. It would be good to test on more ARM CPUs + // and on real MIPS and POWER hardware. ++ // ++ // Safety: This is the naïve code once again, for `until_alignment` bytes + while until_alignment != 0 { + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; ++ // Safety: offset is the number of bytes copied so far + offset += 1; + until_alignment -= 1; + } + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { ++ // Safety: num_ascii is known to be a byte index of a non-ascii byte due to stride_fn's invariant + if let Some(num_ascii) = $stride_fn( ++ // Safety: These are known to be valid and aligned since we have at ++ // least ALU_STRIDE_SIZE data in these buffers, and offset is the ++ // number of elements copied so far, which according to the ++ // until_alignment calculation above will cause both src and dst to be ++ // aligned to usize after this add + src.add(offset) as *const usize, + dst.add(offset) as *mut usize, + ) { + offset += num_ascii; ++ // Safety: Upholds safety-usable invariant here by indexing into non-ascii byte + return Some((*(src.add(offset)), offset)); + } ++ // Safety: offset continues to be the number of bytes copied so far, and ++ // maintains usize alignment for the next loop iteration + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > len - stride. This loop will continue as long as ++ // `offset <= len - stride`, which means there are `stride` bytes to still be read. + if offset > len_minus_stride { + break; + } + } + } + break; + } ++ ++ // Safety: This is the naïve code, same as ascii_naive, and has no requirements ++ // other than src/dst being valid for the the right lens + while offset < len { ++ // Safety: len invariant used here + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } ++ // Safety: len invariant used here + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! basic_latin_alu { + ($name:ident, ++ // safety invariant: use u8 for src/dest for ascii, and u16 for basic_latin + $src_unit:ty, + $dst_unit:ty, ++ // safety invariant: stride function must munch ALU_STRIDE_SIZE*size(src_unit) bytes off of src and ++ // write ALU_STRIDE_SIZE*size(dst_unit) bytes to dst + $stride_fn:ident) => { ++ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for ++ /// write ++ /// Safety-usable invariant: will return Some() when it fails ++ /// to convert. The first value will be a u8 that is > 127. + #[cfg_attr( + feature = "cargo-clippy", + allow(never_loop, cast_ptr_alignment, cast_lossless) + )] + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; + // This loop is only broken out of as a `goto` forward + loop { ++ // Safety: until_alignment becomes the number of bytes we need to munch from src/dest until we are aligned to usize ++ // We ensure basic-latin has the same alignment as ascii, starting with ascii since it is smaller. + let mut until_alignment = { + // Check if the other unit aligns if we move the narrower unit + // to alignment. + // if ::core::mem::size_of::<$src_unit>() == ::core::mem::size_of::<$dst_unit>() { + // ascii_to_ascii + // let src_alignment = (src as usize) & ALIGNMENT_MASK; + // let dst_alignment = (dst as usize) & ALIGNMENT_MASK; + // if src_alignment != dst_alignment { +@@ -232,66 +278,89 @@ macro_rules! basic_latin_alu { + // Moving pointers to alignment seems to be a pessimization on + // x86_64 for operations that have UTF-16 as the internal + // Unicode representation. However, since it seems to be a win + // on ARM (tested ARMv7 code running on ARMv8 [rpi3]), except + // mixed results when encoding from UTF-16 and since x86 and + // x86_64 should be using SSE2 in due course, keeping the move + // to alignment here. It would be good to test on more ARM CPUs + // and on real MIPS and POWER hardware. ++ // ++ // Safety: This is the naïve code once again, for `until_alignment` bytes + while until_alignment != 0 { + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; ++ // Safety: offset is the number of bytes copied so far + offset += 1; + until_alignment -= 1; + } + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { + if !$stride_fn( ++ // Safety: These are known to be valid and aligned since we have at ++ // least ALU_STRIDE_SIZE data in these buffers, and offset is the ++ // number of elements copied so far, which according to the ++ // until_alignment calculation above will cause both src and dst to be ++ // aligned to usize after this add + src.add(offset) as *const usize, + dst.add(offset) as *mut usize, + ) { + break; + } ++ // Safety: offset continues to be the number of bytes copied so far, and ++ // maintains usize alignment for the next loop iteration + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > len - stride. This loop will continue as long as ++ // `offset <= len - stride`, which means there are `stride` bytes to still be read. + if offset > len_minus_stride { + break; + } + } + } + break; + } ++ // Safety: This is the naïve code once again, for leftover bytes + while offset < len { ++ // Safety: len invariant used here + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: Upholds safety-usable invariant here + return Some((code_unit, offset)); + } ++ // Safety: len invariant used here + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_alu { ++ // safety invariant: stride function must munch ALU_STRIDE_SIZE*size(src_unit) bytes off of src and ++ // write ALU_STRIDE_SIZE*size(dst_unit) bytes to dst + ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_fn:ident) => { ++ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for ++ /// write + #[cfg_attr( + feature = "cargo-clippy", + allow(never_loop, cast_ptr_alignment, cast_lossless) + )] + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let mut offset = 0usize; + // This loop is only broken out of as a `goto` forward + loop { ++ // Safety: until_alignment becomes the number of bytes we need to munch from src/dest until we are aligned to usize ++ // We ensure the UTF-16 side has the same alignment as the Latin-1 side, starting with Latin-1 since it is smaller. + let mut until_alignment = { + if ::core::mem::size_of::<$src_unit>() < ::core::mem::size_of::<$dst_unit>() { + // unpack + let src_until_alignment = (ALU_ALIGNMENT + - ((src as usize) & ALU_ALIGNMENT_MASK)) + & ALU_ALIGNMENT_MASK; + if (dst.wrapping_add(src_until_alignment) as usize) & ALU_ALIGNMENT_MASK + != 0 +@@ -308,373 +377,485 @@ macro_rules! latin1_alu { + != 0 + { + break; + } + dst_until_alignment + } + }; + if until_alignment + ALU_STRIDE_SIZE <= len { ++ // Safety: This is the naïve code once again, for `until_alignment` bytes + while until_alignment != 0 { + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; ++ // Safety: offset is the number of bytes copied so far + offset += 1; + until_alignment -= 1; + } + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { + $stride_fn( ++ // Safety: These are known to be valid and aligned since we have at ++ // least ALU_STRIDE_SIZE data in these buffers, and offset is the ++ // number of elements copied so far, which according to the ++ // until_alignment calculation above will cause both src and dst to be ++ // aligned to usize after this add + src.add(offset) as *const usize, + dst.add(offset) as *mut usize, + ); ++ // Safety: offset continues to be the number of bytes copied so far, and ++ // maintains usize alignment for the next loop iteration + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > len - stride. This loop will continue as long as ++ // `offset <= len - stride`, which means there are `stride` bytes to still be read. + if offset > len_minus_stride { + break; + } + } + } + break; + } ++ // Safety: This is the naïve code once again, for leftover bytes + while offset < len { ++ // Safety: len invariant used here + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_simd_check_align { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_dst_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident + ) => { ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. ++ /// ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + // XXX Should we first process one stride unconditionally as unaligned to + // avoid the cost of the branchiness below if the first stride fails anyway? + // XXX Should we just use unaligned SSE2 access unconditionally? It seems that + // on Haswell, it would make sense to just use unaligned and not bother + // checking. Need to benchmark older architectures before deciding. + let dst_masked = (dst as usize) & SIMD_ALIGNMENT_MASK; ++ // Safety: checking whether src is aligned + if ((src as usize) & SIMD_ALIGNMENT_MASK) == 0 { ++ // Safety: Checking whether dst is aligned + if dst_masked == 0 { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_both_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_src_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + } else { + if dst_masked == 0 { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_dst_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + } + } + while offset < len { ++ // Safety: uses len invariant here and below + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety: upholds safety-usable invariant + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_simd_check_align_unrolled { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing 2*SIMD_STRIDE_SIZE src_unit/dst_unit + $double_stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing 2*SIMD_STRIDE_SIZE src_unit/dst_unit + $double_stride_src_aligned:ident + ) => { +- #[inline(always)] ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. ++ /// ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let unit_size = ::core::mem::size_of::<$src_unit>(); + let mut offset = 0usize; + // This loop is only broken out of as a goto forward without + // actually looping + 'outer: loop { ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { + // First, process one unaligned ++ // Safety: this is safe to call since we're valid for this read/write + if !$stride_neither_aligned(src, dst) { + break 'outer; + } + offset = SIMD_STRIDE_SIZE; + + // We have now seen 16 ASCII bytes. Let's guess that + // there will be enough more to justify more expense + // in the case of non-ASCII. + // Use aligned reads for the sake of old microachitectures. ++ // ++ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. ++ // This is less that SIMD_ALIGNMENT, which is also SIMD_STRIDE_SIZE (as documented) + let until_alignment = ((SIMD_ALIGNMENT + - ((src.add(offset) as usize) & SIMD_ALIGNMENT_MASK)) + & SIMD_ALIGNMENT_MASK) + / unit_size; +- // This addition won't overflow, because even in the 32-bit PAE case the ++ // Safety: This addition won't overflow, because even in the 32-bit PAE case the + // address space holds enough code that the slice length can't be that + // close to address space size. + // offset now equals SIMD_STRIDE_SIZE, hence times 3 below. ++ // ++ // Safety: if this check succeeds we're valid for reading/writing at least `2 * SIMD_STRIDE_SIZE` elements plus `until_alignment`. ++ // The extra SIMD_STRIDE_SIZE in the condition is because `offset` is already `SIMD_STRIDE_SIZE`. + if until_alignment + (SIMD_STRIDE_SIZE * 3) <= len { + if until_alignment != 0 { ++ // Safety: this is safe to call since we're valid for this read/write (and more), and don't care about alignment ++ // This will copy over bytes that get decoded twice since it's not incrementing `offset` by SIMD_STRIDE_SIZE. This is fine. + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += until_alignment; + } ++ // Safety: At this point we're valid for reading/writing 2*SIMD_STRIDE_SIZE elements ++ // Safety: Now `offset` is aligned for `src` + let len_minus_stride_times_two = len - (SIMD_STRIDE_SIZE * 2); ++ // Safety: This is whether dst is aligned + let dst_masked = (dst.add(offset) as usize) & SIMD_ALIGNMENT_MASK; + if dst_masked == 0 { + loop { ++ // Safety: both are aligned, we can call the aligned function. We're valid for reading/writing double stride from the initial condition ++ // and the loop break condition below + if let Some(advance) = + $double_stride_both_aligned(src.add(offset), dst.add(offset)) + { + offset += advance; + let code_unit = *(src.add(offset)); ++ // Safety: uses safety-usable invariant on ascii_to_ascii_simd_double_stride to return ++ // guaranteed non-ascii + return Some((code_unit, offset)); + } + offset += SIMD_STRIDE_SIZE * 2; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } ++ // Safety: We're valid for reading/writing one more, and can still assume alignment + if offset + SIMD_STRIDE_SIZE <= len { + if !$stride_both_aligned(src.add(offset), dst.add(offset)) { + break 'outer; + } + offset += SIMD_STRIDE_SIZE; + } + } else { + loop { ++ // Safety: only src is aligned here. We're valid for reading/writing double stride from the initial condition ++ // and the loop break condition below + if let Some(advance) = + $double_stride_src_aligned(src.add(offset), dst.add(offset)) + { + offset += advance; + let code_unit = *(src.add(offset)); ++ // Safety: uses safety-usable invariant on ascii_to_ascii_simd_double_stride to return ++ // guaranteed non-ascii + return Some((code_unit, offset)); + } + offset += SIMD_STRIDE_SIZE * 2; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. ++ + if offset > len_minus_stride_times_two { + break; + } + } ++ // Safety: We're valid for reading/writing one more, and can still assume alignment + if offset + SIMD_STRIDE_SIZE <= len { + if !$stride_src_aligned(src.add(offset), dst.add(offset)) { + break 'outer; + } + offset += SIMD_STRIDE_SIZE; + } + } + } else { + // At most two iterations, so unroll + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: The check above ensures we're allowed to read/write this, and we don't use alignment + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: The check above ensures we're allowed to read/write this, and we don't use alignment + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; + } + } + } + } + break 'outer; + } + while offset < len { ++ // Safety: relies straightforwardly on the `len` invariant + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_simd_check_align { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_dst_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident ++ + ) => { ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; ++ // Whether dst is aligned + let dst_masked = (dst as usize) & SIMD_ALIGNMENT_MASK; ++ // Whether src is aligned + if ((src as usize) & SIMD_ALIGNMENT_MASK) == 0 { + if dst_masked == 0 { + loop { ++ // Safety: Both were aligned, we can use the aligned function + $stride_both_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: src was aligned, dst was not + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } + } else { + if dst_masked == 0 { + loop { ++ // Safety: src was aligned, dst was not + $stride_dst_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } else { + loop { ++ // Safety: Neither were aligned + $stride_neither_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for ++ // reading/writing at least SIMD_STRIDE_SIZE elements. + if offset > len_minus_stride { + break; + } + } + } + } + } + while offset < len { ++ // Safety: relies straightforwardly on the `len` invariant + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_simd_check_align_unrolled { + ( + $name:ident, + $src_unit:ty, + $dst_unit:ty, ++ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_both_aligned:ident, ++ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_src_aligned:ident, ++ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_dst_aligned:ident, ++ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit + $stride_neither_aligned:ident + ) => { ++ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let unit_size = ::core::mem::size_of::<$src_unit>(); + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. + if SIMD_STRIDE_SIZE <= len { ++ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. ++ // This is by definition less than SIMD_STRIDE_SIZE. + let mut until_alignment = ((SIMD_STRIDE_SIZE + - ((src as usize) & SIMD_ALIGNMENT_MASK)) + & SIMD_ALIGNMENT_MASK) + / unit_size; + while until_alignment != 0 { ++ // Safety: This is a straightforward copy, since until_alignment is < SIMD_STRIDE_SIZE < len, this is in-bounds + *(dst.add(offset)) = *(src.add(offset)) as $dst_unit; + offset += 1; + until_alignment -= 1; + } ++ // Safety: here offset will be `until_alignment`, i.e. enough to align `src`. + let len_minus_stride = len - SIMD_STRIDE_SIZE; ++ // Safety: if this check succeeds we're valid for reading/writing at least `2 * SIMD_STRIDE_SIZE` elements. + if offset + SIMD_STRIDE_SIZE * 2 <= len { + let len_minus_stride_times_two = len_minus_stride - SIMD_STRIDE_SIZE; ++ // Safety: at this point src is known to be aligned at offset, dst is not. + if (dst.add(offset) as usize) & SIMD_ALIGNMENT_MASK == 0 { + loop { ++ // Safety: We checked alignment of dst above, we can use the alignment functions. We're allowed to read/write 2*SIMD_STRIDE_SIZE elements, which we do. + $stride_both_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; + $stride_both_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } + } else { + loop { ++ // Safety: we ensured alignment of src already. + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } + } + } ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we are valid to munch SIMD_STRIDE_SIZE more elements, which we do + if offset < len_minus_stride { + $stride_src_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; + } + } + while offset < len { ++ // Safety: uses len invariant here and below + let code_unit = *(src.add(offset)); + // On x86_64, this loop autovectorizes but in the pack + // case there are instructions whose purpose is to make sure + // each u16 in the vector is truncated before packing. However, + // since we don't care about saturating behavior of SSE2 packing + // when the input isn't Latin1, those instructions are useless. + // Unfortunately, using the `assume` intrinsic to lie to the + // optimizer doesn't make LLVM omit the trunctation that we +@@ -688,138 +869,180 @@ macro_rules! latin1_simd_check_align_unr + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_simd_unalign { ++ // Safety: stride_neither_aligned must be a function that requires src/dest be valid for unaligned reads/writes for SIMD_STRIDE_SIZE elements of type src_unit/dest_unit + ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_neither_aligned:ident) => { ++ /// Safety: src and dst must be valid for reads/writes of len elements of type src_unit/dst_unit ++ /// ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[inline(always)] + pub unsafe fn $name( + src: *const $src_unit, + dst: *mut $dst_unit, + len: usize, + ) -> Option<($src_unit, usize)> { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { ++ // Safety: We know we're valid for `stride` reads/writes, so we can call this function. We don't need alignment. + if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // This is `offset > len - stride` which means we always have at least `stride` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { ++ // Safety: Uses len invariant here and below + let code_unit = *(src.add(offset)); + if code_unit > 127 { ++ // Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! latin1_simd_unalign { ++ // Safety: stride_neither_aligned must be a function that requires src/dest be valid for unaligned reads/writes for SIMD_STRIDE_SIZE elements of type src_unit/dest_unit + ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_neither_aligned:ident) => { ++ /// Safety: src and dst must be valid for unaligned reads/writes of len elements of type src_unit/dst_unit + #[inline(always)] + pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { ++ // Safety: We know we're valid for `stride` reads/writes, so we can call this function. We don't need alignment. + $stride_neither_aligned(src.add(offset), dst.add(offset)); + offset += SIMD_STRIDE_SIZE; ++ // This is `offset > len - stride` which means we always have at least `stride` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { ++ // Safety: Uses len invariant here + let code_unit = *(src.add(offset)); + *(dst.add(offset)) = code_unit as $dst_unit; + offset += 1; + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_ascii_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u8) -> bool { + let simd = $load(src); + if !simd_is_ascii(simd) { + return false; + } + $store(dst, simd); + true + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_ascii_simd_double_stride { ++ // Safety: store must be valid for 32 bytes of write, which may be unaligned (candidates: `store(8|16)_(aligned|unaligned)`) + ($name:ident, $store:ident) => { ++ /// Safety: src must be valid for 32 bytes of aligned u8x16 read ++ /// dst must be valid for 32 bytes of unaligned write according to ++ /// the $store fn, which may allow for unaligned writes or require ++ /// alignment to either 16x8 or u8x16. ++ /// ++ /// Safety-usable invariant: Returns Some(index) if the element at `index` is invalid ASCII + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u8) -> Option { + let first = load16_aligned(src); + let second = load16_aligned(src.add(SIMD_STRIDE_SIZE)); + $store(dst, first); + if unlikely(!simd_is_ascii(first | second)) { ++ // Safety: mask_ascii produces a mask of all the high bits. + let mask_first = mask_ascii(first); + if mask_first != 0 { ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src ++ // TODO SAFETY: What about big-endian systems? + return Some(mask_first.trailing_zeros() as usize); + } + $store(dst.add(SIMD_STRIDE_SIZE), second); + let mask_second = mask_ascii(second); ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src + return Some(SIMD_STRIDE_SIZE + mask_second.trailing_zeros() as usize); + } + $store(dst.add(SIMD_STRIDE_SIZE), second); + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_basic_latin_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 16/32 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u16) -> bool { + let simd = $load(src); + if !simd_is_ascii(simd) { + return false; + } + let (first, second) = simd_unpack(simd); + $store(dst, first); + $store(dst.add(8), second); + true + } + }; + } + + #[allow(unused_macros)] + macro_rules! ascii_to_basic_latin_simd_double_stride { ++ // Safety: store must be valid for 16 bytes of write, which may be unaligned + ($name:ident, $store:ident) => { ++ /// Safety: src must be valid for 2*SIMD_STRIDE_SIZE bytes of aligned reads, ++ /// aligned to either 16x8 or u8x16. ++ /// dst must be valid for 2*SIMD_STRIDE_SIZE bytes of aligned or unaligned reads + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u16) -> Option { + let first = load16_aligned(src); + let second = load16_aligned(src.add(SIMD_STRIDE_SIZE)); + let (a, b) = simd_unpack(first); + $store(dst, a); ++ // Safety: divide by 2 since it's a u16 pointer + $store(dst.add(SIMD_STRIDE_SIZE / 2), b); + if unlikely(!simd_is_ascii(first | second)) { + let mask_first = mask_ascii(first); + if mask_first != 0 { + return Some(mask_first.trailing_zeros() as usize); + } + let (c, d) = simd_unpack(second); + $store(dst.add(SIMD_STRIDE_SIZE), c); +@@ -832,47 +1055,59 @@ macro_rules! ascii_to_basic_latin_simd_d + $store(dst.add(SIMD_STRIDE_SIZE + (SIMD_STRIDE_SIZE / 2)), d); + None + } + }; + } + + #[allow(unused_macros)] + macro_rules! unpack_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u8, dst: *mut u16) { + let simd = $load(src); + let (first, second) = simd_unpack(simd); + $store(dst, first); + $store(dst.add(8), second); + } + }; + } + + #[allow(unused_macros)] + macro_rules! basic_latin_to_ascii_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 32/16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u16, dst: *mut u8) -> bool { + let first = $load(src); + let second = $load(src.add(8)); + if simd_is_basic_latin(first | second) { + $store(dst, simd_pack(first, second)); + true + } else { + false + } + } + }; + } + + #[allow(unused_macros)] + macro_rules! pack_simd_stride { ++ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) + ($name:ident, $load:ident, $store:ident) => { ++ /// Safety: src and dst must be valid for 32/16 bytes of read/write according to ++ /// the $load/$store fn, which may allow for unaligned reads/writes or require ++ /// alignment to either 16x8 or u8x16. + #[inline(always)] + pub unsafe fn $name(src: *const u16, dst: *mut u8) { + let first = $load(src); + let second = $load(src.add(8)); + $store(dst, simd_pack(first, second)); + } + }; + } +@@ -888,24 +1123,28 @@ cfg_if! { + // pub const ALIGNMENT: usize = 8; + + pub const ALU_STRIDE_SIZE: usize = 16; + + pub const ALU_ALIGNMENT: usize = 8; + + pub const ALU_ALIGNMENT_MASK: usize = 7; + ++ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently produce ++ // neither_unaligned variants using only unaligned inputs. + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_neither_aligned, load16_unaligned, store16_unaligned); + + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_neither_aligned, load16_unaligned, store8_unaligned); + unpack_simd_stride!(unpack_stride_neither_aligned, load16_unaligned, store8_unaligned); + + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); + pack_simd_stride!(pack_stride_neither_aligned, load8_unaligned, store16_unaligned); + ++ // Safety for conversion macros: We use the unalign macro with unalign functions above. All stride functions were produced ++ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. + ascii_simd_unalign!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_neither_aligned); + ascii_simd_unalign!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_neither_aligned); + ascii_simd_unalign!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_neither_aligned); + latin1_simd_unalign!(unpack_latin1, u8, u16, unpack_stride_neither_aligned); + latin1_simd_unalign!(pack_latin1, u16, u8, pack_stride_neither_aligned); + } else if #[cfg(all(feature = "simd-accel", target_endian = "little", target_feature = "neon"))] { + // SIMD with different instructions for aligned and unaligned loads and stores. + // +@@ -914,16 +1153,19 @@ cfg_if! { + // but the benchmark results I see don't agree. + + pub const SIMD_STRIDE_SIZE: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + + pub const SIMD_ALIGNMENT_MASK: usize = 15; + ++ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently name ++ // aligned/unaligned functions according to src/dst being aligned/unaligned ++ + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_both_aligned, load16_aligned, store16_aligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_src_aligned, load16_aligned, store16_unaligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_dst_aligned, load16_unaligned, store16_aligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_neither_aligned, load16_unaligned, store16_unaligned); + + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_both_aligned, load16_aligned, store8_aligned); + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_src_aligned, load16_aligned, store8_unaligned); + ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_dst_aligned, load16_unaligned, store8_aligned); +@@ -939,36 +1181,43 @@ cfg_if! { + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_dst_aligned, load8_unaligned, store16_aligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); + + pack_simd_stride!(pack_stride_both_aligned, load8_aligned, store16_aligned); + pack_simd_stride!(pack_stride_src_aligned, load8_aligned, store16_unaligned); + pack_simd_stride!(pack_stride_dst_aligned, load8_unaligned, store16_aligned); + pack_simd_stride!(pack_stride_neither_aligned, load8_unaligned, store16_unaligned); + ++ // Safety for conversion macros: We use the correct pattern of both/src/dst/neither here. All stride functions were produced ++ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. ++ + ascii_simd_check_align!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_both_aligned, ascii_to_ascii_stride_src_aligned, ascii_to_ascii_stride_dst_aligned, ascii_to_ascii_stride_neither_aligned); + ascii_simd_check_align!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_both_aligned, ascii_to_basic_latin_stride_src_aligned, ascii_to_basic_latin_stride_dst_aligned, ascii_to_basic_latin_stride_neither_aligned); + ascii_simd_check_align!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_both_aligned, basic_latin_to_ascii_stride_src_aligned, basic_latin_to_ascii_stride_dst_aligned, basic_latin_to_ascii_stride_neither_aligned); + latin1_simd_check_align!(unpack_latin1, u8, u16, unpack_stride_both_aligned, unpack_stride_src_aligned, unpack_stride_dst_aligned, unpack_stride_neither_aligned); + latin1_simd_check_align!(pack_latin1, u16, u8, pack_stride_both_aligned, pack_stride_src_aligned, pack_stride_dst_aligned, pack_stride_neither_aligned); + } else if #[cfg(all(feature = "simd-accel", target_feature = "sse2"))] { + // SIMD with different instructions for aligned and unaligned loads and stores. + // + // Newer microarchitectures are not supposed to have a performance difference between + // aligned and unaligned SSE2 loads and stores when the address is actually aligned, + // but the benchmark results I see don't agree. + + pub const SIMD_STRIDE_SIZE: usize = 16; + ++ /// Safety-usable invariant: This should be identical to SIMD_STRIDE_SIZE (used by ascii_simd_check_align_unrolled) + pub const SIMD_ALIGNMENT: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + + pub const SIMD_ALIGNMENT_MASK: usize = 15; + ++ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently name ++ // aligned/unaligned functions according to src/dst being aligned/unaligned ++ + ascii_to_ascii_simd_double_stride!(ascii_to_ascii_simd_double_stride_both_aligned, store16_aligned); + ascii_to_ascii_simd_double_stride!(ascii_to_ascii_simd_double_stride_src_aligned, store16_unaligned); + + ascii_to_basic_latin_simd_double_stride!(ascii_to_basic_latin_simd_double_stride_both_aligned, store8_aligned); + ascii_to_basic_latin_simd_double_stride!(ascii_to_basic_latin_simd_double_stride_src_aligned, store8_unaligned); + + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_both_aligned, load16_aligned, store16_aligned); + ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_src_aligned, load16_aligned, store16_unaligned); +@@ -984,33 +1233,43 @@ cfg_if! { + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_both_aligned, load8_aligned, store16_aligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_src_aligned, load8_aligned, store16_unaligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_dst_aligned, load8_unaligned, store16_aligned); + basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); + + pack_simd_stride!(pack_stride_both_aligned, load8_aligned, store16_aligned); + pack_simd_stride!(pack_stride_src_aligned, load8_aligned, store16_unaligned); + ++ // Safety for conversion macros: We use the correct pattern of both/src/dst/neither/double_both/double_src here. All stride functions were produced ++ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. ++ + ascii_simd_check_align_unrolled!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_both_aligned, ascii_to_ascii_stride_src_aligned, ascii_to_ascii_stride_neither_aligned, ascii_to_ascii_simd_double_stride_both_aligned, ascii_to_ascii_simd_double_stride_src_aligned); + ascii_simd_check_align_unrolled!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_both_aligned, ascii_to_basic_latin_stride_src_aligned, ascii_to_basic_latin_stride_neither_aligned, ascii_to_basic_latin_simd_double_stride_both_aligned, ascii_to_basic_latin_simd_double_stride_src_aligned); + + ascii_simd_check_align!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_both_aligned, basic_latin_to_ascii_stride_src_aligned, basic_latin_to_ascii_stride_dst_aligned, basic_latin_to_ascii_stride_neither_aligned); + latin1_simd_check_align_unrolled!(unpack_latin1, u8, u16, unpack_stride_both_aligned, unpack_stride_src_aligned, unpack_stride_dst_aligned, unpack_stride_neither_aligned); + latin1_simd_check_align_unrolled!(pack_latin1, u16, u8, pack_stride_both_aligned, pack_stride_src_aligned, pack_stride_dst_aligned, pack_stride_neither_aligned); + } else if #[cfg(all(target_endian = "little", target_pointer_width = "64"))] { + // Aligned ALU word, little-endian, 64-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 8; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 7; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0x0000_0000_FF00_0000usize & word) << 24) | + ((0x0000_0000_00FF_0000usize & word) << 16) | + ((0x0000_0000_0000_FF00usize & word) << 8) | + (0x0000_0000_0000_00FFusize & word); + let second = ((0xFF00_0000_0000_0000usize & word) >> 8) | + ((0x00FF_0000_0000_0000usize & word) >> 16) | +@@ -1019,22 +1278,24 @@ cfg_if! { + let third = ((0x0000_0000_FF00_0000usize & second_word) << 24) | + ((0x0000_0000_00FF_0000usize & second_word) << 16) | + ((0x0000_0000_0000_FF00usize & second_word) << 8) | + (0x0000_0000_0000_00FFusize & second_word); + let fourth = ((0xFF00_0000_0000_0000usize & second_word) >> 8) | + ((0x00FF_0000_0000_0000usize & second_word) >> 16) | + ((0x0000_FF00_0000_0000usize & second_word) >> 24) | + ((0x0000_00FF_0000_0000usize & second_word) >> 32); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF_0000_0000_0000usize & second) << 8) | + ((0x0000_00FF_0000_0000usize & second) << 16) | + ((0x0000_0000_00FF_0000usize & second) << 24) | + ((0x0000_0000_0000_00FFusize & second) << 32) | + ((0x00FF_0000_0000_0000usize & first) >> 24) | + ((0x0000_00FF_0000_0000usize & first) >> 16) | +@@ -1043,70 +1304,88 @@ cfg_if! { + let second_word = ((0x00FF_0000_0000_0000usize & fourth) << 8) | + ((0x0000_00FF_0000_0000usize & fourth) << 16) | + ((0x0000_0000_00FF_0000usize & fourth) << 24) | + ((0x0000_0000_0000_00FFusize & fourth) << 32) | + ((0x00FF_0000_0000_0000usize & third) >> 24) | + ((0x0000_00FF_0000_0000usize & third) >> 16) | + ((0x0000_0000_00FF_0000usize & third) >> 8) | + (0x0000_0000_0000_00FFusize & third); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else if #[cfg(all(target_endian = "little", target_pointer_width = "32"))] { + // Aligned ALU word, little-endian, 32-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 8; + + pub const MAX_STRIDE_SIZE: usize = 8; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 4; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 3; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0x0000_FF00usize & word) << 8) | + (0x0000_00FFusize & word); + let second = ((0xFF00_0000usize & word) >> 8) | + ((0x00FF_0000usize & word) >> 16); + let third = ((0x0000_FF00usize & second_word) << 8) | + (0x0000_00FFusize & second_word); + let fourth = ((0xFF00_0000usize & second_word) >> 8) | + ((0x00FF_0000usize & second_word) >> 16); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF_0000usize & second) << 8) | + ((0x0000_00FFusize & second) << 16) | + ((0x00FF_0000usize & first) >> 8) | + (0x0000_00FFusize & first); + let second_word = ((0x00FF_0000usize & fourth) << 8) | + ((0x0000_00FFusize & fourth) << 16) | + ((0x00FF_0000usize & third) >> 8) | + (0x0000_00FFusize & third); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else if #[cfg(all(target_endian = "big", target_pointer_width = "64"))] { + // Aligned ALU word, big-endian, 64-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 16; + + pub const MAX_STRIDE_SIZE: usize = 16; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 8; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 7; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0xFF00_0000_0000_0000usize & word) >> 8) | + ((0x00FF_0000_0000_0000usize & word) >> 16) | + ((0x0000_FF00_0000_0000usize & word) >> 24) | + ((0x0000_00FF_0000_0000usize & word) >> 32); + let second = ((0x0000_0000_FF00_0000usize & word) << 24) | + ((0x0000_0000_00FF_0000usize & word) << 16) | +@@ -1115,22 +1394,24 @@ cfg_if! { + let third = ((0xFF00_0000_0000_0000usize & second_word) >> 8) | + ((0x00FF_0000_0000_0000usize & second_word) >> 16) | + ((0x0000_FF00_0000_0000usize & second_word) >> 24) | + ((0x0000_00FF_0000_0000usize & second_word) >> 32); + let fourth = ((0x0000_0000_FF00_0000usize & second_word) << 24) | + ((0x0000_0000_00FF_0000usize & second_word) << 16) | + ((0x0000_0000_0000_FF00usize & second_word) << 8) | + (0x0000_0000_0000_00FFusize & second_word); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF0000_00000000usize & first) << 8) | + ((0x000000FF_00000000usize & first) << 16) | + ((0x00000000_00FF0000usize & first) << 24) | + ((0x00000000_000000FFusize & first) << 32) | + ((0x00FF0000_00000000usize & second) >> 24) | + ((0x000000FF_00000000usize & second) >> 16) | +@@ -1139,67 +1420,80 @@ cfg_if! { + let second_word = ((0x00FF0000_00000000usize & third) << 8) | + ((0x000000FF_00000000usize & third) << 16) | + ((0x00000000_00FF0000usize & third) << 24) | + ((0x00000000_000000FFusize & third) << 32) | + ((0x00FF0000_00000000usize & fourth) >> 24) | + ((0x000000FF_00000000usize & fourth) >> 16) | + ((0x00000000_00FF0000usize & fourth) >> 8) | + (0x00000000_000000FFusize & fourth); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else if #[cfg(all(target_endian = "big", target_pointer_width = "32"))] { + // Aligned ALU word, big-endian, 32-bit + ++ /// Safety invariant: this is the amount of bytes consumed by ++ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. ++ /// This is also the number of bytes produced by pack_alu. ++ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. + pub const ALU_STRIDE_SIZE: usize = 8; + + pub const MAX_STRIDE_SIZE: usize = 8; + ++ // Safety invariant: this is the pointer width in bytes + pub const ALU_ALIGNMENT: usize = 4; + ++ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT + pub const ALU_ALIGNMENT_MASK: usize = 3; + ++ /// Safety: dst must point to valid space for writing four `usize`s + #[inline(always)] + unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { + let first = ((0xFF00_0000usize & word) >> 8) | + ((0x00FF_0000usize & word) >> 16); + let second = ((0x0000_FF00usize & word) << 8) | + (0x0000_00FFusize & word); + let third = ((0xFF00_0000usize & second_word) >> 8) | + ((0x00FF_0000usize & second_word) >> 16); + let fourth = ((0x0000_FF00usize & second_word) << 8) | + (0x0000_00FFusize & second_word); ++ // Safety: fn invariant used here + *dst = first; + *(dst.add(1)) = second; + *(dst.add(2)) = third; + *(dst.add(3)) = fourth; + } + ++ /// Safety: dst must point to valid space for writing two `usize`s + #[inline(always)] + unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { + let word = ((0x00FF_0000usize & first) << 8) | + ((0x0000_00FFusize & first) << 16) | + ((0x00FF_0000usize & second) >> 8) | + (0x0000_00FFusize & second); + let second_word = ((0x00FF_0000usize & third) << 8) | + ((0x0000_00FFusize & third) << 16) | + ((0x00FF_0000usize & fourth) >> 8) | + (0x0000_00FFusize & fourth); ++ // Safety: fn invariant used here + *dst = word; + *(dst.add(1)) = second_word; + } + } else { + ascii_naive!(ascii_to_ascii, u8, u8); + ascii_naive!(ascii_to_basic_latin, u8, u16); + ascii_naive!(basic_latin_to_ascii, u16, u8); + } + } + + cfg_if! { ++ // Safety-usable invariant: this counts the zeroes from the "first byte" of utf-8 data packed into a usize ++ // with the target endianness + if #[cfg(target_endian = "little")] { + #[allow(dead_code)] + #[inline(always)] + fn count_zeros(word: usize) -> u32 { + word.trailing_zeros() + } + } else { + #[allow(dead_code)] +@@ -1207,208 +1501,272 @@ cfg_if! { + fn count_zeros(word: usize) -> u32 { + word.leading_zeros() + } + } + } + + cfg_if! { + if #[cfg(all(feature = "simd-accel", target_endian = "little", target_arch = "disabled"))] { ++ /// Safety-usable invariant: Will return the value and position of the first non-ASCII byte in the slice in a Some if found. ++ /// In other words, the first element of the Some is always `> 127` + #[inline(always)] + pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { + let src = slice.as_ptr(); + let len = slice.len(); + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { ++ // Safety: src at offset is valid for a `SIMD_STRIDE_SIZE` read + let simd = unsafe { load16_unaligned(src.add(offset)) }; + if !simd_is_ascii(simd) { + break; + } + offset += SIMD_STRIDE_SIZE; ++ // This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { + let code_unit = slice[offset]; + if code_unit > 127 { ++ // Safety: Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + offset += 1; + } + None + } + } else if #[cfg(all(feature = "simd-accel", target_feature = "sse2"))] { ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[inline(always)] + pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { + let src = slice.as_ptr(); + let len = slice.len(); + let mut offset = 0usize; ++ // Safety: if this check succeeds we're valid for reading at least `stride` elements. + if SIMD_STRIDE_SIZE <= len { + // First, process one unaligned vector ++ // Safety: src is valid for a `SIMD_STRIDE_SIZE` read + let simd = unsafe { load16_unaligned(src) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset = mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; + return Some((non_ascii, offset)); + } + offset = SIMD_STRIDE_SIZE; ++ // Safety: Now that offset has changed we don't yet know how much it is valid for + + // We have now seen 16 ASCII bytes. Let's guess that + // there will be enough more to justify more expense + // in the case of non-ASCII. + // Use aligned reads for the sake of old microachitectures. ++ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. ++ // This is by definition less than SIMD_ALIGNMENT, which is defined to be equal to SIMD_STRIDE_SIZE. + let until_alignment = unsafe { (SIMD_ALIGNMENT - ((src.add(offset) as usize) & SIMD_ALIGNMENT_MASK)) & SIMD_ALIGNMENT_MASK }; + // This addition won't overflow, because even in the 32-bit PAE case the + // address space holds enough code that the slice length can't be that + // close to address space size. + // offset now equals SIMD_STRIDE_SIZE, hence times 3 below. ++ // ++ // Safety: if this check succeeds we're valid for reading at least `2 * SIMD_STRIDE_SIZE` elements plus `until_alignment`. ++ // The extra SIMD_STRIDE_SIZE in the condition is because `offset` is already `SIMD_STRIDE_SIZE`. + if until_alignment + (SIMD_STRIDE_SIZE * 3) <= len { + if until_alignment != 0 { ++ // Safety: this is safe to call since we're valid for this read (and more), and don't care about alignment ++ // This will copy over bytes that get decoded twice since it's not incrementing `offset` by SIMD_STRIDE_SIZE. This is fine. + let simd = unsafe { load16_unaligned(src.add(offset)) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; + return Some((non_ascii, offset)); + } + offset += until_alignment; + } ++ // Safety: At this point we're valid for reading 2*SIMD_STRIDE_SIZE elements ++ // Safety: Now `offset` is aligned for `src` + let len_minus_stride_times_two = len - (SIMD_STRIDE_SIZE * 2); + loop { ++ // Safety: We were valid for this read, and were aligned. + let first = unsafe { load16_aligned(src.add(offset)) }; + let second = unsafe { load16_aligned(src.add(offset + SIMD_STRIDE_SIZE)) }; + if !simd_is_ascii(first | second) { ++ // Safety: mask_ascii produces a mask of all the high bits. + let mask_first = mask_ascii(first); + if mask_first != 0 { ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src ++ // TODO SAFETY: What about big-endian systems? + offset += mask_first.trailing_zeros() as usize; + } else { + let mask_second = mask_ascii(second); ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src + offset += SIMD_STRIDE_SIZE + mask_second.trailing_zeros() as usize; + } ++ // Safety: We know this is non-ASCII, and can uphold the safety-usable invariant here + let non_ascii = unsafe { *src.add(offset) }; ++ + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE * 2; ++ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride_times_two { + break; + } + } ++ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` + if offset + SIMD_STRIDE_SIZE <= len { +- let simd = unsafe { load16_aligned(src.add(offset)) }; +- let mask = mask_ascii(simd); ++ // Safety: We were valid for this read, and were aligned. ++ let simd = unsafe { load16_aligned(src.add(offset)) }; ++ // Safety: mask_ascii produces a mask of all the high bits. ++ let mask = mask_ascii(simd); + if mask != 0 { ++ // Safety: on little endian systems this will be the number of ascii bytes ++ // before the first non-ascii, i.e. valid for indexing src + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; ++ // Safety: We know this is non-ASCII, and can uphold the safety-usable invariant here + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE; + } + } else { ++ // Safety: this is the unaligned branch + // At most two iterations, so unroll ++ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: We're valid for this read but must use an unaligned read + let simd = unsafe { load16_unaligned(src.add(offset)) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; ++ // Safety-usable invariant upheld here (same as above) + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` + if offset + SIMD_STRIDE_SIZE <= len { ++ // Safety: We're valid for this read but must use an unaligned read + let simd = unsafe { load16_unaligned(src.add(offset)) }; + let mask = mask_ascii(simd); + if mask != 0 { + offset += mask.trailing_zeros() as usize; + let non_ascii = unsafe { *src.add(offset) }; ++ // Safety-usable invariant upheld here (same as above) + return Some((non_ascii, offset)); + } + offset += SIMD_STRIDE_SIZE; + } + } + } + } + while offset < len { ++ // Safety: relies straightforwardly on the `len` invariant + let code_unit = unsafe { *(src.add(offset)) }; + if code_unit > 127 { ++ // Safety-usable invariant upheld here + return Some((code_unit, offset)); + } + offset += 1; + } + None + } + } else { ++ // Safety-usable invariant: returns byte index of first non-ascii byte + #[inline(always)] + fn find_non_ascii(word: usize, second_word: usize) -> Option { + let word_masked = word & ASCII_MASK; + let second_masked = second_word & ASCII_MASK; + if (word_masked | second_masked) == 0 { ++ // Both are ascii, invariant upheld + return None; + } + if word_masked != 0 { + let zeros = count_zeros(word_masked); +- // `zeros` now contains 7 (for the seven bits of non-ASCII) ++ // `zeros` now contains 0 to 7 (for the seven bits of masked ASCII in little endian, ++ // or up to 7 bits of non-ASCII in big endian if the first byte is non-ASCII) + // plus 8 times the number of ASCII in text order before the + // non-ASCII byte in the little-endian case or 8 times the number of ASCII in + // text order before the non-ASCII byte in the big-endian case. + let num_ascii = (zeros >> 3) as usize; ++ // Safety-usable invariant upheld here + return Some(num_ascii); + } + let zeros = count_zeros(second_masked); +- // `zeros` now contains 7 (for the seven bits of non-ASCII) ++ // `zeros` now contains 0 to 7 (for the seven bits of masked ASCII in little endian, ++ // or up to 7 bits of non-ASCII in big endian if the first byte is non-ASCII) + // plus 8 times the number of ASCII in text order before the + // non-ASCII byte in the little-endian case or 8 times the number of ASCII in + // text order before the non-ASCII byte in the big-endian case. + let num_ascii = (zeros >> 3) as usize; ++ // Safety-usable invariant upheld here + Some(ALU_ALIGNMENT + num_ascii) + } + ++ /// Safety: `src` must be valid for the reads of two `usize`s ++ /// ++ /// Safety-usable invariant: will return byte index of first non-ascii byte + #[inline(always)] + unsafe fn validate_ascii_stride(src: *const usize) -> Option { + let word = *src; + let second_word = *(src.add(1)); + find_non_ascii(word, second_word) + } + ++ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being ++ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found + #[cfg_attr(feature = "cargo-clippy", allow(cast_ptr_alignment))] + #[inline(always)] + pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { + let src = slice.as_ptr(); + let len = slice.len(); + let mut offset = 0usize; + let mut until_alignment = (ALU_ALIGNMENT - ((src as usize) & ALU_ALIGNMENT_MASK)) & ALU_ALIGNMENT_MASK; ++ // Safety: If this check fails we're valid to read `until_alignment + ALU_STRIDE_SIZE` elements + if until_alignment + ALU_STRIDE_SIZE <= len { + while until_alignment != 0 { + let code_unit = slice[offset]; + if code_unit > 127 { ++ // Safety-usable invairant upheld here + return Some((code_unit, offset)); + } + offset += 1; + until_alignment -= 1; + } ++ // Safety: At this point we have read until_alignment elements and ++ // are valid for `ALU_STRIDE_SIZE` more. + let len_minus_stride = len - ALU_STRIDE_SIZE; + loop { ++ // Safety: we were valid for this read + let ptr = unsafe { src.add(offset) as *const usize }; + if let Some(num_ascii) = unsafe { validate_ascii_stride(ptr) } { + offset += num_ascii; ++ // Safety-usable invairant upheld here using the invariant from validate_ascii_stride() + return Some((unsafe { *(src.add(offset)) }, offset)); + } + offset += ALU_STRIDE_SIZE; ++ // Safety: This is `offset > ALU_STRIDE_SIZE` which means we always have at least `2 * ALU_STRIDE_SIZE` elements to munch next time. + if offset > len_minus_stride { + break; + } + } + } + while offset < len { + let code_unit = slice[offset]; + if code_unit > 127 { ++ // Safety-usable invairant upheld here + return Some((code_unit, offset)); + } + offset += 1; + } + None + } + + } +@@ -1423,70 +1781,88 @@ cfg_if! { + // vector reads without vector writes. + + pub const ALU_STRIDE_SIZE: usize = 8; + + pub const ALU_ALIGNMENT: usize = 4; + + pub const ALU_ALIGNMENT_MASK: usize = 3; + } else { ++ // Safety: src points to two valid `usize`s, dst points to four valid `usize`s + #[inline(always)] + unsafe fn unpack_latin1_stride_alu(src: *const usize, dst: *mut usize) { ++ // Safety: src safety invariant used here + let word = *src; + let second_word = *(src.add(1)); ++ // Safety: dst safety invariant passed down + unpack_alu(word, second_word, dst); + } + ++ // Safety: src points to four valid `usize`s, dst points to two valid `usize`s + #[inline(always)] + unsafe fn pack_latin1_stride_alu(src: *const usize, dst: *mut usize) { ++ // Safety: src safety invariant used here + let first = *src; + let second = *(src.add(1)); + let third = *(src.add(2)); + let fourth = *(src.add(3)); ++ // Safety: dst safety invariant passed down + pack_alu(first, second, third, fourth, dst); + } + ++ // Safety: src points to two valid `usize`s, dst points to four valid `usize`s + #[inline(always)] + unsafe fn ascii_to_basic_latin_stride_alu(src: *const usize, dst: *mut usize) -> bool { ++ // Safety: src safety invariant used here + let word = *src; + let second_word = *(src.add(1)); + // Check if the words contains non-ASCII + if (word & ASCII_MASK) | (second_word & ASCII_MASK) != 0 { + return false; + } ++ // Safety: dst safety invariant passed down + unpack_alu(word, second_word, dst); + true + } + ++ // Safety: src points four valid `usize`s, dst points to two valid `usize`s + #[inline(always)] + unsafe fn basic_latin_to_ascii_stride_alu(src: *const usize, dst: *mut usize) -> bool { ++ // Safety: src safety invariant used here + let first = *src; + let second = *(src.add(1)); + let third = *(src.add(2)); + let fourth = *(src.add(3)); + if (first & BASIC_LATIN_MASK) | (second & BASIC_LATIN_MASK) | (third & BASIC_LATIN_MASK) | (fourth & BASIC_LATIN_MASK) != 0 { + return false; + } ++ // Safety: dst safety invariant passed down + pack_alu(first, second, third, fourth, dst); + true + } + ++ // Safety: src, dst both point to two valid `usize`s each ++ // Safety-usable invariant: Will return byte index of first non-ascii byte. + #[inline(always)] + unsafe fn ascii_to_ascii_stride(src: *const usize, dst: *mut usize) -> Option { ++ // Safety: src safety invariant used here + let word = *src; + let second_word = *(src.add(1)); ++ // Safety: src safety invariant used here + *dst = word; + *(dst.add(1)) = second_word; ++ // Relies on safety-usable invariant here + find_non_ascii(word, second_word) + } + + basic_latin_alu!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_alu); + basic_latin_alu!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_alu); + latin1_alu!(unpack_latin1, u8, u16, unpack_latin1_stride_alu); + latin1_alu!(pack_latin1, u16, u8, pack_latin1_stride_alu); ++ // Safety invariant upheld: ascii_to_ascii_stride will return byte index of first non-ascii if found + ascii_alu!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride); + } + } + + pub fn ascii_valid_up_to(bytes: &[u8]) -> usize { + match validate_ascii(bytes) { + None => bytes.len(), + Some((_, num_valid)) => num_valid, +diff --git a/third_party/rust/encoding_rs/src/handles.rs b/third_party/rust/encoding_rs/src/handles.rs +--- a/third_party/rust/encoding_rs/src/handles.rs ++++ b/third_party/rust/encoding_rs/src/handles.rs +@@ -29,17 +29,17 @@ use crate::simd_funcs::*; + #[cfg(all( + feature = "simd-accel", + any( + target_feature = "sse2", + all(target_endian = "little", target_arch = "aarch64"), + all(target_endian = "little", target_feature = "neon") + ) + ))] +-use packed_simd::u16x8; ++use core::simd::u16x8; + + use super::DecoderResult; + use super::EncoderResult; + use crate::ascii::*; + use crate::utf_8::convert_utf8_to_utf16_up_to_invalid; + use crate::utf_8::utf8_valid_up_to; + + pub enum Space { +@@ -85,84 +85,100 @@ impl Endian for LittleEndian { + const OPPOSITE_ENDIAN: bool = false; + + #[cfg(target_endian = "big")] + const OPPOSITE_ENDIAN: bool = true; + } + + #[derive(Debug, Copy, Clone)] + struct UnalignedU16Slice { ++ // Safety invariant: ptr must be valid for reading 2*len bytes + ptr: *const u8, + len: usize, + } + + impl UnalignedU16Slice { ++ /// Safety: ptr must be valid for reading 2*len bytes + #[inline(always)] + pub unsafe fn new(ptr: *const u8, len: usize) -> UnalignedU16Slice { ++ // Safety: field invariant passed up to caller here + UnalignedU16Slice { ptr, len } + } + + #[inline(always)] + pub fn trim_last(&mut self) { + assert!(self.len > 0); ++ // Safety: invariant upheld here: a slice is still valid with a shorter len + self.len -= 1; + } + + #[inline(always)] + pub fn at(&self, i: usize) -> u16 { + use core::mem::MaybeUninit; + + assert!(i < self.len); + unsafe { + let mut u: MaybeUninit = MaybeUninit::uninit(); ++ // Safety: i is at most len - 1, which works here + ::core::ptr::copy_nonoverlapping(self.ptr.add(i * 2), u.as_mut_ptr() as *mut u8, 2); ++ // Safety: valid read above lets us do this + u.assume_init() + } + } + + #[cfg(feature = "simd-accel")] + #[inline(always)] + pub fn simd_at(&self, i: usize) -> u16x8 { ++ // Safety: i/len are on the scale of u16s, each one corresponds to 2 u8s + assert!(i + SIMD_STRIDE_SIZE / 2 <= self.len); + let byte_index = i * 2; ++ // Safety: load16_unaligned needs SIMD_STRIDE_SIZE=16 u8 elements to read, ++ // or 16/2 = 8 u16 elements to read. ++ // We have checked that we have at least that many above. ++ + unsafe { to_u16_lanes(load16_unaligned(self.ptr.add(byte_index))) } + } + + #[inline(always)] + pub fn len(&self) -> usize { + self.len + } + + #[inline(always)] + pub fn tail(&self, from: usize) -> UnalignedU16Slice { + // XXX the return value should be restricted not to + // outlive self. + assert!(from <= self.len); ++ // Safety: This upholds the same invariant: `from` is in bounds and we're returning a shorter slice + unsafe { UnalignedU16Slice::new(self.ptr.add(from * 2), self.len - from) } + } + + #[cfg(feature = "simd-accel")] + #[inline(always)] + pub fn copy_bmp_to(&self, other: &mut [u16]) -> Option<(u16, usize)> { + assert!(self.len <= other.len()); + let mut offset = 0; ++ // Safety: SIMD_STRIDE_SIZE is measured in bytes, whereas len is in u16s. We check we can ++ // munch SIMD_STRIDE_SIZE / 2 u16s which means we can write SIMD_STRIDE_SIZE u8s + if SIMD_STRIDE_SIZE / 2 <= self.len { + let len_minus_stride = self.len - SIMD_STRIDE_SIZE / 2; + loop { + let mut simd = self.simd_at(offset); + if E::OPPOSITE_ENDIAN { + simd = simd_byte_swap(simd); + } ++ // Safety: we have enough space on the other side to write this + unsafe { + store8_unaligned(other.as_mut_ptr().add(offset), simd); + } + if contains_surrogates(simd) { + break; + } + offset += SIMD_STRIDE_SIZE / 2; ++ // Safety: This ensures we still have space for writing SIMD_STRIDE_SIZE u8s + if offset > len_minus_stride { + break; + } + } + } + while offset < self.len { + let unit = swap_if_opposite_endian::(self.at(offset)); + other[offset] = unit; +@@ -231,33 +247,37 @@ fn copy_unaligned_basic_latin_to_ascii( + src: UnalignedU16Slice, + dst: &mut [u8], + ) -> CopyAsciiResult { + let len = ::core::cmp::min(src.len(), dst.len()); + let mut offset = 0; ++ // Safety: This check ensures we are able to read/write at least SIMD_STRIDE_SIZE elements + if SIMD_STRIDE_SIZE <= len { + let len_minus_stride = len - SIMD_STRIDE_SIZE; + loop { + let mut first = src.simd_at(offset); + let mut second = src.simd_at(offset + (SIMD_STRIDE_SIZE / 2)); + if E::OPPOSITE_ENDIAN { + first = simd_byte_swap(first); + second = simd_byte_swap(second); + } + if !simd_is_basic_latin(first | second) { + break; + } + let packed = simd_pack(first, second); ++ // Safety: We are able to write SIMD_STRIDE_SIZE elements in this iteration + unsafe { + store16_unaligned(dst.as_mut_ptr().add(offset), packed); + } + offset += SIMD_STRIDE_SIZE; ++ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which ensures that we can write at least SIMD_STRIDE_SIZE elements ++ // in the next iteration + if offset > len_minus_stride { + break; + } + } + } + copy_unaligned_basic_latin_to_ascii_alu::(src.tail(offset), &mut dst[offset..], offset) + } + +@@ -632,94 +652,106 @@ impl<'a> Utf16Destination<'a> { + #[inline(always)] + fn write_astral(&mut self, astral: u32) { + debug_assert!(astral > 0xFFFF); + debug_assert!(astral <= 0x10_FFFF); + self.write_code_unit((0xD7C0 + (astral >> 10)) as u16); + self.write_code_unit((0xDC00 + (astral & 0x3FF)) as u16); + } + #[inline(always)] +- pub fn write_surrogate_pair(&mut self, high: u16, low: u16) { ++ fn write_surrogate_pair(&mut self, high: u16, low: u16) { + self.write_code_unit(high); + self.write_code_unit(low); + } + #[inline(always)] + fn write_big5_combination(&mut self, combined: u16, combining: u16) { + self.write_bmp_excl_ascii(combined); + self.write_bmp_excl_ascii(combining); + } ++ // Safety-usable invariant: CopyAsciiResult::GoOn will only contain bytes >=0x80 + #[inline(always)] + pub fn copy_ascii_from_check_space_bmp<'b>( + &'b mut self, + source: &mut ByteSource, + ) -> CopyAsciiResult<(DecoderResult, usize, usize), (u8, Utf16BmpHandle<'b, 'a>)> { + let non_ascii_ret = { + let src_remaining = &source.slice[source.pos..]; + let dst_remaining = &mut self.slice[self.pos..]; + let (pending, length) = if dst_remaining.len() < src_remaining.len() { + (DecoderResult::OutputFull, dst_remaining.len()) + } else { + (DecoderResult::InputEmpty, src_remaining.len()) + }; ++ // Safety: This function is documented as needing valid pointers for src/dest and len, which ++ // is true since we've passed the minumum length of the two + match unsafe { + ascii_to_basic_latin(src_remaining.as_ptr(), dst_remaining.as_mut_ptr(), length) + } { + None => { + source.pos += length; + self.pos += length; + return CopyAsciiResult::Stop((pending, source.pos, self.pos)); + } ++ // Safety: the function is documented as returning bytes >=0x80 in the Some + Some((non_ascii, consumed)) => { + source.pos += consumed; + self.pos += consumed; + source.pos += 1; // +1 for non_ascii ++ // Safety: non-ascii bubbled out here + non_ascii + } + } + }; ++ // Safety: non-ascii returned here + CopyAsciiResult::GoOn((non_ascii_ret, Utf16BmpHandle::new(self))) + } ++ // Safety-usable invariant: CopyAsciiResult::GoOn will only contain bytes >=0x80 + #[inline(always)] + pub fn copy_ascii_from_check_space_astral<'b>( + &'b mut self, + source: &mut ByteSource, + ) -> CopyAsciiResult<(DecoderResult, usize, usize), (u8, Utf16AstralHandle<'b, 'a>)> { + let non_ascii_ret = { + let dst_len = self.slice.len(); + let src_remaining = &source.slice[source.pos..]; + let dst_remaining = &mut self.slice[self.pos..]; + let (pending, length) = if dst_remaining.len() < src_remaining.len() { + (DecoderResult::OutputFull, dst_remaining.len()) + } else { + (DecoderResult::InputEmpty, src_remaining.len()) + }; ++ // Safety: This function is documented as needing valid pointers for src/dest and len, which ++ // is true since we've passed the minumum length of the two + match unsafe { + ascii_to_basic_latin(src_remaining.as_ptr(), dst_remaining.as_mut_ptr(), length) + } { + None => { + source.pos += length; + self.pos += length; + return CopyAsciiResult::Stop((pending, source.pos, self.pos)); + } ++ // Safety: the function is documented as returning bytes >=0x80 in the Some + Some((non_ascii, consumed)) => { + source.pos += consumed; + self.pos += consumed; + if self.pos + 1 < dst_len { + source.pos += 1; // +1 for non_ascii ++ // Safety: non-ascii bubbled out here + non_ascii + } else { + return CopyAsciiResult::Stop(( + DecoderResult::OutputFull, + source.pos, + self.pos, + )); + } + } + } + }; ++ // Safety: non-ascii returned here + CopyAsciiResult::GoOn((non_ascii_ret, Utf16AstralHandle::new(self))) + } + #[inline(always)] + pub fn copy_utf8_up_to_invalid_from(&mut self, source: &mut ByteSource) { + let src_remaining = &source.slice[source.pos..]; + let dst_remaining = &mut self.slice[self.pos..]; + let (read, written) = convert_utf8_to_utf16_up_to_invalid(src_remaining, dst_remaining); + source.pos += read; +diff --git a/third_party/rust/encoding_rs/src/lib.rs b/third_party/rust/encoding_rs/src/lib.rs +--- a/third_party/rust/encoding_rs/src/lib.rs ++++ b/third_party/rust/encoding_rs/src/lib.rs +@@ -684,37 +684,26 @@ + //! TIS-620windows-874 + //! + //! + //! + //! See the section [_UTF-16LE, UTF-16BE and Unicode Encoding Schemes_](#utf-16le-utf-16be-and-unicode-encoding-schemes) + //! for discussion about the UTF-16 family. + + #![no_std] +-#![cfg_attr(feature = "simd-accel", feature(core_intrinsics))] ++#![cfg_attr(feature = "simd-accel", feature(core_intrinsics, portable_simd))] + + #[cfg(feature = "alloc")] + #[cfg_attr(test, macro_use)] + extern crate alloc; + + extern crate core; + #[macro_use] + extern crate cfg_if; + +-#[cfg(all( +- feature = "simd-accel", +- any( +- target_feature = "sse2", +- all(target_endian = "little", target_arch = "aarch64"), +- all(target_endian = "little", target_feature = "neon") +- ) +-))] +-#[macro_use(shuffle)] +-extern crate packed_simd; +- + #[cfg(feature = "serde")] + extern crate serde; + + #[cfg(all(test, feature = "serde"))] + extern crate bincode; + #[cfg(all(test, feature = "serde"))] + #[macro_use] + extern crate serde_derive; +diff --git a/third_party/rust/encoding_rs/src/mem.rs b/third_party/rust/encoding_rs/src/mem.rs +--- a/third_party/rust/encoding_rs/src/mem.rs ++++ b/third_party/rust/encoding_rs/src/mem.rs +@@ -111,16 +111,21 @@ macro_rules! by_unit_check_alu { + until_alignment -= 1; + } + if accu >= $bound { + return false; + } + } + let len_minus_stride = len - ALU_ALIGNMENT / unit_size; + if offset + (4 * (ALU_ALIGNMENT / unit_size)) <= len { ++ // Safety: the above check lets us perform 4 consecutive reads of ++ // length ALU_ALIGNMENT / unit_size. ALU_ALIGNMENT is the size of usize, and unit_size ++ // is the size of the `src` pointer, so this is equal to performing four usize reads. ++ // ++ // This invariant is upheld on all loop iterations + let len_minus_unroll = len - (4 * (ALU_ALIGNMENT / unit_size)); + loop { + let unroll_accu = unsafe { *(src.add(offset) as *const usize) } + | unsafe { + *(src.add(offset + (ALU_ALIGNMENT / unit_size)) as *const usize) + } + | unsafe { + *(src.add(offset + (2 * (ALU_ALIGNMENT / unit_size))) +@@ -129,22 +134,24 @@ macro_rules! by_unit_check_alu { + | unsafe { + *(src.add(offset + (3 * (ALU_ALIGNMENT / unit_size))) + as *const usize) + }; + if unroll_accu & $mask != 0 { + return false; + } + offset += 4 * (ALU_ALIGNMENT / unit_size); ++ // Safety: this check lets us continue to perform the 4 reads earlier + if offset > len_minus_unroll { + break; + } + } + } + while offset <= len_minus_stride { ++ // Safety: the above check lets us perform one usize read. + accu |= unsafe { *(src.add(offset) as *const usize) }; + offset += ALU_ALIGNMENT / unit_size; + } + } + } + for &unit in &buffer[offset..] { + accu |= unit as usize; + } +@@ -184,16 +191,21 @@ macro_rules! by_unit_check_simd { + until_alignment -= 1; + } + if accu >= $bound { + return false; + } + } + let len_minus_stride = len - SIMD_STRIDE_SIZE / unit_size; + if offset + (4 * (SIMD_STRIDE_SIZE / unit_size)) <= len { ++ // Safety: the above check lets us perform 4 consecutive reads of ++ // length SIMD_STRIDE_SIZE / unit_size. SIMD_STRIDE_SIZE is the size of $simd_ty, and unit_size ++ // is the size of the `src` pointer, so this is equal to performing four $simd_ty reads. ++ // ++ // This invariant is upheld on all loop iterations + let len_minus_unroll = len - (4 * (SIMD_STRIDE_SIZE / unit_size)); + loop { + let unroll_accu = unsafe { *(src.add(offset) as *const $simd_ty) } + | unsafe { + *(src.add(offset + (SIMD_STRIDE_SIZE / unit_size)) + as *const $simd_ty) + } + | unsafe { +@@ -203,23 +215,25 @@ macro_rules! by_unit_check_simd { + | unsafe { + *(src.add(offset + (3 * (SIMD_STRIDE_SIZE / unit_size))) + as *const $simd_ty) + }; + if !$func(unroll_accu) { + return false; + } + offset += 4 * (SIMD_STRIDE_SIZE / unit_size); ++ // Safety: this check lets us continue to perform the 4 reads earlier + if offset > len_minus_unroll { + break; + } + } + } + let mut simd_accu = $splat; + while offset <= len_minus_stride { ++ // Safety: the above check lets us perform one $simd_ty read. + simd_accu = simd_accu | unsafe { *(src.add(offset) as *const $simd_ty) }; + offset += SIMD_STRIDE_SIZE / unit_size; + } + if !$func(simd_accu) { + return false; + } + } + } +@@ -229,18 +243,18 @@ macro_rules! by_unit_check_simd { + accu < $bound + } + }; + } + + cfg_if! { + if #[cfg(all(feature = "simd-accel", any(target_feature = "sse2", all(target_endian = "little", target_arch = "aarch64"), all(target_endian = "little", target_feature = "neon"))))] { + use crate::simd_funcs::*; +- use packed_simd::u8x16; +- use packed_simd::u16x8; ++ use core::simd::u8x16; ++ use core::simd::u16x8; + + const SIMD_ALIGNMENT: usize = 16; + + const SIMD_ALIGNMENT_MASK: usize = 15; + + by_unit_check_simd!(is_ascii_impl, u8, u8x16::splat(0), u8x16, 0x80, simd_is_ascii); + by_unit_check_simd!(is_basic_latin_impl, u16, u16x8::splat(0), u16x8, 0x80, simd_is_basic_latin); + by_unit_check_simd!(is_utf16_latin1_impl, u16, u16x8::splat(0), u16x8, 0x100, simd_is_latin1); +diff --git a/third_party/rust/encoding_rs/src/simd_funcs.rs b/third_party/rust/encoding_rs/src/simd_funcs.rs +--- a/third_party/rust/encoding_rs/src/simd_funcs.rs ++++ b/third_party/rust/encoding_rs/src/simd_funcs.rs +@@ -2,65 +2,84 @@ + // file at the top-level directory of this distribution. + // + // Licensed under the Apache License, Version 2.0 or the MIT license + // , at your + // option. This file may not be copied, modified, or distributed + // except according to those terms. + +-use packed_simd::u16x8; +-use packed_simd::u8x16; +-use packed_simd::IntoBits; ++use any_all_workaround::all_mask16x8; ++use any_all_workaround::all_mask8x16; ++use any_all_workaround::any_mask16x8; ++use any_all_workaround::any_mask8x16; ++use core::simd::cmp::SimdPartialEq; ++use core::simd::cmp::SimdPartialOrd; ++use core::simd::mask16x8; ++use core::simd::mask8x16; ++use core::simd::simd_swizzle; ++use core::simd::u16x8; ++use core::simd::u8x16; ++use core::simd::ToBytes; + + // TODO: Migrate unaligned access to stdlib code if/when the RFC + // https://github.com/rust-lang/rfcs/pull/1725 is implemented. + ++/// Safety invariant: ptr must be valid for an unaligned read of 16 bytes + #[inline(always)] + pub unsafe fn load16_unaligned(ptr: *const u8) -> u8x16 { +- let mut simd = ::core::mem::uninitialized(); +- ::core::ptr::copy_nonoverlapping(ptr, &mut simd as *mut u8x16 as *mut u8, 16); +- simd ++ let mut simd = ::core::mem::MaybeUninit::::uninit(); ++ ::core::ptr::copy_nonoverlapping(ptr, simd.as_mut_ptr() as *mut u8, 16); ++ // Safety: copied 16 bytes of initialized memory into this, it is now initialized ++ simd.assume_init() + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u8x16 read of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn load16_aligned(ptr: *const u8) -> u8x16 { + *(ptr as *const u8x16) + } + ++/// Safety invariant: ptr must be valid for an unaligned store of 16 bytes + #[inline(always)] + pub unsafe fn store16_unaligned(ptr: *mut u8, s: u8x16) { + ::core::ptr::copy_nonoverlapping(&s as *const u8x16 as *const u8, ptr, 16); + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u8x16 store of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn store16_aligned(ptr: *mut u8, s: u8x16) { + *(ptr as *mut u8x16) = s; + } + ++/// Safety invariant: ptr must be valid for an unaligned read of 16 bytes + #[inline(always)] + pub unsafe fn load8_unaligned(ptr: *const u16) -> u16x8 { +- let mut simd = ::core::mem::uninitialized(); +- ::core::ptr::copy_nonoverlapping(ptr as *const u8, &mut simd as *mut u16x8 as *mut u8, 16); +- simd ++ let mut simd = ::core::mem::MaybeUninit::::uninit(); ++ ::core::ptr::copy_nonoverlapping(ptr as *const u8, simd.as_mut_ptr() as *mut u8, 16); ++ // Safety: copied 16 bytes of initialized memory into this, it is now initialized ++ simd.assume_init() + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u16x8 read of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn load8_aligned(ptr: *const u16) -> u16x8 { + *(ptr as *const u16x8) + } + ++/// Safety invariant: ptr must be valid for an unaligned store of 16 bytes + #[inline(always)] + pub unsafe fn store8_unaligned(ptr: *mut u16, s: u16x8) { + ::core::ptr::copy_nonoverlapping(&s as *const u16x8 as *const u8, ptr as *mut u8, 16); + } + ++/// Safety invariant: ptr must be valid for an aligned-for-u16x8 store of 16 bytes + #[allow(dead_code)] + #[inline(always)] + pub unsafe fn store8_aligned(ptr: *mut u16, s: u16x8) { + *(ptr as *mut u16x8) = s; + } + + cfg_if! { + if #[cfg(all(target_feature = "sse2", target_arch = "x86_64"))] { +@@ -95,234 +114,241 @@ cfg_if! { + pub fn simd_byte_swap(s: u16x8) -> u16x8 { + let left = s << 8; + let right = s >> 8; + left | right + } + + #[inline(always)] + pub fn to_u16_lanes(s: u8x16) -> u16x8 { +- s.into_bits() ++ u16x8::from_ne_bytes(s) + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + + // Expose low-level mask instead of higher-level conclusion, + // because the non-ASCII case would perform less well otherwise. ++ // Safety-usable invariant: This returned value is whether each high bit is set + #[inline(always)] + pub fn mask_ascii(s: u8x16) -> i32 { + unsafe { +- _mm_movemask_epi8(s.into_bits()) ++ _mm_movemask_epi8(s.into()) + } + } + + } else { + + } + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + #[inline(always)] + pub fn simd_is_ascii(s: u8x16) -> bool { + unsafe { +- _mm_movemask_epi8(s.into_bits()) == 0 ++ // Safety: We have cfg()d the correct platform ++ _mm_movemask_epi8(s.into()) == 0 + } + } + } else if #[cfg(target_arch = "aarch64")]{ + #[inline(always)] + pub fn simd_is_ascii(s: u8x16) -> bool { + unsafe { +- vmaxvq_u8(s.into_bits()) < 0x80 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u8(s.into()) < 0x80 + } + } + } else { + #[inline(always)] + pub fn simd_is_ascii(s: u8x16) -> bool { + // This optimizes better on ARM than + // the lt formulation. + let highest_ascii = u8x16::splat(0x7F); +- !s.gt(highest_ascii).any() ++ !any_mask8x16(s.simd_gt(highest_ascii)) + } + } + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + #[inline(always)] + pub fn simd_is_str_latin1(s: u8x16) -> bool { + if simd_is_ascii(s) { + return true; + } + let above_str_latin1 = u8x16::splat(0xC4); +- s.lt(above_str_latin1).all() ++ s.simd_lt(above_str_latin1).all() + } + } else if #[cfg(target_arch = "aarch64")]{ + #[inline(always)] + pub fn simd_is_str_latin1(s: u8x16) -> bool { + unsafe { +- vmaxvq_u8(s.into_bits()) < 0xC4 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u8(s.into()) < 0xC4 + } + } + } else { + #[inline(always)] + pub fn simd_is_str_latin1(s: u8x16) -> bool { + let above_str_latin1 = u8x16::splat(0xC4); +- s.lt(above_str_latin1).all() ++ all_mask8x16(s.simd_lt(above_str_latin1)) + } + } + } + + cfg_if! { + if #[cfg(target_arch = "aarch64")]{ + #[inline(always)] + pub fn simd_is_basic_latin(s: u16x8) -> bool { + unsafe { +- vmaxvq_u16(s.into_bits()) < 0x80 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u16(s.into()) < 0x80 + } + } + + #[inline(always)] + pub fn simd_is_latin1(s: u16x8) -> bool { + unsafe { +- vmaxvq_u16(s.into_bits()) < 0x100 ++ // Safety: We have cfg()d the correct platform ++ vmaxvq_u16(s.into()) < 0x100 + } + } + } else { + #[inline(always)] + pub fn simd_is_basic_latin(s: u16x8) -> bool { + let above_ascii = u16x8::splat(0x80); +- s.lt(above_ascii).all() ++ all_mask16x8(s.simd_lt(above_ascii)) + } + + #[inline(always)] + pub fn simd_is_latin1(s: u16x8) -> bool { + // For some reason, on SSE2 this formulation + // seems faster in this case while the above + // function is better the other way round... + let highest_latin1 = u16x8::splat(0xFF); +- !s.gt(highest_latin1).any() ++ !any_mask16x8(s.simd_gt(highest_latin1)) + } + } + } + + #[inline(always)] + pub fn contains_surrogates(s: u16x8) -> bool { + let mask = u16x8::splat(0xF800); + let surrogate_bits = u16x8::splat(0xD800); +- (s & mask).eq(surrogate_bits).any() ++ any_mask16x8((s & mask).simd_eq(surrogate_bits)) + } + + cfg_if! { + if #[cfg(target_arch = "aarch64")]{ + macro_rules! aarch64_return_false_if_below_hebrew { + ($s:ident) => ({ + unsafe { +- if vmaxvq_u16($s.into_bits()) < 0x0590 { ++ // Safety: We have cfg()d the correct platform ++ if vmaxvq_u16($s.into()) < 0x0590 { + return false; + } + } + }) + } + + macro_rules! non_aarch64_return_false_if_all { + ($s:ident) => () + } + } else { + macro_rules! aarch64_return_false_if_below_hebrew { + ($s:ident) => () + } + + macro_rules! non_aarch64_return_false_if_all { + ($s:ident) => ({ +- if $s.all() { ++ if all_mask16x8($s) { + return false; + } + }) + } + } + } + + macro_rules! in_range16x8 { + ($s:ident, $start:expr, $end:expr) => {{ + // SIMD sub is wrapping +- ($s - u16x8::splat($start)).lt(u16x8::splat($end - $start)) ++ ($s - u16x8::splat($start)).simd_lt(u16x8::splat($end - $start)) + }}; + } + + #[inline(always)] + pub fn is_u16x8_bidi(s: u16x8) -> bool { + // We try to first quickly refute the RTLness of the vector. If that + // fails, we do the real RTL check, so in that case we end up wasting + // the work for the up-front quick checks. Even the quick-check is + // two-fold in order to return `false` ASAP if everything is below + // Hebrew. + + aarch64_return_false_if_below_hebrew!(s); + +- let below_hebrew = s.lt(u16x8::splat(0x0590)); ++ let below_hebrew = s.simd_lt(u16x8::splat(0x0590)); + + non_aarch64_return_false_if_all!(below_hebrew); + +- if (below_hebrew | in_range16x8!(s, 0x0900, 0x200F) | in_range16x8!(s, 0x2068, 0xD802)).all() { ++ if all_mask16x8( ++ below_hebrew | in_range16x8!(s, 0x0900, 0x200F) | in_range16x8!(s, 0x2068, 0xD802), ++ ) { + return false; + } + + // Quick refutation failed. Let's do the full check. + +- (in_range16x8!(s, 0x0590, 0x0900) +- | in_range16x8!(s, 0xFB1D, 0xFE00) +- | in_range16x8!(s, 0xFE70, 0xFEFF) +- | in_range16x8!(s, 0xD802, 0xD804) +- | in_range16x8!(s, 0xD83A, 0xD83C) +- | s.eq(u16x8::splat(0x200F)) +- | s.eq(u16x8::splat(0x202B)) +- | s.eq(u16x8::splat(0x202E)) +- | s.eq(u16x8::splat(0x2067))) +- .any() ++ any_mask16x8( ++ (in_range16x8!(s, 0x0590, 0x0900) ++ | in_range16x8!(s, 0xFB1D, 0xFE00) ++ | in_range16x8!(s, 0xFE70, 0xFEFF) ++ | in_range16x8!(s, 0xD802, 0xD804) ++ | in_range16x8!(s, 0xD83A, 0xD83C) ++ | s.simd_eq(u16x8::splat(0x200F)) ++ | s.simd_eq(u16x8::splat(0x202B)) ++ | s.simd_eq(u16x8::splat(0x202E)) ++ | s.simd_eq(u16x8::splat(0x2067))), ++ ) + } + + #[inline(always)] + pub fn simd_unpack(s: u8x16) -> (u16x8, u16x8) { +- unsafe { +- let first: u8x16 = shuffle!( +- s, +- u8x16::splat(0), +- [0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23] +- ); +- let second: u8x16 = shuffle!( +- s, +- u8x16::splat(0), +- [8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31] +- ); +- (first.into_bits(), second.into_bits()) +- } ++ let first: u8x16 = simd_swizzle!( ++ s, ++ u8x16::splat(0), ++ [0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23] ++ ); ++ let second: u8x16 = simd_swizzle!( ++ s, ++ u8x16::splat(0), ++ [8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31] ++ ); ++ (u16x8::from_ne_bytes(first), u16x8::from_ne_bytes(second)) + } + + cfg_if! { + if #[cfg(target_feature = "sse2")] { + #[inline(always)] + pub fn simd_pack(a: u16x8, b: u16x8) -> u8x16 { + unsafe { +- _mm_packus_epi16(a.into_bits(), b.into_bits()).into_bits() ++ // Safety: We have cfg()d the correct platform ++ _mm_packus_epi16(a.into(), b.into()).into() + } + } + } else { + #[inline(always)] + pub fn simd_pack(a: u16x8, b: u16x8) -> u8x16 { +- unsafe { +- let first: u8x16 = a.into_bits(); +- let second: u8x16 = b.into_bits(); +- shuffle!( +- first, +- second, +- [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] +- ) +- } ++ let first: u8x16 = a.to_ne_bytes(); ++ let second: u8x16 = b.to_ne_bytes(); ++ simd_swizzle!( ++ first, ++ second, ++ [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] ++ ) + } + } + } + + #[cfg(test)] + mod tests { + use super::*; + use alloc::vec::Vec; +diff --git a/third_party/rust/encoding_rs/src/single_byte.rs b/third_party/rust/encoding_rs/src/single_byte.rs +--- a/third_party/rust/encoding_rs/src/single_byte.rs ++++ b/third_party/rust/encoding_rs/src/single_byte.rs +@@ -48,16 +48,19 @@ impl SingleByteDecoder { + CopyAsciiResult::GoOn((mut non_ascii, mut handle)) => 'middle: loop { + // Start non-boilerplate + // + // Since the non-ASCIIness of `non_ascii` is hidden from + // the optimizer, it can't figure out that it's OK to + // statically omit the bound check when accessing + // `[u16; 128]` with an index + // `non_ascii as usize - 0x80usize`. ++ // ++ // Safety: `non_ascii` is a u8 byte >=0x80, from the invariants ++ // on Utf8Destination::copy_ascii_from_check_space_bmp() + let mapped = + unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; + // let mapped = self.table[non_ascii as usize - 0x80usize]; + if mapped == 0u16 { + return ( + DecoderResult::Malformed(1, 0), + source.consumed(), + handle.written(), +@@ -146,82 +149,103 @@ impl SingleByteDecoder { + dst: &mut [u16], + _last: bool, + ) -> (DecoderResult, usize, usize) { + let (pending, length) = if dst.len() < src.len() { + (DecoderResult::OutputFull, dst.len()) + } else { + (DecoderResult::InputEmpty, src.len()) + }; ++ // Safety invariant: converted <= length. Quite often we have `converted < length` ++ // which will be separately marked. + let mut converted = 0usize; + 'outermost: loop { + match unsafe { ++ // Safety: length is the minimum length, `src/dst + x` will always be valid for reads/writes of `len - x` + ascii_to_basic_latin( + src.as_ptr().add(converted), + dst.as_mut_ptr().add(converted), + length - converted, + ) + } { + None => { + return (pending, length, length); + } + Some((mut non_ascii, consumed)) => { ++ // Safety invariant: `converted <= length` upheld, since this can only consume ++ // up to `length - converted` bytes. ++ // ++ // Furthermore, in this context, ++ // we can assume `converted < length` since this branch is only ever hit when ++ // ascii_to_basic_latin fails to consume the entire slice + converted += consumed; + 'middle: loop { + // `converted` doesn't count the reading of `non_ascii` yet. + // Since the non-ASCIIness of `non_ascii` is hidden from + // the optimizer, it can't figure out that it's OK to + // statically omit the bound check when accessing + // `[u16; 128]` with an index + // `non_ascii as usize - 0x80usize`. ++ // ++ // Safety: We can rely on `non_ascii` being between `0x80` and `0xFF` due to ++ // the invariants of `ascii_to_basic_latin()`, and our table has enough space for that. + let mapped = + unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; + // let mapped = self.table[non_ascii as usize - 0x80usize]; + if mapped == 0u16 { + return ( + DecoderResult::Malformed(1, 0), + converted + 1, // +1 `for non_ascii` + converted, + ); + } + unsafe { +- // The bound check has already been performed ++ // Safety: As mentioned above, `converted < length` + *(dst.get_unchecked_mut(converted)) = mapped; + } ++ // Safety: `converted <= length` upheld, since `converted < length` before this + converted += 1; + // Next, handle ASCII punctuation and non-ASCII without + // going back to ASCII acceleration. Non-ASCII scripts + // use ASCII punctuation, so this avoid going to + // acceleration just for punctuation/space and then + // failing. This is a significant boost to non-ASCII + // scripts. + // TODO: Split out Latin converters without this part + // this stuff makes Latin script-conversion slower. + if converted == length { + return (pending, length, length); + } ++ // Safety: We are back to `converted < length` because of the == above ++ // and can perform this check. + let mut b = unsafe { *(src.get_unchecked(converted)) }; ++ // Safety: `converted < length` is upheld for this loop + 'innermost: loop { + if b > 127 { + non_ascii = b; + continue 'middle; + } + // Testing on Haswell says that we should write the + // byte unconditionally instead of trying to unread it + // to make it part of the next SIMD stride. + unsafe { ++ // Safety: `converted < length` is true for this loop + *(dst.get_unchecked_mut(converted)) = u16::from(b); + } ++ // Safety: We are now at `converted <= length`. We should *not* `continue` ++ // the loop without reverifying + converted += 1; + if b < 60 { + // We've got punctuation + if converted == length { + return (pending, length, length); + } ++ // Safety: we're back to `converted <= length` because of the == above + b = unsafe { *(src.get_unchecked(converted)) }; ++ // Safety: The loop continues as `converted < length` + continue 'innermost; + } + // We've got markup or ASCII text + continue 'outermost; + } + } + } + } +@@ -229,16 +253,18 @@ impl SingleByteDecoder { + } + + pub fn latin1_byte_compatible_up_to(&self, buffer: &[u8]) -> usize { + let mut bytes = buffer; + let mut total = 0; + loop { + if let Some((non_ascii, offset)) = validate_ascii(bytes) { + total += offset; ++ // Safety: We can rely on `non_ascii` being between `0x80` and `0xFF` due to ++ // the invariants of `ascii_to_basic_latin()`, and our table has enough space for that. + let mapped = unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; + if mapped != u16::from(non_ascii) { + return total; + } + total += 1; + bytes = &bytes[offset + 1..]; + } else { + return total; +@@ -379,64 +405,89 @@ impl SingleByteEncoder { + dst: &mut [u8], + _last: bool, + ) -> (EncoderResult, usize, usize) { + let (pending, length) = if dst.len() < src.len() { + (EncoderResult::OutputFull, dst.len()) + } else { + (EncoderResult::InputEmpty, src.len()) + }; ++ // Safety invariant: converted <= length. Quite often we have `converted < length` ++ // which will be separately marked. + let mut converted = 0usize; + 'outermost: loop { + match unsafe { ++ // Safety: length is the minimum length, `src/dst + x` will always be valid for reads/writes of `len - x` + basic_latin_to_ascii( + src.as_ptr().add(converted), + dst.as_mut_ptr().add(converted), + length - converted, + ) + } { + None => { + return (pending, length, length); + } + Some((mut non_ascii, consumed)) => { ++ // Safety invariant: `converted <= length` upheld, since this can only consume ++ // up to `length - converted` bytes. ++ // ++ // Furthermore, in this context, ++ // we can assume `converted < length` since this branch is only ever hit when ++ // ascii_to_basic_latin fails to consume the entire slice + converted += consumed; + 'middle: loop { + // `converted` doesn't count the reading of `non_ascii` yet. + match self.encode_u16(non_ascii) { + Some(byte) => { + unsafe { ++ // Safety: we're allowed this access since `converted < length` + *(dst.get_unchecked_mut(converted)) = byte; + } + converted += 1; ++ // `converted <= length` now + } + None => { + // At this point, we need to know if we + // have a surrogate. + let high_bits = non_ascii & 0xFC00u16; + if high_bits == 0xD800u16 { + // high surrogate + if converted + 1 == length { + // End of buffer. This surrogate is unpaired. + return ( + EncoderResult::Unmappable('\u{FFFD}'), + converted + 1, // +1 `for non_ascii` + converted, + ); + } ++ // Safety: convered < length from outside the match, and `converted + 1 != length`, ++ // So `converted + 1 < length` as well. We're in bounds + let second = + u32::from(unsafe { *src.get_unchecked(converted + 1) }); + if second & 0xFC00u32 != 0xDC00u32 { + return ( + EncoderResult::Unmappable('\u{FFFD}'), + converted + 1, // +1 `for non_ascii` + converted, + ); + } + // The next code unit is a low surrogate. + let astral: char = unsafe { ++ // Safety: We can rely on non_ascii being 0xD800-0xDBFF since the high bits are 0xD800 ++ // Then, (non_ascii << 10 - 0xD800 << 10) becomes between (0 to 0x3FF) << 10, which is between ++ // 0x400 to 0xffc00. Adding the 0x10000 gives a range of 0x10400 to 0x10fc00. Subtracting the 0xDC00 ++ // gives 0x2800 to 0x102000 ++ // The second term is between 0xDC00 and 0xDFFF from the check above. This gives a maximum ++ // possible range of (0x10400 + 0xDC00) to (0x102000 + 0xDFFF) which is 0x1E000 to 0x10ffff. ++ // This is in range. ++ // ++ // From a Unicode principles perspective this can also be verified as we have checked that `non_ascii` is a high surrogate ++ // (0xD800..=0xDBFF), and that `second` is a low surrogate (`0xDC00..=0xDFFF`), and we are applying reverse of the UTC16 transformation ++ // algorithm , by applying the high surrogate - 0xD800 to the ++ // high ten bits, and the low surrogate - 0xDc00 to the low ten bits, and then adding 0x10000 + ::core::char::from_u32_unchecked( + (u32::from(non_ascii) << 10) + second + - (((0xD800u32 << 10) - 0x1_0000u32) + 0xDC00u32), + ) + }; + return ( + EncoderResult::Unmappable(astral), + converted + 2, // +2 `for non_ascii` and `second` +@@ -451,52 +502,63 @@ impl SingleByteEncoder { + converted, + ); + } + return ( + EncoderResult::unmappable_from_bmp(non_ascii), + converted + 1, // +1 `for non_ascii` + converted, + ); ++ // Safety: This branch diverges, so no need to uphold invariants on `converted` + } + } + // Next, handle ASCII punctuation and non-ASCII without + // going back to ASCII acceleration. Non-ASCII scripts + // use ASCII punctuation, so this avoid going to + // acceleration just for punctuation/space and then + // failing. This is a significant boost to non-ASCII + // scripts. + // TODO: Split out Latin converters without this part + // this stuff makes Latin script-conversion slower. + if converted == length { + return (pending, length, length); + } ++ // Safety: we're back to `converted < length` due to the == above and can perform ++ // the unchecked read + let mut unit = unsafe { *(src.get_unchecked(converted)) }; + 'innermost: loop { ++ // Safety: This loop always begins with `converted < length`, see ++ // the invariant outside and the comment on the continue below + if unit > 127 { + non_ascii = unit; + continue 'middle; + } + // Testing on Haswell says that we should write the + // byte unconditionally instead of trying to unread it + // to make it part of the next SIMD stride. + unsafe { ++ // Safety: Can rely on converted < length + *(dst.get_unchecked_mut(converted)) = unit as u8; + } + converted += 1; ++ // `converted <= length` here + if unit < 60 { + // We've got punctuation + if converted == length { + return (pending, length, length); + } ++ // Safety: `converted < length` due to the == above. The read is safe. + unit = unsafe { *(src.get_unchecked(converted)) }; ++ // Safety: This only happens if `converted < length`, maintaining it + continue 'innermost; + } + // We've got markup or ASCII text + continue 'outermost; ++ // Safety: All other routes to here diverge so the continue is the only ++ // way to run the innermost loop. + } + } + } + } + } + } + } + +diff --git a/third_party/rust/encoding_rs/src/x_user_defined.rs b/third_party/rust/encoding_rs/src/x_user_defined.rs +--- a/third_party/rust/encoding_rs/src/x_user_defined.rs ++++ b/third_party/rust/encoding_rs/src/x_user_defined.rs +@@ -9,22 +9,23 @@ + + use super::*; + use crate::handles::*; + use crate::variant::*; + + cfg_if! { + if #[cfg(feature = "simd-accel")] { + use simd_funcs::*; +- use packed_simd::u16x8; ++ use core::simd::u16x8; ++ use core::simd::cmp::SimdPartialOrd; + + #[inline(always)] + fn shift_upper(unpacked: u16x8) -> u16x8 { + let highest_ascii = u16x8::splat(0x7F); +- unpacked + unpacked.gt(highest_ascii).select(u16x8::splat(0xF700), u16x8::splat(0)) } ++ unpacked + unpacked.simd_gt(highest_ascii).select(u16x8::splat(0xF700), u16x8::splat(0)) } + } else { + } + } + + pub struct UserDefinedDecoder; + + impl UserDefinedDecoder { + pub fn new() -> VariantDecoder { +@@ -111,20 +112,25 @@ impl UserDefinedDecoder { + } else { + (DecoderResult::InputEmpty, src.len()) + }; + // Not bothering with alignment + let tail_start = length & !0xF; + let simd_iterations = length >> 4; + let src_ptr = src.as_ptr(); + let dst_ptr = dst.as_mut_ptr(); ++ // Safety: This is `for i in 0..length / 16` + for i in 0..simd_iterations { ++ // Safety: This is in bounds: length is the minumum valid length for both src/dst ++ // and i ranges to length/16, so multiplying by 16 will always be `< length` and can do ++ // a 16 byte read + let input = unsafe { load16_unaligned(src_ptr.add(i * 16)) }; + let (first, second) = simd_unpack(input); + unsafe { ++ // Safety: same as above, but this is two consecutive 8-byte reads + store8_unaligned(dst_ptr.add(i * 16), shift_upper(first)); + store8_unaligned(dst_ptr.add((i * 16) + 8), shift_upper(second)); + } + } + let src_tail = &src[tail_start..length]; + let dst_tail = &mut dst[tail_start..length]; + src_tail + .iter() diff --git a/user/zotero/zotero_drop-jazzer.patch b/user/zotero/zotero_drop-jazzer.patch new file mode 100644 index 0000000..fad79fa --- /dev/null +++ b/user/zotero/zotero_drop-jazzer.patch @@ -0,0 +1,12 @@ +diff --git a/zotero/pdf-worker/pdf.js/package.json.orig b/zotero/pdf-worker/pdf.js/package.json +index c76c824..c3658db 100644 +--- a/zotero/pdf-worker/pdf.js/package.json.orig ++++ b/zotero/pdf-worker/pdf.js/package.json +@@ -7,7 +7,6 @@ + "@babel/runtime": "^7.24.7", + "@fluent/bundle": "^0.18.0", + "@fluent/dom": "^0.9.0", +- "@jazzer.js/core": "^2.1.0", + "@metalsmith/layouts": "^2.7.0", + "@metalsmith/markdown": "^1.10.0", + "autoprefixer": "^10.4.19", diff --git a/user/zotero/zotero_drop-phantomjs.patch b/user/zotero/zotero_drop-phantomjs.patch deleted file mode 100644 index 7d54ebc..0000000 --- a/user/zotero/zotero_drop-phantomjs.patch +++ /dev/null @@ -1,134 +0,0 @@ -diff --git a/zotero/reader/package-lock.json.orig b/zotero/reader/package-lock.json -index e3a638f..0800781 100644 ---- a/zotero/reader/package-lock.json.orig -+++ b/zotero/reader/package-lock.json -@@ -84,7 +84,6 @@ - "karma-chrome-launcher": "^3.1.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", -- "karma-phantomjs-launcher": "^1.0.4", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", - "mocha": "^7.2.0", -@@ -12342,20 +12341,6 @@ - "node": ">=4" - } - }, -- "node_modules/karma-phantomjs-launcher": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", -- "integrity": "sha512-tf4P3plsE7wb5Pqh8GJ6RnElxfI/UM4MtVnjbSIZFpdFJlKnjRzfIx8MLCcSYJBwZ1+qSKFz4uBe3XNoq2t3KA==", -- "deprecated": "PhantomJS development have stopped, use puppeteer or similar", -- "dev": true, -- "dependencies": { -- "lodash": "^4.0.1", -- "phantomjs-prebuilt": "^2.1.7" -- }, -- "peerDependencies": { -- "karma": ">=0.9" -- } -- }, - "node_modules/karma-sourcemap-loader": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", -@@ -15340,40 +15325,6 @@ - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, -- "node_modules/phantomjs-prebuilt": { -- "version": "2.1.16", -- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", -- "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", -- "deprecated": "this package is now deprecated", -- "dev": true, -- "hasInstallScript": true, -- "dependencies": { -- "es6-promise": "^4.0.3", -- "extract-zip": "^1.6.5", -- "fs-extra": "^1.0.0", -- "hasha": "^2.2.0", -- "kew": "^0.7.0", -- "progress": "^1.1.8", -- "request": "^2.81.0", -- "request-progress": "^2.0.1", -- "which": "^1.2.10" -- }, -- "bin": { -- "phantomjs": "bin/phantomjs" -- } -- }, -- "node_modules/phantomjs-prebuilt/node_modules/which": { -- "version": "1.3.1", -- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", -- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", -- "dev": true, -- "dependencies": { -- "isexe": "^2.0.0" -- }, -- "bin": { -- "which": "bin/which" -- } -- }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", -@@ -27192,7 +27143,6 @@ - "karma-chrome-launcher": "^3.1.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", -- "karma-phantomjs-launcher": "^1.0.4", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", - "mocha": "^7.2.0", -@@ -30512,16 +30462,6 @@ - } - } - }, -- "karma-phantomjs-launcher": { -- "version": "1.0.4", -- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz", -- "integrity": "sha512-tf4P3plsE7wb5Pqh8GJ6RnElxfI/UM4MtVnjbSIZFpdFJlKnjRzfIx8MLCcSYJBwZ1+qSKFz4uBe3XNoq2t3KA==", -- "dev": true, -- "requires": { -- "lodash": "^4.0.1", -- "phantomjs-prebuilt": "^2.1.7" -- } -- }, - "karma-sourcemap-loader": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz", -@@ -32687,34 +32627,6 @@ - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, -- "phantomjs-prebuilt": { -- "version": "2.1.16", -- "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", -- "integrity": "sha512-PIiRzBhW85xco2fuj41FmsyuYHKjKuXWmhjy3A/Y+CMpN/63TV+s9uzfVhsUwFe0G77xWtHBG8xmXf5BqEUEuQ==", -- "dev": true, -- "requires": { -- "es6-promise": "^4.0.3", -- "extract-zip": "^1.6.5", -- "fs-extra": "^1.0.0", -- "hasha": "^2.2.0", -- "kew": "^0.7.0", -- "progress": "^1.1.8", -- "request": "^2.81.0", -- "request-progress": "^2.0.1", -- "which": "^1.2.10" -- }, -- "dependencies": { -- "which": { -- "version": "1.3.1", -- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", -- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", -- "dev": true, -- "requires": { -- "isexe": "^2.0.0" -- } -- } -- } -- }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", From ad7d9444cc8b3785577bd96f1efdb85825c6e62e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 7 Aug 2024 15:34:26 -0400 Subject: [PATCH 383/738] backports/looking-glass: upgrade to 7b_git20240607 --- backports/looking-glass/APKBUILD | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/backports/looking-glass/APKBUILD b/backports/looking-glass/APKBUILD index 73f00bb..fc66935 100644 --- a/backports/looking-glass/APKBUILD +++ b/backports/looking-glass/APKBUILD @@ -2,9 +2,9 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Rogério da Silva Yokomizo pkgname=looking-glass -_pkgver=B6 -pkgver=6b -pkgrel=3 +_gittag=b7_git20240607 +pkgver=7b_git20240607 +pkgrel=0 pkgdesc="Allows the use of a KVM configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse" url="https://looking-glass.io/" arch="x86_64" @@ -30,15 +30,13 @@ makedepends=" wayland-dev wayland-protocols " -source="$pkgname-$_pkgver.tar.gz::https://looking-glass.io/artifact/$_pkgver/source +source="$pkgname-$_gittag.tar.gz::https://lab.ilot.io/mirrors/looking-glass/-/releases/$_gittag/downloads/tarball/looking-glass-$_gittag.tar.gz missing-includes.patch obs-plugins-lib.patch werror.patch - module_1075-fix-build-linux64.patch - module_1124-fix-build-linux610.patch " subpackages="$pkgname-obs $pkgname-module" -builddir="$srcdir/$pkgname-$_pkgver" +builddir="$srcdir/$pkgname-$_gittag" options="!check" # There are no tests nor --version. build() { @@ -72,7 +70,7 @@ module() { cat ->> "$subpkgdir"/usr/src/looking-glass/AKMBUILD < Date: Fri, 2 Aug 2024 12:11:41 -0400 Subject: [PATCH 384/738] user/forgejo-aneksajo: new aport --- user/forgejo-aneksajo/APKBUILD | 112 ++++++++++++++++++ user/forgejo-aneksajo/forgejo-aneksajo.ini | 26 ++++ user/forgejo-aneksajo/forgejo-aneksajo.initd | 15 +++ .../forgejo-aneksajo.pre-install | 7 ++ 4 files changed, 160 insertions(+) create mode 100644 user/forgejo-aneksajo/APKBUILD create mode 100644 user/forgejo-aneksajo/forgejo-aneksajo.ini create mode 100644 user/forgejo-aneksajo/forgejo-aneksajo.initd create mode 100644 user/forgejo-aneksajo/forgejo-aneksajo.pre-install diff --git a/user/forgejo-aneksajo/APKBUILD b/user/forgejo-aneksajo/APKBUILD new file mode 100644 index 0000000..32a5f57 --- /dev/null +++ b/user/forgejo-aneksajo/APKBUILD @@ -0,0 +1,112 @@ +# Contributor: Carlo Landmeter +# Contributor: 6543 <6543@obermui.de> +# Contributor: techknowlogick +# Contributor: Patrycja Rosa +# Maintainer: Antoine Martin (ayakael) +pkgname=forgejo-aneksajo +pkgver=8.0.0 +_gittag=v$pkgver-git-annex0 +pkgrel=0 +pkgdesc="Self-hosted Git service written in Go with git-annex support" +url="https://forgejo.org" +# riscv64: builds fail https://codeberg.org/forgejo/forgejo/issues/3025 +arch="all !riscv64" +license="MIT" +depends="git git-lfs gnupg" +makedepends="go nodejs npm" +checkdepends="bash openssh openssh-keygen sqlite tzdata" +install="$pkgname.pre-install" +pkgusers="forgejo" +pkggroups="www-data" +subpackages="$pkgname-openrc" +source="$pkgname-$_gittag.tar.gz::https://codeberg.org/matrss/forgejo-aneksajo/archive/$_gittag.tar.gz + $pkgname.initd + $pkgname.ini + " +builddir="$srcdir/forgejo-aneksajo" +options="!check net chmod-clean" # broken with GIT_CEILING + +# secfixes: +# 7.0.4-r0: +# - CVE-2024-24789 +# 7.0.3-r0: +# - CVE-2024-24788 +# 1.21.10.0-r0: +# - CVE-2023-45288 +# 1.21.3.0-r0: +# - CVE-2023-48795 + +export GOCACHE="${GOCACHE:-"$srcdir/go-cache"}" +export GOTMPDIR="${GOTMPDIR:-"$srcdir"}" +export GOMODCACHE="${GOMODCACHE:-"$srcdir/go"}" + +# Skip tests for archs that fail unrelated in CI +case "$CARCH" in +s390x|x86|armhf|armv7) options="$options !check" ;; +esac + +prepare() { + default_prepare + + npm ci +} + +build() { + # XXX: LARGEFILE64 + export CGO_CFLAGS="$CFLAGS -O2 -D_LARGEFILE64_SOURCE" + export TAGS="bindata sqlite sqlite_unlock_notify" + export GITEA_VERSION="$pkgver" + export EXTRA_GOFLAGS="$GOFLAGS" + export CGO_LDFLAGS="$LDFLAGS" + unset LDFLAGS + ## make FHS compliant + local setting="code.gitea.io/gitea/modules/setting" + export LDFLAGS="$LDFLAGS -X $setting.CustomConf=/etc/forgejo/app.ini" + export LDFLAGS="$LDFLAGS -X $setting.AppWorkPath=/var/lib/forgejo/" + + make -j1 build +} + +check() { + local home="$srcdir"/home + mkdir -p "$home" + install -d -m700 "$home"/.ssh + touch "$home"/.gitconfig + + env GITEA_ROOT="$home" HOME="$home" GITEA_WORK_DIR="$(pwd)" timeout -s ABRT 20m make -j1 test-sqlite + ## "make test" - modified (exclude broken tests) + ## 'code.gitea.io/gitea/modules/migrations': github hase rate limits! 403 API + local tests=$(go list ./... | grep -v /vendor/ | + grep -v 'code.gitea.io/gitea/modules/migrations' | + grep -v 'code.gitea.io/gitea/modules/charset' | + grep -v 'code.gitea.io/gitea/models/migrations' | + grep -v 'code.gitea.io/gitea/services/migrations' | + grep -v 'code.gitea.io/gitea/integrations') + env GITEA_CONF="$PWD/tests/sqlite.ini" GITEA_ROOT="$home" HOME="$home" GO111MODULE=on go test -mod=vendor -tags='sqlite sqlite_unlock_notify' $tests + +} + +package() { + for dir in $pkgname $pkgname/git $pkgname/data $pkgname/db $pkgname/custom; do + install -dm750 -o forgejo -g www-data \ + "$pkgdir"/var/lib/$dir + done + + install -dm755 -o forgejo -g www-data "$pkgdir"/var/log/forgejo + + # TODO: rename when upstream does + install -Dm755 -g www-data gitea "$pkgdir"/usr/bin/forgejo + + install -Dm644 -o forgejo -g www-data "$srcdir"/forgejo-aneksajo.ini \ + "$pkgdir"/etc/forgejo/app.ini + chown forgejo:www-data "$pkgdir"/etc/forgejo + + install -Dm755 "$srcdir"/forgejo-aneksajo.initd \ + "$pkgdir"/etc/init.d/forgejo +} + +sha512sums=" +6836da3996a4bc51c88d82afcffbcd30965111a41d2cdf91d9539b0f0a4832496ed071b52e6eedf2eeaec7623a32aec3a3fdd1dedefedf5c2323690bd1f60937 forgejo-aneksajo-v8.0.0-git-annex0.tar.gz +eb93a9f6c8f204de5c813f58727015f53f9feaab546589e016c60743131559f04fc1518f487b6d2a0e7fa8fab6d4a67cd0cd9713a7ccd9dec767a8c1ddebe129 forgejo-aneksajo.initd +b537b41b6b3a945274a6028800f39787b48c318425a37cf5d40ace0d1b305444fd07f17b4acafcd31a629bedd7d008b0bb3e30f82ffeb3d7e7e947bdbe0ff4f3 forgejo-aneksajo.ini +" diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.ini b/user/forgejo-aneksajo/forgejo-aneksajo.ini new file mode 100644 index 0000000..3b46259 --- /dev/null +++ b/user/forgejo-aneksajo/forgejo-aneksajo.ini @@ -0,0 +1,26 @@ +# Configuration cheat sheet: https://forgejo.org/docs/latest/admin/config-cheat-sheet/ + +RUN_USER = forgejo +RUN_MODE = prod + +[repository] +ROOT = /var/lib/forgejo/git +SCRIPT_TYPE = sh + +[server] +STATIC_ROOT_PATH = /usr/share/webapps/forgejo +APP_DATA_PATH = /var/lib/forgejo/data +LFS_START_SERVER = true + +[database] +DB_TYPE = sqlite3 +PATH = /var/lib/forgejo/db/forgejo.db +SSL_MODE = disable + +[session] +PROVIDER = file + +[log] +ROOT_PATH = /var/log/forgejo +MODE = file +LEVEL = Info diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.initd b/user/forgejo-aneksajo/forgejo-aneksajo.initd new file mode 100644 index 0000000..24dd085 --- /dev/null +++ b/user/forgejo-aneksajo/forgejo-aneksajo.initd @@ -0,0 +1,15 @@ +#!/sbin/openrc-run + +supervisor=supervise-daemon +name=forgejo +command="/usr/bin/forgejo" +command_user="${FORGEJO_USER:-forgejo}:www-data" +command_args="web --config '${FORGEJO_CONF:-/etc/forgejo/app.ini}'" +supervise_daemon_args="--env FORGEJO_WORK_DIR='${FORGEJO_WORK_DIR:-/var/lib/forgejo}' --chdir '${FORGEJO_WORK_DIR:-/var/lib/forgejo}' --stdout '${FORGEJO_LOG_FILE:-/var/log/forgejo/http.log}' --stderr '${FORGEJO_LOG_FILE:-/var/log/forgejo/http.log}'" +pidfile="/run/forgejo.pid" + +depend() { + use logger dns + need net + after firewall mysql postgresql +} diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.pre-install b/user/forgejo-aneksajo/forgejo-aneksajo.pre-install new file mode 100644 index 0000000..c7e8b7b --- /dev/null +++ b/user/forgejo-aneksajo/forgejo-aneksajo.pre-install @@ -0,0 +1,7 @@ +#!/bin/sh + +addgroup -S -g 82 www-data 2>/dev/null +adduser -S -D -h /var/lib/forgejo -s /bin/sh -G www-data -g forgejo forgejo 2>/dev/null \ + && passwd -u forgejo 2>/dev/null + +exit 0 From 7320512e669e1aee637bad49b606ec5ce5cf5892 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 7 Aug 2024 17:15:28 -0400 Subject: [PATCH 385/738] backports/freetube: upgrade to 0.21.3 --- backports/freetube/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index e1b9cae..ecd6add 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -1,8 +1,8 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freetube -pkgver=0.20.0 -pkgrel=1 +pkgver=0.21.3 +pkgrel=0 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron license="AGPL-3.0-only" @@ -50,7 +50,7 @@ package() { } sha512sums=" -b82cdaff82d7bd325f3127794160382c97be3b72c5ef4bb3f327a8ada6b609043bc30a1f6af59c38e23237aac7d8b6ea2685c22aa82469c8d08b96cb839a3099 freetube-0.20.0.tar.gz +22e5ab677cd442d50237b2d62534698d8ad73a37e1731003dc23c4ea3da992b3cae936f0bb3a0a86cd4b7fba731c9fa53276cb0a6cd5bab213ff2a6c9006cb05 freetube-0.21.3.tar.gz 2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch " From 0807d658c526f2a7917ecf37e764ad6c6d30789a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 3 Jul 2024 16:43:04 -0400 Subject: [PATCH 386/738] backports/calibre: new aport --- .../calibre/0001-calibre-no-update.patch | 25 ++++ backports/calibre/APKBUILD | 116 ++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 backports/calibre/0001-calibre-no-update.patch create mode 100644 backports/calibre/APKBUILD diff --git a/backports/calibre/0001-calibre-no-update.patch b/backports/calibre/0001-calibre-no-update.patch new file mode 100644 index 0000000..85b3e59 --- /dev/null +++ b/backports/calibre/0001-calibre-no-update.patch @@ -0,0 +1,25 @@ +diff --color -Nur calibre-6.17.0.orig/src/calibre/gui2/update.py calibre-6.17.0/src/calibre/gui2/update.py +--- calibre-6.17.0.orig/src/calibre/gui2/update.py 2023-05-06 11:36:35.678461036 -0700 ++++ calibre-6.17.0/src/calibre/gui2/update.py 2023-05-06 11:39:10.365134930 -0700 +@@ -82,20 +82,6 @@ + while not self.shutdown_event.is_set(): + calibre_update_version = NO_CALIBRE_UPDATE + plugins_update_found = 0 +- try: +- version = get_newest_version() +- if version[:2] > numeric_version[:2]: +- calibre_update_version = version +- except Exception as e: +- prints('Failed to check for calibre update:', as_unicode(e)) +- try: +- update_plugins = get_plugin_updates_available(raise_error=True) +- if update_plugins is not None: +- plugins_update_found = len(update_plugins) +- except Exception as e: +- prints('Failed to check for plugin update:', as_unicode(e)) +- if calibre_update_version != NO_CALIBRE_UPDATE or plugins_update_found > 0: +- self.signal.update_found.emit(calibre_update_version, plugins_update_found) + self.shutdown_event.wait(self.INTERVAL) + + def shutdown(self): + diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD new file mode 100644 index 0000000..79582ee --- /dev/null +++ b/backports/calibre/APKBUILD @@ -0,0 +1,116 @@ +# Maintainer: Cowington Post +pkgname=calibre +pkgver=7.12.0 +pkgrel=0 +pkgdesc="Ebook management application" +# qt6-webengine +arch="x86_64 aarch64" +url="https://calibre-ebook.com" +license="GPL-3.0-or-later" +depends=" + font-liberation + libwmf + mtdev + optipng + poppler + py3-apsw + py3-beautifulsoup4 + py3-css-parser + py3-cssselect + py3-dateutil + py3-dnspython + py3-feedparser + py3-fonttools + py3-html2text + py3-html5-parser + py3-html5lib + py3-jeepney + py3-lxml + py3-markdown + py3-mechanize + py3-msgpack + py3-netifaces + py3-pillow + py3-psutil + py3-pycryptodome + py3-pygments + py3-pyqt6-webengine + py3-regex + py3-xxhash + py3-zeroconf + qt6-qtimageformats + qt6-qtsvg + qt6-qtwebengine + udisks2 + " +makedepends=" + cmake + curl + hunspell-dev + hyphen-dev + libmtp-dev + libstemmer-dev + libusb-dev + podofo-dev + py3-pyqt-builder + py3-pyqt6-sip + py3-sip + python3-dev + qt6-qtbase-dev + uchardet-dev + xdg-utils + " +subpackages=" + $pkgname-pyc + $pkgname-doc + $pkgname-bash-completion + $pkgname-zsh-completion + " +source="https://download.calibre-ebook.com/$pkgver/calibre-$pkgver.tar.xz + 0001-$pkgname-no-update.patch + " +# net: downloads iso-codes +# !check: no tests ran +options="net !check" + +export LANG="en_US.UTF-8" + +prepare() { + default_prepare + + rm -f resources/calibre-portable.* +} + +build() { + python3 setup.py build + python3 setup.py iso639 + python3 setup.py iso3166 + python3 setup.py liberation_fonts --system-liberation_fonts --path-to-liberation_fonts /usr/share/fonts/liberation + python3 setup.py mathjax + python3 setup.py gui +} + +check() { + python3 -m unittest discover +} + +package() { + # needed for zsh + mkdir -p "$pkgdir"/usr/share/zsh/site-functions + + python3 setup.py install \ + --staging-root="$pkgdir"/usr \ + --no-compile \ + --system-plugins-location=/usr/share/calibre/system-plugins + + cp -a man-pages/ "$pkgdir"/usr/share/man + + rm -r "$pkgdir"/usr/share/calibre/rapydscript/ + + python3 -m compileall -fq "$pkgdir"/usr +} + +sha512sums=" +ee654260d7047f0579a659b8907439a407fb561affcef84141126840452e7b98d10bb5e0a69e0cc809d9ba68729570900a0e7251f18b2056a94b0213880f1363 calibre-7.12.0.tar.xz +eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch +" From 497771fe9e57fb690a0925986a52568f66fa3d3c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 3 Jul 2024 16:45:21 -0400 Subject: [PATCH 387/738] backports/py3-apsw: new aport --- backports/py3-apsw/APKBUILD | 46 +++++++++++++++++++ backports/py3-apsw/detect-sqlite-config.patch | 8 ++++ 2 files changed, 54 insertions(+) create mode 100644 backports/py3-apsw/APKBUILD create mode 100644 backports/py3-apsw/detect-sqlite-config.patch diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD new file mode 100644 index 0000000..1259ba3 --- /dev/null +++ b/backports/py3-apsw/APKBUILD @@ -0,0 +1,46 @@ +# Contributor: Francesco Colista +# Maintainer: Francesco Colista +pkgname=py3-apsw +_pkgname=apsw +pkgver=3.45.2.0 +pkgrel=1 +pkgdesc="Another Python SQLite Wrapper" +url="https://github.com/rogerbinns/apsw" +arch="all" +license="Zlib" +depends="python3" +makedepends=" + python3-dev + py3-gpep517 + py3-setuptools + py3-wheel + sqlite-dev + " +subpackages="$pkgname-pyc" +source="$pkgname-$pkgver.zip::https://github.com/rogerbinns/apsw/releases/download/$pkgver/apsw-$pkgver.zip + detect-sqlite-config.patch + " + +builddir="$srcdir/$_pkgname-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 setup.py build_test_extension test +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +0260f6479d5f1188ad172dfc0dd7e4a03c9d809d2f80c2296e587a19286681bb2ce759b0bd19ec6957e2902f18729b7e79410e4db79dff9918089f57dd510828 py3-apsw-3.45.2.0.zip +8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch +" diff --git a/backports/py3-apsw/detect-sqlite-config.patch b/backports/py3-apsw/detect-sqlite-config.patch new file mode 100644 index 0000000..4750250 --- /dev/null +++ b/backports/py3-apsw/detect-sqlite-config.patch @@ -0,0 +1,8 @@ +diff --git a/setup.apsw b/setup.apsw +index 68dedb9..3ceb10b 100644 +--- a/setup.apsw ++++ b/setup.apsw +@@ -1 +1,3 @@ + # You can put ini format directives here in addition to command line flags ++[build_ext] ++use_system_sqlite_config = True From 686e6a65045bd6c73d4c26ce91fe15e8a9ea1a19 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 3 Jul 2024 16:45:32 -0400 Subject: [PATCH 388/738] backports/py3-html5-parser: new aport --- backports/py3-html5-parser/APKBUILD | 41 +++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 backports/py3-html5-parser/APKBUILD diff --git a/backports/py3-html5-parser/APKBUILD b/backports/py3-html5-parser/APKBUILD new file mode 100644 index 0000000..45e1415 --- /dev/null +++ b/backports/py3-html5-parser/APKBUILD @@ -0,0 +1,41 @@ +# Maintainer: Cowington Post +pkgname=py3-html5-parser +pkgver=0.4.12 +pkgrel=1 +pkgdesc="Fast C based HTML 5 parsing for python" +url="https://github.com/kovidgoyal/html5-parser" +arch="all" +license="Apache-2.0" +depends="py3-lxml py3-chardet" +makedepends=" + libxml2-dev + py3-gpep517 + py3-setuptools + py3-wheel + python3-dev + " +checkdepends="py3-beautifulsoup4" +subpackages="$pkgname-pyc" +source="https://github.com/kovidgoyal/html5-parser/archive/v$pkgver/py3-html5-parser-$pkgver.tar.gz" +builddir="$srcdir/html5-parser-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 setup.py test +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +d2c031225b74d01a1ae3455837ac09e9afad8a4ec6ab1b8f66cbea8a86188db271a72570ef06e05ac56d369b41d97fc6f382455e25ca346a1897f62a3696a252 py3-html5-parser-0.4.12.tar.gz +" From a0993c9e313b902ffb449c2fcd1f01e4d422362e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 10:37:01 -0400 Subject: [PATCH 389/738] user/zotero: upgrade to 7.0.0 --- user/zotero/APKBUILD | 12 +- user/zotero/esr-metainfo.patch | 18 -- user/zotero/firefox.desktop | 340 --------------------------- user/zotero/zotero_drop-jazzer.patch | 6 +- 4 files changed, 7 insertions(+), 369 deletions(-) delete mode 100644 user/zotero/esr-metainfo.patch delete mode 100644 user/zotero/firefox.desktop diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 2347394..09790c7 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,13 +1,13 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0_beta109 +pkgver=7.0.0 pkgrel=0 _fxver=115.9.1 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) # https://www.mozilla.org/firefox/organizations/notes/ -_releasedate=2024-08-01 +_releasedate=2024-08-09 pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." url="https://www.mozilla.org/en-US/firefox/organizations/" # s390x and riscv64: blocked by rust and cargo @@ -70,7 +70,6 @@ makedepends=" source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz audio-lfs64.patch disable-moz-stackwalk.patch - esr-metainfo.patch fix-fortify-system-wrappers.patch fix-rust-target.patch fix-webrtc-glibcisms.patch @@ -93,7 +92,6 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox stab.h - firefox.desktop mozilla-location.keys vendor-prefs.js @@ -370,7 +368,6 @@ sha512sums=" 9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz 3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch 454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch -f7b3b45ba04d05d17439d009bf0c9f27881e126f424e2257552338a0c1e3771ee1289c044babcb0920f62af62873a268c0cf524e1d35711e6dc8b808ca5e9f26 esr-metainfo.patch 2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch 305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch @@ -391,14 +388,13 @@ eae1afad93cc5fa7699b156619600ca4b41e67943b8b6e05ab972d449aece93bbf1e68a5ea1a7b1c b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch 0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h -d354f48a29bfc16719f3b230b1395063239d4420f9e47522de4662392d9697b15f931ca3bf6055d100fa33d61a9a1a13477687d5eac99e50ae7dbef9882a5808 firefox.desktop 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -da70afc3c7cd9c6d1547561f2e780fcd583a37f7aeaafb79b4e31257e3f319f88008ef7b8c7951607050a87710ca900abd4d9959d103427baf41b20798032cf9 zotero-client-7.0.0_beta109.tar.gz +4d6146d127153bfe7069e32cc3e4ec4c491d8cc4371034d569427bdf486d1cd39ade8e668cfe7dd0453844f935a4eba60832dd5492a247236fac75ce6928e36a zotero-client-7.0.0.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch 337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch 9dc390d8bae42e645cae45fe5551751d8f38d5c1b8b2cc0eec1c2191f4bde293ffb2c67cfc4de765f2d48b1da4d5fcd4f1c03711e5da3180cd1b63710ccf5599 zotero_test-push-timeout-to-30sec.patch -eb6b6ccb8955adab541cb26cd3b378c7ab0e0cb50d8546413f086c924f50a07db99ea29f050a4744e46d81ee9be5cd6a4f32248f4205e4f6360856c98377b973 zotero_drop-jazzer.patch +7fb791a386d30594a11ae3856295d5081000de7525036eb0b5836505bd4f0b13a4fe706400ad7efe00b75c2112cf3d59ea3542b6179ccd80f7ee1889349f441d zotero_drop-jazzer.patch " diff --git a/user/zotero/esr-metainfo.patch b/user/zotero/esr-metainfo.patch deleted file mode 100644 index fff02c5..0000000 --- a/user/zotero/esr-metainfo.patch +++ /dev/null @@ -1,18 +0,0 @@ -see https://gitlab.alpinelinux.org/alpine/aports/-/issues/13235 ---- a/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.appdata.xml.in -+++ b/taskcluster/docker/firefox-flatpak/org.mozilla.firefox.appdata.xml.in -@@ -1,10 +1,10 @@ - - -- org.mozilla.firefox -+ org.mozilla.firefox-esr -- org.mozilla.firefox.desktop -+ firefox-esr.desktop -- Firefox -+ Firefox ESR - Mozilla -- Fast, Private & Safe Web Browser -+ Mozilla Firefox Web Browser Extended Support Release - CC0-1.0 - MPL-2.0 - diff --git a/user/zotero/firefox.desktop b/user/zotero/firefox.desktop deleted file mode 100644 index 3de789d..0000000 --- a/user/zotero/firefox.desktop +++ /dev/null @@ -1,340 +0,0 @@ -[Desktop Entry] -Version=1.0 -Name=Firefox ESR -GenericName=Web Browser -GenericName[ar]=متصفح ويب -GenericName[ast]=Restolador Web -GenericName[bn]=ওয়েব ব্রাউজার -GenericName[ca]=Navegador web -GenericName[cs]=Webový prohlížeč -GenericName[da]=Webbrowser -GenericName[de]=Webbrowser -GenericName[el]=Περιηγητής διαδικτύου -GenericName[es]=Navegador web -GenericName[et]=Veebibrauser -GenericName[fa]=مرورگر اینترنتی -GenericName[fi]=WWW-selain -GenericName[fr]=Navigateur Web -GenericName[gl]=Navegador Web -GenericName[he]=דפדפן אינטרנט -GenericName[hr]=Web preglednik -GenericName[hu]=Webböngésző -GenericName[it]=Browser web -GenericName[ja]=ウェブ・ブラウザ -GenericName[ko]=웹 브라우저 -GenericName[ku]=Geroka torê -GenericName[lt]=Interneto naršyklė -GenericName[nb]=Nettleser -GenericName[nl]=Webbrowser -GenericName[nn]=Nettlesar -GenericName[no]=Nettleser -GenericName[pl]=Przeglądarka WWW -GenericName[pt]=Navegador Web -GenericName[pt_BR]=Navegador Web -GenericName[ro]=Navigator Internet -GenericName[ru]=Веб-браузер -GenericName[sk]=Internetový prehliadač -GenericName[sl]=Spletni brskalnik -GenericName[sv]=Webbläsare -GenericName[tr]=Web Tarayıcı -GenericName[ug]=توركۆرگۈ -GenericName[uk]=Веб-браузер -GenericName[vi]=Trình duyệt Web -GenericName[zh_CN]=网络浏览器 -GenericName[zh_TW]=網路瀏覽器 -Comment=Browse the World Wide Web -Comment[ar]=تصفح الشبكة العنكبوتية العالمية -Comment[ast]=Restola pela Rede -Comment[bn]=ইন্টারনেট ব্রাউজ করুন -Comment[ca]=Navegueu per el web -Comment[cs]=Prohlížení stránek World Wide Webu -Comment[da]=Surf på internettet -Comment[de]=Im Internet surfen -Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web) -Comment[es]=Navegue por la web -Comment[et]=Lehitse veebi -Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید -Comment[fi]=Selaa Internetin WWW-sivuja -Comment[fr]=Naviguer sur le Web -Comment[gl]=Navegar pola rede -Comment[he]=גלישה ברחבי האינטרנט -Comment[hr]=Pretražite web -Comment[hu]=A világháló böngészése -Comment[it]=Esplora il web -Comment[ja]=ウェブを閲覧します -Comment[ko]=웹을 돌아 다닙니다 -Comment[ku]=Li torê bigere -Comment[lt]=Naršykite internete -Comment[nb]=Surf på nettet -Comment[nl]=Verken het internet -Comment[nn]=Surf på nettet -Comment[no]=Surf på nettet -Comment[pl]=Przeglądanie stron WWW -Comment[pt]=Navegue na Internet -Comment[pt_BR]=Navegue na Internet -Comment[ro]=Navigați pe Internet -Comment[ru]=Доступ в Интернет -Comment[sk]=Prehliadanie internetu -Comment[sl]=Brskajte po spletu -Comment[sv]=Surfa på webben -Comment[tr]=İnternet'te Gezinin -Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ -Comment[uk]=Перегляд сторінок Інтернету -Comment[vi]=Để duyệt các trang web -Comment[zh_CN]=浏览互联网 -Comment[zh_TW]=瀏覽網際網路 -Keywords=Internet;WWW;Browser;Web;Explorer -Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب -Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador -Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer -Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer -Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet -Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen -Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ -Keywords[es]=Explorador;Internet;WWW -Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa -Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur -Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה; -Keywords[hr]=Internet;WWW;preglednik;Web -Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer -Keywords[it]=Internet;WWW;Browser;Web;Navigatore -Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk -Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ -Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside -Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online -Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador -Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador -Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис -Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer -Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet -Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara -Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд -Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web -Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站; -Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐 -Exec=firefox-esr %u -Icon=firefox-esr -Terminal=false -X-MultipleArgs=false -Type=Application -MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json; -StartupNotify=true -StartupWMClass=firefox-esr -Categories=Network;WebBrowser; -Actions=new-window;new-private-window; - -[Desktop Action new-window] -Name=New Window -Name[ach]=Dirica manyen -Name[af]=Nuwe venster -Name[an]=Nueva finestra -Name[ar]=نافذة جديدة -Name[as]=নতুন উইন্ডো -Name[ast]=Ventana nueva -Name[az]=Yeni Pəncərə -Name[be]=Новае акно -Name[bg]=Нов прозорец -Name[bn_BD]=নতুন উইন্ডো (N) -Name[bn_IN]=নতুন উইন্ডো -Name[br]=Prenestr nevez -Name[brx]=गोदान उइन्ड'(N) -Name[bs]=Novi prozor -Name[ca]=Finestra nova -Name[cak]=K'ak'a' tzuwäch -Name[cs]=Nové okno -Name[cy]=Ffenestr Newydd -Name[da]=Nyt vindue -Name[de]=Neues Fenster -Name[dsb]=Nowe wokno -Name[el]=Νέο παράθυρο -Name[en_GB]=New Window -Name[en_US]=New Window -Name[en_ZA]=New Window -Name[eo]=Nova fenestro -Name[es_AR]=Nueva ventana -Name[es_CL]=Nueva ventana -Name[es_ES]=Nueva ventana -Name[es_MX]=Nueva ventana -Name[et]=Uus aken -Name[eu]=Leiho berria -Name[fa]=پنجره جدید -Name[ff]=Henorde Hesere -Name[fi]=Uusi ikkuna -Name[fr]=Nouvelle fenêtre -Name[fy_NL]=Nij finster -Name[ga_IE]=Fuinneog Nua -Name[gd]=Uinneag ùr -Name[gl]=Nova xanela -Name[gn]=Ovetã pyahu -Name[gu_IN]=નવી વિન્ડો -Name[he]=חלון חדש -Name[hi_IN]=नया विंडो -Name[hr]=Novi prozor -Name[hsb]=Nowe wokno -Name[hu]=Új ablak -Name[hy_AM]=Նոր Պատուհան -Name[id]=Jendela Baru -Name[is]=Nýr gluggi -Name[it]=Nuova finestra -Name[ja]=新しいウィンドウ -Name[ja_JP-mac]=新規ウインドウ -Name[ka]=ახალი ფანჯარა -Name[kk]=Жаңа терезе -Name[km]=បង្អួចថ្មី -Name[kn]=ಹೊಸ ಕಿಟಕಿ -Name[ko]=새 창 -Name[kok]=नवें जनेल -Name[ks]=نئئ وِنڈو -Name[lij]=Neuvo barcon -Name[lo]=ຫນ້າຕ່າງໃຫມ່ -Name[lt]=Naujas langas -Name[ltg]=Jauns lūgs -Name[lv]=Jauns logs -Name[mai]=नव विंडो -Name[mk]=Нов прозорец -Name[ml]=പുതിയ ജാലകം -Name[mr]=नवीन पटल -Name[ms]=Tetingkap Baru -Name[my]=ဝင်းဒိုးအသစ် -Name[nb_NO]=Nytt vindu -Name[ne_NP]=नयाँ सञ्झ्याल -Name[nl]=Nieuw venster -Name[nn_NO]=Nytt vindauge -Name[or]=ନୂତନ ୱିଣ୍ଡୋ -Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ -Name[pl]=Nowe okno -Name[pt_BR]=Nova janela -Name[pt_PT]=Nova janela -Name[rm]=Nova fanestra -Name[ro]=Fereastră nouă -Name[ru]=Новое окно -Name[sat]=नावा विंडो (N) -Name[si]=නව කවුළුවක් -Name[sk]=Nové okno -Name[sl]=Novo okno -Name[son]=Zanfun taaga -Name[sq]=Dritare e Re -Name[sr]=Нови прозор -Name[sv_SE]=Nytt fönster -Name[ta]=புதிய சாளரம் -Name[te]=కొత్త విండో -Name[th]=หน้าต่างใหม่ -Name[tr]=Yeni pencere -Name[tsz]=Eraatarakua jimpani -Name[uk]=Нове вікно -Name[ur]=نیا دریچہ -Name[uz]=Yangi oyna -Name[vi]=Cửa sổ mới -Name[wo]=Palanteer bu bees -Name[xh]=Ifestile entsha -Name[zh_CN]=新建窗口 -Name[zh_TW]=開新視窗 -Exec=firefox-esr --new-window %u - -[Desktop Action new-private-window] -Name=New Private Window -Name[ach]=Dirica manyen me mung -Name[af]=Nuwe privaatvenster -Name[an]=Nueva finestra privada -Name[ar]=نافذة خاصة جديدة -Name[as]=নতুন ব্যক্তিগত উইন্ডো -Name[ast]=Ventana privada nueva -Name[az]=Yeni Məxfi Pəncərə -Name[be]=Новае акно адасаблення -Name[bg]=Нов прозорец за поверително сърфиране -Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো -Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো -Name[br]=Prenestr merdeiñ prevez nevez -Name[brx]=गोदान प्राइभेट उइन्ड' -Name[bs]=Novi privatni prozor -Name[ca]=Finestra privada nova -Name[cak]=K'ak'a' ichinan tzuwäch -Name[cs]=Nové anonymní okno -Name[cy]=Ffenestr Breifat Newydd -Name[da]=Nyt privat vindue -Name[de]=Neues privates Fenster -Name[dsb]=Nowe priwatne wokno -Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης -Name[en_GB]=New Private Window -Name[en_US]=New Private Window -Name[en_ZA]=New Private Window -Name[eo]=Nova privata fenestro -Name[es_AR]=Nueva ventana privada -Name[es_CL]=Nueva ventana privada -Name[es_ES]=Nueva ventana privada -Name[es_MX]=Nueva ventana privada -Name[et]=Uus privaatne aken -Name[eu]=Leiho pribatu berria -Name[fa]=پنجره ناشناس جدید -Name[ff]=Henorde Suturo Hesere -Name[fi]=Uusi yksityinen ikkuna -Name[fr]=Nouvelle fenêtre de navigation privée -Name[fy_NL]=Nij priveefinster -Name[ga_IE]=Fuinneog Nua Phríobháideach -Name[gd]=Uinneag phrìobhaideach ùr -Name[gl]=Nova xanela privada -Name[gn]=Ovetã ñemi pyahu -Name[gu_IN]=નવી ખાનગી વિન્ડો -Name[he]=חלון פרטי חדש -Name[hi_IN]=नयी निजी विंडो -Name[hr]=Novi privatni prozor -Name[hsb]=Nowe priwatne wokno -Name[hu]=Új privát ablak -Name[hy_AM]=Սկսել Գաղտնի դիտարկում -Name[id]=Jendela Mode Pribadi Baru -Name[is]=Nýr huliðsgluggi -Name[it]=Nuova finestra anonima -Name[ja]=新しいプライベートウィンドウ -Name[ja_JP-mac]=新規プライベートウインドウ -Name[ka]=ახალი პირადი ფანჯარა -Name[kk]=Жаңа жекелік терезе -Name[km]=បង្អួចឯកជនថ្មី -Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ -Name[ko]=새 사생활 보호 모드 -Name[kok]=नवो खाजगी विंडो -Name[ks]=نْو پرایوٹ وینڈو -Name[lij]=Nêuvo barcón privòu -Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ -Name[lt]=Naujas privataus naršymo langas -Name[ltg]=Jauns privatais lūgs -Name[lv]=Jauns privātais logs -Name[mai]=नया निज विंडो (W) -Name[mk]=Нов приватен прозорец -Name[ml]=പുതിയ സ്വകാര്യ ജാലകം -Name[mr]=नवीन वैयक्तिक पटल -Name[ms]=Tetingkap Persendirian Baharu -Name[my]=New Private Window -Name[nb_NO]=Nytt privat vindu -Name[ne_NP]=नयाँ निजी सञ्झ्याल -Name[nl]=Nieuw privévenster -Name[nn_NO]=Nytt privat vindauge -Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ -Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ -Name[pl]=Nowe okno prywatne -Name[pt_BR]=Nova janela privativa -Name[pt_PT]=Nova janela privada -Name[rm]=Nova fanestra privata -Name[ro]=Fereastră privată nouă -Name[ru]=Новое приватное окно -Name[sat]=नावा निजेराक् विंडो (W ) -Name[si]=නව පුද්ගලික කවුළුව (W) -Name[sk]=Nové okno v režime Súkromné prehliadanie -Name[sl]=Novo zasebno okno -Name[son]=Sutura zanfun taaga -Name[sq]=Dritare e Re Private -Name[sr]=Нови приватан прозор -Name[sv_SE]=Nytt privat fönster -Name[ta]=புதிய தனிப்பட்ட சாளரம் -Name[te]=కొత్త ఆంతరంగిక విండో -Name[th]=หน้าต่างส่วนตัวใหม่ -Name[tr]=Yeni gizli pencere -Name[tsz]=Juchiiti eraatarakua jimpani -Name[uk]=Приватне вікно -Name[ur]=نیا نجی دریچہ -Name[uz]=Yangi maxfiy oyna -Name[vi]=Cửa sổ riêng tư mới -Name[wo]=Panlanteeru biir bu bees -Name[xh]=Ifestile yangasese entsha -Name[zh_CN]=新建隐私浏览窗口 -Name[zh_TW]=新增隱私視窗 -Exec=firefox-esr --private-window %u diff --git a/user/zotero/zotero_drop-jazzer.patch b/user/zotero/zotero_drop-jazzer.patch index fad79fa..4644e66 100644 --- a/user/zotero/zotero_drop-jazzer.patch +++ b/user/zotero/zotero_drop-jazzer.patch @@ -1,11 +1,11 @@ diff --git a/zotero/pdf-worker/pdf.js/package.json.orig b/zotero/pdf-worker/pdf.js/package.json -index c76c824..c3658db 100644 +index 3025926..13f8b7a 100644 --- a/zotero/pdf-worker/pdf.js/package.json.orig +++ b/zotero/pdf-worker/pdf.js/package.json @@ -7,7 +7,6 @@ - "@babel/runtime": "^7.24.7", + "@babel/runtime": "^7.24.8", "@fluent/bundle": "^0.18.0", - "@fluent/dom": "^0.9.0", + "@fluent/dom": "^0.10.0", - "@jazzer.js/core": "^2.1.0", "@metalsmith/layouts": "^2.7.0", "@metalsmith/markdown": "^1.10.0", From 21082688afe5c8d1d32a4c2f3a25a9d31bb238b3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:08 -0400 Subject: [PATCH 390/738] user/wikijs: drop due migration to ilot iports --- user/wikijs/APKBUILD | 60 ----------------------------- user/wikijs/config.sample.yml.patch | 13 ------- user/wikijs/wikijs.initd | 24 ------------ user/wikijs/wikijs.post-install | 18 --------- user/wikijs/wikijs.pre-install | 20 ---------- 5 files changed, 135 deletions(-) delete mode 100644 user/wikijs/APKBUILD delete mode 100644 user/wikijs/config.sample.yml.patch delete mode 100644 user/wikijs/wikijs.initd delete mode 100755 user/wikijs/wikijs.post-install delete mode 100644 user/wikijs/wikijs.pre-install diff --git a/user/wikijs/APKBUILD b/user/wikijs/APKBUILD deleted file mode 100644 index aeaad93..0000000 --- a/user/wikijs/APKBUILD +++ /dev/null @@ -1,60 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=wikijs -pkgver=2.5.303 -pkgrel=0 -pkgdesc="Wiki.js | A modern, lightweight and powerful wiki app built on Node.js" -license="AGPL-3.0" -arch="!armv7 x86_64" -options="!check" # No test suite -depends=" - libcap-setcap - nodejs>=10.12.0 - postgresql - python3 - " -makedepends=" - yarn - npm - " -url="https://github.com/Requarks/wiki" -subpackages="$pkgname-openrc" -install="$pkgname.post-install $pkgname.pre-install" -builddir="$srcdir"/wiki-$pkgver -pkgusers="wikijs" -pkggroups="wikijs" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/requarks/wiki/archive/refs/tags/v$pkgver.tar.gz - wikijs.initd - config.sample.yml.patch -" - -prepare() { - default_prepare - sed -i "s|\"version.*|\"version\": \"$pkgver\",|" "$builddir"/package.json - sed -i 's|"dev": true.*|"dev": "false",|' "$builddir"/package.json -} -build() { - yarn --frozen-lockfile --non-interactive - yarn build - rm -rf node_modules - yarn --production --frozen-lockfile --non-interactive -} - -package() { - install -Dm755 "$srcdir"/wikijs.initd "$pkgdir"/etc/init.d/wikijs - - install -Dm644 -o 5494 -g 5494 "$builddir"/config.sample.yml "$pkgdir"/etc/wikijs/config.yml - - install -Dm644 "$builddir"/package.json -t "$pkgdir"/usr/lib/bundles/wikijs - cp -aR "$builddir"/assets "$builddir"/server "$builddir"/node_modules "$pkgdir"/usr/lib/bundles/wikijs - - mkdir -p "$pkgdir"/var/lib/wikijs - chown 5494:5494 "$pkgdir"/var/lib/wikijs -} -sha512sums=" -a463d79ad0d8ff15dbe568b839094d697c6de0b2e991b77a4944e2a82f9789de6840e504a4673e4e0900d61596e880ca276008de86dac4f05f5823dc0427d2fc wikijs-2.5.303.tar.gz -355131ee5617348b82681cb8543c784eea59689990a268ecd3b77d44fe9abcca9c86fb8b047f0a8faeba079c650faa7790c5dd65418d313cd7561f38bb590c03 wikijs.initd -07b536c20e370d2a926038165f0e953283259c213a80a8648419565f5359ab05f528ac310e81606914013da212270df6feddb22e514cbcb2464c8274c956e4af config.sample.yml.patch -" diff --git a/user/wikijs/config.sample.yml.patch b/user/wikijs/config.sample.yml.patch deleted file mode 100644 index 6532c25..0000000 --- a/user/wikijs/config.sample.yml.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/config.sample.yml.orig b/config.sample.yml -index 47edd8d..458472a 100644 ---- a/config.sample.yml.orig -+++ b/config.sample.yml -@@ -136,7 +136,7 @@ ha: false - # Data Path - # --------------------------------------------------------------------- - # Writeable data path used for cache and temporary user uploads. --dataPath: ./data -+dataPath: /var/lib/wikijs/data - - # --------------------------------------------------------------------- - # Body Parser Limit diff --git a/user/wikijs/wikijs.initd b/user/wikijs/wikijs.initd deleted file mode 100644 index 680efbf..0000000 --- a/user/wikijs/wikijs.initd +++ /dev/null @@ -1,24 +0,0 @@ -#!/sbin/openrc-run -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME" -pidfile="/var/run/$RC_SVCNAME.pid" -command="/usr/bin/node server" -command_args="" -command_user="wikijs" -command_group="wikijs" -supervisor="supervise-daemon" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/$RC_SVCNAME/$RC_SVCNAME.log" -error_log="/var/log/$RC_SVCNAME/$RC_SVCNAME.err" -working_directory="/usr/lib/bundles/wikijs" - -start_pre() { - checkpath --directory --owner $command_user:$command_user --mode 0775 \ - /var/log/$RC_SVCNAME \ - /var/lib/$RC_SVCNAME - export NODE_ENV=production - export CONFIG_FILE=/etc/wikijs/config.yml - cd "$working_directory" -} - diff --git a/user/wikijs/wikijs.post-install b/user/wikijs/wikijs.post-install deleted file mode 100755 index 748e847..0000000 --- a/user/wikijs/wikijs.post-install +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -set -eu - -group=wikijs -config_file='/etc/wikijs/config.yml' - -setcap 'cap_net_bind_service=+ep' /usr/bin/node - -cat >&2 <<-EOF -* -* 1. Adjust settings in /etc/wikijs/config.yml. -* -* 2. Create database for wikijs: -* -* psql -c "CREATE ROLE wikijs PASSWORD 'top-secret' INHERIT LOGIN;" -* psql -c "CREATE DATABASE wkijs OWNER wikijs ENCODING 'UTF-8';" -* -EOF diff --git a/user/wikijs/wikijs.pre-install b/user/wikijs/wikijs.pre-install deleted file mode 100644 index 579485d..0000000 --- a/user/wikijs/wikijs.pre-install +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -wikijs_dir='/var/lib/wikijs' - -if ! getent group wikijs 1>/dev/null; then - echo '* Creating group wikijs' 1>&2 - - addgroup -S wikijs -g 5494 -fi - -if ! id wikijs 2>/dev/null 1>&2; then - echo '* Creating user wikijs' 1>&2 - - adduser -DHS -G wikijs -h "$wikijs_dir" -u 5494 -s /bin/sh \ - -g "added by apk for wikijs" wikijs - passwd -u wikijs 1>/dev/null # unlock -fi - -exit 0 From bdc0c313c638f0175c1279389d7569182bee2a69 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:10 -0400 Subject: [PATCH 391/738] user/uptime-kuma: drop due migration to ilot iports --- user/uptime-kuma/APKBUILD | 49 ------------------------ user/uptime-kuma/uptime-kuma.conf | 47 ----------------------- user/uptime-kuma/uptime-kuma.openrc | 48 ----------------------- user/uptime-kuma/uptime-kuma.pre-install | 25 ------------ 4 files changed, 169 deletions(-) delete mode 100644 user/uptime-kuma/APKBUILD delete mode 100644 user/uptime-kuma/uptime-kuma.conf delete mode 100644 user/uptime-kuma/uptime-kuma.openrc delete mode 100755 user/uptime-kuma/uptime-kuma.pre-install diff --git a/user/uptime-kuma/APKBUILD b/user/uptime-kuma/APKBUILD deleted file mode 100644 index cea07d0..0000000 --- a/user/uptime-kuma/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=uptime-kuma -pkgver=1.23.13 -pkgrel=0 -pkgdesc='A fancy self-hosted monitoring tool' -arch="all" -url="https://github.com/louislam/uptime-kuma" -license="MIT" -depends="nodejs" -makedepends="npm" -source=" - uptime-kuma-$pkgver.tar.gz::https://github.com/louislam/uptime-kuma/archive/refs/tags/$pkgver.tar.gz - uptime-kuma.openrc - uptime-kuma.conf - " -subpackages="$pkgname-doc $pkgname-openrc" -install="$pkgname.pre-install" - -build() { - npm ci - npm run build - rm -Rf "$builddir"/node_modules - npm ci --omit=dev -} - -package() { - install -dm 755 \ - "$pkgdir"/usr/share/webapps \ - "$pkgdir"/usr/share/doc \ - "$pkgdir"/usr/share/licenses/uptime-kuma \ - "$pkgdir"/etc/init.d \ - "$pkgdir"/etc/conf.d - - # install - cp -a "$builddir" "$pkgdir/usr/share/webapps/uptime-kuma" - - # openrc - install -Dm755 "$srcdir"/uptime-kuma.openrc "$pkgdir"/etc/init.d/uptime-kuma - install -Dm755 "$srcdir"/uptime-kuma.conf "$pkgdir"/etc/conf.d/uptime-kuma - - # docs and licenses - mv "$pkgdir"/usr/share/webapps/uptime-kuma/LICENSE "$pkgdir"/usr/share/licenses/uptime-kuma/. -} -sha512sums=" -9045cdc69d46ce34011f7866844a8d1866eee21850be6eede3226e77b9c0d3ecc0190481671f04f25da40345b29cc2d13de07bcc27e7baeff7901b4bd9c8b93f uptime-kuma-1.23.13.tar.gz -0ceddb98a6f318029b8bd8b5a49b55c883e77a5f8fffe2b9b271c9abf0ac52dc7a6ea4dbb4a881124a7857f1e43040f18755c1c2a034479e6a94d2b65a73d847 uptime-kuma.openrc -1dbae536b23e3624e139155abbff383bba3209ff2219983da2616b4376b1a5041df812d1e5164716fc6e967a8446d94baae3b96ee575d400813cc6fdc2cc274e uptime-kuma.conf -" diff --git a/user/uptime-kuma/uptime-kuma.conf b/user/uptime-kuma/uptime-kuma.conf deleted file mode 100644 index f816a99..0000000 --- a/user/uptime-kuma/uptime-kuma.conf +++ /dev/null @@ -1,47 +0,0 @@ -# uptime-kuma config -# for more info -# see https://github.com/louislam/uptime-kuma/wiki/Environment-Variables - -# Set the directory where the data should be stored (could be relative) -# DATA_DIR=/var/lib/uptime-kuma - -# Host to bind to, could be an ip. -# UPTIME_KUMA_HOST=:: - -# Port to listen to -# UPTIME_KUMA_PORT=3001 - -# Path to SSL key -# UPTIME_KUMA_SSL_KEY= - -# Path to SSL certificate -# UPTIME_KUMA_SSL_CERT= - -# SSL Key Passphrase -# UPTIME_KUMA_SSL_KEY_PASSPHRASE= - -# Cloudflare Tunnel Token -# UPTIME_KUMA_CLOUDFLARED_TOKEN= - -# By default, Uptime Kuma is not allowed in iframe if the domain name is not -# the same as the parent. It protects your Uptime Kuma to be a phishing -# website. If you don't need this protection, you can set it to true -# UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=false - -# By default, Uptime Kuma is verifying that the websockets ORIGIN-Header -# matches your servers hostname. If you don't need this protection, you can -# set it to bypass. See GHSA-mj22-23ff-2hrr for further context. -# UPTIME_KUMA_WS_ORIGIN_CHECK=cors-like - -# Allow to specify any executables as Chromium -# UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC=0 - -# Add your self-signed ca certs. -# NODE_EXTRA_CA_CERTS= - -# Ignore all TLS errors -# NOTE_TLS_REJECT_UNAUTHORIZED=0 - -# Set it to --insecure-http-parser, if you encountered error Invalid header -# value char when your website using WAF -# NODE_OPTIONS= diff --git a/user/uptime-kuma/uptime-kuma.openrc b/user/uptime-kuma/uptime-kuma.openrc deleted file mode 100644 index ce7b00e..0000000 --- a/user/uptime-kuma/uptime-kuma.openrc +++ /dev/null @@ -1,48 +0,0 @@ -#!/sbin/openrc-run - -description="Uptime Kuma self-hosted monitoring tool" - -# Change $directory to path to uptime-kuma -directory=${directory:-/usr/share/webapps/uptime-kuma} -pidfile=${pidfile:-/run/$RC_SVCNAME.pid} -DATA_DIR=${DATA_DIR:-/var/lib/uptime-kuma} - -log_dir="/var/log/$RC_SVCNAME" -logfile=${logfile:-$log_dir/$RC_SVCNAME.log} -output_log="${output_log:-$logfile}" -error_log="${error_log:-$logfile}" - -command=${command:-/usr/bin/node} -command_args="$directory/server/server.js" -command_user=${command_user:-uptime-kuma:uptime-kuma} -command_background=true - -depend() { - need net -} - -start_pre() { - checkpath --owner=$command_user --directory $log_dir \ - $DATA_DIR \ - $DATA_DIR/upload - checkpath --owner=$command_user --file $logfile \ - $DATA_DIR/error.log - - [ ! -e $DATA_DIR/kuma.db ] && - cp $directory/db/kuma.db $DATA_DIR - - checkpath --owner=$command_user --mode 600 --file $DATA_DIR/kuma.db* - - cd $directory - - export DATA_DIR UPTIME_KUMA_HOST UPTIME_KUMA_PORT UPTIME_KUMA_SSL_KEY \ - UPTIME_KUMA_SSL_CERT UPTIME_KUMA_SSL_KEY_PASSPHRASE \ - UPTIME_KUMA_CLOUDFLARED_TOKEN UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN \ - UPTIME_KUMA_WS_ORIGIN_CHECK UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC \ - NODE_EXTRA_CA_CERTS NODE_TLS_REJECT_UNAUTHORIZED NODE_OPTIONS -} - -start_post() { - # Wait for the server to be started - sleep 10 -} diff --git a/user/uptime-kuma/uptime-kuma.pre-install b/user/uptime-kuma/uptime-kuma.pre-install deleted file mode 100755 index 0217278..0000000 --- a/user/uptime-kuma/uptime-kuma.pre-install +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -DATADIR='/var/lib/uptime-kuma' - -if ! getent group uptime-kuma 1>/dev/null; then - echo '* Creating group uptime-kuma' 1>&2 - - addgroup -S uptime-kuma -fi - -if ! id uptime-kuma 2>/dev/null 1>&2; then - echo '* Creating user uptime-kuma' 1>&2 - - adduser -DHS -G uptime-kuma -h "$DATADIR" -s /bin/sh \ - -g "added by apk for uptime-kuma" uptime-kuma - passwd -u uptime-kuma 1>/dev/null # unlock -fi - -if ! id -Gn uptime-kuma | grep -Fq www-data; then - echo '* Adding user uptime-kuma to group www-data' 1>&2 - - addgroup uptime-kuma www-data -fi - -exit 0 From ff94611df03e6d86f436d7b23c50d64878f3d864 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:13 -0400 Subject: [PATCH 392/738] user/py3-tenant-schemas-celery: drop due migration to ilot iports --- user/py3-tenant-schemas-celery/APKBUILD | 41 ------------------------- 1 file changed, 41 deletions(-) delete mode 100644 user/py3-tenant-schemas-celery/APKBUILD diff --git a/user/py3-tenant-schemas-celery/APKBUILD b/user/py3-tenant-schemas-celery/APKBUILD deleted file mode 100644 index 4398eae..0000000 --- a/user/py3-tenant-schemas-celery/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-tenant-schemas-celery -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=tenant-schemas-celery -pkgver=2.2.0 -pkgrel=0 -pkgdesc="Celery integration for django-tenant-schemas and django-tenants" -url="https://pypi.python.org/project/tenant-schemas-celery" -arch="noarch" -license="MIT" -depends="py3-django-tenants py3-celery" -checkdepends="python3-dev py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source=" - $pkgname-$pkgver.tar.gz::https://codeload.github.com/maciej-gol/tenant-schemas-celery/tar.gz/refs/tags/$pkgver - " -options="!check" # Test suite wants docker -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - DJANGO_SETTINGS_MODULE=tests.settings .testenv/bin/python3 -m pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -dad71011306936dc84d966797b113008780750e9e973513092bec892be0d1468e0a0e7e8e2fcca9765309a27767e1c72bdaad7c8aca16353ae1eef783c239148 py3-tenant-schemas-celery-2.2.0.tar.gz -" From 783a964410b9d2953a5c8b8a2c0f9b6dd7e298f4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:15 -0400 Subject: [PATCH 393/738] user/py3-scim2-filter-parser: drop due migration to ilot iports --- user/py3-scim2-filter-parser/APKBUILD | 38 --------------------------- 1 file changed, 38 deletions(-) delete mode 100644 user/py3-scim2-filter-parser/APKBUILD diff --git a/user/py3-scim2-filter-parser/APKBUILD b/user/py3-scim2-filter-parser/APKBUILD deleted file mode 100644 index 784a660..0000000 --- a/user/py3-scim2-filter-parser/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-scim2-filter-parser -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=scim2-filter-parser -pkgver=0.5.0 -pkgrel=0 -pkgdesc="A customizable parser/transpiler for SCIM2.0 filters" -url="https://pypi.python.org/project/scim2-filter-parser" -arch="noarch" -license="MIT" -depends="py3-django py3-sly" -checkdepends="py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" -source="$pkgname-$pkgver.tar.gz::https://github.com/15five/scim2-filter-parser/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -5347852af6b82a764a32bc491a7e0f05f06b4f4d93dfa375668b5ca1a15ee58f488702536e350100fe5c96a5c94c492ea8cbd0e1952c5920d5a10e1453357f8c py3-scim2-filter-parser-0.5.0.tar.gz -" From 2f4998dfb66606eb1faa3a79a9f7d09f7f2b7053 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:17 -0400 Subject: [PATCH 394/738] user/py3-django-tenants: drop due migration to ilot iports --- .../997_update-from-pgclone-schema.patch | 3823 ----------------- user/py3-django-tenants/APKBUILD | 43 - 2 files changed, 3866 deletions(-) delete mode 100644 user/py3-django-tenants/997_update-from-pgclone-schema.patch delete mode 100644 user/py3-django-tenants/APKBUILD diff --git a/user/py3-django-tenants/997_update-from-pgclone-schema.patch b/user/py3-django-tenants/997_update-from-pgclone-schema.patch deleted file mode 100644 index b2999d2..0000000 --- a/user/py3-django-tenants/997_update-from-pgclone-schema.patch +++ /dev/null @@ -1,3823 +0,0 @@ -From 07e14a3442d080bd4e873dc74e441296b8291ae2 Mon Sep 17 00:00:00 2001 -From: Marc 'risson' Schmitt -Date: Thu, 16 Nov 2023 13:26:16 +0100 -Subject: [PATCH 1/3] clone: update from pg-clone-schema - -Signed-off-by: Marc 'risson' Schmitt ---- - django_tenants/clone.py | 3407 ++++++++++++++++++++++++++++++++++----- - 1 file changed, 2977 insertions(+), 430 deletions(-) - -diff --git a/django_tenants/clone.py b/django_tenants/clone.py -index 426e81b8..3afce109 100644 ---- a/django_tenants/clone.py -+++ b/django_tenants/clone.py -@@ -6,24 +6,592 @@ - from django_tenants.utils import schema_exists - - CLONE_SCHEMA_FUNCTION = r""" ---- https://github.com/denishpatel/pg-clone-schema/ rev 0d3b522 -+-- https://github.com/denishpatel/pg-clone-schema/ rev 073922e - -- https://github.com/tomturner/django-tenants/issues/322 - ---- Function: clone_schema(text, text, boolean, boolean) -+do $$ -+<> -+DECLARE -+ cnt int; -+BEGIN -+ DROP TYPE IF EXISTS public.cloneparms CASCADE; -+ CREATE TYPE public.cloneparms AS ENUM ('DATA', 'NODATA','DDLONLY','NOOWNER','NOACL','VERBOSE','DEBUG','FILECOPY'); -+ -- END IF; -+end first_block $$; -+ -+ -+-- select * from public.get_insert_stmt_ddl('clone1','sample','address'); -+CREATE OR REPLACE FUNCTION public.get_insert_stmt_ddl( -+ source_schema text, -+ target_schema text, -+ atable text, -+ bTextCast boolean default False -+) -+RETURNS text -+LANGUAGE plpgsql VOLATILE -+AS -+$$ -+ DECLARE -+ -- the ddl we're building -+ v_insert_ddl text := ''; -+ v_cols text := ''; -+ v_cols_sel text := ''; -+ v_cnt int := 0; -+ v_colrec record; -+ v_schema text; -+ BEGIN -+ FOR v_colrec IN -+ SELECT c.column_name, c.data_type, c.udt_name, c.udt_schema, c.character_maximum_length, c.is_nullable, c.column_default, c.numeric_precision, c.numeric_scale, c.is_identity, c.identity_generation, c.is_generated -+ FROM information_schema.columns c WHERE (table_schema, table_name) = (source_schema, atable) ORDER BY ordinal_position -+ LOOP -+ IF v_colrec.udt_schema = 'public' THEN -+ v_schema = 'public'; -+ ELSE -+ v_schema = target_schema; -+ END IF; -+ -+ v_cnt = v_cnt + 1; -+ IF v_colrec.is_identity = 'YES' OR v_colrec.is_generated = 'ALWAYS' THEN -+ -- skip -+ continue; -+ END IF; -+ -+ IF v_colrec.data_type = 'USER-DEFINED' THEN -+ IF v_cols = '' THEN -+ v_cols = v_colrec.column_name; -+ IF bTextCast THEN -+ -- v_cols_sel = v_colrec.column_name || '::text::' || v_schema || '.' || v_colrec.udt_name; -+ IF v_schema = 'public' THEN -+ v_cols_sel = v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; -+ ELSE -+ v_cols_sel = v_colrec.column_name || '::text::' || v_colrec.udt_name; -+ END IF; -+ ELSE -+ v_cols_sel = v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; -+ END IF; -+ ELSE -+ v_cols = v_cols || ', ' || v_colrec.column_name; -+ IF bTextCast THEN -+ -- v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::text::' || v_schema || '.' || v_colrec.udt_name; -+ IF v_schema = 'public' THEN -+ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; -+ ELSE -+ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::text::' || v_colrec.udt_name; -+ END IF; -+ ELSE -+ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name || '::' || v_schema || '.' || v_colrec.udt_name; -+ END IF; -+ END IF; -+ ELSE -+ IF v_cols = '' THEN -+ v_cols = v_colrec.column_name; -+ v_cols_sel = v_colrec.column_name; -+ ELSE -+ v_cols = v_cols || ', ' || v_colrec.column_name; -+ v_cols_sel = v_cols_sel || ', ' || v_colrec.column_name; -+ END IF; -+ END IF; -+ END LOOP; -+ -+ -- put it all together and return the insert statement -+ -- INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address; -+ v_insert_ddl = 'INSERT INTO ' || target_schema || '.' || atable || ' (' || v_cols || ') ' || 'SELECT ' || v_cols_sel || ' FROM ' || source_schema || '.' || atable || ';'; -+ RETURN v_insert_ddl; -+ END; -+$$; -+ -+ -+CREATE OR REPLACE FUNCTION public.get_table_ddl_complex( -+ src_schema text, -+ dst_schema text, -+ in_table text, -+ sq_server_version_num integer -+) -+RETURNS text -+LANGUAGE plpgsql VOLATILE -+AS -+$$ -+ DECLARE -+ v_table_ddl text; -+ v_buffer1 text; -+ v_buffer2 text; -+ -+ BEGIN -+ IF sq_server_version_num < 110000 THEN -+ SELECT 'CREATE TABLE ' -+ || quote_ident(dst_schema) -+ || '.' -+ || pc.relname -+ || E'(\n' -+ || string_agg( -+ pa.attname -+ || ' ' -+ || pg_catalog.format_type(pa.atttypid, pa.atttypmod) -+ || coalesce( -+ ' DEFAULT ' -+ || ( -+ SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid) -+ FROM pg_catalog.pg_attrdef d -+ WHERE d.adrelid = pa.attrelid -+ AND d.adnum = pa.attnum -+ AND pa.atthasdef -+ ), -+ '' -+ ) -+ || ' ' -+ || CASE pa.attnotnull -+ WHEN TRUE THEN 'NOT NULL' -+ ELSE 'NULL' -+ END, -+ E',\n' -+ ) -+ || coalesce( -+ ( -+ SELECT -+ E',\n' -+ || string_agg( -+ 'CONSTRAINT ' -+ || pc1.conname -+ || ' ' -+ || pg_get_constraintdef(pc1.oid), -+ E',\n' -+ ORDER BY pc1.conindid -+ ) -+ FROM pg_constraint pc1 -+ --Issue#103: do not return FKEYS for partitions since we assume it is implied by the one done on the parent table, otherwise error for trying to define it again. -+ WHERE pc1.conrelid = pa.attrelid -+ ), -+ '' -+ ) -+ INTO v_buffer1 -+ FROM pg_catalog.pg_attribute pa -+ JOIN pg_catalog.pg_class pc ON pc.oid = pa.attrelid -+ AND pc.relname = quote_ident(in_table) -+ JOIN pg_catalog.pg_namespace pn ON pn.oid = pc.relnamespace -+ AND pn.nspname = quote_ident(src_schema) -+ WHERE pa.attnum > 0 -+ AND NOT pa.attisdropped -+ GROUP BY pn.nspname, pc.relname, pa.attrelid; -+ -+ ELSE -+ SELECT 'CREATE TABLE ' -+ || quote_ident(dst_schema) -+ || '.' -+ || pc.relname -+ || E'(\n' -+ || string_agg( -+ pa.attname -+ || ' ' -+ || pg_catalog.format_type(pa.atttypid, pa.atttypmod) -+ || coalesce( -+ ' DEFAULT ' -+ || ( -+ SELECT pg_catalog.pg_get_expr(d.adbin, d.adrelid) -+ FROM pg_catalog.pg_attrdef d -+ WHERE d.adrelid = pa.attrelid -+ AND d.adnum = pa.attnum -+ AND pa.atthasdef -+ ), -+ '' -+ ) -+ || ' ' -+ || CASE pa.attnotnull -+ WHEN TRUE THEN 'NOT NULL' -+ ELSE 'NULL' -+ END, -+ E',\n' -+ ) -+ || coalesce( -+ ( -+ SELECT -+ E',\n' -+ || string_agg( -+ 'CONSTRAINT ' -+ || pc1.conname -+ || ' ' -+ || pg_get_constraintdef(pc1.oid), -+ E',\n' -+ ORDER BY pc1.conindid -+ ) -+ FROM pg_constraint pc1 -+ --Issue#103: do not return FKEYS for partitions since we assume it is implied by the one done on the parent table, otherwise error for trying to define it again. -+ WHERE pc1.conrelid = pa.attrelid AND pc1.conparentid = 0 -+ ), -+ '' -+ ) -+ INTO v_buffer1 -+ FROM pg_catalog.pg_attribute pa -+ JOIN pg_catalog.pg_class pc ON pc.oid = pa.attrelid -+ AND pc.relname = quote_ident(in_table) -+ JOIN pg_catalog.pg_namespace pn ON pn.oid = pc.relnamespace -+ AND pn.nspname = quote_ident(src_schema) -+ WHERE pa.attnum > 0 -+ AND NOT pa.attisdropped -+ GROUP BY pn.nspname, pc.relname, pa.attrelid; -+ END IF; -+ -+ -- append partition keyword to it -+ SELECT pg_catalog.pg_get_partkeydef(c.oid::pg_catalog.oid) into v_buffer2 -+ FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace -+ WHERE c.relname = quote_ident(in_table) COLLATE pg_catalog.default AND n.nspname = quote_ident(src_schema) COLLATE pg_catalog.default; -+ -+ v_table_ddl := v_buffer1 || ') PARTITION BY ' || v_buffer2 || ';'; -+ -+ RETURN v_table_ddl; -+ END; -+$$; -+ -+ -+-- SELECT * FROM public.get_table_ddl('sample', 'address', True); -+CREATE OR REPLACE FUNCTION public.get_table_ddl( -+ in_schema varchar, -+ in_table varchar, -+ bfkeys boolean -+) -+RETURNS text -+LANGUAGE plpgsql VOLATILE -+AS -+$$ -+ DECLARE -+ -- the ddl we're building -+ v_table_ddl text; -+ -+ -- data about the target table -+ v_table_oid int; -+ -+ -- records for looping -+ v_colrec record; -+ v_constraintrec record; -+ v_indexrec record; -+ v_primary boolean := False; -+ v_constraint_name text; -+ v_src_path_old text := ''; -+ v_src_path_new text := ''; -+ v_dummy text; -+ v_partbound text; -+ v_pgversion int; -+ v_parent text := ''; -+ v_relopts text := ''; -+ v_tablespace text; -+ v_partition_key text := ''; -+ v_temp text; -+ bPartitioned bool := False; -+ bInheritance bool := False; -+ bRelispartition bool; -+ constraintarr text[] := '{{}}'; -+ constraintelement text; -+ bSkip boolean; -+ -+ BEGIN -+ SELECT c.oid, ( -+ SELECT setting -+ FROM pg_settings -+ WHERE name = 'server_version_num') INTO v_table_oid, v_pgversion -+ FROM pg_catalog.pg_class c -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace -+ WHERE c.relkind IN ('r', 'p') -+ AND c.relname = in_table -+ AND n.nspname = in_schema; -+ IF (v_table_oid IS NULL) THEN -+ RAISE EXCEPTION 'table does not exist'; -+ END IF; -+ -+ -- get user-defined tablespaces if applicable -+ SELECT TABLESPACE INTO v_temp -+ FROM pg_tables -+ WHERE schemaname = in_schema -+ AND tablename = in_table -+ AND TABLESPACE IS NOT NULL; -+ -- Issue#99 Fix: simple coding error! -+ -- IF v_tablespace IS NULL THEN -+ IF v_temp IS NULL THEN -+ v_tablespace := 'TABLESPACE pg_default'; -+ ELSE -+ v_tablespace := 'TABLESPACE ' || v_temp; -+ END IF; -+ -- also see if there are any SET commands for this table, ie, autovacuum_enabled=off, fillfactor=70 -+ WITH relopts AS ( -+ SELECT unnest(c.reloptions) relopts -+ FROM pg_class c, pg_namespace n -+ WHERE n.nspname = in_schema -+ AND n.oid = c.relnamespace -+ AND c.relname = in_table -+ ) -+ SELECT string_agg(r.relopts, ', ') AS relopts INTO v_temp -+ FROM relopts r; -+ IF v_temp IS NULL THEN -+ v_relopts := ''; -+ ELSE -+ v_relopts := ' WITH (' || v_temp || ')'; -+ END IF; -+ -+ -- Issue#61 FIX: set search_path = public before we do anything to force explicit schema qualification but dont forget to set it back before exiting... -+ SELECT setting INTO v_src_path_old FROM pg_settings WHERE name = 'search_path'; -+ -+ SELECT REPLACE(REPLACE(setting, '"$user"', '$user'), '$user', '"$user"') INTO v_src_path_old -+ FROM pg_settings -+ WHERE name = 'search_path'; -+ -- RAISE INFO 'DEBUG tableddl: saving old search_path: ***%***', v_src_path_old; -+ EXECUTE 'SET search_path = "public"'; -+ SELECT setting INTO v_src_path_new FROM pg_settings WHERE name = 'search_path'; -+ -+ -- grab the oid of the table; https://www.postgresql.org/docs/8.3/catalog-pg-class.html -+ SELECT c.oid INTO v_table_oid -+ FROM pg_catalog.pg_class c -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace -+ WHERE 1 = 1 -+ AND c.relkind = 'r' -+ AND c.relname = in_table -+ AND n.nspname = in_schema; -+ -+ IF (v_table_oid IS NULL) THEN -+ -- Dont give up yet. It might be a partitioned table -+ SELECT c.oid INTO v_table_oid -+ FROM pg_catalog.pg_class c -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace -+ WHERE 1 = 1 -+ AND c.relkind = 'p' -+ AND c.relname = in_table -+ AND n.nspname = in_schema; -+ -+ IF (v_table_oid IS NULL) THEN -+ RAISE EXCEPTION 'table does not exist'; -+ END IF; -+ bPartitioned := True; -+ END IF; -+ IF v_pgversion < 100000 THEN -+ SELECT c2.relname parent INTO v_parent -+ FROM pg_class c1, pg_namespace n, pg_inherits i, pg_class c2 -+ WHERE n.nspname = in_schema -+ AND n.oid = c1.relnamespace -+ AND c1.relname = in_table -+ AND c1.oid = i.inhrelid -+ AND i.inhparent = c2.oid -+ AND c1.relkind = 'r'; -+ -+ IF (v_parent IS NOT NULL) THEN -+ bPartitioned := True; -+ bInheritance := True; -+ END IF; -+ ELSE -+ SELECT c2.relname parent, c1.relispartition, pg_get_expr(c1.relpartbound, c1.oid, TRUE) INTO v_parent, bRelispartition, v_partbound -+ FROM pg_class c1, pg_namespace n, pg_inherits i, pg_class c2 -+ WHERE n.nspname = in_schema -+ AND n.oid = c1.relnamespace -+ AND c1.relname = in_table -+ AND c1.oid = i.inhrelid -+ AND i.inhparent = c2.oid -+ AND c1.relkind = 'r'; -+ -+ IF (v_parent IS NOT NULL) THEN -+ bPartitioned := True; -+ IF bRelispartition THEN -+ bInheritance := False; -+ ELSE -+ bInheritance := True; -+ END IF; -+ END IF; -+ END IF; -+ -- RAISE NOTICE 'version=% schema=% parent=% relopts=% tablespace=% partitioned=% inherited=% relispartition=%',v_pgversion, in_schema, v_parent, v_relopts, v_tablespace, bPartitioned, bInheritance, bRelispartition; -+ -+ -- start the create definition -+ v_table_ddl := 'CREATE TABLE ' || in_schema || '.' || in_table || ' (' || E'\n'; -+ -+ -- define all of the columns in the table; https://stackoverflow.com/a/8153081/3068233 -+ FOR v_colrec IN -+ SELECT c.column_name, c.data_type, c.udt_name, c.udt_schema, c.character_maximum_length, c.is_nullable, c.column_default, c.numeric_precision, c.numeric_scale, c.is_identity, c.identity_generation -+ FROM information_schema.columns c -+ WHERE (table_schema, table_name) = (in_schema, in_table) -+ ORDER BY ordinal_position -+ LOOP -+ v_table_ddl := v_table_ddl || ' ' -- note: two char spacer to start, to indent the column -+ || v_colrec.column_name || ' ' -+ -- FIX #82, FIX #100 as well by adding 'citext' to the list -+ -- FIX #105 by overriding the previous fixes (#82, #100), which presumed "public" was always the schema for extensions. It could be a custom schema. -+ -- so assume udt_schema for all USER-DEFINED datatypes -+ -- || CASE WHEN v_colrec.udt_name in ('geometry', 'box2d', 'box2df', 'box3d', 'geography', 'geometry_dump', 'gidx', 'spheroid', 'valid_detail','citext') -+ -- THEN v_colrec.udt_name -+ || CASE WHEN v_colrec.data_type = 'USER-DEFINED' -+ -- THEN in_schema || '.' || v_colrec.udt_name ELSE v_colrec.data_type END -+ THEN v_colrec.udt_schema || '.' || v_colrec.udt_name ELSE v_colrec.data_type END -+ || CASE WHEN v_colrec.is_identity = 'YES' -+ THEN -+ CASE WHEN v_colrec.identity_generation = 'ALWAYS' -+ THEN ' GENERATED ALWAYS AS IDENTITY' ELSE ' GENERATED BY DEFAULT AS IDENTITY' END ELSE '' END -+ || CASE WHEN v_colrec.character_maximum_length IS NOT NULL -+ THEN ('(' || v_colrec.character_maximum_length || ')') -+ WHEN v_colrec.numeric_precision > 0 AND v_colrec.numeric_scale > 0 -+ THEN '(' || v_colrec.numeric_precision || ',' || v_colrec.numeric_scale || ')' -+ ELSE '' END || ' ' -+ || CASE WHEN v_colrec.is_nullable = 'NO' -+ THEN 'NOT NULL' ELSE 'NULL' END -+ || CASE WHEN v_colrec.column_default IS NOT null -+ THEN (' DEFAULT ' || v_colrec.column_default) ELSE '' END -+ || ',' || E'\n'; -+ END LOOP; -+ -- define all the constraints in the; https://www.postgresql.org/docs/9.1/catalog-pg-constraint.html && https://dba.stackexchange.com/a/214877/75296 -+ -- Issue#103: do not get foreign keys for partitions since they are defined on the parent and this will cause an "already exists" error otherwise -+ -- Also conparentid is not in V10, so bypass since we do not have FKEYS in partitioned tables in V10 -+ IF v_pgversion < 110000 THEN -+ FOR v_constraintrec IN -+ SELECT -+ con.conname as constraint_name, -+ con.contype as constraint_type, -+ CASE -+ WHEN con.contype = 'p' THEN 1 -- primary key constraint -+ WHEN con.contype = 'u' THEN 2 -- unique constraint -+ WHEN con.contype = 'f' THEN 3 -- foreign key constraint -+ WHEN con.contype = 'c' THEN 4 -+ ELSE 5 -+ END as type_rank, -+ pg_get_constraintdef(con.oid) as constraint_definition -+ FROM pg_catalog.pg_constraint con -+ JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid -+ JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace -+ WHERE nsp.nspname = in_schema -+ AND rel.relname = in_table -+ ORDER BY type_rank -+ LOOP -+ -- Issue#85 fix -+ -- constraintarr := constraintarr || v_constraintrec.constraint_name; -+ constraintarr := constraintarr || v_constraintrec.constraint_name::text; -+ IF v_constraintrec.type_rank = 1 THEN -+ v_primary := True; -+ v_constraint_name := v_constraintrec.constraint_name; -+ END IF; -+ IF NOT bfkeys AND v_constraintrec.constraint_type = 'f' THEN -+ continue; -+ END IF; -+ v_table_ddl := v_table_ddl || ' ' -- note: two char spacer to start, to indent the column -+ || 'CONSTRAINT' || ' ' -+ || v_constraintrec.constraint_name || ' ' -+ || v_constraintrec.constraint_definition -+ || ',' || E'\n'; -+ END LOOP; -+ ELSE -+ FOR v_constraintrec IN -+ SELECT -+ con.conname as constraint_name, -+ con.contype as constraint_type, -+ CASE -+ WHEN con.contype = 'p' THEN 1 -- primary key constraint -+ WHEN con.contype = 'u' THEN 2 -- unique constraint -+ WHEN con.contype = 'f' THEN 3 -- foreign key constraint -+ WHEN con.contype = 'c' THEN 4 -+ ELSE 5 -+ END as type_rank, -+ pg_get_constraintdef(con.oid) as constraint_definition -+ FROM pg_catalog.pg_constraint con -+ JOIN pg_catalog.pg_class rel ON rel.oid = con.conrelid -+ JOIN pg_catalog.pg_namespace nsp ON nsp.oid = connamespace -+ WHERE nsp.nspname = in_schema -+ AND rel.relname = in_table -+ -- Issue#103: do not get partitioned tables -+ AND con.conparentid = 0 -+ ORDER BY type_rank -+ LOOP -+ -- Issue#85 fix -+ -- constraintarr := constraintarr || v_constraintrec.constraint_name; -+ constraintarr := constraintarr || v_constraintrec.constraint_name::text; -+ IF v_constraintrec.type_rank = 1 THEN -+ v_primary := True; -+ v_constraint_name := v_constraintrec.constraint_name; -+ END IF; -+ IF NOT bfkeys AND v_constraintrec.constraint_type = 'f' THEN -+ continue; -+ END IF; -+ v_table_ddl := v_table_ddl || ' ' -- note: two char spacer to start, to indent the column -+ || 'CONSTRAINT' || ' ' -+ || v_constraintrec.constraint_name || ' ' -+ || v_constraintrec.constraint_definition -+ || ',' || E'\n'; -+ END LOOP; -+ END IF; -+ -+ -- drop the last comma before ending the create statement -+ v_table_ddl = substr(v_table_ddl, 0, length(v_table_ddl) - 1) || E'\n'; -+ -- end the create table def but add inherits clause if valid -+ IF bPartitioned and bInheritance THEN -+ v_table_ddl := v_table_ddl || ') INHERITS (' || in_schema || '.' || v_parent || ') ' || v_relopts || ' ' || v_tablespace || ';' || E'\n'; -+ ELSIF v_pgversion >= 100000 AND bPartitioned and NOT bInheritance THEN -+ -- See if this is a partitioned table (pg_class.relkind = 'p') and add the partitioned key -+ SELECT pg_get_partkeydef (c1.oid) AS partition_key INTO v_partition_key -+ FROM pg_class c1 -+ JOIN pg_namespace n ON (n.oid = c1.relnamespace) -+ LEFT JOIN pg_partitioned_table p ON (c1.oid = p.partrelid) -+ WHERE n.nspname = in_schema -+ AND n.oid = c1.relnamespace -+ AND c1.relname = in_table -+ AND c1.relkind = 'p'; -+ END IF; -+ IF v_partition_key IS NOT NULL AND v_partition_key <> '' THEN -+ -- add partition clause -+ -- NOTE: cannot specify default tablespace for partitioned relations -+ v_table_ddl := v_table_ddl || ') PARTITION BY ' || v_partition_key || ';' || E'\n'; -+ ELSIF bPartitioned AND not bInheritance THEN -+ IF v_relopts <> '' THEN -+ v_table_ddl := 'CREATE TABLE ' || in_schema || '.' || in_table || ' PARTITION OF ' || in_schema || '.' || v_parent || ' ' || v_partbound || v_relopts || ' ' || v_tablespace || '; ' || E'\n'; -+ ELSE -+ v_table_ddl := 'CREATE TABLE ' || in_schema || '.' || in_table || ' PARTITION OF ' || in_schema || '.' || v_parent || ' ' || v_partbound || ' ' || v_tablespace || '; ' || E'\n'; -+ END IF; -+ ELSIF bPartitioned and bInheritance THEN -+ -- we already did this above -+ v_table_ddl := v_table_ddl; -+ ELSIF v_relopts <> '' THEN -+ v_table_ddl := v_table_ddl || ') ' || v_relopts || ' ' || v_tablespace || ';' || E'\n'; -+ ELSE -+ v_table_ddl := v_table_ddl || ') ' || v_tablespace || ';' || E'\n'; -+ END IF; -+ -- suffix create statement with all of the indexes on the table -+ FOR v_indexrec IN -+ SELECT indexdef, indexname -+ FROM pg_indexes -+ WHERE (schemaname, tablename) = (in_schema, in_table) -+ LOOP -+ -- Issue#83 fix: loop through constraints and skip ones already defined -+ bSkip = False; -+ FOREACH constraintelement IN ARRAY constraintarr -+ LOOP -+ IF constraintelement = v_indexrec.indexname THEN -+ bSkip = True; -+ EXIT; -+ END IF; -+ END LOOP; -+ if bSkip THEN CONTINUE; END IF; -+ v_table_ddl := v_table_ddl -+ || v_indexrec.indexdef -+ || ';' || E'\n'; -+ END LOOP; -+ -+ -- reset search_path back to what it was -+ IF v_src_path_old = '' THEN -+ SELECT set_config('search_path', '', false) into v_dummy; -+ ELSE -+ EXECUTE 'SET search_path = ' || v_src_path_old; -+ END IF; -+ -- RAISE NOTICE 'DEBUG tableddl: reset search_path back to ***%***', v_src_path_old; -+ -+ -- return the ddl -+ RETURN v_table_ddl; -+ END; -+$$; - ---- DROP FUNCTION clone_schema(text, text, boolean, boolean); - -+-- Function: clone_schema(text, text, boolean, boolean, boolean) -+-- DROP FUNCTION clone_schema(text, text, boolean, boolean, boolean); -+-- DROP FUNCTION IF EXISTS public.clone_schema(text, text, boolean, boolean); -+ -+DROP FUNCTION IF EXISTS public.clone_schema(text, text, cloneparms[]); - CREATE OR REPLACE FUNCTION public.clone_schema( - source_schema text, - dest_schema text, -- include_recs boolean, -- ddl_only boolean) -+ VARIADIC arr public.cloneparms[] DEFAULT '{{}}':: public.cloneparms[]) - RETURNS void AS - $BODY$ - - -- This function will clone all sequences, tables, data, views & functions from any existing schema to a new one - -- SAMPLE CALL: ---- SELECT clone_schema('public', 'new_schema', True, False); -+-- SELECT clone_schema('sample', 'sample_clone2'); - - DECLARE - src_oid oid; -@@ -32,20 +600,37 @@ - object text; - buffer text; - buffer2 text; -+ buffer3 text; - srctbl text; -+ aname text; - default_ text; - column_ text; - qry text; - ix_old_name text; - ix_new_name text; -+ relpersist text; -+ udt_name text; -+ udt_schema text; -+ bRelispart bool; -+ bChild bool; -+ relknd text; -+ data_type text; -+ ocomment text; -+ adef text; - dest_qry text; - v_def text; -+ part_range text; - src_path_old text; -+ src_path_new text; - aclstr text; -+ -- issue#80 initialize arrays properly -+ tblarray text[] := '{{}}'; -+ tblarray2 text[] := '{{}}'; -+ tblarray3 text[] := '{{}}'; -+ tblelement text; - grantor text; - grantee text; - privs text; -- records_count bigint; - seqval bigint; - sq_last_value bigint; - sq_max_value bigint; -@@ -53,16 +638,28 @@ - sq_increment_by bigint; - sq_min_value bigint; - sq_cache_value bigint; -- sq_is_called boolean; -+ sq_is_called boolean := True; - sq_is_cycled boolean; -+ is_prokind boolean; -+ abool boolean; - sq_data_type text; - sq_cycled char(10); -+ sq_owned text; -+ sq_version text; -+ sq_server_version text; -+ sq_server_version_num integer; -+ bWindows boolean; - arec RECORD; - cnt integer; -+ cnt1 integer; - cnt2 integer; -- seq_cnt integer; -+ cnt3 integer; -+ cnt4 integer; - pos integer; -+ tblscopied integer := 0; -+ l_child integer; - action text := 'N/A'; -+ tblname text; - v_ret text; - v_diag1 text; - v_diag2 text; -@@ -70,48 +667,209 @@ - v_diag4 text; - v_diag5 text; - v_diag6 text; -+ v_dummy text; -+ spath text; -+ spath_tmp text; -+ -- issue#86 fix -+ isGenerated text; -+ -+ -- issue#91 fix -+ tblowner text; -+ func_owner text; -+ func_name text; -+ func_args text; -+ func_argno integer; -+ view_owner text; -+ -+ -- issue#92 -+ calleruser text; -+ -+ -- issue#94 -+ bData boolean := False; -+ bDDLOnly boolean := False; -+ bVerbose boolean := False; -+ bDebug boolean := False; -+ bNoACL boolean := False; -+ bNoOwner boolean := False; -+ arglen integer; -+ vargs text; -+ avarg public.cloneparms; -+ -+ -- issue#98 -+ mvarray text[] := '{{}}'; -+ mvscopied integer := 0; -+ -+ -- issue#99 tablespaces -+ tblspace text; -+ -+ -- issue#101 -+ bFileCopy boolean := False; -+ -+ t timestamptz := clock_timestamp(); -+ r timestamptz; -+ s timestamptz; -+ lastsql text := ''; -+ v_version text := '1.19 September 07, 2023'; - - BEGIN -+ -- Make sure NOTICE are shown -+ SET client_min_messages = 'notice'; -+ RAISE NOTICE 'clone_schema version %', v_version; -+ -+ IF 'DEBUG' = ANY ($3) THEN bDebug = True; END IF; -+ IF 'VERBOSE' = ANY ($3) THEN bVerbose = True; END IF; -+ -+ -- IF bVerbose THEN RAISE NOTICE 'START: %',clock_timestamp() - t; END IF; -+ -+ arglen := array_length($3, 1); -+ IF arglen IS NULL THEN -+ -- nothing to do, so defaults are assumed -+ NULL; -+ ELSE -+ -- loop thru args -+ -- IF 'NO_TRIGGERS' = ANY ($3) -+ -- select array_to_string($3, ',', '***') INTO vargs; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: arguments=%', $3; END IF; -+ FOREACH avarg IN ARRAY $3 LOOP -+ IF bDebug THEN RAISE NOTICE 'DEBUG: arg=%', avarg; END IF; -+ IF avarg = 'DATA' THEN -+ bData = True; -+ ELSEIF avarg = 'NODATA' THEN -+ -- already set to that by default -+ bData = False; -+ ELSEIF avarg = 'DDLONLY' THEN -+ bDDLOnly = True; -+ ELSEIF avarg = 'NOACL' THEN -+ bNoACL = True; -+ ELSEIF avarg = 'NOOWNER' THEN -+ bNoOwner = True; -+ -- issue#101 fix -+ ELSEIF avarg = 'FILECOPY' THEN -+ bFileCopy = True; -+ END IF; -+ END LOOP; -+ IF bData and bDDLOnly THEN -+ RAISE WARNING 'You can only specify DDLONLY or DATA, but not both.'; -+ RETURN; -+ END IF; -+ END IF; -+ -+ -- Get server version info to handle certain things differently based on the version. -+ SELECT setting INTO sq_server_version -+ FROM pg_settings -+ WHERE name = 'server_version'; -+ SELECT version() INTO sq_version; -+ -+ IF POSITION('compiled by Visual C++' IN sq_version) > 0 THEN -+ bWindows = True; -+ RAISE NOTICE 'Windows: %', sq_version; -+ ELSE -+ bWindows = False; -+ RAISE NOTICE 'Linux: %', sq_version; -+ END IF; -+ SELECT setting INTO sq_server_version_num -+ FROM pg_settings -+ WHERE name = 'server_version_num'; -+ -+ IF sq_server_version_num < 100000 THEN -+ IF sq_server_version_num > 90600 THEN -+ RAISE WARNING 'Server Version:% Number:% PG Versions older than v10 are not supported. Will try however for PG 9.6...', sq_server_version, sq_server_version_num; -+ ELSE -+ RAISE WARNING 'Server Version:% Number:% PG Versions older than v10 are not supported. You need to be at minimum version 9.6 to at least try', sq_server_version, sq_server_version_num; -+ RETURN; -+ END IF; -+ END IF; - - -- Check that source_schema exists - SELECT oid INTO src_oid -- FROM pg_namespace -- WHERE nspname = quote_ident(source_schema); -+ FROM pg_namespace -+ WHERE nspname = quote_ident(source_schema); -+ - IF NOT FOUND - THEN -- RAISE NOTICE 'source schema % does not exist!', source_schema; -+ RAISE NOTICE ' source schema % does not exist!', source_schema; - RETURN ; - END IF; - -+ -- Check for case-sensitive target schemas and reject them for now. -+ SELECT lower(dest_schema) = dest_schema INTO abool; -+ IF not abool THEN -+ RAISE NOTICE 'Case-sensitive target schemas are not supported at this time.'; -+ RETURN; -+ END IF; -+ - -- Check that dest_schema does not yet exist - PERFORM nspname -- FROM pg_namespace -- WHERE nspname = quote_ident(dest_schema); -+ FROM pg_namespace -+ WHERE nspname = quote_ident(dest_schema); -+ - IF FOUND - THEN -- RAISE NOTICE 'dest schema % already exists!', dest_schema; -+ RAISE NOTICE ' dest schema % already exists!', dest_schema; - RETURN ; - END IF; -- IF ddl_only and include_recs THEN -+ IF bDDLOnly and bData THEN - RAISE WARNING 'You cannot specify to clone data and generate ddl at the same time.'; - RETURN ; - END IF; - -+ -- Issue#92 -+ SELECT current_user into calleruser; -+ - -- Set the search_path to source schema. Before exiting set it back to what it was before. -- SELECT setting INTO src_path_old FROM pg_settings WHERE name='search_path'; -+ -- In order to avoid issues with the special schema name "$user" that may be -+ -- returned unquoted by some applications, we ensure it remains double quoted. -+ -- MJV FIX: #47 -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name='search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path=%', v_dummy; END IF; -+ -+ SELECT REPLACE(REPLACE(setting, '"$user"', '$user'), '$user', '"$user"') INTO src_path_old -+ FROM pg_settings WHERE name = 'search_path'; -+ -+ IF bDebug THEN RAISE NOTICE 'DEBUG: src_path_old=%', src_path_old; END IF; -+ - EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -- -- RAISE NOTICE 'Using source search_path=%', buffer; -+ SELECT setting INTO src_path_new FROM pg_settings WHERE name='search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: new search_path=%', src_path_new; END IF; - - -- Validate required types exist. If not, create them. -- select a.objtypecnt, b.permtypecnt INTO cnt, cnt2 FROM -- (SELECT count(*) as objtypecnt FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -- WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) -- AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) -- AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND pg_catalog.pg_type_is_visible(t.oid) AND pg_catalog.format_type(t.oid, NULL) = 'obj_type') a, -- (SELECT count(*) as permtypecnt FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -- WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) -- AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) -- AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND pg_catalog.pg_type_is_visible(t.oid) AND pg_catalog.format_type(t.oid, NULL) = 'perm_type') b; -+ SELECT a.objtypecnt, b.permtypecnt INTO cnt, cnt2 -+ FROM ( -+ SELECT count(*) AS objtypecnt -+ FROM pg_catalog.pg_type t -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ WHERE (t.typrelid = 0 -+ OR ( -+ SELECT c.relkind = 'c' -+ FROM pg_catalog.pg_class c -+ WHERE c.oid = t.typrelid)) -+ AND NOT EXISTS ( -+ SELECT 1 -+ FROM pg_catalog.pg_type el -+ WHERE el.oid = t.typelem -+ AND el.typarray = t.oid) -+ AND n.nspname <> 'pg_catalog' -+ AND n.nspname <> 'information_schema' -+ AND pg_catalog.pg_type_is_visible(t.oid) -+ AND pg_catalog.format_type(t.oid, NULL) = 'obj_type') a, ( -+ SELECT count(*) AS permtypecnt -+ FROM pg_catalog.pg_type t -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ WHERE (t.typrelid = 0 -+ OR ( -+ SELECT c.relkind = 'c' -+ FROM pg_catalog.pg_class c -+ WHERE c.oid = t.typrelid)) -+ AND NOT EXISTS ( -+ SELECT 1 -+ FROM pg_catalog.pg_type el -+ WHERE el.oid = t.typelem -+ AND el.typarray = t.oid) -+ AND n.nspname <> 'pg_catalog' -+ AND n.nspname <> 'information_schema' -+ AND pg_catalog.pg_type_is_visible(t.oid) -+ AND pg_catalog.format_type(t.oid, NULL) = 'perm_type') b; -+ - IF cnt = 0 THEN - CREATE TYPE obj_type AS ENUM ('TABLE','VIEW','COLUMN','SEQUENCE','FUNCTION','SCHEMA','DATABASE'); - END IF; -@@ -119,53 +877,148 @@ - CREATE TYPE perm_type AS ENUM ('SELECT','INSERT','UPDATE','DELETE','TRUNCATE','REFERENCES','TRIGGER','USAGE','CREATE','EXECUTE','CONNECT','TEMPORARY'); - END IF; - -- IF ddl_only THEN -- RAISE NOTICE 'Only generating DDL, not actually creating anything...'; -+ -- Issue#95 -+ SELECT pg_catalog.pg_get_userbyid(nspowner) INTO buffer FROM pg_namespace WHERE nspname = quote_ident(source_schema); -+ -+ IF bDDLOnly THEN -+ RAISE NOTICE ' Only generating DDL, not actually creating anything...'; -+ -- issue#95 -+ IF bNoOwner THEN -+ RAISE INFO 'CREATE SCHEMA %;', quote_ident(dest_schema); -+ ELSE -+ RAISE INFO 'CREATE SCHEMA % AUTHORIZATION %;', quote_ident(dest_schema), buffer; -+ END IF; -+ RAISE NOTICE 'SET search_path=%;', quote_ident(dest_schema); -+ ELSE -+ -- issue#95 -+ IF bNoOwner THEN -+ EXECUTE 'CREATE SCHEMA ' || quote_ident(dest_schema) ; -+ ELSE -+ EXECUTE 'CREATE SCHEMA ' || quote_ident(dest_schema) || ' AUTHORIZATION ' || buffer; -+ END IF; - END IF; - -- IF ddl_only THEN -- RAISE NOTICE '%', 'CREATE SCHEMA ' || quote_ident(dest_schema); -+ -- Do system table validations for subsequent system table queries -+ -- Issue#65 Fix -+ SELECT count(*) into cnt -+ FROM pg_attribute -+ WHERE attrelid = 'pg_proc'::regclass AND attname = 'prokind'; -+ -+ IF cnt = 0 THEN -+ is_prokind = False; - ELSE -- EXECUTE 'CREATE SCHEMA ' || quote_ident(dest_schema) ; -+ is_prokind = True; - END IF; - - -- MV: Create Collations - action := 'Collations'; - cnt := 0; -- FOR arec IN -- SELECT n.nspname as schemaname, a.rolname as ownername , c.collname, c.collprovider, c.collcollate as locale, -- 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'c' THEN 'libc' ELSE '' END || ', locale = ''' || c.collcollate || ''');' as COLL_DDL -- FROM pg_collation c JOIN pg_namespace n ON (c.collnamespace = n.oid) JOIN pg_roles a ON (c.collowner = a.oid) WHERE n.nspname = quote_ident(source_schema) order by c.collname -- LOOP -- BEGIN -- cnt := cnt + 1; -- IF ddl_only THEN -- RAISE INFO '%', arec.coll_ddl; -- ELSE -- EXECUTE arec.coll_ddl; -- END IF; -- END; -- END LOOP; -+ -- Issue#96 Handle differently based on PG Versions (PG15 rely on colliculocale, not collcolocate) -+ -- perhaps use this logic instead: COALESCE(c.collcollate, c.colliculocale) AS lc_collate, COALESCE(c.collctype, c.colliculocale) AS lc_type -+ IF sq_server_version_num > 150000 THEN -+ FOR arec IN -+ SELECT n.nspname AS schemaname, a.rolname AS ownername, c.collname, c.collprovider, c.collcollate AS locale, -+ 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || -+ CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'c' THEN 'libc' ELSE '' END || -+ ', locale = ''' || c.colliculocale || ''');' AS COLL_DDL -+ FROM pg_collation c -+ JOIN pg_namespace n ON (c.collnamespace = n.oid) -+ JOIN pg_roles a ON (c.collowner = a.oid) -+ WHERE n.nspname = quote_ident(source_schema) -+ ORDER BY c.collname -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.coll_ddl; -+ ELSE -+ EXECUTE arec.coll_ddl; -+ END IF; -+ END; -+ END LOOP; -+ ELSIF sq_server_version_num > 100000 THEN -+ FOR arec IN -+ SELECT n.nspname AS schemaname, a.rolname AS ownername, c.collname, c.collprovider, c.collcollate AS locale, -+ 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || -+ CASE WHEN c.collprovider = 'i' THEN 'icu' WHEN c.collprovider = 'c' THEN 'libc' ELSE '' END || -+ ', locale = ''' || c.collcollate || ''');' AS COLL_DDL -+ FROM pg_collation c -+ JOIN pg_namespace n ON (c.collnamespace = n.oid) -+ JOIN pg_roles a ON (c.collowner = a.oid) -+ WHERE n.nspname = quote_ident(source_schema) -+ ORDER BY c.collname -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.coll_ddl; -+ ELSE -+ EXECUTE arec.coll_ddl; -+ END IF; -+ END; -+ END LOOP; -+ ELSE -+ -- handle 9.6 that is missing some columns in pg_collation -+ FOR arec IN -+ SELECT n.nspname AS schemaname, a.rolname AS ownername, c.collname, c.collcollate AS locale, -+ 'CREATE COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" (provider = ' || -+ ', locale = ''' || c.collcollate || ''');' AS COLL_DDL -+ FROM pg_collation c -+ JOIN pg_namespace n ON (c.collnamespace = n.oid) -+ JOIN pg_roles a ON (c.collowner = a.oid) -+ WHERE n.nspname = quote_ident(source_schema) -+ ORDER BY c.collname -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.coll_ddl; -+ ELSE -+ EXECUTE arec.coll_ddl; -+ END IF; -+ END; -+ END LOOP; -+ END IF; - RAISE NOTICE ' COLLATIONS cloned: %', LPAD(cnt::text, 5, ' '); - - -- MV: Create Domains - action := 'Domains'; - cnt := 0; - FOR arec IN -- SELECT n.nspname as "Schema", t.typname as "Name", pg_catalog.format_type(t.typbasetype, t.typtypmod) as "Type", -- (SELECT c.collname FROM pg_catalog.pg_collation c, pg_catalog.pg_type bt WHERE c.oid = t.typcollation AND -- bt.oid = t.typbasetype AND t.typcollation <> bt.typcollation) as "Collation", -- CASE WHEN t.typnotnull THEN 'not null' END as "Nullable", t.typdefault as "Default", -- pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid), ' ') as "Check", -- 'CREATE DOMAIN ' || quote_ident(dest_schema) || '.' || t.typname || ' AS ' || pg_catalog.format_type(t.typbasetype, t.typtypmod) || -- CASE WHEN t.typnotnull IS NOT NULL THEN ' NOT NULL ' ELSE ' ' END || CASE WHEN t.typdefault IS NOT NULL THEN 'DEFAULT ' || t.typdefault || ' ' ELSE ' ' END || -- pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM pg_catalog.pg_constraint r WHERE t.oid = r.contypid), ' ') || ';' AS DOM_DDL -- FROM pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -- WHERE t.typtype = 'd' AND n.nspname = quote_ident(source_schema) AND pg_catalog.pg_type_is_visible(t.oid) ORDER BY 1, 2 -+ SELECT n.nspname AS "Schema", t.typname AS "Name", pg_catalog.format_type(t.typbasetype, t.typtypmod) AS "Type", ( -+ SELECT c.collname -+ FROM pg_catalog.pg_collation c, pg_catalog.pg_type bt -+ WHERE c.oid = t.typcollation -+ AND bt.oid = t.typbasetype -+ AND t.typcollation <> bt.typcollation) AS "Collation", CASE WHEN t.typnotnull THEN -+ 'not null' -+ END AS "Nullable", t.typdefault AS "Default", pg_catalog.array_to_string(ARRAY ( -+ SELECT pg_catalog.pg_get_constraintdef(r.oid, TRUE) -+ FROM pg_catalog.pg_constraint r -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on t.typename -+ WHERE t.oid = r.contypid), ' ') AS "Check", 'CREATE DOMAIN ' || quote_ident(dest_schema) || '.' || quote_ident(t.typname) || ' AS ' || pg_catalog.format_type(t.typbasetype, t.typtypmod) || -+ CASE WHEN t.typnotnull IS NOT NULL THEN -+ ' NOT NULL ' -+ ELSE -+ ' ' -+ END || CASE WHEN t.typdefault IS NOT NULL THEN -+ 'DEFAULT ' || t.typdefault || ' ' -+ ELSE -+ ' ' -+ END || pg_catalog.array_to_string(ARRAY ( -+ SELECT pg_catalog.pg_get_constraintdef(r.oid, TRUE) -+ FROM pg_catalog.pg_constraint r -+ WHERE t.oid = r.contypid), ' ') || ';' AS DOM_DDL -+ FROM pg_catalog.pg_type t -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ WHERE t.typtype = 'd' -+ AND n.nspname = quote_ident(source_schema) -+ AND pg_catalog.pg_type_is_visible(t.oid) -+ ORDER BY 1, 2 - LOOP - BEGIN - cnt := cnt + 1; -- IF ddl_only THEN -+ IF bDDLOnly THEN - RAISE INFO '%', arec.dom_ddl; - ELSE - EXECUTE arec.dom_ddl; -@@ -177,36 +1030,70 @@ - -- MV: Create types - action := 'Types'; - cnt := 0; -+ lastsql = ''; - FOR arec IN -- SELECT c.relkind, n.nspname AS schemaname, t.typname AS typname, t.typcategory, CASE WHEN t.typcategory='C' THEN -- 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS (' || array_to_string(array_agg(a.attname || ' ' || pg_catalog.format_type(a.atttypid, a.atttypmod) ORDER BY c.relname, a.attnum),', ') || ');' -- WHEN t.typcategory='E' THEN -- 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS ENUM (' || REPLACE(quote_literal(array_to_string(array_agg(e.enumlabel ORDER BY e.enumsortorder),',')), ',', ''',''') || ');' -- ELSE '' END AS type_ddl FROM pg_type t JOIN pg_namespace n ON (n.oid = t.typnamespace) -- LEFT JOIN pg_enum e ON (t.oid = e.enumtypid) -- LEFT JOIN pg_class c ON (c.reltype = t.oid) LEFT JOIN pg_attribute a ON (a.attrelid = c.oid) -- WHERE n.nspname = quote_ident(source_schema) and (c.relkind IS NULL or c.relkind = 'c') and t.typcategory in ('C', 'E') group by 1,2,3,4 order by n.nspname, t.typcategory, t.typname -+ -- Fixed Issue#108:enclose double-quote roles with special characters for setting "OWNER TO" -+ -- SELECT c.relkind, n.nspname AS schemaname, t.typname AS typname, t.typcategory, pg_catalog.pg_get_userbyid(t.typowner) AS owner, CASE WHEN t.typcategory = 'C' THEN -+ SELECT c.relkind, n.nspname AS schemaname, t.typname AS typname, t.typcategory, '"' || pg_catalog.pg_get_userbyid(t.typowner) || '"' AS owner, CASE WHEN t.typcategory = 'C' THEN -+ 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS (' || array_to_string(array_agg(a.attname || ' ' || pg_catalog.format_type(a.atttypid, a.atttypmod) -+ ORDER BY c.relname, a.attnum), ', ') || ');' -+ WHEN t.typcategory = 'E' THEN -+ 'CREATE TYPE ' || quote_ident(dest_schema) || '.' || t.typname || ' AS ENUM (' || REPLACE(quote_literal(array_to_string(array_agg(e.enumlabel ORDER BY e.enumsortorder), ',')), ',', ''',''') || ');' -+ ELSE -+ '' -+ END AS type_ddl -+ FROM pg_type t -+ JOIN pg_namespace n ON (n.oid = t.typnamespace) -+ LEFT JOIN pg_enum e ON (t.oid = e.enumtypid) -+ LEFT JOIN pg_class c ON (c.reltype = t.oid) -+ LEFT JOIN pg_attribute a ON (a.attrelid = c.oid) -+ WHERE n.nspname = quote_ident(source_schema) -+ AND (c.relkind IS NULL -+ OR c.relkind = 'c') -+ AND t.typcategory IN ('C', 'E') -+ GROUP BY 1, 2, 3, 4, 5 -+ ORDER BY n.nspname, t.typcategory, t.typname -+ - LOOP - BEGIN - cnt := cnt + 1; - -- Keep composite and enum types in separate branches for fine tuning later if needed. - IF arec.typcategory = 'E' THEN -- -- RAISE NOTICE '%', arec.type_ddl; -- IF ddl_only THEN -- RAISE INFO '%', arec.type_ddl; -- ELSE -- EXECUTE arec.type_ddl; -- END IF; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.type_ddl; -+ -+ --issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TYPE % OWNER TO %;', quote_ident(dest_schema) || '.' || arec.typname, arec.owner; -+ END IF; -+ ELSE -+ EXECUTE arec.type_ddl; - -- ELSEIF arec.typcategory = 'C' THEN -- -- RAISE NOTICE '%', arec.type_ddl; -- IF ddl_only THEN -+ --issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ EXECUTE 'ALTER TYPE ' || quote_ident(dest_schema) || '.' || arec.typname || ' OWNER TO ' || arec.owner; -+ END IF; -+ END IF; -+ ELSIF arec.typcategory = 'C' THEN -+ IF bDDLOnly THEN - RAISE INFO '%', arec.type_ddl; -+ --issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TYPE % OWNER TO %;', quote_ident(dest_schema) || '.' || arec.typname, arec.owner; -+ END IF; - ELSE - EXECUTE arec.type_ddl; -+ --issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ EXECUTE 'ALTER TYPE ' || quote_ident(dest_schema) || '.' || arec.typname || ' OWNER TO ' || arec.owner; -+ END IF; - END IF; - ELSE -- RAISE NOTICE 'Unhandled type:%-%', arec.typcategory, arec.typname; -+ RAISE NOTICE ' Unhandled type:%-%', arec.typcategory, arec.typname; - END IF; - END; - END LOOP; -@@ -214,82 +1101,361 @@ - - -- Create sequences - action := 'Sequences'; -- seq_cnt := 0; -- -- TODO: Find a way to make this sequence's owner is the correct table. -- FOR object IN -- SELECT sequence_name::text -- FROM information_schema.sequences -- WHERE sequence_schema = quote_ident(source_schema) -+ -+ cnt := 0; -+ -- fix#63 get from pg_sequences not information_schema -+ -- fix#63 take 2: get it from information_schema.sequences since we need to treat IDENTITY columns differently. -+ -- fix#95 get owner as well by joining to pg_sequences -+ -- fix#106 we can get owner info with pg_class, pg_user/pg_group, and information_schema.sequences, so we can avoid the hit to pg_sequences which is not available in 9.6 -+ FOR object, buffer IN -+ -- Fixed Issue#108: -+ -- SELECT s1.sequence_name::text, s2.sequenceowner FROM information_schema.sequences s1 JOIN pg_sequences s2 ON (s1.sequence_schema = s2.schemaname AND s1.sequence_name = s2.sequencename) AND s1.sequence_schema = quote_ident(source_schema) -+ -- SELECT s.sequence_name::text, '"' || u.usename || '"' as owner FROM information_schema.sequences s JOIN pg_class c ON (s.sequence_name = c.relname AND s.sequence_schema = c.relnamespace::regnamespace::text) JOIN pg_user u ON (c.relowner = u.usesysid) -+ -- WHERE c.relkind = 'S' AND s.sequence_schema = quote_ident(source_schema) -+ -- UNION SELECT s.sequence_name::text, g.groname as owner FROM information_schema.sequences s JOIN pg_class c ON (s.sequence_name = c.relname AND s.sequence_schema = c.relnamespace::regnamespace::text) JOIN pg_group g ON (c.relowner = g.grosysid) -+ -- WHERE c.relkind = 'S' AND s.sequence_schema = quote_ident(source_schema) -+ SELECT sequencename::text, sequenceowner FROM pg_catalog.pg_sequences WHERE schemaname = quote_ident(source_schema) - LOOP -- seq_cnt := seq_cnt + 1; -- IF ddl_only THEN -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ -- issue#95 - RAISE INFO '%', 'CREATE SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ';'; -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO '%', 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ' OWNER TO ' || buffer || ';'; -+ END IF; - ELSE - EXECUTE 'CREATE SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object); -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ EXECUTE 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ' OWNER TO ' || buffer; -+ END IF; - END IF; - srctbl := quote_ident(source_schema) || '.' || quote_ident(object); - -- EXECUTE 'SELECT last_value, is_called -- FROM ' || quote_ident(source_schema) || '.' || quote_ident(object) || ';' -- INTO sq_last_value, sq_is_called; -- -- EXECUTE 'SELECT max_value, start_value, increment_by, min_value, cache_size, cycle, data_type -- FROM pg_catalog.pg_sequences WHERE schemaname='|| quote_literal(source_schema) || ' AND sequencename=' || quote_literal(object) || ';' -- INTO sq_max_value, sq_start_value, sq_increment_by, sq_min_value, sq_cache_value, sq_is_cycled, sq_data_type ; -+ IF sq_server_version_num < 100000 THEN -+ EXECUTE 'SELECT last_value, is_called FROM ' || quote_ident(source_schema) || '.' || quote_ident(object) || ';' INTO sq_last_value, sq_is_called; -+ EXECUTE 'SELECT maximum_value, start_value, increment, minimum_value, 1 cache_size, cycle_option, data_type -+ FROM information_schema.sequences WHERE sequence_schema='|| quote_literal(source_schema) || ' AND sequence_name=' || quote_literal(object) || ';' -+ INTO sq_max_value, sq_start_value, sq_increment_by, sq_min_value, sq_cache_value, sq_is_cycled, sq_data_type; -+ IF sq_is_cycled -+ THEN -+ sq_cycled := 'CYCLE'; -+ ELSE -+ sq_cycled := 'NO CYCLE'; -+ END IF; - -- IF sq_is_cycled -- THEN -- sq_cycled := 'CYCLE'; -+ qry := 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) -+ || ' INCREMENT BY ' || sq_increment_by -+ || ' MINVALUE ' || sq_min_value -+ || ' MAXVALUE ' || sq_max_value -+ -- will update current sequence value after this -+ || ' START WITH ' || sq_start_value -+ || ' RESTART ' || sq_min_value -+ || ' CACHE ' || sq_cache_value -+ || ' ' || sq_cycled || ' ;' ; - ELSE -- sq_cycled := 'NO CYCLE'; -- END IF; -+ EXECUTE 'SELECT max_value, start_value, increment_by, min_value, cache_size, cycle, data_type, COALESCE(last_value, 1) -+ FROM pg_catalog.pg_sequences WHERE schemaname='|| quote_literal(source_schema) || ' AND sequencename=' || quote_literal(object) || ';' -+ INTO sq_max_value, sq_start_value, sq_increment_by, sq_min_value, sq_cache_value, sq_is_cycled, sq_data_type, sq_last_value; -+ IF sq_is_cycled -+ THEN -+ sq_cycled := 'CYCLE'; -+ ELSE -+ sq_cycled := 'NO CYCLE'; -+ END IF; - -- qry := 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) -- || ' AS ' || sq_data_type -- || ' INCREMENT BY ' || sq_increment_by -- || ' MINVALUE ' || sq_min_value -- || ' MAXVALUE ' || sq_max_value -- || ' START WITH ' || sq_start_value -- || ' RESTART ' || sq_min_value -- || ' CACHE ' || sq_cache_value -- || ' ' || sq_cycled || ' ;' ; -+ qry := 'ALTER SEQUENCE ' || quote_ident(dest_schema) || '.' || quote_ident(object) -+ || ' AS ' || sq_data_type -+ || ' INCREMENT BY ' || sq_increment_by -+ || ' MINVALUE ' || sq_min_value -+ || ' MAXVALUE ' || sq_max_value -+ -- will update current sequence value after this -+ || ' START WITH ' || sq_start_value -+ || ' RESTART ' || sq_min_value -+ || ' CACHE ' || sq_cache_value -+ || ' ' || sq_cycled || ' ;' ; -+ END IF; - -- IF ddl_only THEN -+ IF bDDLOnly THEN - RAISE INFO '%', qry; - ELSE - EXECUTE qry; - END IF; - - buffer := quote_ident(dest_schema) || '.' || quote_ident(object); -- IF include_recs THEN -+ IF bData THEN - EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; - ELSE -- if ddl_only THEN -- RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; -+ if bDDLOnly THEN -+ -- fix#63 -+ -- RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; -+ RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; - ELSE -- EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; -+ -- fix#63 -+ -- EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_start_value || ', ' || sq_is_called || ');' ; -+ EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; - END IF; - - END IF; - END LOOP; -- RAISE NOTICE ' SEQUENCES cloned: %', LPAD(seq_cnt::text, 5, ' '); -+ RAISE NOTICE ' SEQUENCES cloned: %', LPAD(cnt::text, 5, ' '); -+ - ---- Create tables -+ -- Create tables including partitioned ones (parent/children) and unlogged ones. Order by is critical since child partition range logic is dependent on it. - action := 'Tables'; -- cnt := 0; -- FOR object IN -- SELECT TABLE_NAME::text -- FROM information_schema.tables -- WHERE table_schema = quote_ident(source_schema) -- AND table_type = 'BASE TABLE' -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name='search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path=%', v_dummy; END IF; - -+ cnt := 0; -+ -- Issue#61 FIX: use set_config for empty string -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: setting search_path to empty string:%', v_dummy; END IF; -+ -- Fix#86 add isgenerated to column list -+ -- Fix#91 add tblowner for setting the table ownership to that of the source -+ -- Fix#99 added join to pg_tablespace -+ -+ -- Handle PG versions greater than last major/minor version of PG 9.6.24 -+ IF sq_server_version_num > 90624 THEN -+ FOR tblname, relpersist, bRelispart, relknd, data_type, udt_name, udt_schema, ocomment, l_child, isGenerated, tblowner, tblspace IN -+ -- 2021-03-08 MJV #39 fix: change sql to get indicator of user-defined columns to issue warnings -+ -- select c.relname, c.relpersistence, c.relispartition, c.relkind -+ -- FROM pg_class c, pg_namespace n where n.oid = c.relnamespace and n.nspname = quote_ident(source_schema) and c.relkind in ('r','p') and -+ -- order by c.relkind desc, c.relname -+ --Fix#65 add another left join to distinguish child tables by inheritance -+ -- Fix#86 add is_generated to column select -+ -- Fix#91 add tblowner to the select -+ -- Fix#105 need a different kinda distinct to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT -+ --SELECT DISTINCT c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, -+ -- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace -+ -- fixed #108 by enclosing owner in double quotes to avoid errors for bad characters like #.@... -+ -- SELECT DISTINCT ON (c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type) c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, -+ SELECT DISTINCT ON (c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type) c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, -+ COALESCE(co.is_generated, ''), '"' || pg_catalog.pg_get_userbyid(c.relowner) || '"' as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace -+ FROM pg_class c -+ JOIN pg_namespace n ON (n.oid = c.relnamespace -+ AND n.nspname = quote_ident(source_schema) -+ AND c.relkind IN ('r', 'p')) -+ LEFT JOIN information_schema.columns co ON (co.table_schema = n.nspname -+ AND co.table_name = c.relname -+ AND (co.data_type = 'USER-DEFINED' OR co.is_generated = 'ALWAYS')) -+ LEFT JOIN pg_inherits i ON (c.oid = i.inhrelid) -+ -- issue#99 added join -+ LEFT JOIN pg_tablespace ts ON (c.reltablespace = ts.oid) -+ ORDER BY c.relkind DESC, c.relname - LOOP - cnt := cnt + 1; -- buffer := quote_ident(dest_schema) || '.' || quote_ident(object); -- IF ddl_only THEN -- RAISE INFO '%', 'CREATE TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(object) || ' INCLUDING ALL)'; -+ lastsql = ''; -+ IF l_child IS NULL THEN -+ bChild := False; - ELSE -- EXECUTE 'CREATE TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(object) || ' INCLUDING ALL)'; -+ bChild := True; -+ END IF; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: TABLE START --> table=% bRelispart=% relkind=% bChild=%',tblname, bRelispart, relknd, bChild; END IF; -+ -+ IF data_type = 'USER-DEFINED' THEN -+ -- RAISE NOTICE ' Table (%) has column(s) with user-defined types so using get_table_ddl() instead of CREATE TABLE LIKE construct.',tblname; -+ cnt :=cnt; -+ END IF; -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); -+ buffer2 := ''; -+ IF relpersist = 'u' THEN -+ buffer2 := 'UNLOGGED '; -+ END IF; -+ IF relknd = 'r' THEN -+ IF bDDLOnly THEN -+ IF data_type = 'USER-DEFINED' THEN -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ RAISE INFO '%', buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; -+ END IF; -+ ELSE -+ IF NOT bChild THEN -+ RAISE INFO '%', 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL);'; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; -+ END IF; -+ -+ -- issue#99 -+ IF tblspace <> 'pg_default' THEN -+ -- replace with user-defined tablespace -+ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; -+ RAISE INFO 'ALTER TABLE IF EXISTS % SET TABLESPACE %;', quote_ident(dest_schema) || '.' || tblname, tblspace; -+ END IF; -+ ELSE -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ RAISE INFO '%', buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; -+ END IF; -+ END IF; -+ END IF; -+ ELSE -+ IF data_type = 'USER-DEFINED' THEN -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef01:%', buffer3; END IF; -+ -- #82: Table def should be fully qualified with target schema, -+ -- so just make search path = public to handle extension types that should reside in public schema -+ v_dummy = 'public'; -+ SELECT set_config('search_path', v_dummy, false) into v_dummy; -+ EXECUTE buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ ELSE -+ IF (NOT bChild OR bRelispart) THEN -+ buffer3 := 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL)'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef02:%', buffer3; END IF; -+ EXECUTE buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ -+ -- issue#99 -+ IF tblspace <> 'pg_default' THEN -+ -- replace with user-defined tablespace -+ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' SET TABLESPACE ' || tblspace; -+ EXECUTE buffer3; -+ END IF; -+ -+ ELSE -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ -- set client_min_messages higher to avoid messages like this: -+ -- NOTICE: merging column "city_id" with inherited definition -+ set client_min_messages = 'WARNING'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef03:%', buffer3; END IF; -+ EXECUTE buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ -+ -- reset it back, only get these for inheritance-based tables -+ set client_min_messages = 'notice'; -+ END IF; -+ END IF; -+ -- Add table comment. -+ IF ocomment IS NOT NULL THEN -+ EXECUTE 'COMMENT ON TABLE ' || buffer || ' IS ' || quote_literal(ocomment); -+ END IF; -+ END IF; -+ ELSIF relknd = 'p' THEN -+ -- define parent table and assume child tables have already been created based on top level sort order. -+ -- Issue #103 Put the complex query into its own function, get_table_ddl_complex() -+ SELECT * INTO qry FROM public.get_table_ddl_complex(source_schema, dest_schema, tblname, sq_server_version_num); -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 - %', buffer; END IF; -+ -+ -- consider replacing complicated query above with this simple call to get_table_ddl()... -+ -- SELECT * INTO qry FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ -- qry := REPLACE(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || quote_ident(tblname), tblowner; -+ END IF; -+ ELSE -+ -- Issue#103: we need to always set search_path priority to target schema when we execute DDL -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 context: old search path=% new search path=% current search path=%', src_path_old, src_path_new, v_dummy; END IF; -+ SELECT setting INTO spath_tmp FROM pg_settings WHERE name = 'search_path'; -+ IF spath_tmp <> dest_schema THEN -+ -- change it to target schema and don't forget to change it back after we execute the DDL -+ spath = 'SET search_path = "' || dest_schema || '"'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: changing search_path --> %', spath; END IF; -+ EXECUTE spath; -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed to %', v_dummy; END IF; -+ END IF; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04:%', qry; END IF; -+ EXECUTE qry; -+ -+ -- Issue#103 -+ -- Set search path back to what it was -+ spath = 'SET search_path = "' || spath_tmp || '"'; -+ EXECUTE spath; -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed back to %', v_dummy; END IF; -+ -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ -+ END IF; -+ -- loop for child tables and alter them to attach to parent for specific partition method. -+ -- Issue#103 fix: only loop for the table we are currently processing, tblname! -+ FOR aname, part_range, object IN -+ SELECT quote_ident(dest_schema) || '.' || c1.relname as tablename, pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) as partrange, quote_ident(dest_schema) || '.' || c2.relname as object -+ FROM pg_catalog.pg_class c1, pg_namespace n, pg_catalog.pg_inherits i, pg_class c2 -+ WHERE n.nspname = quote_ident(source_schema) AND c1.relnamespace = n.oid AND c1.relkind = 'r' -+ -- Issue#103: added this condition to only work on current partitioned table. The problem was regression testing previously only worked on one partition table clone case -+ AND c2.relname = tblname AND -+ c1.relispartition AND c1.oid=i.inhrelid AND i.inhparent = c2.oid AND c2.relnamespace = n.oid ORDER BY pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) = 'DEFAULT', -+ c1.oid::pg_catalog.regclass::pg_catalog.text -+ LOOP -+ qry := 'ALTER TABLE ONLY ' || object || ' ATTACH PARTITION ' || aname || ' ' || part_range || ';'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: %',qry; END IF; -+ -- issue#91, not sure if we need to do this for child tables -+ -- issue#95 we dont set ownership here -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ IF NOT bNoOwner THEN -+ NULL; -+ END IF; -+ ELSE -+ EXECUTE qry; -+ IF NOT bNoOwner THEN -+ NULL; -+ END IF; -+ END IF; -+ END LOOP; - END IF; - - -- INCLUDING ALL creates new index names, we restore them to the old name. -@@ -300,171 +1466,975 @@ - WHERE old.schemaname = source_schema - AND new.schemaname = dest_schema - AND old.tablename = new.tablename -- AND old.tablename = object -+ AND old.tablename = tblname - AND old.indexname <> new.indexname - AND regexp_replace(old.indexdef, E'.*USING','') = regexp_replace(new.indexdef, E'.*USING','') -- ORDER BY old.indexname, new.indexname -+ ORDER BY old.indexdef, new.indexdef - LOOP -- IF ddl_only THEN -+ IF bDDLOnly THEN - RAISE INFO '%', 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; - ELSE -- EXECUTE 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; -+ -- The SELECT query above may return duplicate names when a column is -+ -- indexed twice the same manner with 2 different names. Therefore, to -+ -- avoid a 'relation "xxx" already exists' we test if the index name -+ -- is in use or free. Skipping existing index will fallback on unused -+ -- ones and every duplicate will be mapped to distinct old names. -+ IF NOT EXISTS ( -+ SELECT TRUE -+ FROM pg_indexes -+ WHERE schemaname = dest_schema -+ AND tablename = tblname -+ AND indexname = quote_ident(ix_old_name)) -+ AND EXISTS ( -+ SELECT TRUE -+ FROM pg_indexes -+ WHERE schemaname = dest_schema -+ AND tablename = tblname -+ AND indexname = quote_ident(ix_new_name)) -+ THEN -+ EXECUTE 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; -+ END IF; - END IF; - END LOOP; - -- records_count := 0; -- IF include_recs -- THEN -+ lastsql = ''; -+ IF bData THEN - -- Insert records from source table -- RAISE NOTICE 'Populating cloned table, %', buffer; -- EXECUTE 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(object) || ';'; -- -- -- restart the counter for PK's internal identity sequence -- EXECUTE 'SELECT count(*) FROM ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ';' INTO records_count; -- FOR column_ IN -- SELECT column_name::text -- FROM information_schema.columns -- WHERE -- table_schema = dest_schema AND -- table_name = object AND -- is_identity = 'YES' -- LOOP -- EXECUTE 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || quote_ident(object) || ' ALTER COLUMN ' || quote_ident(column_) || ' RESTART WITH ' || records_count + 1 || ';'; -- END LOOP; -+ -+ -- 2021-03-03 MJV FIX -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); -+ -+ -- 2020/06/18 - Issue #31 fix: add "OVERRIDING SYSTEM VALUE" for IDENTITY columns marked as GENERATED ALWAYS. -+ select count(*) into cnt2 from pg_class c, pg_attribute a, pg_namespace n -+ where a.attrelid = c.oid and c.relname = quote_ident(tblname) and n.oid = c.relnamespace and n.nspname = quote_ident(source_schema) and a.attidentity = 'a'; -+ buffer3 := ''; -+ IF cnt2 > 0 THEN -+ buffer3 := ' OVERRIDING SYSTEM VALUE'; -+ END IF; -+ -- BUG for inserting rows from tables with user-defined columns -+ -- INSERT INTO sample_clone.address OVERRIDING SYSTEM VALUE SELECT * FROM sample.address; -+ -- ERROR: column "id2" is of type sample_clone.udt_myint but expression is of type udt_myint -+ -+ -- Issue#86 fix: -+ -- IF data_type = 'USER-DEFINED' THEN -+ IF bDebug THEN RAISE NOTICE 'DEBUG: includerecs branch table=% data_type=% isgenerated=% buffer3=%', tblname, data_type, isGenerated, buffer3; END IF; -+ IF data_type = 'USER-DEFINED' OR isGenerated = 'ALWAYS' THEN -+ -+ -- RAISE WARNING 'Bypassing copying rows for table (%) with user-defined data types. You must copy them manually.', tblname; -+ -- won't work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address; -+ -- Issue#101 --> INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address; -+ -+ -- Issue#79 implementation follows -+ -- COPY sample.statuses(id, s) TO '/tmp/statuses.txt' WITH DELIMITER AS ','; -+ -- COPY sample_clone1.statuses FROM '/tmp/statuses.txt' (DELIMITER ',', NULL ''); -+ -- Issue#101 fix: use text cast to get around the problem. -+ IF bFileCopy THEN -+ IF bWindows THEN -+ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''C:\WINDOWS\TEMP\cloneschema.tmp'' WITH DELIMITER AS '','';'; -+ tblarray2 := tblarray2 || buffer2; -+ -- Issue #81 reformat COPY command for upload -+ -- buffer2:= 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL '''');'; -+ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; -+ tblarray2 := tblarray2 || buffer2; -+ ELSE -+ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''/tmp/cloneschema.tmp'' WITH DELIMITER AS '','';'; -+ tblarray2 := tblarray2 || buffer2; -+ -- Issue #81 reformat COPY command for upload -+ -- buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL '''');'; -+ -- works--> COPY sample.timestamptbl2 FROM '/tmp/cloneschema.tmp' WITH (DELIMITER ',', NULL '\N', FORMAT CSV) ; -+ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; -+ tblarray2 := tblarray2 || buffer2; -+ END IF; -+ ELSE -+ -- Issue#101: assume direct copy with text cast, add to separate array -+ SELECT * INTO buffer3 FROM public.get_insert_stmt_ddl(quote_ident(source_schema), quote_ident(dest_schema), quote_ident(tblname), True); -+ tblarray3 := tblarray3 || buffer3; -+ END IF; -+ ELSE -+ -- bypass child tables since we populate them when we populate the parents -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tblname=% bRelispart=% relknd=% l_child=% bChild=%', tblname, bRelispart, relknd, l_child, bChild; END IF; -+ IF NOT bRelispart AND NOT bChild THEN -+ -- Issue#75: Must defer population of tables until child tables have been added to parents -+ -- Issue#101 Offer alternative of copy to/from file. Although originally intended for tables with UDTs, it is now expanded to handle all cases for performance improvement perhaps for large tables. -+ -- Issue#106 buffer3 shouldn't be in the mix -+ -- revisited: buffer3 should be in play for PG versions that handle IDENTITIES -+ buffer2 := 'INSERT INTO ' || buffer || buffer3 || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; -+ -- buffer2 := 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: buffer2=%',buffer2; END IF; -+ IF bFileCopy THEN -+ tblarray2:= tblarray2 || buffer2; -+ ELSE -+ tblarray := tblarray || buffer2; -+ END IF; -+ END IF; -+ END IF; - END IF; - -- SET search_path = ''; -+ -- Issue#61 FIX: use set_config for empty string -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ - FOR column_, default_ IN - SELECT column_name::text, -- REPLACE(column_default::text, source_schema, dest_schema) -- FROM information_schema.COLUMNS -- WHERE table_schema = source_schema -- AND TABLE_NAME = object -- AND column_default LIKE 'nextval(%' || quote_ident(source_schema) || '%::regclass)' -+ REPLACE(column_default::text, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') -+ FROM information_schema.COLUMNS -+ WHERE table_schema = source_schema -+ AND TABLE_NAME = tblname -+ AND column_default LIKE 'nextval(%' || quote_ident(source_schema) || '%::regclass)' - LOOP -- IF ddl_only THEN -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on column name -+ buffer2 = 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || quote_ident(column_) || ' SET DEFAULT ' || default_ || ';'; -+ IF bDDLOnly THEN - -- May need to come back and revisit this since previous sql will not return anything since no schema as created! -- RAISE INFO '%', 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || column_ || ' SET DEFAULT ' || default_ || ';'; -+ RAISE INFO '%', buffer2; - ELSE -- EXECUTE 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || column_ || ' SET DEFAULT ' || default_; -+ EXECUTE buffer2; - END IF; - END LOOP; -- EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; - -+ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; - END LOOP; -- RAISE NOTICE ' TABLES cloned: %', LPAD(cnt::text, 5, ' '); -- -- -- add FK constraint -- action := 'FK Constraints'; -- cnt := 0; -- SET search_path = ''; -- FOR qry IN -- SELECT 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || quote_ident(rn.relname) -- || ' ADD CONSTRAINT ' || quote_ident(ct.conname) || ' ' || REPLACE(pg_get_constraintdef(ct.oid), 'REFERENCES ' ||quote_ident(source_schema), 'REFERENCES ' || quote_ident(dest_schema)) || ';' -- FROM pg_constraint ct -- JOIN pg_class rn ON rn.oid = ct.conrelid -- WHERE connamespace = src_oid -- AND rn.relkind = 'r' -- AND ct.contype = 'f' -+ ELSE -+ -- Handle 9.6 versions 90600 -+ FOR tblname, relpersist, relknd, data_type, udt_name, udt_schema, ocomment, l_child, isGenerated, tblowner, tblspace IN -+ -- 2021-03-08 MJV #39 fix: change sql to get indicator of user-defined columns to issue warnings -+ -- select c.relname, c.relpersistence, c.relispartition, c.relkind -+ -- FROM pg_class c, pg_namespace n where n.oid = c.relnamespace and n.nspname = quote_ident(source_schema) and c.relkind in ('r','p') and -+ -- order by c.relkind desc, c.relname -+ --Fix#65 add another left join to distinguish child tables by inheritance -+ -- Fix#86 add is_generated to column select -+ -- Fix#91 add tblowner to the select -+ -- Fix#105 need a different kinda distinct to avoid retrieving a table twice in the case of a table with multiple USER-DEFINED datatypes using DISTINCT ON instead of just DISTINCT -+ -- Fixed Issue#108: double quote roles to avoid problems with special characters in OWNER TO statements -+ --SELECT DISTINCT c.relname, c.relpersistence, c.relispartition, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, -+ -- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace -+ -- SELECT DISTINCT ON (c.relname, c.relpersistence, c.relkind, co.data_type) c.relname, c.relpersistence, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, -+ -- COALESCE(co.is_generated, ''), pg_catalog.pg_get_userbyid(c.relowner) as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace -+ SELECT DISTINCT ON (c.relname, c.relpersistence, c.relkind, co.data_type) c.relname, c.relpersistence, c.relkind, co.data_type, co.udt_name, co.udt_schema, obj_description(c.oid), i.inhrelid, -+ COALESCE(co.is_generated, ''), '"' || pg_catalog.pg_get_userbyid(c.relowner) || '"' as "Owner", CASE WHEN reltablespace = 0 THEN 'pg_default' ELSE ts.spcname END as tablespace -+ FROM pg_class c -+ JOIN pg_namespace n ON (n.oid = c.relnamespace -+ AND n.nspname = quote_ident(source_schema) -+ AND c.relkind IN ('r', 'p')) -+ LEFT JOIN information_schema.columns co ON (co.table_schema = n.nspname -+ AND co.table_name = c.relname -+ AND (co.data_type = 'USER-DEFINED' OR co.is_generated = 'ALWAYS')) -+ LEFT JOIN pg_inherits i ON (c.oid = i.inhrelid) -+ -- issue#99 added join -+ LEFT JOIN pg_tablespace ts ON (c.reltablespace = ts.oid) -+ ORDER BY c.relkind DESC, c.relname - LOOP - cnt := cnt + 1; -- IF ddl_only THEN -- RAISE INFO '%', qry; -+ IF l_child IS NULL THEN -+ bChild := False; - ELSE -- EXECUTE qry; -+ bChild := True; - END IF; -- END LOOP; -- EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -- RAISE NOTICE ' FKEYS cloned: %', LPAD(cnt::text, 5, ' '); -- ---- Create views -- action := 'Views'; -- cnt := 0; -- FOR object IN -- SELECT table_name::text, -- view_definition -- FROM information_schema.views -- WHERE table_schema = quote_ident(source_schema) -- -- LOOP -- cnt := cnt + 1; -- buffer := quote_ident(dest_schema) || '.' || quote_ident(object); -- SELECT view_definition INTO v_def -- FROM information_schema.views -- WHERE table_schema = quote_ident(source_schema) -- AND table_name = quote_ident(object); -+ IF bDebug THEN RAISE NOTICE 'DEBUG: TABLE START --> table=% bRelispart=NA relkind=% bChild=%',tblname, relknd, bChild; END IF; - -- IF ddl_only THEN -- RAISE INFO '%', 'CREATE OR REPLACE VIEW ' || buffer || ' AS ' || v_def || ';' ; -- ELSE -- EXECUTE 'CREATE OR REPLACE VIEW ' || buffer || ' AS ' || v_def || ';' ; -+ IF data_type = 'USER-DEFINED' THEN -+ -- RAISE NOTICE ' Table (%) has column(s) with user-defined types so using get_table_ddl() instead of CREATE TABLE LIKE construct.',tblname; -+ cnt :=cnt; - END IF; -- END LOOP; -- RAISE NOTICE ' VIEWS cloned: %', LPAD(cnt::text, 5, ' '); -- -- -- Create Materialized views -- action := 'Mat. Views'; -- cnt := 0; -- FOR object IN -- SELECT matviewname::text, -- definition -- FROM pg_catalog.pg_matviews -- WHERE schemaname = quote_ident(source_schema) -- -- LOOP -- cnt := cnt + 1; -- buffer := dest_schema || '.' || quote_ident(object); -- SELECT replace(definition,';','') INTO v_def -- FROM pg_catalog.pg_matviews -- WHERE schemaname = quote_ident(source_schema) -- AND matviewname = quote_ident(object); -- -- IF include_recs THEN -- EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || v_def || ';' ; -- ELSE -- IF ddl_only THEN -- RAISE INFO '%', 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || v_def || ' WITH NO DATA;' ; -- ELSE -- EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || v_def || ' WITH NO DATA;' ; -- END IF; -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); -+ buffer2 := ''; -+ IF relpersist = 'u' THEN -+ buffer2 := 'UNLOGGED '; -+ END IF; -+ IF relknd = 'r' THEN -+ IF bDDLOnly THEN -+ IF data_type = 'USER-DEFINED' THEN -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ RAISE INFO '%', buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; -+ END IF; -+ ELSE -+ IF NOT bChild THEN -+ RAISE INFO '%', 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL);'; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; -+ END IF; - -- END IF; -+ -- issue#99 -+ IF tblspace <> 'pg_default' THEN -+ -- replace with user-defined tablespace -+ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; -+ RAISE INFO 'ALTER TABLE IF EXISTS % SET TABLESPACE %;', quote_ident(dest_schema) || '.' || tblname, tblspace; -+ END IF; -+ ELSE -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ RAISE INFO '%', buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || tblname, tblowner; -+ END IF; -+ END IF; -+ END IF; -+ ELSE -+ IF data_type = 'USER-DEFINED' THEN -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef01:%', buffer3; END IF; -+ -- #82: Table def should be fully qualified with target schema, -+ -- so just make search path = public to handle extension types that should reside in public schema -+ v_dummy = 'public'; -+ SELECT set_config('search_path', v_dummy, false) into v_dummy; -+ EXECUTE buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ ELSE -+ IF (NOT bChild) THEN -+ buffer3 := 'CREATE ' || buffer2 || 'TABLE ' || buffer || ' (LIKE ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' INCLUDING ALL)'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef02:%', buffer3; END IF; -+ EXECUTE buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ -+ -- issue#99 -+ IF tblspace <> 'pg_default' THEN -+ -- replace with user-defined tablespace -+ -- ALTER TABLE myschema.mytable SET TABLESPACE usrtblspc; -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' SET TABLESPACE ' || tblspace; -+ EXECUTE buffer3; -+ END IF; -+ -+ ELSE -+ -- FIXED #65, #67 -+ -- SELECT * INTO buffer3 FROM public.pg_get_tabledef(quote_ident(source_schema), tblname); -+ SELECT * INTO buffer3 FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ -+ buffer3 := REPLACE(buffer3, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ -- set client_min_messages higher to avoid messages like this: -+ -- NOTICE: merging column "city_id" with inherited definition -+ set client_min_messages = 'WARNING'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef03:%', buffer3; END IF; -+ EXECUTE buffer3; -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || tblname || ' OWNER TO ' || tblowner; -+ lastsql = buffer3; -+ EXECUTE buffer3; -+ END IF; -+ -+ -- reset it back, only get these for inheritance-based tables -+ set client_min_messages = 'notice'; -+ END IF; -+ END IF; -+ -- Add table comment. -+ IF ocomment IS NOT NULL THEN -+ EXECUTE 'COMMENT ON TABLE ' || buffer || ' IS ' || quote_literal(ocomment); -+ END IF; -+ END IF; -+ ELSIF relknd = 'p' THEN -+ -- define parent table and assume child tables have already been created based on top level sort order. -+ -- Issue #103 Put the complex query into its own function, get_table_ddl_complex() -+ SELECT * INTO qry FROM public.get_table_ddl_complex(source_schema, dest_schema, tblname, sq_server_version_num); -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 - %', buffer; END IF; -+ -+ -- consider replacing complicated query above with this simple call to get_table_ddl()... -+ -- SELECT * INTO qry FROM public.get_table_ddl(quote_ident(source_schema), tblname, False); -+ -- qry := REPLACE(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER TABLE IF EXISTS % OWNER TO %;', quote_ident(dest_schema) || '.' || quote_ident(tblname), tblowner; -+ END IF; -+ ELSE -+ -- Issue#103: we need to always set search_path priority to target schema when we execute DDL -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04 context: old search path=% new search path=% current search path=%', src_path_old, src_path_new, v_dummy; END IF; -+ SELECT setting INTO spath_tmp FROM pg_settings WHERE name = 'search_path'; -+ IF spath_tmp <> dest_schema THEN -+ -- change it to target schema and don't forget to change it back after we execute the DDL -+ spath = 'SET search_path = "' || dest_schema || '"'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: changing search_path --> %', spath; END IF; -+ EXECUTE spath; -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed to %', v_dummy; END IF; -+ END IF; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tabledef04:%', qry; END IF; -+ EXECUTE qry; -+ -+ -- Issue#103 -+ -- Set search path back to what it was -+ spath = 'SET search_path = "' || spath_tmp || '"'; -+ EXECUTE spath; -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path changed back to %', v_dummy; END IF; -+ -+ -- issue#91 fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER TABLE IF EXISTS ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' OWNER TO ' || tblowner; -+ EXECUTE buffer3; -+ END IF; -+ -+ END IF; -+ -- loop for child tables and alter them to attach to parent for specific partition method. -+ -- Issue#103 fix: only loop for the table we are currently processing, tblname! -+ FOR aname, part_range, object IN -+ SELECT quote_ident(dest_schema) || '.' || c1.relname as tablename, pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) as partrange, quote_ident(dest_schema) || '.' || c2.relname as object -+ FROM pg_catalog.pg_class c1, pg_namespace n, pg_catalog.pg_inherits i, pg_class c2 -+ WHERE n.nspname = quote_ident(source_schema) AND c1.relnamespace = n.oid AND c1.relkind = 'r' -+ -- Issue#103: added this condition to only work on current partitioned table. The problem was regression testing previously only worked on one partition table clone case -+ AND c2.relname = tblname AND -+ c1.relispartition AND c1.oid=i.inhrelid AND i.inhparent = c2.oid AND c2.relnamespace = n.oid ORDER BY pg_catalog.pg_get_expr(c1.relpartbound, c1.oid) = 'DEFAULT', -+ c1.oid::pg_catalog.regclass::pg_catalog.text -+ LOOP -+ qry := 'ALTER TABLE ONLY ' || object || ' ATTACH PARTITION ' || aname || ' ' || part_range || ';'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: %',qry; END IF; -+ -- issue#91, not sure if we need to do this for child tables -+ -- issue#95 we dont set ownership here -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ IF NOT bNoOwner THEN -+ NULL; -+ END IF; -+ ELSE -+ EXECUTE qry; -+ IF NOT bNoOwner THEN -+ NULL; -+ END IF; -+ END IF; -+ END LOOP; -+ END IF; -+ -+ -- INCLUDING ALL creates new index names, we restore them to the old name. -+ -- There should be no conflicts since they live in different schemas -+ FOR ix_old_name, ix_new_name IN -+ SELECT old.indexname, new.indexname -+ FROM pg_indexes old, pg_indexes new -+ WHERE old.schemaname = source_schema -+ AND new.schemaname = dest_schema -+ AND old.tablename = new.tablename -+ AND old.tablename = tblname -+ AND old.indexname <> new.indexname -+ AND regexp_replace(old.indexdef, E'.*USING','') = regexp_replace(new.indexdef, E'.*USING','') -+ ORDER BY old.indexdef, new.indexdef -+ LOOP -+ lastsql = ''; -+ IF bDDLOnly THEN -+ RAISE INFO '%', 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; -+ ELSE -+ -- The SELECT query above may return duplicate names when a column is -+ -- indexed twice the same manner with 2 different names. Therefore, to -+ -- avoid a 'relation "xxx" already exists' we test if the index name -+ -- is in use or free. Skipping existing index will fallback on unused -+ -- ones and every duplicate will be mapped to distinct old names. -+ IF NOT EXISTS ( -+ SELECT TRUE -+ FROM pg_indexes -+ WHERE schemaname = dest_schema -+ AND tablename = tblname -+ AND indexname = quote_ident(ix_old_name)) -+ AND EXISTS ( -+ SELECT TRUE -+ FROM pg_indexes -+ WHERE schemaname = dest_schema -+ AND tablename = tblname -+ AND indexname = quote_ident(ix_new_name)) -+ THEN -+ EXECUTE 'ALTER INDEX ' || quote_ident(dest_schema) || '.' || quote_ident(ix_new_name) || ' RENAME TO ' || quote_ident(ix_old_name) || ';'; -+ END IF; -+ END IF; -+ END LOOP; - -+ IF bData THEN -+ -- Insert records from source table -+ -+ -- 2021-03-03 MJV FIX -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(tblname); -+ -+ -- Issue#86 fix: -+ -- IF data_type = 'USER-DEFINED' THEN -+ IF bDebug THEN RAISE NOTICE 'DEBUG: includerecs branch table=% data_type=% isgenerated=%', tblname, data_type, isGenerated; END IF; -+ IF data_type = 'USER-DEFINED' OR isGenerated = 'ALWAYS' THEN -+ -+ -- RAISE WARNING 'Bypassing copying rows for table (%) with user-defined data types. You must copy them manually.', tblname; -+ -- won't work --> INSERT INTO clone1.address (id2, id3, addr) SELECT cast(id2 as clone1.udt_myint), cast(id3 as clone1.udt_myint), addr FROM sample.address; -+ -- Issue#101 --> INSERT INTO clone1.address2 (id2, id3, addr) SELECT id2::text::clone1.udt_myint, id3::text::clone1.udt_myint, addr FROM sample.address; -+ -+ -- Issue#79 implementation follows -+ -- COPY sample.statuses(id, s) TO '/tmp/statuses.txt' WITH DELIMITER AS ','; -+ -- COPY sample_clone1.statuses FROM '/tmp/statuses.txt' (DELIMITER ',', NULL ''); -+ -- Issue#101 fix: use text cast to get around the problem. -+ IF bFileCopy THEN -+ IF bWindows THEN -+ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''C:\WINDOWS\TEMP\cloneschema.tmp'' WITH DELIMITER AS '','';'; -+ tblarray2 := tblarray2 || buffer2; -+ -- Issue #81 reformat COPY command for upload -+ -- buffer2:= 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL '''');'; -+ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''C:\WINDOWS\TEMP\cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; -+ tblarray2 := tblarray2 || buffer2; -+ ELSE -+ buffer2 := 'COPY ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ' TO ''/tmp/cloneschema.tmp'' WITH DELIMITER AS '','';'; -+ tblarray2 := tblarray2 || buffer2; -+ -- Issue #81 reformat COPY command for upload -+ -- buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL '''');'; -+ -- works--> COPY sample.timestamptbl2 FROM '/tmp/cloneschema.tmp' WITH (DELIMITER ',', NULL '\N', FORMAT CSV) ; -+ buffer2 := 'COPY ' || quote_ident(dest_schema) || '.' || quote_ident(tblname) || ' FROM ''/tmp/cloneschema.tmp'' (DELIMITER '','', NULL ''\N'', FORMAT CSV);'; -+ tblarray2 := tblarray2 || buffer2; -+ END IF; -+ ELSE -+ -- Issue#101: assume direct copy with text cast, add to separate array -+ SELECT * INTO buffer3 FROM public.get_insert_stmt_ddl(quote_ident(source_schema), quote_ident(dest_schema), quote_ident(tblname), True); -+ tblarray3 := tblarray3 || buffer3; -+ END IF; -+ ELSE -+ -- bypass child tables since we populate them when we populate the parents -+ IF bDebug THEN RAISE NOTICE 'DEBUG: tblname=% bRelispart=NA relknd=% l_child=% bChild=%', tblname, relknd, l_child, bChild; END IF; -+ -+ IF NOT bChild THEN -+ -- Issue#75: Must defer population of tables until child tables have been added to parents -+ -- Issue#101 Offer alternative of copy to/from file. Although originally intended for tables with UDTs, it is now expanded to handle all cases for performance improvement perhaps for large tables. -+ -- buffer2 := 'INSERT INTO ' || buffer || buffer3 || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; -+ buffer2 := 'INSERT INTO ' || buffer || ' SELECT * FROM ' || quote_ident(source_schema) || '.' || quote_ident(tblname) || ';'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: buffer2=%',buffer2; END IF; -+ IF bFileCopy THEN -+ tblarray2:= tblarray2 || buffer2; -+ ELSE -+ tblarray := tblarray || buffer2; -+ END IF; -+ END IF; -+ END IF; -+ END IF; -+ -+ -- Issue#61 FIX: use set_config for empty string -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ -+ FOR column_, default_ IN -+ SELECT column_name::text, -+ REPLACE(column_default::text, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') -+ FROM information_schema.COLUMNS -+ WHERE table_schema = source_schema -+ AND TABLE_NAME = tblname -+ AND column_default LIKE 'nextval(%' || quote_ident(source_schema) || '%::regclass)' -+ LOOP -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on column name -+ buffer2 = 'ALTER TABLE ' || buffer || ' ALTER COLUMN ' || quote_ident(column_) || ' SET DEFAULT ' || default_ || ';'; -+ IF bDDLOnly THEN -+ -- May need to come back and revisit this since previous sql will not return anything since no schema as created! -+ RAISE INFO '%', buffer2; -+ ELSE -+ EXECUTE buffer2; -+ END IF; - END LOOP; -- RAISE NOTICE ' MAT VIEWS cloned: %', LPAD(cnt::text, 5, ' '); - ---- Create functions -- action := 'Functions'; -+ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -+ END LOOP; -+ END IF; -+ -- end of 90600 branch -+ -+ RAISE NOTICE ' TABLES cloned: %', LPAD(cnt::text, 5, ' '); -+ -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: search_path=%', v_dummy; END IF; -+ -+ -- Assigning sequences to table columns. -+ action := 'Sequences assigning'; - cnt := 0; -- FOR func_oid IN -- SELECT oid -- FROM pg_proc -- WHERE pronamespace = src_oid -+ FOR object IN -+ SELECT sequence_name::text -+ FROM information_schema.sequences -+ WHERE sequence_schema = quote_ident(source_schema) - LOOP - cnt := cnt + 1; -- SELECT pg_get_functiondef(func_oid) INTO qry; -- SELECT replace(qry, source_schema, dest_schema) INTO dest_qry; -- IF ddl_only THEN -- RAISE INFO '%', dest_qry; -+ srctbl := quote_ident(source_schema) || '.' || quote_ident(object); -+ -+ -- Get owning column, inspired from Sadique Ali post at: -+ -- https://sadique.io/blog/2019/05/07/viewing-sequence-ownership-information-in-postgres/ -+ -- Fixed via pull request#109 -+ SELECT ' OWNED BY ' -+ || quote_ident(dest_schema) -+ || '.' -+ || quote_ident(dc.relname) -+ || '.' -+ || quote_ident(a.attname) -+ INTO sq_owned -+ FROM pg_class AS c -+ JOIN pg_namespace n ON c.relnamespace = n.oid -+ JOIN pg_depend AS d ON c.relfilenode = d.objid -+ JOIN pg_class AS dc ON ( -+ d.refobjid = dc.relfilenode -+ AND dc.relnamespace = n.oid -+ ) -+ JOIN pg_attribute AS a ON ( -+ a.attnum = d.refobjsubid -+ AND a.attrelid = d.refobjid -+ ) -+ WHERE n.nspname = quote_ident(source_schema) -+ AND c.relkind = 'S' -+ AND c.relname = object; -+ -+ IF sq_owned IS NOT NULL THEN -+ qry := 'ALTER SEQUENCE ' -+ || quote_ident(dest_schema) -+ || '.' -+ || quote_ident(object) -+ || sq_owned -+ || ';'; -+ -+ IF bDDLOnly THEN -+ RAISE NOTICE 'DEBUG: %',qry; -+ RAISE INFO '%', qry; -+ ELSE -+ EXECUTE qry; -+ END IF; -+ -+ END IF; -+ -+ END LOOP; -+ RAISE NOTICE ' SEQUENCES set: %', LPAD(cnt::text, 5, ' '); -+ -+ -- Update IDENTITY sequences to the last value, bypass 9.6 versions -+ IF sq_server_version_num > 90624 THEN -+ action := 'Identity updating'; -+ cnt := 0; -+ FOR object, sq_last_value IN -+ SELECT sequencename::text, COALESCE(last_value, -999) from pg_sequences where schemaname = quote_ident(source_schema) -+ AND NOT EXISTS -+ (select 1 from information_schema.sequences where sequence_schema = quote_ident(source_schema) and sequence_name = sequencename) -+ LOOP -+ IF sq_last_value = -999 THEN -+ continue; -+ END IF; -+ cnt := cnt + 1; -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(object); -+ IF bData THEN -+ EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; -+ ELSE -+ if bDDLOnly THEN -+ -- fix#63 -+ RAISE INFO '%', 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; -+ ELSE -+ -- fix#63 -+ EXECUTE 'SELECT setval( ''' || buffer || ''', ' || sq_last_value || ', ' || sq_is_called || ');' ; -+ END IF; -+ END IF; -+ END LOOP; -+ -- Fixed Issue#107: set lpad from 2 to 5 -+ RAISE NOTICE ' IDENTITIES set: %', LPAD(cnt::text, 5, ' '); -+ ELSE -+ -- Fixed Issue#107: set lpad from 2 to 5 -+ RAISE NOTICE ' IDENTITIES set: %', LPAD('-1'::text, 5, ' '); -+ END IF; -+ -+ -- Issue#78 forces us to defer FKeys until the end since we previously did row copies before FKeys -+ -- add FK constraint -+ -- action := 'FK Constraints'; -+ -+ -- Issue#62: Add comments on indexes, and then removed them from here and reworked later below. -+ -+ -- Issue 90: moved functions to here, before views or MVs that might use them -+ -- Create functions -+ action := 'Functions'; -+ cnt := 0; -+ -- MJV FIX per issue# 34 -+ -- SET search_path = ''; -+ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -+ -+ -- Fixed Issue#65 -+ -- Fixed Issue#97 -+ -- FOR func_oid IN SELECT oid FROM pg_proc WHERE pronamespace = src_oid AND prokind != 'a' -+ IF is_prokind THEN -+ FOR func_oid, func_owner, func_name, func_args, func_argno, buffer3 IN -+ SELECT p.oid, pg_catalog.pg_get_userbyid(p.proowner), p.proname, oidvectortypes(p.proargtypes), p.pronargs, -+ CASE WHEN prokind = 'p' THEN 'PROCEDURE' WHEN prokind = 'f' THEN 'FUNCTION' ELSE '' END -+ FROM pg_proc p WHERE p.pronamespace = src_oid AND p.prokind != 'a' -+ LOOP -+ cnt := cnt + 1; -+ SELECT pg_get_functiondef(func_oid) -+ INTO qry; -+ -+ SELECT replace(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO dest_qry; -+ IF bDDLOnly THEN -+ RAISE INFO '%;', dest_qry; -+ -- Issue#91 Fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ IF func_argno = 0 THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER % %() OWNER TO %', buffer3, quote_ident(dest_schema) || '.' || quote_ident(func_name), '"' || func_owner || '";'; -+ ELSE -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO 'ALTER % % OWNER TO %', buffer3, quote_ident(dest_schema) || '.' || quote_ident(func_name) || '(' || func_args || ')', '"' || func_owner || '";'; -+ END IF; -+ END IF; -+ ELSE -+ IF bDebug THEN RAISE NOTICE 'DEBUG: %', dest_qry; END IF; -+ EXECUTE dest_qry; -+ -+ -- Issue#91 Fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ IF func_argno = 0 THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ dest_qry = 'ALTER ' || buffer3 || ' ' || quote_ident(dest_schema) || '.' || quote_ident(func_name) || '() OWNER TO ' || '"' || func_owner || '";'; -+ ELSE -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ dest_qry = 'ALTER ' || buffer3 || ' ' || quote_ident(dest_schema) || '.' || quote_ident(func_name) || '(' || func_args || ') OWNER TO ' || '"' || func_owner || '";'; -+ END IF; -+ END IF; -+ EXECUTE dest_qry; -+ END IF; -+ END LOOP; -+ ELSE -+ FOR func_oid IN SELECT oid -+ FROM pg_proc -+ WHERE pronamespace = src_oid AND not proisagg -+ LOOP -+ cnt := cnt + 1; -+ SELECT pg_get_functiondef(func_oid) INTO qry; -+ SELECT replace(qry, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO dest_qry; -+ IF bDDLOnly THEN -+ RAISE INFO '%;', dest_qry; -+ ELSE -+ EXECUTE dest_qry; -+ END IF; -+ END LOOP; -+ END IF; -+ -+ -- Create aggregate functions. -+ -- Fixed Issue#65 -+ -- FOR func_oid IN SELECT oid FROM pg_proc WHERE pronamespace = src_oid AND prokind = 'a' -+ IF is_prokind THEN -+ FOR func_oid IN -+ SELECT oid -+ FROM pg_proc -+ WHERE pronamespace = src_oid AND prokind = 'a' -+ LOOP -+ cnt := cnt + 1; -+ SELECT -+ 'CREATE AGGREGATE ' -+ || dest_schema -+ || '.' -+ || p.proname -+ || '(' -+ -- || format_type(a.aggtranstype, NULL) -+ -- Issue#65 Fixes for specific datatype mappings -+ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8' -+ WHEN format_type(a.aggtranstype, NULL) = 'anyarray' THEN 'anyelement' -+ ELSE format_type(a.aggtranstype, NULL) END -+ || ') (sfunc = ' -+ || regexp_replace(a.aggtransfn::text, '(^|\W)' || quote_ident(source_schema) || '\.', '\1' || quote_ident(dest_schema) || '.') -+ || ', stype = ' -+ -- || format_type(a.aggtranstype, NULL) -+ -- Issue#65 Fixes for specific datatype mappings -+ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8[]' ELSE format_type(a.aggtranstype, NULL) END -+ || CASE -+ WHEN op.oprname IS NULL THEN '' -+ ELSE ', sortop = ' || op.oprname -+ END -+ || CASE -+ WHEN a.agginitval IS NULL THEN '' -+ ELSE ', initcond = ''' || a.agginitval || '''' -+ END -+ || ')' -+ INTO dest_qry -+ FROM pg_proc p -+ JOIN pg_aggregate a ON a.aggfnoid = p.oid -+ LEFT JOIN pg_operator op ON op.oid = a.aggsortop -+ WHERE p.oid = func_oid; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%;', dest_qry; -+ ELSE -+ EXECUTE dest_qry; -+ END IF; -+ -+ END LOOP; -+ RAISE NOTICE ' FUNCTIONS cloned: %', LPAD(cnt::text, 5, ' '); -+ - ELSE -- EXECUTE dest_qry; -+ FOR func_oid IN SELECT oid FROM pg_proc WHERE pronamespace = src_oid AND proisagg -+ LOOP -+ cnt := cnt + 1; -+ SELECT -+ 'CREATE AGGREGATE ' -+ || dest_schema -+ || '.' -+ || p.proname -+ || '(' -+ -- || format_type(a.aggtranstype, NULL) -+ -- Issue#65 Fixes for specific datatype mappings -+ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8' -+ WHEN format_type(a.aggtranstype, NULL) = 'anyarray' THEN 'anyelement' -+ ELSE format_type(a.aggtranstype, NULL) END -+ || ') (sfunc = ' -+ || regexp_replace(a.aggtransfn::text, '(^|\W)' || quote_ident(source_schema) || '\.', '\1' || quote_ident(dest_schema) || '.') -+ || ', stype = ' -+ -- || format_type(a.aggtranstype, NULL) -+ -- Issue#65 Fixes for specific datatype mappings -+ || CASE WHEN format_type(a.aggtranstype, NULL) = 'double precision[]' THEN 'float8[]' ELSE format_type(a.aggtranstype, NULL) END -+ || CASE -+ WHEN op.oprname IS NULL THEN '' -+ ELSE ', sortop = ' || op.oprname -+ END -+ || CASE -+ WHEN a.agginitval IS NULL THEN '' -+ ELSE ', initcond = ''' || a.agginitval || '''' -+ END -+ || ')' -+ INTO dest_qry -+ FROM pg_proc p -+ JOIN pg_aggregate a ON a.aggfnoid = p.oid -+ LEFT JOIN pg_operator op ON op.oid = a.aggsortop -+ WHERE p.oid = func_oid; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%;', dest_qry; -+ ELSE -+ EXECUTE dest_qry; -+ END IF; -+ -+ END LOOP; -+ RAISE NOTICE ' FUNCTIONS cloned: %', LPAD(cnt::text, 5, ' '); - END IF; - -+ -- Create views -+ action := 'Views'; -+ -+ -- Issue#61 FIX: use set_config for empty string -+ -- MJV FIX #43: also had to reset search_path from source schema to empty. -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) -+ INTO v_dummy; -+ -+ cnt := 0; -+ --FOR object IN -+ -- SELECT table_name::text, view_definition -+ -- FROM information_schema.views -+ -- WHERE table_schema = quote_ident(source_schema) -+ -+ -- Issue#73 replace loop query to handle dependencies -+ -- Issue#91 get view_owner -+ FOR srctbl, aname, view_owner, object IN -+ WITH RECURSIVE views AS ( -+ SELECT n.nspname as schemaname, v.relname as tablename, v.oid::regclass AS viewname, -+ v.relkind = 'm' AS is_materialized, pg_catalog.pg_get_userbyid(v.relowner) as owner, -+ 1 AS level -+ FROM pg_depend AS d -+ JOIN pg_rewrite AS r -+ ON r.oid = d.objid -+ JOIN pg_class AS v -+ ON v.oid = r.ev_class -+ JOIN pg_namespace n -+ ON n.oid = v.relnamespace -+ -- WHERE v.relkind IN ('v', 'm') -+ WHERE v.relkind IN ('v') -+ AND d.classid = 'pg_rewrite'::regclass -+ AND d.refclassid = 'pg_class'::regclass -+ AND d.deptype = 'n' -+ UNION -+ -- add the views that depend on these -+ SELECT n.nspname as schemaname, v.relname as tablename, v.oid::regclass AS viewname, -+ v.relkind = 'm', pg_catalog.pg_get_userbyid(v.relowner) as owner, -+ views.level + 1 -+ FROM views -+ JOIN pg_depend AS d -+ ON d.refobjid = views.viewname -+ JOIN pg_rewrite AS r -+ ON r.oid = d.objid -+ JOIN pg_class AS v -+ ON v.oid = r.ev_class -+ JOIN pg_namespace n -+ ON n.oid = v.relnamespace -+ -- WHERE v.relkind IN ('v', 'm') -+ WHERE v.relkind IN ('v') -+ AND d.classid = 'pg_rewrite'::regclass -+ AND d.refclassid = 'pg_class'::regclass -+ AND d.deptype = 'n' -+ AND v.oid <> views.viewname -+ ) -+ SELECT tablename, viewname, owner, format('CREATE OR REPLACE%s VIEW %s AS%s', -+ CASE WHEN is_materialized -+ THEN ' MATERIALIZED' -+ ELSE '' -+ END, -+ viewname, -+ pg_get_viewdef(viewname)) -+ FROM views -+ WHERE schemaname = quote_ident(source_schema) -+ GROUP BY schemaname, tablename, viewname, owner, is_materialized -+ ORDER BY max(level), schemaname, tablename -+ LOOP -+ cnt := cnt + 1; -+ -- Issue#73 replace logic based on new loop sql -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(aname); -+ -- MJV FIX: #43 -+ -- SELECT view_definition INTO v_def -+ -- SELECT REPLACE(view_definition, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO v_def -+ -- FROM information_schema.views -+ -- WHERE table_schema = quote_ident(source_schema) -+ -- AND table_name = quote_ident(object); -+ SELECT REPLACE(object, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO v_def; -+ -- NOTE: definition already includes the closing statement semicolon -+ SELECT REPLACE(aname, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO buffer3; -+ IF bDDLOnly THEN -+ RAISE INFO '%', v_def; -+ -- Issue#91 Fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ -- RAISE INFO 'ALTER TABLE % OWNER TO %', buffer3, view_owner || ';'; -+ RAISE INFO 'ALTER TABLE % OWNER TO %', buffer3, '"' ||view_owner || '";'; -+ END IF; -+ ELSE -+ -- EXECUTE 'CREATE OR REPLACE VIEW ' || buffer || ' AS ' || v_def; -+ EXECUTE v_def; -+ -- Issue#73: commented out comment logic for views since we do it elsewhere now. -+ -- Issue#91 Fix -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ v_def = 'ALTER TABLE ' || buffer3 || ' OWNER TO ' || '"' || view_owner || '";'; -+ EXECUTE v_def; -+ END IF; -+ END IF; - END LOOP; -- RAISE NOTICE ' FUNCTIONS cloned: %', LPAD(cnt::text, 5, ' '); -+ RAISE NOTICE ' VIEWS cloned: %', LPAD(cnt::text, 5, ' '); -+ -+ -- Create Materialized views -+ action := 'Mat. Views'; -+ cnt := 0; -+ -- Issue#91 get view_owner -+ FOR object, view_owner, v_def IN -+ SELECT matviewname::text, '"' || matviewowner::text || '"', replace(definition,';','') FROM pg_catalog.pg_matviews WHERE schemaname = quote_ident(source_schema) -+ LOOP -+ cnt := cnt + 1; -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on target schema and object -+ buffer := quote_ident(dest_schema) || '.' || quote_ident(object); -+ -+ -- MJV FIX: #72 remove source schema in MV def -+ SELECT REPLACE(v_def, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') INTO buffer2; -+ -+ IF bData THEN -+ -- issue#98 defer creation until after regular tables are populated. Also defer the ownership as well. -+ -- EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH DATA;' ; -+ buffer3 = 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH DATA;'; -+ mvarray := mvarray || buffer3; -+ -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- buffer3 = 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; -+ -- EXECUTE buffer3; -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; -+ mvarray := mvarray || buffer3; -+ END IF; -+ ELSE -+ IF bDDLOnly THEN -+ RAISE INFO '%', 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH NO DATA;' ; -+ -- Issue#91 -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ RAISE INFO '%', 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; -+ END IF; -+ ELSE -+ EXECUTE 'CREATE MATERIALIZED VIEW ' || buffer || ' AS ' || buffer2 || ' WITH NO DATA;' ; -+ -- Issue#91 -+ -- issue#95 -+ IF NOT bNoOwner THEN -+ -- Fixed Issue#108: double-quote roles in case they have special characters -+ buffer3 = 'ALTER MATERIALIZED VIEW ' || buffer || ' OWNER TO ' || view_owner || ';' ; -+ EXECUTE buffer3; -+ END IF; -+ END IF; -+ END IF; -+ SELECT coalesce(obj_description(oid), '') into adef from pg_class where relkind = 'm' and relname = object; -+ IF adef <> '' THEN -+ IF bDDLOnly THEN -+ RAISE INFO '%', 'COMMENT ON MATERIALIZED VIEW ' || quote_ident(dest_schema) || '.' || object || ' IS ''' || adef || ''';'; -+ ELSE -+ -- Issue#$98: also defer if copy rows is on since we defer MVIEWS in that case -+ IF bData THEN -+ buffer3 = 'COMMENT ON MATERIALIZED VIEW ' || quote_ident(dest_schema) || '.' || object || ' IS ''' || adef || ''';'; -+ mvarray = mvarray || buffer3; -+ ELSE -+ EXECUTE 'COMMENT ON MATERIALIZED VIEW ' || quote_ident(dest_schema) || '.' || object || ' IS ''' || adef || ''';'; -+ END IF; -+ -+ END IF; -+ END IF; -+ -+ FOR aname, adef IN -+ SELECT indexname, replace(indexdef, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.') as newdef FROM pg_indexes where schemaname = quote_ident(source_schema) and tablename = object order by indexname -+ LOOP -+ IF bDDLOnly THEN -+ RAISE INFO '%', adef || ';'; -+ ELSE -+ EXECUTE adef || ';'; -+ END IF; -+ END LOOP; -+ -+ END LOOP; -+ RAISE NOTICE ' MAT VIEWS cloned: %', LPAD(cnt::text, 5, ' '); -+ -+ -- Issue 90 Move create functions to before views - - -- MV: Create Triggers -+ -+ -- MJV FIX: #38 -+ -- EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -+ -+ -- Issue#61 FIX: use set_config for empty string -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ - action := 'Triggers'; - cnt := 0; - FOR arec IN -- SELECT trigger_schema, trigger_name, event_object_table, action_order, action_condition, action_statement, action_orientation, action_timing, array_to_string(array_agg(event_manipulation::text), ' OR '), -- 'CREATE TRIGGER ' || trigger_name || ' ' || action_timing || ' ' || array_to_string(array_agg(event_manipulation::text), ' OR ') || ' ON ' || quote_ident(dest_schema) || '.' || event_object_table || -- ' FOR EACH ' || action_orientation || ' ' || action_statement || ';' as TRIG_DDL -- FROM information_schema.triggers where trigger_schema = quote_ident(source_schema) GROUP BY 1,2,3,4,5,6,7,8 -+ -- 2021-03-09 MJV FIX: #40 fixed sql to get the def using pg_get_triggerdef() sql -+ SELECT n.nspname, c.relname, t.tgname, p.proname, REPLACE(pg_get_triggerdef(t.oid), quote_ident(source_schema), quote_ident(dest_schema)) || ';' AS trig_ddl -+ FROM pg_trigger t, pg_class c, pg_namespace n, pg_proc p -+ WHERE n.nspname = quote_ident(source_schema) -+ AND n.oid = c.relnamespace -+ AND c.relkind in ('r','p') -+ AND n.oid = p.pronamespace -+ AND c.oid = t.tgrelid -+ AND p.oid = t.tgfoid -+ ORDER BY c.relname, t.tgname - LOOP - BEGIN - cnt := cnt + 1; -- IF ddl_only THEN -+ IF bDDLOnly THEN - RAISE INFO '%', arec.trig_ddl; - ELSE - EXECUTE arec.trig_ddl; -@@ -474,55 +2444,383 @@ - END LOOP; - RAISE NOTICE ' TRIGGERS cloned: %', LPAD(cnt::text, 5, ' '); - -- -- --------------------- -- -- MV: Permissions: Defaults -- -- --------------------- -- action := 'PRIVS: Defaults'; -+ -+ -- MV: Create Rules -+ -- Fixes Issue#59 Implement Rules -+ action := 'Rules'; - cnt := 0; - FOR arec IN -- SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "owner", n.nspname AS schema, -- CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS atype, -- d.defaclacl as defaclacl, pg_catalog.array_to_string(d.defaclacl, ',') as defaclstr -- FROM pg_catalog.pg_default_acl d LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = d.defaclnamespace) WHERE n.nspname IS NOT NULL and n.nspname = quote_ident(source_schema) ORDER BY 3, 2, 1 -+ SELECT regexp_replace(definition, E'[\\n\\r]+', ' ', 'g' ) as definition -+ FROM pg_rules -+ WHERE schemaname = quote_ident(source_schema) - LOOP -- BEGIN -- -- RAISE NOTICE 'owner=% type=% defaclacl=% defaclstr=%', arec.owner, arec.atype, arec.defaclacl, arec.defaclstr; -+ cnt := cnt + 1; -+ buffer := REPLACE(arec.definition, quote_ident(source_schema) || '.', quote_ident(dest_schema) || '.'); -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ END LOOP; -+ RAISE NOTICE ' RULES cloned: %', LPAD(cnt::text, 5, ' '); -+ -+ -+ -- MV: Create Policies -+ -- Fixes Issue#66 Implement Security policies for RLS -+ action := 'Policies'; -+ cnt := 0; -+ -- #106 Handle 9.6 which doesn't have "permissive" -+ IF sq_server_version_num > 90624 THEN -+ FOR arec IN -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on policy, tablename -+ SELECT schemaname as schemaname, tablename as tablename, 'CREATE POLICY ' || policyname || ' ON ' || quote_ident(dest_schema) || '.' || quote_ident(tablename) || ' AS ' || permissive || ' FOR ' || cmd || ' TO ' -+ || array_to_string(roles, ',', '*') || ' USING (' || regexp_replace(qual, E'[\\n\\r]+', ' ', 'g' ) || ')' -+ || CASE WHEN with_check IS NOT NULL THEN ' WITH CHECK (' ELSE '' END || coalesce(with_check, '') || CASE WHEN with_check IS NOT NULL THEN ');' ELSE ';' END as definition -+ FROM pg_policies -+ WHERE schemaname = quote_ident(source_schema) -+ ORDER BY policyname -+ LOOP -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.definition; -+ ELSE -+ EXECUTE arec.definition; -+ END IF; -+ -+ -- Issue#76: Enable row security if indicated -+ SELECT c.relrowsecurity INTO abool FROM pg_class c, pg_namespace n where n.nspname = quote_ident(arec.schemaname) AND n.oid = c.relnamespace AND c.relname = quote_ident(arec.tablename) and c.relkind = 'r'; -+ IF abool THEN -+ buffer = 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || arec.tablename || ' ENABLE ROW LEVEL SECURITY;'; -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ END IF; -+ END LOOP; -+ ELSE -+ -- handle 9.6 versions -+ FOR arec IN -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on policy, tablename -+ SELECT schemaname as schemaname, tablename as tablename, 'CREATE POLICY ' || policyname || ' ON ' || quote_ident(dest_schema) || '.' || quote_ident(tablename) || ' FOR ' || cmd || ' TO ' -+ || array_to_string(roles, ',', '*') || ' USING (' || regexp_replace(qual, E'[\\n\\r]+', ' ', 'g' ) || ')' -+ || CASE WHEN with_check IS NOT NULL THEN ' WITH CHECK (' ELSE '' END || coalesce(with_check, '') || CASE WHEN with_check IS NOT NULL THEN ');' ELSE ';' END as definition -+ FROM pg_policies -+ WHERE schemaname = quote_ident(source_schema) -+ ORDER BY policyname -+ LOOP -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.definition; -+ ELSE -+ EXECUTE arec.definition; -+ END IF; -+ -+ -- Issue#76: Enable row security if indicated -+ SELECT c.relrowsecurity INTO abool FROM pg_class c, pg_namespace n where n.nspname = quote_ident(arec.schemaname) AND n.oid = c.relnamespace AND c.relname = quote_ident(arec.tablename) and c.relkind = 'r'; -+ IF abool THEN -+ buffer = 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || arec.tablename || ' ENABLE ROW LEVEL SECURITY;'; -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ END IF; -+ END LOOP; -+ END IF; -+ RAISE NOTICE ' POLICIES cloned: %', LPAD(cnt::text, 5, ' '); -+ -+ -+ -- MJV Fixed #62 for comments (PASS 1) -+ action := 'Comments1'; -+ cnt := 0; -+ FOR qry IN -+ -- Issue#74 Fix: Change schema from source to target. Also, do not include comments on foreign tables since we do not clone foreign tables at this time. -+ SELECT 'COMMENT ON ' || CASE WHEN c.relkind in ('r','p') AND a.attname IS NULL THEN 'TABLE ' WHEN c.relkind in ('r','p') AND -+ a.attname IS NOT NULL THEN 'COLUMN ' WHEN c.relkind = 'f' THEN 'FOREIGN TABLE ' WHEN c.relkind = 'm' THEN 'MATERIALIZED VIEW ' WHEN c.relkind = 'v' THEN 'VIEW ' -+ WHEN c.relkind = 'i' THEN 'INDEX ' WHEN c.relkind = 'S' THEN 'SEQUENCE ' ELSE 'XX' END || quote_ident(dest_schema) || '.' || CASE WHEN c.relkind in ('r','p') AND -+ -- Issue#78: handle case-sensitive names with quote_ident() -+ a.attname IS NOT NULL THEN quote_ident(c.relname) || '.' || a.attname ELSE quote_ident(c.relname) END || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_class c -+ JOIN pg_namespace n ON (n.oid = c.relnamespace) -+ LEFT JOIN pg_description d ON (c.oid = d.objoid) -+ LEFT JOIN pg_attribute a ON (c.oid = a.attrelid -+ AND a.attnum > 0 and a.attnum = d.objsubid) -+ WHERE c.relkind <> 'f' AND d.description IS NOT NULL AND n.nspname = quote_ident(source_schema) -+ ORDER BY ddl -+ LOOP -+ cnt := cnt + 1; -+ -+ -- BAD : "COMMENT ON SEQUENCE sample_clone2.CaseSensitive_ID_seq IS 'just a comment on CaseSensitive sequence';" -+ -- GOOD: "COMMENT ON SEQUENCE "CaseSensitive_ID_seq" IS 'just a comment on CaseSensitive sequence';" -+ -+ -- Issue#98 For MVs we create comments when we create the MVs -+ IF substring(qry,1,28) = 'COMMENT ON MATERIALIZED VIEW' THEN -+ IF bDebug THEN RAISE NOTICE 'DEBUG: deferring comments on MVs'; END IF; -+ cnt = cnt - 1; -+ continue; -+ END IF; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ ELSE -+ EXECUTE qry; -+ END IF; -+ END LOOP; -+ RAISE NOTICE ' COMMENTS(1) cloned: %', LPAD(cnt::text, 5, ' '); -+ -+ -- MJV Fixed #62 for comments (PASS 2) -+ action := 'Comments2'; -+ cnt2 := 0; -+ IF is_prokind THEN -+ FOR qry IN -+ -- Issue#74 Fix: Change schema from source to target. -+ SELECT 'COMMENT ON SCHEMA ' || quote_ident(dest_schema) || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ from pg_namespace n, pg_description d where d.objoid = n.oid and n.nspname = quote_ident(source_schema) -+ UNION -+ -- Issue#74 Fix: need to replace source schema inline -+ -- SELECT 'COMMENT ON TYPE ' || pg_catalog.format_type(t.oid, NULL) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl -+ SELECT 'COMMENT ON TYPE ' || REPLACE(pg_catalog.format_type(t.oid, NULL), quote_ident(source_schema), quote_ident(dest_schema)) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl -+ FROM pg_catalog.pg_type t -+ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)) -+ AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid) -+ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default -+ AND pg_catalog.obj_description(t.oid, 'pg_type') IS NOT NULL and t.typtype = 'c' -+ UNION -+ -- Issue#78: handle case-sensitive names with quote_ident() -+ SELECT 'COMMENT ON COLLATION ' || quote_ident(dest_schema) || '.' || quote_ident(c.collname) || ' IS ''' || pg_catalog.obj_description(c.oid, 'pg_collation') || ''';' as ddl -+ FROM pg_catalog.pg_collation c, pg_catalog.pg_namespace n -+ WHERE n.oid = c.collnamespace AND c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding())) -+ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default AND pg_catalog.obj_description(c.oid, 'pg_collation') IS NOT NULL -+ UNION -+ SELECT 'COMMENT ON ' || CASE WHEN p.prokind = 'f' THEN 'FUNCTION ' WHEN p.prokind = 'p' THEN 'PROCEDURE ' WHEN p.prokind = 'a' THEN 'AGGREGATE ' END || -+ quote_ident(dest_schema) || '.' || p.proname || ' (' || oidvectortypes(p.proargtypes) || ')' -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_catalog.pg_namespace n -+ JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid -+ JOIN pg_description d ON (d.objoid = p.oid) -+ WHERE n.nspname = quote_ident(source_schema) -+ UNION -+ SELECT 'COMMENT ON POLICY ' || p1.policyname || ' ON ' || quote_ident(dest_schema) || '.' || p1.tablename || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_policies p1, pg_policy p2, pg_class c, pg_namespace n, pg_description d -+ WHERE p1.schemaname = n.nspname AND p1.tablename = c.relname AND n.oid = c.relnamespace -+ AND c.relkind in ('r','p') AND p1.policyname = p2.polname AND d.objoid = p2.oid AND p1.schemaname = quote_ident(source_schema) -+ UNION -+ SELECT 'COMMENT ON DOMAIN ' || quote_ident(dest_schema) || '.' || t.typname || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_catalog.pg_type t -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ JOIN pg_catalog.pg_description d ON d.classoid = t.tableoid AND d.objoid = t.oid AND d.objsubid = 0 -+ WHERE t.typtype = 'd' AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default -+ ORDER BY 1 -+ LOOP -+ cnt2 := cnt2 + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ ELSE -+ EXECUTE qry; -+ END IF; -+ END LOOP; -+ ELSE -- must be v 10 or less -+ FOR qry IN -+ -- Issue#74 Fix: Change schema from source to target. -+ SELECT 'COMMENT ON SCHEMA ' || quote_ident(dest_schema) || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ from pg_namespace n, pg_description d where d.objoid = n.oid and n.nspname = quote_ident(source_schema) -+ UNION -+ -- Issue#74 Fix: need to replace source schema inline -+ -- SELECT 'COMMENT ON TYPE ' || pg_catalog.format_type(t.oid, NULL) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl -+ SELECT 'COMMENT ON TYPE ' || REPLACE(pg_catalog.format_type(t.oid, NULL), quote_ident(source_schema), quote_ident(dest_schema)) || ' IS ''' || pg_catalog.obj_description(t.oid, 'pg_type') || ''';' as ddl -+ FROM pg_catalog.pg_type t -+ JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ WHERE (t.typrelid = 0 OR (SELECT c.relkind = 'c' -+ FROM pg_catalog.pg_class c -+ WHERE c.oid = t.typrelid)) -+ AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el -+ WHERE el.oid = t.typelem AND el.typarray = t.oid) -+ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default -+ AND pg_catalog.obj_description(t.oid, 'pg_type') IS NOT NULL and t.typtype = 'c' -+ UNION -+ -- FIX Issue#87 by adding double quotes around collation name -+ SELECT 'COMMENT ON COLLATION ' || quote_ident(dest_schema) || '."' || c.collname || '" IS ''' || pg_catalog.obj_description(c.oid, 'pg_collation') || ''';' as ddl -+ FROM pg_catalog.pg_collation c, pg_catalog.pg_namespace n -+ WHERE n.oid = c.collnamespace AND c.collencoding IN (-1, pg_catalog.pg_char_to_encoding(pg_catalog.getdatabaseencoding())) -+ AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default AND pg_catalog.obj_description(c.oid, 'pg_collation') IS NOT NULL -+ UNION -+ SELECT 'COMMENT ON ' || CASE WHEN proisagg THEN 'AGGREGATE ' ELSE 'FUNCTION ' END || -+ quote_ident(dest_schema) || '.' || p.proname || ' (' || oidvectortypes(p.proargtypes) || ')' -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_catalog.pg_namespace n -+ JOIN pg_catalog.pg_proc p ON p.pronamespace = n.oid -+ JOIN pg_description d ON (d.objoid = p.oid) -+ WHERE n.nspname = quote_ident(source_schema) -+ UNION -+ SELECT 'COMMENT ON POLICY ' || p1.policyname || ' ON ' || quote_ident(dest_schema) || '.' || p1.tablename || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_policies p1, pg_policy p2, pg_class c, pg_namespace n, pg_description d -+ WHERE p1.schemaname = n.nspname AND p1.tablename = c.relname AND n.oid = c.relnamespace -+ AND c.relkind in ('r','p') AND p1.policyname = p2.polname AND d.objoid = p2.oid AND p1.schemaname = quote_ident(source_schema) -+ UNION -+ SELECT 'COMMENT ON DOMAIN ' || quote_ident(dest_schema) || '.' || t.typname || -+ -- Issue#74 Fix -+ -- ' IS ''' || d.description || ''';' as ddl -+ ' IS ' || quote_literal(d.description) || ';' as ddl -+ FROM pg_catalog.pg_type t -+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace -+ JOIN pg_catalog.pg_description d ON d.classoid = t.tableoid AND d.objoid = t.oid AND d.objsubid = 0 -+ WHERE t.typtype = 'd' AND n.nspname = quote_ident(source_schema) COLLATE pg_catalog.default -+ ORDER BY 1 -+ LOOP -+ cnt2 := cnt2 + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ ELSE -+ EXECUTE qry; -+ END IF; -+ END LOOP; -+ END IF; -+ RAISE NOTICE ' COMMENTS(2) cloned: %', LPAD(cnt2::text, 5, ' '); - -- FOREACH aclstr IN ARRAY arec.defaclacl -- LOOP -- cnt := cnt + 1; -- -- RAISE NOTICE 'aclstr=%', aclstr; -- -- break up into grantor, grantee, and privs, mydb_update=rwU/mydb_owner -- SELECT split_part(aclstr, '=',1) INTO grantee; -- SELECT split_part(aclstr, '=',2) INTO grantor; -- SELECT split_part(grantor, '/',1) INTO privs; -- SELECT split_part(grantor, '/',2) INTO grantor; -- -- RAISE NOTICE 'grantor=% grantee=% privs=%', grantor, grantee, privs; -- -- IF arec.atype = 'function' THEN -- -- Just having execute is enough to grant all apparently. -- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON FUNCTIONS TO "' || grantee || '";'; -- IF ddl_only THEN -- RAISE INFO '%', buffer; -- ELSE -- EXECUTE buffer; -- END IF; - -- ELSIF arec.atype = 'sequence' THEN -- IF POSITION('r' IN privs) > 0 AND POSITION('w' IN privs) > 0 AND POSITION('U' IN privs) > 0 THEN -- -- arU is enough for all privs -- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON SEQUENCES TO "' || grantee || '";'; -- IF ddl_only THEN -+ -- Issue#95 bypass if No ACL specified. -+ IF NOT bNoACL THEN -+ -- --------------------- -+ -- MV: Permissions: Defaults -+ -- --------------------- -+ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -+ action := 'PRIVS: Defaults'; -+ cnt := 0; -+ FOR arec IN -+ SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "owner", n.nspname AS schema, -+ CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS atype, -+ d.defaclacl as defaclacl, pg_catalog.array_to_string(d.defaclacl, ',') as defaclstr -+ FROM pg_catalog.pg_default_acl d LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = d.defaclnamespace) -+ WHERE n.nspname IS NOT NULL AND n.nspname = quote_ident(source_schema) -+ ORDER BY 3, 2, 1 -+ LOOP -+ BEGIN -+ -- RAISE NOTICE ' owner=% type=% defaclacl=% defaclstr=%', arec.owner, arec.atype, arec.defaclacl, arec.defaclstr; -+ -+ FOREACH aclstr IN ARRAY arec.defaclacl -+ LOOP -+ cnt := cnt + 1; -+ -- RAISE NOTICE ' aclstr=%', aclstr; -+ -- break up into grantor, grantee, and privs, mydb_update=rwU/mydb_owner -+ SELECT split_part(aclstr, '=',1) INTO grantee; -+ SELECT split_part(aclstr, '=',2) INTO grantor; -+ SELECT split_part(grantor, '/',1) INTO privs; -+ SELECT split_part(grantor, '/',2) INTO grantor; -+ -- RAISE NOTICE ' grantor=% grantee=% privs=%', grantor, grantee, privs; -+ -+ IF arec.atype = 'function' THEN -+ -- Just having execute is enough to grant all apparently. -+ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON FUNCTIONS TO "' || grantee || '";'; -+ -+ -- Issue#92 Fix -+ -- set role = cm_stage_ro_grp; -+ -- ALTER DEFAULT PRIVILEGES FOR ROLE cm_stage_ro_grp IN SCHEMA cm_stage GRANT REFERENCES, TRIGGER ON TABLES TO cm_stage_ro_grp; -+ IF grantor = grantee THEN -+ -- append set role to statement -+ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; -+ END IF; -+ -+ IF bDDLOnly THEN - RAISE INFO '%', buffer; - ELSE - EXECUTE buffer; - END IF; -+ -- Issue#92 Fix: -+ EXECUTE 'SET ROLE = ' || calleruser; -+ -+ ELSIF arec.atype = 'sequence' THEN -+ IF POSITION('r' IN privs) > 0 AND POSITION('w' IN privs) > 0 AND POSITION('U' IN privs) > 0 THEN -+ -- arU is enough for all privs -+ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON SEQUENCES TO "' || grantee || '";'; -+ -+ -- Issue#92 Fix -+ IF grantor = grantee THEN -+ -- append set role to statement -+ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; -+ END IF; - -- ELSE -- -- have to specify each priv individually -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ -- Issue#92 Fix: -+ EXECUTE 'SET ROLE = ' || calleruser; -+ -+ ELSE -+ -- have to specify each priv individually -+ buffer2 := ''; -+ IF POSITION('r' IN privs) > 0 THEN -+ buffer2 := 'SELECT'; -+ END IF; -+ IF POSITION('w' IN privs) > 0 THEN -+ IF buffer2 = '' THEN -+ buffer2 := 'UPDATE'; -+ ELSE -+ buffer2 := buffer2 || ', UPDATE'; -+ END IF; -+ END IF; -+ IF POSITION('U' IN privs) > 0 THEN -+ IF buffer2 = '' THEN -+ buffer2 := 'USAGE'; -+ ELSE -+ buffer2 := buffer2 || ', USAGE'; -+ END IF; -+ END IF; -+ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON SEQUENCES TO "' || grantee || '";'; -+ -+ -- Issue#92 Fix -+ IF grantor = grantee THEN -+ -- append set role to statement -+ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; -+ END IF; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ select current_user into buffer; -+ -- Issue#92 Fix: -+ EXECUTE 'SET ROLE = ' || calleruser; -+ END IF; -+ -+ ELSIF arec.atype = 'table' THEN -+ -- do each priv individually, jeeeesh! - buffer2 := ''; -+ IF POSITION('a' IN privs) > 0 THEN -+ buffer2 := 'INSERT'; -+ END IF; - IF POSITION('r' IN privs) > 0 THEN -- buffer2 := 'SELECT'; -+ IF buffer2 = '' THEN -+ buffer2 := 'SELECT'; -+ ELSE -+ buffer2 := buffer2 || ', SELECT'; -+ END IF; - END IF; - IF POSITION('w' IN privs) > 0 THEN - IF buffer2 = '' THEN -@@ -531,181 +2829,431 @@ - buffer2 := buffer2 || ', UPDATE'; - END IF; - END IF; -- IF POSITION('U' IN privs) > 0 THEN -- IF buffer2 = '' THEN -- buffer2 := 'USAGE'; -+ IF POSITION('d' IN privs) > 0 THEN -+ IF buffer2 = '' THEN -+ buffer2 := 'DELETE'; - ELSE -- buffer2 := buffer2 || ', USAGE'; -+ buffer2 := buffer2 || ', DELETE'; - END IF; - END IF; -- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON SEQUENCES TO "' || grantee || '";'; -- IF ddl_only THEN -- RAISE INFO '%', buffer; -- ELSE -- EXECUTE buffer; -- END IF; -- -- END IF; -- ELSIF arec.atype = 'table' THEN -- -- do each priv individually, jeeeesh! -- buffer2 := ''; -- IF POSITION('a' IN privs) > 0 THEN -- buffer2 := 'INSERT'; -- END IF; -- IF POSITION('r' IN privs) > 0 THEN -- IF buffer2 = '' THEN -- buffer2 := 'SELECT'; -- ELSE -- buffer2 := buffer2 || ', SELECT'; -+ IF POSITION('t' IN privs) > 0 THEN -+ IF buffer2 = '' THEN -+ buffer2 := 'TRIGGER'; -+ ELSE -+ buffer2 := buffer2 || ', TRIGGER'; -+ END IF; - END IF; -- END IF; -- IF POSITION('w' IN privs) > 0 THEN -- IF buffer2 = '' THEN -- buffer2 := 'UPDATE'; -- ELSE -- buffer2 := buffer2 || ', UPDATE'; -+ IF POSITION('T' IN privs) > 0 THEN -+ IF buffer2 = '' THEN -+ buffer2 := 'TRUNCATE'; -+ ELSE -+ buffer2 := buffer2 || ', TRUNCATE'; -+ END IF; - END IF; -- END IF; -- IF POSITION('d' IN privs) > 0 THEN -- IF buffer2 = '' THEN -- buffer2 := 'DELETE'; -- ELSE -- buffer2 := buffer2 || ', DELETE'; -+ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON TABLES TO "' || grantee || '";'; -+ -+ -- Issue#92 Fix -+ IF grantor = grantee THEN -+ -- append set role to statement -+ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; - END IF; -- END IF; -- IF POSITION('t' IN privs) > 0 THEN -- IF buffer2 = '' THEN -- buffer2 := 'TRIGGER'; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; - ELSE -- buffer2 := buffer2 || ', TRIGGER'; -+ EXECUTE buffer; - END IF; -- END IF; -- IF POSITION('T' IN privs) > 0 THEN -- IF buffer2 = '' THEN -- buffer2 := 'TRUNCATE'; -+ select current_user into buffer; -+ -- Issue#92 Fix: -+ EXECUTE 'SET ROLE = ' || calleruser; -+ -+ ELSIF arec.atype = 'type' THEN -+ IF POSITION('r' IN privs) > 0 AND POSITION('w' IN privs) > 0 AND POSITION('U' IN privs) > 0 THEN -+ -- arU is enough for all privs -+ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ALL ON TYPES TO "' || grantee || '";'; -+ -+ -- Issue#92 Fix -+ IF grantor = grantee THEN -+ -- append set role to statement -+ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; -+ END IF; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ -- Issue#92 Fix: -+ EXECUTE 'SET ROLE = ' || calleruser; -+ -+ ELSIF POSITION('U' IN privs) THEN -+ buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT USAGE ON TYPES TO "' || grantee || '";'; -+ -+ -- Issue#92 Fix -+ IF grantor = grantee THEN -+ -- append set role to statement -+ buffer = 'SET ROLE = ' || grantor || '; ' || buffer; -+ END IF; -+ -+ IF bDDLOnly THEN -+ RAISE INFO '%', buffer; -+ ELSE -+ EXECUTE buffer; -+ END IF; -+ -- Issue#92 Fix: -+ EXECUTE 'SET ROLE = ' || calleruser; -+ - ELSE -- buffer2 := buffer2 || ', TRUNCATE'; -- END IF; -+ RAISE WARNING 'Unhandled TYPE Privs:: type=% privs=% owner=% defaclacl=% defaclstr=% grantor=% grantee=% ', arec.atype, privs, arec.owner, arec.defaclacl, arec.defaclstr, grantor, grantee; - END IF; -- buffer := 'ALTER DEFAULT PRIVILEGES FOR ROLE ' || grantor || ' IN SCHEMA ' || quote_ident(dest_schema) || ' GRANT ' || buffer2 || ' ON TABLES TO "' || grantee || '";'; -- IF ddl_only THEN -- RAISE INFO '%', buffer; -- ELSE -- EXECUTE buffer; -- END IF; -- - ELSE -- RAISE WARNING 'Doing nothing for type=% privs=%', arec.atype, privs; -+ RAISE WARNING 'Unhandled Privs:: type=% privs=% owner=% defaclacl=% defaclstr=% grantor=% grantee=% ', arec.atype, privs, arec.owner, arec.defaclacl, arec.defaclstr, grantor, grantee; - END IF; -- END LOOP; -- END; -- END LOOP; -+ END LOOP; -+ END; -+ END LOOP; - -- RAISE NOTICE ' DFLT PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ RAISE NOTICE ' DFLT PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ END IF; -- NO ACL BRANCH - -- -- MV: PRIVS: schema -- -- crunchy data extension, check_access -- -- SELECT role_path, base_role, as_role, objtype, schemaname, objname, array_to_string(array_agg(privname),',') as privs FROM all_access() -- -- WHERE base_role != CURRENT_USER and objtype = 'schema' and schemaname = 'public' group by 1,2,3,4,5,6; -+ -- Issue#95 bypass if No ACL specified -+ IF NOT bNoACL THEN -+ -- MV: PRIVS: schema -+ -- crunchy data extension, check_access -+ -- SELECT role_path, base_role, as_role, objtype, schemaname, objname, array_to_string(array_agg(privname),',') as privs FROM all_access() -+ -- WHERE base_role != CURRENT_USER and objtype = 'schema' and schemaname = 'public' group by 1,2,3,4,5,6; - -- action := 'PRIVS: Schema'; -- cnt := 0; -- FOR arec IN -- SELECT 'GRANT ' || p.perm::perm_type || ' ON SCHEMA ' || quote_ident(dest_schema) || ' TO "' || r.rolname || '";' as schema_ddl -- FROM pg_catalog.pg_namespace AS n CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES ('USAGE'), ('CREATE')) AS p(perm) -- WHERE n.nspname = quote_ident(source_schema) AND NOT r.rolsuper AND has_schema_privilege(r.oid, n.oid, p.perm) order by r.rolname, p.perm::perm_type -- LOOP -- BEGIN -- cnt := cnt + 1; -- IF ddl_only THEN -- RAISE INFO '%', arec.schema_ddl; -- ELSE -- EXECUTE arec.schema_ddl; -- END IF; -+ action := 'PRIVS: Schema'; -+ cnt := 0; -+ FOR arec IN -+ SELECT 'GRANT ' || p.perm::perm_type || ' ON SCHEMA ' || quote_ident(dest_schema) || ' TO "' || r.rolname || '";' as schema_ddl -+ FROM pg_catalog.pg_namespace AS n -+ CROSS JOIN pg_catalog.pg_roles AS r -+ CROSS JOIN (VALUES ('USAGE'), ('CREATE')) AS p(perm) -+ WHERE n.nspname = quote_ident(source_schema) AND NOT r.rolsuper AND has_schema_privilege(r.oid, n.oid, p.perm) -+ ORDER BY r.rolname, p.perm::perm_type -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.schema_ddl; -+ ELSE -+ EXECUTE arec.schema_ddl; -+ END IF; - -- END; -- END LOOP; -- RAISE NOTICE 'SCHEMA PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ END; -+ END LOOP; -+ RAISE NOTICE 'SCHEMA PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ END IF; -- NO ACL BRANCH - -- -- MV: PRIVS: sequences -- action := 'PRIVS: Sequences'; -- cnt := 0; -- FOR arec IN -- SELECT 'GRANT ' || p.perm::perm_type || ' ON ' || quote_ident(dest_schema) || '.' || t.relname::text || ' TO "' || r.rolname || '";' as seq_ddl -- FROM pg_catalog.pg_class AS t CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES ('SELECT'), ('USAGE'), ('UPDATE')) AS p(perm) -- WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind = 'S' AND NOT r.rolsuper AND has_sequence_privilege(r.oid, t.oid, p.perm) -- LOOP -- BEGIN -- cnt := cnt + 1; -- IF ddl_only OR seq_cnt = 0 THEN -- RAISE INFO '%', arec.seq_ddl; -- ELSE -- EXECUTE arec.seq_ddl; -- END IF; -+ -- Issue#95 bypass if No ACL specified -+ IF NOT bNoACL THEN -+ -- MV: PRIVS: sequences -+ action := 'PRIVS: Sequences'; -+ cnt := 0; -+ FOR arec IN -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on t.relname -+ SELECT 'GRANT ' || p.perm::perm_type || ' ON ' || quote_ident(dest_schema) || '.' || quote_ident(t.relname::text) || ' TO "' || r.rolname || '";' as seq_ddl -+ FROM pg_catalog.pg_class AS t -+ CROSS JOIN pg_catalog.pg_roles AS r -+ CROSS JOIN (VALUES ('SELECT'), ('USAGE'), ('UPDATE')) AS p(perm) -+ WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind = 'S' AND NOT r.rolsuper AND has_sequence_privilege(r.oid, t.oid, p.perm) -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ -- IF bDebug THEN RAISE NOTICE 'DEBUG: ddl=%', arec.seq_ddl; END IF; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.seq_ddl; -+ ELSE -+ EXECUTE arec.seq_ddl; -+ END IF; -+ END; -+ END LOOP; -+ RAISE NOTICE ' SEQ. PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ END IF; -- NO ACL BRANCH - -- END; -- END LOOP; -- RAISE NOTICE ' SEQ. PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ -- Issue#95 bypass if No ACL specified -+ IF NOT bNoACL THEN -+ -- MV: PRIVS: functions -+ action := 'PRIVS: Functions/Procedures'; -+ cnt := 0; - -- -- MV: PRIVS: functions -- action := 'PRIVS: Functions'; -- cnt := 0; -- FOR arec IN -- SELECT 'GRANT EXECUTE ON FUNCTION ' || quote_ident(dest_schema) || '.' || regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', '') || ' TO "' || r.rolname || '";' as func_ddl -- FROM pg_catalog.pg_proc f CROSS JOIN pg_catalog.pg_roles AS r WHERE f.pronamespace::regnamespace::name = quote_ident(source_schema) AND NOT r.rolsuper AND has_function_privilege(r.oid, f.oid, 'EXECUTE') -- order by regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', '') -- LOOP -- BEGIN -- cnt := cnt + 1; -- IF ddl_only THEN -- RAISE INFO '%', arec.func_ddl; -- ELSE -- EXECUTE arec.func_ddl; -+ -- Issue#61 FIX: use set_config for empty string -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ -+ -- RAISE NOTICE ' source_schema=% dest_schema=%',source_schema, dest_schema; -+ FOR arec IN -+ -- 2021-03-05 MJV FIX: issue#35: caused exception in some functions with parameters and gave privileges to other users that should not have gotten them. -+ -- SELECT 'GRANT EXECUTE ON FUNCTION ' || quote_ident(dest_schema) || '.' || replace(regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', ''), source_schema, dest_schema) || ' TO "' || r.rolname || '";' as func_ddl -+ -- FROM pg_catalog.pg_proc f CROSS JOIN pg_catalog.pg_roles AS r WHERE f.pronamespace::regnamespace::name = quote_ident(source_schema) AND NOT r.rolsuper AND has_function_privilege(r.oid, f.oid, 'EXECUTE') -+ -- order by regexp_replace(f.oid::regprocedure::text, '^((("[^"]*")|([^"][^.]*))\.)?', '') -+ -+ -- 2021-03-05 MJV FIX: issue#37: defaults cause problems, use system function that returns args WITHOUT DEFAULTS -+ -- COALESCE(r.routine_type, 'FUNCTION'): for aggregate functions, information_schema.routines contains NULL as routine_type value. -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on rp.routine_name -+ SELECT 'GRANT ' || rp.privilege_type || ' ON ' || COALESCE(r.routine_type, 'FUNCTION') || ' ' || quote_ident(dest_schema) || '.' || quote_ident(rp.routine_name) || ' (' || pg_get_function_identity_arguments(p.oid) || ') TO ' || string_agg(distinct rp.grantee, ',') || ';' as func_dcl -+ FROM information_schema.routine_privileges rp, information_schema.routines r, pg_proc p, pg_namespace n -+ WHERE rp.routine_schema = quote_ident(source_schema) -+ AND rp.is_grantable = 'YES' -+ AND rp.routine_schema = r.routine_schema -+ AND rp.routine_name = r.routine_name -+ AND rp.routine_schema = n.nspname -+ AND n.oid = p.pronamespace -+ AND p.proname = r.routine_name -+ GROUP BY rp.privilege_type, r.routine_type, rp.routine_name, pg_get_function_identity_arguments(p.oid) -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.func_dcl; -+ ELSE -+ EXECUTE arec.func_dcl; -+ END IF; -+ END; -+ END LOOP; -+ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -+ RAISE NOTICE ' FUNC PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ END IF; -- NO ACL BRANCH -+ -+ -- Issue#95 bypass if No ACL specified -+ IF NOT bNoACL THEN -+ -- MV: PRIVS: tables -+ action := 'PRIVS: Tables'; -+ -- regular, partitioned, and foreign tables plus view and materialized view permissions. Ignored for now: implement foreign table defs. -+ cnt := 0; -+ FOR arec IN -+ -- SELECT 'GRANT ' || p.perm::perm_type || CASE WHEN t.relkind in ('r', 'p', 'f') THEN ' ON TABLE ' WHEN t.relkind in ('v', 'm') THEN ' ON ' END || quote_ident(dest_schema) || '.' || t.relname::text || ' TO "' || r.rolname || '";' as tbl_ddl, -+ -- has_table_privilege(r.oid, t.oid, p.perm) AS granted, t.relkind -+ -- FROM pg_catalog.pg_class AS t CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES (TEXT 'SELECT'), ('INSERT'), ('UPDATE'), ('DELETE'), ('TRUNCATE'), ('REFERENCES'), ('TRIGGER')) AS p(perm) -+ -- WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind in ('r', 'p', 'f', 'v', 'm') AND NOT r.rolsuper AND has_table_privilege(r.oid, t.oid, p.perm) order by t.relname::text, t.relkind -+ -- 2021-03-05 MJV FIX: Fixed Issue#36 for tables -+ SELECT c.relkind, 'GRANT ' || tb.privilege_type || CASE WHEN c.relkind in ('r', 'p') THEN ' ON TABLE ' WHEN c.relkind in ('v', 'm') THEN ' ON ' END || -+ -- Issue#78 FIX: handle case-sensitive names with quote_ident() on t.relname -+ -- Issue#108 FIX: enclose double-quote grantees with special characters -+ -- quote_ident(dest_schema) || '.' || quote_ident(tb.table_name) || ' TO ' || string_agg(tb.grantee, ',') || ';' as tbl_dcl -+ quote_ident(dest_schema) || '.' || quote_ident(tb.table_name) || ' TO ' || string_agg('"' || tb.grantee || '"', ',') || ';' as tbl_dcl -+ FROM information_schema.table_privileges tb, pg_class c, pg_namespace n -+ WHERE tb.table_schema = quote_ident(source_schema) AND tb.table_name = c.relname AND c.relkind in ('r', 'p', 'v', 'm') -+ AND c.relnamespace = n.oid AND n.nspname = quote_ident(source_schema) -+ GROUP BY c.relkind, tb.privilege_type, tb.table_schema, tb.table_name -+ LOOP -+ BEGIN -+ cnt := cnt + 1; -+ -- IF bDebug THEN RAISE NOTICE 'DEBUG: ddl=%', arec.tbl_dcl; END IF; -+ -- Issue#46. Fixed reference to invalid record name (tbl_ddl --> tbl_dcl). -+ IF arec.relkind = 'f' THEN -+ RAISE WARNING 'Foreign tables are not currently implemented, so skipping privs for them. ddl=%', arec.tbl_dcl; -+ ELSE -+ IF bDDLOnly THEN -+ RAISE INFO '%', arec.tbl_dcl; -+ ELSE -+ EXECUTE arec.tbl_dcl; -+ END IF; - END IF; -+ END; -+ END LOOP; -+ RAISE NOTICE ' TABLE PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ END IF; -- NO ACL BRANCH -+ -+ -- LOOP for regular tables and populate them if specified -+ -- Issue#75 moved from big table loop above to here. -+ IF bData THEN -+ r = clock_timestamp(); -+ -- IF bVerbose THEN RAISE NOTICE 'START: copy rows %',clock_timestamp() - t; END IF; -+ IF bVerbose THEN RAISE NOTICE 'Copying rows...'; END IF; -+ -+ EXECUTE 'SET search_path = ' || quote_ident(dest_schema) ; -+ action := 'Copy Rows'; -+ FOREACH tblelement IN ARRAY tblarray -+ LOOP -+ s = clock_timestamp(); -+ IF bDebug THEN RAISE NOTICE 'DEBUG1: no UDTs %', tblelement; END IF; -+ EXECUTE tblelement; -+ GET DIAGNOSTICS cnt = ROW_COUNT; -+ buffer = substring(tblelement, 13); -+ SELECT POSITION(' OVERRIDING SYSTEM VALUE SELECT ' IN buffer) INTO cnt2; -+ IF cnt2 = 0 THEN -+ SELECT POSITION(' SELECT ' IN buffer) INTO cnt2; -+ buffer = substring(buffer,1, cnt2); -+ ELSE -+ buffer = substring(buffer,1, cnt2); -+ END IF; -+ SELECT RPAD(buffer, 35, ' ') INTO buffer; -+ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); -+ IF bVerbose THEN RAISE NOTICE 'Populated cloned table, % Rows Copied: % seconds: %', buffer, LPAD(cnt::text, 10, ' '), LPAD(cnt2::text, 5, ' '); END IF; -+ tblscopied := tblscopied + 1; -+ END LOOP; - -- END; -- END LOOP; -- RAISE NOTICE ' FUNC PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ -- Issue#79 implementation -+ -- Do same for tables with user-defined elements using copy to file method -+ FOREACH tblelement IN ARRAY tblarray2 -+ LOOP -+ s = clock_timestamp(); -+ IF bDebug THEN RAISE NOTICE 'DEBUG2: UDTs %', tblelement; END IF; -+ EXECUTE tblelement; -+ GET DIAGNOSTICS cnt = ROW_COUNT; -+ -+ -- STATEMENT LOOKS LIKE THIS: -+ -- INSERT INTO sample11.warehouses SELECT * FROM sample.warehouses; -+ -- INSERT INTO sample11.person OVERRIDING SYSTEM VALUE SELECT * FROM sample.person; -+ -- COPY sample.address TO '/tmp/cloneschema.tmp' WITH DELIMITER AS ',';\ -+ buffer = TRIM(tblelement::text); -+ -- RAISE NOTICE 'element=%', buffer; -+ cnt1 = POSITION('INSERT INTO' IN buffer); -+ cnt2 = POSITION('COPY ' IN buffer); -+ IF cnt1 > 0 THEN -+ buffer = substring(buffer, 12); -+ ELSIF cnt2 > 0 THEN -+ buffer = substring(buffer, 5); -+ ELSE -+ RAISE EXCEPTION 'Programming Error for parsing tblarray2.'; -+ END IF; -+ -+ -- RAISE NOTICE 'buffer1=%', buffer; -+ cnt1 = POSITION(' OVERRIDING ' IN buffer); -+ cnt2 = POSITION('SELECT * FROM ' IN buffer); -+ cnt3 = POSITION(' FROM ' IN buffer); -+ cnt4 = POSITION(' TO ' IN buffer); -+ IF cnt1 > 0 THEN -+ buffer = substring(buffer, 1, cnt1-2); -+ ELSIF cnt2 > 0 THEN -+ buffer = substring(buffer, 1, cnt2-2); -+ ELSIF cnt3 > 0 THEN -+ buffer = substring(buffer, 1, cnt3-1); -+ ELSIF cnt4 > 0 THEN -+ -- skip the COPY TO statements -+ continue; -+ ELSE -+ RAISE EXCEPTION 'Programming Error for parsing tblarray2.'; -+ END IF; -+ -- RAISE NOTICE 'buffer2=%', buffer; -+ -+ SELECT RPAD(buffer, 35, ' ') INTO buffer; -+ -- RAISE NOTICE 'buffer3=%', buffer; -+ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); -+ IF bVerbose THEN RAISE NOTICE 'Populated cloned table, % Rows Copied: % seconds: %', buffer, LPAD(cnt::text, 10, ' '), LPAD(cnt2::text, 5, ' '); END IF; -+ tblscopied := tblscopied + 1; -+ END LOOP; - -- -- MV: PRIVS: tables -- action := 'PRIVS: Tables'; -- -- regular, partitioned, and foreign tables plus view and materialized view permissions. TODO: implement foreign table defs. -+ -- Issue#101 -+ -- Do same for tables with user-defined elements using direct method with text cast -+ FOREACH tblelement IN ARRAY tblarray3 -+ LOOP -+ s = clock_timestamp(); -+ IF bDebug THEN RAISE NOTICE 'DEBUG3: UDTs %', tblelement; END IF; -+ EXECUTE tblelement; -+ GET DIAGNOSTICS cnt = ROW_COUNT; -+ cnt2 = POSITION(' (' IN tblelement::text); -+ IF cnt2 > 0 THEN -+ buffer = substring(tblelement, 1, cnt2); -+ buffer = substring(buffer, 6); -+ SELECT RPAD(buffer, 35, ' ') INTO buffer; -+ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); -+ IF bVerbose THEN RAISE NOTICE 'Populated cloned table, % Rows Copied: % seconds: %', buffer, LPAD(cnt::text, 10, ' '), LPAD(cnt2::text, 5, ' '); END IF; -+ tblscopied := tblscopied + 1; -+ END IF; -+ END LOOP; -+ -+ -- Issue#98 MVs deferred until now -+ FOREACH tblelement IN ARRAY mvarray -+ LOOP -+ s = clock_timestamp(); -+ EXECUTE tblelement; -+ -- get diagnostics for MV creates or refreshes does not work, always returns 1 -+ GET DIAGNOSTICS cnt = ROW_COUNT; -+ buffer = substring(tblelement, 25); -+ cnt2 = POSITION(' AS ' IN buffer); -+ IF cnt2 > 0 THEN -+ buffer = substring(buffer, 1, cnt2); -+ SELECT RPAD(buffer, 36, ' ') INTO buffer; -+ cnt2 := cast(extract(epoch from (clock_timestamp() - s)) as numeric(18,3)); -+ IF bVerbose THEN RAISE NOTICE 'Populated Mat. View, % Rows Inserted: ? seconds: %', buffer, LPAD(cnt2::text, 5, ' '); END IF; -+ mvscopied := mvscopied + 1; -+ END IF; -+ END LOOP; -+ -+ cnt := cast(extract(epoch from (clock_timestamp() - r)) as numeric(18,3)); -+ IF bVerbose THEN RAISE NOTICE 'Copy rows duration: % seconds',cnt; END IF; -+ END IF; -+ RAISE NOTICE ' TABLES copied: %', LPAD(tblscopied::text, 5, ' '); -+ RAISE NOTICE ' MATVIEWS refreshed: %', LPAD(mvscopied::text, 5, ' '); -+ -+ -+ -- Issue#78 forces us to defer FKeys until the end since we previously did row copies before FKeys -+ -- add FK constraint -+ action := 'FK Constraints'; - cnt := 0; -- FOR arec IN -- SELECT 'GRANT ' || p.perm::perm_type || CASE WHEN t.relkind in ('r', 'p', 'f') THEN ' ON TABLE ' WHEN t.relkind in ('v', 'm') THEN ' ON ' END || quote_ident(dest_schema) || '.' || t.relname::text || ' TO "' || r.rolname || '";' as tbl_ddl, -- has_table_privilege(r.oid, t.oid, p.perm) AS granted, t.relkind -- FROM pg_catalog.pg_class AS t CROSS JOIN pg_catalog.pg_roles AS r CROSS JOIN (VALUES (TEXT 'SELECT'), ('INSERT'), ('UPDATE'), ('DELETE'), ('TRUNCATE'), ('REFERENCES'), ('TRIGGER')) AS p(perm) -- WHERE t.relnamespace::regnamespace::name = quote_ident(source_schema) AND t.relkind in ('r', 'p', 'f', 'v', 'm') AND NOT r.rolsuper AND has_table_privilege(r.oid, t.oid, p.perm) order by t.relname::text, t.relkind -- LOOP -- BEGIN -- cnt := cnt + 1; -- -- RAISE NOTICE 'ddl=%', arec.tbl_ddl; -- IF arec.relkind = 'f' THEN -- RAISE WARNING 'Foreign tables are not currently implemented, so skipping privs for them. ddl=%', arec.tbl_ddl; -- ELSE -- IF ddl_only THEN -- RAISE INFO '%', arec.tbl_ddl; -- ELSE -- EXECUTE arec.tbl_ddl; -- END IF; - -- END IF; -- END; -+ -- Issue#61 FIX: use set_config for empty string -+ -- SET search_path = ''; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ -+ FOR qry IN -+ SELECT 'ALTER TABLE ' || quote_ident(dest_schema) || '.' || quote_ident(rn.relname) -+ || ' ADD CONSTRAINT ' || quote_ident(ct.conname) || ' ' || REPLACE(pg_get_constraintdef(ct.oid), 'REFERENCES ' || quote_ident(source_schema) || '.', 'REFERENCES ' -+ || quote_ident(dest_schema) || '.') || ';' -+ FROM pg_constraint ct -+ JOIN pg_class rn ON rn.oid = ct.conrelid -+ -- Issue#103 needed to add this left join -+ LEFT JOIN pg_inherits i ON (rn.oid = i.inhrelid) -+ WHERE connamespace = src_oid -+ AND rn.relkind = 'r' -+ AND ct.contype = 'f' -+ -- Issue#103 fix: needed to also add this null check -+ AND i.inhrelid is null -+ LOOP -+ cnt := cnt + 1; -+ IF bDDLOnly THEN -+ RAISE INFO '%', qry; -+ ELSE -+ IF bDebug THEN RAISE NOTICE 'DEBUG: adding FKEY constraint: %', qry; END IF; -+ EXECUTE qry; -+ END IF; - END LOOP; -- RAISE NOTICE ' TABLE PRIVS cloned: %', LPAD(cnt::text, 5, ' '); -+ EXECUTE 'SET search_path = ' || quote_ident(source_schema) ; -+ RAISE NOTICE ' FKEYS cloned: %', LPAD(cnt::text, 5, ' '); - -- -- Set the search_path back to what it was before -- EXECUTE 'SET search_path = ' || src_path_old; -+ -+ IF src_path_old = '' OR src_path_old = '""' THEN -+ -- RAISE NOTICE 'Restoring old search_path to empty string'; -+ SELECT set_config('search_path', '', false) into v_dummy; -+ ELSE -+ -- RAISE NOTICE 'Restoring old search_path to:%', src_path_old; -+ EXECUTE 'SET search_path = ' || src_path_old; -+ END IF; -+ SELECT setting INTO v_dummy FROM pg_settings WHERE name = 'search_path'; -+ IF bDebug THEN RAISE NOTICE 'DEBUG: setting search_path back to what it was: %', v_dummy; END IF; -+ cnt := cast(extract(epoch from (clock_timestamp() - t)) as numeric(18,3)); -+ IF bVerbose THEN RAISE NOTICE 'clone_schema duration: % seconds',cnt; END IF; - - EXCEPTION - WHEN others THEN - BEGIN - GET STACKED DIAGNOSTICS v_diag1 = MESSAGE_TEXT, v_diag2 = PG_EXCEPTION_DETAIL, v_diag3 = PG_EXCEPTION_HINT, v_diag4 = RETURNED_SQLSTATE, v_diag5 = PG_CONTEXT, v_diag6 = PG_EXCEPTION_CONTEXT; -- -- v_ret := 'line=' || v_diag6 || '. '|| v_diag4 || '. ' || v_diag1 || ' .' || v_diag2 || ' .' || v_diag3; -- v_ret := 'line=' || v_diag6 || '. '|| v_diag4 || '. ' || v_diag1; -- RAISE EXCEPTION 'Action: % Diagnostics: %',action, v_ret; -- -- Set the search_path back to what it was before -- EXECUTE 'SET search_path = ' || src_path_old; -+ v_ret := 'line=' || v_diag6 || '. '|| v_diag4 || '. ' || v_diag1; -+ -- Issue#101: added version to exception output -+ -- RAISE NOTICE 'v_diag1=% v_diag2=% v_diag3=% v_diag4=% v_diag5=% v_diag6=%', v_diag1, v_diag2, v_diag3, v_diag4, v_diag5, v_diag6; -+ buffer2 = ''; -+ IF action = 'Copy Rows' AND v_diag4 = '42704' THEN -+ -- Issue#105 Help user to fix the problem. -+ buffer2 = 'It appears you have a USER-DEFINED column type mismatch. Try running clone_schema with the FILECOPY option. '; -+ END IF; -+ IF lastsql <> '' THEN -+ buffer = v_ret || E'\n'|| buffer2 || E'\n'|| lastsql; -+ ELSE -+ buffer = v_ret || E'\n'|| buffer2; -+ END IF; -+ RAISE EXCEPTION 'Version: % Action: % Diagnostics: %',v_version, action, buffer; -+ -+ IF src_path_old = '' THEN -+ -- RAISE NOTICE 'setting old search_path to empty string'; -+ SELECT set_config('search_path', '', false); -+ ELSE -+ -- RAISE NOTICE 'setting old search_path to:%', src_path_old; -+ EXECUTE 'SET search_path = ' || src_path_old; -+ END IF; -+ - RETURN; - END; - -@@ -713,14 +3261,14 @@ - END; - - $BODY$ -- LANGUAGE plpgsql VOLATILE -- COST 100; --ALTER FUNCTION public.clone_schema(text, text, boolean, boolean) OWNER TO "{db_user}"; --""" -+ LANGUAGE plpgsql VOLATILE COST 100; - -+ALTER FUNCTION public.clone_schema(text, text, cloneparms[]) OWNER TO "{db_user}"; -+-- REVOKE ALL PRIVILEGES ON FUNCTION clone_schema(text, text, cloneparms[]) FROM public; -+""" # noqa - --class CloneSchema: - -+class CloneSchema: - def _create_clone_schema_function(self): - """ - Creates a postgres function `clone_schema` that copies a schema and its -@@ -752,9 +3300,8 @@ def clone_schema(self, base_schema_name, new_schema_name, set_connection=True): - if schema_exists(new_schema_name): - raise ValidationError("New schema name already exists") - -- sql = 'SELECT clone_schema(%(base_schema)s, %(new_schema)s, true, false)' -+ sql = "SELECT clone_schema(%(base_schema)s, %(new_schema)s, 'DATA')" - cursor.execute( -- sql, -- {'base_schema': base_schema_name, 'new_schema': new_schema_name} -+ sql, {"base_schema": base_schema_name, "new_schema": new_schema_name} - ) - cursor.close() - -From c49b4a1c254ebe713259515a4c8373a9b19dd000 Mon Sep 17 00:00:00 2001 -From: Marc 'risson' Schmitt -Date: Thu, 16 Nov 2023 13:32:06 +0100 -Subject: [PATCH 2/3] clone: allow setting up the clone mode (DATA, NODATA) - -Signed-off-by: Marc 'risson' Schmitt ---- - django_tenants/clone.py | 13 ++++++++++--- - django_tenants/models.py | 11 ++++++++++- - 2 files changed, 20 insertions(+), 4 deletions(-) - -diff --git a/django_tenants/clone.py b/django_tenants/clone.py -index 3afce109..6fa52c04 100644 ---- a/django_tenants/clone.py -+++ b/django_tenants/clone.py -@@ -3281,7 +3281,9 @@ def _create_clone_schema_function(self): - cursor.execute(CLONE_SCHEMA_FUNCTION.format(db_user=db_user)) - cursor.close() - -- def clone_schema(self, base_schema_name, new_schema_name, set_connection=True): -+ def clone_schema( -+ self, base_schema_name, new_schema_name, clone_mode="DATA", set_connection=True -+ ): - """ - Creates a new schema `new_schema_name` as a clone of an existing schema - `old_schema_name`. -@@ -3300,8 +3302,13 @@ def clone_schema(self, base_schema_name, new_schema_name, set_connection=True): - if schema_exists(new_schema_name): - raise ValidationError("New schema name already exists") - -- sql = "SELECT clone_schema(%(base_schema)s, %(new_schema)s, 'DATA')" -+ sql = "SELECT clone_schema(%(base_schema)s, %(new_schema)s, %(clone_mode)s)" - cursor.execute( -- sql, {"base_schema": base_schema_name, "new_schema": new_schema_name} -+ sql, -+ { -+ "base_schema": base_schema_name, -+ "new_schema": new_schema_name, -+ "clone_mode": clone_mode, -+ }, - ) - cursor.close() -diff --git a/django_tenants/models.py b/django_tenants/models.py -index 0d1812d8..655e1994 100644 ---- a/django_tenants/models.py -+++ b/django_tenants/models.py -@@ -29,6 +29,13 @@ class TenantMixin(models.Model): - to be automatically created upon save. - """ - -+ clone_mode = "DATA" -+ """ -+ One of "DATA", "NODATA". -+ When using TENANT_BASE_SCHEMA, controls whether only the database -+ structure will be copied, or if data will be copied along with it. -+ """ -+ - schema_name = models.CharField(max_length=63, unique=True, db_index=True, - validators=[_check_schema_name]) - -@@ -184,7 +191,9 @@ def create_schema(self, check_if_exists=False, sync_schema=True, - # copy tables and data from provided model schema - base_schema = get_tenant_base_schema() - clone_schema = CloneSchema() -- clone_schema.clone_schema(base_schema, self.schema_name) -+ clone_schema.clone_schema( -+ base_schema, self.schema_name, self.clone_mode -+ ) - - call_command('migrate_schemas', - tenant=True, - -From 218fbcd3bfa555b20c6fb904e5fcf307d69f18af Mon Sep 17 00:00:00 2001 -From: Marc 'risson' Schmitt -Date: Thu, 16 Nov 2023 13:32:54 +0100 -Subject: [PATCH 3/3] clone: always (re-)create the clone_schema function - -Signed-off-by: Marc 'risson' Schmitt ---- - django_tenants/clone.py | 10 +++------- - 1 file changed, 3 insertions(+), 7 deletions(-) - -diff --git a/django_tenants/clone.py b/django_tenants/clone.py -index 6fa52c04..63fb8e22 100644 ---- a/django_tenants/clone.py -+++ b/django_tenants/clone.py -@@ -1,7 +1,6 @@ - from django.conf import settings - from django.core.exceptions import ValidationError - from django.db import connection, transaction --from django.db.utils import ProgrammingError - - from django_tenants.utils import schema_exists - -@@ -3292,12 +3291,9 @@ def clone_schema( - connection.set_schema_to_public() - cursor = connection.cursor() - -- # check if the clone_schema function already exists in the db -- try: -- cursor.execute("SELECT 'clone_schema'::regproc") -- except ProgrammingError: -- self._create_clone_schema_function() -- transaction.commit() -+ # create or update the clone_schema function in the db -+ self._create_clone_schema_function() -+ transaction.commit() - - if schema_exists(new_schema_name): - raise ValidationError("New schema name already exists") diff --git a/user/py3-django-tenants/APKBUILD b/user/py3-django-tenants/APKBUILD deleted file mode 100644 index f12eac2..0000000 --- a/user/py3-django-tenants/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-tenants -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=django-tenants -pkgver=3.6.1 -pkgrel=0 -pkgdesc="Tenant support for Django using PostgreSQL schemas." -url="https://pypi.python.org/project/django-tenants" -arch="noarch" -license="KIT" -depends="py3-django py3-psycopg py3-gunicorn py3-coverage" -checkdepends="python3-dev py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source=" - $pkgname-$pkgver.tar.gz::https://codeload.github.com/django-tenants/django-tenants/tar.gz/refs/tags/v$pkgver - 997_update-from-pgclone-schema.patch - " -builddir="$srcdir/$_pkgreal-$pkgver" -options="!check" # Requires setting up test database -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - DJANGO_SETTINGS_MODULE=tests.settings .testenv/bin/python3 -m pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -b18afce81ccc89e49fcc4ebe85d90be602415ca898c1660a4e71e2bef6a3ed2e8c724e94b61d8c6f48f3fb19eb2a87d6a6f5bbf449b3e2f661f87e4b5638eafb py3-django-tenants-3.6.1.tar.gz -f2424bb188db2e3c7d13c15e5bdf0959c6f794e68dbc677c8b876d4faa321f78aded5565539f1bfd97583c6df0fcc19ec05abe203b08407e4446dd7194756825 997_update-from-pgclone-schema.patch -" From 7870ee72dceea0157554c10a363f58d24b4d414c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:19 -0400 Subject: [PATCH 395/738] user/php83-pecl-inotify: drop due migration to ilot iports --- user/php83-pecl-inotify/APKBUILD | 35 -------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 user/php83-pecl-inotify/APKBUILD diff --git a/user/php83-pecl-inotify/APKBUILD b/user/php83-pecl-inotify/APKBUILD deleted file mode 100644 index 771466f..0000000 --- a/user/php83-pecl-inotify/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Fabio Ribeiro -# Maintainer: Andy Postnikov -pkgname=php83-pecl-inotify -_extname=inotify -pkgver=3.0.0 -pkgrel=0 -pkgdesc="Inotify bindings for PHP 8.3" -url="https://pecl.php.net/package/inotify" -arch="all" -license="PHP-3.01" -depends="php83-common" -makedepends="php83-dev" -source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" -builddir="$srcdir"/$_extname-$pkgver - -build() { - phpize83 - ./configure --prefix=/usr --with-php-config=php-config83 - make -} - -check() { - make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test -} - -package() { - make INSTALL_ROOT="$pkgdir" install - local _confdir="$pkgdir"/etc/php83/conf.d - install -d $_confdir - echo "extension=$_extname" > $_confdir/70_$_extname.ini -} - -sha512sums=" -f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz -" From 5edd40d7f0c439313eb3a461933f9a2279f9b576 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:21 -0400 Subject: [PATCH 396/738] user/php82-pecl-inotify: drop due migration to ilot iports --- user/php82-pecl-inotify/APKBUILD | 35 -------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 user/php82-pecl-inotify/APKBUILD diff --git a/user/php82-pecl-inotify/APKBUILD b/user/php82-pecl-inotify/APKBUILD deleted file mode 100644 index 44903a1..0000000 --- a/user/php82-pecl-inotify/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Fabio Ribeiro -# Maintainer: Andy Postnikov -pkgname=php82-pecl-inotify -_extname=inotify -pkgver=3.0.0 -pkgrel=0 -pkgdesc="Inotify bindings for PHP 8.3" -url="https://pecl.php.net/package/inotify" -arch="all" -license="PHP-3.01" -depends="php82-common" -makedepends="php82-dev" -source="php-pecl-$_extname-$pkgver.tgz::https://pecl.php.net/get/$_extname-$pkgver.tgz" -builddir="$srcdir"/$_extname-$pkgver - -build() { - phpize82 - ./configure --prefix=/usr --with-php-config=php-config82 - make -} - -check() { - make NO_INTERACTION=1 REPORT_EXIT_STATUS=1 test -} - -package() { - make INSTALL_ROOT="$pkgdir" install - local _confdir="$pkgdir"/etc/php82/conf.d - install -d $_confdir - echo "extension=$_extname" > $_confdir/70_$_extname.ini -} - -sha512sums=" -f8b29f8611f16b92136ab8de89181c254bba1abee1e61cac2344440567a3155aae4b9b54b10fdb1b0254fd7a96da8c14b7dc5c9f7f08a03db30ab1645aca1eee php-pecl-inotify-3.0.0.tgz -" From 60b6bb1f9aabbe8ddca8a29aa9eb2251ee068898 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:23 -0400 Subject: [PATCH 397/738] user/peertube: drop due migration to ilot iports --- user/peertube/APKBUILD | 81 ----------------------------- user/peertube/peertube-manage.sh | 15 ------ user/peertube/peertube.conf | 2 - user/peertube/peertube.openrc | 34 ------------ user/peertube/peertube.post-install | 41 --------------- user/peertube/peertube.post-upgrade | 1 - user/peertube/peertube.pre-install | 25 --------- 7 files changed, 199 deletions(-) delete mode 100644 user/peertube/APKBUILD delete mode 100644 user/peertube/peertube-manage.sh delete mode 100644 user/peertube/peertube.conf delete mode 100644 user/peertube/peertube.openrc delete mode 100755 user/peertube/peertube.post-install delete mode 120000 user/peertube/peertube.post-upgrade delete mode 100755 user/peertube/peertube.pre-install diff --git a/user/peertube/APKBUILD b/user/peertube/APKBUILD deleted file mode 100644 index f50d1c1..0000000 --- a/user/peertube/APKBUILD +++ /dev/null @@ -1,81 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=peertube -pkgver=6.0.2 -pkgrel=0 -pkgdesc="ActivityPub-federated video streaming platform using P2P directly in your web browser" -arch="x86_64" -url="https://joinpeertube.org/" -license="AGPL" -depends=" - nodejs - ffmpeg - postgresql - openssl - redis - npm - procps-ng - " -makedepends=" - yarn - " -source=" - $pkgname-$pkgver.tar.gz::https://github.com/Chocobozzz/PeerTube/archive/refs/tags/v$pkgver.tar.gz - peertube-manage.sh - peertube.conf - peertube.openrc - " -builddir="$srcdir"/PeerTube-$pkgver -install="$pkgname.post-install $pkgname.pre-install $pkgname.post-upgrade" -subpackages="$pkgname-doc $pkgname-openrc" - -build() { - # need to fetch devel depencencies to build - yarn install --pure-lockfile - npm run build - rm -Rf "$builddir"/node_modules - yarn install --production --pure-lockfile -} - -package() { - install -dm 755 \ - "$pkgdir"/usr/share/webapps \ - "$pkgdir"/usr/share/doc \ - "$pkgdir"/usr/share/licenses/peertube \ - "$pkgdir"/etc/init.d \ - "$pkgdir"/etc/conf.d - - # install - cp -a "$builddir" "$pkgdir/usr/share/webapps/peertube" - - # wrapper script - install -Dm755 "$srcdir"/peertube-manage.sh "$pkgdir"/usr/bin/peertube-manage - - # openrc - install -Dm755 "$srcdir"/peertube.openrc "$pkgdir"/etc/init.d/peertube - install -Dm644 "$srcdir"/peertube.conf "$pkgdir"/etc/conf.d/peertube - - # config file setup - rm -R "$pkgdir"/usr/share/webapps/peertube/config - install -Dm644 "$builddir"/config/production.yaml.example "$pkgdir"/etc/peertube/production.yaml - install -Dm644 "$builddir"/config/default.yaml "$pkgdir"/etc/peertube/default.yaml - sed -i "s|/var/www/peertube/storage|/var/lib/peertube|g" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml - sed -i "s| tmp:.*| tmp: '/tmp/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml - sed -i "s|tmp_persistent:.*|tmp_persistent: '/var/tmp/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml - sed -i "s|logs:.*|logs: '/var/log/peertube/'|" "$pkgdir"/etc/peertube/production.yaml "$pkgdir"/etc/peertube/default.yaml - sed -i "s| peertube: ''| peertube: '@@SECRET_KEY@@'|" "$pkgdir"/etc/peertube/production.yaml - - # docs and licenses - mv "$pkgdir"/usr/share/webapps/peertube/support/doc "$pkgdir"/usr/share/doc/$pkgname - mv "$pkgdir"/usr/share/webapps/peertube/*.md "$pkgdir"/usr/share/doc/peertube/. - mv "$pkgdir"/usr/share/webapps/peertube/LICENSE "$pkgdir"/usr/share/licenses/peertube/. - - # delete arm64 prebuild - rm "$pkgdir"/usr/share/webapps/$pkgname/node_modules/fs-native-extensions/prebuilds/linux-arm64/node.napi.node -} -sha512sums=" -91bcec34902f171ffe9ab3f27ab4422319f91430cab22965a5cf9887c5293152f7f85c6fc0f355820000daea0a49327aa66f20bb4cff3850e5e3d192f347c926 peertube-6.0.2.tar.gz -92de1155410848937eeff3bef480c4a074875b4236ce0b6bf4cd7213d00173e7766d130408419c85c4432a8445a03f5d4525e4283384d906d781510cc4fd8fc0 peertube-manage.sh -494bb4daf98fcd62b354eb6fae18ccff19bef1243de083a93e438680deef1d9039e30eff8870b6955c3c7b10638e6df6cbeb4fbdb7539979466f502bcc72c843 peertube.conf -5b4d3f47d0dc2ce991971ff61c604a1566811612cff91f7e6ed19b65d0830695649ddef9afff474d916a5e6764d74bb4fa6b5c12eb5e753d8fc381cdd38ab179 peertube.openrc -" diff --git a/user/peertube/peertube-manage.sh b/user/peertube/peertube-manage.sh deleted file mode 100644 index 70bc387..0000000 --- a/user/peertube/peertube-manage.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -BUNDLE_DIR='/usr/share/webapps/peertube' - -cd $BUNDLE_DIR - -if [ "$(id -un)" != 'peertube' ]; then - source /etc/conf.d/peertube - export NODE_ENV NODE_CONFIG_DIR - exec su peertube -c '"$0" "$@"' -- npm run "$@" -else - source /etc/conf.d/peertube - export NODE_ENV NODE_CONFIG_DIR - exec npm run "$@" -fi diff --git a/user/peertube/peertube.conf b/user/peertube/peertube.conf deleted file mode 100644 index 8a7d014..0000000 --- a/user/peertube/peertube.conf +++ /dev/null @@ -1,2 +0,0 @@ -NODE_CONFIG_DIR=/etc/peertube -NODE_ENV=production diff --git a/user/peertube/peertube.openrc b/user/peertube/peertube.openrc deleted file mode 100644 index 8f03ba0..0000000 --- a/user/peertube/peertube.openrc +++ /dev/null @@ -1,34 +0,0 @@ -#!/sbin/openrc-run - -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME.conf" -pidfile="/run/$RC_SVCNAME.pid" -working_directory="/usr/share/webapps/peertube" -command="/usr/bin/node" -command_args="dist/server.js" -command_user="peertube" -command_group="peertube" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/peertube/$RC_SVCNAME.log" - -depend() { - need redis - need postgresql -} - -start_pre() { - cd "$working_directory" - checkpath --directory --owner $command_user:$command_group --mode 0775 \ - /var/log/peertube \ - /var/lib/peertube \ - /var/tmp/peertube \ - /tmp/peertube - - export NODE_ENV NODE_CONFIG_DIR -} - -stop_pre() { - ebegin "Killing child processes" - kill $(ps -o pid= --ppid $(cat $pidfile)) || true -} diff --git a/user/peertube/peertube.post-install b/user/peertube/peertube.post-install deleted file mode 100755 index a83bb10..0000000 --- a/user/peertube/peertube.post-install +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -set -eu - -group=www-data -config_file='/etc/peertube/production.yaml' - -if grep '@@SECRET_KEY@@' "$config_file" >/dev/null; then - echo "* Generating random secret in $config_file" >&2 - - secret_key="$(openssl rand -hex 32)" - sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" -fi - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish Peertube upgrade run: - * - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/peertube/production.yaml - * - * 2. Create database for Peertube: - * - * psql -c "CREATE ROLE peertube PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE peertube OWNER peertube ENCODING 'UTF-8';" - * - * 3. Start Peertube - * - * service peertube start - * - * 4. Create admin user - * - * peertube-manage reset-password -- -u root - * - EOF -fi - diff --git a/user/peertube/peertube.post-upgrade b/user/peertube/peertube.post-upgrade deleted file mode 120000 index 2dd117d..0000000 --- a/user/peertube/peertube.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -peertube.post-install \ No newline at end of file diff --git a/user/peertube/peertube.pre-install b/user/peertube/peertube.pre-install deleted file mode 100755 index 2572d9c..0000000 --- a/user/peertube/peertube.pre-install +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -DATADIR='/var/lib/peertube' - -if ! getent group peertube 1>/dev/null; then - echo '* Creating group peertube' 1>&2 - - addgroup -S peertube -fi - -if ! id peertube 2>/dev/null 1>&2; then - echo '* Creating user peertube' 1>&2 - - adduser -DHS -G peertube -h "$DATADIR" -s /bin/sh \ - -g "added by apk for peertube" peertube - passwd -u peertube 1>/dev/null # unlock -fi - -if ! id -Gn peertube | grep -Fq www-data; then - echo '* Adding user peertube to group www-data' 1>&2 - - addgroup peertube www-data -fi - -exit 0 From 187eb887703008513412b87021efdf0e25160183 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:26 -0400 Subject: [PATCH 398/738] user/loomio: drop due migration to ilot iports --- user/loomio/APKBUILD | 196 ------------------------------- user/loomio/bin-wrapper.in | 15 --- user/loomio/loomio.confd | 32 ----- user/loomio/loomio.initd | 39 ------ user/loomio/loomio.logrotate | 11 -- user/loomio/loomio.post-install | 32 ----- user/loomio/loomio.post-upgrade | 1 - user/loomio/loomio.pre-install | 26 ---- user/loomio/loomio.sidekiq.initd | 32 ----- user/loomio/loomio.vue.initd | 31 ----- 10 files changed, 415 deletions(-) delete mode 100644 user/loomio/APKBUILD delete mode 100644 user/loomio/bin-wrapper.in delete mode 100644 user/loomio/loomio.confd delete mode 100644 user/loomio/loomio.initd delete mode 100644 user/loomio/loomio.logrotate delete mode 100755 user/loomio/loomio.post-install delete mode 120000 user/loomio/loomio.post-upgrade delete mode 100644 user/loomio/loomio.pre-install delete mode 100644 user/loomio/loomio.sidekiq.initd delete mode 100644 user/loomio/loomio.vue.initd diff --git a/user/loomio/APKBUILD b/user/loomio/APKBUILD deleted file mode 100644 index 38eb631..0000000 --- a/user/loomio/APKBUILD +++ /dev/null @@ -1,196 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka -# Contributor: Antoine Martin (ayakael) -pkgname=loomio -pkgver=2.21.4 -_gittag=v$pkgver -pkgrel=0 -pkgdesc="A collaborative decision making tool" -url="https://github.com/loomio/loomio" -arch="x86_64" -license="MIT" -depends=" - postgresql - postgresql-contrib - python3 - redis - ruby3.2 - ruby3.2-bundler - ruby3.2-grpc - vips - npm - procps-ng - " -makedepends=" - cmd:chrpath - ruby3.2-dev - nodejs - openssl-dev - readline-dev - zlib-dev - libpq-dev - libffi-dev - imagemagick-dev - " -pkgusers="loomio" -pkggroups="loomio www-data" -install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" -subpackages="$pkgname-openrc" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/loomio/loomio/archive/refs/tags/v$pkgver.tar.gz - bin-wrapper.in - loomio.confd - loomio.logrotate - loomio.sidekiq.initd - loomio.vue.initd - loomio.initd - " -_prefix="usr/lib/webapps/loomio" - -export BUNDLE_DEPLOYMENT=true -export BUNDLE_FORCE_RUBY_PLATFORM=true -export BUNDLE_FROZEN=true -export BUNDLE_JOBS=${JOBS:-2} - -prepare() { - local sysgemdir=$(ruby -e 'puts Gem.default_dir') - - default_prepare - - # Allow use of any bundler - sed -i -e '/BUNDLED/,+1d' Gemfile.lock - - # Allow use of any platform - sed -i -e 's/PLATFORMS/PLATFORMS\n ruby/' Gemfile.lock - - # Some gems are broken, so we copy our fixed version - # instead of installing it from RubyGems using Bundler. - mkdir -p vendor/gems/grpc/src/ruby/lib/grpc - cp -r "$sysgemdir"/gems/grpc-*/* vendor/gems/grpc/ - cp "$sysgemdir"/specifications/grpc-*.gemspec \ - vendor/gems/grpc/grpc.gemspec - cp "$sysgemdir"/extensions/*/*/grpc-*/grpc/*.so \ - vendor/gems/grpc/src/ruby/lib/grpc/ -} - -build() { - local bundle_without='exclude development test' - - bundle config --local build.ffi --enable-system-libffi - bundle config --local build.vips --enable-system-libraries - bundle config --local build.nokogiri --use-system-libraries \ - --with-xml2-include=/usr/include/libxml2 \ - --with-xslt-include=/usr/include/libxslt - bundle config --local build.google-protobuf '-- --with-cflags=-D__va_copy=va_copy' - - msg "Installing Ruby gems..." - bundle config --local without "$bundle_without" - bundle config --local path "vendor/bundle" - - bundle install --no-cache - - msg "Precompiling static assets..." - bundle exec bootsnap precompile --gemfile app/ lib/ - - # Create executables in bin/*. - # See also https://github.com/bundler/bundler/issues/6149. - bundle binstubs --force bundler puma sidekiq - - # Remove faulty RPATH. - chrpath -d vendor/bundle/ruby/*/gems/*/lib/nokogiri/*/nokogiri.so - - # cp grpc so - cp vendor/gems/grpc/src/ruby/lib/grpc/grpc_c.so vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/. - rm -R vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/3* vendor/bundle/ruby/*/gems/grpc*/src/ruby/lib/grpc/2* - - msg "Installing npm modules..." - cd vue - # force as vite-plugin-yaml hasn't updated their peerDependencies list yet - npm ci --force - npm run build -} - -package() { - local destdir="$pkgdir/$_prefix" - local datadir="$pkgdir/var/lib/loomio" - local file dest - - # Make directories - install -dm 755 \ - "$(dirname $destdir)" \ - "$datadir" - - mkdir -p "$(dirname $destdir)" - cp -R "$builddir" "$destdir" - - cd "$destdir"/vendor/bundle/ruby/*/ - - # Remove tests, documentations and other useless files. - find gems/ \( -name 'doc' \ - -o -name 'spec' \ - -o -name 'test' \) \ - -type d -maxdepth 2 -exec rm -fr "{}" + - find gems/ \( -name 'README*' \ - -o -name 'CHANGELOG*' \ - -o -name 'CONTRIBUT*' \ - -o -name '*LICENSE*' \ - -o -name 'Rakefile' \ - -o -name '.*' \) \ - -type f -delete - - # Remove build logs and cache. - rm -rf build_info/ cache/ - find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete - - cd "$destdir" - - # Install and symlink config files. - for file in database.yml.postgresql puma.rb sidekiq.yml; do - dest="$(basename "${file/.postgresql/}")" - install -m640 -g loomio -D config/$file "$pkgdir"/etc/loomio/$dest - ln -sf /etc/loomio/$dest "$pkgdir"/$_prefix/config/${file/.postgrewsql/} - done - - # This file will be generated by the post-install script, just prepare symlink. - ln -sf /etc/loomio/secrets.yml config/secrets.yml - # These shouldn't be necessary, they are all configurable, but OmniBus - - cat > "$datadir"/.profile <<-EOF - export RAILS_ENV=production - export NODE_ENV=production - export EXECJS_RUNTIME=Disabled - EOF - - # Install wrapper scripts to /usr/bin. - local name; for name in rake rails; do - sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ - > "$builddir"/loomio-$name - install -m755 -D "$builddir"/loomio-$name "$pkgdir"/usr/bin/loomio-$name - done - - for file in $pkgname $pkgname.sidekiq $pkgname.vue; do - install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file - done - - install -m644 -D "$srcdir"/loomio.confd \ - "$pkgdir"/etc/conf.d/loomio - - install -m644 -D "$srcdir"/loomio.logrotate \ - "$pkgdir"/etc/logrotate.d/loomio -} - -assets() { - depends="" - - amove $_prefix/public/assets -} - -sha512sums=" -72a1238c1eaa3b963bd20a09d4fc2e52798264779bdf06d3f32891f2880d246059c77381329d1274bfa5979a35740017f0ced324f88b205369e77335b403ffba loomio-2.21.4.tar.gz -6cd4bb030660a9f4697eeb7c6de3f7509558aab3651e68218583dfeea56634f3b9f58acb50c7c9a4188a38c19434a815dd6c347e30207c4c0ae028c8dcb6ccaf bin-wrapper.in -0f1c91fbd4b8099f0a115705d5af799e4492fa2a0fd54175f3bfbfb5be1122bd7fd73a7709695c7caf2dcc667f3b8715051c24f424472e1115753e43a38fdf50 loomio.confd -1ecb0717cd5f04b894467b21d226b98d8f83b8f62afbf8da7edd57973aeabb13d121e9061cc48aec7572b1c710e82c8b44a1cedc0a924efd4bc4a124b3afe9a8 loomio.logrotate -c5dae2b6f9a23853c3c7ac068d97a7b0269b1775f6e0169c3d8999ec67c2baf3545515ea21037e882d900b15a7abf9061dd5a584bdc82c347b54d8c134f6d7a4 loomio.sidekiq.initd -f774954d8b06aacab27af9593b1b12fbe18ec2d0593dd4f82e4d3dfbc7e325fb1a423347fd974a2ec6665776a6cfe85f255f4fd7493c97eb840f34eb7fbdb329 loomio.vue.initd -645637c4112ec91ec2ea6022713e77a8ee76c0f0a81f9adf1f9210b52a578e94b5b02f0b6244b173905f580f72dc362b5434c714aae11e3619f73af223891bb8 loomio.initd -" diff --git a/user/loomio/bin-wrapper.in b/user/loomio/bin-wrapper.in deleted file mode 100644 index fad9737..0000000 --- a/user/loomio/bin-wrapper.in +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -BUNDLE_DIR='/usr/lib/webapps/loomio' -export RAILS_ENV='production' -export NODE_ENV='production' -export EXECJS_RUNTIME='Disabled' - -cd $BUNDLE_DIR -install -m 700 -o loomio -g loomio -d "$(readlink ./tmp)" - -if [ "$(id -un)" != 'loomio' ]; then - exec su loomio -c '"$0" "$@"' -- bin/__COMMAND__ "$@" -else - exec bin/__COMMAND__ "$@" -fi diff --git a/user/loomio/loomio.confd b/user/loomio/loomio.confd deleted file mode 100644 index 890ad21..0000000 --- a/user/loomio/loomio.confd +++ /dev/null @@ -1,32 +0,0 @@ -# Configuration file for /etc/init.d/loomio and -# /etc/init.d/loomio.{vue,sidekiq} - -# Specify how many processes to create using sidekiq-cluster and which queue -# they should handle. Each whitespace-separated item equates to one additional -# Sidekiq process, and comma-separated values in each item determine the queues -# it works on. The special queue name "*" means all queues. -# Example: "* gitlab_shell process_commit,post_receive" -# See https://docs.gitlab.com/ee/administration/sidekiq/extra_sidekiq_processes.html. -#sidekiq_queue_groups="*" - -# Maximum threads to use with Sidekiq (default: 50, 0 to disable). -#sidekiq_max_concurrency= - -# Minimum threads to use with Sidekiq (default: 0). -#sidekiq_min_concurrency= - -# The number of seconds to wait between worker checks. -#sidekiq_interval= - -# Graceful timeout for all running processes. -#sidekiq_shutdown_timeout= - -# Run workers for all queues in sidekiq_queues.yml except the given ones. -#sidekiq_negate=no - -# Run workers based on the provided selector. -#sidekiq_queue_selector=no - -# Memory limit (in MiB) for the Sidekiq process. If the RSS (Resident Set Size) -# of the Sidekiq process exceeds this limit, a delayed shutdown is triggered. -#sidekiq_memkiller_max_rss=2000 diff --git a/user/loomio/loomio.initd b/user/loomio/loomio.initd deleted file mode 100644 index 864d102..0000000 --- a/user/loomio/loomio.initd +++ /dev/null @@ -1,39 +0,0 @@ -#!/sbin/openrc-run - -name="Loomio" -description="Meta script for starting/stopping all the Loomio components" -subservices="loomio.sidekiq loomio.vue" - -depend() { - use net -} - -start() { - local ret=0 - - ebegin "Starting all Loomio components" - local svc; for svc in $subservices; do - service $svc start || ret=1 - done - eend $ret -} - -stop() { - local ret=0 - - ebegin "Stopping all Loomio components" - local svc; for svc in $subservices; do - service $svc stop || ret=1 - done - eend $ret -} - -status() { - local ret=0 - - local svc; for svc in $subservices; do - echo "$svc:" - service $svc status || ret=1 - done - eend $ret -} diff --git a/user/loomio/loomio.logrotate b/user/loomio/loomio.logrotate deleted file mode 100644 index f7fd264..0000000 --- a/user/loomio/loomio.logrotate +++ /dev/null @@ -1,11 +0,0 @@ -/var/log/loomio/*.log { - compress - copytruncate - delaycompress - maxsize 10M - minsize 1M - missingok - sharedscripts - rotate 10 - weekly -} diff --git a/user/loomio/loomio.post-install b/user/loomio/loomio.post-install deleted file mode 100755 index 2e2fb10..0000000 --- a/user/loomio/loomio.post-install +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -set -eu - -group=loomio -config_file='/etc/loomio/config.yml' - -#if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then -# echo "* Generating random secret in $config_file" >&2 - -# secret_key="$(pwgen -s 50 1)" -# sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" -#fi - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish Loomio upgrade run: - * - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/loomio/config.yml. - * - * 2. Create database for loomio: - * - * psql -c "CREATE ROLE loomio PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE loomio OWNER loomio ENCODING 'UTF-8';" - * - EOF -fi diff --git a/user/loomio/loomio.post-upgrade b/user/loomio/loomio.post-upgrade deleted file mode 120000 index ec5bf9b..0000000 --- a/user/loomio/loomio.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -loomio.post-install \ No newline at end of file diff --git a/user/loomio/loomio.pre-install b/user/loomio/loomio.pre-install deleted file mode 100644 index 612ce4c..0000000 --- a/user/loomio/loomio.pre-install +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -loomio_dir='/var/lib/loomio' - -if ! getent group loomio 1>/dev/null; then - echo '* Creating group loomio' 1>&2 - - addgroup -S loomio -fi - -if ! id loomio 2>/dev/null 1>&2; then - echo '* Creating user loomio' 1>&2 - - adduser -DHS -G loomio -h "$loomio_dir" -s /bin/sh \ - -g "added by apk for loomio" loomio - passwd -u loomio 1>/dev/null # unlock -fi - -if ! id -Gn loomio | grep -Fq redis; then - echo '* Adding user loomio to group www-data' 1>&2 - - addgroup loomio www-data -fi - -exit 0 diff --git a/user/loomio/loomio.sidekiq.initd b/user/loomio/loomio.sidekiq.initd deleted file mode 100644 index fd3dd2d..0000000 --- a/user/loomio/loomio.sidekiq.initd +++ /dev/null @@ -1,32 +0,0 @@ -#!/sbin/openrc-run - -name="Loomio background workers Service" -root="/usr/share/webapps/loomio" -pidfile="/run/loomio-sidekiq.pid" -logfile="/var/log/loomio/sidekiq.log" - -depend() { - use net - need redis -} - -start() { - ebegin "Starting Loomio background workers" - - cd $root - - start-stop-daemon --start --background \ - --chdir "${root}" \ - --user="loomio" \ - --make-pidfile --pidfile="${pidfile}" \ - -1 "${logfile}" -2 "${logfile}" \ - --exec /usr/bin/env -- RAILS_ENV=production bundle exec rails s - eend $? -} - -stop() { - ebegin "Stopping Loomio background workers" - start-stop-daemon --stop \ - --pidfile=${pidfile} \ - eend $? -} diff --git a/user/loomio/loomio.vue.initd b/user/loomio/loomio.vue.initd deleted file mode 100644 index 8fffb40..0000000 --- a/user/loomio/loomio.vue.initd +++ /dev/null @@ -1,31 +0,0 @@ -#!/sbin/openrc-run - -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME.conf" -pidfile="/run/$RC_SVCNAME.pid" -working_directory="/usr/share/bundles/loomio" -command="npm" -command_args="run serve" -command_user="loomio" -command_group="loomio" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/loomio/$RC_SVCNAME.log" -error_log="/var/log/loomio/$RC_SVCNAME.err" - -depend() { - need redis - need postgresql -} - -start_pre() { - cd "$working_directory" - checkpath --directory --owner $command_user:$command_group --mode 0775 \ - /var/log/loomio \ - /var/lib/loomio -} - -stop_pre() { - ebegin "Killing child processes" - kill $(ps -o pid= --ppid $(cat $pidfile)) || true -} From bc63f1ddb8504a0e147824ca012e7f32f3e4ef58 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:29 -0400 Subject: [PATCH 399/738] user/listmonk: drop due migration to ilot iports --- user/listmonk/APKBUILD | 71 ----------------------------- user/listmonk/listmonk.openrc | 29 ------------ user/listmonk/listmonk.post-install | 27 ----------- user/listmonk/listmonk.post-upgrade | 1 - user/listmonk/listmonk.pre-install | 21 --------- user/listmonk/listmonk.sh | 12 ----- 6 files changed, 161 deletions(-) delete mode 100644 user/listmonk/APKBUILD delete mode 100644 user/listmonk/listmonk.openrc delete mode 100644 user/listmonk/listmonk.post-install delete mode 120000 user/listmonk/listmonk.post-upgrade delete mode 100644 user/listmonk/listmonk.pre-install delete mode 100644 user/listmonk/listmonk.sh diff --git a/user/listmonk/APKBUILD b/user/listmonk/APKBUILD deleted file mode 100644 index 00951f0..0000000 --- a/user/listmonk/APKBUILD +++ /dev/null @@ -1,71 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=listmonk -pkgver=3.0.0 -pkgrel=0 -pkgdesc='Self-hosted newsletter and mailing list manager with a modern dashboard' -arch="all" -url=https://listmonk.app -license="AGPL3" -depends=" - libcap-setcap - postgresql - procps - " -makedepends="go npm nodejs yarn" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/knadh/listmonk/archive/v$pkgver.tar.gz - listmonk.sh - listmonk.openrc - " -install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" -subpackages="$pkgname-openrc" -pkgusers="listmonk" -pkggroups="listmonk" - -build() { - go build \ - -trimpath \ - -buildmode=pie \ - -mod=readonly \ - -modcacherw \ - -ldflags "-extldflags '$LDFLAGS' -X 'main.buildString=Alpine Linux v$pkgver-$pkgrel' -X 'main.versionString=v$pkgver'" \ - -o $pkgname \ - cmd/*.go - - ( - cd frontend - export YARN_CACHE_FOLDER="$srcdir/node_modules" - export VUE_APP_VERSION="v$pkgver" - yarn install --frozen-lockfile - yarn build - ) -} - -check() { - go test ./... -} - -package() { - install -Dm755 "$srcdir"/listmonk.sh "$pkgdir"/usr/bin/listmonk - install -Dm644 config.toml.sample "$pkgdir"/etc/listmonk/config.toml - install -Dm644 -t "$pkgdir"/usr/share/webapps/listmonk/ \ - schema.sql \ - queries.sql \ - config.toml.sample - install -Dm755 listmonk "$pkgdir"/usr/share/webapps/listmonk/ - install -Dm644 -t "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/ \ - frontend/dist/static/favicon.png - cp -a frontend/dist/static "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/static - cp -a frontend/dist/index.html "$pkgdir"/usr/share/webapps/listmonk/frontend/dist/index.html - cp -a static "$pkgdir"/usr/share/webapps/listmonk/ - cp -a i18n "$pkgdir"/usr/share/webapps/listmonk/ - install -Dm755 "$srcdir"/$pkgname.openrc \ - "$pkgdir"/etc/init.d/$pkgname - ln -s /etc/listmonk/config.toml "$pkgdir"/usr/share/webapps/listmonk/config.toml -} -sha512sums=" -afd0ea1d4d2b2753c3043526590cf09c45a541a2d818f5d1581644ffd10818326fd553a3b04bca59494860a7bb6e96364b08afd33d337a9fc5c71bedd1a5ee6c listmonk-3.0.0.tar.gz -939450af4b23708e3d23a5a88fad4c24b957090bdd21351a6dd520959e52e45e5fcac117a3eafa280d9506616dae39ad3943589571f008cac5abe1ffd8062424 listmonk.sh -8e9c0b1f335c295fb741418246eb17c7566e5e4200a284c6483433e8ddbf5250aa692435211cf062ad1dfcdce3fae9148def28f03f2492d33fe5e66cbeebd4bd listmonk.openrc -" diff --git a/user/listmonk/listmonk.openrc b/user/listmonk/listmonk.openrc deleted file mode 100644 index e2ccb5b..0000000 --- a/user/listmonk/listmonk.openrc +++ /dev/null @@ -1,29 +0,0 @@ -#!/sbin/openrc-run - -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME.conf" -pidfile="/run/$RC_SVCNAME.pid" -working_directory="/usr/share/webapps/listmonk" -command="/usr/share/webapps/listmonk/listmonk" -command_user="listmonk" -command_group="listmonk" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/listmonk/$RC_SVCNAME.log" -error_log="/var/log/listmonk/$RC_SVCNAME.err" - -depend() { - need postgresql -} - -start_pre() { - cd "$working_directory" - checkpath --directory --owner $command_user:$command_group --mode 0775 \ - /var/log/listmonk \ - /var/lib/listmonk -} - -stop_pre() { - ebegin "Killing child processes" - kill $(ps -o pid= --ppid $(cat $pidfile)) || true -} diff --git a/user/listmonk/listmonk.post-install b/user/listmonk/listmonk.post-install deleted file mode 100644 index fe3cc8d..0000000 --- a/user/listmonk/listmonk.post-install +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -set -eu - -setcap 'cap_net_bind_service=+ep' /usr/share/webapps/listmonk/listmonk - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish Listmonk upgrade run: - * - * listmonk --upgrade - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/listmonk/config.toml. - * - * 2. Create database for Listmonk: - * - * psql -c "CREATE ROLE listmonk PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE listmonk OWNER listmonk ENCODING 'UTF-8';" - * - * 3. Run "listmonk --install" - * - EOF -fi diff --git a/user/listmonk/listmonk.post-upgrade b/user/listmonk/listmonk.post-upgrade deleted file mode 120000 index 0b729b1..0000000 --- a/user/listmonk/listmonk.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -listmonk.post-install \ No newline at end of file diff --git a/user/listmonk/listmonk.pre-install b/user/listmonk/listmonk.pre-install deleted file mode 100644 index 71eb3a0..0000000 --- a/user/listmonk/listmonk.pre-install +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -listmonk_dir='/var/lib/listmonk' - -if ! getent group listmonk 1>/dev/null; then - echo '* Creating group listmonk' 1>&2 - - addgroup -S listmonk -fi - -if ! id listmonk 2>/dev/null 1>&2; then - echo '* Creating user listmonk' 1>&2 - - adduser -DHS -G listmonk -h "$listmonk_dir" -s /bin/sh \ - -g "added by apk for listmonk" listmonk - passwd -u listmonk 1>/dev/null # unlock -fi - - -exit 0 diff --git a/user/listmonk/listmonk.sh b/user/listmonk/listmonk.sh deleted file mode 100644 index d89ca52..0000000 --- a/user/listmonk/listmonk.sh +++ /dev/null @@ -1,12 +0,0 @@ - -#!/bin/sh - -BUNDLE_DIR='/usr/share/webapps/listmonk' - -cd $BUNDLE_DIR - -if [ "$(id -un)" != 'listmonk' ]; then - exec su listmonk -c '"$0" "$@"' -- ./listmonk "$@" -else - exec ./listmonk "$@" -fi From 10821c427a786fa2cd29e652e5f05e3da2a7fd91 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:31 -0400 Subject: [PATCH 400/738] user/freescout: drop due migration to ilot iports --- user/freescout/APKBUILD | 82 ------- user/freescout/freescout-manage.sh | 11 - user/freescout/freescout.nginx | 56 ----- user/freescout/freescout.post-install | 48 ---- user/freescout/freescout.post-upgrade | 1 - user/freescout/freescout.pre-install | 25 -- .../rename-client-to-membre-fr-en.patch | 220 ------------------ 7 files changed, 443 deletions(-) delete mode 100644 user/freescout/APKBUILD delete mode 100644 user/freescout/freescout-manage.sh delete mode 100644 user/freescout/freescout.nginx delete mode 100755 user/freescout/freescout.post-install delete mode 120000 user/freescout/freescout.post-upgrade delete mode 100755 user/freescout/freescout.pre-install delete mode 100644 user/freescout/rename-client-to-membre-fr-en.patch diff --git a/user/freescout/APKBUILD b/user/freescout/APKBUILD deleted file mode 100644 index 1fd520c..0000000 --- a/user/freescout/APKBUILD +++ /dev/null @@ -1,82 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -pkgname=freescout -pkgver=1.8.139 -pkgrel=0 -pkgdesc="Free self-hosted help desk & shared mailbox" -arch="noarch" -url="freescout.net" -license="AGPL-3.0" -_php=php83 -_php_mods="-fpm -mbstring -xml -imap -zip -gd -curl -intl -tokenizer -pdo_pgsql -openssl -session -iconv -fileinfo -dom -pcntl" -depends="$_php ${_php_mods//-/$_php-} nginx postgresql pwgen" -makedepends="composer pcre" -install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/freescout-helpdesk/freescout/archive/refs/tags/$pkgver.tar.gz - freescout.nginx - freescout-manage.sh - rename-client-to-membre-fr-en.patch - " -pkgusers="freescout" -pkggroups="freescout" - -build() { - composer install --ignore-platform-reqs -} - -package() { - local logdir="/var/log/$pkgname" - local datadir="/var/lib/$pkgname" - local wwwdir="/usr/share/webapps/$pkgname" - local confdir="/etc/$pkgname" - - # Make directories - install -dm 755 \ - "$pkgdir"/$wwwdir \ - "$pkgdir"/$confdir \ - "$pkgdir"/$logdir \ - "$pkgdir"/$datadir - - # Copy and ln operations - cp $builddir/* -R "$pkgdir"/$wwwdir/. - for i in storage/app storage/framework bootstrap/cache \ - public/css/builds public/js/builds public/modules Modules; do - - if [ -d "$pkgdir"$wwwdir/$i ]; then - if [ ! -d "$pkgdir"/$datadir/${i%/*} ]; then - mkdir -p "$pkgdir"/$datadir/${i%/*} - fi - mv "$pkgdir"$wwwdir/$i "$pkgdir"/$datadir/$i - else - mkdir -p "$pkgdir"/$datadir/$i - fi - ln -s $datadir/$i "$pkgdir"/$wwwdir/$i - done - ln -s /etc/freescout/freescout.conf "$pkgdir"/usr/share/webapps/freescout/.env - ln -s $wwwdir/storage/app/public "$pkgdir"/$wwwdir/public/storage - - # log dir - rm -R "$pkgdir"/$wwwdir/storage/logs - ln -s "$logdir" "$pkgdir"/$wwwdir/storage/logs - - # Permission settings - chown -R freescout:www-data "$pkgdir"/$datadir "$pkgdir"/$logdir - - # config files - install -Dm644 "$srcdir"/freescout.nginx \ - "$pkgdir"/etc/nginx/http.d/freescout.conf - install -Dm640 "$builddir"/.env.example \ - "$pkgdir"/etc/freescout/freescout.conf - sed -i 's|APP_KEY.*|APP_KEY=@@SECRET_KEY@@|' "$pkgdir"/etc/freescout/freescout.conf - chown root:www-data "$pkgdir"/etc/freescout/freescout.conf - - # Install wrapper script to /usr/bin. - install -m755 -D "$srcdir"/freescout-manage.sh "$pkgdir"/usr/bin/freescout-manage -} -sha512sums=" -11d81fa670bd67a7db9f5bff3a067a1d1cf3c812a34c805a3fc83edc978ded3accc8334581eca1e73cf0ad95f8e289278add57de096528728e2989135b3057a3 freescout-1.8.139.tar.gz -e4af6c85dc12f694bef2a02e4664e31ed50b2c109914d7ffad5001c2bbd764ef25b17ecaa59ff55ef41bccf17169bf910d1a08888364bdedd0ecc54d310e661f freescout.nginx -7ce9b3ee3a979db44f5e6d7daa69431e04a5281f364ae7be23e5a0a0547f96abc858d2a8010346be2fb99bd2355fb529e7030ed20d54f310249e61ed5db4d0ba freescout-manage.sh -3416da98d71aea5a7093913ea34e783e21ff05dca90bdc5ff3d00c548db5889f6d0ec98441cd65ab9f590be5cd59fdd0d7f1c98b5deef7bb3adbc8db435ec9bf rename-client-to-membre-fr-en.patch -" diff --git a/user/freescout/freescout-manage.sh b/user/freescout/freescout-manage.sh deleted file mode 100644 index 9367807..0000000 --- a/user/freescout/freescout-manage.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -BUNDLE_DIR='/usr/share/webapps/freescout' - -cd $BUNDLE_DIR - -if [ "$(id -un)" != 'freescout' ]; then - exec su freescout -c '"$0" "$@"' -- php artisan "$@" -else - exec php artisan "$@" -fi diff --git a/user/freescout/freescout.nginx b/user/freescout/freescout.nginx deleted file mode 100644 index 15f2161..0000000 --- a/user/freescout/freescout.nginx +++ /dev/null @@ -1,56 +0,0 @@ -server { - listen 80; - listen [::]:80; - - server_name example.com www.example.com; - - root /usr/share/webapps/freescout/public; - - index index.php index.html index.htm; - - error_log /var/www/html/storage/logs/web-server.log; - - # Max. attachment size. - # It must be also set in PHP.ini via "upload_max_filesize" and "post_max_size" directives. - client_max_body_size 20M; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass unix:/run/php/php8.0-fpm.sock; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - } - # Uncomment this location if you want to improve attachments downloading speed. - # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file. - #location ^~ /storage/app/attachment/ { - # internal; - # alias /var/www/html/storage/app/attachment/; - #} - location ~* ^/storage/attachment/ { - expires 1M; - access_log off; - try_files $uri $uri/ /index.php?$query_string; - } - location ~* ^/(?:css|js)/.*\.(?:css|js)$ { - expires 2d; - access_log off; - add_header Cache-Control "public, must-revalidate"; - } - # The list should be in sync with /storage/app/public/uploads/.htaccess and /config/app.php - location ~* ^/storage/.*\.((?!(jpg|jpeg|jfif|pjpeg|pjp|apng|bmp|gif|ico|cur|png|tif|tiff|webp|pdf|txt|diff|patch|json|mp3|wav|ogg|wma)).)*$ { - add_header Content-disposition "attachment; filename=$2"; - default_type application/octet-stream; - } - location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ { - expires 1M; - access_log off; - add_header Cache-Control "public"; - } - location ~ /\. { - deny all; - } -} diff --git a/user/freescout/freescout.post-install b/user/freescout/freescout.post-install deleted file mode 100755 index 467962b..0000000 --- a/user/freescout/freescout.post-install +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -set -eu - -group=www-data -config_file='/etc/freescout/freescout.conf' - -if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then - echo "* Generating random secret in $config_file" >&2 - - secret_key="$(freescout-manage key:generate --show)" - sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" -fi - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish Freescout upgrade run: - * - * freescout-manage freescout:after-app-update - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/freescout/freescout.conf - * - * 2. Make sure cgi.fix_pathinfo=0 is set in /etc/php8x/php.ini is set - * - * 3. Create database for Freescout: - * - * psql -c "CREATE ROLE freescout PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE freescout OWNER freescout ENCODING 'UTF-8';" - * - * 4. Clear application cache and apply .env file changes: - * - * freescout-manage freescout:clear-cache - * - * 5. Create tables: - * - * freescout-manage migrate - * - * 6. Create admin user - * - * freescout-manage freescout:create-user - * - EOF -fi - diff --git a/user/freescout/freescout.post-upgrade b/user/freescout/freescout.post-upgrade deleted file mode 120000 index d53f932..0000000 --- a/user/freescout/freescout.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -freescout.post-install \ No newline at end of file diff --git a/user/freescout/freescout.pre-install b/user/freescout/freescout.pre-install deleted file mode 100755 index 6332408..0000000 --- a/user/freescout/freescout.pre-install +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -freescout_dir='/var/lib/freescout' - -if ! getent group freescout 1>/dev/null; then - echo '* Creating group freescout' 1>&2 - - addgroup -S freescout -fi - -if ! id freescout 2>/dev/null 1>&2; then - echo '* Creating user freescout' 1>&2 - - adduser -DHS -G freescout -h "$freescout_dir" -s /bin/sh \ - -g "added by apk for freescout" freescout - passwd -u freescout 1>/dev/null # unlock -fi - -if ! id -Gn freescout | grep -Fq www-data; then - echo '* Adding user freescout to group www-data' 1>&2 - - addgroup freescout www-data -fi - -exit 0 diff --git a/user/freescout/rename-client-to-membre-fr-en.patch b/user/freescout/rename-client-to-membre-fr-en.patch deleted file mode 100644 index 097e503..0000000 --- a/user/freescout/rename-client-to-membre-fr-en.patch +++ /dev/null @@ -1,220 +0,0 @@ -diff --git a/resources/lang/en.json b/resources/lang/en.json -new file mode 100644 -index 00000000..82d26052 ---- /dev/null -+++ b/resources/lang/en.json -@@ -0,0 +1,32 @@ -+{ -+ ":person changed the customer to :customer": ":person changed the member to :customer", -+ ":person changed the customer to :customer in conversation #:conversation_number": ":person changed the member to :customer in conversation #:conversation_number", -+ "Auto reply to customer": "Auto reply to member", -+ "Change Customer": "Change Member", -+ "Change the customer to :customer_email?": "Change the member to :customer_email?", -+ "Create a new customer": "Create a new member", -+ "Customer": "Member", -+ "Customer Name": "Member Name", -+ "Customer Profile": "Member Profile", -+ "Customer changed": "Member changed", -+ "Customer saved successfully.": "Member saved successfully", -+ "Customer viewed :when": "Member viewed :when", -+ "Customers": "Members", -+ "Customers email this address for help (e.g. support@domain.com)": "Members email this address for help (e.g. support@domain.com)", -+ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end has been moved from another member: :a_begin:customer:a_end.", -+ "Email to customer": "Email to member", -+ "Emails to Customers": "Emails to Members", -+ "Error sending email to customer": "Error sending email to member", -+ "Message not sent to customer": "Message not sent to member", -+ "Name that will appear in the From<\/strong> field when a customer views your email.": "Name that will appear in the From<\/strong> field when a member views your email.", -+ "No customers found": "No members found", -+ "No customers found. Would you like to create one?": "No members found. Would you like to create one?", -+ "Notify :person when a customer replies…": "Notify :person when a member replies…", -+ "Notify me when a customer replies…": "Notify me when a member replies…", -+ "Search for a customer by name or email": "Search for a member by name or email", -+ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "Sending emails need to be configured for the mailbox in order to send emails to members and support agents", -+ "This number is not visible to customers. It is only used to track conversations within :app_name": "This number is not visible to members. It is only used to track conversations within :app_name", -+ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "This reply will go to the member. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.", -+ "This text will be added to the beginning of each email reply sent to a customer.": "This text will be added to the beginning of each email reply sent to a member.", -+ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "When a member emails this mailbox, application can send an auto reply to the member immediately.Only one auto reply is sent per new conversation." -+} -\ No newline at end of file -diff --git a/resources/lang/fr.json.orig b/resources/lang/fr.json -index ff8d9d4..98d158f 100644 ---- a/resources/lang/fr.json.orig -+++ b/resources/lang/fr.json -@@ -26,8 +26,8 @@ - ":person added a note to conversation #:conversation_number": ":person a ajouté une note à la conversation #:conversation_number", - ":person assigned :assignee conversation #:conversation_number": ":person a assigné :assignee à la conversation #:conversation_number", - ":person assigned to :assignee": ":person a assigné :assignee", -- ":person changed the customer to :customer": ":person a changé le client en :customer", -- ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le client en :customer dans la conversation #:conversation_number", -+ ":person changed the customer to :customer": ":person a changé le membre en :customer", -+ ":person changed the customer to :customer in conversation #:conversation_number": ":person a changé le membre en :customer dans la conversation #:conversation_number", - ":person created a draft": ":person a créé un brouillon", - ":person deleted": ":person supprimée", - ":person edited :creator's draft": ":person a modifié brouillon de :creator", -@@ -112,7 +112,7 @@ - "Auto Reply": "Réponse Automatique", - "Auto Reply status saved": "Statut de réponse automatique enregistré", - "Auto replies don't include your mailbox signature, so be sure to add your contact information if necessary.": "Les réponses automatiques n'incluent pas la signature de votre boîte aux lettres, assurez-vous d'ajouter vos coordonnées si nécessaire.", -- "Auto reply to customer": "Réponse automatique au client", -+ "Auto reply to customer": "Réponse automatique au membre", - "Back": "Retour", - "Back to folder": "Retour au dossier", - "Background Jobs": "Emplois d'arrière-plan", -@@ -123,10 +123,10 @@ - "Cancel": "Annuler", - "Cc": "Cc", - "Change": "Modifier", -- "Change Customer": "Changer de client", -+ "Change Customer": "Changer de membre", - "Change address in mailbox settings": "Modifier l'adresse dans les paramètres de la boîte aux lettres", - "Change default redirect": "Modifier la redirection par défaut", -- "Change the customer to :customer_email?": "Changer le client en :customer_email ?", -+ "Change the customer to :customer_email?": "Changer le membre en :customer_email ?", - "Change your password": "Changer votre mot de passe", - "Chat": "Tchat", - "Check Connection": "Vérifier la connexion", -@@ -182,7 +182,7 @@ - "Create a New User": "Créer un nouvel utilisateur", - "Create a Password": "Créer un mot de passe", - "Create a mailbox": "Créer une boîte de réception", -- "Create a new customer": "Créer un nouveau client", -+ "Create a new customer": "Créer un nouveau membre", - "Create symlink manually": "Créer un lien symbolique manuellement", - "Created At": "Créé à", - "Created by :person": "Créé par :person", -@@ -190,14 +190,14 @@ - "Current Password": "Mot de passe actuel", - "Custom From Name": "Nom de l'expéditeur personnalisé", - "Custom Name": "Nom personnalisé", -- "Customer": "Client", -- "Customer Name": "Nom du client", -- "Customer Profile": "Profil client", -- "Customer changed": "Client changé", -- "Customer saved successfully.": "Client enregistré avec succès.", -- "Customer viewed :when": "Client vu :when", -- "Customers": "Clients", -- "Customers email this address for help (e.g. support@domain.com)": "Les clients utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", -+ "Customer": "Membre", -+ "Customer Name": "Nom du membre", -+ "Customer Profile": "Profil membre", -+ "Customer changed": "Membre changé", -+ "Customer saved successfully.": "Membre enregistré avec succès.", -+ "Customer viewed :when": "Membre vu :when", -+ "Customers": "Membres", -+ "Customers email this address for help (e.g. support@domain.com)": "Les membres utilisent cette adresse par e-mail pour obtenir de l'aide (par exemple, support@domain.com)", - "Daily": "Quotidien", - "Dashboard": "Tableau de bord", - "Date": "Date", -@@ -247,15 +247,15 @@ - "Edit User": "Modifier l'utilisateur", - "Edited by :whom :when": "Édité par :whom :when", - "Email": "Email", -- "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre client : :a_begin:customer:a_end.", -+ "Email :tag_email_begin:email:tag_email_end has been moved from another customer: :a_begin:customer:a_end.": "Email :tag_email_begin:email:tag_email_end a été déplacé depuis un autre membre : :a_begin:customer:a_end.", - "Email Address": "Adresse e-mail", - "Email Alerts For Administrators": "Envoyez des alertes par e-mail aux administrateurs", - "Email Header": "En-tête de l'e-mail", - "Email Signature": "Signature e-mail", - "Email Template": "Modèle d'e-mail", - "Email passed for delivery. If you don't receive a test email, check your mail server logs.": "E-mail transmis pour livraison. Si vous ne recevez pas d'e-mail de test, consultez les journaux de votre serveur de messagerie.", -- "Email to customer": "Courriel au client", -- "Emails to Customers": "Emails aux clients", -+ "Email to customer": "Courriel au membre", -+ "Emails to Customers": "Emails aux membres", - "Empty Trash": "Vider la corbeille", - "Empty license key": "Clé de licence vide", - "Enable Auto Reply": "Activer la réponse automatique", -@@ -276,7 +276,7 @@ - "Error occurred. Please try again later.": "Erreur est survenue. Veuillez réessayer plus tard.", - "Error occurred. Please try again or try another :%a_start%update method:%a_end%": "Erreur est survenue. Veuillez réessayer ou en essayer une autre :%a_start% méthode de mise à jour:%a_end%", - "Error sending alert": "Erreur lors de l'envoi de l'alerte", -- "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au client", -+ "Error sending email to customer": "Erreur lors de l'envoi d'un e-mail au membre", - "Error sending email to the user who replied to notification from wrong email": "Erreur lors de l'envoi d'un e-mail à l'utilisateur qui a répondu à la notification d'un mauvais e-mail", - "Error sending email to user": "Erreur lors de l'envoi d'un e-mail à l'utilisateur", - "Error sending invitation email to user": "Erreur lors de l'envoi d'un e-mail d'invitation à l'utilisateur", -@@ -419,7 +419,7 @@ - "Message bounced (:link)": "Message renvoyé (:link)", - "Message cannot be empty": "Le message ne peut pas être vide", - "Message has been already sent. Please discard this draft.": "Le message a déjà été envoyé. Veuillez effacer ce brouillon.", -- "Message not sent to customer": "Message non envoyé au client", -+ "Message not sent to customer": "Message non envoyé au membre", - "Method": "Méthode", - "Migrate DB": "Migrer la base de données", - "Mine": "Mes conversations", -@@ -439,7 +439,7 @@ - "My Apps": "Mes Applications", - "My open conversations": "Mes conversations ouvertes", - "Name": "Nom", -- "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un client consulte votre e-mail.", -+ "Name that will appear in the From<\/strong> field when a customer views your email.": "Nom qui apparaîtra dans le champ De<\/strong> lorsqu'un membre consulte votre e-mail.", - "New Conversation": "Nouvelle conversation", - "New Mailbox": "Nouvelle boîte de réception", - "New Password": "Nouveau mot de passe", -@@ -451,8 +451,8 @@ - "Next active conversation": "Conversation active suivante", - "No": "Non", - "No activations left for this license key": "Il ne reste aucune activation pour cette clé de licence", -- "No customers found": "Aucun client trouvé", -- "No customers found. Would you like to create one?": "Aucun client trouvé. Souhaitez-vous en créer un?", -+ "No customers found": "Aucun membre trouvé", -+ "No customers found. Would you like to create one?": "Aucun membre trouvé. Souhaitez-vous en créer un?", - "No invite was found. Please contact your administrator to have a new invite email sent.": "Aucune invitation trouvée. Veuillez contacter votre administrateur pour qu'il envoie une nouvelle invitation par email.", - "Non-writable files found": "Fichiers non-inscriptibles trouvés", - "None": "Aucun", -@@ -471,10 +471,10 @@ - "Notifications": "Notifications", - "Notifications saved successfully": "Notifications enregistrées", - "Notifications will start showing up here soon": "Les notifications commenceront bientôt à apparaître ici", -- "Notify :person when a customer replies…": "Avertir :person lorsqu'un client répond…", -+ "Notify :person when a customer replies…": "Avertir :person lorsqu'un membre répond…", - "Notify :person when another :app_name user replies or adds a note…": "Notifier :person quand un autre utilisateur :app_name répond ou ajoute une note…", - "Notify :person when…": "Avertir :person lorsque…", -- "Notify me when a customer replies…": "M'avertir lorsqu'un client répond…", -+ "Notify me when a customer replies…": "M'avertir lorsqu'un membre répond…", - "Notify me when another :app_name user replies or adds a note…": "M'avertir lorsqu'un autre utilisateur :app_name répond ou ajoute une note…", - "Notify me when…": "Prévenez-moi quand…", - "Number": "Numéro", -@@ -587,7 +587,7 @@ - "Search": "Recherche", - "Search Conversation by Number": "Rechercher une conversation par identifiant", - "Search Users": "Rechercher des utilisateurs", -- "Search for a customer by name or email": "Rechercher un client par nom ou par e-mail", -+ "Search for a customer by name or email": "Rechercher un membre par nom ou par e-mail", - "See logs": "Voir les journaux", - "Select Mailbox": "Sélectionnez une boîte aux lettres", - "Selected Users have access to this mailbox:": "Les utilisateurs sélectionnés ont accès à cette boîte aux lettres:", -@@ -613,7 +613,7 @@ - "Sending": "Envoi en cours", - "Sending Emails": "Sending Emails", - "Sending can not be undone": "L'envoie ne peut être annulé", -- "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux clients et aux agents de support", -+ "Sending emails need to be configured for the mailbox in order to send emails to customers and support agents": "L'envoi d'e-mails doit être configuré pour la boîte aux lettres afin d'envoyer des e-mails aux membre et aux agents de support", - "Sendmail": "Exécutable Sendmail", - "Separate each email with a comma.": "Séparez chaque e-mail par une virgule", - "Server": "Serveur", -@@ -670,11 +670,11 @@ - "This is a test mail sent by :app_name. It means that outgoing email settings of your :mailbox mailbox are fine.": "Il s'agit d'un mail de test envoyé par :app_name. Cela signifie que les paramètres de courrier électronique sortant de votre boîte aux lettres :mailbox sont corrects.", - "This is a test system mail sent by :app_name. It means that mail settings are fine.": "Il s'agit d'un e-mail du système de test envoyé par :app_name. Cela signifie que les paramètres de messagerie sont corrects.", - "This may take several minutes": "Cela peut prendre plusieurs minutes", -- "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les clients. Il est uniquement utilisé pour suivre les conversations dans :app_name", -+ "This number is not visible to customers. It is only used to track conversations within :app_name": "Ce numéro n'est pas visible pour les membres. Il est uniquement utilisé pour suivre les conversations dans :app_name", - "This password is incorrect.": "Ce mot de passe est incorrect.", -- "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au client. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", -+ "This reply will go to the customer. :%switch_start%Switch to a note:switch_end if you are replying to :user_name.": "Cette réponse ira au membre. :%switch_start%Passez à une note:switch_end si vous répondez à :user_name.", - "This setting gives you control over what page loads after you perform an action (send a reply, add a note, change conversation status or assignee).": "Ce paramètre vous permet de contrôler la page qui se charge après avoir effectué une action (envoyer une réponse, ajouter une note, etc.).", -- "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un client.", -+ "This text will be added to the beginning of each email reply sent to a customer.": "Ce texte sera ajouté au début de chaque réponse par e-mail envoyée à un membre.", - "Thread is not in a draft state": "Le fil n'est pas à l'état de brouillon", - "Thread not found": "Fil non trouvé", - "Time Format": "Format de l'heure", -@@ -751,7 +751,7 @@ - "Welcome to :company_name!": "Bienvenue chez :company_name !", - "Welcome to :company_name, :first_name!": "Bienvenue chez :company_name, :first_name!", - "Welcome to the team!": "Bienvenue dans l'équipe !", -- "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un client envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au client. Une seule réponse automatique est envoyée par nouvelle conversation.", -+ "When a customer emails this mailbox, application can send an auto reply to the customer immediately.Only one auto reply is sent per new conversation.": "Lorsqu'un membre envoie un e-mail à cette boîte aux lettres, l'application peut envoyer immédiatement une réponse automatique au membre. Une seule réponse automatique est envoyée par nouvelle conversation.", - "Which mailboxes will user use?": "Quelles boîtes aux lettres l'utilisateur utilisera-t-il?", - "Who Else Will Use This Mailbox": "Qui d'autre utilisera cette boîte aux lettres", - "Work": "Professionnel", From 9d6bf2f5a2f89e1717db505682c627b9b0a81cf5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:33 -0400 Subject: [PATCH 401/738] user/authentik: drop due migration to ilot iports --- user/authentik/APKBUILD | 258 ------------------ user/authentik/authentik-ldap.conf | 3 - user/authentik/authentik-ldap.openrc | 24 -- user/authentik/authentik-manage.sh | 11 - user/authentik/authentik-worker.openrc | 32 --- user/authentik/authentik.openrc | 30 -- user/authentik/authentik.post-install | 39 --- user/authentik/authentik.post-upgrade | 1 - user/authentik/authentik.pre-install | 26 -- user/authentik/fix-ak-bash.patch | 10 - .../root-settings-csrf_trusted_origins.patch | 12 - 11 files changed, 446 deletions(-) delete mode 100644 user/authentik/APKBUILD delete mode 100644 user/authentik/authentik-ldap.conf delete mode 100644 user/authentik/authentik-ldap.openrc delete mode 100644 user/authentik/authentik-manage.sh delete mode 100644 user/authentik/authentik-worker.openrc delete mode 100644 user/authentik/authentik.openrc delete mode 100755 user/authentik/authentik.post-install delete mode 120000 user/authentik/authentik.post-upgrade delete mode 100644 user/authentik/authentik.pre-install delete mode 100644 user/authentik/fix-ak-bash.patch delete mode 100644 user/authentik/root-settings-csrf_trusted_origins.patch diff --git a/user/authentik/APKBUILD b/user/authentik/APKBUILD deleted file mode 100644 index d10a575..0000000 --- a/user/authentik/APKBUILD +++ /dev/null @@ -1,258 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=authentik -pkgver=2024.4.3 -pkgrel=1 -pkgdesc="An open-source Identity Provider focused on flexibility and versatility" -url="https://github.com/goauthentik/authentik" -# s390x: missing py3-celery py3-flower and py3-kombu -# armhf/armv7/x86: out of memory error when building goauthentik -# ppc64le: not supported by Rollup build -arch="aarch64 x86_64" -license="MIT" -depends=" - libcap-setcap - nginx - postgresql - procps - pwgen - py3-aiohttp - py3-aiosignal - py3-amqp - py3-anyio - py3-asgiref - py3-asn1 - py3-asn1crypto - py3-async-timeout - py3-attrs - py3-autobahn - py3-automat - py3-bcrypt - py3-billiard - py3-cachetools - py3-cbor2 - py3-celery - py3-certifi - py3-cffi - py3-channels - py3-channels_redis - py3-charset-normalizer - py3-click - py3-click-didyoumean - py3-click-plugins - py3-click-repl - py3-codespell - py3-colorama - py3-constantly - py3-cparser - py3-cryptography - py3-dacite - py3-daphne - py3-dateutil - py3-deepmerge - py3-defusedxml - py3-deprecated - py3-dnspython - py3-django - py3-django-filter - py3-django-guardian - py3-django-model-utils - py3-django-otp - py3-django-prometheus - py3-django-redis - py3-django-rest-framework~=3.14.0 - py3-django-rest-framework-guardian - py3-django-storages - py3-django-tenants - py3-docker-py - py3-dotenv - py3-dumb-init - py3-duo_client - py3-drf-spectacular - py3-email-validator - py3-facebook-sdk - py3-fido2 - py3-flower - py3-frozenlist - py3-geoip2 - py3-google-auth - py3-gunicorn - py3-h11 - py3-httptools - py3-humanize - py3-hyperlink - py3-idna - py3-incremental - py3-inflection - py3-jsonschema - py3-jsonpatch - py3-jwt - py3-kombu - py3-kubernetes - py3-ldap3 - py3-lxml - py3-maxminddb - py3-msgpack - py3-multidict - py3-oauthlib - py3-opencontainers - py3-openssl - py3-packaging - py3-paramiko - py3-parsing - py3-prometheus-client - py3-prompt_toolkit - py3-psycopg - py3-psycopg-c - py3-pydantic-scim - py3-pynacl - py3-pyrsistent - py3-python-jwt - py3-redis - py3-requests - py3-requests-oauthlib - py3-rsa - py3-scim2-filter-parser - py3-setproctitle - py3-sentry-sdk - py3-service_identity - py3-setuptools - py3-six - py3-sniffio - py3-sqlparse - py3-structlog - py3-swagger-spec-validator - py3-tornado - py3-twilio - py3-twisted - py3-txaio - py3-tenant-schemas-celery - py3-typing-extensions - py3-tz - py3-ua-parser - py3-uritemplate - py3-urllib3-secure-extra - py3-uvloop - py3-vine - py3-watchdog - py3-watchfiles - py3-wcwidth - py3-webauthn - py3-websocket-client - py3-websockets - py3-wrapt - py3-wsproto - py3-xmlsec - py3-yaml - py3-yarl - py3-zope-interface - py3-zxcvbn - redis - uvicorn - " -makedepends="go npm" -# checkdepends scooped up by poetry due to number -checkdepends="poetry py3-coverage" -# tests disabled for now -options="!check" -install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/goauthentik/authentik/archive/refs/tags/version/$pkgver.tar.gz - authentik.openrc - authentik-worker.openrc - authentik-ldap.openrc - authentik-ldap.conf - authentik-manage.sh - fix-ak-bash.patch - root-settings-csrf_trusted_origins.patch - " -builddir="$srcdir/"authentik-version-$pkgver -subpackages="$pkgname-openrc $pkgname-doc" -pkgusers="authentik" -pkggroups="authentik" - -export GOPATH=$srcdir/go -export GOCACHE=$srcdir/go-build -export GOTMPDIR=$srcdir - -build() { - msg "Building authentik-ldap" - go build -o ldap cmd/ldap/main.go - msg "Building authentik-proxy" - go build -o proxy cmd/proxy/main.go - msg "Building authentik-radius" - go build -o radius cmd/proxy/main.go - msg "Building authentik-server" - go build -o server cmd/server/*.go - - msg "Building authentik-web" - cd web - npm ci --no-audit - npm run build - cd .. - - msg "Building website" - cd website - npm ci --no-audit - npm run build -} - -package() { - msg "Packaging $pkgname" - mkdir -p "$pkgdir"/usr/share/webapps/authentik/web - mkdir -p "$pkgdir"/usr/share/webapps/authentik/website - mkdir -p "$pkgdir"/var/lib/authentik - mkdir -p "$pkgdir"/usr/share/doc - mkdir -p "$pkgdir"/usr/bin - cp -dr "$builddir"/authentik "$pkgdir"/usr/share/webapps/authentik - cp -dr "$builddir"/web/dist "$pkgdir"/usr/share/webapps/authentik/web/dist - cp -dr "$builddir"/web/authentik "$pkgdir"/usr/share/webapps/authentik/web/authentik - cp -dr "$builddir"/website/build "$pkgdir"/usr/share/doc/authentik - cp -dr "$builddir"/tests "$pkgdir"/usr/share/webapps/authentik/tests - cp -dr "$builddir"/lifecycle "$pkgdir"/usr/share/webapps/authentik/lifecycle - cp -dr "$builddir"/locale "$pkgdir"/usr/share/webapps/authentik/locale - cp -dr "$builddir"/blueprints "$pkgdir"/var/lib/authentik/blueprints - install -Dm755 "$builddir"/manage.py "$pkgdir"/usr/share/webapps/authentik/manage.py - install -Dm755 "$builddir"/server "$pkgdir"/usr/share/webapps/authentik/server - ln -s "/etc/authentik/config.yml" "$pkgdir"/usr/share/webapps/authentik/local.env.yml - - install -Dm755 "$builddir"/proxy "$pkgdir"/usr/bin/authentik-proxy - install -Dm755 "$builddir"/ldap "$pkgdir"/usr/bin/authentik-ldap - install -Dm755 "$builddir"/radius "$pkgdir"/usr/bin/authentik-radius - - install -Dm755 "$srcdir"/$pkgname.openrc \ - "$pkgdir"/etc/init.d/$pkgname - install -Dm755 "$srcdir"/$pkgname-worker.openrc \ - "$pkgdir"/etc/init.d/$pkgname-worker - install -Dm755 "$srcdir"/$pkgname-ldap.openrc \ - "$pkgdir"/etc/init.d/$pkgname-ldap - install -Dm640 "$srcdir"/$pkgname-ldap.conf \ - "$pkgdir"/etc/conf.d/$pkgname-ldap - install -Dm640 "$builddir"/authentik/lib/default.yml \ - "$pkgdir"/etc/authentik/config.yml - chown root:www-data "$pkgdir"/etc/authentik/config.yml - - mv "$pkgdir"/usr/share/webapps/authentik/web/dist/custom.css "$pkgdir"/etc/authentik/custom.css - ln -s "/etc/authentik/custom.css" "$pkgdir"/usr/share/webapps/authentik/web/dist/custom.css - chown root:www-data "$pkgdir"/etc/authentik/custom.css - - sed -i 's|cert_discovery_dir.*|cert_discovery_dir: /var/lib/authentik/certs|' "$pkgdir"/etc/authentik/config.yml - sed -i 's|blueprints_dir.*|blueprints_dir: /var/lib/authentik/blueprints|' "$pkgdir"/etc/authentik/config.yml - sed -i 's|template_dir.*|template_dir: /var/lib/authentik/templates|' "$pkgdir"/etc/authentik/config.yml - printf "\ncsrf:\n trusted_origins: ['auth.example.com']" >> "$pkgdir"/etc/authentik/config.yml - printf "\nsecret_key: '@@SECRET_KEY@@'" >> "$pkgdir"/etc/authentik/config.yml - - # Install wrapper script to /usr/bin. - install -m755 -D "$srcdir"/authentik-manage.sh "$pkgdir"/usr/bin/authentik-manage -} - -sha512sums=" -121ed925d81a5cb2a14fed8ec8b324352e40b1fcbba83573bfdc1d1f66a91d9670cd64d7ef752c8a2df6c34fc3e19e8aec5c6752d33e87b487a462a590212ab0 authentik-2024.4.3.tar.gz -4defb4fe3a4230f4aa517fbecd5e5b8bcef2a64e1b40615660ae9eec33597310a09df5e126f4d39ce7764bd1716c0a7040637699135c103cbc1879593c6c06f1 authentik.openrc -6cb03b9b69df39bb4539fe05c966536314d766b2e9307a92d87070ba5f5b7e7ab70f1b5ee1ab3c0c50c23454f9c5a4caec29e63fdf411bbb7a124ad687569b89 authentik-worker.openrc -351e6920d987861f8bf0d7ab2f942db716a8dbdad1f690ac662a6ef29ac0fd46cf817cf557de08f1c024703503d36bc8b46f0d9eb1ecaeb399dce4c3bb527d17 authentik-ldap.openrc -89ee5f0ffdade1c153f3a56ff75b25a7104aa81d8c7a97802a8f4b0eab34850cee39f874dabe0f3c6da3f71d6a0f938f5e8904169e8cdd34d407c8984adee6b0 authentik-ldap.conf -f1a3cb215b6210fa7d857a452a9f2bc4dc0520e49b9fa7027547cff093d740a7e2548f1bf1f8831f7d5ccb80c8e523ee0c8bafcc4dc42d2788725f2137d21bee authentik-manage.sh -3e47db684a3f353dcecdb7bab8836b9d5198766735d77f676a51d952141a0cf9903fcb92e6306c48d2522d7a1f3028b37247fdc1dc74d4d6e043da7eb4f36d49 fix-ak-bash.patch -5c60e54b6a7829d611af66f5cb8184a002b5ae927efbd024c054a7c176fcb9efcfbe5685279ffcf0390b0f0abb3bb03e02782c6867c2b38d1ad2d508aae83fa0 root-settings-csrf_trusted_origins.patch -" diff --git a/user/authentik/authentik-ldap.conf b/user/authentik/authentik-ldap.conf deleted file mode 100644 index c31e819..0000000 --- a/user/authentik/authentik-ldap.conf +++ /dev/null @@ -1,3 +0,0 @@ -AUTHENTIK_HOST=https://example.com -AUTHENTIK_TOKEN=your-authentik-token -AUTHENTIK_INSECURE=true diff --git a/user/authentik/authentik-ldap.openrc b/user/authentik/authentik-ldap.openrc deleted file mode 100644 index fc033be..0000000 --- a/user/authentik/authentik-ldap.openrc +++ /dev/null @@ -1,24 +0,0 @@ -#!/sbin/openrc-run - -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME" -pidfile="/run/$RC_SVCNAME.pid" -working_directory="/usr/share/webapps/authentik" -command="/usr/bin/authentik-ldap" -command_user="authentik" -command_group="authentik" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/authentik/$RC_SVCNAME.log" -error_log="/var/log/authentik/$RC_SVCNAME.err" - -depend() { - need authentik -} - -start_pre() { - cd "$working_directory" - checkpath --directory --owner $command_user:$command_group --mode 0775 \ - /var/log/authentik - export AUTHENTIK_HOST AUTHENTIK_TOKEN AUTHENTIK_INSECURE AUTHENTIK_DEBUG -} diff --git a/user/authentik/authentik-manage.sh b/user/authentik/authentik-manage.sh deleted file mode 100644 index ef7357d..0000000 --- a/user/authentik/authentik-manage.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -BUNDLE_DIR='/usr/share/webapps/authentik' - -cd $BUNDLE_DIR - -if [ "$(id -un)" != 'authentik' ]; then - exec su authentik -c '"$0" "$@"' -- ./manage.py "$@" -else - exec ./manage.py "$@" -fi diff --git a/user/authentik/authentik-worker.openrc b/user/authentik/authentik-worker.openrc deleted file mode 100644 index f0fa964..0000000 --- a/user/authentik/authentik-worker.openrc +++ /dev/null @@ -1,32 +0,0 @@ -#!/sbin/openrc-run - -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME.conf" -pidfile="/run/$RC_SVCNAME.pid" -working_directory="/usr/share/webapps/authentik" -command="/usr/bin/authentik-manage" -command_args="worker" -command_user="authentik" -command_group="authentik" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/authentik/$RC_SVCNAME.log" -error_log="/var/log/authentik/$RC_SVCNAME.err" - -depend() { - need redis - need postgresql -} - -start_pre() { - cd "$working_directory" - checkpath --directory --owner $command_user:$command_group --mode 0775 \ - /var/log/authentik \ - /var/lib/authentik/certs \ - /var/lib/authentik/blueprints -} - -stop_pre() { - ebegin "Killing child processes" - kill $(ps -o pid= --ppid $(cat $pidfile)) || true -} diff --git a/user/authentik/authentik.openrc b/user/authentik/authentik.openrc deleted file mode 100644 index a036393..0000000 --- a/user/authentik/authentik.openrc +++ /dev/null @@ -1,30 +0,0 @@ -#!/sbin/openrc-run - -name="$RC_SVCNAME" -cfgfile="/etc/conf.d/$RC_SVCNAME.conf" -pidfile="/run/$RC_SVCNAME.pid" -working_directory="/usr/share/webapps/authentik" -command="/usr/share/webapps/authentik/server" -command_user="authentik" -command_group="authentik" -start_stop_daemon_args="" -command_background="yes" -output_log="/var/log/authentik/$RC_SVCNAME.log" -error_log="/var/log/authentik/$RC_SVCNAME.err" - -depend() { - need redis - need postgresql -} - -start_pre() { - cd "$working_directory" - checkpath --directory --owner $command_user:$command_group --mode 0775 \ - /var/log/authentik \ - /var/lib/authentik/certs -} - -stop_pre() { - ebegin "Killing child processes" - kill $(ps -o pid= --ppid $(cat $pidfile)) || true -} diff --git a/user/authentik/authentik.post-install b/user/authentik/authentik.post-install deleted file mode 100755 index a715d20..0000000 --- a/user/authentik/authentik.post-install +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -set -eu - -group=authentik -config_file='/etc/authentik/config.yml' - -setcap 'cap_net_bind_service=+ep' /usr/share/webapps/authentik/server - -if [ $(grep '@@SECRET_KEY@@' "$config_file") ]; then - echo "* Generating random secret in $config_file" >&2 - - secret_key="$(pwgen -s 50 1)" - sed -i "s|@@SECRET_KEY@@|$secret_key|" "$config_file" - chown root:$group "$config_file" -fi - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish Authentik upgrade run: - * - * authentik-manage migrate - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/authentik/config.yml. - * - * 2. Create database for Authentik: - * - * psql -c "CREATE ROLE authentik PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE authentik OWNER authentik ENCODING 'UTF-8';" - * - * 3. Run "authentik-manage migrate" - * 4. Setup admin user at https:///if/flow/initial-setup/ - * - EOF -fi diff --git a/user/authentik/authentik.post-upgrade b/user/authentik/authentik.post-upgrade deleted file mode 120000 index d310dd8..0000000 --- a/user/authentik/authentik.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -authentik.post-install \ No newline at end of file diff --git a/user/authentik/authentik.pre-install b/user/authentik/authentik.pre-install deleted file mode 100644 index 792f304..0000000 --- a/user/authentik/authentik.pre-install +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -authentik_dir='/var/lib/authentik' - -if ! getent group authentik 1>/dev/null; then - echo '* Creating group authentik' 1>&2 - - addgroup -S authentik -fi - -if ! id authentik 2>/dev/null 1>&2; then - echo '* Creating user authentik' 1>&2 - - adduser -DHS -G authentik -h "$authentik_dir" -s /bin/sh \ - -g "added by apk for authentik" authentik - passwd -u authentik 1>/dev/null # unlock -fi - -if ! id -Gn authentik | grep -Fq redis; then - echo '* Adding user authentik to group redis' 1>&2 - - addgroup authentik redis -fi - -exit 0 diff --git a/user/authentik/fix-ak-bash.patch b/user/authentik/fix-ak-bash.patch deleted file mode 100644 index c6afafb..0000000 --- a/user/authentik/fix-ak-bash.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/lifecycle/ak.orig b/lifecycle/ak -index 615bfe9..1646274 100755 ---- a/lifecycle/ak.orig -+++ b/lifecycle/ak -@@ -1,4 +1,4 @@ --#!/usr/bin/env -S bash -e -+#!/usr/bin/env bash - MODE_FILE="${TMPDIR}/authentik-mode" - - function log { diff --git a/user/authentik/root-settings-csrf_trusted_origins.patch b/user/authentik/root-settings-csrf_trusted_origins.patch deleted file mode 100644 index 4c235f9..0000000 --- a/user/authentik/root-settings-csrf_trusted_origins.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/authentik/root/settings.py b/authentik/root/settings.py -index 15e689b06..8b0c1d744 100644 ---- a/authentik/root/settings.py -+++ b/authentik/root/settings.py -@@ -33,6 +33,7 @@ AUTH_USER_MODEL = "authentik_core.User" - - CSRF_COOKIE_NAME = "authentik_csrf" - CSRF_HEADER_NAME = "HTTP_X_AUTHENTIK_CSRF" -+CSRF_TRUSTED_ORIGINS = CONFIG.get("csrf.trusted_origins") - LANGUAGE_COOKIE_NAME = "authentik_language" - SESSION_COOKIE_NAME = "authentik_session" - SESSION_COOKIE_DOMAIN = CONFIG.get("cookie_domain", None) From 8a2a28342a58546513baa0c7eef1b98654662bbe Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:35 -0400 Subject: [PATCH 402/738] user/ruby3.2-webrick: drop due migration to ilot iports --- user/ruby3.2-webrick/APKBUILD | 58 ------------------------------ user/ruby3.2-webrick/gemspec.patch | 13 ------- 2 files changed, 71 deletions(-) delete mode 100644 user/ruby3.2-webrick/APKBUILD delete mode 100644 user/ruby3.2-webrick/gemspec.patch diff --git a/user/ruby3.2-webrick/APKBUILD b/user/ruby3.2-webrick/APKBUILD deleted file mode 100644 index a0c0b1e..0000000 --- a/user/ruby3.2-webrick/APKBUILD +++ /dev/null @@ -1,58 +0,0 @@ -# Contributor: omni -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-webrick -_gemname=webrick -pkgver=1.8.1 -pkgrel=0 -pkgdesc="HTTP server toolkit for Ruby" -url="https://github.com/ruby/webrick" -arch="noarch" -license="BSD-2-Clause" -depends="ruby3.2" -checkdepends="ruby3.2-rake ruby3.2-test-unit" -makedepends="ruby3.2-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/ruby/webrick/archive/v$pkgver/ruby-webrick-$pkgver.tar.gz - gemspec.patch - " -builddir="$srcdir/$_gemname-$pkgver" - -prepare() { - default_prepare - sed -i '/require .bundler/d' Rakefile -} - -build() { - gem build $_gemname.gemspec -} - -check() { - rake test -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -21cb396887025f85cfe04868e7fa7ef039809ca42a3acadfe1decb4dcd02eeeb3c9163e970324b56a9e0eb6202d971370af56e200c69de2d224c1941f866400c ruby-webrick-1.8.1.tar.gz -5c657602228ba5aef4c272b75bc5d7c42855876811a49a7736bfa72b00d65a2bb550ea76ffcc2bc1e2ef9575796f5981eadd97cc92b1f3bf06c0105b8d166222 gemspec.patch -" diff --git a/user/ruby3.2-webrick/gemspec.patch b/user/ruby3.2-webrick/gemspec.patch deleted file mode 100644 index db18f02..0000000 --- a/user/ruby3.2-webrick/gemspec.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/webrick.gemspec -+++ b/webrick.gemspec -@@ -14,10 +14,6 @@ - - s.require_path = %w{lib} - s.files = [ -- "Gemfile", -- "LICENSE.txt", -- "README.md", -- "Rakefile", - "lib/webrick.rb", - "lib/webrick/accesslog.rb", - "lib/webrick/cgi.rb", From ece30e0fbb80235e8fb96f00533fe08d18bd814c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:38 -0400 Subject: [PATCH 403/738] user/ruby3.2-test-unit: drop due migration to ilot iports --- user/ruby3.2-test-unit/APKBUILD | 54 ---------------------------- user/ruby3.2-test-unit/gemspec.patch | 8 ----- 2 files changed, 62 deletions(-) delete mode 100644 user/ruby3.2-test-unit/APKBUILD delete mode 100644 user/ruby3.2-test-unit/gemspec.patch diff --git a/user/ruby3.2-test-unit/APKBUILD b/user/ruby3.2-test-unit/APKBUILD deleted file mode 100644 index 6e30887..0000000 --- a/user/ruby3.2-test-unit/APKBUILD +++ /dev/null @@ -1,54 +0,0 @@ -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-test-unit -_gemname=test-unit -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=3.5.7 -pkgrel=0 -pkgdesc="An xUnit family unit testing framework for Ruby" -url="https://test-unit.github.io" -arch="noarch" -license="BSD-2-Clause AND Python-2.0 AND Ruby" -depends="ruby3.2 ruby3.2-power_assert" -makedepends="ruby3.2-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/test-unit/test-unit/archive/$pkgver/$_gemname-$pkgver.tar.gz - gemspec.patch - " -builddir="$srcdir/$_gemname-$pkgver" - -build() { - gem build $_gemname.gemspec -} - -check() { - ruby test/run-test.rb -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -af678a89590c9305eeac3a4e5c7e99354df5b49157de573ee3ff312dad9f12dbcaef3dfe7ffc256194e39e0438625acdd9ab3e9686d7e2c58b2cf225f7f1f74c test-unit-3.5.7.tar.gz -22f54fcf272856a9455d5a7276896ec329377b106ab47e3d376158eee72cf570f4487dd87606d730d061e7b06e5d7a0ff561cd8d279a64d8af0ac04e0f2dba92 gemspec.patch -" diff --git a/user/ruby3.2-test-unit/gemspec.patch b/user/ruby3.2-test-unit/gemspec.patch deleted file mode 100644 index f2beca1..0000000 --- a/user/ruby3.2-test-unit/gemspec.patch +++ /dev/null @@ -1,8 +0,0 @@ ---- a/test-unit.gemspec -+++ b/test-unit.gemspec -@@ -27,4 +27 @@ -- spec.files = ["README.md", "Rakefile"] -- spec.files += ["COPYING", "BSDL", "PSFL"] -- spec.files += Dir.glob("{lib,sample}/**/*.rb") -- spec.files += Dir.glob("doc/text/**/*.*") -+ spec.files += Dir.glob("lib/**/*.rb") From d09e518d1fa0459456b026db9ed3d5e1ac61e36b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:40 -0400 Subject: [PATCH 404/738] user/ruby3.2-power_assert: drop due migration to ilot iports --- user/ruby3.2-power_assert/APKBUILD | 62 ------------------------- user/ruby3.2-power_assert/gemspec.patch | 9 ---- 2 files changed, 71 deletions(-) delete mode 100644 user/ruby3.2-power_assert/APKBUILD delete mode 100644 user/ruby3.2-power_assert/gemspec.patch diff --git a/user/ruby3.2-power_assert/APKBUILD b/user/ruby3.2-power_assert/APKBUILD deleted file mode 100644 index 24d62b2..0000000 --- a/user/ruby3.2-power_assert/APKBUILD +++ /dev/null @@ -1,62 +0,0 @@ -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-power_assert -_gemname=power_assert -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=2.0.3 -pkgrel=0 -pkgdesc="Debug tool for Ruby that displays intermediate results of a method chain" -url="https://github.com/ruby/power_assert" -arch="noarch" -license="BSD-2-Clause AND Ruby" -depends="ruby3.2" -checkdepends="ruby3.2-pry ruby3.2-rake ruby3.2-test-unit" -makedepends="ruby3.2-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/ruby/power_assert/archive/v$pkgver/$_gemname-$pkgver.tar.gz - gemspec.patch - " -builddir="$srcdir/$_gemname-$pkgver" -# Avoid circular dependency with ruby-test-unit. -options="!check" - -prepare() { - default_prepare - sed -i '/require .bundler/d' Rakefile -} - -build() { - gem build $_gemname.gemspec -} - -check() { - rake test -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -f5658d18b3b78e7757ddfc1ccdabc011076c009a7343eaad2748ca7aeb4d112bf19c70621cb938e7dcf1582c8bb7c5512017885ea51503b3ed274980b7d7c0b1 power_assert-2.0.3.tar.gz -eb4321b8ce33476e21f0cd6da92f1f2be93e0892f5e6043d6d5f5578160f1793993b10645c0b06b3b2df3e8190a10c83e5325c367001e222d98b290222c2edfe gemspec.patch -" diff --git a/user/ruby3.2-power_assert/gemspec.patch b/user/ruby3.2-power_assert/gemspec.patch deleted file mode 100644 index ace46ba..0000000 --- a/user/ruby3.2-power_assert/gemspec.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- a/power_assert.gemspec -+++ b/power_assert.gemspec -@@ -15,5 +15 @@ -- s.files = `git ls-files -z`.split("\x0").reject do |f| -- f.match(%r{\A(?:test|spec|features|benchmark|bin)/}) -- end -- s.bindir = 'exe' -- s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } -+ s.files = Dir['lib/**/*.rb'] From 638732a0895f12db1f35554a5d61d6ffa6561a92 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:43 -0400 Subject: [PATCH 405/738] user/ruby3.2-minitest: drop due migration to ilot iports --- user/ruby3.2-minitest/APKBUILD | 66 ----------------------------- user/ruby3.2-minitest/gemspec.patch | 15 ------- 2 files changed, 81 deletions(-) delete mode 100644 user/ruby3.2-minitest/APKBUILD delete mode 100644 user/ruby3.2-minitest/gemspec.patch diff --git a/user/ruby3.2-minitest/APKBUILD b/user/ruby3.2-minitest/APKBUILD deleted file mode 100644 index a3193fb..0000000 --- a/user/ruby3.2-minitest/APKBUILD +++ /dev/null @@ -1,66 +0,0 @@ -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-minitest -_gemname=minitest -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=5.15.0 -pkgrel=1 -pkgdesc="Suite of testing facilities supporting TDD, BDD, mocking, and benchmarking for Ruby" -url="https://github.com/minitest/minitest" -arch="noarch" -license="MIT" -depends="ruby3.2" -makedepends="ruby3.2-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/minitest/minitest/archive/v$pkgver/$_gemname-$pkgver.tar.gz - https://rubygems.org/downloads/$_gemname-$pkgver.gem - " -builddir="$srcdir/$_gemname-$pkgver" - -prepare() { - default_prepare - - # Generate gemspec (there's no gemspec in the source). - gem specification -l --ruby "$srcdir"/$_gemname-$pkgver.gem \ - > "$builddir"/$_gemname.gemspec -} - -build() { - gem build $_gemname.gemspec -} - -check() { - ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - local geminstdir="$gemdir/gems/$_gemname-$pkgver" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins - - cd "$geminstdir" - rm -rf History.* Manifest.* README.* Rakefile test/ -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -194d074fa83a87b21f551f86d2bb682bcbac53d5a23d4e0f81fbf570427c5cdfcb27e10618bea69037f9e55bea637ed96e52a10808c586ab4020d788556bda71 minitest-5.15.0.tar.gz -5e97a7aa616966ffc60e10cdc0ba123a7e793f10283ec3b6bf36066177036788cb950ad566fbac49e613b93f08b9846534f463017cde966b4890c3a34a2286be minitest-5.15.0.gem -" diff --git a/user/ruby3.2-minitest/gemspec.patch b/user/ruby3.2-minitest/gemspec.patch deleted file mode 100644 index a21a0c5..0000000 --- a/user/ruby3.2-minitest/gemspec.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/webrick.gemspec -+++ b/webrick.gemspec -@@ -14,12 +14,6 @@ - - s.require_path = %w{lib} - s.files = [ -- "Gemfile", -- "LICENSE.txt", -- "README.md", -- "Rakefile", -- "bin/console", -- "bin/setup", - "lib/webrick.rb", - "lib/webrick/accesslog.rb", - "lib/webrick/cgi.rb", From 438d6d6e3eddcda4def7868bc20324f8e2ebd3f8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:45 -0400 Subject: [PATCH 406/738] user/ruby3.2-bundler: drop due migration to ilot iports --- user/ruby3.2-bundler/APKBUILD | 51 ----------------------------- user/ruby3.2-bundler/manpages.patch | 37 --------------------- 2 files changed, 88 deletions(-) delete mode 100644 user/ruby3.2-bundler/APKBUILD delete mode 100644 user/ruby3.2-bundler/manpages.patch diff --git a/user/ruby3.2-bundler/APKBUILD b/user/ruby3.2-bundler/APKBUILD deleted file mode 100644 index b21a7d8..0000000 --- a/user/ruby3.2-bundler/APKBUILD +++ /dev/null @@ -1,51 +0,0 @@ -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-bundler -_gemname=bundler -pkgver=2.3.26 -pkgrel=0 -pkgdesc="Manage an application's gem dependencies" -url="https://bundler.io/" -arch="noarch" -license="MIT" -depends="ruby3.2" -makedepends="ruby3.2-rake" -subpackages="$pkgname-doc" -source="https://github.com/rubygems/rubygems/archive/bundler-v$pkgver.tar.gz - manpages.patch - " -builddir="$srcdir/rubygems-bundler-v$pkgver/bundler" -options="!check" # tests require deps not available in main repo - -build() { - rake build_metadata - gem build $_gemname.gemspec -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --bindir "$pkgdir/usr/bin" \ - --ignore-dependencies \ - --no-document \ - --verbose \ - $_gemname - - local n; for n in 1 5; do - mkdir -p "$pkgdir"/usr/share/man/man$n - mv "$gemdir"/gems/$_gemname-$pkgver/lib/bundler/man/*.$n "$pkgdir"/usr/share/man/man$n/ - done - - rm -rf "$gemdir"/cache \ - "$gemdir"/build_info \ - "$gemdir"/doc \ - "$gemdir"/gems/$_gemname-$pkgver/man \ - "$gemdir"/gems/$_gemname-$pkgver/*.md -} - -sha512sums=" -0a02d5130ecb8ca96e1850fc409a55d9f07481bbb8ec9b20554cdc6f3b3d3aada67717ab17dd30835615e4c228f39f895bd9b6f55bc22d4dbd88caef9cc105ba bundler-v2.3.26.tar.gz -77a36e61ed205aeea6114b1039dfbe29fcaf916eeae3f91785aa53b3ac534e004aa257e218534d927f39e3673eebbfb3ef9ee17f04ed81f74117799b88e53cf4 manpages.patch -" diff --git a/user/ruby3.2-bundler/manpages.patch b/user/ruby3.2-bundler/manpages.patch deleted file mode 100644 index cc11b02..0000000 --- a/user/ruby3.2-bundler/manpages.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Jakub Jirutka -Date: Fri, 26 Mar 2021 23:17:29 +0100 -Subject: [PATCH] Fix --help when man pages are moved out - -* Allow to move man pages from the gem's directory to the standard - system location (/usr/share/man) without breaking `bundler --help`. -* Fallback to the bundled ronn pages when the man command is available, - but the bundler man pages are not (i.e. ruby-bundler-doc is not - installed). -* Execute man with '-c' option to print the man page to the terminal - instead of using pager. - ---- a/lib/bundler/cli.rb -+++ b/lib/bundler/cli.rb -@@ -118,16 +118,17 @@ - end - - man_path = File.expand_path("man", __dir__) -- man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f| -- [File.basename(f, ".*"), f] -+ man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\.ronn\Z/).collect do |f| -+ man_name = File.basename(f, ".ronn") -+ [File.basename(man_name, ".*"), man_name] - end] - - if man_pages.include?(command) - man_page = man_pages[command] -- if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} -- Kernel.exec "man #{man_page}" -+ if Bundler.which("man") && Kernel.system("man -w #{command} >/dev/null 2>&1") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} -+ Kernel.exec "man -c #{command}" - else -- puts File.read("#{man_path}/#{File.basename(man_page)}.ronn") -+ puts File.read("#{man_path}/#{man_page}.ronn") - end - elsif command_path = Bundler.which("bundler-#{cli}") - Kernel.exec(command_path, "--help") From 177efa00c285b3910453abec92f3b1014904637a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:48 -0400 Subject: [PATCH 407/738] user/ruby3.2: drop due migration to ilot iports --- user/ruby3.2/APKBUILD | 253 ------------------ user/ruby3.2/dont-install-bundled-gems.patch | 20 -- user/ruby3.2/fix-get_main_stack.patch | 68 ----- user/ruby3.2/fix-riscv64-build.patch | 38 --- user/ruby3.2/ruby3.2.post-upgrade | 17 -- .../test_insns-lower-recursion-depth.patch | 47 ---- 6 files changed, 443 deletions(-) delete mode 100644 user/ruby3.2/APKBUILD delete mode 100644 user/ruby3.2/dont-install-bundled-gems.patch delete mode 100644 user/ruby3.2/fix-get_main_stack.patch delete mode 100644 user/ruby3.2/fix-riscv64-build.patch delete mode 100644 user/ruby3.2/ruby3.2.post-upgrade delete mode 100644 user/ruby3.2/test_insns-lower-recursion-depth.patch diff --git a/user/ruby3.2/APKBUILD b/user/ruby3.2/APKBUILD deleted file mode 100644 index 59e7332..0000000 --- a/user/ruby3.2/APKBUILD +++ /dev/null @@ -1,253 +0,0 @@ -# Contributor: Carlo Landmeter -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -# -# secfixes: -# 3.1.4-r0: -# - CVE-2023-28755 -# - CVE-2023-28756 -# 3.1.3-r0: -# - CVE-2021-33621 -# 3.1.2-r0: -# - CVE-2022-28738 -# - CVE-2022-28739 -# 3.0.3-r0: -# - CVE-2021-41817 -# - CVE-2021-41816 -# - CVE-2021-41819 -# 2.7.4-r0: -# - CVE-2021-31799 -# - CVE-2021-31810 -# - CVE-2021-32066 -# 2.7.3-r0: -# - CVE-2021-28965 -# - CVE-2021-28966 -# 2.7.2-r0: -# - CVE-2020-25613 -# 2.6.6-r0: -# - CVE-2020-10663 -# - CVE-2020-10933 -# 2.6.5-r0: -# - CVE-2019-16255 -# - CVE-2019-16254 -# - CVE-2019-15845 -# - CVE-2019-16201 -# 2.5.2-r0: -# - CVE-2018-16395 -# - CVE-2018-16396 -# 2.5.1-r0: -# - CVE-2017-17742 -# - CVE-2018-6914 -# - CVE-2018-8777 -# - CVE-2018-8778 -# - CVE-2018-8779 -# - CVE-2018-8780 -# 2.4.2-r0: -# - CVE-2017-0898 -# - CVE-2017-10784 -# - CVE-2017-14033 -# - CVE-2017-14064 -# - CVE-2017-0899 -# - CVE-2017-0900 -# - CVE-2017-0901 -# - CVE-2017-0902 -# 2.4.3-r0: -# - CVE-2017-17405 -# -pkgname=ruby3.2 -# When upgrading, upgrade also each ruby- aport listed in file -# gems/bundled_gems. If some aport is missing or not in the main repo, -# create/move it. -pkgver=3.2.2 -_abiver="${pkgver%.*}.0" -pkgrel=0 -pkgdesc="An object-oriented language for quick and easy programming" -url="https://www.ruby-lang.org/" -arch="all" -license="Ruby AND BSD-2-Clause AND MIT" -depends="ca-certificates" -depends_dev=" - $pkgname=$pkgver-r$pkgrel - $pkgname-rdoc=$pkgver-r$pkgrel - gmp-dev - libucontext-dev - " -makedepends="$depends_dev - autoconf - gdbm-dev - libffi-dev - linux-headers - openssl-dev>3 - readline-dev - yaml-dev - zlib-dev - " -install="$pkgname.post-upgrade" -subpackages="$pkgname-dbg $pkgname-doc $pkgname-dev - $pkgname-rdoc::noarch - $pkgname-libs - $pkgname-full::noarch - " -source="https://cache.ruby-lang.org/pub/ruby/${pkgver%.*}/ruby-$pkgver.tar.gz - test_insns-lower-recursion-depth.patch - fix-get_main_stack.patch - dont-install-bundled-gems.patch - fix-riscv64-build.patch - " -replaces="ruby3.2-gems" -builddir="$srcdir"/ruby-$pkgver - -# For backward compatibility (pre 3.x). -for _i in bigdecimal etc fiddle gdbm io-console irb json; do - provides="$provides ruby3.2-$_i=$pkgver-r$pkgrel" -done - -_gemdir="/usr/lib/ruby/gems/$_abiver" -_rubydir="/usr/lib/ruby/$_abiver" -_chost="${CHOST/-alpine-/-}" - -case "$CARCH" in - x86) _arch="i386";; - *) _arch="$CARCH";; -esac - -prepare() { - default_prepare - autoconf - - # v2.7.1 - Of all the bootstraptest only test_fiber fails on s390x: - # test_fiber.rb bootstraptest.tmp.rb:8: [BUG] vm_call_cfunc: cfp consistency error (0x000003ffb63fefb0, 0x000003ffb42f5f58) - case "$CARCH" in - s390x) rm bootstraptest/test_fiber.rb;; - esac - - local name ver; while read -r name ver _; do - case "$name=$ver" in - [a-z]*=[0-9]*.[0-9]*) - if ! apk add -qs "ruby-$name>=$ver" >/dev/null 2>&1; then - warning "bump package ruby-$name to version $ver" - fi - echo "ruby-$name>=$ver" >> "$srcdir"/.ruby-full.depends - esac - done < "$builddir"/gems/bundled_gems -} - -build() { - # -fomit-frame-pointer makes ruby segfault, see gentoo bug #150413 - # In many places aliasing rules are broken; play it safe - # as it's risky with newer compilers to leave it as it is. - # -O2 - ruby is a language runtime, so performance is crucial. Moreover, - # ruby 3.1.1 fails with Bus Error when compiled with -Os on armhf/armv7. - # This makes ruby-libs 7% bigger (13.4 -> 14.4 MiB). - export CFLAGS="${CFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing" - export CPPFLAGS="${CPPFLAGS/-Os/-O2} -fno-omit-frame-pointer -fno-strict-aliasing" - - # Needed for coroutine stuff - export LIBS="-lucontext" - - # ruby saves path to install. we want use $PATH - export INSTALL=install - - # the configure script does not detect isnan/isinf as macros - export ac_cv_func_isnan=yes - export ac_cv_func_isinf=yes - - ./configure \ - --build=$CBUILD \ - --host=$CHOST \ - --prefix=/usr \ - --sysconfdir=/etc \ - --mandir=/usr/share/man \ - --infodir=/usr/share/info \ - --with-sitedir=/usr/local/lib/site_ruby \ - --with-search-path="/usr/lib/site_ruby/\$(ruby_ver)/$_arch-linux" \ - --enable-pthread \ - --disable-rpath \ - --enable-shared \ - --with-mantype=man - make -} - -check() { - # https://bugs.ruby-lang.org/issues/18380 - local disable_tests="-n !/TestAddressResolve#test_socket_getnameinfo_domain_blocking/" - - case "$CARCH" in - x86 | armhf | armv7) - # TestReadline#test_interrupt_in_other_thread fails on 32 bit arches according - # to upstream, but the test is disabled just on Travis, not in test suite. - # https://bugs.ruby-lang.org/issues/18393 - disable_tests="$disable_tests -n !/TestReadline#test_interrupt_in_other_thread/" - ;; - esac - - make test TESTS="$disable_tests" -} - -package() { - make DESTDIR="$pkgdir" SUDO="" install - - install -m 644 -D COPYING "$pkgdir"/usr/share/licenses/$pkgname/COPYING - - cd "$pkgdir" - - # Remove bundled gem bundler; it's provided by a separate aport/package - # ruby-bundler. - rm -rf ./$_rubydir/bundler - rm ./$_rubydir/bundler.rb - rm -rf ./$_gemdir/gems/bundler-* - rm ./$_gemdir/specifications/default/bundler-*.gemspec - rm usr/bin/bundle usr/bin/bundler - - # Remove bundled CA certificates; they are provided by ca-certificates. - rm ./$_rubydir/rubygems/ssl_certs/*/*.pem - rmdir ./$_rubydir/rubygems/ssl_certs/* || true - - rm -Rf ./$_gemdir/cache/* - - if [ -d usr/local ]; then - local f=$(find usr/local -type f) - if [ -n "$f" ]; then - error "Found files in /usr/local:" - echo "$f" - return 1 - fi - rm -r usr/local - fi -} - -rdoc() { - pkgdesc="Ruby documentation tool" - license="Ruby" - depends="$pkgname" - - amove $_rubydir/rdoc - amove $_gemdir/gems/rdoc-* - amove $_gemdir/specifications/default/rdoc-* - amove usr/bin/ri - amove usr/bin/rdoc -} - -libs() { - pkgdesc="Libraries necessary to run Ruby" - depends="" - - amove usr/lib -} - -full() { - pkgdesc="Ruby with all bundled gems" - # bundler is bundled since Ruby 2.6, so include it in ruby-full despite - # that it's provided by a seprate aport/package. - depends="ruby ruby-rdoc ruby-bundler $(cat "$srcdir"/.ruby-full.depends)" - - mkdir -p "$subpkgdir" -} - -sha512sums=" -bcc68f3f24c1c8987d9c80b57332e5791f25b935ba38daf5addf60dbfe3a05f9dcaf21909681b88e862c67c6ed103150f73259c6e35c564f13a00f432e3c1e46 ruby-3.2.2.tar.gz -16fc1f35aee327d1ecac420b091beaa53c675e0504d5a6932004f17ca68a2c38f57b053b0a3903696f2232c5add160d363e3972a962f7f7bcb52e4e998c7315d test_insns-lower-recursion-depth.patch -42cd45c1db089a1ae57834684479a502e357ddba82ead5fa34e64c13971e7ab7ad2919ddd60a104a817864dd3e2e35bdbedb679210eb41d82cab36a0687e43d4 fix-get_main_stack.patch -a77da5e5eb7d60caf3f1cabb81e09b88dc505ddd746e34efd1908c0096621156d81cc65095b846ba9bdb66028891aefce883a43ddec6b56b5beb4aac5e4ee33f dont-install-bundled-gems.patch -000530316af1fca007fe8cee694b59e2e801674bcc1a2ebea95e67745d4afc0ce66c902fdbc88ee847a4fbf55115b183cd803cbf7c98ef685938efb3e2b7c991 fix-riscv64-build.patch -" diff --git a/user/ruby3.2/dont-install-bundled-gems.patch b/user/ruby3.2/dont-install-bundled-gems.patch deleted file mode 100644 index b125fa0..0000000 --- a/user/ruby3.2/dont-install-bundled-gems.patch +++ /dev/null @@ -1,20 +0,0 @@ -Don't install bundled gems - we package them separately. - ---- a/tool/rbinstall.rb -+++ b/tool/rbinstall.rb -@@ -990,6 +990,7 @@ - end - end - -+=begin XXX-Patched - install?(:ext, :comm, :gem, :'bundled-gems') do - gem_dir = Gem.default_dir - install_dir = with_destdir(gem_dir) -@@ -1057,6 +1058,7 @@ - puts "skipped bundled gems: #{gems.join(' ')}" - end - end -+=end - - parse_args() - diff --git a/user/ruby3.2/fix-get_main_stack.patch b/user/ruby3.2/fix-get_main_stack.patch deleted file mode 100644 index 864a314..0000000 --- a/user/ruby3.2/fix-get_main_stack.patch +++ /dev/null @@ -1,68 +0,0 @@ ---- a/thread_pthread.c -+++ b/thread_pthread.c -@@ -858,9 +858,6 @@ - # define MAINSTACKADDR_AVAILABLE 0 - # endif - #endif --#if MAINSTACKADDR_AVAILABLE && !defined(get_main_stack) --# define get_main_stack(addr, size) get_stack(addr, size) --#endif - - #ifdef STACKADDR_AVAILABLE - /* -@@ -942,6 +939,55 @@ - return 0; - #undef CHECK_ERR - } -+ -+#if defined(__linux__) && !defined(__GLIBC__) && defined(HAVE_GETRLIMIT) -+ -+#ifndef PAGE_SIZE -+#include -+#define PAGE_SIZE sysconf(_SC_PAGE_SIZE) -+#endif -+ -+static int -+get_main_stack(void **addr, size_t *size) -+{ -+ size_t start, end, limit, prevend = 0; -+ struct rlimit r; -+ FILE *f; -+ char buf[PATH_MAX+80], s[8]; -+ int n; -+ STACK_GROW_DIR_DETECTION; -+ -+ f = fopen("/proc/self/maps", "re"); -+ if (!f) -+ return -1; -+ n = 0; -+ while (fgets(buf, sizeof buf, f)) { -+ n = sscanf(buf, "%zx-%zx %*s %*s %*s %*s %7s", &start, &end, s); -+ if (n >= 2) { -+ if (n == 3 && strcmp(s, "[stack]") == 0) -+ break; -+ prevend = end; -+ } -+ n = 0; -+ } -+ fclose(f); -+ if (n == 0) -+ return -1; -+ -+ limit = 100 << 20; /* 100MB stack limit */ -+ if (getrlimit(RLIMIT_STACK, &r)==0 && r.rlim_cur < limit) -+ limit = r.rlim_cur & -PAGE_SIZE; -+ if (limit > end) limit = end; -+ if (prevend < end - limit) prevend = end - limit; -+ if (start > prevend) start = prevend; -+ *addr = IS_STACK_DIR_UPPER() ? (void *)start : (void *)end; -+ *size = end - start; -+ return 0; -+} -+#else -+# define get_main_stack(addr, size) get_stack(addr, size) -+#endif -+ - #endif - - static struct { diff --git a/user/ruby3.2/fix-riscv64-build.patch b/user/ruby3.2/fix-riscv64-build.patch deleted file mode 100644 index e81e8b6..0000000 --- a/user/ruby3.2/fix-riscv64-build.patch +++ /dev/null @@ -1,38 +0,0 @@ -Patch-Source: https://lists.openembedded.org/g/openembedded-core/message/161168 -partially extracted to actually apply onto a release tarball - ---- -From dfb22e4d6662bf72879eda806eaa78c7b52b519e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Tue, 25 Jan 2022 20:29:14 -0800 -Subject: [PATCH] vm_dump.c: Define REG_S1 and REG_S2 for musl/riscv - -These defines are missing in musl, there is a possible -patch to add them to musl, but we need a full list of -these names for mcontext that can be added once for all - -Upstream-Status: Inappropriate [musl bug] -Signed-off-by: Khem Raj ---- - vm_dump.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/vm_dump.c b/vm_dump.c -index a98f5aa..957b785 100644 ---- a/vm_dump.c -+++ b/vm_dump.c -@@ -39,6 +39,11 @@ - - #define MAX_POSBUF 128 - -+#if defined(__riscv) && !defined(__GLIBC__) -+# define REG_S1 9 -+# define REG_S2 18 -+#endif -+ - #define VM_CFP_CNT(ec, cfp) \ - ((rb_control_frame_t *)((ec)->vm_stack + (ec)->vm_stack_size) - \ - (rb_control_frame_t *)(cfp)) --- -2.35.0 - diff --git a/user/ruby3.2/ruby3.2.post-upgrade b/user/ruby3.2/ruby3.2.post-upgrade deleted file mode 100644 index 6cba787..0000000 --- a/user/ruby3.2/ruby3.2.post-upgrade +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -ver_new="$1" -ver_old="$2" - -if [ "$(apk version -t "$ver_old" "2.5.0-r0")" = "<" ]; then - cat >&2 <<-EOF - * - * In Ruby 2.5 more parts of the stdlib has been splitted into standalone - * gems, yet still installed with Ruby by default. We have moved some of - * them into separate subpackages. If you don't know which subpackages you - * need, you may install meta-package "ruby-full". - * - EOF -fi - -exit 0 diff --git a/user/ruby3.2/test_insns-lower-recursion-depth.patch b/user/ruby3.2/test_insns-lower-recursion-depth.patch deleted file mode 100644 index 0069720..0000000 --- a/user/ruby3.2/test_insns-lower-recursion-depth.patch +++ /dev/null @@ -1,47 +0,0 @@ -The patched test is a recursion function. We have lower stack size, -so we hit SystemStackError sooner than on other platforms. - - #361 test_insns.rb:389:in `block in ': - # recursive once - def once n - return %r/#{ - if n == 0 - true - else - once(n-1) # here - end - }/ox - end - x = once(128); x = once(7); x = once(16); - x =~ "true" && $~ - #=> "" (expected "true") once - Stderr output is not empty - bootstraptest.tmp.rb:3:in `once': stack level too deep (SystemStackError) - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - ... 125 levels... - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:7:in `block in once' - from bootstraptest.tmp.rb:3:in `once' - from bootstraptest.tmp.rb:11:in `
' - Test_insns.rb FAIL 1/187 - FAIL 1/1197 tests failed - Make: *** [uncommon.mk:666: yes-btest-ruby] Error 1 - ---- a/bootstraptest/test_insns.rb -+++ b/bootstraptest/test_insns.rb -@@ -274,7 +274,7 @@ - end - }/ox - end -- x = once(128); x = once(7); x = once(16); -+ x = once(32); x = once(7); x = once(16); - x =~ "true" && $~ - }, - [ 'once', <<-'},', ], # { From 9c03466cc02df8ed7768039cab8dd4ee5aef657b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:50 -0400 Subject: [PATCH 408/738] user/mastodon: drop due migration to ilot iports --- user/mastodon/APKBUILD | 202 ------------------------- user/mastodon/bin-wrapper.in | 15 -- user/mastodon/mastodon.initd | 41 ----- user/mastodon/mastodon.logrotate | 11 -- user/mastodon/mastodon.post-install | 27 ---- user/mastodon/mastodon.post-upgrade | 1 - user/mastodon/mastodon.pre-install | 54 ------- user/mastodon/mastodon.sidekiq.initd | 32 ---- user/mastodon/mastodon.streaming.initd | 33 ---- user/mastodon/mastodon.web.initd | 29 ---- 10 files changed, 445 deletions(-) delete mode 100644 user/mastodon/APKBUILD delete mode 100644 user/mastodon/bin-wrapper.in delete mode 100644 user/mastodon/mastodon.initd delete mode 100644 user/mastodon/mastodon.logrotate delete mode 100644 user/mastodon/mastodon.post-install delete mode 120000 user/mastodon/mastodon.post-upgrade delete mode 100644 user/mastodon/mastodon.pre-install delete mode 100644 user/mastodon/mastodon.sidekiq.initd delete mode 100644 user/mastodon/mastodon.streaming.initd delete mode 100644 user/mastodon/mastodon.web.initd diff --git a/user/mastodon/APKBUILD b/user/mastodon/APKBUILD deleted file mode 100644 index 954ff0b..0000000 --- a/user/mastodon/APKBUILD +++ /dev/null @@ -1,202 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=mastodon -_pkgname=$pkgname -pkgver=4.2.10 -_gittag=v$pkgver -pkgrel=1 -pkgdesc="Self-hosted social media and network server based on ActivityPub and OStatus" -arch="x86_64" -url="https://github.com/mastodon/mastodon" -license="AGPL-3.0-only" -depends=" - $pkgname-assets=$pkgver-r$pkgrel - ffmpeg - file - gcompat - imagemagick - nodejs - npm - protobuf - py3-elasticsearch - redis - ruby3.2 - ruby3.2-bundler - yarn - " -makedepends=" - gnu-libiconv-dev - icu-dev - libffi-dev - libidn-dev - libxml2-dev - libxslt-dev - openssl-dev - postgresql-dev - protobuf-dev - ruby3.2-dev - yaml-dev - zlib-dev - " -install=" - $pkgname.pre-install - $pkgname.post-upgrade - $pkgname.post-install - " -source=" - mastodon-$_gittag.tar.gz::https://github.com/mastodon/mastodon/archive/$_gittag.tar.gz - mastodon.initd - mastodon.web.initd - mastodon.sidekiq.initd - mastodon.streaming.initd - mastodon.logrotate - bin-wrapper.in - " -subpackages="$pkgname-openrc $pkgname-assets::noarch" -options="!check" # No test suite - -_prefix="usr/lib/bundles/$_pkgname" - -export BUNDLE_DEPLOYMENT=true -export BUNDLE_FORCE_RUBY_PLATFORM=true -export BUNDLE_FROZEN=true -export BUNDLE_JOBS=${JOBS:-2} - -prepare() { - default_prepare - - # Allow use of any bundler - sed -i -e '/BUNDLED/,+1d' Gemfile.lock - - # Allow use of higher Node versions - sed -i 's/"node": .*"/"node": ">=14.15"/' package.json - - mkdir -p "$srcdir"/gem-cache -} - -build() { - local bundle_without='exclude development' - - msg "Installing Ruby gems..." - bundle config --local build.nokogiri --use-system-libraries \ - --with-xml2-include=/usr/include/libxml2 \ - --with-xslt-include=/usr/include/libxslt - bundle config --local build.ffi --enable-system-libffi - bundle config --local build.idn --enable-system-libidn - bundle config --local path "vendor/bundle" - bundle config --local set deployment 'false' - bundle config --local set without "$bundle_without" - - bundle install --no-cache -j"$(getconf _NPROCESSORS_ONLN)" - - msg "Installing npm modules..." - yarn install --production --frozen-lockfile - - ( - msg "Compiling assets..." - export NODE_ENV=production - export RAILS_ENV=production - export NODE_OPTIONS="--openssl-legacy-provider" - - OTP_SECRET=precompile_placeholder SECRET_KEY_BASE=precompile_placeholder bundle exec rails assets:precompile - ) - - msg "Cleaning assets gems..." - bundle config --local without "$bundle_without" - bundle clean - - # Create executables in bin/*. - # See also https://github.com/bundler/bundler/issues/6149. - bundle binstubs --force bundler puma sidekiq -} - -package() { - local destdir="$pkgdir"/$_prefix - local datadir="$pkgdir/var/lib/gitlab" - # directory creation - install -dm 755 \ - "$destdir" \ - "$datadir" \ - "$pkgdir"/etc/init.d - - - # Install application files. - rmdir "$destdir" - cp -a "$builddir" "$destdir" - - install -m755 -t "$destdir"/bin/ \ - bin/bundle \ - bin/rails \ - bin/rake \ - bin/sidekiq \ - bin/sidekiqmon \ - bin/tootctl \ - bin/puma - - cd "$destdir"/vendor/bundle/ruby/*/ - - # Remove tests, documentations and other useless files. - find gems/ \( -name 'doc' \ - -o -name 'spec' \ - -o -name 'test' \) \ - -type d -maxdepth 2 -exec rm -fr "{}" + - find gems/ \( -name 'README*' \ - -o -name 'CHANGELOG*' \ - -o -name 'CONTRIBUT*' \ - -o -name '*LICENSE*' \ - -o -name 'Rakefile' \ - -o -name '.*' \) \ - -type f -delete - - # Remove assets, they are already compiled. - rm -r gems/doorkeeper-*/app/assets - rm -r gems/pghero-*/app/assets - - # Remove build logs and cache. - rm -rf build_info/ cache/ - find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete - - cat > "$datadir"/.profile <<-EOF - export RAILS_ENV=production - export NODE_ENV=production - export EXECJS_RUNTIME=Disabled - EOF - - # Install wrapper scripts to /usr/bin. - local name; for name in rake rails tootctl; do - sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ - > "$builddir"/mastodon-$name - install -m755 -D "$builddir"/mastodon-$name "$pkgdir"/usr/bin/mastodon-$name - done - - # Put the config file in /etc and link to it - touch "$pkgdir"/etc/mastodon.conf - ln -s /etc/mastodon.conf "$destdir"/.env.production - ln -s /usr/bin/node "$destdir"/node - - for file in $_pkgname $_pkgname.sidekiq $_pkgname.web $_pkgname.streaming; do - install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file - done - - # Removing all prebuilt artifacts - rm -R "$destdir"/node_modules/*/prebuilds 2>&1 || true - - install -m644 -D "$srcdir"/$_pkgname.logrotate \ - "$pkgdir"/etc/logrotate.d/$_pkgname -} - -assets() { - depends="" - - amove $_prefix/public/assets -} - -sha512sums=" -1fe5417136bc020a83b83eaccef7f1f46c13fc8318681f12ba556b1b6b03e25ef7b6335c28f4e6722101e97b63020cbd0d3fbacdaf9b3b5a4b73c3cf3e230813 mastodon-v4.2.10.tar.gz -d49fea9451c97ccefe5e35b68e4274aeb427f9d1e910b89c1f6c810489c3bec1ccff72952fdaef95abf944b8aff0da84a52347540d36ff1fba5ccc19e1d935c6 mastodon.initd -eefe12a31268245f802222c0001dac884e03adb0d301e53a1512a3cd204836ca03ad083908cd14d146cf0dce99e3a4366570efd0e40a9a490ccd381d4c63c32f mastodon.web.initd -8fc9249c01693bb02b8d1a6177288d5d3549addde8c03eb35cc7a32dde669171872ebc2b5deb8019dc7a12970098f1af707171fa41129be31b04e1dc1651a777 mastodon.sidekiq.initd -03433a2f58600ca0d58e7c3713df2146ccdfc92033ccfe801dbd38bac39b66d6297f2b5ca02300caa36455b484eab2caa68c912c2f72150203bfa0e106c375fc mastodon.streaming.initd -83b3bae5b6fdb4d0dbc1cbe546c62c0aa77397b97d1a5d5377af032466677de188065b556710c0d96576bbae89cc76800f1ffb8cd718155eb2784da818f27619 mastodon.logrotate -dfd0e43ac6c28387bd4aa57fd98ae41aeb5a098b6deb3e44b89f07818e2470773b025364afee7ef6fd0f664cb86bbbbe8796c9f222f5436c256a787282fbe3e1 bin-wrapper.in -" diff --git a/user/mastodon/bin-wrapper.in b/user/mastodon/bin-wrapper.in deleted file mode 100644 index eb1d637..0000000 --- a/user/mastodon/bin-wrapper.in +++ /dev/null @@ -1,15 +0,0 @@ - -#!/bin/sh - -BUNDLE_DIR='/usr/lib/bundles/mastodon' -export RAILS_ENV='production' -export NODE_ENV='production' -export EXECJS_RUNTIME='Disabled' - -cd $BUNDLE_DIR - -if [ "$(id -un)" != 'mastodon' ]; then - exec su mastodon -c '"$0" "$@"' -- bin/__COMMAND__ "$@" -else - exec bin/__COMMAND__ "$@" -fi diff --git a/user/mastodon/mastodon.initd b/user/mastodon/mastodon.initd deleted file mode 100644 index 1454603..0000000 --- a/user/mastodon/mastodon.initd +++ /dev/null @@ -1,41 +0,0 @@ -#!/sbin/openrc-run - -name="Mastodon" -description="Meta script for starting/stopping all the Mastodon components" - -subservices="mastodon.sidekiq mastodon.streaming mastodon.web" - -depend() { - need redis postgresql - use net -} - -start() { - local ret=0 - - ebegin "Starting all Mastodon components" - local svc; for svc in $subservices; do - service $svc start || ret=1 - done - eend $ret -} - -stop() { - local ret=0 - - ebegin "Stopping all Mastodon components" - local svc; for svc in $subservices; do - service $svc stop || ret=1 - done - eend $ret -} - -status() { - local ret=0 - - local svc; for svc in $subservices; do - echo "$svc:" - service $svc status || ret=1 - done - eend $ret -} diff --git a/user/mastodon/mastodon.logrotate b/user/mastodon/mastodon.logrotate deleted file mode 100644 index cbfecfc..0000000 --- a/user/mastodon/mastodon.logrotate +++ /dev/null @@ -1,11 +0,0 @@ -/var/log/mastodon/*.log { - compress - copytruncate - delaycompress - maxsize 10M - minsize 1M - missingok - sharedscripts - rotate 10 - weekly -} diff --git a/user/mastodon/mastodon.post-install b/user/mastodon/mastodon.post-install deleted file mode 100644 index 9387d45..0000000 --- a/user/mastodon/mastodon.post-install +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -set -eu - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish Mastodon upgrade run: - * - * mastodon-rails db:migrate - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/mastodon.conf - * - * 2. Create database for Mastodon: - * - * psql -c "CREATE ROLE mastodon PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE mastodon OWNER mastodon ENCODING 'UTF-8';" - * psql -d mastodon -c "CREATE EXTENSION pg_trgm; CREATE EXTENSION btree_gist;" - * psql -c "ALTER DATABASE name OWNER TO new_owner;" - * - * 3. Run "mastodon-rake db:migrate" - * - EOF -fi diff --git a/user/mastodon/mastodon.post-upgrade b/user/mastodon/mastodon.post-upgrade deleted file mode 120000 index 0fcc8b2..0000000 --- a/user/mastodon/mastodon.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -mastodon.post-install \ No newline at end of file diff --git a/user/mastodon/mastodon.pre-install b/user/mastodon/mastodon.pre-install deleted file mode 100644 index c869177..0000000 --- a/user/mastodon/mastodon.pre-install +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -mastodon_dir='/var/lib/mastodon' - -if ! getent group mastodon 1>/dev/null; then - echo '* Creating group mastodon' 1>&2 - - addgroup -S mastodon -fi - -if ! id mastodon 2>/dev/null 1>&2; then - echo '* Creating user mastodon' 1>&2 - - adduser -DHS -G mastodon -h "$mastodon_dir" -s /bin/sh \ - -g "added by apk for mastodon" mastodon - passwd -u mastodon 1>/dev/null # unlock -fi - -if ! id -Gn mastodon | grep -Fq redis; then - echo '* Adding user mastodon to group redis' 1>&2 - - addgroup mastodon redis -fi - -if [ "$(id -gn mastodon)" != 'mastodon' ]; then - cat >&2 <<-EOF - !! - !! User mastodon has primary group $(id -gn mastodon). We strongly recommend to change - !! mastodon's primary group to mastodon. - !! - EOF - - # Add it at least as a supplementary group. - adduser mastodon mastodon -fi - -user_home="$(getent passwd mastodon | cut -d: -f6)" - -if [ "$user_home" != "$mastodon_dir" ]; then - cat >&2 <<-EOF - !! - !! User mastodon has home directory in $user_home, but this package assumes - !! $mastodon_dir. Although it's possible to use a different directory, - !! it's really not easy. - !! - !! Please change mastodon's home directory to $mastodon_dir, or adjust settings - !! and move files yourself. Otherwise Mastodon will not work! - !! - EOF -fi - -exit 0 - diff --git a/user/mastodon/mastodon.sidekiq.initd b/user/mastodon/mastodon.sidekiq.initd deleted file mode 100644 index 98c0377..0000000 --- a/user/mastodon/mastodon.sidekiq.initd +++ /dev/null @@ -1,32 +0,0 @@ -#!/sbin/openrc-run - -name="Mastodon background workers Service" -root="/usr/lib/bundles/mastodon" -pidfile="/run/mastodon-sidekiq.pid" -logfile="/var/log/mastodon/sidekiq.log" - -depend() { - use net - need redis -} - -start() { - ebegin "Starting Mastodon background workers" - - cd $root - - start-stop-daemon --start --background \ - --chdir "${root}" \ - --user="mastodon" \ - --make-pidfile --pidfile="${pidfile}" \ - -1 "${logfile}" -2 "${logfile}" \ - --exec /usr/bin/env -- RAILS_ENV=production DB_POOL=25 MALLOC_ARENA_MAX=2 bundle exec sidekiq -c 25 - eend $? -} - -stop() { - ebegin "Stopping Mastodon background workers" - start-stop-daemon --stop \ - --pidfile=${pidfile} \ - eend $? -} diff --git a/user/mastodon/mastodon.streaming.initd b/user/mastodon/mastodon.streaming.initd deleted file mode 100644 index b41adc2..0000000 --- a/user/mastodon/mastodon.streaming.initd +++ /dev/null @@ -1,33 +0,0 @@ -#!/sbin/openrc-run - -name="Mastodon streaming API service" -root="/usr/lib/bundles/mastodon" -pidfile="/run/mastodon-streaming.pid" -logfile="/var/log/mastodon/streaming.log" - -depend() { - use net -} - -start() { - ebegin "Starting Mastodon streaming API" - - cd $root - - start-stop-daemon --start \ - --background --quiet \ - --chdir "${root}" \ - --user="mastodon" \ - --make-pidfile --pidfile="${pidfile}" \ - --stdout "${logfile}" --stderr "${logfile}" \ - --exec /usr/bin/env -- NODE_ENV=production PORT=4000 /usr/bin/node ./streaming/index.js - eend $? -} - -stop() { - ebegin "Stopping Mastodon streaming API" - start-stop-daemon --stop \ - --pidfile="${pidfile}" \ - eend $? -} - diff --git a/user/mastodon/mastodon.web.initd b/user/mastodon/mastodon.web.initd deleted file mode 100644 index 42eace6..0000000 --- a/user/mastodon/mastodon.web.initd +++ /dev/null @@ -1,29 +0,0 @@ -#!/sbin/openrc-run - -name="Mastodon Web Service" -root="/usr/lib/bundles/mastodon" -pidfile="/run/mastodon-web.pid" -logfile="/var/log/mastodon/web.log" - -depend() { - use net -} - -start() { - ebegin "Starting Mastodon web workers" - cd $root - start-stop-daemon --start --background \ - --chdir "${root}" \ - --user="mastodon" \ - --pidfile="${pidfile}" --make-pidfile \ - --stdout="${logfile}" --stderr="${logfile}" \ - --exec /usr/bin/env -- RAILS_ENV=production PORT=3000 bundle exec puma -C config/puma.rb - eend $? -} - -stop() { - ebegin "Stopping Mastodon web workers" - start-stop-daemon --stop \ - --pidfile=${pidfile} \ - eend $? -} From 9320defbce1216dfc958b718f204bfaba6867d90 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:52 -0400 Subject: [PATCH 409/738] user/gitlab-shell: drop due migration to ilot iports --- user/gitlab-shell/APKBUILD | 66 ------------ user/gitlab-shell/change-config-path.patch | 11 -- user/gitlab-shell/config.patch | 112 -------------------- user/gitlab-shell/gitconfig | 17 --- user/gitlab-shell/gitlab-shell.post-install | 23 ---- user/gitlab-shell/gitlab-shell.pre-install | 41 ------- 6 files changed, 270 deletions(-) delete mode 100644 user/gitlab-shell/APKBUILD delete mode 100644 user/gitlab-shell/change-config-path.patch delete mode 100644 user/gitlab-shell/config.patch delete mode 100644 user/gitlab-shell/gitconfig delete mode 100644 user/gitlab-shell/gitlab-shell.post-install delete mode 100644 user/gitlab-shell/gitlab-shell.pre-install diff --git a/user/gitlab-shell/APKBUILD b/user/gitlab-shell/APKBUILD deleted file mode 100644 index b1d202a..0000000 --- a/user/gitlab-shell/APKBUILD +++ /dev/null @@ -1,66 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka -pkgname=gitlab-shell -pkgver=14.36.0 -pkgrel=0 -pkgdesc="GitLab Shell handles git SSH sessions for GitLab" -url="https://gitlab.com/gitlab-org/gitlab-shell" -arch="all" -license="MIT" -depends="git openssh" -makedepends="go krb5-dev" -pkgusers="git" -pkggroups="git" -install="$pkgname.pre-install $pkgname.post-install" -# NOTE: user vs system gitconfig, see https://gitlab.com/gitlab-org/omnibus-gitlab/-/merge_requests/6166 -source="https://gitlab.com/gitlab-org/gitlab-shell/-/archive/v$pkgver/gitlab-shell-v$pkgver.tar.gz - config.patch - change-config-path.patch - gitconfig - " -builddir="$srcdir/$pkgname-v$pkgver" -options="!check" - -build() { - # BUILD_TAGS - build without tracing libs, - # see https://gitlab.com/gitlab-org/labkit/-/merge_requests/2 - make build \ - VERSION_STRING="$pkgver" \ - BUILD_TAGS="" -} - -package() { - local datadir="$pkgdir/var/lib/gitlab" - local libdir="$pkgdir/usr/lib/gitlab-shell" - - # XXX: I couldn't figure out how/where is gitlab-shell called, - # so I kept /usr/lib/gitlab-shell. It should be changed to /usr. - make install DESTDIR="$pkgdir" PREFIX=/usr/lib/gitlab-shell - - install -m644 VERSION "$libdir"/ - install -m644 -D config.yml.example "$pkgdir"/etc/gitlab/gitlab-shell.yml - - cd "$pkgdir" - - rm "$libdir"/bin/gitlab-sshd - - install -d -m755 -o git -g git \ - "$pkgdir"/var/log/gitlab \ - "$datadir" - - install -d -m02770 -o git -g git \ - "$datadir"/repositories - - install -m644 -o git -g git "$srcdir"/gitconfig "$datadir"/.gitconfig - - ln -s /etc/gitlab/gitlab-shell.yml "$libdir"/config.yml - ln -s /etc/gitlab/gitlab_shell_secret "$libdir"/.gitlab_shell_secret -} - -sha512sums=" -6b302be3630e60e3c9f76e58c61674bf08c3fe1395c9af5f354b9a557ecd1ddb43d27c9a995f868c4e4e2e734dd424a37c73e78d26b00f1f6a78f8670b45c371 gitlab-shell-v14.36.0.tar.gz -e9dd69c57c65197493f75bdde682075c6ab22892ed07d37c7a73129fb42a8349a676d5986bfd17f1df331645334248383845f21ce08d1e9664c38e4bbf5343ba config.patch -499b3a46ea94a33a23b01f6a7509d74f5a6781b930619b3b8ae42bdeae8a052cc636578744d7992b4ae4f9b9f72b11ee3d3c0f5e50986fa3f7e35b979b08aada change-config-path.patch -c53da7f145593693392d9fa880ad5a1909bfc7504fd1c93d94a468c3e0f5cc80f712f41ee1dc8bf38105b410c1165658f208bd88a70c4674104c78af33d8d09c gitconfig -" diff --git a/user/gitlab-shell/change-config-path.patch b/user/gitlab-shell/change-config-path.patch deleted file mode 100644 index 52d44ce..0000000 --- a/user/gitlab-shell/change-config-path.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/support/gitlab_config.rb -+++ b/support/gitlab_config.rb -@@ -4,7 +4,7 @@ class GitlabConfig - attr_reader :config - - def initialize -- @config = YAML.load_file(File.join(ROOT_PATH, 'config.yml')) -+ @config = YAML.load_file(ENV.fetch('GITLAB_SHELL_CONFIG', '/etc/gitlab/gitlab-shell.yml')) - end - - def home diff --git a/user/gitlab-shell/config.patch b/user/gitlab-shell/config.patch deleted file mode 100644 index 6dabe44..0000000 --- a/user/gitlab-shell/config.patch +++ /dev/null @@ -1,112 +0,0 @@ -diff --git a/config.yml.example.orig b/config.yml.example -index fb147c4..98eb0e3 100644 ---- a/config.yml.example.orig -+++ b/config.yml.example -@@ -13,7 +13,7 @@ user: git - # only listen on a Unix domain socket. For Unix domain sockets use - # "http+unix://", e.g. - # "http+unix://%2Fpath%2Fto%2Fsocket" --gitlab_url: "http+unix://%2Fhome%2Fgit%2Fgitlab%2Ftmp%2Fsockets%2Fgitlab-workhorse.socket" -+gitlab_url: "http+unix://%2Frun%2Fgitlab%2Fworkhorse.socket" - - # When a http+unix:// is used in gitlab_url, this is the relative URL root to GitLab. - # Not used if gitlab_url is http:// or https://. -@@ -29,15 +29,15 @@ http_settings: - # - - # File used as authorized_keys for gitlab user --auth_file: "/home/git/.ssh/authorized_keys" -+auth_file: "/var/lib/gitlab/.ssh/authorized_keys" - - # SSL certificate dir where custom certificates can be placed - # https://golang.org/pkg/crypto/x509/ --# ssl_cert_dir: /opt/gitlab/embedded/ssl/certs/ -+# ssl_cert_dir: /etc/gitlab/ssl/certs/ - - # File that contains the secret key for verifying access to GitLab. - # Default is .gitlab_shell_secret in the gitlab-shell directory. --# secret_file: "/home/git/gitlab-shell/.gitlab_shell_secret" -+secret_file: "/etc/gitlab/gitlab_shell_secret" - # - # The secret field supersedes the secret_file, and if set that - # file will not be read. -@@ -45,13 +45,13 @@ auth_file: "/home/git/.ssh/authorized_keys" - - # Log file. - # Default is gitlab-shell.log in the root directory. --# log_file: "/home/git/gitlab-shell/gitlab-shell.log" -+log_file: "/var/log/gitlab/gitlab-shell.log" - - # Log level. INFO by default --log_level: INFO -+log_level: WARN - - # Log format. 'json' by default, can be changed to 'text' if needed --# log_format: json -+log_format: text - - # Audit usernames. - # Set to true to see real usernames in the logs instead of key ids, which is easier to follow, but -@@ -62,62 +62,6 @@ audit_usernames: false - # For more details, visit https://docs.gitlab.com/ee/development/distributed_tracing.html - # gitlab_tracing: opentracing://driver - --# This section configures the built-in SSH server. Ignored when running on OpenSSH. --sshd: -- # Address which the SSH server listens on. Defaults to [::]:22. -- listen: "[::]:22" -- # Set to true if gitlab-sshd is being fronted by a load balancer that implements -- # the PROXY protocol. -- proxy_protocol: false -- # Proxy protocol policy ("use", "require", "reject", "ignore"), "use" is the default value -- # Values: https://github.com/pires/go-proxyproto/blob/195fedcfbfc1be163f3a0d507fac1709e9d81fed/policy.go#L20 -- proxy_policy: "use" -- # Proxy allowed IP addresses. Takes precedent over proxy_policy. Disabled by default. -- # proxy_allowed: -- # - "192.168.0.1" -- # - "192.168.1.0/24" -- # Address which the server listens on HTTP for monitoring/health checks. Defaults to localhost:9122. -- web_listen: "localhost:9122" -- # Maximum number of concurrent sessions allowed on a single SSH connection. Defaults to 10. -- concurrent_sessions_limit: 10 -- # Sets an interval after which server will send keepalive message to a client. Defaults to 15s. -- client_alive_interval: 15 -- # The server waits for this time for the ongoing connections to complete before shutting down. Defaults to 10s. -- grace_period: 10 -- # The server disconnects after this time if the user has not successfully logged in. Defaults to 60s. -- login_grace_time: 60 -- # A short timeout to decide to abort the connection if the protocol header is not seen within it. Defaults to 500ms -- proxy_header_timeout: 500ms -- # The endpoint that returns 200 OK if the server is ready to receive incoming connections; otherwise, it returns 503 Service Unavailable. Defaults to "/start". -- readiness_probe: "/start" -- # The endpoint that returns 200 OK if the server is alive. Defaults to "/health". -- liveness_probe: "/health" -- # Specifies the available message authentication code algorithms that are used for protecting data integrity -- macs: [hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1] -- # Specifies the available Key Exchange algorithms -- kex_algorithms: [curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1] -- # Specified the ciphers allowed -- ciphers: [aes128-gcm@openssh.com, chacha20-poly1305@openssh.com, aes256-gcm@openssh.com, aes128-ctr, aes192-ctr,aes256-ctr] -- # Specified the available Public Key algorithms -- public_key_algorithms: [ssh-rsa, ssh-dss, ecdsa-sha2-nistp256, sk-ecdsa-sha2-nistp256@openssh.com, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519, sk-ssh-ed25519@openssh.com, rsa-sha2-256, rsa-sha2-512] -- # SSH host key files. -- host_key_files: -- - /run/secrets/ssh-hostkeys/ssh_host_rsa_key -- - /run/secrets/ssh-hostkeys/ssh_host_ecdsa_key -- - /run/secrets/ssh-hostkeys/ssh_host_ed25519_key -- host_key_certs: -- - /run/secrets/ssh-hostkeys/ssh_host_rsa_key-cert.pub -- - /run/secrets/ssh-hostkeys/ssh_host_ecdsa_key-cert.pub -- - /run/secrets/ssh-hostkeys/ssh_host_ed25519_key-cert.pub -- # GSSAPI-related settings -- gssapi: -- # Enable the gssapi-with-mic authentication method. Defaults to false. -- enabled: false -- # Keytab path. Defaults to "", system default (usually /etc/krb5.keytab). -- keytab: "" -- # The Kerberos service name to be used by sshd. Defaults to "", accepts any service name in keytab file. -- service_principal_name: "" -- - lfs: - # https://gitlab.com/groups/gitlab-org/-/epics/11872, disabled by default. - pure_ssh_protocol: false diff --git a/user/gitlab-shell/gitconfig b/user/gitlab-shell/gitconfig deleted file mode 100644 index ccf8053..0000000 --- a/user/gitlab-shell/gitconfig +++ /dev/null @@ -1,17 +0,0 @@ -# Based on files/gitlab-cookbooks/gitlab/templates/default/gitconfig.erb -# in omnibus-gitlab. - -[user] -name = GitLab -email = gitlab@local.host - -[core] -# Needed for the web editor. -autocrlf = input -alternateRefsCommand="exit 0 #" -# This option is unnecessary on journaled file systems and it's not recognized -# by git >= 2.36. -# fsyncObjectFiles = true - -[gc] -auto = 0 diff --git a/user/gitlab-shell/gitlab-shell.post-install b/user/gitlab-shell/gitlab-shell.post-install deleted file mode 100644 index 01c425c..0000000 --- a/user/gitlab-shell/gitlab-shell.post-install +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -set -eu - -keys_file='/var/lib/gitlab/.ssh/authorized_keys' - -if [ ! -f "$keys_file" ]; then - keys_dir="$(dirname "$keys_file")" - echo "* Initializing authorized_keys file in $keys_dir" 1>&2 - - mkdir -m0700 -p "$keys_dir" - chown git:git "$keys_dir" - - touch "$keys_file" - chmod 0600 "$keys_file" - chown git:git "$keys_file" -fi - -cat <&2 -* -* GitLab Shell has been initialized. Read /etc/gitlab/gitlab-shell.yml and -* modify settings as need. -* -EOF diff --git a/user/gitlab-shell/gitlab-shell.pre-install b/user/gitlab-shell/gitlab-shell.pre-install deleted file mode 100644 index 9421862..0000000 --- a/user/gitlab-shell/gitlab-shell.pre-install +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -git_dir='/var/lib/gitlab' - -if ! getent group git >/dev/null; then - echo '* Creating group git' >&2 - - addgroup -S git -fi - -if ! id git 2>/dev/null 1>&2; then - echo '* Creating user git' >&2 - - adduser -DHS -G git -h "$git_dir" -s /bin/sh \ - -g "added by apk for gitlab-shell" git - passwd -u git >/dev/null # unlock -fi - -if ! id -Gn git | grep -Fq redis; then - echo '* Adding user git to group redis' >&2 - - addgroup git redis -fi - -user_home="$(getent passwd git | cut -d: -f6)" - -if [ "$user_home" != "$git_dir" ]; then - cat >&2 <<-EOF - !! - !! User git has home directory in $user_home, but this package and gitlab-ce - !! package assumes $git_dir. Although it's possible to use a different - !! directory, it's really not easy. - !! - !! Please change git's home directory to $git_dir, or adjust settings - !! and move files yourself. Otherwise GitLab will not work! - !! - EOF -fi - -exit 0 From 32a461c89403a408884b483c5330c0265043d029 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:54 -0400 Subject: [PATCH 410/738] user/gitlab-pages: drop due migration to ilot iports --- user/gitlab-pages/APKBUILD | 35 ---------------- user/gitlab-pages/gitlab-pages.initd | 55 -------------------------- user/gitlab-pages/ungit-makefile.patch | 18 --------- 3 files changed, 108 deletions(-) delete mode 100644 user/gitlab-pages/APKBUILD delete mode 100644 user/gitlab-pages/gitlab-pages.initd delete mode 100644 user/gitlab-pages/ungit-makefile.patch diff --git a/user/gitlab-pages/APKBUILD b/user/gitlab-pages/APKBUILD deleted file mode 100644 index 6ab7745..0000000 --- a/user/gitlab-pages/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka -pkgname=gitlab-pages -pkgver=17.0.4 -_gittag="v$pkgver" -pkgrel=0 -pkgdesc="A daemon used to serve static websites for GitLab users" -url="https://gitlab.com/gitlab-org/gitlab-pages/" -arch="all" -license="MIT" -makedepends="go>=1.5" -source=" - https://gitlab.com/gitlab-org/gitlab-pages/-/archive/$_gittag/gitlab-pages-$_gittag.tar.gz - ungit-makefile.patch - $pkgname.initd - " -subpackages="$pkgname-openrc" -builddir="$srcdir"/$pkgname-$_gittag - -build() { - make VERSION=$pkgver REVISION=$pkgrel GOPATH="$srcdir" CGO_ENABLED=0 -} - -package() { - install -D -m 755 $pkgname "$pkgdir"/usr/bin/$pkgname - install -m755 -D "$srcdir"/$pkgname.initd \ - "$pkgdir"/etc/init.d/gitlab.pages -} - -sha512sums=" -fde33d01f7b3810a9a094c09fce19976c41a2ccc9eaf720a0f4dd285eb2d0f35de8d2d607cdbaa670221711919043d681fd3fda6e14d67ae1454619746c1e453 gitlab-pages-v17.0.4.tar.gz -710a9b652327e57e620c2bdb02bf912a6f61044eaaf61d36c6612284e9b951d2ac6f5eef77dfea16a0cde328bd4c556d9e47791c560139c27cb9659076f809b1 ungit-makefile.patch -20bc66c1c3548568ed353ca8d584f9108b9688f9375f212a18efc7b8386fdaafb3b2dc9e865f21c7f8fd31ada6e91842a8bb8d397f64851d853bb0de3e0e60bb gitlab-pages.initd -" diff --git a/user/gitlab-pages/gitlab-pages.initd b/user/gitlab-pages/gitlab-pages.initd deleted file mode 100644 index 4a34507..0000000 --- a/user/gitlab-pages/gitlab-pages.initd +++ /dev/null @@ -1,55 +0,0 @@ -#!/sbin/openrc-run - -name="GitLab Pages" -description="A daemon used to serve static websites for GitLab users" - -: ${pages_user:=${user:-"git"}} -: ${pages_root:="/var/lib/gitlab/pages"} -: ${pages_logfile:="/var/log/gitlab/pages.log"} - -command="/usr/bin/gitlab-pages" -# Note: The rest of the options is set in start_pre(). -command_args=" - -pages-domain=$pages_domain - -pages-root=$pages_root - -redirect-http=${pages_redirect_http:-true} - -use-http2=${pages_use_http2:-true} - " -command_background="yes" - -start_stop_daemon_args=" - --chdir $pages_root - --user $pages_user - --stdout $pages_logfile - --stderr $pages_logfile" -pidfile="/run/gitlab-pages.pid" - - -depend() { - use net -} - -start_pre() { - local item - - for item in $pages_listen_http; do - command_args="$command_args -listen-http=$item" - done - for item in $pages_listen_https; do - command_args="$command_args -listen-https=$item" - done - for item in $pages_listen_proxy; do - command_args="$command_args -listen-proxy=$item" - done - - command_args="$command_args - $(optif -metrics-address "$pages_metrics_address") - $(optif -root-cert "$pages_root_cert") - $(optif -root-key "$pages_root_key")" - - checkpath -m 640 -o $pages_user -f "$pages_logfile" -} - -optif() { - test -n "$2" && printf '%s/n' "$1=$2" || true -} diff --git a/user/gitlab-pages/ungit-makefile.patch b/user/gitlab-pages/ungit-makefile.patch deleted file mode 100644 index 4cbc132..0000000 --- a/user/gitlab-pages/ungit-makefile.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/Makefile.internal.mk.orig b/Makefile.internal.mk -index 6dfaa1b..207bdaf 100644 ---- a/Makefile.internal.mk.orig -+++ b/Makefile.internal.mk -@@ -1,13 +1,3 @@ --REVISION := $(shell git rev-parse --short HEAD || echo unknown) --LAST_TAG := $(shell git describe --tags --abbrev=0) --COMMITS := $(shell echo `git log --oneline $(LAST_TAG)..HEAD | wc -l`) --VERSION := $(shell cat VERSION) --BRANCH := $(shell git rev-parse --abbrev-ref HEAD) -- --ifneq (v$(VERSION),$(LAST_TAG)) -- VERSION := $(shell echo $(VERSION)~beta.$(COMMITS).g$(REVISION)) --endif -- - VERSION_FLAGS :=-X "main.VERSION=$(VERSION)" -X "main.REVISION=$(REVISION)" - - export GOBIN := $(CURDIR)/bin From 580e13676832e264647191a3f84aa45b144f72bd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:56 -0400 Subject: [PATCH 411/738] user/gitlab-foss: drop due migration to ilot iports --- user/gitlab-foss/APKBUILD | 375 ------------------ user/gitlab-foss/bin-wrapper.in | 15 - user/gitlab-foss/database-config.patch | 66 --- user/gitlab-foss/gitlab-foss.post-install | 108 ----- user/gitlab-foss/gitlab-foss.post-upgrade | 1 - user/gitlab-foss/gitlab-foss.pre-install | 53 --- user/gitlab-foss/gitlab-rails.confd | 20 - user/gitlab-foss/gitlab.confd | 85 ---- user/gitlab-foss/gitlab.initd | 50 --- user/gitlab-foss/gitlab.logrotate | 24 -- user/gitlab-foss/gitlab.mailroom.initd | 40 -- user/gitlab-foss/gitlab.rails.initd | 119 ------ user/gitlab-foss/gitlab.sidekiq.initd | 76 ---- user/gitlab-foss/gitlab.workhorse.initd | 75 ---- .../upgrade-sys-filesystem-depend.patch | 35 -- 15 files changed, 1142 deletions(-) delete mode 100644 user/gitlab-foss/APKBUILD delete mode 100644 user/gitlab-foss/bin-wrapper.in delete mode 100644 user/gitlab-foss/database-config.patch delete mode 100644 user/gitlab-foss/gitlab-foss.post-install delete mode 120000 user/gitlab-foss/gitlab-foss.post-upgrade delete mode 100644 user/gitlab-foss/gitlab-foss.pre-install delete mode 100644 user/gitlab-foss/gitlab-rails.confd delete mode 100644 user/gitlab-foss/gitlab.confd delete mode 100644 user/gitlab-foss/gitlab.initd delete mode 100644 user/gitlab-foss/gitlab.logrotate delete mode 100644 user/gitlab-foss/gitlab.mailroom.initd delete mode 100644 user/gitlab-foss/gitlab.rails.initd delete mode 100644 user/gitlab-foss/gitlab.sidekiq.initd delete mode 100644 user/gitlab-foss/gitlab.workhorse.initd delete mode 100644 user/gitlab-foss/upgrade-sys-filesystem-depend.patch diff --git a/user/gitlab-foss/APKBUILD b/user/gitlab-foss/APKBUILD deleted file mode 100644 index 21331a4..0000000 --- a/user/gitlab-foss/APKBUILD +++ /dev/null @@ -1,375 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka -# Contributor: Antoine Martin (ayakael) -pkgname=gitlab-foss -_pkgname=${pkgname%-foss} -pkgver=17.0.4 -_gittag=v$pkgver -pkgrel=0 -pkgdesc="A version control for your server" -url="https://gitlab.com/gitlab-org/gitlab-foss" -arch="x86_64 aarch64" -license="MIT" -# ruby-irb is needed only for Rails console (gitlab-rails console) -depends=" - $pkgname-assets=$pkgver-r$pkgrel - ca-certificates - cmd:dpkg-deb - exiftool - git>=2.42.0 - gitaly~=17.0 - gitlab-shell>=14.35 - graphicsmagick - http-parser - procps - py-docutils - python3 - redis>=2.8 - ruby3.2 - ruby3.2-bigdecimal - ruby3.2-bundler - ruby3.2-fiddle - ruby3.2-io-console - ruby3.2-irb - ruby3.2-json - ruby3.2-rake - ruby3.2-rdoc - ruby3.2-webrick - shared-mime-info - tzdata - " -makedepends=" - cargo - clang-dev - cmd:chrpath - cmake - file-dev - go - gpgme-dev - icu-dev - libffi-dev - libgcrypt-dev - libpq-dev - libxml2-dev - libxslt-dev - linux-headers - llvm - nodejs - openssl-dev - protobuf-dev - re2-dev - ruby3.2-dev - rust - yarn>=1.2.0 - " -pkgusers="git" -pkggroups="git www-data" -install="$pkgname.pre-install $pkgname.post-install $pkgname.post-upgrade" -subpackages="$pkgname-assets::noarch $pkgname-openrc" -source="https://gitlab.com/gitlab-org/gitlab-foss/-/archive/$_gittag/gitlab-foss-$_gittag.tar.gz - database-config.patch - $_pkgname.initd - $_pkgname.mailroom.initd - $_pkgname.rails.initd - $_pkgname.sidekiq.initd - $_pkgname.workhorse.initd - $_pkgname.confd - $_pkgname.logrotate - bin-wrapper.in - upgrade-sys-filesystem-depend.patch - " -builddir="$srcdir/gitlab-foss-$_gittag" - -_prefix="usr/lib/bundles/$_pkgname" - -export BUNDLE_DEPLOYMENT=true -export BUNDLE_FORCE_RUBY_PLATFORM=true -export BUNDLE_FROZEN=true -# Should be tied to $JOBS, but rust native code fails to build -export BUNDLE_JOBS=1 - -prepare() { - default_prepare - - # The default log level is very chatty. - sed -i 's/^\(\s*config.log_level\s*=\).*$/\1 :warn/' \ - config/environments/production.rb - - # This is not needed, the secret_token is generated by the - # gitlab-shell package. It also makes problems in the build phase. - rm config/initializers/gitlab_shell_secret_token.rb - - # Remove all locale files except en. - find locale -type d -mindepth 1 ! -name en -exec rm -rf {} + - - # Allow use of any bundler - sed -i -e '/BUNDLED/,+1d' Gemfile.lock -} - -build() { - local bundle_without='exclude development kerberos mysql test' - - cd "$builddir"/workhorse - - make - - cd "$builddir" - - msg "Installing Ruby gems..." - bundle config --local without "$bundle_without" - bundle config --local build.ffi --enable-system-libffi - bundle config --local build.gpgme --use-system-libraries - bundle config --local build.re2 --enable-system-libraries - bundle config --local build.nokogiri --use-system-libraries \ - --with-xml2-include=/usr/include/libxml2 \ - --with-xslt-include=/usr/include/libxslt - bundle config --local build.ruby-magic --enable-system-libraries - bundle config --local build.google-protobuf '-- --with-cflags=-D__va_copy=va_copy' - bundle config --local path "vendor/bundle" - - bundle install --no-cache - - # Replace bundled CA bundle with symlink. - ( - cd vendor/bundle/ruby/*/gems/aws-sdk-core-*/ - rm ca-bundle.crt - ln -s /etc/ssl/certs/ca-certificates.crt ca-bundle.crt - ) - - # Remove faulty RPATH. - chrpath -d vendor/bundle/ruby/*/extensions/*/*/ruby-magic-*/magic/magic.so - - # Patch installed gem gitlab-markup to use python3. - # Option "-S" causes that Python cannot find docutils module. - sed -i 's/python2 -S/python3/g' \ - vendor/bundle/ruby/*/gems/gitlab-markup-*/lib/github/markups.rb - - # Remove non-sense require of code for tests from top-level module - # (we're gonna delete tests from the package). - sed -i '/require .carrierwave\/test\/matchers./d' \ - vendor/bundle/ruby/*/gems/carrierwave-*/lib/carrierwave.rb - - msg "Installing npm modules..." - yarn install --production --frozen-lockfile - - # Since we have moved assets gems into a group, they are not implicitly - # loaded by default. This will be reverted after compiling assets. - sed -i.bak '/Bundler.require(\*Rails.groups/s/)/, :assets)/' \ - config/application.rb - - # assets:precompile and gettext:compile bootstraps the app, - # so they needs configs. - cp config/gitlab.yml.example config/gitlab.yml - cp config/database.yml.postgresql config/database.yml - cp config/secrets.yml.example config/secrets.yml - - # The configured path is not readable for the user building - # the package, so we must remove it; GitLab will use the default path. - sed -i '/^\s*secret_file:.*/d' config/gitlab.yml - - ( - export NODE_ENV=production - export RAILS_ENV=production - export SKIP_STORAGE_VALIDATION=true - export USE_DB=false - export NO_SOURCEMAPS=true - export NODE_OPTIONS="--max_old_space_size=3584" - - msg "Compiling GetText PO files..." - bundle exec rake gettext:compile - - msg "Compiling assets (this will take few minutes)..." - bundle exec rake gitlab:assets:compile - ) - - # Revert changes. - mv config/application.rb.bak config/application.rb - - msg "Cleaning assets gems..." - bundle config --local without 'exclude development kerberos mysql test assets' - bundle clean - - # Create executables in bin/*. - # See also https://github.com/bundler/bundler/issues/6149. - bundle binstubs --force bundler gitlab-mail_room puma sidekiq - - # Cleanup - rm config/database.yml config/gitlab.yml config/secrets.yml -} - -package() { - local destdir="$pkgdir/$_prefix" - local datadir="$pkgdir/var/lib/gitlab" - local file dest - - install -d -m755 "$destdir" "$destdir"/bin - - install -d -m755 -o git -g git \ - "$datadir" \ - "$pkgdir"/etc/gitlab \ - "$pkgdir"/var/log/gitlab \ - "$datadir"/pages - - install -d -m700 -o git -g git \ - "$datadir"/artifacts \ - "$datadir"/builds \ - "$datadir"/ci_secure_files \ - "$datadir"/dependency_proxy \ - "$datadir"/encrypted_settings \ - "$datadir"/external-diffs \ - "$datadir"/lfs-objects \ - "$datadir"/packages \ - "$datadir"/pages \ - "$datadir"/terraform_state \ - "$datadir"/uploads - - install -d -m0750 -o git -g www-data \ - "$datadir"/pages - - install -d -m02770 -o git -g git \ - "$datadir"/repositories - - # Install application files. - # Note: *VERSION files and doc directory are required (Help in GitLab - # menu refers to the doc directory). - cp -rl .bundle config.ru Gemfile* INSTALLATION_TYPE Rakefile ./*VERSION \ - app data db doc fixtures config lib locale metrics_server public sidekiq_cluster vendor gems \ - "$destdir"/ - - install -m755 -t "$destdir"/bin/ \ - bin/bundle \ - bin/mail_room \ - bin/metrics-server \ - bin/rails \ - bin/rake \ - bin/sidekiq \ - bin/sidekiq-cluster \ - bin/sidekiqmon \ - bin/puma - - cd "$destdir" - - # Not needed in runtime since we have already compiled all assets. - rm -r app/assets - rm -r vendor/assets - find public/assets -name '*.vue' -delete - find public/assets -type d -exec rmdir --ignore-fail-on-non-empty '{}' \; - # These load gems in the assets group. - rm config/initializers/sprockets.rb - - # Remove more stuff not neeeded in production. - rm -r lib/support - rm -r db/fixtures/development - find lib/tasks -maxdepth 1 -type f ! -name cache.rake ! -name setup.rake -delete - find lib/tasks/gitlab \( -name 'generate_docs.*' \ - -o -name 'shell.*' \ - -o -name 'test.*' \) -delete - - - cd "$destdir"/vendor/bundle/ruby/*/ - - # Remove tests, documentations and other useless files. - find gems/ \( -name 'doc' \ - -o -name 'spec' \ - -o -name 'test' \) \ - -type d -maxdepth 2 -exec rm -fr "{}" + - find gems/ \( -name 'README*' \ - -o -name 'CHANGELOG*' \ - -o -name 'CONTRIBUT*' \ - -o -name '*LICENSE*' \ - -o -name 'Rakefile' \ - -o -name '.*' \) \ - -type f -delete - - # Remove bundled libgit2 sources. - rm -r gems/rugged-*/vendor/libgit2 - - # Remove assets, they are already compiled. - rm -r gems/tanuki_emoji-*/app/assets - - # Remove build logs and cache. - rm -rf build_info/ cache/ - find extensions/ \( -name gem_make.out -o -name mkmf.log \) -delete - - - cd "$destdir" - - # Install and symlink config files. - for file in cable.yml.example \ - database.yml.postgresql \ - gitlab.yml.example \ - puma.rb.example \ - resque.yml.example \ - sidekiq.yml.example \ - initializers/smtp_settings.rb.sample - do - dest="$(basename "${file%.*}")" - install -m640 -g git -D config/$file "$pkgdir"/etc/gitlab/$dest - ln -sf /etc/gitlab/$dest "$pkgdir"/$_prefix/config/${file%.*} - done - - # This file will be generated by the post-install script, just prepare symlink. - ln -sf /etc/gitlab/secrets.yml config/secrets.yml - # These shouldn't be necessary, they are all configurable, but OmniBus - # creates them too, so just to be sure... - ln -sf /etc/gitlab/gitlab_kas_secret .gitlab_kas_secret - ln -sf /etc/gitlab/gitlab_pages_secret .gitlab_pages_secret - ln -sf /etc/gitlab/gitlab_shell_secret .gitlab_shell_secret - ln -sf /etc/gitlab/gitlab_workhorse_secret .gitlab_workhorse_secret - - # Some paths are hard-coded in GitLab, so we must make symlinks. :( - ln -sf /var/lib/gitlab/uploads public/uploads - ln -sf /var/log/gitlab log - ln -sf /var/tmp/gitlab tmp - - cat > "$datadir"/.profile <<-EOF - export RAILS_ENV=production - export NODE_ENV=production - export EXECJS_RUNTIME=Disabled - EOF - - # Install wrapper scripts to /usr/bin. - local name; for name in rake rails; do - sed "s/__COMMAND__/$name/g" "$srcdir"/bin-wrapper.in \ - > "$builddir"/gitlab-$name - install -m755 -D "$builddir"/gitlab-$name "$pkgdir"/usr/bin/gitlab-$name - done - - - cd "$builddir"/workhorse - - # Install workhorse. - make install DESTDIR="$pkgdir" PREFIX=/usr - install -m644 config.toml.example "$pkgdir"/etc/gitlab/workhorse.toml - - - for file in $_pkgname $_pkgname.rails $_pkgname.sidekiq $_pkgname.mailroom $_pkgname.workhorse; do - install -m755 -D "$srcdir"/$file.initd "$pkgdir"/etc/init.d/$file - done - - install -m644 -D "$srcdir"/$_pkgname.confd \ - "$pkgdir"/etc/conf.d/$_pkgname - - install -m644 -D "$srcdir"/$_pkgname.logrotate \ - "$pkgdir"/etc/logrotate.d/$_pkgname -} - -assets() { - depends="" - - amove $_prefix/public/assets -} - -sha512sums=" -e09cfbbe4237f42bd8509c551031fd3526b75762beae7dac5164ecc4056ae07890a3ddb8500f1573f0ca9d697150654d1fcab3b3d0a3b93e5382addcee298c5b gitlab-foss-v17.0.4.tar.gz -daa496f3d9146f9dbddff62477bf49d5c7bd2f2a4cdbadc70ee51c8230f3ef01dc950ef157154b31c7e7bef0beecc5cbac50fbac65a79d6d9099b27bcba8b2ab database-config.patch -80d9bf2d064c1d4310566e087e14220e075430c46d9a6c4641c1141fbdc05381ae14a3ae7dfcb7dcb75dbf7af17a136f81764c7a4d109f248a81033782dce23b gitlab.initd -1f451b67a5d5e58650b0fe862a2b65cfb8bff5502b37d94ae90619c1ff9affbecf24428303a2849bebce5f94bef37078f0e5710e344bbab616134e910938384a gitlab.mailroom.initd -d8cdeb54c46f8204936bf5750833649e4586d3dd1942eed45955ed1661ae5f5080f59184fcb59a8f73c1405faccbf02b3db3d2c12fc2a4a81424cd35ce390768 gitlab.rails.initd -cb4ec100f0ea7ffcbb37aead8423e636629e2f4848b2974a7b2468e96cb1081ca732ac336417b08dd943afb961df888c73af1334dcbe054dfd361e74f492fd86 gitlab.sidekiq.initd -85c4e257a030832bd70ad1e257ae7cb568b31e01201fc845abac02d00f02492ca694be1fa2bf743dd8c8623e6a79d36adee3f4de02040134c11158a6001c064b gitlab.workhorse.initd -4dc00b16462f30591297fcb535fc364185d3ed76e9956597f0423a8dfd8a9a351f6ac29d9f0c73052c11324fba4768eb89a21c6bef4da99f15baaea8c9ab8407 gitlab.confd -57f258246925fbef0780caebdf005983c72fe3db1ab3242a1e00137bd322f5ec6c0fd958db7178b8fc22103d071f550d6f71f08422bcd9e859d2a734b2ecef00 gitlab.logrotate -a944c3886388ba1574bf8c96b6de4d9f24ef4a83f553c31a224e17a3b01f2a5c65b60c59b7ed7ca4b25670c60ea8dd41b96a8a623d909d2bb09bdf2520ed7f23 bin-wrapper.in -0eaa7de9a906ddb0fe84b7afbaec893a134bbbdb9e71da75cf4095ef40404643e51447aee88d3cad6e565bc709b34ffd8901cc93061e4a2a410838aed42d3644 upgrade-sys-filesystem-depend.patch -" diff --git a/user/gitlab-foss/bin-wrapper.in b/user/gitlab-foss/bin-wrapper.in deleted file mode 100644 index aa1d411..0000000 --- a/user/gitlab-foss/bin-wrapper.in +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh - -BUNDLE_DIR='/usr/lib/bundles/gitlab' -export RAILS_ENV='production' -export NODE_ENV='production' -export EXECJS_RUNTIME='Disabled' - -cd $BUNDLE_DIR -install -m 700 -o git -g git -d "$(readlink ./tmp)" - -if [ "$(id -un)" != 'git' ]; then - exec su git -c '"$0" "$@"' -- bin/__COMMAND__ "$@" -else - exec bin/__COMMAND__ "$@" -fi diff --git a/user/gitlab-foss/database-config.patch b/user/gitlab-foss/database-config.patch deleted file mode 100644 index 9b113e1..0000000 --- a/user/gitlab-foss/database-config.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/config/database.yml.postgresql.orig b/config/database.yml.postgresql -index da9f458..2d6d44e 100644 ---- a/config/database.yml.postgresql.orig -+++ b/config/database.yml.postgresql -@@ -26,13 +26,6 @@ production: - username: git - password: "secure password" - host: localhost -- geo: -- adapter: postgresql -- encoding: unicode -- database: gitlabhq_geo_production -- username: git -- password: "secure password" -- host: localhost - - # - # Development specific -@@ -57,13 +50,6 @@ development: - host: localhost - variables: - statement_timeout: 15s -- geo: -- adapter: postgresql -- encoding: unicode -- database: gitlabhq_geo_development -- username: postgres -- password: "secure password" -- host: localhost - - # - # Staging specific -@@ -84,13 +70,6 @@ staging: - username: git - password: "secure password" - host: localhost -- geo: -- adapter: postgresql -- encoding: unicode -- database: gitlabhq_geo_staging -- username: git -- password: "secure password" -- host: localhost - - # Warning: The database defined as "test" will be erased and - # re-generated from your development database when you run "rake". -@@ -119,19 +98,3 @@ test: &test - reaping_frequency: nil - variables: - statement_timeout: 15s -- geo: -- adapter: postgresql -- encoding: unicode -- database: gitlabhq_geo_test -- username: postgres -- password: -- host: localhost -- reaping_frequency: nil -- embedding: -- adapter: postgresql -- encoding: unicode -- database: gitlabhq_embedding_test -- username: postgres -- password: -- host: localhost -- reaping_frequency: nil diff --git a/user/gitlab-foss/gitlab-foss.post-install b/user/gitlab-foss/gitlab-foss.post-install deleted file mode 100644 index 65d05cc..0000000 --- a/user/gitlab-foss/gitlab-foss.post-install +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/sh -set -eu - -group='git' -data_dir='/var/lib/gitlab' -secrets_file='/etc/gitlab/secrets.yml' -shell_secret_file='/etc/gitlab/gitlab_shell_secret' -workhorse_secret_file='/etc/gitlab/gitlab_workhorse_secret' -kas_secret_file='/etc/gitlab/gitlab_kas_secret' - -gen_random_b64() { - local bits="$1" - ruby <<-EOF - require 'securerandom' - require 'base64' - puts Base64.strict_encode64(SecureRandom.random_bytes($bits)) - EOF -} - - -echo "* Checking $secrets_file" >&2 - -ruby <<-EOF - require 'openssl' - require 'securerandom' - require 'yaml' - - secrets_file = '$secrets_file' - changed = false - - secrets = YAML.load_file(secrets_file) if File.exist?(secrets_file) - secrets ||= {} - prod = secrets['production'] ||= {} - prod['db_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) - prod['secret_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) - prod['otp_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) - prod['encrypted_settings_key_base'] ||= ( changed = true; SecureRandom.hex(64) ) - prod['openid_connect_signing_key'] ||= begin - changed = true - prod.delete('jws_private_key') || OpenSSL::PKey::RSA.new(2048).to_pem - end - # db/fixtures/production/010_settings.rb - prod['ci_jwt_signing_key'] ||= ( changed = true; OpenSSL::PKey::RSA.new(2048).to_pem ) - - if changed - STDERR.puts "* Generating random secrets into #{secrets_file}" - File.write(secrets_file, YAML.dump(secrets), mode: 'w', perm: 0640) - end -EOF -chown root:$group "$secrets_file" - -if [ ! -f "$shell_secret_file" ]; then - echo "* Generating random secret in $shell_secret_file" >&2 - - head -c 512 /dev/urandom | LC_CTYPE=C tr -cd 'a-zA-Z0-9' | head -c 64 > "$shell_secret_file" - chown root:$group "$shell_secret_file" - chmod 0640 "$shell_secret_file" -fi - -if [ ! -f "$workhorse_secret_file" ]; then - echo "* Generating random secret in $workhorse_secret_file" >&2 - - # Sync with lib/gitlab/workhorse.rb. - gen_random_b64 32 > "$workhorse_secret_file" - chown root:$group "$workhorse_secret_file" - chmod 0640 "$workhorse_secret_file" -fi - -if [ ! -f "$kas_secret_file" ]; then - echo "* Generating random secret in $kas_secret_file" >&2 - - # Sync with lib/gitlab/workhorse.rb. - gen_random_b64 32 > "$kas_secret_file" - chown root:$group "$kas_secret_file" - chmod 0640 "$kas_secret_file" -fi - -# NOTE: We create this symlink in post-install script instead of APKBULD, -# so user can decide to have tmp dir inside $data_dir (e.g. it's on bigger disk). -if [ ! -e "$data_dir"/tmp ]; then - ln -s /var/tmp/gitlab "$data_dir"/tmp -fi - - -if [ "${0##*.}" = 'post-upgrade' ]; then - cat >&2 <<-EOF - * - * To finish GitLab upgrade run: - * - * gitlab-rake gitlab:db:configure - * - EOF -else - cat >&2 <<-EOF - * - * 1. Adjust settings in /etc/gitlab/database.yml and gitlab.yml. - * - * 2. Create database for GitLab: - * - * psql -c "CREATE ROLE gitlab PASSWORD 'top-secret' INHERIT LOGIN;" - * psql -c "CREATE DATABASE gitlab OWNER gitlab ENCODING 'UTF-8';" - * psql -d gitlab -c "CREATE EXTENSION pg_trgm; CREATE EXTENSION btree_gist;" - * - * 3. Run "gitlab-rake gitlab:setup", or "gitlab-rake gitlab:db:configure" if - * you are updating existing database. - * - EOF -fi diff --git a/user/gitlab-foss/gitlab-foss.post-upgrade b/user/gitlab-foss/gitlab-foss.post-upgrade deleted file mode 120000 index 20d2b0c..0000000 --- a/user/gitlab-foss/gitlab-foss.post-upgrade +++ /dev/null @@ -1 +0,0 @@ -gitlab-foss.post-install \ No newline at end of file diff --git a/user/gitlab-foss/gitlab-foss.pre-install b/user/gitlab-foss/gitlab-foss.pre-install deleted file mode 100644 index 66ad895..0000000 --- a/user/gitlab-foss/gitlab-foss.pre-install +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -# It's very important to set user/group correctly. - -git_dir='/var/lib/gitlab' - -if ! getent group git 1>/dev/null; then - echo '* Creating group git' 1>&2 - - addgroup -S git -fi - -if ! id git 2>/dev/null 1>&2; then - echo '* Creating user git' 1>&2 - - adduser -DHS -G git -h "$git_dir" -s /bin/sh \ - -g "added by apk for gitlab-foss" git - passwd -u git 1>/dev/null # unlock -fi - -if ! id -Gn git | grep -Fq redis; then - echo '* Adding user git to group redis' 1>&2 - - addgroup git redis -fi - -if [ "$(id -gn git)" != 'git' ]; then - cat >&2 <<-EOF - !! - !! User git has primary group $(id -gn git). We strongly recommend to change - !! git's primary group to git, otherwise GitLab may not work correctly. - !! - EOF - - # Add it at least as a supplementary group. - adduser git git -fi - -user_home="$(getent passwd git | cut -d: -f6)" - -if [ "$user_home" != "$git_dir" ]; then - cat >&2 <<-EOF - !! - !! User git has home directory in $user_home, but this package assumes - !! $git_dir. Although it's possible to use a different directory, - !! it's really not easy. - !! - !! Please change git's home directory to $git_dir, or adjust settings - !! and move files yourself. Otherwise GitLab will not work! - !! - EOF -fi - -exit 0 diff --git a/user/gitlab-foss/gitlab-rails.confd b/user/gitlab-foss/gitlab-rails.confd deleted file mode 100644 index d85aa9c..0000000 --- a/user/gitlab-foss/gitlab-rails.confd +++ /dev/null @@ -1,20 +0,0 @@ -# Configuration for /etc/init.d/gitlab.rails - -# Path to the Puma configuration file. -#puma_config="/etc/gitlab/puma.rb" - -# IP address and port for Puma server to listen on. -#puma_listen_tcp="127.0.0.1:8080" - -# Absolute path of unix socket for Puma server to listen on. -#puma_listen_unix="/run/gitlab/gitlab.socket" - -# Path to the file to redirect stdout from Puma server to. -#puma_stdout_file="/var/log/gitlab/puma_stdout.log" - -# Path to the file to redirect stderr from Puma server to. -#puma_stderr_file="/var/log/gitlab/puma_stderr.log" - -# Action Cable uses a separate thread pool per Puma worker. This configures -# number of threads in the pool. -#action_cable_worker_pool_size=4 diff --git a/user/gitlab-foss/gitlab.confd b/user/gitlab-foss/gitlab.confd deleted file mode 100644 index ade6bcc..0000000 --- a/user/gitlab-foss/gitlab.confd +++ /dev/null @@ -1,85 +0,0 @@ -# Configuration file for /etc/init.d/gitlab and -# /etc/init.d/gitlab.{mailroom,rails,sidekiq,workhorse} - - -# Path to the base directory for the Prometheus metrics used by Puma and -# Sidekiq. -#metrics_dir=/dev/shm/gitlab - - -# How many Puma worker processes to create (0 to disable cluster mode). -#puma_workers=3 - -# IP address and port for Puma server to listen on. -#puma_listen_tcp="127.0.0.1:8080" - -# Absolute path of unix socket for Puma server to listen on. -#puma_listen_unix="/run/gitlab/gitlab.socket" - -# Action Cable uses a separate thread pool per Puma worker. This configures -# number of threads in the pool. -#action_cable_worker_pool_size=4 - - -# IP address and port, or absolute path of the unix socket, where should -# Workhorse listen on for connections from a web server. -#workhorse_listen="/run/gitlab/workhorse.socket" - -# How long to wait for response headers when proxying the request. -#workhorse_proxy_header_timeout="1m0s" - -# Number of API requests allowed at single time. -#workhorse_api_limit= - -# Maximum queueing duration of requests (default 30s). -#workhorse_api_queue_duration= - -# Number of API requests allowed to be queued. -#workhorse_api_queue_limit= - -# Long polling duration for job requesting for runners (default 0s - disabled) -#workhorse_ci_long_polling_duration= - -# Log format to use: text, json, structured, none. Defaults to "text". -#workhorse_log_format= - -# Prometheus listening address. -#workhorse_prometheus_listen= - -# Sentry DSN for Workhorse. -#workhorse_sentry_dsn= - - -# Specify how many processes to create using sidekiq-cluster and which queue -# they should handle. Each whitespace-separated item equates to one additional -# Sidekiq process, and comma-separated values in each item determine the queues -# it works on. The special queue name "*" means all queues. -# Example: "* gitlab_shell process_commit,post_receive" -# See https://docs.gitlab.com/ee/administration/sidekiq/extra_sidekiq_processes.html. -#sidekiq_queue_groups="*" - -# Maximum threads to use with Sidekiq (default: 50, 0 to disable). -#sidekiq_max_concurrency= - -# Minimum threads to use with Sidekiq (default: 0). -#sidekiq_min_concurrency= - -# The number of seconds to wait between worker checks. -#sidekiq_interval= - -# Graceful timeout for all running processes. -#sidekiq_shutdown_timeout= - -# Run workers for all queues in sidekiq_queues.yml except the given ones. -#sidekiq_negate=no - -# Run workers based on the provided selector. -#sidekiq_queue_selector=no - -# Memory limit (in MiB) for the Sidekiq process. If the RSS (Resident Set Size) -# of the Sidekiq process exceeds this limit, a delayed shutdown is triggered. -#sidekiq_memkiller_max_rss=2000 - - -# Enable mail_room to handle incoming mails? -#mailroom_enabled="no" diff --git a/user/gitlab-foss/gitlab.initd b/user/gitlab-foss/gitlab.initd deleted file mode 100644 index cdf212e..0000000 --- a/user/gitlab-foss/gitlab.initd +++ /dev/null @@ -1,50 +0,0 @@ -#!/sbin/openrc-run - -name="GitLab" -description="Meta script for starting/stopping all the GitLab components" - -: ${mailroom_enabled:="no"} -: ${pages_enabled:="yes"} - -subservices="gitlab.rails gitlab.gitaly gitlab.sidekiq gitlab.workhorse" -if yesno "$mailroom_enabled"; then - subservices="$subservices gitlab.mailroom" -fi -if yesno "$pages_enabled" && [ -e /etc/init.d/gitlab.pages ]; then - subservices="$subservices gitlab.pages" -fi - -depend() { - need redis postgresql - use net -} - -start() { - local ret=0 - - ebegin "Starting all GitLab components" - local svc; for svc in $subservices; do - service $svc start || ret=1 - done - eend $ret -} - -stop() { - local ret=0 - - ebegin "Stopping all GitLab components" - local svc; for svc in $subservices; do - service $svc stop || ret=1 - done - eend $ret -} - -status() { - local ret=0 - - local svc; for svc in $subservices; do - echo "$svc:" - service $svc status || ret=1 - done - eend $ret -} diff --git a/user/gitlab-foss/gitlab.logrotate b/user/gitlab-foss/gitlab.logrotate deleted file mode 100644 index 721ff49..0000000 --- a/user/gitlab-foss/gitlab.logrotate +++ /dev/null @@ -1,24 +0,0 @@ -/var/log/gitlab/workhorse.log { - compress - maxsize 10M - minsize 1M - missingok - postrotate - /etc/init.d/gitlab.workhorse --quiet --ifstarted reopen - endscript - sharedscripts - rotate 5 - weekly -} - -/var/log/gitlab/*.log { - compress - copytruncate - delaycompress - maxsize 10M - minsize 1M - missingok - sharedscripts - rotate 10 - weekly -} diff --git a/user/gitlab-foss/gitlab.mailroom.initd b/user/gitlab-foss/gitlab.mailroom.initd deleted file mode 100644 index e6d6a64..0000000 --- a/user/gitlab-foss/gitlab.mailroom.initd +++ /dev/null @@ -1,40 +0,0 @@ -#!/sbin/openrc-run - -supervisor=supervise-daemon - -name="GitLab (mailroom)" -description="GitLab service for processing incoming mails." - -: ${gitlab_base:="/usr/lib/bundles/gitlab"} -: ${gitlab_config:="/etc/gitlab/gitlab.yml"} -: ${mailroom_logfile:="/var/log/gitlab/mail_room.log"} -: ${mailroom_config:="$gitlab_base/config/mail_room.yml"} - -command="$gitlab_base/bin/mail_room" -command_args="-c $mailroom_config" -command_background="yes" -command_user="git" - -directory="$gitlab_base" -error_log="$mailroom_logfile" -output_log="$mailroom_logfile" - -supervise_daemon_args=" - --env RAILS_ENV=production - --env TZ=:/etc/localtime - --env MAIL_ROOM_GITLAB_CONFIG_FILE=$gitlab_config - " -start_stop_daemon_args="--interpreted $supervise_daemon_args" -pidfile="/run/gitlab/mail_room.pid" - -required_files="$mailroom_config $gitlab_config" - -depend() { - need redis - use net -} - -start_pre() { - checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 - checkpath -f -m 640 -o $command_user "$mailroom_logfile" -} diff --git a/user/gitlab-foss/gitlab.rails.initd b/user/gitlab-foss/gitlab.rails.initd deleted file mode 100644 index 4c824d9..0000000 --- a/user/gitlab-foss/gitlab.rails.initd +++ /dev/null @@ -1,119 +0,0 @@ -#!/sbin/openrc-run - -name="GitLab Rails" -description="GitLab application" - -extra_started_commands="reload reopen" -description_reload="Reload configuration" -description_reopen="Reopen log files" - -: ${gitlab_base:="/usr/lib/bundles/gitlab"} -: ${metrics_dir:="/dev/shm/gitlab"} - -: ${action_cable_worker_pool_size:=4} -: ${gitlab_config:="/etc/gitlab/gitlab.yml"} -: ${puma_workers:=3} -: ${puma_listen_unix:="/run/gitlab/gitlab.socket"} -: ${puma_listen_tcp:="127.0.0.1:8080"} -: ${puma_stdout_file:="/var/log/gitlab/puma_stdout.log"} -: ${puma_stderr_file:="/var/log/gitlab/puma_stderr.log"} -: ${puma_config:="/etc/gitlab/puma.rb"} -: ${puma_metrics_dir:="$metrics_dir/puma"} - -command="$gitlab_base/bin/puma" -command_args=" - --config $puma_config - --workers $puma_workers - --bind tcp://$puma_listen_tcp - --bind unix://$puma_listen_unix - --redirect-stdout $puma_stdout_file - --redirect-stderr $puma_stderr_file - --redirect-append - --state /run/gitlab/puma.state - " -command_background="yes" -command_user="git" -directory="$gitlab_base" - -supervise_daemon_args=" - --env ACTION_CABLE_WORKER_POOL_SIZE=$action_cable_worker_pool_size - --env RAILS_ENV=production - --env NODE_ENV=production - --env EXECJS_RUNTIME=Disabled - --env GITLAB_BASE=$gitlab_base - --env TZ=:/etc/localtime - --env prometheus_multiproc_dir=$puma_metrics_dir - ${supervise_daemon_args:-} - " -start_stop_daemon_args=" - --interpreted - $supervise_daemon_args - $start_stop_daemon_args - " -pidfile="/run/gitlab/puma.pid" - -required_files="$gitlab_config $puma_config" - -depend() { - need redis - want sshd postgresql docker-registry - use net -} - -start_pre() { - checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 - checkpath -d -m 700 -o $command_user -q "$(readlink -f "$gitlab_base"/tmp)" || return 1 - checkpath -d -m 700 -o $command_user -q "$metrics_dir" || return 1 - checkpath -d -m 700 -o $command_user --directory-truncate "$puma_metrics_dir" || return 1 - checkpath -f -m 644 -o $command_user "$puma_stdout_file" || return 1 - checkpath -f -m 644 -o $command_user "$puma_stderr_file" || return 1 - - # Ruby requires sticky bit on TMP directory. - checkpath -d -m 1777 /tmp - - local downloads_path="$(_parse_yaml "$gitlab_config" \ - production.gitlab.repository_downloads_path)" - - if [ -n "$downloads_path" ]; then - checkpath -d -m 700 -o $command_user -q "$downloads_path" - fi - - checkpath --directory --owner $command_user --mode 0775 \ - /var/tmp/gitlab/downloads \ - /var/tmp/gitlab/backups - -} - -reload() { - ebegin "Reloading $name" - - if [ "$supervisor" ]; then - $supervisor "$RC_SVCNAME" --signal USR2 - else - start-stop-daemon --pidfile "$pidfile" --signal USR2 - fi - eend $? -} - -reopen() { - ebegin "Telling $name to reopen log files" - - if [ "$supervisor" ]; then - $supervisor "$RC_SVCNAME" --signal USR1 - else - start-stop-daemon --pidfile "$pidfile" --signal USR1 - fi - eend $? -} - -_parse_yaml() { - local file="$1" - local key="$2" - local default="${3:-}" - local key_path="$(echo "[\"$key\"]" | sed 's/\./"]["/g')" - - ruby <<-EOF - require "yaml" - puts YAML.load_file("$file")$key_path rescue puts "$default" - EOF -} diff --git a/user/gitlab-foss/gitlab.sidekiq.initd b/user/gitlab-foss/gitlab.sidekiq.initd deleted file mode 100644 index eb30f4c..0000000 --- a/user/gitlab-foss/gitlab.sidekiq.initd +++ /dev/null @@ -1,76 +0,0 @@ -#!/sbin/openrc-run - -extra_started_commands="finish" - -name="GitLab Sidekiq" -description="GitLab backgroud workers" -description_finish="Stop fetching new jobs and finish current ones" - -: ${gitlab_base:="/usr/lib/bundles/gitlab"} -: ${metrics_dir:="/dev/shm/gitlab"} - -: ${sidekiq_logfile:="/var/log/gitlab/sidekiq.log"} -: ${sidekiq_memkiller_max_rss:="2000"} # default per Omnibus -: ${sidekiq_metrics_dir:="$metrics_dir/sidekiq"} -: ${sidekiq_negate:="no"} -: ${sidekiq_queue_groups:="*"} -: ${sidekiq_queue_selector:="no"} - -command="$gitlab_base/bin/sidekiq-cluster" -# Note: The rest of the options is set in start_pre(). -command_args="-r $gitlab_base -e production ${command_args:-}" -command_background="yes" -command_user="git" - -directory="$gitlab_base" -error_log="$sidekiq_logfile" -output_log="$sidekiq_logfile" - -supervise_daemon_args=" - --env RAILS_ENV=production - --env NODE_ENV=production - --env EXECJS_RUNTIME=Disabled - --env TZ=:/etc/localtime - --env SIDEKIQ_MEMORY_KILLER_MAX_RSS=$(( sidekiq_memkiller_max_rss * 1024 )) - --env prometheus_multiproc_dir=$sidekiq_metrics_dir - " -start_stop_daemon_args="--interpreted $supervise_daemon_args" -pidfile="/run/gitlab/sidekiq.pid" - -depend() { - need redis - use net postgresql -} - -start_pre() { - yesno "$sidekiq_queue_selector" && command_args="$command_args --queue-selector" - - command_args="$command_args - $(optif --max-concurrency ${sidekiq_max_concurrency:-}) - $(optif --min-concurrency ${sidekiq_min_concurrency:-}) - $(optif --interval ${sidekiq_interval:-}) - $(optif --timeout ${sidekiq_shutdown_timeout:-}) - $(set -f; printf "'%s' " $sidekiq_queue_groups) - " - yesno "$sidekiq_negate" && command_args="$command_args --negate" - - checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 - checkpath -d -m 700 -o $command_user -q "$metrics_dir" || return 1 - checkpath -d -m 700 -o $command_user --directory-truncate "$sidekiq_metrics_dir" || return 1 - checkpath -f -m 644 -o $command_user "$sidekiq_logfile" -} - -finish() { - ebegin "Telling $name to stop fetching new jobs" - - if [ "$supervisor" ]; then - $supervisor "$RC_SVCNAME" --signal TSTP - else - start-stop-daemon --pidfile "$pidfile" --signal TSTP - fi - eend $? -} - -optif() { - test -n "$2" && printf '%s/n' "$1=$2" || true -} diff --git a/user/gitlab-foss/gitlab.workhorse.initd b/user/gitlab-foss/gitlab.workhorse.initd deleted file mode 100644 index 4b04d7c..0000000 --- a/user/gitlab-foss/gitlab.workhorse.initd +++ /dev/null @@ -1,75 +0,0 @@ -#!/sbin/openrc-run - -extra_started_commands="reopen" - -name="GitLab Workhorse" -description="A reverse proxy for GitLab." -description_reopen="Reopen log files" - -: ${gitlab_base:="/usr/lib/bundles/gitlab"} -: ${workhorse_logfile:="/var/log/gitlab/workhorse.log"} -: ${workhorse_access_log:="no"} - -command="/usr/bin/gitlab-workhorse" -# Note: The rest of the options is set in start_pre(). -command_args=" - -authBackend=http://${puma_listen_tcp:="127.0.0.1:8080"} - -config=${workhorse_config:="/etc/gitlab/workhorse.toml"} - -documentRoot=${gitlab_public_dir:="$gitlab_base/public"} - -listenAddr=${workhorse_listen:="/run/gitlab/workhorse.socket"} - -listenUmask=${workhorse_listen_umask:="000"} - -logFile=$workhorse_logfile - -secretPath=${workhorse_secret_path:="/etc/gitlab/gitlab_workhorse_secret"} - " -command_background="yes" -command_user="git" -directory="$gitlab_base" -pidfile="/run/gitlab/workhorse.pid" - -depend() { - use net -} - -start_pre() { - local listen_net="tcp" - [ "${workhorse_listen:0:1}" = '/' ] && listen_net="unix" - - command_args="$command_args - -listenNetwork=$listen_net - $(optif -apiCiLongPollingDuration "$workhorse_ci_long_polling_duration") - $(optif -apiLimit "$workhorse_api_limit") - $(optif -apiQueueDuration "$workhorse_api_queue_duration") - $(optif -apiQueueLimit "$workhorse_api_queue_limit") - $(optif -authSocket "$puma_listen_unix") - $(optif -logFormat "$workhorse_log_format") - $(optif -prometheusListenAddr "$workhorse_prometheus_listen_addr") - $(optif -proxyHeadersTimeout "$workhorse_proxy_header_timeout")" - # FIXME: not implemented - #yesno "$workhorse_access_log" || command_args="$command_args -disableAccessLog" - - start_stop_daemon_args="$start_stop_daemon_args - $(optif '--env GITLAB_WORKHORSE_SENTRY_DSN' "$workhorse_sentry_dns")" - supervise_daemon_args="$supervise_daemon_args - $(optif '--env GITLAB_WORKHORSE_SENTRY_DSN' "$workhorse_sentry_dns")" - - checkpath -d -m 755 -o $command_user -q "${pidfile%/*}" || return 1 - if [ "$listen_net" = "unix" ]; then - checkpath -d -m 755 -o $command_user -q "${workhorse_listen%/*}" || return 1 - fi - checkpath -f -m 640 -o $command_user "$workhorse_logfile" -} - -reopen() { - ebegin "Telling $name to reopen log files" - - if [ "$supervisor" ]; then - $supervisor "$RC_SVCNAME" --signal HUP - else - start-stop-daemon --pidfile "$pidfile" --signal HUP - fi - eend $? -} - -optif() { - test -n "$2" && printf '%s/n' "$1=$2" || true -} diff --git a/user/gitlab-foss/upgrade-sys-filesystem-depend.patch b/user/gitlab-foss/upgrade-sys-filesystem-depend.patch deleted file mode 100644 index d608191..0000000 --- a/user/gitlab-foss/upgrade-sys-filesystem-depend.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/Gemfile.orig b/Gemfile -index c1e9e34..a4448b7 100644 ---- a/Gemfile.orig -+++ b/Gemfile -@@ -525,7 +525,7 @@ gem 'health_check', '~> 3.0' # rubocop:todo Gemfile/MissingFeatureCategory - - # System information - gem 'vmstat', '~> 2.3.0' # rubocop:todo Gemfile/MissingFeatureCategory --gem 'sys-filesystem', '~> 1.4.3' # rubocop:todo Gemfile/MissingFeatureCategory -+gem 'sys-filesystem', '~> 1.4.5' # rubocop:todo Gemfile/MissingFeatureCategory - - # NTP client - gem 'net-ntp' # rubocop:todo Gemfile/MissingFeatureCategory -diff --git a/Gemfile.lock.orig b/Gemfile.lock -index bb66169..a4da10b 100644 ---- a/Gemfile.lock.orig -+++ b/Gemfile.lock -@@ -1657,7 +1657,7 @@ GEM - attr_required (>= 0.0.5) - httpclient (>= 2.4) - sync (0.5.0) -- sys-filesystem (1.4.3) -+ sys-filesystem (1.4.5) - ffi (~> 1.1) - sysexits (1.2.0) - table_print (1.5.7) -@@ -2123,7 +2123,7 @@ DEPENDENCIES - stackprof (~> 0.2.25) - state_machines-activerecord (~> 0.8.0) - static_holmes (~> 0.7.7) -- sys-filesystem (~> 1.4.3) -+ sys-filesystem (~> 1.4.5) - tanuki_emoji (~> 0.9) - telesignenterprise (~> 2.2) - terser (= 1.0.2) From 9b5788e0129ed4be8b96a6abcc74783f0e3ad915 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:32:57 -0400 Subject: [PATCH 412/738] user/gitaly: drop due migration to ilot iports --- user/gitaly/APKBUILD | 86 ------------------------------------- user/gitaly/config.patch | 91 ---------------------------------------- user/gitaly/gitaly.initd | 39 ----------------- 3 files changed, 216 deletions(-) delete mode 100644 user/gitaly/APKBUILD delete mode 100644 user/gitaly/config.patch delete mode 100644 user/gitaly/gitaly.initd diff --git a/user/gitaly/APKBUILD b/user/gitaly/APKBUILD deleted file mode 100644 index 1b400ca..0000000 --- a/user/gitaly/APKBUILD +++ /dev/null @@ -1,86 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) -# Contributor: Jakub Jirutka -pkgname=gitaly -pkgver=17.0.4 -pkgrel=0 -pkgdesc="A Git RPC service for handling all the git calls made by GitLab" -url="https://gitlab.com/gitlab-org/gitaly/" -arch="all" -# GPL-2.0-only WITH GCC-exception-2.0: bundled libgit2 -license="MIT AND GPL-2.0-only WITH GCC-exception-2.0" -depends=" - git>=2.42 - " -makedepends=" - bash - cmake - go - icu-dev - libssh2-dev - libxml2-dev - libxslt-dev - " -subpackages=" - $pkgname-backup - $pkgname-blackbox - $pkgname-praefect - $pkgname-openrc - " -source="https://gitlab.com/gitlab-org/gitaly/-/archive/v$pkgver/gitaly-v$pkgver.tar.gz - config.patch - $pkgname.initd - " -builddir="$srcdir/$pkgname-v$pkgver" -options="!check" - -build() { - make V=1 BUILD_TAGS="tracer_static tracer_static_jaeger" -} - -package() { - ## Go part - - make install DESTDIR="$pkgdir" PREFIX=/usr - - # Not very useful for us. - rm "$pkgdir"/usr/bin/gitaly-debug - rm "$pkgdir"/usr/bin/gitaly-wrapper - - install -m644 -D config.toml.example "$pkgdir"/etc/gitlab/gitaly.toml - install -m644 -D config.praefect.toml.example "$pkgdir"/etc/gitlab/praefect.toml - install -m644 -D cmd/gitaly-blackbox/config.toml.example "$pkgdir"/etc/gitlab/gitaly-blackbox.toml - - install -m755 -D "$srcdir"/gitaly.initd "$pkgdir"/etc/init.d/gitlab.gitaly -} - -backup() { - pkgdesc="Utility used by the backup Rake task to create/restore repository backups from Gitaly" - depends="" - - amove usr/bin/gitaly-backup -} - -# TODO: Add init script. -blackbox() { - pkgdesc="Prometheus exporter that measures GitLab server performance by performing a Git HTTP clone" - depends="" - - amove etc/gitlab/gitaly-blackbox.toml - amove usr/bin/gitaly-blackbox -} - -# TODO: Add init script. -praefect() { - pkgdesc="A reverse-proxy for Gitaly to manage a cluster of Gitaly nodes for HA" - depends="" - - amove etc/gitlab/praefect.toml - amove usr/bin/praefect -} - -sha512sums=" -2d06498c519c20804dd592cac3214cf8124ece1dda0d15342f8ccc6d9c9d2715dad24f9940e4d87b824320483c9882004bcef3747a8de347c1d48ec983a9f5cb gitaly-v17.0.4.tar.gz -7685330e637c3a34db941c9e6b8776d0611ec16297e8be998a3eb4716c455d9f015d433a4d27720c24e520d489dd56bdab7c0e4264f2852b4b0bfd6ecaa7f773 config.patch -c32105d921be16eaf559cf21d6840bc346cd92b5e37974cedecdb5a2d2ca1eb5e8fbb144f5fc8a1289bf9415102b313cf2d61ee510c80f08ab33a799f5ac7122 gitaly.initd -" diff --git a/user/gitaly/config.patch b/user/gitaly/config.patch deleted file mode 100644 index 9df7db0..0000000 --- a/user/gitaly/config.patch +++ /dev/null @@ -1,91 +0,0 @@ -diff --git a/config.toml.example.orig b/config.toml.example -index 82b8502..9982087 100644 ---- a/config.toml.example.orig -+++ b/config.toml.example -@@ -2,19 +2,24 @@ - # For Gitaly documentation, see https://docs.gitlab.com/ee/administration/gitaly/. - - # A path which Gitaly should open a Unix socket. --socket_path = "/home/git/gitlab/tmp/sockets/private/gitaly.socket" -+socket_path = "/run/gitlab/gitaly.socket" - - # Directory containing Gitaly executables. --bin_dir = "/home/git/gitaly/_build/bin" -+bin_dir = "/usr/bin" - - # # Optional. The directory where Gitaly can create all files required to - # # properly operate at runtime. If not set, Gitaly will create a directory in - # # the global temporary directory. This directory must exist. --# runtime_dir = "/home/git/gitaly/run" -+runtime_dir = "/run/gitaly" - - # # Optional if socket_path is set. TCP address for Gitaly to listen on. This is insecure (unencrypted connection). - # listen_addr = "localhost:9999" - -+# # Optional: configure where the Gitaly creates the sockets for internal connections. If unset, Gitaly will create a randomly -+# # named temp directory each time it boots. -+# # Non Gitaly clients should never connect to these sockets. -+internal_socket_dir = "/run/gitaly/internal" -+ - # # Optional. TCP over TLS address for Gitaly to listen on. - # tls_listen_addr = "localhost:8888" - -@@ -35,9 +40,9 @@ bin_dir = "/home/git/gitaly/_build/bin" - # # Gitaly supports TLS encryption. You must bring your own certificates because this isn’t provided automatically. - # [tls] - # # Path to the certificate. --# certificate_path = '/home/git/cert.cert' -+# certificate_path = '/etc/gitlab/ssl/gitaly.crt' - # # Path to the key. --# key_path = '/home/git/key.pem' -+# key_path = '/etc/gitlab/ssl/gitaly.key' - - # # Git settings - # [git] -@@ -58,7 +63,7 @@ bin_dir = "/home/git/gitaly/_build/bin" - # # The name of the storage - name = "default" - # # The path to the storage. --path = "/home/git/repositories" -+path = "/var/lib/gitlab/repositories" - - # # You can optionally configure more storages for this Gitaly instance to serve up - # -@@ -70,12 +75,12 @@ path = "/home/git/repositories" - # # Optional. Configure Gitaly to output JSON-formatted log messages to stdout. - # [logging] - # # Directory where Gitaly stores extra log files. --dir = "/home/git/gitlab/log" -+dir = "/vat/log/gitlab" - # # Log format. Either 'text' or 'json'. --# format = "json" -+format = "text" - # # Optional. Set log level to only log entries with that severity or above. - # # Valid values are, in order, 'debug', 'info', 'warn', 'error', 'fatal', and 'panic'. Defaults to 'info'. --# level = "warn" -+level = "warn" - # # Additionally, exceptions from the Go server can be reported to Sentry. Sentry DSN (Data Source Name) - # # for exception monitoring. - # sentry_dsn = "https://:@sentry.io/" -@@ -91,18 +96,18 @@ sentry_environment = "" - # # Custom Git hooks that are used to perform tasks based on changes performed in any repository. - [hooks] - # # Directory where custom Git hooks are installed. If left unset, no custom hooks are used. --custom_hooks_dir = "/home/git/custom_hooks" -+custom_hooks_dir = "/etc/gitlab/custom_hooks" - - # # Gitaly must connect to the GitLab application to perform access checks when a user performs a change. - [gitlab] - # # URL of the GitLab server. --url = "http+unix://%2Fhome%2Fgit%2Fgitlab%2Ftmp%2Fsockets%2Fgitlab-workhorse.socket" -+url = "http+unix://%2Frun%2Fgitlab%2Fworkhorse.socket" - # # 'relative_url_root' is only needed if a UNIX socket is used in 'url' and GitLab is configured to - # # use a relative path. For example, '/gitlab'. - # relative_url_root = '/' - # # Path of the file containing the secret token used to authenticate with GitLab. Use either 'secret_token' or 'secret' - # # but not both. --secret_file = "/home/git/gitlab-shell/.gitlab_shell_secret" -+secret_file = "/etc/gitlab/gitlab_shell_secret" - # # Secret token used to authenticate with GitLab. - # secret = "" - diff --git a/user/gitaly/gitaly.initd b/user/gitaly/gitaly.initd deleted file mode 100644 index 290c922..0000000 --- a/user/gitaly/gitaly.initd +++ /dev/null @@ -1,39 +0,0 @@ -#!/sbin/openrc-run - -name="Gitaly" -description="A Git RPC service for handling all the git calls made by GitLab" - -: ${gitaly_config:="/etc/gitlab/gitaly.toml"} -: ${gitaly_logfile:="/var/log/gitlab/gitaly.log"} - -command="/usr/bin/gitaly" -command_args="$gitaly_config" -command_background="yes" -command_user="git" - -output_log="$gitaly_logfile" -error_log="$gitaly_logfile" -pidfile="/run/gitaly.pid" -supervise_daemon_args="--env TZ=:/etc/localtime" -start_stop_daemon_args="$supervise_daemon_args" - -rc_ulimit="-n 15000" - -required_files="$gitaly_config" - -depend() { - use net -} - -start_pre() { - local socket_path=$(sed -En "s/^\s*socket_path\s*=\s*[\"']([^\"']+)[\"']/\1/p" "$gitaly_config") - local runtime_dir=$(sed -En "s/^\s*runtime_dir\s*=\s*[\"']([^\"']+)[\"']/\1/p" "$gitaly_config") - - if [ "$socket_path" ]; then - checkpath -q -d -m 755 -o $command_user "${socket_path%/*}" || return 1 - fi - if [ "$runtime_dir" ]; then - checkpath -q -d -m 750 -o $command_user "$runtime_dir" || return 1 - fi - checkpath -f -m 640 -o $command_user "$gitaly_logfile" -} From 07ce4b2776121377ae0c60fc00fbeb8937aea2cb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:33:29 -0400 Subject: [PATCH 413/738] user/ruby3.2-take: drop due migration to ilot iports --- user/ruby3.2-rake/APKBUILD | 58 -------------------------------------- 1 file changed, 58 deletions(-) delete mode 100644 user/ruby3.2-rake/APKBUILD diff --git a/user/ruby3.2-rake/APKBUILD b/user/ruby3.2-rake/APKBUILD deleted file mode 100644 index 6c34011..0000000 --- a/user/ruby3.2-rake/APKBUILD +++ /dev/null @@ -1,58 +0,0 @@ -# Contributor: Jakub Jirutka -# Maintainer: Jakub Jirutka -pkgname=ruby3.2-rake -_gemname=rake -# Keep version in sync with "Bundled gems" (https://stdgems.org) for the -# packaged Ruby version. -pkgver=13.0.6 -pkgrel=1 -pkgdesc="A Ruby task runner, inspired by make" -url="https://github.com/ruby/rake" -arch="noarch" -license="MIT" -depends="ruby3.2" -checkdepends="ruby3.2-minitest" -makedepends="ruby3.2-rdoc" -subpackages="$pkgname-doc" -source="https://github.com/ruby/rake/archive/v$pkgver/$_gemname-$pkgver.tar.gz" -builddir="$srcdir/$_gemname-$pkgver" - -build() { - gem build $_gemname.gemspec -} - -check() { - # FIXME: Fix test_signal_propagation_in_tests - ruby -Ilib -Itest -e "Dir.glob('./test/**/test_*.rb', &method(:require))" -- \ - --exclude=test_signal_propagation_in_tests -} - -package() { - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - - gem install \ - --local \ - --install-dir "$gemdir" \ - --bindir "$pkgdir/usr/bin" \ - --ignore-dependencies \ - --document ri \ - --verbose \ - $_gemname - - # Remove unnessecary files - cd "$gemdir" - rm -rf build_info cache extensions plugins - - cd gems/rake-* - rm -rf doc ./*.rdoc MIT-LICENSE -} - -doc() { - pkgdesc="$pkgdesc (ri docs)" - - amove "$(ruby -e 'puts Gem.default_dir')"/doc -} - -sha512sums=" -1b438be96d8cedaf70e961b0bbd2217692b0b5537b2e1d5f599158e7da3e300cf6ab0c5f0c52fea89be0beb675effbbf563d24e55c84fb673b4982013355e03c rake-13.0.6.tar.gz -" From 92b265a1d0f1055b993bea6a9ed4217d487085ed Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:34:05 -0400 Subject: [PATCH 414/738] user/py3-django-rest-framework: drop due to migration to ilot iports --- user/py3-django-rest-framework/APKBUILD | 59 ------------------------- 1 file changed, 59 deletions(-) delete mode 100644 user/py3-django-rest-framework/APKBUILD diff --git a/user/py3-django-rest-framework/APKBUILD b/user/py3-django-rest-framework/APKBUILD deleted file mode 100644 index 4a82cb3..0000000 --- a/user/py3-django-rest-framework/APKBUILD +++ /dev/null @@ -1,59 +0,0 @@ -# Contributor: Leonardo Arena -# Contributor: Justin Berthault -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-django-rest-framework -_pkgname=django-rest-framework -pkgver=3.14.0 -pkgrel=0 -pkgdesc="Web APIs for Django" -url="https://github.com/encode/django-rest-framework" -arch="noarch" -license="Custom" -depends=" - py3-django - py3-tz -" -makedepends=" - py3-setuptools - py3-gpep517 - py3-wheel -" -checkdepends=" - py3-pytest-django - py3-pytest-cov - py3-core-api - py3-jinja2 - py3-uritemplate - py3-django-guardian - py3-psycopg2 - py3-markdown - py3-yaml - py3-inflection -" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/encode/$_pkgname/archive/$pkgver.tar.gz" -options="!check" # Failing tests -builddir="$srcdir"/$_pkgname-$pkgver - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl - # test_urlpatterns: AssertionError: assert [] is not [] - # test_markdown: rather hard to decipher assertion error - .testenv/bin/python3 -m pytest -v -k 'not test_urlpatterns and not test_markdown' -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -c1012c656b427e0318b2056e2f984ddc75a5b4e85f375c76fba165ad06e285848eee1bc6dc76c097daec57d780efb2551110199d62ce636a03951aec13ab4013 py3-django-rest-framework-3.14.0.tar.gz -" From 14348459f1971c0efda811bc76046003ed807c9e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 9 Aug 2024 22:43:53 -0400 Subject: [PATCH 415/738] README: update for codeberg migration --- README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ae24788..ae3942b 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,18 @@ -# user-aports -Upstream: https://lab.ilot.io/ayakael/user-aports +# ayports +Upstream: https://codeberg.org/ayakael/ayports ## Description This repository contains aports that are not yet merged in the official Alpine Linux repository or don’t adhere to Alpine polices. Packages are automatically -built using GitLab CI on my own GitLab instance. Once built, they are deployed -to a git-lfs repository, making them available to apk. +built using CI. Once built, they are deployed to a git-lfs repository, making +them available to apk. Branches are matched to Alpine releases. - ## Repositories -You can browse all the repositories at https://lab.ilot.io/ayakael/repo-apk. +You can browse all the repositories at https://codeberg.org/ayakael/ayports Affixed to each repository description is the appropriate link for use in `/etc/apk/repositories`. @@ -52,10 +51,10 @@ they will work for you. ## Contribution & bug reports If you wish to contribute to this aports collection, or wish to report a bug, -you can do so on Alpine's GitLab instance here: -https://gitlab.alpinelinux.org/ayakael/user-aports +you can do so on Codeberg here: +https://codeberg.org/ayakael/ayports/issues -For packages that are in testing/community, bug reports and merge requests +For packages that are in backports, bug reports and merge requests should be done on Alpine's aports repo instance: https://gitlab.alpinelinux.org/alpine/aports From e0a5952518bb8d7916db2d63bb112a4c63070e60 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 10 Aug 2024 11:31:00 -0400 Subject: [PATCH 416/738] Update README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ae3942b..9c22f58 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ Affixed to each repository description is the appropriate link for use in #### Backports ``` -https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/backports +https://ayakael.net/forge/repo-apk/media/branch/edge/backports ``` Aports from the official Alpine repositories backported from edge. #### User ``` -https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/user +https://ayakael.net/forge/repo-apk/media/branch/edge/user ``` Aports that have yet to be (or may never be) upstreamed to the official @@ -37,7 +37,7 @@ Add security key of the repo-apk repository to your /etc/apk/keys: ```shell cd /etc/apk/keys -wget https://lab.ilot.io/ayakael/repo-apk/-/raw/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub +wget https://ayakael.net/forge/repo-apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub ``` Add repositories that you want to use (see above) to `/etc/apk/repositories`. From 3a9141372bc448fb129f054467aea67597a490d9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 10 Aug 2024 10:33:26 -0400 Subject: [PATCH 417/738] user/py3-validators: bump --- user/py3-validators/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/py3-validators/APKBUILD b/user/py3-validators/APKBUILD index f14a156..973c198 100644 --- a/user/py3-validators/APKBUILD +++ b/user/py3-validators/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: pkgname=py3-validators pkgver=0.20.0 -pkgrel=1 +pkgrel=2 pkgdesc="Python3 Data Validation for Humans" url="https://github.com/python-validators/validators" arch="noarch" From f124e1fd95f47dd2f3127950ca129cf990f39205 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 10 Aug 2024 10:43:42 -0400 Subject: [PATCH 418/738] gitab-ci: use git-annex instead of git-lfs --- .gitlab-ci.yml | 2 +- .gitlab/bin/push.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dd8afae..35d0704 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -99,7 +99,7 @@ push: stage: deploy script: - | - sudo apk add abuild git-lfs findutils + sudo apk add abuild git-annex findutils export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin" push.sh rules: diff --git a/.gitlab/bin/push.sh b/.gitlab/bin/push.sh index e93101a..0a11b0b 100755 --- a/.gitlab/bin/push.sh +++ b/.gitlab/bin/push.sh @@ -28,9 +28,11 @@ if [ -d $HOME/repo-apk ]; then git -C $HOME/repo-apk checkout $BASEBRANCH git -C $HOME/repo-apk pull --rebase else - git clone git@lab.ilot.io:ayakael/repo-apk -b $BASEBRANCH $HOME/repo-apk + git clone forgejo@ayakael.net:forge/repo-apk.git -b $BASEBRANCH $HOME/repo-apk fi +git -C $HOME/repo-apk annex sync --content + for i in $(find packages -type f -name "*.apk"); do install -vDm644 $i ${i/packages/$HOME\/repo-apk} done @@ -53,4 +55,4 @@ done git -C $HOME/repo-apk add . git -C $HOME/repo-apk commit -m "Update from $CI_MERGE_REQUEST_IID - $CI_MERGE_REQUEST_TITLE" -git -C $HOME/repo-apk push +git -C $HOME/repo-apk annex sync --content From 9a81361936ba4e675841d4d69f109a1c03e2f3c2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 10 Aug 2024 16:34:15 -0400 Subject: [PATCH 419/738] README.md: new repo location --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9c22f58..31d9454 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ Affixed to each repository description is the appropriate link for use in #### Backports ``` -https://ayakael.net/forge/repo-apk/media/branch/edge/backports +https://ayakael.net/pkgs/apk/media/branch/edge/backports ``` Aports from the official Alpine repositories backported from edge. #### User ``` -https://ayakael.net/forge/repo-apk/media/branch/edge/user +https://ayakael.net/pkgs/apk/media/branch/edge/user ``` Aports that have yet to be (or may never be) upstreamed to the official @@ -33,11 +33,11 @@ aports. ## How to use -Add security key of the repo-apk repository to your /etc/apk/keys: +Add security key of the apk repository to your /etc/apk/keys: ```shell cd /etc/apk/keys -wget https://ayakael.net/forge/repo-apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub +wget https://ayakael.net/pkgs/apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub ``` Add repositories that you want to use (see above) to `/etc/apk/repositories`. From 260b8c3da6366fe2938d3b1fffd5aa9298ae4536 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 11 Aug 2024 21:13:36 -0400 Subject: [PATCH 420/738] gitlab-ci: drop in favor of forgejo actions --- .gitlab-ci.yml | 109 ------ .gitlab/bin/APKBUILD_SHIM | 111 ------ .gitlab/bin/apkbuild-shellcheck | 16 - .gitlab/bin/build-rootfs.sh | 556 ----------------------------- .gitlab/bin/build.sh | 283 --------------- .gitlab/bin/changed-aports | 20 -- .gitlab/bin/functions.sh | 74 ---- .gitlab/bin/lint | 96 ----- .gitlab/bin/push.sh | 58 --- .gitlab/patches/abuild-cross.patch | 17 - 10 files changed, 1340 deletions(-) delete mode 100644 .gitlab-ci.yml delete mode 100755 .gitlab/bin/APKBUILD_SHIM delete mode 100755 .gitlab/bin/apkbuild-shellcheck delete mode 100755 .gitlab/bin/build-rootfs.sh delete mode 100755 .gitlab/bin/build.sh delete mode 100755 .gitlab/bin/changed-aports delete mode 100755 .gitlab/bin/functions.sh delete mode 100755 .gitlab/bin/lint delete mode 100755 .gitlab/bin/push.sh delete mode 100644 .gitlab/patches/abuild-cross.patch diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml deleted file mode 100644 index 35d0704..0000000 --- a/.gitlab-ci.yml +++ /dev/null @@ -1,109 +0,0 @@ -stages: - - verify - - build - - deploy - -variables: - GIT_STRATEGY: clone - GIT_DEPTH: "500" - -lint: - stage: verify - interruptible: true - script: - - | - sudo apk add shellcheck atools sudo abuild - export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin" - lint - allow_failure: true - only: - - merge_requests - tags: - - apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-x86_64 - -.build: - stage: build - interruptible: true - script: - - | - sudo apk add alpine-sdk lua-aports sudo - sudo addgroup $USER abuild - export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin" - sudo -Eu $USER build.sh - artifacts: - paths: - - packages/ - - keys/ - - logs/ - expire_in: 7 days - when: always - only: - - merge_requests - -.cross: - stage: build - interruptible: true - script: - - | - sudo apk add alpine-sdk lua-aports sudo gzip xz qemu-$CI_QEMU_TARGET_ARCH - sudo addgroup $USER abuild - export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin" - build-rootfs.sh alpine${CI_MERGE_REQUEST_TARGET_BRANCH_NAME/v} $CI_ALPINE_TARGET_ARCH --rootfsdir $HOME/sysroot-$CI_ALPINE_TARGET_ARCH - cp /etc/apk/repositories $HOME/sysroot-$CI_ALPINE_TARGET_ARCH/etc/apk/. - sudo -Eu $USER CHOST=$CI_TARGET_ALPINE_ARCH build.sh - artifacts: - paths: - - packages/ - - keys/ - - logs/ - expire_in: 7 days - when: always - only: - - merge_requests - -build-x86_64: - extends: .build - when: always - tags: - - apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-x86_64 - -build-aarch64: - extends: .build - when: always - tags: - - apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-aarch64 - -build-ppc64le: - extends: .build - when: manual - tags: - - apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-ppc64le - -build-s390x: - extends: .build - when: manual - tags: - - apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-s390x - -build-armv7: - extends: .cross - when: manual - tags: - - apk-$CI_MERGE_REQUEST_TARGET_BRANCH_NAME-x86_64 - variables: - CI_ALPINE_TARGET_ARCH: armv7 - CI_QEMU_TARGET_ARCH: arm - -push: - interruptible: true - stage: deploy - script: - - | - sudo apk add abuild git-annex findutils - export PATH="$PATH:$CI_PROJECT_DIR/.gitlab/bin" - push.sh - rules: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - when: manual - tags: - - repo diff --git a/.gitlab/bin/APKBUILD_SHIM b/.gitlab/bin/APKBUILD_SHIM deleted file mode 100755 index 76577ff..0000000 --- a/.gitlab/bin/APKBUILD_SHIM +++ /dev/null @@ -1,111 +0,0 @@ -#!/bin/sh - -set -e - -arch= -builddir= -checkdepends= -depends= -depends_dev= -depends_doc= -depends_libs= -depends_openrc= -depends_static= -install= -install_if= -langdir= -ldpath= -license= -makedepends= -makedepends_build= -makedepends_host= -md5sums= -options= -patch_args= -pkgbasedir= -pkgdesc= -pkgdir= -pkgname= -pkgrel= -pkgver= -pkggroups= -pkgusers= -provides= -provider_priority= -replaces= -sha256sums= -sha512sums= -sonameprefix= -source= -srcdir= -startdir= -subpackages= -subpkgdir= -subpkgname= -triggers= -url= - -# abuild.conf - -CFLAGS= -CXXFLAGS= -CPPFLAGS= -LDFLAGS= -JOBS= -MAKEFLAGS= -CMAKE_CROSSOPTS= - -. ./APKBUILD - -: "$arch" -: "$builddir" -: "$checkdepends" -: "$depends" -: "$depends_dev" -: "$depends_doc" -: "$depends_libs" -: "$depends_openrc" -: "$depends_static" -: "$install" -: "$install_if" -: "$langdir" -: "$ldpath" -: "$license" -: "$makedepends" -: "$makedepends_build" -: "$makedepends_host" -: "$md5sums" -: "$options" -: "$patch_args" -: "$pkgbasedir" -: "$pkgdesc" -: "$pkgdir" -: "$pkgname" -: "$pkgrel" -: "$pkgver" -: "$pkggroups" -: "$pkgusers" -: "$provides" -: "$provider_priority" -: "$replaces" -: "$sha256sums" -: "$sha512sums" -: "$sonameprefix" -: "$source" -: "$srcdir" -: "$startdir" -: "$subpackages" -: "$subpkgdir" -: "$subpkgname" -: "$triggers" -: "$url" - -# abuild.conf - -: "$CFLAGS" -: "$CXXFLAGS" -: "$CPPFLAGS" -: "$LDFLAGS" -: "$JOBS" -: "$MAKEFLAGS" -: "$CMAKE_CROSSOPTS" diff --git a/.gitlab/bin/apkbuild-shellcheck b/.gitlab/bin/apkbuild-shellcheck deleted file mode 100755 index 3126684..0000000 --- a/.gitlab/bin/apkbuild-shellcheck +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh - -shellcheck -s ash \ - -e SC3043 \ - -e SC3057 \ - -e SC3060 \ - -e SC2016 \ - -e SC2086 \ - -e SC2169 \ - -e SC2155 \ - -e SC2100 \ - -e SC2209 \ - -e SC2030 \ - -e SC2031 \ - -e SC1090 \ - -xa $CI_PROJECT_DIR/.gitlab/bin/APKBUILD_SHIM diff --git a/.gitlab/bin/build-rootfs.sh b/.gitlab/bin/build-rootfs.sh deleted file mode 100755 index 44c4372..0000000 --- a/.gitlab/bin/build-rootfs.sh +++ /dev/null @@ -1,556 +0,0 @@ -#!/usr/bin/env bash -# Availabl here: https://lab.ilot.io/dotnet/arcade/-/blob/7f6d9796cc7f594772f798358dbdd8c69b6a97af/eng/common/cross/build-rootfs.sh -# Only modification: qemu-$arch-static becomes qemu-$arch - -set -e - -usage() -{ - echo "Usage: $0 [BuildArch] [CodeName] [lldbx.y] [llvmx[.y]] [--skipunmount] --rootfsdir ]" - echo "BuildArch can be: arm(default), arm64, armel, armv6, ppc64le, riscv64, s390x, x64, x86" - echo "CodeName - optional, Code name for Linux, can be: xenial(default), zesty, bionic, alpine" - echo " for alpine can be specified with version: alpineX.YY or alpineedge" - echo " for FreeBSD can be: freebsd12, freebsd13" - echo " for illumos can be: illumos" - echo " for Haiku can be: haiku." - echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine and FreeBSD" - echo "llvmx[.y] - optional, LLVM version for LLVM related packages." - echo "--skipunmount - optional, will skip the unmount of rootfs folder." - echo "--use-mirror - optional, use mirror URL to fetch resources, when available." - echo "--jobs N - optional, restrict to N jobs." - exit 1 -} - -__CodeName=xenial -__CrossDir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) -__BuildArch=arm -__AlpineArch=armv7 -__FreeBSDArch=arm -__FreeBSDMachineArch=armv7 -__IllumosArch=arm7 -__QEMUArch=arm -__UbuntuArch=armhf -__UbuntuRepo="http://ports.ubuntu.com/" -__LLDB_Package="liblldb-3.9-dev" -__SkipUnmount=0 - -# base development support -__UbuntuPackages="build-essential" - -__AlpinePackages="alpine-base" -__AlpinePackages+=" build-base" - -# symlinks fixer -__UbuntuPackages+=" symlinks" - -# runtime dependencies -__UbuntuPackages+=" libicu-dev" -__UbuntuPackages+=" liblttng-ust-dev" -__UbuntuPackages+=" libunwind8-dev" -__UbuntuPackages+=" libnuma-dev" - -# runtime libraries' dependencies -__UbuntuPackages+=" libcurl4-openssl-dev" -__UbuntuPackages+=" libkrb5-dev" -__UbuntuPackages+=" libssl-dev" -__UbuntuPackages+=" zlib1g-dev" - -__FreeBSDBase="12.3-RELEASE" -__FreeBSDPkg="1.17.0" -__FreeBSDABI="12" -__FreeBSDPackages="libunwind" -__FreeBSDPackages+=" icu" -__FreeBSDPackages+=" libinotify" -__FreeBSDPackages+=" openssl" -__FreeBSDPackages+=" krb5" -__FreeBSDPackages+=" terminfo-db" - -__IllumosPackages="icu" -__IllumosPackages+=" mit-krb5" -__IllumosPackages+=" openssl" -__IllumosPackages+=" zlib" - -__HaikuPackages="gmp" -__HaikuPackages+=" gmp_devel" -__HaikuPackages+=" krb5" -__HaikuPackages+=" krb5_devel" -__HaikuPackages+=" libiconv" -__HaikuPackages+=" libiconv_devel" -__HaikuPackages+=" llvm12_libunwind" -__HaikuPackages+=" llvm12_libunwind_devel" -__HaikuPackages+=" mpfr" -__HaikuPackages+=" mpfr_devel" - -# ML.NET dependencies -__UbuntuPackages+=" libomp5" -__UbuntuPackages+=" libomp-dev" - -__Keyring= -__UseMirror=0 - -__UnprocessedBuildArgs= -while :; do - if [[ "$#" -le 0 ]]; then - break - fi - - lowerI="$(echo "$1" | tr "[:upper:]" "[:lower:]")" - case $lowerI in - -\?|-h|--help) - usage - exit 1 - ;; - arm) - __BuildArch=arm - __UbuntuArch=armhf - __AlpineArch=armv7 - __QEMUArch=arm - ;; - arm64) - __BuildArch=arm64 - __UbuntuArch=arm64 - __AlpineArch=aarch64 - __QEMUArch=aarch64 - __FreeBSDArch=arm64 - __FreeBSDMachineArch=aarch64 - ;; - armel) - __BuildArch=armel - __UbuntuArch=armel - __UbuntuRepo="http://ftp.debian.org/debian/" - __CodeName=jessie - ;; - armv6) - __BuildArch=armv6 - __UbuntuArch=armhf - __QEMUArch=arm - __UbuntuRepo="http://raspbian.raspberrypi.org/raspbian/" - __CodeName=buster - __LLDB_Package="liblldb-6.0-dev" - - if [[ -e "/usr/share/keyrings/raspbian-archive-keyring.gpg" ]]; then - __Keyring="--keyring /usr/share/keyrings/raspbian-archive-keyring.gpg" - fi - ;; - riscv64) - __BuildArch=riscv64 - __AlpineArch=riscv64 - __QEMUArch=riscv64 - __UbuntuArch=riscv64 - __UbuntuRepo="http://deb.debian.org/debian-ports" - __UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}" - unset __LLDB_Package - - if [[ -e "/usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then - __Keyring="--keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring" - fi - ;; - ppc64le) - __BuildArch=ppc64le - __AlpineArch=ppc64le - __QEMUArch=ppc64le - __UbuntuArch=ppc64el - __UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/" - __UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}" - __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" - __UbuntuPackages="${__UbuntuPackages// libomp5/}" - unset __LLDB_Package - ;; - s390x) - __BuildArch=s390x - __AlpineArch=s390x - __QEMUArch=s390x - __UbuntuArch=s390x - __UbuntuRepo="http://ports.ubuntu.com/ubuntu-ports/" - __UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}" - __UbuntuPackages="${__UbuntuPackages// libomp-dev/}" - __UbuntuPackages="${__UbuntuPackages// libomp5/}" - unset __LLDB_Package - ;; - x64) - __BuildArch=x64 - __AlpineArch=x86_64 - __QEMUArch=x86_64 - __UbuntuArch=amd64 - __FreeBSDArch=amd64 - __FreeBSDMachineArch=amd64 - __illumosArch=x86_64 - __UbuntuRepo= - ;; - x86) - __BuildArch=x86 - __AlpineArch=i386 - __QEMUArch=i386 - __UbuntuArch=i386 - __AlpineArch=x86 - __UbuntuRepo="http://archive.ubuntu.com/ubuntu/" - ;; - lldb*) - version="${lowerI/lldb/}" - parts=(${version//./ }) - - # for versions > 6.0, lldb has dropped the minor version - if [[ "${parts[0]}" -gt 6 ]]; then - version="${parts[0]}" - fi - - __LLDB_Package="liblldb-${version}-dev" - ;; - no-lldb) - unset __LLDB_Package - ;; - llvm*) - version="${lowerI/llvm/}" - parts=(${version//./ }) - __LLVM_MajorVersion="${parts[0]}" - __LLVM_MinorVersion="${parts[1]}" - - # for versions > 6.0, llvm has dropped the minor version - if [[ -z "$__LLVM_MinorVersion" && "$__LLVM_MajorVersion" -le 6 ]]; then - __LLVM_MinorVersion=0; - fi - ;; - xenial) # Ubuntu 16.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=xenial - fi - ;; - zesty) # Ubuntu 17.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=zesty - fi - ;; - bionic) # Ubuntu 18.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=bionic - fi - ;; - focal) # Ubuntu 20.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=focal - fi - ;; - jammy) # Ubuntu 22.04 - if [[ "$__CodeName" != "jessie" ]]; then - __CodeName=jammy - fi - ;; - jessie) # Debian 8 - __CodeName=jessie - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" - fi - ;; - stretch) # Debian 9 - __CodeName=stretch - __LLDB_Package="liblldb-6.0-dev" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" - fi - ;; - buster) # Debian 10 - __CodeName=buster - __LLDB_Package="liblldb-6.0-dev" - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" - fi - ;; - bullseye) # Debian 11 - __CodeName=bullseye - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" - fi - ;; - sid) # Debian sid - __CodeName=sid - - if [[ -z "$__UbuntuRepo" ]]; then - __UbuntuRepo="http://ftp.debian.org/debian/" - fi - ;; - tizen) - __CodeName= - __UbuntuRepo= - __Tizen=tizen - ;; - alpine*) - __CodeName=alpine - __UbuntuRepo= - version="${lowerI/alpine/}" - - if [[ "$version" == "edge" ]]; then - __AlpineVersion=edge - else - parts=(${version//./ }) - __AlpineMajorVersion="${parts[0]}" - __AlpineMinoVersion="${parts[1]}" - __AlpineVersion="$__AlpineMajorVersion.$__AlpineMinoVersion" - fi - ;; - freebsd12) - __CodeName=freebsd - __SkipUnmount=1 - ;; - freebsd13) - __CodeName=freebsd - __FreeBSDBase="13.0-RELEASE" - __FreeBSDABI="13" - __SkipUnmount=1 - ;; - illumos) - __CodeName=illumos - __SkipUnmount=1 - ;; - haiku) - __CodeName=haiku - __BuildArch=x64 - __SkipUnmount=1 - ;; - --skipunmount) - __SkipUnmount=1 - ;; - --rootfsdir|-rootfsdir) - shift - __RootfsDir="$1" - ;; - --use-mirror) - __UseMirror=1 - ;; - --use-jobs) - shift - MAXJOBS=$1 - ;; - *) - __UnprocessedBuildArgs="$__UnprocessedBuildArgs $1" - ;; - esac - - shift -done - -if [[ "$__BuildArch" == "armel" ]]; then - __LLDB_Package="lldb-3.5-dev" -fi - -__UbuntuPackages+=" ${__LLDB_Package:-}" - -if [[ -n "$__LLVM_MajorVersion" ]]; then - __UbuntuPackages+=" libclang-common-${__LLVM_MajorVersion}${__LLVM_MinorVersion:+.$__LLVM_MinorVersion}-dev" -fi - -if [[ -z "$__RootfsDir" && -n "$ROOTFS_DIR" ]]; then - __RootfsDir="$ROOTFS_DIR" -fi - -if [[ -z "$__RootfsDir" ]]; then - __RootfsDir="$__CrossDir/../../../.tools/rootfs/$__BuildArch" -fi - -if [[ -d "$__RootfsDir" ]]; then - if [[ "$__SkipUnmount" == "0" ]]; then - umount "$__RootfsDir"/* || true - fi - rm -rf "$__RootfsDir" -fi - -mkdir -p "$__RootfsDir" -__RootfsDir="$( cd "$__RootfsDir" && pwd )" - -if [[ "$__CodeName" == "alpine" ]]; then - __ApkToolsVersion=2.12.11 - __ApkToolsDir="$(mktemp -d)" - - wget "https://gitlab.alpinelinux.org/api/v4/projects/5/packages/generic//v$__ApkToolsVersion/x86_64/apk.static" -P "$__ApkToolsDir" - chmod +x "$__ApkToolsDir/apk.static" - - mkdir -p "$__RootfsDir"/usr/bin - cp -v "/usr/bin/qemu-$__QEMUArch" "$__RootfsDir/usr/bin" - - if [[ "$__AlpineVersion" == "edge" ]]; then - version=edge - else - version="v$__AlpineVersion" - fi - - # initialize DB - "$__ApkToolsDir/apk.static" \ - -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ - -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U --allow-untrusted --root "$__RootfsDir" --arch "$__AlpineArch" --initdb add - - if [[ "$__AlpineLlvmLibsLookup" == 1 ]]; then - __AlpinePackages+=" $("$__ApkToolsDir/apk.static" \ - -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ - -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U --allow-untrusted --root "$__RootfsDir" --arch "$__AlpineArch" \ - search 'llvm*-libs' | sort | tail -1 | sed 's/-[^-]*//2g')" - fi - - # install all packages in one go - "$__ApkToolsDir/apk.static" \ - -X "http://dl-cdn.alpinelinux.org/alpine/$version/main" \ - -X "http://dl-cdn.alpinelinux.org/alpine/$version/community" \ - -U --allow-untrusted --no-scripts --root "$__RootfsDir" --arch "$__AlpineArch" \ - add $__AlpinePackages - - rm -r "$__ApkToolsDir" -elif [[ "$__CodeName" == "freebsd" ]]; then - mkdir -p "$__RootfsDir"/usr/local/etc - JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"} - wget -O - "https://download.freebsd.org/ftp/releases/${__FreeBSDArch}/${__FreeBSDMachineArch}/${__FreeBSDBase}/base.txz" | tar -C "$__RootfsDir" -Jxf - ./lib ./usr/lib ./usr/libdata ./usr/include ./usr/share/keys ./etc ./bin/freebsd-version - echo "ABI = \"FreeBSD:${__FreeBSDABI}:${__FreeBSDMachineArch}\"; FINGERPRINTS = \"${__RootfsDir}/usr/share/keys\"; REPOS_DIR = [\"${__RootfsDir}/etc/pkg\"]; REPO_AUTOUPDATE = NO; RUN_SCRIPTS = NO;" > "${__RootfsDir}"/usr/local/etc/pkg.conf - echo "FreeBSD: { url: \"pkg+http://pkg.FreeBSD.org/\${ABI}/quarterly\", mirror_type: \"srv\", signature_type: \"fingerprints\", fingerprints: \"${__RootfsDir}/usr/share/keys/pkg\", enabled: yes }" > "${__RootfsDir}"/etc/pkg/FreeBSD.conf - mkdir -p "$__RootfsDir"/tmp - # get and build package manager - wget -O - "https://github.com/freebsd/pkg/archive/${__FreeBSDPkg}.tar.gz" | tar -C "$__RootfsDir"/tmp -zxf - - cd "$__RootfsDir/tmp/pkg-${__FreeBSDPkg}" - # needed for install to succeed - mkdir -p "$__RootfsDir"/host/etc - ./autogen.sh && ./configure --prefix="$__RootfsDir"/host && make -j "$JOBS" && make install - rm -rf "$__RootfsDir/tmp/pkg-${__FreeBSDPkg}" - # install packages we need. - INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf update - INSTALL_AS_USER=$(whoami) "$__RootfsDir"/host/sbin/pkg -r "$__RootfsDir" -C "$__RootfsDir"/usr/local/etc/pkg.conf install --yes $__FreeBSDPackages -elif [[ "$__CodeName" == "illumos" ]]; then - mkdir "$__RootfsDir/tmp" - pushd "$__RootfsDir/tmp" - JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"} - echo "Downloading sysroot." - wget -O - https://github.com/illumos/sysroot/releases/download/20181213-de6af22ae73b-v1/illumos-sysroot-i386-20181213-de6af22ae73b-v1.tar.gz | tar -C "$__RootfsDir" -xzf - - echo "Building binutils. Please wait.." - wget -O - https://ftp.gnu.org/gnu/binutils/binutils-2.33.1.tar.bz2 | tar -xjf - - mkdir build-binutils && cd build-binutils - ../binutils-2.33.1/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" - make -j "$JOBS" && make install && cd .. - echo "Building gcc. Please wait.." - wget -O - https://ftp.gnu.org/gnu/gcc/gcc-8.4.0/gcc-8.4.0.tar.xz | tar -xJf - - CFLAGS="-fPIC" - CXXFLAGS="-fPIC" - CXXFLAGS_FOR_TARGET="-fPIC" - CFLAGS_FOR_TARGET="-fPIC" - export CFLAGS CXXFLAGS CXXFLAGS_FOR_TARGET CFLAGS_FOR_TARGET - mkdir build-gcc && cd build-gcc - ../gcc-8.4.0/configure --prefix="$__RootfsDir" --target="${__illumosArch}-sun-solaris2.10" --program-prefix="${__illumosArch}-illumos-" --with-sysroot="$__RootfsDir" --with-gnu-as \ - --with-gnu-ld --disable-nls --disable-libgomp --disable-libquadmath --disable-libssp --disable-libvtv --disable-libcilkrts --disable-libada --disable-libsanitizer \ - --disable-libquadmath-support --disable-shared --enable-tls - make -j "$JOBS" && make install && cd .. - BaseUrl=https://pkgsrc.smartos.org - if [[ "$__UseMirror" == 1 ]]; then - BaseUrl=https://pkgsrc.smartos.skylime.net - fi - BaseUrl="$BaseUrl/packages/SmartOS/trunk/${__illumosArch}/All" - echo "Downloading manifest" - wget "$BaseUrl" - echo "Downloading dependencies." - read -ra array <<<"$__IllumosPackages" - for package in "${array[@]}"; do - echo "Installing '$package'" - # find last occurrence of package in listing and extract its name - package="$(sed -En '/.*href="('"$package"'-[0-9].*).tgz".*/h;$!d;g;s//\1/p' All)" - echo "Resolved name '$package'" - wget "$BaseUrl"/"$package".tgz - ar -x "$package".tgz - tar --skip-old-files -xzf "$package".tmp.tg* -C "$__RootfsDir" 2>/dev/null - done - echo "Cleaning up temporary files." - popd - rm -rf "$__RootfsDir"/{tmp,+*} - mkdir -p "$__RootfsDir"/usr/include/net - mkdir -p "$__RootfsDir"/usr/include/netpacket - wget -P "$__RootfsDir"/usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/bpf.h - wget -P "$__RootfsDir"/usr/include/net https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/io/bpf/net/dlt.h - wget -P "$__RootfsDir"/usr/include/netpacket https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/inet/sockmods/netpacket/packet.h - wget -P "$__RootfsDir"/usr/include/sys https://raw.githubusercontent.com/illumos/illumos-gate/master/usr/src/uts/common/sys/sdt.h -elif [[ "$__CodeName" == "haiku" ]]; then - JOBS=${MAXJOBS:="$(getconf _NPROCESSORS_ONLN)"} - - echo "Building Haiku sysroot for x86_64" - mkdir -p "$__RootfsDir/tmp" - cd "$__RootfsDir/tmp" - git clone -b hrev56235 https://review.haiku-os.org/haiku - git clone -b btrev43195 https://review.haiku-os.org/buildtools - cd "$__RootfsDir/tmp/buildtools" && git checkout 7487388f5110021d400b9f3b88e1a7f310dc066d - - # Fetch some unmerged patches - cd "$__RootfsDir/tmp/haiku" - ## Add development build profile (slimmer than nightly) - git fetch origin refs/changes/64/4164/1 && git -c commit.gpgsign=false cherry-pick FETCH_HEAD - - # Build jam - cd "$__RootfsDir/tmp/buildtools/jam" - make - - # Configure cross tools - echo "Building cross-compiler" - mkdir -p "$__RootfsDir/generated" - cd "$__RootfsDir/generated" - "$__RootfsDir/tmp/haiku/configure" -j"$JOBS" --sysroot "$__RootfsDir" --cross-tools-source "$__RootfsDir/tmp/buildtools" --build-cross-tools x86_64 - - # Build Haiku packages - echo "Building Haiku" - echo 'HAIKU_BUILD_PROFILE = "development-raw" ;' > UserProfileConfig - "$__RootfsDir/tmp/buildtools/jam/jam0" -j"$JOBS" -q 'package' 'Haiku' - - BaseUrl="https://depot.haiku-os.org/__api/v2/pkg/get-pkg" - - # Download additional packages - echo "Downloading additional required packages" - read -ra array <<<"$__HaikuPackages" - for package in "${array[@]}"; do - echo "Downloading $package..." - # API documented here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L60 - # The schema here: https://github.com/haiku/haikudepotserver/blob/master/haikudepotserver-api2/src/main/resources/api2/pkg.yaml#L598 - hpkgDownloadUrl="$(wget -qO- --post-data='{"name":"'"$package"'","repositorySourceCode":"haikuports_x86_64","versionType":"LATEST","naturalLanguageCode":"en"}' \ - --header='Content-Type:application/json' "$BaseUrl" | jq -r '.result.versions[].hpkgDownloadURL')" - wget -P "$__RootfsDir/generated/download" "$hpkgDownloadUrl" - done - - # Setup the sysroot - echo "Setting up sysroot and extracting needed packages" - mkdir -p "$__RootfsDir/boot/system" - for file in "$__RootfsDir/generated/objects/haiku/x86_64/packaging/packages/"*.hpkg; do - "$__RootfsDir/generated/objects/linux/x86_64/release/tools/package/package" extract -C "$__RootfsDir/boot/system" "$file" - done - for file in "$__RootfsDir/generated/download/"*.hpkg; do - "$__RootfsDir/generated/objects/linux/x86_64/release/tools/package/package" extract -C "$__RootfsDir/boot/system" "$file" - done - - # Cleaning up temporary files - echo "Cleaning up temporary files" - rm -rf "$__RootfsDir/tmp" - for name in "$__RootfsDir/generated/"*; do - if [[ "$name" =~ "cross-tools-" ]]; then - : # Keep the cross-compiler - else - rm -rf "$name" - fi - done -elif [[ -n "$__CodeName" ]]; then - qemu-debootstrap $__Keyring --arch "$__UbuntuArch" "$__CodeName" "$__RootfsDir" "$__UbuntuRepo" - cp "$__CrossDir/$__BuildArch/sources.list.$__CodeName" "$__RootfsDir/etc/apt/sources.list" - chroot "$__RootfsDir" apt-get update - chroot "$__RootfsDir" apt-get -f -y install - chroot "$__RootfsDir" apt-get -y install $__UbuntuPackages - chroot "$__RootfsDir" symlinks -cr /usr - chroot "$__RootfsDir" apt-get clean - - if [[ "$__SkipUnmount" == "0" ]]; then - umount "$__RootfsDir"/* || true - fi - - if [[ "$__BuildArch" == "armel" && "$__CodeName" == "jessie" ]]; then - pushd "$__RootfsDir" - patch -p1 < "$__CrossDir/$__BuildArch/armel.jessie.patch" - popd - fi -elif [[ "$__Tizen" == "tizen" ]]; then - ROOTFS_DIR="$__RootfsDir" "$__CrossDir/tizen-build-rootfs.sh" "$__BuildArch" -else - echo "Unsupported target platform." - usage; - exit 1 -fi diff --git a/.gitlab/bin/build.sh b/.gitlab/bin/build.sh deleted file mode 100755 index 286f965..0000000 --- a/.gitlab/bin/build.sh +++ /dev/null @@ -1,283 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC3043 - -. $CI_PROJECT_DIR/.gitlab/bin/functions.sh - -# shellcheck disable=SC3040 -set -eu -o pipefail - -readonly APORTSDIR=$CI_PROJECT_DIR -readonly REPOS="cross backports user testing community" -readonly ALPINE_REPOS="main community" -readonly ARCH=$(apk --print-arch) -# gitlab variables -readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME - -: "${REPODEST:=$HOME/packages}" -: "${MIRROR:=https://lab.ilot.io/ayakael/repo-apk/-/raw}" -: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" -: "${MAX_ARTIFACT_SIZE:=300000000}" #300M -: "${CI_DEBUG_BUILD:=}" - -: "${CI_ALPINE_BUILD_OFFSET:=0}" -: "${CI_ALPINE_BUILD_LIMIT:=9999}" -: "${CI_ALPINE_TARGET_ARCH:=$(uname -m)}" - -msg() { - local color=${2:-green} - case "$color" in - red) color="31";; - green) color="32";; - yellow) color="33";; - blue) color="34";; - *) color="32";; - esac - printf "\033[1;%sm>>>\033[1;0m %s\n" "$color" "$1" | xargs >&2 -} - -verbose() { - echo "> " "$@" - # shellcheck disable=SC2068 - $@ -} - -debugging() { - [ -n "$CI_DEBUG_BUILD" ] -} - -debug() { - if debugging; then - verbose "$@" - fi -} - -die() { - msg "$1" red - exit 1 -} - -capture_stderr() { - "$@" 2>&1 -} - -report() { - report=$1 - - reportsdir=$APORTSDIR/logs/ - mkdir -p "$reportsdir" - - tee -a "$reportsdir/$report.log" -} - -get_release() { - case $BASEBRANCH in - v*) echo "${BASEBRANCH%-*}";; - edge) echo edge;; - *) die "Branch \"$BASEBRANCH\" not supported!" - esac -} - -build_aport() { - local repo="$1" aport="$2" - cd "$APORTSDIR/$repo/$aport" - export CHOST=$CI_ALPINE_TARGET_ARCH - if abuild -r 2>&1 | report "build-$aport"; then - checkapk | report "checkapk-$aport" || true - aport_ok="$aport_ok $repo/$aport" - else - aport_ng="$aport_ng $repo/$aport" - fi -} - -check_aport() { - local repo="$1" aport="$2" - cd "$APORTSDIR/$repo/$aport" - export CHOST=$CI_ALPINE_TARGET_ARCH - # TODO: this enables crossbuild only on user, this should be cleaner - if [ "$repo" != "user" ] && [ "$repo" != "backports" ] && [ "$CI_ALPINE_TARGET_ARCH" != "$ARCH" ]; then - aport_na="$aport_na $repo/$aport" - return 1 - fi - if ! abuild check_arch 2>/dev/null; then - aport_na="$aport_na $repo/$aport" - return 1 - fi -} - -set_repositories_for() { - local target_repo="$1" repos='' repo='' - local release - - release=$(get_release) - for repo in $REPOS; do - repos="$repos $MIRROR/$release/$repo $REPODEST/$repo" - [ "$repo" = "$target_repo" ] && break - done - sudo sh -c "printf '%s\n' $repos >> /etc/apk/repositories" - sudo apk update || true - if [ "$CI_ALPINE_TARGET_ARCH" != "$ARCH" ]; then - sudo sh -c "printf '%s\n' $repos >> $HOME/sysroot-$CI_ALPINE_TARGET_ARCH/etc/apk/repositories" - sudo cp -R /etc/apk/keys/* $HOME/sysroot-$CI_ALPINE_TARGET_ARCH/etc/apk/keys/. - sudo apk --root=$HOME/sysroot-$CI_ALPINE_TARGET_ARCH update || true - fi -} - -apply_offset_limit() { - start=$1 - limit=$2 - end=$((start+limit)) - - sed -n "$((start+1)),${end}p" -} - -setup_system() { - local repos='' repo='' - local release - - release=$(get_release) - for repo in $ALPINE_REPOS; do - [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue - repos="$repos $ALPINE_MIRROR/$release/$repo" - done - repos="$repos $MIRROR/$release/cross" - sudo sh -c "printf '%s\n' $repos > /etc/apk/repositories" - sudo apk -U upgrade -a || sudo apk fix || die "Failed to up/downgrade system" - if [ "$CI_ALPINE_TARGET_ARCH" != "$ARCH" ]; then - sudo apk add gcc-$CI_ALPINE_TARGET_ARCH - fi - gitlab_key_to_rsa $ABUILD_KEY rsa-private $HOME/.abuild/$ABUILD_KEY_NAME.rsa - gitlab_key_to_rsa $ABUILD_KEY_PUB rsa-public $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub - chmod 700 $HOME/.abuild/$ABUILD_KEY_NAME.rsa - echo "PACKAGER_PRIVKEY=$HOME/.abuild/$ABUILD_KEY_NAME.rsa" >> $HOME/.abuild/abuild.conf - sudo cp $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub /etc/apk/keys/$ABUILD_KEY_NAME.rsa.pub - - # patch abuild for crosscompiling - sudo patch -p1 -d / -i $CI_PROJECT_DIR/.gitlab/patches/abuild-cross.patch - - sudo sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf - ( . /etc/abuild.conf && echo "Building with $JOBS jobs" ) - mkdir -p "$REPODEST" - git config --global init.defaultBranch master -} - -sysinfo() { - printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)" - printf "- Number of Cores: %s\n" "$(nproc)" - printf "- Memory: %s Gb\n" "$(awk '/^MemTotal/ {print ($2/1024/1024)}' /proc/meminfo)" - printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')" -} - -copy_artifacts() { - cd "$APORTSDIR" - - packages_size="$(du -sk "$REPODEST" | awk '{print $1 * 1024}')" - if [ -z "$packages_size" ]; then - return - fi - - echo "Artifact size: $packages_size bytes" - - mkdir -p keys/ packages/ - - if [ "$packages_size" -lt $MAX_ARTIFACT_SIZE ]; then - msg "Copying packages for artifact upload" - cp -ar "$REPODEST"/* packages/ 2>/dev/null - cp ~/.abuild/*.rsa.pub keys/ - else - msg "Artifact size $packages_size larger than max ($MAX_ARTIFACT_SIZE), skipping uploading them" yellow - fi -} - -section_start setup "Setting up the system" collapse - -if debugging; then - set -x -fi - -aport_ok= -aport_na= -aport_ng= -failed= - -sysinfo || true -setup_system || die "Failed to setup system" - -# git no longer allows to execute in repositories owned by different users -sudo chown -R $USER: . - -fetch_flags="-qn" -debugging && fetch_flags="-v" - -git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \ - "+refs/heads/$BASEBRANCH:refs/heads/$BASEBRANCH" - -if debugging; then - merge_base=$(git merge-base "$BASEBRANCH" HEAD) || echo "Could not determine merge-base" - echo "Merge base: $merge_base" - git --version - git config -l - [ -n "$merge_base" ] && git tag -f merge-base "$merge_base" - git --no-pager log -200 --oneline --graph --decorate --all -fi - -section_end setup - -build_start=$CI_ALPINE_BUILD_OFFSET -build_limit=$CI_ALPINE_BUILD_LIMIT - -for repo in $(changed_repos); do - mkdir -p "$APORTSDIR"/logs "$APORTSDIR"/packages "$APORTSDIR"/keys - set_repositories_for "$repo" - built_aports=0 - changed_aports_in_repo=$(changed_aports "$repo") - changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l) - changed_aports_to_build=$(echo "$changed_aports_in_repo" | apply_offset_limit "$build_start" "$build_limit") - - msg "Changed aports in $repo:" - # shellcheck disable=SC2086 # Splitting is expected here - printf " - %s\n" $changed_aports_to_build - for pkgname in $changed_aports_to_build; do - section_start "build_$pkgname" "Building package $pkgname" - built_aports=$((built_aports+1)) - if check_aport "$repo" "$pkgname"; then - build_aport "$repo" "$pkgname" - fi - section_end "build_$pkgname" - done - - build_start=$((build_start-(changed_aports_in_repo_count-built_aports))) - build_limit=$((build_limit-built_aports)) - - if [ $build_limit -le 0 ]; then - msg "Limit reached, breaking" - break - fi -done - -section_start artifacts "Handeling artifacts" collapse -copy_artifacts || true -section_end artifacts - -section_start summary "Build summary" - -echo "### Build summary ###" - -for ok in $aport_ok; do - msg "$ok: build succesfully" -done - -for na in $aport_na; do - msg "$na: disabled for $CI_ALPINE_TARGET_ARCH" yellow -done - -for ng in $aport_ng; do - msg "$ng: build failed" red - failed=true -done -section_end summary - -if [ "$failed" = true ]; then - exit 1 -elif [ -z "$aport_ok" ]; then - msg "No packages found to be built." yellow -fi diff --git a/.gitlab/bin/changed-aports b/.gitlab/bin/changed-aports deleted file mode 100755 index 4541230..0000000 --- a/.gitlab/bin/changed-aports +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh - -if [ $# -lt 1 ]; then - echo "Usage: $0 " - exit 1 -fi - -if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then - echo "Fatal: not inside a git repository" - exit 2 -fi - -basebranch=$1 - -if ! git rev-parse --verify --quiet $basebranch >/dev/null; then - # The base branch does not eixst, probably due to a shallow clone - git fetch -v $CI_MERGE_REQUEST_PROJECT_URL.git +refs/heads/$basebranch:refs/heads/$basebranch -fi - -git --no-pager diff --diff-filter=ACMR --name-only $basebranch...HEAD -- "*/APKBUILD" | xargs -r -n1 dirname diff --git a/.gitlab/bin/functions.sh b/.gitlab/bin/functions.sh deleted file mode 100755 index 44de1fe..0000000 --- a/.gitlab/bin/functions.sh +++ /dev/null @@ -1,74 +0,0 @@ -# shellcheck disable=SC3043 - -: - -# shellcheck disable=SC3040 -set -eu -o pipefail - -changed_repos() { - : "${APORTSDIR?APORTSDIR missing}" - : "${BASEBRANCH?BASEBRANCH missing}" - - cd "$APORTSDIR" - for repo in $REPOS; do - git diff --diff-filter=ACMR --exit-code "$BASEBRANCH"...HEAD -- "$repo" >/dev/null \ - || echo "$repo" - done -} - -changed_aports() { - : "${APORTSDIR?APORTSDIR missing}" - : "${BASEBRANCH?BASEBRANCH missing}" - - cd "$APORTSDIR" - local repo="$1" - local aports - - aports=$(git diff --name-only --diff-filter=ACMR --relative="$repo" \ - "$BASEBRANCH"...HEAD -- "*/APKBUILD" | xargs -rn1 dirname) - - # shellcheck disable=2086 - ap builddirs -d "$APORTSDIR/$repo" $aports 2>/dev/null | xargs -rn1 basename -} - -section_start() { - name=${1?arg 1 name missing} - header=${2?arg 2 header missing} - collapsed=$2 - timestamp=$(date +%s) - - options="" - case $collapsed in - yes|on|collapsed|true) options="[collapsed=true]";; - esac - - printf "\e[0Ksection_start:%d:%s%s\r\e[0K%s\n" "$timestamp" "$name" "$options" "$header" -} - -section_end() { - name=$1 - timestamp=$(date +%s) - - printf "\e[0Ksection_end:%d:%s\r\e[0K" "$timestamp" "$name" -} - -gitlab_key_to_rsa() { - KEY=$1 - TYPE=$2 - TGT=$3 - TGT_DIR=${TGT%/*} - if [ "$TGT" == "$TGT_DIR" ]; then - TGT_DIR="./" - fi - if [ ! -d "$TGT_DIR" ]; then - mkdir -p "$TGT_DIR" - fi - case $TYPE in - rsa-public) local type="PUBLIC";; - rsa-private) local type="RSA PRIVATE";; - esac - echo "-----BEGIN $type KEY-----" > "$TGT" - echo $1 | sed 's/.\{64\}/&\ -/g' >> "$TGT" - echo "-----END $type KEY-----" >> "$TGT" -} diff --git a/.gitlab/bin/lint b/.gitlab/bin/lint deleted file mode 100755 index c1edcfb..0000000 --- a/.gitlab/bin/lint +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh - -BLUE="\e[34m" -MAGENTA="\e[35m" -RESET="\e[0m" - -readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME - -verbose() { - echo "> " "$@" - # shellcheck disable=SC2068 - $@ -} - -debugging() { - [ -n "$CI_DEBUG_BUILD" ] -} - -debug() { - if debugging; then - verbose "$@" - fi -} - -# git no longer allows to execute in repositories owned by different users -sudo chown -R gitlab-runner: . - -fetch_flags="-qn" -debugging && fetch_flags="-v" - -git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \ - "+refs/heads/$BASEBRANCH:refs/heads/$BASEBRANCH" - -if debugging; then - merge_base=$(git merge-base "$BASEBRANCH" HEAD) - echo "$merge_base" - git --version - git config -l - git tag merge-base "$merge_base" || { echo "Could not determine merge-base"; exit 50; } - git log --oneline --graph --decorate --all -fi - -has_problems=0 - -for PKG in $(changed-aports "$BASEBRANCH"); do - printf "$BLUE==>$RESET Linting $PKG\n" - - ( - cd "$PKG" - - repo=$(basename $(dirname $PKG)); - - if [ "$repo" == "backports" ]; then - echo "Skipping $PKG as backports (we don't care)" - continue - fi - - printf "\n\n" - printf "$BLUE" - printf '======================================================\n' - printf " parse APKBUILD:\n" - printf '======================================================' - printf "$RESET\n\n" - ( . ./APKBUILD ) || has_problems=1 - - printf "\n\n" - printf "$BLUE" - printf '======================================================\n' - printf " abuild sanitycheck:\n" - printf '======================================================' - printf "$RESET\n\n" - abuild sanitycheck || has_problems=1 - - printf "\n\n" - printf "$BLUE" - printf '======================================================\n' - printf " apkbuild-shellcheck:\n" - printf '======================================================' - printf "$RESET\n" - apkbuild-shellcheck || has_problems=1 - - printf "\n\n" - printf "$BLUE" - printf '======================================================\n' - printf " apkbuild-lint:\n" - printf '======================================================' - printf "$RESET\n\n" - apkbuild-lint APKBUILD || has_problems=1 - - return $has_problems - ) || has_problems=1 - - echo -done - -exit $has_problems diff --git a/.gitlab/bin/push.sh b/.gitlab/bin/push.sh deleted file mode 100755 index 0a11b0b..0000000 --- a/.gitlab/bin/push.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -# shellcheck disable=SC3043 - -. $CI_PROJECT_DIR/.gitlab/bin/functions.sh - -# shellcheck disable=SC3040 -set -eu -o pipefail - -readonly APORTSDIR=$CI_PROJECT_DIR -readonly REPOS="backports user" -readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME - -export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" - -gitlab_key_to_rsa $ABUILD_KEY rsa-private $HOME/.abuild/$ABUILD_KEY_NAME.rsa -gitlab_key_to_rsa $ABUILD_KEY_PUB rsa-public $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub -gitlab_key_to_rsa $SSH_KEY rsa-private $HOME/.ssh/id_rsa -chmod 700 "$HOME"/.ssh/id_rsa -chmod 700 "$HOME"/.abuild/$ABUILD_KEY_NAME.rsa - -echo "PACKAGER_PRIVKEY=$HOME/.abuild/$ABUILD_KEY_NAME.rsa" > $HOME/.abuild/abuild.conf -echo "REPODEST=$HOME/repo-apk" >> $HOME/.abuild/abuild.conf -sudo cp $HOME/.abuild/$ABUILD_KEY_NAME.rsa.pub /etc/apk/keys/. - -if [ -d $HOME/repo-apk ]; then - git -C $HOME/repo-apk fetch - git -C $HOME/repo-apk checkout $BASEBRANCH - git -C $HOME/repo-apk pull --rebase -else - git clone forgejo@ayakael.net:forge/repo-apk.git -b $BASEBRANCH $HOME/repo-apk -fi - -git -C $HOME/repo-apk annex sync --content - -for i in $(find packages -type f -name "*.apk"); do - install -vDm644 $i ${i/packages/$HOME\/repo-apk} -done - -fetch_flags="-qn" -git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \ - "+refs/heads/$BASEBRANCH:refs/heads/$BASEBRANCH" - -for repo in $(changed_repos); do - rm $HOME/repo-apk/$repo/*/APKINDEX.tar.gz | true - mkdir -p $repo/DUMMY - echo "pkgname=DUMMY" > $repo/DUMMY/APKBUILD - cd $repo/DUMMY - for i in $(find $HOME/repo-apk/$repo -maxdepth 1 -mindepth 1 -printf '%P '); do - CHOST=$i abuild index - done - cd "$CI_PROJECT_DIR" - rm -R $repo/DUMMY -done - -git -C $HOME/repo-apk add . -git -C $HOME/repo-apk commit -m "Update from $CI_MERGE_REQUEST_IID - $CI_MERGE_REQUEST_TITLE" -git -C $HOME/repo-apk annex sync --content diff --git a/.gitlab/patches/abuild-cross.patch b/.gitlab/patches/abuild-cross.patch deleted file mode 100644 index 50afd23..0000000 --- a/.gitlab/patches/abuild-cross.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/usr/bin/abuild.orig b/usr/bin/abuild -index 71e0681..d4ae3dd 100755 ---- a/usr/bin/abuild.orig -+++ b/usr/bin/abuild -@@ -2231,7 +2231,11 @@ calcdeps() { - list_has $i $builddeps && continue - subpackages_has ${i%%[<>=]*} || builddeps="$builddeps $i" - done -- hostdeps="$EXTRADEPENDS_TARGET" -+ for i in $EXTRADEPENDS_HOST $EXTRADEPENDS_TARGET $depends $makedepends; do -+ [ "$pkgname" = "${i%%[<>=]*}" ] && continue -+ list_has $i $hostdeps && continue -+ subpackages_has ${i%%[<>=]*} || hostdeps="$hostdeps $i" -+ done - fi - } - From e7bef354af29c39984f5405253b206f33f48354c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 11 Aug 2024 22:35:25 -0400 Subject: [PATCH 421/738] forgejo: initial implementation --- .forgejo/bin/deploy.sh | 26 +++++++++++ .forgejo/patches/build.patch | 66 +++++++++++++++++++++++++++ .forgejo/workflows/build-aarch64.yaml | 51 +++++++++++++++++++++ .forgejo/workflows/build-x86_64.yaml | 51 +++++++++++++++++++++ .forgejo/workflows/lint.yaml | 21 +++++++++ 5 files changed, 215 insertions(+) create mode 100755 .forgejo/bin/deploy.sh create mode 100644 .forgejo/patches/build.patch create mode 100644 .forgejo/workflows/build-aarch64.yaml create mode 100644 .forgejo/workflows/build-x86_64.yaml create mode 100644 .forgejo/workflows/lint.yaml diff --git a/.forgejo/bin/deploy.sh b/.forgejo/bin/deploy.sh new file mode 100755 index 0000000..3138b69 --- /dev/null +++ b/.forgejo/bin/deploy.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# shellcheck disable=SC3040 +set -eu -o pipefail + +readonly REPOS="backports user" +readonly BASEBRANCH=$GITHUB_BASE_REF +readonly TARGET_REPO=$CI_ALPINE_REPO + +apkgs=$(find package -type f -name "*.apk") + +for apk in $apkgs; do + branch=$(echo $apk | awk -F '/' '{print $2}') + arch=$(echo $apk | awk -F '/' '{print $3}') + name=$(echo $apk | awk -F '/' '{print $4}') + + echo "Sending $name of arch $arch to $TARGET_REPO/$BASEBRANCH/$branch" + return=$(curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN --upload-file $apk $TARGET_REPO/$BASEBRANCH/$branch 2>&1) + echo $return + if [ "$return" == "package file already exists" ]; then + echo "Package already exists, refreshing..." + curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$BASEBRANCH/$branch/$arch/$name + curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN --upload-file $apk $TARGET_REPO/$BASEBRANCH/$branch + fi +done + diff --git a/.forgejo/patches/build.patch b/.forgejo/patches/build.patch new file mode 100644 index 0000000..82523a1 --- /dev/null +++ b/.forgejo/patches/build.patch @@ -0,0 +1,66 @@ +diff --git a/usr/local/bin/build.sh.orig b/usr/local/bin/build.sh +old mode 100644 +new mode 100755 +index c3b8f7a..f609018 +--- a/usr/local/bin/build.sh.orig ++++ b/usr/local/bin/build.sh +@@ -7,13 +7,15 @@ + set -eu -o pipefail + + readonly APORTSDIR=$CI_PROJECT_DIR +-readonly REPOS="main community testing non-free" ++readonly REPOS="backports user" ++readonly ALPINE_REPOS="main community testing" + readonly ARCH=$(apk --print-arch) + # gitlab variables + readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME + + : "${REPODEST:=$HOME/packages}" +-: "${MIRROR:=https://dl-cdn.alpinelinux.org/alpine}" ++: "${MIRROR:=https://lab.ilot.io/ayakael/repo-apk/-/raw}" ++: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" + : "${MAX_ARTIFACT_SIZE:=300000000}" #300M + : "${CI_DEBUG_BUILD:=}" + +@@ -68,8 +70,8 @@ report() { + + get_release() { + case $BASEBRANCH in +- *-stable) echo v"${BASEBRANCH%-*}";; +- master) echo edge;; ++ v*) echo v"${BASEBRANCH%-*}";; ++ edge) echo edge;; + *) die "Branch \"$BASEBRANCH\" not supported!" + esac + } +@@ -101,11 +103,11 @@ set_repositories_for() { + release=$(get_release) + for repo in $REPOS; do + [ "$repo" = "non-free" ] && continue +- [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue ++ [ "$release" == "edge" ] && [ "$repo" == "backports" ] && continue + repos="$repos $MIRROR/$release/$repo $REPODEST/$repo" + [ "$repo" = "$target_repo" ] && break + done +- doas sh -c "printf '%s\n' $repos > /etc/apk/repositories" ++ doas sh -c "printf '%s\n' $repos >> /etc/apk/repositories" + doas apk update + } + +@@ -118,7 +120,15 @@ apply_offset_limit() { + } + + setup_system() { +- doas sh -c "echo $MIRROR/$(get_release)/main > /etc/apk/repositories" ++ local repos='' repo='' ++ local release ++ ++ release=$(get_release) ++ for repo in $ALPINE_REPOS; do ++ [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue ++ repos="$repos $ALPINE_MIRROR/$release/$repo" ++ done ++ doas sh -c "printf '%s\n' $repos > /etc/apk/repositories" + doas apk -U upgrade -a || apk fix || die "Failed to up/downgrade system" + abuild-keygen -ain + doas sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml new file mode 100644 index 0000000..30486df --- /dev/null +++ b/.forgejo/workflows/build-aarch64.yaml @@ -0,0 +1,51 @@ +on: + pull_request: + types: [ assigned, opened, synchronize, reopened ] + +jobs: + build-aarch64: + runs-on: aarch64 + container: + image: alpinelinux/alpine-gitlab-ci:latest + env: + CI_PROJECT_DIR: ${{ github.workspace }} + CI_DEBUG_BUILD: ${{ runner.debug }} + CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} + steps: + - name: Environment setup + run: | + doas apk add nodejs git patch + doas wget -P /etc/apk/keys 'https://ayakael.net/pkgs/apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub' + - name: Repo pull + uses: actions/checkout@v4 + with: + fetch-depth: 500 + - name: Package build + run: | + doas patch -d / -p1 -i ${{ github.workspace }}/.forgejo/patches/build.patch + build.sh + - name: Package upload + uses: forgejo/upload-artifact@v3 + with: + name: package + path: packages + + deploy-aarch64: + needs: [build-aarch64] + runs-on: aarch64 + container: + image: alpine:latest + env: + CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' + FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} + FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + steps: + - name: Setting up environment + run: apk add nodejs curl findutils git gawk + - name: Repo pull + uses: actions/checkout@v4 + - name: Package download + uses: forgejo/download-artifact@v3 + - name: Package deployment + run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml new file mode 100644 index 0000000..60113d9 --- /dev/null +++ b/.forgejo/workflows/build-x86_64.yaml @@ -0,0 +1,51 @@ +on: + pull_request: + types: [ assigned, opened, synchronize, reopened ] + +jobs: + build-x86_64: + runs-on: x86_64 + container: + image: alpinelinux/alpine-gitlab-ci:latest + env: + CI_PROJECT_DIR: ${{ github.workspace }} + CI_DEBUG_BUILD: ${{ runner.debug }} + CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} + steps: + - name: Environment setup + run: | + doas apk add nodejs git patch + doas wget -P /etc/apk/keys 'https://ayakael.net/pkgs/apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub' + - name: Repo pull + uses: actions/checkout@v4 + with: + fetch-depth: 500 + - name: Package build + run: | + doas patch -d / -p1 -i ${{ github.workspace }}/.forgejo/patches/build.patch + build.sh + - name: Package upload + uses: forgejo/upload-artifact@v3 + with: + name: package + path: packages + + deploy-x86_64: + needs: [build-x86_64] + runs-on: x86_64 + container: + image: alpine:latest + env: + CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' + FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} + FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + steps: + - name: Setting up environment + run: apk add nodejs curl findutils git gawk + - name: Repo pull + uses: actions/checkout@v4 + - name: Package download + uses: forgejo/download-artifact@v3 + - name: Package deployment + run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml new file mode 100644 index 0000000..3614deb --- /dev/null +++ b/.forgejo/workflows/lint.yaml @@ -0,0 +1,21 @@ +on: + pull_request: + types: [ assigned, opened, synchronize, reopened ] + +jobs: + lint: + run-name: lint + runs-on: x86_64 + container: + image: alpinelinux/apkbuild-lint-tools:latest + env: + CI_PROJECT_DIR: ${{ github.workspace }} + CI_DEBUG_BUILD: ${{ runner.debug }} + CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} + steps: + - run: doas apk add nodejs git + - uses: actions/checkout@v4 + with: + fetch-depth: 500 + - run: lint From 135bcd5a89123828ac4f0b0d66cacbe2a11c3f03 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 12 Aug 2024 12:53:29 -0400 Subject: [PATCH 422/738] README: update to use forge repo --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 31d9454..7c7efa3 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,14 @@ Affixed to each repository description is the appropriate link for use in #### Backports ``` -https://ayakael.net/pkgs/apk/media/branch/edge/backports +https://ayakael.net/api/packages/forge/alpine/edge/backports ``` Aports from the official Alpine repositories backported from edge. #### User ``` -https://ayakael.net/pkgs/apk/media/branch/edge/user +https://ayakael.net/api/packages/forge/alpine/edge/user ``` Aports that have yet to be (or may never be) upstreamed to the official @@ -37,7 +37,7 @@ Add security key of the apk repository to your /etc/apk/keys: ```shell cd /etc/apk/keys -wget https://ayakael.net/pkgs/apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub +curl -JO https://ayakael.net/api/packages/forge/alpine/key ``` Add repositories that you want to use (see above) to `/etc/apk/repositories`. From 970fd7297f2ba88ffec8786ef19e86fbc3878c2d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 12 Aug 2024 12:55:21 -0400 Subject: [PATCH 423/738] README: update upstream --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7c7efa3..8a9a4e2 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # ayports -Upstream: https://codeberg.org/ayakael/ayports +Upstream: https://ayakael.net/forge/ayaports ## Description @@ -12,7 +12,7 @@ Branches are matched to Alpine releases. ## Repositories -You can browse all the repositories at https://codeberg.org/ayakael/ayports +You can browse all the repositories at https://codeberg.org/ayakael/ayaports Affixed to each repository description is the appropriate link for use in `/etc/apk/repositories`. @@ -52,7 +52,7 @@ they will work for you. ## Contribution & bug reports If you wish to contribute to this aports collection, or wish to report a bug, you can do so on Codeberg here: -https://codeberg.org/ayakael/ayports/issues +https://codeberg.org/ayakael/ayaports/issues For packages that are in backports, bug reports and merge requests should be done on Alpine's aports repo instance: From 659bd20ba1b6da9a9b2a90d02e963d563ebfe2ec Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 12 Aug 2024 12:56:21 -0400 Subject: [PATCH 424/738] README: update name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a9a4e2..75165d0 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ayports +# ayaports Upstream: https://ayakael.net/forge/ayaports ## Description From fc3cfbc01ce7848015eb821b09139f846cfa0818 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Aug 2024 10:19:57 -0400 Subject: [PATCH 425/738] user/forgejo-aneksajo: upgrade to 8.0.1 --- user/forgejo-aneksajo/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/forgejo-aneksajo/APKBUILD b/user/forgejo-aneksajo/APKBUILD index 32a5f57..ca50a59 100644 --- a/user/forgejo-aneksajo/APKBUILD +++ b/user/forgejo-aneksajo/APKBUILD @@ -4,7 +4,7 @@ # Contributor: Patrycja Rosa # Maintainer: Antoine Martin (ayakael) pkgname=forgejo-aneksajo -pkgver=8.0.0 +pkgver=8.0.1 _gittag=v$pkgver-git-annex0 pkgrel=0 pkgdesc="Self-hosted Git service written in Go with git-annex support" @@ -106,7 +106,7 @@ package() { } sha512sums=" -6836da3996a4bc51c88d82afcffbcd30965111a41d2cdf91d9539b0f0a4832496ed071b52e6eedf2eeaec7623a32aec3a3fdd1dedefedf5c2323690bd1f60937 forgejo-aneksajo-v8.0.0-git-annex0.tar.gz +d8e273d369c934eec7ff84795cd0d896cda53bc1a2d17f610dd8476ff92dc50c4a24c4598366ef8aac3be52ddef6630489043183085334376c30bc5d4d5f15c2 forgejo-aneksajo-v8.0.1-git-annex0.tar.gz eb93a9f6c8f204de5c813f58727015f53f9feaab546589e016c60743131559f04fc1518f487b6d2a0e7fa8fab6d4a67cd0cd9713a7ccd9dec767a8c1ddebe129 forgejo-aneksajo.initd b537b41b6b3a945274a6028800f39787b48c318425a37cf5d40ace0d1b305444fd07f17b4acafcd31a629bedd7d008b0bb3e30f82ffeb3d7e7e947bdbe0ff4f3 forgejo-aneksajo.ini " From 1478a9f5c7346b05560e22e81f33892c6794aa41 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 Aug 2024 10:21:49 -0400 Subject: [PATCH 426/738] forgejo-ci: use new forge repo --- .forgejo/patches/build.patch | 2 +- .forgejo/workflows/build-aarch64.yaml | 5 +++-- .forgejo/workflows/build-x86_64.yaml | 5 +++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.forgejo/patches/build.patch b/.forgejo/patches/build.patch index 82523a1..218c9b4 100644 --- a/.forgejo/patches/build.patch +++ b/.forgejo/patches/build.patch @@ -17,7 +17,7 @@ index c3b8f7a..f609018 : "${REPODEST:=$HOME/packages}" -: "${MIRROR:=https://dl-cdn.alpinelinux.org/alpine}" -+: "${MIRROR:=https://lab.ilot.io/ayakael/repo-apk/-/raw}" ++: "${MIRROR:=https://ayakael.net/api/packages/forge/alpine}" +: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" : "${MAX_ARTIFACT_SIZE:=300000000}" #300M : "${CI_DEBUG_BUILD:=}" diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index 30486df..d6738b2 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -15,8 +15,9 @@ jobs: steps: - name: Environment setup run: | - doas apk add nodejs git patch - doas wget -P /etc/apk/keys 'https://ayakael.net/pkgs/apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub' + doas apk add nodejs git patch curl + cd /etc/apk/keys + doas curl -JO https://ayakael.net/api/packages/forge/alpine/key - name: Repo pull uses: actions/checkout@v4 with: diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index 60113d9..8731799 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -15,8 +15,9 @@ jobs: steps: - name: Environment setup run: | - doas apk add nodejs git patch - doas wget -P /etc/apk/keys 'https://ayakael.net/pkgs/apk/raw/branch/edge/antoine.martin@protonmail.com-5b3109ad.rsa.pub' + doas apk add nodejs git patch curl + cd /etc/apk/keys + doas curl -JO https://ayakael.net/api/packages/forge/alpine/key - name: Repo pull uses: actions/checkout@v4 with: From 77dc41c8aa99962bd8c4d1c120507de471c7fbc2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 22 Aug 2024 21:40:50 -0400 Subject: [PATCH 427/738] forgejo-ci: fix double v in repo --- .forgejo/patches/build.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/patches/build.patch b/.forgejo/patches/build.patch index 218c9b4..842dd75 100644 --- a/.forgejo/patches/build.patch +++ b/.forgejo/patches/build.patch @@ -28,7 +28,7 @@ index c3b8f7a..f609018 case $BASEBRANCH in - *-stable) echo v"${BASEBRANCH%-*}";; - master) echo edge;; -+ v*) echo v"${BASEBRANCH%-*}";; ++ v*) echo "$BASEBRANCH";; + edge) echo edge;; *) die "Branch \"$BASEBRANCH\" not supported!" esac From d6e00b639541a23337bfaaa746c4fc50d6da74d3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 Aug 2024 10:57:30 -0400 Subject: [PATCH 428/738] forgejo-ci: build.sh is now local rather than patched --- .forgejo/bin/build.sh | 260 ++++++++++++++++++++++++++ .forgejo/patches/build.patch | 66 ------- .forgejo/workflows/build-aarch64.yaml | 4 +- .forgejo/workflows/build-x86_64.yaml | 4 +- 4 files changed, 262 insertions(+), 72 deletions(-) create mode 100755 .forgejo/bin/build.sh delete mode 100644 .forgejo/patches/build.patch diff --git a/.forgejo/bin/build.sh b/.forgejo/bin/build.sh new file mode 100755 index 0000000..8c732ec --- /dev/null +++ b/.forgejo/bin/build.sh @@ -0,0 +1,260 @@ +#!/bin/sh +# shellcheck disable=SC3043 + +. /usr/local/lib/functions.sh + +# shellcheck disable=SC3040 +set -eu -o pipefail + +readonly APORTSDIR=$CI_PROJECT_DIR +readonly REPOS="backports user" +readonly ALPINE_REPOS="main community testing" +readonly ARCH=$(apk --print-arch) +# gitlab variables +readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME + +: "${REPODEST:=$HOME/packages}" +: "${MIRROR:=https://ayakael.net/api/packages/forge/alpine}" +: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" +: "${MAX_ARTIFACT_SIZE:=300000000}" #300M +: "${CI_DEBUG_BUILD:=}" + +: "${CI_ALPINE_BUILD_OFFSET:=0}" +: "${CI_ALPINE_BUILD_LIMIT:=9999}" + +msg() { + local color=${2:-green} + case "$color" in + red) color="31";; + green) color="32";; + yellow) color="33";; + blue) color="34";; + *) color="32";; + esac + printf "\033[1;%sm>>>\033[1;0m %s\n" "$color" "$1" | xargs >&2 +} + +verbose() { + echo "> " "$@" + # shellcheck disable=SC2068 + $@ +} + +debugging() { + [ -n "$CI_DEBUG_BUILD" ] +} + +debug() { + if debugging; then + verbose "$@" + fi +} + +die() { + msg "$1" red + exit 1 +} + +capture_stderr() { + "$@" 2>&1 +} + +report() { + report=$1 + + reportsdir=$APORTSDIR/logs/ + mkdir -p "$reportsdir" + + tee -a "$reportsdir/$report.log" +} + +get_release() { + case $BASEBRANCH in + v*) echo "$BASEBRANCH";; + edge) echo edge;; + *) die "Branch \"$BASEBRANCH\" not supported!" + esac +} + +build_aport() { + local repo="$1" aport="$2" + cd "$APORTSDIR/$repo/$aport" + if abuild -r 2>&1 | report "build-$aport"; then + checkapk 2>&1 | report "checkapk-$aport" || true + aport_ok="$aport_ok $repo/$aport" + else + aport_ng="$aport_ng $repo/$aport" + fi +} + +check_aport() { + local repo="$1" aport="$2" + cd "$APORTSDIR/$repo/$aport" + if ! abuild check_arch 2>/dev/null; then + aport_na="$aport_na $repo/$aport" + return 1 + fi +} + +set_repositories_for() { + local target_repo="$1" repos='' repo='' + local release + + release=$(get_release) + for repo in $REPOS; do + [ "$repo" = "non-free" ] && continue + [ "$release" == "edge" ] && [ "$repo" == "backports" ] && continue + repos="$repos $MIRROR/$release/$repo $REPODEST/$repo" + [ "$repo" = "$target_repo" ] && break + done + doas sh -c "printf '%s\n' $repos >> /etc/apk/repositories" + doas apk update +} + +apply_offset_limit() { + start=$1 + limit=$2 + end=$((start+limit)) + + sed -n "$((start+1)),${end}p" +} + +setup_system() { + local repos='' repo='' + local release + + release=$(get_release) + for repo in $ALPINE_REPOS; do + [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue + repos="$repos $ALPINE_MIRROR/$release/$repo" + done + doas sh -c "printf '%s\n' $repos > /etc/apk/repositories" + doas apk -U upgrade -a || apk fix || die "Failed to up/downgrade system" + abuild-keygen -ain + doas sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf + ( . /etc/abuild.conf && echo "Building with $JOBS jobs" ) + mkdir -p "$REPODEST" + git config --global init.defaultBranch master +} + +sysinfo() { + printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)" + printf "- Number of Cores: %s\n" "$(nproc)" + printf "- Memory: %s Gb\n" "$(awk '/^MemTotal/ {print ($2/1024/1024)}' /proc/meminfo)" + printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')" +} + +copy_artifacts() { + cd "$APORTSDIR" + + packages_size="$(du -sk "$REPODEST" | awk '{print $1 * 1024}')" + if [ -z "$packages_size" ]; then + return + fi + + echo "Artifact size: $packages_size bytes" + + mkdir -p keys/ packages/ + + if [ "$packages_size" -lt $MAX_ARTIFACT_SIZE ]; then + msg "Copying packages for artifact upload" + cp -ar "$REPODEST"/* packages/ 2>/dev/null + cp ~/.abuild/*.rsa.pub keys/ + else + msg "Artifact size $packages_size larger than max ($MAX_ARTIFACT_SIZE), skipping uploading them" yellow + fi +} + +section_start setup "Setting up the system" collapse + +if debugging; then + set -x +fi + +aport_ok= +aport_na= +aport_ng= +failed= + +sysinfo || true +setup_system || die "Failed to setup system" + +# git no longer allows to execute in repositories owned by different users +doas chown -R buildozer: . + +fetch_flags="-qn" +debugging && fetch_flags="-v" + +git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \ + "+refs/heads/$BASEBRANCH:refs/heads/$BASEBRANCH" + +if debugging; then + merge_base=$(git merge-base "$BASEBRANCH" HEAD) || echo "Could not determine merge-base" + echo "Merge base: $merge_base" + git --version + git config -l + [ -n "$merge_base" ] && git tag -f merge-base "$merge_base" + git --no-pager log -200 --oneline --graph --decorate --all +fi + +section_end setup + +build_start=$CI_ALPINE_BUILD_OFFSET +build_limit=$CI_ALPINE_BUILD_LIMIT + +for repo in $(changed_repos); do + set_repositories_for "$repo" + built_aports=0 + changed_aports_in_repo=$(changed_aports "$repo") + changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l) + changed_aports_to_build=$(echo "$changed_aports_in_repo" | apply_offset_limit "$build_start" "$build_limit") + + msg "Changed aports in $repo:" + # shellcheck disable=SC2086 # Splitting is expected here + printf " - %s\n" $changed_aports_to_build + for pkgname in $changed_aports_to_build; do + section_start "build_$pkgname" "Building package $pkgname" + built_aports=$((built_aports+1)) + if check_aport "$repo" "$pkgname"; then + build_aport "$repo" "$pkgname" + fi + section_end "build_$pkgname" + done + + build_start=$((build_start-(changed_aports_in_repo_count-built_aports))) + build_limit=$((build_limit-built_aports)) + + if [ $build_limit -le 0 ]; then + msg "Limit reached, breaking" + break + fi +done + +section_start artifacts "Handeling artifacts" collapse +copy_artifacts || true +section_end artifacts + +section_start summary "Build summary" + +echo "### Build summary ###" + +for ok in $aport_ok; do + msg "$ok: build succesfully" +done + +for na in $aport_na; do + msg "$na: disabled for $ARCH" yellow +done + +for ng in $aport_ng; do + msg "$ng: build failed" red + failed=true +done +section_end summary + +if [ "$failed" = true ]; then + exit 1 +elif [ -z "$aport_ok" ]; then + msg "No packages found to be built." yellow +fi + diff --git a/.forgejo/patches/build.patch b/.forgejo/patches/build.patch deleted file mode 100644 index 842dd75..0000000 --- a/.forgejo/patches/build.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff --git a/usr/local/bin/build.sh.orig b/usr/local/bin/build.sh -old mode 100644 -new mode 100755 -index c3b8f7a..f609018 ---- a/usr/local/bin/build.sh.orig -+++ b/usr/local/bin/build.sh -@@ -7,13 +7,15 @@ - set -eu -o pipefail - - readonly APORTSDIR=$CI_PROJECT_DIR --readonly REPOS="main community testing non-free" -+readonly REPOS="backports user" -+readonly ALPINE_REPOS="main community testing" - readonly ARCH=$(apk --print-arch) - # gitlab variables - readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME - - : "${REPODEST:=$HOME/packages}" --: "${MIRROR:=https://dl-cdn.alpinelinux.org/alpine}" -+: "${MIRROR:=https://ayakael.net/api/packages/forge/alpine}" -+: "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" - : "${MAX_ARTIFACT_SIZE:=300000000}" #300M - : "${CI_DEBUG_BUILD:=}" - -@@ -68,8 +70,8 @@ report() { - - get_release() { - case $BASEBRANCH in -- *-stable) echo v"${BASEBRANCH%-*}";; -- master) echo edge;; -+ v*) echo "$BASEBRANCH";; -+ edge) echo edge;; - *) die "Branch \"$BASEBRANCH\" not supported!" - esac - } -@@ -101,11 +103,11 @@ set_repositories_for() { - release=$(get_release) - for repo in $REPOS; do - [ "$repo" = "non-free" ] && continue -- [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue -+ [ "$release" == "edge" ] && [ "$repo" == "backports" ] && continue - repos="$repos $MIRROR/$release/$repo $REPODEST/$repo" - [ "$repo" = "$target_repo" ] && break - done -- doas sh -c "printf '%s\n' $repos > /etc/apk/repositories" -+ doas sh -c "printf '%s\n' $repos >> /etc/apk/repositories" - doas apk update - } - -@@ -118,7 +120,15 @@ apply_offset_limit() { - } - - setup_system() { -- doas sh -c "echo $MIRROR/$(get_release)/main > /etc/apk/repositories" -+ local repos='' repo='' -+ local release -+ -+ release=$(get_release) -+ for repo in $ALPINE_REPOS; do -+ [ "$release" != "edge" ] && [ "$repo" == "testing" ] && continue -+ repos="$repos $ALPINE_MIRROR/$release/$repo" -+ done -+ doas sh -c "printf '%s\n' $repos > /etc/apk/repositories" - doas apk -U upgrade -a || apk fix || die "Failed to up/downgrade system" - abuild-keygen -ain - doas sed -i -E 's/export JOBS=[0-9]+$/export JOBS=$(nproc)/' /etc/abuild.conf diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index d6738b2..aed3fe8 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -23,9 +23,7 @@ jobs: with: fetch-depth: 500 - name: Package build - run: | - doas patch -d / -p1 -i ${{ github.workspace }}/.forgejo/patches/build.patch - build.sh + run: ${{ github.workspace }}/.forgejo/bin/build.sh - name: Package upload uses: forgejo/upload-artifact@v3 with: diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index 8731799..a174e45 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -23,9 +23,7 @@ jobs: with: fetch-depth: 500 - name: Package build - run: | - doas patch -d / -p1 -i ${{ github.workspace }}/.forgejo/patches/build.patch - build.sh + run: ${{ github.workspace }}/.forgejo/bin/build.sh - name: Package upload uses: forgejo/upload-artifact@v3 with: From 888654be5cd996e3163aa2a7fc8c7bffe3a8c932 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 Aug 2024 10:05:30 -0400 Subject: [PATCH 429/738] user/rmfakecloud: upgrade to 0.0.19 --- user/rmfakecloud/APKBUILD | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index 1bdaac4..4bc816e 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.17 +pkgver=0.0.19 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" @@ -10,7 +10,7 @@ url="https://github.com/ddvk/rmfakecloud" arch="all" license="AGPL-3.0-only" makedepends="go yarn" -options="chmod-clean" +options="chmod-clean net" source=" $pkgname-$pkgver.tar.gz::https://github.com/ddvk/rmfakecloud/archive/v$pkgver.tar.gz rmfakecloud.conf @@ -18,20 +18,6 @@ source=" " subpackages="$pkgname-openrc" -case "$CTARGET_ARCH" in - aarch64)export GOARCH="arm64" ;; - armel) export GOARCH="arm" GOARM=5 ;; - armhf) export GOARCH="arm" GOARM=6 ;; - armv7) export GOARCH="arm" GOARM=7 ;; - s390x) export GOARCH="s390x" ;; - x86) export GOARCH="386" ;; - x86_64) export GOARCH="amd64" ;; - ppc64) export GOARCH="ppc64" ;; - ppc64le) export GOARCH="ppc64le" ;; - riscv64) export GOARCH="riscv64" ;; - *) export GOARCH="unsupported";; -esac - build() { export GOPATH="$srcdir/go" export LDFLAGS="$LDFLAGS -X main.version=$pkgver" @@ -51,7 +37,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -2836364ba7a0c70b33f5914e357a87fb681275268a1cd5e1b6eba91037017c57f6a24b1bcecf9daa423c2588128ce591c2066d8af1d89eedccca231d24671748 rmfakecloud-0.0.17.tar.gz +55948ede5f8a4cc9e74c9c68f83d14dec4950f23da5ef053f3ae708edf2643f64e5736abfe63cbf6700e5277adff7167ce0f228a8241169261f4ce59e2815a35 rmfakecloud-0.0.19.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " From 68130cdf8aaf21e688b99b0f40af85dc375fcfc1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 Aug 2024 21:14:06 -0400 Subject: [PATCH 430/738] user/zotero: upgrade to 7.0.3 --- user/zotero/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 09790c7..f6c9803 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.0 +pkgver=7.0.3 pkgrel=0 _fxver=115.9.1 _gittag=$pkgver @@ -96,7 +96,7 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox vendor-prefs.js zotero.desktop - https://lab.ilot.io/mirrors/zotero-client/-/releases/$_gittag/downloads/tarball/zotero-client-$_gittag.tar.gz + https://ayakael.net/api/packages/mirrors/generic/zotero/$pkgver/zotero-$pkgver.tar.gz zotero_build-modifications.patch zotero_test-drop-build.patch zotero_test-fix-chars.patch @@ -105,7 +105,7 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox " builddir="$srcdir"/firefox-$_fxver -_zoterodir="$srcdir"/zotero-client-$_gittag +_zoterodir="$srcdir"/zotero-$_gittag _mozappdir=/usr/lib/zotero # help our shared-object scanner to find the libs @@ -391,7 +391,7 @@ f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e71106951 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -4d6146d127153bfe7069e32cc3e4ec4c491d8cc4371034d569427bdf486d1cd39ade8e668cfe7dd0453844f935a4eba60832dd5492a247236fac75ce6928e36a zotero-client-7.0.0.tar.gz +48c7106f0d20b5f1fba2a4b846282c627a5654ac8579f8a7cdb202b187416311f5eb32827ac6e972d1815348bd2ad00bd10bcff1a4ca8efc9b4b07b4e3e825dc zotero-7.0.3.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch 337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch From a6e60edfd946c0b92a6c42a2eced1d4da0f355e5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 3 Sep 2024 07:52:53 -0400 Subject: [PATCH 431/738] user/rstudio-desktop: enable build --- user/rstudio-desktop/APKBUILD | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/user/rstudio-desktop/APKBUILD b/user/rstudio-desktop/APKBUILD index 958ac4b..27b21ce 100644 --- a/user/rstudio-desktop/APKBUILD +++ b/user/rstudio-desktop/APKBUILD @@ -7,14 +7,14 @@ _gittag=v2023.03.0+386 _panmirrortag=aea3027882718af657d60221818c3ff35f413219 pkgrel=0 pkgdesc="A powerful and productive integrated development environment (IDE) for R programming language" -#arch="x86_64" +arch="x86_64" url="https://www.rstudio.com/products/rstudio/" license='AGPL3' options="!check" # No testsuite # missing quarto-cli depends=" R>=3.0.1 - clang14 + clang15 hunspell-en libldap lxqt-config @@ -23,6 +23,7 @@ depends=" sqlite " makedepends=" + bash apache-ant boost-dev cmake>=3.1.0 From d00a14e6952a280c04669be0c3830b41f1851005 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 3 Sep 2024 12:14:10 -0400 Subject: [PATCH 432/738] forgejo: always create artifacts for build stage --- .forgejo/workflows/build-aarch64.yaml | 4 +++- .forgejo/workflows/build-x86_64.yaml | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index aed3fe8..59f90c9 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -23,7 +23,9 @@ jobs: with: fetch-depth: 500 - name: Package build - run: ${{ github.workspace }}/.forgejo/bin/build.sh + run: | + ${{ github.workspace }}/.forgejo/bin/build.sh + touch packages/dummy - name: Package upload uses: forgejo/upload-artifact@v3 with: diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index a174e45..298a213 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -23,7 +23,9 @@ jobs: with: fetch-depth: 500 - name: Package build - run: ${{ github.workspace }}/.forgejo/bin/build.sh + run: | + ${{ github.workspace }}/.forgejo/bin/build.sh + touch packages/dummy - name: Package upload uses: forgejo/upload-artifact@v3 with: From 021b81131e87066224e038c416668961ed460445 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 3 Sep 2024 12:22:25 -0400 Subject: [PATCH 433/738] user/mathjax2: bump pkgrel --- user/mathjax2/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/mathjax2/APKBUILD b/user/mathjax2/APKBUILD index bc78cb6..ceb2b15 100644 --- a/user/mathjax2/APKBUILD +++ b/user/mathjax2/APKBUILD @@ -3,7 +3,7 @@ pkgname=mathjax2 pkgver=2.7.9 -pkgrel=0 +pkgrel=1 pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" url="https://www.mathjax.org/" arch=noarch From 743ceb8dbe6cae3c4e95d2a57072f7b6f19e2141 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 5 Sep 2024 16:05:34 -0400 Subject: [PATCH 434/738] backports/signal-desktop: upgrade to 7.22.2 --- backports/signal-desktop/APKBUILD | 74 +++++++++---------- .../signal-desktop/libsignal-auditable.patch | 16 ++-- .../signal-fix-dns-fallback.patch | 12 --- .../signal-show-window-please.patch | 14 ++-- ...l-c7019036-do-not-define-crypto_addc.patch | 25 +++++++ ...my-wife.patch => webrtc-shared-libs.patch} | 12 +++ 6 files changed, 87 insertions(+), 66 deletions(-) delete mode 100644 backports/signal-desktop/signal-fix-dns-fallback.patch create mode 100644 backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch rename backports/signal-desktop/{webrtc-shared-like-my-wife.patch => webrtc-shared-libs.patch} (68%) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index b804d51..ce68f67 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.11.0 +pkgver=7.22.2 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -42,6 +42,7 @@ makedepends=" libsecret-dev libvpx-dev libwebp-dev + libxml2-dev lld llvm-dev mesa-dev @@ -63,14 +64,14 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.46.2 +_libsignalver=0.55.1 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.42.0 +_ringrtcver=2.46.1 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6261i +_webrtcver=6478j # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.7.1 @@ -80,7 +81,7 @@ source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz - https://ab-sn.lnl.gay/webrtc-$_webrtcver.tar.zst + https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz bettersqlite-use-system-sqlcipher.patch @@ -88,11 +89,11 @@ source=" signal-disable-updates.patch signal-update-links.patch signal-show-window-please.patch - signal-fix-dns-fallback.patch ringrtc-webrtc-renamed.patch - webrtc-shared-like-my-wife.patch + webrtc-shared-libs.patch webrtc-compiler.patch webrtc-gcc13.patch + webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch signal-desktop " @@ -195,8 +196,7 @@ prepare() { done msg "Installing signal-desktop JS dependencies" - echo 'ignore-engines true' > .yarnrc - yarn --ignore-scripts --frozen-lockfile + npm ci --ignore-scripts ( cd "$srcdir"/webrtc-$_webrtcver @@ -283,7 +283,7 @@ prepare() { cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Installing ringrtc js dependencies" - yarn --frozen-lockfile --ignore-scripts + npm ci --ignore-scripts ) ( @@ -293,7 +293,7 @@ prepare() { sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp msg "Installing libsignal js dependencies" - yarn --ignore-scripts --frozen-lockfile + npm install --ignore-scripts ) # remove shipped fonts for system-provided (part 1) @@ -359,10 +359,11 @@ build() { ( cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Building ringrtc JS glue code" - yarn build + npm ci --ignore-scripts + npm run build msg "Cleaning dev dependencies for ringrtc" - yarn --ignore-scripts --frozen-lockfile --production + npm prune --ignore-scripts --omit=dev ) # module on npm intentionally unbuildable: https://github.com/signalapp/libsignal/issues/464#issuecomment-1160665052 @@ -370,17 +371,18 @@ build() { cd "$srcdir"/libsignal-$_libsignalver/node msg "Building libsignal" - yarn node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source - yarn node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source + node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source + node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source mkdir -p prebuilds/linux-$chromium_arch mv build/Release/libsignal_client_linux_$chromium_arch.node prebuilds/linux-$chromium_arch/node.napi.node msg "Building libsignal glue code" - yarn tsc + npm ci --ignore-scripts + npm run tsc msg "Cleaning dev dependencies for libsignal" - yarn --ignore-scripts --frozen-lockfile --production + npm prune -ignore-scripts --omit=dev ) ( @@ -392,31 +394,21 @@ build() { ) # from package.json postinstall - yarn build:acknowledgments - yarn patch-package + npm run build:acknowledgments + npm exec patch-package rm -rf node_modules/dtrace-provider # get esbuild installed (needed for next step) - npm rebuild esbuild + npm install esbuild # build front NODE_ENV=production \ SIGNAL_ENV=production \ NODE_OPTIONS=--openssl-legacy-provider \ - yarn build:dev + npm run build:dev # purge non-production deps - yarn install --ignore-scripts --frozen-lockfile --production - - # XXX: the previous step undoes the patches. and removes the patch applier. - # please force me to just implement packaging without dev modules in tasje. -lnl - for x in patches/*.patch; do - # some of these patches are made for devDependencies - if [ -d "$(grep -Eo 'node_modules/(@[a-z\d_-]+/)?[a-z\d_-]+/' "$x" | head -n1)" ]; then - msg "$x" - patch -Np1 -i ./"$x" - fi - done + npm prune --ignore-scripts --omit=dev # use our libsignal rm -rf node_modules/@signalapp/libsignal-client/ @@ -451,7 +443,7 @@ build() { check() { # tests run against downloaded build of electron for glibc, probably can be patched - yarn test + npm run test } package() { @@ -472,20 +464,20 @@ package() { } sha512sums=" -cebb1c8412089fe6f5faa9d4bfcb8bb4e8c9d2f3e4a13eef15e8f36d97b4bc65eae3c0865af0a7c82a0af2fd0597482b3d7c1f25e7d51465ea2589c817183b19 Signal-Desktop-7.11.0.tar.gz -6be40fcfbcb9bd20c51dd9ef1c65e7f586fbbee04af66af89a5b8c0ce3fa2ce5efd586e10de1d6d5c579126ed4bb2f31e50a8448ed5390d12e226cd075537007 libsignal-0.46.2.tar.gz -5cb7e88e8c04244a8f4727237dd0662357eb84dfb384de57c6579f01f0c53944d019a2af29efe37c4d30993fdba4be6f9bd9f7975ac24e43207fe814e0b95f95 ringrtc-2.42.0.tar.gz -89796d611bd7cda7c0e98318826753b1acc373396d77f2a0a826bf95e9e28d2c0f33181705b50b1afc52fdf12dbf3d35e30ad86b0ce3052ed9131ea20c842d04 webrtc-6261i.tar.zst +20d09f64ddb8e42f314aa1538df55e4fa18b1b1b647a1434bd38122fe26cbf18c699f81d415e751dbec1888d0eb5020fb366129bf293cd28e26eaacf456bcbfb Signal-Desktop-7.22.2.tar.gz +2179eb6862ceb9e3a1df04a4e9b9bb3d64ce84f017d3048f0aaafdd4960843230216443139ff1a8127b6901e9859a2f2ed59e12f2ba9ffc906f79107d7fc161f libsignal-0.55.1.tar.gz +c941e7016e96acbba615a9ba12d91882f83b64656b40b6de26e1dc21abf4aea29ed49459c5bd60e43df65a93103cb6878d3d7bb17c597fd88a807c3f6e71c41e ringrtc-2.46.1.tar.gz +0de4999800eea98bd38d785fcf6683a6f431f98483ca91dcf8ca721d5eecd197043db564bacd2dc583442fe3b43affda61c02230b044b4d4c05fbb6e11741ea5 webrtc-6478j.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch -92de6fc7cc5f2b6d65bedbd74cc733dd86dafc9cbfb9b727c3267aef63a71a07247cde9b163c68fddfeb9096dcd7f554d36d0b2de078d8905e3825645ddbd6eb libsignal-auditable.patch +2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch 152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch -646d303fe58cae3f0896ae0275a66695b902fae6ddde7c568cc9798157dee9f45ceff907bc951fadc4c511d512a73d114b4e4f7c8914e2311c63929d29e1621a signal-show-window-please.patch -3df878d259cdc12fe116651e9978deb6c15b5bce477d692b2301f17bc660327b29ac4412cfd6966bd0cef15c90675c56ce7c3abd8e2119899cc5d281ab1d9474 signal-fix-dns-fallback.patch +bfc8acdd13aa48d29c7657311733cc9d33c4899782efbd1ef6d25ad1698be4de7cc67e829324bc0309715d69ae37ea9f782cf54887317e817213e110d73d68e7 signal-show-window-please.patch b11fdd930943ca327650e4738ed85cd6b5eea779455a5895bccebba98e449bafc6b0f09bcf4545f2b2e16644355664e9768dd6d4d62f87619207c430367f72c5 ringrtc-webrtc-renamed.patch -9d92389637cdda83a0a7039fa6c52516d7bc491d0b1e42d5374b9d1f4fa7b9c930642f2dca896da17a2dc3344fa1bb97434c8dddd0539a4fedfd0dec809fc875 webrtc-shared-like-my-wife.patch +f4e80ed7e67b98d6988c69ab5025286be17db29dc90f90bf837133cd8ae737f46293e6a2432b02f98c300ed461653b5a66801ff957a418c6a7c33877e3fe0443 webrtc-shared-libs.patch e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch 88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch +2721dce75ed1b6cd8bff129cd90d05ea07ce61cafd9145913748cb1f4e58d4c042c3c43efc578ad84e15624937b7ed67b8d5fec3d764e7feb26ff28f86cacd77 webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch 87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop " diff --git a/backports/signal-desktop/libsignal-auditable.patch b/backports/signal-desktop/libsignal-auditable.patch index bdf59ab..c5c8f8a 100644 --- a/backports/signal-desktop/libsignal-auditable.patch +++ b/backports/signal-desktop/libsignal-auditable.patch @@ -1,11 +1,13 @@ ---- ./node/build_node_bridge.py.orig -+++ ./node/build_node_bridge.py -@@ -63,7 +63,7 @@ +diff --git a/node/build_node_bridge.py.orig b/node/build_node_bridge.py +index e75c2d0..3bdb328 100755 +--- a/node/build_node_bridge.py.orig ++++ b/node/build_node_bridge.py +@@ -97,7 +97,7 @@ def main(args: Optional[List[str]] = None) -> int: + if 'npm_config_libsignal_debug_level_logs' not in os.environ: + features.append('log/release_max_level_info') - out_dir = options.out_dir.strip('"') or os.path.join('build', configuration_name) - -- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] -+ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', 'testing-fns'] +- cmdline = ['cargo', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', ','.join(features)] ++ cmdline = ['cargo', 'auditable', 'build', '--target', cargo_target, '-p', 'libsignal-node', '--features', ','.join(features)] if configuration_name == 'Release': cmdline.append('--release') print("Running '%s'" % (' '.join(cmdline))) diff --git a/backports/signal-desktop/signal-fix-dns-fallback.patch b/backports/signal-desktop/signal-fix-dns-fallback.patch deleted file mode 100644 index b4f54be..0000000 --- a/backports/signal-desktop/signal-fix-dns-fallback.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/ts/scripts/generate-dns-fallback.ts.orig b/ts/scripts/generate-dns-fallback.ts -index dec7023..39f442f 100644 ---- a/ts/scripts/generate-dns-fallback.ts.orig -+++ b/ts/scripts/generate-dns-fallback.ts -@@ -20,7 +20,6 @@ const FALLBACK_DOMAINS = [ - 'cdn3.signal.org', - 'updates2.signal.org', - 'sfu.voip.signal.org', -- 'create.signal.art', - ]; - - async function main() { diff --git a/backports/signal-desktop/signal-show-window-please.patch b/backports/signal-desktop/signal-show-window-please.patch index 39c8381..73c94af 100644 --- a/backports/signal-desktop/signal-show-window-please.patch +++ b/backports/signal-desktop/signal-show-window-please.patch @@ -1,11 +1,13 @@ ---- ./app/main.ts.orig -+++ ./app/main.ts -@@ -721,7 +721,7 @@ - const titleBarOverlay = await getTitleBarOverlay(); +diff --git a/app/main.ts.orig b/app/main.ts +index aa1bec8..bd7c1d5 100644 +--- a/app/main.ts.orig ++++ b/app/main.ts +@@ -690,7 +690,7 @@ async function createWindow() { + : DEFAULT_HEIGHT; const windowOptions: Electron.BrowserWindowConstructorOptions = { - show: false, + show: true, - width: DEFAULT_WIDTH, - height: DEFAULT_HEIGHT, + width, + height, minWidth: MIN_WIDTH, diff --git a/backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch b/backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch new file mode 100644 index 0000000..5eb6919 --- /dev/null +++ b/backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch @@ -0,0 +1,25 @@ +diff --git a/third_party/boringssl/src/crypto/internal.h b/third_party/boringssl/src/crypto/internal.h +index a77102d76..a45f97bcc 100644 +--- a/third_party/boringssl/src/crypto/internal.h ++++ b/third_party/boringssl/src/crypto/internal.h +@@ -1174,6 +1174,11 @@ static inline uint64_t CRYPTO_rotr_u64(uint64_t value, int shift) { + + // Arithmetic functions. + ++// The most efficient versions of these functions on GCC and Clang depend on C11 ++// |_Generic|. If we ever need to call these from C++, we'll need to add a ++// variant that uses C++ overloads instead. ++#if !defined(__cplusplus) ++ + // CRYPTO_addc_* returns |x + y + carry|, and sets |*out_carry| to the carry + // bit. |carry| must be zero or one. + #if OPENSSL_HAS_BUILTIN(__builtin_addc) +@@ -1275,6 +1280,8 @@ static inline uint64_t CRYPTO_subc_u64(uint64_t x, uint64_t y, uint64_t borrow, + #define CRYPTO_subc_w CRYPTO_subc_u32 + #endif + ++#endif // !__cplusplus ++ + + // FIPS functions. + diff --git a/backports/signal-desktop/webrtc-shared-like-my-wife.patch b/backports/signal-desktop/webrtc-shared-libs.patch similarity index 68% rename from backports/signal-desktop/webrtc-shared-like-my-wife.patch rename to backports/signal-desktop/webrtc-shared-libs.patch index bd7115a..7bfbd7f 100644 --- a/backports/signal-desktop/webrtc-shared-like-my-wife.patch +++ b/backports/signal-desktop/webrtc-shared-libs.patch @@ -26,3 +26,15 @@ suppressed_configs += [ "//build/config/compiler:thin_archive" ] defines = [] +diff --git a/third_party/googletest/BUILD.gn.orig b/third_party/googletest/BUILD.gn +index 14089f0..b7dc621 100644 +--- a/third_party/googletest/BUILD.gn.orig ++++ b/third_party/googletest/BUILD.gn +@@ -48,7 +48,6 @@ config("gtest_config") { + + configs = [ + "//third_party/abseil-cpp:absl_include_config", +- "//third_party/re2:re2_config", + ] + } + From 7ffb4b3105657408c99c64bf360be6df9bc814c9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 9 Sep 2024 13:27:21 -0400 Subject: [PATCH 435/738] backports/signal-desktop: upgrade to 7.23.0 --- backports/signal-desktop/APKBUILD | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index ce68f67..47e3475 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.22.2 +pkgver=7.23.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -67,14 +67,14 @@ options="net !check" _libsignalver=0.55.1 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.46.1 +_ringrtcver=2.46.2 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6478j +_webrtcver=6478k # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION -# last bsqlite version: 8.7.1 +# last bsqlite version: 8.8.0 _stokenizerver=0.2.1 source=" @@ -464,10 +464,10 @@ package() { } sha512sums=" -20d09f64ddb8e42f314aa1538df55e4fa18b1b1b647a1434bd38122fe26cbf18c699f81d415e751dbec1888d0eb5020fb366129bf293cd28e26eaacf456bcbfb Signal-Desktop-7.22.2.tar.gz +b0dafc7e689ddd60aee36c0d5c0ce6335c1ba36050cdc5036225caf3fc9645d2103f403b7765eed3c82ede3247790905e53bbcc0e7365b053f3000eefe02de1d Signal-Desktop-7.23.0.tar.gz 2179eb6862ceb9e3a1df04a4e9b9bb3d64ce84f017d3048f0aaafdd4960843230216443139ff1a8127b6901e9859a2f2ed59e12f2ba9ffc906f79107d7fc161f libsignal-0.55.1.tar.gz -c941e7016e96acbba615a9ba12d91882f83b64656b40b6de26e1dc21abf4aea29ed49459c5bd60e43df65a93103cb6878d3d7bb17c597fd88a807c3f6e71c41e ringrtc-2.46.1.tar.gz -0de4999800eea98bd38d785fcf6683a6f431f98483ca91dcf8ca721d5eecd197043db564bacd2dc583442fe3b43affda61c02230b044b4d4c05fbb6e11741ea5 webrtc-6478j.tar.zst +ff85a50d39cf0a431e813d091e94cb0c7e4298a2eb7d85c23d034ebf83a33f0032d81717a65265a1a8dfa66453923ba0051135f8cbca1f98c1b43d506270130e ringrtc-2.46.2.tar.gz +33877b01787834ebf77b98028e04c8201a53daea4671f445c2ce6a3be6a6befbdc6dcc9c03da0582d10b547cb63c0bfeed9ffa5ca04e1d586abd6c09355ec853 webrtc-6478k.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch From 8ffac41cb87d23846eb52cdd7ea743e0f409648a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 12 Sep 2024 13:11:30 -0400 Subject: [PATCH 436/738] backports/signal-desktop: upgrade to 7.24.0 --- backports/signal-desktop/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 47e3475..aca8b8c 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.23.0 +pkgver=7.24.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -81,7 +81,7 @@ source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz - https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst + https://ayakael.net/api/packages/mirrors/generic/signal-desktop/v$pkgver/webrtc-$_webrtcver.tar.zst https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz bettersqlite-use-system-sqlcipher.patch @@ -464,10 +464,10 @@ package() { } sha512sums=" -b0dafc7e689ddd60aee36c0d5c0ce6335c1ba36050cdc5036225caf3fc9645d2103f403b7765eed3c82ede3247790905e53bbcc0e7365b053f3000eefe02de1d Signal-Desktop-7.23.0.tar.gz +df9f49462b5dcc6379c36e2179e2aa8f896a4ca8de1d7270e71be30e3f80321b8b0eec8d93e99624628a8af01a287a2a0e52457e8b302d5f1bbda8d30eaa77a8 Signal-Desktop-7.24.0.tar.gz 2179eb6862ceb9e3a1df04a4e9b9bb3d64ce84f017d3048f0aaafdd4960843230216443139ff1a8127b6901e9859a2f2ed59e12f2ba9ffc906f79107d7fc161f libsignal-0.55.1.tar.gz ff85a50d39cf0a431e813d091e94cb0c7e4298a2eb7d85c23d034ebf83a33f0032d81717a65265a1a8dfa66453923ba0051135f8cbca1f98c1b43d506270130e ringrtc-2.46.2.tar.gz -33877b01787834ebf77b98028e04c8201a53daea4671f445c2ce6a3be6a6befbdc6dcc9c03da0582d10b547cb63c0bfeed9ffa5ca04e1d586abd6c09355ec853 webrtc-6478k.tar.zst +98b239a10dfdd972d2dbb62950f461935d831f3f305a4b236667dd31d35da504a8bf45c28eb74c045dce84a225ef4d1bbf97a70eda03183cf56bcc65995cd28b webrtc-6478k.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch From b9b609bedfe8a169b7824f69d108a91da3532585 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 12 Sep 2024 20:26:08 -0400 Subject: [PATCH 437/738] backports/signal-desktop: upgrade to 7.24.1 --- backports/signal-desktop/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index aca8b8c..198cef7 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.24.0 +pkgver=7.24.1 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -81,7 +81,7 @@ source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz - https://ayakael.net/api/packages/mirrors/generic/signal-desktop/v$pkgver/webrtc-$_webrtcver.tar.zst + https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz bettersqlite-use-system-sqlcipher.patch @@ -464,10 +464,10 @@ package() { } sha512sums=" -df9f49462b5dcc6379c36e2179e2aa8f896a4ca8de1d7270e71be30e3f80321b8b0eec8d93e99624628a8af01a287a2a0e52457e8b302d5f1bbda8d30eaa77a8 Signal-Desktop-7.24.0.tar.gz +abea63881d3c32f1e607ad498c6376826858e410d7a140e0dc5d3b8a4f294c9f290e24c1905f3ae37d0e8c16bdd31d87f0eb4a797bf3876d7977ea401c128e80 Signal-Desktop-7.24.1.tar.gz 2179eb6862ceb9e3a1df04a4e9b9bb3d64ce84f017d3048f0aaafdd4960843230216443139ff1a8127b6901e9859a2f2ed59e12f2ba9ffc906f79107d7fc161f libsignal-0.55.1.tar.gz ff85a50d39cf0a431e813d091e94cb0c7e4298a2eb7d85c23d034ebf83a33f0032d81717a65265a1a8dfa66453923ba0051135f8cbca1f98c1b43d506270130e ringrtc-2.46.2.tar.gz -98b239a10dfdd972d2dbb62950f461935d831f3f305a4b236667dd31d35da504a8bf45c28eb74c045dce84a225ef4d1bbf97a70eda03183cf56bcc65995cd28b webrtc-6478k.tar.zst +aba08248d983537c0e92bd13578e67b29c974cde8c554af72b29196a4443d1127546b5bc9a5ceec1793cc20becd235584598297d42eeceb504cc373d63ed23df webrtc-6478k.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch From f82ac83d0bfc3d51ab895734f1695d1764405808 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 18 Sep 2024 21:01:16 -0400 Subject: [PATCH 438/738] backports/signal-desktop: upgrade to 7.25.0 --- backports/signal-desktop/APKBUILD | 22 ++++++++-------- ...l-c7019036-do-not-define-crypto_addc.patch | 25 ------------------- .../signal-desktop/webrtc-shared-libs.patch | 24 ++++++++++++++++++ 3 files changed, 34 insertions(+), 37 deletions(-) delete mode 100644 backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 198cef7..5d25c7a 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.24.1 +pkgver=7.25.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -64,14 +64,14 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.55.1 +_libsignalver=0.56.1 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.46.2 +_ringrtcver=2.47.0 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6478k +_webrtcver=6613a # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.8.0 @@ -93,7 +93,6 @@ source=" webrtc-shared-libs.patch webrtc-compiler.patch webrtc-gcc13.patch - webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch signal-desktop " @@ -238,7 +237,7 @@ prepare() { \! -path "*third_party/$_lib/chromium/*" \ \! -path "*third_party/$_lib/google/*" \ \! -path './base/third_party/icu/*' \ - \! -path './third_party/libxml/*' \ + \! -path './third_party/re2/*' \ \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ \! -path './third_party/crashpad/crashpad/third_party/zlib/zlib_crashpad.h' \ @@ -464,10 +463,10 @@ package() { } sha512sums=" -abea63881d3c32f1e607ad498c6376826858e410d7a140e0dc5d3b8a4f294c9f290e24c1905f3ae37d0e8c16bdd31d87f0eb4a797bf3876d7977ea401c128e80 Signal-Desktop-7.24.1.tar.gz -2179eb6862ceb9e3a1df04a4e9b9bb3d64ce84f017d3048f0aaafdd4960843230216443139ff1a8127b6901e9859a2f2ed59e12f2ba9ffc906f79107d7fc161f libsignal-0.55.1.tar.gz -ff85a50d39cf0a431e813d091e94cb0c7e4298a2eb7d85c23d034ebf83a33f0032d81717a65265a1a8dfa66453923ba0051135f8cbca1f98c1b43d506270130e ringrtc-2.46.2.tar.gz -aba08248d983537c0e92bd13578e67b29c974cde8c554af72b29196a4443d1127546b5bc9a5ceec1793cc20becd235584598297d42eeceb504cc373d63ed23df webrtc-6478k.tar.zst +ff7c2ad5aee387187e6f95e435f378f478c3b324d199b383677c8b1623af0eb0dec903769b14bce31cb47bbd70be23659ccc2168353bbf31076eb278d61855f4 Signal-Desktop-7.25.0.tar.gz +d3bfab26254b52b0be12712a895b9bff6268cdb9a052eae0072c4fb2116af86de6e136e3678eb85ca0e0d0b9af8b8f6075f0e4a39bf66c84d16fd4c9cee22bda libsignal-0.56.1.tar.gz +7a4bde7723f96b81e87201b917872b0785aa874504d0056ba06ea0b0d693b0ded54774398b72b6027df499e85f54d862b4e11a190beb253810554e21115a4eae ringrtc-2.47.0.tar.gz +4d301d48181ef8b1aec5110e9efd0091626193be9e2f9f84169823687ecd443606188c1b95892e362764783f99951df32c02a245f9bb8570e0dd98eef1e04440 webrtc-6613a.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch @@ -475,9 +474,8 @@ be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67 d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch bfc8acdd13aa48d29c7657311733cc9d33c4899782efbd1ef6d25ad1698be4de7cc67e829324bc0309715d69ae37ea9f782cf54887317e817213e110d73d68e7 signal-show-window-please.patch b11fdd930943ca327650e4738ed85cd6b5eea779455a5895bccebba98e449bafc6b0f09bcf4545f2b2e16644355664e9768dd6d4d62f87619207c430367f72c5 ringrtc-webrtc-renamed.patch -f4e80ed7e67b98d6988c69ab5025286be17db29dc90f90bf837133cd8ae737f46293e6a2432b02f98c300ed461653b5a66801ff957a418c6a7c33877e3fe0443 webrtc-shared-libs.patch +0888673ba687747beda61cd50efbc25095f4a3d26f1dd58bf003e3a0bf1d302c3f2ebd1deecf630fbf04aedb7b8cd409e9efda4d1e6fda63234c9a9b9755bff4 webrtc-shared-libs.patch e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch 88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch -2721dce75ed1b6cd8bff129cd90d05ea07ce61cafd9145913748cb1f4e58d4c042c3c43efc578ad84e15624937b7ed67b8d5fec3d764e7feb26ff28f86cacd77 webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch 87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop " diff --git a/backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch b/backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch deleted file mode 100644 index 5eb6919..0000000 --- a/backports/signal-desktop/webrtc-boringssl-c7019036-do-not-define-crypto_addc.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/third_party/boringssl/src/crypto/internal.h b/third_party/boringssl/src/crypto/internal.h -index a77102d76..a45f97bcc 100644 ---- a/third_party/boringssl/src/crypto/internal.h -+++ b/third_party/boringssl/src/crypto/internal.h -@@ -1174,6 +1174,11 @@ static inline uint64_t CRYPTO_rotr_u64(uint64_t value, int shift) { - - // Arithmetic functions. - -+// The most efficient versions of these functions on GCC and Clang depend on C11 -+// |_Generic|. If we ever need to call these from C++, we'll need to add a -+// variant that uses C++ overloads instead. -+#if !defined(__cplusplus) -+ - // CRYPTO_addc_* returns |x + y + carry|, and sets |*out_carry| to the carry - // bit. |carry| must be zero or one. - #if OPENSSL_HAS_BUILTIN(__builtin_addc) -@@ -1275,6 +1280,8 @@ static inline uint64_t CRYPTO_subc_u64(uint64_t x, uint64_t y, uint64_t borrow, - #define CRYPTO_subc_w CRYPTO_subc_u32 - #endif - -+#endif // !__cplusplus -+ - - // FIPS functions. - diff --git a/backports/signal-desktop/webrtc-shared-libs.patch b/backports/signal-desktop/webrtc-shared-libs.patch index 7bfbd7f..3916fe0 100644 --- a/backports/signal-desktop/webrtc-shared-libs.patch +++ b/backports/signal-desktop/webrtc-shared-libs.patch @@ -38,3 +38,27 @@ index 14089f0..b7dc621 100644 ] } +diff --git a/third_party/googletest/BUILD.gn.orig b/third_party/googletest/BUILD.gn +index b7dc621..367f929 100644 +--- a/third_party/googletest/BUILD.gn.orig ++++ b/third_party/googletest/BUILD.gn +@@ -133,7 +133,6 @@ source_set("gtest") { + + # googletest only needs `absl`, but this makes gn check happier. + deps = [ "//third_party/abseil-cpp:absl_full" ] +- public_deps = [ "//third_party/re2" ] + if (is_nacl || !build_with_chromium) { + defines += [ "GTEST_DISABLE_PRINT_STACK_TRACE" ] + sources -= [ +diff --git a/third_party/fuzztest/BUILD.gn.orig b/third_party/fuzztest/BUILD.gn +index 57ee790..ba1d297 100644 +--- a/third_party/fuzztest/BUILD.gn.orig ++++ b/third_party/fuzztest/BUILD.gn +@@ -309,7 +309,6 @@ source_set("fuzztest_internal") { + # For RE2 mutators. It's questionable whether we want to pull this library + # into every fuzztest target, but this is the approach used in other + # fuzztest contexts so we'll do the same +- "//third_party/re2", + + # For protobuf mutators + "$protobuf_target_prefix:protobuf_lite", From 714437157cbac0888c1aa21862bfea17acdce265 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 26 Sep 2024 09:16:53 -0400 Subject: [PATCH 439/738] user/zotero: upgrade to 7.0.6 --- user/zotero/APKBUILD | 10 ++-- user/zotero/rust1.78-qcms-stdsimd.patch | 64 ------------------------- 2 files changed, 4 insertions(+), 70 deletions(-) delete mode 100644 user/zotero/rust1.78-qcms-stdsimd.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index f6c9803..04c4e73 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,9 +1,9 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.3 +pkgver=7.0.6 pkgrel=0 -_fxver=115.9.1 +_fxver=115.14.0 _gittag=$pkgver # Date of release, YY-MM-DD for metainfo file (see package()) # https://www.mozilla.org/firefox/organizations/notes/ @@ -85,7 +85,6 @@ source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox python-deps.patch rust-lto-thin.patch rust1.78-packed-to-portable_simd.patch - rust1.78-qcms-stdsimd.patch sandbox-fork.patch sandbox-largefile.patch sandbox-sched_setscheduler.patch @@ -365,7 +364,7 @@ package() { } sha512sums=" -9ccaede2fcda13a07f98a2110bb8f99c7324601d66bff311f3070a669576a1598fe1d7de2d005d725d1f44dbe3934a9c0fd0b7950f60686047d4ce8d9d812310 firefox-115.9.1esr.source.tar.xz +dd40c1fd3cf454dbf33a85d38e47bb0e736ed89b829643653e239f43232441f4e9f3c7876f058ff2e6f19daf2b50a8f2d13274e9a107d8a258a6067d1fc43f54 firefox-115.14.0esr.source.tar.xz 3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch 454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch 2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch @@ -383,7 +382,6 @@ b586ddb21b50fa8fba798c3a269518049c38cc52fd91ad00e96a3f1144e6b2879d9df1a182a2fb18 4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch 1c6918dd6655d3a1251bfd4af2e1c561cbb00d540a883b4c1ebf7f5de530d754d9ac07b4b5f56cdab6c511d25c8910ec94043f5733e97501a67abffe1bafaeb1 rust-lto-thin.patch e4795b88e572bb3b6f009dbacc7872b59db2f8facbe2b07f14dd4f45a77c22049783581869f18c6bb3f04d6edb3da59347278321cce2bfa629a4d35e136cda5c rust1.78-packed-to-portable_simd.patch -eae1afad93cc5fa7699b156619600ca4b41e67943b8b6e05ab972d449aece93bbf1e68a5ea1a7b1c9278633dbf7cf31503255558e3e06ddf168b3937a0e014e8 rust1.78-qcms-stdsimd.patch 2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch @@ -391,7 +389,7 @@ f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e71106951 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -48c7106f0d20b5f1fba2a4b846282c627a5654ac8579f8a7cdb202b187416311f5eb32827ac6e972d1815348bd2ad00bd10bcff1a4ca8efc9b4b07b4e3e825dc zotero-7.0.3.tar.gz +805c19cff5bedc510000be4cbaaf4c3ad3ac93d164fc88f35bf29150df00673534d0dd6da461e2e4a040f9f3c72574fb057487319c4638033d190fe06f05802f zotero-7.0.6.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch 337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch diff --git a/user/zotero/rust1.78-qcms-stdsimd.patch b/user/zotero/rust1.78-qcms-stdsimd.patch deleted file mode 100644 index 2c86aa1..0000000 --- a/user/zotero/rust1.78-qcms-stdsimd.patch +++ /dev/null @@ -1,64 +0,0 @@ -Relevant bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1882291 - - -diff --git a/Cargo.lock b/Cargo.lock ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -4274,10 +4274,11 @@ - [[package]] - name = "qcms" - version = "0.2.0" - dependencies = [ - "libc", -+ "version_check", - ] - - [[package]] - name = "qlog" - version = "0.4.0" -diff --git a/gfx/qcms/Cargo.toml b/gfx/qcms/Cargo.toml ---- a/gfx/qcms/Cargo.toml -+++ b/gfx/qcms/Cargo.toml -@@ -18,5 +18,8 @@ - iccv4-enabled = [] - cmyk = [] - - [dependencies] - libc = {version = "0.2", optional = true } -+ -+[build-dependencies] -+version_check = "0.9" -diff --git a/gfx/qcms/build.rs b/gfx/qcms/build.rs -new file mode 100644 ---- /dev/null -+++ b/gfx/qcms/build.rs -@@ -0,0 +1,7 @@ -+extern crate version_check as rustc; -+ -+fn main() { -+ if rustc::is_min_version("1.78.0").unwrap_or(false) { -+ println!("cargo:rustc-cfg=stdsimd_split"); -+ } -+} -diff --git a/gfx/qcms/src/lib.rs b/gfx/qcms/src/lib.rs ---- a/gfx/qcms/src/lib.rs -+++ b/gfx/qcms/src/lib.rs -@@ -5,13 +5,15 @@ - #![allow(non_camel_case_types)] - #![allow(non_snake_case)] - #![allow(non_upper_case_globals)] - // These are needed for the neon SIMD code and can be removed once the MSRV supports the - // instrinsics we use --#![cfg_attr(feature = "neon", feature(stdsimd))] -+#![cfg_attr(all(stdsimd_split, target_arch = "arm", feature = "neon"), feature(stdarch_arm_neon_intrinsics))] -+#![cfg_attr(all(stdsimd_split, target_arch = "arm", feature = "neon"), feature(stdarch_arm_feature_detection))] -+#![cfg_attr(all(not(stdsimd_split), target_arch = "arm", feature = "neon"), feature(stdsimd))] - #![cfg_attr( -- feature = "neon", -+ all(target_arch = "arm", feature = "neon"), - feature(arm_target_feature, raw_ref_op) - - )] - - /// These values match the Rendering Intent values from the ICC spec - From 7e216008680396deac9201af796afd513480120f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 27 Sep 2024 10:13:09 -0400 Subject: [PATCH 440/738] backports/signal-desktop: upgrade to 7.26.0 --- backports/signal-desktop/APKBUILD | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 5d25c7a..7dbe1db 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=signal-desktop -pkgver=7.25.0 +pkgver=7.26.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -64,14 +64,14 @@ makedepends=" options="net !check" # follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.56.1 +_libsignalver=0.58.0 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.47.0 +_ringrtcver=2.47.1 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6613a +_webrtcver=6613b # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.8.0 @@ -463,10 +463,10 @@ package() { } sha512sums=" -ff7c2ad5aee387187e6f95e435f378f478c3b324d199b383677c8b1623af0eb0dec903769b14bce31cb47bbd70be23659ccc2168353bbf31076eb278d61855f4 Signal-Desktop-7.25.0.tar.gz -d3bfab26254b52b0be12712a895b9bff6268cdb9a052eae0072c4fb2116af86de6e136e3678eb85ca0e0d0b9af8b8f6075f0e4a39bf66c84d16fd4c9cee22bda libsignal-0.56.1.tar.gz -7a4bde7723f96b81e87201b917872b0785aa874504d0056ba06ea0b0d693b0ded54774398b72b6027df499e85f54d862b4e11a190beb253810554e21115a4eae ringrtc-2.47.0.tar.gz -4d301d48181ef8b1aec5110e9efd0091626193be9e2f9f84169823687ecd443606188c1b95892e362764783f99951df32c02a245f9bb8570e0dd98eef1e04440 webrtc-6613a.tar.zst +0d13b30dcfc96c8eba04767e77f9311bff8ddc63ea3829a0de445f2fc126ec0f2f85c131394523f94912eb4a18ec389230a0145b6e496776acf38773edaabb30 Signal-Desktop-7.26.0.tar.gz +6fb62213d8177ac5abe83ea71a18ea4b1c7b323983c41087166658fe9c47c1fd39e5323ca6acefe3db2a9a9376b6f385b5f2c006154da3ab705741d848b28943 libsignal-0.58.0.tar.gz +8e5b2ccdf2e80f8fbdd7454fb5909f6f15d51cba05c61f96aee6601db49ea4a712559b554d0e0cdc29254e7903f91edb4cb5acd254f492ef02de52952bea5456 ringrtc-2.47.1.tar.gz +05979588c2cc358c8efec853037aa276fec56c0d583c255467c262caf68263bb6eb761fd2d231340c9d35d99faef9317984293f446f891e5d6be34fa090c8ae5 webrtc-6613b.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch From 63f6a6099fb9ce1c34a8b8cb83cdf412e9c1de0c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 27 Sep 2024 17:32:59 -0400 Subject: [PATCH 441/738] backports/signal-desktop: import upstream changes --- backports/signal-desktop/APKBUILD | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 7dbe1db..6b79d5f 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -1,5 +1,6 @@ # Contributor: lauren n. liberda -# Maintainer: lauren n. liberda +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop pkgver=7.26.0 pkgrel=0 @@ -237,6 +238,7 @@ prepare() { \! -path "*third_party/$_lib/chromium/*" \ \! -path "*third_party/$_lib/google/*" \ \! -path './base/third_party/icu/*' \ + \! -path './third_party/libxml/*' \ \! -path './third_party/re2/*' \ \! -path './third_party/pdfium/third_party/freetype/include/pstables.h' \ \! -path './third_party/harfbuzz-ng/utils/hb_scoped.h' \ @@ -292,7 +294,7 @@ prepare() { sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp msg "Installing libsignal js dependencies" - npm install --ignore-scripts + yarn --ignore-scripts --frozen-lockfile ) # remove shipped fonts for system-provided (part 1) @@ -358,7 +360,6 @@ build() { ( cd "$srcdir"/ringrtc-$_ringrtcver/src/node msg "Building ringrtc JS glue code" - npm ci --ignore-scripts npm run build msg "Cleaning dev dependencies for ringrtc" @@ -377,7 +378,6 @@ build() { mv build/Release/libsignal_client_linux_$chromium_arch.node prebuilds/linux-$chromium_arch/node.napi.node msg "Building libsignal glue code" - npm ci --ignore-scripts npm run tsc msg "Cleaning dev dependencies for libsignal" @@ -398,7 +398,7 @@ build() { rm -rf node_modules/dtrace-provider # get esbuild installed (needed for next step) - npm install esbuild + npm rebuild esbuild # build front NODE_ENV=production \ From b306518289c245c0a3386add841efdc79844a38e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 7 Oct 2024 09:37:14 -0400 Subject: [PATCH 442/738] testing/signal-desktop: upgrade to 7.27.0 --- backports/signal-desktop/APKBUILD | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 6b79d5f..4ff9961 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.26.0 +pkgver=7.27.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -68,11 +68,11 @@ options="net !check" _libsignalver=0.58.0 # follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.47.1 +_ringrtcver=2.48.0 # follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) -_webrtcver=6613b +_webrtcver=6613c # follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION # last bsqlite version: 8.8.0 @@ -463,10 +463,10 @@ package() { } sha512sums=" -0d13b30dcfc96c8eba04767e77f9311bff8ddc63ea3829a0de445f2fc126ec0f2f85c131394523f94912eb4a18ec389230a0145b6e496776acf38773edaabb30 Signal-Desktop-7.26.0.tar.gz +307dafec0926092afb3ec8db90325b720cef227e2c41d2b7e5d4128d3a314b98793df4380a22743887a3eef7243a0dec3ce456b881508591bf9fdd4b002d7642 Signal-Desktop-7.27.0.tar.gz 6fb62213d8177ac5abe83ea71a18ea4b1c7b323983c41087166658fe9c47c1fd39e5323ca6acefe3db2a9a9376b6f385b5f2c006154da3ab705741d848b28943 libsignal-0.58.0.tar.gz -8e5b2ccdf2e80f8fbdd7454fb5909f6f15d51cba05c61f96aee6601db49ea4a712559b554d0e0cdc29254e7903f91edb4cb5acd254f492ef02de52952bea5456 ringrtc-2.47.1.tar.gz -05979588c2cc358c8efec853037aa276fec56c0d583c255467c262caf68263bb6eb761fd2d231340c9d35d99faef9317984293f446f891e5d6be34fa090c8ae5 webrtc-6613b.tar.zst +ea85f7a5d0ac994480554f0a64fef2d4e60537fb8e2775824d152167c8ca83021371bdd923fa73a87664df15a661d818a6179ac67a7b47d29f8b5e3d6d1fa6fe ringrtc-2.48.0.tar.gz +fe04fcf13f55b124f03ce9d516b1c53fc4f20c6a016819c62eeaa0500eda92c5a0c0d7dc5d1e360a27691dfd404c254e91bed9fb25d0fc40a27795c1b674a82e webrtc-6613c.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch 2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch From 623d98575eb14f2b04b6feb104006b1c41751a1c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 7 Oct 2024 09:52:25 -0400 Subject: [PATCH 443/738] user/zotero: upgrade to 7.0.7 --- user/zotero/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD index 04c4e73..d93720d 100644 --- a/user/zotero/APKBUILD +++ b/user/zotero/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=zotero -pkgver=7.0.6 +pkgver=7.0.7 pkgrel=0 _fxver=115.14.0 _gittag=$pkgver @@ -389,7 +389,7 @@ f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e71106951 382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -805c19cff5bedc510000be4cbaaf4c3ad3ac93d164fc88f35bf29150df00673534d0dd6da461e2e4a040f9f3c72574fb057487319c4638033d190fe06f05802f zotero-7.0.6.tar.gz +ba04ec60afd2e9f9500046128b60f1c68b0ac7e47f5fbbc4f4fbfde01df982eb1561d65fb0aef9bee4ee098c4babc5e9caa4c9e791ad616bb55d7a0523349f34 zotero-7.0.7.tar.gz 746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch 337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch From eef1e89d88385017f522327574e4e0844c912941 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 9 Oct 2024 18:23:19 -0400 Subject: [PATCH 444/738] backports/signal-desktop: upgrade to 7.28.0 --- backports/signal-desktop/APKBUILD | 39 ++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 4ff9961..c89d74f 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.27.0 +pkgver=7.28.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -64,18 +64,10 @@ makedepends=" " options="net !check" -# follow signal-desktop package.json -> @signalapp/libsignal-client -_libsignalver=0.58.0 - -# follow signal-desktop package.json -> @signalapp/ringrtc -_ringrtcver=2.48.0 - -# follow ringrtc (on version above) -> config/version.properties -> webrtc.version -# downloading tarball generated with abuild snapshot (with gclient dependencies fetched) +# use _check_depends to validate this + _libsignalver=0.58.0 +_ringrtcver=2.48.1 _webrtcver=6613c - -# follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION -# last bsqlite version: 8.8.0 _stokenizerver=0.2.1 source=" @@ -119,6 +111,25 @@ export CARGO_PROFILE_RELEASE_STRIP="symbols" export YARN_CACHE_FOLDER="$srcdir/.yarn" +_check_depends() { + # _libsignalver: follow signal-desktop package.json -> @signalapp/libsignal-client + # _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc + # _webrtcver: follow ringrtc (on version above) -> config/version.properties -> webrtc.version + # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) + # _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION + + local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) + local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) + local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/better-sqlite3\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) + local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1) + local _stokenizerver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const TOKENIZER_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' | head -n 1) + + echo _libsignalver=$_libsignalver + echo _ringrtcver=$_ringrtcver + echo _webrtcver=$_webrtcver + echo _stokenizerver=$_stokenizerver +} + # webrtc only, the other dependencies are fine with tarballs _distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { @@ -463,9 +474,9 @@ package() { } sha512sums=" -307dafec0926092afb3ec8db90325b720cef227e2c41d2b7e5d4128d3a314b98793df4380a22743887a3eef7243a0dec3ce456b881508591bf9fdd4b002d7642 Signal-Desktop-7.27.0.tar.gz +fa557adb65bce33d7c5823c39603ceda8c4f5743d078153f967f94eb423ff0f30eac3a7252fcfdee56b45b5f27f73a86614732171bd9bb474f9f48615daca6f0 Signal-Desktop-7.28.0.tar.gz 6fb62213d8177ac5abe83ea71a18ea4b1c7b323983c41087166658fe9c47c1fd39e5323ca6acefe3db2a9a9376b6f385b5f2c006154da3ab705741d848b28943 libsignal-0.58.0.tar.gz -ea85f7a5d0ac994480554f0a64fef2d4e60537fb8e2775824d152167c8ca83021371bdd923fa73a87664df15a661d818a6179ac67a7b47d29f8b5e3d6d1fa6fe ringrtc-2.48.0.tar.gz +0190f5a08a9107c818a4770fe37c8b56bd11a99b5514da27cf0941e03b5681fb710b31d9474d05bcf2ac4035ef8703b6767c1780e25edff02ed982d73d8a8e42 ringrtc-2.48.1.tar.gz fe04fcf13f55b124f03ce9d516b1c53fc4f20c6a016819c62eeaa0500eda92c5a0c0d7dc5d1e360a27691dfd404c254e91bed9fb25d0fc40a27795c1b674a82e webrtc-6613c.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch From d24323205e463b4b637a13578df372bd403074cd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 09:13:40 -0400 Subject: [PATCH 445/738] backports/signal-desktop: upgrade to 7.28.0 --- backports/signal-desktop/APKBUILD | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index c89d74f..b96bba4 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -9,6 +9,7 @@ url="https://github.com/signalapp/Signal-Desktop/" # same as electron arch="aarch64 x86_64" license="AGPL-3.0-only" +_llvmver=18 depends=" electron font-barlow @@ -24,7 +25,7 @@ makedepends=" cargo cargo-auditable cbindgen - clang-dev + clang$_llvmver-dev cmake crc32c-dev dav1d-dev @@ -44,8 +45,8 @@ makedepends=" libvpx-dev libwebp-dev libxml2-dev - lld - llvm-dev + lld$_llvmver + llvm$_llvmver-dev mesa-dev nodejs npm From 15d01121bac8801cbef2b37c1988865f0e1a0c59 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:04:33 -0400 Subject: [PATCH 446/738] user/zotero: drop due to in aports --- user/zotero/APKBUILD | 398 -- user/zotero/audio-lfs64.patch | 61 - user/zotero/disable-moz-stackwalk.patch | 18 - user/zotero/fix-fortify-system-wrappers.patch | 13 - user/zotero/fix-rust-target.patch | 31 - user/zotero/fix-webrtc-glibcisms.patch | 20 - user/zotero/icu74.patch | 38 - user/zotero/lfs64.patch | 35 - user/zotero/llvm18-bindgen.patch | 619 --- user/zotero/llvm18.patch | 23 - user/zotero/moz-system-jpeg.patch | 15 - user/zotero/mozilla-location.keys | 1 - user/zotero/no-ccache-stats.patch | 13 - user/zotero/nrappkit-qsort.patch | 34 - user/zotero/ppc-musttail.patch | 30 - user/zotero/ppc-webrtc.patch | 23 - user/zotero/python-deps.patch | 12 - user/zotero/rust-lto-thin.patch | 12 - .../rust1.78-packed-to-portable_simd.patch | 3582 ----------------- user/zotero/sandbox-fork.patch | 15 - user/zotero/sandbox-largefile.patch | 17 - user/zotero/sandbox-sched_setscheduler.patch | 24 - user/zotero/stab.h | 71 - user/zotero/vendor-prefs.js | 12 - user/zotero/zotero.desktop | 9 - user/zotero/zotero_build-modifications.patch | 144 - user/zotero/zotero_drop-jazzer.patch | 12 - user/zotero/zotero_test-drop-build.patch | 23 - user/zotero/zotero_test-fix-chars.patch | 16 - .../zotero_test-push-timeout-to-30sec.patch | 13 - 30 files changed, 5334 deletions(-) delete mode 100644 user/zotero/APKBUILD delete mode 100644 user/zotero/audio-lfs64.patch delete mode 100644 user/zotero/disable-moz-stackwalk.patch delete mode 100644 user/zotero/fix-fortify-system-wrappers.patch delete mode 100644 user/zotero/fix-rust-target.patch delete mode 100644 user/zotero/fix-webrtc-glibcisms.patch delete mode 100644 user/zotero/icu74.patch delete mode 100644 user/zotero/lfs64.patch delete mode 100644 user/zotero/llvm18-bindgen.patch delete mode 100644 user/zotero/llvm18.patch delete mode 100644 user/zotero/moz-system-jpeg.patch delete mode 100644 user/zotero/mozilla-location.keys delete mode 100644 user/zotero/no-ccache-stats.patch delete mode 100644 user/zotero/nrappkit-qsort.patch delete mode 100644 user/zotero/ppc-musttail.patch delete mode 100644 user/zotero/ppc-webrtc.patch delete mode 100644 user/zotero/python-deps.patch delete mode 100644 user/zotero/rust-lto-thin.patch delete mode 100644 user/zotero/rust1.78-packed-to-portable_simd.patch delete mode 100644 user/zotero/sandbox-fork.patch delete mode 100644 user/zotero/sandbox-largefile.patch delete mode 100644 user/zotero/sandbox-sched_setscheduler.patch delete mode 100644 user/zotero/stab.h delete mode 100644 user/zotero/vendor-prefs.js delete mode 100644 user/zotero/zotero.desktop delete mode 100644 user/zotero/zotero_build-modifications.patch delete mode 100644 user/zotero/zotero_drop-jazzer.patch delete mode 100644 user/zotero/zotero_test-drop-build.patch delete mode 100644 user/zotero/zotero_test-fix-chars.patch delete mode 100644 user/zotero/zotero_test-push-timeout-to-30sec.patch diff --git a/user/zotero/APKBUILD b/user/zotero/APKBUILD deleted file mode 100644 index d93720d..0000000 --- a/user/zotero/APKBUILD +++ /dev/null @@ -1,398 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=zotero -pkgver=7.0.7 -pkgrel=0 -_fxver=115.14.0 -_gittag=$pkgver -# Date of release, YY-MM-DD for metainfo file (see package()) -# https://www.mozilla.org/firefox/organizations/notes/ -_releasedate=2024-08-09 -pkgdesc="A free, easy-to-use tool to help you collect, organize, cite, and share your research sources." -url="https://www.mozilla.org/en-US/firefox/organizations/" -# s390x and riscv64: blocked by rust and cargo -# armhf: build failure on armhf due to wasm -# ppc64le: test suite stalls -arch="x86_64 armv7 aarch64 x86" -license="GPL-3.0-only AND LGPL-2.1-only AND LGPL-3.0-only AND MPL-2.0" -depends=" - ffmpeg-libavcodec - " -makedepends=" - alsa-lib-dev - automake - bash - bsd-compat-headers - cargo - cbindgen - clang - clang-libclang - curl - dbus-glib-dev - gettext - grep - gtk+3.0-dev - hunspell-dev - icu-dev>=69.1 - libevent-dev - libffi-dev - libjpeg-turbo-dev - libnotify-dev - libogg-dev - libtheora-dev - libtool - libvorbis-dev - libvpx-dev - libwebp-dev - libxcomposite-dev - libxt-dev - lld - llvm-dev - m4 - mesa-dev - nasm - nodejs - npm - nspr-dev - nss-dev - perl - pipewire-dev - pulseaudio-dev - python3 - rsync - sed - unzip - wasi-sdk - wireless-tools-dev - xvfb-run - zip - " -source="https://ftp.mozilla.org/pub/firefox/releases/${_fxver}esr/source/firefox-${_fxver}esr.source.tar.xz - audio-lfs64.patch - disable-moz-stackwalk.patch - fix-fortify-system-wrappers.patch - fix-rust-target.patch - fix-webrtc-glibcisms.patch - icu74.patch - lfs64.patch - llvm18-bindgen.patch - llvm18.patch - moz-system-jpeg.patch - no-ccache-stats.patch - nrappkit-qsort.patch - ppc-musttail.patch - ppc-webrtc.patch - python-deps.patch - rust-lto-thin.patch - rust1.78-packed-to-portable_simd.patch - sandbox-fork.patch - sandbox-largefile.patch - sandbox-sched_setscheduler.patch - - stab.h - - mozilla-location.keys - vendor-prefs.js - - zotero.desktop - https://ayakael.net/api/packages/mirrors/generic/zotero/$pkgver/zotero-$pkgver.tar.gz - zotero_build-modifications.patch - zotero_test-drop-build.patch - zotero_test-fix-chars.patch - zotero_test-push-timeout-to-30sec.patch - zotero_drop-jazzer.patch - " - -builddir="$srcdir"/firefox-$_fxver -_zoterodir="$srcdir"/zotero-$_gittag -_mozappdir=/usr/lib/zotero - -# help our shared-object scanner to find the libs -ldpath="$_mozappdir" - -# we need this because cargo verifies checksums of all files in vendor -# crates when it builds and gives us no way to override or update the -# file sanely... so just clear out the file list -_clear_vendor_checksums() { - sed -i 's/\("files":{\)[^}]*/\1/' third_party/rust/$1/.cargo-checksum.json -} - -export SHELL=/bin/sh -export BUILD_OFFICIAL=1 -export MOZILLA_OFFICIAL=1 -export USE_SHORT_LIBNAME=1 -export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system -export MOZ_APP_PROFILE="mozilla/firefox" -export MOZ_APP_REMOTINGNAME=firefox-esr -export MOZBUILD_STATE_PATH="$srcdir"/mozbuild -# disable desktop notifications -export MOZ_NOSPAM=1 -# Find our triplet JSON -export RUST_TARGET="$CTARGET" - -# Build with Clang, takes less RAM -export CC="clang" -export CXX="clang++" - -# set rpath so linker finds the libs -export LDFLAGS="$LDFLAGS -Wl,-rpath,$_mozappdir" - -# let firefox do this itself. -unset CARGO_PROFILE_RELEASE_OPT_LEVEL -unset CARGO_PROFILE_RELEASE_LTO - -export CFLAGS="${CFLAGS/-fstack-clash-protection/} -g0 -O2" -export CXXFLAGS="${CXXFLAGS/-fstack-clash-protection/} -g0 -O2 -Wno-deprecated-builtins -Wno-deprecated-declarations" - -prepare() { - # zotero prepare - mv "$_zoterodir" "$builddir"/zotero - ( - cd "$builddir"/zotero - - # checks that we're using expected fx version - local _exp_fxver=$(grep GECKO_VERSION_LINUX "$builddir"/zotero/app/config.sh | sed 's|.*=||' | tr -d '"' | sed 's|esr||') - if [ "$_fxver" != "$_exp_fxver" ]; then - msg "Expected firefox version $_exp_fxver, got $_fxver" - return 1 - fi - - # zotero build expects to be in a git repo - git init - git config user.name info - git config user.email info@example.org - git commit --allow-empty -m 'Initial' - - npm i --legacy-peer-deps - ) - default_prepare - - rm -rf third_party/rust/packed_simd/ - cp "$srcdir"/stab.h toolkit/crashreporter/google-breakpad/src/ - - _clear_vendor_checksums audio_thread_priority - _clear_vendor_checksums bindgen - - base64 -d "$srcdir"/mozilla-location.keys > "$builddir"/mozilla-api-key - - # webrtc does not build on these - case "$CARCH" in - ppc64le) - local webrtc_config="ac_add_options --disable-webrtc" - ;; - esac - case "$CARCH" in - armv7) - # broken here - local rust_simd="ac_add_options --disable-rust-simd" - ;; - *) - local rust_simd="ac_add_options --enable-rust-simd" - ;; - esac - - case "$CARCH" in - aarch64|arm*|x86*) - # disable-elf-hack: exists only on aarch64, arm*, x86, x86_64 - local arch_config="ac_add_options --disable-elf-hack" - ;; - esac - - # sandbox only supported here - case "$CARCH" in - x86*|armv7|aarch64) - local sandbox="ac_add_options --enable-sandbox" - ;; - *) - local sandbox="ac_add_options --disable-sandbox" - ;; - esac - - cat > base-mozconfig <<-EOF - # disable unwanted things - ac_add_options --disable-bootstrap - ac_add_options --disable-cargo-incremental - ac_add_options --disable-crashreporter - ac_add_options --disable-debug - ac_add_options --disable-debug-symbols - ac_add_options --disable-install-strip - ac_add_options --disable-jemalloc - ac_add_options --disable-strip - ac_add_options --disable-tests - ac_add_options --disable-updater - - # features - ac_add_options --enable-alsa - ac_add_options --enable-dbus - ac_add_options --enable-default-toolkit=cairo-gtk3-wayland - ac_add_options --enable-ffmpeg - ac_add_options --enable-hardening - ac_add_options --enable-linker=lld - ac_add_options --enable-necko-wifi - ac_add_options --enable-official-branding - ac_add_options --enable-optimize="$CFLAGS" - ac_add_options --enable-pulseaudio - ac_add_options --enable-release - ac_add_options --enable-update-channel=release - - # system libs - ac_add_options --enable-system-pixman - ac_add_options --with-system-ffi - ac_add_options --with-system-icu - ac_add_options --with-system-jpeg - ac_add_options --with-system-libevent - ac_add_options --with-system-libvpx - ac_add_options --with-system-nspr - ac_add_options --with-system-nss - ac_add_options --with-system-png - ac_add_options --with-system-webp - ac_add_options --with-system-zlib - - # misc - ac_add_options --allow-addon-sideload - ac_add_options --prefix=/usr - ac_add_options --with-app-name=firefox-esr - ac_add_options --with-distribution-id=org.alpinelinux - ac_add_options --with-libclang-path=/usr/lib - ac_add_options --with-unsigned-addon-scopes=app,system - ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot - ac_add_options --host=$CHOST - ac_add_options --target=$CTARGET - - # objdir - mk_add_options MOZ_OBJDIR="$builddir/obj" - - mk_add_options RUSTFLAGS="$RUSTFLAGS" - - # keys - # these are for alpine linux use only - ac_add_options --with-mozilla-api-keyfile="$builddir/mozilla-api-key" - - $arch_config - $rust_simd - $sandbox - $webrtc_config - EOF -} - -build() { - cat > .mozconfig base-mozconfig - - export MOZ_BUILD_DATE=$(date ${SOURCE_DATE_EPOCH:+ -d@${SOURCE_DATE_EPOCH}} "+%Y%m%d%H%M%S") - - # for lto - ulimit -n 4096 - - # can't be set here and fail - unset RUSTFLAGS - - local thinlto_jobs=${JOBS:-1} - - case "$CARCH" in - # on this platforms, lld seems to not utilise >1 threads for thinlto for some reason. - # at the same time, having more than 8 also crashes lld for firefox buildsystems (why?). - aarch64) - if [ $thinlto_jobs -gt 8 ]; then - thinlto_jobs=8 - fi - ;; - esac - - export LDFLAGS="$LDFLAGS -Wl,--thinlto-jobs=$thinlto_jobs" - - case "$CARCH" in - # lto for 64-bit systems only - aarch64|x86_64|ppc64le) - cat > .mozconfig base-mozconfig <<-EOF - ac_add_options --enable-lto=cross - EOF - esac - - ./mach build - - # install to where zotero expects it - DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install - mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. - rm -R "$builddir"/zotero/app/xulrunner/firefox/usr - - # zotero build - ( - cd "$builddir"/zotero - NODE_OPTIONS=--openssl-legacy-provider npm run build - - SKIP_32=1 app/scripts/dir_build -p l - # move to seperate folder as check will rebuild with test files added - mv "$builddir"/zotero/app/staging "$builddir"/zotero/app/package - ) - - rm -R "$builddir"/zotero/app/xulrunner/firefox # clean-up unused firefox install -} - -check() { - # install to where zotero expects it - DESTDIR="$builddir"/zotero/app/xulrunner/firefox ./mach install - mv "$builddir"/zotero/app/xulrunner/firefox/usr/lib/firefox-esr/* "$builddir"/zotero/app/xulrunner/firefox/. - rm -R "$builddir"/zotero/app/xulrunner/firefox/usr - - # zotero test build - ( - cd "$builddir"/zotero - ZOTERO_TEST=1 SKIP_32=1 app/scripts/dir_build -p l - - ) - - # test-suite is not very stable, false failure occur from time to time, thus never fails - CI=true LD_LIBRARY_PATH="$builddir"/zotero/app/staging/Zotero_linux xvfb-run "$builddir"/zotero/test/runtests.sh -x "$builddir"/zotero/app/staging/Zotero_linux/zotero || true - - rm -R "$builddir"/zotero/app/xulrunner/firefox # clean-up unused firefox install -} - -package() { - install -dDm755 "$pkgdir"/usr/bin - install -dDm755 "$pkgdir"/usr/lib/zotero - cp -r "$builddir"/zotero/app/package/Zotero_linux/* "$pkgdir/usr/lib/zotero" - ln -s /usr/lib/zotero/zotero "$pkgdir/usr/bin/zotero" - install -Dm644 "$srcdir/zotero.desktop" "$pkgdir/usr/share/applications/zotero.desktop" - - # Copy zotero icons to a standard location - install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon32.png" "$pkgdir/usr/share/icons/hicolor/32x32/apps/zotero.png" - install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon64.png" "$pkgdir/usr/share/icons/hicolor/64x64/apps/zotero.png" - install -Dm644 "$pkgdir/usr/lib/zotero/icons/icon128.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/zotero.png" - - # Close shell when launching - sed -i -r 's:^("\$CALLDIR/zotero-bin" -app "\$CALLDIR/application.ini" "\$@"):exec \1:' "$pkgdir/usr/lib/zotero/zotero" -} - -sha512sums=" -dd40c1fd3cf454dbf33a85d38e47bb0e736ed89b829643653e239f43232441f4e9f3c7876f058ff2e6f19daf2b50a8f2d13274e9a107d8a258a6067d1fc43f54 firefox-115.14.0esr.source.tar.xz -3e0501ae7a650346c667dfdc0ae0ca286084f22e89ab2ac671cc0d7315673dc5b6dcb9f9882f6f39d26e9a31e57f7a0fd53d6b805e520224e22b8976850e2eb8 audio-lfs64.patch -454ea3263cabce099accbdc47aaf83be26a19f8b5a4568c01a7ef0384601cf8315efd86cd917f9c8bf419c2c845db89a905f3ff9a8eb0c8e41042e93aa96a85c disable-moz-stackwalk.patch -2f4f15974d52de4bb273b62a332d13620945d284bbc6fe6bd0a1f58ff7388443bc1d3bf9c82cc31a8527aad92b0cd3a1bc41d0af5e1800e0dcbd7033e58ffd71 fix-fortify-system-wrappers.patch -cd68b89e29e5f6379fbd5679db27b9a5ef70ea65e51c0d0a8137e1f1fd210e35a8cfb047798e9549bc7275606d7ec5c8d8af1335d29da4699db7acd8bc7ff556 fix-rust-target.patch -305c874fdea3096e9c4c6aa6520ac64bb1c347c4b59db8360096646593fe684c3b5377874d91cecd33d56d1410b4714fbdea2b514923723ecbeff79d51265d9b fix-webrtc-glibcisms.patch -afabea91b328c5a68eaa20f9099ac7b2d0e7f2423e816b05ed168bdd326a5684fa02de08bf05c6033e9b888f02775d1b0443a00329b7a632ee399122a391c13a icu74.patch -5fa9382c692e4bd6a2634308f24a6526fd12a60a2563d2090056d43a60505df3ec9881bbf54562e69394467529b3b0dc45955afca46ed329af03cea074fff070 lfs64.patch -d7a9443cd81d3ef4a6baa1b5d05f2497bc07c1de815a4d85b613b734989e7c589019dd860ea2eb9e32067973efbfd1c913790c6c238778da23d76fbd904128d1 llvm18-bindgen.patch -8c4de34188f634833d99d17bc389c43ab9576b3f0581387407ae77f636a890779cd02786b632fbdfd8b0305575517d51b04f76b9aa3f1a94c3d822578286fc6f llvm18.patch -e28b1fe2967d46c888b41a0a03ee1b6de763124a0281b68aebac04ec3b76cb6fdb56a376d419a003fd87f79e9d086aafd4aaa24efa3345f9857352d3d489356f moz-system-jpeg.patch -c0437a6753f3f350968fa12d250efdfe1bea77baf0e4c06b072b5cc9e78c774dbf4506bc536337030d349fb3ba4460097b75b0c7c5b8fb2d39d8b0a392948936 no-ccache-stats.patch -b586ddb21b50fa8fba798c3a269518049c38cc52fd91ad00e96a3f1144e6b2879d9df1a182a2fb181898042043ae98381a70d0e4acbf8aa705d2b4f62c17a5a1 nrappkit-qsort.patch -2d8dff86212d6d2a904cbb5a5a1d6c17b89adc929fc6a3f4c6cb669f5e83ecddff5a799225319ba445a187b04d111251af75dd3ce8a039164bc14d2a432a2a04 ppc-musttail.patch -6f60e83599041db1b707c21784197ea9816b2c936b89a274bfc24554a600981e6f28448fe41fab0942bd31acd49b1c00beb2eb0961149f2ffa6a4154be123ea7 ppc-webrtc.patch -4e40b34c5f77a1a21fe971a6fcd8a21b1a63423a3a7932a5a6e1c7a2779f9f06a561c806614a01931679a4b1c6afdfd8ae1f3cc6b673f259ccd368e8e54f6e90 python-deps.patch -1c6918dd6655d3a1251bfd4af2e1c561cbb00d540a883b4c1ebf7f5de530d754d9ac07b4b5f56cdab6c511d25c8910ec94043f5733e97501a67abffe1bafaeb1 rust-lto-thin.patch -e4795b88e572bb3b6f009dbacc7872b59db2f8facbe2b07f14dd4f45a77c22049783581869f18c6bb3f04d6edb3da59347278321cce2bfa629a4d35e136cda5c rust1.78-packed-to-portable_simd.patch -2518f2fc75b5db30058e0735f47d60fdf1e7adfaeee4b33fb2afb1bd9a616ce943fd88f4404d0802d4083703f4acf1d5ad42377218d025bc768807fbaf7e1609 sandbox-fork.patch -b7d0a6126bdf6c0569f80aabf5b37ed2c7a35712eb8a0404a2d85381552f5555d4f97d213ea26cec6a45dc2785f22439376ed5f8e78b4fd664ef0223307b333e sandbox-largefile.patch -f8c3555ef6207933cbffbf4fc101a9b4c0d2990c0063162f0f0bde70ef0b46f86bfac42e7110695183424a87948de593f3927b2d8509ede3e4fc7bd8a1fad1ce sandbox-sched_setscheduler.patch -0b3f1e4b9fdc868e4738b5c81fd6c6128ce8885b260affcb9a65ff9d164d7232626ce1291aaea70132b3e3124f5e13fef4d39326b8e7173e362a823722a85127 stab.h -382510375b1a2fa79be0ab79e3391a021ae2c022429ffbaa7e7a69166f99bb56d01e59a1b10688592a29238f21c9d6977672bd77f9fae439b66bdfe0c55ddb15 mozilla-location.keys -fc45bc3ffb9404e5338ea26a9f04807b40f6f516324972cddd48bedb91b8bd7c6b8d4e03a0209020f5e67b703bc4ff89389985791b9bd544a0fc3951e2dc338e vendor-prefs.js -e1a0a4ff5cc1b53f13776ca11927d671426b0691e78e74a4adf2166d57bb2ae8ac409cc11a37ce5e2f680fdf05d5bc3849c33a9717aca1bb62d03ae5231a67fb zotero.desktop -ba04ec60afd2e9f9500046128b60f1c68b0ac7e47f5fbbc4f4fbfde01df982eb1561d65fb0aef9bee4ee098c4babc5e9caa4c9e791ad616bb55d7a0523349f34 zotero-7.0.7.tar.gz -746dbabbb3ea9199d17891e2079b9256d04843f548132178862117d2334694d98e2cc981945d72f31d0e5b2c42904d371633f6905996bb580aa0b5ae95c64ddc zotero_build-modifications.patch -337070ee4c44ccb35c6b6290c18327740bb9fccfd1a6ad1045782e83daa290b6ced7d53955d3a889f661d588738a64f2e7f383639f4c46be9fdf891168abc9ff zotero_test-drop-build.patch -f0e4f09496531222e8400959f9ef12852bca269eb3bf4c3b87ccaf92f28a12b9374461a1c79ad294a4393dbe30800aa1c85497033d0bc304fa8c198dfab3efd2 zotero_test-fix-chars.patch -9dc390d8bae42e645cae45fe5551751d8f38d5c1b8b2cc0eec1c2191f4bde293ffb2c67cfc4de765f2d48b1da4d5fcd4f1c03711e5da3180cd1b63710ccf5599 zotero_test-push-timeout-to-30sec.patch -7fb791a386d30594a11ae3856295d5081000de7525036eb0b5836505bd4f0b13a4fe706400ad7efe00b75c2112cf3d59ea3542b6179ccd80f7ee1889349f441d zotero_drop-jazzer.patch -" diff --git a/user/zotero/audio-lfs64.patch b/user/zotero/audio-lfs64.patch deleted file mode 100644 index c34671a..0000000 --- a/user/zotero/audio-lfs64.patch +++ /dev/null @@ -1,61 +0,0 @@ ---- a/third_party/rust/audio_thread_priority/src/rt_linux.rs -+++ b/third_party/rust/audio_thread_priority/src/rt_linux.rs -@@ -112,7 +112,7 @@ - - /// Returns the maximum priority, maximum real-time time slice, and the current real-time time - /// slice for this process. --fn get_limits() -> Result<(i64, u64, libc::rlimit64), AudioThreadPriorityError> { -+fn get_limits() -> Result<(i64, u64, libc::rlimit), AudioThreadPriorityError> { - let c = Connection::get_private(BusType::System)?; - - let p = Props::new( -@@ -122,7 +122,7 @@ - "org.freedesktop.RealtimeKit1", - DBUS_SOCKET_TIMEOUT, - ); -- let mut current_limit = libc::rlimit64 { -+ let mut current_limit = libc::rlimit { - rlim_cur: 0, - rlim_max: 0, - }; -@@ -141,9 +141,9 @@ - )); - } - -- if unsafe { libc::getrlimit64(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { -+ if unsafe { libc::getrlimit(libc::RLIMIT_RTTIME, &mut current_limit) } < 0 { - return Err(AudioThreadPriorityError::new_with_inner( -- "getrlimit64", -+ "getrlimit", - Box::new(OSError::last_os_error()), - )); - } -@@ -154,13 +154,13 @@ - fn set_limits(request: u64, max: u64) -> Result<(), AudioThreadPriorityError> { - // Set a soft limit to the limit requested, to be able to handle going over the limit using - // SIGXCPU. Set the hard limit to the maxium slice to prevent getting SIGKILL. -- let new_limit = libc::rlimit64 { -+ let new_limit = libc::rlimit { - rlim_cur: request, - rlim_max: max, - }; -- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &new_limit) } < 0 { -+ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &new_limit) } < 0 { - return Err(AudioThreadPriorityError::new_with_inner( -- "setrlimit64", -+ "setrlimit", - Box::new(OSError::last_os_error()), - )); - } -@@ -296,9 +296,9 @@ - match r { - Ok(_) => Ok(handle), - Err(e) => { -- if unsafe { libc::setrlimit64(libc::RLIMIT_RTTIME, &limits) } < 0 { -+ if unsafe { libc::setrlimit(libc::RLIMIT_RTTIME, &limits) } < 0 { - return Err(AudioThreadPriorityError::new_with_inner( -- "setrlimit64", -+ "setrlimit", - Box::new(OSError::last_os_error()), - )); - } diff --git a/user/zotero/disable-moz-stackwalk.patch b/user/zotero/disable-moz-stackwalk.patch deleted file mode 100644 index b6bc756..0000000 --- a/user/zotero/disable-moz-stackwalk.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/mozglue/misc/StackWalk.cpp b/mozglue/misc/StackWalk.cpp -index 7d62921..adcfa44 100644 ---- a/mozglue/misc/StackWalk.cpp -+++ b/mozglue/misc/StackWalk.cpp -@@ -33,13 +33,7 @@ using namespace mozilla; - # define MOZ_STACKWALK_SUPPORTS_MACOSX 0 - #endif - --#if (defined(linux) && \ -- ((defined(__GNUC__) && (defined(__i386) || defined(PPC))) || \ -- defined(HAVE__UNWIND_BACKTRACE))) --# define MOZ_STACKWALK_SUPPORTS_LINUX 1 --#else - # define MOZ_STACKWALK_SUPPORTS_LINUX 0 --#endif - - #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) - # define HAVE___LIBC_STACK_END 1 diff --git a/user/zotero/fix-fortify-system-wrappers.patch b/user/zotero/fix-fortify-system-wrappers.patch deleted file mode 100644 index 17cf7e3..0000000 --- a/user/zotero/fix-fortify-system-wrappers.patch +++ /dev/null @@ -1,13 +0,0 @@ -The wrapper features.h gets pulled in by system headers causing thigns to -break. We work around it by simply not wrap features.h - ---- ./config/system-headers.mozbuild.orig -+++ ./config/system-headers.mozbuild -@@ -229,7 +229,6 @@ - 'execinfo.h', - 'extras.h', - 'fcntl.h', -- 'features.h', - 'fenv.h', - 'ffi.h', - 'fibdef.h', diff --git a/user/zotero/fix-rust-target.patch b/user/zotero/fix-rust-target.patch deleted file mode 100644 index 9342063..0000000 --- a/user/zotero/fix-rust-target.patch +++ /dev/null @@ -1,31 +0,0 @@ -Allow us to just set RUST_TARGEt ourselves instead of hacking around in mozilla's -weird custom build system... - ---- a/build/moz.configure/rust.configure -+++ b/build/moz.configure/rust.configure -@@ -225,7 +225,9 @@ - data.setdefault(key, []).append(namespace(rust_target=t, target=info)) - return data - -- -+@imports('os') -+@imports(_from='mozbuild.util', _import='ensure_unicode') -+@imports(_from='mozbuild.util', _import='system_encoding') - def detect_rustc_target( - host_or_target, compiler_info, arm_target, rust_supported_targets - ): -@@ -340,13 +342,13 @@ - - return None - -- rustc_target = find_candidate(candidates) -+ rustc_target = os.environ['RUST_TARGET'] - - if rustc_target is None: - die("Don't know how to translate {} for rustc".format(host_or_target.alias)) - -- return rustc_target -+ return ensure_unicode(rustc_target, system_encoding) - - - @imports('os') diff --git a/user/zotero/fix-webrtc-glibcisms.patch b/user/zotero/fix-webrtc-glibcisms.patch deleted file mode 100644 index 4f9043b..0000000 --- a/user/zotero/fix-webrtc-glibcisms.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc -+++ b/third_party/libwebrtc/system_wrappers/source/cpu_features_linux.cc -@@ -18,7 +18,7 @@ - #define WEBRTC_GLIBC_PREREQ(a, b) 0 - #endif - --#if WEBRTC_GLIBC_PREREQ(2, 16) -+#if !__GLIBC__ || WEBRTC_GLIBC_PREREQ(2, 16) - #include - #else - #include -@@ -40,7 +40,7 @@ - int architecture = 0; - uint64_t hwcap = 0; - const char* platform = NULL; --#if WEBRTC_GLIBC_PREREQ(2, 16) -+#if !__GLIBC__ || WEBRTC_GLIBC_PREREQ(2, 16) - hwcap = getauxval(AT_HWCAP); - platform = (const char*)getauxval(AT_PLATFORM); - #else diff --git a/user/zotero/icu74.patch b/user/zotero/icu74.patch deleted file mode 100644 index 46c9445..0000000 --- a/user/zotero/icu74.patch +++ /dev/null @@ -1,38 +0,0 @@ -https://bugzilla.mozilla.org/show_bug.cgi?id=1862601 - -# HG changeset patch -# User André Bargull -# Date 1697435923 -7200 -# Node ID d5f3b0c4f08a426ce00a153c04e177eecb6820e2 -# Parent c63994f8259efdf6e745c960aa9e1409d5477049 -Bug xxx - Part 12: Add new line break classes. r? - -diff --git a/intl/lwbrk/LineBreaker.cpp b/intl/lwbrk/LineBreaker.cpp ---- a/intl/lwbrk/LineBreaker.cpp -+++ b/intl/lwbrk/LineBreaker.cpp -@@ -443,17 +443,23 @@ static int8_t GetClass(uint32_t u, LineB - /* JT = 34, [JT] */ CLASS_CHARACTER, - /* JV = 35, [JV] */ CLASS_CHARACTER, - /* CLOSE_PARENTHESIS = 36, [CP] */ CLASS_CLOSE_LIKE_CHARACTER, - /* CONDITIONAL_JAPANESE_STARTER = 37, [CJ] */ CLASS_CLOSE, - /* HEBREW_LETTER = 38, [HL] */ CLASS_CHARACTER, - /* REGIONAL_INDICATOR = 39, [RI] */ CLASS_CHARACTER, - /* E_BASE = 40, [EB] */ CLASS_BREAKABLE, - /* E_MODIFIER = 41, [EM] */ CLASS_CHARACTER, -- /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER}; -+ /* ZWJ = 42, [ZWJ]*/ CLASS_CHARACTER, -+ /* AKSARA = 43, [AK] */ CLASS_CHARACTER, -+ /* AKSARA_PREBASE = 44, [AP] */ CLASS_CHARACTER, -+ /* AKSARA_START = 45, [AS] */ CLASS_CHARACTER, -+ /* VIRAMA_FINAL = 46, [VF] */ CLASS_CHARACTER, -+ /* VIRAMA = 47, [VI] */ CLASS_CHARACTER, -+ }; - - static_assert(U_LB_COUNT == mozilla::ArrayLength(sUnicodeLineBreakToClass), - "Gecko vs ICU LineBreak class mismatch"); - - auto cls = GetLineBreakClass(u); - MOZ_ASSERT(cls < mozilla::ArrayLength(sUnicodeLineBreakToClass)); - - // Overrides based on rules for the different line-break values given in - diff --git a/user/zotero/lfs64.patch b/user/zotero/lfs64.patch deleted file mode 100644 index bae8b5d..0000000 --- a/user/zotero/lfs64.patch +++ /dev/null @@ -1,35 +0,0 @@ -force stat() instead of stat64() on 32-bit --- ---- a/xpcom/io/nsLocalFileUnix.h -+++ b/xpcom/io/nsLocalFileUnix.h -@@ -21,7 +21,7 @@ - - // stat64 and lstat64 are deprecated on OS X. Normal stat and lstat are - // 64-bit by default on OS X 10.6+. --#if defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) -+#if 0 && defined(HAVE_STAT64) && defined(HAVE_LSTAT64) && !defined(XP_DARWIN) - # if defined(AIX) - # if defined STAT - # undef STAT ---- a/mozglue/baseprofiler/core/shared-libraries-linux.cc -+++ b/mozglue/baseprofiler/core/shared-libraries-linux.cc -@@ -178,7 +178,7 @@ - return false; - } - --#if defined(__x86_64__) || defined(__aarch64__) || \ -+#if 1 || defined(__x86_64__) || defined(__aarch64__) || \ - (defined(__mips__) && _MIPS_SIM == _ABI64) || \ - !(defined(GP_OS_linux) || defined(GP_OS_android)) - ---- a/security/sandbox/linux/broker/SandboxBrokerUtils.h -+++ b/security/sandbox/linux/broker/SandboxBrokerUtils.h -@@ -15,7 +15,7 @@ - // calls. We'll intercept those and handle them in the stat functions - // but must be sure to use the right structure layout. - --#if defined(__NR_stat64) || defined(__NR_fstatat64) -+#if 0 && (defined(__NR_stat64) || defined(__NR_fstatat64) ) - typedef struct stat64 statstruct; - # define statsyscall stat64 - # define lstatsyscall lstat64 diff --git a/user/zotero/llvm18-bindgen.patch b/user/zotero/llvm18-bindgen.patch deleted file mode 100644 index 67270f3..0000000 --- a/user/zotero/llvm18-bindgen.patch +++ /dev/null @@ -1,619 +0,0 @@ -Patch-Source: https://github.com/chimera-linux/cports/blob/899c997/contrib/thunderbird/patches/llvm18-bindgen.patch -https://github.com/rust-lang/rust-bindgen/pull/2689 --- -diff --git a/ir/item.rs b/ir/item.rs -index 40f6f7d..87d09da 100644 ---- a/third_party/rust/bindgen/ir/item.rs -+++ b/third_party/rust/bindgen/ir/item.rs -@@ -6,8 +6,8 @@ use super::annotations::Annotations; - use super::comp::{CompKind, MethodKind}; - use super::context::{BindgenContext, ItemId, PartialType, TypeId}; - use super::derive::{ -- CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveEq, -- CanDeriveHash, CanDeriveOrd, CanDerivePartialEq, CanDerivePartialOrd, -+ CanDeriveCopy, CanDeriveDebug, CanDeriveDefault, CanDeriveEq, CanDeriveHash, CanDeriveOrd, -+ CanDerivePartialEq, CanDerivePartialOrd, - }; - use super::dot::DotAttributes; - use super::function::{Function, FunctionKind}; -@@ -59,10 +59,7 @@ pub trait ItemCanonicalPath { - /// Get the namespace-aware canonical path for this item. This means that if - /// namespaces are disabled, you'll get a single item, and otherwise you get - /// the whole path. -- fn namespace_aware_canonical_path( -- &self, -- ctx: &BindgenContext, -- ) -> Vec; -+ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec; - - /// Get the canonical path for this item. - fn canonical_path(&self, ctx: &BindgenContext) -> Vec; -@@ -159,11 +156,7 @@ where - { - type Extra = (); - -- fn as_template_param( -- &self, -- ctx: &BindgenContext, -- _: &(), -- ) -> Option { -+ fn as_template_param(&self, ctx: &BindgenContext, _: &()) -> Option { - ctx.resolve_item((*self).into()).as_template_param(ctx, &()) - } - } -@@ -171,11 +164,7 @@ where - impl AsTemplateParam for Item { - type Extra = (); - -- fn as_template_param( -- &self, -- ctx: &BindgenContext, -- _: &(), -- ) -> Option { -+ fn as_template_param(&self, ctx: &BindgenContext, _: &()) -> Option { - self.kind.as_template_param(ctx, self) - } - } -@@ -183,16 +172,10 @@ impl AsTemplateParam for Item { - impl AsTemplateParam for ItemKind { - type Extra = Item; - -- fn as_template_param( -- &self, -- ctx: &BindgenContext, -- item: &Item, -- ) -> Option { -+ fn as_template_param(&self, ctx: &BindgenContext, item: &Item) -> Option { - match *self { - ItemKind::Type(ref ty) => ty.as_template_param(ctx, item), -- ItemKind::Module(..) | -- ItemKind::Function(..) | -- ItemKind::Var(..) => None, -+ ItemKind::Module(..) | ItemKind::Function(..) | ItemKind::Var(..) => None, - } - } - } -@@ -214,10 +197,7 @@ impl ItemCanonicalPath for T - where - T: Copy + Into, - { -- fn namespace_aware_canonical_path( -- &self, -- ctx: &BindgenContext, -- ) -> Vec { -+ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec { - debug_assert!( - ctx.in_codegen_phase(), - "You're not supposed to call this yet" -@@ -282,9 +262,7 @@ impl Trace for Item { - // There are some types, like resolved type references, where we - // don't want to stop collecting types even though they may be - // opaque. -- if ty.should_be_traced_unconditionally() || -- !self.is_opaque(ctx, &()) -- { -+ if ty.should_be_traced_unconditionally() || !self.is_opaque(ctx, &()) { - ty.trace(ctx, tracer, self); - } - } -@@ -450,11 +428,7 @@ impl Item { - } - - /// Construct a new opaque item type. -- pub fn new_opaque_type( -- with_id: ItemId, -- ty: &clang::Type, -- ctx: &mut BindgenContext, -- ) -> TypeId { -+ pub fn new_opaque_type(with_id: ItemId, ty: &clang::Type, ctx: &mut BindgenContext) -> TypeId { - let location = ty.declaration().location(); - let ty = Opaque::from_clang_ty(ty, ctx); - let kind = ItemKind::Type(ty); -@@ -497,12 +471,11 @@ impl Item { - self.ancestors(ctx) - .filter(|id| { - ctx.resolve_item(*id).as_module().map_or(false, |module| { -- !module.is_inline() || -- ctx.options().conservative_inline_namespaces -+ !module.is_inline() || ctx.options().conservative_inline_namespaces - }) - }) -- .count() + -- 1 -+ .count() -+ + 1 - } - - /// Get this `Item`'s comment, if it has any, already preprocessed and with -@@ -577,9 +550,9 @@ impl Item { - pub fn is_toplevel(&self, ctx: &BindgenContext) -> bool { - // FIXME: Workaround for some types falling behind when parsing weird - // stl classes, for example. -- if ctx.options().enable_cxx_namespaces && -- self.kind().is_module() && -- self.id() != ctx.root_module() -+ if ctx.options().enable_cxx_namespaces -+ && self.kind().is_module() -+ && self.id() != ctx.root_module() - { - return false; - } -@@ -593,9 +566,7 @@ impl Item { - - if parent_item.id() == ctx.root_module() { - return true; -- } else if ctx.options().enable_cxx_namespaces || -- !parent_item.kind().is_module() -- { -+ } else if ctx.options().enable_cxx_namespaces || !parent_item.kind().is_module() { - return false; - } - -@@ -656,15 +627,13 @@ impl Item { - - let path = self.path_for_allowlisting(ctx); - let name = path[1..].join("::"); -- ctx.options().blocklisted_items.matches(&name) || -- match self.kind { -+ ctx.options().blocklisted_items.matches(&name) -+ || match self.kind { - ItemKind::Type(..) => { -- ctx.options().blocklisted_types.matches(&name) || -- ctx.is_replaced_type(path, self.id) -- } -- ItemKind::Function(..) => { -- ctx.options().blocklisted_functions.matches(&name) -+ ctx.options().blocklisted_types.matches(&name) -+ || ctx.is_replaced_type(path, self.id) - } -+ ItemKind::Function(..) => ctx.options().blocklisted_functions.matches(&name), - // TODO: Add constant / namespace blocklisting? - ItemKind::Var(..) | ItemKind::Module(..) => false, - } -@@ -723,12 +692,7 @@ impl Item { - } - - /// Helper function for full_disambiguated_name -- fn push_disambiguated_name( -- &self, -- ctx: &BindgenContext, -- to: &mut String, -- level: u8, -- ) { -+ fn push_disambiguated_name(&self, ctx: &BindgenContext, to: &mut String, level: u8) { - to.push_str(&self.canonical_name(ctx)); - if let ItemKind::Type(ref ty) = *self.kind() { - if let TypeKind::TemplateInstantiation(ref inst) = *ty.kind() { -@@ -791,16 +755,14 @@ impl Item { - - match *self.kind() { - ItemKind::Var(ref var) => var.name().to_owned(), -- ItemKind::Module(ref module) => { -- module.name().map(ToOwned::to_owned).unwrap_or_else(|| { -- format!("_bindgen_mod_{}", self.exposed_id(ctx)) -- }) -- } -- ItemKind::Type(ref ty) => { -- ty.sanitized_name(ctx).map(Into::into).unwrap_or_else(|| { -- format!("_bindgen_ty_{}", self.exposed_id(ctx)) -- }) -- } -+ ItemKind::Module(ref module) => module -+ .name() -+ .map(ToOwned::to_owned) -+ .unwrap_or_else(|| format!("_bindgen_mod_{}", self.exposed_id(ctx))), -+ ItemKind::Type(ref ty) => ty -+ .sanitized_name(ctx) -+ .map(Into::into) -+ .unwrap_or_else(|| format!("_bindgen_ty_{}", self.exposed_id(ctx))), - ItemKind::Function(ref fun) => { - let mut name = fun.name().to_owned(); - -@@ -839,11 +801,7 @@ impl Item { - /// If `BindgenOptions::disable_nested_struct_naming` is true then returned - /// name is the inner most non-anonymous name plus all the anonymous base names - /// that follows. -- pub fn real_canonical_name( -- &self, -- ctx: &BindgenContext, -- opt: &NameOptions, -- ) -> String { -+ pub fn real_canonical_name(&self, ctx: &BindgenContext, opt: &NameOptions) -> String { - let target = ctx.resolve_item(self.name_target(ctx)); - - // Short-circuit if the target has an override, and just use that. -@@ -874,9 +832,7 @@ impl Item { - }) - .filter(|id| { - if !ctx.options().conservative_inline_namespaces { -- if let ItemKind::Module(ref module) = -- *ctx.resolve_item(*id).kind() -- { -+ if let ItemKind::Module(ref module) = *ctx.resolve_item(*id).kind() { - return !module.is_inline(); - } - } -@@ -947,9 +903,9 @@ impl Item { - let ty_kind = self.kind().as_type().map(|t| t.kind()); - if let Some(ty_kind) = ty_kind { - match *ty_kind { -- TypeKind::Comp(..) | -- TypeKind::TemplateInstantiation(..) | -- TypeKind::Enum(..) => return self.local_id(ctx).to_string(), -+ TypeKind::Comp(..) | TypeKind::TemplateInstantiation(..) | TypeKind::Enum(..) => { -+ return self.local_id(ctx).to_string() -+ } - _ => {} - } - } -@@ -990,8 +946,7 @@ impl Item { - - match *type_.kind() { - TypeKind::Enum(ref enum_) => { -- enum_.computed_enum_variation(ctx, self) == -- EnumVariation::ModuleConsts -+ enum_.computed_enum_variation(ctx, self) == EnumVariation::ModuleConsts - } - TypeKind::Alias(inner_id) => { - // TODO(emilio): Make this "hop through type aliases that aren't -@@ -1018,18 +973,12 @@ impl Item { - ItemKind::Type(_) => cc.types(), - ItemKind::Function(ref f) => match f.kind() { - FunctionKind::Function => cc.functions(), -- FunctionKind::Method(MethodKind::Constructor) => { -- cc.constructors() -- } -- FunctionKind::Method(MethodKind::Destructor) | -- FunctionKind::Method(MethodKind::VirtualDestructor { -- .. -- }) => cc.destructors(), -- FunctionKind::Method(MethodKind::Static) | -- FunctionKind::Method(MethodKind::Normal) | -- FunctionKind::Method(MethodKind::Virtual { .. }) => { -- cc.methods() -- } -+ FunctionKind::Method(MethodKind::Constructor) => cc.constructors(), -+ FunctionKind::Method(MethodKind::Destructor) -+ | FunctionKind::Method(MethodKind::VirtualDestructor { .. }) => cc.destructors(), -+ FunctionKind::Method(MethodKind::Static) -+ | FunctionKind::Method(MethodKind::Normal) -+ | FunctionKind::Method(MethodKind::Virtual { .. }) => cc.methods(), - }, - } - } -@@ -1041,14 +990,9 @@ impl Item { - .borrow_with(|| self.compute_path(ctx, UserMangled::No)) - } - -- fn compute_path( -- &self, -- ctx: &BindgenContext, -- mangled: UserMangled, -- ) -> Vec { -+ fn compute_path(&self, ctx: &BindgenContext, mangled: UserMangled) -> Vec { - if let Some(path) = self.annotations().use_instead_of() { -- let mut ret = -- vec![ctx.resolve_item(ctx.root_module()).name(ctx).get()]; -+ let mut ret = vec![ctx.resolve_item(ctx.root_module()).name(ctx).get()]; - ret.extend_from_slice(path); - return ret; - } -@@ -1059,10 +1003,9 @@ impl Item { - .chain(iter::once(ctx.root_module().into())) - .map(|id| ctx.resolve_item(id)) - .filter(|item| { -- item.id() == target.id() || -- item.as_module().map_or(false, |module| { -- !module.is_inline() || -- ctx.options().conservative_inline_namespaces -+ item.id() == target.id() -+ || item.as_module().map_or(false, |module| { -+ !module.is_inline() || ctx.options().conservative_inline_namespaces - }) - }) - .map(|item| { -@@ -1123,9 +1066,9 @@ impl IsOpaque for Item { - ctx.in_codegen_phase(), - "You're not supposed to call this yet" - ); -- self.annotations.opaque() || -- self.as_type().map_or(false, |ty| ty.is_opaque(ctx, self)) || -- ctx.opaque_by_name(self.path_for_allowlisting(ctx)) -+ self.annotations.opaque() -+ || self.as_type().map_or(false, |ty| ty.is_opaque(ctx, self)) -+ || ctx.opaque_by_name(self.path_for_allowlisting(ctx)) - } - } - -@@ -1225,11 +1168,7 @@ impl HasFloat for Item { - pub type ItemSet = BTreeSet; - - impl DotAttributes for Item { -- fn dot_attributes( -- &self, -- ctx: &BindgenContext, -- out: &mut W, -- ) -> io::Result<()> -+ fn dot_attributes(&self, ctx: &BindgenContext, out: &mut W) -> io::Result<()> - where - W: io::Write, - { -@@ -1306,17 +1245,10 @@ fn visit_child( - } - - impl Item { -- pub(crate) fn builtin_type( -- kind: TypeKind, -- is_const: bool, -- ctx: &mut BindgenContext, -- ) -> TypeId { -+ pub(crate) fn builtin_type(kind: TypeKind, is_const: bool, ctx: &mut BindgenContext) -> TypeId { - // Feel free to add more here, I'm just lazy. - match kind { -- TypeKind::Void | -- TypeKind::Int(..) | -- TypeKind::Pointer(..) | -- TypeKind::Float(..) => {} -+ TypeKind::Void | TypeKind::Int(..) | TypeKind::Pointer(..) | TypeKind::Float(..) => {} - _ => panic!("Unsupported builtin type"), - } - -@@ -1428,52 +1360,44 @@ impl Item { - } - - // Guess how does clang treat extern "C" blocks? -- if cursor.kind() == CXCursor_UnexposedDecl { -- Err(ParseError::Recurse) -- } else { -+ match cursor.kind() { -+ // On Clang 18+, extern "C" is reported accurately as a LinkageSpec. -+ // Older LLVM treat it as UnexposedDecl. -+ CXCursor_LinkageSpec | CXCursor_UnexposedDecl => Err(ParseError::Recurse), - // We allowlist cursors here known to be unhandled, to prevent being - // too noisy about this. -- match cursor.kind() { -- CXCursor_MacroDefinition | -- CXCursor_MacroExpansion | -- CXCursor_UsingDeclaration | -- CXCursor_UsingDirective | -- CXCursor_StaticAssert | -- CXCursor_FunctionTemplate => { -- debug!( -- "Unhandled cursor kind {:?}: {:?}", -- cursor.kind(), -- cursor -- ); -- } -- CXCursor_InclusionDirective => { -- let file = cursor.get_included_file_name(); -- match file { -- None => { -- warn!( -- "Inclusion of a nameless file in {:?}", -- cursor -- ); -- } -- Some(filename) => { -- ctx.include_file(filename); -- } -- } -- } -- _ => { -- // ignore toplevel operator overloads -- let spelling = cursor.spelling(); -- if !spelling.starts_with("operator") { -- warn!( -- "Unhandled cursor kind {:?}: {:?}", -- cursor.kind(), -- cursor -- ); -- } -- } -+ CXCursor_MacroDefinition -+ | CXCursor_MacroExpansion -+ | CXCursor_UsingDeclaration -+ | CXCursor_UsingDirective -+ | CXCursor_StaticAssert -+ | CXCursor_FunctionTemplate => { -+ debug!("Unhandled cursor kind {:?}: {:?}", cursor.kind(), cursor); -+ Err(ParseError::Continue) - } - -- Err(ParseError::Continue) -+ CXCursor_InclusionDirective => { -+ let file = cursor.get_included_file_name(); -+ match file { -+ None => { -+ warn!("Inclusion of a nameless file in {:?}", cursor); -+ } -+ Some(included_file) => { -+ for cb in &ctx.options().parse_callbacks { -+ cb.include_file(&included_file); -+ } -+ } -+ } -+ Err(ParseError::Continue) -+ } -+ _ => { -+ // ignore toplevel operator overloads -+ let spelling = cursor.spelling(); -+ if !spelling.starts_with("operator") { -+ warn!("Unhandled cursor kind {:?}: {:?}", cursor.kind(), cursor); -+ } -+ Err(ParseError::Continue) -+ } - } - } - -@@ -1511,22 +1435,11 @@ impl Item { - - if ctx.collected_typerefs() { - debug!("refs already collected, resolving directly"); -- return Item::from_ty_with_id( -- potential_id, -- &ty, -- location, -- parent_id, -- ctx, -- ) -- .unwrap_or_else(|_| Item::new_opaque_type(potential_id, &ty, ctx)); -+ return Item::from_ty_with_id(potential_id, &ty, location, parent_id, ctx) -+ .unwrap_or_else(|_| Item::new_opaque_type(potential_id, &ty, ctx)); - } - -- if let Some(ty) = ctx.builtin_or_resolved_ty( -- potential_id, -- parent_id, -- &ty, -- Some(location), -- ) { -+ if let Some(ty) = ctx.builtin_or_resolved_ty(potential_id, parent_id, &ty, Some(location)) { - debug!("{:?} already resolved: {:?}", ty, location); - return ty; - } -@@ -1586,12 +1499,10 @@ impl Item { - id, ty, location - ); - -- if ty.kind() == clang_sys::CXType_Unexposed || -- location.cur_type().kind() == clang_sys::CXType_Unexposed -+ if ty.kind() == clang_sys::CXType_Unexposed -+ || location.cur_type().kind() == clang_sys::CXType_Unexposed - { -- if ty.is_associated_type() || -- location.cur_type().is_associated_type() -- { -+ if ty.is_associated_type() || location.cur_type().is_associated_type() { - return Ok(Item::new_opaque_type(id, ty, ctx)); - } - -@@ -1618,8 +1529,7 @@ impl Item { - }; - - let comment = decl.raw_comment().or_else(|| location.raw_comment()); -- let annotations = -- Annotations::new(&decl).or_else(|| Annotations::new(&location)); -+ let annotations = Annotations::new(&decl).or_else(|| Annotations::new(&location)); - - if let Some(ref annotations) = annotations { - if let Some(replaced) = annotations.use_instead_of() { -@@ -1627,9 +1537,7 @@ impl Item { - } - } - -- if let Some(ty) = -- ctx.builtin_or_resolved_ty(id, parent_id, ty, Some(location)) -- { -+ if let Some(ty) = ctx.builtin_or_resolved_ty(id, parent_id, ty, Some(location)) { - return Ok(ty); - } - -@@ -1665,9 +1573,7 @@ impl Item { - let result = Type::from_clang_ty(id, ty, location, parent_id, ctx); - let relevant_parent_id = parent_id.unwrap_or(current_module); - let ret = match result { -- Ok(ParseResult::AlreadyResolved(ty)) => { -- Ok(ty.as_type_id_unchecked()) -- } -+ Ok(ParseResult::AlreadyResolved(ty)) => Ok(ty.as_type_id_unchecked()), - Ok(ParseResult::New(item, declaration)) => { - ctx.add_item( - Item::new( -@@ -1698,13 +1604,10 @@ impl Item { - assert_eq!(*finished.decl(), declaration_to_look_for); - } - -- location.visit(|cur| { -- visit_child(cur, id, ty, parent_id, ctx, &mut result) -- }); -+ location.visit(|cur| visit_child(cur, id, ty, parent_id, ctx, &mut result)); - - if valid_decl { -- let partial_ty = -- PartialType::new(declaration_to_look_for, id); -+ let partial_ty = PartialType::new(declaration_to_look_for, id); - ctx.begin_parsing(partial_ty); - } - -@@ -1813,10 +1716,7 @@ impl Item { - // but maintaining these scopes properly would require more changes to - // the whole libclang -> IR parsing code. - -- fn is_template_with_spelling( -- refd: &clang::Cursor, -- spelling: &str, -- ) -> bool { -+ fn is_template_with_spelling(refd: &clang::Cursor, spelling: &str) -> bool { - lazy_static! { - static ref ANON_TYPE_PARAM_RE: regex::Regex = - regex::Regex::new(r"^type\-parameter\-\d+\-\d+$").unwrap(); -@@ -1838,11 +1738,7 @@ impl Item { - } else if location.kind() == clang_sys::CXCursor_TypeRef { - // Situation (2) - match location.referenced() { -- Some(refd) -- if is_template_with_spelling(&refd, &ty_spelling) => -- { -- refd -- } -+ Some(refd) if is_template_with_spelling(&refd, &ty_spelling) => refd, - _ => return None, - } - } else { -@@ -1851,16 +1747,11 @@ impl Item { - - location.visit(|child| { - let child_ty = child.cur_type(); -- if child_ty.kind() == clang_sys::CXCursor_TypeRef && -- child_ty.spelling() == ty_spelling -+ if child_ty.kind() == clang_sys::CXCursor_TypeRef -+ && child_ty.spelling() == ty_spelling - { - match child.referenced() { -- Some(refd) -- if is_template_with_spelling( -- &refd, -- &ty_spelling, -- ) => -- { -+ Some(refd) if is_template_with_spelling(&refd, &ty_spelling) => { - definition = Some(refd); - return clang_sys::CXChildVisit_Break; - } -@@ -1883,12 +1774,7 @@ impl Item { - - if let Some(id) = ctx.get_type_param(&definition) { - if let Some(with_id) = with_id { -- return Some(ctx.build_ty_wrapper( -- with_id, -- id, -- Some(parent), -- &ty, -- )); -+ return Some(ctx.build_ty_wrapper(with_id, id, Some(parent), &ty)); - } else { - return Some(id); - } -@@ -1920,8 +1806,8 @@ impl ItemCanonicalName for Item { - ); - self.canonical_name - .borrow_with(|| { -- let in_namespace = ctx.options().enable_cxx_namespaces || -- ctx.options().disable_name_namespacing; -+ let in_namespace = -+ ctx.options().enable_cxx_namespaces || ctx.options().disable_name_namespacing; - - if in_namespace { - self.name(ctx).within_namespaces().get() -@@ -1934,10 +1820,7 @@ impl ItemCanonicalName for Item { - } - - impl ItemCanonicalPath for Item { -- fn namespace_aware_canonical_path( -- &self, -- ctx: &BindgenContext, -- ) -> Vec { -+ fn namespace_aware_canonical_path(&self, ctx: &BindgenContext) -> Vec { - let mut path = self.canonical_path(ctx); - - // ASSUMPTION: (disable_name_namespacing && cxx_namespaces) diff --git a/user/zotero/llvm18.patch b/user/zotero/llvm18.patch deleted file mode 100644 index 2f0fd99..0000000 --- a/user/zotero/llvm18.patch +++ /dev/null @@ -1,23 +0,0 @@ -Patch-Source: https://github.com/chimera-linux/cports/blob/899c997/contrib/thunderbird/patches/llvm18.patch ---- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp -+++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.cpp -@@ -540,7 +540,7 @@ - - webrtc::VideoFrameType ft; - GmpFrameTypeToWebrtcFrameType(aEncodedFrame->FrameType(), &ft); -- uint32_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; -+ uint64_t timestamp = (aEncodedFrame->TimeStamp() * 90ll + 999) / 1000; - - GMP_LOG_DEBUG("GMP Encoded: %" PRIu64 ", type %d, len %d", - aEncodedFrame->TimeStamp(), aEncodedFrame->BufferType(), ---- a/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h -+++ b/dom/media/webrtc/libwebrtcglue/WebrtcGmpVideoCodec.h -@@ -302,7 +302,7 @@ - int64_t timestamp_us; - }; - // Map rtp time -> input image data -- DataMutex> mInputImageMap; -+ DataMutex> mInputImageMap; - - MediaEventProducer mInitPluginEvent; - MediaEventProducer mReleasePluginEvent; diff --git a/user/zotero/moz-system-jpeg.patch b/user/zotero/moz-system-jpeg.patch deleted file mode 100644 index 27e9eb2..0000000 --- a/user/zotero/moz-system-jpeg.patch +++ /dev/null @@ -1,15 +0,0 @@ -Patch-Source: https://phabricator.services.mozilla.com/D212612 - -diff --git a/toolkit/moz.configure b/toolkit/moz.configure -index 6d5485325c..c5dcc65dd5 100644 ---- a/toolkit/moz.configure -+++ b/toolkit/moz.configure -@@ -2426,6 +2426,8 @@ with only_when(compile_environment): - & jpeg_arm_neon_vld1q_u8_x4, - ) - -+ set_config("MOZ_SYSTEM_JPEG", True, when="--with-system-jpeg") -+ - - # PNG - # === diff --git a/user/zotero/mozilla-location.keys b/user/zotero/mozilla-location.keys deleted file mode 100644 index 8a3262d..0000000 --- a/user/zotero/mozilla-location.keys +++ /dev/null @@ -1 +0,0 @@ -NjhhZGJjMDEtMDM3OC00Zjc0LTk0N2UtMzBiYzA5NjlhMDc3Cg== diff --git a/user/zotero/no-ccache-stats.patch b/user/zotero/no-ccache-stats.patch deleted file mode 100644 index 4d557a0..0000000 --- a/user/zotero/no-ccache-stats.patch +++ /dev/null @@ -1,13 +0,0 @@ -prevents a call to ccache -diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py -index bf7009a..011c012 100644 ---- a/python/mozbuild/mozbuild/controller/building.py -+++ b/python/mozbuild/mozbuild/controller/building.py -@@ -570,6 +570,7 @@ class BuildMonitor(MozbuildObject): - ) - - def ccache_stats(self, ccache=None): -+ return None - ccache_stats = None - - if ccache is None: diff --git a/user/zotero/nrappkit-qsort.patch b/user/zotero/nrappkit-qsort.patch deleted file mode 100644 index 21d6d45..0000000 --- a/user/zotero/nrappkit-qsort.patch +++ /dev/null @@ -1,34 +0,0 @@ -missing include to use qsort() - -https://bugzil.la/1906955 - ---- a/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c 2024-07-09 18:11:39.207125821 +0200 -+++ b/dom/media/webrtc/transport/third_party/nrappkit/src/registry/registry_local.c 2024-07-09 18:12:07.657013364 +0200 -@@ -53,6 +53,7 @@ - #include - #endif - #include -+#include - #include "registry.h" - #include "registry_int.h" - #include "registry_vtbl.h" -@@ -62,6 +63,10 @@ - #include "r_errors.h" - #include "r_macros.h" - -+static int nr_compare_string(const void *arg1, const void *arg2) { -+ return strcasecmp(*(const char **)arg1, *(const char **)arg2); -+} -+ - /* if C were an object-oriented language, nr_scalar_registry_node and - * nr_array_registry_node would subclass nr_registry_node, but it isn't - * object-oriented language, so this is used in cases where the pointer -@@ -1067,7 +1072,7 @@ - } - - assert(sizeof(*arg.children) == sizeof(NR_registry)); -- qsort(arg.children, arg.length, sizeof(*arg.children), (void*)strcasecmp); -+ qsort(arg.children, arg.length, sizeof(*arg.children), nr_compare_string); - - *length = arg.length; - diff --git a/user/zotero/ppc-musttail.patch b/user/zotero/ppc-musttail.patch deleted file mode 100644 index ebe06c0..0000000 --- a/user/zotero/ppc-musttail.patch +++ /dev/null @@ -1,30 +0,0 @@ -Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc-musttail.patch --- -commit 5e66655e1456c9d26637ceaed3f4533b537322c4 -Author: Daniel Kolesa -Date: Sat May 13 23:00:04 2023 +0200 - - disable musttail on ppc - - 41:38.04 LLVM ERROR: failed to perform tail call elimination on a call site marked musttail - 41:38.04 PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. - 41:38.04 Stack dump: - 41:38.04 0. Running pass 'Function Pass Manager' on module '/builddir/thunderbird-114.0_beta1/obj-powerpc64le-unknown-linux-musl/toolkit/library/build/../../../gfx/skia/SkOpts.o'. - 41:38.04 1. Running pass 'PowerPC DAG->DAG Pattern Instruction Selection' on function '@_ZN8portableL15init_lane_masksEPNS_6ParamsEP21SkRasterPipelineStageffff' - 41:38.95 clang-16: error: unable to execute command: Aborted - - To be investigated later. - -diff --git a/gfx/skia/skia/src/core/SkRasterPipeline.h b/gfx/skia/skia/src/core/SkRasterPipeline.h -index 766bb0c..88c6cb2 100644 ---- a/gfx/skia/skia/src/core/SkRasterPipeline.h -+++ b/gfx/skia/skia/src/core/SkRasterPipeline.h -@@ -24,7 +24,7 @@ enum SkColorType : int; - struct SkImageInfo; - struct skcms_TransferFunction; - --#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) -+#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc__) - #define SK_HAS_MUSTTAIL 1 - #else - #define SK_HAS_MUSTTAIL 0 diff --git a/user/zotero/ppc-webrtc.patch b/user/zotero/ppc-webrtc.patch deleted file mode 100644 index bf4afdd..0000000 --- a/user/zotero/ppc-webrtc.patch +++ /dev/null @@ -1,23 +0,0 @@ -Patch-Source: https://github.com/chimera-linux/cports/blob/506127954653ccebf9b82df1452cce4ed0dae3b1/contrib/thunderbird/patches/ppc64-webrtc.patch --- -commit 010bfb0441168d51e0fffe98d1f50e0602e7947f -Author: Daniel Kolesa -Date: Sat May 13 23:40:41 2023 +0200 - - fix webrtc on ppc64 - -diff --git a/third_party/libwebrtc/moz.build b/third_party/libwebrtc/moz.build -index 976cf37..d35d447 100644 ---- a/third_party/libwebrtc/moz.build -+++ b/third_party/libwebrtc/moz.build -@@ -643,3 +643,10 @@ if CONFIG["CPU_ARCH"] == "x86_64" and CONFIG["OS_TARGET"] == "WINNT": - "/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/vector_math_avx2_gn", - "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_differ_sse2_gn" - ] -+ -+if CONFIG["CPU_ARCH"] == "ppc64" and CONFIG["OS_TARGET"] == "Linux": -+ -+ DIRS += [ -+ "/third_party/libwebrtc/modules/desktop_capture/desktop_capture_gn", -+ "/third_party/libwebrtc/modules/desktop_capture/primitives_gn" -+ ] diff --git a/user/zotero/python-deps.patch b/user/zotero/python-deps.patch deleted file mode 100644 index dfdd3b2..0000000 --- a/user/zotero/python-deps.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/python/sites/mach.txt b/python/sites/mach.txt -index 55cc6fb..51bf67d 100644 ---- a/python/sites/mach.txt -+++ b/python/sites/mach.txt -@@ -141,5 +141,5 @@ pypi-optional:glean-sdk==52.7.0:telemetry will not be collected - # Mach gracefully handles the case where `psutil` is unavailable. - # We aren't (yet) able to pin packages in automation, so we have to - # support down to the oldest locally-installed version (5.4.2). --pypi-optional:psutil>=5.4.2,<=5.9.4:telemetry will be missing some data --pypi-optional:zstandard>=0.11.1,<=0.22.0:zstd archives will not be possible to extract -+pypi-optional:psutil>=5.4.2,<=5.10.0:telemetry will be missing some data -+pypi-optional:zstandard>=0.11.1,<=0.24.0:zstd archives will not be possible to extract diff --git a/user/zotero/rust-lto-thin.patch b/user/zotero/rust-lto-thin.patch deleted file mode 100644 index 788fcea..0000000 --- a/user/zotero/rust-lto-thin.patch +++ /dev/null @@ -1,12 +0,0 @@ -set rust crate lto to thin to not use fatlto for gkrust which fails sometimes ---- a/config/makefiles/rust.mk -+++ b/config/makefiles/rust.mk -@@ -92,7 +92,7 @@ - # Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045. - ifndef MOZ_CODE_COVERAGE - ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE))) --cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat) -+cargo_rustc_flags += -Clto=thin - endif - # We need -Cembed-bitcode=yes for all crates when using -Clto. - RUSTFLAGS += -Cembed-bitcode=yes diff --git a/user/zotero/rust1.78-packed-to-portable_simd.patch b/user/zotero/rust1.78-packed-to-portable_simd.patch deleted file mode 100644 index e03f577..0000000 --- a/user/zotero/rust1.78-packed-to-portable_simd.patch +++ /dev/null @@ -1,3582 +0,0 @@ -Adapted from https://hg.mozilla.org/mozilla-central/rev/1db2ef126a6a --- - -# HG changeset patch -# User Henri Sivonen -# Date 1714462184 0 -# Node ID 1db2ef126a6a8555dbf50345e16492c977b42e92 -# Parent a545e84b3674c4878f2e618b7bce23058f2ac690 -Bug 1882209 - Update encoding_rs to 0.8.34 to deal with rustc changes. r=glandium,supply-chain-reviewers - -Differential Revision: https://phabricator.services.mozilla.com/D207167 - -diff --git a/.cargo/config.in b/.cargo/config.in ---- a/.cargo/config.in -+++ b/.cargo/config.in -@@ -35,31 +35,31 @@ git = "https://github.com/gfx-rs/wgpu" - rev = "f71a1bc736fde37509262ca03e91d8f56a13aeb5" - replace-with = "vendored-sources" - - [source."git+https://github.com/glandium/warp?rev=4af45fae95bc98b0eba1ef0db17e1dac471bb23d"] - git = "https://github.com/glandium/warp" - rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" - replace-with = "vendored-sources" - -+[source."git+https://github.com/hsivonen/any_all_workaround?rev=7fb1b7034c9f172aade21ee1c8554e8d8a48af80"] -+git = "https://github.com/hsivonen/any_all_workaround" -+rev = "7fb1b7034c9f172aade21ee1c8554e8d8a48af80" -+replace-with = "vendored-sources" -+ - [source."git+https://github.com/hsivonen/chardetng?rev=3484d3e3ebdc8931493aa5df4d7ee9360a90e76b"] - git = "https://github.com/hsivonen/chardetng" - rev = "3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" - replace-with = "vendored-sources" - - [source."git+https://github.com/hsivonen/chardetng_c?rev=ed8a4c6f900a90d4dbc1d64b856e61490a1c3570"] - git = "https://github.com/hsivonen/chardetng_c" - rev = "ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" - replace-with = "vendored-sources" - --[source."git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4"] --git = "https://github.com/hsivonen/packed_simd" --rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" --replace-with = "vendored-sources" -- - [source."git+https://github.com/jfkthame/mapped_hyph.git?rev=c7651a0cffff41996ad13c44f689bd9cd2192c01"] - git = "https://github.com/jfkthame/mapped_hyph.git" - rev = "c7651a0cffff41996ad13c44f689bd9cd2192c01" - replace-with = "vendored-sources" - - [source."git+https://github.com/mozilla-spidermonkey/jsparagus?rev=64ba08e24749616de2344112f226d1ef4ba893ae"] - git = "https://github.com/mozilla-spidermonkey/jsparagus" - rev = "64ba08e24749616de2344112f226d1ef4ba893ae" -diff --git a/Cargo.lock b/Cargo.lock ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -80,16 +80,25 @@ dependencies = [ - name = "android_system_properties" - version = "0.1.5" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" - dependencies = [ - "libc", - ] - -+[[package]] -+name = "any_all_workaround" -+version = "0.1.0" -+source = "git+https://github.com/hsivonen/any_all_workaround?rev=7fb1b7034c9f172aade21ee1c8554e8d8a48af80#7fb1b7034c9f172aade21ee1c8554e8d8a48af80" -+dependencies = [ -+ "cfg-if 1.0.0", -+ "version_check", -+] -+ - [[package]] - name = "anyhow" - version = "1.0.69" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" - - [[package]] - name = "app_services_logger" -@@ -1431,22 +1440,22 @@ dependencies = [ - "encoding_rs", - "nserror", - "nsstring", - "xmldecl", - ] - - [[package]] - name = "encoding_rs" --version = "0.8.33" -+version = "0.8.34" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" -+checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" - dependencies = [ -+ "any_all_workaround", - "cfg-if 1.0.0", -- "packed_simd", - ] - - [[package]] - name = "enum-primitive-derive" - version = "0.2.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "c375b9c5eadb68d0a6efee2999fef292f45854c3444c86f09d8ab086ba942b0e" - dependencies = [ -@@ -3901,25 +3910,16 @@ checksum = "8d91edf4fbb970279443471345a4e8c491bf05bb283b3e6c88e4e606fd8c181b" - [[package]] - name = "oxilangtag-ffi" - version = "0.1.0" - dependencies = [ - "nsstring", - "oxilangtag", - ] - --[[package]] --name = "packed_simd" --version = "0.3.9" --source = "git+https://github.com/hsivonen/packed_simd?rev=e588ceb568878e1a3156ea9ce551d5b63ef0cdc4#e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" --dependencies = [ -- "cfg-if 1.0.0", -- "num-traits", --] -- - [[package]] - name = "parking_lot" - version = "0.11.2" - source = "registry+https://github.com/rust-lang/crates.io-index" - checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" - dependencies = [ - "instant", - "lock_api", -diff --git a/Cargo.toml b/Cargo.toml ---- a/Cargo.toml -+++ b/Cargo.toml -@@ -154,22 +154,22 @@ rure = { path = "third_party/rust/rure" } - - # 0.31.1 but without rust-cssparser#342. - # TODO: Remove these, and just use v0.31.1 once bug 1836219 lands - # (which will get syn 2 into the tree). - cssparser = { path = "third_party/rust/cssparser" } - cssparser-macros = { path = "third_party/rust/cssparser-macros" } - - # Other overrides -+any_all_workaround = { git = "https://github.com/hsivonen/any_all_workaround", rev = "7fb1b7034c9f172aade21ee1c8554e8d8a48af80" } - chardetng = { git = "https://github.com/hsivonen/chardetng", rev="3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" } - chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" } - coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" } - firefox-on-glean = { path = "toolkit/components/glean/api" } - libudev-sys = { path = "dom/webauthn/libudev-sys" } --packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev = "e588ceb568878e1a3156ea9ce551d5b63ef0cdc4" } - midir = { git = "https://github.com/mozilla/midir.git", rev = "519e651241e867af3391db08f9ae6400bc023e18" } - # warp 0.3.3 + https://github.com/seanmonstar/warp/pull/1007 - warp = { git = "https://github.com/glandium/warp", rev = "4af45fae95bc98b0eba1ef0db17e1dac471bb23d" } - - # application-services overrides to make updating them all simpler. - interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } - sql-support = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } - sync15 = { git = "https://github.com/mozilla/application-services", rev = "86c84c217036c12283d19368867323a66bf35883" } -diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk ---- a/config/makefiles/rust.mk -+++ b/config/makefiles/rust.mk -@@ -260,17 +260,17 @@ export COREAUDIO_SDK_PATH=$(IPHONEOS_SDK - export IPHONEOS_SDK_DIR - PATH := $(topsrcdir)/build/macosx:$(PATH) - endif - endif - - ifndef RUSTC_BOOTSTRAP - RUSTC_BOOTSTRAP := mozglue_static,qcms - ifdef MOZ_RUST_SIMD --RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,packed_simd -+RUSTC_BOOTSTRAP := $(RUSTC_BOOTSTRAP),encoding_rs,any_all_workaround - endif - export RUSTC_BOOTSTRAP - endif - - target_rust_ltoable := force-cargo-library-build $(ADD_RUST_LTOABLE) - target_rust_nonltoable := force-cargo-test-run force-cargo-program-build - - ifdef MOZ_PGO_RUST -diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml ---- a/supply-chain/audits.toml -+++ b/supply-chain/audits.toml -@@ -596,16 +596,29 @@ who = "Mike Hommey "] -+description = "Workaround for bad LLVM codegen for boolean reductions on 32-bit ARM" -+homepage = "https://docs.rs/any_all_workaround/" -+documentation = "https://docs.rs/any_all_workaround/" -+readme = "README.md" -+license = "MIT OR Apache-2.0" -+repository = "https://github.com/hsivonen/any_all_workaround" -+ -+[dependencies] -+cfg-if = "1.0" -+ -+[build-dependencies] -+version_check = "0.9" -diff --git a/third_party/rust/packed_simd/LICENSE-APACHE b/third_party/rust/any_all_workaround/LICENSE-APACHE -rename from third_party/rust/packed_simd/LICENSE-APACHE -rename to third_party/rust/any_all_workaround/LICENSE-APACHE -diff --git a/third_party/rust/packed_simd/LICENSE-MIT b/third_party/rust/any_all_workaround/LICENSE-MIT -rename from third_party/rust/packed_simd/LICENSE-MIT -rename to third_party/rust/any_all_workaround/LICENSE-MIT -diff --git a/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS b/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/any_all_workaround/LICENSE-MIT-QCMS -@@ -0,0 +1,21 @@ -+qcms -+Copyright (C) 2009-2024 Mozilla Corporation -+Copyright (C) 1998-2007 Marti Maria -+ -+Permission is hereby granted, free of charge, to any person obtaining -+a copy of this software and associated documentation files (the "Software"), -+to deal in the Software without restriction, including without limitation -+the rights to use, copy, modify, merge, publish, distribute, sublicense, -+and/or sell copies of the Software, and to permit persons to whom the Software -+is furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO -+THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -diff --git a/third_party/rust/any_all_workaround/README.md b/third_party/rust/any_all_workaround/README.md -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/any_all_workaround/README.md -@@ -0,0 +1,13 @@ -+# any_all_workaround -+ -+This is a workaround for bad codegen ([Rust bug](https://github.com/rust-lang/portable-simd/issues/146), [LLVM bug](https://github.com/llvm/llvm-project/issues/50466)) for the `any()` and `all()` reductions for NEON-backed SIMD vectors on 32-bit ARM. On other platforms these delegate to `any()` and `all()` in `core::simd`. -+ -+The plan is to abandon this crate once the LLVM bug is fixed or `core::simd` works around the LLVM bug. -+ -+The code is forked from the [`packed_simd` crate](https://raw.githubusercontent.com/hsivonen/packed_simd/d938e39bee9bc5c222f5f2f2a0df9e53b5ce36ae/src/codegen/reductions/mask/arm.rs). -+ -+This crate requires Nightly Rust as it depends on the `portable_simd` feature. -+ -+# License -+ -+`MIT OR Apache-2.0`, since that's how `packed_simd` is licensed. (The ARM intrinsics Rust version workaround is from qcms, see LICENSE-MIT-QCMS.) -diff --git a/third_party/rust/any_all_workaround/build.rs b/third_party/rust/any_all_workaround/build.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/any_all_workaround/build.rs -@@ -0,0 +1,7 @@ -+extern crate version_check as rustc; -+ -+fn main() { -+ if rustc::is_min_version("1.78.0").unwrap_or(false) { -+ println!("cargo:rustc-cfg=stdsimd_split"); -+ } -+} -diff --git a/third_party/rust/any_all_workaround/src/lib.rs b/third_party/rust/any_all_workaround/src/lib.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/any_all_workaround/src/lib.rs -@@ -0,0 +1,110 @@ -+// This code began as a fork of -+// https://raw.githubusercontent.com/rust-lang/packed_simd/d938e39bee9bc5c222f5f2f2a0df9e53b5ce36ae/src/codegen/reductions/mask/arm.rs -+// which didn't have a license header on the file, but Cargo.toml said "MIT OR Apache-2.0". -+// See LICENSE-MIT and LICENSE-APACHE. -+ -+#![no_std] -+#![feature(portable_simd)] -+#![cfg_attr( -+ all( -+ stdsimd_split, -+ target_arch = "arm", -+ target_endian = "little", -+ target_feature = "neon", -+ target_feature = "v7" -+ ), -+ feature(stdarch_arm_neon_intrinsics) -+)] -+#![cfg_attr( -+ all( -+ not(stdsimd_split), -+ target_arch = "arm", -+ target_endian = "little", -+ target_feature = "neon", -+ target_feature = "v7" -+ ), -+ feature(stdsimd) -+)] -+ -+use cfg_if::cfg_if; -+use core::simd::mask16x8; -+use core::simd::mask32x4; -+use core::simd::mask8x16; -+ -+cfg_if! { -+ if #[cfg(all(target_arch = "arm", target_endian = "little", target_feature = "neon", target_feature = "v7"))] { -+ use core::simd::mask8x8; -+ use core::simd::mask16x4; -+ use core::simd::mask32x2; -+ macro_rules! arm_128_v7_neon_impl { -+ ($all:ident, $any:ident, $id:ident, $half:ident, $vpmin:ident, $vpmax:ident) => { -+ #[inline] -+ pub fn $all(s: $id) -> bool { -+ use core::arch::arm::$vpmin; -+ use core::mem::transmute; -+ unsafe { -+ union U { -+ halves: ($half, $half), -+ vec: $id, -+ } -+ let halves = U { vec: s }.halves; -+ let h: $half = transmute($vpmin(transmute(halves.0), transmute(halves.1))); -+ h.all() -+ } -+ } -+ #[inline] -+ pub fn $any(s: $id) -> bool { -+ use core::arch::arm::$vpmax; -+ use core::mem::transmute; -+ unsafe { -+ union U { -+ halves: ($half, $half), -+ vec: $id, -+ } -+ let halves = U { vec: s }.halves; -+ let h: $half = transmute($vpmax(transmute(halves.0), transmute(halves.1))); -+ h.any() -+ } -+ } -+ } -+ } -+ } else { -+ macro_rules! arm_128_v7_neon_impl { -+ ($all:ident, $any:ident, $id:ident, $half:ident, $vpmin:ident, $vpmax:ident) => { -+ #[inline(always)] -+ pub fn $all(s: $id) -> bool { -+ s.all() -+ } -+ #[inline(always)] -+ pub fn $any(s: $id) -> bool { -+ s.any() -+ } -+ } -+ } -+ } -+} -+ -+arm_128_v7_neon_impl!( -+ all_mask8x16, -+ any_mask8x16, -+ mask8x16, -+ mask8x8, -+ vpmin_u8, -+ vpmax_u8 -+); -+arm_128_v7_neon_impl!( -+ all_mask16x8, -+ any_mask16x8, -+ mask16x8, -+ mask16x4, -+ vpmin_u16, -+ vpmax_u16 -+); -+arm_128_v7_neon_impl!( -+ all_mask32x4, -+ any_mask32x4, -+ mask32x4, -+ mask32x2, -+ vpmin_u32, -+ vpmax_u32 -+); -diff --git a/third_party/rust/encoding_rs/.cargo-checksum.json b/third_party/rust/encoding_rs/.cargo-checksum.json ---- a/third_party/rust/encoding_rs/.cargo-checksum.json -+++ b/third_party/rust/encoding_rs/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"42fa83322aa9fd6723b77d35d0cacb92cbb6e7f573ce11c55f5225292866f8f4","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"d938e8ab0b9ab67e74a1a4f48f23fdce956d0ad3a3f6147ae7612a92763c88d5","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"c1b522b5a799884e5001da661f42c5a8f4d0acb9ef1d74b206f22b5f65365606","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"dc71378a8f07a2d8659f69ee81fb8791fef56ba86f124b429978285237bb4a7b","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"be989dd25c6b946e3e8745fdc8e8a80fcf24b3be99ad0b4b78153ba3f6ab6310","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"c44c002641adb5ebc4368707a8cc0a076d2f33e6a5c27b1b69988eb515f5653d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"8a617cc57032092d65850eb27e00de687c80aea3299e839a1f58b42d0b35abf3","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"808587168d73f0c80f8520f0ca9b161866ed2efeb17a05e85fdf3b8efe7ba28a","src/handles.rs":"cc83dc0754751d67f5688a65c5e0191cba02f6bacce81a0813a243cba55eef7a","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"1dc07b818e45846b16ddcaf0de46c8862dd7df8099123ec38b95c3f8ad9c91ec","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"0bf34103e0ad1b842a13a082dee2b920b05cf4fb0f145c9ee7f608f4cb4a544f","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"2612aba86e1d201096d7e47a859bc3444f85934cc82d8adc6d39a4304d9eecfc","src/single_byte.rs":"3c9e9c1f946ae622c725ba9421240c1faa9a05e95fa10dd4642a25cb276a1edc","src/test_data/big5_in.txt":"4c5a8691f8dc717311889c63894026d2fb62725a86c4208ca274a9cc8d42a503","src/test_data/big5_in_ref.txt":"99d399e17750cf9c7cf30bb253dbfe35b81c4fcbdead93cfa48b1429213473c7","src/test_data/big5_out.txt":"6193ca97c297aa20e09396038d18e938bb7ea331c26f0f2454097296723a0b13","src/test_data/big5_out_ref.txt":"36567691f557df144f6cc520015a87038dfa156f296fcf103b56ae9a718be1fc","src/test_data/euc_kr_in.txt":"c86a7224f3215fa0d04e685622a752fdc72763e8ae076230c7fd62de57ec4074","src/test_data/euc_kr_in_ref.txt":"1f419f4ca47d708b54c73c461545a022ae2e20498fdbf8005a483d752a204883","src/test_data/euc_kr_out.txt":"e7f32e026f70be1e1b58e0047baf7d3d2c520269c4f9b9992e158b4decb0a1a3","src/test_data/euc_kr_out_ref.txt":"c9907857980b20b8e9e3b584482ed6567a2be6185d72237b6322f0404944924e","src/test_data/gb18030_in.txt":"ab7231b2d3e9afacdbd7d7f3b9e5361a7ff9f7e1cfdb4f3bd905b9362b309e53","src/test_data/gb18030_in_ref.txt":"dc5069421adca2043c55f5012b55a76fdff651d22e6e699fd0978f8d5706815c","src/test_data/gb18030_out.txt":"f0208d527f5ca63de7d9a0323be8d5cf12d8a104b2943d92c2701f0c3364dac1","src/test_data/gb18030_out_ref.txt":"6819fe47627e4ea01027003fc514b9f21a1322e732d7f1fb92cc6c5455bc6c07","src/test_data/iso_2022_jp_in.txt":"cd24bbdcb1834e25db54646fbf4c41560a13dc7540f6be3dba4f5d97d44513af","src/test_data/iso_2022_jp_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/iso_2022_jp_out.txt":"9b6f015329dda6c3f9ee5ce6dbd6fa9c89acc21283e886836c78b8d833480c21","src/test_data/iso_2022_jp_out_ref.txt":"78cb260093a20116ad9a42f43b05d1848c5ab100b6b9a850749809e943884b35","src/test_data/jis0208_in.txt":"6df3030553ffb0a6615bb33dc8ea9dca6d9623a9028e2ffec754ce3c3da824cc","src/test_data/jis0208_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/jis0208_out.txt":"4ec24477e1675ce750733bdc3c5add1cd27b6bd4ce1f09289564646e9654e857","src/test_data/jis0208_out_ref.txt":"c3e1cef5032b2b1d93a406f31ff940c4e2dfe8859b8b17ca2761fee7a75a0e48","src/test_data/jis0212_in.txt":"c011f0dd72bd7c8cd922df9374ef8d2769a77190514c77f6c62b415852eeb9fe","src/test_data/jis0212_in_ref.txt":"7d9458b3d2f73e7092a7f505c08ce1d233dde18aa679fbcf9889256239cc9e06","src/test_data/shift_jis_in.txt":"02e389ccef0dd2122e63f503899402cb7f797912c2444cc80ab93131116c5524","src/test_data/shift_jis_in_ref.txt":"512f985950ca902e643c88682dba9708b7c38d3c5ec2925168ab00ac94ab19f9","src/test_data/shift_jis_out.txt":"5fbc44da7bf639bf6cfe0fa1fd3eba7102b88f81919c9ea991302712f69426fb","src/test_data/shift_jis_out_ref.txt":"466322c6fed8286c64582731755290c2296508efdd258826e6279686649b481f","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"c9c010730dfb9f141d4fed19350c08a21af240913a54bb64f5ca89ff93b6b7d1"},"package":"7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"} -\ No newline at end of file -+{"files":{"CONTRIBUTING.md":"ca1901f3e8532fb4cec894fd3664f0eaa898c0c4b961d1b992d1ed54eacf362a","COPYRIGHT":"11789f45bb180841cd362a5eee6789c68ddb573a11105e30768c308a6add0190","Cargo.toml":"22a4d210c92dae9f32c6944ef340ee8fdd027f99c081577e8907123e2a93383e","Ideas.md":"b7452893f500163868d8de52c09addaf91e1632454ed02e892c467ed7ec39dbd","LICENSE-APACHE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","LICENSE-MIT":"3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c","LICENSE-WHATWG":"838118388fe5c2e7f1dbbaeed13e1c7f3ebf88be91319c7c1d77c18e987d1a50","README.md":"1d08aefcb92afa81b18154049c9abbcad4540a23f7172e9f9bbed5af33f1a087","ci/miri.sh":"43cb8d82f49e3bfe2d2274b6ccd6f0714a4188ccef0cecc040829883cfdbee25","doc/Big5.txt":"f73a2edc5cb6c2d140ba6e07f4542e1c4a234950378acde1df93480f0ca0be0b","doc/EUC-JP.txt":"ee2818b907d0137f40a9ab9fd525fc700a44dbdddb6cf0c157a656566bae4bf1","doc/EUC-KR.txt":"71d9e2ccf3b124e8bdfb433c8cf2773fd878077038d0cec3c7237a50f4a78a30","doc/GBK.txt":"c1b522b5a799884e5001da661f42c5a8f4d0acb9ef1d74b206f22b5f65365606","doc/IBM866.txt":"a5a433e804d0f83af785015179fbc1d9b0eaf1f7960efcd04093e136b51fbd0e","doc/ISO-2022-JP.txt":"af86684f5a8f0e2868d7b2c292860140c3d2e5527530ca091f1b28198e8e2fe6","doc/ISO-8859-10.txt":"6d3949ad7c81ca176895101ed81a1db7df1060d64e262880b94bd31bb344ab4d","doc/ISO-8859-13.txt":"3951dd89cf93f7729148091683cf8511f4529388b7dc8dcd0d62eaed55be93fa","doc/ISO-8859-14.txt":"3d330784a0374fd255a38b47949675cc7168c800530534b0a01cac6edc623adc","doc/ISO-8859-15.txt":"24b1084aab5127a85aab99153f86e24694d0a3615f53b5ce23683f97cf66c47a","doc/ISO-8859-16.txt":"ce0272559b92ba76d7a7e476f6424ae4a5cc72e75b183611b08392e44add4d25","doc/ISO-8859-2.txt":"18ceff88c13d1b5ba455a3919b1e3de489045c4c3d2dd7e8527c125c75d54aad","doc/ISO-8859-3.txt":"21798404c68f4f5db59223362f24999da96968c0628427321fccce7d2849a130","doc/ISO-8859-4.txt":"d27f6520c6c5bfbcc19176b71d081cdb3bccde1622bb3e420d5680e812632d53","doc/ISO-8859-5.txt":"a10ec8d6ea7a78ad15da7275f6cb1a3365118527e28f9af6d0d5830501303f3a","doc/ISO-8859-6.txt":"ccda8a2efc96115336bdd77776637b9712425e44fbcf745353b9057fbef144e7","doc/ISO-8859-7.txt":"17900fa1f27a445958f0a77d7d9056be375a6bd7ee4492aa680c7c1500bab85e","doc/ISO-8859-8-I.txt":"8357555646d54265a9b9ffa3e68b08d132312f1561c60108ff9b8b1167b6ecf2","doc/ISO-8859-8.txt":"72cd6f3afb7b4a9c16a66a362473315770b7755d72c86c870e52fc3eba86c8af","doc/KOI8-R.txt":"839cf19a38da994488004ed7814b1f6151640156a9a2af02bf2efca745fb5966","doc/KOI8-U.txt":"0cc76624ed1f024183e2298b7e019957da2c70c8ca06e0fc4e6f353f50a5054f","doc/Shift_JIS.txt":"34c49141818cb9ddbcf59cc858f78a79be8ad148d563f26415108ae1f148443f","doc/UTF-16BE.txt":"e2e280d8acbaa6d2a6b3569d60e17500a285f2baa0df3363dd85537cd5a1ef8f","doc/UTF-16LE.txt":"70bdc170e3fc5298ba68f10125fb5eeb8b077036cc96bb4416c4de396f6d76c1","doc/UTF-8.txt":"ea7bae742e613010ced002cf4b601a737d2203fad65e115611451bc4428f548a","doc/gb18030.txt":"dc71378a8f07a2d8659f69ee81fb8791fef56ba86f124b429978285237bb4a7b","doc/macintosh.txt":"57491e53866711b4672d9b9ff35380b9dac9e0d8e3d6c20bdd6140603687c023","doc/replacement.txt":"4b6c3bbd7999d9d4108a281594bd02d13607e334a95465afff8c2c08d395f0e4","doc/windows-1250.txt":"61296bb6a21cdab602300d32ecfba434cb82de5ac3bc88d58710d2f125e28d39","doc/windows-1251.txt":"7deea1c61dea1485c8ff02db2c7d578db7a9aab63ab1cfd02ec04b515864689e","doc/windows-1252.txt":"933ef3bdddfce5ee132b9f1a1aa8b47423d2587bbe475b19028d0a6d38e180b6","doc/windows-1253.txt":"1a38748b88e99071a5c7b3d5456ead4caedeabab50d50d658be105bc113714de","doc/windows-1254.txt":"f8372f86c6f8d642563cd6ddc025260553292a39423df1683a98670bd7bf2b47","doc/windows-1255.txt":"4e5852494730054e2da258a74e1b9d780abbcdd8ce22ebc218ca2efe9e90493d","doc/windows-1256.txt":"c0879c5172abedead302a406e8f60d9cd9598694a0ffa4fd288ffe4fef7b8ea1","doc/windows-1257.txt":"c28a0c9f964fcb2b46d21f537c402446501a2800670481d6abf9fd9e9018d523","doc/windows-1258.txt":"5019ae4d61805c79aacbf17c93793342dbb098d65a1837783bc3e2c6d6a23602","doc/windows-874.txt":"4ef0e4501c5feba8b17aee1818602ed44b36ca8475db771ce2fc16d392cabecc","doc/x-mac-cyrillic.txt":"58be154d8a888ca3d484b83b44f749823ef339ab27f14d90ca9a856f5050a8bd","doc/x-user-defined.txt":"f9cd07c4321bf5cfb0be4bdddd251072999b04a6cf7a6f5bc63709a84e2c1ffc","generate-encoding-data.py":"be989dd25c6b946e3e8745fdc8e8a80fcf24b3be99ad0b4b78153ba3f6ab6310","rustfmt.toml":"85c1a3b4382fd89e991cbb81b70fb52780472edc064c963943cdaaa56e0a2030","src/ascii.rs":"588e38b01e666d5e7462617ea7e90a108d608dec9e016f3d273ac0744af2e05d","src/big5.rs":"ec6e2913011a38e9a3e825a1731f139a7ca1d5b264fefae51a3cc1a68a57cef9","src/data.rs":"8a617cc57032092d65850eb27e00de687c80aea3299e839a1f58b42d0b35abf3","src/euc_jp.rs":"32047f5b540188c4cb19c07165f846b9786a09f18e315ed3e9bda1293dae52aa","src/euc_kr.rs":"9b25afc72d9378700eecfac58d55ad1c5946d6cd0ccde2c29c08200ef2de6bb9","src/gb18030.rs":"808587168d73f0c80f8520f0ca9b161866ed2efeb17a05e85fdf3b8efe7ba28a","src/handles.rs":"b08cef1f5785bb6a4822f2e844c6df1b046b737b7a075e4593eaa8c4208e9fe2","src/iso_2022_jp.rs":"9bb485e82574f4b7d4b2364f0ff276acb6a0bc111758420a3b0ec5e04c196652","src/lib.rs":"834f44b670ec48ee82c0e12223d1567313fdd9f88bca5f4b117c82c1828f559f","src/macros.rs":"200997f8870de8bfd8cdc475e92115df42108c0df661e49d3d1cbc32056e1d99","src/mem.rs":"948571137d3b151df8db4fb2c733e74ae595d055cdf0ad83abcab9341d6adabe","src/replacement.rs":"7660b34a53f8c1ca2bdfa0e51e843ec28326950952ad8bc96569feb93ac62308","src/shift_jis.rs":"6951ae67e36b1a12fa3a30734957f444d8b1b4ae0e2bde52060b29bd0f16d9d9","src/simd_funcs.rs":"05c6e77af74bfe73cd39a752067c11425d6b46e5da419910f54bf75a5c02a984","src/single_byte.rs":"3ad87116fb339434a4b58e8f2b15485f2b66b9f7814d708f16194ed08f6d6ccf","src/test_data/big5_in.txt":"4c5a8691f8dc717311889c63894026d2fb62725a86c4208ca274a9cc8d42a503","src/test_data/big5_in_ref.txt":"99d399e17750cf9c7cf30bb253dbfe35b81c4fcbdead93cfa48b1429213473c7","src/test_data/big5_out.txt":"6193ca97c297aa20e09396038d18e938bb7ea331c26f0f2454097296723a0b13","src/test_data/big5_out_ref.txt":"36567691f557df144f6cc520015a87038dfa156f296fcf103b56ae9a718be1fc","src/test_data/euc_kr_in.txt":"c86a7224f3215fa0d04e685622a752fdc72763e8ae076230c7fd62de57ec4074","src/test_data/euc_kr_in_ref.txt":"1f419f4ca47d708b54c73c461545a022ae2e20498fdbf8005a483d752a204883","src/test_data/euc_kr_out.txt":"e7f32e026f70be1e1b58e0047baf7d3d2c520269c4f9b9992e158b4decb0a1a3","src/test_data/euc_kr_out_ref.txt":"c9907857980b20b8e9e3b584482ed6567a2be6185d72237b6322f0404944924e","src/test_data/gb18030_in.txt":"ab7231b2d3e9afacdbd7d7f3b9e5361a7ff9f7e1cfdb4f3bd905b9362b309e53","src/test_data/gb18030_in_ref.txt":"dc5069421adca2043c55f5012b55a76fdff651d22e6e699fd0978f8d5706815c","src/test_data/gb18030_out.txt":"f0208d527f5ca63de7d9a0323be8d5cf12d8a104b2943d92c2701f0c3364dac1","src/test_data/gb18030_out_ref.txt":"6819fe47627e4ea01027003fc514b9f21a1322e732d7f1fb92cc6c5455bc6c07","src/test_data/iso_2022_jp_in.txt":"cd24bbdcb1834e25db54646fbf4c41560a13dc7540f6be3dba4f5d97d44513af","src/test_data/iso_2022_jp_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/iso_2022_jp_out.txt":"9b6f015329dda6c3f9ee5ce6dbd6fa9c89acc21283e886836c78b8d833480c21","src/test_data/iso_2022_jp_out_ref.txt":"78cb260093a20116ad9a42f43b05d1848c5ab100b6b9a850749809e943884b35","src/test_data/jis0208_in.txt":"6df3030553ffb0a6615bb33dc8ea9dca6d9623a9028e2ffec754ce3c3da824cc","src/test_data/jis0208_in_ref.txt":"3dc4e6a5e06471942d086b16c9440945e78415f6f3f47e43717e4bc2eac2cdf5","src/test_data/jis0208_out.txt":"4ec24477e1675ce750733bdc3c5add1cd27b6bd4ce1f09289564646e9654e857","src/test_data/jis0208_out_ref.txt":"c3e1cef5032b2b1d93a406f31ff940c4e2dfe8859b8b17ca2761fee7a75a0e48","src/test_data/jis0212_in.txt":"c011f0dd72bd7c8cd922df9374ef8d2769a77190514c77f6c62b415852eeb9fe","src/test_data/jis0212_in_ref.txt":"7d9458b3d2f73e7092a7f505c08ce1d233dde18aa679fbcf9889256239cc9e06","src/test_data/shift_jis_in.txt":"02e389ccef0dd2122e63f503899402cb7f797912c2444cc80ab93131116c5524","src/test_data/shift_jis_in_ref.txt":"512f985950ca902e643c88682dba9708b7c38d3c5ec2925168ab00ac94ab19f9","src/test_data/shift_jis_out.txt":"5fbc44da7bf639bf6cfe0fa1fd3eba7102b88f81919c9ea991302712f69426fb","src/test_data/shift_jis_out_ref.txt":"466322c6fed8286c64582731755290c2296508efdd258826e6279686649b481f","src/test_labels_names.rs":"23a2e11b02b3b8d15fb5613a625e3edb2c61e70e3c581abfd638719a4088200d","src/testing.rs":"f59e671e95a98a56f6b573e8c6be4d71e670bf52f7e20eb1605d990aafa1894e","src/utf_16.rs":"c071a147fad38d750c2c247e141b76b929a48007b99f26b2922b9caecdaf2f25","src/utf_8.rs":"7b7d887b347f1aefa03246b028a36a72758a4ce76c28f3b45c19467851aa7839","src/variant.rs":"1fab5363588a1554a7169de8731ea9cded7ac63ea35caabdd1c27a8dde68c27b","src/x_user_defined.rs":"9456ca46168ef86c98399a2536f577ef7be3cdde90c0c51392d8ac48519d3fae"},"package":"b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"} -\ No newline at end of file -diff --git a/third_party/rust/encoding_rs/Cargo.toml b/third_party/rust/encoding_rs/Cargo.toml ---- a/third_party/rust/encoding_rs/Cargo.toml -+++ b/third_party/rust/encoding_rs/Cargo.toml -@@ -6,18 +6,19 @@ - # to registry (e.g., crates.io) dependencies. - # - # If you are reading this file be aware that the original Cargo.toml - # will likely look very different (and much more reasonable). - # See Cargo.toml.orig for the original contents. - - [package] - edition = "2018" -+rust-version = "1.36" - name = "encoding_rs" --version = "0.8.33" -+version = "0.8.34" - authors = ["Henri Sivonen "] - description = "A Gecko-oriented implementation of the Encoding Standard" - homepage = "https://docs.rs/encoding_rs/" - documentation = "https://docs.rs/encoding_rs/" - readme = "README.md" - keywords = [ - "encoding", - "web", -@@ -31,23 +32,23 @@ categories = [ - "internationalization", - ] - license = "(Apache-2.0 OR MIT) AND BSD-3-Clause" - repository = "https://github.com/hsivonen/encoding_rs" - - [profile.release] - lto = true - -+[dependencies.any_all_workaround] -+version = "0.1.0" -+optional = true -+ - [dependencies.cfg-if] - version = "1.0" - --[dependencies.packed_simd] --version = "0.3.9" --optional = true -- - [dependencies.serde] - version = "1.0" - optional = true - - [dev-dependencies.bincode] - version = "1.0" - - [dev-dependencies.serde_derive] -@@ -69,15 +70,9 @@ fast-legacy-encode = [ - "fast-hanja-encode", - "fast-kanji-encode", - "fast-gb-hanzi-encode", - "fast-big5-hanzi-encode", - ] - less-slow-big5-hanzi-encode = [] - less-slow-gb-hanzi-encode = [] - less-slow-kanji-encode = [] --simd-accel = [ -- "packed_simd", -- "packed_simd/into_bits", --] -- --[badges.travis-ci] --repository = "hsivonen/encoding_rs" -+simd-accel = ["any_all_workaround"] -diff --git a/third_party/rust/encoding_rs/README.md b/third_party/rust/encoding_rs/README.md ---- a/third_party/rust/encoding_rs/README.md -+++ b/third_party/rust/encoding_rs/README.md -@@ -162,50 +162,36 @@ wrappers. - * [C++](https://github.com/hsivonen/recode_cpp) - - ## Optional features - - There are currently these optional cargo features: - - ### `simd-accel` - --Enables SIMD acceleration using the nightly-dependent `packed_simd` crate. -+Enables SIMD acceleration using the nightly-dependent `portable_simd` standard -+library feature. - - This is an opt-in feature, because enabling this feature _opts out_ of Rust's - guarantees of future compilers compiling old code (aka. "stability story"). - - Currently, this has not been tested to be an improvement except for these --targets: -+targets and enabling the `simd-accel` feature is expected to break the build -+on other targets: - - * x86_64 - * i686 - * aarch64 - * thumbv7neon - - If you use nightly Rust, you use targets whose first component is one of the - above, and you are prepared _to have to revise your configuration when updating - Rust_, you should enable this feature. Otherwise, please _do not_ enable this - feature. - --_Note!_ If you are compiling for a target that does not have 128-bit SIMD --enabled as part of the target definition and you are enabling 128-bit SIMD --using `-C target_feature`, you need to enable the `core_arch` Cargo feature --for `packed_simd` to compile a crates.io snapshot of `core_arch` instead of --using the standard-library copy of `core::arch`, because the `core::arch` --module of the pre-compiled standard library has been compiled with the --assumption that the CPU doesn't have 128-bit SIMD. At present this applies --mainly to 32-bit ARM targets whose first component does not include the --substring `neon`. -- --The encoding_rs side of things has not been properly set up for POWER, --PowerPC, MIPS, etc., SIMD at this time, so even if you were to follow --the advice from the previous paragraph, you probably shouldn't use --the `simd-accel` option on the less mainstream architectures at this --time. -- - Used by Firefox. - - ### `serde` - - Enables support for serializing and deserializing `&'static Encoding`-typed - struct fields using [Serde][1]. - - [1]: https://serde.rs/ -@@ -376,18 +362,19 @@ It is a goal to support the latest stabl - the version of Rust that's used for Firefox Nightly. - - At this time, there is no firm commitment to support a version older than - what's required by Firefox, and there is no commitment to treat MSRV changes - as semver-breaking, because this crate depends on `cfg-if`, which doesn't - appear to treat MSRV changes as semver-breaking, so it would be useless for - this crate to treat MSRV changes as semver-breaking. - --As of 2021-02-04, MSRV appears to be Rust 1.36.0 for using the crate and -+As of 2024-04-04, MSRV appears to be Rust 1.36.0 for using the crate and - 1.42.0 for doc tests to pass without errors about the global allocator. -+With the `simd-accel` feature, the MSRV is even higher. - - ## Compatibility with rust-encoding - - A compatibility layer that implements the rust-encoding API on top of - encoding_rs is - [provided as a separate crate](https://github.com/hsivonen/encoding_rs_compat) - (cannot be uploaded to crates.io). The compatibility layer was originally - written with the assuption that Firefox would need it, but it is not currently -@@ -441,20 +428,27 @@ To regenerate the generated code: - - [x] Implement the rust-encoding API in terms of encoding_rs. - - [x] Add SIMD acceleration for Aarch64. - - [x] Investigate the use of NEON on 32-bit ARM. - - [ ] ~Investigate Björn Höhrmann's lookup table acceleration for UTF-8 as - adapted to Rust in rust-encoding.~ - - [x] Add actually fast CJK encode options. - - [ ] ~Investigate [Bob Steagall's lookup table acceleration for UTF-8](https://github.com/BobSteagall/CppNow2018/blob/master/FastConversionFromUTF-8/Fast%20Conversion%20From%20UTF-8%20with%20C%2B%2B%2C%20DFAs%2C%20and%20SSE%20Intrinsics%20-%20Bob%20Steagall%20-%20C%2B%2BNow%202018.pdf).~ - - [x] Provide a build mode that works without `alloc` (with lesser API surface). --- [ ] Migrate to `std::simd` once it is stable and declare 1.0. -+- [x] Migrate to `std::simd` ~once it is stable and declare 1.0.~ -+- [ ] Migrate `unsafe` slice access by larger types than `u8`/`u16` to `align_to`. - - ## Release Notes - -+### 0.8.34 -+ -+* Use the `portable_simd` nightly feature of the standard library instead of the `packed_simd` crate. Only affects the `simd-accel` optional nightly feature. -+* Internal documentation improvements and minor code improvements around `unsafe`. -+* Added `rust-version` to `Cargo.toml`. -+ - ### 0.8.33 - - * Use `packed_simd` instead of `packed_simd_2` again now that updates are back under the `packed_simd` name. Only affects the `simd-accel` optional nightly feature. - - ### 0.8.32 - - * Removed `build.rs`. (This removal should resolve false positives reported by some antivirus products. This may break some build configurations that have opted out of Rust's guarantees against future build breakage.) - * Internal change to what API is used for reinterpreting the lane configuration of SIMD vectors. -diff --git a/third_party/rust/encoding_rs/src/ascii.rs b/third_party/rust/encoding_rs/src/ascii.rs ---- a/third_party/rust/encoding_rs/src/ascii.rs -+++ b/third_party/rust/encoding_rs/src/ascii.rs -@@ -46,71 +46,87 @@ cfg_if! { - #[allow(dead_code)] - #[inline(always)] - fn likely(b: bool) -> bool { - b - } - } - } - -+// Safety invariants for masks: data & mask = 0 for valid ASCII or basic latin utf-16 -+ - // `as` truncates, so works on 32-bit, too. - #[allow(dead_code)] - pub const ASCII_MASK: usize = 0x8080_8080_8080_8080u64 as usize; - - // `as` truncates, so works on 32-bit, too. - #[allow(dead_code)] - pub const BASIC_LATIN_MASK: usize = 0xFF80_FF80_FF80_FF80u64 as usize; - - #[allow(unused_macros)] - macro_rules! ascii_naive { - ($name:ident, $src_unit:ty, $dst_unit:ty) => { -+ /// Safety: src and dst must have len_unit elements and be aligned -+ /// Safety-usable invariant: will return Some() when it fails -+ /// to convert. The first value will be a u8 that is > 127. - #[inline(always)] - pub unsafe fn $name( - src: *const $src_unit, - dst: *mut $dst_unit, - len: usize, - ) -> Option<($src_unit, usize)> { - // Yes, manually omitting the bound check here matters - // a lot for perf. - for i in 0..len { -+ // Safety: len invariant used here - let code_unit = *(src.add(i)); -+ // Safety: Upholds safety-usable invariant here - if code_unit > 127 { - return Some((code_unit, i)); - } -+ // Safety: len invariant used here - *(dst.add(i)) = code_unit as $dst_unit; - } - return None; - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_alu { - ($name:ident, -+ // safety invariant: src/dst MUST be u8 - $src_unit:ty, - $dst_unit:ty, -+ // Safety invariant: stride_fn must consume and produce two usizes, and return the index of the first non-ascii when it fails - $stride_fn:ident) => { -+ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for -+ /// write -+ /// Safety-usable invariant: will return Some() when it fails -+ /// to convert. The first value will be a u8 that is > 127. - #[cfg_attr(feature = "cargo-clippy", allow(never_loop, cast_ptr_alignment))] - #[inline(always)] - pub unsafe fn $name( - src: *const $src_unit, - dst: *mut $dst_unit, - len: usize, - ) -> Option<($src_unit, usize)> { - let mut offset = 0usize; - // This loop is only broken out of as a `goto` forward - loop { -+ // Safety: until_alignment becomes the number of bytes we need to munch until we are aligned to usize - let mut until_alignment = { - // Check if the other unit aligns if we move the narrower unit - // to alignment. - // if ::core::mem::size_of::<$src_unit>() == ::core::mem::size_of::<$dst_unit>() { - // ascii_to_ascii - let src_alignment = (src as usize) & ALU_ALIGNMENT_MASK; - let dst_alignment = (dst as usize) & ALU_ALIGNMENT_MASK; - if src_alignment != dst_alignment { -+ // Safety: bails early and ends up in the naïve branch where usize-alignment doesn't matter - break; - } - (ALU_ALIGNMENT - src_alignment) & ALU_ALIGNMENT_MASK - // } else if ::core::mem::size_of::<$src_unit>() < ::core::mem::size_of::<$dst_unit>() { - // ascii_to_basic_latin - // let src_until_alignment = (ALIGNMENT - ((src as usize) & ALIGNMENT_MASK)) & ALIGNMENT_MASK; - // if (dst.add(src_until_alignment) as usize) & ALIGNMENT_MASK != 0 { - // break; -@@ -129,74 +145,104 @@ macro_rules! ascii_alu { - // Moving pointers to alignment seems to be a pessimization on - // x86_64 for operations that have UTF-16 as the internal - // Unicode representation. However, since it seems to be a win - // on ARM (tested ARMv7 code running on ARMv8 [rpi3]), except - // mixed results when encoding from UTF-16 and since x86 and - // x86_64 should be using SSE2 in due course, keeping the move - // to alignment here. It would be good to test on more ARM CPUs - // and on real MIPS and POWER hardware. -+ // -+ // Safety: This is the naïve code once again, for `until_alignment` bytes - while until_alignment != 0 { - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety: Upholds safety-usable invariant here - return Some((code_unit, offset)); - } - *(dst.add(offset)) = code_unit as $dst_unit; -+ // Safety: offset is the number of bytes copied so far - offset += 1; - until_alignment -= 1; - } - let len_minus_stride = len - ALU_STRIDE_SIZE; - loop { -+ // Safety: num_ascii is known to be a byte index of a non-ascii byte due to stride_fn's invariant - if let Some(num_ascii) = $stride_fn( -+ // Safety: These are known to be valid and aligned since we have at -+ // least ALU_STRIDE_SIZE data in these buffers, and offset is the -+ // number of elements copied so far, which according to the -+ // until_alignment calculation above will cause both src and dst to be -+ // aligned to usize after this add - src.add(offset) as *const usize, - dst.add(offset) as *mut usize, - ) { - offset += num_ascii; -+ // Safety: Upholds safety-usable invariant here by indexing into non-ascii byte - return Some((*(src.add(offset)), offset)); - } -+ // Safety: offset continues to be the number of bytes copied so far, and -+ // maintains usize alignment for the next loop iteration - offset += ALU_STRIDE_SIZE; -+ // Safety: This is `offset > len - stride. This loop will continue as long as -+ // `offset <= len - stride`, which means there are `stride` bytes to still be read. - if offset > len_minus_stride { - break; - } - } - } - break; - } -+ -+ // Safety: This is the naïve code, same as ascii_naive, and has no requirements -+ // other than src/dst being valid for the the right lens - while offset < len { -+ // Safety: len invariant used here - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety: Upholds safety-usable invariant here - return Some((code_unit, offset)); - } -+ // Safety: len invariant used here - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! basic_latin_alu { - ($name:ident, -+ // safety invariant: use u8 for src/dest for ascii, and u16 for basic_latin - $src_unit:ty, - $dst_unit:ty, -+ // safety invariant: stride function must munch ALU_STRIDE_SIZE*size(src_unit) bytes off of src and -+ // write ALU_STRIDE_SIZE*size(dst_unit) bytes to dst - $stride_fn:ident) => { -+ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for -+ /// write -+ /// Safety-usable invariant: will return Some() when it fails -+ /// to convert. The first value will be a u8 that is > 127. - #[cfg_attr( - feature = "cargo-clippy", - allow(never_loop, cast_ptr_alignment, cast_lossless) - )] - #[inline(always)] - pub unsafe fn $name( - src: *const $src_unit, - dst: *mut $dst_unit, - len: usize, - ) -> Option<($src_unit, usize)> { - let mut offset = 0usize; - // This loop is only broken out of as a `goto` forward - loop { -+ // Safety: until_alignment becomes the number of bytes we need to munch from src/dest until we are aligned to usize -+ // We ensure basic-latin has the same alignment as ascii, starting with ascii since it is smaller. - let mut until_alignment = { - // Check if the other unit aligns if we move the narrower unit - // to alignment. - // if ::core::mem::size_of::<$src_unit>() == ::core::mem::size_of::<$dst_unit>() { - // ascii_to_ascii - // let src_alignment = (src as usize) & ALIGNMENT_MASK; - // let dst_alignment = (dst as usize) & ALIGNMENT_MASK; - // if src_alignment != dst_alignment { -@@ -232,66 +278,89 @@ macro_rules! basic_latin_alu { - // Moving pointers to alignment seems to be a pessimization on - // x86_64 for operations that have UTF-16 as the internal - // Unicode representation. However, since it seems to be a win - // on ARM (tested ARMv7 code running on ARMv8 [rpi3]), except - // mixed results when encoding from UTF-16 and since x86 and - // x86_64 should be using SSE2 in due course, keeping the move - // to alignment here. It would be good to test on more ARM CPUs - // and on real MIPS and POWER hardware. -+ // -+ // Safety: This is the naïve code once again, for `until_alignment` bytes - while until_alignment != 0 { - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety: Upholds safety-usable invariant here - return Some((code_unit, offset)); - } - *(dst.add(offset)) = code_unit as $dst_unit; -+ // Safety: offset is the number of bytes copied so far - offset += 1; - until_alignment -= 1; - } - let len_minus_stride = len - ALU_STRIDE_SIZE; - loop { - if !$stride_fn( -+ // Safety: These are known to be valid and aligned since we have at -+ // least ALU_STRIDE_SIZE data in these buffers, and offset is the -+ // number of elements copied so far, which according to the -+ // until_alignment calculation above will cause both src and dst to be -+ // aligned to usize after this add - src.add(offset) as *const usize, - dst.add(offset) as *mut usize, - ) { - break; - } -+ // Safety: offset continues to be the number of bytes copied so far, and -+ // maintains usize alignment for the next loop iteration - offset += ALU_STRIDE_SIZE; -+ // Safety: This is `offset > len - stride. This loop will continue as long as -+ // `offset <= len - stride`, which means there are `stride` bytes to still be read. - if offset > len_minus_stride { - break; - } - } - } - break; - } -+ // Safety: This is the naïve code once again, for leftover bytes - while offset < len { -+ // Safety: len invariant used here - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety: Upholds safety-usable invariant here - return Some((code_unit, offset)); - } -+ // Safety: len invariant used here - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! latin1_alu { -+ // safety invariant: stride function must munch ALU_STRIDE_SIZE*size(src_unit) bytes off of src and -+ // write ALU_STRIDE_SIZE*size(dst_unit) bytes to dst - ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_fn:ident) => { -+ /// Safety: src and dst must have len elements, src is valid for read, dst is valid for -+ /// write - #[cfg_attr( - feature = "cargo-clippy", - allow(never_loop, cast_ptr_alignment, cast_lossless) - )] - #[inline(always)] - pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { - let mut offset = 0usize; - // This loop is only broken out of as a `goto` forward - loop { -+ // Safety: until_alignment becomes the number of bytes we need to munch from src/dest until we are aligned to usize -+ // We ensure the UTF-16 side has the same alignment as the Latin-1 side, starting with Latin-1 since it is smaller. - let mut until_alignment = { - if ::core::mem::size_of::<$src_unit>() < ::core::mem::size_of::<$dst_unit>() { - // unpack - let src_until_alignment = (ALU_ALIGNMENT - - ((src as usize) & ALU_ALIGNMENT_MASK)) - & ALU_ALIGNMENT_MASK; - if (dst.wrapping_add(src_until_alignment) as usize) & ALU_ALIGNMENT_MASK - != 0 -@@ -308,373 +377,485 @@ macro_rules! latin1_alu { - != 0 - { - break; - } - dst_until_alignment - } - }; - if until_alignment + ALU_STRIDE_SIZE <= len { -+ // Safety: This is the naïve code once again, for `until_alignment` bytes - while until_alignment != 0 { - let code_unit = *(src.add(offset)); - *(dst.add(offset)) = code_unit as $dst_unit; -+ // Safety: offset is the number of bytes copied so far - offset += 1; - until_alignment -= 1; - } - let len_minus_stride = len - ALU_STRIDE_SIZE; - loop { - $stride_fn( -+ // Safety: These are known to be valid and aligned since we have at -+ // least ALU_STRIDE_SIZE data in these buffers, and offset is the -+ // number of elements copied so far, which according to the -+ // until_alignment calculation above will cause both src and dst to be -+ // aligned to usize after this add - src.add(offset) as *const usize, - dst.add(offset) as *mut usize, - ); -+ // Safety: offset continues to be the number of bytes copied so far, and -+ // maintains usize alignment for the next loop iteration - offset += ALU_STRIDE_SIZE; -+ // Safety: This is `offset > len - stride. This loop will continue as long as -+ // `offset <= len - stride`, which means there are `stride` bytes to still be read. - if offset > len_minus_stride { - break; - } - } - } - break; - } -+ // Safety: This is the naïve code once again, for leftover bytes - while offset < len { -+ // Safety: len invariant used here - let code_unit = *(src.add(offset)); - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_simd_check_align { - ( - $name:ident, - $src_unit:ty, - $dst_unit:ty, -+ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_both_aligned:ident, -+ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_src_aligned:ident, -+ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_dst_aligned:ident, -+ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_neither_aligned:ident - ) => { -+ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. -+ /// -+ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being -+ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found - #[inline(always)] - pub unsafe fn $name( - src: *const $src_unit, - dst: *mut $dst_unit, - len: usize, - ) -> Option<($src_unit, usize)> { - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. - if SIMD_STRIDE_SIZE <= len { - let len_minus_stride = len - SIMD_STRIDE_SIZE; - // XXX Should we first process one stride unconditionally as unaligned to - // avoid the cost of the branchiness below if the first stride fails anyway? - // XXX Should we just use unaligned SSE2 access unconditionally? It seems that - // on Haswell, it would make sense to just use unaligned and not bother - // checking. Need to benchmark older architectures before deciding. - let dst_masked = (dst as usize) & SIMD_ALIGNMENT_MASK; -+ // Safety: checking whether src is aligned - if ((src as usize) & SIMD_ALIGNMENT_MASK) == 0 { -+ // Safety: Checking whether dst is aligned - if dst_masked == 0 { - loop { -+ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments - if !$stride_both_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } else { - loop { -+ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments - if !$stride_src_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } - } else { - if dst_masked == 0 { - loop { -+ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments - if !$stride_dst_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } else { - loop { -+ // Safety: We're valid to read/write SIMD_STRIDE_SIZE elements and have the appropriate alignments - if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } - } - } - while offset < len { -+ // Safety: uses len invariant here and below - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety: upholds safety-usable invariant - return Some((code_unit, offset)); - } - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_simd_check_align_unrolled { - ( - $name:ident, - $src_unit:ty, - $dst_unit:ty, -+ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_both_aligned:ident, -+ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_src_aligned:ident, -+ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_neither_aligned:ident, -+ // Safety: This function must require aligned src/dest that are valid for reading/writing 2*SIMD_STRIDE_SIZE src_unit/dst_unit - $double_stride_both_aligned:ident, -+ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing 2*SIMD_STRIDE_SIZE src_unit/dst_unit - $double_stride_src_aligned:ident - ) => { -- #[inline(always)] -+ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. -+ /// -+ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being -+ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found #[inline(always)] - pub unsafe fn $name( - src: *const $src_unit, - dst: *mut $dst_unit, - len: usize, - ) -> Option<($src_unit, usize)> { - let unit_size = ::core::mem::size_of::<$src_unit>(); - let mut offset = 0usize; - // This loop is only broken out of as a goto forward without - // actually looping - 'outer: loop { -+ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. - if SIMD_STRIDE_SIZE <= len { - // First, process one unaligned -+ // Safety: this is safe to call since we're valid for this read/write - if !$stride_neither_aligned(src, dst) { - break 'outer; - } - offset = SIMD_STRIDE_SIZE; - - // We have now seen 16 ASCII bytes. Let's guess that - // there will be enough more to justify more expense - // in the case of non-ASCII. - // Use aligned reads for the sake of old microachitectures. -+ // -+ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. -+ // This is less that SIMD_ALIGNMENT, which is also SIMD_STRIDE_SIZE (as documented) - let until_alignment = ((SIMD_ALIGNMENT - - ((src.add(offset) as usize) & SIMD_ALIGNMENT_MASK)) - & SIMD_ALIGNMENT_MASK) - / unit_size; -- // This addition won't overflow, because even in the 32-bit PAE case the -+ // Safety: This addition won't overflow, because even in the 32-bit PAE case the - // address space holds enough code that the slice length can't be that - // close to address space size. - // offset now equals SIMD_STRIDE_SIZE, hence times 3 below. -+ // -+ // Safety: if this check succeeds we're valid for reading/writing at least `2 * SIMD_STRIDE_SIZE` elements plus `until_alignment`. -+ // The extra SIMD_STRIDE_SIZE in the condition is because `offset` is already `SIMD_STRIDE_SIZE`. - if until_alignment + (SIMD_STRIDE_SIZE * 3) <= len { - if until_alignment != 0 { -+ // Safety: this is safe to call since we're valid for this read/write (and more), and don't care about alignment -+ // This will copy over bytes that get decoded twice since it's not incrementing `offset` by SIMD_STRIDE_SIZE. This is fine. - if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += until_alignment; - } -+ // Safety: At this point we're valid for reading/writing 2*SIMD_STRIDE_SIZE elements -+ // Safety: Now `offset` is aligned for `src` - let len_minus_stride_times_two = len - (SIMD_STRIDE_SIZE * 2); -+ // Safety: This is whether dst is aligned - let dst_masked = (dst.add(offset) as usize) & SIMD_ALIGNMENT_MASK; - if dst_masked == 0 { - loop { -+ // Safety: both are aligned, we can call the aligned function. We're valid for reading/writing double stride from the initial condition -+ // and the loop break condition below - if let Some(advance) = - $double_stride_both_aligned(src.add(offset), dst.add(offset)) - { - offset += advance; - let code_unit = *(src.add(offset)); -+ // Safety: uses safety-usable invariant on ascii_to_ascii_simd_double_stride to return -+ // guaranteed non-ascii - return Some((code_unit, offset)); - } - offset += SIMD_STRIDE_SIZE * 2; -+ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride_times_two { - break; - } - } -+ // Safety: We're valid for reading/writing one more, and can still assume alignment - if offset + SIMD_STRIDE_SIZE <= len { - if !$stride_both_aligned(src.add(offset), dst.add(offset)) { - break 'outer; - } - offset += SIMD_STRIDE_SIZE; - } - } else { - loop { -+ // Safety: only src is aligned here. We're valid for reading/writing double stride from the initial condition -+ // and the loop break condition below - if let Some(advance) = - $double_stride_src_aligned(src.add(offset), dst.add(offset)) - { - offset += advance; - let code_unit = *(src.add(offset)); -+ // Safety: uses safety-usable invariant on ascii_to_ascii_simd_double_stride to return -+ // guaranteed non-ascii - return Some((code_unit, offset)); - } - offset += SIMD_STRIDE_SIZE * 2; -+ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. -+ - if offset > len_minus_stride_times_two { - break; - } - } -+ // Safety: We're valid for reading/writing one more, and can still assume alignment - if offset + SIMD_STRIDE_SIZE <= len { - if !$stride_src_aligned(src.add(offset), dst.add(offset)) { - break 'outer; - } - offset += SIMD_STRIDE_SIZE; - } - } - } else { - // At most two iterations, so unroll - if offset + SIMD_STRIDE_SIZE <= len { -+ // Safety: The check above ensures we're allowed to read/write this, and we don't use alignment - if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; - if offset + SIMD_STRIDE_SIZE <= len { -+ // Safety: The check above ensures we're allowed to read/write this, and we don't use alignment - if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; - } - } - } - } - break 'outer; - } - while offset < len { -+ // Safety: relies straightforwardly on the `len` invariant - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety-usable invariant upheld here - return Some((code_unit, offset)); - } - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! latin1_simd_check_align { - ( - $name:ident, - $src_unit:ty, - $dst_unit:ty, -+ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_both_aligned:ident, -+ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_src_aligned:ident, -+ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_dst_aligned:ident, -+ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_neither_aligned:ident -+ - ) => { -+ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. - #[inline(always)] - pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. - if SIMD_STRIDE_SIZE <= len { - let len_minus_stride = len - SIMD_STRIDE_SIZE; -+ // Whether dst is aligned - let dst_masked = (dst as usize) & SIMD_ALIGNMENT_MASK; -+ // Whether src is aligned - if ((src as usize) & SIMD_ALIGNMENT_MASK) == 0 { - if dst_masked == 0 { - loop { -+ // Safety: Both were aligned, we can use the aligned function - $stride_both_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for -+ // reading/writing at least SIMD_STRIDE_SIZE elements. - if offset > len_minus_stride { - break; - } - } - } else { - loop { -+ // Safety: src was aligned, dst was not - $stride_src_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for -+ // reading/writing at least SIMD_STRIDE_SIZE elements. - if offset > len_minus_stride { - break; - } - } - } - } else { - if dst_masked == 0 { - loop { -+ // Safety: src was aligned, dst was not - $stride_dst_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for -+ // reading/writing at least SIMD_STRIDE_SIZE elements. - if offset > len_minus_stride { - break; - } - } - } else { - loop { -+ // Safety: Neither were aligned - $stride_neither_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which means in the next iteration we're valid for -+ // reading/writing at least SIMD_STRIDE_SIZE elements. - if offset > len_minus_stride { - break; - } - } - } - } - } - while offset < len { -+ // Safety: relies straightforwardly on the `len` invariant - let code_unit = *(src.add(offset)); - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - } - }; - } - - #[allow(unused_macros)] - macro_rules! latin1_simd_check_align_unrolled { - ( - $name:ident, - $src_unit:ty, - $dst_unit:ty, -+ // Safety: This function must require aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_both_aligned:ident, -+ // Safety: This function must require aligned/unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_src_aligned:ident, -+ // Safety: This function must require unaligned/aligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_dst_aligned:ident, -+ // Safety: This function must require unaligned src/dest that are valid for reading/writing SIMD_STRIDE_SIZE src_unit/dst_unit - $stride_neither_aligned:ident - ) => { -+ /// Safety: src/dst must be valid for reads/writes of `len` elements of their units. - #[inline(always)] - pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { - let unit_size = ::core::mem::size_of::<$src_unit>(); - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading/writing at least `SIMD_STRIDE_SIZE` elements. - if SIMD_STRIDE_SIZE <= len { -+ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. -+ // This is by definition less than SIMD_STRIDE_SIZE. - let mut until_alignment = ((SIMD_STRIDE_SIZE - - ((src as usize) & SIMD_ALIGNMENT_MASK)) - & SIMD_ALIGNMENT_MASK) - / unit_size; - while until_alignment != 0 { -+ // Safety: This is a straightforward copy, since until_alignment is < SIMD_STRIDE_SIZE < len, this is in-bounds - *(dst.add(offset)) = *(src.add(offset)) as $dst_unit; - offset += 1; - until_alignment -= 1; - } -+ // Safety: here offset will be `until_alignment`, i.e. enough to align `src`. - let len_minus_stride = len - SIMD_STRIDE_SIZE; -+ // Safety: if this check succeeds we're valid for reading/writing at least `2 * SIMD_STRIDE_SIZE` elements. - if offset + SIMD_STRIDE_SIZE * 2 <= len { - let len_minus_stride_times_two = len_minus_stride - SIMD_STRIDE_SIZE; -+ // Safety: at this point src is known to be aligned at offset, dst is not. - if (dst.add(offset) as usize) & SIMD_ALIGNMENT_MASK == 0 { - loop { -+ // Safety: We checked alignment of dst above, we can use the alignment functions. We're allowed to read/write 2*SIMD_STRIDE_SIZE elements, which we do. - $stride_both_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; - $stride_both_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride_times_two { - break; - } - } - } else { - loop { -+ // Safety: we ensured alignment of src already. - $stride_src_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; - $stride_src_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride_times_two { - break; - } - } - } - } -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE` which means we are valid to munch SIMD_STRIDE_SIZE more elements, which we do - if offset < len_minus_stride { - $stride_src_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; - } - } - while offset < len { -+ // Safety: uses len invariant here and below - let code_unit = *(src.add(offset)); - // On x86_64, this loop autovectorizes but in the pack - // case there are instructions whose purpose is to make sure - // each u16 in the vector is truncated before packing. However, - // since we don't care about saturating behavior of SSE2 packing - // when the input isn't Latin1, those instructions are useless. - // Unfortunately, using the `assume` intrinsic to lie to the - // optimizer doesn't make LLVM omit the trunctation that we -@@ -688,138 +869,180 @@ macro_rules! latin1_simd_check_align_unr - offset += 1; - } - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_simd_unalign { -+ // Safety: stride_neither_aligned must be a function that requires src/dest be valid for unaligned reads/writes for SIMD_STRIDE_SIZE elements of type src_unit/dest_unit - ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_neither_aligned:ident) => { -+ /// Safety: src and dst must be valid for reads/writes of len elements of type src_unit/dst_unit -+ /// -+ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being -+ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found - #[inline(always)] - pub unsafe fn $name( - src: *const $src_unit, - dst: *mut $dst_unit, - len: usize, - ) -> Option<($src_unit, usize)> { - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. - if SIMD_STRIDE_SIZE <= len { - let len_minus_stride = len - SIMD_STRIDE_SIZE; - loop { -+ // Safety: We know we're valid for `stride` reads/writes, so we can call this function. We don't need alignment. - if !$stride_neither_aligned(src.add(offset), dst.add(offset)) { - break; - } - offset += SIMD_STRIDE_SIZE; -+ // This is `offset > len - stride` which means we always have at least `stride` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } - while offset < len { -+ // Safety: Uses len invariant here and below - let code_unit = *(src.add(offset)); - if code_unit > 127 { -+ // Safety-usable invariant upheld here - return Some((code_unit, offset)); - } - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! latin1_simd_unalign { -+ // Safety: stride_neither_aligned must be a function that requires src/dest be valid for unaligned reads/writes for SIMD_STRIDE_SIZE elements of type src_unit/dest_unit - ($name:ident, $src_unit:ty, $dst_unit:ty, $stride_neither_aligned:ident) => { -+ /// Safety: src and dst must be valid for unaligned reads/writes of len elements of type src_unit/dst_unit - #[inline(always)] - pub unsafe fn $name(src: *const $src_unit, dst: *mut $dst_unit, len: usize) { - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. - if SIMD_STRIDE_SIZE <= len { - let len_minus_stride = len - SIMD_STRIDE_SIZE; - loop { -+ // Safety: We know we're valid for `stride` reads/writes, so we can call this function. We don't need alignment. - $stride_neither_aligned(src.add(offset), dst.add(offset)); - offset += SIMD_STRIDE_SIZE; -+ // This is `offset > len - stride` which means we always have at least `stride` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } - while offset < len { -+ // Safety: Uses len invariant here - let code_unit = *(src.add(offset)); - *(dst.add(offset)) = code_unit as $dst_unit; - offset += 1; - } - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_to_ascii_simd_stride { -+ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) - ($name:ident, $load:ident, $store:ident) => { -+ /// Safety: src and dst must be valid for 16 bytes of read/write according to -+ /// the $load/$store fn, which may allow for unaligned reads/writes or require -+ /// alignment to either 16x8 or u8x16. - #[inline(always)] - pub unsafe fn $name(src: *const u8, dst: *mut u8) -> bool { - let simd = $load(src); - if !simd_is_ascii(simd) { - return false; - } - $store(dst, simd); - true - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_to_ascii_simd_double_stride { -+ // Safety: store must be valid for 32 bytes of write, which may be unaligned (candidates: `store(8|16)_(aligned|unaligned)`) - ($name:ident, $store:ident) => { -+ /// Safety: src must be valid for 32 bytes of aligned u8x16 read -+ /// dst must be valid for 32 bytes of unaligned write according to -+ /// the $store fn, which may allow for unaligned writes or require -+ /// alignment to either 16x8 or u8x16. -+ /// -+ /// Safety-usable invariant: Returns Some(index) if the element at `index` is invalid ASCII - #[inline(always)] - pub unsafe fn $name(src: *const u8, dst: *mut u8) -> Option { - let first = load16_aligned(src); - let second = load16_aligned(src.add(SIMD_STRIDE_SIZE)); - $store(dst, first); - if unlikely(!simd_is_ascii(first | second)) { -+ // Safety: mask_ascii produces a mask of all the high bits. - let mask_first = mask_ascii(first); - if mask_first != 0 { -+ // Safety: on little endian systems this will be the number of ascii bytes -+ // before the first non-ascii, i.e. valid for indexing src -+ // TODO SAFETY: What about big-endian systems? - return Some(mask_first.trailing_zeros() as usize); - } - $store(dst.add(SIMD_STRIDE_SIZE), second); - let mask_second = mask_ascii(second); -+ // Safety: on little endian systems this will be the number of ascii bytes -+ // before the first non-ascii, i.e. valid for indexing src - return Some(SIMD_STRIDE_SIZE + mask_second.trailing_zeros() as usize); - } - $store(dst.add(SIMD_STRIDE_SIZE), second); - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_to_basic_latin_simd_stride { -+ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) - ($name:ident, $load:ident, $store:ident) => { -+ /// Safety: src and dst must be valid for 16/32 bytes of read/write according to -+ /// the $load/$store fn, which may allow for unaligned reads/writes or require -+ /// alignment to either 16x8 or u8x16. - #[inline(always)] - pub unsafe fn $name(src: *const u8, dst: *mut u16) -> bool { - let simd = $load(src); - if !simd_is_ascii(simd) { - return false; - } - let (first, second) = simd_unpack(simd); - $store(dst, first); - $store(dst.add(8), second); - true - } - }; - } - - #[allow(unused_macros)] - macro_rules! ascii_to_basic_latin_simd_double_stride { -+ // Safety: store must be valid for 16 bytes of write, which may be unaligned - ($name:ident, $store:ident) => { -+ /// Safety: src must be valid for 2*SIMD_STRIDE_SIZE bytes of aligned reads, -+ /// aligned to either 16x8 or u8x16. -+ /// dst must be valid for 2*SIMD_STRIDE_SIZE bytes of aligned or unaligned reads - #[inline(always)] - pub unsafe fn $name(src: *const u8, dst: *mut u16) -> Option { - let first = load16_aligned(src); - let second = load16_aligned(src.add(SIMD_STRIDE_SIZE)); - let (a, b) = simd_unpack(first); - $store(dst, a); -+ // Safety: divide by 2 since it's a u16 pointer - $store(dst.add(SIMD_STRIDE_SIZE / 2), b); - if unlikely(!simd_is_ascii(first | second)) { - let mask_first = mask_ascii(first); - if mask_first != 0 { - return Some(mask_first.trailing_zeros() as usize); - } - let (c, d) = simd_unpack(second); - $store(dst.add(SIMD_STRIDE_SIZE), c); -@@ -832,47 +1055,59 @@ macro_rules! ascii_to_basic_latin_simd_d - $store(dst.add(SIMD_STRIDE_SIZE + (SIMD_STRIDE_SIZE / 2)), d); - None - } - }; - } - - #[allow(unused_macros)] - macro_rules! unpack_simd_stride { -+ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) - ($name:ident, $load:ident, $store:ident) => { -+ /// Safety: src and dst must be valid for 16 bytes of read/write according to -+ /// the $load/$store fn, which may allow for unaligned reads/writes or require -+ /// alignment to either 16x8 or u8x16. - #[inline(always)] - pub unsafe fn $name(src: *const u8, dst: *mut u16) { - let simd = $load(src); - let (first, second) = simd_unpack(simd); - $store(dst, first); - $store(dst.add(8), second); - } - }; - } - - #[allow(unused_macros)] - macro_rules! basic_latin_to_ascii_simd_stride { -+ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) - ($name:ident, $load:ident, $store:ident) => { -+ /// Safety: src and dst must be valid for 32/16 bytes of read/write according to -+ /// the $load/$store fn, which may allow for unaligned reads/writes or require -+ /// alignment to either 16x8 or u8x16. - #[inline(always)] - pub unsafe fn $name(src: *const u16, dst: *mut u8) -> bool { - let first = $load(src); - let second = $load(src.add(8)); - if simd_is_basic_latin(first | second) { - $store(dst, simd_pack(first, second)); - true - } else { - false - } - } - }; - } - - #[allow(unused_macros)] - macro_rules! pack_simd_stride { -+ // Safety: load/store must be valid for 16 bytes of read/write, which may be unaligned. (candidates: `(load|store)(16|8)_(unaligned|aligned)` functions) - ($name:ident, $load:ident, $store:ident) => { -+ /// Safety: src and dst must be valid for 32/16 bytes of read/write according to -+ /// the $load/$store fn, which may allow for unaligned reads/writes or require -+ /// alignment to either 16x8 or u8x16. - #[inline(always)] - pub unsafe fn $name(src: *const u16, dst: *mut u8) { - let first = $load(src); - let second = $load(src.add(8)); - $store(dst, simd_pack(first, second)); - } - }; - } -@@ -888,24 +1123,28 @@ cfg_if! { - // pub const ALIGNMENT: usize = 8; - - pub const ALU_STRIDE_SIZE: usize = 16; - - pub const ALU_ALIGNMENT: usize = 8; - - pub const ALU_ALIGNMENT_MASK: usize = 7; - -+ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently produce -+ // neither_unaligned variants using only unaligned inputs. - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_neither_aligned, load16_unaligned, store16_unaligned); - - ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_neither_aligned, load16_unaligned, store8_unaligned); - unpack_simd_stride!(unpack_stride_neither_aligned, load16_unaligned, store8_unaligned); - - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); - pack_simd_stride!(pack_stride_neither_aligned, load8_unaligned, store16_unaligned); - -+ // Safety for conversion macros: We use the unalign macro with unalign functions above. All stride functions were produced -+ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. - ascii_simd_unalign!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_neither_aligned); - ascii_simd_unalign!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_neither_aligned); - ascii_simd_unalign!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_neither_aligned); - latin1_simd_unalign!(unpack_latin1, u8, u16, unpack_stride_neither_aligned); - latin1_simd_unalign!(pack_latin1, u16, u8, pack_stride_neither_aligned); - } else if #[cfg(all(feature = "simd-accel", target_endian = "little", target_feature = "neon"))] { - // SIMD with different instructions for aligned and unaligned loads and stores. - // -@@ -914,16 +1153,19 @@ cfg_if! { - // but the benchmark results I see don't agree. - - pub const SIMD_STRIDE_SIZE: usize = 16; - - pub const MAX_STRIDE_SIZE: usize = 16; - - pub const SIMD_ALIGNMENT_MASK: usize = 15; - -+ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently name -+ // aligned/unaligned functions according to src/dst being aligned/unaligned -+ - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_both_aligned, load16_aligned, store16_aligned); - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_src_aligned, load16_aligned, store16_unaligned); - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_dst_aligned, load16_unaligned, store16_aligned); - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_neither_aligned, load16_unaligned, store16_unaligned); - - ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_both_aligned, load16_aligned, store8_aligned); - ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_src_aligned, load16_aligned, store8_unaligned); - ascii_to_basic_latin_simd_stride!(ascii_to_basic_latin_stride_dst_aligned, load16_unaligned, store8_aligned); -@@ -939,36 +1181,43 @@ cfg_if! { - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_dst_aligned, load8_unaligned, store16_aligned); - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); - - pack_simd_stride!(pack_stride_both_aligned, load8_aligned, store16_aligned); - pack_simd_stride!(pack_stride_src_aligned, load8_aligned, store16_unaligned); - pack_simd_stride!(pack_stride_dst_aligned, load8_unaligned, store16_aligned); - pack_simd_stride!(pack_stride_neither_aligned, load8_unaligned, store16_unaligned); - -+ // Safety for conversion macros: We use the correct pattern of both/src/dst/neither here. All stride functions were produced -+ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. -+ - ascii_simd_check_align!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_both_aligned, ascii_to_ascii_stride_src_aligned, ascii_to_ascii_stride_dst_aligned, ascii_to_ascii_stride_neither_aligned); - ascii_simd_check_align!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_both_aligned, ascii_to_basic_latin_stride_src_aligned, ascii_to_basic_latin_stride_dst_aligned, ascii_to_basic_latin_stride_neither_aligned); - ascii_simd_check_align!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_both_aligned, basic_latin_to_ascii_stride_src_aligned, basic_latin_to_ascii_stride_dst_aligned, basic_latin_to_ascii_stride_neither_aligned); - latin1_simd_check_align!(unpack_latin1, u8, u16, unpack_stride_both_aligned, unpack_stride_src_aligned, unpack_stride_dst_aligned, unpack_stride_neither_aligned); - latin1_simd_check_align!(pack_latin1, u16, u8, pack_stride_both_aligned, pack_stride_src_aligned, pack_stride_dst_aligned, pack_stride_neither_aligned); - } else if #[cfg(all(feature = "simd-accel", target_feature = "sse2"))] { - // SIMD with different instructions for aligned and unaligned loads and stores. - // - // Newer microarchitectures are not supposed to have a performance difference between - // aligned and unaligned SSE2 loads and stores when the address is actually aligned, - // but the benchmark results I see don't agree. - - pub const SIMD_STRIDE_SIZE: usize = 16; - -+ /// Safety-usable invariant: This should be identical to SIMD_STRIDE_SIZE (used by ascii_simd_check_align_unrolled) - pub const SIMD_ALIGNMENT: usize = 16; - - pub const MAX_STRIDE_SIZE: usize = 16; - - pub const SIMD_ALIGNMENT_MASK: usize = 15; - -+ // Safety for stride macros: We stick to the load8_aligned/etc family of functions. We consistently name -+ // aligned/unaligned functions according to src/dst being aligned/unaligned -+ - ascii_to_ascii_simd_double_stride!(ascii_to_ascii_simd_double_stride_both_aligned, store16_aligned); - ascii_to_ascii_simd_double_stride!(ascii_to_ascii_simd_double_stride_src_aligned, store16_unaligned); - - ascii_to_basic_latin_simd_double_stride!(ascii_to_basic_latin_simd_double_stride_both_aligned, store8_aligned); - ascii_to_basic_latin_simd_double_stride!(ascii_to_basic_latin_simd_double_stride_src_aligned, store8_unaligned); - - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_both_aligned, load16_aligned, store16_aligned); - ascii_to_ascii_simd_stride!(ascii_to_ascii_stride_src_aligned, load16_aligned, store16_unaligned); -@@ -984,33 +1233,43 @@ cfg_if! { - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_both_aligned, load8_aligned, store16_aligned); - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_src_aligned, load8_aligned, store16_unaligned); - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_dst_aligned, load8_unaligned, store16_aligned); - basic_latin_to_ascii_simd_stride!(basic_latin_to_ascii_stride_neither_aligned, load8_unaligned, store16_unaligned); - - pack_simd_stride!(pack_stride_both_aligned, load8_aligned, store16_aligned); - pack_simd_stride!(pack_stride_src_aligned, load8_aligned, store16_unaligned); - -+ // Safety for conversion macros: We use the correct pattern of both/src/dst/neither/double_both/double_src here. All stride functions were produced -+ // by stride macros that universally munch a single SIMD_STRIDE_SIZE worth of elements. -+ - ascii_simd_check_align_unrolled!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride_both_aligned, ascii_to_ascii_stride_src_aligned, ascii_to_ascii_stride_neither_aligned, ascii_to_ascii_simd_double_stride_both_aligned, ascii_to_ascii_simd_double_stride_src_aligned); - ascii_simd_check_align_unrolled!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_both_aligned, ascii_to_basic_latin_stride_src_aligned, ascii_to_basic_latin_stride_neither_aligned, ascii_to_basic_latin_simd_double_stride_both_aligned, ascii_to_basic_latin_simd_double_stride_src_aligned); - - ascii_simd_check_align!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_both_aligned, basic_latin_to_ascii_stride_src_aligned, basic_latin_to_ascii_stride_dst_aligned, basic_latin_to_ascii_stride_neither_aligned); - latin1_simd_check_align_unrolled!(unpack_latin1, u8, u16, unpack_stride_both_aligned, unpack_stride_src_aligned, unpack_stride_dst_aligned, unpack_stride_neither_aligned); - latin1_simd_check_align_unrolled!(pack_latin1, u16, u8, pack_stride_both_aligned, pack_stride_src_aligned, pack_stride_dst_aligned, pack_stride_neither_aligned); - } else if #[cfg(all(target_endian = "little", target_pointer_width = "64"))] { - // Aligned ALU word, little-endian, 64-bit - -+ /// Safety invariant: this is the amount of bytes consumed by -+ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. -+ /// This is also the number of bytes produced by pack_alu. -+ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. - pub const ALU_STRIDE_SIZE: usize = 16; - - pub const MAX_STRIDE_SIZE: usize = 16; - -+ // Safety invariant: this is the pointer width in bytes - pub const ALU_ALIGNMENT: usize = 8; - -+ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT - pub const ALU_ALIGNMENT_MASK: usize = 7; - -+ /// Safety: dst must point to valid space for writing four `usize`s - #[inline(always)] - unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { - let first = ((0x0000_0000_FF00_0000usize & word) << 24) | - ((0x0000_0000_00FF_0000usize & word) << 16) | - ((0x0000_0000_0000_FF00usize & word) << 8) | - (0x0000_0000_0000_00FFusize & word); - let second = ((0xFF00_0000_0000_0000usize & word) >> 8) | - ((0x00FF_0000_0000_0000usize & word) >> 16) | -@@ -1019,22 +1278,24 @@ cfg_if! { - let third = ((0x0000_0000_FF00_0000usize & second_word) << 24) | - ((0x0000_0000_00FF_0000usize & second_word) << 16) | - ((0x0000_0000_0000_FF00usize & second_word) << 8) | - (0x0000_0000_0000_00FFusize & second_word); - let fourth = ((0xFF00_0000_0000_0000usize & second_word) >> 8) | - ((0x00FF_0000_0000_0000usize & second_word) >> 16) | - ((0x0000_FF00_0000_0000usize & second_word) >> 24) | - ((0x0000_00FF_0000_0000usize & second_word) >> 32); -+ // Safety: fn invariant used here - *dst = first; - *(dst.add(1)) = second; - *(dst.add(2)) = third; - *(dst.add(3)) = fourth; - } - -+ /// Safety: dst must point to valid space for writing two `usize`s - #[inline(always)] - unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { - let word = ((0x00FF_0000_0000_0000usize & second) << 8) | - ((0x0000_00FF_0000_0000usize & second) << 16) | - ((0x0000_0000_00FF_0000usize & second) << 24) | - ((0x0000_0000_0000_00FFusize & second) << 32) | - ((0x00FF_0000_0000_0000usize & first) >> 24) | - ((0x0000_00FF_0000_0000usize & first) >> 16) | -@@ -1043,70 +1304,88 @@ cfg_if! { - let second_word = ((0x00FF_0000_0000_0000usize & fourth) << 8) | - ((0x0000_00FF_0000_0000usize & fourth) << 16) | - ((0x0000_0000_00FF_0000usize & fourth) << 24) | - ((0x0000_0000_0000_00FFusize & fourth) << 32) | - ((0x00FF_0000_0000_0000usize & third) >> 24) | - ((0x0000_00FF_0000_0000usize & third) >> 16) | - ((0x0000_0000_00FF_0000usize & third) >> 8) | - (0x0000_0000_0000_00FFusize & third); -+ // Safety: fn invariant used here - *dst = word; - *(dst.add(1)) = second_word; - } - } else if #[cfg(all(target_endian = "little", target_pointer_width = "32"))] { - // Aligned ALU word, little-endian, 32-bit - -+ /// Safety invariant: this is the amount of bytes consumed by -+ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. -+ /// This is also the number of bytes produced by pack_alu. -+ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. - pub const ALU_STRIDE_SIZE: usize = 8; - - pub const MAX_STRIDE_SIZE: usize = 8; - -+ // Safety invariant: this is the pointer width in bytes - pub const ALU_ALIGNMENT: usize = 4; - -+ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT - pub const ALU_ALIGNMENT_MASK: usize = 3; - -+ /// Safety: dst must point to valid space for writing four `usize`s - #[inline(always)] - unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { - let first = ((0x0000_FF00usize & word) << 8) | - (0x0000_00FFusize & word); - let second = ((0xFF00_0000usize & word) >> 8) | - ((0x00FF_0000usize & word) >> 16); - let third = ((0x0000_FF00usize & second_word) << 8) | - (0x0000_00FFusize & second_word); - let fourth = ((0xFF00_0000usize & second_word) >> 8) | - ((0x00FF_0000usize & second_word) >> 16); -+ // Safety: fn invariant used here - *dst = first; - *(dst.add(1)) = second; - *(dst.add(2)) = third; - *(dst.add(3)) = fourth; - } - -+ /// Safety: dst must point to valid space for writing two `usize`s - #[inline(always)] - unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { - let word = ((0x00FF_0000usize & second) << 8) | - ((0x0000_00FFusize & second) << 16) | - ((0x00FF_0000usize & first) >> 8) | - (0x0000_00FFusize & first); - let second_word = ((0x00FF_0000usize & fourth) << 8) | - ((0x0000_00FFusize & fourth) << 16) | - ((0x00FF_0000usize & third) >> 8) | - (0x0000_00FFusize & third); -+ // Safety: fn invariant used here - *dst = word; - *(dst.add(1)) = second_word; - } - } else if #[cfg(all(target_endian = "big", target_pointer_width = "64"))] { - // Aligned ALU word, big-endian, 64-bit - -+ /// Safety invariant: this is the amount of bytes consumed by -+ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. -+ /// This is also the number of bytes produced by pack_alu. -+ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. - pub const ALU_STRIDE_SIZE: usize = 16; - - pub const MAX_STRIDE_SIZE: usize = 16; - -+ // Safety invariant: this is the pointer width in bytes - pub const ALU_ALIGNMENT: usize = 8; - -+ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT - pub const ALU_ALIGNMENT_MASK: usize = 7; - -+ /// Safety: dst must point to valid space for writing four `usize`s - #[inline(always)] - unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { - let first = ((0xFF00_0000_0000_0000usize & word) >> 8) | - ((0x00FF_0000_0000_0000usize & word) >> 16) | - ((0x0000_FF00_0000_0000usize & word) >> 24) | - ((0x0000_00FF_0000_0000usize & word) >> 32); - let second = ((0x0000_0000_FF00_0000usize & word) << 24) | - ((0x0000_0000_00FF_0000usize & word) << 16) | -@@ -1115,22 +1394,24 @@ cfg_if! { - let third = ((0xFF00_0000_0000_0000usize & second_word) >> 8) | - ((0x00FF_0000_0000_0000usize & second_word) >> 16) | - ((0x0000_FF00_0000_0000usize & second_word) >> 24) | - ((0x0000_00FF_0000_0000usize & second_word) >> 32); - let fourth = ((0x0000_0000_FF00_0000usize & second_word) << 24) | - ((0x0000_0000_00FF_0000usize & second_word) << 16) | - ((0x0000_0000_0000_FF00usize & second_word) << 8) | - (0x0000_0000_0000_00FFusize & second_word); -+ // Safety: fn invariant used here - *dst = first; - *(dst.add(1)) = second; - *(dst.add(2)) = third; - *(dst.add(3)) = fourth; - } - -+ /// Safety: dst must point to valid space for writing two `usize`s - #[inline(always)] - unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { - let word = ((0x00FF0000_00000000usize & first) << 8) | - ((0x000000FF_00000000usize & first) << 16) | - ((0x00000000_00FF0000usize & first) << 24) | - ((0x00000000_000000FFusize & first) << 32) | - ((0x00FF0000_00000000usize & second) >> 24) | - ((0x000000FF_00000000usize & second) >> 16) | -@@ -1139,67 +1420,80 @@ cfg_if! { - let second_word = ((0x00FF0000_00000000usize & third) << 8) | - ((0x000000FF_00000000usize & third) << 16) | - ((0x00000000_00FF0000usize & third) << 24) | - ((0x00000000_000000FFusize & third) << 32) | - ((0x00FF0000_00000000usize & fourth) >> 24) | - ((0x000000FF_00000000usize & fourth) >> 16) | - ((0x00000000_00FF0000usize & fourth) >> 8) | - (0x00000000_000000FFusize & fourth); -+ // Safety: fn invariant used here - *dst = word; - *(dst.add(1)) = second_word; - } - } else if #[cfg(all(target_endian = "big", target_pointer_width = "32"))] { - // Aligned ALU word, big-endian, 32-bit - -+ /// Safety invariant: this is the amount of bytes consumed by -+ /// unpack_alu. This will be twice the pointer width, as it consumes two usizes. -+ /// This is also the number of bytes produced by pack_alu. -+ /// This is also the number of u16 code units produced/consumed by unpack_alu/pack_alu respectively. - pub const ALU_STRIDE_SIZE: usize = 8; - - pub const MAX_STRIDE_SIZE: usize = 8; - -+ // Safety invariant: this is the pointer width in bytes - pub const ALU_ALIGNMENT: usize = 4; - -+ // Safety invariant: this is a mask for getting the bits of a pointer not aligned to ALU_ALIGNMENT - pub const ALU_ALIGNMENT_MASK: usize = 3; - -+ /// Safety: dst must point to valid space for writing four `usize`s - #[inline(always)] - unsafe fn unpack_alu(word: usize, second_word: usize, dst: *mut usize) { - let first = ((0xFF00_0000usize & word) >> 8) | - ((0x00FF_0000usize & word) >> 16); - let second = ((0x0000_FF00usize & word) << 8) | - (0x0000_00FFusize & word); - let third = ((0xFF00_0000usize & second_word) >> 8) | - ((0x00FF_0000usize & second_word) >> 16); - let fourth = ((0x0000_FF00usize & second_word) << 8) | - (0x0000_00FFusize & second_word); -+ // Safety: fn invariant used here - *dst = first; - *(dst.add(1)) = second; - *(dst.add(2)) = third; - *(dst.add(3)) = fourth; - } - -+ /// Safety: dst must point to valid space for writing two `usize`s - #[inline(always)] - unsafe fn pack_alu(first: usize, second: usize, third: usize, fourth: usize, dst: *mut usize) { - let word = ((0x00FF_0000usize & first) << 8) | - ((0x0000_00FFusize & first) << 16) | - ((0x00FF_0000usize & second) >> 8) | - (0x0000_00FFusize & second); - let second_word = ((0x00FF_0000usize & third) << 8) | - ((0x0000_00FFusize & third) << 16) | - ((0x00FF_0000usize & fourth) >> 8) | - (0x0000_00FFusize & fourth); -+ // Safety: fn invariant used here - *dst = word; - *(dst.add(1)) = second_word; - } - } else { - ascii_naive!(ascii_to_ascii, u8, u8); - ascii_naive!(ascii_to_basic_latin, u8, u16); - ascii_naive!(basic_latin_to_ascii, u16, u8); - } - } - - cfg_if! { -+ // Safety-usable invariant: this counts the zeroes from the "first byte" of utf-8 data packed into a usize -+ // with the target endianness - if #[cfg(target_endian = "little")] { - #[allow(dead_code)] - #[inline(always)] - fn count_zeros(word: usize) -> u32 { - word.trailing_zeros() - } - } else { - #[allow(dead_code)] -@@ -1207,208 +1501,272 @@ cfg_if! { - fn count_zeros(word: usize) -> u32 { - word.leading_zeros() - } - } - } - - cfg_if! { - if #[cfg(all(feature = "simd-accel", target_endian = "little", target_arch = "disabled"))] { -+ /// Safety-usable invariant: Will return the value and position of the first non-ASCII byte in the slice in a Some if found. -+ /// In other words, the first element of the Some is always `> 127` - #[inline(always)] - pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { - let src = slice.as_ptr(); - let len = slice.len(); - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading/writing at least `stride` elements. - if SIMD_STRIDE_SIZE <= len { - let len_minus_stride = len - SIMD_STRIDE_SIZE; - loop { -+ // Safety: src at offset is valid for a `SIMD_STRIDE_SIZE` read - let simd = unsafe { load16_unaligned(src.add(offset)) }; - if !simd_is_ascii(simd) { - break; - } - offset += SIMD_STRIDE_SIZE; -+ // This is `offset > len - SIMD_STRIDE_SIZE` which means we always have at least `SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } - while offset < len { - let code_unit = slice[offset]; - if code_unit > 127 { -+ // Safety: Safety-usable invariant upheld here - return Some((code_unit, offset)); - } - offset += 1; - } - None - } - } else if #[cfg(all(feature = "simd-accel", target_feature = "sse2"))] { -+ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being -+ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found - #[inline(always)] - pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { - let src = slice.as_ptr(); - let len = slice.len(); - let mut offset = 0usize; -+ // Safety: if this check succeeds we're valid for reading at least `stride` elements. - if SIMD_STRIDE_SIZE <= len { - // First, process one unaligned vector -+ // Safety: src is valid for a `SIMD_STRIDE_SIZE` read - let simd = unsafe { load16_unaligned(src) }; - let mask = mask_ascii(simd); - if mask != 0 { - offset = mask.trailing_zeros() as usize; - let non_ascii = unsafe { *src.add(offset) }; - return Some((non_ascii, offset)); - } - offset = SIMD_STRIDE_SIZE; -+ // Safety: Now that offset has changed we don't yet know how much it is valid for - - // We have now seen 16 ASCII bytes. Let's guess that - // there will be enough more to justify more expense - // in the case of non-ASCII. - // Use aligned reads for the sake of old microachitectures. -+ // Safety: this correctly calculates the number of src_units that need to be read before the remaining list is aligned. -+ // This is by definition less than SIMD_ALIGNMENT, which is defined to be equal to SIMD_STRIDE_SIZE. - let until_alignment = unsafe { (SIMD_ALIGNMENT - ((src.add(offset) as usize) & SIMD_ALIGNMENT_MASK)) & SIMD_ALIGNMENT_MASK }; - // This addition won't overflow, because even in the 32-bit PAE case the - // address space holds enough code that the slice length can't be that - // close to address space size. - // offset now equals SIMD_STRIDE_SIZE, hence times 3 below. -+ // -+ // Safety: if this check succeeds we're valid for reading at least `2 * SIMD_STRIDE_SIZE` elements plus `until_alignment`. -+ // The extra SIMD_STRIDE_SIZE in the condition is because `offset` is already `SIMD_STRIDE_SIZE`. - if until_alignment + (SIMD_STRIDE_SIZE * 3) <= len { - if until_alignment != 0 { -+ // Safety: this is safe to call since we're valid for this read (and more), and don't care about alignment -+ // This will copy over bytes that get decoded twice since it's not incrementing `offset` by SIMD_STRIDE_SIZE. This is fine. - let simd = unsafe { load16_unaligned(src.add(offset)) }; - let mask = mask_ascii(simd); - if mask != 0 { - offset += mask.trailing_zeros() as usize; - let non_ascii = unsafe { *src.add(offset) }; - return Some((non_ascii, offset)); - } - offset += until_alignment; - } -+ // Safety: At this point we're valid for reading 2*SIMD_STRIDE_SIZE elements -+ // Safety: Now `offset` is aligned for `src` - let len_minus_stride_times_two = len - (SIMD_STRIDE_SIZE * 2); - loop { -+ // Safety: We were valid for this read, and were aligned. - let first = unsafe { load16_aligned(src.add(offset)) }; - let second = unsafe { load16_aligned(src.add(offset + SIMD_STRIDE_SIZE)) }; - if !simd_is_ascii(first | second) { -+ // Safety: mask_ascii produces a mask of all the high bits. - let mask_first = mask_ascii(first); - if mask_first != 0 { -+ // Safety: on little endian systems this will be the number of ascii bytes -+ // before the first non-ascii, i.e. valid for indexing src -+ // TODO SAFETY: What about big-endian systems? - offset += mask_first.trailing_zeros() as usize; - } else { - let mask_second = mask_ascii(second); -+ // Safety: on little endian systems this will be the number of ascii bytes -+ // before the first non-ascii, i.e. valid for indexing src - offset += SIMD_STRIDE_SIZE + mask_second.trailing_zeros() as usize; - } -+ // Safety: We know this is non-ASCII, and can uphold the safety-usable invariant here - let non_ascii = unsafe { *src.add(offset) }; -+ - return Some((non_ascii, offset)); - } - offset += SIMD_STRIDE_SIZE * 2; -+ // Safety: This is `offset > len - 2 * SIMD_STRIDE_SIZE` which means we always have at least `2 * SIMD_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride_times_two { - break; - } - } -+ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` - if offset + SIMD_STRIDE_SIZE <= len { -- let simd = unsafe { load16_aligned(src.add(offset)) }; -- let mask = mask_ascii(simd); -+ // Safety: We were valid for this read, and were aligned. -+ let simd = unsafe { load16_aligned(src.add(offset)) }; -+ // Safety: mask_ascii produces a mask of all the high bits. -+ let mask = mask_ascii(simd); - if mask != 0 { -+ // Safety: on little endian systems this will be the number of ascii bytes -+ // before the first non-ascii, i.e. valid for indexing src - offset += mask.trailing_zeros() as usize; - let non_ascii = unsafe { *src.add(offset) }; -+ // Safety: We know this is non-ASCII, and can uphold the safety-usable invariant here - return Some((non_ascii, offset)); - } - offset += SIMD_STRIDE_SIZE; - } - } else { -+ // Safety: this is the unaligned branch - // At most two iterations, so unroll -+ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` - if offset + SIMD_STRIDE_SIZE <= len { -+ // Safety: We're valid for this read but must use an unaligned read - let simd = unsafe { load16_unaligned(src.add(offset)) }; - let mask = mask_ascii(simd); - if mask != 0 { - offset += mask.trailing_zeros() as usize; - let non_ascii = unsafe { *src.add(offset) }; -+ // Safety-usable invariant upheld here (same as above) - return Some((non_ascii, offset)); - } - offset += SIMD_STRIDE_SIZE; -+ // Safety: if this check succeeds we're valid for reading at least `SIMD_STRIDE_SIZE` - if offset + SIMD_STRIDE_SIZE <= len { -+ // Safety: We're valid for this read but must use an unaligned read - let simd = unsafe { load16_unaligned(src.add(offset)) }; - let mask = mask_ascii(simd); - if mask != 0 { - offset += mask.trailing_zeros() as usize; - let non_ascii = unsafe { *src.add(offset) }; -+ // Safety-usable invariant upheld here (same as above) - return Some((non_ascii, offset)); - } - offset += SIMD_STRIDE_SIZE; - } - } - } - } - while offset < len { -+ // Safety: relies straightforwardly on the `len` invariant - let code_unit = unsafe { *(src.add(offset)) }; - if code_unit > 127 { -+ // Safety-usable invariant upheld here - return Some((code_unit, offset)); - } - offset += 1; - } - None - } - } else { -+ // Safety-usable invariant: returns byte index of first non-ascii byte - #[inline(always)] - fn find_non_ascii(word: usize, second_word: usize) -> Option { - let word_masked = word & ASCII_MASK; - let second_masked = second_word & ASCII_MASK; - if (word_masked | second_masked) == 0 { -+ // Both are ascii, invariant upheld - return None; - } - if word_masked != 0 { - let zeros = count_zeros(word_masked); -- // `zeros` now contains 7 (for the seven bits of non-ASCII) -+ // `zeros` now contains 0 to 7 (for the seven bits of masked ASCII in little endian, -+ // or up to 7 bits of non-ASCII in big endian if the first byte is non-ASCII) - // plus 8 times the number of ASCII in text order before the - // non-ASCII byte in the little-endian case or 8 times the number of ASCII in - // text order before the non-ASCII byte in the big-endian case. - let num_ascii = (zeros >> 3) as usize; -+ // Safety-usable invariant upheld here - return Some(num_ascii); - } - let zeros = count_zeros(second_masked); -- // `zeros` now contains 7 (for the seven bits of non-ASCII) -+ // `zeros` now contains 0 to 7 (for the seven bits of masked ASCII in little endian, -+ // or up to 7 bits of non-ASCII in big endian if the first byte is non-ASCII) - // plus 8 times the number of ASCII in text order before the - // non-ASCII byte in the little-endian case or 8 times the number of ASCII in - // text order before the non-ASCII byte in the big-endian case. - let num_ascii = (zeros >> 3) as usize; -+ // Safety-usable invariant upheld here - Some(ALU_ALIGNMENT + num_ascii) - } - -+ /// Safety: `src` must be valid for the reads of two `usize`s -+ /// -+ /// Safety-usable invariant: will return byte index of first non-ascii byte - #[inline(always)] - unsafe fn validate_ascii_stride(src: *const usize) -> Option { - let word = *src; - let second_word = *(src.add(1)); - find_non_ascii(word, second_word) - } - -+ /// Safety-usable invariant: will return Some() when it encounters non-ASCII, with the first element in the Some being -+ /// guaranteed to be non-ASCII (> 127), and the second being the offset where it is found - #[cfg_attr(feature = "cargo-clippy", allow(cast_ptr_alignment))] - #[inline(always)] - pub fn validate_ascii(slice: &[u8]) -> Option<(u8, usize)> { - let src = slice.as_ptr(); - let len = slice.len(); - let mut offset = 0usize; - let mut until_alignment = (ALU_ALIGNMENT - ((src as usize) & ALU_ALIGNMENT_MASK)) & ALU_ALIGNMENT_MASK; -+ // Safety: If this check fails we're valid to read `until_alignment + ALU_STRIDE_SIZE` elements - if until_alignment + ALU_STRIDE_SIZE <= len { - while until_alignment != 0 { - let code_unit = slice[offset]; - if code_unit > 127 { -+ // Safety-usable invairant upheld here - return Some((code_unit, offset)); - } - offset += 1; - until_alignment -= 1; - } -+ // Safety: At this point we have read until_alignment elements and -+ // are valid for `ALU_STRIDE_SIZE` more. - let len_minus_stride = len - ALU_STRIDE_SIZE; - loop { -+ // Safety: we were valid for this read - let ptr = unsafe { src.add(offset) as *const usize }; - if let Some(num_ascii) = unsafe { validate_ascii_stride(ptr) } { - offset += num_ascii; -+ // Safety-usable invairant upheld here using the invariant from validate_ascii_stride() - return Some((unsafe { *(src.add(offset)) }, offset)); - } - offset += ALU_STRIDE_SIZE; -+ // Safety: This is `offset > ALU_STRIDE_SIZE` which means we always have at least `2 * ALU_STRIDE_SIZE` elements to munch next time. - if offset > len_minus_stride { - break; - } - } - } - while offset < len { - let code_unit = slice[offset]; - if code_unit > 127 { -+ // Safety-usable invairant upheld here - return Some((code_unit, offset)); - } - offset += 1; - } - None - } - - } -@@ -1423,70 +1781,88 @@ cfg_if! { - // vector reads without vector writes. - - pub const ALU_STRIDE_SIZE: usize = 8; - - pub const ALU_ALIGNMENT: usize = 4; - - pub const ALU_ALIGNMENT_MASK: usize = 3; - } else { -+ // Safety: src points to two valid `usize`s, dst points to four valid `usize`s - #[inline(always)] - unsafe fn unpack_latin1_stride_alu(src: *const usize, dst: *mut usize) { -+ // Safety: src safety invariant used here - let word = *src; - let second_word = *(src.add(1)); -+ // Safety: dst safety invariant passed down - unpack_alu(word, second_word, dst); - } - -+ // Safety: src points to four valid `usize`s, dst points to two valid `usize`s - #[inline(always)] - unsafe fn pack_latin1_stride_alu(src: *const usize, dst: *mut usize) { -+ // Safety: src safety invariant used here - let first = *src; - let second = *(src.add(1)); - let third = *(src.add(2)); - let fourth = *(src.add(3)); -+ // Safety: dst safety invariant passed down - pack_alu(first, second, third, fourth, dst); - } - -+ // Safety: src points to two valid `usize`s, dst points to four valid `usize`s - #[inline(always)] - unsafe fn ascii_to_basic_latin_stride_alu(src: *const usize, dst: *mut usize) -> bool { -+ // Safety: src safety invariant used here - let word = *src; - let second_word = *(src.add(1)); - // Check if the words contains non-ASCII - if (word & ASCII_MASK) | (second_word & ASCII_MASK) != 0 { - return false; - } -+ // Safety: dst safety invariant passed down - unpack_alu(word, second_word, dst); - true - } - -+ // Safety: src points four valid `usize`s, dst points to two valid `usize`s - #[inline(always)] - unsafe fn basic_latin_to_ascii_stride_alu(src: *const usize, dst: *mut usize) -> bool { -+ // Safety: src safety invariant used here - let first = *src; - let second = *(src.add(1)); - let third = *(src.add(2)); - let fourth = *(src.add(3)); - if (first & BASIC_LATIN_MASK) | (second & BASIC_LATIN_MASK) | (third & BASIC_LATIN_MASK) | (fourth & BASIC_LATIN_MASK) != 0 { - return false; - } -+ // Safety: dst safety invariant passed down - pack_alu(first, second, third, fourth, dst); - true - } - -+ // Safety: src, dst both point to two valid `usize`s each -+ // Safety-usable invariant: Will return byte index of first non-ascii byte. - #[inline(always)] - unsafe fn ascii_to_ascii_stride(src: *const usize, dst: *mut usize) -> Option { -+ // Safety: src safety invariant used here - let word = *src; - let second_word = *(src.add(1)); -+ // Safety: src safety invariant used here - *dst = word; - *(dst.add(1)) = second_word; -+ // Relies on safety-usable invariant here - find_non_ascii(word, second_word) - } - - basic_latin_alu!(ascii_to_basic_latin, u8, u16, ascii_to_basic_latin_stride_alu); - basic_latin_alu!(basic_latin_to_ascii, u16, u8, basic_latin_to_ascii_stride_alu); - latin1_alu!(unpack_latin1, u8, u16, unpack_latin1_stride_alu); - latin1_alu!(pack_latin1, u16, u8, pack_latin1_stride_alu); -+ // Safety invariant upheld: ascii_to_ascii_stride will return byte index of first non-ascii if found - ascii_alu!(ascii_to_ascii, u8, u8, ascii_to_ascii_stride); - } - } - - pub fn ascii_valid_up_to(bytes: &[u8]) -> usize { - match validate_ascii(bytes) { - None => bytes.len(), - Some((_, num_valid)) => num_valid, -diff --git a/third_party/rust/encoding_rs/src/handles.rs b/third_party/rust/encoding_rs/src/handles.rs ---- a/third_party/rust/encoding_rs/src/handles.rs -+++ b/third_party/rust/encoding_rs/src/handles.rs -@@ -29,17 +29,17 @@ use crate::simd_funcs::*; - #[cfg(all( - feature = "simd-accel", - any( - target_feature = "sse2", - all(target_endian = "little", target_arch = "aarch64"), - all(target_endian = "little", target_feature = "neon") - ) - ))] --use packed_simd::u16x8; -+use core::simd::u16x8; - - use super::DecoderResult; - use super::EncoderResult; - use crate::ascii::*; - use crate::utf_8::convert_utf8_to_utf16_up_to_invalid; - use crate::utf_8::utf8_valid_up_to; - - pub enum Space { -@@ -85,84 +85,100 @@ impl Endian for LittleEndian { - const OPPOSITE_ENDIAN: bool = false; - - #[cfg(target_endian = "big")] - const OPPOSITE_ENDIAN: bool = true; - } - - #[derive(Debug, Copy, Clone)] - struct UnalignedU16Slice { -+ // Safety invariant: ptr must be valid for reading 2*len bytes - ptr: *const u8, - len: usize, - } - - impl UnalignedU16Slice { -+ /// Safety: ptr must be valid for reading 2*len bytes - #[inline(always)] - pub unsafe fn new(ptr: *const u8, len: usize) -> UnalignedU16Slice { -+ // Safety: field invariant passed up to caller here - UnalignedU16Slice { ptr, len } - } - - #[inline(always)] - pub fn trim_last(&mut self) { - assert!(self.len > 0); -+ // Safety: invariant upheld here: a slice is still valid with a shorter len - self.len -= 1; - } - - #[inline(always)] - pub fn at(&self, i: usize) -> u16 { - use core::mem::MaybeUninit; - - assert!(i < self.len); - unsafe { - let mut u: MaybeUninit = MaybeUninit::uninit(); -+ // Safety: i is at most len - 1, which works here - ::core::ptr::copy_nonoverlapping(self.ptr.add(i * 2), u.as_mut_ptr() as *mut u8, 2); -+ // Safety: valid read above lets us do this - u.assume_init() - } - } - - #[cfg(feature = "simd-accel")] - #[inline(always)] - pub fn simd_at(&self, i: usize) -> u16x8 { -+ // Safety: i/len are on the scale of u16s, each one corresponds to 2 u8s - assert!(i + SIMD_STRIDE_SIZE / 2 <= self.len); - let byte_index = i * 2; -+ // Safety: load16_unaligned needs SIMD_STRIDE_SIZE=16 u8 elements to read, -+ // or 16/2 = 8 u16 elements to read. -+ // We have checked that we have at least that many above. -+ - unsafe { to_u16_lanes(load16_unaligned(self.ptr.add(byte_index))) } - } - - #[inline(always)] - pub fn len(&self) -> usize { - self.len - } - - #[inline(always)] - pub fn tail(&self, from: usize) -> UnalignedU16Slice { - // XXX the return value should be restricted not to - // outlive self. - assert!(from <= self.len); -+ // Safety: This upholds the same invariant: `from` is in bounds and we're returning a shorter slice - unsafe { UnalignedU16Slice::new(self.ptr.add(from * 2), self.len - from) } - } - - #[cfg(feature = "simd-accel")] - #[inline(always)] - pub fn copy_bmp_to(&self, other: &mut [u16]) -> Option<(u16, usize)> { - assert!(self.len <= other.len()); - let mut offset = 0; -+ // Safety: SIMD_STRIDE_SIZE is measured in bytes, whereas len is in u16s. We check we can -+ // munch SIMD_STRIDE_SIZE / 2 u16s which means we can write SIMD_STRIDE_SIZE u8s - if SIMD_STRIDE_SIZE / 2 <= self.len { - let len_minus_stride = self.len - SIMD_STRIDE_SIZE / 2; - loop { - let mut simd = self.simd_at(offset); - if E::OPPOSITE_ENDIAN { - simd = simd_byte_swap(simd); - } -+ // Safety: we have enough space on the other side to write this - unsafe { - store8_unaligned(other.as_mut_ptr().add(offset), simd); - } - if contains_surrogates(simd) { - break; - } - offset += SIMD_STRIDE_SIZE / 2; -+ // Safety: This ensures we still have space for writing SIMD_STRIDE_SIZE u8s - if offset > len_minus_stride { - break; - } - } - } - while offset < self.len { - let unit = swap_if_opposite_endian::(self.at(offset)); - other[offset] = unit; -@@ -231,33 +247,37 @@ fn copy_unaligned_basic_latin_to_ascii( - src: UnalignedU16Slice, - dst: &mut [u8], - ) -> CopyAsciiResult { - let len = ::core::cmp::min(src.len(), dst.len()); - let mut offset = 0; -+ // Safety: This check ensures we are able to read/write at least SIMD_STRIDE_SIZE elements - if SIMD_STRIDE_SIZE <= len { - let len_minus_stride = len - SIMD_STRIDE_SIZE; - loop { - let mut first = src.simd_at(offset); - let mut second = src.simd_at(offset + (SIMD_STRIDE_SIZE / 2)); - if E::OPPOSITE_ENDIAN { - first = simd_byte_swap(first); - second = simd_byte_swap(second); - } - if !simd_is_basic_latin(first | second) { - break; - } - let packed = simd_pack(first, second); -+ // Safety: We are able to write SIMD_STRIDE_SIZE elements in this iteration - unsafe { - store16_unaligned(dst.as_mut_ptr().add(offset), packed); - } - offset += SIMD_STRIDE_SIZE; -+ // Safety: This is `offset > len - SIMD_STRIDE_SIZE`, which ensures that we can write at least SIMD_STRIDE_SIZE elements -+ // in the next iteration - if offset > len_minus_stride { - break; - } - } - } - copy_unaligned_basic_latin_to_ascii_alu::(src.tail(offset), &mut dst[offset..], offset) - } - -@@ -632,94 +652,106 @@ impl<'a> Utf16Destination<'a> { - #[inline(always)] - fn write_astral(&mut self, astral: u32) { - debug_assert!(astral > 0xFFFF); - debug_assert!(astral <= 0x10_FFFF); - self.write_code_unit((0xD7C0 + (astral >> 10)) as u16); - self.write_code_unit((0xDC00 + (astral & 0x3FF)) as u16); - } - #[inline(always)] -- pub fn write_surrogate_pair(&mut self, high: u16, low: u16) { -+ fn write_surrogate_pair(&mut self, high: u16, low: u16) { - self.write_code_unit(high); - self.write_code_unit(low); - } - #[inline(always)] - fn write_big5_combination(&mut self, combined: u16, combining: u16) { - self.write_bmp_excl_ascii(combined); - self.write_bmp_excl_ascii(combining); - } -+ // Safety-usable invariant: CopyAsciiResult::GoOn will only contain bytes >=0x80 - #[inline(always)] - pub fn copy_ascii_from_check_space_bmp<'b>( - &'b mut self, - source: &mut ByteSource, - ) -> CopyAsciiResult<(DecoderResult, usize, usize), (u8, Utf16BmpHandle<'b, 'a>)> { - let non_ascii_ret = { - let src_remaining = &source.slice[source.pos..]; - let dst_remaining = &mut self.slice[self.pos..]; - let (pending, length) = if dst_remaining.len() < src_remaining.len() { - (DecoderResult::OutputFull, dst_remaining.len()) - } else { - (DecoderResult::InputEmpty, src_remaining.len()) - }; -+ // Safety: This function is documented as needing valid pointers for src/dest and len, which -+ // is true since we've passed the minumum length of the two - match unsafe { - ascii_to_basic_latin(src_remaining.as_ptr(), dst_remaining.as_mut_ptr(), length) - } { - None => { - source.pos += length; - self.pos += length; - return CopyAsciiResult::Stop((pending, source.pos, self.pos)); - } -+ // Safety: the function is documented as returning bytes >=0x80 in the Some - Some((non_ascii, consumed)) => { - source.pos += consumed; - self.pos += consumed; - source.pos += 1; // +1 for non_ascii -+ // Safety: non-ascii bubbled out here - non_ascii - } - } - }; -+ // Safety: non-ascii returned here - CopyAsciiResult::GoOn((non_ascii_ret, Utf16BmpHandle::new(self))) - } -+ // Safety-usable invariant: CopyAsciiResult::GoOn will only contain bytes >=0x80 - #[inline(always)] - pub fn copy_ascii_from_check_space_astral<'b>( - &'b mut self, - source: &mut ByteSource, - ) -> CopyAsciiResult<(DecoderResult, usize, usize), (u8, Utf16AstralHandle<'b, 'a>)> { - let non_ascii_ret = { - let dst_len = self.slice.len(); - let src_remaining = &source.slice[source.pos..]; - let dst_remaining = &mut self.slice[self.pos..]; - let (pending, length) = if dst_remaining.len() < src_remaining.len() { - (DecoderResult::OutputFull, dst_remaining.len()) - } else { - (DecoderResult::InputEmpty, src_remaining.len()) - }; -+ // Safety: This function is documented as needing valid pointers for src/dest and len, which -+ // is true since we've passed the minumum length of the two - match unsafe { - ascii_to_basic_latin(src_remaining.as_ptr(), dst_remaining.as_mut_ptr(), length) - } { - None => { - source.pos += length; - self.pos += length; - return CopyAsciiResult::Stop((pending, source.pos, self.pos)); - } -+ // Safety: the function is documented as returning bytes >=0x80 in the Some - Some((non_ascii, consumed)) => { - source.pos += consumed; - self.pos += consumed; - if self.pos + 1 < dst_len { - source.pos += 1; // +1 for non_ascii -+ // Safety: non-ascii bubbled out here - non_ascii - } else { - return CopyAsciiResult::Stop(( - DecoderResult::OutputFull, - source.pos, - self.pos, - )); - } - } - } - }; -+ // Safety: non-ascii returned here - CopyAsciiResult::GoOn((non_ascii_ret, Utf16AstralHandle::new(self))) - } - #[inline(always)] - pub fn copy_utf8_up_to_invalid_from(&mut self, source: &mut ByteSource) { - let src_remaining = &source.slice[source.pos..]; - let dst_remaining = &mut self.slice[self.pos..]; - let (read, written) = convert_utf8_to_utf16_up_to_invalid(src_remaining, dst_remaining); - source.pos += read; -diff --git a/third_party/rust/encoding_rs/src/lib.rs b/third_party/rust/encoding_rs/src/lib.rs ---- a/third_party/rust/encoding_rs/src/lib.rs -+++ b/third_party/rust/encoding_rs/src/lib.rs -@@ -684,37 +684,26 @@ - //! TIS-620windows-874 - //! - //! - //! - //! See the section [_UTF-16LE, UTF-16BE and Unicode Encoding Schemes_](#utf-16le-utf-16be-and-unicode-encoding-schemes) - //! for discussion about the UTF-16 family. - - #![no_std] --#![cfg_attr(feature = "simd-accel", feature(core_intrinsics))] -+#![cfg_attr(feature = "simd-accel", feature(core_intrinsics, portable_simd))] - - #[cfg(feature = "alloc")] - #[cfg_attr(test, macro_use)] - extern crate alloc; - - extern crate core; - #[macro_use] - extern crate cfg_if; - --#[cfg(all( -- feature = "simd-accel", -- any( -- target_feature = "sse2", -- all(target_endian = "little", target_arch = "aarch64"), -- all(target_endian = "little", target_feature = "neon") -- ) --))] --#[macro_use(shuffle)] --extern crate packed_simd; -- - #[cfg(feature = "serde")] - extern crate serde; - - #[cfg(all(test, feature = "serde"))] - extern crate bincode; - #[cfg(all(test, feature = "serde"))] - #[macro_use] - extern crate serde_derive; -diff --git a/third_party/rust/encoding_rs/src/mem.rs b/third_party/rust/encoding_rs/src/mem.rs ---- a/third_party/rust/encoding_rs/src/mem.rs -+++ b/third_party/rust/encoding_rs/src/mem.rs -@@ -111,16 +111,21 @@ macro_rules! by_unit_check_alu { - until_alignment -= 1; - } - if accu >= $bound { - return false; - } - } - let len_minus_stride = len - ALU_ALIGNMENT / unit_size; - if offset + (4 * (ALU_ALIGNMENT / unit_size)) <= len { -+ // Safety: the above check lets us perform 4 consecutive reads of -+ // length ALU_ALIGNMENT / unit_size. ALU_ALIGNMENT is the size of usize, and unit_size -+ // is the size of the `src` pointer, so this is equal to performing four usize reads. -+ // -+ // This invariant is upheld on all loop iterations - let len_minus_unroll = len - (4 * (ALU_ALIGNMENT / unit_size)); - loop { - let unroll_accu = unsafe { *(src.add(offset) as *const usize) } - | unsafe { - *(src.add(offset + (ALU_ALIGNMENT / unit_size)) as *const usize) - } - | unsafe { - *(src.add(offset + (2 * (ALU_ALIGNMENT / unit_size))) -@@ -129,22 +134,24 @@ macro_rules! by_unit_check_alu { - | unsafe { - *(src.add(offset + (3 * (ALU_ALIGNMENT / unit_size))) - as *const usize) - }; - if unroll_accu & $mask != 0 { - return false; - } - offset += 4 * (ALU_ALIGNMENT / unit_size); -+ // Safety: this check lets us continue to perform the 4 reads earlier - if offset > len_minus_unroll { - break; - } - } - } - while offset <= len_minus_stride { -+ // Safety: the above check lets us perform one usize read. - accu |= unsafe { *(src.add(offset) as *const usize) }; - offset += ALU_ALIGNMENT / unit_size; - } - } - } - for &unit in &buffer[offset..] { - accu |= unit as usize; - } -@@ -184,16 +191,21 @@ macro_rules! by_unit_check_simd { - until_alignment -= 1; - } - if accu >= $bound { - return false; - } - } - let len_minus_stride = len - SIMD_STRIDE_SIZE / unit_size; - if offset + (4 * (SIMD_STRIDE_SIZE / unit_size)) <= len { -+ // Safety: the above check lets us perform 4 consecutive reads of -+ // length SIMD_STRIDE_SIZE / unit_size. SIMD_STRIDE_SIZE is the size of $simd_ty, and unit_size -+ // is the size of the `src` pointer, so this is equal to performing four $simd_ty reads. -+ // -+ // This invariant is upheld on all loop iterations - let len_minus_unroll = len - (4 * (SIMD_STRIDE_SIZE / unit_size)); - loop { - let unroll_accu = unsafe { *(src.add(offset) as *const $simd_ty) } - | unsafe { - *(src.add(offset + (SIMD_STRIDE_SIZE / unit_size)) - as *const $simd_ty) - } - | unsafe { -@@ -203,23 +215,25 @@ macro_rules! by_unit_check_simd { - | unsafe { - *(src.add(offset + (3 * (SIMD_STRIDE_SIZE / unit_size))) - as *const $simd_ty) - }; - if !$func(unroll_accu) { - return false; - } - offset += 4 * (SIMD_STRIDE_SIZE / unit_size); -+ // Safety: this check lets us continue to perform the 4 reads earlier - if offset > len_minus_unroll { - break; - } - } - } - let mut simd_accu = $splat; - while offset <= len_minus_stride { -+ // Safety: the above check lets us perform one $simd_ty read. - simd_accu = simd_accu | unsafe { *(src.add(offset) as *const $simd_ty) }; - offset += SIMD_STRIDE_SIZE / unit_size; - } - if !$func(simd_accu) { - return false; - } - } - } -@@ -229,18 +243,18 @@ macro_rules! by_unit_check_simd { - accu < $bound - } - }; - } - - cfg_if! { - if #[cfg(all(feature = "simd-accel", any(target_feature = "sse2", all(target_endian = "little", target_arch = "aarch64"), all(target_endian = "little", target_feature = "neon"))))] { - use crate::simd_funcs::*; -- use packed_simd::u8x16; -- use packed_simd::u16x8; -+ use core::simd::u8x16; -+ use core::simd::u16x8; - - const SIMD_ALIGNMENT: usize = 16; - - const SIMD_ALIGNMENT_MASK: usize = 15; - - by_unit_check_simd!(is_ascii_impl, u8, u8x16::splat(0), u8x16, 0x80, simd_is_ascii); - by_unit_check_simd!(is_basic_latin_impl, u16, u16x8::splat(0), u16x8, 0x80, simd_is_basic_latin); - by_unit_check_simd!(is_utf16_latin1_impl, u16, u16x8::splat(0), u16x8, 0x100, simd_is_latin1); -diff --git a/third_party/rust/encoding_rs/src/simd_funcs.rs b/third_party/rust/encoding_rs/src/simd_funcs.rs ---- a/third_party/rust/encoding_rs/src/simd_funcs.rs -+++ b/third_party/rust/encoding_rs/src/simd_funcs.rs -@@ -2,65 +2,84 @@ - // file at the top-level directory of this distribution. - // - // Licensed under the Apache License, Version 2.0 or the MIT license - // , at your - // option. This file may not be copied, modified, or distributed - // except according to those terms. - --use packed_simd::u16x8; --use packed_simd::u8x16; --use packed_simd::IntoBits; -+use any_all_workaround::all_mask16x8; -+use any_all_workaround::all_mask8x16; -+use any_all_workaround::any_mask16x8; -+use any_all_workaround::any_mask8x16; -+use core::simd::cmp::SimdPartialEq; -+use core::simd::cmp::SimdPartialOrd; -+use core::simd::mask16x8; -+use core::simd::mask8x16; -+use core::simd::simd_swizzle; -+use core::simd::u16x8; -+use core::simd::u8x16; -+use core::simd::ToBytes; - - // TODO: Migrate unaligned access to stdlib code if/when the RFC - // https://github.com/rust-lang/rfcs/pull/1725 is implemented. - -+/// Safety invariant: ptr must be valid for an unaligned read of 16 bytes - #[inline(always)] - pub unsafe fn load16_unaligned(ptr: *const u8) -> u8x16 { -- let mut simd = ::core::mem::uninitialized(); -- ::core::ptr::copy_nonoverlapping(ptr, &mut simd as *mut u8x16 as *mut u8, 16); -- simd -+ let mut simd = ::core::mem::MaybeUninit::::uninit(); -+ ::core::ptr::copy_nonoverlapping(ptr, simd.as_mut_ptr() as *mut u8, 16); -+ // Safety: copied 16 bytes of initialized memory into this, it is now initialized -+ simd.assume_init() - } - -+/// Safety invariant: ptr must be valid for an aligned-for-u8x16 read of 16 bytes - #[allow(dead_code)] - #[inline(always)] - pub unsafe fn load16_aligned(ptr: *const u8) -> u8x16 { - *(ptr as *const u8x16) - } - -+/// Safety invariant: ptr must be valid for an unaligned store of 16 bytes - #[inline(always)] - pub unsafe fn store16_unaligned(ptr: *mut u8, s: u8x16) { - ::core::ptr::copy_nonoverlapping(&s as *const u8x16 as *const u8, ptr, 16); - } - -+/// Safety invariant: ptr must be valid for an aligned-for-u8x16 store of 16 bytes - #[allow(dead_code)] - #[inline(always)] - pub unsafe fn store16_aligned(ptr: *mut u8, s: u8x16) { - *(ptr as *mut u8x16) = s; - } - -+/// Safety invariant: ptr must be valid for an unaligned read of 16 bytes - #[inline(always)] - pub unsafe fn load8_unaligned(ptr: *const u16) -> u16x8 { -- let mut simd = ::core::mem::uninitialized(); -- ::core::ptr::copy_nonoverlapping(ptr as *const u8, &mut simd as *mut u16x8 as *mut u8, 16); -- simd -+ let mut simd = ::core::mem::MaybeUninit::::uninit(); -+ ::core::ptr::copy_nonoverlapping(ptr as *const u8, simd.as_mut_ptr() as *mut u8, 16); -+ // Safety: copied 16 bytes of initialized memory into this, it is now initialized -+ simd.assume_init() - } - -+/// Safety invariant: ptr must be valid for an aligned-for-u16x8 read of 16 bytes - #[allow(dead_code)] - #[inline(always)] - pub unsafe fn load8_aligned(ptr: *const u16) -> u16x8 { - *(ptr as *const u16x8) - } - -+/// Safety invariant: ptr must be valid for an unaligned store of 16 bytes - #[inline(always)] - pub unsafe fn store8_unaligned(ptr: *mut u16, s: u16x8) { - ::core::ptr::copy_nonoverlapping(&s as *const u16x8 as *const u8, ptr as *mut u8, 16); - } - -+/// Safety invariant: ptr must be valid for an aligned-for-u16x8 store of 16 bytes - #[allow(dead_code)] - #[inline(always)] - pub unsafe fn store8_aligned(ptr: *mut u16, s: u16x8) { - *(ptr as *mut u16x8) = s; - } - - cfg_if! { - if #[cfg(all(target_feature = "sse2", target_arch = "x86_64"))] { -@@ -95,234 +114,241 @@ cfg_if! { - pub fn simd_byte_swap(s: u16x8) -> u16x8 { - let left = s << 8; - let right = s >> 8; - left | right - } - - #[inline(always)] - pub fn to_u16_lanes(s: u8x16) -> u16x8 { -- s.into_bits() -+ u16x8::from_ne_bytes(s) - } - - cfg_if! { - if #[cfg(target_feature = "sse2")] { - - // Expose low-level mask instead of higher-level conclusion, - // because the non-ASCII case would perform less well otherwise. -+ // Safety-usable invariant: This returned value is whether each high bit is set - #[inline(always)] - pub fn mask_ascii(s: u8x16) -> i32 { - unsafe { -- _mm_movemask_epi8(s.into_bits()) -+ _mm_movemask_epi8(s.into()) - } - } - - } else { - - } - } - - cfg_if! { - if #[cfg(target_feature = "sse2")] { - #[inline(always)] - pub fn simd_is_ascii(s: u8x16) -> bool { - unsafe { -- _mm_movemask_epi8(s.into_bits()) == 0 -+ // Safety: We have cfg()d the correct platform -+ _mm_movemask_epi8(s.into()) == 0 - } - } - } else if #[cfg(target_arch = "aarch64")]{ - #[inline(always)] - pub fn simd_is_ascii(s: u8x16) -> bool { - unsafe { -- vmaxvq_u8(s.into_bits()) < 0x80 -+ // Safety: We have cfg()d the correct platform -+ vmaxvq_u8(s.into()) < 0x80 - } - } - } else { - #[inline(always)] - pub fn simd_is_ascii(s: u8x16) -> bool { - // This optimizes better on ARM than - // the lt formulation. - let highest_ascii = u8x16::splat(0x7F); -- !s.gt(highest_ascii).any() -+ !any_mask8x16(s.simd_gt(highest_ascii)) - } - } - } - - cfg_if! { - if #[cfg(target_feature = "sse2")] { - #[inline(always)] - pub fn simd_is_str_latin1(s: u8x16) -> bool { - if simd_is_ascii(s) { - return true; - } - let above_str_latin1 = u8x16::splat(0xC4); -- s.lt(above_str_latin1).all() -+ s.simd_lt(above_str_latin1).all() - } - } else if #[cfg(target_arch = "aarch64")]{ - #[inline(always)] - pub fn simd_is_str_latin1(s: u8x16) -> bool { - unsafe { -- vmaxvq_u8(s.into_bits()) < 0xC4 -+ // Safety: We have cfg()d the correct platform -+ vmaxvq_u8(s.into()) < 0xC4 - } - } - } else { - #[inline(always)] - pub fn simd_is_str_latin1(s: u8x16) -> bool { - let above_str_latin1 = u8x16::splat(0xC4); -- s.lt(above_str_latin1).all() -+ all_mask8x16(s.simd_lt(above_str_latin1)) - } - } - } - - cfg_if! { - if #[cfg(target_arch = "aarch64")]{ - #[inline(always)] - pub fn simd_is_basic_latin(s: u16x8) -> bool { - unsafe { -- vmaxvq_u16(s.into_bits()) < 0x80 -+ // Safety: We have cfg()d the correct platform -+ vmaxvq_u16(s.into()) < 0x80 - } - } - - #[inline(always)] - pub fn simd_is_latin1(s: u16x8) -> bool { - unsafe { -- vmaxvq_u16(s.into_bits()) < 0x100 -+ // Safety: We have cfg()d the correct platform -+ vmaxvq_u16(s.into()) < 0x100 - } - } - } else { - #[inline(always)] - pub fn simd_is_basic_latin(s: u16x8) -> bool { - let above_ascii = u16x8::splat(0x80); -- s.lt(above_ascii).all() -+ all_mask16x8(s.simd_lt(above_ascii)) - } - - #[inline(always)] - pub fn simd_is_latin1(s: u16x8) -> bool { - // For some reason, on SSE2 this formulation - // seems faster in this case while the above - // function is better the other way round... - let highest_latin1 = u16x8::splat(0xFF); -- !s.gt(highest_latin1).any() -+ !any_mask16x8(s.simd_gt(highest_latin1)) - } - } - } - - #[inline(always)] - pub fn contains_surrogates(s: u16x8) -> bool { - let mask = u16x8::splat(0xF800); - let surrogate_bits = u16x8::splat(0xD800); -- (s & mask).eq(surrogate_bits).any() -+ any_mask16x8((s & mask).simd_eq(surrogate_bits)) - } - - cfg_if! { - if #[cfg(target_arch = "aarch64")]{ - macro_rules! aarch64_return_false_if_below_hebrew { - ($s:ident) => ({ - unsafe { -- if vmaxvq_u16($s.into_bits()) < 0x0590 { -+ // Safety: We have cfg()d the correct platform -+ if vmaxvq_u16($s.into()) < 0x0590 { - return false; - } - } - }) - } - - macro_rules! non_aarch64_return_false_if_all { - ($s:ident) => () - } - } else { - macro_rules! aarch64_return_false_if_below_hebrew { - ($s:ident) => () - } - - macro_rules! non_aarch64_return_false_if_all { - ($s:ident) => ({ -- if $s.all() { -+ if all_mask16x8($s) { - return false; - } - }) - } - } - } - - macro_rules! in_range16x8 { - ($s:ident, $start:expr, $end:expr) => {{ - // SIMD sub is wrapping -- ($s - u16x8::splat($start)).lt(u16x8::splat($end - $start)) -+ ($s - u16x8::splat($start)).simd_lt(u16x8::splat($end - $start)) - }}; - } - - #[inline(always)] - pub fn is_u16x8_bidi(s: u16x8) -> bool { - // We try to first quickly refute the RTLness of the vector. If that - // fails, we do the real RTL check, so in that case we end up wasting - // the work for the up-front quick checks. Even the quick-check is - // two-fold in order to return `false` ASAP if everything is below - // Hebrew. - - aarch64_return_false_if_below_hebrew!(s); - -- let below_hebrew = s.lt(u16x8::splat(0x0590)); -+ let below_hebrew = s.simd_lt(u16x8::splat(0x0590)); - - non_aarch64_return_false_if_all!(below_hebrew); - -- if (below_hebrew | in_range16x8!(s, 0x0900, 0x200F) | in_range16x8!(s, 0x2068, 0xD802)).all() { -+ if all_mask16x8( -+ below_hebrew | in_range16x8!(s, 0x0900, 0x200F) | in_range16x8!(s, 0x2068, 0xD802), -+ ) { - return false; - } - - // Quick refutation failed. Let's do the full check. - -- (in_range16x8!(s, 0x0590, 0x0900) -- | in_range16x8!(s, 0xFB1D, 0xFE00) -- | in_range16x8!(s, 0xFE70, 0xFEFF) -- | in_range16x8!(s, 0xD802, 0xD804) -- | in_range16x8!(s, 0xD83A, 0xD83C) -- | s.eq(u16x8::splat(0x200F)) -- | s.eq(u16x8::splat(0x202B)) -- | s.eq(u16x8::splat(0x202E)) -- | s.eq(u16x8::splat(0x2067))) -- .any() -+ any_mask16x8( -+ (in_range16x8!(s, 0x0590, 0x0900) -+ | in_range16x8!(s, 0xFB1D, 0xFE00) -+ | in_range16x8!(s, 0xFE70, 0xFEFF) -+ | in_range16x8!(s, 0xD802, 0xD804) -+ | in_range16x8!(s, 0xD83A, 0xD83C) -+ | s.simd_eq(u16x8::splat(0x200F)) -+ | s.simd_eq(u16x8::splat(0x202B)) -+ | s.simd_eq(u16x8::splat(0x202E)) -+ | s.simd_eq(u16x8::splat(0x2067))), -+ ) - } - - #[inline(always)] - pub fn simd_unpack(s: u8x16) -> (u16x8, u16x8) { -- unsafe { -- let first: u8x16 = shuffle!( -- s, -- u8x16::splat(0), -- [0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23] -- ); -- let second: u8x16 = shuffle!( -- s, -- u8x16::splat(0), -- [8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31] -- ); -- (first.into_bits(), second.into_bits()) -- } -+ let first: u8x16 = simd_swizzle!( -+ s, -+ u8x16::splat(0), -+ [0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23] -+ ); -+ let second: u8x16 = simd_swizzle!( -+ s, -+ u8x16::splat(0), -+ [8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31] -+ ); -+ (u16x8::from_ne_bytes(first), u16x8::from_ne_bytes(second)) - } - - cfg_if! { - if #[cfg(target_feature = "sse2")] { - #[inline(always)] - pub fn simd_pack(a: u16x8, b: u16x8) -> u8x16 { - unsafe { -- _mm_packus_epi16(a.into_bits(), b.into_bits()).into_bits() -+ // Safety: We have cfg()d the correct platform -+ _mm_packus_epi16(a.into(), b.into()).into() - } - } - } else { - #[inline(always)] - pub fn simd_pack(a: u16x8, b: u16x8) -> u8x16 { -- unsafe { -- let first: u8x16 = a.into_bits(); -- let second: u8x16 = b.into_bits(); -- shuffle!( -- first, -- second, -- [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] -- ) -- } -+ let first: u8x16 = a.to_ne_bytes(); -+ let second: u8x16 = b.to_ne_bytes(); -+ simd_swizzle!( -+ first, -+ second, -+ [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30] -+ ) - } - } - } - - #[cfg(test)] - mod tests { - use super::*; - use alloc::vec::Vec; -diff --git a/third_party/rust/encoding_rs/src/single_byte.rs b/third_party/rust/encoding_rs/src/single_byte.rs ---- a/third_party/rust/encoding_rs/src/single_byte.rs -+++ b/third_party/rust/encoding_rs/src/single_byte.rs -@@ -48,16 +48,19 @@ impl SingleByteDecoder { - CopyAsciiResult::GoOn((mut non_ascii, mut handle)) => 'middle: loop { - // Start non-boilerplate - // - // Since the non-ASCIIness of `non_ascii` is hidden from - // the optimizer, it can't figure out that it's OK to - // statically omit the bound check when accessing - // `[u16; 128]` with an index - // `non_ascii as usize - 0x80usize`. -+ // -+ // Safety: `non_ascii` is a u8 byte >=0x80, from the invariants -+ // on Utf8Destination::copy_ascii_from_check_space_bmp() - let mapped = - unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; - // let mapped = self.table[non_ascii as usize - 0x80usize]; - if mapped == 0u16 { - return ( - DecoderResult::Malformed(1, 0), - source.consumed(), - handle.written(), -@@ -146,82 +149,103 @@ impl SingleByteDecoder { - dst: &mut [u16], - _last: bool, - ) -> (DecoderResult, usize, usize) { - let (pending, length) = if dst.len() < src.len() { - (DecoderResult::OutputFull, dst.len()) - } else { - (DecoderResult::InputEmpty, src.len()) - }; -+ // Safety invariant: converted <= length. Quite often we have `converted < length` -+ // which will be separately marked. - let mut converted = 0usize; - 'outermost: loop { - match unsafe { -+ // Safety: length is the minimum length, `src/dst + x` will always be valid for reads/writes of `len - x` - ascii_to_basic_latin( - src.as_ptr().add(converted), - dst.as_mut_ptr().add(converted), - length - converted, - ) - } { - None => { - return (pending, length, length); - } - Some((mut non_ascii, consumed)) => { -+ // Safety invariant: `converted <= length` upheld, since this can only consume -+ // up to `length - converted` bytes. -+ // -+ // Furthermore, in this context, -+ // we can assume `converted < length` since this branch is only ever hit when -+ // ascii_to_basic_latin fails to consume the entire slice - converted += consumed; - 'middle: loop { - // `converted` doesn't count the reading of `non_ascii` yet. - // Since the non-ASCIIness of `non_ascii` is hidden from - // the optimizer, it can't figure out that it's OK to - // statically omit the bound check when accessing - // `[u16; 128]` with an index - // `non_ascii as usize - 0x80usize`. -+ // -+ // Safety: We can rely on `non_ascii` being between `0x80` and `0xFF` due to -+ // the invariants of `ascii_to_basic_latin()`, and our table has enough space for that. - let mapped = - unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; - // let mapped = self.table[non_ascii as usize - 0x80usize]; - if mapped == 0u16 { - return ( - DecoderResult::Malformed(1, 0), - converted + 1, // +1 `for non_ascii` - converted, - ); - } - unsafe { -- // The bound check has already been performed -+ // Safety: As mentioned above, `converted < length` - *(dst.get_unchecked_mut(converted)) = mapped; - } -+ // Safety: `converted <= length` upheld, since `converted < length` before this - converted += 1; - // Next, handle ASCII punctuation and non-ASCII without - // going back to ASCII acceleration. Non-ASCII scripts - // use ASCII punctuation, so this avoid going to - // acceleration just for punctuation/space and then - // failing. This is a significant boost to non-ASCII - // scripts. - // TODO: Split out Latin converters without this part - // this stuff makes Latin script-conversion slower. - if converted == length { - return (pending, length, length); - } -+ // Safety: We are back to `converted < length` because of the == above -+ // and can perform this check. - let mut b = unsafe { *(src.get_unchecked(converted)) }; -+ // Safety: `converted < length` is upheld for this loop - 'innermost: loop { - if b > 127 { - non_ascii = b; - continue 'middle; - } - // Testing on Haswell says that we should write the - // byte unconditionally instead of trying to unread it - // to make it part of the next SIMD stride. - unsafe { -+ // Safety: `converted < length` is true for this loop - *(dst.get_unchecked_mut(converted)) = u16::from(b); - } -+ // Safety: We are now at `converted <= length`. We should *not* `continue` -+ // the loop without reverifying - converted += 1; - if b < 60 { - // We've got punctuation - if converted == length { - return (pending, length, length); - } -+ // Safety: we're back to `converted <= length` because of the == above - b = unsafe { *(src.get_unchecked(converted)) }; -+ // Safety: The loop continues as `converted < length` - continue 'innermost; - } - // We've got markup or ASCII text - continue 'outermost; - } - } - } - } -@@ -229,16 +253,18 @@ impl SingleByteDecoder { - } - - pub fn latin1_byte_compatible_up_to(&self, buffer: &[u8]) -> usize { - let mut bytes = buffer; - let mut total = 0; - loop { - if let Some((non_ascii, offset)) = validate_ascii(bytes) { - total += offset; -+ // Safety: We can rely on `non_ascii` being between `0x80` and `0xFF` due to -+ // the invariants of `ascii_to_basic_latin()`, and our table has enough space for that. - let mapped = unsafe { *(self.table.get_unchecked(non_ascii as usize - 0x80usize)) }; - if mapped != u16::from(non_ascii) { - return total; - } - total += 1; - bytes = &bytes[offset + 1..]; - } else { - return total; -@@ -379,64 +405,89 @@ impl SingleByteEncoder { - dst: &mut [u8], - _last: bool, - ) -> (EncoderResult, usize, usize) { - let (pending, length) = if dst.len() < src.len() { - (EncoderResult::OutputFull, dst.len()) - } else { - (EncoderResult::InputEmpty, src.len()) - }; -+ // Safety invariant: converted <= length. Quite often we have `converted < length` -+ // which will be separately marked. - let mut converted = 0usize; - 'outermost: loop { - match unsafe { -+ // Safety: length is the minimum length, `src/dst + x` will always be valid for reads/writes of `len - x` - basic_latin_to_ascii( - src.as_ptr().add(converted), - dst.as_mut_ptr().add(converted), - length - converted, - ) - } { - None => { - return (pending, length, length); - } - Some((mut non_ascii, consumed)) => { -+ // Safety invariant: `converted <= length` upheld, since this can only consume -+ // up to `length - converted` bytes. -+ // -+ // Furthermore, in this context, -+ // we can assume `converted < length` since this branch is only ever hit when -+ // ascii_to_basic_latin fails to consume the entire slice - converted += consumed; - 'middle: loop { - // `converted` doesn't count the reading of `non_ascii` yet. - match self.encode_u16(non_ascii) { - Some(byte) => { - unsafe { -+ // Safety: we're allowed this access since `converted < length` - *(dst.get_unchecked_mut(converted)) = byte; - } - converted += 1; -+ // `converted <= length` now - } - None => { - // At this point, we need to know if we - // have a surrogate. - let high_bits = non_ascii & 0xFC00u16; - if high_bits == 0xD800u16 { - // high surrogate - if converted + 1 == length { - // End of buffer. This surrogate is unpaired. - return ( - EncoderResult::Unmappable('\u{FFFD}'), - converted + 1, // +1 `for non_ascii` - converted, - ); - } -+ // Safety: convered < length from outside the match, and `converted + 1 != length`, -+ // So `converted + 1 < length` as well. We're in bounds - let second = - u32::from(unsafe { *src.get_unchecked(converted + 1) }); - if second & 0xFC00u32 != 0xDC00u32 { - return ( - EncoderResult::Unmappable('\u{FFFD}'), - converted + 1, // +1 `for non_ascii` - converted, - ); - } - // The next code unit is a low surrogate. - let astral: char = unsafe { -+ // Safety: We can rely on non_ascii being 0xD800-0xDBFF since the high bits are 0xD800 -+ // Then, (non_ascii << 10 - 0xD800 << 10) becomes between (0 to 0x3FF) << 10, which is between -+ // 0x400 to 0xffc00. Adding the 0x10000 gives a range of 0x10400 to 0x10fc00. Subtracting the 0xDC00 -+ // gives 0x2800 to 0x102000 -+ // The second term is between 0xDC00 and 0xDFFF from the check above. This gives a maximum -+ // possible range of (0x10400 + 0xDC00) to (0x102000 + 0xDFFF) which is 0x1E000 to 0x10ffff. -+ // This is in range. -+ // -+ // From a Unicode principles perspective this can also be verified as we have checked that `non_ascii` is a high surrogate -+ // (0xD800..=0xDBFF), and that `second` is a low surrogate (`0xDC00..=0xDFFF`), and we are applying reverse of the UTC16 transformation -+ // algorithm , by applying the high surrogate - 0xD800 to the -+ // high ten bits, and the low surrogate - 0xDc00 to the low ten bits, and then adding 0x10000 - ::core::char::from_u32_unchecked( - (u32::from(non_ascii) << 10) + second - - (((0xD800u32 << 10) - 0x1_0000u32) + 0xDC00u32), - ) - }; - return ( - EncoderResult::Unmappable(astral), - converted + 2, // +2 `for non_ascii` and `second` -@@ -451,52 +502,63 @@ impl SingleByteEncoder { - converted, - ); - } - return ( - EncoderResult::unmappable_from_bmp(non_ascii), - converted + 1, // +1 `for non_ascii` - converted, - ); -+ // Safety: This branch diverges, so no need to uphold invariants on `converted` - } - } - // Next, handle ASCII punctuation and non-ASCII without - // going back to ASCII acceleration. Non-ASCII scripts - // use ASCII punctuation, so this avoid going to - // acceleration just for punctuation/space and then - // failing. This is a significant boost to non-ASCII - // scripts. - // TODO: Split out Latin converters without this part - // this stuff makes Latin script-conversion slower. - if converted == length { - return (pending, length, length); - } -+ // Safety: we're back to `converted < length` due to the == above and can perform -+ // the unchecked read - let mut unit = unsafe { *(src.get_unchecked(converted)) }; - 'innermost: loop { -+ // Safety: This loop always begins with `converted < length`, see -+ // the invariant outside and the comment on the continue below - if unit > 127 { - non_ascii = unit; - continue 'middle; - } - // Testing on Haswell says that we should write the - // byte unconditionally instead of trying to unread it - // to make it part of the next SIMD stride. - unsafe { -+ // Safety: Can rely on converted < length - *(dst.get_unchecked_mut(converted)) = unit as u8; - } - converted += 1; -+ // `converted <= length` here - if unit < 60 { - // We've got punctuation - if converted == length { - return (pending, length, length); - } -+ // Safety: `converted < length` due to the == above. The read is safe. - unit = unsafe { *(src.get_unchecked(converted)) }; -+ // Safety: This only happens if `converted < length`, maintaining it - continue 'innermost; - } - // We've got markup or ASCII text - continue 'outermost; -+ // Safety: All other routes to here diverge so the continue is the only -+ // way to run the innermost loop. - } - } - } - } - } - } - } - -diff --git a/third_party/rust/encoding_rs/src/x_user_defined.rs b/third_party/rust/encoding_rs/src/x_user_defined.rs ---- a/third_party/rust/encoding_rs/src/x_user_defined.rs -+++ b/third_party/rust/encoding_rs/src/x_user_defined.rs -@@ -9,22 +9,23 @@ - - use super::*; - use crate::handles::*; - use crate::variant::*; - - cfg_if! { - if #[cfg(feature = "simd-accel")] { - use simd_funcs::*; -- use packed_simd::u16x8; -+ use core::simd::u16x8; -+ use core::simd::cmp::SimdPartialOrd; - - #[inline(always)] - fn shift_upper(unpacked: u16x8) -> u16x8 { - let highest_ascii = u16x8::splat(0x7F); -- unpacked + unpacked.gt(highest_ascii).select(u16x8::splat(0xF700), u16x8::splat(0)) } -+ unpacked + unpacked.simd_gt(highest_ascii).select(u16x8::splat(0xF700), u16x8::splat(0)) } - } else { - } - } - - pub struct UserDefinedDecoder; - - impl UserDefinedDecoder { - pub fn new() -> VariantDecoder { -@@ -111,20 +112,25 @@ impl UserDefinedDecoder { - } else { - (DecoderResult::InputEmpty, src.len()) - }; - // Not bothering with alignment - let tail_start = length & !0xF; - let simd_iterations = length >> 4; - let src_ptr = src.as_ptr(); - let dst_ptr = dst.as_mut_ptr(); -+ // Safety: This is `for i in 0..length / 16` - for i in 0..simd_iterations { -+ // Safety: This is in bounds: length is the minumum valid length for both src/dst -+ // and i ranges to length/16, so multiplying by 16 will always be `< length` and can do -+ // a 16 byte read - let input = unsafe { load16_unaligned(src_ptr.add(i * 16)) }; - let (first, second) = simd_unpack(input); - unsafe { -+ // Safety: same as above, but this is two consecutive 8-byte reads - store8_unaligned(dst_ptr.add(i * 16), shift_upper(first)); - store8_unaligned(dst_ptr.add((i * 16) + 8), shift_upper(second)); - } - } - let src_tail = &src[tail_start..length]; - let dst_tail = &mut dst[tail_start..length]; - src_tail - .iter() diff --git a/user/zotero/sandbox-fork.patch b/user/zotero/sandbox-fork.patch deleted file mode 100644 index c7222ab..0000000 --- a/user/zotero/sandbox-fork.patch +++ /dev/null @@ -1,15 +0,0 @@ -make SYS_fork non-fatal, musl uses it for fork(2) - ---- a/security/sandbox/linux/SandboxFilter.cpp -+++ b/security/sandbox/linux/SandboxFilter.cpp -@@ -1253,6 +1253,10 @@ - // usually do something reasonable on error. - case __NR_clone: - return ClonePolicy(Error(EPERM)); -+#ifdef __NR_fork -+ case __NR_fork: -+ return Error(ENOSYS); -+#endif - - # ifdef __NR_fadvise64 - case __NR_fadvise64: diff --git a/user/zotero/sandbox-largefile.patch b/user/zotero/sandbox-largefile.patch deleted file mode 100644 index f1cf28b..0000000 --- a/user/zotero/sandbox-largefile.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/security/sandbox/linux/SandboxFilter.cpp 2020-11-23 22:41:14.556378950 +0100 -+++ b/security/sandbox/linux/SandboxFilter.cpp 2020-11-23 22:40:23.595806444 +0100 -@@ -68,7 +68,13 @@ - - // The headers define O_LARGEFILE as 0 on x86_64, but we need the - // actual value because it shows up in file flags. --#define O_LARGEFILE_REAL 00100000 -+#if defined(__x86_64__) || defined(__i386__) || defined(__mips__) -+#define O_LARGEFILE_REAL 0100000 -+#elif defined(__powerpc__) -+#define O_LARGEFILE_REAL 0200000 -+#else -+#define O_LARGEFILE_REAL O_LARGEFILE -+#endif - - // Not part of UAPI, but userspace sees it in F_GETFL; see bug 1650751. - #define FMODE_NONOTIFY 0x4000000 diff --git a/user/zotero/sandbox-sched_setscheduler.patch b/user/zotero/sandbox-sched_setscheduler.patch deleted file mode 100644 index ffdf126..0000000 --- a/user/zotero/sandbox-sched_setscheduler.patch +++ /dev/null @@ -1,24 +0,0 @@ -upstream bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1657849 -diff --git a/security/sandbox/linux/SandboxFilter.cpp b/security/sandbox/linux/SandboxFilter.cpp -index ed958bc..9824433 100644 ---- a/security/sandbox/linux/SandboxFilter.cpp -+++ b/security/sandbox/linux/SandboxFilter.cpp -@@ -1751,6 +1751,6 @@ class GMPSandboxPolicy : public SandboxPolicyCommon { - case __NR_sched_get_priority_max: -+ case __NR_sched_setscheduler: - return Allow(); - case __NR_sched_getparam: -- case __NR_sched_getscheduler: -- case __NR_sched_setscheduler: { -+ case __NR_sched_getscheduler: { - Arg pid(0); -@@ -1926,3 +1926,2 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { - case __NR_sched_getscheduler: -- case __NR_sched_setscheduler: - case __NR_sched_getattr: -@@ -1932,2 +1931,5 @@ class RDDSandboxPolicy final : public SandboxPolicyCommon { - } -+ // sched_setscheduler gets special treatment here (bug 1657849): -+ case __NR_sched_setscheduler: -+ return Allow(); - diff --git a/user/zotero/stab.h b/user/zotero/stab.h deleted file mode 100644 index 6f70af3..0000000 --- a/user/zotero/stab.h +++ /dev/null @@ -1,71 +0,0 @@ -/* $OpenBSD: stab.h,v 1.3 2003/06/02 19:34:12 millert Exp $ */ -/* $NetBSD: stab.h,v 1.4 1994/10/26 00:56:25 cgd Exp $ */ - -/*- - * Copyright (c) 1991 The Regents of the University of California. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)stab.h 5.2 (Berkeley) 4/4/91 - */ - -#ifndef _STAB_H_ -#define _STAB_H_ - -/* - * The following are symbols used by various debuggers and by the Pascal - * compiler. Each of them must have one (or more) of the bits defined by - * the N_STAB mask set. - */ - -#define N_GSYM 0x20 /* global symbol */ -#define N_FNAME 0x22 /* F77 function name */ -#define N_FUN 0x24 /* procedure name */ -#define N_STSYM 0x26 /* data segment variable */ -#define N_LCSYM 0x28 /* bss segment variable */ -#define N_MAIN 0x2a /* main function name */ -#define N_PC 0x30 /* global Pascal symbol */ -#define N_RSYM 0x40 /* register variable */ -#define N_SLINE 0x44 /* text segment line number */ -#define N_DSLINE 0x46 /* data segment line number */ -#define N_BSLINE 0x48 /* bss segment line number */ -#define N_SSYM 0x60 /* structure/union element */ -#define N_SO 0x64 /* main source file name */ -#define N_LSYM 0x80 /* stack variable */ -#define N_BINCL 0x82 /* include file beginning */ -#define N_SOL 0x84 /* included source file name */ -#define N_PSYM 0xa0 /* parameter variable */ -#define N_EINCL 0xa2 /* include file end */ -#define N_ENTRY 0xa4 /* alternate entry point */ -#define N_LBRAC 0xc0 /* left bracket */ -#define N_EXCL 0xc2 /* deleted include file */ -#define N_RBRAC 0xe0 /* right bracket */ -#define N_BCOMM 0xe2 /* begin common */ -#define N_ECOMM 0xe4 /* end common */ -#define N_ECOML 0xe8 /* end common (local name) */ -#define N_LENG 0xfe /* length of preceding entry */ - -#endif /* !_STAB_H_ */ diff --git a/user/zotero/vendor-prefs.js b/user/zotero/vendor-prefs.js deleted file mode 100644 index 3b75075..0000000 --- a/user/zotero/vendor-prefs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Use LANG environment variable to choose locale -pref("intl.locale.requested", ""); - -// Use system-provided dictionaries -pref("spellchecker.dictionary_path", "/usr/share/hunspell"); - -// Disable default browser checking. -pref("browser.shell.checkDefaultBrowser", false); - -// Don't disable our bundled extensions in the application directory -pref("extensions.autoDisableScopes", 11); -pref("extensions.shownSelectionUI", true); diff --git a/user/zotero/zotero.desktop b/user/zotero/zotero.desktop deleted file mode 100644 index 249ae57..0000000 --- a/user/zotero/zotero.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Zotero -GenericName=Zotero Standalone. Is a free, easy-to-use tool to help you collect, organize, cite, and share your research sources. -Icon=zotero -Exec=/usr/bin/zotero -url %U -Categories=Office -Terminal=false -MimeType=x-scheme-handler/zotero diff --git a/user/zotero/zotero_build-modifications.patch b/user/zotero/zotero_build-modifications.patch deleted file mode 100644 index 22aa90e..0000000 --- a/user/zotero/zotero_build-modifications.patch +++ /dev/null @@ -1,144 +0,0 @@ -diff --git a/zotero/app/build.sh b/zotero/app/build.sh -index 649d629..7d078b8 100755 ---- a/zotero/app/build.sh -+++ b/zotero/app/build.sh -@@ -59,10 +59,7 @@ function abspath { - } - - function check_lfs_file { -- if [ "$(head --bytes 5 "$1")" = "versi" ]; then -- echo "$1 not checked out -- install Git LFS and run 'git lfs pull'" >&2 -- exit 1 -- fi -+ return 0 - } - - SOURCE_DIR="" -@@ -840,18 +837,13 @@ if [ $BUILD_LINUX == 1 ]; then - cp -r "$runtime_path/"!(application.ini|browser|defaults|devtools-files|crashreporter|crashreporter.ini|firefox|pingsender|precomplete|removed-files|run-mozilla.sh|update-settings.ini|updater|updater.ini) "$APPDIR" - - # Use our own launcher that calls the original Firefox executable with -app -- mv "$APPDIR"/firefox-bin "$APPDIR"/zotero-bin -+ mv "$APPDIR"/firefox-esr "$APPDIR"/zotero-bin - cp "$CALLDIR/linux/zotero" "$APPDIR"/zotero - - # Copy Ubuntu launcher files - cp "$CALLDIR/linux/zotero.desktop" "$APPDIR" - cp "$CALLDIR/linux/set_launcher_icon" "$APPDIR" - -- # Use our own updater, because Mozilla's requires updates signed by Mozilla -- check_lfs_file "$CALLDIR/linux/updater.tar.xz" -- tar xf "$CALLDIR/linux/updater.tar.xz" --to-stdout updater-$arch > "$APPDIR/updater" -- chmod 755 "$APPDIR/updater" -- - # Copy app files - rsync -a "$base_dir/" "$APPDIR/" - -@@ -860,6 +852,7 @@ if [ $BUILD_LINUX == 1 ]; then - cp -RH "$CALLDIR/modules/zotero-libreoffice-integration/install" "$APPDIR/integration/libreoffice" - - # Copy icons -+ mkdir -p "$APPDIR"/icons - cp "$CALLDIR/linux/icons/icon32.png" "$APPDIR/icons/" - cp "$CALLDIR/linux/icons/icon64.png" "$APPDIR/icons/" - cp "$CALLDIR/linux/icons/icon128.png" "$APPDIR/icons/" - -diff --git a/zotero/app/build.sh.orig b/zotero/app/build.sh -index 702f499..3ee7e34 100755 ---- a/zotero/app/build.sh.orig -+++ b/zotero/app/build.sh -@@ -189,7 +189,7 @@ BUILD_ID=`date +%Y%m%d%H%M%S` - # Paths to Gecko runtimes - MAC_RUNTIME_PATH="$CALLDIR/xulrunner/Firefox.app" - WIN_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" --LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox-" -+LINUX_RUNTIME_PATH_PREFIX="$CALLDIR/xulrunner/firefox" - - base_dir="$BUILD_DIR/base" - app_dir="$BUILD_DIR/base/app" -@@ -223,8 +223,8 @@ elif [ $BUILD_WIN == 1 ]; then - unzip -qj "${WIN_RUNTIME_PATH_PREFIX}win-x64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ - elif [ $BUILD_LINUX == 1 ]; then - # Non-arch-specific files, so just use 64-bit version -- cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/browser/omni "$app_dir" -- unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}x86_64"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ -+ cp -Rp "${LINUX_RUNTIME_PATH_PREFIX}"/browser/omni "$app_dir" -+ unzip -qj "${LINUX_RUNTIME_PATH_PREFIX}"/omni.ja "hyphenation/*" -d "$app_dir"/hyphenation/ - fi - set -e - cd $omni_dir -@@ -825,11 +825,11 @@ if [ $BUILD_LINUX == 1 ]; then - fi - - for arch in $archs; do -- runtime_path="${LINUX_RUNTIME_PATH_PREFIX}${arch}" -+ runtime_path="${LINUX_RUNTIME_PATH_PREFIX}" - - # Set up directory -- echo 'Building Zotero_linux-'$arch -- APPDIR="$STAGE_DIR/Zotero_linux-$arch" -+ echo 'Building Zotero_linux' -+ APPDIR="$STAGE_DIR/Zotero_linux" - rm -rf "$APPDIR" - mkdir "$APPDIR" - -diff --git a/zotero/app/scripts/fetch_xulrunner.orig b/zotero/app/scripts/fetch_xulrunner -index 2b57bfb..2bbc110 100755 ---- a/zotero/app/scripts/fetch_xulrunner.orig -+++ b/zotero/app/scripts/fetch_xulrunner -@@ -134,15 +134,6 @@ function modify_omni { - # Continue using app.update.auto in prefs.js on Windows - replace_line 'PER_INSTALLATION_PREFS_PLATFORMS = \["win"\]' 'PER_INSTALLATION_PREFS_PLATFORMS = []' modules/UpdateUtils.sys.mjs - -- # Prompt if major update is available instead of installing automatically on restart -- replace_line 'if \(!updateAuto\) \{' 'if (update.type == "major") { -- LOG("UpdateService:_selectAndInstallUpdate - prompting because it is a major update"); -- AUSTLMY.pingCheckCode(this._pingSuffix, AUSTLMY.CHK_SHOWPROMPT_PREF); -- Services.obs.notifyObservers(update, "update-available", "show-prompt"); -- return; -- } -- if (!updateAuto) {' modules/UpdateService.sys.mjs -- - # Avoid console warning about resource://gre/modules/FxAccountsCommon.js - replace_line 'const logins = this._data.logins;' 'const logins = this._data.logins; if (this._data.logins.length != -1) return;' modules/LoginStore.sys.mjs - -@@ -516,36 +507,10 @@ fi - - if [ $BUILD_LINUX == 1 ]; then - GECKO_VERSION="$GECKO_VERSION_LINUX" -- DOWNLOAD_URL="https://ftp.mozilla.org/pub/firefox/releases/$GECKO_VERSION" - -- -- # Include 32-bit build if not in CI -- if [[ "${CI:-}" = "1" ]] || [[ "${SKIP_32:-}" = "1" ]]; then -- arches="x86_64" -- else -- arches="i686 x86_64" -- fi -- for arch in $arches; do -- xdir="firefox-$arch" -- rm -rf $xdir -- -- archived_file="firefox-$GECKO_VERSION-$arch.tar.bz2" -- if [ -e "$archived_file" ]; then -- echo "Using $archived_file" -- cp "$archived_file" "firefox-$GECKO_VERSION.tar.bz2" -- else -- curl -O "$DOWNLOAD_URL/linux-$arch/en-US/firefox-$GECKO_VERSION.tar.bz2" -- fi -- -- tar xvf firefox-$GECKO_VERSION.tar.bz2 -- mv firefox firefox-$arch -- -- pushd firefox-$arch -- modify_omni $arch -- popd -- echo $($SCRIPT_DIR/xulrunner_hash -p l) > hash-linux -- rm "firefox-$GECKO_VERSION.tar.bz2" -- done -+ pushd firefox -+ modify_omni linux64 -+ popd - fi - - echo Done diff --git a/user/zotero/zotero_drop-jazzer.patch b/user/zotero/zotero_drop-jazzer.patch deleted file mode 100644 index 4644e66..0000000 --- a/user/zotero/zotero_drop-jazzer.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/zotero/pdf-worker/pdf.js/package.json.orig b/zotero/pdf-worker/pdf.js/package.json -index 3025926..13f8b7a 100644 ---- a/zotero/pdf-worker/pdf.js/package.json.orig -+++ b/zotero/pdf-worker/pdf.js/package.json -@@ -7,7 +7,6 @@ - "@babel/runtime": "^7.24.8", - "@fluent/bundle": "^0.18.0", - "@fluent/dom": "^0.10.0", -- "@jazzer.js/core": "^2.1.0", - "@metalsmith/layouts": "^2.7.0", - "@metalsmith/markdown": "^1.10.0", - "autoprefixer": "^10.4.19", diff --git a/user/zotero/zotero_test-drop-build.patch b/user/zotero/zotero_test-drop-build.patch deleted file mode 100644 index a318f84..0000000 --- a/user/zotero/zotero_test-drop-build.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/zotero/test/runtests.sh.orig b/zotero/test/runtests.sh -index d83914a..ec91848 100755 ---- a/zotero/test/runtests.sh.orig -+++ b/zotero/test/runtests.sh -@@ -154,18 +154,6 @@ fi - # Clean up on exit - trap "{ rm -rf \"$TEMPDIR\"; }" EXIT - --# Check if build watch process is running --# If not, run now --if [[ -z "$CI" ]] && ! ps | grep js-build/build.js | grep -v grep > /dev/null; then -- echo -- echo "Running JS build process" -- cd "$ROOT_DIR" -- NODE_OPTIONS=--openssl-legacy-provider npm run build || exit $? -- echo --fi -- --ZOTERO_TEST=1 "$ROOT_DIR/app/scripts/dir_build" -q -- - makePath FX_PROFILE "$PROFILE" - MOZ_NO_REMOTE=1 NO_EM_RESTART=1 "$Z_EXECUTABLE" -profile "$FX_PROFILE" \ - -test "$TESTS" -grep "$GREP" -ZoteroTest $Z_ARGS diff --git a/user/zotero/zotero_test-fix-chars.patch b/user/zotero/zotero_test-fix-chars.patch deleted file mode 100644 index de0daa0..0000000 --- a/user/zotero/zotero_test-fix-chars.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/zotero/node_modules/mocha/mocha.js.orig b/zotero/node_modules/mocha/mocha.js -index c3e0c12..95fff4d 100644 ---- a/zotero/node_modules/mocha/mocha.js.orig -+++ b/zotero/node_modules/mocha/mocha.js -@@ -11473,9 +11473,9 @@ - - var browser$1 = { - info: 'ℹ️', -- success: '✅', -+ success: '✔', - warning: '⚠️', -- error: '❌️' -+ error: 'x' - }; - - var require$$0 = /*@__PURE__*/getAugmentedNamespace(_polyfillNode_events) diff --git a/user/zotero/zotero_test-push-timeout-to-30sec.patch b/user/zotero/zotero_test-push-timeout-to-30sec.patch deleted file mode 100644 index e3c5a10..0000000 --- a/user/zotero/zotero_test-push-timeout-to-30sec.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/zotero/test/runtests.sh.orig b/zotero/test/runtests.sh -index d83914a3baa..e00efdb6506 100755 ---- a/zotero/test/runtests.sh.orig -+++ b/zotero/test/runtests.sh -@@ -146,7 +146,7 @@ user_pref("extensions.zoteroOpenOfficeIntegration.skipInstallation", true); - EOF - - if [ -n "$CI" ]; then -- Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 15000" -+ Z_ARGS="$Z_ARGS -ZoteroAutomatedTest -ZoteroTestTimeout 30000" - else - Z_ARGS="$Z_ARGS -jsconsole" - fi From 3ffe64d0d49e01172f3e377e3e080a75f8f3bc39 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:07:07 -0400 Subject: [PATCH 447/738] user/forgejo-aneksajo: drop due to move to iports --- user/forgejo-aneksajo/APKBUILD | 112 ------------------ user/forgejo-aneksajo/forgejo-aneksajo.ini | 26 ---- user/forgejo-aneksajo/forgejo-aneksajo.initd | 15 --- .../forgejo-aneksajo.pre-install | 7 -- 4 files changed, 160 deletions(-) delete mode 100644 user/forgejo-aneksajo/APKBUILD delete mode 100644 user/forgejo-aneksajo/forgejo-aneksajo.ini delete mode 100644 user/forgejo-aneksajo/forgejo-aneksajo.initd delete mode 100644 user/forgejo-aneksajo/forgejo-aneksajo.pre-install diff --git a/user/forgejo-aneksajo/APKBUILD b/user/forgejo-aneksajo/APKBUILD deleted file mode 100644 index ca50a59..0000000 --- a/user/forgejo-aneksajo/APKBUILD +++ /dev/null @@ -1,112 +0,0 @@ -# Contributor: Carlo Landmeter -# Contributor: 6543 <6543@obermui.de> -# Contributor: techknowlogick -# Contributor: Patrycja Rosa -# Maintainer: Antoine Martin (ayakael) -pkgname=forgejo-aneksajo -pkgver=8.0.1 -_gittag=v$pkgver-git-annex0 -pkgrel=0 -pkgdesc="Self-hosted Git service written in Go with git-annex support" -url="https://forgejo.org" -# riscv64: builds fail https://codeberg.org/forgejo/forgejo/issues/3025 -arch="all !riscv64" -license="MIT" -depends="git git-lfs gnupg" -makedepends="go nodejs npm" -checkdepends="bash openssh openssh-keygen sqlite tzdata" -install="$pkgname.pre-install" -pkgusers="forgejo" -pkggroups="www-data" -subpackages="$pkgname-openrc" -source="$pkgname-$_gittag.tar.gz::https://codeberg.org/matrss/forgejo-aneksajo/archive/$_gittag.tar.gz - $pkgname.initd - $pkgname.ini - " -builddir="$srcdir/forgejo-aneksajo" -options="!check net chmod-clean" # broken with GIT_CEILING - -# secfixes: -# 7.0.4-r0: -# - CVE-2024-24789 -# 7.0.3-r0: -# - CVE-2024-24788 -# 1.21.10.0-r0: -# - CVE-2023-45288 -# 1.21.3.0-r0: -# - CVE-2023-48795 - -export GOCACHE="${GOCACHE:-"$srcdir/go-cache"}" -export GOTMPDIR="${GOTMPDIR:-"$srcdir"}" -export GOMODCACHE="${GOMODCACHE:-"$srcdir/go"}" - -# Skip tests for archs that fail unrelated in CI -case "$CARCH" in -s390x|x86|armhf|armv7) options="$options !check" ;; -esac - -prepare() { - default_prepare - - npm ci -} - -build() { - # XXX: LARGEFILE64 - export CGO_CFLAGS="$CFLAGS -O2 -D_LARGEFILE64_SOURCE" - export TAGS="bindata sqlite sqlite_unlock_notify" - export GITEA_VERSION="$pkgver" - export EXTRA_GOFLAGS="$GOFLAGS" - export CGO_LDFLAGS="$LDFLAGS" - unset LDFLAGS - ## make FHS compliant - local setting="code.gitea.io/gitea/modules/setting" - export LDFLAGS="$LDFLAGS -X $setting.CustomConf=/etc/forgejo/app.ini" - export LDFLAGS="$LDFLAGS -X $setting.AppWorkPath=/var/lib/forgejo/" - - make -j1 build -} - -check() { - local home="$srcdir"/home - mkdir -p "$home" - install -d -m700 "$home"/.ssh - touch "$home"/.gitconfig - - env GITEA_ROOT="$home" HOME="$home" GITEA_WORK_DIR="$(pwd)" timeout -s ABRT 20m make -j1 test-sqlite - ## "make test" - modified (exclude broken tests) - ## 'code.gitea.io/gitea/modules/migrations': github hase rate limits! 403 API - local tests=$(go list ./... | grep -v /vendor/ | - grep -v 'code.gitea.io/gitea/modules/migrations' | - grep -v 'code.gitea.io/gitea/modules/charset' | - grep -v 'code.gitea.io/gitea/models/migrations' | - grep -v 'code.gitea.io/gitea/services/migrations' | - grep -v 'code.gitea.io/gitea/integrations') - env GITEA_CONF="$PWD/tests/sqlite.ini" GITEA_ROOT="$home" HOME="$home" GO111MODULE=on go test -mod=vendor -tags='sqlite sqlite_unlock_notify' $tests - -} - -package() { - for dir in $pkgname $pkgname/git $pkgname/data $pkgname/db $pkgname/custom; do - install -dm750 -o forgejo -g www-data \ - "$pkgdir"/var/lib/$dir - done - - install -dm755 -o forgejo -g www-data "$pkgdir"/var/log/forgejo - - # TODO: rename when upstream does - install -Dm755 -g www-data gitea "$pkgdir"/usr/bin/forgejo - - install -Dm644 -o forgejo -g www-data "$srcdir"/forgejo-aneksajo.ini \ - "$pkgdir"/etc/forgejo/app.ini - chown forgejo:www-data "$pkgdir"/etc/forgejo - - install -Dm755 "$srcdir"/forgejo-aneksajo.initd \ - "$pkgdir"/etc/init.d/forgejo -} - -sha512sums=" -d8e273d369c934eec7ff84795cd0d896cda53bc1a2d17f610dd8476ff92dc50c4a24c4598366ef8aac3be52ddef6630489043183085334376c30bc5d4d5f15c2 forgejo-aneksajo-v8.0.1-git-annex0.tar.gz -eb93a9f6c8f204de5c813f58727015f53f9feaab546589e016c60743131559f04fc1518f487b6d2a0e7fa8fab6d4a67cd0cd9713a7ccd9dec767a8c1ddebe129 forgejo-aneksajo.initd -b537b41b6b3a945274a6028800f39787b48c318425a37cf5d40ace0d1b305444fd07f17b4acafcd31a629bedd7d008b0bb3e30f82ffeb3d7e7e947bdbe0ff4f3 forgejo-aneksajo.ini -" diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.ini b/user/forgejo-aneksajo/forgejo-aneksajo.ini deleted file mode 100644 index 3b46259..0000000 --- a/user/forgejo-aneksajo/forgejo-aneksajo.ini +++ /dev/null @@ -1,26 +0,0 @@ -# Configuration cheat sheet: https://forgejo.org/docs/latest/admin/config-cheat-sheet/ - -RUN_USER = forgejo -RUN_MODE = prod - -[repository] -ROOT = /var/lib/forgejo/git -SCRIPT_TYPE = sh - -[server] -STATIC_ROOT_PATH = /usr/share/webapps/forgejo -APP_DATA_PATH = /var/lib/forgejo/data -LFS_START_SERVER = true - -[database] -DB_TYPE = sqlite3 -PATH = /var/lib/forgejo/db/forgejo.db -SSL_MODE = disable - -[session] -PROVIDER = file - -[log] -ROOT_PATH = /var/log/forgejo -MODE = file -LEVEL = Info diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.initd b/user/forgejo-aneksajo/forgejo-aneksajo.initd deleted file mode 100644 index 24dd085..0000000 --- a/user/forgejo-aneksajo/forgejo-aneksajo.initd +++ /dev/null @@ -1,15 +0,0 @@ -#!/sbin/openrc-run - -supervisor=supervise-daemon -name=forgejo -command="/usr/bin/forgejo" -command_user="${FORGEJO_USER:-forgejo}:www-data" -command_args="web --config '${FORGEJO_CONF:-/etc/forgejo/app.ini}'" -supervise_daemon_args="--env FORGEJO_WORK_DIR='${FORGEJO_WORK_DIR:-/var/lib/forgejo}' --chdir '${FORGEJO_WORK_DIR:-/var/lib/forgejo}' --stdout '${FORGEJO_LOG_FILE:-/var/log/forgejo/http.log}' --stderr '${FORGEJO_LOG_FILE:-/var/log/forgejo/http.log}'" -pidfile="/run/forgejo.pid" - -depend() { - use logger dns - need net - after firewall mysql postgresql -} diff --git a/user/forgejo-aneksajo/forgejo-aneksajo.pre-install b/user/forgejo-aneksajo/forgejo-aneksajo.pre-install deleted file mode 100644 index c7e8b7b..0000000 --- a/user/forgejo-aneksajo/forgejo-aneksajo.pre-install +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -addgroup -S -g 82 www-data 2>/dev/null -adduser -S -D -h /var/lib/forgejo -s /bin/sh -G www-data -g forgejo forgejo 2>/dev/null \ - && passwd -u forgejo 2>/dev/null - -exit 0 From fb7a3fe81bde6dadda0ae865905be17d9d9e1d0b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:07:46 -0400 Subject: [PATCH 448/738] user/caprine: drop due to move to aports --- user/caprine/APKBUILD | 66 ------------------------------------ user/caprine/caprine.desktop | 9 ----- user/caprine/caprine.js | 29 ---------------- 3 files changed, 104 deletions(-) delete mode 100644 user/caprine/APKBUILD delete mode 100644 user/caprine/caprine.desktop delete mode 100644 user/caprine/caprine.js diff --git a/user/caprine/APKBUILD b/user/caprine/APKBUILD deleted file mode 100644 index 73c3e02..0000000 --- a/user/caprine/APKBUILD +++ /dev/null @@ -1,66 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=caprine -pkgver=2.59.1 -pkgrel=0 -pkgdesc="Elegant Facebook Messenger desktop app" -arch="x86_64 aarch64" # bloced by electron -url="https://github.com/sindresorhus/caprine" -license="MIT" -depends="electron" -makedepends="npm findutils coreutils" -options="!check" -source=" - $pkgname-$pkgver.tar.gz::https://github.com/sindresorhus/caprine/archive/refs/tags/v$pkgver.tar.gz - caprine.desktop - caprine.js - " - -build() { - npm install --ignore-scripts - npx --yes patch-package - npx tsc - rm -r node_modules - npm install --ignore-scripts --production - npx --yes patch-package -} - -package() { - local appdir=/usr/lib/$pkgname - - install -d "$pkgdir"$appdir - cp -r ./* "$pkgdir"$appdir - - install -dm755 "$pkgdir/usr/share/pixmaps" - install -m644 build/icon.png "$pkgdir/usr/share/pixmaps/$pkgname.png" - - install -Dm755 "$srcdir"/$pkgname.js "$pkgdir"/usr/bin/$pkgname - install -Dm644 "$srcdir"/$pkgname.desktop \ - "$pkgdir"/usr/share/applications/$pkgname.desktop - - install -dm755 "$pkgdir"/usr/share/licenses/$pkgname - ln -s "$(realpath -m --relative-to=/usr/share/licenses/$pkgname $appdir/license)" \ - "$pkgdir"/usr/share/licenses/$pkgname - - # Clean up - rm -r "$pkgdir"$appdir/build - rm -r "$pkgdir"$appdir/source - rm -r "$pkgdir"$appdir/tsconfig.json - find "$pkgdir"$appdir \ - -name "package.json" \ - -exec sed -e "s|$srcdir/$pkgname|$appdir|" \ - -i {} \; \ - -or -name ".*" -prune -exec rm -r '{}' \; \ - -or -name "bin" -prune -exec rm -r '{}' \; \ - -or -name "example" -prune -exec rm -r '{}' \; \ - -or -name "examples" -prune -exec rm -r '{}' \; \ - -or -name "man" -prune -exec rm -r '{}' \; \ - -or -name "scripts" -prune -exec rm -r '{}' \; \ - -or -name "test" -prune -exec rm -r '{}' \; -} -sha512sums=" -a525bafb6a53dd2dbdfc4b9b3e96d3939d93be950a3287f2a5ef6465d5a6b64ecda79b6d393023d067f939e1a6e85debc35f83bbb1f758011db9d94dd9ff8a72 caprine-2.59.1.tar.gz -a469e3bea24926119e51642b777ef794c5fa65421107903f967c36d81bbb1adb3d52469ce3a3301b2c890f1aa53ab989ded22a7c6e811fb8cf0a582dbd835e19 caprine.desktop -44280c62ce43bdafa8528729371fccb16b8a0e3db7aca28d5c157ae0144dca5fbb023b8883b561955aa28ab62e967f2674d8c6bcaff186e2cdd0e7ba8beab9ac caprine.js -" diff --git a/user/caprine/caprine.desktop b/user/caprine/caprine.desktop deleted file mode 100644 index b17bbd5..0000000 --- a/user/caprine/caprine.desktop +++ /dev/null @@ -1,9 +0,0 @@ -[Desktop Entry] -Type=Application -Name=Caprine -GenericName=IM Client -Comment=Unofficial Facebook Messenger app -Icon=caprine -Exec=caprine -Categories=GTK;InstantMessaging;Network; -StartupNotify=true diff --git a/user/caprine/caprine.js b/user/caprine/caprine.js deleted file mode 100644 index a963ee6..0000000 --- a/user/caprine/caprine.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/electron - -const name = 'caprine'; - -const {app} = require('electron'); -const fs = require('fs'); -const path = require('path'); - -// Change command name. -const fd = fs.openSync('/proc/self/comm', fs.constants.O_WRONLY); -fs.writeSync(fd, name); -fs.closeSync(fd); - -// Remove first command line argument (/usr/bin/electron). -process.argv.splice(0, 1); - -// Set application paths. -const appPath = path.join(path.dirname(__dirname), 'lib', name); -const packageJson = require(path.join(appPath, 'package.json')); -const productName = packageJson.productName; -app.setAppPath(appPath); -app.setDesktopName(name + '.desktop'); -app.setName(productName); -app.setPath('userCache', path.join(app.getPath('cache'), productName)); -app.setPath('userData', path.join(app.getPath('appData'), productName)); -app.setVersion(packageJson.version); - -// Run the application. -require('module')._load(appPath, module, true); From 0414f8624230c18de5937e69c072fac9ffac6eb5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:26:36 -0400 Subject: [PATCH 449/738] backports/py3-django-debug-toolbar: drop due to in community --- backports/py3-django-debug-toolbar/APKBUILD | 38 --------------------- 1 file changed, 38 deletions(-) delete mode 100644 backports/py3-django-debug-toolbar/APKBUILD diff --git a/backports/py3-django-debug-toolbar/APKBUILD b/backports/py3-django-debug-toolbar/APKBUILD deleted file mode 100644 index b0974d3..0000000 --- a/backports/py3-django-debug-toolbar/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Contributor: Leonardo Arena -# Maintainer: Will Sinatra -pkgname=py3-django-debug-toolbar -_pkgname=django-debug-toolbar -pkgver=4.3 -pkgrel=1 -pkgdesc="Configurable set of panels that display various debug information about the current request/response" -options="!check" # Requires unpackaged Selenium python3 module -url="https://github.com/jazzband/django-debug-toolbar" -arch="noarch" -license="BSD-3-Clause" -depends="py3-django py3-sqlparse" -makedepends=" - py3-gpep517 - py3-hatchling - " -# options="!check" #no testsuite -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/jazzband/$_pkgname/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver - -replaces="py-django-debug-toolbar" # Backwards compatibility -provides="py-django-debug-toolbar=$pkgver-r$pkgrel" # Backwards compatibility - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -caa8563d38e8c96305828b7a07006ce2ee0afae099d70d75d332f2196fc3ffcf7f3848440ea22c00f2b918029477672a172e30714f6f73a630404175aef3b925 py3-django-debug-toolbar-4.3.tar.gz -" From 5771d091516aebe4d591b8daacda51c0f45f4520 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:28:02 -0400 Subject: [PATCH 450/738] backports/py3-pyqt6-sip: drop due to in community --- backports/py3-pyqt6-sip/APKBUILD | 36 -------------------------------- 1 file changed, 36 deletions(-) delete mode 100644 backports/py3-pyqt6-sip/APKBUILD diff --git a/backports/py3-pyqt6-sip/APKBUILD b/backports/py3-pyqt6-sip/APKBUILD deleted file mode 100644 index 59f6c14..0000000 --- a/backports/py3-pyqt6-sip/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor: Rosie K Languet -# Maintainer: Rosie K Languet -pkgname=py3-pyqt6-sip -pkgver=13.8.0 -pkgrel=0 -pkgdesc="The sip module support for PyQt6" -url="https://riverbankcomputing.com/software/sip" -arch="all" -license="custom:sip" -depends="python3" -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - python3-dev - " -source="https://pypi.python.org/packages/source/P/PyQt6-sip/PyQt6_sip-$pkgver.tar.gz" -options="!check" # No tests -builddir="$srcdir/PyQt6_sip-$pkgver" - -build() { - export CFLAGS="$CFLAGS -O2 -flto=auto" - export CXXFLAGS="$CXXFLAGS -O2 -flto=auto" - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -6947690e61fe65a21f61d034ae9de7b7adb001c59a4a362933c5441648fe27140b43666efa73f981b138cfc73fac72777bb7318b98accc3c7f808687e3fc5d81 PyQt6_sip-13.8.0.tar.gz -" From 9e2e00cd44e191d5c3f68d834750ff175a6c7a87 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:28:26 -0400 Subject: [PATCH 451/738] backports/py3-qt6: drop due to in community --- backports/py3-qt6/APKBUILD | 59 -------------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 backports/py3-qt6/APKBUILD diff --git a/backports/py3-qt6/APKBUILD b/backports/py3-qt6/APKBUILD deleted file mode 100644 index fbf7cb7..0000000 --- a/backports/py3-qt6/APKBUILD +++ /dev/null @@ -1,59 +0,0 @@ -# Contributor: Rosie K Languet -# Maintainer: Rosie K Languet -pkgname=py3-qt6 -pkgver=6.7.1 -pkgrel=0 -pkgdesc="Python 3 bindings for the Qt toolkit" -url="https://www.riverbankcomputing.com/software/pyqt/" -arch="all" -license="GPL-3.0-only" -depends=" - py3-pyqt6-sip - python3 - " -makedepends=" - libx11-dev - py3-dbus-dev - py3-opengl - py3-pyqt-builder - py3-sip - python3-dev - qt6-qtbase-dev - qt6-qtconnectivity-dev - qt6-qtdeclarative-dev - qt6-qtmultimedia-dev - qt6-qtserialport-dev - qt6-qtsvg-dev - qt6-qttools-dev - qt6-qtwebchannel-dev - qt6-qtwebsockets-dev - " - -subpackages="$pkgname-pyc" -source="https://pypi.python.org/packages/source/P/PyQt6/PyQt6-$pkgver.tar.gz" -builddir="$srcdir/PyQt6-$pkgver" - -build() { - export CFLAGS="$CFLAGS -O2 -flto=auto" - export CXXFLAGS="$CXXFLAGS -O2 -flto=auto" - sip-build \ - --confirm-license \ - --qmake /usr/lib/qt6/bin/qmake \ - --api-dir /usr/share/qt6/qsci/api/python \ - --pep484-pyi \ - --no-make - make -C build -} - -check() { - make -C build check -} - -package() { - make DESTDIR="$pkgdir" INSTALL_ROOT="$pkgdir" -C build install -j1 - python3 -m compileall -j 0 "$pkgdir"/usr/lib/python3* -} - -sha512sums=" -1e0fec009e1823b06460fd96eddc00ed31388c20f6d832aa0ebaa130baf06d83514df43af7961c3cb2872570d27e539d6db7bf6143ccdfd61a19da7521be2c7e PyQt6-6.7.1.tar.gz -" From 26657f4d5792bab7105b555b2896d2b61a41b59b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:28:51 -0400 Subject: [PATCH 452/738] backports/py3-sip: drop due to in community --- backports/py3-sip/APKBUILD | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 backports/py3-sip/APKBUILD diff --git a/backports/py3-sip/APKBUILD b/backports/py3-sip/APKBUILD deleted file mode 100644 index 8469075..0000000 --- a/backports/py3-sip/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Contributor: Francesco Colista -# Maintainer: Francesco Colista -pkgname=py3-sip -pkgver=6.8.6 -pkgrel=0 -pkgdesc="A tool that makes it easy to create Python bindings for C and C++ libraries" -options="!check" # No testsuite -url="https://www.riverbankcomputing.com/software/sip/" -arch="all" -license="custom:sip" -depends=" - py3-packaging - py3-ply - py3-setuptools - py3-toml - " -makedepends="python3-dev py3-gpep517 py3-wheel" -subpackages="$pkgname-pyc" -source="https://pypi.python.org/packages/source/s/sip/sip-$pkgver.tar.gz" -builddir="$srcdir/sip-$pkgver" - -replaces="py-sip" # Backwards comptibility -provides="py-sip=$pkgver-r$pkgrel" # Backwards comptibility - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/sip-*.whl -} - -sha512sums=" -c884c58fc51708e2dd247453f2214e6b01d7e1a9a0166b4228feb5d996310ace2665238dde26af34907e596a0a1c710fc130ae79297f430f73f639a3eb781a50 sip-6.8.6.tar.gz -" From 367a606da2084261b0a7f60064de0802d62aa32b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 16 Oct 2024 20:38:26 -0400 Subject: [PATCH 453/738] user/signal-desktop: upgrade to 7.29.0 --- backports/signal-desktop/APKBUILD | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index b96bba4..30a07b9 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.28.0 +pkgver=7.29.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" @@ -66,8 +66,8 @@ makedepends=" options="net !check" # use _check_depends to validate this - _libsignalver=0.58.0 -_ringrtcver=2.48.1 +_libsignalver=0.58.0 +_ringrtcver=2.48.3 _webrtcver=6613c _stokenizerver=0.2.1 @@ -475,9 +475,9 @@ package() { } sha512sums=" -fa557adb65bce33d7c5823c39603ceda8c4f5743d078153f967f94eb423ff0f30eac3a7252fcfdee56b45b5f27f73a86614732171bd9bb474f9f48615daca6f0 Signal-Desktop-7.28.0.tar.gz +b97155dc2ca70436d6fdf15fff059f905f065738a288679aeee2199d43824206f4c7e4bae0c228b55b4cc76b7e00875b738ee4f7dea3c2a5414acec3e208aa1e Signal-Desktop-7.29.0.tar.gz 6fb62213d8177ac5abe83ea71a18ea4b1c7b323983c41087166658fe9c47c1fd39e5323ca6acefe3db2a9a9376b6f385b5f2c006154da3ab705741d848b28943 libsignal-0.58.0.tar.gz -0190f5a08a9107c818a4770fe37c8b56bd11a99b5514da27cf0941e03b5681fb710b31d9474d05bcf2ac4035ef8703b6767c1780e25edff02ed982d73d8a8e42 ringrtc-2.48.1.tar.gz +6777354b60650c6c3d359714f3aff92a315996f3725ba05c74ed054d3c4ba5506406b30c940853b5ba426ac0271cdb4dd930a759c570f486a70e1f5adc5a2aae ringrtc-2.48.3.tar.gz fe04fcf13f55b124f03ce9d516b1c53fc4f20c6a016819c62eeaa0500eda92c5a0c0d7dc5d1e360a27691dfd404c254e91bed9fb25d0fc40a27795c1b674a82e webrtc-6613c.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch From 6e698a0974ab593d207ceea7854d3943cd718991 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 27 Oct 2024 13:13:08 -0400 Subject: [PATCH 454/738] forgejo: add update check workflows --- .forgejo/bin/check_ver.sh | 31 +++++ .forgejo/bin/create_issue.sh | 166 +++++++++++++++++++++++++ .forgejo/workflows/check-community.yml | 27 ++++ .forgejo/workflows/check-testing.yml | 27 ++++ .forgejo/workflows/check-user.yml | 27 ++++ 5 files changed, 278 insertions(+) create mode 100755 .forgejo/bin/check_ver.sh create mode 100755 .forgejo/bin/create_issue.sh create mode 100644 .forgejo/workflows/check-community.yml create mode 100644 .forgejo/workflows/check-testing.yml create mode 100644 .forgejo/workflows/check-user.yml diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh new file mode 100755 index 0000000..e4b7fd7 --- /dev/null +++ b/.forgejo/bin/check_ver.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# expects the following env variables: +# downstream: downstream repo + +repo=${downstream/*\/} + +curl --silent $downstream/x86_64/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX + +owned_by_you=$(awk -v RS= -v ORS="\n\n" '/m:Antoine Martin \(ayakael\) /' APKINDEX | awk -F ':' '{if($1=="o"){print $2}}' | sort | uniq) + +echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages owned by you" + +rm -f out_of_date not_in_anitya + +for pkg in $owned_by_you; do + upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version') + downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}') + downstream_version=${downstream_version/-*} + + if [ -z "$upstream_version" ]; then + echo "$pkg not in anitya" + echo "$pkg" >> not_in_anitya + elif [ "$downstream_version" != "$(printf '%s\n' $upstream_version $downstream_version | sort -V | head -n 1)" ]; then + echo "$pkg higher downstream" + continue + elif [ "$upstream_version" != "$downstream_version" ]; then + echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version" + echo "$pkg $downstream_version $upstream_version $repo" >> out_of_date + fi +done diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh new file mode 100755 index 0000000..2db1be6 --- /dev/null +++ b/.forgejo/bin/create_issue.sh @@ -0,0 +1,166 @@ +#!/bin/bash + +# expects: +# env variable FORGEJO_TOKEN +# file out_of_date + +IFS=' +' +repo=${downstream/*\/} + +does_it_exist() { + name=$1 + downstream_version=$2 + upstream_version=$3 + repo=$4 + + query="$repo/$name: upgrade to $upstream_version" + query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" + + result="$(curl --silent -X 'GET' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" + )" + + if [ "$result" == "[]" ]; then + return 1 + fi +} + +is_it_old() { + name=$1 + downstream_version=$2 + upstream_version=$3 + repo=$4 + + query="$repo/$name: upgrade to $upstream_version" + query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" + + result="$(curl --silent -X 'GET' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" + )" + + result_title="$(echo $result | jq -r '.[].title' )" + result_id="$(echo $result | jq -r '.[].number' )" + result_downstream_version="$(echo $result_title | awk '{print $4}')" + result_upstream_version="$(echo $result_title | awk '{print $6}')" + + if [ "$downstream_version" != "$result_downstream_version" ] || [ "$upstream_version" != "$result_upstream_version" ]; then + echo $result_id + else + echo 0 + fi +} + +update_title() { + name=$1 + downstream_version=$2 + upstream_version=$3 + repo=$4 + id=$5 + + result=$(curl --silent -X 'PATCH' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" \ + -H 'Content-Type: application/json' \ + -d "{ + \"title\": \"$repo/$name: upgrade to $upstream_version\" + }" + ) + + return 0 +} + +create_issue() { + name=$1 + downstream_version=$2 + upstream_version=$3 + repo=$4 + + result=$(curl --silent -X 'POST' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" \ + -H 'Content-Type: application/json' \ + -d "{ + \"title\": \"$repo/$name: upgrade to $upstream_version\", + \"labels\": [ + $LABEL_NUMBER + ] + }") + + return 0 +} + +if [ -f out_of_date ]; then + out_of_date="$(cat out_of_date)" + + echo "Detected $(wc -l out_of_date) out-of-date packages, creating issues" + + for pkg in $out_of_date; do + name="$(echo $pkg | awk '{print $1}')" + downstream_version="$(echo $pkg | awk '{print $2}')" + upstream_version="$(echo $pkg | awk '{print $3}')" + repo="$(echo $pkg | awk '{print $4}')" + + if does_it_exist $name $downstream_version $upstream_version $repo; then + echo "Issue for $repo/$name already exists" + continue + fi + + id=$(is_it_old $name $downstream_version $upstream_version $repo) + + if [ "$id" != "0" ] && [ -n "$id" ]; then + echo "Issue for $repo/$name needs updating" + update_title $name $downstream_version $upstream_version $repo $id + continue + fi + + echo "Creating issue for $repo/$name" + create_issue $name $downstream_version $upstream_version $repo + done +fi + +if [ -f not_in_anitya ]; then + query="Add missing $repo packages to anitya" + query="$(echo $query | sed 's| |%20|g')" + + result="$(curl --silent -X 'GET' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" + )" + + if [ "$result" == "[]" ]; then + echo "Creating anitya issue" + result=$(curl --silent -X 'POST' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" \ + -H 'Content-Type: application/json' \ + -d "{ + \"title\": \"Add missing $repo packages to anitya\", + \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\", + \"labels\": [ + $LABEL_NUMBER + ] + }") + + else + echo "Updating anitya issue" + result_id="$(echo $result | jq -r '.[].number' )" + result=$(curl --silent -X 'PATCH' \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \ + -H 'accept: application/json' \ + -H "authorization: Basic $FORGEJO_TOKEN" \ + -H 'Content-Type: application/json' \ + -d "{ + \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\" + }" + ) + fi +fi diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml new file mode 100644 index 0000000..a3d2524 --- /dev/null +++ b/.forgejo/workflows/check-community.yml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + + schedule: + - cron: '@hourly' + +jobs: + check-community: + name: Check community repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/edge/community + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + LABEL_NUMER: 4 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml new file mode 100644 index 0000000..b55147b --- /dev/null +++ b/.forgejo/workflows/check-testing.yml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + + schedule: + - cron: '@hourly' + +jobs: + check-community: + name: Check testing repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + LABEL_NUMBER: 4 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml new file mode 100644 index 0000000..f07ec6e --- /dev/null +++ b/.forgejo/workflows/check-user.yml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + + schedule: + - cron: '@hourly' + +jobs: + check-user: + name: Check user repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://ayakael.net/api/packages/forge/alpine/edge/user + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + LABEL_NUMBER: 4 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From 9bf9771b8c7803e4f0f928da2c5b948215c0dfc7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 27 Oct 2024 17:01:04 -0400 Subject: [PATCH 455/738] forgejo: update is_it_old to use new title format --- .forgejo/bin/create_issue.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 2db1be6..2e8e1e6 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -45,10 +45,9 @@ is_it_old() { result_title="$(echo $result | jq -r '.[].title' )" result_id="$(echo $result | jq -r '.[].number' )" - result_downstream_version="$(echo $result_title | awk '{print $4}')" - result_upstream_version="$(echo $result_title | awk '{print $6}')" + result_upstream_version="$(echo $result_title | awk '{print $4}')" - if [ "$downstream_version" != "$result_downstream_version" ] || [ "$upstream_version" != "$result_upstream_version" ]; then + if [ "$upstream_version" != "$result_upstream_version" ]; then echo $result_id else echo 0 From 7814f05e1c69724f580f9f2c973e34852952e754 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 28 Oct 2024 08:21:30 -0400 Subject: [PATCH 456/738] Check every day at 5 am instead of hourly --- .forgejo/workflows/check-community.yml | 2 +- .forgejo/workflows/check-testing.yml | 2 +- .forgejo/workflows/check-user.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index a3d2524..fdaa184 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -2,7 +2,7 @@ on: workflow_dispatch: schedule: - - cron: '@hourly' + - cron: '0 5 * * *' jobs: check-community: diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml index b55147b..2b8f7ed 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -2,7 +2,7 @@ on: workflow_dispatch: schedule: - - cron: '@hourly' + - cron: '0 5 * * *' jobs: check-community: diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml index f07ec6e..09b0f3c 100644 --- a/.forgejo/workflows/check-user.yml +++ b/.forgejo/workflows/check-user.yml @@ -2,7 +2,7 @@ on: workflow_dispatch: schedule: - - cron: '@hourly' + - cron: '0 5 * * *' jobs: check-user: From 97ed4992d7d7eead70ee08018be08edcc7e6c594 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 29 Oct 2024 07:06:50 -0400 Subject: [PATCH 457/738] forgejo: Fix is_it_old logics --- .forgejo/bin/create_issue.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 2e8e1e6..d162758 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -34,7 +34,7 @@ is_it_old() { upstream_version=$3 repo=$4 - query="$repo/$name: upgrade to $upstream_version" + query="$repo/$name: upgrade to" query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" result="$(curl --silent -X 'GET' \ From 257e0199923bc7c1160e9ab012fa4909f0059add Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 29 Oct 2024 07:07:21 -0400 Subject: [PATCH 458/738] forgejo: fix typo in check-community --- .forgejo/workflows/check-community.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index fdaa184..9385687 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -13,7 +13,7 @@ jobs: env: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/community FORGEJO_TOKEN: ${{ secrets.forgejo_token }} - LABEL_NUMER: 4 + LABEL_NUMBER: 4 steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From b345573aa1eba95a8d8c40c7c5797ca5cd5633d1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 29 Oct 2024 08:56:16 -0400 Subject: [PATCH 459/738] forgejo: chose highest version when dealing with multiple downstream_versions --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index e4b7fd7..7a1f534 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -15,7 +15,7 @@ rm -f out_of_date not_in_anitya for pkg in $owned_by_you; do upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version') - downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}') + downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) downstream_version=${downstream_version/-*} if [ -z "$upstream_version" ]; then From 396c98208d47781f42e761dda10dbc8720e3544e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 29 Oct 2024 09:01:48 -0400 Subject: [PATCH 460/738] backports/caprine: new aport --- backports/caprine/APKBUILD | 65 +++++++++++++++++++++++++++++++ backports/caprine/caprine.desktop | 9 +++++ backports/caprine/caprine.sh | 2 + 3 files changed, 76 insertions(+) create mode 100644 backports/caprine/APKBUILD create mode 100644 backports/caprine/caprine.desktop create mode 100644 backports/caprine/caprine.sh diff --git a/backports/caprine/APKBUILD b/backports/caprine/APKBUILD new file mode 100644 index 0000000..c77c50e --- /dev/null +++ b/backports/caprine/APKBUILD @@ -0,0 +1,65 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=caprine +pkgver=2.60.1 +pkgrel=1 +pkgdesc="Elegant Facebook Messenger desktop app" +arch="x86_64 aarch64" # blocked by electron +url="https://github.com/sindresorhus/caprine" +license="MIT" +depends="electron" +makedepends="npm findutils coreutils" +options="!check" # No test suite +source=" + $pkgname-$pkgver.tar.gz::https://github.com/sindresorhus/caprine/archive/refs/tags/v$pkgver.tar.gz + caprine.desktop + caprine.sh + " + +build() { + npm install --ignore-scripts + npx --yes patch-package + npx tsc + rm -r node_modules + npm install --ignore-scripts --production + npx --yes patch-package +} + +package() { + local appdir=/usr/lib/caprine + + install -d "$pkgdir"$appdir + cp -r ./* "$pkgdir"$appdir + + install -dm755 "$pkgdir/usr/share/pixmaps" + install -m644 build/icon.png "$pkgdir/usr/share/pixmaps/$pkgname.png" + + install -Dm755 "$srcdir"/caprine.sh "$pkgdir"/usr/bin/caprine + install -Dm644 "$srcdir"/caprine.desktop \ + "$pkgdir"/usr/share/applications/caprine.desktop + + install -dm755 "$pkgdir"/usr/share/licenses/caprine + ln -s "$(realpath -m --relative-to=/usr/share/licenses/caprine $appdir/license)" \ + "$pkgdir"/usr/share/licenses/caprine + + # Clean up + rm -r "$pkgdir"$appdir/build + rm -r "$pkgdir"$appdir/source + rm -r "$pkgdir"$appdir/tsconfig.json + find "$pkgdir"$appdir \ + -name "package.json" \ + -exec sed -e "s|$srcdir/caprine|$appdir|" \ + -i {} \; \ + -or -name ".*" -prune -exec rm -r '{}' \; \ + -or -name "bin" -prune -exec rm -r '{}' \; \ + -or -name "example" -prune -exec rm -r '{}' \; \ + -or -name "examples" -prune -exec rm -r '{}' \; \ + -or -name "man" -prune -exec rm -r '{}' \; \ + -or -name "scripts" -prune -exec rm -r '{}' \; \ + -or -name "test" -prune -exec rm -r '{}' \; +} +sha512sums=" +0df7f233c91f5a044dcffde94b976c6ad71e6d355518615c48cd825a249c01d63f455de31ece69193a66ca0fd8157506f9b88088da1bd47fc75e9d3800784ed0 caprine-2.60.1.tar.gz +a469e3bea24926119e51642b777ef794c5fa65421107903f967c36d81bbb1adb3d52469ce3a3301b2c890f1aa53ab989ded22a7c6e811fb8cf0a582dbd835e19 caprine.desktop +3ad8994c1a0417e73d622587769e527b4236a32c1a89442ff76413b75b4392d667c9e2908979b453e5926e54db6d94b31625340c5a94e84e91ea77f56feae778 caprine.sh +" diff --git a/backports/caprine/caprine.desktop b/backports/caprine/caprine.desktop new file mode 100644 index 0000000..b17bbd5 --- /dev/null +++ b/backports/caprine/caprine.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=Caprine +GenericName=IM Client +Comment=Unofficial Facebook Messenger app +Icon=caprine +Exec=caprine +Categories=GTK;InstantMessaging;Network; +StartupNotify=true diff --git a/backports/caprine/caprine.sh b/backports/caprine/caprine.sh new file mode 100644 index 0000000..bf0f8de --- /dev/null +++ b/backports/caprine/caprine.sh @@ -0,0 +1,2 @@ +#!/bin/sh +/usr/bin/electron "/usr/lib/caprine" From a362d7747a4344f28632425ce7574d954544a66c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 20:32:09 -0500 Subject: [PATCH 461/738] user/paperless-ngx: disable due to uvicorn --- user/paperless-ngx/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/paperless-ngx/APKBUILD b/user/paperless-ngx/APKBUILD index 3e017fb..9a6e7ab 100644 --- a/user/paperless-ngx/APKBUILD +++ b/user/paperless-ngx/APKBUILD @@ -8,7 +8,8 @@ url="https://github.com/paperless-ngx/paperless-ngx" license="GPL-3.0-only" # s390x: ocrmypdf py3-joblib py3-scikit-learn py3-watchfiles # armhf / ppc64le: py3-uvloop -arch="noarch !s390x !armhf !ppc64le" +# all: uvicorn doesn't yet work with websockets 14 +# arch="noarch !s390x !armhf !ppc64le" install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" depends=" file From 4fce7364ca6898da2e22da57d8ef5011a311fe45 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 20:33:21 -0500 Subject: [PATCH 462/738] user/protobuf: drop --- user/protobuf/APKBUILD | 168 ------------------------- user/protobuf/exclude.patch | 40 ------ user/protobuf/protoc-cmake.patch | 27 ---- user/protobuf/ruby-fix-cflags.patch | 18 --- user/protobuf/skip-failing-tests.patch | 99 --------------- user/protobuf/soversion.patch | 39 ------ user/protobuf/trim-rakefile.patch | 79 ------------ 7 files changed, 470 deletions(-) delete mode 100644 user/protobuf/APKBUILD delete mode 100644 user/protobuf/exclude.patch delete mode 100644 user/protobuf/protoc-cmake.patch delete mode 100644 user/protobuf/ruby-fix-cflags.patch delete mode 100644 user/protobuf/skip-failing-tests.patch delete mode 100644 user/protobuf/soversion.patch delete mode 100644 user/protobuf/trim-rakefile.patch diff --git a/user/protobuf/APKBUILD b/user/protobuf/APKBUILD deleted file mode 100644 index ec56f54..0000000 --- a/user/protobuf/APKBUILD +++ /dev/null @@ -1,168 +0,0 @@ -# Contributor: Sheila Aman -# Maintainer: Natanael Copa -pkgname=protobuf -_gemname=google-protobuf -pkgver=23.4 -_rubyver=3.23.4 -pkgrel=2 -pkgdesc="Library for extensible, efficient structure packing" -url="https://github.com/protocolbuffers/protobuf" -arch="all" -license="BSD-3-Clause" -depends=" - protoc=$pkgver-r$pkgrel - libprotoc=$pkgver-r$pkgrel - libprotobuf=$pkgver-r$pkgrel - libprotobuf-lite=$pkgver-r$pkgrel - " -depends_dev=" - protoc=$pkgver-r$pkgrel - zlib-dev - " -makedepends=" - $depends_dev - abseil-cpp-dev - cmake - ruby3.2 - ruby3.2-dev - ruby3.2-rake - samurai - " -checkdepends="gtest-dev" -subpackages=" - ruby3.2-$_gemname:_ruby - $pkgname-dev - $pkgname-vim::noarch - protoc - libprotoc - libprotobuf - libprotobuf-lite - " - # exclude.patch -source="$pkgname-$pkgver.tar.gz::https://github.com/protocolbuffers/protobuf/archive/refs/tags/v$pkgver.tar.gz - exclude.patch - protoc-cmake.patch - ruby-fix-cflags.patch - skip-failing-tests.patch - soversion.patch - trim-rakefile.patch - " - -# fails some -case "$CARCH" in -armhf) options="$options !check" ;; -esac - -build() { - export CFLAGS="$CFLAGS -DNDEBUG -O2 -flto=auto" - export CXXFLAGS="$CXXFLAGS -DNDEBUG -O2 -flto=auto -Wno-deprecated-declarations" - - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=None \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_SHARED_LIBS=ON \ - -Dprotobuf_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \ - -Dprotobuf_BUILD_LIBPROTOC=ON \ - -Dprotobuf_ABSL_PROVIDER="package" \ - -Dprotobuf_ALLOW_CCACHE=ON \ - -Dprotobuf_USE_EXTERNAL_GTEST=ON - cmake --build build - - cd "$builddir"/ruby - - export PATH="$PATH:$builddir/build" - - # Generate proto files for built-in protocols. - rake genproto - - gem build $_gemname.gemspec - gem install --local \ - --install-dir dist \ - --ignore-dependencies \ - --no-document \ - --verbose \ - $_gemname -} - -# TODO: Run tests for ruby gem. -check() { - ctest --test-dir build --output-on-failure -} - -package() { - DESTDIR="$pkgdir" cmake --install build - - sed -i \ - -e "/Requires:/s|;| |g" \ - -e "/Requires:/s|::|_|g" \ - "$pkgdir"/usr/lib/pkgconfig/protobuf.pc - - install -Dm644 editors/proto.vim \ - "$pkgdir"/usr/share/vim/vimfiles/syntax/proto.vim - - local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')" - cd ruby/dist - - mkdir -p "$gemdir" - cp -r extensions gems specifications "$gemdir"/ - - # Remove duplicated .so libs (should be only in extensions directory). - find "$gemdir"/gems/ -name "*.so" -delete - - # Remove unnecessary files. - cd "$gemdir"/gems/$_gemname-$_rubyver - rm -r ext/ -} - -_ruby() { - depends="" - pkgdesc="Ruby bindings to Google's data interchange format" - - amove usr/lib/ruby/gems -} - -vim() { - pkgdesc="Vim syntax for $pkgname" - depends="" - install_if="$pkgname=$pkgver-r$pkgrel vim" - - amove usr/share/vim/vimfiles/syntax/proto.vim -} - -libprotoc() { - depends="" - pkgdesc="Runtime library for Protocol Buffer compiler" - - amove usr/lib/libprotoc.so.* -} - -protoc() { - depends="" - pkgdesc="Protocol buffer compiler binary and library" - - amove usr/bin/protoc* -} - -libprotobuf() { - depends="" - pkgdesc="Runtime library for C++ users of protocol buffers" - - amove usr/lib/libprotobuf.so.* -} - -lite() { - depends="" - pkgdesc="Runtime library for C++ users with 'lite runtime' setting of protocol buffers" - - amove usr/lib/libprotobuf-lite.so.* -} - -sha512sums=" -b93a4e0339ecbe085796de5b6c61feae35229d40db9019c043090bcaa483a1cce78a99487c5638482c68832fcede5579a0e5ec731221a88359b80db9bb6dc566 protobuf-23.4.tar.gz -0d46d105a0670ab5cfcb04ed534927a71613234a88efede0b20d426e1caaa708e6ff275a09c5dab7786fe26e69e0882f022b893302e4869006b4ac55fc6172e5 exclude.patch -16b8ee0e50dbb2144ddb83654a63e410b4218e667b6b8b77c7b6f9797508f63c3e8be0f9711841bb6ebbed0883cda2394b219a62b468240f65f4dac418b5a56e protoc-cmake.patch -0cb202a6151ae3746c09e85f2e4ce9abb0d810d4a3c84cb647fde407cf8d13894d3c9b340e06d7a3a85669da1899db265d26d8309d59249f841a40a66e045c83 ruby-fix-cflags.patch -b5070f8e150920c316130ba40f46c66eefddc634844f5d6b8ee11f6824a3707b3e74f68aa0612c16305bf096050214c6120e693225e07e0cea80e68a7830f863 skip-failing-tests.patch -850dc1d6fd3ea01f1689fd700ac35e7da0882092ab34c616702e01bdf4b5327b8ab27381ecf291431a94f54c89d31707a4a171929937e880543974cb64f9e685 soversion.patch -13514a456a50d7243baa23fe43586fc4544cda87b9e2a5afe9d2fac8afca8e8853f9b42232c3fff4c5cf2df443af32f944f451daa1d604d80fd03ee4e7abed3e trim-rakefile.patch -" diff --git a/user/protobuf/exclude.patch b/user/protobuf/exclude.patch deleted file mode 100644 index 9c63c0a..0000000 --- a/user/protobuf/exclude.patch +++ /dev/null @@ -1,40 +0,0 @@ -don't install the utf8_range lib into disk. -also remove it from .pc/cmake, it's statically linked into protobuf and never needed on disk after --- -diff --git a/cmake/install.cmake b/cmake/install.cmake -index e7eb210..73e1897 100644 ---- a/cmake/install.cmake -+++ b/cmake/install.cmake -@@ -4,7 +4,6 @@ foreach(_target IN LISTS protobuf_ABSL_USED_TARGETS) - string(REPLACE :: _ _modified_target ${_target}) - list(APPEND _pc_targets ${_modified_target}) - endforeach() --list(APPEND _pc_targets "utf8_range") - - set(_protobuf_PC_REQUIRES "") - set(_sep "") -diff --git a/cmake/protobuf-config.cmake.in b/cmake/protobuf-config.cmake.in -index 44805c7..1a8d243 100644 ---- a/cmake/protobuf-config.cmake.in -+++ b/cmake/protobuf-config.cmake.in -@@ -4,7 +4,6 @@ include("${CMAKE_CURRENT_LIST_DIR}/protobuf-options.cmake") - # Depend packages - @_protobuf_FIND_ZLIB@ - @_protobuf_FIND_ABSL@ --@_protobuf_FIND_UTF8_RANGE@ - - # Imported targets - include("${CMAKE_CURRENT_LIST_DIR}/protobuf-targets.cmake") -diff --git a/cmake/utf8_range.cmake b/cmake/utf8_range.cmake -index f411a8c..770f94c 100644 ---- a/cmake/utf8_range.cmake -+++ b/cmake/utf8_range.cmake -@@ -8,7 +8,7 @@ if (NOT TARGET utf8_range) - endif() - - set(utf8_range_ENABLE_INSTALL ${protobuf_INSTALL} CACHE BOOL "Set install") -- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range) -+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range third_party/utf8_range EXCLUDE_FROM_ALL) - include_directories(${CMAKE_CURRENT_SOURCE_DIR}/third_party/utf8_range) - endif () - diff --git a/user/protobuf/protoc-cmake.patch b/user/protobuf/protoc-cmake.patch deleted file mode 100644 index 4c1ae7a..0000000 --- a/user/protobuf/protoc-cmake.patch +++ /dev/null @@ -1,27 +0,0 @@ -Patch-Source: https://github.com/protocolbuffers/protobuf/pull/13206 --- -From 2e62ef1eaa2e712afc5f87aa2c55d478fe96230d Mon Sep 17 00:00:00 2001 -From: Antonio Rojas -Date: Wed, 5 Jul 2023 13:03:11 +0200 -Subject: [PATCH] Handle BUILD_TYPE=None in protobuf-module.cmake - -Fixes Protobuf_PROTOC_EXECUTABLE being undefined in that case. ---- - cmake/protobuf-module.cmake.in | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/cmake/protobuf-module.cmake.in b/cmake/protobuf-module.cmake.in -index 0bb05e38fad..e5b2b2e4b3a 100644 ---- a/cmake/protobuf-module.cmake.in -+++ b/cmake/protobuf-module.cmake.in -@@ -153,6 +153,10 @@ if(NOT Protobuf_PROTOC_EXECUTABLE AND TARGET protobuf::protoc) - get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc - IMPORTED_LOCATION_NOCONFIG) - endif() -+ if(NOT EXISTS "${Protobuf_PROTOC_EXECUTABLE}") -+ get_target_property(Protobuf_PROTOC_EXECUTABLE protobuf::protoc -+ IMPORTED_LOCATION_NONE) -+ endif() - endif() - - # Version info variable diff --git a/user/protobuf/ruby-fix-cflags.patch b/user/protobuf/ruby-fix-cflags.patch deleted file mode 100644 index 24b1d57..0000000 --- a/user/protobuf/ruby-fix-cflags.patch +++ /dev/null @@ -1,18 +0,0 @@ -Using builder flags - -diff --git a/ruby/ext/google/protobuf_c/extconf.rb b/ruby/ext/google/protobuf_c/extconf.rb -index b7c439b..0bbc15c 100755 ---- a/ruby/ext/google/protobuf_c/extconf.rb -+++ b/ruby/ext/google/protobuf_c/extconf.rb -@@ -7,9 +7,9 @@ ext_name = "google/protobuf_c" - dir_config(ext_name) - - if RUBY_PLATFORM =~ /darwin/ || RUBY_PLATFORM =~ /linux/ || RUBY_PLATFORM =~ /freebsd/ -- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" -+ $CFLAGS += " -std=gnu99 -DNDEBUG -fvisibility=hidden -Wall -Wsign-compare -Wno-declaration-after-statement" - else -- $CFLAGS += " -std=gnu99 -O3 -DNDEBUG" -+ $CFLAGS += " -std=gnu99 -DNDEBUG" - end - - if RUBY_PLATFORM =~ /linux/ diff --git a/user/protobuf/skip-failing-tests.patch b/user/protobuf/skip-failing-tests.patch deleted file mode 100644 index be0c71b..0000000 --- a/user/protobuf/skip-failing-tests.patch +++ /dev/null @@ -1,99 +0,0 @@ -diff --git a/src/google/protobuf/any_test.cc b/src/google/protobuf/any_test.cc -index 8b544d9..0f27dbe 100644 ---- a/src/google/protobuf/any_test.cc -+++ b/src/google/protobuf/any_test.cc -@@ -62,13 +62,6 @@ TEST(AnyTest, TestPackAndUnpack) { - EXPECT_EQ(12345, submessage.int32_value()); - } - --TEST(AnyTest, TestPackFromSerializationExceedsSizeLimit) { -- protobuf_unittest::TestAny submessage; -- submessage.mutable_text()->resize(INT_MAX, 'a'); -- protobuf_unittest::TestAny message; -- EXPECT_FALSE(message.mutable_any_value()->PackFrom(submessage)); --} -- - TEST(AnyTest, TestUnpackWithTypeMismatch) { - protobuf_unittest::TestAny payload; - payload.set_int32_value(13); -diff --git a/src/google/protobuf/arena_unittest.cc b/src/google/protobuf/arena_unittest.cc -index 4832cff..aa45a25 100644 ---- a/src/google/protobuf/arena_unittest.cc -+++ b/src/google/protobuf/arena_unittest.cc -@@ -1392,11 +1392,11 @@ TEST(ArenaTest, SpaceAllocated_and_Used) { - options.initial_block_size = arena_block.size(); - Arena arena_2(options); - EXPECT_EQ(1024, arena_2.SpaceAllocated()); -- EXPECT_EQ(0, arena_2.SpaceUsed()); -+// EXPECT_EQ(0, arena_2.SpaceUsed()); - EXPECT_EQ(1024, arena_2.Reset()); - Arena::CreateArray(&arena_2, 55); - EXPECT_EQ(1024, arena_2.SpaceAllocated()); -- EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); -+// EXPECT_EQ(Align8(55), arena_2.SpaceUsed()); - EXPECT_EQ(1024, arena_2.Reset()); - } - -@@ -1460,11 +1460,11 @@ TEST(ArenaTest, BlockSizeSmallerThanAllocation) { - - *Arena::Create(&arena) = 42; - EXPECT_GE(arena.SpaceAllocated(), 8); -- EXPECT_EQ(8, arena.SpaceUsed()); -+// EXPECT_EQ(8, arena.SpaceUsed()); - - *Arena::Create(&arena) = 42; - EXPECT_GE(arena.SpaceAllocated(), 16); -- EXPECT_EQ(16, arena.SpaceUsed()); -+// EXPECT_EQ(16, arena.SpaceUsed()); - } - } - -diff --git a/src/google/protobuf/extension_set_unittest.cc b/src/google/protobuf/extension_set_unittest.cc -index ccd1c9b..f420da3 100644 ---- a/src/google/protobuf/extension_set_unittest.cc -+++ b/src/google/protobuf/extension_set_unittest.cc -@@ -871,17 +871,17 @@ TEST(ExtensionSetTest, SpaceUsedExcludingSelf) { - } while (0) - - TEST_REPEATED_EXTENSIONS_SPACE_USED(int32, int32_t, 101); -- TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); -+ //TEST_REPEATED_EXTENSIONS_SPACE_USED(int64, int64_t, 102); - TEST_REPEATED_EXTENSIONS_SPACE_USED(uint32, uint32_t, 103); -- TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); -+ //TEST_REPEATED_EXTENSIONS_SPACE_USED(uint64, uint64_t, 104); - TEST_REPEATED_EXTENSIONS_SPACE_USED(sint32, int32_t, 105); -- TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); -+ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sint64, int64_t, 106); - TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed32, uint32_t, 107); -- TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); -+ //TEST_REPEATED_EXTENSIONS_SPACE_USED(fixed64, uint64_t, 108); - TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed32, int32_t, 109); -- TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); -+ //TEST_REPEATED_EXTENSIONS_SPACE_USED(sfixed64, int64_t, 110); - TEST_REPEATED_EXTENSIONS_SPACE_USED(float, float, 111); -- TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); -+ //TEST_REPEATED_EXTENSIONS_SPACE_USED(double, double, 112); - TEST_REPEATED_EXTENSIONS_SPACE_USED(bool, bool, true); - TEST_REPEATED_EXTENSIONS_SPACE_USED(nested_enum, int, - unittest::TestAllTypes::FOO); -diff --git a/src/google/protobuf/wire_format_unittest.inc b/src/google/protobuf/wire_format_unittest.inc -index 4c7d047..7906cfa 100644 ---- a/src/google/protobuf/wire_format_unittest.inc -+++ b/src/google/protobuf/wire_format_unittest.inc -@@ -1537,6 +1537,7 @@ TEST_F(Utf8ValidationTest, ParseRepeatedString) { - - // Test the old VerifyUTF8String() function, which may still be called by old - // generated code. -+#if 0 - TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { - std::string data(kInvalidUTF8String); - -@@ -1555,7 +1556,7 @@ TEST_F(Utf8ValidationTest, OldVerifyUTF8String) { - WireFormat::SERIALIZE); - } - } -- -+#endif - - TEST(RepeatedVarint, Int32) { - RepeatedField v; diff --git a/user/protobuf/soversion.patch b/user/protobuf/soversion.patch deleted file mode 100644 index 25d6959..0000000 --- a/user/protobuf/soversion.patch +++ /dev/null @@ -1,39 +0,0 @@ -Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/protobuf/-/blob/e93df92fead2d46cc2825a866af3f402d498439c/soversion.patch -use an soversion that actually makes sense and not just the full pkgver --- -diff --git a/cmake/libprotobuf-lite.cmake b/cmake/libprotobuf-lite.cmake -index 9b1de677b4f..276c99c489e 100644 ---- a/cmake/libprotobuf-lite.cmake -+++ b/cmake/libprotobuf-lite.cmake -@@ -30,6 +30,7 @@ if(protobuf_BUILD_SHARED_LIBS) - endif() - set_target_properties(libprotobuf-lite PROPERTIES - VERSION ${protobuf_VERSION} -+ SOVERSION ${protobuf_VERSION_MINOR} - OUTPUT_NAME ${LIB_PREFIX}protobuf-lite - DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") - add_library(protobuf::libprotobuf-lite ALIAS libprotobuf-lite) -diff --git a/cmake/libprotobuf.cmake b/cmake/libprotobuf.cmake -index aa3efc9a68a..0f34d20b97d 100644 ---- a/cmake/libprotobuf.cmake -+++ b/cmake/libprotobuf.cmake -@@ -33,6 +33,7 @@ if(protobuf_BUILD_SHARED_LIBS) - endif() - set_target_properties(libprotobuf PROPERTIES - VERSION ${protobuf_VERSION} -+ SOVERSION ${protobuf_VERSION_MINOR} - OUTPUT_NAME ${LIB_PREFIX}protobuf - DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") - add_library(protobuf::libprotobuf ALIAS libprotobuf) -diff --git a/cmake/libprotoc.cmake b/cmake/libprotoc.cmake -index 72b4a1abb92..91e8bbeb04e 100644 ---- a/cmake/libprotoc.cmake -+++ b/cmake/libprotoc.cmake -@@ -24,6 +24,7 @@ endif() - set_target_properties(libprotoc PROPERTIES - COMPILE_DEFINITIONS LIBPROTOC_EXPORTS - VERSION ${protobuf_VERSION} -+ SOVERSION ${protobuf_VERSION_MINOR} - OUTPUT_NAME ${LIB_PREFIX}protoc - DEBUG_POSTFIX "${protobuf_DEBUG_POSTFIX}") - add_library(protobuf::libprotoc ALIAS libprotoc) diff --git a/user/protobuf/trim-rakefile.patch b/user/protobuf/trim-rakefile.patch deleted file mode 100644 index d8a3b87..0000000 --- a/user/protobuf/trim-rakefile.patch +++ /dev/null @@ -1,79 +0,0 @@ -diff --git a/ruby/Rakefile b/ruby/Rakefile -index c05e115..20144b7 100644 ---- a/ruby/Rakefile -+++ b/ruby/Rakefile -@@ -1,6 +1,4 @@ - require "rubygems" --require "rubygems/package_task" --require "rake/extensiontask" unless RUBY_PLATFORM == "java" - require "rake/testtask" - - spec = Gem::Specification.load("google-protobuf.gemspec") -@@ -95,57 +93,6 @@ else - FileUtils.cp(utf8_root+"/range2-neon.c", "ext/google/protobuf_c") - FileUtils.cp(utf8_root+"/range2-sse.c", "ext/google/protobuf_c") - end -- -- Rake::ExtensionTask.new("protobuf_c", spec) do |ext| -- unless RUBY_PLATFORM =~ /darwin/ -- # TODO: also set "no_native to true" for mac if possible. As is, -- # "no_native" can only be set if the RUBY_PLATFORM doing -- # cross-compilation is contained in the "ext.cross_platform" array. -- ext.no_native = true -- end -- ext.ext_dir = "ext/google/protobuf_c" -- ext.lib_dir = "lib/google" -- ext.cross_compile = true -- ext.cross_platform = [ -- 'x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', -- 'x86_64-linux', 'x86-linux', -- 'x86_64-darwin', 'arm64-darwin', -- ] -- end -- -- task 'gem:java' do -- sh "rm Gemfile.lock" -- require 'rake_compiler_dock' -- # Specify the repo root as the working and mount directory to provide access -- # to the java directory -- repo_root = File.realdirpath File.join(Dir.pwd, '..') -- RakeCompilerDock.sh <<-"EOT", platform: 'jruby', rubyvm: :jruby, mountdir: repo_root, workdir: repo_root -- sudo apt-get install maven -y && \ -- cd java && mvn install -Dmaven.test.skip=true && cd ../ruby && \ -- bundle && \ -- IN_DOCKER=true rake compile gem -- EOT -- end -- -- task 'gem:windows' do -- sh "rm Gemfile.lock" -- require 'rake_compiler_dock' -- ['x86-mingw32', 'x64-mingw32', 'x64-mingw-ucrt', 'x86_64-linux', 'x86-linux'].each do |plat| -- RakeCompilerDock.sh <<-"EOT", platform: plat -- bundle && \ -- IN_DOCKER=true rake native:#{plat} pkg/#{spec.full_name}-#{plat}.gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0 -- EOT -- end -- end -- -- if RUBY_PLATFORM =~ /darwin/ -- task 'gem:native' do -- system "rake genproto" -- system "rake cross native gem RUBY_CC_VERSION=3.1.0:3.0.0:2.7.0:2.6.0" -- end -- else -- task 'gem:native' => [:genproto, 'gem:windows', 'gem:java'] -- end - end - - task :genproto => genproto_output -@@ -154,9 +101,6 @@ task :clean do - sh "rm -f #{genproto_output.join(' ')}" - end - --Gem::PackageTask.new(spec) do |pkg| --end -- - # Skip build/genproto in Bazel builds, where we expect this to - # be done already. - Rake::TestTask.new(:test => ENV['BAZEL'] == 'true' ? [] : [:build, :genproto]) do |t| From 9e18a02c6ac83e8c361cc5c1eac40144b80457a3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 20:33:41 -0500 Subject: [PATCH 463/738] user/sane: FTBFS --- user/sane/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/sane/APKBUILD b/user/sane/APKBUILD index 1eb5756..62a8a34 100644 --- a/user/sane/APKBUILD +++ b/user/sane/APKBUILD @@ -7,7 +7,8 @@ pkgver=1.1.1 pkgrel=3 pkgdesc="Scanner Access Now Easy - universal scanner interface" url="http://www.sane-project.org/" -arch="all" +# FTBFS +# arch="all" license="GPL-2.0-or-later GPL-2.0-or-later-with-sane-exception Public-Domain" makedepends="diffutils file libtool libusb-dev v4l-utils-dev net-snmp-dev avahi-dev curl-dev libpng-dev libjpeg-turbo-dev tiff-dev libgphoto2-dev From 00e537997327ca1ceb33e41efe6f094c7eb93078 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 20:34:19 -0500 Subject: [PATCH 464/738] user/tandoor-recipes: FTBFS --- user/tandoor-recipes/APKBUILD | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 72a3d33..6ae8824 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -4,7 +4,8 @@ pkgname=tandoor-recipes pkgver=1.5.12 pkgrel=1 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." -arch="noarch" +# FTBFS +# arch="noarch" url="https://github.com/TandoorRecipes/recipes" license="AGPL-3.0-only" depends=" @@ -56,7 +57,7 @@ depends=" py3-requests py3-six py3-uritemplate - py3-validators~=0.20 + py3-validators~0.20 py3-webdavclient3 py3-whitenoise py3-yaml From 3ea85f37b5200c17a2b65978f77edb5e640a3a36 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 09:57:33 -0400 Subject: [PATCH 465/738] backports/calibre: upgrade to 7.20.0 --- backports/calibre/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD index 79582ee..74af5a9 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=7.12.0 +pkgver=7.20.0 pkgrel=0 pkgdesc="Ebook management application" # qt6-webengine @@ -59,6 +59,7 @@ makedepends=" qt6-qtbase-dev uchardet-dev xdg-utils + ffmpeg-dev " subpackages=" $pkgname-pyc @@ -100,7 +101,6 @@ package() { python3 setup.py install \ --staging-root="$pkgdir"/usr \ - --no-compile \ --system-plugins-location=/usr/share/calibre/system-plugins cp -a man-pages/ "$pkgdir"/usr/share/man @@ -111,6 +111,6 @@ package() { } sha512sums=" -ee654260d7047f0579a659b8907439a407fb561affcef84141126840452e7b98d10bb5e0a69e0cc809d9ba68729570900a0e7251f18b2056a94b0213880f1363 calibre-7.12.0.tar.xz +3b6e2d4ed8d0755096b466f4bdcc8b6ca4810398caa2322c1efc30280680ff8b10dc5fb8cb763bed8fee82746e7c51c6f31f56e5d9689d5f43c671442004c532 calibre-7.20.0.tar.xz eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch " From 88653d4dbd5e2169c5eead558a05990cb0414b7b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 09:57:51 -0400 Subject: [PATCH 466/738] backports/caprine: bump pkgrel --- backports/caprine/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/caprine/APKBUILD b/backports/caprine/APKBUILD index c77c50e..9a73d39 100644 --- a/backports/caprine/APKBUILD +++ b/backports/caprine/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=caprine pkgver=2.60.1 -pkgrel=1 +pkgrel=2 pkgdesc="Elegant Facebook Messenger desktop app" arch="x86_64 aarch64" # blocked by electron url="https://github.com/sindresorhus/caprine" From 53e39d64e5fb42d1bb3e1afba439428fc6578efd Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 09:58:25 -0400 Subject: [PATCH 467/738] backports/coin: bump pkgrel --- backports/coin/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD index 7881fd9..723ea30 100644 --- a/backports/coin/APKBUILD +++ b/backports/coin/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=coin pkgver=4.0.0 -pkgrel=6 +pkgrel=7 pkgdesc="OpenGL OpenInventor compatible graphics library" url="https://github.com/coin3d/coin" license="BSD-3-Clause" From 7c899e25cbd2ca98bf85dea985b01764f744351e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 09:58:57 -0400 Subject: [PATCH 468/738] backports/cura: bump pkgrel --- backports/cura/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backports/cura/APKBUILD b/backports/cura/APKBUILD index c6964f8..7c669be 100644 --- a/backports/cura/APKBUILD +++ b/backports/cura/APKBUILD @@ -7,12 +7,13 @@ pkgver=5.2.2 pkgrel=1 pkgdesc="3D printer / slicing GUI built on top of the Uranium framework" url="https://ultimaker.com/software/ultimaker-cura" -arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" # ppc64le: no py3-keyring +# ppc64le: no py3-keyring # x86: no curaengine # armhf: no uranium, qt5-qtquickcontrols, qt5-qtquickcontrols2, qt5-qtgraphicaleffects # riscv64: no uranium # s390x: no py3-trimesh, no py3-numpy-stl # armv7: no py3-trimesh +arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" license="LGPL-3.0-or-later" # add cura-binary-data to depends when packaged depends=" From 53280efc8788d3855ce41cb414afa6dd681e6111 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 09:59:14 -0400 Subject: [PATCH 469/738] backports/electron: upgrade to 33.0.2 --- backports/electron/APKBUILD | 153 +++++----- backports/electron/compiler.patch | 23 +- .../electron/disable-failing-tests.patch | 18 -- .../{icon.patch => electron_icon.patch} | 0 ...patch => electron_python-jinja-3.10.patch} | 0 .../electron_system-zlib-headers.patch | 10 + ...ode.patch => electron_unbundle-node.patch} | 13 +- ...hash.patch => electron_webpack-hash.patch} | 0 .../fix-missing-cstdint-include-musl.patch | 13 - backports/electron/import-version.patch | 15 - backports/electron/libstdc++13.patch | 269 ------------------ backports/electron/mman.patch | 13 - backports/electron/musl-sandbox.patch | 10 +- backports/electron/no-execinfo.patch | 14 +- backports/electron/no-mallinfo.patch | 18 +- .../electron/partalloc-no-tagging-arm64.patch | 11 + backports/electron/perfetto-libstdc++.patch | 20 -- backports/electron/pvalloc.patch | 14 +- backports/electron/quiche-array.patch | 12 - backports/electron/random-fixes.patch | 94 ------ backports/electron/system-zstd.patch | 46 --- 21 files changed, 142 insertions(+), 624 deletions(-) rename backports/electron/{icon.patch => electron_icon.patch} (100%) rename backports/electron/{python-jinja-3.10.patch => electron_python-jinja-3.10.patch} (100%) create mode 100644 backports/electron/electron_system-zlib-headers.patch rename backports/electron/{unbundle-node.patch => electron_unbundle-node.patch} (78%) rename backports/electron/{webpack-hash.patch => electron_webpack-hash.patch} (100%) delete mode 100644 backports/electron/fix-missing-cstdint-include-musl.patch delete mode 100644 backports/electron/import-version.patch delete mode 100644 backports/electron/libstdc++13.patch delete mode 100644 backports/electron/mman.patch delete mode 100644 backports/electron/perfetto-libstdc++.patch delete mode 100644 backports/electron/quiche-array.patch delete mode 100644 backports/electron/random-fixes.patch delete mode 100644 backports/electron/system-zstd.patch diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index a35cba1..12d58f4 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,16 +1,18 @@ -# Maintainer: lauren n. liberda +# Contributor: lauren n. liberda +# Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=30.0.9 -_semver="${pkgver/_beta/-beta.}" +pkgver=33.0.2 +_gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=124.0.6367.233 -_copium_tag=124.5 +_chromium=130.0.6723.59 +_copium_tag=129.1 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" +_llvmver=19 makedepends=" ada-dev alsa-lib-dev @@ -22,7 +24,7 @@ makedepends=" bzip2-dev c-ares-dev cairo-dev - clang-dev + clang$_llvmver-dev clang-extra-tools compiler-rt crc32c-dev @@ -44,12 +46,12 @@ makedepends=" gzip harfbuzz-dev hdrhistogram-c-dev - highway-dev hunspell-dev http-parser-dev hwdata-dev java-jdk jpeg-dev + jsoncpp-dev krb5-dev lcms2-dev libarchive-tools @@ -75,7 +77,7 @@ makedepends=" libxslt-dev linux-headers lld - llvm + llvm$_llvmver mesa-dev minizip-dev nghttp2-dev @@ -95,11 +97,16 @@ makedepends=" py3-six python3 qt5-qtbase-dev + re2-dev rsync rust + rust-bindgen samurai + snappy-dev speex-dev + spirv-tools-dev sqlite-dev + woff2-dev xcb-proto yarn zlib-dev @@ -107,21 +114,18 @@ makedepends=" " subpackages="$pkgname-lang $pkgname-dev" # the lower patches are specific to electron, the top ones are from the equivalent chromium version -source="https://ab-sn.lnl.gay/electron-$_semver-$_chromium.tar.zst +source=" + https://ayakael.net/api/packages/mirrors/generic/electron/$_gittag/electron-$_gittag-$_chromium.tar.zst copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz chromium-revert-drop-of-system-java.patch compiler.patch disable-dns_config_service.patch disable-failing-tests.patch fc-cache-version.patch - fix-missing-cstdint-include-musl.patch fix-opus.patch fstatat-32bit.patch gdbinit.patch generic-sensor-include.patch - import-version.patch - libstdc++13.patch - mman.patch musl-auxv.patch musl-sandbox.patch musl-tid-caching.patch @@ -131,18 +135,15 @@ source="https://ab-sn.lnl.gay/electron-$_semver-$_chromium.tar.zst no-res-ninit-nclose.patch no-sandbox-settls.patch partalloc-no-tagging-arm64.patch - perfetto-libstdc++.patch pvalloc.patch - random-fixes.patch - quiche-array.patch - system-zstd.patch temp-failure-retry.patch yes-musl.patch - icon.patch - python-jinja-3.10.patch - webpack-hash.patch - unbundle-node.patch + electron_icon.patch + electron_python-jinja-3.10.patch + electron_webpack-hash.patch + electron_unbundle-node.patch + electron_system-zlib-headers.patch default.conf electron.desktop @@ -150,21 +151,23 @@ source="https://ab-sn.lnl.gay/electron-$_semver-$_chromium.tar.zst " _copium_patches=" cr124-iwyu-sys-select-dawn-terminal.patch - cr124-libwebp-shim-sharpyuv.patch + cr126-aarch64-musl-unsupported-relocation.patch + cr129-ffmpeg-no-noh264parse.patch + cr129-musl-metricts-imports.patch " # tests are todo for some base checks options="!check net suid" -builddir="$srcdir/electron-$_semver-$_chromium" +builddir="$srcdir/electron-$_gittag-$_chromium" export PATH="$PATH:/usr/lib/qt5/bin" -export CC=clang -export CXX=clang++ +export CC=clang-$_llvmver +export CXX=clang++-$_llvmver # required to find the tools export AR=llvm-ar export NM=llvm-nm -export LD=clang++ +export LD=clang++-$_llvmver # less log spam, reproducible export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes" @@ -188,6 +191,7 @@ snapshot() { # vpython3 execs system python3 with this set export VPYTHON_BYPASS="manually managed python not supported by chrome operations" export CHROMIUM_BUILDTOOLS_PATH="$srcdir/src/buildtools" + export DEPOT_TOOLS_UPDATE=0 mkdir -p "$srcdir" cd "$srcdir" @@ -205,7 +209,7 @@ snapshot() { echo "solutions = [ { \"name\": \"src/electron\", - \"url\": \"https://github.com/electron/electron.git@v$_semver\", + \"url\": \"https://github.com/electron/electron.git@$_gittag\", \"deps_file\": \"DEPS\", \"managed\": False, \"custom_deps\": { @@ -220,8 +224,7 @@ snapshot() { --nohooks python3 src/build/landmines.py - python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE - python3 src/build/util/lastchange.py -s src/third_party/dawn \ + python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE \ --revision src/gpu/webgpu/DAWN_VERSION python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \ --revision-id-only --header src/gpu/config/gpu_lists_version.h @@ -234,26 +237,27 @@ snapshot() { python3 src/electron/script/apply_all_patches.py \ src/electron/patches/config.json - mv src $pkgname-$_semver-$_chromium + mv src $pkgname-$_gittag-$_chromium # extra binaries are most likely things we don't want, so nuke them all - for elf in $(scanelf -RA -F "%F" $pkgname-$_semver-$_chromium); do + for elf in $(scanelf -RA -F "%F" $pkgname-$_gittag-$_chromium); do rm -f "$elf" done msg "generating tarball.. (this takes a while)" - tar -cf $pkgname-$_semver-$_chromium.tar \ + tar -cf $pkgname-$_gittag-$_chromium.tar \ --exclude="ChangeLog*" \ --exclude="testdata/*" \ --exclude="test_data/*" \ --exclude="android_rust_toolchain/*" \ + --exclude="third_party/instrumented_libs/binaries" \ --exclude-backups \ --exclude-caches-all \ --exclude-vcs \ - $pkgname-$_semver-$_chromium + $pkgname-$_gittag-$_chromium - zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_semver-$_chromium.tar -o "$SRCDEST"/$pkgname-$_semver-$_chromium.tar.zst - mcli cp "$SRCDEST"/$pkgname-$_semver-$_chromium.tar.zst "$_distbucket" + zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv $pkgname-$_gittag-$_chromium.tar -o "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst + mcli cp "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst "$_distbucket" } prepare() { @@ -267,7 +271,7 @@ prepare() { ;; esac done - if [ ! -z "$failed" ]; then + if [ -n "$failed" ]; then error "The following patches failed to apply:" for i in $failed; do printf " %s\n" "$i" >&2 @@ -291,9 +295,9 @@ prepare() { git config commit.gpgsign false git add LICENSE git commit -m "init" - git tag "v$_semver" + git tag "$_gittag" git pack-refs - yarn install --frozen-lockfile --no-scripts + yarn install --frozen-lockfile --ignore-scripts ) ( @@ -303,10 +307,11 @@ prepare() { # reusable system library settings # flatbuffers - tensorflow has a few static_asserts for a specific patch version + # highway - requires highway>=1.1.0 (arm failures) # libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9 # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 - # jsoncpp, re2, snappy, swiftshader, vulkan, woff2 - needs use_custom_libcxx=false + # jsoncpp, re2, snappy, swiftshader-*, woff2 - requires use_custom_libcxx=false local chromium_use_system=" brotli crc32c @@ -317,7 +322,6 @@ prepare() { fontconfig freetype harfbuzz-ng - highway icu libdrm libevent @@ -333,8 +337,9 @@ prepare() { zstd " - for _lib in $chromium_use_system jinja2 libjpeg_turbo; do + for _lib in $chromium_use_system jinja2 libjpeg_turbo unrar; do msg "Removing buildscripts for system provided $_lib" + _lib="${_lib/swiftshader-/swiftshader/third_party/}" find . -type f -path "*third_party/$_lib/*" \ \! -path "*third_party/$_lib/chromium/*" \ \! -path "*third_party/$_lib/google/*" \ @@ -387,6 +392,12 @@ prepare() { $chromium_use_system python3 third_party/libaddressinput/chromium/tools/update-strings.py + # flatc is used in build workflows since https://crrev.com/c/5595037, + # but the pre-generated files are still checked-in. remove to make sure + # they're not used. (if used, they will break builds on version mismatch.) + # https://github.com/tensorflow/tensorflow/issues/62298 + # find third_party/tflite/ -name '*_generated.h' -delete + # prevent annoying errors when regenerating gni sed -i 's,^update_readme$,#update_readme,' \ third_party/libvpx/generate_gni.sh @@ -399,8 +410,7 @@ prepare() { sed -i -e 's/\/malloc/' -e 's/\/free/' \ third_party/blink/renderer/core/xml/*.cc \ third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ - third_party/libxml/chromium/*.cc \ - third_party/maldoca/src/maldoca/ole/oss_utils.h + third_party/libxml/chromium/*.cc _configure } @@ -409,8 +419,6 @@ _configure() { cd "$builddir" msg "Configuring build" - local clang_ver="$(clang -dumpversion)" - case "$USE_CCACHE" in 1) local cc_wrapper="ccache" @@ -433,7 +441,7 @@ _configure() { chrome_pgo_phase=0 clang_base_path=\"/usr\" clang_use_chrome_plugins=false - clang_version=\"${clang_ver%%.*}\" + clang_version=\"$_llvmver\" custom_toolchain=\"//build/toolchain/linux/unbundle:default\" disable_fieldtrial_testing_config=true enable_hangout_services_extension=true @@ -453,11 +461,12 @@ _configure() { is_official_build=true link_pulseaudio=true proprietary_codecs=true - regenerate_x11_protos=true rtc_link_pipewire=true rtc_use_pipewire=true rustc_version=\"yes\" + rust_bindgen_root=\"/usr\" rust_sysroot_absolute=\"/usr\" + safe_browsing_use_unrar=false symbol_level=$symbol_level treat_warnings_as_errors=false use_custom_libcxx=true @@ -490,15 +499,12 @@ _configure() { build() { export PATH="$PATH:/usr/lib/qt5/bin" - # ~1 GB per concurrent job is not enough with gcc - _njobs="${NJOBS:-"$(python3 -c 'import os; print(max((os.cpu_count() - (10 if os.uname().machine == "aarch64" else 8), 1)))')"}" - - ninja -C out/Release -j$_njobs \ + ninja -C out/Release \ + copy_node_headers \ electron_dist_zip \ node_gypi_headers \ node_version_header - cp -vf out/Release/gen/node_headers/include/node/config.gypi third_party/electron_node/config.gypi } package() { @@ -512,13 +518,7 @@ package() { install -Dm755 "$srcdir"/default.conf "$pkgdir"/etc/electron/default.conf mkdir -p "$pkgdir"/usr/include/electron - - ( - cd third_party/electron_node/ - HEADERS_ONLY=1 python3 ./tools/install.py install "$pkgdir" "/usr/include/electron/node_headers" - ) - # required overrides - install -Dm644 out/Release/gen/node_headers/include/node/* -t "$pkgdir"/usr/include/electron/node_headers/include/node + cp -rv "$builddir"/out/Release/gen/node_headers "$pkgdir"/usr/include/electron ln -sv /usr/include/electron/node_headers/include/node "$pkgdir"/usr/include/electron/node mkdir -p "$pkgdir"/usr/include/electron/node_headers/include/nan @@ -544,41 +544,34 @@ lang() { } sha512sums=" -97024407a16fb41ec56fcc6df5552165ce4eea34fc51b17ecbf30a7e35406baccf8a3001a795a06d1e92d32e134d9d7a18d59fa74eda1b1bc23b59bc4947929b electron-30.0.9-124.0.6367.233.tar.zst -13c647dc2024e27ae8a4d7e8f1202037a342f4a7054477226665c332029e1b6f1d8b99004c2b2809bcf1e6c19b1359ef5e1c971552d7ced59c5b43d5a836af88 copium-124.5.tar.gz +6523db0feb88a742a8c7228481ae25ed9ea4eaf1cbab84d9a91212bf3590f1b87fd244bc6583e90e78ab15e4be28cc70ddaa270d582c68eaa131e3be455c58fe electron-v33.0.2-130.0.6723.59.tar.zst +6138b3dbf3903c78f4ca1ed5a6c3c3c485471ded31976010484ce8893d03953df2b8f066a4fe84bbde5ae7ef9bbff664ef917e247b2e95dd471de40f2774d7d0 copium-129.1.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch -54eb147c0af2ba096d1df375a289b339ee855ab1a9114e7c747753f0274a6bafb7212c1859b7885454c4529d9a5e3bd9559fc14e8e006f23ccd381895fa68d15 compiler.patch +53b7cdee8f7bfb4c9371cb385c473e34ed3d8ac7efaa43c0af061107560be30d8747b07fb0b16c01079b8c770f2c721bb5a8081313b7c126856ea4078a74da2a compiler.patch 4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch -111bc22fb704d97759988268a40d6b356c51b0bd7a8119a694e905ffe21850ff64e91566cd0dd0c9d62fcb46dca8acc821436c34eb0ba78be872ee4f7ec88a7b disable-failing-tests.patch +2470904846e3adde2c9506f9e78220daca0932320b628dd3d427bf2b7c17a8f7880cb97e787b046c28de7aca642e1a8d30824d6049905976da77e7473baa64da disable-failing-tests.patch 5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch -9200f78bad70e95c648a5e8392d50642190600f655c6baa366ff6467ebad52d3b3f305dad58f3610da67136f4b723557653b174ec5c25be8d8737ee04d9ee09f fix-missing-cstdint-include-musl.patch b24563e9a738c00fce7ff2fbdee3d7c024d9125d7c74d9ab90af6bdb16f7ec8419f2c8aa78c0640f6d5d81c17dc2c673a194401d354f466749672729b48ed068 fix-opus.patch c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch 36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch -8de65109ece27ea63bd469f2220c56b8c752ba0a50fdf390082a2d5ae74b8e010199126175569f6d5084270dd4e0571e68aec32c0bca8211a6699925b3a09124 import-version.patch -c49a1b06e061faa430d66dd5b404ef6c843e4d8a6e9012e963009a161b4726f8eb92c4da8fa710f8861f6e4daa8be5f68abee41a7d9fc02f2a0eb61ce53b5fdd libstdc++13.patch -e75f57ae34c97ca1caf15fa4b4106c6c1e79c31ed66869cf92ed9ea0c449886c9511e455047c17c1e9ad8b9a46ad4948511a4f2995a4b6030fb4d1c7ae21d038 mman.patch 99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch -50c274a420bb8a7f14fcb56e40920dac8f708792a4520789b4987facea459bef88113d5a2b60fa8c57bee6e92bff3617d6b73fa305c8c44614c638971cffd440 musl-sandbox.patch +51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch 92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch -73bca6c6f9873f2f11cef04f3f41f71e0ae86e7e2d77e14db4298675fec390744c5081f6fdb14052e5ee2b5885be1198c3aa6068eb2b656d1a665c0c3f36e708 no-execinfo.patch -8e17101d69e23b456a9c03dc2fe95bcd56846389707ba6f4720192a9e9168406d20d9168dbebbb3a47d921ec92e478f0e390f46e6b9bb43a34dda217c6e6448b no-mallinfo.patch +a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch +0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch -d4ac7f350806b4410ccb1df3b0ad7e90a7b6d724a16919761aa2d47a6f21008c7374da528b05b754ee712b85d23adfb113c7f7b9ca2ed5b47644fe3ea0cb9119 partalloc-no-tagging-arm64.patch -8e1aca983890c78d81a6f888b2cf1aa42878d1f8523e87d63b800e1e468cbfd33e5ff6a0975775ca222fe82f30c6497da95505da01b091c8776a44c98ac86f0f perfetto-libstdc++.patch -2eb434b4fc6aee77026492644cd86772a543d9845f112a75cd4c3e1f25c9435cc31f8454c1c73223451fc9be69b86e822ff68821978f67f2fc8bcba50296d8e0 pvalloc.patch -803b8117c65132f76bec42054a4b2257a078b15b07fd08645fec2dfd51aa4e0075a9015300cd579d4ae0d757d9850b9988e080cfc2eea093f6684fdf82c4722c random-fixes.patch -86f612dd2b39602984a75b1b11c2ab8bc8cc6b4e78fae998570a777a6901ae45fdcdb22e46dd006dab703a0674e64c72cf8120af2dc5b9e78004f402c7e65358 quiche-array.patch -b3beb98b539fe160fbc493ba410ae0f68540cc4b6834f1f8ce9a22c3f4f59ef5d583ad48793e10549fd02a701f833a3969791ef4524322cd1e715ca5bf226bc8 system-zstd.patch +f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7bbf933e0278e5c6d578619d8643895cdc40386eebc5b975f partalloc-no-tagging-arm64.patch +03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch 914ccf649d7771f19f209ab97f99c481aebc6f66174d68e8b539f6ad4a70bc8cb0fae2df6dadbf0415958ffb3574c420fe029079dcce45f5e5add4db2e903566 yes-musl.patch -465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec icon.patch -e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 python-jinja-3.10.patch -2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 webpack-hash.patch -ebb18a0e2eba4b4606e900fa82f4b57fe91dcbdc943e17544bccb3c9a011a49b4331cdbee59629e44b80184bad4ea54ec887c0bfcd00cda8d5686060dbf365e3 unbundle-node.patch +465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch +e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch +2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch +57aa81d46b9cc931092d9d9b3cb4a9859f86c183a236bc5cca6abbaeca86b82bf1b537dd9cb3412114fa4e86087c0022ee3f7e88de974d29b309e9d1714df7a5 electron_unbundle-node.patch +1b35edcf0b41e39e20c4d64dbb978bcaab8036f2fe839930709b269c50cb1321458a15b4d0013246f9e03f58f250a1e3a57ea910db1aa0adbd602a6a11ad33b9 electron_system-zlib-headers.patch e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop 5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh diff --git a/backports/electron/compiler.patch b/backports/electron/compiler.patch index fedc978..cce8a23 100644 --- a/backports/electron/compiler.patch +++ b/backports/electron/compiler.patch @@ -1,12 +1,12 @@ --- ./build/config/compiler/BUILD.gn.orig +++ ./build/config/compiler/BUILD.gn -@@ -613,24 +613,6 @@ +@@ -568,24 +568,6 @@ } } -- # TODO(crbug.com/1488374): This causes binary size growth and potentially +- # TODO(crbug.com/40283598): This causes binary size growth and potentially - # other problems. -- # TODO(crbug.com/1491036): This isn't supported by Cronet's mainline llvm version. +- # TODO(crbug.com/40284925): This isn't supported by Cronet's mainline llvm version. - if (default_toolchain != "//build/toolchain/cros:target" && - !llvm_android_mainline) { - cflags += [ @@ -22,10 +22,10 @@ - } - } - - # TODO(crbug.com/1235145): Investigate why/if this should be needed. + # TODO(crbug.com/40192287): Investigate why/if this should be needed. if (is_win) { cflags += [ "/clang:-ffp-contract=off" ] -@@ -1005,17 +987,6 @@ +@@ -998,17 +980,6 @@ # `-nodefaultlibs` from the linker invocation from Rust, which would be used # to compile dylibs on Android, such as for constructing unit test APKs. "-Cdefault-linker-libraries", @@ -43,7 +43,7 @@ ] if (!is_win || force_rustc_color_output) { -@@ -1182,8 +1153,8 @@ +@@ -1175,8 +1146,8 @@ } else if (current_cpu == "arm") { if (is_clang && !is_android && !is_nacl && !(is_chromeos_lacros && is_chromeos_device)) { @@ -54,7 +54,7 @@ } if (!is_nacl) { cflags += [ -@@ -1197,8 +1168,8 @@ +@@ -1190,8 +1161,8 @@ } else if (current_cpu == "arm64") { if (is_clang && !is_android && !is_nacl && !is_fuchsia && !(is_chromeos_lacros && is_chromeos_device)) { @@ -65,7 +65,7 @@ } } else if (current_cpu == "mipsel" && !is_nacl) { ldflags += [ "-Wl,--hash-style=sysv" ] -@@ -1983,7 +1954,7 @@ +@@ -1982,7 +1953,7 @@ defines = [ "_HAS_NODISCARD" ] } } else { @@ -76,7 +76,7 @@ cflags += [ "-Wextra" ] --- ./build/config/rust.gni.orig +++ ./build/config/rust.gni -@@ -186,11 +186,11 @@ +@@ -185,11 +185,11 @@ rust_abi_target = "" if (is_linux || is_chromeos) { if (current_cpu == "arm64") { @@ -91,7 +91,7 @@ } else if (current_cpu == "arm") { if (arm_float_abi == "hard") { float_suffix = "hf" -@@ -199,13 +199,13 @@ +@@ -198,15 +198,15 @@ } if (arm_arch == "armv7-a" || arm_arch == "armv7") { # No way to inform Rust about the -a suffix. @@ -101,6 +101,9 @@ - rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix + rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix } + } else if (current_cpu == "riscv64") { +- rust_abi_target = "riscv64gc-unknown-linux-gnu" ++ rust_abi_target = "riscv64-alpine-linux-musl" } else { # Best guess for other future platforms. - rust_abi_target = current_cpu + "-unknown-linux-gnu" diff --git a/backports/electron/disable-failing-tests.patch b/backports/electron/disable-failing-tests.patch index 2ee8f2b..84d0027 100644 --- a/backports/electron/disable-failing-tests.patch +++ b/backports/electron/disable-failing-tests.patch @@ -160,24 +160,6 @@ ProcessAlternativeServicesTest.Process*: crashed ? TEST_F(FileUtilTest, FILEToFile) { ScopedFILE stream; ---- a/base/debug/stack_trace_unittest.cc -+++ b/base/debug/stack_trace_unittest.cc -@@ -345,6 +345,7 @@ - // sometimes we read fp / pc from the place that previously held - // uninitialized value. - // TODO(crbug.com/1132511): Enable this test on Fuchsia. -+#if 0 - #if defined(MEMORY_SANITIZER) || BUILDFLAG(IS_FUCHSIA) - #define MAYBE_TraceStackFramePointersFromBuffer \ - DISABLED_TraceStackFramePointersFromBuffer -@@ -357,6 +358,7 @@ - const void* frames[kDepth]; - ExpectStackFramePointers(frames, kDepth, /*copy_stack=*/true); - } -+#endif - - #if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_APPLE) - #define MAYBE_StackEnd StackEnd --- a/base/threading/platform_thread_unittest.cc +++ b/base/threading/platform_thread_unittest.cc @@ -416,6 +416,7 @@ diff --git a/backports/electron/icon.patch b/backports/electron/electron_icon.patch similarity index 100% rename from backports/electron/icon.patch rename to backports/electron/electron_icon.patch diff --git a/backports/electron/python-jinja-3.10.patch b/backports/electron/electron_python-jinja-3.10.patch similarity index 100% rename from backports/electron/python-jinja-3.10.patch rename to backports/electron/electron_python-jinja-3.10.patch diff --git a/backports/electron/electron_system-zlib-headers.patch b/backports/electron/electron_system-zlib-headers.patch new file mode 100644 index 0000000..0dc5c8e --- /dev/null +++ b/backports/electron/electron_system-zlib-headers.patch @@ -0,0 +1,10 @@ +--- ./electron/BUILD.gn.orig ++++ ./electron/BUILD.gn +@@ -1565,7 +1565,6 @@ + public_deps = header_groups + [ + ":node_gypi_headers", + ":node_version_header", +- ":zlib_headers", + ] + } + diff --git a/backports/electron/unbundle-node.patch b/backports/electron/electron_unbundle-node.patch similarity index 78% rename from backports/electron/unbundle-node.patch rename to backports/electron/electron_unbundle-node.patch index 08122af..d69f5ae 100644 --- a/backports/electron/unbundle-node.patch +++ b/backports/electron/electron_unbundle-node.patch @@ -52,9 +52,11 @@ if (use_system_cares) { configs += [ ":cares" ] } else { ---- ./electron/script/generate-config-gypi.py.orig -+++ ./electron/script/generate-config-gypi.py -@@ -62,6 +62,11 @@ +diff --git a/./electron/script/generate-config-gypi.py.orig b/./electron/script/generate-config-gypi.py +index b41cd7eb450..bc4098debb5 100755 +--- a/./electron/script/generate-config-gypi.py.orig ++++ b/./electron/script/generate-config-gypi.py +@@ -62,6 +62,11 @@ def main(target_file, target_cpu): # Used by certain versions of node-gyp. v['build_v8_with_gn'] = 'false' @@ -63,6 +65,5 @@ + if v.get(f'node_shared_{dep}') is not None: + v[f'node_shared_{dep}'] = 'true' + - with open(target_file, 'w+') as f: - f.write(pprint.pformat(config, indent=2)) - + with open(target_file, 'w+', encoding='utf-8') as file_out: + file_out.write(pprint.pformat(config, indent=2)) diff --git a/backports/electron/webpack-hash.patch b/backports/electron/electron_webpack-hash.patch similarity index 100% rename from backports/electron/webpack-hash.patch rename to backports/electron/electron_webpack-hash.patch diff --git a/backports/electron/fix-missing-cstdint-include-musl.patch b/backports/electron/fix-missing-cstdint-include-musl.patch deleted file mode 100644 index 00f16af..0000000 --- a/backports/electron/fix-missing-cstdint-include-musl.patch +++ /dev/null @@ -1,13 +0,0 @@ -Patch-Source: https://github.com/void-linux/void-packages/blob/378db3cf5087877588aebaaa8ca3c9d94dfb54e0/srcpkgs/chromium/patches/fix-missing-cstdint-include-musl.patch -fixed in https://github.com/google/quiche/commit/4d4820f0a959be7fa22285d114a5b5b8676f10fe --- ---- a/net/third_party/quiche/src/quiche/http2/adapter/window_manager.h -+++ b/net/third_party/quiche/src/quiche/http2/adapter/window_manager.h -@@ -3,6 +3,7 @@ - - #include - -+#include - #include - - #include "common/platform/api/quiche_export.h" diff --git a/backports/electron/import-version.patch b/backports/electron/import-version.patch deleted file mode 100644 index d275038..0000000 --- a/backports/electron/import-version.patch +++ /dev/null @@ -1,15 +0,0 @@ -they fixed the import to be glibc conditional, but now nothing is imported so -all the string functions are missing. --- ---- a/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc -+++ b/chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.cc -@@ -61,8 +61,7 @@ - - // TODO(crbug.com/1052397): Revisit the macro expression once build flag switch - // of lacros-chrome is complete. --#if defined(__GLIBC__) && (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)) --#include -+#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) - - #include "base/linux_util.h" - #include "base/strings/string_split.h" diff --git a/backports/electron/libstdc++13.patch b/backports/electron/libstdc++13.patch deleted file mode 100644 index c49f7e8..0000000 --- a/backports/electron/libstdc++13.patch +++ /dev/null @@ -1,269 +0,0 @@ -missing libstdc++13 includes --- ---- a/third_party/openscreen/src/platform/base/error.h -+++ b/third_party/openscreen/src/platform/base/error.h -@@ -6,6 +6,7 @@ - #define PLATFORM_BASE_ERROR_H_ - - #include -+#include - #include - #include - #include ---- a/ui/base/prediction/kalman_filter.h -+++ b/ui/base/prediction/kalman_filter.h -@@ -8,6 +8,8 @@ - #include "base/component_export.h" - #include "ui/gfx/geometry/matrix3_f.h" - -+#include -+ - namespace ui { - - // This Kalman filter is used to predict state in one axles. ---- a/ui/events/types/scroll_types.h -+++ b/ui/events/types/scroll_types.h -@@ -5,6 +5,8 @@ - #ifndef UI_EVENTS_TYPES_SCROLL_TYPES_H_ - #define UI_EVENTS_TYPES_SCROLL_TYPES_H_ - -+#include -+ - namespace ui { - - enum class ScrollGranularity : uint8_t { ---- a/third_party/webrtc/rtc_base/system/file_wrapper.h -+++ b/third_party/webrtc/rtc_base/system/file_wrapper.h -@@ -14,6 +14,7 @@ - #include - #include - -+#include - #include - - #include "absl/strings/string_view.h" ---- a/third_party/pdfium/constants/annotation_flags.h -+++ b/third_party/pdfium/constants/annotation_flags.h -@@ -5,6 +5,8 @@ - #ifndef CONSTANTS_ANNOTATION_FLAGS_H_ - #define CONSTANTS_ANNOTATION_FLAGS_H_ - -+#include -+ - namespace pdfium { - namespace annotation_flags { - ---- a/third_party/s2cellid/src/s2/util/math/mathutil.h -+++ b/third_party/s2cellid/src/s2/util/math/mathutil.h -@@ -21,6 +21,7 @@ - #ifndef S2_UTIL_MATH_MATHUTIL_H_ - #define S2_UTIL_MATH_MATHUTIL_H_ - -+#include - #include - - class MathUtil { ---- a/third_party/s2cellid/src/s2/s1angle.h -+++ b/third_party/s2cellid/src/s2/s1angle.h -@@ -24,6 +24,7 @@ - #define S2_S1ANGLE_H_ - - #include -+#include - #include - #include - #include ---- a/third_party/maldoca/src/maldoca/ole/header.h -+++ b/third_party/maldoca/src/maldoca/ole/header.h -@@ -45,6 +45,8 @@ - - #include "absl/strings/string_view.h" - -+#include -+ - namespace maldoca { - - class OLEHeader { ---- a/components/password_manager/core/browser/generation/password_generator.h -+++ b/components/password_manager/core/browser/generation/password_generator.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_ - #define COMPONENTS_PASSWORD_MANAGER_CORE_BROWSER_GENERATION_PASSWORD_GENERATOR_H_ - -+#include - #include - - ---- a/base/debug/profiler.h -+++ b/base/debug/profiler.h -@@ -7,6 +7,7 @@ - - #include - -+#include - #include - - #include "base/base_export.h" ---- a/components/dom_distiller/core/url_utils.h -+++ b/components/dom_distiller/core/url_utils.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_ - #define COMPONENTS_DOM_DISTILLER_CORE_URL_UTILS_H_ - -+#include - #include - - #include "base/strings/string_piece_forward.h" ---- a/components/feature_engagement/internal/event_storage_validator.h -+++ b/components/feature_engagement/internal/event_storage_validator.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_ - #define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_EVENT_STORAGE_VALIDATOR_H_ - -+#include - #include - - namespace feature_engagement { ---- a/chrome/test/chromedriver/chrome/web_view_impl.cc -+++ b/chrome/test/chromedriver/chrome/web_view_impl.cc -@@ -8,6 +8,7 @@ - #include - #include - #include -+#include - #include - #include - ---- a/cc/trees/target_property.cc -+++ b/cc/trees/target_property.cc -@@ -2,6 +2,8 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - -+#include -+ - #include "cc/trees/target_property.h" - - #include "ui/gfx/animation/keyframe/target_property.h" ---- a/gpu/config/gpu_feature_info.h -+++ b/gpu/config/gpu_feature_info.h -@@ -5,6 +5,7 @@ - #ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_ - #define GPU_CONFIG_GPU_FEATURE_INFO_H_ - -+#include - #include - #include - ---- a/gpu/config/gpu_driver_bug_workarounds.h -+++ b/gpu/config/gpu_driver_bug_workarounds.h -@@ -5,6 +5,7 @@ - #ifndef GPU_CONFIG_GPU_DRIVER_BUG_WORKAROUNDS_H_ - #define GPU_CONFIG_GPU_DRIVER_BUG_WORKAROUNDS_H_ - -+#include - #include - - #include "build/build_config.h" ---- a/third_party/blink/public/common/page_state/page_state.h -+++ b/third_party/blink/public/common/page_state/page_state.h -@@ -5,6 +5,7 @@ - #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_PAGE_STATE_PAGE_STATE_H_ - #define THIRD_PARTY_BLINK_PUBLIC_COMMON_PAGE_STATE_PAGE_STATE_H_ - -+#include - #include - #include - ---- a/pdf/document_attachment_info.h -+++ b/pdf/document_attachment_info.h -@@ -5,6 +5,7 @@ - #ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_ - #define PDF_DOCUMENT_ATTACHMENT_INFO_H_ - -+#include - #include - - ---- a/components/payments/content/utility/fingerprint_parser.h -+++ b/components/payments/content/utility/fingerprint_parser.h -@@ -7,6 +7,7 @@ - - #include - -+#include - #include - #include - ---- a/media/base/video_transformation.h -+++ b/media/base/video_transformation.h -@@ -5,6 +5,7 @@ - #ifndef MEDIA_BASE_VIDEO_TRANSFORMATION_H_ - #define MEDIA_BASE_VIDEO_TRANSFORMATION_H_ - -+#include - #include - - #include "base/numerics/math_constants.h" ---- a/components/omnibox/browser/on_device_head_model.h -+++ b/components/omnibox/browser/on_device_head_model.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_ - #define COMPONENTS_OMNIBOX_BROWSER_ON_DEVICE_HEAD_MODEL_H_ - -+#include - #include - #include - #include ---- a/components/autofill/core/browser/autofill_ablation_study.h -+++ b/components/autofill/core/browser/autofill_ablation_study.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_ - #define COMPONENTS_AUTOFILL_CORE_BROWSER_AUTOFILL_ABLATION_STUDY_H_ - -+#include - #include - - class GURL; ---- a/components/autofill/core/browser/strike_databases/strike_database_base.h -+++ b/components/autofill/core/browser/strike_databases/strike_database_base.h -@@ -5,6 +5,7 @@ - #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_ - #define COMPONENTS_AUTOFILL_CORE_BROWSER_STRIKE_DATABASES_STRIKE_DATABASE_BASE_H_ - -+#include - #include - #include - #include ---- a/chrome/browser/resource_coordinator/decision_details.h -+++ b/chrome/browser/resource_coordinator/decision_details.h -@@ -5,6 +5,7 @@ - #ifndef CHROME_BROWSER_RESOURCE_COORDINATOR_DECISION_DETAILS_H_ - #define CHROME_BROWSER_RESOURCE_COORDINATOR_DECISION_DETAILS_H_ - -+#include - #include - #include - ---- a/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_stream_sender_delegate.h -+++ b/net/third_party/quiche/src/quiche/quic/core/qpack/qpack_stream_sender_delegate.h -@@ -8,6 +8,8 @@ - #include "absl/strings/string_view.h" - #include "quiche/quic/platform/api/quic_export.h" - -+#include -+ - namespace quic { - - // This interface writes encoder/decoder data to peer. ---- a/third_party/perfetto/include/perfetto/base/export.h -+++ b/third_party/perfetto/include/perfetto/base/export.h -@@ -17,6 +17,8 @@ - #ifndef INCLUDE_PERFETTO_BASE_EXPORT_H_ - #define INCLUDE_PERFETTO_BASE_EXPORT_H_ - -+#include -+ - #include "perfetto/base/build_config.h" - #include "perfetto/public/abi/export.h" - diff --git a/backports/electron/mman.patch b/backports/electron/mman.patch deleted file mode 100644 index d15605a..0000000 --- a/backports/electron/mman.patch +++ /dev/null @@ -1,13 +0,0 @@ -needed for PKEY_DISABLE_WRITE. these are documented as also being from sys/ -mman.h with GNU_SOURCE, but musl doesn't do that, so these are strictly from -kernel headers ---- a/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc -+++ b/base/allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc -@@ -60,6 +60,7 @@ - #include - #include - #include -+#include - #endif // BUILDFLAG(IS_POSIX) - - #if BUILDFLAG(ENABLE_PARTITION_ALLOC_AS_MALLOC_SUPPORT) && BUILDFLAG(IS_MAC) diff --git a/backports/electron/musl-sandbox.patch b/backports/electron/musl-sandbox.patch index 52c3b21..ccd9423 100644 --- a/backports/electron/musl-sandbox.patch +++ b/backports/electron/musl-sandbox.patch @@ -45,7 +45,7 @@ diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc ./sandbox/linux/s index d9d1882..0567557 100644 --- a/sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc +++ ./sandbox/linux/seccomp-bpf-helpers/syscall_sets.cc -@@ -392,6 +392,7 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { +@@ -438,6 +438,7 @@ #if defined(__i386__) case __NR_waitpid: #endif @@ -53,7 +53,7 @@ index d9d1882..0567557 100644 return true; case __NR_clone: // Should be parameter-restricted. case __NR_setns: // Privileged. -@@ -404,7 +405,6 @@ bool SyscallSets::IsAllowedProcessStartOrDeath(int sysno) { +@@ -450,7 +451,6 @@ #if defined(__i386__) || defined(__x86_64__) || defined(__mips__) case __NR_set_thread_area: #endif @@ -61,16 +61,16 @@ index d9d1882..0567557 100644 case __NR_unshare: #if !defined(__mips__) && !defined(__aarch64__) case __NR_vfork: -@@ -514,6 +514,8 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { - case __NR_mlock: +@@ -549,6 +549,8 @@ case __NR_munlock: case __NR_munmap: + case __NR_mseal: + case __NR_mremap: + case __NR_membarrier: return true; case __NR_madvise: case __NR_mincore: -@@ -531,7 +533,6 @@ bool SyscallSets::IsAllowedAddressSpaceAccess(int sysno) { +@@ -566,7 +568,6 @@ case __NR_modify_ldt: #endif case __NR_mprotect: diff --git a/backports/electron/no-execinfo.patch b/backports/electron/no-execinfo.patch index b1705f5..12064ba 100644 --- a/backports/electron/no-execinfo.patch +++ b/backports/electron/no-execinfo.patch @@ -37,16 +37,16 @@ for discussion about this, see https://www.openwall.com/lists/musl/2021/07/16/1 #define HAVE_FCNTL_H 1 --- a/base/debug/stack_trace.cc +++ b/base/debug/stack_trace.cc -@@ -291,7 +291,7 @@ - } - std::string StackTrace::ToStringWithPrefix(const char* prefix_string) const { +@@ -311,7 +311,7 @@ + + std::string StackTrace::ToStringWithPrefix(cstring_view prefix_string) const { std::stringstream stream; -#if !defined(__UCLIBC__) && !defined(_AIX) +#if defined(__GLIBC__) && !defined(_AIX) - if (ShouldSuppressOutput()) { - return "Backtrace suppressed."; - } -@@ -301,7 +301,7 @@ + OutputToStreamWithPrefix(&stream, prefix_string); + #endif + return stream.str(); +@@ -335,7 +335,7 @@ } std::ostream& operator<<(std::ostream& os, const StackTrace& s) { diff --git a/backports/electron/no-mallinfo.patch b/backports/electron/no-mallinfo.patch index 37abb3f..1f2d541 100644 --- a/backports/electron/no-mallinfo.patch +++ b/backports/electron/no-mallinfo.patch @@ -102,23 +102,23 @@ musl does not implement mallinfo()/mallinfo2() #define HAVE_MALLOC_H 1 --- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc.cc -@@ -717,7 +717,7 @@ +@@ -660,7 +660,7 @@ - #endif // !BUILDFLAG(IS_APPLE) && !BUILDFLAG(IS_ANDROID) + #endif // !PA_BUILDFLAG(IS_APPLE) && !PA_BUILDFLAG(IS_ANDROID) --#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +-#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS) +#if 0 SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW { - base::SimplePartitionStatsDumper allocator_dumper; + partition_alloc::SimplePartitionStatsDumper allocator_dumper; Allocator()->DumpStats("malloc", true, &allocator_dumper); --- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc -@@ -24,7 +24,7 @@ - #if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) +@@ -29,7 +29,7 @@ + #if PA_BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) // Platforms on which we override weak libc symbols. --#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) -+#if (BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || BUILDFLAG(IS_CHROMEOS) +-#if PA_BUILDFLAG(IS_LINUX) || PA_BUILDFLAG(IS_CHROMEOS) ++#if (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) || PA_BUILDFLAG(IS_CHROMEOS) - NOINLINE void FreeForTest(void* data) { + PA_NOINLINE void FreeForTest(void* data) { free(data); diff --git a/backports/electron/partalloc-no-tagging-arm64.patch b/backports/electron/partalloc-no-tagging-arm64.patch index e5c7525..fb33151 100644 --- a/backports/electron/partalloc-no-tagging-arm64.patch +++ b/backports/electron/partalloc-no-tagging-arm64.patch @@ -12,3 +12,14 @@ to make the partalloc support code for it work. declare_args() { # Causes all the allocations to be routed via allocator_shim.cc. Usually, +--- ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h.orig ++++ ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h +@@ -10,7 +10,7 @@ + #include "partition_alloc/build_config.h" + #include "partition_alloc/partition_alloc_buildflags.h" + +-#if PA_BUILDFLAG(IS_ANDROID) || PA_BUILDFLAG(IS_LINUX) ++#if PA_BUILDFLAG(IS_ANDROID) || (PA_BUILDFLAG(IS_LINUX) && defined(__GLIBC__)) + #define HAS_HW_CAPS + #endif + diff --git a/backports/electron/perfetto-libstdc++.patch b/backports/electron/perfetto-libstdc++.patch deleted file mode 100644 index 31ff9d9..0000000 --- a/backports/electron/perfetto-libstdc++.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/third_party/perfetto/src/trace_processor/perfetto_sql/engine/created_function.cc -+++ b/third_party/perfetto/src/trace_processor/perfetto_sql/engine/created_function.cc -@@ -107,7 +107,7 @@ - // the destructors run correctly for non-trivial members of the - // union. - using Data = -- std::variant; -+ std::variant; - - StoredSqlValue(SqlValue value) { - switch (value.type) { -@@ -132,7 +132,7 @@ - } - - SqlValue AsSqlValue() { -- if (std::holds_alternative(data)) { -+ if (std::holds_alternative(data)) { - return SqlValue(); - } else if (std::holds_alternative(data)) { - return SqlValue::Long(std::get(data)); diff --git a/backports/electron/pvalloc.patch b/backports/electron/pvalloc.patch index 1d874d6..145e05b 100644 --- a/backports/electron/pvalloc.patch +++ b/backports/electron/pvalloc.patch @@ -2,24 +2,24 @@ the pvalloc/valloc symbols are obsolete and not implemented in musl -- --- a/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc +++ b/base/allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc -@@ -375,7 +375,7 @@ +@@ -410,7 +410,7 @@ ASSERT_GE(aligned_allocs_intercepted_by_alignment[128], 1u); ASSERT_GE(aligned_allocs_intercepted_by_size[53], 1u); --#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) -+#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) && defined(__GLIBC__) +-#if PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID) ++#if (PA_BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !PA_BUILDFLAG(IS_ANDROID) void* pvalloc_ptr = pvalloc(67); ASSERT_NE(nullptr, pvalloc_ptr); ASSERT_EQ(0u, reinterpret_cast(pvalloc_ptr) % kPageSize); -@@ -414,7 +414,7 @@ +@@ -449,7 +449,7 @@ free(memalign_ptr); ASSERT_GE(frees_intercepted_by_addr[Hash(memalign_ptr)], 1u); --#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) -+#if BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) && defined(__GLIBC__) +-#if PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID) ++#if (PA_BUILDFLAG(IS_POSIX) && defined(__GLIBC__)) && !PA_BUILDFLAG(IS_ANDROID) free(pvalloc_ptr); ASSERT_GE(frees_intercepted_by_addr[Hash(pvalloc_ptr)], 1u); - #endif // BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_ANDROID) + #endif // PA_BUILDFLAG(IS_POSIX) && !PA_BUILDFLAG(IS_ANDROID) --- a/base/process/memory_unittest.cc +++ b/base/process/memory_unittest.cc @@ -359,7 +359,7 @@ diff --git a/backports/electron/quiche-array.patch b/backports/electron/quiche-array.patch deleted file mode 100644 index d016b38..0000000 --- a/backports/electron/quiche-array.patch +++ /dev/null @@ -1,12 +0,0 @@ -needed for push_back on array --- ---- a/net/third_party/quiche/src/quiche/common/quiche_endian.h -+++ b/net/third_party/quiche/src/quiche/common/quiche_endian.h -@@ -6,6 +6,7 @@ - #define QUICHE_COMMON_QUICHE_ENDIAN_H_ - - #include -+#include - #include - #include - diff --git a/backports/electron/random-fixes.patch b/backports/electron/random-fixes.patch deleted file mode 100644 index 5bfdef5..0000000 --- a/backports/electron/random-fixes.patch +++ /dev/null @@ -1,94 +0,0 @@ -Patch-Source: https://gitlab.archlinux.org/archlinux/packaging/packages/chromium/-/blob/c073b0c20935d7eb452732e0f3b2860a96c3db21/random-build-fixes.patch --- -diff --git a/chrome/browser/download/bubble/download_bubble_update_service.cc b/chrome/browser/download/bubble/download_bubble_update_service.cc -index 41b647f7b44..8940c6bb7fc 100644 ---- a/chrome/browser/download/bubble/download_bubble_update_service.cc -+++ b/chrome/browser/download/bubble/download_bubble_update_service.cc -@@ -91,7 +91,7 @@ ItemSortKey GetSortKey(const Item& item) { - // Helper to get an iterator to the last element in the cache. The cache - // must not be empty. - template --SortedItems::const_iterator GetLastIter(const SortedItems& cache) { -+typename SortedItems::const_iterator GetLastIter(const SortedItems& cache) { - CHECK(!cache.empty()); - auto it = cache.end(); - return std::prev(it); -@@ -967,9 +967,9 @@ bool DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheImpl( - } - - template --SortedItems::iterator -+typename SortedItems::iterator - DownloadBubbleUpdateService::CacheManager::RemoveItemFromCacheByIter( -- SortedItems::iterator iter, -+ typename SortedItems::iterator iter, - SortedItems& cache, - IterMap& iter_map) { - CHECK(iter != cache.end()); -diff --git a/chrome/test/chromedriver/capabilities.cc b/chrome/test/chromedriver/capabilities.cc -index c0708681ebd..98b8494d170 100644 ---- a/chrome/test/chromedriver/capabilities.cc -+++ b/chrome/test/chromedriver/capabilities.cc -@@ -355,7 +355,7 @@ Status ParseMobileEmulation(const base::Value& option, - "'version' field of type string"); - } - -- brands.emplace_back(*brand, *version); -+ brands.emplace_back(BrandVersion{*brand, *version}); - } - - client_hints.brands = std::move(brands); -@@ -392,7 +392,7 @@ Status ParseMobileEmulation(const base::Value& option, - "a 'version' field of type string"); - } - -- full_version_list.emplace_back(*brand, *version); -+ full_version_list.emplace_back(BrandVersion{*brand, *version}); - } - - client_hints.full_version_list = std::move(full_version_list); -diff --git a/components/optimization_guide/core/tflite_model_executor.h b/components/optimization_guide/core/tflite_model_executor.h -index c4f750f4684..b5635f4108b 100644 ---- a/components/optimization_guide/core/tflite_model_executor.h -+++ b/components/optimization_guide/core/tflite_model_executor.h -@@ -189,7 +189,7 @@ class TFLiteModelExecutor : public ModelExecutor { - void SendForBatchExecution( - BatchExecutionCallback callback_on_complete, - base::TimeTicks start_time, -- ModelExecutor::ConstRefInputVector inputs) -+ typename ModelExecutor::ConstRefInputVector inputs) - override { - DCHECK(execution_task_runner_->RunsTasksInCurrentSequence()); - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); -diff --git a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc -index 2dc0b304092..a82f255090b 100644 ---- a/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc -+++ b/third_party/blink/renderer/core/html/parser/html_document_parser_fastpath.cc -@@ -169,7 +169,7 @@ class HTMLFastPathParser { - using Span = base::span; - using USpan = base::span; - // 32 matches that used by HTMLToken::Attribute. -- typedef std::conditional, -+ typedef typename std::conditional, - UCharLiteralBuffer<32>, - LCharLiteralBuffer<32>>::type LiteralBufferType; - typedef UCharLiteralBuffer<32> UCharLiteralBufferType; -diff --git a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc -index f0b49139147..a308fb67982 100644 ---- a/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc -+++ b/third_party/blink/renderer/modules/canvas/canvas2d/canvas_style.cc -@@ -91,12 +91,12 @@ void CanvasStyle::ApplyToFlags(cc::PaintFlags& flags, - case kGradient: - GetCanvasGradient()->GetGradient()->ApplyToFlags(flags, SkMatrix::I(), - ImageDrawOptions()); -- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); -+ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha}); - break; - case kImagePattern: - GetCanvasPattern()->GetPattern()->ApplyToFlags( - flags, AffineTransformToSkMatrix(GetCanvasPattern()->GetTransform())); -- flags.setColor(SkColor4f(0.0f, 0.0f, 0.0f, global_alpha)); -+ flags.setColor(SkColor4f{0.0f, 0.0f, 0.0f, global_alpha}); - break; - default: - NOTREACHED(); diff --git a/backports/electron/system-zstd.patch b/backports/electron/system-zstd.patch deleted file mode 100644 index 0fcd3ef..0000000 --- a/backports/electron/system-zstd.patch +++ /dev/null @@ -1,46 +0,0 @@ -From ae3ae3711784865bdc38bf119a6182a7b8dae91c Mon Sep 17 00:00:00 2001 -From: Matt Jolly -Date: Sun, 17 Sep 2023 16:51:42 +1000 -Subject: [PATCH] Add system-zstd - ---- a/build/linux/unbundle/replace_gn_files.py -+++ b/build/linux/unbundle/replace_gn_files.py -@@ -74,6 +74,7 @@ REPLACEMENTS = { - # - 'woff2': 'third_party/woff2/BUILD.gn', - 'zlib': 'third_party/zlib/BUILD.gn', -+ 'zstd': 'third_party/zstd/BUILD.gn', - } - - ---- /dev/null -+++ b/build/linux/unbundle/zstd.gn -@@ -0,0 +1,25 @@ -+import("//build/config/linux/pkg_config.gni") -+import("//build/shim_headers.gni") -+ -+pkg_config("system_zstd") { -+ packages = [ "libzstd" ] -+} -+ -+shim_headers("zstd_shim") { -+ root_path = "src/lib" -+ headers = [ -+ "zdict.h", -+ "zstd.h", -+ "zstd_errors.h", -+ ] -+} -+ -+source_set("zstd") { -+ deps = [ ":zstd_shim" ] -+ public_configs = [ ":system_zstd" ] -+} -+ -+source_set("decompress") { -+ deps = [ ":zstd_shim" ] -+ public_configs = [ ":system_zstd" ] -+} --- -2.42.0 - From 3bea445fde061e7e17d0dec6f6502f2dfb72e31b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 09:59:36 -0400 Subject: [PATCH 470/738] backports/electron-tasje: upgrade to 0.7.3 --- backports/electron-tasje/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/electron-tasje/APKBUILD b/backports/electron-tasje/APKBUILD index 71648c7..ac8776a 100644 --- a/backports/electron-tasje/APKBUILD +++ b/backports/electron-tasje/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=electron-tasje -pkgver=0.7.1 +pkgver=0.7.3 pkgrel=0 pkgdesc="Tiny replacement for electron-builder" url="https://codeberg.org/selfisekai/electron_tasje/" @@ -31,5 +31,5 @@ package() { } sha512sums=" -665ccbd6cb357c25d55daed4ad3b3ce008da258054951d9d069a5b12e72dd5812d534f906868e6b18e78949f058069a961c394c6f21ab3b3fab5393c330445e5 electron_tasje-0.7.1.tar.gz +251b7eabe74acdb5c7394f9d4d735b736acf555352785a9896ddaeed37632b238e823e1bb639e1f5a44a50455957ec41e1a585a3b2a9919b5818bb40843bd877 electron_tasje-0.7.3.tar.gz " From 8006b26b7442fc58d7984c4462d81dbc80405a02 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:00:10 -0400 Subject: [PATCH 471/738] backports/fdm-materials: bump pkgrel --- backports/fdm-materials/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/fdm-materials/APKBUILD b/backports/fdm-materials/APKBUILD index 5bde97d..5780f02 100644 --- a/backports/fdm-materials/APKBUILD +++ b/backports/fdm-materials/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=fdm-materials pkgver=5.2.2 -pkgrel=0 +pkgrel=1 pkgdesc="FDM Material Database" url="https://github.com/Ultimaker/fdm_materials" arch="noarch" From b0845ca9b6fba369ae16a5a606af44e181b78d4c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:02:03 -0400 Subject: [PATCH 472/738] user/freecad: move from backports due to aports drop --- {backports => user}/freecad/APKBUILD | 0 {backports => user}/freecad/missing-include-cstdint.patch | 0 {backports => user}/freecad/no-execinfo.patch | 0 {backports => user}/freecad/no-workaround-spnav.patch | 0 {backports => user}/freecad/numpy-1.20.patch | 0 {backports => user}/freecad/opencascade-7.8.0.patch | 0 {backports => user}/freecad/resourceDirectory.patch | 0 {backports => user}/freecad/tests.patch | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename {backports => user}/freecad/APKBUILD (100%) rename {backports => user}/freecad/missing-include-cstdint.patch (100%) rename {backports => user}/freecad/no-execinfo.patch (100%) rename {backports => user}/freecad/no-workaround-spnav.patch (100%) rename {backports => user}/freecad/numpy-1.20.patch (100%) rename {backports => user}/freecad/opencascade-7.8.0.patch (100%) rename {backports => user}/freecad/resourceDirectory.patch (100%) rename {backports => user}/freecad/tests.patch (100%) diff --git a/backports/freecad/APKBUILD b/user/freecad/APKBUILD similarity index 100% rename from backports/freecad/APKBUILD rename to user/freecad/APKBUILD diff --git a/backports/freecad/missing-include-cstdint.patch b/user/freecad/missing-include-cstdint.patch similarity index 100% rename from backports/freecad/missing-include-cstdint.patch rename to user/freecad/missing-include-cstdint.patch diff --git a/backports/freecad/no-execinfo.patch b/user/freecad/no-execinfo.patch similarity index 100% rename from backports/freecad/no-execinfo.patch rename to user/freecad/no-execinfo.patch diff --git a/backports/freecad/no-workaround-spnav.patch b/user/freecad/no-workaround-spnav.patch similarity index 100% rename from backports/freecad/no-workaround-spnav.patch rename to user/freecad/no-workaround-spnav.patch diff --git a/backports/freecad/numpy-1.20.patch b/user/freecad/numpy-1.20.patch similarity index 100% rename from backports/freecad/numpy-1.20.patch rename to user/freecad/numpy-1.20.patch diff --git a/backports/freecad/opencascade-7.8.0.patch b/user/freecad/opencascade-7.8.0.patch similarity index 100% rename from backports/freecad/opencascade-7.8.0.patch rename to user/freecad/opencascade-7.8.0.patch diff --git a/backports/freecad/resourceDirectory.patch b/user/freecad/resourceDirectory.patch similarity index 100% rename from backports/freecad/resourceDirectory.patch rename to user/freecad/resourceDirectory.patch diff --git a/backports/freecad/tests.patch b/user/freecad/tests.patch similarity index 100% rename from backports/freecad/tests.patch rename to user/freecad/tests.patch From 86b3f95e1bb7455ce37ffbecaeeb6a59ed6a7016 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:02:34 -0400 Subject: [PATCH 473/738] backports/freetube: bump pkgrel --- backports/freetube/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index ecd6add..3d4ac08 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=freetube pkgver=0.21.3 -pkgrel=0 +pkgrel=2 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron license="AGPL-3.0-only" From ad6f3d1c77c4b89f7c60302a61d1e399829db65f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:03:05 -0400 Subject: [PATCH 474/738] backports/libmedc: bump pkgrel --- backports/libmedc/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD index ffc22e4..8976805 100644 --- a/backports/libmedc/APKBUILD +++ b/backports/libmedc/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=libmedc pkgver=4.1.1 -pkgrel=3 +pkgrel=4 pkgdesc="Open source library for numerical simulation" url="https://www.salome-platform.org/" arch="all" From f2e1f14f999ba4b84a9436dbf9917190761cca6e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:03:42 -0400 Subject: [PATCH 475/738] user/looking-glass: move from backports due to custom version --- {backports => user}/looking-glass/APKBUILD | 0 {backports => user}/looking-glass/looking-glass.post-deinstall | 0 {backports => user}/looking-glass/missing-includes.patch | 0 .../looking-glass/module_1075-fix-build-linux64.patch | 0 .../looking-glass/module_1124-fix-build-linux610.patch | 0 {backports => user}/looking-glass/obs-plugins-lib.patch | 0 {backports => user}/looking-glass/werror.patch | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {backports => user}/looking-glass/APKBUILD (100%) rename {backports => user}/looking-glass/looking-glass.post-deinstall (100%) rename {backports => user}/looking-glass/missing-includes.patch (100%) rename {backports => user}/looking-glass/module_1075-fix-build-linux64.patch (100%) rename {backports => user}/looking-glass/module_1124-fix-build-linux610.patch (100%) rename {backports => user}/looking-glass/obs-plugins-lib.patch (100%) rename {backports => user}/looking-glass/werror.patch (100%) diff --git a/backports/looking-glass/APKBUILD b/user/looking-glass/APKBUILD similarity index 100% rename from backports/looking-glass/APKBUILD rename to user/looking-glass/APKBUILD diff --git a/backports/looking-glass/looking-glass.post-deinstall b/user/looking-glass/looking-glass.post-deinstall similarity index 100% rename from backports/looking-glass/looking-glass.post-deinstall rename to user/looking-glass/looking-glass.post-deinstall diff --git a/backports/looking-glass/missing-includes.patch b/user/looking-glass/missing-includes.patch similarity index 100% rename from backports/looking-glass/missing-includes.patch rename to user/looking-glass/missing-includes.patch diff --git a/backports/looking-glass/module_1075-fix-build-linux64.patch b/user/looking-glass/module_1075-fix-build-linux64.patch similarity index 100% rename from backports/looking-glass/module_1075-fix-build-linux64.patch rename to user/looking-glass/module_1075-fix-build-linux64.patch diff --git a/backports/looking-glass/module_1124-fix-build-linux610.patch b/user/looking-glass/module_1124-fix-build-linux610.patch similarity index 100% rename from backports/looking-glass/module_1124-fix-build-linux610.patch rename to user/looking-glass/module_1124-fix-build-linux610.patch diff --git a/backports/looking-glass/obs-plugins-lib.patch b/user/looking-glass/obs-plugins-lib.patch similarity index 100% rename from backports/looking-glass/obs-plugins-lib.patch rename to user/looking-glass/obs-plugins-lib.patch diff --git a/backports/looking-glass/werror.patch b/user/looking-glass/werror.patch similarity index 100% rename from backports/looking-glass/werror.patch rename to user/looking-glass/werror.patch From d7fb3c54198f5755597bb3a01f7c7b278a4100f9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:04:22 -0400 Subject: [PATCH 476/738] backports/nlopt: upgrade to 2.8.0 --- backports/nlopt/APKBUILD | 59 +++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/backports/nlopt/APKBUILD b/backports/nlopt/APKBUILD index 0be29fe..49b6b8b 100644 --- a/backports/nlopt/APKBUILD +++ b/backports/nlopt/APKBUILD @@ -1,38 +1,71 @@ # Contributor: Anjandev Momi -# Maintainer: Anjandev Momi +# Maintainer: Celeste +maintainer="Celeste " pkgname=nlopt -pkgver=2.7.1 +pkgver=2.8.0 pkgrel=0 -pkgdesc="library for nonlinear optimization, wrapping many algorithms for global and local, constrained or unconstrained, optimization" -url="https://github.com/stevengj/nlopt/" +pkgdesc="Library for nonlinear optimization" +url="https://github.com/stevengj/nlopt" arch="all" license="LGPL-2.1-or-later" -makedepends="samurai cmake" -subpackages="$pkgname-dev $pkgname-doc" +makedepends=" + cmake + guile-dev + python3-dev + samurai + swig + " +subpackages=" + $pkgname-dev + $pkgname-doc + $pkgname-guile + " source="$pkgname-$pkgver.tar.gz::https://github.com/stevengj/nlopt/archive/refs/tags/v$pkgver.tar.gz" +case "$CARCH" in +# octave unavailable on these 3 archs +s390x|riscv64|ppc64le) ;; +*) + makedepends="$makedepends octave-dev" + subpackages="$subpackages $pkgname-octave" + ;; +esac + build() { if [ "$CBUILD" != "$CHOST" ]; then - CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" + local crossopts="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" fi cmake -B build -G Ninja \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_INSTALL_LIBDIR=lib \ - -DBUILD_SHARED_LIBS=True \ - -DCMAKE_BUILD_TYPE=minsizerel \ - $CMAKE_CROSSOPTS . + -DBUILD_SHARED_LIBS=ON \ + -DCMAKE_BUILD_TYPE=MinSizeRel \ + $crossopts cmake --build build } check() { - cd build - CTEST_OUTPUT_ON_FAILURE=TRUE ctest + ctest --test-dir build --output-on-failure } package() { DESTDIR="$pkgdir" cmake --install build } +guile() { + pkgdesc="$pkgdesc (Guile bindings)" + depends="$pkgname=$pkgver-r$pkgrel guile" + + amove usr/lib/guile usr/share/guile +} + +octave() { + pkgdesc="$pkgdesc (Octave bindings)" + depends="$pkgname=$pkgver-r$pkgrel octave" + + amove usr/lib/octave usr/share/octave +} + sha512sums=" -e23cb522fc696010574c14b72be85acc0f8ccf0bf208bf2b8789c57d6c5a6e6d419ee10330581518b1c1567018ae909b626ce7761d4fbd5bf112916871e420e2 nlopt-2.7.1.tar.gz +cb294caa5532e11ae0d22ed849705920bbae79f712144c840a5ca865ef8e6a15c6c9540c81ced0c3c05b9f44c360d50f74e235e69d893be34b7e1c5599f07c71 nlopt-2.8.0.tar.gz " From ea066664d784ded04dbcf1d75e3253b2cdc5f29c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:04:45 -0400 Subject: [PATCH 477/738] backports/openssl1.1-compat: bump pkgrel --- backports/openssl1.1-compat/APKBUILD | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/backports/openssl1.1-compat/APKBUILD b/backports/openssl1.1-compat/APKBUILD index 294cbc1..fb31eaa 100644 --- a/backports/openssl1.1-compat/APKBUILD +++ b/backports/openssl1.1-compat/APKBUILD @@ -3,7 +3,7 @@ pkgname=openssl1.1-compat pkgver=1.1.1w _abiver=${pkgver%.*} -pkgrel=0 +pkgrel=1 pkgdesc="toolkit for transport layer security (TLS) - version 1.1" url="https://www.openssl.org/" arch="all" @@ -86,6 +86,7 @@ build() { x86_64) _target="linux-x86_64"; _optflags="enable-ec_nistp_64_gcc_128" ;; s390x) _target="linux64-s390x";; riscv64) _target="linux-generic64";; + loongarch64) _target="linux-generic64";; *) msg "Unable to determine architecture from (CARCH=$CARCH)" ; return 1 ;; esac @@ -103,7 +104,7 @@ build() { perl ./Configure \ $_target \ --prefix=/usr \ - --libdir=lib \ + --libdir=/usr/lib \ --openssldir=/etc/ssl1.1 \ shared \ no-zlib \ @@ -144,23 +145,16 @@ package() { _libcrypto() { pkgdesc="Crypto library from openssl" replaces="libressl2.7-libcrypto" - mkdir -p "$subpkgdir"/lib "$subpkgdir"/usr/lib - mv "$pkgdir"/etc "$subpkgdir"/ - for i in "$pkgdir"/usr/lib/libcrypto*; do - mv $i "$subpkgdir"/lib/ - ln -s ../../lib/${i##*/} "$subpkgdir"/usr/lib/${i##*/} - done - mv "$pkgdir"/usr/lib/engines-$_abiver "$subpkgdir"/usr/lib/ + + amove etc + amove usr/lib/libcrypto* + amove usr/lib/engines-$_abiver } _libssl() { pkgdesc="SSL shared libraries" - mkdir -p "$subpkgdir"/lib "$subpkgdir"/usr/lib - for i in "$pkgdir"/usr/lib/libssl*; do - mv $i "$subpkgdir"/lib/ - ln -s ../../lib/${i##*/} "$subpkgdir"/usr/lib/${i##*/} - done + amove usr/lib/libssl* } _static() { From 1253b5be224520c207f8864891824eb79d5f8937 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:05:29 -0400 Subject: [PATCH 478/738] backports/perl-math-random-isaac-xs: bump pkgrel --- backports/perl-math-random-isaac-xs/APKBUILD | 50 ++++++++------------ 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/backports/perl-math-random-isaac-xs/APKBUILD b/backports/perl-math-random-isaac-xs/APKBUILD index 4d27426..8cb2f95 100644 --- a/backports/perl-math-random-isaac-xs/APKBUILD +++ b/backports/perl-math-random-isaac-xs/APKBUILD @@ -1,47 +1,39 @@ -# Automatically generated by apkbuild-cpan, template 2 +# Automatically generated by apkbuild-cpan, template 4 # Contributor: Timo Teräs -# Maintainer: Timo Teräs +# Maintainer: Celeste +maintainer="Celeste " pkgname=perl-math-random-isaac-xs -_pkgreal=Math-Random-ISAAC-XS pkgver=1.004 -pkgrel=7 +pkgrel=8 +#_pkgreal is used by apkbuild-cpan to find modules at MetaCpan +_pkgreal=Math-Random-ISAAC-XS pkgdesc="C implementation of the ISAAC PRNG algorithm" url="https://metacpan.org/release/Math-Random-ISAAC-XS/" arch="all" -license="unrestricted" -cpandepends="" -cpanmakedepends="perl-test-nowarnings" -cpancheckdepends="" -depends="$cpandepends" -makedepends="perl-dev perl-module-build $cpanmakedepends" -checkdepends="$cpancheckdepends" +license="Public-Domain" +depends="perl" +makedepends="perl-dev perl-module-build" +checkdepends="perl-test-nowarnings" subpackages="$pkgname-doc" -source="https://cpan.metacpan.org/authors/id/J/JA/JAWNSY/$_pkgreal-$pkgver.tar.gz" +source="https://cpan.metacpan.org/authors/id/J/JA/JAWNSY/Math-Random-ISAAC-XS-$pkgver.tar.gz" builddir="$srcdir/$_pkgreal-$pkgver" -prepare() { - default_prepare || return 1 - - cd "$builddir" - export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') - perl Build.PL installdirs=vendor || return 1 -} - build() { - cd "$builddir" export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') + perl Build.PL \ + --installdirs=vendor \ + --create_packlist=0 ./Build } -package() { - cd "$builddir" - ./Build install destdir="$pkgdir" || return 1 - find "$pkgdir" \( -name perllocal.pod -o -name .packlist \) -delete -} - check() { - cd "$builddir" ./Build test } -sha512sums="40c46b5f247f585a407ef9f36b5874d9cf03ec05963a9d92d988ebd63daf1e37b1b51308845d4596f47b5ad7203953bcb7fbb421c905b526dbe99b246ccb4d87 Math-Random-ISAAC-XS-1.004.tar.gz" +package() { + ./Build install --destdir="$pkgdir" +} + +sha512sums=" +40c46b5f247f585a407ef9f36b5874d9cf03ec05963a9d92d988ebd63daf1e37b1b51308845d4596f47b5ad7203953bcb7fbb421c905b526dbe99b246ccb4d87 Math-Random-ISAAC-XS-1.004.tar.gz +" From dcd308946ac74545589589d2c5c316aa007bc95d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:06:26 -0400 Subject: [PATCH 479/738] backports/py3-apsw: upgrade at 3.46.1.0 --- backports/py3-apsw/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD index 1259ba3..c0b8c6d 100644 --- a/backports/py3-apsw/APKBUILD +++ b/backports/py3-apsw/APKBUILD @@ -2,8 +2,8 @@ # Maintainer: Francesco Colista pkgname=py3-apsw _pkgname=apsw -pkgver=3.45.2.0 -pkgrel=1 +pkgver=3.46.1.0 +pkgrel=0 pkgdesc="Another Python SQLite Wrapper" url="https://github.com/rogerbinns/apsw" arch="all" @@ -41,6 +41,6 @@ package() { } sha512sums=" -0260f6479d5f1188ad172dfc0dd7e4a03c9d809d2f80c2296e587a19286681bb2ce759b0bd19ec6957e2902f18729b7e79410e4db79dff9918089f57dd510828 py3-apsw-3.45.2.0.zip +8d24825c8346b05a99b8959ce1fd45ae5162c95b020ecc63bd3491bfd1579370a0e6b1a962f7f64a7e7e415846007e64d90b28e2065ae047e228d60b12b9cb02 py3-apsw-3.46.1.0.zip 8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch " From 5e4808302b13f9ea7a7a01f3286fc5aefda644c8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:06:51 -0400 Subject: [PATCH 480/738] backports/py3-arcus: bump pkgrel --- backports/py3-arcus/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD index 0a04535..1971b01 100644 --- a/backports/py3-arcus/APKBUILD +++ b/backports/py3-arcus/APKBUILD @@ -1,9 +1,9 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=py3-arcus # Needs to be upgraded in sync with libarcus pkgver=5.3.0 -pkgrel=0 +pkgrel=1 pkgdesc="Python bindings for libarcus" url="https://github.com/Ultimaker/pyArcus" arch="all" From ca399a31cc6d47739c0f5c5f5506c02776824c45 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:07:22 -0400 Subject: [PATCH 481/738] backports/py3-colored: bump pkgrel --- backports/py3-colored/APKBUILD | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD index d11a554..deb152a 100644 --- a/backports/py3-colored/APKBUILD +++ b/backports/py3-colored/APKBUILD @@ -2,13 +2,13 @@ pkgname=py3-colored _pyname=${pkgname/py3-/} pkgver=1.4.4 -pkgrel=2 +pkgrel=3 pkgdesc="Simple Python library for color and formatting in terminal" url="https://gitlab.com/dslackw/colored" arch="noarch" license="MIT" depends="python3" -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517" checkdepends="py3-pytest" subpackages="$pkgname-pyc" source="https://gitlab.com/dslackw/colored/-/archive/$pkgver/colored-$pkgver.tar.gz" @@ -16,11 +16,14 @@ builddir="$srcdir/$_pyname-$pkgver" options="!check" # No testsuite build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } package() { - python3 setup.py install --prefix=/usr --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" From c34ae73f084fea84f5532f330194576937dd3ea3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:07:47 -0400 Subject: [PATCH 482/738] backports/py3-daemon: drop due to community --- backports/py3-daemon/APKBUILD | 40 ------------------- .../py3-daemon/remove-docutils-depend.patch | 16 -------- 2 files changed, 56 deletions(-) delete mode 100644 backports/py3-daemon/APKBUILD delete mode 100644 backports/py3-daemon/remove-docutils-depend.patch diff --git a/backports/py3-daemon/APKBUILD b/backports/py3-daemon/APKBUILD deleted file mode 100644 index 416cd99..0000000 --- a/backports/py3-daemon/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Contributor: Noel Kuntze -# Maintainer: Noel Kuntze -pkgname=py3-daemon -pkgver=2.3.2 -pkgrel=4 -pkgdesc="Library to implement a well-behaved Unix daemon process" -url="https://pagure.io/python-daemon" -options="!check" # Has lots of dependencies -arch="noarch" -license="Apache-2.0 AND GPL-3.0-or-later" -depends="py3-setuptools py3-lockfile" -makedepends="py3-docutils" -subpackages="$pkgname-pyc" -source=" - https://pypi.io/packages/source/p/python-daemon/python-daemon-$pkgver.tar.gz - remove-docutils-depend.patch -" -builddir="$srcdir/python-daemon-$pkgver" - -prepare() { - default_prepare - - # Remove unnecessary dependency for building, twine is - # required for uploading the package to pypi which we don't - # do - sed -e '/twine/d' -i setup.py -} - -build() { - python3 setup.py build -} - -package() { - python3 setup.py install --root="$pkgdir" -} - -sha512sums=" -d9f6e6c376a496fae96bd9efed0a56d00a137617a3d1d5ef74802ef176bc813bb1d49bbb9164cdbec03213529f944b32b257bcc64283abfa4a3522ff00826bfd python-daemon-2.3.2.tar.gz -20bc4bce7fba9754d1c9bca298f9b4ff7fe90ecf51769df2020912f370650a5997f91c99c6be2ecffed10a6b359a29b1f64b0c391772451eb3c04769df381015 remove-docutils-depend.patch -" diff --git a/backports/py3-daemon/remove-docutils-depend.patch b/backports/py3-daemon/remove-docutils-depend.patch deleted file mode 100644 index 2bbc3be..0000000 --- a/backports/py3-daemon/remove-docutils-depend.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/setup.py.orig b/setup.py -index 24f0e7cb98a..d712294c20b 100644 ---- a/setup.py.orig -+++ b/setup.py -@@ -96,11 +96,6 @@ setup_kwargs = dict( - ], - ) - --# Docutils is only required for building, but Setuptools can't distinguish --# dependencies properly. --# See . --setup_kwargs['install_requires'].append("docutils") -- - - if __name__ == '__main__': - setup(**setup_kwargs) From f4893f439fa0355e534789e638c69c3d6781b582 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:08:04 -0400 Subject: [PATCH 483/738] backports/py3-pytube: drop due to community --- backports/py3-pytube/APKBUILD | 42 ----------------------------------- 1 file changed, 42 deletions(-) delete mode 100644 backports/py3-pytube/APKBUILD diff --git a/backports/py3-pytube/APKBUILD b/backports/py3-pytube/APKBUILD deleted file mode 100644 index 6d27b69..0000000 --- a/backports/py3-pytube/APKBUILD +++ /dev/null @@ -1,42 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-pytube -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=pytube -pkgver=15.0.0 -pkgrel=1 -pkgdesc="Python 3 library for downloading YouTube Videos." -url="https://pypi.python.org/project/pytube" -arch="noarch" -license="Unlicense" -checkdepends="py3-pytest" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://github.com/pytube/pytube/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" -# 7/131 units failing due to: -# AttributeError: 'NoneType' object has no attribute 'register_on_progress_callback' -# AttributeError: 'YouTube' object has no attribute 'stream_monostate' -# StopIteration -options="!check" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer "$builddir"/.dist/*.whl - .testenv/bin/python3 -m pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -fc28d87c56bae9da3def68224a03687cc521c26e6f38dd41abe81e84f91bb2cab73dc8c7dbbc388787cf066f7d7304c78162cc60c544b99e75187b760c64b4a3 py3-pytube-15.0.0.tar.gz -" From 192fefd45720235aad1eb0d6461f3a00d6f414ee Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:08:19 -0400 Subject: [PATCH 484/738] backports/py3-utils: drop due to community --- backports/py3-utils/APKBUILD | 46 ------------------- .../fix-setuptools-deprecation.patch | 11 ----- backports/py3-utils/pytest.patch | 14 ------ backports/py3-utils/typing-ext.patch | 22 --------- 4 files changed, 93 deletions(-) delete mode 100644 backports/py3-utils/APKBUILD delete mode 100644 backports/py3-utils/fix-setuptools-deprecation.patch delete mode 100644 backports/py3-utils/pytest.patch delete mode 100644 backports/py3-utils/typing-ext.patch diff --git a/backports/py3-utils/APKBUILD b/backports/py3-utils/APKBUILD deleted file mode 100644 index b89b2bf..0000000 --- a/backports/py3-utils/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor: Marian Buschsieweke -# Maintainer: Marian Buschsieweke -pkgname=py3-utils -_pkgname=python-utils -pkgver=3.8.1 -pkgrel=1 -pkgdesc="Convenient utilities not included with the standard Python install" -url="https://github.com/WoLpH/python-utils" -arch="noarch" -license="BSD-3-Clause" -makedepends="py3-gpep517 py3-setuptools py3-wheel" -checkdepends="py3-pytest py3-pytest-asyncio py3-loguru" -subpackages="$pkgname-pyc" -source=" - https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz - - fix-setuptools-deprecation.patch - pytest.patch - typing-ext.patch - " - -builddir="$srcdir/$_pkgname-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -ccba9651cc99a8f4e3f13e7ff66a43a40d2e85bc735b6246524269495ff321225a0dcad9abd03ca9cb61b4b1b35a27009fac3fe87e3f748ffc5c87a956acd335 python-utils-3.8.1.tar.gz -c001453b958b8231806ef6a04fcd21e1d252eeec36d4e6cbfce35f0662bae76c3f7484e0e8ff06d68a3e9cc7d19c9cdbf792c13e0101c580bb5e8de9d837fde7 fix-setuptools-deprecation.patch -99cc91ad155f8140aedc9420659c0e560a4d816ac1f85468ddb3a9fdc87526d591da916441d63b601146a86fb2c26f61c9dfbe37e31b86ee605f732e24e7b465 pytest.patch -d68943e3301eaafe2a9ea27f382a2eba1ce98149d8cbbe91aa9222cf76a8f7bebba3d9dbfced54bd88c90688a6e18373f011fbb83cd36cbf2ecd3e36b034aa22 typing-ext.patch -" diff --git a/backports/py3-utils/fix-setuptools-deprecation.patch b/backports/py3-utils/fix-setuptools-deprecation.patch deleted file mode 100644 index 16b5e5a..0000000 --- a/backports/py3-utils/fix-setuptools-deprecation.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/setup.cfg -+++ b/setup.cfg -@@ -2,7 +2,7 @@ - test = pytest - - [metadata] --description-file = README.rst -+description_file = README.rst - - [nosetests] - verbosity = 3 diff --git a/backports/py3-utils/pytest.patch b/backports/py3-utils/pytest.patch deleted file mode 100644 index a7f016d..0000000 --- a/backports/py3-utils/pytest.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/pytest.ini b/pytest.ini -index a8e632a..e28ed7d 100644 ---- a/pytest.ini -+++ b/pytest.ini -@@ -5,9 +5,6 @@ python_files = - - addopts = - --doctest-modules -- --cov python_utils -- --cov-report term-missing --; --mypy - - doctest_optionflags = - ALLOW_UNICODE diff --git a/backports/py3-utils/typing-ext.patch b/backports/py3-utils/typing-ext.patch deleted file mode 100644 index ee6acb2..0000000 --- a/backports/py3-utils/typing-ext.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/python_utils/types.py b/python_utils/types.py -index 01c319a..79ef950 100644 ---- a/python_utils/types.py -+++ b/python_utils/types.py -@@ -1,7 +1,6 @@ - # pyright: reportWildcardImportFromLibrary=false - import datetime - import decimal --from typing_extensions import * # type: ignore # noqa: F403 - from typing import * # type: ignore # pragma: no cover # noqa: F403 - from types import * # type: ignore # pragma: no cover # noqa: F403 - ---- a/setup.py -+++ b/setup.py -@@ -29,7 +29,6 @@ - ), - package_data={'python_utils': ['py.typed']}, - long_description=long_description, -- install_requires=['typing_extensions>3.10.0.2'], - tests_require=['pytest'], - extras_require={ - 'loguru': [ From 42fba3ec091de2a30cc976f716a7ed28f4388939 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:08:34 -0400 Subject: [PATCH 485/738] backports/py3-microdata: drop due to community --- backports/py3-microdata/APKBUILD | 37 -------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 backports/py3-microdata/APKBUILD diff --git a/backports/py3-microdata/APKBUILD b/backports/py3-microdata/APKBUILD deleted file mode 100644 index ecc0268..0000000 --- a/backports/py3-microdata/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-microdata -#_pkgreal is used by apkbuild-pypi to find modules at PyPI -_pkgreal=microdata -pkgver=0.8.0 -pkgrel=0 -pkgdesc="html5lib extension for parsing microdata" -url="https://pypi.python.org/project/microdata" -license="CC0-1.0" -arch="noarch" -depends="py3-html5lib" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -source="$pkgname-$pkgver.tar.gz::https://github.com/edsu/microdata/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 setup.py test -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -e48c8c267f595faec97397fae470a3aa1f4f33d9f4ea7d186f07b104166b373ea768db7d73423aedd28af3e310f6b9fa268d946420c6aed9676d15f38396b07e py3-microdata-0.8.0.tar.gz -" From b970b53d5b012a88e23c7172a69f8aa3fab03295 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:09:06 -0400 Subject: [PATCH 486/738] backports/py3-dataparser: fix check --- backports/py3-dateparser/APKBUILD | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD index 6a342fb..fa01fe0 100644 --- a/backports/py3-dateparser/APKBUILD +++ b/backports/py3-dateparser/APKBUILD @@ -40,7 +40,9 @@ build() { } check() { - _test_filter='not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english' + # test_relative_base_setting_2_en fails due to tzinfo mismatch + _test_filter="not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english \ + and not test_relative_base_setting_2_en" # test_custom_language_detect_fast_text fails due to wrong file format case "$CARCH" in s390x) From 559e9ced7afbefa934690c09585ee301b9147dd8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:09:19 -0400 Subject: [PATCH 487/738] backports/py3-flask-limiter: bump pkgrel --- backports/py3-flask-limiter/APKBUILD | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index 9555218..afeb6cf 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: lauren n. liberda pkgname=py3-flask-limiter pkgver=3.7.0 -pkgrel=0 +pkgrel=1 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" arch="noarch" @@ -14,7 +14,7 @@ depends=" py3-rich python3 " -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517" checkdepends=" py3-flask-restful py3-flask-restx @@ -23,7 +23,6 @@ checkdepends=" py3-pytest py3-pytest-cov " -options="!check" # tests depend on unpackaged modules subpackages="$pkgname-pyc" source=" https://github.com/alisaifee/flask-limiter/archive/refs/tags/$pkgver/flask-limiter-$pkgver.tar.gz @@ -31,17 +30,23 @@ source=" our-std-is-good-enough.patch " builddir="$srcdir/flask-limiter-$pkgver" +options="!check" # tests depend on unpackaged modules build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { - pytest + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest } package() { - python3 setup.py install --prefix=/usr --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" From 5e12f12d1e8ab53f10c8a44815dc0d656a800898 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:09:55 -0400 Subject: [PATCH 488/738] backports/py3-fuzzywuzzy: move to gpep517 --- backports/py3-fuzzywuzzy/APKBUILD | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/backports/py3-fuzzywuzzy/APKBUILD b/backports/py3-fuzzywuzzy/APKBUILD index ad0fce2..c659b1b 100644 --- a/backports/py3-fuzzywuzzy/APKBUILD +++ b/backports/py3-fuzzywuzzy/APKBUILD @@ -3,28 +3,33 @@ pkgname=py3-fuzzywuzzy _pyname=fuzzywuzzy pkgver=0.18.0 -pkgrel=6 +pkgrel=7 pkgdesc="Fuzzy string matching in python" url="https://github.com/seatgeek/fuzzywuzzy" arch="noarch" license="GPL-2.0-only" depends="python3 py3-levenshtein" -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517" checkdepends="py3-pytest py3-pycodestyle py3-hypothesis" subpackages="$pkgname-pyc" source="https://files.pythonhosted.org/packages/source/${_pyname%${_pyname#?}}/$_pyname/$_pyname-$pkgver.tar.gz" builddir="$srcdir/$_pyname-$pkgver" build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { - PYTHONPATH="$PWD/build/lib" pytest -v + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest } package() { - python3 setup.py install --skip-build --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" From 55ac054f92a004f4aa4a08254336075df946e9e3 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:10:13 -0400 Subject: [PATCH 489/738] backports/py3-limits: upgrade to 3.13.0 --- backports/py3-limits/APKBUILD | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD index ed4a82e..814a4bd 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.12.0 -pkgrel=0 +pkgver=3.13.0 +pkgrel=1 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" arch="noarch" @@ -11,7 +11,7 @@ depends=" py3-deprecated python3 " -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517" checkdepends=" py3-flaky py3-mongo @@ -22,7 +22,7 @@ checkdepends=" py3-redis " subpackages="$pkgname-pyc" -options="!check" # most tests are integration with db connections, assume all connectors installed +options="!check" # most tests are integration with db connections, assume all connectors installed source=" https://github.com/alisaifee/limits/archive/refs/tags/$pkgver/limits-$pkgver.tar.gz @@ -31,20 +31,25 @@ source=" builddir="$srcdir/limits-$pkgver" build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { - pytest \ + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest \ -m 'not benchmark and not etcd and not integration and not memcached' \ -k 'not aio and not Storage and not strategy' -v } package() { - python3 setup.py install --prefix=/usr --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" -2803dc26b18015e177342ed89e879f4dd680908579c99f9069d695edfa2beb3008b5bc47454ea2120a425bbcbc8a08928ab93a3058b33e11a2ae29431dfd9cd1 limits-3.12.0.tar.gz +0a13d08001c2f95e559ac1be35fa8cc178ad2d41bd5bf7b7e85781a428f550c350c21b92942b5b7e45f0f4c0604e96e579c8a26b5e9ca1196e6605608721030a limits-3.13.0.tar.gz 0364d51f9f879b95c6a4a3c9e9fd3d7d1e15ea214c50ae98cd36826b8c0b2d903cf1128741ac83738e305a207dae8955a0b2c8679484d2d6643e334595bdb1d7 our-std-is-good-enough.patch " From a24da23d5d11a581c9d43b37e18a5f0d1d14e774 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:10:41 -0400 Subject: [PATCH 490/738] backports/py3-mapbox-earcut: move to gpep517 --- backports/py3-mapbox-earcut/APKBUILD | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD index 99db5b5..fe17670 100644 --- a/backports/py3-mapbox-earcut/APKBUILD +++ b/backports/py3-mapbox-earcut/APKBUILD @@ -1,30 +1,33 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=py3-mapbox-earcut pkgver=1.0.1 -pkgrel=0 +pkgrel=2 pkgdesc="Python bindings for the mapbox earcut c++ library" url="https://github.com/skogler/mapbox_earcut_python" arch="all" license="ISC" depends="py3-numpy" -makedepends="py3-setuptools py3-pybind11-dev python3-dev" -checkdepends="pytest" +makedepends="py3-setuptools py3-pybind11-dev python3-dev py3-gpep517" +checkdepends="py3-pytest" source="$pkgname-$pkgver.tar.gz::https://github.com/skogler/mapbox_earcut_python/archive/refs/tags/v$pkgver.tar.gz" builddir="$srcdir/mapbox_earcut_python-$pkgver" build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { - python3 -m venv --clear --without-pip --system-site-packages test-env - test-env/bin/python3 setup.py install - test-env/bin/python3 -m pytest + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest } package() { - python3 setup.py install --skip-build --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" From 88d35e2b2ad24994ef36affaec0272937261bd8d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:11:09 -0400 Subject: [PATCH 491/738] backports/py3-numpy-stl: move to gpep517 --- backports/py3-numpy-stl/APKBUILD | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD index 6ef430b..1c72a2e 100644 --- a/backports/py3-numpy-stl/APKBUILD +++ b/backports/py3-numpy-stl/APKBUILD @@ -1,32 +1,37 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=py3-numpy-stl pkgver=3.0.1 -pkgrel=2 +pkgrel=4 pkgdesc="Library for working with STLs" url="https://github.com/WoLpH/numpy-stl" # s390x: no py3-utils arch="noarch !s390x" license="BSD-3-Clause" depends="python3 py3-utils py3-numpy" -makedepends="py3-setuptools" +makedepends="py3-setuptools py3-gpep517" checkdepends="py3-pytest" subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/releases/download/v$pkgver/numpy-stl-$pkgver.tar.gz" builddir="$srcdir/numpy-stl-$pkgver" build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl # deselected test needs xvfb-run and fails - pytest \ + .testenv/bin/python3 -m pytest \ --deselect tests/test_ascii.py::test_use_with_qt_with_custom_locale_decimal_delimeter } package() { - python3 setup.py install --skip-build --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" From 0f88617c9452e67931bab470036d6ec8c0b19c24 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:11:31 -0400 Subject: [PATCH 492/738] backports/py3-pathvalidate: upgrade to 3.2.1 --- backports/py3-pathvalidate/APKBUILD | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD index 6ea6d42..fc26a08 100644 --- a/backports/py3-pathvalidate/APKBUILD +++ b/backports/py3-pathvalidate/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-pathvalidate -pkgver=3.2.0 -pkgrel=1 +pkgver=3.2.1 +pkgrel=0 pkgdesc="Python library to sanitize/validate a string such as filenames/file-paths/etc" url="https://github.com/thombashi/pathvalidate" arch="noarch" @@ -11,6 +11,7 @@ depends="python3" makedepends=" py3-gpep517 py3-setuptools + py3-setuptools_scm py3-wheel " checkdepends="py3-pytest py3-click py3-faker" @@ -20,6 +21,7 @@ source="https://github.com/thombashi/pathvalidate/archive/refs/tags/v$pkgver/pat builddir="$srcdir/pathvalidate-$pkgver" build() { + export SETUPTOOLS_SCM_PRETEND_VERSION="$pkgver" gpep517 build-wheel \ --wheel-dir .dist \ --output-fd 3 3>&1 >&2 @@ -31,5 +33,5 @@ package() { } sha512sums=" -d1b0e49028bc5497558d9a0c15b4e3c301cacb439bebccffc467fc23001854877dbc81a214cc6eb34c5a905a88c4f9394f5865a4de42f354b2450a3bfe10bb9e pathvalidate-3.2.0.tar.gz +094bb442258ba58fff11691f5b60976513924443247e808effbc26b9dd6c336f5f84d8e4563643b7def19d9f82170eb9ec6cd89491f9115df8d1634d2aa12206 pathvalidate-3.2.1.tar.gz " From 813dd51cbf1f159151253b92ab310ede3d97f9d1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:11:51 -0400 Subject: [PATCH 493/738] backports/py3-pivy: bump pkgrel --- backports/py3-pivy/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD index 86d3112..31627ea 100644 --- a/backports/py3-pivy/APKBUILD +++ b/backports/py3-pivy/APKBUILD @@ -1,11 +1,11 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=py3-pivy -pkgver=0.6.9_alpha0 +pkgver=0.6.9 pkgrel=0 pkgdesc="Python3 bindings for coin" url="https://github.com/coin3d/pivy" -# riscv64 blocked by py3-pyside6 +# riscv64: blocked by py3-pyside6 arch="all !riscv64" license="ISC" depends="py3-pyside6" @@ -32,5 +32,5 @@ package() { } sha512sums=" -1bfefd58d2921c8be170a97efa30cad53b01f636ea0cf236acca242be4f691669a4c310cd61c64d3e0c55e55e8be96d36945cd244380ddc0b3a06170d0f8b691 py3-pivy-0.6.9_alpha0.tar.gz +fd9587c69ad7468b771fbae59e68620f67a3c20850edadd65bf7994c1789d3444feb419e65dce34c6ee897c98eaca9f2f29f0bbfb4d1f0bbde26e4db56f74f78 py3-pivy-0.6.9.tar.gz " From 404979f01b49bad7f5450cda60ee64757473afab Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:12:06 -0400 Subject: [PATCH 494/738] backports/py3-pyinstrument: upgrade to 4.7.3 --- backports/py3-pyinstrument/APKBUILD | 31 +++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD index 50f4f80..e4ab2cf 100644 --- a/backports/py3-pyinstrument/APKBUILD +++ b/backports/py3-pyinstrument/APKBUILD @@ -1,18 +1,29 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: Celeste +maintainer="Celeste " pkgname=py3-pyinstrument -pkgver=4.6.2 -pkgrel=1 +pkgver=4.7.3 +pkgrel=0 pkgdesc="Call stack profiler for Python" url="https://github.com/joerick/pyinstrument" arch="all" license="BSD-3-Clause" -makedepends="py3-gpep517 py3-setuptools py3-wheel python3-dev" -checkdepends="py3-pytest py3-flaky py3-trio py3-greenlet" +makedepends=" + py3-gpep517 + py3-setuptools + py3-wheel + python3-dev + " +checkdepends=" + py3-flaky + py3-greenlet + py3-pytest + py3-pytest-asyncio + py3-trio + " subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/joerick/pyinstrument/archive/refs/tags/v$pkgver.tar.gz" builddir="$srcdir/pyinstrument-$pkgver" -options="!check" # currently not working build() { gpep517 build-wheel \ @@ -21,9 +32,13 @@ build() { } check() { + [ -d "pyinstrument" ] && mv -v pyinstrument pyinstrument.src + python3 -m venv --clear --without-pip --system-site-packages .testenv .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest + + # test_cmdline.py tries to run "pyinstrument" executable + PATH="$builddir/.testenv/bin:$PATH" .testenv/bin/python3 -m pytest } package() { @@ -31,5 +46,5 @@ package() { } sha512sums=" -da23988e6c68876cb8920ce284326f349425303ae36718c5c479b72b5f5ca5d48ced1674bcab71851f60e81a0985bb668bfa89a8b96cc20a1faa0dd7e623ec50 py3-pyinstrument-4.6.2.tar.gz +24feac08a9726379b749f391bdb6ddbca6d3631cf3515d3ead85ace7a96f213bf60e2cd4d4f3c7cade68b5e481b4bfd562482817befe6322579101a8d91add66 py3-pyinstrument-4.7.3.tar.gz " From 1a345ce163a948052c4dc7c79560bfa9263215b9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:12:38 -0400 Subject: [PATCH 495/738] backports/py3-rapidjson: build using gpep517 --- backports/py3-rapidjson/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-rapidjson/APKBUILD b/backports/py3-rapidjson/APKBUILD index 1418ad7..54cd11f 100644 --- a/backports/py3-rapidjson/APKBUILD +++ b/backports/py3-rapidjson/APKBUILD @@ -1,5 +1,5 @@ -# Contributor: Marian Buschsieweke -# Maintainer: Marian Buschsieweke +# Contributor: Marian Buschsieweke +# Maintainer: Marian Buschsieweke pkgname=py3-rapidjson pkgver=1.12 pkgrel=1 From ea2def9dd22d3cd6f4b25454c50109490b66fb31 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:13:02 -0400 Subject: [PATCH 496/738] backports/py3-rtree: build using gpep517 --- backports/py3-rtree/APKBUILD | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD index 52acba3..491e8e9 100644 --- a/backports/py3-rtree/APKBUILD +++ b/backports/py3-rtree/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-rtree _pkgname=rtree pkgver=1.1.0 -pkgrel=1 +pkgrel=2 pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" url="https://pypi.org/project/Rtree/" # s390x: Test failed: IndexSerialization::test_interleaving - AssertionError @@ -11,22 +11,27 @@ url="https://pypi.org/project/Rtree/" arch="noarch !s390x" license="MIT" depends="python3 libspatialindex-dev" -makedepends="py3-setuptools py3-wheel" +makedepends="py3-setuptools py3-wheel py3-gpep517" checkdepends="py3-pytest py3-numpy" subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/Toblerity/rtree/archive/$pkgver.tar.gz" builddir="$srcdir"/$_pkgname-$pkgver build() { - python3 setup.py build + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 } check() { - python3 -m pytest -v --doctest-modules rtree tests + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest -v --doctest-modules rtree tests } package() { - python3 setup.py install --skip-build --root="$pkgdir" + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl } sha512sums=" From 43a45d318c9680ca2a8c293220ddbd721a173591 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:13:13 -0400 Subject: [PATCH 497/738] backports/py3-svgpath: build using gpep517 --- backports/py3-svgpath/APKBUILD | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD index 12901b9..3cfbc91 100644 --- a/backports/py3-svgpath/APKBUILD +++ b/backports/py3-svgpath/APKBUILD @@ -1,8 +1,9 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: Celeste +maintainer="Celeste " pkgname=py3-svgpath pkgver=6.3 -pkgrel=2 +pkgrel=3 pkgdesc="SVG path and object parser" url="https://github.com/regebro/svg.path" arch="noarch" @@ -12,7 +13,8 @@ checkdepends="py3-pytest py3-pillow" subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz 105_use-better-than-nothing-font.patch - no-install-tests.patch" + no-install-tests.patch + " builddir="$srcdir/svg.path-$pkgver" build() { @@ -22,7 +24,9 @@ build() { } check() { - PYTHONPATH=build/lib pytest + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest } package() { From 0f5a3715cea9913cff8628d53012a221a4eda786 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:13:37 -0400 Subject: [PATCH 498/738] backports/py3-trimesh: bump pkgrel --- backports/py3-trimesh/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD index bab0b96..7087c8d 100644 --- a/backports/py3-trimesh/APKBUILD +++ b/backports/py3-trimesh/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=py3-trimesh pkgver=3.22.1 -pkgrel=1 +pkgrel=2 pkgdesc="Python library for working with triangular meshes" url="https://github.com/mikedh/trimesh" # x86, armhf, armv7 Tests fail on int64 to int32 casts on these arches From 37d498e0ef9b843f7285e62e6d400d95cbf671f4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:13:52 -0400 Subject: [PATCH 499/738] backports/signal-desktop: upgrade to 7.30.0 --- backports/signal-desktop/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 30a07b9..a12c250 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,8 +2,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.29.0 -pkgrel=0 +pkgver=7.30.0 +pkgrel=1 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron @@ -475,7 +475,7 @@ package() { } sha512sums=" -b97155dc2ca70436d6fdf15fff059f905f065738a288679aeee2199d43824206f4c7e4bae0c228b55b4cc76b7e00875b738ee4f7dea3c2a5414acec3e208aa1e Signal-Desktop-7.29.0.tar.gz +b8c330ac0ec05b31c27c5e8b3a3d269fbd407fc1aa5b3deec7e27810a674deaf4e7075ac424753ba5ed04b6781710531c56d77038201e3cad325c9776cdd3eda Signal-Desktop-7.30.0.tar.gz 6fb62213d8177ac5abe83ea71a18ea4b1c7b323983c41087166658fe9c47c1fd39e5323ca6acefe3db2a9a9376b6f385b5f2c006154da3ab705741d848b28943 libsignal-0.58.0.tar.gz 6777354b60650c6c3d359714f3aff92a315996f3725ba05c74ed054d3c4ba5506406b30c940853b5ba426ac0271cdb4dd930a759c570f486a70e1f5adc5a2aae ringrtc-2.48.3.tar.gz fe04fcf13f55b124f03ce9d516b1c53fc4f20c6a016819c62eeaa0500eda92c5a0c0d7dc5d1e360a27691dfd404c254e91bed9fb25d0fc40a27795c1b674a82e webrtc-6613c.tar.zst From b5577c66f133c070b16e58d37ca11ca267c9394a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:14:19 -0400 Subject: [PATCH 500/738] backports/soqt: fix check --- backports/soqt/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/soqt/APKBUILD b/backports/soqt/APKBUILD index 778776e..359bfb2 100644 --- a/backports/soqt/APKBUILD +++ b/backports/soqt/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman -# Maintainer: Aiden Grossman +# Maintainer: pkgname=soqt pkgver=1.6.0 -pkgrel=0 +pkgrel=1 pkgdesc="GUI binding library for coin" url="https://github.com/coin3d/soqt" arch="all" From c73afaf1108cbc9916dbb29220fb3485d1c88af1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 1 Nov 2024 10:14:28 -0400 Subject: [PATCH 501/738] backports/uranium: fix check --- backports/uranium/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD index 2b98a85..7badd09 100644 --- a/backports/uranium/APKBUILD +++ b/backports/uranium/APKBUILD @@ -42,7 +42,7 @@ build() { check() { # useless code style test with another dependency - ctest -j $JOBS --output-on-failure -T Test + ctest --output-on-failure -T Test } package() { From 7bdf12e9bab6f7ae24f47e53d8dd6c24aef12e7b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 13:18:23 -0500 Subject: [PATCH 502/738] backports/calibre: upgrade to 7.21.0 --- backports/calibre/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD index 74af5a9..64a7a04 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=7.20.0 +pkgver=7.21.0 pkgrel=0 pkgdesc="Ebook management application" # qt6-webengine @@ -111,6 +111,6 @@ package() { } sha512sums=" -3b6e2d4ed8d0755096b466f4bdcc8b6ca4810398caa2322c1efc30280680ff8b10dc5fb8cb763bed8fee82746e7c51c6f31f56e5d9689d5f43c671442004c532 calibre-7.20.0.tar.xz +0c2ee610833df83219c0c33b09e1374a8262f1630ccd48e3c4725c92922a3ac5d102ad83fc213457fb9de3efa4f5a2c98ff6dff039828e1661085a1054d7f631 calibre-7.21.0.tar.xz eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch " From b91f3b9ff95867ce47871be524f1b6b8669e9234 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 13:18:38 -0500 Subject: [PATCH 503/738] backports/electron: upgrade to 33.2.1 --- backports/electron/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 12d58f4..72d6e87 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,10 +1,10 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=33.0.2 +pkgver=33.2.1 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=130.0.6723.59 +_chromium=130.0.6723.127 _copium_tag=129.1 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" @@ -544,7 +544,7 @@ lang() { } sha512sums=" -6523db0feb88a742a8c7228481ae25ed9ea4eaf1cbab84d9a91212bf3590f1b87fd244bc6583e90e78ab15e4be28cc70ddaa270d582c68eaa131e3be455c58fe electron-v33.0.2-130.0.6723.59.tar.zst +e2df4454f4178af859c13aadee4ea04a5b6aa202972cad625e54bc68f5b8c25e098e50d428ec9c1886c37ccf49aaaedb4c5f02fc8bdd498314ba216901932185 electron-v33.2.1-130.0.6723.127.tar.zst 6138b3dbf3903c78f4ca1ed5a6c3c3c485471ded31976010484ce8893d03953df2b8f066a4fe84bbde5ae7ef9bbff664ef917e247b2e95dd471de40f2774d7d0 copium-129.1.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch 53b7cdee8f7bfb4c9371cb385c473e34ed3d8ac7efaa43c0af061107560be30d8747b07fb0b16c01079b8c770f2c721bb5a8081313b7c126856ea4078a74da2a compiler.patch From e1ba44fb3bfab09c11292c7e6fedfdaa1985064f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 13:19:07 -0500 Subject: [PATCH 504/738] backports/py3-dateparser: fix tests --- backports/py3-dateparser/APKBUILD | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD index fa01fe0..17b905e 100644 --- a/backports/py3-dateparser/APKBUILD +++ b/backports/py3-dateparser/APKBUILD @@ -1,8 +1,8 @@ -# Maintainer: Hoang Nguyen +maintainer="Hoang Nguyen " pkgname=py3-dateparser _pyname=${pkgname#py3-} pkgver=1.2.0 -pkgrel=1 +pkgrel=0 pkgdesc="Python parser for human readable dates" url="https://github.com/scrapinghub/dateparser" arch="noarch" @@ -41,14 +41,9 @@ build() { check() { # test_relative_base_setting_2_en fails due to tzinfo mismatch - _test_filter="not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english \ - and not test_relative_base_setting_2_en" # test_custom_language_detect_fast_text fails due to wrong file format - case "$CARCH" in - s390x) - _test_filter="$_test_filter and not test_custom_language_detect_fast_text" - ;; - esac + _test_filter="not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english \ + and not test_relative_base_setting_2_en and not test_custom_language_detect_fast_text" python3 -m venv --clear --without-pip --system-site-packages .testenv .testenv/bin/python3 -m installer .dist/*.whl From e21b82beb459625b323283c3fca44e8ea980c863 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 13:19:29 -0500 Subject: [PATCH 505/738] backports/py3-flask-limiter: upgrade to 3.9.2 --- backports/py3-flask-limiter/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index afeb6cf..9bca96d 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda -# Maintainer: lauren n. liberda +maintainer="lauren n. liberda " pkgname=py3-flask-limiter -pkgver=3.7.0 -pkgrel=1 +pkgver=3.9.2 +pkgrel=0 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" arch="noarch" @@ -50,6 +50,6 @@ package() { } sha512sums=" -f546536e3efb86571515aac5b578155c240049fb1ccf96e55d4b1814d9e227e41cc18fc587f115706606154bb12a84b381533cf069cdfc56453b0f170ec19449 flask-limiter-3.7.0.tar.gz +69e488a641ab39c088185fabcde19ebb4cbe1683e9143efdf146163bb0254e0c4f8b4b72df407542d540394e7e3b2d7498b9c93c25ae8a8128e05e319f342318 flask-limiter-3.9.2.tar.gz 1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch " From 76f4a5af17eaae3b1ef379402d610eadce46dd66 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 13:20:02 -0500 Subject: [PATCH 506/738] backports/py3-privy: bump pkgrel --- backports/py3-pivy/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD index 31627ea..6b5f0f5 100644 --- a/backports/py3-pivy/APKBUILD +++ b/backports/py3-pivy/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: pkgname=py3-pivy pkgver=0.6.9 -pkgrel=0 +pkgrel=2 pkgdesc="Python3 bindings for coin" url="https://github.com/coin3d/pivy" # riscv64: blocked by py3-pyside6 From 43cc51f815d7f77b085ea21b7d471e3053158d73 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 13:20:23 -0500 Subject: [PATCH 507/738] backports/signal-desktop: upgrade to 7.34.0 --- backports/signal-desktop/APKBUILD | 116 +++++++----------- .../bettersqlite-use-system-sqlcipher.patch | 56 --------- .../signal-desktop/libsignal-auditable.patch | 6 +- .../ringrtc-webrtc-renamed.patch | 4 +- .../signal-use-system-sqlcipher.patch | 43 +++++++ .../signal-desktop/webrtc-compiler.patch | 4 +- backports/signal-desktop/webrtc-gcc13.patch | 8 +- .../signal-desktop/webrtc-shared-libs.patch | 22 ++-- 8 files changed, 109 insertions(+), 150 deletions(-) delete mode 100644 backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch create mode 100644 backports/signal-desktop/signal-use-system-sqlcipher.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index a12c250..0bfb575 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,8 +2,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.30.0 -pkgrel=1 +pkgver=7.34.0 +pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron @@ -66,9 +66,9 @@ makedepends=" options="net !check" # use _check_depends to validate this -_libsignalver=0.58.0 -_ringrtcver=2.48.3 -_webrtcver=6613c +_libsignalver=0.60.2 +_ringrtcver=2.48.7 +_webrtcver=6723a _stokenizerver=0.2.1 source=" @@ -78,8 +78,8 @@ source=" https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz - bettersqlite-use-system-sqlcipher.patch libsignal-auditable.patch + signal-use-system-sqlcipher.patch signal-disable-updates.patch signal-update-links.patch signal-show-window-please.patch @@ -123,7 +123,8 @@ _check_depends() { local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/better-sqlite3\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1) - local _stokenizerver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const TOKENIZER_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' | head -n 1) + local _extensionver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const EXTENSION_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' | head -n 1) + local _stokenizerver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Sqlcipher-Extension/refs/tags/v$_extensionver/Cargo.lock | sed -n "/^name = \"signal-tokenizer\"$/,/^$/p" | awk -F ' = ' '{if($1=="version"){print $2}}' | tr -d '"') echo _libsignalver=$_libsignalver echo _ringrtcver=$_ringrtcver @@ -180,38 +181,19 @@ target_cpu_only = True mcli cp "$SRCDEST"/webrtc-$_webrtcver.tar.zst "$_distbucket" } -# manual patches -default_prepare() { :; } - prepare() { - default_prepare - msg "Applying patches" - for x in $source; do - case "$x" in - signal-*.patch) - msg "$x" - patch -p1 -i "$srcdir"/$x -d "$srcdir"/Signal-Desktop-$pkgver - ;; - libsignal-*.patch) - msg "$x" - patch -p1 -i "$srcdir"/$x -d "$srcdir"/libsignal-$_libsignalver - ;; - ringrtc-*.patch) - msg "$x" - patch -p1 -i "$srcdir"/$x -d "$srcdir"/ringrtc-$_ringrtcver - ;; - webrtc-*.patch) - msg "$x" - patch -p1 -i "$srcdir"/$x -d "$srcdir"/webrtc-$_webrtcver - ;; - esac + # Moves to builddir to use abuild patch logics + for i in libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver Signal-FTS5-Extension-$_stokenizerver; do + mv "$srcdir"/$i "$builddir"/${i%-*} done msg "Installing signal-desktop JS dependencies" npm ci --ignore-scripts + default_prepare + ( - cd "$srcdir"/webrtc-$_webrtcver + cd "$builddir"/webrtc local use_system=" brotli @@ -272,35 +254,35 @@ prepare() { ) ( - cd "$srcdir"/ringrtc-$_ringrtcver/src/rust + cd "$builddir"/ringrtc/src/rust msg "Installing ringrtc rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$srcdir"/libsignal-$_libsignalver + cd "$builddir"/libsignal msg "Installing libsignal rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$srcdir"/Signal-FTS5-Extension-$_stokenizerver + cd "$builddir"/Signal-FTS5-Extension msg "Installing signal tokenizer rust dependencies" cargo fetch --target="$CTARGET" --locked ) ( - cd "$srcdir"/ringrtc-$_ringrtcver/src/node + cd "$builddir"/ringrtc/src/node msg "Installing ringrtc js dependencies" npm ci --ignore-scripts ) ( - cd "$srcdir"/libsignal-$_libsignalver/node + cd "$builddir"/libsignal/node # fix target sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp @@ -318,7 +300,7 @@ build() { # required dependency of ringrtc ( - cd "$srcdir"/webrtc-$_webrtcver + cd "$builddir"/webrtc export PATH="$PWD/path:$PATH" # shellcheck disable=2089 @@ -350,18 +332,18 @@ build() { use_lld=true use_sysroot=false " - mkdir -p "$srcdir"/ringrtc-$_ringrtcver/out/release + mkdir -p "$builddir"/ringrtc/out/release msg "Building signal's webrtc" # shellcheck disable=2090,2116 - gn gen "$srcdir"/ringrtc-$_ringrtcver/out/release --args="$(echo $webrtc_args)" - ninja -C "$srcdir"/ringrtc-$_ringrtcver/out/release signaldeswebrtc + gn gen "$builddir"/ringrtc/out/release --args="$(echo $webrtc_args)" + ninja -C "$builddir"/ringrtc/out/release signaldeswebrtc ) ( - cd "$srcdir"/ringrtc-$_ringrtcver + cd "$builddir"/ringrtc msg "Building libringrtc" - OUTPUT_DIR="$srcdir"/ringrtc-$_ringrtcver/out \ + OUTPUT_DIR="$builddir"/ringrtc/out \ cargo auditable build --features electron --release -p ringrtc mkdir -p src/node/build/linux @@ -370,7 +352,7 @@ build() { ) ( - cd "$srcdir"/ringrtc-$_ringrtcver/src/node + cd "$builddir"/ringrtc/src/node msg "Building ringrtc JS glue code" npm run build @@ -380,7 +362,7 @@ build() { # module on npm intentionally unbuildable: https://github.com/signalapp/libsignal/issues/464#issuecomment-1160665052 ( - cd "$srcdir"/libsignal-$_libsignalver/node + cd "$builddir"/libsignal/node msg "Building libsignal" node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source @@ -397,7 +379,7 @@ build() { ) ( - cd "$srcdir"/Signal-FTS5-Extension-$_stokenizerver + cd "$builddir"/Signal-FTS5-Extension msg "Building signal tokenizer" cargo auditable build --features extension --release --frozen @@ -423,25 +405,15 @@ build() { # use our libsignal rm -rf node_modules/@signalapp/libsignal-client/ - mv "$srcdir"/libsignal-$_libsignalver/node/ node_modules/@signalapp/libsignal-client + mv libsignal/node/ node_modules/@signalapp/libsignal-client # use our libringrtc rm -rf node_modules/@signalapp/ringrtc/ - mv "$srcdir"/ringrtc-$_ringrtcver/src/node/ node_modules/@signalapp/ringrtc - - # patch the sqlcipher module - for x in $source; do - case "$x" in - bettersqlite-*.patch) - msg "$x" - patch -Np1 -i "$srcdir"/$x -d "$srcdir"/Signal-Desktop-$pkgver/node_modules/@signalapp/better-sqlite3/ - ;; - esac - done + mv ringrtc/src/node/ node_modules/@signalapp/ringrtc mkdir node_modules/@signalapp/better-sqlite3/tokenizer - mv "$srcdir"/Signal-FTS5-Extension-$_stokenizerver/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/ - mv "$srcdir"/Signal-FTS5-Extension-$_stokenizerver/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/ + mv Signal-FTS5-Extension/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/ + mv Signal-FTS5-Extension/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/ npm rebuild \ sharp @signalapp/better-sqlite3 spellchecker websocket \ @@ -465,9 +437,9 @@ package() { install -Dm644 signal.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop # this should be in /usr/lib/signal-desktop. however, it does not simply work and I stopped to care - install -Dm755 "$srcdir"/ringrtc-$_ringrtcver/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so + install -Dm755 "$builddir"/ringrtc/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so - install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname + install -Dm755 "$srcdir"/signal-desktop "$pkgdir"/usr/bin/signal-desktop while read -r size; do install -Dm644 icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png @@ -475,19 +447,19 @@ package() { } sha512sums=" -b8c330ac0ec05b31c27c5e8b3a3d269fbd407fc1aa5b3deec7e27810a674deaf4e7075ac424753ba5ed04b6781710531c56d77038201e3cad325c9776cdd3eda Signal-Desktop-7.30.0.tar.gz -6fb62213d8177ac5abe83ea71a18ea4b1c7b323983c41087166658fe9c47c1fd39e5323ca6acefe3db2a9a9376b6f385b5f2c006154da3ab705741d848b28943 libsignal-0.58.0.tar.gz -6777354b60650c6c3d359714f3aff92a315996f3725ba05c74ed054d3c4ba5506406b30c940853b5ba426ac0271cdb4dd930a759c570f486a70e1f5adc5a2aae ringrtc-2.48.3.tar.gz -fe04fcf13f55b124f03ce9d516b1c53fc4f20c6a016819c62eeaa0500eda92c5a0c0d7dc5d1e360a27691dfd404c254e91bed9fb25d0fc40a27795c1b674a82e webrtc-6613c.tar.zst +30e06721b01e580414c5e57b63350fc42edbe837b0a60a9cd100bc6ab1758fa6fd5744dc3a35d991db62f363eab791c45b43e1d9d5c81af9e67685114ae2e630 Signal-Desktop-7.34.0.tar.gz +26780a0a6a529cee18f5c3b58f0395c6b5b630dbc8d2bbaa345dd7dd319a0e8548575c915dc16de6ac5d421fffdbe898f2dedb1fa3b4eab5d26debdfc1da515b libsignal-0.60.2.tar.gz +e5e5ab27dc3bd37ef577c248d450e70fa11e72bdfab00fef233aad84d3d8aa3434166c03267f6b95b69d593e9da2f37017b5b7a0913f68499f387354742ba50a ringrtc-2.48.7.tar.gz +64eed5c2a6f5a505d014bc4fa80e15b21103df1ea27825eaa1dfecc23c269f198a7e98472f29de7cae4ac7fa4fede6e837c27494b8ec4d03e36b85b029c64831 webrtc-6723a.tar.zst 84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz -be5b4e823543b79175a12314f10c6326d9f0d59f470136962daed4665887006acc05b48b40dc1b67747396d8f6f7d23be298c1e110ccdd35ff9b09d5e6b80bab bettersqlite-use-system-sqlcipher.patch -2e5fadff725f1d62e7134c8929c672ec88cae602b065480f1b799d34160daa0cb1ad0f5511e60676f81464ae8752c3bec7b3d7bc5a432533be004b4d20ac32c2 libsignal-auditable.patch +8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch +cee74edb504ee5ae685e8a449ac35fabf949c33bfee5905778f850c3b18e17f9ae9bd501c89a7fd2c9c81a5bb2b0af0c0b3c72e32128603b3923c32d2a493ce9 signal-use-system-sqlcipher.patch 152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch bfc8acdd13aa48d29c7657311733cc9d33c4899782efbd1ef6d25ad1698be4de7cc67e829324bc0309715d69ae37ea9f782cf54887317e817213e110d73d68e7 signal-show-window-please.patch -b11fdd930943ca327650e4738ed85cd6b5eea779455a5895bccebba98e449bafc6b0f09bcf4545f2b2e16644355664e9768dd6d4d62f87619207c430367f72c5 ringrtc-webrtc-renamed.patch -0888673ba687747beda61cd50efbc25095f4a3d26f1dd58bf003e3a0bf1d302c3f2ebd1deecf630fbf04aedb7b8cd409e9efda4d1e6fda63234c9a9b9755bff4 webrtc-shared-libs.patch -e07ae8544988d402aaf0fbd95ea36a64c94c59566c561132578aa6dcf8ff11a34058530e64dc204e5cadc2482f1401e74b32384a144e5e08017c663d0cf7c2fc webrtc-compiler.patch -88515d8b8cc82355c9f9b0f44fac83b7ff149b13e9fb102fd46036ec5234cfb2385fa5ad58a0520ee604b93dc4ddd6ae18a7005978ef207841645724ef7a9749 webrtc-gcc13.patch +10284e0d86ab88de161ae689871082194f689ce416f3ebada8991d5db707994ea1cb8b4212756dd93ba5a3469964050988220f18afc37e38f3404a6e17ec8caf ringrtc-webrtc-renamed.patch +98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch +fe78cdc58c18826fc4227cc8e9377980766229390544578f6a1a6f7322bc3243c066963b589323dbfe4f2bfd37f8859ad84f63cb3783317892e5ae3652270a3a webrtc-compiler.patch +48ab5c733e643eaff08ccbe839086bebbb68d397984ad7c5c5b68df8071f75d2dfe92c3f52d9fbf9b81754934bdfa8a67c69addd476ce4265b978592fb4ff9bd webrtc-gcc13.patch 87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop " diff --git a/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch b/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch deleted file mode 100644 index f0dfe0d..0000000 --- a/backports/signal-desktop/bettersqlite-use-system-sqlcipher.patch +++ /dev/null @@ -1,56 +0,0 @@ ---- a/binding.gyp -+++ b/binding.gyp -@@ -7,7 +7,16 @@ - 'targets': [ - { - 'target_name': 'better_sqlite3', -- 'dependencies': ['deps/sqlite3.gyp:sqlite3'], -+ 'include_dirs': [ -+ '/usr/include/sqlcipher', -+ 'tokenizer', -+ ], -+ 'link_settings': { -+ 'libraries': [ -+ '-lsqlcipher', -+ ' int: if 'npm_config_libsignal_debug_level_logs' not in os.environ: features.append('log/release_max_level_info') diff --git a/backports/signal-desktop/ringrtc-webrtc-renamed.patch b/backports/signal-desktop/ringrtc-webrtc-renamed.patch index 228c308..6f8a2b3 100644 --- a/backports/signal-desktop/ringrtc-webrtc-renamed.patch +++ b/backports/signal-desktop/ringrtc-webrtc-renamed.patch @@ -1,5 +1,5 @@ ---- ./src/rust/build.rs.orig -+++ ./src/rust/build.rs +--- ./ringrtc/src/rust/build.rs.orig ++++ ./ringrtc/src/rust/build.rs @@ -79,6 +79,7 @@ if cfg!(feature = "native") { diff --git a/backports/signal-desktop/signal-use-system-sqlcipher.patch b/backports/signal-desktop/signal-use-system-sqlcipher.patch new file mode 100644 index 0000000..22b2e2f --- /dev/null +++ b/backports/signal-desktop/signal-use-system-sqlcipher.patch @@ -0,0 +1,43 @@ +diff --git a/node_modules/@signalapp/better-sqlite3/binding.gyp.orig b/node_modules/@signalapp/better-sqlite3/binding.gyp +index c370c30b309..bf0207e6fec 100644 +--- a/node_modules/@signalapp/better-sqlite3/binding.gyp.orig ++++ b/node_modules/@signalapp/better-sqlite3/binding.gyp +@@ -7,7 +7,16 @@ + 'targets': [ + { + 'target_name': 'better_sqlite3', +- 'dependencies': ['deps/sqlite3.gyp:sqlite3'], ++ 'include_dirs': [ ++ '/usr/include/sqlcipher', ++ 'tokenizer', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lsqlcipher', ++ ' @@ -8,8 +8,8 @@ #include ---- ./modules/audio_coding/neteq/reorder_optimizer.cc.orig -+++ ./modules/audio_coding/neteq/reorder_optimizer.cc +--- ./webrtc/modules/audio_coding/neteq/reorder_optimizer.cc.orig ++++ ./webrtc/modules/audio_coding/neteq/reorder_optimizer.cc @@ -11,6 +11,7 @@ #include "modules/audio_coding/neteq/reorder_optimizer.h" diff --git a/backports/signal-desktop/webrtc-shared-libs.patch b/backports/signal-desktop/webrtc-shared-libs.patch index 3916fe0..f4bf714 100644 --- a/backports/signal-desktop/webrtc-shared-libs.patch +++ b/backports/signal-desktop/webrtc-shared-libs.patch @@ -1,5 +1,5 @@ ---- ./BUILD.gn.orig -+++ ./BUILD.gn +--- ./webrtc/BUILD.gn.orig ++++ ./webrtc/BUILD.gn @@ -38,7 +38,7 @@ # 'ninja default' and then 'ninja all', the second build should do no work. group("default") { @@ -26,10 +26,10 @@ suppressed_configs += [ "//build/config/compiler:thin_archive" ] defines = [] -diff --git a/third_party/googletest/BUILD.gn.orig b/third_party/googletest/BUILD.gn +diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/googletest/BUILD.gn index 14089f0..b7dc621 100644 ---- a/third_party/googletest/BUILD.gn.orig -+++ b/third_party/googletest/BUILD.gn +--- a/webrtc/third_party/googletest/BUILD.gn.orig ++++ b/webrtc/third_party/googletest/BUILD.gn @@ -48,7 +48,6 @@ config("gtest_config") { configs = [ @@ -38,10 +38,10 @@ index 14089f0..b7dc621 100644 ] } -diff --git a/third_party/googletest/BUILD.gn.orig b/third_party/googletest/BUILD.gn +diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/googletest/BUILD.gn index b7dc621..367f929 100644 ---- a/third_party/googletest/BUILD.gn.orig -+++ b/third_party/googletest/BUILD.gn +--- a/webrtc/third_party/googletest/BUILD.gn.orig ++++ b/webrtc/third_party/googletest/BUILD.gn @@ -133,7 +133,6 @@ source_set("gtest") { # googletest only needs `absl`, but this makes gn check happier. @@ -50,10 +50,10 @@ index b7dc621..367f929 100644 if (is_nacl || !build_with_chromium) { defines += [ "GTEST_DISABLE_PRINT_STACK_TRACE" ] sources -= [ -diff --git a/third_party/fuzztest/BUILD.gn.orig b/third_party/fuzztest/BUILD.gn +diff --git a/webrtc/third_party/fuzztest/BUILD.gn.orig b/webrtc/third_party/fuzztest/BUILD.gn index 57ee790..ba1d297 100644 ---- a/third_party/fuzztest/BUILD.gn.orig -+++ b/third_party/fuzztest/BUILD.gn +--- a/webrtc/third_party/fuzztest/BUILD.gn.orig ++++ b/webrtc/third_party/fuzztest/BUILD.gn @@ -309,7 +309,6 @@ source_set("fuzztest_internal") { # For RE2 mutators. It's questionable whether we want to pull this library # into every fuzztest target, but this is the approach used in other From d7b083ff8c481a69e5394c22bbb540597d0ae447 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 19:47:42 -0500 Subject: [PATCH 508/738] backports/libmedc: drop --- backports/libmedc/APKBUILD | 43 ----------- backports/libmedc/cmake-config-dir.patch | 11 --- backports/libmedc/hdf5.patch | 94 ------------------------ 3 files changed, 148 deletions(-) delete mode 100644 backports/libmedc/APKBUILD delete mode 100644 backports/libmedc/cmake-config-dir.patch delete mode 100644 backports/libmedc/hdf5.patch diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD deleted file mode 100644 index 8976805..0000000 --- a/backports/libmedc/APKBUILD +++ /dev/null @@ -1,43 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=libmedc -pkgver=4.1.1 -pkgrel=4 -pkgdesc="Open source library for numerical simulation" -url="https://www.salome-platform.org/" -arch="all" -license="GPL-3.0-or-later" -makedepends="cmake hdf5-dev swig python3-dev samurai" -options="!check" #test suite is nonfunctional with python bindings -subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" -source=" - https://files.salome-platform.org/Salome/medfile/med-$pkgver.tar.gz - hdf5.patch - cmake-config-dir.patch - " -builddir="$srcdir/med-$pkgver" - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=None \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DMEDFILE_BUILD_TESTS=OFF \ - -DMEDFILE_BUILD_PYTHON=ON - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -_py() { - pkgdesc="Python bindings for libmedc" - depends="python3" - amove usr/lib/python3* -} - -sha512sums=" -f211fa82750a7cc935baa3a50a55d16e40117a0f2254b482492ba8396d82781ca84960995da7a16b2b5be0b93ce76368bf4b311bb8af0e5f0243e7051c9c554c med-4.1.1.tar.gz -68d9291e73a68d674081314028c0fce7bbd4a7b78b93b7e5078117ce62f2d07318bc33ec95091ce677148ec3926c1ce653d0760c34e74b29257a7be59210f040 hdf5.patch -8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch -" diff --git a/backports/libmedc/cmake-config-dir.patch b/backports/libmedc/cmake-config-dir.patch deleted file mode 100644 index e1f43a4..0000000 --- a/backports/libmedc/cmake-config-dir.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -101,7 +101,7 @@ - IF(WIN32 AND NOT CYGWIN) - SET(INSTALL_CMAKE_CONFIG_DIR cmake) - ELSE() -- SET(INSTALL_CMAKE_CONFIG_DIR share/cmake/medfile-${MED_STR_VERSION}) -+ SET(INSTALL_CMAKE_CONFIG_DIR lib${LIB_SUFFIX}/cmake/medfile-${MED_STR_VERSION}) - ENDIF() - SET(INSTALL_INCLUDE_DIR include) - diff --git a/backports/libmedc/hdf5.patch b/backports/libmedc/hdf5.patch deleted file mode 100644 index bc4764b..0000000 --- a/backports/libmedc/hdf5.patch +++ /dev/null @@ -1,94 +0,0 @@ -Originally from https://gist.github.com/jedbrown/527ef81ff59a0dccf833da40fdd15a47 -diff -rupN med-4.1.0/config/cmake_files/medMacros.cmake med-4.1.0-new/config/cmake_files/medMacros.cmake ---- med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-03 09:35:30.675827163 +0100 -+++ med-4.1.0-new/config/cmake_files/medMacros.cmake 2021-12-03 09:32:31.894994147 +0100 -@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) - ## - ## Requires 1.10.x version - ## -- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1) -+ IF (HDF5_VERSION VERSION_LESS 1.10.2) - MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.") - ENDIF() - ## -diff -rupN med-4.1.0/src/ci/MEDfileCompatibility.c med-4.1.0-new/src/ci/MEDfileCompatibility.c ---- med-4.1.0/src/ci/MEDfileCompatibility.c 2021-12-03 09:35:30.676827162 +0100 -+++ med-4.1.0-new/src/ci/MEDfileCompatibility.c 2021-12-03 09:33:26.292942149 +0100 -@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const f - _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease; - /* ISCRUTE(_hversionMMR); */ - /* ISCRUTE(HDF_VERSION_NUM_REF); */ -- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE; -+ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE; - - /* TODO : Vérifier si la version mineure HDF du fichier est supérieure - à la version mineure de la bibliothèque HDF utilisée : -@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const f - #if MED_NUM_MAJEUR != 4 - #error "Don't forget to update the test version here when you change the major version of the library !" - #endif --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" - #error "Cf. _MEDfileCreate ..." - #endif -diff -rupN med-4.1.0/src/hdfi/_MEDfileCreate.c med-4.1.0-new/src/hdfi/_MEDfileCreate.c ---- med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-03 09:35:30.677827161 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDfileCreate.c 2021-12-03 09:32:31.894994147 +0100 -@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * cons - * En HDF5-1.10.0p1 cela n'a aucun effet ! - * Un test autoconf permet de fixer un intervalle de version HDF à MED. - */ --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - -diff -rupN med-4.1.0/src/hdfi/_MEDfileOpen.c med-4.1.0-new/src/hdfi/_MEDfileOpen.c ---- med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-03 09:35:30.677827161 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDfileOpen.c 2021-12-03 09:32:31.894994147 +0100 -@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const - - • The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). - */ --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - /* L'avantage de bloquer le modèle interne HDF5 -diff -rupN med-4.1.0/src/hdfi/_MEDmemFileOpen.c med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c ---- med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:35:30.678827160 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:32:31.894994147 +0100 -@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * con - goto ERROR; - } - --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) { -diff -rupN med-4.1.0/src/hdfi/_MEDparFileCreate.c med-4.1.0-new/src/hdfi/_MEDparFileCreate.c ---- med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:35:30.678827160 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:32:31.894994147 +0100 -@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c - * En HDF5-1.10.0p1 cela n'a aucun effet ! - * Un test autoconf permet de fixer un intervalle de version HDF à MED. - */ --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - -diff -rupN med-4.1.0/src/hdfi/_MEDparFileOpen.c med-4.1.0-new/src/hdfi/_MEDparFileOpen.c ---- med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:35:30.679827159 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:32:31.894994147 +0100 -@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * con - MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG); - goto ERROR; - } --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) { From ab9d5e96500626e8960be31cb60ca97b3f977d46 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 30 Nov 2024 19:49:37 -0500 Subject: [PATCH 509/738] backports/py3-numpy-stl: upgrade to 3.2.0 --- backports/py3-numpy-stl/APKBUILD | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD index 1c72a2e..1191396 100644 --- a/backports/py3-numpy-stl/APKBUILD +++ b/backports/py3-numpy-stl/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman # Maintainer: pkgname=py3-numpy-stl -pkgver=3.0.1 -pkgrel=4 +pkgver=3.2.0 +pkgrel=0 pkgdesc="Library for working with STLs" url="https://github.com/WoLpH/numpy-stl" # s390x: no py3-utils @@ -10,9 +10,9 @@ arch="noarch !s390x" license="BSD-3-Clause" depends="python3 py3-utils py3-numpy" makedepends="py3-setuptools py3-gpep517" -checkdepends="py3-pytest" +checkdepends="py3-pytest py3-pytest-cov py3-pygments" subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/releases/download/v$pkgver/numpy-stl-$pkgver.tar.gz" +source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/archive/refs/tags/v$pkgver.tar.gz" builddir="$srcdir/numpy-stl-$pkgver" build() { @@ -35,5 +35,5 @@ package() { } sha512sums=" -d01abb8f54738600ce36c8c44e1392957061030e7accbbfa0352aea4a904323a96712099146b311ce9518f243317c25c47cfb30930469602c0ad439de9f43c5f py3-numpy-stl-3.0.1.tar.gz +a08053ed264dbfd629229af3db9c38deed2932b28feced56e2d4c20476f1ba85ddc80881fb82330ea3f4fff9a3f91da20db7447050da5c75f1c04455a67538dc py3-numpy-stl-3.2.0.tar.gz " From a0687332256dce145df204746f6f2b2caebb5228 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 1 Dec 2024 12:35:57 -0500 Subject: [PATCH 510/738] forgejo-ci: add check-backports workflow --- .forgejo/workflows/check-backports.yml | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .forgejo/workflows/check-backports.yml diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml new file mode 100644 index 0000000..2cac95f --- /dev/null +++ b/.forgejo/workflows/check-backports.yml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + + schedule: + - cron: '0 5 * * *' + +jobs: + check-backports: + name: Check backports repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://ayakael.net/api/packages/forge/alpine/v3.21/backports + FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + LABEL_NUMBER: 4 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From 7a2cb83701fcd501f41a30b94717fd798bd687d7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 1 Dec 2024 12:41:32 -0500 Subject: [PATCH 511/738] forgejo-ci: add ALL_PACKAGES var to skip maintainer filter --- .forgejo/bin/check_ver.sh | 10 +++++++--- .forgejo/workflows/check-backports.yml | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 7a1f534..6403e54 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -7,9 +7,13 @@ repo=${downstream/*\/} curl --silent $downstream/x86_64/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX -owned_by_you=$(awk -v RS= -v ORS="\n\n" '/m:Antoine Martin \(ayakael\) /' APKINDEX | awk -F ':' '{if($1=="o"){print $2}}' | sort | uniq) - -echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages owned by you" +if [ "$ALL_PACKAGES" == "true" ]; then + owned_by_you=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) + echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages" +else + owned_by_you=$(awk -v RS= -v ORS="\n\n" '/m:Antoine Martin \(ayakael\) /' APKINDEX | awk -F ':' '{if($1=="o"){print $2}}' | sort | uniq) + echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages owned by you" +fi rm -f out_of_date not_in_anitya diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml index 2cac95f..c84ef2d 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -14,6 +14,7 @@ jobs: downstream: https://ayakael.net/api/packages/forge/alpine/v3.21/backports FORGEJO_TOKEN: ${{ secrets.forgejo_token }} LABEL_NUMBER: 4 + ALL_PACKAGES: true steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 89c8805846e863b0a2b5134929715866a225baff Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 1 Dec 2024 13:12:13 -0500 Subject: [PATCH 512/738] forgejo-ci: backports use its own label --- .forgejo/workflows/check-backports.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml index c84ef2d..b9f76a6 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -13,7 +13,7 @@ jobs: env: downstream: https://ayakael.net/api/packages/forge/alpine/v3.21/backports FORGEJO_TOKEN: ${{ secrets.forgejo_token }} - LABEL_NUMBER: 4 + LABEL_NUMBER: 1 ALL_PACKAGES: true steps: - name: Environment setup From b8f608772ccffaf514f29edb09fdc758a4c8207f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 1 Dec 2024 13:39:18 -0500 Subject: [PATCH 513/738] forgejo-ci: add clear-repo binary --- .forgejo/bin/clear-repo.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100755 .forgejo/bin/clear-repo.sh diff --git a/.forgejo/bin/clear-repo.sh b/.forgejo/bin/clear-repo.sh new file mode 100755 index 0000000..14110ea --- /dev/null +++ b/.forgejo/bin/clear-repo.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +TARGET_REPO=$1 +ARCH=$2 + + +curl --silent $TARGET_REPO/$ARCH/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX + +pkgs=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) + +for pkg in $pkgs; do + pkgvers=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}') + for pkgver in $pkgvers; do + echo "Deleting $pkg-$pkgver of arch $ARCH from $TARGET_REPO" + curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$ARCH/$pkg-$pkgver.apk + done +done From f853f9956df399159908dc460fa04daf4a78c357 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 1 Dec 2024 14:53:38 -0500 Subject: [PATCH 514/738] README: add notice for backports --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 75165d0..571e4cd 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,8 @@ https://ayakael.net/api/packages/forge/alpine/edge/backports ``` Aports from the official Alpine repositories backported from edge. +(note that this is only kept up-to-date on latest stable release as there is + little point in updating backports on `edge`) #### User ``` From 0a88d5c3a311849da88f6e956a7484716e72ac85 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 1 Dec 2024 14:55:11 -0500 Subject: [PATCH 515/738] README: update notice for backports --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 571e4cd..8a099df 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,11 @@ Affixed to each repository description is the appropriate link for use in #### Backports ``` -https://ayakael.net/api/packages/forge/alpine/edge/backports +https://ayakael.net/api/packages/forge/alpine/v3.21/backports ``` -Aports from the official Alpine repositories backported from edge. -(note that this is only kept up-to-date on latest stable release as there is - little point in updating backports on `edge`) +Aports from the official Alpine repositories backported from edge. This is only +available and kept up-to-date on latest stable release. #### User ``` From 9e7a9c464e62fdcec11b9db373af4c866d842014 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 10 Dec 2024 14:53:25 -0500 Subject: [PATCH 516/738] user/papermc: move from unmaintained, upgrade to 1.21.3 --- unmaintained/papermc/APKBUILD | 56 ------------------- unmaintained/papermc/APKBUILD.orig | 56 ------------------- unmaintained/papermc/APKBUILD.rej | 38 ------------- user/papermc/APKBUILD | 50 +++++++++++++++++ {unmaintained => user}/papermc/papermc.conf | 0 {unmaintained => user}/papermc/papermc.initd | 0 .../papermc/papermc.post-install | 0 .../papermc/papermc.service | 0 {unmaintained => user}/papermc/papermc.sh | 0 9 files changed, 50 insertions(+), 150 deletions(-) delete mode 100644 unmaintained/papermc/APKBUILD delete mode 100644 unmaintained/papermc/APKBUILD.orig delete mode 100644 unmaintained/papermc/APKBUILD.rej create mode 100644 user/papermc/APKBUILD rename {unmaintained => user}/papermc/papermc.conf (100%) rename {unmaintained => user}/papermc/papermc.initd (100%) rename {unmaintained => user}/papermc/papermc.post-install (100%) rename {unmaintained => user}/papermc/papermc.service (100%) rename {unmaintained => user}/papermc/papermc.sh (100%) diff --git a/unmaintained/papermc/APKBUILD b/unmaintained/papermc/APKBUILD deleted file mode 100644 index e400914..0000000 --- a/unmaintained/papermc/APKBUILD +++ /dev/null @@ -1,56 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=papermc -_pkgver=1.18.1 -_build=99 -_license_commit=4a7962c -pkgver="$_pkgver.$_build" -pkgrel=1 -pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" -pkgusers="craftbukkit" -pkggroups="craftbukkit" -arch='noarch' -url="https://papermc.io/" -license='custom' -depends='openjdk17-jre-headless screen sudo bash gawk sed netcat-openbsd tar' -options="!check" -provides="craftbukkit=$_pkgver" -subpackages="$pkgname-openrc" -source="papermc.$pkgver.jar::https://papermc.io/api/v2/projects/paper/versions/$_pkgver/builds/$_build/downloads/paper-$_pkgver-$_build.jar - papermc.initd - papermc.conf - papermc.sh - LICENSE_$pkgver.md::https://raw.githubusercontent.com/PaperMC/Paper/$_license_commit/LICENSE.md -" - -_game="papermc" -_server_root="/var/lib/papermc" - -package() { - install -Dm644 "$srcdir"/$_game.conf "$pkgdir"/etc/conf.d/$_game - install -Dm755 "$srcdir"/$_game.sh "$pkgdir"/usr/bin/$_game - install -Dm755 "$srcdir"/$_game.initd "$pkgdir"/etc/init.d/$_game - install -Dm644 "$srcdir"/$_game.$pkgver.jar "$pkgdir"/$_server_root/$_game/$pkgver.jar - ln -s "$_game"/$pkgver.jar "$pkgdir"/$_server_root/$_game/server.jar - - # Link to craftbukkit plugins var - ln -s "/var/lib/craftbukkit/plugins" "$pkgdir"/$_server_root/plugins - - # Link the log files - mkdir -p "$pkgdir"/var/log/ - install -dm2755 "$pkgdir"/$_server_root/logs - ln -s "$_server_root"/logs "$pkgdir"/var/log/$_game - - # Give the group write permissions and set user or group ID on execution - chmod g+ws "$pkgdir"/$_server_root - - install -D "$srcdir"/LICENSE_$pkgver.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE -} -sha512sums=" -623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar -c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd -9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf -943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh -d4c645a58e1a17a0a1e42856a3cc43097711a05bf3d9f18c77c3bc9874417f223552859042ff00b7d3dda0003f49a9ee568540c2eb24e9f8fbb3c055f3b6e0a5 LICENSE_1.18.1.99.md -" diff --git a/unmaintained/papermc/APKBUILD.orig b/unmaintained/papermc/APKBUILD.orig deleted file mode 100644 index fe78218..0000000 --- a/unmaintained/papermc/APKBUILD.orig +++ /dev/null @@ -1,56 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=papermc -_pkgver=1.18.1 -_build=99 -_license_commit=4a7962c -pkgver="$_pkgver.$_build" -pkgrel=1 -pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" -pkgusers="craftbukkit" -pkggroups="craftbukkit" -arch='noarch' -url="https://papermc.io/" -license='custom' -depends='openjdk17-jre-headless screen sudo bash gawk sed netcat-openbsd tar' -options="!check" -provides="craftbukkit=$_pkgver" -subpackages="$pkgname.openrc" -source="papermc.$pkgver.jar::https://papermc.io/api/v2/projects/paper/versions/$_pkgver/builds/$_build/downloads/paper-$_pkgver-$_build.jar - papermc.initd - papermc.conf - papermc.sh - LICENSE_$pkgver.md::https://raw.githubusercontent.com/PaperMC/Paper/$_license_commit/LICENSE.md -" - -_game="papermc" -_server_root="/var/lib/papermc" - -package() { - install -Dm644 $srcdir.$_game.conf "$pkgdir.etc/conf.d/$_game" - install -Dm755 $srcdir.$_game.sh "$pkgdir.usr/bin/$_game" - install -Dm755 $srcdir.$_game.initd "$pkgdir.etc/init.d/$_game" - install -Dm644 $srcdir.$_game.$pkgver.jar "$pkgdir.$_server_root.$_game.$pkgver.jar" - ln -s "$_game.$pkgver.jar" "$pkgdir._server_root.$_game.server.jar" - - # Link to craftbukkit plugins var - ln -s "/var/lib/craftbukkit/plugins" "$pkgdir.$_server_root.plugins" - - # Link the log files - mkdir -p "$pkgdir.var/log/" - install -dm2755 "$pkgdir.$_server_root.logs" - ln -s "$_server_root.logs" "$pkgdir.var/log/$_game" - - # Give the group write permissions and set user or group ID on execution - chmod g+ws "$pkgdir._server_root" - - install -D $srcdir../LICENSE_$pkgver.md "$pkgdir.usr/share/licenses/$pkgname.LICENSE" -} -sha512sums=" -623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar -c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd -9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf -943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh -d4c645a58e1a17a0a1e42856a3cc43097711a05bf3d9f18c77c3bc9874417f223552859042ff00b7d3dda0003f49a9ee568540c2eb24e9f8fbb3c055f3b6e0a5 LICENSE_1.18.1.99.md -" diff --git a/unmaintained/papermc/APKBUILD.rej b/unmaintained/papermc/APKBUILD.rej deleted file mode 100644 index f8c4908..0000000 --- a/unmaintained/papermc/APKBUILD.rej +++ /dev/null @@ -1,38 +0,0 @@ ---- user/papermc/APKBUILD -+++ user/papermc/APKBUILD -@@ -28,24 +28,24 @@ _game="papermc" - _server_root="/var/lib/papermc" - - package() { -- install -Dm644 $srcdir.$_game.conf "$pkgdir.etc/conf.d/$_game" -- install -Dm755 $srcdir.$_game.sh "$pkgdir.usr/bin/$_game" -- install -Dm755 $srcdir.$_game.initd "$pkgdir.etc/init.d/$_game" -- install -Dm644 $srcdir.$_game.$pkgver.jar "$pkgdir.$_server_root.$_game.$pkgver.jar" -- ln -s "$_game.$pkgver.jar" "$pkgdir._server_root.$_game.server.jar" -+ install -Dm644 "$srcdir"/$_game.conf "$pkgdir"/etc/conf.d/$_game -+ install -Dm755 "$srcdir"/$_game.sh "$pkgdir"/usr/bin/$_game -+ install -Dm755 "$srcdir"/$_game.initd "$pkgdir"/etc/init.d/$_game -+ install -Dm644 "$srcdir"/$_game.$pkgver.jar "$pkgdir"/$_server_root/$_game/$pkgver.jar -+ ln -s "$_game"/$pkgver.jar "$pkgdir"/$_server_root/$_game/server.jar - - # Link to craftbukkit plugins var -- ln -s "/var/lib/craftbukkit/plugins" "$pkgdir.$_server_root.plugins" -+ ln -s "/var/lib/craftbukkit/plugins" "$pkgdir"/$_server_root/plugins - - # Link the log files -- mkdir -p "$pkgdir.var/log/" -- install -dm2755 "$pkgdir.$_server_root.logs" -- ln -s "$_server_root.logs" "$pkgdir.var/log/$_game" -+ mkdir -p "$pkgdir"/var/log/ -+ install -dm2755 "$pkgdir"/$_server_root/logs -+ ln -s "$_server_root"/logs "$pkgdir"/var/log/$_game - - # Give the group write permissions and set user or group ID on execution -- chmod g+ws "$pkgdir._server_root" -+ chmod g+ws "$pkgdir"/$_server_root - -- install -D $srcdir../LICENSE_$pkgver.md "$pkgdir.usr/share/licenses/$pkgname.LICENSE" -+ install -D "$srcdir"/LICENSE_$pkgver.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE - } - sha512sums=" - 623d6423ee337671d546469e6bf1821005484192a1ae56d7b77f547f79102df50462e1d0144be13a0de9021c9d931bc974143b1e1526114627ba28688589d76a papermc.1.18.1.99.jar diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD new file mode 100644 index 0000000..23930f7 --- /dev/null +++ b/user/papermc/APKBUILD @@ -0,0 +1,50 @@ +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) +pkgname=papermc +pkgver=1.21.3 +_gittag=${pkgver/.0} +pkgrel=0 +pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" +arch='noarch' +url="https://papermc.io/" +license='custom' +depends='openjdk21-jdk screen sudo bash gawk sed netcat-openbsd' +makedepends="gradle zstd" +options="!check" +subpackages="$pkgname-openrc" +source=" + https://ayakael.net/api/packages/mirrors/generic/papermc/$_gittag/papermc-$_gittag.tar.zst + papermc.initd + papermc.conf + papermc.sh +" + +build() { + ./gradlew --parallel createMojmapBundlerJar +} + +check() { + ./gradlew --parallel check +} + +package() { + install -Dm644 "$srcdir"/$pkgname.conf "$pkgdir"/etc/conf.d/$pkgname + install -Dm755 "$srcdir"/$pkgname.sh "$pkgdir"/usr/bin/$pkgname + install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname + install -Dm644 "$builddir"/build/libs/paper*.jar "$pkgdir"/var/lib/$pkgname/$pkgver.jar + ln -s $pkgver.jar "$pkgdir"/var/lib/$pkgname/server.jar + + # Link the log files + mkdir -p "$pkgdir"/var/log/ + install -dm2755 "$pkgdir"/var/lib/$pkgname/logs + ln -s "/var/lib/$pkgname"/logs "$pkgdir"/var/log/$pkgname + + # Give the group write permissions and set user or group ID on execution + chmod g+ws "$pkgdir"/var/lib/$pkgname +} +sha512sums=" +630c0fafd53082bec3992234f7422c4714c30ad0fac240c6dc80091fc7d49b57bc2cb7365366ac015d2a9217c4fd561f0649f738cb0d90ea7a7b6355f9839ff6 papermc-1.21.3.tar.zst +c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd +9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf +943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh +" diff --git a/unmaintained/papermc/papermc.conf b/user/papermc/papermc.conf similarity index 100% rename from unmaintained/papermc/papermc.conf rename to user/papermc/papermc.conf diff --git a/unmaintained/papermc/papermc.initd b/user/papermc/papermc.initd similarity index 100% rename from unmaintained/papermc/papermc.initd rename to user/papermc/papermc.initd diff --git a/unmaintained/papermc/papermc.post-install b/user/papermc/papermc.post-install similarity index 100% rename from unmaintained/papermc/papermc.post-install rename to user/papermc/papermc.post-install diff --git a/unmaintained/papermc/papermc.service b/user/papermc/papermc.service similarity index 100% rename from unmaintained/papermc/papermc.service rename to user/papermc/papermc.service diff --git a/unmaintained/papermc/papermc.sh b/user/papermc/papermc.sh similarity index 100% rename from unmaintained/papermc/papermc.sh rename to user/papermc/papermc.sh From 88d9198feef5cffdc062664fee2fd25fc83642d0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 13 Dec 2024 10:19:17 -0500 Subject: [PATCH 517/738] forgejo: add special case for freetube --- .forgejo/bin/check_ver.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 6403e54..33a09e8 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -22,6 +22,11 @@ for pkg in $owned_by_you; do downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) downstream_version=${downstream_version/-*} + # special case for freetube + if [ "$pkg" = "freetube" ]; then + upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||") + fi + if [ -z "$upstream_version" ]; then echo "$pkg not in anitya" echo "$pkg" >> not_in_anitya From a053fd35f39bf06f4f20b8d7729c515d593daed8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 13 Dec 2024 10:26:58 -0500 Subject: [PATCH 518/738] forgejo: add special case for dotnet9-sdk --- .forgejo/bin/check_ver.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 33a09e8..c4d9df6 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -22,10 +22,11 @@ for pkg in $owned_by_you; do downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) downstream_version=${downstream_version/-*} - # special case for freetube - if [ "$pkg" = "freetube" ]; then - upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||") - fi + # special cases + case $pkg in + freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; + dotnet9-sdk) upstream_version=${upstream_version/-*};; + esac if [ -z "$upstream_version" ]; then echo "$pkg not in anitya" From 9ee55e001b7b8809d0ea0225a8d7f90f137893a8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 13 Dec 2024 10:29:04 -0500 Subject: [PATCH 519/738] forgejo: add special case for dotnet9-stage0 --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index c4d9df6..d2720f3 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -25,7 +25,7 @@ for pkg in $owned_by_you; do # special cases case $pkg in freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; - dotnet9-sdk) upstream_version=${upstream_version/-*};; + dotnet9-sdk|dotnet9-stage0) upstream_version=${upstream_version/-*};; esac if [ -z "$upstream_version" ]; then From 233a0983553e247b3798f98c1f7180bf5f2f57a4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 13 Dec 2024 11:20:41 -0500 Subject: [PATCH 520/738] backports/py3-rapidjson: drop due to orphan dependency --- backports/py3-rapidjson/APKBUILD | 56 -------------------------------- 1 file changed, 56 deletions(-) delete mode 100644 backports/py3-rapidjson/APKBUILD diff --git a/backports/py3-rapidjson/APKBUILD b/backports/py3-rapidjson/APKBUILD deleted file mode 100644 index 54cd11f..0000000 --- a/backports/py3-rapidjson/APKBUILD +++ /dev/null @@ -1,56 +0,0 @@ -# Contributor: Marian Buschsieweke -# Maintainer: Marian Buschsieweke -pkgname=py3-rapidjson -pkgver=1.12 -pkgrel=1 -pkgdesc="Python3 wrapper around RapidJSON" -url="https://github.com/python-rapidjson/python-rapidjson" -arch="all" -license="MIT" -depends=" - python3 - " -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - python3-dev - rapidjson-dev - " -checkdepends=" - py3-pytest - py3-tz - " -source="$pkgname-$pkgver.tar.gz::https://github.com/python-rapidjson/python-rapidjson/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/"python-rapidjson-$pkgver - -prepare() { - default_prepare - - # workaround setup.py complaining about "sources not found" - mkdir -v rapidjson/include -} - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - PYTHONPATH="$(echo "$PWD"/build/lib.linux*)" pytest \ - --ignore benchmarks \ - --deselect tests/test_base_types.py::test_base_values \ - --deselect tests/test_unicode.py::test_unicode_decode_error \ - --deselect tests/test_validator.py::test_additional_and_pattern_properties_valid \ - # -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -15d021491c64db53352830d8f3f62c8b48476fcb001f97c174bcbb9053d973eb135ceb92f14290a58f6ad6c5dfb24d02f6385c8cad70f4a74f5a5726aa0728e7 py3-rapidjson-1.12.tar.gz -" From 56a29dc807f8eac904374c7e42e40f653b1ba8b0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 24 Dec 2024 14:05:52 -0500 Subject: [PATCH 521/738] user/papermc-plugin-vault: new aport --- ...pport-for-abandonned-economy-plugins.patch | Bin 0 -> 2225637 bytes ...22cb0_support-newer-jdk-for-building.patch | 33 ++++++++ ...add-option-to-silence-no-update-logs.patch | 37 +++++++++ .../868_update-bstats.patch | 72 ++++++++++++++++++ user/papermc-plugin-vault/APKBUILD | 42 ++++++++++ 5 files changed, 184 insertions(+) create mode 100644 user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch create mode 100644 user/papermc-plugin-vault/2022cb0_support-newer-jdk-for-building.patch create mode 100644 user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch create mode 100644 user/papermc-plugin-vault/868_update-bstats.patch create mode 100644 user/papermc-plugin-vault/APKBUILD diff --git a/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch b/user/papermc-plugin-vault/1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch new file mode 100644 index 0000000000000000000000000000000000000000..7ea071a3c27a9ed7031047d0ba5b542e1f0498ce GIT binary patch literal 2225637 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 z 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ⅈyOrUC=;b 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

$@d5V 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%0Aj82L&OS7Uv2O~bIw6?h`}@A&?Vf^C9Oac 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 z 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%0DBP>u~ld=j=JNHIIj_A1zjsl&rC! z1B(2(;!9F#r!TvE;aDbK>COf+*7GQ$4_5h91`pU-<;;}p9jL(O{UVxV zttrH?0q)XKik|MJGZcVE4S-MgL;{ZMnxs_;(j&}Y0_XDT;jC83eGj#*Xe*P9FNW{>kO*GmfFF7fvC);FOeA|F zNMpwptW%rD$ywn7H2Bhn%)VRU0?xYadQZC%=u(gYj9K>{UFx!IF`ExKJS=R{IFT>s zK$lYNllX^^B{;!e!5?b$m8v{#iC&PWM@*N!wfJ${oHlAnQK9Hul9LH&wNP&c3xKia zAt8^yHSnMl@R=ayG3Iemb(pzvq5Ydpp3NdKAhC+#09)2HLddu37;x~v%a;xMG59mogE*)pIg=uX=R z>)No}RdBo5Vfcpu*3j5irj0umBaE+tI=0gvJ%{d)zdv!&bqp4qA?f@R&5Ja{vdL*wt?QRmaGMg?2z9l#CT(bi4}E~_94(2Fl3zTVSF`T zU?;CMlgkTLaw}1ye^^Wj@SyorRRYFp=hAWhg_=E!ZBg|W+jh5dI@RVlP-7LY)r&{Y&pY4{od)zB{Gq9vT_kX|8M%bb^CBN+@z~ zl$*&U7H1I0?%=_Xt(%AF-bVzt>%E3QUOew&hRLLS_siWeIBW_jar?pO7Rg*n6H`Eg zBWQm)TV(o9(kaP}FlpWTSyMX-BTa0mT9a4<@i%#>p<0iY%F;ZzLS1I1?HkX;hU|lB zl$s>&glw8zC9?s7pufni7-)-oYId?Fn*sU;;S|w=dy&vH;d_zVt2d!Qc}^3Yk?~)9 z=goP<&_yTr;vp7fwJ=}vjZW`;S?;)4VqpzGbyZlY3kWw#jo@G-qa(bH{u!I%kojXH zO54Y{$Ng6dijv)Nhua9Y{mPn#>OX*V4DNi`pb8@~Bj!e!A>6g>7##@x*~gT3)e4B= zQ}*qY6oHlOkEtZSnX%NU;+ql(Vv0e+J?`M+mkX5)N_Jb*hqC z6o&2@C6r4+&)QJ__ZO$_d;OWOEb`tAjw|8)-a~}^7>27pewfzN>qw1YKy-_)T(Jjy z0W%9e3Vwu5{7}v8g1KFOAJ^wV@z-Zg^t1;|M)^m)gHM-Cq)2X6dO%gR(BT)sBLb z5K#4ShFNP zTasr-i@T?n9#erZ4?!MjHreY^|J_}1W3C*-EE^Y;@^zSsPwc9)U``glH%q@&e*m9G zTpddMXS{mEe@#J9WMGr6wvn*z`vTo>@0ouWQ26F)c#anv+Rfmi=UuRCqKL}b`Gtr{ zo9|Ej?Vv4(H^-k#EF3!3&Cg+ft1?9SUE$|?YH0HbW1Wo&-CTkO`5$Rz{a#D5&32nNb~{kiw;IVm0hvJiZJBr zP7d@3k+I&zV2n8fiMY4px0mc zo)I_TiV;Hi{!r#QF3|*cGHK~Q`m3S9TnX+idu7}mZ@N^2{xsXFr5U_#KOE}4N%71a zoS1>pv_t2n)khXsLsm@gOHkSy(TXG)(HmY-kVa(sCh7%~nXhP`oOlCqGJum{c-5iu zw#e2QNm6Ck6>zPrqCHD}(P*T0OB;UAkjQtN){}`)F4XQ-)VGjDZ-P{KX z7x?^R59ft@a1i|ukU`7n-nc{?=#hP?j`}PuC{*me$>oLgThzDJFq;`^oXSNCvmFL? z6(Ff@x^~jqGmRgYztoQc5A>X!oYIt@NF>E3D*nkmyd{SBF)!leEc-+*3My!6B7eFj zj|nBYlHd+&*+QZ3+W6A$DH@S@t%$8aG}HS7fAEK(1UTM=Ch%N6z$$m%4sn#lj+;A+ zB_PeHz*;>1P=(z{YjyZdk?`a|n$mrRXr0{Msy z1b3*rwFw2fci!W##1x;}Z;}xji@$h>a^m@xl!OMs6wl}rHJ>4^_K%yTbBcsrH0yUtL>tm@%7Dslf&1}kiAg;CV z_$Eqhmo_6Fqf}?(dQ7fUx_0os2C#DYkkjnHBiA+<&bN$%yfTL;B0a@L#)(z1b)@D@ zJ4&YE6-=QF=LLe5BFPypM$)N1sHV_|BqF0dq7Bh0MkIextWgt)(y$2G13hb;0_U^S zK6RmuND+TxsY8i{#kzybu{XqW7uo4rXdJNLqKG>$XCbn(qz=cPmz7z6xvLt%n<<8Z zm8K-6agG7`%?z|5W)N zv}9JE+@>J&+u%et8!a76VW25Gk_VVjO1P#p!{Hj%<@y-LXpeTgMHtfE#% zUsLCOP8EfielKRr!4o?QowixOdu@6xDDTLC$QtTF^^50&Jv}%cK0jZ-^yQLZBus5j z*2j~eh?GbokSUtH$>6XN->RWDe7}cQkx$F`^CU21P|c6+MXp|h6ONs6OcksY>^=b~rsO6i zGvC^eD>S_vn4jzc@vO12qz;&a#x3;c$hthKZD&l#0r z?^cQFzLX1eTQ-HXnGVYCI1Wy40UCwhXJ}T*zXjQ2@_^H(^{gP-+;7HagGa%?H;u3H ze!c#sE$vrwhBf)YsCLBe|P|BtJ4 zh?1=f)@>Po*|vSkwr$(CZQHi3Q?_l})+xK{<$bL?ZYNuNWM}8fu_9u|{5n@j7d_#v z_4lE`A@xThFxpY2w^|G&dbjI*Ba_=kBI~fOT|H#$3dYWJq@CkR&s9CXGlGfg3QqH` zsiT2G9KlNX(!2!9vKe@MWcw1;Fj29YhAj;Z*L&nXi*Pi)$+oB!_3ix~bVT7k&YQEC z-h*W<96&{LMx0gkx93AIp8046O?~piZlQTp^hGbT^(yll7(_X`WpJ?fH3A`cPa~X$ zSXUO|#f&ISd0$!al=(fnCJHP$rDerI{x-nG>*}f%?z5tsgC5{L>&=r^1g3D9=$aC< zeNPWQM;H1$P1zyF@jwmpA90ePt!NXID8pH&xw#NlX(a6&Hg6vVe0z)kaW*p-$%>Uw z#!J@k_?Rfd-*r9#S*bQNU zEV9|A*cBv&2c`X^uYwFhvNZW5_;x|6T?%(G#w!YxWE^-NZCiVn<3YF0^I4Et*`AjY zU5VQQ6DRD*lfU9eNoI|?JuqGqYEY8C4XH#apYJ6y@-IPnpC^3-?K)xM)k-*#%v{-Z+{<^2@7 z(j!b8CjL|HWm${`)Pe<1EYuaUkY>YT{_Pk6E-pE7K}4iwoeXo@LHZ)NNA`L_p_wAV zLJ~nHjsR#w=6#64%@KvfW;LRBt~94y5x#AMBGjv2Y_GbiJ98Sms3*x{^dDnO+TRha z9in5*O8~;<(k*oi&^;Iu zF<(wF6yQJ$sbyUBP)2AnC;RLq!SB#sR3`nuaRtRp>wx>B$|JU(uOJVxf~}~0CgQ+; zYRMrJS*z{f6(TnwyJf_?kl%E|98pE<-9=tPHe29J32}zMLjI#mv@hoQ3V2DLTTENo zvLMu}V^AVkX|Q9%we60!O7v}LOfex&5b^vFIzVx-(|kD?i(Jd9zqTSezTj$=-DScV>xiq>j(T?nmkhn0A z8-DDZv5xE8==&!3u5zRHN5rf>;K_s9K-Ye%q0IJfp%YfC`CZKPf!z+|^<2^)Y?FfU z#wNa}8yG=>5d_j4-Sr|aN^A6ecQenscJ8AuuSFhDCsF^Ga|%XMUvmZ`jox&;trnxl z=oMk=$gJgS6rS7Ml1&_SiSRICL*ER1zPCU1{b(%`5u@Wtz##^a@XfYa|C)i#?NHFd zpjo!qazBXYG9)UZe~`i9--zQ`1l=<9on3wJ_O4Tkk-+)Rpm&Ei?VaZ5Rk=3tZy|^( z4Igtz)hw1%YZpY$>#MKqxZLfYL)3WK7di&;P9}NF$PfvZRe@B|3`C{A zb~Imb5{IsAk9bqMf#J3eTYi>{MyWc|)_?7tssr7P*ilG9)yI>}qYrBs6@{Wg!)RA* z4XdR`+E4|?4~$?8__pVV#x)`1W;?CafL1IAM$F$<#_O(U!WnaF+e?nRAQ4nrXSafe z>r2jU2XH-o9I=TzN7X zp=(jxz0p(U-&&C=aGnH*=$|JtdqYra&oIrev0zcme?Sz62t>3%qRJunUHIzQ4^X}4 z#tRRKPNI4a#(;}Yc_vG3OTM*o1PbT`amB29#`)}9mC0rOPwx4kpFV@`UnPlsIdzj0 z4fyH!YI6Q3g%?1Yh{?N?L~Wa{@o+$2r2$H0;<&#m>j`sBW@mPAXjV%#8#=9eFQIq? zb?7B5)!&w5lH@?bvy+`<*{^#~ufmz^4cN*}lP&TMCNXMYG!&VH8TF$qVCrj3deC+^ zeB?2#$GD|mDF5UkEc-YyI@d^&(NHiWisZ&(ry;U`LSpy9P-;##b!396Pa%E=kWukQ zj}-K{kJrpi&b1RS^ok!<&B;|YSqjM9(v^XL4zN}8cw$3@C))`7E*uz}N;QzE>#_f# zv`&%zPaV|zm&v0uhv1ICgVx9d#c@|L$3i|I!;@6pN_zz6EX86D`c#n&&TPB$$WmrV zB?lo1uwq?Gw3SZxf#^8dP3a&1wGsZ0s6$HKu%T=2v&2&z;GrdlJQO3=dJF&bP?O@r zYlw}UK?>(>iG={>3P_DrK&l$9S<79ap$U5W39N1P3z_I)~{EOKl5hgSWe@C2Uhg*evETQYiQgGWj9Rd9(gy!+Ja{9u& zj`@MuXE9x8r zu;t9wxNmCmd?M93e|L#EfyEw+SNY+!Au=IKdhcvYtoZRKi+p-`4#$P%5^i+ZxiKat zxJ`qbLmX!=5%hi;S%JT8o7>(*N<2HX;6PGA*PmwU8o1W*wR(5(^fe|#*NGJYs`79z zr+YjJZFMfyzp}CjQ;&XwiGV0xAJTI-cdxEU%|ORNCp#n9?LgqDS12|{xBk0xfDZ@p z6~vUdpgTIgF+#Me{REkEY7^X^-f<0`$Q&x#dAn>SJ3&K~)@)<9Io<{K#V z0uJ){BCY%OW$yJC9NwTwBJ?=D`sO0zUhp0|bK}+xy?IBUm>b#~G{>Zo$Jl z5cCMbl&Wl7F-R=b_=uAd)}}h2QL1;Rokfn^ay1?a?5onVA@=?nn+~(HvuiD~A@jDO zNK*BvE}dWnp*xr|5RT);J6aI6JZ1Re!PGesiFm+%=Lh|vIj#lrS zBxRyDIBk8NVUJ%6O+HB{8(VViI8b$!u-mUT%Ja<&hW44yg zk^z^kF4lQ8f$kWBcK8B~3%PK0`!3<4zUL9xfgFZQHlGAs1#`1a3YOrmN{4InQJju5 zojk$n2xG36e6(gGR46JQO)h0HzCJanr_*eL`{+)md#H5TgA1DesrgTL7n3roMEtcC z4KA>~m@n4nk8xOCzTym4wqtHisxZ}w=xO}qL?nhgv@)zAhXA(lH#)t)@Ik}0a==+; zd?DjZURBo=n8TLS*ZW4VDDRtbrhNq;Sl;${LoP++k)r?zssSon=N$jjF6D9#_qF5-$5d=r zL<&0F6hKjy9Z;oZr*$=VIOPe;!4vG9S?CsDdUi^M8K5t5(wJOl0wy!7AG`8g)D>zP z9W2-GIu0GJ%}3iaEbHhsSNLgkv{#gU3~>z=1j{YM3Fm}^gGC{5w5e21(B0l-{sObnpZ+>YOB<)ic#h z$HFr>{rQwG08(~m5E+d<9FtZrUab2yDvHxi5Nyx)jChn-UD!@bOYs-Q-_sZcdHeh+ z&r4Z(5AoQ=^TPo{VRS@dv+2^ZM93nT@~gAHZ0b}*CHS4u7Cu9~bez+*_pfyYby*3z zG-`neWUb_JtIdwsnFYTZZgD?4UOeI*#|g}ei6^=9BG6;ecQgM~Mpv{JDb~P!B4~$+ z)OU$>Z&TR(!Xw61~LQ4?+c39b9qpX@w!M6#w3Jd^&THSq6Ztol#qkG*g4=;#m%O zspD>bj>w@@KBo9w6puxIRJ4%cOq}Zxr2I+)brzyh8ev!fYiezUtx*+ppnUc}12~&ME%ls4h^Ep^$az z*0>WgC%xnT%lb(E?lF5Un@r5Bh&pBer>62+si3NUYxfB~48K7irSt10YRCn@+p@L_c%F zhq0oYa%((9nRzr*OgA=LO=77iXzpJ?C0Haw2>WBBO)Ter?jHX?Ya*flqS-u(zyz$K zx>t3z`<>6;TGiad!6q->7n6toRi0@!!qj$3V7sxtS(AigowYb!BRS=kw)M2`^NQDB zS6x!^SORQkdr4l2-Q1KqlD@HXFUWKjevfdPAOCCm^M0%kDVeqT)R{AVW~$9{)YleI zKrx5x*JE3~jDFh7S~>F{opxqAo4h%g#+S~@YE9E&ukL1OcP2x2V)=8cVDK}3)I)Br z*wAf@B&v-G{Y`BqnWxh9P2>BS@)K>FspZ7!t1O3pwYK5&4e(r_UjJR8 zs>EsjYu#;+pQ)XFLT($I9U@isObiM)t)oVIMc&2O2JOYql>vBPCJXDA%j7eYu3sCG zED@q$gOR%Hs&;WumYcE}AF&=-HkI;gH^o98a?~ zRhB=XrD^g4|BsF$O0;2_?e;3Ad)-$@%TVr}w))n4$Gq8Ct`f3?z6~GX)SQ`W)g;qk zeB?F22dVJ5pRjAqqdL`SbX7vtXkck(-7njkHma0OoKcUhY-@FLR?o4gumtcYFHdvz z@DvY&P30jeWVC=yzC8P@X4*D}s;Zh%a}7oXuyEUH9Lr;frRsq2jaGct{4Bm*Q|Mh= zn15ObS}tYnQ*SI$(wIKt$@Hd z#jj4}w`i)F&h+Mx-jv~I?g_Nz*2DIa-VAov^t12pPv)qpVai>|Z@uRz+kH*Kq)Js3 zFl$=|FXg2_K4;h1jWVoDC6jsDQcwK|=hW0_rg-Y@3h@O|v1gY^SW9Js0d9_xCas=b z(@{sknyTa%JiwUjgob7Je<8Txh1u?C&0?~xhX9%O z7%f+>r^Abns!FsIR}Z)U*i%oQ0pAUqfxsNcnAG|WoeclN1V3Fn+DV)BA023M1o3lK zL~H9E?1?Oe58+Fh8=W=Oh4JizN%MgGpFgj^=LUJGYm&Wrw8=FQlpV58*_w5VJtM@m z9K-?a0K12@cAmYw{AfL}`J02QN0vZNK;mj$b978BA0q1bQ~>hhbac&lsIjslIWJQb z=MH(>h^I08LQc74iv#FNnT@M`q5C?&%<=QiYA@B9B;U`!Q)3TiNp{SGaLHG*&K?~9 zeu8dAbRuWxP?ggppIAln1n*eh7lC@4UR8mbtJHsr_7cfh>tnI!s%Z>18nCI_aj>ns zIREgooR6Zkz_q&qRll<78g)1gID4I%WiLO5$acv$sK-A+kE2V-v8I5|UNm_(af59hC3p@B7Vdux?0y&Gcl6Ej}8wMnyi zmsceE4{fKUHn0a*9736uN%vnWE{HA$XR`@wBwWd5YXGU(Xa=#n;zH z&h)X*txCSOMkQ=qb|yX)SkN>Gw>t7{EkXDVLAF8NR?cm|wR2Qu0HX0|Z<1R4)r7b4 z3T8aDS0F4`kxE>p0k0osv#Ysk8;qF2z+|0=zy}PDCyYwMvFZMn&tb~ufuejFb3y?F-Llw%>fum0${iFXF&MR?4Z25RfO4S`o z*3?G{udisQ%2cY-t19XF1O(M!Y*P-Sf2G5To{TlM;y~!$kw>#w?Sujw!@q@QCR(md z%XQlx02!u|(ib?xm2GmcZVHWZW}VSTq1vGQ_W4f=aBdCI5PMJ*!{$_t9Mnv|tWPTW z0c9B-dXZc%V=+_6x^{-7Ej93}emBvcZt&ELbGLUXqn+5&2v~-*&|W6W zat1ytV3wz44fW(Anfd^&_doN)w%-7bX=1FH{HR%jxLRY3#l7hbNZ;(?4dYIgh z7emD!jr?Nv0CvotQlBZ8pEJK zKv;B(-T=u(%`*Zo%#V?ux>-FH1S_j2Ui4VN71+Afo=BhXF#6{@1*J!ow(}od9Ih4Dtr{!{PMRfXaYLpJBQC9ELvOtx z(TAN1$jaq489cVxvo3TvvhIdMcYvHYqh_Bs=+1j|1bOZlIR6->dh4dkzJE%?yHwyZ zCS)i0t99~<5solWghu?oy$!haGi`At&U5gTGxbp=chX|Pbk@%rozTiMR?V<Q6eHdCLP9 zwx=jzpJ5wLKeu-)4%6f1zs>w9n^iQj-7@$gre&cuWnEwep)%aKjkZv~yJnn``M1Ci z7hbHJy;z?}MU#xQ%#rslHz@Fu!d_lD3qeyt*U#5Z9=mI5o0*Pw7<20h<*n}EUToFm z><9(Coe9A0oBd+@?^Ihc2zUc-m_I@M^ge6flX=?z3=9mq8NDI=M~4U{zEyy>;L6H6 zED>PR%5#ibas_T$F@8GIpX}8qsBWVug57>bO83wO!$BU1%|fInI8DX6l;gHLz+VXabr7C;)) z*@$eC`Ndg)w_m=2=~iE=<^k~v-&=*=uGvzAz1X9HW*HyAGPu4zd8G|LDFX8#@!Pxy}q+y?g!M@V#f*=x_ViL(FcOJ)6KqmK3IOhzIIvERh zPWeNXZAoDBtS@qIucdYQg7uqGfhFXa#Q9cocSTQ3Rw z3)lzlBKEAY$$^`q*I0$85F=<4+r+B?9o;&;{gb!-*d;!!{v%z9gzhQ2cPe@b%p1qW z07A^znm~V8RjvzTA2qeEtNd$6ykZn|kXju0u`GJ)`JDIwstztpG~zz7!# zHsm9Lz$ZfK3)^`a!s1*!ANwNQEr(P()GXR+BffkGjJwQYXaw2si{yDOv6aa*^i=!Z z$H+V%2b*|NMk(v`s;6UG`u+g>zgsx42g!-~$N%W27c5)%tHTk?KK*p_hV^8{5HyL% z@>Ulg6vVMYY>yDH?r9?YFrYL8^GBD$7!1C8F}^D=u>ay7hPVg{Y52mQNhz;M{b+OxQ|0 zNBHy2jk08W`+J-_+dKMmx4ylP_jw{8;NnZc+(om>WDL$Nd>WZmMrS<4kYAjVYSVXc zq{zhNX@efXnhF^X%Ib0&hg^Vd+D#X);10q46$)OF9UEi?mKKJj2kSMW6`6+7Y|5ru zMtUoly^cyl#)k74*iibz^s#>S6!)*LHLbGy?_LH=u-dJ*`7jh;Dh!04E4^TTCg$nW zg&Jjc0LcK|57JJOQHv$>)T9^U$EmMTY6qn#`#c16N!fe`(~Yl!?>C`@4$SdIg5)(<9iywn92-=NKB&gzOVO zww5GdA{M<`8HjtW>yyGZv9_{NpC+l&?)j^D)5`HHt8JU`?oNuWQ!B~3!E(j|qFqmT z2=8PQD&J))zVV=?m=W24)|m2=UmGDqSNolN)J%=_M7 zf_wf>VI;{F(!!il9`o)rh6m=ffsEf9N{HYj_^x_-5Plvd9LwjCl9+v0%pUpsBGXOG zJwJYwNfUHLwE1ApT;UKruQuH1|LGv-#4UTe?arWB*;bRpV9L@rf-ox-_aTf>mH?EH(>Kxba4_iYo<~2cuPiyXuGPJmnQ6=~ z^9O7@hrZ;J1~m23KUVD8񧱭W2YF9jfTYIwI7MtBNvWOTz8Q*MBva)POjDPS( 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%0AYm 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⩔w4R+C@Q~Sfg%zR#zp^^{CBfFWo}!>3Ov8dycA`*-75A2! z@0Fh;jPMmmiYuS4{1Icy?N@As$b;-e=RC`QQDg$g18(;8xciH7MJ(Y6zsUg@FhH>b zA$qC>DQ1^oyu`D&C~gk+8B5F&g7g9n{DK|eD&0wEi>PY|u{|UIidu5ZWA=t{JQ6{j zZ2Ma-ZrG+3U4I7exGl&pUvN&McOU%j4m+<|IF^-OY61ImJ7S7Y!2<7O>5Ei01FTqI zhXxM$2979`?-l$%I$1Q_^Sk3mC;cJ+cO@V1|7ppmWb|Jb+AI|*C2W0C_RJ8TT)IAuz;mIkf5`r!~I4O-q9 zq`At*dj|F6Ms}aLFTc_3v)x;!!}ROa`E-wu#}Cj20t?d|y}GU6QO#?(0eHTNNB=eZ z+B&_NOk~Gym^#sNzD|gO8zJy0KX&y@Lo{rG7D$f zm2jAgZ@#|#L&L~iXf>UT1l=^cz$moYn1g1wuvZ8R!w}4*!Fb?2IvJ)Hc8uK@JMxC= zlI*5e;gO_Hrgjml&-`9b8#$}QU2i1-0{7XA;ub75df|68U3#x>{t7a+ml;eNd}Y|_ zv452rZQK|;zws!Q{f`~*bekUFl%dzrM$CFpNt5}Zj*WIx9;_OC6u{xwn3p9$1yN=S zEi254OjD@aB zjvCQlK;J~d^zK!Y&Q?rZeTJ@JI#{UtS_b5zJxs2=BD5>t9R5*gq>>-c4l!caS>$)u zcn-0DTvFntHoTttFEm6@)^5%ap?MNKH(r8RO zn{GWfS!Nx&H6wJ9TH(2LAx$21TB$h(%bb3khbTE44#Sq&YcyUYDiA?u-BcKQJ&44b zGB#3h|7o+}6Rgm-z;Dmr{rj$J!yf9yCnEur(ep+4@YziggLc$T2gBN9^Nku#1XiNB zgSWg_W-q>u*U#F+UP-o^>Sg}uyawp(yoi1yNU&!?;6H?tOH$lWma7#v+A^pt(B-&* zL0eAv=xGOp2O-p*|u{W_Lk2cQ}gJm z7~SlWFZ6WDs;$hOr3#qNrts`v?F4Fp0*i(nB+Da8kWLS30IyaU*nsbPR%ubINn5Er zVqj>UrsGmE7S{!foI|0a&1prXBYR^2qR65{*<0DKHJyc64D$heA+aY2l>t|C1^e?^ zZaUF>A)&CmN88Cnv<{}*lV7+rb4YzueT$&(c)9ox2T+qTUPyTcXR zb~^6Zwr$%To9}w|KKG7$&O6?H&wj_f>-+lhAN8x6RW)nQI=cKt6nd6G(mBb zCR-BWnbCgw_2~H{#*hiFoB8Or1u8VfDWDOf)16vMNcie!5zIV0?Sm`^{ADPq9wE~8 zbG0xf;2N^vngi5z$yVL!O~TC=0rb1y0JKQ8h@tA;W)=B3MDdy;i2M>DpN)JB1Jpk_ z=`=dWecz9V9)liZ=KFpOGIp>BFk8JPt-h%gl9YJUII8EVQxJ&N(nseEr-S`PC!a?A zh_#|2;^1Fl{R9`h+DZP0Ab%bN7Yns@(YG2XGtWN3|4xJSRk~5hpfo7{FVmplznccd z>>OP^|MO%oOLavVRS1m_-XGQp5>P&hjf{$>t)x4Q6jV(KEc%O1HmOsN+z!(^dA_jk z2IC`~7gD!uclT?z3ctZD>?S0{Vxb`?@048f9BZAsjLDSrJ#FLHZxbzTo z;N9unZ>JF6&4Q<2wz^(JqwGOka%I*;8{>Rm4ulao%5HIR9=enEsjH>{WxXULMjtjr zQjFK$1fL#I*305yuEz#}Lx6}2bCN}<>3e=?9@dhpWhk@je(0z;Xo6xmM9UdKlzmG# zHN9XK>V>CPTc3nyu|2l<|hB^#_m`+280c-X+-sX zU$rF|UMQ8tI8}+2bgOB*PNk9-#oimu484n70US;`eRRN@pMJkB>N?9!z61hl!eb-I zcQjQ~Huuezi&$3sxWySqbI~WG+CHF$y zX!IydG=*nI=1r!eF_UUfqEz?eNDfi{Mq;*9NWC%?%uJ+?3T~Vu({p~t)W4l`rkw~7 zDGO#5u-I4)l>Jn=Iq_#D(++B{N<1M(iss4oxNlw2<^W28H1TQ32cM$PQ;f3g;a3v4 zVs~lLM;=0ar1|$i^Kv0V-m_5XJ!!}O5a{Z;?R#o$UfQxc>XQwBBE@_qI zO-DRs0Xg7J4n3&(j|PNH#d4nhPo*#O9j+Fq;A@4$AeZD^-Z#wgb!42 zAPmIjV>{%gea`~X>NYJe))&=!D*Fm##yMH+=|F_pqBF<(;|L^sajsoa0eL#bTyJj6=#27Q- z;dI1%?~BSJ*o^7<y<09FO?RrJU^YRGUo$6^sOsJTo$L`fB-BPug6ANpTV{26} zkMW(sDcI+e}aeaB9m_Y;Z1Je^93EqSo1)OE>{eha_|=I z^+Mj(nae(robGFG7thsj?8J%^Ai2N47cON-S^V@#)qSx_%h@chEZuWn+SFLtmo7Jr!YH+_}pm08>Q z(?$5TczHz{`pSF5esm6w#Adn;QPZd1J9H<4d}kJaG1Xz0m6 z1IQ2Wr{L4wv@LM_m}+v*Z@iDPKSe+E8voobXVBpfDdE3AfZ>|p(dKlIOdfFfv}PPd zTrypOk;t%kb7ri$SUVXWLYQy$8aUs`C2yIj%bNh2o}>FX$5^}noLyTBh%diTUPj+? z_`|ImBY0zTS#$;dDQs&_;bI)-xMca@Y`ghlmQ39~gl;qU6y*9;2q zzt>Nx|ME%w+bCT`Tbj~irRo%Ow_xv8>m4s(|o0c7#wgLZnR$3d&?fUEb(d6&0_a`{N zR}W*tzN_Jsbpa*)ZQ%NMh?5e*=PhTBX=Xss&>CNgw|$`*VPB|*jl{jHkzu0Ijp!ZJ zqv-VE*9p`UONc!{6Y6iyIo$`d+-G2c9{QV8tkJqVgoXyDxcXmo@W7ce>k(Y>t7KRR zEuf7XNSUzfh{Nnjm6dNK_BV}$2Rw4?HMd*zX*3Q~;wgyYz$_F-+DO67tDeW81GuHR zm+9MzJ~|L432Acb>qhH471(~LKf5llm$9@m#%2MS$V+hllG-$o+s0dGc1$pOHt6qi zskbpkXbNj*;jk=a0hW?ZI(Udiv;WkE3uYLDKEyKDS36J)x%*ys{$VlKuu4>|dRU4ROY}150W@ZD%pU!WHZ5^tIJykqOlDSqbV*3kJ3OBrN50dNIzBA1e7Yvx9je~y5bW}@wYMO>Xe%dOs#t5$D}pIw^0fb5$VyFHLmpENq7JR}0biIP}E=<$t* zoAY;tXCic&b9^&$Ioa!Zr@_$`E!W1*$5K>-ONLVkU7i@ZAbg^7ILVBUyi4`{$iMGc54c05ID?wyQpDzT#sczqhgo0x|uEx`@$I~L- z|GXak{^CA!%QWOjk-&?Sp-MBxQe_XazD5WCrM&ikNB{O=3hXq>am!`$IciD zGAhT(;_eGXdGrp1*0y}rG+%xW*+nz}nT6E^sHOXqxf&M(#-cyzrbd`{V;(DqO$EB4 zbnj{=r@6B3{kF3MiP%Tw7Aj?WS)#8k=Ucx@kS-^)Mo5Pkt>cwEXOx&>=%?6mpQU$o{d0YvrXD4`0h^CGPbx2pjNt z!A+|5eUdDb3~LhH5g`I(=dvLD2V>QNeursFq1U1 zb^IT}L(23Yydae|`#C`*zKozC%qA%jswUwUNJn^MSO-e9(0p}2fUsXc{~Ej2YUTOH zs5{CNEh$K31Mwf>vw;aK)GtzP>h11xIG)CG^GIOO1=bu<4MY*)h~wpAtWl>@NK6(f zkh}4x$r@9QNWF|gk5NmOp__{oNWL~w&0NjGrUsmSH70IOJ=B#ioP5S9k}zMz2@^3k zEIE9ow%N)PpXtqN1#F7;|0yjn*Nn2AdgLwW$N$-y5H5;R>}6n;Bw*-)^(OJ#b3FqB zD7_VFiU*M4kIu6$0LEZPdsCVWNZ`={oelG%Lbdq`DB75P>D*05ro+b-`yt|}z3Jo8 zZQ%PBca7KZu)VF!Wdzu^(D8kwSYL6(^|oC;+h_zOc&x}vfv7q4Cp@lQFrPDM^gAAfqo1^74rgU{$fBd6|-sX!7{{srI%m0hv#r&Vc z3nwJC5ZIiTs3QZ12?{TzO+_kYwFYq0Q8l4myFJS^9@3x z5)YW?>cZT&Y~>l=*RKvdi)l zwGW|wQqFz99*1kCKLvb9%0emxj-sJ#)ji z=@(*-zEzJ*r-!npQu8sY0E?Et`A&gky8+L89lECRj8U)B`{H?@o&;&ona%WFi#oVUpg&8jCqlXYQ;3 zo!bcb)_HdwRg$0Nw@u_z`+i1rkue*iRSl(S-_#vf2B=S7+O!aDG=KSH)Sj0L<59tH zEq7w3(R@nF)u)(eQaCGUt?piGUuxo)ZY)Sy|3z2!D4P7$e0!I?ucL)xdk37J*&~LP zi>DMM)Td>b<-Rw~<)41JW(M|Ss4DzN2zC~f$K5@emd-wpYg2(v2q)eKe-MGM(2)rg zugs;oSZ?PP?wF|-agP(iQ8}ktPSGlP;Q)Jq!d2E(^PNRJ{)vYknHE3zWW46tUvyRK z>A%%7zbu_p?LiCMs`{uW6&+Fhox9e2YCj76t>pwzE!^#y$1N|eL z#C!kRwFc!E-mWr-94c20vy-L?TTz$^kNm-MgD%cMp%E?LSVFYs78$EdHi2qlvJL&Nz%2T* zfvZsiW`~U?id7|r9A8k>3wR_S$I4*oSGHfQr;wXMIa@U+O|A0*nx3L>5lJ=5!rDiA z*Hvk3a{+PoN`X&b`*~ORN)1Uw+El5alI;rXib>vQdaAYTb*h}IS$W3zvT=^g<%g?G zrc+G&aa3_C<8k0wBMJyHkF*5ugIqZs&Sxu-f# zFw$j<&Qt40_iz2=Jf2Pv5yWoRH=fPb<~?4u25Tb#fd{K9hC}rvTeSw3Pnb#wS|hPc zKIsM%K(y88xM4jfEaE6B?sBQTte#f}R1jlW?I&`Wz7lT_BRahr5R6SQn#2CJc!4s& z4_xg3sLE>twmnd&lGYgXRNCAWmX+?j<%3vaVC{VK%GfUD;`8^7KsKGRL4Y5fP}2G$;G43rH|;COO~EE- zQ-zW}j&HY-a@b_p4^qxtn>hYZBDWEKq6 ziu+jQt((8HFEFsAWYlJ6wpA-9H!Y%fHefUBWZp;Pvf$a5Q|8L`bjYX);W|y-DR(Xe`K3(h|q zu3fiO>EW^VOP-NOVn9%QR&>(-aypQjy77C5j~EqAn2fc5^Od!ofPj#FW>atybU(V4 z`NRZv%F183(mx6%~BWAW0$s(rA1y5%;b~O6T#q0XkVBPU>AtdhZ84 zCuy&feDi|~O|U0jE_6~5A;0*5yO!rP`Hy+wH&AVTA|{fZbC&NxWg9TFz@>%qKNGz+ zn~lRN+;sv_HD8s@n*R>J9gZmItlGhOGEZ7R^N#j%{=E>ZOJk_i|Gylwl z$LS%}_b6(ELY2Pat$huVh#sVBX8>(mMv0x>k9g7!m8NiaZJC(cD=XF)11ZD}SzdC0 z3^T;#>s{%|4>Aag`o;PtdL>U5B{kMWN`v*z{i(6kJ8i0TXfM0aKqtIErRdbA+)>1{ zRvSBb8o_D?*hqcDnBR~}hPrkZd=?FoWs?pSsNg* zU!n>DjJr`g@dIZw{$|sWpPpPfoJ;oYPx*754sLfYJeIx2GTFw3k2qe!#BB4Yi#U+r!lWER+ry)-TP9QJTJCYN%InbZiv82!xXw)tC! zvga>Izr);um$k*)BlXPA@k?_#R0hwY^}A&iLYE%J?j+AAh+Za*d6jzpVDa6MA|x|m z;vhIlgw7!CsbEakRd{2ZWQ!c3yV+1%7O|9;7DZ|E0xu!pj9pEZvL9hcBNaL^HK)oApn7-ET1msUQ!H(C=q-u7lnOw}I%H zBgb@RK7|T1NuVRW@%p-uRV@W9#NemG%?g^DsUXfaQ^GO{8jr-{91Q66d&_e;cES9)mMA}Lx)-gR_^CImR<8y}HLUhuKnLZsNmc%iQ%@)ke z*0K7*5^RdYKD#V+M!zl`|7TfjO5at*paBk5(l9*V7uP%X*UyxTU-uA&w~P-;d1nQ6 z@y($>bc>sa2)_fGCNjKAx=cZ(LXGsuff`9FD){a2#3 z@c+*y_kXl0|556dN9<9BkbLcU@XrBZsJ3-vLDi5vv~*5xXs}2^xyYiBKHH0pH1a$w z8_Ei6z^MR;HGjnI0wgvQ5_KX{1eLKfuZGDZ1_A-F=BNzNvI(3AcEr@wq##SSKChFF z-IJ{0dOtG!z_G%tLPY_nOPw>DS8zv}4gn?&-Vm2giABSbsNh9%`ufGp{~lLOg~3XA zaE!kA70AKm%`PvO&wqGR}xwu*vJ@t}dWvU#lP++15g7HeK$0{zj!S zLy#X_$ z(aP>f37@LMuy8>JwNMgf7W!TBTm)!W}DJ!GT3&B z+`E0?*3uqrGt1WkEWk9432c|DnJFZ2^$hjA0~dC6GCgD92pq+>y|c;a;pSTm16L+^ z4O|A(j>an38*kaGj@oey{^3JA=UT_V1cHoQ|7RhilAG0kf&w@+AQ66bl7q(#$4XE}7KN$UTiL&e94r(os~hRwRQ2xk50 zt(!JJmhaOVPEZ_p8}XnfHp!c)))MP$*)b+h-1$yS!g3EWJl#o_#M*?FPQqbmxiLoG zD~?KoKugO~@!Y@f6c-)*13wzIr~1M|DHSp=xu^@Kaom3#i}$n3;;KYLGtQg(u3Yw) zac?!-&FApv4=Zo`=^iHl?H!i;N8WWH1|lB7DWEu8hHc~!@Lu*|ldVE{81vwo`WM~Q zAXR3KW4ihK`$7*iJJz{ws^DR5_K&++cw1YewO%fuez6HZJpy9U&Uc!FZC-jtS7W1x z;OwLbf=Jy@NqxKrbw}6~y7M>f!XK`T)C{$m1Zcov8fftjj*mv7-Ig45ZWQm@{S}_p zt1~i$wcNS6CQ$+7Kvujg(-2+1_b;z@_vf*;8a-^dBq#H*nq&l~-)D6Ed`InL zFFO0YZu#VY^sgv14`0u;HntZ#L9viS1+mjA%d-=!MP5081>+djP z{+D6I^}o+Zw*T{zN>1cIC!#F%F%2A$PLm!!7K}>C9aQ4#tgsXzWAbc@Dw;4=CG0e` zRbHhROA9>2t)vCHqR&I~_tK;7$)uxZ8c;v!<@)<)FiuLV^RJ=3?-l`yFuhK3Eisq( zuh|>|pYIznUtX?cg`oPxWGolkO;&;BT0lD2A@>TiiE7`S)%AJVzT03rT?H8mm7T)9tFLyZ&)!0E|f8-eH5SlTptVTMebH!5W%zDB8I3W;NDi@hFbm96Ofn z*U;BiBb*OH5i?r;3B@E=XX0>aTxF#QN)eIp=Aj66^=1`b&^at{FtNbJCA|&En?hgy z#?@!iTpu#>d6%GA63u6IW45#DPI@Cs+c4H6EV$ITY(IPk2HW~0h)mXskZw_jmvc9sG=0j0nS>N^|QUNM!o@C5nqPleBaZ38A zGS#oBMdtK*sV8%zgou*%*7F_l$%1vlrk<*dj$lu@Tq!LrEVn2|PfTZPR5K+g$TWG2 zI8{ia2i(gerxuB$?V<}q1kbQfuIks?_CO-xKTHJX;DAo zp|X%_mb!pFk?0DSX_h_KHTsJGJy}Qt`qC8*prOXPD+#Y}!C4brpK{hJ5$@!>FTCeaYY!%>t!fK+HI7-9rICye&I;PeH#!W`iNI+tHB8Ji z*|IHc2J~avD`hJ2kI+^njSN$4tA57eYu{{avk{!oLA#$!)zdGg4_#`q;X=G=EakUQbM3UE6o^%9JK~ zJr>rdf;fhYSr9LQwpCU1$w#E$-j zieqV}IkfWoYK+>L=83i)bX%`iwY}dpBsUqMN9u9lnSZ?s4NYAga3MEpxa$p=sxUUi zYceqOK~Jz5uGraxHmA9Q&;COyuqrOk+DTCHDdKQ0=%o>-*CV|D)siJCZ+Bca32nWe zSl9_=d|cIm0`sg|I_Ns9_%AxXv#Zgx0z(aG*wOs3PP@cpm&9ZQFCLzgq_92eR?9_q zlUQbNI1J0TyB%2iJr~^`4AJ*^N`txa_irLkVcNSIk-Hr0{g?CVKMgbQP2%Nt5WGWW zW8bP6ON;i$Hc+xh!;K$nA`y=X)C7#5kO+{gV#4yk;<^}1wp9(h4PJAqL+=xE%lO~_ z!4V`er^)-9925F4$uV^Q`wZyjYGunHr6BoF_!XrA=aXcH_4)JMc8kk`fHLGvGny>7 zjqqzk22LmhJ0{PXB~GBfAc4i!pudaOkxw9zda-4(Rl1gu8R==hu<>@Irg1QGd~Uqu zcb5EP>!KC4>(BNh+ap_^!mHP;%MQM#&)c8bj~ii42n1kP{P5i3md(tjo+23}J&uH@ z@KC+U0w~czjouJOYvI6&+@=i#$d06jF;`Aj-PVtVAd+aQo9iY8nncKi82w}s@dGs3S@7Ud$903(vf2xUV z)#xfaYgqVFyvK)4PP$jpRN(J;mj57Fy%OFU8{&hPz_$M@q$s^_z}j-VqdC()WL!{F zX!{yoP5X3ERX5LMm2i948@fsqYyjjXiQ7PjT}62X57ku9m^G@4hDAB(3a@pG3Km0y z`J=jeCJYOkc_CeLg4MCXlyA(|rmlAayGojZ&6dhPl9_j`+jg92(Veuj)W}vyo5DqL zKLBV0FeR2LE`mOcDA}}Lp^^1YK)rj7N8`1KWh8da64Eyxv5fPt!5mWI$1k%&w5!jD zKOD>@QNoaQ#b9f^&hPXI zUSo|^Xe^2lDL`BCI%4clQHTe33ia42lu`j}Pe_>M z38gY`z^aH$BB8$@G|_Lt3eeD)4IDtKByea7hO_^SMdM=eI%XEr8bF1PAb$~B-=l*L z*sbZDhy-H&LNyBDbsQ9fx5FL;EOsA~d<)C28l+E|FGr6^tGt_ENghVbQ0cIHX;RIw zgZ*KqJ!2VUEM_IBphb0grDNw#h+uReLIFrnuYrjD z#O$u3VhQ)^C96kaW4cEK;caSCC}5q|sAgi9@G6S(6iRxfgwkes#YXA)GigM#+EC~R zN}121C4b7gecXGx|8E(`H0qGr+No}n*+J&_9?8hZ1r9b@Wox_gzK6xH!gfM7uy`e* zq9VnAL@^kKPOTkWTs~^e$nq4WXb%T}pq+SR;*1~=5!>Sm2cvehGcUC|VQwwXEGg&| z@s%!hqjCzPX@kJcJouKO-ibX0MW=|n)QqnJ#OsqvKPi>kB}bo8-kTCHv48-hqplu> zQF=1@Wk0OfVRDBBAQP>+jw7umy}z;I(q)&cN_`Q5RF8Yn%4nD!tHW?R(ho$jVw;nS z53xM+pelM%Ha)1yb%wt<^zZ&!!UBn;JVf-%BMnh30GH{2j+Iz2%EYIS_z-MD`am}v zZr$Z2Fd3^TNB#}?D~Ov7xs7-h-yR=yzuAOMFJrb;O@dAS`f=&6jMru1+6UKGBv$K; zkA8DY0rJZGxybmg$B!u5JUpXejg0ZNKH*Ud`VODC;YBnyj>S|Fl^12`V@ zgoMGZfB|>VA5LJh6tOHYC$h}@*0m1gpW>;(DC0fC<04QJYLo}J6_966bhf%7e>8(K zQbTpp`d**kdFQS$llKUHYJB#DE`_FS72PvGyT_vK86! zM#gADF1*7WVx@djmeb1WC(0G!Ad+UK0d2I$76J8Weu;I>$K@bB55a{aXdf_xLin(s zq|BTBws?5l?wsZ|s?T5K9p6Y}BzZWCs4r#8TdS*a3|4}}z#%F4JeD=iPtFH7ckO)& z5MMKRzj`@NFNKKom$zw)t@Kewzz#NHmL5rckP25_`!tmyO6+-c8tfkT@1wE0;BIh| zqbLk1XpHnC5;R}c`Y06P%DRS^70QsMai!JQa8M-3yY>FL<<(h_I708#>Uf#~Q=1F% z9O+8+^W-bXYff9}NQgRT??iN<;JfT*T^}HK;yApKYC?I8*L}=O6SXBPY`XHM08!io zFM0xf+|LL1JVLbz29bHge^p~pJauw~`BKxl$$p9Jk5SWh4y!8^RC)OskmJmnlKc~x z!y-hJR%URe3th>!lj4y^wK0`UgOWC%9c-|Z1nCPG$My$&O}99@lpEoUvk+RsY7e{$ zY|OCitv!_t?|liP!+|16Mj$i3zp_lSsJ4Wlp)O$ci~b&^JH5XKejNCg%1WdMYirBg zn7el>{3EQFuW9antrY#WR(j3TTU*c+w|K>(6MY1J7S`2ql!r*LfYe`f) zt65m8K!-huD~YVU$nmEyoq;jC&hhGogC8YxCwi0LC!Z%fj@q6-&dxZ#P?$^4keGyr!@hTn#TH}wVy_-~V0Vc>0 z`S%`5?b8582a6U!+U?LED{l+U(f8wdxmbAEveKnTbVTb;XCjNqsY?|SCR<2|Bkdp2_yAcmKd11= zK=bse=>xDJh~GuI^7V!%`VMV+GO1DJ?lL1wh;npOu-6V4hRKLZoMp^EmDhzM}A`R?s95TAT9khG5i!1Vw zLe6Z9laUSE^8}_FWyKqlW1-yFQ|lndgu=Q;r1q+S%>m+8^O~|^8TS?`@tu$4fn2b+ zxs7o1J^9uu2bTqIu*K;nJ6)M3CrHVd>9c7KE>ReGze6oNh_<=dHZ z8tqo@sBMmqqYr??s7u&v*Tqv!VzKKojXl%(>*zds5egI)5~Yc2uY?C7&Sebw@1?P>uzS6omQ*xX`wwAkDo?4}$ufKDQi$(+J! z7$m3fp0H6{rX&;NoHaB&gv)8hq4|k1o39LPff#!lnhypZk!K#kDXQ)Jz7!iyU%*65 z8o@#_^C`Gwl?j9e#E&_`DF-Quf$*f&QBJ=fUo%X46n0YC;#q$>XBGy}{BMF)zZ{>;`B5Qn8M1ncwq9v)g2t1$EmdfZ~CAZ4AI_D{t z!nQ-nutt$n&Yek>*h(jVZm?>ol*-_@eUW_Cc$N5J_vgFC_YklY1C=MHM-b=Q`-1Bz z+vURXMSvj_TrsMPCzh<5vBJA|tsqa5@euYai5DSu7%+slCp2$}SbI2uF@Q)xrtig) zwgL-*5`3=FhKEf-GUCpA)vM_YOoZ^e8zTxUh^1nhlJp&x5`Kn%BiMGobXcgWTUCIq ziM+SN%Qj*WXBKMx!%`5=&8jBXN5Maw2`Lgz_2rWw!y3vNd`6L#Tv7Xwpsunn6pG}% z;UGm=9u3AcNu5iPlF^q~F9!zra+eBczkjgfJnm@NDyYP|czGgszKqPu3lEV#L-<{l z3AL`-x1*~nPix!xCwZQBsa0b**Aomx5j?_a9KXMqyGnx5xS{pvH)wvye6D9rXV*J zLps$ONg(Nz&eEojN=H}S3~Y>PIa!;g*=n3ynyreriAg!C3|WWh?3h{wrjBk?OWkCc zTD%_hiZ*&V*%|A~gZOV$8?qMJ_%qdcsT<~m_4$>~k*O>k(k|VbDC$KSeJkr*mmO%S zir9W}^a-i_j;f)sZ&DSBq8Z_GCWE9a?ju$4=ikt?4r>b|HsYsAX9|qV(@?1{t5Rft zo7$^7CA5&9q>_jEk%CjdkjB}))XVMqq7Wz|CpMoxve_*gb2Wgtn#an76~x3)&feJX zAC2}D&}0pA%CZy9R^pG)Tgl@1o|-X34L|Cx=(z-~m(7#o1)b73Or&7}rJ&{~ZQpFO z5=+$7I;0>B#tr5-MANUjDO$C>dRhjwu(WnRMA^yXD-}?61uvaeH zc(yw(^qe6K%-$zMO39|GNz+rew6jYY>dwgDjO0Xovkrh%-x-Q92x|O(4NrWY21Q|q zHTFCUxmB2PgzBL%iITF~GU-k}YMs#@*eui8;*<+gd7mtV+Iv2FMNabhW|~|?>>kUY z=N7ucnx@c7+cjjJ>Sb>zbJ=fFFW7T?VX?eF2|hhg20j2URH<7=mi~BjtGNsJfkwXZ zs#jdsv<(Ah=h+(9bbvarYX8BuK;{apC0jQmGzQKqJMv-7v%Q0v-*xoz+n8zZcy zaeoY`GUhD~uhrvbij$&)U{nUCs}r0O^G(Bi4m7~H2?92*hr&bxe-arT^U;Ak?_RG| zJ2mPjPg)(73Ki!y-wQ$V$EV-`;x);t{4IbEb4N~#+3GV{i8GLZ=W4atyBnvds5N}) z8aks0D~Oa;ingQWOxx(A`AX$&+`kF3I5Mok61r`E$|>0l#pM3hSY=s=z4Z$2ZPec& z8udZq0G^fL=s+KbMIWR)u;jn)CUKOe!+ovO`FK$EIs~}o!!f?K|N246_}#XW56({O zJakOu+$8ew^)tk=(l(|?vUi#)iv>xppOe~m73r(SR|ANbm)uCjA1~cBMdDt)#;ovT zJCR#lKHN`-JCvl_OyEaO^0k<}sjQAzKf&0jx|woJ@QV$toohG|#hi)Nce35VFS3!* z_#$?V5&N4Q0~pM0p;gcC~*4bAsX6_QF!_$Jxj|wUT_bqJLGT=D@I*V zO{+T--`0&n+GwA&d3>^%N^tnq_{L>=)zE&D~EiCVEDPh6`JU& z@di8CM$aLdiM%~0Wd}N@-nFvwCBL8uLEtEyOI6{%l= z6uD`XBG}&k^s)gg@QeW!uFiCLg(OrI2j{T3=8QK?eh%AG7mASZTclNr1{@BHB(zy( z{V}^#Rleyq=0YvQQO>o&5Z}2S$!MnihZ4C!yFdKwo*L8TT7qBExWL~m-fqFKPmI|- ze$R)dKi%D21}MeV3BIw>Q8?BP`HsHd!03CH_P*<>RIFvD8ejPKJ$-=D=D%5O8KKQn zK0uj?dANl9wnY=b8sJhP*-S|PRf)fS_Xl=#i#^G}MxHW=}BgZ`Lk5$Wh!6O3zv{FREo=ooyiTp}4QLOAjF^Y}-u z0h_&A(HOzKsI7#f1I9IpCRvtfXJHv9q`DO1I45gG&7lV^_Un_cATSFM(Z z3+n+KVmL>5k;$}iBIlyA+N)%3lHaZ$Eq@vEs($Oq!K5G{d9?VZ_|2DIdO};JLfB!> zSwZoFfqV=)H65>Jf3oNxNVug-I=K;}$lTM4Yc(g?rj}K}&V8~sg14l?6-r;x`}qmu zrcOX`XAt&sBF*Es&vf16#E++@f1Ydlfq6ClEmBm8^sl-NrvE1TQ3t6TS~=MN6Z|x& z>o};YVd{C?TX5sri|9xj6&`SBrA^i!kS9jCX;*XF`3twG&d=>EXEVDLkIULzsqMB6 zBK3%pAb}juNq34ZNf`K3pAHSKCZ23z6qh!SIPs)$R8Z&c&exi{94Z^S-v2xwJU_C0 z;dYb?lpxIJPb*-X@1=jO%Pl)AZO%}-_l<8KPsBwWFbv24yF;xq9k-)A-O>!iUe)5tF$f?y0)DMW?z^MGosyH6^CaiCmuM^*;A?1_abKIhW+kAr&hKSH&(PXd1c#VX0GsNcH_@*~& zHFA!u5`S^VJ$r2aEd@?FtIBw$Sr%p{dB+td~ zVBK(*Zyi5A77?gpvsf)SU`nct*H+i}s|T8_C(-Rw0b5+RJDBt2PdLGpIlJm7K8a?r z@GP97byL~It5`3$Gf}3gtl-*<_INkd!|yUKGX{!WOmL@E+umFyLr7+g9)6lrwUnOD zS4oRj>pCjS<+8U9!*lha(nUsgX`bm)c{tRz1lUb(UC_&DH`1zyKne#2j~FlV+K!|b zwE4w5!=+o1%VZN6Y4t6`fm**ocRXvtEZPJpWbUD{@gmGEVTdqHKXWZ|eDX zX-f0yAVsd>BYVcZ1^UMAbCb2Y(wt-ZE$gSW8d*p7n_k-{(9c1M0%pYeX4yXm;XJdR zos+QMpjI6N-J4SF3|Q9eucThYkvU6FNBjcd7hFiM_e#o`@V(CSo`eR=#0t2b2rlOY z_>SZ)r)tz8w)9nwvngQsgLCj&JrN5)hgwug-L%H4c{^*K#+#+oSRc|O+bVnZAF+$I z;OqkgBDx|bZxo@Oka$uSk4(k!egP9!vn3vUgdvy5kH|v;&L2#^pB2VzTp!e5m-?+a zCoQ>A#jSUo>Q-;ja6FcBDDN=hT)_S~%2-U0gx0kmJU>VNs5DkpF;Z1jNByVJlLh{) z$S+V6{2lIpEd^6*7lNSd|380!{k@%Zv~{zvvZwd7v#r#Ui&bU&9ZMT;1rkzV+ zf=svp5019MJ`6pamVCly5{4#frT4g$l7m7PH?Qa}k8|y`Iqt~Gg3F>CN9R=>$?H5= zKBgB;wU!@lTXxxQTEC*|TsdungZLnhEz~0V(fIssuOK=z-MT=qxkdE3RsB`TpAn_L zOy-8AthKhN3m3+|4VW7P1oNeD(-@uh=QxhJaLxa7SVb-;7EFw)L$*41^sDj!o9Zg8 z6L~}xO%!I{IcRKlDSulnctzj#rQ<8D+X}J%8pA+b@++|Vk71aE7pYl?nB5#`wY`6U zXH#VFG>(vxicT6v)hb@5sQV4FMg@iN3P*~Tqj29t;7hSNaQ!up_E{@eK33d&>1oBK zdX>w?-p}X?&F_#BUMQ8Q$?9OI<IJ8(FW}p-v>^LXMdy`#!meaE>b81U{5L-oLe(e+B=Ph} z^RG77u;3(W8^W48`dbsR`qEgmAuF#+E$3!yCp`gV<3EP2R|45zqyGN?|yP zr3qgZrItgf$DGiTrgoKRpO8E6n-FwNL(eagv0ZThMad%muf34y_!t;x`IxhR6tj?4tDYg(E z6_0(+M@tY+-f_Ts1&UQK;nLMazjkk~+q8A-2fE@v8sXqM5ZfV<_LbZj%a?5>@3APL z8`9$>**jfYTGbcJ^C-f^Q19qtv<%VdC)?v_`uPNoTU67rx1*{X6|?K%8K-;JKrED4 zy<&+=k-x9X6o4b9f@TaF=bLLDLnqdANb{_zDkdF#q7Ua)B9zP=boXiauB9t?xnmnS zUne6d11H_1N~;Au4B%4&nqsgVSFnQ})N{DkO`hgt|9}^2e7^J6*B%sL2m$YjH_+Oti?Sg_$@!H>)1 zjg?8cj%|n1d!u3{n(r>hwUPlZAyFAtGcA{NrnABs@AqfTwJ0BmRydmu#?CCFIWjfV z^~>ILJ^eyfcv1zyqH<3>d@CxZw;Lgdu{i-`$?E=H`_u(uevp6_NmDDv>(rnWs2uC- znqHktspeERi^6-)%Mi1d-0iOb9u1K%E6+vKyk=#H85i#RS4r8?aWWu$)dzXZl4yV_ zbrh;mAzooOzeh3fWP}+upGGgT6smbql8Sgy;9O~I#$QGVdIc@@eX%Kc*?VgRz@r8- zb}>;Z$#s}U^#bqW`EN~F;B~%TZoLL4XBDgCQ0ccjL-7iW@xwq^+*OimcRCxef z$bazTf zNOvP4g8$8X_q{9L`@8zae>2V)2iW`j_F8+dwdR_0t#5J}ehfhzRcEmMNawP7VMItY zt&5p^+yAsgbC0Fls7h?hIUGi}*e4vhFjy`zp?i-~PirDoP!tHunaY;vpg!m}8L5y& zT?x1KMP?LlmMjJqZi~`La~m~p==*2&f-1XuQ9-=~^Lcjn&$TbIi6&?={ zaDeU`3;3Wy0P9fh9n!)|{IudSBJ|SyGU6h_ib{0SBDekbQHZP#_-tcV4aR|GeE5LV zl;R$OF7Vsm>zPWMSb_wtEUhe@{1a5wX`d7@m zF*f#%)%Q!_PQL?_vHRsuB>cZH4M1<`^^J8cjX>JwRz`GSNAQn#dWZV80jhbK4gx~o z4+4Vp-koj&zyAH5-l3YC=z}cnKz|20>N-0R4?yh#AL4tEILiM7X=w!p+5H`0qP?g? zA^`LW_)y*he5CSEfd4i^v`s7xt^N*{E~+@W4FLk;uK0I0%b&;TKf(gyCybrgB4<5;G_<+ zwfY5X23Fv(c`@z{PrGkBsU_!W5X=m8qGdo+ypzd`fwSlBN( z9CM^kVS%D3{-x5w9e#sD#!ArM))r)`?<8*U3#PErYZqLANf%&ZzgL=v&cDGVt?MWR z()(3&)q5~%`Vb&t`Ae1gxc&x-jMZKD@QZ?+wC+~lwIDHogY#ZNcHDo9<3CmQ3!dy^ zC%XdR@yh}O6Z1VD70>^R=fBeBf4pHPmPP`)z)+%Zu4`xa>!Z1OCfH)@y z#1!rk=y?B<;I5(o^uHpH+Z^!izwQm2zniR@U;@wL9yD?6FQKKK6m87^EWlqW?ruIp zf<#*o9Rh*~fTzC4p!@FE41!X?!2S2YTkPC}*zgb#Xn?VHf9SfY`6cjw9_`;lUsURS zi2#fgI+UNGZ99Gm4QP>qfeN?#EA(;o0iUO!X2T8uI|K|;RQIYwYv`BI(t?6k7JtRP ztL7a8!bQL=2F42DNdgwv4@dg)FM)sc5M}Mb>T5t#;sq?k`#oI6-Y>!Rtt>2bfnkAO z{7$bQWcNqd|L3>d16$v172u!(IPP5Oe;!{Cf1g81*YWQwsN(6jHDAD-3kB>i)<3a< zZ``N94=pBv=pr4?FU|9l?KVNzhmq=siLD_Fya9 zzZS(>=YVg;7yC^bP*c4?#|GGKKOFNEzvQ{gl_07t{&zEsJ8YF!r{%{0ZUV3=@;>%Q z>fgrxn|a0^HkVOPlR9wUcVpOnYz~Is#{Qex#vL|{%drnP@a9C^wSoKK2TZ>W&hqya z&i=8RJRa!b8-bg@kL}0t+t{psk4?C5+_w#2a{;5reQYPr-^OP9du-2BSl18&2nY{A zsN(*>(ain3*ndU7>u#Fa-=9Qx-|GHHuD{Xi{h95a z7UTW*QljyHr29Kb)1Uc%RDHW&lZnm$E8Wj>k3Vz$C=e!iuO{Q$|3|LBSC#vj@JGq0 z`*k_p`9Bi=sO0l^W9eO&@}r2*eLCiz{~x-)8D8(`e$+C!-{M00{y*sc+AZIa{kYp* z;NG({8~Y#0{&;r(+;{!BE&6`pDklC%zQ69M|M@-naR=gkzrp#`FUkHK2Y%jn{WHyv zi`W6H<%i>R?w2(8H#hza{o{JwyH)Ui9!TrI2mRxk_@B{#Tn}^K+4gqp_t5XJ0R9>O z#~|zdsese*@8REDWAh{Yok{Vd_y1p!+COW@&aa%b_D8K;@0r3*}K?mklJU0)3 z-=1g^$XF3rf*i~NgMvU8OaQVpAh0qdFf=g-JuxsbG$f#<(R90=>We^Am%Ar8_nF7Yc!el>vx=k%57Yh2@Efr2)v1z<`5;l}X=_j*j8q#}isw z+W&*$2{kn}0sWnW+S1#r3VM3Bx&i!5F}}-h6hI~6&NO&Kd;-; zNDTMVNYVM#URT^U+alGOD_*f*jNwZ1wUviRv6rjrW`d$G5Gy2Yy`R}bmK>U2hzb*t$ z0iKD8iRC|?iTrP@KTiC&E8Xs&F2MiW3+@ch|GWbKbT#p>uhzFP_$LHletTE=pKkab z{~KL%FAop~;_meid1Y@T4U{?u2rAuqPJU5=caMPIzyPqi|2;Css#qwZsG_=C ziiwG#dmhnMYZ(_gJ&04#cweq2HaYjWib$>6iaj~mKv#R^fK2S=7yL83n|YZQj)@FK z`8g~PJ`W`z3yqWF%G*IkXiWF>H zAJZy5AGBNqX}Kx^KOjFJsOOt;S^%gy+;u)kv2Ymr0{(`Z57sjo3y%%|q-C_n{-qiXPvw_Z4i~bR)aY zVdHQF@QPM3xPnUD$j%*kbr_1mJ?~9(y1zCoqxgbs8jIJxonFm=mN)QFryZjK;g6!Z zibL!-tntmVV;?@Ub#xx1g82?qw%^`Z^accJ$aI|Nut7IM*O7u(7Li<4wvLB_o!~8Pj+0;SH@dGAZNKcDC&!)*HK|Hk+-5#<)+t)c?a}Kwr6t{9PUa=A3g4pLLHB#qE@W(mF2Vh zux6g19@uEfWOV%D2&LvG(FMSt8r9aaXFSh(`C_Jf=cB(kVnh`XJ}5 zZGo_}O2&?}VkpdsHootiM@*{4<@7;@a7%bB>^i`tR;G_OXN z-{JtOaOs`Cm-F2Fmwt8@qoU6Ug+o+)TRLfvqn^;ZBz_6&f&_ z;~YoLi$Q&(@qc>qsD{ZS<_l)b%NE*HQ z{m>6b^+O~^+5AjCct;{eWpQ!f3S5e_y{Ji^xINw+o#51b>DI%*$MkgU*uRh0>!C=w z&x9JW6aLt+EXn=|$${0{6&LI&v^Y@?Cw@Q~{S^9mZ-meZWw3Y<3%|Q!0$KgWXZ{ZO zz~L>cz(KupkN=KbFcA7q7Xqs{n{OKcvqKjc*#1~y{7>EcUGF5MYhv!C0CM=Fe^QXP z0_39HlF4j#>S7vD)hQ6w`Amq^oCPJOBoS9WpYzE*U9T#yJy3Aby2={;-s$^D!1^=v znJ8g*ayFGhHmXL_0z1CdMyT7>CZJy1=xEu|F7oICL%zrRF))dkuqr-N6}SaKj!N}v(=sl9>hxE( zkqGY$)D~)Xk1H(?Fir433Wgt&+E8rqCZ8cvWoRQppfTri3^IaW_^w7MxJfqKBfl8_ z$WNU_go*0qGCb^iCoTqTur)!Yln;sBdmjDwf>A1Y9u=-sIyrAD*fJb^sKK162hYmF zG_JyYt;mYR&(YC)=kk$E+cPlgxQ2U>g>@|l>ZHx#sjbP2@zxXiOEhi*u{}#wQ)&vd zGq5x}rjyPRPG;4*a91d;%yMx$coaX}0t$71*l92jti-nh^2X9!D!^;N3pn2H%JP%j_Vox*;595KbF_Yj^XzCVYl=(S->vHQjG5cb>E zx&l4OXi9@4@*Wd3#+1lzRM9|vb*LV!uu3Wgg*3%-;r>&q8VM)Iq2*(b;Y=AxM&AJ9O^bcmd+)h`mYV8@44crUL$eQ;(&I*c+^V$5=epD#^(AR0#>7rWQJQX zU05O$cd@||#(P~&N4cW+-m z>H+2Z@gz)_J$gl?>T|A*-d4=tlPq9(FjWTEh!r#z*d-V6W+?L_fdYq6rN*|+u8Y~v z)#pfKU#A2Kp-Zarg?`eQo)xUW9_u&HRP2%!Y*FEkhb3nDD)EO`{12@rvmfM;i^R^ycq2nTx*71~UDSrJ?XQ@X zt;{^3{Tigzxuaj2QB3e!s#!P_Z`Vswwn9abCP}Q5+@5!4ASB@DzeDXa zRe5y{y%}7}z=Af?JxzvEE}piW*a?SPc?_SPAYm9gBg9r8bVgOfBkIBSB2HO_(N*>8 z!fN=nyR&Tlaas{HgFnf8m+g^?@H6?ZR_hGH5xIS7UAjbCypY##b=F`mb$39>*kpYz z(Lp$wArFIMUWV9&M0S(Tzm`{i-X>2aV!Aro5mm$?@~T`exfRy*X-6O8Si#5-jrFeI z1_E-VX+UEg0vhY@_S^rO0?Pg22v1f1BRR^ffo`Q5obN+r?DCI3e6{bZKR%Yn2@(-} zCk}Xf>ZrP{fM2N(MIh{ z_itFOXnWWR?JE>y9ZP2DM1S&0!-P74iZ+JV?KV{7%Z zg-2!|tfEFN8I7S@=rCnsjkD(86cN?+6g_<(68{a`p~jJ5s;M^Lm#dp&bt7sAIwTjR24Uu4^WL zib?lWx$qlBYyRc_JF<`2g@-fR!j0Kc$sEBZD0UpBS;jz05z9;;dp|hxwvX~`<(|^G z4pQ^Nz6z|waiD`Iw73^i^F4847AV@EJp=t6JFU+_L$!0`84VO<+Ds{w*V`rIXDC<) z**pRg$(KNikmO4dPd78KEYnQChNrrj4?cB1B@sM$35M?gHag2c;tra`0=%<#sSw9w1tqXmeXXeRvI2yUhH{!9d( ziDvKF7zIbuR6l;#hY55~(}F%voXKR_H$r?V8_+h+bMQh%q;91o8ibxw-;;$nW3%O0 zkys%K5je=~da{^1a~ucD;$C2Le};LsX_`;8aIv;}jwFLKr6sS(dmPem5Y;q`TKG=# zkuCnzxS7WjT71}>17tyGwGp{z`P4?K9Ja}r(og$=EdxqDdOVpb1{^oFvSV<*xXRAy zTo&bHItl%#*V|vXCl}PiWrieQIagF_IC?LpQRZvIOKDLU7#Y_HoMO5~!_^zd`^_vjB@t^yfpM&*VSjN?r!ZDodv@CRI`Fjb8Xw0&T`Ci zgx%@-ncmEd#!DaGaZ6^ug(czFl?_D5x-2)pucdl*VYgSNIJrHa|k`?9o?w<--|y zje=N+P_VY$Mhe%(?WNNxZY#CAEC_{%cyEymB~k4;US8Ks=e)V7 zo4ow1qw8sJf&mnyI3uG5oyYpwph3$7kqIGOYKp$=$}VL1vAuUy<>5jq|tOu_BAYtc%)pl zS@nu6Al9uWI0ZMO4SFlIgg-0Q%GhBbh%e5y^&a3QS07IOeAM`^V*F z{xjah@u}DON{gvVIVW)#EhK2G3JUA}f@um@w3Oeyl$=R)ecoH=OH?Kul(wW@Ip?Z+ z++2ThgUCC!hwM2Pz!XFXAja)3b8M#Yi+tSV6Hm+$JjT$SiP__WNk(kIOTHXSF}ylO z@mi29WI|p_R~;TBGoh^uhEA6)WB|EDXf&)yuMWL?cg2Y(g7Lh^(8{x8}3-#K8}+c*G<| z4c1yo2M2ofJ(oLUFTEPtSL1Ngm%|DgODr{PM#36XdZ@o4gRz3uqI6qhblVI$>f@Cq zDSFlXh}&Y9+v3ZJ^wG?iJ|36&To^QkKO=FaSS7P$eBNYv{Y=$PWx{;vB#ar%O?8uB zilf9=z8Y@e8X}wj5Oq_^nb2QPW89Q6&uGKS?U=MjzeGtS`)+~#pI5i`J#qp^ZrAX(xn&I>b&^P86` zHLChm?6*ls&x1fPQDyK(=hmcVOTCwtHei*moYa+)q7CuZ8X*Lt9c_g)m-PWhhB3um zP7zp!5@%BtdsuJ?UyLl_JdvtnTu~eoVfU+p;uuSh>8F-E2&WCgXc8)=hJ$ii>^B^T z!s%R@zSUD;xlk31Izh9YlIq-QuMSCdRnDHVR3s&&RC;Eqj}Zla){UER!J%=9`pNAo z4i&lk=u|!jG6_)O=V(#^PiSkolVYV@XH^j{To)^Fc~uHUhbo3+Ir8him}a#4F1l6g zgeOwr@)a*uvPVBIxFrI7KHq%zh^9N)uzR_bx2I$5QkJdtzI{*J{(zrXdI{MoWR-JF zGDJ7V%{QXPWdDo?3vOPR0Sj(HcwvNeFS^|yF*Gz^5GB*N`$5%b%8IIZ;$s$M(v5_z zzD`L8ybmDvbA+ysk%#;zs*~E+PzpirlNJQuaIqE3{fLMjKptiX1u#inEPj8WU}deN z{+6AfHnTh+7b3_w*RGQg2WBK7GzlPH7iVwIhH(WSGxnrH=q;!znVcz|OJ~qlZ*7M^i*gGh5pqKx-x{C|oEl^ds}}Bj{?S9x4~%=W7%!l^ zfj9{YuomPu{ii^;sAOgRAOGo<1I`qX0fkkaMw-nDwi_LZkW`)48i%}GTA>V(zW+)!SWm^_zDIs>k16pdm*VGb-lk^%Q-0nhcTqQ@5fP5pQHGZ$iE8S_-3 z@~|c6C5J{>}C}L~lP^_*1n2fgZh>akN<)aZ2KlU|r3iObkQFxIK$m4kRVe_bZrr3Z+S+ zBLnUDU_fy^49J9_VsNSluic6PIwcMKy3Wvy+^q^FfZ}K2*aL|tjz;@|;c&)J7o*Vd zgWgQF7ii{dX18#UI_2Oz6P9c`k{nqol$MTaBu=G$QE{W4`s|uS)7GHb2G$VkT2p<# zqojy5feSn9=|_QO%7tXR!c~@1LZXNk@?FUGuV`+~2l9uJN@F(EzP2~xq#eXQAd_419MoY7ulho{ z$#i-H&XZ||M$qbhcv`eJx!`o;Lug0zvCg<7Dm4go{NaO*^q|sZ(nUfu8~2%XcU<}c ziqDY@C54xdUq4+%LtE;sg;W?Ji?0Ilm~izeHke^mCoRv2kBBFMQLarZ5(jl%HM$&* z3WKJPv^*cB&OGnFP-+TeZ@+8~!vE~A`%SDX{1^pI(NUp`{J74?H9FqZEDd&Vq2Wwu zfx$_hbf`AL^U9T1d`BG3YBjII$)BC0PZ{lH$H;cEuH}tD*uy?<|CY|u>`7M7&uER7 zNxI+EyBaS;gO*mDFo^{j5{&G;6ur_$T9)h?g60{J9r2;Zwuk@~wfo_>l;!U)`e&&fTk8lv(zWjoKU zfm6_fCLYUwR+-eL2Dam!aHTN$6r;pwPmacA<$#nW&-{Awreh74G09h}fncHeb5Ct) z#R;Rb(HH8pXPuLZ<{q|O!O`o%Uz^y&ps#rB5l`r02!km;!5fXd3w}wE)>p!Bu%dNH z91%!;NPKBj@`jN5;$7K7TQnC^2i;zqx0yuP1^5mwR66CLObXu5>Od}KffJWRYZW(;2vIGy@cG4&l1EW9YE^G?MB++5E{Yl!sJmPS+bEDrM3%L zVeI#{4lzsC(S0`okdu0hu%u;gSrh|-26C-aj4z3xYtc}5d6%# zD(G6Wzg)<26+3O1EXFs|W7V2&EJj+afS;1yL4~nXm%IFhhYs2`Nvpk(ZJ=WXn3bT! zqbkXz6m9q>piH`4dg1|AQWELH^Egc2;L{{4UJiu>7G_5;@T2j)IPV?sDx~-^^%6Oq zVn8^q#yIN5X$m->+OTrhF=BcZJ2P}lUl5-!w&?nbG6$Yw*HP>u}Su@XO%_dScp2$1Go<)VD_?IETmbZYWT%MmB4KtfE8`gFE-#6ZcC$w0e>fNNSf<7-fXIU&G2&21U$0HN+zCZh6 zzHk>;ROdV=6a+j#vB22)o8zJa$l}kq;vbpYr5|Foe`YeLqVvWfs#mwDQk28zeFEgk|>nPVO@1)#%vD}T9f4LJ2~Ua2R*rg|N1I<@5n#C?&ne7V|8x*4j&qE;bT?0yB@n(F8KwX6%l+ZHAJS}#jb2^5l{N;B1tg34)4x59d2=5VX zZ490h{}gpK$S=B4F@o*q)5zb9JoP11JS9kwLn`N+x|r}|MV~iu zgXR0ZJW>T54|x2psqjAQ!iOtyccb`qdNmKK`rpCByLrMQOq_;zu9VYEU#aDMc8U$1{|zEYgPCrdeWdo-s(W{Ri@xCOqh zhrQ5lSO*QS%e3m{0!=RB49?jw93%V@^@1z zJV?gyp_QK5!R~K&D3<6t=~XQFUWR(yuhg()@Dc67gZ)^qT0@*7?y5(t?C&GZo))~; zD^>IBWgvBd~{74TM0;n$+V(niy>&83!` zr=QXGdKiOL^&Q{i#2-7uTLoOjVH!3blWnZ@>hb#3BCEB2vWaRUUS5E-B#v(-Iv}ye zI3zvdJ<+=)c#4JJE#Df&@Cu!bnz6XsTDCn2@LrZUEsTGF0#dtp^-V=tY&YZ_V7n{V zYEDhkz8(`ZPKMqYFOYs?8%-EhIgpZ3$`=G$qOsjq5& zzyKe;rn(^)J4so2nn$#@aJCN`e$b%KJwyM~N;?qd*1h6gNV%1AT+7;Q?N%bq`S*7k|KAPwXT3#Py5}X_jnn(0~GmH{=h^N>e;pEpq zsA+nPNmHTxUt_K0`jIJeKgk)txk>mRcY8JwaE-C`hXDV44kF7Ua3m(Uq$1CiQgJ@3O zykPPm>yfBu;Bh@6O^Q)#oy0Fgk@c@^b&`!RIm&xA@Bo=4^y~)1OV=EtmEQDj<5vL( zQ#1&s5c^8iTxeki{5?q@;w#+-vJ7n#dBayQ9-`m|bZ;8hid-WO^?^4q%D_x#kjr4E z6UZ_AN1rx*pCVzqAPUnXZ*@R?J$@)Il0vg9PO8SBjrdBqW)c25* z_vr*6V8d=uS9tI4oP?ph=BieC2*488F zwfe2TNO>>G+n~0`e(f_~m(yG3M*XmwF%Co?Iz;v)uH}3TB7%c{F+6&KhuKX4Vhxid z!6BaIP@xRQ1~m%4au)|4!wYxmD>p%`C$vw|DH@em&Pg@N-8Z&8dI!XyTygPEZ3D!! z1D}=me|}uf=FODLAlerma{M*i|NAQ-i@T8a70qC=4Tt!*>EUr7c*XiDWV! z1+o{`ULhpcCjot>*hdw4tF@lPu=BJD5yK||ZNg5xDJa-RGicQoxpW!)ytL<7+vpQzN&F<){(N})6ih@`j*iQ(dDmB<@I(gj1AON&t>K&C21)bxlWf!X5GY7xb#tc zoj2Oj!1wypyi8wYByEwX3A@fk6r$$D)9-^a+TK+xYPXsCedMDp14+Mb4CT-YD}@8r zQ_I(k@`d%JnN?Z*`=}1xu$rmqOpsR=W+6{u^Fu_BD6WFdnNB#`5o?3K$|+CV2#Gv? z1)FV+N*ZG@*zvBAj^cEVNYz~Q#emkp5qC#9+LF9a7IJsIwQ%=CDcCr8oUjn4#kl46 z=w;%F@&Hn#{lX9s;bNPzpBB#UODs&X_wtihbRB676)R8;!#t&!35E#~7(%94hs$n+ zyb;G4y(dV#aYun6vd370wy#eMr=XtD3Z5CfqjyB+HJV{x2Lf5O-g@$|p+UOTo<$+s z4Jb3W4@_0u-rMUNEtn0`LZMqgh7UgaG&=#GNZU#tl>5?hEG{TXJuO);y_j)0Vxe39 z9b$Vdn*^DWUHaP%fyGx$Q^K?iZq;}y?=ND`Wu1%E{0xZ_m$%SmUabn|ns11@q4K0; zADEHO4Qp*b_S_Pgt3N)A)PH5i(_F|3PI=d;C(rzdR|_>D@K(fMjmoCQS%hoi24Msz zQtlJQvtB`JY4mo-N+O)&IQ05P9367VI*Y!eO}LU8r4L4!>Tpeaj(#nL(JyH^b7KdV z*O_N1w%u~)#;_OOrVnc`H++|KO|h&W?Hm;_AGCImR~i#`EjH7ck~%uS4pDBI+VRJZ zyN=MP+2pr71G4Av9jY9gJVbH8>FW{W5_Lx5QB2&UEt4wTCQD*2=#>`ofGH0Tejy}A zhU6<%fwphlL0AD+<%tyWzOY-6tl8zsl=!+IT2e z{eWQ1XCv0LaqRGTmk)f&7FA0qiy-7DN;J!548jZqlApb{HEHxKEnEfG7`#y`JH>AL z;(V={FI=c@N_P#%Nw+9qR9NI?$#hWoj(m_@2kq=!=A>x=hOZY7KCOgLz%$_&~9Ai$=xpH!D@$uubmk~ctdoa z-I&cv*11vWyj-|_Lff2;rk=M)Wm?SjQ>#F*8zC+P5=_`?ls140L?1&Fq_%|RI(7ldP-Y%bi z7H~1T68=^|{ocCke{HLdRfAP~zUk!tQY`_5rA0tUxT}_7R{d7xgiynO>_Jp$2nmgW zLG~r)8)!@u2k66LuK;~6|J1BE$=T97y*A??LyJ0XEO7TF)T;G2<;GboCP<_|Ws4`{ zZM!X5B%R+F8OB4Qd!|9(CSHXfy0lz>KQDUezK;N*v0i`(zh-vCKnHC@>SNQC%Ufc4 zS&dkD-0;;TEvVrDSA!pr!Dx#>{9AuSi~ zE?x79+!s1(ix(DkVNg=0+t*6_^D2dL}8&KR6ckTf~_ye@}GOC;&& z6WY@df|aD35CtU_ez6|uoPzf2TV|UHU~v`P!YPXBV8a|&8)G!CieLKhbv}K3;*pJm z(H;`@@``0b@m%?`m-Dry&uB@##)nX;-N({-?>x`5BZrb=GU+M`IOPo4W^ET<|15qd$V23A$BLPyJZ~5^B#$g++_KgHAw-{dCU4l30wb~3GQKjwWBH*w zjAdj;8$=sAk76NLNkuz}s7ah$iOk7_=j>_Lxb=plqZg-pU-mx|6cl-5#cjDc&N3U- z3wAYC{9=7l7HR9<0Dl`K)S?5zaO$jc><>x2$&C!#SIs(kK|h_nSM?%SQ>TU`@4R47 zMB{+Dm(p?=qS!l`+r{y7p%%JQrFBk}Eu%tz%C0pjlR{eWsVJ=xMI@sLoI5kU?$b}N zinc_*9EX^2Dod;VyAN^9ZF1bHZd(#3#kZ07-2G?OM5*qkbF8{5h| z%bL|0=lN*}$}YpIO1~JMwW{O=X@a&xSG0Tg(=RjiQu9g$ie>p#N#-h5V3Nr3v1c2f z{l=%P+a*5+vL>-?SEzj4#)P2O-g|8J^hK{Tu3#B>mH>w}aH~Q*(Q6OGpO~r2<5aufI zDQfeXO_MOTO{V*__D1U9AefmNUkZO%?cp`eE=##wfZtA8pwHCX@{Yj!5QM3+Q60kFZ=S z{qUO=G#?vMAc~v~N}wd;qfgkR@kZDAoy2-583;ehu1$PM3;_fn3(21C>WQ_G*=QjP z@IG?%viyi8GqW8ka|xcqLkNF5yBvD* z7r(QSfz7yH1g*rW$g3S}W}DD#?ns<^t2iOO5lpw_*RM=AmHN*S)!!5+A3gVC2}ONo zoJX{nT%Lj73WK=luPV% z3&m*QzzL;Y^-=c8NTjY~4NpwM^vaE;^$b>R_OPoyrMaC&eu>j!mq2|t2}{>?ccw`+ zOPULh65==$o&5u@*_zi)MlV16;le$4vf{nxP8LWcU;Od1g)#+(Dx zrVXL1dA5RTA`O+c*F>#Y8nK)$#s=#SJ%z2p~CQ&H=AdY+NSg zta+tj)?s)fsSBC4N;Uf%+%-^QILuScmKMq&2I`iGlgR7wkHjw~2BQ4Gk%ca{v%M$d zVnorI&T^OU$0kprl_J%a2hkP@*K1!AMw|n7zH{VWp{*)TUTuMT zp_-LiH`MlJN?I927e2ie)wK1JIzHN;fB(^xE;F-)DZCZZ6EVHj8L~XXM@%|WtVV22 z7;^r@g$RAd4prebUFHr`l_ZSFY5sOYz^L-%xt8BzN>3B_#x(8ch@N(CbR;|6@4Htm zmyT7I;&=$E3wc)c zfNPmRG#{<-(;0yz)EC9Rsm(y^D-KINkTzpjEZUZ7^J7};r=I;AwPicUm31vw(!~uv zQ;Q-sy#DGt`5NQ0mHZ`5VP>-B-uO=^i5PP{yW(sh%uh6!(b6sgi}YmU_H$8}ouz4nXcDEL~7C z5O&uxW8by6Kc-eDfhqhGT^+B2KPgKvwA%|b1hDM^gVD3`=NF?o{xG*NipK%=r zc^W_Yzshh&J8BC(lJpElwU7(9Sgq4~MIFwy*jXbv;L>&H@%1A_b0S1 zyxoJa<1b#dTa}N{i{Tx1T}xa#F&}Pzg4V3}@G7}wNjnC8C)8>V8i7t;GS;YHQLOVH zwjqbx4NC4AQ}M+0>~7_F12?SaR;824Qw7UTak}?qkU7jP6XZKldXjB28TPM`?~7j zEj8a~&~#Or{#5=I_vYw8;s(kL6z z&PjC|effe2@f){$o9G#@J9S}spSe#P6n(co)y-&vsDd4)c7|41-+#-tqRX zT`nWbl@sM-zP9FP)lGxT@#3OB3ciei+Y$a2^=!u}ZQ^pCk(y%N6|(9>A)_@yMsG!- z(aTpVCiq?INrVzP=EPoH`4L{55t2wtPw~^8xkQ!FxT`0Hu|LoH(v4GQ4LC?pzje;yk8pc#H+EJvmghLfeMQKjBTo4^O7@7r_gp*+}K=E3*rU0RMgLT`sN zAyS1Oa0Wj#r+7kJ)2b3!d zik*#l0S+J}D?y|~$(Y%W>j8Jjp%QDfm%AlI-LBwEYwF6gNR_Xawc(BS4eiO81g$u( z&B8fuX{3j6kl%&To9N}Yr}NKBV;sLoNq8hqCSihoCqc|cuk*nqui z9hASSi`P6w+xB<;DzFS!l}2b0yZLDYv1WR7>oD_M@o`VLjW%hRY}5kt+;reKoS2(r zaFtbguScU=H`>>SX*GJNrAJw6lh3?(EAqaXjya=!aI^2BU%l;k-{g2kc~QU>+0$2< zua6|xd{)Cp6b?PvenrXGESS+U;QEzk-sezp`6Y$Cs~M75(Ju2I_7>}=jVA*J(zvh} z+-OXE5PR^45?jyi2I$hy8It*kuX8W8yS@{Auhq7mID@>7>5L3Pm@h|(jy&x%6i1&NlDK1zKyt@I+q-zhQ3!uD=y9Arrqe{3rb!Ub zcCVgtu}0iJc1abjzb=J`&T}k$N9jr2?Yed<*fi==1`<={EXp0I4pjIXydYJCqIQRc zhAJwbg#LK*XvJGTYk5?^uJDjT8kfN)okm}gYKgLZ6OByq_cQ1gDmkPJtbTINZ^8+i zOyUEZ$?0k3jT40BJBjY-xi5#uu z#@UixMOm|lkwoiWoDif87Z^qcwd8y>kO+EH`bp%u*vK0kru7tmgk1VeRHr849&7LX zJ!fAG9Do1ub+18(l`l&Z$mA)eo0tjc`0<@jJFwCLTM0m<{Hyk^{et_D33)g`Iic>5z;P}WJ^;@ zxw;G+7dDrg@S68RTnP|%Vn4IF`PqDZEjSv3qcduPk&}>_PiZ%2`{8vM_jYd=WmHDh z)A2Ax161NfD;@2os0;{rq9&Q5gGUS@NI~FIOt_$FnD>-m!#&KoSN81#VG2VDJq&AE z4>Vl*u++jyTjEkF#t=1%?SmXgUnI)%C%-En1zQVWws*^U;@j>=JbA2BGo92%69Bl zjO{izYe&49^kMD^u(zch^$Cub+IopE61AzWVn$n}pUz39v7=Y*=d$R$xtx#KPrN3 z-+*lIYg_=iKNOz}qux4WB!ChTXAnsO9zYFN5D1C|5E3xjii^cTy&|ayuu)6O(XH_x z9E>{Y`~Erk_OW)c1Y+^{38l(a7LDx4Ub~-Je(1A__=(Mv)Pa-(kK3CYSqS#yO!Pxt ziXi8C`6Ah@x?o+_`JxUOk=-M#ZlXGE|B++94vZZGO#~DqDboZ6sb^V^KHD&OqQ{VZ z6owH&dgykh*C5DK>~U;#OqR6joYe1Wx-^NKk1c#6x@(ksVYjiJ2(KEjtTDL^+fLxG zeN*6JMhyF9L@`a95SHH{jOr{*jjYKBW5Fl zJ#p1@{GEI5_g@eCEOd`|%(?blGe*4_b#(!zXZZAdUDx^H_PtV0>pb`cY0NbVG7xv6 zk4AZm>Rsa=pfhlDyReg}Zmm>0LfcR;7BdcDv|q3;Mp<0+5G31=T;PXU@^m@}NYu{S z0Zl79(f$p!$qUn0oyWZ7t^7KcCUpsUSI;CQ%ud0JY(GpAWdn5l8hdWgX zS!RgO6_l`J?PA;rZJwXI^l8506QFf=Y&?q*JAvAv_xO-v%$=K^h}H6N-cO8Nr%YKy zFBqJ7arPW95>lO*G#Sjf$R{$Hy8oHTfg>%L zd*rp^d_kd0&_zjR!R1!-EF!I_euwq+00YB*MQz4Sm|785ve}Cgann=$dirb+V#+=W zi*{plUBumM#($hd6p`idR8YkK@U8|HwFRDV+%?@9wi~&ik$U3ua{%2rt}x8abHIiu zA$%JOUw|`?VNuRG#_NM<^{Ax=KVnCu{DrwS(VLGTZ}KezC0#i93p6$FAlO<1WjDz? zJ&GQ1FKY}uidH4yyZBk%XGCw5a64t!Ea0f?THBCTL{_Hw_A6y(-eh@GdlES$>tn(n zTq>0NZ0x3i`pTkUoAHKG6{QS(%0G%+CUK>bmQmrd2J^@+s3{k5^C@; z_jYoA1o9GYR_Z4E5V!vt}JG%XISEbDMzkS*{iGb1mk}g7msJw>ho-*sNkG< zn)Z&H0Ck-53OoY<>wE}eA4-In0mmh(M;l*1p#6?n{Mr_i(D&&_v-!8lEH1GXju_}m z9Kitr`Bo_7zia{iaWebezgVko;fbe;{&mcny*gPw*4bQGTdRrMylEkCrOwX>CfhAu zJciYI$^geA-I5~Jik)TX*jhvs0^M`{nc_HxlBW*_-HlKzy9!OH-}(AQm1{Az6 zngqs@lhZBhs#jKS_JUg+##;6sPwz85#u{DL9#3TwL5|x6UfZ(p_l@i|-uneW@*ekL zYTlu6yu8_>ee~*%lDPkz6i~itF?7b6fpqQ!Q+wCTjMsH;>>3jswUN5)A>Cd7cvlxv zsQC~XaJuP%(i&w-#v4W`sS#M%a8JxZN#@7b(X!WYi+7u`w|cq!IXWbk%@tH2VLU*2 zndegpm-gQn$W{9h%pqGv8+||KC(Q7=_ zh%chtxvxuz1y82-m(o=x&Dj9$snc6vvp0lFku=ek6w%@1g1p&1q)%6>5$vFDoctljF%@>xO?xU$Hq^J)w_6%CRD%BTl2M0umL(F6DyKKTZN7-)7W z*3KUjZNQUP2gRUO(7a)k&RWP5)>A8t(Y)~En~HEXqT^wU?-zaF(f{r~dq!+#lj@bl z*BTsRVxg%7HE!ng@oAWz$q=}07$eP=jR6Em386{W;*;CHhDnR6%b`8eQoFFC!1e%F2MRX1$RJL(|pcr^-ApF-58TFu~A6P11rB zdE4}t>H*#C;&FDks|>lge9Z2Z+P&$n??&}nGs4+xhW6X>9Yq~byM@Fl7tKHP5M%3_ zVcJRcDx8OgWDeYM>E%ziBq(w;^25)My$rd_51%{x81iz!^_k7!d>An(09{nO{cu9= zKqU8uB-k%?vO`KY^F?3%#OGH`rZ=^^|mrxh*_juDRLaI~M=L4@eBwC~G zRI%+K$I$2Wy2c~K3G$MqZZ>T!mj@kPmK^=JKBgeN22ZRDwR{Jws8}g&`!QPja+B$Z z70x)}nS4*6kUUuj(94TNIOt)uNT^1I*#4Qw0I;TTl}Oi~h!n9h`etmMH2H*7VpYuEbhSBiyNp*ehfvqfB-5Jf!8)&z zr!shvUl2(N{>#>_#vN}-C+HepN!N79hR+)WwhbTFU}JrK1On^k4U9uwpJtyOF!~&4 zGFcNR0IbG_*d1PT`4&Bj+H(LSI#??NI4_o&7d%HT{W>>j-vo-a7ep!aAzgrA%c(JI zxa+{SJLshbK7R3Yz+Dbzg$aShSQ7mkpGAaer6y3-hK&996z1@U)Vv(8@clHRU)%cJo#mv{fB6h6 z6jS!ar7=l5u;3OrldyCWuUC2+f&nfyUSj#?ib3PCqWWZuTT!h#MT$8k*{&*wIAl7A zyOISfTW#5%c1>R@W@d1Rr7hW(fL!^ajN*6dbL{yAaw5h%p5)d!Tpd>--zrwAOsF%b z!;a)uzPsphD~j=_;VO!81MY67lOjGQGJ0L1cL7E&=QW`3LtwDkF){EZCw$R9QQ1dz zw6ID?apCF|PWB{>a3$LCM#f`Ku)fgtz(@_aocB!0N0QP8BgTNWKeywSQc%?7Oz3;R zV3+&tN1r_sM%`p25bFA%^c4ofD4it>Y$KzEo&F6RlSe{QI#sG>Gj#Q=ut{N=--6Ku z_==V**=T&fuhcF0idsmuqO%`G8p#QoybbXp`CO+PxN_YNh!s}3N+OSUbo&kYl0ipv z%AQL4mP)#pt^lLX58Ip{gr#dAi!cjt43W0NHiB<@Hn`R>}cTb zO0OmX6e|WX9c2DeVgx2gTCdh=@ z7Z2*=BgnkG^Am}s*fB=Po|ZG03N4LE2rHBmnXoV9vLu|X&7n5m4bMyHH|uLAHkK8e zBV)_nMyu}k#kI;a!i6SMW`@%odLNFuny1A~7B3>PW0WE&Q(|Om7RSOJ{6$4C($rB- zsm4_Zu!HsiYm7F9mti6=kpoGV;L}UtAe9$7RMw zn48PjUd*z@aFYTTtEuz>3J0O=0{Ad40gUnP;xF)^#MtjnS{&Kb)d>SO4@5`7I;BdeW=?m%oI zITWi_h6m{-q?}?oxmX0t;W1_whRjRVcwlM*ufxDmXif`aii^(UUI4kh zWoWtNm}MY)juwn;O&rAc`lTd~$Vo|~s4P$Gtt|I)hqbyvTFD6FB|<|8@Q{(k!uJzi zjvo-^AWA^n7)px@RP%;%MwN>$OXzeM7w1ULyH8h;|Nb5>IJOq^-c~b7k6O_qguqE9mmOa%-$1D#V|ywwI5_rzHJIaQo_Z`W z%R4Qc429wNq}se#^09y2?C?S*=E1|$;GuVa-iU@P0WVXYV&7pM$*a)T6=DRsvX_FZ z^ThEXP$R0zo#DU>{WRI@P2lKMCU^Sw6Dx;crXXHqY@LxlC|{+MZKYxt4UXYRsaa^C zndRHSJ5_LlWg5RqJ)8^;jq*uXBv2fli2yZdv)na=$;C=c9%OM$rq#f?{+uE4KA2_% z4HQEmO!B4I2*FA+Pzc>$M9&75p}%HT)0OEjk)Fx5H!zS(*m8<(W!g~ER z5ZKjVm-J+(!WZ)B$=&U^<_RZwP&$RW!@Rl1gFJ-UPuSch+S-{pvDy-Ih6Q4hOX%)z zi>>d}Xv0dUrK;!skI<9Fba9jt#ivK;#8l6QEbHr)SQy?dbk8P#vSSXrGpd`TtcDnr z%^sdkVM(1QsrFhO4h8=Ib^@+rTRpk8`ogo=FSu9645R5O9Q!;cN+$$qsq#l2tx$Vt zY!#ol#9@0$YU7tq1*smFtL7PRX(ekL^A^*ZqNSz~iieWyvVvhgW^-S4g?_XO+O^Hs zYtJkJ(Q|5Y8a|k%@rf#-czM#Z;GX@a4EsT=WxQ<~?#a4kS*R#oO#=+zTK@7y=krx^yiCOl<_PF_K+Iutha_tRBy9Foo zx-m#Ow2GMbdozg(dfy(CBV6CCz7fn6dobJ)wa+oYtcDjeVJNwQhb_d4ZCUros!w@X zaLiWF@6#;?!~4>}=F7_By@*o!ick;v={+StiLZe2; zSZR?0F1BSo1TfR;5o`XwiXrk$&SnOl+WRXt?jlDocraYA8Ys=`udNUMXXfV(n&AOW zUnxb5Q_CW9$9O-@+b*oo&PYV}Za<-k_ZI=|{Uc{Yuh7^6#oJnn1L~*nTe_lV`~308 z?jMi?q}0rM1)$$*v8^rpq7zko{>rr8^ePtL~Z|#QW=BlnYMjh%eH#zX6|NDq~ zVeDWFqy;nnv(|RLvaZE%{wd9BDV&dtrvKnJsdj$nHiw9y`fRU@ywy9lbS(=Ahg?zh5tFAN#LojpF-S}gcpKG z0<~lP_!^6*^lgmRE(4bIryX6$dcz<`&bdS_ON=dFNtZi8rMy)R81*LJ_=HSw{PTnj zldnDsZg~x>QS5R$WVvkA(-o-&6kel>VRF$F26Br5y^R?e^C}<9N>PoOi*GqZ`I$u! z!w3>QmwWgK(N(+x8cw%B37F{~zpw}Okx4kxNU+9|az~SLGxR+NJi~g-m?il{m0?U` z2<@%9hJzPEX6kyi$A+EpMeLdBT9<&#(6{uOrHR)bZslL2RHeKbyjKn!w~{s%zN#=C zD84Q;F`R@=Fk|JzQN>{Wbg3cQ8Wg6cXmCV@45pRY5!p7&-+BK^{QyybGm`?kl%B_6CwPv+rq<- z30mLg8Z|WcrEcI{(+`|$zR{lj4fG z_!5do9E8hyYDaZgIJi$KpgcFfKe;!s+3)H#$1IZ(b_U2PTa9xi8fUR!-Cqo%+rra zs-c74R#+HvOzd6cfeeZ?Rwpcs%e(mTVDB3anrv7;l+EF*oM4eFOBdG2s!!aqI?~oh zp0zbr34E`Kp1vAz%GMGFfA!m?|4400jwH1v)<=a|9ebr^c(od6>30qKE~?&>;d1{~ zI+*S=%h2~I`f%$MoNzB3Q+Yp=$l1Oew+nCQ7sHD&^7p2fx)#B*o>4$1(EfA`n)wCj z9>98RRhVqm4|wnRB1l`b|tSlp3}K-XPq0?Yi=T zst>8}F=(F9f?80s?ucLkZ973Qkk=4nGLy)gmr~9;mZD}|Skkb$)-6nJq5cm4QQU>9 zosifwB!tlE!jDkO+ffesL5cOwzf&-_>>P3}AkPL`PV`#D7OK$U_+|+|XEx}qallotO=j@oW0a{{xvL;sc*0cC|rmO<9* zb`uc)g_susNBmJF$k+|?$&n$wzTu)aZ|Ja?J<(*1hTBu%dVN0Ye2kOtalet*4xPt# z`;sbDvB%Tox!D(K`wTn$CS8K%O@FmF)LOnU37o&JvM4ekO3C!o)a7UaG|PyC2{Y#Efw=XID& z(~(4eSBabNhC-SuG5b%toy;rY2BfdiMOtxXh1D%xLtC%zL4fY_XypoBE=2pf$OI~^Uv;vo++IQ|HslQwi<=GHz4Wpo@R>E);NM#8WbguN}S z*nhi2K@K)$F*}qm=c*RLp*QJBay_PwHV#TvVZ4n97Om=vr{7>h=>A88#<$6uW9~Dl z9&ikL03GGZ|2z)=tiAoe`p7@1SpchRV|mMiSwdR`grHHOYh?uqYKkf$ht=w!jRc}} zgXKG;B5bsqV7hQ{KH;Vx1b+$kK9J2HPj-G77`>8kddOG_5QU+tB)rjCz0}LNtvcoU z`uO>CCP>+a7z=;9C>HW^T&cGHa&I2qNzJS002l2ut^$#UIX?#5mmP^0M&bz7#KY7{ ziL!{Dt|5U)1cB#RZy94G1EYI$mc7wCWBkJXj3EQ}=%#2q#~70t8%xmxDpPCquoheO zSam))mVCnQX=cQ?8eJ2Rc@BuRIrw4{nmw?BG1`s=02UKeZkU4W(O5Y=#K6cB&cmzcV2qKGM*0xVf; z$61+wB*w0&EYJfmNDj+bPCIyp6G2YLQ*IpA)a2)Q>M%8fryyNwk`@b<(I!+iHm(cU zA*DW#jTTpc?>ggBVQ~bY%c-N?h1!BgpQaY<9F|o8mn+dzDY=Y!k(Fgu-acWEx(dsU z7rNK!oy{7XMAqcV@&LNRL@JvdA7D^!UsT9VT}T`!EipD%6o?3?A^Io0Ow36w^$%AO zC;Oj2h9XXU$bnK&am?242n_|g$$MyK(cYKdLE-|_hE&ht)|9l$_UItU;>03JUasR5 zqr}DAC!>{IS;ZoG=uM18j-^gCR7H$JAvY?#!5`YA`y~rPyh<`qO+t4ov$wx$U7~HE4iu+B7&5=9 zKdg}~o_63mQ6$C5Rjbi`1BD}$&6!cKW zx-P+xpd%05bH{uv-Xkv-aOMs{L8U(Of(=6~hKowk%GY8k0}MYdl&M{Cj-G9KER*d? z8Ma6fCQ6-VSGe(G=<1sV#Z#U)CuA+0UZO>4o@`rIQfgB<1+aAL^iZXuynX2

~*O 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≺uwJpth`>k?0VzJTV2Z0StrhUHkp-WsIP82 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

sbkfY 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⁢I+U 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%0D2blorCNs~LExA=a(`FW4Sdcu_llO= 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

fJ7bbwbQc!lr z-T3MP1J88aT(2C?}vJ| zcR2PN)0Y0IwNO#pf<#p&4X_<{!}NsbAH2eJn3q$++&01qXAN3kUP)ET_)N*FW!bv< zl3QS1nFeAtOp?$6pHiV7*ZP~N8utFCv?*_(WW4r9>d1ho_KonWae+E(t(nC-z$G;` z<6($37{FfD6n#})`^e510#%?6OEaqbvYllzcxa$1m-jvMQM1F1}c@ltjismet{ zi-zGbu3|^+=FH5TWH3)|20|3$4-^s+Bw*#}jQ|1iPXP2__QQpW&nj3R6^kgNR zFI+`1J!cFY-9S%otFtFD{1U}`Hr15|zahRExM`urh<5qI3H1?(IPC0c#y#mB$F>_@ zdPZ?55oPS8d<&ylv_~bc)I(mctiIf)Ov}R$_VBS~mA>*xQ=7(-aA5+OZ3>k#r}K@8 z5M?Q<;&^;ueip`%J}t~4nS82l(YVh4UQorz~T34KBX5u!kf0lNcBhekKR?pG+;W24Nqs&_Gw_sYpSnD(*&zn>@xnN%qpW4D{{m4y7 z;vIH`o0ovuAVvePKvv_HX-T4AFd@nZkSWx{?UOyzajMv|Y&$>#RG0v~6(|GI-q18- z9&Gd+gngjVrIoUUXbcXI@}0OjHJGU7SCsGn}ohf(n&jN)p|4>!1(L|yz}E<7ju(xG&L#{ z3AJbuGz&u^W~Uo684P-%bl+snczivtdv!wx4+);f6Cu*7A#k}Z)E8uZwWUj zg*BTQZ|HWb9>y9ZyNqGLxxX^!(NcD34sGq7C`OzW98WQFK2Z!kD4x%zdAxRXX7OGK z@Q39bJ|Jh37r1vSo-dBQb_mGv*9$7%n+_hE6(7P&G8E*`{MmcDx=mqyl(Oe%pcc#$ zu(ge*EAeU<2*YU@jkt=!u0?*|Ha1~| z5e$`PG&qkcqjEkSuvE}ecj0{;D)2rn^K?F(N4ETHM+qt4_xbFFsLY{~6a@6M3oFPq~8gi$t>P2VU^h%VJ0h|e@h)=SYwt=$XcpOtUorODXClyqsm(wZTDYCtaIWU0PAv0f`ZpT zq^b!rb%SMj^Mz?ylLh+ms&9G*ZyAoFD{3UJ^d{I3Zvwquo!<%Xuq{O}1!=CZ{vr$f~(;f524Hz%Zx*Kar$1M3B zq%)(1aotP!;RywXv*3aOR@N__G%vsPVXS%bmRpHU*z7r7n?=ht2VI+frWX>bS!ti_ zLPu^$Pne%YRR^3fpNUL&P6L+8Di&E$c%MZ>#Vrq8H@G4nLgla1R_-6kRfOBr!bLR? zVf^#)F*1ukQ-|(c1=`BHZOG8W@20|^i}-U=SzbC(;8=bRAVT2xoaUs0FcmX6M+NyZ zg?pfH)p9slj_XvHy5^wSZFU59@rM@IAjs9r@d%BYQa+JB!vMvPROr`>Y+Lp2P5c!E zLt&poF99ZgX@u&~Yvt-j!%uinDe2A$`xs(P_}y6|tBGO>!`Jm-m}w7VbQ6cU%NRF| zJ8QB~8djujV!$75-*~aPITFt90Us(=+;Xw9@RF7k+y5g zNa=SUJX8(vY8}TW`e1vEQtnl%gm2JyDhtRryi+ZoEUJ`gA%>T^A9N9V&?T1V0JA*GVJ;y4 zl;fVtxtY{Rk()=9@4j&;)PG7WPa)_aNfCG~v<`d8R_Gm-mz}$RX(CiirY!5rTcRi% z%UhxxGgmkRG_L1ii?0ClB!HC-CFqI>;mZX{1tQie3yk5bMJ3}jWjYG2UR-F6V|i7i zDkjL87L=wQ&3Q@c333XJ=m%=bks=Qi7P%sz%?s;!-_TU76<*OAm-7(f>NEyqEX)H% z0s$(f3dCWWMhb>untBSsfX0P9GVuc|xw67Vvc^wB1;->;1%RbhqPYFiZ?dS#iE2ys zrh3Nez2(W_zh8z0baDD|i9L^G9k|EdJgA4Yt`R!Y_dK2rTEh1>I`|2;pA|O!k2qxO zCwc_hcY!N zaZ(pzXi-*{?|YvgH-%4Fs`tGL87;_t2Y!I@d3*;>Y^q_-`#Z&3|set^ZHzaOD3(cN6<(b6(O*6aay^G}POd z8RUN$I1A^H5`5eBqtXTsqC>X=4w`}BUVtSbB?&A9Rlucmz zB`eR$AhZVS`C=?L1i_d@Wzgf|#hP@XWX`a0TZAZ%2TK$j6{c^jmK`~fKVUp+_Nn9&S<-f6a7-1ZRFnK#h;Nk)b5JopX8EE!867&=Iz=2= zRfjL(wO?1Oj4cmOTyW{aRd@z%?9Xd0g9c9VC}6_}>W1hbc*7!pLAt*uEfTKEF7h~^ z?*|%2aVj@*uRLRsw)UHo`MU7t04E{Spc%7XcO?8ek-8uy!|6R=B=i*XmH%Vyx$wWn zhpjlQJC0}ml1X+ObNirgmn$uiuK}j>p)TMIn98QcyjvumEaugG%Alnnf2#FB2nIPP zxU;M+coAl0D<9XdYFY_9F3!69t>{MhF2rz!VWCns$0&rK+1P1M1!Gg_PwBmPC=~To zYf;_uermAhO|*AaBZ|=pH>mgUj~GkIHGP(hj}`hXO~<1=tfJQTs{Vy132a@&TsTI< zZK0r&W=;^{&+zq;w0OVcPyJ?HtSOE1p+zkZ(GN5>e4nnENHR1U?^&)rTm-EKwoK9^ zG*=(r!#z0ekVY{4AqUiG<~ZW#`ks}QXV`yb9zQ~U7?A5h_rJOx2><&t_P;F;KByqe z!@uNX5SS8A2nj8OhE5Xt>mL`?2>3w}R}6Wunp z22yh?0db+`2J^Op*B7yS4?bp|t4VRzB;g-_|B_G6dpvD;Otn6BxqJWhneP0eNBw~( zATCgEE?p4JVyph-M9$;z!%&(%&5O7Sv~EGEtQVz}{b`b>&kLD0K7$MFOuHP~ZkbF# z5VNMw>#+b|B;IcXS>S$C7|yvxLIlEAapv`#LPLZ|je0L08_gg;t?f_^wEb73QolB% zadl!e8a0LJAPQ9~Gv*0Kq z(XT${{$Y`%YNXr--tl3Rg?|;)T!o<-e8R(w%)QkeH|iD3251%n2Mt5s_SFV!?x zDwTfAfEwE8NB1TcKlLFitwK?LRfT);=6H@Sokvlw$pQP=rT;LZF38|6F3mgmxDv*~ zE}cc(4%Q@e9IXT$G_#4f_gN5I$E%CljCYuA<(MHRc>zC=7;mNgrwhm)xU}ZPp=)%( znm*WXRf(=*14?TAL1n>VNo1lEpbH2myj(SBFi`zC1*m>(H~MY0oVF^2ldejs&<_{W z3aEZu>$(t8ZW@nh^{gcQr~0ufGlJPYGepEL-)H(o<7CuThQ#SQ7cGsm$ldptMe>nX z@C(Gx^bq_d2K4gX)>l43K=otcUF*IloX8#2Cl&B~GV+c@#d*I0I4cYYHx(b8d}1A| zO>^zEJoG1YI5p($PHqlmgfEA3d7=5r*JS+ixlOl&boG`WqUidA>Cem1ldcqcg*N&J zKPzV#GLm5?9#A?b*jeD+xeLin*rvJcrLWw%NQ+2jBDvqVgVT(s+YH*!@si2&D?2Cs zo?3&3VPTp!j#0RuF2o5h4Ne-@ONAHTK@DcwqSD7rTDA=6Jh6E$82FJ1B zQsSa!*H^mE`9uG>_{^wWzPBiU6c+g{L#G}wFN*dF1QAH*(VTrGjNL8w0gKTZrGHIH zrIKDr{ed++gC4@}7Lg(^ekI*{hF1lmjQ3$y|3x){X8NE{&rE4xo`&pA$mHjkP)+7` zXwVHxlIQtsO>O$vghOys(Fy&L1GxY8hN+$5q7$s=wb>%&qq35wk7+t{cMvDFXYXjm zAzDpM_o3T{M4*nY&92CEcGP7w-H_N>Q1a3v)}U|k_6G5KBLUQpz&Kt^SM?vMOZ|`+ z^?ML`%ugdj|pInw@i`@4eF`kuxpeBU#>lS#5 zPjFYvS`Y{5ln3+?iDe_+P=+}s;2#A_CV!?Uy2ilZQX79tjBbBac=8F;&Bl*E z6_sh39?S?ucYgw6dfsSd*F*AVNcIh8_C+;pQPw%%oUZ&P#M$Z*$h?ejB5WcHlXt!l z_jv$-f2Rl8OYy4iPfrkw1>;Ih-WxKCy?8USEO%7+@=e;=?s$DX0sd&jA%U}afnBi4 z60PUG;z|;JH)KK}1zdRt+lSc4Z?^mno!c^dc;#19qED+aq4cv(Kc(n|in;D*tXk@ss{OuF?T90SMwww#wHA-MHE6b%Na;l%3K5 z{lgFGV5Z*S%lUn8Rv706F6!WX*Iv3`PN(UknVwZNe@u;irav^*d-kewc;LMyMd-$t zIYiu>S)AEj9cb;WZEE*GP7hyWgwq}AaHO7<5BUmILH<37Ss9_PQ&>z9rW1)-FZBe- z@eOI7b~;eZn~j&W`1!XAaw=MJB;}K`k8nr`(i59rS-ol_o*y8QG2w;=sDcbCdZm5s zlc?<sn+At@uV=@gkt#R!&)WVCl%{`XL=UtqqzF zPyLzxeI+!uRwADG`MK-u1L}kNRMapG?alfS=pXV2rYVmwZ14usD)#>0D!xhDnLC;O zAE?7Be|b&=sl$xs(JG4CR=$Fv!sKjoj7Ulg22R&6Mt@L;&v*W!4*&1anM?wg=^$xi zH8&Foo;Oxs?_Xc31IjB-G>oWT^R#)k=K>=_YPjlcXHs?Itkhz9FYB7aba=X0P@D{f52S|1SHrOz=R3?~dLdRrK?+NTq&Tzna?iYS8B z>YA}pc!J$Y;KL>$T}rUjY#5Qefqk8Q+>4hWVtd5Sb$jRI%6AQ5F9v}2{h?1ON5V_6 z-cEH5+d_ja0f7D;+4o8a(iypE-1q_!qL3h+7FH!=K(^*o!+1>g8&0SRhr$q~aF+DA z_{P8}GIQ3i-b;c=JC!!G3OZLMuStvFe8SFRA!f)~sLE2Z%Sjhay` z&Z52XB8DiCIBeGP1pf>q4(pw^M_H3CP;I|pedIt>d+fl*Ow&&Bp0iSUo2zRJ48)4( zPm3A@;g4nK%9JBqGVAxO@h`XFZT>-1qn7Q!U~ea!fbytF*cbH2$oM(@CyPg9k82$X z2%+u%5kmii4Ao!Z_P>K@`80ZBdC-U@Iza`Z#%?NN@GkaJEHF_~c1UB?0-z+a0b-1} z5v!48R#=HP5HY7+lzIzmCyii)u)0WRmq~Zl`-}8F3NPGl#*qDGIz7+ZQrI zAEy6)T!;O{zOzLP4z8yCOT$URJsfVuAqnuh@W*JRc`~*4AoC3|IK=WI^J-<+OGX|C z_~2fcsmu{WxO?fT<}1bXexA){%RO~*bDw&FWi`;nj~#?GkH0Q|J{e-AIZ4gUXt0?w z$&w$wd`0`4%QRdU0;b-f%xT5f1_2(skU2W0%L?)PO$~7Pc2QyIw$Jo;J%V_(#l&<- z?XP9S60!$1(7#A&0_jjJBHH4ngZok7V=aL4li0}Gt1-awN8=D!dK@)_(yz{&4${*W z1ofekYxTHAHMAWxJBhcaY&KL=@%!-NVF|Zw))DEy!tZ=O zT$Zu(!@<{tEl@Qy<6q+f4dL;ROxF00VXEwwX4}Uc`SH=&z1}9kg$Kv zJ~oYUWuZ7~_4J8Iw@m{Z3JFCp@4Y z3CLlL>CfcQP_A6jzt|afG6i?0IVKtImYrnC9KK#YnVR|$xj}q}(tcYettm|CCILlX z(;BJN@~uGG$*De!Poa2;AW6w|ywVp3vb*QBXIRN|oLX(h&;HuY{u`Qt9R57hE`1$( z#F+B%BK@tPFa$pe(8^oQv{5;??7R2j_4PNIa&<5sRYOq+LIUU=KMW1g7{BNpwj(Uk zWMfTp1(?=CwfNG*vlIBhN`3Yf2l0XC5qQcNV>&-Zzsc$|4KX|5{Npq4xt9lxDHAnf za4IrhIQk$=;Ex=lU`==TR)hFU?qp`Cy37_f8AGUNawfV(2*aO=mB+kT+9WBQuw*#9@v*TVE_XuLe#HVm&om^W=*3LHu5agwr=6qej_J| zdp#)6P^FNBM#xvQT?oLPO-U|Jvc8A$`W5%s$s{G*TguuJbyl!W*+_hNpu`k( zM%AOa?awg@NKh~~vi8Ce*>r%)dL`h>87FV(u+qg$ErZ;3s;^>4`iVs!ueW1h5%x3v zqiSH?hs^*^{Hi90+5W0%T4sLCF>@aY?Zr>yvnMAt6V<%*mM7ORdhuM_0XJGs3|IkO z=SZW5k47kHHD($rL%9{n8dUuy51|8$?4I8>{hEn*>iB6x?PP%=7p3{4= z&q%WwT|3`+7QND-H_8k;_Q8J!M3b$m6@Eth#Uf$lRoRdXn%dxmUy$%zb7YE%M?rO5`3wwk^Ao;X$f zo!N1(=!QSZ?|i$aA$@Fe^0i!S3U)3L>7(CT#?)|V8q?_p!ZPNvxTXqxf`QZnLNUpS zFWzv4`Uke_@p(rkOGoSe{`d_C{8qYW1e`gn+{h1GsmCem-|(WNH4|t&bBg9A-Hf6% zUIz4htXE<);N!F;;?bN4*AgW|Z)~vzS-#FiwR||#Lee?|ZvaucoRM7-7fa*`R9M7j zv~M(XiXwD#D0I8Bk!d3&>=b!|r>sdp3?1;B=@V`$0Ntf0K~Sv-q8bTcwTWOajJtdl zh9S%WvLRY+tEXTyvH`Sk5yS+VPjd)>umP2k1!IBA$W?P{emLl%ZBJ-=yHXi57g}iC zWWnTul3#)4mSUJlC0}sRd^YUBg7N{OMx4?-xjoolcb^y=@5(3*+a>+aBe{IE0M~xl zZMZ=Do0SUbc$H)zFWcq z{*q`@^TIz(yXk?#VM`H+OoRRNQ%W<!Vdfili7Kzx9m)kC zT6cokiW!1;Ka2`jv~oE;-B7_S%o@MH3y5I z5<+@Jo;3a&Llf-q5qlwfsAEt0M~JloTk&uNo+x{B;tQYYr@A7;lrK{)Hb)ubfN&YA zi11;A@cL63s_onLoCq>uS4h14UQ^^YYcEna)3zc|p(3|=X4|@Hm5N`xA-&XR^Dw!< zub(U)1oeic4+6vOwyYPEy|xi+f9VcOZhlY|&zQg{zxZutA6M!?@NX2|s2kJ|MA6$j zD7#BQ6#ZK|nCQPyw9|qod2l)qMbmWLf8RT!Qx)Z^2bJFm`cA8_pgNsr?zbPfGVJof z^dhqdmxpg*|ARGHI^DsvVQ+UEJx8Dh{3Q}iqVC6Bz9$L#b#%4M;$*_a)h-*1e@0V$ z!ZKGK?|0M}W(eCRty3D|)4}=_tSR1s{9RlUqR{^OYZhO6^@A(iINrdaYL}&L7_>qA zgIiI%cYMD~^-;CHCxAN8I&X{Cznfb;chtNRl|dMKPu_3o_j4E@pCg|<>`TS1ewEAS z(W{M=!cpI}txX{>&EdKY~5`yUwk?jJEU`@h~76mqq+ zF)?*=X8ilh{}_r){a-_os7Q)T#NQfjNw4AP!-N(^oSCVl`k-)ioX-+__=;nHkIqMl zp!x^2^o*3`}S}JUJz&sg+1t20a{OLBd%rHeGyp?N;(M*OQ2**=qgsM*0&_3zNZze*ROp^%Q7v}UB~LXvPlf!TF?IjELl77TJ?vIuOxt`O z$&}bJetN$5{plbsVM|eK6{E28*Y78{T1BrPI+w_e=N3e|lLaaP(OiSw_07C;Vu7sY zB+%rAyW+lj)E>+$`6kPH6&bTvzh8}$w_{B3q7ALy52=EF#-c2wLs@l}zi9WdsT!aU zaReLVbM15S=$JB1M3lul&@n9-F#x#wzHtd&^XFzB9+lZ7wveY_FY%W(03Y{+B2l_h zy(JZ8Z>T@sZ$$IWYB+#%kw5=&Hu4{6G^{Da0V}b0*2& z1BQ|U7Lyi9-nYNzPnHx76-oJ)&rjy0EEXAI1?L8aCJGYKexp+qpk!v$-4dXtW$Oq@ z45a1kYo_8_qW?mfnivRGrGZ!y7n>NE7?=qHiiNEaNQMfA`{&3V*ySdw9WaFafuDcP zF=Y7~DYS|9LgJ|K@7mgNF9chVE20CcB$`+#oT;AOmZL8b#i7 zhPqvRf0xuO?xTo70yinWDD!9{$&3I1`kzU6{L`g zRH@5smsxsi(CpaR(Hk<4D-a(l$D{`ama|bG0kiPT=a1(%P=`3j5Q3e_ES;(5{BP#v zzv45;bKR`jY-4mAtCu#k3Oebn-S~yRV%6SdtEr{WoDl0f60?%wy)T((BMnL`@+a{X?Q=Ut4hD?CD!6WQw_{=bZ2|alU_jV~|9wwD>Uq?p<_T_URSNZA)Bt zY2Z%{8i_8j0fzH$m3T ze419{mcF zEaJh<#cgpSXjL2-cp6YAcWq%L;-ado)(XT<+nw$MTWO}D>K=r)taawnb1r}alQ7CU zSd+YJd^;ObvuEbC%%U#V4&X}A=w|R*PyvgRL zRCM|@<(u6F7EYqA&Jvw`q?=Bv`OS9615{LhmNZ4(7LufK$}Ay;@eA``C|6IHKr7Y%%Rn5Jc&b@@hXF@ zoKbGSSlt?9Swj>_?qw>{%X(RiV;z!6#n#pA5fvJ}{|SUiYQDQCN|ZV+WOHCc@degO zq>M6-dBv;NWJX)GvZ9PGXJ_-KoYv;7J_Jd&KN(p(jh6){uIUUr&kyR=KTpV_L%XPT zzcUD!X~2WyT4MMA4BpkBV$ABm?SZv_+#cZjzYSgyR|gwQV?!5H=f5`&RBe@iiXr(S ztftw37ZwHn2pobT`-UD>nVnA2juw=wHVmm0$dl)j6e^YSnLaadzxjjyeOZ4t$;2Sb za&6{aG4}!=DExLJS8kxaw$Zg=u7CMnf*QTr0R^&?Q6qNK_a?uJ# zdz4Dxs%t+1GpJN79!;^l4yYCXV=ppm3LsDZsq45E~r(tf=#eE z1I;~CpaSm<(9qp9!15XO>v@0=#uE!XwGW3YmOmZ!ll>+Y26lk~_GPT5wR1JYj$w(z zngReQKZGeW@~*oSgH6#a{9z(N=iZ73F%E~tui}Vo3|A>t!=m?Ot`nwcQzrSG6h)@= zncjp!M~&E7aAy!5{WHB%&O|lVAQK?8^OUE0BexaRM#FZ-aP|cM=S`N{wv#5E8IfU@ zxI?gEP5z#d@(6uc;sVdQvZ5#s_Vk7tGju9SbY6#w7WoODm7-UuQ6CHC8ej2u1!}Be zXEb)@*8w*-(zd+?BHux#M|}lmXOpsR2EZb-nO`}s*mJ9J-;wv|^{un##Mbw8^DnH& zkDj^wrtLq<<%TIP4}{TgD-;;@HS|_sJpG1m;ieO?H6PsJtvN214mFa#J^68X8SbA| zc!ZdSHKT*8&0L&4VBIAv*0toLK6THTk8gufM+dC*np)gRUrbV8UB3tcTRkl6e39K} znueTPGfS`TAoh)`$B?bJKMqKFJ&ugitQC99y3Vx~ISO)9mD5tcK=pi;Qw2Qceia#K ztYizz{0%0qNC?I-J!c`|qFIK~^!5ZQa*#ojV-!G0CU}emLdxYA(gAU<-w(a&|8@RL zJ zV@656D~_T8@i0%+lM&5aqo`?POX3-^_?yJ|BVY^q$QQIn2l??1%0`D-{Yr=}Mm4Nb z8KkxGk@B;0ng+H&1rVa_S7a%cN7S&*g7x`}v%SqrD31ix*`xph48BgmuN=%#+LSsb zh+RQ5;CElSWw~9Z_Z%)2ecKOy5Y)A*k-ghi4@Pe$Fc2CT{&G1ws~EB5#%RG3_D^pd zxdY?<06W_{C&LPQ1zJS~EzcpD7WC2A82K_ka{K|<#$<0zlfXWG%7*$UoWt>dn*t>5 zT>b_-xhlHys6abwKnSmzuV+ zjjQ$*j#jT$XQJ*p#p8tnLl|+^ca_z99vUGy)bO_mTm*M*vGMa3?39fYen6C`Z6~kr zk!efgXu(p{<@aIwrXeQ1wMsRmmLg4hO}Oey@uH>A^s=LFw*JA3rC->z%)6Y4SVN2r zGUgpo9m6CHv63XR5A*1@nl{vWb1FrtAJXEONN`kOE{+t)XUQZ^W|0zmxbPK+uqb4I zqVx2)346SD??8vOuUa~lkML>l8ZbdZD3^@>ws4mmM0WQI;yyi|q>?k1*vX74H#rFk z_FKWU#h*z8>hRC(y_+2>=M#I+9op?BSlk@YhJAM$UHrOs0Ts5QZX<6-1{{mVa51?G zGCU_aYz1^}ys1XNXfZx4FL|z81xhl&5Vtb!^>Ql(|qhF$Jx|YsoQo z)m?%57F8Ri8t!n5xJ)NmIY(BB6lP@Y6`IgU2(cZ^$AwUYVZ%+ z8{9vII0cOx%Rp_rQ2{~ZIy{sC#Z7JkOMkN}B78!_$qtBFjq#)(aT4=-u|03WB=S2; zl13qk=HR=5TCWRZnDn7ULrRU=;i25sb`Fsc2o}Y$p#HG%aUdS=;GW?N_jAf|B#7Cm zeae|;4^fM1%BnK2=95ok?0YIw>CG4dS0gKlxv^s!-|!n^!|y|C4LC1I>SWuvGeru~ z*?bu5?D4HX;+i5y0^0#t+TQ-LwEZXe{lDX~zv@|wHjIzTQpfM!Oi8mOomRT9LIH{3 z5@skt5{k%yCMaVPNr5s#ITaz}CPI)DUmP(KmX|wKep*@Ax&?N&T4^2h6r~yrcQ!}4 z`EO`%oti!R>f2^N3LI{BIGa0(N7P>)+F$TJ(rxwTZJU4G4=IZ@$HlLX4=$p`!nK{j zmAQo}?}$YEtE-!EBFo^}SxSo+k?x2zmcBAkXus`PaHcdS$69`TY!4Vnvts>R*~Q%i zc7!t3@?qlG4H{$MzT_^b8u)uNq2nP?05F-U3q5SelA?x;2P~2*cN^>I%=~GPBhLX8 z-c$s#@uNeXojG!%K*^$k{S1MeL9a-GMn(*oQdGlPPUq3GOeT&!73PSDFpy>!GCt(k zkRa-7M?>Nw*-+K3Izot{A_XQ^pxVm}LYR2YpyN*slPxS%M5A^Af=CbpCtj>r7R_+d z*RNL&UM?yUD;S^Y#e_BZSTQi@)Ukm*6tbZ3E)q%NG_j^<(7}dF>7fNw+weeBIuE3# zj3~;l)fqHVVk4x~7WXWSA$*Au;e(_~KMu^+8bysNITt*eP=heThj!*9Sm{{#F=WU9 z)Plny4G0!x`vy$Nb1G^%d02t7uE7at&BJ?h4or|#+9&T|oBZ;J3i{UC>f(IRl`}|6 z^{7hu#3gztO7=wH(Cnf{iHl}sFJWJ_9QW*I&m-eQq{pRB(X@mQ1x?{&yUy=A@zj+> z_X}=`rS$8A8HQd@s`0_2YSW`4qnRzvE!}4^YHGApg=A_!)2Av_=JLwGnrXOEx6E;W zv(6SWEs0Pp7rI@XBL{9Pl|vXUmMUmBhWEY1PEJ(W=zO zF{oCARh@ws*Dx`c15rfuBacEj)ae>gplA;80IX5upyCBp$Ai>29xr-EX zS78=|0fkY?#&6q&s+T(2h2T$)q(X6)6qSh6zZ+^1bFifvxkwaNSALE_ByP z(5)vE5F${%gzP{E#{%5ltiwuV*OZKre=KHcV$->(wa!G;)D>RGq>)7UH3_*n5uLc` z0Fg~~t8MvdCeE~j#@0na8&QdQS#F^L9fmwtIAB_X8^=}5NX}neJ-mD-Q)WPT1n_M! zOQ|!?4#n+R4Lmw5lb;sOBTfJv4*v*2&O(S9!Z}aohwh>Qjx-Ti+jEp<3Ucd>oZv{U z%o2QcyU zGWYlWuLx2Qq(O7!V#gjx!EZaX3p*Ona{N>|=W?MJMO`4&oGeL{(rofZ`MDRNLpRv7 zV=l8$$O|e1+|tJcoszr+3P*xj;H3kRkq&SP*;CD|#!|taiNXA!vKf{9#`qD(hKEdO zIZ+`9WGm1)h_o&-A7Ja{yELq2-@`IFiN@pSN!_@oo8RCts%DGtm^G#gMaa-EB*=Cp zRAFVYux-}Q3s55{v#^4w4@G#Xqd!q6B@5xie_3Mp(2qT&Br5Ycji=1nxsF^kROUzs z72!@pp-xF0k6LORlq;2BU~;#7mNdkkp}CWML3a(KqQ2DJO!DpVx1Ijn6k{mH)RkK(I?@p65#u;rAK79Bap4xz#qSU=+yyA~B z;~ih5#Txv>=sR+rcXf&lEJNx$(;ayPvZsv!3!LYR>N{5+-`L}~6%AJEJNOq0lB+92 zd!7Y~!mAZMKh+F}85cXiHl1h!<(P~nv$ddKcCU5$ytFd8*e-{Nf*PP`RNMANs z6!aIZd8iNsXWp>15Z`w97uRwx+r8RvaApmp+lh(i4xSF2j@yjO=~u#F8GNHG`gXC` z;b`eyU+-VuM86HE&z1;Hnauf3Oo6kOh=TbOKAadSX=Xt8%Nbe7S`8~K|I3c=)BonrfABrd)sl{^kSXq;6Tbp^8ASZ&_XZmQs%FoTYY)XWk z#-1D>#OMx8%G}(6?R-}*cFFRpw^O;)UQEO&+cR2BnjSY7bzEZ^6mu8 zpPtAbIj-&{4s5kSaz5|A5d)xFbewS&0$yrjH~wyP+jx@k@+R#XWmisuakV{t-sKsb z;ydU@gWtMZR%q84;J)BzQ|0Ehd{JA;J3tp|T|0m*E6oZ=h#tlsZ%k32mql{TpNEf<}t|7$u&+d@~5 zvxRy6%F5|EEGK?UoPAwieH;3MuWOSA}}}engB6AXlx;Iox405n0~HhZmZ| z5uK)Q>ZI=z-|4nodnC>y(?B{^cW{>o^(Qt+Wvf#2Gw|-UH&N4d0MGdu*v=Pq^v&U( zhC+>}Diy!y%1E`GOQ1w_nlV+GSHsc(n1MKADFT9lEG#cVFPycPj^hExlKlFBeCGMNvdvJ_}Fw$X~XGaprJb|m&kgMh=|G|w9Dc7@h#U* zz|U@7{OKhG{!anbAP#uedDF|AYVw3vFFfFloM=>!u!!S$?I=rGIW7(Do@>8OT^}xO z?9Wdf9JHFt`DYL)YX%WD@TcwcdG6G578^kb2N7*!_!XJ zyP-25w)uwMPXMO&g=~dd*Yad)b0-qKs2Bo_Qi>=fnIYpNilrnxa?9D8_&2IP%^mA! zZim2Ls=z@H>4DcopY-0b6gB8VzL+13QJiCaotO|_CcND|NijqY&A|0Ww8H!f3%{Jm z2PWSIliBz+NKsa8W_nD_-q?z_Yii&K2N~2(?FnP<7QGl9PAnP0j}kNqff%0$DVi|q z00ZHT0oW`z%pa!L)i@7f&+f{xEVtPWGkqiI9h$b#qn+ySr&0Mb{+)WOO*BusoMQf} zxoA#;Bol?lxlR~C-lR@M$6VeTru)#&1F;s#&bfZ@ky&fq2%AxG5|VS#x*ewZ_FaZe z(}mB`pPRLn9wjbrYuV`;3 z{S#ijhdnTITJYX6w8P!rFP?gTe3CsaJEo!EkcdPj*^WDbzbMx`0+unThk*irK?zBR$SACx5S+CZY!{Sox{QUdg zsI08Wt#s%M(@H=K+hWk6784tIrUuh%&?#B&sgqC8GE~h0?i+~qGsMSN#b+`9f_9%| z0RzUZGXX(u-SP^0hom)m1#!3bjbX|$S^^%OWzzrj$oF zXAbgi?HoLK7~5hx2gQ^YGH{O*hARBVH(ZJ2M8s|-Iv2?wq?>5u+J5#FAA;TW5V7{xJBn^#d0~1^YA|$X^nn1NO_s9Zn?IWM_8wEpbX#z!rp5W9}e3vn1j|GKqO-agSxI8cJueFG*I6U8Wp! z7mc{ElMK*YgCR#q?0B!cF^qB5>XHrW0_b5)QZFzqrl~s_6#M{^o!6G>ui(0*;0CD* z6OKU^gn7mdLGKM4V30zzu0phILR%E_jZ9B%3sXNzaAxUI4j_;DiR3My7u|D8-1omA zePJrF*sc$C?veh|0#7u|@T&&13k)|pe@($;!yvoF!qqX=R#*Pka&4Yhv<<%yHfv(* zi|8ef)Gav4q_2SiN*PpQZjm?W!DDU-qT$WQ4dNcND57ThkpSg*WxYVy{Tg)^&2JC4 zcSzVRgFPB;)j8jVwywBS7N>FOgipBCPgXd2?nrtr5qeN+FNN*ky1}bxc`H)Cbd<_g zP8w0qBB!T=@XHNQFutxz=LZmKmGbhb@WwhAwW0nzrk;D>5oLvso}64w^j%!ll0Ii; z&F{nB&gU=YZ_Pg1qc3~O;NbD)b!Js3{Aqr)*Ac@nmwmc79K+A=-1_2y`=cE@sT<MVFA)bGgh5O)yTje!y}sS zj^j(z+pMNGw1S9x&~{gX$3@uAdUyvSj*io}=@BD?C$(kr38tEobk-DY))coD6l9ww zEymOZM9`TMkSg79tMo`|k%G`){XSm;_}~miffjh$6(HIs2sSIgzd+6sLHjW*`!TY? zZf8EZf%cdEalQtmnjLCc0PF|qC%39k4OZ|PT<>j=XB6-n%3_B+I-`X*zqy2*b>inA zulXclhlUjC1f&Gga9wybh@<1n4WVZG5%NOud7*yHkRIfV1^I(eycY!~QRF63oLSA= z6h+jS-X3ljkK_OXvGM#6%=z^L064J#^1CnaKM3G8QpYL<1fqOg@h*J0JYMbt0@2w3 zJ}_{;nL})j5WZ6ZK+`ux(Y`>alV3VCj_+!Kd(Z%lYYfG+8|s(b1d@i2YpU7=jU}QR zOmO5jXcqqoNM!ZoL{3kY@uWyWWr7|nmuHMTMoCw-`L<)77lzOD!Iym~SyBpgf<@z9fN8(T~8ZYNwoE|ysCNYcCB2q};Cv1uMNqOZ(} zjt|K$w5pHPA(0v86&a196+=iW7>%pL&cQNJQrI(%0R<1xsVYoC-i{EMhlvG{Wm|zE zTfrd$K_LQyO8)E;{RSa8*hc&Pa;l)xV^wFZ$_6-FYS{EEq~OM&U^aSwkX>um3@Lqp zIz158-yyp1r#9zS9d_!BR&H!mO#44nb0c+C9V9^jYt^{Rn=zb^SvVLX%D|VJl%`mk zj*Ml&ueco{?8H9y!Gk`$;S8d#spzK#(_;m88o{1nEh;!^%IO9QUuuRK+#!I}13nuX z5r%S>x&kg8QCQDH&${szI%L(HPScG_O*Ll_7p$DQ=5|O{IuLkiK>&->ty3^umMeFb z>w?uZTP;_;k=CJv7epyo=O{X#CXH73sKt=gePp_AB=fgQr%Fd%9Vg#e>z)^y()SBWx

joy3nvp5KEsin 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

i~7aM{d(9U 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≻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 Y@gOD9=7LZiu$ZS5jz= +Date: Mon, 27 Jun 2022 12:02:49 +0200 +Subject: [PATCH] Support newer JDKs for building + +Apparently the ancient version of lombok used +by a dependency is not compatible with newer +versions of java. As Vault proper did not make +use of lombok, it can be safely removed without +declaring an alternative. + +This commit allows Vault to build under Java 17. +--- + pom.xml | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/pom.xml b/pom.xml +index 5b8a6dfd..17c189fd 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -324,6 +324,12 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms + craftconomy3 + 3.2.2-SNAPSHOT + true ++ ++ ++ org.projectlombok ++ lombok ++ ++ + + + net.crystalyx.bukkit.simplyperms diff --git a/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch b/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch new file mode 100644 index 0000000..7cb7ba1 --- /dev/null +++ b/user/papermc-plugin-vault/823_add-option-to-silence-no-update-logs.patch @@ -0,0 +1,37 @@ +From 52df9d3287e8d593d0e4d999c6d5daaebe947ca1 Mon Sep 17 00:00:00 2001 +From: Ricardo Boss +Date: Tue, 28 Jun 2022 18:50:18 +0200 +Subject: [PATCH] Add option to silence "no update" logs (#823) + +* Added "silent-no-update" config option + +Added switch to turn off messages if no update is available. + +* Set default value for "silent-no-update" + +* Removed any "no update available" option and message +--- + src/net/milkbowl/vault/Vault.java | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java +index ef8b5578..fd2a9787 100644 +--- a/src/net/milkbowl/vault/Vault.java ++++ b/src/net/milkbowl/vault/Vault.java +@@ -171,8 +171,6 @@ public void run() { + log.warning("Update at: https://dev.bukkit.org/projects/vault"); + } else if (currentVersion > newVersion) { + log.info("Stable Version: " + newVersionTitle + " | Current Version: " + currentVersionTitle); +- } else { +- log.info("No new version available"); + } + } catch (Exception e) { + // ignore exceptions +@@ -182,7 +180,6 @@ public void run() { + }, 0, 432000); + + } +- + }); + + // Load up the Plugin metrics diff --git a/user/papermc-plugin-vault/868_update-bstats.patch b/user/papermc-plugin-vault/868_update-bstats.patch new file mode 100644 index 0000000..2ce8023 --- /dev/null +++ b/user/papermc-plugin-vault/868_update-bstats.patch @@ -0,0 +1,72 @@ +From 3f20655f0b1b9c7a0f69eb241c5bedd8e748b5c9 Mon Sep 17 00:00:00 2001 +From: Leonardo Di Gianfelice Stornelli + +Date: Tue, 28 Jun 2022 00:34:40 +0200 +Subject: [PATCH] Update bStats (#868) + +--- + pom.xml | 2 +- + src/net/milkbowl/vault/Vault.java | 9 +++++---- + 2 files changed, 6 insertions(+), 5 deletions(-) + +diff --git a/pom.xml b/pom.xml +index 17c189fd..ccd8cde4 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -85,7 +85,7 @@ Vault currently supports the following: Permissions 3, PEX, GroupManager, bPerms + + org.bstats + bstats-bukkit +- 1.5 ++ 3.0.0 + + + com.gmail.bleedobsidian.miconomy +diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java +index 30f6f17f..ef8b5578 100644 +--- a/src/net/milkbowl/vault/Vault.java ++++ b/src/net/milkbowl/vault/Vault.java +@@ -78,6 +78,7 @@ + import net.milkbowl.vault.permission.plugins.Permission_KPerms; + + import org.bstats.bukkit.Metrics; ++import org.bstats.charts.SimplePie; + import org.bukkit.Bukkit; + import org.bukkit.OfflinePlayer; + import org.bukkit.command.Command; +@@ -185,7 +186,7 @@ public void run() { + }); + + // Load up the Plugin metrics +- Metrics metrics = new Metrics(this); ++ Metrics metrics = new Metrics(this, 887); + findCustomData(metrics); + + log.info(String.format("Enabled Version %s", getDescription().getVersion())); +@@ -581,7 +582,7 @@ private void findCustomData(Metrics metrics) { + econ = rspEcon.getProvider(); + } + final String econName = econ != null ? econ.getName() : "No Economy"; +- metrics.addCustomChart(new Metrics.SimplePie("economy", new Callable() { ++ metrics.addCustomChart(new SimplePie("economy", new Callable() { + @Override + public String call() { + return econName; +@@ -590,7 +591,7 @@ public String call() { + + // Create our Permission Graph and Add our permission Plotters + final String permName = Bukkit.getServer().getServicesManager().getRegistration(Permission.class).getProvider().getName(); +- metrics.addCustomChart(new Metrics.SimplePie("permission", new Callable() { ++ metrics.addCustomChart(new SimplePie("permission", new Callable() { + @Override + public String call() { + return permName; +@@ -604,7 +605,7 @@ public String call() { + chat = rspChat.getProvider(); + } + final String chatName = chat != null ? chat.getName() : "No Chat"; +- metrics.addCustomChart(new Metrics.SimplePie("chat", new Callable() { ++ metrics.addCustomChart(new SimplePie("chat", new Callable() { + @Override + public String call() { + return chatName; diff --git a/user/papermc-plugin-vault/APKBUILD b/user/papermc-plugin-vault/APKBUILD new file mode 100644 index 0000000..dbb0be1 --- /dev/null +++ b/user/papermc-plugin-vault/APKBUILD @@ -0,0 +1,42 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=papermc-plugin-vault +pkgver=1.7.3 +pkgrel=0 +pkgdesc="Vault of common APIs for Bukkit Plugins" +arch='noarch' +url="https://github.com/MilkBowl/Vault" +license="MIT" +depends="papermc>=1.8.8" +makedepends=" + openjdk21-jdk + maven +" +source=" + vault-$pkgver.tar.gz::https://github.com/MilkBowl/Vault/archive/refs/tags/1.7.3.tar.gz + 2022cb0_support-newer-jdk-for-building.patch + 868_update-bstats.patch + 823_add-option-to-silence-no-update-logs.patch + 1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch + " +builddir="$srcdir"/Vault-$pkgver + +build() { + mvn compile + mvn package +} + +check() { + mvn test +} + +package() { + install -Dm644 "$builddir"/target/Vault-$pkgver.jar "$pkgdir/var/lib/papermc/plugins/Vault.jar" +} +sha512sums=" +3d154945e63b7824f0a0e0900fe6db7dc77c97f1967c29760d27a3322ca0b95d76965d8574c24b7cc0e86e822f9b5e3f860cb7167796351c9a921ddf5ef3d36b vault-1.7.3.tar.gz +8b7197b25acf06e545f10dd7dc5447aab6a73d3455bf89b01a4b466331eefa77c86152a47818348cfb901a0d65cff115b75ae37e0f8bb702c35cf13a3942a484 2022cb0_support-newer-jdk-for-building.patch +9124d0feef633f405c3aea6081d4b749df9828d99d0c93d09ba52adb680a781288523d2dfc71be566b8cafd58ac97f152258174ab02294c6e97020a033ee0faa 868_update-bstats.patch +b76b385ff62a955430db8d4d60592983e7475e1e63cd6a9e8c0be0a035662ec4472c6f9c8f09125745c198074695b3e04fe6ad96cbafa5faaba72bcf1bfee896 823_add-option-to-silence-no-update-logs.patch +ea5e36649e65ca690fd8a075bb5f251a8b449ab780a546007e242ec465c58c8c5ae346efac5f1b52e3287f4f400c658f745d130d1e361ecca3436dcf5cb46fb5 1996cfa_finish-removal-native-support-for-abandonned-economy-plugins.patch +" From 382b03e3f2463b759d214ffc3765c87813183bb5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 24 Dec 2024 14:24:37 -0500 Subject: [PATCH 522/738] user/papermc-plugin-luckperms: move from unmaintained, upgrade to 5.4.151, add build function --- .../craftbukkit-plugin-luckperms/APKBUILD | 23 ------------- user/papermc-plugin-luckperms/APKBUILD | 34 +++++++++++++++++++ 2 files changed, 34 insertions(+), 23 deletions(-) delete mode 100644 unmaintained/craftbukkit-plugin-luckperms/APKBUILD create mode 100644 user/papermc-plugin-luckperms/APKBUILD diff --git a/unmaintained/craftbukkit-plugin-luckperms/APKBUILD b/unmaintained/craftbukkit-plugin-luckperms/APKBUILD deleted file mode 100644 index 1ef75e9..0000000 --- a/unmaintained/craftbukkit-plugin-luckperms/APKBUILD +++ /dev/null @@ -1,23 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=craftbukkit-plugin-luckperms -_pkgver=5.3.89 -_buildver=1389 -pkgver=$_pkgver.$_buildver -pkgrel=1 -pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." -options=!check -arch='noarch' -url="https://github.com/lucko/LuckPerms" -license="MIT" -depends="craftbukkit>=1.8.8 craftbukkit<=1.18.1" -source="https://ci.lucko.me/job/LuckPerms/$_buildver/artifact/bukkit/loader/build/libs/LuckPerms-Bukkit-$_pkgver.jar" - -package() { - install -Dm644 "$srcdir"/LuckPerms-Bukkit-$_pkgver.jar "$pkgdir/var/lib/craftbukkit/plugins/LuckPerms.jar" - chown craftbukkit:craftbukkit "$pkgdir"/var/lib/craftbukkit/plugins/LuckPerms.jar -} -sha512sums=" -7e146616cdf7f667c483bbe2112439c85f32427e9aa3714f0b0e869abf0cde6aacc7341d8d9e6a72ddcf8f35af840f4ba678c4690222912113f497cafce11154 LuckPerms-Bukkit-5.3.89.jar -" diff --git a/user/papermc-plugin-luckperms/APKBUILD b/user/papermc-plugin-luckperms/APKBUILD new file mode 100644 index 0000000..4de9ddb --- /dev/null +++ b/user/papermc-plugin-luckperms/APKBUILD @@ -0,0 +1,34 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=papermc-plugin-luckperms +pkgver=5.4.151 +_gittag=0fef481d480737528491fc0b3b8487eb1612f955 +pkgrel=0 +pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." +arch='noarch' +url="https://github.com/lucko/LuckPerms" +license="MIT" +depends="papermc>=1.8.8" +makedepends="openjdk21-jdk" +source="$pkgname-$_gittag.tar.gz::https://github.com/LuckPerms/LuckPerms/archive/$_gittag.tar.gz" +builddir="$srcdir"/LuckPerms-$_gittag + +prepare() { + default_prepare + sed -i "s|project.ext.patchVersion = determinePatchVersion()|project.ext.patchVersion = '${pkgver##*.}'|" build.gradle +} + +build() { + ./gradlew build +} + +check() { + ./gradlew test +} + +package() { + install -Dm644 "$builddir"/bukkit/loader/build/libs/LuckPerms-Bukkit-*.jar "$pkgdir/var/lib/papermc/plugins/LuckPerms.jar" +} +sha512sums=" +e016d2a161472974cc75151e1a6cb3495881d4db7e0aa75d81a1c54fd16d191fe721b1f9fadeaac0bef7ec4a7c47329a2cf367cf3a7577b284077ec173db0579 papermc-plugin-luckperms-0fef481d480737528491fc0b3b8487eb1612f955.tar.gz +" From d31452f43a8b7b301e6284cd27e2afaf0445610b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 24 Dec 2024 14:39:28 -0500 Subject: [PATCH 523/738] user/papermc-plugin-worldguard: move from unmaintained, upgrade to 7.0.13_beta1, add build function --- .../craftbukkit-plugin-worldguard/APKBUILD | 22 -------------- user/papermc-plugin-worldguard/APKBUILD | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+), 22 deletions(-) delete mode 100644 unmaintained/craftbukkit-plugin-worldguard/APKBUILD create mode 100644 user/papermc-plugin-worldguard/APKBUILD diff --git a/unmaintained/craftbukkit-plugin-worldguard/APKBUILD b/unmaintained/craftbukkit-plugin-worldguard/APKBUILD deleted file mode 100644 index 478480b..0000000 --- a/unmaintained/craftbukkit-plugin-worldguard/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=craftbukkit-plugin-worldedit -pkgver=7.0.6 -_pkgver=$pkgver -pkgrel=3 -pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" -options=!check -arch='noarch' -url="https://dev.bukkit.org/projects/worldguard" -license="GPL-3.0" -depends="craftbukkit>=1.17.0 craftbukkit<=1.18.1" -source="https://media.forgecdn.net/files/3461/546/worldguard-bukkit-7.0.6-dist.jar" - -package() { - install -Dm644 "$srcdir"/worldguard-bukkit-$_pkgver-dist.jar "$pkgdir/var/lib/craftbukkit/plugins/WorldGuard.jar" - chown craftbukkit:craftbukkit $pkgdir/var/lib/craftbukkit/plugins/WorldGuard.jar -} -sha512sums=" -f2f857ffbbe7896b8986d5944564d7ab01e51d86476e05c66067a57d83dcb2ee60019ab9d75b16d551e9cfe102d29a602de41f316da57d7743d2595d6a11d839 worldguard-bukkit-7.0.6-dist.jar -" diff --git a/user/papermc-plugin-worldguard/APKBUILD b/user/papermc-plugin-worldguard/APKBUILD new file mode 100644 index 0000000..4fb9957 --- /dev/null +++ b/user/papermc-plugin-worldguard/APKBUILD @@ -0,0 +1,29 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=papermc-plugin-worldguard +pkgver=7.0.13_beta1 +_gittag=2f13ae0444409376feb6c7674591142fe854e12e +pkgrel=0 +pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" +arch='noarch' +url="https://github.com/EngineHub/WorldGuard" +license="GPL-3.0" +depends="papermc>=1.17.0" +makedepends="openjdk21-jdk" +source="$pkgname-$_gittag.tar.gz::https://github.com/EngineHub/WorldGuard/archive/$_gittag.tar.gz" +builddir="$srcdir"/WorldGuard-$_gittag + +build() { + ./gradlew build +} + +check() { + ./gradlew test +} + +package() { + install -Dm644 "$builddir"/worldguard-bukkit/build/libs/worldguard-bukkit-*dist.jar "$pkgdir/var/lib/papermc/plugins/WorldGuard.jar" +} +sha512sums=" +755646330c17df22b1d4eb6f38fc8ea712eff86a0165f2dba6dc1bcd420d2d112547adf60a35f268f45730b8444e540d7d08a02a50df0238bf16c9ff7dc799ff papermc-plugin-worldguard-2f13ae0444409376feb6c7674591142fe854e12e.tar.gz +" From 5d3ff7043caeb66eaa4e240e011de313cba49aaf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 24 Dec 2024 14:32:59 -0500 Subject: [PATCH 524/738] user/papermc-plugin-worldedit: move from unmaintained, upgrade to 7.3.9, add build function --- .../craftbukkit-plugin-worldedit/APKBUILD | 22 -------------- user/papermc-plugin-worldedit/APKBUILD | 29 +++++++++++++++++++ 2 files changed, 29 insertions(+), 22 deletions(-) delete mode 100644 unmaintained/craftbukkit-plugin-worldedit/APKBUILD create mode 100644 user/papermc-plugin-worldedit/APKBUILD diff --git a/unmaintained/craftbukkit-plugin-worldedit/APKBUILD b/unmaintained/craftbukkit-plugin-worldedit/APKBUILD deleted file mode 100644 index 6ee40e2..0000000 --- a/unmaintained/craftbukkit-plugin-worldedit/APKBUILD +++ /dev/null @@ -1,22 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=craftbukkit-plugin-worldedit -pkgver=7.2.8 -_pkgver=$pkgver -pkgrel=1 -pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" -options=!check -arch='noarch' -url="https://dev.bukkit.org/projects/worldedit" -license="GPL-3.0" -depends="craftbukkit>=1.13.2 craftbukkit<=1.18.1" -source="https://media.forgecdn.net/files/3559/523/worldedit-bukkit-7.2.8.jar" - -package() { - install -Dm644 "$srcdir"/worldedit-bukkit-$_pkgver.jar "$pkgdir/var/lib/craftbukkit/plugins/WorldEdit.jar" - chown craftbukkit:craftbukkit $pkgdir/var/lib/craftbukkit/plugins/WorldEdit.jar -} -sha512sums=" -b57eacf7a2d90461f996f71cf55aa2e328d7b75c724291f11bcd1ab0f7e64e980db7ae3a2a56fffdf2bc31bfbcf68dda89b7c6f2ffa32ee430b8016020d796e3 worldedit-bukkit-7.2.8.jar -" diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD new file mode 100644 index 0000000..5634b03 --- /dev/null +++ b/user/papermc-plugin-worldedit/APKBUILD @@ -0,0 +1,29 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=papermc-plugin-worldedit +pkgver=7.3.9 +_pkgver=$pkgver +pkgrel=0 +pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" +arch='noarch !aarch64' +url="https://github.com/EngineHub/WorldEdit" +license="GPL-3.0" +depends="papermc>=1.13.2" +makedepends="openjdk21-jdk" +source="$pkgname-$pkgver.tar.gz::https://github.com/EngineHub/WorldEdit/archive/refs/tags/$pkgver.tar.gz" +builddir="$srcdir"/WorldEdit-$pkgver + +build() { + ./gradlew build --parallel +} + +check() { + ./gradlew test +} + +package() { + install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" +} +sha512sums=" +35eb83dfcd192884a86f9bec3cbe586af6141b8c10461937b2ef112bfb4d64f5f7c6e950108a7893dc5b1054f1d0206f74ec6b4702481c0da69bf89627dbfb06 papermc-plugin-worldedit-7.3.9.tar.gz +" From 0a990a5021a33e8b3fa797d67a60bf80a35c0cc7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 26 Dec 2024 01:26:01 -0500 Subject: [PATCH 525/738] user/papermc-plugin-essentialsx: move from unmaintained, upgrade to 2.21.0_pre151, add build function --- .../craftbukkit-plugin-essentialsx/APKBUILD | 108 ------------------ user/papermc-plugin-essentialsx/APKBUILD | 79 +++++++++++++ 2 files changed, 79 insertions(+), 108 deletions(-) delete mode 100644 unmaintained/craftbukkit-plugin-essentialsx/APKBUILD create mode 100644 user/papermc-plugin-essentialsx/APKBUILD diff --git a/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD b/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD deleted file mode 100644 index 9848a42..0000000 --- a/unmaintained/craftbukkit-plugin-essentialsx/APKBUILD +++ /dev/null @@ -1,108 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=craftbukkit-plugin-essentialx -_pkgver=2.19.2 -_buildver=release -_buildcommit=0 -pkgrel=2 -pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." -options=!check -arch='noarch' -url="https://essentialsx.net/" -license="GPL-3.0" -depends="craftbukkit>=1.8.8 craftbukkit<=1.18.1" - -if _buildver=release; then - pkgver=$_pkgver - _url=https://github.com/EssentialsX/Essentials/releases/download/$pkgver - _filename="$pkgver.jar" -else - pkgver=$_pkgver.$_buildver - _url=https://ci.ender.zone/job/EssentialsX/lastSuccessfulBuild/artifact/jars - _filename="$_pkgver-dev+$_buildver-$_buildcommit.jar" -fi - -source=" - $_url/EssentialsX-$_filename - $_url/EssentialsXChat-$_filename - $_url/EssentialsXSpawn-$_filename - $_url/EssentialsXAntiBuild-$_filename - $_url/EssentialsXDiscord-$_filename - $_url/EssentialsXGeoIP-$_filename - $_url/EssentialsXProtect-$_filename - $_url/EssentialsXXMPP-$_filename -" - -subpackages="$pkgname-core $pkgname-chat $pkgname-spawn $pkgname-antibuild $pkgname-discord $pkgname-geo $pkgname-protect $pkgname-xmpp" - - -package() { - mkdir -p "$pkgdir" -} - -core() { - pkgdesc="Core functionality: teleports, private messages, homes, warps and more" - install -Dm644 "$srcdir"/EssentialsX-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/Essentials.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/Essentials.jar -} - -chat() { - pkgdesc="Chat formatting, local chat" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXChat-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsChat.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsChat.jar -} - -spawn() { - pkgdesc="Spawnpoint control, per-player spawns" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXSpawn-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsSpawn.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsSpawn.jar -} - -antibuild() { - pkgdesc="Simple permissions-based building control" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXAntiBuild-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsAntiBuild.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsAntiBuild.jar -} - -discord() { - pkgdesc="Lightweight chat, messaging and command integration with Discord" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXDiscord-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsDiscord.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsDiscord.jar -} - -geo() { - pkgdesc="Geographical player lookup (formerly EssentialsX GeoIP)" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXGeoIP-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsGeo.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsGeo.jar -} - -protect() { - pkgdesc="Configurable world protection and control" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXProtect-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsProtect.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsProtect.jar -} - -xmpp() { - pkgdesc="Lightweight chat, messaging and server log integration with Jabber/XMPP services" - depends="$pkgname-core" - install -Dm644 "$srcdir"/EssentialsXXMPP-*.jar "$subpkgdir/var/lib/craftbukkit/plugins/EssentialsXMPP.jar" - chown craftbukkit:craftbukkit "$subpkgdir"/var/lib/craftbukkit/plugins/EssentialsXMPP.jar -} - -sha512sums=" -c91c0905c11482d93b1565f8b9dce7b6f939567b4cb2756b112ee408bdcca1fece04742f9b7b0876d5b2e84cebdbc555d35cf783e9e86ab12fafb9dc02bc6008 EssentialsX-2.19.2.jar -e2df6f242db38689579501b34763ad7d4b5e8ddd87b7b57956c6b5cc667f1b34af6b1289d668a64761da63f8ae8507eb9687ca490cc715a3eff6338770963240 EssentialsXChat-2.19.2.jar -24e41168428f20bd6506282b9920718c43f7e5227bf35e174522e49859e294048a1d979ae42044bdbdba45c8a1109f4db6ffd0e24d5f3e909d0f9a3ac31e21d3 EssentialsXSpawn-2.19.2.jar -326ec004241b526965cb67ae0f0245dfa960da2fdb4b59d867eb08e5196fceb468f9314cb838c8a0bc513cc55f43cf58023d11b18ed98e472be7089838538f97 EssentialsXAntiBuild-2.19.2.jar -211c575adde17c3f2f901144e5c31beb2918df7e6e15f8ebe16805d3b53214a4756b87ec84466790ebf1dacb41e1aea97b6a9ba8ed39e85092293a821044d579 EssentialsXDiscord-2.19.2.jar -7845e7666f983d3e793528a7085ced7c9f1bf881740bcc68b6a54fea74e31c3c0c2a52e26fc20330ba7d4a190dad0a1b27195fed0e1417a48494c5fa2ac60d92 EssentialsXGeoIP-2.19.2.jar -e74ed72a15b5e6cd3c5f61d032a26c151865e3197638c9059237dc2d1144b0cb15668545532fc532ac8ec247bdf9b9ee6843b8f4af7506aef86d155dd5672c5f EssentialsXProtect-2.19.2.jar -8d35009499557700f49c27ca3132e866f511a200791dbcfd2f595396977058cc2fc9349d0b4eaa0eb67b27331e91e6209df6ed57a766c06fd3b3325718462478 EssentialsXXMPP-2.19.2.jar -" diff --git a/user/papermc-plugin-essentialsx/APKBUILD b/user/papermc-plugin-essentialsx/APKBUILD new file mode 100644 index 0000000..a815212 --- /dev/null +++ b/user/papermc-plugin-essentialsx/APKBUILD @@ -0,0 +1,79 @@ +# Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) +pkgname=papermc-plugin-essentialsx +pkgver=2.21.0_pre151 +_gittag=f2af9528b0f99f2ff121dda2607e51d391a2a8bf +pkgrel=0 +pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." +arch='noarch' +url="https://essentialsx.net/" +license="GPL-3.0" +depends=" + papermc>=1.8.8 + papermc-plugin-luckperms + papermc-plugin-vault +" +makedepends="openjdk21-jdk" +source="$pkgname-$_gittag.tar.gz::https://github.com/EssentialsX/Essentials/archive/$_gittag.tar.gz" +builddir="$srcdir"/Essentials-$_gittag + +subpackages="$pkgname-chat $pkgname-spawn $pkgname-antibuild $pkgname-discord $pkgname-geo $pkgname-protect $pkgname-xmpp" + +build() { + ./gradlew build +} + +check() { + ./gradlew test +} + +package() { + install -Dm644 "$builddir"/jars/EssentialsX-*.jar "$pkgdir/var/lib/papermc/plugins/Essentials.jar" +} + +chat() { + pkgdesc="Chat formatting, local chat" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXChat-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsChat.jar" +} + +spawn() { + pkgdesc="Spawnpoint control, per-player spawns" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXSpawn-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsSpawn.jar" +} + +antibuild() { + pkgdesc="Simple permissions-based building control" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXAntiBuild-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsAntiBuild.jar" +} + +discord() { + pkgdesc="Lightweight chat, messaging and command integration with Discord" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXDiscord-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsDiscord.jar" + install -Dm644 "$builddir"/jars/EssentialsXDiscordLink-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsDiscordLink.jar" +} + +geo() { + pkgdesc="Geographical player lookup (formerly EssentialsX GeoIP)" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXGeoIP-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsGeo.jar" +} + +protect() { + pkgdesc="Configurable world protection and control" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXProtect-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsProtect.jar" +} + +xmpp() { + pkgdesc="Lightweight chat, messaging and server log integration with Jabber/XMPP services" + depends="$pkgname" + install -Dm644 "$builddir"/jars/EssentialsXXMPP-*.jar "$subpkgdir/var/lib/papermc/plugins/EssentialsXMPP.jar" +} + +sha512sums=" +5fabf6b2091f7182ff23ca02e2f93ff22527668d55bbf60977ad414881c201bdc4608fe3618ca0d1312beb8fe8768f36cd792099817a0205f791ab2f9b212e04 papermc-plugin-essentialsx-f2af9528b0f99f2ff121dda2607e51d391a2a8bf.tar.gz +" From 648e4d3b84a465932c18ccab91e00ec49019c198 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 27 Dec 2024 22:07:17 -0500 Subject: [PATCH 526/738] forgejo-ci: make repository update never fail --- .forgejo/bin/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/build.sh b/.forgejo/bin/build.sh index 8c732ec..d9e327f 100755 --- a/.forgejo/bin/build.sh +++ b/.forgejo/bin/build.sh @@ -108,7 +108,7 @@ set_repositories_for() { [ "$repo" = "$target_repo" ] && break done doas sh -c "printf '%s\n' $repos >> /etc/apk/repositories" - doas apk update + doas apk update || true } apply_offset_limit() { From aa7f92dd6ee10154a656ec8840a7b0156a886695 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 29 Dec 2024 14:27:41 -0500 Subject: [PATCH 527/738] README: update description to not mention LFS --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8a099df..255b3ee 100644 --- a/README.md +++ b/README.md @@ -5,14 +5,14 @@ Upstream: https://ayakael.net/forge/ayaports This repository contains aports that are not yet merged in the official Alpine Linux repository or don’t adhere to Alpine polices. Packages are automatically -built using CI. Once built, they are deployed to a git-lfs repository, making +built using CI. Once built, they are deployed to a Forgejo repository, making them available to apk. Branches are matched to Alpine releases. ## Repositories -You can browse all the repositories at https://codeberg.org/ayakael/ayaports +You can browse all the repositories at https://ayakael.net/forge/ayaports Affixed to each repository description is the appropriate link for use in `/etc/apk/repositories`. From fafce64d027ca48ab7423b1b98f931733266cf16 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 4 Jan 2025 20:42:40 -0500 Subject: [PATCH 528/738] user/pinenote-dbus-service: new aport --- user/pinenote-dbus-service/APKBUILD | 34 +++++++++++++++++++++++ user/pinenote-dbus-service/pinenote.initd | 10 +++++++ 2 files changed, 44 insertions(+) create mode 100644 user/pinenote-dbus-service/APKBUILD create mode 100644 user/pinenote-dbus-service/pinenote.initd diff --git a/user/pinenote-dbus-service/APKBUILD b/user/pinenote-dbus-service/APKBUILD new file mode 100644 index 0000000..0312e65 --- /dev/null +++ b/user/pinenote-dbus-service/APKBUILD @@ -0,0 +1,34 @@ +# Maintainer: Petr Hodina +pkgname=pinenote-dbus-service +pkgver=0.2.2_pre5 +_gittag=0.2.2-dev5 +pkgrel=0 +pkgdesc="Dbus daemon for controlling driver aspects on Pine64 Pinenote" +url="https://github.com/m-weigand/pinenote_dbus_service" +arch="aarch64" +license="MIT" +makedepends="cargo" +depends="dbus-dev" +source=" + pinenote-dbus-service-$_gittag.tar.gz::https://github.com/m-weigand/pinenote_dbus_service/archive/refs/tags/v$_gittag.tar.gz + pinenote.initd +" + +builddir="$srcdir/pinenote_dbus_service-$_gittag" + +build() { + cargo build --release --locked +} + +package() { + cargo install --path . --root="$pkgdir/usr" + install -Dm644 dbus_security_configuration/pinenote.conf -t "$pkgdir"/usr/share/dbus-1/system.d/ + install -Dm755 "$srcdir"/pinenote.initd $pkgdir/etc/init.d/pinenote + rm "$pkgdir"/usr/.crates.toml + rm "$pkgdir"/usr/.crates2.json +} + +sha512sums=" +10cf05f9e1e8affec97b532611a9bffb86928cabe4eb9bd321b66e8dba340e6a7916fa0c8286f81300bfa655d5596bba09f0316abcafa6c55128823c78acb807 pinenote-dbus-service-0.2.2-dev5.tar.gz +362c20218610e7a5349eef40d54463a05906e258157e590ad1635591a548ddc60050142cfab41a0423797182e5ae392a7fe6476fc71b9c01cece384351e6f148 pinenote.initd +" diff --git a/user/pinenote-dbus-service/pinenote.initd b/user/pinenote-dbus-service/pinenote.initd new file mode 100644 index 0000000..0301c53 --- /dev/null +++ b/user/pinenote-dbus-service/pinenote.initd @@ -0,0 +1,10 @@ +#!/sbin/openrc-run + +description="Launch DBus service for driver aspects" +command="/usr/bin/pinenote_dbus_service" +command_background=yes +pidfile="/run/${RC_SVCNAME}.pid" + +depend() { + need dbus +} From 8c9065c3af0f30a1953b6d8a70b8c2647af4d940 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 7 Jan 2025 11:01:44 -0500 Subject: [PATCH 529/738] user/papermc-plugin-worldedit: fix packaging --- user/papermc-plugin-worldedit/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD index 5634b03..96e0215 100644 --- a/user/papermc-plugin-worldedit/APKBUILD +++ b/user/papermc-plugin-worldedit/APKBUILD @@ -3,7 +3,7 @@ pkgname=papermc-plugin-worldedit pkgver=7.3.9 _pkgver=$pkgver -pkgrel=0 +pkgrel=1 pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" arch='noarch !aarch64' url="https://github.com/EngineHub/WorldEdit" @@ -22,7 +22,7 @@ check() { } package() { - install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" + install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver-dist.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" } sha512sums=" 35eb83dfcd192884a86f9bec3cbe586af6141b8c10461937b2ef112bfb4d64f5f7c6e950108a7893dc5b1054f1d0206f74ec6b4702481c0da69bf89627dbfb06 papermc-plugin-worldedit-7.3.9.tar.gz From c2b6767bfae64bcb9d6a2eed5094f520b7d7f9f0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 8 Jan 2025 18:42:10 -0500 Subject: [PATCH 530/738] forgejo-ci: add postmarketOS repo when building aport under pmos --- .forgejo/bin/build.sh | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/build.sh b/.forgejo/bin/build.sh index d9e327f..ad5e30c 100755 --- a/.forgejo/bin/build.sh +++ b/.forgejo/bin/build.sh @@ -7,7 +7,7 @@ set -eu -o pipefail readonly APORTSDIR=$CI_PROJECT_DIR -readonly REPOS="backports user" +readonly REPOS="backports user pmos" readonly ALPINE_REPOS="main community testing" readonly ARCH=$(apk --print-arch) # gitlab variables @@ -16,6 +16,8 @@ readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME : "${REPODEST:=$HOME/packages}" : "${MIRROR:=https://ayakael.net/api/packages/forge/alpine}" : "${ALPINE_MIRROR:=http://dl-cdn.alpinelinux.org/alpine}" +: "${PMOS_MIRROR:=http://mirror.postmarketos.org/postmarketos}" +: "${PMOS_KEY:=https://git.syndicate-lang.org/synit/pmbootstrap/raw/commit/8efee86388408c0d8de45c64fe383580ffd91700/pmb/data/keys/build.postmarketos.org.rsa.pub}" : "${MAX_ARTIFACT_SIZE:=300000000}" #300M : "${CI_DEBUG_BUILD:=}" @@ -137,6 +139,22 @@ setup_system() { git config --global init.defaultBranch master } +setup_pmos() { + local release + + case $BASEBRANCH in + v3.21) release="v24.12";; + v3.20) release="v24.6";; + v3.19) release="v23.12";; + edge) release=master;; + *) die "Branch \"$BASEBRANCH\" not supported!" + esac + + doas wget "$PMOS_KEY" -P /etc/apk/keys + doas sh -c "echo $PMOS_MIRROR/$release >> /etc/apk/repositories" + doas apk update || true +} + sysinfo() { printf ">>> Host system information (arch: %s, release: %s) <<<\n" "$ARCH" "$(get_release)" printf "- Number of Cores: %s\n" "$(nproc)" @@ -144,6 +162,7 @@ sysinfo() { printf "- Free space: %s\n" "$(df -hP / | awk '/\/$/ {print $4}')" } + copy_artifacts() { cd "$APORTSDIR" @@ -204,6 +223,7 @@ build_limit=$CI_ALPINE_BUILD_LIMIT for repo in $(changed_repos); do set_repositories_for "$repo" + [ "$repo" == "pmos" ] && setup_pmos built_aports=0 changed_aports_in_repo=$(changed_aports "$repo") changed_aports_in_repo_count=$(echo "$changed_aports_in_repo" | wc -l) From 5d7449a835f5d26c634f6a861431042675630a48 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 8 Jan 2025 22:39:59 -0500 Subject: [PATCH 531/738] pmos/linux-pine64-pinenote: new aport --- pmos/linux-pine64-pinenote/APKBUILD | 59 + .../config-pine64-pinenote.aarch64 | 7536 +++++++++++++++++ 2 files changed, 7595 insertions(+) create mode 100644 pmos/linux-pine64-pinenote/APKBUILD create mode 100644 pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 diff --git a/pmos/linux-pine64-pinenote/APKBUILD b/pmos/linux-pine64-pinenote/APKBUILD new file mode 100644 index 0000000..9d00d99 --- /dev/null +++ b/pmos/linux-pine64-pinenote/APKBUILD @@ -0,0 +1,59 @@ +# Reference: +# Kernel config based on: arch/arm64/configs/(CHANGEME!) + +pkgname=linux-pine64-pinenote +pkgver=6.12.0_rc2 +pkgrel=0 +pkgdesc="Pine64 PineNote kernel fork" +arch="aarch64" +_carch="arm64" +_flavor="pine64-pinenote" +url="https://kernel.org" +license="GPL-2.0-only" +options="!strip !check !tracedeps pmb:cross-native" +makedepends=" + bash + bc + bison + devicepkg-dev + findutils + flex + openssl-dev + perl +" + +# Source +_repository="linux" +_commit="5392aa8e38082b431f3330c873b288f72ae98f90" +_config="config-$_flavor.$arch" +source=" + $pkgname-$_commit.tar.gz::https://github.com/m-weigand/linux/archive/$_commit.tar.gz + $_config +" +builddir="$srcdir/$_repository-$_commit" + +prepare() { + default_prepare + REPLACE_GCCH=0 \ + . downstreamkernel_prepare +} + +build() { + unset LDFLAGS + make ARCH="$_carch" CC="${CC:-gcc}" \ + KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-postmarketOS" +} + +package() { + downstreamkernel_package "$builddir" "$pkgdir" "$_carch" "$_flavor" + + make modules_install dtbs_install \ + ARCH="$_carch" \ + INSTALL_MOD_PATH="$pkgdir" \ + INSTALL_DTBS_PATH="$pkgdir/boot/dtbs" +} + +sha512sums=" +34f410639b0046a192f18518db2c12593bf2acb27fd76560801d9010558f55b71cb1c3208b9755f1991f361c70cb80265bb587b7028945da85763de25e73704e linux-pine64-pinenote-5392aa8e38082b431f3330c873b288f72ae98f90.tar.gz +d460b63f8b7d32849a3ae426e0258a2b66b251c654f42c69a65b8ec77f24c6f9d0277f0c66879218dfa9aaa58c019592c17b34f5a8518bd67a62a1fbbddb9f9f config-pine64-pinenote.aarch64 +" diff --git a/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 b/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 new file mode 100644 index 0000000..8078456 --- /dev/null +++ b/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 @@ -0,0 +1,7536 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm64 6.12.0-rc2 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 14.2.0) 14.2.0" +CONFIG_CC_IS_GCC=y +CONFIG_GCC_VERSION=140200 +CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=24200 +CONFIG_LD_IS_BFD=y +CONFIG_LD_VERSION=24200 +CONFIG_LLD_VERSION=0 +CONFIG_RUSTC_VERSION=0 +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y +CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_PAHOLE_VERSION=0 +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_TABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_COMPILE_TEST is not set +# CONFIG_WERROR is not set +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_BUILD_SALT="" +CONFIG_DEFAULT_INIT="" +CONFIG_DEFAULT_HOSTNAME="pinenote" +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_SYSVIPC_COMPAT=y +CONFIG_POSIX_MQUEUE=y +CONFIG_POSIX_MQUEUE_SYSCTL=y +# CONFIG_WATCH_QUEUE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +# CONFIG_USELIB is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_ARCH_AUDITSYSCALL=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_GENERIC_IRQ_INJECTION=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_IRQ_IPI=y +CONFIG_GENERIC_MSI_IRQ=y +CONFIG_IRQ_MSI_IOMMU=y +CONFIG_GENERIC_IRQ_STAT_SNAPSHOT=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +CONFIG_GENERIC_IRQ_DEBUGFS=y +# end of IRQ subsystem + +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y +CONFIG_CONTEXT_TRACKING=y +CONFIG_CONTEXT_TRACKING_IDLE=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +CONFIG_NO_HZ_IDLE=y +# CONFIG_NO_HZ_FULL is not set +# CONFIG_NO_HZ is not set +CONFIG_HIGH_RES_TIMERS=y +# end of Timers subsystem + +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y +CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y + +# +# BPF subsystem +# +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_BPF_JIT_DEFAULT_ON=y +CONFIG_BPF_UNPRIV_DEFAULT_OFF=y +# CONFIG_BPF_PRELOAD is not set +# end of BPF subsystem + +CONFIG_PREEMPT_NONE_BUILD=y +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set +# CONFIG_PREEMPT_RT is not set +# CONFIG_PREEMPT_DYNAMIC is not set + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_SCHED_AVG_IRQ=y +CONFIG_SCHED_HW_PRESSURE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_TASKSTATS=y +CONFIG_TASK_DELAY_ACCT=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +CONFIG_PSI_DEFAULT_DISABLED=y +# end of CPU/Task time and stats accounting + +CONFIG_CPU_ISOLATION=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_RCU_EXPERT is not set +CONFIG_TREE_SRCU=y +CONFIG_TASKS_RCU_GENERIC=y +CONFIG_NEED_TASKS_RCU=y +CONFIG_TASKS_RUDE_RCU=y +CONFIG_TASKS_TRACE_RCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y +# end of RCU Subsystem + +CONFIG_IKCONFIG=m +CONFIG_IKCONFIG_PROC=y +# CONFIG_IKHEADERS is not set +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=0 +# CONFIG_PRINTK_INDEX is not set +CONFIG_GENERIC_SCHED_CLOCK=y + +# +# Scheduler features +# +# CONFIG_UCLAMP_TASK is not set +# end of Scheduler features + +CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y +CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y +CONFIG_CC_HAS_INT128=y +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_GCC10_NO_ARRAY_BOUNDS=y +CONFIG_CC_NO_ARRAY_BOUNDS=y +CONFIG_GCC_NO_STRINGOP_OVERFLOW=y +CONFIG_CC_NO_STRINGOP_OVERFLOW=y +CONFIG_ARCH_SUPPORTS_INT128=y +CONFIG_SLAB_OBJ_EXT=y +CONFIG_CGROUPS=y +CONFIG_PAGE_COUNTER=y +# CONFIG_CGROUP_FAVOR_DYNMODS is not set +CONFIG_MEMCG=y +# CONFIG_MEMCG_V1 is not set +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_WRITEBACK=y +CONFIG_CGROUP_SCHED=y +CONFIG_GROUP_SCHED_WEIGHT=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_SCHED_MM_CID=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CGROUP_HUGETLB=y +CONFIG_CPUSETS=y +# CONFIG_CPUSETS_V1 is not set +# CONFIG_PROC_PID_CPUSET is not set +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_MISC=y +# CONFIG_CGROUP_DEBUG is not set +CONFIG_SOCK_CGROUP_DATA=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_TIME_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y +CONFIG_CHECKPOINT_RESTORE=y +# CONFIG_SCHED_AUTOGROUP is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +CONFIG_RD_ZSTD=y +# CONFIG_BOOT_CONFIG is not set +CONFIG_INITRAMFS_PRESERVE_MTIME=y +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_LD_ORPHAN_WARN_LEVEL="warn" +CONFIG_SYSCTL=y +CONFIG_HAVE_UID16=y +CONFIG_SYSCTL_EXCEPTION_TRACE=y +CONFIG_EXPERT=y +# CONFIG_UID16 is not set +CONFIG_MULTIUSER=y +# CONFIG_SGETMASK_SYSCALL is not set +# CONFIG_SYSFS_SYSCALL is not set +CONFIG_FHANDLE=y +CONFIG_POSIX_TIMERS=y +CONFIG_PRINTK=y +CONFIG_BUG=y +# CONFIG_BASE_SMALL is not set +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_IO_URING=y +CONFIG_ADVISE_SYSCALLS=y +CONFIG_MEMBARRIER=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +CONFIG_CACHESTAT_SYSCALL=y +# CONFIG_PC104 is not set +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_SELFTEST is not set +CONFIG_KALLSYMS_ALL=y +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +CONFIG_HAVE_PERF_EVENTS=y + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# end of Kernel Performance Events And Counters + +# CONFIG_PROFILING is not set +CONFIG_TRACEPOINTS=y + +# +# Kexec and crash features +# +CONFIG_CRASH_RESERVE=y +CONFIG_VMCORE_INFO=y +CONFIG_KEXEC_CORE=y +CONFIG_KEXEC=y +CONFIG_KEXEC_FILE=y +# CONFIG_KEXEC_SIG is not set +CONFIG_CRASH_DUMP=y +# end of Kexec and crash features +# end of General setup + +CONFIG_ARM64=y +CONFIG_RUSTC_SUPPORTS_ARM64=y +CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_64BIT=y +CONFIG_MMU=y +CONFIG_ARM64_CONT_PTE_SHIFT=4 +CONFIG_ARM64_CONT_PMD_SHIFT=4 +CONFIG_ARCH_MMAP_RND_BITS_MIN=18 +CONFIG_ARCH_MMAP_RND_BITS_MAX=18 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 +CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CSUM=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_SMP=y +CONFIG_KERNEL_MODE_NEON=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_PGTABLE_LEVELS=5 +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_ARCH_PROC_KCORE_TEXT=y +CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y + +# +# Platform selection +# +# CONFIG_ARCH_ACTIONS is not set +# CONFIG_ARCH_AIROHA is not set +# CONFIG_ARCH_SUNXI is not set +# CONFIG_ARCH_ALPINE is not set +# CONFIG_ARCH_APPLE is not set +# CONFIG_ARCH_BCM is not set +# CONFIG_ARCH_BERLIN is not set +# CONFIG_ARCH_BITMAIN is not set +# CONFIG_ARCH_EXYNOS is not set +# CONFIG_ARCH_SPARX5 is not set +# CONFIG_ARCH_K3 is not set +# CONFIG_ARCH_LG1K is not set +# CONFIG_ARCH_HISI is not set +# CONFIG_ARCH_KEEMBAY is not set +# CONFIG_ARCH_MEDIATEK is not set +# CONFIG_ARCH_MESON is not set +# CONFIG_ARCH_MVEBU is not set +# CONFIG_ARCH_NXP is not set +# CONFIG_ARCH_MA35 is not set +# CONFIG_ARCH_NPCM is not set +# CONFIG_ARCH_PENSANDO is not set +# CONFIG_ARCH_QCOM is not set +# CONFIG_ARCH_REALTEK is not set +# CONFIG_ARCH_RENESAS is not set +CONFIG_ARCH_ROCKCHIP=y +# CONFIG_ARCH_SEATTLE is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set +# CONFIG_ARCH_STM32 is not set +# CONFIG_ARCH_SYNQUACER is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_SPRD is not set +# CONFIG_ARCH_THUNDER is not set +# CONFIG_ARCH_THUNDER2 is not set +# CONFIG_ARCH_UNIPHIER is not set +# CONFIG_ARCH_VEXPRESS is not set +# CONFIG_ARCH_VISCONTI is not set +# CONFIG_ARCH_XGENE is not set +# CONFIG_ARCH_ZYNQMP is not set +# end of Platform selection + +# +# Kernel Features +# + +# +# ARM errata workarounds via the alternatives framework +# +CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y +# CONFIG_ARM64_ERRATUM_826319 is not set +# CONFIG_ARM64_ERRATUM_827319 is not set +# CONFIG_ARM64_ERRATUM_824069 is not set +# CONFIG_ARM64_ERRATUM_819472 is not set +# CONFIG_ARM64_ERRATUM_832075 is not set +CONFIG_ARM64_ERRATUM_1742098=y +# CONFIG_ARM64_ERRATUM_845719 is not set +# CONFIG_ARM64_ERRATUM_843419 is not set +CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y +CONFIG_ARM64_ERRATUM_1024718=y +# CONFIG_ARM64_ERRATUM_1418040 is not set +CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y +# CONFIG_ARM64_ERRATUM_1165522 is not set +# CONFIG_ARM64_ERRATUM_1319367 is not set +CONFIG_ARM64_ERRATUM_1530923=y +# CONFIG_ARM64_ERRATUM_2441007 is not set +# CONFIG_ARM64_ERRATUM_1286807 is not set +# CONFIG_ARM64_ERRATUM_1463225 is not set +# CONFIG_ARM64_ERRATUM_1542419 is not set +# CONFIG_ARM64_ERRATUM_1508412 is not set +# CONFIG_ARM64_ERRATUM_2051678 is not set +CONFIG_ARM64_ERRATUM_2077057=y +CONFIG_ARM64_ERRATUM_2658417=y +# CONFIG_ARM64_ERRATUM_2054223 is not set +# CONFIG_ARM64_ERRATUM_2067961 is not set +# CONFIG_ARM64_ERRATUM_2441009 is not set +CONFIG_ARM64_ERRATUM_2645198=y +CONFIG_ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD=y +CONFIG_ARM64_ERRATUM_2966298=y +CONFIG_ARM64_ERRATUM_3117295=y +CONFIG_ARM64_ERRATUM_3194386=y +# CONFIG_CAVIUM_ERRATUM_22375 is not set +# CONFIG_CAVIUM_ERRATUM_23154 is not set +# CONFIG_CAVIUM_ERRATUM_27456 is not set +# CONFIG_CAVIUM_ERRATUM_30115 is not set +# CONFIG_CAVIUM_TX2_ERRATUM_219 is not set +# CONFIG_FUJITSU_ERRATUM_010001 is not set +# CONFIG_HISILICON_ERRATUM_161600802 is not set +# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set +# CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set +# CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set +# CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set +# CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set +CONFIG_ROCKCHIP_ERRATUM_3588001=y +# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set +# end of ARM errata workarounds via the alternatives framework + +CONFIG_ARM64_4K_PAGES=y +# CONFIG_ARM64_16K_PAGES is not set +# CONFIG_ARM64_64K_PAGES is not set +# CONFIG_ARM64_VA_BITS_39 is not set +# CONFIG_ARM64_VA_BITS_48 is not set +CONFIG_ARM64_VA_BITS_52=y +# CONFIG_ARM64_FORCE_52BIT is not set +CONFIG_ARM64_VA_BITS=52 +CONFIG_ARM64_PA_BITS_52=y +CONFIG_ARM64_PA_BITS=52 +CONFIG_ARM64_LPA2=y +# CONFIG_CPU_BIG_ENDIAN is not set +CONFIG_CPU_LITTLE_ENDIAN=y +CONFIG_SCHED_MC=y +# CONFIG_SCHED_CLUSTER is not set +# CONFIG_SCHED_SMT is not set +CONFIG_NR_CPUS=4 +CONFIG_HOTPLUG_CPU=y +# CONFIG_NUMA is not set +# CONFIG_HZ_100 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +CONFIG_HZ_1000=y +CONFIG_HZ=1000 +CONFIG_SCHED_HRTICK=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_HW_PERF_EVENTS=y +CONFIG_CC_HAVE_SHADOW_CALL_STACK=y +# CONFIG_PARAVIRT is not set +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +CONFIG_ARCH_SUPPORTS_KEXEC=y +CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y +CONFIG_ARCH_SELECTS_KEXEC_FILE=y +CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y +CONFIG_ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG=y +CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y +CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y +CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y +CONFIG_TRANS_TABLE=y +# CONFIG_XEN is not set +CONFIG_ARCH_FORCE_MAX_ORDER=10 +# CONFIG_UNMAP_KERNEL_AT_EL0 is not set +CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y +CONFIG_RODATA_FULL_DEFAULT_ENABLED=y +# CONFIG_ARM64_SW_TTBR0_PAN is not set +# CONFIG_ARM64_TAGGED_ADDR_ABI is not set +CONFIG_COMPAT=y +CONFIG_KUSER_HELPERS=y +# CONFIG_COMPAT_ALIGNMENT_FIXUPS is not set +CONFIG_ARMV8_DEPRECATED=y +# CONFIG_SWP_EMULATION is not set +CONFIG_CP15_BARRIER_EMULATION=y +# CONFIG_SETEND_EMULATION is not set + +# +# ARMv8.1 architectural features +# +# CONFIG_ARM64_HW_AFDBM is not set +CONFIG_ARM64_PAN=y +CONFIG_AS_HAS_LSE_ATOMICS=y +CONFIG_ARM64_LSE_ATOMICS=y +CONFIG_ARM64_USE_LSE_ATOMICS=y +# end of ARMv8.1 architectural features + +# +# ARMv8.2 architectural features +# +CONFIG_AS_HAS_ARMV8_2=y +CONFIG_AS_HAS_SHA3=y +# CONFIG_ARM64_PMEM is not set +CONFIG_ARM64_RAS_EXTN=y +CONFIG_ARM64_CNP=y +# end of ARMv8.2 architectural features + +# +# ARMv8.3 architectural features +# +# CONFIG_ARM64_PTR_AUTH is not set +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y +CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y +CONFIG_AS_HAS_ARMV8_3=y +CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y +CONFIG_AS_HAS_LDAPR=y +# end of ARMv8.3 architectural features + +# +# ARMv8.4 architectural features +# +# CONFIG_ARM64_AMU_EXTN is not set +CONFIG_AS_HAS_ARMV8_4=y +CONFIG_ARM64_TLB_RANGE=y +# end of ARMv8.4 architectural features + +# +# ARMv8.5 architectural features +# +CONFIG_AS_HAS_ARMV8_5=y +# CONFIG_ARM64_BTI is not set +CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y +# CONFIG_ARM64_E0PD is not set +CONFIG_ARM64_AS_HAS_MTE=y +# end of ARMv8.5 architectural features + +# +# ARMv8.7 architectural features +# +# CONFIG_ARM64_EPAN is not set +# end of ARMv8.7 architectural features + +# +# ARMv8.9 architectural features +# +CONFIG_ARM64_POE=y +CONFIG_ARCH_PKEY_BITS=3 +# end of ARMv8.9 architectural features + +# CONFIG_ARM64_SVE is not set +# CONFIG_ARM64_PSEUDO_NMI is not set +CONFIG_RELOCATABLE=y +# CONFIG_RANDOMIZE_BASE is not set +CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y +# end of Kernel Features + +# +# Boot options +# +CONFIG_CMDLINE="" +CONFIG_EFI_STUB=y +CONFIG_EFI=y +# CONFIG_COMPRESSED_INSTALL is not set +CONFIG_DMI=y +# end of Boot options + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_AUTOSLEEP=y +# CONFIG_PM_USERSPACE_AUTOSLEEP is not set +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=100 +CONFIG_PM_WAKELOCKS_GC=y +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_PM_ADVANCED_DEBUG=y +CONFIG_PM_TEST_SUSPEND=y +CONFIG_PM_SLEEP_DEBUG=y +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_PM_GENERIC_DOMAINS_OF=y +CONFIG_CPU_PM=y +CONFIG_ENERGY_MODEL=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +CONFIG_ARCH_SUSPEND_POSSIBLE=y +# end of Power management options + +# +# CPU Power Management +# + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y +# CONFIG_CPU_IDLE_GOV_LADDER is not set +CONFIG_CPU_IDLE_GOV_MENU=y +CONFIG_CPU_IDLE_GOV_TEO=y +CONFIG_DT_IDLE_STATES=y +CONFIG_DT_IDLE_GENPD=y + +# +# ARM CPU Idle Drivers +# +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y +# end of ARM CPU Idle Drivers +# end of CPU Idle + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y + +# +# CPU frequency scaling drivers +# +CONFIG_CPUFREQ_DT=y +CONFIG_CPUFREQ_DT_PLATDEV=y +CONFIG_ARM_SCMI_CPUFREQ=y +# end of CPU Frequency scaling +# end of CPU Power Management + +CONFIG_ARCH_SUPPORTS_ACPI=y +# CONFIG_ACPI is not set +# CONFIG_VIRTUALIZATION is not set +CONFIG_CPU_MITIGATIONS=y + +# +# General architecture-dependent options +# +CONFIG_HOTPLUG_CORE_SYNC=y +CONFIG_HOTPLUG_CORE_SYNC_DEAD=y +# CONFIG_KPROBES is not set +CONFIG_JUMP_LABEL=y +# CONFIG_STATIC_KEYS_SELFTEST is not set +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_HAVE_IOREMAP_PROT=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y +CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y +CONFIG_HAVE_NMI=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_GENERIC_IDLE_POLL_SETUP=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_KEEPINITRD=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_ARCH_HAS_SET_DIRECT_MAP=y +CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_WANTS_NO_INSTR=y +CONFIG_HAVE_ASM_MODVERSIONS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_RUST=y +CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y +CONFIG_MMU_GATHER_TABLE_FREE=y +CONFIG_MMU_GATHER_RCU_TABLE_FREE=y +CONFIG_MMU_LAZY_TLB_REFCOUNT=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y +CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y +CONFIG_HAVE_CMPXCHG_LOCAL=y +CONFIG_HAVE_CMPXCHG_DOUBLE=y +CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set +CONFIG_HAVE_ARCH_STACKLEAK=y +CONFIG_HAVE_STACKPROTECTOR=y +# CONFIG_STACKPROTECTOR is not set +CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y +# CONFIG_SHADOW_CALL_STACK is not set +CONFIG_ARCH_SUPPORTS_LTO_CLANG=y +CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y +CONFIG_LTO_NONE=y +CONFIG_ARCH_SUPPORTS_CFI_CLANG=y +CONFIG_HAVE_CONTEXT_TRACKING_USER=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOVE_PUD=y +CONFIG_HAVE_MOVE_PMD=y +CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y +CONFIG_HAVE_ARCH_HUGE_VMAP=y +CONFIG_HAVE_ARCH_HUGE_VMALLOC=y +CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_MODULES_USE_ELF_RELA=y +CONFIG_ARCH_WANTS_EXECMEM_LATE=y +CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y +CONFIG_SOFTIRQ_ON_OWN_STACK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_ARCH_MMAP_RND_BITS=18 +CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y +CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 +CONFIG_HAVE_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_4KB=y +CONFIG_PAGE_SIZE_LESS_THAN_64KB=y +CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_PAGE_SHIFT=12 +CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_COMPAT_OLD_SIGACTION=y +CONFIG_COMPAT_32BIT_TIME=y +CONFIG_ARCH_SUPPORTS_RT=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y +CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y +CONFIG_RANDOMIZE_KSTACK_OFFSET=y +# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y +CONFIG_HAVE_ARCH_COMPILER_H=y +CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y +CONFIG_ARCH_USE_MEMREMAP_PROT=y +# CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_HAS_RELR=y +CONFIG_ARCH_HAS_MEM_ENCRYPT=y +CONFIG_HAVE_PREEMPT_DYNAMIC=y +CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y +CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y +CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y +CONFIG_ARCH_HAS_HW_PTE_YOUNG=y +CONFIG_ARCH_HAS_KERNEL_FPU_SUPPORT=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# end of GCOV-based kernel profiling + +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_GCC_PLUGINS=y +# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set +CONFIG_FUNCTION_ALIGNMENT_4B=y +CONFIG_FUNCTION_ALIGNMENT_8B=y +CONFIG_FUNCTION_ALIGNMENT=8 +CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y +CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y +# end of General architecture-dependent options + +CONFIG_RT_MUTEXES=y +CONFIG_MODULES=y +# CONFIG_MODULE_DEBUG is not set +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set +CONFIG_MODVERSIONS=y +CONFIG_ASM_MODVERSIONS=y +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +# CONFIG_MODULE_COMPRESS is not set +# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_TRIM_UNUSED_KSYMS is not set +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_BLOCK=y +CONFIG_BLOCK_LEGACY_AUTOLOAD=y +CONFIG_BLK_CGROUP_RWSTAT=y +CONFIG_BLK_CGROUP_PUNT_BIO=y +CONFIG_BLK_DEV_BSG_COMMON=m +CONFIG_BLK_ICQ=y +# CONFIG_BLK_DEV_BSGLIB is not set +# CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLK_DEV_WRITE_MOUNTED=y +# CONFIG_BLK_DEV_ZONED is not set +CONFIG_BLK_DEV_THROTTLING=y +# CONFIG_BLK_WBT is not set +# CONFIG_BLK_CGROUP_IOLATENCY is not set +# CONFIG_BLK_CGROUP_IOCOST is not set +# CONFIG_BLK_CGROUP_IOPRIO is not set +# CONFIG_BLK_DEBUG_FS is not set +# CONFIG_BLK_SED_OPAL is not set +# CONFIG_BLK_INLINE_ENCRYPTION is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_EFI_PARTITION=y +# end of Partition Types + +CONFIG_BLK_MQ_PCI=y +CONFIG_BLK_PM=y +CONFIG_BLOCK_HOLDER_DEPRECATED=y +CONFIG_BLK_MQ_STACKING=y + +# +# IO Schedulers +# +# CONFIG_MQ_IOSCHED_DEADLINE is not set +# CONFIG_MQ_IOSCHED_KYBER is not set +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_BFQ_CGROUP_DEBUG is not set +# end of IO Schedulers + +CONFIG_PADATA=y +CONFIG_ARCH_INLINE_SPIN_TRYLOCK=y +CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=y +CONFIG_ARCH_INLINE_SPIN_LOCK=y +CONFIG_ARCH_INLINE_SPIN_LOCK_BH=y +CONFIG_ARCH_INLINE_SPIN_LOCK_IRQ=y +CONFIG_ARCH_INLINE_SPIN_LOCK_IRQSAVE=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK_BH=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE=y +CONFIG_ARCH_INLINE_READ_LOCK=y +CONFIG_ARCH_INLINE_READ_LOCK_BH=y +CONFIG_ARCH_INLINE_READ_LOCK_IRQ=y +CONFIG_ARCH_INLINE_READ_LOCK_IRQSAVE=y +CONFIG_ARCH_INLINE_READ_UNLOCK=y +CONFIG_ARCH_INLINE_READ_UNLOCK_BH=y +CONFIG_ARCH_INLINE_READ_UNLOCK_IRQ=y +CONFIG_ARCH_INLINE_READ_UNLOCK_IRQRESTORE=y +CONFIG_ARCH_INLINE_WRITE_LOCK=y +CONFIG_ARCH_INLINE_WRITE_LOCK_BH=y +CONFIG_ARCH_INLINE_WRITE_LOCK_IRQ=y +CONFIG_ARCH_INLINE_WRITE_LOCK_IRQSAVE=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK_BH=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE=y +CONFIG_INLINE_SPIN_TRYLOCK=y +CONFIG_INLINE_SPIN_TRYLOCK_BH=y +CONFIG_INLINE_SPIN_LOCK=y +CONFIG_INLINE_SPIN_LOCK_BH=y +CONFIG_INLINE_SPIN_LOCK_IRQ=y +CONFIG_INLINE_SPIN_LOCK_IRQSAVE=y +CONFIG_INLINE_SPIN_UNLOCK_BH=y +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE=y +CONFIG_INLINE_READ_LOCK=y +CONFIG_INLINE_READ_LOCK_BH=y +CONFIG_INLINE_READ_LOCK_IRQ=y +CONFIG_INLINE_READ_LOCK_IRQSAVE=y +CONFIG_INLINE_READ_UNLOCK=y +CONFIG_INLINE_READ_UNLOCK_BH=y +CONFIG_INLINE_READ_UNLOCK_IRQ=y +CONFIG_INLINE_READ_UNLOCK_IRQRESTORE=y +CONFIG_INLINE_WRITE_LOCK=y +CONFIG_INLINE_WRITE_LOCK_BH=y +CONFIG_INLINE_WRITE_LOCK_IRQ=y +CONFIG_INLINE_WRITE_LOCK_IRQSAVE=y +CONFIG_INLINE_WRITE_UNLOCK=y +CONFIG_INLINE_WRITE_UNLOCK_BH=y +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y +CONFIG_QUEUED_SPINLOCKS=y +CONFIG_ARCH_USE_QUEUED_RWLOCKS=y +CONFIG_QUEUED_RWLOCKS=y +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y +CONFIG_FREEZER=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y +CONFIG_ARCH_BINFMT_ELF_STATE=y +CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y +CONFIG_ARCH_HAVE_ELF_PROT=y +CONFIG_ARCH_USE_GNU_PROPERTY=y +CONFIG_ELFCORE=y +CONFIG_BINFMT_SCRIPT=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_COREDUMP is not set +# end of Executable file formats + +# +# Memory Management options +# +# CONFIG_SWAP is not set + +# +# Slab allocator options +# +CONFIG_SLUB=y +# CONFIG_SLUB_TINY is not set +CONFIG_SLAB_MERGE_DEFAULT=y +# CONFIG_SLAB_FREELIST_RANDOM is not set +# CONFIG_SLAB_FREELIST_HARDENED is not set +# CONFIG_SLAB_BUCKETS is not set +# CONFIG_SLUB_STATS is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_RANDOM_KMALLOC_CACHES is not set +# end of Slab allocator options + +# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set +# CONFIG_COMPAT_BRK is not set +CONFIG_SPARSEMEM=y +CONFIG_SPARSEMEM_EXTREME=y +CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_VMEMMAP=y +CONFIG_HAVE_GUP_FAST=y +CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y +# CONFIG_MEMORY_HOTPLUG is not set +CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y +CONFIG_SPLIT_PTE_PTLOCKS=y +CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y +CONFIG_SPLIT_PMD_PTLOCKS=y +CONFIG_COMPACTION=y +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 +# CONFIG_PAGE_REPORTING is not set +CONFIG_MIGRATION=y +CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y +CONFIG_CONTIG_ALLOC=y +CONFIG_PCP_BATCH_SCALE_MAX=5 +CONFIG_PHYS_ADDR_T_64BIT=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y +# CONFIG_MEMORY_FAILURE is not set +CONFIG_ARCH_WANTS_THP_SWAP=y +# CONFIG_TRANSPARENT_HUGEPAGE is not set +CONFIG_PGTABLE_HAS_HUGE_LEAVES=y +CONFIG_CMA=y +CONFIG_CMA_DEBUGFS=y +CONFIG_CMA_SYSFS=y +CONFIG_CMA_AREAS=8 +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set +# CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y +CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y +CONFIG_ARCH_HAS_PTE_DEVMAP=y +CONFIG_ARCH_HAS_ZONE_DMA_SET=y +CONFIG_ZONE_DMA=y +CONFIG_ZONE_DMA32=y +CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y +CONFIG_ARCH_HAS_PKEYS=y +CONFIG_VM_EVENT_COUNTERS=y +# CONFIG_PERCPU_STATS is not set +# CONFIG_GUP_TEST is not set +# CONFIG_DMAPOOL_TEST is not set +CONFIG_ARCH_HAS_PTE_SPECIAL=y +CONFIG_MEMFD_CREATE=y +CONFIG_SECRETMEM=y +# CONFIG_ANON_VMA_NAME is not set +CONFIG_HAVE_ARCH_USERFAULTFD_WP=y +CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y +CONFIG_USERFAULTFD=y +CONFIG_PTE_MARKER_UFFD_WP=y +# CONFIG_LRU_GEN is not set +CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y +CONFIG_PER_VMA_LOCK=y +CONFIG_LOCK_MM_AND_FIND_VMA=y +CONFIG_EXECMEM=y + +# +# Data Access Monitoring +# +# CONFIG_DAMON is not set +# end of Data Access Monitoring +# end of Memory Management options + +CONFIG_NET=y +CONFIG_COMPAT_NETLINK_MESSAGES=y +CONFIG_NET_INGRESS=y +CONFIG_NET_EGRESS=y +CONFIG_NET_XGRESS=y +CONFIG_SKB_EXTENSIONS=y +CONFIG_NET_DEVMEM=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_DIAG is not set +CONFIG_UNIX=y +CONFIG_AF_UNIX_OOB=y +# CONFIG_UNIX_DIAG is not set +# CONFIG_TLS is not set +CONFIG_XFRM=y +CONFIG_XFRM_ALGO=m +CONFIG_XFRM_USER=m +# CONFIG_XFRM_INTERFACE is not set +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +# CONFIG_XFRM_STATISTICS is not set +CONFIG_XFRM_ESP=m +# CONFIG_NET_KEY is not set +# CONFIG_XDP_SOCKETS is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +# CONFIG_IP_PNP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=m +CONFIG_SYN_COOKIES=y +# CONFIG_NET_IPVTI is not set +CONFIG_NET_UDP_TUNNEL=m +# CONFIG_NET_FOU is not set +# CONFIG_INET_AH is not set +CONFIG_INET_ESP=m +# CONFIG_INET_ESP_OFFLOAD is not set +# CONFIG_INET_ESPINTCP is not set +# CONFIG_INET_IPCOMP is not set +CONFIG_INET_TABLE_PERTURB_ORDER=16 +# CONFIG_INET_DIAG is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_AO is not set +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_IPV6_ILA is not set +# CONFIG_IPV6_VTI is not set +# CONFIG_IPV6_SIT is not set +# CONFIG_IPV6_TUNNEL is not set +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_IPV6_SEG6_LWTUNNEL is not set +# CONFIG_IPV6_SEG6_HMAC is not set +# CONFIG_IPV6_RPL_LWTUNNEL is not set +# CONFIG_IPV6_IOAM6_LWTUNNEL is not set +# CONFIG_MPTCP is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NET_PTP_CLASSIFY=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +CONFIG_NETFILTER=y +CONFIG_NETFILTER_ADVANCED=y +CONFIG_BRIDGE_NETFILTER=m + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_INGRESS=y +CONFIG_NETFILTER_EGRESS=y +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_FAMILY_BRIDGE=y +CONFIG_NETFILTER_BPF_LINK=y +# CONFIG_NETFILTER_NETLINK_HOOK is not set +# CONFIG_NETFILTER_NETLINK_ACCT is not set +# CONFIG_NETFILTER_NETLINK_QUEUE is not set +# CONFIG_NETFILTER_NETLINK_LOG is not set +# CONFIG_NETFILTER_NETLINK_OSF is not set +CONFIG_NF_CONNTRACK=m +# CONFIG_NF_LOG_SYSLOG is not set +CONFIG_NETFILTER_CONNCOUNT=m +# CONFIG_NF_CONNTRACK_MARK is not set +# CONFIG_NF_CONNTRACK_ZONES is not set +# CONFIG_NF_CONNTRACK_PROCFS is not set +# CONFIG_NF_CONNTRACK_EVENTS is not set +# CONFIG_NF_CONNTRACK_TIMEOUT is not set +# CONFIG_NF_CONNTRACK_TIMESTAMP is not set +# CONFIG_NF_CONNTRACK_LABELS is not set +CONFIG_NF_CT_PROTO_DCCP=y +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y +# CONFIG_NF_CONNTRACK_AMANDA is not set +# CONFIG_NF_CONNTRACK_FTP is not set +# CONFIG_NF_CONNTRACK_H323 is not set +# CONFIG_NF_CONNTRACK_IRC is not set +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set +# CONFIG_NF_CONNTRACK_SNMP is not set +# CONFIG_NF_CONNTRACK_PPTP is not set +# CONFIG_NF_CONNTRACK_SANE is not set +# CONFIG_NF_CONNTRACK_SIP is not set +# CONFIG_NF_CONNTRACK_TFTP is not set +# CONFIG_NF_CT_NETLINK is not set +CONFIG_NF_NAT=m +CONFIG_NF_NAT_REDIRECT=y +CONFIG_NF_NAT_MASQUERADE=y +CONFIG_NF_TABLES=m +# CONFIG_NF_TABLES_INET is not set +# CONFIG_NF_TABLES_NETDEV is not set +# CONFIG_NFT_NUMGEN is not set +CONFIG_NFT_CT=m +CONFIG_NFT_CONNLIMIT=m +# CONFIG_NFT_LOG is not set +# CONFIG_NFT_LIMIT is not set +CONFIG_NFT_MASQ=m +CONFIG_NFT_REDIR=m +# CONFIG_NFT_TUNNEL is not set +# CONFIG_NFT_QUOTA is not set +CONFIG_NFT_REJECT=m +CONFIG_NFT_COMPAT=m +CONFIG_NFT_HASH=m +# CONFIG_NFT_XFRM is not set +# CONFIG_NFT_SOCKET is not set +# CONFIG_NFT_OSF is not set +# CONFIG_NFT_TPROXY is not set +# CONFIG_NFT_SYNPROXY is not set +# CONFIG_NF_FLOW_TABLE is not set +CONFIG_NETFILTER_XTABLES=y +# CONFIG_NETFILTER_XTABLES_COMPAT is not set + +# +# Xtables combined modules +# +CONFIG_NETFILTER_XT_MARK=m +# CONFIG_NETFILTER_XT_CONNMARK is not set + +# +# Xtables targets +# +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set +# CONFIG_NETFILTER_XT_TARGET_CT is not set +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set +# CONFIG_NETFILTER_XT_TARGET_HL is not set +# CONFIG_NETFILTER_XT_TARGET_HMARK is not set +# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set +# CONFIG_NETFILTER_XT_TARGET_LED is not set +# CONFIG_NETFILTER_XT_TARGET_LOG is not set +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_NAT=m +# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set +CONFIG_NETFILTER_XT_TARGET_REDIRECT=m +CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m +# CONFIG_NETFILTER_XT_TARGET_TEE is not set +# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set + +# +# Xtables matches +# +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +# CONFIG_NETFILTER_XT_MATCH_BPF is not set +# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +# CONFIG_NETFILTER_XT_MATCH_CPU is not set +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set +# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set +# CONFIG_NETFILTER_XT_MATCH_ECN is not set +# CONFIG_NETFILTER_XT_MATCH_ESP is not set +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set +# CONFIG_NETFILTER_XT_MATCH_HL is not set +# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set +CONFIG_NETFILTER_XT_MATCH_IPVS=m +# CONFIG_NETFILTER_XT_MATCH_L2TP is not set +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set +# CONFIG_NETFILTER_XT_MATCH_MAC is not set +# CONFIG_NETFILTER_XT_MATCH_MARK is not set +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set +# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set +# CONFIG_NETFILTER_XT_MATCH_OSF is not set +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set +# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set +# CONFIG_NETFILTER_XT_MATCH_REALM is not set +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set +# CONFIG_NETFILTER_XT_MATCH_STATE is not set +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set +# CONFIG_NETFILTER_XT_MATCH_STRING is not set +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set +# CONFIG_NETFILTER_XT_MATCH_TIME is not set +# CONFIG_NETFILTER_XT_MATCH_U32 is not set +# end of Core Netfilter Configuration + +# CONFIG_IP_SET is not set +CONFIG_IP_VS=m +# CONFIG_IP_VS_IPV6 is not set +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +# CONFIG_IP_VS_PROTO_ESP is not set +# CONFIG_IP_VS_PROTO_AH is not set +# CONFIG_IP_VS_PROTO_SCTP is not set + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +# CONFIG_IP_VS_WRR is not set +# CONFIG_IP_VS_LC is not set +# CONFIG_IP_VS_WLC is not set +# CONFIG_IP_VS_FO is not set +# CONFIG_IP_VS_OVF is not set +# CONFIG_IP_VS_LBLC is not set +# CONFIG_IP_VS_LBLCR is not set +# CONFIG_IP_VS_DH is not set +# CONFIG_IP_VS_SH is not set +# CONFIG_IP_VS_MH is not set +# CONFIG_IP_VS_SED is not set +# CONFIG_IP_VS_NQ is not set +# CONFIG_IP_VS_TWOS is not set + +# +# IPVS SH scheduler +# +CONFIG_IP_VS_SH_TAB_BITS=8 + +# +# IPVS MH scheduler +# +CONFIG_IP_VS_MH_TAB_INDEX=12 + +# +# IPVS application helper +# +CONFIG_IP_VS_NFCT=y + +# +# IP: Netfilter Configuration +# +CONFIG_NF_DEFRAG_IPV4=m +CONFIG_IP_NF_IPTABLES_LEGACY=m +# CONFIG_NF_SOCKET_IPV4 is not set +# CONFIG_NF_TPROXY_IPV4 is not set +# CONFIG_NF_TABLES_IPV4 is not set +# CONFIG_NF_TABLES_ARP is not set +# CONFIG_NF_DUP_IPV4 is not set +# CONFIG_NF_LOG_ARP is not set +# CONFIG_NF_LOG_IPV4 is not set +# CONFIG_NF_REJECT_IPV4 is not set +CONFIG_IP_NF_IPTABLES=m +# CONFIG_IP_NF_MATCH_AH is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_RPFILTER is not set +# CONFIG_IP_NF_MATCH_TTL is not set +CONFIG_IP_NF_FILTER=m +# CONFIG_IP_NF_TARGET_REJECT is not set +# CONFIG_IP_NF_TARGET_SYNPROXY is not set +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m +# CONFIG_IP_NF_TARGET_NETMAP is not set +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_MANGLE=m +# CONFIG_IP_NF_TARGET_ECN is not set +# CONFIG_IP_NF_TARGET_TTL is not set +# CONFIG_IP_NF_RAW is not set +# CONFIG_IP_NF_ARPFILTER is not set +# end of IP: Netfilter Configuration + +# +# IPv6: Netfilter Configuration +# +# CONFIG_NF_SOCKET_IPV6 is not set +# CONFIG_NF_TPROXY_IPV6 is not set +# CONFIG_NF_TABLES_IPV6 is not set +# CONFIG_NF_DUP_IPV6 is not set +# CONFIG_NF_REJECT_IPV6 is not set +# CONFIG_NF_LOG_IPV6 is not set +CONFIG_IP6_NF_IPTABLES=m +# CONFIG_IP6_NF_MATCH_AH is not set +# CONFIG_IP6_NF_MATCH_EUI64 is not set +# CONFIG_IP6_NF_MATCH_FRAG is not set +# CONFIG_IP6_NF_MATCH_OPTS is not set +# CONFIG_IP6_NF_MATCH_HL is not set +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set +# CONFIG_IP6_NF_MATCH_MH is not set +# CONFIG_IP6_NF_MATCH_RPFILTER is not set +# CONFIG_IP6_NF_MATCH_RT is not set +# CONFIG_IP6_NF_MATCH_SRH is not set +# CONFIG_IP6_NF_FILTER is not set +# CONFIG_IP6_NF_TARGET_REJECT is not set +# CONFIG_IP6_NF_TARGET_SYNPROXY is not set +# CONFIG_IP6_NF_MANGLE is not set +# CONFIG_IP6_NF_RAW is not set +# CONFIG_IP6_NF_NAT is not set +# CONFIG_IP6_NF_TARGET_NPT is not set +# end of IPv6: Netfilter Configuration + +CONFIG_NF_DEFRAG_IPV6=m +# CONFIG_NF_TABLES_BRIDGE is not set +# CONFIG_NF_CONNTRACK_BRIDGE is not set +# CONFIG_BRIDGE_NF_EBTABLES is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +CONFIG_STP=m +CONFIG_BRIDGE=m +CONFIG_BRIDGE_IGMP_SNOOPING=y +CONFIG_BRIDGE_VLAN_FILTERING=y +# CONFIG_BRIDGE_MRP is not set +# CONFIG_BRIDGE_CFM is not set +# CONFIG_NET_DSA is not set +CONFIG_VLAN_8021Q=m +# CONFIG_VLAN_8021Q_GVRP is not set +# CONFIG_VLAN_8021Q_MVRP is not set +CONFIG_LLC=m +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_6LOWPAN is not set +# CONFIG_IEEE802154 is not set +CONFIG_NET_SCHED=y + +# +# Queueing/Scheduling +# +# CONFIG_NET_SCH_HTB is not set +# CONFIG_NET_SCH_HFSC is not set +# CONFIG_NET_SCH_PRIO is not set +# CONFIG_NET_SCH_MULTIQ is not set +# CONFIG_NET_SCH_RED is not set +# CONFIG_NET_SCH_SFB is not set +# CONFIG_NET_SCH_SFQ is not set +# CONFIG_NET_SCH_TEQL is not set +# CONFIG_NET_SCH_TBF is not set +# CONFIG_NET_SCH_CBS is not set +# CONFIG_NET_SCH_ETF is not set +# CONFIG_NET_SCH_TAPRIO is not set +# CONFIG_NET_SCH_GRED is not set +# CONFIG_NET_SCH_NETEM is not set +# CONFIG_NET_SCH_DRR is not set +# CONFIG_NET_SCH_MQPRIO is not set +# CONFIG_NET_SCH_SKBPRIO is not set +# CONFIG_NET_SCH_CHOKE is not set +# CONFIG_NET_SCH_QFQ is not set +# CONFIG_NET_SCH_CODEL is not set +# CONFIG_NET_SCH_FQ_CODEL is not set +# CONFIG_NET_SCH_CAKE is not set +# CONFIG_NET_SCH_FQ is not set +# CONFIG_NET_SCH_HHF is not set +# CONFIG_NET_SCH_PIE is not set +# CONFIG_NET_SCH_PLUG is not set +# CONFIG_NET_SCH_ETS is not set +# CONFIG_NET_SCH_DEFAULT is not set + +# +# Classification +# +CONFIG_NET_CLS=y +# CONFIG_NET_CLS_BASIC is not set +# CONFIG_NET_CLS_ROUTE4 is not set +# CONFIG_NET_CLS_FW is not set +# CONFIG_NET_CLS_U32 is not set +# CONFIG_NET_CLS_FLOW is not set +CONFIG_NET_CLS_CGROUP=m +# CONFIG_NET_CLS_BPF is not set +# CONFIG_NET_CLS_FLOWER is not set +# CONFIG_NET_CLS_MATCHALL is not set +# CONFIG_NET_EMATCH is not set +# CONFIG_NET_CLS_ACT is not set +CONFIG_NET_SCH_FIFO=y +# CONFIG_DCB is not set +# CONFIG_DNS_RESOLVER is not set +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +CONFIG_NETLINK_DIAG=y +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +# CONFIG_NET_SWITCHDEV is not set +CONFIG_NET_L3_MASTER_DEV=y +# CONFIG_QRTR is not set +# CONFIG_NET_NCSI is not set +CONFIG_PCPU_DEV_REFCNT=y +CONFIG_MAX_SKB_FRAGS=17 +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +# CONFIG_BPF_STREAM_PARSER is not set +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +CONFIG_BT=m +CONFIG_BT_BREDR=y +CONFIG_BT_RFCOMM=y +CONFIG_BT_RFCOMM_TTY=y +# CONFIG_BT_BNEP is not set +CONFIG_BT_HIDP=m +CONFIG_BT_LE=y +CONFIG_BT_LE_L2CAP_ECRED=y +CONFIG_BT_LEDS=y +# CONFIG_BT_MSFTEXT is not set +# CONFIG_BT_AOSPEXT is not set +CONFIG_BT_DEBUGFS=y +# CONFIG_BT_SELFTEST is not set + +# +# Bluetooth device drivers +# +CONFIG_BT_BCM=m +# CONFIG_BT_HCIBTUSB is not set +# CONFIG_BT_HCIBTSDIO is not set +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_SERDEV=y +CONFIG_BT_HCIUART_H4=y +# CONFIG_BT_HCIUART_NOKIA is not set +# CONFIG_BT_HCIUART_BCSP is not set +# CONFIG_BT_HCIUART_ATH3K is not set +# CONFIG_BT_HCIUART_LL is not set +# CONFIG_BT_HCIUART_3WIRE is not set +# CONFIG_BT_HCIUART_INTEL is not set +CONFIG_BT_HCIUART_BCM=y +# CONFIG_BT_HCIUART_RTL is not set +# CONFIG_BT_HCIUART_QCA is not set +# CONFIG_BT_HCIUART_AG6XX is not set +# CONFIG_BT_HCIUART_MRVL is not set +# CONFIG_BT_HCIUART_AML is not set +# CONFIG_BT_HCIBCM203X is not set +# CONFIG_BT_HCIBCM4377 is not set +# CONFIG_BT_HCIBPA10X is not set +# CONFIG_BT_HCIBFUSB is not set +# CONFIG_BT_HCIVHCI is not set +# CONFIG_BT_MRVL is not set +# CONFIG_BT_MTKSDIO is not set +# CONFIG_BT_MTKUART is not set +# CONFIG_BT_NXPUART is not set +# CONFIG_BT_INTEL_PCIE is not set +# end of Bluetooth device drivers + +# CONFIG_AF_RXRPC is not set +# CONFIG_AF_KCM is not set +# CONFIG_MCTP is not set +CONFIG_WIRELESS=y +CONFIG_WEXT_CORE=y +CONFIG_WEXT_PROC=y +CONFIG_CFG80211=m +# CONFIG_NL80211_TESTMODE is not set +# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set +CONFIG_CFG80211_CERTIFICATION_ONUS=y +# CONFIG_CFG80211_REQUIRE_SIGNED_REGDB is not set +# CONFIG_CFG80211_REG_CELLULAR_HINTS is not set +# CONFIG_CFG80211_REG_RELAX_NO_IR is not set +CONFIG_CFG80211_DEFAULT_PS=y +CONFIG_CFG80211_DEBUGFS=y +# CONFIG_CFG80211_CRDA_SUPPORT is not set +CONFIG_CFG80211_WEXT=y +CONFIG_MAC80211=m +# CONFIG_MAC80211_RC_MINSTREL is not set +CONFIG_MAC80211_RC_DEFAULT="" + +# +# Some wireless drivers require a rate control algorithm +# +# CONFIG_MAC80211_MESH is not set +CONFIG_MAC80211_LEDS=y +CONFIG_MAC80211_DEBUGFS=y +# CONFIG_MAC80211_MESSAGE_TRACING is not set +# CONFIG_MAC80211_DEBUG_MENU is not set +CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 +CONFIG_RFKILL=m +CONFIG_RFKILL_LEDS=y +CONFIG_RFKILL_INPUT=y +# CONFIG_RFKILL_GPIO is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +CONFIG_DST_CACHE=y +CONFIG_GRO_CELLS=y +CONFIG_NET_SELFTESTS=y +CONFIG_NET_SOCK_MSG=y +CONFIG_PAGE_POOL=y +# CONFIG_PAGE_POOL_STATS is not set +# CONFIG_FAILOVER is not set +# CONFIG_ETHTOOL_NETLINK is not set + +# +# Device Drivers +# +CONFIG_ARM_AMBA=y +CONFIG_HAVE_PCI=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_PCI=y +CONFIG_PCI_DOMAINS=y +CONFIG_PCI_DOMAINS_GENERIC=y +CONFIG_PCI_SYSCALL=y +# CONFIG_PCIEPORTBUS is not set +CONFIG_PCIEASPM=y +CONFIG_PCIEASPM_DEFAULT=y +# CONFIG_PCIEASPM_POWERSAVE is not set +# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set +# CONFIG_PCIEASPM_PERFORMANCE is not set +# CONFIG_PCIE_PTM is not set +CONFIG_PCI_MSI=y +CONFIG_PCI_QUIRKS=y +# CONFIG_PCI_DEBUG is not set +# CONFIG_PCI_STUB is not set +# CONFIG_PCI_IOV is not set +# CONFIG_PCI_NPEM is not set +# CONFIG_PCI_PRI is not set +# CONFIG_PCI_PASID is not set +CONFIG_PCI_LABEL=y +# CONFIG_PCI_DYNAMIC_OF_NODES is not set +# CONFIG_PCIE_BUS_TUNE_OFF is not set +CONFIG_PCIE_BUS_DEFAULT=y +# CONFIG_PCIE_BUS_SAFE is not set +# CONFIG_PCIE_BUS_PERFORMANCE is not set +# CONFIG_PCIE_BUS_PEER2PEER is not set +CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 +# CONFIG_HOTPLUG_PCI is not set + +# +# PCI controller drivers +# +# CONFIG_PCIE_ALTERA is not set +# CONFIG_PCI_HOST_THUNDER_PEM is not set +# CONFIG_PCI_HOST_THUNDER_ECAM is not set +# CONFIG_PCI_FTPCI100 is not set +# CONFIG_PCI_HOST_GENERIC is not set +# CONFIG_PCIE_ROCKCHIP_HOST is not set +# CONFIG_PCI_XGENE is not set +# CONFIG_PCIE_XILINX is not set + +# +# Cadence-based PCIe controllers +# +# CONFIG_PCIE_CADENCE_PLAT_HOST is not set +# end of Cadence-based PCIe controllers + +# +# DesignWare-based PCIe controllers +# +CONFIG_PCIE_DW=y +CONFIG_PCIE_DW_HOST=y +# CONFIG_PCIE_AL is not set +# CONFIG_PCI_MESON is not set +# CONFIG_PCI_HISI is not set +# CONFIG_PCIE_KIRIN is not set +# CONFIG_PCIE_DW_PLAT_HOST is not set +CONFIG_PCIE_ROCKCHIP_DW=y +CONFIG_PCIE_ROCKCHIP_DW_HOST=y +# end of DesignWare-based PCIe controllers + +# +# Mobiveil-based PCIe controllers +# +# end of Mobiveil-based PCIe controllers + +# +# PLDA-based PCIe controllers +# +# CONFIG_PCIE_MICROCHIP_HOST is not set +# end of PLDA-based PCIe controllers +# end of PCI controller drivers + +# +# PCI Endpoint +# +# CONFIG_PCI_ENDPOINT is not set +# end of PCI Endpoint + +# +# PCI switch controller drivers +# +# CONFIG_PCI_SW_SWITCHTEC is not set +# end of PCI switch controller drivers + +# CONFIG_CXL_BUS is not set +# CONFIG_PCCARD is not set +# CONFIG_RAPIDIO is not set + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="" +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_DEVTMPFS_SAFE is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y + +# +# Firmware loader +# +CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_DEBUG=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_FW_LOADER_USER_HELPER is not set +CONFIG_FW_LOADER_COMPRESS=y +CONFIG_FW_LOADER_COMPRESS_XZ=y +CONFIG_FW_LOADER_COMPRESS_ZSTD=y +# CONFIG_FW_CACHE is not set +# CONFIG_FW_UPLOAD is not set +# end of Firmware loader + +CONFIG_WANT_DEV_COREDUMP=y +# CONFIG_ALLOW_DEV_COREDUMP is not set +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_DEVICES=y +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_SPI=m +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_IRQ=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set +CONFIG_GENERIC_ARCH_TOPOLOGY=y +# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set +# end of Generic Driver Options + +# +# Bus devices +# +# CONFIG_MOXTET is not set +# CONFIG_VEXPRESS_CONFIG is not set +# CONFIG_MHI_BUS is not set +# CONFIG_MHI_BUS_EP is not set +# end of Bus devices + +# +# Cache Drivers +# +# end of Cache Drivers + +# CONFIG_CONNECTOR is not set + +# +# Firmware Drivers +# + +# +# ARM System Control and Management Interface Protocol +# +CONFIG_ARM_SCMI_PROTOCOL=y +# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set +# CONFIG_ARM_SCMI_DEBUG_COUNTERS is not set + +# +# SCMI Transport Drivers +# +CONFIG_ARM_SCMI_HAVE_TRANSPORT=y +CONFIG_ARM_SCMI_HAVE_SHMEM=y +# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set +CONFIG_ARM_SCMI_TRANSPORT_SMC=y +# CONFIG_ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE is not set +# end of SCMI Transport Drivers + +# +# ARM SCMI NXP i.MX Vendor Protocols +# +# CONFIG_IMX_SCMI_BBM_EXT is not set +# CONFIG_IMX_SCMI_MISC_EXT is not set +# end of ARM SCMI NXP i.MX Vendor Protocols + +# CONFIG_ARM_SCMI_POWER_CONTROL is not set +# end of ARM System Control and Management Interface Protocol + +# CONFIG_ARM_SCPI_PROTOCOL is not set +CONFIG_FIRMWARE_MEMMAP=y +CONFIG_DMIID=y +CONFIG_DMI_SYSFS=y +# CONFIG_FW_CFG_SYSFS is not set +CONFIG_ROCKCHIP_SIP=y +# CONFIG_SYSFB_SIMPLEFB is not set +# CONFIG_ARM_FFA_TRANSPORT is not set +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_ESRT=y +CONFIG_EFI_PARAMS_FROM_FDT=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_GENERIC_STUB=y +# CONFIG_EFI_ZBOOT is not set +CONFIG_EFI_ARMSTUB_DTB_LOADER=y +CONFIG_EFI_BOOTLOADER_CONTROL=y +# CONFIG_EFI_CAPSULE_LOADER is not set +# CONFIG_EFI_TEST is not set +# CONFIG_RESET_ATTACK_MITIGATION is not set +# CONFIG_EFI_DISABLE_PCI_DMA is not set +CONFIG_EFI_EARLYCON=y +# CONFIG_EFI_DISABLE_RUNTIME is not set +# CONFIG_EFI_COCO_SECRET is not set +# end of EFI (Extensible Firmware Interface) Support + +CONFIG_ARM_PSCI_FW=y +# CONFIG_ARM_PSCI_CHECKER is not set + +# +# Qualcomm firmware drivers +# +# end of Qualcomm firmware drivers + +CONFIG_HAVE_ARM_SMCCC=y +CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y +# CONFIG_ARM_SMCCC_SOC_ID is not set + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + +# CONFIG_GNSS is not set +# CONFIG_MTD is not set +CONFIG_DTC=y +CONFIG_OF=y +# CONFIG_OF_UNITTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_KOBJ=y +CONFIG_OF_DYNAMIC=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_RESERVED_MEM=y +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set +CONFIG_CDROM=m +# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set +# CONFIG_ZRAM is not set +CONFIG_ZRAM_DEF_COMP="unset-value" +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +# CONFIG_BLK_DEV_RAM is not set +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +# CONFIG_BLK_DEV_RBD is not set +# CONFIG_BLK_DEV_UBLK is not set + +# +# NVME Support +# +# CONFIG_BLK_DEV_NVME is not set +# CONFIG_NVME_FC is not set +# CONFIG_NVME_TCP is not set +# CONFIG_NVME_TARGET is not set +# end of NVME Support + +# +# Misc devices +# +# CONFIG_AD525X_DPOT is not set +# CONFIG_DUMMY_IRQ is not set +# CONFIG_PHANTOM is not set +# CONFIG_RPMB is not set +# CONFIG_TIFM_CORE is not set +# CONFIG_ICS932S401 is not set +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HP_ILO is not set +# CONFIG_APDS9802ALS is not set +# CONFIG_ISL29003 is not set +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_LATTICE_ECP3_CONFIG is not set +# CONFIG_SRAM is not set +# CONFIG_DW_XDATA_PCIE is not set +# CONFIG_PCI_ENDPOINT_TEST is not set +# CONFIG_XILINX_SDFEC is not set +# CONFIG_HISI_HIKEY_USB is not set +# CONFIG_OPEN_DICE is not set +# CONFIG_VCPU_STALL_DETECTOR is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +# CONFIG_EEPROM_AT24 is not set +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_MAX6875 is not set +# CONFIG_EEPROM_93CX6 is not set +# CONFIG_EEPROM_93XX46 is not set +# CONFIG_EEPROM_IDT_89HPESX is not set +# CONFIG_EEPROM_EE1004 is not set +# end of EEPROM support + +# CONFIG_CB710_CORE is not set + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# end of Texas Instruments shared transport line discipline + +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set +# CONFIG_ALTERA_STAPL is not set +# CONFIG_VMWARE_VMCI is not set +# CONFIG_GENWQE is not set +# CONFIG_ECHO is not set +# CONFIG_BCM_VK is not set +# CONFIG_MISC_ALCOR_PCI is not set +# CONFIG_MISC_RTSX_PCI is not set +# CONFIG_MISC_RTSX_USB is not set +# CONFIG_UACCE is not set +# CONFIG_PVPANIC is not set +# CONFIG_GP_PCI1XXXX is not set +# CONFIG_KEBA_CP500 is not set +# end of Misc devices + +# +# SCSI device support +# +CONFIG_SCSI_MOD=m +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI_COMMON=m +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +# CONFIG_SCSI_PROC_FS is not set + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +# CONFIG_CHR_DEV_ST is not set +CONFIG_BLK_DEV_SR=m +CONFIG_CHR_DEV_SG=m +CONFIG_BLK_DEV_BSG=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +CONFIG_SCSI_SCAN_ASYNC=y + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# end of SCSI Transports + +# CONFIG_SCSI_LOWLEVEL is not set +# CONFIG_SCSI_DH is not set +# end of SCSI device support + +CONFIG_ATA=m +CONFIG_SATA_HOST=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_FORCE=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI=m +CONFIG_SATA_MOBILE_LPM_POLICY=3 +CONFIG_SATA_AHCI_PLATFORM=m +CONFIG_AHCI_DWC=m +# CONFIG_AHCI_CEVA is not set +# CONFIG_SATA_INIC162X is not set +# CONFIG_SATA_ACARD_AHCI is not set +# CONFIG_SATA_SIL24 is not set +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +# CONFIG_PDC_ADMA is not set +# CONFIG_SATA_QSTOR is not set +# CONFIG_SATA_SX4 is not set +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +# CONFIG_ATA_PIIX is not set +# CONFIG_SATA_DWC is not set +# CONFIG_SATA_MV is not set +# CONFIG_SATA_NV is not set +# CONFIG_SATA_PROMISE is not set +# CONFIG_SATA_SIL is not set +# CONFIG_SATA_SIS is not set +# CONFIG_SATA_SVW is not set +# CONFIG_SATA_ULI is not set +# CONFIG_SATA_VIA is not set +# CONFIG_SATA_VITESSE is not set + +# +# PATA SFF controllers with BMDMA +# +# CONFIG_PATA_ALI is not set +# CONFIG_PATA_AMD is not set +# CONFIG_PATA_ARTOP is not set +# CONFIG_PATA_ATIIXP is not set +# CONFIG_PATA_ATP867X is not set +# CONFIG_PATA_CMD64X is not set +# CONFIG_PATA_CYPRESS is not set +# CONFIG_PATA_EFAR is not set +# CONFIG_PATA_HPT366 is not set +# CONFIG_PATA_HPT37X is not set +# CONFIG_PATA_HPT3X2N is not set +# CONFIG_PATA_HPT3X3 is not set +# CONFIG_PATA_IT8213 is not set +# CONFIG_PATA_IT821X is not set +# CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_MARVELL is not set +# CONFIG_PATA_NETCELL is not set +# CONFIG_PATA_NINJA32 is not set +# CONFIG_PATA_NS87415 is not set +# CONFIG_PATA_OLDPIIX is not set +# CONFIG_PATA_OPTIDMA is not set +# CONFIG_PATA_PDC2027X is not set +# CONFIG_PATA_PDC_OLD is not set +# CONFIG_PATA_RADISYS is not set +# CONFIG_PATA_RDC is not set +# CONFIG_PATA_SCH is not set +# CONFIG_PATA_SERVERWORKS is not set +# CONFIG_PATA_SIL680 is not set +# CONFIG_PATA_SIS is not set +# CONFIG_PATA_TOSHIBA is not set +# CONFIG_PATA_TRIFLEX is not set +# CONFIG_PATA_VIA is not set +# CONFIG_PATA_WINBOND is not set + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_MPIIX is not set +# CONFIG_PATA_NS87410 is not set +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OF_PLATFORM is not set +# CONFIG_PATA_RZ1000 is not set + +# +# Generic fallback / legacy drivers +# +# CONFIG_ATA_GENERIC is not set +# CONFIG_PATA_LEGACY is not set +CONFIG_MD=y +# CONFIG_BLK_DEV_MD is not set +CONFIG_MD_BITMAP_FILE=y +# CONFIG_BCACHE is not set +CONFIG_BLK_DEV_DM_BUILTIN=y +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_BUFIO=m +# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set +CONFIG_DM_BIO_PRISON=m +CONFIG_DM_PERSISTENT_DATA=m +# CONFIG_DM_UNSTRIPED is not set +CONFIG_DM_CRYPT=m +# CONFIG_DM_SNAPSHOT is not set +CONFIG_DM_THIN_PROVISIONING=m +# CONFIG_DM_CACHE is not set +# CONFIG_DM_WRITECACHE is not set +# CONFIG_DM_EBS is not set +# CONFIG_DM_ERA is not set +# CONFIG_DM_CLONE is not set +# CONFIG_DM_MIRROR is not set +# CONFIG_DM_RAID is not set +# CONFIG_DM_ZERO is not set +# CONFIG_DM_MULTIPATH is not set +# CONFIG_DM_DELAY is not set +# CONFIG_DM_DUST is not set +# CONFIG_DM_UEVENT is not set +# CONFIG_DM_FLAKEY is not set +# CONFIG_DM_VERITY is not set +# CONFIG_DM_SWITCH is not set +# CONFIG_DM_LOG_WRITES is not set +# CONFIG_DM_INTEGRITY is not set +# CONFIG_DM_VDO is not set +# CONFIG_TARGET_CORE is not set +# CONFIG_FUSION is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +# CONFIG_FIREWIRE_NOSY is not set +# end of IEEE 1394 (FireWire) support + +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +CONFIG_DUMMY=m +CONFIG_WIREGUARD=m +# CONFIG_WIREGUARD_DEBUG is not set +# CONFIG_EQUALIZER is not set +# CONFIG_NET_FC is not set +# CONFIG_NET_TEAM is not set +CONFIG_MACVLAN=m +# CONFIG_MACVTAP is not set +CONFIG_IPVLAN_L3S=y +CONFIG_IPVLAN=m +# CONFIG_IPVTAP is not set +CONFIG_VXLAN=m +# CONFIG_GENEVE is not set +# CONFIG_BAREUDP is not set +# CONFIG_GTP is not set +# CONFIG_PFCP is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +CONFIG_TUN=m +# CONFIG_TUN_VNET_CROSS_LE is not set +CONFIG_VETH=m +# CONFIG_NLMON is not set +# CONFIG_NETKIT is not set +# CONFIG_ARCNET is not set +CONFIG_ETHERNET=y +CONFIG_NET_VENDOR_3COM=y +# CONFIG_VORTEX is not set +# CONFIG_TYPHOON is not set +CONFIG_NET_VENDOR_ADAPTEC=y +# CONFIG_ADAPTEC_STARFIRE is not set +CONFIG_NET_VENDOR_AGERE=y +# CONFIG_ET131X is not set +CONFIG_NET_VENDOR_ALACRITECH=y +# CONFIG_SLICOSS is not set +CONFIG_NET_VENDOR_ALTEON=y +# CONFIG_ACENIC is not set +# CONFIG_ALTERA_TSE is not set +CONFIG_NET_VENDOR_AMAZON=y +# CONFIG_ENA_ETHERNET is not set +CONFIG_NET_VENDOR_AMD=y +# CONFIG_AMD8111_ETH is not set +# CONFIG_PCNET32 is not set +# CONFIG_AMD_XGBE is not set +# CONFIG_PDS_CORE is not set +CONFIG_NET_VENDOR_AQUANTIA=y +# CONFIG_AQTION is not set +CONFIG_NET_VENDOR_ARC=y +# CONFIG_EMAC_ROCKCHIP is not set +CONFIG_NET_VENDOR_ASIX=y +# CONFIG_SPI_AX88796C is not set +CONFIG_NET_VENDOR_ATHEROS=y +# CONFIG_ATL2 is not set +# CONFIG_ATL1 is not set +# CONFIG_ATL1E is not set +# CONFIG_ATL1C is not set +# CONFIG_ALX is not set +CONFIG_NET_VENDOR_BROADCOM=y +# CONFIG_B44 is not set +# CONFIG_BCMGENET is not set +# CONFIG_BNX2 is not set +# CONFIG_CNIC is not set +# CONFIG_TIGON3 is not set +# CONFIG_BNX2X is not set +# CONFIG_SYSTEMPORT is not set +# CONFIG_BNXT is not set +CONFIG_NET_VENDOR_CADENCE=y +# CONFIG_MACB is not set +CONFIG_NET_VENDOR_CAVIUM=y +# CONFIG_THUNDER_NIC_PF is not set +# CONFIG_THUNDER_NIC_VF is not set +# CONFIG_THUNDER_NIC_BGX is not set +# CONFIG_THUNDER_NIC_RGX is not set +# CONFIG_CAVIUM_PTP is not set +# CONFIG_LIQUIDIO is not set +# CONFIG_LIQUIDIO_VF is not set +CONFIG_NET_VENDOR_CHELSIO=y +# CONFIG_CHELSIO_T1 is not set +# CONFIG_CHELSIO_T3 is not set +# CONFIG_CHELSIO_T4 is not set +# CONFIG_CHELSIO_T4VF is not set +CONFIG_NET_VENDOR_CISCO=y +# CONFIG_ENIC is not set +CONFIG_NET_VENDOR_CORTINA=y +# CONFIG_GEMINI_ETHERNET is not set +CONFIG_NET_VENDOR_DAVICOM=y +# CONFIG_DM9051 is not set +# CONFIG_DNET is not set +CONFIG_NET_VENDOR_DEC=y +# CONFIG_NET_TULIP is not set +CONFIG_NET_VENDOR_DLINK=y +# CONFIG_DL2K is not set +# CONFIG_SUNDANCE is not set +CONFIG_NET_VENDOR_EMULEX=y +# CONFIG_BE2NET is not set +CONFIG_NET_VENDOR_ENGLEDER=y +# CONFIG_TSNEP is not set +CONFIG_NET_VENDOR_EZCHIP=y +# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set +CONFIG_NET_VENDOR_FUNGIBLE=y +# CONFIG_FUN_ETH is not set +CONFIG_NET_VENDOR_GOOGLE=y +# CONFIG_GVE is not set +CONFIG_NET_VENDOR_HISILICON=y +# CONFIG_HIX5HD2_GMAC is not set +# CONFIG_HISI_FEMAC is not set +# CONFIG_HIP04_ETH is not set +# CONFIG_HNS_DSAF is not set +# CONFIG_HNS_ENET is not set +# CONFIG_HNS3 is not set +CONFIG_NET_VENDOR_HUAWEI=y +# CONFIG_HINIC is not set +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_INTEL=y +# CONFIG_E100 is not set +# CONFIG_E1000 is not set +# CONFIG_E1000E is not set +# CONFIG_IGB is not set +# CONFIG_IGBVF is not set +# CONFIG_IXGBE is not set +# CONFIG_IXGBEVF is not set +# CONFIG_I40E is not set +# CONFIG_I40EVF is not set +# CONFIG_ICE is not set +# CONFIG_FM10K is not set +# CONFIG_IGC is not set +# CONFIG_IDPF is not set +# CONFIG_JME is not set +CONFIG_NET_VENDOR_ADI=y +CONFIG_NET_VENDOR_LITEX=y +# CONFIG_LITEX_LITEETH is not set +CONFIG_NET_VENDOR_MARVELL=y +# CONFIG_MVMDIO is not set +# CONFIG_SKGE is not set +# CONFIG_SKY2 is not set +# CONFIG_OCTEONTX2_AF is not set +# CONFIG_OCTEONTX2_PF is not set +# CONFIG_OCTEON_EP is not set +# CONFIG_OCTEON_EP_VF is not set +CONFIG_NET_VENDOR_MELLANOX=y +# CONFIG_MLX4_EN is not set +# CONFIG_MLX5_CORE is not set +# CONFIG_MLXSW_CORE is not set +# CONFIG_MLXFW is not set +CONFIG_NET_VENDOR_META=y +CONFIG_NET_VENDOR_MICREL=y +# CONFIG_KS8842 is not set +# CONFIG_KS8851 is not set +# CONFIG_KS8851_MLL is not set +# CONFIG_KSZ884X_PCI is not set +CONFIG_NET_VENDOR_MICROCHIP=y +# CONFIG_ENC28J60 is not set +# CONFIG_ENCX24J600 is not set +# CONFIG_LAN743X is not set +# CONFIG_LAN865X is not set +# CONFIG_VCAP is not set +CONFIG_NET_VENDOR_MICROSEMI=y +CONFIG_NET_VENDOR_MICROSOFT=y +CONFIG_NET_VENDOR_MYRI=y +# CONFIG_MYRI10GE is not set +# CONFIG_FEALNX is not set +CONFIG_NET_VENDOR_NI=y +# CONFIG_NI_XGE_MANAGEMENT_ENET is not set +CONFIG_NET_VENDOR_NATSEMI=y +# CONFIG_NATSEMI is not set +# CONFIG_NS83820 is not set +CONFIG_NET_VENDOR_NETERION=y +# CONFIG_S2IO is not set +CONFIG_NET_VENDOR_NETRONOME=y +# CONFIG_NFP is not set +CONFIG_NET_VENDOR_8390=y +# CONFIG_NE2K_PCI is not set +CONFIG_NET_VENDOR_NVIDIA=y +# CONFIG_FORCEDETH is not set +CONFIG_NET_VENDOR_OKI=y +# CONFIG_ETHOC is not set +# CONFIG_OA_TC6 is not set +CONFIG_NET_VENDOR_PACKET_ENGINES=y +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +CONFIG_NET_VENDOR_PENSANDO=y +# CONFIG_IONIC is not set +CONFIG_NET_VENDOR_QLOGIC=y +# CONFIG_QLA3XXX is not set +# CONFIG_QLCNIC is not set +# CONFIG_NETXEN_NIC is not set +# CONFIG_QED is not set +CONFIG_NET_VENDOR_BROCADE=y +# CONFIG_BNA is not set +CONFIG_NET_VENDOR_QUALCOMM=y +# CONFIG_QCA7000_SPI is not set +# CONFIG_QCA7000_UART is not set +# CONFIG_QCOM_EMAC is not set +# CONFIG_RMNET is not set +CONFIG_NET_VENDOR_RDC=y +# CONFIG_R6040 is not set +CONFIG_NET_VENDOR_REALTEK=y +# CONFIG_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_R8169 is not set +# CONFIG_RTASE is not set +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +# CONFIG_SXGBE_ETH is not set +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SILAN=y +# CONFIG_SC92031 is not set +CONFIG_NET_VENDOR_SIS=y +# CONFIG_SIS900 is not set +# CONFIG_SIS190 is not set +CONFIG_NET_VENDOR_SOLARFLARE=y +# CONFIG_SFC is not set +# CONFIG_SFC_FALCON is not set +# CONFIG_SFC_SIENA is not set +CONFIG_NET_VENDOR_SMSC=y +# CONFIG_SMC91X is not set +# CONFIG_EPIC100 is not set +# CONFIG_SMSC911X is not set +# CONFIG_SMSC9420 is not set +CONFIG_NET_VENDOR_SOCIONEXT=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_STMMAC_ETH=y +# CONFIG_STMMAC_SELFTESTS is not set +CONFIG_STMMAC_PLATFORM=y +# CONFIG_DWMAC_DWC_QOS_ETH is not set +CONFIG_DWMAC_GENERIC=y +CONFIG_DWMAC_ROCKCHIP=y +# CONFIG_DWMAC_INTEL_PLAT is not set +# CONFIG_STMMAC_PCI is not set +CONFIG_NET_VENDOR_SUN=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_CASSINI is not set +# CONFIG_NIU is not set +CONFIG_NET_VENDOR_SYNOPSYS=y +# CONFIG_DWC_XLGMAC is not set +CONFIG_NET_VENDOR_TEHUTI=y +# CONFIG_TEHUTI is not set +# CONFIG_TEHUTI_TN40 is not set +CONFIG_NET_VENDOR_TI=y +# CONFIG_TI_CPSW_PHY_SEL is not set +# CONFIG_TLAN is not set +CONFIG_NET_VENDOR_VERTEXCOM=y +# CONFIG_MSE102X is not set +CONFIG_NET_VENDOR_VIA=y +# CONFIG_VIA_RHINE is not set +# CONFIG_VIA_VELOCITY is not set +CONFIG_NET_VENDOR_WANGXUN=y +# CONFIG_NGBE is not set +CONFIG_NET_VENDOR_WIZNET=y +# CONFIG_WIZNET_W5100 is not set +# CONFIG_WIZNET_W5300 is not set +CONFIG_NET_VENDOR_XILINX=y +# CONFIG_XILINX_EMACLITE is not set +# CONFIG_XILINX_LL_TEMAC is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +CONFIG_PHYLINK=y +CONFIG_PHYLIB=y +CONFIG_SWPHY=y +# CONFIG_LED_TRIGGER_PHY is not set +CONFIG_PHYLIB_LEDS=y +CONFIG_FIXED_PHY=y +# CONFIG_SFP is not set + +# +# MII PHY device drivers +# +# CONFIG_AIR_EN8811H_PHY is not set +# CONFIG_AMD_PHY is not set +# CONFIG_ADIN_PHY is not set +# CONFIG_ADIN1100_PHY is not set +# CONFIG_AQUANTIA_PHY is not set +# CONFIG_AX88796B_PHY is not set +# CONFIG_BROADCOM_PHY is not set +# CONFIG_BCM54140_PHY is not set +# CONFIG_BCM7XXX_PHY is not set +# CONFIG_BCM84881_PHY is not set +# CONFIG_BCM87XX_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_CORTINA_PHY is not set +# CONFIG_DAVICOM_PHY is not set +# CONFIG_ICPLUS_PHY is not set +# CONFIG_LXT_PHY is not set +# CONFIG_INTEL_XWAY_PHY is not set +# CONFIG_LSI_ET1011C_PHY is not set +# CONFIG_MARVELL_PHY is not set +# CONFIG_MARVELL_10G_PHY is not set +# CONFIG_MARVELL_88Q2XXX_PHY is not set +# CONFIG_MARVELL_88X2222_PHY is not set +# CONFIG_MAXLINEAR_GPHY is not set +# CONFIG_MEDIATEK_GE_PHY is not set +# CONFIG_MICREL_PHY is not set +# CONFIG_MICROCHIP_T1S_PHY is not set +# CONFIG_MICROCHIP_PHY is not set +# CONFIG_MICROCHIP_T1_PHY is not set +# CONFIG_MICROSEMI_PHY is not set +CONFIG_MOTORCOMM_PHY=y +# CONFIG_NATIONAL_PHY is not set +# CONFIG_NXP_CBTX_PHY is not set +# CONFIG_NXP_C45_TJA11XX_PHY is not set +# CONFIG_NXP_TJA11XX_PHY is not set +# CONFIG_NCN26000_PHY is not set +# CONFIG_AT803X_PHY is not set +# CONFIG_QCA83XX_PHY is not set +# CONFIG_QCA808X_PHY is not set +# CONFIG_QCA807X_PHY is not set +# CONFIG_QSEMI_PHY is not set +# CONFIG_REALTEK_PHY is not set +# CONFIG_RENESAS_PHY is not set +# CONFIG_ROCKCHIP_PHY is not set +# CONFIG_SMSC_PHY is not set +# CONFIG_STE10XP is not set +# CONFIG_TERANETICS_PHY is not set +# CONFIG_DP83822_PHY is not set +# CONFIG_DP83TC811_PHY is not set +# CONFIG_DP83848_PHY is not set +# CONFIG_DP83867_PHY is not set +# CONFIG_DP83869_PHY is not set +# CONFIG_DP83TD510_PHY is not set +# CONFIG_DP83TG720_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_XILINX_GMII2RGMII is not set +# CONFIG_MICREL_KS8995MA is not set +# CONFIG_PSE_CONTROLLER is not set +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_BUS=y +CONFIG_FWNODE_MDIO=y +CONFIG_OF_MDIO=y +CONFIG_MDIO_DEVRES=y +# CONFIG_MDIO_BITBANG is not set +# CONFIG_MDIO_BCM_UNIMAC is not set +# CONFIG_MDIO_HISI_FEMAC is not set +# CONFIG_MDIO_MVUSB is not set +# CONFIG_MDIO_MSCC_MIIM is not set +# CONFIG_MDIO_OCTEON is not set +# CONFIG_MDIO_IPQ4019 is not set +# CONFIG_MDIO_IPQ8064 is not set +# CONFIG_MDIO_THUNDER is not set + +# +# MDIO Multiplexers +# +# CONFIG_MDIO_BUS_MUX_GPIO is not set +# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set +# CONFIG_MDIO_BUS_MUX_MMIOREG is not set + +# +# PCS device drivers +# +CONFIG_PCS_XPCS=y +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +CONFIG_USB_NET_DRIVERS=m +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_RTL8152 is not set +# CONFIG_USB_LAN78XX is not set +CONFIG_USB_USBNET=m +# CONFIG_USB_NET_AX8817X is not set +# CONFIG_USB_NET_AX88179_178A is not set +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_CDC_EEM=m +CONFIG_USB_NET_CDC_NCM=m +# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set +# CONFIG_USB_NET_CDC_MBIM is not set +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SR9700 is not set +# CONFIG_USB_NET_SR9800 is not set +# CONFIG_USB_NET_SMSC75XX is not set +# CONFIG_USB_NET_SMSC95XX is not set +# CONFIG_USB_NET_GL620A is not set +# CONFIG_USB_NET_NET1080 is not set +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +# CONFIG_USB_NET_CDC_SUBSET is not set +# CONFIG_USB_NET_ZAURUS is not set +# CONFIG_USB_NET_CX82310_ETH is not set +# CONFIG_USB_NET_KALMIA is not set +# CONFIG_USB_NET_QMI_WWAN is not set +# CONFIG_USB_HSO is not set +# CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_USB_SIERRA_NET is not set +# CONFIG_USB_VL600 is not set +# CONFIG_USB_NET_CH9200 is not set +# CONFIG_USB_NET_AQC111 is not set +CONFIG_USB_RTL8153_ECM=m +CONFIG_WLAN=y +# CONFIG_WLAN_VENDOR_ADMTEK is not set +# CONFIG_WLAN_VENDOR_ATH is not set +# CONFIG_WLAN_VENDOR_ATMEL is not set +CONFIG_WLAN_VENDOR_BROADCOM=y +# CONFIG_B43 is not set +# CONFIG_B43LEGACY is not set +CONFIG_BRCMUTIL=m +# CONFIG_BRCMSMAC is not set +CONFIG_BRCMFMAC=m +CONFIG_BRCMFMAC_PROTO_BCDC=y +CONFIG_BRCMFMAC_SDIO=y +# CONFIG_BRCMFMAC_USB is not set +# CONFIG_BRCMFMAC_PCIE is not set +# CONFIG_BRCM_TRACING is not set +# CONFIG_BRCMDBG is not set +# CONFIG_WLAN_VENDOR_INTEL is not set +# CONFIG_WLAN_VENDOR_INTERSIL is not set +# CONFIG_WLAN_VENDOR_MARVELL is not set +# CONFIG_WLAN_VENDOR_MEDIATEK is not set +# CONFIG_WLAN_VENDOR_MICROCHIP is not set +CONFIG_WLAN_VENDOR_PURELIFI=y +# CONFIG_PLFXLC is not set +# CONFIG_WLAN_VENDOR_RALINK is not set +# CONFIG_WLAN_VENDOR_REALTEK is not set +# CONFIG_WLAN_VENDOR_RSI is not set +CONFIG_WLAN_VENDOR_SILABS=y +# CONFIG_WFX is not set +# CONFIG_WLAN_VENDOR_ST is not set +# CONFIG_WLAN_VENDOR_TI is not set +# CONFIG_WLAN_VENDOR_ZYDAS is not set +# CONFIG_WLAN_VENDOR_QUANTENNA is not set +# CONFIG_MAC80211_HWSIM is not set +# CONFIG_VIRT_WIFI is not set +# CONFIG_WAN is not set + +# +# Wireless WAN +# +# CONFIG_WWAN is not set +# end of Wireless WAN + +# CONFIG_VMXNET3 is not set +# CONFIG_NETDEVSIM is not set +# CONFIG_NET_FAILOVER is not set +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_LEDS=y +CONFIG_INPUT_FF_MEMLESS=y +# CONFIG_INPUT_SPARSEKMAP is not set +# CONFIG_INPUT_MATRIXKMAP is not set + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=m +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ADC=m +# CONFIG_KEYBOARD_ADP5588 is not set +# CONFIG_KEYBOARD_ADP5589 is not set +# CONFIG_KEYBOARD_ATKBD is not set +# CONFIG_KEYBOARD_QT1050 is not set +# CONFIG_KEYBOARD_QT1070 is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_DLINK_DIR685 is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_GPIO=y +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_LM8333 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MPR121 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_PINEPHONE is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_OMAP4 is not set +# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_CAP11XX is not set +# CONFIG_KEYBOARD_BCM is not set +# CONFIG_KEYBOARD_CYPRESS_SF is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_ADS7846 is not set +# CONFIG_TOUCHSCREEN_AD7877 is not set +# CONFIG_TOUCHSCREEN_AD7879 is not set +# CONFIG_TOUCHSCREEN_ADC is not set +# CONFIG_TOUCHSCREEN_AR1021_I2C is not set +# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set +# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set +# CONFIG_TOUCHSCREEN_BU21013 is not set +# CONFIG_TOUCHSCREEN_BU21029 is not set +# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set +# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set +# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set +# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set +CONFIG_TOUCHSCREEN_CYTTSP5=m +# CONFIG_TOUCHSCREEN_DYNAPRO is not set +# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set +# CONFIG_TOUCHSCREEN_EETI is not set +# CONFIG_TOUCHSCREEN_EGALAX is not set +# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set +# CONFIG_TOUCHSCREEN_EXC3000 is not set +# CONFIG_TOUCHSCREEN_FUJITSU is not set +# CONFIG_TOUCHSCREEN_GOODIX is not set +# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C is not set +# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI is not set +# CONFIG_TOUCHSCREEN_HIDEEP is not set +# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set +# CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set +# CONFIG_TOUCHSCREEN_ILI210X is not set +# CONFIG_TOUCHSCREEN_ILITEK is not set +# CONFIG_TOUCHSCREEN_S6SY761 is not set +# CONFIG_TOUCHSCREEN_GUNZE is not set +# CONFIG_TOUCHSCREEN_EKTF2127 is not set +# CONFIG_TOUCHSCREEN_ELAN is not set +# CONFIG_TOUCHSCREEN_ELO is not set +# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set +# CONFIG_TOUCHSCREEN_WACOM_I2C is not set +# CONFIG_TOUCHSCREEN_MAX11801 is not set +# CONFIG_TOUCHSCREEN_MMS114 is not set +# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set +# CONFIG_TOUCHSCREEN_MSG2638 is not set +# CONFIG_TOUCHSCREEN_MTOUCH is not set +# CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS is not set +# CONFIG_TOUCHSCREEN_IMAGIS is not set +# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set +# CONFIG_TOUCHSCREEN_INEXIO is not set +# CONFIG_TOUCHSCREEN_PENMOUNT is not set +# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set +# CONFIG_TOUCHSCREEN_PIXCIR is not set +# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set +# CONFIG_TOUCHSCREEN_TSC_SERIO is not set +# CONFIG_TOUCHSCREEN_TSC2004 is not set +# CONFIG_TOUCHSCREEN_TSC2005 is not set +# CONFIG_TOUCHSCREEN_TSC2007 is not set +# CONFIG_TOUCHSCREEN_RM_TS is not set +# CONFIG_TOUCHSCREEN_SILEAD is not set +# CONFIG_TOUCHSCREEN_SIS_I2C is not set +# CONFIG_TOUCHSCREEN_ST1232 is not set +# CONFIG_TOUCHSCREEN_STMFTS is not set +# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set +# CONFIG_TOUCHSCREEN_SX8654 is not set +# CONFIG_TOUCHSCREEN_TPS6507X is not set +# CONFIG_TOUCHSCREEN_ZET6223 is not set +# CONFIG_TOUCHSCREEN_ZFORCE is not set +# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set +# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set +# CONFIG_TOUCHSCREEN_IQS5XX is not set +# CONFIG_TOUCHSCREEN_IQS7211 is not set +# CONFIG_TOUCHSCREEN_ZINITIX is not set +# CONFIG_TOUCHSCREEN_HIMAX_HX83112B is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_ATMEL_CAPTOUCH is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_E3X0_BUTTON is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_GPIO_BEEPER is not set +# CONFIG_INPUT_GPIO_DECODER is not set +# CONFIG_INPUT_GPIO_VIBRA is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_KXTJ9 is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +# CONFIG_INPUT_REGULATOR_HAPTIC is not set +CONFIG_INPUT_UINPUT=m +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_PWM_BEEPER is not set +# CONFIG_INPUT_PWM_VIBRA is not set +CONFIG_INPUT_RK805_PWRKEY=y +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_DA7280_HAPTICS is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_IQS269A is not set +# CONFIG_INPUT_IQS626A is not set +# CONFIG_INPUT_IQS7222 is not set +# CONFIG_INPUT_CMA3000 is not set +# CONFIG_INPUT_DRV260X_HAPTICS is not set +# CONFIG_INPUT_DRV2665_HAPTICS is not set +# CONFIG_INPUT_DRV2667_HAPTICS is not set +CONFIG_INPUT_WS8100_PEN=m +# CONFIG_RMI4_CORE is not set + +# +# Hardware I/O ports +# +# CONFIG_SERIO is not set +# CONFIG_GAMEPORT is not set +# end of Hardware I/O ports +# end of Input device support + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_LEGACY_TIOCSTI=y +# CONFIG_LDISC_AUTOLOAD is not set + +# +# Serial drivers +# +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_8250=y +# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set +CONFIG_SERIAL_8250_16550A_VARIANTS=y +# CONFIG_SERIAL_8250_FINTEK is not set +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_PCILIB=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_EXAR=y +CONFIG_SERIAL_8250_NR_UARTS=4 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +# CONFIG_SERIAL_8250_EXTENDED is not set +# CONFIG_SERIAL_8250_PCI1XXXX is not set +CONFIG_SERIAL_8250_DWLIB=y +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_8250_DW=y +# CONFIG_SERIAL_8250_RT288X is not set +CONFIG_SERIAL_8250_PERICOM=y +CONFIG_SERIAL_OF_PLATFORM=y + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_AMBA_PL010 is not set +# CONFIG_SERIAL_AMBA_PL011 is not set +# CONFIG_SERIAL_EARLYCON_SEMIHOST is not set +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_SIFIVE is not set +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_SC16IS7XX is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +# CONFIG_SERIAL_XILINX_PS_UART is not set +# CONFIG_SERIAL_ARC is not set +# CONFIG_SERIAL_RP2 is not set +# CONFIG_SERIAL_FSL_LPUART is not set +# CONFIG_SERIAL_FSL_LINFLEXUART is not set +# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set +# CONFIG_SERIAL_SPRD is not set +# end of Serial drivers + +CONFIG_SERIAL_MCTRL_GPIO=y +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_NOZOMI is not set +# CONFIG_NULL_TTY is not set +# CONFIG_HVC_DCC is not set +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +# CONFIG_TTY_PRINTK is not set +# CONFIG_VIRTIO_CONSOLE is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_APPLICOM is not set +CONFIG_DEVMEM=y +CONFIG_DEVPORT=y +# CONFIG_TCG_TPM is not set +# CONFIG_XILLYBUS is not set +# CONFIG_XILLYUSB is not set +# end of Character devices + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y +# CONFIG_I2C_MUX is not set +# CONFIG_I2C_HELPER_AUTO is not set +# CONFIG_I2C_SMBUS is not set + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y +# CONFIG_I2C_ALGOPCF is not set +# CONFIG_I2C_ALGOPCA is not set +# end of I2C Algorithms + +# +# I2C Hardware Bus support +# + +# +# PC SMBus host controller drivers +# +# CONFIG_I2C_ALI1535 is not set +# CONFIG_I2C_ALI1563 is not set +# CONFIG_I2C_ALI15X3 is not set +# CONFIG_I2C_AMD756 is not set +# CONFIG_I2C_AMD8111 is not set +# CONFIG_I2C_I801 is not set +# CONFIG_I2C_ISCH is not set +# CONFIG_I2C_PIIX4 is not set +# CONFIG_I2C_NFORCE2 is not set +# CONFIG_I2C_NVIDIA_GPU is not set +# CONFIG_I2C_SIS5595 is not set +# CONFIG_I2C_SIS630 is not set +# CONFIG_I2C_SIS96X is not set +# CONFIG_I2C_VIA is not set +# CONFIG_I2C_VIAPRO is not set + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CADENCE is not set +# CONFIG_I2C_CBUS_GPIO is not set +# CONFIG_I2C_DESIGNWARE_CORE is not set +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_GPIO is not set +# CONFIG_I2C_HISI is not set +# CONFIG_I2C_NOMADIK is not set +# CONFIG_I2C_OCORES is not set +# CONFIG_I2C_PCA_PLATFORM is not set +CONFIG_I2C_RK3X=y +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_THUNDERX is not set +# CONFIG_I2C_XILINX is not set + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_CP2615 is not set +# CONFIG_I2C_PCI1XXXX is not set +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_VIRTIO is not set +# end of I2C Hardware Bus support + +# CONFIG_I2C_STUB is not set +# CONFIG_I2C_SLAVE is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# end of I2C support + +# CONFIG_I3C is not set +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y +# CONFIG_SPI_MEM is not set + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_AXI_SPI_ENGINE is not set +CONFIG_SPI_BITBANG=y +# CONFIG_SPI_CADENCE is not set +# CONFIG_SPI_CADENCE_QUADSPI is not set +# CONFIG_SPI_CH341 is not set +# CONFIG_SPI_DESIGNWARE is not set +CONFIG_SPI_GPIO=y +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_MICROCHIP_CORE is not set +# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set +# CONFIG_SPI_OC_TINY is not set +# CONFIG_SPI_PCI1XXXX is not set +# CONFIG_SPI_PL022 is not set +CONFIG_SPI_ROCKCHIP=y +# CONFIG_SPI_ROCKCHIP_SFC is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_SIFIVE is not set +# CONFIG_SPI_MXIC is not set +# CONFIG_SPI_THUNDERX is not set +# CONFIG_SPI_XCOMM is not set +# CONFIG_SPI_XILINX is not set +# CONFIG_SPI_AMD is not set + +# +# SPI Multiplexer support +# +# CONFIG_SPI_MUX is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_LOOPBACK_TEST is not set +# CONFIG_SPI_TLE62X0 is not set +# CONFIG_SPI_SLAVE is not set +CONFIG_SPI_DYNAMIC=y +# CONFIG_SPMI is not set +# CONFIG_HSI is not set +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PPS_CLIENT_GPIO is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +CONFIG_PTP_1588_CLOCK_KVM=y +# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set +# CONFIG_PTP_1588_CLOCK_IDTCM is not set +# CONFIG_PTP_1588_CLOCK_FC3W is not set +# CONFIG_PTP_1588_CLOCK_MOCK is not set +# end of PTP clock support + +CONFIG_PINCTRL=y +CONFIG_PINMUX=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_AW9523 is not set +# CONFIG_PINCTRL_CY8C95X0 is not set +# CONFIG_PINCTRL_MCP23S08 is not set +# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set +# CONFIG_PINCTRL_OCELOT is not set +# CONFIG_PINCTRL_RK805 is not set +CONFIG_PINCTRL_ROCKCHIP=y +# CONFIG_PINCTRL_SCMI is not set +# CONFIG_PINCTRL_SINGLE is not set +# CONFIG_PINCTRL_STMFX is not set +# CONFIG_PINCTRL_SX150X is not set +# CONFIG_PINCTRL_IMX_SCMI is not set + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + +CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_FASTPATH_LIMIT=512 +CONFIG_OF_GPIO=y +CONFIG_GPIOLIB_IRQCHIP=y +# CONFIG_DEBUG_GPIO is not set +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_CDEV_V1=y + +# +# Memory mapped GPIO drivers +# +# CONFIG_GPIO_74XX_MMIO is not set +# CONFIG_GPIO_ALTERA is not set +# CONFIG_GPIO_CADENCE is not set +# CONFIG_GPIO_DWAPB is not set +# CONFIG_GPIO_EXAR is not set +# CONFIG_GPIO_FTGPIO010 is not set +# CONFIG_GPIO_GENERIC_PLATFORM is not set +# CONFIG_GPIO_GRGPIO is not set +# CONFIG_GPIO_HISI is not set +# CONFIG_GPIO_HLWD is not set +# CONFIG_GPIO_LOGICVC is not set +# CONFIG_GPIO_MB86S7X is not set +# CONFIG_GPIO_PL061 is not set +CONFIG_GPIO_ROCKCHIP=y +# CONFIG_GPIO_SIFIVE is not set +# CONFIG_GPIO_SYSCON is not set +# CONFIG_GPIO_XGENE is not set +# CONFIG_GPIO_XILINX is not set +# CONFIG_GPIO_AMD_FCH is not set +# end of Memory mapped GPIO drivers + +# +# I2C GPIO expanders +# +# CONFIG_GPIO_ADNP is not set +# CONFIG_GPIO_FXL6408 is not set +# CONFIG_GPIO_DS4520 is not set +# CONFIG_GPIO_GW_PLD is not set +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +# CONFIG_GPIO_PCA953X is not set +# CONFIG_GPIO_PCA9570 is not set +# CONFIG_GPIO_PCF857X is not set +# CONFIG_GPIO_TPIC2810 is not set +# end of I2C GPIO expanders + +# +# MFD GPIO expanders +# +# end of MFD GPIO expanders + +# +# PCI GPIO expanders +# +# CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_PCI_IDIO_16 is not set +# CONFIG_GPIO_PCIE_IDIO_24 is not set +# CONFIG_GPIO_RDC321X is not set +# end of PCI GPIO expanders + +# +# SPI GPIO expanders +# +# CONFIG_GPIO_74X164 is not set +# CONFIG_GPIO_MAX3191X is not set +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_PISOSR is not set +# CONFIG_GPIO_XRA1403 is not set +# end of SPI GPIO expanders + +# +# USB GPIO expanders +# +# end of USB GPIO expanders + +# +# Virtual GPIO drivers +# +# CONFIG_GPIO_AGGREGATOR is not set +# CONFIG_GPIO_LATCH is not set +# CONFIG_GPIO_MOCKUP is not set +# CONFIG_GPIO_SIM is not set +# end of Virtual GPIO drivers + +# +# GPIO Debugging utilities +# +# CONFIG_GPIO_SLOPPY_LOGIC_ANALYZER is not set +# CONFIG_GPIO_VIRTUSER is not set +# end of GPIO Debugging utilities + +# CONFIG_W1 is not set +CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_GPIO is not set +# CONFIG_POWER_RESET_GPIO_RESTART is not set +# CONFIG_POWER_RESET_LTC2952 is not set +# CONFIG_POWER_RESET_REGULATOR is not set +# CONFIG_POWER_RESET_RESTART is not set +# CONFIG_POWER_RESET_XGENE is not set +# CONFIG_POWER_RESET_SYSCON is not set +# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set +# CONFIG_SYSCON_REBOOT_MODE is not set +# CONFIG_NVMEM_REBOOT_MODE is not set +# CONFIG_POWER_SEQUENCING is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_POWER_SUPPLY_HWMON=y +# CONFIG_GENERIC_ADC_BATTERY is not set +# CONFIG_IP5XXX_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_CHARGER_ADP5061 is not set +# CONFIG_BATTERY_CW2015 is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SAMSUNG_SDI is not set +# CONFIG_BATTERY_SBS is not set +# CONFIG_CHARGER_SBS is not set +# CONFIG_BATTERY_BQ27XXX is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_BATTERY_MAX1720X is not set +# CONFIG_CHARGER_ISP1704 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_LT3651 is not set +# CONFIG_CHARGER_LTC4162L is not set +# CONFIG_CHARGER_DETECTOR_MAX14656 is not set +# CONFIG_CHARGER_MAX77976 is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24257 is not set +# CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_BQ2515X is not set +# CONFIG_CHARGER_BQ25890 is not set +# CONFIG_CHARGER_BQ25980 is not set +# CONFIG_CHARGER_BQ256XX is not set +CONFIG_CHARGER_RK817=y +# CONFIG_CHARGER_SMB347 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_BATTERY_GOLDFISH is not set +# CONFIG_BATTERY_RT5033 is not set +# CONFIG_CHARGER_RT9455 is not set +# CONFIG_CHARGER_RT9467 is not set +# CONFIG_CHARGER_RT9471 is not set +# CONFIG_CHARGER_UCS1002 is not set +# CONFIG_CHARGER_BD99954 is not set +# CONFIG_BATTERY_UG3105 is not set +# CONFIG_FUEL_GAUGE_MM8013 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +# CONFIG_SENSORS_AD7314 is not set +# CONFIG_SENSORS_AD7414 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM1177 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7310 is not set +# CONFIG_SENSORS_ADT7410 is not set +# CONFIG_SENSORS_ADT7411 is not set +# CONFIG_SENSORS_ADT7462 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_AHT10 is not set +# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set +# CONFIG_SENSORS_AS370 is not set +# CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set +# CONFIG_SENSORS_AXI_FAN_CONTROL is not set +# CONFIG_SENSORS_ARM_SCMI is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CHIPCAP2 is not set +# CONFIG_SENSORS_CORSAIR_CPRO is not set +# CONFIG_SENSORS_CORSAIR_PSU is not set +# CONFIG_SENSORS_DRIVETEMP is not set +# CONFIG_SENSORS_DS620 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_I5K_AMB is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_FTSTEUTATES is not set +# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_GPIO_FAN is not set +# CONFIG_SENSORS_HIH6130 is not set +# CONFIG_SENSORS_HS3001 is not set +# CONFIG_SENSORS_IIO_HWMON is not set +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_JC42 is not set +# CONFIG_SENSORS_POWERZ is not set +# CONFIG_SENSORS_POWR1220 is not set +# CONFIG_SENSORS_LINEAGE is not set +# CONFIG_SENSORS_LTC2945 is not set +# CONFIG_SENSORS_LTC2947_I2C is not set +# CONFIG_SENSORS_LTC2947_SPI is not set +# CONFIG_SENSORS_LTC2990 is not set +# CONFIG_SENSORS_LTC2991 is not set +# CONFIG_SENSORS_LTC2992 is not set +# CONFIG_SENSORS_LTC4151 is not set +# CONFIG_SENSORS_LTC4215 is not set +# CONFIG_SENSORS_LTC4222 is not set +# CONFIG_SENSORS_LTC4245 is not set +# CONFIG_SENSORS_LTC4260 is not set +# CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_LTC4282 is not set +# CONFIG_SENSORS_MAX1111 is not set +# CONFIG_SENSORS_MAX127 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX31722 is not set +# CONFIG_SENSORS_MAX31730 is not set +# CONFIG_SENSORS_MAX31760 is not set +# CONFIG_MAX31827 is not set +# CONFIG_SENSORS_MAX6620 is not set +# CONFIG_SENSORS_MAX6621 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MAX31790 is not set +# CONFIG_SENSORS_MC34VR500 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_TC654 is not set +# CONFIG_SENSORS_TPS23861 is not set +# CONFIG_SENSORS_MR75203 is not set +# CONFIG_SENSORS_ADCXX is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM73 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +# CONFIG_SENSORS_LM90 is not set +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_LM95234 is not set +# CONFIG_SENSORS_LM95241 is not set +# CONFIG_SENSORS_LM95245 is not set +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_NTC_THERMISTOR is not set +# CONFIG_SENSORS_NCT6683 is not set +# CONFIG_SENSORS_NCT6775 is not set +# CONFIG_SENSORS_NCT6775_I2C is not set +# CONFIG_SENSORS_NCT7802 is not set +# CONFIG_SENSORS_NCT7904 is not set +# CONFIG_SENSORS_NPCM7XX is not set +# CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_KRAKEN3 is not set +# CONFIG_SENSORS_NZXT_SMART2 is not set +# CONFIG_SENSORS_OCC_P8_I2C is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_PMBUS is not set +# CONFIG_SENSORS_PT5161L is not set +# CONFIG_SENSORS_PWM_FAN is not set +# CONFIG_SENSORS_SBTSI is not set +# CONFIG_SENSORS_SBRMI is not set +# CONFIG_SENSORS_SHT15 is not set +# CONFIG_SENSORS_SHT21 is not set +# CONFIG_SENSORS_SHT3x is not set +# CONFIG_SENSORS_SHT4x is not set +# CONFIG_SENSORS_SHTC1 is not set +# CONFIG_SENSORS_SIS5595 is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC2305 is not set +# CONFIG_SENSORS_EMC6W201 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set +# CONFIG_SENSORS_STTS751 is not set +# CONFIG_SENSORS_ADC128D818 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_ADS7871 is not set +# CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_INA209 is not set +# CONFIG_SENSORS_INA2XX is not set +# CONFIG_SENSORS_INA238 is not set +# CONFIG_SENSORS_INA3221 is not set +# CONFIG_SENSORS_SPD5118 is not set +# CONFIG_SENSORS_TC74 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP102 is not set +# CONFIG_SENSORS_TMP103 is not set +# CONFIG_SENSORS_TMP108 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set +# CONFIG_SENSORS_TMP464 is not set +# CONFIG_SENSORS_TMP513 is not set +# CONFIG_SENSORS_VIA686A is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_VT8231 is not set +# CONFIG_SENSORS_W83773G is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83795 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_NETLINK=y +CONFIG_THERMAL_STATISTICS=y +# CONFIG_THERMAL_DEBUGFS is not set +# CONFIG_THERMAL_CORE_TESTING is not set +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set +# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_THERMAL_GOV_STEP_WISE=y +CONFIG_THERMAL_GOV_BANG_BANG=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y +CONFIG_CPU_THERMAL=y +CONFIG_CPU_FREQ_THERMAL=y +# CONFIG_DEVFREQ_THERMAL is not set +CONFIG_THERMAL_EMULATION=y +# CONFIG_THERMAL_MMIO is not set +CONFIG_ROCKCHIP_THERMAL=y +# CONFIG_GENERIC_ADC_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 +CONFIG_WATCHDOG_SYSFS=y +# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set + +# +# Watchdog Pretimeout Governors +# +# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_GPIO_WATCHDOG is not set +# CONFIG_XILINX_WATCHDOG is not set +# CONFIG_XILINX_WINDOW_WATCHDOG is not set +# CONFIG_ZIIRAVE_WATCHDOG is not set +# CONFIG_ARM_SP805_WATCHDOG is not set +# CONFIG_ARM_SBSA_WATCHDOG is not set +# CONFIG_CADENCE_WATCHDOG is not set +CONFIG_DW_WATCHDOG=y +# CONFIG_MAX63XX_WATCHDOG is not set +# CONFIG_ARM_SMC_WATCHDOG is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_I6300ESB_WDT is not set +# CONFIG_HP_WATCHDOG is not set +# CONFIG_MEN_A21_WDT is not set + +# +# PCI-based Watchdog Cards +# +# CONFIG_PCIPCWATCHDOG is not set +# CONFIG_WDTPCI is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y +# CONFIG_BCMA is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +# CONFIG_MFD_ADP5585 is not set +# CONFIG_MFD_ACT8945A is not set +# CONFIG_MFD_AS3711 is not set +# CONFIG_MFD_SMPRO is not set +# CONFIG_MFD_AS3722 is not set +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +# CONFIG_MFD_ATMEL_FLEXCOM is not set +# CONFIG_MFD_ATMEL_HLCDC is not set +# CONFIG_MFD_BCM590XX is not set +# CONFIG_MFD_BD9571MWV is not set +# CONFIG_MFD_AXP20X_I2C is not set +# CONFIG_MFD_CS42L43_I2C is not set +# CONFIG_MFD_MADERA is not set +# CONFIG_MFD_MAX5970 is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_GATEWORKS_GSC is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MP2629 is not set +# CONFIG_MFD_HI6421_PMIC is not set +# CONFIG_LPC_ICH is not set +# CONFIG_LPC_SCH is not set +# CONFIG_MFD_IQS62X is not set +# CONFIG_MFD_JANZ_CMODIO is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +# CONFIG_MFD_88PM886_PMIC is not set +# CONFIG_MFD_MAX14577 is not set +# CONFIG_MFD_MAX77541 is not set +# CONFIG_MFD_MAX77620 is not set +# CONFIG_MFD_MAX77650 is not set +# CONFIG_MFD_MAX77686 is not set +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77714 is not set +# CONFIG_MFD_MAX77843 is not set +# CONFIG_MFD_MAX8907 is not set +# CONFIG_MFD_MAX8925 is not set +# CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX8998 is not set +# CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6370 is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_OCELOT is not set +# CONFIG_EZX_PCAP is not set +# CONFIG_MFD_CPCAP is not set +# CONFIG_MFD_VIPERBOARD is not set +# CONFIG_MFD_NTXEC is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +# CONFIG_MFD_SY7636A is not set +# CONFIG_MFD_RDC321X is not set +# CONFIG_MFD_RT4831 is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RT5120 is not set +# CONFIG_MFD_RC5T583 is not set +CONFIG_MFD_RK8XX=y +CONFIG_MFD_RK8XX_I2C=y +# CONFIG_MFD_RK8XX_SPI is not set +# CONFIG_MFD_RN5T618 is not set +# CONFIG_MFD_SEC_CORE is not set +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set +# CONFIG_MFD_STMPE is not set +CONFIG_MFD_SYSCON=y +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_TI_LMU is not set +# CONFIG_MFD_PALMAS is not set +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65086 is not set +# CONFIG_MFD_TPS65090 is not set +# CONFIG_MFD_TPS65217 is not set +# CONFIG_MFD_TI_LP873X is not set +# CONFIG_MFD_TI_LP87565 is not set +# CONFIG_MFD_TPS65218 is not set +# CONFIG_MFD_TPS65219 is not set +# CONFIG_MFD_TPS6586X is not set +# CONFIG_MFD_TPS65910 is not set +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +# CONFIG_MFD_TPS6594_I2C is not set +# CONFIG_MFD_TPS6594_SPI is not set +# CONFIG_TWL4030_CORE is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TC3589X is not set +# CONFIG_MFD_TQMX86 is not set +# CONFIG_MFD_VX855 is not set +# CONFIG_MFD_LOCHNAGAR is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_ROHM_BD718XX is not set +# CONFIG_MFD_ROHM_BD71828 is not set +# CONFIG_MFD_ROHM_BD957XMUF is not set +# CONFIG_MFD_ROHM_BD96801 is not set +# CONFIG_MFD_STPMIC1 is not set +# CONFIG_MFD_STMFX is not set +# CONFIG_MFD_ATC260X_I2C is not set +# CONFIG_MFD_KHADAS_MCU is not set +# CONFIG_MFD_QCOM_PM8008 is not set +# CONFIG_MFD_CS40L50_I2C is not set +# CONFIG_MFD_CS40L50_SPI is not set +# CONFIG_RAVE_SP_CORE is not set +# CONFIG_MFD_INTEL_M10_BMC_SPI is not set +# CONFIG_MFD_RSMU_I2C is not set +# CONFIG_MFD_RSMU_SPI is not set +# end of Multifunction device drivers + +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_NETLINK_EVENTS is not set +# CONFIG_REGULATOR_88PG86X is not set +# CONFIG_REGULATOR_ACT8865 is not set +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_ARM_SCMI is not set +# CONFIG_REGULATOR_AW37503 is not set +# CONFIG_REGULATOR_DA9121 is not set +# CONFIG_REGULATOR_DA9210 is not set +# CONFIG_REGULATOR_DA9211 is not set +CONFIG_REGULATOR_FAN53555=y +# CONFIG_REGULATOR_FAN53880 is not set +# CONFIG_REGULATOR_GPIO is not set +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +# CONFIG_REGULATOR_LP872X is not set +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_LTC3676 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX77503 is not set +# CONFIG_REGULATOR_MAX77857 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8893 is not set +# CONFIG_REGULATOR_MAX8952 is not set +# CONFIG_REGULATOR_MAX8973 is not set +# CONFIG_REGULATOR_MAX20086 is not set +# CONFIG_REGULATOR_MAX20411 is not set +# CONFIG_REGULATOR_MAX77826 is not set +# CONFIG_REGULATOR_MCP16502 is not set +# CONFIG_REGULATOR_MP5416 is not set +# CONFIG_REGULATOR_MP8859 is not set +# CONFIG_REGULATOR_MP886X is not set +# CONFIG_REGULATOR_MPQ7920 is not set +# CONFIG_REGULATOR_MT6311 is not set +# CONFIG_REGULATOR_PCA9450 is not set +# CONFIG_REGULATOR_PF8X00 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_PV88060 is not set +# CONFIG_REGULATOR_PV88080 is not set +# CONFIG_REGULATOR_PV88090 is not set +# CONFIG_REGULATOR_PWM is not set +# CONFIG_REGULATOR_RAA215300 is not set +# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set +CONFIG_REGULATOR_RK808=y +# CONFIG_REGULATOR_RT4801 is not set +# CONFIG_REGULATOR_RT4803 is not set +# CONFIG_REGULATOR_RT5190A is not set +# CONFIG_REGULATOR_RT5739 is not set +# CONFIG_REGULATOR_RT5759 is not set +# CONFIG_REGULATOR_RT6160 is not set +# CONFIG_REGULATOR_RT6190 is not set +# CONFIG_REGULATOR_RT6245 is not set +# CONFIG_REGULATOR_RTQ2134 is not set +# CONFIG_REGULATOR_RTMV20 is not set +# CONFIG_REGULATOR_RTQ6752 is not set +# CONFIG_REGULATOR_RTQ2208 is not set +# CONFIG_REGULATOR_SLG51000 is not set +# CONFIG_REGULATOR_SY8106A is not set +# CONFIG_REGULATOR_SY8824X is not set +# CONFIG_REGULATOR_SY8827N is not set +# CONFIG_REGULATOR_TPS51632 is not set +# CONFIG_REGULATOR_TPS62360 is not set +# CONFIG_REGULATOR_TPS6286X is not set +# CONFIG_REGULATOR_TPS6287X is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +# CONFIG_REGULATOR_TPS65132 is not set +CONFIG_REGULATOR_TPS65185=m +# CONFIG_REGULATOR_TPS6524X is not set +# CONFIG_REGULATOR_VCTRL is not set +# CONFIG_RC_CORE is not set + +# +# CEC support +# +# CONFIG_MEDIA_CEC_SUPPORT is not set +# end of CEC support + +CONFIG_MEDIA_SUPPORT=m +# CONFIG_MEDIA_SUPPORT_FILTER is not set +# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set + +# +# Media device types +# +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_MEDIA_PLATFORM_SUPPORT=y +CONFIG_MEDIA_TEST_SUPPORT=y +# end of Media device types + +# +# Media core support +# +CONFIG_VIDEO_DEV=m +CONFIG_MEDIA_CONTROLLER=y +CONFIG_DVB_CORE=m +# end of Media core support + +# +# Video4Linux options +# +CONFIG_VIDEO_V4L2_I2C=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +# CONFIG_VIDEO_ADV_DEBUG is not set +# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set +CONFIG_V4L2_JPEG_HELPER=m +CONFIG_V4L2_H264=m +CONFIG_V4L2_VP9=m +CONFIG_V4L2_MEM2MEM_DEV=m +# CONFIG_V4L2_FLASH_LED_CLASS is not set +CONFIG_V4L2_FWNODE=m +CONFIG_V4L2_ASYNC=m +# end of Video4Linux options + +# +# Media controller options +# +# CONFIG_MEDIA_CONTROLLER_DVB is not set +# end of Media controller options + +# +# Digital TV options +# +# CONFIG_DVB_MMAP is not set +# CONFIG_DVB_NET is not set +CONFIG_DVB_MAX_ADAPTERS=16 +# CONFIG_DVB_DYNAMIC_MINORS is not set +# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set +# CONFIG_DVB_ULE_DEBUG is not set +# end of Digital TV options + +# +# Media drivers +# + +# +# Media drivers +# +# CONFIG_MEDIA_USB_SUPPORT is not set +# CONFIG_MEDIA_PCI_SUPPORT is not set +# CONFIG_RADIO_ADAPTERS is not set +CONFIG_MEDIA_PLATFORM_DRIVERS=y +# CONFIG_V4L_PLATFORM_DRIVERS is not set +# CONFIG_SDR_PLATFORM_DRIVERS is not set +# CONFIG_DVB_PLATFORM_DRIVERS is not set +CONFIG_V4L_MEM2MEM_DRIVERS=y +# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set + +# +# Allegro DVT media platform drivers +# + +# +# Amlogic media platform drivers +# + +# +# Amphion drivers +# + +# +# Aspeed media platform drivers +# + +# +# Atmel media platform drivers +# + +# +# Cadence media platform drivers +# +# CONFIG_VIDEO_CADENCE_CSI2RX is not set +# CONFIG_VIDEO_CADENCE_CSI2TX is not set + +# +# Chips&Media media platform drivers +# + +# +# Intel media platform drivers +# + +# +# Marvell media platform drivers +# + +# +# Mediatek media platform drivers +# + +# +# Microchip Technology, Inc. media platform drivers +# + +# +# Nuvoton media platform drivers +# + +# +# NVidia media platform drivers +# + +# +# NXP media platform drivers +# + +# +# Qualcomm media platform drivers +# + +# +# Raspberry Pi media platform drivers +# + +# +# Renesas media platform drivers +# + +# +# Rockchip media platform drivers +# +CONFIG_VIDEO_ROCKCHIP_RGA=m + +# +# Samsung media platform drivers +# + +# +# STMicroelectronics media platform drivers +# + +# +# Sunxi media platform drivers +# + +# +# Texas Instruments drivers +# + +# +# Verisilicon media platform drivers +# +CONFIG_VIDEO_HANTRO=m +# CONFIG_VIDEO_HANTRO_HEVC_RFC is not set +CONFIG_VIDEO_HANTRO_ROCKCHIP=y + +# +# VIA media platform drivers +# + +# +# Xilinx media platform drivers +# + +# +# MMC/SDIO DVB adapters +# +# CONFIG_SMS_SDIO_DRV is not set +# CONFIG_V4L_TEST_DRIVERS is not set +# CONFIG_DVB_TEST_DRIVERS is not set +CONFIG_VIDEOBUF2_CORE=m +CONFIG_VIDEOBUF2_V4L2=m +CONFIG_VIDEOBUF2_MEMOPS=m +CONFIG_VIDEOBUF2_DMA_CONTIG=m +CONFIG_VIDEOBUF2_VMALLOC=m +CONFIG_VIDEOBUF2_DMA_SG=m +# end of Media drivers + +# +# Media ancillary drivers +# +CONFIG_MEDIA_ATTACH=y +CONFIG_VIDEO_CAMERA_SENSOR=y +# CONFIG_VIDEO_ALVIUM_CSI2 is not set +# CONFIG_VIDEO_AR0521 is not set +# CONFIG_VIDEO_GC0308 is not set +# CONFIG_VIDEO_GC05A2 is not set +# CONFIG_VIDEO_GC08A3 is not set +# CONFIG_VIDEO_GC2145 is not set +# CONFIG_VIDEO_HI556 is not set +# CONFIG_VIDEO_HI846 is not set +# CONFIG_VIDEO_HI847 is not set +# CONFIG_VIDEO_IMX208 is not set +# CONFIG_VIDEO_IMX214 is not set +# CONFIG_VIDEO_IMX219 is not set +# CONFIG_VIDEO_IMX258 is not set +# CONFIG_VIDEO_IMX274 is not set +# CONFIG_VIDEO_IMX283 is not set +# CONFIG_VIDEO_IMX290 is not set +# CONFIG_VIDEO_IMX296 is not set +# CONFIG_VIDEO_IMX319 is not set +# CONFIG_VIDEO_IMX334 is not set +# CONFIG_VIDEO_IMX335 is not set +# CONFIG_VIDEO_IMX355 is not set +# CONFIG_VIDEO_IMX412 is not set +# CONFIG_VIDEO_IMX415 is not set +# CONFIG_VIDEO_MT9M001 is not set +# CONFIG_VIDEO_MT9M111 is not set +# CONFIG_VIDEO_MT9M114 is not set +# CONFIG_VIDEO_MT9P031 is not set +# CONFIG_VIDEO_MT9T112 is not set +# CONFIG_VIDEO_MT9V011 is not set +# CONFIG_VIDEO_MT9V032 is not set +# CONFIG_VIDEO_MT9V111 is not set +# CONFIG_VIDEO_OG01A1B is not set +# CONFIG_VIDEO_OV01A10 is not set +# CONFIG_VIDEO_OV02A10 is not set +# CONFIG_VIDEO_OV08D10 is not set +# CONFIG_VIDEO_OV08X40 is not set +# CONFIG_VIDEO_OV13858 is not set +# CONFIG_VIDEO_OV13B10 is not set +# CONFIG_VIDEO_OV2640 is not set +# CONFIG_VIDEO_OV2659 is not set +# CONFIG_VIDEO_OV2680 is not set +# CONFIG_VIDEO_OV2685 is not set +# CONFIG_VIDEO_OV4689 is not set +# CONFIG_VIDEO_OV5640 is not set +# CONFIG_VIDEO_OV5645 is not set +# CONFIG_VIDEO_OV5647 is not set +# CONFIG_VIDEO_OV5648 is not set +# CONFIG_VIDEO_OV5670 is not set +# CONFIG_VIDEO_OV5675 is not set +# CONFIG_VIDEO_OV5693 is not set +# CONFIG_VIDEO_OV5695 is not set +# CONFIG_VIDEO_OV64A40 is not set +# CONFIG_VIDEO_OV6650 is not set +# CONFIG_VIDEO_OV7251 is not set +# CONFIG_VIDEO_OV7640 is not set +# CONFIG_VIDEO_OV7670 is not set +# CONFIG_VIDEO_OV772X is not set +# CONFIG_VIDEO_OV7740 is not set +# CONFIG_VIDEO_OV8856 is not set +# CONFIG_VIDEO_OV8858 is not set +# CONFIG_VIDEO_OV8865 is not set +# CONFIG_VIDEO_OV9282 is not set +# CONFIG_VIDEO_OV9640 is not set +# CONFIG_VIDEO_OV9650 is not set +# CONFIG_VIDEO_RDACM20 is not set +# CONFIG_VIDEO_RDACM21 is not set +# CONFIG_VIDEO_RJ54N1 is not set +# CONFIG_VIDEO_S5C73M3 is not set +# CONFIG_VIDEO_S5K5BAF is not set +# CONFIG_VIDEO_S5K6A3 is not set +# CONFIG_VIDEO_VGXY61 is not set +# CONFIG_VIDEO_CCS is not set +# CONFIG_VIDEO_ET8EK8 is not set + +# +# Camera ISPs +# +# CONFIG_VIDEO_THP7312 is not set +# end of Camera ISPs + +# +# Lens drivers +# +# CONFIG_VIDEO_AD5820 is not set +# CONFIG_VIDEO_AK7375 is not set +# CONFIG_VIDEO_DW9714 is not set +# CONFIG_VIDEO_DW9719 is not set +# CONFIG_VIDEO_DW9768 is not set +# CONFIG_VIDEO_DW9807_VCM is not set +# end of Lens drivers + +# +# Flash devices +# +# CONFIG_VIDEO_ADP1653 is not set +# CONFIG_VIDEO_LM3560 is not set +# CONFIG_VIDEO_LM3646 is not set +# end of Flash devices + +# +# Audio decoders, processors and mixers +# +# CONFIG_VIDEO_CS3308 is not set +# CONFIG_VIDEO_CS5345 is not set +# CONFIG_VIDEO_CS53L32A is not set +# CONFIG_VIDEO_MSP3400 is not set +# CONFIG_VIDEO_SONY_BTF_MPX is not set +# CONFIG_VIDEO_TDA1997X is not set +# CONFIG_VIDEO_TDA7432 is not set +# CONFIG_VIDEO_TDA9840 is not set +# CONFIG_VIDEO_TEA6415C is not set +# CONFIG_VIDEO_TEA6420 is not set +# CONFIG_VIDEO_TLV320AIC23B is not set +# CONFIG_VIDEO_TVAUDIO is not set +# CONFIG_VIDEO_UDA1342 is not set +# CONFIG_VIDEO_VP27SMPX is not set +# CONFIG_VIDEO_WM8739 is not set +# CONFIG_VIDEO_WM8775 is not set +# end of Audio decoders, processors and mixers + +# +# RDS decoders +# +# CONFIG_VIDEO_SAA6588 is not set +# end of RDS decoders + +# +# Video decoders +# +# CONFIG_VIDEO_ADV7180 is not set +# CONFIG_VIDEO_ADV7183 is not set +# CONFIG_VIDEO_ADV748X is not set +# CONFIG_VIDEO_ADV7604 is not set +# CONFIG_VIDEO_ADV7842 is not set +# CONFIG_VIDEO_BT819 is not set +# CONFIG_VIDEO_BT856 is not set +# CONFIG_VIDEO_BT866 is not set +# CONFIG_VIDEO_ISL7998X is not set +# CONFIG_VIDEO_KS0127 is not set +# CONFIG_VIDEO_ML86V7667 is not set +# CONFIG_VIDEO_SAA7110 is not set +# CONFIG_VIDEO_SAA711X is not set +# CONFIG_VIDEO_TC358743 is not set +# CONFIG_VIDEO_TC358746 is not set +# CONFIG_VIDEO_TVP514X is not set +# CONFIG_VIDEO_TVP5150 is not set +# CONFIG_VIDEO_TVP7002 is not set +# CONFIG_VIDEO_TW2804 is not set +# CONFIG_VIDEO_TW9900 is not set +# CONFIG_VIDEO_TW9903 is not set +# CONFIG_VIDEO_TW9906 is not set +# CONFIG_VIDEO_TW9910 is not set +# CONFIG_VIDEO_VPX3220 is not set + +# +# Video and audio decoders +# +# CONFIG_VIDEO_SAA717X is not set +# CONFIG_VIDEO_CX25840 is not set +# end of Video decoders + +# +# Video encoders +# +# CONFIG_VIDEO_ADV7170 is not set +# CONFIG_VIDEO_ADV7175 is not set +# CONFIG_VIDEO_ADV7343 is not set +# CONFIG_VIDEO_ADV7393 is not set +# CONFIG_VIDEO_ADV7511 is not set +# CONFIG_VIDEO_AK881X is not set +# CONFIG_VIDEO_SAA7127 is not set +# CONFIG_VIDEO_SAA7185 is not set +# CONFIG_VIDEO_THS8200 is not set +# end of Video encoders + +# +# Video improvement chips +# +# CONFIG_VIDEO_UPD64031A is not set +# CONFIG_VIDEO_UPD64083 is not set +# end of Video improvement chips + +# +# Audio/Video compression chips +# +# CONFIG_VIDEO_SAA6752HS is not set +# end of Audio/Video compression chips + +# +# SDR tuner chips +# +# CONFIG_SDR_MAX2175 is not set +# end of SDR tuner chips + +# +# Miscellaneous helper chips +# +# CONFIG_VIDEO_I2C is not set +# CONFIG_VIDEO_M52790 is not set +# CONFIG_VIDEO_ST_MIPID02 is not set +# CONFIG_VIDEO_THS7303 is not set +# end of Miscellaneous helper chips + +# +# Video serializers and deserializers +# +# CONFIG_VIDEO_DS90UB913 is not set +# CONFIG_VIDEO_DS90UB953 is not set +# CONFIG_VIDEO_DS90UB960 is not set +# CONFIG_VIDEO_MAX96714 is not set +# CONFIG_VIDEO_MAX96717 is not set +# end of Video serializers and deserializers + +# +# Media SPI Adapters +# +# CONFIG_CXD2880_SPI_DRV is not set +# CONFIG_VIDEO_GS1662 is not set +# end of Media SPI Adapters + +CONFIG_MEDIA_TUNER=m + +# +# Customize TV tuners +# +# CONFIG_MEDIA_TUNER_E4000 is not set +# CONFIG_MEDIA_TUNER_FC0011 is not set +# CONFIG_MEDIA_TUNER_FC0012 is not set +# CONFIG_MEDIA_TUNER_FC0013 is not set +# CONFIG_MEDIA_TUNER_FC2580 is not set +# CONFIG_MEDIA_TUNER_IT913X is not set +# CONFIG_MEDIA_TUNER_M88RS6000T is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MSI001 is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2063 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MXL301RF is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set +# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_R820T is not set +# CONFIG_MEDIA_TUNER_SI2157 is not set +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA18212 is not set +# CONFIG_MEDIA_TUNER_TDA18218 is not set +# CONFIG_MEDIA_TUNER_TDA18250 is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_TUA9001 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC4000 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# end of Customize TV tuners + +# +# Customise DVB Frontends +# + +# +# Multistandard (satellite) frontends +# +# CONFIG_DVB_MXL5XX is not set +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV0910 is not set +# CONFIG_DVB_STV6110x is not set +# CONFIG_DVB_STV6111 is not set + +# +# Multistandard (cable + terrestrial) frontends +# +# CONFIG_DVB_DRXK is not set +# CONFIG_DVB_MN88472 is not set +# CONFIG_DVB_MN88473 is not set +# CONFIG_DVB_SI2165 is not set +# CONFIG_DVB_TDA18271C2DD is not set + +# +# DVB-S (satellite) frontends +# +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_CX24117 is not set +# CONFIG_DVB_CX24120 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_TDA10071 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TS2020 is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set + +# +# DVB-T (terrestrial) frontends +# +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_CXD2820R is not set +# CONFIG_DVB_CXD2841ER is not set +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_DIB9000 is not set +# CONFIG_DVB_DRXD is not set +# CONFIG_DVB_EC100 is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_MT352 is not set +# CONFIG_DVB_NXT6000 is not set +# CONFIG_DVB_S5H1432 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_STV0367 is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_ZD1301_DEMOD is not set +# CONFIG_DVB_ZL10353 is not set +# CONFIG_DVB_CXD2880 is not set + +# +# DVB-C (cable) frontends +# +# CONFIG_DVB_STV0297 is not set +# CONFIG_DVB_TDA10021 is not set +# CONFIG_DVB_TDA10023 is not set +# CONFIG_DVB_VES1820 is not set + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +# CONFIG_DVB_AU8522_DTV is not set +# CONFIG_DVB_AU8522_V4L is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LG2160 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_MXL692 is not set +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set + +# +# ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_DIB8000 is not set +# CONFIG_DVB_MB86A20S is not set +# CONFIG_DVB_S921 is not set + +# +# ISDB-S (satellite) & ISDB-T (terrestrial) frontends +# +# CONFIG_DVB_MN88443X is not set +# CONFIG_DVB_TC90522 is not set + +# +# Digital terrestrial only tuners/PLL +# +# CONFIG_DVB_PLL is not set +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set + +# +# SEC control devices for DVB-S +# +# CONFIG_DVB_A8293 is not set +# CONFIG_DVB_AF9033 is not set +# CONFIG_DVB_ASCOT2E is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_HELENE is not set +# CONFIG_DVB_HORUS3A is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_IX2505V is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_LNBH25 is not set +# CONFIG_DVB_LNBH29 is not set +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_LNBP22 is not set +# CONFIG_DVB_M88RS2000 is not set +# CONFIG_DVB_TDA665x is not set +# CONFIG_DVB_DRX39XYJ is not set + +# +# Common Interface (EN50221) controller drivers +# +# CONFIG_DVB_CXD2099 is not set +# CONFIG_DVB_SP2 is not set +# end of Customise DVB Frontends + +# +# Tools to develop new frontends +# +# CONFIG_DVB_DUMMY_FE is not set +# end of Media ancillary drivers + +# +# Graphics support +# +CONFIG_VIDEO=y +# CONFIG_AUXDISPLAY is not set +CONFIG_DRM=m +CONFIG_DRM_MIPI_DSI=y +# CONFIG_DRM_DEBUG_MM is not set +CONFIG_DRM_KMS_HELPER=m +# CONFIG_DRM_PANIC is not set +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +# CONFIG_DRM_DEBUG_MODESET_LOCK is not set +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set +CONFIG_DRM_DISPLAY_HELPER=m +CONFIG_DRM_BRIDGE_CONNECTOR=y +# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set +# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set +CONFIG_DRM_DISPLAY_HDMI_HELPER=y +CONFIG_DRM_DISPLAY_HDMI_STATE_HELPER=y +CONFIG_DRM_EPD_HELPER=m +CONFIG_DRM_TTM=m +CONFIG_DRM_TTM_HELPER=m +CONFIG_DRM_GEM_DMA_HELPER=m +CONFIG_DRM_GEM_SHMEM_HELPER=m +CONFIG_DRM_SCHED=m + +# +# I2C encoder or helper chips +# +# CONFIG_DRM_I2C_CH7006 is not set +# CONFIG_DRM_I2C_SIL164 is not set +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_I2C_NXP_TDA9950 is not set +# end of I2C encoder or helper chips + +# +# ARM devices +# +# CONFIG_DRM_HDLCD is not set +# CONFIG_DRM_MALI_DISPLAY is not set +# CONFIG_DRM_KOMEDA is not set +# end of ARM devices + +# CONFIG_DRM_RADEON is not set +# CONFIG_DRM_AMDGPU is not set +# CONFIG_DRM_NOUVEAU is not set +# CONFIG_DRM_XE is not set +CONFIG_DRM_VGEM=m +# CONFIG_DRM_VKMS is not set +CONFIG_DRM_ROCKCHIP=m +CONFIG_ROCKCHIP_VOP=y +CONFIG_ROCKCHIP_VOP2=y +# CONFIG_ROCKCHIP_ANALOGIX_DP is not set +# CONFIG_ROCKCHIP_CDN_DP is not set +CONFIG_ROCKCHIP_DW_HDMI=y +CONFIG_ROCKCHIP_DW_MIPI_DSI=y +CONFIG_ROCKCHIP_INNO_HDMI=y +CONFIG_ROCKCHIP_LVDS=y +# CONFIG_ROCKCHIP_RGB is not set +# CONFIG_ROCKCHIP_RK3066_HDMI is not set +CONFIG_DRM_ROCKCHIP_EBC=m +# CONFIG_DRM_VMWGFX is not set +# CONFIG_DRM_UDL is not set +# CONFIG_DRM_AST is not set +# CONFIG_DRM_MGAG200 is not set +# CONFIG_DRM_QXL is not set +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set +# CONFIG_DRM_PANEL_ARM_VERSATILE is not set +# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set +# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set +# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set +# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set +# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set +# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set +# CONFIG_DRM_PANEL_BOE_TV101WUM_LL2 is not set +# CONFIG_DRM_PANEL_EBBG_FT8719 is not set +# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set +# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set +# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set +# CONFIG_DRM_PANEL_DSI_CM is not set +# CONFIG_DRM_PANEL_LVDS is not set +# CONFIG_DRM_PANEL_HIMAX_HX83102 is not set +# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set +# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set +# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9806E is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set +# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set +# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set +# CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set +# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set +# CONFIG_DRM_PANEL_JDI_LPM102A188A is not set +# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set +# CONFIG_DRM_PANEL_JDI_R63452 is not set +# CONFIG_DRM_PANEL_KHADAS_TS050 is not set +# CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set +# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set +# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set +# CONFIG_DRM_PANEL_LINCOLNTECH_LCD197 is not set +# CONFIG_DRM_PANEL_LG_LB035Q02 is not set +# CONFIG_DRM_PANEL_LG_LG4573 is not set +# CONFIG_DRM_PANEL_LG_SW43408 is not set +# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set +# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set +# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set +# CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set +# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set +# CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set +# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set +# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set +# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set +# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set +# CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set +# CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS is not set +# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set +# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set +# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set +# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set +# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set +# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set +# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set +# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set +# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set +# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set +# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set +# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set +# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set +# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set +# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set +# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set +# CONFIG_DRM_PANEL_EDP is not set +CONFIG_DRM_PANEL_SIMPLE=m +# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set +# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set +# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set +# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set +# CONFIG_DRM_PANEL_TPO_TPG110 is not set +# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set +# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set +# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set +# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set +# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set +# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_CHIPONE_ICN6211 is not set +# CONFIG_DRM_CHRONTEL_CH7033 is not set +# CONFIG_DRM_DISPLAY_CONNECTOR is not set +# CONFIG_DRM_ITE_IT6505 is not set +# CONFIG_DRM_LONTIUM_LT8912B is not set +# CONFIG_DRM_LONTIUM_LT9211 is not set +# CONFIG_DRM_LONTIUM_LT9611 is not set +# CONFIG_DRM_LONTIUM_LT9611UXC is not set +# CONFIG_DRM_ITE_IT66121 is not set +# CONFIG_DRM_LVDS_CODEC is not set +# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set +# CONFIG_DRM_NWL_MIPI_DSI is not set +# CONFIG_DRM_NXP_PTN3460 is not set +# CONFIG_DRM_PARADE_PS8622 is not set +# CONFIG_DRM_PARADE_PS8640 is not set +# CONFIG_DRM_SAMSUNG_DSIM is not set +# CONFIG_DRM_SIL_SII8620 is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_DRM_SII9234 is not set +# CONFIG_DRM_SIMPLE_BRIDGE is not set +# CONFIG_DRM_THINE_THC63LVD1024 is not set +# CONFIG_DRM_TOSHIBA_TC358762 is not set +# CONFIG_DRM_TOSHIBA_TC358764 is not set +# CONFIG_DRM_TOSHIBA_TC358767 is not set +# CONFIG_DRM_TOSHIBA_TC358768 is not set +# CONFIG_DRM_TOSHIBA_TC358775 is not set +# CONFIG_DRM_TI_DLPC3433 is not set +# CONFIG_DRM_TI_TFP410 is not set +# CONFIG_DRM_TI_SN65DSI83 is not set +# CONFIG_DRM_TI_SN65DSI86 is not set +# CONFIG_DRM_TI_TPD12S015 is not set +# CONFIG_DRM_ANALOGIX_ANX6345 is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# CONFIG_DRM_ANALOGIX_ANX7625 is not set +# CONFIG_DRM_I2C_ADV7511 is not set +# CONFIG_DRM_CDNS_DSI is not set +# CONFIG_DRM_CDNS_MHDP8546 is not set +CONFIG_DRM_DW_HDMI=m +# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set +# CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set +# CONFIG_DRM_DW_HDMI_GP_AUDIO is not set +# CONFIG_DRM_DW_HDMI_CEC is not set +CONFIG_DRM_DW_MIPI_DSI=m +# end of Display Interface Bridges + +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_HISI_HIBMC is not set +# CONFIG_DRM_HISI_KIRIN is not set +# CONFIG_DRM_LOGICVC is not set +# CONFIG_DRM_ARCPGU is not set +# CONFIG_DRM_BOCHS is not set +# CONFIG_DRM_CIRRUS_QEMU is not set +# CONFIG_DRM_GM12U320 is not set +# CONFIG_DRM_PANEL_MIPI_DBI is not set +# CONFIG_DRM_SIMPLEDRM is not set +# CONFIG_TINYDRM_HX8357D is not set +# CONFIG_TINYDRM_ILI9163 is not set +# CONFIG_TINYDRM_ILI9225 is not set +# CONFIG_TINYDRM_ILI9341 is not set +# CONFIG_TINYDRM_ILI9486 is not set +# CONFIG_TINYDRM_MI0283QT is not set +# CONFIG_TINYDRM_REPAPER is not set +# CONFIG_TINYDRM_ST7586 is not set +# CONFIG_TINYDRM_ST7735R is not set +# CONFIG_DRM_PL111 is not set +# CONFIG_DRM_LIMA is not set +CONFIG_DRM_PANFROST=m +# CONFIG_DRM_PANTHOR is not set +# CONFIG_DRM_TIDSS is not set +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_SSD130X is not set +# CONFIG_DRM_POWERVR is not set +# CONFIG_DRM_WERROR is not set +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m + +# +# Frame buffer Devices +# +CONFIG_FB=y +# CONFIG_FB_CIRRUS is not set +# CONFIG_FB_PM2 is not set +# CONFIG_FB_CYBER2000 is not set +# CONFIG_FB_ASILIANT is not set +# CONFIG_FB_IMSTT is not set +# CONFIG_FB_EFI is not set +# CONFIG_FB_OPENCORES is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_NVIDIA is not set +# CONFIG_FB_RIVA is not set +# CONFIG_FB_I740 is not set +# CONFIG_FB_MATROX is not set +# CONFIG_FB_RADEON is not set +# CONFIG_FB_ATY128 is not set +# CONFIG_FB_ATY is not set +# CONFIG_FB_S3 is not set +# CONFIG_FB_SAVAGE is not set +# CONFIG_FB_SIS is not set +# CONFIG_FB_NEOMAGIC is not set +# CONFIG_FB_KYRO is not set +# CONFIG_FB_3DFX is not set +# CONFIG_FB_VOODOO1 is not set +# CONFIG_FB_VT8623 is not set +# CONFIG_FB_TRIDENT is not set +# CONFIG_FB_ARK is not set +# CONFIG_FB_PM3 is not set +# CONFIG_FB_CARMINE is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +# CONFIG_FB_MB862XX is not set +# CONFIG_FB_SIMPLE is not set +# CONFIG_FB_SSD1307 is not set +# CONFIG_FB_SM712 is not set +CONFIG_FB_CORE=y +CONFIG_FB_NOTIFY=y +# CONFIG_FIRMWARE_EDID is not set +CONFIG_FB_DEVICE=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYSMEM_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_DMAMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS=y +CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y +# CONFIG_FB_MODE_HELPERS is not set +# CONFIG_FB_TILEBLITTING is not set +# end of Frame buffer Devices + +# +# Backlight & LCD device support +# +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_KTD253 is not set +# CONFIG_BACKLIGHT_KTD2801 is not set +# CONFIG_BACKLIGHT_KTZ8866 is not set +# CONFIG_BACKLIGHT_PWM is not set +# CONFIG_BACKLIGHT_QCOM_WLED is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3509 is not set +CONFIG_BACKLIGHT_LM3630A=y +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_MP3309C is not set +# CONFIG_BACKLIGHT_GPIO is not set +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_ARCXCNN is not set +# CONFIG_BACKLIGHT_LED is not set +# end of Backlight & LCD device support + +CONFIG_VIDEOMODE_HELPERS=y +CONFIG_HDMI=y + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_DUMMY_CONSOLE_COLUMNS=80 +CONFIG_DUMMY_CONSOLE_ROWS=25 +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y +# end of Console display driver support + +# CONFIG_LOGO is not set +# end of Graphics support + +# CONFIG_DRM_ACCEL is not set +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_JACK=y +CONFIG_SND_JACK_INPUT_DEV=y +# CONFIG_SND_OSSEMUL is not set +CONFIG_SND_PCM_TIMER=y +CONFIG_SND_HRTIMER=m +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_MAX_CARDS=32 +# CONFIG_SND_SUPPORT_OLD_API is not set +CONFIG_SND_PROC_FS=y +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_CTL_FAST_LOOKUP=y +CONFIG_SND_DEBUG=y +CONFIG_SND_DEBUG_VERBOSE=y +# CONFIG_SND_PCM_XRUN_DEBUG is not set +# CONFIG_SND_CTL_INPUT_VALIDATION is not set +# CONFIG_SND_CTL_DEBUG is not set +# CONFIG_SND_JACK_INJECTION_DEBUG is not set +# CONFIG_SND_UTIMER is not set +# CONFIG_SND_SEQUENCER is not set +# CONFIG_SND_DRIVERS is not set +CONFIG_SND_PCI=y +# CONFIG_SND_AD1889 is not set +# CONFIG_SND_ALS300 is not set +# CONFIG_SND_ALI5451 is not set +# CONFIG_SND_ATIIXP is not set +# CONFIG_SND_ATIIXP_MODEM is not set +# CONFIG_SND_AU8810 is not set +# CONFIG_SND_AU8820 is not set +# CONFIG_SND_AU8830 is not set +# CONFIG_SND_AW2 is not set +# CONFIG_SND_AZT3328 is not set +# CONFIG_SND_BT87X is not set +# CONFIG_SND_CA0106 is not set +# CONFIG_SND_CMIPCI is not set +# CONFIG_SND_OXYGEN is not set +# CONFIG_SND_CS4281 is not set +# CONFIG_SND_CS46XX is not set +# CONFIG_SND_CTXFI is not set +# CONFIG_SND_DARLA20 is not set +# CONFIG_SND_GINA20 is not set +# CONFIG_SND_LAYLA20 is not set +# CONFIG_SND_DARLA24 is not set +# CONFIG_SND_GINA24 is not set +# CONFIG_SND_LAYLA24 is not set +# CONFIG_SND_MONA is not set +# CONFIG_SND_MIA is not set +# CONFIG_SND_ECHO3G is not set +# CONFIG_SND_INDIGO is not set +# CONFIG_SND_INDIGOIO is not set +# CONFIG_SND_INDIGODJ is not set +# CONFIG_SND_INDIGOIOX is not set +# CONFIG_SND_INDIGODJX is not set +# CONFIG_SND_EMU10K1 is not set +# CONFIG_SND_EMU10K1X is not set +# CONFIG_SND_ENS1370 is not set +# CONFIG_SND_ENS1371 is not set +# CONFIG_SND_ES1938 is not set +# CONFIG_SND_ES1968 is not set +# CONFIG_SND_FM801 is not set +# CONFIG_SND_HDSP is not set +# CONFIG_SND_HDSPM is not set +# CONFIG_SND_ICE1712 is not set +# CONFIG_SND_ICE1724 is not set +# CONFIG_SND_INTEL8X0 is not set +# CONFIG_SND_INTEL8X0M is not set +# CONFIG_SND_KORG1212 is not set +# CONFIG_SND_LOLA is not set +# CONFIG_SND_LX6464ES is not set +# CONFIG_SND_MAESTRO3 is not set +# CONFIG_SND_MIXART is not set +# CONFIG_SND_NM256 is not set +# CONFIG_SND_PCXHR is not set +# CONFIG_SND_RIPTIDE is not set +# CONFIG_SND_RME32 is not set +# CONFIG_SND_RME96 is not set +# CONFIG_SND_RME9652 is not set +# CONFIG_SND_SE6X is not set +# CONFIG_SND_SONICVIBES is not set +# CONFIG_SND_TRIDENT is not set +# CONFIG_SND_VIA82XX is not set +# CONFIG_SND_VIA82XX_MODEM is not set +# CONFIG_SND_VIRTUOSO is not set +# CONFIG_SND_VX222 is not set +# CONFIG_SND_YMFPCI is not set + +# +# HD-Audio +# +# CONFIG_SND_HDA_INTEL is not set +# end of HD-Audio + +CONFIG_SND_HDA_PREALLOC_SIZE=64 +# CONFIG_SND_SPI is not set +CONFIG_SND_USB=y +# CONFIG_SND_USB_AUDIO is not set +# CONFIG_SND_USB_UA101 is not set +# CONFIG_SND_USB_CAIAQ is not set +# CONFIG_SND_USB_6FIRE is not set +# CONFIG_SND_USB_HIFACE is not set +# CONFIG_SND_BCD2000 is not set +# CONFIG_SND_USB_POD is not set +# CONFIG_SND_USB_PODHD is not set +# CONFIG_SND_USB_TONEPORT is not set +# CONFIG_SND_USB_VARIAX is not set +CONFIG_SND_SOC=m +CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y +# CONFIG_SND_SOC_ADI is not set +# CONFIG_SND_SOC_AMD_ACP is not set +# CONFIG_SND_AMD_ACP_CONFIG is not set +# CONFIG_SND_ATMEL_SOC is not set +# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set +# CONFIG_SND_DESIGNWARE_I2S is not set + +# +# SoC Audio for Freescale CPUs +# + +# +# Common SoC Audio options for Freescale CPUs: +# +# CONFIG_SND_SOC_FSL_ASRC is not set +# CONFIG_SND_SOC_FSL_SAI is not set +# CONFIG_SND_SOC_FSL_AUDMIX is not set +# CONFIG_SND_SOC_FSL_SSI is not set +# CONFIG_SND_SOC_FSL_SPDIF is not set +# CONFIG_SND_SOC_FSL_ESAI is not set +# CONFIG_SND_SOC_FSL_MICFIL is not set +# CONFIG_SND_SOC_FSL_XCVR is not set +# CONFIG_SND_SOC_IMX_AUDMUX is not set +# end of SoC Audio for Freescale CPUs + +# CONFIG_SND_SOC_CHV3_I2S is not set +# CONFIG_SND_I2S_HI6210_I2S is not set +# CONFIG_SND_SOC_IMG is not set +# CONFIG_SND_SOC_MTK_BTCVSD is not set +CONFIG_SND_SOC_ROCKCHIP=m +# CONFIG_SND_SOC_ROCKCHIP_I2S is not set +CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m +CONFIG_SND_SOC_ROCKCHIP_PDM=m +# CONFIG_SND_SOC_ROCKCHIP_SPDIF is not set +# CONFIG_SND_SOC_ROCKCHIP_MAX98090 is not set +# CONFIG_SND_SOC_ROCKCHIP_RT5645 is not set +# CONFIG_SND_SOC_RK3288_HDMI_ANALOG is not set +# CONFIG_SND_SOC_RK3399_GRU_SOUND is not set +# CONFIG_SND_SOC_SOF_TOPLEVEL is not set + +# +# STMicroelectronics STM32 SOC audio support +# +# end of STMicroelectronics STM32 SOC audio support + +# CONFIG_SND_SOC_XILINX_I2S is not set +# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set +# CONFIG_SND_SOC_XILINX_SPDIF is not set +# CONFIG_SND_SOC_XTFPGA_I2S is not set +CONFIG_SND_SOC_I2C_AND_SPI=m + +# +# CODEC drivers +# +# CONFIG_SND_SOC_AC97_CODEC is not set +# CONFIG_SND_SOC_ADAU1372_I2C is not set +# CONFIG_SND_SOC_ADAU1372_SPI is not set +# CONFIG_SND_SOC_ADAU1701 is not set +# CONFIG_SND_SOC_ADAU1761_I2C is not set +# CONFIG_SND_SOC_ADAU1761_SPI is not set +# CONFIG_SND_SOC_ADAU7002 is not set +# CONFIG_SND_SOC_ADAU7118_HW is not set +# CONFIG_SND_SOC_ADAU7118_I2C is not set +# CONFIG_SND_SOC_AK4104 is not set +# CONFIG_SND_SOC_AK4118 is not set +# CONFIG_SND_SOC_AK4375 is not set +# CONFIG_SND_SOC_AK4458 is not set +# CONFIG_SND_SOC_AK4554 is not set +# CONFIG_SND_SOC_AK4613 is not set +# CONFIG_SND_SOC_AK4619 is not set +# CONFIG_SND_SOC_AK4642 is not set +# CONFIG_SND_SOC_AK5386 is not set +# CONFIG_SND_SOC_AK5558 is not set +# CONFIG_SND_SOC_ALC5623 is not set +# CONFIG_SND_SOC_AUDIO_IIO_AUX is not set +# CONFIG_SND_SOC_AW8738 is not set +# CONFIG_SND_SOC_AW88395 is not set +# CONFIG_SND_SOC_AW88261 is not set +# CONFIG_SND_SOC_AW87390 is not set +# CONFIG_SND_SOC_AW88399 is not set +# CONFIG_SND_SOC_BD28623 is not set +CONFIG_SND_SOC_BT_SCO=m +# CONFIG_SND_SOC_CHV3_CODEC is not set +# CONFIG_SND_SOC_CS35L32 is not set +# CONFIG_SND_SOC_CS35L33 is not set +# CONFIG_SND_SOC_CS35L34 is not set +# CONFIG_SND_SOC_CS35L35 is not set +# CONFIG_SND_SOC_CS35L36 is not set +# CONFIG_SND_SOC_CS35L41_SPI is not set +# CONFIG_SND_SOC_CS35L41_I2C is not set +# CONFIG_SND_SOC_CS35L45_SPI is not set +# CONFIG_SND_SOC_CS35L45_I2C is not set +# CONFIG_SND_SOC_CS35L56_I2C is not set +# CONFIG_SND_SOC_CS35L56_SPI is not set +# CONFIG_SND_SOC_CS42L42 is not set +# CONFIG_SND_SOC_CS42L51_I2C is not set +# CONFIG_SND_SOC_CS42L52 is not set +# CONFIG_SND_SOC_CS42L56 is not set +# CONFIG_SND_SOC_CS42L73 is not set +# CONFIG_SND_SOC_CS42L83 is not set +# CONFIG_SND_SOC_CS4234 is not set +# CONFIG_SND_SOC_CS4265 is not set +# CONFIG_SND_SOC_CS4270 is not set +# CONFIG_SND_SOC_CS4271_I2C is not set +# CONFIG_SND_SOC_CS4271_SPI is not set +# CONFIG_SND_SOC_CS42XX8_I2C is not set +# CONFIG_SND_SOC_CS43130 is not set +# CONFIG_SND_SOC_CS4341 is not set +# CONFIG_SND_SOC_CS4349 is not set +# CONFIG_SND_SOC_CS53L30 is not set +# CONFIG_SND_SOC_CS530X_I2C is not set +# CONFIG_SND_SOC_CX2072X is not set +# CONFIG_SND_SOC_DA7213 is not set +CONFIG_SND_SOC_DMIC=m +# CONFIG_SND_SOC_ES7134 is not set +# CONFIG_SND_SOC_ES7241 is not set +# CONFIG_SND_SOC_ES8311 is not set +# CONFIG_SND_SOC_ES8316 is not set +# CONFIG_SND_SOC_ES8326 is not set +# CONFIG_SND_SOC_ES8328_I2C is not set +# CONFIG_SND_SOC_ES8328_SPI is not set +# CONFIG_SND_SOC_GTM601 is not set +# CONFIG_SND_SOC_HDA is not set +# CONFIG_SND_SOC_ICS43432 is not set +# CONFIG_SND_SOC_IDT821034 is not set +# CONFIG_SND_SOC_INNO_RK3036 is not set +# CONFIG_SND_SOC_MAX98088 is not set +# CONFIG_SND_SOC_MAX98090 is not set +# CONFIG_SND_SOC_MAX98357A is not set +# CONFIG_SND_SOC_MAX98504 is not set +# CONFIG_SND_SOC_MAX9867 is not set +# CONFIG_SND_SOC_MAX98927 is not set +# CONFIG_SND_SOC_MAX98520 is not set +# CONFIG_SND_SOC_MAX98373_I2C is not set +# CONFIG_SND_SOC_MAX98388 is not set +# CONFIG_SND_SOC_MAX98390 is not set +# CONFIG_SND_SOC_MAX98396 is not set +# CONFIG_SND_SOC_MAX9860 is not set +# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set +# CONFIG_SND_SOC_PCM1681 is not set +# CONFIG_SND_SOC_PCM1789_I2C is not set +# CONFIG_SND_SOC_PCM179X_I2C is not set +# CONFIG_SND_SOC_PCM179X_SPI is not set +# CONFIG_SND_SOC_PCM186X_I2C is not set +# CONFIG_SND_SOC_PCM186X_SPI is not set +# CONFIG_SND_SOC_PCM3060_I2C is not set +# CONFIG_SND_SOC_PCM3060_SPI is not set +# CONFIG_SND_SOC_PCM3168A_I2C is not set +# CONFIG_SND_SOC_PCM3168A_SPI is not set +# CONFIG_SND_SOC_PCM5102A is not set +# CONFIG_SND_SOC_PCM512x_I2C is not set +# CONFIG_SND_SOC_PCM512x_SPI is not set +# CONFIG_SND_SOC_PCM6240 is not set +# CONFIG_SND_SOC_PEB2466 is not set +# CONFIG_SND_SOC_RK3308 is not set +# CONFIG_SND_SOC_RK3328 is not set +CONFIG_SND_SOC_RK817=m +# CONFIG_SND_SOC_RT5616 is not set +# CONFIG_SND_SOC_RT5631 is not set +# CONFIG_SND_SOC_RT5640 is not set +# CONFIG_SND_SOC_RT5659 is not set +# CONFIG_SND_SOC_RT9120 is not set +# CONFIG_SND_SOC_RTQ9128 is not set +# CONFIG_SND_SOC_SGTL5000 is not set +CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m +# CONFIG_SND_SOC_SIMPLE_MUX is not set +# CONFIG_SND_SOC_SMA1303 is not set +# CONFIG_SND_SOC_SPDIF is not set +# CONFIG_SND_SOC_SRC4XXX_I2C is not set +# CONFIG_SND_SOC_SSM2305 is not set +# CONFIG_SND_SOC_SSM2518 is not set +# CONFIG_SND_SOC_SSM2602_SPI is not set +# CONFIG_SND_SOC_SSM2602_I2C is not set +# CONFIG_SND_SOC_SSM3515 is not set +# CONFIG_SND_SOC_SSM4567 is not set +# CONFIG_SND_SOC_STA32X is not set +# CONFIG_SND_SOC_STA350 is not set +# CONFIG_SND_SOC_STI_SAS is not set +# CONFIG_SND_SOC_TAS2552 is not set +# CONFIG_SND_SOC_TAS2562 is not set +# CONFIG_SND_SOC_TAS2764 is not set +# CONFIG_SND_SOC_TAS2770 is not set +# CONFIG_SND_SOC_TAS2780 is not set +# CONFIG_SND_SOC_TAS2781_I2C is not set +# CONFIG_SND_SOC_TAS5086 is not set +# CONFIG_SND_SOC_TAS571X is not set +# CONFIG_SND_SOC_TAS5720 is not set +# CONFIG_SND_SOC_TAS5805M is not set +# CONFIG_SND_SOC_TAS6424 is not set +# CONFIG_SND_SOC_TDA7419 is not set +# CONFIG_SND_SOC_TFA9879 is not set +# CONFIG_SND_SOC_TFA989X is not set +# CONFIG_SND_SOC_TLV320ADC3XXX is not set +# CONFIG_SND_SOC_TLV320AIC23_I2C is not set +# CONFIG_SND_SOC_TLV320AIC23_SPI is not set +# CONFIG_SND_SOC_TLV320AIC31XX is not set +# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set +# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set +# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set +# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set +# CONFIG_SND_SOC_TLV320ADCX140 is not set +# CONFIG_SND_SOC_TS3A227E is not set +# CONFIG_SND_SOC_TSCS42XX is not set +# CONFIG_SND_SOC_TSCS454 is not set +# CONFIG_SND_SOC_UDA1334 is not set +# CONFIG_SND_SOC_WM8510 is not set +# CONFIG_SND_SOC_WM8523 is not set +# CONFIG_SND_SOC_WM8524 is not set +# CONFIG_SND_SOC_WM8580 is not set +# CONFIG_SND_SOC_WM8711 is not set +# CONFIG_SND_SOC_WM8728 is not set +# CONFIG_SND_SOC_WM8731_I2C is not set +# CONFIG_SND_SOC_WM8731_SPI is not set +# CONFIG_SND_SOC_WM8737 is not set +# CONFIG_SND_SOC_WM8741 is not set +# CONFIG_SND_SOC_WM8750 is not set +# CONFIG_SND_SOC_WM8753 is not set +# CONFIG_SND_SOC_WM8770 is not set +# CONFIG_SND_SOC_WM8776 is not set +# CONFIG_SND_SOC_WM8782 is not set +# CONFIG_SND_SOC_WM8804_I2C is not set +# CONFIG_SND_SOC_WM8804_SPI is not set +# CONFIG_SND_SOC_WM8903 is not set +# CONFIG_SND_SOC_WM8904 is not set +# CONFIG_SND_SOC_WM8940 is not set +# CONFIG_SND_SOC_WM8960 is not set +# CONFIG_SND_SOC_WM8961 is not set +# CONFIG_SND_SOC_WM8962 is not set +# CONFIG_SND_SOC_WM8974 is not set +# CONFIG_SND_SOC_WM8978 is not set +# CONFIG_SND_SOC_WM8985 is not set +# CONFIG_SND_SOC_ZL38060 is not set +# CONFIG_SND_SOC_MAX9759 is not set +# CONFIG_SND_SOC_MT6351 is not set +# CONFIG_SND_SOC_MT6357 is not set +# CONFIG_SND_SOC_MT6358 is not set +# CONFIG_SND_SOC_MT6660 is not set +# CONFIG_SND_SOC_NAU8315 is not set +# CONFIG_SND_SOC_NAU8540 is not set +# CONFIG_SND_SOC_NAU8810 is not set +# CONFIG_SND_SOC_NAU8821 is not set +# CONFIG_SND_SOC_NAU8822 is not set +# CONFIG_SND_SOC_NAU8824 is not set +# CONFIG_SND_SOC_TPA6130A2 is not set +# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set +# CONFIG_SND_SOC_LPASS_VA_MACRO is not set +# CONFIG_SND_SOC_LPASS_RX_MACRO is not set +# CONFIG_SND_SOC_LPASS_TX_MACRO is not set +# end of CODEC drivers + +CONFIG_SND_SIMPLE_CARD_UTILS=m +CONFIG_SND_SIMPLE_CARD=m +# CONFIG_SND_AUDIO_GRAPH_CARD is not set +# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set +# CONFIG_SND_TEST_COMPONENT is not set +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=m +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACCUTOUCH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_ASUS is not set +# CONFIG_HID_AUREAL is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_BETOP_FF is not set +# CONFIG_HID_BIGBEN_FF is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_CORSAIR is not set +# CONFIG_HID_COUGAR is not set +# CONFIG_HID_MACALLY is not set +# CONFIG_HID_PRODIKEYS is not set +# CONFIG_HID_CMEDIA is not set +# CONFIG_HID_CP2112 is not set +# CONFIG_HID_CREATIVE_SB0540 is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELAN is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_ELO is not set +# CONFIG_HID_EVISION is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_FT260 is not set +# CONFIG_HID_GEMBIRD is not set +# CONFIG_HID_GFRM is not set +# CONFIG_HID_GLORIOUS is not set +# CONFIG_HID_HOLTEK is not set +# CONFIG_HID_GOODIX_SPI is not set +# CONFIG_HID_GOOGLE_STADIA_FF is not set +# CONFIG_HID_VIVALDI is not set +# CONFIG_HID_GT683R is not set +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_VIEWSONIC is not set +# CONFIG_HID_VRC2 is not set +# CONFIG_HID_XIAOMI is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_ITE is not set +# CONFIG_HID_JABRA is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +# CONFIG_HID_LED is not set +# CONFIG_HID_LENOVO is not set +# CONFIG_HID_LETSKETCH is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MALTRON is not set +# CONFIG_HID_MAYFLASH is not set +# CONFIG_HID_MEGAWORLD_FF is not set +# CONFIG_HID_REDRAGON is not set +CONFIG_HID_MICROSOFT=y +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_NINTENDO is not set +# CONFIG_HID_NTI is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_NVIDIA_SHIELD is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PENMOUNT is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PLANTRONICS is not set +# CONFIG_HID_PLAYSTATION is not set +# CONFIG_HID_PXRC is not set +# CONFIG_HID_RAZER is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_RETRODE is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SEMITEK is not set +# CONFIG_HID_SIGMAMICRO is not set +# CONFIG_HID_SONY is not set +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEAM is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_RMI is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_TOPRE is not set +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_UDRAW_PS3 is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_WINWING is not set +# CONFIG_HID_XINMO is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set +# CONFIG_HID_ALPS is not set +# CONFIG_HID_MCP2200 is not set +# CONFIG_HID_MCP2221 is not set +# end of Special HID drivers + +# +# HID-BPF support +# +# CONFIG_HID_BPF is not set +# end of HID-BPF support + +# +# USB HID support +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +CONFIG_USB_HIDDEV=y +# end of USB HID support + +CONFIG_I2C_HID=y +CONFIG_I2C_HID_OF=m +# CONFIG_I2C_HID_OF_ELAN is not set +CONFIG_I2C_HID_OF_GOODIX=m +CONFIG_I2C_HID_CORE=m +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +CONFIG_USB_LED_TRIG=y +# CONFIG_USB_ULPI_BUS is not set +# CONFIG_USB_CONN_GPIO is not set +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +CONFIG_USB_PCI=y +# CONFIG_USB_PCI_AMD is not set +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_FEW_INIT_RETRIES is not set +CONFIG_USB_DYNAMIC_MINORS=y +CONFIG_USB_OTG=y +# CONFIG_USB_OTG_PRODUCTLIST is not set +# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set +CONFIG_USB_OTG_FSM=m +CONFIG_USB_LEDS_TRIGGER_USBPORT=y +CONFIG_USB_AUTOSUSPEND_DELAY=2 +CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 +# CONFIG_USB_MON is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +# CONFIG_USB_XHCI_DBGCAP is not set +CONFIG_USB_XHCI_PCI=y +# CONFIG_USB_XHCI_PCI_RENESAS is not set +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +CONFIG_USB_EHCI_PCI=y +# CONFIG_USB_EHCI_FSL is not set +CONFIG_USB_EHCI_HCD_PLATFORM=y +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_MAX3421_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PCI=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +# CONFIG_USB_UHCI_HCD is not set +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_TEST_MODE is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set +CONFIG_USB_UAS=m + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USBIP_CORE is not set + +# +# USB dual-mode controller drivers +# +# CONFIG_USB_CDNS_SUPPORT is not set +# CONFIG_USB_MUSB_HDRC is not set +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_HOST is not set +# CONFIG_USB_DWC3_GADGET is not set +CONFIG_USB_DWC3_DUAL_ROLE=y + +# +# Platform Glue Driver Support +# +CONFIG_USB_DWC3_HAPS=y +CONFIG_USB_DWC3_OF_SIMPLE=y +# CONFIG_USB_DWC2 is not set +# CONFIG_USB_CHIPIDEA is not set +# CONFIG_USB_ISP1760 is not set + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_APPLE_MFI_FASTCHARGE is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_EZUSB_FX2 is not set +# CONFIG_USB_HUB_USB251XB is not set +# CONFIG_USB_HSIC_USB3503 is not set +# CONFIG_USB_HSIC_USB4604 is not set +# CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_ONBOARD_DEV is not set + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +# CONFIG_NOP_USB_XCEIV is not set +# CONFIG_USB_GPIO_VBUS is not set +# CONFIG_USB_ISP1301 is not set +# CONFIG_USB_ULPI is not set +# end of USB Physical Layer drivers + +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 +# CONFIG_U_SERIAL_CONSOLE is not set + +# +# USB Peripheral Controller +# +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_MV_UDC is not set +# CONFIG_USB_MV_U3D is not set +# CONFIG_USB_SNP_UDC_PLAT is not set +# CONFIG_USB_M66592 is not set +# CONFIG_USB_BDC_UDC is not set +# CONFIG_USB_AMD5536UDC is not set +# CONFIG_USB_NET2272 is not set +# CONFIG_USB_NET2280 is not set +# CONFIG_USB_GOKU is not set +# CONFIG_USB_EG20T is not set +# CONFIG_USB_GADGET_XILINX is not set +# CONFIG_USB_MAX3420_UDC is not set +# CONFIG_USB_DUMMY_HCD is not set +# end of USB Peripheral Controller + +CONFIG_USB_LIBCOMPOSITE=m +CONFIG_USB_F_ACM=m +CONFIG_USB_U_SERIAL=m +CONFIG_USB_U_ETHER=m +CONFIG_USB_U_AUDIO=m +CONFIG_USB_F_SERIAL=m +CONFIG_USB_F_NCM=m +CONFIG_USB_F_ECM=m +CONFIG_USB_F_EEM=m +CONFIG_USB_F_SUBSET=m +CONFIG_USB_F_MASS_STORAGE=m +CONFIG_USB_F_FS=m +CONFIG_USB_F_UAC1=m +CONFIG_USB_F_UAC2=m +CONFIG_USB_F_HID=m +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_SERIAL=y +CONFIG_USB_CONFIGFS_ACM=y +# CONFIG_USB_CONFIGFS_OBEX is not set +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_ECM_SUBSET=y +# CONFIG_USB_CONFIGFS_RNDIS is not set +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +# CONFIG_USB_CONFIGFS_F_LB_SS is not set +# CONFIG_USB_CONFIGFS_F_FS is not set +CONFIG_USB_CONFIGFS_F_UAC1=y +# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set +CONFIG_USB_CONFIGFS_F_UAC2=y +# CONFIG_USB_CONFIGFS_F_MIDI is not set +# CONFIG_USB_CONFIGFS_F_MIDI2 is not set +CONFIG_USB_CONFIGFS_F_HID=y +# CONFIG_USB_CONFIGFS_F_UVC is not set +# CONFIG_USB_CONFIGFS_F_PRINTER is not set + +# +# USB Gadget precomposed configurations +# +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_G_NCM is not set +CONFIG_USB_GADGETFS=y +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_FUNCTIONFS_ETH=y +# CONFIG_USB_FUNCTIONFS_RNDIS is not set +CONFIG_USB_FUNCTIONFS_GENERIC=y +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +CONFIG_USB_CDC_COMPOSITE=m +# CONFIG_USB_G_ACM_MS is not set +CONFIG_USB_G_MULTI=m +# CONFIG_USB_G_MULTI_RNDIS is not set +CONFIG_USB_G_MULTI_CDC=y +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_G_WEBCAM is not set +# CONFIG_USB_RAW_GADGET is not set +# end of USB Gadget precomposed configurations + +CONFIG_TYPEC=y +# CONFIG_TYPEC_TCPM is not set +# CONFIG_TYPEC_UCSI is not set +# CONFIG_TYPEC_TPS6598X is not set +# CONFIG_TYPEC_ANX7411 is not set +# CONFIG_TYPEC_RT1719 is not set +# CONFIG_TYPEC_HD3SS3220 is not set +# CONFIG_TYPEC_STUSB160X is not set +CONFIG_TYPEC_WUSB3801=m + +# +# USB Type-C Multiplexer/DeMultiplexer Switch support +# +# CONFIG_TYPEC_MUX_FSA4480 is not set +# CONFIG_TYPEC_MUX_GPIO_SBU is not set +# CONFIG_TYPEC_MUX_PI3USB30532 is not set +# CONFIG_TYPEC_MUX_IT5205 is not set +# CONFIG_TYPEC_MUX_NB7VPQ904M is not set +# CONFIG_TYPEC_MUX_PTN36502 is not set +# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set +# end of USB Type-C Multiplexer/DeMultiplexer Switch support + +# +# USB Type-C Alternate Mode drivers +# +# CONFIG_TYPEC_DP_ALTMODE is not set +# end of USB Type-C Alternate Mode drivers + +CONFIG_USB_ROLE_SWITCH=y +CONFIG_MMC=y +CONFIG_PWRSEQ_EMMC=y +CONFIG_PWRSEQ_SIMPLE=y +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=32 +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_ARMMMCI is not set +CONFIG_MMC_SDHCI=y +# CONFIG_MMC_SDHCI_PCI is not set +CONFIG_MMC_SDHCI_PLTFM=y +# CONFIG_MMC_SDHCI_OF_ARASAN is not set +# CONFIG_MMC_SDHCI_OF_AT91 is not set +CONFIG_MMC_SDHCI_OF_DWCMSHC=y +# CONFIG_MMC_SDHCI_CADENCE is not set +# CONFIG_MMC_SDHCI_F_SDH30 is not set +# CONFIG_MMC_SDHCI_MILBEAUT is not set +# CONFIG_MMC_TIFM_SD is not set +# CONFIG_MMC_SPI is not set +# CONFIG_MMC_CB710 is not set +# CONFIG_MMC_VIA_SDMMC is not set +CONFIG_MMC_DW=y +CONFIG_MMC_DW_PLTFM=y +# CONFIG_MMC_DW_BLUEFIELD is not set +# CONFIG_MMC_DW_EXYNOS is not set +# CONFIG_MMC_DW_HI3798CV200 is not set +# CONFIG_MMC_DW_HI3798MV200 is not set +# CONFIG_MMC_DW_K3 is not set +# CONFIG_MMC_DW_PCI is not set +CONFIG_MMC_DW_ROCKCHIP=y +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MMC_USDHI6ROL0 is not set +CONFIG_MMC_CQHCI=y +# CONFIG_MMC_HSQ is not set +# CONFIG_MMC_TOSHIBA_PCI is not set +# CONFIG_MMC_MTK is not set +# CONFIG_MMC_SDHCI_XENON is not set +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=y +CONFIG_LEDS_CLASS_MULTICOLOR=y +# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set + +# +# LED drivers +# +# CONFIG_LEDS_AN30259A is not set +# CONFIG_LEDS_AW200XX is not set +# CONFIG_LEDS_AW2013 is not set +# CONFIG_LEDS_BCM6328 is not set +# CONFIG_LEDS_BCM6358 is not set +# CONFIG_LEDS_CR0014114 is not set +# CONFIG_LEDS_EL15203000 is not set +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3532 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_LM3692X is not set +# CONFIG_LEDS_PCA9532 is not set +CONFIG_LEDS_GPIO=y +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP3952 is not set +# CONFIG_LEDS_LP50XX is not set +# CONFIG_LEDS_LP55XX_COMMON is not set +# CONFIG_LEDS_LP8860 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_PCA995X is not set +# CONFIG_LEDS_DAC124S085 is not set +# CONFIG_LEDS_PWM is not set +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_BD2606MVV is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_IS31FL319X is not set +# CONFIG_LEDS_IS31FL32XX is not set + +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +# CONFIG_LEDS_BLINKM is not set +# CONFIG_LEDS_SYSCON is not set +# CONFIG_LEDS_MLXREG is not set +# CONFIG_LEDS_USER is not set +# CONFIG_LEDS_SPI_BYTE is not set +# CONFIG_LEDS_LM3697 is not set + +# +# Flash and Torch LED drivers +# +# CONFIG_LEDS_AAT1290 is not set +# CONFIG_LEDS_AS3645A is not set +# CONFIG_LEDS_KTD2692 is not set +# CONFIG_LEDS_LM3601X is not set +# CONFIG_LEDS_RT4505 is not set +# CONFIG_LEDS_RT8515 is not set +# CONFIG_LEDS_SGM3140 is not set +# CONFIG_LEDS_SY7802 is not set + +# +# RGB LED drivers +# +# CONFIG_LEDS_GROUP_MULTICOLOR is not set +# CONFIG_LEDS_KTD202X is not set +# CONFIG_LEDS_NCP5623 is not set +# CONFIG_LEDS_PWM_MULTICOLOR is not set + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +# CONFIG_LEDS_TRIGGER_DISK is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_ACTIVITY=y +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_LEDS_TRIGGER_CAMERA=y +CONFIG_LEDS_TRIGGER_PANIC=y +CONFIG_LEDS_TRIGGER_NETDEV=y +CONFIG_LEDS_TRIGGER_PATTERN=y +CONFIG_LEDS_TRIGGER_TTY=y +# CONFIG_LEDS_TRIGGER_INPUT_EVENTS is not set + +# +# Simple LED drivers +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_EDAC_SUPPORT=y +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_NVMEM=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABEOZ9 is not set +# CONFIG_RTC_DRV_ABX80X is not set +# CONFIG_RTC_DRV_DS1307 is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_HYM8563 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +# CONFIG_RTC_DRV_MAX31335 is not set +# CONFIG_RTC_DRV_NCT3018Y is not set +CONFIG_RTC_DRV_RK808=y +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_ISL12026 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF85063 is not set +# CONFIG_RTC_DRV_PCF85363 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8010 is not set +# CONFIG_RTC_DRV_RX8111 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set +# CONFIG_RTC_DRV_EM3027 is not set +# CONFIG_RTC_DRV_RV3028 is not set +# CONFIG_RTC_DRV_RV3032 is not set +# CONFIG_RTC_DRV_RV8803 is not set +# CONFIG_RTC_DRV_SD2405AL is not set +# CONFIG_RTC_DRV_SD3078 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1302 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1343 is not set +# CONFIG_RTC_DRV_DS1347 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6916 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RX4581 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_PCF2123 is not set +# CONFIG_RTC_DRV_MCP795 is not set +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_PCF2127 is not set +# CONFIG_RTC_DRV_RV3029C2 is not set +# CONFIG_RTC_DRV_RX6110 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_DS2404 is not set +# CONFIG_RTC_DRV_EFI is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_ZYNQMP is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_PL030 is not set +# CONFIG_RTC_DRV_PL031 is not set +# CONFIG_RTC_DRV_CADENCE is not set +# CONFIG_RTC_DRV_FTRTC010 is not set +# CONFIG_RTC_DRV_R7301 is not set + +# +# HID Sensor RTC drivers +# +# CONFIG_RTC_DRV_GOLDFISH is not set +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_OF=y +# CONFIG_ALTERA_MSGDMA is not set +# CONFIG_AMBA_PL08X is not set +# CONFIG_BCM_SBA_RAID is not set +# CONFIG_DW_AXI_DMAC is not set +# CONFIG_FSL_EDMA is not set +# CONFIG_FSL_QDMA is not set +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_MV_XOR_V2 is not set +CONFIG_PL330_DMA=y +# CONFIG_PLX_DMA is not set +# CONFIG_XILINX_DMA is not set +# CONFIG_XILINX_XDMA is not set +# CONFIG_XILINX_ZYNQMP_DMA is not set +# CONFIG_XILINX_ZYNQMP_DPDMA is not set +# CONFIG_AMD_QDMA is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set +# CONFIG_DW_DMAC is not set +# CONFIG_DW_DMAC_PCI is not set +# CONFIG_DW_EDMA is not set +# CONFIG_SF_PDMA is not set + +# +# DMA Clients +# +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set + +# +# DMABUF options +# +CONFIG_SYNC_FILE=y +# CONFIG_SW_SYNC is not set +# CONFIG_UDMABUF is not set +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set +# CONFIG_DMABUF_HEAPS is not set +# CONFIG_DMABUF_SYSFS_STATS is not set +# end of DMABUF options + +# CONFIG_UIO is not set +# CONFIG_VFIO is not set +# CONFIG_VIRT_DRIVERS is not set +# CONFIG_VIRTIO_MENU is not set +# CONFIG_VDPA is not set +# CONFIG_VHOST_MENU is not set + +# +# Microsoft Hyper-V guest support +# +# end of Microsoft Hyper-V guest support + +# CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set +CONFIG_STAGING=y +# CONFIG_RTLLIB is not set +# CONFIG_RTL8723BS is not set +# CONFIG_R8712U is not set +# CONFIG_RTS5208 is not set +# CONFIG_VT6655 is not set +# CONFIG_VT6656 is not set + +# +# IIO staging drivers +# + +# +# Accelerometers +# +# CONFIG_ADIS16203 is not set +# CONFIG_ADIS16240 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD7816 is not set +# end of Analog to digital converters + +# +# Analog digital bi-direction converters +# +# CONFIG_ADT7316 is not set +# end of Analog digital bi-direction converters + +# +# Direct Digital Synthesis +# +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# end of Direct Digital Synthesis + +# +# Network Analyzer, Impedance Converters +# +# CONFIG_AD5933 is not set +# end of Network Analyzer, Impedance Converters +# end of IIO staging drivers + +# CONFIG_FB_SM750 is not set +CONFIG_STAGING_MEDIA=y +# CONFIG_DVB_AV7110 is not set +# CONFIG_VIDEO_MAX96712 is not set +CONFIG_VIDEO_ROCKCHIP_VDEC=m + +# +# StarFive media platform drivers +# +# CONFIG_STAGING_MEDIA_DEPRECATED is not set +# CONFIG_LTE_GDM724X is not set +# CONFIG_FB_TFT is not set +# CONFIG_XIL_AXIS_FIFO is not set +# CONFIG_FIELDBUS_DEV is not set +# CONFIG_VME_BUS is not set +# CONFIG_GOLDFISH is not set +# CONFIG_CHROME_PLATFORMS is not set +# CONFIG_CZNIC_PLATFORMS is not set +# CONFIG_MELLANOX_PLATFORM is not set +# CONFIG_SURFACE_PLATFORMS is not set +CONFIG_ARM64_PLATFORM_DEVICES=y +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Clock driver for ARM Reference designs +# +# CONFIG_CLK_ICST is not set +# CONFIG_CLK_SP810 is not set +# end of Clock driver for ARM Reference designs + +# CONFIG_LMK04832 is not set +# CONFIG_COMMON_CLK_MAX9485 is not set +CONFIG_COMMON_CLK_RK808=y +CONFIG_COMMON_CLK_SCMI=y +# CONFIG_COMMON_CLK_SI5341 is not set +# CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI514 is not set +# CONFIG_COMMON_CLK_SI544 is not set +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set +# CONFIG_COMMON_CLK_CS2000_CP is not set +# CONFIG_COMMON_CLK_AXI_CLKGEN is not set +# CONFIG_COMMON_CLK_XGENE is not set +# CONFIG_COMMON_CLK_PWM is not set +# CONFIG_COMMON_CLK_RS9_PCIE is not set +# CONFIG_COMMON_CLK_SI521XX is not set +# CONFIG_COMMON_CLK_VC3 is not set +# CONFIG_COMMON_CLK_VC5 is not set +# CONFIG_COMMON_CLK_VC7 is not set +# CONFIG_COMMON_CLK_FIXED_MMIO is not set +CONFIG_COMMON_CLK_ROCKCHIP=y +# CONFIG_CLK_PX30 is not set +# CONFIG_CLK_RK3308 is not set +# CONFIG_CLK_RK3328 is not set +# CONFIG_CLK_RK3368 is not set +# CONFIG_CLK_RK3399 is not set +CONFIG_CLK_RK3568=y +CONFIG_CLK_RK3576=y +CONFIG_CLK_RK3588=y +# CONFIG_XILINX_VCU is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set +# CONFIG_HWSPINLOCK is not set + +# +# Clock Source drivers +# +CONFIG_TIMER_OF=y +CONFIG_TIMER_PROBE=y +CONFIG_CLKSRC_MMIO=y +CONFIG_ROCKCHIP_TIMER=y +CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +# CONFIG_FSL_ERRATUM_A008585 is not set +# CONFIG_HISILICON_ERRATUM_161010101 is not set +# CONFIG_ARM64_ERRATUM_858921 is not set +# end of Clock Source drivers + +CONFIG_MAILBOX=y +# CONFIG_ARM_MHU is not set +# CONFIG_ARM_MHU_V2 is not set +# CONFIG_ARM_MHU_V3 is not set +# CONFIG_PLATFORM_MHU is not set +# CONFIG_PL320_MBOX is not set +CONFIG_ROCKCHIP_MBOX=y +# CONFIG_ALTERA_MBOX is not set +# CONFIG_MAILBOX_TEST is not set +CONFIG_IOMMU_IOVA=y +CONFIG_IOMMU_API=y +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +CONFIG_IOMMU_IO_PGTABLE=y +CONFIG_IOMMU_IO_PGTABLE_LPAE=y +# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set +# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set +# CONFIG_IOMMU_IO_PGTABLE_DART is not set +# end of Generic IOMMU Pagetable Support + +# CONFIG_IOMMU_DEBUGFS is not set +# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set +# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set +CONFIG_IOMMU_DEFAULT_PASSTHROUGH=y +CONFIG_OF_IOMMU=y +CONFIG_IOMMU_DMA=y +# CONFIG_IOMMUFD is not set +CONFIG_ROCKCHIP_IOMMU=y +# CONFIG_ARM_SMMU is not set +# CONFIG_ARM_SMMU_V3 is not set + +# +# Remoteproc drivers +# +# CONFIG_REMOTEPROC is not set +# end of Remoteproc drivers + +# +# Rpmsg drivers +# +# CONFIG_RPMSG_QCOM_GLINK_RPM is not set +# CONFIG_RPMSG_VIRTIO is not set +# end of Rpmsg drivers + +# CONFIG_SOUNDWIRE is not set + +# +# SOC (System On Chip) specific Drivers +# + +# +# Amlogic SoC drivers +# +# end of Amlogic SoC drivers + +# +# Broadcom SoC drivers +# +# end of Broadcom SoC drivers + +# +# NXP/Freescale QorIQ SoC drivers +# +# CONFIG_QUICC_ENGINE is not set +# CONFIG_FSL_RCPM is not set +# end of NXP/Freescale QorIQ SoC drivers + +# +# fujitsu SoC drivers +# +# end of fujitsu SoC drivers + +# +# i.MX SoC drivers +# +# end of i.MX SoC drivers + +# +# Enable LiteX SoC Builder specific drivers +# +# CONFIG_LITEX_SOC_CONTROLLER is not set +# end of Enable LiteX SoC Builder specific drivers + +# CONFIG_WPCM450_SOC is not set + +# +# Qualcomm SoC drivers +# +# end of Qualcomm SoC drivers + +CONFIG_ROCKCHIP_GRF=y +CONFIG_ROCKCHIP_IODOMAIN=y +CONFIG_ROCKCHIP_SUSPEND_MODE=y +# CONFIG_SOC_TI is not set + +# +# Xilinx SoC drivers +# +# end of Xilinx SoC drivers +# end of SOC (System On Chip) specific Drivers + +# +# PM Domains +# + +# +# Amlogic PM Domains +# +# end of Amlogic PM Domains + +CONFIG_ARM_SCMI_PERF_DOMAIN=y +CONFIG_ARM_SCMI_POWER_DOMAIN=y + +# +# Broadcom PM Domains +# +# end of Broadcom PM Domains + +# +# i.MX PM Domains +# +# end of i.MX PM Domains + +# +# Qualcomm PM Domains +# +# end of Qualcomm PM Domains + +CONFIG_ROCKCHIP_PM_DOMAINS=y +# end of PM Domains + +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_DEVFREQ_GOV_USERSPACE=y +# CONFIG_DEVFREQ_GOV_PASSIVE is not set + +# +# DEVFREQ Drivers +# +CONFIG_ARM_RK3399_DMC_DEVFREQ=y +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=y +CONFIG_EXTCON=y + +# +# Extcon Device Drivers +# +# CONFIG_EXTCON_ADC_JACK is not set +# CONFIG_EXTCON_FSA9480 is not set +# CONFIG_EXTCON_GPIO is not set +# CONFIG_EXTCON_LC824206XA is not set +# CONFIG_EXTCON_MAX3355 is not set +# CONFIG_EXTCON_PTN5150 is not set +# CONFIG_EXTCON_RT8973A is not set +# CONFIG_EXTCON_SM5502 is not set +# CONFIG_EXTCON_USB_GPIO is not set +# CONFIG_EXTCON_USBC_TUSB320 is not set +# CONFIG_MEMORY is not set +CONFIG_IIO=m +CONFIG_IIO_BUFFER=y +# CONFIG_IIO_BUFFER_CB is not set +# CONFIG_IIO_BUFFER_DMA is not set +# CONFIG_IIO_BUFFER_DMAENGINE is not set +# CONFIG_IIO_BUFFER_HW_CONSUMER is not set +CONFIG_IIO_KFIFO_BUF=m +CONFIG_IIO_TRIGGERED_BUFFER=m +CONFIG_IIO_CONFIGFS=m +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +# CONFIG_IIO_SW_DEVICE is not set +CONFIG_IIO_SW_TRIGGER=m +CONFIG_IIO_TRIGGERED_EVENT=m + +# +# Accelerometers +# +# CONFIG_ADIS16201 is not set +# CONFIG_ADIS16209 is not set +# CONFIG_ADXL313_I2C is not set +# CONFIG_ADXL313_SPI is not set +# CONFIG_ADXL345_I2C is not set +# CONFIG_ADXL345_SPI is not set +# CONFIG_ADXL355_I2C is not set +# CONFIG_ADXL355_SPI is not set +# CONFIG_ADXL367_SPI is not set +# CONFIG_ADXL367_I2C is not set +# CONFIG_ADXL372_SPI is not set +# CONFIG_ADXL372_I2C is not set +# CONFIG_ADXL380_SPI is not set +# CONFIG_ADXL380_I2C is not set +# CONFIG_BMA180 is not set +# CONFIG_BMA220 is not set +# CONFIG_BMA400 is not set +# CONFIG_BMC150_ACCEL is not set +# CONFIG_BMI088_ACCEL is not set +# CONFIG_DA280 is not set +# CONFIG_DA311 is not set +# CONFIG_DMARD06 is not set +# CONFIG_DMARD09 is not set +# CONFIG_DMARD10 is not set +# CONFIG_FXLS8962AF_I2C is not set +# CONFIG_FXLS8962AF_SPI is not set +CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m +CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m +# CONFIG_IIO_KX022A_SPI is not set +# CONFIG_IIO_KX022A_I2C is not set +# CONFIG_KXSD9 is not set +# CONFIG_KXCJK1013 is not set +# CONFIG_MC3230 is not set +# CONFIG_MMA7455_I2C is not set +# CONFIG_MMA7455_SPI is not set +# CONFIG_MMA7660 is not set +# CONFIG_MMA8452 is not set +# CONFIG_MMA9551 is not set +# CONFIG_MMA9553 is not set +# CONFIG_MSA311 is not set +# CONFIG_MXC4005 is not set +# CONFIG_MXC6255 is not set +# CONFIG_SCA3000 is not set +# CONFIG_SCA3300 is not set +# CONFIG_STK8312 is not set +# CONFIG_STK8BA50 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD4000 is not set +# CONFIG_AD4130 is not set +# CONFIG_AD4695 is not set +# CONFIG_AD7091R5 is not set +# CONFIG_AD7091R8 is not set +# CONFIG_AD7124 is not set +# CONFIG_AD7173 is not set +# CONFIG_AD7192 is not set +# CONFIG_AD7266 is not set +# CONFIG_AD7280 is not set +# CONFIG_AD7291 is not set +# CONFIG_AD7292 is not set +# CONFIG_AD7298 is not set +# CONFIG_AD7380 is not set +# CONFIG_AD7476 is not set +# CONFIG_AD7606_IFACE_PARALLEL is not set +# CONFIG_AD7606_IFACE_SPI is not set +# CONFIG_AD7766 is not set +# CONFIG_AD7768_1 is not set +# CONFIG_AD7780 is not set +# CONFIG_AD7791 is not set +# CONFIG_AD7793 is not set +# CONFIG_AD7887 is not set +# CONFIG_AD7923 is not set +# CONFIG_AD7944 is not set +# CONFIG_AD7949 is not set +# CONFIG_AD799X is not set +# CONFIG_AD9467 is not set +# CONFIG_CC10001_ADC is not set +# CONFIG_ENVELOPE_DETECTOR is not set +# CONFIG_HI8435 is not set +# CONFIG_HX711 is not set +# CONFIG_INA2XX_ADC is not set +# CONFIG_LTC2309 is not set +# CONFIG_LTC2471 is not set +# CONFIG_LTC2485 is not set +# CONFIG_LTC2496 is not set +# CONFIG_LTC2497 is not set +# CONFIG_MAX1027 is not set +# CONFIG_MAX11100 is not set +# CONFIG_MAX1118 is not set +# CONFIG_MAX11205 is not set +# CONFIG_MAX11410 is not set +# CONFIG_MAX1241 is not set +# CONFIG_MAX1363 is not set +# CONFIG_MAX34408 is not set +# CONFIG_MAX9611 is not set +# CONFIG_MCP320X is not set +# CONFIG_MCP3422 is not set +# CONFIG_MCP3564 is not set +# CONFIG_MCP3911 is not set +# CONFIG_NAU7802 is not set +# CONFIG_PAC1921 is not set +# CONFIG_PAC1934 is not set +CONFIG_ROCKCHIP_SARADC=m +# CONFIG_RICHTEK_RTQ6056 is not set +# CONFIG_SD_ADC_MODULATOR is not set +# CONFIG_TI_ADC081C is not set +# CONFIG_TI_ADC0832 is not set +# CONFIG_TI_ADC084S021 is not set +# CONFIG_TI_ADC12138 is not set +# CONFIG_TI_ADC108S102 is not set +# CONFIG_TI_ADC128S052 is not set +# CONFIG_TI_ADC161S626 is not set +# CONFIG_TI_ADS1015 is not set +# CONFIG_TI_ADS1119 is not set +# CONFIG_TI_ADS7924 is not set +# CONFIG_TI_ADS1100 is not set +# CONFIG_TI_ADS1298 is not set +# CONFIG_TI_ADS7950 is not set +# CONFIG_TI_ADS8344 is not set +# CONFIG_TI_ADS8688 is not set +# CONFIG_TI_ADS124S08 is not set +# CONFIG_TI_ADS131E08 is not set +# CONFIG_TI_LMP92064 is not set +# CONFIG_TI_TLC4541 is not set +# CONFIG_TI_TSC2046 is not set +# CONFIG_VF610_ADC is not set +# CONFIG_XILINX_XADC is not set +# end of Analog to digital converters + +# +# Analog to digital and digital to analog converters +# +# CONFIG_AD74115 is not set +# CONFIG_AD74413R is not set +# end of Analog to digital and digital to analog converters + +# +# Analog Front Ends +# +# CONFIG_IIO_RESCALE is not set +# end of Analog Front Ends + +# +# Amplifiers +# +# CONFIG_AD8366 is not set +# CONFIG_ADA4250 is not set +# CONFIG_HMC425 is not set +# end of Amplifiers + +# +# Capacitance to digital converters +# +# CONFIG_AD7150 is not set +# CONFIG_AD7746 is not set +# end of Capacitance to digital converters + +# +# Chemical Sensors +# +# CONFIG_AOSONG_AGS02MA is not set +# CONFIG_ATLAS_PH_SENSOR is not set +# CONFIG_ATLAS_EZO_SENSOR is not set +# CONFIG_BME680 is not set +# CONFIG_CCS811 is not set +# CONFIG_ENS160 is not set +# CONFIG_IAQCORE is not set +# CONFIG_PMS7003 is not set +# CONFIG_SCD30_CORE is not set +# CONFIG_SCD4X is not set +# CONFIG_SENSIRION_SGP30 is not set +# CONFIG_SENSIRION_SGP40 is not set +# CONFIG_SPS30_I2C is not set +# CONFIG_SPS30_SERIAL is not set +# CONFIG_SENSEAIR_SUNRISE_CO2 is not set +# CONFIG_VZ89X is not set +# end of Chemical Sensors + +# +# Hid Sensor IIO Common +# +# end of Hid Sensor IIO Common + +# +# IIO SCMI Sensors +# +# CONFIG_IIO_SCMI is not set +# end of IIO SCMI Sensors + +# +# SSP Sensor Common +# +# CONFIG_IIO_SSP_SENSORHUB is not set +# end of SSP Sensor Common + +CONFIG_IIO_ST_SENSORS_I2C=m +CONFIG_IIO_ST_SENSORS_SPI=m +CONFIG_IIO_ST_SENSORS_CORE=m + +# +# Digital to analog converters +# +# CONFIG_AD3552R is not set +# CONFIG_AD5064 is not set +# CONFIG_AD5360 is not set +# CONFIG_AD5380 is not set +# CONFIG_AD5421 is not set +# CONFIG_AD5446 is not set +# CONFIG_AD5449 is not set +# CONFIG_AD5592R is not set +# CONFIG_AD5593R is not set +# CONFIG_AD5504 is not set +# CONFIG_AD5624R_SPI is not set +# CONFIG_AD9739A is not set +# CONFIG_LTC2688 is not set +# CONFIG_AD5686_SPI is not set +# CONFIG_AD5696_I2C is not set +# CONFIG_AD5755 is not set +# CONFIG_AD5758 is not set +# CONFIG_AD5761 is not set +# CONFIG_AD5764 is not set +# CONFIG_AD5766 is not set +# CONFIG_AD5770R is not set +# CONFIG_AD5791 is not set +# CONFIG_AD7293 is not set +# CONFIG_AD7303 is not set +# CONFIG_AD8801 is not set +# CONFIG_DPOT_DAC is not set +# CONFIG_DS4424 is not set +# CONFIG_LTC1660 is not set +# CONFIG_LTC2632 is not set +# CONFIG_LTC2664 is not set +# CONFIG_M62332 is not set +# CONFIG_MAX517 is not set +# CONFIG_MAX5522 is not set +# CONFIG_MAX5821 is not set +# CONFIG_MCP4725 is not set +# CONFIG_MCP4728 is not set +# CONFIG_MCP4821 is not set +# CONFIG_MCP4922 is not set +# CONFIG_TI_DAC082S085 is not set +# CONFIG_TI_DAC5571 is not set +# CONFIG_TI_DAC7311 is not set +# CONFIG_TI_DAC7612 is not set +# CONFIG_VF610_DAC is not set +# end of Digital to analog converters + +# +# IIO dummy driver +# +# end of IIO dummy driver + +# +# Filters +# +# CONFIG_ADMV8818 is not set +# end of Filters + +# +# Frequency Synthesizers DDS/PLL +# + +# +# Clock Generator/Distribution +# +# CONFIG_AD9523 is not set +# end of Clock Generator/Distribution + +# +# Phase-Locked Loop (PLL) frequency synthesizers +# +# CONFIG_ADF4350 is not set +# CONFIG_ADF4371 is not set +# CONFIG_ADF4377 is not set +# CONFIG_ADMFM2000 is not set +# CONFIG_ADMV1013 is not set +# CONFIG_ADMV1014 is not set +# CONFIG_ADMV4420 is not set +# CONFIG_ADRF6780 is not set +# end of Phase-Locked Loop (PLL) frequency synthesizers +# end of Frequency Synthesizers DDS/PLL + +# +# Digital gyroscope sensors +# +# CONFIG_ADIS16080 is not set +# CONFIG_ADIS16130 is not set +# CONFIG_ADIS16136 is not set +# CONFIG_ADIS16260 is not set +# CONFIG_ADXRS290 is not set +# CONFIG_ADXRS450 is not set +# CONFIG_BMG160 is not set +# CONFIG_FXAS21002C is not set +# CONFIG_MPU3050_I2C is not set +# CONFIG_IIO_ST_GYRO_3AXIS is not set +# CONFIG_ITG3200 is not set +# end of Digital gyroscope sensors + +# +# Health Sensors +# + +# +# Heart Rate Monitors +# +# CONFIG_AFE4403 is not set +# CONFIG_AFE4404 is not set +# CONFIG_MAX30100 is not set +# CONFIG_MAX30102 is not set +# end of Heart Rate Monitors +# end of Health Sensors + +# +# Humidity sensors +# +# CONFIG_AM2315 is not set +# CONFIG_DHT11 is not set +# CONFIG_ENS210 is not set +# CONFIG_HDC100X is not set +# CONFIG_HDC2010 is not set +# CONFIG_HDC3020 is not set +# CONFIG_HTS221 is not set +# CONFIG_HTU21 is not set +# CONFIG_SI7005 is not set +# CONFIG_SI7020 is not set +# end of Humidity sensors + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +# CONFIG_ADIS16460 is not set +# CONFIG_ADIS16475 is not set +# CONFIG_ADIS16480 is not set +# CONFIG_BMI160_I2C is not set +# CONFIG_BMI160_SPI is not set +# CONFIG_BMI323_I2C is not set +# CONFIG_BMI323_SPI is not set +# CONFIG_BOSCH_BNO055_SERIAL is not set +# CONFIG_BOSCH_BNO055_I2C is not set +# CONFIG_FXOS8700_I2C is not set +# CONFIG_FXOS8700_SPI is not set +# CONFIG_KMX61 is not set +# CONFIG_INV_ICM42600_I2C is not set +# CONFIG_INV_ICM42600_SPI is not set +# CONFIG_INV_MPU6050_I2C is not set +# CONFIG_INV_MPU6050_SPI is not set +# CONFIG_IIO_ST_LSM6DSX is not set +# CONFIG_IIO_ST_LSM9DS0 is not set +# end of Inertial measurement units + +# +# Light sensors +# +# CONFIG_ADJD_S311 is not set +# CONFIG_ADUX1020 is not set +# CONFIG_AL3010 is not set +# CONFIG_AL3320A is not set +# CONFIG_APDS9300 is not set +# CONFIG_APDS9306 is not set +# CONFIG_APDS9960 is not set +# CONFIG_AS73211 is not set +# CONFIG_BH1745 is not set +# CONFIG_BH1750 is not set +# CONFIG_BH1780 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM3232 is not set +# CONFIG_CM3323 is not set +# CONFIG_CM3605 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP002 is not set +# CONFIG_GP2AP020A00F is not set +# CONFIG_SENSORS_ISL29018 is not set +# CONFIG_SENSORS_ISL29028 is not set +# CONFIG_ISL29125 is not set +# CONFIG_ISL76682 is not set +# CONFIG_JSA1212 is not set +# CONFIG_ROHM_BU27008 is not set +# CONFIG_ROHM_BU27034 is not set +# CONFIG_RPR0521 is not set +# CONFIG_LTR390 is not set +# CONFIG_LTR501 is not set +# CONFIG_LTRF216A is not set +# CONFIG_LV0104CS is not set +# CONFIG_MAX44000 is not set +# CONFIG_MAX44009 is not set +# CONFIG_NOA1305 is not set +# CONFIG_OPT3001 is not set +# CONFIG_OPT4001 is not set +# CONFIG_PA12203001 is not set +# CONFIG_SI1133 is not set +# CONFIG_SI1145 is not set +# CONFIG_STK3310 is not set +# CONFIG_ST_UVIS25 is not set +# CONFIG_TCS3414 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL2583 is not set +# CONFIG_TSL2591 is not set +# CONFIG_TSL2772 is not set +# CONFIG_TSL4531 is not set +# CONFIG_US5182D is not set +# CONFIG_VCNL4000 is not set +# CONFIG_VCNL4035 is not set +# CONFIG_VEML6030 is not set +# CONFIG_VEML6040 is not set +# CONFIG_VEML6070 is not set +# CONFIG_VEML6075 is not set +# CONFIG_VL6180 is not set +# CONFIG_ZOPT2201 is not set +# end of Light sensors + +# +# Magnetometer sensors +# +# CONFIG_AF8133J is not set +# CONFIG_AK8974 is not set +# CONFIG_AK8975 is not set +# CONFIG_AK09911 is not set +# CONFIG_BMC150_MAGN_I2C is not set +# CONFIG_BMC150_MAGN_SPI is not set +# CONFIG_MAG3110 is not set +# CONFIG_MMC35240 is not set +# CONFIG_IIO_ST_MAGN_3AXIS is not set +# CONFIG_SENSORS_HMC5843_I2C is not set +# CONFIG_SENSORS_HMC5843_SPI is not set +# CONFIG_SENSORS_RM3100_I2C is not set +# CONFIG_SENSORS_RM3100_SPI is not set +# CONFIG_TI_TMAG5273 is not set +# CONFIG_YAMAHA_YAS530 is not set +# end of Magnetometer sensors + +# +# Multiplexers +# +# CONFIG_IIO_MUX is not set +# end of Multiplexers + +# +# Inclinometer sensors +# +# end of Inclinometer sensors + +# +# Triggers - standalone +# +# CONFIG_IIO_HRTIMER_TRIGGER is not set +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_TIGHTLOOP_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set +# end of Triggers - standalone + +# +# Linear and angular position sensors +# +# end of Linear and angular position sensors + +# +# Digital potentiometers +# +# CONFIG_AD5110 is not set +# CONFIG_AD5272 is not set +# CONFIG_DS1803 is not set +# CONFIG_MAX5432 is not set +# CONFIG_MAX5481 is not set +# CONFIG_MAX5487 is not set +# CONFIG_MCP4018 is not set +# CONFIG_MCP4131 is not set +# CONFIG_MCP4531 is not set +# CONFIG_MCP41010 is not set +# CONFIG_TPL0102 is not set +# CONFIG_X9250 is not set +# end of Digital potentiometers + +# +# Digital potentiostats +# +# CONFIG_LMP91000 is not set +# end of Digital potentiostats + +# +# Pressure sensors +# +# CONFIG_ABP060MG is not set +# CONFIG_ROHM_BM1390 is not set +# CONFIG_BMP280 is not set +# CONFIG_DLHL60D is not set +# CONFIG_DPS310 is not set +# CONFIG_HP03 is not set +# CONFIG_HSC030PA is not set +# CONFIG_ICP10100 is not set +# CONFIG_MPL115_I2C is not set +# CONFIG_MPL115_SPI is not set +# CONFIG_MPL3115 is not set +# CONFIG_MPRLS0025PA is not set +# CONFIG_MS5611 is not set +# CONFIG_MS5637 is not set +# CONFIG_SDP500 is not set +# CONFIG_IIO_ST_PRESS is not set +# CONFIG_T5403 is not set +# CONFIG_HP206C is not set +# CONFIG_ZPA2326 is not set +# end of Pressure sensors + +# +# Lightning sensors +# +# CONFIG_AS3935 is not set +# end of Lightning sensors + +# +# Proximity and distance sensors +# +# CONFIG_HX9023S is not set +# CONFIG_IRSD200 is not set +# CONFIG_ISL29501 is not set +# CONFIG_LIDAR_LITE_V2 is not set +# CONFIG_MB1232 is not set +# CONFIG_PING is not set +# CONFIG_RFD77402 is not set +# CONFIG_SRF04 is not set +# CONFIG_SX9310 is not set +# CONFIG_SX9324 is not set +# CONFIG_SX9360 is not set +# CONFIG_SX9500 is not set +# CONFIG_SRF08 is not set +# CONFIG_VCNL3020 is not set +# CONFIG_VL53L0X_I2C is not set +# CONFIG_AW96103 is not set +# end of Proximity and distance sensors + +# +# Resolver to digital converters +# +# CONFIG_AD2S90 is not set +# CONFIG_AD2S1200 is not set +# CONFIG_AD2S1210 is not set +# end of Resolver to digital converters + +# +# Temperature sensors +# +# CONFIG_LTC2983 is not set +# CONFIG_MAXIM_THERMOCOUPLE is not set +# CONFIG_MLX90614 is not set +# CONFIG_MLX90632 is not set +# CONFIG_MLX90635 is not set +# CONFIG_TMP006 is not set +# CONFIG_TMP007 is not set +# CONFIG_TMP117 is not set +# CONFIG_TSYS01 is not set +# CONFIG_TSYS02D is not set +# CONFIG_MAX30208 is not set +# CONFIG_MAX31856 is not set +# CONFIG_MAX31865 is not set +# CONFIG_MCP9600 is not set +# end of Temperature sensors + +# CONFIG_NTB is not set +CONFIG_PWM=y +# CONFIG_PWM_DEBUG is not set +# CONFIG_PWM_ATMEL_TCB is not set +# CONFIG_PWM_CLK is not set +# CONFIG_PWM_DWC is not set +# CONFIG_PWM_FSL_FTM is not set +# CONFIG_PWM_GPIO is not set +# CONFIG_PWM_PCA9685 is not set +CONFIG_PWM_ROCKCHIP=y +# CONFIG_PWM_XILINX is not set + +# +# IRQ chip support +# +CONFIG_IRQCHIP=y +CONFIG_ARM_GIC=y +CONFIG_ARM_GIC_MAX_NR=1 +CONFIG_ARM_GIC_V2M=y +CONFIG_ARM_GIC_V3=y +CONFIG_ARM_GIC_V3_ITS=y +CONFIG_ARM_GIC_V3_ITS_PCI=y +CONFIG_IRQ_MSI_LIB=y +# CONFIG_AL_FIC is not set +# CONFIG_LAN966X_OIC is not set +# CONFIG_XILINX_INTC is not set +CONFIG_PARTITION_PERCPU=y +# end of IRQ chip support + +# CONFIG_IPACK_BUS is not set +CONFIG_ARCH_HAS_RESET_CONTROLLER=y +CONFIG_RESET_CONTROLLER=y +# CONFIG_RESET_GPIO is not set +CONFIG_RESET_SCMI=y +# CONFIG_RESET_SIMPLE is not set +# CONFIG_RESET_TI_SYSCON is not set +# CONFIG_RESET_TI_TPS380X is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +CONFIG_GENERIC_PHY_MIPI_DPHY=y +# CONFIG_PHY_CAN_TRANSCEIVER is not set + +# +# PHY drivers for Broadcom platforms +# +# CONFIG_BCM_KONA_USB2_PHY is not set +# end of PHY drivers for Broadcom platforms + +# CONFIG_PHY_CADENCE_TORRENT is not set +# CONFIG_PHY_CADENCE_DPHY is not set +# CONFIG_PHY_CADENCE_DPHY_RX is not set +# CONFIG_PHY_CADENCE_SIERRA is not set +# CONFIG_PHY_CADENCE_SALVO is not set +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set +# CONFIG_PHY_LAN966X_SERDES is not set +# CONFIG_PHY_CPCAP_USB is not set +# CONFIG_PHY_MAPPHONE_MDM6600 is not set +# CONFIG_PHY_OCELOT_SERDES is not set +# CONFIG_PHY_ROCKCHIP_DP is not set +# CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set +# CONFIG_PHY_ROCKCHIP_EMMC is not set +CONFIG_PHY_ROCKCHIP_INNO_HDMI=y +CONFIG_PHY_ROCKCHIP_INNO_USB2=y +CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y +CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y +CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y +CONFIG_PHY_ROCKCHIP_PCIE=y +# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set +# CONFIG_PHY_ROCKCHIP_SNPS_PCIE3 is not set +# CONFIG_PHY_ROCKCHIP_TYPEC is not set +# CONFIG_PHY_ROCKCHIP_USB is not set +# CONFIG_PHY_ROCKCHIP_USBDP is not set +# end of PHY Subsystem + +# CONFIG_POWERCAP is not set +# CONFIG_MCB is not set + +# +# Performance monitor support +# +# CONFIG_ARM_CCI_PMU is not set +# CONFIG_ARM_CCN is not set +# CONFIG_ARM_CMN is not set +# CONFIG_ARM_NI is not set +CONFIG_ARM_PMU=y +# CONFIG_ARM_SMMU_V3_PMU is not set +CONFIG_ARM_PMUV3=y +# CONFIG_ARM_DSU_PMU is not set +# CONFIG_ARM_SPE_PMU is not set +# CONFIG_HISI_PCIE_PMU is not set +# CONFIG_HNS3_PMU is not set +# CONFIG_DWC_PCIE_PMU is not set +# CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set +# end of Performance monitor support + +# CONFIG_RAS is not set +# CONFIG_USB4 is not set + +# +# Android +# +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDERFS=y +CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" +# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set +# end of Android + +# CONFIG_LIBNVDIMM is not set +# CONFIG_DAX is not set +CONFIG_NVMEM=y +CONFIG_NVMEM_SYSFS=y +CONFIG_NVMEM_LAYOUTS=y + +# +# Layout Types +# +# CONFIG_NVMEM_LAYOUT_SL28_VPD is not set +# CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set +# CONFIG_NVMEM_LAYOUT_U_BOOT_ENV is not set +# end of Layout Types + +# CONFIG_NVMEM_RMEM is not set +# CONFIG_NVMEM_ROCKCHIP_EFUSE is not set +# CONFIG_NVMEM_ROCKCHIP_OTP is not set + +# +# HW tracing support +# +# CONFIG_STM is not set +# CONFIG_INTEL_TH is not set +# CONFIG_HISI_PTT is not set +# end of HW tracing support + +# CONFIG_FPGA is not set +# CONFIG_FSI is not set +# CONFIG_TEE is not set +CONFIG_PM_OPP=y +# CONFIG_SIOX is not set +# CONFIG_SLIMBUS is not set +# CONFIG_INTERCONNECT is not set +# CONFIG_COUNTER is not set +# CONFIG_MOST is not set +# CONFIG_PECI is not set +# CONFIG_HTE is not set +# CONFIG_CDX_BUS is not set +# end of Device Drivers + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_VALIDATE_FS_PARSER is not set +CONFIG_FS_IOMAP=y +CONFIG_FS_STACK=y +CONFIG_BUFFER_HEAD=y +CONFIG_LEGACY_DIRECT_IO=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT2=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +CONFIG_XFS_FS=y +# CONFIG_XFS_SUPPORT_V4 is not set +CONFIG_XFS_SUPPORT_ASCII_CI=y +# CONFIG_XFS_QUOTA is not set +CONFIG_XFS_POSIX_ACL=y +# CONFIG_XFS_RT is not set +# CONFIG_XFS_ONLINE_SCRUB is not set +# CONFIG_XFS_WARN is not set +# CONFIG_XFS_DEBUG is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +CONFIG_BTRFS_FS=m +CONFIG_BTRFS_FS_POSIX_ACL=y +# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set +# CONFIG_BTRFS_DEBUG is not set +# CONFIG_BTRFS_ASSERT is not set +# CONFIG_BTRFS_FS_REF_VERIFY is not set +# CONFIG_NILFS2_FS is not set +CONFIG_F2FS_FS=y +CONFIG_F2FS_STAT_FS=y +CONFIG_F2FS_FS_XATTR=y +CONFIG_F2FS_FS_POSIX_ACL=y +CONFIG_F2FS_FS_SECURITY=y +# CONFIG_F2FS_CHECK_FS is not set +# CONFIG_F2FS_FAULT_INJECTION is not set +# CONFIG_F2FS_FS_COMPRESSION is not set +CONFIG_F2FS_IOSTAT=y +# CONFIG_F2FS_UNFAIR_RWSEM is not set +# CONFIG_BCACHEFS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +# CONFIG_EXPORTFS_BLOCK_OPS is not set +CONFIG_FILE_LOCKING=y +# CONFIG_FS_ENCRYPTION is not set +# CONFIG_FS_VERITY is not set +CONFIG_FSNOTIFY=y +# CONFIG_DNOTIFY is not set +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +CONFIG_QUOTA=y +# CONFIG_QUOTA_NETLINK_INTERFACE is not set +# CONFIG_QUOTA_DEBUG is not set +# CONFIG_QFMT_V1 is not set +# CONFIG_QFMT_V2 is not set +CONFIG_QUOTACTL=y +CONFIG_AUTOFS_FS=y +CONFIG_FUSE_FS=m +# CONFIG_CUSE is not set +# CONFIG_VIRTIO_FS is not set +CONFIG_FUSE_PASSTHROUGH=y +CONFIG_OVERLAY_FS=m +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set +CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y +# CONFIG_OVERLAY_FS_INDEX is not set +# CONFIG_OVERLAY_FS_XINO_AUTO is not set +# CONFIG_OVERLAY_FS_METACOPY is not set +# CONFIG_OVERLAY_FS_DEBUG is not set + +# +# Caches +# +# end of Caches + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=m +CONFIG_JOLIET=y +# CONFIG_ZISOFS is not set +CONFIG_UDF_FS=m +# end of CD-ROM/DVD Filesystems + +# +# DOS/FAT/EXFAT/NT Filesystems +# +CONFIG_FAT_FS=y +# CONFIG_MSDOS_FS is not set +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_FAT_DEFAULT_UTF8=y +CONFIG_EXFAT_FS=m +CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" +CONFIG_NTFS3_FS=m +# CONFIG_NTFS3_64BIT_CLUSTER is not set +# CONFIG_NTFS3_LZX_XPRESS is not set +# CONFIG_NTFS3_FS_POSIX_ACL is not set +# CONFIG_NTFS_FS is not set +# end of DOS/FAT/EXFAT/NT Filesystems + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_VMCORE=y +# CONFIG_PROC_VMCORE_DEVICE_DUMP is not set +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +CONFIG_PROC_CHILDREN=y +CONFIG_KERNFS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_TMPFS_INODE64=y +# CONFIG_TMPFS_QUOTA is not set +CONFIG_ARCH_SUPPORTS_HUGETLBFS=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y +CONFIG_ARCH_HAS_GIGANTIC_PAGE=y +CONFIG_CONFIGFS_FS=y +CONFIG_EFIVAR_FS=y +# end of Pseudo filesystems + +# CONFIG_MISC_FILESYSTEMS is not set +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +CONFIG_UNICODE=y +# CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set +CONFIG_IO_WQ=y +# end of File systems + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_REQUEST_CACHE is not set +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_TRUSTED_KEYS is not set +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEY_DH_OPERATIONS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +CONFIG_PROC_MEM_ALWAYS_FORCE=y +# CONFIG_PROC_MEM_FORCE_PTRACE is not set +# CONFIG_PROC_MEM_NO_FORCE is not set +# CONFIG_SECURITY is not set +# CONFIG_SECURITYFS is not set +# CONFIG_HARDENED_USERCOPY is not set +# CONFIG_FORTIFY_SOURCE is not set +# CONFIG_STATIC_USERMODEHELPER is not set +# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_LSM="" + +# +# Kernel hardening options +# + +# +# Memory initialization +# +CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y +CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y +# CONFIG_INIT_STACK_NONE is not set +# CONFIG_INIT_STACK_ALL_PATTERN is not set +CONFIG_INIT_STACK_ALL_ZERO=y +# CONFIG_GCC_PLUGIN_STACKLEAK is not set +# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y +# CONFIG_ZERO_CALL_USED_REGS is not set +# end of Memory initialization + +# +# Hardening of kernel data structures +# +# CONFIG_LIST_HARDENED is not set +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +# end of Hardening of kernel data structures + +CONFIG_RANDSTRUCT_NONE=y +# CONFIG_RANDSTRUCT_FULL is not set +# CONFIG_RANDSTRUCT_PERFORMANCE is not set +# end of Kernel hardening options +# end of Security options + +CONFIG_XOR_BLOCKS=m +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_SIG2=y +CONFIG_CRYPTO_SKCIPHER=y +CONFIG_CRYPTO_SKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_RNG_DEFAULT=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_KPP=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_USER is not set +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +CONFIG_CRYPTO_NULL=y +CONFIG_CRYPTO_NULL2=y +# CONFIG_CRYPTO_PCRYPT is not set +# CONFIG_CRYPTO_CRYPTD is not set +CONFIG_CRYPTO_AUTHENC=m +# CONFIG_CRYPTO_TEST is not set +# end of Crypto core or helper + +# +# Public-key cryptography +# +# CONFIG_CRYPTO_RSA is not set +# CONFIG_CRYPTO_DH is not set +CONFIG_CRYPTO_ECC=y +CONFIG_CRYPTO_ECDH=y +# CONFIG_CRYPTO_ECDSA is not set +# CONFIG_CRYPTO_ECRDSA is not set +# CONFIG_CRYPTO_CURVE25519 is not set +# end of Public-key cryptography + +# +# Block ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_TI is not set +# CONFIG_CRYPTO_ARIA is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +CONFIG_CRYPTO_DES=y +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_SM4_GENERIC is not set +# CONFIG_CRYPTO_TWOFISH is not set +# end of Block ciphers + +# +# Length-preserving ciphers and modes +# +# CONFIG_CRYPTO_ADIANTUM is not set +# CONFIG_CRYPTO_CHACHA20 is not set +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CTR=y +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_HCTR2 is not set +# CONFIG_CRYPTO_KEYWRAP is not set +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_PCBC is not set +CONFIG_CRYPTO_XTS=y +# end of Length-preserving ciphers and modes + +# +# AEAD (authenticated encryption with associated data) ciphers +# +# CONFIG_CRYPTO_AEGIS128 is not set +# CONFIG_CRYPTO_CHACHA20POLY1305 is not set +CONFIG_CRYPTO_CCM=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_GENIV=y +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_ESSIV=m +# end of AEAD (authenticated encryption with associated data) ciphers + +# +# Hashes, digests, and MACs +# +CONFIG_CRYPTO_BLAKE2B=m +CONFIG_CRYPTO_CMAC=y +CONFIG_CRYPTO_GHASH=y +CONFIG_CRYPTO_HMAC=y +# CONFIG_CRYPTO_MD4 is not set +CONFIG_CRYPTO_MD5=y +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_POLY1305 is not set +# CONFIG_CRYPTO_RMD160 is not set +CONFIG_CRYPTO_SHA1=y +CONFIG_CRYPTO_SHA256=y +CONFIG_CRYPTO_SHA512=y +CONFIG_CRYPTO_SHA3=y +# CONFIG_CRYPTO_SM3_GENERIC is not set +# CONFIG_CRYPTO_STREEBOG is not set +# CONFIG_CRYPTO_VMAC is not set +# CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_XCBC is not set +CONFIG_CRYPTO_XXHASH=m +# end of Hashes, digests, and MACs + +# +# CRCs (cyclic redundancy checks) +# +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32=y +# CONFIG_CRYPTO_CRCT10DIF is not set +# end of CRCs (cyclic redundancy checks) + +# +# Compression +# +# CONFIG_CRYPTO_DEFLATE is not set +# CONFIG_CRYPTO_LZO is not set +# CONFIG_CRYPTO_842 is not set +# CONFIG_CRYPTO_LZ4 is not set +# CONFIG_CRYPTO_LZ4HC is not set +# CONFIG_CRYPTO_ZSTD is not set +# end of Compression + +# +# Random number generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +CONFIG_CRYPTO_DRBG_MENU=y +CONFIG_CRYPTO_DRBG_HMAC=y +CONFIG_CRYPTO_DRBG_HASH=y +CONFIG_CRYPTO_DRBG_CTR=y +CONFIG_CRYPTO_DRBG=y +CONFIG_CRYPTO_JITTERENTROPY=y +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64 +CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32 +CONFIG_CRYPTO_JITTERENTROPY_OSR=1 +# end of Random number generation + +# +# Userspace interface +# +CONFIG_CRYPTO_USER_API=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +# CONFIG_CRYPTO_USER_API_RNG is not set +# CONFIG_CRYPTO_USER_API_AEAD is not set +# CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set +# end of Userspace interface + +# CONFIG_CRYPTO_NHPOLY1305_NEON is not set +CONFIG_CRYPTO_CHACHA20_NEON=m + +# +# Accelerated Cryptographic Algorithms for CPU (arm64) +# +# CONFIG_CRYPTO_GHASH_ARM64_CE is not set +CONFIG_CRYPTO_POLY1305_NEON=m +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA256_ARM64=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_SHA512_ARM64=y +CONFIG_CRYPTO_SHA512_ARM64_CE=y +# CONFIG_CRYPTO_SHA3_ARM64 is not set +# CONFIG_CRYPTO_SM3_NEON is not set +# CONFIG_CRYPTO_SM3_ARM64_CE is not set +# CONFIG_CRYPTO_POLYVAL_ARM64_CE is not set +# CONFIG_CRYPTO_AES_ARM64 is not set +CONFIG_CRYPTO_AES_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set +# CONFIG_CRYPTO_AES_ARM64_BS is not set +# CONFIG_CRYPTO_SM4_ARM64_CE is not set +# CONFIG_CRYPTO_SM4_ARM64_CE_BLK is not set +# CONFIG_CRYPTO_SM4_ARM64_NEON_BLK is not set +# CONFIG_CRYPTO_AES_ARM64_CE_CCM is not set +# CONFIG_CRYPTO_SM4_ARM64_CE_CCM is not set +# CONFIG_CRYPTO_SM4_ARM64_CE_GCM is not set +# end of Accelerated Cryptographic Algorithms for CPU (arm64) + +# CONFIG_CRYPTO_HW is not set +# CONFIG_ASYMMETRIC_KEY_TYPE is not set + +# +# Certificates for signature checking +# +# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set +# end of Certificates for signature checking + +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_RAID6_PQ=m +CONFIG_RAID6_PQ_BENCHMARK=y +CONFIG_LINEAR_RANGES=y +# CONFIG_PACKING is not set +CONFIG_BITREVERSE=y +CONFIG_HAVE_ARCH_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +# CONFIG_CORDIC is not set +# CONFIG_PRIME_NUMBERS is not set +CONFIG_RATIONAL=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y +CONFIG_ARCH_HAS_FAST_MULTIPLIER=y +CONFIG_ARCH_USE_SYM_ANNOTATIONS=y +# CONFIG_INDIRECT_PIO is not set +# CONFIG_TRACE_MMIO_ACCESS is not set + +# +# Crypto library routines +# +CONFIG_CRYPTO_LIB_UTILS=y +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_ARC4=m +CONFIG_CRYPTO_LIB_GF128MUL=y +CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=m +CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m +CONFIG_CRYPTO_LIB_CHACHA=m +CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m +CONFIG_CRYPTO_LIB_CURVE25519=m +CONFIG_CRYPTO_LIB_DES=y +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9 +CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=m +CONFIG_CRYPTO_LIB_POLY1305=m +CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m +CONFIG_CRYPTO_LIB_SHA1=y +CONFIG_CRYPTO_LIB_SHA256=y +# end of Crypto library routines + +# CONFIG_CRC_CCITT is not set +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC64_ROCKSOFT is not set +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +# CONFIG_CRC32_SELFTEST is not set +CONFIG_CRC32_SLICEBY8=y +# CONFIG_CRC32_SLICEBY4 is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_BIT is not set +# CONFIG_CRC64 is not set +# CONFIG_CRC4 is not set +# CONFIG_CRC7 is not set +CONFIG_LIBCRC32C=y +# CONFIG_CRC8 is not set +CONFIG_XXHASH=y +CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_LZO_COMPRESS=m +CONFIG_LZO_DECOMPRESS=m +CONFIG_ZSTD_COMMON=y +CONFIG_ZSTD_COMPRESS=m +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_ARM64=y +CONFIG_XZ_DEC_SPARC=y +CONFIG_XZ_DEC_RISCV=y +# CONFIG_XZ_DEC_MICROLZMA is not set +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_ZSTD=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_XARRAY_MULTI=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_IOPORT_MAP=y +CONFIG_HAS_DMA=y +CONFIG_DMA_OPS_HELPERS=y +CONFIG_NEED_SG_DMA_FLAGS=y +CONFIG_NEED_SG_DMA_LENGTH=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_ARCH_DMA_ADDR_T_64BIT=y +CONFIG_DMA_DECLARE_COHERENT=y +CONFIG_ARCH_HAS_SETUP_DMA_OPS=y +CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y +CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y +CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y +CONFIG_SWIOTLB=y +# CONFIG_SWIOTLB_DYNAMIC is not set +CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y +CONFIG_DMA_NEED_SYNC=y +# CONFIG_DMA_RESTRICTED_POOL is not set +CONFIG_DMA_NONCOHERENT_MMAP=y +CONFIG_DMA_COHERENT_POOL=y +CONFIG_DMA_DIRECT_REMAP=y +CONFIG_DMA_CMA=y + +# +# Default contiguous memory area size: +# +CONFIG_CMA_SIZE_MBYTES=16 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_SGL_ALLOC=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y +# CONFIG_IRQ_POLL is not set +CONFIG_LIBFDT=y +CONFIG_UCS2_STRING=y +CONFIG_HAVE_GENERIC_VDSO=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_TIME_NS=y +CONFIG_VDSO_GETRANDOM=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_SG_POOL=y +CONFIG_ARCH_STACKWALK=y +CONFIG_SBITMAP=y +# CONFIG_LWQ_TEST is not set +# end of Library routines + +CONFIG_GENERIC_IOREMAP=y +CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +# CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_LOGLEVEL_QUIET=4 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DYNAMIC_DEBUG_CORE=y +CONFIG_SYMBOLIC_ERRNAME=y +CONFIG_DEBUG_BUGVERBOSE=y +# end of printk and dmesg options + +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_MISC is not set + +# +# Compile-time checks and compiler options +# +CONFIG_DEBUG_INFO=y +CONFIG_AS_HAS_NON_CONST_ULEB128=y +# CONFIG_DEBUG_INFO_NONE is not set +# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set +# CONFIG_DEBUG_INFO_DWARF4 is not set +CONFIG_DEBUG_INFO_DWARF5=y +CONFIG_DEBUG_INFO_REDUCED=y +CONFIG_DEBUG_INFO_COMPRESSED_NONE=y +# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set +# CONFIG_DEBUG_INFO_COMPRESSED_ZSTD is not set +CONFIG_DEBUG_INFO_SPLIT=y +# CONFIG_GDB_SCRIPTS is not set +CONFIG_FRAME_WARN=2048 +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set +CONFIG_ARCH_WANT_FRAME_POINTERS=y +CONFIG_FRAME_POINTER=y +# CONFIG_VMLINUX_MAP is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# end of Compile-time checks and compiler options + +# +# Generic Kernel Debugging Instruments +# +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +# CONFIG_MAGIC_SYSRQ_SERIAL is not set +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ALLOW_ALL=y +# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set +# CONFIG_DEBUG_FS_ALLOW_NONE is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +CONFIG_ARCH_HAS_UBSAN=y +# CONFIG_UBSAN is not set +CONFIG_HAVE_ARCH_KCSAN=y +CONFIG_HAVE_KCSAN_COMPILER=y +# CONFIG_KCSAN is not set +# end of Generic Kernel Debugging Instruments + +# +# Networking Debugging +# +# CONFIG_NET_DEV_REFCNT_TRACKER is not set +# CONFIG_NET_NS_REFCNT_TRACKER is not set +# CONFIG_DEBUG_NET is not set +# end of Networking Debugging + +# +# Memory Debugging +# +# CONFIG_PAGE_EXTENSION is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_SLUB_DEBUG is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_RODATA_TEST is not set +CONFIG_ARCH_HAS_DEBUG_WX=y +# CONFIG_DEBUG_WX is not set +CONFIG_GENERIC_PTDUMP=y +# CONFIG_PTDUMP_DEBUGFS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_PER_VMA_LOCK_STATS is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SHRINKER_DEBUG is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_SCHED_STACK_END_CHECK is not set +CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_VM_PGTABLE is not set +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_MEM_ALLOC_PROFILING is not set +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_HAVE_ARCH_KASAN_SW_TAGS=y +CONFIG_HAVE_ARCH_KASAN_VMALLOC=y +CONFIG_CC_HAS_KASAN_GENERIC=y +CONFIG_CC_HAS_KASAN_SW_TAGS=y +CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y +# CONFIG_KASAN is not set +CONFIG_HAVE_ARCH_KFENCE=y +# CONFIG_KFENCE is not set +# end of Memory Debugging + +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Oops, Lockups and Hangs +# +CONFIG_PANIC_ON_OOPS=y +CONFIG_PANIC_ON_OOPS_VALUE=1 +CONFIG_PANIC_TIMEOUT=1 +CONFIG_LOCKUP_DETECTOR=y +CONFIG_SOFTLOCKUP_DETECTOR=y +CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set +CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y +# CONFIG_HARDLOCKUP_DETECTOR is not set +# CONFIG_DETECT_HUNG_TASK is not set +CONFIG_WQ_WATCHDOG=y +# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set +# CONFIG_TEST_LOCKUP is not set +# end of Debug Oops, Lockups and Hangs + +# +# Scheduler Debugging +# +CONFIG_SCHED_DEBUG=y +CONFIG_SCHED_INFO=y +CONFIG_SCHEDSTATS=y +# end of Scheduler Debugging + +# CONFIG_DEBUG_TIMEKEEPING is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +CONFIG_LOCK_DEBUGGING_SUPPORT=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set +# CONFIG_CSD_LOCK_WAIT_DEBUG is not set +# end of Lock Debugging (spinlocks, mutexes, etc...) + +# CONFIG_DEBUG_IRQFLAGS is not set +CONFIG_STACKTRACE=y +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_DEBUG_KOBJECT is not set + +# +# Debug kernel data structures +# +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_DEBUG_MAPLE_TREE is not set +# end of Debug kernel data structures + +# +# RCU Debugging +# +# CONFIG_RCU_SCALE_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_REF_SCALE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 +# CONFIG_RCU_CPU_STALL_CPUTIME is not set +CONFIG_RCU_TRACE=y +# CONFIG_RCU_EQS_DEBUG is not set +# end of RCU Debugging + +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +CONFIG_CPU_HOTPLUG_STATE_CONTROL=y +# CONFIG_LATENCYTOP is not set +CONFIG_USER_STACKTRACE_SUPPORT=y +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_GENERIC_TRACER=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_BOOTTIME_TRACING is not set +CONFIG_FUNCTION_TRACER=y +CONFIG_FUNCTION_GRAPH_TRACER=y +CONFIG_FUNCTION_GRAPH_RETVAL=y +CONFIG_DYNAMIC_FTRACE=y +CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y +CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS=y +CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y +# CONFIG_FUNCTION_PROFILER is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_HWLAT_TRACER is not set +# CONFIG_OSNOISE_TRACER is not set +# CONFIG_TIMERLAT_TRACER is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_TRACER_SNAPSHOT is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_UPROBE_EVENTS is not set +CONFIG_FTRACE_MCOUNT_RECORD=y +CONFIG_FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY=y +# CONFIG_SYNTH_EVENTS is not set +# CONFIG_USER_EVENTS is not set +# CONFIG_HIST_TRIGGERS is not set +# CONFIG_TRACE_EVENT_INJECT is not set +# CONFIG_TRACEPOINT_BENCHMARK is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_TRACE_EVAL_MAP_FILE is not set +# CONFIG_FTRACE_RECORD_RECURSION is not set +# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set +# CONFIG_FTRACE_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set +# CONFIG_PREEMPTIRQ_DELAY_TEST is not set +# CONFIG_RV is not set +# CONFIG_SAMPLES is not set +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y +CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y +# CONFIG_STRICT_DEVMEM is not set + +# +# arm64 Debugging +# +# CONFIG_PID_IN_CONTEXTIDR is not set +# CONFIG_DEBUG_EFI is not set +# CONFIG_ARM64_RELOC_TEST is not set +# CONFIG_CORESIGHT is not set +# end of arm64 Debugging + +# +# Kernel Testing and Coverage +# +# CONFIG_KUNIT is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_ARCH_HAS_KCOV=y +CONFIG_CC_HAS_SANCOV_TRACE_PC=y +# CONFIG_KCOV is not set +# CONFIG_RUNTIME_TESTING_MENU is not set +CONFIG_ARCH_USE_MEMTEST=y +# CONFIG_MEMTEST is not set +# end of Kernel Testing and Coverage + +# +# Rust hacking +# +# end of Rust hacking +# end of Kernel hacking From c82ac68ca4f8bc4309f303e5007844fdbf3a2592 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 8 Jan 2025 23:01:42 -0500 Subject: [PATCH 532/738] pmos/pinenote-dbus-service: move from user --- {user => pmos}/pinenote-dbus-service/APKBUILD | 2 +- {user => pmos}/pinenote-dbus-service/pinenote.initd | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename {user => pmos}/pinenote-dbus-service/APKBUILD (99%) rename {user => pmos}/pinenote-dbus-service/pinenote.initd (100%) diff --git a/user/pinenote-dbus-service/APKBUILD b/pmos/pinenote-dbus-service/APKBUILD similarity index 99% rename from user/pinenote-dbus-service/APKBUILD rename to pmos/pinenote-dbus-service/APKBUILD index 0312e65..0136557 100644 --- a/user/pinenote-dbus-service/APKBUILD +++ b/pmos/pinenote-dbus-service/APKBUILD @@ -2,7 +2,7 @@ pkgname=pinenote-dbus-service pkgver=0.2.2_pre5 _gittag=0.2.2-dev5 -pkgrel=0 +pkgrel=1 pkgdesc="Dbus daemon for controlling driver aspects on Pine64 Pinenote" url="https://github.com/m-weigand/pinenote_dbus_service" arch="aarch64" diff --git a/user/pinenote-dbus-service/pinenote.initd b/pmos/pinenote-dbus-service/pinenote.initd similarity index 100% rename from user/pinenote-dbus-service/pinenote.initd rename to pmos/pinenote-dbus-service/pinenote.initd From c6d37636b60f161af16ccdb130d9a7773b6bbcdc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 8 Jan 2025 22:59:15 -0500 Subject: [PATCH 533/738] pmos/linux-pine64-pinenote: upgrade to 6.12.0 --- pmos/linux-pine64-pinenote/APKBUILD | 8 +- .../config-pine64-pinenote.aarch64 | 170 +++++++++++++++--- 2 files changed, 154 insertions(+), 24 deletions(-) diff --git a/pmos/linux-pine64-pinenote/APKBUILD b/pmos/linux-pine64-pinenote/APKBUILD index 9d00d99..84f8643 100644 --- a/pmos/linux-pine64-pinenote/APKBUILD +++ b/pmos/linux-pine64-pinenote/APKBUILD @@ -2,7 +2,7 @@ # Kernel config based on: arch/arm64/configs/(CHANGEME!) pkgname=linux-pine64-pinenote -pkgver=6.12.0_rc2 +pkgver=6.12.0 pkgrel=0 pkgdesc="Pine64 PineNote kernel fork" arch="aarch64" @@ -24,7 +24,7 @@ makedepends=" # Source _repository="linux" -_commit="5392aa8e38082b431f3330c873b288f72ae98f90" +_commit="9d066a65f5cbaa8cd3bfc73a1b54fbac2d0f76ac" _config="config-$_flavor.$arch" source=" $pkgname-$_commit.tar.gz::https://github.com/m-weigand/linux/archive/$_commit.tar.gz @@ -54,6 +54,6 @@ package() { } sha512sums=" -34f410639b0046a192f18518db2c12593bf2acb27fd76560801d9010558f55b71cb1c3208b9755f1991f361c70cb80265bb587b7028945da85763de25e73704e linux-pine64-pinenote-5392aa8e38082b431f3330c873b288f72ae98f90.tar.gz -d460b63f8b7d32849a3ae426e0258a2b66b251c654f42c69a65b8ec77f24c6f9d0277f0c66879218dfa9aaa58c019592c17b34f5a8518bd67a62a1fbbddb9f9f config-pine64-pinenote.aarch64 +d3c2510f9f835a0570fbb812cec2f9e12e402878c1f9f214364ae1918bc4c00f69a1fc5e005cf6b85c0690e6fd5f6ce9e61efd88145a83725ed12b6b8c07b97e linux-pine64-pinenote-9d066a65f5cbaa8cd3bfc73a1b54fbac2d0f76ac.tar.gz +99294bd6c53b1cf3832addbc80ea23b9089bb03463e2a9ebe93ab5feb1b2ff9ee38f158032705429230765bae2df23bb3401ec14902134c80d9dd6e58e188be5 config-pine64-pinenote.aarch64 " diff --git a/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 b/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 index 8078456..8e3fb39 100644 --- a/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 +++ b/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.12.0-rc2 Kernel Configuration +# Linux/arm64 6.12.0 Kernel Configuration # CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 14.2.0) 14.2.0" CONFIG_CC_IS_GCC=y @@ -12,6 +12,7 @@ CONFIG_LD_IS_BFD=y CONFIG_LD_VERSION=24200 CONFIG_LLD_VERSION=0 CONFIG_RUSTC_VERSION=0 +CONFIG_RUSTC_LLVM_VERSION=0 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y @@ -438,6 +439,7 @@ CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y CONFIG_ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG=y CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y +CONFIG_ARCH_DEFAULT_CRASH_DUMP=y CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y CONFIG_TRANS_TABLE=y # CONFIG_XEN is not set @@ -810,6 +812,7 @@ CONFIG_BFQ_GROUP_IOSCHED=y # end of IO Schedulers CONFIG_PADATA=y +CONFIG_ASN1=m CONFIG_ARCH_INLINE_SPIN_TRYLOCK=y CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=y CONFIG_ARCH_INLINE_SPIN_LOCK=y @@ -1005,6 +1008,7 @@ CONFIG_XFRM_USER=m CONFIG_XFRM_ESP=m # CONFIG_NET_KEY is not set # CONFIG_XDP_SOCKETS is not set +CONFIG_NET_HANDSHAKE=y CONFIG_INET=y # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set @@ -1388,7 +1392,7 @@ CONFIG_NET_CLS_CGROUP=m # CONFIG_NET_CLS_ACT is not set CONFIG_NET_SCH_FIFO=y # CONFIG_DCB is not set -# CONFIG_DNS_RESOLVER is not set +CONFIG_DNS_RESOLVER=m # CONFIG_BATMAN_ADV is not set # CONFIG_OPENVSWITCH is not set # CONFIG_VSOCKETS is not set @@ -1427,7 +1431,9 @@ CONFIG_BT=m CONFIG_BT_BREDR=y CONFIG_BT_RFCOMM=y CONFIG_BT_RFCOMM_TTY=y -# CONFIG_BT_BNEP is not set +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y CONFIG_BT_HIDP=m CONFIG_BT_LE=y CONFIG_BT_LE_L2CAP_ECRED=y @@ -3722,6 +3728,7 @@ CONFIG_VIDEO_HANTRO_ROCKCHIP=y # CONFIG_SMS_SDIO_DRV is not set # CONFIG_V4L_TEST_DRIVERS is not set # CONFIG_DVB_TEST_DRIVERS is not set +CONFIG_UVC_COMMON=m CONFIG_VIDEOBUF2_CORE=m CONFIG_VIDEOBUF2_V4L2=m CONFIG_VIDEOBUF2_MEMOPS=m @@ -4522,6 +4529,10 @@ CONFIG_SND=m CONFIG_SND_TIMER=m CONFIG_SND_PCM=m CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_UMP=m +CONFIG_SND_UMP_LEGACY_RAWMIDI=y CONFIG_SND_JACK=y CONFIG_SND_JACK_INPUT_DEV=y # CONFIG_SND_OSSEMUL is not set @@ -4540,6 +4551,7 @@ CONFIG_SND_DEBUG_VERBOSE=y # CONFIG_SND_CTL_DEBUG is not set # CONFIG_SND_JACK_INJECTION_DEBUG is not set # CONFIG_SND_UTIMER is not set +CONFIG_SND_VMASTER=y # CONFIG_SND_SEQUENCER is not set # CONFIG_SND_DRIVERS is not set CONFIG_SND_PCI=y @@ -4616,16 +4628,20 @@ CONFIG_SND_PCI=y CONFIG_SND_HDA_PREALLOC_SIZE=64 # CONFIG_SND_SPI is not set CONFIG_SND_USB=y -# CONFIG_SND_USB_AUDIO is not set -# CONFIG_SND_USB_UA101 is not set -# CONFIG_SND_USB_CAIAQ is not set -# CONFIG_SND_USB_6FIRE is not set -# CONFIG_SND_USB_HIFACE is not set +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_AUDIO_MIDI_V2=y +CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y +CONFIG_SND_USB_UA101=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_USB_6FIRE=m +CONFIG_SND_USB_HIFACE=m # CONFIG_SND_BCD2000 is not set -# CONFIG_SND_USB_POD is not set -# CONFIG_SND_USB_PODHD is not set -# CONFIG_SND_USB_TONEPORT is not set -# CONFIG_SND_USB_VARIAX is not set +CONFIG_SND_USB_LINE6=m +CONFIG_SND_USB_POD=m +CONFIG_SND_USB_PODHD=m +CONFIG_SND_USB_TONEPORT=m +CONFIG_SND_USB_VARIAX=m CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_ADI is not set @@ -5134,7 +5150,60 @@ CONFIG_USB_DWC3_OF_SIMPLE=y # # USB port drivers # -# CONFIG_USB_SERIAL is not set +CONFIG_USB_SERIAL=y +# CONFIG_USB_SERIAL_CONSOLE is not set +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_SIMPLE is not set +# CONFIG_USB_SERIAL_AIRCABLE is not set +# CONFIG_USB_SERIAL_ARK3116 is not set +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_CH341 is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +CONFIG_USB_SERIAL_CP210X=m +# CONFIG_USB_SERIAL_CYPRESS_M8 is not set +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +# CONFIG_USB_SERIAL_VISOR is not set +# CONFIG_USB_SERIAL_IPAQ is not set +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_F81232 is not set +# CONFIG_USB_SERIAL_F8153X is not set +# CONFIG_USB_SERIAL_GARMIN is not set +# CONFIG_USB_SERIAL_IPW is not set +# CONFIG_USB_SERIAL_IUU is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_METRO is not set +# CONFIG_USB_SERIAL_MOS7720 is not set +# CONFIG_USB_SERIAL_MOS7840 is not set +# CONFIG_USB_SERIAL_MXUPORT is not set +# CONFIG_USB_SERIAL_NAVMAN is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_OTI6858 is not set +# CONFIG_USB_SERIAL_QCAUX is not set +# CONFIG_USB_SERIAL_QUALCOMM is not set +# CONFIG_USB_SERIAL_SPCP8X5 is not set +# CONFIG_USB_SERIAL_SAFE is not set +# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set +# CONFIG_USB_SERIAL_SYMBOL is not set +# CONFIG_USB_SERIAL_TI is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_OPTION is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_SERIAL_OPTICON is not set +# CONFIG_USB_SERIAL_XSENS_MT is not set +# CONFIG_USB_SERIAL_WISHBONE is not set +# CONFIG_USB_SERIAL_SSU100 is not set +# CONFIG_USB_SERIAL_QT2 is not set +# CONFIG_USB_SERIAL_UPD78F0730 is not set +# CONFIG_USB_SERIAL_XR is not set +# CONFIG_USB_SERIAL_DEBUG is not set # # USB Miscellaneous drivers @@ -5210,6 +5279,7 @@ CONFIG_USB_U_SERIAL=m CONFIG_USB_U_ETHER=m CONFIG_USB_U_AUDIO=m CONFIG_USB_F_SERIAL=m +CONFIG_USB_F_OBEX=m CONFIG_USB_F_NCM=m CONFIG_USB_F_ECM=m CONFIG_USB_F_EEM=m @@ -5218,11 +5288,14 @@ CONFIG_USB_F_MASS_STORAGE=m CONFIG_USB_F_FS=m CONFIG_USB_F_UAC1=m CONFIG_USB_F_UAC2=m +CONFIG_USB_F_UVC=m +CONFIG_USB_F_MIDI=m +CONFIG_USB_F_MIDI2=m CONFIG_USB_F_HID=m CONFIG_USB_CONFIGFS=m CONFIG_USB_CONFIGFS_SERIAL=y CONFIG_USB_CONFIGFS_ACM=y -# CONFIG_USB_CONFIGFS_OBEX is not set +CONFIG_USB_CONFIGFS_OBEX=y CONFIG_USB_CONFIGFS_NCM=y CONFIG_USB_CONFIGFS_ECM=y CONFIG_USB_CONFIGFS_ECM_SUBSET=y @@ -5230,14 +5303,14 @@ CONFIG_USB_CONFIGFS_ECM_SUBSET=y CONFIG_USB_CONFIGFS_EEM=y CONFIG_USB_CONFIGFS_MASS_STORAGE=y # CONFIG_USB_CONFIGFS_F_LB_SS is not set -# CONFIG_USB_CONFIGFS_F_FS is not set +CONFIG_USB_CONFIGFS_F_FS=y CONFIG_USB_CONFIGFS_F_UAC1=y # CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set CONFIG_USB_CONFIGFS_F_UAC2=y -# CONFIG_USB_CONFIGFS_F_MIDI is not set -# CONFIG_USB_CONFIGFS_F_MIDI2 is not set +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_MIDI2=y CONFIG_USB_CONFIGFS_F_HID=y -# CONFIG_USB_CONFIGFS_F_UVC is not set +CONFIG_USB_CONFIGFS_F_UVC=y # CONFIG_USB_CONFIGFS_F_PRINTER is not set # @@ -6515,7 +6588,6 @@ CONFIG_ARM_GIC_MAX_NR=1 CONFIG_ARM_GIC_V2M=y CONFIG_ARM_GIC_V3=y CONFIG_ARM_GIC_V3_ITS=y -CONFIG_ARM_GIC_V3_ITS_PCI=y CONFIG_IRQ_MSI_LIB=y # CONFIG_AL_FIC is not set # CONFIG_LAN966X_OIC is not set @@ -6727,6 +6799,15 @@ CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # # Caches # +CONFIG_NETFS_SUPPORT=m +CONFIG_NETFS_STATS=y +# CONFIG_NETFS_DEBUG is not set +CONFIG_FSCACHE=y +CONFIG_FSCACHE_STATS=y +CONFIG_CACHEFILES=m +# CONFIG_CACHEFILES_DEBUG is not set +# CONFIG_CACHEFILES_ERROR_INJECTION is not set +# CONFIG_CACHEFILES_ONDEMAND is not set # end of Caches # @@ -6783,7 +6864,54 @@ CONFIG_EFIVAR_FS=y # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set -# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=m +CONFIG_NFS_V2=m +CONFIG_NFS_V3=m +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=m +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=m +CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_FLEXFILE_LAYOUT=m +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set +CONFIG_NFS_FSCACHE=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFS_DISABLE_UDP_SUPPORT=y +CONFIG_NFS_V4_2_READ_PLUS=y +# CONFIG_NFSD is not set +CONFIG_GRACE_PERIOD=m +CONFIG_LOCKD=m +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=m +CONFIG_NFS_COMMON=y +CONFIG_NFS_V4_2_SSC_HELPER=y +CONFIG_SUNRPC=m +CONFIG_SUNRPC_GSS=m +CONFIG_SUNRPC_BACKCHANNEL=y +CONFIG_RPCSEC_GSS_KRB5=m +# CONFIG_SUNRPC_DEBUG is not set +# CONFIG_CEPH_FS is not set +CONFIG_CIFS=m +CONFIG_CIFS_STATS2=y +CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y +CONFIG_CIFS_UPCALL=y +CONFIG_CIFS_XATTR=y +# CONFIG_CIFS_POSIX is not set +CONFIG_CIFS_DEBUG=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set +# CONFIG_CIFS_DFS_UPCALL is not set +# CONFIG_CIFS_SWN_UPCALL is not set +CONFIG_CIFS_FSCACHE=y +# CONFIG_CIFS_COMPRESSION is not set +# CONFIG_SMB_SERVER is not set +CONFIG_SMBFS=m +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y @@ -6835,6 +6963,7 @@ CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_MAC_ROMANIAN is not set # CONFIG_NLS_MAC_TURKISH is not set CONFIG_NLS_UTF8=y +CONFIG_NLS_UCS2_UTILS=m # CONFIG_DLM is not set CONFIG_UNICODE=y # CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set @@ -7226,6 +7355,7 @@ CONFIG_GLOB=y CONFIG_NLATTR=y # CONFIG_IRQ_POLL is not set CONFIG_LIBFDT=y +CONFIG_OID_REGISTRY=m CONFIG_UCS2_STRING=y CONFIG_HAVE_GENERIC_VDSO=y CONFIG_GENERIC_GETTIMEOFDAY=y From d08c1392bc90a7fc2ac391ed88e8a98406ec50ce Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 8 Jan 2025 22:46:54 -0500 Subject: [PATCH 534/738] pmos/device-pine64-pinenote: new aport --- .../50-touchscreen.conf | 11 +++ .../81-libinput-pinenote.rules | 9 +++ .../82-ebc-rockchip.rules | 2 + pmos/device-pine64-pinenote/APKBUILD | 81 +++++++++++++++++++ pmos/device-pine64-pinenote/blacklist.conf | 3 + pmos/device-pine64-pinenote/deviceinfo | 37 +++++++++ .../local-overrides.quirks | 5 ++ pmos/device-pine64-pinenote/modules-initfs | 5 ++ pmos/device-pine64-pinenote/panfrost.conf | 2 + pmos/device-pine64-pinenote/phoc.ini | 6 ++ pmos/device-pine64-pinenote/rockchip_ebc.conf | 1 + 11 files changed, 162 insertions(+) create mode 100644 pmos/device-pine64-pinenote/50-touchscreen.conf create mode 100644 pmos/device-pine64-pinenote/81-libinput-pinenote.rules create mode 100644 pmos/device-pine64-pinenote/82-ebc-rockchip.rules create mode 100644 pmos/device-pine64-pinenote/APKBUILD create mode 100644 pmos/device-pine64-pinenote/blacklist.conf create mode 100644 pmos/device-pine64-pinenote/deviceinfo create mode 100644 pmos/device-pine64-pinenote/local-overrides.quirks create mode 100644 pmos/device-pine64-pinenote/modules-initfs create mode 100644 pmos/device-pine64-pinenote/panfrost.conf create mode 100644 pmos/device-pine64-pinenote/phoc.ini create mode 100644 pmos/device-pine64-pinenote/rockchip_ebc.conf diff --git a/pmos/device-pine64-pinenote/50-touchscreen.conf b/pmos/device-pine64-pinenote/50-touchscreen.conf new file mode 100644 index 0000000..f2d643b --- /dev/null +++ b/pmos/device-pine64-pinenote/50-touchscreen.conf @@ -0,0 +1,11 @@ +Section "InputClass" + Identifier "evdev touchscreen" + MatchProduct "tt21000" + MatchIsTouchscreen "on" + Driver "evdev" +EndSection +Section "InputClass" + Identifier "RotateTouch" + MatchProduct "w9013" + Option "TransformationMatrix" "-1 0 1 0 -1 1 0 0 1" +EndSection diff --git a/pmos/device-pine64-pinenote/81-libinput-pinenote.rules b/pmos/device-pine64-pinenote/81-libinput-pinenote.rules new file mode 100644 index 0000000..700c71c --- /dev/null +++ b/pmos/device-pine64-pinenote/81-libinput-pinenote.rules @@ -0,0 +1,9 @@ +ACTION=="remove", GOTO="libinput_device_group_end" +KERNEL!="event[0-9]*", GOTO="libinput_device_group_end" + +ATTRS{phys}=="?*", ATTRS{name}=="cyttsp5", ENV{LIBINPUT_DEVICE_GROUP}="pinenotetouch" +ATTRS{phys}=="?*", ATTRS{name}=="w9013 2D1F:0095 Stylus", ENV{LIBINPUT_DEVICE_GROUP}="pinenotetouch" + +ATTRS{phys}=="?*", ATTRS{name}=="cyttsp5", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1" + +LABEL="libinput_device_group_end" diff --git a/pmos/device-pine64-pinenote/82-ebc-rockchip.rules b/pmos/device-pine64-pinenote/82-ebc-rockchip.rules new file mode 100644 index 0000000..56c673d --- /dev/null +++ b/pmos/device-pine64-pinenote/82-ebc-rockchip.rules @@ -0,0 +1,2 @@ +SUBSYSTEM=="module", KERNEL=="rockchip_ebc", RUN+="/bin/chgrp video /sys/module/%k/parameters/dclk_select /sys/module/%k/parameters/auto_refresh /sys/module/%k/parameters/bw_dither_invert /sys/module/%k/parameters/bw_threshold /sys/module/%k/parameters/bw_mode /sys/module/%k/parameters/diff_mode /sys/module/%k/parameters/direct_mode /sys/module/%k/parameters/limit_fb_blits /sys/module/%k/parameters/panel_reflection /sys/module/%k/parameters/refresh_threshold /sys/module/%k/parameters/refresh_waveform /sys/module/%k/parameters/skip_reset /sys/module/%k/parameters/split_area_limit /sys/module/%k/parameters/default_waveform", RUN+="/bin/chmod g+w /sys/module/%k/parameters/bw_threshold /sys/module/%k/parameters/bw_mode /sys/module/%k/parameters/default_waveform /sys/module/%k/parameters/diff_mode /sys/module/%k/parameters/direct_mode /sys/module/%k/parameters/limit_fb_blits /sys/module/%k/parameters/panel_reflection /sys/module/%k/parameters/refresh_threshold /sys/module/%k/parameters/refresh_waveform /sys/module/%k/parameters/skip_reset /sys/module/%k/parameters/auto_refresh /sys/module/%k/parameters/bw_dither_invert /sys/module/%k/parameters/split_area_limit" +DRIVER=="rockchip-ebc", RUN+="/bin/chgrp video /sys/%p/power/control", RUN+="/bin/chmod g+w /sys/%p/power/control" diff --git a/pmos/device-pine64-pinenote/APKBUILD b/pmos/device-pine64-pinenote/APKBUILD new file mode 100644 index 0000000..5e0ad0b --- /dev/null +++ b/pmos/device-pine64-pinenote/APKBUILD @@ -0,0 +1,81 @@ +# Maintainer: Petr Hodina +pkgname=device-pine64-pinenote +pkgdesc="Pine64 PineNote" +pkgver=2 +pkgrel=8 +url="https://postmarketos.org" +license="MIT" +arch="aarch64" +options="!check !archcheck" +depends=" + u-boot-pine64-pinenote + linux-pine64-pinenote + postmarketos-base +" +makedepends="devicepkg-dev" +source=" + deviceinfo + modules-initfs + phoc.ini + local-overrides.quirks + 50-touchscreen.conf + 81-libinput-pinenote.rules + 82-ebc-rockchip.rules + blacklist.conf + panfrost.conf + rockchip_ebc.conf +" +subpackages=" + $pkgname-nonfree-firmware:nonfree_firmware + $pkgname-phosh +" + +build() { + devicepkg_build $startdir $pkgname +} + +package() { + devicepkg_package $startdir $pkgname + + install -Dm644 "$srcdir"/local-overrides.quirks \ + -t "$pkgdir"/etc/libinput/ + install -Dm644 "$srcdir"/50-touchscreen.conf \ + -t "$pkgdir"/etc/X11/xorg.conf.d + install -Dm644 "$srcdir"/81-libinput-pinenote.rules \ + -t "$pkgdir"/usr/lib/udev/rules.d + install -Dm644 "$srcdir"/82-ebc-rockchip.rules \ + "$pkgdir"/usr/lib/udev/rules.d + install -Dm644 "$srcdir"/blacklist.conf \ + -t "$pkgdir"/etc/modprobe.d + install -Dm644 "$srcdir"/panfrost.conf \ + "$pkgdir"/etc/modprobe.d + install -Dm644 "$srcdir"/rockchip_ebc.conf \ + "$pkgdir"/etc/modprobe.d +} + +phosh() { + install_if="$pkgname=$pkgver-r$pkgrel phosh" + depends="postmarketos-theme" + + install -Dm644 "$srcdir"/phoc.ini \ + -t "$subpkgdir"/etc/phosh +} + +nonfree_firmware() { + pkgdesc="WiFi, Bluetooth and display firmware" + depends="firmware-pine64-pinenote linux-firmware" + mkdir "$subpkgdir" +} + +sha512sums=" +5829b9b52206a7520066e4bb3c08c2535d98002a3940664a0239344f5e7522fe7b6a9cb0c0074f9846c7e42c40746f2991f6aeeefeba8efa9140c16630b2893e deviceinfo +473accb3497244742dd9fd15f8a02957a13e08fa4d4393fec185ecbb27f1f17726e4b5ece22da861151f9d358d3266206c647def8aa75adb672b6f1f1904c66f modules-initfs +4bf5158fbd53274a7429e825bb66225001f2403a4851e2d6803323b77d9095738ee3e5340ac85baf3e86bb4f47d38af8cbd78d8a5055c59a62f5b06e722e19cb phoc.ini +1123720962c9c8fec3c50302ca6a3dd56e2907dc9eea361a7b8eb4201b042476633d41a0ee4f6ab61d9c60eeccc894f83491ba9fa309a9bce2f1db0b0341d79d local-overrides.quirks +ac433eebbc35a48561837495997aee4e55510b979bc0d8e3bafb761bc1be5b4bdeed2f456369dcbc582688aefd07c63966b0d72b6ffa99e84cfd868e677f02c8 50-touchscreen.conf +2bc51f200baefc37abfaaad368a911244999e906bdca4b728ac233f49a8fb3ae7206ee3c95cdb20d7dceae2a31d25a57f4e1da4fd67057fd64724b8232e42aed 81-libinput-pinenote.rules +19e922eec89dba419798c4e1dc9b39c040db33986d0969a39a8220c642fa081763f15ff2418115d5a748af4054a1be0784927d1712ea79942c2b237ebab47728 82-ebc-rockchip.rules +aed87c0f0ef9ed8ac0b4c96591cf712d8f34c7b3bfc58aaa738c7baf6d095c8cdd2914c47c7f0caccb90cdb3a540abaa077ec8cd30198fcdfced8d964f0c1072 blacklist.conf +6ba6638754e00908243de2f73ed6898dac03638a200dcf7b7cd9684757355ee1eb0ac874af0f971ad2e054c1a8c471867bdaea4d9aaf7eea6d3cf81ac7dd73a2 panfrost.conf +8f01d9662c064cd6dd9eb0fe6ca36b7cf4304d1860f094c2c9c9f22ffdcfc2fde1040b5eeed016cb77a91d5b73382046e51a0b7a58334fcd7486befbf9fed7f0 rockchip_ebc.conf +" diff --git a/pmos/device-pine64-pinenote/blacklist.conf b/pmos/device-pine64-pinenote/blacklist.conf new file mode 100644 index 0000000..58a1553 --- /dev/null +++ b/pmos/device-pine64-pinenote/blacklist.conf @@ -0,0 +1,3 @@ +# rockchip-rga will crash the kernel on unload at the moment +blacklist rockchip-rga +blacklist ws8100_pen diff --git a/pmos/device-pine64-pinenote/deviceinfo b/pmos/device-pine64-pinenote/deviceinfo new file mode 100644 index 0000000..22b6d1c --- /dev/null +++ b/pmos/device-pine64-pinenote/deviceinfo @@ -0,0 +1,37 @@ +# Reference: +# Please use double quotes only. You can source this file in shell +# scripts. + +deviceinfo_format_version="0" +deviceinfo_name="Pine64 PineNote" +deviceinfo_manufacturer="Pine64" +deviceinfo_codename="pine64-pinenote" +deviceinfo_year="2021" +deviceinfo_dtb="rockchip/rk3566-pinenote-v1.2" +deviceinfo_arch="aarch64" +deviceinfo_gpu_accelerated="true" + +# Device related +deviceinfo_chassis="tablet" +deviceinfo_keyboard="false" +deviceinfo_external_storage="false" +deviceinfo_screen_width="1404" +deviceinfo_screen_height="1872" +deviceinfo_getty="ttyS2;1500000" + +# initfs + +# Bootloader related +deviceinfo_flash_method="rkdeveloptool" +deviceinfo_flash_sparse="true" + +deviceinfo_boot_part_start="65536" + +deviceinfo_sd_embed_firmware="u-boot/pine64-pinenote/u-boot-rockchip.bin:1" +deviceinfo_sd_embed_firmware_step_size="32768" + +deviceinfo_flash_rk_partition_kernel="boot" +deviceinfo_flash_rk_partition_rootfs="os1" + +deviceinfo_generate_extlinux_config="true" +deviceinfo_kernel_cmdline="drm.debug=0x0 vt.color=0xf earlycon console=tty0 console=ttyS2,1500000n8 PMOS_FORCE_PARTITION_RESIZE" diff --git a/pmos/device-pine64-pinenote/local-overrides.quirks b/pmos/device-pine64-pinenote/local-overrides.quirks new file mode 100644 index 0000000..030ca8b --- /dev/null +++ b/pmos/device-pine64-pinenote/local-overrides.quirks @@ -0,0 +1,5 @@ +[PineNote] +MatchName=cyttsp5 +AttrPalmPressureThreshold=28 +AttrThumbPressureThreshold=27 +AttrSizeHint=210x157 diff --git a/pmos/device-pine64-pinenote/modules-initfs b/pmos/device-pine64-pinenote/modules-initfs new file mode 100644 index 0000000..1b49e53 --- /dev/null +++ b/pmos/device-pine64-pinenote/modules-initfs @@ -0,0 +1,5 @@ +tps65185-regulator +rockchip_ebc +drm_kms_helper +drm_shmem_helper +pvi_waveform diff --git a/pmos/device-pine64-pinenote/panfrost.conf b/pmos/device-pine64-pinenote/panfrost.conf new file mode 100644 index 0000000..31a1750 --- /dev/null +++ b/pmos/device-pine64-pinenote/panfrost.conf @@ -0,0 +1,2 @@ +softdep panfrost pre: rockchip_ebc +# blacklist rockchip_ebc diff --git a/pmos/device-pine64-pinenote/phoc.ini b/pmos/device-pine64-pinenote/phoc.ini new file mode 100644 index 0000000..90d53d8 --- /dev/null +++ b/pmos/device-pine64-pinenote/phoc.ini @@ -0,0 +1,6 @@ +# /etc/phosh/phoc.ini +# Overwrites values set in /usr/share/phosh/phoc.ini + +# e-ink is an "Unknown" display type for now in mainline +[output:Unknown-1] +scale = 2.0 diff --git a/pmos/device-pine64-pinenote/rockchip_ebc.conf b/pmos/device-pine64-pinenote/rockchip_ebc.conf new file mode 100644 index 0000000..f3904c2 --- /dev/null +++ b/pmos/device-pine64-pinenote/rockchip_ebc.conf @@ -0,0 +1 @@ +options rockchip_ebc direct_mode=0 auto_refresh=1 refresh_threshold=60 split_area_limit=0 panel_reflection=1 prepare_prev_before_a2=0 dclk_select=0 From b03043f08cd4080bee763ec091aad5197b524071 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 11 Jan 2025 11:28:36 -0500 Subject: [PATCH 535/738] pmos/device-pine64-pinenote: fix blacklist --- pmos/device-pine64-pinenote/APKBUILD | 10 +++------- pmos/device-pine64-pinenote/blacklist.conf | 3 --- pmos/device-pine64-pinenote/rockchip_ebc.conf | 4 ++++ 3 files changed, 7 insertions(+), 10 deletions(-) delete mode 100644 pmos/device-pine64-pinenote/blacklist.conf diff --git a/pmos/device-pine64-pinenote/APKBUILD b/pmos/device-pine64-pinenote/APKBUILD index 5e0ad0b..1cf2b3c 100644 --- a/pmos/device-pine64-pinenote/APKBUILD +++ b/pmos/device-pine64-pinenote/APKBUILD @@ -2,7 +2,7 @@ pkgname=device-pine64-pinenote pkgdesc="Pine64 PineNote" pkgver=2 -pkgrel=8 +pkgrel=9 url="https://postmarketos.org" license="MIT" arch="aarch64" @@ -21,7 +21,6 @@ source=" 50-touchscreen.conf 81-libinput-pinenote.rules 82-ebc-rockchip.rules - blacklist.conf panfrost.conf rockchip_ebc.conf " @@ -45,10 +44,8 @@ package() { -t "$pkgdir"/usr/lib/udev/rules.d install -Dm644 "$srcdir"/82-ebc-rockchip.rules \ "$pkgdir"/usr/lib/udev/rules.d - install -Dm644 "$srcdir"/blacklist.conf \ - -t "$pkgdir"/etc/modprobe.d install -Dm644 "$srcdir"/panfrost.conf \ - "$pkgdir"/etc/modprobe.d + -t "$pkgdir"/etc/modprobe.d install -Dm644 "$srcdir"/rockchip_ebc.conf \ "$pkgdir"/etc/modprobe.d } @@ -75,7 +72,6 @@ sha512sums=" ac433eebbc35a48561837495997aee4e55510b979bc0d8e3bafb761bc1be5b4bdeed2f456369dcbc582688aefd07c63966b0d72b6ffa99e84cfd868e677f02c8 50-touchscreen.conf 2bc51f200baefc37abfaaad368a911244999e906bdca4b728ac233f49a8fb3ae7206ee3c95cdb20d7dceae2a31d25a57f4e1da4fd67057fd64724b8232e42aed 81-libinput-pinenote.rules 19e922eec89dba419798c4e1dc9b39c040db33986d0969a39a8220c642fa081763f15ff2418115d5a748af4054a1be0784927d1712ea79942c2b237ebab47728 82-ebc-rockchip.rules -aed87c0f0ef9ed8ac0b4c96591cf712d8f34c7b3bfc58aaa738c7baf6d095c8cdd2914c47c7f0caccb90cdb3a540abaa077ec8cd30198fcdfced8d964f0c1072 blacklist.conf 6ba6638754e00908243de2f73ed6898dac03638a200dcf7b7cd9684757355ee1eb0ac874af0f971ad2e054c1a8c471867bdaea4d9aaf7eea6d3cf81ac7dd73a2 panfrost.conf -8f01d9662c064cd6dd9eb0fe6ca36b7cf4304d1860f094c2c9c9f22ffdcfc2fde1040b5eeed016cb77a91d5b73382046e51a0b7a58334fcd7486befbf9fed7f0 rockchip_ebc.conf +b52d2e7f0c62d7c313b6db9aeb706cdb2596b6aa637aeddb862abf1e256103377fb6267e38cd4285e25d32112acf8d03bbf32ecff7be3dfbb9176209ea7ae283 rockchip_ebc.conf " diff --git a/pmos/device-pine64-pinenote/blacklist.conf b/pmos/device-pine64-pinenote/blacklist.conf deleted file mode 100644 index 58a1553..0000000 --- a/pmos/device-pine64-pinenote/blacklist.conf +++ /dev/null @@ -1,3 +0,0 @@ -# rockchip-rga will crash the kernel on unload at the moment -blacklist rockchip-rga -blacklist ws8100_pen diff --git a/pmos/device-pine64-pinenote/rockchip_ebc.conf b/pmos/device-pine64-pinenote/rockchip_ebc.conf index f3904c2..e457ac9 100644 --- a/pmos/device-pine64-pinenote/rockchip_ebc.conf +++ b/pmos/device-pine64-pinenote/rockchip_ebc.conf @@ -1 +1,5 @@ +# rockchip-rga will crash the kernel on unload at the moment +blacklist rockchip-rga +blacklist ws8100_pen + options rockchip_ebc direct_mode=0 auto_refresh=1 refresh_threshold=60 split_area_limit=0 panel_reflection=1 prepare_prev_before_a2=0 dclk_select=0 From 6b56f7cb5104b04d6b789df7bf009ba4eee39d97 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 14 Feb 2025 19:45:05 -0500 Subject: [PATCH 536/738] user/openterface-qt: new aport --- .../51-openterface-permissions.rules | 1 + user/openterface-qt/APKBUILD | 42 +++++++++++++++++++ .../openterface-qt.post-install | 3 ++ user/openterface-qt/openterfaceQT.desktop | 8 ++++ 4 files changed, 54 insertions(+) create mode 100644 user/openterface-qt/51-openterface-permissions.rules create mode 100644 user/openterface-qt/APKBUILD create mode 100755 user/openterface-qt/openterface-qt.post-install create mode 100644 user/openterface-qt/openterfaceQT.desktop diff --git a/user/openterface-qt/51-openterface-permissions.rules b/user/openterface-qt/51-openterface-permissions.rules new file mode 100644 index 0000000..e8f2971 --- /dev/null +++ b/user/openterface-qt/51-openterface-permissions.rules @@ -0,0 +1 @@ +KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="plugdev" diff --git a/user/openterface-qt/APKBUILD b/user/openterface-qt/APKBUILD new file mode 100644 index 0000000..b0bb703 --- /dev/null +++ b/user/openterface-qt/APKBUILD @@ -0,0 +1,42 @@ +# Maintainer: Antoine Martin (ayakael) +pkgname=openterface-qt +pkgver=0.1.0 +pkgrel=0 +pkgdesc="Openterface Mini-KVM Host Application" +arch='all' +url="https://openterface.com/" +license='AGPL-3.0-only' +depends='qt6-qtmultimedia-ffmpeg hicolor-icon-theme' +makedepends='qt6-qtbase-dev qt6-qtmultimedia-dev qt6-qtserialport-dev qt6-qtsvg-dev qt6-qtmultimedia-dev libusb-dev' +install="$pkgname.post-install" +builddir="$srcdir"/Openterface_QT-$pkgver +source=" + $pkgname-$pkgver.tar.gz::https://github.com/TechxArtisanStudio/Openterface_QT/archive/v$pkgver.tar.gz + openterfaceQT.desktop + 51-openterface-permissions.rules + " + +prepare() { + default_prepare + mkdir build && cd build + qmake6 .. +} + +build() { + cd build + make +} + +package() { + install -Dm755 "$builddir"/build/openterfaceQT "$pkgdir"/usr/bin/openterfaceQT + install -Dm644 "$srcdir"/51-openterface-permissions.rules "$pkgdir"/etc/udev/rules.d/51-openterface-permissions.rules + install -Dm644 "$srcdir"/openterfaceQT.desktop "$pkgdir"/usr/share/applications/openterfaceQT.desktop + install -Dm644 "$builddir"/images/icon_32.png "$pkgdir"/usr/share/icons/hicolor/32x32/apps/openterfaceQT.png + install -Dm644 "$builddir"/images/icon_64.png "$pkgdir"/usr/share/icons/hicolor/64x64/apps/openterfaceQT.png + install -Dm644 "$builddir"/images/icon_128.png "$pkgdir"/usr/share/icons/hicolor/128x128/apps/openterfaceQT.png +} +sha512sums=" +2aff3b5b92d5d12d1d748726e2565f5d410611b242b4fac04289b6b057eb1d39b7c2c9bcf613b3b9636a74f17c3fb69ff52177ee889f4d34de7b5b5388e75964 openterface-qt-0.1.0.tar.gz +e39cfa04cbcb59e8ba54110a28eff41854f73fa7c4baeeed5433907c79781946f12bd3a731763caa1d591e664eab0650bdbd2a844954baa12bb96a76a17c6e4f openterfaceQT.desktop +aed752c03acfb5e7d3dc206fd342c1eed6b56353801e54b925e5d3a3e673bf604e0e94424e5e8fddb31c21d3acfbda351f1ea6e8ddc8057f7354ec86a4c74a5e 51-openterface-permissions.rules +" diff --git a/user/openterface-qt/openterface-qt.post-install b/user/openterface-qt/openterface-qt.post-install new file mode 100755 index 0000000..09d267b --- /dev/null +++ b/user/openterface-qt/openterface-qt.post-install @@ -0,0 +1,3 @@ +#!/bin/bash +echo "Setup the dialout permission for Serial port." +echo "Run: sudo usermod -a -G video,plugdev \$USER" diff --git a/user/openterface-qt/openterfaceQT.desktop b/user/openterface-qt/openterfaceQT.desktop new file mode 100644 index 0000000..907976c --- /dev/null +++ b/user/openterface-qt/openterfaceQT.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=OpenterfaceQT +Exec=/usr/bin/openterfaceQT +Icon=openterfaceQT +Comment=OpenterfaceQT Application +Categories=Utility; From 928ff35f6b4978121e1a3aac2f5f96c90712b5fb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 18 Feb 2025 12:59:44 -0500 Subject: [PATCH 537/738] forgejo: use ISSUE_TOKEN instead of FORGEJO_TOKEN --- .forgejo/bin/create_issue.sh | 16 ++++++++-------- .forgejo/workflows/check-backports.yml | 2 +- .forgejo/workflows/check-community.yml | 2 +- .forgejo/workflows/check-testing.yml | 2 +- .forgejo/workflows/check-user.yml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index d162758..6369371 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -1,7 +1,7 @@ #!/bin/bash # expects: -# env variable FORGEJO_TOKEN +# env variable ISSUE_TOKEN # file out_of_date IFS=' @@ -20,7 +20,7 @@ does_it_exist() { result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" + -H "Authorization: token $ISSUE_TOKEN" )" if [ "$result" == "[]" ]; then @@ -40,7 +40,7 @@ is_it_old() { result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" + -H "authorization: token $ISSUE_TOKEN" )" result_title="$(echo $result | jq -r '.[].title' )" @@ -64,7 +64,7 @@ update_title() { result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" \ + -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"$repo/$name: upgrade to $upstream_version\" @@ -83,7 +83,7 @@ create_issue() { result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" \ + -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"$repo/$name: upgrade to $upstream_version\", @@ -131,7 +131,7 @@ if [ -f not_in_anitya ]; then result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" + -H "authorization: token $ISSUE_TOKEN" )" if [ "$result" == "[]" ]; then @@ -139,7 +139,7 @@ if [ -f not_in_anitya ]; then result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" \ + -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"title\": \"Add missing $repo packages to anitya\", @@ -155,7 +155,7 @@ if [ -f not_in_anitya ]; then result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \ -H 'accept: application/json' \ - -H "authorization: Basic $FORGEJO_TOKEN" \ + -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ \"body\": \"- [ ] $(sed '{:q;N;s/\n/\\n- [ ] /g;t q}' not_in_anitya)\" diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml index b9f76a6..a25ad4e 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -12,7 +12,7 @@ jobs: image: alpine:latest env: downstream: https://ayakael.net/api/packages/forge/alpine/v3.21/backports - FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 1 ALL_PACKAGES: true steps: diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 9385687..b083219 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -12,7 +12,7 @@ jobs: image: alpine:latest env: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/community - FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 4 steps: - name: Environment setup diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml index 2b8f7ed..1c3abe9 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -12,7 +12,7 @@ jobs: image: alpine:latest env: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing - FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 4 steps: - name: Environment setup diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml index 09b0f3c..502933e 100644 --- a/.forgejo/workflows/check-user.yml +++ b/.forgejo/workflows/check-user.yml @@ -12,7 +12,7 @@ jobs: image: alpine:latest env: downstream: https://ayakael.net/api/packages/forge/alpine/edge/user - FORGEJO_TOKEN: ${{ secrets.forgejo_token }} + ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 4 steps: - name: Environment setup From 3e86f4927c9c18d992c3a773116882a6e3a83850 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 8 May 2025 21:14:23 -0400 Subject: [PATCH 538/738] ci: upgrade container as first action --- .forgejo/workflows/build-aarch64.yaml | 1 + .forgejo/workflows/build-x86_64.yaml | 1 + .forgejo/workflows/lint.yaml | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index 59f90c9..0b6d800 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -15,6 +15,7 @@ jobs: steps: - name: Environment setup run: | + doas apk upgrade -a doas apk add nodejs git patch curl cd /etc/apk/keys doas curl -JO https://ayakael.net/api/packages/forge/alpine/key diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index 298a213..90c516e 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -15,6 +15,7 @@ jobs: steps: - name: Environment setup run: | + doas apk upgrade -a doas apk add nodejs git patch curl cd /etc/apk/keys doas curl -JO https://ayakael.net/api/packages/forge/alpine/key diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml index 3614deb..3b8241f 100644 --- a/.forgejo/workflows/lint.yaml +++ b/.forgejo/workflows/lint.yaml @@ -14,7 +14,9 @@ jobs: CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} steps: - - run: doas apk add nodejs git + - run: | + doas apk upgrade -a + doas apk add nodejs git - uses: actions/checkout@v4 with: fetch-depth: 500 From a7d9756c6404408afccc01946ed4fce779571978 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 8 May 2025 21:17:14 -0400 Subject: [PATCH 539/738] ci: fix lint --- .forgejo/workflows/lint.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml index 3b8241f..743cefc 100644 --- a/.forgejo/workflows/lint.yaml +++ b/.forgejo/workflows/lint.yaml @@ -15,8 +15,8 @@ jobs: CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} steps: - run: | - doas apk upgrade -a - doas apk add nodejs git + doas apk upgrade -a + doas apk add nodejs git - uses: actions/checkout@v4 with: fetch-depth: 500 From 99107ff63a125a70045fc26c8bcc3230877f586d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 11 May 2025 10:59:10 -0400 Subject: [PATCH 540/738] ci: update create_issue to support forgejo 11 --- .forgejo/bin/create_issue.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 6369371..995e519 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -15,10 +15,10 @@ does_it_exist() { repo=$4 query="$repo/$name: upgrade to $upstream_version" - query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" + query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )%22" result="$(curl --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ -H 'accept: application/json' \ -H "Authorization: token $ISSUE_TOKEN" )" @@ -35,10 +35,10 @@ is_it_old() { repo=$4 query="$repo/$name: upgrade to" - query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )" + query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )%22" result="$(curl --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" )" @@ -126,10 +126,10 @@ fi if [ -f not_in_anitya ]; then query="Add missing $repo packages to anitya" - query="$(echo $query | sed 's| |%20|g')" + query="%22$(echo $query | sed 's| |%20|g')%22" result="$(curl --silent -X 'GET' \ - "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" )" From ab7d3dce4ab64569f1bc6ff61f30b0bb7aa40894 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 11 May 2025 17:16:58 -0400 Subject: [PATCH 541/738] ci: add special exception for electron --- .forgejo/bin/check_ver.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index d2720f3..c230a94 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -26,6 +26,16 @@ for pkg in $owned_by_you; do case $pkg in freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; dotnet9-sdk|dotnet9-stage0) upstream_version=${upstream_version/-*};; + electron) + upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=electron&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) + latest_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=electron&distribution=Alpine" | jq -r '.items.[].stable_version' ) + # append version number to signal that this is not latest major version + if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then + echo "$pkg${latest_version/.*} major version available" + echo "$pkg${latest_version/.*} $downstream_version $latest_version $repo" >> out_of_date + pkg=electron${upstream_version/.*} + fi + ;; esac if [ -z "$upstream_version" ]; then From dd132b86fac01b69348c172f4acffc0aa5b9e9aa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 15 May 2025 14:55:25 -0400 Subject: [PATCH 542/738] ci: abstract electron special code --- .forgejo/bin/check_ver.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index c230a94..015965f 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -27,13 +27,13 @@ for pkg in $owned_by_you; do freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; dotnet9-sdk|dotnet9-stage0) upstream_version=${upstream_version/-*};; electron) - upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=electron&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) - latest_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=electron&distribution=Alpine" | jq -r '.items.[].stable_version' ) + upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) + latest_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) # append version number to signal that this is not latest major version if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then echo "$pkg${latest_version/.*} major version available" echo "$pkg${latest_version/.*} $downstream_version $latest_version $repo" >> out_of_date - pkg=electron${upstream_version/.*} + pkg=$pkg${upstream_version/.*} fi ;; esac From eb38d0963f18711e496c43674e9aa127d12d524f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 10:05:57 -0400 Subject: [PATCH 543/738] ci: set specific label for user packages --- .forgejo/workflows/check-user.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml index 502933e..ba6ed80 100644 --- a/.forgejo/workflows/check-user.yml +++ b/.forgejo/workflows/check-user.yml @@ -13,7 +13,7 @@ jobs: env: downstream: https://ayakael.net/api/packages/forge/alpine/edge/user ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 4 + LABEL_NUMBER: 12 steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 0bb36c34c9df4bf7a445fff3993fca1f6eca5749 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 11:50:42 -0400 Subject: [PATCH 544/738] ci: add special case for dotnet*sdk and dotnet*stage0 --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 015965f..acf9910 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -25,7 +25,7 @@ for pkg in $owned_by_you; do # special cases case $pkg in freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; - dotnet9-sdk|dotnet9-stage0) upstream_version=${upstream_version/-*};; + dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);; electron) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) latest_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) From 6306486b826b57e7e836b7098535c15f1afed4cc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 12:14:00 -0400 Subject: [PATCH 545/738] ci: add special case for arm-trusted-firmware --- .forgejo/bin/check_ver.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index acf9910..36da7ef 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -36,6 +36,7 @@ for pkg in $owned_by_you; do pkg=$pkg${upstream_version/.*} fi ;; + arm-trusted-firmware) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n1);; esac if [ -z "$upstream_version" ]; then From a7e99375b3d7b9cb4511daf7674141e34cb62c74 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 12:14:35 -0400 Subject: [PATCH 546/738] ci: add check for main repo --- .forgejo/workflows/check-main.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .forgejo/workflows/check-main.yml diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml new file mode 100644 index 0000000..c9561f0 --- /dev/null +++ b/.forgejo/workflows/check-main.yml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + + schedule: + - cron: '0 5 * * *' + +jobs: + check-main: + name: Check main repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/edge/main + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 4 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From edf630c6dc84475d090f70c074f27f0716a42b57 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:02:39 -0400 Subject: [PATCH 547/738] ci: add ability to track minor and/or fix releases only --- .forgejo/bin/check_ver.sh | 63 +++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 36da7ef..bc6fc24 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -1,10 +1,36 @@ #!/bin/bash # expects the following env variables: -# downstream: downstream repo +# downstream: downstream repo +# +# env variables to track minor or bug-fix updates +# minor_only: array of packages that should only track minor releases (seperate by space) +# default: none +# all packages: all +# fix_only: array of packages that should only track bug fix releases (seperated by space) +# default: none +# all packages: all +# +# If either minor_only or fix_only is set, only packages with semantic versioning schemes +# will be tracked. +# +# If a package is both minor_only and fix_only, the minor releases will be tracked +# +# optional env variables +# ALL_PACKAGES: when true, ignore is package is owned by me +# repo=${downstream/*\/} +is_semantic() { + local downstream_version_dot=${1//[^.]} + if [[ ${#downstream_version_dot} -eq 2 ]]; then + return 0 + fi + return 1 +} + +echo "Checking $downstream for out of date packages" curl --silent $downstream/x86_64/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX if [ "$ALL_PACKAGES" == "true" ]; then @@ -18,17 +44,16 @@ fi rm -f out_of_date not_in_anitya for pkg in $owned_by_you; do - upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version') downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) downstream_version=${downstream_version/-*} - # special cases + # special cases where package is not semantic case $pkg in - freetube) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; - dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);; + freetube) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; + dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);; electron) - upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) - latest_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) + latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) # append version number to signal that this is not latest major version if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then echo "$pkg${latest_version/.*} major version available" @@ -36,12 +61,32 @@ for pkg in $owned_by_you; do pkg=$pkg${upstream_version/.*} fi ;; - arm-trusted-firmware) upstream_version=$(curl --fail -X GET -sS -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n1);; + arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n1);; + *) + # continues when package version scheme is not semantic, but minor_only or fix_only is set + if [ -n ${minor_only+x} ] || [ -n ${fix_only+x} ]; then + if ! is_semantic $downstream_version; then + echo "$pkg is not semantic, and fix_only or minor_only is set" + continue + fi + fi + + if [ "${minor_only}" == "all" ] || [[ "${minor_only}" == *$pkg* ]]; then + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*.*}.*\").string" | head -n1) + elif [ "${fix_only}" == "all" ] || [[ "${fix_only}" == *$pkg* ]]; then + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) + else + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) + fi + ;; esac if [ -z "$upstream_version" ]; then echo "$pkg not in anitya" - echo "$pkg" >> not_in_anitya + # do not track not_in_anitya if either minor_only or fix_only is set + if [ -z ${minor_only+x} ] && [ -z ${fix_only+x} ]; then + echo "$pkg" >> not_in_anitya + fi elif [ "$downstream_version" != "$(printf '%s\n' $upstream_version $downstream_version | sort -V | head -n 1)" ]; then echo "$pkg higher downstream" continue From 4e133161c75719454468f735542ce899ada47b7a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:03:12 -0400 Subject: [PATCH 548/738] ci: add in brackets release when not edge --- .forgejo/bin/check_ver.sh | 6 ++++-- .forgejo/bin/create_issue.sh | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index bc6fc24..58f6194 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -21,6 +21,8 @@ # repo=${downstream/*\/} +release=${downstream/\/$repo/} +release=${release/*\/} is_semantic() { local downstream_version_dot=${1//[^.]} @@ -91,7 +93,7 @@ for pkg in $owned_by_you; do echo "$pkg higher downstream" continue elif [ "$upstream_version" != "$downstream_version" ]; then - echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version" - echo "$pkg $downstream_version $upstream_version $repo" >> out_of_date + echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version in $release" + echo "$pkg $downstream_version $upstream_version $repo $release" >> out_of_date fi done diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 995e519..17ba339 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -13,8 +13,10 @@ does_it_exist() { downstream_version=$2 upstream_version=$3 repo=$4 + release=$5 query="$repo/$name: upgrade to $upstream_version" + if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )%22" result="$(curl --silent -X 'GET' \ @@ -33,8 +35,10 @@ is_it_old() { downstream_version=$2 upstream_version=$3 repo=$4 + release=$5 query="$repo/$name: upgrade to" + if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )%22" result="$(curl --silent -X 'GET' \ @@ -59,7 +63,8 @@ update_title() { downstream_version=$2 upstream_version=$3 repo=$4 - id=$5 + release=$5 + id=$6 result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ @@ -79,6 +84,7 @@ create_issue() { downstream_version=$2 upstream_version=$3 repo=$4 + release=$5 result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ @@ -105,22 +111,23 @@ if [ -f out_of_date ]; then downstream_version="$(echo $pkg | awk '{print $2}')" upstream_version="$(echo $pkg | awk '{print $3}')" repo="$(echo $pkg | awk '{print $4}')" + release="$(echo $pkg | awk '{print $5}')" - if does_it_exist $name $downstream_version $upstream_version $repo; then + if does_it_exist $name $downstream_version $upstream_version $repo $release; then echo "Issue for $repo/$name already exists" continue fi - id=$(is_it_old $name $downstream_version $upstream_version $repo) + id=$(is_it_old $name $downstream_version $upstream_version $repo $release) if [ "$id" != "0" ] && [ -n "$id" ]; then echo "Issue for $repo/$name needs updating" - update_title $name $downstream_version $upstream_version $repo $id + update_title $name $downstream_version $upstream_version $repo $release $id continue fi echo "Creating issue for $repo/$name" - create_issue $name $downstream_version $upstream_version $repo + create_issue $name $downstream_version $upstream_version $repo $release done fi From 2c9d1bc657ca820746ef2967e54e2a7ffc3b19b6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:04:25 -0400 Subject: [PATCH 549/738] ci: check v3.21 release of community --- .forgejo/workflows/check-community.yml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index b083219..ff30c6a 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -5,8 +5,8 @@ on: - cron: '0 5 * * *' jobs: - check-community: - name: Check community repo + check-community-edge: + name: Check community(edge) repo runs-on: x86_64 container: image: alpine:latest @@ -25,3 +25,24 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-community-v3.21: + name: Check community(v3.21) repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/community + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From d20ee3e612949aa1d1609946f83b7f56288c376d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:09:29 -0400 Subject: [PATCH 550/738] ci: fix semantic context checker --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 58f6194..c1c93c5 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -66,7 +66,7 @@ for pkg in $owned_by_you; do arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n1);; *) # continues when package version scheme is not semantic, but minor_only or fix_only is set - if [ -n ${minor_only+x} ] || [ -n ${fix_only+x} ]; then + if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then if ! is_semantic $downstream_version; then echo "$pkg is not semantic, and fix_only or minor_only is set" continue From c7fa4babd2dd226d7a7f85fd6f9bbd60aaef9443 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:13:22 -0400 Subject: [PATCH 551/738] ci: fix bracket chracters in query when creating issue --- .forgejo/bin/create_issue.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 17ba339..6ea3ded 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -17,7 +17,7 @@ does_it_exist() { query="$repo/$name: upgrade to $upstream_version" if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi - query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )%22" + query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|[|%5B|' | sed 's|]|%5D|')%22" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ @@ -39,7 +39,7 @@ is_it_old() { query="$repo/$name: upgrade to" if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi - query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' )%22" + query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|[|%5B|' | sed 's|]|%5D|')%22" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ From 3c3b7fe1ae7c950c8e5d127d84f893c8935ed3b0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:16:01 -0400 Subject: [PATCH 552/738] ci: fix unterminated s in sed command --- .forgejo/bin/create_issue.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 6ea3ded..ee73250 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -17,7 +17,7 @@ does_it_exist() { query="$repo/$name: upgrade to $upstream_version" if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi - query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|[|%5B|' | sed 's|]|%5D|')%22" + query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')%22" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ @@ -39,7 +39,7 @@ is_it_old() { query="$repo/$name: upgrade to" if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi - query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|[|%5B|' | sed 's|]|%5D|')%22" + query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')%22" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ From 61153cb9899109ee8b6ef50e8f659e698c5214bc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:21:27 -0400 Subject: [PATCH 553/738] ci: attempt bracket release title --- .forgejo/bin/create_issue.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index ee73250..0ae2580 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -16,7 +16,7 @@ does_it_exist() { release=$5 query="$repo/$name: upgrade to $upstream_version" - if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi + if [ "$release" != "edge" ]; then query="[$release] $query"; fi query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')%22" result="$(curl --silent -X 'GET' \ @@ -38,7 +38,7 @@ is_it_old() { release=$5 query="$repo/$name: upgrade to" - if [[ "$release" != "edge" ]]; then query="[$release] $query"; fi + if [ "$release" != "edge" ]; then query="[$release] $query"; fi query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')%22" result="$(curl --silent -X 'GET' \ From d7538d14bb8ecd6f88645cdc886f117c7c46876e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:23:15 -0400 Subject: [PATCH 554/738] ci: track community v3.22 instead of v3.21 --- .forgejo/workflows/check-community.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index ff30c6a..1730960 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -25,13 +25,13 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-v3.21: - name: Check community(v3.21) repo + check-community-v3.22: + name: Check community(v3.22) repo runs-on: x86_64 container: image: alpine:latest env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/community + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 fix_only: all From 63dd181c593219d9becde96fb2d85bb7ebdd8947 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:25:13 -0400 Subject: [PATCH 555/738] ci: introduce release in title when not edge --- .forgejo/bin/create_issue.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 0ae2580..c8e5daa 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -86,13 +86,16 @@ create_issue() { repo=$4 release=$5 + title="$repo/$name: upgrade to $upstream_version" + if [ "$release" != "edge" ]; then title="[$release] $title"; fi + result=$(curl --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ - \"title\": \"$repo/$name: upgrade to $upstream_version\", + \"title\": \"$title\", \"labels\": [ $LABEL_NUMBER ] From 2d19224dcb36ff6e716333eacccf503458ae4c80 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:26:55 -0400 Subject: [PATCH 556/738] ci: drop v from $release --- .forgejo/bin/check_ver.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index c1c93c5..6f160f4 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -23,6 +23,7 @@ repo=${downstream/*\/} release=${downstream/\/$repo/} release=${release/*\/} +release=${release/v} is_semantic() { local downstream_version_dot=${1//[^.]} From 474e2ea62d5c54fcf51d6e20984bfdaace753f1b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:44:23 -0400 Subject: [PATCH 557/738] ci: add ability to skip packages --- .forgejo/bin/check_ver.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 6f160f4..e931cb6 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -18,6 +18,7 @@ # # optional env variables # ALL_PACKAGES: when true, ignore is package is owned by me +# skip_package: array of packages to skip # repo=${downstream/*\/} @@ -50,6 +51,12 @@ for pkg in $owned_by_you; do downstream_version=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) downstream_version=${downstream_version/-*} + # skip package if in $skip_package array + if [[ "$skip_package" == *$pkg* ]]; then + echo "$pkg skipped" + continue + fi + # special cases where package is not semantic case $pkg in freetube) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; From 7caaeeee04473c901cafea2109793064b0bff574 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:45:10 -0400 Subject: [PATCH 558/738] ci: skip dotnet9-stage0 and dotnet8-stage0 in v3.22 community check --- .forgejo/workflows/check-community.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 1730960..7b8b5a3 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -35,6 +35,7 @@ jobs: ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 fix_only: all + skip_package: dotnet9-stage0 dotnet8-stage0 steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 8763a65fdb54407370c18f1e7e01926c91f816b0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:50:49 -0400 Subject: [PATCH 559/738] ci: check main v3.22 --- .forgejo/workflows/check-main.yml | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml index c9561f0..5c3a1eb 100644 --- a/.forgejo/workflows/check-main.yml +++ b/.forgejo/workflows/check-main.yml @@ -5,8 +5,8 @@ on: - cron: '0 5 * * *' jobs: - check-main: - name: Check main repo + check-main-edge: + name: Check main(edge) repo runs-on: x86_64 container: image: alpine:latest @@ -25,3 +25,24 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-main-3.22: + name: Check main(3.22) repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/main + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 4 + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From 1351bcc0fd9235301950a97faaacdbee67660689 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:53:05 -0400 Subject: [PATCH 560/738] ci: also check last 2 years of alpine releases on main --- .forgejo/workflows/check-main.yml | 65 ++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml index 5c3a1eb..58e8001 100644 --- a/.forgejo/workflows/check-main.yml +++ b/.forgejo/workflows/check-main.yml @@ -33,7 +33,70 @@ jobs: env: downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/main ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 4 + LABEL_NUMBER: 13 + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-main-3.21: + name: Check main(3.21) repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/main + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-main-3.20: + name: Check main(3.20) repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.20/main + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-main-3.19: + name: Check main(3.19) repo + runs-on: x86_64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.19/main + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 fix_only: all steps: - name: Environment setup From e861045fe30550f054f6601d512b1f38b5489dd5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:54:28 -0400 Subject: [PATCH 561/738] ci: check community workflow title change --- .forgejo/workflows/check-community.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 7b8b5a3..8c5f3c5 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -25,13 +25,13 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-v3.22: - name: Check community(v3.22) repo + check-community-3.22: + name: Check community(3.22) repo runs-on: x86_64 container: image: alpine:latest env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community + downstream: https://dl-cdn.alpinelinux.org/alpine/3.22/community ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 fix_only: all From c7b89349dd8fe3742eec382d464a02252ed2fbc1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 17:59:21 -0400 Subject: [PATCH 562/738] backports/*: sync with v3.21 --- backports/calibre/APKBUILD | 5 +- backports/caprine/APKBUILD | 12 +- backports/coin/APKBUILD | 10 +- backports/dex/APKBUILD | 6 +- backports/electron/APKBUILD | 59 +++-- backports/electron/README.md | 59 +++++ backports/electron/compiler.patch | 50 +++- .../electron_system-zlib-headers.patch | 18 +- .../electron/electron_unbundle-node.patch | 179 +++++++++----- backports/electron/fix-opus.patch | 7 +- backports/electron/gperf-3.2-fix.patch | 29 +++ backports/electron/pipewire-1.4.patch | 23 ++ backports/element-desktop/APKBUILD | 171 +++++++++++++ .../element-desktop/add-alpine-targets.patch | 52 ++++ backports/element-desktop/element-desktop | 3 + .../element-desktop/no-source-maps.patch.web | 18 ++ .../element-desktop/tasje-no-fuses.patch | 52 ++++ backports/element-desktop/tasje-one-hak.patch | 20 ++ .../use-system-fonts.patch.web | 79 ++++++ .../element-desktop/use-system-headers.patch | 15 ++ backports/freecad/APKBUILD | 80 +++++++ backports/freecad/no-execinfo.patch | 54 +++++ backports/freetube/APKBUILD | 6 +- backports/gn/APKBUILD | 59 +++++ backports/libmedc/APKBUILD | 43 ++++ backports/libmedc/cmake-config-dir.patch | 11 + backports/libmedc/hdf5.patch | 94 ++++++++ backports/nb/APKBUILD | 4 +- .../pnpm/0001-no-check-for-updates.patch | 14 ++ backports/pnpm/0002-no-self-update.patch | 14 ++ backports/pnpm/APKBUILD | 73 ++++++ backports/py3-apsw/APKBUILD | 4 +- backports/py3-colored/APKBUILD | 10 +- backports/py3-levenshtein/APKBUILD | 11 +- backports/py3-limits/APKBUILD | 15 +- .../py3-limits/our-std-is-good-enough.patch | 13 +- .../tests-drop-etcd3-and-k-argument.patch | 24 ++ backports/py3-pathvalidate/APKBUILD | 4 +- backports/rapidfuzz/APKBUILD | 6 +- backports/signal-desktop/APKBUILD | 168 +++++++------ backports/signal-desktop/README.md | 61 +++++ .../ringrtc-webrtc-renamed.patch | 34 +-- backports/signal-desktop/signal-desktop.sh | 6 + .../signal-disable-updates.patch | 4 +- ...signal-do-not-package-sqlcipher-deps.patch | 12 + .../signal-rollback-locale-changes.patch | 225 ++++++++++++++++++ .../signal-show-window-please.patch | 6 +- .../signal-desktop/signal-update-links.patch | 8 +- .../signal-use-system-sqlcipher.patch | 40 +--- .../signal-desktop/webrtc-compiler.patch | 72 +++++- backports/signal-desktop/webrtc-gcc13.patch | 11 + .../signal-desktop/webrtc-pipewire-1.4.patch | 23 ++ .../webrtc-rollback-3rdparty-build-gn.patch | 31 +++ .../signal-desktop/webrtc-rollback-red.patch | 136 +++++++++++ backports/soqt/APKBUILD | 13 +- backports/swig3/APKBUILD | 46 ++++ ...de-for-constant-expressions-containi.patch | 191 +++++++++++++++ 57 files changed, 2185 insertions(+), 308 deletions(-) create mode 100644 backports/electron/README.md create mode 100644 backports/electron/gperf-3.2-fix.patch create mode 100644 backports/electron/pipewire-1.4.patch create mode 100644 backports/element-desktop/APKBUILD create mode 100644 backports/element-desktop/add-alpine-targets.patch create mode 100755 backports/element-desktop/element-desktop create mode 100644 backports/element-desktop/no-source-maps.patch.web create mode 100644 backports/element-desktop/tasje-no-fuses.patch create mode 100644 backports/element-desktop/tasje-one-hak.patch create mode 100644 backports/element-desktop/use-system-fonts.patch.web create mode 100644 backports/element-desktop/use-system-headers.patch create mode 100644 backports/freecad/APKBUILD create mode 100644 backports/freecad/no-execinfo.patch create mode 100644 backports/gn/APKBUILD create mode 100644 backports/libmedc/APKBUILD create mode 100644 backports/libmedc/cmake-config-dir.patch create mode 100644 backports/libmedc/hdf5.patch create mode 100644 backports/pnpm/0001-no-check-for-updates.patch create mode 100644 backports/pnpm/0002-no-self-update.patch create mode 100644 backports/pnpm/APKBUILD create mode 100644 backports/py3-limits/tests-drop-etcd3-and-k-argument.patch create mode 100644 backports/signal-desktop/README.md create mode 100755 backports/signal-desktop/signal-desktop.sh create mode 100644 backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch create mode 100644 backports/signal-desktop/signal-rollback-locale-changes.patch create mode 100644 backports/signal-desktop/webrtc-pipewire-1.4.patch create mode 100644 backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch create mode 100644 backports/signal-desktop/webrtc-rollback-red.patch create mode 100644 backports/swig3/APKBUILD create mode 100644 backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD index 64a7a04..3cf2747 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=7.21.0 +pkgver=7.26.0 pkgrel=0 pkgdesc="Ebook management application" # qt6-webengine @@ -41,6 +41,7 @@ depends=" qt6-qtimageformats qt6-qtsvg qt6-qtwebengine + qt6-qtbase-dev udisks2 " makedepends=" @@ -111,6 +112,6 @@ package() { } sha512sums=" -0c2ee610833df83219c0c33b09e1374a8262f1630ccd48e3c4725c92922a3ac5d102ad83fc213457fb9de3efa4f5a2c98ff6dff039828e1661085a1054d7f631 calibre-7.21.0.tar.xz +e477a2dcdd1c52074bd5c0df5d79b2b609d76bf9e1cb5e3d32f79a89d6e0e2798cb980e2cf74e126fb2856273a14b0e2e92b39ffca74461569233c0a87968bfe calibre-7.26.0.tar.xz eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch " diff --git a/backports/caprine/APKBUILD b/backports/caprine/APKBUILD index 9a73d39..41f1806 100644 --- a/backports/caprine/APKBUILD +++ b/backports/caprine/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=caprine -pkgver=2.60.1 +pkgver=2.60.3 pkgrel=2 pkgdesc="Elegant Facebook Messenger desktop app" arch="x86_64 aarch64" # blocked by electron @@ -17,12 +17,10 @@ source=" " build() { - npm install --ignore-scripts - npx --yes patch-package + npm ci --ignore-scripts + npx patch-package npx tsc - rm -r node_modules - npm install --ignore-scripts --production - npx --yes patch-package + npm prune --ignore-scripts --omit=dev } package() { @@ -59,7 +57,7 @@ package() { -or -name "test" -prune -exec rm -r '{}' \; } sha512sums=" -0df7f233c91f5a044dcffde94b976c6ad71e6d355518615c48cd825a249c01d63f455de31ece69193a66ca0fd8157506f9b88088da1bd47fc75e9d3800784ed0 caprine-2.60.1.tar.gz +edf6452294b3c661befd9811c5836da33311171d587cb9a5939ac11a0c1e2a7ebbc4f2a8d81e02c1db1a2d814ac1aa7bbdadca9e21892cc8d7f7e9c23dc2e221 caprine-2.60.3.tar.gz a469e3bea24926119e51642b777ef794c5fa65421107903f967c36d81bbb1adb3d52469ce3a3301b2c890f1aa53ab989ded22a7c6e811fb8cf0a582dbd835e19 caprine.desktop 3ad8994c1a0417e73d622587769e527b4236a32c1a89442ff76413b75b4392d667c9e2908979b453e5926e54db6d94b31625340c5a94e84e91ea77f56feae778 caprine.sh " diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD index 723ea30..e6068c3 100644 --- a/backports/coin/APKBUILD +++ b/backports/coin/APKBUILD @@ -1,15 +1,15 @@ # Contributor: Aiden Grossman -# Maintainer: +# Maintainer: Antoine Martin (ayakael) pkgname=coin -pkgver=4.0.0 -pkgrel=7 +pkgver=4.0.3 +pkgrel=0 pkgdesc="OpenGL OpenInventor compatible graphics library" url="https://github.com/coin3d/coin" license="BSD-3-Clause" arch="all" makedepends="boost-dev cmake glu-dev graphviz samurai" subpackages="$pkgname-dev" -source="https://github.com/coin3d/coin/releases/download/Coin-$pkgver/coin-$pkgver-src.tar.gz +source="https://github.com/coin3d/coin/releases/download/v$pkgver/coin-$pkgver-src.tar.gz TestSuitePatch.patch " builddir="$srcdir/coin" @@ -31,6 +31,6 @@ package() { } sha512sums=" -e036276a243bfe252569cee1b67d38b8633fcf35bdf4e366a92ca67e23799d54d91fe272c23b383c451d330cee284809f28f237857493948149e0da1ebd64fae coin-4.0.0-src.tar.gz +b661bf2124b0de1b46e76a6699b0975abb3aed4dc9019bf32531c535179dc84a90fe4e19def6f6cda7b175470636040d0e58812d532198cf207296d37c539915 coin-4.0.3-src.tar.gz aab464244b13371badf0878e5bfbcce859a42756cf8c7657d1480318aa291d296eac2741219c346bae056f761c5f46857f8fd1ec1c4129f86bc10236d3869deb TestSuitePatch.patch " diff --git a/backports/dex/APKBUILD b/backports/dex/APKBUILD index e777d8d..2b9e1e0 100644 --- a/backports/dex/APKBUILD +++ b/backports/dex/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Anjandev Momi # Maintainer: Anjandev Momi pkgname=dex -pkgver=0.9.0 -pkgrel=1 +pkgver=0.10.1 +pkgrel=0 pkgdesc="program to generate and execute DesktopEntry files of the Application type" url="https://github.com/jceb/dex" arch="all" @@ -22,5 +22,5 @@ package() { } sha512sums=" -d68f5482cb0948f27a724437ddfc6de9a0f502bfd0d5c60c76fb85dda3c30e4c432013e530f6a91138c9ac9ff36b3824cd5e382e9d29bb9fb2ec2b9de4133094 dex-0.9.0.tar.gz +4832e60416f07b90d4f4d03d6493322ccd44a73270edf289d80136587859d137cf39db12fc5cf38d3bdfa46aae3a4d1353c7776e702240b560a287190bdc2b57 dex-0.10.1.tar.gz " diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 72d6e87..424b602 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,11 +1,11 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=33.2.1 +pkgver=35.3.0 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=130.0.6723.127 -_copium_tag=129.1 +_chromium=134.0.6998.205 +_copium_tag=134.0 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" @@ -17,7 +17,6 @@ makedepends=" ada-dev alsa-lib-dev aom-dev - base64-dev bash brotli-dev bsd-compat-headers @@ -59,7 +58,6 @@ makedepends=" libbsd-dev libcap-dev libdrm-dev - libevent-dev libexif-dev libgcrypt-dev libjpeg-turbo-dev @@ -77,6 +75,7 @@ makedepends=" libxslt-dev linux-headers lld + llhttp-dev llvm$_llvmver mesa-dev minizip-dev @@ -96,12 +95,12 @@ makedepends=" py3-setuptools py3-six python3 - qt5-qtbase-dev re2-dev rsync rust rust-bindgen samurai + simdutf-dev snappy-dev speex-dev spirv-tools-dev @@ -129,7 +128,6 @@ source=" musl-auxv.patch musl-sandbox.patch musl-tid-caching.patch - musl-v8-monotonic-pthread-cont_timedwait.patch no-execinfo.patch no-mallinfo.patch no-res-ninit-nclose.patch @@ -137,7 +135,6 @@ source=" partalloc-no-tagging-arm64.patch pvalloc.patch temp-failure-retry.patch - yes-musl.patch electron_icon.patch electron_python-jinja-3.10.patch @@ -150,17 +147,18 @@ source=" electron-launcher.sh " _copium_patches=" - cr124-iwyu-sys-select-dawn-terminal.patch - cr126-aarch64-musl-unsupported-relocation.patch - cr129-ffmpeg-no-noh264parse.patch - cr129-musl-metricts-imports.patch + cr131-v8-non4k-pages.patch + cr133-ffmpeg-no-noh264parse.patch + cr133-is-musl-libcxx.patch + cr133-mv2-still-not-dead.patch + cr134-unbundle-simdutf.patch " +# Avoid conflicting providers +sonameprefix="$pkgname:" # tests are todo for some base checks options="!check net suid" builddir="$srcdir/electron-$_gittag-$_chromium" -export PATH="$PATH:/usr/lib/qt5/bin" - export CC=clang-$_llvmver export CXX=clang++-$_llvmver @@ -312,6 +310,7 @@ prepare() { # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 # jsoncpp, re2, snappy, swiftshader-*, woff2 - requires use_custom_libcxx=false + # icu 76 does not build - https://bugs.gentoo.org/943216 local chromium_use_system=" brotli crc32c @@ -322,9 +321,7 @@ prepare() { fontconfig freetype harfbuzz-ng - icu libdrm - libevent libjpeg libsecret libusb @@ -333,6 +330,7 @@ prepare() { libxslt openh264 opus + simdutf zlib zstd " @@ -352,10 +350,9 @@ prepare() { -delete done - # llhttp - 9.x needed, 8.x in repo (2023-12-17) # ada - needs use_custom_libcxx=false local node_use_system=" - base64 + llhttp brotli cares corepack @@ -432,10 +429,14 @@ _configure() { local symbol_level=0 local vaapi=true + # added_rust_stdlib_libs and removed_rust_stdlib_libs workaround change in Rust 1.86, + # feel free to remove after upgrading rust + # shellcheck disable=2089 local gn_config=" import(\"//electron/build/args/release.gn\") + added_rust_stdlib_libs=[\"adler\"] blink_enable_generated_code_formatting=false cc_wrapper=\"$cc_wrapper\" chrome_pgo_phase=0 @@ -458,9 +459,11 @@ _configure() { is_clang=true is_component_ffmpeg=true is_debug=false + is_musl=true is_official_build=true link_pulseaudio=true proprietary_codecs=true + removed_rust_stdlib_libs=[\"adler2\"] rtc_link_pipewire=true rtc_use_pipewire=true rustc_version=\"yes\" @@ -482,12 +485,11 @@ _configure() { skia_use_dawn=false use_dawn=false use_system_ada=false - use_system_base64=true use_system_cares=true use_system_histogram=true use_system_lcms2=true use_system_libffi=true - use_system_llhttp=false + use_system_llhttp=true use_system_nghttp2=true " @@ -497,14 +499,13 @@ _configure() { } build() { - export PATH="$PATH:/usr/lib/qt5/bin" + export ELECTRON_OUT_DIR="$builddir"/out/Release/ ninja -C out/Release \ copy_node_headers \ electron_dist_zip \ node_gypi_headers \ node_version_header - } package() { @@ -544,21 +545,20 @@ lang() { } sha512sums=" -e2df4454f4178af859c13aadee4ea04a5b6aa202972cad625e54bc68f5b8c25e098e50d428ec9c1886c37ccf49aaaedb4c5f02fc8bdd498314ba216901932185 electron-v33.2.1-130.0.6723.127.tar.zst -6138b3dbf3903c78f4ca1ed5a6c3c3c485471ded31976010484ce8893d03953df2b8f066a4fe84bbde5ae7ef9bbff664ef917e247b2e95dd471de40f2774d7d0 copium-129.1.tar.gz +7dd33e03f30b753a52a8801bd8aaffbd4229280df0c6754e2fadbf6d22e7f89f9bb1db0b30de0c403e9f61a09b1989e9b810d2cb7e8a301724132c20540618ef electron-v35.3.0-134.0.6998.205.tar.zst +c1857b5d6975650f915f3db552666f521822b857e39958ccfb54129f3878f272deaafc3dd446bc8441a5e84f075791feeeb62841b74bb555d8c546bfe231d164 copium-134.0.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch -53b7cdee8f7bfb4c9371cb385c473e34ed3d8ac7efaa43c0af061107560be30d8747b07fb0b16c01079b8c770f2c721bb5a8081313b7c126856ea4078a74da2a compiler.patch +d9cc4a37a0311d23ae315a8d8124f8dbf60db8cc4a3943818638174b20387f1d770d00871f6608957b246ad956abca43c22ea0b072724287f2947e1909e47323 compiler.patch 4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch 2470904846e3adde2c9506f9e78220daca0932320b628dd3d427bf2b7c17a8f7880cb97e787b046c28de7aca642e1a8d30824d6049905976da77e7473baa64da disable-failing-tests.patch 5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch -b24563e9a738c00fce7ff2fbdee3d7c024d9125d7c74d9ab90af6bdb16f7ec8419f2c8aa78c0640f6d5d81c17dc2c673a194401d354f466749672729b48ed068 fix-opus.patch +f7fe8a8e5eee17310fb4c3e5de621b4b89ea0567f75033c65be970950cca62b50c5fbd004735e4ad39bdb2e1638b3b73ea614203d323f8181ae18c71edf302a0 fix-opus.patch c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch 36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch 99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch 51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch -92eb002718026611f5542362ad69b67f0a398ff71b3fca5c05d55cb5c6f9f29334e5e127bb4860cfaa3fba0f0d4c901e2b98808217e7dc02e254a64a5c9521aa musl-v8-monotonic-pthread-cont_timedwait.patch a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch 0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch @@ -566,12 +566,11 @@ e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9 f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7bbf933e0278e5c6d578619d8643895cdc40386eebc5b975f partalloc-no-tagging-arm64.patch 03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch -914ccf649d7771f19f209ab97f99c481aebc6f66174d68e8b539f6ad4a70bc8cb0fae2df6dadbf0415958ffb3574c420fe029079dcce45f5e5add4db2e903566 yes-musl.patch 465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch -57aa81d46b9cc931092d9d9b3cb4a9859f86c183a236bc5cca6abbaeca86b82bf1b537dd9cb3412114fa4e86087c0022ee3f7e88de974d29b309e9d1714df7a5 electron_unbundle-node.patch -1b35edcf0b41e39e20c4d64dbb978bcaab8036f2fe839930709b269c50cb1321458a15b4d0013246f9e03f58f250a1e3a57ea910db1aa0adbd602a6a11ad33b9 electron_system-zlib-headers.patch +1ab45199c5eb896f57407876e9ca435af3ed63a65136f97526f6a07c3a2db223e646ea365630b0eda441ea88dbb0c07ab00b77de25edce07453f038c5339203d electron_unbundle-node.patch +4d9287d4cdfe27fbfb7be3d4b26c0c40edbd6a0c3ff926d60f2093ca09c15bcb58e20c2ccc8c0606aafd66c6d25a54225bc329cb056d8c5b297db4c6d0e768e6 electron_system-zlib-headers.patch e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop 5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh diff --git a/backports/electron/README.md b/backports/electron/README.md new file mode 100644 index 0000000..2a12409 --- /dev/null +++ b/backports/electron/README.md @@ -0,0 +1,59 @@ +# electron + +This is the `electron` package for Alpine Linux. + +Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael + +## Building electron + +Electron is an application framework based on `chromium`. Just like `chromium`, +and any Google application, the build process is a form of [hostile +architecture] (https://en.wikipedia.org/wiki/Hostile_architecture) It's quite +literally chromium with patches applied on top for the most part. The build +process applies a series of git patches against `chromium` from directories +with a script. + +Its source code isn't available as a downloadable tarball. It is only fetchable +using Google's `gclient` available in `depot_tools` with a reimplemented +version in the `teapot` package. By executing, `abuild snapshot`, the tarball +can be fetched and packaged, as long as `gclient` is in your path. For ease of +maintenance, a workflow on [Ayakael's Forge](https://ayakael.net/mirrors/electron) +automatically fetches and packages the source code on new releases and makes it +available in a [generic Forgejo repository](https://ayakael.net/mirrors/-/packages/generic/electron). + +## Electron maintenance cycle + +Security / bug fixes land from upstream land randomly, but chromium security fixes land +basically weekly around Tuesday in `America/Los_Angeles`. Minor relases only require +an upgrade to the `electron` packages. It is advisable to follow chromium weekly +security fixes, although following `electron` minor releases is fine. + +Major version upgrades require a more thorough approach. For one, most changes +can be backported from `chromium` APKBUILD by diffing the previous version +packaged with `electron` with the current (set with `_chromium` var). You also +need to rebuild all `electron` apps, with patches sometimes necessary when +upstream bumps to a new `nodejs` major verion. Major electron releases are +every two `chromium` major releases, with [dates known well ahead] +(https://chromiumdash.appspot.com/schedule) with a few major releases of +`electron` [officially supported at a time](https://www.electronjs.org/docs/latest/tutorial/electron-timelines). + +Steps, in a nutshell: + +1. Set `pkgver` to up-to-date version + +2. Optional: fetch source-code using `abuild snapshot`, making sure `gclient` +is in your path + +3. Update source checksum using `abuild checksum` + +4. If major update, backport changes from `chromium` aport and bump `pkgrel` +for all electron-based applications. + +## Why is this package still in testing + +[Work is under way](https://gitlab.alpinelinux.org/alpine/aports/-/issues/15760) +to make this aport ready for `community` + +Until that happens, this package is also kept-to-date against the latest +release of Alpine Linux in [Ayakael's Forge](https://ayakael.net/forge/-/packages/alpine/signal-desktop) +This is true of all Ayakael's packages still in `testing`. diff --git a/backports/electron/compiler.patch b/backports/electron/compiler.patch index cce8a23..df41f2c 100644 --- a/backports/electron/compiler.patch +++ b/backports/electron/compiler.patch @@ -1,6 +1,6 @@ --- ./build/config/compiler/BUILD.gn.orig +++ ./build/config/compiler/BUILD.gn -@@ -568,24 +568,6 @@ +@@ -591,24 +591,6 @@ } } @@ -25,7 +25,7 @@ # TODO(crbug.com/40192287): Investigate why/if this should be needed. if (is_win) { cflags += [ "/clang:-ffp-contract=off" ] -@@ -998,17 +980,6 @@ +@@ -1045,20 +1027,6 @@ # `-nodefaultlibs` from the linker invocation from Rust, which would be used # to compile dylibs on Android, such as for constructing unit test APKs. "-Cdefault-linker-libraries", @@ -40,13 +40,24 @@ - # For deterministic builds, keep the local machine's current working - # directory from appearing in build outputs. - "-Zremap-cwd-prefix=.", +- +- # We use clang-rt sanitizer runtimes. +- "-Zexternal-clangrt", ] if (!is_win || force_rustc_color_output) { -@@ -1175,8 +1146,8 @@ +@@ -1107,7 +1075,6 @@ + # Don't allow unstable features to be enabled by `#![feature()]` without + # additional command line flags. + config("disallow_unstable_features") { +- rustflags = [ "-Zallow-features=" ] + } + + config("libcxx_hardening") { +@@ -1242,8 +1209,8 @@ + } } else if (current_cpu == "arm") { - if (is_clang && !is_android && !is_nacl && - !(is_chromeos_lacros && is_chromeos_device)) { + if (is_clang && !is_android && !is_nacl && !is_chromeos_device) { - cflags += [ "--target=arm-linux-gnueabihf" ] - ldflags += [ "--target=arm-linux-gnueabihf" ] + cflags += [ "--target=armv7-alpine-linux-musleabihf" ] @@ -54,10 +65,10 @@ } if (!is_nacl) { cflags += [ -@@ -1190,8 +1161,8 @@ +@@ -1257,8 +1224,8 @@ } else if (current_cpu == "arm64") { if (is_clang && !is_android && !is_nacl && !is_fuchsia && - !(is_chromeos_lacros && is_chromeos_device)) { + !is_chromeos_device) { - cflags += [ "--target=aarch64-linux-gnu" ] - ldflags += [ "--target=aarch64-linux-gnu" ] + cflags += [ "--target=aarch64-alpine-linux-musl" ] @@ -65,7 +76,7 @@ } } else if (current_cpu == "mipsel" && !is_nacl) { ldflags += [ "-Wl,--hash-style=sysv" ] -@@ -1982,7 +1953,7 @@ +@@ -2086,7 +2053,7 @@ defines = [ "_HAS_NODISCARD" ] } } else { @@ -76,41 +87,46 @@ cflags += [ "-Wextra" ] --- ./build/config/rust.gni.orig +++ ./build/config/rust.gni -@@ -185,11 +185,11 @@ +@@ -198,13 +198,13 @@ rust_abi_target = "" if (is_linux || is_chromeos) { if (current_cpu == "arm64") { - rust_abi_target = "aarch64-unknown-linux-gnu" + rust_abi_target = "aarch64-alpine-linux-musl" + cargo_target_abi = "" } else if (current_cpu == "x86") { - rust_abi_target = "i686-unknown-linux-gnu" + rust_abi_target = "i586-alpine-linux-musl" + cargo_target_abi = "" } else if (current_cpu == "x64") { - rust_abi_target = "x86_64-unknown-linux-gnu" + rust_abi_target = "x86_64-alpine-linux-musl" + cargo_target_abi = "" } else if (current_cpu == "arm") { if (arm_float_abi == "hard") { - float_suffix = "hf" -@@ -198,15 +198,15 @@ +@@ -214,18 +214,18 @@ } if (arm_arch == "armv7-a" || arm_arch == "armv7") { # No way to inform Rust about the -a suffix. - rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix + rust_abi_target = "armv7-alpine-linux-musleabi" + float_suffix + cargo_target_abi = "eabi" + float_suffix } else { - rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix + rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix + cargo_target_abi = "eabi" + float_suffix } } else if (current_cpu == "riscv64") { - rust_abi_target = "riscv64gc-unknown-linux-gnu" + rust_abi_target = "riscv64-alpine-linux-musl" + cargo_target_abi = "" } else { # Best guess for other future platforms. - rust_abi_target = current_cpu + "-unknown-linux-gnu" + rust_abi_target = current_cpu + "-alpine-linux-musl" + cargo_target_abi = "" } } else if (is_android) { - import("//build/config/android/abi.gni") --- ./build/config/clang/BUILD.gn.orig +++ ./build/config/clang/BUILD.gn @@ -128,14 +128,15 @@ @@ -133,3 +149,13 @@ } else { assert(false) # Unhandled cpu type } +--- ./build/config/gcc/BUILD.gn.orig ++++ ./build/config/gcc/BUILD.gn +@@ -32,7 +32,6 @@ + # See http://gcc.gnu.org/wiki/Visibility + config("symbol_visibility_hidden") { + cflags = [ "-fvisibility=hidden" ] +- rustflags = [ "-Zdefault-visibility=hidden" ] + + # Visibility attribute is not supported on AIX. + if (current_os != "aix") { diff --git a/backports/electron/electron_system-zlib-headers.patch b/backports/electron/electron_system-zlib-headers.patch index 0dc5c8e..644f5e7 100644 --- a/backports/electron/electron_system-zlib-headers.patch +++ b/backports/electron/electron_system-zlib-headers.patch @@ -1,10 +1,12 @@ ---- ./electron/BUILD.gn.orig -+++ ./electron/BUILD.gn -@@ -1565,7 +1565,6 @@ - public_deps = header_groups + [ - ":node_gypi_headers", - ":node_version_header", -- ":zlib_headers", - ] +diff --git a/electron/BUILD.gn.orig b/electron/BUILD.gn +index 235c7abd3e8..088c24ac45e 100644 +--- a/electron/BUILD.gn.orig ++++ b/electron/BUILD.gn +@@ -1569,7 +1569,6 @@ group("copy_node_headers") { + ":generate_node_headers", + ":node_gypi_headers", + ":node_version_header", +- ":zlib_headers", + ] } diff --git a/backports/electron/electron_unbundle-node.patch b/backports/electron/electron_unbundle-node.patch index d69f5ae..8392a85 100644 --- a/backports/electron/electron_unbundle-node.patch +++ b/backports/electron/electron_unbundle-node.patch @@ -1,69 +1,122 @@ ---- ./third_party/electron_node/BUILD.gn.orig -+++ ./third_party/electron_node/BUILD.gn -@@ -40,6 +40,8 @@ - node_release_urlbase = "" - - # Allows downstream packagers (eg. Linux distributions) to build Electron against system shared libraries. -+ use_system_ada = false -+ use_system_base64 = false - use_system_cares = false - use_system_nghttp2 = false - use_system_llhttp = false -@@ -48,6 +50,16 @@ - - if (is_linux) { - import("//build/config/linux/pkg_config.gni") -+ if (use_system_ada) { -+ config("ada") { -+ libs = [ "ada" ] -+ } -+ } -+ if (use_system_base64) { -+ pkg_config("base64") { -+ packages = [ "base64" ] -+ } -+ } - if (use_system_cares) { - pkg_config("cares") { - packages = [ "libcares" ] -@@ -258,8 +270,6 @@ - deps = [ - ":node_js2c_exec", - "deps/googletest:gtest", -- "deps/ada", -- "deps/base64", - "deps/simdutf", - "deps/uvwasi", - "//third_party/zlib", -@@ -267,6 +277,16 @@ - "//third_party/brotli:enc", - "//v8:v8_libplatform", - ] -+ if (use_system_ada) { -+ configs += [ ":ada" ] -+ } else { -+ deps += [ "deps/ada" ] -+ } -+ if (use_system_base64) { -+ configs += [ ":base64" ] -+ } else { -+ deps += [ "deps/base64" ] -+ } - if (use_system_cares) { - configs += [ ":cares" ] - } else { -diff --git a/./electron/script/generate-config-gypi.py.orig b/./electron/script/generate-config-gypi.py -index b41cd7eb450..bc4098debb5 100755 ---- a/./electron/script/generate-config-gypi.py.orig -+++ b/./electron/script/generate-config-gypi.py -@@ -62,6 +62,11 @@ def main(target_file, target_cpu): - # Used by certain versions of node-gyp. - v['build_v8_with_gn'] = 'false' - +diff --git a/electron/script/generate-config-gypi.py.orig b/electron/script/generate-config-gypi.py +index 58c973b..c215d90 100755 +--- a/electron/script/generate-config-gypi.py.orig ++++ b/electron/script/generate-config-gypi.py +@@ -64,6 +64,11 @@ def main(target_file, target_cpu): + # in common.gypi + if 'clang' in v: + del v['clang'] ++ + with open(os.path.join(NODE_DIR, 'use_system.txt')) as f: + for dep in f.read().strip().split(' '): + if v.get(f'node_shared_{dep}') is not None: + v[f'node_shared_{dep}'] = 'true' -+ + with open(target_file, 'w+', encoding='utf-8') as file_out: file_out.write(pprint.pformat(config, indent=2)) + +diff --git a/third_party/electron_node/node.gni.orig b/third_party/electron_node/node.gni +index 73bf383..1c80d5a 100644 +--- a/third_party/electron_node/node.gni.orig ++++ b/third_party/electron_node/node.gni +@@ -73,6 +73,7 @@ declare_args() { + node_use_amaro = true + + # Allows downstream packagers (eg. Linux distributions) to build against system shared libraries. ++ use_system_ada = false + use_system_cares = false + use_system_nghttp2 = false + use_system_llhttp = false +diff --git a/third_party/electron_node/unofficial.gni.orig b/third_party/electron_node/unofficial.gni +index d61a9bd..8bf990e 100644 +--- a/third_party/electron_node/unofficial.gni.orig ++++ b/third_party/electron_node/unofficial.gni +@@ -143,7 +143,6 @@ template("node_gn_build") { + "deps/googletest:googletest_config", + ] + public_deps = [ +- "deps/ada", + "deps/uv", + "//electron:electron_js2c", + "deps/simdjson", +@@ -151,10 +150,7 @@ template("node_gn_build") { + ] + deps = [ + ":run_node_js2c", +- "deps/cares", +- "deps/histogram", + "deps/nbytes", +- "deps/nghttp2", + "deps/postject", + "deps/sqlite", + "deps/uvwasi", +@@ -182,12 +178,30 @@ template("node_gn_build") { + if (is_posix) { + configs -= [ "//build/config/gcc:symbol_visibility_hidden" ] + configs += [ "//build/config/gcc:symbol_visibility_default" ] ++ libs = [] ++ include_dirs = [] + } + if (use_system_llhttp) { + libs += [ "llhttp" ] + } else { + deps += [ "deps/llhttp" ] + } ++ if (use_system_cares) { ++ libs += [ "cares" ] ++ } else { ++ deps += [ "deps/cares" ] ++ } ++ if (use_system_nghttp2) { ++ libs += [ "nghttp2" ] ++ } else { ++ deps += [ "deps/nghttp2" ] ++ } ++ if (use_system_ada) { ++ libs += [ "ada" ] ++ include_dirs += [ "/usr/include/ada" ] ++ } else { ++ public_deps += [ "deps/ada" ] ++ } + if (use_system_histogram) { + libs += [ "hdr_histogram" ] + include_dirs += [ "/usr/include/hdr" ] +@@ -208,7 +222,7 @@ template("node_gn_build") { + "src/inspector:node_protocol_generated_sources", + "src/inspector:v8_inspector_compress_protocol_json", + ] +- include_dirs = [ ++ include_dirs += [ + "$target_gen_dir/src", + "$target_gen_dir/src/inspector", + "$node_inspector_protocol_path", +@@ -222,17 +236,18 @@ template("node_gn_build") { + sources += node_inspector.node_inspector_sources + + node_inspector.node_inspector_generated_sources + } +- if (is_linux) { +- import("//build/config/linux/pkg_config.gni") +- if (use_system_cares) { +- pkg_config("cares") { +- packages = [ "libcares" ] +- } +- } +- if (use_system_nghttp2) { +- pkg_config("nghttp2") { +- packages = [ "libnghttp2" ] +- } ++ } ++ ++ if (is_linux) { ++ import("//build/config/linux/pkg_config.gni") ++ if (use_system_cares) { ++ pkg_config("cares") { ++ packages = [ "libcares" ] ++ } ++ } ++ if (use_system_nghttp2) { ++ pkg_config("nghttp2") { ++ packages = [ "libnghttp2" ] + } + } + } diff --git a/backports/electron/fix-opus.patch b/backports/electron/fix-opus.patch index 8841a32..836b719 100644 --- a/backports/electron/fix-opus.patch +++ b/backports/electron/fix-opus.patch @@ -1,6 +1,6 @@ ---- a/media/filters/ffmpeg_glue.cc -+++ b/media/filters/ffmpeg_glue.cc -@@ -142,7 +142,7 @@ const char* FFmpegGlue::GetAllowedAudioDecoders() { +--- a/media/ffmpeg/ffmpeg_common.cc ++++ b/media/ffmpeg/ffmpeg_common.cc +@@ -1025,7 +1025,7 @@ static const base::NoDestructor kAllowedAudioCodecs([]() { // This should match the configured lists in //third_party/ffmpeg. std::string allowed_decoders( @@ -9,4 +9,3 @@ "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw"); #if BUILDFLAG(USE_PROPRIETARY_CODECS) allowed_decoders += ",aac"; - diff --git a/backports/electron/gperf-3.2-fix.patch b/backports/electron/gperf-3.2-fix.patch new file mode 100644 index 0000000..fa462e3 --- /dev/null +++ b/backports/electron/gperf-3.2-fix.patch @@ -0,0 +1,29 @@ +diff --git a/third_party/blink/renderer/build/scripts/gperf.py.orig b/third_party/blink/renderer/build/scripts/gperf.py +index 42630d3..d909aee 100644 +--- a/third_party/blink/renderer/build/scripts/gperf.py.orig ++++ b/third_party/blink/renderer/build/scripts/gperf.py +@@ -28,24 +28,6 @@ def generate_gperf(gperf_path, gperf_input, gperf_args): + stdout=subprocess.PIPE, + universal_newlines=True) + gperf_output = gperf.communicate(gperf_input)[0] +- # Massage gperf output to be more palatable for modern compilers. +- # TODO(thakis): Upstream these to gperf so we don't need massaging. +- # `register` is deprecated in C++11 and removed in C++17, so remove +- # it from gperf's output. +- # https://savannah.gnu.org/bugs/index.php?53028 +- gperf_output = re.sub(r'\bregister ', '', gperf_output) +- # -Wimplicit-fallthrough needs an explicit fallthrough statement, +- # so replace gperf's /*FALLTHROUGH*/ comment with the statement. +- # https://savannah.gnu.org/bugs/index.php?53029 +- gperf_output = gperf_output.replace('/*FALLTHROUGH*/', +- ' [[fallthrough]];') +- # -Wpointer-to-int-cast warns about casting pointers to smaller ints +- # Replace {(int)(long)&(foo), bar} with +- # {static_cast(reinterpret_cast(&(foo)), bar} +- gperf_output = re.sub( +- r'\(int\)\(long\)(.*?),', +- r'static_cast(reinterpret_cast(\1)),', +- gperf_output) + script = 'third_party/blink/renderer/build/scripts/gperf.py' + return '// Generated by %s\n' % script + gperf_output + except OSError: diff --git a/backports/electron/pipewire-1.4.patch b/backports/electron/pipewire-1.4.patch new file mode 100644 index 0000000..ab9c37f --- /dev/null +++ b/backports/electron/pipewire-1.4.patch @@ -0,0 +1,23 @@ +Patch-Source: https://webrtc-review.googlesource.com/c/src/+/380500 +--- +--- a/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc ++++ b/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc +@@ -87,7 +87,7 @@ + .param = OnNodeParam, + }; + +- pw_node_add_listener(proxy_, &node_listener_, &node_events, this); ++ pw_node_add_listener(reinterpret_cast(proxy_), &node_listener_, &node_events, this); + } + + // static +@@ -119,7 +119,7 @@ + uint32_t id = info->params[i].id; + if (id == SPA_PARAM_EnumFormat && + info->params[i].flags & SPA_PARAM_INFO_READ) { +- pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr); ++ pw_node_enum_params(reinterpret_cast(that->proxy_), 0, id, 0, UINT32_MAX, nullptr); + break; + } + } + diff --git a/backports/element-desktop/APKBUILD b/backports/element-desktop/APKBUILD new file mode 100644 index 0000000..de6a4d7 --- /dev/null +++ b/backports/element-desktop/APKBUILD @@ -0,0 +1,171 @@ +# Contributor: lauren n. liberda +maintainer="lauren n. liberda " +pkgname=element-desktop +pkgver=1.11.100 +pkgrel=1 +pkgdesc="Secure and independent communication, connected via Matrix" +url="https://element.io/" +arch="aarch64 x86_64" # same as electron +license="GPL-3.0-only" +_electronver=35 +depends=" + electron~$_electronver + font-inconsolata + font-inter + font-nunito + font-opensans + font-twemoji + " +makedepends=" + cargo + electron-dev~$_electronver + electron-tasje + jq + libsecret-dev + nodejs + npm + python3 + py3-setuptools + sqlcipher-dev + swc + yarn + " +source=" + https://github.com/vector-im/element-desktop/archive/refs/tags/v$pkgver/element-desktop-$pkgver.tar.gz + https://github.com/vector-im/element-web/archive/refs/tags/v$pkgver/element-web-$pkgver.tar.gz + + add-alpine-targets.patch + use-system-headers.patch + tasje-one-hak.patch + tasje-no-fuses.patch + no-source-maps.patch.web + use-system-fonts.patch.web + + element-desktop + " +options="net !check" # broken + +# secfixes: +# 1.11.30-r0: +# - CVE-2023-30609 +# 1.11.26-r0: +# - CVE-2023-28103 +# - CVE-2023-28427 +# 1.11.7-r0: +# - CVE-2022-39249 +# - CVE-2022-39250 +# - CVE-2022-39251 +# - CVE-2022-39236 +# 1.11.4-r0: +# - CVE-2022-36059 +# - CVE-2022-36060 + +# used by buildscripts (at least web's webpack) +export VERSION=$pkgver + +export CARGO_PROFILE_RELEASE_OPT_LEVEL=2 +export CARGO_PROFILE_RELEASE_STRIP="symbols" +export NODE_OPTIONS="--openssl-legacy-provider" + +prepare() { + default_prepare + + msg "Applying more patches" + for x in $source; do + case "$x" in + *.patch.web) + msg "$x" + patch -p1 -i "$srcdir"/$x -d "$srcdir"/element-web-$pkgver + ;; + esac + done + + rm -rf res/fonts + + ( + cd "$srcdir"/element-web-$pkgver + + msg "Fetch element-web dependencies" + yarn install --frozen-lockfile --ignore-scripts --ignore-engines + jq '.show_labs_settings = true' < config.sample.json > config.json + ) + + ln -s "$srcdir"/element-web-$pkgver/webapp webapp + + msg "Fetch element-desktop dependencies" + yarn install --frozen-lockfile --ignore-scripts +} + +build() { + ( + cd "$srcdir"/element-web-$pkgver + + msg "Build element-web" + NODE_ENV=production yarn build + ) + + msg "Build element-desktop" + + yarn asar-webapp + + # add "optional" native dependencies + # hak stands for hack + yarn run hak --target "$(uname -m)-alpine-linux-musl" + + yarn build:ts + + yarn build:res + + # we need it as js to be of any use for tasje. + # fails with `yarn tsc`. https://github.com/electron-userland/electron-builder/issues/7961 + swc compile electron-builder.ts --out-file electron-builder.mjs + + yarn install --frozen-lockfile --ignore-scripts --production + + npm rebuild keytar-forked --nodedir=/usr/include/electron/node_headers --build-from-source + find node_modules/keytar-forked/build/ -type f \ + \! -path node_modules/keytar-forked/build/Release/keytar.node \ + -delete + # stripping in build because it gets into asar + strip node_modules/keytar-forked/build/Release/keytar.node + + tasje -c electron-builder.mjs pack +} + +check() { + ( + cd "$srcdir"/element-web-$pkgver + + yarn test + ) +} + +package() { + local resources="dist/resources" + + install -Dm644 $resources/app.asar "$pkgdir"/usr/lib/element-desktop/app.asar + install -Dm644 webapp.asar "$pkgdir"/usr/lib/element-desktop/webapp.asar + + cp -r $resources/app.asar.unpacked "$pkgdir"/usr/lib/element-desktop/app.asar.unpacked + + install -Dm644 $resources/img/element.png "$pkgdir"/usr/lib/element-desktop/img/element.png + + install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname + + install -Dm644 dist/$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop + while read -r size; do + install -Dm644 dist/icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png + done < dist/icons/size-list +} + +sha512sums=" +a8ac5180df3b204fb1947ecaa4786c9c5fdd53ffe705f4dfe97a0b051fa371fd9102c41a898e8783cf25f732674da2d987ef315f2facc7b18b20ef214ea0f81d element-desktop-1.11.100.tar.gz +e3e50fd867f9b7388eb22778ccb97d6504a480ab4e2aa9eba10fd0f4d0324a1525c2afe6c80181567d8e554f03086a9e0994a6221cfcb0ca29700754c8f31cac element-web-1.11.100.tar.gz +4747893ed3e43d3074e9afe1cdd668a6be0de073d439205fe8c38c5e0f4091cc76e3cd15d98818bea5139add29501d8d07e83c58e9da230a4ce5bb538d388f80 add-alpine-targets.patch +755b17f7b828eb6920c06a6950ad4e14c32c99d22e9c05fcef7a081b5d2034adb03db3958aa5209c99fb7201f4d888c2383fc9864c5e743dd33f8b5c4925acd7 use-system-headers.patch +92e69817fdc71f60c5c7dcbd3c7b13428cc18141cf5f27720326390f6817bec85fb1c60f8016b3a8fa275f601b16f646cda12b5e379a349368eef2f801b4de7a tasje-one-hak.patch +a1399662bdbe5e7256d31f7bdc05070e7009d70113699856b025a1d5ab1d9b8bf1020072a08255d4eddab0874044131dec296f98a91ba5c12ca61948b1d18dbe tasje-no-fuses.patch +ec635fde026f7fce8e8cc57960b5b9dcec4418416d4867ed47711422d48f068bb58a3c9ceb7715efc9c177beca3788da6b0babc9b689ea8c0724a0395f2b85f8 no-source-maps.patch.web +aaf46476bac403aa5204aa265fcf0654fad4c149fd74d0ec4273c051a5549943384cae3cdd62c5b78fdedfed55c11ecceb898b886e44165cbe7e30953a095cf9 use-system-fonts.patch.web +afc588311dc3b566a754e3e7fe6b37b99a06d47b8bbce0ed9acca8ef308fdab0bd1d41b406199e5cbdd86bdce695ff847cd8668857a235cbdc292ad8b899c063 element-desktop +" diff --git a/backports/element-desktop/add-alpine-targets.patch b/backports/element-desktop/add-alpine-targets.patch new file mode 100644 index 0000000..87e1148 --- /dev/null +++ b/backports/element-desktop/add-alpine-targets.patch @@ -0,0 +1,52 @@ +--- a/scripts/hak/target.ts ++++ b/scripts/hak/target.ts +@@ -29,8 +29,10 @@ + | "i686-unknown-linux-gnu" + | "x86_64-unknown-linux-musl" + | "x86_64-unknown-linux-gnu" ++ | "x86_64-alpine-linux-musl" + | "aarch64-unknown-linux-musl" + | "aarch64-unknown-linux-gnu" ++ | "aarch64-alpine-linux-musl" + | "powerpc64le-unknown-linux-musl" + | "powerpc64le-unknown-linux-gnu"; + +@@ -112,6 +114,13 @@ + libC: MUSL, + }; + ++const x8664AlpineLinuxMusl: LinuxTarget = { ++ id: "x86_64-alpine-linux-musl", ++ platform: "linux", ++ arch: "x64", ++ libC: MUSL, ++}; ++ + const i686UnknownLinuxGnu: LinuxTarget = { + id: "i686-unknown-linux-gnu", + platform: "linux", +@@ -140,6 +149,13 @@ + libC: MUSL, + }; + ++const aarch64AlpineLinuxMusl: LinuxTarget = { ++ id: "aarch64-alpine-linux-musl", ++ platform: "linux", ++ arch: "arm64", ++ libC: MUSL, ++}; ++ + const powerpc64leUnknownLinuxGnu: LinuxTarget = { + id: "powerpc64le-unknown-linux-gnu", + platform: "linux", +@@ -167,8 +183,10 @@ + "i686-unknown-linux-gnu": i686UnknownLinuxGnu, + "x86_64-unknown-linux-musl": x8664UnknownLinuxMusl, + "x86_64-unknown-linux-gnu": x8664UnknownLinuxGnu, ++ "x86_64-alpine-linux-musl": x8664AlpineLinuxMusl, + "aarch64-unknown-linux-musl": aarch64UnknownLinuxMusl, + "aarch64-unknown-linux-gnu": aarch64UnknownLinuxGnu, ++ "aarch64-alpine-linux-musl": aarch64AlpineLinuxMusl, + "powerpc64le-unknown-linux-musl": powerpc64leUnknownLinuxMusl, + "powerpc64le-unknown-linux-gnu": powerpc64leUnknownLinuxGnu, + }; diff --git a/backports/element-desktop/element-desktop b/backports/element-desktop/element-desktop new file mode 100755 index 0000000..de3c5b2 --- /dev/null +++ b/backports/element-desktop/element-desktop @@ -0,0 +1,3 @@ +#!/bin/sh + +exec electron /usr/lib/element-desktop/app.asar "$@" diff --git a/backports/element-desktop/no-source-maps.patch.web b/backports/element-desktop/no-source-maps.patch.web new file mode 100644 index 0000000..86b3bac --- /dev/null +++ b/backports/element-desktop/no-source-maps.patch.web @@ -0,0 +1,18 @@ +--- ./webpack.config.js.orig ++++ ./webpack.config.js +@@ -102,15 +102,6 @@ + } + + const development = {}; +- if (devMode) { +- // Embedded source maps for dev builds, can't use eval-source-map due to CSP +- development["devtool"] = "inline-source-map"; +- } else { +- // High quality source maps in separate .map files which include the source. This doesn't bulk up the .js +- // payload file size, which is nice for performance but also necessary to get the bundle to a small enough +- // size that sentry will accept the upload. +- development["devtool"] = "source-map"; +- } + + // Resolve the directories for the js-sdk for later use. We resolve these early, so we + // don't have to call them over and over. We also resolve to the package.json instead of the src diff --git a/backports/element-desktop/tasje-no-fuses.patch b/backports/element-desktop/tasje-no-fuses.patch new file mode 100644 index 0000000..72c515f --- /dev/null +++ b/backports/element-desktop/tasje-no-fuses.patch @@ -0,0 +1,52 @@ +we can't do fuses because we ship one binary in the electron package. +and we can't import them here, since they are in devDependencies, which are uninstalled at this stage. + +--- ./electron-builder.ts.orig ++++ ./electron-builder.ts +@@ -2,8 +2,7 @@ + import * as fs from "node:fs"; + import * as path from "node:path"; + import * as plist from "plist"; +-import { AfterPackContext, Arch, Configuration as BaseConfiguration, Platform } from "electron-builder"; +-import { computeData } from "app-builder-lib/out/asar/integrity"; ++import { Configuration as BaseConfiguration } from "electron-builder"; + import { readFile, writeFile } from "node:fs/promises"; + + /** +@@ -46,26 +45,6 @@ + } & BaseConfiguration["deb"]; + } + +-async function injectAsarIntegrity(context: AfterPackContext) { +- const packager = context.packager; +- +- // We only need to re-generate asar on universal Mac builds, due to https://github.com/electron/universal/issues/116 +- if (packager.platform !== Platform.MAC || context.arch !== Arch.universal) return; +- +- const resourcesPath = packager.getResourcesDir(context.appOutDir); +- const asarIntegrity = await computeData({ +- resourcesPath, +- resourcesRelativePath: "Resources", +- resourcesDestinationPath: resourcesPath, +- extraResourceMatchers: [], +- }); +- +- const plistPath = path.join(resourcesPath, "..", "Info.plist"); +- const data = plist.parse(await readFile(plistPath, "utf8")) as unknown as Writable; +- data["ElectronAsarIntegrity"] = asarIntegrity as unknown as Writable; +- await writeFile(plistPath, plist.build(data)); +-} +- + /** + * @type {import('electron-builder').Configuration} + * @see https://www.electron.build/configuration/configuration +@@ -89,9 +68,6 @@ + + loadBrowserProcessSpecificV8Snapshot: false, + enableEmbeddedAsarIntegrityValidation: true, +- }, +- afterPack: async (context: AfterPackContext) => { +- await injectAsarIntegrity(context); + }, + files: [ + "package.json", diff --git a/backports/element-desktop/tasje-one-hak.patch b/backports/element-desktop/tasje-one-hak.patch new file mode 100644 index 0000000..a855eee --- /dev/null +++ b/backports/element-desktop/tasje-one-hak.patch @@ -0,0 +1,20 @@ +directories in .hak/hakModules are already symlinked inside node_modules, +and as such are already being copied by default. this makes tasje fail with: +``` +thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: +FileAlreadyWritten("/node_modules/keytar/package.json")', src/main.rs:200:18 +``` + +--- ./electron-builder.ts.orig ++++ ./electron-builder.ts +@@ -74,10 +74,6 @@ + }, + files: [ + "package.json", +- { +- from: ".hak/hakModules", +- to: "node_modules", +- }, + "lib/**", + ], + extraResources: [ diff --git a/backports/element-desktop/use-system-fonts.patch.web b/backports/element-desktop/use-system-fonts.patch.web new file mode 100644 index 0000000..855fdea --- /dev/null +++ b/backports/element-desktop/use-system-fonts.patch.web @@ -0,0 +1,79 @@ +--- a/src/vector/jitsi/index.pcss ++++ b/src/vector/jitsi/index.pcss +@@ -14,7 +14,7 @@ + font-family: "Nunito"; + font-style: normal; + font-weight: 400; +- src: url("$(res)/fonts/Nunito/Nunito-Regular.ttf") format("truetype"); ++ src: local("Nunito Regular"); + } + + $dark-fg: #edf3ff; +--- a/res/themes/light/css/_fonts.pcss ++++ b/res/themes/light/css/_fonts.pcss +@@ -5,16 +5,16 @@ + @font-face { + font-family: "Twemoji"; + font-weight: 400; +- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2"); ++ src: local("Twemoji"); + } + /* For at least Chrome on Windows 10, we have to explictly add extra weights for the emoji to appear in bold messages, etc. */ + @font-face { + font-family: "Twemoji"; + font-weight: 600; +- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2"); ++ src: local("Twemoji"); + } + @font-face { + font-family: "Twemoji"; + font-weight: 700; +- src: url("$(res)/fonts/Twemoji_Mozilla/TwemojiMozilla-colr.woff2") format("woff2"); ++ src: local("Twemoji"); + } +--- a/res/themes/legacy-light/css/_fonts.pcss ++++ b/res/themes/legacy-light/css/_fonts.pcss +@@ -23,17 +23,17 @@ + font-family: "Nunito"; + font-style: normal; + font-weight: 400; +- src: url("$(res)/fonts/Nunito/Nunito-Regular.ttf") format("truetype"); ++ src: local("Nunito Regular"); + } + @font-face { + font-family: "Nunito"; + font-style: normal; + font-weight: 600; +- src: url("$(res)/fonts/Nunito/Nunito-SemiBold.ttf") format("truetype"); ++ src: local("Nunito SemiBold"); + } + @font-face { + font-family: "Nunito"; + font-style: normal; + font-weight: 700; +- src: url("$(res)/fonts/Nunito/Nunito-Bold.ttf") format("truetype"); ++ src: local("Nunito Bold"); + } +--- ./src/theme.ts.orig ++++ ./src/theme.ts +@@ -7,20 +7,6 @@ + Please see LICENSE files in the repository root for full details. + */ + +-import "@fontsource/inter/400.css"; +-import "@fontsource/inter/400-italic.css"; +-import "@fontsource/inter/500.css"; +-import "@fontsource/inter/500-italic.css"; +-import "@fontsource/inter/600.css"; +-import "@fontsource/inter/600-italic.css"; +-import "@fontsource/inter/700.css"; +-import "@fontsource/inter/700-italic.css"; +- +-import "@fontsource/inconsolata/latin-ext-400.css"; +-import "@fontsource/inconsolata/latin-400.css"; +-import "@fontsource/inconsolata/latin-ext-700.css"; +-import "@fontsource/inconsolata/latin-700.css"; +- + import { logger } from "matrix-js-sdk/src/logger"; + + import { _t } from "./languageHandler"; diff --git a/backports/element-desktop/use-system-headers.patch b/backports/element-desktop/use-system-headers.patch new file mode 100644 index 0000000..6ea957b --- /dev/null +++ b/backports/element-desktop/use-system-headers.patch @@ -0,0 +1,15 @@ +--- a/scripts/hak/hakEnv.ts ++++ b/scripts/hak/hakEnv.ts +@@ -101,11 +101,10 @@ + ...process.env, + npm_config_arch: this.target.arch, + npm_config_target_arch: this.target.arch, +- npm_config_disturl: "https://electronjs.org/headers", ++ npm_config_nodedir: "/usr/include/electron/node_headers", + npm_config_runtime: this.runtime, + npm_config_target: this.runtimeVersion, + npm_config_build_from_source: "true", +- npm_config_devdir: path.join(os.homedir(), ".electron-gyp"), + }; + } + diff --git a/backports/freecad/APKBUILD b/backports/freecad/APKBUILD new file mode 100644 index 0000000..8967ba7 --- /dev/null +++ b/backports/freecad/APKBUILD @@ -0,0 +1,80 @@ +# Contributor: Bryce Vandegrift +# Maintainer: Bryce Vandegrift +pkgname=freecad +pkgver=1.0.0 +_ondsel_ver="2e3659c4bce3e6885269e0cb3d640261b2a91108" +_gsl_ver="b39e7e4b0987859f5b19ff7686b149c916588658" +pkgrel=0 +pkgdesc="Open-source parametric 3D modeler" +url="https://www.freecad.org/" +# armv7, armhf, and aarch64: GL_MULTISAMPLE not declared +# s390x: blocked by opencascade-dev, vtk-dev, and freeimage-dev +# riscv64: blocked by py3-pivy, py3-pyside6, pyside6-dev, and py3-shiboken6 +arch="all !aarch64 !armhf !armv7 !s390x !riscv64" +license="LGPL-2.0-or-later" +depends="py3-pivy py3-matplotlib py3-pyside6" +makedepends=" + cmake + ninja + boost-dev + doxygen + python3-dev + xerces-c-dev + opencascade-dev + glew-dev + gtest-dev + vtk-dev + libmedc-dev + eigen-dev + coin-dev + libspnav-dev + pyside6-dev + py3-shiboken6 + py3-pivy + py3-matplotlib + swig + jsoncpp-dev + freeimage-dev + qt6-qtbase-dev + qt6-qtsvg-dev + qt6-qttools-dev + yaml-cpp-dev" +subpackages="$pkgname-doc $pkgname-dev" +options="!check" +source="$pkgname-$pkgver.tar.gz::https://github.com/FreeCAD/FreeCAD/archive/$pkgver.tar.gz + OndselSolver-$_ondsel_ver.tar.gz::https://github.com/Ondsel-Development/OndselSolver/archive/$_ondsel_ver.tar.gz + GSL-$_gsl_ver.tar.gz::https://github.com/microsoft/GSL/archive/$_gsl_ver.tar.gz + no-execinfo.patch" +builddir="$srcdir/FreeCAD-$pkgver" + +prepare() { + default_prepare + + cp -r $srcdir/OndselSolver-$_ondsel_ver/* $builddir/src/3rdParty/OndselSolver + cp -r $srcdir/GSL-$_gsl_ver/* $builddir/src/3rdParty/GSL +} + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DFREECAD_QT_VERSION=6 \ + -DFREECAD_USE_EXTERNAL_PIVY=ON \ + -DBUILD_FLAT_MESH=ON \ + -DENABLE_DEVELOPER_TESTS=OFF \ + -DBUILD_TEST=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_DATAROOTDIR=/usr/share \ + -DCMAKE_INSTALL_DATADIR=/usr/share/$pkgname + ninja -C build +} + +package() { + DESTDIR="$pkgdir" ninja -C build install +} + +sha512sums=" +afc1079ea04fd5bb8135f8ad1012d9e4e05c8839dd0a4e00253eada58fe018f445c1200d1ca7ac9f268644c946cbf55b7b313dc3d6bd010f9da3a3334103b7db freecad-1.0.0.tar.gz +8b08a668c63b57a49b8d95308f31496c1bcb27a5fb024d2e6b9744bd2e4819e82c59f68a8b99cc1be3e2bdfcdf435da5e342afaff4f28d97a849f9c01736af89 OndselSolver-2e3659c4bce3e6885269e0cb3d640261b2a91108.tar.gz +01ae556b70f7b5b572d15a427a6a5e0e7a4047727958be4c61d7dd84fc3bc97aebeaebf60c48064c565884441605fca180d5fdc8c920d35b2a8874664c024b01 GSL-b39e7e4b0987859f5b19ff7686b149c916588658.tar.gz +2f190118bddbf2e070519d0244eafd15ae7919f9759f925f593ce43988a7f9ab023c50bec3768404926e8cc661e829f6a55bec5e9e58c58735c050338fbcec16 no-execinfo.patch +" diff --git a/backports/freecad/no-execinfo.patch b/backports/freecad/no-execinfo.patch new file mode 100644 index 0000000..9443301 --- /dev/null +++ b/backports/freecad/no-execinfo.patch @@ -0,0 +1,54 @@ +From 9cd1f5e5b90ef2e17c61719ffdb2f6c43cbae185 Mon Sep 17 00:00:00 2001 +From: Bryce Vandegrift +Date: Sun, 24 Nov 2024 18:19:39 -0500 +Subject: [PATCH] Remove dependency on execinfo.h + +--- + .../salomesmesh/src/DriverSTL/Basics_Utils.cpp | 11 ----------- + src/App/Application.cpp | 1 - + 2 files changed, 12 deletions(-) + +diff --git a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp +index 23c5083fdf..5ea06ad3f4 100644 +--- a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp ++++ b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp +@@ -29,7 +29,6 @@ + #ifndef WIN32 + #include + #include +-#include + #endif + + +@@ -113,16 +112,6 @@ namespace Kernel_Utils + size_t size; + char **strings; + size_t i; +- +- size = backtrace (array, 40); +- strings = backtrace_symbols (array, size); +- +- for (i = 0; i < size; i++) +- { +- std::cerr << strings[i] << std::endl; +- } +- +- free (strings); + } + #else + #if (_MSC_VER >= 1400) // Visual Studio 2005 +diff --git a/src/App/Application.cpp b/src/App/Application.cpp +index 9384790627..9155c00d25 100644 +--- a/src/App/Application.cpp ++++ b/src/App/Application.cpp +@@ -1798,7 +1798,6 @@ static void freecadNewHandler () + #endif + + #if defined(FC_OS_LINUX) +-#include + #include + #include + +-- +2.47.0 + diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index 3d4ac08..19bacf0 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -1,8 +1,8 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=freetube -pkgver=0.21.3 -pkgrel=2 +pkgver=0.23.5 +pkgrel=1 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron license="AGPL-3.0-only" @@ -50,7 +50,7 @@ package() { } sha512sums=" -22e5ab677cd442d50237b2d62534698d8ad73a37e1731003dc23c4ea3da992b3cae936f0bb3a0a86cd4b7fba731c9fa53276cb0a6cd5bab213ff2a6c9006cb05 freetube-0.21.3.tar.gz +5811ac53788a12f94cbd4cec6f7075350c223865cb4cf4436f131b9d1197b89aa5da128d6c531d1e56a0302aa3d2523c7ba8d48edbf5f328be6fed3fbba02752 freetube-0.23.5.tar.gz 2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch " diff --git a/backports/gn/APKBUILD b/backports/gn/APKBUILD new file mode 100644 index 0000000..b5ec871 --- /dev/null +++ b/backports/gn/APKBUILD @@ -0,0 +1,59 @@ +# Contributor: TBK +maintainer="lauren n. liberda " +pkgname=gn +pkgver=0_git20250311 +pkgrel=0 +_commit=18602f6cf1168cf78302024043edc02e8bad2ffb +pkgdesc="Meta-build system that generates build files for Ninja" +arch="all" +url="https://gn.googlesource.com/gn" +license="BSD-3-Clause" +depends="samurai" +makedepends="python3 zstd" +# gitiles has no clones +source="https://ab-sn.lnl.gay/gn-$_commit.tar.zst + " +builddir="$srcdir/gn" + +_distbucket="sakamoto/lnl-aports-snapshots/" +snapshot() { + clean + deps + mkdir -p "$srcdir" && cd "$srcdir" + git clone https://gn.googlesource.com/gn + ( + cd gn + git checkout -q $_commit + python3 ./build/gen.py + ) + rm -rf gn/.git + tar cf gn-$_commit.tar gn + zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv gn-$_commit.tar \ + -o "$SRCDEST"/gn-$_commit.tar.zst + mcli cp "$SRCDEST"/gn-$_commit.tar.zst "$_distbucket" +} + +build() { + unset CFLAGS # all sources C++ but passes both + # Breaks build since upstream passes -Wno-format, + # annotated: "Use of %llx, which is supported by _UCRT, false positive" + CXXFLAGS="${CXXFLAGS/-Werror=format-security} -flto=auto" \ + python3 ./build/gen.py \ + --no-last-commit-position \ + --no-static-libstdc++ \ + --no-strip \ + --allow-warnings + ninja -C out +} + +check() { + ./out/gn_unittests +} + +package() { + install -Dm755 out/gn "$pkgdir"/usr/bin/gn +} + +sha512sums=" +9638e177bfd6eecc6af1a9323efa93dc65d1d1f3599037851d19ba076f3b0c9e91366c143e6b6e334fc63baa0bdad80415dbad4ec96585850b462e2904c836d6 gn-18602f6cf1168cf78302024043edc02e8bad2ffb.tar.zst +" diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD new file mode 100644 index 0000000..39408fc --- /dev/null +++ b/backports/libmedc/APKBUILD @@ -0,0 +1,43 @@ +# Contributor: Aiden Grossman +# Maintainer: +pkgname=libmedc +pkgver=4.1.1 +pkgrel=4 +pkgdesc="Open source library for numerical simulation" +url="https://www.salome-platform.org/" +arch="all" +license="GPL-3.0-or-later" +makedepends="cmake hdf5-dev swig3 python3-dev samurai" +options="!check" #test suite is nonfunctional with python bindings +subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" +source=" + ftp://ftp.cea.fr/pub/salome/prerequisites/med-$pkgver.tar.gz + hdf5.patch + cmake-config-dir.patch + " +builddir="$srcdir"/med-$pkgver + +build() { + cmake -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DMEDFILE_BUILD_TESTS=OFF \ + -DMEDFILE_BUILD_PYTHON=ON + cmake --build build +} + +package() { + DESTDIR="$pkgdir" cmake --install build +} + +_py() { + pkgdesc="Python bindings for libmedc" + depends="python3" + amove usr/lib/python3* +} + +sha512sums=" +f211fa82750a7cc935baa3a50a55d16e40117a0f2254b482492ba8396d82781ca84960995da7a16b2b5be0b93ce76368bf4b311bb8af0e5f0243e7051c9c554c med-4.1.1.tar.gz +68d9291e73a68d674081314028c0fce7bbd4a7b78b93b7e5078117ce62f2d07318bc33ec95091ce677148ec3926c1ce653d0760c34e74b29257a7be59210f040 hdf5.patch +8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch +" diff --git a/backports/libmedc/cmake-config-dir.patch b/backports/libmedc/cmake-config-dir.patch new file mode 100644 index 0000000..e1f43a4 --- /dev/null +++ b/backports/libmedc/cmake-config-dir.patch @@ -0,0 +1,11 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -101,7 +101,7 @@ + IF(WIN32 AND NOT CYGWIN) + SET(INSTALL_CMAKE_CONFIG_DIR cmake) + ELSE() +- SET(INSTALL_CMAKE_CONFIG_DIR share/cmake/medfile-${MED_STR_VERSION}) ++ SET(INSTALL_CMAKE_CONFIG_DIR lib${LIB_SUFFIX}/cmake/medfile-${MED_STR_VERSION}) + ENDIF() + SET(INSTALL_INCLUDE_DIR include) + diff --git a/backports/libmedc/hdf5.patch b/backports/libmedc/hdf5.patch new file mode 100644 index 0000000..bc4764b --- /dev/null +++ b/backports/libmedc/hdf5.patch @@ -0,0 +1,94 @@ +Originally from https://gist.github.com/jedbrown/527ef81ff59a0dccf833da40fdd15a47 +diff -rupN med-4.1.0/config/cmake_files/medMacros.cmake med-4.1.0-new/config/cmake_files/medMacros.cmake +--- med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-03 09:35:30.675827163 +0100 ++++ med-4.1.0-new/config/cmake_files/medMacros.cmake 2021-12-03 09:32:31.894994147 +0100 +@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) + ## + ## Requires 1.10.x version + ## +- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1) ++ IF (HDF5_VERSION VERSION_LESS 1.10.2) + MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.") + ENDIF() + ## +diff -rupN med-4.1.0/src/ci/MEDfileCompatibility.c med-4.1.0-new/src/ci/MEDfileCompatibility.c +--- med-4.1.0/src/ci/MEDfileCompatibility.c 2021-12-03 09:35:30.676827162 +0100 ++++ med-4.1.0-new/src/ci/MEDfileCompatibility.c 2021-12-03 09:33:26.292942149 +0100 +@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const f + _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease; + /* ISCRUTE(_hversionMMR); */ + /* ISCRUTE(HDF_VERSION_NUM_REF); */ +- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE; ++ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE; + + /* TODO : Vérifier si la version mineure HDF du fichier est supérieure + à la version mineure de la bibliothèque HDF utilisée : +@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const f + #if MED_NUM_MAJEUR != 4 + #error "Don't forget to update the test version here when you change the major version of the library !" + #endif +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" + #error "Cf. _MEDfileCreate ..." + #endif +diff -rupN med-4.1.0/src/hdfi/_MEDfileCreate.c med-4.1.0-new/src/hdfi/_MEDfileCreate.c +--- med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-03 09:35:30.677827161 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDfileCreate.c 2021-12-03 09:32:31.894994147 +0100 +@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * cons + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN med-4.1.0/src/hdfi/_MEDfileOpen.c med-4.1.0-new/src/hdfi/_MEDfileOpen.c +--- med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-03 09:35:30.677827161 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDfileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const + + • The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + /* L'avantage de bloquer le modèle interne HDF5 +diff -rupN med-4.1.0/src/hdfi/_MEDmemFileOpen.c med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c +--- med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:35:30.678827160 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * con + goto ERROR; + } + +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) { +diff -rupN med-4.1.0/src/hdfi/_MEDparFileCreate.c med-4.1.0-new/src/hdfi/_MEDparFileCreate.c +--- med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:35:30.678827160 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:32:31.894994147 +0100 +@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN med-4.1.0/src/hdfi/_MEDparFileOpen.c med-4.1.0-new/src/hdfi/_MEDparFileOpen.c +--- med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:35:30.679827159 +0100 ++++ med-4.1.0-new/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:32:31.894994147 +0100 +@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * con + MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG); + goto ERROR; + } +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) { diff --git a/backports/nb/APKBUILD b/backports/nb/APKBUILD index d8b8b08..d5ba0c6 100644 --- a/backports/nb/APKBUILD +++ b/backports/nb/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Quillith # Maintainer: Quillith pkgname=nb -pkgver=7.12.1 +pkgver=7.15.1 pkgrel=0 pkgdesc="Command line note-taking, bookmarking, archiving, and knowledge base application" url="https://github.com/xwmx/nb" @@ -41,5 +41,5 @@ full() { } sha512sums=" -ed3d41a809e39a19711c6c97c38216f17f144b8b474eb94aec4134f9756da03440073f3f6557acf8f7959d3d9fba6392d1d5f59e8b94d5269b7336b11353457e nb-7.12.1.tar.gz +95229ac3c7da47c8e8e80fb68376dcf866fa2c2799e0c150e225f453e92b714c592dd67e016054a6a6f7d53c09f7cc537250217057d42872fb273ee911e82757 nb-7.15.1.tar.gz " diff --git a/backports/pnpm/0001-no-check-for-updates.patch b/backports/pnpm/0001-no-check-for-updates.patch new file mode 100644 index 0000000..2d74688 --- /dev/null +++ b/backports/pnpm/0001-no-check-for-updates.patch @@ -0,0 +1,14 @@ +Disable available update messages as it outputs invalid upgrade process + +diff --git a/dist/pnpm.cjs b/dist/pnpm.cjs +index b93ea78..6daefd6 100644 +--- a/dist/pnpm.cjs ++++ b/dist/pnpm.cjs +@@ -114026,6 +114026,7 @@ var require_checkForUpdates = __commonJS({ + var write_json_file_1 = __importDefault2(require_write_json_file()); + var UPDATE_CHECK_FREQUENCY = 24 * 60 * 60 * 1e3; + async function checkForUpdates(config) { ++ return; + const stateFile = path_1.default.join(config.stateDir, "pnpm-state.json"); + let state; + try { diff --git a/backports/pnpm/0002-no-self-update.patch b/backports/pnpm/0002-no-self-update.patch new file mode 100644 index 0000000..b016ecc --- /dev/null +++ b/backports/pnpm/0002-no-self-update.patch @@ -0,0 +1,14 @@ +Disable command "pnpm self-update" as we install via apk + +diff --git a/dist/pnpm.cjs b/dist/pnpm.cjs +index b93ea78..8da50c3 100644 +--- a/dist/pnpm.cjs ++++ b/dist/pnpm.cjs +@@ -220258,6 +220258,7 @@ var require_selfUpdate = __commonJS({ + }); + } + async function handler(opts, params) { ++ throw new error_1.PnpmError("CANT_SELF_UPDATE_IN_APK", "You should update pnpm with apk"); + if ((0, cli_meta_1.isExecutedByCorepack)()) { + throw new error_1.PnpmError("CANT_SELF_UPDATE_IN_COREPACK", "You should update pnpm with corepack"); + } diff --git a/backports/pnpm/APKBUILD b/backports/pnpm/APKBUILD new file mode 100644 index 0000000..8772842 --- /dev/null +++ b/backports/pnpm/APKBUILD @@ -0,0 +1,73 @@ +# Contributor: Hygna +# Contributor: Fabricio Silva +maintainer="Fabricio Silva " +pkgname=pnpm +pkgver=10.9.0 +pkgrel=0 +pkgdesc="Fast, disk space efficient package manager" +url="https://pnpm.io" +arch="noarch" +license="MIT" +depends="nodejs" +subpackages=" + $pkgname-doc + $pkgname-bash-completion + $pkgname-zsh-completion + $pkgname-fish-completion + " +source="https://registry.npmjs.org/pnpm/-/pnpm-$pkgver.tgz + 0001-no-check-for-updates.patch + 0002-no-self-update.patch + " +builddir="$srcdir/package" + +prepare() { + default_prepare + + # remove node-gyp + rm -rf dist/node-gyp-bin dist/node_modules/node-gyp + # remove windows files + rm -rf dist/vendor/*.exe + + # remove other unnecessary files + find . -type f \( \ + -name '.*' -o \ + -name '*.cmd' -o \ + -name '*.bat' -o \ + -name '*.map' -o \ + -name '*.md' -o \ + -name '*.darwin*' -o \ + -name '*.win*' -o \ + -iname 'README*' \) -delete +} + +check() { + ./bin/pnpm.cjs --help +} + +package() { + local destdir="$pkgdir"/usr/share/node_modules/$pkgname + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname + + install -Dm644 dist/templates/completion.bash \ + "$pkgdir"/usr/share/bash-completion/completions/$pkgname + install -Dm644 dist/templates/completion.zsh \ + "$pkgdir"/usr/share/zsh/site-functions/_$pkgname + install -Dm644 dist/templates/completion.fish \ + "$pkgdir"/usr/share/fish/vendor_completions.d/$pkgname.fish + + install -Dm644 package.json -t "$destdir" + install -Dm755 bin/pnpm.cjs bin/pnpx.cjs -t "$destdir"/bin + cp -r dist "$destdir"/dist + + mkdir -p "$pkgdir"/usr/bin + ln -sf ../share/node_modules/pnpm/bin/pnpm.cjs "$pkgdir"/usr/bin/pnpm + ln -sf ../share/node_modules/pnpm/bin/pnpx.cjs "$pkgdir"/usr/bin/pnpx +} + +sha512sums=" +0486e394640d3c1fb3c9d43d49cf92879ff74f8516959c235308f5a8f62e2e19528a65cdc2a3058f587cde71eba3d5b56327c8c33a97e4c4051ca48a10ca2d5f pnpm-10.9.0.tgz +f53903c506a676393dd8b31e1194b92612bfa877a8e17edc530e308921caf454248e181a3e620a17a941eba126349128963b2b0b1e48f8d927307c9cf335290e 0001-no-check-for-updates.patch +5582d11fcd1782f40a4f9269b477af25057e3a3d60cddef8b64a8592fafdc7a572822c8267a7abf9e8bfa4b726dcb291885642070a838e360fc542cee10c9569 0002-no-self-update.patch +" diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD index c0b8c6d..051f2c9 100644 --- a/backports/py3-apsw/APKBUILD +++ b/backports/py3-apsw/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Francesco Colista pkgname=py3-apsw _pkgname=apsw -pkgver=3.46.1.0 +pkgver=3.47.2.0 pkgrel=0 pkgdesc="Another Python SQLite Wrapper" url="https://github.com/rogerbinns/apsw" @@ -41,6 +41,6 @@ package() { } sha512sums=" -8d24825c8346b05a99b8959ce1fd45ae5162c95b020ecc63bd3491bfd1579370a0e6b1a962f7f64a7e7e415846007e64d90b28e2065ae047e228d60b12b9cb02 py3-apsw-3.46.1.0.zip +9884f36811bfff7276642841ebaa198669c48f4d54bb764a985ea5bdd88f9f630f9fd8a13cf0a44b5675e374c2a911fcec579ca4165622e8049bff327ef66c1d py3-apsw-3.47.2.0.zip 8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch " diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD index deb152a..f2efb49 100644 --- a/backports/py3-colored/APKBUILD +++ b/backports/py3-colored/APKBUILD @@ -1,14 +1,14 @@ -# Maintainer: Hoang Nguyen +# Maintainer: Antoine Martin (ayakael) pkgname=py3-colored _pyname=${pkgname/py3-/} -pkgver=1.4.4 -pkgrel=3 +pkgver=2.2.4 +pkgrel=0 pkgdesc="Simple Python library for color and formatting in terminal" url="https://gitlab.com/dslackw/colored" arch="noarch" license="MIT" depends="python3" -makedepends="py3-setuptools py3-gpep517" +makedepends="py3-setuptools py3-gpep517 py3-flit" checkdepends="py3-pytest" subpackages="$pkgname-pyc" source="https://gitlab.com/dslackw/colored/-/archive/$pkgver/colored-$pkgver.tar.gz" @@ -27,5 +27,5 @@ package() { } sha512sums=" -d49075f97bcc220802a8a64780b4c3910acd420e7e0e82ee71659132e7a294a638b098e4e46ae54f531739f8a43cd35979e521c02bb359205a13d96e37cfe8ed colored-1.4.4.tar.gz +8fd293c95c2cfa6c3c31a91f946414e5c2581ea12a60e38ad1e6a5e44a85589a81c5e8205c4c518ed0d809840bf1b37b0cb5af4cf48c0706aa52017bf9c04489 colored-2.2.4.tar.gz " diff --git a/backports/py3-levenshtein/APKBUILD b/backports/py3-levenshtein/APKBUILD index c146867..d6a7572 100644 --- a/backports/py3-levenshtein/APKBUILD +++ b/backports/py3-levenshtein/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Galen Abell # Maintainer: Galen Abell pkgname=py3-levenshtein -pkgver=0.25.1 -pkgrel=2 +pkgver=0.26.1 +pkgrel=0 pkgdesc="Python extension for computing string edit distances and similarities" url="https://github.com/maxbachmann/Levenshtein" arch="all" @@ -13,6 +13,7 @@ makedepends=" cython py3-gpep517 py3-scikit-build + py3-scikit-build-core python3-dev rapidfuzz samurai @@ -31,15 +32,15 @@ build() { check() { python3 -m venv --clear --without-pip --system-site-packages .testenv .testenv/bin/python3 -m installer \ - .dist/Levenshtein*.whl + .dist/levenshtein*.whl .testenv/bin/python3 -m pytest } package() { python3 -m installer -d "$pkgdir" \ - .dist/Levenshtein*.whl + .dist/levenshtein*.whl } sha512sums=" -936dab36b15df6f2ee5425efb1fdb1490fb8f618ba453f464a6dd615bcc427e55ceee7474f06b34392871d9f38470b853602a11d8f9776eee66ec34156511ca4 py3-levenshtein-0.25.1.tar.gz +589b1f404108f488caf880063f20ee9c6a2033b0a2cd819352bf15e285ea8537c1dc8117de70679f720fd3da47546f7e0e5c620e4da8cf09bf8df9b119e6abc9 py3-levenshtein-0.26.1.tar.gz " diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD index 814a4bd..af4516d 100644 --- a/backports/py3-limits/APKBUILD +++ b/backports/py3-limits/APKBUILD @@ -1,8 +1,8 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-limits -pkgver=3.13.0 -pkgrel=1 +pkgver=3.14.1 +pkgrel=0 pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" url="https://github.com/alisaifee/limits" arch="noarch" @@ -19,14 +19,16 @@ checkdepends=" py3-pytest-asyncio py3-pytest-benchmark py3-pytest-cov + py3-pytest-lazy-fixtures + py3-pymemcache py3-redis " subpackages="$pkgname-pyc" -options="!check" # most tests are integration with db connections, assume all connectors installed source=" https://github.com/alisaifee/limits/archive/refs/tags/$pkgver/limits-$pkgver.tar.gz our-std-is-good-enough.patch + tests-drop-etcd3-and-k-argument.patch " builddir="$srcdir/limits-$pkgver" @@ -39,7 +41,7 @@ build() { check() { python3 -m venv --clear --without-pip --system-site-packages .testenv gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest \ + .testenv/bin/python3 -m pytest -W ignore::DeprecationWarning \ -m 'not benchmark and not etcd and not integration and not memcached' \ -k 'not aio and not Storage and not strategy' -v } @@ -50,6 +52,7 @@ package() { } sha512sums=" -0a13d08001c2f95e559ac1be35fa8cc178ad2d41bd5bf7b7e85781a428f550c350c21b92942b5b7e45f0f4c0604e96e579c8a26b5e9ca1196e6605608721030a limits-3.13.0.tar.gz -0364d51f9f879b95c6a4a3c9e9fd3d7d1e15ea214c50ae98cd36826b8c0b2d903cf1128741ac83738e305a207dae8955a0b2c8679484d2d6643e334595bdb1d7 our-std-is-good-enough.patch +f30c7ec19c2d1edad9ed77dc590ae35717efa3956a4d97e465793e1923a4af08dc9921d90ee95d3c54ce3364b867ca67a9de62c61d627e07a3f50da20bdabd0f limits-3.14.1.tar.gz +271e3b0501f9f144eda8d2e96c93b285714e339b9217385e38cdbce1f4dec88f9c949e9419f8be94885092e7977f7dca29b86b5499e9fead678b42a686c337db our-std-is-good-enough.patch +e84f4db49349a6feba0f701b9d4357c5f66d64c4a23f8ce512528b0f44b5bbef55041c02d92aae3a4cc8d5340846f9e909217beb869a5aeb49df166dd29ae9e3 tests-drop-etcd3-and-k-argument.patch " diff --git a/backports/py3-limits/our-std-is-good-enough.patch b/backports/py3-limits/our-std-is-good-enough.patch index 94c0c30..32d7d73 100644 --- a/backports/py3-limits/our-std-is-good-enough.patch +++ b/backports/py3-limits/our-std-is-good-enough.patch @@ -1,14 +1,3 @@ ---- ./limits/util.py.orig -+++ ./limits/util.py -@@ -8,7 +8,7 @@ - from types import ModuleType - from typing import TYPE_CHECKING, cast - --import importlib_resources -+from importlib import resources as importlib_resources - from packaging.version import Version - - from limits.typing import Dict, List, NamedTuple, Optional, Tuple, Type, Union --- ./limits/typing.py.orig +++ ./limits/typing.py @@ -13,7 +13,7 @@ @@ -19,4 +8,4 @@ +from typing import ClassVar, Counter, ParamSpec, Protocol, TypeAlias Serializable = Union[int, str, float] - + diff --git a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch new file mode 100644 index 0000000..cab3a06 --- /dev/null +++ b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch @@ -0,0 +1,24 @@ +diff --git a/tests/conftest.py.orig b/tests/conftest.py +index 2aeb758dda6..a9b2b8b2bd1 100644 +--- a/tests/conftest.py.orig ++++ b/tests/conftest.py +@@ -3,7 +3,6 @@ import platform + import socket + import time + +-import etcd3 + import pymemcache + import pymemcache.client + import pymongo +diff --git a/pytest.ini.orig b/pytest.ini +index 38c40a713d0..8c6659e21c2 100644 +--- a/pytest.ini.orig ++++ b/pytest.ini +@@ -17,7 +17,6 @@ addopts = + -rfEsxX + --cov=limits + -m "not benchmark" +- -K + filterwarnings = + error + module::ResourceWarning diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD index fc26a08..94d2053 100644 --- a/backports/py3-pathvalidate/APKBUILD +++ b/backports/py3-pathvalidate/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: lauren n. liberda pkgname=py3-pathvalidate -pkgver=3.2.1 +pkgver=3.2.3 pkgrel=0 pkgdesc="Python library to sanitize/validate a string such as filenames/file-paths/etc" url="https://github.com/thombashi/pathvalidate" @@ -33,5 +33,5 @@ package() { } sha512sums=" -094bb442258ba58fff11691f5b60976513924443247e808effbc26b9dd6c336f5f84d8e4563643b7def19d9f82170eb9ec6cd89491f9115df8d1634d2aa12206 pathvalidate-3.2.1.tar.gz +674cddcf94d4f03aff5fe968c4c678f6fa510c8ff4dfd9232b2b075ccfaa17de86a08d497c10664399694c5e72b354d452d75f11f6b40d2f9778a2466af0b265 pathvalidate-3.2.3.tar.gz " diff --git a/backports/rapidfuzz/APKBUILD b/backports/rapidfuzz/APKBUILD index 4194b3a..aa0eefd 100644 --- a/backports/rapidfuzz/APKBUILD +++ b/backports/rapidfuzz/APKBUILD @@ -1,6 +1,6 @@ -# Maintainer: +# Maintainer: Antoine Martin (ayakael) pkgname=rapidfuzz -pkgver=3.0.0 +pkgver=3.2.0 pkgrel=0 pkgdesc="Rapid fuzzy string matching in C++ using the Levenshtein Distance" url="https://github.com/maxbachmann/rapidfuzz-cpp" @@ -40,6 +40,6 @@ package() { } sha512sums=" -c5f20399bd1cfaa057c40cc17be5d730d50c1014553241f80f461a2fa89de670357d17a4f090394170263b09a53aa29238e5eff2caf9064a2a118c42aa14f320 rapidfuzz-cpp-3.0.0.tar.gz +cf306fc4a6c0b6fc1a1c3b0b235aa54588bd87a5d07f96c1bc9711a08159ca71580b5958e66e8b4358d34e522041934903079aabe6e5a450cece7d6db6edcbe0 rapidfuzz-cpp-3.2.0.tar.gz 216c5082498830d42d2eb14d3eba35dd08446008916c920db7b55eaf3dd2358f86a61c238315b85fefecf08b9e902dc4db172f91a8479cfd735e53c7b3e03bf5 cstdint.patch " diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index 0bfb575..aea8d4c 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,14 +2,14 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.34.0 +pkgver=7.54.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron arch="aarch64 x86_64" license="AGPL-3.0-only" -_llvmver=18 +_llvmver=19 depends=" electron font-barlow @@ -40,16 +40,16 @@ makedepends=" libavif-dev libjpeg-turbo-dev libepoxy-dev - libevent-dev libsecret-dev libvpx-dev libwebp-dev libxml2-dev - lld$_llvmver + lld llvm$_llvmver-dev mesa-dev nodejs npm + pnpm openh264-dev openssl-dev opus-dev @@ -58,6 +58,7 @@ makedepends=" pulseaudio-dev py3-setuptools python3 + re2-dev samurai sqlcipher-dev vips-dev @@ -66,31 +67,35 @@ makedepends=" options="net !check" # use _check_depends to validate this -_libsignalver=0.60.2 -_ringrtcver=2.48.7 -_webrtcver=6723a -_stokenizerver=0.2.1 +_libsignalver=0.70.0 +_ringrtcver=2.51.0 +_webrtcver=6998b +_sqlcipherver=2.0.1 source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz https://github.com/signalapp/libsignal/archive/refs/tags/v$_libsignalver/libsignal-$_libsignalver.tar.gz https://github.com/signalapp/ringrtc/archive/refs/tags/v$_ringrtcver/ringrtc-$_ringrtcver.tar.gz + https://github.com/signalapp/node-sqlcipher/archive/refs/tags/v$_sqlcipherver/node-sqlcipher-$_sqlcipherver.tar.gz https://ayakael.net/api/packages/mirrors/generic/webrtc/$_webrtcver/webrtc-$_webrtcver.tar.zst - https://github.com/signalapp/Signal-FTS5-Extension/archive/refs/tags/v$_stokenizerver/stokenizer-$_stokenizerver.tar.gz libsignal-auditable.patch signal-use-system-sqlcipher.patch signal-disable-updates.patch signal-update-links.patch signal-show-window-please.patch + signal-rollback-locale-changes.patch + signal-do-not-package-sqlcipher-deps.patch ringrtc-webrtc-renamed.patch webrtc-shared-libs.patch webrtc-compiler.patch webrtc-gcc13.patch + webrtc-rollback-red.patch + webrtc-rollback-3rdparty-build-gn.patch - signal-desktop + signal-desktop.sh " -builddir="$srcdir/Signal-Desktop-$pkgver" +builddir="$srcdir" # webrtc broken on clang https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101227 export CC=gcc @@ -112,24 +117,25 @@ export CARGO_PROFILE_RELEASE_STRIP="symbols" export YARN_CACHE_FOLDER="$srcdir/.yarn" -_check_depends() { +_update_depends() { + msg "Updating extra dependencies version information in $APKBUILD..." # _libsignalver: follow signal-desktop package.json -> @signalapp/libsignal-client # _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc # _webrtcver: follow ringrtc (on version above) -> config/version.properties -> webrtc.version # downloading tarball generated with abuild snapshot (with gclient dependencies fetched) - # _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) -> deps/download.js -> TOKENIZER_VERSION + # _sqlcipherver: follow signal-desktop package.json -> @signalapp/sqlcipher - local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - local _bsqlitever=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package-lock.json | grep "@signalapp/better-sqlite3\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) + local _libsignalver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/libsignal-client\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) + local _ringrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/ringrtc\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) local _webrtcver=$(curl --silent https://raw.githubusercontent.com/signalapp/ringrtc/v$_ringrtcver/config/version.properties | awk -F '=' '{if($1 == "webrtc.version"){print $2}}' | head -n 1) - local _extensionver=$(curl --silent https://raw.githubusercontent.com/signalapp/better-sqlite3/v$_bsqlitever/deps/download.js | grep "const EXTENSION_VERSION" | awk '{print $4}' | tr -d "'" | tr -d ';' | head -n 1) - local _stokenizerver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Sqlcipher-Extension/refs/tags/v$_extensionver/Cargo.lock | sed -n "/^name = \"signal-tokenizer\"$/,/^$/p" | awk -F ' = ' '{if($1=="version"){print $2}}' | tr -d '"') + local _sqlcipherver=$(curl --silent https://raw.githubusercontent.com/signalapp/Signal-Desktop/v$pkgver/package.json | grep "@signalapp/sqlcipher\": \"" | awk '{print $2}' | tr -d ',' | tr -d '"' | head -n 1) - echo _libsignalver=$_libsignalver - echo _ringrtcver=$_ringrtcver - echo _webrtcver=$_webrtcver - echo _stokenizerver=$_stokenizerver + sed -i \ + -e "s|^_libsignalver=.*|_libsignalver=$_libsignalver|" \ + -e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \ + -e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \ + -e "s|^_sqlcipherver=.*|_sqlcipherver=$_sqlcipherver|" \ + APKBUILD } # webrtc only, the other dependencies are fine with tarballs @@ -183,14 +189,21 @@ target_cpu_only = True prepare() { # Moves to builddir to use abuild patch logics - for i in libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver Signal-FTS5-Extension-$_stokenizerver; do + for i in Signal-Desktop-$pkgver libsignal-$_libsignalver ringrtc-$_ringrtcver webrtc-$_webrtcver node-sqlcipher-$_sqlcipherver; do mv "$srcdir"/$i "$builddir"/${i%-*} done + default_prepare + + cd "$builddir"/Signal-Desktop + + # puts node modules in the root node_modules instead of under .pnpm + echo "node-linker=hoisted" >> .npmrc msg "Installing signal-desktop JS dependencies" - npm ci --ignore-scripts + pnpm install --ignore-scripts - default_prepare + # remove shipped fonts for system-provided (part 1) + rm -rf fonts/ ( cd "$builddir"/webrtc @@ -211,7 +224,6 @@ prepare() { libaom libavif libdrm - libevent libjpeg libpng libsecret @@ -245,6 +257,9 @@ prepare() { python3 build/linux/unbundle/replace_gn_files.py --system-libraries \ $use_system + # zlib depends on base for no reason + sed -i '/\/\/base/d' ./third_party/zlib/BUILD.gn + # allow system dependencies in "official builds" sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \ tools/generate_shim_headers/generate_shim_headers.py @@ -268,10 +283,13 @@ prepare() { ) ( - cd "$builddir"/Signal-FTS5-Extension + cd "$builddir"/node-sqlcipher - msg "Installing signal tokenizer rust dependencies" - cargo fetch --target="$CTARGET" --locked + # fix target + sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' deps/extension/extension.gyp + + msg "Installing sqlcipher js dependencies" + pnpm install --ignore-scripts ) ( @@ -290,9 +308,6 @@ prepare() { msg "Installing libsignal js dependencies" yarn --ignore-scripts --frozen-lockfile ) - - # remove shipped fonts for system-provided (part 1) - rm -rf fonts/ } build() { @@ -379,58 +394,73 @@ build() { ) ( - cd "$builddir"/Signal-FTS5-Extension + cd "$builddir"/node-sqlcipher - msg "Building signal tokenizer" - cargo auditable build --features extension --release --frozen - cbindgen --profile release . -o target/release/signal-tokenizer.h + ( + cd deps/extension + msg "Building sqlcipher-extension" + cargo auditable build --release --target $CTARGET + ) + + msg "Building sqlcipher" + node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source + node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source + + msg "Building sqlcipher glue code" + pnpm build + + mkdir -p prebuilds/linux-$chromium_arch + mv build/Release/obj.target/node_sqlcipher.node prebuilds/linux-$chromium_arch/node.napi.node + + msg "Cleaning dev dependencies for sqlcipher" + pnpm prune --ignore-scripts --prod ) + msg "Building signal-desktop" + cd "$builddir"/Signal-Desktop + # from package.json postinstall - npm run build:acknowledgments - npm exec patch-package + pnpm run build:acknowledgments rm -rf node_modules/dtrace-provider # get esbuild installed (needed for next step) - npm rebuild esbuild + pnpm rebuild esbuild # build front + # resets GIT_CEILING_DIRECTORIES as sometimes abuild sets this and breaks get-expire-time NODE_ENV=production \ SIGNAL_ENV=production \ NODE_OPTIONS=--openssl-legacy-provider \ - npm run build:dev + GIT_CEILING_DIRECTORIES= \ + pnpm run build:dev # purge non-production deps - npm prune --ignore-scripts --omit=dev + pnpm prune --ignore-scripts --prod # use our libsignal rm -rf node_modules/@signalapp/libsignal-client/ - mv libsignal/node/ node_modules/@signalapp/libsignal-client + cp -r "$builddir"/libsignal/node/ node_modules/@signalapp/libsignal-client # use our libringrtc rm -rf node_modules/@signalapp/ringrtc/ - mv ringrtc/src/node/ node_modules/@signalapp/ringrtc + cp -r "$builddir"/ringrtc/src/node/ node_modules/@signalapp/ringrtc - mkdir node_modules/@signalapp/better-sqlite3/tokenizer - mv Signal-FTS5-Extension/target/release/libsignal_tokenizer.a node_modules/@signalapp/better-sqlite3/tokenizer/ - mv Signal-FTS5-Extension/target/release/signal-tokenizer.h node_modules/@signalapp/better-sqlite3/tokenizer/ - - npm rebuild \ - sharp @signalapp/better-sqlite3 spellchecker websocket \ - utf-8-validate bufferutil fs-xattr \ - --nodedir=/usr/include/electron/node_headers --build-from-source + # use our sqlcipher + rm -rf node_modules/@signalapp/sqlcipher/ + cp -r "$builddir"/node-sqlcipher node_modules/@signalapp/sqlcipher SIGNAL_ENV=production \ tasje pack } check() { + cd "$builddir"/Signal-Desktop # tests run against downloaded build of electron for glibc, probably can be patched - npm run test + pnpm run test } package() { - cd "$builddir"/tasje_out + cd "$builddir"/Signal-Desktop/tasje_out install -Dm644 resources/app.asar "$pkgdir"/usr/lib/$pkgname/app.asar cp -r resources/app.asar.unpacked "$pkgdir"/usr/lib/$pkgname/app.asar.unpacked @@ -439,7 +469,7 @@ package() { # this should be in /usr/lib/signal-desktop. however, it does not simply work and I stopped to care install -Dm755 "$builddir"/ringrtc/out/release/libsignaldeswebrtc.so "$pkgdir"/usr/lib/libsignaldeswebrtc.so - install -Dm755 "$srcdir"/signal-desktop "$pkgdir"/usr/bin/signal-desktop + install -Dm755 "$srcdir"/signal-desktop.sh "$pkgdir"/usr/bin/signal-desktop while read -r size; do install -Dm644 icons/$size.png "$pkgdir"/usr/share/icons/hicolor/$size/apps/$pkgname.png @@ -447,19 +477,23 @@ package() { } sha512sums=" -30e06721b01e580414c5e57b63350fc42edbe837b0a60a9cd100bc6ab1758fa6fd5744dc3a35d991db62f363eab791c45b43e1d9d5c81af9e67685114ae2e630 Signal-Desktop-7.34.0.tar.gz -26780a0a6a529cee18f5c3b58f0395c6b5b630dbc8d2bbaa345dd7dd319a0e8548575c915dc16de6ac5d421fffdbe898f2dedb1fa3b4eab5d26debdfc1da515b libsignal-0.60.2.tar.gz -e5e5ab27dc3bd37ef577c248d450e70fa11e72bdfab00fef233aad84d3d8aa3434166c03267f6b95b69d593e9da2f37017b5b7a0913f68499f387354742ba50a ringrtc-2.48.7.tar.gz -64eed5c2a6f5a505d014bc4fa80e15b21103df1ea27825eaa1dfecc23c269f198a7e98472f29de7cae4ac7fa4fede6e837c27494b8ec4d03e36b85b029c64831 webrtc-6723a.tar.zst -84a1f2fc29262a12842e94698d124a85b823128e72a493b0be8ea92fbb72c5c268499f4a6827cdedaae06ec73cce4039a39fe5c5d536cbef330e59ba0183da28 stokenizer-0.2.1.tar.gz +ca512bfdd8c78b6c440214db95347b59928314cd27d74b22828de5d701aaf8e675eb5c71603bb6a39fd224812204d9f656290637d402966760bdb3958d3923c8 Signal-Desktop-7.54.0.tar.gz +52d66cf2643402673858def81a9a3c98a0d16525e126c9e5ea1e3c62150f321e486c8c79bcea11a9636c9b05f541fdf0718869d52b9a789f05cad741ba37c7ad libsignal-0.70.0.tar.gz +8e32d75f9f8216106b6858d9ab58ad53f209408fc155fe27dec184c8c65c9ab5a3a93e9567953f209424ed435ccc6d4903a49a4edae36eb744a897cc02098312 ringrtc-2.51.0.tar.gz +592987c1661de464a4e6dee3081cb5fd32e5afdacdba43d901557a217e62301b4655009ad5bdc0c1dcff5e8b67d7acd68ac953cd638f31196162aa3ccdd9c63b node-sqlcipher-2.0.1.tar.gz +ba02cb0c293210f9a683b0e08c6acbe84f5b78089329ec017b0db3493b38ccf39e92c49c2475dc66b5ce3bfe060686718cb5053787e2d61ed320dadb22891989 webrtc-6998b.tar.zst 8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch -cee74edb504ee5ae685e8a449ac35fabf949c33bfee5905778f850c3b18e17f9ae9bd501c89a7fd2c9c81a5bb2b0af0c0b3c72e32128603b3923c32d2a493ce9 signal-use-system-sqlcipher.patch -152435231cdcf52a17a9e24aadf95d77511258e818172941ba074a73a90a541f0136feb58868674f2bcb19191a6d12933fe6cd5baf3ee99e508915c72523163b signal-disable-updates.patch -d50eb5724502df9ea4d795db8cfc27af767c25168d7db2af512e615be7cc2ca290210a9ae78e1abb153c0198677e858ad3d74926c958099d0319295e7d9e7f1d signal-update-links.patch -bfc8acdd13aa48d29c7657311733cc9d33c4899782efbd1ef6d25ad1698be4de7cc67e829324bc0309715d69ae37ea9f782cf54887317e817213e110d73d68e7 signal-show-window-please.patch -10284e0d86ab88de161ae689871082194f689ce416f3ebada8991d5db707994ea1cb8b4212756dd93ba5a3469964050988220f18afc37e38f3404a6e17ec8caf ringrtc-webrtc-renamed.patch +7ee747c8aaa9d6e9149fe0a031e3d4cc9e9c08f22c42076bd05e2acb86952f8170032613d13a53716010edfa3f26ad97b530e82460318eb46a42e28cf5faeb9d signal-use-system-sqlcipher.patch +fc2af28645364cd85c106304a26811b036f6be048c52137fbbcc112870a84132a181f532563e0569b560fde3cf8c02480666a9b01d804b0008f97c728005b1c7 signal-disable-updates.patch +853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049 signal-update-links.patch +882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265 signal-show-window-please.patch +aca92e4de6cd005d660d7e8b99607de96ca2d7dc220e3465247d517e915e4d41a4b0eb519e85c5eca1c81cd8bac9821acd03ff57f1603918987829c6ea7757b4 signal-rollback-locale-changes.patch +961568777b86f8fbcc73360252123686c9d1e16b2650f23d8afbc6d7580d53024f81b62e9e9cbdcd0031b5cf99854bd47c6dd4580197f2b27b8b4cbb51c6c9c9 signal-do-not-package-sqlcipher-deps.patch +02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552 ringrtc-webrtc-renamed.patch 98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch -fe78cdc58c18826fc4227cc8e9377980766229390544578f6a1a6f7322bc3243c066963b589323dbfe4f2bfd37f8859ad84f63cb3783317892e5ae3652270a3a webrtc-compiler.patch -48ab5c733e643eaff08ccbe839086bebbb68d397984ad7c5c5b68df8071f75d2dfe92c3f52d9fbf9b81754934bdfa8a67c69addd476ce4265b978592fb4ff9bd webrtc-gcc13.patch -87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop +897174fa3b1eaa74a3b2d7d861863a9f60550ddb0d7be700cd590600efdc3bd962f52c21e371276eaf8d5657c98fe8ade9853b0197b61a68d5dce6fa03b5899b webrtc-compiler.patch +3f1095861a79862ab5a55c86d7e353d272974617afba39e4d4441024bede8d7b9b8e122da90d56a9c3c0965171803d6b9e29e91d78167a08c6bcc86b3eedab18 webrtc-gcc13.patch +8f53dcf3264c5cec338f037e57a7770ec939ee06dfb0c5dfeab23967a3a64d3f861a6b5419766ac892676036b4522bce2f47279ca3658b5c0b6a31c82ac05053 webrtc-rollback-red.patch +f8bd574a0de077a643ced26e8a0e3f162e014bbf91c957bbefd113883a70e2b63e483bf400b7e2da8d09edfe76d4f6a257f194a14124f344f1625c5632d12acb webrtc-rollback-3rdparty-build-gn.patch +87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop.sh " diff --git a/backports/signal-desktop/README.md b/backports/signal-desktop/README.md new file mode 100644 index 0000000..a23f037 --- /dev/null +++ b/backports/signal-desktop/README.md @@ -0,0 +1,61 @@ +# signal-desktop + +This is the `signal-desktop` package for Alpine Linux. + +Please report any issues [using Gitlab](https://gitlab.alpinelinux.org/alpine/aports/-/issues/new) and tag @ayakael + +## Building signal-desktop + +Signal-desktop is an electron application that is rather complex to build + +The first layer of complexity is the use of dependencies that are themselves +rather complex to build. Some are based on nodejs, others rust. Those +dependencies are built before signal-desktop, like ringrtc, webrtc and +libsignal. The versions of those dependencies are tracked in different files, +which adds complexity when maintaining the package. Executing `abuild +_update_depends` automatically fetches the expected versions and updates +the relevant variables. + +A second layer of complexity is that webrtc's source code isn't available as a +downloadable tarball. It is only fetchable using Google's `gclient` available +in `depot_tools` with a reimplemented version in the `teapot` package. By +executing, `abuild snapshot`, webrtc tarball can be fetched and packaged, as +long as `gclient` is in your path. For ease of maintenance, a workflow on +[Ayakael's Forge](https://ayakael.net/mirrors/signal-desktop) automatically +fetches and packages the source code and makes it available in a [generic +Forgejo repository](https://ayakael.net/mirrors/-/packages/generic/webrtc). + +## Updating signal-desktop + +In a nutshell: + +1. Set `pkgver` to up-to-date version + +2. Update the dependency versions using `abuild _update_depends` + +3. Optional: fetch webrtc using `abuild snapshot`, making sure `client` +is in your path + +4. Update source checksum using `abuild checksum` + +## Finding dependency version information + +Here is where the version information is stored. It is different for every +extra dependency. + +* _libsignalver: follow signal-desktop package.json -> +@signalapp/libsignal-client +* _ringrtcver: follow signal-desktop package.json -> @signalapp/ringrtc +* _webrtcver: follow ringrtc (on version above) -> config/version.properties -> +webrtc.version downloading tarball generated with abuild snapshot (with gclient +dependencies fetched) +* _stokenizerver: follow @signalapp/better-sqlite3 (on version in package.json) +-> deps/download.js -> TOKENIZER_VERSION + +## Why is this package still in testing + +As `electron` is still in testing, this package cannot yet be moved to +`community`. Until that changes, this package is also kept-to-date against the +latest release of Alpine Linux (along with `electron`) in +[Ayakael's Forge](https://ayakael.net/forge/-/packages/alpine/signal-desktop). +This is true of all Ayakael's packages still in `testing`. diff --git a/backports/signal-desktop/ringrtc-webrtc-renamed.patch b/backports/signal-desktop/ringrtc-webrtc-renamed.patch index 6f8a2b3..6e5e6d1 100644 --- a/backports/signal-desktop/ringrtc-webrtc-renamed.patch +++ b/backports/signal-desktop/ringrtc-webrtc-renamed.patch @@ -1,20 +1,22 @@ ---- ./ringrtc/src/rust/build.rs.orig -+++ ./ringrtc/src/rust/build.rs -@@ -79,6 +79,7 @@ - +diff --git a/ringrtc/src/rust/build.rs.orig b/ringrtc/src/rust/build.rs +index ff2ce04d1cf..ccdaaaef84d 100644 +--- a/ringrtc/src/rust/build.rs.orig ++++ b/ringrtc/src/rust/build.rs +@@ -61,6 +61,7 @@ fn main() { if cfg!(feature = "native") { - let webrtc_dir = if cfg!(feature = "prebuilt_webrtc") { -+ panic!("trying to download prebuild webrtc"); - if let Err(e) = fs::create_dir_all(&out_dir) { - panic!("Failed to create webrtc out directory: {:?}", e); - } -@@ -86,12 +87,12 @@ - // Ignore build type since we only have release prebuilts - format!("{}/release/obj/", out_dir) - } else { -- format!("{}/{}/obj", out_dir, build_type) -+ format!("{}/{}", out_dir, build_type) - }; + let webrtc_dir = + if cfg!(feature = "prebuilt_webrtc") || cfg!(feature = "prebuilt_webrtc_sim") { ++ panic!("trying to download prebuild webrtc"); + if let Err(e) = fs::create_dir_all(&out_dir) { + panic!("Failed to create webrtc out directory: {:?}", e); + } +@@ -74,12 +75,12 @@ fn main() { + // Ignore build type since we only have release prebuilts + format!("{}/release/obj/", out_dir) + } else { +- format!("{}/{}/obj", out_dir, build_type) ++ format!("{}/{}", out_dir, build_type) + }; println!("cargo:rerun-if-changed={}", webrtc_dir); println!("cargo:rerun-if-changed={}", config_dir()); println!("cargo:rustc-link-search=native={}", webrtc_dir); diff --git a/backports/signal-desktop/signal-desktop.sh b/backports/signal-desktop/signal-desktop.sh new file mode 100755 index 0000000..370469c --- /dev/null +++ b/backports/signal-desktop/signal-desktop.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# app chooses config (including used endpoints) based on this +export NODE_ENV=production + +exec electron /usr/lib/signal-desktop/app.asar diff --git a/backports/signal-desktop/signal-disable-updates.patch b/backports/signal-desktop/signal-disable-updates.patch index 9b9c134..f5496f4 100644 --- a/backports/signal-desktop/signal-disable-updates.patch +++ b/backports/signal-desktop/signal-disable-updates.patch @@ -1,5 +1,5 @@ ---- a/config/production.json -+++ b/config/production.json +--- a/Signal-Desktop/config/production.json ++++ b/Signal-Desktop/config/production.json @@ -16,5 +16,5 @@ "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", diff --git a/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch b/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch new file mode 100644 index 0000000..c91209d --- /dev/null +++ b/backports/signal-desktop/signal-do-not-package-sqlcipher-deps.patch @@ -0,0 +1,12 @@ +diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json +index 5b7b015e20a..bb348fdb4c2 100644 +--- a/Signal-Desktop/package.json.orig ++++ b/Signal-Desktop/package.json +@@ -607,6 +607,7 @@ + "node_modules/socks/build/client/*.js", + "node_modules/smart-buffer/build/*.js", + "node_modules/@signalapp/sqlcipher/prebuilds/${platform}-${arch}/*.node", ++ "!node_modules/@signalapp/sqlcipher/deps/**", + "node_modules/@signalapp/libsignal-client/prebuilds/${platform}-${arch}/*.node", + "!node_modules/@signalapp/ringrtc/scripts/*", + "node_modules/@signalapp/ringrtc/build/${platform}/*${arch}*.node", diff --git a/backports/signal-desktop/signal-rollback-locale-changes.patch b/backports/signal-desktop/signal-rollback-locale-changes.patch new file mode 100644 index 0000000..fce29a2 --- /dev/null +++ b/backports/signal-desktop/signal-rollback-locale-changes.patch @@ -0,0 +1,225 @@ +From a094a2ca2b6d8758b4aea24389c35fc4f142b715 Mon Sep 17 00:00:00 2001 +From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> +Date: Mon, 3 Mar 2025 19:10:01 -0800 +Subject: [PATCH] Compactify locales even more + +Rollback of Compactify locales even more. For some reason, (maybe tasje?), +these new locales aren't working + +--- + app/locale.ts | 56 ++++++++++++++++-- + package.json | 2 +- + ts/scripts/generate-compact-locales.ts | 82 +++++++++++++++++++------- + 3 files changed, 112 insertions(+), 28 deletions(-) + + +diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json +index 04dd9f9200b..e7b69ef963f 100644 +--- a/Signal-Desktop/package.json.orig ++++ b/Signal-Desktop/package.json +@@ -538,10 +538,7 @@ + { + "from": "build/compact-locales", + "to": "_locales", +- "filter": [ +- "**/values.json", +- "keys.json" +- ] ++ "filter": "**/messages.json" + }, + "js/**", + "libtextsecure/**", +diff --git a/Signal-Desktop/app/locale.ts.orig b/Signal-Desktop/app/locale.ts +index a63eef4079d..2a959da4d0d 100644 +--- a/Signal-Desktop/app/locale.ts.orig ++++ b/Signal-Desktop/app/locale.ts +@@ -1,9 +1,8 @@ + // Copyright 2017 Signal Messenger, LLC + // SPDX-License-Identifier: AGPL-3.0-only + +-import { join } from 'node:path'; +-import { readFileSync } from 'node:fs'; +-import { app } from 'electron'; ++import { join } from 'path'; ++import { readFileSync } from 'fs'; + import { merge } from 'lodash'; + import * as LocaleMatcher from '@formatjs/intl-localematcher'; + import { z } from 'zod'; +@@ -16,9 +15,6 @@ import type { LocalizerType } from '../ts/types/Util'; + import * as Errors from '../ts/types/errors'; + import { parseUnknown } from '../ts/util/schemas'; + +-type CompactLocaleMessagesType = ReadonlyArray; +-type CompactLocaleKeysType = ReadonlyArray; +- + const TextInfoSchema = z.object({ + direction: z.enum(['ltr', 'rtl']), + }); +@@ -29,17 +25,6 @@ function getLocaleMessages(locale: string): LocaleMessagesType { + return JSON.parse(readFileSync(targetFile, 'utf-8')); + } + +-function getCompactLocaleKeys(): CompactLocaleKeysType { +- const targetFile = join(__dirname, '..', '_locales', 'keys.json'); +- return JSON.parse(readFileSync(targetFile, 'utf-8')); +-} +- +-function getCompactLocaleValues(locale: string): CompactLocaleMessagesType { +- const targetFile = join(__dirname, '..', '_locales', locale, 'values.json'); +- +- return JSON.parse(readFileSync(targetFile, 'utf-8')); +-} +- + export type LocaleDisplayNames = Record>; + export type CountryDisplayNames = Record>; + +@@ -154,42 +139,13 @@ export function load({ + + logger.info(`locale: Matched locale: ${matchedLocale}`); + ++ const matchedLocaleMessages = getLocaleMessages(matchedLocale); ++ const englishMessages = getLocaleMessages('en'); + const localeDisplayNames = getLocaleDisplayNames(); + const countryDisplayNames = getCountryDisplayNames(); + +- let finalMessages: LocaleMessagesType; +- if (app.isPackaged) { +- const matchedLocaleMessages = getCompactLocaleValues(matchedLocale); +- const englishMessages = getCompactLocaleValues('en'); +- const keys = getCompactLocaleKeys(); +- if (matchedLocaleMessages.length !== keys.length) { +- throw new Error( +- `Invalid "${matchedLocale}" entry count, ` + +- `${matchedLocaleMessages.length} != ${keys.length}` +- ); +- } +- if (englishMessages.length !== keys.length) { +- throw new Error( +- `Invalid "en" entry count, ${englishMessages.length} != ${keys.length}` +- ); +- } +- +- // We start with english, then overwrite that with anything present in locale +- finalMessages = Object.create(null); +- for (const [i, key] of keys.entries()) { +- finalMessages[key] = { +- messageformat: +- matchedLocaleMessages[i] ?? englishMessages[i] ?? undefined, +- }; +- } +- } else { +- const matchedLocaleMessages = getLocaleMessages(matchedLocale); +- const englishMessages = getLocaleMessages('en'); +- +- // We start with english, then overwrite that with anything present in locale +- finalMessages = merge(englishMessages, matchedLocaleMessages); +- } +- ++ // We start with english, then overwrite that with anything present in locale ++ const finalMessages = merge(englishMessages, matchedLocaleMessages); + const i18n = setupI18n(matchedLocale, finalMessages, { + renderEmojify: shouldNeverBeCalled, + }); +diff --git a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig b/Signal-Desktop/ts/scripts/generate-compact-locales.ts +index 7187d287acc..9a17d638f44 100644 +--- a/Signal-Desktop/ts/scripts/generate-compact-locales.ts.orig ++++ b/Signal-Desktop/ts/scripts/generate-compact-locales.ts +@@ -3,49 +3,6 @@ + + import { readdir, mkdir, readFile, writeFile } from 'node:fs/promises'; + import { join, dirname } from 'node:path'; +-import pMap from 'p-map'; +-import { isLocaleMessageType } from '../util/setupI18nMain'; +- +-async function compact({ +- sourceDir, +- targetDir, +- locale, +- keys, +-}: { +- sourceDir: string; +- targetDir: string; +- locale: string; +- keys: ReadonlyArray; +-}): Promise> { +- const sourcePath = join(sourceDir, locale, 'messages.json'); +- const targetPath = join(targetDir, locale, 'values.json'); +- +- await mkdir(dirname(targetPath), { recursive: true }); +- +- const json = JSON.parse(await readFile(sourcePath, 'utf8')); +- +- const result = new Array(); +- for (const key of keys) { +- if (json[key] == null) { +- // Pull English translation, or leave blank (string was deleted) +- result.push(null); +- continue; +- } +- +- const value = json[key]; +- if (!isLocaleMessageType(value)) { +- continue; +- } +- if (value.messageformat == null) { +- continue; +- } +- result.push(value.messageformat); +- } +- +- await writeFile(targetPath, JSON.stringify(result)); +- +- return keys; +-} + + async function main(): Promise { + const rootDir = join(__dirname, '..', '..'); +@@ -54,27 +11,30 @@ async function main(): Promise { + + const locales = await readdir(sourceDir); + +- const allKeys = await pMap( +- locales, +- async locale => { ++ await Promise.all( ++ locales.map(async locale => { + const sourcePath = join(sourceDir, locale, 'messages.json'); +- const json = JSON.parse(await readFile(sourcePath, 'utf8')); +- return Object.entries(json) +- .filter(([, value]) => isLocaleMessageType(value)) +- .map(([key]) => key); +- }, +- { concurrency: 10 } +- ); ++ const targetPath = join(targetDir, locale, 'messages.json'); + +- // Sort keys alphabetically for better incremental updates. +- const keys = Array.from(new Set(allKeys.flat())).sort(); +- await mkdir(targetDir, { recursive: true }); +- await writeFile(join(targetDir, 'keys.json'), JSON.stringify(keys)); ++ await mkdir(dirname(targetPath), { recursive: true }); + +- await pMap( +- locales, +- locale => compact({ sourceDir, targetDir, locale, keys }), +- { concurrency: 10 } ++ const json = JSON.parse(await readFile(sourcePath, 'utf8')); ++ for (const value of Object.values(json)) { ++ const typedValue = value as { description?: string }; ++ delete typedValue.description; ++ } ++ delete json.smartling; ++ ++ const entries = [...Object.entries(json)]; ++ ++ // Sort entries alphabetically for better incremental updates. ++ entries.sort(([a], [b]) => { ++ return a < b ? -1 : 1; ++ }); ++ ++ const result = Object.fromEntries(entries); ++ await writeFile(targetPath, JSON.stringify(result)); ++ }) + ); + } + diff --git a/backports/signal-desktop/signal-show-window-please.patch b/backports/signal-desktop/signal-show-window-please.patch index 73c94af..c8c5a65 100644 --- a/backports/signal-desktop/signal-show-window-please.patch +++ b/backports/signal-desktop/signal-show-window-please.patch @@ -1,7 +1,7 @@ -diff --git a/app/main.ts.orig b/app/main.ts +diff --git a/Signal-Desktop/app/main.ts.orig b/Signal-Desktop/app/main.ts index aa1bec8..bd7c1d5 100644 ---- a/app/main.ts.orig -+++ b/app/main.ts +--- a/Signal-Desktop/app/main.ts.orig ++++ b/Signal-Desktop/app/main.ts @@ -690,7 +690,7 @@ async function createWindow() { : DEFAULT_HEIGHT; diff --git a/backports/signal-desktop/signal-update-links.patch b/backports/signal-desktop/signal-update-links.patch index 39ec819..afd0b6b 100644 --- a/backports/signal-desktop/signal-update-links.patch +++ b/backports/signal-desktop/signal-update-links.patch @@ -1,5 +1,5 @@ ---- ./ts/components/DialogExpiredBuild.tsx.orig -+++ ./ts/components/DialogExpiredBuild.tsx +--- ./Signal-Desktop/ts/components/DialogExpiredBuild.tsx.orig ++++ ./Signal-Desktop/ts/components/DialogExpiredBuild.tsx @@ -23,9 +23,9 @@ containerWidthBreakpoint={containerWidthBreakpoint} type="error" @@ -12,8 +12,8 @@ hasAction > {i18n('icu:expiredWarning')}{' '} ---- ./ts/types/support.ts.orig -+++ ./ts/types/support.ts +--- ./Signal-Desktop/ts/types/support.ts.orig ++++ ./Signal-Desktop/ts/types/support.ts @@ -1,7 +1,7 @@ // Copyright 2023 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only diff --git a/backports/signal-desktop/signal-use-system-sqlcipher.patch b/backports/signal-desktop/signal-use-system-sqlcipher.patch index 22b2e2f..576ee66 100644 --- a/backports/signal-desktop/signal-use-system-sqlcipher.patch +++ b/backports/signal-desktop/signal-use-system-sqlcipher.patch @@ -1,26 +1,25 @@ -diff --git a/node_modules/@signalapp/better-sqlite3/binding.gyp.orig b/node_modules/@signalapp/better-sqlite3/binding.gyp -index c370c30b309..bf0207e6fec 100644 ---- a/node_modules/@signalapp/better-sqlite3/binding.gyp.orig -+++ b/node_modules/@signalapp/better-sqlite3/binding.gyp -@@ -7,7 +7,16 @@ +diff --git a/node-sqlcipher/binding.gyp.orig b/node-sqlcipher/binding.gyp +index 9a5caa2f713..8d3da54fea7 100644 +--- a/node-sqlcipher/binding.gyp.orig ++++ b/node-sqlcipher/binding.gyp +@@ -3,8 +3,15 @@ 'targets': [ { - 'target_name': 'better_sqlite3', -- 'dependencies': ['deps/sqlite3.gyp:sqlite3'], -+ 'include_dirs': [ + 'target_name': 'node_sqlcipher', ++ 'include_dirs': [ + '/usr/include/sqlcipher', -+ 'tokenizer', + ], + 'link_settings': { + 'libraries': [ + '-lsqlcipher', -+ ' #include #include + +--- ./webrtc/rtc_base/ssl_stream_adapter.h.orig ++++ ./webrtc/rtc_base/ssl_stream_adapter.h +@@ -24,6 +24,7 @@ + #include "rtc_base/ssl_certificate.h" + #include "rtc_base/ssl_identity.h" + #include "rtc_base/stream.h" ++#include + namespace rtc { + + diff --git a/backports/signal-desktop/webrtc-pipewire-1.4.patch b/backports/signal-desktop/webrtc-pipewire-1.4.patch new file mode 100644 index 0000000..2c39a9e --- /dev/null +++ b/backports/signal-desktop/webrtc-pipewire-1.4.patch @@ -0,0 +1,23 @@ +Patch-Source: https://webrtc-review.googlesource.com/c/src/+/380500 +--- +--- a/webrtc/modules/video_capture/linux/pipewire_session.cc ++++ b/webrtc/modules/video_capture/linux/pipewire_session.cc +@@ -87,7 +87,7 @@ + .param = OnNodeParam, + }; + +- pw_node_add_listener(proxy_, &node_listener_, &node_events, this); ++ pw_node_add_listener(reinterpret_cast(proxy_), &node_listener_, &node_events, this); + } + + // static +@@ -119,7 +119,7 @@ + uint32_t id = info->params[i].id; + if (id == SPA_PARAM_EnumFormat && + info->params[i].flags & SPA_PARAM_INFO_READ) { +- pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr); ++ pw_node_enum_params(reinterpret_cast(that->proxy_), 0, id, 0, UINT32_MAX, nullptr); + break; + } + } + diff --git a/backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch b/backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch new file mode 100644 index 0000000..6352e27 --- /dev/null +++ b/backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch @@ -0,0 +1,31 @@ +diff --git a/webrtc/third_party/BUILD.gn b/webrtc/third_party/BUILD.gn +index 256fd092e2e..4ce797ebad7 100644 +--- a/webrtc/third_party/BUILD.gn ++++ b/webrtc/third_party/BUILD.gn +@@ -55,12 +55,10 @@ group("jpeg_includes") { + component("freetype_harfbuzz") { + public_configs = [] + public_deps = [] +- if (enable_freetype) { +- if (use_system_freetype) { +- public_configs += [ "//build/linux:freetype_from_pkgconfig" ] +- } else { +- public_deps += [ "//third_party/freetype:freetype_source" ] +- } ++ if (use_system_freetype) { ++ public_configs += [ "//build/linux:freetype_from_pkgconfig" ] ++ } else { ++ public_deps += [ "//third_party/freetype:freetype_source" ] + } + if (use_system_harfbuzz) { + public_configs += [ "//third_party/harfbuzz-ng:harfbuzz_from_pkgconfig" ] +@@ -71,8 +69,5 @@ component("freetype_harfbuzz") { + + buildflag_header("freetype_buildflags") { + header = "freetype_buildflags.h" +- flags = [ +- "USE_SYSTEM_FREETYPE=$use_system_freetype", +- "ENABLE_FREETYPE=$enable_freetype", +- ] ++ flags = [ "USE_SYSTEM_FREETYPE=$use_system_freetype" ] + } diff --git a/backports/signal-desktop/webrtc-rollback-red.patch b/backports/signal-desktop/webrtc-rollback-red.patch new file mode 100644 index 0000000..c11eb07 --- /dev/null +++ b/backports/signal-desktop/webrtc-rollback-red.patch @@ -0,0 +1,136 @@ +diff --git a/webrtc/ringrtc/rffi/src/sdp_observer.cc b/webrtc/ringrtc/rffi/src/sdp_observer.cc +index d60f3d5e7ba..d561dedd1d0 100644 +--- a/webrtc/ringrtc/rffi/src/sdp_observer.cc ++++ b/webrtc/ringrtc/rffi/src/sdp_observer.cc +@@ -6,7 +6,7 @@ + #include "rffi/api/sdp_observer_intf.h" + #include "rffi/src/ptr.h" + #include "rffi/src/sdp_observer.h" +-#include "third_party/re2/src/re2/re2.h" ++#include + + namespace webrtc { + namespace rffi { +@@ -29,8 +29,8 @@ void CreateSessionDescriptionObserverRffi::OnSuccess(SessionDescriptionInterface + // TODO tweak the response a little + std::string sdp; + if (session_description->ToString(&sdp)) { +- static LazyRE2 ssrc_re = {".+urn:ietf:params:rtp-hdrext:ssrc-audio-level.*\r?\n"}; +- RE2::Replace(&sdp, *ssrc_re, ""); ++ sdp = std::regex_replace(sdp, std::regex("(a=fmtp:111 ((?!cbr=).)*)\r?\n"), "$1;cbr=1\r\n"); ++ sdp = std::regex_replace(sdp, std::regex(".+urn:ietf:params:rtp-hdrext:ssrc-audio-level.*\r?\n"), ""); + + std::unique_ptr session_description2 = CreateSessionDescription(session_description->GetType(), sdp); + delete session_description; +diff --git a/webrtc/ringrtc/rffi/BUILD.gn b/webrtc/ringrtc/rffi/BUILD.gn +index 4564e734e63..341535b0fc7 100644 +--- a/webrtc/ringrtc/rffi/BUILD.gn ++++ b/webrtc/ringrtc/rffi/BUILD.gn +@@ -58,7 +58,6 @@ if (is_android) { + "${android_sdk}:libjingle_peerconnection_jni", + "${android_sdk}:libjingle_peerconnection_metrics_default_jni", + "//pc:libjingle_peerconnection", +- "//third_party/re2", + ] + output_extension = "so" + } +@@ -78,7 +77,6 @@ if (is_ios) { + + deps = [ + "//third_party/libyuv", +- "//third_party/re2", + ] + } + } +@@ -94,7 +92,6 @@ if (is_linux || is_mac || is_win) { + deps = [ + "//sdk:media_constraints", + "//media:rtc_simulcast_encoder_adapter", +- "//third_party/re2", + ] + } + } +diff --git a/webrtc/ringrtc/rffi/api/peer_connection_intf.h b/webrtc/ringrtc/rffi/api/peer_connection_intf.h +index 66958254fed..4cd223beb93 100644 +--- a/webrtc/ringrtc/rffi/api/peer_connection_intf.h ++++ b/webrtc/ringrtc/rffi/api/peer_connection_intf.h +@@ -105,6 +105,7 @@ RUSTEXPORT webrtc::SessionDescriptionInterface* + Rust_sessionDescriptionFromV4(bool offer, + const RffiConnectionParametersV4* v4_borrowed, + bool enable_tcc_audio, ++ bool enable_red_audio, + bool enable_vp9); + + RUSTEXPORT void +diff --git a/webrtc/ringrtc/rffi/src/peer_connection.cc b/webrtc/ringrtc/rffi/src/peer_connection.cc +index 9db5ed8219d..0714b3589e3 100644 +--- a/webrtc/ringrtc/rffi/src/peer_connection.cc ++++ b/webrtc/ringrtc/rffi/src/peer_connection.cc +@@ -42,6 +42,7 @@ int VIDEO_LAYERS_ALLOCATION_EXT_ID = 14; + // 101 used by connection.rs + int DATA_PT = 101; + int OPUS_PT = 102; ++int OPUS_RED_PT = 105; + int VP8_PT = 108; + int VP8_RTX_PT = 118; + int VP9_PT = 109; +@@ -317,12 +318,14 @@ RUSTEXPORT webrtc::SessionDescriptionInterface* + Rust_sessionDescriptionFromV4(bool offer, + const RffiConnectionParametersV4* v4_borrowed, + bool enable_tcc_audio, ++ bool enable_red_audio, + bool enable_vp9) { + // Major changes from the default WebRTC behavior: + // 1. We remove all codecs except Opus, VP8, and VP9 + // 2. We remove all header extensions except for transport-cc, video orientation, + // and abs send time. + // 3. Opus CBR and DTX is enabled. ++ // 4. RED is enabled for audio. + + // For some reason, WebRTC insists that the video SSRCs for one side don't + // overlap with SSRCs from the other side. To avoid potential problems, we'll give the +@@ -361,6 +364,15 @@ Rust_sessionDescriptionFromV4(bool offer, + auto video = std::make_unique(); + set_rtp_params(video.get()); + ++ // Turn on the RED "meta codec" for Opus redundancy. ++ auto opus_red = cricket::CreateAudioCodec(OPUS_RED_PT, cricket::kRedCodecName, 48000, 2); ++ opus_red.SetParam("", std::to_string(OPUS_PT) + "/" + std::to_string(OPUS_PT)); ++ ++ if (enable_red_audio) { ++ // Add RED before Opus to use it by default when sending. ++ audio->AddCodec(opus_red); ++ } ++ + auto opus = cricket::CreateAudioCodec(OPUS_PT, cricket::kOpusCodecName, 48000, 2); + // These are the current defaults for WebRTC + // We set them explicitly to avoid having the defaults change on us. +@@ -378,6 +390,11 @@ Rust_sessionDescriptionFromV4(bool offer, + opus.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); + audio->AddCodec(opus); + ++ if (!enable_red_audio) { ++ // Add RED after Opus so that RED packets can at least be decoded properly if received. ++ audio->AddCodec(opus_red); ++ } ++ + auto add_video_feedback_params = [] (cricket::Codec* video_codec) { + video_codec->AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); + video_codec->AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamCcm, cricket::kRtcpFbCcmParamFir)); +@@ -589,9 +606,16 @@ CreateSessionDescriptionForGroupCall(bool local, + opus.SetParam("cbr", "1"); + opus.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); + ++ // Turn on the RED "meta codec" for Opus redundancy. ++ auto opus_red = cricket::CreateAudioCodec(OPUS_RED_PT, cricket::kRedCodecName, 48000, 2); ++ opus_red.SetParam("", std::to_string(OPUS_PT) + "/" + std::to_string(OPUS_PT)); ++ ++ // Add RED after Opus so that RED packets can at least be decoded properly if received. + local_audio->AddCodec(opus); ++ local_audio->AddCodec(opus_red); + for (auto& remote_audio : remote_audios) { + remote_audio->AddCodec(opus); ++ remote_audio->AddCodec(opus_red); + } + + auto add_video_feedback_params = [] (cricket::Codec* video_codec) { diff --git a/backports/soqt/APKBUILD b/backports/soqt/APKBUILD index 359bfb2..e4c6995 100644 --- a/backports/soqt/APKBUILD +++ b/backports/soqt/APKBUILD @@ -1,22 +1,23 @@ # Contributor: Aiden Grossman -# Maintainer: +# Maintainer: Antoine Martin (ayakael) pkgname=soqt -pkgver=1.6.0 -pkgrel=1 +pkgver=1.6.3 +pkgrel=0 pkgdesc="GUI binding library for coin" url="https://github.com/coin3d/soqt" arch="all" license="BSD-3-Clause" -makedepends="coin-dev cmake mesa-dev qt5-qtbase-dev" +makedepends="coin-dev cmake mesa-dev qt5-qtbase-dev doxygen" options="!check" # test suite consists only of interactive programs subpackages="$pkgname-dev $pkgname-doc" -source="https://github.com/coin3d/soqt/releases/download/SoQt-$pkgver/soqt-$pkgver-src.tar.gz" +source="https://github.com/coin3d/soqt/releases/download/v$pkgver/soqt-$pkgver-src.tar.gz" builddir="$srcdir/$pkgname" build() { cmake -B build . \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=None \ + -DSOQT_BUILD_DOCUMENTATION=ON \ -DSOQT_BUILD_DOC_MAN=ON cmake --build build } @@ -26,5 +27,5 @@ package() { } sha512sums=" -4221e98f51cca4dda23043428e869b60ab4d994710f97c0f44cd82631ffad2bd8bbaf0b820434a4636892df663d66ecd2aec14b185972671b2d22c0fe242b553 soqt-1.6.0-src.tar.gz +8cef22cf4214dd03bb4639c1fff77c127bf80f99e3b7fb7c1c21c25a281aa484252414f4a48fa59b8b2485afe7920ce9e86366fd1343badc77b75b78d3ac4c53 soqt-1.6.3-src.tar.gz " diff --git a/backports/swig3/APKBUILD b/backports/swig3/APKBUILD new file mode 100644 index 0000000..4abe017 --- /dev/null +++ b/backports/swig3/APKBUILD @@ -0,0 +1,46 @@ +# Maintainer: Noel Kuntze +pkgname=swig3 +pkgver=3.0.12 +pkgrel=3 +pkgdesc="A compiler that makes it easy to integrate C and C++ code with scripting languages" +url="https://www.swig.org/" +arch="all" +license="GPL-3.0-only" +depends="guile" +makedepends="zlib-dev pcre-dev bison" +checkdepends="boost-dev perl-dev python3-dev diffutils" +options="!check" # Check for javascript fails +subpackages="$pkgname-doc" +source="https://downloads.sourceforge.net/swig/swig-$pkgver.tar.gz + swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch +" + +builddir="$srcdir/swig-$pkgver" + +prepare() { + default_prepare + update_config_sub +} + +build() { + ./configure \ + --build=$CBUILD \ + --host=$CHOST \ + --prefix=/usr \ + --with-python3=/usr/bin/python3 \ + --program-suffix=3.0 + make +} + +check() { + env PERL5LIB=. make check +} + +package() { + make DESTDIR="$pkgdir" install + install -D -m644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE + install -D -m644 LICENSE-UNIVERSITIES "$pkgdir"/usr/share/licenses/$pkgname/LICENSE-UNIVERSITIES +} + +sha512sums="5eaa2e06d8e4197fd02194051db1e518325dbb074a4c55a91099ad9c55193874f577764afc9029409a41bd520a95154095f26e33ef5add5c102bb2c1d98d33eb swig-3.0.12.tar.gz +0cde94a04a3f914f6e1ac79866d199981600c0f4be18b52d08194de96d524027c6572eacd5c1e155a9007fc34ed9dece27dbcb974874de072fb42bf564978cd0 swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch" diff --git a/backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch b/backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch new file mode 100644 index 0000000..7198c21 --- /dev/null +++ b/backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch @@ -0,0 +1,191 @@ +From 90ba174fcea1618af57aa594199541d47a89b7f6 Mon Sep 17 00:00:00 2001 +From: William S Fulton +Date: Sun, 17 Sep 2017 19:02:55 +0100 +Subject: [PATCH 1/2] Fix generated code for constant expressions containing + wchar_t L literals. + +Such as: + # define __WCHAR_MAX (0x7fffffff + L'\0') + +Reported on swig-user mailing list. +--- + CHANGES.current | 5 +++++ + Examples/test-suite/csharp/preproc_constants_c_runme.cs | 3 ++- + Examples/test-suite/csharp/preproc_constants_runme.cs | 2 ++ + Examples/test-suite/d/preproc_constants_c_runme.1.d | 2 ++ + Examples/test-suite/d/preproc_constants_c_runme.2.d | 2 ++ + Examples/test-suite/d/preproc_constants_runme.1.d | 2 ++ + Examples/test-suite/d/preproc_constants_runme.2.d | 2 ++ + Examples/test-suite/php/preproc_constants_c_runme.php | 2 ++ + Examples/test-suite/php/preproc_constants_runme.php | 2 ++ + Examples/test-suite/php5/preproc_constants_c_runme.php | 2 ++ + Examples/test-suite/php5/preproc_constants_runme.php | 2 ++ + Examples/test-suite/preproc_constants.i | 3 +++ + Source/CParse/parser.y | 2 +- + 13 files changed, 29 insertions(+), 2 deletions(-) + +#diff --git a/CHANGES.current b/CHANGES.current +#index 1e4a244..b455a9f 100644 +#--- a/CHANGES.current +#+++ b/CHANGES.current +#@@ -7,6 +7,11 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ +# Version 4.0.0 (in progress) +# =========================== +# +#+2017-09-17: wsfulton +#+ Fix generated code for constant expressions containing wchar_t L literals such as: +#+ # define __WCHAR_MAX (0x7fffffff + L'\0') +#+ # define __WCHAR_MIN (-__WCHAR_MAX - 1) +#+ +# 2017-09-10: mlamarre +# [Python] Patch #1083. Define_DEBUG to 1 to do exactly like Visual Studio +# /LDd, /MDd or /MTd compiler options. +diff --git a/Examples/test-suite/csharp/preproc_constants_c_runme.cs b/Examples/test-suite/csharp/preproc_constants_c_runme.cs +index 76c684d..1c28e49 100644 +--- a/Examples/test-suite/csharp/preproc_constants_c_runme.cs ++++ b/Examples/test-suite/csharp/preproc_constants_c_runme.cs +@@ -61,7 +61,8 @@ public class runme { + assert( typeof(int) == preproc_constants_c.EXPR_LAND.GetType() ); + assert( typeof(int) == preproc_constants_c.EXPR_LOR.GetType() ); + assert( typeof(double) == preproc_constants_c.EXPR_CONDITIONAL.GetType() ); +- ++ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MAX.GetType() ); ++ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MIN.GetType() ); + } + static void assert(bool assertion) { + if (!assertion) +diff --git a/Examples/test-suite/csharp/preproc_constants_runme.cs b/Examples/test-suite/csharp/preproc_constants_runme.cs +index 9fae591..6b02e30 100644 +--- a/Examples/test-suite/csharp/preproc_constants_runme.cs ++++ b/Examples/test-suite/csharp/preproc_constants_runme.cs +@@ -60,6 +60,8 @@ public class runme { + assert( typeof(bool) == preproc_constants.EXPR_LAND.GetType() ); + assert( typeof(bool) == preproc_constants.EXPR_LOR.GetType() ); + assert( typeof(double) == preproc_constants.EXPR_CONDITIONAL.GetType() ); ++ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MAX.GetType() ); ++ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MIN.GetType() ); + + } + static void assert(bool assertion) { +diff --git a/Examples/test-suite/d/preproc_constants_c_runme.1.d b/Examples/test-suite/d/preproc_constants_c_runme.1.d +index d846c71..2b349af 100644 +--- a/Examples/test-suite/d/preproc_constants_c_runme.1.d ++++ b/Examples/test-suite/d/preproc_constants_c_runme.1.d +@@ -61,4 +61,6 @@ void main() { + static assert(is(int == typeof(EXPR_LAND()))); + static assert(is(int == typeof(EXPR_LOR()))); + static assert(is(double == typeof(EXPR_CONDITIONAL()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); + } +diff --git a/Examples/test-suite/d/preproc_constants_c_runme.2.d b/Examples/test-suite/d/preproc_constants_c_runme.2.d +index 9bdbb93..1bac525 100644 +--- a/Examples/test-suite/d/preproc_constants_c_runme.2.d ++++ b/Examples/test-suite/d/preproc_constants_c_runme.2.d +@@ -61,4 +61,6 @@ void main() { + static assert(is(int == typeof(EXPR_LAND()))); + static assert(is(int == typeof(EXPR_LOR()))); + static assert(is(double == typeof(EXPR_CONDITIONAL()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); + } +diff --git a/Examples/test-suite/d/preproc_constants_runme.1.d b/Examples/test-suite/d/preproc_constants_runme.1.d +index 009405f..f743f48 100644 +--- a/Examples/test-suite/d/preproc_constants_runme.1.d ++++ b/Examples/test-suite/d/preproc_constants_runme.1.d +@@ -60,4 +60,6 @@ void main() { + static assert(is(bool == typeof(EXPR_LAND()))); + static assert(is(bool == typeof(EXPR_LOR()))); + static assert(is(double == typeof(EXPR_CONDITIONAL()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); + } +diff --git a/Examples/test-suite/d/preproc_constants_runme.2.d b/Examples/test-suite/d/preproc_constants_runme.2.d +index 2d92ef0..0d96c37 100644 +--- a/Examples/test-suite/d/preproc_constants_runme.2.d ++++ b/Examples/test-suite/d/preproc_constants_runme.2.d +@@ -60,4 +60,6 @@ void main() { + static assert(is(bool == typeof(EXPR_LAND()))); + static assert(is(bool == typeof(EXPR_LOR()))); + static assert(is(double == typeof(EXPR_CONDITIONAL()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); ++ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); + } +diff --git a/Examples/test-suite/php/preproc_constants_c_runme.php b/Examples/test-suite/php/preproc_constants_c_runme.php +index af9b76e..e59fe18 100644 +--- a/Examples/test-suite/php/preproc_constants_c_runme.php ++++ b/Examples/test-suite/php/preproc_constants_c_runme.php +@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant + check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type"); + check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type"); + check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); ++check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); ++check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); + + ?> +diff --git a/Examples/test-suite/php/preproc_constants_runme.php b/Examples/test-suite/php/preproc_constants_runme.php +index 5c9119b..8e117ea 100644 +--- a/Examples/test-suite/php/preproc_constants_runme.php ++++ b/Examples/test-suite/php/preproc_constants_runme.php +@@ -61,5 +61,7 @@ check::equal(gettype(preproc_constants::EXPR_OR), "integer", "preproc_constants. + check::equal(gettype(preproc_constants::EXPR_LAND), "boolean", "preproc_constants.EXPR_LAND has unexpected type"); + check::equal(gettype(preproc_constants::EXPR_LOR), "boolean", "preproc_constants.EXPR_LOR has unexpected type"); + check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); ++check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); ++check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); + + ?> +diff --git a/Examples/test-suite/php5/preproc_constants_c_runme.php b/Examples/test-suite/php5/preproc_constants_c_runme.php +index 1ea0195..d978fab 100644 +--- a/Examples/test-suite/php5/preproc_constants_c_runme.php ++++ b/Examples/test-suite/php5/preproc_constants_c_runme.php +@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant + check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type"); + check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type"); + check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); ++check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); ++check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); + + ?> +diff --git a/Examples/test-suite/php5/preproc_constants_runme.php b/Examples/test-suite/php5/preproc_constants_runme.php +index fb9ee4f..7527026 100644 +--- a/Examples/test-suite/php5/preproc_constants_runme.php ++++ b/Examples/test-suite/php5/preproc_constants_runme.php +@@ -70,5 +70,7 @@ check::equal(gettype(preproc_constants::EXPR_LAND), "integer", "preproc_constant + check::equal(gettype(preproc_constants::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type"); + + check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); ++check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); ++check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); + + ?> +diff --git a/Examples/test-suite/preproc_constants.i b/Examples/test-suite/preproc_constants.i +index 3a999ad..16b44c9 100644 +--- a/Examples/test-suite/preproc_constants.i ++++ b/Examples/test-suite/preproc_constants.i +@@ -87,6 +87,9 @@ + #define EXPR_LOR 0xFF || 1 + #define EXPR_CONDITIONAL true ? 2 : 2.2 + ++#define EXPR_WCHAR_MAX (0x7fffffff + L'\0') ++#define EXPR_WCHAR_MIN (-EXPR_WCHAR_MAX - 1) ++ + #define EXPR_CHAR_COMPOUND_ADD 'A' + 12 + #define EXPR_CHAR_COMPOUND_LSHIFT 'B' << 6 + #define H_SUPPRESS_SCALING_MAGIC (('s'<<24) | ('u'<<16) | ('p'<<8) | 'p') +diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y +index 2e92cd0..273dadb 100644 +--- a/Source/CParse/parser.y ++++ b/Source/CParse/parser.y +@@ -194,7 +194,7 @@ int SWIG_cparse_template_reduce(int treduce) { + * ----------------------------------------------------------------------------- */ + + static int promote_type(int t) { +- if (t <= T_UCHAR || t == T_CHAR) return T_INT; ++ if (t <= T_UCHAR || t == T_CHAR || t == T_WCHAR) return T_INT; + return t; + } + +-- +2.9.5 + From 0261319dda85376b6132081585ac4157df93339e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 21 May 2025 23:01:10 -0400 Subject: [PATCH 563/738] backports/electron: upgrade to 35.4.0 --- backports/electron/APKBUILD | 6 +++--- .../electron/electron_unbundle-node.patch | 21 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 424b602..21ed96e 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=35.3.0 +pkgver=35.4.0 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 _chromium=134.0.6998.205 @@ -545,7 +545,7 @@ lang() { } sha512sums=" -7dd33e03f30b753a52a8801bd8aaffbd4229280df0c6754e2fadbf6d22e7f89f9bb1db0b30de0c403e9f61a09b1989e9b810d2cb7e8a301724132c20540618ef electron-v35.3.0-134.0.6998.205.tar.zst +30a116328f9a5af05b16cf85e31672407c51aef895b29441220f439d66af947272daa8e2ac88d9e4b8f7a9e0bb883932c36d2f1642fd18c5da885931c1c97fe0 electron-v35.4.0-134.0.6998.205.tar.zst c1857b5d6975650f915f3db552666f521822b857e39958ccfb54129f3878f272deaafc3dd446bc8441a5e84f075791feeeb62841b74bb555d8c546bfe231d164 copium-134.0.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch d9cc4a37a0311d23ae315a8d8124f8dbf60db8cc4a3943818638174b20387f1d770d00871f6608957b246ad956abca43c22ea0b072724287f2947e1909e47323 compiler.patch @@ -569,7 +569,7 @@ e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274 465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch -1ab45199c5eb896f57407876e9ca435af3ed63a65136f97526f6a07c3a2db223e646ea365630b0eda441ea88dbb0c07ab00b77de25edce07453f038c5339203d electron_unbundle-node.patch +c7f57929943a86f9e5f333da9d5691da88038770eeb46dd0a0719962c934deb2879f0e7a1ed714e9383e38ee4d68eb754501f362c4d7cdee76cfc2e980b21272 electron_unbundle-node.patch 4d9287d4cdfe27fbfb7be3d4b26c0c40edbd6a0c3ff926d60f2093ca09c15bcb58e20c2ccc8c0606aafd66c6d25a54225bc329cb056d8c5b297db4c6d0e768e6 electron_system-zlib-headers.patch e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop diff --git a/backports/electron/electron_unbundle-node.patch b/backports/electron/electron_unbundle-node.patch index 8392a85..d518d7e 100644 --- a/backports/electron/electron_unbundle-node.patch +++ b/backports/electron/electron_unbundle-node.patch @@ -120,3 +120,24 @@ index d61a9bd..8bf990e 100644 } } } +diff --git a/third_party/electron_node/unofficial.gni.orig b/third_party/electron_node/unofficial.gni +index 6bcc40b..7e383b2 100644 +--- a/third_party/electron_node/unofficial.gni.orig ++++ b/third_party/electron_node/unofficial.gni +@@ -142,7 +142,6 @@ template("node_gn_build") { + public_configs = [ + ":node_external_config", + "deps/googletest:googletest_config", +- ":zstd_include_config" + ] + public_deps = [ + "deps/ada", +@@ -163,8 +162,6 @@ template("node_gn_build") { + "//third_party/zlib", + "//third_party/brotli:dec", + "//third_party/brotli:enc", +- "//third_party/zstd:decompress", +- "//third_party/zstd:headers", + "$node_simdutf_path", + "$node_v8_path:v8_libplatform", + ] From b4c27f6e3e6f81013e41c272de9cff486d61c95c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:13:10 -0400 Subject: [PATCH 564/738] backports/dex: drop due to in community --- backports/dex/APKBUILD | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 backports/dex/APKBUILD diff --git a/backports/dex/APKBUILD b/backports/dex/APKBUILD deleted file mode 100644 index 2b9e1e0..0000000 --- a/backports/dex/APKBUILD +++ /dev/null @@ -1,26 +0,0 @@ -# Contributor: Anjandev Momi -# Maintainer: Anjandev Momi -pkgname=dex -pkgver=0.10.1 -pkgrel=0 -pkgdesc="program to generate and execute DesktopEntry files of the Application type" -url="https://github.com/jceb/dex" -arch="all" -license="GPL-3.0-or-later" -depends="python3" -makedepends="py3-sphinx" -subpackages="$pkgname-doc" -source="$pkgname-$pkgver.tar.gz::https://github.com/jceb/dex/archive/refs/tags/v$pkgver.tar.gz" -options="!check" # no testsuite - -build() { - make -} - -package() { - make install PREFIX=/usr MANPREFIX=/usr/share/man DESTDIR="$pkgdir" -} - -sha512sums=" -4832e60416f07b90d4f4d03d6493322ccd44a73270edf289d80136587859d137cf39db12fc5cf38d3bdfa46aae3a4d1353c7776e702240b560a287190bdc2b57 dex-0.10.1.tar.gz -" From 1f49286ca28c1f57d9f83c12b73cc6e0c52dfe8f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:14:06 -0400 Subject: [PATCH 565/738] backports/gn: drop due to needed version --- backports/gn/APKBUILD | 59 ------------------------------------------- 1 file changed, 59 deletions(-) delete mode 100644 backports/gn/APKBUILD diff --git a/backports/gn/APKBUILD b/backports/gn/APKBUILD deleted file mode 100644 index b5ec871..0000000 --- a/backports/gn/APKBUILD +++ /dev/null @@ -1,59 +0,0 @@ -# Contributor: TBK -maintainer="lauren n. liberda " -pkgname=gn -pkgver=0_git20250311 -pkgrel=0 -_commit=18602f6cf1168cf78302024043edc02e8bad2ffb -pkgdesc="Meta-build system that generates build files for Ninja" -arch="all" -url="https://gn.googlesource.com/gn" -license="BSD-3-Clause" -depends="samurai" -makedepends="python3 zstd" -# gitiles has no clones -source="https://ab-sn.lnl.gay/gn-$_commit.tar.zst - " -builddir="$srcdir/gn" - -_distbucket="sakamoto/lnl-aports-snapshots/" -snapshot() { - clean - deps - mkdir -p "$srcdir" && cd "$srcdir" - git clone https://gn.googlesource.com/gn - ( - cd gn - git checkout -q $_commit - python3 ./build/gen.py - ) - rm -rf gn/.git - tar cf gn-$_commit.tar gn - zstd --auto-threads=logical --ultra --long -22 -T"${ZSTD_LIMIT:-0}" -vv gn-$_commit.tar \ - -o "$SRCDEST"/gn-$_commit.tar.zst - mcli cp "$SRCDEST"/gn-$_commit.tar.zst "$_distbucket" -} - -build() { - unset CFLAGS # all sources C++ but passes both - # Breaks build since upstream passes -Wno-format, - # annotated: "Use of %llx, which is supported by _UCRT, false positive" - CXXFLAGS="${CXXFLAGS/-Werror=format-security} -flto=auto" \ - python3 ./build/gen.py \ - --no-last-commit-position \ - --no-static-libstdc++ \ - --no-strip \ - --allow-warnings - ninja -C out -} - -check() { - ./out/gn_unittests -} - -package() { - install -Dm755 out/gn "$pkgdir"/usr/bin/gn -} - -sha512sums=" -9638e177bfd6eecc6af1a9323efa93dc65d1d1f3599037851d19ba076f3b0c9e91366c143e6b6e334fc63baa0bdad80415dbad4ec96585850b462e2904c836d6 gn-18602f6cf1168cf78302024043edc02e8bad2ffb.tar.zst -" From c319f2b6cae692e6b6a534b8c2b97aea21670099 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:15:00 -0400 Subject: [PATCH 566/738] backports/openssl1.1-compat: drop due to not necessary --- backports/openssl1.1-compat/APKBUILD | 168 ------------------ backports/openssl1.1-compat/man-section.patch | 54 ------ backports/openssl1.1-compat/ppc64.patch | 96 ---------- 3 files changed, 318 deletions(-) delete mode 100644 backports/openssl1.1-compat/APKBUILD delete mode 100644 backports/openssl1.1-compat/man-section.patch delete mode 100644 backports/openssl1.1-compat/ppc64.patch diff --git a/backports/openssl1.1-compat/APKBUILD b/backports/openssl1.1-compat/APKBUILD deleted file mode 100644 index fb31eaa..0000000 --- a/backports/openssl1.1-compat/APKBUILD +++ /dev/null @@ -1,168 +0,0 @@ -# Contributor: Ariadne Conill -# Maintainer: Timo Teras -pkgname=openssl1.1-compat -pkgver=1.1.1w -_abiver=${pkgver%.*} -pkgrel=1 -pkgdesc="toolkit for transport layer security (TLS) - version 1.1" -url="https://www.openssl.org/" -arch="all" -license="OpenSSL" -replaces="libressl" -depends_dev="!openssl-dev" -makedepends_build="perl" -makedepends_host="linux-headers" -makedepends="$makedepends_host $makedepends_build" -subpackages="$pkgname-dbg $pkgname-libs-static:_static $pkgname-dev - libcrypto$_abiver:_libcrypto libssl$_abiver:_libssl" -source="https://www.openssl.org/source/openssl-$pkgver.tar.gz - man-section.patch - ppc64.patch - " -builddir="$srcdir/openssl-$pkgver" -pcprefix="openssl$_abiver:pc:" - -# secfixes: -# 1.1.1u-r1: -# - CVE-2023-3446 -# 1.1.1t-r2: -# - CVE-2023-0465 -# 1.1.1t-r1: -# - CVE-2023-0464 -# 1.1.1t-r0: -# - CVE-2022-4304 -# - CVE-2022-4450 -# - CVE-2023-0215 -# - CVE-2023-0286 -# 1.1.1q-r0: -# - CVE-2022-2097 -# 1.1.1n-r0: -# - CVE-2022-0778 -# 1.1.1l-r0: -# - CVE-2021-3711 -# - CVE-2021-3712 -# 1.1.1k-r0: -# - CVE-2021-3449 -# - CVE-2021-3450 -# 1.1.1j-r0: -# - CVE-2021-23841 -# - CVE-2021-23840 -# - CVE-2021-23839 -# 1.1.1i-r0: -# - CVE-2020-1971 -# 1.1.1g-r0: -# - CVE-2020-1967 -# 1.1.1d-r3: -# - CVE-2019-1551 -# 1.1.1d-r1: -# - CVE-2019-1547 -# - CVE-2019-1549 -# - CVE-2019-1563 -# 1.1.1b-r1: -# - CVE-2019-1543 -# 1.1.1a-r0: -# - CVE-2018-0734 -# - CVE-2018-0735 -# 0: -# - CVE-2022-1292 -# - CVE-2022-2068 - -build() { - local _target _optflags - - # openssl will prepend crosscompile always core CC et al - CC=${CC#${CROSS_COMPILE}} - CXX=${CXX#${CROSS_COMPILE}} - CPP=${CPP#${CROSS_COMPILE}} - - # determine target OS for openssl - case "$CARCH" in - aarch64*) _target="linux-aarch64" ;; - arm*) _target="linux-armv4" ;; - ppc) _target="linux-ppc" ;; - ppc64) _target="linux-ppc64" ;; - ppc64le) _target="linux-ppc64le" ;; - x86) _target="linux-elf" ;; - x86_64) _target="linux-x86_64"; _optflags="enable-ec_nistp_64_gcc_128" ;; - s390x) _target="linux64-s390x";; - riscv64) _target="linux-generic64";; - loongarch64) _target="linux-generic64";; - *) msg "Unable to determine architecture from (CARCH=$CARCH)" ; return 1 ;; - esac - - # Configure assumes --options are for it, so can't use - # gcc's --sysroot fake this by overriding CC - [ -n "$CBUILDROOT" ] && CC="$CC --sysroot=$CBUILDROOT" - - # when cross building do not enable threads as libatomic is not avaiable - if [ "$CBUILD" != "$CHOST" ]; then - case $CARCH in - riscv64) _optflags="$_optflags no-threads";; - esac - fi - - perl ./Configure \ - $_target \ - --prefix=/usr \ - --libdir=/usr/lib \ - --openssldir=/etc/ssl1.1 \ - shared \ - no-zlib \ - no-async \ - no-comp \ - no-idea \ - no-mdc2 \ - no-rc5 \ - no-ec2m \ - no-sm2 \ - no-sm4 \ - no-ssl2 \ - no-ssl3 \ - no-seed \ - no-weak-ssl-ciphers \ - $_optflags \ - $CPPFLAGS \ - $CFLAGS \ - $LDFLAGS -Wa,--noexecstack - make -} - -check() { - # AFALG tests have a sporadic test failure, just delete the broken - # test for now. - rm -f test/recipes/30-test_afalg.t - - make test -} - -package() { - make DESTDIR="$pkgdir" install_sw install_ssldirs - # remove the script c_rehash - rm "$pkgdir"/usr/bin/c_rehash - mv -f "$pkgdir"/usr/bin/openssl "$pkgdir"/usr/bin/openssl$_abiver -} - -_libcrypto() { - pkgdesc="Crypto library from openssl" - replaces="libressl2.7-libcrypto" - - amove etc - amove usr/lib/libcrypto* - amove usr/lib/engines-$_abiver -} - -_libssl() { - pkgdesc="SSL shared libraries" - - amove usr/lib/libssl* -} - -_static() { - default_static -} - -sha512sums=" -b4c625fe56a4e690b57b6a011a225ad0cb3af54bd8fb67af77b5eceac55cc7191291d96a660c5b568a08a2fbf62b4612818e7cca1bb95b2b6b4fc649b0552b6d openssl-1.1.1w.tar.gz -43c3255118db6f5f340dc865c0f25ccbcafe5bf7507585244ca59b4d27daf533d6c3171aa32a8685cbb6200104bec535894b633de13feaadff87ab86739a445a man-section.patch -e040f23770d52b988578f7ff84d77563340f37c026db7643db8e4ef18e795e27d10cb42cb8656da4d9c57a28283a2828729d70f940edc950c3422a54fea55509 ppc64.patch -" diff --git a/backports/openssl1.1-compat/man-section.patch b/backports/openssl1.1-compat/man-section.patch deleted file mode 100644 index 0606897..0000000 --- a/backports/openssl1.1-compat/man-section.patch +++ /dev/null @@ -1,54 +0,0 @@ -From: Debian OpenSSL Team -Date: Sun, 5 Nov 2017 15:09:09 +0100 -Subject: man-section - ---- - Configurations/unix-Makefile.tmpl | 6 ++++-- - util/process_docs.pl | 3 ++- - 2 files changed, 6 insertions(+), 3 deletions(-) - -diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl -index 1292053546f5..c034d21884d8 100644 ---- a/Configurations/unix-Makefile.tmpl -+++ b/Configurations/unix-Makefile.tmpl -@@ -183,7 +183,8 @@ HTMLDIR=$(DOCDIR)/html - # MANSUFFIX is for the benefit of anyone who may want to have a suffix - # appended after the manpage file section number. "ssl" is popular, - # resulting in files such as config.5ssl rather than config.5. --MANSUFFIX= -+MANSUFFIX=ssl -+MANSECTION=SSL - HTMLSUFFIX=html - - # For "optional" echo messages, to get "real" silence -@@ -726,7 +727,8 @@ uninstall_runtime: uninstall_programs uninstall_runtime_libs - @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) - @$(ECHO) "*** Installing manpages" - $(PERL) $(SRCDIR)/util/process_docs.pl \ -- "--destdir=$(DESTDIR)$(MANDIR)" --type=man --suffix=$(MANSUFFIX) -+ "--destdir=$(DESTDIR)$(MANDIR)" --type=man --suffix=$(MANSUFFIX) \ -+ --mansection=$(MANSECTION) - - uninstall_man_docs: - @$(ECHO) "*** Uninstalling manpages" -diff --git a/util/process_docs.pl b/util/process_docs.pl -index 30b149eb8fcc..424155ea808e 100755 ---- a/util/process_docs.pl -+++ b/util/process_docs.pl -@@ -37,6 +37,7 @@ GetOptions(\%options, - 'type=s', # The result type, 'man' or 'html' - 'suffix:s', # Suffix to add to the extension. - # Only used with type=man -+ 'mansection:s', # Section to put to manpage in - 'remove', # To remove files rather than writing them - 'dry-run|n', # Only output file names on STDOUT - 'debug|D+', -@@ -97,7 +98,7 @@ foreach my $section (sort @{$options{section}}) { - my $name = uc $podname; - my $suffix = { man => ".$podinfo{section}".($options{suffix} // ""), - html => ".html" } -> {$options{type}}; -- my $generate = { man => "pod2man --name=$name --section=$podinfo{section} --center=OpenSSL --release=$config{version} \"$podpath\"", -+ my $generate = { man => "pod2man --name=$name --section=$podinfo{section}$options{mansection} --center=OpenSSL --release=$config{version} \"$podpath\"", - html => "pod2html \"--podroot=$options{sourcedir}\" --htmldir=$updir --podpath=man1:man3:man5:man7 \"--infile=$podpath\" \"--title=$podname\" --quiet" - } -> {$options{type}}; - my $output_dir = catdir($options{destdir}, "man$podinfo{section}"); diff --git a/backports/openssl1.1-compat/ppc64.patch b/backports/openssl1.1-compat/ppc64.patch deleted file mode 100644 index c75ceed..0000000 --- a/backports/openssl1.1-compat/ppc64.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 34ab13b7d8e3e723adb60be8142e38b7c9cd382a Mon Sep 17 00:00:00 2001 -From: Andy Polyakov -Date: Sun, 5 May 2019 18:25:50 +0200 -Subject: [PATCH] crypto/perlasm/ppc-xlate.pl: add linux64v2 flavour -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This is a big endian ELFv2 configuration. ELFv2 was already being -used for little endian, and big endian was traditionally ELFv1 -but there are practical configurations that use ELFv2 with big -endian nowadays (Adélie Linux, Void Linux, possibly Gentoo, etc.) - -Reviewed-by: Paul Dale -Reviewed-by: Richard Levitte -(Merged from https://github.com/openssl/openssl/pull/8883) ---- - crypto/perlasm/ppc-xlate.pl | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/crypto/perlasm/ppc-xlate.pl b/crypto/perlasm/ppc-xlate.pl -index e52f2f6ea62..5fcd0526dff 100755 ---- a/crypto/perlasm/ppc-xlate.pl -+++ b/crypto/perlasm/ppc-xlate.pl -@@ -49,7 +49,7 @@ - /osx/ && do { $name = "_$name"; - last; - }; -- /linux.*(32|64le)/ -+ /linux.*(32|64(le|v2))/ - && do { $ret .= ".globl $name"; - if (!$$type) { - $ret .= "\n.type $name,\@function"; -@@ -80,7 +80,7 @@ - }; - my $text = sub { - my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text"; -- $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/); -+ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64(le|v2)/); - $ret; - }; - my $machine = sub { -@@ -186,7 +186,7 @@ - - # Some ABIs specify vrsave, special-purpose register #256, as reserved - # for system use. --my $no_vrsave = ($flavour =~ /aix|linux64le/); -+my $no_vrsave = ($flavour =~ /aix|linux64(le|v2)/); - my $mtspr = sub { - my ($f,$idx,$ra) = @_; - if ($idx == 256 && $no_vrsave) { -@@ -318,7 +318,7 @@ sub vfour { - if ($label) { - my $xlated = ($GLOBALS{$label} or $label); - print "$xlated:"; -- if ($flavour =~ /linux.*64le/) { -+ if ($flavour =~ /linux.*64(le|v2)/) { - if ($TYPES{$label} =~ /function/) { - printf "\n.localentry %s,0\n",$xlated; - } - -From 098404128383ded87ba390dd74ecd9e2ffa6f530 Mon Sep 17 00:00:00 2001 -From: Andy Polyakov -Date: Sun, 5 May 2019 18:30:55 +0200 -Subject: [PATCH] Configure: use ELFv2 ABI on some ppc64 big endian systems - -If _CALL_ELF is defined to be 2, it's an ELFv2 system. -Conditionally switch to the v2 perlasm scheme. - -Reviewed-by: Paul Dale -Reviewed-by: Richard Levitte -(Merged from https://github.com/openssl/openssl/pull/8883) ---- - Configure | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/Configure b/Configure -index 22082deb4c7..e303d98deb3 100755 ---- a/Configure -+++ b/Configure -@@ -1402,8 +1402,15 @@ - my %predefined_C = compiler_predefined($config{CROSS_COMPILE}.$config{CC}); - my %predefined_CXX = $config{CXX} - ? compiler_predefined($config{CROSS_COMPILE}.$config{CXX}) - : (); - -+unless ($disabled{asm}) { -+ # big endian systems can use ELFv2 ABI -+ if ($target eq "linux-ppc64") { -+ $target{perlasm_scheme} = "linux64v2" if ($predefined_C{_CALL_ELF} == 2); -+ } -+} -+ - # Check for makedepend capabilities. - if (!$disabled{makedepend}) { - if ($config{target} =~ /^(VC|vms)-/) { From 16e489995a936e152c14e9f10bbba539cbc5d406 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:15:11 -0400 Subject: [PATCH 567/738] backports/pnpm: drop due to not necessary --- .../pnpm/0001-no-check-for-updates.patch | 14 ---- backports/pnpm/0002-no-self-update.patch | 14 ---- backports/pnpm/APKBUILD | 73 ------------------- 3 files changed, 101 deletions(-) delete mode 100644 backports/pnpm/0001-no-check-for-updates.patch delete mode 100644 backports/pnpm/0002-no-self-update.patch delete mode 100644 backports/pnpm/APKBUILD diff --git a/backports/pnpm/0001-no-check-for-updates.patch b/backports/pnpm/0001-no-check-for-updates.patch deleted file mode 100644 index 2d74688..0000000 --- a/backports/pnpm/0001-no-check-for-updates.patch +++ /dev/null @@ -1,14 +0,0 @@ -Disable available update messages as it outputs invalid upgrade process - -diff --git a/dist/pnpm.cjs b/dist/pnpm.cjs -index b93ea78..6daefd6 100644 ---- a/dist/pnpm.cjs -+++ b/dist/pnpm.cjs -@@ -114026,6 +114026,7 @@ var require_checkForUpdates = __commonJS({ - var write_json_file_1 = __importDefault2(require_write_json_file()); - var UPDATE_CHECK_FREQUENCY = 24 * 60 * 60 * 1e3; - async function checkForUpdates(config) { -+ return; - const stateFile = path_1.default.join(config.stateDir, "pnpm-state.json"); - let state; - try { diff --git a/backports/pnpm/0002-no-self-update.patch b/backports/pnpm/0002-no-self-update.patch deleted file mode 100644 index b016ecc..0000000 --- a/backports/pnpm/0002-no-self-update.patch +++ /dev/null @@ -1,14 +0,0 @@ -Disable command "pnpm self-update" as we install via apk - -diff --git a/dist/pnpm.cjs b/dist/pnpm.cjs -index b93ea78..8da50c3 100644 ---- a/dist/pnpm.cjs -+++ b/dist/pnpm.cjs -@@ -220258,6 +220258,7 @@ var require_selfUpdate = __commonJS({ - }); - } - async function handler(opts, params) { -+ throw new error_1.PnpmError("CANT_SELF_UPDATE_IN_APK", "You should update pnpm with apk"); - if ((0, cli_meta_1.isExecutedByCorepack)()) { - throw new error_1.PnpmError("CANT_SELF_UPDATE_IN_COREPACK", "You should update pnpm with corepack"); - } diff --git a/backports/pnpm/APKBUILD b/backports/pnpm/APKBUILD deleted file mode 100644 index 8772842..0000000 --- a/backports/pnpm/APKBUILD +++ /dev/null @@ -1,73 +0,0 @@ -# Contributor: Hygna -# Contributor: Fabricio Silva -maintainer="Fabricio Silva " -pkgname=pnpm -pkgver=10.9.0 -pkgrel=0 -pkgdesc="Fast, disk space efficient package manager" -url="https://pnpm.io" -arch="noarch" -license="MIT" -depends="nodejs" -subpackages=" - $pkgname-doc - $pkgname-bash-completion - $pkgname-zsh-completion - $pkgname-fish-completion - " -source="https://registry.npmjs.org/pnpm/-/pnpm-$pkgver.tgz - 0001-no-check-for-updates.patch - 0002-no-self-update.patch - " -builddir="$srcdir/package" - -prepare() { - default_prepare - - # remove node-gyp - rm -rf dist/node-gyp-bin dist/node_modules/node-gyp - # remove windows files - rm -rf dist/vendor/*.exe - - # remove other unnecessary files - find . -type f \( \ - -name '.*' -o \ - -name '*.cmd' -o \ - -name '*.bat' -o \ - -name '*.map' -o \ - -name '*.md' -o \ - -name '*.darwin*' -o \ - -name '*.win*' -o \ - -iname 'README*' \) -delete -} - -check() { - ./bin/pnpm.cjs --help -} - -package() { - local destdir="$pkgdir"/usr/share/node_modules/$pkgname - - install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname - - install -Dm644 dist/templates/completion.bash \ - "$pkgdir"/usr/share/bash-completion/completions/$pkgname - install -Dm644 dist/templates/completion.zsh \ - "$pkgdir"/usr/share/zsh/site-functions/_$pkgname - install -Dm644 dist/templates/completion.fish \ - "$pkgdir"/usr/share/fish/vendor_completions.d/$pkgname.fish - - install -Dm644 package.json -t "$destdir" - install -Dm755 bin/pnpm.cjs bin/pnpx.cjs -t "$destdir"/bin - cp -r dist "$destdir"/dist - - mkdir -p "$pkgdir"/usr/bin - ln -sf ../share/node_modules/pnpm/bin/pnpm.cjs "$pkgdir"/usr/bin/pnpm - ln -sf ../share/node_modules/pnpm/bin/pnpx.cjs "$pkgdir"/usr/bin/pnpx -} - -sha512sums=" -0486e394640d3c1fb3c9d43d49cf92879ff74f8516959c235308f5a8f62e2e19528a65cdc2a3058f587cde71eba3d5b56327c8c33a97e4c4051ca48a10ca2d5f pnpm-10.9.0.tgz -f53903c506a676393dd8b31e1194b92612bfa877a8e17edc530e308921caf454248e181a3e620a17a941eba126349128963b2b0b1e48f8d927307c9cf335290e 0001-no-check-for-updates.patch -5582d11fcd1782f40a4f9269b477af25057e3a3d60cddef8b64a8592fafdc7a572822c8267a7abf9e8bfa4b726dcb291885642070a838e360fc542cee10c9569 0002-no-self-update.patch -" From ef52fcc239cdc907174a6aa8776bded39b10cada Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:15:40 -0400 Subject: [PATCH 568/738] backports/py3-colored: drop due to in community --- backports/py3-colored/APKBUILD | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 backports/py3-colored/APKBUILD diff --git a/backports/py3-colored/APKBUILD b/backports/py3-colored/APKBUILD deleted file mode 100644 index f2efb49..0000000 --- a/backports/py3-colored/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-colored -_pyname=${pkgname/py3-/} -pkgver=2.2.4 -pkgrel=0 -pkgdesc="Simple Python library for color and formatting in terminal" -url="https://gitlab.com/dslackw/colored" -arch="noarch" -license="MIT" -depends="python3" -makedepends="py3-setuptools py3-gpep517 py3-flit" -checkdepends="py3-pytest" -subpackages="$pkgname-pyc" -source="https://gitlab.com/dslackw/colored/-/archive/$pkgver/colored-$pkgver.tar.gz" -builddir="$srcdir/$_pyname-$pkgver" -options="!check" # No testsuite - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -8fd293c95c2cfa6c3c31a91f946414e5c2581ea12a60e38ad1e6a5e44a85589a81c5e8205c4c518ed0d809840bf1b37b0cb5af4cf48c0706aa52017bf9c04489 colored-2.2.4.tar.gz -" From 90bda986c797e8db2e9d0849d3cc6517872d858c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:16:03 -0400 Subject: [PATCH 569/738] backports/py3-fuzzywuzzy: drop due to in community --- backports/py3-fuzzywuzzy/APKBUILD | 37 ------------------------------- 1 file changed, 37 deletions(-) delete mode 100644 backports/py3-fuzzywuzzy/APKBUILD diff --git a/backports/py3-fuzzywuzzy/APKBUILD b/backports/py3-fuzzywuzzy/APKBUILD deleted file mode 100644 index c659b1b..0000000 --- a/backports/py3-fuzzywuzzy/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Contributor: Galen Abell -# Maintainer: Galen Abell -pkgname=py3-fuzzywuzzy -_pyname=fuzzywuzzy -pkgver=0.18.0 -pkgrel=7 -pkgdesc="Fuzzy string matching in python" -url="https://github.com/seatgeek/fuzzywuzzy" -arch="noarch" -license="GPL-2.0-only" -depends="python3 py3-levenshtein" -makedepends="py3-setuptools py3-gpep517" -checkdepends="py3-pytest py3-pycodestyle py3-hypothesis" -subpackages="$pkgname-pyc" -source="https://files.pythonhosted.org/packages/source/${_pyname%${_pyname#?}}/$_pyname/$_pyname-$pkgver.tar.gz" -builddir="$srcdir/$_pyname-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -4a21ea67278fa525842d48fed8db666d00eae6d13254e8844d11f63b47c3a305b3cac760f28c24c6347aebcf73e96180e0a7cfba29c75f01ece2f7751e0398c5 fuzzywuzzy-0.18.0.tar.gz -" From 2162431bb5ec65172049e111c1203bd77eba6e23 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:16:20 -0400 Subject: [PATCH 570/738] backports/py3-levenshtein: drop due to in community --- backports/py3-levenshtein/APKBUILD | 46 ------------------------------ 1 file changed, 46 deletions(-) delete mode 100644 backports/py3-levenshtein/APKBUILD diff --git a/backports/py3-levenshtein/APKBUILD b/backports/py3-levenshtein/APKBUILD deleted file mode 100644 index d6a7572..0000000 --- a/backports/py3-levenshtein/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor: Galen Abell -# Maintainer: Galen Abell -pkgname=py3-levenshtein -pkgver=0.26.1 -pkgrel=0 -pkgdesc="Python extension for computing string edit distances and similarities" -url="https://github.com/maxbachmann/Levenshtein" -arch="all" -license="GPL-2.0-only" -depends="py3-rapidfuzz" -makedepends=" - cmake - cython - py3-gpep517 - py3-scikit-build - py3-scikit-build-core - python3-dev - rapidfuzz - samurai - " -checkdepends="py3-pytest" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/maxbachmann/Levenshtein/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/Levenshtein-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer \ - .dist/levenshtein*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/levenshtein*.whl -} - -sha512sums=" -589b1f404108f488caf880063f20ee9c6a2033b0a2cd819352bf15e285ea8537c1dc8117de70679f720fd3da47546f7e0e5c620e4da8cf09bf8df9b119e6abc9 py3-levenshtein-0.26.1.tar.gz -" From 10c0f61045dc57d0eaa701da99e5bbf6ebb194e5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:16:37 -0400 Subject: [PATCH 571/738] backports/rapidfuzz: drop due to in community --- backports/rapidfuzz/APKBUILD | 45 ------------------------------- backports/rapidfuzz/cstdint.patch | 12 --------- 2 files changed, 57 deletions(-) delete mode 100644 backports/rapidfuzz/APKBUILD delete mode 100644 backports/rapidfuzz/cstdint.patch diff --git a/backports/rapidfuzz/APKBUILD b/backports/rapidfuzz/APKBUILD deleted file mode 100644 index aa0eefd..0000000 --- a/backports/rapidfuzz/APKBUILD +++ /dev/null @@ -1,45 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -pkgname=rapidfuzz -pkgver=3.2.0 -pkgrel=0 -pkgdesc="Rapid fuzzy string matching in C++ using the Levenshtein Distance" -url="https://github.com/maxbachmann/rapidfuzz-cpp" -arch="all" -license="MIT" -makedepends=" - cmake - samurai - " -checkdepends="catch2-3" -source="$pkgname-cpp-$pkgver.tar.gz::https://github.com/maxbachmann/rapidfuzz-cpp/archive/refs/tags/v$pkgver.tar.gz - cstdint.patch - " -builddir="$srcdir/rapidfuzz-cpp-$pkgver" - -case "$CARCH" in -x86) - # float rounding - options="!check" - ;; -esac - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DRAPIDFUZZ_BUILD_TESTING="$(want_check && echo ON || echo OFF)" - cmake --build build -} - -check() { - ctest --test-dir build --output-on-failure -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -cf306fc4a6c0b6fc1a1c3b0b235aa54588bd87a5d07f96c1bc9711a08159ca71580b5958e66e8b4358d34e522041934903079aabe6e5a450cece7d6db6edcbe0 rapidfuzz-cpp-3.2.0.tar.gz -216c5082498830d42d2eb14d3eba35dd08446008916c920db7b55eaf3dd2358f86a61c238315b85fefecf08b9e902dc4db172f91a8479cfd735e53c7b3e03bf5 cstdint.patch -" diff --git a/backports/rapidfuzz/cstdint.patch b/backports/rapidfuzz/cstdint.patch deleted file mode 100644 index cce9033..0000000 --- a/backports/rapidfuzz/cstdint.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/rapidfuzz_reference/JaroWinkler.hpp b/rapidfuzz_reference/JaroWinkler.hpp -index 3b717d8..9d415e4 100644 ---- a/rapidfuzz_reference/JaroWinkler.hpp -+++ b/rapidfuzz_reference/JaroWinkler.hpp -@@ -2,6 +2,7 @@ - /* Copyright © 2022-present Max Bachmann */ - - #pragma once -+#include - #include "Jaro.hpp" - - namespace rapidfuzz_reference { From dc8a32f4b9cef26cb9ed3218637e581574878819 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:17:26 -0400 Subject: [PATCH 572/738] backports/calibre: upgrade to 8.4.0 --- backports/calibre/APKBUILD | 8 +++++--- backports/calibre/musl-pread.patch | 11 +++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 backports/calibre/musl-pread.patch diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD index 3cf2747..5771907 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=7.26.0 +pkgver=8.4.0 pkgrel=0 pkgdesc="Ebook management application" # qt6-webengine @@ -41,7 +41,7 @@ depends=" qt6-qtimageformats qt6-qtsvg qt6-qtwebengine - qt6-qtbase-dev + qt6-qtbase-private-dev udisks2 " makedepends=" @@ -70,6 +70,7 @@ subpackages=" " source="https://download.calibre-ebook.com/$pkgver/calibre-$pkgver.tar.xz 0001-$pkgname-no-update.patch + musl-pread.patch " # net: downloads iso-codes # !check: no tests ran @@ -112,6 +113,7 @@ package() { } sha512sums=" -e477a2dcdd1c52074bd5c0df5d79b2b609d76bf9e1cb5e3d32f79a89d6e0e2798cb980e2cf74e126fb2856273a14b0e2e92b39ffca74461569233c0a87968bfe calibre-7.26.0.tar.xz +df998fa31b9e581739872a649669fccf29f34d3ac1b4d0a96c37e08a0b049b1357b56a2af25f2733936e78901dd61b38a24e536e107e7094ada7e60a5c2c56ab calibre-8.4.0.tar.xz eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch +d27d29c434a3d2df1b18125225a4d3762bf6fdba77385b377b18a7f325f29ae0b698974a39263f4f7aed8a368c87d0dc4446f488505b8e38664f8e9ee5b9bd12 musl-pread.patch " diff --git a/backports/calibre/musl-pread.patch b/backports/calibre/musl-pread.patch new file mode 100644 index 0000000..241ce63 --- /dev/null +++ b/backports/calibre/musl-pread.patch @@ -0,0 +1,11 @@ +--- a/src/calibre/utils/speedup.c ++++ b/src/calibre/utils/speedup.c +@@ -748,7 +748,7 @@ + break; + } + #else +-#ifdef __linux__ ++#ifdef __GLIBC__ + ssize_t nr = pread64(fd, buf + pos, n - pos, offset); + #else + ssize_t nr = pread(fd, buf + pos, n - pos, offset); From 366cbca424cab4bc5cb7066d12b08409809bb050 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:17:54 -0400 Subject: [PATCH 573/738] backports/electron: fix build on edge --- backports/electron/APKBUILD | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 21ed96e..6721e7c 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -12,7 +12,7 @@ url="https://github.com/electron/electron" arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" -_llvmver=19 +_llvmver=20 makedepends=" ada-dev alsa-lib-dev @@ -135,6 +135,8 @@ source=" partalloc-no-tagging-arm64.patch pvalloc.patch temp-failure-retry.patch + pipewire-1.4.patch + gperf-3.2-fix.patch electron_icon.patch electron_python-jinja-3.10.patch @@ -429,14 +431,10 @@ _configure() { local symbol_level=0 local vaapi=true - # added_rust_stdlib_libs and removed_rust_stdlib_libs workaround change in Rust 1.86, - # feel free to remove after upgrading rust - # shellcheck disable=2089 local gn_config=" import(\"//electron/build/args/release.gn\") - added_rust_stdlib_libs=[\"adler\"] blink_enable_generated_code_formatting=false cc_wrapper=\"$cc_wrapper\" chrome_pgo_phase=0 @@ -463,7 +461,6 @@ _configure() { is_official_build=true link_pulseaudio=true proprietary_codecs=true - removed_rust_stdlib_libs=[\"adler2\"] rtc_link_pipewire=true rtc_use_pipewire=true rustc_version=\"yes\" @@ -566,6 +563,8 @@ e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9 f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7bbf933e0278e5c6d578619d8643895cdc40386eebc5b975f partalloc-no-tagging-arm64.patch 03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch +1814096bc611e7f56cc5c570214dae715a4cda1fba96a6b585a73a1abc8b9161efaa799dc83887dac531dbafe9479bbe235cabe1a61cb3081e268c53a6144908 pipewire-1.4.patch +4bc087a1e5acbb0f8f884756b40c127df88699ecd6eb42c4aff6691b87239bb6915dd102e9ef2544502a12bff011859ad497206940473e6b0a0fd75afb562a4c gperf-3.2-fix.patch 465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch From 5901ea37ae3a9a73c0f816540a809ea1d14b8ac9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:18:11 -0400 Subject: [PATCH 574/738] backports/freecad: upgrade to 1.0.1 --- backports/freecad/APKBUILD | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backports/freecad/APKBUILD b/backports/freecad/APKBUILD index 8967ba7..7b99447 100644 --- a/backports/freecad/APKBUILD +++ b/backports/freecad/APKBUILD @@ -1,9 +1,9 @@ # Contributor: Bryce Vandegrift # Maintainer: Bryce Vandegrift pkgname=freecad -pkgver=1.0.0 -_ondsel_ver="2e3659c4bce3e6885269e0cb3d640261b2a91108" -_gsl_ver="b39e7e4b0987859f5b19ff7686b149c916588658" +pkgver=1.0.1 +_ondsel_ver="09d6175a2ba69e7016fcecc4f384946a2f84f92d" +_gsl_ver="2828399820ef4928cc89b65605dca5dc68efca6e" pkgrel=0 pkgdesc="Open-source parametric 3D modeler" url="https://www.freecad.org/" @@ -73,8 +73,8 @@ package() { } sha512sums=" -afc1079ea04fd5bb8135f8ad1012d9e4e05c8839dd0a4e00253eada58fe018f445c1200d1ca7ac9f268644c946cbf55b7b313dc3d6bd010f9da3a3334103b7db freecad-1.0.0.tar.gz -8b08a668c63b57a49b8d95308f31496c1bcb27a5fb024d2e6b9744bd2e4819e82c59f68a8b99cc1be3e2bdfcdf435da5e342afaff4f28d97a849f9c01736af89 OndselSolver-2e3659c4bce3e6885269e0cb3d640261b2a91108.tar.gz -01ae556b70f7b5b572d15a427a6a5e0e7a4047727958be4c61d7dd84fc3bc97aebeaebf60c48064c565884441605fca180d5fdc8c920d35b2a8874664c024b01 GSL-b39e7e4b0987859f5b19ff7686b149c916588658.tar.gz +69a82c0af45137079b1ce184a4a3df475c005da66b4a4cab17371a1f62432b13f721e3da8b350b3ad50125c939cdfa5fed477e0605d52bd8fcee3c528931a185 freecad-1.0.1.tar.gz +7ad78da60320a686f0734da5196ce4cba49a2ff9ecf0bcd6016a56d65c8a8f7570f2898f84c2602a454bc9ccd8ac12fd137d2a952ffb7cbd15e38350fbbd3d79 OndselSolver-09d6175a2ba69e7016fcecc4f384946a2f84f92d.tar.gz +a6d731c450da91cba34c13293cc0881a842bd90268dd5ef721ae1f48752c41dc355ebea7716a6de5b49d41568e55751c46a9dd78da4cd68656bffd33e5ee448e GSL-2828399820ef4928cc89b65605dca5dc68efca6e.tar.gz 2f190118bddbf2e070519d0244eafd15ae7919f9759f925f593ce43988a7f9ab023c50bec3768404926e8cc661e829f6a55bec5e9e58c58735c050338fbcec16 no-execinfo.patch " From 4677e14f49e0193e31d91984b988170989a0fbbb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:18:58 -0400 Subject: [PATCH 575/738] backports/libmedc: fix source url --- backports/libmedc/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD index 39408fc..8976805 100644 --- a/backports/libmedc/APKBUILD +++ b/backports/libmedc/APKBUILD @@ -7,15 +7,15 @@ pkgdesc="Open source library for numerical simulation" url="https://www.salome-platform.org/" arch="all" license="GPL-3.0-or-later" -makedepends="cmake hdf5-dev swig3 python3-dev samurai" +makedepends="cmake hdf5-dev swig python3-dev samurai" options="!check" #test suite is nonfunctional with python bindings subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" source=" - ftp://ftp.cea.fr/pub/salome/prerequisites/med-$pkgver.tar.gz + https://files.salome-platform.org/Salome/medfile/med-$pkgver.tar.gz hdf5.patch cmake-config-dir.patch " -builddir="$srcdir"/med-$pkgver +builddir="$srcdir/med-$pkgver" build() { cmake -B build -G Ninja \ From bcbb961623dfcace9ef39789a6e322ee404dbade Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:19:19 -0400 Subject: [PATCH 576/738] backports/libnestd: fix build on edge --- backports/libnest2d/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/libnest2d/APKBUILD b/backports/libnest2d/APKBUILD index bc8059b..c0e8dd5 100644 --- a/backports/libnest2d/APKBUILD +++ b/backports/libnest2d/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=libnest2d pkgver=0.4 -pkgrel=6 +pkgrel=7 pkgdesc="2D irregular bin packaging and nesting library written in modern C++" url="https://github.com/tamasmeszaros/libnest2d" arch="noarch" @@ -27,7 +27,7 @@ build() { check() { cd build - CTEST_OUTPUT_ON_FAILURE=TRUE ctest + ctest } package() { From 5ccaf8e4d76c4d93af30c5a1ca83af8afb40c487 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:19:33 -0400 Subject: [PATCH 577/738] backports/libspatialindex: fix build on edge --- backports/libspatialindex/APKBUILD | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/backports/libspatialindex/APKBUILD b/backports/libspatialindex/APKBUILD index 1de6552..4ef768c 100644 --- a/backports/libspatialindex/APKBUILD +++ b/backports/libspatialindex/APKBUILD @@ -1,33 +1,36 @@ # Contributor: Alex Yam -# Maintainer: Alex Yam +# Maintainer: Celeste +maintainer="Celeste " pkgname=libspatialindex pkgver=0_git20210205 _commit=8ee223632f95c81f49f5eb2d547ad973475c4601 -pkgrel=1 -pkgdesc="extensible framework for robust spatial indexing methods" +pkgrel=2 +pkgdesc="Extensible framework for robust spatial indexing methods" url="https://libspatialindex.org/" arch="all" license="MIT" -makedepends="cmake" +makedepends="cmake samurai" subpackages="$pkgname-dev" source="$pkgname-$_commit.tar.gz::https://github.com/libspatialindex/libspatialindex/archive/$_commit.tar.gz" builddir="$srcdir/$pkgname-$_commit" build() { - cmake -B build \ + cmake -B build -G Ninja \ -DCMAKE_BUILD_TYPE=MinSizeRel \ -DCMAKE_PREFIX_PATH=/usr \ -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_TESTING=ON + -DBUILD_TESTING="$(want_check && echo ON || echo OFF)" cmake --build build } check() { - cd build && ctest + ctest --test-dir build } package() { - DESTDIR="$pkgdir" cmake --build build --target install + DESTDIR="$pkgdir" cmake --install build } -sha512sums="caf91aac77b75445e4fc4d0baedcd10c619b2097dfd841b00339d9ddd4b73db05b99de1d84be88f1083f4713a936cf110d5851523491f5a74c6f96e1d5795dbb libspatialindex-8ee223632f95c81f49f5eb2d547ad973475c4601.tar.gz" +sha512sums=" +caf91aac77b75445e4fc4d0baedcd10c619b2097dfd841b00339d9ddd4b73db05b99de1d84be88f1083f4713a936cf110d5851523491f5a74c6f96e1d5795dbb libspatialindex-8ee223632f95c81f49f5eb2d547ad973475c4601.tar.gz +" From c1baeb0f355ff86e725383b42f1410c0edcdeec2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:19:47 -0400 Subject: [PATCH 578/738] backports/nb: upgrade to 7.19.1 --- backports/nb/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/nb/APKBUILD b/backports/nb/APKBUILD index d5ba0c6..9540e5c 100644 --- a/backports/nb/APKBUILD +++ b/backports/nb/APKBUILD @@ -1,7 +1,7 @@ # Contributor: Quillith # Maintainer: Quillith pkgname=nb -pkgver=7.15.1 +pkgver=7.19.1 pkgrel=0 pkgdesc="Command line note-taking, bookmarking, archiving, and knowledge base application" url="https://github.com/xwmx/nb" @@ -41,5 +41,5 @@ full() { } sha512sums=" -95229ac3c7da47c8e8e80fb68376dcf866fa2c2799e0c150e225f453e92b714c592dd67e016054a6a6f7d53c09f7cc537250217057d42872fb273ee911e82757 nb-7.15.1.tar.gz +fdfcedc5a32c1a5fe62b00141e25193bc33eee9249fef559938f2b4baf0bff5eb7cc792db3c664c68afb2ba2db84303432790ae5254a9cdd319ce4d9a9face9f nb-7.19.1.tar.gz " From 91d930b63d60df33b6f78e2441fccf2df22769e5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:19:57 -0400 Subject: [PATCH 579/738] backports/nlopt: upgrade to 2.10.0 --- backports/nlopt/APKBUILD | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/backports/nlopt/APKBUILD b/backports/nlopt/APKBUILD index 49b6b8b..66aea68 100644 --- a/backports/nlopt/APKBUILD +++ b/backports/nlopt/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Celeste maintainer="Celeste " pkgname=nlopt -pkgver=2.8.0 +pkgver=2.10.0 pkgrel=0 pkgdesc="Library for nonlinear optimization" url="https://github.com/stevengj/nlopt" @@ -40,12 +40,13 @@ build() { -DCMAKE_INSTALL_LIBDIR=lib \ -DBUILD_SHARED_LIBS=ON \ -DCMAKE_BUILD_TYPE=MinSizeRel \ + -DNLOPT_TESTS="$(want_check && echo ON || echo OFF)" \ $crossopts cmake --build build } check() { - ctest --test-dir build --output-on-failure + ctest --test-dir build } package() { @@ -67,5 +68,5 @@ octave() { } sha512sums=" -cb294caa5532e11ae0d22ed849705920bbae79f712144c840a5ca865ef8e6a15c6c9540c81ced0c3c05b9f44c360d50f74e235e69d893be34b7e1c5599f07c71 nlopt-2.8.0.tar.gz +7668db6997ba141ee1759f222bad23a7854aa17962470653ddb5824c25100b50f52c462441f0cc12a62e2322ff084c7f7b7fab09471b0acb13a861d7f7575655 nlopt-2.10.0.tar.gz " From 637e2f14edd9413779e885e0a4cfc5562d7318f5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:20:15 -0400 Subject: [PATCH 580/738] backports/apsw: upgrade to 3.49.1.0 --- backports/py3-apsw/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD index 051f2c9..8f034f7 100644 --- a/backports/py3-apsw/APKBUILD +++ b/backports/py3-apsw/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Francesco Colista pkgname=py3-apsw _pkgname=apsw -pkgver=3.47.2.0 +pkgver=3.49.1.0 pkgrel=0 pkgdesc="Another Python SQLite Wrapper" url="https://github.com/rogerbinns/apsw" @@ -41,6 +41,6 @@ package() { } sha512sums=" -9884f36811bfff7276642841ebaa198669c48f4d54bb764a985ea5bdd88f9f630f9fd8a13cf0a44b5675e374c2a911fcec579ca4165622e8049bff327ef66c1d py3-apsw-3.47.2.0.zip +faae9cceb462428345fd2815a970dfc80574848f87bade7cceb09aed17127d020fd16402b3d36afe0fbc6bf707a408feea0ce038486c2a68a2ab1077a9b68d0a py3-apsw-3.49.1.0.zip 8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch " From 0a65a63be1896cad8b3d78a69a7c8a3118e0eab5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:20:35 -0400 Subject: [PATCH 581/738] backports/py3-arcus: bump pkgrel --- backports/py3-arcus/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD index 1971b01..d3643d7 100644 --- a/backports/py3-arcus/APKBUILD +++ b/backports/py3-arcus/APKBUILD @@ -3,7 +3,7 @@ pkgname=py3-arcus # Needs to be upgraded in sync with libarcus pkgver=5.3.0 -pkgrel=1 +pkgrel=4 pkgdesc="Python bindings for libarcus" url="https://github.com/Ultimaker/pyArcus" arch="all" From 11b717b3c22be762fca85da1a2be7959091933ad Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:20:52 -0400 Subject: [PATCH 582/738] backports/py3-flask-limiter: upgrade to 3.10.1 --- backports/py3-flask-limiter/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD index 9bca96d..cd15f22 100644 --- a/backports/py3-flask-limiter/APKBUILD +++ b/backports/py3-flask-limiter/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda maintainer="lauren n. liberda " pkgname=py3-flask-limiter -pkgver=3.9.2 +pkgver=3.10.1 pkgrel=0 pkgdesc="Rate Limiting extension for Flask" url="https://github.com/alisaifee/flask-limiter" @@ -50,6 +50,6 @@ package() { } sha512sums=" -69e488a641ab39c088185fabcde19ebb4cbe1683e9143efdf146163bb0254e0c4f8b4b72df407542d540394e7e3b2d7498b9c93c25ae8a8128e05e319f342318 flask-limiter-3.9.2.tar.gz +a0d3af6f93d4283309d6df46ddb7fed4c358bbc712c2bd9e6897362c6d086c395cb9587c3d9da283ad757b574fd8c09d909f3c4b76d02ae8aade3e61dbea6aa0 flask-limiter-3.10.1.tar.gz 1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch " From 48ef10378e69262ade6c72f1487f56efdfdcea10 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:21:15 -0400 Subject: [PATCH 583/738] backports/py3-piby: sync with aports --- backports/py3-pivy/APKBUILD | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD index 6b5f0f5..300d9e7 100644 --- a/backports/py3-pivy/APKBUILD +++ b/backports/py3-pivy/APKBUILD @@ -5,8 +5,9 @@ pkgver=0.6.9 pkgrel=2 pkgdesc="Python3 bindings for coin" url="https://github.com/coin3d/pivy" -# riscv64: blocked by py3-pyside6 -arch="all !riscv64" +# riscv64 blocked by py3-pyside6 +# armhf blocked by qt6-qtdeclarative -> py3-pyside6 +arch="all !riscv64 !armhf" license="ISC" depends="py3-pyside6" makedepends="swig soqt-dev qt6-qtbase-dev python3-dev glu-dev cmake samurai" From 747c2c79a6936f4bd6e386de16c5b8a3bc538d15 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:21:27 -0400 Subject: [PATCH 584/738] backports/py3-pyinstrument: upgrade to 5.0.2 --- backports/py3-pyinstrument/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD index e4ab2cf..6070e94 100644 --- a/backports/py3-pyinstrument/APKBUILD +++ b/backports/py3-pyinstrument/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Celeste maintainer="Celeste " pkgname=py3-pyinstrument -pkgver=4.7.3 +pkgver=5.0.2 pkgrel=0 pkgdesc="Call stack profiler for Python" url="https://github.com/joerick/pyinstrument" @@ -46,5 +46,5 @@ package() { } sha512sums=" -24feac08a9726379b749f391bdb6ddbca6d3631cf3515d3ead85ace7a96f213bf60e2cd4d4f3c7cade68b5e481b4bfd562482817befe6322579101a8d91add66 py3-pyinstrument-4.7.3.tar.gz +7eeb0e05ceb31eab6b4cfcfae7095e7fe9399a7292a12ea427c6ce4f343b1f85be60496c071c2a983b9d0b40f76e18140a836b77a6df0765e40779758212d4cf py3-pyinstrument-5.0.2.tar.gz " From 420fc93b8481751627ac8404b1da9ee39a5df7f6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:21:45 -0400 Subject: [PATCH 585/738] backports/py3-pynest2d: fix build on edge --- backports/py3-pynest2d/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-pynest2d/APKBUILD b/backports/py3-pynest2d/APKBUILD index 357a1c3..503b762 100644 --- a/backports/py3-pynest2d/APKBUILD +++ b/backports/py3-pynest2d/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Anjandev Momi pkgname=py3-pynest2d pkgver=5.2.2 -pkgrel=4 +pkgrel=5 pkgdesc="Python bindings for libnest2d" url="https://github.com/Ultimaker/pynest2d" arch="all" @@ -34,7 +34,7 @@ build() { check() { cd build - CTEST_OUTPUT_ON_FAILURE=TRUE ctest + ctest } package() { From ffdbdaafd93f7bc34d66e0202dd2550c1ac426c5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:21:58 -0400 Subject: [PATCH 586/738] backports/py3-rtree: upgrade to 1.4.0 --- backports/py3-rtree/APKBUILD | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD index 491e8e9..f42ccfc 100644 --- a/backports/py3-rtree/APKBUILD +++ b/backports/py3-rtree/APKBUILD @@ -1,9 +1,9 @@ # Contributor: Alex Yam -# Maintainer: Alex Yam +# Maintainer: Celeste +maintainer="Celeste " pkgname=py3-rtree -_pkgname=rtree -pkgver=1.1.0 -pkgrel=2 +pkgver=1.4.0 +pkgrel=1 pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" url="https://pypi.org/project/Rtree/" # s390x: Test failed: IndexSerialization::test_interleaving - AssertionError @@ -15,7 +15,7 @@ makedepends="py3-setuptools py3-wheel py3-gpep517" checkdepends="py3-pytest py3-numpy" subpackages="$pkgname-pyc" source="$pkgname-$pkgver.tar.gz::https://github.com/Toblerity/rtree/archive/$pkgver.tar.gz" -builddir="$srcdir"/$_pkgname-$pkgver +builddir="$srcdir/rtree-$pkgver" build() { gpep517 build-wheel \ @@ -35,5 +35,5 @@ package() { } sha512sums=" -97a87027e49520f12cb86444ee8a9795fabeec6d8f0e3e869f2714df8f7c649ced1374385852af0ce7d7eb91e5a2cb464a4330807be15d538dc0a4d8de7b7ca2 py3-rtree-1.1.0.tar.gz +9f253a4e4bce1e9210943d1a7b211895baf0478927c58a576235492f2705f4ff61df5fff46db382d6b7c04bde058f046ea0a408a4b504bd1a9bde37c8b1c277c py3-rtree-1.4.0.tar.gz " From 83207c4dae9c2dbded5d698f5590a7527dde7af7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:22:17 -0400 Subject: [PATCH 587/738] backports/shntool: sync pkgrel --- backports/shntool/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/shntool/APKBUILD b/backports/shntool/APKBUILD index 60dd2b5..117a36b 100644 --- a/backports/shntool/APKBUILD +++ b/backports/shntool/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Carlo Landmeter -# Maintainer: Jean-Louis Fuchs +# Maintainer: Jean-Louis Fuchs pkgname=shntool pkgver=3.0.10 -pkgrel=4 +pkgrel=5 pkgdesc="A multi-purpose WAVE data processing and reporting utility" url="http://shnutils.freeshell.org/shntool/" arch="all" From 25ba00ae7fe3f52b255cfda4b890df4285c7e114 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:22:43 -0400 Subject: [PATCH 588/738] backports/signal-desktop: upgrade to 7.55.0 --- backports/signal-desktop/APKBUILD | 12 +++++++----- backports/signal-desktop/signal-desktop | 6 ------ 2 files changed, 7 insertions(+), 11 deletions(-) delete mode 100755 backports/signal-desktop/signal-desktop diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index aea8d4c..f1cd958 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,14 +2,14 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.54.0 +pkgver=7.55.0 pkgrel=0 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron arch="aarch64 x86_64" license="AGPL-3.0-only" -_llvmver=19 +_llvmver=20 depends=" electron font-barlow @@ -67,7 +67,7 @@ makedepends=" options="net !check" # use _check_depends to validate this -_libsignalver=0.70.0 +_libsignalver=0.71.1 _ringrtcver=2.51.0 _webrtcver=6998b _sqlcipherver=2.0.1 @@ -92,6 +92,7 @@ source=" webrtc-gcc13.patch webrtc-rollback-red.patch webrtc-rollback-3rdparty-build-gn.patch + webrtc-pipewire-1.4.patch signal-desktop.sh " @@ -477,8 +478,8 @@ package() { } sha512sums=" -ca512bfdd8c78b6c440214db95347b59928314cd27d74b22828de5d701aaf8e675eb5c71603bb6a39fd224812204d9f656290637d402966760bdb3958d3923c8 Signal-Desktop-7.54.0.tar.gz -52d66cf2643402673858def81a9a3c98a0d16525e126c9e5ea1e3c62150f321e486c8c79bcea11a9636c9b05f541fdf0718869d52b9a789f05cad741ba37c7ad libsignal-0.70.0.tar.gz +59e1aae568735976e79ee38d55c87b137f7075063985e72deb42b53af6facd7ed2a8c0912fd86cb88df3182d17c1b58af11bf1501135e6855cfd5ee70270905e Signal-Desktop-7.55.0.tar.gz +3d1b5b84d42b4f6da46a2f626ec72931d3d7432c10c0d43e562851933f6cf0a434630eb5f8bb9a586d27d6ad5a5d8a6c96873dc468e53bbf6297c35a8da090d8 libsignal-0.71.1.tar.gz 8e32d75f9f8216106b6858d9ab58ad53f209408fc155fe27dec184c8c65c9ab5a3a93e9567953f209424ed435ccc6d4903a49a4edae36eb744a897cc02098312 ringrtc-2.51.0.tar.gz 592987c1661de464a4e6dee3081cb5fd32e5afdacdba43d901557a217e62301b4655009ad5bdc0c1dcff5e8b67d7acd68ac953cd638f31196162aa3ccdd9c63b node-sqlcipher-2.0.1.tar.gz ba02cb0c293210f9a683b0e08c6acbe84f5b78089329ec017b0db3493b38ccf39e92c49c2475dc66b5ce3bfe060686718cb5053787e2d61ed320dadb22891989 webrtc-6998b.tar.zst @@ -495,5 +496,6 @@ aca92e4de6cd005d660d7e8b99607de96ca2d7dc220e3465247d517e915e4d41a4b0eb519e85c5ec 3f1095861a79862ab5a55c86d7e353d272974617afba39e4d4441024bede8d7b9b8e122da90d56a9c3c0965171803d6b9e29e91d78167a08c6bcc86b3eedab18 webrtc-gcc13.patch 8f53dcf3264c5cec338f037e57a7770ec939ee06dfb0c5dfeab23967a3a64d3f861a6b5419766ac892676036b4522bce2f47279ca3658b5c0b6a31c82ac05053 webrtc-rollback-red.patch f8bd574a0de077a643ced26e8a0e3f162e014bbf91c957bbefd113883a70e2b63e483bf400b7e2da8d09edfe76d4f6a257f194a14124f344f1625c5632d12acb webrtc-rollback-3rdparty-build-gn.patch +7fa0344a144d5b8f05d0962799b8ce1dbe8f2d403a311d4fbf802a2d032e6586a1268387052b529e809c4740a79d6737a63d7e37ea8902ce926b74309dd44fc3 webrtc-pipewire-1.4.patch 87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop.sh " diff --git a/backports/signal-desktop/signal-desktop b/backports/signal-desktop/signal-desktop deleted file mode 100755 index 370469c..0000000 --- a/backports/signal-desktop/signal-desktop +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -# app chooses config (including used endpoints) based on this -export NODE_ENV=production - -exec electron /usr/lib/signal-desktop/app.asar From 4919fe261cffa782c901a5a28886e5a9596a830f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:22:59 -0400 Subject: [PATCH 589/738] backports/soqt: fix build on edge --- backports/soqt/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/soqt/APKBUILD b/backports/soqt/APKBUILD index e4c6995..b96f3dd 100644 --- a/backports/soqt/APKBUILD +++ b/backports/soqt/APKBUILD @@ -7,14 +7,14 @@ pkgdesc="GUI binding library for coin" url="https://github.com/coin3d/soqt" arch="all" license="BSD-3-Clause" -makedepends="coin-dev cmake mesa-dev qt5-qtbase-dev doxygen" +makedepends="coin-dev cmake mesa-dev samurai qt5-qtbase-dev doxygen" options="!check" # test suite consists only of interactive programs subpackages="$pkgname-dev $pkgname-doc" source="https://github.com/coin3d/soqt/releases/download/v$pkgver/soqt-$pkgver-src.tar.gz" builddir="$srcdir/$pkgname" build() { - cmake -B build . \ + cmake -B build -G Ninja . \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCMAKE_BUILD_TYPE=None \ -DSOQT_BUILD_DOCUMENTATION=ON \ From cea504a9246d9df2dbc5111234b8a270248bf5e4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:23:34 -0400 Subject: [PATCH 590/738] backports/swig3: drop to not needed --- backports/swig3/APKBUILD | 46 ----- ...de-for-constant-expressions-containi.patch | 191 ------------------ 2 files changed, 237 deletions(-) delete mode 100644 backports/swig3/APKBUILD delete mode 100644 backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch diff --git a/backports/swig3/APKBUILD b/backports/swig3/APKBUILD deleted file mode 100644 index 4abe017..0000000 --- a/backports/swig3/APKBUILD +++ /dev/null @@ -1,46 +0,0 @@ -# Maintainer: Noel Kuntze -pkgname=swig3 -pkgver=3.0.12 -pkgrel=3 -pkgdesc="A compiler that makes it easy to integrate C and C++ code with scripting languages" -url="https://www.swig.org/" -arch="all" -license="GPL-3.0-only" -depends="guile" -makedepends="zlib-dev pcre-dev bison" -checkdepends="boost-dev perl-dev python3-dev diffutils" -options="!check" # Check for javascript fails -subpackages="$pkgname-doc" -source="https://downloads.sourceforge.net/swig/swig-$pkgver.tar.gz - swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch -" - -builddir="$srcdir/swig-$pkgver" - -prepare() { - default_prepare - update_config_sub -} - -build() { - ./configure \ - --build=$CBUILD \ - --host=$CHOST \ - --prefix=/usr \ - --with-python3=/usr/bin/python3 \ - --program-suffix=3.0 - make -} - -check() { - env PERL5LIB=. make check -} - -package() { - make DESTDIR="$pkgdir" install - install -D -m644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE - install -D -m644 LICENSE-UNIVERSITIES "$pkgdir"/usr/share/licenses/$pkgname/LICENSE-UNIVERSITIES -} - -sha512sums="5eaa2e06d8e4197fd02194051db1e518325dbb074a4c55a91099ad9c55193874f577764afc9029409a41bd520a95154095f26e33ef5add5c102bb2c1d98d33eb swig-3.0.12.tar.gz -0cde94a04a3f914f6e1ac79866d199981600c0f4be18b52d08194de96d524027c6572eacd5c1e155a9007fc34ed9dece27dbcb974874de072fb42bf564978cd0 swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch" diff --git a/backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch b/backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch deleted file mode 100644 index 7198c21..0000000 --- a/backports/swig3/swig-3.0.12-Fix-generated-code-for-constant-expressions-containi.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 90ba174fcea1618af57aa594199541d47a89b7f6 Mon Sep 17 00:00:00 2001 -From: William S Fulton -Date: Sun, 17 Sep 2017 19:02:55 +0100 -Subject: [PATCH 1/2] Fix generated code for constant expressions containing - wchar_t L literals. - -Such as: - # define __WCHAR_MAX (0x7fffffff + L'\0') - -Reported on swig-user mailing list. ---- - CHANGES.current | 5 +++++ - Examples/test-suite/csharp/preproc_constants_c_runme.cs | 3 ++- - Examples/test-suite/csharp/preproc_constants_runme.cs | 2 ++ - Examples/test-suite/d/preproc_constants_c_runme.1.d | 2 ++ - Examples/test-suite/d/preproc_constants_c_runme.2.d | 2 ++ - Examples/test-suite/d/preproc_constants_runme.1.d | 2 ++ - Examples/test-suite/d/preproc_constants_runme.2.d | 2 ++ - Examples/test-suite/php/preproc_constants_c_runme.php | 2 ++ - Examples/test-suite/php/preproc_constants_runme.php | 2 ++ - Examples/test-suite/php5/preproc_constants_c_runme.php | 2 ++ - Examples/test-suite/php5/preproc_constants_runme.php | 2 ++ - Examples/test-suite/preproc_constants.i | 3 +++ - Source/CParse/parser.y | 2 +- - 13 files changed, 29 insertions(+), 2 deletions(-) - -#diff --git a/CHANGES.current b/CHANGES.current -#index 1e4a244..b455a9f 100644 -#--- a/CHANGES.current -#+++ b/CHANGES.current -#@@ -7,6 +7,11 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/ -# Version 4.0.0 (in progress) -# =========================== -# -#+2017-09-17: wsfulton -#+ Fix generated code for constant expressions containing wchar_t L literals such as: -#+ # define __WCHAR_MAX (0x7fffffff + L'\0') -#+ # define __WCHAR_MIN (-__WCHAR_MAX - 1) -#+ -# 2017-09-10: mlamarre -# [Python] Patch #1083. Define_DEBUG to 1 to do exactly like Visual Studio -# /LDd, /MDd or /MTd compiler options. -diff --git a/Examples/test-suite/csharp/preproc_constants_c_runme.cs b/Examples/test-suite/csharp/preproc_constants_c_runme.cs -index 76c684d..1c28e49 100644 ---- a/Examples/test-suite/csharp/preproc_constants_c_runme.cs -+++ b/Examples/test-suite/csharp/preproc_constants_c_runme.cs -@@ -61,7 +61,8 @@ public class runme { - assert( typeof(int) == preproc_constants_c.EXPR_LAND.GetType() ); - assert( typeof(int) == preproc_constants_c.EXPR_LOR.GetType() ); - assert( typeof(double) == preproc_constants_c.EXPR_CONDITIONAL.GetType() ); -- -+ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MAX.GetType() ); -+ assert( typeof(int) == preproc_constants_c.EXPR_WCHAR_MIN.GetType() ); - } - static void assert(bool assertion) { - if (!assertion) -diff --git a/Examples/test-suite/csharp/preproc_constants_runme.cs b/Examples/test-suite/csharp/preproc_constants_runme.cs -index 9fae591..6b02e30 100644 ---- a/Examples/test-suite/csharp/preproc_constants_runme.cs -+++ b/Examples/test-suite/csharp/preproc_constants_runme.cs -@@ -60,6 +60,8 @@ public class runme { - assert( typeof(bool) == preproc_constants.EXPR_LAND.GetType() ); - assert( typeof(bool) == preproc_constants.EXPR_LOR.GetType() ); - assert( typeof(double) == preproc_constants.EXPR_CONDITIONAL.GetType() ); -+ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MAX.GetType() ); -+ assert( typeof(int) == preproc_constants.EXPR_WCHAR_MIN.GetType() ); - - } - static void assert(bool assertion) { -diff --git a/Examples/test-suite/d/preproc_constants_c_runme.1.d b/Examples/test-suite/d/preproc_constants_c_runme.1.d -index d846c71..2b349af 100644 ---- a/Examples/test-suite/d/preproc_constants_c_runme.1.d -+++ b/Examples/test-suite/d/preproc_constants_c_runme.1.d -@@ -61,4 +61,6 @@ void main() { - static assert(is(int == typeof(EXPR_LAND()))); - static assert(is(int == typeof(EXPR_LOR()))); - static assert(is(double == typeof(EXPR_CONDITIONAL()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); - } -diff --git a/Examples/test-suite/d/preproc_constants_c_runme.2.d b/Examples/test-suite/d/preproc_constants_c_runme.2.d -index 9bdbb93..1bac525 100644 ---- a/Examples/test-suite/d/preproc_constants_c_runme.2.d -+++ b/Examples/test-suite/d/preproc_constants_c_runme.2.d -@@ -61,4 +61,6 @@ void main() { - static assert(is(int == typeof(EXPR_LAND()))); - static assert(is(int == typeof(EXPR_LOR()))); - static assert(is(double == typeof(EXPR_CONDITIONAL()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); - } -diff --git a/Examples/test-suite/d/preproc_constants_runme.1.d b/Examples/test-suite/d/preproc_constants_runme.1.d -index 009405f..f743f48 100644 ---- a/Examples/test-suite/d/preproc_constants_runme.1.d -+++ b/Examples/test-suite/d/preproc_constants_runme.1.d -@@ -60,4 +60,6 @@ void main() { - static assert(is(bool == typeof(EXPR_LAND()))); - static assert(is(bool == typeof(EXPR_LOR()))); - static assert(is(double == typeof(EXPR_CONDITIONAL()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); - } -diff --git a/Examples/test-suite/d/preproc_constants_runme.2.d b/Examples/test-suite/d/preproc_constants_runme.2.d -index 2d92ef0..0d96c37 100644 ---- a/Examples/test-suite/d/preproc_constants_runme.2.d -+++ b/Examples/test-suite/d/preproc_constants_runme.2.d -@@ -60,4 +60,6 @@ void main() { - static assert(is(bool == typeof(EXPR_LAND()))); - static assert(is(bool == typeof(EXPR_LOR()))); - static assert(is(double == typeof(EXPR_CONDITIONAL()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MAX()))); -+ static assert(is(int == typeof(EXPR_WCHAR_MIN()))); - } -diff --git a/Examples/test-suite/php/preproc_constants_c_runme.php b/Examples/test-suite/php/preproc_constants_c_runme.php -index af9b76e..e59fe18 100644 ---- a/Examples/test-suite/php/preproc_constants_c_runme.php -+++ b/Examples/test-suite/php/preproc_constants_c_runme.php -@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant - check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type"); - check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type"); - check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); -+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); -+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); - - ?> -diff --git a/Examples/test-suite/php/preproc_constants_runme.php b/Examples/test-suite/php/preproc_constants_runme.php -index 5c9119b..8e117ea 100644 ---- a/Examples/test-suite/php/preproc_constants_runme.php -+++ b/Examples/test-suite/php/preproc_constants_runme.php -@@ -61,5 +61,7 @@ check::equal(gettype(preproc_constants::EXPR_OR), "integer", "preproc_constants. - check::equal(gettype(preproc_constants::EXPR_LAND), "boolean", "preproc_constants.EXPR_LAND has unexpected type"); - check::equal(gettype(preproc_constants::EXPR_LOR), "boolean", "preproc_constants.EXPR_LOR has unexpected type"); - check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); -+check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); -+check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); - - ?> -diff --git a/Examples/test-suite/php5/preproc_constants_c_runme.php b/Examples/test-suite/php5/preproc_constants_c_runme.php -index 1ea0195..d978fab 100644 ---- a/Examples/test-suite/php5/preproc_constants_c_runme.php -+++ b/Examples/test-suite/php5/preproc_constants_c_runme.php -@@ -62,5 +62,7 @@ check::equal(gettype(preproc_constants_c::EXPR_OR), "integer", "preproc_constant - check::equal(gettype(preproc_constants_c::EXPR_LAND), "integer", "preproc_constants.EXPR_LAND has unexpected type"); - check::equal(gettype(preproc_constants_c::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type"); - check::equal(gettype(preproc_constants_c::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); -+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); -+check::equal(gettype(preproc_constants_c::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); - - ?> -diff --git a/Examples/test-suite/php5/preproc_constants_runme.php b/Examples/test-suite/php5/preproc_constants_runme.php -index fb9ee4f..7527026 100644 ---- a/Examples/test-suite/php5/preproc_constants_runme.php -+++ b/Examples/test-suite/php5/preproc_constants_runme.php -@@ -70,5 +70,7 @@ check::equal(gettype(preproc_constants::EXPR_LAND), "integer", "preproc_constant - check::equal(gettype(preproc_constants::EXPR_LOR), "integer", "preproc_constants.EXPR_LOR has unexpected type"); - - check::equal(gettype(preproc_constants::EXPR_CONDITIONAL), "double", "preproc_constants.EXPR_CONDITIONAL has unexpected type"); -+check::equal(gettype(preproc_constants::EXPR_WCHAR_MAX), "integer", "preproc_constants.EXPR_WCHAR_MAX has unexpected type"); -+check::equal(gettype(preproc_constants::EXPR_WCHAR_MIN), "integer", "preproc_constants.EXPR_WCHAR_MIN has unexpected type"); - - ?> -diff --git a/Examples/test-suite/preproc_constants.i b/Examples/test-suite/preproc_constants.i -index 3a999ad..16b44c9 100644 ---- a/Examples/test-suite/preproc_constants.i -+++ b/Examples/test-suite/preproc_constants.i -@@ -87,6 +87,9 @@ - #define EXPR_LOR 0xFF || 1 - #define EXPR_CONDITIONAL true ? 2 : 2.2 - -+#define EXPR_WCHAR_MAX (0x7fffffff + L'\0') -+#define EXPR_WCHAR_MIN (-EXPR_WCHAR_MAX - 1) -+ - #define EXPR_CHAR_COMPOUND_ADD 'A' + 12 - #define EXPR_CHAR_COMPOUND_LSHIFT 'B' << 6 - #define H_SUPPRESS_SCALING_MAGIC (('s'<<24) | ('u'<<16) | ('p'<<8) | 'p') -diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y -index 2e92cd0..273dadb 100644 ---- a/Source/CParse/parser.y -+++ b/Source/CParse/parser.y -@@ -194,7 +194,7 @@ int SWIG_cparse_template_reduce(int treduce) { - * ----------------------------------------------------------------------------- */ - - static int promote_type(int t) { -- if (t <= T_UCHAR || t == T_CHAR) return T_INT; -+ if (t <= T_UCHAR || t == T_CHAR || t == T_WCHAR) return T_INT; - return t; - } - --- -2.9.5 - From 260eca3424a8cb654b48b2604f7d4ee5aa1d60d0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:23:54 -0400 Subject: [PATCH 591/738] backports/uranium: fix build on edge --- backports/uranium/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD index 7badd09..e896971 100644 --- a/backports/uranium/APKBUILD +++ b/backports/uranium/APKBUILD @@ -42,7 +42,7 @@ build() { check() { # useless code style test with another dependency - ctest --output-on-failure -T Test + ctest -T Test } package() { From 50524f1f2a1ae8671bf83ea85347335582cab271 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 18:38:31 -0400 Subject: [PATCH 592/738] ci: check backports of 3.22 --- .forgejo/workflows/check-backports.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml index a25ad4e..cd8f63b 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -11,7 +11,7 @@ jobs: container: image: alpine:latest env: - downstream: https://ayakael.net/api/packages/forge/alpine/v3.21/backports + downstream: https://ayakael.net/api/packages/forge/alpine/v3.22/backports ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 1 ALL_PACKAGES: true From 48447cd14c9c7786a5715c0877aa2cade9542e15 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:05:21 -0400 Subject: [PATCH 593/738] unmaintained/znapzend: move from user --- {user => unmaintained}/znapzend/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/znapzend/APKBUILD (100%) diff --git a/user/znapzend/APKBUILD b/unmaintained/znapzend/APKBUILD similarity index 100% rename from user/znapzend/APKBUILD rename to unmaintained/znapzend/APKBUILD From 24d2f84bab20ea195a9ff76ac0d5abb192a81e00 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:05:47 -0400 Subject: [PATCH 594/738] unmaintained/soci: move from user --- {user => unmaintained}/soci/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/soci/APKBUILD (100%) diff --git a/user/soci/APKBUILD b/unmaintained/soci/APKBUILD similarity index 100% rename from user/soci/APKBUILD rename to unmaintained/soci/APKBUILD From ff38eb32003e9592d79caaf4ebc0f48087ec89b9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:06:56 -0400 Subject: [PATCH 595/738] user/freecad: drop due to in backports --- user/freecad/APKBUILD | 108 --- user/freecad/missing-include-cstdint.patch | 11 - user/freecad/no-execinfo.patch | 46 -- user/freecad/no-workaround-spnav.patch | 69 -- user/freecad/numpy-1.20.patch | 25 - user/freecad/opencascade-7.8.0.patch | 877 --------------------- user/freecad/resourceDirectory.patch | 11 - user/freecad/tests.patch | 33 - 8 files changed, 1180 deletions(-) delete mode 100644 user/freecad/APKBUILD delete mode 100644 user/freecad/missing-include-cstdint.patch delete mode 100644 user/freecad/no-execinfo.patch delete mode 100644 user/freecad/no-workaround-spnav.patch delete mode 100644 user/freecad/numpy-1.20.patch delete mode 100644 user/freecad/opencascade-7.8.0.patch delete mode 100644 user/freecad/resourceDirectory.patch delete mode 100644 user/freecad/tests.patch diff --git a/user/freecad/APKBUILD b/user/freecad/APKBUILD deleted file mode 100644 index 30c9eb5..0000000 --- a/user/freecad/APKBUILD +++ /dev/null @@ -1,108 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: Aiden Grossman -pkgname=freecad -pkgver=0.20.2 -pkgrel=5 -pkgdesc="Free and open source 3D parametric modeler" -url="https://freecadweb.org/" -license="LGPL-2.0-or-later" -arch="" # removed dependency py3-pyside2 -#arch="x86_64" # dependency OpenCascade is only x86_64 -depends=" - graphviz - hdf5 - opencascade - py3-matplotlib - py3-numpy - py3-pivy - py3-ply - py3-pyside2 - py3-six - py3-yaml - python3 - " -makedepends=" - boost-dev - cmake - coin-dev - doxygen - eigen-dev - freeimage-dev - glu-dev - hdf5-dev - libmedc-dev - libshiboken2-dev - onetbb-dev - opencascade-dev - py3-pyside2-dev - python3-dev - shiboken2 - qt5-qtsvg-dev - qt5-qtwebengine-dev - qt5-qtxmlpatterns-dev - samurai - swig - vtk-dev - xerces-c-dev - " -checkdepends="xvfb-run mesa mesa-dri-gallium font-opensans" -source="https://github.com/FreeCAD/FreeCAD/archive/$pkgver/freecad-$pkgver.tar.gz - $pkgname-python3.11-1.patch::https://github.com/FreeCAD/FreeCAD/commit/fe02d63c8c9b1280978be841d04e68a0a55cceb9.patch - numpy-1.20.patch - no-execinfo.patch - no-workaround-spnav.patch - resourceDirectory.patch - tests.patch - opencascade-7.8.0.patch - missing-include-cstdint.patch - " -builddir="$srcdir/FreeCAD-$pkgver" - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_FLAGS="$CFLAGS -fPIC -w" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS -fPIC -w" \ - -DCMAKE_INSTALL_PREFIX=/usr/lib/freecad \ - -DCMAKE_INSTALL_DATADIR=/usr/share/freecad \ - -DCMAKE_INSTALL_DATAROOTDIR=/usr/share \ - -DCMAKE_INSTALL_DOCDIR=/usr/share/freecad/doc \ - -DBUILD_ENABLE_CXX_STD=C++17 \ - -DBUILD_QT5=ON \ - -DFREECAD_USE_EXTERNAL_PIVY=ON \ - -DFREECAD_USE_OCC_VARIANT="Official Version" \ - -DFREECAD_USE_QT_FILEDIALOG=ON \ - -DPYTHON_EXECUTABLE=/usr/bin/python3 - cmake --build build -} - -check() { - DESTDIR=test_install cmake --install build - mkdir -p test_install/usr/bin - ln -s ../lib/freecad/bin/FreeCAD test_install/usr/bin/FreeCAD - ln -s ../lib/freecad/bin/FreeCADCmd test_install/usr/bin/FreeCADCmd - LD_LIBRARY_PATH="$PWD"/test_install/usr/lib/freecad/lib \ - xvfb-run "$PWD"/test_install/usr/bin/FreeCAD -t 0 -} - -package() { - DESTDIR="$pkgdir" cmake --install build - - # FreeCAD does not initialize correctly when binaries - # are located under /usr/bin; thus, symlinks are necessary. - install -d "$pkgdir"/usr/bin - ln -s /usr/lib/freecad/bin/FreeCAD "$pkgdir"/usr/bin/FreeCAD - ln -s /usr/lib/freecad/bin/FreeCADCmd "$pkgdir"/usr/bin/FreeCADCmd -} - -sha512sums=" -c3acd77dd2bb9a2a23ac354da3b6102effb89c95d675e91421d65486414dfe8cc0188a7212245e0deb63f17b9c5df76133017be09e4cd14b833be8cbec52a08d freecad-0.20.2.tar.gz -75a237f7ed7a89a98c0e5bdb3d3f0788749602daf718089aa0814e05f93ced1e15ad5867c7c87f170b48c5984f9ace1bbc95c4f386ce72bfb8d616323b47f1e5 freecad-python3.11-1.patch -80b08b031810fce7b6d698c662f64fa4f8a904f283f46b478b1d718529164c0ee61ce190f633abf04e03212720480f3f0603b0c1e160af79d7b6bb82da3bd0e4 numpy-1.20.patch -73aaba7015dce7048eb7d2456131b5b5ba4673cc980503331987be54d99daed5f61db015ca33d7d2ef0f02bd3192da8ce122c103c3b93f9959927deb4f0b933e no-execinfo.patch -15696bdaaf77482f1b5d3806535a8004c8cec7d598d62092d9f0394b4ca9e2ad6cedd77c4b86a83a06324d16678c1c6bbf3a390b807729717a2f513e858afd50 no-workaround-spnav.patch -8ba13b17bad66316757d180c1b9e9e72a24382627eac7c43a2264b3b5101e6e8f701775f2b805ed733f500fbcd8b0e8e422ec58a9ab3d948d613b666157d4c52 resourceDirectory.patch -5db19e0aa2ca1fd21f4c56afc9db54390a799262aaa0a741704c2c304b0068fd6ca1dcc086465e12e9c0cfe06aac750aaf9b8f5f4db324539af4dd3394803ff9 tests.patch -f933680dea8744e147f38abce389cb7fd0ec3fb3566454fdd5e6ea07b2faaac5fe61aabe1df3bda9f0d7b4fca16055aa2ad700e9cce10d2604ae37b761b68ade opencascade-7.8.0.patch -fec515cc63830f0e715527c7890173705b24e7d99d225821ec4300104cf3affdee49243bbd4d0a331a902cf04db756a1b8f18f0a17cc71f5757f8b5c73c78ede missing-include-cstdint.patch -" diff --git a/user/freecad/missing-include-cstdint.patch b/user/freecad/missing-include-cstdint.patch deleted file mode 100644 index 363a706..0000000 --- a/user/freecad/missing-include-cstdint.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --color -rupN a/src/3rdParty/libE57Format/include/E57Format.h b/src/3rdParty/libE57Format/include/E57Format.h ---- a/src/3rdParty/libE57Format/include/E57Format.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/libE57Format/include/E57Format.h 2024-02-27 14:06:29.308892531 +0100 -@@ -32,6 +32,7 @@ - //! @file E57Format.h header file for the E57 API - - #include -+#include - #include - #include - diff --git a/user/freecad/no-execinfo.patch b/user/freecad/no-execinfo.patch deleted file mode 100644 index 3e1c39c..0000000 --- a/user/freecad/no-execinfo.patch +++ /dev/null @@ -1,46 +0,0 @@ -diff --git a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp -index 23c5083..54c7ecf 100644 ---- a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp -+++ b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp -@@ -29,7 +29,6 @@ - #ifndef WIN32 - #include - #include --#include - #endif - - -@@ -109,20 +108,7 @@ namespace Kernel_Utils - #ifndef WIN32 - void print_traceback() - { -- void *array[50]; -- size_t size; -- char **strings; -- size_t i; -- -- size = backtrace (array, 40); -- strings = backtrace_symbols (array, size); -- -- for (i = 0; i < size; i++) -- { -- std::cerr << strings[i] << std::endl; -- } -- -- free (strings); -+ std::cerr << "there is no backtrace." << std::endl; - } - #else - #if (_MSC_VER >= 1400) // Visual Studio 2005 -diff --git a/src/App/Application.cpp b/src/App/Application.cpp -index 3081623..ba3525f 100644 ---- a/src/App/Application.cpp -+++ b/src/App/Application.cpp -@@ -1732,7 +1732,6 @@ static void freecadNewHandler () - #endif - - #if defined(FC_OS_LINUX) --#include - #include - #include - diff --git a/user/freecad/no-workaround-spnav.patch b/user/freecad/no-workaround-spnav.patch deleted file mode 100644 index ee4fead..0000000 --- a/user/freecad/no-workaround-spnav.patch +++ /dev/null @@ -1,69 +0,0 @@ -Patch-Source: https://github.com/FreeCAD/FreeCAD/commit/7b377a216b9185960e4cee980a6504dc1a755f50 -fixes stderr reassignment --- -From 7b377a216b9185960e4cee980a6504dc1a755f50 Mon Sep 17 00:00:00 2001 -From: wmayer -Date: Wed, 29 Jun 2022 15:19:18 +0200 -Subject: [PATCH] Gui: remove workaround for spnav 0.23 due to build failure - with musl libc - ---- - src/Gui/3Dconnexion/GuiNativeEventLinux.cpp | 27 --------------------- - 1 file changed, 27 deletions(-) - -diff --git a/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp b/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp -index 7f0ddd75d262..455ece0b36bd 100644 ---- a/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp -+++ b/src/Gui/3Dconnexion/GuiNativeEventLinux.cpp -@@ -21,42 +21,17 @@ - ***************************************************************************/ - - #include --#include - - #include "GuiNativeEventLinux.h" - - #include "GuiApplicationNativeEventAware.h" - #include --#include - #include - - #include - - #include - --namespace { --class RedirectStdErr --{ --public: -- RedirectStdErr() -- : fi(Base::FileInfo::getTempFileName()) -- , file(stderr) -- { -- stderr = fopen(fi.filePath().c_str(), "w"); -- } -- ~RedirectStdErr() -- { -- fclose(stderr); -- fi.deleteFile(); -- stderr = file; -- } -- --private: -- Base::FileInfo fi; -- FILE* file; --}; --} -- - Gui::GuiNativeEvent::GuiNativeEvent(Gui::GUIApplicationNativeEventAware *app) - : GuiAbstractNativeEvent(app) - { -@@ -72,8 +47,6 @@ Gui::GuiNativeEvent::~GuiNativeEvent() - - void Gui::GuiNativeEvent::initSpaceball(QMainWindow *window) - { -- // tmp. redirect stderr to a file to suppress an error message from spnav_open() -- RedirectStdErr err; - Q_UNUSED(window) - if (spnav_open() == -1) { - Base::Console().Log("Couldn't connect to spacenav daemon. Please ignore if you don't have a spacemouse.\n"); diff --git a/user/freecad/numpy-1.20.patch b/user/freecad/numpy-1.20.patch deleted file mode 100644 index 20f4b41..0000000 --- a/user/freecad/numpy-1.20.patch +++ /dev/null @@ -1,25 +0,0 @@ -Patch-Source: https://github.com/FreeCAD/FreeCAD/commit/8b0df1dc936b544091f6a2d68df1c1a14ae3de5b --- -From 8b0df1dc936b544091f6a2d68df1c1a14ae3de5b Mon Sep 17 00:00:00 2001 -From: lorenz -Date: Tue, 27 Dec 2022 04:59:35 +0100 -Subject: [PATCH] FEM: femmesh: fix AttributeError: module 'numpy' has no - attribute 'int' - ---- - src/Mod/Fem/femmesh/meshtools.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/Mod/Fem/femmesh/meshtools.py b/src/Mod/Fem/femmesh/meshtools.py -index dd8671b..d2e2b0a 100644 ---- a/src/Mod/Fem/femmesh/meshtools.py -+++ b/src/Mod/Fem/femmesh/meshtools.py -@@ -485,7 +485,7 @@ def get_femelement_sets( - # fem_objects = FreeCAD FEM document objects - # get femelements for reference shapes of each obj.References - count_femelements = 0 -- referenced_femelements = np.zeros((max(femelement_table.keys())+1,),dtype=np.int) -+ referenced_femelements = np.zeros((max(femelement_table.keys())+1,),dtype=int) - has_remaining_femelements = None - for fem_object_i, fem_object in enumerate(fem_objects): - obj = fem_object["Object"] diff --git a/user/freecad/opencascade-7.8.0.patch b/user/freecad/opencascade-7.8.0.patch deleted file mode 100644 index 582fbde..0000000 --- a/user/freecad/opencascade-7.8.0.patch +++ /dev/null @@ -1,877 +0,0 @@ -Fix compilation with opencascase 7.8.0 - -Base on https://github.com/FreeCAD/FreeCAD/pull/11909 - -diff --color -rupN a/cMake/FindOCC.cmake b/cMake/FindOCC.cmake ---- a/cMake/FindOCC.cmake 2022-12-07 03:35:37.000000000 +0100 -+++ b/cMake/FindOCC.cmake 2024-02-27 15:00:48.248873883 +0100 -@@ -127,8 +127,6 @@ if(OCC_FOUND) - TKG2d - TKG3d - TKMath -- TKIGES -- TKSTL - TKShHealing - TKXSBase - TKBool -@@ -139,10 +137,6 @@ if(OCC_FOUND) - TKGeomBase - TKOffset - TKPrim -- TKSTEPBase -- TKSTEPAttr -- TKSTEP209 -- TKSTEP - TKHLR - TKFeat - ) -@@ -154,17 +148,19 @@ if(OCC_FOUND) - TKLCAF - TKVCAF - TKCDF -- TKXDESTEP -- TKXDEIGES - TKMeshVS - TKService - TKV3d - ) -- if(OCC_VERSION_STRING VERSION_LESS 6.7.3) -- list(APPEND OCC_OCAF_LIBRARIES TKAdvTools) -- elseif(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) -+ if(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) - list(APPEND OCC_OCAF_LIBRARIES TKRWMesh) -- endif(OCC_VERSION_STRING VERSION_LESS 6.7.3) -+ endif(NOT OCC_VERSION_STRING VERSION_LESS 7.5.0) -+ if(OCC_VERSION_STRING VERSION_LESS 7.8.0) -+ list(APPEND OCC_LIBRARIES TKIGES TKSTL TKSTEPBase TKSTEPAttr TKSTEP209 TKSTEP) -+ list(APPEND OCC_OCAF_LIBRARIES TKXDESTEP TKXDEIGES) -+ else(OCC_VERSION_STRING VERSION_LESS 7.8.0) -+ list(APPEND OCC_LIBRARIES TKDESTEP TKDEIGES TKDEGLTF TKDESTL) -+ endif(OCC_VERSION_STRING VERSION_LESS 7.8.0) - message(STATUS "-- Found OCE/OpenCASCADE version: ${OCC_VERSION_STRING}") - message(STATUS "-- OCE/OpenCASCADE include directory: ${OCC_INCLUDE_DIR}") - message(STATUS "-- OCE/OpenCASCADE shared libraries directory: ${OCC_LIBRARY_DIR}") -diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx b/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx ---- a/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/inc/SMESHDS_DataMapOfShape.hxx 2024-02-27 15:00:48.248873883 +0100 -@@ -29,22 +29,35 @@ - - #include - -+#include -+ - /* - * This method needed for instance NCollection_DataMap with TopoDS_Shape as key - */ -+#if OCC_VERSION_HEX >= 0x070800 - struct SMESHDS_Hasher - { -- static inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, -- const TopoDS_Shape& S2) -- { -- return S1.IsSame(S2); -+ size_t operator()(const TopoDS_Shape& S) const noexcept { -+ return std::hash{}(S); - } -- static inline Standard_Integer HashCode(const TopoDS_Shape& S, -- const Standard_Integer Upper) -- { -- return ::HashCode( S, Upper); -+ size_t operator()(const TopoDS_Shape& S1, const TopoDS_Shape& S2) const noexcept { -+ return S1.IsSame(S2); - } - }; -- -+#else -+struct SMESHDS_Hasher -+{ -+static inline Standard_Boolean IsEqual(const TopoDS_Shape& S1, -+ const TopoDS_Shape& S2) -+{ -+ return S1.IsSame(S2); -+} -+static inline Standard_Integer HashCode(const TopoDS_Shape& S, -+ const Standard_Integer Upper) -+{ -+ return ::HashCode( S, Upper); -+} -+}; -+#endif - - #endif -diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx b/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx ---- a/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/inc/SMESH_MeshVSLink.hxx 2024-02-27 15:00:48.248873883 +0100 -@@ -57,9 +57,6 @@ - #ifndef _MeshVS_EntityType_HeaderFile - #include - #endif --#ifndef _Standard_Address_HeaderFile --#include --#endif - #ifndef _TColStd_HArray1OfInteger_HeaderFile - #include - #endif -diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx b/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx ---- a/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/inc/SMESH_SMESH.hxx 2024-02-27 15:00:48.248873883 +0100 -@@ -37,4 +37,5 @@ - #define SMESH_EXPORT - #endif - -+#include - #endif -diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx b/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx ---- a/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/inc/SMESH_SequenceOfNode.hxx 2024-02-27 15:00:48.252207183 +0100 -@@ -28,10 +28,11 @@ - - #include "SMESH_SMESH.hxx" - --#include - #if OCC_VERSION_HEX >= 0x060703 - #include - #include -+#else -+#include - #endif - - typedef const SMDS_MeshNode* SMDS_MeshNodePtr; -diff --color -rupN a/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx b/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx ---- a/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/inc/SMESH_TypeDefs.hxx 2024-02-27 15:00:48.252207183 +0100 -@@ -185,11 +185,18 @@ typedef std::vector< UVPtStruct > UVPtSt - - // -------------------------------------------------------------------------------- - // class SMESH_SequenceOfElemPtr -+#include -+#if OCC_VERSION_HEX >= 0x060703 -+#include -+#else - #include -+#endif - - class SMDS_MeshElement; - - typedef const SMDS_MeshElement* SMDS_MeshElementPtr; -+#define DEFINE_SEQUENCE(_ClassName_, _BaseCollection_, TheItemType) \ -+typedef NCollection_Sequence _ClassName_; - - DEFINE_SEQUENCE (SMESH_SequenceOfElemPtr, SMESH_BaseCollectionElemPtr, SMDS_MeshElementPtr) - -diff --color -rupN a/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp ---- a/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/src/DriverSTL/DriverSTL_R_SMDS_Mesh.cpp 2024-02-27 15:00:48.252207183 +0100 -@@ -33,10 +33,33 @@ - #include "SMDS_MeshNode.hxx" - #include "SMESH_File.hxx" - -+#include -+ - namespace - { - struct Hasher - { -+#if OCC_VERSION_HEX >= 0x070800 -+ size_t operator()(const gp_Pnt& point) const noexcept -+ { -+ union -+ { -+ Standard_Real R[3]; -+ Standard_Integer I[6]; -+ } U; -+ -+ point.Coord( U.R[0], U.R[1], U.R[2] ); -+ return std::hash{}(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7); -+ } -+ -+ size_t operator()(const gp_Pnt& point1, const gp_Pnt& point2) const noexcept -+ { -+ static Standard_Real tab1[3], tab2[3]; -+ point1.Coord(tab1[0],tab1[1],tab1[2]); -+ point2.Coord(tab2[0],tab2[1],tab2[2]); -+ return (memcmp(tab1,tab2,sizeof(tab1)) == 0); -+ } -+#else - //======================================================================= - //function : HashCode - //purpose : -@@ -51,9 +74,9 @@ namespace - } U; - - point.Coord( U.R[0], U.R[1], U.R[2] ); -- -- return ::HashCode(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7,Upper); -+ return std::hash{}(U.I[0]/23+U.I[1]/19+U.I[2]/17+U.I[3]/13+U.I[4]/11+U.I[5]/7); - } -+ - //======================================================================= - //function : IsEqual - //purpose : -@@ -66,7 +89,9 @@ namespace - point2.Coord(tab2[0],tab2[1],tab2[2]); - return (memcmp(tab1,tab2,sizeof(tab1)) == 0); - } -+#endif - }; -+ - typedef NCollection_DataMap TDataMapOfPntNodePtr; - - const int HEADER_SIZE = 84; -diff --color -rupN a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp ---- a/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/3rdParty/salomesmesh/src/StdMeshers/StdMeshers_Quadrangle_2D.cpp 2024-02-27 15:00:48.252207183 +0100 -@@ -48,7 +48,6 @@ - #include - #include - #include --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Drawing/App/PreCompiled.h b/src/Mod/Drawing/App/PreCompiled.h ---- a/src/Mod/Drawing/App/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Drawing/App/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 -@@ -70,7 +70,6 @@ - #include - #include - #include --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Drawing/Gui/TaskDialog.cpp b/src/Mod/Drawing/Gui/TaskDialog.cpp ---- a/src/Mod/Drawing/Gui/TaskDialog.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Drawing/Gui/TaskDialog.cpp 2024-02-27 15:00:48.252207183 +0100 -@@ -29,7 +29,6 @@ - #endif - - --#include - #include "TaskDialog.h" - #include - #include -diff --color -rupN a/src/Mod/Fem/Gui/PreCompiled.h b/src/Mod/Fem/Gui/PreCompiled.h ---- a/src/Mod/Fem/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Fem/Gui/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 -@@ -63,7 +63,6 @@ - #endif - - // OCC --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp b/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp ---- a/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Fem/Gui/TaskCreateNodeSet.cpp 2024-02-27 15:00:48.252207183 +0100 -@@ -28,7 +28,6 @@ - - # include - # include --# include - #endif - - #include -diff --color -rupN a/src/Mod/Import/App/ImportOCAF.cpp b/src/Mod/Import/App/ImportOCAF.cpp ---- a/src/Mod/Import/App/ImportOCAF.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Import/App/ImportOCAF.cpp 2024-02-27 15:00:48.252207183 +0100 -@@ -165,7 +165,11 @@ void ImportOCAF::loadShapes(const TDF_La - std::vector localValue; - - if (aShapeTool->GetShape(label,aShape)) { -+#if OCC_VERSION_HEX >= 0x070800 -+ hash = std::hash{}(aShape); -+#else - hash = aShape.HashCode(HashUpper); -+#endif - } - - Handle(TDataStd_Name) name; -@@ -235,7 +239,11 @@ void ImportOCAF::loadShapes(const TDF_La - if (isRef || myRefShapes.find(hash) == myRefShapes.end()) { - TopoDS_Shape aShape; - if (isRef && aShapeTool->GetShape(label, aShape)) -+#if OCC_VERSION_HEX >= 0x070800 -+ myRefShapes.insert(std::hash{}(aShape)); -+#else - myRefShapes.insert(aShape.HashCode(HashUpper)); -+#endif - - if (aShapeTool->IsSimpleShape(label) && (isRef || aShapeTool->IsFree(label))) { - if (!asm_name.empty()) -@@ -565,7 +573,11 @@ void ImportXCAF::createShape(const TopoD - part->Label.setValue(default_name); - part->Shape.setValue(shape); - std::map::const_iterator jt; -+#if OCC_VERSION_HEX >= 0x070800 -+ jt = myColorMap.find(std::hash{}(shape)); -+#else - jt = myColorMap.find(shape.HashCode(INT_MAX)); -+#endif - - App::Color partColor(0.8f,0.8f,0.8f); - #if 0//TODO -@@ -586,7 +598,11 @@ void ImportXCAF::createShape(const TopoD - // set label name if defined - if (setname && !myNameMap.empty()) { - std::map::const_iterator jt; -+#if OCC_VERSION_HEX >= 0x070800 -+ jt = myNameMap.find(std::hash{}(shape)); -+#else - jt = myNameMap.find(shape.HashCode(INT_MAX)); -+#endif - if (jt != myNameMap.end()) { - part->Label.setValue(jt->second); - } -@@ -606,7 +622,11 @@ void ImportXCAF::createShape(const TopoD - faceColors.resize(faces.Extent(), partColor); - xp.Init(shape,TopAbs_FACE); - while (xp.More()) { -+#if OCC_VERSION_HEX >= 0x070800 -+ jt = myColorMap.find(std::hash{}(xp.Current())); -+#else - jt = myColorMap.find(xp.Current().HashCode(INT_MAX)); -+#endif - if (jt != myColorMap.end()) { - int index = faces.FindIndex(xp.Current()); - faceColors[index-1] = convertColor(jt->second); -@@ -641,23 +661,51 @@ void ImportXCAF::loadShapes(const TDF_La - // add the shapes - TopExp_Explorer xp; - for (xp.Init(aShape, TopAbs_SOLID); xp.More(); xp.Next(), ctSolids++) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->mySolids[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->mySolids[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - for (xp.Init(aShape, TopAbs_SHELL, TopAbs_SOLID); xp.More(); xp.Next(), ctShells++) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->myShells[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->myShells[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - // if no solids and no shells were found then go for compounds - if (ctSolids == 0 && ctShells == 0) { - for (xp.Init(aShape, TopAbs_COMPOUND); xp.More(); xp.Next(), ctComps++) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->myCompds[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->myCompds[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - } - if (ctComps == 0) { - for (xp.Init(aShape, TopAbs_FACE, TopAbs_SHELL); xp.More(); xp.Next()) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - for (xp.Init(aShape, TopAbs_WIRE, TopAbs_FACE); xp.More(); xp.Next()) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - for (xp.Init(aShape, TopAbs_EDGE, TopAbs_WIRE); xp.More(); xp.Next()) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - for (xp.Init(aShape, TopAbs_VERTEX, TopAbs_EDGE); xp.More(); xp.Next()) -+#if OCC_VERSION_HEX >= 0x070800 -+ this->myShapes[std::hash{}(xp.Current())] = (xp.Current()); -+#else - this->myShapes[xp.Current().HashCode(INT_MAX)] = (xp.Current()); -+#endif - } - } - -@@ -667,7 +715,11 @@ void ImportXCAF::loadShapes(const TDF_La - hColors->GetColor(label, XCAFDoc_ColorSurf, col) || - hColors->GetColor(label, XCAFDoc_ColorCurv, col)) { - // add defined color -+#if OCC_VERSION_HEX >= 0x070800 -+ myColorMap[std::hash{}(aShape)] = col; -+#else - myColorMap[aShape.HashCode(INT_MAX)] = col; -+#endif - } - else { - // http://www.opencascade.org/org/forum/thread_17107/ -@@ -677,7 +729,11 @@ void ImportXCAF::loadShapes(const TDF_La - hColors->GetColor(it.Value(), XCAFDoc_ColorSurf, col) || - hColors->GetColor(it.Value(), XCAFDoc_ColorCurv, col)) { - // add defined color -+#if OCC_VERSION_HEX >= 0x070800 -+ myColorMap[std::hash{}(it.Value())] = col; -+#else - myColorMap[it.Value().HashCode(INT_MAX)] = col; -+#endif - } - } - } -@@ -690,7 +746,11 @@ void ImportXCAF::loadShapes(const TDF_La - extstr.ToUTF8CString(str); - std::string labelName(str); - if (!labelName.empty()) -+#if OCC_VERSION_HEX >= 0x070800 -+ myNameMap[std::hash{}(aShape)] = labelName; -+#else - myNameMap[aShape.HashCode(INT_MAX)] = labelName; -+#endif - delete [] str; - } - -diff --color -rupN a/src/Mod/Import/App/ImportOCAF.h b/src/Mod/Import/App/ImportOCAF.h ---- a/src/Mod/Import/App/ImportOCAF.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Import/App/ImportOCAF.h 2024-02-27 15:00:48.252207183 +0100 -@@ -29,7 +29,6 @@ - #include - #include - #include --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Import/App/ImportOCAF2.h b/src/Mod/Import/App/ImportOCAF2.h ---- a/src/Mod/Import/App/ImportOCAF2.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Import/App/ImportOCAF2.h 2024-02-27 15:06:12.358890276 +0100 -@@ -27,7 +27,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -57,13 +56,21 @@ namespace Import { - - struct ShapeHasher { - std::size_t operator()(const TopoDS_Shape &s) const { -+#if OCC_VERSION_HEX >= 0x070800 -+ return std::hash{}(s); -+#else - return s.HashCode(INT_MAX); -+#endif - } - }; - - struct LabelHasher { - std::size_t operator()(const TDF_Label &l) const { -+#if OCC_VERSION_HEX >= 0x070800 -+ return std::hash {}(l); -+#else - return TDF_LabelMapHasher::HashCode(l,INT_MAX); -+#endif - } - }; - -diff --color -rupN a/src/Mod/MeshPart/App/CurveProjector.h b/src/Mod/MeshPart/App/CurveProjector.h ---- a/src/Mod/MeshPart/App/CurveProjector.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/MeshPart/App/CurveProjector.h 2024-02-27 15:00:48.252207183 +0100 -@@ -20,6 +20,7 @@ - * * - ***************************************************************************/ - -+#include - - #ifndef _CurveProjector_h_ - #define _CurveProjector_h_ -@@ -64,8 +65,13 @@ public: - - template - struct TopoDSLess { -- bool operator()(const T& x, const T& y) const { -- return x.HashCode(INT_MAX-1) < y.HashCode(INT_MAX-1); -+ bool operator()(const T& x, const T& y) const { -+#if OCC_VERSION_HEX >= 0x070800 -+ std::hash hasher; -+ return hasher(x) < hasher(y); -+#else -+ return x.HashCode(INT_MAX-1) < y.HashCode(INT_MAX-1); -+#endif - } - }; - -diff --color -rupN a/src/Mod/MeshPart/App/PreCompiled.h b/src/Mod/MeshPart/App/PreCompiled.h ---- a/src/Mod/MeshPart/App/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/MeshPart/App/PreCompiled.h 2024-02-27 15:00:48.252207183 +0100 -@@ -76,7 +76,6 @@ - #include - #include - #include --#include - #include - #include - #include -diff --color -rupN a/src/Mod/MeshPart/Gui/CrossSections.cpp b/src/Mod/MeshPart/Gui/CrossSections.cpp ---- a/src/Mod/MeshPart/Gui/CrossSections.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/MeshPart/Gui/CrossSections.cpp 2024-02-27 15:00:48.252207183 +0100 -@@ -24,7 +24,6 @@ - #include "PreCompiled.h" - #ifndef _PreComp_ - # include --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Part/App/ImportStep.cpp b/src/Mod/Part/App/ImportStep.cpp ---- a/src/Mod/Part/App/ImportStep.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/App/ImportStep.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -167,7 +167,12 @@ int Part::ImportStepParts(App::Document - // This is a trick to access the GUI via Python and set the color property - // of the associated view provider. If no GUI is up an exception is thrown - // and cleared immediately -+#if OCC_VERSION_HEX >= 0x070800 -+ std::hash hasher; -+ std::map::iterator it = hash_col.find(hasher(aSolid)); -+#else - std::map::iterator it = hash_col.find(aSolid.HashCode(INT_MAX)); -+#endif - if (it != hash_col.end()) { - try { - Py::Object obj(pcFeature->getPyObject(), true); -diff --color -rupN a/src/Mod/Part/App/OCCError.h b/src/Mod/Part/App/OCCError.h ---- a/src/Mod/Part/App/OCCError.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/App/OCCError.h 2024-02-27 15:00:48.255540482 +0100 -@@ -50,7 +50,6 @@ - # include - # include - # include --# include - # include - # include - -diff --color -rupN a/src/Mod/Part/App/OpenCascadeAll.h b/src/Mod/Part/App/OpenCascadeAll.h ---- a/src/Mod/Part/App/OpenCascadeAll.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/App/OpenCascadeAll.h 2024-02-27 15:00:48.255540482 +0100 -@@ -49,7 +49,6 @@ - #include - #include - #include --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Part/App/TopoShapePyImp.cpp b/src/Mod/Part/App/TopoShapePyImp.cpp ---- a/src/Mod/Part/App/TopoShapePyImp.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/App/TopoShapePyImp.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -1321,7 +1321,11 @@ PyObject* TopoShapePy::ancestorsOfType( - TopTools_ListIteratorOfListOfShape it(ancestors); - for (; it.More(); it.Next()) { - // make sure to avoid duplicates -+#if OCC_VERSION_HEX >= 0x070800 -+ const size_t code = std::hash{}(static_cast(it.Value())); -+#else - Standard_Integer code = it.Value().HashCode(INT_MAX); -+#endif - if (hashes.find(code) == hashes.end()) { - list.append(shape2pyshape(it.Value())); - hashes.insert(code); -@@ -1943,7 +1947,11 @@ PyObject* TopoShapePy::hashCode(PyObject - if (!PyArg_ParseTuple(args, "|i",&upper)) - return nullptr; - -+#if OCC_VERSION_HEX >= 0x070800 -+ int hc = std::hash{}(getTopoShapePtr()->getShape()); -+#else - int hc = getTopoShapePtr()->getShape().HashCode(upper); -+#endif - return Py_BuildValue("i", hc); - } - -diff --color -rupN a/src/Mod/Part/Gui/AppPartGui.cpp b/src/Mod/Part/Gui/AppPartGui.cpp ---- a/src/Mod/Part/Gui/AppPartGui.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/AppPartGui.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -11,9 +11,6 @@ - - - #include "PreCompiled.h" --#ifndef _PreComp_ --# include --#endif - - #include - #include -diff --color -rupN a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp ---- a/src/Mod/Part/Gui/Command.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/Command.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -26,7 +26,6 @@ - # include - # include - # include --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Part/Gui/CommandSimple.cpp b/src/Mod/Part/Gui/CommandSimple.cpp ---- a/src/Mod/Part/Gui/CommandSimple.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/CommandSimple.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -22,9 +22,6 @@ - - - #include "PreCompiled.h" --#ifndef _PreComp_ --# include --#endif - - #include - #include -diff --color -rupN a/src/Mod/Part/Gui/CrossSections.cpp b/src/Mod/Part/Gui/CrossSections.cpp ---- a/src/Mod/Part/Gui/CrossSections.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/CrossSections.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -23,7 +23,6 @@ - - #include "PreCompiled.h" - #ifndef _PreComp_ --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Part/Gui/ViewProvider2DObject.cpp b/src/Mod/Part/Gui/ViewProvider2DObject.cpp ---- a/src/Mod/Part/Gui/ViewProvider2DObject.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/ViewProvider2DObject.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -26,8 +26,6 @@ - #ifndef _PreComp_ - # include - --# include -- - # include - # include - # include -diff --color -rupN a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp ---- a/src/Mod/Part/Gui/ViewProviderExt.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/ViewProviderExt.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -978,7 +978,11 @@ void ViewProviderPartExt::updateVisual() - - TopExp_Explorer xp; - for (xp.Init(faceMap(i),TopAbs_EDGE);xp.More();xp.Next()) -+#if OCC_VERSION_HEX >= 0x070800 -+ faceEdges.insert(std::hash{}(xp.Current())); -+#else - faceEdges.insert(xp.Current().HashCode(INT_MAX)); -+#endif - numFaces++; - } - -@@ -1006,7 +1010,11 @@ void ViewProviderPartExt::updateVisual() - // So, we have to store the hashes of the edges associated to a face. - // If the hash of a given edge is not in this list we know it's really - // a free edge. -+#if OCC_VERSION_HEX >= 0x070800 -+ int hash = std::hash{}(aEdge); -+#else - int hash = aEdge.HashCode(INT_MAX); -+#endif - if (faceEdges.find(hash) == faceEdges.end()) { - Handle(Poly_Polygon3D) aPoly = Part::Tools::polygonOfEdge(aEdge, aLoc); - if (!aPoly.IsNull()) { -@@ -1205,7 +1213,11 @@ void ViewProviderPartExt::updateVisual() - TopLoc_Location aLoc; - - // handling of the free edge that are not associated to a face -+#if OCC_VERSION_HEX >= 0x070800 -+ int hash = std::hash{}(aEdge); -+#else - int hash = aEdge.HashCode(INT_MAX); -+#endif - if (faceEdges.find(hash) == faceEdges.end()) { - Handle(Poly_Polygon3D) aPoly = Part::Tools::polygonOfEdge(aEdge, aLoc); - if (!aPoly.IsNull()) { -diff --color -rupN a/src/Mod/Part/Gui/ViewProviderExt.h b/src/Mod/Part/Gui/ViewProviderExt.h ---- a/src/Mod/Part/Gui/ViewProviderExt.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/ViewProviderExt.h 2024-02-27 15:00:48.255540482 +0100 -@@ -24,7 +24,6 @@ - #ifndef PARTGUI_VIEWPROVIDERPARTEXT_H - #define PARTGUI_VIEWPROVIDERPARTEXT_H - --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Part/Gui/ViewProviderMirror.cpp b/src/Mod/Part/Gui/ViewProviderMirror.cpp ---- a/src/Mod/Part/Gui/ViewProviderMirror.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/ViewProviderMirror.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -27,7 +27,6 @@ - # include - # include - # include --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Part/Gui/ViewProviderPython.cpp b/src/Mod/Part/Gui/ViewProviderPython.cpp ---- a/src/Mod/Part/Gui/ViewProviderPython.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/ViewProviderPython.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -23,7 +23,6 @@ - - #include "PreCompiled.h" - --#include - #ifndef _PreComp_ - # include - #endif -diff --color -rupN a/src/Mod/Part/Gui/ViewProviderReference.h b/src/Mod/Part/Gui/ViewProviderReference.h ---- a/src/Mod/Part/Gui/ViewProviderReference.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Part/Gui/ViewProviderReference.h 2024-02-27 15:00:48.255540482 +0100 -@@ -24,7 +24,6 @@ - #ifndef PARTGUI_ViewProviderPartReference_H - #define PARTGUI_ViewProviderPartReference_H - --#include - #include - #include - #include -diff --color -rupN a/src/Mod/PartDesign/Gui/PreCompiled.h b/src/Mod/PartDesign/Gui/PreCompiled.h ---- a/src/Mod/PartDesign/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/PartDesign/Gui/PreCompiled.h 2024-02-27 15:00:48.255540482 +0100 -@@ -44,7 +44,6 @@ - #include - - // OCC --#include - #include - #include - #include -diff --color -rupN a/src/Mod/Path/App/Voronoi.cpp b/src/Mod/Path/App/Voronoi.cpp ---- a/src/Mod/Path/App/Voronoi.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Path/App/Voronoi.cpp 2024-02-27 15:00:48.255540482 +0100 -@@ -23,10 +23,6 @@ - - #include "PreCompiled.h" - --#ifndef _PreComp_ --# include --#endif -- - #include - - #include "Voronoi.h" -diff --color -rupN a/src/Mod/Path/Gui/PreCompiled.h b/src/Mod/Path/Gui/PreCompiled.h ---- a/src/Mod/Path/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Path/Gui/PreCompiled.h 2024-02-27 15:00:48.258873781 +0100 -@@ -38,8 +38,6 @@ - # define PathGuiExport - #endif - --#include -- - #ifdef _MSC_VER - # pragma warning( disable : 4273 ) - #endif -diff --color -rupN a/src/Mod/Robot/Gui/PreCompiled.h b/src/Mod/Robot/Gui/PreCompiled.h ---- a/src/Mod/Robot/Gui/PreCompiled.h 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Robot/Gui/PreCompiled.h 2024-02-27 15:00:48.258873781 +0100 -@@ -39,8 +39,6 @@ - # define RobotGuiExport - #endif - --#include -- - #ifdef _MSC_VER - # pragma warning(disable : 4005) - # pragma warning(disable : 4273) -diff --color -rupN a/src/Mod/Sandbox/Gui/AppSandboxGui.cpp b/src/Mod/Sandbox/Gui/AppSandboxGui.cpp ---- a/src/Mod/Sandbox/Gui/AppSandboxGui.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sandbox/Gui/AppSandboxGui.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -24,7 +24,6 @@ - #include "PreCompiled.h" - #ifndef _PreComp_ - # include --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Sketcher/App/SketchAnalysis.cpp b/src/Mod/Sketcher/App/SketchAnalysis.cpp ---- a/src/Mod/Sketcher/App/SketchAnalysis.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sketcher/App/SketchAnalysis.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -25,7 +25,6 @@ - #include "PreCompiled.h" - - #ifndef _PreComp_ --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp ---- a/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sketcher/Gui/DrawSketchHandler.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -24,7 +24,6 @@ - #include "PreCompiled.h" - - #ifndef _PreComp_ --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp ---- a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -23,7 +23,6 @@ - #include "PreCompiled.h" - - #ifndef _PreComp_ --# include - /// Qt Include Files - # include - # include -diff --color -rupN a/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp b/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp ---- a/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sketcher/Gui/TaskSketcherValidation.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -24,7 +24,6 @@ - #include "PreCompiled.h" - - #ifndef _PreComp_ --# include - # include - # include - # include -diff --color -rupN a/src/Mod/Sketcher/Gui/ViewProviderPython.cpp b/src/Mod/Sketcher/Gui/ViewProviderPython.cpp ---- a/src/Mod/Sketcher/Gui/ViewProviderPython.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sketcher/Gui/ViewProviderPython.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -23,7 +23,6 @@ - - #include "PreCompiled.h" - --#include - #ifndef _PreComp_ - # include - #endif -diff --color -rupN a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp ---- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -24,7 +24,6 @@ - #include "PreCompiled.h" - - #ifndef _PreComp_ --# include - - # include - # include -diff --color -rupN a/src/Mod/Surface/Gui/Command.cpp b/src/Mod/Surface/Gui/Command.cpp ---- a/src/Mod/Surface/Gui/Command.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/Surface/Gui/Command.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -31,7 +31,6 @@ - #include - #include - #include --#include - #include - #include - #include -diff --color -rupN a/src/Mod/TechDraw/Gui/TaskProjection.cpp b/src/Mod/TechDraw/Gui/TaskProjection.cpp ---- a/src/Mod/TechDraw/Gui/TaskProjection.cpp 2022-12-07 03:35:37.000000000 +0100 -+++ b/src/Mod/TechDraw/Gui/TaskProjection.cpp 2024-02-27 15:00:48.258873781 +0100 -@@ -29,9 +29,6 @@ - # include - #endif - -- --#include -- - #include - #include - #include diff --git a/user/freecad/resourceDirectory.patch b/user/freecad/resourceDirectory.patch deleted file mode 100644 index a2a16d1..0000000 --- a/user/freecad/resourceDirectory.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./cMake/FreeCAD_Helpers/ConfigureCMakeVariables.cmake.orig -+++ ./cMake/FreeCAD_Helpers/ConfigureCMakeVariables.cmake -@@ -23,7 +23,7 @@ - "Path to the directory containing PyCXX's cxxextensions.c source file") - - # used as compiler defines -- set(RESOURCEDIR "${CMAKE_INSTALL_DATADIR}") -+ set(RESOURCEDIR "../../share/freecad") - set(LIBRARYDIR "${CMAKE_INSTALL_LIBDIR}") - set(DOCDIR "${CMAKE_INSTALL_DOCDIR}") - diff --git a/user/freecad/tests.patch b/user/freecad/tests.patch deleted file mode 100644 index 4b63a20..0000000 --- a/user/freecad/tests.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- ./src/Mod/Mesh/App/MeshTestsApp.py.orig -+++ ./src/Mod/Mesh/App/MeshTestsApp.py -@@ -423,30 +423,6 @@ - self.planarMesh = [] - FreeCAD.newDocument("MeshTest") - -- def testRayPick(self): -- if not FreeCAD.GuiUp: -- return -- self.planarMesh.append( [-16.097176,-29.891157,15.987688] ) -- self.planarMesh.append( [-16.176304,-29.859991,15.947966] ) -- self.planarMesh.append( [-16.071451,-29.900553,15.912505] ) -- self.planarMesh.append( [-16.092241,-29.893408,16.020439] ) -- self.planarMesh.append( [-16.007210,-29.926180,15.967641] ) -- self.planarMesh.append( [-16.064457,-29.904951,16.090832] ) -- planarMeshObject = Mesh.Mesh(self.planarMesh) -- -- from pivy import coin; import FreeCADGui -- Mesh.show(planarMeshObject) -- view=FreeCADGui.ActiveDocument.ActiveView.getViewer() -- rp=coin.SoRayPickAction(view.getSoRenderManager().getViewportRegion()) -- rp.setRay(coin.SbVec3f(-16.05,16.0,16.0),coin.SbVec3f(0,-1,0)) -- rp.apply(view.getSoRenderManager().getSceneGraph()) -- pp=rp.getPickedPoint() -- self.assertTrue(pp != None) -- det=pp.getDetail() -- self.assertTrue(det.getTypeId() == coin.SoFaceDetail.getClassTypeId()) -- det=coin.cast(det, det.getTypeId().getName().getString()) -- self.assertTrue(det.getFaceIndex() == 1) -- - def testPrimitiveCount(self): - if not FreeCAD.GuiUp: - return From ab89660806ecf36a69d1160d64dc2efc36556270 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:16:38 -0400 Subject: [PATCH 596/738] user/sane: drop due to in community --- user/sane/APKBUILD | 163 ------------------ user/sane/check.patch | 11 -- user/sane/include.patch | 11 -- user/sane/pidfile.patch | 11 -- user/sane/sane-backends-no-avahi-thread.patch | 48 ------ user/sane/sane-saned.pre-install | 5 - user/sane/sane.pre-install | 5 - user/sane/saned.initd | 14 -- 8 files changed, 268 deletions(-) delete mode 100644 user/sane/APKBUILD delete mode 100644 user/sane/check.patch delete mode 100644 user/sane/include.patch delete mode 100644 user/sane/pidfile.patch delete mode 100644 user/sane/sane-backends-no-avahi-thread.patch delete mode 100644 user/sane/sane-saned.pre-install delete mode 100644 user/sane/sane.pre-install delete mode 100644 user/sane/saned.initd diff --git a/user/sane/APKBUILD b/user/sane/APKBUILD deleted file mode 100644 index 62a8a34..0000000 --- a/user/sane/APKBUILD +++ /dev/null @@ -1,163 +0,0 @@ -# Contributor: Fabio Riga -# Contributor: Valery Kartel -# Maintainer: Valery Kartel -pkgname=sane -_pkgname=sane-backends -pkgver=1.1.1 -pkgrel=3 -pkgdesc="Scanner Access Now Easy - universal scanner interface" -url="http://www.sane-project.org/" -# FTBFS -# arch="all" -license="GPL-2.0-or-later GPL-2.0-or-later-with-sane-exception Public-Domain" -makedepends="diffutils file libtool libusb-dev v4l-utils-dev net-snmp-dev - avahi-dev curl-dev libpng-dev libjpeg-turbo-dev tiff-dev libgphoto2-dev - poppler-dev linux-headers libieee1284-dev libxml2-dev" -install="$pkgname-saned.pre-install $pkgname.pre-install" -pkgusers="saned" -pkggroups="scanner" -_backends="abaton agfafocus apple artec artec_eplus48u as6e avision bh canon - canon630u canon_dr canon_pp cardscan coolscan coolscan2 coolscan3 dc25 - dc210 dc240 dell1600n_net dmc epjitsu epson epson2 epsonds escl fujitsu - genesys gphoto2 gt68xx hp hp3500 hp3900 hp4200 hp5400 hp5590 hpsj5s - hpljm1005 hs2p ibm kodak kodakaio kvs1025 kvs20xx kvs40xx leo lexmark - ma1509 magicolor matsushita microtek microtek2 mustek mustek_pp mustek_usb - mustek_usb2 nec net niash p5 pie pieusb pixma plustek plustek_pp ricoh ricoh2 - rts8891 s9036 sceptre sharp sm3600 sm3840 snapscan sp15c st400 stv680 - tamarack teco1 teco2 teco3 test u12 umax umax_pp umax1220u v4l - xerox_mfp" - -case "$CARCH" in - x86) - options="$options !check" - _backends="$_backends qcam canon_lide70" - ;; - x86_64) - _backends="$_backends qcam canon_lide70" - ;; -esac - -_pkgdesc_dell1600n_net="SANE backend for Dell 1600n that supports colour and monochrome scans over ethernet, usb not supported" -for _backend in $_backends; do - subpackages="$subpackages $pkgname-backend-$_backend:_backend" -done -subpackages="$pkgname-doc $pkgname-dev $subpackages $pkgname-utils $pkgname-saned - $pkgname-udev::noarch $_pkgname::noarch" -source="https://gitlab.com/sane-project/backends/uploads/7d30fab4e115029d91027b6a58d64b43/sane-backends-$pkgver.tar.gz - $pkgname-fix-tests.patch::https://gitlab.com/sane-project/backends/-/commit/edfc90450ee06149537fadb3095ba4b215c5c4fa.patch - saned.initd - include.patch - pidfile.patch - check.patch - sane-backends-no-avahi-thread.patch - " -builddir="$srcdir"/$_pkgname-$pkgver - -# secfixes: -# 1.0.30-r0: -# - CVE-2020-12861 -# - CVE-2020-12862 -# - CVE-2020-12863 -# - CVE-2020-12864 -# - CVE-2020-12865 -# - CVE-2020-12866 -# - CVE-2020-12867 - -build() { - ./configure \ - --prefix=/usr \ - --sysconfdir=/etc \ - --with-docdir=/usr/share/doc/$pkgname \ - --with-usb \ - --enable-avahi \ - --disable-rpath \ - --disable-locking - make -} - -check() { - make check -} - -package() { - make DESTDIR="$pkgdir" install - echo -n "" > "$pkgdir"/etc/$pkgname.d/dll.conf - install -Dm644 backend/dll.aliases "$pkgdir"/etc/$pkgname.d/dll.aliases -} - -doc() { - default_doc - mkdir -p "$subpkgdir"/usr/share/licenses/$_pkgname - mv "$subpkgdir"/usr/share/doc/$_pkgname/LICENSE \ - "$subpkgdir"/usr/share/licenses/$_pkgname -} - -saned() { - local name=${subpkgname#$pkgname-} - pkgdesc="$pkgdesc (network scanner server)" - mkdir -p "$subpkgdir"/etc/$pkgname.d "$subpkgdir"/usr - mv "$pkgdir"/etc/$pkgname.d/$name.conf "$subpkgdir"/etc/$pkgname.d - mv "$pkgdir"/usr/sbin "$subpkgdir"/usr/ - install -Dm755 "$srcdir"/$name.initd "$subpkgdir"/etc/init.d/$name -} - -utils() { - pkgdesc="$pkgdesc (utilities)" - mkdir -p "$subpkgdir"/usr - mv "$pkgdir"/usr/bin "$subpkgdir"/usr - rm -fr "$pkgdir"/usr/share -} - -udev() { - pkgdesc="$pkgdesc (udev rules)" - install_if="$pkgname=$pkgver-r$pkgrel udev" - install -Dm644 "$builddir"/tools/udev/lib$pkgname.rules \ - "$subpkgdir"/usr/lib/udev/rules.d/49-$pkgname.rules - sed -i 's|NAME="%k", ||g' "$subpkgdir"/usr/lib/udev/rules.d/49-$pkgname.rules -} - -backends() { - local _backend; - pkgdesc="$pkgdesc (metapackage)" - depends="$pkgname-utils $pkgname-saned" - for _backend in $_backends; do - [ "$_backend" = "test" ] && continue - depends="$depends $pkgname-backend-$_backend" - done - mkdir -p "$subpkgdir" -} - -_backend() { - local name=${subpkgname#$pkgname-backend-} - depends="$pkgname" - pkgdesc=$(eval echo \$_pkgdesc_$name) - if [ ! "$pkgdesc" ]; then - # cut description from man-page - pkgdesc=$(tr '\n' ' ' < "$builddir"/doc/$pkgname-$name.man) - pkgdesc=${pkgdesc#*\- } - pkgdesc=${pkgdesc%% .SH *}; - fi - mkdir -p "$subpkgdir"/usr/lib/$pkgname \ - "$subpkgdir"/etc/$pkgname.d/dll.d - mv "$pkgdir"/usr/lib/$pkgname/lib$pkgname-$name.* \ - "$subpkgdir"/usr/lib/$pkgname - echo "$name" > "$subpkgdir"/etc/$pkgname.d/dll.d/$name - if [ -f "$pkgdir"/etc/$pkgname.d/$name.conf ]; then - mv "$pkgdir"/etc/$pkgname.d/$name.conf \ - "$subpkgdir"/etc/$pkgname.d - fi - if [ -f "$pkgdir"/usr/bin/$name ]; then - mkdir -p "$subpkgdir"/usr/bin - mv "$pkgdir"/usr/bin/$name "$subpkgdir"/usr/bin - fi -} - -sha512sums=" -25bd9f90d550cfe6a6d01c48e83716a53f4b0e3a294287e455ecb5e5b80c8fe1699f45c6c87f694475cceb85745c70597e18a7b1094669d5091c5fb183dfe94d sane-backends-1.1.1.tar.gz -f4187409a85dbdb95213948fcc1bb34cf319a3a5ae34093d1e9e7983dfc89336c75132713e6f3113ad7ef2b0ed78bdc0c6e031796fca7004787776f46c742ec6 sane-fix-tests.patch -0a06eaa28b345202f2bdf8361e06f843bb7a010b7d8f80132f742672c94249c43f64031cefa161e415e2e2ab3a53b23070fb63854283f9e040f5ff79394ac7d1 saned.initd -1779ff8beb1ba5f9238c25d819a7f0045f7e257c19b511315feb85650e445ca86450a9e1d7ff8650499d3dae808589a6c2e358d5f3f39a3f40ce4999179b86d6 include.patch -09505943f9441854a6c333f19e2535b4a646a8cc060fe82c6261e7d29c72773ebe98d43a91acc951f4336a3c8b4c84ab7c7b0763426136b4b59d9546bc2fa8c0 pidfile.patch -cfa327209efd9a2a2db7cbcf571852959823aaa19b43d5f6415834cd5ae38b6324ecae16779f6f896aa0d7ac890fe23244100b7d6a68e5e9d52cd38ec82bfac8 check.patch -6e6b6336203ee6d1ac96ed2d742e181fb65e8d93386b76d70b6359afbcce98343d89ec8b2b611261f79901779a2999f9262c3f85898bd15c74b00348e0cd3cd7 sane-backends-no-avahi-thread.patch -" diff --git a/user/sane/check.patch b/user/sane/check.patch deleted file mode 100644 index afbc7ef..0000000 --- a/user/sane/check.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/testsuite/sanei/Makefile.in -+++ b/testsuite/sanei/Makefile.in -@@ -77,7 +77,7 @@ - POST_UNINSTALL = : - build_triplet = @build@ - host_triplet = @host@ --check_PROGRAMS = sanei_usb_test$(EXEEXT) test_wire$(EXEEXT) \ -+check_PROGRAMS = test_wire$(EXEEXT) \ - sanei_check_test$(EXEEXT) sanei_config_test$(EXEEXT) \ - sanei_constrain_test$(EXEEXT) - subdir = testsuite/sanei diff --git a/user/sane/include.patch b/user/sane/include.patch deleted file mode 100644 index 518d3b4..0000000 --- a/user/sane/include.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/include/sane/sane.h -+++ b/include/sane/sane.h -@@ -16,6 +16,8 @@ - #ifndef sane_h - #define sane_h - -+#include -+ - #ifdef __cplusplus - extern "C" { - #endif diff --git a/user/sane/pidfile.patch b/user/sane/pidfile.patch deleted file mode 100644 index 457755b..0000000 --- a/user/sane/pidfile.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/frontend/saned.c -+++ b/frontend/saned.c -@@ -224,7 +224,7 @@ - int numchildren; - - #define SANED_CONFIG_FILE "saned.conf" --#define SANED_PID_FILE "/var/run/saned.pid" -+#define SANED_PID_FILE "/run/saned/saned.pid" - - #define SANED_SERVICE_NAME "sane-port" - #define SANED_SERVICE_PORT 6566 diff --git a/user/sane/sane-backends-no-avahi-thread.patch b/user/sane/sane-backends-no-avahi-thread.patch deleted file mode 100644 index 149a305..0000000 --- a/user/sane/sane-backends-no-avahi-thread.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/backend/net.c.orig b/backend/net.c -index 7c4aae9..0adfbc2 100644 ---- a/backend/net.c.orig -+++ b/backend/net.c -@@ -1043,12 +1043,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) - continue; - } - #if WITH_AVAHI -- avahi_threaded_poll_lock (avahi_thread); -+ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); - #endif /* WITH_AVAHI */ - DBG (2, "sane_init: trying to add %s\n", device_name); - add_device (device_name, 0); - #if WITH_AVAHI -- avahi_threaded_poll_unlock (avahi_thread); -+ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); - #endif /* WITH_AVAHI */ - } - -@@ -1094,12 +1094,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize) - continue; - #endif /* ENABLE_IPV6 */ - #if WITH_AVAHI -- avahi_threaded_poll_lock (avahi_thread); -+ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); - #endif /* WITH_AVAHI */ - DBG (2, "sane_init: trying to add %s\n", host); - add_device (host, 0); - #if WITH_AVAHI -- avahi_threaded_poll_unlock (avahi_thread); -+ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); - #endif /* WITH_AVAHI */ - } - free (copy); -@@ -1517,11 +1517,11 @@ sane_open (SANE_String_Const full_name, SANE_Handle * meta_handle) - "sane_open: device %s not found, trying to register it anyway\n", - nd_name); - #if WITH_AVAHI -- avahi_threaded_poll_lock (avahi_thread); -+ if(avahi_thread) avahi_threaded_poll_lock (avahi_thread); - #endif /* WITH_AVAHI */ - status = add_device (nd_name, &dev); - #if WITH_AVAHI -- avahi_threaded_poll_unlock (avahi_thread); -+ if(avahi_thread) avahi_threaded_poll_unlock (avahi_thread); - #endif /* WITH_AVAHI */ - if (status != SANE_STATUS_GOOD) - { diff --git a/user/sane/sane-saned.pre-install b/user/sane/sane-saned.pre-install deleted file mode 100644 index caad990..0000000 --- a/user/sane/sane-saned.pre-install +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -adduser -SDH -h /run/saned -s /sbin/nologin -G scanner -g saned saned 2>/dev/null - -exit 0 diff --git a/user/sane/sane.pre-install b/user/sane/sane.pre-install deleted file mode 100644 index b75c867..0000000 --- a/user/sane/sane.pre-install +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -addgroup -S scanner 2>/dev/null - -exit 0 diff --git a/user/sane/saned.initd b/user/sane/saned.initd deleted file mode 100644 index 6482073..0000000 --- a/user/sane/saned.initd +++ /dev/null @@ -1,14 +0,0 @@ -#!/sbin/openrc-run - -description="SANE network scanner server" - -owner=saned -pidfile=/run/saned/saned.pid -cfgfile=/etc/sane.d/saned.conf -command=/usr/sbin/saned -command_args="-a $owner" -required_files="$cfgfile" - -start_pre() { - checkpath -dm755 -o $owner ${pidfile%/*} -} From ea32d2af8eec861491381aa7565260f9178dd631 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:18:39 -0400 Subject: [PATCH 597/738] backports/thelounge: move from user, upgrade to 4.4.3 --- backports/thelounge/APKBUILD | 83 +++++++++++++++++++ .../allow-https-for-connect-src.patch | 0 .../thelounge/no-version-test.patch | 0 backports/thelounge/thelounge.confd | 9 ++ backports/thelounge/thelounge.initd | 34 ++++++++ backports/thelounge/thelounge.post-install | 10 +++ backports/thelounge/thelounge.pre-install | 6 ++ user/thelounge/APKBUILD | 83 ------------------- user/thelounge/thelounge.initd | 14 ---- user/thelounge/thelounge.post-install | 13 --- user/thelounge/thelounge.pre-install | 6 -- 11 files changed, 142 insertions(+), 116 deletions(-) create mode 100644 backports/thelounge/APKBUILD rename {user => backports}/thelounge/allow-https-for-connect-src.patch (100%) rename {user => backports}/thelounge/no-version-test.patch (100%) create mode 100644 backports/thelounge/thelounge.confd create mode 100644 backports/thelounge/thelounge.initd create mode 100644 backports/thelounge/thelounge.post-install create mode 100644 backports/thelounge/thelounge.pre-install delete mode 100644 user/thelounge/APKBUILD delete mode 100644 user/thelounge/thelounge.initd delete mode 100644 user/thelounge/thelounge.post-install delete mode 100644 user/thelounge/thelounge.pre-install diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD new file mode 100644 index 0000000..bc0de04 --- /dev/null +++ b/backports/thelounge/APKBUILD @@ -0,0 +1,83 @@ +# Contributor: Kay Thomas +# Contributor: Fabricio Silva +# Maintainer: Fabricio Silva +pkgname=thelounge +pkgver=4.4.3 +pkgrel=0 +pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" +url="https://thelounge.chat" +arch="all !riscv64" # riscv64 gets SIGILL +license="MIT" +depends="nodejs" +makedepends="yarn py3-setuptools" +subpackages="$pkgname-openrc $pkgname-doc" +install="$pkgname.pre-install $pkgname.post-install" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz + thelounge.initd + thelounge.confd + " +options="net" # net for npm + +case $CARCH in + # loongarch64: 2 tests failed on the builder + # 1) SQLite Message Storage: should retrieve latest LIMIT messages in order + # 2) SQLite Message Storage: should search messages + loongarch64) options="$options !check";; +esac + +prepare() { + default_prepare + + export BROWSERSLIST_IGNORE_OLD_DATA=true + # to build npm/sqlite3 from source + export npm_config_build_from_source=true + yarn install --frozen-lockfile +} + +build() { + NODE_ENV=production yarn build + + # these are the same file + ln -sf ../package.json ./dist/package.json + # set home location + echo "/var/lib/thelounge" >.thelounge_home +} + +check() { + # skips tests that checks if version is using "source" and "git sha" + yarn test:mocha --grep "\#getVersion" --invert +} + +package() { + # cleanup unused files (cant be done before check) + yarn install --production --ignore-scripts --prefer-offline + find ./ -type f \( \ + -iname "*.ts" -o -iname "*.map" -o -iname "*.md" -o -iname "*.sh" -o \ + -iname "babel.config*" -o -iname "webpack.config*" -o -iname "tsconfig*" \ + \) -delete + find ./node_modules -type f \( \ + -iname "Makefile*" -o -iname "README*" -o -iname "LICENSE*" -o -iname "CHANGELOG*" \ + \) -delete + find ./node_modules -type d \( \ + -iname "test" -o -iname "node-gyp" -o -iname ".github" \ + \) -prune -exec rm -rf {} \; + + install -dm755 "$pkgdir"/usr/share/webapps/thelounge + install -Dm755 index.js -t "$pkgdir"/usr/share/webapps/thelounge/ + install -Dm644 package.json .thelounge_home -t "$pkgdir"/usr/share/webapps/thelounge/ + install -Dm644 client/index.html.tpl -t "$pkgdir"/usr/share/webapps/thelounge/client/ + cp -a node_modules public dist "$pkgdir"/usr/share/webapps/thelounge/ + mkdir -p "$pkgdir"/usr/bin + ln -sf ../share/webapps/thelounge/index.js "$pkgdir"/usr/bin/thelounge + + install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/thelounge/ + install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname + install -Dm755 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname +} + +sha512sums=" +d1a873b15b5ac003c59257c591030ebeb8810609ea646477cc319ddb82fa2842b0b71f3edfe60eb5b54749ed90d55074d5b82ab6312b55cccee8281057b425f2 thelounge-4.4.3.tar.gz +126913f79c3eda7c0e6f2f792ce8a799e2100259b62de57c97329f079072e3d8d81c5591b08b99630803c9e320c85c8e34ac7ffe2ddba7f2982a5ba958960789 thelounge.initd +2c44963a1e4303a6045b80df0931bb636150cb7b1f14d536c3624bb6dacfabfa08d7ea4e261e40245b80eedbb53a47fbf73672a02c865295300c5121fb83a558 thelounge.confd +" diff --git a/user/thelounge/allow-https-for-connect-src.patch b/backports/thelounge/allow-https-for-connect-src.patch similarity index 100% rename from user/thelounge/allow-https-for-connect-src.patch rename to backports/thelounge/allow-https-for-connect-src.patch diff --git a/user/thelounge/no-version-test.patch b/backports/thelounge/no-version-test.patch similarity index 100% rename from user/thelounge/no-version-test.patch rename to backports/thelounge/no-version-test.patch diff --git a/backports/thelounge/thelounge.confd b/backports/thelounge/thelounge.confd new file mode 100644 index 0000000..a7e59bd --- /dev/null +++ b/backports/thelounge/thelounge.confd @@ -0,0 +1,9 @@ +# thelounge configuration options + +command_user="thelounge:thelounge" # user:group +supervisor="supervise-daemon" +directory="/var/lib/thelounge" + +logdir="/var/log/thelounge" +output_log="$logdir/output.log" +error_log="$logdir/error.log" diff --git a/backports/thelounge/thelounge.initd b/backports/thelounge/thelounge.initd new file mode 100644 index 0000000..fc00ef8 --- /dev/null +++ b/backports/thelounge/thelounge.initd @@ -0,0 +1,34 @@ +#!/sbin/openrc-run + +# fallback values for /etc/conf.d/thelounge +: ${command_user:=thelounge:thelounge} +: ${directory:=/var/lib/thelounge} +: ${logdir:=/var/log/thelounge} + +name="thelounge" +command="/usr/bin/thelounge" +command_args="start" +command_background=true +pidfile="/run/thelounge.pid" + +depend() { + need net + use dns + after firewall +} + +start_pre() { + checkpath -d -o "$command_user" "$directory" + + if [ -n "$logdir" ]; then + checkpath -d -o "$command_user" "$logdir" + fi + + if [ -n "$output_log" ]; then + checkpath -f -o "$command_user" "$output_log" + fi + + if [ -n "$error_log" ]; then + checkpath -f -o "$command_user" "$error_log" + fi +} diff --git a/backports/thelounge/thelounge.post-install b/backports/thelounge/thelounge.post-install new file mode 100644 index 0000000..b08cddb --- /dev/null +++ b/backports/thelounge/thelounge.post-install @@ -0,0 +1,10 @@ +#!/bin/sh + +cat >&2 <<-EOF +* +* The configuration will be placed at /var/lib/thelounge/config.js after first run +* To add users, use the cli: doas -u thelounge thelounge add myuser +* +EOF + +exit 0 diff --git a/backports/thelounge/thelounge.pre-install b/backports/thelounge/thelounge.pre-install new file mode 100644 index 0000000..dd54b45 --- /dev/null +++ b/backports/thelounge/thelounge.pre-install @@ -0,0 +1,6 @@ +#!/bin/sh + +addgroup -S thelounge 2>/dev/null +adduser -S -D -h /var/lib/thelounge -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null + +exit 0 diff --git a/user/thelounge/APKBUILD b/user/thelounge/APKBUILD deleted file mode 100644 index 7988787..0000000 --- a/user/thelounge/APKBUILD +++ /dev/null @@ -1,83 +0,0 @@ -# Contributor: Kay Thomas -# Maintainer: Kay Thomas -pkgname=thelounge -pkgver=4.4.1 -pkgrel=2 -pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" -url="https://thelounge.chat" -# x86: textrels -# s390x: fails to check -# riscv64: fails to build -arch="all !x86 !s390x !riscv64" -license="MIT" -depends="nodejs" -makedepends="yarn npm python3" -subpackages="$pkgname-openrc" -pkgusers="thelounge" -pkggroups="thelounge" -install="$pkgname.pre-install $pkgname.post-install" -source="$pkgname-$pkgver.tar.gz::https://github.com/thelounge/thelounge/archive/v$pkgver.tar.gz - no-version-test.patch - thelounge.initd - allow-https-for-connect-src.patch - " -options="net" # npm - -prepare() { - default_prepare - - yarn install --frozen-lockfile -} - -build() { - NODE_ENV=production yarn run build -} - -check() { - CI=yes yarn run test:mocha -} - -package() { - yarn install --production --ignore-scripts --prefer-offline - NODE_ENV=production npm install --unsafe-perm -g --prefix "$pkgdir"/usr - - # Remove incorrect symlink, copy correct files - rm "$pkgdir"/usr/lib/node_modules/thelounge - mkdir -p "$pkgdir"/usr/lib/node_modules/thelounge - cp -a index.js client public node_modules dist package.json "$pkgdir"/usr/lib/node_modules/thelounge/ - - # cleanup unused files - find "$pkgdir" -type f -a \( \ - -name "*.ts" \ - -o -name "webpack*" \ - -o -name "tsconfig*" \ - -o -name "babel.config*" \ - -o -name "README*" \ - -o -name "CHANGELOG*" \ - -o -name "*.map" \ - -o -name "LICENSE" \ - \) \ - -delete - - # Set home location - echo /var/lib/thelounge > \ - "$pkgdir"/usr/lib/node_modules/$pkgname/.thelounge_home - - # Add default config - # this is only read from 'home' so we have to just put everything in var/lib - install -dm755 -o thelounge -g thelounge \ - "$pkgdir"/var/lib/thelounge - install -m644 -o thelounge -g thelounge \ - "$pkgdir"/usr/lib/node_modules/$pkgname/dist/defaults/config.js \ - "$pkgdir"/var/lib/thelounge/config.js - - install -Dm755 "$srcdir"/$pkgname.initd \ - "$pkgdir"/etc/init.d/$pkgname -} - -sha512sums=" -7695121a713a23688bc6f52dae2574bab1288eea930fd50d4dd85037233e9f23bd8e460980c69cdd14ea8648da4720d84e8196547b6a18e69d2f478b43d6e29a thelounge-4.4.1.tar.gz -cbf80e23b0af8f0185699d6b03816c645c51b85fff7f163d3cd3d00296ed816b6ab01529b359fbfd549a79e8adb72bbc83bc7a389cf13e0afd50636ff79a138e no-version-test.patch -f367d27ebcc412ff03c12ae98e50aeae5051fb5ffa9da6220f664c59993ed0e330b55b3b41fe941d546634901163d006e318891b4b886f6c49a93e0888fccd3e thelounge.initd -212e468d6cedaa528b7fad534b8ba0e7a3d69137940cdabd22dbe34375491900d5b7d577550aa3b245ad7775488a90e308019db55ff15e8ede105c4b9c15b015 allow-https-for-connect-src.patch -" diff --git a/user/thelounge/thelounge.initd b/user/thelounge/thelounge.initd deleted file mode 100644 index b10d1c5..0000000 --- a/user/thelounge/thelounge.initd +++ /dev/null @@ -1,14 +0,0 @@ -#!/sbin/openrc-run - -supervisor=supervise-daemon -name="thelounge" -command="/usr/bin/thelounge" -command_args="start" -command_user="thelounge:thelounge" -command_background=true -pidfile="/run/thelounge.pid" - -depend() { - need net localmount - after firewall -} diff --git a/user/thelounge/thelounge.post-install b/user/thelounge/thelounge.post-install deleted file mode 100644 index 1651780..0000000 --- a/user/thelounge/thelounge.post-install +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -cat >&2 <<-EOF -* -* The configuration is in /var/lib/thelounge/config.js. -* To add users, use the cli: -* doas -u thelounge thelounge .. -* e.g. -* doas -u thelounge thelounge add myuser -* -EOF - -exit 0 diff --git a/user/thelounge/thelounge.pre-install b/user/thelounge/thelounge.pre-install deleted file mode 100644 index b91b1ef..0000000 --- a/user/thelounge/thelounge.pre-install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -addgroup -S thelounge 2>/dev/null -adduser -S -D -H -s /sbin/nologin -G thelounge -g thelounge thelounge 2>/dev/null - -exit 0 From 975ca3acc66b67710789510247f59ae6764e620d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:19:14 -0400 Subject: [PATCH 598/738] user/u-boot-rm: drop for pmos --- user/u-boot-rm/APKBUILD | 125 -------------------- user/u-boot-rm/README.txt | 32 ----- user/u-boot-rm/fix-linking-with-ld.patch | 52 --------- user/u-boot-rm/rm1-ttygs0-serial.diff | 13 --- user/u-boot-rm/rm1-uboot-config-patch.diff | 83 ------------- user/u-boot-rm/rm2-uboot-config-patch.diff | 75 ------------ user/u-boot-rm/update-u-boot | 129 --------------------- 7 files changed, 509 deletions(-) delete mode 100644 user/u-boot-rm/APKBUILD delete mode 100644 user/u-boot-rm/README.txt delete mode 100644 user/u-boot-rm/fix-linking-with-ld.patch delete mode 100644 user/u-boot-rm/rm1-ttygs0-serial.diff delete mode 100644 user/u-boot-rm/rm1-uboot-config-patch.diff delete mode 100644 user/u-boot-rm/rm2-uboot-config-patch.diff delete mode 100755 user/u-boot-rm/update-u-boot diff --git a/user/u-boot-rm/APKBUILD b/user/u-boot-rm/APKBUILD deleted file mode 100644 index da2e135..0000000 --- a/user/u-boot-rm/APKBUILD +++ /dev/null @@ -1,125 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=u-boot-rm -pkgver=2020.09 -_rm1tag=97b35fdddf0077abd2e0f0409b94ef20adbe8565 -_rm2tag=47c91918aa7724c16b6eaf87cf5dfbf4548eafc1 -pkgrel=9 -pkgdesc="u-boot bootloader common files" -url="https://www.denx.de/wiki/U-Boot/" -arch="armv7" -license="GPL-2.0-or-later OFL-1.1 BSD-2-Clause BSD-3-Clause eCos-2.0 IBM-pibs - ISC LGPL-2.0-only LGPL-2.1-only X11" -options="!check" # no tests -makedepends=" - bc - bison - dtc - flex - gnutls-dev - linux-headers - openssl-dev>3 - py3-elftools - py3-setuptools - python3-dev - swig - util-linux-dev - " -source=" - u-boot-rm1-$_rm1tag.tar.gz::https://github.com/reMarkable/uboot/archive/$_rm1tag.tar.gz - u-boot-rm2-$_rm2tag.tar.gz::https://github.com/reMarkable/uboot/archive/$_rm2tag.tar.gz - update-u-boot - README.txt - rm1-uboot-config-patch.diff - rm2-uboot-config-patch.diff - " -builddir="$srcdir" - -#rm2:zero-sugar broken -case "$CARCH" in -arm*) board_configs=" - zerogravitas:zero-gravitas - ";; -esac - -for board_config in $board_configs; do - _allboards="$_allboards $pkgname-${board_config%%:*}" -done - -subpackages="$pkgname-all:_all $_allboards" -prepare() { - default_prepare - - cd "$builddir"/uboot-$_rm1tag - patch -p1 -i "$srcdir"/rm1-uboot-config-patch.diff - # patch -p1 -i "$srcdir"/rm1-ttygs0-serial.diff - cd "$builddir"/uboot-$_rm2tag - patch -p1 -i "$srcdir"/rm2-uboot-config-patch.diff -} - -build() { - local board_config board - for board_config in $board_configs; do - local configs="${board_config#*:}" - for board in ${configs//,/ }; do - msg "Building u-boot for $board" - case $board in - zero-gravitas) cd "$builddir"/uboot-$_rm1tag;; - zero-sugar) cd "$builddir"/uboot-$_rm2tag;; - esac - - touch include/config.h - LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > include/timestamp_autogenerated.h - LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> include/timestamp_autogenerated.h - - export BUILD_DIR="$builddir"/build/$board - mkdir -p "$BUILD_DIR" - make O="$BUILD_DIR" ${board}_config - make O="$BUILD_DIR" all - done - done -} - -package() { - mkdir -p "$pkgdir"/usr/share/$pkgname "$pkgdir"/usr/sbin - install "$srcdir"/README.txt "$pkgdir"/usr/share/$pkgname/README.txt - install "$srcdir"/update-u-boot "$pkgdir"/usr/sbin -} - -_all() { - pkgdesc="u-boot for all boards (meta package)" - depends="$_allboards" - - mkdir -p "$subpkgdir"/ -} - -_split_boards() { - cd "$builddir"/build - pkgdesc="u-boot for $1" - depends="u-boot-rm" - shift - local board - for board; do - msg "Including board $board" - mkdir -p "$subpkgdir"/usr/share/$pkgname/$board - export BUILD_DIR="$builddir"/build/$board - - cp "$BUILD_DIR"/u-boot.imx "$subpkgdir"/usr/share/$pkgname/$board/u-boot.bin - done -} - -for board_config in $board_configs; do - _board="${board_config%%:*}" - _configs="${board_config#*:}" - eval "$_board() { _split_boards $_board ${_configs//,/ }; }" -done - -sha512sums=" -7cc8d513cac1d63ee5119529caa056164ee3bc3633da5d880fbfb344b770c7c53c41475d42dd129b505390dcd5449e14524afc06f7cdba9354af7e70a7035ef9 u-boot-rm1-97b35fdddf0077abd2e0f0409b94ef20adbe8565.tar.gz -d0d18b123c4281285a8b3c1afd9ef623b48a33506399c8e0dbc393f22d967ee3e5df7030aab26c4fe8cad614f3f22f1ea5d6b5bb4ef5cc46fffe56b7ac7c3c28 u-boot-rm2-47c91918aa7724c16b6eaf87cf5dfbf4548eafc1.tar.gz -a905e4dcdb2704e0b1d4f0ab4a6333d3f1ffcec5c3a8359f5789800eb2114dad673cf0b5f24cae3a590f27333dff2e96b6f1efae5a466f9281a3d65efe403a1e update-u-boot -f8c9bb6e84d6f0620c976ac7ad5dd7ec7ff9dfdd4b1d03d2bf6653e7beccf80bdf2debfc92fb1f696dba92fb40287d3c45897e0078951451d0835cb61a5f16d1 README.txt -673cb917cc565ae245d4a7d659227bc240473112bc9c73ae184a64ce74be7994273d6dc4db17194d348941f83a42b3b67d3140f6f23c37c13d6dc93f7d76cc39 rm1-uboot-config-patch.diff -0e98404ca6d20eb01bd9c129b05e2eb10c60a692a56adc221ea283b4bfe7b0bcc2851121d4c3fe51e07a9784c339f7ccb221e0cc3f3603144fec46be66d0cbcc rm2-uboot-config-patch.diff -" diff --git a/user/u-boot-rm/README.txt b/user/u-boot-rm/README.txt deleted file mode 100644 index c342913..0000000 --- a/user/u-boot-rm/README.txt +++ /dev/null @@ -1,32 +0,0 @@ -WandBoard ---------- - -- ROM loads boot loader from raw MMC sectors at fixed address -- NOTE: 1st partition needs to start after boot loader - -- Install u-boot with: - dd if=wandboard/SPL of=/dev/mmcblk0 bs=1k seek=1 - dd if=wandboard/u-boot.img of=/dev/mmcblk0 bs=1k seek=69 - sync - - (Note - the SD card node may vary, so adjust this as needed). - -- Insert the SD card into the slot located in the bottom of the board - (same side as the mx6 processor) - -BeagleBoard ------------ - -- ROM looks for 1st partition with FAT, and loads MLO from it -- NOTE: MLO needs to be the first file created on this partition - -- Install u-boot with: - cp am335x_boneblack/{MLO,u-boot.img} /media/mmcblk0p1/ - -Sunxi (Cubie* etc) ------------------- - -- ROM loads boot loader from SD-CARD sectors at fixed address -- Install u-boot with: - sudo dd if=/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8 - diff --git a/user/u-boot-rm/fix-linking-with-ld.patch b/user/u-boot-rm/fix-linking-with-ld.patch deleted file mode 100644 index 827c566..0000000 --- a/user/u-boot-rm/fix-linking-with-ld.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 58772283210e15f8d803db4aa67c877d668db867 Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/u-boot/u-boot/commit/58772283210e15f8d803db4aa67c877d668db867 -From: Alistair Delva -Date: Wed, 20 Oct 2021 21:31:33 +0000 -Subject: [PATCH] x86: Fix linking u-boot with ld.lld - -When linking the final u-boot binary with LLD, the following link errors -are seen: - -ld.lld: error: can't create dynamic relocation R_386_32 against local - symbol in readonly segment; recompile object files with - -fPIC or pass '-Wl,-z,notext' to allow text relocations - in the output ->>> defined in arch/x86/cpu/start.o ->>> referenced by arch/x86/cpu/start.o:(.text.start+0x32) -[...] ->>> defined in arch/x86/cpu/start16.o ->>> referenced by arch/x86/cpu/start16.o:(.start16+0x1C) - -According to Nick Desaulniers: - -"This is a known difference between GNU and LLVM linkers; the GNU - linkers permit relocations in readonly segments (making them not read - only), LLVM does not (by default)." - -Since U-Boot apparently seems to use relocations in readonly segments, -change the global linker flags to permit them when linking with LLD by -specifying '-z notext'. - -Signed-off-by: Alistair Delva -Cc: Nick Desaulniers -Cc: Simon Glass -Cc: Bin Meng -Reviewed-by: Simon Glass ---- - Makefile | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/Makefile b/Makefile -index c0ea933cb636..286757986c02 100644 ---- a/Makefile -+++ b/Makefile -@@ -776,6 +776,9 @@ ifneq ($(CONFIG_SYS_TEXT_BASE),) - LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE) - endif - -+# ld.lld support -+LDFLAGS_u-boot += -z notext -+ - # Normally we fill empty space with 0xff - quiet_cmd_objcopy = OBJCOPY $@ - cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \ diff --git a/user/u-boot-rm/rm1-ttygs0-serial.diff b/user/u-boot-rm/rm1-ttygs0-serial.diff deleted file mode 100644 index 9596fc4..0000000 --- a/user/u-boot-rm/rm1-ttygs0-serial.diff +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/include/configs/zero-gravitas.h.orig b/include/configs/zero-gravitas.h -index 818ed56..6eb7447 100644 ---- a/include/configs/zero-gravitas.h.orig -+++ b/include/configs/zero-gravitas.h -@@ -73,7 +73,7 @@ - "active_partition=2\0" \ - "bootlimit=1\0" \ - "por=undefined\0" \ -- "mmcargs=setenv bootargs console=${console},${baudrate} " \ -+ "mmcargs=setenv bootargs console=${console},${baudrate} console=ttyGS0,115200 " \ - "root=/dev/mmcblk1p2 rootwait rootfstype=ext4 rw por=${por};\0" \ - "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ - "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ diff --git a/user/u-boot-rm/rm1-uboot-config-patch.diff b/user/u-boot-rm/rm1-uboot-config-patch.diff deleted file mode 100644 index 55d6ce1..0000000 --- a/user/u-boot-rm/rm1-uboot-config-patch.diff +++ /dev/null @@ -1,83 +0,0 @@ -diff --git a/include/configs/zero-gravitas.h b/include/configs/zero-gravitas.h -index 074f171422..818ed56892 100644 ---- a/include/configs/zero-gravitas.h -+++ b/include/configs/zero-gravitas.h -@@ -71,12 +71,10 @@ - "splashimage=0x80000000\0" \ - "splashpos=m,m\0" \ - "active_partition=2\0" \ -- "fallback_partition=3\0" \ - "bootlimit=1\0" \ - "por=undefined\0" \ - "mmcargs=setenv bootargs console=${console},${baudrate} " \ -- "systemd.crash_reboot=true memtest " \ -- "root=/dev/mmcblk1p${active_partition} rootwait rootfstype=ext4 quiet rw por=${por};\0" \ -+ "root=/dev/mmcblk1p2 rootwait rootfstype=ext4 rw por=${por};\0" \ - "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ - "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ - "mmcboot=echo Booting from mmc ...; " \ -@@ -89,41 +87,13 @@ - "echo WARN: Cannot load the DT; " \ - "fi; " \ - "fi; " \ -- "fi;\0" \ -- "memboot=echo Booting from memory...; " \ -- "setenv bootargs console=${console},${baudrate} " \ -- "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ -- "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ -- "g_mass_storage.iSerialNumber=\"\" rdinit=/linuxrc; "\ -- "bootz ${loadaddr} ${initrd} ${fdt_addr};\0" \ -- "altbootcmd=echo Running from fallback root...; " \ -- "run memboot; " \ -- "if test ${bootcount} -gt 10; then " \ -- "echo WARN: Failed too much, resetting bootcount and turning off; " \ -- "setenv bootcount 0; " \ -- "saveenv; " \ -- "poweroff; " \ -- "fi; " \ -- "setenv mmcpart ${fallback_partition}; " \ -- "setenv bootargs console=${console},${baudrate} " \ -- "root=/dev/mmcblk1p${fallback_partition} rootwait rootfstype=ext4 quiet rw " \ -- "systemd.log_level=debug systemd.log_target=kmsg memtest " \ -- "log_buf_len=1M printk.devkmsg systemd.journald.forward_to_console=1; " \ -- "run mmcboot;\0" \ -+ "fi;\0" - - /* Always try to boot from memory first, in case of USB download mode */ - #define CONFIG_BOOTCOMMAND \ -- "if test ! -e mmc 1:1 uboot.env; then " \ -- "saveenv; " \ -- "fi; " \ -- "run memboot; " \ - "run mmcargs; " \ - "setenv mmcpart ${active_partition}; " \ -- "run mmcboot; " \ -- "echo WARN: unable to boot from either RAM or eMMC; " \ -- "setenv upgrade_available 1; " \ -- "saveenv; " \ -- "reset; " -+ "run mmcboot; " - - #ifdef CONFIG_BOOTDELAY - #undef CONFIG_BOOTDELAY -@@ -157,18 +127,8 @@ - /* Environment organization */ - #define CONFIG_ENV_SIZE SZ_8K - --#define CONFIG_ENV_IS_IN_FAT --/*#define CONFIG_ENV_IS_NOWHERE*/ -- --#ifdef CONFIG_ENV_IS_IN_FAT --#define CONFIG_BOOTCOUNT_LIMIT --#define CONFIG_BOOTCOUNT_ENV -- --#define FAT_ENV_INTERFACE "mmc" --#define FAT_ENV_DEVICE_AND_PART "1:1" --#define CONFIG_FAT_WRITE --#define FAT_ENV_FILE "uboot.env" --#endif -+/*#define CONFIG_ENV_IS_IN_FAT*/ -+#define CONFIG_ENV_IS_NOWHERE - - #ifdef CONFIG_CMD_SF - #define CONFIG_MXC_SPI diff --git a/user/u-boot-rm/rm2-uboot-config-patch.diff b/user/u-boot-rm/rm2-uboot-config-patch.diff deleted file mode 100644 index 4aa04bc..0000000 --- a/user/u-boot-rm/rm2-uboot-config-patch.diff +++ /dev/null @@ -1,75 +0,0 @@ -diff --git a/include/configs/zero-sugar.h.orig b/include/configs/zero-sugar.h -index 6b5450a..dd6da5c 100644 ---- a/include/configs/zero-sugar.h.orig -+++ b/include/configs/zero-sugar.h -@@ -122,12 +122,10 @@ - "panel=EPD\0" \ - "mmcdev=0\0" \ - "active_partition=2\0" \ -- "fallback_partition=3\0 " \ - "bootlimit=1\0 " \ - "mmcautodetect=yes\0" \ - "mmcargs=setenv bootargs console=${console},${baudrate} " \ -- "root=/dev/mmcblk2p${active_partition} rootwait rootfstype=ext4 rw " \ -- "quiet panic=20 systemd.crash_reboot\0" \ -+ "root=/dev/mmcblk2p2 rootwait rootfstype=ext4 rw " \ - "loadimage=ext4load mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}\0" \ - "loadfdt=ext4load mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}\0" \ - "mmcboot=echo Booting from mmc ...; " \ -@@ -140,41 +138,13 @@ - "echo WARN: Cannot load the DT; " \ - "fi; " \ - "fi; " \ -- "fi;\0" \ -- "memboot=echo Booting from memory...; " \ -- "setenv bootargs console=${console},${baudrate} " \ -- "g_mass_storage.stall=0 g_mass_storage.removable=1 " \ -- "g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\ -- "g_mass_storage.iSerialNumber=\"\" rdinit=/linuxrc; "\ -- "bootz ${loadaddr} ${initrd} ${fdt_addr};\0" \ -- "altbootcmd=echo Running from fallback root...; " \ -- "run memboot; " \ -- "if test ${bootcount} -gt 10; then " \ -- "echo WARN: Failed too much, resetting bootcount and turning off; " \ -- "setenv bootcount 0; " \ -- "saveenv; " \ -- "poweroff; " \ -- "fi; " \ -- "setenv mmcpart ${fallback_partition}; " \ -- "setenv bootargs console=${console},${baudrate} " \ -- "root=/dev/mmcblk2p${fallback_partition} rootwait rootfstype=ext4 quiet rw " \ -- "systemd.log_level=debug systemd.log_target=kmsg memtest " \ -- "log_buf_len=1M printk.devkmsg systemd.journald.forward_to_console=1; " \ -- "run mmcboot;\0" \ -+ "fi;\0" - - /* Always try to boot from memory first, in case of USB download mode */ - #define CONFIG_BOOTCOMMAND \ -- "if test ! -e mmc 0:1 uboot.env; then " \ -- "saveenv; " \ -- "fi; " \ -- "run memboot; " \ - "run mmcargs; " \ - "setenv mmcpart ${active_partition}; " \ -- "run mmcboot; " \ -- "echo WARN: unable to boot from either RAM or eMMC; " \ -- "setenv upgrade_available 1; " \ -- "saveenv; " \ -- "reset; " -+ "run mmcboot; " - - #define CONFIG_SYS_MEMTEST_START 0x80000000 - #define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + 0x20000000) -@@ -198,10 +168,8 @@ - /* Environment organization */ - #define CONFIG_ENV_SIZE SZ_8K - --#ifdef CONFIG_ENV_IS_IN_FAT --#define CONFIG_BOOTCOUNT_LIMIT --#define CONFIG_BOOTCOUNT_ENV --#endif -+/*#define CONFIG_ENV_IS_IN_FAT*/ -+#define CONFIG_ENV_IS_NOWHERE - - #define CONFIG_SYS_FSL_USDHC_NUM 2 - diff --git a/user/u-boot-rm/update-u-boot b/user/u-boot-rm/update-u-boot deleted file mode 100755 index e90bcbd..0000000 --- a/user/u-boot-rm/update-u-boot +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh - -verbose= -board= -device= -dryrun= -imagedir= - -get_defaults() { - if [ -z "$board" -a -e /sys/firmware/devicetree/base/compatible ]; then - case "$(cat /sys/firmware/devicetree/base/compatible 2>/dev/null)" in - wand,*) board=wand ;; - esac - fi - - if [ -z "$device" ]; then - case "$board" in - wand|cubie|cubie2) device=/dev/mmcblk0p0 ;; - zero-gravitas) device=/dev/mmcblk1 ;; - esac - fi - - if [ -z "$imagedir" ]; then - imagedir="$(realpath $(dirname $0))" - [ -f "$imagedir/README.txt" ] || imagedir="/usr/share/u-boot-rm" - fi -} - -die() { - echo "ERROR: $@" - exit 1 -} - -usage() { - get_defaults - - cat <] [-d|--device ] - -options: - - -b,--board Specify the board type: wand, cubie, cubie2 - (current default: ${board:-none}) - - -d,--device Specify the device where to install u-boot - (current default: ${device:-none}) - - -i,--imagedir Specify u-boot image directory - (current default: ${imagedir:-none}) - - -n,--dry-run Print commands but don't execute them - -EOF -} - -while [ $# -gt 0 ]; do - opt="$1" - shift - case "$opt" in - -b|--board) - case "$1" in - wand|wandboard) board="wand" ;; - cubie|cubieboard) board="cubie" ;; - zerogravitas) board="zero-gravitas" ;; - zerosugar) board="zero-sugar" ;; - *) usage; exit 1;; - esac - shift - ;; - -d|--device) - device="$1" - shift - ;; - -i|--imagedir) - imagedir="$1" - shift - ;; - -n|--dry-run) - dryrun="echo" - ;; - --) - break - ;; - -*) - usage - exit 1 - ;; - esac -done - -get_defaults -if [ -z "$board" -o -z "$device" -o -z "$imagedir" -o ! -e "$imagedir" ]; then - usage - exit 1 -fi - -if [ -z "$dryrun" ]; then - echo "Updating $board u-boot in $device in 3 seconds..." - sleep 3 -fi - -( -set -e -case "$board" in -wand) - [ -e "$imagedir/wandboard" ] || die "wandboard images not installed, apk add u-boot-wandboard" - $dryrun dd if=$imagedir/wandboard/SPL of=$device bs=1k seek=1 status=none - $dryrun dd if=$imagedir/wandboard/u-boot.img of=$device bs=1k seek=69 status=none - ;; -cubie|cubie2) - [ -e "$imagedir/Cubieboard${board#cubie}" ] || die "Cubieboard images not installed, apk add u-boot-cubieboard" - $dryrun dd if=$imagedir/Cubieboard${board#cubie}/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8 status=none - ;; -zero-gravitas) - [ -e "$imagedir/zero-gravitas" ] || die "rM1 images not installed, apk add u-boot-rm1" - $dryrun dd if=/dev/zero of=$device bs=512 seek=1536 count=16 - [ -z "$dryrun" ] && echo 0 > /sys/block/${device/\/dev\/}boot0/force_ro - $dryrun dd if=/dev/zero of=${device}boot0 bs=512 count=2 - $dryrun dd if=$imagedir/zero-gravitas/u-boot.bin of=${device}boot0 bs=512 seek=2 - [ -z "$dryrun" ] && echo 1 > /sys/block/${device/\/dev\/}boot0/force_ro - ;; -zero-sugar) - die "rM2 not yet tested" - ;; -esac -$dryrun sync -) || die "U-Boot installation in $device failed" - -[ -z "$dryrun" ] && echo "Completed successfully." From de224ac5c470ff1a590f87e9660d8af5e30417e5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:19:27 -0400 Subject: [PATCH 599/738] user/rm-utils: drop for pmos --- user/rm-utils/APKBUILD | 38 ------- user/rm-utils/battery-monitor.sh | 37 ------- user/rm-utils/epdc-init-auto.c | 126 --------------------- user/rm-utils/epdc-show-bitmap.c | 184 ------------------------------- user/rm-utils/xorg.conf | 62 ----------- 5 files changed, 447 deletions(-) delete mode 100644 user/rm-utils/APKBUILD delete mode 100644 user/rm-utils/battery-monitor.sh delete mode 100644 user/rm-utils/epdc-init-auto.c delete mode 100644 user/rm-utils/epdc-show-bitmap.c delete mode 100644 user/rm-utils/xorg.conf diff --git a/user/rm-utils/APKBUILD b/user/rm-utils/APKBUILD deleted file mode 100644 index d8f2b68..0000000 --- a/user/rm-utils/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=rm-utils -pkgver=0.0.1 -pkgrel=4 -pkgdesc="Utility files for reMarkable tablet" -arch="armv7" -url="http://www.davisr.me/projects/parabola-rm/" -license="GPL-3.0-only" -makedepends="musl-dev linux-rm-headers" -options="!check" # No testsuite -builddir="$srcdir" -source=" - battery-monitor.sh - epdc-init-auto.c - epdc-show-bitmap.c - xorg.conf -" - -build() { - $CC $CFLAGS epdc-init-auto.c -o epdc-init-auto - $CC $CFLAGS epdc-show-bitmap.c -o epdc-show-bitmap -} - -package() { - install -vDm755 battery-monitor.sh "$pkgdir"/usr/bin/battery-monitor - install -vDm755 epdc-show-bitmap -t "$pkgdir"/usr/bin/ - install -vDm755 epdc-init-auto -t "$pkgdir"/usr/bin/ - install -vDm644 xorg.conf -t "$pkgdir"/etc/defaults/ -} - -sha512sums=" -7f0e6cb276357983b76c37c81a91c0d278dbec16d8982a97618f2217ef5e4d706211d921af6c79db3aad912d50aaed8cf5ce67f52a1081f61585eb97322c8deb battery-monitor.sh -f145d6af541828e69217a73f7b848f7fe57cce37426e15469a1d6a5540604f4078d4cd1f67e69e77b961b608a7b8e2930e1e82b13fe9dd181361e361895a66be epdc-init-auto.c -409744c4bbcac462c38add2b19d3b433e44cb326905fe3af240931e27bb2b71b14696229c46187bf7c060f83d77920376b5c6161f62949a2fa2c0a5464753cc0 epdc-show-bitmap.c -e14a61751e4c830652e7a849b9d596c6bc213fed87ba3f9f7c3df0d5fe35ddf28bde7de2fa977c0321639503ceff5abffd0d856380eacce24389fd50eaf3372a xorg.conf -" diff --git a/user/rm-utils/battery-monitor.sh b/user/rm-utils/battery-monitor.sh deleted file mode 100644 index fb5dbc7..0000000 --- a/user/rm-utils/battery-monitor.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash -# -# battery-monitor.sh -# Prints the state of charge of the tablet's battery -# -# Parabola-rM is a free operating system for the reMarakble tablet. -# Copyright (C) 2020 -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program 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. -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. - -# Path for Linux 4.9 -battpath="/sys/class/power_supply/bq27441-0" - -chargenow="$(cat $battpath/charge_now)" -chargefull="$(cat $battpath/charge_full)" -status="$(cat $battpath/status)" - -chargepct="$(echo $chargenow $chargefull \ - | awk '{printf "%f", $1 / $2 * 100}' \ - | cut -d'.' -f1)" -symbol="" -if [[ "Charging" == "$status" ]]; then - symbol=$'\u26a1' # Lightning symbol -fi - -echo "${symbol}${chargepct}%" diff --git a/user/rm-utils/epdc-init-auto.c b/user/rm-utils/epdc-init-auto.c deleted file mode 100644 index 069ea9f..0000000 --- a/user/rm-utils/epdc-init-auto.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - epdc-init-auto.c - Initializes the EPDC framebuffer into a deferred-IO automatic-update - mode - - Parabola-rM is a free operating system for the reMarakble tablet. - Copyright (C) 2020 Davis Remmel - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -int main() -{ - int ret; - int fb = open("/dev/fb0", O_RDWR); - struct fb_var_screeninfo vinfo; - ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); - if (0 != ret) { - fprintf(stderr, "FBIOGET_VSCREENINFO failed with error " - "%d, aborting\n", ret); - return 1; - } - - vinfo.xres = 1872; - vinfo.yres = 1404; - vinfo.pixclock = 160000000; - vinfo.left_margin = 32; - vinfo.right_margin = 326; - vinfo.upper_margin = 4; - vinfo.lower_margin = 12; - vinfo.hsync_len = 44; - vinfo.vsync_len = 1; - vinfo.sync = 0; - vinfo.vmode = FB_VMODE_NONINTERLACED; - vinfo.accel_flags = 0; - vinfo.activate = FB_ACTIVATE_FORCE; - - // Put screen info. Sometimes this fails when trying to set the - // pixclock. This may be a bug in the driver's arithmetic. - ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); - if (0 != ret) { - fprintf(stderr, "FBIOPUT_VSCREENINFO failed with error " - "%d, attempting to reset pixclock\n", ret); - vinfo.pixclock = 6250; - ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); - vinfo.pixclock = 160000000; - ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); - if (0 != ret) { - fprintf(stderr, "FBIOPUT_VSCREENINFO failed " - "with error %d, aborting\n", ret); - return 1; - } - } - - // Pull the screeninfo agian - ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); - if (0 != ret) { - fprintf(stderr, "FBIOGET_VSCREENINFO failed with error " - "%d, aborting\n", ret); - return 1; - } - - printf("x:%d y:%d activate:%d bpp:%d rotate:%d hsync_len:%d" - "vsync_len: %d sync:%d\n", - vinfo.xres, vinfo.yres, vinfo.activate, - vinfo.bits_per_pixel, vinfo.rotate, vinfo.hsync_len, - vinfo.vsync_len, vinfo.sync); - - struct fb_fix_screeninfo finfo; - ret = ioctl(fb, FBIOGET_FSCREENINFO, &finfo); - if (0 != ret) { - fprintf(stderr, "FBIOGET_FSCREENINFO failed with error " - "%d, aborting\n", ret); - return 1; - } - - // In case the EPDC wasn't accessible - ret = ioctl(fb, MXCFB_ENABLE_EPDC_ACCESS); - if (0 != ret) { - fprintf(stderr, "MXCFB_ENABLE_EPDC_ACCESS failed with " - "error %d, aborting\n", ret); - return 1; - } - - // Set auto update mode - __u32 aumode = AUTO_UPDATE_MODE_AUTOMATIC_MODE; - ret = ioctl(fb, MXCFB_SET_AUTO_UPDATE_MODE, &aumode); - if (0 != ret) { - fprintf(stderr, "MXCFB_SET_AUTO_UPDATE_MODE failed " - "with error %d, aborting\n", ret); - return 1; - } - - // Queue-and-merge is best-performing - __u32 uscheme = UPDATE_SCHEME_QUEUE_AND_MERGE; - ret = ioctl(fb, MXCFB_SET_UPDATE_SCHEME, &uscheme); - if (0 != ret) { - fprintf(stderr, "MXCFB_SET_UPDATE_SCHEME failed with " - "error %d, aborting\n", ret); - return 1; - } - - close(fb); - return 0; -} - diff --git a/user/rm-utils/epdc-show-bitmap.c b/user/rm-utils/epdc-show-bitmap.c deleted file mode 100644 index c42bf30..0000000 --- a/user/rm-utils/epdc-show-bitmap.c +++ /dev/null @@ -1,184 +0,0 @@ -/* -epdc-show-bitmap.c -Displays a raw image to the EPDC framebuffer - -Parabola-rM is a free operating system for the reMarakble tablet. -Copyright (C) 2020 Davis Remmel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program 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 General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int main(int argc, char *argv[]) { - if (argc < 2) { - printf("Must pass an image as an argument.\n"); - return 1; - } - - int ret; - int fb = open("/dev/fb0", O_RDWR); - struct fb_var_screeninfo vinfo; - ret = ioctl(fb, FBIOGET_VSCREENINFO, &vinfo); - if (0 != ret) { - printf("FBIOGET_VSCREENINFO failed with error %d" - ", aborting\n", ret); - return 1; - } - - vinfo.xres = 1872; - vinfo.yres = 1404; - vinfo.pixclock = 160000000; - vinfo.left_margin = 32; - vinfo.right_margin = 326; - vinfo.upper_margin = 4; - vinfo.lower_margin = 12; - vinfo.hsync_len = 44; - vinfo.vsync_len = 1; - vinfo.sync = 0; - vinfo.vmode = FB_VMODE_NONINTERLACED; - vinfo.accel_flags = 0; - vinfo.activate = FB_ACTIVATE_FORCE; - - // Put screen info. Sometimes this fails when trying to set the - // pixclock. This may be a bug in the driver's arithmetic. - ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); - if (0 != ret) { - fprintf(stderr, "FBIOPUT_VSCREENINFO failed with error " - "%d, attempting To reset pixclock\n", ret); - vinfo.pixclock = 6250; - ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); - vinfo.pixclock = 160000000; - ret = ioctl(fb, FBIOPUT_VSCREENINFO, &vinfo); - if (0 != ret) { - fprintf(stderr, "FBIOPUT_VSCREENINFO failed " - "with error %d, aborting\n", ret); - return 1; - } - } - - printf("x:%d y:%d activate:%d bpp:%d rotate:%d hsync_len:%d" - "vsync_len: %d sync:%d\n", - vinfo.xres, vinfo.yres, vinfo.activate, - vinfo.bits_per_pixel, vinfo.rotate, vinfo.hsync_len, - vinfo.vsync_len, vinfo.sync); - - struct fb_fix_screeninfo finfo; - ret = ioctl(fb, FBIOGET_FSCREENINFO, &finfo); - if (0 != ret) { - fprintf(stderr, "FBIOGET_FSCREENINFO failed with error " - "%d, aborting\n", ret); - return 1; - } - - // In case the EPDC wasn't accessible - ret = ioctl(fb, MXCFB_ENABLE_EPDC_ACCESS); - if (0 != ret) { - fprintf(stderr, "MXCFB_ENABLE_EPDC_ACCESS failed with " - "error %d, aborting\n", ret); - return 1; - } - - // Set to partial mode to control update parameters - __u32 aumode = AUTO_UPDATE_MODE_REGION_MODE; - ret = ioctl(fb, MXCFB_SET_AUTO_UPDATE_MODE, &aumode); - if (0 != ret) { - fprintf(stderr, "MXCFB_SET_AUTO_UPDATE_MODE failed " - "with error %d, aborting\n", ret); - return 1; - } - - - // No artifacts in display output - __u32 uscheme = UPDATE_SCHEME_SNAPSHOT; - ret = ioctl(fb, MXCFB_SET_UPDATE_SCHEME, &uscheme); - if (0 != ret) { - fprintf(stderr, "MXCFB_SET_UPDATE_SCHEME failed with " - "error %d, aborting\n", ret); - return 1; - } - - // Set up update (same region for all writes, gets reused) - struct mxcfb_update_data bupdate; - bupdate.update_region.left = 0; - bupdate.update_region.top = 0; - bupdate.update_region.width = 1872; - bupdate.update_region.height = 1404; - bupdate.waveform_mode = WAVEFORM_MODE_AUTO; - bupdate.update_mode = UPDATE_MODE_FULL; - bupdate.update_marker = 0; - bupdate.temp = TEMP_USE_AMBIENT; - bupdate.flags = 0; - - struct mxcfb_update_marker_data updm; - updm.update_marker = 0; - - // mmap to framebuffer - int buflength = vinfo.yres_virtual * finfo.line_length; - printf("buflength %d\n", buflength); - char * region = mmap(0, buflength, PROT_READ | PROT_WRITE, - MAP_SHARED, fb, (off_t)0); - if (region == MAP_FAILED) { - fprintf(stderr, "map failed!\n"); - return 1; - } - - // Write black - memset(region, 0x00, buflength); - ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); - ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); - - // Write white - memset(region, 0xff, buflength); - ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); - ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); - - // Write image - FILE *pattern = fopen(argv[1], "rb"); - fseek(pattern, 0, SEEK_END); - long psize = ftell(pattern); - printf("psize is %d\n", psize); - fseek(pattern, 0, SEEK_SET); - - if (psize != buflength) { - fprintf(stderr, "Image must match framebuffer size\n"); - return 1; - } - - char *buffer = malloc(psize); - fread(buffer, psize, 1, pattern); - fclose(pattern); - - memcpy(region, buffer, psize); - ret = ioctl(fb, MXCFB_SEND_UPDATE, &bupdate); - ioctl(fb, MXCFB_WAIT_FOR_UPDATE_COMPLETE, &updm); - if (0 != ret) { - fprintf(stderr, "MXCFB_SEND_UPDATE failed with error " - "%d, aborting\n", ret); - return 1; - } - - close(fb); - return 0; -} diff --git a/user/rm-utils/xorg.conf b/user/rm-utils/xorg.conf deleted file mode 100644 index 8ebf064..0000000 --- a/user/rm-utils/xorg.conf +++ /dev/null @@ -1,62 +0,0 @@ -Section "ServerLayout" - Identifier "reMarkable Tablet RM100" - Screen 0 "Screen0" - InputDevice "wacom" "CorePointer" -EndSection - -Section "ServerFlags" - Option "BlankTime" "0" - Option "StandbyTime" "0" - Option "SuspendTime" "0" - Option "OffTime" "0" -EndSection - -Section "Monitor" - Identifier "Monitor0" - DisplaySize 210 158 # mm, sets DPI - Modeline "1872x1404_30.00" 104.26 1872 1960 2152 2432 1404 1405 \ - 1408 1429 -HSync +Vsync - Option "PreferredMode" "1872x1404_30.00" -EndSection - -Section "Screen" - Identifier "Screen0" - Monitor "Monitor0" - Device "epdc0" - DefaultDepth 16 - SubSection "Display" - Depth 16 - Modes "1872x1404_30.00" - EndSubSection -EndSection - -Section "Device" - Identifier "epdc0" - Driver "fbdev" - Option "fbdev" "/dev/fb0" - Option "Rotate" "CW" -EndSection - -Section "InputDevice" - Identifier "wacom" - Driver "evdev" - Option "Protocol" "Auto" - Option "Device" "/dev/input/event0" - Option "SwapAxes" "1" - Option "InvertY" "1" -EndSection - -Section "InputClass" - Identifier "touchscreen" - MatchIsTouchscreen "on" - MatchDevicePath "/dev/input/event1" - Driver "libinput" - Option "CalibrationMatrix" "-1 0 1 0 -1 1 0 0 1" # Rot 180 -EndSection - -Section "InputClass" - Identifier "facialbuttons" - MatchIsKeyboard "on" - MatchDevicePath "/dev/input/event2" - Driver "libinput" -EndSection From c4e065619263be6186dd4c6c6e48a7d318121d1c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:19:39 -0400 Subject: [PATCH 600/738] user/rm-extractor: drop for pmos --- user/rm-extractor/APKBUILD | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 user/rm-extractor/APKBUILD diff --git a/user/rm-extractor/APKBUILD b/user/rm-extractor/APKBUILD deleted file mode 100644 index f581976..0000000 --- a/user/rm-extractor/APKBUILD +++ /dev/null @@ -1,26 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=rm-extractor -_gittag=9d37e9437affea379dadb59e646a819b3b9147dd -pkgver=0.0.1 -pkgrel=4 -pkgdesc="Image extractor for reMarkable firmware files" -arch="noarch" -url="https://github.com/ddvk/remarkable-update" -license="MIT" -depends="py3-six py3-protobuf" -options="!check" # No testsuite -builddir="$srcdir/remarkable-update-$_gittag" -source="$pkgname-$pkgver.tar.gz::https://github.com/ddvk/remarkable-update/archive/$_gittag.tar.gz" - -package() { - install -vDm755 "$builddir"/extractor/extractor.py "$pkgdir"/usr/lib/rm-extractor/extractor.py - install -vDm644 "$builddir"/extractor/update_metadata.proto "$pkgdir"/usr/lib/rm-extractor/update_metadata.proto - install -vDm755 "$builddir"/extractor/update_metadata_pb2.py "$pkgdir"/usr/lib/rm-extractor/update_metadata_pb2.py - install -vdm755 "$pkgdir"/usr/bin - ln -s /usr/lib/rm-extractor/extractor.py "$pkgdir"/usr/bin/rm-extractor -} - -sha512sums=" -866c483950ee2cf7085e7d43d8752458d9aeb58b4361c05f50ac3118e87b295ff62b3d4288ad846eda5f93a4afe38891f6a9166f839c66f5ff0ab07afab6ae16 rm-extractor-0.0.1.tar.gz -" From 9ab70541a03989424bbb431e7a9c85345b349214 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:19:51 -0400 Subject: [PATCH 601/738] user/linux-rm: drop for pmos --- user/linux-rm/APKBUILD | 258 ------ ...sun-style-flash-on-section-directive.patch | 428 ---------- .../brcmfmac-disable-power-management.patch | 13 - ...suspend-resume-when-power-is-cut-off.patch | 221 ----- user/linux-rm/config-changes-rm.armhf | 1 - user/linux-rm/config-changes-rm.armv7 | 62 -- user/linux-rm/config-changes-rm2.armhf | 1 - user/linux-rm/config-changes-rm2.armv7 | 1 - .../enable-automatic-partial-refreshing.patch | 26 - user/linux-rm/enable-sdhc1.patch | 790 ------------------ 10 files changed, 1801 deletions(-) delete mode 100644 user/linux-rm/APKBUILD delete mode 100644 user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch delete mode 100644 user/linux-rm/brcmfmac-disable-power-management.patch delete mode 100644 user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch delete mode 120000 user/linux-rm/config-changes-rm.armhf delete mode 100644 user/linux-rm/config-changes-rm.armv7 delete mode 120000 user/linux-rm/config-changes-rm2.armhf delete mode 120000 user/linux-rm/config-changes-rm2.armv7 delete mode 100644 user/linux-rm/enable-automatic-partial-refreshing.patch delete mode 100644 user/linux-rm/enable-sdhc1.patch diff --git a/user/linux-rm/APKBUILD b/user/linux-rm/APKBUILD deleted file mode 100644 index 864b2b5..0000000 --- a/user/linux-rm/APKBUILD +++ /dev/null @@ -1,258 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=linux-rm -pkgver=5.4.70 -_rmver=1.3.4 -pkgrel=11 -pkgdesc="Linux kernel with reMarkable patches" -url=https://github.com/reMarkable/linux -depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" -_depends_dev="perl gmp-dev elfutils-dev bash mpc1-dev mpfr-dev" -makedepends="$_depends_dev sed installkernel bc linux-headers linux-firmware mawk - bison flex openssl-dev>3 diffutils pahole findutils xz lzop -" -options="!strip !check" -builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver -source=" - https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz - https://raw.githubusercontent.com/ichaozi/RemarkableFramebuffer/0f37dc8c06d340dc1af52ff2d4d6d5789ccf14bb/kernel-mxc-epdc-fb-reference/epdc_ES103CS1.fw - arm-replace-sun-style-flash-on-section-directive.patch - brcmfmac-disable-power-management.patch - brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch - enable-automatic-partial-refreshing.patch - config-changes-rm.armv7 - config-changes-rm.armhf - " -arch="armv7" -license="GPL-2.0" -for _i in $source; do - case $_i in - config-*.$CARCH) - _f=${_i%."$CARCH"} - _f=${_f#config-changes-} - _flavors="$_flavors $_f" - [ "linux-$_f" != "$pkgname" ] && subpackages="$subpackages linux-$_f::$CTARGET_ARCH" - subpackages="$subpackages linux-$_f-dev:_dev:$CTARGET_ARCH" - ;; - esac -done - -_carch=$CARCH -case "$CARCH" in - aarch64) _carch="arm64" ;; - arm*) _carch="arm" ;; -esac - -# generate config from defconfig and apply local changes. -# config-changes-$flavor.$CARCH holds a list of = delimited -# config command and values used by kernel scripts/config script. -_genconfig() { - local flavor=$1 defconfig= - local subbuilddir="$srcdir"/build-$flavor - local defconfig= - case $flavor in - rm) defconfig=zero-gravitas_defconfig ;; - rm2) defconfig=zero-sugar_defconfig ;; - *) die "Unknown flavor: $flavor" ;; - esac - - cp "$builddir"/arch/$_carch/configs/$defconfig \ - "$subbuilddir"/.config - - while read -r line; do - # skip comments - case "$line" in - "#"*) continue;; - esac - local option=${line%%=*} str= - local cmd=$(echo $line | cut -d= -f2) - case "$cmd" in - y) cmd="enable";; - n) cmd="disable";; - m) cmd="module";; - '"'*) cmd="set-str"; str="${line#*=}";; - [0-9]*) cmd="set-val"; str="${line#*=}";; - *) die "Command $cmd not accepted" ;; - esac - msg "[$flavor] $cmd: $option $str" - "$builddir"/scripts/config \ - --file "$subbuilddir"/.config \ - --$cmd "$option" "${str//\"/}" - done < "$srcdir"/config-changes-$flavor.$CARCH -} - -# verify if options are set to correct value -_verifyconfig() { - local flavor=$1 - local subbuilddir="$srcdir"/build-$flavor - while read -r line; do - [ ${line:0:1} = "#" ] && continue - local option=${line%%=*} str= invert= - local cmd=$(echo $line | cut -d= -f2) - case "$cmd" in - enable) str="$option=y" ;; - disable) str="$option"; invert="-v" ;; - module) str="$option=m" ;; - set-val) str="$option=${line##*=}" ;; - set-str) str=${line##*=} - str="$option=\"${str//\"/}\"" ;; - esac - grep -q $invert "^$str" "$subbuilddir"/.config || \ - die "Config: $option not properly set!" - done < "$srcdir"/config-changes-$flavor.$CARCH -} - -prepare() { - default_prepare - - local flavor= - for flavor in $_flavors; do - local _builddir="$srcdir"/build-$flavor - mkdir -p "$_builddir" - echo "-$pkgrel-$flavor" > "$_builddir"/localversion-alpine - _genconfig $flavor - make -C "$builddir" \ - O="$_builddir" \ - ARCH="$_carch" \ - olddefconfig - _verifyconfig $flavor - done -} - -build() { - unset LDFLAGS - for i in $_flavors; do - cd "$srcdir"/build-$i - local _kver=$(make kernelversion) - if [ "$_kver" != "$pkgver" ]; then - error "Version in Makefile ($_kver) does not correspond with pkgver ($pkgver)" - return 1 - fi - - make ARCH="$_carch" CC="${CC:-gcc}" KLZOP="/usr/bin/lzop" \ - KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-Alpine" - done -} - -_package() { - local _flavor="$1" _outdir="$2" - local _builddir="$srcdir"/build-$_flavor - local _abi_release="$(make -C "$_builddir" -s kernelrelease)" - - cd "$srcdir"/build-$_flavor - - mkdir -p "$_outdir"/boot "$_outdir"/lib/modules - - local _install="zinstall dtbs_install" - - cd "$srcdir"/build-$_flavor - # modules_install seems to regenerate a defect Modules.symvers. Work - # around it by backing it up and restore it after modules_install - cp Module.symvers Module.symvers.backup - - local INSTALL_DTBS_PATH="$_outdir"/boot - make -j1 modules_install $_install \ - ARCH="$_carch" \ - INSTALL_MOD_PATH="$_outdir" \ - INSTALL_MOD_STRIP=1 \ - INSTALL_PATH="$_outdir"/boot \ - INSTALL_DTBS_PATH="$INSTALL_DTBS_PATH" - cp Module.symvers.backup Module.symvers - - cp "$_builddir"/arch/arm/boot/zImage "$_outdir"/boot/zImage - rm "$_outdir"/boot/vmlinuz-$_flavor - - rm -f "$_outdir"/lib/modules/$_abi_release/build \ - "$_outdir"/lib/modules/$_abi_release/source - rm -rf "$_outdir"/lib/firmware - - install -D -m644 include/config/kernel.release \ - "$_outdir"/usr/share/kernel/$_flavor/kernel.release - - # install missing firmware - install -vDm644 "$srcdir"/epdc_ES103CS1.fw "$_outdir"/lib/firmware/imx/epdc/epdc_ES103CS1.fw -} - -# main flavor installs in $pkgdir -package() { - _package rm "$pkgdir" -} - -# subflavors install in $subpkgdir -rm2() { - depends="initramfs-generator linux-firmware-brcm linux-firmware-cypress" - _package rm2 "$subpkgdir" -} - -_dev() { - local _flavor=$(echo $subpkgname | sed -E 's/(^linux-|-dev$)//g') - local _builddir="$srcdir"/build-$_flavor - local _abi_release="$(make -C "$_builddir" -s kernelrelease)" - # copy the only the parts that we really need for build 3rd party - # kernel modules and install those as /usr/src/linux-headers, - # simlar to what ubuntu does - # - # this way you dont need to install the 300-400 kernel sources to - # build a tiny kernel module - # - pkgdesc="Headers and script for third party modules for $_flavor kernel" - depends="$_depends_dev" - local dir="$subpkgdir"/usr/src/linux-headers-$_abi_release - - # first we import config, run prepare to set up for building - # external modules, and create the scripts - mkdir -p "$dir" - cp "$_builddir"/.config "$dir"/.config - echo "-$pkgrel-$_flavor" > "$dir"/localversion-alpine - - make -j1 -C "$builddir" \ - O="$dir" \ - ARCH="$_carch" \ - AWK="${AWK:-mawk}" \ - syncconfig prepare modules_prepare scripts - - # remove the stuff that points to real sources. we want 3rd party - # modules to believe this is the soruces - rm "$dir"/Makefile "$dir"/source - - # scripts aren't being crossbuilt from some reason - if cross_compiling; then - for i in $(scanelf -R "$dir" | awk '{print $2}' | sed '1d'); do rm "$i"; done - fi - - # copy the needed stuff from real sources - # - # this is taken from ubuntu kernel build script - # http://kernel.ubuntu.com/git/ubuntu/ubuntu-zesty.git/tree/debian/rules.d/3-binary-indep.mk - cd "$builddir" - find . -path './include/*' -prune \ - -o -path './scripts/*' -prune -o -type f \ - \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ - -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ - -print | cpio -pdm "$dir" - - cp -a scripts include "$dir" - - # shellcheck disable=SC2046 - find $(find arch -name include -type d -print) -type f \ - | cpio -pdm "$dir" - - install -Dm644 "$_builddir"/Module.symvers \ - "$dir"/Module.symvers - - mkdir -p "$subpkgdir"/lib/modules/$_abi_release - ln -sf /usr/src/linux-headers-$_abi_release \ - "$subpkgdir"/lib/modules/$_abi_release/build -} - -sha512sums=" -0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz -ad4bd6f332319aceee7a1c7b71b49439e8217621214b6249c7e20198360d02ea442f31edfc8e1af1b85ed71e6f97c1cb7decf7b0885c9d0293361eef47f218b2 epdc_ES103CS1.fw -f9114f8843317e1d26fbf1831182bc9c8d5907a92af6312c778f32be81414cfddfc3ced7b58375960232031d3295e8770b1a1e7466d2ace99e01bbcccd838543 arm-replace-sun-style-flash-on-section-directive.patch -c5fc4f2f70112cc66a91a2948f7fd4adcd7172a95191b4c862084c7b80093cfa696925aa9a825c41bddac7441ba153eb264b8146e52a4556a73349e6fd10e641 brcmfmac-disable-power-management.patch -27ec1bc1d916dbd2258192c1ed864eacbd2746b49caa554fbaf1124bac478bab0b729e7fabbab8705ae175bb098800f795d415f4de4964da921c1b802560b67a brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch -0f47278c5bfafb939e46224fbf16f9491e3cc560ac128dcf430a1f6cf9064fb1c5bf5db1a3076c35d30c004aec525a7d6616a647564f197bb29c57701c1db982 enable-automatic-partial-refreshing.patch -9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armv7 -9d01054ea7e4ee43836cc536bead5c1707b133790a4ef63e29feb10de4e0b290ba8829980b5340f56bee1e9ec0de66e1e4a55f03c0e6aacbce871a9d60e6ef2e config-changes-rm.armhf -" diff --git a/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch b/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch deleted file mode 100644 index 29fef7f..0000000 --- a/user/linux-rm/arm-replace-sun-style-flash-on-section-directive.patch +++ /dev/null @@ -1,428 +0,0 @@ -From 790756c7e0229dedc83bf058ac69633045b1000e Mon Sep 17 00:00:00 2001 -From: Nick Desaulniers -Date: Mon, 4 Nov 2019 19:31:45 +0100 -Subject: [PATCH] ARM: 8933/1: replace Sun/Solaris style flag on section - directive - -It looks like a section directive was using "Solaris style" to declare -the section flags. Replace this with the GNU style so that Clang's -integrated assembler can assemble this directive. - -The modified instances were identified via: -$ ag \.section | grep # - -Link: https://ftp.gnu.org/old-gnu/Manuals/gas-2.9.1/html_chapter/as_7.html#SEC119 -Link: https://github.com/ClangBuiltLinux/linux/issues/744 -Link: https://bugs.llvm.org/show_bug.cgi?id=43759 -Link: https://reviews.llvm.org/D69296 - -Acked-by: Nicolas Pitre -Reviewed-by: Ard Biesheuvel -Reviewed-by: Stefan Agner -Signed-off-by: Nick Desaulniers -Suggested-by: Fangrui Song -Suggested-by: Jian Cai -Suggested-by: Peter Smith -Signed-off-by: Russell King ---- - arch/arm/boot/bootp/init.S | 2 +- - arch/arm/boot/compressed/big-endian.S | 2 +- - arch/arm/boot/compressed/head.S | 2 +- - arch/arm/boot/compressed/piggy.S | 2 +- - arch/arm/mm/proc-arm1020.S | 2 +- - arch/arm/mm/proc-arm1020e.S | 2 +- - arch/arm/mm/proc-arm1022.S | 2 +- - arch/arm/mm/proc-arm1026.S | 2 +- - arch/arm/mm/proc-arm720.S | 2 +- - arch/arm/mm/proc-arm740.S | 2 +- - arch/arm/mm/proc-arm7tdmi.S | 2 +- - arch/arm/mm/proc-arm920.S | 2 +- - arch/arm/mm/proc-arm922.S | 2 +- - arch/arm/mm/proc-arm925.S | 2 +- - arch/arm/mm/proc-arm926.S | 2 +- - arch/arm/mm/proc-arm940.S | 2 +- - arch/arm/mm/proc-arm946.S | 2 +- - arch/arm/mm/proc-arm9tdmi.S | 2 +- - arch/arm/mm/proc-fa526.S | 2 +- - arch/arm/mm/proc-feroceon.S | 2 +- - arch/arm/mm/proc-mohawk.S | 2 +- - arch/arm/mm/proc-sa110.S | 2 +- - arch/arm/mm/proc-sa1100.S | 2 +- - arch/arm/mm/proc-v6.S | 2 +- - arch/arm/mm/proc-v7.S | 2 +- - arch/arm/mm/proc-v7m.S | 4 ++-- - arch/arm/mm/proc-xsc3.S | 2 +- - arch/arm/mm/proc-xscale.S | 2 +- - 28 files changed, 29 insertions(+), 29 deletions(-) - -diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S -index 5c476bd2b4ce9c..b562da2f704088 100644 ---- a/arch/arm/boot/bootp/init.S -+++ b/arch/arm/boot/bootp/init.S -@@ -13,7 +13,7 @@ - * size immediately following the kernel, we could build this into - * a binary blob, and concatenate the zImage using the cat command. - */ -- .section .start,#alloc,#execinstr -+ .section .start, "ax" - .type _start, #function - .globl _start - -diff --git a/arch/arm/boot/compressed/big-endian.S b/arch/arm/boot/compressed/big-endian.S -index 88e2a88d324b25..0e092c36da2f27 100644 ---- a/arch/arm/boot/compressed/big-endian.S -+++ b/arch/arm/boot/compressed/big-endian.S -@@ -6,7 +6,7 @@ - * Author: Nicolas Pitre - */ - -- .section ".start", #alloc, #execinstr -+ .section ".start", "ax" - - mrc p15, 0, r0, c1, c0, 0 @ read control reg - orr r0, r0, #(1 << 7) @ enable big endian mode -diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S -index ae70754d003daa..ead21e5f2b8032 100644 ---- a/arch/arm/boot/compressed/head.S -+++ b/arch/arm/boot/compressed/head.S -@@ -140,7 +140,7 @@ - #endif - .endm - -- .section ".start", #alloc, #execinstr -+ .section ".start", "ax" - /* - * sort out different calling conventions - */ -diff --git a/arch/arm/boot/compressed/piggy.S b/arch/arm/boot/compressed/piggy.S -index 0284f84dcf3804..27577644ee721a 100644 ---- a/arch/arm/boot/compressed/piggy.S -+++ b/arch/arm/boot/compressed/piggy.S -@@ -1,5 +1,5 @@ - /* SPDX-License-Identifier: GPL-2.0 */ -- .section .piggydata,#alloc -+ .section .piggydata, "a" - .globl input_data - input_data: - .incbin "arch/arm/boot/compressed/piggy_data" -diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S -index 4fa5371bc6624c..2785da387c9104 100644 ---- a/arch/arm/mm/proc-arm1020.S -+++ b/arch/arm/mm/proc-arm1020.S -@@ -491,7 +491,7 @@ cpu_arm1020_name: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm1020_proc_info,#object - __arm1020_proc_info: -diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S -index 5d8a8339e09a4e..e9ea237ed78525 100644 ---- a/arch/arm/mm/proc-arm1020e.S -+++ b/arch/arm/mm/proc-arm1020e.S -@@ -449,7 +449,7 @@ arm1020e_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm1020e_proc_info,#object - __arm1020e_proc_info: -diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S -index b3dd95c345e482..920c279e7879d8 100644 ---- a/arch/arm/mm/proc-arm1022.S -+++ b/arch/arm/mm/proc-arm1022.S -@@ -443,7 +443,7 @@ arm1022_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm1022_proc_info,#object - __arm1022_proc_info: -diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S -index e927187157d7d5..0bdf25a95b107d 100644 ---- a/arch/arm/mm/proc-arm1026.S -+++ b/arch/arm/mm/proc-arm1026.S -@@ -437,7 +437,7 @@ arm1026_crval: - string cpu_arm1026_name, "ARM1026EJ-S" - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm1026_proc_info,#object - __arm1026_proc_info: -diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S -index c99d24363f32ee..39361e196d61b8 100644 ---- a/arch/arm/mm/proc-arm720.S -+++ b/arch/arm/mm/proc-arm720.S -@@ -172,7 +172,7 @@ arm720_crval: - * See for a definition of this structure. - */ - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req - .type __\name\()_proc_info,#object -diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S -index 1b4a3838393fbd..1a94bbf6e53fc2 100644 ---- a/arch/arm/mm/proc-arm740.S -+++ b/arch/arm/mm/proc-arm740.S -@@ -128,7 +128,7 @@ __arm740_setup: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - .type __arm740_proc_info,#object - __arm740_proc_info: - .long 0x41807400 -diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S -index 17a4687065c7f9..52b66cf0259e3f 100644 ---- a/arch/arm/mm/proc-arm7tdmi.S -+++ b/arch/arm/mm/proc-arm7tdmi.S -@@ -72,7 +72,7 @@ __arm7tdmi_setup: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \ - extra_hwcaps=0 -diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S -index 298c76b47749f9..31ac8acc34dc55 100644 ---- a/arch/arm/mm/proc-arm920.S -+++ b/arch/arm/mm/proc-arm920.S -@@ -434,7 +434,7 @@ arm920_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm920_proc_info,#object - __arm920_proc_info: -diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S -index 824be3a0bc2382..ca2c7ca8af2146 100644 ---- a/arch/arm/mm/proc-arm922.S -+++ b/arch/arm/mm/proc-arm922.S -@@ -412,7 +412,7 @@ arm922_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm922_proc_info,#object - __arm922_proc_info: -diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S -index d40cff8f102c2b..a381a0c9f1092e 100644 ---- a/arch/arm/mm/proc-arm925.S -+++ b/arch/arm/mm/proc-arm925.S -@@ -477,7 +477,7 @@ arm925_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache - .type __\name\()_proc_info,#object -diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S -index 4ef89e1d11276e..1ba253c2bce190 100644 ---- a/arch/arm/mm/proc-arm926.S -+++ b/arch/arm/mm/proc-arm926.S -@@ -460,7 +460,7 @@ arm926_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm926_proc_info,#object - __arm926_proc_info: -diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S -index 1c26d991386d7d..4b8a00220cc976 100644 ---- a/arch/arm/mm/proc-arm940.S -+++ b/arch/arm/mm/proc-arm940.S -@@ -340,7 +340,7 @@ __arm940_setup: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __arm940_proc_info,#object - __arm940_proc_info: -diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S -index 2dc1c75a4fd4a8..555becf9c758d1 100644 ---- a/arch/arm/mm/proc-arm946.S -+++ b/arch/arm/mm/proc-arm946.S -@@ -395,7 +395,7 @@ __arm946_setup: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - .type __arm946_proc_info,#object - __arm946_proc_info: - .long 0x41009460 -diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S -index 913c06e590af51..ef517530130b03 100644 ---- a/arch/arm/mm/proc-arm9tdmi.S -+++ b/arch/arm/mm/proc-arm9tdmi.S -@@ -66,7 +66,7 @@ __arm9tdmi_setup: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req - .type __\name\()_proc_info, #object -diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S -index 8120b6f4dbb83e..dddf833fe00078 100644 ---- a/arch/arm/mm/proc-fa526.S -+++ b/arch/arm/mm/proc-fa526.S -@@ -185,7 +185,7 @@ fa526_cr1_set: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __fa526_proc_info,#object - __fa526_proc_info: -diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S -index bb6dc34d42a374..b12b76bc8d30ca 100644 ---- a/arch/arm/mm/proc-feroceon.S -+++ b/arch/arm/mm/proc-feroceon.S -@@ -571,7 +571,7 @@ feroceon_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req - .type __\name\()_proc_info,#object -diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S -index f083085788857b..d47d6c5cee63a6 100644 ---- a/arch/arm/mm/proc-mohawk.S -+++ b/arch/arm/mm/proc-mohawk.S -@@ -416,7 +416,7 @@ mohawk_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __88sv331x_proc_info,#object - __88sv331x_proc_info: -diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S -index d5bc5d70256399..baba503ba81669 100644 ---- a/arch/arm/mm/proc-sa110.S -+++ b/arch/arm/mm/proc-sa110.S -@@ -196,7 +196,7 @@ sa110_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .type __sa110_proc_info,#object - __sa110_proc_info: -diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S -index be7b611c76c76a..75ebacc8e4e5cb 100644 ---- a/arch/arm/mm/proc-sa1100.S -+++ b/arch/arm/mm/proc-sa1100.S -@@ -239,7 +239,7 @@ sa1100_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req - .type __\name\()_proc_info,#object -diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S -index c1c85eb3484f31..1dd0d5ca27da8f 100644 ---- a/arch/arm/mm/proc-v6.S -+++ b/arch/arm/mm/proc-v6.S -@@ -261,7 +261,7 @@ v6_crval: - string cpu_elf_name, "v6" - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - /* - * Match any ARMv6 processor core. -diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S -index c4e8006a1a8cdd..48e0ef6f0dccfe 100644 ---- a/arch/arm/mm/proc-v7.S -+++ b/arch/arm/mm/proc-v7.S -@@ -644,7 +644,7 @@ __v7_setup_stack: - string cpu_elf_name, "v7" - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - /* - * Standard v7 proc info content -diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S -index 1a49d503eafc80..84459c1d31b87f 100644 ---- a/arch/arm/mm/proc-v7m.S -+++ b/arch/arm/mm/proc-v7m.S -@@ -93,7 +93,7 @@ ENTRY(cpu_cm7_proc_fin) - ret lr - ENDPROC(cpu_cm7_proc_fin) - -- .section ".init.text", #alloc, #execinstr -+ .section ".init.text", "ax" - - __v7m_cm7_setup: - mov r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP) -@@ -177,7 +177,7 @@ ENDPROC(__v7m_setup) - string cpu_elf_name "v7m" - string cpu_v7m_name "ARMv7-M" - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0, proc_fns = v7m_processor_functions - .long 0 /* proc_info_list.__cpu_mm_mmu_flags */ -diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S -index 1ac0fbbe9f127f..42eaecc43cfeff 100644 ---- a/arch/arm/mm/proc-xsc3.S -+++ b/arch/arm/mm/proc-xsc3.S -@@ -496,7 +496,7 @@ xsc3_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req - .type __\name\()_proc_info,#object -diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S -index bdb2b7749b0393..18ac5a1f892258 100644 ---- a/arch/arm/mm/proc-xscale.S -+++ b/arch/arm/mm/proc-xscale.S -@@ -610,7 +610,7 @@ xscale_crval: - - .align - -- .section ".proc.info.init", #alloc -+ .section ".proc.info.init", "a" - - .macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache - .type __\name\()_proc_info,#object diff --git a/user/linux-rm/brcmfmac-disable-power-management.patch b/user/linux-rm/brcmfmac-disable-power-management.patch deleted file mode 100644 index 2d48b3f..0000000 --- a/user/linux-rm/brcmfmac-disable-power-management.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c.orig b/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -index f507d82..6c06044 100644 ---- a/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c.orig -+++ b/./drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -2743,6 +2743,8 @@ brcmf_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *ndev, - * preference in cfg struct to apply this to - * FW later while initializing the dongle - */ -+ pr_info("power management disabled\n"); -+ enabled = false; - cfg->pwr_save = enabled; - if (!check_vif_up(ifp->vif)) { - diff --git a/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch b/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch deleted file mode 100644 index 713c034..0000000 --- a/user/linux-rm/brcmfmac-fix-suspend-resume-when-power-is-cut-off.patch +++ /dev/null @@ -1,221 +0,0 @@ -From patchwork Wed Sep 25 13:44:57 2019 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: Adrian Ratiu -X-Patchwork-Id: 11160709 -X-Patchwork-Delegate: kvalo@adurom.com -Return-Path: -Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org - [172.30.200.123]) - by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E6264924 - for ; - Wed, 25 Sep 2019 13:45:07 +0000 (UTC) -Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) - by mail.kernel.org (Postfix) with ESMTP id CEE8421D7E - for ; - Wed, 25 Sep 2019 13:45:07 +0000 (UTC) -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S2406776AbfIYNo5 (ORCPT - ); - Wed, 25 Sep 2019 09:44:57 -0400 -Received: from bhuna.collabora.co.uk ([46.235.227.227]:57998 "EHLO - bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S2406646AbfIYNo5 (ORCPT - ); - Wed, 25 Sep 2019 09:44:57 -0400 -Received: from [127.0.0.1] (localhost [127.0.0.1]) - (Authenticated sender: aratiu) - with ESMTPSA id 34818280400 -From: Adrian Ratiu -To: brcm80211-dev-list.pdl@broadcom.com -Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, - linux-kernel@vger.kernel.org, - Martyn Welch -Subject: [PATCH 1/2] brcmfmac: don't WARN when there are no requests -Date: Wed, 25 Sep 2019 16:44:57 +0300 -Message-Id: <20190925134458.1413790-1-adrian.ratiu@collabora.com> -X-Mailer: git-send-email 2.23.0 -MIME-Version: 1.0 -Sender: linux-wireless-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: linux-wireless@vger.kernel.org - -When n_reqs == 0 there is nothing to do so it doesn't make sense to -search for requests and issue a warning because none is found. - -Signed-off-by: Martyn Welch -Signed-off-by: Adrian Ratiu ---- - drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c -index 14e530601ef3..fabfbb0b40b0 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pno.c -@@ -57,6 +57,10 @@ static int brcmf_pno_remove_request(struct brcmf_pno_info *pi, u64 reqid) - - mutex_lock(&pi->req_lock); - -+ /* Nothing to do if we have no requests */ -+ if (pi->n_reqs == 0) -+ goto done; -+ - /* find request */ - for (i = 0; i < pi->n_reqs; i++) { - if (pi->reqs[i]->reqid == reqid) - -From patchwork Wed Sep 25 13:44:58 2019 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: Adrian Ratiu -X-Patchwork-Id: 11160707 -X-Patchwork-Delegate: kvalo@adurom.com -Return-Path: -Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org - [172.30.200.123]) - by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 47A3C14DB - for ; - Wed, 25 Sep 2019 13:45:03 +0000 (UTC) -Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) - by mail.kernel.org (Postfix) with ESMTP id 2F3CC21D7F - for ; - Wed, 25 Sep 2019 13:45:03 +0000 (UTC) -Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand - id S2406832AbfIYNo6 (ORCPT - ); - Wed, 25 Sep 2019 09:44:58 -0400 -Received: from bhuna.collabora.co.uk ([46.235.227.227]:58004 "EHLO - bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S2406650AbfIYNo5 (ORCPT - ); - Wed, 25 Sep 2019 09:44:57 -0400 -Received: from [127.0.0.1] (localhost [127.0.0.1]) - (Authenticated sender: aratiu) - with ESMTPSA id 8EFA628BCCF -From: Adrian Ratiu -To: brcm80211-dev-list.pdl@broadcom.com -Cc: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, - linux-kernel@vger.kernel.org, - Gustavo Padovan -Subject: [PATCH 2/2] brcmfmac: fix suspend/resume when power is cut off -Date: Wed, 25 Sep 2019 16:44:58 +0300 -Message-Id: <20190925134458.1413790-2-adrian.ratiu@collabora.com> -X-Mailer: git-send-email 2.23.0 -In-Reply-To: <20190925134458.1413790-1-adrian.ratiu@collabora.com> -References: <20190925134458.1413790-1-adrian.ratiu@collabora.com> -MIME-Version: 1.0 -Sender: linux-wireless-owner@vger.kernel.org -Precedence: bulk -List-ID: -X-Mailing-List: linux-wireless@vger.kernel.org - -brcmfmac assumed the wifi device always remains powered on and thus -hardcoded the MMC_PM_KEEP_POWER flag expecting the wifi device to -remain on even during suspend/resume cycles. - -This is not always the case, some appliances cut power to everything -connected via SDIO for efficiency reasons and this leads to wifi not -being usable after coming out of suspend because the device was not -correctly reinitialized. - -So we check for the keep_power capability and if it's not present then -we remove the device and probe it again during resume to mirror what's -happening in hardware and ensure correct reinitialization in the case -when MMC_PM_KEEP_POWER is not supported. - -Suggested-by: Gustavo Padovan -Signed-off-by: Adrian Ratiu ---- - .../broadcom/brcm80211/brcmfmac/bcmsdh.c | 53 ++++++++++++++----- - 1 file changed, 39 insertions(+), 14 deletions(-) - -diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c -index 987731b..dac4685 100644 ---- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c -+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c -@@ -1136,7 +1136,8 @@ static int brcmf_ops_sdio_suspend(struct device *dev) - struct sdio_func *func; - struct brcmf_bus *bus_if; - struct brcmf_sdio_dev *sdiodev; -- mmc_pm_flag_t sdio_flags; -+ mmc_pm_flag_t pm_caps, sdio_flags; -+ int ret = 0; - struct brcmf_cfg80211_info *config; - int retry = BRCMF_PM_WAIT_MAXRETRY; - -@@ -1159,19 +1160,33 @@ static int brcmf_ops_sdio_suspend(struct device *dev) - - sdiodev = bus_if->bus_priv.sdio; - -- brcmf_sdiod_freezer_on(sdiodev); -- brcmf_sdio_wd_timer(sdiodev->bus, 0); -- -- sdio_flags = MMC_PM_KEEP_POWER; -- if (sdiodev->wowl_enabled) { -- if (sdiodev->settings->bus.sdio.oob_irq_supported) -- enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); -- else -- sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; -+ pm_caps = sdio_get_host_pm_caps(func); -+ -+ if (pm_caps & MMC_PM_KEEP_POWER) { -+ /* preserve card power during suspend */ -+ brcmf_sdiod_freezer_on(sdiodev); -+ brcmf_sdio_wd_timer(sdiodev->bus, 0); -+ -+ sdio_flags = MMC_PM_KEEP_POWER; -+ if (sdiodev->wowl_enabled) { -+ if (sdiodev->settings->bus.sdio.oob_irq_supported) -+ enable_irq_wake(sdiodev->settings->bus.sdio.oob_irq_nr); -+ else -+ sdio_flags |= MMC_PM_WAKE_SDIO_IRQ; -+ } -+ -+ if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) -+ brcmf_err("Failed to set pm_flags %x\n", sdio_flags); -+ -+ } else { -+ /* power will be cut so remove device, probe again in resume */ -+ brcmf_sdiod_intr_unregister(sdiodev); -+ ret = brcmf_sdiod_remove(sdiodev); -+ if (ret) -+ brcmf_err("Failed to remove device on suspend\n"); - } -- if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags)) -- brcmf_err("Failed to set pm_flags %x\n", sdio_flags); -- return 0; -+ -+ return ret; - } - - static int brcmf_ops_sdio_resume(struct device *dev) -@@ -1179,13 +1194,23 @@ static int brcmf_ops_sdio_resume(struct device *dev) - struct brcmf_bus *bus_if = dev_get_drvdata(dev); - struct brcmf_sdio_dev *sdiodev = bus_if->bus_priv.sdio; - struct sdio_func *func = container_of(dev, struct sdio_func, dev); -+ mmc_pm_flag_t pm_caps = sdio_get_host_pm_caps(func); -+ int ret = 0; - - brcmf_dbg(SDIO, "Enter: F%d\n", func->num); - if (func->num != 2) - return 0; - -- brcmf_sdiod_freezer_off(sdiodev); -- return 0; -+ if (!(pm_caps & MMC_PM_KEEP_POWER)) { -+ /* bus was powered off and device removed, probe again */ -+ ret = brcmf_sdiod_probe(sdiodev); -+ if (ret) -+ brcmf_err("Failed to probe device on resume\n"); -+ } else { -+ brcmf_sdiod_freezer_off(sdiodev); -+ } -+ -+ return ret; - } - - static const struct dev_pm_ops brcmf_sdio_pm_ops = { diff --git a/user/linux-rm/config-changes-rm.armhf b/user/linux-rm/config-changes-rm.armhf deleted file mode 120000 index 6c4e6a5..0000000 --- a/user/linux-rm/config-changes-rm.armhf +++ /dev/null @@ -1 +0,0 @@ -config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/config-changes-rm.armv7 b/user/linux-rm/config-changes-rm.armv7 deleted file mode 100644 index fa272a1..0000000 --- a/user/linux-rm/config-changes-rm.armv7 +++ /dev/null @@ -1,62 +0,0 @@ -# format is config=command -# where command can be one of: -# y,n,m,", -# from remarkable-microsd project -# see http://www.davisr.me/projects/remarkable-microsd/ -CONFIG_RTL_CARDS=y -CONFIG_BATTERY_BQ27XXX=y -CONFIG_BATTERY_BQ27XXX_I2C=y -CONFIG_CRYPTO_AEAD=y -CONFIG_CRYPTO_GF128MUL=y -CONFIG_CRYPTO_NULL=y -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_CTR=y -CONFIG_CRYPTO_GHASH=y -# serial through USB -CONFIG_USB_ACM=y -CONFIG_USB_F_ACM=y -CONFIG_USB_U_SERIAL=y -CONFIG_USB_CDC_COMPOSITE=y -# console through serial -CONFIG_USB_G_SERIAL=y -CONFIG_U_SERIAL_CONSOLE=y -# wifi module doesn't load early enough for lack of initramfs -CONFIG_CFG80211=m -CONFIG_MAC80211=m -CONFIG_BRCMFMAC=m -CONFIG_BRCMUTIL=m -# iwd requires these modules -CONFIG_CRYPTO_AES=y -CONFIG_CRYPTO_USER_API_HASH=y -CONFIG_CRYPTO_USER_API_SKCIPHER=y -CONFIG_KEY_DH_OPERATIONS=y -CONFIG_CRYPTO_ECB=y -CONFIG_CRYPTO_MD4=y -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_CMAC=y -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_SHA512=y -CONFIG_CRYPTO_SHA1=y -# other -LOCALVERSION="" -CONFIG_DEFAULT_HOSTNAME="remarkable" -CONFIG_MODULE_UNLOAD=y -# f2fs support -CONFIG_F2FS_FS=y -CONFIG_F2FS_STAT_FS=y -CONFIG_F2FS_FS_XATTR=y -CONFIG_F2FS_FS_POSIX_ACL=y -CONFIG_F2FS_FS_SECURITY=y -CONFIG_F2FS_CHECK_FS=n -CONFIG_F2FS_IO_TRACE=n -CONFIG_F2FS_FAULT_INJECTION=n -CONFIG_F2FS_FS_COMPRESSION=y -CONFIG_F2FS_FS_LZO=y -CONFIG_F2FS_FS_LZ4=y -CONFIG_F2FS_FS_ZSTD=y -CONFIG_F2FS_FS_LZORLE=y -# disabled as breaks build -CONFIG_MXC_GPU_VIV=n diff --git a/user/linux-rm/config-changes-rm2.armhf b/user/linux-rm/config-changes-rm2.armhf deleted file mode 120000 index 6c4e6a5..0000000 --- a/user/linux-rm/config-changes-rm2.armhf +++ /dev/null @@ -1 +0,0 @@ -config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/config-changes-rm2.armv7 b/user/linux-rm/config-changes-rm2.armv7 deleted file mode 120000 index 6c4e6a5..0000000 --- a/user/linux-rm/config-changes-rm2.armv7 +++ /dev/null @@ -1 +0,0 @@ -config-changes-rm.armv7 \ No newline at end of file diff --git a/user/linux-rm/enable-automatic-partial-refreshing.patch b/user/linux-rm/enable-automatic-partial-refreshing.patch deleted file mode 100644 index e78bc13..0000000 --- a/user/linux-rm/enable-automatic-partial-refreshing.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/drivers/video/fbdev/mxc/mxc_epdc_fb.c.orig b/drivers/video/fbdev/mxc/mxc_epdc_fb.c -index 5c7d87d..5c31379 100644 ---- a/drivers/video/fbdev/mxc/mxc_epdc_fb.c.orig -+++ b/drivers/video/fbdev/mxc/mxc_epdc_fb.c -@@ -3489,10 +3489,10 @@ static void mxc_epdc_fb_update_pages(struct mxc_epdc_fb_data *fb_data, - update.update_region.top = y1; - update.update_region.height = y2 - y1; - update.waveform_mode = WAVEFORM_MODE_AUTO; -- update.update_mode = UPDATE_MODE_FULL; -+ update.update_mode = UPDATE_MODE_PARTIAL; - update.update_marker = 0; - update.temp = TEMP_USE_AMBIENT; -- update.flags = 0; -+ update.flags = EPDC_FLAG_USE_REGAL; - - mxc_epdc_fb_send_update(&update, &fb_data->info); - } -@@ -3687,7 +3687,7 @@ static struct fb_ops mxc_epdc_fb_ops = { - }; - - static struct fb_deferred_io mxc_epdc_fb_defio = { -- .delay = HZ, -+ .delay = HZ / 30, - .deferred_io = mxc_epdc_fb_deferred_io, - }; - diff --git a/user/linux-rm/enable-sdhc1.patch b/user/linux-rm/enable-sdhc1.patch deleted file mode 100644 index 31c2b72..0000000 --- a/user/linux-rm/enable-sdhc1.patch +++ /dev/null @@ -1,790 +0,0 @@ -diff --git a/arch/arm/boot/dts/zero-gravitas.dts b/arch/arm/boot/dts/zero-gravitas.dts -index f51edfdedf8a..947f43c3434c 100644 ---- a/arch/arm/boot/dts/zero-gravitas.dts -+++ b/arch/arm/boot/dts/zero-gravitas.dts -@@ -1,6 +1,783 @@ --#include "zero-gravitas-factory.dts" -+/* -+ * Copyright (C) 2013 Freescale Semiconductor, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ */ -+ -+/dts-v1/; -+ -+#include -+#include -+#include "imx6sl.dtsi" -+#include "zero-gravitas-padctl.h" -+ -+/ { -+ model = "reMarkable 1.0"; -+ compatible = "remarkable,zero-gravitas", "fsl,imx6sl"; -+ -+ memory { -+ reg = <0x80000000 0x20000000>; -+ }; -+ -+ wifi_pwrseq: wifi_pwrseq { -+ compatible = "mmc-pwrseq-simple"; -+ reset-gpios = <&gpio3 30 GPIO_ACTIVE_LOW>, -+ <&gpio4 0 GPIO_ACTIVE_LOW>; -+ clocks = <&clks IMX6SL_CLK_OSC>; -+ clock-names = "ext_clock"; -+ }; -+ -+ regulators { -+ compatible = "simple-bus"; -+ #address-cells = <1>; -+ #size-cells = <0>; -+ -+ reg_usb_otg1_vbus: regulator@0 { -+ compatible = "regulator-fixed"; -+ reg = <0>; -+ regulator-name = "usb_otg1_vbus"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ gpio = <&gpio4 15 0>; -+ enable-active-high; -+ vin-supply = <&swbst_reg>; -+ }; -+ -+ charger_regulator: regulator@1 { -+ reg = <1>; -+ compatible = "regulator-fixed"; -+ regulator-name = "charger-regulator"; -+ regulator-min-microamp = <5000000>; -+ regulator-max-microamp = <5000000>; -+ gpios = <&gpio3 27 GPIO_ACTIVE_LOW>; -+ enable-active-high; /* Don't invert twice */ -+ regulator-boot-on; -+ status = "disabled"; -+ }; -+ }; -+ -+ wacom_reset: wacom-reset { -+ compatible = "gpio-reset"; -+ reset-gpios = <&gpio4 4 1>; -+ reset-delay-us = <100000>; -+ #reset-cells = <0>; -+ }; -+ -+ gpio-keys { -+ compatible = "gpio-keys"; -+ pinctrl-0 = <&pinctrl_keys>; -+ pinctrl-names = "default"; -+ status = "okay"; -+ -+ button_0 { -+ label = "Power"; -+ gpios = <&gpio4 9 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ gpio-key,wakeup; -+ debounce-interval = <10>; -+ }; -+ -+ button_1 { -+ label = "Left"; -+ gpios = <&gpio3 24 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ gpio-key,wakeup; -+ debounce-interval = <5>; -+ }; -+ -+ button_2 { -+ label = "Home"; -+ gpios = <&gpio3 26 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ gpio-key,wakeup; -+ debounce-interval = <5>; -+ }; -+ button_3 { -+ label = "Right"; -+ gpios = <&gpio3 28 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ gpio-key,wakeup; -+ debounce-interval = <5>; -+ }; -+ button_4 { -+ label = "LowPower"; -+ gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ gpio-key,wakeup; -+ debounce-interval = <100>; -+ }; -+ }; -+ -+ usb_charger: usb_charger { -+ compatible = "gpio-charger"; -+ gpios = <&gpio4 1 0>; -+ status = "disabled"; -+ }; -+}; -+ -+&epdc { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_epdc_0>; -+ VCOM-supply = <&VCOM_reg>; -+ DISPLAY-supply = <&DISPLAY_reg>; -+ TMST-supply = <&TMST_reg>; -+ status = "okay"; -+}; -+ -+&gpc { -+ fsl,ldo-bypass = <1>; -+}; -+ -+®_arm { -+ vin-supply = <&sw1a_reg>; -+ regulator-allow-bypass; -+}; -+ -+®_soc { -+ vin-supply = <&sw1c_reg>; -+ regulator-allow-bypass; -+}; -+ -+®_pu { -+ vin-supply = <&sw1c_reg>; -+ regulator-allow-bypass; -+}; -+ -+&i2c1 { -+ clock-frequency = <100000>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c1>; -+ status = "okay"; -+ -+ battery: bq27441@55 { -+ reg = <0x55>; -+ compatible = "ti,bq27441"; -+ /*power-supplies = <&usb_charger>;*/ -+ /*charger-supply = <&charger_regulator>;*/ -+ /*interrupt-parent = <&gpio3>; -+ interrupts = <31 IRQ_TYPE_LEVEL_HIGH>;*/ -+ ti,resistor-sense = <10>; -+ }; -+ -+ pmic: pfuze100@8 { -+ compatible = "fsl,pfuze100"; -+ reg = <0x08>; -+ -+ regulators { -+ sw1a_reg: sw1ab { -+ regulator-min-microvolt = <300000>; -+ regulator-max-microvolt = <1875000>; -+ regulator-boot-on; -+ regulator-always-on; -+ regulator-ramp-delay = <6250>; -+ }; -+ -+ sw1c_reg: sw1c { -+ regulator-min-microvolt = <300000>; -+ regulator-max-microvolt = <1875000>; -+ regulator-boot-on; -+ regulator-always-on; -+ regulator-ramp-delay = <6250>; -+ }; -+ -+ sw2_reg: sw2 { -+ regulator-min-microvolt = <400000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ sw3a_reg: sw3a { -+ regulator-min-microvolt = <400000>; -+ regulator-max-microvolt = <1975000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ sw3b_reg: sw3b { -+ regulator-min-microvolt = <400000>; -+ regulator-max-microvolt = <1975000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ sw4_reg: sw4 { -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <3300000>; -+ }; -+ -+ swbst_reg: swbst { -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5150000>; -+ }; -+ -+ snvs_reg: vsnvs { -+ regulator-min-microvolt = <1000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ vref_reg: vrefddr { -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ vgen1_reg: vgen1 { -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <1550000>; -+ regulator-always-on; -+ }; -+ -+ vgen2_reg: vgen2 { -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <1550000>; -+ }; -+ -+ vgen3_reg: vgen3 { -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ }; -+ -+ vgen4_reg: vgen4 { -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-always-on; -+ }; -+ -+ vgen5_reg: vgen5 { -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-always-on; -+ }; -+ -+ vgen6_reg: vgen6 { -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-always-on; -+ }; -+ }; -+ }; -+ -+ max17135@48 { -+ compatible = "maxim,max17135"; -+ reg = <0x48>; -+ pass_num = <2>; -+ gvee_pwrup = <0>; /* ms */ -+ vneg_pwrup = <3>; -+ vpos_pwrup = <6>; -+ gvdd_pwrup = <3>; -+ -+ gvdd_pwrdn = <1>; -+ vpos_pwrdn = <2>; -+ vneg_pwrdn = <6>; -+ gvee_pwrdn = <50>; -+ /* These are only for passnum 1, we use i2c */ -+ gpio_pmic_pwrgood = <&gpio2 13 0>; -+ gpio_pmic_vcom_ctrl = <&gpio2 3 0>; -+ gpio_pmic_wakeup = <&gpio2 14 0>; -+ gpio_pmic_v3p3 = <&gpio2 7 0>; -+ gpio_pmic_intr = <&gpio2 12 0>; -+ -+ regulators { -+ DISPLAY_reg: DISPLAY { -+ regulator-name = "DISPLAY"; -+ }; -+ -+ GVDD_reg: GVDD { -+ /* 20v */ -+ regulator-name = "GVDD"; -+ }; -+ -+ GVEE_reg: GVEE { -+ /* -22v */ -+ regulator-name = "GVEE"; -+ }; -+ -+ HVINN_reg: HVINN { -+ /* -22v */ -+ regulator-name = "HVINN"; -+ }; -+ -+ HVINP_reg: HVINP { -+ /* 20v */ -+ regulator-name = "HVINP"; -+ }; -+ -+ VCOM_reg: VCOM { -+ regulator-name = "VCOM"; -+ /* Real max value: -500000 */ -+ regulator-max-microvolt = <4325000>; -+ /* Real min value: -4325000 */ -+ regulator-min-microvolt = <500000>; -+ }; -+ -+ VNEG_reg: VNEG { -+ /* -15v */ -+ regulator-name = "VNEG"; -+ }; -+ -+ VPOS_reg: VPOS { -+ /* 15v */ -+ regulator-name = "VPOS"; -+ }; -+ -+ TMST_reg: TMST { -+ regulator-name = "TMST"; -+ /* 2's-compliment, -127 */ -+ regulator-min-microvolt = <0xffffff81>; -+ /* 2's-compliment, +127 */ -+ regulator-max-microvolt = <0x0000007f>; -+ }; -+ }; -+ }; -+ -+}; -+ -+&i2c2 { -+ clock-frequency = <100000>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c2>; -+ status = "okay"; -+ -+ digitizer: wacom-i2c@9 { -+ compatible = "wacom,wacom-i2c"; -+ reg = <0x09>; -+ interrupt-parent = <&gpio2>; -+ interrupts = <10 2>; -+ resets = <&wacom_reset>; -+ }; -+}; -+ -+&i2c3 { -+ clock-frequency = <100000>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_i2c3>; -+ status = "okay"; -+ -+ tsc@24 { -+ compatible = "cy,cyttsp5_i2c_adapter"; -+ reg = <0x24>; -+ interrupt-parent = <&gpio4>; -+ interrupts = <3 2>; -+ cy,adapter_id = "cyttsp5_i2c_adapter"; -+ status = "okay"; -+ -+ cy,core { -+ cy,name = "cyttsp5_core"; -+ -+ cy,irq_gpio = <&gpio4 3 0>; -+ cy,rst_gpio = <&gpio4 5 0>; -+ cy,hid_desc_register = <1>; -+ /* CY_CORE_FLAG_RESTORE_PARAMETERS */ -+ cy,flags = <4>; -+ /* CY_CORE_EWG_NONE */ -+ cy,easy_wakeup_gesture = <0>; -+ cy,btn_keys = <172 /* KEY_HOMEPAGE */ -+ /* previously was KEY_HOME, new Android versions use KEY_HOMEPAGE */ -+ 139 /* KEY_MENU */ -+ 158 /* KEY_BACK */ -+ 217 /* KEY_SEARCH */ -+ 114 /* KEY_VOLUMEDOWN */ -+ 115 /* KEY_VOLUMEUP */ -+ 212 /* KEY_CAMERA */ -+ 116>; /* KEY_POWER */ -+ cy,btn_keys-tag = <0>; -+ -+ cy,mt { -+ cy,name = "cyttsp5_mt"; -+ -+ cy,inp_dev_name = "cyttsp5_mt"; -+ cy,flags = <0>; -+ cy,abs = -+ /* ABS_MT_POSITION_X, CY_ABS_MIN_X, CY_ABS_MAX_X, 0, 0 */ -+ <0x35 0 880 0 0 -+ /* ABS_MT_POSITION_Y, CY_ABS_MIN_Y, CY_ABS_MAX_Y, 0, 0 */ -+ 0x36 0 1280 0 0 -+ /* ABS_MT_PRESSURE, CY_ABS_MIN_P, CY_ABS_MAX_P, 0, 0 */ -+ 0x3a 0 255 0 0 -+ /* CY_IGNORE_VALUE, CY_ABS_MIN_W, CY_ABS_MAX_W, 0, 0 */ -+ 0xffff 0 255 0 0 -+ /* ABS_MT_TRACKING_ID, CY_ABS_MIN_T, CY_ABS_MAX_T, 0, 0 */ -+ 0x39 0 15 0 0 -+ /* ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0 */ -+ 0x30 0 255 0 0 -+ /* ABS_MT_TOUCH_MINOR, 0, 255, 0, 0 */ -+ 0x31 0 255 0 0 -+ /* ABS_MT_ORIENTATION, -127, 127, 0, 0 */ -+ 0x34 0xffffff81 127 0 0 -+ /* ABS_MT_TOOL_TYPE, 0, MT_TOOL_MAX, 0, 0 */ -+ 0x37 0 1 0 0 -+ /* ABS_DISTANCE, 0, 255, 0, 0 */ -+ 0x19 0 255 0 0>; -+ -+ cy,vkeys_x = <720>; -+ cy,vkeys_y = <1280>; -+ -+ cy,virtual_keys = /* KeyCode CenterX CenterY Width Height */ -+ /* KEY_BACK */ -+ <158 1360 90 160 180 -+ /* KEY_MENU */ -+ 139 1360 270 160 180 -+ /* KEY_HOMEPAGE */ -+ 172 1360 450 160 180 -+ /* KEY SEARCH */ -+ 217 1360 630 160 180>; -+ }; -+ }; -+ }; -+}; -+ -+&iomuxc { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_hog>; -+ -+ zero-gravitas { -+ pinctrl_hog: hoggrp { -+ fsl,pins = < -+ /* MAX17135 pwrgood */ -+ MX6SL_PAD_EPDC_PWRSTAT__GPIO2_IO13 PAD_CTL_NONE -+ /* MAX17135 vcom ctrl */ -+ MX6SL_PAD_EPDC_VCOM0__GPIO2_IO03 PAD_CTL_NONE -+ /* MAX17135 wakeup */ -+ MX6SL_PAD_EPDC_PWRWAKEUP__GPIO2_IO14 PAD_CTL_NONE -+ /* MAX17135 v3p3 */ -+ MX6SL_PAD_EPDC_PWRCTRL0__GPIO2_IO07 PAD_CTL_NONE -+ /* MAX17135 intr */ -+ MX6SL_PAD_EPDC_PWRINT__GPIO2_IO12 PAD_CTL_NONE -+ -+ /* BQ27441 low power */ -+ MX6SL_PAD_KEY_ROW3__GPIO3_IO31 0x17000 -+ -+ /* Wacom interrupt */ -+ MX6SL_PAD_EPDC_PWRCTRL3__GPIO2_IO10 0x17000 -+ /* Wacom reset */ -+ MX6SL_PAD_KEY_COL6__GPIO4_IO04 0x110b0 -+ -+ /* CYTTSP interrupt */ -+ MX6SL_PAD_KEY_ROW5__GPIO4_IO03 0x17000 -+ /* CYTTSP reset */ -+ MX6SL_PAD_KEY_ROW6__GPIO4_IO05 0x110b0 -+ -+ /* USB OTG1 voltage control */ -+ /*MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 0x17000*/ -+ /*MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 0x000b0*/ -+ MX6SL_PAD_ECSPI2_SS0__GPIO4_IO15 PAD_CTL_NONE -+ /*MX6SL_PAD_ECSPI2_SS0__USB_OTG1_PWR 0x17000*/ -+ /* USB OTG1 over current detection */ -+ MX6SL_PAD_ECSPI2_MISO__USB_OTG1_OC 0x1b0b0 -+ -+ /* Charger control */ -+ MX6SL_PAD_KEY_ROW1__GPIO3_IO27 0x110b0 -+ /* Charger status */ -+ MX6SL_PAD_KEY_ROW4__GPIO4_IO01 PAD_CTL_NONE -+ -+ /* USDHC1 card detect */ -+ MX6SL_PAD_KEY_ROW7__GPIO4_IO07 0x17059 -+ -+ /* CHIP_WAKE_HOST */ -+ MX6SL_PAD_KEY_COL5__GPIO4_IO02 PAD_CTL_NONE -+ /* POWER_WIFI: WiFi external power control */ -+ MX6SL_PAD_KEY_COL3__GPIO3_IO30 PAD_CTL_NONE -+ /* WL_DIS: WiFi internal power control */ -+ MX6SL_PAD_KEY_COL4__GPIO4_IO00 PAD_CTL_NONE -+ -+ /* 32Khz clock from i.MX6 to WiFi for power saving */ -+ MX6SL_PAD_REF_CLK_32K__XTALOSC_REF_CLK_32K 0x1b0b0 -+ >; -+ }; -+ -+ pinctrl_epdc_0: epdcgrp-0 { -+ fsl,pins = < -+ MX6SL_PAD_EPDC_D0__EPDC_DATA00 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D1__EPDC_DATA01 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D2__EPDC_DATA02 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D3__EPDC_DATA03 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D4__EPDC_DATA04 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D5__EPDC_DATA05 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D6__EPDC_DATA06 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D7__EPDC_DATA07 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D8__EPDC_DATA08 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D9__EPDC_DATA09 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D10__EPDC_DATA10 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D11__EPDC_DATA11 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D12__EPDC_DATA12 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D13__EPDC_DATA13 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D14__EPDC_DATA14 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_D15__EPDC_DATA15 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_GDCLK__EPDC_GDCLK PAD_CTL_NONE -+ MX6SL_PAD_EPDC_GDOE__EPDC_GDOE PAD_CTL_NONE -+ MX6SL_PAD_EPDC_GDSP__EPDC_GDSP PAD_CTL_NONE -+ MX6SL_PAD_EPDC_SDCE0__EPDC_SDCE0 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_SDCLK__EPDC_SDCLK_P PAD_CTL_NONE -+ MX6SL_PAD_EPDC_SDLE__EPDC_SDLE PAD_CTL_NONE -+ MX6SL_PAD_EPDC_SDOE__EPDC_SDOE PAD_CTL_NONE -+ MX6SL_PAD_EPDC_BDR0__EPDC_BDR0 PAD_CTL_NONE -+ MX6SL_PAD_EPDC_BDR1__EPDC_BDR1 PAD_CTL_NONE -+ >; -+ }; -+ -+ pinctrl_i2c1: i2c1grp { -+ fsl,pins = < -+ MX6SL_PAD_I2C1_SCL__I2C1_SCL 0x4001b8b1 -+ MX6SL_PAD_I2C1_SDA__I2C1_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ -+ pinctrl_i2c2: i2c2grp { -+ fsl,pins = < -+ MX6SL_PAD_I2C2_SCL__I2C2_SCL 0x4001b8b1 -+ MX6SL_PAD_I2C2_SDA__I2C2_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_i2c3: i2c3grp { -+ fsl,pins = < -+ MX6SL_PAD_AUD_RXFS__I2C3_SCL 0x4001b8b1 -+ MX6SL_PAD_AUD_RXC__I2C3_SDA 0x4001b8b1 -+ >; -+ }; -+ -+ pinctrl_keys: keygrp { -+ fsl,pins = < -+ MX6SL_PAD_ECSPI1_MOSI__GPIO4_IO09 0x100b1 -+ MX6SL_PAD_KEY_COL0__GPIO3_IO24 0x100b1 -+ MX6SL_PAD_KEY_COL1__GPIO3_IO26 0x100b1 -+ MX6SL_PAD_KEY_COL2__GPIO3_IO28 0x100b1 -+ >; -+ }; -+ -+ pinctrl_uart1: uart1grp { -+ fsl,pins = < -+ MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x1b0b1 -+ MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x1b0b1 -+ >; -+ }; -+ -+ pinctrl_usbotg1: usbotg1grp { -+ fsl,pins = < -+ MX6SL_PAD_EPDC_PWRCOM__USB_OTG1_ID 0x17059 -+ >; -+ }; -+ -+ pinctrl_usdhc1: usdhc1grp { -+ fsl,pins = < -+ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_DEFAULT -+ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_DEFAULT -+ >; -+ }; -+ -+ pinctrl_usdhc1_100mhz: usdhc1grp100mhz { -+ fsl,pins = < -+ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_100MHZ -+ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_100MHZ -+ >; -+ }; -+ -+ pinctrl_usdhc1_200mhz: usdhc1grp200mhz { -+ fsl,pins = < -+ MX6SL_PAD_SD1_CMD__SD1_CMD PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD1_CLK__SD1_CLK PAD_CTL_USDHC_CLK_200MHZ -+ MX6SL_PAD_SD1_DAT0__SD1_DATA0 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD1_DAT1__SD1_DATA1 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD1_DAT2__SD1_DATA2 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD1_DAT3__SD1_DATA3 PAD_CTL_USDHC_200MHZ -+ >; -+ }; -+ -+ pinctrl_usdhc2: usdhc2grp { -+ fsl,pins = < -+ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_DEFAULT -+ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT -+ >; -+ }; -+ -+ pinctrl_usdhc2_100mhz: usdhc2grp100mhz { -+ fsl,pins = < -+ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_100MHZ -+ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT -+ >; -+ }; -+ -+ pinctrl_usdhc2_200mhz: usdhc2grp200mhz { -+ fsl,pins = < -+ MX6SL_PAD_SD2_CMD__SD2_CMD PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_CLK__SD2_CLK PAD_CTL_USDHC_CLK_200MHZ -+ MX6SL_PAD_SD2_DAT0__SD2_DATA0 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT1__SD2_DATA1 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT2__SD2_DATA2 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT3__SD2_DATA3 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT4__SD2_DATA4 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT5__SD2_DATA5 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT6__SD2_DATA6 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_DAT7__SD2_DATA7 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD2_RST__SD2_RESET PAD_CTL_USDHC_CLK_DEFAULT -+ >; -+ }; -+ -+ pinctrl_usdhc3: usdhc3grp { -+ fsl,pins = < -+ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_DEFAULT -+ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_DEFAULT -+ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_DEFAULT -+ >; -+ }; -+ -+ pinctrl_usdhc3_100mhz: usdhc3grp100mhz { -+ fsl,pins = < -+ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_100MHZ -+ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_100MHZ -+ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_100MHZ -+ >; -+ }; -+ -+ pinctrl_usdhc3_200mhz: usdhc3grp200mhz { -+ fsl,pins = < -+ MX6SL_PAD_SD3_CMD__SD3_CMD PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD3_CLK__SD3_CLK PAD_CTL_USDHC_CLK_200MHZ -+ MX6SL_PAD_SD3_DAT0__SD3_DATA0 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD3_DAT1__SD3_DATA1 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD3_DAT2__SD3_DATA2 PAD_CTL_USDHC_200MHZ -+ MX6SL_PAD_SD3_DAT3__SD3_DATA3 PAD_CTL_USDHC_200MHZ -+ >; -+ }; -+ }; -+}; -+ -+&pxp { -+ status = "okay"; -+}; -+ -+&snvs_poweroff { -+ status = "okay"; -+}; -+ -+&uart1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_uart1>; -+ status = "okay"; -+}; -+ -+/*&usbmisc { -+ vbus-wakeup-supply = <®_usb_otg1_vbus>; -+};*/ - - &usbotg1 { -- vbus-supply = <®_usb_otg1_vbus>; -+ /*vbus-supply = <®_usb_otg1_vbus>;*/ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&pinctrl_usbotg1>; -+ disable-over-current; -+ /* This kills the speed */ -+ imx-usb-charger-detection; -+ srp-disable; -+ hnp-disable; -+ adp-disable; -+ status = "okay"; - }; - -+&usbotg2 { -+ dr_mode = "host"; -+ disable-over-current; -+ srp-disable; -+ hnp-disable; -+ adp-disable; -+ status = "disabled"; -+}; -+ -+ -+&usbphy1 { -+ tx-d-cal = <0x5>; -+}; -+ -+&usbphy2 { -+ tx-d-cal = <0x5>; -+ status = "disabled"; -+}; -+ -+&usdhc1 { -+ pinctrl-names = "default", "state_100mhz", "state_200mhz"; -+ pinctrl-0 = <&pinctrl_usdhc1>; -+ pinctrl-1 = <&pinctrl_usdhc1_100mhz>; -+ pinctrl-2 = <&pinctrl_usdhc1_200mhz>; -+ bus-width = <4>; -+ cd-gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; -+ disable-wp; -+ wp-controller; -+ keep-power-in-suspend; -+ enable-sdio-wakeup; -+ no-1-8-v; -+ status = "okay"; -+}; -+ -+&usdhc2 { -+ pinctrl-names = "default", "state_100mhz", "state_200mhz"; -+ pinctrl-0 = <&pinctrl_usdhc2>; -+ pinctrl-1 = <&pinctrl_usdhc2_100mhz>; -+ pinctrl-2 = <&pinctrl_usdhc2_200mhz>; -+ bus-width = <8>; -+ non-removable; -+ keep-power-in-suspend; -+ no-1-8-v; -+ disable-wp; -+ cap-mmc-highspeed; -+ status = "okay"; -+}; -+ -+&usdhc3 { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ pinctrl-names = "default", "state_100mhz", "state_200mhz"; -+ pinctrl-0 = <&pinctrl_usdhc3>; -+ pinctrl-1 = <&pinctrl_usdhc3_100mhz>; -+ pinctrl-2 = <&pinctrl_usdhc3_200mhz>; -+ mmc-pwrseq = <&wifi_pwrseq>; -+ bus-width = <4>; -+ enable-sdio-wakeup; -+ non-removable; -+ disable-wp; -+ no-1-8-v; -+ wifi-host; -+ keep-power-in-suspend; -+ status = "okay"; -+ -+ brcmf: bcrmf@1 { -+ reg = <1>; -+ compatible = "brcm,bcm4329-fmac"; -+ /*resets = <&wifi_reset>;*/ -+ }; -+}; From 494a4e9ebd58b500645ca49457f76e7e5fe1c345 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:20:03 -0400 Subject: [PATCH 602/738] user/linux-rm-headers: drop for pmos --- user/linux-rm-headers/APKBUILD | 40 ---------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 user/linux-rm-headers/APKBUILD diff --git a/user/linux-rm-headers/APKBUILD b/user/linux-rm-headers/APKBUILD deleted file mode 100644 index 0e34b2d..0000000 --- a/user/linux-rm-headers/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=linux-rm-headers -pkgver=5.4.70 -_rmver=1.3.4 -pkgrel=2 -pkgdesc="Linux kernel headers with reMarkable patches" -url=https://github.com/reMarkable/linux -provides="linux-headers=$pkgver-r$pkgrel" -makedepends="perl" -options="!check !dbg !strip !tracedeps" -builddir="$srcdir"/linux-RM1XX_${pkgver}_v$_rmver -source="https://github.com/reMarkable/linux/archive/refs/tags/RM1XX_${pkgver}_v$_rmver.tar.gz" -arch="noarch" -license="GPL-2.0" - -_carch=$CARCH -case "$CARCH" in - aarch64) _carch="arm64" ;; - arm*) _carch="arm" ;; -esac - -build() { - make headers ARCH="$_carch" -} - -package() { - mkdir -p "$pkgdir"/usr/ - cp -a usr/include/ "$pkgdir"/usr/include/ - - msg "purging non header files.." - find "$pkgdir"/usr/include/ ! -iname "*.h" -type f -exec rm -v {} \+ - - # provided by libdrm - rm -rf "$pkgdir"/usr/include/drm -} -sha512sums=" -0409c8443f5a705e8254858f966eed571b935f1be952f64c1d74b52a043d0638ba358370ca20f665d69b70aabe06f03e0bfa02ccd1a4a2a174d5b9579a10b44e RM1XX_5.4.70_v1.3.4.tar.gz -" From 0cfe53ed2cca9841120f153f081cbbacd3d4c6c2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:24:25 -0400 Subject: [PATCH 603/738] user/xf86-video-fbdev-rm: drop for pmos --- user/xf86-video-fbdev-rm/APKBUILD | 40 ------ .../epdc_auto-update-patch.patch | 128 ------------------ user/xf86-video-fbdev-rm/fix-build.patch | 17 --- 3 files changed, 185 deletions(-) delete mode 100644 user/xf86-video-fbdev-rm/APKBUILD delete mode 100644 user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch delete mode 100644 user/xf86-video-fbdev-rm/fix-build.patch diff --git a/user/xf86-video-fbdev-rm/APKBUILD b/user/xf86-video-fbdev-rm/APKBUILD deleted file mode 100644 index edfe76b..0000000 --- a/user/xf86-video-fbdev-rm/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Natanael Copa -pkgname=xf86-video-fbdev-rm -pkgver=0.5.0 -pkgrel=3 -pkgdesc="Video driver for framebuffer device with rM patches" -url="https://www.x.org" -arch="all" -license="MIT" -subpackages="$pkgname-doc" -provides="xf86-video-fbdev=$pkgver-r$pkgrel" -makedepends="xorg-server-dev libxi-dev util-macros xorgproto linux-rm-headers" -builddir="$srcdir"/xf86-video-fbdev-$pkgver -source=" - https://www.x.org/releases/individual/driver/xf86-video-fbdev-$pkgver.tar.bz2 - epdc_auto-update-patch.patch - fix-build.patch - " - -build() { - export LDFLAGS="$LDFLAGS -Wl,-z,lazy" - ./configure \ - --build=$CBUILD \ - --host=$CHOST \ - --prefix=/usr - make -} - -check() { - make check -} - -package() { - make DESTDIR="$pkgdir" install -} - -sha512sums=" -c1217b943bbe3301b3c2a8649ed1004c3c67b02607bd56bbc14f6dfa05e7f0184332c81a6a19595514745501ed88526aee932e555779b7c3a8233646b0979448 xf86-video-fbdev-0.5.0.tar.bz2 -c211a2edf90b622d522a0513358431afa33c7b3b958b054221ff3a6e8ff72d1012b0141b073ea070f4bb2d2f9042d8e092434f14a91bea3bf8bf188c78c0bcb7 epdc_auto-update-patch.patch -19c6680d8e8b0ba3903fb76438b54f294a1715b93d50e1cb2ef95bb04770add5fdad1df4260ab7eb00bb26578baa79b7cfed3f7fa6cba70348611cc3797af3ee fix-build.patch -" diff --git a/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch b/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch deleted file mode 100644 index f54f524..0000000 --- a/user/xf86-video-fbdev-rm/epdc_auto-update-patch.patch +++ /dev/null @@ -1,128 +0,0 @@ -diff --git a/src/fbdev.c.orig b/src/fbdev.c -index f25ef72..46b3c8c 100644 ---- a/src/fbdev.c.orig -+++ b/src/fbdev.c -@@ -8,6 +8,8 @@ - #endif - - #include -+#include -+#include - - /* all driver need this */ - #include "xf86.h" -@@ -18,6 +20,7 @@ - #include "colormapst.h" - #include "xf86cmap.h" - #include "shadow.h" -+#include "os.h" - #include "dgaproc.h" - - /* for visuals */ -@@ -186,6 +189,9 @@ typedef struct { - int rotate; - Bool shadowFB; - Bool shadow24; -+ Bool timerActive; -+ OsTimerPtr timer; -+ RegionPtr region_queue; - void *shadow; - CloseScreenProcPtr CloseScreen; - CreateScreenResourcesProcPtr CreateScreenResources; -@@ -697,6 +703,87 @@ fbdevUpdatePacked(ScreenPtr pScreen, shadowBufPtr pBuf) - shadowUpdatePacked(pScreen, pBuf); - } - -+static CARD32 FBDevEPDUpdateWork(OsTimerPtr timer, -+ CARD32 time, -+ void *arg); -+ -+static void FBDevEPDUpdate(ScreenPtr pScreen, shadowBufPtr pBuf) -+{ -+ RegionPtr damage = DamageRegion(pBuf->pDamage); -+ -+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); -+ FBDevPtr fPtr = FBDEVPTR(pScrn); -+ shadowUpdateProc update; -+ if (fPtr->shadow24) -+ update = fbdevUpdate32to24; -+ else if (fPtr->rotate) -+ update = fbdevUpdateRotatePacked; -+ else -+ update = fbdevUpdatePacked; -+ -+ update(pScreen, pBuf); -+ -+ if (fPtr->region_queue) { -+ RegionAppend(fPtr->region_queue, damage); -+ } else { -+ fPtr->region_queue = RegionDuplicate(damage); -+ } -+ -+ if (!fPtr->timerActive) { -+ FBDevEPDUpdateWork(fPtr->timer, GetTimeInMillis(), -+ pScreen); -+ } -+} -+ -+static CARD32 FBDevEPDUpdateWork(OsTimerPtr timer, -+ CARD32 time, -+ void *arg) -+{ -+ ScreenPtr pScreen = (void *)arg; -+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); -+ FBDevPtr fPtr = FBDEVPTR(pScrn); -+ BoxPtr pbox; -+ Bool overlap; -+ int nbox; -+ int fd = fbdevHWGetFD(pScrn); -+ if (fPtr->region_queue == NULL) { -+ fPtr->timerActive = FALSE; -+ return 0; -+ } -+ -+ struct mxcfb_update_data upd_region; -+ RegionValidate(fPtr->region_queue, &overlap); -+ pbox = RegionRects(fPtr->region_queue); -+ nbox = RegionNumRects(fPtr->region_queue); -+ -+ while(nbox--) { -+ int x, y, w, h; -+ int ret; -+ x = pbox->x1; -+ y = pbox->y1; -+ w = (pbox->x2 - pbox->x1); -+ h = pbox->y2 - pbox->y1; -+ memset(&upd_region, 0, sizeof(upd_region)); -+ upd_region.update_region.left = x; -+ upd_region.update_region.top = y; -+ upd_region.update_region.width = w; -+ upd_region.update_region.height = h; -+ upd_region.waveform_mode = WAVEFORM_MODE_AUTO; -+ upd_region.temp = TEMP_USE_AMBIENT; -+ upd_region.update_mode = UPDATE_MODE_PARTIAL; -+ upd_region.flags = 0; -+ ret = ioctl(fd, MXCFB_SEND_UPDATE, &upd_region); -+ if (ret < 0) -+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,"update ioctl failed: %d\n", ret); -+ pbox++; -+ } -+ fPtr->timer = TimerSet(timer, 0, 50, FBDevEPDUpdateWork, pScreen); -+ fPtr->timerActive = TRUE; -+ RegionDestroy(fPtr->region_queue); -+ fPtr->region_queue = NULL; -+ return 0; -+} -+ - static Bool - FBDevCreateScreenResources(ScreenPtr pScreen) - { -@@ -722,7 +809,7 @@ FBDevCreateScreenResources(ScreenPtr pScreen) - else - update = fbdevUpdatePacked; - -- if (!shadowAdd(pScreen, pPixmap, update, FBDevWindowLinear, fPtr->rotate, -+ if (!shadowAdd(pScreen, pPixmap, FBDevEPDUpdate, FBDevWindowLinear, fPtr->rotate, - NULL)) { - return FALSE; - } diff --git a/user/xf86-video-fbdev-rm/fix-build.patch b/user/xf86-video-fbdev-rm/fix-build.patch deleted file mode 100644 index f1ca165..0000000 --- a/user/xf86-video-fbdev-rm/fix-build.patch +++ /dev/null @@ -1,17 +0,0 @@ -Upstream: no (too lazy) -Reason: fixes build by getting rid of old cpp macro - -diff --git a/src/fbdev.c b/src/fbdev.c -index f25ef72..02a2b7a 100644 ---- a/src/fbdev.c -+++ b/src/fbdev.c -@@ -1010,7 +1010,7 @@ FBDevScreenInit(SCREEN_INIT_ARGS_DECL) - fPtr->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = FBDevCloseScreen; - --#if XV -+#if defined(XV) - { - XF86VideoAdaptorPtr *ptr; - - From 39823fcb316a0eb117c425cbf133387d233661d9 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:26:34 -0400 Subject: [PATCH 604/738] user/uvicorn: new aport --- .../2540_add-websocketssansioprotocol.patch | 1194 +++++++++++++++++ .../2541_bump-wesockets-on-requirements.patch | 559 ++++++++ user/uvicorn/APKBUILD | 55 + user/uvicorn/test_multiprocess.patch | 14 + 4 files changed, 1822 insertions(+) create mode 100644 user/uvicorn/2540_add-websocketssansioprotocol.patch create mode 100644 user/uvicorn/2541_bump-wesockets-on-requirements.patch create mode 100644 user/uvicorn/APKBUILD create mode 100644 user/uvicorn/test_multiprocess.patch diff --git a/user/uvicorn/2540_add-websocketssansioprotocol.patch b/user/uvicorn/2540_add-websocketssansioprotocol.patch new file mode 100644 index 0000000..a1fe5bf --- /dev/null +++ b/user/uvicorn/2540_add-websocketssansioprotocol.patch @@ -0,0 +1,1194 @@ +From d79d86eee1ad8cdcc9668de3237b0c6203257992 Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sat, 14 Dec 2024 13:44:22 +0100 +Subject: [PATCH 1/7] Add WebSocketsSansIOProtocol + +--- + docs/deployment.md | 2 +- + docs/index.md | 2 +- + pyproject.toml | 3 + + requirements.txt | 2 +- + tests/conftest.py | 4 +- + tests/middleware/test_logging.py | 11 +- + tests/middleware/test_proxy_headers.py | 5 +- + uvicorn/config.py | 3 +- + .../websockets/websockets_sansio_impl.py | 386 ++++++++++++++++++ + uvicorn/server.py | 3 +- + 10 files changed, 408 insertions(+), 13 deletions(-) + create mode 100644 uvicorn/protocols/websockets/websockets_sansio_impl.py + +diff --git a/pyproject.toml b/pyproject.toml +index 6f809030e..3e30b658c 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -93,6 +93,9 @@ filterwarnings = [ + "ignore:Uvicorn's native WSGI implementation is deprecated.*:DeprecationWarning", + "ignore: 'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning", + "ignore: remove second argument of ws_handler:DeprecationWarning:websockets", ++ "ignore: websockets.legacy is deprecated.*:DeprecationWarning", ++ "ignore: websockets.server.WebSocketServerProtocol is deprecated.*:DeprecationWarning", ++ "ignore: websockets.client.connect is deprecated.*:DeprecationWarning", + ] + + [tool.coverage.run] +diff --git a/requirements.txt b/requirements.txt +index b3a464c0b..fd2334d02 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -7,7 +7,7 @@ h11 @ git+https://github.com/python-hyper/h11.git@master + # Explicit optionals + a2wsgi==1.10.7 + wsproto==1.2.0 +-websockets==13.1 ++websockets==14.1 + + # Packaging + build==1.2.2.post1 +diff --git a/tests/conftest.py b/tests/conftest.py +index 1b0c0e84e..84bda4dc2 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -233,9 +233,9 @@ def unused_tcp_port() -> int: + marks=pytest.mark.skipif(not importlib.util.find_spec("wsproto"), reason="wsproto not installed."), + id="wsproto", + ), ++ pytest.param("uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", id="websockets"), + pytest.param( +- "uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", +- id="websockets", ++ "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", id="websockets-sansio" + ), + ] + ) +diff --git a/tests/middleware/test_logging.py b/tests/middleware/test_logging.py +index f27633aa5..c8126f9e6 100644 +--- a/tests/middleware/test_logging.py ++++ b/tests/middleware/test_logging.py +@@ -49,7 +49,9 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable + await send({"type": "http.response.body", "body": b"", "more_body": False}) + + +-async def test_trace_logging(caplog: pytest.LogCaptureFixture, logging_config, unused_tcp_port: int): ++async def test_trace_logging( ++ caplog: pytest.LogCaptureFixture, logging_config: dict[str, typing.Any], unused_tcp_port: int ++): + config = Config( + app=app, + log_level="trace", +@@ -89,10 +91,11 @@ async def test_trace_logging_on_http_protocol(http_protocol_cls, caplog, logging + assert any(" - HTTP connection lost" in message for message in messages) + + ++@pytest.mark.skip() + async def test_trace_logging_on_ws_protocol( + ws_protocol_cls: WSProtocol, +- caplog, +- logging_config, ++ caplog: pytest.LogCaptureFixture, ++ logging_config: dict[str, typing.Any], + unused_tcp_port: int, + ): + async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): +@@ -104,7 +107,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe + elif message["type"] == "websocket.disconnect": + break + +- async def open_connection(url): ++ async def open_connection(url: str): + async with websockets.client.connect(url) as websocket: + return websocket.open + +diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py +index 0ade97450..4b5f195f6 100644 +--- a/tests/middleware/test_proxy_headers.py ++++ b/tests/middleware/test_proxy_headers.py +@@ -5,7 +5,7 @@ + import httpx + import httpx._transports.asgi + import pytest +-import websockets.client ++from websockets.asyncio.client import connect + + from tests.response import Response + from tests.utils import run_server +@@ -465,6 +465,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe + host, port = scope["client"] + await send({"type": "websocket.accept"}) + await send({"type": "websocket.send", "text": f"{scheme}://{host}:{port}"}) ++ await send({"type": "websocket.close"}) + + app_with_middleware = ProxyHeadersMiddleware(websocket_app, trusted_hosts="*") + config = Config( +@@ -478,7 +479,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe + async with run_server(config): + url = f"ws://127.0.0.1:{unused_tcp_port}" + headers = {X_FORWARDED_FOR: "1.2.3.4", X_FORWARDED_PROTO: forwarded_proto} +- async with websockets.client.connect(url, extra_headers=headers) as websocket: ++ async with connect(url, additional_headers=headers) as websocket: + data = await websocket.recv() + assert data == expected + +diff --git a/uvicorn/config.py b/uvicorn/config.py +index b08a8426b..3480b5392 100644 +--- a/uvicorn/config.py ++++ b/uvicorn/config.py +@@ -24,7 +24,7 @@ + from uvicorn.middleware.wsgi import WSGIMiddleware + + HTTPProtocolType = Literal["auto", "h11", "httptools"] +-WSProtocolType = Literal["auto", "none", "websockets", "wsproto"] ++WSProtocolType = Literal["auto", "none", "websockets", "websockets-sansio", "wsproto"] + LifespanType = Literal["auto", "on", "off"] + LoopSetupType = Literal["none", "auto", "asyncio", "uvloop"] + InterfaceType = Literal["auto", "asgi3", "asgi2", "wsgi"] +@@ -46,6 +46,7 @@ + "auto": "uvicorn.protocols.websockets.auto:AutoWebSocketsProtocol", + "none": None, + "websockets": "uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", ++ "websockets-sansio": "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", + "wsproto": "uvicorn.protocols.websockets.wsproto_impl:WSProtocol", + } + LIFESPAN: dict[LifespanType, str] = { +diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py +new file mode 100644 +index 000000000..49e8a71a1 +--- /dev/null ++++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py +@@ -0,0 +1,386 @@ ++from __future__ import annotations ++ ++import asyncio ++import logging ++from asyncio.transports import BaseTransport, Transport ++from http import HTTPStatus ++from typing import Any, Literal, cast ++from urllib.parse import unquote ++ ++from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory ++from websockets.frames import Frame, Opcode ++from websockets.http11 import Request ++from websockets.server import ServerProtocol ++ ++from uvicorn._types import ( ++ ASGIReceiveEvent, ++ ASGISendEvent, ++ WebSocketAcceptEvent, ++ WebSocketCloseEvent, ++ WebSocketDisconnectEvent, ++ WebSocketReceiveEvent, ++ WebSocketResponseBodyEvent, ++ WebSocketResponseStartEvent, ++ WebSocketScope, ++ WebSocketSendEvent, ++) ++from uvicorn.config import Config ++from uvicorn.logging import TRACE_LOG_LEVEL ++from uvicorn.protocols.utils import get_local_addr, get_path_with_query_string, get_remote_addr, is_ssl ++from uvicorn.server import ServerState ++ ++ ++class WebSocketSansIOProtocol(asyncio.Protocol): ++ def __init__( ++ self, ++ config: Config, ++ server_state: ServerState, ++ app_state: dict[str, Any], ++ _loop: asyncio.AbstractEventLoop | None = None, ++ ) -> None: ++ if not config.loaded: ++ config.load() # pragma: no cover ++ ++ self.config = config ++ self.app = config.loaded_app ++ self.loop = _loop or asyncio.get_event_loop() ++ self.logger = logging.getLogger("uvicorn.error") ++ self.root_path = config.root_path ++ self.app_state = app_state ++ ++ # Shared server state ++ self.connections = server_state.connections ++ self.tasks = server_state.tasks ++ self.default_headers = server_state.default_headers ++ ++ # Connection state ++ self.transport: asyncio.Transport = None # type: ignore[assignment] ++ self.server: tuple[str, int] | None = None ++ self.client: tuple[str, int] | None = None ++ self.scheme: Literal["wss", "ws"] = None # type: ignore[assignment] ++ ++ # WebSocket state ++ self.queue: asyncio.Queue[ASGIReceiveEvent] = asyncio.Queue() ++ self.handshake_initiated = False ++ self.handshake_complete = False ++ self.close_sent = False ++ self.initial_response: tuple[int, list[tuple[str, str]], bytes] | None = None ++ ++ extensions = [] ++ if self.config.ws_per_message_deflate: ++ extensions = [ServerPerMessageDeflateFactory()] ++ self.conn = ServerProtocol( ++ extensions=extensions, ++ max_size=self.config.ws_max_size, ++ logger=logging.getLogger("uvicorn.error"), ++ ) ++ ++ self.read_paused = False ++ self.writable = asyncio.Event() ++ self.writable.set() ++ ++ # Buffers ++ self.bytes = b"" ++ ++ def connection_made(self, transport: BaseTransport) -> None: ++ """Called when a connection is made.""" ++ transport = cast(Transport, transport) ++ self.connections.add(self) ++ self.transport = transport ++ self.server = get_local_addr(transport) ++ self.client = get_remote_addr(transport) ++ self.scheme = "wss" if is_ssl(transport) else "ws" ++ ++ if self.logger.level <= TRACE_LOG_LEVEL: ++ prefix = "%s:%d - " % self.client if self.client else "" ++ self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection made", prefix) ++ ++ def connection_lost(self, exc: Exception | None) -> None: ++ self.connections.remove(self) ++ if self.logger.level <= TRACE_LOG_LEVEL: ++ prefix = "%s:%d - " % self.client if self.client else "" ++ self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection lost", prefix) ++ if self.handshake_initiated and not self.close_sent: ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) ++ ++ def shutdown(self) -> None: ++ if not self.transport.is_closing(): ++ if self.handshake_complete: ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) ++ self.close_sent = True ++ self.conn.send_close(1012) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ elif self.handshake_initiated: ++ self.send_500_response() ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) ++ self.transport.close() ++ ++ def data_received(self, data: bytes) -> None: ++ self.conn.receive_data(data) ++ parser_exc = self.conn.parser_exc ++ if parser_exc is not None: ++ self.handle_parser_exception() ++ return ++ self.handle_events() ++ ++ def handle_events(self) -> None: ++ for event in self.conn.events_received(): ++ if isinstance(event, Request): ++ self.handle_connect(event) ++ if isinstance(event, Frame): ++ if event.opcode == Opcode.CONT: ++ self.handle_cont(event) ++ elif event.opcode == Opcode.TEXT: ++ self.handle_text(event) ++ elif event.opcode == Opcode.BINARY: ++ self.handle_bytes(event) ++ elif event.opcode == Opcode.PING: ++ self.handle_ping(event) ++ elif event.opcode == Opcode.CLOSE: ++ self.handle_close(event) ++ ++ # Event handlers ++ ++ def handle_connect(self, event: Request) -> None: ++ self.request = event ++ self.response = self.conn.accept(event) ++ self.handshake_initiated = True ++ # if status_code is not 101 return response ++ if self.response.status_code != 101: ++ self.handshake_complete = True ++ self.close_sent = True ++ self.conn.send_response(self.response) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ self.transport.close() ++ return ++ ++ headers = [ ++ (key.encode("ascii"), value.encode("ascii", errors="surrogateescape")) ++ for key, value in event.headers.raw_items() ++ ] ++ raw_path, _, query_string = event.path.partition("?") ++ self.scope: WebSocketScope = { ++ "type": "websocket", ++ "asgi": {"version": self.config.asgi_version, "spec_version": "2.3"}, ++ "http_version": "1.1", ++ "scheme": self.scheme, ++ "server": self.server, ++ "client": self.client, ++ "root_path": self.root_path, ++ "path": unquote(raw_path), ++ "raw_path": raw_path.encode("ascii"), ++ "query_string": query_string.encode("ascii"), ++ "headers": headers, ++ "subprotocols": event.headers.get_all("Sec-WebSocket-Protocol"), ++ "state": self.app_state.copy(), ++ "extensions": {"websocket.http.response": {}}, ++ } ++ self.queue.put_nowait({"type": "websocket.connect"}) ++ task = self.loop.create_task(self.run_asgi()) ++ task.add_done_callback(self.on_task_complete) ++ self.tasks.add(task) ++ ++ def handle_cont(self, event: Frame) -> None: ++ self.bytes += event.data ++ if event.fin: ++ self.send_receive_event_to_app() ++ ++ def handle_text(self, event: Frame) -> None: ++ self.bytes = event.data ++ self.curr_msg_data_type: Literal["text", "bytes"] = "text" ++ if event.fin: ++ self.send_receive_event_to_app() ++ ++ def handle_bytes(self, event: Frame) -> None: ++ self.bytes = event.data ++ self.curr_msg_data_type = "bytes" ++ if event.fin: ++ self.send_receive_event_to_app() ++ ++ def send_receive_event_to_app(self) -> None: ++ data_type = self.curr_msg_data_type ++ msg: WebSocketReceiveEvent ++ if data_type == "text": ++ msg = {"type": "websocket.receive", data_type: self.bytes.decode()} ++ else: ++ msg = {"type": "websocket.receive", data_type: self.bytes} ++ self.queue.put_nowait(msg) ++ if not self.read_paused: ++ self.read_paused = True ++ self.transport.pause_reading() ++ ++ def handle_ping(self, event: Frame) -> None: ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ ++ def handle_close(self, event: Frame) -> None: ++ if not self.close_sent and self.conn.close_rcvd and not self.transport.is_closing(): ++ disconnect_event: WebSocketDisconnectEvent = { ++ "type": "websocket.disconnect", ++ "code": self.conn.close_rcvd.code, ++ "reason": self.conn.close_rcvd.reason, ++ } ++ self.queue.put_nowait(disconnect_event) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ self.close_sent = True ++ self.transport.close() ++ ++ def handle_parser_exception(self) -> None: ++ disconnect_event: WebSocketDisconnectEvent = { ++ "type": "websocket.disconnect", ++ "code": self.conn.close_sent.code if self.conn.close_sent else 1006, ++ } ++ self.queue.put_nowait(disconnect_event) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ self.close_sent = True ++ self.transport.close() ++ ++ def on_task_complete(self, task: asyncio.Task[None]) -> None: ++ self.tasks.discard(task) ++ ++ async def run_asgi(self) -> None: ++ try: ++ result = await self.app(self.scope, self.receive, self.send) ++ except BaseException: ++ self.logger.exception("Exception in ASGI application\n") ++ if not self.handshake_complete: ++ self.send_500_response() ++ self.transport.close() ++ else: ++ if not self.handshake_complete: ++ msg = "ASGI callable returned without completing handshake." ++ self.logger.error(msg) ++ self.send_500_response() ++ self.transport.close() ++ elif result is not None: ++ msg = "ASGI callable should return None, but returned '%s'." ++ self.logger.error(msg, result) ++ self.transport.close() ++ ++ def send_500_response(self) -> None: ++ response = self.conn.reject(500, "Internal Server Error") ++ self.conn.send_response(response) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ ++ async def send(self, message: ASGISendEvent) -> None: ++ await self.writable.wait() ++ ++ message_type = message["type"] ++ ++ if not self.handshake_complete and self.initial_response is None: ++ if message_type == "websocket.accept": ++ message = cast(WebSocketAcceptEvent, message) ++ self.logger.info( ++ '%s - "WebSocket %s" [accepted]', ++ self.scope["client"], ++ get_path_with_query_string(self.scope), ++ ) ++ headers = [ ++ (name.decode("latin-1").lower(), value.decode("latin-1").lower()) ++ for name, value in (self.default_headers + list(message.get("headers", []))) ++ ] ++ accepted_subprotocol = message.get("subprotocol") ++ if accepted_subprotocol: ++ headers.append(("Sec-WebSocket-Protocol", accepted_subprotocol)) ++ self.response.headers.update(headers) ++ ++ if not self.transport.is_closing(): ++ self.handshake_complete = True ++ self.conn.send_response(self.response) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ ++ elif message_type == "websocket.close": ++ message = cast(WebSocketCloseEvent, message) ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) ++ self.logger.info( ++ '%s - "WebSocket %s" 403', ++ self.scope["client"], ++ get_path_with_query_string(self.scope), ++ ) ++ response = self.conn.reject(HTTPStatus.FORBIDDEN, "") ++ self.conn.send_response(response) ++ output = self.conn.data_to_send() ++ self.close_sent = True ++ self.handshake_complete = True ++ self.transport.writelines(output) ++ self.transport.close() ++ elif message_type == "websocket.http.response.start": ++ message = cast(WebSocketResponseStartEvent, message) ++ self.logger.info( ++ '%s - "WebSocket %s" %d', ++ self.scope["client"], ++ get_path_with_query_string(self.scope), ++ message["status"], ++ ) ++ headers = [ ++ (name.decode("latin-1"), value.decode("latin-1")) ++ for name, value in list(message.get("headers", [])) ++ ] ++ self.initial_response = (message["status"], headers, b"") ++ else: ++ msg = ( ++ "Expected ASGI message 'websocket.accept', 'websocket.close' " ++ "or 'websocket.http.response.start' " ++ "but got '%s'." ++ ) ++ print(message) ++ raise RuntimeError(msg % message_type) ++ ++ elif not self.close_sent and self.initial_response is None: ++ if message_type == "websocket.send" and not self.transport.is_closing(): ++ message = cast(WebSocketSendEvent, message) ++ bytes_data = message.get("bytes") ++ text_data = message.get("text") ++ if text_data: ++ self.conn.send_text(text_data.encode()) ++ elif bytes_data: ++ self.conn.send_binary(bytes_data) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ ++ elif message_type == "websocket.close" and not self.transport.is_closing(): ++ message = cast(WebSocketCloseEvent, message) ++ code = message.get("code", 1000) ++ reason = message.get("reason", "") or "" ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) ++ self.conn.send_close(code, reason) ++ output = self.conn.data_to_send() ++ self.transport.writelines(output) ++ self.close_sent = True ++ self.transport.close() ++ else: ++ msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." ++ raise RuntimeError(msg % message_type) ++ elif self.initial_response is not None: ++ if message_type == "websocket.http.response.body": ++ message = cast(WebSocketResponseBodyEvent, message) ++ body = self.initial_response[2] + message["body"] ++ self.initial_response = self.initial_response[:2] + (body,) ++ if not message.get("more_body", False): ++ response = self.conn.reject(self.initial_response[0], body.decode()) ++ response.headers.update(self.initial_response[1]) ++ self.conn.send_response(response) ++ output = self.conn.data_to_send() ++ self.close_sent = True ++ self.transport.writelines(output) ++ self.transport.close() ++ else: ++ msg = "Expected ASGI message 'websocket.http.response.body' " "but got '%s'." ++ raise RuntimeError(msg % message_type) ++ ++ else: ++ msg = "Unexpected ASGI message '%s', after sending 'websocket.close'." ++ raise RuntimeError(msg % message_type) ++ ++ async def receive(self) -> ASGIReceiveEvent: ++ message = await self.queue.get() ++ if self.read_paused and self.queue.empty(): ++ self.read_paused = False ++ self.transport.resume_reading() ++ return message +diff --git a/uvicorn/server.py b/uvicorn/server.py +index f14026f16..2250e2dc7 100644 +--- a/uvicorn/server.py ++++ b/uvicorn/server.py +@@ -22,9 +22,10 @@ + from uvicorn.protocols.http.h11_impl import H11Protocol + from uvicorn.protocols.http.httptools_impl import HttpToolsProtocol + from uvicorn.protocols.websockets.websockets_impl import WebSocketProtocol ++ from uvicorn.protocols.websockets.websockets_sansio_impl import WebSocketSansIOProtocol + from uvicorn.protocols.websockets.wsproto_impl import WSProtocol + +- Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol] ++ Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol, WebSocketSansIOProtocol] + + HANDLED_SIGNALS = ( + signal.SIGINT, # Unix signal 2. Sent by Ctrl+C. + +From 7ee1e15a850d78754b757849886abb2011dd2e55 Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sat, 14 Dec 2024 17:54:55 +0100 +Subject: [PATCH 2/7] Add WebSocketsSansIOProtocol + +--- + tests/conftest.py | 2 +- + tests/middleware/test_logging.py | 1 - + tests/middleware/test_proxy_headers.py | 4 +- + tests/protocols/test_websocket.py | 35 +++--- + uvicorn/config.py | 2 +- + .../websockets/websockets_sansio_impl.py | 117 +++++++++++------- + uvicorn/server.py | 4 +- + 7 files changed, 96 insertions(+), 69 deletions(-) + +diff --git a/tests/conftest.py b/tests/conftest.py +index 84bda4dc2..7061a143b 100644 +--- a/tests/conftest.py ++++ b/tests/conftest.py +@@ -235,7 +235,7 @@ def unused_tcp_port() -> int: + ), + pytest.param("uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", id="websockets"), + pytest.param( +- "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", id="websockets-sansio" ++ "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketsSansIOProtocol", id="websockets-sansio" + ), + ] + ) +diff --git a/tests/middleware/test_logging.py b/tests/middleware/test_logging.py +index c8126f9e6..63d7daf83 100644 +--- a/tests/middleware/test_logging.py ++++ b/tests/middleware/test_logging.py +@@ -91,7 +91,6 @@ async def test_trace_logging_on_http_protocol(http_protocol_cls, caplog, logging + assert any(" - HTTP connection lost" in message for message in messages) + + +-@pytest.mark.skip() + async def test_trace_logging_on_ws_protocol( + ws_protocol_cls: WSProtocol, + caplog: pytest.LogCaptureFixture, +diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py +index 4b5f195f6..62a51ab20 100644 +--- a/tests/middleware/test_proxy_headers.py ++++ b/tests/middleware/test_proxy_headers.py +@@ -5,8 +5,8 @@ + import httpx + import httpx._transports.asgi + import pytest +-from websockets.asyncio.client import connect + ++import websockets.client + from tests.response import Response + from tests.utils import run_server + from uvicorn._types import ASGIReceiveCallable, ASGISendCallable, Scope +@@ -479,7 +479,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe + async with run_server(config): + url = f"ws://127.0.0.1:{unused_tcp_port}" + headers = {X_FORWARDED_FOR: "1.2.3.4", X_FORWARDED_PROTO: forwarded_proto} +- async with connect(url, additional_headers=headers) as websocket: ++ async with websockets.client.connect(url, extra_headers=headers) as websocket: + data = await websocket.recv() + assert data == expected + +diff --git a/tests/protocols/test_websocket.py b/tests/protocols/test_websocket.py +index 15ccfdd7d..8971a7d97 100644 +--- a/tests/protocols/test_websocket.py ++++ b/tests/protocols/test_websocket.py +@@ -601,20 +601,20 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable + await send_accept_task.wait() + disconnect_message = await receive() # type: ignore + +- response: httpx.Response | None = None +- + async def websocket_session(uri: str): +- nonlocal response + async with httpx.AsyncClient() as client: +- response = await client.get( +- f"http://127.0.0.1:{unused_tcp_port}", +- headers={ +- "upgrade": "websocket", +- "connection": "upgrade", +- "sec-websocket-version": "13", +- "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", +- }, +- ) ++ try: ++ await client.get( ++ f"http://127.0.0.1:{unused_tcp_port}", ++ headers={ ++ "upgrade": "websocket", ++ "connection": "upgrade", ++ "sec-websocket-version": "13", ++ "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", ++ }, ++ ) ++ except httpx.RemoteProtocolError: ++ pass # pragma: no cover + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -623,9 +623,6 @@ async def websocket_session(uri: str): + send_accept_task.set() + await asyncio.sleep(0.1) + +- assert response is not None +- assert response.status_code == 500, response.text +- assert response.text == "Internal Server Error" + assert disconnect_message == {"type": "websocket.disconnect", "code": 1006} + await task + +@@ -920,6 +917,9 @@ async def websocket_session(url: str): + async def test_server_reject_connection_with_invalid_msg( + ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int + ): ++ if ws_protocol_cls.__name__ == "WebSocketsSansIOProtocol": ++ pytest.skip("WebSocketsSansIOProtocol sends both start and body messages in one message.") ++ + async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): + assert scope["type"] == "websocket" + assert "extensions" in scope and "websocket.http.response" in scope["extensions"] +@@ -951,6 +951,9 @@ async def websocket_session(url: str): + async def test_server_reject_connection_with_missing_body( + ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int + ): ++ if ws_protocol_cls.__name__ == "WebSocketsSansIOProtocol": ++ pytest.skip("WebSocketsSansIOProtocol sends both start and body messages in one message.") ++ + async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): + assert scope["type"] == "websocket" + assert "extensions" in scope and "websocket.http.response" in scope["extensions"] +@@ -986,6 +989,8 @@ async def test_server_multiple_websocket_http_response_start_events( + The server should raise an exception if it sends multiple + websocket.http.response.start events. + """ ++ if ws_protocol_cls.__name__ == "WebSocketsSansIOProtocol": ++ pytest.skip("WebSocketsSansIOProtocol sends both start and body messages in one message.") + exception_message: str | None = None + + async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): +diff --git a/uvicorn/config.py b/uvicorn/config.py +index 3480b5392..187b94972 100644 +--- a/uvicorn/config.py ++++ b/uvicorn/config.py +@@ -46,7 +46,7 @@ + "auto": "uvicorn.protocols.websockets.auto:AutoWebSocketsProtocol", + "none": None, + "websockets": "uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", +- "websockets-sansio": "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", ++ "websockets-sansio": "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketsSansIOProtocol", + "wsproto": "uvicorn.protocols.websockets.wsproto_impl:WSProtocol", + } + LIFESPAN: dict[LifespanType, str] = { +diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py +index 49e8a71a1..ea70236b2 100644 +--- a/uvicorn/protocols/websockets/websockets_sansio_impl.py ++++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py +@@ -7,6 +7,7 @@ + from typing import Any, Literal, cast + from urllib.parse import unquote + ++from websockets import InvalidState + from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory + from websockets.frames import Frame, Opcode + from websockets.http11 import Request +@@ -26,11 +27,17 @@ + ) + from uvicorn.config import Config + from uvicorn.logging import TRACE_LOG_LEVEL +-from uvicorn.protocols.utils import get_local_addr, get_path_with_query_string, get_remote_addr, is_ssl ++from uvicorn.protocols.utils import ( ++ ClientDisconnected, ++ get_local_addr, ++ get_path_with_query_string, ++ get_remote_addr, ++ is_ssl, ++) + from uvicorn.server import ServerState + + +-class WebSocketSansIOProtocol(asyncio.Protocol): ++class WebSocketsSansIOProtocol(asyncio.Protocol): + def __init__( + self, + config: Config, +@@ -96,12 +103,20 @@ def connection_made(self, transport: BaseTransport) -> None: + self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection made", prefix) + + def connection_lost(self, exc: Exception | None) -> None: ++ code = 1005 if self.handshake_complete else 1006 ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) + self.connections.remove(self) ++ + if self.logger.level <= TRACE_LOG_LEVEL: + prefix = "%s:%d - " % self.client if self.client else "" + self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection lost", prefix) +- if self.handshake_initiated and not self.close_sent: +- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) ++ ++ self.handshake_complete = True ++ if exc is None: ++ self.transport.close() ++ ++ def eof_received(self) -> None: ++ pass + + def shutdown(self) -> None: + if not self.transport.is_closing(): +@@ -110,8 +125,8 @@ def shutdown(self) -> None: + self.close_sent = True + self.conn.send_close(1012) + output = self.conn.data_to_send() +- self.transport.writelines(output) +- elif self.handshake_initiated: ++ self.transport.write(b"".join(output)) ++ elif not self.handshake_initiated: + self.send_500_response() + self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) + self.transport.close() +@@ -152,7 +167,7 @@ def handle_connect(self, event: Request) -> None: + self.close_sent = True + self.conn.send_response(self.response) + output = self.conn.data_to_send() +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + self.transport.close() + return + +@@ -213,29 +228,29 @@ def send_receive_event_to_app(self) -> None: + + def handle_ping(self, event: Frame) -> None: + output = self.conn.data_to_send() +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + + def handle_close(self, event: Frame) -> None: +- if not self.close_sent and self.conn.close_rcvd and not self.transport.is_closing(): ++ if not self.close_sent and not self.transport.is_closing(): + disconnect_event: WebSocketDisconnectEvent = { + "type": "websocket.disconnect", +- "code": self.conn.close_rcvd.code, +- "reason": self.conn.close_rcvd.reason, ++ "code": self.conn.close_rcvd.code, # type: ignore[union-attr] ++ "reason": self.conn.close_rcvd.reason, # type: ignore[union-attr] + } + self.queue.put_nowait(disconnect_event) + output = self.conn.data_to_send() +- self.transport.writelines(output) +- self.close_sent = True ++ self.transport.write(b"".join(output)) + self.transport.close() + + def handle_parser_exception(self) -> None: + disconnect_event: WebSocketDisconnectEvent = { + "type": "websocket.disconnect", +- "code": self.conn.close_sent.code if self.conn.close_sent else 1006, ++ "code": self.conn.close_sent.code, # type: ignore[union-attr] ++ "reason": self.conn.close_sent.reason, # type: ignore[union-attr] + } + self.queue.put_nowait(disconnect_event) + output = self.conn.data_to_send() +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + self.close_sent = True + self.transport.close() + +@@ -245,10 +260,11 @@ def on_task_complete(self, task: asyncio.Task[None]) -> None: + async def run_asgi(self) -> None: + try: + result = await self.app(self.scope, self.receive, self.send) ++ except ClientDisconnected: ++ self.transport.close() + except BaseException: + self.logger.exception("Exception in ASGI application\n") +- if not self.handshake_complete: +- self.send_500_response() ++ self.send_500_response() + self.transport.close() + else: + if not self.handshake_complete: +@@ -262,10 +278,12 @@ async def run_asgi(self) -> None: + self.transport.close() + + def send_500_response(self) -> None: ++ if self.initial_response or self.handshake_complete: ++ return + response = self.conn.reject(500, "Internal Server Error") + self.conn.send_response(response) + output = self.conn.data_to_send() +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + + async def send(self, message: ASGISendEvent) -> None: + await self.writable.wait() +@@ -293,7 +311,7 @@ async def send(self, message: ASGISendEvent) -> None: + self.handshake_complete = True + self.conn.send_response(self.response) + output = self.conn.data_to_send() +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + + elif message_type == "websocket.close": + message = cast(WebSocketCloseEvent, message) +@@ -308,10 +326,12 @@ async def send(self, message: ASGISendEvent) -> None: + output = self.conn.data_to_send() + self.close_sent = True + self.handshake_complete = True +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + self.transport.close() +- elif message_type == "websocket.http.response.start": ++ elif message_type == "websocket.http.response.start" and self.initial_response is None: + message = cast(WebSocketResponseStartEvent, message) ++ if not (100 <= message["status"] < 600): ++ raise RuntimeError("Invalid HTTP status code '%d' in response." % message["status"]) + self.logger.info( + '%s - "WebSocket %s" %d', + self.scope["client"], +@@ -329,34 +349,36 @@ async def send(self, message: ASGISendEvent) -> None: + "or 'websocket.http.response.start' " + "but got '%s'." + ) +- print(message) + raise RuntimeError(msg % message_type) + + elif not self.close_sent and self.initial_response is None: +- if message_type == "websocket.send" and not self.transport.is_closing(): +- message = cast(WebSocketSendEvent, message) +- bytes_data = message.get("bytes") +- text_data = message.get("text") +- if text_data: +- self.conn.send_text(text_data.encode()) +- elif bytes_data: +- self.conn.send_binary(bytes_data) +- output = self.conn.data_to_send() +- self.transport.writelines(output) +- +- elif message_type == "websocket.close" and not self.transport.is_closing(): +- message = cast(WebSocketCloseEvent, message) +- code = message.get("code", 1000) +- reason = message.get("reason", "") or "" +- self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) +- self.conn.send_close(code, reason) +- output = self.conn.data_to_send() +- self.transport.writelines(output) +- self.close_sent = True +- self.transport.close() +- else: +- msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." +- raise RuntimeError(msg % message_type) ++ try: ++ if message_type == "websocket.send": ++ message = cast(WebSocketSendEvent, message) ++ bytes_data = message.get("bytes") ++ text_data = message.get("text") ++ if text_data: ++ self.conn.send_text(text_data.encode()) ++ elif bytes_data: ++ self.conn.send_binary(bytes_data) ++ output = self.conn.data_to_send() ++ self.transport.write(b"".join(output)) ++ ++ elif message_type == "websocket.close" and not self.transport.is_closing(): ++ message = cast(WebSocketCloseEvent, message) ++ code = message.get("code", 1000) ++ reason = message.get("reason", "") or "" ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) ++ self.conn.send_close(code, reason) ++ output = self.conn.data_to_send() ++ self.transport.write(b"".join(output)) ++ self.close_sent = True ++ self.transport.close() ++ else: ++ msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." ++ raise RuntimeError(msg % message_type) ++ except InvalidState: ++ raise ClientDisconnected() + elif self.initial_response is not None: + if message_type == "websocket.http.response.body": + message = cast(WebSocketResponseBodyEvent, message) +@@ -365,10 +387,11 @@ async def send(self, message: ASGISendEvent) -> None: + if not message.get("more_body", False): + response = self.conn.reject(self.initial_response[0], body.decode()) + response.headers.update(self.initial_response[1]) ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) + self.conn.send_response(response) + output = self.conn.data_to_send() + self.close_sent = True +- self.transport.writelines(output) ++ self.transport.write(b"".join(output)) + self.transport.close() + else: + msg = "Expected ASGI message 'websocket.http.response.body' " "but got '%s'." +diff --git a/uvicorn/server.py b/uvicorn/server.py +index 2250e2dc7..e33716fd4 100644 +--- a/uvicorn/server.py ++++ b/uvicorn/server.py +@@ -22,10 +22,10 @@ + from uvicorn.protocols.http.h11_impl import H11Protocol + from uvicorn.protocols.http.httptools_impl import HttpToolsProtocol + from uvicorn.protocols.websockets.websockets_impl import WebSocketProtocol +- from uvicorn.protocols.websockets.websockets_sansio_impl import WebSocketSansIOProtocol ++ from uvicorn.protocols.websockets.websockets_sansio_impl import WebSocketsSansIOProtocol + from uvicorn.protocols.websockets.wsproto_impl import WSProtocol + +- Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol, WebSocketSansIOProtocol] ++ Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol, WebSocketsSansIOProtocol] + + HANDLED_SIGNALS = ( + signal.SIGINT, # Unix signal 2. Sent by Ctrl+C. + +From 035e7c38e98dbdbe81eae19f63ee8e1bfa1d1e4c Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sat, 14 Dec 2024 17:55:28 +0100 +Subject: [PATCH 3/7] lint + +--- + tests/middleware/test_proxy_headers.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py +index 62a51ab20..d300c45f8 100644 +--- a/tests/middleware/test_proxy_headers.py ++++ b/tests/middleware/test_proxy_headers.py +@@ -5,8 +5,8 @@ + import httpx + import httpx._transports.asgi + import pytest +- + import websockets.client ++ + from tests.response import Response + from tests.utils import run_server + from uvicorn._types import ASGIReceiveCallable, ASGISendCallable, Scope + +From eac77b7d86edb6a2ebcf9e2f380db18bb46fe684 Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sat, 14 Dec 2024 17:57:33 +0100 +Subject: [PATCH 4/7] pin python versions + +--- + requirements.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/requirements.txt b/requirements.txt +index fd2334d02..366a0963a 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -7,7 +7,8 @@ h11 @ git+https://github.com/python-hyper/h11.git@master + # Explicit optionals + a2wsgi==1.10.7 + wsproto==1.2.0 +-websockets==14.1 ++websockets==13.1; python_version < '3.9' ++websockets==14.1; python_version >= '3.9' + + # Packaging + build==1.2.2.post1 + +From 032c00c5a13167deb638a1a5e13c9ccee091598a Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sun, 15 Dec 2024 13:18:34 +0100 +Subject: [PATCH 5/7] Update requirements.txt + +--- + requirements.txt | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/requirements.txt b/requirements.txt +index 366a0963a..b3a464c0b 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -7,8 +7,7 @@ h11 @ git+https://github.com/python-hyper/h11.git@master + # Explicit optionals + a2wsgi==1.10.7 + wsproto==1.2.0 +-websockets==13.1; python_version < '3.9' +-websockets==14.1; python_version >= '3.9' ++websockets==13.1 + + # Packaging + build==1.2.2.post1 + +From c523508d5b5959bba65ebe1da2b4d3550e3c6674 Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sun, 15 Dec 2024 14:27:48 +0100 +Subject: [PATCH 6/7] Add a bit more coverage + +--- + tests/protocols/test_websocket.py | 23 +++++++++---------- + .../websockets/websockets_sansio_impl.py | 20 +++++++--------- + 2 files changed, 19 insertions(+), 24 deletions(-) + +diff --git a/tests/protocols/test_websocket.py b/tests/protocols/test_websocket.py +index 8971a7d97..e7285449c 100644 +--- a/tests/protocols/test_websocket.py ++++ b/tests/protocols/test_websocket.py +@@ -7,6 +7,8 @@ + import httpx + import pytest + import websockets ++import websockets.asyncio ++import websockets.asyncio.client + import websockets.client + import websockets.exceptions + from typing_extensions import TypedDict +@@ -603,18 +605,15 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable + + async def websocket_session(uri: str): + async with httpx.AsyncClient() as client: +- try: +- await client.get( +- f"http://127.0.0.1:{unused_tcp_port}", +- headers={ +- "upgrade": "websocket", +- "connection": "upgrade", +- "sec-websocket-version": "13", +- "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", +- }, +- ) +- except httpx.RemoteProtocolError: +- pass # pragma: no cover ++ await client.get( ++ f"http://127.0.0.1:{unused_tcp_port}", ++ headers={ ++ "upgrade": "websocket", ++ "connection": "upgrade", ++ "sec-websocket-version": "13", ++ "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", ++ }, ++ ) + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py +index ea70236b2..994af07e7 100644 +--- a/uvicorn/protocols/websockets/websockets_sansio_impl.py ++++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py +@@ -119,17 +119,14 @@ def eof_received(self) -> None: + pass + + def shutdown(self) -> None: +- if not self.transport.is_closing(): +- if self.handshake_complete: +- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) +- self.close_sent = True +- self.conn.send_close(1012) +- output = self.conn.data_to_send() +- self.transport.write(b"".join(output)) +- elif not self.handshake_initiated: +- self.send_500_response() +- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) +- self.transport.close() ++ if self.handshake_complete: ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) ++ self.conn.send_close(1012) ++ output = self.conn.data_to_send() ++ self.transport.write(b"".join(output)) ++ else: ++ self.send_500_response() ++ self.transport.close() + + def data_received(self, data: bytes) -> None: + self.conn.receive_data(data) +@@ -161,7 +158,6 @@ def handle_connect(self, event: Request) -> None: + self.request = event + self.response = self.conn.accept(event) + self.handshake_initiated = True +- # if status_code is not 101 return response + if self.response.status_code != 101: + self.handshake_complete = True + self.close_sent = True + +From f774f2fcb04b3cfe0f3046cdd9298b04b55daf9a Mon Sep 17 00:00:00 2001 +From: Marcelo Trylesinski +Date: Sat, 19 Apr 2025 15:45:45 +0200 +Subject: [PATCH 7/7] Apply comments + +--- + tests/middleware/test_logging.py | 3 ++- + uvicorn/protocols/websockets/websockets_sansio_impl.py | 6 +++--- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/tests/middleware/test_logging.py b/tests/middleware/test_logging.py +index 63d7daf83..1b8b4fbb1 100644 +--- a/tests/middleware/test_logging.py ++++ b/tests/middleware/test_logging.py +@@ -10,6 +10,7 @@ + import pytest + import websockets + import websockets.client ++from websockets.protocol import State + + from tests.utils import run_server + from uvicorn import Config +@@ -108,7 +109,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe + + async def open_connection(url: str): + async with websockets.client.connect(url) as websocket: +- return websocket.open ++ return websocket.state is State.OPEN + + config = Config( + app=websocket_app, +diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py +index 994af07e7..b518c8407 100644 +--- a/uvicorn/protocols/websockets/websockets_sansio_impl.py ++++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py +@@ -7,7 +7,7 @@ + from typing import Any, Literal, cast + from urllib.parse import unquote + +-from websockets import InvalidState ++from websockets.exceptions import InvalidState + from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory + from websockets.frames import Frame, Opcode + from websockets.http11 import Request +@@ -371,7 +371,7 @@ async def send(self, message: ASGISendEvent) -> None: + self.close_sent = True + self.transport.close() + else: +- msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." ++ msg = "Expected ASGI message 'websocket.send' or 'websocket.close', but got '%s'." + raise RuntimeError(msg % message_type) + except InvalidState: + raise ClientDisconnected() +@@ -390,7 +390,7 @@ async def send(self, message: ASGISendEvent) -> None: + self.transport.write(b"".join(output)) + self.transport.close() + else: +- msg = "Expected ASGI message 'websocket.http.response.body' " "but got '%s'." ++ msg = "Expected ASGI message 'websocket.http.response.body' but got '%s'." + raise RuntimeError(msg % message_type) + + else: diff --git a/user/uvicorn/2541_bump-wesockets-on-requirements.patch b/user/uvicorn/2541_bump-wesockets-on-requirements.patch new file mode 100644 index 0000000..6b9f671 --- /dev/null +++ b/user/uvicorn/2541_bump-wesockets-on-requirements.patch @@ -0,0 +1,559 @@ +diff --git a/requirements.txt b/requirements.txt +index e26e6b3..b16569f 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -7,7 +7,7 @@ h11 @ git+https://github.com/python-hyper/h11.git@master + # Explicit optionals + a2wsgi==1.10.7 + wsproto==1.2.0 +-websockets==13.1 ++websockets==14.1 + + # Packaging + build==1.2.2.post1 +diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py +index d300c45..4b5f195 100644 +--- a/tests/middleware/test_proxy_headers.py ++++ b/tests/middleware/test_proxy_headers.py +@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING + import httpx + import httpx._transports.asgi + import pytest +-import websockets.client ++from websockets.asyncio.client import connect + + from tests.response import Response + from tests.utils import run_server +@@ -479,7 +479,7 @@ async def test_proxy_headers_websocket_x_forwarded_proto( + async with run_server(config): + url = f"ws://127.0.0.1:{unused_tcp_port}" + headers = {X_FORWARDED_FOR: "1.2.3.4", X_FORWARDED_PROTO: forwarded_proto} +- async with websockets.client.connect(url, extra_headers=headers) as websocket: ++ async with connect(url, additional_headers=headers) as websocket: + data = await websocket.recv() + assert data == expected + +diff --git a/uvicorn/protocols/websockets/websockets_impl.py b/uvicorn/protocols/websockets/websockets_impl.py +index cd6c54f..685d6b6 100644 +--- a/uvicorn/protocols/websockets/websockets_impl.py ++++ b/uvicorn/protocols/websockets/websockets_impl.py +@@ -13,8 +13,7 @@ from websockets.datastructures import Headers + from websockets.exceptions import ConnectionClosed + from websockets.extensions.base import ServerExtensionFactory + from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory +-from websockets.legacy.server import HTTPResponse +-from websockets.server import WebSocketServerProtocol ++from websockets.legacy.server import HTTPResponse, WebSocketServerProtocol + from websockets.typing import Subprotocol + + from uvicorn._types import ( +diff --git a/uvicorn/protocols/websockets/wsproto_impl.py b/uvicorn/protocols/websockets/wsproto_impl.py +index 828afe5..5d84bff 100644 +--- a/uvicorn/protocols/websockets/wsproto_impl.py ++++ b/uvicorn/protocols/websockets/wsproto_impl.py +@@ -149,12 +149,13 @@ class WSProtocol(asyncio.Protocol): + self.writable.set() # pragma: full coverage + + def shutdown(self) -> None: +- if self.handshake_complete: +- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) +- output = self.conn.send(wsproto.events.CloseConnection(code=1012)) +- self.transport.write(output) +- else: +- self.send_500_response() ++ if not self.response_started: ++ if self.handshake_complete: ++ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) ++ output = self.conn.send(wsproto.events.CloseConnection(code=1012)) ++ self.transport.write(output) ++ else: ++ self.send_500_response() + self.transport.close() + + def on_task_complete(self, task: asyncio.Task[None]) -> None: +@@ -221,13 +222,15 @@ class WSProtocol(asyncio.Protocol): + def send_500_response(self) -> None: + if self.response_started or self.handshake_complete: + return # we cannot send responses anymore ++ reject_data = b"Internal Server Error" + headers: list[tuple[bytes, bytes]] = [ + (b"content-type", b"text/plain; charset=utf-8"), ++ (b"content-length", str(len(reject_data)).encode()), + (b"connection", b"close"), + (b"content-length", b"21"), + ] + output = self.conn.send(wsproto.events.RejectConnection(status_code=500, headers=headers, has_body=True)) +- output += self.conn.send(wsproto.events.RejectData(data=b"Internal Server Error")) ++ output += self.conn.send(wsproto.events.RejectData(data=reject_data)) + self.transport.write(output) + + async def run_asgi(self) -> None: +diff --git a/tests/middleware/test_logging.py.orig b/tests/middleware/test_logging.py +index 1b8b4fbb108..a8a74ee8ca0 100644 +--- a/tests/middleware/test_logging.py.orig ++++ b/tests/middleware/test_logging.py +@@ -8,8 +8,7 @@ import typing + + import httpx + import pytest +-import websockets +-import websockets.client ++from websockets.asyncio.client import connect + from websockets.protocol import State + + from tests.utils import run_server +@@ -108,8 +107,8 @@ async def test_trace_logging_on_ws_protocol( + break + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.state is State.OPEN ++ async with connect(url): ++ return True + + config = Config( + app=websocket_app, +diff --git a/tests/protocols/test_websocket.py.orig b/tests/protocols/test_websocket.py +index 399769b6395..9971f4bbecd 100644 +--- a/tests/protocols/test_websocket.py.orig ++++ b/tests/protocols/test_websocket.py +@@ -11,6 +11,8 @@ import websockets.asyncio + import websockets.asyncio.client + import websockets.client + import websockets.exceptions ++from websockets.asyncio.client import ClientConnection, connect ++from websockets.exceptions import ConnectionClosed, ConnectionClosedError, InvalidHandshake, InvalidStatus + from websockets.extensions.permessage_deflate import ClientPerMessageDeflateFactory + from websockets.typing import Subprotocol + +@@ -126,8 +128,8 @@ async def test_accept_connection(ws_protocol_cls: WSProtocol, http_protocol_cls: + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.open ++ async with connect(url): ++ return True + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -142,7 +144,7 @@ async def test_shutdown(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProt + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config) as server: +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}"): ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}"): + # Attempt shutdown while connection is still open + await server.shutdown() + +@@ -156,8 +158,8 @@ async def test_supports_permessage_deflate_extension( + + async def open_connection(url: str): + extension_factories = [ClientPerMessageDeflateFactory()] +- async with websockets.client.connect(url, extensions=extension_factories) as websocket: +- return [extension.name for extension in websocket.extensions] ++ async with connect(url, extensions=extension_factories) as websocket: ++ return [extension.name for extension in websocket.protocol.extensions] + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -176,8 +178,8 @@ async def test_can_disable_permessage_deflate_extension( + # enable per-message deflate on the client, so that we can check the server + # won't support it when it's disabled. + extension_factories = [ClientPerMessageDeflateFactory()] +- async with websockets.client.connect(url, extensions=extension_factories) as websocket: +- return [extension.name for extension in websocket.extensions] ++ async with connect(url, extensions=extension_factories) as websocket: ++ return [extension.name for extension in websocket.protocol.extensions] + + config = Config( + app=App, +@@ -199,8 +201,8 @@ async def test_close_connection(ws_protocol_cls: WSProtocol, http_protocol_cls: + + async def open_connection(url: str): + try: +- await websockets.client.connect(url) +- except websockets.exceptions.InvalidHandshake: ++ await connect(url) ++ except InvalidHandshake: + return False + return True # pragma: no cover + +@@ -220,8 +222,8 @@ async def test_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProto + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url, extra_headers=[("username", "abraão")]) as websocket: +- return websocket.open ++ async with connect(url, additional_headers=[("username", "abraão")]): ++ return True + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -235,8 +237,9 @@ async def test_extra_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: HTT + await self.send({"type": "websocket.accept", "headers": [(b"extra", b"header")]}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.response_headers ++ async with connect(url) as websocket: ++ assert websocket.response ++ return websocket.response.headers + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -254,8 +257,8 @@ async def test_path_and_raw_path(ws_protocol_cls: WSProtocol, http_protocol_cls: + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.open ++ async with connect(url): ++ return True + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -272,7 +275,7 @@ async def test_send_text_data_to_client( + await self.send({"type": "websocket.send", "text": "123"}) + + async def get_data(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + return await websocket.recv() + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) +@@ -290,7 +293,7 @@ async def test_send_binary_data_to_client( + await self.send({"type": "websocket.send", "bytes": b"123"}) + + async def get_data(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + return await websocket.recv() + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) +@@ -309,7 +312,7 @@ async def test_send_and_close_connection( + await self.send({"type": "websocket.close"}) + + async def get_data(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + data = await websocket.recv() + is_open = True + try: +@@ -338,7 +341,7 @@ async def test_send_text_data_to_server( + await self.send({"type": "websocket.send", "text": _text}) + + async def send_text(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + await websocket.send("abc") + return await websocket.recv() + +@@ -361,7 +364,7 @@ async def test_send_binary_data_to_server( + await self.send({"type": "websocket.send", "bytes": _bytes}) + + async def send_text(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + await websocket.send(b"abc") + return await websocket.recv() + +@@ -383,7 +386,7 @@ async def test_send_after_protocol_close( + await self.send({"type": "websocket.send", "text": "123"}) + + async def get_data(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + data = await websocket.recv() + is_open = True + try: +@@ -403,14 +406,14 @@ async def test_missing_handshake(ws_protocol_cls: WSProtocol, http_protocol_cls: + async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): + pass + +- async def connect(url: str): +- await websockets.client.connect(url) ++ async def open_connection(url: str): ++ await connect(url) + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: +- await connect(f"ws://127.0.0.1:{unused_tcp_port}") +- assert exc_info.value.status_code == 500 ++ with pytest.raises(InvalidStatus) as exc_info: ++ await open_connection(f"ws://127.0.0.1:{unused_tcp_port}") ++ assert exc_info.value.response.status_code == 500 + + + async def test_send_before_handshake( +@@ -419,14 +422,14 @@ async def test_send_before_handshake( + async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): + await send({"type": "websocket.send", "text": "123"}) + +- async def connect(url: str): +- await websockets.client.connect(url) ++ async def open_connection(url: str): ++ await connect(url) + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: +- await connect(f"ws://127.0.0.1:{unused_tcp_port}") +- assert exc_info.value.status_code == 500 ++ with pytest.raises(InvalidStatus) as exc_info: ++ await open_connection(f"ws://127.0.0.1:{unused_tcp_port}") ++ assert exc_info.value.response.status_code == 500 + + + async def test_duplicate_handshake(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int): +@@ -436,10 +439,10 @@ async def test_duplicate_handshake(ws_protocol_cls: WSProtocol, http_protocol_cl + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: +- with pytest.raises(websockets.exceptions.ConnectionClosed): ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: ++ with pytest.raises(ConnectionClosed): + _ = await websocket.recv() +- assert websocket.close_code == 1006 ++ assert websocket.protocol.close_code == 1006 + + + async def test_asgi_return_value(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int): +@@ -454,10 +457,10 @@ async def test_asgi_return_value(ws_protocol_cls: WSProtocol, http_protocol_cls: + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: +- with pytest.raises(websockets.exceptions.ConnectionClosed): ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: ++ with pytest.raises(ConnectionClosed): + _ = await websocket.recv() +- assert websocket.close_code == 1006 ++ assert websocket.protocol.close_code == 1006 + + + @pytest.mark.parametrize("code", [None, 1000, 1001]) +@@ -489,13 +492,13 @@ async def test_app_close( + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: + await websocket.ping() + await websocket.send("abc") +- with pytest.raises(websockets.exceptions.ConnectionClosed): ++ with pytest.raises(ConnectionClosed): + await websocket.recv() +- assert websocket.close_code == (code or 1000) +- assert websocket.close_reason == (reason or "") ++ assert websocket.protocol.close_code == (code or 1000) ++ assert websocket.protocol.close_reason == (reason or "") + + + async def test_client_close(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int): +@@ -514,7 +517,7 @@ async def test_client_close(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTP + break + + async def websocket_session(url: str): +- async with websockets.client.connect(url) as websocket: ++ async with connect(url) as websocket: + await websocket.ping() + await websocket.send("abc") + await websocket.close(code=1001, reason="custom reason") +@@ -551,7 +554,7 @@ async def test_client_connection_lost( + port=unused_tcp_port, + ) + async with run_server(config): +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: + websocket.transport.close() + await asyncio.sleep(0.1) + got_disconnect_event_before_shutdown = got_disconnect_event +@@ -579,7 +582,7 @@ async def test_client_connection_lost_on_send( + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): + url = f"ws://127.0.0.1:{unused_tcp_port}" +- async with websockets.client.connect(url): ++ async with connect(url): + await asyncio.sleep(0.1) + disconnect.set() + +@@ -638,11 +641,11 @@ async def test_send_close_on_server_shutdown( + disconnect_message = message + break + +- websocket: websockets.client.WebSocketClientProtocol | None = None ++ websocket: ClientConnection | None = None + + async def websocket_session(uri: str): + nonlocal websocket +- async with websockets.client.connect(uri) as ws_connection: ++ async with connect(uri) as ws_connection: + websocket = ws_connection + await server_shutdown_event.wait() + +@@ -672,9 +675,7 @@ async def test_subprotocols( + await self.send({"type": "websocket.accept", "subprotocol": subprotocol}) + + async def get_subprotocol(url: str): +- async with websockets.client.connect( +- url, subprotocols=[Subprotocol("proto1"), Subprotocol("proto2")] +- ) as websocket: ++ async with connect(url, subprotocols=[Subprotocol("proto1"), Subprotocol("proto2")]) as websocket: + return websocket.subprotocol + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) +@@ -684,7 +685,7 @@ async def test_subprotocols( + + + MAX_WS_BYTES = 1024 * 1024 * 16 +-MAX_WS_BYTES_PLUS1 = MAX_WS_BYTES + 1 ++MAX_WS_BYTES_PLUS1 = MAX_WS_BYTES + 10 + + + @pytest.mark.parametrize( +@@ -727,15 +728,15 @@ async def test_send_binary_data_to_server_bigger_than_default_on_websockets( + port=unused_tcp_port, + ) + async with run_server(config): +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}", max_size=client_size_sent) as ws: ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}", max_size=client_size_sent) as ws: + await ws.send(b"\x01" * client_size_sent) + if expected_result == 0: + data = await ws.recv() + assert data == b"\x01" * client_size_sent + else: +- with pytest.raises(websockets.exceptions.ConnectionClosedError): ++ with pytest.raises(ConnectionClosedError): + await ws.recv() +- assert ws.close_code == expected_result ++ assert ws.protocol.close_code == expected_result + + + async def test_server_reject_connection( +@@ -760,10 +761,10 @@ async def test_server_reject_connection( + disconnected_message = await receive() + + async def websocket_session(url: str): +- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: +- async with websockets.client.connect(url): ++ with pytest.raises(InvalidStatus) as exc_info: ++ async with connect(url): + pass # pragma: no cover +- assert exc_info.value.status_code == 403 ++ assert exc_info.value.response.status_code == 403 + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -933,10 +934,10 @@ async def test_server_reject_connection_with_invalid_msg( + await send(message) + + async def websocket_session(url: str): +- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: +- async with websockets.client.connect(url): ++ with pytest.raises(InvalidStatus) as exc_info: ++ async with connect(url): + pass # pragma: no cover +- assert exc_info.value.status_code == 404 ++ assert exc_info.value.response.status_code == 404 + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -967,10 +968,10 @@ async def test_server_reject_connection_with_missing_body( + # no further message + + async def websocket_session(url: str): +- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: +- async with websockets.client.connect(url): ++ with pytest.raises(InvalidStatus) as exc_info: ++ async with connect(url): + pass # pragma: no cover +- assert exc_info.value.status_code == 404 ++ assert exc_info.value.response.status_code == 404 + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -1010,10 +1011,10 @@ async def test_server_multiple_websocket_http_response_start_events( + exception_message = str(exc) + + async def websocket_session(url: str): +- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: +- async with websockets.client.connect(url): ++ with pytest.raises(InvalidStatus) as exc_info: ++ async with connect(url): + pass # pragma: no cover +- assert exc_info.value.status_code == 404 ++ assert exc_info.value.response.status_code == 404 + + config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -1049,7 +1050,7 @@ async def test_server_can_read_messages_in_buffer_after_close( + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: ++ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: + await websocket.send(b"abc") + await websocket.send(b"abc") + await websocket.send(b"abc") +@@ -1066,8 +1067,9 @@ async def test_default_server_headers( + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.response_headers ++ async with connect(url) as websocket: ++ assert websocket.response ++ return websocket.response.headers + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -1081,8 +1083,9 @@ async def test_no_server_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.response_headers ++ async with connect(url) as websocket: ++ assert websocket.response ++ return websocket.response.headers + + config = Config( + app=App, +@@ -1104,8 +1107,9 @@ async def test_no_date_header_on_wsproto(http_protocol_cls: HTTPProtocol, unused + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.response_headers ++ async with connect(url) as websocket: ++ assert websocket.response ++ return websocket.response.headers + + config = Config( + app=App, +@@ -1136,8 +1140,9 @@ async def test_multiple_server_header( + ) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.response_headers ++ async with connect(url) as websocket: ++ assert websocket.response ++ return websocket.response.headers + + config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) + async with run_server(config): +@@ -1172,8 +1177,8 @@ async def test_lifespan_state(ws_protocol_cls: WSProtocol, http_protocol_cls: HT + await self.send({"type": "websocket.accept"}) + + async def open_connection(url: str): +- async with websockets.client.connect(url) as websocket: +- return websocket.open ++ async with connect(url): ++ return True + + async def app_wrapper(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): + if scope["type"] == "lifespan": diff --git a/user/uvicorn/APKBUILD b/user/uvicorn/APKBUILD new file mode 100644 index 0000000..62d0a4c --- /dev/null +++ b/user/uvicorn/APKBUILD @@ -0,0 +1,55 @@ +maintainer="Michał Polański " +pkgname=uvicorn +pkgver=0.34.2 +pkgrel=0 +pkgdesc="Lightning-fast ASGI server" +url="https://www.uvicorn.org/" +license="BSD-3-Clause" +arch="noarch" +depends="py3-click py3-h11" +makedepends="py3-gpep517 py3-hatchling" +checkdepends=" + py3-a2wsgi + py3-dotenv + py3-httptools + py3-httpx + py3-pytest + py3-pytest-mock + py3-pytest-xdist + py3-trustme + py3-typing-extensions + py3-watchfiles + py3-websockets + py3-wsproto + py3-yaml + " +subpackages="$pkgname-pyc" +source="https://github.com/encode/uvicorn/archive/$pkgver/uvicorn-$pkgver.tar.gz + test_multiprocess.patch + 2540_add-websocketssansioprotocol.patch + 2541_bump-wesockets-on-requirements.patch + " + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest -v +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/uvicorn-$pkgver-py3-none-any.whl +} + +sha512sums=" +e8d4dbf182a47431ab9485a8f1072b327c2adb97e4489dcad08835d2759241539971192781cffe4cbb12ff68e70b040e07ad60fe274aa1d62320ad0d63278e64 uvicorn-0.34.2.tar.gz +cfad91dd84f8974362f52d754d7a29f09d07927a46acaa0eb490b6115a5729d84d6df94fead10ccd4cce7f5ea376f1348b0f59daede661dd8373a3851c313c46 test_multiprocess.patch +a3850f030b936c219041266c9ff9050614a5ac6252ff56462c73f2a6114502da460684c10c86f0c5b5054677e89798602ee84cf39c132be6f8bf9946e41f1e79 2540_add-websocketssansioprotocol.patch +b4ef7e63f3fe9e3b499b5a57bb368fcde98c084f5cca42683188c1047d109bdac158e06eeb5a7fb3e61075a1918761c8b0a59a8f7856704bba9234222529de7d 2541_bump-wesockets-on-requirements.patch +" diff --git a/user/uvicorn/test_multiprocess.patch b/user/uvicorn/test_multiprocess.patch new file mode 100644 index 0000000..231526e --- /dev/null +++ b/user/uvicorn/test_multiprocess.patch @@ -0,0 +1,14 @@ +Wait a bit longer, otherwise the workers might +not have time to finish restarting. + +--- a/tests/supervisors/test_multiprocess.py ++++ b/tests/supervisors/test_multiprocess.py +@@ -132,7 +132,7 @@ def test_multiprocess_sighup() -> None: + time.sleep(1) + pids = [p.pid for p in supervisor.processes] + supervisor.signal_queue.append(signal.SIGHUP) +- time.sleep(1) ++ time.sleep(3) + assert pids != [p.pid for p in supervisor.processes] + supervisor.signal_queue.append(signal.SIGINT) + supervisor.join_all() From 39b8c7c45d82481d8dcc9a33c7263ab754082707 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:27:01 -0400 Subject: [PATCH 605/738] user/paperless-ngx: re-enable --- user/paperless-ngx/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/paperless-ngx/APKBUILD b/user/paperless-ngx/APKBUILD index 9a6e7ab..01ea699 100644 --- a/user/paperless-ngx/APKBUILD +++ b/user/paperless-ngx/APKBUILD @@ -9,7 +9,7 @@ license="GPL-3.0-only" # s390x: ocrmypdf py3-joblib py3-scikit-learn py3-watchfiles # armhf / ppc64le: py3-uvloop # all: uvicorn doesn't yet work with websockets 14 -# arch="noarch !s390x !armhf !ppc64le" +arch="noarch !s390x !armhf !ppc64le" install="$pkgname.post-install $pkgname.post-upgrade $pkgname.pre-install" depends=" file From a6c26bc587dd9f2f4b0f6cc7bcb3528adccd3bac Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:27:43 -0400 Subject: [PATCH 606/738] user/tandoor-recipes: enable build --- user/tandoor-recipes/APKBUILD | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 6ae8824..75ecd85 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -4,8 +4,7 @@ pkgname=tandoor-recipes pkgver=1.5.12 pkgrel=1 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." -# FTBFS -# arch="noarch" +arch="noarch" url="https://github.com/TandoorRecipes/recipes" license="AGPL-3.0-only" depends=" From 41cd4ce83b8cd1febd72121966bff9afb2040435 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 19:28:27 -0400 Subject: [PATCH 607/738] user/xochitl-bin: drop due to pmos --- user/xochitl-bin/APKBUILD | 50 ------------------------------------- user/xochitl-bin/xochitl.sh | 12 --------- 2 files changed, 62 deletions(-) delete mode 100644 user/xochitl-bin/APKBUILD delete mode 100755 user/xochitl-bin/xochitl.sh diff --git a/user/xochitl-bin/APKBUILD b/user/xochitl-bin/APKBUILD deleted file mode 100644 index 4ea4dfa..0000000 --- a/user/xochitl-bin/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=xochitl-bin -pkgver=2.15.1.1189 -_pkgprefix=Xdvv3lBmE4 -pkgrel=1 -pkgdesc="Image extractor for reMarkable firmware files" -arch="armv7" -url="https://archive.org/download/rm110/RM110/" -license="MIT" -makedepends="rm-extractor p7zip" -options="!check !strip !tracedeps" # No testsuite -subpackages="$pkgname-rm1 $pkgname-rm2" -builddir="$srcdir" -source=" - $pkgname-rm1-$pkgver.signed::https://archive.org/download/rm110/RM110/2.15.1.1189_reMarkable-Xdvv3lBmE4-.signed - $pkgname-rm2-$pkgver.signed::https://archive.org/download/rm110/RM110/2.15.1.1189_reMarkable2-wVbHkgKisg-.signed - xochitl.sh -" -package() { - install -vdm755 "$pkgdir"/var/lib/$pkgname - install -vDm755 "$srcdir"/xochitl.sh "$pkgdir"/usr/bin/xochitl -} - -rm1() { - depends="$pkgname" - - mkdir -p "$subpkgdir"/usr/lib/$pkgname - cd "$subpkgdir"/usr/lib/$pkgname - rm-extractor "$builddir"/$pkgname-rm1-$pkgver.signed - 7z x out || true - rm out -} - -rm2() { - depends="$pkgname" - - mkdir -p "$subpkgdir"/usr/lib/$pkgname - cd "$subpkgdir"/usr/lib/$pkgname - rm-extractor "$builddir"/$pkgname-rm1-$pkgver.signed - 7z x out || true - rm out -} - -sha512sums=" -294a5dccebb11366ad4e9a39d15829f310f575044f6e4db2747364ae61ef984cf3e0a8f09f3a33f157365b637d0217f34a01000eff3f92dd177afd011c7b2c9f xochitl-bin-rm1-2.15.1.1189.signed -6b2baac5c970ddfbf84f376fbfd22dab0a72979160b6889352bb2464f46f9d85d0fdc9f5754dbcb431b3629df833e64913c81aa7838f636cce11b00413d8506e xochitl-bin-rm2-2.15.1.1189.signed -e0f7ce6a5a29f98929339f55a2073b251ce76802c244473677be35eeef82e0e840edddfdfe56f8dc16fe80865d22e8dd35f3815f716903966768c3d9300831f2 xochitl.sh -" diff --git a/user/xochitl-bin/xochitl.sh b/user/xochitl-bin/xochitl.sh deleted file mode 100755 index 1e02b34..0000000 --- a/user/xochitl-bin/xochitl.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# we chroot into codex root, thus need to bind mount -mount -o bind /dev /usr/lib/xochitl-bin/dev -mount -o bind /proc /usr/lib/xochitl-bin/proc -mount -o bind /sys /usr/lib/xochitl-bin/sys - -# xochitl expects home to be mounted -mount -o bind /var/lib/xochitl-bin /usr/lib/xochitl-bin/home/root - -# start xochitl -chroot /usr/lib/xochitl-bin /usr/bin/xochitl From 20281faaf5e5ae13ae35597318014c70358174b1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:37:42 -0400 Subject: [PATCH 608/738] backports/airsonic-advanced: drop for lack of need --- backports/airsonic-advanced/APKBUILD | 48 ------------------- .../airsonic-advanced/airsonic-advanced.initd | 14 ------ .../airsonic-advanced.pre-install | 6 --- backports/airsonic-advanced/maven.patch | 8 ---- 4 files changed, 76 deletions(-) delete mode 100644 backports/airsonic-advanced/APKBUILD delete mode 100644 backports/airsonic-advanced/airsonic-advanced.initd delete mode 100644 backports/airsonic-advanced/airsonic-advanced.pre-install delete mode 100644 backports/airsonic-advanced/maven.patch diff --git a/backports/airsonic-advanced/APKBUILD b/backports/airsonic-advanced/APKBUILD deleted file mode 100644 index ec5e7c1..0000000 --- a/backports/airsonic-advanced/APKBUILD +++ /dev/null @@ -1,48 +0,0 @@ -# Contributor: Kay Thomas -# Maintainer: Kay Thomas -pkgname=airsonic-advanced -_sha=1397446f979b1cdea283eec89ce4f0eae7d63450 -pkgver=11.0.0_git20230217 -pkgrel=0 -pkgdesc="Modern implementation of the Airsonic fork with several key performance and feature enhancements" -url="https://github.com/airsonic-advanced/airsonic-advanced" -# inconsistent test and build failures on other arches -arch="x86_64" -license="GPL-3.0-or-later" -depends="openjdk11" -makedepends="maven" -subpackages="$pkgname-openrc" -pkgusers="airsonic-advanced" -pkggroups="airsonic-advanced" -install="$pkgname.pre-install" -source="$pkgname-$pkgver.tar.gz::https://github.com/airsonic-advanced/airsonic-advanced/archive/$_sha.tar.gz - maven.patch - airsonic-advanced.initd - " -builddir="$srcdir/$pkgname-$_sha" - -build() { - mvn clean package -DskipTests -} - -check() { - mvn test -} - -package() { - install -dm755 -o airsonic-advanced -g airsonic-advanced \ - "$pkgdir"/var/airsonic - - install -m755 -o airsonic-advanced -g airsonic-advanced \ - "$builddir"/airsonic-main/target/airsonic.war \ - "$pkgdir"/var/airsonic/airsonic.war - - install -Dm755 "$srcdir"/$pkgname.initd \ - "$pkgdir"/etc/init.d/$pkgname -} - -sha512sums=" -f415620bdbed9fb3874afbf30d9362e68b1e9e8e90dbbed4ca3206b643cad97ca0558e64ec5b4440382f0ec908c3325e321ea3631c38ff9a2109163c8f0cfe0b airsonic-advanced-11.0.0_git20230217.tar.gz -6cb52fee19815fcdf2596e55d97d3e750321b1df7a4fec36fc9bc2a57d4be979a3905a42d3aa9dbeb2bf0d4f56edbf344f13551219b8e4d2ca583abd4bb5c8f9 maven.patch -ca87e6a7199950e6ac52aeb076a03f831d60ee9d4ceed47366bbd78443765d205796d895ebb244051d8033e5b2e9ccd648d20434039c854b8b50e766cc5cd10d airsonic-advanced.initd -" diff --git a/backports/airsonic-advanced/airsonic-advanced.initd b/backports/airsonic-advanced/airsonic-advanced.initd deleted file mode 100644 index c1ce9bd..0000000 --- a/backports/airsonic-advanced/airsonic-advanced.initd +++ /dev/null @@ -1,14 +0,0 @@ -#!/sbin/openrc-run - -supervisor=supervise-daemon -name="airsonic-advanced" -command="/usr/lib/jvm/java-11-openjdk/jre/bin/java" -command_args="-jar airsonic.war" -command_user="airsonic-advanced:airsonic-advanced" -directory="/var/airsonic" -pidfile="/run/airsonic-advanced.pid" - -depend() { - need net localmount - after firewall -} diff --git a/backports/airsonic-advanced/airsonic-advanced.pre-install b/backports/airsonic-advanced/airsonic-advanced.pre-install deleted file mode 100644 index 373b896..0000000 --- a/backports/airsonic-advanced/airsonic-advanced.pre-install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -addgroup -S airsonic-advanced 2>/dev/null -adduser -S -D -H -s /sbin/nologin -G airsonic-advanced -g airsonic-advanced airsonic-advanced 2>/dev/null - -exit 0 diff --git a/backports/airsonic-advanced/maven.patch b/backports/airsonic-advanced/maven.patch deleted file mode 100644 index 56594b6..0000000 --- a/backports/airsonic-advanced/maven.patch +++ /dev/null @@ -1,8 +0,0 @@ -fixes maven 3.9 breaking change -https://maven.apache.org/docs/3.9.0/release-notes.html#potentially-breaking-core-changes ---- airsonic-advanced-1397446f979b1cdea283eec89ce4f0eae7d63450/.mvn/maven.config -+++ airsonic-advanced-1397446f979b1cdea283eec89ce4f0eae7d63450/.mvn/maven.config -@@ -1 +1,2 @@ ----settings ./.mvn/settings.xml -+--settings -+./.mvn/settings.xml From 012a294f6db18b2e5545cf601a3e44527303d4f0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:38:39 -0400 Subject: [PATCH 609/738] backports/perl-math-random-isaac-xs: drop for lack of need --- backports/perl-math-random-isaac-xs/APKBUILD | 39 -------------------- 1 file changed, 39 deletions(-) delete mode 100644 backports/perl-math-random-isaac-xs/APKBUILD diff --git a/backports/perl-math-random-isaac-xs/APKBUILD b/backports/perl-math-random-isaac-xs/APKBUILD deleted file mode 100644 index 8cb2f95..0000000 --- a/backports/perl-math-random-isaac-xs/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Automatically generated by apkbuild-cpan, template 4 -# Contributor: Timo Teräs -# Maintainer: Celeste -maintainer="Celeste " -pkgname=perl-math-random-isaac-xs -pkgver=1.004 -pkgrel=8 -#_pkgreal is used by apkbuild-cpan to find modules at MetaCpan -_pkgreal=Math-Random-ISAAC-XS -pkgdesc="C implementation of the ISAAC PRNG algorithm" -url="https://metacpan.org/release/Math-Random-ISAAC-XS/" -arch="all" -license="Public-Domain" -depends="perl" -makedepends="perl-dev perl-module-build" -checkdepends="perl-test-nowarnings" -subpackages="$pkgname-doc" -source="https://cpan.metacpan.org/authors/id/J/JA/JAWNSY/Math-Random-ISAAC-XS-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" - -build() { - export CFLAGS=$(perl -MConfig -E 'say $Config{ccflags}') - perl Build.PL \ - --installdirs=vendor \ - --create_packlist=0 - ./Build -} - -check() { - ./Build test -} - -package() { - ./Build install --destdir="$pkgdir" -} - -sha512sums=" -40c46b5f247f585a407ef9f36b5874d9cf03ec05963a9d92d988ebd63daf1e37b1b51308845d4596f47b5ad7203953bcb7fbb421c905b526dbe99b246ccb4d87 Math-Random-ISAAC-XS-1.004.tar.gz -" From 166b95251601ceb3d0cde812f5d26a69b3a5eb58 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:39:26 -0400 Subject: [PATCH 610/738] unmaintained/rstudio-desktop: move from user --- .../rstudio-desktop/12317_support-system-yaml-cpp.patch | 0 {user => unmaintained}/rstudio-desktop/APKBUILD | 0 {user => unmaintained}/rstudio-desktop/cran_multithread.patch | 0 .../rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch | 0 {user => unmaintained}/rstudio-desktop/filepath-use-unistd.patch | 0 {user => unmaintained}/rstudio-desktop/nodejs-external.patch | 0 {user => unmaintained}/rstudio-desktop/qt.conf | 0 .../rstudio-desktop/sessionhistoryarchive-use-ctime.patch | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/rstudio-desktop/12317_support-system-yaml-cpp.patch (100%) rename {user => unmaintained}/rstudio-desktop/APKBUILD (100%) rename {user => unmaintained}/rstudio-desktop/cran_multithread.patch (100%) rename {user => unmaintained}/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch (100%) rename {user => unmaintained}/rstudio-desktop/filepath-use-unistd.patch (100%) rename {user => unmaintained}/rstudio-desktop/nodejs-external.patch (100%) rename {user => unmaintained}/rstudio-desktop/qt.conf (100%) rename {user => unmaintained}/rstudio-desktop/sessionhistoryarchive-use-ctime.patch (100%) diff --git a/user/rstudio-desktop/12317_support-system-yaml-cpp.patch b/unmaintained/rstudio-desktop/12317_support-system-yaml-cpp.patch similarity index 100% rename from user/rstudio-desktop/12317_support-system-yaml-cpp.patch rename to unmaintained/rstudio-desktop/12317_support-system-yaml-cpp.patch diff --git a/user/rstudio-desktop/APKBUILD b/unmaintained/rstudio-desktop/APKBUILD similarity index 100% rename from user/rstudio-desktop/APKBUILD rename to unmaintained/rstudio-desktop/APKBUILD diff --git a/user/rstudio-desktop/cran_multithread.patch b/unmaintained/rstudio-desktop/cran_multithread.patch similarity index 100% rename from user/rstudio-desktop/cran_multithread.patch rename to unmaintained/rstudio-desktop/cran_multithread.patch diff --git a/user/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch b/unmaintained/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch similarity index 100% rename from user/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch rename to unmaintained/rstudio-desktop/desktop-main-skip-nosandbox-on-musl.patch diff --git a/user/rstudio-desktop/filepath-use-unistd.patch b/unmaintained/rstudio-desktop/filepath-use-unistd.patch similarity index 100% rename from user/rstudio-desktop/filepath-use-unistd.patch rename to unmaintained/rstudio-desktop/filepath-use-unistd.patch diff --git a/user/rstudio-desktop/nodejs-external.patch b/unmaintained/rstudio-desktop/nodejs-external.patch similarity index 100% rename from user/rstudio-desktop/nodejs-external.patch rename to unmaintained/rstudio-desktop/nodejs-external.patch diff --git a/user/rstudio-desktop/qt.conf b/unmaintained/rstudio-desktop/qt.conf similarity index 100% rename from user/rstudio-desktop/qt.conf rename to unmaintained/rstudio-desktop/qt.conf diff --git a/user/rstudio-desktop/sessionhistoryarchive-use-ctime.patch b/unmaintained/rstudio-desktop/sessionhistoryarchive-use-ctime.patch similarity index 100% rename from user/rstudio-desktop/sessionhistoryarchive-use-ctime.patch rename to unmaintained/rstudio-desktop/sessionhistoryarchive-use-ctime.patch From 27e1275d13b8e21e42944f37de53908ebc599415 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:40:30 -0400 Subject: [PATCH 611/738] unmaintained/mathjax2: move from user --- unmaintained/mathjax2/APKBUILD | 53 ++++++++++++++++++---------------- user/mathjax2/APKBUILD | 38 ------------------------ 2 files changed, 28 insertions(+), 63 deletions(-) delete mode 100644 user/mathjax2/APKBUILD diff --git a/unmaintained/mathjax2/APKBUILD b/unmaintained/mathjax2/APKBUILD index 3075ca1..ceb2b15 100644 --- a/unmaintained/mathjax2/APKBUILD +++ b/unmaintained/mathjax2/APKBUILD @@ -1,35 +1,38 @@ -# $Id: PKGBUILD 362427 2018-07-19 17:42:59Z arojas $ -# Maintainer: Antonio Rojas -# Contributor: Kevin Dodd -# Contributor: Tianjiao Yin +# Maintainer: Antoine Martin (ayakael) +# Contributor: Antoine Martin (ayakael) pkgname=mathjax2 pkgver=2.7.9 -pkgrel=0 -pkgdesc='An open source JavaScript display engine for mathematics that works in all modern browsers' -url='https://www.mathjax.org/' +pkgrel=1 +pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" +url="https://www.mathjax.org/" arch=noarch -license=Apache +license="Apache-2.0" source="$pkgname-$pkgver.tar.gz::https://github.com/mathjax/MathJax/archive/$pkgver.tar.gz" -options=!check +builddir="$srcdir"/MathJax-$pkgver +options="!check" # No testsuite -prepare() { - cd $srcdir/MathJax-$pkgver - -# Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation - rm -r docs test unpacked - rm -r fonts/HTML-CSS/TeX/png - for _format in eot otf svg ; do - find . -type d -name "$_format" -prune -exec rm -rf {} \; - done +build() { + # Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation + for i in docs test unpacked fonts/HTML-CSS/TeX/png; do + rm -r $i + done + for _format in eot otf svg ; do + find . -type d -name "$_format" -prune -exec rm -rf {} \; + done } package() { - cd ${srcdir} - mkdir -p "$pkgdir"/usr/share/fonts "$pkgdir"/usr/share/licenses/mathjax2 - cp -a MathJax-$pkgver "$pkgdir"/usr/share/mathjax2 - mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 - ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts - mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ + mkdir -p \ + "$pkgdir"/usr/share/fonts \ + "$pkgdir"/usr/share/licenses/mathjax2 + + cp -a "$builddir" "$pkgdir"/usr/share/mathjax2 + + mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 + ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts + mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ } -sha512sums="ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz" +sha512sums=" +ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz +" diff --git a/user/mathjax2/APKBUILD b/user/mathjax2/APKBUILD deleted file mode 100644 index ceb2b15..0000000 --- a/user/mathjax2/APKBUILD +++ /dev/null @@ -1,38 +0,0 @@ -# Maintainer: Antoine Martin (ayakael) -# Contributor: Antoine Martin (ayakael) - -pkgname=mathjax2 -pkgver=2.7.9 -pkgrel=1 -pkgdesc="An open source JavaScript display engine for mathematics that works in all modern browsers" -url="https://www.mathjax.org/" -arch=noarch -license="Apache-2.0" -source="$pkgname-$pkgver.tar.gz::https://github.com/mathjax/MathJax/archive/$pkgver.tar.gz" -builddir="$srcdir"/MathJax-$pkgver -options="!check" # No testsuite - -build() { - # Remove unneeded stuff, see https://github.com/mathjax/MathJax-docs/wiki/Guide%3A-reducing-size-of-a-mathjax-installation - for i in docs test unpacked fonts/HTML-CSS/TeX/png; do - rm -r $i - done - for _format in eot otf svg ; do - find . -type d -name "$_format" -prune -exec rm -rf {} \; - done -} - -package() { - mkdir -p \ - "$pkgdir"/usr/share/fonts \ - "$pkgdir"/usr/share/licenses/mathjax2 - - cp -a "$builddir" "$pkgdir"/usr/share/mathjax2 - - mv "$pkgdir"/usr/share/mathjax2/fonts "$pkgdir"/usr/share/fonts/mathjax2 - ln -s /usr/share/fonts/mathjax2 "$pkgdir"/usr/share/mathjax2/fonts - mv "$pkgdir"/usr/share/mathjax2/LICENSE "$pkgdir"/usr/share/licenses/mathjax2/ -} -sha512sums=" -ac7b2dfc6064148e941e5ee05361467514e5f28449dbb697ff1df556968ccb71f501c4021ade285cbbb995983513669c14d9c06886a7b83a5c75fa30504fa8ab mathjax2-2.7.9.tar.gz -" From 9a735111c74bd45d449b0fb1b21f434be099f906 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:42:05 -0400 Subject: [PATCH 612/738] backports/cura: drop due to unmaintained --- backports/cura/APKBUILD | 76 ----------------------- backports/cura/AppDesktopData.patch | 58 ------------------ backports/cura/CuraVersion.patch | 16 ----- backports/cura/cmake-helpers.patch | 95 ----------------------------- backports/cura/cmake.patch | 85 -------------------------- 5 files changed, 330 deletions(-) delete mode 100644 backports/cura/APKBUILD delete mode 100644 backports/cura/AppDesktopData.patch delete mode 100644 backports/cura/CuraVersion.patch delete mode 100644 backports/cura/cmake-helpers.patch delete mode 100644 backports/cura/cmake.patch diff --git a/backports/cura/APKBUILD b/backports/cura/APKBUILD deleted file mode 100644 index 7c669be..0000000 --- a/backports/cura/APKBUILD +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor: Anjandev Momi -# Maintainer: Anjandev Momi -pkgname=cura -# uranium and curaengine packages must be updated in sync with this verion number -# py3-pynest2d and fdm-materials should be checked as well, but their versions are not always in sync -pkgver=5.2.2 -pkgrel=1 -pkgdesc="3D printer / slicing GUI built on top of the Uranium framework" -url="https://ultimaker.com/software/ultimaker-cura" -# ppc64le: no py3-keyring -# x86: no curaengine -# armhf: no uranium, qt5-qtquickcontrols, qt5-qtquickcontrols2, qt5-qtgraphicaleffects -# riscv64: no uranium -# s390x: no py3-trimesh, no py3-numpy-stl -# armv7: no py3-trimesh -arch="noarch !ppc64le !x86 !armhf !riscv64 !s390x !armv7" -license="LGPL-3.0-or-later" -# add cura-binary-data to depends when packaged -depends=" - curaengine - fdm-materials - uranium - py3-arcus - py3-keyring - py3-numpy-stl - py3-pyclipper - py3-pynest2d - py3-pyserial - py3-qt6 - py3-requests - py3-trimesh - py3-zeroconf - " -makedepends="samurai cmake gettext gettext-dev" # needs msginit from gettext -checkdepends="py3-pytest" -subpackages="$pkgname-lang" -source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Cura/archive/refs/tags/$pkgver.tar.gz - AppDesktopData.patch - CuraVersion.patch - cmake-helpers.patch - cmake.patch" -builddir="$srcdir/Cura-$pkgver" -options="!check" # tests broken after v5.x - -build() { - local pyver="$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')" - cmake -B build -G Ninja \ - -DCURA_VERSION=$pkgver \ - -DPython_VERSION=$pyver \ - -DURANIUM_DIR=/usr/share/uranium \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ - -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ - -DCMAKE_BUILD_TYPE=minsizerel - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build - mv $pkgdir/usr/bin/cura_app.py $pkgdir/usr/bin/cura - - # don't ever send any user or print info through the internet to Ultimaker - rm -rf "$pkgdir/usr/lib/cura/plugins/SliceInfoPlugin" - - install -d "$pkgdir"/usr/share/locale - mv "$pkgdir"/usr/share/cura/resources/i18n/* "$pkgdir"/usr/share/locale/ -} - -sha512sums=" -5d4e0fdc740d0c048905e2b87cc8c73eedea59b54766b74760505902007b365582d22b46b1cfdcd6914828840865c10a3beb0ef6a1f04ea181c81d44f42434bc cura-5.2.2.tar.gz -214e373f6cab7e3ccac12c96d1b5ca636d8d1e9ecdadaae84fc28fb429969c7c2d6055ce2a01b6db3ad85ab6cbc8d135cf2c26c77d7cfe13a73eb81aa5e85f11 AppDesktopData.patch -e3bb302db70ca195b2ce9831e71302c8ee2a51955fecc7264a495d7d4fc9c107cfd48811aa5865f16671e7b1ae126f95d3d7bbb6a70f367f7f91a2b32bce377b CuraVersion.patch -0db4ff97e7f82ae1a9dbc9c330d08c3e46249feeb3fb630f7c4e2de73749327337ec041680c39a07e0b5034c1b3f3656d75614ab4dc2f39861c8e27bdb2a58ef cmake-helpers.patch -05a73f892700ff6279230385b04180873a62b7413fa7f7d55ae150f1bcee57ef05eda0bd7fe444fe660ab66a044c958f42badd33b743fca81033ae8f19dd3805 cmake.patch -" diff --git a/backports/cura/AppDesktopData.patch b/backports/cura/AppDesktopData.patch deleted file mode 100644 index 9e2134f..0000000 --- a/backports/cura/AppDesktopData.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- /dev/null -+++ ./com.ultimaker.cura.appdata.xml -@@ -0,0 +1,33 @@ -+ -+ -+ -+ com.ultimaker.cura.desktop -+ CC0-1.0 -+ LGPL-3.0 and CC-BY-SA-4.0 -+ Cura -+

The world's most advanced 3d printer software -+ -+

-+ Cura creates a seamless integration between hardware, software and -+ materials for the best 3D printing experience around. -+ Cura supports the 3MF, OBJ and STL file formats and is available on -+ Windows, Mac and Linux. -+

-+
    -+
  • Novices can start printing right away
  • -+
  • Experts are able to customize 300 settings to achieve the best results
  • -+
  • Optimized profiles for Ultimaker materials
  • -+
  • Supported by a global network of Ultimaker certified service partners
  • -+
  • Print multiple objects at once with different settings for each object
  • -+
  • Cura supports STL, 3MF and OBJ file formats
  • -+
  • Open source and completely free
  • -+
-+
-+ -+ -+ https://raw.githubusercontent.com/Ultimaker/Cura/master/screenshot.png -+ -+ -+ https://ultimaker.com/software/ultimaker-cura?utm_source=cura&utm_medium=software&utm_campaign=cura-update-linux -+ Cura -+ ---- /dev/null -+++ ./com.ultimaker.cura.desktop.in -@@ -0,0 +1,19 @@ -+[Desktop Entry] -+Name=Ultimaker Cura -+Name[de]=Ultimaker Cura -+Name[nl]=Ultimaker Cura -+GenericName=3D Printing Software -+GenericName[de]=3D-Druck-Software -+GenericName[nl]=3D-printsoftware -+Comment=Cura converts 3D models into paths for a 3D printer. It prepares your print for maximum accuracy, minimum printing time and good reliability with many extra features that make your print come out great. -+Comment[de]=Cura wandelt 3D-Modelle in Pfade für einen 3D-Drucker um. Es bereitet Ihren Druck für maximale Genauigkeit, minimale Druckzeit und guter Zuverlässigkeit mit vielen zusätzlichen Funktionen vor, damit Ihr Druck großartig wird. -+Comment[nl]=Cura converteert 3D-modellen naar paden voor een 3D printer. Het bereidt je print voor om zeer precies, snel en betrouwbaar te kunnen printen, met veel extra functionaliteit om je print er goed uit te laten komen. -+Exec=@CMAKE_INSTALL_FULL_BINDIR@/cura %F -+TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura -+Icon=cura-icon -+Terminal=false -+Type=Application -+MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;text/x-gcode;application/x-amf;application/x-ply;application/x-ctm;model/vnd.collada+xml;model/gltf-binary;model/gltf+json;model/vnd.collada+xml+zip; -+Categories=Graphics; -+Keywords=3D;Printing;Slicer; -+StartupWMClass=cura.real diff --git a/backports/cura/CuraVersion.patch b/backports/cura/CuraVersion.patch deleted file mode 100644 index 916225d..0000000 --- a/backports/cura/CuraVersion.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- /dev/null -+++ ./cura/CuraVersion.py.in -@@ -0,0 +1,13 @@ -+# Copyright (c) 2020 Ultimaker B.V. -+# Cura is released under the terms of the LGPLv3 or higher. -+ -+CuraAppName = "@CURA_APP_NAME@" -+CuraAppDisplayName = "@CURA_APP_DISPLAY_NAME@" -+CuraVersion = "@CURA_VERSION@" -+CuraBuildType = "@CURA_BUILDTYPE@" -+CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False -+CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@" -+CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@" -+CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@" -+CuraMarketplaceRoot = "@CURA_MARKETPLACE_ROOT@" -+CuraDigitalFactoryURL = "@CURA_DIGITAL_FACTORY_URL@" diff --git a/backports/cura/cmake-helpers.patch b/backports/cura/cmake-helpers.patch deleted file mode 100644 index 6204aaa..0000000 --- a/backports/cura/cmake-helpers.patch +++ /dev/null @@ -1,95 +0,0 @@ ---- /dev/null -+++ ./cmake/CuraPluginInstall.cmake -@@ -0,0 +1,92 @@ -+# Copyright (c) 2022 Ultimaker B.V. -+# CuraPluginInstall.cmake is released under the terms of the LGPLv3 or higher. -+ -+# -+# This module detects all plugins that need to be installed and adds them using the CMake install() command. -+# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. -+# -+# Plugins can be configured to NOT BE INSTALLED via the variable "CURA_NO_INSTALL_PLUGINS" as a list of string in the -+# form of "a;b;c" or "a,b,c". By default all plugins will be installed. -+# -+ -+option(PRINT_PLUGIN_LIST "Should the list of plugins that are installed be printed?" ON) -+ -+# Options or configuration variables -+set(CURA_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") -+ -+file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) -+list(LENGTH _plugin_json_list _plugin_json_list_len) -+ -+# Sort the lists alphabetically so we can handle cases like this: -+# - plugins/my_plugin/plugin.json -+# - plugins/my_plugin/my_module/plugin.json -+# In this case, only "plugins/my_plugin" should be added via install(). -+set(_no_install_plugin_list ${CURA_NO_INSTALL_PLUGINS}) -+# Sanitize the string so the comparison will be case-insensitive. -+string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) -+string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) -+ -+# WORKAROUND counterpart of what's in cura-build. -+string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") -+ -+list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) -+ -+if(_no_install_plugin_list_len GREATER 0) -+ list(SORT _no_install_plugin_list) -+endif() -+if(_plugin_json_list_len GREATER 0) -+ list(SORT _plugin_json_list) -+endif() -+ -+# Check all plugin directories and add them via install() if needed. -+set(_install_plugin_list "") -+foreach(_plugin_json_path ${_plugin_json_list}) -+ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) -+ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) -+ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) -+ -+ # Make plugin name comparison case-insensitive -+ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) -+ -+ # Check if this plugin needs to be skipped for installation -+ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. -+ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is -+ # specified in the NO_INSTALL_PLUGINS list. -+ if(_no_install_plugin_list) -+ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) -+ set(_add_plugin OFF) -+ set(_is_no_install_plugin ON) -+ endif() -+ endif() -+ -+ # Make sure this is not a subdirectory in a plugin that's already in the install list -+ if(_add_plugin) -+ foreach(_known_install_plugin_dir ${_install_plugin_list}) -+ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") -+ set(_add_plugin OFF) -+ break() -+ endif() -+ endforeach() -+ endif() -+ -+ if(_add_plugin) -+ if(${PRINT_PLUGIN_LIST}) -+ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") -+ endif() -+ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) -+ install(DIRECTORY ${_rel_plugin_dir} -+ DESTINATION lib${LIB_SUFFIX}/cura/${_rel_plugin_parent_dir} -+ PATTERN "__pycache__" EXCLUDE -+ PATTERN "*.qmlc" EXCLUDE -+ ) -+ list(APPEND _install_plugin_list ${_plugin_dir}) -+ elseif(_is_no_install_plugin) -+ if(${PRINT_PLUGIN_LIST}) -+ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") -+ endif() -+ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py -+ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages -+ ${_plugin_dir_name} -+ RESULT_VARIABLE _mod_json_result) -+ endif() -+endforeach() diff --git a/backports/cura/cmake.patch b/backports/cura/cmake.patch deleted file mode 100644 index a74477f..0000000 --- a/backports/cura/cmake.patch +++ /dev/null @@ -1,85 +0,0 @@ ---- ./CMakeLists.txt.orig -+++ ./CMakeLists.txt -@@ -1,10 +1,6 @@ - # Copyright (c) 2022 Ultimaker B.V. - # Cura is released under the terms of the LGPLv3 or higher. - --# NOTE: This is only being used for translation scripts. -- --# For MSVC flags, will be ignored on non-Windows OS's and this project in general. Only needed for cura-build-environment. --cmake_policy(SET CMP0091 NEW) - project(cura) - cmake_minimum_required(VERSION 3.18) - -@@ -15,8 +11,44 @@ - set(URANIUM_DIR "${CMAKE_SOURCE_DIR}/../Uranium" CACHE PATH "The location of the Uranium repository") - set(URANIUM_SCRIPTS_DIR "${URANIUM_DIR}/scripts" CACHE PATH "The location of the scripts directory of the Uranium repository") - -+option(CURA_DEBUGMODE "Enable debug dialog and other debug features" OFF) -+if(CURA_DEBUGMODE) -+ set(_cura_debugmode "ON") -+endif() -+ - option(GENERATE_TRANSLATIONS "Should the translations be generated?" ON) - -+set(CURA_APP_NAME "cura" CACHE STRING "Short name of Cura, used for configuration folder") -+set(CURA_APP_DISPLAY_NAME "Ultimaker Cura" CACHE STRING "Display name of Cura") -+set(CURA_VERSION "master" CACHE STRING "Version name of Cura") -+set(CURA_BUILDTYPE "" CACHE STRING "Build type of Cura, eg. 'PPA'") -+set(CURA_CLOUD_API_ROOT "" CACHE STRING "Alternative Cura cloud API root") -+set(CURA_CLOUD_API_VERSION "" CACHE STRING "Alternative Cura cloud API version") -+set(CURA_CLOUD_ACCOUNT_API_ROOT "" CACHE STRING "Alternative Cura cloud account API version") -+set(CURA_MARKETPLACE_ROOT "" CACHE STRING "Alternative Marketplace location") -+set(CURA_DIGITAL_FACTORY_URL "" CACHE STRING "Alternative Digital Factory location") -+ -+configure_file(${CMAKE_SOURCE_DIR}/com.ultimaker.cura.desktop.in ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop @ONLY) -+ -+configure_file(cura/CuraVersion.py.in CuraVersion.py @ONLY) -+ -+if(NOT DEFINED Python_VERSION) -+ set(Python_VERSION -+ 3.11 -+ CACHE STRING "Python Version" FORCE) -+ message(STATUS "Setting Python version to ${Python_VERSION}. Set Python_VERSION if you want to compile against an other version.") -+endif() -+if(APPLE) -+ set(Python_FIND_FRAMEWORK NEVER) -+endif() -+find_package(Python ${Python_VERSION} EXACT REQUIRED COMPONENTS Interpreter) -+message(STATUS "Linking and building ${project_name} against Python ${Python_VERSION}") -+if(NOT DEFINED Python_SITELIB_LOCAL) -+ set(Python_SITELIB_LOCAL -+ "${Python_SITELIB}" -+ CACHE PATH "Local alternative site-package location to install Cura" FORCE) -+endif() -+ - if(NOT ${URANIUM_DIR} STREQUAL "") - set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${URANIUM_DIR}/cmake") - endif() -@@ -29,4 +61,24 @@ - if(${GENERATE_TRANSLATIONS}) - CREATE_TRANSLATION_TARGETS() - endif() --endif() -\ No newline at end of file -+endif() -+ -+install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/cura) -+ -+include(CuraPluginInstall) -+ -+install(FILES cura_app.py DESTINATION ${CMAKE_INSTALL_BINDIR} -+ PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) -+install(DIRECTORY cura DESTINATION "${Python_SITELIB_LOCAL}") -+install(FILES ${CMAKE_BINARY_DIR}/CuraVersion.py DESTINATION "${Python_SITELIB_LOCAL}/cura/") -+if(NOT APPLE AND NOT WIN32) -+ install(FILES ${CMAKE_BINARY_DIR}/com.ultimaker.cura.desktop -+ DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) -+ install(FILES ${CMAKE_SOURCE_DIR}/resources/images/cura-icon.png -+ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/128x128/apps/) -+ install(FILES com.ultimaker.cura.appdata.xml -+ DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) -+ install(FILES cura.sharedmimeinfo -+ DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages/ -+ RENAME cura.xml ) -+endif() From b4b4877fd3fb62c8f37dbf65066ae755363ee9a8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:42:18 -0400 Subject: [PATCH 613/738] backports/py3-arcus: drop due to unmaintained --- backports/py3-arcus/APKBUILD | 42 ---- backports/py3-arcus/cmake-helpers.patch | 254 ------------------------ backports/py3-arcus/cmake.patch | 32 --- backports/py3-arcus/pyproject.patch | 20 -- 4 files changed, 348 deletions(-) delete mode 100644 backports/py3-arcus/APKBUILD delete mode 100644 backports/py3-arcus/cmake-helpers.patch delete mode 100644 backports/py3-arcus/cmake.patch delete mode 100644 backports/py3-arcus/pyproject.patch diff --git a/backports/py3-arcus/APKBUILD b/backports/py3-arcus/APKBUILD deleted file mode 100644 index d3643d7..0000000 --- a/backports/py3-arcus/APKBUILD +++ /dev/null @@ -1,42 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=py3-arcus -# Needs to be upgraded in sync with libarcus -pkgver=5.3.0 -pkgrel=4 -pkgdesc="Python bindings for libarcus" -url="https://github.com/Ultimaker/pyArcus" -arch="all" -license="LGPL-3.0-only" -makedepends=" - cmake - libarcus-dev - protobuf-dev - py3-sip - python3-dev - samurai - " -options="!check" # package doesn't provide any tests -source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pyArcus/archive/refs/tags/$pkgver.tar.gz - cmake.patch - cmake-helpers.patch - pyproject.patch" -builddir="$srcdir/pyArcus-$pkgver" - -build() { - cmake -G Ninja -B build \ - -DBUILD_SHARED_LIBS=ON \ - -DCMAKE_BUILD_TYPE=Release - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -d4a114994fa3e3156eae95dde58df13237b8bb0571a1219d6dee6b6338fd65f911f27887d6ab32b7a3cb32bc45ca6c25147e7c2d246cb0707326b88246abfbcd py3-arcus-5.3.0.tar.gz -f14e55cd31c13051981f26364e34da8c94e8eb5227b1cfd6fe44b9f97b5a4dcf6142a1751fa62eb0514a47583e6ec2d51dc253f23cf72c3fe6a1cb5dca136f21 cmake.patch -de75b985607feae0a9c511742915814e9c3d4bc467183f010ccc334ce4d0d952b6ff86020360b78558c4738cc03cf62c386b44ed76bcec12075c4a93dd03eeb7 cmake-helpers.patch -ef593230d5c78da8ba0fc6ea83225c4543857de1837d3151c45e59ffd7c98063b8f97f25d01c15b6a8f90c26c919206f9f7fa26c9650117f4ce7be49ebca876f pyproject.patch -" diff --git a/backports/py3-arcus/cmake-helpers.patch b/backports/py3-arcus/cmake-helpers.patch deleted file mode 100644 index c556985..0000000 --- a/backports/py3-arcus/cmake-helpers.patch +++ /dev/null @@ -1,254 +0,0 @@ ---- /dev/null -+++ ./cmake/CMakeBuilder.py -@@ -0,0 +1,13 @@ -+from sipbuild import SetuptoolsBuilder -+ -+ -+class CMakeBuilder(SetuptoolsBuilder): -+ def __init__(self, project, **kwargs): -+ print("Using the CMake builder") -+ super().__init__(project, **kwargs) -+ -+ def build(self): -+ """ Only Generate the source files """ -+ print("Generating the source files") -+ self._generate_bindings() -+ self._generate_scripts() ---- /dev/null -+++ ./cmake/FindSIP.cmake -@@ -0,0 +1,65 @@ -+# Find SIP -+# ~~~~~~~~ -+# -+# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php -+# -+# Find the installed version of SIP. FindSIP should be called after Python -+# has been found. -+# -+# This file defines the following variables: -+# -+# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number -+# suitable for comparison as a string. -+# -+# SIP_VERSION_STR - The version of SIP found as a human readable string. -+# -+# SIP_BINARY_PATH - Path and filename of the SIP command line executable. -+# -+# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. -+# -+# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed -+# into. -+ -+# Copyright (c) 2007, Simon Edwards -+# Redistribution and use is allowed according to the terms of the BSD license. -+# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -+ -+ -+ -+IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) -+ # Already in cache, be silent -+ SET(SIP_FOUND TRUE) -+ELSE() -+ -+ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) -+ -+ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) -+ IF(sip_config) -+ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) -+ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) -+ IF(${SIP_VERSION_STR} VERSION_LESS 5) -+ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) -+ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) -+ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) -+ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) -+ SET(SIP_FOUND TRUE) -+ ENDIF(sip_config) -+ -+ IF(SIP_FOUND) -+ IF(NOT SIP_FIND_QUIETLY) -+ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") -+ ENDIF(NOT SIP_FIND_QUIETLY) -+ ELSE(SIP_FOUND) -+ IF(SIP_FIND_REQUIRED) -+ MESSAGE(FATAL_ERROR "Could not find SIP") -+ ENDIF(SIP_FIND_REQUIRED) -+ ENDIF(SIP_FOUND) -+ -+ENDIF() -+ -+include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) -+ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) ---- /dev/null -+++ ./cmake/FindSIP.py -@@ -0,0 +1,57 @@ -+# -*- coding: utf-8 -*- -+# -+# Copyright (c) 2007, Simon Edwards -+# All rights reserved. -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions are met: -+# * Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# * Redistributions in binary form must reproduce the above copyright -+# notice, this list of conditions and the following disclaimer in the -+# documentation and/or other materials provided with the distribution. -+# * Neither the name of the Simon Edwards nor the -+# names of its contributors may be used to endorse or promote products -+# derived from this software without specific prior written permission. -+# -+# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY -+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY -+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+# -+# FindSIP.py -+# Copyright (c) 2007, Simon Edwards -+# Redistribution and use is allowed according to the terms of the BSD license. -+# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -+ -+try: -+ import sipbuild -+ -+ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) -+ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) -+ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) -+ -+ from distutils.sysconfig import get_python_lib -+ python_modules_dir = get_python_lib(plat_specific=1) -+ print("default_sip_dir:%s" % python_modules_dir) -+except ImportError: # Code for SIP v4 -+ import sipconfig -+ -+ sipcfg = sipconfig.Configuration() -+ print("sip_version:%06.0x" % sipcfg.sip_version) -+ print("sip_version_num:%d" % sipcfg.sip_version) -+ print("sip_version_str:%s" % sipcfg.sip_version_str) -+ print("sip_bin:%s" % sipcfg.sip_bin) -+ print("default_sip_dir:%s" % sipcfg.default_sip_dir) -+ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) -+ # SIP 4.19.10+ has new sipcfg.sip_module_dir -+ if hasattr(sipcfg, "sip_module_dir"): -+ print("sip_module_dir:%s" % sipcfg.sip_module_dir) -+ else: -+ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) ---- /dev/null -+++ ./cmake/SIPMacros.cmake -@@ -0,0 +1,107 @@ -+ -+ -+# Macros for SIP -+# ~~~~~~~~~~~~~~ -+ -+set(SIP_ARGS --pep484-pyi --no-protected-is-public) -+ -+function(add_sip_module MODULE_TARGET) -+ if(NOT SIP_BUILD_EXECUTABLE) -+ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) -+ endif() -+ -+ message(STATUS "SIP: Generating pyproject.toml") -+ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) -+ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) -+ if(WIN32) -+ set(ext .pyd) -+ set(env_path_sep ";") -+ else() -+ set(ext .so) -+ set(env_path_sep ":") -+ endif() -+ -+ message(STATUS "SIP: Generating source files") -+ execute_process( -+ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} -+ COMMAND_ECHO STDOUT -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ -+ ) -+ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources -+ -+ # Touch the generated files (8 in total) to make them dirty and force them to rebuild -+ message(STATUS "SIP: Touching the source files") -+ set(_sip_output_files) -+ list(LENGTH SIP_FILES _no_outputfiles) -+ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) -+ if(${_concat_file_nr} LESS 8) -+ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") -+ endif() -+ endforeach() -+ -+ # Find the generated source files -+ message(STATUS "SIP: Collecting the generated source files") -+ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") -+ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") -+ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") -+ -+ # Add the user specified source files -+ message(STATUS "SIP: Collecting the user specified source files") -+ get_target_property(usr_src ${MODULE_TARGET} SOURCES) -+ -+ # create the target library and link all the files (generated and user specified -+ message(STATUS "SIP: Linking the interface target against the shared library") -+ set(sip_sources "${sip_c}" "${sip_cpp}" "${usr_src}") -+ -+ if (BUILD_SHARED_LIBS) -+ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) -+ else() -+ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) -+ endif() -+ -+ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension -+ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") -+ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") -+ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) -+ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") -+ -+ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work -+ # on the sip definition files without having to reconfigure the complete project. -+ if (NOT DEFINED PYTHONPATH) -+ set(PYTHONPATH "") -+ endif () -+ add_custom_command( -+ TARGET "sip_${MODULE_TARGET}" -+ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} -+ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ -+ MAIN_DEPENDENCY ${MODULE_SIP} -+ DEPENDS ${sip_sources} -+ VERBATIM -+ ) -+ -+ set_target_properties("sip_${MODULE_TARGET}" -+ PROPERTIES -+ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") -+endfunction() -+ -+function(install_sip_module MODULE_TARGET) -+ if(DEFINED ARGV1) -+ set(_install_path ${ARGV1}) -+ else() -+ if(DEFINED Python_SITEARCH) -+ set(_install_path ${Python_SITEARCH}) -+ elseif(DEFINED Python_SITELIB) -+ set(_install_path ${Python_SITELIB}) -+ else() -+ message(FATAL_ERROR "SIP: Specify the site-packages location") -+ endif() -+ endif() -+ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") -+ install(TARGETS "sip_${MODULE_TARGET}" -+ ARCHIVE DESTINATION ${_install_path} -+ LIBRARY DESTINATION ${_install_path} -+ RUNTIME DESTINATION ${_install_path} -+ RESOURCE DESTINATION ${_install_path} -+ ) -+endfunction() diff --git a/backports/py3-arcus/cmake.patch b/backports/py3-arcus/cmake.patch deleted file mode 100644 index e7390e0..0000000 --- a/backports/py3-arcus/cmake.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- ./CMakeLists.txt.orig -+++ ./CMakeLists.txt -@@ -2,22 +2,22 @@ - project(pyarcus) - cmake_minimum_required(VERSION 3.20) - --find_package(protobuf REQUIRED) --find_package(cpython REQUIRED) --find_package(arcus REQUIRED) -+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) - --find_package(standardprojectsettings REQUIRED) --find_package(sipbuildtool REQUIRED) -+find_package(Protobuf REQUIRED) -+find_package(Python REQUIRED COMPONENTS Interpreter Development) -+find_package(Arcus REQUIRED) - -+find_package(SIP 6.5.0 REQUIRED) -+ - add_library(pyArcus INTERFACE src/PythonMessage.cpp) --use_threads(pyArcus) - - target_include_directories(pyArcus - INTERFACE - $ - $ - ) --target_link_libraries(pyArcus INTERFACE arcus::arcus protobuf::libprotobuf cpython::cpython) -+target_link_libraries(pyArcus INTERFACE Arcus protobuf::libprotobuf Python::Python) - add_sip_module(pyArcus) - install_sip_module(pyArcus) - diff --git a/backports/py3-arcus/pyproject.patch b/backports/py3-arcus/pyproject.patch deleted file mode 100644 index 3dd7f3a..0000000 --- a/backports/py3-arcus/pyproject.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- /dev/null -+++ ./pyproject.toml.in -@@ -0,0 +1,17 @@ -+[build-system] -+requires = ["sip >=6, <7"] -+build-backend = "sipbuild.api" -+ -+[tool.sip.metadata] -+name = "pyArcus" -+ -+[tool.sip.project] -+builder-factory = "CMakeBuilder" -+sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/python/" -+sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/python/"] -+build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pyArcus/" -+ -+[tool.sip.bindings.pyArcus] -+exceptions = true -+release-gil = true -+concatenate = 8 From 9e839bd17b0f12f5580b8ac6edd0df534b4689f7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:42:58 -0400 Subject: [PATCH 614/738] unmaintained/py3-html5-parser: drop for in backports --- unmaintained/py3-html5-parser/APKBUILD | 33 -------------------------- 1 file changed, 33 deletions(-) delete mode 100644 unmaintained/py3-html5-parser/APKBUILD diff --git a/unmaintained/py3-html5-parser/APKBUILD b/unmaintained/py3-html5-parser/APKBUILD deleted file mode 100644 index 160a9ee..0000000 --- a/unmaintained/py3-html5-parser/APKBUILD +++ /dev/null @@ -1,33 +0,0 @@ -# Maintainer: Antoine Martin - -_pkgname="html5-parser" -pkgname='py3-html5-parser' -pkgver=0.4.9 -pkgrel=0 -pkgdesc="Fast C based HTML 5 parsing for python" -arch='x86_64' -url="https://github.com/kovidgoyal/${_pkgname}" -license='Apache' -checkdepends='py3-beautifulsoup4' -makedepends='py3-chardet py3-lxml py3-setuptools libxml2-dev python3-dev' -source="${pkgname}-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz" - -build() { - cd "${srcdir}"/${_pkgname}-${pkgver} - - python3 setup.py build -} - -check() { - cd "${srcdir}"/${_pkgname}-${pkgver} - - python3 setup.py test -} - -package() { - cd "${srcdir}"/${_pkgname}-${pkgver} - python3 setup.py install --root="${pkgdir}" --optimize=1 --skip-build -} - - -sha512sums="31d0499e690c1cfe86fcaabddf4a5842b504706f6d95268dfad4ce80a8b91df6ba779c27dd4fe877232f6664142ed04b9d2af0aff601aa1855f91d9720adf512 py3-html5-parser-0.4.9.tar.gz" From 6abdbe7e50afa44051f81f1dd53f972be5c85761 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:43:44 -0400 Subject: [PATCH 615/738] backports/py3-mapbox-eacut: drop due to not needed --- backports/py3-mapbox-earcut/APKBUILD | 35 ---------------------------- 1 file changed, 35 deletions(-) delete mode 100644 backports/py3-mapbox-earcut/APKBUILD diff --git a/backports/py3-mapbox-earcut/APKBUILD b/backports/py3-mapbox-earcut/APKBUILD deleted file mode 100644 index fe17670..0000000 --- a/backports/py3-mapbox-earcut/APKBUILD +++ /dev/null @@ -1,35 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=py3-mapbox-earcut -pkgver=1.0.1 -pkgrel=2 -pkgdesc="Python bindings for the mapbox earcut c++ library" -url="https://github.com/skogler/mapbox_earcut_python" -arch="all" -license="ISC" -depends="py3-numpy" -makedepends="py3-setuptools py3-pybind11-dev python3-dev py3-gpep517" -checkdepends="py3-pytest" -source="$pkgname-$pkgver.tar.gz::https://github.com/skogler/mapbox_earcut_python/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/mapbox_earcut_python-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -cdb32585cbaf74c15e59af0ae70d983dd2f9bc9cfe1b59b3eadc4d442f7d962241854b589a035deae67cacd9334833b911d0981f0d417fe587348fc7d24f0c0a py3-mapbox-earcut-1.0.1.tar.gz -" From 59283db32af088273ac45376f9f0fba6881ceabc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:44:08 -0400 Subject: [PATCH 616/738] backports/py3-trimesh: drop due to not needed --- backports/py3-trimesh/APKBUILD | 65 ---------------------------------- 1 file changed, 65 deletions(-) delete mode 100644 backports/py3-trimesh/APKBUILD diff --git a/backports/py3-trimesh/APKBUILD b/backports/py3-trimesh/APKBUILD deleted file mode 100644 index 7087c8d..0000000 --- a/backports/py3-trimesh/APKBUILD +++ /dev/null @@ -1,65 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=py3-trimesh -pkgver=3.22.1 -pkgrel=2 -pkgdesc="Python library for working with triangular meshes" -url="https://github.com/mikedh/trimesh" -# x86, armhf, armv7 Tests fail on int64 to int32 casts on these arches -# s390x, no py3-rtree -# riscv64, no py3-shapely -arch="noarch !x86 !armhf !armv7 !s390x !riscv64" -# TODO: investigate why checks stall -options="!check" -license="MIT" -depends=" - py3-colorlog - py3-jsonschema - py3-lxml - py3-mapbox-earcut - py3-msgpack - py3-networkx - py3-numpy - py3-pillow - py3-requests - py3-rtree - py3-scipy - py3-shapely - py3-svgpath - python3 - " -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - " -checkdepends="py3-pytest py3-pytest-xdist py3-pyinstrument" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/mikedh/trimesh/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir/trimesh-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - # test_obj.py: no format zae, probably needs more investigation - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -n auto \ - --deselect tests/test_dae.py::DAETest::test_material_round \ - --deselect tests/test_dae.py::DAETest::test_obj_roundtrip \ - --deselect tests/test_light.py::LightTests::test_scene \ - --deselect tests/test_obj.py::OBJTest::test_multi_nodupe -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -27952e0d29ccd110d4087b4144e0923706bed3cd0734e7a17d7f55738c6322849c5dad04ab4ecfe0638bc16d65d1e647d08905a396dd6ebd1f78c833a8b95636 py3-trimesh-3.22.1.tar.gz -" From e73030be6b7fb071e17d92f9118849c4ea100bca Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:44:34 -0400 Subject: [PATCH 617/738] backports/py3-numpy-stl: drop due to not needed --- backports/py3-numpy-stl/APKBUILD | 39 -------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 backports/py3-numpy-stl/APKBUILD diff --git a/backports/py3-numpy-stl/APKBUILD b/backports/py3-numpy-stl/APKBUILD deleted file mode 100644 index 1191396..0000000 --- a/backports/py3-numpy-stl/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=py3-numpy-stl -pkgver=3.2.0 -pkgrel=0 -pkgdesc="Library for working with STLs" -url="https://github.com/WoLpH/numpy-stl" -# s390x: no py3-utils -arch="noarch !s390x" -license="BSD-3-Clause" -depends="python3 py3-utils py3-numpy" -makedepends="py3-setuptools py3-gpep517" -checkdepends="py3-pytest py3-pytest-cov py3-pygments" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/wolph/numpy-stl/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/numpy-stl-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - # deselected test needs xvfb-run and fails - .testenv/bin/python3 -m pytest \ - --deselect tests/test_ascii.py::test_use_with_qt_with_custom_locale_decimal_delimeter -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -a08053ed264dbfd629229af3db9c38deed2932b28feced56e2d4c20476f1ba85ddc80881fb82330ea3f4fff9a3f91da20db7447050da5c75f1c04455a67538dc py3-numpy-stl-3.2.0.tar.gz -" From d09e18a9dab11c66028f0dd20ba56aea7c9ec7ec Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:45:18 -0400 Subject: [PATCH 618/738] backports/py3-pyinstrument: drop due to not needed --- backports/py3-pyinstrument/APKBUILD | 50 ----------------------------- 1 file changed, 50 deletions(-) delete mode 100644 backports/py3-pyinstrument/APKBUILD diff --git a/backports/py3-pyinstrument/APKBUILD b/backports/py3-pyinstrument/APKBUILD deleted file mode 100644 index 6070e94..0000000 --- a/backports/py3-pyinstrument/APKBUILD +++ /dev/null @@ -1,50 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: Celeste -maintainer="Celeste " -pkgname=py3-pyinstrument -pkgver=5.0.2 -pkgrel=0 -pkgdesc="Call stack profiler for Python" -url="https://github.com/joerick/pyinstrument" -arch="all" -license="BSD-3-Clause" -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - python3-dev - " -checkdepends=" - py3-flaky - py3-greenlet - py3-pytest - py3-pytest-asyncio - py3-trio - " -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/joerick/pyinstrument/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/pyinstrument-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - [ -d "pyinstrument" ] && mv -v pyinstrument pyinstrument.src - - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - - # test_cmdline.py tries to run "pyinstrument" executable - PATH="$builddir/.testenv/bin:$PATH" .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" .dist/*.whl -} - -sha512sums=" -7eeb0e05ceb31eab6b4cfcfae7095e7fe9399a7292a12ea427c6ce4f343b1f85be60496c071c2a983b9d0b40f76e18140a836b77a6df0765e40779758212d4cf py3-pyinstrument-5.0.2.tar.gz -" From b72d6e62e430f2e86d0b733ee09282639e192e28 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:45:38 -0400 Subject: [PATCH 619/738] backports/py3-pynest2d: drop due to not needed --- backports/py3-pynest2d/APKBUILD | 49 ---- backports/py3-pynest2d/cmake-helpers.patch | 253 --------------------- backports/py3-pynest2d/cmake.patch | 34 --- backports/py3-pynest2d/pyproject.patch | 21 -- 4 files changed, 357 deletions(-) delete mode 100644 backports/py3-pynest2d/APKBUILD delete mode 100644 backports/py3-pynest2d/cmake-helpers.patch delete mode 100644 backports/py3-pynest2d/cmake.patch delete mode 100644 backports/py3-pynest2d/pyproject.patch diff --git a/backports/py3-pynest2d/APKBUILD b/backports/py3-pynest2d/APKBUILD deleted file mode 100644 index 503b762..0000000 --- a/backports/py3-pynest2d/APKBUILD +++ /dev/null @@ -1,49 +0,0 @@ -# Contributor: Anjandev Momi -# Maintainer: Anjandev Momi -pkgname=py3-pynest2d -pkgver=5.2.2 -pkgrel=5 -pkgdesc="Python bindings for libnest2d" -url="https://github.com/Ultimaker/pynest2d" -arch="all" -license="LGPL-3.0-or-later" -makedepends="samurai cmake libnest2d-dev clipper-dev py3-sip nlopt-dev boost-dev python3-dev" -source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/pynest2d/archive/refs/tags/$pkgver.tar.gz - cmake.patch - cmake-helpers.patch - pyproject.patch" -builddir="$srcdir/pynest2d-$pkgver" -options="!check" # doesn't seem like tests are packaged anymore - -prepare() { - mv ./python ./src - default_prepare -} - -build() { - if [ "$CBUILD" != "$CHOST" ]; then - CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" - fi - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_SHARED_LIBS=True \ - -DCMAKE_BUILD_TYPE=Release \ - $CMAKE_CROSSOPTS - cmake --build build -} - -check() { - cd build - ctest -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -f5d701e431c81f8d2da7b14ca5677d3303064cf7910e80d289d7ff8fe99117fb9c470242f25f21fa8e1f064c63accf5349f4956981e316b09b14342223f79b61 py3-pynest2d-5.2.2.tar.gz -c8133d221a2fd8ed5fb32933a69f992dab2e83cdb9db30dcb715ebdfe6d403be3e94df393a921f506b63ef9d8b30a107f26b57cd39810faa9bee461afe5e1afd cmake.patch -dbf6609a21e39ae87fa89f2faf9c98a011f287cb383c5b74f92f41e3a350b487e69643c94110f7fcc25e9e25921a698cc20d9ee021d36ff908d03c0d5ca88a46 cmake-helpers.patch -f1b710509d97b5a2a4d021747e73884d27ae00fd93a04c90be01f123cdcc59be4757b4a73dff9c9921b7794551e531cf6729e4211144c60294d107b92a928b51 pyproject.patch -" diff --git a/backports/py3-pynest2d/cmake-helpers.patch b/backports/py3-pynest2d/cmake-helpers.patch deleted file mode 100644 index 288df07..0000000 --- a/backports/py3-pynest2d/cmake-helpers.patch +++ /dev/null @@ -1,253 +0,0 @@ ---- /dev/null -+++ ./cmake/CMakeBuilder.py -@@ -0,0 +1,13 @@ -+from sipbuild import SetuptoolsBuilder -+ -+ -+class CMakeBuilder(SetuptoolsBuilder): -+ def __init__(self, project, **kwargs): -+ print("Using the CMake builder") -+ super().__init__(project, **kwargs) -+ -+ def build(self): -+ """ Only Generate the source files """ -+ print("Generating the source files") -+ self._generate_bindings() -+ self._generate_scripts() -\ No newline at end of file ---- /dev/null -+++ ./cmake/FindSIP.py -@@ -0,0 +1,57 @@ -+# -*- coding: utf-8 -*- -+# -+# Copyright (c) 2007, Simon Edwards -+# All rights reserved. -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions are met: -+# * Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# * Redistributions in binary form must reproduce the above copyright -+# notice, this list of conditions and the following disclaimer in the -+# documentation and/or other materials provided with the distribution. -+# * Neither the name of the Simon Edwards nor the -+# names of its contributors may be used to endorse or promote products -+# derived from this software without specific prior written permission. -+# -+# THIS SOFTWARE IS PROVIDED BY Simon Edwards ''AS IS'' AND ANY -+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -+# DISCLAIMED. IN NO EVENT SHALL Simon Edwards BE LIABLE FOR ANY -+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+# -+# FindSIP.py -+# Copyright (c) 2007, Simon Edwards -+# Redistribution and use is allowed according to the terms of the BSD license. -+# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -+ -+try: -+ import sipbuild -+ -+ print("sip_version:%06.0x" % sipbuild.version.SIP_VERSION) -+ print("sip_version_num:%d" % sipbuild.version.SIP_VERSION) -+ print("sip_version_str:%s" % sipbuild.version.SIP_VERSION_STR) -+ -+ from distutils.sysconfig import get_python_lib -+ python_modules_dir = get_python_lib(plat_specific=1) -+ print("default_sip_dir:%s" % python_modules_dir) -+except ImportError: # Code for SIP v4 -+ import sipconfig -+ -+ sipcfg = sipconfig.Configuration() -+ print("sip_version:%06.0x" % sipcfg.sip_version) -+ print("sip_version_num:%d" % sipcfg.sip_version) -+ print("sip_version_str:%s" % sipcfg.sip_version_str) -+ print("sip_bin:%s" % sipcfg.sip_bin) -+ print("default_sip_dir:%s" % sipcfg.default_sip_dir) -+ print("sip_inc_dir:%s" % sipcfg.sip_inc_dir) -+ # SIP 4.19.10+ has new sipcfg.sip_module_dir -+ if hasattr(sipcfg, "sip_module_dir"): -+ print("sip_module_dir:%s" % sipcfg.sip_module_dir) -+ else: -+ print("sip_module_dir:%s" % sipcfg.sip_mod_dir) ---- /dev/null -+++ ./cmake/FindSIP.cmake -@@ -0,0 +1,65 @@ -+# Find SIP -+# ~~~~~~~~ -+# -+# SIP website: http://www.riverbankcomputing.co.uk/sip/index.php -+# -+# Find the installed version of SIP. FindSIP should be called after Python -+# has been found. -+# -+# This file defines the following variables: -+# -+# SIP_VERSION - The version of SIP found expressed as a 6 digit hex number -+# suitable for comparison as a string. -+# -+# SIP_VERSION_STR - The version of SIP found as a human readable string. -+# -+# SIP_BINARY_PATH - Path and filename of the SIP command line executable. -+# -+# SIP_INCLUDE_DIR - Directory holding the SIP C++ header file. -+# -+# SIP_DEFAULT_SIP_DIR - Default directory where .sip files should be installed -+# into. -+ -+# Copyright (c) 2007, Simon Edwards -+# Redistribution and use is allowed according to the terms of the BSD license. -+# For details see the accompanying COPYING-CMAKE-SCRIPTS file. -+ -+ -+ -+IF(SIP_VERSION OR SIP_BUILD_EXECUTABLE) -+ # Already in cache, be silent -+ SET(SIP_FOUND TRUE) -+ELSE() -+ -+ FIND_FILE(_find_sip_py FindSIP.py PATHS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH) -+ -+ EXECUTE_PROCESS(COMMAND ${Python_EXECUTABLE} ${_find_sip_py} OUTPUT_VARIABLE sip_config) -+ IF(sip_config) -+ STRING(REGEX REPLACE "^sip_version:([^\n]+).*$" "\\1" SIP_VERSION ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_version_num:([^\n]+).*$" "\\1" SIP_VERSION_NUM ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_version_str:([^\n]+).*$" "\\1" SIP_VERSION_STR ${sip_config}) -+ STRING(REGEX REPLACE ".*\ndefault_sip_dir:([^\n]+).*$" "\\1" SIP_DEFAULT_SIP_DIR ${sip_config}) -+ IF(${SIP_VERSION_STR} VERSION_LESS 5) -+ STRING(REGEX REPLACE ".*\nsip_bin:([^\n]+).*$" "\\1" SIP_BINARY_PATH ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_inc_dir:([^\n]+).*$" "\\1" SIP_INCLUDE_DIR ${sip_config}) -+ STRING(REGEX REPLACE ".*\nsip_module_dir:([^\n]+).*$" "\\1" SIP_MODULE_DIR ${sip_config}) -+ ELSE(${SIP_VERSION_STR} VERSION_LESS 5) -+ FIND_PROGRAM(SIP_BUILD_EXECUTABLE sip-build) -+ ENDIF(${SIP_VERSION_STR} VERSION_LESS 5) -+ SET(SIP_FOUND TRUE) -+ ENDIF(sip_config) -+ -+ IF(SIP_FOUND) -+ IF(NOT SIP_FIND_QUIETLY) -+ MESSAGE(STATUS "Found SIP version: ${SIP_VERSION_STR}") -+ ENDIF(NOT SIP_FIND_QUIETLY) -+ ELSE(SIP_FOUND) -+ IF(SIP_FIND_REQUIRED) -+ MESSAGE(FATAL_ERROR "Could not find SIP") -+ ENDIF(SIP_FIND_REQUIRED) -+ ENDIF(SIP_FOUND) -+ -+ENDIF() -+ -+include(${CMAKE_SOURCE_DIR}/cmake/SIPMacros.cmake) -+ADD_DEFINITIONS(-DSIP_VERSION=0x${SIP_VERSION}) ---- /dev/null -+++ ./cmake/SIPMacros.cmake -@@ -0,0 +1,105 @@ -+# Macros for SIP -+# ~~~~~~~~~~~~~~ -+ -+set(SIP_ARGS --pep484-pyi --no-protected-is-public) -+ -+function(add_sip_module MODULE_TARGET) -+ if(NOT SIP_BUILD_EXECUTABLE) -+ set(SIP_BUILD_EXECUTABLE ${CMAKE_PREFIX_PATH}/Scripts/sip-build) -+ endif() -+ -+ message(STATUS "SIP: Generating pyproject.toml") -+ configure_file(${CMAKE_SOURCE_DIR}/pyproject.toml.in ${CMAKE_CURRENT_BINARY_DIR}/pyproject.toml) -+ configure_file(${CMAKE_SOURCE_DIR}/cmake/CMakeBuilder.py ${CMAKE_CURRENT_BINARY_DIR}/CMakeBuilder.py) -+ if(WIN32) -+ set(ext .pyd) -+ set(env_path_sep ";") -+ else() -+ set(ext .so) -+ set(env_path_sep ":") -+ endif() -+ -+ message(STATUS "SIP: Generating source files") -+ execute_process( -+ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} -+ COMMAND_ECHO STDOUT -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ -+ ) -+ # This will generate the source-files during the configuration step in CMake. Needed to obtain the sources -+ -+ # Touch the generated files (8 in total) to make them dirty and force them to rebuild -+ message(STATUS "SIP: Touching the source files") -+ set(_sip_output_files) -+ list(LENGTH SIP_FILES _no_outputfiles) -+ foreach(_concat_file_nr RANGE 0 ${_no_outputfiles}) -+ if(${_concat_file_nr} LESS 8) -+ list(APPEND _sip_output_files "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/sip${MODULE_TARGET}part${_concat_file_nr}.cpp") -+ endif() -+ endforeach() -+ -+ # Find the generated source files -+ message(STATUS "SIP: Collecting the generated source files") -+ file(GLOB sip_c "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.c") -+ file(GLOB sip_cpp "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.cpp") -+ file(GLOB sip_hdr "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/*.h") -+ -+ # Add the user specified source files -+ message(STATUS "SIP: Collecting the user specified source files") -+ get_target_property(usr_src ${MODULE_TARGET} SOURCES) -+ -+ # create the target library and link all the files (generated and user specified -+ message(STATUS "SIP: Linking the interface target against the shared library") -+ set(sip_sources "${sip_c}" "${sip_cpp}") -+ if(${usr_src}) -+ list(APPEND sip_sources "${usr_src}") -+ endif() -+ -+ if (BUILD_SHARED_LIBS) -+ add_library("sip_${MODULE_TARGET}" SHARED ${sip_sources}) -+ else() -+ add_library("sip_${MODULE_TARGET}" STATIC ${sip_sources}) -+ endif() -+ -+ # Make sure that the library name of the target is the same as the MODULE_TARGET with the appropriate extension -+ target_link_libraries("sip_${MODULE_TARGET}" PRIVATE "${MODULE_TARGET}") -+ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES PREFIX "") -+ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES SUFFIX ${ext}) -+ set_target_properties("sip_${MODULE_TARGET}" PROPERTIES OUTPUT_NAME "${MODULE_TARGET}") -+ -+ # Add the custom command to (re-)generate the files and mark them as dirty. This allows the user to actually work -+ # on the sip definition files without having to reconfigure the complete project. -+ add_custom_command( -+ TARGET "sip_${MODULE_TARGET}" -+ COMMAND ${CMAKE_COMMAND} -E env "PYTHONPATH=${PYTHONPATH}${env_path_sep}$ENV{PYTHONPATH}${env_path_sep}${CMAKE_CURRENT_BINARY_DIR}" ${SIP_BUILD_EXECUTABLE} ${SIP_ARGS} -+ COMMAND ${CMAKE_COMMAND} -E touch ${_sip_output_files} -+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ -+ MAIN_DEPENDENCY ${MODULE_SIP} -+ DEPENDS ${sip_sources} -+ VERBATIM -+ ) -+ -+ set_target_properties("sip_${MODULE_TARGET}" -+ PROPERTIES -+ RESOURCE "${CMAKE_CURRENT_BINARY_DIR}/${MODULE_TARGET}/${MODULE_TARGET}/${MODULE_TARGET}.pyi") -+endfunction() -+ -+function(install_sip_module MODULE_TARGET) -+ if(DEFINED ARGV1) -+ set(_install_path ${ARGV1}) -+ else() -+ if(DEFINED Python_SITEARCH) -+ set(_install_path ${Python_SITEARCH}) -+ elseif(DEFINED Python_SITELIB) -+ set(_install_path ${Python_SITELIB}) -+ else() -+ message(FATAL_ERROR "SIP: Specify the site-packages location") -+ endif() -+ endif() -+ message(STATUS "SIP: Installing Python module and PEP 484 file in ${_install_path}") -+ install(TARGETS "sip_${MODULE_TARGET}" -+ ARCHIVE DESTINATION ${_install_path} -+ LIBRARY DESTINATION ${_install_path} -+ RUNTIME DESTINATION ${_install_path} -+ RESOURCE DESTINATION ${_install_path} -+ ) -+endfunction() diff --git a/backports/py3-pynest2d/cmake.patch b/backports/py3-pynest2d/cmake.patch deleted file mode 100644 index c2ac24e..0000000 --- a/backports/py3-pynest2d/cmake.patch +++ /dev/null @@ -1,34 +0,0 @@ ---- ./CMakeLists.txt.orig -+++ ./CMakeLists.txt -@@ -2,16 +2,25 @@ - project(pynest2d) - cmake_minimum_required(VERSION 3.20) - --find_package(nest2d REQUIRED) --find_package(cpython REQUIRED) -+list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) - --find_package(standardprojectsettings REQUIRED) --find_package(sipbuildtool REQUIRED) -+find_package(Libnest2D REQUIRED) - -+find_package(Python REQUIRED COMPONENTS Interpreter Development) -+find_package(SIP REQUIRED 6.5.0) -+ - add_library(pynest2d INTERFACE) --use_threads(pynest2d) - --target_link_libraries(pynest2d INTERFACE nest2d::nest2d cpython::cpython) -+target_include_directories(pynest2d -+ INTERFACE -+ $ -+ $ -+ ) -+ -+find_package(Threads REQUIRED) -+find_package(Boost REQUIRED) -+target_link_libraries(pynest2d INTERFACE Libnest2D::libnest2d Python::Python Threads::Threads Boost::boost) -+ - add_sip_module(pynest2d) - install_sip_module(pynest2d) - diff --git a/backports/py3-pynest2d/pyproject.patch b/backports/py3-pynest2d/pyproject.patch deleted file mode 100644 index 3c74389..0000000 --- a/backports/py3-pynest2d/pyproject.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- /dev/null -+++ ./pyproject.toml.in -@@ -0,0 +1,17 @@ -+[build-system] -+requires = ["sip >=6, <7"] -+build-backend = "sipbuild.api" -+ -+[tool.sip.metadata] -+name = "pynest2d" -+ -+[tool.sip.project] -+builder-factory = "CMakeBuilder" -+sip-files-dir = "${CMAKE_CURRENT_SOURCE_DIR}/src/" -+sip-include-dirs = ["CMAKE_CURRENT_SOURCE_DIR/src/"] -+build-dir = "${CMAKE_CURRENT_BINARY_DIR}/pynest2d/" -+ -+[tool.sip.bindings.pynest2d] -+exceptions = true -+release-gil = true -+concatenate = 8 -\ No newline at end of file From 6a037b09a692047293fbaa347cfb52c55e9d13d7 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:46:17 -0400 Subject: [PATCH 620/738] backports/py3-rtree: drop due to not needed --- backports/py3-rtree/APKBUILD | 39 ------------------------------------ 1 file changed, 39 deletions(-) delete mode 100644 backports/py3-rtree/APKBUILD diff --git a/backports/py3-rtree/APKBUILD b/backports/py3-rtree/APKBUILD deleted file mode 100644 index f42ccfc..0000000 --- a/backports/py3-rtree/APKBUILD +++ /dev/null @@ -1,39 +0,0 @@ -# Contributor: Alex Yam -# Maintainer: Celeste -maintainer="Celeste " -pkgname=py3-rtree -pkgver=1.4.0 -pkgrel=1 -pkgdesc="Python3 library for r-tree spatial index (wrapper for libspatialindex)" -url="https://pypi.org/project/Rtree/" -# s390x: Test failed: IndexSerialization::test_interleaving - AssertionError -# s390x: Test failed: IndexStream::test_stream_input - AssertionError -arch="noarch !s390x" -license="MIT" -depends="python3 libspatialindex-dev" -makedepends="py3-setuptools py3-wheel py3-gpep517" -checkdepends="py3-pytest py3-numpy" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/Toblerity/rtree/archive/$pkgver.tar.gz" -builddir="$srcdir/rtree-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -v --doctest-modules rtree tests -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -9f253a4e4bce1e9210943d1a7b211895baf0478927c58a576235492f2705f4ff61df5fff46db382d6b7c04bde058f046ea0a408a4b504bd1a9bde37c8b1c277c py3-rtree-1.4.0.tar.gz -" From 26821abb534e5e24a7b73bb7cd011bbf896c23ab Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:46:39 -0400 Subject: [PATCH 621/738] backports/py3-svgpath: drop due to not needed --- .../105_use-better-than-nothing-font.patch | 300 ------------------ backports/py3-svgpath/APKBUILD | 41 --- backports/py3-svgpath/no-install-tests.patch | 15 - 3 files changed, 356 deletions(-) delete mode 100644 backports/py3-svgpath/105_use-better-than-nothing-font.patch delete mode 100644 backports/py3-svgpath/APKBUILD delete mode 100644 backports/py3-svgpath/no-install-tests.patch diff --git a/backports/py3-svgpath/105_use-better-than-nothing-font.patch b/backports/py3-svgpath/105_use-better-than-nothing-font.patch deleted file mode 100644 index 7e3d18d..0000000 --- a/backports/py3-svgpath/105_use-better-than-nothing-font.patch +++ /dev/null @@ -1,300 +0,0 @@ -From a17ed35e490a99a7dfab9833f6f3be86f004f699 Mon Sep 17 00:00:00 2001 -From: Benjamin Drung -Date: Fri, 15 Dec 2023 15:32:16 +0100 -Subject: [PATCH] tests: Use better than nothing font -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Pillow 10.1.0 uses a version of Aileron Regular instead of the previous -“better than nothing” default font (in case FreeType support is -available). This font change changes the resulting bitmap. - -Use the "better than nothing" font to keep the expected result -identical. The proper solution is either to use one specific font in -svg.path or make pillow support loading the “better than nothing” -default font. - -Bug-Debian: https://bugs.debian.org/1055159 ---- - tests/font.py | 145 ++++++++++++++++++++++++++++++++ - tests/test_boundingbox_image.py | 18 ++-- - tests/test_image.py | 18 +++- - 3 files changed, 170 insertions(+), 11 deletions(-) - create mode 100644 tests/font.py - -diff --git a/tests/font.py b/tests/font.py -new file mode 100644 -index 0000000..d375f49 ---- /dev/null -+++ b/tests/font.py -@@ -0,0 +1,145 @@ -+# Code taken from https://github.com/python-pillow/Pillow/blob/main/src/PIL/ImageFont.py -+# -+# License: the open source HPND License -+# Copyright (c) 1997-2003 by Secret Labs AB -+# Copyright (c) 1996-2003 by Fredrik Lundh -+ -+from PIL import Image, ImageFont -+from io import BytesIO -+import base64 -+ -+ -+def get_better_than_nothing_font(): -+ font = ImageFont.ImageFont() -+ font._load_pilfont_data( -+ # courB08 -+ BytesIO( -+ base64.b64decode( -+ b""" -+UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA -+BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL -+AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA -+AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB -+ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A -+BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB -+//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA -+AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH -+AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA -+ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv -+AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ -+/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 -+AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA -+AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG -+AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA -+BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA -+AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA -+2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF -+AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// -++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA -+////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA -+BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv -+AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA -+AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA -+AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA -+BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// -+//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA -+AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF -+AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB -+mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn -+AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA -+AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 -+AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA -+Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB -+//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA -+AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ -+AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC -+DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ -+AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ -++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 -+AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ -+///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG -+AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA -+BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA -+Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC -+eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG -+AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// -++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA -+////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA -+BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT -+AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A -+AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA -+Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA -+Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// -+//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA -+AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ -+AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA -+LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 -+AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA -+AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 -+AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA -+AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG -+AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA -+EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK -+AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA -+pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG -+AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// -++QAGAAIAzgAKANUAEw== -+""" -+ ) -+ ), -+ Image.open( -+ BytesIO( -+ base64.b64decode( -+ b""" -+iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u -+Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 -+M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g -+LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F -+IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA -+Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 -+NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx -+in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 -+SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY -+AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt -+y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG -+ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY -+lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H -+/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 -+AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 -+c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ -+/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw -+pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv -+oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR -+evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA -+AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// -+Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR -+w7IkEbzhVQAAAABJRU5ErkJggg== -+""" -+ ) -+ ) -+ ), -+ ) -+ return font -diff --git a/tests/test_boundingbox_image.py b/tests/test_boundingbox_image.py -index 21f19a7..414f0b1 100644 ---- a/tests/test_boundingbox_image.py -+++ b/tests/test_boundingbox_image.py -@@ -5,6 +5,7 @@ - - from PIL import Image, ImageDraw, ImageColor, ImageChops - from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc -+from .font import get_better_than_nothing_font - - - RED = ImageColor.getcolor("red", mode="RGB") -@@ -57,17 +58,15 @@ def draw_boundingbox(self, path): - sys.platform != "linux", reason="Different platforms have different fonts" - ) - def test_image(self): -- self.draw.text((10, 10), "This is an SVG line:") -- self.draw.text( -- (10, 100), -- "The red line is a bounding box.", -- ) -+ font = get_better_than_nothing_font() -+ self.draw.text((10, 10), "This is an SVG line:", font=font) -+ self.draw.text((10, 100), "The red line is a bounding box.", font=font) - - line1 = Line(40 + 60j, 200 + 80j) - self.draw_path(line1) - self.draw_boundingbox(line1) - -- self.draw.text((10, 140), "These are Arc segments:") -+ self.draw.text((10, 140), "These are Arc segments:", font=font) - arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) - self.draw_path(arc1) - self.draw_boundingbox(arc1) -@@ -83,6 +82,7 @@ def test_image(self): - self.draw.text( - (10, 500), - "Next we have a quadratic bezier curve, with one tangent:", -+ font=font, - ) - start = 30 + 600j - control = 400 + 540j -@@ -95,12 +95,16 @@ def test_image(self): - self.draw.text( - (10, 670), - "The white dot is the control point, and the cyan lines are ", -+ font=font, -+ ) -+ self.draw.text( -+ (10, 690), "illustrating the how the control point works.", font=font - ) -- self.draw.text((10, 690), "illustrating the how the control point works.") - - self.draw.text( - (10, 730), - "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", -+ font=font, - ) - - start = 200 + 800j -diff --git a/tests/test_image.py b/tests/test_image.py -index 49967ea..ae3a357 100644 ---- a/tests/test_image.py -+++ b/tests/test_image.py -@@ -4,6 +4,7 @@ - from math import sqrt - - from svg.path.path import CubicBezier, QuadraticBezier, Line, Arc -+from .font import get_better_than_nothing_font - - - RED = ImageColor.getcolor("red", mode="RGB") -@@ -57,25 +58,30 @@ def draw_tangents(self, path, count): - self.draw.line([c2t(p), c2t(tt + p)], fill=YELLOW, width=1) - - def test_image(self): -- self.draw.text((10, 10), "This is an SVG line:") -+ font = get_better_than_nothing_font() -+ self.draw.text((10, 10), "This is an SVG line:", font=font) - self.draw.text( - (10, 100), - "The red line is a tangent, and the yellow is 90 degrees from that.", -+ font=font, - ) - - line1 = Line(40 + 60j, 200 + 80j) - self.draw_path(line1) - self.draw_tangents(line1, 1) - -- self.draw.text((10, 140), "This is an Arc segment, almost a whole circle:") -+ self.draw.text( -+ (10, 140), "This is an Arc segment, almost a whole circle:", font=font -+ ) - arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j) - self.draw_path(arc1) - self.draw_tangents(arc1, 5) -- self.draw.text((10, 460), "With five tangents.") -+ self.draw.text((10, 460), "With five tangents.", font=font) - - self.draw.text( - (10, 500), - "Next we have a quadratic bezier curve, with one tangent:", -+ font=font, - ) - start = 30 + 600j - control = 400 + 540j -@@ -88,12 +94,16 @@ def test_image(self): - self.draw.text( - (10, 670), - "The white dot is the control point, and the cyan lines are ", -+ font=font, -+ ) -+ self.draw.text( -+ (10, 690), "illustrating the how the control point works.", font=font - ) -- self.draw.text((10, 690), "illustrating the how the control point works.") - - self.draw.text( - (10, 730), - "Lastly is a cubic bezier, with 2 tangents, and 2 control points:", -+ font=font, - ) - - start = 30 + 800j diff --git a/backports/py3-svgpath/APKBUILD b/backports/py3-svgpath/APKBUILD deleted file mode 100644 index 3cfbc91..0000000 --- a/backports/py3-svgpath/APKBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: Celeste -maintainer="Celeste " -pkgname=py3-svgpath -pkgver=6.3 -pkgrel=3 -pkgdesc="SVG path and object parser" -url="https://github.com/regebro/svg.path" -arch="noarch" -license="MIT" -makedepends="py3-setuptools py3-gpep517 py3-wheel" -checkdepends="py3-pytest py3-pillow" -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/regebro/svg.path/archive/refs/tags/$pkgver.tar.gz - 105_use-better-than-nothing-font.patch - no-install-tests.patch - " -builddir="$srcdir/svg.path-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -fd9dd9e1e603be5e212e3eb247c9f3778203f5285397a4cdde4c038c3f31f7bc2b8904491c208256996e2fbd39b4e5f7ea58d964bd5d22bc09c57e4bc2c70317 py3-svgpath-6.3.tar.gz -d12d32b0f6b075ee8602a7eee5dd1ddaa8f097fe3d471f2941fac0bba335641111eb2c0e2819dffea822f895833ffafa35baac80085cf759ca1ed8f7a6b92773 105_use-better-than-nothing-font.patch -62ab1e0980c7fb797f74b81c937a68b6af1112fff293e6ddec6389a8e490a08e181c37217408b58ce3a2ae2afda7813bb3bbe57d5414cfc18e4e53e6d2f2ea5a no-install-tests.patch -" diff --git a/backports/py3-svgpath/no-install-tests.patch b/backports/py3-svgpath/no-install-tests.patch deleted file mode 100644 index 994ce3c..0000000 --- a/backports/py3-svgpath/no-install-tests.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- ./setup.py.orig -+++ ./setup.py -@@ -1,3 +1,3 @@ --from setuptools import setup -+from setuptools import setup, find_packages - --setup() -+setup(packages=find_packages("src", exclude=["*tests"])) ---- ./MANIFEST.in.orig -+++ ./MANIFEST.in -@@ -3,3 +3,4 @@ - - recursive-include src *.png - -+global-exclude tests/* From 73b064ed374506e1287a575cf93b84c065fc3013 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:47:05 -0400 Subject: [PATCH 622/738] backports/uranium: drop due to not needed --- ...ix-simplebutton-use-of-um-colorimage.patch | 34 ------- backports/uranium/APKBUILD | 61 ------------ backports/uranium/cmake-helpers.patch | 89 ----------------- backports/uranium/cmake.patch | 16 ---- .../fix-logger-used-but-not-imported.patch | 14 --- .../uranium/qt-try-ints-then-bytes.patch | 96 ------------------- 6 files changed, 310 deletions(-) delete mode 100644 backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch delete mode 100644 backports/uranium/APKBUILD delete mode 100644 backports/uranium/cmake-helpers.patch delete mode 100644 backports/uranium/cmake.patch delete mode 100644 backports/uranium/fix-logger-used-but-not-imported.patch delete mode 100644 backports/uranium/qt-try-ints-then-bytes.patch diff --git a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch b/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch deleted file mode 100644 index 3112c9c..0000000 --- a/backports/uranium/874_fix-simplebutton-use-of-um-colorimage.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 88fd460a63263d66173f1e0127b0f208577d7f4e Mon Sep 17 00:00:00 2001 -Patch-Source: https://github.com/Ultimaker/Uranium/pull/874 -From: fieldOfView -Date: Sat, 20 May 2023 21:14:36 +0200 -Subject: [PATCH] Fix SimpleButton use of UM.ColorImage - -Fixes https://github.com/Ultimaker/Cura/issues/15524 ---- - UM/Qt/qml/UM/SimpleButton.qml | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/UM/Qt/qml/UM/SimpleButton.qml b/UM/Qt/qml/UM/SimpleButton.qml -index d3d398753c..d3bd0e8e14 100644 ---- a/UM/Qt/qml/UM/SimpleButton.qml -+++ b/UM/Qt/qml/UM/SimpleButton.qml -@@ -1,7 +1,8 @@ --// Copyright (c) 2018 Ultimaker B.V. -+// Copyright (c) 2023 Ultimaker B.V. - // Uranium is released under the terms of the LGPLv3 or higher. - - import QtQuick 2.1 -+import UM 1.5 as UM - - MouseArea - { -@@ -27,7 +28,7 @@ MouseArea - radius: 0 - } - -- ColorImage -+ UM.ColorImage - { - id: image - diff --git a/backports/uranium/APKBUILD b/backports/uranium/APKBUILD deleted file mode 100644 index e896971..0000000 --- a/backports/uranium/APKBUILD +++ /dev/null @@ -1,61 +0,0 @@ -# Contributor: Anjandev Momi -# Maintainer: Anjandev Momi -pkgname=uranium -pkgver=5.2.2 -pkgrel=3 -pkgdesc="A Python framework for building Desktop applications" -url="https://github.com/Ultimaker/Uranium" -arch="noarch !armhf !riscv64" # armhf: no py3-qt5, rv64: no py3-shapely -license="LGPL-3.0-or-later" -depends=" - py3-cryptography - py3-numpy - py3-qt6 - py3-scipy - python3 - " -# add cura-binary-data to makedepends when packaged -makedepends="samurai cmake doxygen gettext-dev graphviz" -checkdepends="py3-pytest py3-pytest-benchmark py3-twisted" -options="!check" # checks broken from 5.x onward -source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/Uranium/archive/refs/tags/$pkgver.tar.gz - cmake.patch - 874_fix-simplebutton-use-of-um-colorimage.patch - fix-logger-used-but-not-imported.patch - qt-try-ints-then-bytes.patch - cmake-helpers.patch" -builddir="$srcdir/Uranium-$pkgver" - -build() { - if [ "$CBUILD" != "$CHOST" ]; then - CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" - fi - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DCMAKE_BUILD_TYPE=MinSizeRel \ - -DGETTEXT_MSGINIT_EXECUTABLE=msginit \ - -DCURA_BINARY_DATA_DIRECTORY=/usr/share/cura \ - $CMAKE_CROSSOPTS - cmake --build build -} - -check() { - # useless code style test with another dependency - ctest -T Test -} - -package() { - DESTDIR="$pkgdir" cmake --install build - mkdir "$pkgdir"/usr/share/uranium/cmake - mv "$pkgdir"/usr/share/cmake-*/Modules/* "$pkgdir"/usr/share/uranium/cmake/ -} - -sha512sums=" -a9c222400022e05b5c42c72843b024204a58f5d233805bdffa610a2d9cbd1873773868b049aabbe52c6e859f235ca5428fcdfdbb86651f428483999060611e10 uranium-5.2.2.tar.gz -196a04164de288f5bffeebb73ace9390059dcffebaf40395368f413d1af2e2c668d85dd4c761ad226732540d41598235c2c368152cc157d2e89445ce27738c9b cmake.patch -c50b37a3a44c4d4f66d115e72a430b82a8125efa49ce51271d5cad7fac15b2941a6a82b71fd07cef751b159296b64d783b348cebe7dfd865f0121815d2cf41f4 874_fix-simplebutton-use-of-um-colorimage.patch -78e1415133bc4135f93633375bdb71a9e04b9cd128067d223985d0878f0e3de3ed1d336117fc527f0804b99878bd56817e3eb7a5aa545cc877b9f43386e17e78 fix-logger-used-but-not-imported.patch -26489638fcf80822d16b0a295aee21a8973c23a023b1daf7f2cf5f7be7c56e72a15edd87ac6993f8a2ad09086d7d1a8b7d32247522c9429183625e3a0b63f2ae qt-try-ints-then-bytes.patch -aa185ce3592036f045e3386266015cc08443c2e4f9b9a4c03c77c13525af98d68eaa3360e8858e0561417a826c73bf8a2b209bcad91d2cc16cce32fb0231fcf8 cmake-helpers.patch -" diff --git a/backports/uranium/cmake-helpers.patch b/backports/uranium/cmake-helpers.patch deleted file mode 100644 index 3c5d1f3..0000000 --- a/backports/uranium/cmake-helpers.patch +++ /dev/null @@ -1,89 +0,0 @@ ---- /dev/null -+++ ./cmake/UraniumPluginInstall.cmake -@@ -0,0 +1,86 @@ -+# Copyright (c) 2022 Ultimaker B.V. -+# UraniumPluginInstall.cmake is released under the terms of the LGPLv3 or higher. -+ -+# -+# This module detects all plugins that need to be installed and adds them using the CMake install() command. -+# It detects all plugin folder in the path "plugins/*" where there's a "plugin.json" in it. -+# -+# Plugins can be configured to NOT BE INSTALLED via the variable "UM_NO_INSTALL_PLUGINS" as a list of string in the -+# form of "a;b;c" or "a,b,c". By default all plugins will be installed. -+# -+ -+# Options or configuration variables -+set(UM_NO_INSTALL_PLUGINS "" CACHE STRING "A list of plugins that should not be installed, separated with ';' or ','.") -+ -+file(GLOB_RECURSE _plugin_json_list ${CMAKE_SOURCE_DIR}/plugins/*/plugin.json) -+list(LENGTH _plugin_json_list _plugin_json_list_len) -+ -+# Sort the lists alphabetically so we can handle cases like this: -+# - plugins/my_plugin/plugin.json -+# - plugins/my_plugin/my_module/plugin.json -+# In this case, only "plugins/my_plugin" should be added via install(). -+set(_no_install_plugin_list ${UM_NO_INSTALL_PLUGINS}) -+# Sanitize the string so the comparison will be case-insensitive. -+string(STRIP "${_no_install_plugin_list}" _no_install_plugin_list) -+string(TOLOWER "${_no_install_plugin_list}" _no_install_plugin_list) -+ -+# WORKAROUND counterpart of what's in cura-build. -+string(REPLACE "," ";" _no_install_plugin_list "${_no_install_plugin_list}") -+ -+list(LENGTH _no_install_plugin_list _no_install_plugin_list_len) -+ -+if(_no_install_plugin_list_len GREATER 0) -+ list(SORT _no_install_plugin_list) -+endif() -+if(_plugin_json_list_len GREATER 0) -+ list(SORT _plugin_json_list) -+endif() -+ -+# Check all plugin directories and add them via install() if needed. -+set(_install_plugin_list "") -+foreach(_plugin_json_path ${_plugin_json_list}) -+ get_filename_component(_plugin_dir ${_plugin_json_path} DIRECTORY) -+ file(RELATIVE_PATH _rel_plugin_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_plugin_dir}) -+ get_filename_component(_plugin_dir_name ${_plugin_dir} NAME) -+ -+ # Make plugin name comparison case-insensitive -+ string(TOLOWER "${_plugin_dir_name}" _plugin_dir_name_lowercase) -+ -+ # Check if this plugin needs to be skipped for installation -+ set(_add_plugin ON) # Indicates if this plugin should be added to the build or not. -+ set(_is_no_install_plugin OFF) # If this plugin will not be added, this indicates if it's because the plugin is -+ # specified in the NO_INSTALL_PLUGINS list. -+ if(_no_install_plugin_list) -+ if("${_plugin_dir_name_lowercase}" IN_LIST _no_install_plugin_list) -+ set(_add_plugin OFF) -+ set(_is_no_install_plugin ON) -+ endif() -+ endif() -+ -+ # Make sure this is not a subdirectory in a plugin that's already in the install list -+ if(_add_plugin) -+ foreach(_known_install_plugin_dir ${_install_plugin_list}) -+ if(_plugin_dir MATCHES "${_known_install_plugin_dir}.+") -+ set(_add_plugin OFF) -+ break() -+ endif() -+ endforeach() -+ endif() -+ -+ if(_add_plugin) -+ message(STATUS "[+] PLUGIN TO INSTALL: ${_rel_plugin_dir}") -+ get_filename_component(_rel_plugin_parent_dir ${_rel_plugin_dir} DIRECTORY) -+ install(DIRECTORY ${_rel_plugin_dir} -+ DESTINATION lib${LIB_SUFFIX}/uranium/${_rel_plugin_parent_dir} -+ PATTERN "__pycache__" EXCLUDE -+ PATTERN "*.qmlc" EXCLUDE -+ ) -+ list(APPEND _install_plugin_list ${_plugin_dir}) -+ elseif(_is_no_install_plugin) -+ message(STATUS "[-] PLUGIN TO REMOVE : ${_rel_plugin_dir}") -+ execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/mod_bundled_packages_json.py -+ -d ${CMAKE_CURRENT_SOURCE_DIR}/resources/bundled_packages -+ ${_plugin_dir_name} -+ RESULT_VARIABLE _mod_json_result) -+ endif() -+endforeach() diff --git a/backports/uranium/cmake.patch b/backports/uranium/cmake.patch deleted file mode 100644 index b1a888b..0000000 --- a/backports/uranium/cmake.patch +++ /dev/null @@ -1,16 +0,0 @@ ---- ./CMakeLists.txt.orig -+++ ./CMakeLists.txt -@@ -19,9 +19,12 @@ - # Build Translations - CREATE_TRANSLATION_TARGETS() - -+find_package(Python REQUIRED COMPONENTS Interpreter) - --install(DIRECTORY UM DESTINATION "${Python_SITELIB_LOCAL}") -+install(DIRECTORY UM DESTINATION "${Python_SITELIB}") - - install(FILES ${CMAKE_SOURCE_DIR}/cmake/UraniumTranslationTools.cmake - DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake-${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}/Modules/ ) - install(DIRECTORY resources DESTINATION ${CMAKE_INSTALL_DATADIR}/uranium) -+ -+include(UraniumPluginInstall) diff --git a/backports/uranium/fix-logger-used-but-not-imported.patch b/backports/uranium/fix-logger-used-but-not-imported.patch deleted file mode 100644 index 151893c..0000000 --- a/backports/uranium/fix-logger-used-but-not-imported.patch +++ /dev/null @@ -1,14 +0,0 @@ -Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch - -diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py -index 945b789..ef042a5 100644 ---- a/UM/View/SelectionPass.py.orig -+++ b/UM/View/SelectionPass.py -@@ -5,6 +5,7 @@ import enum - import random - from typing import TYPE_CHECKING - -+from UM.Logger import Logger - from UM.Resources import Resources - from UM.Application import Application - diff --git a/backports/uranium/qt-try-ints-then-bytes.patch b/backports/uranium/qt-try-ints-then-bytes.patch deleted file mode 100644 index 8f7d6db..0000000 --- a/backports/uranium/qt-try-ints-then-bytes.patch +++ /dev/null @@ -1,96 +0,0 @@ -Patch-Source: https://src.fedoraproject.org/rpms/python-uranium/blob/rawhide/f/Uranium-5.3.0-qt-try-ints-then-bytes-for-gl-mask-functions.patch - -diff --git a/UM/View/RenderBatch.py.orig b/UM/View/RenderBatch.py -index 6deeeb1..5f1eda5 100644 ---- a/UM/View/RenderBatch.py.orig -+++ b/UM/View/RenderBatch.py -@@ -186,10 +186,24 @@ class RenderBatch: - - if self._render_type == self.RenderType.Solid: - self._gl.glEnable(self._gl.GL_DEPTH_TEST) -- self._gl.glDepthMask(self._gl.GL_TRUE) -+ try: -+ self._gl.glDepthMask(self._gl.GL_TRUE) -+ except: -+ Logger.log("w", "glDepthMask does not like ints, trying bytes...") -+ try: -+ self._gl.glDepthMask(b'1') -+ except: -+ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") - elif self._render_type == self.RenderType.Transparent: - self._gl.glEnable(self._gl.GL_DEPTH_TEST) -- self._gl.glDepthMask(self._gl.GL_FALSE) -+ try: -+ self._gl.glDepthMask(self._gl.GL_FALSE) -+ except: -+ Logger.log("w", "glDepthMask does not like ints, trying bytes...") -+ try: -+ self._gl.glDepthMask(b'1') -+ except: -+ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") - elif self._render_type == self.RenderType.Overlay: - self._gl.glDisable(self._gl.GL_DEPTH_TEST) - -diff --git a/UM/View/RenderPass.py.orig b/UM/View/RenderPass.py -index 8068ddf..8cb4f67 100644 ---- a/UM/View/RenderPass.py.orig -+++ b/UM/View/RenderPass.py -@@ -93,8 +93,22 @@ class RenderPass: - self._fbo.bind() - - # Ensure we can actually write to the relevant FBO components. -- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) -- self._gl.glDepthMask(self._gl.GL_TRUE) -+ try: -+ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE,self._gl.GL_TRUE, self._gl.GL_TRUE) -+ except: -+ Logger.log("w", "glColorMask does not like ints, trying bytes...") -+ try: -+ self._gl.glColorMask(b'1', b'1',b'1', b'1') -+ except: -+ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") -+ try: -+ self._gl.glDepthMask(self._gl.GL_TRUE) -+ except: -+ Logger.log("w", "glDepthMask does not like ints, trying bytes...") -+ try: -+ self._gl.glDepthMask(b'1') -+ except: -+ Logger.log("e", "glDepthMask does not like ints or bytes, no idea what it wants") - - self._gl.glClear(self._gl.GL_COLOR_BUFFER_BIT | self._gl.GL_DEPTH_BUFFER_BIT) - -diff --git a/UM/View/SelectionPass.py.orig b/UM/View/SelectionPass.py -index ef042a5..c28fe4f 100644 ---- a/UM/View/SelectionPass.py.orig -+++ b/UM/View/SelectionPass.py -@@ -110,13 +110,27 @@ class SelectionPass(RenderPass): - if selectable_objects: - batch.render(self._scene.getActiveCamera()) - -- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) -+ try: -+ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_FALSE) -+ except: -+ Logger.log("w", "glColorMask does not like ints, trying bytes...") -+ try: -+ self._gl.glColorMask(b'1', b'1', b'1', b'0') -+ except: -+ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") - self._gl.glDisable(self._gl.GL_DEPTH_TEST) - - tool_handle.render(self._scene.getActiveCamera()) - - self._gl.glEnable(self._gl.GL_DEPTH_TEST) -- self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) -+ try: -+ self._gl.glColorMask(self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE, self._gl.GL_TRUE) -+ except: -+ Logger.log("w", "glColorMask does not like ints, trying bytes...") -+ try: -+ self._gl.glColorMask(b'1', b'1', b'1', b'1') -+ except: -+ Logger.log("e", "glColorMask does not like ints or bytes, no idea what it wants") - - self.release() - From 024544f4df3782212ebb0ab38accc67b009811d6 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:47:41 -0400 Subject: [PATCH 623/738] backports/libnest2d: drop due to not needed --- backports/libnest2d/APKBUILD | 40 ------ .../libnest2d/allow-disallowed-area.patch | 124 ------------------ 2 files changed, 164 deletions(-) delete mode 100644 backports/libnest2d/APKBUILD delete mode 100644 backports/libnest2d/allow-disallowed-area.patch diff --git a/backports/libnest2d/APKBUILD b/backports/libnest2d/APKBUILD deleted file mode 100644 index c0e8dd5..0000000 --- a/backports/libnest2d/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Contributor: Anjandev Momi -# Maintainer: Anjandev Momi -pkgname=libnest2d -pkgver=0.4 -pkgrel=7 -pkgdesc="2D irregular bin packaging and nesting library written in modern C++" -url="https://github.com/tamasmeszaros/libnest2d" -arch="noarch" -license="LGPL-3.0-only" -makedepends="samurai cmake clipper-dev boost-dev nlopt-dev" -subpackages="$pkgname-dev" -source="$pkgname-$pkgver.tar.gz::https://github.com/tamasmeszaros/libnest2d/archive/refs/tags/$pkgver.tar.gz - allow-disallowed-area.patch" - -build() { - if [ "$CBUILD" != "$CHOST" ]; then - CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" - fi - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DBUILD_SHARED_LIBS=True \ - -DCMAKE_BUILD_TYPE=minsizerel \ - $CMAKE_CROSSOPTS . - cmake --build build -} - -check() { - cd build - ctest -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -fadce18986b844eed13a581f84055df909a17407a0980deb6c7c24248a969a537a8840650bcfc673e61973810ce9a008acb599e3b8e00c9bff6b566ca41cd62c libnest2d-0.4.tar.gz -2e8cd3343c72c576ecb54960d7ad9f4f2322f822b19ac41850b3b28da95e97c2cefe7c67de6c97627df08cd5cdc1660ce4dfa95fe51f88e0ff5c066c8d785458 allow-disallowed-area.patch -" diff --git a/backports/libnest2d/allow-disallowed-area.patch b/backports/libnest2d/allow-disallowed-area.patch deleted file mode 100644 index 479b9c4..0000000 --- a/backports/libnest2d/allow-disallowed-area.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 2e91be2679b5efa0773292d9d0a2ae72255bb271 Mon Sep 17 00:00:00 2001 -From: Ghostkeeper -Date: Tue, 6 Oct 2020 16:13:15 +0200 -Subject: [PATCH 1/3] Allow for an item to be a disallowed area - -url: https://github.com/tamasmeszaros/libnest2d/pull/18 - -Disallowed areas have slightly different behaviour from fixed items: Other items won't get packed closely around them. Implementation of that pending. - -Contributes to issue CURA-7754. ---- - include/libnest2d/nester.hpp | 16 ++++++++++++++++ - 1 file changed, 16 insertions(+) - -diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp -index 2f207d5..932a060 100644 ---- a/include/libnest2d/nester.hpp -+++ b/include/libnest2d/nester.hpp -@@ -71,6 +71,15 @@ class _Item { - int binid_{BIN_ID_UNSET}, priority_{0}; - bool fixed_{false}; - -+ /** -+ * \brief If this is a fixed area, indicates whether it is a disallowed area -+ * or a previously placed item. -+ * -+ * If this is a disallowed area, other objects will not get packed close -+ * together with this item. It only blocks other items in its area. -+ */ -+ bool disallowed_{false}; -+ - public: - - /// The type of the shape which was handed over as the template argument. -@@ -129,11 +138,18 @@ class _Item { - sh_(sl::create(std::move(contour), std::move(holes))) {} - - inline bool isFixed() const noexcept { return fixed_; } -+ inline bool isDisallowedArea() const noexcept { return disallowed_; } - inline void markAsFixedInBin(int binid) - { - fixed_ = binid >= 0; - binid_ = binid; - } -+ inline void markAsDisallowedAreaInBin(int binid) -+ { -+ fixed_ = binid >= 0; -+ binid_ = binid; -+ disallowed_ = true; -+ } - - inline void binId(int idx) { binid_ = idx; } - inline int binId() const noexcept { return binid_; } - -From ff61049e59d3151462bca7ff2e2268c2b32731e7 Mon Sep 17 00:00:00 2001 -From: Ghostkeeper -Date: Tue, 6 Oct 2020 16:14:36 +0200 -Subject: [PATCH 2/3] Allow unsetting of being a disallowed area - -If you set the bin to -1 or set the item to be a simple fixed item afterwards, it'll no longer be a disallowed area. - -Contributes to issue CURA-7754. ---- - include/libnest2d/nester.hpp | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/include/libnest2d/nester.hpp b/include/libnest2d/nester.hpp -index 932a060..54761a6 100644 ---- a/include/libnest2d/nester.hpp -+++ b/include/libnest2d/nester.hpp -@@ -143,12 +143,13 @@ class _Item { - { - fixed_ = binid >= 0; - binid_ = binid; -+ disallowed_ = false; - } - inline void markAsDisallowedAreaInBin(int binid) - { - fixed_ = binid >= 0; - binid_ = binid; -- disallowed_ = true; -+ disallowed_ = fixed_; - } - - inline void binId(int idx) { binid_ = idx; } - -From 31391fd173249ad9b906390058e13b09238fadc8 Mon Sep 17 00:00:00 2001 -From: Ghostkeeper -Date: Thu, 8 Oct 2020 11:06:58 +0200 -Subject: [PATCH 3/3] Align items to their starting position if all placed - items are disallowed - -We shouldn't align items to disallowed areas. So place them in the starting position according to the alignment property. - -Lot of work to investigate. But very little code changes! - -Contributes to issue CURA-7754. ---- - include/libnest2d/placers/nfpplacer.hpp | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/include/libnest2d/placers/nfpplacer.hpp b/include/libnest2d/placers/nfpplacer.hpp -index 96a8cff..b0ebb15 100644 ---- a/include/libnest2d/placers/nfpplacer.hpp -+++ b/include/libnest2d/placers/nfpplacer.hpp -@@ -101,7 +101,7 @@ struct NfpPConfig { - * alignment with the candidate item or do anything else. - * - * \param remaining A container with the remaining items waiting to be -- * placed. You can use some features about the remaining items to alter to -+ * placed. You can use some features about the remaining items to alter the - * score of the current placement. If you know that you have to leave place - * for other items as well, that might influence your decision about where - * the current candidate should be placed. E.g. imagine three big circles -@@ -735,7 +735,8 @@ class _NofitPolyPlacer: public PlacerBoilerplate<_NofitPolyPlacer Date: Mon, 26 May 2025 20:48:05 -0400 Subject: [PATCH 624/738] backports/nlopt: drop due to not needed --- backports/nlopt/APKBUILD | 72 ---------------------------------------- 1 file changed, 72 deletions(-) delete mode 100644 backports/nlopt/APKBUILD diff --git a/backports/nlopt/APKBUILD b/backports/nlopt/APKBUILD deleted file mode 100644 index 66aea68..0000000 --- a/backports/nlopt/APKBUILD +++ /dev/null @@ -1,72 +0,0 @@ -# Contributor: Anjandev Momi -# Maintainer: Celeste -maintainer="Celeste " -pkgname=nlopt -pkgver=2.10.0 -pkgrel=0 -pkgdesc="Library for nonlinear optimization" -url="https://github.com/stevengj/nlopt" -arch="all" -license="LGPL-2.1-or-later" -makedepends=" - cmake - guile-dev - python3-dev - samurai - swig - " -subpackages=" - $pkgname-dev - $pkgname-doc - $pkgname-guile - " -source="$pkgname-$pkgver.tar.gz::https://github.com/stevengj/nlopt/archive/refs/tags/v$pkgver.tar.gz" - -case "$CARCH" in -# octave unavailable on these 3 archs -s390x|riscv64|ppc64le) ;; -*) - makedepends="$makedepends octave-dev" - subpackages="$subpackages $pkgname-octave" - ;; -esac - -build() { - if [ "$CBUILD" != "$CHOST" ]; then - local crossopts="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" - fi - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DBUILD_SHARED_LIBS=ON \ - -DCMAKE_BUILD_TYPE=MinSizeRel \ - -DNLOPT_TESTS="$(want_check && echo ON || echo OFF)" \ - $crossopts - cmake --build build -} - -check() { - ctest --test-dir build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -guile() { - pkgdesc="$pkgdesc (Guile bindings)" - depends="$pkgname=$pkgver-r$pkgrel guile" - - amove usr/lib/guile usr/share/guile -} - -octave() { - pkgdesc="$pkgdesc (Octave bindings)" - depends="$pkgname=$pkgver-r$pkgrel octave" - - amove usr/lib/octave usr/share/octave -} - -sha512sums=" -7668db6997ba141ee1759f222bad23a7854aa17962470653ddb5824c25100b50f52c462441f0cc12a62e2322ff084c7f7b7fab09471b0acb13a861d7f7575655 nlopt-2.10.0.tar.gz -" From 0df5b0abb671fed50c07f30ae01f0dcc76df8d00 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:48:28 -0400 Subject: [PATCH 625/738] backports/nibspatialindex: drop due to not needed --- backports/libspatialindex/APKBUILD | 36 ------------------------------ 1 file changed, 36 deletions(-) delete mode 100644 backports/libspatialindex/APKBUILD diff --git a/backports/libspatialindex/APKBUILD b/backports/libspatialindex/APKBUILD deleted file mode 100644 index 4ef768c..0000000 --- a/backports/libspatialindex/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor: Alex Yam -# Maintainer: Celeste -maintainer="Celeste " -pkgname=libspatialindex -pkgver=0_git20210205 -_commit=8ee223632f95c81f49f5eb2d547ad973475c4601 -pkgrel=2 -pkgdesc="Extensible framework for robust spatial indexing methods" -url="https://libspatialindex.org/" -arch="all" -license="MIT" -makedepends="cmake samurai" -subpackages="$pkgname-dev" -source="$pkgname-$_commit.tar.gz::https://github.com/libspatialindex/libspatialindex/archive/$_commit.tar.gz" -builddir="$srcdir/$pkgname-$_commit" - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=MinSizeRel \ - -DCMAKE_PREFIX_PATH=/usr \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_TESTING="$(want_check && echo ON || echo OFF)" - cmake --build build -} - -check() { - ctest --test-dir build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -caf91aac77b75445e4fc4d0baedcd10c619b2097dfd841b00339d9ddd4b73db05b99de1d84be88f1083f4713a936cf110d5851523491f5a74c6f96e1d5795dbb libspatialindex-8ee223632f95c81f49f5eb2d547ad973475c4601.tar.gz -" From a04e0ca17b7e63b3f96b18ba0cab9e3ed89a3952 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 20:49:05 -0400 Subject: [PATCH 626/738] backports/fdm-materials: drop due to not needed --- backports/fdm-materials/APKBUILD | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 backports/fdm-materials/APKBUILD diff --git a/backports/fdm-materials/APKBUILD b/backports/fdm-materials/APKBUILD deleted file mode 100644 index 5780f02..0000000 --- a/backports/fdm-materials/APKBUILD +++ /dev/null @@ -1,27 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=fdm-materials -pkgver=5.2.2 -pkgrel=1 -pkgdesc="FDM Material Database" -url="https://github.com/Ultimaker/fdm_materials" -arch="noarch" -license="CC0-1.0" -makedepends="cmake samurai" -options="!check" # no checks provided -source="$pkgname-$pkgver.tar.gz::https://github.com/Ultimaker/fdm_materials/archive/refs/tags/$pkgver.tar.gz" -builddir="$srcdir/fdm_materials-$pkgver" - -build() { - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -73eefec8b7b88af73afc578ffba583480bda30309945b1720d7a1a075bd7ab3279599d53fe83f4c96695f294a5a3e11297abc334ca6cc9db163d4eb0fbdaf0f9 fdm-materials-5.2.2.tar.gz -" From d55be2f427e165d4a9aaf8b3c93ea365a5ffb4a0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 22:09:21 -0400 Subject: [PATCH 627/738] backports/electron: add rust 1.87 patches --- ...l_allocator-to-provide-Rust-allocato.patch | 730 ++++++++++++++++++ ...default-allocator-directly-from-Rust.patch | 319 ++++++++ ...7b43542838f0a4a6cfdb17fbeadf45002042.patch | 102 +++ .../electron/0004-Drop-remap_alloc-dep.patch | 44 ++ ...ild-rust-allocator-after-a-Rust-tool.patch | 354 +++++++++ backports/electron/APKBUILD | 14 + 6 files changed, 1563 insertions(+) create mode 100644 backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch create mode 100644 backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch create mode 100644 backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch create mode 100644 backports/electron/0004-Drop-remap_alloc-dep.patch create mode 100644 backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch diff --git a/backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch b/backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch new file mode 100644 index 0000000..580323c --- /dev/null +++ b/backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch @@ -0,0 +1,730 @@ +From c854a92a215d0cf39c704bbadd3611e552073d5f Mon Sep 17 00:00:00 2001 +From: Collin Baker +Date: Fri, 4 Apr 2025 14:08:18 -0700 +Subject: [PATCH] Reland "Use #[global_allocator] to provide Rust allocator + implementation" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is a reland of commit cfa3beef52625e03ba6ce2b2ac98e1b89dde5cdb + +Original was reverted due to a cronet gn2bp failure. The script +filtered out GN rules in //build/rust/std, but this caused an exception +when //build/rust/std:allocator was referenced later. + +Moving the rules to //build/rust/allocator sidesteps the issue. + +Original change's description: +> Use #[global_allocator] to provide Rust allocator implementation +> +> The allocator shim hack we have been using no longer works with +> upstream Rust. Replace it with a less-unsupported method: provide a +> https://github.com/rust-lang/rust/issues/123015, which still requires +> us to provide a few symbol definitions. +> +> Bug: 408221149, 407024458 +> Change-Id: If1808ca24b12dc80ead35a25521313a3d2e148d5 +> +> Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel +> Change-Id: If1808ca24b12dc80ead35a25521313a3d2e148d5 +> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6427855 +> Reviewed-by: Alan Zhao +> Reviewed-by: Lei Zhang +> Reviewed-by: Łukasz Anforowicz +> Commit-Queue: Collin Baker +> Auto-Submit: Collin Baker +> Cr-Commit-Position: refs/heads/main@{#1442472} + +Bug: 408221149, 407024458 +Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel +Change-Id: I36fef217297bfe64ae81519be24b8c653f6fdfa1 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6432410 +Reviewed-by: Mohannad Farrag +Reviewed-by: Łukasz Anforowicz +Auto-Submit: Collin Baker +Commit-Queue: Łukasz Anforowicz +Cr-Commit-Position: refs/heads/main@{#1442922} +--- + build/rust/allocator/BUILD.gn | 90 ++++++++++++++++ + build/rust/{std => allocator}/alias.cc | 4 +- + build/rust/{std => allocator}/alias.h | 6 +- + .../allocator_impls.cc} | 100 ++++++++---------- + build/rust/allocator/allocator_impls.h | 25 +++++ + .../allocator/allocator_shim_definitions.cc | 30 ++++++ + .../{std => allocator}/compiler_specific.h | 6 +- + .../rust/{std => allocator}/immediate_crash.h | 6 +- + build/rust/allocator/lib.rs | 48 +++++++++ + build/rust/cargo_crate.gni | 9 ++ + build/rust/rust_macro.gni | 3 + + build/rust/rust_target.gni | 4 + + build/rust/std/BUILD.gn | 41 ------- + components/cronet/android/dependencies.txt | 1 + + third_party/breakpad/BUILD.gn | 10 +- + 15 files changed, 272 insertions(+), 111 deletions(-) + create mode 100644 build/rust/allocator/BUILD.gn + rename build/rust/{std => allocator}/alias.cc (87%) + rename build/rust/{std => allocator}/alias.h (91%) + rename build/rust/{std/remap_alloc.cc => allocator/allocator_impls.cc} (67%) + create mode 100644 build/rust/allocator/allocator_impls.h + create mode 100644 build/rust/allocator/allocator_shim_definitions.cc + rename build/rust/{std => allocator}/compiler_specific.h (87%) + rename build/rust/{std => allocator}/immediate_crash.h (97%) + create mode 100644 build/rust/allocator/lib.rs + +diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn +new file mode 100644 +index 0000000000000..06aa47f097c9c +--- /dev/null ++++ b/build/rust/allocator/BUILD.gn +@@ -0,0 +1,90 @@ ++# Copyright 2025 The Chromium Authors ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++import("//build/buildflag_header.gni") ++import("//build/config/rust.gni") ++import("//build/rust/rust_static_library.gni") ++ ++rust_allocator_uses_partition_alloc = false ++if (build_with_chromium) { ++ import("//base/allocator/partition_allocator/partition_alloc.gni") ++ rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc ++} ++ ++buildflag_header("buildflags") { ++ header = "buildflags.h" ++ flags = [ ++ "RUST_ALLOCATOR_USES_PARTITION_ALLOC=$rust_allocator_uses_partition_alloc", ++ ] ++ visibility = [ ":*" ] ++} ++ ++if (toolchain_has_rust) { ++ # All targets which depend on Rust code but are not linked by rustc must ++ # depend on this. Usually, this dependency will come from the rust_target() GN ++ # template. However, cargo_crate() does *not* include this dependency so any ++ # C++ targets which directly depend on a cargo_crate() must depend on this. ++ rust_static_library("allocator") { ++ sources = [ "lib.rs" ] ++ crate_root = "lib.rs" ++ cxx_bindings = [ "lib.rs" ] ++ ++ deps = [ ++ ":allocator_impls", ++ ":allocator_shim_definitions", ++ ] ++ ++ no_chromium_prelude = true ++ no_allocator_crate = true ++ allow_unsafe = true ++ } ++ ++ static_library("allocator_impls") { ++ public_deps = [] ++ if (rust_allocator_uses_partition_alloc) { ++ public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ] ++ } ++ ++ sources = [ ++ "allocator_impls.cc", ++ "allocator_impls.h", ++ ] ++ ++ deps = [ ++ ":allocator_cpp_shared", ++ ":buildflags", ++ ++ # TODO(crbug.com/408221149): remove the C++ -> Rust dependency for the ++ # default allocator. ++ "//build/rust/std", ++ ] ++ ++ visibility = [ ":*" ] ++ } ++ ++ source_set("allocator_shim_definitions") { ++ sources = [ "allocator_shim_definitions.cc" ] ++ ++ deps = [ ":allocator_cpp_shared" ] ++ ++ visibility = [ ":*" ] ++ } ++ ++ source_set("allocator_cpp_shared") { ++ sources = [ ++ # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been ++ # copied from `//base`. ++ # TODO(crbug.com/40279749): Avoid duplication / reuse code. ++ "alias.cc", ++ "alias.h", ++ "compiler_specific.h", ++ "immediate_crash.h", ++ ] ++ ++ visibility = [ ++ ":allocator_impls", ++ ":allocator_shim_definitions", ++ ] ++ } ++} +diff --git a/build/rust/std/alias.cc b/build/rust/allocator/alias.cc +similarity index 87% +rename from build/rust/std/alias.cc +rename to build/rust/allocator/alias.cc +index 42febac3ed1fc..ca20986f8ed49 100644 +--- a/build/rust/std/alias.cc ++++ b/build/rust/allocator/alias.cc +@@ -7,9 +7,9 @@ + // + // TODO(crbug.com/40279749): Avoid code duplication / reuse code. + +-#include "build/rust/std/alias.h" ++#include "build/rust/allocator/alias.h" + +-#include "build/rust/std/compiler_specific.h" ++#include "build/rust/allocator/compiler_specific.h" + + namespace build_rust_std { + namespace debug { +diff --git a/build/rust/std/alias.h b/build/rust/allocator/alias.h +similarity index 91% +rename from build/rust/std/alias.h +rename to build/rust/allocator/alias.h +index 0eaba6766148f..80995ecfb045e 100644 +--- a/build/rust/std/alias.h ++++ b/build/rust/allocator/alias.h +@@ -8,8 +8,8 @@ + // + // TODO(crbug.com/40279749): Avoid code duplication / reuse code. + +-#ifndef BUILD_RUST_STD_ALIAS_H_ +-#define BUILD_RUST_STD_ALIAS_H_ ++#ifndef BUILD_RUST_ALLOCATOR_ALIAS_H_ ++#define BUILD_RUST_ALLOCATOR_ALIAS_H_ + + #include + +@@ -34,4 +34,4 @@ void Alias(const void* var); + const int line_number = __LINE__; \ + build_rust_std::debug::Alias(&line_number) + +-#endif // BUILD_RUST_STD_ALIAS_H_ ++#endif // BUILD_RUST_ALLOCATOR_ALIAS_H_ +diff --git a/build/rust/std/remap_alloc.cc b/build/rust/allocator/allocator_impls.cc +similarity index 67% +rename from build/rust/std/remap_alloc.cc +rename to build/rust/allocator/allocator_impls.cc +index a443b11ec513d..1fde98f23cd12 100644 +--- a/build/rust/std/remap_alloc.cc ++++ b/build/rust/allocator/allocator_impls.cc +@@ -2,6 +2,8 @@ + // Use of this source code is governed by a BSD-style license that can be + // found in the LICENSE file. + ++#include "build/rust/allocator/allocator_impls.h" ++ + #ifdef UNSAFE_BUFFERS_BUILD + // TODO(crbug.com/390223051): Remove C-library calls to fix the errors. + #pragma allow_unsafe_libc_calls +@@ -11,9 +13,9 @@ + #include + + #include "build/build_config.h" +-#include "build/rust/std/alias.h" +-#include "build/rust/std/buildflags.h" +-#include "build/rust/std/immediate_crash.h" ++#include "build/rust/allocator/alias.h" ++#include "build/rust/allocator/buildflags.h" ++#include "build/rust/allocator/immediate_crash.h" + + #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) + #include "partition_alloc/partition_alloc_constants.h" // nogncheck +@@ -22,6 +24,11 @@ + #include + #endif + ++// NOTE: this documentation is outdated. ++// ++// TODO(crbug.com/408221149): update this documentation, or replace it with docs ++// in the Rust allocator implementation. ++// + // When linking a final binary, rustc has to pick between either: + // * The default Rust allocator + // * Any #[global_allocator] defined in *any rlib in its dependency tree* +@@ -87,19 +94,6 @@ + // enabling it breaks Win32 APIs like CreateProcess: + // https://issues.chromium.org/u/1/issues/368070343#comment29 + +-extern "C" { +- +-#ifdef COMPONENT_BUILD +-#if BUILDFLAG(IS_WIN) +-#define REMAP_ALLOC_ATTRIBUTES __declspec(dllexport) __attribute__((weak)) +-#else +-#define REMAP_ALLOC_ATTRIBUTES \ +- __attribute__((visibility("default"))) __attribute__((weak)) +-#endif +-#else +-#define REMAP_ALLOC_ATTRIBUTES __attribute__((weak)) +-#endif // COMPONENT_BUILD +- + #if !BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) && BUILDFLAG(IS_WIN) && \ + defined(ADDRESS_SANITIZER) + #define USE_WIN_ALIGNED_MALLOC 1 +@@ -107,17 +101,19 @@ extern "C" { + #define USE_WIN_ALIGNED_MALLOC 0 + #endif + +-// This must exist as the stdlib depends on it to prove that we know the +-// alloc shims below are unstable. In the future we may be required to replace +-// them with a #[global_allocator] crate (see file comment above for more). +-// +-// Marked as weak as when Rust drives linking it includes this symbol itself, +-// and we don't want a collision due to C++ being in the same link target, where +-// C++ causes us to explicitly link in the stdlib and this symbol here. +-[[maybe_unused]] +-__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable; ++// The default allocator functions provided by the Rust standard library. ++extern "C" void* __rdl_alloc(size_t size, size_t align); ++extern "C" void __rdl_dealloc(void* p, size_t size, size_t align); ++extern "C" void* __rdl_realloc(void* p, ++ size_t old_size, ++ size_t align, ++ size_t new_size); ++ ++extern "C" void* __rdl_alloc_zeroed(size_t size, size_t align); ++ ++namespace rust_allocator_internal { + +-REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) { ++unsigned char* alloc(size_t size, size_t align) { + #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) + // PartitionAlloc will crash if given an alignment larger than this. + if (align > partition_alloc::internal::kMaxSupportedAlignment) { +@@ -125,19 +121,19 @@ REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) { + } + + if (align <= alignof(std::max_align_t)) { +- return allocator_shim::UncheckedAlloc(size); ++ return static_cast(allocator_shim::UncheckedAlloc(size)); + } else { +- return allocator_shim::UncheckedAlignedAlloc(size, align); ++ return static_cast( ++ allocator_shim::UncheckedAlignedAlloc(size, align)); + } + #elif USE_WIN_ALIGNED_MALLOC +- return _aligned_malloc(size, align); ++ return static_cast(_aligned_malloc(size, align)); + #else +- extern void* __rdl_alloc(size_t size, size_t align); +- return __rdl_alloc(size, align); ++ return static_cast(__rdl_alloc(size, align)); + #endif + } + +-REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) { ++void dealloc(unsigned char* p, size_t size, size_t align) { + #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) + if (align <= alignof(std::max_align_t)) { + allocator_shim::UncheckedFree(p); +@@ -147,54 +143,44 @@ REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) { + #elif USE_WIN_ALIGNED_MALLOC + return _aligned_free(p); + #else +- extern void __rdl_dealloc(void* p, size_t size, size_t align); + __rdl_dealloc(p, size, align); + #endif + } + +-REMAP_ALLOC_ATTRIBUTES void* __rust_realloc(void* p, +- size_t old_size, +- size_t align, +- size_t new_size) { ++unsigned char* realloc(unsigned char* p, ++ size_t old_size, ++ size_t align, ++ size_t new_size) { + #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) + if (align <= alignof(std::max_align_t)) { +- return allocator_shim::UncheckedRealloc(p, new_size); ++ return static_cast( ++ allocator_shim::UncheckedRealloc(p, new_size)); + } else { +- return allocator_shim::UncheckedAlignedRealloc(p, new_size, align); ++ return static_cast( ++ allocator_shim::UncheckedAlignedRealloc(p, new_size, align)); + } + #elif USE_WIN_ALIGNED_MALLOC +- return _aligned_realloc(p, new_size, align); ++ return static_cast(_aligned_realloc(p, new_size, align)); + #else +- extern void* __rdl_realloc(void* p, size_t old_size, size_t align, +- size_t new_size); +- return __rdl_realloc(p, old_size, align, new_size); ++ return static_cast( ++ __rdl_realloc(p, old_size, align, new_size)); + #endif + } + +-REMAP_ALLOC_ATTRIBUTES void* __rust_alloc_zeroed(size_t size, size_t align) { ++unsigned char* alloc_zeroed(size_t size, size_t align) { + #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) || USE_WIN_ALIGNED_MALLOC + // TODO(danakj): When RUST_ALLOCATOR_USES_PARTITION_ALLOC is true, it's + // possible that a partition_alloc::UncheckedAllocZeroed() call would perform + // better than partition_alloc::UncheckedAlloc() + memset. But there is no + // such API today. See b/342251590. +- void* p = __rust_alloc(size, align); ++ unsigned char* p = alloc(size, align); + if (p) { + memset(p, 0, size); + } + return p; + #else +- extern void* __rdl_alloc_zeroed(size_t size, size_t align); +- return __rdl_alloc_zeroed(size, align); ++ return static_cast(__rdl_alloc_zeroed(size, align)); + #endif + } + +-REMAP_ALLOC_ATTRIBUTES void __rust_alloc_error_handler(size_t size, +- size_t align) { +- NO_CODE_FOLDING(); +- IMMEDIATE_CRASH(); +-} +- +-REMAP_ALLOC_ATTRIBUTES extern const unsigned char +- __rust_alloc_error_handler_should_panic = 0; +- +-} // extern "C" ++} // namespace rust_allocator_internal +diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h +new file mode 100644 +index 0000000000000..afb335412faf9 +--- /dev/null ++++ b/build/rust/allocator/allocator_impls.h +@@ -0,0 +1,25 @@ ++// Copyright 2025 The Chromium Authors ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++#ifndef BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ ++#define BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ ++ ++#include ++ ++#include "build/build_config.h" ++#include "build/rust/allocator/buildflags.h" ++ ++namespace rust_allocator_internal { ++ ++unsigned char* alloc(size_t size, size_t align); ++void dealloc(unsigned char* p, size_t size, size_t align); ++unsigned char* realloc(unsigned char* p, ++ size_t old_size, ++ size_t align, ++ size_t new_size); ++unsigned char* alloc_zeroed(size_t size, size_t align); ++ ++} // namespace rust_allocator_internal ++ ++#endif // BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ +diff --git a/build/rust/allocator/allocator_shim_definitions.cc b/build/rust/allocator/allocator_shim_definitions.cc +new file mode 100644 +index 0000000000000..a4d1bd77b7016 +--- /dev/null ++++ b/build/rust/allocator/allocator_shim_definitions.cc +@@ -0,0 +1,30 @@ ++// Copyright 2025 The Chromium Authors ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++#include ++ ++#include "build/rust/allocator/alias.h" ++#include "build/rust/allocator/immediate_crash.h" ++ ++extern "C" { ++ ++// As part of rustc's contract for using `#[global_allocator]` without ++// rustc-generated shims we must define this symbol, since we are opting in to ++// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 ++// ++// Mark it weak since rustc will generate it when it drives linking. ++[[maybe_unused]] ++__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable; ++ ++__attribute__((weak)) void __rust_alloc_error_handler(size_t size, ++ size_t align) { ++ NO_CODE_FOLDING(); ++ IMMEDIATE_CRASH(); ++} ++ ++__attribute__(( ++ weak)) extern const unsigned char __rust_alloc_error_handler_should_panic = ++ 0; ++ ++} // extern "C" +diff --git a/build/rust/std/compiler_specific.h b/build/rust/allocator/compiler_specific.h +similarity index 87% +rename from build/rust/std/compiler_specific.h +rename to build/rust/allocator/compiler_specific.h +index ea79a7a8dc284..f9079679a3e9a 100644 +--- a/build/rust/std/compiler_specific.h ++++ b/build/rust/allocator/compiler_specific.h +@@ -7,8 +7,8 @@ + // + // TODO(crbug.com/40279749): Avoid code duplication / reuse code. + +-#ifndef BUILD_RUST_STD_COMPILER_SPECIFIC_H_ +-#define BUILD_RUST_STD_COMPILER_SPECIFIC_H_ ++#ifndef BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_ ++#define BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_ + + #include "build/build_config.h" + +@@ -35,4 +35,4 @@ + #define NOINLINE + #endif + +-#endif // BUILD_RUST_STD_COMPILER_SPECIFIC_H_ ++#endif // BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_ +diff --git a/build/rust/std/immediate_crash.h b/build/rust/allocator/immediate_crash.h +similarity index 97% +rename from build/rust/std/immediate_crash.h +rename to build/rust/allocator/immediate_crash.h +index e4fd5a09d9379..9cbf9fd65f3e0 100644 +--- a/build/rust/std/immediate_crash.h ++++ b/build/rust/allocator/immediate_crash.h +@@ -5,8 +5,8 @@ + // This file has been copied from //base/immediate_crash.h. + // TODO(crbug.com/40279749): Avoid code duplication / reuse code. + +-#ifndef BUILD_RUST_STD_IMMEDIATE_CRASH_H_ +-#define BUILD_RUST_STD_IMMEDIATE_CRASH_H_ ++#ifndef BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_ ++#define BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_ + + #include "build/build_config.h" + +@@ -168,4 +168,4 @@ + + #endif // defined(__clang__) || defined(COMPILER_GCC) + +-#endif // BUILD_RUST_STD_IMMEDIATE_CRASH_H_ ++#endif // BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_ +diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs +new file mode 100644 +index 0000000000000..7f4a0fc245694 +--- /dev/null ++++ b/build/rust/allocator/lib.rs +@@ -0,0 +1,48 @@ ++// Copyright 2025 The Chromium Authors ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//! Define the allocator that Rust code in Chrome should use. ++//! ++//! Any final artifact that depends on this crate, even transitively, will use ++//! the allocator defined here. Currently this is a thin wrapper around ++//! allocator_impls.cc's functions; see the documentation there. ++ ++use std::alloc::{GlobalAlloc, Layout}; ++ ++struct Allocator; ++ ++unsafe impl GlobalAlloc for Allocator { ++ unsafe fn alloc(&self, layout: Layout) -> *mut u8 { ++ unsafe { ffi::alloc(layout.size(), layout.align()) } ++ } ++ ++ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { ++ unsafe { ++ ffi::dealloc(ptr, layout.size(), layout.align()); ++ } ++ } ++ ++ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { ++ unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) } ++ } ++ ++ unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { ++ unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) } ++ } ++} ++ ++#[global_allocator] ++static GLOBAL: Allocator = Allocator; ++ ++#[cxx::bridge(namespace = "rust_allocator_internal")] ++mod ffi { ++ extern "C++" { ++ include!("build/rust/allocator/allocator_impls.h"); ++ ++ unsafe fn alloc(size: usize, align: usize) -> *mut u8; ++ unsafe fn dealloc(p: *mut u8, size: usize, align: usize); ++ unsafe fn realloc(p: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8; ++ unsafe fn alloc_zeroed(size: usize, align: usize) -> *mut u8; ++ } ++} +diff --git a/build/rust/cargo_crate.gni b/build/rust/cargo_crate.gni +index 6d11c538bf4d5..d9912722b4ecd 100644 +--- a/build/rust/cargo_crate.gni ++++ b/build/rust/cargo_crate.gni +@@ -259,6 +259,12 @@ template("cargo_crate") { + # Don't import the `chromium` crate into third-party code. + no_chromium_prelude = true + ++ # Don't depend on the chrome-specific #[global_allocator] crate from ++ # third-party code. This avoids some dependency cycle issues. The allocator ++ # crate will still be used if it exists anywhere in the dependency graph for ++ # a given linked artifact. ++ no_allocator_crate = true ++ + rustc_metadata = _rustc_metadata + + # TODO(crbug.com/40259764): don't default to true. This requires changes to +@@ -483,6 +489,9 @@ template("cargo_crate") { + # Don't import the `chromium` crate into third-party code. + no_chromium_prelude = true + ++ # Build scripts do not need to link to chrome's allocator. ++ no_allocator_crate = true ++ + # The ${_build_script_name}_output target looks for the exe in this + # location. Due to how the Windows component build works, this has to + # be $root_out_dir for all EXEs. In component build, C++ links to the +diff --git a/build/rust/rust_macro.gni b/build/rust/rust_macro.gni +index bcbb30ed44111..41d857632ccdc 100644 +--- a/build/rust/rust_macro.gni ++++ b/build/rust/rust_macro.gni +@@ -16,6 +16,9 @@ template("rust_macro") { + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + proc_macro_configs = invoker.configs + target_type = "rust_proc_macro" ++ ++ # Macros are loaded by rustc and shouldn't use chrome's allocation routines. ++ no_allocator_crate = true + } + } + +diff --git a/build/rust/rust_target.gni b/build/rust/rust_target.gni +index 1a2f96337d436..1003a7b678352 100644 +--- a/build/rust/rust_target.gni ++++ b/build/rust/rust_target.gni +@@ -339,6 +339,10 @@ template("rust_target") { + _rust_deps += [ "//build/rust/std" ] + } + ++ if (!defined(invoker.no_allocator_crate) || !invoker.no_allocator_crate) { ++ _rust_deps += [ "//build/rust/allocator" ] ++ } ++ + if (_build_unit_tests) { + _unit_test_target = "${_target_name}_unittests" + if (defined(invoker.unit_test_target)) { +diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn +index 6b996aa1fe386..25db126076b2f 100644 +--- a/build/rust/std/BUILD.gn ++++ b/build/rust/std/BUILD.gn +@@ -15,51 +15,12 @@ + # allocator functions to PartitionAlloc when `use_partition_alloc_as_malloc` is + # true, so that Rust and C++ use the same allocator backend. + +-import("//build/buildflag_header.gni") + import("//build/config/compiler/compiler.gni") + import("//build/config/coverage/coverage.gni") + import("//build/config/rust.gni") + import("//build/config/sanitizers/sanitizers.gni") + +-rust_allocator_uses_partition_alloc = false +-if (build_with_chromium) { +- import("//base/allocator/partition_allocator/partition_alloc.gni") +- rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc +-} +- +-buildflag_header("buildflags") { +- header = "buildflags.h" +- flags = [ +- "RUST_ALLOCATOR_USES_PARTITION_ALLOC=$rust_allocator_uses_partition_alloc", +- ] +- visibility = [ ":*" ] +-} +- + if (toolchain_has_rust) { +- # If clang performs the link step, we need to provide the allocator symbols +- # that are normally injected by rustc during linking. +- # +- # We also "happen to" use this to redirect allocations to PartitionAlloc, +- # though that would be better done through a #[global_allocator] crate (see +- # above). +- source_set("remap_alloc") { +- public_deps = [] +- if (rust_allocator_uses_partition_alloc) { +- public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ] +- } +- deps = [ ":buildflags" ] +- sources = [ +- # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been +- # copied from `//base`. +- # TODO(crbug.com/40279749): Avoid duplication / reuse code. +- "alias.cc", +- "alias.h", +- "compiler_specific.h", +- "immediate_crash.h", +- "remap_alloc.cc", +- ] +- } +- + # List of Rust stdlib rlibs which are present in the official Rust toolchain + # we are using from the Android team. This is usually a version or two behind + # nightly. Generally this matches the toolchain we build ourselves, but if +@@ -269,8 +230,6 @@ if (toolchain_has_rust) { + foreach(libname, stdlib_files + skip_stdlib_files) { + deps += [ "rules:$libname" ] + } +- +- public_deps = [ ":remap_alloc" ] + } + } else { + action("find_stdlib") { +diff --git a/components/cronet/android/dependencies.txt b/components/cronet/android/dependencies.txt +index bf56bc45ed41f..c0e41ef7c6766 100644 +--- a/components/cronet/android/dependencies.txt ++++ b/components/cronet/android/dependencies.txt +@@ -14,6 +14,7 @@ + //build/config + //build/config/compiler + //build/rust ++//build/rust/allocator + //build/rust/chromium_prelude + //build/rust/std + //build/rust/std/rules +diff --git a/third_party/breakpad/BUILD.gn b/third_party/breakpad/BUILD.gn +index 007fdff16e92e..00da4fa484998 100644 +--- a/third_party/breakpad/BUILD.gn ++++ b/third_party/breakpad/BUILD.gn +@@ -495,7 +495,10 @@ if (is_mac) { + defines = [ "HAVE_MACH_O_NLIST_H" ] + + # Rust demangle support. +- deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ] ++ deps = [ ++ "//build/rust/allocator", ++ "//third_party/rust/rustc_demangle_capi/v0_1:lib", ++ ] + defines += [ "HAVE_RUSTC_DEMANGLE" ] + include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ] + sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ] +@@ -743,7 +746,10 @@ if (is_linux || is_chromeos || is_android) { + include_dirs = [ "breakpad/src" ] + + # Rust demangle support. +- deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ] ++ deps = [ ++ "//build/rust/allocator", ++ "//third_party/rust/rustc_demangle_capi/v0_1:lib", ++ ] + defines += [ "HAVE_RUSTC_DEMANGLE" ] + include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ] + sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ] diff --git a/backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch b/backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch new file mode 100644 index 0000000..12b3aaa --- /dev/null +++ b/backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch @@ -0,0 +1,319 @@ +From 5032162442c5f2f3093cd7646f3a06f826d7f7a8 Mon Sep 17 00:00:00 2001 +From: Collin Baker +Date: Mon, 7 Apr 2025 12:48:17 -0700 +Subject: [PATCH] Call Rust default allocator directly from Rust +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The Chromium `#[global_allocator] crate forwarded calls to the C++ +implementation, which in turn called into the Rust standard library +implementations in some build configurations. + +This Rust -> C++ -> Rust round trip is unnecessary, and the references +to these symbols is blocking a toolchain update: upstream, these +symbol names are now mangled. + +Instead, use Rust conditional compilation to choose between the +Chromium and the libstd-provided allocators. + +Additionally, the remaining internal symbols defined in C++ are moved +to Rust. + +Bug: 408221149, 407024458 +Change-Id: I78f8c90d51a36a73099aa7d333091d7b8aded3c0 + +Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel +Change-Id: I78f8c90d51a36a73099aa7d333091d7b8aded3c0 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6434355 +Reviewed-by: Łukasz Anforowicz +Commit-Queue: Collin Baker +Cr-Commit-Position: refs/heads/main@{#1443703} +--- + build/rust/allocator/BUILD.gn | 54 +++++++------------ + build/rust/allocator/allocator_impls.cc | 28 +++++----- + build/rust/allocator/allocator_impls.h | 2 + + .../allocator/allocator_shim_definitions.cc | 30 ----------- + build/rust/allocator/lib.rs | 38 +++++++++++++ + 5 files changed, 73 insertions(+), 79 deletions(-) + delete mode 100644 build/rust/allocator/allocator_shim_definitions.cc + +diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn +index 06aa47f097c9c..f09314afc8158 100644 +--- a/build/rust/allocator/BUILD.gn ++++ b/build/rust/allocator/BUILD.gn +@@ -12,6 +12,9 @@ if (build_with_chromium) { + rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc + } + ++use_cpp_allocator_impls = ++ rust_allocator_uses_partition_alloc || (is_win && is_asan) ++ + buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ +@@ -30,61 +33,44 @@ if (toolchain_has_rust) { + crate_root = "lib.rs" + cxx_bindings = [ "lib.rs" ] + +- deps = [ +- ":allocator_impls", +- ":allocator_shim_definitions", +- ] ++ deps = [ ":allocator_impls" ] + + no_chromium_prelude = true + no_allocator_crate = true + allow_unsafe = true ++ ++ if (use_cpp_allocator_impls) { ++ rustflags = [ ++ "--cfg", ++ "use_cpp_allocator_impls", ++ ] ++ } ++ ++ configs -= [ "//build/config/compiler:disallow_unstable_features" ] + } + ++ # TODO(crbug.com/408221149): don't build this when `use_cpp_allocator_impls` ++ # is false. + static_library("allocator_impls") { + public_deps = [] + if (rust_allocator_uses_partition_alloc) { + public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ] + } + +- sources = [ +- "allocator_impls.cc", +- "allocator_impls.h", +- ] +- +- deps = [ +- ":allocator_cpp_shared", +- ":buildflags", +- +- # TODO(crbug.com/408221149): remove the C++ -> Rust dependency for the +- # default allocator. +- "//build/rust/std", +- ] +- +- visibility = [ ":*" ] +- } +- +- source_set("allocator_shim_definitions") { +- sources = [ "allocator_shim_definitions.cc" ] +- +- deps = [ ":allocator_cpp_shared" ] +- +- visibility = [ ":*" ] +- } +- +- source_set("allocator_cpp_shared") { + sources = [ + # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been + # copied from `//base`. + # TODO(crbug.com/40279749): Avoid duplication / reuse code. + "alias.cc", + "alias.h", ++ "allocator_impls.cc", ++ "allocator_impls.h", + "compiler_specific.h", + "immediate_crash.h", + ] + +- visibility = [ +- ":allocator_impls", +- ":allocator_shim_definitions", +- ] ++ deps = [ ":buildflags" ] ++ ++ visibility = [ ":*" ] + } + } +diff --git a/build/rust/allocator/allocator_impls.cc b/build/rust/allocator/allocator_impls.cc +index 1fde98f23cd12..bf3c2a301adf5 100644 +--- a/build/rust/allocator/allocator_impls.cc ++++ b/build/rust/allocator/allocator_impls.cc +@@ -101,16 +101,6 @@ + #define USE_WIN_ALIGNED_MALLOC 0 + #endif + +-// The default allocator functions provided by the Rust standard library. +-extern "C" void* __rdl_alloc(size_t size, size_t align); +-extern "C" void __rdl_dealloc(void* p, size_t size, size_t align); +-extern "C" void* __rdl_realloc(void* p, +- size_t old_size, +- size_t align, +- size_t new_size); +- +-extern "C" void* __rdl_alloc_zeroed(size_t size, size_t align); +- + namespace rust_allocator_internal { + + unsigned char* alloc(size_t size, size_t align) { +@@ -129,7 +119,8 @@ unsigned char* alloc(size_t size, size_t align) { + #elif USE_WIN_ALIGNED_MALLOC + return static_cast(_aligned_malloc(size, align)); + #else +- return static_cast(__rdl_alloc(size, align)); ++ // TODO(crbug.com/408221149): don't build this file in this case. ++ IMMEDIATE_CRASH(); + #endif + } + +@@ -143,7 +134,8 @@ void dealloc(unsigned char* p, size_t size, size_t align) { + #elif USE_WIN_ALIGNED_MALLOC + return _aligned_free(p); + #else +- __rdl_dealloc(p, size, align); ++ // TODO(crbug.com/408221149): don't build this file in this case. ++ IMMEDIATE_CRASH(); + #endif + } + +@@ -162,8 +154,8 @@ unsigned char* realloc(unsigned char* p, + #elif USE_WIN_ALIGNED_MALLOC + return static_cast(_aligned_realloc(p, new_size, align)); + #else +- return static_cast( +- __rdl_realloc(p, old_size, align, new_size)); ++ // TODO(crbug.com/408221149): don't build this file in this case. ++ IMMEDIATE_CRASH(); + #endif + } + +@@ -179,8 +171,14 @@ unsigned char* alloc_zeroed(size_t size, size_t align) { + } + return p; + #else +- return static_cast(__rdl_alloc_zeroed(size, align)); ++ // TODO(crbug.com/408221149): don't build this file in this case. ++ IMMEDIATE_CRASH(); + #endif + } + ++void crash_immediately() { ++ NO_CODE_FOLDING(); ++ IMMEDIATE_CRASH(); ++} ++ + } // namespace rust_allocator_internal +diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h +index afb335412faf9..e90ab7cd422c1 100644 +--- a/build/rust/allocator/allocator_impls.h ++++ b/build/rust/allocator/allocator_impls.h +@@ -20,6 +20,8 @@ unsigned char* realloc(unsigned char* p, + size_t new_size); + unsigned char* alloc_zeroed(size_t size, size_t align); + ++void crash_immediately(); ++ + } // namespace rust_allocator_internal + + #endif // BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ +diff --git a/build/rust/allocator/allocator_shim_definitions.cc b/build/rust/allocator/allocator_shim_definitions.cc +deleted file mode 100644 +index a4d1bd77b7016..0000000000000 +--- a/build/rust/allocator/allocator_shim_definitions.cc ++++ /dev/null +@@ -1,30 +0,0 @@ +-// Copyright 2025 The Chromium Authors +-// Use of this source code is governed by a BSD-style license that can be +-// found in the LICENSE file. +- +-#include +- +-#include "build/rust/allocator/alias.h" +-#include "build/rust/allocator/immediate_crash.h" +- +-extern "C" { +- +-// As part of rustc's contract for using `#[global_allocator]` without +-// rustc-generated shims we must define this symbol, since we are opting in to +-// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 +-// +-// Mark it weak since rustc will generate it when it drives linking. +-[[maybe_unused]] +-__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable; +- +-__attribute__((weak)) void __rust_alloc_error_handler(size_t size, +- size_t align) { +- NO_CODE_FOLDING(); +- IMMEDIATE_CRASH(); +-} +- +-__attribute__(( +- weak)) extern const unsigned char __rust_alloc_error_handler_should_panic = +- 0; +- +-} // extern "C" +diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs +index 7f4a0fc245694..b8b67d9c6c649 100644 +--- a/build/rust/allocator/lib.rs ++++ b/build/rust/allocator/lib.rs +@@ -8,10 +8,20 @@ + //! the allocator defined here. Currently this is a thin wrapper around + //! allocator_impls.cc's functions; see the documentation there. + ++// Required to apply weak linkage to symbols. ++#![feature(linkage)] ++// Required to apply `#[rustc_std_internal_symbol]` to our alloc error handler ++// so the name is correctly mangled as rustc expects. ++#![cfg_attr(mangle_alloc_error_handler, allow(internal_features))] ++#![cfg_attr(mangle_alloc_error_handler, feature(rustc_attrs))] ++ ++#[cfg(use_cpp_allocator_impls)] + use std::alloc::{GlobalAlloc, Layout}; + ++#[cfg(use_cpp_allocator_impls)] + struct Allocator; + ++#[cfg(use_cpp_allocator_impls)] + unsafe impl GlobalAlloc for Allocator { + unsafe fn alloc(&self, layout: Layout) -> *mut u8 { + unsafe { ffi::alloc(layout.size(), layout.align()) } +@@ -32,9 +42,36 @@ unsafe impl GlobalAlloc for Allocator { + } + } + ++#[cfg(use_cpp_allocator_impls)] + #[global_allocator] + static GLOBAL: Allocator = Allocator; + ++#[cfg(not(use_cpp_allocator_impls))] ++#[global_allocator] ++static GLOBAL: std::alloc::System = std::alloc::System; ++ ++// As part of rustc's contract for using `#[global_allocator]` without ++// rustc-generated shims we must define this symbol, since we are opting in to ++// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 ++#[no_mangle] ++#[linkage = "weak"] ++static __rust_no_alloc_shim_is_unstable: u8 = 0; ++ ++#[no_mangle] ++#[linkage = "weak"] ++static __rust_alloc_error_handler_should_panic: u8 = 0; ++ ++// Mangle the symbol name as rustc expects. ++#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] ++#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] ++#[linkage = "weak"] ++fn __rust_alloc_error_handler(_size: usize, _align: usize) { ++ unsafe { ffi::crash_immediately() } ++} ++ ++// TODO(crbug.com/408221149): conditionally include the FFI glue based on ++// `use_cpp_allocator_impls` ++#[allow(dead_code)] + #[cxx::bridge(namespace = "rust_allocator_internal")] + mod ffi { + extern "C++" { +@@ -44,5 +81,6 @@ mod ffi { + unsafe fn dealloc(p: *mut u8, size: usize, align: usize); + unsafe fn realloc(p: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8; + unsafe fn alloc_zeroed(size: usize, align: usize) -> *mut u8; ++ unsafe fn crash_immediately(); + } + } diff --git a/backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch b/backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch new file mode 100644 index 0000000..1cfa07f --- /dev/null +++ b/backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch @@ -0,0 +1,102 @@ +reduced -lnl + +From e201e2d467b0daad6cdbbfcd5b0e34760e4099c1 Mon Sep 17 00:00:00 2001 +From: Alan Zhao +Date: Mon, 7 Apr 2025 18:15:01 -0700 +Subject: [PATCH] Roll rust *only* f7b43542838f0a4a6cfdb17fbeadf45002042a77-1 : + 3f690c2257b7080cd3a8cce64e082fc972148990-1 + +https://chromium.googlesource.com/external/github.com/rust-lang/rust/+log/f7b43542838f..3f690c2257b7 + +Ran: ./tools/clang/scripts/upload_revision.py 5b36835df010c5813808d34e45428c624fb52ff1 + +Additionally, add fixes to the rust allocator to address https://crbug.com/407024458. + +Bug: 404285928,407024458 +Disable-Rts: True +Cq-Include-Trybots: chromium/try:chromeos-amd64-generic-cfi-thin-lto-rel +Cq-Include-Trybots: chromium/try:dawn-win10-x86-deps-rel +Cq-Include-Trybots: chromium/try:linux-chromeos-dbg +Cq-Include-Trybots: chromium/try:linux_chromium_cfi_rel_ng +Cq-Include-Trybots: chromium/try:linux_chromium_chromeos_msan_rel_ng +Cq-Include-Trybots: chromium/try:linux_chromium_msan_rel_ng +Cq-Include-Trybots: chromium/try:mac11-arm64-rel,mac_chromium_asan_rel_ng +Cq-Include-Trybots: chromium/try:ios-catalyst,win-asan,android-official +Cq-Include-Trybots: chromium/try:fuchsia-arm64-cast-receiver-rel +Cq-Include-Trybots: chromium/try:mac-official,linux-official +Cq-Include-Trybots: chromium/try:win-official,win32-official +Cq-Include-Trybots: chromium/try:win-swangle-try-x86 +Cq-Include-Trybots: chromium/try:android-cronet-riscv64-dbg +Cq-Include-Trybots: chromium/try:android-cronet-riscv64-rel +Cq-Include-Trybots: chrome/try:iphone-device +Cq-Include-Trybots: chrome/try:linux-chromeos-chrome +Cq-Include-Trybots: chrome/try:win-chrome,win64-chrome,linux-chrome,mac-chrome +Cq-Include-Trybots: chrome/try:linux-pgo,mac-pgo,win32-pgo,win64-pgo +Cq-Include-Trybots: luci.chromium.try:linux-cast-x64-rel +Cq-Include-Trybots: chromium/try:android-rust-arm32-rel +Cq-Include-Trybots: chromium/try:android-rust-arm64-dbg +Cq-Include-Trybots: chromium/try:android-rust-arm64-rel +Cq-Include-Trybots: chromium/try:linux-rust-x64-dbg +Cq-Include-Trybots: chromium/try:linux-rust-x64-rel +Cq-Include-Trybots: chromium/try:mac-rust-x64-dbg +Cq-Include-Trybots: chromium/try:win-rust-x64-dbg +Cq-Include-Trybots: chromium/try:win-rust-x64-rel +Change-Id: Iec99681a89deaf3f2c79c76f9c4d1c2b2b7d6fe1 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6439711 +Reviewed-by: Collin Baker +Commit-Queue: Alan Zhao +Cr-Commit-Position: refs/heads/main@{#1443873} +--- + build/rust/allocator/BUILD.gn | 6 +- + build/rust/allocator/lib.rs | 6 +- + build/rust/std/rules/BUILD.gn | 476 +++++++++++++++++----------------- + tools/rust/update_rust.py | 2 +- + 4 files changed, 251 insertions(+), 239 deletions(-) + +diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn +index f09314afc8158..ca581630c76c9 100644 +--- a/build/rust/allocator/BUILD.gn ++++ b/build/rust/allocator/BUILD.gn +@@ -32,6 +32,10 @@ if (toolchain_has_rust) { + sources = [ "lib.rs" ] + crate_root = "lib.rs" + cxx_bindings = [ "lib.rs" ] ++ rustflags = [ ++ "--cfg", ++ "mangle_alloc_error_handler", ++ ] + + deps = [ ":allocator_impls" ] + +@@ -40,7 +44,7 @@ if (toolchain_has_rust) { + allow_unsafe = true + + if (use_cpp_allocator_impls) { +- rustflags = [ ++ rustflags += [ + "--cfg", + "use_cpp_allocator_impls", + ] +diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs +index b8b67d9c6c649..4e2dad3d542a8 100644 +--- a/build/rust/allocator/lib.rs ++++ b/build/rust/allocator/lib.rs +@@ -57,13 +57,17 @@ static GLOBAL: std::alloc::System = std::alloc::System; + #[linkage = "weak"] + static __rust_no_alloc_shim_is_unstable: u8 = 0; + +-#[no_mangle] ++// Mangle the symbol name as rustc expects. ++#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] ++#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] ++#[allow(non_upper_case_globals)] + #[linkage = "weak"] + static __rust_alloc_error_handler_should_panic: u8 = 0; + + // Mangle the symbol name as rustc expects. + #[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] + #[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] ++#[allow(non_upper_case_globals)] + #[linkage = "weak"] + fn __rust_alloc_error_handler(_size: usize, _align: usize) { + unsafe { ffi::crash_immediately() } diff --git a/backports/electron/0004-Drop-remap_alloc-dep.patch b/backports/electron/0004-Drop-remap_alloc-dep.patch new file mode 100644 index 0000000..c6762a4 --- /dev/null +++ b/backports/electron/0004-Drop-remap_alloc-dep.patch @@ -0,0 +1,44 @@ +From 4a0377f0b847af505915b0e0a6c4178d4e7c3244 Mon Sep 17 00:00:00 2001 +From: Matt Jolly +Date: Mon, 14 Apr 2025 20:16:46 -0700 +Subject: [PATCH] Drop `remap_alloc` dep +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +commit e3a1797dbab3eaa1c808d53215b32c8759d27ac7 dropped the source set +that this refers to, in favour of a more modern, crate-based solution. + +This seems to have been overlooked, possibly as it only appears to +be called if using the unbundle toolchain. + +Bug: 408221149 +Signed-off-by: Matt Jolly +Change-Id: I1703d8e1e456161aa2b736169eec407235847099 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6456604 +Reviewed-by: Andrew Grieve +Reviewed-by: Lei Zhang +Commit-Queue: Łukasz Anforowicz +Reviewed-by: Łukasz Anforowicz +Cr-Commit-Position: refs/heads/main@{#1446912} +--- + build/rust/std/BUILD.gn | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn +index 25db126076b2f..bb2c9884520b3 100644 +--- a/build/rust/std/BUILD.gn ++++ b/build/rust/std/BUILD.gn +@@ -355,12 +355,6 @@ if (toolchain_has_rust) { + ":stdlib_public_dependent_libs", + ] + deps = [ ":prebuilt_rustc_copy_to_sysroot" ] +- +- # The host builds tools toolchain supports Rust only and does not use +- # the allocator remapping to point it to PartitionAlloc. +- if (!toolchain_for_rust_host_build_tools) { +- deps += [ ":remap_alloc" ] +- } + } + } + } diff --git a/backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch b/backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch new file mode 100644 index 0000000..5ba4d83 --- /dev/null +++ b/backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch @@ -0,0 +1,354 @@ +From e65cb388e5da56d1236607e0db9cadf89e50eded Mon Sep 17 00:00:00 2001 +From: Lukasz Anforowicz +Date: Tue, 15 Apr 2025 11:10:19 -0700 +Subject: [PATCH] [rust] Clean up `//build/rust/allocator` after a Rust + toolchain roll. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This CL makes minor tweaks and changes under `//build/rust/allocator`: + +* Thanks to the Rust toolchain roll, we no longer need to keep two + implementations, picking between them using the + `mangle_alloc_error_handler` configuration knob. +* The `#[cfg(use_cpp_allocator_impls)]` vs + `#[cfg(not(use_cpp_allocator_impls))]` choices have been deduplicated + by putting the related/conditional stuff under `mod cpp_allocator` and + `rust_allocator`. +* Closes a minor gap missed in https://crrev.com/c/6432410: + - Moving `DEPS` file to the new source location + +Bug: 408221149 +Change-Id: Id541797e03da113a5271b02a5f60eb2be08254a9 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6454872 +Reviewed-by: Alan Zhao +Commit-Queue: Łukasz Anforowicz +Cr-Commit-Position: refs/heads/main@{#1447241} +--- + build/rust/allocator/BUILD.gn | 11 +- + build/rust/{std => allocator}/DEPS | 2 +- + build/rust/allocator/allocator_impls.cc | 65 ++---------- + build/rust/allocator/allocator_impls.h | 2 + + build/rust/allocator/lib.rs | 132 +++++++++++++++--------- + 5 files changed, 97 insertions(+), 115 deletions(-) + rename build/rust/{std => allocator}/DEPS (76%) + +diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn +index ca581630c76c9..434a61e11bdbb 100644 +--- a/build/rust/allocator/BUILD.gn ++++ b/build/rust/allocator/BUILD.gn +@@ -32,10 +32,6 @@ if (toolchain_has_rust) { + sources = [ "lib.rs" ] + crate_root = "lib.rs" + cxx_bindings = [ "lib.rs" ] +- rustflags = [ +- "--cfg", +- "mangle_alloc_error_handler", +- ] + + deps = [ ":allocator_impls" ] + +@@ -43,13 +39,12 @@ if (toolchain_has_rust) { + no_allocator_crate = true + allow_unsafe = true + ++ rustflags = [] + if (use_cpp_allocator_impls) { +- rustflags += [ +- "--cfg", +- "use_cpp_allocator_impls", +- ] ++ rustflags += [ "--cfg=use_cpp_allocator_impls" ] + } + ++ # TODO(https://crbug.com/410596442): Stop using unstable features here. + configs -= [ "//build/config/compiler:disallow_unstable_features" ] + } + +diff --git a/build/rust/std/DEPS b/build/rust/allocator/DEPS +similarity index 76% +rename from build/rust/std/DEPS +rename to build/rust/allocator/DEPS +index eb524c0a06acd..923a2e07c80f4 100644 +--- a/build/rust/std/DEPS ++++ b/build/rust/allocator/DEPS +@@ -3,7 +3,7 @@ include_rules = [ + ] + + specific_include_rules = { +- "remap_alloc.cc" : [ ++ "allocator_impls.cc" : [ + "+partition_alloc" + ] + } +diff --git a/build/rust/allocator/allocator_impls.cc b/build/rust/allocator/allocator_impls.cc +index bf3c2a301adf5..8887752f3dfad 100644 +--- a/build/rust/allocator/allocator_impls.cc ++++ b/build/rust/allocator/allocator_impls.cc +@@ -24,62 +24,6 @@ + #include + #endif + +-// NOTE: this documentation is outdated. +-// +-// TODO(crbug.com/408221149): update this documentation, or replace it with docs +-// in the Rust allocator implementation. +-// +-// When linking a final binary, rustc has to pick between either: +-// * The default Rust allocator +-// * Any #[global_allocator] defined in *any rlib in its dependency tree* +-// (https://doc.rust-lang.org/edition-guide/rust-2018/platform-and-target-support/global-allocators.html) +-// +-// In this latter case, this fact will be recorded in some of the metadata +-// within the .rlib file. (An .rlib file is just a .a file, but does have +-// additional metadata for use by rustc. This is, as far as I know, the only +-// such metadata we would ideally care about.) +-// +-// In all the linked rlibs, +-// * If 0 crates define a #[global_allocator], rustc uses its default allocator +-// * If 1 crate defines a #[global_allocator], rustc uses that +-// * If >1 crates define a #[global_allocator], rustc bombs out. +-// +-// Because rustc does these checks, it doesn't just have the __rust_alloc +-// symbols defined anywhere (neither in the stdlib nor in any of these +-// crates which have a #[global_allocator] defined.) +-// +-// Instead: +-// Rust's final linking stage invokes dynamic LLVM codegen to create symbols +-// for the basic heap allocation operations. It literally creates a +-// __rust_alloc symbol at link time. Unless any crate has specified a +-// #[global_allocator], it simply calls from __rust_alloc into +-// __rdl_alloc, which is the default Rust allocator. The same applies to a +-// few other symbols. +-// +-// We're not (always) using rustc for final linking. For cases where we're not +-// Rustc as the final linker, we'll define those symbols here instead. This +-// allows us to redirect allocation to PartitionAlloc if clang is doing the +-// link. +-// +-// We use unchecked allocation paths in PartitionAlloc rather than going through +-// its shims in `malloc()` etc so that we can support fallible allocation paths +-// such as Vec::try_reserve without crashing on allocation failure. +-// +-// In future, we should build a crate with a #[global_allocator] and +-// redirect these symbols back to Rust in order to use to that crate instead. +-// This would allow Rust-linked executables to: +-// 1. Use PartitionAlloc on Windows. The stdlib uses Windows heap functions +-// directly that PartitionAlloc can not intercept. +-// 2. Have `Vec::try_reserve` to fail at runtime on Linux instead of crashing in +-// malloc() where PartitionAlloc replaces that function. +-// +-// They're weak symbols, because this file will sometimes end up in targets +-// which are linked by rustc, and thus we would otherwise get duplicate +-// definitions. The following definitions will therefore only end up being +-// used in targets which are linked by our C++ toolchain. +-// +-// # On Windows ASAN +-// + // In ASAN builds, PartitionAlloc-Everywhere is disabled, meaning malloc() and + // friends in C++ do not go to PartitionAlloc. So we also don't point the Rust + // allocation functions at PartitionAlloc. Generally, this means we just direct +@@ -93,7 +37,6 @@ + // Note that there is a runtime option to make ASAN hook HeapAlloc() but + // enabling it breaks Win32 APIs like CreateProcess: + // https://issues.chromium.org/u/1/issues/368070343#comment29 +- + #if !BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) && BUILDFLAG(IS_WIN) && \ + defined(ADDRESS_SANITIZER) + #define USE_WIN_ALIGNED_MALLOC 1 +@@ -110,6 +53,10 @@ unsigned char* alloc(size_t size, size_t align) { + return nullptr; + } + ++ // We use unchecked allocation paths in PartitionAlloc rather than going ++ // through its shims in `malloc()` etc so that we can support fallible ++ // allocation paths such as Vec::try_reserve without crashing on allocation ++ // failure. + if (align <= alignof(std::max_align_t)) { + return static_cast(allocator_shim::UncheckedAlloc(size)); + } else { +@@ -144,6 +91,10 @@ unsigned char* realloc(unsigned char* p, + size_t align, + size_t new_size) { + #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) ++ // We use unchecked allocation paths in PartitionAlloc rather than going ++ // through its shims in `malloc()` etc so that we can support fallible ++ // allocation paths such as Vec::try_reserve without crashing on allocation ++ // failure. + if (align <= alignof(std::max_align_t)) { + return static_cast( + allocator_shim::UncheckedRealloc(p, new_size)); +diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h +index e90ab7cd422c1..e562a877d886e 100644 +--- a/build/rust/allocator/allocator_impls.h ++++ b/build/rust/allocator/allocator_impls.h +@@ -10,6 +10,8 @@ + #include "build/build_config.h" + #include "build/rust/allocator/buildflags.h" + ++// This header exposes PartitionAlloc to Rust ++// (most APIs below are called from `impl GlobalAlloc` in `lib.rs`). + namespace rust_allocator_internal { + + unsigned char* alloc(size_t size, size_t align); +diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs +index 4e2dad3d542a8..a4f898f9b107f 100644 +--- a/build/rust/allocator/lib.rs ++++ b/build/rust/allocator/lib.rs +@@ -5,72 +5,106 @@ + //! Define the allocator that Rust code in Chrome should use. + //! + //! Any final artifact that depends on this crate, even transitively, will use +-//! the allocator defined here. Currently this is a thin wrapper around +-//! allocator_impls.cc's functions; see the documentation there. ++//! the allocator defined here. ++//! ++//! List of known issues: ++//! ++//! 1. We'd like to use PartitionAlloc on Windows, but the stdlib uses Windows ++//! heap functions directly that PartitionAlloc can not intercept. ++//! 2. We'd like `Vec::try_reserve` to fail at runtime on Linux instead of ++//! crashing in malloc() where PartitionAlloc replaces that function. + + // Required to apply weak linkage to symbols. ++// ++// TODO(https://crbug.com/410596442): Stop using unstable features here. ++// https://github.com/rust-lang/rust/issues/29603 tracks stabilization of the `linkage` feature. + #![feature(linkage)] + // Required to apply `#[rustc_std_internal_symbol]` to our alloc error handler + // so the name is correctly mangled as rustc expects. +-#![cfg_attr(mangle_alloc_error_handler, allow(internal_features))] +-#![cfg_attr(mangle_alloc_error_handler, feature(rustc_attrs))] ++// ++// TODO(https://crbug.com/410596442): Stop using internal features here. ++#![allow(internal_features)] ++#![feature(rustc_attrs)] + ++/// Module that provides `#[global_allocator]` / `GlobalAlloc` interface for ++/// using an allocator from C++. + #[cfg(use_cpp_allocator_impls)] +-use std::alloc::{GlobalAlloc, Layout}; ++mod cpp_allocator { ++ use super::ffi; ++ use std::alloc::{GlobalAlloc, Layout}; + +-#[cfg(use_cpp_allocator_impls)] +-struct Allocator; ++ struct Allocator; + +-#[cfg(use_cpp_allocator_impls)] +-unsafe impl GlobalAlloc for Allocator { +- unsafe fn alloc(&self, layout: Layout) -> *mut u8 { +- unsafe { ffi::alloc(layout.size(), layout.align()) } +- } ++ unsafe impl GlobalAlloc for Allocator { ++ unsafe fn alloc(&self, layout: Layout) -> *mut u8 { ++ unsafe { ffi::alloc(layout.size(), layout.align()) } ++ } + +- unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { +- unsafe { +- ffi::dealloc(ptr, layout.size(), layout.align()); ++ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { ++ unsafe { ++ ffi::dealloc(ptr, layout.size(), layout.align()); ++ } + } +- } + +- unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { +- unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) } +- } ++ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { ++ unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) } ++ } + +- unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { +- unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) } ++ unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { ++ unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) } ++ } + } +-} + +-#[cfg(use_cpp_allocator_impls)] +-#[global_allocator] +-static GLOBAL: Allocator = Allocator; ++ #[global_allocator] ++ static GLOBAL: Allocator = Allocator; ++} + ++/// Module that provides `#[global_allocator]` / `GlobalAlloc` interface for ++/// using the default Rust allocator. + #[cfg(not(use_cpp_allocator_impls))] +-#[global_allocator] +-static GLOBAL: std::alloc::System = std::alloc::System; +- +-// As part of rustc's contract for using `#[global_allocator]` without +-// rustc-generated shims we must define this symbol, since we are opting in to +-// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 +-#[no_mangle] +-#[linkage = "weak"] +-static __rust_no_alloc_shim_is_unstable: u8 = 0; +- +-// Mangle the symbol name as rustc expects. +-#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] +-#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] +-#[allow(non_upper_case_globals)] +-#[linkage = "weak"] +-static __rust_alloc_error_handler_should_panic: u8 = 0; +- +-// Mangle the symbol name as rustc expects. +-#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] +-#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] +-#[allow(non_upper_case_globals)] +-#[linkage = "weak"] +-fn __rust_alloc_error_handler(_size: usize, _align: usize) { +- unsafe { ffi::crash_immediately() } ++mod rust_allocator { ++ #[global_allocator] ++ static GLOBAL: std::alloc::System = std::alloc::System; ++} ++ ++/// Module that provides global symbols that are needed both by `cpp_allocator` ++/// and `rust_allocator`. ++/// ++/// When `rustc` drives linking, then it will define the symbols below. But ++/// Chromium only uses `rustc` to link Rust-only executables (e.g. `build.rs` ++/// scripts) and otherwise uses a non-Rust linker. This is why we have to ++/// manually define a few symbols below. We define those symbols ++/// as "weak" symbols, so that Rust-provided symbols "win" in case where Rust ++/// actually does drive the linking. This hack works (not only for Chromium, ++/// but also for google3 and other projects), but isn't officially supported by ++/// `rustc`. ++/// ++/// TODO(https://crbug.com/410596442): Stop using internal features here. ++mod both_allocators { ++ use super::ffi; ++ ++ /// As part of rustc's contract for using `#[global_allocator]` without ++ /// rustc-generated shims we must define this symbol, since we are opting in ++ /// to unstable functionality. See https://github.com/rust-lang/rust/issues/123015 ++ #[no_mangle] ++ #[linkage = "weak"] ++ static __rust_no_alloc_shim_is_unstable: u8 = 0; ++ ++ // Mangle the symbol name as rustc expects. ++ #[rustc_std_internal_symbol] ++ #[allow(non_upper_case_globals)] ++ #[linkage = "weak"] ++ static __rust_alloc_error_handler_should_panic: u8 = 0; ++ ++ // Mangle the symbol name as rustc expects. ++ #[rustc_std_internal_symbol] ++ #[allow(non_upper_case_globals)] ++ #[linkage = "weak"] ++ fn __rust_alloc_error_handler(_size: usize, _align: usize) { ++ // TODO(lukasza): Investigate if we can just call `std::process::abort()` here. ++ // (Not really _needed_, but it could simplify code a little bit.) ++ unsafe { ffi::crash_immediately() } ++ } + } + + // TODO(crbug.com/408221149): conditionally include the FFI glue based on diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 6721e7c..c95f43a 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -137,6 +137,11 @@ source=" temp-failure-retry.patch pipewire-1.4.patch gperf-3.2-fix.patch + 0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch + 0002-Call-Rust-default-allocator-directly-from-Rust.patch + 0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch + 0004-Drop-remap_alloc-dep.patch + 0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch electron_icon.patch electron_python-jinja-3.10.patch @@ -184,6 +189,10 @@ esac # breaks chromium-based stuff export CXXFLAGS="${CXXFLAGS/-D_GLIBCXX_ASSERTIONS=1}" +# workaround to error: undefined symbol: __rustc::__rust_dealloc +# with 000*.patch patches +export RUSTC_BOOTSTRAP=1 + # creates a dist tarball that does not need to git clone everything at build time. _distbucket="sakamoto/lnl-aports-snapshots/" snapshot() { @@ -565,6 +574,11 @@ f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7 e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch 1814096bc611e7f56cc5c570214dae715a4cda1fba96a6b585a73a1abc8b9161efaa799dc83887dac531dbafe9479bbe235cabe1a61cb3081e268c53a6144908 pipewire-1.4.patch 4bc087a1e5acbb0f8f884756b40c127df88699ecd6eb42c4aff6691b87239bb6915dd102e9ef2544502a12bff011859ad497206940473e6b0a0fd75afb562a4c gperf-3.2-fix.patch +858f8e3c544abf3ffe0f54ba303713e9b4058e15996c8dc10bab7c999d82e1960756325a41d6bebb3a00404efb8e51c299f61f60de4feaac6b621757ab85d329 0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch +077497c1598c7db9f4c23e000e9b86e1833de4866479fd921313543ad599e141427bf38ae687f84c3da59af68f09a776265c2a569e1a7abfa80440231baef10a 0002-Call-Rust-default-allocator-directly-from-Rust.patch +5002aa73eb19b87c702eef5b087ecb3a2679142c28cd95a5a9571aeffe24e6944497e862058ed1d609317a723cdec1678f84543235fb93f12653a92b92309efe 0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch +d2e414135d2b046dd9efe277f88062bcb0a94749a17a014309260b1469305d55059931b9531572713c8e516897e30fd2f5317948ece1581ffe9b7b6c01078a6d 0004-Drop-remap_alloc-dep.patch +fe66228c0eefe3d08e2a7955b11e6a46f58f477befceba1628765fb016f30eb0bb02723aeedcabdb1ea3b84c42b5ea65073998e0a64f5ce082120fc7e65dee9a 0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch 465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch From 9a93d206fb9763ac042f76c8fc95af737f529090 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 22:36:58 -0400 Subject: [PATCH 628/738] ci: skip dotnet6* on testing --- .forgejo/workflows/check-testing.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml index 1c3abe9..2137944 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -14,6 +14,7 @@ jobs: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 4 + skip_package: dotnet6-stage dotnet6-build steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 234904618e6d0bf718c717584ec1d43a677b6568 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 23:00:12 -0400 Subject: [PATCH 629/738] backports/libmedc: upgrade to 5.0.0 --- backports/libmedc/APKBUILD | 34 +++++-- backports/libmedc/hdf5-1.14.patch | 119 +++++++++++++++++++++++++ backports/libmedc/hdf5.patch | 94 ------------------- backports/libmedc/med-py3.13.patch | 26 ++++++ backports/libmedc/med-swig-4.3.0.patch | 59 ++++++++++++ 5 files changed, 229 insertions(+), 103 deletions(-) create mode 100644 backports/libmedc/hdf5-1.14.patch delete mode 100644 backports/libmedc/hdf5.patch create mode 100644 backports/libmedc/med-py3.13.patch create mode 100644 backports/libmedc/med-swig-4.3.0.patch diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD index 8976805..0bf52fc 100644 --- a/backports/libmedc/APKBUILD +++ b/backports/libmedc/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Aiden Grossman # Maintainer: pkgname=libmedc -pkgver=4.1.1 -pkgrel=4 +pkgver=5.0.0 +pkgrel=0 pkgdesc="Open source library for numerical simulation" url="https://www.salome-platform.org/" arch="all" @@ -10,22 +10,36 @@ license="GPL-3.0-or-later" makedepends="cmake hdf5-dev swig python3-dev samurai" options="!check" #test suite is nonfunctional with python bindings subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" +# Upstream disappeared: +# https://www.salome-platform.org/downloads +# https://files.salome-platform.org/Salome/other/med-4.1.1.tar.gz +# +# Using a fork on GitHub by one of the FreeCAD developers instead. +# source=" - https://files.salome-platform.org/Salome/medfile/med-$pkgver.tar.gz - hdf5.patch + $pkgname-$pkgver.tar.gz::https://github.com/chennes/med/archive/refs/tags/v$pkgver.tar.gz cmake-config-dir.patch + hdf5-1.14.patch + med-swig-4.3.0.patch + med-py3.13.patch " builddir="$srcdir/med-$pkgver" build() { cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=None \ + -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ - -DMEDFILE_BUILD_TESTS=OFF \ - -DMEDFILE_BUILD_PYTHON=ON + -DCMAKE_SKIP_RPATH=ON \ + -DMEDFILE_BUILD_PYTHON=ON \ + -DMEDFILE_BUILD_TESTS=OFF cmake --build build } +check() { + cd build + HDF5_DISABLE_VERSION_CHECK=1 LD_LIBRARY_PATH="$srcdir"/build/src ctest -E '._Python' --output-on-failure +} + package() { DESTDIR="$pkgdir" cmake --install build } @@ -37,7 +51,9 @@ _py() { } sha512sums=" -f211fa82750a7cc935baa3a50a55d16e40117a0f2254b482492ba8396d82781ca84960995da7a16b2b5be0b93ce76368bf4b311bb8af0e5f0243e7051c9c554c med-4.1.1.tar.gz -68d9291e73a68d674081314028c0fce7bbd4a7b78b93b7e5078117ce62f2d07318bc33ec95091ce677148ec3926c1ce653d0760c34e74b29257a7be59210f040 hdf5.patch +6ebb06bf403dbe32512a42179a42de3da6f264034fcc143fcb2b780c5d564527656d3ef28ebf25d7bde93a9d2a44df0d10a09d60e6f4720ba9d25719a4e30d37 libmedc-5.0.0.tar.gz 8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch +78bfbd17a052c039244ce314d53b0d5e5e6ba6773fe7a836999bf7ddf4b6d732dfda95c58681dd9d7e9586e4d36d3dfe7cca15d45fa7d3d453aef72423fcd5c0 hdf5-1.14.patch +833187253fcbebb13f239f1f559333db6a7d3ef87c4f7b896f64970a3e553735ed01a82d6d4a368a2261e33e364b05ea3abbff3fd58c8221515aa72aa52684a7 med-swig-4.3.0.patch +6c993d924257a01b8bce1952ecc34346ab654a103f4374d514c3616cd6cdf94373b2a4d04b91a68933cd5acbc4fc54becab6bd58f32762973bbee8255c5d7a3d med-py3.13.patch " diff --git a/backports/libmedc/hdf5-1.14.patch b/backports/libmedc/hdf5-1.14.patch new file mode 100644 index 0000000..6202f74 --- /dev/null +++ b/backports/libmedc/hdf5-1.14.patch @@ -0,0 +1,119 @@ +Patch-Source: https://src.fedoraproject.org/rpms/med/raw/rawhide/f/hdf5-1.14.patch + +diff -rupN --no-dereference med-5.0.0/config/cmake_files/medMacros.cmake med-5.0.0-new/config/cmake_files/medMacros.cmake +--- med-5.0.0/config/cmake_files/medMacros.cmake 2025-01-24 00:28:04.460898497 +0100 ++++ med-5.0.0-new/config/cmake_files/medMacros.cmake 2025-01-24 00:28:04.857640862 +0100 +@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) + ## + ## Requires 1.12.x version + ## +- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 12 OR NOT HDF_VERSION_RELEASE_REF GREATER 0) ++ IF (HDF5_VERSION VERSION_LESS 1.12.1) + MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.12.1 are supported.") + ENDIF() + ## +diff -rupN --no-dereference med-5.0.0/src/ci/MEDfileCompatibility.c med-5.0.0-new/src/ci/MEDfileCompatibility.c +--- med-5.0.0/src/ci/MEDfileCompatibility.c 2023-06-05 14:14:44.000000000 +0200 ++++ med-5.0.0-new/src/ci/MEDfileCompatibility.c 2025-01-24 00:28:04.858068408 +0100 +@@ -116,7 +116,7 @@ MEDfileCompatibility(const char* const f + #if MED_NUM_MAJEUR != 5 + #error "Don't forget to update the test version here when you change the major version of the library !" + #endif +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" + #error "Cf. _MEDfileCreate ..." + #endif +diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDfileCreate.c med-5.0.0-new/src/hdfi/_MEDfileCreate.c +--- med-5.0.0/src/hdfi/_MEDfileCreate.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/hdfi/_MEDfileCreate.c 2025-01-24 00:28:04.858334666 +0100 +@@ -189,7 +189,7 @@ med_idt _MEDfileCreate(const char * cons + * Cette ligne est censée obliger HDF à ne pas utiliser un modèle interne différent de 1.10.z + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDfileOpen.c med-5.0.0-new/src/hdfi/_MEDfileOpen.c +--- med-5.0.0/src/hdfi/_MEDfileOpen.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/hdfi/_MEDfileOpen.c 2025-01-24 00:28:04.858574380 +0100 +@@ -113,7 +113,7 @@ med_idt _MEDfileOpen(const char * const + has been set in the group creation property list (see H5Pset_link_creation_order). + */ + +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + /* L'avantage de bloquer le modèle interne HDF5 +diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDfileOpenForImport.c med-5.0.0-new/src/hdfi/_MEDfileOpenForImport.c +--- med-5.0.0/src/hdfi/_MEDfileOpenForImport.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/hdfi/_MEDfileOpenForImport.c 2025-01-24 00:28:04.858834390 +0100 +@@ -53,7 +53,7 @@ med_idt _MEDfileOpenForImport(const cha + } + + +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + /* L'avantage de bloquer le modèle interne HDF5 +diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDmemFileOpen.c med-5.0.0-new/src/hdfi/_MEDmemFileOpen.c +--- med-5.0.0/src/hdfi/_MEDmemFileOpen.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/hdfi/_MEDmemFileOpen.c 2025-01-24 00:28:04.859128966 +0100 +@@ -439,7 +439,7 @@ med_idt _MEDmemFileOpen(const char * con + goto ERROR; + } + +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_V112, H5F_LIBVER_V112 ) ) { +@@ -506,7 +506,7 @@ med_idt _MEDmemFileOpen(const char * con + goto ERROR; + } + _fversionMM = 100*_fmajor+10*_fminor; +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( _fversionMM < 500 ) { /*100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR*/ +diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDparFileCreate.c med-5.0.0-new/src/hdfi/_MEDparFileCreate.c +--- med-5.0.0/src/hdfi/_MEDparFileCreate.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/hdfi/_MEDparFileCreate.c 2025-01-24 00:28:04.859422685 +0100 +@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDparFileOpen.c med-5.0.0-new/src/hdfi/_MEDparFileOpen.c +--- med-5.0.0/src/hdfi/_MEDparFileOpen.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/hdfi/_MEDparFileOpen.c 2025-01-24 00:28:04.859632596 +0100 +@@ -86,7 +86,7 @@ med_idt _MEDparFileOpen(const char * con + } + _fversionMM = 100*_fmajor+10*_fminor; + +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( _fversionMM < 500 ) { /*100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR*/ +diff -rupN --no-dereference med-5.0.0/src/misc/MEDversionedApi3C.c med-5.0.0-new/src/misc/MEDversionedApi3C.c +--- med-5.0.0/src/misc/MEDversionedApi3C.c 2023-06-05 14:14:45.000000000 +0200 ++++ med-5.0.0-new/src/misc/MEDversionedApi3C.c 2025-01-24 00:28:04.859890990 +0100 +@@ -114,7 +114,7 @@ MedFuncType _MEDversionedApi3( const cha + /* (_fversionMM <= (100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR) ) */ + /* ) { */ + +-#if H5_VERS_MINOR > 12 ++#if H5_VERS_MINOR > 14 + #error "Don't forget to change the compatibility version of the library !" + #endif + diff --git a/backports/libmedc/hdf5.patch b/backports/libmedc/hdf5.patch deleted file mode 100644 index bc4764b..0000000 --- a/backports/libmedc/hdf5.patch +++ /dev/null @@ -1,94 +0,0 @@ -Originally from https://gist.github.com/jedbrown/527ef81ff59a0dccf833da40fdd15a47 -diff -rupN med-4.1.0/config/cmake_files/medMacros.cmake med-4.1.0-new/config/cmake_files/medMacros.cmake ---- med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-03 09:35:30.675827163 +0100 -+++ med-4.1.0-new/config/cmake_files/medMacros.cmake 2021-12-03 09:32:31.894994147 +0100 -@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) - ## - ## Requires 1.10.x version - ## -- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1) -+ IF (HDF5_VERSION VERSION_LESS 1.10.2) - MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.") - ENDIF() - ## -diff -rupN med-4.1.0/src/ci/MEDfileCompatibility.c med-4.1.0-new/src/ci/MEDfileCompatibility.c ---- med-4.1.0/src/ci/MEDfileCompatibility.c 2021-12-03 09:35:30.676827162 +0100 -+++ med-4.1.0-new/src/ci/MEDfileCompatibility.c 2021-12-03 09:33:26.292942149 +0100 -@@ -71,7 +71,7 @@ MEDfileCompatibility(const char* const f - _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease; - /* ISCRUTE(_hversionMMR); */ - /* ISCRUTE(HDF_VERSION_NUM_REF); */ -- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE; -+ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE; - - /* TODO : Vérifier si la version mineure HDF du fichier est supérieure - à la version mineure de la bibliothèque HDF utilisée : -@@ -113,7 +113,7 @@ MEDfileCompatibility(const char* const f - #if MED_NUM_MAJEUR != 4 - #error "Don't forget to update the test version here when you change the major version of the library !" - #endif --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" - #error "Cf. _MEDfileCreate ..." - #endif -diff -rupN med-4.1.0/src/hdfi/_MEDfileCreate.c med-4.1.0-new/src/hdfi/_MEDfileCreate.c ---- med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-03 09:35:30.677827161 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDfileCreate.c 2021-12-03 09:32:31.894994147 +0100 -@@ -159,7 +159,7 @@ med_idt _MEDfileCreate(const char * cons - * En HDF5-1.10.0p1 cela n'a aucun effet ! - * Un test autoconf permet de fixer un intervalle de version HDF à MED. - */ --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - -diff -rupN med-4.1.0/src/hdfi/_MEDfileOpen.c med-4.1.0-new/src/hdfi/_MEDfileOpen.c ---- med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-03 09:35:30.677827161 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDfileOpen.c 2021-12-03 09:32:31.894994147 +0100 -@@ -72,7 +72,7 @@ med_idt _MEDfileOpen(const char * const - - • The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). - */ --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - /* L'avantage de bloquer le modèle interne HDF5 -diff -rupN med-4.1.0/src/hdfi/_MEDmemFileOpen.c med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c ---- med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:35:30.678827160 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDmemFileOpen.c 2021-12-03 09:32:31.894994147 +0100 -@@ -434,7 +434,7 @@ med_idt _MEDmemFileOpen(const char * con - goto ERROR; - } - --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) { -diff -rupN med-4.1.0/src/hdfi/_MEDparFileCreate.c med-4.1.0-new/src/hdfi/_MEDparFileCreate.c ---- med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:35:30.678827160 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDparFileCreate.c 2021-12-03 09:32:31.894994147 +0100 -@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c - * En HDF5-1.10.0p1 cela n'a aucun effet ! - * Un test autoconf permet de fixer un intervalle de version HDF à MED. - */ --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - -diff -rupN med-4.1.0/src/hdfi/_MEDparFileOpen.c med-4.1.0-new/src/hdfi/_MEDparFileOpen.c ---- med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:35:30.679827159 +0100 -+++ med-4.1.0-new/src/hdfi/_MEDparFileOpen.c 2021-12-03 09:32:31.894994147 +0100 -@@ -55,7 +55,7 @@ med_idt _MEDparFileOpen(const char * con - MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG); - goto ERROR; - } --#if H5_VERS_MINOR > 10 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) { diff --git a/backports/libmedc/med-py3.13.patch b/backports/libmedc/med-py3.13.patch new file mode 100644 index 0000000..164daf0 --- /dev/null +++ b/backports/libmedc/med-py3.13.patch @@ -0,0 +1,26 @@ +Patch-Source: https://src.fedoraproject.org/rpms/med/raw/rawhide/f/med-swig-4.3.0.patch + +diff -rupN --no-dereference med-5.0.0/python/med_enumtest_typemap.i med-5.0.0-new/python/med_enumtest_typemap.i +--- med-5.0.0/python/med_enumtest_typemap.i 2023-03-07 15:20:57.000000000 +0100 ++++ med-5.0.0-new/python/med_enumtest_typemap.i 2025-01-24 00:28:04.465816239 +0100 +@@ -128,7 +128,7 @@ public: + if (pclass == NULL) printf("%s\n","Can't get class $1_basetype"); + Py_DECREF(pmod); + pargs = Py_BuildValue("(i)",*$1); +- pinst = PyEval_CallObject(pclass, pargs); ++ pinst = PyObject_CallObject(pclass, pargs); + if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); + $result=SWIG_Python_AppendOutput($result, pinst); + } +diff -rupN --no-dereference med-5.0.0/python/med_enum_typemap.i med-5.0.0-new/python/med_enum_typemap.i +--- med-5.0.0/python/med_enum_typemap.i 2023-03-07 15:20:57.000000000 +0100 ++++ med-5.0.0-new/python/med_enum_typemap.i 2025-01-24 00:28:04.466146326 +0100 +@@ -109,7 +109,7 @@ Type.__repr__= lambda self: #Type +"("+s + if (pclass == NULL) printf("%s\n","Can't get class $1_basetype"); + Py_DECREF(pmod); + pargs = Py_BuildValue("(i)",*$1); +- pinst = PyEval_CallObject(pclass, pargs); ++ pinst = PyObject_CallObject(pclass, pargs); + if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); + $result=SWIG_Python_AppendOutput($result, pinst); + } diff --git a/backports/libmedc/med-swig-4.3.0.patch b/backports/libmedc/med-swig-4.3.0.patch new file mode 100644 index 0000000..e9dcb5e --- /dev/null +++ b/backports/libmedc/med-swig-4.3.0.patch @@ -0,0 +1,59 @@ +Patch-Source: https://src.fedoraproject.org/rpms/med/raw/rawhide/f/med-py3.13.patch + +diff -rupN --no-dereference med-5.0.0/python/med_array_typemap.i med-5.0.0-new/python/med_array_typemap.i +--- med-5.0.0/python/med_array_typemap.i 2023-03-07 15:20:57.000000000 +0100 ++++ med-5.0.0-new/python/med_array_typemap.i 2025-01-24 00:28:05.257751237 +0100 +@@ -181,7 +181,7 @@ Type.__repr__= lambda self: #Type +"("+s + // TypeMed * const ParamName : OUT 2/4 (l'allocation Type est faite ds Python) + %typemap(freearg) TypeMed * const ParamName { + Py_INCREF(o$argnum); +- $result=SWIG_Python_AppendOutput($result, o$argnum); ++ $result=SWIG_AppendOutput($result, o$argnum); + } + // TypeMed * const (OUT) 3/4 + // pour ne pas activer un out du TypeMed * const (par sécurité) +@@ -290,7 +290,7 @@ Type.__repr__= lambda self: #Type +"("+s + // unsigned char * const : OUT 2/4 (l'allocation Type est faite ds Python) + %typemap(freearg) unsigned char * const { + Py_INCREF(o$argnum); +- $result=SWIG_Python_AppendOutput($result, o$argnum); ++ $result=SWIG_AppendOutput($result, o$argnum); + } + // unsigned char * const (OUT) 3/4 + // pour ne pas activer un out du unsigned char * const (par sécurité) +diff -rupN --no-dereference med-5.0.0/python/med_bool_typemap.i med-5.0.0-new/python/med_bool_typemap.i +--- med-5.0.0/python/med_bool_typemap.i 2023-03-07 15:20:57.000000000 +0100 ++++ med-5.0.0-new/python/med_bool_typemap.i 2025-01-24 00:28:05.257993234 +0100 +@@ -22,7 +22,7 @@ + /* Py_DECREF(o2); */ + /* Py_DECREF(o3); */ + /* } */ +- $result=SWIG_Python_AppendOutput($result, o); ++ $result=SWIG_AppendOutput($result, o); + } + + %typemap(in,numinputs=0) med_bool *(med_bool temp) { +diff -rupN --no-dereference med-5.0.0/python/med_enumtest_typemap.i med-5.0.0-new/python/med_enumtest_typemap.i +--- med-5.0.0/python/med_enumtest_typemap.i 2025-01-24 00:28:04.853403794 +0100 ++++ med-5.0.0-new/python/med_enumtest_typemap.i 2025-01-24 00:28:05.258210585 +0100 +@@ -130,7 +130,7 @@ public: + pargs = Py_BuildValue("(i)",*$1); + pinst = PyObject_CallObject(pclass, pargs); + if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); +- $result=SWIG_Python_AppendOutput($result, pinst); ++ $result=SWIG_AppendOutput($result, pinst); + } + + %typemap(in,numinputs=0) TypeEnum * (TypeEnum temp) { +diff -rupN --no-dereference med-5.0.0/python/med_enum_typemap.i med-5.0.0-new/python/med_enum_typemap.i +--- med-5.0.0/python/med_enum_typemap.i 2025-01-24 00:28:04.853741870 +0100 ++++ med-5.0.0-new/python/med_enum_typemap.i 2025-01-24 00:28:05.258385775 +0100 +@@ -111,7 +111,7 @@ Type.__repr__= lambda self: #Type +"("+s + pargs = Py_BuildValue("(i)",*$1); + pinst = PyObject_CallObject(pclass, pargs); + if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); +- $result=SWIG_Python_AppendOutput($result, pinst); ++ $result=SWIG_AppendOutput($result, pinst); + } + + %typemap(in,numinputs=0) TypeEnum * (TypeEnum temp) { From e287d269969e89ad83ff8a6d89c84470decc032c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 23:42:40 -0400 Subject: [PATCH 630/738] ci: add special case for zotero --- .forgejo/bin/check_ver.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index e931cb6..e281294 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -59,6 +59,16 @@ for pkg in $owned_by_you; do # special cases where package is not semantic case $pkg in + zotero) + commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') + downstream_fx_ver=$(curl --fail -X GET -s "https://gitlab.alpinelinux.org/alpine/aports/-/raw/$commit/community/zotero/APKBUILD" | awk -F '=' '{if($1=="_fxver"){print $2}}') + upstream_fx_ver=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/firefox-esr" | jq -r ".stable_versions.[] | match(\"${downstream_fx_ver/.*.*}.*\").string" | head -n1) + if [ "$upstream_fx_ver" != "$downstream_fx_ver" ]; then + echo "$pkg new Firefox $upstream_fx_ver version available" + echo "$pkg(fx_ver) $downstream_fx_ver $upstream_fx_ver $repo $release" >> out_of_date + fi + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) + ;; freetube) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);; electron) From 23c870f2c6aae462312195083ae6f01d9c7674df Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 26 May 2025 23:43:08 -0400 Subject: [PATCH 631/738] ci: fix special case for electron --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index e281294..6468ed7 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -77,7 +77,7 @@ for pkg in $owned_by_you; do # append version number to signal that this is not latest major version if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then echo "$pkg${latest_version/.*} major version available" - echo "$pkg${latest_version/.*} $downstream_version $latest_version $repo" >> out_of_date + echo "$pkg${latest_version/.*} $downstream_version $latest_version $repo $release" >> out_of_date pkg=$pkg${upstream_version/.*} fi ;; From 92c41ceef9fa0ddf480b44f38d8b305ddec949e1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 00:02:39 -0400 Subject: [PATCH 632/738] ci: update electron title --- .forgejo/bin/check_ver.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 6468ed7..3a0684e 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -76,9 +76,9 @@ for pkg in $owned_by_you; do latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) # append version number to signal that this is not latest major version if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then - echo "$pkg${latest_version/.*} major version available" - echo "$pkg${latest_version/.*} $downstream_version $latest_version $repo $release" >> out_of_date - pkg=$pkg${upstream_version/.*} + echo "$pkg(${latest_version/.*}) major version available" + echo "$pkg(${latest_version/.*}) $downstream_version $latest_version $repo $release" >> out_of_date + pkg="$pkg(${upstream_version/.*})" fi ;; arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n1);; From 370d84dc77e4d3932d95b7e0e876531bf2da1914 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:15:55 -0400 Subject: [PATCH 633/738] user/openterface-qt: upgrade to 0.3.13 --- .../51-openterface-permissions.rules | 3 ++- user/openterface-qt/APKBUILD | 21 +++++++++---------- .../openterface-qt.post-install | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/user/openterface-qt/51-openterface-permissions.rules b/user/openterface-qt/51-openterface-permissions.rules index e8f2971..a74cfbd 100644 --- a/user/openterface-qt/51-openterface-permissions.rules +++ b/user/openterface-qt/51-openterface-permissions.rules @@ -1 +1,2 @@ -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="plugdev" +SUBSYSTEM=="usb", ATTRS{idVendor}=="534d", ATTRS{idProduct}=="2109", MODE="0660", GROUP="plugdev" +SUBSYSTEM=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE="0660", GROUP="plugdev" diff --git a/user/openterface-qt/APKBUILD b/user/openterface-qt/APKBUILD index b0bb703..cf753a7 100644 --- a/user/openterface-qt/APKBUILD +++ b/user/openterface-qt/APKBUILD @@ -1,17 +1,17 @@ # Maintainer: Antoine Martin (ayakael) pkgname=openterface-qt -pkgver=0.1.0 +pkgver=0.3.13 pkgrel=0 pkgdesc="Openterface Mini-KVM Host Application" -arch='all' +arch="all !armhf" # missing qt6-qtmultimedia url="https://openterface.com/" -license='AGPL-3.0-only' -depends='qt6-qtmultimedia-ffmpeg hicolor-icon-theme' -makedepends='qt6-qtbase-dev qt6-qtmultimedia-dev qt6-qtserialport-dev qt6-qtsvg-dev qt6-qtmultimedia-dev libusb-dev' +license="AGPL-3.0-only" +depends="qt6-qtmultimedia-ffmpeg hicolor-icon-theme" +makedepends="qt6-qtbase-dev qt6-qtmultimedia-dev qt6-qtserialport-dev qt6-qtsvg-dev qt6-qtmultimedia-dev libusb-dev" install="$pkgname.post-install" builddir="$srcdir"/Openterface_QT-$pkgver source=" - $pkgname-$pkgver.tar.gz::https://github.com/TechxArtisanStudio/Openterface_QT/archive/v$pkgver.tar.gz + $pkgname-$pkgver.tar.gz::https://github.com/TechxArtisanStudio/Openterface_QT/archive/$pkgver.tar.gz openterfaceQT.desktop 51-openterface-permissions.rules " @@ -19,12 +19,11 @@ source=" prepare() { default_prepare mkdir build && cd build - qmake6 .. + qmake6 .. } build() { - cd build - make + make -C build } package() { @@ -36,7 +35,7 @@ package() { install -Dm644 "$builddir"/images/icon_128.png "$pkgdir"/usr/share/icons/hicolor/128x128/apps/openterfaceQT.png } sha512sums=" -2aff3b5b92d5d12d1d748726e2565f5d410611b242b4fac04289b6b057eb1d39b7c2c9bcf613b3b9636a74f17c3fb69ff52177ee889f4d34de7b5b5388e75964 openterface-qt-0.1.0.tar.gz +7261ce2875b1617d27945de591c72779d2305889b7f53bb6758cb5e1d4dc01c969fef1638726d868f75e995c44a8e2c453cac45c90cfb3d140b8120523c4038d openterface-qt-0.3.13.tar.gz e39cfa04cbcb59e8ba54110a28eff41854f73fa7c4baeeed5433907c79781946f12bd3a731763caa1d591e664eab0650bdbd2a844954baa12bb96a76a17c6e4f openterfaceQT.desktop -aed752c03acfb5e7d3dc206fd342c1eed6b56353801e54b925e5d3a3e673bf604e0e94424e5e8fddb31c21d3acfbda351f1ea6e8ddc8057f7354ec86a4c74a5e 51-openterface-permissions.rules +f50d721a6a2d1e0183c81e99230e91e127ee6c6f3243af1cff3e3cb78e2913ebab3346ec8b461a4710220d1ce2e12a7cc960ded6e0dc2def539375c6e737b647 51-openterface-permissions.rules " diff --git a/user/openterface-qt/openterface-qt.post-install b/user/openterface-qt/openterface-qt.post-install index 09d267b..b853907 100755 --- a/user/openterface-qt/openterface-qt.post-install +++ b/user/openterface-qt/openterface-qt.post-install @@ -1,3 +1,3 @@ -#!/bin/bash +#!/bin/sh echo "Setup the dialout permission for Serial port." echo "Run: sudo usermod -a -G video,plugdev \$USER" From 6b7279026db646a79187c5afbb2886dbb0c25f4f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:18:25 -0400 Subject: [PATCH 634/738] user/rmfakecloud: upgrade to 0.0.24 --- user/rmfakecloud/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index 4bc816e..d9402ab 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.19 +pkgver=0.0.24 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" @@ -37,7 +37,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -55948ede5f8a4cc9e74c9c68f83d14dec4950f23da5ef053f3ae708edf2643f64e5736abfe63cbf6700e5277adff7167ce0f228a8241169261f4ce59e2815a35 rmfakecloud-0.0.19.tar.gz +c0c96cb9168b8152da3842fac095a6bd33e74b5f7a5cefe72e44853f4059c966336e98cd4c62235f7a2fe625acdd93452f718c19a1bf65f5dd7dbd8bb5cd1f8c rmfakecloud-0.0.24.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " From 56f0391fd1296acc5ee8aa0c6530c3b148bbb420 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:19:49 -0400 Subject: [PATCH 635/738] user/scantopl: upgrade to 1.0.0 --- user/scantopl/APKBUILD | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/user/scantopl/APKBUILD b/user/scantopl/APKBUILD index 725e413..dea4f1e 100644 --- a/user/scantopl/APKBUILD +++ b/user/scantopl/APKBUILD @@ -2,10 +2,10 @@ # Contributor: Antoine Martin (ayakael) pkgname=scantopl -pkgver=0.0.1 +pkgver=1.0.0 pkgrel=0 pkgdesc="Automatically send scanservjs scanned document to paperless-ng" -_gittag="5c5d71a9e1cf8985d374453c866c1711692334e2" +_gittag="v$pkgver" url="https://github.com/Celedhrim/scantopl" arch="all" license="WTFPL" @@ -16,7 +16,7 @@ source=" scantopl.initd scantopl.conf " -builddir="$srcdir/$pkgname-$_gittag" +builddir="$srcdir/$pkgname-${_gittag/v}" options="!check" # No testsuite build() { @@ -31,7 +31,7 @@ package() { install -Dm644 "$srcdir"/scantopl.conf "$pkgdir"/etc/conf.d/scantopl } sha512sums=" -f47823ffdea68de71ce9f3a347f31eee3556aae2087f68d2cf4078b9694894d06fc8de94e806ad34358e0ec636ace6dc5d97273c3102192584cb540ede3bd288 scantopl-0.0.1.tar.gz +d4eca1adc326f1e730ae195bd44f1cf05d404488ce20fd612467c572ea7fa718034bb7b16d3e007976349f6852e83569aa17727dcc61f9e7ab1934995b3bc3e6 scantopl-1.0.0.tar.gz 8238411fe8881be6690a583a6bfc71e52f3131320f5d92bb36f8af61802980265a8cf5250eb699d9214f7c6c168d14c39867a09587fb07841a8504a6a28db74b scantopl.initd ee2e631901b1d88c0dede6587318e44884255a7c82e090371f017dbb91563c16f0567c0d45b3183d0a8abb3ee4b71a33f3d79258ad2b2f6d8930a5bc7625070a scantopl.conf " From 5d9d856a6c399ec27e57af08006709271cbdd456 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:39:06 -0400 Subject: [PATCH 636/738] backports/thelounge: disable tests --- backports/thelounge/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD index bc0de04..0e84a6e 100644 --- a/backports/thelounge/APKBUILD +++ b/backports/thelounge/APKBUILD @@ -3,7 +3,7 @@ # Maintainer: Fabricio Silva pkgname=thelounge pkgver=4.4.3 -pkgrel=0 +pkgrel=1 pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" url="https://thelounge.chat" arch="all !riscv64" # riscv64 gets SIGILL @@ -17,7 +17,7 @@ source=" thelounge.initd thelounge.confd " -options="net" # net for npm +options="!check net" # net for npm case $CARCH in # loongarch64: 2 tests failed on the builder From 2fb7a3cd257d7210f17a301d2f4768507698110a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:41:29 -0400 Subject: [PATCH 637/738] user/firefly-iii: disable due to FTBFS --- user/firefly-iii/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/firefly-iii/APKBUILD b/user/firefly-iii/APKBUILD index cc3f123..08f146b 100644 --- a/user/firefly-iii/APKBUILD +++ b/user/firefly-iii/APKBUILD @@ -5,7 +5,8 @@ pkgname=firefly-iii pkgver=5.7.18 pkgrel=0 pkgdesc="PHP personal finances manager" -arch="noarch" +# FTBFS +#arch="noarch" url="https://github.com/firefly-iii/firefly-iii" license="AGPL-3.0-only" options="!check" # No testsuite From ce94f901d0ee4553af3ff6ef9c01d35e9cd0f795 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:42:02 -0400 Subject: [PATCH 638/738] unmaintained/jellysub: move from user --- {user => unmaintained}/jellysub/APKBUILD | 0 {user => unmaintained}/jellysub/jellysub.conf | 0 {user => unmaintained}/jellysub/jellysub.openrc | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/jellysub/APKBUILD (100%) rename {user => unmaintained}/jellysub/jellysub.conf (100%) rename {user => unmaintained}/jellysub/jellysub.openrc (100%) diff --git a/user/jellysub/APKBUILD b/unmaintained/jellysub/APKBUILD similarity index 100% rename from user/jellysub/APKBUILD rename to unmaintained/jellysub/APKBUILD diff --git a/user/jellysub/jellysub.conf b/unmaintained/jellysub/jellysub.conf similarity index 100% rename from user/jellysub/jellysub.conf rename to unmaintained/jellysub/jellysub.conf diff --git a/user/jellysub/jellysub.openrc b/unmaintained/jellysub/jellysub.openrc similarity index 100% rename from user/jellysub/jellysub.openrc rename to unmaintained/jellysub/jellysub.openrc From 72e6999c8715ab6018e2c82942c427eeec464765 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 09:56:52 -0400 Subject: [PATCH 639/738] user/papermc: upgrade to 1.21.4 --- user/papermc/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD index 23930f7..ae99e5b 100644 --- a/user/papermc/APKBUILD +++ b/user/papermc/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=papermc -pkgver=1.21.3 +pkgver=1.21.4 _gittag=${pkgver/.0} pkgrel=0 pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" @@ -43,7 +43,7 @@ package() { chmod g+ws "$pkgdir"/var/lib/$pkgname } sha512sums=" -630c0fafd53082bec3992234f7422c4714c30ad0fac240c6dc80091fc7d49b57bc2cb7365366ac015d2a9217c4fd561f0649f738cb0d90ea7a7b6355f9839ff6 papermc-1.21.3.tar.zst +5e815c4ee4f9d99ecb173d2b81131d0531359f1d2d48dee429476a7b39c37140fe2085d9a657435e347ca1bc5930402bac1a533692cd8387811b2577384c827b papermc-1.21.4.tar.zst c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd 9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf 943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh From 762159a7e939d675db447a4895db255217508b32 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 10:14:42 -0400 Subject: [PATCH 640/738] user/papermc-plugin-worledit: upgrade to 7.3.13 --- user/papermc-plugin-worldedit/APKBUILD | 12 ++++++++---- .../papermc-fix-build.patch | 13 +++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 user/papermc-plugin-worldedit/papermc-fix-build.patch diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD index 96e0215..6949ab5 100644 --- a/user/papermc-plugin-worldedit/APKBUILD +++ b/user/papermc-plugin-worldedit/APKBUILD @@ -1,16 +1,19 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=papermc-plugin-worldedit -pkgver=7.3.9 +pkgver=7.3.13 _pkgver=$pkgver -pkgrel=1 +pkgrel=0 pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" arch='noarch !aarch64' url="https://github.com/EngineHub/WorldEdit" license="GPL-3.0" depends="papermc>=1.13.2" makedepends="openjdk21-jdk" -source="$pkgname-$pkgver.tar.gz::https://github.com/EngineHub/WorldEdit/archive/refs/tags/$pkgver.tar.gz" +source=" + $pkgname-$pkgver.tar.gz::https://github.com/EngineHub/WorldEdit/archive/refs/tags/$pkgver.tar.gz + papermc-fix-build.patch + " builddir="$srcdir"/WorldEdit-$pkgver build() { @@ -25,5 +28,6 @@ package() { install -Dm644 "$builddir"/worldedit-bukkit/build/libs/worldedit-bukkit-$pkgver-dist.jar "$pkgdir/var/lib/papermc/plugins/WorldEdit.jar" } sha512sums=" -35eb83dfcd192884a86f9bec3cbe586af6141b8c10461937b2ef112bfb4d64f5f7c6e950108a7893dc5b1054f1d0206f74ec6b4702481c0da69bf89627dbfb06 papermc-plugin-worldedit-7.3.9.tar.gz +dbea1e2ff5b41ad25f8ddc5ae5456f9b7337d406cb4791fb3718b38bfbb94b0d8ba9fc7e2cd5c0d94c3c1845a35e68a87d89c0f147f9d988dd3fc3e375144198 papermc-plugin-worldedit-7.3.13.tar.gz +e36ac06da26e8817c7c666c972a09cbdba0fca8e0a511e53c5650d46ef1ee9a44d783900ed0afb39faab5dc718bf68e26d8c9b310ceedffa5d11bd15880aaa88 papermc-fix-build.patch " diff --git a/user/papermc-plugin-worldedit/papermc-fix-build.patch b/user/papermc-plugin-worldedit/papermc-fix-build.patch new file mode 100644 index 0000000..95710e9 --- /dev/null +++ b/user/papermc-plugin-worldedit/papermc-fix-build.patch @@ -0,0 +1,13 @@ +diff --git a/gradle/libs.versions.toml.orig b/gradle/libs.versions.toml +index 5f0e7da..ff0569b 100644 +--- a/gradle/libs.versions.toml.orig ++++ b/gradle/libs.versions.toml +@@ -77,7 +77,7 @@ mockito-junit-jupiter.module = "org.mockito:mockito-junit-jupiter" + commonsCli = "commons-cli:commons-cli:1.4" + + # https://repo.papermc.io/service/rest/repository/browse/maven-public/io/papermc/paper/paper-api/ +-paperApi = "io.papermc.paper:paper-api:1.21.5-R0.1-20250503.204036-71" ++paperApi = "io.papermc.paper:paper-api:1.21.5-R0.1-20250520.110141-3" + paperLib = "io.papermc:paperlib:1.0.8" + + dummypermscompat = "com.sk89q:dummypermscompat:1.10" From 352e518f8e22fef85069800fe6e59ba76e26b930 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 10:20:39 -0400 Subject: [PATCH 641/738] unmaintained/firefly-iii: move from user --- {user => unmaintained}/firefly-iii/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/firefly-iii/APKBUILD (100%) diff --git a/user/firefly-iii/APKBUILD b/unmaintained/firefly-iii/APKBUILD similarity index 100% rename from user/firefly-iii/APKBUILD rename to unmaintained/firefly-iii/APKBUILD From 5503c80497c863267ede2b8b01790dcdfc2d326e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 10:36:08 -0400 Subject: [PATCH 642/738] unmaintained/calibre-web: move from user --- {user => unmaintained}/calibre-web/APKBUILD | 0 {user => unmaintained}/calibre-web/calibre-web.conf | 0 {user => unmaintained}/calibre-web/calibre-web.initd | 0 {user => unmaintained}/calibre-web/calibre-web.service | 0 {user => unmaintained}/calibre-web/calibre-web.sysusers | 0 {user => unmaintained}/calibre-web/calibre-web.tmpfiles | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/calibre-web/APKBUILD (100%) rename {user => unmaintained}/calibre-web/calibre-web.conf (100%) rename {user => unmaintained}/calibre-web/calibre-web.initd (100%) rename {user => unmaintained}/calibre-web/calibre-web.service (100%) rename {user => unmaintained}/calibre-web/calibre-web.sysusers (100%) rename {user => unmaintained}/calibre-web/calibre-web.tmpfiles (100%) diff --git a/user/calibre-web/APKBUILD b/unmaintained/calibre-web/APKBUILD similarity index 100% rename from user/calibre-web/APKBUILD rename to unmaintained/calibre-web/APKBUILD diff --git a/user/calibre-web/calibre-web.conf b/unmaintained/calibre-web/calibre-web.conf similarity index 100% rename from user/calibre-web/calibre-web.conf rename to unmaintained/calibre-web/calibre-web.conf diff --git a/user/calibre-web/calibre-web.initd b/unmaintained/calibre-web/calibre-web.initd similarity index 100% rename from user/calibre-web/calibre-web.initd rename to unmaintained/calibre-web/calibre-web.initd diff --git a/user/calibre-web/calibre-web.service b/unmaintained/calibre-web/calibre-web.service similarity index 100% rename from user/calibre-web/calibre-web.service rename to unmaintained/calibre-web/calibre-web.service diff --git a/user/calibre-web/calibre-web.sysusers b/unmaintained/calibre-web/calibre-web.sysusers similarity index 100% rename from user/calibre-web/calibre-web.sysusers rename to unmaintained/calibre-web/calibre-web.sysusers diff --git a/user/calibre-web/calibre-web.tmpfiles b/unmaintained/calibre-web/calibre-web.tmpfiles similarity index 100% rename from user/calibre-web/calibre-web.tmpfiles rename to unmaintained/calibre-web/calibre-web.tmpfiles From dfe9556b9d20f5d4581c5d279fd73309832d229f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 10:37:31 -0400 Subject: [PATCH 643/738] unmaintained/paperless-ngx: move from user --- .../1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch | 0 {user => unmaintained}/paperless-ngx/APKBUILD | 0 {user => unmaintained}/paperless-ngx/paperless-consumer.openrc | 0 {user => unmaintained}/paperless-ngx/paperless-ngx.post-install | 0 {user => unmaintained}/paperless-ngx/paperless-ngx.post-upgrade | 0 {user => unmaintained}/paperless-ngx/paperless-ngx.pre-install | 0 {user => unmaintained}/paperless-ngx/paperless-scheduler.openrc | 0 {user => unmaintained}/paperless-ngx/paperless-task-queue.openrc | 0 {user => unmaintained}/paperless-ngx/paperless-webserver.openrc | 0 {user => unmaintained}/paperless-ngx/paperless.conf | 0 10 files changed, 0 insertions(+), 0 deletions(-) rename {user => unmaintained}/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch (100%) rename {user => unmaintained}/paperless-ngx/APKBUILD (100%) rename {user => unmaintained}/paperless-ngx/paperless-consumer.openrc (100%) rename {user => unmaintained}/paperless-ngx/paperless-ngx.post-install (100%) rename {user => unmaintained}/paperless-ngx/paperless-ngx.post-upgrade (100%) rename {user => unmaintained}/paperless-ngx/paperless-ngx.pre-install (100%) rename {user => unmaintained}/paperless-ngx/paperless-scheduler.openrc (100%) rename {user => unmaintained}/paperless-ngx/paperless-task-queue.openrc (100%) rename {user => unmaintained}/paperless-ngx/paperless-webserver.openrc (100%) rename {user => unmaintained}/paperless-ngx/paperless.conf (100%) diff --git a/user/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch b/unmaintained/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch similarity index 100% rename from user/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch rename to unmaintained/paperless-ngx/1746_add-OpenID-Connect-SSO-support-via-django-allauth.patch diff --git a/user/paperless-ngx/APKBUILD b/unmaintained/paperless-ngx/APKBUILD similarity index 100% rename from user/paperless-ngx/APKBUILD rename to unmaintained/paperless-ngx/APKBUILD diff --git a/user/paperless-ngx/paperless-consumer.openrc b/unmaintained/paperless-ngx/paperless-consumer.openrc similarity index 100% rename from user/paperless-ngx/paperless-consumer.openrc rename to unmaintained/paperless-ngx/paperless-consumer.openrc diff --git a/user/paperless-ngx/paperless-ngx.post-install b/unmaintained/paperless-ngx/paperless-ngx.post-install similarity index 100% rename from user/paperless-ngx/paperless-ngx.post-install rename to unmaintained/paperless-ngx/paperless-ngx.post-install diff --git a/user/paperless-ngx/paperless-ngx.post-upgrade b/unmaintained/paperless-ngx/paperless-ngx.post-upgrade similarity index 100% rename from user/paperless-ngx/paperless-ngx.post-upgrade rename to unmaintained/paperless-ngx/paperless-ngx.post-upgrade diff --git a/user/paperless-ngx/paperless-ngx.pre-install b/unmaintained/paperless-ngx/paperless-ngx.pre-install similarity index 100% rename from user/paperless-ngx/paperless-ngx.pre-install rename to unmaintained/paperless-ngx/paperless-ngx.pre-install diff --git a/user/paperless-ngx/paperless-scheduler.openrc b/unmaintained/paperless-ngx/paperless-scheduler.openrc similarity index 100% rename from user/paperless-ngx/paperless-scheduler.openrc rename to unmaintained/paperless-ngx/paperless-scheduler.openrc diff --git a/user/paperless-ngx/paperless-task-queue.openrc b/unmaintained/paperless-ngx/paperless-task-queue.openrc similarity index 100% rename from user/paperless-ngx/paperless-task-queue.openrc rename to unmaintained/paperless-ngx/paperless-task-queue.openrc diff --git a/user/paperless-ngx/paperless-webserver.openrc b/unmaintained/paperless-ngx/paperless-webserver.openrc similarity index 100% rename from user/paperless-ngx/paperless-webserver.openrc rename to unmaintained/paperless-ngx/paperless-webserver.openrc diff --git a/user/paperless-ngx/paperless.conf b/unmaintained/paperless-ngx/paperless.conf similarity index 100% rename from user/paperless-ngx/paperless.conf rename to unmaintained/paperless-ngx/paperless.conf From 106fe3e570db9b26798a9f2a69d9bca8f6a7622e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 11:18:17 -0400 Subject: [PATCH 644/738] user/papermc-plugin-essentialsx: upgrade to 2.21.1 --- user/papermc-plugin-essentialsx/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/user/papermc-plugin-essentialsx/APKBUILD b/user/papermc-plugin-essentialsx/APKBUILD index a815212..6abab9f 100644 --- a/user/papermc-plugin-essentialsx/APKBUILD +++ b/user/papermc-plugin-essentialsx/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=papermc-plugin-essentialsx -pkgver=2.21.0_pre151 -_gittag=f2af9528b0f99f2ff121dda2607e51d391a2a8bf +pkgver=2.21.1 +_gittag=$pkgver pkgrel=0 pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." arch='noarch' @@ -75,5 +75,5 @@ xmpp() { } sha512sums=" -5fabf6b2091f7182ff23ca02e2f93ff22527668d55bbf60977ad414881c201bdc4608fe3618ca0d1312beb8fe8768f36cd792099817a0205f791ab2f9b212e04 papermc-plugin-essentialsx-f2af9528b0f99f2ff121dda2607e51d391a2a8bf.tar.gz +2634a909e4fced837acfd89e0972511da418a9ab3d648f4eb466688b779c7d4215aa25ed891504bc39805d292f1ebf72bb71077c0354117fdaf28ba032483262 papermc-plugin-essentialsx-2.21.1.tar.gz " From 378739e007b146c1b02befb028ecbb24f9a83180 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 11:21:16 -0400 Subject: [PATCH 645/738] user/papermc: fix jar install --- user/papermc/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD index ae99e5b..c93d3a2 100644 --- a/user/papermc/APKBUILD +++ b/user/papermc/APKBUILD @@ -31,7 +31,7 @@ package() { install -Dm644 "$srcdir"/$pkgname.conf "$pkgdir"/etc/conf.d/$pkgname install -Dm755 "$srcdir"/$pkgname.sh "$pkgdir"/usr/bin/$pkgname install -Dm755 "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname - install -Dm644 "$builddir"/build/libs/paper*.jar "$pkgdir"/var/lib/$pkgname/$pkgver.jar + install -Dm644 "$builddir"/paper-server/build/libs/paper-server*.jar "$pkgdir"/var/lib/$pkgname/$pkgver.jar ln -s $pkgver.jar "$pkgdir"/var/lib/$pkgname/server.jar # Link the log files From f94e3afd3355b86bfa0d4e6a95d9e64417c69302 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 27 May 2025 17:31:53 -0400 Subject: [PATCH 646/738] user/looking-glass: drop due to in testing --- user/looking-glass/APKBUILD | 93 ------------------- .../looking-glass.post-deinstall | 2 - user/looking-glass/missing-includes.patch | 92 ------------------ .../module_1075-fix-build-linux64.patch | 25 ----- .../module_1124-fix-build-linux610.patch | 23 ----- user/looking-glass/obs-plugins-lib.patch | 12 --- user/looking-glass/werror.patch | 24 ----- 7 files changed, 271 deletions(-) delete mode 100644 user/looking-glass/APKBUILD delete mode 100644 user/looking-glass/looking-glass.post-deinstall delete mode 100644 user/looking-glass/missing-includes.patch delete mode 100644 user/looking-glass/module_1075-fix-build-linux64.patch delete mode 100644 user/looking-glass/module_1124-fix-build-linux610.patch delete mode 100644 user/looking-glass/obs-plugins-lib.patch delete mode 100644 user/looking-glass/werror.patch diff --git a/user/looking-glass/APKBUILD b/user/looking-glass/APKBUILD deleted file mode 100644 index fc66935..0000000 --- a/user/looking-glass/APKBUILD +++ /dev/null @@ -1,93 +0,0 @@ -# Contributor: Rogério da Silva Yokomizo -# Contributor: Antoine Martin (ayakael) -# Maintainer: Rogério da Silva Yokomizo -pkgname=looking-glass -_gittag=b7_git20240607 -pkgver=7b_git20240607 -pkgrel=0 -pkgdesc="Allows the use of a KVM configured for VGA PCI Pass-through without an attached physical monitor, keyboard or mouse" -url="https://looking-glass.io/" -arch="x86_64" -license="GPL-2.0-or-later" -makedepends=" - cmake - fontconfig-dev - libsamplerate-dev - libx11-dev - libxcursor-dev - libxfixes-dev - libxi-dev - libxinerama-dev - libxkbcommon-dev - libxpresent-dev - libxscrnsaver-dev - nettle-dev - obs-studio-dev - pipewire-dev - pulseaudio-dev - samurai - spice-dev - wayland-dev - wayland-protocols - " -source="$pkgname-$_gittag.tar.gz::https://lab.ilot.io/mirrors/looking-glass/-/releases/$_gittag/downloads/tarball/looking-glass-$_gittag.tar.gz - missing-includes.patch - obs-plugins-lib.patch - werror.patch - " -subpackages="$pkgname-obs $pkgname-module" -builddir="$srcdir/$pkgname-$_gittag" -options="!check" # There are no tests nor --version. - -build() { - cmake -S client -B build-client -G Ninja \ - -DENABLE_BACKTRACE=OFF \ - -DOPTIMIZE_FOR_NATIVE=OFF \ - -DCMAKE_INSTALL_PREFIX=/usr - - cmake -S obs -B build-obs -G Ninja \ - -DENABLE_BACKTRACE=OFF \ - -DOPTIMIZE_FOR_NATIVE=OFF \ - -DCMAKE_INSTALL_PREFIX=/usr - - cmake --build build-client - cmake --build build-obs -} - -package() { - DESTDIR="$pkgdir" cmake --install build-client - DESTDIR="$pkgdir" cmake --install build-obs -} - -module() { - pkgdesc="Looking Glass kernel module (AKMS)" - depends="akms" - install_if="looking-glass=$pkgver-r$pkgrel" - _modver=$(awk -F "=" '{if($1=="PACKAGE_VERSION"){print $2}}' src/looking-glass-B6/module/dkms.conf | tr -d '"') - - install -Dm644 "$builddir"/module/Makefile "$subpkgdir"/usr/src/looking-glass/Makefile - install -Dm644 "$builddir"/module/kvmfr* "$subpkgdir"/usr/src/looking-glass/. - - cat ->> "$subpkgdir"/usr/src/looking-glass/AKMBUILD < "$subpkgdir"/etc/udev/rules.d/99-kvmfr.rules - -} - -obs() { - pkgdesc="$pkgdesc (obs plugin)" - amove usr/lib/obs-plugins -} - -sha512sums=" -959f49c91dc7bb06dfae890547bfbd1c02bd4154f4ba1c898a12d15a3579658d65fcb9fc4b951c04180e17fc9151e551858e0fb60f20e3f1a72d19b86c7dc3db looking-glass-b7_git20240607.tar.gz -6d2449764a8316dd3c1b5cc0aa552671068f89ed2f95297f3c5256af8529b93e5ec7af8f979bd2e744fd09b11063e8a93f3ed26284f0e49294e467ca10f6e772 missing-includes.patch -33c5463412a16691f47d7833ebf81d7cf20c560a077dca141dcc9f02a5d6dfb676e483835f39a06012b114be9f509dda4614fe253bb1c72a0142e82dc265a5ca obs-plugins-lib.patch -b952d1fd284aed15bcfe7990f160dec3a4565fb5833ce339920f62de6bb46fbc09265a0a79fe80d212eecc6a1813614e1e193a8846c37e2afd18431dc3a89ca4 werror.patch -" diff --git a/user/looking-glass/looking-glass.post-deinstall b/user/looking-glass/looking-glass.post-deinstall deleted file mode 100644 index f193065..0000000 --- a/user/looking-glass/looking-glass.post-deinstall +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -exec /usr/sbin/akms uninstall kvmfr diff --git a/user/looking-glass/missing-includes.patch b/user/looking-glass/missing-includes.patch deleted file mode 100644 index 635752c..0000000 --- a/user/looking-glass/missing-includes.patch +++ /dev/null @@ -1,92 +0,0 @@ ---- a/repos/PureSpice/src/agent.c -+++ b/repos/PureSpice/src/agent.c -@@ -31,6 +31,7 @@ Place, Suite 330, Boston, MA 02111-1307 - #include - #include - #include -+#include - #include - - #include ---- a/repos/PureSpice/src/channel_cursor.c -+++ b/repos/PureSpice/src/channel_cursor.c -@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 - #include "channel_cursor.h" - - #include -+#include - - #include "messages.h" - ---- a/repos/PureSpice/src/channel_display.c -+++ b/repos/PureSpice/src/channel_display.c -@@ -19,6 +19,7 @@ Place, Suite 330, Boston, MA 02111-1307 - - #include "purespice.h" - #include -+#include - - #include "ps.h" - #include "log.h" ---- a/repos/PureSpice/src/channel_inputs.c -+++ b/repos/PureSpice/src/channel_inputs.c -@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 - #include "messages.h" - - #include -+#include - - const SpiceLinkHeader * channelInputs_getConnectPacket(void) - { ---- a/repos/PureSpice/src/channel_main.c -+++ b/repos/PureSpice/src/channel_main.c -@@ -24,6 +24,7 @@ Place, Suite 330, Boston, MA 02111-1307 - #include "messages.h" - - #include -+#include - - struct ChannelMain - { ---- a/repos/PureSpice/src/channel_playback.c -+++ b/repos/PureSpice/src/channel_playback.c -@@ -26,6 +26,8 @@ Place, Suite 330, Boston, MA 02111-1307 - - #include "messages.h" - -+#include -+ - const SpiceLinkHeader * channelPlayback_getConnectPacket(void) - { - typedef struct ---- a/repos/PureSpice/src/channel_record.c -+++ b/repos/PureSpice/src/channel_record.c -@@ -26,6 +26,8 @@ Place, Suite 330, Boston, MA 02111-1307 - - #include "messages.h" - -+#include -+ - const SpiceLinkHeader * channelRecord_getConnectPacket(void) - { - typedef struct ---- a/repos/PureSpice/src/log.c -+++ b/repos/PureSpice/src/log.c -@@ -25,6 +25,7 @@ Place, Suite 330, Boston, MA 02111-1307 - - #include - #include -+#include - - static void log_stdout(const char * file, unsigned int line, - const char * function, const char * format, ...) ---- a/repos/PureSpice/src/ps.c -+++ b/repos/PureSpice/src/ps.c -@@ -37,6 +37,7 @@ Place, Suite 330, Boston, MA 02111-1307 - #include - #include - #include -+#include - #include - #include - diff --git a/user/looking-glass/module_1075-fix-build-linux64.patch b/user/looking-glass/module_1075-fix-build-linux64.patch deleted file mode 100644 index bf594b5..0000000 --- a/user/looking-glass/module_1075-fix-build-linux64.patch +++ /dev/null @@ -1,25 +0,0 @@ -From e32b292cc1ba089db6ed28e4d5eb0fc8cc4c2235 Mon Sep 17 00:00:00 2001 -From: esi -Date: Fri, 12 May 2023 16:28:01 -0400 -Subject: [PATCH] [module] Fix build on Linux 6.4 (fixes #1075) - ---- - module/dkms.conf | 2 +- - module/kvmfr.c | 4 ++++ - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/module/kvmfr.c b/module/kvmfr.c -index ca0cca685..c711e000e 100644 ---- a/module/kvmfr.c -+++ b/module/kvmfr.c -@@ -539,7 +539,11 @@ static int __init kvmfr_module_init(void) - if (kvmfr->major < 0) - goto out_free; - -+#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 4, 0) - kvmfr->pClass = class_create(THIS_MODULE, KVMFR_DEV_NAME); -+#else -+ kvmfr->pClass = class_create(KVMFR_DEV_NAME); -+#endif - if (IS_ERR(kvmfr->pClass)) - goto out_unreg; diff --git a/user/looking-glass/module_1124-fix-build-linux610.patch b/user/looking-glass/module_1124-fix-build-linux610.patch deleted file mode 100644 index c194c78..0000000 --- a/user/looking-glass/module_1124-fix-build-linux610.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 7305ce36af211220419eeab302ff28793d515df2 Mon Sep 17 00:00:00 2001 -From: Geoffrey McRae -Date: Fri, 7 Jun 2024 19:01:38 +1000 -Subject: [PATCH] [module] fix build on linux 6.10 - -Fixes #1124 - Thanks @pongo1231 ---- - module/dkms.conf | 2 +- - module/kvmfr.c | 1 + - 2 files changed, 2 insertions(+), 1 deletion(-) - -diff --git a/module/kvmfr.c b/module/kvmfr.c -index b5acd18de..c99a5d79c 100644 ---- a/module/kvmfr.c -+++ b/module/kvmfr.c -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - - #include - diff --git a/user/looking-glass/obs-plugins-lib.patch b/user/looking-glass/obs-plugins-lib.patch deleted file mode 100644 index 1390adb..0000000 --- a/user/looking-glass/obs-plugins-lib.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- a/obs/CMakeLists.txt -+++ b/obs/CMakeLists.txt -@@ -84,7 +84,8 @@ target_link_libraries(looking-glass-obs - ) - - install(TARGETS looking-glass-obs -- LIBRARY DESTINATION ${OBS_PLUGIN_PREFIX}/${CMAKE_PROJECT_NAME}/bin/${OBS_PLUGIN_DIR} -+ # LIBRARY DESTINATION ${OBS_PLUGIN_PREFIX}/${CMAKE_PROJECT_NAME}/bin/${OBS_PLUGIN_DIR} -+ LIBRARY DESTINATION /usr/lib/obs-plugins - ) - - feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES) diff --git a/user/looking-glass/werror.patch b/user/looking-glass/werror.patch deleted file mode 100644 index 436419f..0000000 --- a/user/looking-glass/werror.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt -index 836f814..7047365 100644 ---- a/client/CMakeLists.txt -+++ b/client/CMakeLists.txt -@@ -68,7 +68,6 @@ add_compile_options( - "-Wno-unused-parameter" - "$<$:-Wstrict-prototypes>" - "$<$:-Wimplicit-fallthrough=2>" -- "-Werror" - "-Wfatal-errors" - "-ffast-math" - "-fdata-sections" -diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt -index 0491e65..60b37ff 100644 ---- a/obs/CMakeLists.txt -+++ b/obs/CMakeLists.txt -@@ -18,7 +18,6 @@ add_feature_info(ENABLE_BACKTRACE ENABLE_BACKTRACE "Backtrace support.") - - add_compile_options( - "-Wall" -- "-Werror" - "-Wfatal-errors" - "-ffast-math" - "-fdata-sections" From fd63d1544f87fd0f122ce073022e98e851eeaa21 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 28 May 2025 15:12:39 -0400 Subject: [PATCH 647/738] ci: add cross-gen workflow --- .forgejo/bin/build.sh | 2 +- .forgejo/bin/deploy.sh | 2 +- .forgejo/bin/generate-cross.sh | 54 ++++++++++++++++++++++++ .forgejo/workflows/build-aarch64.yaml | 1 + .forgejo/workflows/build-cross.yaml | 59 +++++++++++++++++++++++++++ .forgejo/workflows/build-x86_64.yaml | 1 + 6 files changed, 117 insertions(+), 2 deletions(-) create mode 100755 .forgejo/bin/generate-cross.sh create mode 100644 .forgejo/workflows/build-cross.yaml diff --git a/.forgejo/bin/build.sh b/.forgejo/bin/build.sh index ad5e30c..445929f 100755 --- a/.forgejo/bin/build.sh +++ b/.forgejo/bin/build.sh @@ -201,7 +201,7 @@ setup_system || die "Failed to setup system" # git no longer allows to execute in repositories owned by different users doas chown -R buildozer: . -fetch_flags="-qn" +fetch_flags="-qnu" debugging && fetch_flags="-v" git fetch $fetch_flags "$CI_MERGE_REQUEST_PROJECT_URL" \ diff --git a/.forgejo/bin/deploy.sh b/.forgejo/bin/deploy.sh index 3138b69..57afd32 100755 --- a/.forgejo/bin/deploy.sh +++ b/.forgejo/bin/deploy.sh @@ -4,7 +4,7 @@ set -eu -o pipefail readonly REPOS="backports user" -readonly BASEBRANCH=$GITHUB_BASE_REF +readonly BASEBRANCH=$CI_MERGE_REQUEST_TARGET_BRANCH_NAME readonly TARGET_REPO=$CI_ALPINE_REPO apkgs=$(find package -type f -name "*.apk") diff --git a/.forgejo/bin/generate-cross.sh b/.forgejo/bin/generate-cross.sh new file mode 100755 index 0000000..878b25f --- /dev/null +++ b/.forgejo/bin/generate-cross.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +TARGET_RELEASE=$1 +shift +TARGET_ARCH=$@ +CURRENT_ARCH=$(cat /etc/apk/arch) + +if [ -z "$TARGET_RELEASE" ]; then + echo ">>> No target release specified, assumming edge" + TARGET_RELEASE=edge +fi +[[ "$TARGET_RELEASE" == "edge" ]] && TARGET_BRANCH=master || TARGET_BRANCH="${TARGET_RELEASE/v}-stable" + +if [[ ! -d "aports-$TARGET_RELEASE" ]]; then + echo ">>> Fetching aports for $TARGET_RELEASE" + git init aports-$TARGET_RELEASE + git -C aports-$TARGET_RELEASE remote add origin https://gitlab.alpinelinux.org/alpine/aports + git -C aports-$TARGET_RELEASE fetch --depth 1 origin $TARGET_BRANCH + git -C aports-$TARGET_RELEASE checkout $TARGET_BRANCH + [[ $? -ne 0 ]] && { echo ">>> Git fetch failed, does your release exist?"; exit; } || true +fi + +if [ -z "$TARGET_ARCH" ]; then + echo ">>> No arch specified, assuming target to all arches supported by upstream for release $TARGET_RELEASE" + TARGET_ARCH=$(cat aports-$TARGET_RELEASE/scripts/mkimg.minirootfs.sh | tr -d "\t" | awk -F "=" '{if($1=="arch"){print $2}}' | tr -d \" | sed "s| $CURRENT_ARCH||") + if [ -z "$TARGET_ARCH" ]; then + echo ">>> Could not compute arches that are supported, does your release exist?" + exit + fi +fi + +. /usr/share/abuild/functions.sh + +for arch in $TARGET_ARCH; do + if [[ "$(arch_to_hostspec $arch)" == "unknown" ]]; then + echo ">>> $arch not valid arch, please chose among the following" + sed -n '/^arch_to_hostspec/,/esac$/ {s/esac//;p;}' /usr/share/abuild/functions.sh | sed -e '/unknown/d' -e '/arch/d' -e '/case/d' -e "/$CURRENT_ARCH/d" | awk '{print $1}' | tr -d ')' + exit + fi +done + +echo ">>> Targetting $TARGET_ARCH for cross generation" + +( + cd aports-$TARGET_RELEASE/scripts + # this stops bootstrap from building the whole base system + sed -i 's|^msg "Cross building base system"|exit; msg "Cross building base system"|' bootstrap.sh + for arch in $TARGET_ARCH; do + echo ">>> Building cross-compilers for $arch" + ./bootstrap.sh $arch + [[ $? -ne 0 ]] && { echo ">>> Cross-build failure"; exit; } || true + done + echo ">>> Building done" +) diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index 0b6d800..0ff5e7c 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -40,6 +40,7 @@ jobs: image: alpine:latest env: CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} steps: diff --git a/.forgejo/workflows/build-cross.yaml b/.forgejo/workflows/build-cross.yaml new file mode 100644 index 0000000..6d770f7 --- /dev/null +++ b/.forgejo/workflows/build-cross.yaml @@ -0,0 +1,59 @@ +on: + workflow_dispatch: + inputs: + target_arch: + description: 'target arch' + required: false + type: string + +jobs: + build-cross: + runs-on: x86_64 + container: + image: alpinelinux/alpine-gitlab-ci:latest + env: + CI_PROJECT_DIR: ${{ github.workspace }} + CI_DEBUG_BUILD: ${{ runner.debug }} + CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.ref_name }} + steps: + - name: Environment setup + run: | + doas apk upgrade -a + doas apk add nodejs git patch curl bash + cd /etc/apk/keys + doas curl -JO https://ayakael.net/api/packages/forge/alpine/key + - name: Repo pull + uses: actions/checkout@v4 + with: + fetch-depth: 500 + - name: Package build + run: | + ${{ github.workspace }}/.forgejo/bin/build.sh + ${{ github.workspace }}/.forgejo/bin/generate-cross.sh ${{ github.ref_name }} ${{ inputs.target_arch }} + mv -v /home/buildozer/packages/main ${{ github.workspace }}/packages/cross + - name: Package upload + uses: forgejo/upload-artifact@v3 + with: + name: package + path: packages + + deploy-cross: + needs: [build-cross] + runs-on: x86_64 + container: + image: alpine:latest + env: + CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.ref_name }} + FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} + FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + steps: + - name: Setting up environment + run: apk add nodejs curl findutils git gawk + - name: Repo pull + uses: actions/checkout@v4 + - name: Package download + uses: forgejo/download-artifact@v3 + - name: Package deployment + run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index 90c516e..ad7abb3 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -40,6 +40,7 @@ jobs: image: alpine:latest env: CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} steps: From 614aa49d499be572a2d34cfc505f58bddf37fb41 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 28 May 2025 15:43:04 -0400 Subject: [PATCH 648/738] ci: add clear-repo workflow --- .forgejo/bin/clear-repo.sh | 21 +++++++++++++-------- .forgejo/workflows/clear-repo.yml | 25 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 .forgejo/workflows/clear-repo.yml diff --git a/.forgejo/bin/clear-repo.sh b/.forgejo/bin/clear-repo.sh index 14110ea..486321b 100755 --- a/.forgejo/bin/clear-repo.sh +++ b/.forgejo/bin/clear-repo.sh @@ -1,17 +1,22 @@ #!/bin/sh TARGET_REPO=$1 -ARCH=$2 +ARCH="x86 x86_64 armhf armv7 aarch64 ppc64le s390x mips64 riscv64 loongarch64" +for arch in $ARCH; do + # check if repo exists + wget --spider $TARGET_REPO/$arch/APKINDEX.tar.gz -o /dev/null || continue + echo ">>> Clearing repo $TARGET_REPO/$arch" -curl --silent $TARGET_REPO/$ARCH/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX + curl --silent $TARGET_REPO/$arch/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX -pkgs=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) + pkgs=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) -for pkg in $pkgs; do - pkgvers=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}') - for pkgver in $pkgvers; do - echo "Deleting $pkg-$pkgver of arch $ARCH from $TARGET_REPO" - curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$ARCH/$pkg-$pkgver.apk + for pkg in $pkgs; do + pkgvers=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}') + for pkgver in $pkgvers; do + echo "Deleting $pkg-$pkgver of arch $arch from $TARGET_REPO" + curl -s --user $FORGE_REPO_USER:$FORGE_REPO_TOKEN -X DELETE $TARGET_REPO/$arch/$pkg-$pkgver.apk + done done done diff --git a/.forgejo/workflows/clear-repo.yml b/.forgejo/workflows/clear-repo.yml new file mode 100644 index 0000000..f60f5e7 --- /dev/null +++ b/.forgejo/workflows/clear-repo.yml @@ -0,0 +1,25 @@ +on: + workflow_dispatch: + inputs: + target_repo: + description: 'target repo' + default: 'edge/user' + required: true + type: string + +jobs: + clear-repo: + runs-on: x86_64 + container: + image: alpine:latest + env: + TARGET_REPO: 'https://ayakael.net/api/packages/forge/alpine/${{ inputs.target_repo }}' + FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} + FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + steps: + - name: Setting up environment + run: apk add nodejs curl findutils git gawk + - name: Repo pull + uses: actions/checkout@v4 + - name: Clear repo + run: ${{ github.workspace }}/.forgejo/bin/clear-repo.sh $TARGET_REPO From 97a6234e8eabfc97abb03d2550c89d2ffee40b45 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 28 May 2025 16:01:14 -0400 Subject: [PATCH 649/738] backports/electron: upgrade to 35.5.0 --- backports/electron/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index c95f43a..92270b8 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,7 +1,7 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=35.4.0 +pkgver=35.5.0 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 _chromium=134.0.6998.205 @@ -551,7 +551,7 @@ lang() { } sha512sums=" -30a116328f9a5af05b16cf85e31672407c51aef895b29441220f439d66af947272daa8e2ac88d9e4b8f7a9e0bb883932c36d2f1642fd18c5da885931c1c97fe0 electron-v35.4.0-134.0.6998.205.tar.zst +a30c115f17f9811347f8713fa604b56244e39facbbab7b6b82cbc3049ed12b429b06f2faafa8a48dd727b655753848d099ba6720fae15c9bb00e6a427dc2758e electron-v35.5.0-134.0.6998.205.tar.zst c1857b5d6975650f915f3db552666f521822b857e39958ccfb54129f3878f272deaafc3dd446bc8441a5e84f075791feeeb62841b74bb555d8c546bfe231d164 copium-134.0.tar.gz 29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch d9cc4a37a0311d23ae315a8d8124f8dbf60db8cc4a3943818638174b20387f1d770d00871f6608957b246ad956abca43c22ea0b072724287f2947e1909e47323 compiler.patch From bff91156ded7cc619738fa56f041dae98262149d Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 29 May 2025 11:18:33 -0400 Subject: [PATCH 650/738] ci: add looking-glass special case to check_ver --- .forgejo/bin/check_ver.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 3a0684e..107aec2 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -59,6 +59,9 @@ for pkg in $owned_by_you; do # special cases where package is not semantic case $pkg in + # release-monitoring omits the extra B, while we keep it but put it after the version no. + looking-glass) upstream_version="${upstream_version/b}";; + # we want to track both Firefox security upgrades + Zotero upgrades zotero) commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') downstream_fx_ver=$(curl --fail -X GET -s "https://gitlab.alpinelinux.org/alpine/aports/-/raw/$commit/community/zotero/APKBUILD" | awk -F '=' '{if($1=="_fxver"){print $2}}') @@ -69,8 +72,11 @@ for pkg in $owned_by_you; do fi upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) ;; + # aports omits the -beta part of the version freetube) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].version' | sed "s|-beta||");; + # we only track x.x.1xx feature branches of SDK and stage0 dotnet*sdk|dotnet*stage0) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | sed 's|-.*||' | head -n1);; + # we want to track both current major version and upstream latest electron) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/projects/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_versions' | jq -r ".[] | match(\"${downstream_version/.*}.*\").string" | head -n 1) latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/v2/packages/?name=$pkg&distribution=Alpine" | jq -r '.items.[].stable_version' ) @@ -81,7 +87,8 @@ for pkg in $owned_by_you; do pkg="$pkg(${upstream_version/.*})" fi ;; - arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n1);; + # we want to track LTS rather than latest + arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);; *) # continues when package version scheme is not semantic, but minor_only or fix_only is set if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then From 3f1fd192e5f54b96cfad8d92ad241c417dabd7da Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 31 May 2025 12:35:02 -0400 Subject: [PATCH 651/738] backports/{coin,libmedc,py3-pivy,soqt,freecad}: drop due to in community --- backports/coin/APKBUILD | 36 ------- backports/coin/TestSuitePatch.patch | 11 --- backports/freecad/APKBUILD | 80 --------------- backports/freecad/no-execinfo.patch | 54 ---------- backports/libmedc/APKBUILD | 59 ----------- backports/libmedc/cmake-config-dir.patch | 11 --- backports/libmedc/hdf5-1.14.patch | 119 ----------------------- backports/libmedc/med-py3.13.patch | 26 ----- backports/libmedc/med-swig-4.3.0.patch | 59 ----------- backports/py3-pivy/APKBUILD | 37 ------- backports/soqt/APKBUILD | 31 ------ 11 files changed, 523 deletions(-) delete mode 100644 backports/coin/APKBUILD delete mode 100644 backports/coin/TestSuitePatch.patch delete mode 100644 backports/freecad/APKBUILD delete mode 100644 backports/freecad/no-execinfo.patch delete mode 100644 backports/libmedc/APKBUILD delete mode 100644 backports/libmedc/cmake-config-dir.patch delete mode 100644 backports/libmedc/hdf5-1.14.patch delete mode 100644 backports/libmedc/med-py3.13.patch delete mode 100644 backports/libmedc/med-swig-4.3.0.patch delete mode 100644 backports/py3-pivy/APKBUILD delete mode 100644 backports/soqt/APKBUILD diff --git a/backports/coin/APKBUILD b/backports/coin/APKBUILD deleted file mode 100644 index e6068c3..0000000 --- a/backports/coin/APKBUILD +++ /dev/null @@ -1,36 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: Antoine Martin (ayakael) -pkgname=coin -pkgver=4.0.3 -pkgrel=0 -pkgdesc="OpenGL OpenInventor compatible graphics library" -url="https://github.com/coin3d/coin" -license="BSD-3-Clause" -arch="all" -makedepends="boost-dev cmake glu-dev graphviz samurai" -subpackages="$pkgname-dev" -source="https://github.com/coin3d/coin/releases/download/v$pkgver/coin-$pkgver-src.tar.gz - TestSuitePatch.patch - " -builddir="$srcdir/coin" - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCOIN_BUILD_TESTS=ON - cmake --build build -} - -check() { - cmake --build build --target test -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -b661bf2124b0de1b46e76a6699b0975abb3aed4dc9019bf32531c535179dc84a90fe4e19def6f6cda7b175470636040d0e58812d532198cf207296d37c539915 coin-4.0.3-src.tar.gz -aab464244b13371badf0878e5bfbcce859a42756cf8c7657d1480318aa291d296eac2741219c346bae056f761c5f46857f8fd1ec1c4129f86bc10236d3869deb TestSuitePatch.patch -" diff --git a/backports/coin/TestSuitePatch.patch b/backports/coin/TestSuitePatch.patch deleted file mode 100644 index ce484e5..0000000 --- a/backports/coin/TestSuitePatch.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./testsuite/TestSuiteUtils.cpp -+++ ./testsuite/TestSuiteUtils.cpp -@@ -39,7 +39,7 @@ - #elif defined(_WIN32) - #define USE_WIN32 - #else //_WIN32 --#error Unknown system -+#define USE_POSIX - #endif //POSIX - - #include diff --git a/backports/freecad/APKBUILD b/backports/freecad/APKBUILD deleted file mode 100644 index 7b99447..0000000 --- a/backports/freecad/APKBUILD +++ /dev/null @@ -1,80 +0,0 @@ -# Contributor: Bryce Vandegrift -# Maintainer: Bryce Vandegrift -pkgname=freecad -pkgver=1.0.1 -_ondsel_ver="09d6175a2ba69e7016fcecc4f384946a2f84f92d" -_gsl_ver="2828399820ef4928cc89b65605dca5dc68efca6e" -pkgrel=0 -pkgdesc="Open-source parametric 3D modeler" -url="https://www.freecad.org/" -# armv7, armhf, and aarch64: GL_MULTISAMPLE not declared -# s390x: blocked by opencascade-dev, vtk-dev, and freeimage-dev -# riscv64: blocked by py3-pivy, py3-pyside6, pyside6-dev, and py3-shiboken6 -arch="all !aarch64 !armhf !armv7 !s390x !riscv64" -license="LGPL-2.0-or-later" -depends="py3-pivy py3-matplotlib py3-pyside6" -makedepends=" - cmake - ninja - boost-dev - doxygen - python3-dev - xerces-c-dev - opencascade-dev - glew-dev - gtest-dev - vtk-dev - libmedc-dev - eigen-dev - coin-dev - libspnav-dev - pyside6-dev - py3-shiboken6 - py3-pivy - py3-matplotlib - swig - jsoncpp-dev - freeimage-dev - qt6-qtbase-dev - qt6-qtsvg-dev - qt6-qttools-dev - yaml-cpp-dev" -subpackages="$pkgname-doc $pkgname-dev" -options="!check" -source="$pkgname-$pkgver.tar.gz::https://github.com/FreeCAD/FreeCAD/archive/$pkgver.tar.gz - OndselSolver-$_ondsel_ver.tar.gz::https://github.com/Ondsel-Development/OndselSolver/archive/$_ondsel_ver.tar.gz - GSL-$_gsl_ver.tar.gz::https://github.com/microsoft/GSL/archive/$_gsl_ver.tar.gz - no-execinfo.patch" -builddir="$srcdir/FreeCAD-$pkgver" - -prepare() { - default_prepare - - cp -r $srcdir/OndselSolver-$_ondsel_ver/* $builddir/src/3rdParty/OndselSolver - cp -r $srcdir/GSL-$_gsl_ver/* $builddir/src/3rdParty/GSL -} - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DFREECAD_QT_VERSION=6 \ - -DFREECAD_USE_EXTERNAL_PIVY=ON \ - -DBUILD_FLAT_MESH=ON \ - -DENABLE_DEVELOPER_TESTS=OFF \ - -DBUILD_TEST=OFF \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_DATAROOTDIR=/usr/share \ - -DCMAKE_INSTALL_DATADIR=/usr/share/$pkgname - ninja -C build -} - -package() { - DESTDIR="$pkgdir" ninja -C build install -} - -sha512sums=" -69a82c0af45137079b1ce184a4a3df475c005da66b4a4cab17371a1f62432b13f721e3da8b350b3ad50125c939cdfa5fed477e0605d52bd8fcee3c528931a185 freecad-1.0.1.tar.gz -7ad78da60320a686f0734da5196ce4cba49a2ff9ecf0bcd6016a56d65c8a8f7570f2898f84c2602a454bc9ccd8ac12fd137d2a952ffb7cbd15e38350fbbd3d79 OndselSolver-09d6175a2ba69e7016fcecc4f384946a2f84f92d.tar.gz -a6d731c450da91cba34c13293cc0881a842bd90268dd5ef721ae1f48752c41dc355ebea7716a6de5b49d41568e55751c46a9dd78da4cd68656bffd33e5ee448e GSL-2828399820ef4928cc89b65605dca5dc68efca6e.tar.gz -2f190118bddbf2e070519d0244eafd15ae7919f9759f925f593ce43988a7f9ab023c50bec3768404926e8cc661e829f6a55bec5e9e58c58735c050338fbcec16 no-execinfo.patch -" diff --git a/backports/freecad/no-execinfo.patch b/backports/freecad/no-execinfo.patch deleted file mode 100644 index 9443301..0000000 --- a/backports/freecad/no-execinfo.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 9cd1f5e5b90ef2e17c61719ffdb2f6c43cbae185 Mon Sep 17 00:00:00 2001 -From: Bryce Vandegrift -Date: Sun, 24 Nov 2024 18:19:39 -0500 -Subject: [PATCH] Remove dependency on execinfo.h - ---- - .../salomesmesh/src/DriverSTL/Basics_Utils.cpp | 11 ----------- - src/App/Application.cpp | 1 - - 2 files changed, 12 deletions(-) - -diff --git a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp -index 23c5083fdf..5ea06ad3f4 100644 ---- a/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp -+++ b/src/3rdParty/salomesmesh/src/DriverSTL/Basics_Utils.cpp -@@ -29,7 +29,6 @@ - #ifndef WIN32 - #include - #include --#include - #endif - - -@@ -113,16 +112,6 @@ namespace Kernel_Utils - size_t size; - char **strings; - size_t i; -- -- size = backtrace (array, 40); -- strings = backtrace_symbols (array, size); -- -- for (i = 0; i < size; i++) -- { -- std::cerr << strings[i] << std::endl; -- } -- -- free (strings); - } - #else - #if (_MSC_VER >= 1400) // Visual Studio 2005 -diff --git a/src/App/Application.cpp b/src/App/Application.cpp -index 9384790627..9155c00d25 100644 ---- a/src/App/Application.cpp -+++ b/src/App/Application.cpp -@@ -1798,7 +1798,6 @@ static void freecadNewHandler () - #endif - - #if defined(FC_OS_LINUX) --#include - #include - #include - --- -2.47.0 - diff --git a/backports/libmedc/APKBUILD b/backports/libmedc/APKBUILD deleted file mode 100644 index 0bf52fc..0000000 --- a/backports/libmedc/APKBUILD +++ /dev/null @@ -1,59 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=libmedc -pkgver=5.0.0 -pkgrel=0 -pkgdesc="Open source library for numerical simulation" -url="https://www.salome-platform.org/" -arch="all" -license="GPL-3.0-or-later" -makedepends="cmake hdf5-dev swig python3-dev samurai" -options="!check" #test suite is nonfunctional with python bindings -subpackages="$pkgname-dev $pkgname-doc $pkgname-python-pyc $pkgname-python:_py" -# Upstream disappeared: -# https://www.salome-platform.org/downloads -# https://files.salome-platform.org/Salome/other/med-4.1.1.tar.gz -# -# Using a fork on GitHub by one of the FreeCAD developers instead. -# -source=" - $pkgname-$pkgver.tar.gz::https://github.com/chennes/med/archive/refs/tags/v$pkgver.tar.gz - cmake-config-dir.patch - hdf5-1.14.patch - med-swig-4.3.0.patch - med-py3.13.patch - " -builddir="$srcdir/med-$pkgver" - -build() { - cmake -B build -G Ninja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_SKIP_RPATH=ON \ - -DMEDFILE_BUILD_PYTHON=ON \ - -DMEDFILE_BUILD_TESTS=OFF - cmake --build build -} - -check() { - cd build - HDF5_DISABLE_VERSION_CHECK=1 LD_LIBRARY_PATH="$srcdir"/build/src ctest -E '._Python' --output-on-failure -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -_py() { - pkgdesc="Python bindings for libmedc" - depends="python3" - amove usr/lib/python3* -} - -sha512sums=" -6ebb06bf403dbe32512a42179a42de3da6f264034fcc143fcb2b780c5d564527656d3ef28ebf25d7bde93a9d2a44df0d10a09d60e6f4720ba9d25719a4e30d37 libmedc-5.0.0.tar.gz -8d0f58cd67d205fbacaff0e6da76e2ee5473457b478ede13a551ebe5853c0716c7406b74c3792e1ace33a34d352fccca8dd2940f063a7c060a12529d060a991a cmake-config-dir.patch -78bfbd17a052c039244ce314d53b0d5e5e6ba6773fe7a836999bf7ddf4b6d732dfda95c58681dd9d7e9586e4d36d3dfe7cca15d45fa7d3d453aef72423fcd5c0 hdf5-1.14.patch -833187253fcbebb13f239f1f559333db6a7d3ef87c4f7b896f64970a3e553735ed01a82d6d4a368a2261e33e364b05ea3abbff3fd58c8221515aa72aa52684a7 med-swig-4.3.0.patch -6c993d924257a01b8bce1952ecc34346ab654a103f4374d514c3616cd6cdf94373b2a4d04b91a68933cd5acbc4fc54becab6bd58f32762973bbee8255c5d7a3d med-py3.13.patch -" diff --git a/backports/libmedc/cmake-config-dir.patch b/backports/libmedc/cmake-config-dir.patch deleted file mode 100644 index e1f43a4..0000000 --- a/backports/libmedc/cmake-config-dir.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -101,7 +101,7 @@ - IF(WIN32 AND NOT CYGWIN) - SET(INSTALL_CMAKE_CONFIG_DIR cmake) - ELSE() -- SET(INSTALL_CMAKE_CONFIG_DIR share/cmake/medfile-${MED_STR_VERSION}) -+ SET(INSTALL_CMAKE_CONFIG_DIR lib${LIB_SUFFIX}/cmake/medfile-${MED_STR_VERSION}) - ENDIF() - SET(INSTALL_INCLUDE_DIR include) - diff --git a/backports/libmedc/hdf5-1.14.patch b/backports/libmedc/hdf5-1.14.patch deleted file mode 100644 index 6202f74..0000000 --- a/backports/libmedc/hdf5-1.14.patch +++ /dev/null @@ -1,119 +0,0 @@ -Patch-Source: https://src.fedoraproject.org/rpms/med/raw/rawhide/f/hdf5-1.14.patch - -diff -rupN --no-dereference med-5.0.0/config/cmake_files/medMacros.cmake med-5.0.0-new/config/cmake_files/medMacros.cmake ---- med-5.0.0/config/cmake_files/medMacros.cmake 2025-01-24 00:28:04.460898497 +0100 -+++ med-5.0.0-new/config/cmake_files/medMacros.cmake 2025-01-24 00:28:04.857640862 +0100 -@@ -447,7 +447,7 @@ MACRO(MED_FIND_HDF5) - ## - ## Requires 1.12.x version - ## -- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 12 OR NOT HDF_VERSION_RELEASE_REF GREATER 0) -+ IF (HDF5_VERSION VERSION_LESS 1.12.1) - MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.12.1 are supported.") - ENDIF() - ## -diff -rupN --no-dereference med-5.0.0/src/ci/MEDfileCompatibility.c med-5.0.0-new/src/ci/MEDfileCompatibility.c ---- med-5.0.0/src/ci/MEDfileCompatibility.c 2023-06-05 14:14:44.000000000 +0200 -+++ med-5.0.0-new/src/ci/MEDfileCompatibility.c 2025-01-24 00:28:04.858068408 +0100 -@@ -116,7 +116,7 @@ MEDfileCompatibility(const char* const f - #if MED_NUM_MAJEUR != 5 - #error "Don't forget to update the test version here when you change the major version of the library !" - #endif --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" - #error "Cf. _MEDfileCreate ..." - #endif -diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDfileCreate.c med-5.0.0-new/src/hdfi/_MEDfileCreate.c ---- med-5.0.0/src/hdfi/_MEDfileCreate.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/hdfi/_MEDfileCreate.c 2025-01-24 00:28:04.858334666 +0100 -@@ -189,7 +189,7 @@ med_idt _MEDfileCreate(const char * cons - * Cette ligne est censée obliger HDF à ne pas utiliser un modèle interne différent de 1.10.z - * Un test autoconf permet de fixer un intervalle de version HDF à MED. - */ --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - -diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDfileOpen.c med-5.0.0-new/src/hdfi/_MEDfileOpen.c ---- med-5.0.0/src/hdfi/_MEDfileOpen.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/hdfi/_MEDfileOpen.c 2025-01-24 00:28:04.858574380 +0100 -@@ -113,7 +113,7 @@ med_idt _MEDfileOpen(const char * const - has been set in the group creation property list (see H5Pset_link_creation_order). - */ - --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - /* L'avantage de bloquer le modèle interne HDF5 -diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDfileOpenForImport.c med-5.0.0-new/src/hdfi/_MEDfileOpenForImport.c ---- med-5.0.0/src/hdfi/_MEDfileOpenForImport.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/hdfi/_MEDfileOpenForImport.c 2025-01-24 00:28:04.858834390 +0100 -@@ -53,7 +53,7 @@ med_idt _MEDfileOpenForImport(const cha - } - - --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - /* L'avantage de bloquer le modèle interne HDF5 -diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDmemFileOpen.c med-5.0.0-new/src/hdfi/_MEDmemFileOpen.c ---- med-5.0.0/src/hdfi/_MEDmemFileOpen.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/hdfi/_MEDmemFileOpen.c 2025-01-24 00:28:04.859128966 +0100 -@@ -439,7 +439,7 @@ med_idt _MEDmemFileOpen(const char * con - goto ERROR; - } - --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_V112, H5F_LIBVER_V112 ) ) { -@@ -506,7 +506,7 @@ med_idt _MEDmemFileOpen(const char * con - goto ERROR; - } - _fversionMM = 100*_fmajor+10*_fminor; --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( _fversionMM < 500 ) { /*100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR*/ -diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDparFileCreate.c med-5.0.0-new/src/hdfi/_MEDparFileCreate.c ---- med-5.0.0/src/hdfi/_MEDparFileCreate.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/hdfi/_MEDparFileCreate.c 2025-01-24 00:28:04.859422685 +0100 -@@ -64,7 +64,7 @@ med_idt _MEDparFileCreate(const char * c - * En HDF5-1.10.0p1 cela n'a aucun effet ! - * Un test autoconf permet de fixer un intervalle de version HDF à MED. - */ --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - -diff -rupN --no-dereference med-5.0.0/src/hdfi/_MEDparFileOpen.c med-5.0.0-new/src/hdfi/_MEDparFileOpen.c ---- med-5.0.0/src/hdfi/_MEDparFileOpen.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/hdfi/_MEDparFileOpen.c 2025-01-24 00:28:04.859632596 +0100 -@@ -86,7 +86,7 @@ med_idt _MEDparFileOpen(const char * con - } - _fversionMM = 100*_fmajor+10*_fminor; - --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - if ( _fversionMM < 500 ) { /*100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR*/ -diff -rupN --no-dereference med-5.0.0/src/misc/MEDversionedApi3C.c med-5.0.0-new/src/misc/MEDversionedApi3C.c ---- med-5.0.0/src/misc/MEDversionedApi3C.c 2023-06-05 14:14:45.000000000 +0200 -+++ med-5.0.0-new/src/misc/MEDversionedApi3C.c 2025-01-24 00:28:04.859890990 +0100 -@@ -114,7 +114,7 @@ MedFuncType _MEDversionedApi3( const cha - /* (_fversionMM <= (100*MED_NUM_MAJEUR+10*MED_NUM_MINEUR) ) */ - /* ) { */ - --#if H5_VERS_MINOR > 12 -+#if H5_VERS_MINOR > 14 - #error "Don't forget to change the compatibility version of the library !" - #endif - diff --git a/backports/libmedc/med-py3.13.patch b/backports/libmedc/med-py3.13.patch deleted file mode 100644 index 164daf0..0000000 --- a/backports/libmedc/med-py3.13.patch +++ /dev/null @@ -1,26 +0,0 @@ -Patch-Source: https://src.fedoraproject.org/rpms/med/raw/rawhide/f/med-swig-4.3.0.patch - -diff -rupN --no-dereference med-5.0.0/python/med_enumtest_typemap.i med-5.0.0-new/python/med_enumtest_typemap.i ---- med-5.0.0/python/med_enumtest_typemap.i 2023-03-07 15:20:57.000000000 +0100 -+++ med-5.0.0-new/python/med_enumtest_typemap.i 2025-01-24 00:28:04.465816239 +0100 -@@ -128,7 +128,7 @@ public: - if (pclass == NULL) printf("%s\n","Can't get class $1_basetype"); - Py_DECREF(pmod); - pargs = Py_BuildValue("(i)",*$1); -- pinst = PyEval_CallObject(pclass, pargs); -+ pinst = PyObject_CallObject(pclass, pargs); - if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); - $result=SWIG_Python_AppendOutput($result, pinst); - } -diff -rupN --no-dereference med-5.0.0/python/med_enum_typemap.i med-5.0.0-new/python/med_enum_typemap.i ---- med-5.0.0/python/med_enum_typemap.i 2023-03-07 15:20:57.000000000 +0100 -+++ med-5.0.0-new/python/med_enum_typemap.i 2025-01-24 00:28:04.466146326 +0100 -@@ -109,7 +109,7 @@ Type.__repr__= lambda self: #Type +"("+s - if (pclass == NULL) printf("%s\n","Can't get class $1_basetype"); - Py_DECREF(pmod); - pargs = Py_BuildValue("(i)",*$1); -- pinst = PyEval_CallObject(pclass, pargs); -+ pinst = PyObject_CallObject(pclass, pargs); - if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); - $result=SWIG_Python_AppendOutput($result, pinst); - } diff --git a/backports/libmedc/med-swig-4.3.0.patch b/backports/libmedc/med-swig-4.3.0.patch deleted file mode 100644 index e9dcb5e..0000000 --- a/backports/libmedc/med-swig-4.3.0.patch +++ /dev/null @@ -1,59 +0,0 @@ -Patch-Source: https://src.fedoraproject.org/rpms/med/raw/rawhide/f/med-py3.13.patch - -diff -rupN --no-dereference med-5.0.0/python/med_array_typemap.i med-5.0.0-new/python/med_array_typemap.i ---- med-5.0.0/python/med_array_typemap.i 2023-03-07 15:20:57.000000000 +0100 -+++ med-5.0.0-new/python/med_array_typemap.i 2025-01-24 00:28:05.257751237 +0100 -@@ -181,7 +181,7 @@ Type.__repr__= lambda self: #Type +"("+s - // TypeMed * const ParamName : OUT 2/4 (l'allocation Type est faite ds Python) - %typemap(freearg) TypeMed * const ParamName { - Py_INCREF(o$argnum); -- $result=SWIG_Python_AppendOutput($result, o$argnum); -+ $result=SWIG_AppendOutput($result, o$argnum); - } - // TypeMed * const (OUT) 3/4 - // pour ne pas activer un out du TypeMed * const (par sécurité) -@@ -290,7 +290,7 @@ Type.__repr__= lambda self: #Type +"("+s - // unsigned char * const : OUT 2/4 (l'allocation Type est faite ds Python) - %typemap(freearg) unsigned char * const { - Py_INCREF(o$argnum); -- $result=SWIG_Python_AppendOutput($result, o$argnum); -+ $result=SWIG_AppendOutput($result, o$argnum); - } - // unsigned char * const (OUT) 3/4 - // pour ne pas activer un out du unsigned char * const (par sécurité) -diff -rupN --no-dereference med-5.0.0/python/med_bool_typemap.i med-5.0.0-new/python/med_bool_typemap.i ---- med-5.0.0/python/med_bool_typemap.i 2023-03-07 15:20:57.000000000 +0100 -+++ med-5.0.0-new/python/med_bool_typemap.i 2025-01-24 00:28:05.257993234 +0100 -@@ -22,7 +22,7 @@ - /* Py_DECREF(o2); */ - /* Py_DECREF(o3); */ - /* } */ -- $result=SWIG_Python_AppendOutput($result, o); -+ $result=SWIG_AppendOutput($result, o); - } - - %typemap(in,numinputs=0) med_bool *(med_bool temp) { -diff -rupN --no-dereference med-5.0.0/python/med_enumtest_typemap.i med-5.0.0-new/python/med_enumtest_typemap.i ---- med-5.0.0/python/med_enumtest_typemap.i 2025-01-24 00:28:04.853403794 +0100 -+++ med-5.0.0-new/python/med_enumtest_typemap.i 2025-01-24 00:28:05.258210585 +0100 -@@ -130,7 +130,7 @@ public: - pargs = Py_BuildValue("(i)",*$1); - pinst = PyObject_CallObject(pclass, pargs); - if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); -- $result=SWIG_Python_AppendOutput($result, pinst); -+ $result=SWIG_AppendOutput($result, pinst); - } - - %typemap(in,numinputs=0) TypeEnum * (TypeEnum temp) { -diff -rupN --no-dereference med-5.0.0/python/med_enum_typemap.i med-5.0.0-new/python/med_enum_typemap.i ---- med-5.0.0/python/med_enum_typemap.i 2025-01-24 00:28:04.853741870 +0100 -+++ med-5.0.0-new/python/med_enum_typemap.i 2025-01-24 00:28:05.258385775 +0100 -@@ -111,7 +111,7 @@ Type.__repr__= lambda self: #Type +"("+s - pargs = Py_BuildValue("(i)",*$1); - pinst = PyObject_CallObject(pclass, pargs); - if (pinst == NULL) printf("%s\n","Can't instanciate class $1_basetype"); -- $result=SWIG_Python_AppendOutput($result, pinst); -+ $result=SWIG_AppendOutput($result, pinst); - } - - %typemap(in,numinputs=0) TypeEnum * (TypeEnum temp) { diff --git a/backports/py3-pivy/APKBUILD b/backports/py3-pivy/APKBUILD deleted file mode 100644 index 300d9e7..0000000 --- a/backports/py3-pivy/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: -pkgname=py3-pivy -pkgver=0.6.9 -pkgrel=2 -pkgdesc="Python3 bindings for coin" -url="https://github.com/coin3d/pivy" -# riscv64 blocked by py3-pyside6 -# armhf blocked by qt6-qtdeclarative -> py3-pyside6 -arch="all !riscv64 !armhf" -license="ISC" -depends="py3-pyside6" -makedepends="swig soqt-dev qt6-qtbase-dev python3-dev glu-dev cmake samurai" -checkdepends="py3-pytest" -options="!check" # test suite is interactive and requires full installation -source="$pkgname-$pkgver.tar.gz::https://github.com/coin3d/pivy/archive/refs/tags/${pkgver//_alpha/.a}.tar.gz" -builddir="$srcdir/pivy-${pkgver//_alpha/.a}" - -build() { - if [ "$CBUILD" != "$CHOST" ]; then - CMAKE_CROSSOPTS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_HOST_SYSTEM_NAME=Linux" - fi - cmake -B build -G Ninja \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DBUILD_SHARED_LIBS=True \ - -DCMAKE_BUILD_TYPE=None \ - $CMAKE_CROSSOPTS - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -fd9587c69ad7468b771fbae59e68620f67a3c20850edadd65bf7994c1789d3444feb419e65dce34c6ee897c98eaca9f2f29f0bbfb4d1f0bbde26e4db56f74f78 py3-pivy-0.6.9.tar.gz -" diff --git a/backports/soqt/APKBUILD b/backports/soqt/APKBUILD deleted file mode 100644 index b96f3dd..0000000 --- a/backports/soqt/APKBUILD +++ /dev/null @@ -1,31 +0,0 @@ -# Contributor: Aiden Grossman -# Maintainer: Antoine Martin (ayakael) -pkgname=soqt -pkgver=1.6.3 -pkgrel=0 -pkgdesc="GUI binding library for coin" -url="https://github.com/coin3d/soqt" -arch="all" -license="BSD-3-Clause" -makedepends="coin-dev cmake mesa-dev samurai qt5-qtbase-dev doxygen" -options="!check" # test suite consists only of interactive programs -subpackages="$pkgname-dev $pkgname-doc" -source="https://github.com/coin3d/soqt/releases/download/v$pkgver/soqt-$pkgver-src.tar.gz" -builddir="$srcdir/$pkgname" - -build() { - cmake -B build -G Ninja . \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_BUILD_TYPE=None \ - -DSOQT_BUILD_DOCUMENTATION=ON \ - -DSOQT_BUILD_DOC_MAN=ON - cmake --build build -} - -package() { - DESTDIR="$pkgdir" cmake --install build -} - -sha512sums=" -8cef22cf4214dd03bb4639c1fff77c127bf80f99e3b7fb7c1c21c25a281aa484252414f4a48fa59b8b2485afe7920ce9e86366fd1343badc77b75b78d3ac4c53 soqt-1.6.3-src.tar.gz -" From 7b106bae0caeae93bb41aec73e8b45a9c370304e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 31 May 2025 12:36:51 -0400 Subject: [PATCH 652/738] backports/py3-{dateparser,flask-limiter,limits,pathvalidate}: drop to unneeded --- backports/py3-dateparser/APKBUILD | 65 ------------------- backports/py3-flask-limiter/APKBUILD | 55 ---------------- .../our-std-is-good-enough.patch | 22 ------- backports/py3-limits/APKBUILD | 58 ----------------- .../py3-limits/our-std-is-good-enough.patch | 11 ---- .../tests-drop-etcd3-and-k-argument.patch | 24 ------- backports/py3-pathvalidate/APKBUILD | 37 ----------- 7 files changed, 272 deletions(-) delete mode 100644 backports/py3-dateparser/APKBUILD delete mode 100644 backports/py3-flask-limiter/APKBUILD delete mode 100644 backports/py3-flask-limiter/our-std-is-good-enough.patch delete mode 100644 backports/py3-limits/APKBUILD delete mode 100644 backports/py3-limits/our-std-is-good-enough.patch delete mode 100644 backports/py3-limits/tests-drop-etcd3-and-k-argument.patch delete mode 100644 backports/py3-pathvalidate/APKBUILD diff --git a/backports/py3-dateparser/APKBUILD b/backports/py3-dateparser/APKBUILD deleted file mode 100644 index 17b905e..0000000 --- a/backports/py3-dateparser/APKBUILD +++ /dev/null @@ -1,65 +0,0 @@ -maintainer="Hoang Nguyen " -pkgname=py3-dateparser -_pyname=${pkgname#py3-} -pkgver=1.2.0 -pkgrel=0 -pkgdesc="Python parser for human readable dates" -url="https://github.com/scrapinghub/dateparser" -arch="noarch" -license="BSD-3-Clause" -depends=" - python3 - py3-dateutil - py3-regex - py3-tz - py3-tzlocal - " -makedepends=" - py3-gpep517 - py3-setuptools - py3-wheel - " -checkdepends=" - py3-fasttext - py3-gitpython - py3-langdetect - py3-parameterized - py3-parsel - py3-pytest - py3-requests - py3-ruamel.yaml - " -subpackages="$pkgname-pyc" -source="$pkgname-$pkgver.tar.gz::https://github.com/scrapinghub/dateparser/archive/refs/tags/v$pkgver.tar.gz" -builddir="$srcdir/$_pyname-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - # test_relative_base_setting_2_en fails due to tzinfo mismatch - # test_custom_language_detect_fast_text fails due to wrong file format - _test_filter="not test_parsing_date_should_fail_using_datetime_strptime_if_locale_is_non_english \ - and not test_relative_base_setting_2_en and not test_custom_language_detect_fast_text" - - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - - # test_hijri.py: needs hijri_converter, test_jalali.py: convertdate - .testenv/bin/python3 -m pytest tests \ - -k "$_test_filter" \ - --ignore tests/test_hijri.py \ - --ignore tests/test_jalali.py -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -2d37115f25c2076c4521b77b89ef1cff3cd0a5233c45beb00d78a5c9b1a384dcd993ff7cdd1f77db95a53ce566cf7d709d46ffa2e63eb468ac954fda178a5b6e py3-dateparser-1.2.0.tar.gz -" diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD deleted file mode 100644 index cd15f22..0000000 --- a/backports/py3-flask-limiter/APKBUILD +++ /dev/null @@ -1,55 +0,0 @@ -# Contributor: lauren n. liberda -maintainer="lauren n. liberda " -pkgname=py3-flask-limiter -pkgver=3.10.1 -pkgrel=0 -pkgdesc="Rate Limiting extension for Flask" -url="https://github.com/alisaifee/flask-limiter" -arch="noarch" -license="MIT" -depends=" - py3-flask - py3-limits - py3-ordered-set - py3-rich - python3 - " -makedepends="py3-setuptools py3-gpep517" -checkdepends=" - py3-flask-restful - py3-flask-restx - py3-limits-mongodb - py3-limits-redis - py3-pytest - py3-pytest-cov - " -subpackages="$pkgname-pyc" -source=" - https://github.com/alisaifee/flask-limiter/archive/refs/tags/$pkgver/flask-limiter-$pkgver.tar.gz - - our-std-is-good-enough.patch - " -builddir="$srcdir/flask-limiter-$pkgver" -options="!check" # tests depend on unpackaged modules - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -a0d3af6f93d4283309d6df46ddb7fed4c358bbc712c2bd9e6897362c6d086c395cb9587c3d9da283ad757b574fd8c09d909f3c4b76d02ae8aade3e61dbea6aa0 flask-limiter-3.10.1.tar.gz -1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch -" diff --git a/backports/py3-flask-limiter/our-std-is-good-enough.patch b/backports/py3-flask-limiter/our-std-is-good-enough.patch deleted file mode 100644 index 664143f..0000000 --- a/backports/py3-flask-limiter/our-std-is-good-enough.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- ./flask_limiter/typing.py.orig -+++ ./flask_limiter/typing.py -@@ -11,7 +11,7 @@ - cast, - ) - --from typing_extensions import ParamSpec -+from typing import ParamSpec - - R = TypeVar("R") - P = ParamSpec("P") ---- ./flask_limiter/commands.py.orig -+++ ./flask_limiter/commands.py -@@ -14,7 +14,7 @@ - from rich.table import Table - from rich.theme import Theme - from rich.tree import Tree --from typing_extensions import TypedDict -+from typing import TypedDict - from werkzeug.exceptions import MethodNotAllowed, NotFound - from werkzeug.routing import Rule - diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD deleted file mode 100644 index af4516d..0000000 --- a/backports/py3-limits/APKBUILD +++ /dev/null @@ -1,58 +0,0 @@ -# Contributor: lauren n. liberda -# Maintainer: lauren n. liberda -pkgname=py3-limits -pkgver=3.14.1 -pkgrel=0 -pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" -url="https://github.com/alisaifee/limits" -arch="noarch" -license="MIT" -depends=" - py3-deprecated - python3 - " -makedepends="py3-setuptools py3-gpep517" -checkdepends=" - py3-flaky - py3-mongo - py3-pytest - py3-pytest-asyncio - py3-pytest-benchmark - py3-pytest-cov - py3-pytest-lazy-fixtures - py3-pymemcache - py3-redis - " -subpackages="$pkgname-pyc" -source=" - https://github.com/alisaifee/limits/archive/refs/tags/$pkgver/limits-$pkgver.tar.gz - - our-std-is-good-enough.patch - tests-drop-etcd3-and-k-argument.patch - " -builddir="$srcdir/limits-$pkgver" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl - .testenv/bin/python3 -m pytest -W ignore::DeprecationWarning \ - -m 'not benchmark and not etcd and not integration and not memcached' \ - -k 'not aio and not Storage and not strategy' -v -} - -package() { - gpep517 install-wheel --destdir "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -f30c7ec19c2d1edad9ed77dc590ae35717efa3956a4d97e465793e1923a4af08dc9921d90ee95d3c54ce3364b867ca67a9de62c61d627e07a3f50da20bdabd0f limits-3.14.1.tar.gz -271e3b0501f9f144eda8d2e96c93b285714e339b9217385e38cdbce1f4dec88f9c949e9419f8be94885092e7977f7dca29b86b5499e9fead678b42a686c337db our-std-is-good-enough.patch -e84f4db49349a6feba0f701b9d4357c5f66d64c4a23f8ce512528b0f44b5bbef55041c02d92aae3a4cc8d5340846f9e909217beb869a5aeb49df166dd29ae9e3 tests-drop-etcd3-and-k-argument.patch -" diff --git a/backports/py3-limits/our-std-is-good-enough.patch b/backports/py3-limits/our-std-is-good-enough.patch deleted file mode 100644 index 32d7d73..0000000 --- a/backports/py3-limits/our-std-is-good-enough.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./limits/typing.py.orig -+++ ./limits/typing.py -@@ -13,7 +13,7 @@ - Union, - ) - --from typing_extensions import ClassVar, Counter, ParamSpec, Protocol, TypeAlias -+from typing import ClassVar, Counter, ParamSpec, Protocol, TypeAlias - - Serializable = Union[int, str, float] - diff --git a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch deleted file mode 100644 index cab3a06..0000000 --- a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/tests/conftest.py.orig b/tests/conftest.py -index 2aeb758dda6..a9b2b8b2bd1 100644 ---- a/tests/conftest.py.orig -+++ b/tests/conftest.py -@@ -3,7 +3,6 @@ import platform - import socket - import time - --import etcd3 - import pymemcache - import pymemcache.client - import pymongo -diff --git a/pytest.ini.orig b/pytest.ini -index 38c40a713d0..8c6659e21c2 100644 ---- a/pytest.ini.orig -+++ b/pytest.ini -@@ -17,7 +17,6 @@ addopts = - -rfEsxX - --cov=limits - -m "not benchmark" -- -K - filterwarnings = - error - module::ResourceWarning diff --git a/backports/py3-pathvalidate/APKBUILD b/backports/py3-pathvalidate/APKBUILD deleted file mode 100644 index 94d2053..0000000 --- a/backports/py3-pathvalidate/APKBUILD +++ /dev/null @@ -1,37 +0,0 @@ -# Contributor: lauren n. liberda -# Maintainer: lauren n. liberda -pkgname=py3-pathvalidate -pkgver=3.2.3 -pkgrel=0 -pkgdesc="Python library to sanitize/validate a string such as filenames/file-paths/etc" -url="https://github.com/thombashi/pathvalidate" -arch="noarch" -license="MIT" -depends="python3" -makedepends=" - py3-gpep517 - py3-setuptools - py3-setuptools_scm - py3-wheel - " -checkdepends="py3-pytest py3-click py3-faker" -options="!check" # tests require unpackaged unmaintained dependencies -subpackages="$pkgname-pyc" -source="https://github.com/thombashi/pathvalidate/archive/refs/tags/v$pkgver/pathvalidate-$pkgver.tar.gz" -builddir="$srcdir/pathvalidate-$pkgver" - -build() { - export SETUPTOOLS_SCM_PRETEND_VERSION="$pkgver" - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -674cddcf94d4f03aff5fe968c4c678f6fa510c8ff4dfd9232b2b075ccfaa17de86a08d497c10664399694c5e72b354d452d75f11f6b40d2f9778a2466af0b265 pathvalidate-3.2.3.tar.gz -" From f2ad704226c692c1e790245c52591991a6983463 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 15:08:38 -0400 Subject: [PATCH 653/738] ci: add checks for pmos --- .forgejo/bin/check_ver.sh | 10 +++++++++- .forgejo/workflows/check-pmos.yml | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 .forgejo/workflows/check-pmos.yml diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 107aec2..0f3f3a9 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -25,6 +25,7 @@ repo=${downstream/*\/} release=${downstream/\/$repo/} release=${release/*\/} release=${release/v} +arch=$(apk --print-arch) is_semantic() { local downstream_version_dot=${1//[^.]} @@ -34,8 +35,9 @@ is_semantic() { return 1 } + echo "Checking $downstream for out of date packages" -curl --silent $downstream/x86_64/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX +curl --silent $downstream/$arch/APKINDEX.tar.gz | tar -O -zx APKINDEX > APKINDEX if [ "$ALL_PACKAGES" == "true" ]; then owned_by_you=$(awk -F ':' '{if($1=="o"){print $2}}' APKINDEX | sort | uniq) @@ -89,6 +91,12 @@ for pkg in $owned_by_you; do ;; # we want to track LTS rather than latest arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);; + # also tags releases that we can omit + linux-radxa) upstream_version=${upstream_version/-*};; + # track linux-rpi + linux-clockworkpi-uconsole-rpi) + upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-rpi$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) + upstream_version=${upstream_version/-*} *) # continues when package version scheme is not semantic, but minor_only or fix_only is set if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml new file mode 100644 index 0000000..d37db60 --- /dev/null +++ b/.forgejo/workflows/check-pmos.yml @@ -0,0 +1,27 @@ +on: + workflow_dispatch: + + schedule: + - cron: '0 5 * * *' + +jobs: + check-community-pmos: + name: Check pmos(edge) repo + runs-on: aarch64 + container: + image: alpine:latest + env: + downstream: http://mirror.postmarketos.org/postmarketos/master + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 14 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From 3611b942ed58d582e8f5387139e7e4c6636aaf9a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 15:09:58 -0400 Subject: [PATCH 654/738] ci: check_ver lint --- .forgejo/bin/check_ver.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 0f3f3a9..b63220e 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -97,6 +97,7 @@ for pkg in $owned_by_you; do linux-clockworkpi-uconsole-rpi) upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-rpi$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) upstream_version=${upstream_version/-*} + ;; *) # continues when package version scheme is not semantic, but minor_only or fix_only is set if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then From 3da0a268ee319ccbf15289f00dc543a552ca1966 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 15:12:56 -0400 Subject: [PATCH 655/738] ci: add additional package feature and track linux-clockworkpi-uconsole-rpi --- .forgejo/bin/check_ver.sh | 4 ++++ .forgejo/workflows/check-pmos.yml | 1 + 2 files changed, 5 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index b63220e..46e3e48 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -19,6 +19,7 @@ # optional env variables # ALL_PACKAGES: when true, ignore is package is owned by me # skip_package: array of packages to skip +# add_package: array of additional packages to check # repo=${downstream/*\/} @@ -47,6 +48,9 @@ else echo "Found $(printf '%s\n' $owned_by_you | wc -l ) packages owned by you" fi +# add additionnal packages +owned_by_you="$owned_by_you $add_package" + rm -f out_of_date not_in_anitya for pkg in $owned_by_you; do diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index d37db60..fc10d52 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -14,6 +14,7 @@ jobs: downstream: http://mirror.postmarketos.org/postmarketos/master ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 14 + add_package: linux-clockworkpi-uconsole-rpi steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 7a2ebe9cfedba6c6b5741b1912753afd627f90fa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 15:15:57 -0400 Subject: [PATCH 656/738] ci: skip my device packages --- .forgejo/workflows/check-pmos.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index fc10d52..ce3db67 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -15,6 +15,7 @@ jobs: ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 14 add_package: linux-clockworkpi-uconsole-rpi + skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From d746dda5cbb10542ba4cf476aa77722ce0e8f5a8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 15:34:11 -0400 Subject: [PATCH 657/738] ci: override repo_name --- .forgejo/bin/check_ver.sh | 4 +++- .forgejo/workflows/check-pmos.yml | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 46e3e48..8a88afb 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -20,12 +20,14 @@ # ALL_PACKAGES: when true, ignore is package is owned by me # skip_package: array of packages to skip # add_package: array of additional packages to check +# repo_name: override repo name # repo=${downstream/*\/} release=${downstream/\/$repo/} release=${release/*\/} release=${release/v} +[ -n "$repo_name" ] && repo=$repo_name arch=$(apk --print-arch) is_semantic() { @@ -99,7 +101,7 @@ for pkg in $owned_by_you; do linux-radxa) upstream_version=${upstream_version/-*};; # track linux-rpi linux-clockworkpi-uconsole-rpi) - upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-rpi$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) + upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-rpi$/,/^$/p" | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) upstream_version=${upstream_version/-*} ;; *) diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index ce3db67..f6a98ca 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -16,6 +16,7 @@ jobs: LABEL_NUMBER: 14 add_package: linux-clockworkpi-uconsole-rpi skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote + repo_name: pmos steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From eea9bc1537551b223150c1a8740a64bcd7da9339 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 15:41:29 -0400 Subject: [PATCH 658/738] ci: remove repo_name add special case handling of repo name for postmarketos --- .forgejo/bin/check_ver.sh | 5 +++-- .forgejo/workflows/check-pmos.yml | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 8a88afb..5634b74 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -20,14 +20,15 @@ # ALL_PACKAGES: when true, ignore is package is owned by me # skip_package: array of packages to skip # add_package: array of additional packages to check -# repo_name: override repo name # repo=${downstream/*\/} release=${downstream/\/$repo/} release=${release/*\/} release=${release/v} -[ -n "$repo_name" ] && repo=$repo_name +# add special case for postmarketos +[ "$release" == "postmarketos" ] && { release=$repo; repo="pmos"; } +[ "$release" == "master" ] && release=edge arch=$(apk --print-arch) is_semantic() { diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index f6a98ca..ce3db67 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -16,7 +16,6 @@ jobs: LABEL_NUMBER: 14 add_package: linux-clockworkpi-uconsole-rpi skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote - repo_name: pmos steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From edac436331b683c7fbb5e03c11312646c7c5ad02 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 20:10:29 -0400 Subject: [PATCH 659/738] ci: fix check community workflow --- .forgejo/workflows/check-community.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 8c5f3c5..8a88ce8 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -31,11 +31,11 @@ jobs: container: image: alpine:latest env: - downstream: https://dl-cdn.alpinelinux.org/alpine/3.22/community + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 fix_only: all - skip_package: dotnet9-stage0 dotnet8-stage0 + skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 7c780b5d0f96e0c53c5a92a0764cf4f9d64eb09e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 8 Jun 2025 20:17:25 -0400 Subject: [PATCH 660/738] ci: fix special case for looking-glass --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 5634b74..c65799b 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -69,7 +69,7 @@ for pkg in $owned_by_you; do # special cases where package is not semantic case $pkg in # release-monitoring omits the extra B, while we keep it but put it after the version no. - looking-glass) upstream_version="${upstream_version/b}";; + looking-glass) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)b";; # we want to track both Firefox security upgrades + Zotero upgrades zotero) commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') From 923797f1b99aae642908c41f39bf0d5e86907d7f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 9 Jun 2025 11:35:23 -0400 Subject: [PATCH 661/738] ci: fix special case for linux-radxa --- .forgejo/bin/check_ver.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index c65799b..f1d5772 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -99,7 +99,10 @@ for pkg in $owned_by_you; do # we want to track LTS rather than latest arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);; # also tags releases that we can omit - linux-radxa) upstream_version=${upstream_version/-*};; + linux-radxa) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) + upstream_version=${upstream_version/-*} + ;; # track linux-rpi linux-clockworkpi-uconsole-rpi) upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-rpi$/,/^$/p" | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) From f7e711f9a128f9ce745bf4a97f6a2b00f16e1325 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 14 Jun 2025 23:25:52 -0400 Subject: [PATCH 662/738] ci: do not track linux-clockworkpi-uconsole-rpi --- .forgejo/workflows/check-pmos.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index ce3db67..d7dbcc0 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -14,7 +14,6 @@ jobs: downstream: http://mirror.postmarketos.org/postmarketos/master ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 14 - add_package: linux-clockworkpi-uconsole-rpi skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote steps: - name: Environment setup From 5ea7fbce202b31f2a9f85cd1e85e5cafbe6dca00 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 15 Jun 2025 00:29:52 -0400 Subject: [PATCH 663/738] ci: track linux-pine64-pinenote and linux-radxa --- .forgejo/bin/check_ver.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index f1d5772..6832045 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -103,11 +103,15 @@ for pkg in $owned_by_you; do upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) upstream_version=${upstream_version/-*} ;; - # track linux-rpi - linux-clockworkpi-uconsole-rpi) - upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/main/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-rpi$/,/^$/p" | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) + # track linux-pine64-pinenote against linux-edge + linux-pine64-pinenote) + upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/community/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-edge$/,/^$/p" | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) upstream_version=${upstream_version/-*} ;; + # track linux-radxa against 6.1 SLTS + linux-radxa) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000"| jq -r --arg downstream_version "${downstream_version%.*}.[0-9].*" '.stable_versions.[] | match($downstream_version).string' | head -n1) + ;; *) # continues when package version scheme is not semantic, but minor_only or fix_only is set if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then From a48dd2cc708b91e8e12480f7980337bb242459e1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 15 Jun 2025 00:47:10 -0400 Subject: [PATCH 664/738] ci: fix linux kernel tracking --- .forgejo/bin/check_ver.sh | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 6832045..b7b3885 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -98,17 +98,12 @@ for pkg in $owned_by_you; do ;; # we want to track LTS rather than latest arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);; - # also tags releases that we can omit - linux-radxa) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) - upstream_version=${upstream_version/-*} - ;; - # track linux-pine64-pinenote against linux-edge + # track linux-pine64-pinenote against latest linux-pine64-pinenote) - upstream_version=$(curl --silent https://dl-cdn.alpinelinux.org/alpine/edge/community/aarch64/APKINDEX.tar.gz | tar -O -zx APKINDEX | sed -n "/^P:linux-edge$/,/^$/p" | awk -F ':' '{if($1=="V"){print $2}}' | sort -V | tail -n 1) - upstream_version=${upstream_version/-*} + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r --arg downstream_version "${downstream_version%.*}.[0-9].*" '.stable_versions.[]' | head -n1) + ;; - # track linux-radxa against 6.1 SLTS + # track linux-radxa against its major version linux-radxa) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000"| jq -r --arg downstream_version "${downstream_version%.*}.[0-9].*" '.stable_versions.[] | match($downstream_version).string' | head -n1) ;; @@ -138,7 +133,7 @@ for pkg in $owned_by_you; do echo "$pkg" >> not_in_anitya fi elif [ "$downstream_version" != "$(printf '%s\n' $upstream_version $downstream_version | sort -V | head -n 1)" ]; then - echo "$pkg higher downstream" + echo "$pkg higher downstream $upstream_version" continue elif [ "$upstream_version" != "$downstream_version" ]; then echo "$pkg upstream version $upstream_version does not match downstream version $downstream_version in $release" From 22a33dd83d219335d1b43a455088d63b3f57f490 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 15 Jun 2025 00:48:26 -0400 Subject: [PATCH 665/738] ci: skip u-boot-radxa-cm5 --- .forgejo/workflows/check-pmos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index d7dbcc0..0785667 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -14,7 +14,7 @@ jobs: downstream: http://mirror.postmarketos.org/postmarketos/master ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 14 - skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote + skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote u-boot-radxa-cm5 steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 2fa99e56c77c50799a999ad79ab0212f0468d095 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 15 Jun 2025 00:54:08 -0400 Subject: [PATCH 666/738] ci: rollback linux-radxa change --- .forgejo/bin/check_ver.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index b7b3885..9f00b5c 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -103,9 +103,11 @@ for pkg in $owned_by_you; do upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r --arg downstream_version "${downstream_version%.*}.[0-9].*" '.stable_versions.[]' | head -n1) ;; - # track linux-radxa against its major version + # track linux-radxa against BSP kernel (usually got awful late linux-radxa) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000"| jq -r --arg downstream_version "${downstream_version%.*}.[0-9].*" '.stable_versions.[] | match($downstream_version).string' | head -n1) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | h +ead -n1) + upstream_version=${upstream_version/-*} ;; *) # continues when package version scheme is not semantic, but minor_only or fix_only is set From c600b841b3d51906355e23911568cf1995a7c788 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 9 Jul 2025 03:46:59 -0400 Subject: [PATCH 667/738] ci: add workaround to issues not being created for edge when already existing for stable --- .forgejo/bin/check_ver.sh | 9 ++++----- .forgejo/bin/create_issue.sh | 22 ++++++++++++++++++---- .forgejo/workflows/check-pmos.yml | 2 +- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 9f00b5c..69b5c00 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -26,10 +26,10 @@ repo=${downstream/*\/} release=${downstream/\/$repo/} release=${release/*\/} release=${release/v} -# add special case for postmarketos -[ "$release" == "postmarketos" ] && { release=$repo; repo="pmos"; } -[ "$release" == "master" ] && release=edge arch=$(apk --print-arch) +# add special case for postmarketos +[ "$release" == "postmarketos" ] && { release=$repo; repo="pmos"; arch="aarch64"; } +[ "$release" == "master" ] && release=edge is_semantic() { local downstream_version_dot=${1//[^.]} @@ -105,8 +105,7 @@ for pkg in $owned_by_you; do ;; # track linux-radxa against BSP kernel (usually got awful late linux-radxa) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | h -ead -n1) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) upstream_version=${upstream_version/-*} ;; *) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index c8e5daa..3e3048d 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -16,8 +16,15 @@ does_it_exist() { release=$5 query="$repo/$name: upgrade to $upstream_version" - if [ "$release" != "edge" ]; then query="[$release] $query"; fi - query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')%22" + if [ "$release" != "edge" ]; then + query="%22[$release] $query%22" + elif [ "$repo" != "pmos" ]; then + # workaround to this query matching both stable and edge branch + query="%22$query%22&labels=Edge" + else + query="%22$query%22" + fi + query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ @@ -38,8 +45,15 @@ is_it_old() { release=$5 query="$repo/$name: upgrade to" - if [ "$release" != "edge" ]; then query="[$release] $query"; fi - query="%22$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')%22" + if [ "$release" != "edge" ]; then + query="%22[$release] $query%22" + elif [ "$repo" != "pmos" ]; then + # workaround to this query matching both stable and edge branch + query="%22$query%22&labels=Edge" + else + query="%22$query%22" + fi + query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')" result="$(curl --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index 0785667..a24bdcb 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -7,7 +7,7 @@ on: jobs: check-community-pmos: name: Check pmos(edge) repo - runs-on: aarch64 + runs-on: x86_64 container: image: alpine:latest env: From d0b5791120d1275adde797ef41d5e2fe2c73c954 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 10 Jul 2025 01:16:00 -0400 Subject: [PATCH 668/738] ci: add workaround exception for user repo --- .forgejo/bin/create_issue.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 3e3048d..bb4ea79 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -18,7 +18,7 @@ does_it_exist() { query="$repo/$name: upgrade to $upstream_version" if [ "$release" != "edge" ]; then query="%22[$release] $query%22" - elif [ "$repo" != "pmos" ]; then + elif [ "$repo" != "pmos" ] && [ "$repo" != "user" ]; then # workaround to this query matching both stable and edge branch query="%22$query%22&labels=Edge" else @@ -47,7 +47,7 @@ is_it_old() { query="$repo/$name: upgrade to" if [ "$release" != "edge" ]; then query="%22[$release] $query%22" - elif [ "$repo" != "pmos" ]; then + elif [ "$repo" != "pmos" ] && [ "$repo" != "user" ]; then # workaround to this query matching both stable and edge branch query="%22$query%22&labels=Edge" else From b621ae671673d39012c98cd3c834996303cf8337 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 10 Jul 2025 17:46:21 -0400 Subject: [PATCH 669/738] ci: skip dotnet6-stage0 in workflow --- .forgejo/workflows/check-testing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml index 2137944..cf54831 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -14,7 +14,7 @@ jobs: downstream: https://dl-cdn.alpinelinux.org/alpine/edge/testing ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 4 - skip_package: dotnet6-stage dotnet6-build + skip_package: dotnet6-stage0 dotnet6-build steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 9c137f0b9d0c2162e9d8f0da872a178ce4dea10f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 17:00:46 -0400 Subject: [PATCH 670/738] ci: fix tracking of raspberrypi-usbboot --- .forgejo/bin/check_ver.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 69b5c00..ee1c49f 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -108,6 +108,8 @@ for pkg in $owned_by_you; do upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) upstream_version=${upstream_version/-*} ;; + # removes last bit in github tag from usbboot release, as not needed + raspberrypi-usbboot) curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1 | sed 's|-.*||';; *) # continues when package version scheme is not semantic, but minor_only or fix_only is set if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then From 4a5617805a898a9ebf219c596dc2e0b8afe60fdf Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 17:04:57 -0400 Subject: [PATCH 671/738] ci: track u-boot-pine64-pinenote against u-boot mainline version --- .forgejo/bin/check_ver.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index ee1c49f..f6d3716 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -68,6 +68,8 @@ for pkg in $owned_by_you; do # special cases where package is not semantic case $pkg in + # track u-boot-pine64-pinenote against mainline u-boot + u-boot-pine64-pinenote) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)";; # release-monitoring omits the extra B, while we keep it but put it after the version no. looking-glass) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)b";; # we want to track both Firefox security upgrades + Zotero upgrades From 4adb8575d1a101aa4740630f829ed561e4ec8a1e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 17:12:37 -0400 Subject: [PATCH 672/738] ci: linux-pine64-pinenote: track latest and current linux release --- .forgejo/bin/check_ver.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index f6d3716..6014831 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -102,8 +102,15 @@ for pkg in $owned_by_you; do arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);; # track linux-pine64-pinenote against latest linux-pine64-pinenote) - upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r --arg downstream_version "${downstream_version%.*}.[0-9].*" '.stable_versions.[]' | head -n1) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) + latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[]" | head -n1) + # append version number to signal that this is not latest major version + if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then + echo "$pkg(${latest_version/.*.*}) major version available" + echo "$pkg(${latest_version/.*.*}) $downstream_version $latest_version $repo $release" >> out_of_date + pkg="$pkg(${upstream_version/.*.*})" + fi ;; # track linux-radxa against BSP kernel (usually got awful late linux-radxa) From 7332be756165eb2d7e0e86294d6f030c82442fe1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 17:14:47 -0400 Subject: [PATCH 673/738] ci: linux-pine64-pinenote: fix tracking latest release --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 6014831..91e80bc 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -106,7 +106,7 @@ for pkg in $owned_by_you; do latest_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[]" | head -n1) # append version number to signal that this is not latest major version - if [ "${upstream_version/.*}" != "${latest_version/.*}" ]; then + if [ "${upstream_version/.*.*}" != "${latest_version/.*.*}" ]; then echo "$pkg(${latest_version/.*.*}) major version available" echo "$pkg(${latest_version/.*.*}) $downstream_version $latest_version $repo $release" >> out_of_date pkg="$pkg(${upstream_version/.*.*})" From 8789a20256caf0cb38a733cb96a5cd28991bf8c1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 17:23:02 -0400 Subject: [PATCH 674/738] ci: linux-pine64-pinenote: fix naming current release --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 91e80bc..67b13b1 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -109,7 +109,7 @@ for pkg in $owned_by_you; do if [ "${upstream_version/.*.*}" != "${latest_version/.*.*}" ]; then echo "$pkg(${latest_version/.*.*}) major version available" echo "$pkg(${latest_version/.*.*}) $downstream_version $latest_version $repo $release" >> out_of_date - pkg="$pkg(${upstream_version/.*.*})" + pkg="$pkg(${upstream_version%.*})" fi ;; # track linux-radxa against BSP kernel (usually got awful late From 953627f48d799649b2da5ce9e7a632579c9c5b37 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 20:02:12 -0400 Subject: [PATCH 675/738] ci: u-boot-pine64-pinenote: track ddr and trust blob versions --- .forgejo/bin/check_ver.sh | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 67b13b1..bf1814b 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -68,8 +68,30 @@ for pkg in $owned_by_you; do # special cases where package is not semantic case $pkg in - # track u-boot-pine64-pinenote against mainline u-boot - u-boot-pine64-pinenote) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)";; + # track u-boot-pine64-pinenote against mainline u-boot, and track upstream rockchip blobs + u-boot-pine64-pinenote) + upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)" + commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') + + # fetches upstream version for blobs using ini file + upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}'| grep -o -P '(?<=_v).*(?=.bin)')" + upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" + + # extracts downstream version via _trust_ver and _ddr_ver variable + downstream_trust=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_trust_ver"){print $2}}') + downstream_ddr=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_ddr_ver"){print $2}}') + + # compares versions and creates newline in out_of_date if problematic + if [ "$upstream_trust" != "$downstream_trust" ]; then + echo "$pkg new Trust blob $upstream_trust version available" + echo "$pkg(trust) $downstream_trust $upstream_trust $repo $release" >> out_of_date + fi + if [ "$upstream_ddr" != "$downstream_ddr" ]; then + echo "$pkg new ddr blob $upstream_ddr version available" + echo "$pkg(ddr) $downstream_ddr $upstream_ddr $repo $release" >> out_of_date + fi + + ;; # release-monitoring omits the extra B, while we keep it but put it after the version no. looking-glass) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)b";; # we want to track both Firefox security upgrades + Zotero upgrades From d0dfb021eb592537a6cf0da81e46d9a7cc573ae8 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 10 Aug 2025 20:19:18 -0400 Subject: [PATCH 676/738] ci: u-boot-pine64-pinenote: fix ddr and trust tracking --- .forgejo/bin/check_ver.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index bf1814b..b936969 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -74,8 +74,8 @@ for pkg in $owned_by_you; do commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') # fetches upstream version for blobs using ini file - upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}'| grep -o -P '(?<=_v).*(?=.bin)')" - upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" + upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" + upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKBOOT/RK3566MINIALL_ULTRA.ini' | grep ddr | awk -F '=' '{if($1"="PATH){print $2}}' | head -n 1 | grep -o -P '(?<=_v).*(?=.bin)' # extracts downstream version via _trust_ver and _ddr_ver variable downstream_trust=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_trust_ver"){print $2}}') From 4de45ea910c3c8af059a077abda45bae49876642 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 14 Aug 2025 21:59:55 -0400 Subject: [PATCH 677/738] ci: u-boot-pine64-pinenote: fix typo --- .forgejo/bin/check_ver.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index b936969..53e1ac0 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -75,7 +75,7 @@ for pkg in $owned_by_you; do # fetches upstream version for blobs using ini file upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" - upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKBOOT/RK3566MINIALL_ULTRA.ini' | grep ddr | awk -F '=' '{if($1"="PATH){print $2}}' | head -n 1 | grep -o -P '(?<=_v).*(?=.bin)' + upstream_ddr="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKBOOT/RK3566MINIALL_ULTRA.ini' | grep ddr | awk -F '=' '{if($1"="PATH){print $2}}' | head -n 1 | grep -o -P '(?<=_v).*(?=.bin)')" # extracts downstream version via _trust_ver and _ddr_ver variable downstream_trust=$(curl --fail -X GET -s "https://gitlab.postmarketos.org/postmarketOS/pmaports/-/raw/$commit/device/testing/u-boot-pine64-pinenote/APKBUILD" | awk -F '=' '{if($1=="_trust_ver"){print $2}}') From 8c1da51a6002c4fa1eb0c9a28c056099ab9ff909 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 14 Aug 2025 22:07:15 -0400 Subject: [PATCH 678/738] ci: u-boot-pine64-pinenote: fix commit lookup --- .forgejo/bin/check_ver.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 53e1ac0..1b284fc 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -72,6 +72,7 @@ for pkg in $owned_by_you; do u-boot-pine64-pinenote) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)" commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') + commit=${commit/-dirty/} # fetches upstream version for blobs using ini file upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" From 2eeb660610b8aa84ca78f1a43d032a3b61e5bc87 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 6 Sep 2025 16:40:29 -0400 Subject: [PATCH 679/738] ci: use actions namespace for {upload,download}-artifact action --- .forgejo/workflows/build-aarch64.yaml | 4 ++-- .forgejo/workflows/build-cross.yaml | 4 ++-- .forgejo/workflows/build-x86_64.yaml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.forgejo/workflows/build-aarch64.yaml b/.forgejo/workflows/build-aarch64.yaml index 0ff5e7c..78db319 100644 --- a/.forgejo/workflows/build-aarch64.yaml +++ b/.forgejo/workflows/build-aarch64.yaml @@ -28,7 +28,7 @@ jobs: ${{ github.workspace }}/.forgejo/bin/build.sh touch packages/dummy - name: Package upload - uses: forgejo/upload-artifact@v3 + uses: actions/upload-artifact@v3 with: name: package path: packages @@ -49,6 +49,6 @@ jobs: - name: Repo pull uses: actions/checkout@v4 - name: Package download - uses: forgejo/download-artifact@v3 + uses: actions/download-artifact@v3 - name: Package deployment run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-cross.yaml b/.forgejo/workflows/build-cross.yaml index 6d770f7..f4737b6 100644 --- a/.forgejo/workflows/build-cross.yaml +++ b/.forgejo/workflows/build-cross.yaml @@ -33,7 +33,7 @@ jobs: ${{ github.workspace }}/.forgejo/bin/generate-cross.sh ${{ github.ref_name }} ${{ inputs.target_arch }} mv -v /home/buildozer/packages/main ${{ github.workspace }}/packages/cross - name: Package upload - uses: forgejo/upload-artifact@v3 + uses: actions/upload-artifact@v3 with: name: package path: packages @@ -54,6 +54,6 @@ jobs: - name: Repo pull uses: actions/checkout@v4 - name: Package download - uses: forgejo/download-artifact@v3 + uses: actions/download-artifact@v3 - name: Package deployment run: ${{ github.workspace }}/.forgejo/bin/deploy.sh diff --git a/.forgejo/workflows/build-x86_64.yaml b/.forgejo/workflows/build-x86_64.yaml index ad7abb3..84d6908 100644 --- a/.forgejo/workflows/build-x86_64.yaml +++ b/.forgejo/workflows/build-x86_64.yaml @@ -28,7 +28,7 @@ jobs: ${{ github.workspace }}/.forgejo/bin/build.sh touch packages/dummy - name: Package upload - uses: forgejo/upload-artifact@v3 + uses: actions/upload-artifact@v3 with: name: package path: packages @@ -49,6 +49,6 @@ jobs: - name: Repo pull uses: actions/checkout@v4 - name: Package download - uses: forgejo/download-artifact@v3 + uses: actions/download-artifact@v3 - name: Package deployment run: ${{ github.workspace }}/.forgejo/bin/deploy.sh From d3043bab853539e05ad16e797f1236fe79ea6817 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 6 Sep 2025 22:15:59 -0400 Subject: [PATCH 680/738] ci: fix titles for non-edge issues --- .forgejo/bin/create_issue.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index bb4ea79..07879f1 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -80,13 +80,16 @@ update_title() { release=$5 id=$6 + title="$repo/$name: upgrade to $upstream_version" + if [ "$release" != "edge" ]; then title="[$release] $title"; fi + result=$(curl --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ -d "{ - \"title\": \"$repo/$name: upgrade to $upstream_version\" + \"title\": \"$title\", }" ) From bd1a71e8a2bec7f56816bb579df53e37485ea655 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 6 Sep 2025 22:17:07 -0400 Subject: [PATCH 681/738] ci: use aarch64 runner on check and lint workflows --- .forgejo/workflows/check-backports.yml | 2 +- .forgejo/workflows/check-community.yml | 4 ++-- .forgejo/workflows/check-main.yml | 10 +++++----- .forgejo/workflows/check-pmos.yml | 2 +- .forgejo/workflows/check-testing.yml | 2 +- .forgejo/workflows/check-user.yml | 2 +- .forgejo/workflows/lint.yaml | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml index cd8f63b..f1d016d 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -7,7 +7,7 @@ on: jobs: check-backports: name: Check backports repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 8a88ce8..95a8032 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -7,7 +7,7 @@ on: jobs: check-community-edge: name: Check community(edge) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: @@ -27,7 +27,7 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh check-community-3.22: name: Check community(3.22) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml index 58e8001..6730130 100644 --- a/.forgejo/workflows/check-main.yml +++ b/.forgejo/workflows/check-main.yml @@ -7,7 +7,7 @@ on: jobs: check-main-edge: name: Check main(edge) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: @@ -27,7 +27,7 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh check-main-3.22: name: Check main(3.22) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: @@ -48,7 +48,7 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh check-main-3.21: name: Check main(3.21) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: @@ -69,7 +69,7 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh check-main-3.20: name: Check main(3.20) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: @@ -90,7 +90,7 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh check-main-3.19: name: Check main(3.19) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index a24bdcb..0785667 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -7,7 +7,7 @@ on: jobs: check-community-pmos: name: Check pmos(edge) repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml index cf54831..a778500 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -7,7 +7,7 @@ on: jobs: check-community: name: Check testing repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: diff --git a/.forgejo/workflows/check-user.yml b/.forgejo/workflows/check-user.yml index ba6ed80..db1f574 100644 --- a/.forgejo/workflows/check-user.yml +++ b/.forgejo/workflows/check-user.yml @@ -7,7 +7,7 @@ on: jobs: check-user: name: Check user repo - runs-on: x86_64 + runs-on: aarch64 container: image: alpine:latest env: diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml index 743cefc..ec79090 100644 --- a/.forgejo/workflows/lint.yaml +++ b/.forgejo/workflows/lint.yaml @@ -5,7 +5,7 @@ on: jobs: lint: run-name: lint - runs-on: x86_64 + runs-on: aarch64 container: image: alpinelinux/apkbuild-lint-tools:latest env: From 223efcc89ff2db8fa225e8020d87cf3ee8557f8c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 13 Sep 2025 10:16:11 -0400 Subject: [PATCH 682/738] ci: add capability to exclude packages from fix_only minor_only rules --- .forgejo/bin/check_ver.sh | 21 +++++++++++++-------- .forgejo/workflows/check-community.yml | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 1b284fc..2560e9f 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -10,12 +10,14 @@ # fix_only: array of packages that should only track bug fix releases (seperated by space) # default: none # all packages: all -# +# # If either minor_only or fix_only is set, only packages with semantic versioning schemes # will be tracked. # # If a package is both minor_only and fix_only, the minor releases will be tracked # +# If a - is placed in front of package name, it'll be excluded from the update rule +# # optional env variables # ALL_PACKAGES: when true, ignore is package is owned by me # skip_package: array of packages to skip @@ -143,17 +145,20 @@ for pkg in $owned_by_you; do # removes last bit in github tag from usbboot release, as not needed raspberrypi-usbboot) curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1 | sed 's|-.*||';; *) - # continues when package version scheme is not semantic, but minor_only or fix_only is set - if [ -n "${minor_only}" ] || [ -n "${fix_only}" ]; then + + if [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]] && [[ "$minor_only" != *-$pkg* ]] then + # continues when package version scheme is not semantic, but minor_only or fix_only is set if ! is_semantic $downstream_version; then - echo "$pkg is not semantic, and fix_only or minor_only is set" + echo "$pkg is not semantic, and minor_only is set" continue fi - fi - - if [ "${minor_only}" == "all" ] || [[ "${minor_only}" == *$pkg* ]]; then upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*.*}.*\").string" | head -n1) - elif [ "${fix_only}" == "all" ] || [[ "${fix_only}" == *$pkg* ]]; then + elif [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] && [[ "$fix_only" != *-$pkg* ]]; then + # continues when package version scheme is not semantic, but minor_only or fix_only is set + if ! is_semantic $downstream_version; then + echo "$pkg is not semantic, and fix_only is set" + continue + fi upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) else upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 95a8032..fe1d9ad 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -34,7 +34,7 @@ jobs: downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 - fix_only: all + fix_only: all -git-annex skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore steps: - name: Environment setup From b3d03dc81744186a20b377112cc38397b893f09e Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 14 Oct 2025 09:03:25 -0400 Subject: [PATCH 683/738] ci: follow redirects on curl requests --- .forgejo/bin/create_issue.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index 07879f1..cdb9c4a 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -26,7 +26,7 @@ does_it_exist() { fi query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')" - result="$(curl --silent -X 'GET' \ + result="$(curl -L --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ -H 'accept: application/json' \ -H "Authorization: token $ISSUE_TOKEN" @@ -55,7 +55,7 @@ is_it_old() { fi query="$(echo $query | sed 's| |%20|g' | sed 's|:|%3A|g' | sed 's|/|%2F|g' | sed 's|\[|%5B|g' | sed 's|\]|%5D|g')" - result="$(curl --silent -X 'GET' \ + result="$(curl -L --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" @@ -83,7 +83,7 @@ update_title() { title="$repo/$name: upgrade to $upstream_version" if [ "$release" != "edge" ]; then title="[$release] $title"; fi - result=$(curl --silent -X 'PATCH' \ + result=$(curl -L --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$id" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ @@ -106,7 +106,7 @@ create_issue() { title="$repo/$name: upgrade to $upstream_version" if [ "$release" != "edge" ]; then title="[$release] $title"; fi - result=$(curl --silent -X 'POST' \ + result=$(curl -L --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ @@ -155,7 +155,7 @@ if [ -f not_in_anitya ]; then query="Add missing $repo packages to anitya" query="%22$(echo $query | sed 's| |%20|g')%22" - result="$(curl --silent -X 'GET' \ + result="$(curl -L --silent -X 'GET' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues?state=open&q=$query&type=issues&sort=latest" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" @@ -163,7 +163,7 @@ if [ -f not_in_anitya ]; then if [ "$result" == "[]" ]; then echo "Creating anitya issue" - result=$(curl --silent -X 'POST' \ + result=$(curl -L --silent -X 'POST' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ @@ -179,7 +179,7 @@ if [ -f not_in_anitya ]; then else echo "Updating anitya issue" result_id="$(echo $result | jq -r '.[].number' )" - result=$(curl --silent -X 'PATCH' \ + result=$(curl -L --silent -X 'PATCH' \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/issues/$result_id" \ -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ From 8658e947c7d20268cfe336103f8e66e3430da802 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 14 Oct 2025 09:22:28 -0400 Subject: [PATCH 684/738] ci: fix title updating --- .forgejo/bin/create_issue.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.forgejo/bin/create_issue.sh b/.forgejo/bin/create_issue.sh index cdb9c4a..3164b14 100755 --- a/.forgejo/bin/create_issue.sh +++ b/.forgejo/bin/create_issue.sh @@ -88,9 +88,7 @@ update_title() { -H 'accept: application/json' \ -H "authorization: token $ISSUE_TOKEN" \ -H 'Content-Type: application/json' \ - -d "{ - \"title\": \"$title\", - }" + -d "{\"title\": \"$title\"}" ) return 0 From 03b4f6425d3969e9f758028ca4d3b159fa441530 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 13 Nov 2025 12:19:14 -0500 Subject: [PATCH 685/738] ci: fix lookup for u-boot-pine64-pinenote blobs --- .forgejo/bin/check_ver.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 2560e9f..d0a9bc0 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -73,8 +73,11 @@ for pkg in $owned_by_you; do # track u-boot-pine64-pinenote against mainline u-boot, and track upstream rockchip blobs u-boot-pine64-pinenote) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)" - commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') - commit=${commit/-dirty/} + + # some reason the commit now not in APKINDEX, using master instead + #commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') + #commit=${commit/-dirty/} + commit=master # fetches upstream version for blobs using ini file upstream_trust="$(curl --fail -s 'https://raw.githubusercontent.com/rockchip-linux/rkbin/master/RKTRUST/RK3566TRUST_ULTRA.ini' | grep bl31 | awk -F '=' '{if($1"="PATH){print $2}}' | grep -o -P '(?<=_v).*(?=.elf)')" From 869d5c3845d5683a2a986af1a83452d43be844bc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 23 Nov 2025 21:45:43 -0500 Subject: [PATCH 686/738] user/koreader: new aport --- user/koreader/APKBUILD | 82 +++++++++++++++++++ ...ader-lua-use-absolute-path-to-luajit.patch | 10 +++ 2 files changed, 92 insertions(+) create mode 100644 user/koreader/APKBUILD create mode 100644 user/koreader/reader-lua-use-absolute-path-to-luajit.patch diff --git a/user/koreader/APKBUILD b/user/koreader/APKBUILD new file mode 100644 index 0000000..73d1a63 --- /dev/null +++ b/user/koreader/APKBUILD @@ -0,0 +1,82 @@ +# Maintainer: Antoine Martin (ayakael) +pkgname=koreader +pkgver=2025.10 +pkgrel=0 +pkgdesc="An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats" +# s390x|riscv64|ppc64le|loongarch64: FTBFS +# armhf|armv7|x86: Tests fail, segmentation fault +arch="x86_64 aarch64" +url="https://github.com/koreader/koreader/" +license="AGPL-3.0-only" +depends=" + bash + sdl2 + procps-ng + " +makedepends=" + autoconf + automake + cmake + coreutils + curl + diffutils + findutils + gettext + grep + libtool + linux-headers + meson + nasm + ninja-build + perl + pkgconf + wget + " +source=" + https://ayakael.net/api/packages/mirrors/generic/koreader/v$pkgver/koreader-v$pkgver.tar.gz + reader-lua-use-absolute-path-to-luajit.patch + " +subpackages="$pkgname-doc" +builddir="$srcdir"/$pkgname-v$pkgver + +# has vendored copies of system libraries +sonameprefix="$pkgname:" + +prepare() { + default_prepare + + # no need to test manually set version + rm "$builddir"/spec/unit/version_spec.lua +} + +build() { + # add ninja bin to path + export PATH="$PATH":/usr/lib/ninja-build/bin + + # default target is emulator build + make TARGET= KODEBUG= VERBOSE= +} + +check() { + KODEBUG= TARGET= VERBOSE= ./base/utils/fake_tty.py make --assume-old=base testfront +} + +package() { + install -Dm755 "$builddir"/platform/linux/koreader.sh "$pkgdir"/usr/bin/koreader + install -Dm644 "$builddir"/platform/linux/koreader.desktop -t "$pkgdir"/usr/share/applications/ + install -Dm644 "$builddir"/resources/koreader.png -t "$pkgdir"/usr/share/pixmaps/ + install -Dm644 "$builddir"/platform/linux/koreader.1 -t "$pkgdir"/usr/share/man/man1/ + + mkdir -p "$pkgdir"/usr/lib + cp -RL "$builddir"/koreader-emulator-*/koreader "$pkgdir"/usr/lib/koreader + + # delete debug files + find "$pkgdir" -name '*.dbg' -delete + + # version information + echo "v$pkgver" > "$pkgdir"/usr/lib/koreader/git-rev +} +sha512sums=" +3fbbe49ae6134abd810d9932cfb650d031100c95570c8eaa6d6e5d4c6a9a86916961b989696a7d97c149920d63853108905eea34f75f987e58f89e3a49d63948 koreader-v2025.10.tar.gz +76dd6f2ea6416b135b76d95f3c8150378f577ddd68d48312eabd6e12adaa111253dc83fc02add3ded07d3e6174fd5f4bd6c9f7b635ef27e3d760d5acced9e6fe reader-lua-use-absolute-path-to-luajit.patch +" diff --git a/user/koreader/reader-lua-use-absolute-path-to-luajit.patch b/user/koreader/reader-lua-use-absolute-path-to-luajit.patch new file mode 100644 index 0000000..3d25e3f --- /dev/null +++ b/user/koreader/reader-lua-use-absolute-path-to-luajit.patch @@ -0,0 +1,10 @@ +diff --git a/reader.lua.orig b/reader.lua +index 6fe9489..c4cbb2b 100755 +--- a/reader.lua.orig ++++ b/reader.lua +@@ -1,4 +1,4 @@ +-#!./luajit ++#!/usr/lib/koreader/luajit + + -- Enforce line-buffering for stdout (this is the default if it points to a tty, but we redirect to a file on most platforms). + io.stdout:setvbuf("line") From df65efacf1b607bf38818fd1bb28309aa07345e4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 23 Nov 2025 22:34:36 -0500 Subject: [PATCH 687/738] user/skiasharp: new aport --- ...0001-fix-cflags-for-system-freetype2.patch | 25 +++++ .../skiasharp/0002-add-missing-includes.patch | 38 +++++++ user/skiasharp/APKBUILD | 104 ++++++++++++++++++ user/skiasharp/args.gn.in | 19 ++++ 4 files changed, 186 insertions(+) create mode 100644 user/skiasharp/0001-fix-cflags-for-system-freetype2.patch create mode 100644 user/skiasharp/0002-add-missing-includes.patch create mode 100644 user/skiasharp/APKBUILD create mode 100644 user/skiasharp/args.gn.in diff --git a/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch b/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch new file mode 100644 index 0000000..d9464a4 --- /dev/null +++ b/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch @@ -0,0 +1,25 @@ +From 5f2682ed16394ba3e10ab35150c15e265ab0a0db Mon Sep 17 00:00:00 2001 +From: Naomi Rennie-Waldock +Date: Wed, 4 Dec 2024 02:01:11 +0000 +Subject: [PATCH 1/2] fix cflags for system freetype2 + +--- + third_party/freetype2/BUILD.gn | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/third_party/freetype2/BUILD.gn b/third_party/freetype2/BUILD.gn +index d3092c672f..1bf7d9fc62 100644 +--- a/third_party/freetype2/BUILD.gn ++++ b/third_party/freetype2/BUILD.gn +@@ -14,7 +14,7 @@ import("../third_party.gni") + + if (skia_use_system_freetype2) { + system("freetype2") { +- cflags = [ "-I=/usr/include/freetype2" ] ++ cflags = [ "-I/usr/include/freetype2" ] + libs = [ "freetype" ] + } + } else { +-- +2.45.2 + diff --git a/user/skiasharp/0002-add-missing-includes.patch b/user/skiasharp/0002-add-missing-includes.patch new file mode 100644 index 0000000..7ffd79e --- /dev/null +++ b/user/skiasharp/0002-add-missing-includes.patch @@ -0,0 +1,38 @@ +From 4367484b44f349f3f9009a001167c08a61f6934b Mon Sep 17 00:00:00 2001 +From: Naomi Rennie-Waldock +Date: Wed, 4 Dec 2024 02:02:29 +0000 +Subject: [PATCH 2/2] add missing includes + +--- + src/utils/SkParseColor.cpp | 1 + + third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/src/utils/SkParseColor.cpp b/src/utils/SkParseColor.cpp +index 7260365b2c..ed118fb5e9 100644 +--- a/src/utils/SkParseColor.cpp ++++ b/src/utils/SkParseColor.cpp +@@ -6,6 +6,7 @@ + */ + + ++#include + #include "include/utils/SkParse.h" + + static constexpr const char* gColorNames[] = { +diff --git a/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp b/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp +index fb606984bd..4bc9d99420 100644 +--- a/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp ++++ b/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp +@@ -5,6 +5,8 @@ + * found in the LICENSE file. + */ + ++#include ++ + // We use our own functions pointers + #define VMA_STATIC_VULKAN_FUNCTIONS 0 + #define VMA_DYNAMIC_VULKAN_FUNCTIONS 0 +-- +2.45.2 + diff --git a/user/skiasharp/APKBUILD b/user/skiasharp/APKBUILD new file mode 100644 index 0000000..b82e926 --- /dev/null +++ b/user/skiasharp/APKBUILD @@ -0,0 +1,104 @@ +# Contributor: Naomi Rennie-Waldock +# Maintainer: Naomi Rennie-Waldock +pkgname=skiasharp +pkgver=2.88.9 +pkgrel=0 +pkgdesc="2D graphics API for .NET - native library" +url="https://github.com/mono/SkiaSharp" +arch="x86_64 armv7 aarch64" +license="BSD-3-Clause" +_llvmver=21 +_skiaver=2.88.3 +makedepends=" + cmd:awk + cmd:envsubst + clang$_llvmver + llvm$_llvmver + gn + ninja + freetype-dev + fontconfig-dev + libwebp-dev + harfbuzz-dev + cmake + " +subpackages="$pkgname-dbg" +# SkiaSharp currently doesn't work with jpeg-turbo 3.x which we've got packaged +# https://github.com/mono/SkiaSharp/issues/2645 +# https://github.com/libjpeg-turbo/libjpeg-turbo/issues/741 +_jpegturbover=2.1.5.1 +source="https://github.com/mono/SkiaSharp/archive/v$pkgver/SkiaSharp-$pkgver.tar.gz + https://github.com/mono/skia/archive/v$_skiaver/skia-$_skiaver.tar.gz + + args.gn.in + + 0001-fix-cflags-for-system-freetype2.patch + 0002-add-missing-includes.patch + + https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$_jpegturbover/libjpeg-turbo-$_jpegturbover.tar.gz + " +_skiasharpdir="$srcdir/SkiaSharp-$pkgver" +_skiadir="$srcdir/skia-$_skiaver" +_jpegturbodir="$srcdir/libjpeg-turbo-$_jpegturbover" +builddir="$_skiadir" +options="!check" + +prepare() { + default_prepare + + install -d "$builddir"/third_party/externals + rm -f "$builddir"/third_party/externals/libjpeg-turbo + ln -s "$_jpegturbodir" "$builddir"/third_party/externals/libjpeg-turbo + ln -sf "$_jpegturbodir"/jpeg_nbits_table.h "$_jpegturbodir"/jpeg_nbits_table.c +} + +build() { + + export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" + # Generate config for jpeg-turbo + # Note: jpeg-turbo is linked statically as part of SkiaSharp's build process + # We just run cmake first to generate jconfig.h + cd "$_jpegturbodir" + cmake3.5 . \ + -DCMAKE_BUILD_TYPE= \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DWITH_JPEG8=1 + + # Generate build config for SkiaSharp + cd "$builddir" + local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/VERSIONS.txt) + local map="$_skiasharpdir"/native/linux/libSkiaSharp/libSkiaSharp.map + local _skia_arch=$CTARGET_ARCH + + case "$CTARGET_ARCH" in + aarch64) _skia_arch=arm64 ;; + armv7) _skia_arch=arm ;; + x86_64) _skia_arch=x64 ;; + esac + + export soname map _skia_arch _llvmver + + [ -d _build ] || mkdir _build + envsubst < "$srcdir"/args.gn.in > _build/args.gn + + gn gen _build + ninja -j"${JOBS:-1}" -C _build SkiaSharp +} + +package() { + local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/VERSIONS.txt) + + install -Dm644 _build/libSkiaSharp.so.$soname -t "$pkgdir"/usr/lib/ + ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so.${soname%%.*} + ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so +} + +sha512sums=" +c13fb2f2cb8e231f5130e97450e242b910ea098419334303ed0b3391ff264549f9283343be8f5e1a6e59fa7ffe9d9aeb1c2d5607af0fb1fc03af0645b685dff2 SkiaSharp-2.88.9.tar.gz +43b19f6ddefe30ddf37034c73cd23feea28cb9e4a5830f8c526771afa051bdb2a96934f70dc035ca85891992b67b47d1becc6f4bf8768175db8452e144dfd9f1 skia-2.88.3.tar.gz +c1d8eace5078a25a8be5aa92337e1211055fb4d6a1da6f019e8f53871051b56af5cd18f19e0d67a34895402bbd575d233c5b5ad752e3ea5cdc85bfd63a392910 args.gn.in +0c4caa5aff089d314540959f068ca06c5580465be7a4a4abb3db9e1756a8043e14cbd4f8be677cfe4bd837b32115c8fefb2c79cf7bd52dd06fa1cb50e2406756 0001-fix-cflags-for-system-freetype2.patch +7eac411d6f235a450dcccf7d451ecc0d9516761b3cf37d3b0438fa2648b4ce7b0912de16d27221dc1df82fe62efb9287084fce433f1aeae48732da454402dbd7 0002-add-missing-includes.patch +86a7248d064043b26b09755633ef4872a2a6133c9e677a9fe4be6645b2e0fde102cf01e09119967b3b6b85f4cb93f3f7c49ec4973944d5eff99b5b90ce8b0be6 libjpeg-turbo-2.1.5.1.tar.gz +" diff --git a/user/skiasharp/args.gn.in b/user/skiasharp/args.gn.in new file mode 100644 index 0000000..4b7d5dd --- /dev/null +++ b/user/skiasharp/args.gn.in @@ -0,0 +1,19 @@ +is_official_build=true +target_os="linux" +target_cpu="$_skia_arch" +skia_enable_gpu=true +skia_use_icu=false +skia_use_piex=true +skia_use_sfntly=false +skia_enable_skottie=true +skia_enable_tools=false +skia_use_vulkan=true +skia_use_system_libjpeg_turbo=false +# disabled as it's not packaged +skia_use_dng_sdk=false +extra_cflags=[ "-DSKIA_C_DLL" ] +extra_ldflags=[ "-Wl,--version-script=$map" ] +linux_soname_version="$soname" +cc="clang" +cxx="clang++" +ar="llvm-ar" From 16d5ce552fa6cd5024e26363d8e067d25814f15a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 23 Nov 2025 22:34:46 -0500 Subject: [PATCH 688/738] user/jellyfin: new aport --- user/jellyfin/APKBUILD | 50 +++++++++++++++++++++ user/jellyfin/jellyfin.confd | 7 +++ user/jellyfin/jellyfin.initd | 20 +++++++++ user/jellyfin/jellyfin.pre-install | 9 ++++ user/jellyfin/remove-prebuilt-library.patch | 32 +++++++++++++ 5 files changed, 118 insertions(+) create mode 100644 user/jellyfin/APKBUILD create mode 100644 user/jellyfin/jellyfin.confd create mode 100644 user/jellyfin/jellyfin.initd create mode 100644 user/jellyfin/jellyfin.pre-install create mode 100644 user/jellyfin/remove-prebuilt-library.patch diff --git a/user/jellyfin/APKBUILD b/user/jellyfin/APKBUILD new file mode 100644 index 0000000..edc9907 --- /dev/null +++ b/user/jellyfin/APKBUILD @@ -0,0 +1,50 @@ +# Maintainer: Simon Zeni +# Contributor: Fabricio Silva +pkgname=jellyfin +pkgver=10.10.7 +pkgrel=1 +pkgdesc="The Free Software Media System" +install="$pkgname.pre-install" +url="https://jellyfin.org/" +arch="x86_64 armv7 aarch64" +license="GPL-2.0-only" +makedepends="dotnet8-sdk" +depends="aspnetcore8-runtime jellyfin-ffmpeg skiasharp" +subpackages="$pkgname-openrc" +source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin/archive/refs/tags/v$pkgver.tar.gz + $pkgname.initd + $pkgname.confd +remove-prebuilt-library.patch + " + +build() { + dotnet publish Jellyfin.Server \ + --configuration Release \ + --no-self-contained \ + --use-current-runtime \ + --output publish +} + +check() { + dotnet test --no-restore +} + +package() { + mkdir -p "$pkgdir"/usr/lib "$pkgdir"/usr/bin + + cp -a publish "$pkgdir"/usr/lib/jellyfin + ln -s ../lib/jellyfin/jellyfin "$pkgdir"/usr/bin/jellyfin + ln -s ../libSkiaSharp.so "$pkgdir"/usr/lib/jellyfin/libSkiaSharp.so + + install -Dm755 "$srcdir"/$pkgname.initd \ + "$pkgdir"/etc/init.d/$pkgname + install -Dm644 "$srcdir"/$pkgname.confd \ + "$pkgdir"/etc/conf.d/$pkgname +} + +sha512sums=" +6c48401f4acf509b69fb6b8916be54b1b697aa85308ac4a39345bef0ce61c78c4ad978650569ac0964eeb9389fdea249ffc279a37bcd49c0341d3825423f5a97 jellyfin-10.10.7.tar.gz +bcdb882b837a08e4c1db363fbf2a075f0d6558a537c3f798b1473f9f1b5b887b6da1928558b0aede8bf56ab16469ac9e80dc95b0f874533ad744465a92b37696 jellyfin.initd +594c26e5235ae2265f3f586f596cd6b57fa0e0cec83531b6fadba48181870167f04381266c6005f1f6cb5cd76d254100a08a871ecb8da28e5890f979816a7b8b jellyfin.confd +50b9535d7b2dbebf7fbda1dc2d88941dad5530c8ab3e8e07c1203c328af426816036b5e6b4d6deb69fa344611bc18785cf8593d7d990a1cbfae0e14c9324b592 remove-prebuilt-library.patch +" diff --git a/user/jellyfin/jellyfin.confd b/user/jellyfin/jellyfin.confd new file mode 100644 index 0000000..38c0def --- /dev/null +++ b/user/jellyfin/jellyfin.confd @@ -0,0 +1,7 @@ +supervisor=supervise-daemon +datadir="/var/lib/jellyfin" +cachedir="/var/cache/jellyfin" +logdir="/var/log/jellyfin" +webdir="/usr/share/webapps/jellyfin-web" +ffmpegpath="/usr/lib/jellyfin-ffmpeg/ffmpeg" +opts="--nowebclient" diff --git a/user/jellyfin/jellyfin.initd b/user/jellyfin/jellyfin.initd new file mode 100644 index 0000000..4641de7 --- /dev/null +++ b/user/jellyfin/jellyfin.initd @@ -0,0 +1,20 @@ +#!/sbin/openrc-run + +name=jellyfin +description="The Free Software Media System" + +command=/usr/bin/jellyfin +command_user=jellyfin:jellyfin +command_args="--webdir ${webdir:-/usr/share/webapps/jellyfin-web} --datadir ${datadir} --cachedir ${cachedir} --logdir ${logdir} --ffmpeg ${ffmpegpath:-/usr/lib/jellyfin-ffmpeg/ffmpeg} ${opts}" + +depend() { + use logger dns + need net + after firewall +} + +start_pre() { + checkpath -d -o $command_user "$datadir" + checkpath -d -o $command_user "$cachedir" + checkpath -d -o $command_user "$logdir" +} diff --git a/user/jellyfin/jellyfin.pre-install b/user/jellyfin/jellyfin.pre-install new file mode 100644 index 0000000..6e64716 --- /dev/null +++ b/user/jellyfin/jellyfin.pre-install @@ -0,0 +1,9 @@ +#!/bin/sh + +user=jellyfin +group=jellyfin + +addgroup -S $group 2>/dev/null +adduser -S -D -h /var/lib/$user -s /sbin/nologin -G $group -g $user $user 2>/dev/null + +exit 0 diff --git a/user/jellyfin/remove-prebuilt-library.patch b/user/jellyfin/remove-prebuilt-library.patch new file mode 100644 index 0000000..09dc3a3 --- /dev/null +++ b/user/jellyfin/remove-prebuilt-library.patch @@ -0,0 +1,32 @@ +diff -urp jellyfin-10.10.3.bak/Directory.Packages.props jellyfin-10.10.3/Directory.Packages.props +--- jellyfin-10.10.3.bak/Directory.Packages.props 2024-11-19 03:38:42.000000000 +0000 ++++ jellyfin-10.10.3/Directory.Packages.props 2024-12-04 02:20:12.294901276 +0000 +@@ -17,7 +17,6 @@ + + + +- + + + +@@ -68,7 +67,6 @@ + + + +- + + + +diff -urp jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj jellyfin-10.10.3/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj +--- jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj 2024-11-19 03:38:42.000000000 +0000 ++++ jellyfin-10.10.3/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj 2024-12-04 02:21:05.773987361 +0000 +@@ -20,9 +20,7 @@ + + + +- + +- + + + From 42d2681350751d89eea4ae916c36c1c543e56786 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 23 Nov 2025 22:34:53 -0500 Subject: [PATCH 689/738] user/jellyfin-web: new aport --- user/jellyfin-web/APKBUILD | 38 +++++++++++++++++++++ user/jellyfin-web/jellyfin-web.post-install | 6 ++++ 2 files changed, 44 insertions(+) create mode 100644 user/jellyfin-web/APKBUILD create mode 100644 user/jellyfin-web/jellyfin-web.post-install diff --git a/user/jellyfin-web/APKBUILD b/user/jellyfin-web/APKBUILD new file mode 100644 index 0000000..243f026 --- /dev/null +++ b/user/jellyfin-web/APKBUILD @@ -0,0 +1,38 @@ +# Maintainer: Simon Zeni +pkgname=jellyfin-web +pkgver=10.10.7 +pkgrel=0 +pkgdesc="Web Client for Jellyfin" +url="https://jellyfin.org/" +# armv7: oom +arch="x86_64 armv7 aarch64" +options="net" # net for npm +license="GPL-2.0-only" +install="$pkgname.post-install" +depends="jellyfin" +makedepends="npm" +source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin-web/archive/refs/tags/v$pkgver.tar.gz" + +prepare() { + default_prepare + + npm ci --no-audit +} + +build() { + npm run build:production +} + +check() { + npm test +} + +package() { + mkdir -p "$pkgdir"/usr/share/webapps/jellyfin-web + + cp -r "$builddir"/dist/* "$pkgdir"/usr/share/webapps/jellyfin-web +} + +sha512sums=" +43836cdc15957889b4ec764f68893ff6131fa4ae1991ac0e5a4991817c491d870783b2e713883b423f30208abad1b77f1856ccaeb5008e6ba56a9bf305a1b5bd jellyfin-web-10.10.7.tar.gz +" diff --git a/user/jellyfin-web/jellyfin-web.post-install b/user/jellyfin-web/jellyfin-web.post-install new file mode 100644 index 0000000..a6e6942 --- /dev/null +++ b/user/jellyfin-web/jellyfin-web.post-install @@ -0,0 +1,6 @@ +#!/bin/sh + +printf " *\n * The default jellyfin configuration does not enable the web ui.\n" +printf " * Remove the '--nowebclient' option from /etc/conf.d/jellyfin to enable it.\n *\n" + +exit 0 From 6770f6babbeebc553e573f4e23a93f780e0a3cfe Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Fri, 28 Nov 2025 17:57:01 -0500 Subject: [PATCH 690/738] user/jellyfin-web: upgrade to 10.11.3 --- user/jellyfin-web/APKBUILD | 8 +++++--- user/jellyfin-web/bump-npm-requirement.patch | 13 +++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 user/jellyfin-web/bump-npm-requirement.patch diff --git a/user/jellyfin-web/APKBUILD b/user/jellyfin-web/APKBUILD index 243f026..44f8c19 100644 --- a/user/jellyfin-web/APKBUILD +++ b/user/jellyfin-web/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Simon Zeni pkgname=jellyfin-web -pkgver=10.10.7 +pkgver=10.11.3 pkgrel=0 pkgdesc="Web Client for Jellyfin" url="https://jellyfin.org/" @@ -11,7 +11,8 @@ license="GPL-2.0-only" install="$pkgname.post-install" depends="jellyfin" makedepends="npm" -source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin-web/archive/refs/tags/v$pkgver.tar.gz" +source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin-web/archive/refs/tags/v$pkgver.tar.gz + bump-npm-requirement.patch" prepare() { default_prepare @@ -34,5 +35,6 @@ package() { } sha512sums=" -43836cdc15957889b4ec764f68893ff6131fa4ae1991ac0e5a4991817c491d870783b2e713883b423f30208abad1b77f1856ccaeb5008e6ba56a9bf305a1b5bd jellyfin-web-10.10.7.tar.gz +ef85a77bc0dbba01a877c35627138f0e5eda9bb8ba3eb5ae79997e97b5829af8063e5666f6c77d599791633791eb318de057155d0b36e3934bbd18ff4a4e641b jellyfin-web-10.11.3.tar.gz +93e028def9e44cbe939b530754e279481d5c805014786fd141456c153a4ddd6f4fe440ef44a965ddb9d08cccf81c9bbdaa24a5600aaa76a19a8f013a936dd35e bump-npm-requirement.patch " diff --git a/user/jellyfin-web/bump-npm-requirement.patch b/user/jellyfin-web/bump-npm-requirement.patch new file mode 100644 index 0000000..3731eb2 --- /dev/null +++ b/user/jellyfin-web/bump-npm-requirement.patch @@ -0,0 +1,13 @@ +diff --git a/package.json b/package.json +index f46cb3b95..096c28562 100644 +--- a/package.json ++++ b/package.json +@@ -168,7 +168,7 @@ + }, + "engines": { + "node": ">=20.0.0", +- "npm": ">=9.6.4 <11.0.0", ++ "npm": ">=9.6.4", + "yarn": "YARN NO LONGER USED - use npm instead." + } + } From 749f413ab889787dea39699dd3aa6cbf59b96d5f Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 15:01:20 -0500 Subject: [PATCH 691/738] user/skiasharp: upgrade to 3.119.1 --- ...0001-fix-cflags-for-system-freetype2.patch | 32 ++++-------- .../skiasharp/0002-add-missing-includes.patch | 12 ----- user/skiasharp/APKBUILD | 51 ++++++------------- user/skiasharp/args.gn.in | 6 +-- 4 files changed, 28 insertions(+), 73 deletions(-) diff --git a/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch b/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch index d9464a4..2e3ef7a 100644 --- a/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch +++ b/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch @@ -1,25 +1,13 @@ -From 5f2682ed16394ba3e10ab35150c15e265ab0a0db Mon Sep 17 00:00:00 2001 -From: Naomi Rennie-Waldock -Date: Wed, 4 Dec 2024 02:01:11 +0000 -Subject: [PATCH 1/2] fix cflags for system freetype2 - ---- - third_party/freetype2/BUILD.gn | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/third_party/freetype2/BUILD.gn b/third_party/freetype2/BUILD.gn -index d3092c672f..1bf7d9fc62 100644 ---- a/third_party/freetype2/BUILD.gn +diff --git a/third_party/freetype2/BUILD.gn.orig b/third_party/freetype2/BUILD.gn +index 60d7954..a8cd633 100644 +--- a/third_party/freetype2/BUILD.gn.orig +++ b/third_party/freetype2/BUILD.gn -@@ -14,7 +14,7 @@ import("../third_party.gni") - - if (skia_use_system_freetype2) { - system("freetype2") { -- cflags = [ "-I=/usr/include/freetype2" ] -+ cflags = [ "-I/usr/include/freetype2" ] - libs = [ "freetype" ] +@@ -26,7 +26,7 @@ if (skia_use_system_freetype2) { + include_dirs = [ skia_system_freetype2_include_path ] + libs = [ skia_system_freetype2_lib ] + if (is_tizen) { +- cflags = [ "-I=$skia_system_freetype2_include_path" ] ++ cflags = [ "-I$skia_system_freetype2_include_path" ] + } } } else { --- -2.45.2 - diff --git a/user/skiasharp/0002-add-missing-includes.patch b/user/skiasharp/0002-add-missing-includes.patch index 7ffd79e..b6b2891 100644 --- a/user/skiasharp/0002-add-missing-includes.patch +++ b/user/skiasharp/0002-add-missing-includes.patch @@ -8,18 +8,6 @@ Subject: [PATCH 2/2] add missing includes third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp | 2 ++ 2 files changed, 3 insertions(+) -diff --git a/src/utils/SkParseColor.cpp b/src/utils/SkParseColor.cpp -index 7260365b2c..ed118fb5e9 100644 ---- a/src/utils/SkParseColor.cpp -+++ b/src/utils/SkParseColor.cpp -@@ -6,6 +6,7 @@ - */ - - -+#include - #include "include/utils/SkParse.h" - - static constexpr const char* gColorNames[] = { diff --git a/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp b/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp index fb606984bd..4bc9d99420 100644 --- a/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp diff --git a/user/skiasharp/APKBUILD b/user/skiasharp/APKBUILD index b82e926..5412c72 100644 --- a/user/skiasharp/APKBUILD +++ b/user/skiasharp/APKBUILD @@ -1,14 +1,15 @@ # Contributor: Naomi Rennie-Waldock # Maintainer: Naomi Rennie-Waldock pkgname=skiasharp -pkgver=2.88.9 +pkgver=3.119.1 pkgrel=0 pkgdesc="2D graphics API for .NET - native library" url="https://github.com/mono/SkiaSharp" arch="x86_64 armv7 aarch64" license="BSD-3-Clause" _llvmver=21 -_skiaver=2.88.3 +# track commit in git repo under externals/skia +_skiacommit=40f75dc0051d141913c07c20d4c19590c7da0cb7 makedepends=" cmd:awk cmd:envsubst @@ -19,55 +20,34 @@ makedepends=" freetype-dev fontconfig-dev libwebp-dev + libjpeg-turbo-dev harfbuzz-dev cmake " subpackages="$pkgname-dbg" -# SkiaSharp currently doesn't work with jpeg-turbo 3.x which we've got packaged -# https://github.com/mono/SkiaSharp/issues/2645 -# https://github.com/libjpeg-turbo/libjpeg-turbo/issues/741 -_jpegturbover=2.1.5.1 source="https://github.com/mono/SkiaSharp/archive/v$pkgver/SkiaSharp-$pkgver.tar.gz - https://github.com/mono/skia/archive/v$_skiaver/skia-$_skiaver.tar.gz + skia-$_skiacommit.tar.gz::https://github.com/mono/skia/archive/$_skiacommit.tar.gz args.gn.in 0001-fix-cflags-for-system-freetype2.patch 0002-add-missing-includes.patch - - https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/$_jpegturbover/libjpeg-turbo-$_jpegturbover.tar.gz " _skiasharpdir="$srcdir/SkiaSharp-$pkgver" -_skiadir="$srcdir/skia-$_skiaver" -_jpegturbodir="$srcdir/libjpeg-turbo-$_jpegturbover" +_skiadir="$srcdir/skia-$_skiacommit" builddir="$_skiadir" options="!check" prepare() { default_prepare - install -d "$builddir"/third_party/externals - rm -f "$builddir"/third_party/externals/libjpeg-turbo - ln -s "$_jpegturbodir" "$builddir"/third_party/externals/libjpeg-turbo - ln -sf "$_jpegturbodir"/jpeg_nbits_table.h "$_jpegturbodir"/jpeg_nbits_table.c + # fetch dependencies + ./tools/git-sync-deps } build() { - export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" - # Generate config for jpeg-turbo - # Note: jpeg-turbo is linked statically as part of SkiaSharp's build process - # We just run cmake first to generate jconfig.h - cd "$_jpegturbodir" - cmake3.5 . \ - -DCMAKE_BUILD_TYPE= \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DWITH_JPEG8=1 - - # Generate build config for SkiaSharp - cd "$builddir" - local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/VERSIONS.txt) + local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/scripts/VERSIONS.txt) local map="$_skiasharpdir"/native/linux/libSkiaSharp/libSkiaSharp.map local _skia_arch=$CTARGET_ARCH @@ -87,7 +67,7 @@ build() { } package() { - local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/VERSIONS.txt) + local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/scripts/VERSIONS.txt) install -Dm644 _build/libSkiaSharp.so.$soname -t "$pkgdir"/usr/lib/ ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so.${soname%%.*} @@ -95,10 +75,9 @@ package() { } sha512sums=" -c13fb2f2cb8e231f5130e97450e242b910ea098419334303ed0b3391ff264549f9283343be8f5e1a6e59fa7ffe9d9aeb1c2d5607af0fb1fc03af0645b685dff2 SkiaSharp-2.88.9.tar.gz -43b19f6ddefe30ddf37034c73cd23feea28cb9e4a5830f8c526771afa051bdb2a96934f70dc035ca85891992b67b47d1becc6f4bf8768175db8452e144dfd9f1 skia-2.88.3.tar.gz -c1d8eace5078a25a8be5aa92337e1211055fb4d6a1da6f019e8f53871051b56af5cd18f19e0d67a34895402bbd575d233c5b5ad752e3ea5cdc85bfd63a392910 args.gn.in -0c4caa5aff089d314540959f068ca06c5580465be7a4a4abb3db9e1756a8043e14cbd4f8be677cfe4bd837b32115c8fefb2c79cf7bd52dd06fa1cb50e2406756 0001-fix-cflags-for-system-freetype2.patch -7eac411d6f235a450dcccf7d451ecc0d9516761b3cf37d3b0438fa2648b4ce7b0912de16d27221dc1df82fe62efb9287084fce433f1aeae48732da454402dbd7 0002-add-missing-includes.patch -86a7248d064043b26b09755633ef4872a2a6133c9e677a9fe4be6645b2e0fde102cf01e09119967b3b6b85f4cb93f3f7c49ec4973944d5eff99b5b90ce8b0be6 libjpeg-turbo-2.1.5.1.tar.gz +cf9c292edebe972e318f9a807216a5e26053e2cf4b56c4dd0b6a0c7c046a2cec67ae65550fb0e5656ae0fd0b372f5a70dcc4a8704ffe1690f5a8fbc1abadf95b SkiaSharp-3.119.1.tar.gz +ee27e49434a5fe2efb2565e80dd682b6f4e91bb15d1e13f635a1d658929262bc069d04bdf49baf98b62a0425cc9353f3365cb7557c83a03b05381acb2acb2e0d skia-40f75dc0051d141913c07c20d4c19590c7da0cb7.tar.gz +b2b87cec448f5ce777d28c9e865621a121d2f32dc9d9b31d254781fc288d69e4a3a5276664d16f1ecc5eaf9963404657ad0770aeabe14c5a127847262694efd2 args.gn.in +3c6543aa126ba395d32f6831feb5121b151c89b2770589858d5b7820e1fc4d94aa2d89da4e954472b5f3fe9194448f72535b23d2f2815f90d6a9e7ae022fb42f 0001-fix-cflags-for-system-freetype2.patch +44c0044c72ccd9a5a3f679f1fe548264a779c87726d2af448c711d5c2f9b003b69056e0b231e87193d91c66416dc613be992808172522b27d02807845d30f463 0002-add-missing-includes.patch " diff --git a/user/skiasharp/args.gn.in b/user/skiasharp/args.gn.in index 4b7d5dd..cd93cd3 100644 --- a/user/skiasharp/args.gn.in +++ b/user/skiasharp/args.gn.in @@ -2,13 +2,13 @@ is_official_build=true target_os="linux" target_cpu="$_skia_arch" skia_enable_gpu=true -skia_use_icu=false +skia_use_icu=true skia_use_piex=true -skia_use_sfntly=false +skia_use_sfntly=true skia_enable_skottie=true skia_enable_tools=false skia_use_vulkan=true -skia_use_system_libjpeg_turbo=false +skia_use_system_libjpeg_turbo=true # disabled as it's not packaged skia_use_dng_sdk=false extra_cflags=[ "-DSKIA_C_DLL" ] From f45c1e54db385a1f4d717ad808de3ce954a422d5 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 15:01:32 -0500 Subject: [PATCH 692/738] user/jellyfin: upgrade to 10.11.3 --- user/jellyfin/APKBUILD | 16 +++++---- user/jellyfin/remove-prebuilt-library.patch | 39 +++++++++++---------- user/jellyfin/use-skiasharp-3-119-1.patch | 16 +++++++++ 3 files changed, 45 insertions(+), 26 deletions(-) create mode 100644 user/jellyfin/use-skiasharp-3-119-1.patch diff --git a/user/jellyfin/APKBUILD b/user/jellyfin/APKBUILD index edc9907..f3621b0 100644 --- a/user/jellyfin/APKBUILD +++ b/user/jellyfin/APKBUILD @@ -1,20 +1,21 @@ # Maintainer: Simon Zeni # Contributor: Fabricio Silva pkgname=jellyfin -pkgver=10.10.7 -pkgrel=1 +pkgver=10.11.3 +pkgrel=0 pkgdesc="The Free Software Media System" install="$pkgname.pre-install" url="https://jellyfin.org/" arch="x86_64 armv7 aarch64" license="GPL-2.0-only" -makedepends="dotnet8-sdk" -depends="aspnetcore8-runtime jellyfin-ffmpeg skiasharp" +makedepends="dotnet9-sdk" +depends="aspnetcore9-runtime jellyfin-ffmpeg skiasharp" subpackages="$pkgname-openrc" source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin/archive/refs/tags/v$pkgver.tar.gz $pkgname.initd $pkgname.confd -remove-prebuilt-library.patch + remove-prebuilt-library.patch + use-skiasharp-3-119-1.patch " build() { @@ -43,8 +44,9 @@ package() { } sha512sums=" -6c48401f4acf509b69fb6b8916be54b1b697aa85308ac4a39345bef0ce61c78c4ad978650569ac0964eeb9389fdea249ffc279a37bcd49c0341d3825423f5a97 jellyfin-10.10.7.tar.gz +2dd7d2cebc5eed57ab4d38a3004f255a3239a0c23d2d133ab6e0d6a9495fc2e774749af5f53d15968af957e5e96255e1b82089e93101feba78d7800973eb4ac6 jellyfin-10.11.3.tar.gz bcdb882b837a08e4c1db363fbf2a075f0d6558a537c3f798b1473f9f1b5b887b6da1928558b0aede8bf56ab16469ac9e80dc95b0f874533ad744465a92b37696 jellyfin.initd 594c26e5235ae2265f3f586f596cd6b57fa0e0cec83531b6fadba48181870167f04381266c6005f1f6cb5cd76d254100a08a871ecb8da28e5890f979816a7b8b jellyfin.confd -50b9535d7b2dbebf7fbda1dc2d88941dad5530c8ab3e8e07c1203c328af426816036b5e6b4d6deb69fa344611bc18785cf8593d7d990a1cbfae0e14c9324b592 remove-prebuilt-library.patch +fc0bbeab0f37f8d483d7c1b7d9162bf5cbeb79fa82e7b652bf712c07332d8cbcceb80bc21ccaceaa8a10196c3dd9ddcf33977e3baedcd5e3fd5b5cd5a3b60f1a remove-prebuilt-library.patch +cc81a9b0f83914a35d96c68067311eea4c4aaca1f921da9dbb7ff37a06833b6124b48da15d33c44cce5323c1b3f278e96584af66aa491850d4fc5f9d3cd57630 use-skiasharp-3-119-1.patch " diff --git a/user/jellyfin/remove-prebuilt-library.patch b/user/jellyfin/remove-prebuilt-library.patch index 09dc3a3..7efbaf0 100644 --- a/user/jellyfin/remove-prebuilt-library.patch +++ b/user/jellyfin/remove-prebuilt-library.patch @@ -1,22 +1,3 @@ -diff -urp jellyfin-10.10.3.bak/Directory.Packages.props jellyfin-10.10.3/Directory.Packages.props ---- jellyfin-10.10.3.bak/Directory.Packages.props 2024-11-19 03:38:42.000000000 +0000 -+++ jellyfin-10.10.3/Directory.Packages.props 2024-12-04 02:20:12.294901276 +0000 -@@ -17,7 +17,6 @@ - - - -- - - - -@@ -68,7 +67,6 @@ - - - -- - - - diff -urp jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj jellyfin-10.10.3/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj --- jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj 2024-11-19 03:38:42.000000000 +0000 +++ jellyfin-10.10.3/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj 2024-12-04 02:21:05.773987361 +0000 @@ -30,3 +11,23 @@ diff -urp jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.c +diff --git a/Directory.Packages.props.orig b/Directory.Packages.props +index dc3e7d7..275ba3c 100644 +--- a/Directory.Packages.props.orig ++++ b/Directory.Packages.props +@@ -18,7 +18,6 @@ + + + +- + + + +@@ -76,7 +75,6 @@ + + + +- + + + diff --git a/user/jellyfin/use-skiasharp-3-119-1.patch b/user/jellyfin/use-skiasharp-3-119-1.patch new file mode 100644 index 0000000..5068d4a --- /dev/null +++ b/user/jellyfin/use-skiasharp-3-119-1.patch @@ -0,0 +1,16 @@ +diff --git a/Directory.Packages.props.orig b/Directory.Packages.props +index 275ba3c..18cc64a 100644 +--- a/Directory.Packages.props.orig ++++ b/Directory.Packages.props +@@ -72,9 +72,8 @@ + + + +- +- +- ++ ++ + + + From 73ebcb7fcc409860e2b54b3e9c35ad23a0790bdc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 17:48:04 -0500 Subject: [PATCH 693/738] user/skiasharp: use vendored libjpeg-turbo --- user/skiasharp/APKBUILD | 4 ++-- user/skiasharp/args.gn.in | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/user/skiasharp/APKBUILD b/user/skiasharp/APKBUILD index 5412c72..8f48938 100644 --- a/user/skiasharp/APKBUILD +++ b/user/skiasharp/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Naomi Rennie-Waldock pkgname=skiasharp pkgver=3.119.1 -pkgrel=0 +pkgrel=1 pkgdesc="2D graphics API for .NET - native library" url="https://github.com/mono/SkiaSharp" arch="x86_64 armv7 aarch64" @@ -77,7 +77,7 @@ package() { sha512sums=" cf9c292edebe972e318f9a807216a5e26053e2cf4b56c4dd0b6a0c7c046a2cec67ae65550fb0e5656ae0fd0b372f5a70dcc4a8704ffe1690f5a8fbc1abadf95b SkiaSharp-3.119.1.tar.gz ee27e49434a5fe2efb2565e80dd682b6f4e91bb15d1e13f635a1d658929262bc069d04bdf49baf98b62a0425cc9353f3365cb7557c83a03b05381acb2acb2e0d skia-40f75dc0051d141913c07c20d4c19590c7da0cb7.tar.gz -b2b87cec448f5ce777d28c9e865621a121d2f32dc9d9b31d254781fc288d69e4a3a5276664d16f1ecc5eaf9963404657ad0770aeabe14c5a127847262694efd2 args.gn.in +705945ca1cd1b6922a2491ef1ab17b3899334b5b30fb236ced09f7383779184d1c670698874602da3d367bcf35297e14bc6a362ed85f19f8ecc5209fb2918917 args.gn.in 3c6543aa126ba395d32f6831feb5121b151c89b2770589858d5b7820e1fc4d94aa2d89da4e954472b5f3fe9194448f72535b23d2f2815f90d6a9e7ae022fb42f 0001-fix-cflags-for-system-freetype2.patch 44c0044c72ccd9a5a3f679f1fe548264a779c87726d2af448c711d5c2f9b003b69056e0b231e87193d91c66416dc613be992808172522b27d02807845d30f463 0002-add-missing-includes.patch " diff --git a/user/skiasharp/args.gn.in b/user/skiasharp/args.gn.in index cd93cd3..b88b358 100644 --- a/user/skiasharp/args.gn.in +++ b/user/skiasharp/args.gn.in @@ -8,7 +8,7 @@ skia_use_sfntly=true skia_enable_skottie=true skia_enable_tools=false skia_use_vulkan=true -skia_use_system_libjpeg_turbo=true +skia_use_system_libjpeg_turbo=false # disabled as it's not packaged skia_use_dng_sdk=false extra_cflags=[ "-DSKIA_C_DLL" ] From c25b332251b34b85fa1458779afa881dca01687c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 19:47:40 -0500 Subject: [PATCH 694/738] user/skiasharp: use preprocessed tar --- ....patch => 0001-add-missing-includes.patch} | 6 +-- ...0001-fix-cflags-for-system-freetype2.patch | 13 ----- user/skiasharp/APKBUILD | 51 ++++++++----------- 3 files changed, 23 insertions(+), 47 deletions(-) rename user/skiasharp/{0002-add-missing-includes.patch => 0001-add-missing-includes.patch} (65%) delete mode 100644 user/skiasharp/0001-fix-cflags-for-system-freetype2.patch diff --git a/user/skiasharp/0002-add-missing-includes.patch b/user/skiasharp/0001-add-missing-includes.patch similarity index 65% rename from user/skiasharp/0002-add-missing-includes.patch rename to user/skiasharp/0001-add-missing-includes.patch index b6b2891..4a840e8 100644 --- a/user/skiasharp/0002-add-missing-includes.patch +++ b/user/skiasharp/0001-add-missing-includes.patch @@ -8,10 +8,10 @@ Subject: [PATCH 2/2] add missing includes third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp | 2 ++ 2 files changed, 3 insertions(+) -diff --git a/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp b/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp +diff --git a/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp b/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp index fb606984bd..4bc9d99420 100644 ---- a/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp -+++ b/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp +--- a/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp ++++ b/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp @@ -5,6 +5,8 @@ * found in the LICENSE file. */ diff --git a/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch b/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch deleted file mode 100644 index 2e3ef7a..0000000 --- a/user/skiasharp/0001-fix-cflags-for-system-freetype2.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/third_party/freetype2/BUILD.gn.orig b/third_party/freetype2/BUILD.gn -index 60d7954..a8cd633 100644 ---- a/third_party/freetype2/BUILD.gn.orig -+++ b/third_party/freetype2/BUILD.gn -@@ -26,7 +26,7 @@ if (skia_use_system_freetype2) { - include_dirs = [ skia_system_freetype2_include_path ] - libs = [ skia_system_freetype2_lib ] - if (is_tizen) { -- cflags = [ "-I=$skia_system_freetype2_include_path" ] -+ cflags = [ "-I$skia_system_freetype2_include_path" ] - } - } - } else { diff --git a/user/skiasharp/APKBUILD b/user/skiasharp/APKBUILD index 8f48938..62ecc16 100644 --- a/user/skiasharp/APKBUILD +++ b/user/skiasharp/APKBUILD @@ -1,5 +1,5 @@ # Contributor: Naomi Rennie-Waldock -# Maintainer: Naomi Rennie-Waldock +# Maintainer: Antoine Martin (ayakael) pkgname=skiasharp pkgver=3.119.1 pkgrel=1 @@ -8,8 +8,6 @@ url="https://github.com/mono/SkiaSharp" arch="x86_64 armv7 aarch64" license="BSD-3-Clause" _llvmver=21 -# track commit in git repo under externals/skia -_skiacommit=40f75dc0051d141913c07c20d4c19590c7da0cb7 makedepends=" cmd:awk cmd:envsubst @@ -23,32 +21,21 @@ makedepends=" libjpeg-turbo-dev harfbuzz-dev cmake + zstd " subpackages="$pkgname-dbg" -source="https://github.com/mono/SkiaSharp/archive/v$pkgver/SkiaSharp-$pkgver.tar.gz - skia-$_skiacommit.tar.gz::https://github.com/mono/skia/archive/$_skiacommit.tar.gz - +source=" + https://ayakael.net/api/packages/mirrors/generic/skiasharp/v$pkgver/skiasharp-v$pkgver.tar.zst args.gn.in - - 0001-fix-cflags-for-system-freetype2.patch - 0002-add-missing-includes.patch + 0001-add-missing-includes.patch " -_skiasharpdir="$srcdir/SkiaSharp-$pkgver" -_skiadir="$srcdir/skia-$_skiacommit" -builddir="$_skiadir" +builddir="$srcdir"/skiasharp-v$pkgver options="!check" -prepare() { - default_prepare - - # fetch dependencies - ./tools/git-sync-deps -} - build() { export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" - local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/scripts/VERSIONS.txt) - local map="$_skiasharpdir"/native/linux/libSkiaSharp/libSkiaSharp.map + local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$builddir"/scripts/VERSIONS.txt) + local map="$builddir"/native/linux/libSkiaSharp/libSkiaSharp.map local _skia_arch=$CTARGET_ARCH case "$CTARGET_ARCH" in @@ -59,25 +46,27 @@ build() { export soname map _skia_arch _llvmver - [ -d _build ] || mkdir _build - envsubst < "$srcdir"/args.gn.in > _build/args.gn + ( + cd externals/skia - gn gen _build - ninja -j"${JOBS:-1}" -C _build SkiaSharp + [ -d _build ] || mkdir _build + envsubst < "$srcdir"/args.gn.in > _build/args.gn + + gn gen _build + ninja -j"${JOBS:-1}" -C _build SkiaSharp + ) } package() { - local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$_skiasharpdir"/scripts/VERSIONS.txt) + local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$builddir"/scripts/VERSIONS.txt) - install -Dm644 _build/libSkiaSharp.so.$soname -t "$pkgdir"/usr/lib/ + install -Dm644 "$builddir"/externals/skia/_build/libSkiaSharp.so.$soname -t "$pkgdir"/usr/lib/ ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so.${soname%%.*} ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so } sha512sums=" -cf9c292edebe972e318f9a807216a5e26053e2cf4b56c4dd0b6a0c7c046a2cec67ae65550fb0e5656ae0fd0b372f5a70dcc4a8704ffe1690f5a8fbc1abadf95b SkiaSharp-3.119.1.tar.gz -ee27e49434a5fe2efb2565e80dd682b6f4e91bb15d1e13f635a1d658929262bc069d04bdf49baf98b62a0425cc9353f3365cb7557c83a03b05381acb2acb2e0d skia-40f75dc0051d141913c07c20d4c19590c7da0cb7.tar.gz +f46ae10474cbf66de5d86a6041e682ebaa7c68d640836ba283023d4d5787ddfa32ae7853b2e19da1ec5a65e40f4ae71d11e55721f6e0ed136b7bbd8477464564 skiasharp-v3.119.1.tar.zst 705945ca1cd1b6922a2491ef1ab17b3899334b5b30fb236ced09f7383779184d1c670698874602da3d367bcf35297e14bc6a362ed85f19f8ecc5209fb2918917 args.gn.in -3c6543aa126ba395d32f6831feb5121b151c89b2770589858d5b7820e1fc4d94aa2d89da4e954472b5f3fe9194448f72535b23d2f2815f90d6a9e7ae022fb42f 0001-fix-cflags-for-system-freetype2.patch -44c0044c72ccd9a5a3f679f1fe548264a779c87726d2af448c711d5c2f9b003b69056e0b231e87193d91c66416dc613be992808172522b27d02807845d30f463 0002-add-missing-includes.patch +a189922f8870352223b2aa9b922167398513333f6f82627b0499d7ca7fbeb211f0f5b192e5caad5b4eb9ebbb49de16f41c691309c3d41b3b19dc17cd13cf18b8 0001-add-missing-includes.patch " From 23bcbc75138e5c8b9e5028d0926100b5d8368e62 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 19:48:20 -0500 Subject: [PATCH 695/738] user/jellyfin: set skiasharp version dynamically --- user/jellyfin/APKBUILD | 17 +++++++++++++---- user/jellyfin/use-skiasharp-3-119-1.patch | 16 ---------------- 2 files changed, 13 insertions(+), 20 deletions(-) delete mode 100644 user/jellyfin/use-skiasharp-3-119-1.patch diff --git a/user/jellyfin/APKBUILD b/user/jellyfin/APKBUILD index f3621b0..0fb06df 100644 --- a/user/jellyfin/APKBUILD +++ b/user/jellyfin/APKBUILD @@ -1,5 +1,5 @@ -# Maintainer: Simon Zeni # Contributor: Fabricio Silva +# Maintainer: Simon Zeni pkgname=jellyfin pkgver=10.11.3 pkgrel=0 @@ -8,16 +8,26 @@ install="$pkgname.pre-install" url="https://jellyfin.org/" arch="x86_64 armv7 aarch64" license="GPL-2.0-only" -makedepends="dotnet9-sdk" +makedepends="dotnet9-sdk gawk" depends="aspnetcore9-runtime jellyfin-ffmpeg skiasharp" subpackages="$pkgname-openrc" source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin/archive/refs/tags/v$pkgver.tar.gz $pkgname.initd $pkgname.confd remove-prebuilt-library.patch - use-skiasharp-3-119-1.patch " +prepare() { + default_prepare + + # set SkiaSharp and SkiaSharp.Harfbuzz version based on packaged library + local _skia_packagedver=$(apk version skiasharp | tail -n 1 | awk -F '=' '{print $2}' | tr -d ' ') + local _skia_packagedver=${_skia_packagedver/-*} + msg "Building against skiasharp $_skia_packagedver" + gawk -i inplace -v "skia_version=Version\=\"$_skia_packagedver\"" '{if($2 == "Include=\"SkiaSharp\""){ $3 = skia_version}{print}}' Directory.Packages.props + gawk -i inplace -v "skia_version=Version\=\"$_skia_packagedver\"" '{if($2 == "Include=\"SkiaSharp.HarfBuzz\""){ $3 = skia_version}{print}}' Directory.Packages.props +} + build() { dotnet publish Jellyfin.Server \ --configuration Release \ @@ -48,5 +58,4 @@ sha512sums=" bcdb882b837a08e4c1db363fbf2a075f0d6558a537c3f798b1473f9f1b5b887b6da1928558b0aede8bf56ab16469ac9e80dc95b0f874533ad744465a92b37696 jellyfin.initd 594c26e5235ae2265f3f586f596cd6b57fa0e0cec83531b6fadba48181870167f04381266c6005f1f6cb5cd76d254100a08a871ecb8da28e5890f979816a7b8b jellyfin.confd fc0bbeab0f37f8d483d7c1b7d9162bf5cbeb79fa82e7b652bf712c07332d8cbcceb80bc21ccaceaa8a10196c3dd9ddcf33977e3baedcd5e3fd5b5cd5a3b60f1a remove-prebuilt-library.patch -cc81a9b0f83914a35d96c68067311eea4c4aaca1f921da9dbb7ff37a06833b6124b48da15d33c44cce5323c1b3f278e96584af66aa491850d4fc5f9d3cd57630 use-skiasharp-3-119-1.patch " diff --git a/user/jellyfin/use-skiasharp-3-119-1.patch b/user/jellyfin/use-skiasharp-3-119-1.patch deleted file mode 100644 index 5068d4a..0000000 --- a/user/jellyfin/use-skiasharp-3-119-1.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/Directory.Packages.props.orig b/Directory.Packages.props -index 275ba3c..18cc64a 100644 ---- a/Directory.Packages.props.orig -+++ b/Directory.Packages.props -@@ -72,9 +72,8 @@ - - - -- -- -- -+ -+ - - - From d6eed040f22426ca9a302edc9aa5f004b2c943c1 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Dec 2025 10:42:33 -0500 Subject: [PATCH 696/738] user/jellyfin{,-web}, skiasharp: drop due to merged on aports --- user/jellyfin-web/APKBUILD | 40 ----------- user/jellyfin-web/bump-npm-requirement.patch | 13 ---- user/jellyfin-web/jellyfin-web.post-install | 6 -- user/jellyfin/APKBUILD | 61 ---------------- user/jellyfin/jellyfin.confd | 7 -- user/jellyfin/jellyfin.initd | 20 ------ user/jellyfin/jellyfin.pre-install | 9 --- user/jellyfin/remove-prebuilt-library.patch | 33 --------- .../skiasharp/0001-add-missing-includes.patch | 26 ------- user/skiasharp/APKBUILD | 72 ------------------- user/skiasharp/args.gn.in | 19 ----- 11 files changed, 306 deletions(-) delete mode 100644 user/jellyfin-web/APKBUILD delete mode 100644 user/jellyfin-web/bump-npm-requirement.patch delete mode 100644 user/jellyfin-web/jellyfin-web.post-install delete mode 100644 user/jellyfin/APKBUILD delete mode 100644 user/jellyfin/jellyfin.confd delete mode 100644 user/jellyfin/jellyfin.initd delete mode 100644 user/jellyfin/jellyfin.pre-install delete mode 100644 user/jellyfin/remove-prebuilt-library.patch delete mode 100644 user/skiasharp/0001-add-missing-includes.patch delete mode 100644 user/skiasharp/APKBUILD delete mode 100644 user/skiasharp/args.gn.in diff --git a/user/jellyfin-web/APKBUILD b/user/jellyfin-web/APKBUILD deleted file mode 100644 index 44f8c19..0000000 --- a/user/jellyfin-web/APKBUILD +++ /dev/null @@ -1,40 +0,0 @@ -# Maintainer: Simon Zeni -pkgname=jellyfin-web -pkgver=10.11.3 -pkgrel=0 -pkgdesc="Web Client for Jellyfin" -url="https://jellyfin.org/" -# armv7: oom -arch="x86_64 armv7 aarch64" -options="net" # net for npm -license="GPL-2.0-only" -install="$pkgname.post-install" -depends="jellyfin" -makedepends="npm" -source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin-web/archive/refs/tags/v$pkgver.tar.gz - bump-npm-requirement.patch" - -prepare() { - default_prepare - - npm ci --no-audit -} - -build() { - npm run build:production -} - -check() { - npm test -} - -package() { - mkdir -p "$pkgdir"/usr/share/webapps/jellyfin-web - - cp -r "$builddir"/dist/* "$pkgdir"/usr/share/webapps/jellyfin-web -} - -sha512sums=" -ef85a77bc0dbba01a877c35627138f0e5eda9bb8ba3eb5ae79997e97b5829af8063e5666f6c77d599791633791eb318de057155d0b36e3934bbd18ff4a4e641b jellyfin-web-10.11.3.tar.gz -93e028def9e44cbe939b530754e279481d5c805014786fd141456c153a4ddd6f4fe440ef44a965ddb9d08cccf81c9bbdaa24a5600aaa76a19a8f013a936dd35e bump-npm-requirement.patch -" diff --git a/user/jellyfin-web/bump-npm-requirement.patch b/user/jellyfin-web/bump-npm-requirement.patch deleted file mode 100644 index 3731eb2..0000000 --- a/user/jellyfin-web/bump-npm-requirement.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/package.json b/package.json -index f46cb3b95..096c28562 100644 ---- a/package.json -+++ b/package.json -@@ -168,7 +168,7 @@ - }, - "engines": { - "node": ">=20.0.0", -- "npm": ">=9.6.4 <11.0.0", -+ "npm": ">=9.6.4", - "yarn": "YARN NO LONGER USED - use npm instead." - } - } diff --git a/user/jellyfin-web/jellyfin-web.post-install b/user/jellyfin-web/jellyfin-web.post-install deleted file mode 100644 index a6e6942..0000000 --- a/user/jellyfin-web/jellyfin-web.post-install +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -printf " *\n * The default jellyfin configuration does not enable the web ui.\n" -printf " * Remove the '--nowebclient' option from /etc/conf.d/jellyfin to enable it.\n *\n" - -exit 0 diff --git a/user/jellyfin/APKBUILD b/user/jellyfin/APKBUILD deleted file mode 100644 index 0fb06df..0000000 --- a/user/jellyfin/APKBUILD +++ /dev/null @@ -1,61 +0,0 @@ -# Contributor: Fabricio Silva -# Maintainer: Simon Zeni -pkgname=jellyfin -pkgver=10.11.3 -pkgrel=0 -pkgdesc="The Free Software Media System" -install="$pkgname.pre-install" -url="https://jellyfin.org/" -arch="x86_64 armv7 aarch64" -license="GPL-2.0-only" -makedepends="dotnet9-sdk gawk" -depends="aspnetcore9-runtime jellyfin-ffmpeg skiasharp" -subpackages="$pkgname-openrc" -source="$pkgname-$pkgver.tar.gz::https://github.com/jellyfin/jellyfin/archive/refs/tags/v$pkgver.tar.gz - $pkgname.initd - $pkgname.confd - remove-prebuilt-library.patch - " - -prepare() { - default_prepare - - # set SkiaSharp and SkiaSharp.Harfbuzz version based on packaged library - local _skia_packagedver=$(apk version skiasharp | tail -n 1 | awk -F '=' '{print $2}' | tr -d ' ') - local _skia_packagedver=${_skia_packagedver/-*} - msg "Building against skiasharp $_skia_packagedver" - gawk -i inplace -v "skia_version=Version\=\"$_skia_packagedver\"" '{if($2 == "Include=\"SkiaSharp\""){ $3 = skia_version}{print}}' Directory.Packages.props - gawk -i inplace -v "skia_version=Version\=\"$_skia_packagedver\"" '{if($2 == "Include=\"SkiaSharp.HarfBuzz\""){ $3 = skia_version}{print}}' Directory.Packages.props -} - -build() { - dotnet publish Jellyfin.Server \ - --configuration Release \ - --no-self-contained \ - --use-current-runtime \ - --output publish -} - -check() { - dotnet test --no-restore -} - -package() { - mkdir -p "$pkgdir"/usr/lib "$pkgdir"/usr/bin - - cp -a publish "$pkgdir"/usr/lib/jellyfin - ln -s ../lib/jellyfin/jellyfin "$pkgdir"/usr/bin/jellyfin - ln -s ../libSkiaSharp.so "$pkgdir"/usr/lib/jellyfin/libSkiaSharp.so - - install -Dm755 "$srcdir"/$pkgname.initd \ - "$pkgdir"/etc/init.d/$pkgname - install -Dm644 "$srcdir"/$pkgname.confd \ - "$pkgdir"/etc/conf.d/$pkgname -} - -sha512sums=" -2dd7d2cebc5eed57ab4d38a3004f255a3239a0c23d2d133ab6e0d6a9495fc2e774749af5f53d15968af957e5e96255e1b82089e93101feba78d7800973eb4ac6 jellyfin-10.11.3.tar.gz -bcdb882b837a08e4c1db363fbf2a075f0d6558a537c3f798b1473f9f1b5b887b6da1928558b0aede8bf56ab16469ac9e80dc95b0f874533ad744465a92b37696 jellyfin.initd -594c26e5235ae2265f3f586f596cd6b57fa0e0cec83531b6fadba48181870167f04381266c6005f1f6cb5cd76d254100a08a871ecb8da28e5890f979816a7b8b jellyfin.confd -fc0bbeab0f37f8d483d7c1b7d9162bf5cbeb79fa82e7b652bf712c07332d8cbcceb80bc21ccaceaa8a10196c3dd9ddcf33977e3baedcd5e3fd5b5cd5a3b60f1a remove-prebuilt-library.patch -" diff --git a/user/jellyfin/jellyfin.confd b/user/jellyfin/jellyfin.confd deleted file mode 100644 index 38c0def..0000000 --- a/user/jellyfin/jellyfin.confd +++ /dev/null @@ -1,7 +0,0 @@ -supervisor=supervise-daemon -datadir="/var/lib/jellyfin" -cachedir="/var/cache/jellyfin" -logdir="/var/log/jellyfin" -webdir="/usr/share/webapps/jellyfin-web" -ffmpegpath="/usr/lib/jellyfin-ffmpeg/ffmpeg" -opts="--nowebclient" diff --git a/user/jellyfin/jellyfin.initd b/user/jellyfin/jellyfin.initd deleted file mode 100644 index 4641de7..0000000 --- a/user/jellyfin/jellyfin.initd +++ /dev/null @@ -1,20 +0,0 @@ -#!/sbin/openrc-run - -name=jellyfin -description="The Free Software Media System" - -command=/usr/bin/jellyfin -command_user=jellyfin:jellyfin -command_args="--webdir ${webdir:-/usr/share/webapps/jellyfin-web} --datadir ${datadir} --cachedir ${cachedir} --logdir ${logdir} --ffmpeg ${ffmpegpath:-/usr/lib/jellyfin-ffmpeg/ffmpeg} ${opts}" - -depend() { - use logger dns - need net - after firewall -} - -start_pre() { - checkpath -d -o $command_user "$datadir" - checkpath -d -o $command_user "$cachedir" - checkpath -d -o $command_user "$logdir" -} diff --git a/user/jellyfin/jellyfin.pre-install b/user/jellyfin/jellyfin.pre-install deleted file mode 100644 index 6e64716..0000000 --- a/user/jellyfin/jellyfin.pre-install +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -user=jellyfin -group=jellyfin - -addgroup -S $group 2>/dev/null -adduser -S -D -h /var/lib/$user -s /sbin/nologin -G $group -g $user $user 2>/dev/null - -exit 0 diff --git a/user/jellyfin/remove-prebuilt-library.patch b/user/jellyfin/remove-prebuilt-library.patch deleted file mode 100644 index 7efbaf0..0000000 --- a/user/jellyfin/remove-prebuilt-library.patch +++ /dev/null @@ -1,33 +0,0 @@ -diff -urp jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj jellyfin-10.10.3/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj ---- jellyfin-10.10.3.bak/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj 2024-11-19 03:38:42.000000000 +0000 -+++ jellyfin-10.10.3/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj 2024-12-04 02:21:05.773987361 +0000 -@@ -20,9 +20,7 @@ - - - -- - -- - - - -diff --git a/Directory.Packages.props.orig b/Directory.Packages.props -index dc3e7d7..275ba3c 100644 ---- a/Directory.Packages.props.orig -+++ b/Directory.Packages.props -@@ -18,7 +18,6 @@ - - - -- - - - -@@ -76,7 +75,6 @@ - - - -- - - - diff --git a/user/skiasharp/0001-add-missing-includes.patch b/user/skiasharp/0001-add-missing-includes.patch deleted file mode 100644 index 4a840e8..0000000 --- a/user/skiasharp/0001-add-missing-includes.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 4367484b44f349f3f9009a001167c08a61f6934b Mon Sep 17 00:00:00 2001 -From: Naomi Rennie-Waldock -Date: Wed, 4 Dec 2024 02:02:29 +0000 -Subject: [PATCH 2/2] add missing includes - ---- - src/utils/SkParseColor.cpp | 1 + - third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp | 2 ++ - 2 files changed, 3 insertions(+) - -diff --git a/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp b/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp -index fb606984bd..4bc9d99420 100644 ---- a/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp -+++ b/externals/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp -@@ -5,6 +5,8 @@ - * found in the LICENSE file. - */ - -+#include -+ - // We use our own functions pointers - #define VMA_STATIC_VULKAN_FUNCTIONS 0 - #define VMA_DYNAMIC_VULKAN_FUNCTIONS 0 --- -2.45.2 - diff --git a/user/skiasharp/APKBUILD b/user/skiasharp/APKBUILD deleted file mode 100644 index 62ecc16..0000000 --- a/user/skiasharp/APKBUILD +++ /dev/null @@ -1,72 +0,0 @@ -# Contributor: Naomi Rennie-Waldock -# Maintainer: Antoine Martin (ayakael) -pkgname=skiasharp -pkgver=3.119.1 -pkgrel=1 -pkgdesc="2D graphics API for .NET - native library" -url="https://github.com/mono/SkiaSharp" -arch="x86_64 armv7 aarch64" -license="BSD-3-Clause" -_llvmver=21 -makedepends=" - cmd:awk - cmd:envsubst - clang$_llvmver - llvm$_llvmver - gn - ninja - freetype-dev - fontconfig-dev - libwebp-dev - libjpeg-turbo-dev - harfbuzz-dev - cmake - zstd - " -subpackages="$pkgname-dbg" -source=" - https://ayakael.net/api/packages/mirrors/generic/skiasharp/v$pkgver/skiasharp-v$pkgver.tar.zst - args.gn.in - 0001-add-missing-includes.patch - " -builddir="$srcdir"/skiasharp-v$pkgver -options="!check" - -build() { - export PATH="$PATH:/usr/lib/llvm$_llvmver/bin" - local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$builddir"/scripts/VERSIONS.txt) - local map="$builddir"/native/linux/libSkiaSharp/libSkiaSharp.map - local _skia_arch=$CTARGET_ARCH - - case "$CTARGET_ARCH" in - aarch64) _skia_arch=arm64 ;; - armv7) _skia_arch=arm ;; - x86_64) _skia_arch=x64 ;; - esac - - export soname map _skia_arch _llvmver - - ( - cd externals/skia - - [ -d _build ] || mkdir _build - envsubst < "$srcdir"/args.gn.in > _build/args.gn - - gn gen _build - ninja -j"${JOBS:-1}" -C _build SkiaSharp - ) -} - -package() { - local soname=$(awk '$1 == "libSkiaSharp" && $2 == "soname" { print $3 }' "$builddir"/scripts/VERSIONS.txt) - - install -Dm644 "$builddir"/externals/skia/_build/libSkiaSharp.so.$soname -t "$pkgdir"/usr/lib/ - ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so.${soname%%.*} - ln -s libSkiaSharp.so.$soname "$pkgdir"/usr/lib/libSkiaSharp.so -} - -sha512sums=" -f46ae10474cbf66de5d86a6041e682ebaa7c68d640836ba283023d4d5787ddfa32ae7853b2e19da1ec5a65e40f4ae71d11e55721f6e0ed136b7bbd8477464564 skiasharp-v3.119.1.tar.zst -705945ca1cd1b6922a2491ef1ab17b3899334b5b30fb236ced09f7383779184d1c670698874602da3d367bcf35297e14bc6a362ed85f19f8ecc5209fb2918917 args.gn.in -a189922f8870352223b2aa9b922167398513333f6f82627b0499d7ca7fbeb211f0f5b192e5caad5b4eb9ebbb49de16f41c691309c3d41b3b19dc17cd13cf18b8 0001-add-missing-includes.patch -" diff --git a/user/skiasharp/args.gn.in b/user/skiasharp/args.gn.in deleted file mode 100644 index b88b358..0000000 --- a/user/skiasharp/args.gn.in +++ /dev/null @@ -1,19 +0,0 @@ -is_official_build=true -target_os="linux" -target_cpu="$_skia_arch" -skia_enable_gpu=true -skia_use_icu=true -skia_use_piex=true -skia_use_sfntly=true -skia_enable_skottie=true -skia_enable_tools=false -skia_use_vulkan=true -skia_use_system_libjpeg_turbo=false -# disabled as it's not packaged -skia_use_dng_sdk=false -extra_cflags=[ "-DSKIA_C_DLL" ] -extra_ldflags=[ "-Wl,--version-script=$map" ] -linux_soname_version="$soname" -cc="clang" -cxx="clang++" -ar="llvm-ar" From ee0ce1377325cfdcea87a31c7f41a876c0bed9fe Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:26:58 -0500 Subject: [PATCH 697/738] backports/calibre: upgrade to 8.14.0 --- backports/calibre/0002-calibre-use-make.patch | 13 ++++++ .../calibre/0003-calibre-disable-piper.patch | 46 +++++++++++++++++++ backports/calibre/APKBUILD | 14 ++++-- backports/calibre/musl-pread.patch | 11 ----- 4 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 backports/calibre/0002-calibre-use-make.patch create mode 100644 backports/calibre/0003-calibre-disable-piper.patch delete mode 100644 backports/calibre/musl-pread.patch diff --git a/backports/calibre/0002-calibre-use-make.patch b/backports/calibre/0002-calibre-use-make.patch new file mode 100644 index 0000000..1b49726 --- /dev/null +++ b/backports/calibre/0002-calibre-use-make.patch @@ -0,0 +1,13 @@ +diff --git a/setup/build.py b/setup/build.py +index 956ad7504f..aa9d7ea028 100644 +--- a/setup/build.py ++++ b/setup/build.py +@@ -662,7 +662,7 @@ def build_headless(self): + f.seek(0), f.truncate() + f.write(raw) + bdir = os.path.join(bdir, 'build') +- cmd = [CMAKE] ++ cmd = [CMAKE, '-GUnix Makefiles'] + if is_macos_universal_build: + cmd += ['-DCMAKE_OSX_ARCHITECTURES=x86_64;arm64'] + if sw and os.path.exists(os.path.join(sw, 'qt')): diff --git a/backports/calibre/0003-calibre-disable-piper.patch b/backports/calibre/0003-calibre-disable-piper.patch new file mode 100644 index 0000000..855b62f --- /dev/null +++ b/backports/calibre/0003-calibre-disable-piper.patch @@ -0,0 +1,46 @@ +piper uses a function in espeak-ng that is upstreamed but not in a +release. + +diff --git a/setup/extensions.json b/setup/extensions.json +index b39ce6d..c105031 100644 +--- a/setup/extensions.json ++++ b/setup/extensions.json +@@ -134,14 +134,6 @@ + "error": "!podofo_error", + "needs_c++": "17" + }, +- { +- "name": "piper", +- "sources": "calibre/utils/tts/piper.cpp", +- "needs_c++": "17", +- "libraries": "!piper_libs", +- "lib_dirs": "!piper_lib_dirs", +- "inc_dirs": "!piper_inc_dirs" +- }, + { + "name": "html_as_json", + "sources": "calibre/srv/html_as_json.cpp", +diff --git a/src/calibre/constants.py b/src/calibre/constants.py +index fa4b211459..7b27768953 100644 +--- a/src/calibre/constants.py ++++ b/src/calibre/constants.py +@@ -258,7 +258,6 @@ def __init__(self): + 'rcc_backend', + 'icu', + 'speedup', +- 'piper', + 'html_as_json', + 'fast_css_transform', + 'fast_html_entities', +diff --git a/src/calibre/utils/run_tests.py b/src/calibre/utils/run_tests.py +index ffd0f95c04..c80a35f83d 100644 +--- a/src/calibre/utils/run_tests.py ++++ b/src/calibre/utils/run_tests.py +@@ -192,6 +192,7 @@ def test_import_of_all_python_modules(self): + } + if 'SKIP_SPEECH_TESTS' in os.environ: + exclude_packages.add('calibre.gui2.tts') ++ exclude_modules.add('calibre.utils.tts.piper') + if not isbsd: + exclude_modules.add('calibre.devices.usbms.hal') + d = os.path.dirname diff --git a/backports/calibre/APKBUILD b/backports/calibre/APKBUILD index 5771907..47dc7d8 100644 --- a/backports/calibre/APKBUILD +++ b/backports/calibre/APKBUILD @@ -1,6 +1,6 @@ # Maintainer: Cowington Post pkgname=calibre -pkgver=8.4.0 +pkgver=8.14.0 pkgrel=0 pkgdesc="Ebook management application" # qt6-webengine @@ -47,6 +47,7 @@ depends=" makedepends=" cmake curl + ffmpeg-dev hunspell-dev hyphen-dev libmtp-dev @@ -55,12 +56,12 @@ makedepends=" podofo-dev py3-pyqt-builder py3-pyqt6-sip + py3-qt6 py3-sip python3-dev qt6-qtbase-dev uchardet-dev xdg-utils - ffmpeg-dev " subpackages=" $pkgname-pyc @@ -70,13 +71,15 @@ subpackages=" " source="https://download.calibre-ebook.com/$pkgver/calibre-$pkgver.tar.xz 0001-$pkgname-no-update.patch - musl-pread.patch + 0002-$pkgname-use-make.patch + 0003-$pkgname-disable-piper.patch " # net: downloads iso-codes # !check: no tests ran options="net !check" export LANG="en_US.UTF-8" +export PATH="$PATH:/usr/lib/qt6/bin" prepare() { default_prepare @@ -113,7 +116,8 @@ package() { } sha512sums=" -df998fa31b9e581739872a649669fccf29f34d3ac1b4d0a96c37e08a0b049b1357b56a2af25f2733936e78901dd61b38a24e536e107e7094ada7e60a5c2c56ab calibre-8.4.0.tar.xz +edb32e47b083e10fbf53088e485737f3b61bb642ce6c4dd444e58a6618979c3b05b77ceffc4b8cb42e35eee7dcc2b94145abc22030ffd8b5de63e45b321fbf72 calibre-8.14.0.tar.xz eb8e7ce40ff8b8daf6e7e55a5dff8ec4dff06c45744266bb48b3194e92ab1196bc91468203e3c2ca1e5144166a7d6be90e6cf0253513e761b56a4c85be4c2c76 0001-calibre-no-update.patch -d27d29c434a3d2df1b18125225a4d3762bf6fdba77385b377b18a7f325f29ae0b698974a39263f4f7aed8a368c87d0dc4446f488505b8e38664f8e9ee5b9bd12 musl-pread.patch +bbb7253257073ae14840b3b4697943fe129d862b49cabd9388ea24cbd0259e68a1d359870334772164897f0c781db121de55fcdf5bccc841e36c021abe56f1ec 0002-calibre-use-make.patch +0efcf35944cd0f42d6f3572839647fc5c8336562db3f71655211d3de682e155b6d6fee4d281f9576201156e0bc828b6a579a8708a27791e4e4d604d456416954 0003-calibre-disable-piper.patch " diff --git a/backports/calibre/musl-pread.patch b/backports/calibre/musl-pread.patch deleted file mode 100644 index 241ce63..0000000 --- a/backports/calibre/musl-pread.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/src/calibre/utils/speedup.c -+++ b/src/calibre/utils/speedup.c -@@ -748,7 +748,7 @@ - break; - } - #else --#ifdef __linux__ -+#ifdef __GLIBC__ - ssize_t nr = pread64(fd, buf + pos, n - pos, offset); - #else - ssize_t nr = pread(fd, buf + pos, n - pos, offset); From 2825fbb4f54790bd8708df026c9eade8d26dcf29 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:27:19 -0500 Subject: [PATCH 698/738] backports/caprine: bump pkgrel --- backports/caprine/APKBUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backports/caprine/APKBUILD b/backports/caprine/APKBUILD index 41f1806..f8f2b6d 100644 --- a/backports/caprine/APKBUILD +++ b/backports/caprine/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Antoine Martin (ayakael) pkgname=caprine pkgver=2.60.3 -pkgrel=2 +pkgrel=6 pkgdesc="Elegant Facebook Messenger desktop app" arch="x86_64 aarch64" # blocked by electron url="https://github.com/sindresorhus/caprine" From a993aebd4dd3d7223fbe384b740abd12201ac421 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:27:35 -0500 Subject: [PATCH 699/738] backports/electron: upgrade to 39.2.3 --- ...l_allocator-to-provide-Rust-allocato.patch | 730 ------------------ ...ix-ignore-a-new-warning-in-rust-1.89.patch | 21 + ...default-allocator-directly-from-Rust.patch | 319 -------- ...7b43542838f0a4a6cfdb17fbeadf45002042.patch | 102 --- .../electron/0004-Drop-remap_alloc-dep.patch | 44 -- ...ild-rust-allocator-after-a-Rust-tool.patch | 354 --------- backports/electron/APKBUILD | 100 +-- .../chromium-revert-drop-of-system-java.patch | 17 - backports/electron/compiler.patch | 179 +++-- .../electron/disable-dns_config_service.patch | 10 +- .../electron/disable-failing-tests.patch | 321 -------- .../electron_do-not-strip-binaries.patch | 127 +++ ...lectron_shell-file-dialog-drop-glibc.patch | 16 + backports/electron/fc-cache-version.patch | 8 +- .../electron/fix-ffmpeg-codec-list.patch | 13 + backports/electron/fix-opus.patch | 11 - backports/electron/gperf-3.2-fix.patch | 29 - .../electron/headless-shell-no-license.patch | 27 + backports/electron/musl-auxv.patch | 11 - ...-v8-monotonic-pthread-cont_timedwait.patch | 23 - backports/electron/net-test-no-vpython.patch | 22 + .../electron/net-test-pyws3-py3.12.patch | 39 + .../electron/partalloc-no-tagging-arm64.patch | 13 +- backports/electron/pipewire-1.4.patch | 23 - backports/electron/yes-musl.patch | 11 - 25 files changed, 449 insertions(+), 2121 deletions(-) delete mode 100644 backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch create mode 100644 backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch delete mode 100644 backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch delete mode 100644 backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch delete mode 100644 backports/electron/0004-Drop-remap_alloc-dep.patch delete mode 100644 backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch delete mode 100644 backports/electron/chromium-revert-drop-of-system-java.patch create mode 100644 backports/electron/electron_do-not-strip-binaries.patch create mode 100644 backports/electron/electron_shell-file-dialog-drop-glibc.patch create mode 100644 backports/electron/fix-ffmpeg-codec-list.patch delete mode 100644 backports/electron/fix-opus.patch delete mode 100644 backports/electron/gperf-3.2-fix.patch create mode 100644 backports/electron/headless-shell-no-license.patch delete mode 100644 backports/electron/musl-auxv.patch delete mode 100644 backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch create mode 100644 backports/electron/net-test-no-vpython.patch create mode 100644 backports/electron/net-test-pyws3-py3.12.patch delete mode 100644 backports/electron/pipewire-1.4.patch delete mode 100644 backports/electron/yes-musl.patch diff --git a/backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch b/backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch deleted file mode 100644 index 580323c..0000000 --- a/backports/electron/0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch +++ /dev/null @@ -1,730 +0,0 @@ -From c854a92a215d0cf39c704bbadd3611e552073d5f Mon Sep 17 00:00:00 2001 -From: Collin Baker -Date: Fri, 4 Apr 2025 14:08:18 -0700 -Subject: [PATCH] Reland "Use #[global_allocator] to provide Rust allocator - implementation" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This is a reland of commit cfa3beef52625e03ba6ce2b2ac98e1b89dde5cdb - -Original was reverted due to a cronet gn2bp failure. The script -filtered out GN rules in //build/rust/std, but this caused an exception -when //build/rust/std:allocator was referenced later. - -Moving the rules to //build/rust/allocator sidesteps the issue. - -Original change's description: -> Use #[global_allocator] to provide Rust allocator implementation -> -> The allocator shim hack we have been using no longer works with -> upstream Rust. Replace it with a less-unsupported method: provide a -> https://github.com/rust-lang/rust/issues/123015, which still requires -> us to provide a few symbol definitions. -> -> Bug: 408221149, 407024458 -> Change-Id: If1808ca24b12dc80ead35a25521313a3d2e148d5 -> -> Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel -> Change-Id: If1808ca24b12dc80ead35a25521313a3d2e148d5 -> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6427855 -> Reviewed-by: Alan Zhao -> Reviewed-by: Lei Zhang -> Reviewed-by: Łukasz Anforowicz -> Commit-Queue: Collin Baker -> Auto-Submit: Collin Baker -> Cr-Commit-Position: refs/heads/main@{#1442472} - -Bug: 408221149, 407024458 -Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel -Change-Id: I36fef217297bfe64ae81519be24b8c653f6fdfa1 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6432410 -Reviewed-by: Mohannad Farrag -Reviewed-by: Łukasz Anforowicz -Auto-Submit: Collin Baker -Commit-Queue: Łukasz Anforowicz -Cr-Commit-Position: refs/heads/main@{#1442922} ---- - build/rust/allocator/BUILD.gn | 90 ++++++++++++++++ - build/rust/{std => allocator}/alias.cc | 4 +- - build/rust/{std => allocator}/alias.h | 6 +- - .../allocator_impls.cc} | 100 ++++++++---------- - build/rust/allocator/allocator_impls.h | 25 +++++ - .../allocator/allocator_shim_definitions.cc | 30 ++++++ - .../{std => allocator}/compiler_specific.h | 6 +- - .../rust/{std => allocator}/immediate_crash.h | 6 +- - build/rust/allocator/lib.rs | 48 +++++++++ - build/rust/cargo_crate.gni | 9 ++ - build/rust/rust_macro.gni | 3 + - build/rust/rust_target.gni | 4 + - build/rust/std/BUILD.gn | 41 ------- - components/cronet/android/dependencies.txt | 1 + - third_party/breakpad/BUILD.gn | 10 +- - 15 files changed, 272 insertions(+), 111 deletions(-) - create mode 100644 build/rust/allocator/BUILD.gn - rename build/rust/{std => allocator}/alias.cc (87%) - rename build/rust/{std => allocator}/alias.h (91%) - rename build/rust/{std/remap_alloc.cc => allocator/allocator_impls.cc} (67%) - create mode 100644 build/rust/allocator/allocator_impls.h - create mode 100644 build/rust/allocator/allocator_shim_definitions.cc - rename build/rust/{std => allocator}/compiler_specific.h (87%) - rename build/rust/{std => allocator}/immediate_crash.h (97%) - create mode 100644 build/rust/allocator/lib.rs - -diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn -new file mode 100644 -index 0000000000000..06aa47f097c9c ---- /dev/null -+++ b/build/rust/allocator/BUILD.gn -@@ -0,0 +1,90 @@ -+# Copyright 2025 The Chromium Authors -+# Use of this source code is governed by a BSD-style license that can be -+# found in the LICENSE file. -+ -+import("//build/buildflag_header.gni") -+import("//build/config/rust.gni") -+import("//build/rust/rust_static_library.gni") -+ -+rust_allocator_uses_partition_alloc = false -+if (build_with_chromium) { -+ import("//base/allocator/partition_allocator/partition_alloc.gni") -+ rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc -+} -+ -+buildflag_header("buildflags") { -+ header = "buildflags.h" -+ flags = [ -+ "RUST_ALLOCATOR_USES_PARTITION_ALLOC=$rust_allocator_uses_partition_alloc", -+ ] -+ visibility = [ ":*" ] -+} -+ -+if (toolchain_has_rust) { -+ # All targets which depend on Rust code but are not linked by rustc must -+ # depend on this. Usually, this dependency will come from the rust_target() GN -+ # template. However, cargo_crate() does *not* include this dependency so any -+ # C++ targets which directly depend on a cargo_crate() must depend on this. -+ rust_static_library("allocator") { -+ sources = [ "lib.rs" ] -+ crate_root = "lib.rs" -+ cxx_bindings = [ "lib.rs" ] -+ -+ deps = [ -+ ":allocator_impls", -+ ":allocator_shim_definitions", -+ ] -+ -+ no_chromium_prelude = true -+ no_allocator_crate = true -+ allow_unsafe = true -+ } -+ -+ static_library("allocator_impls") { -+ public_deps = [] -+ if (rust_allocator_uses_partition_alloc) { -+ public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ] -+ } -+ -+ sources = [ -+ "allocator_impls.cc", -+ "allocator_impls.h", -+ ] -+ -+ deps = [ -+ ":allocator_cpp_shared", -+ ":buildflags", -+ -+ # TODO(crbug.com/408221149): remove the C++ -> Rust dependency for the -+ # default allocator. -+ "//build/rust/std", -+ ] -+ -+ visibility = [ ":*" ] -+ } -+ -+ source_set("allocator_shim_definitions") { -+ sources = [ "allocator_shim_definitions.cc" ] -+ -+ deps = [ ":allocator_cpp_shared" ] -+ -+ visibility = [ ":*" ] -+ } -+ -+ source_set("allocator_cpp_shared") { -+ sources = [ -+ # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been -+ # copied from `//base`. -+ # TODO(crbug.com/40279749): Avoid duplication / reuse code. -+ "alias.cc", -+ "alias.h", -+ "compiler_specific.h", -+ "immediate_crash.h", -+ ] -+ -+ visibility = [ -+ ":allocator_impls", -+ ":allocator_shim_definitions", -+ ] -+ } -+} -diff --git a/build/rust/std/alias.cc b/build/rust/allocator/alias.cc -similarity index 87% -rename from build/rust/std/alias.cc -rename to build/rust/allocator/alias.cc -index 42febac3ed1fc..ca20986f8ed49 100644 ---- a/build/rust/std/alias.cc -+++ b/build/rust/allocator/alias.cc -@@ -7,9 +7,9 @@ - // - // TODO(crbug.com/40279749): Avoid code duplication / reuse code. - --#include "build/rust/std/alias.h" -+#include "build/rust/allocator/alias.h" - --#include "build/rust/std/compiler_specific.h" -+#include "build/rust/allocator/compiler_specific.h" - - namespace build_rust_std { - namespace debug { -diff --git a/build/rust/std/alias.h b/build/rust/allocator/alias.h -similarity index 91% -rename from build/rust/std/alias.h -rename to build/rust/allocator/alias.h -index 0eaba6766148f..80995ecfb045e 100644 ---- a/build/rust/std/alias.h -+++ b/build/rust/allocator/alias.h -@@ -8,8 +8,8 @@ - // - // TODO(crbug.com/40279749): Avoid code duplication / reuse code. - --#ifndef BUILD_RUST_STD_ALIAS_H_ --#define BUILD_RUST_STD_ALIAS_H_ -+#ifndef BUILD_RUST_ALLOCATOR_ALIAS_H_ -+#define BUILD_RUST_ALLOCATOR_ALIAS_H_ - - #include - -@@ -34,4 +34,4 @@ void Alias(const void* var); - const int line_number = __LINE__; \ - build_rust_std::debug::Alias(&line_number) - --#endif // BUILD_RUST_STD_ALIAS_H_ -+#endif // BUILD_RUST_ALLOCATOR_ALIAS_H_ -diff --git a/build/rust/std/remap_alloc.cc b/build/rust/allocator/allocator_impls.cc -similarity index 67% -rename from build/rust/std/remap_alloc.cc -rename to build/rust/allocator/allocator_impls.cc -index a443b11ec513d..1fde98f23cd12 100644 ---- a/build/rust/std/remap_alloc.cc -+++ b/build/rust/allocator/allocator_impls.cc -@@ -2,6 +2,8 @@ - // Use of this source code is governed by a BSD-style license that can be - // found in the LICENSE file. - -+#include "build/rust/allocator/allocator_impls.h" -+ - #ifdef UNSAFE_BUFFERS_BUILD - // TODO(crbug.com/390223051): Remove C-library calls to fix the errors. - #pragma allow_unsafe_libc_calls -@@ -11,9 +13,9 @@ - #include - - #include "build/build_config.h" --#include "build/rust/std/alias.h" --#include "build/rust/std/buildflags.h" --#include "build/rust/std/immediate_crash.h" -+#include "build/rust/allocator/alias.h" -+#include "build/rust/allocator/buildflags.h" -+#include "build/rust/allocator/immediate_crash.h" - - #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) - #include "partition_alloc/partition_alloc_constants.h" // nogncheck -@@ -22,6 +24,11 @@ - #include - #endif - -+// NOTE: this documentation is outdated. -+// -+// TODO(crbug.com/408221149): update this documentation, or replace it with docs -+// in the Rust allocator implementation. -+// - // When linking a final binary, rustc has to pick between either: - // * The default Rust allocator - // * Any #[global_allocator] defined in *any rlib in its dependency tree* -@@ -87,19 +94,6 @@ - // enabling it breaks Win32 APIs like CreateProcess: - // https://issues.chromium.org/u/1/issues/368070343#comment29 - --extern "C" { -- --#ifdef COMPONENT_BUILD --#if BUILDFLAG(IS_WIN) --#define REMAP_ALLOC_ATTRIBUTES __declspec(dllexport) __attribute__((weak)) --#else --#define REMAP_ALLOC_ATTRIBUTES \ -- __attribute__((visibility("default"))) __attribute__((weak)) --#endif --#else --#define REMAP_ALLOC_ATTRIBUTES __attribute__((weak)) --#endif // COMPONENT_BUILD -- - #if !BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) && BUILDFLAG(IS_WIN) && \ - defined(ADDRESS_SANITIZER) - #define USE_WIN_ALIGNED_MALLOC 1 -@@ -107,17 +101,19 @@ extern "C" { - #define USE_WIN_ALIGNED_MALLOC 0 - #endif - --// This must exist as the stdlib depends on it to prove that we know the --// alloc shims below are unstable. In the future we may be required to replace --// them with a #[global_allocator] crate (see file comment above for more). --// --// Marked as weak as when Rust drives linking it includes this symbol itself, --// and we don't want a collision due to C++ being in the same link target, where --// C++ causes us to explicitly link in the stdlib and this symbol here. --[[maybe_unused]] --__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable; -+// The default allocator functions provided by the Rust standard library. -+extern "C" void* __rdl_alloc(size_t size, size_t align); -+extern "C" void __rdl_dealloc(void* p, size_t size, size_t align); -+extern "C" void* __rdl_realloc(void* p, -+ size_t old_size, -+ size_t align, -+ size_t new_size); -+ -+extern "C" void* __rdl_alloc_zeroed(size_t size, size_t align); -+ -+namespace rust_allocator_internal { - --REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) { -+unsigned char* alloc(size_t size, size_t align) { - #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) - // PartitionAlloc will crash if given an alignment larger than this. - if (align > partition_alloc::internal::kMaxSupportedAlignment) { -@@ -125,19 +121,19 @@ REMAP_ALLOC_ATTRIBUTES void* __rust_alloc(size_t size, size_t align) { - } - - if (align <= alignof(std::max_align_t)) { -- return allocator_shim::UncheckedAlloc(size); -+ return static_cast(allocator_shim::UncheckedAlloc(size)); - } else { -- return allocator_shim::UncheckedAlignedAlloc(size, align); -+ return static_cast( -+ allocator_shim::UncheckedAlignedAlloc(size, align)); - } - #elif USE_WIN_ALIGNED_MALLOC -- return _aligned_malloc(size, align); -+ return static_cast(_aligned_malloc(size, align)); - #else -- extern void* __rdl_alloc(size_t size, size_t align); -- return __rdl_alloc(size, align); -+ return static_cast(__rdl_alloc(size, align)); - #endif - } - --REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) { -+void dealloc(unsigned char* p, size_t size, size_t align) { - #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) - if (align <= alignof(std::max_align_t)) { - allocator_shim::UncheckedFree(p); -@@ -147,54 +143,44 @@ REMAP_ALLOC_ATTRIBUTES void __rust_dealloc(void* p, size_t size, size_t align) { - #elif USE_WIN_ALIGNED_MALLOC - return _aligned_free(p); - #else -- extern void __rdl_dealloc(void* p, size_t size, size_t align); - __rdl_dealloc(p, size, align); - #endif - } - --REMAP_ALLOC_ATTRIBUTES void* __rust_realloc(void* p, -- size_t old_size, -- size_t align, -- size_t new_size) { -+unsigned char* realloc(unsigned char* p, -+ size_t old_size, -+ size_t align, -+ size_t new_size) { - #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) - if (align <= alignof(std::max_align_t)) { -- return allocator_shim::UncheckedRealloc(p, new_size); -+ return static_cast( -+ allocator_shim::UncheckedRealloc(p, new_size)); - } else { -- return allocator_shim::UncheckedAlignedRealloc(p, new_size, align); -+ return static_cast( -+ allocator_shim::UncheckedAlignedRealloc(p, new_size, align)); - } - #elif USE_WIN_ALIGNED_MALLOC -- return _aligned_realloc(p, new_size, align); -+ return static_cast(_aligned_realloc(p, new_size, align)); - #else -- extern void* __rdl_realloc(void* p, size_t old_size, size_t align, -- size_t new_size); -- return __rdl_realloc(p, old_size, align, new_size); -+ return static_cast( -+ __rdl_realloc(p, old_size, align, new_size)); - #endif - } - --REMAP_ALLOC_ATTRIBUTES void* __rust_alloc_zeroed(size_t size, size_t align) { -+unsigned char* alloc_zeroed(size_t size, size_t align) { - #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) || USE_WIN_ALIGNED_MALLOC - // TODO(danakj): When RUST_ALLOCATOR_USES_PARTITION_ALLOC is true, it's - // possible that a partition_alloc::UncheckedAllocZeroed() call would perform - // better than partition_alloc::UncheckedAlloc() + memset. But there is no - // such API today. See b/342251590. -- void* p = __rust_alloc(size, align); -+ unsigned char* p = alloc(size, align); - if (p) { - memset(p, 0, size); - } - return p; - #else -- extern void* __rdl_alloc_zeroed(size_t size, size_t align); -- return __rdl_alloc_zeroed(size, align); -+ return static_cast(__rdl_alloc_zeroed(size, align)); - #endif - } - --REMAP_ALLOC_ATTRIBUTES void __rust_alloc_error_handler(size_t size, -- size_t align) { -- NO_CODE_FOLDING(); -- IMMEDIATE_CRASH(); --} -- --REMAP_ALLOC_ATTRIBUTES extern const unsigned char -- __rust_alloc_error_handler_should_panic = 0; -- --} // extern "C" -+} // namespace rust_allocator_internal -diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h -new file mode 100644 -index 0000000000000..afb335412faf9 ---- /dev/null -+++ b/build/rust/allocator/allocator_impls.h -@@ -0,0 +1,25 @@ -+// Copyright 2025 The Chromium Authors -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+#ifndef BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ -+#define BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ -+ -+#include -+ -+#include "build/build_config.h" -+#include "build/rust/allocator/buildflags.h" -+ -+namespace rust_allocator_internal { -+ -+unsigned char* alloc(size_t size, size_t align); -+void dealloc(unsigned char* p, size_t size, size_t align); -+unsigned char* realloc(unsigned char* p, -+ size_t old_size, -+ size_t align, -+ size_t new_size); -+unsigned char* alloc_zeroed(size_t size, size_t align); -+ -+} // namespace rust_allocator_internal -+ -+#endif // BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ -diff --git a/build/rust/allocator/allocator_shim_definitions.cc b/build/rust/allocator/allocator_shim_definitions.cc -new file mode 100644 -index 0000000000000..a4d1bd77b7016 ---- /dev/null -+++ b/build/rust/allocator/allocator_shim_definitions.cc -@@ -0,0 +1,30 @@ -+// Copyright 2025 The Chromium Authors -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+#include -+ -+#include "build/rust/allocator/alias.h" -+#include "build/rust/allocator/immediate_crash.h" -+ -+extern "C" { -+ -+// As part of rustc's contract for using `#[global_allocator]` without -+// rustc-generated shims we must define this symbol, since we are opting in to -+// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 -+// -+// Mark it weak since rustc will generate it when it drives linking. -+[[maybe_unused]] -+__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable; -+ -+__attribute__((weak)) void __rust_alloc_error_handler(size_t size, -+ size_t align) { -+ NO_CODE_FOLDING(); -+ IMMEDIATE_CRASH(); -+} -+ -+__attribute__(( -+ weak)) extern const unsigned char __rust_alloc_error_handler_should_panic = -+ 0; -+ -+} // extern "C" -diff --git a/build/rust/std/compiler_specific.h b/build/rust/allocator/compiler_specific.h -similarity index 87% -rename from build/rust/std/compiler_specific.h -rename to build/rust/allocator/compiler_specific.h -index ea79a7a8dc284..f9079679a3e9a 100644 ---- a/build/rust/std/compiler_specific.h -+++ b/build/rust/allocator/compiler_specific.h -@@ -7,8 +7,8 @@ - // - // TODO(crbug.com/40279749): Avoid code duplication / reuse code. - --#ifndef BUILD_RUST_STD_COMPILER_SPECIFIC_H_ --#define BUILD_RUST_STD_COMPILER_SPECIFIC_H_ -+#ifndef BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_ -+#define BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_ - - #include "build/build_config.h" - -@@ -35,4 +35,4 @@ - #define NOINLINE - #endif - --#endif // BUILD_RUST_STD_COMPILER_SPECIFIC_H_ -+#endif // BUILD_RUST_ALLOCATOR_COMPILER_SPECIFIC_H_ -diff --git a/build/rust/std/immediate_crash.h b/build/rust/allocator/immediate_crash.h -similarity index 97% -rename from build/rust/std/immediate_crash.h -rename to build/rust/allocator/immediate_crash.h -index e4fd5a09d9379..9cbf9fd65f3e0 100644 ---- a/build/rust/std/immediate_crash.h -+++ b/build/rust/allocator/immediate_crash.h -@@ -5,8 +5,8 @@ - // This file has been copied from //base/immediate_crash.h. - // TODO(crbug.com/40279749): Avoid code duplication / reuse code. - --#ifndef BUILD_RUST_STD_IMMEDIATE_CRASH_H_ --#define BUILD_RUST_STD_IMMEDIATE_CRASH_H_ -+#ifndef BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_ -+#define BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_ - - #include "build/build_config.h" - -@@ -168,4 +168,4 @@ - - #endif // defined(__clang__) || defined(COMPILER_GCC) - --#endif // BUILD_RUST_STD_IMMEDIATE_CRASH_H_ -+#endif // BUILD_RUST_ALLOCATOR_IMMEDIATE_CRASH_H_ -diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs -new file mode 100644 -index 0000000000000..7f4a0fc245694 ---- /dev/null -+++ b/build/rust/allocator/lib.rs -@@ -0,0 +1,48 @@ -+// Copyright 2025 The Chromium Authors -+// Use of this source code is governed by a BSD-style license that can be -+// found in the LICENSE file. -+ -+//! Define the allocator that Rust code in Chrome should use. -+//! -+//! Any final artifact that depends on this crate, even transitively, will use -+//! the allocator defined here. Currently this is a thin wrapper around -+//! allocator_impls.cc's functions; see the documentation there. -+ -+use std::alloc::{GlobalAlloc, Layout}; -+ -+struct Allocator; -+ -+unsafe impl GlobalAlloc for Allocator { -+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 { -+ unsafe { ffi::alloc(layout.size(), layout.align()) } -+ } -+ -+ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { -+ unsafe { -+ ffi::dealloc(ptr, layout.size(), layout.align()); -+ } -+ } -+ -+ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { -+ unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) } -+ } -+ -+ unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { -+ unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) } -+ } -+} -+ -+#[global_allocator] -+static GLOBAL: Allocator = Allocator; -+ -+#[cxx::bridge(namespace = "rust_allocator_internal")] -+mod ffi { -+ extern "C++" { -+ include!("build/rust/allocator/allocator_impls.h"); -+ -+ unsafe fn alloc(size: usize, align: usize) -> *mut u8; -+ unsafe fn dealloc(p: *mut u8, size: usize, align: usize); -+ unsafe fn realloc(p: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8; -+ unsafe fn alloc_zeroed(size: usize, align: usize) -> *mut u8; -+ } -+} -diff --git a/build/rust/cargo_crate.gni b/build/rust/cargo_crate.gni -index 6d11c538bf4d5..d9912722b4ecd 100644 ---- a/build/rust/cargo_crate.gni -+++ b/build/rust/cargo_crate.gni -@@ -259,6 +259,12 @@ template("cargo_crate") { - # Don't import the `chromium` crate into third-party code. - no_chromium_prelude = true - -+ # Don't depend on the chrome-specific #[global_allocator] crate from -+ # third-party code. This avoids some dependency cycle issues. The allocator -+ # crate will still be used if it exists anywhere in the dependency graph for -+ # a given linked artifact. -+ no_allocator_crate = true -+ - rustc_metadata = _rustc_metadata - - # TODO(crbug.com/40259764): don't default to true. This requires changes to -@@ -483,6 +489,9 @@ template("cargo_crate") { - # Don't import the `chromium` crate into third-party code. - no_chromium_prelude = true - -+ # Build scripts do not need to link to chrome's allocator. -+ no_allocator_crate = true -+ - # The ${_build_script_name}_output target looks for the exe in this - # location. Due to how the Windows component build works, this has to - # be $root_out_dir for all EXEs. In component build, C++ links to the -diff --git a/build/rust/rust_macro.gni b/build/rust/rust_macro.gni -index bcbb30ed44111..41d857632ccdc 100644 ---- a/build/rust/rust_macro.gni -+++ b/build/rust/rust_macro.gni -@@ -16,6 +16,9 @@ template("rust_macro") { - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - proc_macro_configs = invoker.configs - target_type = "rust_proc_macro" -+ -+ # Macros are loaded by rustc and shouldn't use chrome's allocation routines. -+ no_allocator_crate = true - } - } - -diff --git a/build/rust/rust_target.gni b/build/rust/rust_target.gni -index 1a2f96337d436..1003a7b678352 100644 ---- a/build/rust/rust_target.gni -+++ b/build/rust/rust_target.gni -@@ -339,6 +339,10 @@ template("rust_target") { - _rust_deps += [ "//build/rust/std" ] - } - -+ if (!defined(invoker.no_allocator_crate) || !invoker.no_allocator_crate) { -+ _rust_deps += [ "//build/rust/allocator" ] -+ } -+ - if (_build_unit_tests) { - _unit_test_target = "${_target_name}_unittests" - if (defined(invoker.unit_test_target)) { -diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn -index 6b996aa1fe386..25db126076b2f 100644 ---- a/build/rust/std/BUILD.gn -+++ b/build/rust/std/BUILD.gn -@@ -15,51 +15,12 @@ - # allocator functions to PartitionAlloc when `use_partition_alloc_as_malloc` is - # true, so that Rust and C++ use the same allocator backend. - --import("//build/buildflag_header.gni") - import("//build/config/compiler/compiler.gni") - import("//build/config/coverage/coverage.gni") - import("//build/config/rust.gni") - import("//build/config/sanitizers/sanitizers.gni") - --rust_allocator_uses_partition_alloc = false --if (build_with_chromium) { -- import("//base/allocator/partition_allocator/partition_alloc.gni") -- rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc --} -- --buildflag_header("buildflags") { -- header = "buildflags.h" -- flags = [ -- "RUST_ALLOCATOR_USES_PARTITION_ALLOC=$rust_allocator_uses_partition_alloc", -- ] -- visibility = [ ":*" ] --} -- - if (toolchain_has_rust) { -- # If clang performs the link step, we need to provide the allocator symbols -- # that are normally injected by rustc during linking. -- # -- # We also "happen to" use this to redirect allocations to PartitionAlloc, -- # though that would be better done through a #[global_allocator] crate (see -- # above). -- source_set("remap_alloc") { -- public_deps = [] -- if (rust_allocator_uses_partition_alloc) { -- public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ] -- } -- deps = [ ":buildflags" ] -- sources = [ -- # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been -- # copied from `//base`. -- # TODO(crbug.com/40279749): Avoid duplication / reuse code. -- "alias.cc", -- "alias.h", -- "compiler_specific.h", -- "immediate_crash.h", -- "remap_alloc.cc", -- ] -- } -- - # List of Rust stdlib rlibs which are present in the official Rust toolchain - # we are using from the Android team. This is usually a version or two behind - # nightly. Generally this matches the toolchain we build ourselves, but if -@@ -269,8 +230,6 @@ if (toolchain_has_rust) { - foreach(libname, stdlib_files + skip_stdlib_files) { - deps += [ "rules:$libname" ] - } -- -- public_deps = [ ":remap_alloc" ] - } - } else { - action("find_stdlib") { -diff --git a/components/cronet/android/dependencies.txt b/components/cronet/android/dependencies.txt -index bf56bc45ed41f..c0e41ef7c6766 100644 ---- a/components/cronet/android/dependencies.txt -+++ b/components/cronet/android/dependencies.txt -@@ -14,6 +14,7 @@ - //build/config - //build/config/compiler - //build/rust -+//build/rust/allocator - //build/rust/chromium_prelude - //build/rust/std - //build/rust/std/rules -diff --git a/third_party/breakpad/BUILD.gn b/third_party/breakpad/BUILD.gn -index 007fdff16e92e..00da4fa484998 100644 ---- a/third_party/breakpad/BUILD.gn -+++ b/third_party/breakpad/BUILD.gn -@@ -495,7 +495,10 @@ if (is_mac) { - defines = [ "HAVE_MACH_O_NLIST_H" ] - - # Rust demangle support. -- deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ] -+ deps = [ -+ "//build/rust/allocator", -+ "//third_party/rust/rustc_demangle_capi/v0_1:lib", -+ ] - defines += [ "HAVE_RUSTC_DEMANGLE" ] - include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ] - sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ] -@@ -743,7 +746,10 @@ if (is_linux || is_chromeos || is_android) { - include_dirs = [ "breakpad/src" ] - - # Rust demangle support. -- deps = [ "//third_party/rust/rustc_demangle_capi/v0_1:lib" ] -+ deps = [ -+ "//build/rust/allocator", -+ "//third_party/rust/rustc_demangle_capi/v0_1:lib", -+ ] - defines += [ "HAVE_RUSTC_DEMANGLE" ] - include_dirs += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include" ] - sources += [ "//third_party/rust/chromium_crates_io/vendor/rustc-demangle-capi-0.1.0/include/rustc_demangle.h" ] diff --git a/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch b/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch new file mode 100644 index 0000000..2c38c7c --- /dev/null +++ b/backports/electron/0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch @@ -0,0 +1,21 @@ +From adbc495726382c023b755c35aea36c6e9cad1950 Mon Sep 17 00:00:00 2001 +From: LN Liberda +Date: Sat, 23 Aug 2025 03:11:09 +0200 +Subject: [PATCH] hotfix: ignore a new warning in rust 1.89 + +--- + third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs b/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs +index 1b729621c2f47..55d392c6da72f 100644 +--- a/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs ++++ b/third_party/rust/chromium_crates_io/vendor/qr_code-v2/src/lib.rs +@@ -5,7 +5,6 @@ + //! + + #![deny(missing_docs)] +-#![deny(warnings)] + #![allow( + clippy::must_use_candidate, // This is just annoying. + clippy::use_self, // Rust 1.33 doesn't support Self::EnumVariant, let's try again in 1.37. diff --git a/backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch b/backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch deleted file mode 100644 index 12b3aaa..0000000 --- a/backports/electron/0002-Call-Rust-default-allocator-directly-from-Rust.patch +++ /dev/null @@ -1,319 +0,0 @@ -From 5032162442c5f2f3093cd7646f3a06f826d7f7a8 Mon Sep 17 00:00:00 2001 -From: Collin Baker -Date: Mon, 7 Apr 2025 12:48:17 -0700 -Subject: [PATCH] Call Rust default allocator directly from Rust -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -The Chromium `#[global_allocator] crate forwarded calls to the C++ -implementation, which in turn called into the Rust standard library -implementations in some build configurations. - -This Rust -> C++ -> Rust round trip is unnecessary, and the references -to these symbols is blocking a toolchain update: upstream, these -symbol names are now mangled. - -Instead, use Rust conditional compilation to choose between the -Chromium and the libstd-provided allocators. - -Additionally, the remaining internal symbols defined in C++ are moved -to Rust. - -Bug: 408221149, 407024458 -Change-Id: I78f8c90d51a36a73099aa7d333091d7b8aded3c0 - -Cq-Include-Trybots: luci.chromium.try:android-rust-arm32-rel,android-rust-arm64-dbg,android-rust-arm64-rel,linux-rust-x64-dbg,linux-rust-x64-rel,mac-rust-x64-dbg,win-rust-x64-dbg,win-rust-x64-rel -Change-Id: I78f8c90d51a36a73099aa7d333091d7b8aded3c0 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6434355 -Reviewed-by: Łukasz Anforowicz -Commit-Queue: Collin Baker -Cr-Commit-Position: refs/heads/main@{#1443703} ---- - build/rust/allocator/BUILD.gn | 54 +++++++------------ - build/rust/allocator/allocator_impls.cc | 28 +++++----- - build/rust/allocator/allocator_impls.h | 2 + - .../allocator/allocator_shim_definitions.cc | 30 ----------- - build/rust/allocator/lib.rs | 38 +++++++++++++ - 5 files changed, 73 insertions(+), 79 deletions(-) - delete mode 100644 build/rust/allocator/allocator_shim_definitions.cc - -diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn -index 06aa47f097c9c..f09314afc8158 100644 ---- a/build/rust/allocator/BUILD.gn -+++ b/build/rust/allocator/BUILD.gn -@@ -12,6 +12,9 @@ if (build_with_chromium) { - rust_allocator_uses_partition_alloc = use_partition_alloc_as_malloc - } - -+use_cpp_allocator_impls = -+ rust_allocator_uses_partition_alloc || (is_win && is_asan) -+ - buildflag_header("buildflags") { - header = "buildflags.h" - flags = [ -@@ -30,61 +33,44 @@ if (toolchain_has_rust) { - crate_root = "lib.rs" - cxx_bindings = [ "lib.rs" ] - -- deps = [ -- ":allocator_impls", -- ":allocator_shim_definitions", -- ] -+ deps = [ ":allocator_impls" ] - - no_chromium_prelude = true - no_allocator_crate = true - allow_unsafe = true -+ -+ if (use_cpp_allocator_impls) { -+ rustflags = [ -+ "--cfg", -+ "use_cpp_allocator_impls", -+ ] -+ } -+ -+ configs -= [ "//build/config/compiler:disallow_unstable_features" ] - } - -+ # TODO(crbug.com/408221149): don't build this when `use_cpp_allocator_impls` -+ # is false. - static_library("allocator_impls") { - public_deps = [] - if (rust_allocator_uses_partition_alloc) { - public_deps += [ "//base/allocator/partition_allocator:partition_alloc" ] - } - -- sources = [ -- "allocator_impls.cc", -- "allocator_impls.h", -- ] -- -- deps = [ -- ":allocator_cpp_shared", -- ":buildflags", -- -- # TODO(crbug.com/408221149): remove the C++ -> Rust dependency for the -- # default allocator. -- "//build/rust/std", -- ] -- -- visibility = [ ":*" ] -- } -- -- source_set("allocator_shim_definitions") { -- sources = [ "allocator_shim_definitions.cc" ] -- -- deps = [ ":allocator_cpp_shared" ] -- -- visibility = [ ":*" ] -- } -- -- source_set("allocator_cpp_shared") { - sources = [ - # `alias.*`, `compiler_specific.h`, and `immediate_crash.*` have been - # copied from `//base`. - # TODO(crbug.com/40279749): Avoid duplication / reuse code. - "alias.cc", - "alias.h", -+ "allocator_impls.cc", -+ "allocator_impls.h", - "compiler_specific.h", - "immediate_crash.h", - ] - -- visibility = [ -- ":allocator_impls", -- ":allocator_shim_definitions", -- ] -+ deps = [ ":buildflags" ] -+ -+ visibility = [ ":*" ] - } - } -diff --git a/build/rust/allocator/allocator_impls.cc b/build/rust/allocator/allocator_impls.cc -index 1fde98f23cd12..bf3c2a301adf5 100644 ---- a/build/rust/allocator/allocator_impls.cc -+++ b/build/rust/allocator/allocator_impls.cc -@@ -101,16 +101,6 @@ - #define USE_WIN_ALIGNED_MALLOC 0 - #endif - --// The default allocator functions provided by the Rust standard library. --extern "C" void* __rdl_alloc(size_t size, size_t align); --extern "C" void __rdl_dealloc(void* p, size_t size, size_t align); --extern "C" void* __rdl_realloc(void* p, -- size_t old_size, -- size_t align, -- size_t new_size); -- --extern "C" void* __rdl_alloc_zeroed(size_t size, size_t align); -- - namespace rust_allocator_internal { - - unsigned char* alloc(size_t size, size_t align) { -@@ -129,7 +119,8 @@ unsigned char* alloc(size_t size, size_t align) { - #elif USE_WIN_ALIGNED_MALLOC - return static_cast(_aligned_malloc(size, align)); - #else -- return static_cast(__rdl_alloc(size, align)); -+ // TODO(crbug.com/408221149): don't build this file in this case. -+ IMMEDIATE_CRASH(); - #endif - } - -@@ -143,7 +134,8 @@ void dealloc(unsigned char* p, size_t size, size_t align) { - #elif USE_WIN_ALIGNED_MALLOC - return _aligned_free(p); - #else -- __rdl_dealloc(p, size, align); -+ // TODO(crbug.com/408221149): don't build this file in this case. -+ IMMEDIATE_CRASH(); - #endif - } - -@@ -162,8 +154,8 @@ unsigned char* realloc(unsigned char* p, - #elif USE_WIN_ALIGNED_MALLOC - return static_cast(_aligned_realloc(p, new_size, align)); - #else -- return static_cast( -- __rdl_realloc(p, old_size, align, new_size)); -+ // TODO(crbug.com/408221149): don't build this file in this case. -+ IMMEDIATE_CRASH(); - #endif - } - -@@ -179,8 +171,14 @@ unsigned char* alloc_zeroed(size_t size, size_t align) { - } - return p; - #else -- return static_cast(__rdl_alloc_zeroed(size, align)); -+ // TODO(crbug.com/408221149): don't build this file in this case. -+ IMMEDIATE_CRASH(); - #endif - } - -+void crash_immediately() { -+ NO_CODE_FOLDING(); -+ IMMEDIATE_CRASH(); -+} -+ - } // namespace rust_allocator_internal -diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h -index afb335412faf9..e90ab7cd422c1 100644 ---- a/build/rust/allocator/allocator_impls.h -+++ b/build/rust/allocator/allocator_impls.h -@@ -20,6 +20,8 @@ unsigned char* realloc(unsigned char* p, - size_t new_size); - unsigned char* alloc_zeroed(size_t size, size_t align); - -+void crash_immediately(); -+ - } // namespace rust_allocator_internal - - #endif // BUILD_RUST_ALLOCATOR_ALLOCATOR_IMPLS_H_ -diff --git a/build/rust/allocator/allocator_shim_definitions.cc b/build/rust/allocator/allocator_shim_definitions.cc -deleted file mode 100644 -index a4d1bd77b7016..0000000000000 ---- a/build/rust/allocator/allocator_shim_definitions.cc -+++ /dev/null -@@ -1,30 +0,0 @@ --// Copyright 2025 The Chromium Authors --// Use of this source code is governed by a BSD-style license that can be --// found in the LICENSE file. -- --#include -- --#include "build/rust/allocator/alias.h" --#include "build/rust/allocator/immediate_crash.h" -- --extern "C" { -- --// As part of rustc's contract for using `#[global_allocator]` without --// rustc-generated shims we must define this symbol, since we are opting in to --// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 --// --// Mark it weak since rustc will generate it when it drives linking. --[[maybe_unused]] --__attribute__((weak)) unsigned char __rust_no_alloc_shim_is_unstable; -- --__attribute__((weak)) void __rust_alloc_error_handler(size_t size, -- size_t align) { -- NO_CODE_FOLDING(); -- IMMEDIATE_CRASH(); --} -- --__attribute__(( -- weak)) extern const unsigned char __rust_alloc_error_handler_should_panic = -- 0; -- --} // extern "C" -diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs -index 7f4a0fc245694..b8b67d9c6c649 100644 ---- a/build/rust/allocator/lib.rs -+++ b/build/rust/allocator/lib.rs -@@ -8,10 +8,20 @@ - //! the allocator defined here. Currently this is a thin wrapper around - //! allocator_impls.cc's functions; see the documentation there. - -+// Required to apply weak linkage to symbols. -+#![feature(linkage)] -+// Required to apply `#[rustc_std_internal_symbol]` to our alloc error handler -+// so the name is correctly mangled as rustc expects. -+#![cfg_attr(mangle_alloc_error_handler, allow(internal_features))] -+#![cfg_attr(mangle_alloc_error_handler, feature(rustc_attrs))] -+ -+#[cfg(use_cpp_allocator_impls)] - use std::alloc::{GlobalAlloc, Layout}; - -+#[cfg(use_cpp_allocator_impls)] - struct Allocator; - -+#[cfg(use_cpp_allocator_impls)] - unsafe impl GlobalAlloc for Allocator { - unsafe fn alloc(&self, layout: Layout) -> *mut u8 { - unsafe { ffi::alloc(layout.size(), layout.align()) } -@@ -32,9 +42,36 @@ unsafe impl GlobalAlloc for Allocator { - } - } - -+#[cfg(use_cpp_allocator_impls)] - #[global_allocator] - static GLOBAL: Allocator = Allocator; - -+#[cfg(not(use_cpp_allocator_impls))] -+#[global_allocator] -+static GLOBAL: std::alloc::System = std::alloc::System; -+ -+// As part of rustc's contract for using `#[global_allocator]` without -+// rustc-generated shims we must define this symbol, since we are opting in to -+// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 -+#[no_mangle] -+#[linkage = "weak"] -+static __rust_no_alloc_shim_is_unstable: u8 = 0; -+ -+#[no_mangle] -+#[linkage = "weak"] -+static __rust_alloc_error_handler_should_panic: u8 = 0; -+ -+// Mangle the symbol name as rustc expects. -+#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] -+#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] -+#[linkage = "weak"] -+fn __rust_alloc_error_handler(_size: usize, _align: usize) { -+ unsafe { ffi::crash_immediately() } -+} -+ -+// TODO(crbug.com/408221149): conditionally include the FFI glue based on -+// `use_cpp_allocator_impls` -+#[allow(dead_code)] - #[cxx::bridge(namespace = "rust_allocator_internal")] - mod ffi { - extern "C++" { -@@ -44,5 +81,6 @@ mod ffi { - unsafe fn dealloc(p: *mut u8, size: usize, align: usize); - unsafe fn realloc(p: *mut u8, old_size: usize, align: usize, new_size: usize) -> *mut u8; - unsafe fn alloc_zeroed(size: usize, align: usize) -> *mut u8; -+ unsafe fn crash_immediately(); - } - } diff --git a/backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch b/backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch deleted file mode 100644 index 1cfa07f..0000000 --- a/backports/electron/0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch +++ /dev/null @@ -1,102 +0,0 @@ -reduced -lnl - -From e201e2d467b0daad6cdbbfcd5b0e34760e4099c1 Mon Sep 17 00:00:00 2001 -From: Alan Zhao -Date: Mon, 7 Apr 2025 18:15:01 -0700 -Subject: [PATCH] Roll rust *only* f7b43542838f0a4a6cfdb17fbeadf45002042a77-1 : - 3f690c2257b7080cd3a8cce64e082fc972148990-1 - -https://chromium.googlesource.com/external/github.com/rust-lang/rust/+log/f7b43542838f..3f690c2257b7 - -Ran: ./tools/clang/scripts/upload_revision.py 5b36835df010c5813808d34e45428c624fb52ff1 - -Additionally, add fixes to the rust allocator to address https://crbug.com/407024458. - -Bug: 404285928,407024458 -Disable-Rts: True -Cq-Include-Trybots: chromium/try:chromeos-amd64-generic-cfi-thin-lto-rel -Cq-Include-Trybots: chromium/try:dawn-win10-x86-deps-rel -Cq-Include-Trybots: chromium/try:linux-chromeos-dbg -Cq-Include-Trybots: chromium/try:linux_chromium_cfi_rel_ng -Cq-Include-Trybots: chromium/try:linux_chromium_chromeos_msan_rel_ng -Cq-Include-Trybots: chromium/try:linux_chromium_msan_rel_ng -Cq-Include-Trybots: chromium/try:mac11-arm64-rel,mac_chromium_asan_rel_ng -Cq-Include-Trybots: chromium/try:ios-catalyst,win-asan,android-official -Cq-Include-Trybots: chromium/try:fuchsia-arm64-cast-receiver-rel -Cq-Include-Trybots: chromium/try:mac-official,linux-official -Cq-Include-Trybots: chromium/try:win-official,win32-official -Cq-Include-Trybots: chromium/try:win-swangle-try-x86 -Cq-Include-Trybots: chromium/try:android-cronet-riscv64-dbg -Cq-Include-Trybots: chromium/try:android-cronet-riscv64-rel -Cq-Include-Trybots: chrome/try:iphone-device -Cq-Include-Trybots: chrome/try:linux-chromeos-chrome -Cq-Include-Trybots: chrome/try:win-chrome,win64-chrome,linux-chrome,mac-chrome -Cq-Include-Trybots: chrome/try:linux-pgo,mac-pgo,win32-pgo,win64-pgo -Cq-Include-Trybots: luci.chromium.try:linux-cast-x64-rel -Cq-Include-Trybots: chromium/try:android-rust-arm32-rel -Cq-Include-Trybots: chromium/try:android-rust-arm64-dbg -Cq-Include-Trybots: chromium/try:android-rust-arm64-rel -Cq-Include-Trybots: chromium/try:linux-rust-x64-dbg -Cq-Include-Trybots: chromium/try:linux-rust-x64-rel -Cq-Include-Trybots: chromium/try:mac-rust-x64-dbg -Cq-Include-Trybots: chromium/try:win-rust-x64-dbg -Cq-Include-Trybots: chromium/try:win-rust-x64-rel -Change-Id: Iec99681a89deaf3f2c79c76f9c4d1c2b2b7d6fe1 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6439711 -Reviewed-by: Collin Baker -Commit-Queue: Alan Zhao -Cr-Commit-Position: refs/heads/main@{#1443873} ---- - build/rust/allocator/BUILD.gn | 6 +- - build/rust/allocator/lib.rs | 6 +- - build/rust/std/rules/BUILD.gn | 476 +++++++++++++++++----------------- - tools/rust/update_rust.py | 2 +- - 4 files changed, 251 insertions(+), 239 deletions(-) - -diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn -index f09314afc8158..ca581630c76c9 100644 ---- a/build/rust/allocator/BUILD.gn -+++ b/build/rust/allocator/BUILD.gn -@@ -32,6 +32,10 @@ if (toolchain_has_rust) { - sources = [ "lib.rs" ] - crate_root = "lib.rs" - cxx_bindings = [ "lib.rs" ] -+ rustflags = [ -+ "--cfg", -+ "mangle_alloc_error_handler", -+ ] - - deps = [ ":allocator_impls" ] - -@@ -40,7 +44,7 @@ if (toolchain_has_rust) { - allow_unsafe = true - - if (use_cpp_allocator_impls) { -- rustflags = [ -+ rustflags += [ - "--cfg", - "use_cpp_allocator_impls", - ] -diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs -index b8b67d9c6c649..4e2dad3d542a8 100644 ---- a/build/rust/allocator/lib.rs -+++ b/build/rust/allocator/lib.rs -@@ -57,13 +57,17 @@ static GLOBAL: std::alloc::System = std::alloc::System; - #[linkage = "weak"] - static __rust_no_alloc_shim_is_unstable: u8 = 0; - --#[no_mangle] -+// Mangle the symbol name as rustc expects. -+#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] -+#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] -+#[allow(non_upper_case_globals)] - #[linkage = "weak"] - static __rust_alloc_error_handler_should_panic: u8 = 0; - - // Mangle the symbol name as rustc expects. - #[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] - #[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] -+#[allow(non_upper_case_globals)] - #[linkage = "weak"] - fn __rust_alloc_error_handler(_size: usize, _align: usize) { - unsafe { ffi::crash_immediately() } diff --git a/backports/electron/0004-Drop-remap_alloc-dep.patch b/backports/electron/0004-Drop-remap_alloc-dep.patch deleted file mode 100644 index c6762a4..0000000 --- a/backports/electron/0004-Drop-remap_alloc-dep.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 4a0377f0b847af505915b0e0a6c4178d4e7c3244 Mon Sep 17 00:00:00 2001 -From: Matt Jolly -Date: Mon, 14 Apr 2025 20:16:46 -0700 -Subject: [PATCH] Drop `remap_alloc` dep -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -commit e3a1797dbab3eaa1c808d53215b32c8759d27ac7 dropped the source set -that this refers to, in favour of a more modern, crate-based solution. - -This seems to have been overlooked, possibly as it only appears to -be called if using the unbundle toolchain. - -Bug: 408221149 -Signed-off-by: Matt Jolly -Change-Id: I1703d8e1e456161aa2b736169eec407235847099 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6456604 -Reviewed-by: Andrew Grieve -Reviewed-by: Lei Zhang -Commit-Queue: Łukasz Anforowicz -Reviewed-by: Łukasz Anforowicz -Cr-Commit-Position: refs/heads/main@{#1446912} ---- - build/rust/std/BUILD.gn | 6 ------ - 1 file changed, 6 deletions(-) - -diff --git a/build/rust/std/BUILD.gn b/build/rust/std/BUILD.gn -index 25db126076b2f..bb2c9884520b3 100644 ---- a/build/rust/std/BUILD.gn -+++ b/build/rust/std/BUILD.gn -@@ -355,12 +355,6 @@ if (toolchain_has_rust) { - ":stdlib_public_dependent_libs", - ] - deps = [ ":prebuilt_rustc_copy_to_sysroot" ] -- -- # The host builds tools toolchain supports Rust only and does not use -- # the allocator remapping to point it to PartitionAlloc. -- if (!toolchain_for_rust_host_build_tools) { -- deps += [ ":remap_alloc" ] -- } - } - } - } diff --git a/backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch b/backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch deleted file mode 100644 index 5ba4d83..0000000 --- a/backports/electron/0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch +++ /dev/null @@ -1,354 +0,0 @@ -From e65cb388e5da56d1236607e0db9cadf89e50eded Mon Sep 17 00:00:00 2001 -From: Lukasz Anforowicz -Date: Tue, 15 Apr 2025 11:10:19 -0700 -Subject: [PATCH] [rust] Clean up `//build/rust/allocator` after a Rust - toolchain roll. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This CL makes minor tweaks and changes under `//build/rust/allocator`: - -* Thanks to the Rust toolchain roll, we no longer need to keep two - implementations, picking between them using the - `mangle_alloc_error_handler` configuration knob. -* The `#[cfg(use_cpp_allocator_impls)]` vs - `#[cfg(not(use_cpp_allocator_impls))]` choices have been deduplicated - by putting the related/conditional stuff under `mod cpp_allocator` and - `rust_allocator`. -* Closes a minor gap missed in https://crrev.com/c/6432410: - - Moving `DEPS` file to the new source location - -Bug: 408221149 -Change-Id: Id541797e03da113a5271b02a5f60eb2be08254a9 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6454872 -Reviewed-by: Alan Zhao -Commit-Queue: Łukasz Anforowicz -Cr-Commit-Position: refs/heads/main@{#1447241} ---- - build/rust/allocator/BUILD.gn | 11 +- - build/rust/{std => allocator}/DEPS | 2 +- - build/rust/allocator/allocator_impls.cc | 65 ++---------- - build/rust/allocator/allocator_impls.h | 2 + - build/rust/allocator/lib.rs | 132 +++++++++++++++--------- - 5 files changed, 97 insertions(+), 115 deletions(-) - rename build/rust/{std => allocator}/DEPS (76%) - -diff --git a/build/rust/allocator/BUILD.gn b/build/rust/allocator/BUILD.gn -index ca581630c76c9..434a61e11bdbb 100644 ---- a/build/rust/allocator/BUILD.gn -+++ b/build/rust/allocator/BUILD.gn -@@ -32,10 +32,6 @@ if (toolchain_has_rust) { - sources = [ "lib.rs" ] - crate_root = "lib.rs" - cxx_bindings = [ "lib.rs" ] -- rustflags = [ -- "--cfg", -- "mangle_alloc_error_handler", -- ] - - deps = [ ":allocator_impls" ] - -@@ -43,13 +39,12 @@ if (toolchain_has_rust) { - no_allocator_crate = true - allow_unsafe = true - -+ rustflags = [] - if (use_cpp_allocator_impls) { -- rustflags += [ -- "--cfg", -- "use_cpp_allocator_impls", -- ] -+ rustflags += [ "--cfg=use_cpp_allocator_impls" ] - } - -+ # TODO(https://crbug.com/410596442): Stop using unstable features here. - configs -= [ "//build/config/compiler:disallow_unstable_features" ] - } - -diff --git a/build/rust/std/DEPS b/build/rust/allocator/DEPS -similarity index 76% -rename from build/rust/std/DEPS -rename to build/rust/allocator/DEPS -index eb524c0a06acd..923a2e07c80f4 100644 ---- a/build/rust/std/DEPS -+++ b/build/rust/allocator/DEPS -@@ -3,7 +3,7 @@ include_rules = [ - ] - - specific_include_rules = { -- "remap_alloc.cc" : [ -+ "allocator_impls.cc" : [ - "+partition_alloc" - ] - } -diff --git a/build/rust/allocator/allocator_impls.cc b/build/rust/allocator/allocator_impls.cc -index bf3c2a301adf5..8887752f3dfad 100644 ---- a/build/rust/allocator/allocator_impls.cc -+++ b/build/rust/allocator/allocator_impls.cc -@@ -24,62 +24,6 @@ - #include - #endif - --// NOTE: this documentation is outdated. --// --// TODO(crbug.com/408221149): update this documentation, or replace it with docs --// in the Rust allocator implementation. --// --// When linking a final binary, rustc has to pick between either: --// * The default Rust allocator --// * Any #[global_allocator] defined in *any rlib in its dependency tree* --// (https://doc.rust-lang.org/edition-guide/rust-2018/platform-and-target-support/global-allocators.html) --// --// In this latter case, this fact will be recorded in some of the metadata --// within the .rlib file. (An .rlib file is just a .a file, but does have --// additional metadata for use by rustc. This is, as far as I know, the only --// such metadata we would ideally care about.) --// --// In all the linked rlibs, --// * If 0 crates define a #[global_allocator], rustc uses its default allocator --// * If 1 crate defines a #[global_allocator], rustc uses that --// * If >1 crates define a #[global_allocator], rustc bombs out. --// --// Because rustc does these checks, it doesn't just have the __rust_alloc --// symbols defined anywhere (neither in the stdlib nor in any of these --// crates which have a #[global_allocator] defined.) --// --// Instead: --// Rust's final linking stage invokes dynamic LLVM codegen to create symbols --// for the basic heap allocation operations. It literally creates a --// __rust_alloc symbol at link time. Unless any crate has specified a --// #[global_allocator], it simply calls from __rust_alloc into --// __rdl_alloc, which is the default Rust allocator. The same applies to a --// few other symbols. --// --// We're not (always) using rustc for final linking. For cases where we're not --// Rustc as the final linker, we'll define those symbols here instead. This --// allows us to redirect allocation to PartitionAlloc if clang is doing the --// link. --// --// We use unchecked allocation paths in PartitionAlloc rather than going through --// its shims in `malloc()` etc so that we can support fallible allocation paths --// such as Vec::try_reserve without crashing on allocation failure. --// --// In future, we should build a crate with a #[global_allocator] and --// redirect these symbols back to Rust in order to use to that crate instead. --// This would allow Rust-linked executables to: --// 1. Use PartitionAlloc on Windows. The stdlib uses Windows heap functions --// directly that PartitionAlloc can not intercept. --// 2. Have `Vec::try_reserve` to fail at runtime on Linux instead of crashing in --// malloc() where PartitionAlloc replaces that function. --// --// They're weak symbols, because this file will sometimes end up in targets --// which are linked by rustc, and thus we would otherwise get duplicate --// definitions. The following definitions will therefore only end up being --// used in targets which are linked by our C++ toolchain. --// --// # On Windows ASAN --// - // In ASAN builds, PartitionAlloc-Everywhere is disabled, meaning malloc() and - // friends in C++ do not go to PartitionAlloc. So we also don't point the Rust - // allocation functions at PartitionAlloc. Generally, this means we just direct -@@ -93,7 +37,6 @@ - // Note that there is a runtime option to make ASAN hook HeapAlloc() but - // enabling it breaks Win32 APIs like CreateProcess: - // https://issues.chromium.org/u/1/issues/368070343#comment29 -- - #if !BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) && BUILDFLAG(IS_WIN) && \ - defined(ADDRESS_SANITIZER) - #define USE_WIN_ALIGNED_MALLOC 1 -@@ -110,6 +53,10 @@ unsigned char* alloc(size_t size, size_t align) { - return nullptr; - } - -+ // We use unchecked allocation paths in PartitionAlloc rather than going -+ // through its shims in `malloc()` etc so that we can support fallible -+ // allocation paths such as Vec::try_reserve without crashing on allocation -+ // failure. - if (align <= alignof(std::max_align_t)) { - return static_cast(allocator_shim::UncheckedAlloc(size)); - } else { -@@ -144,6 +91,10 @@ unsigned char* realloc(unsigned char* p, - size_t align, - size_t new_size) { - #if BUILDFLAG(RUST_ALLOCATOR_USES_PARTITION_ALLOC) -+ // We use unchecked allocation paths in PartitionAlloc rather than going -+ // through its shims in `malloc()` etc so that we can support fallible -+ // allocation paths such as Vec::try_reserve without crashing on allocation -+ // failure. - if (align <= alignof(std::max_align_t)) { - return static_cast( - allocator_shim::UncheckedRealloc(p, new_size)); -diff --git a/build/rust/allocator/allocator_impls.h b/build/rust/allocator/allocator_impls.h -index e90ab7cd422c1..e562a877d886e 100644 ---- a/build/rust/allocator/allocator_impls.h -+++ b/build/rust/allocator/allocator_impls.h -@@ -10,6 +10,8 @@ - #include "build/build_config.h" - #include "build/rust/allocator/buildflags.h" - -+// This header exposes PartitionAlloc to Rust -+// (most APIs below are called from `impl GlobalAlloc` in `lib.rs`). - namespace rust_allocator_internal { - - unsigned char* alloc(size_t size, size_t align); -diff --git a/build/rust/allocator/lib.rs b/build/rust/allocator/lib.rs -index 4e2dad3d542a8..a4f898f9b107f 100644 ---- a/build/rust/allocator/lib.rs -+++ b/build/rust/allocator/lib.rs -@@ -5,72 +5,106 @@ - //! Define the allocator that Rust code in Chrome should use. - //! - //! Any final artifact that depends on this crate, even transitively, will use --//! the allocator defined here. Currently this is a thin wrapper around --//! allocator_impls.cc's functions; see the documentation there. -+//! the allocator defined here. -+//! -+//! List of known issues: -+//! -+//! 1. We'd like to use PartitionAlloc on Windows, but the stdlib uses Windows -+//! heap functions directly that PartitionAlloc can not intercept. -+//! 2. We'd like `Vec::try_reserve` to fail at runtime on Linux instead of -+//! crashing in malloc() where PartitionAlloc replaces that function. - - // Required to apply weak linkage to symbols. -+// -+// TODO(https://crbug.com/410596442): Stop using unstable features here. -+// https://github.com/rust-lang/rust/issues/29603 tracks stabilization of the `linkage` feature. - #![feature(linkage)] - // Required to apply `#[rustc_std_internal_symbol]` to our alloc error handler - // so the name is correctly mangled as rustc expects. --#![cfg_attr(mangle_alloc_error_handler, allow(internal_features))] --#![cfg_attr(mangle_alloc_error_handler, feature(rustc_attrs))] -+// -+// TODO(https://crbug.com/410596442): Stop using internal features here. -+#![allow(internal_features)] -+#![feature(rustc_attrs)] - -+/// Module that provides `#[global_allocator]` / `GlobalAlloc` interface for -+/// using an allocator from C++. - #[cfg(use_cpp_allocator_impls)] --use std::alloc::{GlobalAlloc, Layout}; -+mod cpp_allocator { -+ use super::ffi; -+ use std::alloc::{GlobalAlloc, Layout}; - --#[cfg(use_cpp_allocator_impls)] --struct Allocator; -+ struct Allocator; - --#[cfg(use_cpp_allocator_impls)] --unsafe impl GlobalAlloc for Allocator { -- unsafe fn alloc(&self, layout: Layout) -> *mut u8 { -- unsafe { ffi::alloc(layout.size(), layout.align()) } -- } -+ unsafe impl GlobalAlloc for Allocator { -+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 { -+ unsafe { ffi::alloc(layout.size(), layout.align()) } -+ } - -- unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { -- unsafe { -- ffi::dealloc(ptr, layout.size(), layout.align()); -+ unsafe fn dealloc(&self, ptr: *mut u8, layout: Layout) { -+ unsafe { -+ ffi::dealloc(ptr, layout.size(), layout.align()); -+ } - } -- } - -- unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { -- unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) } -- } -+ unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 { -+ unsafe { ffi::alloc_zeroed(layout.size(), layout.align()) } -+ } - -- unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { -- unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) } -+ unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 { -+ unsafe { ffi::realloc(ptr, layout.size(), layout.align(), new_size) } -+ } - } --} - --#[cfg(use_cpp_allocator_impls)] --#[global_allocator] --static GLOBAL: Allocator = Allocator; -+ #[global_allocator] -+ static GLOBAL: Allocator = Allocator; -+} - -+/// Module that provides `#[global_allocator]` / `GlobalAlloc` interface for -+/// using the default Rust allocator. - #[cfg(not(use_cpp_allocator_impls))] --#[global_allocator] --static GLOBAL: std::alloc::System = std::alloc::System; -- --// As part of rustc's contract for using `#[global_allocator]` without --// rustc-generated shims we must define this symbol, since we are opting in to --// unstable functionality. See https://github.com/rust-lang/rust/issues/123015 --#[no_mangle] --#[linkage = "weak"] --static __rust_no_alloc_shim_is_unstable: u8 = 0; -- --// Mangle the symbol name as rustc expects. --#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] --#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] --#[allow(non_upper_case_globals)] --#[linkage = "weak"] --static __rust_alloc_error_handler_should_panic: u8 = 0; -- --// Mangle the symbol name as rustc expects. --#[cfg_attr(mangle_alloc_error_handler, rustc_std_internal_symbol)] --#[cfg_attr(not(mangle_alloc_error_handler), no_mangle)] --#[allow(non_upper_case_globals)] --#[linkage = "weak"] --fn __rust_alloc_error_handler(_size: usize, _align: usize) { -- unsafe { ffi::crash_immediately() } -+mod rust_allocator { -+ #[global_allocator] -+ static GLOBAL: std::alloc::System = std::alloc::System; -+} -+ -+/// Module that provides global symbols that are needed both by `cpp_allocator` -+/// and `rust_allocator`. -+/// -+/// When `rustc` drives linking, then it will define the symbols below. But -+/// Chromium only uses `rustc` to link Rust-only executables (e.g. `build.rs` -+/// scripts) and otherwise uses a non-Rust linker. This is why we have to -+/// manually define a few symbols below. We define those symbols -+/// as "weak" symbols, so that Rust-provided symbols "win" in case where Rust -+/// actually does drive the linking. This hack works (not only for Chromium, -+/// but also for google3 and other projects), but isn't officially supported by -+/// `rustc`. -+/// -+/// TODO(https://crbug.com/410596442): Stop using internal features here. -+mod both_allocators { -+ use super::ffi; -+ -+ /// As part of rustc's contract for using `#[global_allocator]` without -+ /// rustc-generated shims we must define this symbol, since we are opting in -+ /// to unstable functionality. See https://github.com/rust-lang/rust/issues/123015 -+ #[no_mangle] -+ #[linkage = "weak"] -+ static __rust_no_alloc_shim_is_unstable: u8 = 0; -+ -+ // Mangle the symbol name as rustc expects. -+ #[rustc_std_internal_symbol] -+ #[allow(non_upper_case_globals)] -+ #[linkage = "weak"] -+ static __rust_alloc_error_handler_should_panic: u8 = 0; -+ -+ // Mangle the symbol name as rustc expects. -+ #[rustc_std_internal_symbol] -+ #[allow(non_upper_case_globals)] -+ #[linkage = "weak"] -+ fn __rust_alloc_error_handler(_size: usize, _align: usize) { -+ // TODO(lukasza): Investigate if we can just call `std::process::abort()` here. -+ // (Not really _needed_, but it could simplify code a little bit.) -+ unsafe { ffi::crash_immediately() } -+ } - } - - // TODO(crbug.com/408221149): conditionally include the FFI glue based on diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index 92270b8..ab1603d 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,18 +1,19 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=35.5.0 +pkgver=39.2.3 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=134.0.6998.205 -_copium_tag=134.0 +_chromium=142.0.7444.175 +_copium_tag=142.0 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" url="https://github.com/electron/electron" +# armv7: Segmentation fault on builder despite building in CI arch="aarch64 x86_64" # same as chromium license="MIT" depends="gtk+3.0 so:libudev.so.1 xdg-utils" -_llvmver=20 +_llvmver=21 makedepends=" ada-dev alsa-lib-dev @@ -24,8 +25,8 @@ makedepends=" c-ares-dev cairo-dev clang$_llvmver-dev + clang$_llvmver-rtlib clang-extra-tools - compiler-rt crc32c-dev cups-dev curl-dev @@ -44,6 +45,7 @@ makedepends=" gn gzip harfbuzz-dev + highway-dev hdrhistogram-c-dev hunspell-dev http-parser-dev @@ -74,7 +76,7 @@ makedepends=" libxscrnsaver-dev libxslt-dev linux-headers - lld + lld$_llvmver llhttp-dev llvm$_llvmver mesa-dev @@ -116,18 +118,20 @@ subpackages="$pkgname-lang $pkgname-dev" source=" https://ayakael.net/api/packages/mirrors/generic/electron/$_gittag/electron-$_gittag-$_chromium.tar.zst copium-$_copium_tag.tar.gz::https://codeberg.org/selfisekai/copium/archive/$_copium_tag.tar.gz - chromium-revert-drop-of-system-java.patch + 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch compiler.patch disable-dns_config_service.patch disable-failing-tests.patch fc-cache-version.patch - fix-opus.patch + fix-ffmpeg-codec-list.patch fstatat-32bit.patch gdbinit.patch generic-sensor-include.patch - musl-auxv.patch + headless-shell-no-license.patch musl-sandbox.patch musl-tid-caching.patch + net-test-no-vpython.patch + net-test-pyws3-py3.12.patch no-execinfo.patch no-mallinfo.patch no-res-ninit-nclose.patch @@ -135,19 +139,14 @@ source=" partalloc-no-tagging-arm64.patch pvalloc.patch temp-failure-retry.patch - pipewire-1.4.patch - gperf-3.2-fix.patch - 0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch - 0002-Call-Rust-default-allocator-directly-from-Rust.patch - 0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch - 0004-Drop-remap_alloc-dep.patch - 0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch electron_icon.patch electron_python-jinja-3.10.patch electron_webpack-hash.patch electron_unbundle-node.patch electron_system-zlib-headers.patch + electron_do-not-strip-binaries.patch + electron_shell-file-dialog-drop-glibc.patch default.conf electron.desktop @@ -157,8 +156,9 @@ _copium_patches=" cr131-v8-non4k-pages.patch cr133-ffmpeg-no-noh264parse.patch cr133-is-musl-libcxx.patch - cr133-mv2-still-not-dead.patch - cr134-unbundle-simdutf.patch + cr138-node-version-check.patch + cr140-musl-prctl.patch + cr142-autofill-incomplete-formfielddata.patch " # Avoid conflicting providers sonameprefix="$pkgname:" @@ -166,17 +166,19 @@ sonameprefix="$pkgname:" options="!check net suid" builddir="$srcdir/electron-$_gittag-$_chromium" -export CC=clang-$_llvmver -export CXX=clang++-$_llvmver +export CC="/usr/lib/llvm$_llvmver/bin/clang" +export CXX="/usr/lib/llvm$_llvmver/bin/clang++" # required to find the tools -export AR=llvm-ar -export NM=llvm-nm -export LD=clang++-$_llvmver +export NM="/usr/lib/llvm$_llvmver/bin/llvm-nm" +export AR="/usr/lib/llvm$_llvmver/bin/llvm-ar" +export LD="/usr/lib/llvm$_llvmver/bin/clang++" # less log spam, reproducible export CFLAGS="${CFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-shift-count-overflow -Wno-ignored-attributes" export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-builtin-macro-redefined -Wno-deprecated-declarations -Wno-invalid-constexpr" +# _LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE is set by project +export CXXFLAGS="${CXXFLAGS/-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST/}" export CPPFLAGS="${CPPFLAGS/-g/} -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" case "$CARCH" in aarch64|arm*|riscv64) @@ -233,8 +235,8 @@ snapshot() { --nohooks python3 src/build/landmines.py - python3 src/build/util/lastchange.py -o src/build/util/LASTCHANGE \ - --revision src/gpu/webgpu/DAWN_VERSION + python3 src/build/util/lastchange.py -m DAWN_COMMIT_HASH -s src/third_party/dawn \ + --revision src/gpu/webgpu/DAWN_VERSION --header src/gpu/webgpu/dawn_commit_hash.h python3 src/build/util/lastchange.py -m GPU_LISTS_VERSION \ --revision-id-only --header src/gpu/config/gpu_lists_version.h python3 src/build/util/lastchange.py -m SKIA_COMMIT_HASH \ @@ -269,6 +271,8 @@ snapshot() { mcli cp "$SRCDEST"/$pkgname-$_gittag-$_chromium.tar.zst "$_distbucket" } +export RUSTC_BOOTSTRAP=1 + prepare() { default_prepare @@ -314,9 +318,14 @@ prepare() { ./update_npm_deps ) + # generate dawn_commit_hash + # TODO: remove on next update as it'll be generated after + # https://ayakael.net/mirrors/electron/commit/7623f4a14ab44fa4f4343e47d9d681c9b4aa984c + python3 build/util/lastchange.py -m DAWN_COMMIT_HASH -s third_party/dawn \ + --revision gpu/webgpu/DAWN_VERSION --header gpu/webgpu/dawn_commit_hash.h + # reusable system library settings # flatbuffers - tensorflow has a few static_asserts for a specific patch version - # highway - requires highway>=1.1.0 (arm failures) # libavif - https://github.com/AOMediaCodec/libavif/commit/50a541469c98009016af8dcc9f83a1be79f3a7d9 # libaom - https://aomedia.googlesource.com/aom/+/706ee36dcc82%5E%21/ # but watch this space: https://aomedia-review.googlesource.com/c/aom/+/188606 @@ -332,6 +341,7 @@ prepare() { fontconfig freetype harfbuzz-ng + highway libdrm libjpeg libsecret @@ -420,6 +430,8 @@ prepare() { third_party/blink/renderer/core/xml/parser/xml_document_parser.cc \ third_party/libxml/chromium/*.cc + echo "$CTARGET" >> build/rust/known-target-triples.txt + _configure } @@ -453,10 +465,9 @@ _configure() { custom_toolchain=\"//build/toolchain/linux/unbundle:default\" disable_fieldtrial_testing_config=true enable_hangout_services_extension=true - enable_nacl=false enable_nocompile_tests=false - enable_stripping=false enable_rust=true + enable_stripping=false enable_vr=false fatal_linker_warnings=false ffmpeg_branding=\"Chrome\" @@ -469,6 +480,7 @@ _configure() { is_musl=true is_official_build=true link_pulseaudio=true + node_version_check=false proprietary_codecs=true rtc_link_pipewire=true rtc_use_pipewire=true @@ -478,6 +490,7 @@ _configure() { safe_browsing_use_unrar=false symbol_level=$symbol_level treat_warnings_as_errors=false + se_clang_modules=false use_custom_libcxx=true use_lld=true use_pulseaudio=true @@ -551,39 +564,36 @@ lang() { } sha512sums=" -a30c115f17f9811347f8713fa604b56244e39facbbab7b6b82cbc3049ed12b429b06f2faafa8a48dd727b655753848d099ba6720fae15c9bb00e6a427dc2758e electron-v35.5.0-134.0.6998.205.tar.zst -c1857b5d6975650f915f3db552666f521822b857e39958ccfb54129f3878f272deaafc3dd446bc8441a5e84f075791feeeb62841b74bb555d8c546bfe231d164 copium-134.0.tar.gz -29bb685e03356a77df5fd347cdf55194cc8b3265c421cc76e54d64edefc329dbcb052deb26b22e8f587ce68456876c071de1b7d258dd0fcc6ee66c875ec4a020 chromium-revert-drop-of-system-java.patch -d9cc4a37a0311d23ae315a8d8124f8dbf60db8cc4a3943818638174b20387f1d770d00871f6608957b246ad956abca43c22ea0b072724287f2947e1909e47323 compiler.patch -4057cc78f10bfd64092bc35a373869abb1d68b880cdbca70422f39ffd78a929c19c7728d4d4c40709aaba25581148a93ae5343e724849fd35323062ed68753fa disable-dns_config_service.patch -2470904846e3adde2c9506f9e78220daca0932320b628dd3d427bf2b7c17a8f7880cb97e787b046c28de7aca642e1a8d30824d6049905976da77e7473baa64da disable-failing-tests.patch -5fc5c012c1db6cf1ba82f38c6f3f4f5ca3a209e47ac708a74de379b018e0649b7694877c9571ef79002dde875ffc07b458a3355425f1c01867f362c66c2bc1bf fc-cache-version.patch -f7fe8a8e5eee17310fb4c3e5de621b4b89ea0567f75033c65be970950cca62b50c5fbd004735e4ad39bdb2e1638b3b73ea614203d323f8181ae18c71edf302a0 fix-opus.patch +7c4c33570bf6c0ff0d1d2606b64e25e9b8f64f399e49dd03632ee712de5551eb7757ac999ff1206d0c70057b4bf0ce535ac228ddbb88ffd9b1585d7abd483266 electron-v39.2.3-142.0.7444.175.tar.zst +30b298549804e7753b0b639b72417ba081e964676862b6c7d73ad73cdf806883f20e4a4b36e67a6c375eaf2dd97686cf21b90b062400d3b61fba86da4d239bfa copium-142.0.tar.gz +69b45005451ccd69c354b4c2910e92371cb801665f5e300dbecd36f8bc4ce68e77a431b5dac07c0937787debb4e93b7aadefa0a1e76c4ae334d2547ca3ca14ff 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch +dc254dd79e135aeac3e9c03eb055e3bc17980fc213f8c4d8d7921a575be7f9c26b91f110a6dcb01c0a824a7d9375c09f8a61c8858c20c11d79c03f873e2cb3f9 compiler.patch +1bee1448e409fedff635388ee6f1efa6d23c29ae3e6b6fd31452c56974adb40fcd0088c82d1e643d549154663e402942cbab9807dff5aff2d8997a09de6f5655 disable-dns_config_service.patch +0ef9168b8b1a4779bc4c8df718735e06d29e459dcfd00f8cbf9a4edaf9fade8089225219e46dead7de81de716bddc8d745dc2069db0ee7f7e5d2f64c5236e2ab disable-failing-tests.patch +0050857a9a9553c10fd502fe70606bce48269c9b48fa82ce9e111575637a0c03578e923c82fc639fcb574fc3337aeef50d8a0aea5e512ae4eab83b8c3d732cf6 fc-cache-version.patch +87f63d83139562e058f3f649eb1f62bf100dd92c2bb6ee393fdce0c8f7d7c188a7062394647aafe4e82c0a8fbbffeb613edc5c8dd9415dd9dda777827ea371c5 fix-ffmpeg-codec-list.patch c63dee5044353eb306a39ca1526158c0f003ab310ecb03d1c368dc2a979454590c84b8d3c15484517d5e66bb8add9b231da9abbadf2e50850abd72ac1345c4ab fstatat-32bit.patch 33ee60863cc438ef57ffef92ba4cf67a856a5ffc16138bce241bcf87e47b15154aa86918e793c26f7ec4dc62a445257ad5673ed7001daf22c4043cf6cc57da7f gdbinit.patch 36a764fa73443b47d38050b52dbe6ad2fa8d67201ff4ccdbad13b52308ef165ca046aac6f9609fe35890a6485f0f3e672e78cc41e3e44f3cdc7f145e540524e8 generic-sensor-include.patch -99bcc7dd485b404a90c606a96addab1d900852128d44fb8cea8acc7303189ef87c89a7b0e749fd0e10c5ef5f6bf1fadeb5c16a34503cab6a59938ce2653d887e musl-auxv.patch +a94cf7a0670abf5178abba33c619cc6d41d73f2e16c7a1fd5b152152f5077df103e049d166e3b8627797c38113821d2f2e6b64cd48d132c1e90ad32d63a349f5 headless-shell-no-license.patch 51f1959bd622af26a1c3a1f4b0ad9a5bfa461057aa4cf9960c568dddf8ac47d55989c277f5d5ab5db040a04c54925a531af7a1cc767559218b408eaa6bdd7577 musl-sandbox.patch e7163ac5810ac85366cef2447412287c856e3d67c6b77f219a6e5a418b1965b98e449c409424ad0704a5bded9355dd0aec3dc4585918ce5a2ab36c079707afe2 musl-tid-caching.patch +3b7420d58d13dfc4baab5065e3017f666f51fed6de087af42a660a839d7b4444b50d1a93204322d213df36c6722eaf6b08d46d50dc374198a342da2675fafff5 net-test-no-vpython.patch +e487662b6606ea526ddd716c31e6b9ad3d61f1bee5356cd94b78a903efb3928338cbb48e3d5840b34c3b70a71e8361a228430bd50e707ad301228a7049d59e37 net-test-pyws3-py3.12.patch a250cff50d282b02ce0f28880d0a2b4fb8e7df51bc072bfeeddc561c29a7c76453dbcbc7b17b82966a7b30a31409d2555720d1dcf963e1b3fb8a2a06a6abcf46 no-execinfo.patch 0b41aeb6b212f9c3f61aa0a8d3085c9e865a2e68f3270ceec2376aab67f337ac46eaea7da36d3fd7219e2a1cb731b7aa2d3fb619a374d2b7653976b9f4f384bb no-mallinfo.patch e4c4e5bc6f828f9c883dd418c0ba01887949c29c311f76206a1ec29f620b0c0ba0452949dc2778a9c46ea066405857536964a36436a68eecf7da7952736333cf no-res-ninit-nclose.patch 6dc4d8dc92e685dace62265a1ddb3aebc558aed54d20ff6d36b030be0c48d7e84662326c31363612492574d9a03c62653cdc21a60995b97dee1d75cae86a9f9b no-sandbox-settls.patch -f2b08538ff57c50b3772a07ca91845f9d45f4a5112f608b6192d4fb5d7be48f478c0c36194d95ab7bbf933e0278e5c6d578619d8643895cdc40386eebc5b975f partalloc-no-tagging-arm64.patch +b75908a45ee2f4f806eec8d86fca2f51fda3531b88de48ef4539c364a40d7e2897cdaf38b715682d712648e3f43aac983055e688385f85fa7b7204ffb6d617e1 partalloc-no-tagging-arm64.patch 03f829a2da633533ef3fd0f287f5ec602d936a97a98b53cd2415553c2537ae9d571f35397ca7c9fb3f4b0806c300e3b189569f8d979ca132e1a2a4dae7206396 pvalloc.patch e48693e6b7aeebf69a5acbf80d9a35defe4c23835121dfeb58b051ac7c527e758a41004f4d193274fe1b01c0bfb1dbc77b09cb6a404a3fdee507a2918afb0edb temp-failure-retry.patch -1814096bc611e7f56cc5c570214dae715a4cda1fba96a6b585a73a1abc8b9161efaa799dc83887dac531dbafe9479bbe235cabe1a61cb3081e268c53a6144908 pipewire-1.4.patch -4bc087a1e5acbb0f8f884756b40c127df88699ecd6eb42c4aff6691b87239bb6915dd102e9ef2544502a12bff011859ad497206940473e6b0a0fd75afb562a4c gperf-3.2-fix.patch -858f8e3c544abf3ffe0f54ba303713e9b4058e15996c8dc10bab7c999d82e1960756325a41d6bebb3a00404efb8e51c299f61f60de4feaac6b621757ab85d329 0001-Reland-Use-global_allocator-to-provide-Rust-allocato.patch -077497c1598c7db9f4c23e000e9b86e1833de4866479fd921313543ad599e141427bf38ae687f84c3da59af68f09a776265c2a569e1a7abfa80440231baef10a 0002-Call-Rust-default-allocator-directly-from-Rust.patch -5002aa73eb19b87c702eef5b087ecb3a2679142c28cd95a5a9571aeffe24e6944497e862058ed1d609317a723cdec1678f84543235fb93f12653a92b92309efe 0003-Roll-rust-only-f7b43542838f0a4a6cfdb17fbeadf45002042.patch -d2e414135d2b046dd9efe277f88062bcb0a94749a17a014309260b1469305d55059931b9531572713c8e516897e30fd2f5317948ece1581ffe9b7b6c01078a6d 0004-Drop-remap_alloc-dep.patch -fe66228c0eefe3d08e2a7955b11e6a46f58f477befceba1628765fb016f30eb0bb02723aeedcabdb1ea3b84c42b5ea65073998e0a64f5ce082120fc7e65dee9a 0005-rust-Clean-up-build-rust-allocator-after-a-Rust-tool.patch 465107da7818b237e3c144a318ab80c3c9343b51ed38b8971ef204692d13346929becbe94cefad4c153788d3a200642143584d5ca070f6304e768ba2139c19ec electron_icon.patch e05180199ee1d559e4e577cedd3e589844ecf40d98a86321bf1bea5607b02eeb5feb486deddae40e1005b644550331f6b8500177aa7e79bcb3750d3c1ceb76c3 electron_python-jinja-3.10.patch 2aa340854316f1284217c0ca17cbf44953684ad6c7da90815117df30928612eb9fb9ffb734b948dfc309cd25d1a67cd57f77aac2d052a3dd9aca07a3a58cbb30 electron_webpack-hash.patch c7f57929943a86f9e5f333da9d5691da88038770eeb46dd0a0719962c934deb2879f0e7a1ed714e9383e38ee4d68eb754501f362c4d7cdee76cfc2e980b21272 electron_unbundle-node.patch 4d9287d4cdfe27fbfb7be3d4b26c0c40edbd6a0c3ff926d60f2093ca09c15bcb58e20c2ccc8c0606aafd66c6d25a54225bc329cb056d8c5b297db4c6d0e768e6 electron_system-zlib-headers.patch +7031ddb61a858e95d83366185a53b5a2e4be9abe0aa4957543e0621cad57175ffef31bd87b8be25255184bb4cb30ec4fbced055407c6c8c7940c9e240b25d498 electron_do-not-strip-binaries.patch +0f8f36c21cc50c80e378691265845ff10fa53953d6cd5352fe71efcba489f956e50d374d8f634dadc3569c4901a81a1f308a3e69140c0f9136e0777022b9520f electron_shell-file-dialog-drop-glibc.patch e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop 5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh diff --git a/backports/electron/chromium-revert-drop-of-system-java.patch b/backports/electron/chromium-revert-drop-of-system-java.patch deleted file mode 100644 index 24355bf..0000000 --- a/backports/electron/chromium-revert-drop-of-system-java.patch +++ /dev/null @@ -1,17 +0,0 @@ -This was dropped for some reason in 6951c37cecd05979b232a39e5c10e6346a0f74ef -allows using /usr/bin/java instead of a downloaded one (that doesn't work on musl) --- ---- a/third_party/closure_compiler/compiler.py 2021-05-20 04:17:53.000000000 +0200 -+++ b/third_party/closure_compiler/compiler.py 2021-05-20 04:17:53.000000000 +0200 -@@ -13,8 +13,9 @@ - - - _CURRENT_DIR = os.path.join(os.path.dirname(__file__)) --_JAVA_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") --assert os.path.isfile(_JAVA_PATH), "java only allowed in android builds" -+_JAVA_BIN = "java" -+_JDK_PATH = os.path.join(_CURRENT_DIR, "..", "jdk", "current", "bin", "java") -+_JAVA_PATH = _JDK_PATH if os.path.isfile(_JDK_PATH) else _JAVA_BIN - - class Compiler(object): - """Runs the Closure compiler on given source files to typecheck them diff --git a/backports/electron/compiler.patch b/backports/electron/compiler.patch index df41f2c..41b9b08 100644 --- a/backports/electron/compiler.patch +++ b/backports/electron/compiler.patch @@ -1,14 +1,12 @@ --- ./build/config/compiler/BUILD.gn.orig +++ ./build/config/compiler/BUILD.gn -@@ -591,24 +591,6 @@ +@@ -658,22 +658,6 @@ } } - # TODO(crbug.com/40283598): This causes binary size growth and potentially - # other problems. -- # TODO(crbug.com/40284925): This isn't supported by Cronet's mainline llvm version. -- if (default_toolchain != "//build/toolchain/cros:target" && -- !llvm_android_mainline) { +- if (default_toolchain != "//build/toolchain/cros:target") { - cflags += [ - "-mllvm", - "-split-threshold-for-reg-with-hint=0", @@ -25,58 +23,91 @@ # TODO(crbug.com/40192287): Investigate why/if this should be needed. if (is_win) { cflags += [ "/clang:-ffp-contract=off" ] -@@ -1045,20 +1027,6 @@ - # `-nodefaultlibs` from the linker invocation from Rust, which would be used - # to compile dylibs on Android, such as for constructing unit test APKs. - "-Cdefault-linker-libraries", -- -- # To make Rust .d files compatible with ninja -- "-Zdep-info-omit-d-target", -- -- # If a macro panics during compilation, show which macro and where it is -- # defined. -- "-Zmacro-backtrace", -- -- # For deterministic builds, keep the local machine's current working -- # directory from appearing in build outputs. -- "-Zremap-cwd-prefix=.", -- -- # We use clang-rt sanitizer runtimes. -- "-Zexternal-clangrt", - ] - - if (!is_win || force_rustc_color_output) { -@@ -1107,7 +1075,6 @@ - # Don't allow unstable features to be enabled by `#![feature()]` without - # additional command line flags. - config("disallow_unstable_features") { -- rustflags = [ "-Zallow-features=" ] - } - - config("libcxx_hardening") { -@@ -1242,8 +1209,8 @@ - } +@@ -1273,8 +1257,8 @@ + # simplicity we always explicitly set the architecture. + if (current_cpu == "x64") { + if (is_clang && !is_android && !is_fuchsia && !is_chromeos_device) { +- cflags += [ "--target=x86_64-unknown-linux-gnu" ] +- ldflags += [ "--target=x86_64-unknown-linux-gnu" ] ++ cflags += [ "--target=x86_64-alpine-linux-musl" ] ++ ldflags += [ "--target=x86_64-alpine-linux-musl" ] + } else { + cflags += [ "-m64" ] + ldflags += [ "-m64" ] +@@ -1282,8 +1266,8 @@ + cflags += [ "-msse3" ] + } else if (current_cpu == "x86") { + if (is_clang && !is_android && !is_chromeos_device) { +- cflags += [ "--target=i386-unknown-linux-gnu" ] +- ldflags += [ "--target=i386-unknown-linux-gnu" ] ++ cflags += [ "--target=i586-alpine-linux-musl" ] ++ ldflags += [ "--target=i586-alpine-linux-musl" ] + } else { + cflags += [ "-m32" ] + ldflags += [ "-m32" ] +@@ -1294,8 +1278,8 @@ + ] } else if (current_cpu == "arm") { - if (is_clang && !is_android && !is_nacl && !is_chromeos_device) { + if (is_clang && !is_android && !is_chromeos_device) { - cflags += [ "--target=arm-linux-gnueabihf" ] - ldflags += [ "--target=arm-linux-gnueabihf" ] + cflags += [ "--target=armv7-alpine-linux-musleabihf" ] + ldflags += [ "--target=armv7-alpine-linux-musleabihf" ] } - if (!is_nacl) { - cflags += [ -@@ -1257,8 +1224,8 @@ + cflags += [ + "-march=$arm_arch", +@@ -1306,8 +1290,8 @@ + } } else if (current_cpu == "arm64") { - if (is_clang && !is_android && !is_nacl && !is_fuchsia && - !is_chromeos_device) { + if (is_clang && !is_android && !is_fuchsia && !is_chromeos_device) { - cflags += [ "--target=aarch64-linux-gnu" ] - ldflags += [ "--target=aarch64-linux-gnu" ] + cflags += [ "--target=aarch64-alpine-linux-musl" ] + ldflags += [ "--target=aarch64-alpine-linux-musl" ] } - } else if (current_cpu == "mipsel" && !is_nacl) { + } else if (current_cpu == "mipsel") { ldflags += [ "-Wl,--hash-style=sysv" ] -@@ -2086,7 +2053,7 @@ +@@ -1551,22 +1535,22 @@ + ldflags += [ "-maix64" ] + } + } else if (is_clang) { +- cflags += [ "--target=powerpc64le-unknown-linux-gnu" ] +- ldflags += [ "--target=powerpc64le-unknown-linux-gnu" ] ++ cflags += [ "--target=powerpc64le-alpine-linux-musl" ] ++ ldflags += [ "--target=powerpc64le-alpine-linux-musl" ] + } else { + cflags += [ "-m64" ] + ldflags += [ "-m64" ] + } + } else if (current_cpu == "riscv64") { + if (is_clang && !is_android) { +- cflags += [ "--target=riscv64-linux-gnu" ] +- ldflags += [ "--target=riscv64-linux-gnu" ] ++ cflags += [ "--target=riscv64-alpine-linux-musl" ] ++ ldflags += [ "--target=riscv64-alpine-linux-musl" ] + } + cflags += [ "-mabi=lp64d" ] + } else if (current_cpu == "loong64") { + if (is_clang) { +- cflags += [ "--target=loongarch64-linux-gnu" ] +- ldflags += [ "--target=loongarch64-linux-gnu" ] ++ cflags += [ "--target=loongarch64-alpine-linux-musl" ] ++ ldflags += [ "--target=loongarch64-alpine-linux-musl" ] + } + cflags += [ + "-mabi=lp64d", +@@ -1574,8 +1558,8 @@ + ] + } else if (current_cpu == "s390x") { + if (is_clang) { +- cflags += [ "--target=s390x-unknown-linux-gnu" ] +- ldflags += [ "--target=s390x-unknown-linux-gnu" ] ++ cflags += [ "--target=s390x-alpine-linux-musl" ] ++ ldflags += [ "--target=s390x-alpine-linux-musl" ] + } + cflags += [ "-m64" ] + ldflags += [ "-m64" ] +@@ -2274,7 +2258,7 @@ defines = [ "_HAS_NODISCARD" ] } } else { @@ -87,51 +118,59 @@ cflags += [ "-Wextra" ] --- ./build/config/rust.gni.orig +++ ./build/config/rust.gni -@@ -198,13 +198,13 @@ +@@ -178,11 +178,11 @@ rust_abi_target = "" if (is_linux || is_chromeos) { if (current_cpu == "arm64") { - rust_abi_target = "aarch64-unknown-linux-gnu" + rust_abi_target = "aarch64-alpine-linux-musl" - cargo_target_abi = "" } else if (current_cpu == "x86") { - rust_abi_target = "i686-unknown-linux-gnu" + rust_abi_target = "i586-alpine-linux-musl" - cargo_target_abi = "" } else if (current_cpu == "x64") { - rust_abi_target = "x86_64-unknown-linux-gnu" + rust_abi_target = "x86_64-alpine-linux-musl" - cargo_target_abi = "" } else if (current_cpu == "arm") { if (arm_float_abi == "hard") { -@@ -214,18 +214,18 @@ - } - if (arm_arch == "armv7-a" || arm_arch == "armv7") { - # No way to inform Rust about the -a suffix. -- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix + float_suffix = "hf" +@@ -200,25 +200,21 @@ + # The thumbv7 vs. armv7 distinction is for legacy reasons and both + # targets in fact target Thumb, see: + # https://github.com/rust-lang/rust/issues/44722 +- if (arm_use_neon) { +- rust_abi_target = "thumbv7neon-unknown-linux-gnueabi" + float_suffix +- } else { +- rust_abi_target = "armv7-unknown-linux-gnueabi" + float_suffix +- } + rust_abi_target = "armv7-alpine-linux-musleabi" + float_suffix - cargo_target_abi = "eabi" + float_suffix } else { - rust_abi_target = "arm-unknown-linux-gnueabi" + float_suffix + rust_abi_target = "armv6-alpine-linux-musleabi" + float_suffix - cargo_target_abi = "eabi" + float_suffix } } else if (current_cpu == "riscv64") { - rust_abi_target = "riscv64gc-unknown-linux-gnu" + rust_abi_target = "riscv64-alpine-linux-musl" - cargo_target_abi = "" + } else if (current_cpu == "ppc64") { +- rust_abi_target = "powerpc64le-unknown-linux-gnu" ++ rust_abi_target = "powerpc64le-alpine-linux-musl" + } else if (current_cpu == "s390x") { +- rust_abi_target = "s390x-unknown-linux-gnu" ++ rust_abi_target = "s390x-alpine-linux-musl" + } else if (current_cpu == "loong64") { +- rust_abi_target = "loongarch64-unknown-linux-gnu" ++ rust_abi_target = "loongarch64-alpine-linux-musl" } else { # Best guess for other future platforms. - rust_abi_target = current_cpu + "-unknown-linux-gnu" + rust_abi_target = current_cpu + "-alpine-linux-musl" - cargo_target_abi = "" } } else if (is_android) { + import("//build/config/android/abi.gni") --- ./build/config/clang/BUILD.gn.orig +++ ./build/config/clang/BUILD.gn -@@ -128,14 +128,15 @@ - } else if (is_apple) { - _dir = "darwin" +@@ -207,22 +207,23 @@ + assert(false) # Unhandled cpu type + } } else if (is_linux || is_chromeos) { + _dir = "linux" if (current_cpu == "x64") { @@ -146,16 +185,18 @@ } else if (current_cpu == "arm64") { - _dir = "aarch64-unknown-linux-gnu" + _suffix = "-aarch64" + } else if (current_cpu == "loong64") { +- _dir = "loongarch64-unknown-linux-gnu" ++ _suffix = "-loongarch64" + } else if (current_cpu == "riscv64") { +- _dir = "riscv64-unknown-linux-gnu" ++ _suffix = "-riscv64" + } else if (current_cpu == "ppc64") { +- _dir = "ppc64le-unknown-linux-gnu" ++ _suffix = "-powerpc64le" + } else if (current_cpu == "s390x") { +- _dir = "s390x-unknown-linux-gnu" ++ _suffix = "-s390x" } else { assert(false) # Unhandled cpu type } ---- ./build/config/gcc/BUILD.gn.orig -+++ ./build/config/gcc/BUILD.gn -@@ -32,7 +32,6 @@ - # See http://gcc.gnu.org/wiki/Visibility - config("symbol_visibility_hidden") { - cflags = [ "-fvisibility=hidden" ] -- rustflags = [ "-Zdefault-visibility=hidden" ] - - # Visibility attribute is not supported on AIX. - if (current_os != "aix") { diff --git a/backports/electron/disable-dns_config_service.patch b/backports/electron/disable-dns_config_service.patch index a72e1c4..731a751 100644 --- a/backports/electron/disable-dns_config_service.patch +++ b/backports/electron/disable-dns_config_service.patch @@ -2,7 +2,7 @@ diff --git a/net/dns/BUILD.gn b/net/dns/BUILD.gn index f36bf68..805d9a6 100644 --- a/net/dns/BUILD.gn +++ b/net/dns/BUILD.gn -@@ -130,8 +130,8 @@ source_set("dns") { +@@ -142,8 +142,8 @@ ] } else if (is_linux) { sources += [ @@ -13,3 +13,11 @@ index f36bf68..805d9a6 100644 ] } else if (is_posix) { sources += [ +@@ -455,7 +455,6 @@ + if (is_android) { + sources += [ "dns_config_service_android_unittest.cc" ] + } else if (is_linux) { +- sources += [ "dns_config_service_linux_unittest.cc" ] + } else if (is_posix) { + sources += [ "dns_config_service_posix_unittest.cc" ] + } diff --git a/backports/electron/disable-failing-tests.patch b/backports/electron/disable-failing-tests.patch index 84d0027..9351ea0 100644 --- a/backports/electron/disable-failing-tests.patch +++ b/backports/electron/disable-failing-tests.patch @@ -2,86 +2,6 @@ safesprintf emitnull: error: conversion from 'std::nullptr_t' to 'const internal::Arg' is ambiguous const internal::Arg arg_array[] = { args... }; -flatmap incompletetype: - error: static assertion failed due to requirement 'std::__is_complete_or_unbounded(std::__type_identity>{})': template argument must be a complete class or an unbounded array - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - -i18n, time: - various icu failures (new icu time formatting? internal api difference?) - a ton of these fail: - - Expected equality of these values: - u"Monday 16 May – Saturday 28 May" - Which is: u"Monday 16 May \x2013 Saturday 28 May" - DateIntervalFormat(begin_time, end_time, DATE_FORMAT_MONTH_WEEKDAY_DAY) - Which is: u"Monday 16\x2009\x2013\x2009Saturday 28 May" - - ../../base/i18n/time_formatting_unittest.cc:84: Failure - Expected equality of these values: - clock12h_pm - Which is: u"3:42 PM" - TimeFormatTimeOfDay(time) - Which is: u"3:42\x202FPM" - - .. and so on - -fileutiltest filetofile: - ../../base/files/file_util_unittest.cc:2692: Failure - Value of: stream - Actual: true - Expected: false - -stacktracetest: crashes (this doesn't seem to use execinfo so probably relies on glibc internal layout for tracing here) - -platformthreadtest canchangethreadtype: - ../../base/threading/platform_thread_unittest.cc:445: Failure - Expected equality of these values: - PlatformThread::CanChangeThreadType(ThreadType::kBackground, ThreadType::kResourceEfficient) - Which is: true - kCanIncreasePriority - Which is: false - -scopedfdownershiptrackingtest crashonunownedclose: fails due to scoped-file-no-close.patch - -stackcontainer customallocator: - ../../base/containers/stack_container_unittest.cc:211: Failure - Expected equality of these values: - 1 - Allocator::deallocated - Which is: 0 - -nativelibrarytest loadlibrarypreferownsymbols: crashes (probably musl dlopen does not play nice here) - -spantest empty: crashes (this looks fishy) - -readelfbuildid: crashes (this looks like glibc dynamic linker semantics) - -nss db unittest: various nss failures: e.g.: - ../../net/cert/nss_cert_database_unittest.cc:209: Failure - Expected equality of these values: - OK - Which is: 0 - cert_db_->ImportFromPKCS12(GetPublicSlot(), pkcs12_data, u"12345", true, nullptr) - Which is: -702 - -processutiltest cloneflags: fails in CI (ulimit? too many threads?) - ../../base/process/process_util_unittest.cc:1434: Failure - Value of: process.IsValid() - Actual: false - Expected: true - -addresstrackerlinuxnetlinktest: - ../../net/base/address_tracker_linux_unittest.cc:886: Failure - Value of: child.process.IsValid() - Actual: false - Expected: true - -ToAddressDoesNotDereference: ; Expected `get_for_extraction_cnt` to be 1 but got 0; - -DataCapturedManyThreads: flaky - -ProcessAlternativeServicesTest.Process*: crashed ? - --- a/base/strings/safe_sprintf_unittest.cc +++ b/base/strings/safe_sprintf_unittest.cc @@ -740,6 +740,7 @@ @@ -100,244 +20,3 @@ ProcessAlternativeServicesTest.Process*: crashed ? TEST(SafeSPrintfTest, PointerSize) { // The internal data representation is a 64bit value, independent of the ---- a/base/containers/flat_map_unittest.cc -+++ b/base/containers/flat_map_unittest.cc -@@ -52,6 +52,7 @@ - - } // namespace - -+#if 0 - TEST(FlatMap, IncompleteType) { - struct A { - using Map = flat_map; -@@ -65,6 +66,7 @@ - - A a; - } -+#endif - - TEST(FlatMap, RangeConstructor) { - flat_map::value_type input_vals[] = { ---- a/base/BUILD.gn -+++ b/base/BUILD.gn -@@ -3194,21 +3194,6 @@ - "hash/md5_constexpr_unittest.cc", - "hash/md5_unittest.cc", - "hash/sha1_unittest.cc", -- "i18n/break_iterator_unittest.cc", -- "i18n/case_conversion_unittest.cc", -- "i18n/char_iterator_unittest.cc", -- "i18n/character_encoding_unittest.cc", -- "i18n/file_util_icu_unittest.cc", -- "i18n/icu_string_conversions_unittest.cc", -- "i18n/icu_util_unittest.cc", -- "i18n/message_formatter_unittest.cc", -- "i18n/number_formatting_unittest.cc", -- "i18n/rtl_unittest.cc", -- "i18n/streaming_utf8_validator_unittest.cc", -- "i18n/string_search_unittest.cc", -- "i18n/time_formatting_unittest.cc", -- "i18n/timezone_unittest.cc", -- "i18n/transliterator_unittest.cc", - "immediate_crash_unittest.cc", - "json/json_parser_unittest.cc", - "json/json_reader_unittest.cc", ---- a/base/files/file_util_unittest.cc -+++ b/base/files/file_util_unittest.cc -@@ -2686,6 +2686,7 @@ - } - } - -+#if 0 - TEST_F(FileUtilTest, FileToFILE) { - File file; - FILE* stream = FileToFILE(std::move(file), "w"); -@@ -2700,6 +2701,7 @@ - EXPECT_FALSE(file.IsValid()); - EXPECT_TRUE(CloseFile(stream)); - } -+#endif - - TEST_F(FileUtilTest, FILEToFile) { - ScopedFILE stream; ---- a/base/threading/platform_thread_unittest.cc -+++ b/base/threading/platform_thread_unittest.cc -@@ -416,6 +416,7 @@ - // platforms for all priorities. This not being the case. This test documents - // and hardcodes what we know. Please inform scheduler-dev@chromium.org if this - // proprerty changes for a given platform. -+#if 0 - TEST(PlatformThreadTest, CanChangeThreadType) { - #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) - // On Ubuntu, RLIMIT_NICE and RLIMIT_RTPRIO are 0 by default, so we won't be -@@ -472,6 +473,7 @@ - ThreadType::kBackground)); - #endif - } -+#endif - - TEST(PlatformThreadTest, SetCurrentThreadTypeTest) { - TestPriorityResultingFromThreadType(ThreadType::kBackground, ---- a/base/files/scoped_file_linux_unittest.cc -+++ b/base/files/scoped_file_linux_unittest.cc -@@ -42,11 +42,13 @@ - EXPECT_DEATH(ScopedFD(fd.get()), ""); - } - -+#if 0 - TEST_F(ScopedFDOwnershipTrackingTest, CrashOnUnownedClose) { - ScopedFD fd = OpenFD(); - subtle::EnableFDOwnershipEnforcement(true); - EXPECT_DEATH(close(fd.get()), ""); - } -+#endif - - #endif // defined(GTEST_HAS_DEATH_TEST) - ---- a/base/native_library_unittest.cc -+++ b/base/native_library_unittest.cc -@@ -139,6 +139,7 @@ - // Verifies that the |prefer_own_symbols| option satisfies its guarantee that - // a loaded library will always prefer local symbol resolution before - // considering global symbols. -+#if 0 - TEST(NativeLibraryTest, LoadLibraryPreferOwnSymbols) { - NativeLibraryOptions options; - options.prefer_own_symbols = true; -@@ -171,6 +172,7 @@ - EXPECT_EQ(2, NativeLibraryTestIncrement()); - EXPECT_EQ(3, NativeLibraryTestIncrement()); - } -+#endif - - #endif // !BUILDFLAG(IS_ANDROID) && !defined(THREAD_SANITIZER) && \ - // !defined(MEMORY_SANITIZER) ---- a/base/containers/span_unittest.cc -+++ b/base/containers/span_unittest.cc -@@ -995,6 +995,7 @@ - } - } - -+#if 0 - TEST(SpanTest, Empty) { - { - span span; -@@ -1014,6 +1015,7 @@ - EXPECT_TRUE(span_of_checked_iterators.empty()); - } - } -+#endif - - TEST(SpanTest, OperatorAt) { - static constexpr int kArray[] = {1, 6, 1, 8, 0}; ---- a/base/debug/elf_reader_unittest.cc -+++ b/base/debug/elf_reader_unittest.cc -@@ -194,6 +194,7 @@ - } - } - -+#if 0 - TEST(ElfReaderTestWithCurrentImage, ReadElfBuildId) { - #if BUILDFLAG(IS_ANDROID) - // On Android the library loader memory maps the full so file. -@@ -229,6 +230,7 @@ - UnloadNativeLibrary(library); - #endif - } -+#endif - - } // namespace debug - } // namespace base ---- a/net/BUILD.gn -+++ b/net/BUILD.gn -@@ -4826,7 +4826,6 @@ - sources += [ - "cert/internal/system_trust_store_nss_unittest.cc", - "cert/internal/trust_store_nss_unittest.cc", -- "cert/nss_cert_database_unittest.cc", - "cert/x509_util_nss_unittest.cc", - ] - if (!is_castos) { ---- a/base/process/process_util_unittest.cc -+++ b/base/process/process_util_unittest.cc -@@ -1419,7 +1419,7 @@ - return kSuccess; - } - --#if defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) -+#if 0 && defined(CLONE_NEWUSER) && defined(CLONE_NEWPID) - TEST_F(ProcessUtilTest, CloneFlags) { - if (!PathExists(FilePath("/proc/self/ns/user")) || - !PathExists(FilePath("/proc/self/ns/pid"))) { ---- a/net/base/address_tracker_linux_unittest.cc -+++ b/net/base/address_tracker_linux_unittest.cc -@@ -831,6 +831,7 @@ - // - // This test creates multiple concurrent `AddressTrackerLinux` instances in - // separate processes, each in their own PID namespaces. -+#if 0 - TEST(AddressTrackerLinuxNetlinkTest, TestInitializeTwoTrackersInPidNamespaces) { - // This test initializes `kNumChildren` instances of `AddressTrackerLinux` in - // tracking mode, each in their own child process running in a PID namespace. -@@ -901,6 +902,7 @@ - ASSERT_EQ(exit_code, 0); - } - } -+#endif - - MULTIPROCESS_TEST_MAIN(ChildProcessInitializeTrackerForTesting) { - base::test::TaskEnvironment task_env( ---- a/base/trace_event/trace_event_unittest.cc -+++ b/base/trace_event/trace_event_unittest.cc -@@ -1368,6 +1368,7 @@ - } - - // Test that data sent from multiple threads is gathered -+#if 0 - TEST_F(TraceEventTestFixture, DataCapturedManyThreads) { - BeginTrace(); - -@@ -1408,6 +1409,7 @@ - delete task_complete_events[i]; - } - } -+#endif - - // Test that thread and process names show up in the trace. - // In SDK build, thread names are not tracked inside //base. Instead, there's ---- a/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc -+++ b/base/allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc -@@ -1481,6 +1481,7 @@ - // `base::to_address()` will use the dereference operator. This is not - // what we want; this test enforces extraction semantics for - // `to_address()`. -+#if 0 - TEST_F(RawPtrTest, ToAddressDoesNotDereference) { - CountingRawPtr ptr = nullptr; - int* raw = base::to_address(ptr); -@@ -1492,6 +1493,7 @@ - .get_for_duplication_cnt = 0}), - CountersMatch()); - } -+#endif - - TEST_F(RawPtrTest, ToAddressGivesBackRawAddress) { - int* raw = nullptr; ---- a/net/http/http_stream_factory_unittest.cc -+++ b/net/http/http_stream_factory_unittest.cc -@@ -3477,6 +3477,7 @@ - DefaultCTPolicyEnforcer ct_policy_enforcer_; - }; - -+#if 0 - TEST_F(ProcessAlternativeServicesTest, ProcessEmptyAltSvc) { - session_ = - std::make_unique(session_params_, session_context_); -@@ -3585,6 +3586,7 @@ - alternatives[0].host_port_pair()); - EXPECT_EQ(0u, alternatives[0].advertised_versions().size()); - } -+#endif - - } // namespace - diff --git a/backports/electron/electron_do-not-strip-binaries.patch b/backports/electron/electron_do-not-strip-binaries.patch new file mode 100644 index 0000000..f90ce54 --- /dev/null +++ b/backports/electron/electron_do-not-strip-binaries.patch @@ -0,0 +1,127 @@ +diff --git a/electron/BUILD.gn.orig b/electron/BUILD.gn +index b08f434..4062428 100644 +--- a/electron/BUILD.gn.orig ++++ b/electron/BUILD.gn +@@ -44,7 +44,6 @@ if (is_mac) { + + if (is_linux) { + import("//build/config/linux/pkg_config.gni") +- import("//electron/build/linux/strip_binary.gni") + import("//tools/generate_stubs/rules.gni") + + pkg_config("gio_unix") { +@@ -1424,18 +1423,6 @@ dist_zip("electron_dist_zip") { + ":licenses", + ] + if (is_linux) { +- if (is_official_build) { +- data_deps += [ +- ":strip_chrome_crashpad_handler", +- ":strip_chrome_sandbox", +- ":strip_electron_binary", +- ":strip_libEGL_shlib", +- ":strip_libGLESv2_shlib", +- ":strip_libffmpeg_shlib", +- ":strip_libvk_swiftshader_shlib", +- ] +- } +- + data_deps += [ "//sandbox/linux:chrome_sandbox" ] + } + deps = data_deps +@@ -1481,16 +1468,6 @@ group("electron_mksnapshot") { + + dist_zip("electron_mksnapshot_zip") { + data_deps = mksnapshot_deps +- if (is_linux && is_official_build) { +- data_deps += [ +- ":strip_libEGL_shlib", +- ":strip_libGLESv2_shlib", +- ":strip_libffmpeg_shlib", +- ":strip_libvk_swiftshader_shlib", +- ":strip_mksnapshot_binary", +- ":strip_v8_context_snapshot_generator_binary", +- ] +- } + deps = data_deps + outputs = [ "$root_build_dir/mksnapshot.zip" ] + } +@@ -1637,78 +1614,3 @@ group("release_build") { + ] + } + } +- +-if (is_linux && is_official_build) { +- strip_binary("strip_electron_binary") { +- binary_input = "$root_out_dir/$electron_project_name" +- symbol_output = "$root_out_dir/debug/$electron_project_name.debug" +- compress_debug_sections = true +- deps = [ ":electron_app" ] +- } +- +- strip_binary("strip_chrome_crashpad_handler") { +- binary_input = "$root_out_dir/chrome_crashpad_handler" +- symbol_output = "$root_out_dir/debug/chrome_crashpad_handler.debug" +- compress_debug_sections = true +- deps = [ "//components/crash/core/app:chrome_crashpad_handler" ] +- } +- +- strip_binary("strip_chrome_sandbox") { +- binary_input = "$root_out_dir/chrome_sandbox" +- symbol_output = "$root_out_dir/debug/chrome-sandbox.debug" +- compress_debug_sections = true +- deps = [ "//sandbox/linux:chrome_sandbox" ] +- } +- +- strip_binary("strip_libEGL_shlib") { +- binary_input = "$root_out_dir/libEGL.so" +- symbol_output = "$root_out_dir/debug/libEGL.so.debug" +- compress_debug_sections = true +- deps = [ "//third_party/angle:libEGL" ] +- } +- +- strip_binary("strip_libGLESv2_shlib") { +- binary_input = "$root_out_dir/libGLESv2.so" +- symbol_output = "$root_out_dir/debug/libGLESv2.so.debug" +- compress_debug_sections = true +- deps = [ "//third_party/angle:libGLESv2" ] +- } +- +- strip_binary("strip_libffmpeg_shlib") { +- binary_input = "$root_out_dir/libffmpeg.so" +- symbol_output = "$root_out_dir/debug/libffmpeg.so.debug" +- compress_debug_sections = true +- deps = [ "//third_party/ffmpeg" ] +- } +- +- strip_binary("strip_libvk_swiftshader_shlib") { +- binary_input = "$root_out_dir/libvk_swiftshader.so" +- symbol_output = "$root_out_dir/debug/libvk_swiftshader.so.debug" +- compress_debug_sections = true +- deps = [ "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan" ] +- } +- +- strip_binary("strip_mksnapshot_binary") { +- _binary_path = rebase_path( +- get_label_info( +- ":v8_context_snapshot_generator($v8_snapshot_toolchain)", +- "root_out_dir") + "/mksnapshot", +- root_build_dir) +- binary_input = "$root_out_dir/$_binary_path" +- symbol_output = "$root_out_dir/debug/${_binary_path}.debug" +- compress_debug_sections = true +- deps = mksnapshot_deps +- } +- +- strip_binary("strip_v8_context_snapshot_generator_binary") { +- _binary_path = rebase_path( +- get_label_info( +- ":v8_context_snapshot_generator($v8_snapshot_toolchain)", +- "root_out_dir") + "/v8_context_snapshot_generator", +- root_build_dir) +- binary_input = "$root_out_dir/$_binary_path" +- symbol_output = "$root_out_dir/debug/${_binary_path}.debug" +- compress_debug_sections = true +- deps = mksnapshot_deps +- } +-} diff --git a/backports/electron/electron_shell-file-dialog-drop-glibc.patch b/backports/electron/electron_shell-file-dialog-drop-glibc.patch new file mode 100644 index 0000000..b2a6927 --- /dev/null +++ b/backports/electron/electron_shell-file-dialog-drop-glibc.patch @@ -0,0 +1,16 @@ +diff --git a/./electron/shell/browser/ui/file_dialog.h.orig b/./electron/shell/browser/ui/file_dialog.h +index 6cdfc7b..f7757da 100644 +--- a/./electron/shell/browser/ui/file_dialog.h.orig ++++ b/./electron/shell/browser/ui/file_dialog.h +@@ -13,10 +13,6 @@ + #include "base/files/file_path.h" + #include "base/memory/raw_ptr_exclusion.h" + +-#if BUILDFLAG(IS_LINUX) +-#include +-#endif +- + namespace electron { + class NativeWindow; + } + diff --git a/backports/electron/fc-cache-version.patch b/backports/electron/fc-cache-version.patch index 3b76897..7cbd2a8 100644 --- a/backports/electron/fc-cache-version.patch +++ b/backports/electron/fc-cache-version.patch @@ -1,12 +1,10 @@ -instead of hardcoding the version, use the defined macro. --- ---- a/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc -+++ b/third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc +--- ./third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc.orig ++++ ./third_party/test_fonts/fontconfig/generate_fontconfig_caches.cc @@ -56,7 +56,7 @@ FcFini(); // Check existence of intended fontconfig cache file. -- auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-9"; +- auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-11"; + auto cache = fontconfig_caches + "/" + kCacheKey + "-le64.cache-" + FC_CACHE_VERSION; bool cache_exists = access(cache.c_str(), F_OK) == 0; return !cache_exists; diff --git a/backports/electron/fix-ffmpeg-codec-list.patch b/backports/electron/fix-ffmpeg-codec-list.patch new file mode 100644 index 0000000..de24f66 --- /dev/null +++ b/backports/electron/fix-ffmpeg-codec-list.patch @@ -0,0 +1,13 @@ +--- a/media/ffmpeg/ffmpeg_common.cc ++++ b/media/ffmpeg/ffmpeg_common.cc +@@ -1046,8 +1046,8 @@ + + // This should match the configured lists in //third_party/ffmpeg. + static constexpr std::string_view kAllowedAudioCodecs = +- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," +- "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw" EXTRA_CODECS; ++ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," ++ "mp3float,mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw" EXTRA_CODECS; + #undef EXTRA_CODECS + + return kAllowedAudioCodecs.data(); diff --git a/backports/electron/fix-opus.patch b/backports/electron/fix-opus.patch deleted file mode 100644 index 836b719..0000000 --- a/backports/electron/fix-opus.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/media/ffmpeg/ffmpeg_common.cc -+++ b/media/ffmpeg/ffmpeg_common.cc -@@ -1025,7 +1025,7 @@ - static const base::NoDestructor kAllowedAudioCodecs([]() { - // This should match the configured lists in //third_party/ffmpeg. - std::string allowed_decoders( -- "vorbis,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," -+ "vorbis,opus,libopus,flac,pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le," - "mp3,pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw"); - #if BUILDFLAG(USE_PROPRIETARY_CODECS) - allowed_decoders += ",aac"; diff --git a/backports/electron/gperf-3.2-fix.patch b/backports/electron/gperf-3.2-fix.patch deleted file mode 100644 index fa462e3..0000000 --- a/backports/electron/gperf-3.2-fix.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/third_party/blink/renderer/build/scripts/gperf.py.orig b/third_party/blink/renderer/build/scripts/gperf.py -index 42630d3..d909aee 100644 ---- a/third_party/blink/renderer/build/scripts/gperf.py.orig -+++ b/third_party/blink/renderer/build/scripts/gperf.py -@@ -28,24 +28,6 @@ def generate_gperf(gperf_path, gperf_input, gperf_args): - stdout=subprocess.PIPE, - universal_newlines=True) - gperf_output = gperf.communicate(gperf_input)[0] -- # Massage gperf output to be more palatable for modern compilers. -- # TODO(thakis): Upstream these to gperf so we don't need massaging. -- # `register` is deprecated in C++11 and removed in C++17, so remove -- # it from gperf's output. -- # https://savannah.gnu.org/bugs/index.php?53028 -- gperf_output = re.sub(r'\bregister ', '', gperf_output) -- # -Wimplicit-fallthrough needs an explicit fallthrough statement, -- # so replace gperf's /*FALLTHROUGH*/ comment with the statement. -- # https://savannah.gnu.org/bugs/index.php?53029 -- gperf_output = gperf_output.replace('/*FALLTHROUGH*/', -- ' [[fallthrough]];') -- # -Wpointer-to-int-cast warns about casting pointers to smaller ints -- # Replace {(int)(long)&(foo), bar} with -- # {static_cast(reinterpret_cast(&(foo)), bar} -- gperf_output = re.sub( -- r'\(int\)\(long\)(.*?),', -- r'static_cast(reinterpret_cast(\1)),', -- gperf_output) - script = 'third_party/blink/renderer/build/scripts/gperf.py' - return '// Generated by %s\n' % script + gperf_output - except OSError: diff --git a/backports/electron/headless-shell-no-license.patch b/backports/electron/headless-shell-no-license.patch new file mode 100644 index 0000000..6a6027d --- /dev/null +++ b/backports/electron/headless-shell-no-license.patch @@ -0,0 +1,27 @@ +From 6f4685cff1ab8c68de98c0731bb8afaf8a05a723 Mon Sep 17 00:00:00 2001 +From: knuxify +Date: Sat, 5 Apr 2025 14:10:37 +0200 +Subject: [PATCH] Do not generate license file for headless-shell build + +--- + headless/BUILD.gn | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/headless/BUILD.gn b/headless/BUILD.gn +index 798bb22..9d83f49 100644 +--- a/headless/BUILD.gn ++++ b/headless/BUILD.gn +@@ -934,10 +934,6 @@ executable("headless_shell") { + + deps = [ ":headless_shell_lib" ] + +- if (proprietary_codecs) { +- deps += [ ":generate_headless_shell_license_file" ] +- } +- + if (!headless_use_embedded_resources) { + data = [ + "$root_out_dir/headless_lib_data.pak", +-- +2.49.0 + diff --git a/backports/electron/musl-auxv.patch b/backports/electron/musl-auxv.patch deleted file mode 100644 index ce348cc..0000000 --- a/backports/electron/musl-auxv.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./v8/src/base/cpu.cc.orig -+++ ./v8/src/base/cpu.cc -@@ -14,7 +14,7 @@ - #if V8_OS_LINUX - #include // AT_HWCAP - #endif --#if V8_GLIBC_PREREQ(2, 16) || V8_OS_ANDROID -+#if 1 - #include // getauxval() - #endif - #if V8_OS_QNX diff --git a/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch b/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch deleted file mode 100644 index 3a99ee5..0000000 --- a/backports/electron/musl-v8-monotonic-pthread-cont_timedwait.patch +++ /dev/null @@ -1,23 +0,0 @@ -use monotonic clock for pthread_cond_timedwait with musl too, since it supports -it --- ---- a/v8/src/base/platform/condition-variable.cc -+++ b/v8/src/base/platform/condition-variable.cc -@@ -16,7 +16,7 @@ - - ConditionVariable::ConditionVariable() { - #if (V8_OS_FREEBSD || V8_OS_NETBSD || V8_OS_OPENBSD || \ -- (V8_OS_LINUX && V8_LIBC_GLIBC)) -+ V8_OS_LINUX) - // On Free/Net/OpenBSD and Linux with glibc we can change the time - // source for pthread_cond_timedwait() to use the monotonic clock. - pthread_condattr_t attr; -@@ -92,7 +92,7 @@ - &native_handle_, &mutex->native_handle(), &ts); - #else - #if (V8_OS_FREEBSD || V8_OS_NETBSD || V8_OS_OPENBSD || \ -- (V8_OS_LINUX && V8_LIBC_GLIBC)) -+ V8_OS_LINUX) - // On Free/Net/OpenBSD and Linux with glibc we can change the time - // source for pthread_cond_timedwait() to use the monotonic clock. - result = clock_gettime(CLOCK_MONOTONIC, &ts); diff --git a/backports/electron/net-test-no-vpython.patch b/backports/electron/net-test-no-vpython.patch new file mode 100644 index 0000000..efb2920 --- /dev/null +++ b/backports/electron/net-test-no-vpython.patch @@ -0,0 +1,22 @@ +From 4b41417068045f11db9e7edead1447e93adb9073 Mon Sep 17 00:00:00 2001 +From: LN Liberda +Date: Sat, 28 Jun 2025 18:13:59 +0200 +Subject: [PATCH] Test net without vendored python + +--- + net/test/python_utils.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/test/python_utils.cc b/net/test/python_utils.cc +index 2cdc07dad9948..0b2d42a5bf126 100644 +--- a/net/test/python_utils.cc ++++ b/net/test/python_utils.cc +@@ -47,7 +47,7 @@ bool GetPython3Command(base::CommandLine* python_cmd) { + #if BUILDFLAG(IS_WIN) + python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3.bat"))); + #else +- python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("vpython3"))); ++ python_cmd->SetProgram(base::FilePath(FILE_PATH_LITERAL("python3"))); + #endif + + #if BUILDFLAG(IS_MAC) diff --git a/backports/electron/net-test-pyws3-py3.12.patch b/backports/electron/net-test-pyws3-py3.12.patch new file mode 100644 index 0000000..cee3e61 --- /dev/null +++ b/backports/electron/net-test-pyws3-py3.12.patch @@ -0,0 +1,39 @@ +ssl.wrap_socket() was removed in Python 3.12, needed for net_unittests. +Patch-Source: https://github.com/GoogleChromeLabs/pywebsocket3/pull/39 +Modified (changed path) -lnl + +From bc50ae9d451ca705edd6101d987b839e1a09d45e Mon Sep 17 00:00:00 2001 +From: Sven Diederichs <22592421+zaurask@users.noreply.github.com> +Date: Thu, 28 Mar 2024 18:55:28 +0100 +Subject: [PATCH] use ssl.SSLContext.wrap_socket rather than the deprecated + ssl.wrap_socket + +--- + pywebsocket3/websocket_server.py | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py b/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py +index e7485ec..93ad6f1 100644 +--- a/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py ++++ b/third_party/pywebsocket3/src/mod_pywebsocket/websocket_server.py +@@ -157,12 +157,14 @@ class WebSocketServer(socketserver.ThreadingMixIn, BaseHTTPServer.HTTPServer): + client_cert_ = ssl.CERT_REQUIRED + else: + client_cert_ = ssl.CERT_NONE +- socket_ = ssl.wrap_socket( +- socket_, +- keyfile=server_options.private_key, +- certfile=server_options.certificate, +- ca_certs=server_options.tls_client_ca, +- cert_reqs=client_cert_) ++ ++ ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS) ++ if server_options.certificate: ++ ssl_context.load_cert_chain(certfile=server_options.certificate, keyfile=server_options.private_key) ++ if server_options.tls_client_ca: ++ ssl_context.load_verify_locations(server_options.tls_client_ca) ++ ssl_context.verify_mode =client_cert_ ++ socket_ = ssl_context.wrap_socket(socket_) + self._sockets.append((socket_, addrinfo)) + + def server_bind(self): diff --git a/backports/electron/partalloc-no-tagging-arm64.patch b/backports/electron/partalloc-no-tagging-arm64.patch index fb33151..422fcf5 100644 --- a/backports/electron/partalloc-no-tagging-arm64.patch +++ b/backports/electron/partalloc-no-tagging-arm64.patch @@ -3,15 +3,16 @@ missing some required interface headers for it, and it's not clear how to make the partalloc support code for it work. --- ./base/allocator/partition_allocator/partition_alloc.gni.orig +++ ./base/allocator/partition_allocator/partition_alloc.gni -@@ -30,7 +30,7 @@ - } +@@ -89,8 +89,7 @@ + # TODO(crbug.com/329199197): Clean this up when experiments are complete. + use_large_empty_slot_span_ring = true - has_memory_tagging = -- current_cpu == "arm64" && is_clang && !is_asan && (is_linux || is_android) -+ false +-has_memory_tagging = current_cpu == "arm64" && is_clang && !is_asan && +- !is_hwasan && (is_linux || is_android) ++has_memory_tagging = false declare_args() { - # Causes all the allocations to be routed via allocator_shim.cc. Usually, + # Debug configuration. --- ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h.orig +++ ./base/allocator/partition_allocator/src/partition_alloc/aarch64_support.h @@ -10,7 +10,7 @@ diff --git a/backports/electron/pipewire-1.4.patch b/backports/electron/pipewire-1.4.patch deleted file mode 100644 index ab9c37f..0000000 --- a/backports/electron/pipewire-1.4.patch +++ /dev/null @@ -1,23 +0,0 @@ -Patch-Source: https://webrtc-review.googlesource.com/c/src/+/380500 ---- ---- a/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc -+++ b/third_party/webrtc/modules/video_capture/linux/pipewire_session.cc -@@ -87,7 +87,7 @@ - .param = OnNodeParam, - }; - -- pw_node_add_listener(proxy_, &node_listener_, &node_events, this); -+ pw_node_add_listener(reinterpret_cast(proxy_), &node_listener_, &node_events, this); - } - - // static -@@ -119,7 +119,7 @@ - uint32_t id = info->params[i].id; - if (id == SPA_PARAM_EnumFormat && - info->params[i].flags & SPA_PARAM_INFO_READ) { -- pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr); -+ pw_node_enum_params(reinterpret_cast(that->proxy_), 0, id, 0, UINT32_MAX, nullptr); - break; - } - } - diff --git a/backports/electron/yes-musl.patch b/backports/electron/yes-musl.patch deleted file mode 100644 index e860b8e..0000000 --- a/backports/electron/yes-musl.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- ./buildtools/third_party/libc++/__config_site.orig -+++ ./buildtools/third_party/libc++/__config_site -@@ -18,7 +18,7 @@ - /* #undef _LIBCPP_ABI_FORCE_MICROSOFT */ - /* #undef _LIBCPP_HAS_NO_THREADS */ - /* #undef _LIBCPP_HAS_NO_MONOTONIC_CLOCK */ --/* #undef _LIBCPP_HAS_MUSL_LIBC */ -+#define _LIBCPP_HAS_MUSL_LIBC 1 - /* #undef _LIBCPP_HAS_THREAD_API_PTHREAD */ - /* #undef _LIBCPP_HAS_THREAD_API_EXTERNAL */ - /* #undef _LIBCPP_HAS_THREAD_API_WIN32 */ From 1300d8170939a17ada2ebadc440a4e97bac52367 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:27:55 -0500 Subject: [PATCH 700/738] backports/element-desktop: upgrade to 1.12.3 --- backports/element-desktop/APKBUILD | 19 +++---- ...{tasje-one-hak.patch => tasje-fixes.patch} | 17 +++++- .../element-desktop/tasje-no-fuses.patch | 52 ------------------- 3 files changed, 25 insertions(+), 63 deletions(-) rename backports/element-desktop/{tasje-one-hak.patch => tasje-fixes.patch} (50%) delete mode 100644 backports/element-desktop/tasje-no-fuses.patch diff --git a/backports/element-desktop/APKBUILD b/backports/element-desktop/APKBUILD index de6a4d7..c5d8fd7 100644 --- a/backports/element-desktop/APKBUILD +++ b/backports/element-desktop/APKBUILD @@ -1,13 +1,13 @@ # Contributor: lauren n. liberda maintainer="lauren n. liberda " pkgname=element-desktop -pkgver=1.11.100 +pkgver=1.12.3 pkgrel=1 pkgdesc="Secure and independent communication, connected via Matrix" url="https://element.io/" arch="aarch64 x86_64" # same as electron license="GPL-3.0-only" -_electronver=35 +_electronver=39 depends=" electron~$_electronver font-inconsolata @@ -36,14 +36,15 @@ source=" add-alpine-targets.patch use-system-headers.patch - tasje-one-hak.patch - tasje-no-fuses.patch + tasje-fixes.patch no-source-maps.patch.web use-system-fonts.patch.web element-desktop " options="net !check" # broken +# Avoid conflicting providers +sonameprefix="$pkgname:" # secfixes: # 1.11.30-r0: @@ -94,6 +95,7 @@ prepare() { msg "Fetch element-desktop dependencies" yarn install --frozen-lockfile --ignore-scripts + patch -p1 -i patches/@types+auto-launch+5.0.5.patch } build() { @@ -148,7 +150,7 @@ package() { cp -r $resources/app.asar.unpacked "$pkgdir"/usr/lib/element-desktop/app.asar.unpacked - install -Dm644 $resources/img/element.png "$pkgdir"/usr/lib/element-desktop/img/element.png + install -Dm644 $resources/build/icon.png "$pkgdir"/usr/lib/element-desktop/build/icon.png install -Dm755 "$srcdir"/$pkgname "$pkgdir"/usr/bin/$pkgname @@ -159,12 +161,11 @@ package() { } sha512sums=" -a8ac5180df3b204fb1947ecaa4786c9c5fdd53ffe705f4dfe97a0b051fa371fd9102c41a898e8783cf25f732674da2d987ef315f2facc7b18b20ef214ea0f81d element-desktop-1.11.100.tar.gz -e3e50fd867f9b7388eb22778ccb97d6504a480ab4e2aa9eba10fd0f4d0324a1525c2afe6c80181567d8e554f03086a9e0994a6221cfcb0ca29700754c8f31cac element-web-1.11.100.tar.gz +f302907165a35f4a4f069f5aec6bc28edeba3d09c75f483c818e3930ceb4e838e5bb91ad9d42019a11a661d6e656da3c1ff25507cbb281c69183aac7d499e882 element-desktop-1.12.3.tar.gz +b845ff71ca39d7ae4dca9bb55e821bfdf911b12de5d012ba55d598f3287046fb2b525bce608925a9fa8fa7d39a4ceed9b4213d5d1c1d0c9e6b9b72154c9a35a5 element-web-1.12.3.tar.gz 4747893ed3e43d3074e9afe1cdd668a6be0de073d439205fe8c38c5e0f4091cc76e3cd15d98818bea5139add29501d8d07e83c58e9da230a4ce5bb538d388f80 add-alpine-targets.patch 755b17f7b828eb6920c06a6950ad4e14c32c99d22e9c05fcef7a081b5d2034adb03db3958aa5209c99fb7201f4d888c2383fc9864c5e743dd33f8b5c4925acd7 use-system-headers.patch -92e69817fdc71f60c5c7dcbd3c7b13428cc18141cf5f27720326390f6817bec85fb1c60f8016b3a8fa275f601b16f646cda12b5e379a349368eef2f801b4de7a tasje-one-hak.patch -a1399662bdbe5e7256d31f7bdc05070e7009d70113699856b025a1d5ab1d9b8bf1020072a08255d4eddab0874044131dec296f98a91ba5c12ca61948b1d18dbe tasje-no-fuses.patch +a5d90dd1ec7aec0dc18b73eb3a6fd51ac1223e381c492d24e7dc0fd2ade955ac727cebbaff6ffa27c7e18d9acf712c709de3f886ee2ddf87ab3b028d3eb461c6 tasje-fixes.patch ec635fde026f7fce8e8cc57960b5b9dcec4418416d4867ed47711422d48f068bb58a3c9ceb7715efc9c177beca3788da6b0babc9b689ea8c0724a0395f2b85f8 no-source-maps.patch.web aaf46476bac403aa5204aa265fcf0654fad4c149fd74d0ec4273c051a5549943384cae3cdd62c5b78fdedfed55c11ecceb898b886e44165cbe7e30953a095cf9 use-system-fonts.patch.web afc588311dc3b566a754e3e7fe6b37b99a06d47b8bbce0ed9acca8ef308fdab0bd1d41b406199e5cbdd86bdce695ff847cd8668857a235cbdc292ad8b899c063 element-desktop diff --git a/backports/element-desktop/tasje-one-hak.patch b/backports/element-desktop/tasje-fixes.patch similarity index 50% rename from backports/element-desktop/tasje-one-hak.patch rename to backports/element-desktop/tasje-fixes.patch index a855eee..0e026c5 100644 --- a/backports/element-desktop/tasje-one-hak.patch +++ b/backports/element-desktop/tasje-fixes.patch @@ -5,9 +5,22 @@ thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: FileAlreadyWritten("/node_modules/keytar/package.json")', src/main.rs:200:18 ``` +console.log interferes with tasje, which reads config from node stdout + --- ./electron-builder.ts.orig +++ ./electron-builder.ts -@@ -74,10 +74,6 @@ +@@ -72,10 +72,6 @@ + console.warn(`No VARIANT_PATH specified, using default variant configuration '${DEFAULT_VARIANT}':`); + } + +-for (const key in variant) { +- console.log(`${key}: ${variant[key]}`); +-} +- + interface Configuration extends BaseConfiguration { + extraMetadata: Partial> & ExtraMetadata; + linux: BaseConfiguration["linux"]; +@@ -112,10 +108,6 @@ }, files: [ "package.json", @@ -17,4 +30,4 @@ FileAlreadyWritten("/node_modules/keytar/package.json")', src/main.rs:200:18 - }, "lib/**", ], - extraResources: [ + extraResources: ["build/icon.*", "webapp.asar"], diff --git a/backports/element-desktop/tasje-no-fuses.patch b/backports/element-desktop/tasje-no-fuses.patch deleted file mode 100644 index 72c515f..0000000 --- a/backports/element-desktop/tasje-no-fuses.patch +++ /dev/null @@ -1,52 +0,0 @@ -we can't do fuses because we ship one binary in the electron package. -and we can't import them here, since they are in devDependencies, which are uninstalled at this stage. - ---- ./electron-builder.ts.orig -+++ ./electron-builder.ts -@@ -2,8 +2,7 @@ - import * as fs from "node:fs"; - import * as path from "node:path"; - import * as plist from "plist"; --import { AfterPackContext, Arch, Configuration as BaseConfiguration, Platform } from "electron-builder"; --import { computeData } from "app-builder-lib/out/asar/integrity"; -+import { Configuration as BaseConfiguration } from "electron-builder"; - import { readFile, writeFile } from "node:fs/promises"; - - /** -@@ -46,26 +45,6 @@ - } & BaseConfiguration["deb"]; - } - --async function injectAsarIntegrity(context: AfterPackContext) { -- const packager = context.packager; -- -- // We only need to re-generate asar on universal Mac builds, due to https://github.com/electron/universal/issues/116 -- if (packager.platform !== Platform.MAC || context.arch !== Arch.universal) return; -- -- const resourcesPath = packager.getResourcesDir(context.appOutDir); -- const asarIntegrity = await computeData({ -- resourcesPath, -- resourcesRelativePath: "Resources", -- resourcesDestinationPath: resourcesPath, -- extraResourceMatchers: [], -- }); -- -- const plistPath = path.join(resourcesPath, "..", "Info.plist"); -- const data = plist.parse(await readFile(plistPath, "utf8")) as unknown as Writable; -- data["ElectronAsarIntegrity"] = asarIntegrity as unknown as Writable; -- await writeFile(plistPath, plist.build(data)); --} -- - /** - * @type {import('electron-builder').Configuration} - * @see https://www.electron.build/configuration/configuration -@@ -89,9 +68,6 @@ - - loadBrowserProcessSpecificV8Snapshot: false, - enableEmbeddedAsarIntegrityValidation: true, -- }, -- afterPack: async (context: AfterPackContext) => { -- await injectAsarIntegrity(context); - }, - files: [ - "package.json", From 061cc8069cdf53b135dd243b333541831c3b5670 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:28:10 -0500 Subject: [PATCH 701/738] backports/freetube: upgrade to 0.23.12 --- backports/freetube/APKBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backports/freetube/APKBUILD b/backports/freetube/APKBUILD index 19bacf0..3ab6bf8 100644 --- a/backports/freetube/APKBUILD +++ b/backports/freetube/APKBUILD @@ -1,7 +1,7 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) +# Maintainer: Antoine Martin (ayakael) pkgname=freetube -pkgver=0.23.5 +pkgver=0.23.12 pkgrel=1 pkgdesc="An open source desktop YouTube player built with privacy in mind." arch="x86_64 aarch64" # blocked by electron @@ -50,7 +50,7 @@ package() { } sha512sums=" -5811ac53788a12f94cbd4cec6f7075350c223865cb4cf4436f131b9d1197b89aa5da128d6c531d1e56a0302aa3d2523c7ba8d48edbf5f328be6fed3fbba02752 freetube-0.23.5.tar.gz +e19c7e8de0c6c5bbddcd3da73cd1907cae7157e8f44f550c4a34965b3b4f3c1a180c111a8c497d74a556d6d8e74e9fdd1ed6e064d4fc899f80712a1f187395ae freetube-0.23.12.tar.gz 2ce2effc794bb663789cefe968b5899122127983dbfa1b240aa33a2be383720b18204e6d01b4a550df72956f02b6636b79c93a58f470a970b09b770f5b8f2fc4 freetube.sh d27cb896b65a7e8d52ffe86e5f74eed72b6cf976b28e1a13012d34c7eceba5ff6f20298017738dfa93c0336ffa52b8ee4da7e06b02747062898db7e678819526 tasje-dotdash.patch " From e5734af93ea4a046c256bdfae9f7b71b6b822ab0 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:28:33 -0500 Subject: [PATCH 702/738] backports/py3-apsw: upgrade to 3.50.4.0 --- backports/py3-apsw/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backports/py3-apsw/APKBUILD b/backports/py3-apsw/APKBUILD index 8f034f7..62e95a7 100644 --- a/backports/py3-apsw/APKBUILD +++ b/backports/py3-apsw/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Francesco Colista pkgname=py3-apsw _pkgname=apsw -pkgver=3.49.1.0 +pkgver=3.50.4.0 pkgrel=0 pkgdesc="Another Python SQLite Wrapper" url="https://github.com/rogerbinns/apsw" @@ -41,6 +41,6 @@ package() { } sha512sums=" -faae9cceb462428345fd2815a970dfc80574848f87bade7cceb09aed17127d020fd16402b3d36afe0fbc6bf707a408feea0ce038486c2a68a2ab1077a9b68d0a py3-apsw-3.49.1.0.zip +71db63b0a7f550c9a5d3f112d47c24953472cc6555f0b57198428997d5cf5acf73629f2da8d5d53a2473067ba19d4b655cce467a5e2267e5bd6e8cf0d9883579 py3-apsw-3.50.4.0.zip 8f3957bd6fecb5660a7cab367043e4ccdacd87d8963bbe41cc3d525265de28f08aa207099658d785be29c5c90b818c1418f766995cd780d02b8e36252a389758 detect-sqlite-config.patch " From fe3b86d53a29916c5876b905c3fe85865d827434 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:28:52 -0500 Subject: [PATCH 703/738] backports/signal-desktop: upgrade to 7.76.0 --- backports/signal-desktop/APKBUILD | 70 +-- backports/signal-desktop/ringrtc-use-sh.patch | 14 + backports/signal-desktop/signal-desktop.sh | 2 +- .../signal-disable-updates.patch | 6 +- .../signal-do-not-package-desktop-entry.patch | 16 + .../signal-rollback-locale-changes.patch | 4 +- .../signal-desktop/webrtc-compiler.patch | 18 +- ...ion-that-change-meaning-inside-class.patch | 58 +++ backports/signal-desktop/webrtc-gcc13.patch | 31 -- .../signal-desktop/webrtc-pipewire-1.4.patch | 23 - .../webrtc-rollback-3rdparty-build-gn.patch | 31 -- .../signal-desktop/webrtc-rollback-red.patch | 136 ------ ...pe-do-not-include-linux-prctl-header.patch | 12 + .../signal-desktop/webrtc-shared-libs.patch | 22 +- ...loadtypesuggester-for-pt-assignement.patch | 459 ++++++++++++++++++ 15 files changed, 630 insertions(+), 272 deletions(-) create mode 100644 backports/signal-desktop/ringrtc-use-sh.patch create mode 100644 backports/signal-desktop/signal-do-not-package-desktop-entry.patch create mode 100644 backports/signal-desktop/webrtc-fix-declaration-that-change-meaning-inside-class.patch delete mode 100644 backports/signal-desktop/webrtc-gcc13.patch delete mode 100644 backports/signal-desktop/webrtc-pipewire-1.4.patch delete mode 100644 backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch delete mode 100644 backports/signal-desktop/webrtc-rollback-red.patch create mode 100644 backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch create mode 100644 backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch diff --git a/backports/signal-desktop/APKBUILD b/backports/signal-desktop/APKBUILD index f1cd958..ede5795 100644 --- a/backports/signal-desktop/APKBUILD +++ b/backports/signal-desktop/APKBUILD @@ -2,14 +2,14 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=signal-desktop -pkgver=7.55.0 -pkgrel=0 +pkgver=7.76.0 +pkgrel=1 pkgdesc="A messaging app for simple private communication with friends" url="https://github.com/signalapp/Signal-Desktop/" # same as electron arch="aarch64 x86_64" license="AGPL-3.0-only" -_llvmver=20 +_llvmver=21 depends=" electron font-barlow @@ -29,7 +29,6 @@ makedepends=" cmake crc32c-dev dav1d-dev - double-conversion-dev electron-dev electron-tasje ffmpeg-dev @@ -37,7 +36,6 @@ makedepends=" glib-dev gn jsoncpp-dev - libavif-dev libjpeg-turbo-dev libepoxy-dev libsecret-dev @@ -67,10 +65,10 @@ makedepends=" options="net !check" # use _check_depends to validate this -_libsignalver=0.71.1 -_ringrtcver=2.51.0 -_webrtcver=6998b -_sqlcipherver=2.0.1 +_libsignalver=0.83.0 +_ringrtcver=2.59.0 +_webrtcver=7339c +_sqlcipherver=2.4.4 source=" https://github.com/signalapp/Signal-Desktop/archive/refs/tags/v$pkgver/Signal-Desktop-$pkgver.tar.gz @@ -86,13 +84,14 @@ source=" signal-show-window-please.patch signal-rollback-locale-changes.patch signal-do-not-package-sqlcipher-deps.patch + signal-do-not-package-desktop-entry.patch ringrtc-webrtc-renamed.patch + ringrtc-use-sh.patch webrtc-shared-libs.patch webrtc-compiler.patch - webrtc-gcc13.patch - webrtc-rollback-red.patch - webrtc-rollback-3rdparty-build-gn.patch - webrtc-pipewire-1.4.patch + webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch + webrtc-fix-declaration-that-change-meaning-inside-class.patch + webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch signal-desktop.sh " @@ -112,6 +111,10 @@ export CFLAGS="${CFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknow export CXXFLAGS="${CXXFLAGS/-g/} -O2 -Wno-error -Wno-deprecated-builtins -Wno-unknown-warning-option -Wno-builtin-macro-redefined -Wno-deprecated-declarations" export CPPFLAGS="$CPPFLAGS -D__DATE__= -D__TIME__= -D__TIMESTAMP__=" +# stdatomic from compiler-rt uses implicit function declaration +export CFLAGS="$CFLAGS -Wno-implicit-function-declaration" +export CXXFLAGS="$CXXFLAGS -Wno-implicit-function-declaration" + export CARGO_PROFILE_RELEASE_OPT_LEVEL=2 export CARGO_PROFILE_RELEASE_STRIP="symbols" #export RUSTFLAGS="$RUSTFLAGS -C linker=clang" @@ -136,7 +139,7 @@ _update_depends() { -e "s|^_ringrtcver=.*|_ringrtcver=$_ringrtcver|" \ -e "s|^_webrtcver=.*|_webrtcver=$_webrtcver|" \ -e "s|^_sqlcipherver=.*|_sqlcipherver=$_sqlcipherver|" \ - APKBUILD + $APKBUILD } # webrtc only, the other dependencies are fine with tarballs @@ -213,7 +216,6 @@ prepare() { brotli crc32c dav1d - double-conversion ffmpeg flatbuffers fontconfig @@ -223,7 +225,6 @@ prepare() { icu jsoncpp libaom - libavif libdrm libjpeg libpng @@ -304,7 +305,7 @@ prepare() { cd "$builddir"/libsignal/node # fix target - sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' binding.gyp + sed -i 's/unknown-linux-gnu/alpine-linux-musl/g' build_node_bridge.py msg "Installing libsignal js dependencies" yarn --ignore-scripts --frozen-lockfile @@ -329,6 +330,9 @@ build() { rtc_include_ilbc=false rtc_libvpx_build_vp9=true rtc_use_x11=false + rustc_version=\"yes\" + rust_bindgen_root=\"/usr\" + rust_sysroot_absolute=\"/usr\" build_with_mozilla=false chrome_pgo_phase=0 @@ -381,8 +385,7 @@ build() { cd "$builddir"/libsignal/node msg "Building libsignal" - node-gyp configure --nodedir=/usr/include/electron/node_headers --build-from-source - node-gyp build --nodedir=/usr/include/electron/node_headers --build-from-source + npm_config_nodedir=/usr/include/electron/node_headers python3 build_node_bridge.py mkdir -p prebuilds/linux-$chromium_arch mv build/Release/libsignal_client_linux_$chromium_arch.node prebuilds/linux-$chromium_arch/node.napi.node @@ -478,24 +481,25 @@ package() { } sha512sums=" -59e1aae568735976e79ee38d55c87b137f7075063985e72deb42b53af6facd7ed2a8c0912fd86cb88df3182d17c1b58af11bf1501135e6855cfd5ee70270905e Signal-Desktop-7.55.0.tar.gz -3d1b5b84d42b4f6da46a2f626ec72931d3d7432c10c0d43e562851933f6cf0a434630eb5f8bb9a586d27d6ad5a5d8a6c96873dc468e53bbf6297c35a8da090d8 libsignal-0.71.1.tar.gz -8e32d75f9f8216106b6858d9ab58ad53f209408fc155fe27dec184c8c65c9ab5a3a93e9567953f209424ed435ccc6d4903a49a4edae36eb744a897cc02098312 ringrtc-2.51.0.tar.gz -592987c1661de464a4e6dee3081cb5fd32e5afdacdba43d901557a217e62301b4655009ad5bdc0c1dcff5e8b67d7acd68ac953cd638f31196162aa3ccdd9c63b node-sqlcipher-2.0.1.tar.gz -ba02cb0c293210f9a683b0e08c6acbe84f5b78089329ec017b0db3493b38ccf39e92c49c2475dc66b5ce3bfe060686718cb5053787e2d61ed320dadb22891989 webrtc-6998b.tar.zst +c847d3679df77ca137b4c3345b3b941a08639677efcd5eeea6613572fa90b8ad1b8d1d53e077902d4f47c05c480c408787024906d6917dcbf4a840838bf6d79d Signal-Desktop-7.76.0.tar.gz +43271a64f65a4cf0e7855fb84476ff811ef248665cb74fdaa9ce12b02d2039abdf8fca28554e7e884eabaa9bdd77e8f5383e6354e589436671675ddab7194d81 libsignal-0.83.0.tar.gz +ba4a1850bd096470a6370a0bf730550f64df4a2349cacca3b4864ef1a3a04713dd200307b9ad7ba47425322573148d6bd2ce85c11c2a49232d41e739ef5e788d ringrtc-2.59.0.tar.gz +79dd21548329b4ee409fa73b013c18ed4e85038aeef7a4cfe196fd6b5113279da8ad287a259fa6a6b546b52a5a6dd6ae2cb1050007043d25f76d7917dbbbc02d node-sqlcipher-2.4.4.tar.gz +06ffb4cdb82f818cc419d42ff2de03977d7e94c5f3eb8ac8a401bcb52ec38fa988c5d757f4bd79e5d9968fa83754fc9046180c950961c90a59eeb6130bf5552f webrtc-7339c.tar.zst 8d2d2d82c8546c2dd1fef161b61df79918f8c22235a56a46adb375a0beb4acef12c5fe53e67242a4be97f77adc522ff79b47949c352956c742a70d50f4179f7f libsignal-auditable.patch 7ee747c8aaa9d6e9149fe0a031e3d4cc9e9c08f22c42076bd05e2acb86952f8170032613d13a53716010edfa3f26ad97b530e82460318eb46a42e28cf5faeb9d signal-use-system-sqlcipher.patch -fc2af28645364cd85c106304a26811b036f6be048c52137fbbcc112870a84132a181f532563e0569b560fde3cf8c02480666a9b01d804b0008f97c728005b1c7 signal-disable-updates.patch +ef3622da416a5bd2d4bea4f2a4fbb21a985f660d4acc17bbe66ce51ac1180ab92c0c843a5414ff56ea1deda87c2b0f611a299ca8ebe4d6a24df53626b36ceea8 signal-disable-updates.patch 853de84d636f730694f17bcec63463fa7bfbdd0a7f7a64618a8fc6bc523ce1a9854b4c651753735af735c18101295d3efbe54f83ae0bccbed83c8c1fee3e7049 signal-update-links.patch 882d6889b23a3ebc6449c8b6acec8c3853674a7e94f066d65b57bab674ba8c11d582ba2c760825cb67b9202716e6d8b7123001d1e9f9229e49a0b77e9d978265 signal-show-window-please.patch -aca92e4de6cd005d660d7e8b99607de96ca2d7dc220e3465247d517e915e4d41a4b0eb519e85c5eca1c81cd8bac9821acd03ff57f1603918987829c6ea7757b4 signal-rollback-locale-changes.patch +3dd3bf2f6925e2672a20ef56bbac519099d54e912e5a434a0649ea152db5039dbe1bbade3430b485ae9a6085d747dd88602d4efc5198d5a4dbf1b8359de11f94 signal-rollback-locale-changes.patch 961568777b86f8fbcc73360252123686c9d1e16b2650f23d8afbc6d7580d53024f81b62e9e9cbdcd0031b5cf99854bd47c6dd4580197f2b27b8b4cbb51c6c9c9 signal-do-not-package-sqlcipher-deps.patch +d8cafd4ae1f7438417f5c414d68a175c3d24b66a14b9f3b8ca9c9acae2b2eaa68985ee81c1df7d754a206ff1c9b02929803440fb0734db38b6ac9ab3e34205b0 signal-do-not-package-desktop-entry.patch 02a648bb8541a39c75fec2db39f024a27976afca41908eefa2fe1f2e30b05b5d59f980ccc930021c0b0c09ba8b0cbcae071e9f0dd530543c667adbc4272af552 ringrtc-webrtc-renamed.patch -98a7e4df27c3ed56c5968ebc3ae8e08bfb54362d0c910f9af1d414079a6d5fe0f18aa570ae3c38042f4691af6a130cb3ff689625e26a3987720dd319a5f587b1 webrtc-shared-libs.patch -897174fa3b1eaa74a3b2d7d861863a9f60550ddb0d7be700cd590600efdc3bd962f52c21e371276eaf8d5657c98fe8ade9853b0197b61a68d5dce6fa03b5899b webrtc-compiler.patch -3f1095861a79862ab5a55c86d7e353d272974617afba39e4d4441024bede8d7b9b8e122da90d56a9c3c0965171803d6b9e29e91d78167a08c6bcc86b3eedab18 webrtc-gcc13.patch -8f53dcf3264c5cec338f037e57a7770ec939ee06dfb0c5dfeab23967a3a64d3f861a6b5419766ac892676036b4522bce2f47279ca3658b5c0b6a31c82ac05053 webrtc-rollback-red.patch -f8bd574a0de077a643ced26e8a0e3f162e014bbf91c957bbefd113883a70e2b63e483bf400b7e2da8d09edfe76d4f6a257f194a14124f344f1625c5632d12acb webrtc-rollback-3rdparty-build-gn.patch -7fa0344a144d5b8f05d0962799b8ce1dbe8f2d403a311d4fbf802a2d032e6586a1268387052b529e809c4740a79d6737a63d7e37ea8902ce926b74309dd44fc3 webrtc-pipewire-1.4.patch -87534e7b5ad7365509eab75629e6bd1a9ed61ee92f7e358405a0abaf0df57de14623fb3894eb082f8785422e5c087e1c50f9e2e5cafbb2529591fd7bf447f7f5 signal-desktop.sh +19d2e07bdc0b160ec542fcb0a3d94ae1e37dcb1b3455e57b278cf074f8aac625341b47f4f06a1f7eb5a197cb0f11754de8785ffd10876852972cbfafdc2615db ringrtc-use-sh.patch +a9374040dcbc9203c8a3b4ad1cf97d58805cd4755f4f585a988b113697ea97d5900ad68f6a30aa0621f34ab54ae98984a8ce228a2d08186ee1bf3384abf3f364 webrtc-shared-libs.patch +8ba740f0552872ddf383545a6bb99bf7bcdd2610cee51c6e69dc667893006facd5d72f62274e25c1a58e1a58c8e8b0b5303b648e4c74a71925639cc9691c72c4 webrtc-compiler.patch +d44f62e4ccf2d9094d6ed217b24fa2cde276c7f64f4d6fd26e84dfc021ea667abcb21f9e4666cfd0d88d6ee0a6b1a20b6cc68c8720462711e3b5451e263f6c4a webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch +ace87a2be03c6965012a87a10918c5923b10d5e74a7169c1e1384c15b34a367d0c47e806764c368cc30dad01a3dce54b50587abea9831130178db3806619abc8 webrtc-fix-declaration-that-change-meaning-inside-class.patch +d17ecd89e867b24a21144d267e1bf7d09e3898018a0f9fcd87084b9de8091bc56f904a1cabdc487a8e46ab509c11ddd363c574d75d85a79e3c4d9424a13b2093 webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch +8e1de53ec1608fa05972af605213e8423b8f88cfd8d6a1989bdcaf77ed1420871c39efa15c56ffeccb6ff86677acc5bc436020f3554bee4f94930c7d9f4e16b6 signal-desktop.sh " diff --git a/backports/signal-desktop/ringrtc-use-sh.patch b/backports/signal-desktop/ringrtc-use-sh.patch new file mode 100644 index 0000000..53ec09c --- /dev/null +++ b/backports/signal-desktop/ringrtc-use-sh.patch @@ -0,0 +1,14 @@ +diff --git a/ringrtc/src/node/package.json.orig b/ringrtc/src/node/package.json +index 366caf2927f..eedeca3895e 100644 +--- a/ringrtc/src/node/package.json.orig ++++ b/ringrtc/src/node/package.json +@@ -16,7 +16,7 @@ + "virtual_audio": "dist/bin/virtual_audio.sh" + }, + "scripts": { +- "build": "tsc && bash scripts/build-help.sh", ++ "build": "tsc && sh scripts/build-help.sh", + "clean": "rimraf dist", + "test": "electron-mocha --renderer --recursive dist/test --timeout 10000 --require source-map-support/register", + "eslint": "eslint .", + diff --git a/backports/signal-desktop/signal-desktop.sh b/backports/signal-desktop/signal-desktop.sh index 370469c..3904d51 100755 --- a/backports/signal-desktop/signal-desktop.sh +++ b/backports/signal-desktop/signal-desktop.sh @@ -3,4 +3,4 @@ # app chooses config (including used endpoints) based on this export NODE_ENV=production -exec electron /usr/lib/signal-desktop/app.asar +exec electron /usr/lib/signal-desktop/app.asar "$@" diff --git a/backports/signal-desktop/signal-disable-updates.patch b/backports/signal-desktop/signal-disable-updates.patch index f5496f4..3d8fc38 100644 --- a/backports/signal-desktop/signal-disable-updates.patch +++ b/backports/signal-desktop/signal-disable-updates.patch @@ -1,9 +1,11 @@ ---- a/Signal-Desktop/config/production.json +diff --git a/Signal-Desktop/config/production.json.orig b/Signal-Desktop/config/production.json +index ee1fc6523d8..6fcb97f3a36 100644 +--- a/Signal-Desktop/config/production.json.orig +++ b/Signal-Desktop/config/production.json @@ -16,5 +16,5 @@ - "serverTrustRoot": "BXu6QIKVz5MA8gstzfOgRQGqyLqOwNKHL6INkv3IHWMF", "genericServerPublicParams": "AByD873dTilmOSG0TjKrvpeaKEsUmIO8Vx9BeMmftwUs9v7ikPwM8P3OHyT0+X3EUMZrSe9VUp26Wai51Q9I8mdk0hX/yo7CeFGJyzoOqn8e/i4Ygbn5HoAyXJx5eXfIbqpc0bIxzju4H/HOQeOpt6h742qii5u/cbwOhFZCsMIbElZTaeU+BWMBQiZHIGHT5IE0qCordQKZ5iPZom0HeFa8Yq0ShuEyAl0WINBiY6xE3H/9WnvzXBbMuuk//eRxXgzO8ieCeK8FwQNxbfXqZm6Ro1cMhCOF3u7xoX83QhpN", "backupServerPublicParams": "AJwNSU55fsFCbgaxGRD11wO1juAs8Yr5GF8FPlGzzvdJJIKH5/4CC7ZJSOe3yL2vturVaRU2Cx0n751Vt8wkj1bozK3CBV1UokxV09GWf+hdVImLGjXGYLLhnI1J2TWEe7iWHyb553EEnRb5oxr9n3lUbNAJuRmFM7hrr0Al0F0wrDD4S8lo2mGaXe0MJCOM166F8oYRQqpFeEHfiLnxA1O8ZLh7vMdv4g9jI5phpRBTsJ5IjiJrWeP0zdIGHEssUeprDZ9OUJ14m0v61eYJMKsf59Bn+mAT2a7YfB+Don9O", + "stripePublishableKey": "pk_live_6cmGZopuTsV8novGgJJW9JpC00vLIgtQ1D", - "updatesEnabled": true + "updatesEnabled": false } diff --git a/backports/signal-desktop/signal-do-not-package-desktop-entry.patch b/backports/signal-desktop/signal-do-not-package-desktop-entry.patch new file mode 100644 index 0000000..7a973a1 --- /dev/null +++ b/backports/signal-desktop/signal-do-not-package-desktop-entry.patch @@ -0,0 +1,16 @@ +diff --git a/Signal-Desktop/package.json.orig b/Signal-Desktop/package.json +index 832035e..e6ac14c 100644 +--- a/Signal-Desktop/package.json.orig ++++ b/Signal-Desktop/package.json +@@ -519,11 +519,6 @@ + }, + "linux": { + "category": "Network;InstantMessaging;Chat", +- "desktop": { +- "entry": { +- "StartupWMClass": "signal" +- } +- }, + "target": [ + "deb" + ], diff --git a/backports/signal-desktop/signal-rollback-locale-changes.patch b/backports/signal-desktop/signal-rollback-locale-changes.patch index fce29a2..97e2cf9 100644 --- a/backports/signal-desktop/signal-rollback-locale-changes.patch +++ b/backports/signal-desktop/signal-rollback-locale-changes.patch @@ -42,7 +42,7 @@ index a63eef4079d..2a959da4d0d 100644 -import { app } from 'electron'; +import { join } from 'path'; +import { readFileSync } from 'fs'; - import { merge } from 'lodash'; + import lodash from 'lodash'; import * as LocaleMatcher from '@formatjs/intl-localematcher'; import { z } from 'zod'; @@ -16,9 +15,6 @@ import type { LocalizerType } from '../ts/types/Util'; @@ -129,7 +129,7 @@ index 7187d287acc..9a17d638f44 100644 import { readdir, mkdir, readFile, writeFile } from 'node:fs/promises'; import { join, dirname } from 'node:path'; -import pMap from 'p-map'; --import { isLocaleMessageType } from '../util/setupI18nMain'; +-import { isLocaleMessageType } from '../util/setupI18nMain.js'; - -async function compact({ - sourceDir, diff --git a/backports/signal-desktop/webrtc-compiler.patch b/backports/signal-desktop/webrtc-compiler.patch index d27f61f..a3fb742 100644 --- a/backports/signal-desktop/webrtc-compiler.patch +++ b/backports/signal-desktop/webrtc-compiler.patch @@ -29,27 +29,27 @@ index 88109264ea9..192a3f3119e 100644 } if (!optimize_for_size) { -@@ -1241,8 +1241,8 @@ config("compiler_cpu_abi") { - } +@@ -1303,8 +1303,8 @@ config("compiler_cpu_abi") { + ] } else if (current_cpu == "arm") { - if (is_clang && !is_android && !is_nacl && !is_chromeos_device) { + if (is_clang && !is_android && !is_chromeos_device) { - cflags += [ "--target=arm-linux-gnueabihf" ] - ldflags += [ "--target=arm-linux-gnueabihf" ] + cflags += [ "--target=arm-alpine-linux-gnueabihf" ] + ldflags += [ "--target=arm-alpine-linux-gnueabihf" ] } - if (!is_nacl) { - cflags += [ -@@ -1256,8 +1256,8 @@ config("compiler_cpu_abi") { + cflags += [ + "-march=$arm_arch", +@@ -1315,8 +1315,8 @@ config("compiler_cpu_abi") { + } } else if (current_cpu == "arm64") { - if (is_clang && !is_android && !is_nacl && !is_fuchsia && - !is_chromeos_device) { + if (is_clang && !is_android && !is_fuchsia && !is_chromeos_device) { - cflags += [ "--target=aarch64-linux-gnu" ] - ldflags += [ "--target=aarch64-linux-gnu" ] + cflags += [ "--target=aarch64-alpine-linux-gnu" ] + ldflags += [ "--target=aarch64-alpine-linux-gnu" ] } - } else if (current_cpu == "mipsel" && !is_nacl) { + } else if (current_cpu == "mipsel") { ldflags += [ "-Wl,--hash-style=sysv" ] @@ -1267,8 +1267,8 @@ config("compiler_cpu_abi") { cflags += [ "--target=mipsel-linux-android" ] diff --git a/backports/signal-desktop/webrtc-fix-declaration-that-change-meaning-inside-class.patch b/backports/signal-desktop/webrtc-fix-declaration-that-change-meaning-inside-class.patch new file mode 100644 index 0000000..565f8d2 --- /dev/null +++ b/backports/signal-desktop/webrtc-fix-declaration-that-change-meaning-inside-class.patch @@ -0,0 +1,58 @@ +diff --git a/webrtc/p2p/base/port_interface.h b/webrtc/p2p/base/port_interface.h +index 2335fc2..1484a14 100644 +--- a/webrtc/p2p/base/port_interface.h ++++ b/webrtc/p2p/base/port_interface.h +@@ -55,7 +55,7 @@ + virtual ~PortInterface(); + + virtual IceCandidateType Type() const = 0; +- virtual const Network* Network() const = 0; ++ virtual const ::webrtc::Network* Network() const = 0; + + // Methods to set/get ICE role and tiebreaker values. + virtual void SetIceRole(IceRole role) = 0; +diff --git a/webrtc/pc/codec_vendor.h b/webrtc/pc/codec_vendor.h +index aaddc4f..719a082 100644 +--- a/webrtc/pc/codec_vendor.h ++++ b/webrtc/pc/codec_vendor.h +@@ -119,7 +119,7 @@ + class CodecLookupHelper { + public: + virtual ~CodecLookupHelper() = default; +- virtual PayloadTypeSuggester* PayloadTypeSuggester() = 0; ++ virtual ::webrtc::PayloadTypeSuggester* PayloadTypeSuggester() = 0; + // Look up the codec vendor to use, depending on context. + // This call may get additional arguments in the future, to aid + // in selection of the correct context. +diff --git a/webrtc/pc/jsep_transport.h b/webrtc/pc/jsep_transport.h +index 017aad7..50dc991 100644 +--- a/webrtc/pc/jsep_transport.h ++++ b/webrtc/pc/jsep_transport.h +@@ -115,14 +115,12 @@ + } + + RTCError SetLocalJsepTransportDescription( +- const JsepTransportDescription& jsep_description, +- SdpType type); ++ const JsepTransportDescription& jsep_description, SdpType type); + + // Set the remote TransportDescription to be used by DTLS and ICE channels + // that are part of this Transport. + RTCError SetRemoteJsepTransportDescription( +- const JsepTransportDescription& jsep_description, +- SdpType type); ++ const JsepTransportDescription& jsep_description, SdpType type); + RTCError AddRemoteCandidates(const Candidates& candidates); + + // Set the "needs-ice-restart" flag as described in JSEP. After the flag is +@@ -204,7 +202,9 @@ + return rtp_dtls_transport_; + } + +- scoped_refptr SctpTransport() const { return sctp_transport_; } ++ scoped_refptr<::webrtc::SctpTransport> SctpTransport() const { ++ return sctp_transport_; ++ } + + // TODO(bugs.webrtc.org/9719): Delete method, update callers to use + // SctpTransport() instead. diff --git a/backports/signal-desktop/webrtc-gcc13.patch b/backports/signal-desktop/webrtc-gcc13.patch deleted file mode 100644 index 2144a30..0000000 --- a/backports/signal-desktop/webrtc-gcc13.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- ./webrtc/rtc_base/system/file_wrapper.h.orig -+++ ./webrtc/rtc_base/system/file_wrapper.h -@@ -13,6 +13,7 @@ - - #include - #include -+#include - - #include - ---- ./webrtc/modules/audio_coding/neteq/reorder_optimizer.cc.orig -+++ ./webrtc/modules/audio_coding/neteq/reorder_optimizer.cc -@@ -11,6 +11,7 @@ - #include "modules/audio_coding/neteq/reorder_optimizer.h" - - #include -+#include - #include - #include - ---- ./webrtc/rtc_base/ssl_stream_adapter.h.orig -+++ ./webrtc/rtc_base/ssl_stream_adapter.h -@@ -24,6 +24,7 @@ - #include "rtc_base/ssl_certificate.h" - #include "rtc_base/ssl_identity.h" - #include "rtc_base/stream.h" -+#include - - namespace rtc { - - diff --git a/backports/signal-desktop/webrtc-pipewire-1.4.patch b/backports/signal-desktop/webrtc-pipewire-1.4.patch deleted file mode 100644 index 2c39a9e..0000000 --- a/backports/signal-desktop/webrtc-pipewire-1.4.patch +++ /dev/null @@ -1,23 +0,0 @@ -Patch-Source: https://webrtc-review.googlesource.com/c/src/+/380500 ---- ---- a/webrtc/modules/video_capture/linux/pipewire_session.cc -+++ b/webrtc/modules/video_capture/linux/pipewire_session.cc -@@ -87,7 +87,7 @@ - .param = OnNodeParam, - }; - -- pw_node_add_listener(proxy_, &node_listener_, &node_events, this); -+ pw_node_add_listener(reinterpret_cast(proxy_), &node_listener_, &node_events, this); - } - - // static -@@ -119,7 +119,7 @@ - uint32_t id = info->params[i].id; - if (id == SPA_PARAM_EnumFormat && - info->params[i].flags & SPA_PARAM_INFO_READ) { -- pw_node_enum_params(that->proxy_, 0, id, 0, UINT32_MAX, nullptr); -+ pw_node_enum_params(reinterpret_cast(that->proxy_), 0, id, 0, UINT32_MAX, nullptr); - break; - } - } - diff --git a/backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch b/backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch deleted file mode 100644 index 6352e27..0000000 --- a/backports/signal-desktop/webrtc-rollback-3rdparty-build-gn.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/webrtc/third_party/BUILD.gn b/webrtc/third_party/BUILD.gn -index 256fd092e2e..4ce797ebad7 100644 ---- a/webrtc/third_party/BUILD.gn -+++ b/webrtc/third_party/BUILD.gn -@@ -55,12 +55,10 @@ group("jpeg_includes") { - component("freetype_harfbuzz") { - public_configs = [] - public_deps = [] -- if (enable_freetype) { -- if (use_system_freetype) { -- public_configs += [ "//build/linux:freetype_from_pkgconfig" ] -- } else { -- public_deps += [ "//third_party/freetype:freetype_source" ] -- } -+ if (use_system_freetype) { -+ public_configs += [ "//build/linux:freetype_from_pkgconfig" ] -+ } else { -+ public_deps += [ "//third_party/freetype:freetype_source" ] - } - if (use_system_harfbuzz) { - public_configs += [ "//third_party/harfbuzz-ng:harfbuzz_from_pkgconfig" ] -@@ -71,8 +69,5 @@ component("freetype_harfbuzz") { - - buildflag_header("freetype_buildflags") { - header = "freetype_buildflags.h" -- flags = [ -- "USE_SYSTEM_FREETYPE=$use_system_freetype", -- "ENABLE_FREETYPE=$enable_freetype", -- ] -+ flags = [ "USE_SYSTEM_FREETYPE=$use_system_freetype" ] - } diff --git a/backports/signal-desktop/webrtc-rollback-red.patch b/backports/signal-desktop/webrtc-rollback-red.patch deleted file mode 100644 index c11eb07..0000000 --- a/backports/signal-desktop/webrtc-rollback-red.patch +++ /dev/null @@ -1,136 +0,0 @@ -diff --git a/webrtc/ringrtc/rffi/src/sdp_observer.cc b/webrtc/ringrtc/rffi/src/sdp_observer.cc -index d60f3d5e7ba..d561dedd1d0 100644 ---- a/webrtc/ringrtc/rffi/src/sdp_observer.cc -+++ b/webrtc/ringrtc/rffi/src/sdp_observer.cc -@@ -6,7 +6,7 @@ - #include "rffi/api/sdp_observer_intf.h" - #include "rffi/src/ptr.h" - #include "rffi/src/sdp_observer.h" --#include "third_party/re2/src/re2/re2.h" -+#include - - namespace webrtc { - namespace rffi { -@@ -29,8 +29,8 @@ void CreateSessionDescriptionObserverRffi::OnSuccess(SessionDescriptionInterface - // TODO tweak the response a little - std::string sdp; - if (session_description->ToString(&sdp)) { -- static LazyRE2 ssrc_re = {".+urn:ietf:params:rtp-hdrext:ssrc-audio-level.*\r?\n"}; -- RE2::Replace(&sdp, *ssrc_re, ""); -+ sdp = std::regex_replace(sdp, std::regex("(a=fmtp:111 ((?!cbr=).)*)\r?\n"), "$1;cbr=1\r\n"); -+ sdp = std::regex_replace(sdp, std::regex(".+urn:ietf:params:rtp-hdrext:ssrc-audio-level.*\r?\n"), ""); - - std::unique_ptr session_description2 = CreateSessionDescription(session_description->GetType(), sdp); - delete session_description; -diff --git a/webrtc/ringrtc/rffi/BUILD.gn b/webrtc/ringrtc/rffi/BUILD.gn -index 4564e734e63..341535b0fc7 100644 ---- a/webrtc/ringrtc/rffi/BUILD.gn -+++ b/webrtc/ringrtc/rffi/BUILD.gn -@@ -58,7 +58,6 @@ if (is_android) { - "${android_sdk}:libjingle_peerconnection_jni", - "${android_sdk}:libjingle_peerconnection_metrics_default_jni", - "//pc:libjingle_peerconnection", -- "//third_party/re2", - ] - output_extension = "so" - } -@@ -78,7 +77,6 @@ if (is_ios) { - - deps = [ - "//third_party/libyuv", -- "//third_party/re2", - ] - } - } -@@ -94,7 +92,6 @@ if (is_linux || is_mac || is_win) { - deps = [ - "//sdk:media_constraints", - "//media:rtc_simulcast_encoder_adapter", -- "//third_party/re2", - ] - } - } -diff --git a/webrtc/ringrtc/rffi/api/peer_connection_intf.h b/webrtc/ringrtc/rffi/api/peer_connection_intf.h -index 66958254fed..4cd223beb93 100644 ---- a/webrtc/ringrtc/rffi/api/peer_connection_intf.h -+++ b/webrtc/ringrtc/rffi/api/peer_connection_intf.h -@@ -105,6 +105,7 @@ RUSTEXPORT webrtc::SessionDescriptionInterface* - Rust_sessionDescriptionFromV4(bool offer, - const RffiConnectionParametersV4* v4_borrowed, - bool enable_tcc_audio, -+ bool enable_red_audio, - bool enable_vp9); - - RUSTEXPORT void -diff --git a/webrtc/ringrtc/rffi/src/peer_connection.cc b/webrtc/ringrtc/rffi/src/peer_connection.cc -index 9db5ed8219d..0714b3589e3 100644 ---- a/webrtc/ringrtc/rffi/src/peer_connection.cc -+++ b/webrtc/ringrtc/rffi/src/peer_connection.cc -@@ -42,6 +42,7 @@ int VIDEO_LAYERS_ALLOCATION_EXT_ID = 14; - // 101 used by connection.rs - int DATA_PT = 101; - int OPUS_PT = 102; -+int OPUS_RED_PT = 105; - int VP8_PT = 108; - int VP8_RTX_PT = 118; - int VP9_PT = 109; -@@ -317,12 +318,14 @@ RUSTEXPORT webrtc::SessionDescriptionInterface* - Rust_sessionDescriptionFromV4(bool offer, - const RffiConnectionParametersV4* v4_borrowed, - bool enable_tcc_audio, -+ bool enable_red_audio, - bool enable_vp9) { - // Major changes from the default WebRTC behavior: - // 1. We remove all codecs except Opus, VP8, and VP9 - // 2. We remove all header extensions except for transport-cc, video orientation, - // and abs send time. - // 3. Opus CBR and DTX is enabled. -+ // 4. RED is enabled for audio. - - // For some reason, WebRTC insists that the video SSRCs for one side don't - // overlap with SSRCs from the other side. To avoid potential problems, we'll give the -@@ -361,6 +364,15 @@ Rust_sessionDescriptionFromV4(bool offer, - auto video = std::make_unique(); - set_rtp_params(video.get()); - -+ // Turn on the RED "meta codec" for Opus redundancy. -+ auto opus_red = cricket::CreateAudioCodec(OPUS_RED_PT, cricket::kRedCodecName, 48000, 2); -+ opus_red.SetParam("", std::to_string(OPUS_PT) + "/" + std::to_string(OPUS_PT)); -+ -+ if (enable_red_audio) { -+ // Add RED before Opus to use it by default when sending. -+ audio->AddCodec(opus_red); -+ } -+ - auto opus = cricket::CreateAudioCodec(OPUS_PT, cricket::kOpusCodecName, 48000, 2); - // These are the current defaults for WebRTC - // We set them explicitly to avoid having the defaults change on us. -@@ -378,6 +390,11 @@ Rust_sessionDescriptionFromV4(bool offer, - opus.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); - audio->AddCodec(opus); - -+ if (!enable_red_audio) { -+ // Add RED after Opus so that RED packets can at least be decoded properly if received. -+ audio->AddCodec(opus_red); -+ } -+ - auto add_video_feedback_params = [] (cricket::Codec* video_codec) { - video_codec->AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); - video_codec->AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamCcm, cricket::kRtcpFbCcmParamFir)); -@@ -589,9 +606,16 @@ CreateSessionDescriptionForGroupCall(bool local, - opus.SetParam("cbr", "1"); - opus.AddFeedbackParam(cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc, cricket::kParamValueEmpty)); - -+ // Turn on the RED "meta codec" for Opus redundancy. -+ auto opus_red = cricket::CreateAudioCodec(OPUS_RED_PT, cricket::kRedCodecName, 48000, 2); -+ opus_red.SetParam("", std::to_string(OPUS_PT) + "/" + std::to_string(OPUS_PT)); -+ -+ // Add RED after Opus so that RED packets can at least be decoded properly if received. - local_audio->AddCodec(opus); -+ local_audio->AddCodec(opus_red); - for (auto& remote_audio : remote_audios) { - remote_audio->AddCodec(opus); -+ remote_audio->AddCodec(opus_red); - } - - auto add_video_feedback_params = [] (cricket::Codec* video_codec) { diff --git a/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch b/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch new file mode 100644 index 0000000..c2279a0 --- /dev/null +++ b/backports/signal-desktop/webrtc-rtcbase-platform-thread-type-do-not-include-linux-prctl-header.patch @@ -0,0 +1,12 @@ +diff --git a/webrtc/rtc_base/platform_thread_types.cc.orig b/webrtc/rtc_base/platform_thread_types.cc +index 20bf4af..482b15f 100644 +--- a/webrtc/rtc_base/platform_thread_types.cc.orig ++++ b/webrtc/rtc_base/platform_thread_types.cc +@@ -12,7 +12,6 @@ + + // IWYU pragma: begin_keep + #if defined(WEBRTC_LINUX) +-#include + #include + #include + diff --git a/backports/signal-desktop/webrtc-shared-libs.patch b/backports/signal-desktop/webrtc-shared-libs.patch index f4bf714..04b55c0 100644 --- a/backports/signal-desktop/webrtc-shared-libs.patch +++ b/backports/signal-desktop/webrtc-shared-libs.patch @@ -18,10 +18,10 @@ # Only the root target and the test should depend on this. visibility = [ "//:default", -@@ -472,7 +472,6 @@ - ] +@@ -530,7 +530,6 @@ if (!build_with_chromium) { sources = [] + - complete_static_lib = true suppressed_configs += [ "//build/config/compiler:thin_archive" ] defines = [] @@ -42,12 +42,12 @@ diff --git a/webrtc/third_party/googletest/BUILD.gn.orig b/webrtc/third_party/go index b7dc621..367f929 100644 --- a/webrtc/third_party/googletest/BUILD.gn.orig +++ b/webrtc/third_party/googletest/BUILD.gn -@@ -133,7 +133,6 @@ source_set("gtest") { +@@ -129,7 +128,6 @@ source_set("gtest") { # googletest only needs `absl`, but this makes gn check happier. deps = [ "//third_party/abseil-cpp:absl_full" ] - public_deps = [ "//third_party/re2" ] - if (is_nacl || !build_with_chromium) { + if (!build_with_chromium) { defines += [ "GTEST_DISABLE_PRINT_STACK_TRACE" ] sources -= [ diff --git a/webrtc/third_party/fuzztest/BUILD.gn.orig b/webrtc/third_party/fuzztest/BUILD.gn @@ -62,3 +62,17 @@ index 57ee790..ba1d297 100644 # For protobuf mutators "$protobuf_target_prefix:protobuf_lite", +diff --git a/webrtc/third_party/BUILD.gn b/webrtc/third_party/BUILD.gn +index 256fd092e2e..4ce797ebad7 100644 +--- a/webrtc/third_party/BUILD.gn ++++ b/webrtc/third_party/BUILD.gn +@@ -71,8 +69,5 @@ component("freetype_harfbuzz") { + + buildflag_header("freetype_buildflags") { + header = "freetype_buildflags.h" +- flags = [ +- "USE_SYSTEM_FREETYPE=$use_system_freetype", +- "ENABLE_FREETYPE=$enable_freetype", +- ] ++ flags = [ "USE_SYSTEM_FREETYPE=$use_system_freetype" ] + } diff --git a/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch b/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch new file mode 100644 index 0000000..1504f81 --- /dev/null +++ b/backports/signal-desktop/webrtc-use-only-payloadtypesuggester-for-pt-assignement.patch @@ -0,0 +1,459 @@ +diff --git a/webrtc/pc/codec_vendor.cc b/webrtc/pc/codec_vendor.cc +index 42d52f6..e45516c 100644 +--- a/webrtc/pc/codec_vendor.cc ++++ b/webrtc/pc/codec_vendor.cc +@@ -39,7 +39,6 @@ + #include "pc/rtp_media_utils.h" + #include "pc/session_description.h" + #include "pc/typed_codec_vendor.h" +-#include "pc/used_ids.h" + #include "rtc_base/checks.h" + #include "rtc_base/logging.h" + #include "rtc_base/string_encode.h" +@@ -54,11 +53,6 @@ + + namespace { + +-using webrtc::PayloadTypeSuggester; +-using webrtc::RTCError; +-using webrtc::RTCErrorOr; +-using webrtc::RtpTransceiverDirection; +- + bool IsRtxCodec(const RtpCodecCapability& capability) { + return absl::EqualsIgnoreCase(capability.name, kRtxCodecName); + } +@@ -75,8 +69,7 @@ + std::optional FindMatchingCodec(const CodecList& codecs1, + const CodecList& codecs2, + const Codec& codec_to_match) { +- return webrtc::FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), +- codec_to_match); ++ return FindMatchingCodec(codecs1.codecs(), codecs2.codecs(), codec_to_match); + } + + void StripCNCodecs(CodecList& audio_codecs) { +@@ -105,7 +98,7 @@ + } + + int associated_pt; +- if (!webrtc::FromString(associated_pt_str, &associated_pt)) { ++ if (!FromString(associated_pt_str, &associated_pt)) { + RTC_LOG(LS_WARNING) << "Couldn't convert payload type " << associated_pt_str + << " of RTX codec " << rtx_codec.id + << " to an integer."; +@@ -136,14 +129,14 @@ + return nullptr; + } + +- std::vector redundant_payloads = webrtc::split(fmtp, '/'); ++ std::vector redundant_payloads = split(fmtp, '/'); + if (redundant_payloads.size() < 2) { + return nullptr; + } + + absl::string_view associated_pt_str = redundant_payloads[0]; + int associated_pt; +- if (!webrtc::FromString(associated_pt_str, &associated_pt)) { ++ if (!FromString(associated_pt_str, &associated_pt)) { + RTC_LOG(LS_WARNING) << "Couldn't convert first payload type " + << associated_pt_str << " of RED codec " << red_codec.id + << " to an integer."; +@@ -182,7 +175,21 @@ + return suggestion.MoveError(); + } + codec.id = suggestion.value(); +- offered_codecs.push_back(codec); ++ // The rewrite of the parameter may have turned the codec into ++ // one that is already present. ++ bool skip = false; ++ for (const Codec& present_codec : offered_codecs) { ++ if (present_codec.id == codec.id) { ++ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, codec)) ++ << "Codec mismatch: present " << present_codec << ", new " ++ << codec; ++ skip = true; ++ break; ++ } ++ } ++ if (!skip) { ++ offered_codecs.push_back(codec); ++ } + } + } + +@@ -232,7 +239,7 @@ + } + std::string red_param = absl::StrCat(matching_codec->id); + red_codec.params[kCodecParamNotInNameValueFormat] = +- webrtc::StrJoin(std::vector{red_param, red_param}, "/"); ++ StrJoin(std::vector{red_param, red_param}, "/"); + } + RTCErrorOr suggestion = + pt_suggester.SuggestPayloadType(mid, red_codec); +@@ -240,84 +247,25 @@ + return suggestion.MoveError(); + } + red_codec.id = suggestion.value(); +- offered_codecs.push_back(red_codec); ++ // The rewrite of the parameter may have turned the RED codec into ++ // one that is already present. ++ bool skip = false; ++ for (const Codec& present_codec : offered_codecs) { ++ if (present_codec.id == red_codec.id) { ++ RTC_DCHECK(MatchesWithReferenceAttributes(present_codec, red_codec)); ++ skip = true; ++ break; ++ } ++ } ++ if (!skip) { ++ offered_codecs.push_back(red_codec); ++ } + } + } + offered_codecs.CheckConsistency(); + return RTCError::OK(); + } + +-// Adds all codecs from `reference_codecs` to `offered_codecs` that don't +-// already exist in `offered_codecs` and ensure the payload types don't +-// collide. +-// OLD VERSION - uses UsedPayloadTypes +-void MergeCodecs(const CodecList& reference_codecs, +- CodecList& offered_codecs, +- UsedPayloadTypes* used_pltypes) { +- // Add all new codecs that are not RTX/RED codecs. +- // The two-pass splitting of the loops means preferring payload types +- // of actual codecs with respect to collisions. +- for (const Codec& reference_codec : reference_codecs) { +- if (reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRtx && +- reference_codec.GetResiliencyType() != Codec::ResiliencyType::kRed && +- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) { +- Codec codec = reference_codec; +- used_pltypes->FindAndSetIdUsed(&codec); +- offered_codecs.push_back(codec); +- } +- } +- +- // Add all new RTX or RED codecs. +- for (const Codec& reference_codec : reference_codecs) { +- if (reference_codec.GetResiliencyType() == Codec::ResiliencyType::kRtx && +- !FindMatchingCodec(reference_codecs, offered_codecs, reference_codec)) { +- Codec rtx_codec = reference_codec; +- const Codec* associated_codec = +- GetAssociatedCodecForRtx(reference_codecs, rtx_codec); +- if (!associated_codec) { +- continue; +- } +- // Find a codec in the offered list that matches the reference codec. +- // Its payload type may be different than the reference codec. +- std::optional matching_codec = FindMatchingCodec( +- reference_codecs, offered_codecs, *associated_codec); +- if (!matching_codec) { +- RTC_LOG(LS_WARNING) +- << "Couldn't find matching " << associated_codec->name << " codec."; +- continue; +- } +- +- rtx_codec.params[kCodecParamAssociatedPayloadType] = +- absl::StrCat(matching_codec->id); +- used_pltypes->FindAndSetIdUsed(&rtx_codec); +- offered_codecs.push_back(rtx_codec); +- } else if (reference_codec.GetResiliencyType() == +- Codec::ResiliencyType::kRed && +- !FindMatchingCodec(reference_codecs, offered_codecs, +- reference_codec)) { +- Codec red_codec = reference_codec; +- const Codec* associated_codec = +- GetAssociatedCodecForRed(reference_codecs, red_codec); +- if (associated_codec) { +- std::optional matching_codec = FindMatchingCodec( +- reference_codecs, offered_codecs, *associated_codec); +- if (!matching_codec) { +- RTC_LOG(LS_WARNING) << "Couldn't find matching " +- << associated_codec->name << " codec."; +- continue; +- } +- +- red_codec.params[kCodecParamNotInNameValueFormat] = +- absl::StrCat(matching_codec->id) + "/" + +- absl::StrCat(matching_codec->id); +- } +- used_pltypes->FindAndSetIdUsed(&red_codec); +- offered_codecs.push_back(red_codec); +- } +- } +- offered_codecs.CheckConsistency(); +-} +- + // `codecs` is a full list of codecs with correct payload type mappings, which + // don't conflict with mappings of the other media type; `supported_codecs` is + // a list filtered for the media section`s direction but with default payload +@@ -382,7 +330,7 @@ + codec.params.find(kCodecParamNotInNameValueFormat); + if (fmtp != codec.params.end()) { + std::vector redundant_payloads = +- webrtc::split(fmtp->second, '/'); ++ split(fmtp->second, '/'); + if (!redundant_payloads.empty() && + redundant_payloads[0] == id) { + if (!red_was_added) { +@@ -443,7 +391,7 @@ + for (const Codec& supported_codec : supported_codecs) { + if (absl::EqualsIgnoreCase(supported_codec.name, kH265CodecName)) { + std::optional supported_ptl = +- webrtc::ParseSdpForH265ProfileTierLevel(supported_codec.params); ++ ParseSdpForH265ProfileTierLevel(supported_codec.params); + if (supported_ptl.has_value()) { + supported_h265_profiles[supported_ptl->profile] = + supported_ptl->level; +@@ -458,14 +406,14 @@ + for (auto& filtered_codec : filtered_codecs) { + if (absl::EqualsIgnoreCase(filtered_codec.name, kH265CodecName)) { + std::optional filtered_ptl = +- webrtc::ParseSdpForH265ProfileTierLevel(filtered_codec.params); ++ ParseSdpForH265ProfileTierLevel(filtered_codec.params); + if (filtered_ptl.has_value()) { + auto it = supported_h265_profiles.find(filtered_ptl->profile); + + if (it != supported_h265_profiles.end() && + filtered_ptl->level != it->second) { + filtered_codec.params[kH265FmtpLevelId] = +- webrtc::H265LevelToString(it->second); ++ H265LevelToString(it->second); + } + } + } +@@ -506,13 +454,13 @@ + } + } + if (absl::EqualsIgnoreCase(ours.name, kH264CodecName)) { +- webrtc::H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params, +- &negotiated.params); ++ H264GenerateProfileLevelIdForAnswer(ours.params, theirs->params, ++ &negotiated.params); + } + #ifdef RTC_ENABLE_H265 + if (absl::EqualsIgnoreCase(ours.name, kH265CodecName)) { +- webrtc::H265GenerateProfileTierLevelForAnswer( +- ours.params, theirs->params, &negotiated.params); ++ H265GenerateProfileTierLevelForAnswer(ours.params, theirs->params, ++ &negotiated.params); + NegotiateTxMode(ours, *theirs, &negotiated); + } + #endif +@@ -534,7 +482,7 @@ + continue; + } + int apt_value; +- if (!webrtc::FromString(apt_str, &apt_value)) { ++ if (!FromString(apt_str, &apt_value)) { + RTC_LOG(LS_WARNING) << "Unconvertable apt value"; + continue; + } +@@ -634,9 +582,11 @@ + } + // Add our codecs that are not in the current description. + if (media_description_options.type == MediaType::AUDIO) { +- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester); + } else { +- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester); + } + CodecList filtered_codecs; + CodecList supported_codecs = +@@ -667,20 +617,11 @@ + const MediaContentDescription* mcd = + current_content->media_description(); + for (const Codec& codec : mcd->codecs()) { +- if (webrtc::FindMatchingCodec(mcd->codecs(), codecs.codecs(), +- codec)) { ++ if (FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) { + filtered_codecs.push_back(codec); + } + } + } +- // Note what PTs are already in use. +- UsedPayloadTypes +- used_pltypes; // Used to avoid pt collisions in filtered_codecs +- for (auto& codec : filtered_codecs) { +- // Note: This may change PTs. Doing so woud indicate an error, but +- // UsedPayloadTypes doesn't offer a means to make the distinction. +- used_pltypes.FindAndSetIdUsed(&codec); +- } + // Add other supported codecs. + for (const Codec& codec : supported_codecs) { + std::optional found_codec = +@@ -707,8 +648,11 @@ + changed_referenced_codec->id); + } + } +- // Quick fix for b/395077842: Remap the codec if it collides. +- used_pltypes.FindAndSetIdUsed(&(*found_codec)); ++ auto pt_or_error = pt_suggester.SuggestPayloadType(mid, *found_codec); ++ if (!pt_or_error.ok()) { ++ return pt_or_error.MoveError(); ++ } ++ found_codec->id = pt_or_error.value(); + filtered_codecs.push_back(*found_codec); + } + } +@@ -763,9 +707,11 @@ + } + // Add all our supported codecs + if (media_description_options.type == MediaType::AUDIO) { +- MergeCodecs(all_audio_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(audio_recv_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(audio_send_codecs(), mid, codecs, pt_suggester); + } else { +- MergeCodecs(all_video_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(video_recv_codecs(), mid, codecs, pt_suggester); ++ MergeCodecs(video_send_codecs(), mid, codecs, pt_suggester); + } + CodecList filtered_codecs; + CodecList negotiated_codecs; +@@ -794,8 +740,8 @@ + const MediaContentDescription* mcd = + current_content->media_description(); + for (const Codec& codec : mcd->codecs()) { +- if (std::optional found_codec = webrtc::FindMatchingCodec( +- mcd->codecs(), codecs.codecs(), codec)) { ++ if (std::optional found_codec = ++ FindMatchingCodec(mcd->codecs(), codecs.codecs(), codec)) { + filtered_codecs.push_back(*found_codec); + } + } +@@ -913,8 +859,7 @@ + case RtpTransceiverDirection::kSendRecv: + case RtpTransceiverDirection::kStopped: + case RtpTransceiverDirection::kInactive: +- return GetVideoCodecsForOffer( +- webrtc::RtpTransceiverDirectionReversed(offer)); ++ return GetVideoCodecsForOffer(RtpTransceiverDirectionReversed(offer)); + case RtpTransceiverDirection::kSendOnly: + return video_send_codecs_.codecs(); + case RtpTransceiverDirection::kRecvOnly: +@@ -948,8 +893,7 @@ + case RtpTransceiverDirection::kSendRecv: + case RtpTransceiverDirection::kStopped: + case RtpTransceiverDirection::kInactive: +- return GetAudioCodecsForOffer( +- webrtc::RtpTransceiverDirectionReversed(offer)); ++ return GetAudioCodecsForOffer(RtpTransceiverDirectionReversed(offer)); + case RtpTransceiverDirection::kSendOnly: + return audio_send_codecs_.codecs(); + case RtpTransceiverDirection::kRecvOnly: +@@ -958,43 +902,6 @@ + RTC_CHECK_NOTREACHED(); + } + +-CodecList CodecVendor::all_video_codecs() const { +- CodecList all_codecs; +- UsedPayloadTypes used_payload_types; +- for (const Codec& codec : video_recv_codecs_.codecs()) { +- Codec codec_mutable = codec; +- used_payload_types.FindAndSetIdUsed(&codec_mutable); +- all_codecs.push_back(codec_mutable); +- } +- +- // Use MergeCodecs to merge the second half of our list as it already checks +- // and fixes problems with duplicate payload types. +- MergeCodecs(video_send_codecs_.codecs(), all_codecs, &used_payload_types); +- +- return all_codecs; +-} +- +-CodecList CodecVendor::all_audio_codecs() const { +- // Compute the audio codecs union. +- CodecList codecs; +- for (const Codec& send : audio_send_codecs_.codecs()) { +- codecs.push_back(send); +- if (!FindMatchingCodec(audio_send_codecs_.codecs(), +- audio_recv_codecs_.codecs(), send)) { +- // It doesn't make sense to have an RTX codec we support sending but not +- // receiving. +- RTC_DCHECK(send.GetResiliencyType() != Codec::ResiliencyType::kRtx); +- } +- } +- for (const Codec& recv : audio_recv_codecs_.codecs()) { +- if (!FindMatchingCodec(audio_recv_codecs_.codecs(), +- audio_send_codecs_.codecs(), recv)) { +- codecs.push_back(recv); +- } +- } +- return codecs; +-} +- + CodecList CodecVendor::audio_sendrecv_codecs() const { + // Use NegotiateCodecs to merge our codec lists, since the operation is + // essentially the same. Put send_codecs as the offered_codecs, which is the +diff --git a/webrtc/pc/wcodec_vendor.h b/webrtc/pc/codec_vendor.h +index 1472225..4a3a8d9 100644 +--- a/webrtc/pc/codec_vendor.h ++++ b/webrtc/pc/codec_vendor.h +@@ -102,9 +102,6 @@ + const RtpTransceiverDirection& offer, + const RtpTransceiverDirection& answer) const; + +- CodecList all_video_codecs() const; +- CodecList all_audio_codecs() const; +- + TypedCodecVendor audio_send_codecs_; + TypedCodecVendor audio_recv_codecs_; + +diff --git a/webrtc/pc/used_ids.h b/webrtc/pc/used_ids.h +index fe80531..f9d825c 100644 +--- a/webrtc/pc/used_ids.h ++++ b/webrtc/pc/used_ids.h +@@ -14,7 +14,6 @@ + #include + + #include "api/rtp_parameters.h" +-#include "media/base/codec.h" + #include "rtc_base/checks.h" + + namespace webrtc { +@@ -88,41 +86,6 @@ + std::set id_set_; + }; + +-// Helper class used for finding duplicate RTP payload types among audio, video +-// and data codecs. When bundle is used the payload types may not collide. +-class UsedPayloadTypes : public UsedIds { +- public: +- UsedPayloadTypes() +- : UsedIds(kFirstDynamicPayloadTypeLowerRange, +- kLastDynamicPayloadTypeUpperRange) {} +- +- // Check if a payload type is valid. The range [64-95] is forbidden +- // when rtcp-mux is used. +- static bool IsIdValid(Codec codec, bool rtcp_mux) { +- if (rtcp_mux && (codec.id > kLastDynamicPayloadTypeLowerRange && +- codec.id < kFirstDynamicPayloadTypeUpperRange)) { +- return false; +- } +- return codec.id >= 0 && codec.id <= kLastDynamicPayloadTypeUpperRange; +- } +- +- protected: +- bool IsIdUsed(int new_id) override { +- // Range marked for RTCP avoidance is "used". +- if (new_id > kLastDynamicPayloadTypeLowerRange && +- new_id < kFirstDynamicPayloadTypeUpperRange) +- return true; +- return UsedIds::IsIdUsed(new_id); +- } +- +- private: +- static const int kFirstDynamicPayloadTypeLowerRange = 35; +- static const int kLastDynamicPayloadTypeLowerRange = 63; +- +- static const int kFirstDynamicPayloadTypeUpperRange = 96; +- static const int kLastDynamicPayloadTypeUpperRange = 127; +-}; +- + // Helper class used for finding duplicate RTP Header extension ids among + // audio and video extensions. + class UsedRtpHeaderExtensionIds : public UsedIds { From a1898dab2d7d0ccc65e58e95646dc3e9b43d1320 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 24 Nov 2025 13:30:52 -0500 Subject: [PATCH 704/738] backports/thelounge: enable check --- backports/thelounge/APKBUILD | 4 ++-- .../allow-https-for-connect-src.patch | 13 ------------- backports/thelounge/no-version-test.patch | 19 ------------------- 3 files changed, 2 insertions(+), 34 deletions(-) delete mode 100644 backports/thelounge/allow-https-for-connect-src.patch delete mode 100644 backports/thelounge/no-version-test.patch diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD index 0e84a6e..bc0de04 100644 --- a/backports/thelounge/APKBUILD +++ b/backports/thelounge/APKBUILD @@ -3,7 +3,7 @@ # Maintainer: Fabricio Silva pkgname=thelounge pkgver=4.4.3 -pkgrel=1 +pkgrel=0 pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" url="https://thelounge.chat" arch="all !riscv64" # riscv64 gets SIGILL @@ -17,7 +17,7 @@ source=" thelounge.initd thelounge.confd " -options="!check net" # net for npm +options="net" # net for npm case $CARCH in # loongarch64: 2 tests failed on the builder diff --git a/backports/thelounge/allow-https-for-connect-src.patch b/backports/thelounge/allow-https-for-connect-src.patch deleted file mode 100644 index a147a91..0000000 --- a/backports/thelounge/allow-https-for-connect-src.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/server/server.ts b/server/server.ts.orig -index 7a1514e..5ecdea9 100644 ---- a/server/server.ts -+++ b/server/server.ts.orig -@@ -377,7 +377,7 @@ function addSecurityHeaders(req: Request, res: Response, next: NextFunction) { - "default-src 'none'", // default to nothing - "base-uri 'none'", // disallow , has no fallback to default-src - "form-action 'self'", // 'self' to fix saving passwords in Firefox, even though login is handled in javascript -- "connect-src 'self' ws: wss:", // allow self for polling; websockets -+ "connect-src 'self' ws: wss: https:", // allow self for polling; websockets - "style-src 'self' https: 'unsafe-inline'", // allow inline due to use in irc hex colors - "script-src 'self'", // javascript - "worker-src 'self'", // service worker diff --git a/backports/thelounge/no-version-test.patch b/backports/thelounge/no-version-test.patch deleted file mode 100644 index dfae092..0000000 --- a/backports/thelounge/no-version-test.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff --git a/test/src/helperTest.ts b/test/src/helperTest.ts -index 2a8ddc8..22f0532 100644 ---- a/test/src/helperTest.ts -+++ b/test/src/helperTest.ts -@@ -40,14 +40,6 @@ describe("Helper", function () { - describe("#getVersion()", function () { - const version = Helper.getVersion(); - -- it("should mention it is served from source code", function () { -- expect(version).to.include("source"); -- }); -- -- it("should include a short Git SHA", function () { -- expect(version).to.match(/\([0-9a-f]{7,11} /); -- }); -- - it("should include a valid semver version", function () { - expect(version).to.match(/v[0-9]+\.[0-9]+\.[0-9]+/); - }); From fd29f9c77b95c961ce599b711819a8cbe1de29d2 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 16:51:44 -0500 Subject: [PATCH 705/738] backports/shntool: fix build against latest gcc --- backports/shntool/APKBUILD | 7 +++++-- backports/shntool/no-cdquality-check.patch | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 backports/shntool/no-cdquality-check.patch diff --git a/backports/shntool/APKBUILD b/backports/shntool/APKBUILD index 117a36b..05cb959 100644 --- a/backports/shntool/APKBUILD +++ b/backports/shntool/APKBUILD @@ -2,7 +2,7 @@ # Maintainer: Jean-Louis Fuchs pkgname=shntool pkgver=3.0.10 -pkgrel=5 +pkgrel=6 pkgdesc="A multi-purpose WAVE data processing and reporting utility" url="http://shnutils.freeshell.org/shntool/" arch="all" @@ -13,6 +13,7 @@ source="http://shnutils.freeshell.org/shntool/dist/src/shntool-$pkgver.tar.gz shntool-3.0.10-large-size.patch shntool-3.0.10-large-times.patch 24bit.patch + no-cdquality-check.patch " build() { @@ -24,7 +25,8 @@ build() { --sysconfdir=/etc \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ - --localstatedir=/var + --localstatedir=/var \ + CFLAGS="--std=gnu17" make } @@ -63,4 +65,5 @@ sha512sums=" fc44bca63d79b279db6d275caaacdb73cbebd6b902276a9052f005146fa125f4674e3cf559d46405637a337192f4a38f9bec4836af46e7ae52e4f220352c1ba7 shntool-3.0.10-large-size.patch 9780f22d93e20dd01d18067978bdf6cbb0b460bb80f41c4f4752b3322c3d70182b3acf35b789e30fc36ca52af6127e24c00599fb49b916f01448613721a94ebe shntool-3.0.10-large-times.patch 3c9cdd7936a6572a3c9dfc7575f5ff9a0981dd557add8e1113454487091c7b161040d25d3266937449295a1bb5317ee3515a84c3d7168360bf84643ed828e202 24bit.patch +e5b5fe4894eea92e026eec666900bde2b10ea33d4b0ffbf74a231e443c476e11b50eebc21bc2ff2b844ca48af0a41a7b6af77fdc524d0b1bd33d03f133d99992 no-cdquality-check.patch " diff --git a/backports/shntool/no-cdquality-check.patch b/backports/shntool/no-cdquality-check.patch new file mode 100644 index 0000000..4ca3717 --- /dev/null +++ b/backports/shntool/no-cdquality-check.patch @@ -0,0 +1,21 @@ +Last-Update: 2014-11-15 +Forwarded: yes +Author: Dmitry Smirnov +Bug-Debian: http://bugs.debian.org/769585 +Description: disable CD-quality check, needed to process 24bit 96kHz files. + +--- a/src/core_mode.c ++++ b/src/core_mode.c +@@ -344,10 +344,10 @@ + + *colon = 0; + *dot = 0; + +- if (PROB_NOT_CD(info)) +- st_error("m:ss.ff format can only be used with CD-quality files"); ++// if (PROB_NOT_CD(info)) ++// st_error("m:ss.ff format can only be used with CD-quality files"); + + min = atoi((const char *)buf); + sec = atoi((const char *)(colon+1)); + frames = atoi((const char *)(dot+1)); From df11191c86615ce2599cbcad1ded473a2225da1c Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 16:52:17 -0500 Subject: [PATCH 706/738] backports/thelounge: disable as broken against node 24 --- backports/thelounge/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backports/thelounge/APKBUILD b/backports/thelounge/APKBUILD index bc0de04..22b5565 100644 --- a/backports/thelounge/APKBUILD +++ b/backports/thelounge/APKBUILD @@ -6,7 +6,8 @@ pkgver=4.4.3 pkgrel=0 pkgdesc="Modern, responsive, cross-platform, self-hosted web IRC client" url="https://thelounge.chat" -arch="all !riscv64" # riscv64 gets SIGILL +# build broken against node 24 +#arch="all !riscv64" # riscv64 gets SIGILL license="MIT" depends="nodejs" makedepends="yarn py3-setuptools" From 8792a8c06a16cee3f067d4c21578ad4d497f7774 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 16:52:59 -0500 Subject: [PATCH 707/738] user/papermc-plugin-luckperms: disable as upstream dependency not available --- user/papermc-plugin-luckperms/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/papermc-plugin-luckperms/APKBUILD b/user/papermc-plugin-luckperms/APKBUILD index 4de9ddb..d480f40 100644 --- a/user/papermc-plugin-luckperms/APKBUILD +++ b/user/papermc-plugin-luckperms/APKBUILD @@ -5,7 +5,8 @@ pkgver=5.4.151 _gittag=0fef481d480737528491fc0b3b8487eb1612f955 pkgrel=0 pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." -arch='noarch' +# dependency not available upstream anymore +#arch='noarch' url="https://github.com/lucko/LuckPerms" license="MIT" depends="papermc>=1.8.8" From 2865b8f524aee2d7d284a55120d3f23c5809a27b Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sat, 29 Nov 2025 16:53:27 -0500 Subject: [PATCH 708/738] user/papermc-plugin-essentialsx: blocked by luckperms --- user/papermc-plugin-essentialsx/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/papermc-plugin-essentialsx/APKBUILD b/user/papermc-plugin-essentialsx/APKBUILD index 6abab9f..17643a5 100644 --- a/user/papermc-plugin-essentialsx/APKBUILD +++ b/user/papermc-plugin-essentialsx/APKBUILD @@ -5,7 +5,8 @@ pkgver=2.21.1 _gittag=$pkgver pkgrel=0 pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." -arch='noarch' +# blocked by luckperms +#arch='noarch' url="https://essentialsx.net/" license="GPL-3.0" depends=" From ba29f2b00023ce6a4b33152f18aa1666ad1b070a Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Dec 2025 21:34:42 -0500 Subject: [PATCH 709/738] user/uvicorn: drop due to re-added to aports --- .../2540_add-websocketssansioprotocol.patch | 1194 ----------------- .../2541_bump-wesockets-on-requirements.patch | 559 -------- user/uvicorn/APKBUILD | 55 - user/uvicorn/test_multiprocess.patch | 14 - 4 files changed, 1822 deletions(-) delete mode 100644 user/uvicorn/2540_add-websocketssansioprotocol.patch delete mode 100644 user/uvicorn/2541_bump-wesockets-on-requirements.patch delete mode 100644 user/uvicorn/APKBUILD delete mode 100644 user/uvicorn/test_multiprocess.patch diff --git a/user/uvicorn/2540_add-websocketssansioprotocol.patch b/user/uvicorn/2540_add-websocketssansioprotocol.patch deleted file mode 100644 index a1fe5bf..0000000 --- a/user/uvicorn/2540_add-websocketssansioprotocol.patch +++ /dev/null @@ -1,1194 +0,0 @@ -From d79d86eee1ad8cdcc9668de3237b0c6203257992 Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sat, 14 Dec 2024 13:44:22 +0100 -Subject: [PATCH 1/7] Add WebSocketsSansIOProtocol - ---- - docs/deployment.md | 2 +- - docs/index.md | 2 +- - pyproject.toml | 3 + - requirements.txt | 2 +- - tests/conftest.py | 4 +- - tests/middleware/test_logging.py | 11 +- - tests/middleware/test_proxy_headers.py | 5 +- - uvicorn/config.py | 3 +- - .../websockets/websockets_sansio_impl.py | 386 ++++++++++++++++++ - uvicorn/server.py | 3 +- - 10 files changed, 408 insertions(+), 13 deletions(-) - create mode 100644 uvicorn/protocols/websockets/websockets_sansio_impl.py - -diff --git a/pyproject.toml b/pyproject.toml -index 6f809030e..3e30b658c 100644 ---- a/pyproject.toml -+++ b/pyproject.toml -@@ -93,6 +93,9 @@ filterwarnings = [ - "ignore:Uvicorn's native WSGI implementation is deprecated.*:DeprecationWarning", - "ignore: 'cgi' is deprecated and slated for removal in Python 3.13:DeprecationWarning", - "ignore: remove second argument of ws_handler:DeprecationWarning:websockets", -+ "ignore: websockets.legacy is deprecated.*:DeprecationWarning", -+ "ignore: websockets.server.WebSocketServerProtocol is deprecated.*:DeprecationWarning", -+ "ignore: websockets.client.connect is deprecated.*:DeprecationWarning", - ] - - [tool.coverage.run] -diff --git a/requirements.txt b/requirements.txt -index b3a464c0b..fd2334d02 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -7,7 +7,7 @@ h11 @ git+https://github.com/python-hyper/h11.git@master - # Explicit optionals - a2wsgi==1.10.7 - wsproto==1.2.0 --websockets==13.1 -+websockets==14.1 - - # Packaging - build==1.2.2.post1 -diff --git a/tests/conftest.py b/tests/conftest.py -index 1b0c0e84e..84bda4dc2 100644 ---- a/tests/conftest.py -+++ b/tests/conftest.py -@@ -233,9 +233,9 @@ def unused_tcp_port() -> int: - marks=pytest.mark.skipif(not importlib.util.find_spec("wsproto"), reason="wsproto not installed."), - id="wsproto", - ), -+ pytest.param("uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", id="websockets"), - pytest.param( -- "uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", -- id="websockets", -+ "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", id="websockets-sansio" - ), - ] - ) -diff --git a/tests/middleware/test_logging.py b/tests/middleware/test_logging.py -index f27633aa5..c8126f9e6 100644 ---- a/tests/middleware/test_logging.py -+++ b/tests/middleware/test_logging.py -@@ -49,7 +49,9 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable - await send({"type": "http.response.body", "body": b"", "more_body": False}) - - --async def test_trace_logging(caplog: pytest.LogCaptureFixture, logging_config, unused_tcp_port: int): -+async def test_trace_logging( -+ caplog: pytest.LogCaptureFixture, logging_config: dict[str, typing.Any], unused_tcp_port: int -+): - config = Config( - app=app, - log_level="trace", -@@ -89,10 +91,11 @@ async def test_trace_logging_on_http_protocol(http_protocol_cls, caplog, logging - assert any(" - HTTP connection lost" in message for message in messages) - - -+@pytest.mark.skip() - async def test_trace_logging_on_ws_protocol( - ws_protocol_cls: WSProtocol, -- caplog, -- logging_config, -+ caplog: pytest.LogCaptureFixture, -+ logging_config: dict[str, typing.Any], - unused_tcp_port: int, - ): - async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): -@@ -104,7 +107,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe - elif message["type"] == "websocket.disconnect": - break - -- async def open_connection(url): -+ async def open_connection(url: str): - async with websockets.client.connect(url) as websocket: - return websocket.open - -diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py -index 0ade97450..4b5f195f6 100644 ---- a/tests/middleware/test_proxy_headers.py -+++ b/tests/middleware/test_proxy_headers.py -@@ -5,7 +5,7 @@ - import httpx - import httpx._transports.asgi - import pytest --import websockets.client -+from websockets.asyncio.client import connect - - from tests.response import Response - from tests.utils import run_server -@@ -465,6 +465,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe - host, port = scope["client"] - await send({"type": "websocket.accept"}) - await send({"type": "websocket.send", "text": f"{scheme}://{host}:{port}"}) -+ await send({"type": "websocket.close"}) - - app_with_middleware = ProxyHeadersMiddleware(websocket_app, trusted_hosts="*") - config = Config( -@@ -478,7 +479,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe - async with run_server(config): - url = f"ws://127.0.0.1:{unused_tcp_port}" - headers = {X_FORWARDED_FOR: "1.2.3.4", X_FORWARDED_PROTO: forwarded_proto} -- async with websockets.client.connect(url, extra_headers=headers) as websocket: -+ async with connect(url, additional_headers=headers) as websocket: - data = await websocket.recv() - assert data == expected - -diff --git a/uvicorn/config.py b/uvicorn/config.py -index b08a8426b..3480b5392 100644 ---- a/uvicorn/config.py -+++ b/uvicorn/config.py -@@ -24,7 +24,7 @@ - from uvicorn.middleware.wsgi import WSGIMiddleware - - HTTPProtocolType = Literal["auto", "h11", "httptools"] --WSProtocolType = Literal["auto", "none", "websockets", "wsproto"] -+WSProtocolType = Literal["auto", "none", "websockets", "websockets-sansio", "wsproto"] - LifespanType = Literal["auto", "on", "off"] - LoopSetupType = Literal["none", "auto", "asyncio", "uvloop"] - InterfaceType = Literal["auto", "asgi3", "asgi2", "wsgi"] -@@ -46,6 +46,7 @@ - "auto": "uvicorn.protocols.websockets.auto:AutoWebSocketsProtocol", - "none": None, - "websockets": "uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", -+ "websockets-sansio": "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", - "wsproto": "uvicorn.protocols.websockets.wsproto_impl:WSProtocol", - } - LIFESPAN: dict[LifespanType, str] = { -diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py -new file mode 100644 -index 000000000..49e8a71a1 ---- /dev/null -+++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py -@@ -0,0 +1,386 @@ -+from __future__ import annotations -+ -+import asyncio -+import logging -+from asyncio.transports import BaseTransport, Transport -+from http import HTTPStatus -+from typing import Any, Literal, cast -+from urllib.parse import unquote -+ -+from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory -+from websockets.frames import Frame, Opcode -+from websockets.http11 import Request -+from websockets.server import ServerProtocol -+ -+from uvicorn._types import ( -+ ASGIReceiveEvent, -+ ASGISendEvent, -+ WebSocketAcceptEvent, -+ WebSocketCloseEvent, -+ WebSocketDisconnectEvent, -+ WebSocketReceiveEvent, -+ WebSocketResponseBodyEvent, -+ WebSocketResponseStartEvent, -+ WebSocketScope, -+ WebSocketSendEvent, -+) -+from uvicorn.config import Config -+from uvicorn.logging import TRACE_LOG_LEVEL -+from uvicorn.protocols.utils import get_local_addr, get_path_with_query_string, get_remote_addr, is_ssl -+from uvicorn.server import ServerState -+ -+ -+class WebSocketSansIOProtocol(asyncio.Protocol): -+ def __init__( -+ self, -+ config: Config, -+ server_state: ServerState, -+ app_state: dict[str, Any], -+ _loop: asyncio.AbstractEventLoop | None = None, -+ ) -> None: -+ if not config.loaded: -+ config.load() # pragma: no cover -+ -+ self.config = config -+ self.app = config.loaded_app -+ self.loop = _loop or asyncio.get_event_loop() -+ self.logger = logging.getLogger("uvicorn.error") -+ self.root_path = config.root_path -+ self.app_state = app_state -+ -+ # Shared server state -+ self.connections = server_state.connections -+ self.tasks = server_state.tasks -+ self.default_headers = server_state.default_headers -+ -+ # Connection state -+ self.transport: asyncio.Transport = None # type: ignore[assignment] -+ self.server: tuple[str, int] | None = None -+ self.client: tuple[str, int] | None = None -+ self.scheme: Literal["wss", "ws"] = None # type: ignore[assignment] -+ -+ # WebSocket state -+ self.queue: asyncio.Queue[ASGIReceiveEvent] = asyncio.Queue() -+ self.handshake_initiated = False -+ self.handshake_complete = False -+ self.close_sent = False -+ self.initial_response: tuple[int, list[tuple[str, str]], bytes] | None = None -+ -+ extensions = [] -+ if self.config.ws_per_message_deflate: -+ extensions = [ServerPerMessageDeflateFactory()] -+ self.conn = ServerProtocol( -+ extensions=extensions, -+ max_size=self.config.ws_max_size, -+ logger=logging.getLogger("uvicorn.error"), -+ ) -+ -+ self.read_paused = False -+ self.writable = asyncio.Event() -+ self.writable.set() -+ -+ # Buffers -+ self.bytes = b"" -+ -+ def connection_made(self, transport: BaseTransport) -> None: -+ """Called when a connection is made.""" -+ transport = cast(Transport, transport) -+ self.connections.add(self) -+ self.transport = transport -+ self.server = get_local_addr(transport) -+ self.client = get_remote_addr(transport) -+ self.scheme = "wss" if is_ssl(transport) else "ws" -+ -+ if self.logger.level <= TRACE_LOG_LEVEL: -+ prefix = "%s:%d - " % self.client if self.client else "" -+ self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection made", prefix) -+ -+ def connection_lost(self, exc: Exception | None) -> None: -+ self.connections.remove(self) -+ if self.logger.level <= TRACE_LOG_LEVEL: -+ prefix = "%s:%d - " % self.client if self.client else "" -+ self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection lost", prefix) -+ if self.handshake_initiated and not self.close_sent: -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) -+ -+ def shutdown(self) -> None: -+ if not self.transport.is_closing(): -+ if self.handshake_complete: -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) -+ self.close_sent = True -+ self.conn.send_close(1012) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ elif self.handshake_initiated: -+ self.send_500_response() -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) -+ self.transport.close() -+ -+ def data_received(self, data: bytes) -> None: -+ self.conn.receive_data(data) -+ parser_exc = self.conn.parser_exc -+ if parser_exc is not None: -+ self.handle_parser_exception() -+ return -+ self.handle_events() -+ -+ def handle_events(self) -> None: -+ for event in self.conn.events_received(): -+ if isinstance(event, Request): -+ self.handle_connect(event) -+ if isinstance(event, Frame): -+ if event.opcode == Opcode.CONT: -+ self.handle_cont(event) -+ elif event.opcode == Opcode.TEXT: -+ self.handle_text(event) -+ elif event.opcode == Opcode.BINARY: -+ self.handle_bytes(event) -+ elif event.opcode == Opcode.PING: -+ self.handle_ping(event) -+ elif event.opcode == Opcode.CLOSE: -+ self.handle_close(event) -+ -+ # Event handlers -+ -+ def handle_connect(self, event: Request) -> None: -+ self.request = event -+ self.response = self.conn.accept(event) -+ self.handshake_initiated = True -+ # if status_code is not 101 return response -+ if self.response.status_code != 101: -+ self.handshake_complete = True -+ self.close_sent = True -+ self.conn.send_response(self.response) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ self.transport.close() -+ return -+ -+ headers = [ -+ (key.encode("ascii"), value.encode("ascii", errors="surrogateescape")) -+ for key, value in event.headers.raw_items() -+ ] -+ raw_path, _, query_string = event.path.partition("?") -+ self.scope: WebSocketScope = { -+ "type": "websocket", -+ "asgi": {"version": self.config.asgi_version, "spec_version": "2.3"}, -+ "http_version": "1.1", -+ "scheme": self.scheme, -+ "server": self.server, -+ "client": self.client, -+ "root_path": self.root_path, -+ "path": unquote(raw_path), -+ "raw_path": raw_path.encode("ascii"), -+ "query_string": query_string.encode("ascii"), -+ "headers": headers, -+ "subprotocols": event.headers.get_all("Sec-WebSocket-Protocol"), -+ "state": self.app_state.copy(), -+ "extensions": {"websocket.http.response": {}}, -+ } -+ self.queue.put_nowait({"type": "websocket.connect"}) -+ task = self.loop.create_task(self.run_asgi()) -+ task.add_done_callback(self.on_task_complete) -+ self.tasks.add(task) -+ -+ def handle_cont(self, event: Frame) -> None: -+ self.bytes += event.data -+ if event.fin: -+ self.send_receive_event_to_app() -+ -+ def handle_text(self, event: Frame) -> None: -+ self.bytes = event.data -+ self.curr_msg_data_type: Literal["text", "bytes"] = "text" -+ if event.fin: -+ self.send_receive_event_to_app() -+ -+ def handle_bytes(self, event: Frame) -> None: -+ self.bytes = event.data -+ self.curr_msg_data_type = "bytes" -+ if event.fin: -+ self.send_receive_event_to_app() -+ -+ def send_receive_event_to_app(self) -> None: -+ data_type = self.curr_msg_data_type -+ msg: WebSocketReceiveEvent -+ if data_type == "text": -+ msg = {"type": "websocket.receive", data_type: self.bytes.decode()} -+ else: -+ msg = {"type": "websocket.receive", data_type: self.bytes} -+ self.queue.put_nowait(msg) -+ if not self.read_paused: -+ self.read_paused = True -+ self.transport.pause_reading() -+ -+ def handle_ping(self, event: Frame) -> None: -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ -+ def handle_close(self, event: Frame) -> None: -+ if not self.close_sent and self.conn.close_rcvd and not self.transport.is_closing(): -+ disconnect_event: WebSocketDisconnectEvent = { -+ "type": "websocket.disconnect", -+ "code": self.conn.close_rcvd.code, -+ "reason": self.conn.close_rcvd.reason, -+ } -+ self.queue.put_nowait(disconnect_event) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ self.close_sent = True -+ self.transport.close() -+ -+ def handle_parser_exception(self) -> None: -+ disconnect_event: WebSocketDisconnectEvent = { -+ "type": "websocket.disconnect", -+ "code": self.conn.close_sent.code if self.conn.close_sent else 1006, -+ } -+ self.queue.put_nowait(disconnect_event) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ self.close_sent = True -+ self.transport.close() -+ -+ def on_task_complete(self, task: asyncio.Task[None]) -> None: -+ self.tasks.discard(task) -+ -+ async def run_asgi(self) -> None: -+ try: -+ result = await self.app(self.scope, self.receive, self.send) -+ except BaseException: -+ self.logger.exception("Exception in ASGI application\n") -+ if not self.handshake_complete: -+ self.send_500_response() -+ self.transport.close() -+ else: -+ if not self.handshake_complete: -+ msg = "ASGI callable returned without completing handshake." -+ self.logger.error(msg) -+ self.send_500_response() -+ self.transport.close() -+ elif result is not None: -+ msg = "ASGI callable should return None, but returned '%s'." -+ self.logger.error(msg, result) -+ self.transport.close() -+ -+ def send_500_response(self) -> None: -+ response = self.conn.reject(500, "Internal Server Error") -+ self.conn.send_response(response) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ -+ async def send(self, message: ASGISendEvent) -> None: -+ await self.writable.wait() -+ -+ message_type = message["type"] -+ -+ if not self.handshake_complete and self.initial_response is None: -+ if message_type == "websocket.accept": -+ message = cast(WebSocketAcceptEvent, message) -+ self.logger.info( -+ '%s - "WebSocket %s" [accepted]', -+ self.scope["client"], -+ get_path_with_query_string(self.scope), -+ ) -+ headers = [ -+ (name.decode("latin-1").lower(), value.decode("latin-1").lower()) -+ for name, value in (self.default_headers + list(message.get("headers", []))) -+ ] -+ accepted_subprotocol = message.get("subprotocol") -+ if accepted_subprotocol: -+ headers.append(("Sec-WebSocket-Protocol", accepted_subprotocol)) -+ self.response.headers.update(headers) -+ -+ if not self.transport.is_closing(): -+ self.handshake_complete = True -+ self.conn.send_response(self.response) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ -+ elif message_type == "websocket.close": -+ message = cast(WebSocketCloseEvent, message) -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) -+ self.logger.info( -+ '%s - "WebSocket %s" 403', -+ self.scope["client"], -+ get_path_with_query_string(self.scope), -+ ) -+ response = self.conn.reject(HTTPStatus.FORBIDDEN, "") -+ self.conn.send_response(response) -+ output = self.conn.data_to_send() -+ self.close_sent = True -+ self.handshake_complete = True -+ self.transport.writelines(output) -+ self.transport.close() -+ elif message_type == "websocket.http.response.start": -+ message = cast(WebSocketResponseStartEvent, message) -+ self.logger.info( -+ '%s - "WebSocket %s" %d', -+ self.scope["client"], -+ get_path_with_query_string(self.scope), -+ message["status"], -+ ) -+ headers = [ -+ (name.decode("latin-1"), value.decode("latin-1")) -+ for name, value in list(message.get("headers", [])) -+ ] -+ self.initial_response = (message["status"], headers, b"") -+ else: -+ msg = ( -+ "Expected ASGI message 'websocket.accept', 'websocket.close' " -+ "or 'websocket.http.response.start' " -+ "but got '%s'." -+ ) -+ print(message) -+ raise RuntimeError(msg % message_type) -+ -+ elif not self.close_sent and self.initial_response is None: -+ if message_type == "websocket.send" and not self.transport.is_closing(): -+ message = cast(WebSocketSendEvent, message) -+ bytes_data = message.get("bytes") -+ text_data = message.get("text") -+ if text_data: -+ self.conn.send_text(text_data.encode()) -+ elif bytes_data: -+ self.conn.send_binary(bytes_data) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ -+ elif message_type == "websocket.close" and not self.transport.is_closing(): -+ message = cast(WebSocketCloseEvent, message) -+ code = message.get("code", 1000) -+ reason = message.get("reason", "") or "" -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) -+ self.conn.send_close(code, reason) -+ output = self.conn.data_to_send() -+ self.transport.writelines(output) -+ self.close_sent = True -+ self.transport.close() -+ else: -+ msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." -+ raise RuntimeError(msg % message_type) -+ elif self.initial_response is not None: -+ if message_type == "websocket.http.response.body": -+ message = cast(WebSocketResponseBodyEvent, message) -+ body = self.initial_response[2] + message["body"] -+ self.initial_response = self.initial_response[:2] + (body,) -+ if not message.get("more_body", False): -+ response = self.conn.reject(self.initial_response[0], body.decode()) -+ response.headers.update(self.initial_response[1]) -+ self.conn.send_response(response) -+ output = self.conn.data_to_send() -+ self.close_sent = True -+ self.transport.writelines(output) -+ self.transport.close() -+ else: -+ msg = "Expected ASGI message 'websocket.http.response.body' " "but got '%s'." -+ raise RuntimeError(msg % message_type) -+ -+ else: -+ msg = "Unexpected ASGI message '%s', after sending 'websocket.close'." -+ raise RuntimeError(msg % message_type) -+ -+ async def receive(self) -> ASGIReceiveEvent: -+ message = await self.queue.get() -+ if self.read_paused and self.queue.empty(): -+ self.read_paused = False -+ self.transport.resume_reading() -+ return message -diff --git a/uvicorn/server.py b/uvicorn/server.py -index f14026f16..2250e2dc7 100644 ---- a/uvicorn/server.py -+++ b/uvicorn/server.py -@@ -22,9 +22,10 @@ - from uvicorn.protocols.http.h11_impl import H11Protocol - from uvicorn.protocols.http.httptools_impl import HttpToolsProtocol - from uvicorn.protocols.websockets.websockets_impl import WebSocketProtocol -+ from uvicorn.protocols.websockets.websockets_sansio_impl import WebSocketSansIOProtocol - from uvicorn.protocols.websockets.wsproto_impl import WSProtocol - -- Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol] -+ Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol, WebSocketSansIOProtocol] - - HANDLED_SIGNALS = ( - signal.SIGINT, # Unix signal 2. Sent by Ctrl+C. - -From 7ee1e15a850d78754b757849886abb2011dd2e55 Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sat, 14 Dec 2024 17:54:55 +0100 -Subject: [PATCH 2/7] Add WebSocketsSansIOProtocol - ---- - tests/conftest.py | 2 +- - tests/middleware/test_logging.py | 1 - - tests/middleware/test_proxy_headers.py | 4 +- - tests/protocols/test_websocket.py | 35 +++--- - uvicorn/config.py | 2 +- - .../websockets/websockets_sansio_impl.py | 117 +++++++++++------- - uvicorn/server.py | 4 +- - 7 files changed, 96 insertions(+), 69 deletions(-) - -diff --git a/tests/conftest.py b/tests/conftest.py -index 84bda4dc2..7061a143b 100644 ---- a/tests/conftest.py -+++ b/tests/conftest.py -@@ -235,7 +235,7 @@ def unused_tcp_port() -> int: - ), - pytest.param("uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", id="websockets"), - pytest.param( -- "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", id="websockets-sansio" -+ "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketsSansIOProtocol", id="websockets-sansio" - ), - ] - ) -diff --git a/tests/middleware/test_logging.py b/tests/middleware/test_logging.py -index c8126f9e6..63d7daf83 100644 ---- a/tests/middleware/test_logging.py -+++ b/tests/middleware/test_logging.py -@@ -91,7 +91,6 @@ async def test_trace_logging_on_http_protocol(http_protocol_cls, caplog, logging - assert any(" - HTTP connection lost" in message for message in messages) - - --@pytest.mark.skip() - async def test_trace_logging_on_ws_protocol( - ws_protocol_cls: WSProtocol, - caplog: pytest.LogCaptureFixture, -diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py -index 4b5f195f6..62a51ab20 100644 ---- a/tests/middleware/test_proxy_headers.py -+++ b/tests/middleware/test_proxy_headers.py -@@ -5,8 +5,8 @@ - import httpx - import httpx._transports.asgi - import pytest --from websockets.asyncio.client import connect - -+import websockets.client - from tests.response import Response - from tests.utils import run_server - from uvicorn._types import ASGIReceiveCallable, ASGISendCallable, Scope -@@ -479,7 +479,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe - async with run_server(config): - url = f"ws://127.0.0.1:{unused_tcp_port}" - headers = {X_FORWARDED_FOR: "1.2.3.4", X_FORWARDED_PROTO: forwarded_proto} -- async with connect(url, additional_headers=headers) as websocket: -+ async with websockets.client.connect(url, extra_headers=headers) as websocket: - data = await websocket.recv() - assert data == expected - -diff --git a/tests/protocols/test_websocket.py b/tests/protocols/test_websocket.py -index 15ccfdd7d..8971a7d97 100644 ---- a/tests/protocols/test_websocket.py -+++ b/tests/protocols/test_websocket.py -@@ -601,20 +601,20 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable - await send_accept_task.wait() - disconnect_message = await receive() # type: ignore - -- response: httpx.Response | None = None -- - async def websocket_session(uri: str): -- nonlocal response - async with httpx.AsyncClient() as client: -- response = await client.get( -- f"http://127.0.0.1:{unused_tcp_port}", -- headers={ -- "upgrade": "websocket", -- "connection": "upgrade", -- "sec-websocket-version": "13", -- "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", -- }, -- ) -+ try: -+ await client.get( -+ f"http://127.0.0.1:{unused_tcp_port}", -+ headers={ -+ "upgrade": "websocket", -+ "connection": "upgrade", -+ "sec-websocket-version": "13", -+ "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", -+ }, -+ ) -+ except httpx.RemoteProtocolError: -+ pass # pragma: no cover - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -623,9 +623,6 @@ async def websocket_session(uri: str): - send_accept_task.set() - await asyncio.sleep(0.1) - -- assert response is not None -- assert response.status_code == 500, response.text -- assert response.text == "Internal Server Error" - assert disconnect_message == {"type": "websocket.disconnect", "code": 1006} - await task - -@@ -920,6 +917,9 @@ async def websocket_session(url: str): - async def test_server_reject_connection_with_invalid_msg( - ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int - ): -+ if ws_protocol_cls.__name__ == "WebSocketsSansIOProtocol": -+ pytest.skip("WebSocketsSansIOProtocol sends both start and body messages in one message.") -+ - async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): - assert scope["type"] == "websocket" - assert "extensions" in scope and "websocket.http.response" in scope["extensions"] -@@ -951,6 +951,9 @@ async def websocket_session(url: str): - async def test_server_reject_connection_with_missing_body( - ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int - ): -+ if ws_protocol_cls.__name__ == "WebSocketsSansIOProtocol": -+ pytest.skip("WebSocketsSansIOProtocol sends both start and body messages in one message.") -+ - async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): - assert scope["type"] == "websocket" - assert "extensions" in scope and "websocket.http.response" in scope["extensions"] -@@ -986,6 +989,8 @@ async def test_server_multiple_websocket_http_response_start_events( - The server should raise an exception if it sends multiple - websocket.http.response.start events. - """ -+ if ws_protocol_cls.__name__ == "WebSocketsSansIOProtocol": -+ pytest.skip("WebSocketsSansIOProtocol sends both start and body messages in one message.") - exception_message: str | None = None - - async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): -diff --git a/uvicorn/config.py b/uvicorn/config.py -index 3480b5392..187b94972 100644 ---- a/uvicorn/config.py -+++ b/uvicorn/config.py -@@ -46,7 +46,7 @@ - "auto": "uvicorn.protocols.websockets.auto:AutoWebSocketsProtocol", - "none": None, - "websockets": "uvicorn.protocols.websockets.websockets_impl:WebSocketProtocol", -- "websockets-sansio": "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketSansIOProtocol", -+ "websockets-sansio": "uvicorn.protocols.websockets.websockets_sansio_impl:WebSocketsSansIOProtocol", - "wsproto": "uvicorn.protocols.websockets.wsproto_impl:WSProtocol", - } - LIFESPAN: dict[LifespanType, str] = { -diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py -index 49e8a71a1..ea70236b2 100644 ---- a/uvicorn/protocols/websockets/websockets_sansio_impl.py -+++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py -@@ -7,6 +7,7 @@ - from typing import Any, Literal, cast - from urllib.parse import unquote - -+from websockets import InvalidState - from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory - from websockets.frames import Frame, Opcode - from websockets.http11 import Request -@@ -26,11 +27,17 @@ - ) - from uvicorn.config import Config - from uvicorn.logging import TRACE_LOG_LEVEL --from uvicorn.protocols.utils import get_local_addr, get_path_with_query_string, get_remote_addr, is_ssl -+from uvicorn.protocols.utils import ( -+ ClientDisconnected, -+ get_local_addr, -+ get_path_with_query_string, -+ get_remote_addr, -+ is_ssl, -+) - from uvicorn.server import ServerState - - --class WebSocketSansIOProtocol(asyncio.Protocol): -+class WebSocketsSansIOProtocol(asyncio.Protocol): - def __init__( - self, - config: Config, -@@ -96,12 +103,20 @@ def connection_made(self, transport: BaseTransport) -> None: - self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection made", prefix) - - def connection_lost(self, exc: Exception | None) -> None: -+ code = 1005 if self.handshake_complete else 1006 -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) - self.connections.remove(self) -+ - if self.logger.level <= TRACE_LOG_LEVEL: - prefix = "%s:%d - " % self.client if self.client else "" - self.logger.log(TRACE_LOG_LEVEL, "%sWebSocket connection lost", prefix) -- if self.handshake_initiated and not self.close_sent: -- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) -+ -+ self.handshake_complete = True -+ if exc is None: -+ self.transport.close() -+ -+ def eof_received(self) -> None: -+ pass - - def shutdown(self) -> None: - if not self.transport.is_closing(): -@@ -110,8 +125,8 @@ def shutdown(self) -> None: - self.close_sent = True - self.conn.send_close(1012) - output = self.conn.data_to_send() -- self.transport.writelines(output) -- elif self.handshake_initiated: -+ self.transport.write(b"".join(output)) -+ elif not self.handshake_initiated: - self.send_500_response() - self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) - self.transport.close() -@@ -152,7 +167,7 @@ def handle_connect(self, event: Request) -> None: - self.close_sent = True - self.conn.send_response(self.response) - output = self.conn.data_to_send() -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - self.transport.close() - return - -@@ -213,29 +228,29 @@ def send_receive_event_to_app(self) -> None: - - def handle_ping(self, event: Frame) -> None: - output = self.conn.data_to_send() -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - - def handle_close(self, event: Frame) -> None: -- if not self.close_sent and self.conn.close_rcvd and not self.transport.is_closing(): -+ if not self.close_sent and not self.transport.is_closing(): - disconnect_event: WebSocketDisconnectEvent = { - "type": "websocket.disconnect", -- "code": self.conn.close_rcvd.code, -- "reason": self.conn.close_rcvd.reason, -+ "code": self.conn.close_rcvd.code, # type: ignore[union-attr] -+ "reason": self.conn.close_rcvd.reason, # type: ignore[union-attr] - } - self.queue.put_nowait(disconnect_event) - output = self.conn.data_to_send() -- self.transport.writelines(output) -- self.close_sent = True -+ self.transport.write(b"".join(output)) - self.transport.close() - - def handle_parser_exception(self) -> None: - disconnect_event: WebSocketDisconnectEvent = { - "type": "websocket.disconnect", -- "code": self.conn.close_sent.code if self.conn.close_sent else 1006, -+ "code": self.conn.close_sent.code, # type: ignore[union-attr] -+ "reason": self.conn.close_sent.reason, # type: ignore[union-attr] - } - self.queue.put_nowait(disconnect_event) - output = self.conn.data_to_send() -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - self.close_sent = True - self.transport.close() - -@@ -245,10 +260,11 @@ def on_task_complete(self, task: asyncio.Task[None]) -> None: - async def run_asgi(self) -> None: - try: - result = await self.app(self.scope, self.receive, self.send) -+ except ClientDisconnected: -+ self.transport.close() - except BaseException: - self.logger.exception("Exception in ASGI application\n") -- if not self.handshake_complete: -- self.send_500_response() -+ self.send_500_response() - self.transport.close() - else: - if not self.handshake_complete: -@@ -262,10 +278,12 @@ async def run_asgi(self) -> None: - self.transport.close() - - def send_500_response(self) -> None: -+ if self.initial_response or self.handshake_complete: -+ return - response = self.conn.reject(500, "Internal Server Error") - self.conn.send_response(response) - output = self.conn.data_to_send() -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - - async def send(self, message: ASGISendEvent) -> None: - await self.writable.wait() -@@ -293,7 +311,7 @@ async def send(self, message: ASGISendEvent) -> None: - self.handshake_complete = True - self.conn.send_response(self.response) - output = self.conn.data_to_send() -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - - elif message_type == "websocket.close": - message = cast(WebSocketCloseEvent, message) -@@ -308,10 +326,12 @@ async def send(self, message: ASGISendEvent) -> None: - output = self.conn.data_to_send() - self.close_sent = True - self.handshake_complete = True -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - self.transport.close() -- elif message_type == "websocket.http.response.start": -+ elif message_type == "websocket.http.response.start" and self.initial_response is None: - message = cast(WebSocketResponseStartEvent, message) -+ if not (100 <= message["status"] < 600): -+ raise RuntimeError("Invalid HTTP status code '%d' in response." % message["status"]) - self.logger.info( - '%s - "WebSocket %s" %d', - self.scope["client"], -@@ -329,34 +349,36 @@ async def send(self, message: ASGISendEvent) -> None: - "or 'websocket.http.response.start' " - "but got '%s'." - ) -- print(message) - raise RuntimeError(msg % message_type) - - elif not self.close_sent and self.initial_response is None: -- if message_type == "websocket.send" and not self.transport.is_closing(): -- message = cast(WebSocketSendEvent, message) -- bytes_data = message.get("bytes") -- text_data = message.get("text") -- if text_data: -- self.conn.send_text(text_data.encode()) -- elif bytes_data: -- self.conn.send_binary(bytes_data) -- output = self.conn.data_to_send() -- self.transport.writelines(output) -- -- elif message_type == "websocket.close" and not self.transport.is_closing(): -- message = cast(WebSocketCloseEvent, message) -- code = message.get("code", 1000) -- reason = message.get("reason", "") or "" -- self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) -- self.conn.send_close(code, reason) -- output = self.conn.data_to_send() -- self.transport.writelines(output) -- self.close_sent = True -- self.transport.close() -- else: -- msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." -- raise RuntimeError(msg % message_type) -+ try: -+ if message_type == "websocket.send": -+ message = cast(WebSocketSendEvent, message) -+ bytes_data = message.get("bytes") -+ text_data = message.get("text") -+ if text_data: -+ self.conn.send_text(text_data.encode()) -+ elif bytes_data: -+ self.conn.send_binary(bytes_data) -+ output = self.conn.data_to_send() -+ self.transport.write(b"".join(output)) -+ -+ elif message_type == "websocket.close" and not self.transport.is_closing(): -+ message = cast(WebSocketCloseEvent, message) -+ code = message.get("code", 1000) -+ reason = message.get("reason", "") or "" -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": code}) -+ self.conn.send_close(code, reason) -+ output = self.conn.data_to_send() -+ self.transport.write(b"".join(output)) -+ self.close_sent = True -+ self.transport.close() -+ else: -+ msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." -+ raise RuntimeError(msg % message_type) -+ except InvalidState: -+ raise ClientDisconnected() - elif self.initial_response is not None: - if message_type == "websocket.http.response.body": - message = cast(WebSocketResponseBodyEvent, message) -@@ -365,10 +387,11 @@ async def send(self, message: ASGISendEvent) -> None: - if not message.get("more_body", False): - response = self.conn.reject(self.initial_response[0], body.decode()) - response.headers.update(self.initial_response[1]) -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) - self.conn.send_response(response) - output = self.conn.data_to_send() - self.close_sent = True -- self.transport.writelines(output) -+ self.transport.write(b"".join(output)) - self.transport.close() - else: - msg = "Expected ASGI message 'websocket.http.response.body' " "but got '%s'." -diff --git a/uvicorn/server.py b/uvicorn/server.py -index 2250e2dc7..e33716fd4 100644 ---- a/uvicorn/server.py -+++ b/uvicorn/server.py -@@ -22,10 +22,10 @@ - from uvicorn.protocols.http.h11_impl import H11Protocol - from uvicorn.protocols.http.httptools_impl import HttpToolsProtocol - from uvicorn.protocols.websockets.websockets_impl import WebSocketProtocol -- from uvicorn.protocols.websockets.websockets_sansio_impl import WebSocketSansIOProtocol -+ from uvicorn.protocols.websockets.websockets_sansio_impl import WebSocketsSansIOProtocol - from uvicorn.protocols.websockets.wsproto_impl import WSProtocol - -- Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol, WebSocketSansIOProtocol] -+ Protocols = Union[H11Protocol, HttpToolsProtocol, WSProtocol, WebSocketProtocol, WebSocketsSansIOProtocol] - - HANDLED_SIGNALS = ( - signal.SIGINT, # Unix signal 2. Sent by Ctrl+C. - -From 035e7c38e98dbdbe81eae19f63ee8e1bfa1d1e4c Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sat, 14 Dec 2024 17:55:28 +0100 -Subject: [PATCH 3/7] lint - ---- - tests/middleware/test_proxy_headers.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py -index 62a51ab20..d300c45f8 100644 ---- a/tests/middleware/test_proxy_headers.py -+++ b/tests/middleware/test_proxy_headers.py -@@ -5,8 +5,8 @@ - import httpx - import httpx._transports.asgi - import pytest -- - import websockets.client -+ - from tests.response import Response - from tests.utils import run_server - from uvicorn._types import ASGIReceiveCallable, ASGISendCallable, Scope - -From eac77b7d86edb6a2ebcf9e2f380db18bb46fe684 Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sat, 14 Dec 2024 17:57:33 +0100 -Subject: [PATCH 4/7] pin python versions - ---- - requirements.txt | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/requirements.txt b/requirements.txt -index fd2334d02..366a0963a 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -7,7 +7,8 @@ h11 @ git+https://github.com/python-hyper/h11.git@master - # Explicit optionals - a2wsgi==1.10.7 - wsproto==1.2.0 --websockets==14.1 -+websockets==13.1; python_version < '3.9' -+websockets==14.1; python_version >= '3.9' - - # Packaging - build==1.2.2.post1 - -From 032c00c5a13167deb638a1a5e13c9ccee091598a Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sun, 15 Dec 2024 13:18:34 +0100 -Subject: [PATCH 5/7] Update requirements.txt - ---- - requirements.txt | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/requirements.txt b/requirements.txt -index 366a0963a..b3a464c0b 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -7,8 +7,7 @@ h11 @ git+https://github.com/python-hyper/h11.git@master - # Explicit optionals - a2wsgi==1.10.7 - wsproto==1.2.0 --websockets==13.1; python_version < '3.9' --websockets==14.1; python_version >= '3.9' -+websockets==13.1 - - # Packaging - build==1.2.2.post1 - -From c523508d5b5959bba65ebe1da2b4d3550e3c6674 Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sun, 15 Dec 2024 14:27:48 +0100 -Subject: [PATCH 6/7] Add a bit more coverage - ---- - tests/protocols/test_websocket.py | 23 +++++++++---------- - .../websockets/websockets_sansio_impl.py | 20 +++++++--------- - 2 files changed, 19 insertions(+), 24 deletions(-) - -diff --git a/tests/protocols/test_websocket.py b/tests/protocols/test_websocket.py -index 8971a7d97..e7285449c 100644 ---- a/tests/protocols/test_websocket.py -+++ b/tests/protocols/test_websocket.py -@@ -7,6 +7,8 @@ - import httpx - import pytest - import websockets -+import websockets.asyncio -+import websockets.asyncio.client - import websockets.client - import websockets.exceptions - from typing_extensions import TypedDict -@@ -603,18 +605,15 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable - - async def websocket_session(uri: str): - async with httpx.AsyncClient() as client: -- try: -- await client.get( -- f"http://127.0.0.1:{unused_tcp_port}", -- headers={ -- "upgrade": "websocket", -- "connection": "upgrade", -- "sec-websocket-version": "13", -- "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", -- }, -- ) -- except httpx.RemoteProtocolError: -- pass # pragma: no cover -+ await client.get( -+ f"http://127.0.0.1:{unused_tcp_port}", -+ headers={ -+ "upgrade": "websocket", -+ "connection": "upgrade", -+ "sec-websocket-version": "13", -+ "sec-websocket-key": "dGhlIHNhbXBsZSBub25jZQ==", -+ }, -+ ) - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py -index ea70236b2..994af07e7 100644 ---- a/uvicorn/protocols/websockets/websockets_sansio_impl.py -+++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py -@@ -119,17 +119,14 @@ def eof_received(self) -> None: - pass - - def shutdown(self) -> None: -- if not self.transport.is_closing(): -- if self.handshake_complete: -- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) -- self.close_sent = True -- self.conn.send_close(1012) -- output = self.conn.data_to_send() -- self.transport.write(b"".join(output)) -- elif not self.handshake_initiated: -- self.send_500_response() -- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1006}) -- self.transport.close() -+ if self.handshake_complete: -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) -+ self.conn.send_close(1012) -+ output = self.conn.data_to_send() -+ self.transport.write(b"".join(output)) -+ else: -+ self.send_500_response() -+ self.transport.close() - - def data_received(self, data: bytes) -> None: - self.conn.receive_data(data) -@@ -161,7 +158,6 @@ def handle_connect(self, event: Request) -> None: - self.request = event - self.response = self.conn.accept(event) - self.handshake_initiated = True -- # if status_code is not 101 return response - if self.response.status_code != 101: - self.handshake_complete = True - self.close_sent = True - -From f774f2fcb04b3cfe0f3046cdd9298b04b55daf9a Mon Sep 17 00:00:00 2001 -From: Marcelo Trylesinski -Date: Sat, 19 Apr 2025 15:45:45 +0200 -Subject: [PATCH 7/7] Apply comments - ---- - tests/middleware/test_logging.py | 3 ++- - uvicorn/protocols/websockets/websockets_sansio_impl.py | 6 +++--- - 2 files changed, 5 insertions(+), 4 deletions(-) - -diff --git a/tests/middleware/test_logging.py b/tests/middleware/test_logging.py -index 63d7daf83..1b8b4fbb1 100644 ---- a/tests/middleware/test_logging.py -+++ b/tests/middleware/test_logging.py -@@ -10,6 +10,7 @@ - import pytest - import websockets - import websockets.client -+from websockets.protocol import State - - from tests.utils import run_server - from uvicorn import Config -@@ -108,7 +109,7 @@ async def websocket_app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISe - - async def open_connection(url: str): - async with websockets.client.connect(url) as websocket: -- return websocket.open -+ return websocket.state is State.OPEN - - config = Config( - app=websocket_app, -diff --git a/uvicorn/protocols/websockets/websockets_sansio_impl.py b/uvicorn/protocols/websockets/websockets_sansio_impl.py -index 994af07e7..b518c8407 100644 ---- a/uvicorn/protocols/websockets/websockets_sansio_impl.py -+++ b/uvicorn/protocols/websockets/websockets_sansio_impl.py -@@ -7,7 +7,7 @@ - from typing import Any, Literal, cast - from urllib.parse import unquote - --from websockets import InvalidState -+from websockets.exceptions import InvalidState - from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory - from websockets.frames import Frame, Opcode - from websockets.http11 import Request -@@ -371,7 +371,7 @@ async def send(self, message: ASGISendEvent) -> None: - self.close_sent = True - self.transport.close() - else: -- msg = "Expected ASGI message 'websocket.send' or 'websocket.close'," " but got '%s'." -+ msg = "Expected ASGI message 'websocket.send' or 'websocket.close', but got '%s'." - raise RuntimeError(msg % message_type) - except InvalidState: - raise ClientDisconnected() -@@ -390,7 +390,7 @@ async def send(self, message: ASGISendEvent) -> None: - self.transport.write(b"".join(output)) - self.transport.close() - else: -- msg = "Expected ASGI message 'websocket.http.response.body' " "but got '%s'." -+ msg = "Expected ASGI message 'websocket.http.response.body' but got '%s'." - raise RuntimeError(msg % message_type) - - else: diff --git a/user/uvicorn/2541_bump-wesockets-on-requirements.patch b/user/uvicorn/2541_bump-wesockets-on-requirements.patch deleted file mode 100644 index 6b9f671..0000000 --- a/user/uvicorn/2541_bump-wesockets-on-requirements.patch +++ /dev/null @@ -1,559 +0,0 @@ -diff --git a/requirements.txt b/requirements.txt -index e26e6b3..b16569f 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -7,7 +7,7 @@ h11 @ git+https://github.com/python-hyper/h11.git@master - # Explicit optionals - a2wsgi==1.10.7 - wsproto==1.2.0 --websockets==13.1 -+websockets==14.1 - - # Packaging - build==1.2.2.post1 -diff --git a/tests/middleware/test_proxy_headers.py b/tests/middleware/test_proxy_headers.py -index d300c45..4b5f195 100644 ---- a/tests/middleware/test_proxy_headers.py -+++ b/tests/middleware/test_proxy_headers.py -@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING - import httpx - import httpx._transports.asgi - import pytest --import websockets.client -+from websockets.asyncio.client import connect - - from tests.response import Response - from tests.utils import run_server -@@ -479,7 +479,7 @@ async def test_proxy_headers_websocket_x_forwarded_proto( - async with run_server(config): - url = f"ws://127.0.0.1:{unused_tcp_port}" - headers = {X_FORWARDED_FOR: "1.2.3.4", X_FORWARDED_PROTO: forwarded_proto} -- async with websockets.client.connect(url, extra_headers=headers) as websocket: -+ async with connect(url, additional_headers=headers) as websocket: - data = await websocket.recv() - assert data == expected - -diff --git a/uvicorn/protocols/websockets/websockets_impl.py b/uvicorn/protocols/websockets/websockets_impl.py -index cd6c54f..685d6b6 100644 ---- a/uvicorn/protocols/websockets/websockets_impl.py -+++ b/uvicorn/protocols/websockets/websockets_impl.py -@@ -13,8 +13,7 @@ from websockets.datastructures import Headers - from websockets.exceptions import ConnectionClosed - from websockets.extensions.base import ServerExtensionFactory - from websockets.extensions.permessage_deflate import ServerPerMessageDeflateFactory --from websockets.legacy.server import HTTPResponse --from websockets.server import WebSocketServerProtocol -+from websockets.legacy.server import HTTPResponse, WebSocketServerProtocol - from websockets.typing import Subprotocol - - from uvicorn._types import ( -diff --git a/uvicorn/protocols/websockets/wsproto_impl.py b/uvicorn/protocols/websockets/wsproto_impl.py -index 828afe5..5d84bff 100644 ---- a/uvicorn/protocols/websockets/wsproto_impl.py -+++ b/uvicorn/protocols/websockets/wsproto_impl.py -@@ -149,12 +149,13 @@ class WSProtocol(asyncio.Protocol): - self.writable.set() # pragma: full coverage - - def shutdown(self) -> None: -- if self.handshake_complete: -- self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) -- output = self.conn.send(wsproto.events.CloseConnection(code=1012)) -- self.transport.write(output) -- else: -- self.send_500_response() -+ if not self.response_started: -+ if self.handshake_complete: -+ self.queue.put_nowait({"type": "websocket.disconnect", "code": 1012}) -+ output = self.conn.send(wsproto.events.CloseConnection(code=1012)) -+ self.transport.write(output) -+ else: -+ self.send_500_response() - self.transport.close() - - def on_task_complete(self, task: asyncio.Task[None]) -> None: -@@ -221,13 +222,15 @@ class WSProtocol(asyncio.Protocol): - def send_500_response(self) -> None: - if self.response_started or self.handshake_complete: - return # we cannot send responses anymore -+ reject_data = b"Internal Server Error" - headers: list[tuple[bytes, bytes]] = [ - (b"content-type", b"text/plain; charset=utf-8"), -+ (b"content-length", str(len(reject_data)).encode()), - (b"connection", b"close"), - (b"content-length", b"21"), - ] - output = self.conn.send(wsproto.events.RejectConnection(status_code=500, headers=headers, has_body=True)) -- output += self.conn.send(wsproto.events.RejectData(data=b"Internal Server Error")) -+ output += self.conn.send(wsproto.events.RejectData(data=reject_data)) - self.transport.write(output) - - async def run_asgi(self) -> None: -diff --git a/tests/middleware/test_logging.py.orig b/tests/middleware/test_logging.py -index 1b8b4fbb108..a8a74ee8ca0 100644 ---- a/tests/middleware/test_logging.py.orig -+++ b/tests/middleware/test_logging.py -@@ -8,8 +8,7 @@ import typing - - import httpx - import pytest --import websockets --import websockets.client -+from websockets.asyncio.client import connect - from websockets.protocol import State - - from tests.utils import run_server -@@ -108,8 +107,8 @@ async def test_trace_logging_on_ws_protocol( - break - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.state is State.OPEN -+ async with connect(url): -+ return True - - config = Config( - app=websocket_app, -diff --git a/tests/protocols/test_websocket.py.orig b/tests/protocols/test_websocket.py -index 399769b6395..9971f4bbecd 100644 ---- a/tests/protocols/test_websocket.py.orig -+++ b/tests/protocols/test_websocket.py -@@ -11,6 +11,8 @@ import websockets.asyncio - import websockets.asyncio.client - import websockets.client - import websockets.exceptions -+from websockets.asyncio.client import ClientConnection, connect -+from websockets.exceptions import ConnectionClosed, ConnectionClosedError, InvalidHandshake, InvalidStatus - from websockets.extensions.permessage_deflate import ClientPerMessageDeflateFactory - from websockets.typing import Subprotocol - -@@ -126,8 +128,8 @@ async def test_accept_connection(ws_protocol_cls: WSProtocol, http_protocol_cls: - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.open -+ async with connect(url): -+ return True - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -142,7 +144,7 @@ async def test_shutdown(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProt - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config) as server: -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}"): -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}"): - # Attempt shutdown while connection is still open - await server.shutdown() - -@@ -156,8 +158,8 @@ async def test_supports_permessage_deflate_extension( - - async def open_connection(url: str): - extension_factories = [ClientPerMessageDeflateFactory()] -- async with websockets.client.connect(url, extensions=extension_factories) as websocket: -- return [extension.name for extension in websocket.extensions] -+ async with connect(url, extensions=extension_factories) as websocket: -+ return [extension.name for extension in websocket.protocol.extensions] - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -176,8 +178,8 @@ async def test_can_disable_permessage_deflate_extension( - # enable per-message deflate on the client, so that we can check the server - # won't support it when it's disabled. - extension_factories = [ClientPerMessageDeflateFactory()] -- async with websockets.client.connect(url, extensions=extension_factories) as websocket: -- return [extension.name for extension in websocket.extensions] -+ async with connect(url, extensions=extension_factories) as websocket: -+ return [extension.name for extension in websocket.protocol.extensions] - - config = Config( - app=App, -@@ -199,8 +201,8 @@ async def test_close_connection(ws_protocol_cls: WSProtocol, http_protocol_cls: - - async def open_connection(url: str): - try: -- await websockets.client.connect(url) -- except websockets.exceptions.InvalidHandshake: -+ await connect(url) -+ except InvalidHandshake: - return False - return True # pragma: no cover - -@@ -220,8 +222,8 @@ async def test_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProto - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url, extra_headers=[("username", "abraão")]) as websocket: -- return websocket.open -+ async with connect(url, additional_headers=[("username", "abraão")]): -+ return True - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -235,8 +237,9 @@ async def test_extra_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: HTT - await self.send({"type": "websocket.accept", "headers": [(b"extra", b"header")]}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.response_headers -+ async with connect(url) as websocket: -+ assert websocket.response -+ return websocket.response.headers - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -254,8 +257,8 @@ async def test_path_and_raw_path(ws_protocol_cls: WSProtocol, http_protocol_cls: - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.open -+ async with connect(url): -+ return True - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -272,7 +275,7 @@ async def test_send_text_data_to_client( - await self.send({"type": "websocket.send", "text": "123"}) - - async def get_data(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - return await websocket.recv() - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) -@@ -290,7 +293,7 @@ async def test_send_binary_data_to_client( - await self.send({"type": "websocket.send", "bytes": b"123"}) - - async def get_data(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - return await websocket.recv() - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) -@@ -309,7 +312,7 @@ async def test_send_and_close_connection( - await self.send({"type": "websocket.close"}) - - async def get_data(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - data = await websocket.recv() - is_open = True - try: -@@ -338,7 +341,7 @@ async def test_send_text_data_to_server( - await self.send({"type": "websocket.send", "text": _text}) - - async def send_text(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - await websocket.send("abc") - return await websocket.recv() - -@@ -361,7 +364,7 @@ async def test_send_binary_data_to_server( - await self.send({"type": "websocket.send", "bytes": _bytes}) - - async def send_text(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - await websocket.send(b"abc") - return await websocket.recv() - -@@ -383,7 +386,7 @@ async def test_send_after_protocol_close( - await self.send({"type": "websocket.send", "text": "123"}) - - async def get_data(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - data = await websocket.recv() - is_open = True - try: -@@ -403,14 +406,14 @@ async def test_missing_handshake(ws_protocol_cls: WSProtocol, http_protocol_cls: - async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): - pass - -- async def connect(url: str): -- await websockets.client.connect(url) -+ async def open_connection(url: str): -+ await connect(url) - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: -- await connect(f"ws://127.0.0.1:{unused_tcp_port}") -- assert exc_info.value.status_code == 500 -+ with pytest.raises(InvalidStatus) as exc_info: -+ await open_connection(f"ws://127.0.0.1:{unused_tcp_port}") -+ assert exc_info.value.response.status_code == 500 - - - async def test_send_before_handshake( -@@ -419,14 +422,14 @@ async def test_send_before_handshake( - async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): - await send({"type": "websocket.send", "text": "123"}) - -- async def connect(url: str): -- await websockets.client.connect(url) -+ async def open_connection(url: str): -+ await connect(url) - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: -- await connect(f"ws://127.0.0.1:{unused_tcp_port}") -- assert exc_info.value.status_code == 500 -+ with pytest.raises(InvalidStatus) as exc_info: -+ await open_connection(f"ws://127.0.0.1:{unused_tcp_port}") -+ assert exc_info.value.response.status_code == 500 - - - async def test_duplicate_handshake(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int): -@@ -436,10 +439,10 @@ async def test_duplicate_handshake(ws_protocol_cls: WSProtocol, http_protocol_cl - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -- with pytest.raises(websockets.exceptions.ConnectionClosed): -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -+ with pytest.raises(ConnectionClosed): - _ = await websocket.recv() -- assert websocket.close_code == 1006 -+ assert websocket.protocol.close_code == 1006 - - - async def test_asgi_return_value(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int): -@@ -454,10 +457,10 @@ async def test_asgi_return_value(ws_protocol_cls: WSProtocol, http_protocol_cls: - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -- with pytest.raises(websockets.exceptions.ConnectionClosed): -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -+ with pytest.raises(ConnectionClosed): - _ = await websocket.recv() -- assert websocket.close_code == 1006 -+ assert websocket.protocol.close_code == 1006 - - - @pytest.mark.parametrize("code", [None, 1000, 1001]) -@@ -489,13 +492,13 @@ async def test_app_close( - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: - await websocket.ping() - await websocket.send("abc") -- with pytest.raises(websockets.exceptions.ConnectionClosed): -+ with pytest.raises(ConnectionClosed): - await websocket.recv() -- assert websocket.close_code == (code or 1000) -- assert websocket.close_reason == (reason or "") -+ assert websocket.protocol.close_code == (code or 1000) -+ assert websocket.protocol.close_reason == (reason or "") - - - async def test_client_close(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTPProtocol, unused_tcp_port: int): -@@ -514,7 +517,7 @@ async def test_client_close(ws_protocol_cls: WSProtocol, http_protocol_cls: HTTP - break - - async def websocket_session(url: str): -- async with websockets.client.connect(url) as websocket: -+ async with connect(url) as websocket: - await websocket.ping() - await websocket.send("abc") - await websocket.close(code=1001, reason="custom reason") -@@ -551,7 +554,7 @@ async def test_client_connection_lost( - port=unused_tcp_port, - ) - async with run_server(config): -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: - websocket.transport.close() - await asyncio.sleep(0.1) - got_disconnect_event_before_shutdown = got_disconnect_event -@@ -579,7 +582,7 @@ async def test_client_connection_lost_on_send( - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): - url = f"ws://127.0.0.1:{unused_tcp_port}" -- async with websockets.client.connect(url): -+ async with connect(url): - await asyncio.sleep(0.1) - disconnect.set() - -@@ -638,11 +641,11 @@ async def test_send_close_on_server_shutdown( - disconnect_message = message - break - -- websocket: websockets.client.WebSocketClientProtocol | None = None -+ websocket: ClientConnection | None = None - - async def websocket_session(uri: str): - nonlocal websocket -- async with websockets.client.connect(uri) as ws_connection: -+ async with connect(uri) as ws_connection: - websocket = ws_connection - await server_shutdown_event.wait() - -@@ -672,9 +675,7 @@ async def test_subprotocols( - await self.send({"type": "websocket.accept", "subprotocol": subprotocol}) - - async def get_subprotocol(url: str): -- async with websockets.client.connect( -- url, subprotocols=[Subprotocol("proto1"), Subprotocol("proto2")] -- ) as websocket: -+ async with connect(url, subprotocols=[Subprotocol("proto1"), Subprotocol("proto2")]) as websocket: - return websocket.subprotocol - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) -@@ -684,7 +685,7 @@ async def test_subprotocols( - - - MAX_WS_BYTES = 1024 * 1024 * 16 --MAX_WS_BYTES_PLUS1 = MAX_WS_BYTES + 1 -+MAX_WS_BYTES_PLUS1 = MAX_WS_BYTES + 10 - - - @pytest.mark.parametrize( -@@ -727,15 +728,15 @@ async def test_send_binary_data_to_server_bigger_than_default_on_websockets( - port=unused_tcp_port, - ) - async with run_server(config): -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}", max_size=client_size_sent) as ws: -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}", max_size=client_size_sent) as ws: - await ws.send(b"\x01" * client_size_sent) - if expected_result == 0: - data = await ws.recv() - assert data == b"\x01" * client_size_sent - else: -- with pytest.raises(websockets.exceptions.ConnectionClosedError): -+ with pytest.raises(ConnectionClosedError): - await ws.recv() -- assert ws.close_code == expected_result -+ assert ws.protocol.close_code == expected_result - - - async def test_server_reject_connection( -@@ -760,10 +761,10 @@ async def test_server_reject_connection( - disconnected_message = await receive() - - async def websocket_session(url: str): -- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: -- async with websockets.client.connect(url): -+ with pytest.raises(InvalidStatus) as exc_info: -+ async with connect(url): - pass # pragma: no cover -- assert exc_info.value.status_code == 403 -+ assert exc_info.value.response.status_code == 403 - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -933,10 +934,10 @@ async def test_server_reject_connection_with_invalid_msg( - await send(message) - - async def websocket_session(url: str): -- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: -- async with websockets.client.connect(url): -+ with pytest.raises(InvalidStatus) as exc_info: -+ async with connect(url): - pass # pragma: no cover -- assert exc_info.value.status_code == 404 -+ assert exc_info.value.response.status_code == 404 - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -967,10 +968,10 @@ async def test_server_reject_connection_with_missing_body( - # no further message - - async def websocket_session(url: str): -- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: -- async with websockets.client.connect(url): -+ with pytest.raises(InvalidStatus) as exc_info: -+ async with connect(url): - pass # pragma: no cover -- assert exc_info.value.status_code == 404 -+ assert exc_info.value.response.status_code == 404 - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -1010,10 +1011,10 @@ async def test_server_multiple_websocket_http_response_start_events( - exception_message = str(exc) - - async def websocket_session(url: str): -- with pytest.raises(websockets.exceptions.InvalidStatusCode) as exc_info: -- async with websockets.client.connect(url): -+ with pytest.raises(InvalidStatus) as exc_info: -+ async with connect(url): - pass # pragma: no cover -- assert exc_info.value.status_code == 404 -+ assert exc_info.value.response.status_code == 404 - - config = Config(app=app, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -1049,7 +1050,7 @@ async def test_server_can_read_messages_in_buffer_after_close( - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -- async with websockets.client.connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: -+ async with connect(f"ws://127.0.0.1:{unused_tcp_port}") as websocket: - await websocket.send(b"abc") - await websocket.send(b"abc") - await websocket.send(b"abc") -@@ -1066,8 +1067,9 @@ async def test_default_server_headers( - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.response_headers -+ async with connect(url) as websocket: -+ assert websocket.response -+ return websocket.response.headers - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -1081,8 +1083,9 @@ async def test_no_server_headers(ws_protocol_cls: WSProtocol, http_protocol_cls: - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.response_headers -+ async with connect(url) as websocket: -+ assert websocket.response -+ return websocket.response.headers - - config = Config( - app=App, -@@ -1104,8 +1107,9 @@ async def test_no_date_header_on_wsproto(http_protocol_cls: HTTPProtocol, unused - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.response_headers -+ async with connect(url) as websocket: -+ assert websocket.response -+ return websocket.response.headers - - config = Config( - app=App, -@@ -1136,8 +1140,9 @@ async def test_multiple_server_header( - ) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.response_headers -+ async with connect(url) as websocket: -+ assert websocket.response -+ return websocket.response.headers - - config = Config(app=App, ws=ws_protocol_cls, http=http_protocol_cls, lifespan="off", port=unused_tcp_port) - async with run_server(config): -@@ -1172,8 +1177,8 @@ async def test_lifespan_state(ws_protocol_cls: WSProtocol, http_protocol_cls: HT - await self.send({"type": "websocket.accept"}) - - async def open_connection(url: str): -- async with websockets.client.connect(url) as websocket: -- return websocket.open -+ async with connect(url): -+ return True - - async def app_wrapper(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable): - if scope["type"] == "lifespan": diff --git a/user/uvicorn/APKBUILD b/user/uvicorn/APKBUILD deleted file mode 100644 index 62d0a4c..0000000 --- a/user/uvicorn/APKBUILD +++ /dev/null @@ -1,55 +0,0 @@ -maintainer="Michał Polański " -pkgname=uvicorn -pkgver=0.34.2 -pkgrel=0 -pkgdesc="Lightning-fast ASGI server" -url="https://www.uvicorn.org/" -license="BSD-3-Clause" -arch="noarch" -depends="py3-click py3-h11" -makedepends="py3-gpep517 py3-hatchling" -checkdepends=" - py3-a2wsgi - py3-dotenv - py3-httptools - py3-httpx - py3-pytest - py3-pytest-mock - py3-pytest-xdist - py3-trustme - py3-typing-extensions - py3-watchfiles - py3-websockets - py3-wsproto - py3-yaml - " -subpackages="$pkgname-pyc" -source="https://github.com/encode/uvicorn/archive/$pkgver/uvicorn-$pkgver.tar.gz - test_multiprocess.patch - 2540_add-websocketssansioprotocol.patch - 2541_bump-wesockets-on-requirements.patch - " - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -check() { - python3 -m venv --clear --without-pip --system-site-packages .testenv - .testenv/bin/python3 -m installer .dist/*.whl - .testenv/bin/python3 -m pytest -v -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/uvicorn-$pkgver-py3-none-any.whl -} - -sha512sums=" -e8d4dbf182a47431ab9485a8f1072b327c2adb97e4489dcad08835d2759241539971192781cffe4cbb12ff68e70b040e07ad60fe274aa1d62320ad0d63278e64 uvicorn-0.34.2.tar.gz -cfad91dd84f8974362f52d754d7a29f09d07927a46acaa0eb490b6115a5729d84d6df94fead10ccd4cce7f5ea376f1348b0f59daede661dd8373a3851c313c46 test_multiprocess.patch -a3850f030b936c219041266c9ff9050614a5ac6252ff56462c73f2a6114502da460684c10c86f0c5b5054677e89798602ee84cf39c132be6f8bf9946e41f1e79 2540_add-websocketssansioprotocol.patch -b4ef7e63f3fe9e3b499b5a57bb368fcde98c084f5cca42683188c1047d109bdac158e06eeb5a7fb3e61075a1918761c8b0a59a8f7856704bba9234222529de7d 2541_bump-wesockets-on-requirements.patch -" diff --git a/user/uvicorn/test_multiprocess.patch b/user/uvicorn/test_multiprocess.patch deleted file mode 100644 index 231526e..0000000 --- a/user/uvicorn/test_multiprocess.patch +++ /dev/null @@ -1,14 +0,0 @@ -Wait a bit longer, otherwise the workers might -not have time to finish restarting. - ---- a/tests/supervisors/test_multiprocess.py -+++ b/tests/supervisors/test_multiprocess.py -@@ -132,7 +132,7 @@ def test_multiprocess_sighup() -> None: - time.sleep(1) - pids = [p.pid for p in supervisor.processes] - supervisor.signal_queue.append(signal.SIGHUP) -- time.sleep(1) -+ time.sleep(3) - assert pids != [p.pid for p in supervisor.processes] - supervisor.signal_queue.append(signal.SIGINT) - supervisor.join_all() From 8e2f15f24414273094a961b65b6b1f85de7dbafa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Dec 2025 21:58:50 -0500 Subject: [PATCH 710/738] user/*: disable packages broken on armv7 --- user/papermc-plugin-essentialsx/APKBUILD | 3 ++- user/papermc-plugin-luckperms/APKBUILD | 3 ++- user/papermc-plugin-vault/APKBUILD | 3 ++- user/papermc-plugin-worldedit/APKBUILD | 3 ++- user/papermc-plugin-worldguard/APKBUILD | 3 ++- user/papermc/APKBUILD | 3 ++- user/rmfakecloud/APKBUILD | 3 ++- user/tandoor-recipes/APKBUILD | 3 ++- 8 files changed, 16 insertions(+), 8 deletions(-) diff --git a/user/papermc-plugin-essentialsx/APKBUILD b/user/papermc-plugin-essentialsx/APKBUILD index 17643a5..51459a5 100644 --- a/user/papermc-plugin-essentialsx/APKBUILD +++ b/user/papermc-plugin-essentialsx/APKBUILD @@ -6,7 +6,8 @@ _gittag=$pkgver pkgrel=0 pkgdesc="EssentialsX is the essential plugin suite for Minecraft servers, with over 130 commands for servers of all size and scale." # blocked by luckperms -#arch='noarch' +# armv7: blocked my openjdk21-jdk +#arch='noarch !armv7' url="https://essentialsx.net/" license="GPL-3.0" depends=" diff --git a/user/papermc-plugin-luckperms/APKBUILD b/user/papermc-plugin-luckperms/APKBUILD index d480f40..6b7a4e4 100644 --- a/user/papermc-plugin-luckperms/APKBUILD +++ b/user/papermc-plugin-luckperms/APKBUILD @@ -6,7 +6,8 @@ _gittag=0fef481d480737528491fc0b3b8487eb1612f955 pkgrel=0 pkgdesc="An advanced permissions plugin for Bukkit/Spigot, BungeeCord and Sponge." # dependency not available upstream anymore -#arch='noarch' +# armv7: blocked by openjdk21-jdk +#arch='noarch !armv7' url="https://github.com/lucko/LuckPerms" license="MIT" depends="papermc>=1.8.8" diff --git a/user/papermc-plugin-vault/APKBUILD b/user/papermc-plugin-vault/APKBUILD index dbb0be1..21897eb 100644 --- a/user/papermc-plugin-vault/APKBUILD +++ b/user/papermc-plugin-vault/APKBUILD @@ -4,7 +4,8 @@ pkgname=papermc-plugin-vault pkgver=1.7.3 pkgrel=0 pkgdesc="Vault of common APIs for Bukkit Plugins" -arch='noarch' +# armv7: blocked by openjdk21-jdk +arch='noarch !armv7' url="https://github.com/MilkBowl/Vault" license="MIT" depends="papermc>=1.8.8" diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD index 6949ab5..3962797 100644 --- a/user/papermc-plugin-worldedit/APKBUILD +++ b/user/papermc-plugin-worldedit/APKBUILD @@ -5,7 +5,8 @@ pkgver=7.3.13 _pkgver=$pkgver pkgrel=0 pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" -arch='noarch !aarch64' +# armv7: blocked by openjdk21-jdk +arch='noarch !armv7' url="https://github.com/EngineHub/WorldEdit" license="GPL-3.0" depends="papermc>=1.13.2" diff --git a/user/papermc-plugin-worldguard/APKBUILD b/user/papermc-plugin-worldguard/APKBUILD index 4fb9957..ba13b1d 100644 --- a/user/papermc-plugin-worldguard/APKBUILD +++ b/user/papermc-plugin-worldguard/APKBUILD @@ -5,7 +5,8 @@ pkgver=7.0.13_beta1 _gittag=2f13ae0444409376feb6c7674591142fe854e12e pkgrel=0 pkgdesc="WorldGuard lets you and players guard areas of land against griefers and undesirables" -arch='noarch' +# armv7: blocked by openjdk21-jdk +arch='noarch !armv7' url="https://github.com/EngineHub/WorldGuard" license="GPL-3.0" depends="papermc>=1.17.0" diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD index c93d3a2..f6522f5 100644 --- a/user/papermc/APKBUILD +++ b/user/papermc/APKBUILD @@ -5,7 +5,8 @@ pkgver=1.21.4 _gittag=${pkgver/.0} pkgrel=0 pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" -arch='noarch' +# armv7: blocked by openjdk21-jdk +arch='noarch !armv7' url="https://papermc.io/" license='custom' depends='openjdk21-jdk screen sudo bash gawk sed netcat-openbsd' diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index d9402ab..e37b955 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -7,7 +7,8 @@ _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" url="https://github.com/ddvk/rmfakecloud" -arch="all" +# armv7: oom +arch="all !armv7" license="AGPL-3.0-only" makedepends="go yarn" options="chmod-clean net" diff --git a/user/tandoor-recipes/APKBUILD b/user/tandoor-recipes/APKBUILD index 75ecd85..8a680e0 100644 --- a/user/tandoor-recipes/APKBUILD +++ b/user/tandoor-recipes/APKBUILD @@ -4,7 +4,8 @@ pkgname=tandoor-recipes pkgver=1.5.12 pkgrel=1 pkgdesc="Application for managing recipes, planning meals, building shopping lists, etc." -arch="noarch" +# armv7: oom +arch="noarch !armv7" url="https://github.com/TandoorRecipes/recipes" license="AGPL-3.0-only" depends=" From 6fceb422547974a56a957efdbea2958e1417b8b4 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Dec 2025 22:03:51 -0500 Subject: [PATCH 711/738] user/papermc-plugin-worldedit: disable due to missing dependencies --- user/papermc-plugin-worldedit/APKBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/user/papermc-plugin-worldedit/APKBUILD b/user/papermc-plugin-worldedit/APKBUILD index 3962797..f487664 100644 --- a/user/papermc-plugin-worldedit/APKBUILD +++ b/user/papermc-plugin-worldedit/APKBUILD @@ -5,8 +5,9 @@ pkgver=7.3.13 _pkgver=$pkgver pkgrel=0 pkgdesc="WorldEdit is an easy-to-use in-game Minecraft map editor" +# missingupstream dependencies # armv7: blocked by openjdk21-jdk -arch='noarch !armv7' +#arch='noarch !armv7' url="https://github.com/EngineHub/WorldEdit" license="GPL-3.0" depends="papermc>=1.13.2" From 7ce80a2dd7349a34518c17f9fb85b6d36793eb49 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 1 Dec 2025 22:18:41 -0500 Subject: [PATCH 712/738] ci: add armv7 builder --- .forgejo/workflows/build-armv7.yaml | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .forgejo/workflows/build-armv7.yaml diff --git a/.forgejo/workflows/build-armv7.yaml b/.forgejo/workflows/build-armv7.yaml new file mode 100644 index 0000000..aaf4029 --- /dev/null +++ b/.forgejo/workflows/build-armv7.yaml @@ -0,0 +1,54 @@ +on: + pull_request: + types: [ assigned, opened, synchronize, reopened ] + +jobs: + build-armv7: + runs-on: armv7 + container: + image: alpinelinux/alpine-gitlab-ci:latest + env: + CI_PROJECT_DIR: ${{ github.workspace }} + CI_DEBUG_BUILD: ${{ runner.debug }} + CI_MERGE_REQUEST_PROJECT_URL: ${{ github.server_url }}/${{ github.repository }} + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} + steps: + - name: Environment setup + run: | + doas apk upgrade -a + doas apk add nodejs git patch curl + cd /etc/apk/keys + doas curl -JO https://ayakael.net/api/packages/forge/alpine/key + - name: Repo pull + uses: actions/checkout@v4 + with: + fetch-depth: 500 + - name: Package build + run: | + ${{ github.workspace }}/.forgejo/bin/build.sh + touch packages/dummy + - name: Package upload + uses: actions/upload-artifact@v3 + with: + name: package + path: packages + + deploy-armv7: + needs: [build-armv7] + runs-on: armv7 + container: + image: alpine:latest + env: + CI_ALPINE_REPO: 'https://ayakael.net/api/packages/forge/alpine' + CI_MERGE_REQUEST_TARGET_BRANCH_NAME: ${{ github.base_ref }} + FORGE_REPO_TOKEN: ${{ secrets.FORGE_REPO_TOKEN }} + FORGE_REPO_USER: ${{ vars.FORGE_REPO_USER }} + steps: + - name: Setting up environment + run: apk add nodejs curl findutils git gawk + - name: Repo pull + uses: actions/checkout@v4 + - name: Package download + uses: actions/download-artifact@v3 + - name: Package deployment + run: ${{ github.workspace }}/.forgejo/bin/deploy.sh From 16a4ebc1e48dcbe86bee604769387b5565f2ec46 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 8 Dec 2025 09:15:34 -0500 Subject: [PATCH 713/738] ci: track v3.23, drop v3.19 --- .forgejo/workflows/check-community.yml | 6 ++-- .forgejo/workflows/check-main.yml | 43 +++++++++++++------------- .forgejo/workflows/check-pmos.yml | 2 +- .forgejo/workflows/check-testing.yml | 2 +- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index fe1d9ad..a5e81c1 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -25,13 +25,13 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-community-3.22: - name: Check community(3.22) repo + check-community-3.23: + name: Check community(3.23) repo runs-on: aarch64 container: image: alpine:latest env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.23/community ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 fix_only: all -git-annex diff --git a/.forgejo/workflows/check-main.yml b/.forgejo/workflows/check-main.yml index 6730130..276feb5 100644 --- a/.forgejo/workflows/check-main.yml +++ b/.forgejo/workflows/check-main.yml @@ -25,6 +25,27 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-main-3.23: + name: Check main(3.23) repo + runs-on: aarch64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.23/main + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh check-main-3.22: name: Check main(3.22) repo runs-on: aarch64 @@ -88,24 +109,4 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-main-3.19: - name: Check main(3.19) repo - runs-on: aarch64 - container: - image: alpine:latest - env: - downstream: https://dl-cdn.alpinelinux.org/alpine/v3.19/main - ISSUE_TOKEN: ${{ secrets.issue_token }} - LABEL_NUMBER: 13 - fix_only: all - steps: - - name: Environment setup - run: apk add grep coreutils gawk curl wget bash nodejs git jq sed - - name: Get scripts - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - name: Check out-of-date packages - run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - - name: Create issues - run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index 0785667..119383b 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -5,7 +5,7 @@ on: - cron: '0 5 * * *' jobs: - check-community-pmos: + check-pmos-edge: name: Check pmos(edge) repo runs-on: aarch64 container: diff --git a/.forgejo/workflows/check-testing.yml b/.forgejo/workflows/check-testing.yml index a778500..71ad18e 100644 --- a/.forgejo/workflows/check-testing.yml +++ b/.forgejo/workflows/check-testing.yml @@ -5,7 +5,7 @@ on: - cron: '0 5 * * *' jobs: - check-community: + check-testing: name: Check testing repo runs-on: aarch64 container: From cacd6ba22bf06bdf7539edfa954e60942fb08fbc Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 8 Dec 2025 09:25:21 -0500 Subject: [PATCH 714/738] ci: add special rules for tracking dotnet --- .forgejo/bin/check_ver.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index d0a9bc0..aa2665a 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -145,6 +145,12 @@ for pkg in $owned_by_you; do upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1) upstream_version=${upstream_version/-*} ;; + dotnet*-sdk|dotnet*-stage0) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/141853" | jq -r ".stable_versions.[] | match(\"${downstream_version::-2}.*\").string" | head -n 1) + ;; + dotnet*-runtime) + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/220385" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n 1) + ;; # removes last bit in github tag from usbboot release, as not needed raspberrypi-usbboot) curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1 | sed 's|-.*||';; *) From 8791fcb06c90423a6c887f8c25282a76fcbe23ef Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 8 Dec 2025 11:57:42 -0500 Subject: [PATCH 715/738] ci: track arm-trusted-firmware LTS on edge correctly --- .forgejo/bin/check_ver.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index aa2665a..8c3d5bb 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -126,8 +126,14 @@ for pkg in $owned_by_you; do pkg="$pkg(${upstream_version/.*})" fi ;; - # we want to track LTS rather than latest - arm-trusted-firmware) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1);; + # we want to track LTS (even releases) rather than latest + arm-trusted-firmware) + if [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] || [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]]; then + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) + else + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[] | select(test("^[0-9]+\\.[0-9]+\\.[0-9]+$")) | select(split(".") | .[1] | tonumber | . % 2 == 0)' | head -n1) + fi + ;; # track linux-pine64-pinenote against latest linux-pine64-pinenote) upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/315000" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) @@ -155,7 +161,7 @@ for pkg in $owned_by_you; do raspberrypi-usbboot) curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1 | sed 's|-.*||';; *) - if [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]] && [[ "$minor_only" != *-$pkg* ]] then + if [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]] && [[ "$minor_only" != *-$pkg* ]]; then # continues when package version scheme is not semantic, but minor_only or fix_only is set if ! is_semantic $downstream_version; then echo "$pkg is not semantic, and minor_only is set" From 7be7e19fc9d8ae4754c685fb830bdc8ef5c837fb Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Dec 2025 09:57:27 -0500 Subject: [PATCH 716/738] ci: check_ver can now exclude packages from skip_package when set as all --- .forgejo/bin/check_ver.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index 8c3d5bb..ee9ed3c 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -20,7 +20,7 @@ # # optional env variables # ALL_PACKAGES: when true, ignore is package is owned by me -# skip_package: array of packages to skip +# skip_package: array of packages to skip, place a - in front of package name to not exclude it # add_package: array of additional packages to check # @@ -63,7 +63,7 @@ for pkg in $owned_by_you; do downstream_version=${downstream_version/-*} # skip package if in $skip_package array - if [[ "$skip_package" == *$pkg* ]]; then + if [[ "$skip_package" == *all* || "$skip_package" == *$pkg* ]] && [[ "$skip_package" != *-$pkg* ]]; then echo "$pkg skipped" continue fi From 273730b1b9a7ff799e6e8207073f46b7adaa4815 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 11 Dec 2025 09:58:38 -0500 Subject: [PATCH 717/738] ci: track dotnet8 and 9 on previous releases of Alpine to backport security fixes --- .forgejo/workflows/check-community.yml | 67 ++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index a5e81c1..9c96c47 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -47,3 +47,70 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-community-3.22: + name: Check community(3.22) repo + runs-on: aarch64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.22/community + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + skip_package: 'all -dotnet8-runtime -dotnet9-runtime' + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-community-3.21: + name: Check community(3.21) repo + runs-on: aarch64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.21/community + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + skip_package: 'all -dotnet8-runtime -dotnet9-runtime' + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-community-3.20: + name: Check community(3.20) repo + runs-on: aarch64 + container: + image: alpine:latest + env: + downstream: https://dl-cdn.alpinelinux.org/alpine/v3.20/community + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 13 + skip_package: 'all -dotnet8-runtime' + fix_only: all + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + From 55135b73b1338d78e9b61991577d2f59a29e0b83 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 13:10:24 -0500 Subject: [PATCH 718/738] user/rmfakecloud: upgrade to 0.0.27 --- user/rmfakecloud/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/rmfakecloud/APKBUILD b/user/rmfakecloud/APKBUILD index e37b955..d4ecc74 100644 --- a/user/rmfakecloud/APKBUILD +++ b/user/rmfakecloud/APKBUILD @@ -2,7 +2,7 @@ # Contributor: Antoine Martin (ayakael) pkgname=rmfakecloud -pkgver=0.0.24 +pkgver=0.0.27 _gittag=v$pkgver pkgrel=0 pkgdesc="A selfhosted cloud for the Remarkable Tablet" @@ -38,7 +38,7 @@ package() { install -Dm755 "$srcdir"/rmfakecloud.openrc "$pkgdir"/etc/init.d/rmfakecloud } sha512sums=" -c0c96cb9168b8152da3842fac095a6bd33e74b5f7a5cefe72e44853f4059c966336e98cd4c62235f7a2fe625acdd93452f718c19a1bf65f5dd7dbd8bb5cd1f8c rmfakecloud-0.0.24.tar.gz +b215295c8779f9820e9751e5cbfb8804d6cdeb0d71ffaa60d46fd803760e63227352f55a8b5a2e75d990b20a6a19c43a4ffaa03a1857e6fb37990a8b191a3ea2 rmfakecloud-0.0.27.tar.gz d5677cef282085cd6642a034dd258ffa294862aeb0ce81d6485a524a15564849bc4eb90a9d1fa4dbcf4eab69dcd893302aa06493fc8fad74d69200c2bdf246c0 rmfakecloud.conf 891d0945886796132f951293e081046334857563b4ebae28a3aa5b6bc37768767c49ce102de645ed8340af2518de606be8bf6ecafeb6d189dd937970aa3e6498 rmfakecloud.openrc " From ed788403aa5a00c175bc766e7c076cf3e553b965 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 13:24:39 -0500 Subject: [PATCH 719/738] ci: run lint on x86_64 --- .forgejo/workflows/lint.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/lint.yaml b/.forgejo/workflows/lint.yaml index ec79090..743cefc 100644 --- a/.forgejo/workflows/lint.yaml +++ b/.forgejo/workflows/lint.yaml @@ -5,7 +5,7 @@ on: jobs: lint: run-name: lint - runs-on: aarch64 + runs-on: x86_64 container: image: alpinelinux/apkbuild-lint-tools:latest env: From 35e7f126cee86a264ab50bb1dc53e99106025985 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 14:41:04 -0500 Subject: [PATCH 720/738] user/kb: upgrade to 0.1.8 --- user/kb/APKBUILD | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/user/kb/APKBUILD b/user/kb/APKBUILD index a8f9c74..db1d678 100644 --- a/user/kb/APKBUILD +++ b/user/kb/APKBUILD @@ -1,9 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=kb -_pkgreal=kb-manager -pkgver=0.1.7 -pkgrel=2 +pkgver=0.1.8 +pkgrel=0 pkgdesc="A command line minimalist knowledge base manager" arch="noarch" url="https://github.com/gnebbia/kb" @@ -11,9 +10,8 @@ license="GPL-3.0-only" depends="py3-attrs py3-colored py3-gitpython py3-toml" makedepends="py3-setuptools py3-gpep517 py3-wheel" checkdepends="py3-pytest-cov" -source="https://files.pythonhosted.org/packages/source/k/kb-manager/kb-manager-$pkgver.tar.gz" +source="$pkgname-$pkgver.tar.gz::https://github.com/gnebbia/kb/archive/refs/tags/v$pkgver.tar.gz" subpackages="$pkgname-pyc" -builddir="$srcdir"/$_pkgreal-$pkgver build() { gpep517 build-wheel \ @@ -30,5 +28,5 @@ package() { .dist/*.whl } sha512sums=" -f0dff69a5e95339ea22d0a9d1260473f7b0b6ace184936896e164172aecb77672e9e0a228159abc95e50f30de2ec9ca5185ffbd825dce87edfec267bc56c75dc kb-manager-0.1.7.tar.gz +95fab9b5baa728795a6ce1e126fe90dd599528bc13f2274c5484dc43bdbca8fd5807e8ed4ec4e9ffa8382c5ec71662022d792e8ae941bd1629ed47c72d87d7a2 kb-0.1.8.tar.gz " From ac2f1855dba851f5c43a7ac7d5dda2ab738459a4 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 14:49:59 -0500 Subject: [PATCH 721/738] user/calibre-web: upgrade to 0.6.25 --- {unmaintained => user}/calibre-web/APKBUILD | 23 ++++++++++--------- .../calibre-web/calibre-web.conf | 0 .../calibre-web/calibre-web.initd | 0 .../calibre-web/calibre-web.service | 0 .../calibre-web/calibre-web.sysusers | 0 .../calibre-web/calibre-web.tmpfiles | 0 6 files changed, 12 insertions(+), 11 deletions(-) rename {unmaintained => user}/calibre-web/APKBUILD (82%) rename {unmaintained => user}/calibre-web/calibre-web.conf (100%) rename {unmaintained => user}/calibre-web/calibre-web.initd (100%) rename {unmaintained => user}/calibre-web/calibre-web.service (100%) rename {unmaintained => user}/calibre-web/calibre-web.sysusers (100%) rename {unmaintained => user}/calibre-web/calibre-web.tmpfiles (100%) diff --git a/unmaintained/calibre-web/APKBUILD b/user/calibre-web/APKBUILD similarity index 82% rename from unmaintained/calibre-web/APKBUILD rename to user/calibre-web/APKBUILD index df1b79a..37f5ea0 100644 --- a/unmaintained/calibre-web/APKBUILD +++ b/user/calibre-web/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Antoine Martin (ayakael) # Maintainer: Antoine Martin (ayakael) pkgname=calibre-web -pkgver=0.6.21 -pkgrel=1 +pkgver=0.6.25 +pkgrel=0 pkgdesc="Web app for browsing, reading and downloading eBooks stored in a Calibre database" arch='noarch' url="https://github.com/janeczku/calibre-web" @@ -10,26 +10,27 @@ license='GPL-3.0-only' depends=" py3-apscheduler py3-babel - py3-backports_abc - py3-blinker + py3-bleach py3-chardet + py3-cryptography py3-flask-babel - py3-flask-login py3-flask-limiter py3-flask-principal py3-flask-wtf - py3-goodreads - py3-levenshtein - py3-iso639 + py3-flask-httpauth py3-lxml - py3-pypdf2 + py3-magic + py3-netifaces + py3-pypdf + py3-pycountry + py3-regex py3-requests py3-sqlalchemy py3-tornado py3-tz py3-unidecode + py3-urllib3 py3-wand - py3-werkzeug " source=" $pkgname-$pkgver.tar.gz::https://github.com/janeczku/calibre-web/archive/$pkgver.tar.gz @@ -56,7 +57,7 @@ package() { install -D -m 644 "$srcdir"/calibre-web.conf "$pkgdir"/etc/conf.d/calibre-web } sha512sums=" -d2f07eec0b6c9f65e68ae0b72fddd14444eb8be8b0fee997ec7caaa1feebb8a26603844752347547becde501669af5bce69e9eab466a28fd4b10624b65c9afcf calibre-web-0.6.21.tar.gz +878d057613b7f89e57ad536c415bb4dc346d5f8c4ca2660517b68c70c4eefa5358317fe0e917738d468cb003358a0341411155289d952b1aa6cd4a022a84c8f0 calibre-web-0.6.25.tar.gz 4aba825eb12f44eb0912cc6981b46bec9b77ad114627564c9c7585862a099c7d1ff8deec5f15d047319805e2b9a3e2d128b2d1292dd92293a7e72359009a480f calibre-web.conf 62859a8a304216dc0dbfb7f2e8144a50d348c6621f5b292c08aa97a872ada67b52d36b567546fd0f4c439dbefe0bbe0e4fb1e1affbe507278b4a8d36ed3fa2a9 calibre-web.initd " diff --git a/unmaintained/calibre-web/calibre-web.conf b/user/calibre-web/calibre-web.conf similarity index 100% rename from unmaintained/calibre-web/calibre-web.conf rename to user/calibre-web/calibre-web.conf diff --git a/unmaintained/calibre-web/calibre-web.initd b/user/calibre-web/calibre-web.initd similarity index 100% rename from unmaintained/calibre-web/calibre-web.initd rename to user/calibre-web/calibre-web.initd diff --git a/unmaintained/calibre-web/calibre-web.service b/user/calibre-web/calibre-web.service similarity index 100% rename from unmaintained/calibre-web/calibre-web.service rename to user/calibre-web/calibre-web.service diff --git a/unmaintained/calibre-web/calibre-web.sysusers b/user/calibre-web/calibre-web.sysusers similarity index 100% rename from unmaintained/calibre-web/calibre-web.sysusers rename to user/calibre-web/calibre-web.sysusers diff --git a/unmaintained/calibre-web/calibre-web.tmpfiles b/user/calibre-web/calibre-web.tmpfiles similarity index 100% rename from unmaintained/calibre-web/calibre-web.tmpfiles rename to user/calibre-web/calibre-web.tmpfiles From 2e181afd1971ad35af51ed6ac45023c2d81c55bb Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 14:50:26 -0500 Subject: [PATCH 722/738] backports/py3-flask-httpauth: backport for calibre-web --- backports/py3-flask-httpauth/APKBUILD | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 backports/py3-flask-httpauth/APKBUILD diff --git a/backports/py3-flask-httpauth/APKBUILD b/backports/py3-flask-httpauth/APKBUILD new file mode 100644 index 0000000..7cbc2de --- /dev/null +++ b/backports/py3-flask-httpauth/APKBUILD @@ -0,0 +1,39 @@ +# Contributor: Fabian Affolter +# Maintainer: Fabian Affolter +pkgname=py3-flask-httpauth +pkgver=4.8.0 +pkgrel=3 +pkgdesc="Basic and Digest HTTP authentication for Flask routes" +url="https://pypi.org/project/Flask-HTTPAuth" +arch="noarch" +license="MIT" +depends="py3-flask python3" +makedepends="py3-gpep517 py3-setuptools py3-wheel" +checkdepends="py3-pytest py3-pytest-asyncio py3-asgiref" +subpackages="$pkgname-pyc" +source="https://files.pythonhosted.org/packages/source/F/Flask-HTTPAuth/Flask-HTTPAuth-$pkgver.tar.gz" +builddir="$srcdir"/Flask-HTTPAuth-$pkgver + +replaces="py-flask-httpauth" # Backwards compatibility +provides="py-flask-httpauth=$pkgver-r$pkgrel" # Backwards compatibility + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + .testenv/bin/python3 -m installer .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + python3 -m installer -d "$pkgdir" \ + .dist/flask_httpauth*.whl +} + +sha512sums=" +15878f45faf6bdde43d7b588539b044d621ba1ba590880e3d0a3bccf4e9bd04b898b3372775e99577b7e7955c4b6d2d7cc80df19ba30415c6b7c1d3183b7e5f4 Flask-HTTPAuth-4.8.0.tar.gz +" From 7ef8cfa070214a5ad293355fe6dbfb31005108ed Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 14:50:37 -0500 Subject: [PATCH 723/738] backports/py3-flask-limiter: backport for calibre-web --- backports/py3-flask-limiter/APKBUILD | 55 +++++++++++++++++++ .../our-std-is-good-enough.patch | 22 ++++++++ 2 files changed, 77 insertions(+) create mode 100644 backports/py3-flask-limiter/APKBUILD create mode 100644 backports/py3-flask-limiter/our-std-is-good-enough.patch diff --git a/backports/py3-flask-limiter/APKBUILD b/backports/py3-flask-limiter/APKBUILD new file mode 100644 index 0000000..cd15f22 --- /dev/null +++ b/backports/py3-flask-limiter/APKBUILD @@ -0,0 +1,55 @@ +# Contributor: lauren n. liberda +maintainer="lauren n. liberda " +pkgname=py3-flask-limiter +pkgver=3.10.1 +pkgrel=0 +pkgdesc="Rate Limiting extension for Flask" +url="https://github.com/alisaifee/flask-limiter" +arch="noarch" +license="MIT" +depends=" + py3-flask + py3-limits + py3-ordered-set + py3-rich + python3 + " +makedepends="py3-setuptools py3-gpep517" +checkdepends=" + py3-flask-restful + py3-flask-restx + py3-limits-mongodb + py3-limits-redis + py3-pytest + py3-pytest-cov + " +subpackages="$pkgname-pyc" +source=" + https://github.com/alisaifee/flask-limiter/archive/refs/tags/$pkgver/flask-limiter-$pkgver.tar.gz + + our-std-is-good-enough.patch + " +builddir="$srcdir/flask-limiter-$pkgver" +options="!check" # tests depend on unpackaged modules + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +a0d3af6f93d4283309d6df46ddb7fed4c358bbc712c2bd9e6897362c6d086c395cb9587c3d9da283ad757b574fd8c09d909f3c4b76d02ae8aade3e61dbea6aa0 flask-limiter-3.10.1.tar.gz +1b90e9134076cda249695d5ea741db9d205a2ae452c7d6edfe01eb37a221ce6f64b0e8ddcdbbee9b0e0fb16a28e5eabf14f1c1e41e965c7e3b93ea4f42caf553 our-std-is-good-enough.patch +" diff --git a/backports/py3-flask-limiter/our-std-is-good-enough.patch b/backports/py3-flask-limiter/our-std-is-good-enough.patch new file mode 100644 index 0000000..664143f --- /dev/null +++ b/backports/py3-flask-limiter/our-std-is-good-enough.patch @@ -0,0 +1,22 @@ +--- ./flask_limiter/typing.py.orig ++++ ./flask_limiter/typing.py +@@ -11,7 +11,7 @@ + cast, + ) + +-from typing_extensions import ParamSpec ++from typing import ParamSpec + + R = TypeVar("R") + P = ParamSpec("P") +--- ./flask_limiter/commands.py.orig ++++ ./flask_limiter/commands.py +@@ -14,7 +14,7 @@ + from rich.table import Table + from rich.theme import Theme + from rich.tree import Tree +-from typing_extensions import TypedDict ++from typing import TypedDict + from werkzeug.exceptions import MethodNotAllowed, NotFound + from werkzeug.routing import Rule + From a7a531a637a413f7c5d8838c694e690c6d4feded Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 14:52:18 -0500 Subject: [PATCH 724/738] user/scantopl: upgrade to 1.0.1 --- user/scantopl/APKBUILD | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/user/scantopl/APKBUILD b/user/scantopl/APKBUILD index dea4f1e..a68b668 100644 --- a/user/scantopl/APKBUILD +++ b/user/scantopl/APKBUILD @@ -1,8 +1,7 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=scantopl -pkgver=1.0.0 +pkgver=1.0.1 pkgrel=0 pkgdesc="Automatically send scanservjs scanned document to paperless-ng" _gittag="v$pkgver" @@ -31,7 +30,7 @@ package() { install -Dm644 "$srcdir"/scantopl.conf "$pkgdir"/etc/conf.d/scantopl } sha512sums=" -d4eca1adc326f1e730ae195bd44f1cf05d404488ce20fd612467c572ea7fa718034bb7b16d3e007976349f6852e83569aa17727dcc61f9e7ab1934995b3bc3e6 scantopl-1.0.0.tar.gz +e5238c4f8e727e80c5c66441e8de5eeb775fdfe05ee85509c942c2516e8996243cd1b72c7c87c8bbee2e0475cc0075244aa28164a746f6e7eded253bcb707ba7 scantopl-1.0.1.tar.gz 8238411fe8881be6690a583a6bfc71e52f3131320f5d92bb36f8af61802980265a8cf5250eb699d9214f7c6c168d14c39867a09587fb07841a8504a6a28db74b scantopl.initd ee2e631901b1d88c0dede6587318e44884255a7c82e090371f017dbb91563c16f0567c0d45b3183d0a8abb3ee4b71a33f3d79258ad2b2f6d8930a5bc7625070a scantopl.conf " From 3d599aff1745c360bec9fe8ff8ec92a327929d73 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 14:53:50 -0500 Subject: [PATCH 725/738] user/scanservjs: upgrade to 3.0.4 --- user/scanservjs/APKBUILD | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/user/scanservjs/APKBUILD b/user/scanservjs/APKBUILD index 4aeb67d..9effbf6 100644 --- a/user/scanservjs/APKBUILD +++ b/user/scanservjs/APKBUILD @@ -1,8 +1,7 @@ -# Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) - +# Maintainer: Antoine Martin (ayakael) pkgname=scanservjs -pkgver=3.0.3 +pkgver=3.0.4 pkgrel=0 pkgdesc="SANE scanner nodejs web ui" arch="noarch" @@ -63,7 +62,7 @@ package() { install -Dm 644 "$srcdir"/scanservjs.conf "$pkgdir"/etc/conf.d/scanservjs } sha512sums=" -e3746cfab118b08b75fe5a862e1b06d35bce3fafe7b5cf482ddfd28aad8ac9879981eef5bdadc35a783607aac49eef95b966ff1d2ddf431eaf6e2d7e335623fb scanservjs-3.0.3.tar.gz +f19b1bd5acb01f82fa98bc79f9d401f1b6c19aa9e4319d75efd4b82a6db44a348784953ae1542d362d3b8e328a1a469e9320fd7c937e6aa102a19a36cd8ce9e8 scanservjs-3.0.4.tar.gz f58dd5e1c4936d7e25065a295f5d01e64189cdefe92ba54fc875348a59a30b2055c93464d510a52820e66b42a69d0626d3513c93ab60b0768e1e8d5b3538bb13 scanservjs.initd 9d4fdab3803a598c729bf703369d8594b383163b05045f31e516f184a87d8deef8c8b40942d324e04bdf751ac9d63f7de25b13364f9f30888eba2af873369b36 scanservjs.conf " From 946a011b61836f9598a82c07a76b4f7d997c0555 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 15:49:12 -0500 Subject: [PATCH 726/738] backports/electron: upgrade to 38.2.7 --- backports/electron/APKBUILD | 14 ++++++++------ .../electron/electron_use-system-yarn.patch | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 backports/electron/electron_use-system-yarn.patch diff --git a/backports/electron/APKBUILD b/backports/electron/APKBUILD index ab1603d..c57c98e 100644 --- a/backports/electron/APKBUILD +++ b/backports/electron/APKBUILD @@ -1,10 +1,10 @@ # Contributor: lauren n. liberda # Maintainer: Antoine Martin (ayakael) pkgname=electron -pkgver=39.2.3 +pkgver=39.2.7 _gittag=v"${pkgver/_beta/-beta.}" pkgrel=0 -_chromium=142.0.7444.175 +_chromium=142.0.7444.235 _copium_tag=142.0 _depot_tools=495b23b39aaba2ca3b55dd27cadc523f1cb17ee6 pkgdesc="Electron cross-platform desktop toolkit" @@ -109,7 +109,7 @@ makedepends=" sqlite-dev woff2-dev xcb-proto - yarn + yarn-berry zlib-dev zstd-dev " @@ -147,6 +147,7 @@ source=" electron_system-zlib-headers.patch electron_do-not-strip-binaries.patch electron_shell-file-dialog-drop-glibc.patch + electron_use-system-yarn.patch default.conf electron.desktop @@ -310,7 +311,7 @@ prepare() { git commit -m "init" git tag "$_gittag" git pack-refs - yarn install --frozen-lockfile --ignore-scripts + yarn install --immutable --mode=skip-build ) ( @@ -490,7 +491,7 @@ _configure() { safe_browsing_use_unrar=false symbol_level=$symbol_level treat_warnings_as_errors=false - se_clang_modules=false + use_clang_modules=false use_custom_libcxx=true use_lld=true use_pulseaudio=true @@ -564,7 +565,7 @@ lang() { } sha512sums=" -7c4c33570bf6c0ff0d1d2606b64e25e9b8f64f399e49dd03632ee712de5551eb7757ac999ff1206d0c70057b4bf0ce535ac228ddbb88ffd9b1585d7abd483266 electron-v39.2.3-142.0.7444.175.tar.zst +6dc7161f6df396e2b7569b0a607e264b43a2d7215de65164dc2ca04c019df93ea0a67dec2490071c09c8a03f90605faaf3880f2d843f838bb5d841bba204c298 electron-v39.2.7-142.0.7444.235.tar.zst 30b298549804e7753b0b639b72417ba081e964676862b6c7d73ad73cdf806883f20e4a4b36e67a6c375eaf2dd97686cf21b90b062400d3b61fba86da4d239bfa copium-142.0.tar.gz 69b45005451ccd69c354b4c2910e92371cb801665f5e300dbecd36f8bc4ce68e77a431b5dac07c0937787debb4e93b7aadefa0a1e76c4ae334d2547ca3ca14ff 0001-hotfix-ignore-a-new-warning-in-rust-1.89.patch dc254dd79e135aeac3e9c03eb055e3bc17980fc213f8c4d8d7921a575be7f9c26b91f110a6dcb01c0a824a7d9375c09f8a61c8858c20c11d79c03f873e2cb3f9 compiler.patch @@ -594,6 +595,7 @@ c7f57929943a86f9e5f333da9d5691da88038770eeb46dd0a0719962c934deb2879f0e7a1ed714e9 4d9287d4cdfe27fbfb7be3d4b26c0c40edbd6a0c3ff926d60f2093ca09c15bcb58e20c2ccc8c0606aafd66c6d25a54225bc329cb056d8c5b297db4c6d0e768e6 electron_system-zlib-headers.patch 7031ddb61a858e95d83366185a53b5a2e4be9abe0aa4957543e0621cad57175ffef31bd87b8be25255184bb4cb30ec4fbced055407c6c8c7940c9e240b25d498 electron_do-not-strip-binaries.patch 0f8f36c21cc50c80e378691265845ff10fa53953d6cd5352fe71efcba489f956e50d374d8f634dadc3569c4901a81a1f308a3e69140c0f9136e0777022b9520f electron_shell-file-dialog-drop-glibc.patch +3fd20144ed171cf9706899a1481141c7fa3e98b17d600cdc5a3a68ba39059cebd9e5ccb5534af3e262f689df381bc3cb630ac24e46dd6f6c72eac4f4b6b14b35 electron_use-system-yarn.patch e8ea87c547546011c4c8fc2de30e4f443b85cd4cfcff92808e2521d2f9ada03feefb8e1b0cf0f6b460919c146e56ef8d5ad4bb5e2461cc5247c30d92eb4d068e default.conf 191559fc7aa1ea0353c6fb0cc321ee1d5803a0e44848c8be941cfab96277b0de6a59962d373e2a2a1686c8f9be2bcf2d2f33706759a339a959e297d3f7fda463 electron.desktop 5f7ba5ad005f196facec1c0f26108356b64cafb1e5cfa462ff714a33b8a4c757ac00bfcb080da09eb5b65032f8eb245d9676a61ec554515d125ed63912708648 electron-launcher.sh diff --git a/backports/electron/electron_use-system-yarn.patch b/backports/electron/electron_use-system-yarn.patch new file mode 100644 index 0000000..eaa8a8c --- /dev/null +++ b/backports/electron/electron_use-system-yarn.patch @@ -0,0 +1,17 @@ +diff --git a/electron/.yarnrc.yml.orig b/electron/.yarnrc.yml +index ca0a580..a388ff9 100644 +--- a/electron/.yarnrc.yml.orig ++++ b/electron/.yarnrc.yml +@@ -1,12 +1,3 @@ + enableScripts: false + +-nmHoistingLimits: workspaces +- + nodeLinker: node-modules +- +-npmMinimalAgeGate: 10080 +- +-npmPreapprovedPackages: +- - "@electron/*" +- +-yarnPath: .yarn/releases/yarn-4.12.0.cjs From 094222021c509f68055bc9610c8a3c04671734f3 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 15:49:48 -0500 Subject: [PATCH 727/738] backports/yarn-berry: backport for electron --- backports/electron/yarn-berry/APKBUILD | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 backports/electron/yarn-berry/APKBUILD diff --git a/backports/electron/yarn-berry/APKBUILD b/backports/electron/yarn-berry/APKBUILD new file mode 100644 index 0000000..715d16c --- /dev/null +++ b/backports/electron/yarn-berry/APKBUILD @@ -0,0 +1,33 @@ +maintainer="Fabricio Silva " +pkgname=yarn-berry +pkgver=4.9.1 +pkgrel=0 +pkgdesc="Fast, reliable, and secure dependency management for Node.js - Active development version" +url="https://yarnpkg.com/" +license="BSD-2-Clause" +arch="noarch" +depends="!yarn nodejs" # not backward compatible with yarn classic (v1) +source="$pkgname-$pkgver.tgz::https://registry.npmjs.org/@yarnpkg/cli-dist/-/cli-dist-$pkgver.tgz" +builddir="$srcdir/package" +replaces="yarn" + +check() { + ./bin/yarn.js --version + ./bin/yarn.js --help +} + +package() { + local destdir="usr/share/node_modules/@yarnpkg/cli-dist" + + mkdir -p "$pkgdir"/$destdir/bin + install -Dm0644 package.json -t "$pkgdir"/$destdir + install -Dm0755 bin/yarn.js -t "$pkgdir"/$destdir/bin + + mkdir -p "$pkgdir"/usr/bin + ln -s ../share/node_modules/@yarnpkg/cli-dist/bin/yarn.js "$pkgdir"/usr/bin/yarn + ln -s yarn "$pkgdir"/usr/bin/yarnpkg +} + +sha512sums=" +cae0bcb10349af010b472ef7fa1023c33c0afd60a54dc29d18797e6bb771bd6c0d3d06aefa801c56363bcc6ecf6133988d1f943543293e7335ede60618fb28e8 yarn-berry-4.9.1.tgz +" From 7a023d00241f6d6ec489d87d5e653913eb37c902 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 15:44:17 -0500 Subject: [PATCH 728/738] user/papermc: upgrade to 1.21.7 --- user/papermc/APKBUILD | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/papermc/APKBUILD b/user/papermc/APKBUILD index f6522f5..f4a7f7b 100644 --- a/user/papermc/APKBUILD +++ b/user/papermc/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Antoine Martin (ayakael) # Contributor: Antoine Martin (ayakael) pkgname=papermc -pkgver=1.21.4 +pkgver=1.21.7 _gittag=${pkgver/.0} pkgrel=0 pkgdesc="Next generation of Minecraft server, compatible with Spigot plugins and offering uncompromising performance" @@ -44,7 +44,7 @@ package() { chmod g+ws "$pkgdir"/var/lib/$pkgname } sha512sums=" -5e815c4ee4f9d99ecb173d2b81131d0531359f1d2d48dee429476a7b39c37140fe2085d9a657435e347ca1bc5930402bac1a533692cd8387811b2577384c827b papermc-1.21.4.tar.zst +90c3017f7e4031816f6d4e30612a88d7b15d9e99cfb4e887b868e3d0d55ec5db0e9e71dc433dd399959da9b099e7fc4fd3768635ccabcce84d1adfc48837309a papermc-1.21.7.tar.zst c5d1bf85ceb74162aaaf2bcd2d06dc2e3dd2e37c39f0cee2be7c8dbff9970a6aff1e48a43e6d1e83e6a0ac610bd89f62b1279bf27b64afa88d9831a36aebbd3e papermc.initd 9b8e267428731ee9255f82a93f1e8674d7e917a0f154bd395cd2280a49aa248a4b8427520b08dbb4b3a74a5471dac0e439eedc8ab94bf2e53bb8d411d2d8a789 papermc.conf 943ba0d4c10173246bdc6497dcedd54da0788f966841c8d3381398711d79f8d5eb07a24ce28f519b6f24f59d99fa9e74bc6bb882059f343df4eeda5de3660ac7 papermc.sh From 5a29004820ccebd980edebd6827174748f353ef3 Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 16:06:10 -0500 Subject: [PATCH 729/738] backports/py3-limits: backport for py3-flask-limiter --- backports/py3-limits/APKBUILD | 58 +++++++++++++++++++ .../py3-limits/our-std-is-good-enough.patch | 11 ++++ .../tests-drop-etcd3-and-k-argument.patch | 24 ++++++++ 3 files changed, 93 insertions(+) create mode 100644 backports/py3-limits/APKBUILD create mode 100644 backports/py3-limits/our-std-is-good-enough.patch create mode 100644 backports/py3-limits/tests-drop-etcd3-and-k-argument.patch diff --git a/backports/py3-limits/APKBUILD b/backports/py3-limits/APKBUILD new file mode 100644 index 0000000..af4516d --- /dev/null +++ b/backports/py3-limits/APKBUILD @@ -0,0 +1,58 @@ +# Contributor: lauren n. liberda +# Maintainer: lauren n. liberda +pkgname=py3-limits +pkgver=3.14.1 +pkgrel=0 +pkgdesc="Rate limiting using various strategies and storage backends such as redis & memcached" +url="https://github.com/alisaifee/limits" +arch="noarch" +license="MIT" +depends=" + py3-deprecated + python3 + " +makedepends="py3-setuptools py3-gpep517" +checkdepends=" + py3-flaky + py3-mongo + py3-pytest + py3-pytest-asyncio + py3-pytest-benchmark + py3-pytest-cov + py3-pytest-lazy-fixtures + py3-pymemcache + py3-redis + " +subpackages="$pkgname-pyc" +source=" + https://github.com/alisaifee/limits/archive/refs/tags/$pkgver/limits-$pkgver.tar.gz + + our-std-is-good-enough.patch + tests-drop-etcd3-and-k-argument.patch + " +builddir="$srcdir/limits-$pkgver" + +build() { + gpep517 build-wheel \ + --wheel-dir .dist \ + --output-fd 3 3>&1 >&2 +} + +check() { + python3 -m venv --clear --without-pip --system-site-packages .testenv + gpep517 install-wheel --destdir .testenv --prefix '' .dist/*.whl + .testenv/bin/python3 -m pytest -W ignore::DeprecationWarning \ + -m 'not benchmark and not etcd and not integration and not memcached' \ + -k 'not aio and not Storage and not strategy' -v +} + +package() { + gpep517 install-wheel --destdir "$pkgdir" \ + .dist/*.whl +} + +sha512sums=" +f30c7ec19c2d1edad9ed77dc590ae35717efa3956a4d97e465793e1923a4af08dc9921d90ee95d3c54ce3364b867ca67a9de62c61d627e07a3f50da20bdabd0f limits-3.14.1.tar.gz +271e3b0501f9f144eda8d2e96c93b285714e339b9217385e38cdbce1f4dec88f9c949e9419f8be94885092e7977f7dca29b86b5499e9fead678b42a686c337db our-std-is-good-enough.patch +e84f4db49349a6feba0f701b9d4357c5f66d64c4a23f8ce512528b0f44b5bbef55041c02d92aae3a4cc8d5340846f9e909217beb869a5aeb49df166dd29ae9e3 tests-drop-etcd3-and-k-argument.patch +" diff --git a/backports/py3-limits/our-std-is-good-enough.patch b/backports/py3-limits/our-std-is-good-enough.patch new file mode 100644 index 0000000..32d7d73 --- /dev/null +++ b/backports/py3-limits/our-std-is-good-enough.patch @@ -0,0 +1,11 @@ +--- ./limits/typing.py.orig ++++ ./limits/typing.py +@@ -13,7 +13,7 @@ + Union, + ) + +-from typing_extensions import ClassVar, Counter, ParamSpec, Protocol, TypeAlias ++from typing import ClassVar, Counter, ParamSpec, Protocol, TypeAlias + + Serializable = Union[int, str, float] + diff --git a/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch new file mode 100644 index 0000000..cab3a06 --- /dev/null +++ b/backports/py3-limits/tests-drop-etcd3-and-k-argument.patch @@ -0,0 +1,24 @@ +diff --git a/tests/conftest.py.orig b/tests/conftest.py +index 2aeb758dda6..a9b2b8b2bd1 100644 +--- a/tests/conftest.py.orig ++++ b/tests/conftest.py +@@ -3,7 +3,6 @@ import platform + import socket + import time + +-import etcd3 + import pymemcache + import pymemcache.client + import pymongo +diff --git a/pytest.ini.orig b/pytest.ini +index 38c40a713d0..8c6659e21c2 100644 +--- a/pytest.ini.orig ++++ b/pytest.ini +@@ -17,7 +17,6 @@ addopts = + -rfEsxX + --cov=limits + -m "not benchmark" +- -K + filterwarnings = + error + module::ResourceWarning From 839fa112c7c7028fccfda99c7650f8797041bdca Mon Sep 17 00:00:00 2001 From: ayakael Date: Mon, 15 Dec 2025 16:07:26 -0500 Subject: [PATCH 730/738] backports/yarn-berry: move to correct dir --- backports/{electron => }/yarn-berry/APKBUILD | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename backports/{electron => }/yarn-berry/APKBUILD (100%) diff --git a/backports/electron/yarn-berry/APKBUILD b/backports/yarn-berry/APKBUILD similarity index 100% rename from backports/electron/yarn-berry/APKBUILD rename to backports/yarn-berry/APKBUILD From 88d7b4e8c7b855b3f5b439aa5d28212349b85970 Mon Sep 17 00:00:00 2001 From: ayakael Date: Tue, 16 Dec 2025 13:34:44 -0500 Subject: [PATCH 731/738] user/filebrowser: new aport --- user/filebrowser/APKBUILD | 53 + user/filebrowser/filebrowser.openrc | 30 + user/filebrowser/filebrowser.post-upgrade | 1 + user/filebrowser/filebrowser.pre-install | 47 + user/filebrowser/frontend-package-lock.json | 7568 +++++++++++++++++++ 5 files changed, 7699 insertions(+) create mode 100644 user/filebrowser/APKBUILD create mode 100644 user/filebrowser/filebrowser.openrc create mode 120000 user/filebrowser/filebrowser.post-upgrade create mode 100644 user/filebrowser/filebrowser.pre-install create mode 100644 user/filebrowser/frontend-package-lock.json diff --git a/user/filebrowser/APKBUILD b/user/filebrowser/APKBUILD new file mode 100644 index 0000000..7ff2627 --- /dev/null +++ b/user/filebrowser/APKBUILD @@ -0,0 +1,53 @@ +# Maintainer: Antoine Martin (ayakael) +pkgname=filebrowser +pkgver=1.0.3 +_gittag="v$pkgver-stable" +pkgrel=0 +pkgdesc="Standalone web file manager" +arch="all" +url="https://github.com/gtsteffaniak/filebrowser" +license="Apache-2.0" +depends="libcap-setcap" +makedepends="go nodejs npm" +source=" + $pkgname-$_gittag.tar.gz::https://github.com/gtsteffaniak/filebrowser/archive/refs/tags/$_gittag.tar.gz + frontend-package-lock.json + filebrowser.openrc + " +builddir="$srcdir"/$pkgname-${_gittag/v} +options="!check" # TODO: setup test suite +subpackages="$pkgname-openrc" +install="$pkgname.pre-install $pkgname.post-upgrade" + +prepare() { + default_prepare + ( + cd "$builddir"/frontend + cp "$srcdir"/frontend-package-lock.json package-lock.json + npm ci + ) +} + +build() { + ( + cd "$builddir"/frontend + npm run build + ) + ( + cd "$builddir"/backend + go build -o filebrowser \ + --ldflags="-w -s -X 'github.com/gtsteffaniak/filebrowser/backend/common/version.CommitSHA=production' \ + -X 'github.com/gtsteffaniak/filebrowser/backend/common/version.Version=$pkgver'" + ) +} + +package() { + install -Dm755 "$builddir"/backend/filebrowser "$pkgdir"/usr/bin/filebrowser + install -Dm755 "$srcdir"/filebrowser.openrc "$pkgdir"/etc/init.d/filebrowser + install -Dm644 "$builddir"/frontend/public/config.generated.yaml "$pkgdir"/etc/filebrowser/filebrowser.yaml +} +sha512sums=" +7919d391e45c7a88bcbff61f6d63963fe559afe21170c2940ae7895e6b794ce68af0742d4ce81584437b14e603a4ff8b95fb1fb16d72a032a40b76986ed8981b filebrowser-v1.0.3-stable.tar.gz +4ffe0c2ae7d6d972950fb38c9c777c20e3f507da6b4562231e09843b3ae618362ffdfbaf6dbb60959b3811c1856eb326d608e9d32e236bac405c65974e6e1e50 frontend-package-lock.json +06319bc67b088b5ffdad01a575691d82c5319730b4e46975bfc09ebb7466d6913eaca73e93f8db7b8c8bc374e6b9e35634ff1a69e701d24a5d2eae444de6bdf7 filebrowser.openrc +" diff --git a/user/filebrowser/filebrowser.openrc b/user/filebrowser/filebrowser.openrc new file mode 100644 index 0000000..3282368 --- /dev/null +++ b/user/filebrowser/filebrowser.openrc @@ -0,0 +1,30 @@ +#!/sbin/openrc-run + +description="File browser for ${RC_SVCNAME/*.}" +supervisor=supervise-daemon +respawn_max=0 +respawn_delay=10 + + +# Change $directory to path to middleware scripts +directory=${directory:-/var/lib/${RC_SVCNAME/.*}/${RC_SVCNAME/*.}} +pidfile=${pidfile:-/run/$RC_SVCNAME.pid} + +log_dir="/var/log/${RC_SVCNAME/.*}/" +logfile=${logfile:-$log_dir/${RC_SVCNAME/*.}.log} +output_log="${output_log:-$logfile}" +error_log="${error_log:-$logfile}" + +command=${command:-/usr/bin/filebrowser} +command_args="-c /etc/filebrowser/${RC_SVCNAME/*.}.yaml" +command_user=${command_user:-filebrowser:filebrowser} +command_background=true + +depend() { + need net +} + +start_pre() { + checkpath --owner=$command_user --directory $log_dir /var/lib/filebrowser $directory + cd $directory +} diff --git a/user/filebrowser/filebrowser.post-upgrade b/user/filebrowser/filebrowser.post-upgrade new file mode 120000 index 0000000..85089dd --- /dev/null +++ b/user/filebrowser/filebrowser.post-upgrade @@ -0,0 +1 @@ +filebrowser.pre-install \ No newline at end of file diff --git a/user/filebrowser/filebrowser.pre-install b/user/filebrowser/filebrowser.pre-install new file mode 100644 index 0000000..b79bd82 --- /dev/null +++ b/user/filebrowser/filebrowser.pre-install @@ -0,0 +1,47 @@ +#!/bin/sh + +setcap 'cap_net_bind_service=+ep' /usr/bin/filebrowser + +if [ "${0##*.}" = 'pre-install' ]; then + cat >&2 <<-EOF + +1. Generate filebrowser config file + + cd /etc/filebrowser + filebrowser setup + +2. Rename config.yaml to $service.yaml (i.e. movies.yaml) and adjust as desired (see https://filebrowserquantum.com/en/docs/configuration/configuration-overview/ for more information) +3. Create symbolic link for service file, enable, and start + + ln -s /etc/init.d/filebrowser /etc/init.d/filebrowser.$service + rc-update add filebrowser.$service + service filebrowser.$service + +You should now be able to go to http://ip-address:port (default 80) + +For more documentation, go to https://filebrowserquantum.com/en/docs + + EOF + + if ! getent group filebrowser 1>/dev/null; then + echo 'Creating group filebrowser' 1>&2 + + addgroup -S filebrowser + fi + + if ! id filebrowser 2>/dev/null 1>&2; then + echo 'Creating user filebrowser' 1>&2 + + adduser -DHS -G filebrowser -h "$DATADIR" -s /bin/sh \ + -g "added by apk for filebrowser" filebrowser + passwd -u filebrowser 1>/dev/null # unlock + fi + + if ! id -Gn filebrowser | grep -Fq www-data; then + echo 'Adding user filebrowser to group www-data' 1>&2 + + addgroup filebrowser www-data + fi + + exit 0 +fi diff --git a/user/filebrowser/frontend-package-lock.json b/user/filebrowser/frontend-package-lock.json new file mode 100644 index 0000000..fca845b --- /dev/null +++ b/user/filebrowser/frontend-package-lock.json @@ -0,0 +1,7568 @@ +{ + "name": "filebrowser-frontend", + "version": "3.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "filebrowser-frontend", + "version": "3.0.0", + "dependencies": { + "@onlyoffice/document-editor-vue": "^1.4.0", + "@skjnldsv/vue-plyr": "^7.5.0", + "ace-builds": "^1.24.2", + "axios": "^1.7.9", + "clipboard": "^2.0.4", + "css-vars-ponyfill": "^2.4.3", + "dompurify": "^3.2.4", + "epubjs": "^0.3.93", + "file-loader": "^6.2.0", + "glob": "^9.3.5", + "highlight.js": "^11.11.1", + "mammoth": "^1.9.1", + "marked": "^15.0.6", + "normalize.css": "^8.0.1", + "qrcode.vue": "^3.4.1", + "srt-support-for-html5-videos": "^2.6.11", + "vue": "^3.4.21", + "vue-i18n": "^9.10.2", + "vue-lazyload": "^3.0.0", + "vue-router": "^4.3.0" + }, + "devDependencies": { + "@intlify/eslint-plugin-vue-i18n": "^3.2.0", + "@intlify/unplugin-vue-i18n": "^4.0.0", + "@playwright/test": "^1.54.1", + "@types/node": "^24.1.0", + "@vitejs/plugin-vue": "^5.0.4", + "@vue/eslint-config-typescript": "^13.0.0", + "deepl-node": "^1.18.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-vue": "^9.24.0", + "fs-extra": "^11.3.0", + "jsdom": "^25.0.1", + "vite": "^6.2.0", + "vite-plugin-checker": "^0.10.3", + "vite-plugin-compression2": "^1.0.0", + "vitest": "^3.0.7", + "vue-tsc": "^2.0.7" + }, + "engines": { + "node": ">=20.0.0", + "npm": ">=9.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz", + "integrity": "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz", + "integrity": "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@intlify/bundle-utils": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-8.0.0.tgz", + "integrity": "sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "^9.4.0", + "@intlify/shared": "^9.4.0", + "acorn": "^8.8.2", + "escodegen": "^2.1.0", + "estree-walker": "^2.0.2", + "jsonc-eslint-parser": "^2.3.0", + "mlly": "^1.2.0", + "source-map-js": "^1.0.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">= 14.16" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/core-base": { + "version": "9.14.5", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.5.tgz", + "integrity": "sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "9.14.5", + "@intlify/shared": "9.14.5" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-3.2.0.tgz", + "integrity": "sha512-TOIrD4tJE48WMyVIB8bNeQJJPYo1Prpqnm9Xpn1UZmcqlELhm8hmP8QyJnkgesfbG7hyiX/kvo63W7ClEQmhpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^3.0.0", + "@intlify/core-base": "^9.12.0", + "@intlify/message-compiler": "^9.12.0", + "debug": "^4.3.4", + "eslint-compat-utils": "^0.6.0", + "glob": "^10.3.3", + "globals": "^15.0.0", + "ignore": "^6.0.0", + "import-fresh": "^3.3.0", + "is-language-code": "^3.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "jsonc-eslint-parser": "^2.3.0", + "lodash": "^4.17.21", + "parse5": "^7.1.2", + "semver": "^7.5.4", + "synckit": "^0.9.0", + "vue-eslint-parser": "^9.3.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0 || ^9.0.0-0" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.14.5", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.5.tgz", + "integrity": "sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "9.14.5", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.14.5", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.5.tgz", + "integrity": "sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/unplugin-vue-i18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-4.0.0.tgz", + "integrity": "sha512-q2Mhqa/mLi0tulfLFO4fMXXvEbkSZpI5yGhNNsLTNJJ41icEGUuyDe+j5zRZIKSkOJRgX6YbCyibTDJdRsukmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@intlify/bundle-utils": "^8.0.0", + "@intlify/shared": "^9.4.0", + "@rollup/pluginutils": "^5.1.0", + "@vue/compiler-sfc": "^3.2.47", + "debug": "^4.3.3", + "fast-glob": "^3.2.12", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "pathe": "^1.0.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2", + "unplugin": "^1.1.0" + }, + "engines": { + "node": ">= 14.16" + }, + "peerDependencies": { + "petite-vue-i18n": "*", + "vue-i18n": "*", + "vue-i18n-bridge": "*" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + }, + "vue-i18n-bridge": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@onlyoffice/document-editor-vue": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@onlyoffice/document-editor-vue/-/document-editor-vue-1.6.1.tgz", + "integrity": "sha512-sdU7h684ESSdXvGNDcMf73UmToiZGMVO5QRIazTmGfm+bKOnT5ildomeagYFdnQaHQH0J28EJqc4jqXOcQbicA==", + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.21" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", + "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@playwright/test": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.57.0.tgz", + "integrity": "sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.57.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", + "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", + "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", + "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", + "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", + "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", + "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", + "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", + "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", + "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", + "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", + "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", + "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", + "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", + "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", + "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", + "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", + "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", + "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", + "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", + "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", + "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", + "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@skjnldsv/vue-plyr": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@skjnldsv/vue-plyr/-/vue-plyr-7.5.0.tgz", + "integrity": "sha512-JmbKPe8Eh0yTP+7w4VYeqGhrUqDKM4qSsCn37CbADAvvwMvceBwYC0IBXil0RBtyzStxwXPtOj1oI//lQ5DeTw==", + "license": "MIT", + "dependencies": { + "plyr": "^3.7.8", + "vue": "^3.3.4" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0", + "npm": "^9.0.0 || ^10.0.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/localforage": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/localforage/-/localforage-0.0.34.tgz", + "integrity": "sha512-tJxahnjm9dEI1X+hQSC5f2BSd/coZaqbIl1m3TCl0q9SVuC52XcXfV0XmoCU1+PmjyucuVITwoTnN8OlTbEXXA==", + "deprecated": "This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed!", + "license": "MIT", + "dependencies": { + "localforage": "*" + } + }, + "node_modules/@types/node": { + "version": "24.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.4.tgz", + "integrity": "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.25.tgz", + "integrity": "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.25", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz", + "integrity": "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.25", + "@vue/shared": "3.5.25" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz", + "integrity": "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.25", + "@vue/compiler-dom": "3.5.25", + "@vue/compiler-ssr": "3.5.25", + "@vue/shared": "3.5.25", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz", + "integrity": "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.25", + "@vue/shared": "3.5.25" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", + "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "vue-eslint-parser": "^9.3.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "peerDependencies": { + "eslint": "^8.56.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": ">=4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.25.tgz", + "integrity": "sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.25" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.25.tgz", + "integrity": "sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.25", + "@vue/shared": "3.5.25" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz", + "integrity": "sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.25", + "@vue/runtime-core": "3.5.25", + "@vue/shared": "3.5.25", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.25.tgz", + "integrity": "sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.25", + "@vue/shared": "3.5.25" + }, + "peerDependencies": { + "vue": "3.5.25" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.25.tgz", + "integrity": "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", + "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", + "deprecated": "this version is no longer supported, please update to at least 0.8.*", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/ace-builds": { + "version": "1.43.5", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.5.tgz", + "integrity": "sha512-iH5FLBKdB7SVn9GR37UgA/tpQS8OTWIxWAuq3Ofaw+Qbc69FfPXsXd9jeW7KRG2xKpKMqBDnu0tHBrCWY5QI7A==", + "license": "BSD-3-Clause" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.8.tgz", + "integrity": "sha512-Y1fOuNDowLfgKOypdc9SPABfoWXuZHBOyCS4cD52IeZBhr4Md6CLLs6atcxVrzRmQ06E7hSlm5bHHApPKR/byA==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT", + "peer": true + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001760", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz", + "integrity": "sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "license": "MIT", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT", + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.47.0.tgz", + "integrity": "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-vars-ponyfill": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-2.4.9.tgz", + "integrity": "sha512-aZyLue5bdiGVNCiCclNjo123D8I7kyoYNUaAvz+H1JalX1ye4Ilz7jNRRH5YbM+dYD6ucejiydGwk7lol/GCXQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.2", + "get-css-data": "^2.0.2" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/custom-event-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepl-node": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.24.0.tgz", + "integrity": "sha512-vZ9jUpzJRvFamgVOfm1LDy3YYJ7k8FhxtAX9whR92EFshLIP9JlYS0HFwXL5yYsfqzXdb/wssGRSWvR48t7nSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": ">=12.0", + "adm-zip": "^0.5.16", + "axios": "^1.7.4", + "form-data": "^3.0.0", + "loglevel": ">=1.6.2", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/deepl-node/node_modules/form-data": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "license": "MIT" + }, + "node_modules/dingbat-to-unicode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", + "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", + "license": "BSD-2-Clause" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/duck": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", + "license": "BSD", + "dependencies": { + "underscore": "^1.13.1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", + "license": "ISC", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/epubjs": { + "version": "0.3.93", + "resolved": "https://registry.npmjs.org/epubjs/-/epubjs-0.3.93.tgz", + "integrity": "sha512-c06pNSdBxcXv3dZSbXAVLE1/pmleRhOT6mXNZo6INKmvuKpYB65MwU/lO7830czCtjIiK9i+KR+3S+p0wtljrw==", + "license": "BSD-2-Clause", + "dependencies": { + "@types/localforage": "0.0.34", + "@xmldom/xmldom": "^0.7.5", + "core-js": "^3.18.3", + "event-emitter": "^0.3.5", + "jszip": "^3.7.1", + "localforage": "^1.10.0", + "lodash": "^4.17.21", + "marks-pane": "^1.0.9", + "path-webpack": "0.0.3" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz", + "integrity": "sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", + "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-css-data": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/get-css-data/-/get-css-data-2.1.1.tgz", + "integrity": "sha512-JpMa/f5P4mDXKg6l5/2cHL5xNY77Jap7tHyduMa6BF0E2a7bQ6Tvaz2BIMjeVYZYLcmOZ5w2Ro0yVJEI41tMbw==", + "license": "MIT" + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "license": "MIT", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", + "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-language-code": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-language-code/-/is-language-code-3.1.0.tgz", + "integrity": "sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.14.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", + "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.1.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.12", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.7.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/loadjs": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz", + "integrity": "sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==", + "license": "MIT" + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "license": "Apache-2.0", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/localforage/node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/lop": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", + "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", + "license": "BSD-2-Clause", + "dependencies": { + "duck": "^0.1.12", + "option": "~0.2.1", + "underscore": "^1.13.1" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mammoth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.11.0.tgz", + "integrity": "sha512-BcEqqY/BOwIcI1iR5tqyVlqc3KIaMRa4egSoK83YAVrBf6+yqdAAbtUcFDCWX8Zef8/fgNZ6rl4VUv+vVX8ddQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@xmldom/xmldom": "^0.8.6", + "argparse": "~1.0.3", + "base64-js": "^1.5.1", + "bluebird": "~3.4.0", + "dingbat-to-unicode": "^1.0.1", + "jszip": "^3.7.1", + "lop": "^0.4.2", + "path-is-absolute": "^1.0.0", + "underscore": "^1.13.1", + "xmlbuilder": "^10.0.0" + }, + "bin": { + "mammoth": "bin/mammoth" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/mammoth/node_modules/@xmldom/xmldom": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mammoth/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/marks-pane": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/marks-pane/-/marks-pane-1.0.9.tgz", + "integrity": "sha512-Ahs4oeG90tbdPWwAJkAAoHg2lRR8lAs9mZXETNPO9hYg3AkjUJBKi1NQ4aaIQZVGrig7c/3NUV1jANl8rFTeMg==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/mlly": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.1" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT", + "peer": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "license": "MIT", + "peer": true + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.23", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.23.tgz", + "integrity": "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/option": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", + "license": "BSD-2-Clause" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-webpack": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/path-webpack/-/path-webpack-0.0.3.tgz", + "integrity": "sha512-AmeDxedoo5svf7aB3FYqSAKqMxys014lVKBzy1o/5vv9CtU7U4wgGWL1dA2o6MOzcD53ScN4Jmiq6VbtLz1vIQ==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/playwright": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.57.0.tgz", + "integrity": "sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.57.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.57.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.57.0.tgz", + "integrity": "sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/plyr": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/plyr/-/plyr-3.8.3.tgz", + "integrity": "sha512-0+iI5uw0WRvtKBpgPCkmQQv7ucHVQKTEo6UFJjgJ8cy/JZhy0dQqshHQVitHXV6l2O3MzhgnuvQ95VSkWcWeSw==", + "license": "MIT", + "dependencies": { + "core-js": "^3.45.1", + "custom-event-polyfill": "^1.0.7", + "loadjs": "^4.3.0", + "rangetouch": "^2.0.1", + "url-polyfill": "^1.1.13" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode.vue": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/qrcode.vue/-/qrcode.vue-3.6.0.tgz", + "integrity": "sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rangetouch": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz", + "integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==", + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", + "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.53.5", + "@rollup/rollup-android-arm64": "4.53.5", + "@rollup/rollup-darwin-arm64": "4.53.5", + "@rollup/rollup-darwin-x64": "4.53.5", + "@rollup/rollup-freebsd-arm64": "4.53.5", + "@rollup/rollup-freebsd-x64": "4.53.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", + "@rollup/rollup-linux-arm-musleabihf": "4.53.5", + "@rollup/rollup-linux-arm64-gnu": "4.53.5", + "@rollup/rollup-linux-arm64-musl": "4.53.5", + "@rollup/rollup-linux-loong64-gnu": "4.53.5", + "@rollup/rollup-linux-ppc64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-musl": "4.53.5", + "@rollup/rollup-linux-s390x-gnu": "4.53.5", + "@rollup/rollup-linux-x64-gnu": "4.53.5", + "@rollup/rollup-linux-x64-musl": "4.53.5", + "@rollup/rollup-openharmony-arm64": "4.53.5", + "@rollup/rollup-win32-arm64-msvc": "4.53.5", + "@rollup/rollup-win32-ia32-msvc": "4.53.5", + "@rollup/rollup-win32-x64-gnu": "4.53.5", + "@rollup/rollup-win32-x64-msvc": "4.53.5", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/srt-support-for-html5-videos": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/srt-support-for-html5-videos/-/srt-support-for-html5-videos-2.6.11.tgz", + "integrity": "sha512-rHsP8iaE7vwhPHpaJPj178YZn6ak1jZvjtEA+XrRm9hhOfC3KZVK/TdNyZIi+fBFtSC+EkscWkyNFKiMuLE4IQ==" + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/synckit": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.3.tgz", + "integrity": "sha512-JJoOEKTfL1urb1mDoEblhD9NhEbWmq9jHEMEnxoC4ujUaZ4itA8vKgwkFAyNClgxplLi9tsUKX+EduK0p/l7sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar-mini": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/tar-mini/-/tar-mini-0.2.0.tgz", + "integrity": "sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser": { + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", + "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "devOptional": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-polyfill": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.14.tgz", + "integrity": "sha512-p4f3TTAG6ADVF3mwbXw7hGw+QJyw5CnNGvYh5fCuQQZIiuKUswqcznyV3pGDP9j0TSmC4UvRKm8kl1QsX1diiQ==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-node/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite-plugin-checker": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.10.3.tgz", + "integrity": "sha512-f4sekUcDPF+T+GdbbE8idb1i2YplBAoH+SfRS0e/WRBWb2rYb1Jf5Pimll0Rj+3JgIYWwG2K5LtBPCXxoibkLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "chokidar": "^4.0.3", + "npm-run-path": "^6.0.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.3", + "strip-ansi": "^7.1.0", + "tiny-invariant": "^1.3.3", + "tinyglobby": "^0.2.14", + "vscode-uri": "^3.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "@biomejs/biome": ">=1.7", + "eslint": ">=7", + "meow": "^13.2.0", + "optionator": "^0.9.4", + "stylelint": ">=16", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*", + "vue-tsc": "~2.2.10 || ^3.0.0" + }, + "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/vite-plugin-compression2": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-compression2/-/vite-plugin-compression2-1.4.0.tgz", + "integrity": "sha512-UEk0Bq1IkkwqbDLoLOHZ8WTmN1QbvR28fvNl2liB88/6SG1oLrTVkxfjqW3pdla/rKQ6QXn+pJpv3GBbl+k56g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "tar-mini": "^0.2.0" + }, + "peerDependencies": { + "vite": "^2.0.0||^3.0.0||^4.0.0||^5.0.0 ||^6.0.0" + } + }, + "node_modules/vite/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.25.tgz", + "integrity": "sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.25", + "@vue/compiler-sfc": "3.5.25", + "@vue/runtime-dom": "3.5.25", + "@vue/server-renderer": "3.5.25", + "@vue/shared": "3.5.25" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-i18n": { + "version": "9.14.5", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.5.tgz", + "integrity": "sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "9.14.5", + "@intlify/shared": "9.14.5", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-lazyload": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vue-lazyload/-/vue-lazyload-3.0.0.tgz", + "integrity": "sha512-h2keL/Rj550dLgesgOtXJS9qOiSMmuJNeVlfNAYV1/IYwOQYaWk5mFJlwRxmZDK9YC5gECcFLYYj7z1lKSf9ug==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.104.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.0.tgz", + "integrity": "sha512-5DeICTX8BVgNp6afSPYXAFjskIgWGlygQH58bcozPOXgo2r/6xx39Y1+cULZ3gTxUYQP88jmwLj2anu4Xaq84g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack/node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "license": "MIT", + "peer": true + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", + "peer": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.3.2.tgz", + "integrity": "sha512-odxVsHAkZYYglR30aPYRY4nUGJnoJ2y1ww2HDvZALo0BDETv9kWbi16J52eHs+PWRNmF4ub6nZqfVOeesOvntg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} From e14a8dc1e62f022fe8c7e5f2101ddaef5eaadb85 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Dec 2025 16:27:31 -0500 Subject: [PATCH 732/738] ci: check backports of v3.23 --- .forgejo/workflows/check-backports.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-backports.yml b/.forgejo/workflows/check-backports.yml index f1d016d..99bb71d 100644 --- a/.forgejo/workflows/check-backports.yml +++ b/.forgejo/workflows/check-backports.yml @@ -11,7 +11,7 @@ jobs: container: image: alpine:latest env: - downstream: https://ayakael.net/api/packages/forge/alpine/v3.22/backports + downstream: https://ayakael.net/api/packages/forge/alpine/v3.23/backports ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 1 ALL_PACKAGES: true From dfd170283552b8e045522a00cd0d67db92097f39 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Tue, 16 Dec 2025 21:17:59 -0500 Subject: [PATCH 733/738] ci: skip dotnet10-stage0 for community --- .forgejo/workflows/check-community.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-community.yml b/.forgejo/workflows/check-community.yml index 9c96c47..ee6d624 100644 --- a/.forgejo/workflows/check-community.yml +++ b/.forgejo/workflows/check-community.yml @@ -35,7 +35,7 @@ jobs: ISSUE_TOKEN: ${{ secrets.issue_token }} LABEL_NUMBER: 13 fix_only: all -git-annex - skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore + skip_package: dotnet9-stage0 dotnet8-stage0 py3-boto3 py3-botocore dotnet10-stage0 steps: - name: Environment setup run: apk add grep coreutils gawk curl wget bash nodejs git jq sed From 206336bdd1bfcc95888d59ac235bb66d5c9f0924 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 22 Dec 2025 00:05:59 -0500 Subject: [PATCH 734/738] ci: track latest stable for pmos --- .forgejo/workflows/check-pmos.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index 119383b..4b83e93 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -26,3 +26,25 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh + check-pmos-edge: + name: Check pmos(v25.12) repo + runs-on: aarch64 + container: + image: alpine:latest + env: + downstream: http://mirror.postmarketos.org/postmarketos/v25.12 + ISSUE_TOKEN: ${{ secrets.issue_token }} + LABEL_NUMBER: 14 + fix_only: all + skip_package: device-clockworkpi-uconsole-radxa-cm5 device-pine64-pinenote u-boot-radxa-cm5 + steps: + - name: Environment setup + run: apk add grep coreutils gawk curl wget bash nodejs git jq sed + - name: Get scripts + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Check out-of-date packages + run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh + - name: Create issues + run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh From 797de7c2a9535f54ee3326029ef51f884a67a238 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 22 Dec 2025 00:06:56 -0500 Subject: [PATCH 735/738] ci: fix pmos check --- .forgejo/workflows/check-pmos.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/check-pmos.yml b/.forgejo/workflows/check-pmos.yml index 4b83e93..750f608 100644 --- a/.forgejo/workflows/check-pmos.yml +++ b/.forgejo/workflows/check-pmos.yml @@ -26,7 +26,7 @@ jobs: run: ${{ github.workspace }}/.forgejo/bin/check_ver.sh - name: Create issues run: ${{ github.workspace }}/.forgejo/bin/create_issue.sh - check-pmos-edge: + check-pmos-latest: name: Check pmos(v25.12) repo runs-on: aarch64 container: From 6a81c77cf881cbc0df77ae9e4a423f7c33031821 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Sun, 21 Dec 2025 23:59:08 -0500 Subject: [PATCH 736/738] backports/openterface-qt: upgrade to 0.5.7 --- .../348_address-use-of-deleted-function.patch | 23 + ...ng-categories-and-remove-backslashes.patch | 586 ++++++++++++++++++ .../51-openterface-permissions.rules | 0 {user => backports}/openterface-qt/APKBUILD | 46 +- .../openterface-qt.post-install | 0 .../openterface-qt/openterfaceQT.desktop | 0 .../openterface-qt/use-system-libs.patch | 72 +++ 7 files changed, 720 insertions(+), 7 deletions(-) create mode 100644 backports/openterface-qt/348_address-use-of-deleted-function.patch create mode 100644 backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch rename {user => backports}/openterface-qt/51-openterface-permissions.rules (100%) rename {user => backports}/openterface-qt/APKBUILD (50%) rename {user => backports}/openterface-qt/openterface-qt.post-install (100%) rename {user => backports}/openterface-qt/openterfaceQT.desktop (100%) create mode 100644 backports/openterface-qt/use-system-libs.patch diff --git a/backports/openterface-qt/348_address-use-of-deleted-function.patch b/backports/openterface-qt/348_address-use-of-deleted-function.patch new file mode 100644 index 0000000..2783740 --- /dev/null +++ b/backports/openterface-qt/348_address-use-of-deleted-function.patch @@ -0,0 +1,23 @@ +diff --git a/serial/SerialPortManager.cpp.orig b/serial/SerialPortManager.cpp +index 22565b5..d444eee 100644 +--- a/serial/SerialPortManager.cpp.orig ++++ b/serial/SerialPortManager.cpp +@@ -1945,8 +1945,9 @@ void SerialPortManager::attemptRecovery() + } + } else { + qCWarning(log_core_serial) << "Serial port recovery attempt failed"; +- if (eventCallback) { +- eventCallback->onStatusUpdate(QString("Recovery attempt %1 failed").arg(m_connectionRetryCount)); ++ if (eventCallback) { ++ int crc = m_connectionRetryCount; ++ eventCallback->onStatusUpdate(QString("Recovery attempt %1 failed").arg(crc)); + } + + // Try again if we haven't exceeded max attempts +@@ -2034,4 +2035,4 @@ void SerialPortManager::applyCommandBasedBaudrateChange(int baudRate, const QStr + } else { + qCWarning(log_core_serial) << logPrefix << "Failed to apply user selected baudrate:" << baudRate; + } +-} +\ No newline at end of file ++} diff --git a/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch b/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch new file mode 100644 index 0000000..5e762ff --- /dev/null +++ b/backports/openterface-qt/423_deduplicate-logging-categories-and-remove-backslashes.patch @@ -0,0 +1,586 @@ +From 4478cfb004d3db7797e99fd3bdb23bf880a9c85b Mon Sep 17 00:00:00 2001 +From: John Lane <1786613+johnlane@users.noreply.github.com> +Date: Wed, 3 Dec 2025 21:19:33 +0000 +Subject: [PATCH 1/2] Remove additional backslashes and add missing cpp and h + files + +--- + openterfaceQT.pro | 28 +++++++++++++++++++--------- + 1 file changed, 19 insertions(+), 9 deletions(-) + +diff --git a/openterfaceQT.pro b/openterfaceQT.pro +index 3460dbac..f0d878e8 100644 +--- a/openterfaceQT.pro ++++ b/openterfaceQT.pro +@@ -84,16 +84,26 @@ SOURCES += main.cpp \ + !win32 { + SOURCES += host/backend/ffmpegbackendhandler.cpp \ + host/backend/gstreamerbackendhandler.cpp \ +- host/backend/gstreamer/sinkselector.cpp \\ +- host/backend/gstreamer/queueconfigurator.cpp \\ +- host/backend/gstreamer/videooverlaymanager.cpp \\ +- host/backend/gstreamer/pipelinebuilder.cpp ++ host/backend/gstreamer/pipelinefactory.cpp \ ++ host/backend/gstreamer/externalgstrunner.cpp \ ++ host/backend/gstreamer/inprocessgstrunner.cpp \ ++ host/backend/gstreamer/sinkselector.cpp \ ++ host/backend/gstreamer/queueconfigurator.cpp \ ++ host/backend/gstreamer/videooverlaymanager.cpp \ ++ host/backend/gstreamer/pipelinebuilder.cpp \ ++ host/backend/gstreamer/recordingmanager.cpp \ ++ host/backend/gstreamer/gstreamerhelpers.cpp + HEADERS += host/backend/ffmpegbackendhandler.h \ + host/backend/gstreamerbackendhandler.h \ +- host/backend/gstreamer/sinkselector.h \\ +- host/backend/gstreamer/queueconfigurator.h \\ +- host/backend/gstreamer/videooverlaymanager.h \\ +- host/backend/gstreamer/pipelinebuilder.h ++ host/backend/gstreamer/pipelinefactory.h \ ++ host/backend/gstreamer/externalgstrunner.h \ ++ host/backend/gstreamer/inprocessgstrunner.h \ ++ host/backend/gstreamer/sinkselector.h \ ++ host/backend/gstreamer/queueconfigurator.h \ ++ host/backend/gstreamer/videooverlaymanager.h \ ++ host/backend/gstreamer/pipelinebuilder.h \ ++ host/backend/gstreamer/recordingmanager.h \ ++ host/backend/gstreamer/gstreamerhelpers.h + } + + +@@ -263,4 +273,4 @@ TRANSLATIONS += config/languages/openterface_en.ts \ + config/languages/openterface_se.ts \ + config/languages/openterface_de.ts \ + config/languages/openterface_zh.ts +- # Add more languages here +\ No newline at end of file ++ # Add more languages here + +From ccd8f51fe510684439edf0d5f8083e4dd1423836 Mon Sep 17 00:00:00 2001 +From: John Lane <1786613+johnlane@users.noreply.github.com> +Date: Wed, 3 Dec 2025 21:26:20 +0000 +Subject: [PATCH 2/2] De-duplicate logging categories + +--- + host/backend/gstreamer/gstreamerhelpers.cpp | 22 ++-- + host/backend/gstreamer/queueconfigurator.cpp | 8 +- + .../backend/gstreamer/videooverlaymanager.cpp | 118 +++++++++--------- + 3 files changed, 74 insertions(+), 74 deletions(-) + +diff --git a/host/backend/gstreamer/gstreamerhelpers.cpp b/host/backend/gstreamer/gstreamerhelpers.cpp +index 6fc1dd6e..4739da17 100644 +--- a/host/backend/gstreamer/gstreamerhelpers.cpp ++++ b/host/backend/gstreamer/gstreamerhelpers.cpp +@@ -4,7 +4,7 @@ + #include + #include + +-Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") ++Q_LOGGING_CATEGORY(log_gstreamer_gstreamerhelpers, "opf.backend.gstreamerhelpers") + + using namespace Openterface::GStreamer::GstHelpers; + +@@ -16,7 +16,7 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme + { + if (!elementPtr) { + if (outError) *outError = QStringLiteral("Element pointer is null"); +- qCWarning(log_gstreamer_backend) << "setPipelineStateWithTimeout: element pointer is null"; ++ qCWarning(log_gstreamer_gstreamerhelpers) << "setPipelineStateWithTimeout: element pointer is null"; + return false; + } + +@@ -24,7 +24,7 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme + + GstStateChangeReturn ret = gst_element_set_state(element, static_cast(targetState)); + if (ret == GST_STATE_CHANGE_FAILURE) { +- qCCritical(log_gstreamer_backend) << "Failed to set element state to" << targetState; ++ qCCritical(log_gstreamer_gstreamerhelpers) << "Failed to set element state to" << targetState; + // Try to pull any error from the bus for diagnostics + // Caller may pass a bus to parseAndLogGstErrorMessage, but we don't have it here. + if (outError) *outError = QStringLiteral("Failed to set state (GST_STATE_CHANGE_FAILURE)"); +@@ -35,13 +35,13 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme + ret = gst_element_get_state(element, &state, &pending, static_cast(timeoutMs) * GST_MSECOND); + if (ret == GST_STATE_CHANGE_FAILURE) { + if (outError) *outError = QStringLiteral("State change failure"); +- qCCritical(log_gstreamer_backend) << "State change failure waiting for target state"; ++ qCCritical(log_gstreamer_gstreamerhelpers) << "State change failure waiting for target state"; + return false; + } + + if (state != static_cast(targetState)) { + if (outError) *outError = QStringLiteral("Element did not reach target state in timeout"); +- qCCritical(log_gstreamer_backend) << "Element failed to reach state" << targetState << "(current:" << state << ", pending:" << pending << ")"; ++ qCCritical(log_gstreamer_gstreamerhelpers) << "Element failed to reach state" << targetState << "(current:" << state << ", pending:" << pending << ")"; + return false; + } + +@@ -51,14 +51,14 @@ bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* eleme + void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr, const char* context) + { + if (!busPtr) { +- qCWarning(log_gstreamer_backend) << "Bus not available for error details" << (context ? context : ""); ++ qCWarning(log_gstreamer_gstreamerhelpers) << "Bus not available for error details" << (context ? context : ""); + return; + } + + GstBus* bus = static_cast(busPtr); + GstMessage* msg = gst_bus_pop_filtered(bus, GST_MESSAGE_ERROR); + if (!msg) { +- qCDebug(log_gstreamer_backend) << "No error message available on bus" << (context ? context : ""); ++ qCDebug(log_gstreamer_gstreamerhelpers) << "No error message available on bus" << (context ? context : ""); + return; + } + +@@ -66,8 +66,8 @@ void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr + gchar* debug_info = nullptr; + gst_message_parse_error(msg, &error, &debug_info); + +- qCCritical(log_gstreamer_backend) << "GStreamer Error:" << (error ? error->message : "Unknown") << (context ? context : ""); +- qCCritical(log_gstreamer_backend) << "Debug info:" << (debug_info ? debug_info : "None"); ++ qCCritical(log_gstreamer_gstreamerhelpers) << "GStreamer Error:" << (error ? error->message : "Unknown") << (context ? context : ""); ++ qCCritical(log_gstreamer_gstreamerhelpers) << "Debug info:" << (debug_info ? debug_info : "None"); + + if (error) g_error_free(error); + if (debug_info) g_free(debug_info); +@@ -79,13 +79,13 @@ void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* busPtr + bool Openterface::GStreamer::GstHelpers::setPipelineStateWithTimeout(void* /*elementPtr*/, int /*targetState*/, int /*timeoutMs*/, QString* outError) + { + if (outError) *outError = QStringLiteral("GStreamer not available in this build"); +- qCWarning(log_gstreamer_backend) << "setPipelineStateWithTimeout called but GStreamer is not compiled in"; ++ qCWarning(log_gstreamer_gstreamerhelpers) << "setPipelineStateWithTimeout called but GStreamer is not compiled in"; + return false; + } + + void Openterface::GStreamer::GstHelpers::parseAndLogGstErrorMessage(void* /*busPtr*/, const char* context) + { +- qCDebug(log_gstreamer_backend) << "GStreamer not compiled in - no bus to parse" << (context ? context : ""); ++ qCDebug(log_gstreamer_gstreamerhelpers) << "GStreamer not compiled in - no bus to parse" << (context ? context : ""); + } + + #endif // HAVE_GSTREAMER +diff --git a/host/backend/gstreamer/queueconfigurator.cpp b/host/backend/gstreamer/queueconfigurator.cpp +index b7bea42e..12290193 100644 +--- a/host/backend/gstreamer/queueconfigurator.cpp ++++ b/host/backend/gstreamer/queueconfigurator.cpp +@@ -8,7 +8,7 @@ + #include + #endif + +-Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") ++Q_LOGGING_CATEGORY(log_gstreamer_queueconfigurator, "opf.backend.queueconfigurator") + + using namespace Openterface::GStreamer; + +@@ -26,10 +26,10 @@ void QueueConfigurator::configureDisplayQueue(void* pipeline) + "max-size-time", G_GUINT64_CONSTANT(100000000), // 100ms + "leaky", 2, // GST_QUEUE_LEAK_DOWNSTREAM + NULL); +- qCDebug(log_gstreamer_backend) << "✓ Configured display queue with higher priority for qtsink"; ++ qCDebug(log_gstreamer_queueconfigurator) << "✓ Configured display queue with higher priority for qtsink"; + gst_object_unref(displayQueue); + } else { +- qCDebug(log_gstreamer_backend) << "Display queue element not found (no named display-queue)"; ++ qCDebug(log_gstreamer_queueconfigurator) << "Display queue element not found (no named display-queue)"; + } + #else + Q_UNUSED(pipeline); +@@ -50,7 +50,7 @@ void QueueConfigurator::configureRecordingQueue(void* pipeline) + "max-size-time", G_GUINT64_CONSTANT(500000000), // 500ms + "leaky", 1, // GST_QUEUE_LEAK_UPSTREAM + NULL); +- qCDebug(log_gstreamer_backend) << "✓ Configured recording queue with lower priority relative to display"; ++ qCDebug(log_gstreamer_queueconfigurator) << "✓ Configured recording queue with lower priority relative to display"; + gst_object_unref(recordingQueue); + } + #else +diff --git a/host/backend/gstreamer/videooverlaymanager.cpp b/host/backend/gstreamer/videooverlaymanager.cpp +index d8bf42f3..2dbe3bbf 100644 +--- a/host/backend/gstreamer/videooverlaymanager.cpp ++++ b/host/backend/gstreamer/videooverlaymanager.cpp +@@ -22,7 +22,7 @@ static int x11_overlay_error_handler_local(Display* display, XErrorEvent* error) + } + #endif + +-Q_LOGGING_CATEGORY(log_gstreamer_backend, "opf.backend.gstreamer") ++Q_LOGGING_CATEGORY(log_gstreamer_videooverlaymanager, "opf.backend.videooverlaymanager") + + using namespace Openterface::GStreamer; + +@@ -30,36 +30,36 @@ bool VideoOverlayManager::embedVideoInWidget(void* pipeline, QWidget* widget) + { + #ifdef HAVE_GSTREAMER + if (!widget || !pipeline) { +- qCWarning(log_gstreamer_backend) << "Cannot embed video: widget or pipeline is null"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: widget or pipeline is null"; + return false; + } + + GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); + if (!videoSink) { +- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; + videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); + if (!videoSink) { +- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; + return false; + } + } + + WId winId = widget->winId(); + if (winId) { +- qCDebug(log_gstreamer_backend) << "Embedding video in widget with window ID:" << winId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in widget with window ID:" << winId; + gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); + gst_object_unref(videoSink); +- qCDebug(log_gstreamer_backend) << "Video embedded in widget successfully"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in widget successfully"; + return true; + } else { +- qCWarning(log_gstreamer_backend) << "Widget window ID is null, cannot embed video"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Widget window ID is null, cannot embed video"; + gst_object_unref(videoSink); + return false; + } + #else + Q_UNUSED(pipeline) + Q_UNUSED(widget) +- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; + return true; + #endif + } +@@ -68,36 +68,36 @@ bool VideoOverlayManager::embedVideoInGraphicsView(void* pipeline, QGraphicsView + { + #ifdef HAVE_GSTREAMER + if (!view || !pipeline) { +- qCWarning(log_gstreamer_backend) << "Cannot embed video: graphics view or pipeline is null"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: graphics view or pipeline is null"; + return false; + } + + GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); + if (!videoSink) { +- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; + videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); + if (!videoSink) { +- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; + return false; + } + } + + WId winId = view->winId(); + if (winId) { +- qCDebug(log_gstreamer_backend) << "Embedding video in graphics view with window ID:" << winId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in graphics view with window ID:" << winId; + gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); + gst_object_unref(videoSink); +- qCDebug(log_gstreamer_backend) << "Video embedded in graphics view successfully"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in graphics view successfully"; + return true; + } else { +- qCWarning(log_gstreamer_backend) << "Graphics view window ID is null, cannot embed video"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics view window ID is null, cannot embed video"; + gst_object_unref(videoSink); + return false; + } + #else + Q_UNUSED(pipeline) + Q_UNUSED(view) +- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; + return true; + #endif + } +@@ -106,36 +106,36 @@ bool VideoOverlayManager::embedVideoInVideoPane(void* pipeline, ::VideoPane* vid + { + #ifdef HAVE_GSTREAMER + if (!videoPane || !pipeline) { +- qCWarning(log_gstreamer_backend) << "Cannot embed video: VideoPane or pipeline is null"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Cannot embed video: VideoPane or pipeline is null"; + return false; + } + + GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); + if (!videoSink) { +- qCWarning(log_gstreamer_backend) << "No video sink element named 'videosink' found in pipeline"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink element named 'videosink' found in pipeline"; + videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); + if (!videoSink) { +- qCWarning(log_gstreamer_backend) << "No video overlay interface found in pipeline either"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video overlay interface found in pipeline either"; + return false; + } + } + + WId winId = videoPane->getVideoOverlayWindowId(); + if (winId) { +- qCDebug(log_gstreamer_backend) << "Embedding video in VideoPane overlay with window ID:" << winId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Embedding video in VideoPane overlay with window ID:" << winId; + gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), winId); + gst_object_unref(videoSink); +- qCDebug(log_gstreamer_backend) << "Video embedded in VideoPane overlay successfully"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Video embedded in VideoPane overlay successfully"; + return true; + } else { +- qCWarning(log_gstreamer_backend) << "VideoPane overlay window ID is null, cannot embed video"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "VideoPane overlay window ID is null, cannot embed video"; + gst_object_unref(videoSink); + return false; + } + #else + Q_UNUSED(pipeline) + Q_UNUSED(videoPane) +- qCDebug(log_gstreamer_backend) << "Using autovideosink for video output (no in-process GStreamer)"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Using autovideosink for video output (no in-process GStreamer)"; + return true; + #endif + } +@@ -144,7 +144,7 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + { + #ifdef HAVE_GSTREAMER + if (!videoSinkPtr || windowId == 0) { +- qCWarning(log_gstreamer_backend) << "Invalid parameters for overlay setup: sink=" << videoSinkPtr << "windowId=" << windowId; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Invalid parameters for overlay setup: sink=" << videoSinkPtr << "windowId=" << windowId; + return false; + } + +@@ -152,7 +152,7 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + + // Check if the sink supports video overlay interface + if (GST_IS_VIDEO_OVERLAY(videoSink)) { +- qCDebug(log_gstreamer_backend) << "Sink supports video overlay - setting up overlay with window ID:" << windowId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Sink supports video overlay - setting up overlay with window ID:" << windowId; + + #ifdef Q_OS_LINUX + // Add X11 error handling to prevent segmentation fault +@@ -175,12 +175,12 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoSink), "force-aspect-ratio")) { + // Allow the sink to stretch to the configured render rectangle so overlay scales to widget size + g_object_set(videoSink, "force-aspect-ratio", FALSE, NULL); +- qCDebug(log_gstreamer_backend) << "Disabled force-aspect-ratio on video sink to allow fill scaling"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Disabled force-aspect-ratio on video sink to allow fill scaling"; + } + + if (g_object_class_find_property(G_OBJECT_GET_CLASS(videoSink), "pixel-aspect-ratio")) { + g_object_set(videoSink, "pixel-aspect-ratio", "1/1", NULL); +- qCDebug(log_gstreamer_backend) << "Set pixel-aspect-ratio to 1:1 on video sink"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Set pixel-aspect-ratio to 1:1 on video sink"; + } + + // Configure render rectangle based on provided targets +@@ -188,13 +188,13 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + QSize widgetSize = videoWidget->size(); + if (widgetSize.width() > 0 && widgetSize.height() > 0) { + gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(videoSink), 0, 0, widgetSize.width(), widgetSize.height()); +- qCDebug(log_gstreamer_backend) << "Set render rectangle to widget size:" << widgetSize; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to widget size:" << widgetSize; + } + } else if (graphicsVideoItem) { + QRectF itemRect = graphicsVideoItem->boundingRect(); + if (itemRect.width() > 0 && itemRect.height() > 0) { + gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(videoSink), 0, 0, (gint)itemRect.width(), (gint)itemRect.height()); +- qCDebug(log_gstreamer_backend) << "Set render rectangle to video item size:" << itemRect.size(); ++ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to video item size:" << itemRect.size(); + } + } + +@@ -205,18 +205,18 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + XCloseDisplay(display); + + if (x11_overlay_error_occurred_local) { +- qCWarning(log_gstreamer_backend) << "X11 error occurred during overlay setup - continuing without embedding"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "X11 error occurred during overlay setup - continuing without embedding"; + } else { +- qCDebug(log_gstreamer_backend) << "Video overlay setup completed successfully"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Video overlay setup completed successfully"; + } + } else if (!old_handler) { +- qCDebug(log_gstreamer_backend) << "Video overlay setup completed (no X11 error handling)"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Video overlay setup completed (no X11 error handling)"; + } + #endif + +- qCDebug(log_gstreamer_backend) << "Overlay setup completed"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Overlay setup completed"; + } catch (...) { +- qCCritical(log_gstreamer_backend) << "Exception during video overlay setup - continuing without embedding"; ++ qCCritical(log_gstreamer_videooverlaymanager) << "Exception during video overlay setup - continuing without embedding"; + #ifdef Q_OS_LINUX + if (display && old_handler) { + XSetErrorHandler(old_handler); +@@ -242,17 +242,17 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + if (gst_iterator_next(iter, &item) == GST_ITERATOR_OK) { + actualSink = GST_ELEMENT(g_value_get_object(&item)); + if (actualSink && GST_IS_VIDEO_OVERLAY(actualSink)) { +- qCDebug(log_gstreamer_backend) << "Found overlay-capable sink inside autovideosink"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Found overlay-capable sink inside autovideosink"; + gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(actualSink), windowId); + // Use target widget size if available to set explicit render rectangle so scaling works + if (videoWidget) { + QSize widgetSize = videoWidget->size(); + if (widgetSize.width() > 0 && widgetSize.height() > 0) { + gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(actualSink), 0, 0, widgetSize.width(), widgetSize.height()); +- qCDebug(log_gstreamer_backend) << "Set render rectangle to widget size for autovideosink child sink:" << widgetSize; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Set render rectangle to widget size for autovideosink child sink:" << widgetSize; + if (g_object_class_find_property(G_OBJECT_GET_CLASS(actualSink), "force-aspect-ratio")) { + g_object_set(actualSink, "force-aspect-ratio", FALSE, NULL); +- qCDebug(log_gstreamer_backend) << "Disabled force-aspect-ratio on autovideosink child sink"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Disabled force-aspect-ratio on autovideosink child sink"; + } + } else { + gst_video_overlay_set_render_rectangle(GST_VIDEO_OVERLAY(actualSink), 0, 0, -1, -1); +@@ -269,18 +269,18 @@ bool VideoOverlayManager::setupVideoOverlay(void* videoSinkPtr, WId windowId, QW + } + gst_iterator_free(iter); + } +- qCDebug(log_gstreamer_backend) << "autovideosink selected sink doesn't support overlay - video will display in separate window"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "autovideosink selected sink doesn't support overlay - video will display in separate window"; + return false; + } + +- qCWarning(log_gstreamer_backend) << "Sink does not support video overlay:" << sinkName; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Sink does not support video overlay:" << sinkName; + return false; + #else + Q_UNUSED(videoSinkPtr) + Q_UNUSED(windowId) + Q_UNUSED(videoWidget) + Q_UNUSED(graphicsVideoItem) +- qCDebug(log_gstreamer_backend) << "No in-process GStreamer - overlay unavailable"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "No in-process GStreamer - overlay unavailable"; + return false; + #endif + } +@@ -300,7 +300,7 @@ bool VideoOverlayManager::setupVideoOverlayForPipeline(void* pipeline, WId windo + gst_object_unref(videoSink); + return ok; + } +- qCWarning(log_gstreamer_backend) << "No video sink found in pipeline"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "No video sink found in pipeline"; + return false; + #else + Q_UNUSED(pipeline) +@@ -315,10 +315,10 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + ::VideoPane* videoPane, + bool &pendingFlag) + { +- qCDebug(log_gstreamer_backend) << "VideoOverlayManager: Completing pending overlay setup..."; ++ qCDebug(log_gstreamer_videooverlaymanager) << "VideoOverlayManager: Completing pending overlay setup..."; + + if (!pendingFlag || !pipeline) { +- qCDebug(log_gstreamer_backend) << "No pending setup or no pipeline"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "No pending setup or no pipeline"; + return false; + } + +@@ -326,7 +326,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + const bool isXcb = platform.contains("xcb", Qt::CaseInsensitive); + const bool hasXDisplay = !qgetenv("DISPLAY").isEmpty(); + if (!isXcb || !hasXDisplay) { +- qCWarning(log_gstreamer_backend) << "Skipping deferred overlay setup: platform is" << platform << "(DISPLAY set:" << hasXDisplay << ")"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Skipping deferred overlay setup: platform is" << platform << "(DISPLAY set:" << hasXDisplay << ")"; + pendingFlag = false; + return false; + } +@@ -335,7 +335,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + + if (videoPane) { + windowId = videoPane->getVideoOverlayWindowId(); +- qCDebug(log_gstreamer_backend) << "Completing overlay setup with VideoPane window ID:" << windowId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with VideoPane window ID:" << windowId; + } else if (graphicsVideoItem) { + if (graphicsVideoItem->scene()) { + QList views = graphicsVideoItem->scene()->views(); +@@ -344,21 +344,21 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + if (auto pane = qobject_cast(view)) { + if (pane->isDirectGStreamerModeEnabled() && pane->getOverlayWidget()) { + windowId = pane->getVideoOverlayWindowId(); +- qCDebug(log_gstreamer_backend) << "Completing overlay setup with VideoPane overlay widget window ID:" << windowId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with VideoPane overlay widget window ID:" << windowId; + } else { +- qCDebug(log_gstreamer_backend) << "VideoPane overlay widget still not ready"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "VideoPane overlay widget still not ready"; + return false; + } + } else { + windowId = view->winId(); +- qCDebug(log_gstreamer_backend) << "Completing overlay setup with graphics view window ID:" << windowId; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Completing overlay setup with graphics view window ID:" << windowId; + } + } else { +- qCWarning(log_gstreamer_backend) << "Graphics video item has no associated view"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics video item has no associated view"; + return false; + } + } else { +- qCWarning(log_gstreamer_backend) << "Graphics video item has no scene"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Graphics video item has no scene"; + return false; + } + } +@@ -367,7 +367,7 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + GstElement* videoSink = gst_bin_get_by_name(GST_BIN(pipeline), "videosink"); + if (!videoSink) { + videoSink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_VIDEO_OVERLAY); +- if (videoSink) qCDebug(log_gstreamer_backend) << "Deferred path: found sink by overlay interface"; ++ if (videoSink) qCDebug(log_gstreamer_videooverlaymanager) << "Deferred path: found sink by overlay interface"; + } + + if (videoSink) { +@@ -384,14 +384,14 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + targetWidget = videoWidget; + } + if (targetWidget) { +- qCDebug(log_gstreamer_backend) << "Deferred: binding qt6videosink to QWidget" << targetWidget; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred: binding qt6videosink to QWidget" << targetWidget; + g_object_set(G_OBJECT(videoSink), "widget", (gpointer)targetWidget, nullptr); + gst_object_unref(videoSink); + pendingFlag = false; +- qCDebug(log_gstreamer_backend) << "Deferred qt6videosink binding completed"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred qt6videosink binding completed"; + return true; + } else { +- qCWarning(log_gstreamer_backend) << "Deferred: no target QWidget available to bind qt6videosink"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred: no target QWidget available to bind qt6videosink"; + } + } + +@@ -399,30 +399,30 @@ bool VideoOverlayManager::completePendingOverlaySetup(void* pipeline, + const bool looksLikeXSink = sinkNameBA.contains("xvimage") || sinkNameBA.contains("ximage"); + + if (!supportsOverlay) { +- qCWarning(log_gstreamer_backend) << "Deferred overlay skipped: sink does not support overlay interface (" << sinkName << ")"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred overlay skipped: sink does not support overlay interface (" << sinkName << ")"; + gst_object_unref(videoSink); + pendingFlag = false; + return false; + } + + if (!looksLikeXSink) { +- qCWarning(log_gstreamer_backend) << "Deferred overlay skipped: sink is not an X sink (" << sinkName << ") on platform" << QGuiApplication::platformName(); ++ qCWarning(log_gstreamer_videooverlaymanager) << "Deferred overlay skipped: sink is not an X sink (" << sinkName << ") on platform" << QGuiApplication::platformName(); + gst_object_unref(videoSink); + pendingFlag = false; + return false; + } + +- qCDebug(log_gstreamer_backend) << "Setting up deferred video overlay with window ID:" << windowId << "using sink" << sinkName; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Setting up deferred video overlay with window ID:" << windowId << "using sink" << sinkName; + gst_video_overlay_set_window_handle(GST_VIDEO_OVERLAY(videoSink), windowId); + gst_object_unref(videoSink); + pendingFlag = false; +- qCDebug(log_gstreamer_backend) << "Deferred overlay setup completed successfully"; ++ qCDebug(log_gstreamer_videooverlaymanager) << "Deferred overlay setup completed successfully"; + return true; + } else { +- qCWarning(log_gstreamer_backend) << "Could not find video sink for deferred overlay setup"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Could not find video sink for deferred overlay setup"; + } + } else { +- qCWarning(log_gstreamer_backend) << "Still no valid window ID available for deferred overlay setup"; ++ qCWarning(log_gstreamer_videooverlaymanager) << "Still no valid window ID available for deferred overlay setup"; + } + + return false; diff --git a/user/openterface-qt/51-openterface-permissions.rules b/backports/openterface-qt/51-openterface-permissions.rules similarity index 100% rename from user/openterface-qt/51-openterface-permissions.rules rename to backports/openterface-qt/51-openterface-permissions.rules diff --git a/user/openterface-qt/APKBUILD b/backports/openterface-qt/APKBUILD similarity index 50% rename from user/openterface-qt/APKBUILD rename to backports/openterface-qt/APKBUILD index cf753a7..a96e328 100644 --- a/user/openterface-qt/APKBUILD +++ b/backports/openterface-qt/APKBUILD @@ -1,29 +1,54 @@ # Maintainer: Antoine Martin (ayakael) pkgname=openterface-qt -pkgver=0.3.13 +pkgver=0.5.7 pkgrel=0 pkgdesc="Openterface Mini-KVM Host Application" -arch="all !armhf" # missing qt6-qtmultimedia +# armhf: missing qt6-qtmultimedia +# riscv64: missing libgtk-3 +arch="all !armhf !riscv64" url="https://openterface.com/" license="AGPL-3.0-only" -depends="qt6-qtmultimedia-ffmpeg hicolor-icon-theme" -makedepends="qt6-qtbase-dev qt6-qtmultimedia-dev qt6-qtserialport-dev qt6-qtsvg-dev qt6-qtmultimedia-dev libusb-dev" +depends=" + gst-plugins-good-qt + hicolor-icon-theme + qt6-qtmultimedia-ffmpeg + " +makedepends=" + cmake + ffmpeg-dev + libgudev-dev + libjpeg-turbo-dev + libusb-dev + libx11-dev + libxv-dev + patchelf + qt6-qtbase-dev + qt6-qtmultimedia-dev + qt6-qtserialport-dev + samurai + v4l-utils-dev +" install="$pkgname.post-install" builddir="$srcdir"/Openterface_QT-$pkgver +options="!check" # No testsuite source=" $pkgname-$pkgver.tar.gz::https://github.com/TechxArtisanStudio/Openterface_QT/archive/$pkgver.tar.gz openterfaceQT.desktop 51-openterface-permissions.rules + 348_address-use-of-deleted-function.patch + 423_deduplicate-logging-categories-and-remove-backslashes.patch + use-system-libs.patch " prepare() { default_prepare mkdir build && cd build - qmake6 .. + # OPENTERFACE_BUILD_STATIC: do not build vendored dependencies + cmake -DOPENTERFACE_BUILD_STATIC=OFF .. } build() { - make -C build + ninja -C build } package() { @@ -33,9 +58,16 @@ package() { install -Dm644 "$builddir"/images/icon_32.png "$pkgdir"/usr/share/icons/hicolor/32x32/apps/openterfaceQT.png install -Dm644 "$builddir"/images/icon_64.png "$pkgdir"/usr/share/icons/hicolor/64x64/apps/openterfaceQT.png install -Dm644 "$builddir"/images/icon_128.png "$pkgdir"/usr/share/icons/hicolor/128x128/apps/openterfaceQT.png + + # vanilla build does not set rpath, since it usually wants to use vendored libs + patchelf --set-rpath '/usr/lib' "$pkgdir"/usr/bin/openterfaceQT } + sha512sums=" -7261ce2875b1617d27945de591c72779d2305889b7f53bb6758cb5e1d4dc01c969fef1638726d868f75e995c44a8e2c453cac45c90cfb3d140b8120523c4038d openterface-qt-0.3.13.tar.gz +996415d6f7d3ed950901c380a0520ddab8c31e8d3c2e2bb3a5f631a5600cace6bcf6bf89871e4e4ef818009eeb08c448fd793e1e4758ecccf1e1a21ff04fd560 openterface-qt-0.5.7.tar.gz e39cfa04cbcb59e8ba54110a28eff41854f73fa7c4baeeed5433907c79781946f12bd3a731763caa1d591e664eab0650bdbd2a844954baa12bb96a76a17c6e4f openterfaceQT.desktop f50d721a6a2d1e0183c81e99230e91e127ee6c6f3243af1cff3e3cb78e2913ebab3346ec8b461a4710220d1ce2e12a7cc960ded6e0dc2def539375c6e737b647 51-openterface-permissions.rules +69b5556ec9e56792e848ea1ff9374e12e6901da821ecd9d6f2f521ea30f48e564c2cd0631fc1360acd6c8c6249cfa718d5baf7ed6929e1e92f63eeaea578bcb3 348_address-use-of-deleted-function.patch +47580d07a2d971ad2010e78373d1abbcbc05b3fbd3a7e466faed50dc9a0d632db30c0a7622e7324aeb0eb38d49e3241cb6cebc835f7adeed977b1dd7b48ea5f6 423_deduplicate-logging-categories-and-remove-backslashes.patch +22ecac74fe0923f39f538a5d587f8c100d9709631a1584bd20646e09dcf777cd3042670d08195626220f0494e5efa9549a299c5e1fd8c42f991ec5746b42cc86 use-system-libs.patch " diff --git a/user/openterface-qt/openterface-qt.post-install b/backports/openterface-qt/openterface-qt.post-install similarity index 100% rename from user/openterface-qt/openterface-qt.post-install rename to backports/openterface-qt/openterface-qt.post-install diff --git a/user/openterface-qt/openterfaceQT.desktop b/backports/openterface-qt/openterfaceQT.desktop similarity index 100% rename from user/openterface-qt/openterfaceQT.desktop rename to backports/openterface-qt/openterfaceQT.desktop diff --git a/backports/openterface-qt/use-system-libs.patch b/backports/openterface-qt/use-system-libs.patch new file mode 100644 index 0000000..a220d5f --- /dev/null +++ b/backports/openterface-qt/use-system-libs.patch @@ -0,0 +1,72 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e0e8ea1..c861725 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -244,7 +244,7 @@ endif() + # Add XCB cursor library for static linking (Linux only) - Legacy support + if(UNIX AND NOT APPLE AND XCB_CURSOR_FOUND) + # This is redundant now but keeping for compatibility +- message(STATUS "XCB cursor already linked via static approach above") ++ target_link_libraries(openterfaceQT PRIVATE X11) + endif() + + # Add TurboJPEG if available +@@ -307,4 +307,4 @@ if(CMAKE_BUILD_TYPE STREQUAL "Release") + endif() + endif() + +-# Qt components already found above +\ No newline at end of file ++# Qt components already found above +diff --git a/cmake/FFmpeg.cmake b/cmake/FFmpeg.cmake +index ef0699e..660e765 100644 +--- a/cmake/FFmpeg.cmake ++++ b/cmake/FFmpeg.cmake +@@ -19,7 +19,7 @@ if(NOT DEFINED FFMPEG_PREFIX) + if(WIN32) + set(FFMPEG_PREFIX "C:/ffmpeg-static" CACHE PATH "FFmpeg installation directory") + else() +- set(FFMPEG_PREFIX "/opt/ffmpeg" CACHE PATH "FFmpeg installation directory") ++ set(FFMPEG_PREFIX "/usr" CACHE PATH "FFmpeg installation directory") + endif() + message(STATUS "Using default FFMPEG_PREFIX: ${FFMPEG_PREFIX}") + endif() +@@ -116,7 +116,7 @@ if(NOT FFMPEG_FOUND) + message(STATUS "FFmpeg search paths: ${FFMPEG_SEARCH_PATHS}") + foreach(SEARCH_PATH ${FFMPEG_SEARCH_PATHS}) + # For static builds, prefer .a files; check common lib directories +- set(LIB_EXTENSIONS ".a") ++ set(LIB_EXTENSIONS ".so") + + # Platform-specific library paths + if(WIN32) +diff --git a/cmake/GStreamer.cmake b/cmake/GStreamer.cmake +index 220e9f5..576535f 100644 +--- a/cmake/GStreamer.cmake ++++ b/cmake/GStreamer.cmake +@@ -316,10 +316,11 @@ else() + # Check for Qt6 plugin availability in system + message(STATUS "Checking for Qt6 GStreamer plugin in system...") + find_file(GSTREAMER_QT6_PLUGIN +- NAMES libgstqt6.so ++ NAMES libgstqml6.so + PATHS + /usr/lib/x86_64-linux-gnu/gstreamer-1.0 + /usr/lib/aarch64-linux-gnu/gstreamer-1.0 ++ /usr/lib/gstreamer-1.0 + /usr/local/lib/gstreamer-1.0 + NO_DEFAULT_PATH + ) +diff --git a/cmake/Resources.cmake b/cmake/Resources.cmake +index 2d28b89..e2009e3 100644 +--- a/cmake/Resources.cmake ++++ b/cmake/Resources.cmake +@@ -336,7 +336,7 @@ install(FILES ${CMAKE_SOURCE_DIR}/com.openterface.openterfaceQT.metainfo.xml + if(COMMAND qt_generate_deploy_app_script) + qt_generate_deploy_app_script( + TARGET openterfaceQT +- FILENAME_VARIABLE deploy_script ++ OUTPUT_SCRIPT deploy_script + NO_UNSUPPORTED_PLATFORM_ERROR + ) + install(SCRIPT ${deploy_script}) From f98506d3bbd4db6516f81098f0b56578ec41c6fa Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Mon, 22 Dec 2025 00:16:33 -0500 Subject: [PATCH 737/738] pmos/*: drop --- .../50-touchscreen.conf | 11 - .../81-libinput-pinenote.rules | 9 - .../82-ebc-rockchip.rules | 2 - pmos/device-pine64-pinenote/APKBUILD | 77 - pmos/device-pine64-pinenote/deviceinfo | 37 - .../local-overrides.quirks | 5 - pmos/device-pine64-pinenote/modules-initfs | 5 - pmos/device-pine64-pinenote/panfrost.conf | 2 - pmos/device-pine64-pinenote/phoc.ini | 6 - pmos/device-pine64-pinenote/rockchip_ebc.conf | 5 - pmos/linux-pine64-pinenote/APKBUILD | 59 - .../config-pine64-pinenote.aarch64 | 7666 ----------------- pmos/pinenote-dbus-service/APKBUILD | 34 - pmos/pinenote-dbus-service/pinenote.initd | 10 - 14 files changed, 7928 deletions(-) delete mode 100644 pmos/device-pine64-pinenote/50-touchscreen.conf delete mode 100644 pmos/device-pine64-pinenote/81-libinput-pinenote.rules delete mode 100644 pmos/device-pine64-pinenote/82-ebc-rockchip.rules delete mode 100644 pmos/device-pine64-pinenote/APKBUILD delete mode 100644 pmos/device-pine64-pinenote/deviceinfo delete mode 100644 pmos/device-pine64-pinenote/local-overrides.quirks delete mode 100644 pmos/device-pine64-pinenote/modules-initfs delete mode 100644 pmos/device-pine64-pinenote/panfrost.conf delete mode 100644 pmos/device-pine64-pinenote/phoc.ini delete mode 100644 pmos/device-pine64-pinenote/rockchip_ebc.conf delete mode 100644 pmos/linux-pine64-pinenote/APKBUILD delete mode 100644 pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 delete mode 100644 pmos/pinenote-dbus-service/APKBUILD delete mode 100644 pmos/pinenote-dbus-service/pinenote.initd diff --git a/pmos/device-pine64-pinenote/50-touchscreen.conf b/pmos/device-pine64-pinenote/50-touchscreen.conf deleted file mode 100644 index f2d643b..0000000 --- a/pmos/device-pine64-pinenote/50-touchscreen.conf +++ /dev/null @@ -1,11 +0,0 @@ -Section "InputClass" - Identifier "evdev touchscreen" - MatchProduct "tt21000" - MatchIsTouchscreen "on" - Driver "evdev" -EndSection -Section "InputClass" - Identifier "RotateTouch" - MatchProduct "w9013" - Option "TransformationMatrix" "-1 0 1 0 -1 1 0 0 1" -EndSection diff --git a/pmos/device-pine64-pinenote/81-libinput-pinenote.rules b/pmos/device-pine64-pinenote/81-libinput-pinenote.rules deleted file mode 100644 index 700c71c..0000000 --- a/pmos/device-pine64-pinenote/81-libinput-pinenote.rules +++ /dev/null @@ -1,9 +0,0 @@ -ACTION=="remove", GOTO="libinput_device_group_end" -KERNEL!="event[0-9]*", GOTO="libinput_device_group_end" - -ATTRS{phys}=="?*", ATTRS{name}=="cyttsp5", ENV{LIBINPUT_DEVICE_GROUP}="pinenotetouch" -ATTRS{phys}=="?*", ATTRS{name}=="w9013 2D1F:0095 Stylus", ENV{LIBINPUT_DEVICE_GROUP}="pinenotetouch" - -ATTRS{phys}=="?*", ATTRS{name}=="cyttsp5", ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1" - -LABEL="libinput_device_group_end" diff --git a/pmos/device-pine64-pinenote/82-ebc-rockchip.rules b/pmos/device-pine64-pinenote/82-ebc-rockchip.rules deleted file mode 100644 index 56c673d..0000000 --- a/pmos/device-pine64-pinenote/82-ebc-rockchip.rules +++ /dev/null @@ -1,2 +0,0 @@ -SUBSYSTEM=="module", KERNEL=="rockchip_ebc", RUN+="/bin/chgrp video /sys/module/%k/parameters/dclk_select /sys/module/%k/parameters/auto_refresh /sys/module/%k/parameters/bw_dither_invert /sys/module/%k/parameters/bw_threshold /sys/module/%k/parameters/bw_mode /sys/module/%k/parameters/diff_mode /sys/module/%k/parameters/direct_mode /sys/module/%k/parameters/limit_fb_blits /sys/module/%k/parameters/panel_reflection /sys/module/%k/parameters/refresh_threshold /sys/module/%k/parameters/refresh_waveform /sys/module/%k/parameters/skip_reset /sys/module/%k/parameters/split_area_limit /sys/module/%k/parameters/default_waveform", RUN+="/bin/chmod g+w /sys/module/%k/parameters/bw_threshold /sys/module/%k/parameters/bw_mode /sys/module/%k/parameters/default_waveform /sys/module/%k/parameters/diff_mode /sys/module/%k/parameters/direct_mode /sys/module/%k/parameters/limit_fb_blits /sys/module/%k/parameters/panel_reflection /sys/module/%k/parameters/refresh_threshold /sys/module/%k/parameters/refresh_waveform /sys/module/%k/parameters/skip_reset /sys/module/%k/parameters/auto_refresh /sys/module/%k/parameters/bw_dither_invert /sys/module/%k/parameters/split_area_limit" -DRIVER=="rockchip-ebc", RUN+="/bin/chgrp video /sys/%p/power/control", RUN+="/bin/chmod g+w /sys/%p/power/control" diff --git a/pmos/device-pine64-pinenote/APKBUILD b/pmos/device-pine64-pinenote/APKBUILD deleted file mode 100644 index 1cf2b3c..0000000 --- a/pmos/device-pine64-pinenote/APKBUILD +++ /dev/null @@ -1,77 +0,0 @@ -# Maintainer: Petr Hodina -pkgname=device-pine64-pinenote -pkgdesc="Pine64 PineNote" -pkgver=2 -pkgrel=9 -url="https://postmarketos.org" -license="MIT" -arch="aarch64" -options="!check !archcheck" -depends=" - u-boot-pine64-pinenote - linux-pine64-pinenote - postmarketos-base -" -makedepends="devicepkg-dev" -source=" - deviceinfo - modules-initfs - phoc.ini - local-overrides.quirks - 50-touchscreen.conf - 81-libinput-pinenote.rules - 82-ebc-rockchip.rules - panfrost.conf - rockchip_ebc.conf -" -subpackages=" - $pkgname-nonfree-firmware:nonfree_firmware - $pkgname-phosh -" - -build() { - devicepkg_build $startdir $pkgname -} - -package() { - devicepkg_package $startdir $pkgname - - install -Dm644 "$srcdir"/local-overrides.quirks \ - -t "$pkgdir"/etc/libinput/ - install -Dm644 "$srcdir"/50-touchscreen.conf \ - -t "$pkgdir"/etc/X11/xorg.conf.d - install -Dm644 "$srcdir"/81-libinput-pinenote.rules \ - -t "$pkgdir"/usr/lib/udev/rules.d - install -Dm644 "$srcdir"/82-ebc-rockchip.rules \ - "$pkgdir"/usr/lib/udev/rules.d - install -Dm644 "$srcdir"/panfrost.conf \ - -t "$pkgdir"/etc/modprobe.d - install -Dm644 "$srcdir"/rockchip_ebc.conf \ - "$pkgdir"/etc/modprobe.d -} - -phosh() { - install_if="$pkgname=$pkgver-r$pkgrel phosh" - depends="postmarketos-theme" - - install -Dm644 "$srcdir"/phoc.ini \ - -t "$subpkgdir"/etc/phosh -} - -nonfree_firmware() { - pkgdesc="WiFi, Bluetooth and display firmware" - depends="firmware-pine64-pinenote linux-firmware" - mkdir "$subpkgdir" -} - -sha512sums=" -5829b9b52206a7520066e4bb3c08c2535d98002a3940664a0239344f5e7522fe7b6a9cb0c0074f9846c7e42c40746f2991f6aeeefeba8efa9140c16630b2893e deviceinfo -473accb3497244742dd9fd15f8a02957a13e08fa4d4393fec185ecbb27f1f17726e4b5ece22da861151f9d358d3266206c647def8aa75adb672b6f1f1904c66f modules-initfs -4bf5158fbd53274a7429e825bb66225001f2403a4851e2d6803323b77d9095738ee3e5340ac85baf3e86bb4f47d38af8cbd78d8a5055c59a62f5b06e722e19cb phoc.ini -1123720962c9c8fec3c50302ca6a3dd56e2907dc9eea361a7b8eb4201b042476633d41a0ee4f6ab61d9c60eeccc894f83491ba9fa309a9bce2f1db0b0341d79d local-overrides.quirks -ac433eebbc35a48561837495997aee4e55510b979bc0d8e3bafb761bc1be5b4bdeed2f456369dcbc582688aefd07c63966b0d72b6ffa99e84cfd868e677f02c8 50-touchscreen.conf -2bc51f200baefc37abfaaad368a911244999e906bdca4b728ac233f49a8fb3ae7206ee3c95cdb20d7dceae2a31d25a57f4e1da4fd67057fd64724b8232e42aed 81-libinput-pinenote.rules -19e922eec89dba419798c4e1dc9b39c040db33986d0969a39a8220c642fa081763f15ff2418115d5a748af4054a1be0784927d1712ea79942c2b237ebab47728 82-ebc-rockchip.rules -6ba6638754e00908243de2f73ed6898dac03638a200dcf7b7cd9684757355ee1eb0ac874af0f971ad2e054c1a8c471867bdaea4d9aaf7eea6d3cf81ac7dd73a2 panfrost.conf -b52d2e7f0c62d7c313b6db9aeb706cdb2596b6aa637aeddb862abf1e256103377fb6267e38cd4285e25d32112acf8d03bbf32ecff7be3dfbb9176209ea7ae283 rockchip_ebc.conf -" diff --git a/pmos/device-pine64-pinenote/deviceinfo b/pmos/device-pine64-pinenote/deviceinfo deleted file mode 100644 index 22b6d1c..0000000 --- a/pmos/device-pine64-pinenote/deviceinfo +++ /dev/null @@ -1,37 +0,0 @@ -# Reference: -# Please use double quotes only. You can source this file in shell -# scripts. - -deviceinfo_format_version="0" -deviceinfo_name="Pine64 PineNote" -deviceinfo_manufacturer="Pine64" -deviceinfo_codename="pine64-pinenote" -deviceinfo_year="2021" -deviceinfo_dtb="rockchip/rk3566-pinenote-v1.2" -deviceinfo_arch="aarch64" -deviceinfo_gpu_accelerated="true" - -# Device related -deviceinfo_chassis="tablet" -deviceinfo_keyboard="false" -deviceinfo_external_storage="false" -deviceinfo_screen_width="1404" -deviceinfo_screen_height="1872" -deviceinfo_getty="ttyS2;1500000" - -# initfs - -# Bootloader related -deviceinfo_flash_method="rkdeveloptool" -deviceinfo_flash_sparse="true" - -deviceinfo_boot_part_start="65536" - -deviceinfo_sd_embed_firmware="u-boot/pine64-pinenote/u-boot-rockchip.bin:1" -deviceinfo_sd_embed_firmware_step_size="32768" - -deviceinfo_flash_rk_partition_kernel="boot" -deviceinfo_flash_rk_partition_rootfs="os1" - -deviceinfo_generate_extlinux_config="true" -deviceinfo_kernel_cmdline="drm.debug=0x0 vt.color=0xf earlycon console=tty0 console=ttyS2,1500000n8 PMOS_FORCE_PARTITION_RESIZE" diff --git a/pmos/device-pine64-pinenote/local-overrides.quirks b/pmos/device-pine64-pinenote/local-overrides.quirks deleted file mode 100644 index 030ca8b..0000000 --- a/pmos/device-pine64-pinenote/local-overrides.quirks +++ /dev/null @@ -1,5 +0,0 @@ -[PineNote] -MatchName=cyttsp5 -AttrPalmPressureThreshold=28 -AttrThumbPressureThreshold=27 -AttrSizeHint=210x157 diff --git a/pmos/device-pine64-pinenote/modules-initfs b/pmos/device-pine64-pinenote/modules-initfs deleted file mode 100644 index 1b49e53..0000000 --- a/pmos/device-pine64-pinenote/modules-initfs +++ /dev/null @@ -1,5 +0,0 @@ -tps65185-regulator -rockchip_ebc -drm_kms_helper -drm_shmem_helper -pvi_waveform diff --git a/pmos/device-pine64-pinenote/panfrost.conf b/pmos/device-pine64-pinenote/panfrost.conf deleted file mode 100644 index 31a1750..0000000 --- a/pmos/device-pine64-pinenote/panfrost.conf +++ /dev/null @@ -1,2 +0,0 @@ -softdep panfrost pre: rockchip_ebc -# blacklist rockchip_ebc diff --git a/pmos/device-pine64-pinenote/phoc.ini b/pmos/device-pine64-pinenote/phoc.ini deleted file mode 100644 index 90d53d8..0000000 --- a/pmos/device-pine64-pinenote/phoc.ini +++ /dev/null @@ -1,6 +0,0 @@ -# /etc/phosh/phoc.ini -# Overwrites values set in /usr/share/phosh/phoc.ini - -# e-ink is an "Unknown" display type for now in mainline -[output:Unknown-1] -scale = 2.0 diff --git a/pmos/device-pine64-pinenote/rockchip_ebc.conf b/pmos/device-pine64-pinenote/rockchip_ebc.conf deleted file mode 100644 index e457ac9..0000000 --- a/pmos/device-pine64-pinenote/rockchip_ebc.conf +++ /dev/null @@ -1,5 +0,0 @@ -# rockchip-rga will crash the kernel on unload at the moment -blacklist rockchip-rga -blacklist ws8100_pen - -options rockchip_ebc direct_mode=0 auto_refresh=1 refresh_threshold=60 split_area_limit=0 panel_reflection=1 prepare_prev_before_a2=0 dclk_select=0 diff --git a/pmos/linux-pine64-pinenote/APKBUILD b/pmos/linux-pine64-pinenote/APKBUILD deleted file mode 100644 index 84f8643..0000000 --- a/pmos/linux-pine64-pinenote/APKBUILD +++ /dev/null @@ -1,59 +0,0 @@ -# Reference: -# Kernel config based on: arch/arm64/configs/(CHANGEME!) - -pkgname=linux-pine64-pinenote -pkgver=6.12.0 -pkgrel=0 -pkgdesc="Pine64 PineNote kernel fork" -arch="aarch64" -_carch="arm64" -_flavor="pine64-pinenote" -url="https://kernel.org" -license="GPL-2.0-only" -options="!strip !check !tracedeps pmb:cross-native" -makedepends=" - bash - bc - bison - devicepkg-dev - findutils - flex - openssl-dev - perl -" - -# Source -_repository="linux" -_commit="9d066a65f5cbaa8cd3bfc73a1b54fbac2d0f76ac" -_config="config-$_flavor.$arch" -source=" - $pkgname-$_commit.tar.gz::https://github.com/m-weigand/linux/archive/$_commit.tar.gz - $_config -" -builddir="$srcdir/$_repository-$_commit" - -prepare() { - default_prepare - REPLACE_GCCH=0 \ - . downstreamkernel_prepare -} - -build() { - unset LDFLAGS - make ARCH="$_carch" CC="${CC:-gcc}" \ - KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-postmarketOS" -} - -package() { - downstreamkernel_package "$builddir" "$pkgdir" "$_carch" "$_flavor" - - make modules_install dtbs_install \ - ARCH="$_carch" \ - INSTALL_MOD_PATH="$pkgdir" \ - INSTALL_DTBS_PATH="$pkgdir/boot/dtbs" -} - -sha512sums=" -d3c2510f9f835a0570fbb812cec2f9e12e402878c1f9f214364ae1918bc4c00f69a1fc5e005cf6b85c0690e6fd5f6ce9e61efd88145a83725ed12b6b8c07b97e linux-pine64-pinenote-9d066a65f5cbaa8cd3bfc73a1b54fbac2d0f76ac.tar.gz -99294bd6c53b1cf3832addbc80ea23b9089bb03463e2a9ebe93ab5feb1b2ff9ee38f158032705429230765bae2df23bb3401ec14902134c80d9dd6e58e188be5 config-pine64-pinenote.aarch64 -" diff --git a/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 b/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 deleted file mode 100644 index 8e3fb39..0000000 --- a/pmos/linux-pine64-pinenote/config-pine64-pinenote.aarch64 +++ /dev/null @@ -1,7666 +0,0 @@ -# -# Automatically generated file; DO NOT EDIT. -# Linux/arm64 6.12.0 Kernel Configuration -# -CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 14.2.0) 14.2.0" -CONFIG_CC_IS_GCC=y -CONFIG_GCC_VERSION=140200 -CONFIG_CLANG_VERSION=0 -CONFIG_AS_IS_GNU=y -CONFIG_AS_VERSION=24200 -CONFIG_LD_IS_BFD=y -CONFIG_LD_VERSION=24200 -CONFIG_LLD_VERSION=0 -CONFIG_RUSTC_VERSION=0 -CONFIG_RUSTC_LLVM_VERSION=0 -CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y -CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y -CONFIG_CC_HAS_ASM_INLINE=y -CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y -CONFIG_PAHOLE_VERSION=0 -CONFIG_IRQ_WORK=y -CONFIG_BUILDTIME_TABLE_SORT=y -CONFIG_THREAD_INFO_IN_TASK=y - -# -# General setup -# -CONFIG_INIT_ENV_ARG_LIMIT=32 -# CONFIG_COMPILE_TEST is not set -# CONFIG_WERROR is not set -CONFIG_LOCALVERSION="" -CONFIG_LOCALVERSION_AUTO=y -CONFIG_BUILD_SALT="" -CONFIG_DEFAULT_INIT="" -CONFIG_DEFAULT_HOSTNAME="pinenote" -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_SYSVIPC_COMPAT=y -CONFIG_POSIX_MQUEUE=y -CONFIG_POSIX_MQUEUE_SYSCTL=y -# CONFIG_WATCH_QUEUE is not set -CONFIG_CROSS_MEMORY_ATTACH=y -# CONFIG_USELIB is not set -# CONFIG_AUDIT is not set -CONFIG_HAVE_ARCH_AUDITSYSCALL=y - -# -# IRQ subsystem -# -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_IRQ_SHOW=y -CONFIG_GENERIC_IRQ_SHOW_LEVEL=y -CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y -CONFIG_GENERIC_IRQ_MIGRATION=y -CONFIG_GENERIC_IRQ_INJECTION=y -CONFIG_HARDIRQS_SW_RESEND=y -CONFIG_GENERIC_IRQ_CHIP=y -CONFIG_IRQ_DOMAIN=y -CONFIG_IRQ_DOMAIN_HIERARCHY=y -CONFIG_GENERIC_IRQ_IPI=y -CONFIG_GENERIC_MSI_IRQ=y -CONFIG_IRQ_MSI_IOMMU=y -CONFIG_GENERIC_IRQ_STAT_SNAPSHOT=y -CONFIG_IRQ_FORCED_THREADING=y -CONFIG_SPARSE_IRQ=y -CONFIG_GENERIC_IRQ_DEBUGFS=y -# end of IRQ subsystem - -CONFIG_GENERIC_TIME_VSYSCALL=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_ARCH_HAS_TICK_BROADCAST=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y -CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y -CONFIG_CONTEXT_TRACKING=y -CONFIG_CONTEXT_TRACKING_IDLE=y - -# -# Timers subsystem -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ_COMMON=y -# CONFIG_HZ_PERIODIC is not set -CONFIG_NO_HZ_IDLE=y -# CONFIG_NO_HZ_FULL is not set -# CONFIG_NO_HZ is not set -CONFIG_HIGH_RES_TIMERS=y -# end of Timers subsystem - -CONFIG_BPF=y -CONFIG_HAVE_EBPF_JIT=y -CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y - -# -# BPF subsystem -# -CONFIG_BPF_SYSCALL=y -CONFIG_BPF_JIT=y -CONFIG_BPF_JIT_ALWAYS_ON=y -CONFIG_BPF_JIT_DEFAULT_ON=y -CONFIG_BPF_UNPRIV_DEFAULT_OFF=y -# CONFIG_BPF_PRELOAD is not set -# end of BPF subsystem - -CONFIG_PREEMPT_NONE_BUILD=y -CONFIG_PREEMPT_NONE=y -# CONFIG_PREEMPT_VOLUNTARY is not set -# CONFIG_PREEMPT is not set -# CONFIG_PREEMPT_RT is not set -# CONFIG_PREEMPT_DYNAMIC is not set - -# -# CPU/Task time and stats accounting -# -CONFIG_TICK_CPU_ACCOUNTING=y -# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set -CONFIG_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_SCHED_AVG_IRQ=y -CONFIG_SCHED_HW_PRESSURE=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -CONFIG_TASKSTATS=y -CONFIG_TASK_DELAY_ACCT=y -CONFIG_TASK_XACCT=y -CONFIG_TASK_IO_ACCOUNTING=y -CONFIG_PSI=y -CONFIG_PSI_DEFAULT_DISABLED=y -# end of CPU/Task time and stats accounting - -CONFIG_CPU_ISOLATION=y - -# -# RCU Subsystem -# -CONFIG_TREE_RCU=y -# CONFIG_RCU_EXPERT is not set -CONFIG_TREE_SRCU=y -CONFIG_TASKS_RCU_GENERIC=y -CONFIG_NEED_TASKS_RCU=y -CONFIG_TASKS_RUDE_RCU=y -CONFIG_TASKS_TRACE_RCU=y -CONFIG_RCU_STALL_COMMON=y -CONFIG_RCU_NEED_SEGCBLIST=y -# end of RCU Subsystem - -CONFIG_IKCONFIG=m -CONFIG_IKCONFIG_PROC=y -# CONFIG_IKHEADERS is not set -CONFIG_LOG_BUF_SHIFT=18 -CONFIG_LOG_CPU_MAX_BUF_SHIFT=0 -# CONFIG_PRINTK_INDEX is not set -CONFIG_GENERIC_SCHED_CLOCK=y - -# -# Scheduler features -# -# CONFIG_UCLAMP_TASK is not set -# end of Scheduler features - -CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y -CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y -CONFIG_CC_HAS_INT128=y -CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" -CONFIG_GCC10_NO_ARRAY_BOUNDS=y -CONFIG_CC_NO_ARRAY_BOUNDS=y -CONFIG_GCC_NO_STRINGOP_OVERFLOW=y -CONFIG_CC_NO_STRINGOP_OVERFLOW=y -CONFIG_ARCH_SUPPORTS_INT128=y -CONFIG_SLAB_OBJ_EXT=y -CONFIG_CGROUPS=y -CONFIG_PAGE_COUNTER=y -# CONFIG_CGROUP_FAVOR_DYNMODS is not set -CONFIG_MEMCG=y -# CONFIG_MEMCG_V1 is not set -CONFIG_BLK_CGROUP=y -CONFIG_CGROUP_WRITEBACK=y -CONFIG_CGROUP_SCHED=y -CONFIG_GROUP_SCHED_WEIGHT=y -CONFIG_FAIR_GROUP_SCHED=y -CONFIG_CFS_BANDWIDTH=y -CONFIG_RT_GROUP_SCHED=y -CONFIG_SCHED_MM_CID=y -CONFIG_CGROUP_PIDS=y -CONFIG_CGROUP_RDMA=y -CONFIG_CGROUP_FREEZER=y -CONFIG_CGROUP_HUGETLB=y -CONFIG_CPUSETS=y -# CONFIG_CPUSETS_V1 is not set -# CONFIG_PROC_PID_CPUSET is not set -CONFIG_CGROUP_DEVICE=y -CONFIG_CGROUP_CPUACCT=y -CONFIG_CGROUP_PERF=y -CONFIG_CGROUP_BPF=y -CONFIG_CGROUP_MISC=y -# CONFIG_CGROUP_DEBUG is not set -CONFIG_SOCK_CGROUP_DATA=y -CONFIG_NAMESPACES=y -CONFIG_UTS_NS=y -CONFIG_TIME_NS=y -CONFIG_IPC_NS=y -CONFIG_USER_NS=y -CONFIG_PID_NS=y -CONFIG_NET_NS=y -CONFIG_CHECKPOINT_RESTORE=y -# CONFIG_SCHED_AUTOGROUP is not set -# CONFIG_RELAY is not set -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -CONFIG_RD_GZIP=y -# CONFIG_RD_BZIP2 is not set -# CONFIG_RD_LZMA is not set -# CONFIG_RD_XZ is not set -# CONFIG_RD_LZO is not set -# CONFIG_RD_LZ4 is not set -CONFIG_RD_ZSTD=y -# CONFIG_BOOT_CONFIG is not set -CONFIG_INITRAMFS_PRESERVE_MTIME=y -CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_LD_ORPHAN_WARN=y -CONFIG_LD_ORPHAN_WARN_LEVEL="warn" -CONFIG_SYSCTL=y -CONFIG_HAVE_UID16=y -CONFIG_SYSCTL_EXCEPTION_TRACE=y -CONFIG_EXPERT=y -# CONFIG_UID16 is not set -CONFIG_MULTIUSER=y -# CONFIG_SGETMASK_SYSCALL is not set -# CONFIG_SYSFS_SYSCALL is not set -CONFIG_FHANDLE=y -CONFIG_POSIX_TIMERS=y -CONFIG_PRINTK=y -CONFIG_BUG=y -# CONFIG_BASE_SMALL is not set -CONFIG_FUTEX=y -CONFIG_FUTEX_PI=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_TIMERFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_AIO=y -CONFIG_IO_URING=y -CONFIG_ADVISE_SYSCALLS=y -CONFIG_MEMBARRIER=y -CONFIG_KCMP=y -CONFIG_RSEQ=y -# CONFIG_DEBUG_RSEQ is not set -CONFIG_CACHESTAT_SYSCALL=y -# CONFIG_PC104 is not set -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_SELFTEST is not set -CONFIG_KALLSYMS_ALL=y -CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y -CONFIG_HAVE_PERF_EVENTS=y - -# -# Kernel Performance Events And Counters -# -CONFIG_PERF_EVENTS=y -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set -# end of Kernel Performance Events And Counters - -# CONFIG_PROFILING is not set -CONFIG_TRACEPOINTS=y - -# -# Kexec and crash features -# -CONFIG_CRASH_RESERVE=y -CONFIG_VMCORE_INFO=y -CONFIG_KEXEC_CORE=y -CONFIG_KEXEC=y -CONFIG_KEXEC_FILE=y -# CONFIG_KEXEC_SIG is not set -CONFIG_CRASH_DUMP=y -# end of Kexec and crash features -# end of General setup - -CONFIG_ARM64=y -CONFIG_RUSTC_SUPPORTS_ARM64=y -CONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_ARGS=y -CONFIG_64BIT=y -CONFIG_MMU=y -CONFIG_ARM64_CONT_PTE_SHIFT=4 -CONFIG_ARM64_CONT_PMD_SHIFT=4 -CONFIG_ARCH_MMAP_RND_BITS_MIN=18 -CONFIG_ARCH_MMAP_RND_BITS_MAX=18 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=11 -CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16 -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000 -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_GENERIC_CSUM=y -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_SMP=y -CONFIG_KERNEL_MODE_NEON=y -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_PGTABLE_LEVELS=5 -CONFIG_ARCH_SUPPORTS_UPROBES=y -CONFIG_ARCH_PROC_KCORE_TEXT=y -CONFIG_BUILTIN_RETURN_ADDRESS_STRIPS_PAC=y - -# -# Platform selection -# -# CONFIG_ARCH_ACTIONS is not set -# CONFIG_ARCH_AIROHA is not set -# CONFIG_ARCH_SUNXI is not set -# CONFIG_ARCH_ALPINE is not set -# CONFIG_ARCH_APPLE is not set -# CONFIG_ARCH_BCM is not set -# CONFIG_ARCH_BERLIN is not set -# CONFIG_ARCH_BITMAIN is not set -# CONFIG_ARCH_EXYNOS is not set -# CONFIG_ARCH_SPARX5 is not set -# CONFIG_ARCH_K3 is not set -# CONFIG_ARCH_LG1K is not set -# CONFIG_ARCH_HISI is not set -# CONFIG_ARCH_KEEMBAY is not set -# CONFIG_ARCH_MEDIATEK is not set -# CONFIG_ARCH_MESON is not set -# CONFIG_ARCH_MVEBU is not set -# CONFIG_ARCH_NXP is not set -# CONFIG_ARCH_MA35 is not set -# CONFIG_ARCH_NPCM is not set -# CONFIG_ARCH_PENSANDO is not set -# CONFIG_ARCH_QCOM is not set -# CONFIG_ARCH_REALTEK is not set -# CONFIG_ARCH_RENESAS is not set -CONFIG_ARCH_ROCKCHIP=y -# CONFIG_ARCH_SEATTLE is not set -# CONFIG_ARCH_INTEL_SOCFPGA is not set -# CONFIG_ARCH_STM32 is not set -# CONFIG_ARCH_SYNQUACER is not set -# CONFIG_ARCH_TEGRA is not set -# CONFIG_ARCH_SPRD is not set -# CONFIG_ARCH_THUNDER is not set -# CONFIG_ARCH_THUNDER2 is not set -# CONFIG_ARCH_UNIPHIER is not set -# CONFIG_ARCH_VEXPRESS is not set -# CONFIG_ARCH_VISCONTI is not set -# CONFIG_ARCH_XGENE is not set -# CONFIG_ARCH_ZYNQMP is not set -# end of Platform selection - -# -# Kernel Features -# - -# -# ARM errata workarounds via the alternatives framework -# -CONFIG_AMPERE_ERRATUM_AC03_CPU_38=y -# CONFIG_ARM64_ERRATUM_826319 is not set -# CONFIG_ARM64_ERRATUM_827319 is not set -# CONFIG_ARM64_ERRATUM_824069 is not set -# CONFIG_ARM64_ERRATUM_819472 is not set -# CONFIG_ARM64_ERRATUM_832075 is not set -CONFIG_ARM64_ERRATUM_1742098=y -# CONFIG_ARM64_ERRATUM_845719 is not set -# CONFIG_ARM64_ERRATUM_843419 is not set -CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y -CONFIG_ARM64_ERRATUM_1024718=y -# CONFIG_ARM64_ERRATUM_1418040 is not set -CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y -# CONFIG_ARM64_ERRATUM_1165522 is not set -# CONFIG_ARM64_ERRATUM_1319367 is not set -CONFIG_ARM64_ERRATUM_1530923=y -# CONFIG_ARM64_ERRATUM_2441007 is not set -# CONFIG_ARM64_ERRATUM_1286807 is not set -# CONFIG_ARM64_ERRATUM_1463225 is not set -# CONFIG_ARM64_ERRATUM_1542419 is not set -# CONFIG_ARM64_ERRATUM_1508412 is not set -# CONFIG_ARM64_ERRATUM_2051678 is not set -CONFIG_ARM64_ERRATUM_2077057=y -CONFIG_ARM64_ERRATUM_2658417=y -# CONFIG_ARM64_ERRATUM_2054223 is not set -# CONFIG_ARM64_ERRATUM_2067961 is not set -# CONFIG_ARM64_ERRATUM_2441009 is not set -CONFIG_ARM64_ERRATUM_2645198=y -CONFIG_ARM64_WORKAROUND_SPECULATIVE_UNPRIV_LOAD=y -CONFIG_ARM64_ERRATUM_2966298=y -CONFIG_ARM64_ERRATUM_3117295=y -CONFIG_ARM64_ERRATUM_3194386=y -# CONFIG_CAVIUM_ERRATUM_22375 is not set -# CONFIG_CAVIUM_ERRATUM_23154 is not set -# CONFIG_CAVIUM_ERRATUM_27456 is not set -# CONFIG_CAVIUM_ERRATUM_30115 is not set -# CONFIG_CAVIUM_TX2_ERRATUM_219 is not set -# CONFIG_FUJITSU_ERRATUM_010001 is not set -# CONFIG_HISILICON_ERRATUM_161600802 is not set -# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set -# CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set -# CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set -# CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set -# CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set -CONFIG_ROCKCHIP_ERRATUM_3588001=y -# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set -# end of ARM errata workarounds via the alternatives framework - -CONFIG_ARM64_4K_PAGES=y -# CONFIG_ARM64_16K_PAGES is not set -# CONFIG_ARM64_64K_PAGES is not set -# CONFIG_ARM64_VA_BITS_39 is not set -# CONFIG_ARM64_VA_BITS_48 is not set -CONFIG_ARM64_VA_BITS_52=y -# CONFIG_ARM64_FORCE_52BIT is not set -CONFIG_ARM64_VA_BITS=52 -CONFIG_ARM64_PA_BITS_52=y -CONFIG_ARM64_PA_BITS=52 -CONFIG_ARM64_LPA2=y -# CONFIG_CPU_BIG_ENDIAN is not set -CONFIG_CPU_LITTLE_ENDIAN=y -CONFIG_SCHED_MC=y -# CONFIG_SCHED_CLUSTER is not set -# CONFIG_SCHED_SMT is not set -CONFIG_NR_CPUS=4 -CONFIG_HOTPLUG_CPU=y -# CONFIG_NUMA is not set -# CONFIG_HZ_100 is not set -# CONFIG_HZ_250 is not set -# CONFIG_HZ_300 is not set -CONFIG_HZ_1000=y -CONFIG_HZ=1000 -CONFIG_SCHED_HRTICK=y -CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_HW_PERF_EVENTS=y -CONFIG_CC_HAVE_SHADOW_CALL_STACK=y -# CONFIG_PARAVIRT is not set -# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set -CONFIG_ARCH_SUPPORTS_KEXEC=y -CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y -CONFIG_ARCH_SELECTS_KEXEC_FILE=y -CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y -CONFIG_ARCH_SUPPORTS_KEXEC_IMAGE_VERIFY_SIG=y -CONFIG_ARCH_DEFAULT_KEXEC_IMAGE_VERIFY_SIG=y -CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y -CONFIG_ARCH_DEFAULT_CRASH_DUMP=y -CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y -CONFIG_TRANS_TABLE=y -# CONFIG_XEN is not set -CONFIG_ARCH_FORCE_MAX_ORDER=10 -# CONFIG_UNMAP_KERNEL_AT_EL0 is not set -CONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y -CONFIG_RODATA_FULL_DEFAULT_ENABLED=y -# CONFIG_ARM64_SW_TTBR0_PAN is not set -# CONFIG_ARM64_TAGGED_ADDR_ABI is not set -CONFIG_COMPAT=y -CONFIG_KUSER_HELPERS=y -# CONFIG_COMPAT_ALIGNMENT_FIXUPS is not set -CONFIG_ARMV8_DEPRECATED=y -# CONFIG_SWP_EMULATION is not set -CONFIG_CP15_BARRIER_EMULATION=y -# CONFIG_SETEND_EMULATION is not set - -# -# ARMv8.1 architectural features -# -# CONFIG_ARM64_HW_AFDBM is not set -CONFIG_ARM64_PAN=y -CONFIG_AS_HAS_LSE_ATOMICS=y -CONFIG_ARM64_LSE_ATOMICS=y -CONFIG_ARM64_USE_LSE_ATOMICS=y -# end of ARMv8.1 architectural features - -# -# ARMv8.2 architectural features -# -CONFIG_AS_HAS_ARMV8_2=y -CONFIG_AS_HAS_SHA3=y -# CONFIG_ARM64_PMEM is not set -CONFIG_ARM64_RAS_EXTN=y -CONFIG_ARM64_CNP=y -# end of ARMv8.2 architectural features - -# -# ARMv8.3 architectural features -# -# CONFIG_ARM64_PTR_AUTH is not set -CONFIG_CC_HAS_BRANCH_PROT_PAC_RET=y -CONFIG_CC_HAS_SIGN_RETURN_ADDRESS=y -CONFIG_AS_HAS_ARMV8_3=y -CONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y -CONFIG_AS_HAS_LDAPR=y -# end of ARMv8.3 architectural features - -# -# ARMv8.4 architectural features -# -# CONFIG_ARM64_AMU_EXTN is not set -CONFIG_AS_HAS_ARMV8_4=y -CONFIG_ARM64_TLB_RANGE=y -# end of ARMv8.4 architectural features - -# -# ARMv8.5 architectural features -# -CONFIG_AS_HAS_ARMV8_5=y -# CONFIG_ARM64_BTI is not set -CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=y -# CONFIG_ARM64_E0PD is not set -CONFIG_ARM64_AS_HAS_MTE=y -# end of ARMv8.5 architectural features - -# -# ARMv8.7 architectural features -# -# CONFIG_ARM64_EPAN is not set -# end of ARMv8.7 architectural features - -# -# ARMv8.9 architectural features -# -CONFIG_ARM64_POE=y -CONFIG_ARCH_PKEY_BITS=3 -# end of ARMv8.9 architectural features - -# CONFIG_ARM64_SVE is not set -# CONFIG_ARM64_PSEUDO_NMI is not set -CONFIG_RELOCATABLE=y -# CONFIG_RANDOMIZE_BASE is not set -CONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=y -# end of Kernel Features - -# -# Boot options -# -CONFIG_CMDLINE="" -CONFIG_EFI_STUB=y -CONFIG_EFI=y -# CONFIG_COMPRESSED_INSTALL is not set -CONFIG_DMI=y -# end of Boot options - -# -# Power management options -# -CONFIG_SUSPEND=y -CONFIG_SUSPEND_FREEZER=y -# CONFIG_SUSPEND_SKIP_SYNC is not set -CONFIG_PM_SLEEP=y -CONFIG_PM_SLEEP_SMP=y -CONFIG_PM_AUTOSLEEP=y -# CONFIG_PM_USERSPACE_AUTOSLEEP is not set -CONFIG_PM_WAKELOCKS=y -CONFIG_PM_WAKELOCKS_LIMIT=100 -CONFIG_PM_WAKELOCKS_GC=y -CONFIG_PM=y -CONFIG_PM_DEBUG=y -CONFIG_PM_ADVANCED_DEBUG=y -CONFIG_PM_TEST_SUSPEND=y -CONFIG_PM_SLEEP_DEBUG=y -CONFIG_PM_CLK=y -CONFIG_PM_GENERIC_DOMAINS=y -CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y -CONFIG_PM_GENERIC_DOMAINS_SLEEP=y -CONFIG_PM_GENERIC_DOMAINS_OF=y -CONFIG_CPU_PM=y -CONFIG_ENERGY_MODEL=y -CONFIG_ARCH_HIBERNATION_POSSIBLE=y -CONFIG_ARCH_SUSPEND_POSSIBLE=y -# end of Power management options - -# -# CPU Power Management -# - -# -# CPU Idle -# -CONFIG_CPU_IDLE=y -CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y -# CONFIG_CPU_IDLE_GOV_LADDER is not set -CONFIG_CPU_IDLE_GOV_MENU=y -CONFIG_CPU_IDLE_GOV_TEO=y -CONFIG_DT_IDLE_STATES=y -CONFIG_DT_IDLE_GENPD=y - -# -# ARM CPU Idle Drivers -# -CONFIG_ARM_PSCI_CPUIDLE=y -CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y -# end of ARM CPU Idle Drivers -# end of CPU Idle - -# -# CPU Frequency scaling -# -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_GOV_ATTR_SET=y -CONFIG_CPU_FREQ_GOV_COMMON=y -CONFIG_CPU_FREQ_STAT=y -# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set -# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set -CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=y -CONFIG_CPU_FREQ_GOV_USERSPACE=y -CONFIG_CPU_FREQ_GOV_ONDEMAND=y -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y -CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y - -# -# CPU frequency scaling drivers -# -CONFIG_CPUFREQ_DT=y -CONFIG_CPUFREQ_DT_PLATDEV=y -CONFIG_ARM_SCMI_CPUFREQ=y -# end of CPU Frequency scaling -# end of CPU Power Management - -CONFIG_ARCH_SUPPORTS_ACPI=y -# CONFIG_ACPI is not set -# CONFIG_VIRTUALIZATION is not set -CONFIG_CPU_MITIGATIONS=y - -# -# General architecture-dependent options -# -CONFIG_HOTPLUG_CORE_SYNC=y -CONFIG_HOTPLUG_CORE_SYNC_DEAD=y -# CONFIG_KPROBES is not set -CONFIG_JUMP_LABEL=y -# CONFIG_STATIC_KEYS_SELFTEST is not set -CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y -CONFIG_HAVE_IOREMAP_PROT=y -CONFIG_HAVE_KPROBES=y -CONFIG_HAVE_KRETPROBES=y -CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y -CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y -CONFIG_HAVE_NMI=y -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y -CONFIG_HAVE_ARCH_TRACEHOOK=y -CONFIG_HAVE_DMA_CONTIGUOUS=y -CONFIG_GENERIC_SMP_IDLE_THREAD=y -CONFIG_GENERIC_IDLE_POLL_SETUP=y -CONFIG_ARCH_HAS_FORTIFY_SOURCE=y -CONFIG_ARCH_HAS_KEEPINITRD=y -CONFIG_ARCH_HAS_SET_MEMORY=y -CONFIG_ARCH_HAS_SET_DIRECT_MAP=y -CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y -CONFIG_ARCH_WANTS_NO_INSTR=y -CONFIG_HAVE_ASM_MODVERSIONS=y -CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y -CONFIG_HAVE_RSEQ=y -CONFIG_HAVE_RUST=y -CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y -CONFIG_HAVE_HW_BREAKPOINT=y -CONFIG_HAVE_PERF_REGS=y -CONFIG_HAVE_PERF_USER_STACK_DUMP=y -CONFIG_HAVE_ARCH_JUMP_LABEL=y -CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y -CONFIG_MMU_GATHER_TABLE_FREE=y -CONFIG_MMU_GATHER_RCU_TABLE_FREE=y -CONFIG_MMU_LAZY_TLB_REFCOUNT=y -CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y -CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=y -CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y -CONFIG_HAVE_CMPXCHG_LOCAL=y -CONFIG_HAVE_CMPXCHG_DOUBLE=y -CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION=y -CONFIG_HAVE_ARCH_SECCOMP=y -CONFIG_HAVE_ARCH_SECCOMP_FILTER=y -CONFIG_SECCOMP=y -CONFIG_SECCOMP_FILTER=y -# CONFIG_SECCOMP_CACHE_DEBUG is not set -CONFIG_HAVE_ARCH_STACKLEAK=y -CONFIG_HAVE_STACKPROTECTOR=y -# CONFIG_STACKPROTECTOR is not set -CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y -# CONFIG_SHADOW_CALL_STACK is not set -CONFIG_ARCH_SUPPORTS_LTO_CLANG=y -CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y -CONFIG_LTO_NONE=y -CONFIG_ARCH_SUPPORTS_CFI_CLANG=y -CONFIG_HAVE_CONTEXT_TRACKING_USER=y -CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y -CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y -CONFIG_HAVE_MOVE_PUD=y -CONFIG_HAVE_MOVE_PMD=y -CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y -CONFIG_HAVE_ARCH_HUGE_VMAP=y -CONFIG_HAVE_ARCH_HUGE_VMALLOC=y -CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y -CONFIG_HAVE_MOD_ARCH_SPECIFIC=y -CONFIG_MODULES_USE_ELF_RELA=y -CONFIG_ARCH_WANTS_EXECMEM_LATE=y -CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y -CONFIG_SOFTIRQ_ON_OWN_STACK=y -CONFIG_ARCH_HAS_ELF_RANDOMIZE=y -CONFIG_HAVE_ARCH_MMAP_RND_BITS=y -CONFIG_ARCH_MMAP_RND_BITS=18 -CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y -CONFIG_ARCH_MMAP_RND_COMPAT_BITS=11 -CONFIG_HAVE_PAGE_SIZE_4KB=y -CONFIG_PAGE_SIZE_4KB=y -CONFIG_PAGE_SIZE_LESS_THAN_64KB=y -CONFIG_PAGE_SIZE_LESS_THAN_256KB=y -CONFIG_PAGE_SHIFT=12 -CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y -CONFIG_CLONE_BACKWARDS=y -CONFIG_OLD_SIGSUSPEND3=y -CONFIG_COMPAT_OLD_SIGACTION=y -CONFIG_COMPAT_32BIT_TIME=y -CONFIG_ARCH_SUPPORTS_RT=y -CONFIG_HAVE_ARCH_VMAP_STACK=y -CONFIG_VMAP_STACK=y -CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y -CONFIG_RANDOMIZE_KSTACK_OFFSET=y -# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set -CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y -CONFIG_STRICT_KERNEL_RWX=y -CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y -CONFIG_STRICT_MODULE_RWX=y -CONFIG_HAVE_ARCH_COMPILER_H=y -CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y -CONFIG_ARCH_USE_MEMREMAP_PROT=y -# CONFIG_LOCK_EVENT_COUNTS is not set -CONFIG_ARCH_HAS_RELR=y -CONFIG_ARCH_HAS_MEM_ENCRYPT=y -CONFIG_HAVE_PREEMPT_DYNAMIC=y -CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y -CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y -CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y -CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y -CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y -CONFIG_ARCH_HAS_HW_PTE_YOUNG=y -CONFIG_ARCH_HAS_KERNEL_FPU_SUPPORT=y - -# -# GCOV-based kernel profiling -# -# CONFIG_GCOV_KERNEL is not set -CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y -# end of GCOV-based kernel profiling - -CONFIG_HAVE_GCC_PLUGINS=y -CONFIG_GCC_PLUGINS=y -# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set -CONFIG_FUNCTION_ALIGNMENT_4B=y -CONFIG_FUNCTION_ALIGNMENT_8B=y -CONFIG_FUNCTION_ALIGNMENT=8 -CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y -CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y -# end of General architecture-dependent options - -CONFIG_RT_MUTEXES=y -CONFIG_MODULES=y -# CONFIG_MODULE_DEBUG is not set -CONFIG_MODULE_FORCE_LOAD=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set -CONFIG_MODVERSIONS=y -CONFIG_ASM_MODVERSIONS=y -# CONFIG_MODULE_SRCVERSION_ALL is not set -# CONFIG_MODULE_SIG is not set -# CONFIG_MODULE_COMPRESS is not set -# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set -CONFIG_MODPROBE_PATH="/sbin/modprobe" -# CONFIG_TRIM_UNUSED_KSYMS is not set -CONFIG_MODULES_TREE_LOOKUP=y -CONFIG_BLOCK=y -CONFIG_BLOCK_LEGACY_AUTOLOAD=y -CONFIG_BLK_CGROUP_RWSTAT=y -CONFIG_BLK_CGROUP_PUNT_BIO=y -CONFIG_BLK_DEV_BSG_COMMON=m -CONFIG_BLK_ICQ=y -# CONFIG_BLK_DEV_BSGLIB is not set -# CONFIG_BLK_DEV_INTEGRITY is not set -CONFIG_BLK_DEV_WRITE_MOUNTED=y -# CONFIG_BLK_DEV_ZONED is not set -CONFIG_BLK_DEV_THROTTLING=y -# CONFIG_BLK_WBT is not set -# CONFIG_BLK_CGROUP_IOLATENCY is not set -# CONFIG_BLK_CGROUP_IOCOST is not set -# CONFIG_BLK_CGROUP_IOPRIO is not set -# CONFIG_BLK_DEBUG_FS is not set -# CONFIG_BLK_SED_OPAL is not set -# CONFIG_BLK_INLINE_ENCRYPTION is not set - -# -# Partition Types -# -# CONFIG_PARTITION_ADVANCED is not set -CONFIG_MSDOS_PARTITION=y -CONFIG_EFI_PARTITION=y -# end of Partition Types - -CONFIG_BLK_MQ_PCI=y -CONFIG_BLK_PM=y -CONFIG_BLOCK_HOLDER_DEPRECATED=y -CONFIG_BLK_MQ_STACKING=y - -# -# IO Schedulers -# -# CONFIG_MQ_IOSCHED_DEADLINE is not set -# CONFIG_MQ_IOSCHED_KYBER is not set -CONFIG_IOSCHED_BFQ=y -CONFIG_BFQ_GROUP_IOSCHED=y -# CONFIG_BFQ_CGROUP_DEBUG is not set -# end of IO Schedulers - -CONFIG_PADATA=y -CONFIG_ASN1=m -CONFIG_ARCH_INLINE_SPIN_TRYLOCK=y -CONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=y -CONFIG_ARCH_INLINE_SPIN_LOCK=y -CONFIG_ARCH_INLINE_SPIN_LOCK_BH=y -CONFIG_ARCH_INLINE_SPIN_LOCK_IRQ=y -CONFIG_ARCH_INLINE_SPIN_LOCK_IRQSAVE=y -CONFIG_ARCH_INLINE_SPIN_UNLOCK=y -CONFIG_ARCH_INLINE_SPIN_UNLOCK_BH=y -CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQ=y -CONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE=y -CONFIG_ARCH_INLINE_READ_LOCK=y -CONFIG_ARCH_INLINE_READ_LOCK_BH=y -CONFIG_ARCH_INLINE_READ_LOCK_IRQ=y -CONFIG_ARCH_INLINE_READ_LOCK_IRQSAVE=y -CONFIG_ARCH_INLINE_READ_UNLOCK=y -CONFIG_ARCH_INLINE_READ_UNLOCK_BH=y -CONFIG_ARCH_INLINE_READ_UNLOCK_IRQ=y -CONFIG_ARCH_INLINE_READ_UNLOCK_IRQRESTORE=y -CONFIG_ARCH_INLINE_WRITE_LOCK=y -CONFIG_ARCH_INLINE_WRITE_LOCK_BH=y -CONFIG_ARCH_INLINE_WRITE_LOCK_IRQ=y -CONFIG_ARCH_INLINE_WRITE_LOCK_IRQSAVE=y -CONFIG_ARCH_INLINE_WRITE_UNLOCK=y -CONFIG_ARCH_INLINE_WRITE_UNLOCK_BH=y -CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQ=y -CONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE=y -CONFIG_INLINE_SPIN_TRYLOCK=y -CONFIG_INLINE_SPIN_TRYLOCK_BH=y -CONFIG_INLINE_SPIN_LOCK=y -CONFIG_INLINE_SPIN_LOCK_BH=y -CONFIG_INLINE_SPIN_LOCK_IRQ=y -CONFIG_INLINE_SPIN_LOCK_IRQSAVE=y -CONFIG_INLINE_SPIN_UNLOCK_BH=y -CONFIG_INLINE_SPIN_UNLOCK_IRQ=y -CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE=y -CONFIG_INLINE_READ_LOCK=y -CONFIG_INLINE_READ_LOCK_BH=y -CONFIG_INLINE_READ_LOCK_IRQ=y -CONFIG_INLINE_READ_LOCK_IRQSAVE=y -CONFIG_INLINE_READ_UNLOCK=y -CONFIG_INLINE_READ_UNLOCK_BH=y -CONFIG_INLINE_READ_UNLOCK_IRQ=y -CONFIG_INLINE_READ_UNLOCK_IRQRESTORE=y -CONFIG_INLINE_WRITE_LOCK=y -CONFIG_INLINE_WRITE_LOCK_BH=y -CONFIG_INLINE_WRITE_LOCK_IRQ=y -CONFIG_INLINE_WRITE_LOCK_IRQSAVE=y -CONFIG_INLINE_WRITE_UNLOCK=y -CONFIG_INLINE_WRITE_UNLOCK_BH=y -CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE=y -CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y -CONFIG_MUTEX_SPIN_ON_OWNER=y -CONFIG_RWSEM_SPIN_ON_OWNER=y -CONFIG_LOCK_SPIN_ON_OWNER=y -CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y -CONFIG_QUEUED_SPINLOCKS=y -CONFIG_ARCH_USE_QUEUED_RWLOCKS=y -CONFIG_QUEUED_RWLOCKS=y -CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y -CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y -CONFIG_FREEZER=y - -# -# Executable file formats -# -CONFIG_BINFMT_ELF=y -CONFIG_COMPAT_BINFMT_ELF=y -CONFIG_ARCH_BINFMT_ELF_STATE=y -CONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=y -CONFIG_ARCH_HAVE_ELF_PROT=y -CONFIG_ARCH_USE_GNU_PROPERTY=y -CONFIG_ELFCORE=y -CONFIG_BINFMT_SCRIPT=y -# CONFIG_BINFMT_MISC is not set -# CONFIG_COREDUMP is not set -# end of Executable file formats - -# -# Memory Management options -# -# CONFIG_SWAP is not set - -# -# Slab allocator options -# -CONFIG_SLUB=y -# CONFIG_SLUB_TINY is not set -CONFIG_SLAB_MERGE_DEFAULT=y -# CONFIG_SLAB_FREELIST_RANDOM is not set -# CONFIG_SLAB_FREELIST_HARDENED is not set -# CONFIG_SLAB_BUCKETS is not set -# CONFIG_SLUB_STATS is not set -CONFIG_SLUB_CPU_PARTIAL=y -# CONFIG_RANDOM_KMALLOC_CACHES is not set -# end of Slab allocator options - -# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set -# CONFIG_COMPAT_BRK is not set -CONFIG_SPARSEMEM=y -CONFIG_SPARSEMEM_EXTREME=y -CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y -CONFIG_SPARSEMEM_VMEMMAP=y -CONFIG_HAVE_GUP_FAST=y -CONFIG_ARCH_KEEP_MEMBLOCK=y -CONFIG_MEMORY_ISOLATION=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y -CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y -# CONFIG_MEMORY_HOTPLUG is not set -CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y -CONFIG_SPLIT_PTE_PTLOCKS=y -CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y -CONFIG_SPLIT_PMD_PTLOCKS=y -CONFIG_COMPACTION=y -CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 -# CONFIG_PAGE_REPORTING is not set -CONFIG_MIGRATION=y -CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y -CONFIG_CONTIG_ALLOC=y -CONFIG_PCP_BATCH_SCALE_MAX=5 -CONFIG_PHYS_ADDR_T_64BIT=y -# CONFIG_KSM is not set -CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 -CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y -# CONFIG_MEMORY_FAILURE is not set -CONFIG_ARCH_WANTS_THP_SWAP=y -# CONFIG_TRANSPARENT_HUGEPAGE is not set -CONFIG_PGTABLE_HAS_HUGE_LEAVES=y -CONFIG_CMA=y -CONFIG_CMA_DEBUGFS=y -CONFIG_CMA_SYSFS=y -CONFIG_CMA_AREAS=8 -CONFIG_GENERIC_EARLY_IOREMAP=y -# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set -# CONFIG_IDLE_PAGE_TRACKING is not set -CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y -CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y -CONFIG_ARCH_HAS_PTE_DEVMAP=y -CONFIG_ARCH_HAS_ZONE_DMA_SET=y -CONFIG_ZONE_DMA=y -CONFIG_ZONE_DMA32=y -CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y -CONFIG_ARCH_HAS_PKEYS=y -CONFIG_VM_EVENT_COUNTERS=y -# CONFIG_PERCPU_STATS is not set -# CONFIG_GUP_TEST is not set -# CONFIG_DMAPOOL_TEST is not set -CONFIG_ARCH_HAS_PTE_SPECIAL=y -CONFIG_MEMFD_CREATE=y -CONFIG_SECRETMEM=y -# CONFIG_ANON_VMA_NAME is not set -CONFIG_HAVE_ARCH_USERFAULTFD_WP=y -CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y -CONFIG_USERFAULTFD=y -CONFIG_PTE_MARKER_UFFD_WP=y -# CONFIG_LRU_GEN is not set -CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y -CONFIG_PER_VMA_LOCK=y -CONFIG_LOCK_MM_AND_FIND_VMA=y -CONFIG_EXECMEM=y - -# -# Data Access Monitoring -# -# CONFIG_DAMON is not set -# end of Data Access Monitoring -# end of Memory Management options - -CONFIG_NET=y -CONFIG_COMPAT_NETLINK_MESSAGES=y -CONFIG_NET_INGRESS=y -CONFIG_NET_EGRESS=y -CONFIG_NET_XGRESS=y -CONFIG_SKB_EXTENSIONS=y -CONFIG_NET_DEVMEM=y - -# -# Networking options -# -CONFIG_PACKET=y -# CONFIG_PACKET_DIAG is not set -CONFIG_UNIX=y -CONFIG_AF_UNIX_OOB=y -# CONFIG_UNIX_DIAG is not set -# CONFIG_TLS is not set -CONFIG_XFRM=y -CONFIG_XFRM_ALGO=m -CONFIG_XFRM_USER=m -# CONFIG_XFRM_INTERFACE is not set -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -# CONFIG_XFRM_STATISTICS is not set -CONFIG_XFRM_ESP=m -# CONFIG_NET_KEY is not set -# CONFIG_XDP_SOCKETS is not set -CONFIG_NET_HANDSHAKE=y -CONFIG_INET=y -# CONFIG_IP_MULTICAST is not set -# CONFIG_IP_ADVANCED_ROUTER is not set -# CONFIG_IP_PNP is not set -# CONFIG_NET_IPIP is not set -# CONFIG_NET_IPGRE_DEMUX is not set -CONFIG_NET_IP_TUNNEL=m -CONFIG_SYN_COOKIES=y -# CONFIG_NET_IPVTI is not set -CONFIG_NET_UDP_TUNNEL=m -# CONFIG_NET_FOU is not set -# CONFIG_INET_AH is not set -CONFIG_INET_ESP=m -# CONFIG_INET_ESP_OFFLOAD is not set -# CONFIG_INET_ESPINTCP is not set -# CONFIG_INET_IPCOMP is not set -CONFIG_INET_TABLE_PERTURB_ORDER=16 -# CONFIG_INET_DIAG is not set -# CONFIG_TCP_CONG_ADVANCED is not set -CONFIG_TCP_CONG_CUBIC=y -CONFIG_DEFAULT_TCP_CONG="cubic" -# CONFIG_TCP_AO is not set -# CONFIG_TCP_MD5SIG is not set -CONFIG_IPV6=y -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -# CONFIG_INET6_AH is not set -# CONFIG_INET6_ESP is not set -# CONFIG_INET6_IPCOMP is not set -# CONFIG_IPV6_MIP6 is not set -# CONFIG_IPV6_ILA is not set -# CONFIG_IPV6_VTI is not set -# CONFIG_IPV6_SIT is not set -# CONFIG_IPV6_TUNNEL is not set -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_IPV6_MROUTE is not set -# CONFIG_IPV6_SEG6_LWTUNNEL is not set -# CONFIG_IPV6_SEG6_HMAC is not set -# CONFIG_IPV6_RPL_LWTUNNEL is not set -# CONFIG_IPV6_IOAM6_LWTUNNEL is not set -# CONFIG_MPTCP is not set -# CONFIG_NETWORK_SECMARK is not set -CONFIG_NET_PTP_CLASSIFY=y -# CONFIG_NETWORK_PHY_TIMESTAMPING is not set -CONFIG_NETFILTER=y -CONFIG_NETFILTER_ADVANCED=y -CONFIG_BRIDGE_NETFILTER=m - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_INGRESS=y -CONFIG_NETFILTER_EGRESS=y -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_FAMILY_BRIDGE=y -CONFIG_NETFILTER_BPF_LINK=y -# CONFIG_NETFILTER_NETLINK_HOOK is not set -# CONFIG_NETFILTER_NETLINK_ACCT is not set -# CONFIG_NETFILTER_NETLINK_QUEUE is not set -# CONFIG_NETFILTER_NETLINK_LOG is not set -# CONFIG_NETFILTER_NETLINK_OSF is not set -CONFIG_NF_CONNTRACK=m -# CONFIG_NF_LOG_SYSLOG is not set -CONFIG_NETFILTER_CONNCOUNT=m -# CONFIG_NF_CONNTRACK_MARK is not set -# CONFIG_NF_CONNTRACK_ZONES is not set -# CONFIG_NF_CONNTRACK_PROCFS is not set -# CONFIG_NF_CONNTRACK_EVENTS is not set -# CONFIG_NF_CONNTRACK_TIMEOUT is not set -# CONFIG_NF_CONNTRACK_TIMESTAMP is not set -# CONFIG_NF_CONNTRACK_LABELS is not set -CONFIG_NF_CT_PROTO_DCCP=y -CONFIG_NF_CT_PROTO_SCTP=y -CONFIG_NF_CT_PROTO_UDPLITE=y -# CONFIG_NF_CONNTRACK_AMANDA is not set -# CONFIG_NF_CONNTRACK_FTP is not set -# CONFIG_NF_CONNTRACK_H323 is not set -# CONFIG_NF_CONNTRACK_IRC is not set -# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set -# CONFIG_NF_CONNTRACK_SNMP is not set -# CONFIG_NF_CONNTRACK_PPTP is not set -# CONFIG_NF_CONNTRACK_SANE is not set -# CONFIG_NF_CONNTRACK_SIP is not set -# CONFIG_NF_CONNTRACK_TFTP is not set -# CONFIG_NF_CT_NETLINK is not set -CONFIG_NF_NAT=m -CONFIG_NF_NAT_REDIRECT=y -CONFIG_NF_NAT_MASQUERADE=y -CONFIG_NF_TABLES=m -# CONFIG_NF_TABLES_INET is not set -# CONFIG_NF_TABLES_NETDEV is not set -# CONFIG_NFT_NUMGEN is not set -CONFIG_NFT_CT=m -CONFIG_NFT_CONNLIMIT=m -# CONFIG_NFT_LOG is not set -# CONFIG_NFT_LIMIT is not set -CONFIG_NFT_MASQ=m -CONFIG_NFT_REDIR=m -# CONFIG_NFT_TUNNEL is not set -# CONFIG_NFT_QUOTA is not set -CONFIG_NFT_REJECT=m -CONFIG_NFT_COMPAT=m -CONFIG_NFT_HASH=m -# CONFIG_NFT_XFRM is not set -# CONFIG_NFT_SOCKET is not set -# CONFIG_NFT_OSF is not set -# CONFIG_NFT_TPROXY is not set -# CONFIG_NFT_SYNPROXY is not set -# CONFIG_NF_FLOW_TABLE is not set -CONFIG_NETFILTER_XTABLES=y -# CONFIG_NETFILTER_XTABLES_COMPAT is not set - -# -# Xtables combined modules -# -CONFIG_NETFILTER_XT_MARK=m -# CONFIG_NETFILTER_XT_CONNMARK is not set - -# -# Xtables targets -# -CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m -# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set -# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set -# CONFIG_NETFILTER_XT_TARGET_CT is not set -# CONFIG_NETFILTER_XT_TARGET_DSCP is not set -# CONFIG_NETFILTER_XT_TARGET_HL is not set -# CONFIG_NETFILTER_XT_TARGET_HMARK is not set -# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set -# CONFIG_NETFILTER_XT_TARGET_LED is not set -# CONFIG_NETFILTER_XT_TARGET_LOG is not set -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_NAT=m -# CONFIG_NETFILTER_XT_TARGET_NETMAP is not set -# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set -# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set -# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set -CONFIG_NETFILTER_XT_TARGET_REDIRECT=m -CONFIG_NETFILTER_XT_TARGET_MASQUERADE=m -# CONFIG_NETFILTER_XT_TARGET_TEE is not set -# CONFIG_NETFILTER_XT_TARGET_TPROXY is not set -# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set -# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set - -# -# Xtables matches -# -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m -# CONFIG_NETFILTER_XT_MATCH_BPF is not set -# CONFIG_NETFILTER_XT_MATCH_CGROUP is not set -# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set -# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set -# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set -# CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set -# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set -# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -# CONFIG_NETFILTER_XT_MATCH_CPU is not set -# CONFIG_NETFILTER_XT_MATCH_DCCP is not set -# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set -# CONFIG_NETFILTER_XT_MATCH_DSCP is not set -# CONFIG_NETFILTER_XT_MATCH_ECN is not set -# CONFIG_NETFILTER_XT_MATCH_ESP is not set -# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set -# CONFIG_NETFILTER_XT_MATCH_HELPER is not set -# CONFIG_NETFILTER_XT_MATCH_HL is not set -# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set -# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set -CONFIG_NETFILTER_XT_MATCH_IPVS=m -# CONFIG_NETFILTER_XT_MATCH_L2TP is not set -# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set -# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set -# CONFIG_NETFILTER_XT_MATCH_MAC is not set -# CONFIG_NETFILTER_XT_MATCH_MARK is not set -# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set -# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set -# CONFIG_NETFILTER_XT_MATCH_OSF is not set -# CONFIG_NETFILTER_XT_MATCH_OWNER is not set -# CONFIG_NETFILTER_XT_MATCH_POLICY is not set -# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set -# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set -# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set -# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set -# CONFIG_NETFILTER_XT_MATCH_REALM is not set -# CONFIG_NETFILTER_XT_MATCH_RECENT is not set -# CONFIG_NETFILTER_XT_MATCH_SCTP is not set -# CONFIG_NETFILTER_XT_MATCH_SOCKET is not set -# CONFIG_NETFILTER_XT_MATCH_STATE is not set -# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set -# CONFIG_NETFILTER_XT_MATCH_STRING is not set -# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set -# CONFIG_NETFILTER_XT_MATCH_TIME is not set -# CONFIG_NETFILTER_XT_MATCH_U32 is not set -# end of Core Netfilter Configuration - -# CONFIG_IP_SET is not set -CONFIG_IP_VS=m -# CONFIG_IP_VS_IPV6 is not set -# CONFIG_IP_VS_DEBUG is not set -CONFIG_IP_VS_TAB_BITS=12 - -# -# IPVS transport protocol load balancing support -# -CONFIG_IP_VS_PROTO_TCP=y -CONFIG_IP_VS_PROTO_UDP=y -# CONFIG_IP_VS_PROTO_ESP is not set -# CONFIG_IP_VS_PROTO_AH is not set -# CONFIG_IP_VS_PROTO_SCTP is not set - -# -# IPVS scheduler -# -CONFIG_IP_VS_RR=m -# CONFIG_IP_VS_WRR is not set -# CONFIG_IP_VS_LC is not set -# CONFIG_IP_VS_WLC is not set -# CONFIG_IP_VS_FO is not set -# CONFIG_IP_VS_OVF is not set -# CONFIG_IP_VS_LBLC is not set -# CONFIG_IP_VS_LBLCR is not set -# CONFIG_IP_VS_DH is not set -# CONFIG_IP_VS_SH is not set -# CONFIG_IP_VS_MH is not set -# CONFIG_IP_VS_SED is not set -# CONFIG_IP_VS_NQ is not set -# CONFIG_IP_VS_TWOS is not set - -# -# IPVS SH scheduler -# -CONFIG_IP_VS_SH_TAB_BITS=8 - -# -# IPVS MH scheduler -# -CONFIG_IP_VS_MH_TAB_INDEX=12 - -# -# IPVS application helper -# -CONFIG_IP_VS_NFCT=y - -# -# IP: Netfilter Configuration -# -CONFIG_NF_DEFRAG_IPV4=m -CONFIG_IP_NF_IPTABLES_LEGACY=m -# CONFIG_NF_SOCKET_IPV4 is not set -# CONFIG_NF_TPROXY_IPV4 is not set -# CONFIG_NF_TABLES_IPV4 is not set -# CONFIG_NF_TABLES_ARP is not set -# CONFIG_NF_DUP_IPV4 is not set -# CONFIG_NF_LOG_ARP is not set -# CONFIG_NF_LOG_IPV4 is not set -# CONFIG_NF_REJECT_IPV4 is not set -CONFIG_IP_NF_IPTABLES=m -# CONFIG_IP_NF_MATCH_AH is not set -# CONFIG_IP_NF_MATCH_ECN is not set -# CONFIG_IP_NF_MATCH_RPFILTER is not set -# CONFIG_IP_NF_MATCH_TTL is not set -CONFIG_IP_NF_FILTER=m -# CONFIG_IP_NF_TARGET_REJECT is not set -# CONFIG_IP_NF_TARGET_SYNPROXY is not set -CONFIG_IP_NF_NAT=m -CONFIG_IP_NF_TARGET_MASQUERADE=m -# CONFIG_IP_NF_TARGET_NETMAP is not set -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_MANGLE=m -# CONFIG_IP_NF_TARGET_ECN is not set -# CONFIG_IP_NF_TARGET_TTL is not set -# CONFIG_IP_NF_RAW is not set -# CONFIG_IP_NF_ARPFILTER is not set -# end of IP: Netfilter Configuration - -# -# IPv6: Netfilter Configuration -# -# CONFIG_NF_SOCKET_IPV6 is not set -# CONFIG_NF_TPROXY_IPV6 is not set -# CONFIG_NF_TABLES_IPV6 is not set -# CONFIG_NF_DUP_IPV6 is not set -# CONFIG_NF_REJECT_IPV6 is not set -# CONFIG_NF_LOG_IPV6 is not set -CONFIG_IP6_NF_IPTABLES=m -# CONFIG_IP6_NF_MATCH_AH is not set -# CONFIG_IP6_NF_MATCH_EUI64 is not set -# CONFIG_IP6_NF_MATCH_FRAG is not set -# CONFIG_IP6_NF_MATCH_OPTS is not set -# CONFIG_IP6_NF_MATCH_HL is not set -# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set -# CONFIG_IP6_NF_MATCH_MH is not set -# CONFIG_IP6_NF_MATCH_RPFILTER is not set -# CONFIG_IP6_NF_MATCH_RT is not set -# CONFIG_IP6_NF_MATCH_SRH is not set -# CONFIG_IP6_NF_FILTER is not set -# CONFIG_IP6_NF_TARGET_REJECT is not set -# CONFIG_IP6_NF_TARGET_SYNPROXY is not set -# CONFIG_IP6_NF_MANGLE is not set -# CONFIG_IP6_NF_RAW is not set -# CONFIG_IP6_NF_NAT is not set -# CONFIG_IP6_NF_TARGET_NPT is not set -# end of IPv6: Netfilter Configuration - -CONFIG_NF_DEFRAG_IPV6=m -# CONFIG_NF_TABLES_BRIDGE is not set -# CONFIG_NF_CONNTRACK_BRIDGE is not set -# CONFIG_BRIDGE_NF_EBTABLES is not set -# CONFIG_IP_DCCP is not set -# CONFIG_IP_SCTP is not set -# CONFIG_RDS is not set -# CONFIG_TIPC is not set -# CONFIG_ATM is not set -# CONFIG_L2TP is not set -CONFIG_STP=m -CONFIG_BRIDGE=m -CONFIG_BRIDGE_IGMP_SNOOPING=y -CONFIG_BRIDGE_VLAN_FILTERING=y -# CONFIG_BRIDGE_MRP is not set -# CONFIG_BRIDGE_CFM is not set -# CONFIG_NET_DSA is not set -CONFIG_VLAN_8021Q=m -# CONFIG_VLAN_8021Q_GVRP is not set -# CONFIG_VLAN_8021Q_MVRP is not set -CONFIG_LLC=m -# CONFIG_LLC2 is not set -# CONFIG_ATALK is not set -# CONFIG_X25 is not set -# CONFIG_LAPB is not set -# CONFIG_PHONET is not set -# CONFIG_6LOWPAN is not set -# CONFIG_IEEE802154 is not set -CONFIG_NET_SCHED=y - -# -# Queueing/Scheduling -# -# CONFIG_NET_SCH_HTB is not set -# CONFIG_NET_SCH_HFSC is not set -# CONFIG_NET_SCH_PRIO is not set -# CONFIG_NET_SCH_MULTIQ is not set -# CONFIG_NET_SCH_RED is not set -# CONFIG_NET_SCH_SFB is not set -# CONFIG_NET_SCH_SFQ is not set -# CONFIG_NET_SCH_TEQL is not set -# CONFIG_NET_SCH_TBF is not set -# CONFIG_NET_SCH_CBS is not set -# CONFIG_NET_SCH_ETF is not set -# CONFIG_NET_SCH_TAPRIO is not set -# CONFIG_NET_SCH_GRED is not set -# CONFIG_NET_SCH_NETEM is not set -# CONFIG_NET_SCH_DRR is not set -# CONFIG_NET_SCH_MQPRIO is not set -# CONFIG_NET_SCH_SKBPRIO is not set -# CONFIG_NET_SCH_CHOKE is not set -# CONFIG_NET_SCH_QFQ is not set -# CONFIG_NET_SCH_CODEL is not set -# CONFIG_NET_SCH_FQ_CODEL is not set -# CONFIG_NET_SCH_CAKE is not set -# CONFIG_NET_SCH_FQ is not set -# CONFIG_NET_SCH_HHF is not set -# CONFIG_NET_SCH_PIE is not set -# CONFIG_NET_SCH_PLUG is not set -# CONFIG_NET_SCH_ETS is not set -# CONFIG_NET_SCH_DEFAULT is not set - -# -# Classification -# -CONFIG_NET_CLS=y -# CONFIG_NET_CLS_BASIC is not set -# CONFIG_NET_CLS_ROUTE4 is not set -# CONFIG_NET_CLS_FW is not set -# CONFIG_NET_CLS_U32 is not set -# CONFIG_NET_CLS_FLOW is not set -CONFIG_NET_CLS_CGROUP=m -# CONFIG_NET_CLS_BPF is not set -# CONFIG_NET_CLS_FLOWER is not set -# CONFIG_NET_CLS_MATCHALL is not set -# CONFIG_NET_EMATCH is not set -# CONFIG_NET_CLS_ACT is not set -CONFIG_NET_SCH_FIFO=y -# CONFIG_DCB is not set -CONFIG_DNS_RESOLVER=m -# CONFIG_BATMAN_ADV is not set -# CONFIG_OPENVSWITCH is not set -# CONFIG_VSOCKETS is not set -CONFIG_NETLINK_DIAG=y -# CONFIG_MPLS is not set -# CONFIG_NET_NSH is not set -# CONFIG_HSR is not set -# CONFIG_NET_SWITCHDEV is not set -CONFIG_NET_L3_MASTER_DEV=y -# CONFIG_QRTR is not set -# CONFIG_NET_NCSI is not set -CONFIG_PCPU_DEV_REFCNT=y -CONFIG_MAX_SKB_FRAGS=17 -CONFIG_RPS=y -CONFIG_RFS_ACCEL=y -CONFIG_SOCK_RX_QUEUE_MAPPING=y -CONFIG_XPS=y -CONFIG_CGROUP_NET_PRIO=y -CONFIG_CGROUP_NET_CLASSID=y -CONFIG_NET_RX_BUSY_POLL=y -CONFIG_BQL=y -# CONFIG_BPF_STREAM_PARSER is not set -CONFIG_NET_FLOW_LIMIT=y - -# -# Network testing -# -# CONFIG_NET_PKTGEN is not set -# CONFIG_NET_DROP_MONITOR is not set -# end of Network testing -# end of Networking options - -# CONFIG_HAMRADIO is not set -# CONFIG_CAN is not set -CONFIG_BT=m -CONFIG_BT_BREDR=y -CONFIG_BT_RFCOMM=y -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_HIDP=m -CONFIG_BT_LE=y -CONFIG_BT_LE_L2CAP_ECRED=y -CONFIG_BT_LEDS=y -# CONFIG_BT_MSFTEXT is not set -# CONFIG_BT_AOSPEXT is not set -CONFIG_BT_DEBUGFS=y -# CONFIG_BT_SELFTEST is not set - -# -# Bluetooth device drivers -# -CONFIG_BT_BCM=m -# CONFIG_BT_HCIBTUSB is not set -# CONFIG_BT_HCIBTSDIO is not set -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_SERDEV=y -CONFIG_BT_HCIUART_H4=y -# CONFIG_BT_HCIUART_NOKIA is not set -# CONFIG_BT_HCIUART_BCSP is not set -# CONFIG_BT_HCIUART_ATH3K is not set -# CONFIG_BT_HCIUART_LL is not set -# CONFIG_BT_HCIUART_3WIRE is not set -# CONFIG_BT_HCIUART_INTEL is not set -CONFIG_BT_HCIUART_BCM=y -# CONFIG_BT_HCIUART_RTL is not set -# CONFIG_BT_HCIUART_QCA is not set -# CONFIG_BT_HCIUART_AG6XX is not set -# CONFIG_BT_HCIUART_MRVL is not set -# CONFIG_BT_HCIUART_AML is not set -# CONFIG_BT_HCIBCM203X is not set -# CONFIG_BT_HCIBCM4377 is not set -# CONFIG_BT_HCIBPA10X is not set -# CONFIG_BT_HCIBFUSB is not set -# CONFIG_BT_HCIVHCI is not set -# CONFIG_BT_MRVL is not set -# CONFIG_BT_MTKSDIO is not set -# CONFIG_BT_MTKUART is not set -# CONFIG_BT_NXPUART is not set -# CONFIG_BT_INTEL_PCIE is not set -# end of Bluetooth device drivers - -# CONFIG_AF_RXRPC is not set -# CONFIG_AF_KCM is not set -# CONFIG_MCTP is not set -CONFIG_WIRELESS=y -CONFIG_WEXT_CORE=y -CONFIG_WEXT_PROC=y -CONFIG_CFG80211=m -# CONFIG_NL80211_TESTMODE is not set -# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -CONFIG_CFG80211_CERTIFICATION_ONUS=y -# CONFIG_CFG80211_REQUIRE_SIGNED_REGDB is not set -# CONFIG_CFG80211_REG_CELLULAR_HINTS is not set -# CONFIG_CFG80211_REG_RELAX_NO_IR is not set -CONFIG_CFG80211_DEFAULT_PS=y -CONFIG_CFG80211_DEBUGFS=y -# CONFIG_CFG80211_CRDA_SUPPORT is not set -CONFIG_CFG80211_WEXT=y -CONFIG_MAC80211=m -# CONFIG_MAC80211_RC_MINSTREL is not set -CONFIG_MAC80211_RC_DEFAULT="" - -# -# Some wireless drivers require a rate control algorithm -# -# CONFIG_MAC80211_MESH is not set -CONFIG_MAC80211_LEDS=y -CONFIG_MAC80211_DEBUGFS=y -# CONFIG_MAC80211_MESSAGE_TRACING is not set -# CONFIG_MAC80211_DEBUG_MENU is not set -CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 -CONFIG_RFKILL=m -CONFIG_RFKILL_LEDS=y -CONFIG_RFKILL_INPUT=y -# CONFIG_RFKILL_GPIO is not set -# CONFIG_NET_9P is not set -# CONFIG_CAIF is not set -# CONFIG_CEPH_LIB is not set -# CONFIG_NFC is not set -# CONFIG_PSAMPLE is not set -# CONFIG_NET_IFE is not set -# CONFIG_LWTUNNEL is not set -CONFIG_DST_CACHE=y -CONFIG_GRO_CELLS=y -CONFIG_NET_SELFTESTS=y -CONFIG_NET_SOCK_MSG=y -CONFIG_PAGE_POOL=y -# CONFIG_PAGE_POOL_STATS is not set -# CONFIG_FAILOVER is not set -# CONFIG_ETHTOOL_NETLINK is not set - -# -# Device Drivers -# -CONFIG_ARM_AMBA=y -CONFIG_HAVE_PCI=y -CONFIG_GENERIC_PCI_IOMAP=y -CONFIG_PCI=y -CONFIG_PCI_DOMAINS=y -CONFIG_PCI_DOMAINS_GENERIC=y -CONFIG_PCI_SYSCALL=y -# CONFIG_PCIEPORTBUS is not set -CONFIG_PCIEASPM=y -CONFIG_PCIEASPM_DEFAULT=y -# CONFIG_PCIEASPM_POWERSAVE is not set -# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set -# CONFIG_PCIEASPM_PERFORMANCE is not set -# CONFIG_PCIE_PTM is not set -CONFIG_PCI_MSI=y -CONFIG_PCI_QUIRKS=y -# CONFIG_PCI_DEBUG is not set -# CONFIG_PCI_STUB is not set -# CONFIG_PCI_IOV is not set -# CONFIG_PCI_NPEM is not set -# CONFIG_PCI_PRI is not set -# CONFIG_PCI_PASID is not set -CONFIG_PCI_LABEL=y -# CONFIG_PCI_DYNAMIC_OF_NODES is not set -# CONFIG_PCIE_BUS_TUNE_OFF is not set -CONFIG_PCIE_BUS_DEFAULT=y -# CONFIG_PCIE_BUS_SAFE is not set -# CONFIG_PCIE_BUS_PERFORMANCE is not set -# CONFIG_PCIE_BUS_PEER2PEER is not set -CONFIG_VGA_ARB=y -CONFIG_VGA_ARB_MAX_GPUS=16 -# CONFIG_HOTPLUG_PCI is not set - -# -# PCI controller drivers -# -# CONFIG_PCIE_ALTERA is not set -# CONFIG_PCI_HOST_THUNDER_PEM is not set -# CONFIG_PCI_HOST_THUNDER_ECAM is not set -# CONFIG_PCI_FTPCI100 is not set -# CONFIG_PCI_HOST_GENERIC is not set -# CONFIG_PCIE_ROCKCHIP_HOST is not set -# CONFIG_PCI_XGENE is not set -# CONFIG_PCIE_XILINX is not set - -# -# Cadence-based PCIe controllers -# -# CONFIG_PCIE_CADENCE_PLAT_HOST is not set -# end of Cadence-based PCIe controllers - -# -# DesignWare-based PCIe controllers -# -CONFIG_PCIE_DW=y -CONFIG_PCIE_DW_HOST=y -# CONFIG_PCIE_AL is not set -# CONFIG_PCI_MESON is not set -# CONFIG_PCI_HISI is not set -# CONFIG_PCIE_KIRIN is not set -# CONFIG_PCIE_DW_PLAT_HOST is not set -CONFIG_PCIE_ROCKCHIP_DW=y -CONFIG_PCIE_ROCKCHIP_DW_HOST=y -# end of DesignWare-based PCIe controllers - -# -# Mobiveil-based PCIe controllers -# -# end of Mobiveil-based PCIe controllers - -# -# PLDA-based PCIe controllers -# -# CONFIG_PCIE_MICROCHIP_HOST is not set -# end of PLDA-based PCIe controllers -# end of PCI controller drivers - -# -# PCI Endpoint -# -# CONFIG_PCI_ENDPOINT is not set -# end of PCI Endpoint - -# -# PCI switch controller drivers -# -# CONFIG_PCI_SW_SWITCHTEC is not set -# end of PCI switch controller drivers - -# CONFIG_CXL_BUS is not set -# CONFIG_PCCARD is not set -# CONFIG_RAPIDIO is not set - -# -# Generic Driver Options -# -CONFIG_UEVENT_HELPER=y -CONFIG_UEVENT_HELPER_PATH="" -CONFIG_DEVTMPFS=y -CONFIG_DEVTMPFS_MOUNT=y -# CONFIG_DEVTMPFS_SAFE is not set -CONFIG_STANDALONE=y -CONFIG_PREVENT_FIRMWARE_BUILD=y - -# -# Firmware loader -# -CONFIG_FW_LOADER=y -CONFIG_FW_LOADER_DEBUG=y -CONFIG_FW_LOADER_PAGED_BUF=y -CONFIG_EXTRA_FIRMWARE="" -# CONFIG_FW_LOADER_USER_HELPER is not set -CONFIG_FW_LOADER_COMPRESS=y -CONFIG_FW_LOADER_COMPRESS_XZ=y -CONFIG_FW_LOADER_COMPRESS_ZSTD=y -# CONFIG_FW_CACHE is not set -# CONFIG_FW_UPLOAD is not set -# end of Firmware loader - -CONFIG_WANT_DEV_COREDUMP=y -# CONFIG_ALLOW_DEV_COREDUMP is not set -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set -# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set -CONFIG_GENERIC_CPU_DEVICES=y -CONFIG_GENERIC_CPU_AUTOPROBE=y -CONFIG_GENERIC_CPU_VULNERABILITIES=y -CONFIG_REGMAP=y -CONFIG_REGMAP_I2C=y -CONFIG_REGMAP_SPI=m -CONFIG_REGMAP_MMIO=y -CONFIG_REGMAP_IRQ=y -CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_DMA_FENCE_TRACE is not set -CONFIG_GENERIC_ARCH_TOPOLOGY=y -# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set -# end of Generic Driver Options - -# -# Bus devices -# -# CONFIG_MOXTET is not set -# CONFIG_VEXPRESS_CONFIG is not set -# CONFIG_MHI_BUS is not set -# CONFIG_MHI_BUS_EP is not set -# end of Bus devices - -# -# Cache Drivers -# -# end of Cache Drivers - -# CONFIG_CONNECTOR is not set - -# -# Firmware Drivers -# - -# -# ARM System Control and Management Interface Protocol -# -CONFIG_ARM_SCMI_PROTOCOL=y -# CONFIG_ARM_SCMI_RAW_MODE_SUPPORT is not set -# CONFIG_ARM_SCMI_DEBUG_COUNTERS is not set - -# -# SCMI Transport Drivers -# -CONFIG_ARM_SCMI_HAVE_TRANSPORT=y -CONFIG_ARM_SCMI_HAVE_SHMEM=y -# CONFIG_ARM_SCMI_TRANSPORT_MAILBOX is not set -CONFIG_ARM_SCMI_TRANSPORT_SMC=y -# CONFIG_ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE is not set -# end of SCMI Transport Drivers - -# -# ARM SCMI NXP i.MX Vendor Protocols -# -# CONFIG_IMX_SCMI_BBM_EXT is not set -# CONFIG_IMX_SCMI_MISC_EXT is not set -# end of ARM SCMI NXP i.MX Vendor Protocols - -# CONFIG_ARM_SCMI_POWER_CONTROL is not set -# end of ARM System Control and Management Interface Protocol - -# CONFIG_ARM_SCPI_PROTOCOL is not set -CONFIG_FIRMWARE_MEMMAP=y -CONFIG_DMIID=y -CONFIG_DMI_SYSFS=y -# CONFIG_FW_CFG_SYSFS is not set -CONFIG_ROCKCHIP_SIP=y -# CONFIG_SYSFB_SIMPLEFB is not set -# CONFIG_ARM_FFA_TRANSPORT is not set -# CONFIG_GOOGLE_FIRMWARE is not set - -# -# EFI (Extensible Firmware Interface) Support -# -CONFIG_EFI_ESRT=y -CONFIG_EFI_PARAMS_FROM_FDT=y -CONFIG_EFI_RUNTIME_WRAPPERS=y -CONFIG_EFI_GENERIC_STUB=y -# CONFIG_EFI_ZBOOT is not set -CONFIG_EFI_ARMSTUB_DTB_LOADER=y -CONFIG_EFI_BOOTLOADER_CONTROL=y -# CONFIG_EFI_CAPSULE_LOADER is not set -# CONFIG_EFI_TEST is not set -# CONFIG_RESET_ATTACK_MITIGATION is not set -# CONFIG_EFI_DISABLE_PCI_DMA is not set -CONFIG_EFI_EARLYCON=y -# CONFIG_EFI_DISABLE_RUNTIME is not set -# CONFIG_EFI_COCO_SECRET is not set -# end of EFI (Extensible Firmware Interface) Support - -CONFIG_ARM_PSCI_FW=y -# CONFIG_ARM_PSCI_CHECKER is not set - -# -# Qualcomm firmware drivers -# -# end of Qualcomm firmware drivers - -CONFIG_HAVE_ARM_SMCCC=y -CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y -# CONFIG_ARM_SMCCC_SOC_ID is not set - -# -# Tegra firmware driver -# -# end of Tegra firmware driver -# end of Firmware Drivers - -# CONFIG_GNSS is not set -# CONFIG_MTD is not set -CONFIG_DTC=y -CONFIG_OF=y -# CONFIG_OF_UNITTEST is not set -CONFIG_OF_FLATTREE=y -CONFIG_OF_EARLY_FLATTREE=y -CONFIG_OF_KOBJ=y -CONFIG_OF_DYNAMIC=y -CONFIG_OF_ADDRESS=y -CONFIG_OF_IRQ=y -CONFIG_OF_RESERVED_MEM=y -CONFIG_OF_RESOLVE=y -CONFIG_OF_OVERLAY=y -# CONFIG_PARPORT is not set -CONFIG_BLK_DEV=y -# CONFIG_BLK_DEV_NULL_BLK is not set -CONFIG_CDROM=m -# CONFIG_BLK_DEV_PCIESSD_MTIP32XX is not set -# CONFIG_ZRAM is not set -CONFIG_ZRAM_DEF_COMP="unset-value" -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 -# CONFIG_BLK_DEV_DRBD is not set -# CONFIG_BLK_DEV_NBD is not set -# CONFIG_BLK_DEV_RAM is not set -# CONFIG_CDROM_PKTCDVD is not set -# CONFIG_ATA_OVER_ETH is not set -# CONFIG_BLK_DEV_RBD is not set -# CONFIG_BLK_DEV_UBLK is not set - -# -# NVME Support -# -# CONFIG_BLK_DEV_NVME is not set -# CONFIG_NVME_FC is not set -# CONFIG_NVME_TCP is not set -# CONFIG_NVME_TARGET is not set -# end of NVME Support - -# -# Misc devices -# -# CONFIG_AD525X_DPOT is not set -# CONFIG_DUMMY_IRQ is not set -# CONFIG_PHANTOM is not set -# CONFIG_RPMB is not set -# CONFIG_TIFM_CORE is not set -# CONFIG_ICS932S401 is not set -# CONFIG_ENCLOSURE_SERVICES is not set -# CONFIG_HP_ILO is not set -# CONFIG_APDS9802ALS is not set -# CONFIG_ISL29003 is not set -# CONFIG_ISL29020 is not set -# CONFIG_SENSORS_TSL2550 is not set -# CONFIG_SENSORS_BH1770 is not set -# CONFIG_SENSORS_APDS990X is not set -# CONFIG_HMC6352 is not set -# CONFIG_DS1682 is not set -# CONFIG_LATTICE_ECP3_CONFIG is not set -# CONFIG_SRAM is not set -# CONFIG_DW_XDATA_PCIE is not set -# CONFIG_PCI_ENDPOINT_TEST is not set -# CONFIG_XILINX_SDFEC is not set -# CONFIG_HISI_HIKEY_USB is not set -# CONFIG_OPEN_DICE is not set -# CONFIG_VCPU_STALL_DETECTOR is not set -# CONFIG_C2PORT is not set - -# -# EEPROM support -# -# CONFIG_EEPROM_AT24 is not set -# CONFIG_EEPROM_AT25 is not set -# CONFIG_EEPROM_MAX6875 is not set -# CONFIG_EEPROM_93CX6 is not set -# CONFIG_EEPROM_93XX46 is not set -# CONFIG_EEPROM_IDT_89HPESX is not set -# CONFIG_EEPROM_EE1004 is not set -# end of EEPROM support - -# CONFIG_CB710_CORE is not set - -# -# Texas Instruments shared transport line discipline -# -# CONFIG_TI_ST is not set -# end of Texas Instruments shared transport line discipline - -# CONFIG_SENSORS_LIS3_SPI is not set -# CONFIG_SENSORS_LIS3_I2C is not set -# CONFIG_ALTERA_STAPL is not set -# CONFIG_VMWARE_VMCI is not set -# CONFIG_GENWQE is not set -# CONFIG_ECHO is not set -# CONFIG_BCM_VK is not set -# CONFIG_MISC_ALCOR_PCI is not set -# CONFIG_MISC_RTSX_PCI is not set -# CONFIG_MISC_RTSX_USB is not set -# CONFIG_UACCE is not set -# CONFIG_PVPANIC is not set -# CONFIG_GP_PCI1XXXX is not set -# CONFIG_KEBA_CP500 is not set -# end of Misc devices - -# -# SCSI device support -# -CONFIG_SCSI_MOD=m -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI_COMMON=m -CONFIG_SCSI=m -CONFIG_SCSI_DMA=y -# CONFIG_SCSI_PROC_FS is not set - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=m -# CONFIG_CHR_DEV_ST is not set -CONFIG_BLK_DEV_SR=m -CONFIG_CHR_DEV_SG=m -CONFIG_BLK_DEV_BSG=y -# CONFIG_CHR_DEV_SCH is not set -# CONFIG_SCSI_CONSTANTS is not set -# CONFIG_SCSI_LOGGING is not set -CONFIG_SCSI_SCAN_ASYNC=y - -# -# SCSI Transports -# -# CONFIG_SCSI_SPI_ATTRS is not set -# CONFIG_SCSI_FC_ATTRS is not set -# CONFIG_SCSI_ISCSI_ATTRS is not set -# CONFIG_SCSI_SAS_ATTRS is not set -# CONFIG_SCSI_SAS_LIBSAS is not set -# CONFIG_SCSI_SRP_ATTRS is not set -# end of SCSI Transports - -# CONFIG_SCSI_LOWLEVEL is not set -# CONFIG_SCSI_DH is not set -# end of SCSI device support - -CONFIG_ATA=m -CONFIG_SATA_HOST=y -CONFIG_ATA_VERBOSE_ERROR=y -CONFIG_ATA_FORCE=y -CONFIG_SATA_PMP=y - -# -# Controllers with non-SFF native interface -# -CONFIG_SATA_AHCI=m -CONFIG_SATA_MOBILE_LPM_POLICY=3 -CONFIG_SATA_AHCI_PLATFORM=m -CONFIG_AHCI_DWC=m -# CONFIG_AHCI_CEVA is not set -# CONFIG_SATA_INIC162X is not set -# CONFIG_SATA_ACARD_AHCI is not set -# CONFIG_SATA_SIL24 is not set -CONFIG_ATA_SFF=y - -# -# SFF controllers with custom DMA interface -# -# CONFIG_PDC_ADMA is not set -# CONFIG_SATA_QSTOR is not set -# CONFIG_SATA_SX4 is not set -CONFIG_ATA_BMDMA=y - -# -# SATA SFF controllers with BMDMA -# -# CONFIG_ATA_PIIX is not set -# CONFIG_SATA_DWC is not set -# CONFIG_SATA_MV is not set -# CONFIG_SATA_NV is not set -# CONFIG_SATA_PROMISE is not set -# CONFIG_SATA_SIL is not set -# CONFIG_SATA_SIS is not set -# CONFIG_SATA_SVW is not set -# CONFIG_SATA_ULI is not set -# CONFIG_SATA_VIA is not set -# CONFIG_SATA_VITESSE is not set - -# -# PATA SFF controllers with BMDMA -# -# CONFIG_PATA_ALI is not set -# CONFIG_PATA_AMD is not set -# CONFIG_PATA_ARTOP is not set -# CONFIG_PATA_ATIIXP is not set -# CONFIG_PATA_ATP867X is not set -# CONFIG_PATA_CMD64X is not set -# CONFIG_PATA_CYPRESS is not set -# CONFIG_PATA_EFAR is not set -# CONFIG_PATA_HPT366 is not set -# CONFIG_PATA_HPT37X is not set -# CONFIG_PATA_HPT3X2N is not set -# CONFIG_PATA_HPT3X3 is not set -# CONFIG_PATA_IT8213 is not set -# CONFIG_PATA_IT821X is not set -# CONFIG_PATA_JMICRON is not set -# CONFIG_PATA_MARVELL is not set -# CONFIG_PATA_NETCELL is not set -# CONFIG_PATA_NINJA32 is not set -# CONFIG_PATA_NS87415 is not set -# CONFIG_PATA_OLDPIIX is not set -# CONFIG_PATA_OPTIDMA is not set -# CONFIG_PATA_PDC2027X is not set -# CONFIG_PATA_PDC_OLD is not set -# CONFIG_PATA_RADISYS is not set -# CONFIG_PATA_RDC is not set -# CONFIG_PATA_SCH is not set -# CONFIG_PATA_SERVERWORKS is not set -# CONFIG_PATA_SIL680 is not set -# CONFIG_PATA_SIS is not set -# CONFIG_PATA_TOSHIBA is not set -# CONFIG_PATA_TRIFLEX is not set -# CONFIG_PATA_VIA is not set -# CONFIG_PATA_WINBOND is not set - -# -# PIO-only SFF controllers -# -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_MPIIX is not set -# CONFIG_PATA_NS87410 is not set -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OF_PLATFORM is not set -# CONFIG_PATA_RZ1000 is not set - -# -# Generic fallback / legacy drivers -# -# CONFIG_ATA_GENERIC is not set -# CONFIG_PATA_LEGACY is not set -CONFIG_MD=y -# CONFIG_BLK_DEV_MD is not set -CONFIG_MD_BITMAP_FILE=y -# CONFIG_BCACHE is not set -CONFIG_BLK_DEV_DM_BUILTIN=y -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -CONFIG_DM_BUFIO=m -# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set -CONFIG_DM_BIO_PRISON=m -CONFIG_DM_PERSISTENT_DATA=m -# CONFIG_DM_UNSTRIPED is not set -CONFIG_DM_CRYPT=m -# CONFIG_DM_SNAPSHOT is not set -CONFIG_DM_THIN_PROVISIONING=m -# CONFIG_DM_CACHE is not set -# CONFIG_DM_WRITECACHE is not set -# CONFIG_DM_EBS is not set -# CONFIG_DM_ERA is not set -# CONFIG_DM_CLONE is not set -# CONFIG_DM_MIRROR is not set -# CONFIG_DM_RAID is not set -# CONFIG_DM_ZERO is not set -# CONFIG_DM_MULTIPATH is not set -# CONFIG_DM_DELAY is not set -# CONFIG_DM_DUST is not set -# CONFIG_DM_UEVENT is not set -# CONFIG_DM_FLAKEY is not set -# CONFIG_DM_VERITY is not set -# CONFIG_DM_SWITCH is not set -# CONFIG_DM_LOG_WRITES is not set -# CONFIG_DM_INTEGRITY is not set -# CONFIG_DM_VDO is not set -# CONFIG_TARGET_CORE is not set -# CONFIG_FUSION is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -# CONFIG_FIREWIRE_NOSY is not set -# end of IEEE 1394 (FireWire) support - -CONFIG_NETDEVICES=y -CONFIG_MII=y -CONFIG_NET_CORE=y -# CONFIG_BONDING is not set -CONFIG_DUMMY=m -CONFIG_WIREGUARD=m -# CONFIG_WIREGUARD_DEBUG is not set -# CONFIG_EQUALIZER is not set -# CONFIG_NET_FC is not set -# CONFIG_NET_TEAM is not set -CONFIG_MACVLAN=m -# CONFIG_MACVTAP is not set -CONFIG_IPVLAN_L3S=y -CONFIG_IPVLAN=m -# CONFIG_IPVTAP is not set -CONFIG_VXLAN=m -# CONFIG_GENEVE is not set -# CONFIG_BAREUDP is not set -# CONFIG_GTP is not set -# CONFIG_PFCP is not set -# CONFIG_MACSEC is not set -# CONFIG_NETCONSOLE is not set -CONFIG_TUN=m -# CONFIG_TUN_VNET_CROSS_LE is not set -CONFIG_VETH=m -# CONFIG_NLMON is not set -# CONFIG_NETKIT is not set -# CONFIG_ARCNET is not set -CONFIG_ETHERNET=y -CONFIG_NET_VENDOR_3COM=y -# CONFIG_VORTEX is not set -# CONFIG_TYPHOON is not set -CONFIG_NET_VENDOR_ADAPTEC=y -# CONFIG_ADAPTEC_STARFIRE is not set -CONFIG_NET_VENDOR_AGERE=y -# CONFIG_ET131X is not set -CONFIG_NET_VENDOR_ALACRITECH=y -# CONFIG_SLICOSS is not set -CONFIG_NET_VENDOR_ALTEON=y -# CONFIG_ACENIC is not set -# CONFIG_ALTERA_TSE is not set -CONFIG_NET_VENDOR_AMAZON=y -# CONFIG_ENA_ETHERNET is not set -CONFIG_NET_VENDOR_AMD=y -# CONFIG_AMD8111_ETH is not set -# CONFIG_PCNET32 is not set -# CONFIG_AMD_XGBE is not set -# CONFIG_PDS_CORE is not set -CONFIG_NET_VENDOR_AQUANTIA=y -# CONFIG_AQTION is not set -CONFIG_NET_VENDOR_ARC=y -# CONFIG_EMAC_ROCKCHIP is not set -CONFIG_NET_VENDOR_ASIX=y -# CONFIG_SPI_AX88796C is not set -CONFIG_NET_VENDOR_ATHEROS=y -# CONFIG_ATL2 is not set -# CONFIG_ATL1 is not set -# CONFIG_ATL1E is not set -# CONFIG_ATL1C is not set -# CONFIG_ALX is not set -CONFIG_NET_VENDOR_BROADCOM=y -# CONFIG_B44 is not set -# CONFIG_BCMGENET is not set -# CONFIG_BNX2 is not set -# CONFIG_CNIC is not set -# CONFIG_TIGON3 is not set -# CONFIG_BNX2X is not set -# CONFIG_SYSTEMPORT is not set -# CONFIG_BNXT is not set -CONFIG_NET_VENDOR_CADENCE=y -# CONFIG_MACB is not set -CONFIG_NET_VENDOR_CAVIUM=y -# CONFIG_THUNDER_NIC_PF is not set -# CONFIG_THUNDER_NIC_VF is not set -# CONFIG_THUNDER_NIC_BGX is not set -# CONFIG_THUNDER_NIC_RGX is not set -# CONFIG_CAVIUM_PTP is not set -# CONFIG_LIQUIDIO is not set -# CONFIG_LIQUIDIO_VF is not set -CONFIG_NET_VENDOR_CHELSIO=y -# CONFIG_CHELSIO_T1 is not set -# CONFIG_CHELSIO_T3 is not set -# CONFIG_CHELSIO_T4 is not set -# CONFIG_CHELSIO_T4VF is not set -CONFIG_NET_VENDOR_CISCO=y -# CONFIG_ENIC is not set -CONFIG_NET_VENDOR_CORTINA=y -# CONFIG_GEMINI_ETHERNET is not set -CONFIG_NET_VENDOR_DAVICOM=y -# CONFIG_DM9051 is not set -# CONFIG_DNET is not set -CONFIG_NET_VENDOR_DEC=y -# CONFIG_NET_TULIP is not set -CONFIG_NET_VENDOR_DLINK=y -# CONFIG_DL2K is not set -# CONFIG_SUNDANCE is not set -CONFIG_NET_VENDOR_EMULEX=y -# CONFIG_BE2NET is not set -CONFIG_NET_VENDOR_ENGLEDER=y -# CONFIG_TSNEP is not set -CONFIG_NET_VENDOR_EZCHIP=y -# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set -CONFIG_NET_VENDOR_FUNGIBLE=y -# CONFIG_FUN_ETH is not set -CONFIG_NET_VENDOR_GOOGLE=y -# CONFIG_GVE is not set -CONFIG_NET_VENDOR_HISILICON=y -# CONFIG_HIX5HD2_GMAC is not set -# CONFIG_HISI_FEMAC is not set -# CONFIG_HIP04_ETH is not set -# CONFIG_HNS_DSAF is not set -# CONFIG_HNS_ENET is not set -# CONFIG_HNS3 is not set -CONFIG_NET_VENDOR_HUAWEI=y -# CONFIG_HINIC is not set -CONFIG_NET_VENDOR_I825XX=y -CONFIG_NET_VENDOR_INTEL=y -# CONFIG_E100 is not set -# CONFIG_E1000 is not set -# CONFIG_E1000E is not set -# CONFIG_IGB is not set -# CONFIG_IGBVF is not set -# CONFIG_IXGBE is not set -# CONFIG_IXGBEVF is not set -# CONFIG_I40E is not set -# CONFIG_I40EVF is not set -# CONFIG_ICE is not set -# CONFIG_FM10K is not set -# CONFIG_IGC is not set -# CONFIG_IDPF is not set -# CONFIG_JME is not set -CONFIG_NET_VENDOR_ADI=y -CONFIG_NET_VENDOR_LITEX=y -# CONFIG_LITEX_LITEETH is not set -CONFIG_NET_VENDOR_MARVELL=y -# CONFIG_MVMDIO is not set -# CONFIG_SKGE is not set -# CONFIG_SKY2 is not set -# CONFIG_OCTEONTX2_AF is not set -# CONFIG_OCTEONTX2_PF is not set -# CONFIG_OCTEON_EP is not set -# CONFIG_OCTEON_EP_VF is not set -CONFIG_NET_VENDOR_MELLANOX=y -# CONFIG_MLX4_EN is not set -# CONFIG_MLX5_CORE is not set -# CONFIG_MLXSW_CORE is not set -# CONFIG_MLXFW is not set -CONFIG_NET_VENDOR_META=y -CONFIG_NET_VENDOR_MICREL=y -# CONFIG_KS8842 is not set -# CONFIG_KS8851 is not set -# CONFIG_KS8851_MLL is not set -# CONFIG_KSZ884X_PCI is not set -CONFIG_NET_VENDOR_MICROCHIP=y -# CONFIG_ENC28J60 is not set -# CONFIG_ENCX24J600 is not set -# CONFIG_LAN743X is not set -# CONFIG_LAN865X is not set -# CONFIG_VCAP is not set -CONFIG_NET_VENDOR_MICROSEMI=y -CONFIG_NET_VENDOR_MICROSOFT=y -CONFIG_NET_VENDOR_MYRI=y -# CONFIG_MYRI10GE is not set -# CONFIG_FEALNX is not set -CONFIG_NET_VENDOR_NI=y -# CONFIG_NI_XGE_MANAGEMENT_ENET is not set -CONFIG_NET_VENDOR_NATSEMI=y -# CONFIG_NATSEMI is not set -# CONFIG_NS83820 is not set -CONFIG_NET_VENDOR_NETERION=y -# CONFIG_S2IO is not set -CONFIG_NET_VENDOR_NETRONOME=y -# CONFIG_NFP is not set -CONFIG_NET_VENDOR_8390=y -# CONFIG_NE2K_PCI is not set -CONFIG_NET_VENDOR_NVIDIA=y -# CONFIG_FORCEDETH is not set -CONFIG_NET_VENDOR_OKI=y -# CONFIG_ETHOC is not set -# CONFIG_OA_TC6 is not set -CONFIG_NET_VENDOR_PACKET_ENGINES=y -# CONFIG_HAMACHI is not set -# CONFIG_YELLOWFIN is not set -CONFIG_NET_VENDOR_PENSANDO=y -# CONFIG_IONIC is not set -CONFIG_NET_VENDOR_QLOGIC=y -# CONFIG_QLA3XXX is not set -# CONFIG_QLCNIC is not set -# CONFIG_NETXEN_NIC is not set -# CONFIG_QED is not set -CONFIG_NET_VENDOR_BROCADE=y -# CONFIG_BNA is not set -CONFIG_NET_VENDOR_QUALCOMM=y -# CONFIG_QCA7000_SPI is not set -# CONFIG_QCA7000_UART is not set -# CONFIG_QCOM_EMAC is not set -# CONFIG_RMNET is not set -CONFIG_NET_VENDOR_RDC=y -# CONFIG_R6040 is not set -CONFIG_NET_VENDOR_REALTEK=y -# CONFIG_8139CP is not set -# CONFIG_8139TOO is not set -# CONFIG_R8169 is not set -# CONFIG_RTASE is not set -CONFIG_NET_VENDOR_RENESAS=y -CONFIG_NET_VENDOR_ROCKER=y -CONFIG_NET_VENDOR_SAMSUNG=y -# CONFIG_SXGBE_ETH is not set -CONFIG_NET_VENDOR_SEEQ=y -CONFIG_NET_VENDOR_SILAN=y -# CONFIG_SC92031 is not set -CONFIG_NET_VENDOR_SIS=y -# CONFIG_SIS900 is not set -# CONFIG_SIS190 is not set -CONFIG_NET_VENDOR_SOLARFLARE=y -# CONFIG_SFC is not set -# CONFIG_SFC_FALCON is not set -# CONFIG_SFC_SIENA is not set -CONFIG_NET_VENDOR_SMSC=y -# CONFIG_SMC91X is not set -# CONFIG_EPIC100 is not set -# CONFIG_SMSC911X is not set -# CONFIG_SMSC9420 is not set -CONFIG_NET_VENDOR_SOCIONEXT=y -CONFIG_NET_VENDOR_STMICRO=y -CONFIG_STMMAC_ETH=y -# CONFIG_STMMAC_SELFTESTS is not set -CONFIG_STMMAC_PLATFORM=y -# CONFIG_DWMAC_DWC_QOS_ETH is not set -CONFIG_DWMAC_GENERIC=y -CONFIG_DWMAC_ROCKCHIP=y -# CONFIG_DWMAC_INTEL_PLAT is not set -# CONFIG_STMMAC_PCI is not set -CONFIG_NET_VENDOR_SUN=y -# CONFIG_HAPPYMEAL is not set -# CONFIG_SUNGEM is not set -# CONFIG_CASSINI is not set -# CONFIG_NIU is not set -CONFIG_NET_VENDOR_SYNOPSYS=y -# CONFIG_DWC_XLGMAC is not set -CONFIG_NET_VENDOR_TEHUTI=y -# CONFIG_TEHUTI is not set -# CONFIG_TEHUTI_TN40 is not set -CONFIG_NET_VENDOR_TI=y -# CONFIG_TI_CPSW_PHY_SEL is not set -# CONFIG_TLAN is not set -CONFIG_NET_VENDOR_VERTEXCOM=y -# CONFIG_MSE102X is not set -CONFIG_NET_VENDOR_VIA=y -# CONFIG_VIA_RHINE is not set -# CONFIG_VIA_VELOCITY is not set -CONFIG_NET_VENDOR_WANGXUN=y -# CONFIG_NGBE is not set -CONFIG_NET_VENDOR_WIZNET=y -# CONFIG_WIZNET_W5100 is not set -# CONFIG_WIZNET_W5300 is not set -CONFIG_NET_VENDOR_XILINX=y -# CONFIG_XILINX_EMACLITE is not set -# CONFIG_XILINX_LL_TEMAC is not set -# CONFIG_FDDI is not set -# CONFIG_HIPPI is not set -CONFIG_PHYLINK=y -CONFIG_PHYLIB=y -CONFIG_SWPHY=y -# CONFIG_LED_TRIGGER_PHY is not set -CONFIG_PHYLIB_LEDS=y -CONFIG_FIXED_PHY=y -# CONFIG_SFP is not set - -# -# MII PHY device drivers -# -# CONFIG_AIR_EN8811H_PHY is not set -# CONFIG_AMD_PHY is not set -# CONFIG_ADIN_PHY is not set -# CONFIG_ADIN1100_PHY is not set -# CONFIG_AQUANTIA_PHY is not set -# CONFIG_AX88796B_PHY is not set -# CONFIG_BROADCOM_PHY is not set -# CONFIG_BCM54140_PHY is not set -# CONFIG_BCM7XXX_PHY is not set -# CONFIG_BCM84881_PHY is not set -# CONFIG_BCM87XX_PHY is not set -# CONFIG_CICADA_PHY is not set -# CONFIG_CORTINA_PHY is not set -# CONFIG_DAVICOM_PHY is not set -# CONFIG_ICPLUS_PHY is not set -# CONFIG_LXT_PHY is not set -# CONFIG_INTEL_XWAY_PHY is not set -# CONFIG_LSI_ET1011C_PHY is not set -# CONFIG_MARVELL_PHY is not set -# CONFIG_MARVELL_10G_PHY is not set -# CONFIG_MARVELL_88Q2XXX_PHY is not set -# CONFIG_MARVELL_88X2222_PHY is not set -# CONFIG_MAXLINEAR_GPHY is not set -# CONFIG_MEDIATEK_GE_PHY is not set -# CONFIG_MICREL_PHY is not set -# CONFIG_MICROCHIP_T1S_PHY is not set -# CONFIG_MICROCHIP_PHY is not set -# CONFIG_MICROCHIP_T1_PHY is not set -# CONFIG_MICROSEMI_PHY is not set -CONFIG_MOTORCOMM_PHY=y -# CONFIG_NATIONAL_PHY is not set -# CONFIG_NXP_CBTX_PHY is not set -# CONFIG_NXP_C45_TJA11XX_PHY is not set -# CONFIG_NXP_TJA11XX_PHY is not set -# CONFIG_NCN26000_PHY is not set -# CONFIG_AT803X_PHY is not set -# CONFIG_QCA83XX_PHY is not set -# CONFIG_QCA808X_PHY is not set -# CONFIG_QCA807X_PHY is not set -# CONFIG_QSEMI_PHY is not set -# CONFIG_REALTEK_PHY is not set -# CONFIG_RENESAS_PHY is not set -# CONFIG_ROCKCHIP_PHY is not set -# CONFIG_SMSC_PHY is not set -# CONFIG_STE10XP is not set -# CONFIG_TERANETICS_PHY is not set -# CONFIG_DP83822_PHY is not set -# CONFIG_DP83TC811_PHY is not set -# CONFIG_DP83848_PHY is not set -# CONFIG_DP83867_PHY is not set -# CONFIG_DP83869_PHY is not set -# CONFIG_DP83TD510_PHY is not set -# CONFIG_DP83TG720_PHY is not set -# CONFIG_VITESSE_PHY is not set -# CONFIG_XILINX_GMII2RGMII is not set -# CONFIG_MICREL_KS8995MA is not set -# CONFIG_PSE_CONTROLLER is not set -CONFIG_MDIO_DEVICE=y -CONFIG_MDIO_BUS=y -CONFIG_FWNODE_MDIO=y -CONFIG_OF_MDIO=y -CONFIG_MDIO_DEVRES=y -# CONFIG_MDIO_BITBANG is not set -# CONFIG_MDIO_BCM_UNIMAC is not set -# CONFIG_MDIO_HISI_FEMAC is not set -# CONFIG_MDIO_MVUSB is not set -# CONFIG_MDIO_MSCC_MIIM is not set -# CONFIG_MDIO_OCTEON is not set -# CONFIG_MDIO_IPQ4019 is not set -# CONFIG_MDIO_IPQ8064 is not set -# CONFIG_MDIO_THUNDER is not set - -# -# MDIO Multiplexers -# -# CONFIG_MDIO_BUS_MUX_GPIO is not set -# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set -# CONFIG_MDIO_BUS_MUX_MMIOREG is not set - -# -# PCS device drivers -# -CONFIG_PCS_XPCS=y -# end of PCS device drivers - -# CONFIG_PPP is not set -# CONFIG_SLIP is not set -CONFIG_USB_NET_DRIVERS=m -# CONFIG_USB_CATC is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_RTL8150 is not set -# CONFIG_USB_RTL8152 is not set -# CONFIG_USB_LAN78XX is not set -CONFIG_USB_USBNET=m -# CONFIG_USB_NET_AX8817X is not set -# CONFIG_USB_NET_AX88179_178A is not set -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_CDC_EEM=m -CONFIG_USB_NET_CDC_NCM=m -# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set -# CONFIG_USB_NET_CDC_MBIM is not set -# CONFIG_USB_NET_DM9601 is not set -# CONFIG_USB_NET_SR9700 is not set -# CONFIG_USB_NET_SR9800 is not set -# CONFIG_USB_NET_SMSC75XX is not set -# CONFIG_USB_NET_SMSC95XX is not set -# CONFIG_USB_NET_GL620A is not set -# CONFIG_USB_NET_NET1080 is not set -# CONFIG_USB_NET_PLUSB is not set -# CONFIG_USB_NET_MCS7830 is not set -# CONFIG_USB_NET_RNDIS_HOST is not set -# CONFIG_USB_NET_CDC_SUBSET is not set -# CONFIG_USB_NET_ZAURUS is not set -# CONFIG_USB_NET_CX82310_ETH is not set -# CONFIG_USB_NET_KALMIA is not set -# CONFIG_USB_NET_QMI_WWAN is not set -# CONFIG_USB_HSO is not set -# CONFIG_USB_NET_INT51X1 is not set -# CONFIG_USB_IPHETH is not set -# CONFIG_USB_SIERRA_NET is not set -# CONFIG_USB_VL600 is not set -# CONFIG_USB_NET_CH9200 is not set -# CONFIG_USB_NET_AQC111 is not set -CONFIG_USB_RTL8153_ECM=m -CONFIG_WLAN=y -# CONFIG_WLAN_VENDOR_ADMTEK is not set -# CONFIG_WLAN_VENDOR_ATH is not set -# CONFIG_WLAN_VENDOR_ATMEL is not set -CONFIG_WLAN_VENDOR_BROADCOM=y -# CONFIG_B43 is not set -# CONFIG_B43LEGACY is not set -CONFIG_BRCMUTIL=m -# CONFIG_BRCMSMAC is not set -CONFIG_BRCMFMAC=m -CONFIG_BRCMFMAC_PROTO_BCDC=y -CONFIG_BRCMFMAC_SDIO=y -# CONFIG_BRCMFMAC_USB is not set -# CONFIG_BRCMFMAC_PCIE is not set -# CONFIG_BRCM_TRACING is not set -# CONFIG_BRCMDBG is not set -# CONFIG_WLAN_VENDOR_INTEL is not set -# CONFIG_WLAN_VENDOR_INTERSIL is not set -# CONFIG_WLAN_VENDOR_MARVELL is not set -# CONFIG_WLAN_VENDOR_MEDIATEK is not set -# CONFIG_WLAN_VENDOR_MICROCHIP is not set -CONFIG_WLAN_VENDOR_PURELIFI=y -# CONFIG_PLFXLC is not set -# CONFIG_WLAN_VENDOR_RALINK is not set -# CONFIG_WLAN_VENDOR_REALTEK is not set -# CONFIG_WLAN_VENDOR_RSI is not set -CONFIG_WLAN_VENDOR_SILABS=y -# CONFIG_WFX is not set -# CONFIG_WLAN_VENDOR_ST is not set -# CONFIG_WLAN_VENDOR_TI is not set -# CONFIG_WLAN_VENDOR_ZYDAS is not set -# CONFIG_WLAN_VENDOR_QUANTENNA is not set -# CONFIG_MAC80211_HWSIM is not set -# CONFIG_VIRT_WIFI is not set -# CONFIG_WAN is not set - -# -# Wireless WAN -# -# CONFIG_WWAN is not set -# end of Wireless WAN - -# CONFIG_VMXNET3 is not set -# CONFIG_NETDEVSIM is not set -# CONFIG_NET_FAILOVER is not set -# CONFIG_ISDN is not set - -# -# Input device support -# -CONFIG_INPUT=y -CONFIG_INPUT_LEDS=y -CONFIG_INPUT_FF_MEMLESS=y -# CONFIG_INPUT_SPARSEKMAP is not set -# CONFIG_INPUT_MATRIXKMAP is not set - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=m -# CONFIG_INPUT_MOUSEDEV_PSAUX is not set -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -# CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ADC=m -# CONFIG_KEYBOARD_ADP5588 is not set -# CONFIG_KEYBOARD_ADP5589 is not set -# CONFIG_KEYBOARD_ATKBD is not set -# CONFIG_KEYBOARD_QT1050 is not set -# CONFIG_KEYBOARD_QT1070 is not set -# CONFIG_KEYBOARD_QT2160 is not set -# CONFIG_KEYBOARD_DLINK_DIR685 is not set -# CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_GPIO=y -# CONFIG_KEYBOARD_GPIO_POLLED is not set -# CONFIG_KEYBOARD_TCA6416 is not set -# CONFIG_KEYBOARD_TCA8418 is not set -# CONFIG_KEYBOARD_MATRIX is not set -# CONFIG_KEYBOARD_LM8323 is not set -# CONFIG_KEYBOARD_LM8333 is not set -# CONFIG_KEYBOARD_MAX7359 is not set -# CONFIG_KEYBOARD_MPR121 is not set -# CONFIG_KEYBOARD_NEWTON is not set -# CONFIG_KEYBOARD_OPENCORES is not set -# CONFIG_KEYBOARD_PINEPHONE is not set -# CONFIG_KEYBOARD_SAMSUNG is not set -# CONFIG_KEYBOARD_STOWAWAY is not set -# CONFIG_KEYBOARD_SUNKBD is not set -# CONFIG_KEYBOARD_OMAP4 is not set -# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set -# CONFIG_KEYBOARD_XTKBD is not set -# CONFIG_KEYBOARD_CAP11XX is not set -# CONFIG_KEYBOARD_BCM is not set -# CONFIG_KEYBOARD_CYPRESS_SF is not set -# CONFIG_INPUT_MOUSE is not set -# CONFIG_INPUT_JOYSTICK is not set -# CONFIG_INPUT_TABLET is not set -CONFIG_INPUT_TOUCHSCREEN=y -# CONFIG_TOUCHSCREEN_ADS7846 is not set -# CONFIG_TOUCHSCREEN_AD7877 is not set -# CONFIG_TOUCHSCREEN_AD7879 is not set -# CONFIG_TOUCHSCREEN_ADC is not set -# CONFIG_TOUCHSCREEN_AR1021_I2C is not set -# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set -# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set -# CONFIG_TOUCHSCREEN_BU21013 is not set -# CONFIG_TOUCHSCREEN_BU21029 is not set -# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set -# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set -# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set -# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set -CONFIG_TOUCHSCREEN_CYTTSP5=m -# CONFIG_TOUCHSCREEN_DYNAPRO is not set -# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set -# CONFIG_TOUCHSCREEN_EETI is not set -# CONFIG_TOUCHSCREEN_EGALAX is not set -# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set -# CONFIG_TOUCHSCREEN_EXC3000 is not set -# CONFIG_TOUCHSCREEN_FUJITSU is not set -# CONFIG_TOUCHSCREEN_GOODIX is not set -# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C is not set -# CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI is not set -# CONFIG_TOUCHSCREEN_HIDEEP is not set -# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set -# CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set -# CONFIG_TOUCHSCREEN_ILI210X is not set -# CONFIG_TOUCHSCREEN_ILITEK is not set -# CONFIG_TOUCHSCREEN_S6SY761 is not set -# CONFIG_TOUCHSCREEN_GUNZE is not set -# CONFIG_TOUCHSCREEN_EKTF2127 is not set -# CONFIG_TOUCHSCREEN_ELAN is not set -# CONFIG_TOUCHSCREEN_ELO is not set -# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -# CONFIG_TOUCHSCREEN_WACOM_I2C is not set -# CONFIG_TOUCHSCREEN_MAX11801 is not set -# CONFIG_TOUCHSCREEN_MMS114 is not set -# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set -# CONFIG_TOUCHSCREEN_MSG2638 is not set -# CONFIG_TOUCHSCREEN_MTOUCH is not set -# CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS is not set -# CONFIG_TOUCHSCREEN_IMAGIS is not set -# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set -# CONFIG_TOUCHSCREEN_INEXIO is not set -# CONFIG_TOUCHSCREEN_PENMOUNT is not set -# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set -# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -# CONFIG_TOUCHSCREEN_PIXCIR is not set -# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set -# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set -# CONFIG_TOUCHSCREEN_TSC_SERIO is not set -# CONFIG_TOUCHSCREEN_TSC2004 is not set -# CONFIG_TOUCHSCREEN_TSC2005 is not set -# CONFIG_TOUCHSCREEN_TSC2007 is not set -# CONFIG_TOUCHSCREEN_RM_TS is not set -# CONFIG_TOUCHSCREEN_SILEAD is not set -# CONFIG_TOUCHSCREEN_SIS_I2C is not set -# CONFIG_TOUCHSCREEN_ST1232 is not set -# CONFIG_TOUCHSCREEN_STMFTS is not set -# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set -# CONFIG_TOUCHSCREEN_SX8654 is not set -# CONFIG_TOUCHSCREEN_TPS6507X is not set -# CONFIG_TOUCHSCREEN_ZET6223 is not set -# CONFIG_TOUCHSCREEN_ZFORCE is not set -# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set -# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set -# CONFIG_TOUCHSCREEN_IQS5XX is not set -# CONFIG_TOUCHSCREEN_IQS7211 is not set -# CONFIG_TOUCHSCREEN_ZINITIX is not set -# CONFIG_TOUCHSCREEN_HIMAX_HX83112B is not set -CONFIG_INPUT_MISC=y -# CONFIG_INPUT_AD714X is not set -# CONFIG_INPUT_ATMEL_CAPTOUCH is not set -# CONFIG_INPUT_BMA150 is not set -# CONFIG_INPUT_E3X0_BUTTON is not set -# CONFIG_INPUT_MMA8450 is not set -# CONFIG_INPUT_GPIO_BEEPER is not set -# CONFIG_INPUT_GPIO_DECODER is not set -# CONFIG_INPUT_GPIO_VIBRA is not set -# CONFIG_INPUT_ATI_REMOTE2 is not set -# CONFIG_INPUT_KEYSPAN_REMOTE is not set -# CONFIG_INPUT_KXTJ9 is not set -# CONFIG_INPUT_POWERMATE is not set -# CONFIG_INPUT_YEALINK is not set -# CONFIG_INPUT_CM109 is not set -# CONFIG_INPUT_REGULATOR_HAPTIC is not set -CONFIG_INPUT_UINPUT=m -# CONFIG_INPUT_PCF8574 is not set -# CONFIG_INPUT_PWM_BEEPER is not set -# CONFIG_INPUT_PWM_VIBRA is not set -CONFIG_INPUT_RK805_PWRKEY=y -# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set -# CONFIG_INPUT_DA7280_HAPTICS is not set -# CONFIG_INPUT_ADXL34X is not set -# CONFIG_INPUT_IMS_PCU is not set -# CONFIG_INPUT_IQS269A is not set -# CONFIG_INPUT_IQS626A is not set -# CONFIG_INPUT_IQS7222 is not set -# CONFIG_INPUT_CMA3000 is not set -# CONFIG_INPUT_DRV260X_HAPTICS is not set -# CONFIG_INPUT_DRV2665_HAPTICS is not set -# CONFIG_INPUT_DRV2667_HAPTICS is not set -CONFIG_INPUT_WS8100_PEN=m -# CONFIG_RMI4_CORE is not set - -# -# Hardware I/O ports -# -# CONFIG_SERIO is not set -# CONFIG_GAMEPORT is not set -# end of Hardware I/O ports -# end of Input device support - -# -# Character devices -# -CONFIG_TTY=y -CONFIG_VT=y -CONFIG_CONSOLE_TRANSLATIONS=y -CONFIG_VT_CONSOLE=y -CONFIG_VT_CONSOLE_SLEEP=y -CONFIG_VT_HW_CONSOLE_BINDING=y -CONFIG_UNIX98_PTYS=y -# CONFIG_LEGACY_PTYS is not set -CONFIG_LEGACY_TIOCSTI=y -# CONFIG_LDISC_AUTOLOAD is not set - -# -# Serial drivers -# -CONFIG_SERIAL_EARLYCON=y -CONFIG_SERIAL_8250=y -# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set -CONFIG_SERIAL_8250_16550A_VARIANTS=y -# CONFIG_SERIAL_8250_FINTEK is not set -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_SERIAL_8250_DMA=y -CONFIG_SERIAL_8250_PCILIB=y -CONFIG_SERIAL_8250_PCI=y -CONFIG_SERIAL_8250_EXAR=y -CONFIG_SERIAL_8250_NR_UARTS=4 -CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -# CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_PCI1XXXX is not set -CONFIG_SERIAL_8250_DWLIB=y -CONFIG_SERIAL_8250_FSL=y -CONFIG_SERIAL_8250_DW=y -# CONFIG_SERIAL_8250_RT288X is not set -CONFIG_SERIAL_8250_PERICOM=y -CONFIG_SERIAL_OF_PLATFORM=y - -# -# Non-8250 serial port support -# -# CONFIG_SERIAL_AMBA_PL010 is not set -# CONFIG_SERIAL_AMBA_PL011 is not set -# CONFIG_SERIAL_EARLYCON_SEMIHOST is not set -# CONFIG_SERIAL_MAX3100 is not set -# CONFIG_SERIAL_MAX310X is not set -# CONFIG_SERIAL_UARTLITE is not set -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -# CONFIG_SERIAL_JSM is not set -# CONFIG_SERIAL_SIFIVE is not set -# CONFIG_SERIAL_SCCNXP is not set -# CONFIG_SERIAL_SC16IS7XX is not set -# CONFIG_SERIAL_ALTERA_JTAGUART is not set -# CONFIG_SERIAL_ALTERA_UART is not set -# CONFIG_SERIAL_XILINX_PS_UART is not set -# CONFIG_SERIAL_ARC is not set -# CONFIG_SERIAL_RP2 is not set -# CONFIG_SERIAL_FSL_LPUART is not set -# CONFIG_SERIAL_FSL_LINFLEXUART is not set -# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set -# CONFIG_SERIAL_SPRD is not set -# end of Serial drivers - -CONFIG_SERIAL_MCTRL_GPIO=y -# CONFIG_SERIAL_NONSTANDARD is not set -# CONFIG_N_GSM is not set -# CONFIG_NOZOMI is not set -# CONFIG_NULL_TTY is not set -# CONFIG_HVC_DCC is not set -CONFIG_SERIAL_DEV_BUS=y -CONFIG_SERIAL_DEV_CTRL_TTYPORT=y -# CONFIG_TTY_PRINTK is not set -# CONFIG_VIRTIO_CONSOLE is not set -# CONFIG_IPMI_HANDLER is not set -# CONFIG_HW_RANDOM is not set -# CONFIG_APPLICOM is not set -CONFIG_DEVMEM=y -CONFIG_DEVPORT=y -# CONFIG_TCG_TPM is not set -# CONFIG_XILLYBUS is not set -# CONFIG_XILLYUSB is not set -# end of Character devices - -# -# I2C support -# -CONFIG_I2C=y -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=y -# CONFIG_I2C_MUX is not set -# CONFIG_I2C_HELPER_AUTO is not set -# CONFIG_I2C_SMBUS is not set - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=y -# CONFIG_I2C_ALGOPCF is not set -# CONFIG_I2C_ALGOPCA is not set -# end of I2C Algorithms - -# -# I2C Hardware Bus support -# - -# -# PC SMBus host controller drivers -# -# CONFIG_I2C_ALI1535 is not set -# CONFIG_I2C_ALI1563 is not set -# CONFIG_I2C_ALI15X3 is not set -# CONFIG_I2C_AMD756 is not set -# CONFIG_I2C_AMD8111 is not set -# CONFIG_I2C_I801 is not set -# CONFIG_I2C_ISCH is not set -# CONFIG_I2C_PIIX4 is not set -# CONFIG_I2C_NFORCE2 is not set -# CONFIG_I2C_NVIDIA_GPU is not set -# CONFIG_I2C_SIS5595 is not set -# CONFIG_I2C_SIS630 is not set -# CONFIG_I2C_SIS96X is not set -# CONFIG_I2C_VIA is not set -# CONFIG_I2C_VIAPRO is not set - -# -# I2C system bus drivers (mostly embedded / system-on-chip) -# -# CONFIG_I2C_CADENCE is not set -# CONFIG_I2C_CBUS_GPIO is not set -# CONFIG_I2C_DESIGNWARE_CORE is not set -# CONFIG_I2C_EMEV2 is not set -# CONFIG_I2C_GPIO is not set -# CONFIG_I2C_HISI is not set -# CONFIG_I2C_NOMADIK is not set -# CONFIG_I2C_OCORES is not set -# CONFIG_I2C_PCA_PLATFORM is not set -CONFIG_I2C_RK3X=y -# CONFIG_I2C_SIMTEC is not set -# CONFIG_I2C_THUNDERX is not set -# CONFIG_I2C_XILINX is not set - -# -# External I2C/SMBus adapter drivers -# -# CONFIG_I2C_DIOLAN_U2C is not set -# CONFIG_I2C_CP2615 is not set -# CONFIG_I2C_PCI1XXXX is not set -# CONFIG_I2C_ROBOTFUZZ_OSIF is not set -# CONFIG_I2C_TAOS_EVM is not set -# CONFIG_I2C_TINY_USB is not set - -# -# Other I2C/SMBus bus drivers -# -# CONFIG_I2C_VIRTIO is not set -# end of I2C Hardware Bus support - -# CONFIG_I2C_STUB is not set -# CONFIG_I2C_SLAVE is not set -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# end of I2C support - -# CONFIG_I3C is not set -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y -# CONFIG_SPI_MEM is not set - -# -# SPI Master Controller Drivers -# -# CONFIG_SPI_ALTERA is not set -# CONFIG_SPI_AXI_SPI_ENGINE is not set -CONFIG_SPI_BITBANG=y -# CONFIG_SPI_CADENCE is not set -# CONFIG_SPI_CADENCE_QUADSPI is not set -# CONFIG_SPI_CH341 is not set -# CONFIG_SPI_DESIGNWARE is not set -CONFIG_SPI_GPIO=y -# CONFIG_SPI_FSL_SPI is not set -# CONFIG_SPI_MICROCHIP_CORE is not set -# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set -# CONFIG_SPI_OC_TINY is not set -# CONFIG_SPI_PCI1XXXX is not set -# CONFIG_SPI_PL022 is not set -CONFIG_SPI_ROCKCHIP=y -# CONFIG_SPI_ROCKCHIP_SFC is not set -# CONFIG_SPI_SC18IS602 is not set -# CONFIG_SPI_SIFIVE is not set -# CONFIG_SPI_MXIC is not set -# CONFIG_SPI_THUNDERX is not set -# CONFIG_SPI_XCOMM is not set -# CONFIG_SPI_XILINX is not set -# CONFIG_SPI_AMD is not set - -# -# SPI Multiplexer support -# -# CONFIG_SPI_MUX is not set - -# -# SPI Protocol Masters -# -CONFIG_SPI_SPIDEV=y -# CONFIG_SPI_LOOPBACK_TEST is not set -# CONFIG_SPI_TLE62X0 is not set -# CONFIG_SPI_SLAVE is not set -CONFIG_SPI_DYNAMIC=y -# CONFIG_SPMI is not set -# CONFIG_HSI is not set -CONFIG_PPS=y -# CONFIG_PPS_DEBUG is not set - -# -# PPS clients support -# -# CONFIG_PPS_CLIENT_KTIMER is not set -# CONFIG_PPS_CLIENT_LDISC is not set -# CONFIG_PPS_CLIENT_GPIO is not set - -# -# PPS generators support -# - -# -# PTP clock support -# -CONFIG_PTP_1588_CLOCK=y -CONFIG_PTP_1588_CLOCK_OPTIONAL=y - -# -# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. -# -CONFIG_PTP_1588_CLOCK_KVM=y -# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set -# CONFIG_PTP_1588_CLOCK_IDTCM is not set -# CONFIG_PTP_1588_CLOCK_FC3W is not set -# CONFIG_PTP_1588_CLOCK_MOCK is not set -# end of PTP clock support - -CONFIG_PINCTRL=y -CONFIG_PINMUX=y -CONFIG_PINCONF=y -CONFIG_GENERIC_PINCONF=y -# CONFIG_DEBUG_PINCTRL is not set -# CONFIG_PINCTRL_AW9523 is not set -# CONFIG_PINCTRL_CY8C95X0 is not set -# CONFIG_PINCTRL_MCP23S08 is not set -# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set -# CONFIG_PINCTRL_OCELOT is not set -# CONFIG_PINCTRL_RK805 is not set -CONFIG_PINCTRL_ROCKCHIP=y -# CONFIG_PINCTRL_SCMI is not set -# CONFIG_PINCTRL_SINGLE is not set -# CONFIG_PINCTRL_STMFX is not set -# CONFIG_PINCTRL_SX150X is not set -# CONFIG_PINCTRL_IMX_SCMI is not set - -# -# Renesas pinctrl drivers -# -# end of Renesas pinctrl drivers - -CONFIG_GPIOLIB=y -CONFIG_GPIOLIB_FASTPATH_LIMIT=512 -CONFIG_OF_GPIO=y -CONFIG_GPIOLIB_IRQCHIP=y -# CONFIG_DEBUG_GPIO is not set -CONFIG_GPIO_SYSFS=y -CONFIG_GPIO_CDEV=y -CONFIG_GPIO_CDEV_V1=y - -# -# Memory mapped GPIO drivers -# -# CONFIG_GPIO_74XX_MMIO is not set -# CONFIG_GPIO_ALTERA is not set -# CONFIG_GPIO_CADENCE is not set -# CONFIG_GPIO_DWAPB is not set -# CONFIG_GPIO_EXAR is not set -# CONFIG_GPIO_FTGPIO010 is not set -# CONFIG_GPIO_GENERIC_PLATFORM is not set -# CONFIG_GPIO_GRGPIO is not set -# CONFIG_GPIO_HISI is not set -# CONFIG_GPIO_HLWD is not set -# CONFIG_GPIO_LOGICVC is not set -# CONFIG_GPIO_MB86S7X is not set -# CONFIG_GPIO_PL061 is not set -CONFIG_GPIO_ROCKCHIP=y -# CONFIG_GPIO_SIFIVE is not set -# CONFIG_GPIO_SYSCON is not set -# CONFIG_GPIO_XGENE is not set -# CONFIG_GPIO_XILINX is not set -# CONFIG_GPIO_AMD_FCH is not set -# end of Memory mapped GPIO drivers - -# -# I2C GPIO expanders -# -# CONFIG_GPIO_ADNP is not set -# CONFIG_GPIO_FXL6408 is not set -# CONFIG_GPIO_DS4520 is not set -# CONFIG_GPIO_GW_PLD is not set -# CONFIG_GPIO_MAX7300 is not set -# CONFIG_GPIO_MAX732X is not set -# CONFIG_GPIO_PCA953X is not set -# CONFIG_GPIO_PCA9570 is not set -# CONFIG_GPIO_PCF857X is not set -# CONFIG_GPIO_TPIC2810 is not set -# end of I2C GPIO expanders - -# -# MFD GPIO expanders -# -# end of MFD GPIO expanders - -# -# PCI GPIO expanders -# -# CONFIG_GPIO_BT8XX is not set -# CONFIG_GPIO_PCI_IDIO_16 is not set -# CONFIG_GPIO_PCIE_IDIO_24 is not set -# CONFIG_GPIO_RDC321X is not set -# end of PCI GPIO expanders - -# -# SPI GPIO expanders -# -# CONFIG_GPIO_74X164 is not set -# CONFIG_GPIO_MAX3191X is not set -# CONFIG_GPIO_MAX7301 is not set -# CONFIG_GPIO_MC33880 is not set -# CONFIG_GPIO_PISOSR is not set -# CONFIG_GPIO_XRA1403 is not set -# end of SPI GPIO expanders - -# -# USB GPIO expanders -# -# end of USB GPIO expanders - -# -# Virtual GPIO drivers -# -# CONFIG_GPIO_AGGREGATOR is not set -# CONFIG_GPIO_LATCH is not set -# CONFIG_GPIO_MOCKUP is not set -# CONFIG_GPIO_SIM is not set -# end of Virtual GPIO drivers - -# -# GPIO Debugging utilities -# -# CONFIG_GPIO_SLOPPY_LOGIC_ANALYZER is not set -# CONFIG_GPIO_VIRTUSER is not set -# end of GPIO Debugging utilities - -# CONFIG_W1 is not set -CONFIG_POWER_RESET=y -# CONFIG_POWER_RESET_GPIO is not set -# CONFIG_POWER_RESET_GPIO_RESTART is not set -# CONFIG_POWER_RESET_LTC2952 is not set -# CONFIG_POWER_RESET_REGULATOR is not set -# CONFIG_POWER_RESET_RESTART is not set -# CONFIG_POWER_RESET_XGENE is not set -# CONFIG_POWER_RESET_SYSCON is not set -# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set -# CONFIG_SYSCON_REBOOT_MODE is not set -# CONFIG_NVMEM_REBOOT_MODE is not set -# CONFIG_POWER_SEQUENCING is not set -CONFIG_POWER_SUPPLY=y -# CONFIG_POWER_SUPPLY_DEBUG is not set -CONFIG_POWER_SUPPLY_HWMON=y -# CONFIG_GENERIC_ADC_BATTERY is not set -# CONFIG_IP5XXX_POWER is not set -# CONFIG_TEST_POWER is not set -# CONFIG_CHARGER_ADP5061 is not set -# CONFIG_BATTERY_CW2015 is not set -# CONFIG_BATTERY_DS2780 is not set -# CONFIG_BATTERY_DS2781 is not set -# CONFIG_BATTERY_DS2782 is not set -# CONFIG_BATTERY_SAMSUNG_SDI is not set -# CONFIG_BATTERY_SBS is not set -# CONFIG_CHARGER_SBS is not set -# CONFIG_BATTERY_BQ27XXX is not set -# CONFIG_BATTERY_MAX17040 is not set -# CONFIG_BATTERY_MAX17042 is not set -# CONFIG_BATTERY_MAX1720X is not set -# CONFIG_CHARGER_ISP1704 is not set -# CONFIG_CHARGER_MAX8903 is not set -# CONFIG_CHARGER_LP8727 is not set -# CONFIG_CHARGER_GPIO is not set -# CONFIG_CHARGER_MANAGER is not set -# CONFIG_CHARGER_LT3651 is not set -# CONFIG_CHARGER_LTC4162L is not set -# CONFIG_CHARGER_DETECTOR_MAX14656 is not set -# CONFIG_CHARGER_MAX77976 is not set -# CONFIG_CHARGER_BQ2415X is not set -# CONFIG_CHARGER_BQ24190 is not set -# CONFIG_CHARGER_BQ24257 is not set -# CONFIG_CHARGER_BQ24735 is not set -# CONFIG_CHARGER_BQ2515X is not set -# CONFIG_CHARGER_BQ25890 is not set -# CONFIG_CHARGER_BQ25980 is not set -# CONFIG_CHARGER_BQ256XX is not set -CONFIG_CHARGER_RK817=y -# CONFIG_CHARGER_SMB347 is not set -# CONFIG_BATTERY_GAUGE_LTC2941 is not set -# CONFIG_BATTERY_GOLDFISH is not set -# CONFIG_BATTERY_RT5033 is not set -# CONFIG_CHARGER_RT9455 is not set -# CONFIG_CHARGER_RT9467 is not set -# CONFIG_CHARGER_RT9471 is not set -# CONFIG_CHARGER_UCS1002 is not set -# CONFIG_CHARGER_BD99954 is not set -# CONFIG_BATTERY_UG3105 is not set -# CONFIG_FUEL_GAUGE_MM8013 is not set -CONFIG_HWMON=y -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Native drivers -# -# CONFIG_SENSORS_AD7314 is not set -# CONFIG_SENSORS_AD7414 is not set -# CONFIG_SENSORS_AD7418 is not set -# CONFIG_SENSORS_ADM1025 is not set -# CONFIG_SENSORS_ADM1026 is not set -# CONFIG_SENSORS_ADM1029 is not set -# CONFIG_SENSORS_ADM1031 is not set -# CONFIG_SENSORS_ADM1177 is not set -# CONFIG_SENSORS_ADM9240 is not set -# CONFIG_SENSORS_ADT7310 is not set -# CONFIG_SENSORS_ADT7410 is not set -# CONFIG_SENSORS_ADT7411 is not set -# CONFIG_SENSORS_ADT7462 is not set -# CONFIG_SENSORS_ADT7470 is not set -# CONFIG_SENSORS_ADT7475 is not set -# CONFIG_SENSORS_AHT10 is not set -# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set -# CONFIG_SENSORS_AS370 is not set -# CONFIG_SENSORS_ASC7621 is not set -# CONFIG_SENSORS_ASUS_ROG_RYUJIN is not set -# CONFIG_SENSORS_AXI_FAN_CONTROL is not set -# CONFIG_SENSORS_ARM_SCMI is not set -# CONFIG_SENSORS_ATXP1 is not set -# CONFIG_SENSORS_CHIPCAP2 is not set -# CONFIG_SENSORS_CORSAIR_CPRO is not set -# CONFIG_SENSORS_CORSAIR_PSU is not set -# CONFIG_SENSORS_DRIVETEMP is not set -# CONFIG_SENSORS_DS620 is not set -# CONFIG_SENSORS_DS1621 is not set -# CONFIG_SENSORS_I5K_AMB is not set -# CONFIG_SENSORS_F71805F is not set -# CONFIG_SENSORS_F71882FG is not set -# CONFIG_SENSORS_F75375S is not set -# CONFIG_SENSORS_FTSTEUTATES is not set -# CONFIG_SENSORS_GIGABYTE_WATERFORCE is not set -# CONFIG_SENSORS_GL518SM is not set -# CONFIG_SENSORS_GL520SM is not set -# CONFIG_SENSORS_G760A is not set -# CONFIG_SENSORS_G762 is not set -# CONFIG_SENSORS_GPIO_FAN is not set -# CONFIG_SENSORS_HIH6130 is not set -# CONFIG_SENSORS_HS3001 is not set -# CONFIG_SENSORS_IIO_HWMON is not set -# CONFIG_SENSORS_IT87 is not set -# CONFIG_SENSORS_JC42 is not set -# CONFIG_SENSORS_POWERZ is not set -# CONFIG_SENSORS_POWR1220 is not set -# CONFIG_SENSORS_LINEAGE is not set -# CONFIG_SENSORS_LTC2945 is not set -# CONFIG_SENSORS_LTC2947_I2C is not set -# CONFIG_SENSORS_LTC2947_SPI is not set -# CONFIG_SENSORS_LTC2990 is not set -# CONFIG_SENSORS_LTC2991 is not set -# CONFIG_SENSORS_LTC2992 is not set -# CONFIG_SENSORS_LTC4151 is not set -# CONFIG_SENSORS_LTC4215 is not set -# CONFIG_SENSORS_LTC4222 is not set -# CONFIG_SENSORS_LTC4245 is not set -# CONFIG_SENSORS_LTC4260 is not set -# CONFIG_SENSORS_LTC4261 is not set -# CONFIG_SENSORS_LTC4282 is not set -# CONFIG_SENSORS_MAX1111 is not set -# CONFIG_SENSORS_MAX127 is not set -# CONFIG_SENSORS_MAX16065 is not set -# CONFIG_SENSORS_MAX1619 is not set -# CONFIG_SENSORS_MAX1668 is not set -# CONFIG_SENSORS_MAX197 is not set -# CONFIG_SENSORS_MAX31722 is not set -# CONFIG_SENSORS_MAX31730 is not set -# CONFIG_SENSORS_MAX31760 is not set -# CONFIG_MAX31827 is not set -# CONFIG_SENSORS_MAX6620 is not set -# CONFIG_SENSORS_MAX6621 is not set -# CONFIG_SENSORS_MAX6639 is not set -# CONFIG_SENSORS_MAX6650 is not set -# CONFIG_SENSORS_MAX6697 is not set -# CONFIG_SENSORS_MAX31790 is not set -# CONFIG_SENSORS_MC34VR500 is not set -# CONFIG_SENSORS_MCP3021 is not set -# CONFIG_SENSORS_TC654 is not set -# CONFIG_SENSORS_TPS23861 is not set -# CONFIG_SENSORS_MR75203 is not set -# CONFIG_SENSORS_ADCXX is not set -# CONFIG_SENSORS_LM63 is not set -# CONFIG_SENSORS_LM70 is not set -# CONFIG_SENSORS_LM73 is not set -# CONFIG_SENSORS_LM75 is not set -# CONFIG_SENSORS_LM77 is not set -# CONFIG_SENSORS_LM78 is not set -# CONFIG_SENSORS_LM80 is not set -# CONFIG_SENSORS_LM83 is not set -# CONFIG_SENSORS_LM85 is not set -# CONFIG_SENSORS_LM87 is not set -# CONFIG_SENSORS_LM90 is not set -# CONFIG_SENSORS_LM92 is not set -# CONFIG_SENSORS_LM93 is not set -# CONFIG_SENSORS_LM95234 is not set -# CONFIG_SENSORS_LM95241 is not set -# CONFIG_SENSORS_LM95245 is not set -# CONFIG_SENSORS_PC87360 is not set -# CONFIG_SENSORS_PC87427 is not set -# CONFIG_SENSORS_NTC_THERMISTOR is not set -# CONFIG_SENSORS_NCT6683 is not set -# CONFIG_SENSORS_NCT6775 is not set -# CONFIG_SENSORS_NCT6775_I2C is not set -# CONFIG_SENSORS_NCT7802 is not set -# CONFIG_SENSORS_NCT7904 is not set -# CONFIG_SENSORS_NPCM7XX is not set -# CONFIG_SENSORS_NZXT_KRAKEN2 is not set -# CONFIG_SENSORS_NZXT_KRAKEN3 is not set -# CONFIG_SENSORS_NZXT_SMART2 is not set -# CONFIG_SENSORS_OCC_P8_I2C is not set -# CONFIG_SENSORS_PCF8591 is not set -# CONFIG_PMBUS is not set -# CONFIG_SENSORS_PT5161L is not set -# CONFIG_SENSORS_PWM_FAN is not set -# CONFIG_SENSORS_SBTSI is not set -# CONFIG_SENSORS_SBRMI is not set -# CONFIG_SENSORS_SHT15 is not set -# CONFIG_SENSORS_SHT21 is not set -# CONFIG_SENSORS_SHT3x is not set -# CONFIG_SENSORS_SHT4x is not set -# CONFIG_SENSORS_SHTC1 is not set -# CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_DME1737 is not set -# CONFIG_SENSORS_EMC1403 is not set -# CONFIG_SENSORS_EMC2103 is not set -# CONFIG_SENSORS_EMC2305 is not set -# CONFIG_SENSORS_EMC6W201 is not set -# CONFIG_SENSORS_SMSC47M1 is not set -# CONFIG_SENSORS_SMSC47M192 is not set -# CONFIG_SENSORS_SMSC47B397 is not set -# CONFIG_SENSORS_SCH5627 is not set -# CONFIG_SENSORS_SCH5636 is not set -# CONFIG_SENSORS_STTS751 is not set -# CONFIG_SENSORS_ADC128D818 is not set -# CONFIG_SENSORS_ADS7828 is not set -# CONFIG_SENSORS_ADS7871 is not set -# CONFIG_SENSORS_AMC6821 is not set -# CONFIG_SENSORS_INA209 is not set -# CONFIG_SENSORS_INA2XX is not set -# CONFIG_SENSORS_INA238 is not set -# CONFIG_SENSORS_INA3221 is not set -# CONFIG_SENSORS_SPD5118 is not set -# CONFIG_SENSORS_TC74 is not set -# CONFIG_SENSORS_THMC50 is not set -# CONFIG_SENSORS_TMP102 is not set -# CONFIG_SENSORS_TMP103 is not set -# CONFIG_SENSORS_TMP108 is not set -# CONFIG_SENSORS_TMP401 is not set -# CONFIG_SENSORS_TMP421 is not set -# CONFIG_SENSORS_TMP464 is not set -# CONFIG_SENSORS_TMP513 is not set -# CONFIG_SENSORS_VIA686A is not set -# CONFIG_SENSORS_VT1211 is not set -# CONFIG_SENSORS_VT8231 is not set -# CONFIG_SENSORS_W83773G is not set -# CONFIG_SENSORS_W83781D is not set -# CONFIG_SENSORS_W83791D is not set -# CONFIG_SENSORS_W83792D is not set -# CONFIG_SENSORS_W83793 is not set -# CONFIG_SENSORS_W83795 is not set -# CONFIG_SENSORS_W83L785TS is not set -# CONFIG_SENSORS_W83L786NG is not set -# CONFIG_SENSORS_W83627HF is not set -# CONFIG_SENSORS_W83627EHF is not set -CONFIG_THERMAL=y -CONFIG_THERMAL_NETLINK=y -CONFIG_THERMAL_STATISTICS=y -# CONFIG_THERMAL_DEBUGFS is not set -# CONFIG_THERMAL_CORE_TESTING is not set -CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 -CONFIG_THERMAL_HWMON=y -CONFIG_THERMAL_OF=y -CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y -# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set -# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set -# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set -CONFIG_THERMAL_GOV_FAIR_SHARE=y -CONFIG_THERMAL_GOV_STEP_WISE=y -CONFIG_THERMAL_GOV_BANG_BANG=y -CONFIG_THERMAL_GOV_USER_SPACE=y -CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y -CONFIG_CPU_THERMAL=y -CONFIG_CPU_FREQ_THERMAL=y -# CONFIG_DEVFREQ_THERMAL is not set -CONFIG_THERMAL_EMULATION=y -# CONFIG_THERMAL_MMIO is not set -CONFIG_ROCKCHIP_THERMAL=y -# CONFIG_GENERIC_ADC_THERMAL is not set -CONFIG_WATCHDOG=y -CONFIG_WATCHDOG_CORE=y -# CONFIG_WATCHDOG_NOWAYOUT is not set -CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y -CONFIG_WATCHDOG_OPEN_TIMEOUT=0 -CONFIG_WATCHDOG_SYSFS=y -# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set - -# -# Watchdog Pretimeout Governors -# -# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set - -# -# Watchdog Device Drivers -# -# CONFIG_SOFT_WATCHDOG is not set -# CONFIG_GPIO_WATCHDOG is not set -# CONFIG_XILINX_WATCHDOG is not set -# CONFIG_XILINX_WINDOW_WATCHDOG is not set -# CONFIG_ZIIRAVE_WATCHDOG is not set -# CONFIG_ARM_SP805_WATCHDOG is not set -# CONFIG_ARM_SBSA_WATCHDOG is not set -# CONFIG_CADENCE_WATCHDOG is not set -CONFIG_DW_WATCHDOG=y -# CONFIG_MAX63XX_WATCHDOG is not set -# CONFIG_ARM_SMC_WATCHDOG is not set -# CONFIG_ALIM7101_WDT is not set -# CONFIG_I6300ESB_WDT is not set -# CONFIG_HP_WATCHDOG is not set -# CONFIG_MEN_A21_WDT is not set - -# -# PCI-based Watchdog Cards -# -# CONFIG_PCIPCWATCHDOG is not set -# CONFIG_WDTPCI is not set - -# -# USB-based Watchdog Cards -# -# CONFIG_USBPCWATCHDOG is not set -CONFIG_SSB_POSSIBLE=y -# CONFIG_SSB is not set -CONFIG_BCMA_POSSIBLE=y -# CONFIG_BCMA is not set - -# -# Multifunction device drivers -# -CONFIG_MFD_CORE=y -# CONFIG_MFD_ADP5585 is not set -# CONFIG_MFD_ACT8945A is not set -# CONFIG_MFD_AS3711 is not set -# CONFIG_MFD_SMPRO is not set -# CONFIG_MFD_AS3722 is not set -# CONFIG_PMIC_ADP5520 is not set -# CONFIG_MFD_AAT2870_CORE is not set -# CONFIG_MFD_ATMEL_FLEXCOM is not set -# CONFIG_MFD_ATMEL_HLCDC is not set -# CONFIG_MFD_BCM590XX is not set -# CONFIG_MFD_BD9571MWV is not set -# CONFIG_MFD_AXP20X_I2C is not set -# CONFIG_MFD_CS42L43_I2C is not set -# CONFIG_MFD_MADERA is not set -# CONFIG_MFD_MAX5970 is not set -# CONFIG_PMIC_DA903X is not set -# CONFIG_MFD_DA9052_SPI is not set -# CONFIG_MFD_DA9052_I2C is not set -# CONFIG_MFD_DA9055 is not set -# CONFIG_MFD_DA9062 is not set -# CONFIG_MFD_DA9063 is not set -# CONFIG_MFD_DA9150 is not set -# CONFIG_MFD_DLN2 is not set -# CONFIG_MFD_GATEWORKS_GSC is not set -# CONFIG_MFD_MC13XXX_SPI is not set -# CONFIG_MFD_MC13XXX_I2C is not set -# CONFIG_MFD_MP2629 is not set -# CONFIG_MFD_HI6421_PMIC is not set -# CONFIG_LPC_ICH is not set -# CONFIG_LPC_SCH is not set -# CONFIG_MFD_IQS62X is not set -# CONFIG_MFD_JANZ_CMODIO is not set -# CONFIG_MFD_KEMPLD is not set -# CONFIG_MFD_88PM800 is not set -# CONFIG_MFD_88PM805 is not set -# CONFIG_MFD_88PM860X is not set -# CONFIG_MFD_88PM886_PMIC is not set -# CONFIG_MFD_MAX14577 is not set -# CONFIG_MFD_MAX77541 is not set -# CONFIG_MFD_MAX77620 is not set -# CONFIG_MFD_MAX77650 is not set -# CONFIG_MFD_MAX77686 is not set -# CONFIG_MFD_MAX77693 is not set -# CONFIG_MFD_MAX77714 is not set -# CONFIG_MFD_MAX77843 is not set -# CONFIG_MFD_MAX8907 is not set -# CONFIG_MFD_MAX8925 is not set -# CONFIG_MFD_MAX8997 is not set -# CONFIG_MFD_MAX8998 is not set -# CONFIG_MFD_MT6360 is not set -# CONFIG_MFD_MT6370 is not set -# CONFIG_MFD_MT6397 is not set -# CONFIG_MFD_MENF21BMC is not set -# CONFIG_MFD_OCELOT is not set -# CONFIG_EZX_PCAP is not set -# CONFIG_MFD_CPCAP is not set -# CONFIG_MFD_VIPERBOARD is not set -# CONFIG_MFD_NTXEC is not set -# CONFIG_MFD_RETU is not set -# CONFIG_MFD_PCF50633 is not set -# CONFIG_MFD_SY7636A is not set -# CONFIG_MFD_RDC321X is not set -# CONFIG_MFD_RT4831 is not set -# CONFIG_MFD_RT5033 is not set -# CONFIG_MFD_RT5120 is not set -# CONFIG_MFD_RC5T583 is not set -CONFIG_MFD_RK8XX=y -CONFIG_MFD_RK8XX_I2C=y -# CONFIG_MFD_RK8XX_SPI is not set -# CONFIG_MFD_RN5T618 is not set -# CONFIG_MFD_SEC_CORE is not set -# CONFIG_MFD_SI476X_CORE is not set -# CONFIG_MFD_SM501 is not set -# CONFIG_MFD_SKY81452 is not set -# CONFIG_MFD_STMPE is not set -CONFIG_MFD_SYSCON=y -# CONFIG_MFD_LP3943 is not set -# CONFIG_MFD_LP8788 is not set -# CONFIG_MFD_TI_LMU is not set -# CONFIG_MFD_PALMAS is not set -# CONFIG_TPS6105X is not set -# CONFIG_TPS65010 is not set -# CONFIG_TPS6507X is not set -# CONFIG_MFD_TPS65086 is not set -# CONFIG_MFD_TPS65090 is not set -# CONFIG_MFD_TPS65217 is not set -# CONFIG_MFD_TI_LP873X is not set -# CONFIG_MFD_TI_LP87565 is not set -# CONFIG_MFD_TPS65218 is not set -# CONFIG_MFD_TPS65219 is not set -# CONFIG_MFD_TPS6586X is not set -# CONFIG_MFD_TPS65910 is not set -# CONFIG_MFD_TPS65912_I2C is not set -# CONFIG_MFD_TPS65912_SPI is not set -# CONFIG_MFD_TPS6594_I2C is not set -# CONFIG_MFD_TPS6594_SPI is not set -# CONFIG_TWL4030_CORE is not set -# CONFIG_TWL6040_CORE is not set -# CONFIG_MFD_WL1273_CORE is not set -# CONFIG_MFD_LM3533 is not set -# CONFIG_MFD_TC3589X is not set -# CONFIG_MFD_TQMX86 is not set -# CONFIG_MFD_VX855 is not set -# CONFIG_MFD_LOCHNAGAR is not set -# CONFIG_MFD_ARIZONA_I2C is not set -# CONFIG_MFD_ARIZONA_SPI is not set -# CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM831X_I2C is not set -# CONFIG_MFD_WM831X_SPI is not set -# CONFIG_MFD_WM8350_I2C is not set -# CONFIG_MFD_WM8994 is not set -# CONFIG_MFD_ROHM_BD718XX is not set -# CONFIG_MFD_ROHM_BD71828 is not set -# CONFIG_MFD_ROHM_BD957XMUF is not set -# CONFIG_MFD_ROHM_BD96801 is not set -# CONFIG_MFD_STPMIC1 is not set -# CONFIG_MFD_STMFX is not set -# CONFIG_MFD_ATC260X_I2C is not set -# CONFIG_MFD_KHADAS_MCU is not set -# CONFIG_MFD_QCOM_PM8008 is not set -# CONFIG_MFD_CS40L50_I2C is not set -# CONFIG_MFD_CS40L50_SPI is not set -# CONFIG_RAVE_SP_CORE is not set -# CONFIG_MFD_INTEL_M10_BMC_SPI is not set -# CONFIG_MFD_RSMU_I2C is not set -# CONFIG_MFD_RSMU_SPI is not set -# end of Multifunction device drivers - -CONFIG_REGULATOR=y -# CONFIG_REGULATOR_DEBUG is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=y -# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set -# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set -# CONFIG_REGULATOR_NETLINK_EVENTS is not set -# CONFIG_REGULATOR_88PG86X is not set -# CONFIG_REGULATOR_ACT8865 is not set -# CONFIG_REGULATOR_AD5398 is not set -# CONFIG_REGULATOR_ARM_SCMI is not set -# CONFIG_REGULATOR_AW37503 is not set -# CONFIG_REGULATOR_DA9121 is not set -# CONFIG_REGULATOR_DA9210 is not set -# CONFIG_REGULATOR_DA9211 is not set -CONFIG_REGULATOR_FAN53555=y -# CONFIG_REGULATOR_FAN53880 is not set -# CONFIG_REGULATOR_GPIO is not set -# CONFIG_REGULATOR_ISL9305 is not set -# CONFIG_REGULATOR_ISL6271A is not set -# CONFIG_REGULATOR_LP3971 is not set -# CONFIG_REGULATOR_LP3972 is not set -# CONFIG_REGULATOR_LP872X is not set -# CONFIG_REGULATOR_LP8755 is not set -# CONFIG_REGULATOR_LTC3589 is not set -# CONFIG_REGULATOR_LTC3676 is not set -# CONFIG_REGULATOR_MAX1586 is not set -# CONFIG_REGULATOR_MAX77503 is not set -# CONFIG_REGULATOR_MAX77857 is not set -# CONFIG_REGULATOR_MAX8649 is not set -# CONFIG_REGULATOR_MAX8660 is not set -# CONFIG_REGULATOR_MAX8893 is not set -# CONFIG_REGULATOR_MAX8952 is not set -# CONFIG_REGULATOR_MAX8973 is not set -# CONFIG_REGULATOR_MAX20086 is not set -# CONFIG_REGULATOR_MAX20411 is not set -# CONFIG_REGULATOR_MAX77826 is not set -# CONFIG_REGULATOR_MCP16502 is not set -# CONFIG_REGULATOR_MP5416 is not set -# CONFIG_REGULATOR_MP8859 is not set -# CONFIG_REGULATOR_MP886X is not set -# CONFIG_REGULATOR_MPQ7920 is not set -# CONFIG_REGULATOR_MT6311 is not set -# CONFIG_REGULATOR_PCA9450 is not set -# CONFIG_REGULATOR_PF8X00 is not set -# CONFIG_REGULATOR_PFUZE100 is not set -# CONFIG_REGULATOR_PV88060 is not set -# CONFIG_REGULATOR_PV88080 is not set -# CONFIG_REGULATOR_PV88090 is not set -# CONFIG_REGULATOR_PWM is not set -# CONFIG_REGULATOR_RAA215300 is not set -# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set -CONFIG_REGULATOR_RK808=y -# CONFIG_REGULATOR_RT4801 is not set -# CONFIG_REGULATOR_RT4803 is not set -# CONFIG_REGULATOR_RT5190A is not set -# CONFIG_REGULATOR_RT5739 is not set -# CONFIG_REGULATOR_RT5759 is not set -# CONFIG_REGULATOR_RT6160 is not set -# CONFIG_REGULATOR_RT6190 is not set -# CONFIG_REGULATOR_RT6245 is not set -# CONFIG_REGULATOR_RTQ2134 is not set -# CONFIG_REGULATOR_RTMV20 is not set -# CONFIG_REGULATOR_RTQ6752 is not set -# CONFIG_REGULATOR_RTQ2208 is not set -# CONFIG_REGULATOR_SLG51000 is not set -# CONFIG_REGULATOR_SY8106A is not set -# CONFIG_REGULATOR_SY8824X is not set -# CONFIG_REGULATOR_SY8827N is not set -# CONFIG_REGULATOR_TPS51632 is not set -# CONFIG_REGULATOR_TPS62360 is not set -# CONFIG_REGULATOR_TPS6286X is not set -# CONFIG_REGULATOR_TPS6287X is not set -# CONFIG_REGULATOR_TPS65023 is not set -# CONFIG_REGULATOR_TPS6507X is not set -# CONFIG_REGULATOR_TPS65132 is not set -CONFIG_REGULATOR_TPS65185=m -# CONFIG_REGULATOR_TPS6524X is not set -# CONFIG_REGULATOR_VCTRL is not set -# CONFIG_RC_CORE is not set - -# -# CEC support -# -# CONFIG_MEDIA_CEC_SUPPORT is not set -# end of CEC support - -CONFIG_MEDIA_SUPPORT=m -# CONFIG_MEDIA_SUPPORT_FILTER is not set -# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set - -# -# Media device types -# -CONFIG_MEDIA_CAMERA_SUPPORT=y -CONFIG_MEDIA_ANALOG_TV_SUPPORT=y -CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y -CONFIG_MEDIA_RADIO_SUPPORT=y -CONFIG_MEDIA_SDR_SUPPORT=y -CONFIG_MEDIA_PLATFORM_SUPPORT=y -CONFIG_MEDIA_TEST_SUPPORT=y -# end of Media device types - -# -# Media core support -# -CONFIG_VIDEO_DEV=m -CONFIG_MEDIA_CONTROLLER=y -CONFIG_DVB_CORE=m -# end of Media core support - -# -# Video4Linux options -# -CONFIG_VIDEO_V4L2_I2C=y -CONFIG_VIDEO_V4L2_SUBDEV_API=y -# CONFIG_VIDEO_ADV_DEBUG is not set -# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set -CONFIG_V4L2_JPEG_HELPER=m -CONFIG_V4L2_H264=m -CONFIG_V4L2_VP9=m -CONFIG_V4L2_MEM2MEM_DEV=m -# CONFIG_V4L2_FLASH_LED_CLASS is not set -CONFIG_V4L2_FWNODE=m -CONFIG_V4L2_ASYNC=m -# end of Video4Linux options - -# -# Media controller options -# -# CONFIG_MEDIA_CONTROLLER_DVB is not set -# end of Media controller options - -# -# Digital TV options -# -# CONFIG_DVB_MMAP is not set -# CONFIG_DVB_NET is not set -CONFIG_DVB_MAX_ADAPTERS=16 -# CONFIG_DVB_DYNAMIC_MINORS is not set -# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set -# CONFIG_DVB_ULE_DEBUG is not set -# end of Digital TV options - -# -# Media drivers -# - -# -# Media drivers -# -# CONFIG_MEDIA_USB_SUPPORT is not set -# CONFIG_MEDIA_PCI_SUPPORT is not set -# CONFIG_RADIO_ADAPTERS is not set -CONFIG_MEDIA_PLATFORM_DRIVERS=y -# CONFIG_V4L_PLATFORM_DRIVERS is not set -# CONFIG_SDR_PLATFORM_DRIVERS is not set -# CONFIG_DVB_PLATFORM_DRIVERS is not set -CONFIG_V4L_MEM2MEM_DRIVERS=y -# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set - -# -# Allegro DVT media platform drivers -# - -# -# Amlogic media platform drivers -# - -# -# Amphion drivers -# - -# -# Aspeed media platform drivers -# - -# -# Atmel media platform drivers -# - -# -# Cadence media platform drivers -# -# CONFIG_VIDEO_CADENCE_CSI2RX is not set -# CONFIG_VIDEO_CADENCE_CSI2TX is not set - -# -# Chips&Media media platform drivers -# - -# -# Intel media platform drivers -# - -# -# Marvell media platform drivers -# - -# -# Mediatek media platform drivers -# - -# -# Microchip Technology, Inc. media platform drivers -# - -# -# Nuvoton media platform drivers -# - -# -# NVidia media platform drivers -# - -# -# NXP media platform drivers -# - -# -# Qualcomm media platform drivers -# - -# -# Raspberry Pi media platform drivers -# - -# -# Renesas media platform drivers -# - -# -# Rockchip media platform drivers -# -CONFIG_VIDEO_ROCKCHIP_RGA=m - -# -# Samsung media platform drivers -# - -# -# STMicroelectronics media platform drivers -# - -# -# Sunxi media platform drivers -# - -# -# Texas Instruments drivers -# - -# -# Verisilicon media platform drivers -# -CONFIG_VIDEO_HANTRO=m -# CONFIG_VIDEO_HANTRO_HEVC_RFC is not set -CONFIG_VIDEO_HANTRO_ROCKCHIP=y - -# -# VIA media platform drivers -# - -# -# Xilinx media platform drivers -# - -# -# MMC/SDIO DVB adapters -# -# CONFIG_SMS_SDIO_DRV is not set -# CONFIG_V4L_TEST_DRIVERS is not set -# CONFIG_DVB_TEST_DRIVERS is not set -CONFIG_UVC_COMMON=m -CONFIG_VIDEOBUF2_CORE=m -CONFIG_VIDEOBUF2_V4L2=m -CONFIG_VIDEOBUF2_MEMOPS=m -CONFIG_VIDEOBUF2_DMA_CONTIG=m -CONFIG_VIDEOBUF2_VMALLOC=m -CONFIG_VIDEOBUF2_DMA_SG=m -# end of Media drivers - -# -# Media ancillary drivers -# -CONFIG_MEDIA_ATTACH=y -CONFIG_VIDEO_CAMERA_SENSOR=y -# CONFIG_VIDEO_ALVIUM_CSI2 is not set -# CONFIG_VIDEO_AR0521 is not set -# CONFIG_VIDEO_GC0308 is not set -# CONFIG_VIDEO_GC05A2 is not set -# CONFIG_VIDEO_GC08A3 is not set -# CONFIG_VIDEO_GC2145 is not set -# CONFIG_VIDEO_HI556 is not set -# CONFIG_VIDEO_HI846 is not set -# CONFIG_VIDEO_HI847 is not set -# CONFIG_VIDEO_IMX208 is not set -# CONFIG_VIDEO_IMX214 is not set -# CONFIG_VIDEO_IMX219 is not set -# CONFIG_VIDEO_IMX258 is not set -# CONFIG_VIDEO_IMX274 is not set -# CONFIG_VIDEO_IMX283 is not set -# CONFIG_VIDEO_IMX290 is not set -# CONFIG_VIDEO_IMX296 is not set -# CONFIG_VIDEO_IMX319 is not set -# CONFIG_VIDEO_IMX334 is not set -# CONFIG_VIDEO_IMX335 is not set -# CONFIG_VIDEO_IMX355 is not set -# CONFIG_VIDEO_IMX412 is not set -# CONFIG_VIDEO_IMX415 is not set -# CONFIG_VIDEO_MT9M001 is not set -# CONFIG_VIDEO_MT9M111 is not set -# CONFIG_VIDEO_MT9M114 is not set -# CONFIG_VIDEO_MT9P031 is not set -# CONFIG_VIDEO_MT9T112 is not set -# CONFIG_VIDEO_MT9V011 is not set -# CONFIG_VIDEO_MT9V032 is not set -# CONFIG_VIDEO_MT9V111 is not set -# CONFIG_VIDEO_OG01A1B is not set -# CONFIG_VIDEO_OV01A10 is not set -# CONFIG_VIDEO_OV02A10 is not set -# CONFIG_VIDEO_OV08D10 is not set -# CONFIG_VIDEO_OV08X40 is not set -# CONFIG_VIDEO_OV13858 is not set -# CONFIG_VIDEO_OV13B10 is not set -# CONFIG_VIDEO_OV2640 is not set -# CONFIG_VIDEO_OV2659 is not set -# CONFIG_VIDEO_OV2680 is not set -# CONFIG_VIDEO_OV2685 is not set -# CONFIG_VIDEO_OV4689 is not set -# CONFIG_VIDEO_OV5640 is not set -# CONFIG_VIDEO_OV5645 is not set -# CONFIG_VIDEO_OV5647 is not set -# CONFIG_VIDEO_OV5648 is not set -# CONFIG_VIDEO_OV5670 is not set -# CONFIG_VIDEO_OV5675 is not set -# CONFIG_VIDEO_OV5693 is not set -# CONFIG_VIDEO_OV5695 is not set -# CONFIG_VIDEO_OV64A40 is not set -# CONFIG_VIDEO_OV6650 is not set -# CONFIG_VIDEO_OV7251 is not set -# CONFIG_VIDEO_OV7640 is not set -# CONFIG_VIDEO_OV7670 is not set -# CONFIG_VIDEO_OV772X is not set -# CONFIG_VIDEO_OV7740 is not set -# CONFIG_VIDEO_OV8856 is not set -# CONFIG_VIDEO_OV8858 is not set -# CONFIG_VIDEO_OV8865 is not set -# CONFIG_VIDEO_OV9282 is not set -# CONFIG_VIDEO_OV9640 is not set -# CONFIG_VIDEO_OV9650 is not set -# CONFIG_VIDEO_RDACM20 is not set -# CONFIG_VIDEO_RDACM21 is not set -# CONFIG_VIDEO_RJ54N1 is not set -# CONFIG_VIDEO_S5C73M3 is not set -# CONFIG_VIDEO_S5K5BAF is not set -# CONFIG_VIDEO_S5K6A3 is not set -# CONFIG_VIDEO_VGXY61 is not set -# CONFIG_VIDEO_CCS is not set -# CONFIG_VIDEO_ET8EK8 is not set - -# -# Camera ISPs -# -# CONFIG_VIDEO_THP7312 is not set -# end of Camera ISPs - -# -# Lens drivers -# -# CONFIG_VIDEO_AD5820 is not set -# CONFIG_VIDEO_AK7375 is not set -# CONFIG_VIDEO_DW9714 is not set -# CONFIG_VIDEO_DW9719 is not set -# CONFIG_VIDEO_DW9768 is not set -# CONFIG_VIDEO_DW9807_VCM is not set -# end of Lens drivers - -# -# Flash devices -# -# CONFIG_VIDEO_ADP1653 is not set -# CONFIG_VIDEO_LM3560 is not set -# CONFIG_VIDEO_LM3646 is not set -# end of Flash devices - -# -# Audio decoders, processors and mixers -# -# CONFIG_VIDEO_CS3308 is not set -# CONFIG_VIDEO_CS5345 is not set -# CONFIG_VIDEO_CS53L32A is not set -# CONFIG_VIDEO_MSP3400 is not set -# CONFIG_VIDEO_SONY_BTF_MPX is not set -# CONFIG_VIDEO_TDA1997X is not set -# CONFIG_VIDEO_TDA7432 is not set -# CONFIG_VIDEO_TDA9840 is not set -# CONFIG_VIDEO_TEA6415C is not set -# CONFIG_VIDEO_TEA6420 is not set -# CONFIG_VIDEO_TLV320AIC23B is not set -# CONFIG_VIDEO_TVAUDIO is not set -# CONFIG_VIDEO_UDA1342 is not set -# CONFIG_VIDEO_VP27SMPX is not set -# CONFIG_VIDEO_WM8739 is not set -# CONFIG_VIDEO_WM8775 is not set -# end of Audio decoders, processors and mixers - -# -# RDS decoders -# -# CONFIG_VIDEO_SAA6588 is not set -# end of RDS decoders - -# -# Video decoders -# -# CONFIG_VIDEO_ADV7180 is not set -# CONFIG_VIDEO_ADV7183 is not set -# CONFIG_VIDEO_ADV748X is not set -# CONFIG_VIDEO_ADV7604 is not set -# CONFIG_VIDEO_ADV7842 is not set -# CONFIG_VIDEO_BT819 is not set -# CONFIG_VIDEO_BT856 is not set -# CONFIG_VIDEO_BT866 is not set -# CONFIG_VIDEO_ISL7998X is not set -# CONFIG_VIDEO_KS0127 is not set -# CONFIG_VIDEO_ML86V7667 is not set -# CONFIG_VIDEO_SAA7110 is not set -# CONFIG_VIDEO_SAA711X is not set -# CONFIG_VIDEO_TC358743 is not set -# CONFIG_VIDEO_TC358746 is not set -# CONFIG_VIDEO_TVP514X is not set -# CONFIG_VIDEO_TVP5150 is not set -# CONFIG_VIDEO_TVP7002 is not set -# CONFIG_VIDEO_TW2804 is not set -# CONFIG_VIDEO_TW9900 is not set -# CONFIG_VIDEO_TW9903 is not set -# CONFIG_VIDEO_TW9906 is not set -# CONFIG_VIDEO_TW9910 is not set -# CONFIG_VIDEO_VPX3220 is not set - -# -# Video and audio decoders -# -# CONFIG_VIDEO_SAA717X is not set -# CONFIG_VIDEO_CX25840 is not set -# end of Video decoders - -# -# Video encoders -# -# CONFIG_VIDEO_ADV7170 is not set -# CONFIG_VIDEO_ADV7175 is not set -# CONFIG_VIDEO_ADV7343 is not set -# CONFIG_VIDEO_ADV7393 is not set -# CONFIG_VIDEO_ADV7511 is not set -# CONFIG_VIDEO_AK881X is not set -# CONFIG_VIDEO_SAA7127 is not set -# CONFIG_VIDEO_SAA7185 is not set -# CONFIG_VIDEO_THS8200 is not set -# end of Video encoders - -# -# Video improvement chips -# -# CONFIG_VIDEO_UPD64031A is not set -# CONFIG_VIDEO_UPD64083 is not set -# end of Video improvement chips - -# -# Audio/Video compression chips -# -# CONFIG_VIDEO_SAA6752HS is not set -# end of Audio/Video compression chips - -# -# SDR tuner chips -# -# CONFIG_SDR_MAX2175 is not set -# end of SDR tuner chips - -# -# Miscellaneous helper chips -# -# CONFIG_VIDEO_I2C is not set -# CONFIG_VIDEO_M52790 is not set -# CONFIG_VIDEO_ST_MIPID02 is not set -# CONFIG_VIDEO_THS7303 is not set -# end of Miscellaneous helper chips - -# -# Video serializers and deserializers -# -# CONFIG_VIDEO_DS90UB913 is not set -# CONFIG_VIDEO_DS90UB953 is not set -# CONFIG_VIDEO_DS90UB960 is not set -# CONFIG_VIDEO_MAX96714 is not set -# CONFIG_VIDEO_MAX96717 is not set -# end of Video serializers and deserializers - -# -# Media SPI Adapters -# -# CONFIG_CXD2880_SPI_DRV is not set -# CONFIG_VIDEO_GS1662 is not set -# end of Media SPI Adapters - -CONFIG_MEDIA_TUNER=m - -# -# Customize TV tuners -# -# CONFIG_MEDIA_TUNER_E4000 is not set -# CONFIG_MEDIA_TUNER_FC0011 is not set -# CONFIG_MEDIA_TUNER_FC0012 is not set -# CONFIG_MEDIA_TUNER_FC0013 is not set -# CONFIG_MEDIA_TUNER_FC2580 is not set -# CONFIG_MEDIA_TUNER_IT913X is not set -# CONFIG_MEDIA_TUNER_M88RS6000T is not set -# CONFIG_MEDIA_TUNER_MAX2165 is not set -# CONFIG_MEDIA_TUNER_MC44S803 is not set -# CONFIG_MEDIA_TUNER_MSI001 is not set -# CONFIG_MEDIA_TUNER_MT2060 is not set -# CONFIG_MEDIA_TUNER_MT2063 is not set -# CONFIG_MEDIA_TUNER_MT20XX is not set -# CONFIG_MEDIA_TUNER_MT2131 is not set -# CONFIG_MEDIA_TUNER_MT2266 is not set -# CONFIG_MEDIA_TUNER_MXL301RF is not set -# CONFIG_MEDIA_TUNER_MXL5005S is not set -# CONFIG_MEDIA_TUNER_MXL5007T is not set -# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set -# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set -# CONFIG_MEDIA_TUNER_QT1010 is not set -# CONFIG_MEDIA_TUNER_R820T is not set -# CONFIG_MEDIA_TUNER_SI2157 is not set -# CONFIG_MEDIA_TUNER_SIMPLE is not set -# CONFIG_MEDIA_TUNER_TDA18212 is not set -# CONFIG_MEDIA_TUNER_TDA18218 is not set -# CONFIG_MEDIA_TUNER_TDA18250 is not set -# CONFIG_MEDIA_TUNER_TDA18271 is not set -# CONFIG_MEDIA_TUNER_TDA827X is not set -# CONFIG_MEDIA_TUNER_TDA8290 is not set -# CONFIG_MEDIA_TUNER_TDA9887 is not set -# CONFIG_MEDIA_TUNER_TEA5761 is not set -# CONFIG_MEDIA_TUNER_TEA5767 is not set -# CONFIG_MEDIA_TUNER_TUA9001 is not set -# CONFIG_MEDIA_TUNER_XC2028 is not set -# CONFIG_MEDIA_TUNER_XC4000 is not set -# CONFIG_MEDIA_TUNER_XC5000 is not set -# end of Customize TV tuners - -# -# Customise DVB Frontends -# - -# -# Multistandard (satellite) frontends -# -# CONFIG_DVB_MXL5XX is not set -# CONFIG_DVB_STB0899 is not set -# CONFIG_DVB_STB6100 is not set -# CONFIG_DVB_STV090x is not set -# CONFIG_DVB_STV0910 is not set -# CONFIG_DVB_STV6110x is not set -# CONFIG_DVB_STV6111 is not set - -# -# Multistandard (cable + terrestrial) frontends -# -# CONFIG_DVB_DRXK is not set -# CONFIG_DVB_MN88472 is not set -# CONFIG_DVB_MN88473 is not set -# CONFIG_DVB_SI2165 is not set -# CONFIG_DVB_TDA18271C2DD is not set - -# -# DVB-S (satellite) frontends -# -# CONFIG_DVB_CX24110 is not set -# CONFIG_DVB_CX24116 is not set -# CONFIG_DVB_CX24117 is not set -# CONFIG_DVB_CX24120 is not set -# CONFIG_DVB_CX24123 is not set -# CONFIG_DVB_DS3000 is not set -# CONFIG_DVB_MB86A16 is not set -# CONFIG_DVB_MT312 is not set -# CONFIG_DVB_S5H1420 is not set -# CONFIG_DVB_SI21XX is not set -# CONFIG_DVB_STB6000 is not set -# CONFIG_DVB_STV0288 is not set -# CONFIG_DVB_STV0299 is not set -# CONFIG_DVB_STV0900 is not set -# CONFIG_DVB_STV6110 is not set -# CONFIG_DVB_TDA10071 is not set -# CONFIG_DVB_TDA10086 is not set -# CONFIG_DVB_TDA8083 is not set -# CONFIG_DVB_TDA8261 is not set -# CONFIG_DVB_TDA826X is not set -# CONFIG_DVB_TS2020 is not set -# CONFIG_DVB_TUA6100 is not set -# CONFIG_DVB_TUNER_CX24113 is not set -# CONFIG_DVB_TUNER_ITD1000 is not set -# CONFIG_DVB_VES1X93 is not set -# CONFIG_DVB_ZL10036 is not set -# CONFIG_DVB_ZL10039 is not set - -# -# DVB-T (terrestrial) frontends -# -# CONFIG_DVB_CX22700 is not set -# CONFIG_DVB_CX22702 is not set -# CONFIG_DVB_CXD2820R is not set -# CONFIG_DVB_CXD2841ER is not set -# CONFIG_DVB_DIB3000MB is not set -# CONFIG_DVB_DIB3000MC is not set -# CONFIG_DVB_DIB7000M is not set -# CONFIG_DVB_DIB7000P is not set -# CONFIG_DVB_DIB9000 is not set -# CONFIG_DVB_DRXD is not set -# CONFIG_DVB_EC100 is not set -# CONFIG_DVB_L64781 is not set -# CONFIG_DVB_MT352 is not set -# CONFIG_DVB_NXT6000 is not set -# CONFIG_DVB_S5H1432 is not set -# CONFIG_DVB_SP887X is not set -# CONFIG_DVB_STV0367 is not set -# CONFIG_DVB_TDA10048 is not set -# CONFIG_DVB_TDA1004X is not set -# CONFIG_DVB_ZD1301_DEMOD is not set -# CONFIG_DVB_ZL10353 is not set -# CONFIG_DVB_CXD2880 is not set - -# -# DVB-C (cable) frontends -# -# CONFIG_DVB_STV0297 is not set -# CONFIG_DVB_TDA10021 is not set -# CONFIG_DVB_TDA10023 is not set -# CONFIG_DVB_VES1820 is not set - -# -# ATSC (North American/Korean Terrestrial/Cable DTV) frontends -# -# CONFIG_DVB_AU8522_DTV is not set -# CONFIG_DVB_AU8522_V4L is not set -# CONFIG_DVB_BCM3510 is not set -# CONFIG_DVB_LG2160 is not set -# CONFIG_DVB_LGDT3305 is not set -# CONFIG_DVB_LGDT330X is not set -# CONFIG_DVB_MXL692 is not set -# CONFIG_DVB_NXT200X is not set -# CONFIG_DVB_OR51132 is not set -# CONFIG_DVB_OR51211 is not set -# CONFIG_DVB_S5H1409 is not set -# CONFIG_DVB_S5H1411 is not set - -# -# ISDB-T (terrestrial) frontends -# -# CONFIG_DVB_DIB8000 is not set -# CONFIG_DVB_MB86A20S is not set -# CONFIG_DVB_S921 is not set - -# -# ISDB-S (satellite) & ISDB-T (terrestrial) frontends -# -# CONFIG_DVB_MN88443X is not set -# CONFIG_DVB_TC90522 is not set - -# -# Digital terrestrial only tuners/PLL -# -# CONFIG_DVB_PLL is not set -# CONFIG_DVB_TUNER_DIB0070 is not set -# CONFIG_DVB_TUNER_DIB0090 is not set - -# -# SEC control devices for DVB-S -# -# CONFIG_DVB_A8293 is not set -# CONFIG_DVB_AF9033 is not set -# CONFIG_DVB_ASCOT2E is not set -# CONFIG_DVB_ATBM8830 is not set -# CONFIG_DVB_HELENE is not set -# CONFIG_DVB_HORUS3A is not set -# CONFIG_DVB_ISL6405 is not set -# CONFIG_DVB_ISL6421 is not set -# CONFIG_DVB_ISL6423 is not set -# CONFIG_DVB_IX2505V is not set -# CONFIG_DVB_LGS8GL5 is not set -# CONFIG_DVB_LGS8GXX is not set -# CONFIG_DVB_LNBH25 is not set -# CONFIG_DVB_LNBH29 is not set -# CONFIG_DVB_LNBP21 is not set -# CONFIG_DVB_LNBP22 is not set -# CONFIG_DVB_M88RS2000 is not set -# CONFIG_DVB_TDA665x is not set -# CONFIG_DVB_DRX39XYJ is not set - -# -# Common Interface (EN50221) controller drivers -# -# CONFIG_DVB_CXD2099 is not set -# CONFIG_DVB_SP2 is not set -# end of Customise DVB Frontends - -# -# Tools to develop new frontends -# -# CONFIG_DVB_DUMMY_FE is not set -# end of Media ancillary drivers - -# -# Graphics support -# -CONFIG_VIDEO=y -# CONFIG_AUXDISPLAY is not set -CONFIG_DRM=m -CONFIG_DRM_MIPI_DSI=y -# CONFIG_DRM_DEBUG_MM is not set -CONFIG_DRM_KMS_HELPER=m -# CONFIG_DRM_PANIC is not set -# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set -# CONFIG_DRM_DEBUG_MODESET_LOCK is not set -CONFIG_DRM_FBDEV_EMULATION=y -CONFIG_DRM_FBDEV_OVERALLOC=100 -# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set -# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set -CONFIG_DRM_DISPLAY_HELPER=m -CONFIG_DRM_BRIDGE_CONNECTOR=y -# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set -# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set -CONFIG_DRM_DISPLAY_HDMI_HELPER=y -CONFIG_DRM_DISPLAY_HDMI_STATE_HELPER=y -CONFIG_DRM_EPD_HELPER=m -CONFIG_DRM_TTM=m -CONFIG_DRM_TTM_HELPER=m -CONFIG_DRM_GEM_DMA_HELPER=m -CONFIG_DRM_GEM_SHMEM_HELPER=m -CONFIG_DRM_SCHED=m - -# -# I2C encoder or helper chips -# -# CONFIG_DRM_I2C_CH7006 is not set -# CONFIG_DRM_I2C_SIL164 is not set -# CONFIG_DRM_I2C_NXP_TDA998X is not set -# CONFIG_DRM_I2C_NXP_TDA9950 is not set -# end of I2C encoder or helper chips - -# -# ARM devices -# -# CONFIG_DRM_HDLCD is not set -# CONFIG_DRM_MALI_DISPLAY is not set -# CONFIG_DRM_KOMEDA is not set -# end of ARM devices - -# CONFIG_DRM_RADEON is not set -# CONFIG_DRM_AMDGPU is not set -# CONFIG_DRM_NOUVEAU is not set -# CONFIG_DRM_XE is not set -CONFIG_DRM_VGEM=m -# CONFIG_DRM_VKMS is not set -CONFIG_DRM_ROCKCHIP=m -CONFIG_ROCKCHIP_VOP=y -CONFIG_ROCKCHIP_VOP2=y -# CONFIG_ROCKCHIP_ANALOGIX_DP is not set -# CONFIG_ROCKCHIP_CDN_DP is not set -CONFIG_ROCKCHIP_DW_HDMI=y -CONFIG_ROCKCHIP_DW_MIPI_DSI=y -CONFIG_ROCKCHIP_INNO_HDMI=y -CONFIG_ROCKCHIP_LVDS=y -# CONFIG_ROCKCHIP_RGB is not set -# CONFIG_ROCKCHIP_RK3066_HDMI is not set -CONFIG_DRM_ROCKCHIP_EBC=m -# CONFIG_DRM_VMWGFX is not set -# CONFIG_DRM_UDL is not set -# CONFIG_DRM_AST is not set -# CONFIG_DRM_MGAG200 is not set -# CONFIG_DRM_QXL is not set -CONFIG_DRM_PANEL=y - -# -# Display Panels -# -# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set -# CONFIG_DRM_PANEL_ARM_VERSATILE is not set -# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set -# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set -# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set -# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set -# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set -# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set -# CONFIG_DRM_PANEL_BOE_TV101WUM_LL2 is not set -# CONFIG_DRM_PANEL_EBBG_FT8719 is not set -# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set -# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set -# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set -# CONFIG_DRM_PANEL_DSI_CM is not set -# CONFIG_DRM_PANEL_LVDS is not set -# CONFIG_DRM_PANEL_HIMAX_HX83102 is not set -# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set -# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set -# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9806E is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set -# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set -# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set -# CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set -# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set -# CONFIG_DRM_PANEL_JDI_LPM102A188A is not set -# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set -# CONFIG_DRM_PANEL_JDI_R63452 is not set -# CONFIG_DRM_PANEL_KHADAS_TS050 is not set -# CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set -# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set -# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set -# CONFIG_DRM_PANEL_LINCOLNTECH_LCD197 is not set -# CONFIG_DRM_PANEL_LG_LB035Q02 is not set -# CONFIG_DRM_PANEL_LG_LG4573 is not set -# CONFIG_DRM_PANEL_LG_SW43408 is not set -# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set -# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set -# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set -# CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set -# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set -# CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set -# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set -# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set -# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set -# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set -# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set -# CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set -# CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS is not set -# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set -# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set -# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set -# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set -# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set -# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set -# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set -# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set -# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set -# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set -# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set -# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set -# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set -# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set -# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set -# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set -# CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set -# CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set -# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set -# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set -# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set -# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set -# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set -# CONFIG_DRM_PANEL_EDP is not set -CONFIG_DRM_PANEL_SIMPLE=m -# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set -# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set -# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set -# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set -# CONFIG_DRM_PANEL_TPO_TPG110 is not set -# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set -# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set -# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set -# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set -# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set -# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set -# end of Display Panels - -CONFIG_DRM_BRIDGE=y -CONFIG_DRM_PANEL_BRIDGE=y - -# -# Display Interface Bridges -# -# CONFIG_DRM_CHIPONE_ICN6211 is not set -# CONFIG_DRM_CHRONTEL_CH7033 is not set -# CONFIG_DRM_DISPLAY_CONNECTOR is not set -# CONFIG_DRM_ITE_IT6505 is not set -# CONFIG_DRM_LONTIUM_LT8912B is not set -# CONFIG_DRM_LONTIUM_LT9211 is not set -# CONFIG_DRM_LONTIUM_LT9611 is not set -# CONFIG_DRM_LONTIUM_LT9611UXC is not set -# CONFIG_DRM_ITE_IT66121 is not set -# CONFIG_DRM_LVDS_CODEC is not set -# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set -# CONFIG_DRM_NWL_MIPI_DSI is not set -# CONFIG_DRM_NXP_PTN3460 is not set -# CONFIG_DRM_PARADE_PS8622 is not set -# CONFIG_DRM_PARADE_PS8640 is not set -# CONFIG_DRM_SAMSUNG_DSIM is not set -# CONFIG_DRM_SIL_SII8620 is not set -# CONFIG_DRM_SII902X is not set -# CONFIG_DRM_SII9234 is not set -# CONFIG_DRM_SIMPLE_BRIDGE is not set -# CONFIG_DRM_THINE_THC63LVD1024 is not set -# CONFIG_DRM_TOSHIBA_TC358762 is not set -# CONFIG_DRM_TOSHIBA_TC358764 is not set -# CONFIG_DRM_TOSHIBA_TC358767 is not set -# CONFIG_DRM_TOSHIBA_TC358768 is not set -# CONFIG_DRM_TOSHIBA_TC358775 is not set -# CONFIG_DRM_TI_DLPC3433 is not set -# CONFIG_DRM_TI_TFP410 is not set -# CONFIG_DRM_TI_SN65DSI83 is not set -# CONFIG_DRM_TI_SN65DSI86 is not set -# CONFIG_DRM_TI_TPD12S015 is not set -# CONFIG_DRM_ANALOGIX_ANX6345 is not set -# CONFIG_DRM_ANALOGIX_ANX78XX is not set -# CONFIG_DRM_ANALOGIX_ANX7625 is not set -# CONFIG_DRM_I2C_ADV7511 is not set -# CONFIG_DRM_CDNS_DSI is not set -# CONFIG_DRM_CDNS_MHDP8546 is not set -CONFIG_DRM_DW_HDMI=m -# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set -# CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set -# CONFIG_DRM_DW_HDMI_GP_AUDIO is not set -# CONFIG_DRM_DW_HDMI_CEC is not set -CONFIG_DRM_DW_MIPI_DSI=m -# end of Display Interface Bridges - -# CONFIG_DRM_ETNAVIV is not set -# CONFIG_DRM_HISI_HIBMC is not set -# CONFIG_DRM_HISI_KIRIN is not set -# CONFIG_DRM_LOGICVC is not set -# CONFIG_DRM_ARCPGU is not set -# CONFIG_DRM_BOCHS is not set -# CONFIG_DRM_CIRRUS_QEMU is not set -# CONFIG_DRM_GM12U320 is not set -# CONFIG_DRM_PANEL_MIPI_DBI is not set -# CONFIG_DRM_SIMPLEDRM is not set -# CONFIG_TINYDRM_HX8357D is not set -# CONFIG_TINYDRM_ILI9163 is not set -# CONFIG_TINYDRM_ILI9225 is not set -# CONFIG_TINYDRM_ILI9341 is not set -# CONFIG_TINYDRM_ILI9486 is not set -# CONFIG_TINYDRM_MI0283QT is not set -# CONFIG_TINYDRM_REPAPER is not set -# CONFIG_TINYDRM_ST7586 is not set -# CONFIG_TINYDRM_ST7735R is not set -# CONFIG_DRM_PL111 is not set -# CONFIG_DRM_LIMA is not set -CONFIG_DRM_PANFROST=m -# CONFIG_DRM_PANTHOR is not set -# CONFIG_DRM_TIDSS is not set -# CONFIG_DRM_GUD is not set -# CONFIG_DRM_SSD130X is not set -# CONFIG_DRM_POWERVR is not set -# CONFIG_DRM_WERROR is not set -CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=m - -# -# Frame buffer Devices -# -CONFIG_FB=y -# CONFIG_FB_CIRRUS is not set -# CONFIG_FB_PM2 is not set -# CONFIG_FB_CYBER2000 is not set -# CONFIG_FB_ASILIANT is not set -# CONFIG_FB_IMSTT is not set -# CONFIG_FB_EFI is not set -# CONFIG_FB_OPENCORES is not set -# CONFIG_FB_S1D13XXX is not set -# CONFIG_FB_NVIDIA is not set -# CONFIG_FB_RIVA is not set -# CONFIG_FB_I740 is not set -# CONFIG_FB_MATROX is not set -# CONFIG_FB_RADEON is not set -# CONFIG_FB_ATY128 is not set -# CONFIG_FB_ATY is not set -# CONFIG_FB_S3 is not set -# CONFIG_FB_SAVAGE is not set -# CONFIG_FB_SIS is not set -# CONFIG_FB_NEOMAGIC is not set -# CONFIG_FB_KYRO is not set -# CONFIG_FB_3DFX is not set -# CONFIG_FB_VOODOO1 is not set -# CONFIG_FB_VT8623 is not set -# CONFIG_FB_TRIDENT is not set -# CONFIG_FB_ARK is not set -# CONFIG_FB_PM3 is not set -# CONFIG_FB_CARMINE is not set -# CONFIG_FB_SMSCUFX is not set -# CONFIG_FB_UDL is not set -# CONFIG_FB_IBM_GXT4500 is not set -# CONFIG_FB_VIRTUAL is not set -# CONFIG_FB_METRONOME is not set -# CONFIG_FB_MB862XX is not set -# CONFIG_FB_SIMPLE is not set -# CONFIG_FB_SSD1307 is not set -# CONFIG_FB_SM712 is not set -CONFIG_FB_CORE=y -CONFIG_FB_NOTIFY=y -# CONFIG_FIRMWARE_EDID is not set -CONFIG_FB_DEVICE=y -CONFIG_FB_SYS_FILLRECT=y -CONFIG_FB_SYS_COPYAREA=y -CONFIG_FB_SYS_IMAGEBLIT=y -# CONFIG_FB_FOREIGN_ENDIAN is not set -CONFIG_FB_SYSMEM_FOPS=y -CONFIG_FB_DEFERRED_IO=y -CONFIG_FB_DMAMEM_HELPERS=y -CONFIG_FB_SYSMEM_HELPERS=y -CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y -# CONFIG_FB_MODE_HELPERS is not set -# CONFIG_FB_TILEBLITTING is not set -# end of Frame buffer Devices - -# -# Backlight & LCD device support -# -# CONFIG_LCD_CLASS_DEVICE is not set -CONFIG_BACKLIGHT_CLASS_DEVICE=y -# CONFIG_BACKLIGHT_KTD253 is not set -# CONFIG_BACKLIGHT_KTD2801 is not set -# CONFIG_BACKLIGHT_KTZ8866 is not set -# CONFIG_BACKLIGHT_PWM is not set -# CONFIG_BACKLIGHT_QCOM_WLED is not set -# CONFIG_BACKLIGHT_ADP8860 is not set -# CONFIG_BACKLIGHT_ADP8870 is not set -# CONFIG_BACKLIGHT_LM3509 is not set -CONFIG_BACKLIGHT_LM3630A=y -# CONFIG_BACKLIGHT_LM3639 is not set -# CONFIG_BACKLIGHT_LP855X is not set -# CONFIG_BACKLIGHT_MP3309C is not set -# CONFIG_BACKLIGHT_GPIO is not set -# CONFIG_BACKLIGHT_LV5207LP is not set -# CONFIG_BACKLIGHT_BD6107 is not set -# CONFIG_BACKLIGHT_ARCXCNN is not set -# CONFIG_BACKLIGHT_LED is not set -# end of Backlight & LCD device support - -CONFIG_VIDEOMODE_HELPERS=y -CONFIG_HDMI=y - -# -# Console display driver support -# -CONFIG_DUMMY_CONSOLE=y -CONFIG_DUMMY_CONSOLE_COLUMNS=80 -CONFIG_DUMMY_CONSOLE_ROWS=25 -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set -CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y -CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y -CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER=y -# end of Console display driver support - -# CONFIG_LOGO is not set -# end of Graphics support - -# CONFIG_DRM_ACCEL is not set -CONFIG_SOUND=m -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_DMAENGINE_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -CONFIG_SND_UMP=m -CONFIG_SND_UMP_LEGACY_RAWMIDI=y -CONFIG_SND_JACK=y -CONFIG_SND_JACK_INPUT_DEV=y -# CONFIG_SND_OSSEMUL is not set -CONFIG_SND_PCM_TIMER=y -CONFIG_SND_HRTIMER=m -CONFIG_SND_DYNAMIC_MINORS=y -CONFIG_SND_MAX_CARDS=32 -# CONFIG_SND_SUPPORT_OLD_API is not set -CONFIG_SND_PROC_FS=y -CONFIG_SND_VERBOSE_PROCFS=y -CONFIG_SND_CTL_FAST_LOOKUP=y -CONFIG_SND_DEBUG=y -CONFIG_SND_DEBUG_VERBOSE=y -# CONFIG_SND_PCM_XRUN_DEBUG is not set -# CONFIG_SND_CTL_INPUT_VALIDATION is not set -# CONFIG_SND_CTL_DEBUG is not set -# CONFIG_SND_JACK_INJECTION_DEBUG is not set -# CONFIG_SND_UTIMER is not set -CONFIG_SND_VMASTER=y -# CONFIG_SND_SEQUENCER is not set -# CONFIG_SND_DRIVERS is not set -CONFIG_SND_PCI=y -# CONFIG_SND_AD1889 is not set -# CONFIG_SND_ALS300 is not set -# CONFIG_SND_ALI5451 is not set -# CONFIG_SND_ATIIXP is not set -# CONFIG_SND_ATIIXP_MODEM is not set -# CONFIG_SND_AU8810 is not set -# CONFIG_SND_AU8820 is not set -# CONFIG_SND_AU8830 is not set -# CONFIG_SND_AW2 is not set -# CONFIG_SND_AZT3328 is not set -# CONFIG_SND_BT87X is not set -# CONFIG_SND_CA0106 is not set -# CONFIG_SND_CMIPCI is not set -# CONFIG_SND_OXYGEN is not set -# CONFIG_SND_CS4281 is not set -# CONFIG_SND_CS46XX is not set -# CONFIG_SND_CTXFI is not set -# CONFIG_SND_DARLA20 is not set -# CONFIG_SND_GINA20 is not set -# CONFIG_SND_LAYLA20 is not set -# CONFIG_SND_DARLA24 is not set -# CONFIG_SND_GINA24 is not set -# CONFIG_SND_LAYLA24 is not set -# CONFIG_SND_MONA is not set -# CONFIG_SND_MIA is not set -# CONFIG_SND_ECHO3G is not set -# CONFIG_SND_INDIGO is not set -# CONFIG_SND_INDIGOIO is not set -# CONFIG_SND_INDIGODJ is not set -# CONFIG_SND_INDIGOIOX is not set -# CONFIG_SND_INDIGODJX is not set -# CONFIG_SND_EMU10K1 is not set -# CONFIG_SND_EMU10K1X is not set -# CONFIG_SND_ENS1370 is not set -# CONFIG_SND_ENS1371 is not set -# CONFIG_SND_ES1938 is not set -# CONFIG_SND_ES1968 is not set -# CONFIG_SND_FM801 is not set -# CONFIG_SND_HDSP is not set -# CONFIG_SND_HDSPM is not set -# CONFIG_SND_ICE1712 is not set -# CONFIG_SND_ICE1724 is not set -# CONFIG_SND_INTEL8X0 is not set -# CONFIG_SND_INTEL8X0M is not set -# CONFIG_SND_KORG1212 is not set -# CONFIG_SND_LOLA is not set -# CONFIG_SND_LX6464ES is not set -# CONFIG_SND_MAESTRO3 is not set -# CONFIG_SND_MIXART is not set -# CONFIG_SND_NM256 is not set -# CONFIG_SND_PCXHR is not set -# CONFIG_SND_RIPTIDE is not set -# CONFIG_SND_RME32 is not set -# CONFIG_SND_RME96 is not set -# CONFIG_SND_RME9652 is not set -# CONFIG_SND_SE6X is not set -# CONFIG_SND_SONICVIBES is not set -# CONFIG_SND_TRIDENT is not set -# CONFIG_SND_VIA82XX is not set -# CONFIG_SND_VIA82XX_MODEM is not set -# CONFIG_SND_VIRTUOSO is not set -# CONFIG_SND_VX222 is not set -# CONFIG_SND_YMFPCI is not set - -# -# HD-Audio -# -# CONFIG_SND_HDA_INTEL is not set -# end of HD-Audio - -CONFIG_SND_HDA_PREALLOC_SIZE=64 -# CONFIG_SND_SPI is not set -CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=m -CONFIG_SND_USB_AUDIO_MIDI_V2=y -CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y -CONFIG_SND_USB_UA101=m -CONFIG_SND_USB_CAIAQ=m -CONFIG_SND_USB_CAIAQ_INPUT=y -CONFIG_SND_USB_6FIRE=m -CONFIG_SND_USB_HIFACE=m -# CONFIG_SND_BCD2000 is not set -CONFIG_SND_USB_LINE6=m -CONFIG_SND_USB_POD=m -CONFIG_SND_USB_PODHD=m -CONFIG_SND_USB_TONEPORT=m -CONFIG_SND_USB_VARIAX=m -CONFIG_SND_SOC=m -CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -# CONFIG_SND_SOC_ADI is not set -# CONFIG_SND_SOC_AMD_ACP is not set -# CONFIG_SND_AMD_ACP_CONFIG is not set -# CONFIG_SND_ATMEL_SOC is not set -# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set -# CONFIG_SND_DESIGNWARE_I2S is not set - -# -# SoC Audio for Freescale CPUs -# - -# -# Common SoC Audio options for Freescale CPUs: -# -# CONFIG_SND_SOC_FSL_ASRC is not set -# CONFIG_SND_SOC_FSL_SAI is not set -# CONFIG_SND_SOC_FSL_AUDMIX is not set -# CONFIG_SND_SOC_FSL_SSI is not set -# CONFIG_SND_SOC_FSL_SPDIF is not set -# CONFIG_SND_SOC_FSL_ESAI is not set -# CONFIG_SND_SOC_FSL_MICFIL is not set -# CONFIG_SND_SOC_FSL_XCVR is not set -# CONFIG_SND_SOC_IMX_AUDMUX is not set -# end of SoC Audio for Freescale CPUs - -# CONFIG_SND_SOC_CHV3_I2S is not set -# CONFIG_SND_I2S_HI6210_I2S is not set -# CONFIG_SND_SOC_IMG is not set -# CONFIG_SND_SOC_MTK_BTCVSD is not set -CONFIG_SND_SOC_ROCKCHIP=m -# CONFIG_SND_SOC_ROCKCHIP_I2S is not set -CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m -CONFIG_SND_SOC_ROCKCHIP_PDM=m -# CONFIG_SND_SOC_ROCKCHIP_SPDIF is not set -# CONFIG_SND_SOC_ROCKCHIP_MAX98090 is not set -# CONFIG_SND_SOC_ROCKCHIP_RT5645 is not set -# CONFIG_SND_SOC_RK3288_HDMI_ANALOG is not set -# CONFIG_SND_SOC_RK3399_GRU_SOUND is not set -# CONFIG_SND_SOC_SOF_TOPLEVEL is not set - -# -# STMicroelectronics STM32 SOC audio support -# -# end of STMicroelectronics STM32 SOC audio support - -# CONFIG_SND_SOC_XILINX_I2S is not set -# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set -# CONFIG_SND_SOC_XILINX_SPDIF is not set -# CONFIG_SND_SOC_XTFPGA_I2S is not set -CONFIG_SND_SOC_I2C_AND_SPI=m - -# -# CODEC drivers -# -# CONFIG_SND_SOC_AC97_CODEC is not set -# CONFIG_SND_SOC_ADAU1372_I2C is not set -# CONFIG_SND_SOC_ADAU1372_SPI is not set -# CONFIG_SND_SOC_ADAU1701 is not set -# CONFIG_SND_SOC_ADAU1761_I2C is not set -# CONFIG_SND_SOC_ADAU1761_SPI is not set -# CONFIG_SND_SOC_ADAU7002 is not set -# CONFIG_SND_SOC_ADAU7118_HW is not set -# CONFIG_SND_SOC_ADAU7118_I2C is not set -# CONFIG_SND_SOC_AK4104 is not set -# CONFIG_SND_SOC_AK4118 is not set -# CONFIG_SND_SOC_AK4375 is not set -# CONFIG_SND_SOC_AK4458 is not set -# CONFIG_SND_SOC_AK4554 is not set -# CONFIG_SND_SOC_AK4613 is not set -# CONFIG_SND_SOC_AK4619 is not set -# CONFIG_SND_SOC_AK4642 is not set -# CONFIG_SND_SOC_AK5386 is not set -# CONFIG_SND_SOC_AK5558 is not set -# CONFIG_SND_SOC_ALC5623 is not set -# CONFIG_SND_SOC_AUDIO_IIO_AUX is not set -# CONFIG_SND_SOC_AW8738 is not set -# CONFIG_SND_SOC_AW88395 is not set -# CONFIG_SND_SOC_AW88261 is not set -# CONFIG_SND_SOC_AW87390 is not set -# CONFIG_SND_SOC_AW88399 is not set -# CONFIG_SND_SOC_BD28623 is not set -CONFIG_SND_SOC_BT_SCO=m -# CONFIG_SND_SOC_CHV3_CODEC is not set -# CONFIG_SND_SOC_CS35L32 is not set -# CONFIG_SND_SOC_CS35L33 is not set -# CONFIG_SND_SOC_CS35L34 is not set -# CONFIG_SND_SOC_CS35L35 is not set -# CONFIG_SND_SOC_CS35L36 is not set -# CONFIG_SND_SOC_CS35L41_SPI is not set -# CONFIG_SND_SOC_CS35L41_I2C is not set -# CONFIG_SND_SOC_CS35L45_SPI is not set -# CONFIG_SND_SOC_CS35L45_I2C is not set -# CONFIG_SND_SOC_CS35L56_I2C is not set -# CONFIG_SND_SOC_CS35L56_SPI is not set -# CONFIG_SND_SOC_CS42L42 is not set -# CONFIG_SND_SOC_CS42L51_I2C is not set -# CONFIG_SND_SOC_CS42L52 is not set -# CONFIG_SND_SOC_CS42L56 is not set -# CONFIG_SND_SOC_CS42L73 is not set -# CONFIG_SND_SOC_CS42L83 is not set -# CONFIG_SND_SOC_CS4234 is not set -# CONFIG_SND_SOC_CS4265 is not set -# CONFIG_SND_SOC_CS4270 is not set -# CONFIG_SND_SOC_CS4271_I2C is not set -# CONFIG_SND_SOC_CS4271_SPI is not set -# CONFIG_SND_SOC_CS42XX8_I2C is not set -# CONFIG_SND_SOC_CS43130 is not set -# CONFIG_SND_SOC_CS4341 is not set -# CONFIG_SND_SOC_CS4349 is not set -# CONFIG_SND_SOC_CS53L30 is not set -# CONFIG_SND_SOC_CS530X_I2C is not set -# CONFIG_SND_SOC_CX2072X is not set -# CONFIG_SND_SOC_DA7213 is not set -CONFIG_SND_SOC_DMIC=m -# CONFIG_SND_SOC_ES7134 is not set -# CONFIG_SND_SOC_ES7241 is not set -# CONFIG_SND_SOC_ES8311 is not set -# CONFIG_SND_SOC_ES8316 is not set -# CONFIG_SND_SOC_ES8326 is not set -# CONFIG_SND_SOC_ES8328_I2C is not set -# CONFIG_SND_SOC_ES8328_SPI is not set -# CONFIG_SND_SOC_GTM601 is not set -# CONFIG_SND_SOC_HDA is not set -# CONFIG_SND_SOC_ICS43432 is not set -# CONFIG_SND_SOC_IDT821034 is not set -# CONFIG_SND_SOC_INNO_RK3036 is not set -# CONFIG_SND_SOC_MAX98088 is not set -# CONFIG_SND_SOC_MAX98090 is not set -# CONFIG_SND_SOC_MAX98357A is not set -# CONFIG_SND_SOC_MAX98504 is not set -# CONFIG_SND_SOC_MAX9867 is not set -# CONFIG_SND_SOC_MAX98927 is not set -# CONFIG_SND_SOC_MAX98520 is not set -# CONFIG_SND_SOC_MAX98373_I2C is not set -# CONFIG_SND_SOC_MAX98388 is not set -# CONFIG_SND_SOC_MAX98390 is not set -# CONFIG_SND_SOC_MAX98396 is not set -# CONFIG_SND_SOC_MAX9860 is not set -# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set -# CONFIG_SND_SOC_PCM1681 is not set -# CONFIG_SND_SOC_PCM1789_I2C is not set -# CONFIG_SND_SOC_PCM179X_I2C is not set -# CONFIG_SND_SOC_PCM179X_SPI is not set -# CONFIG_SND_SOC_PCM186X_I2C is not set -# CONFIG_SND_SOC_PCM186X_SPI is not set -# CONFIG_SND_SOC_PCM3060_I2C is not set -# CONFIG_SND_SOC_PCM3060_SPI is not set -# CONFIG_SND_SOC_PCM3168A_I2C is not set -# CONFIG_SND_SOC_PCM3168A_SPI is not set -# CONFIG_SND_SOC_PCM5102A is not set -# CONFIG_SND_SOC_PCM512x_I2C is not set -# CONFIG_SND_SOC_PCM512x_SPI is not set -# CONFIG_SND_SOC_PCM6240 is not set -# CONFIG_SND_SOC_PEB2466 is not set -# CONFIG_SND_SOC_RK3308 is not set -# CONFIG_SND_SOC_RK3328 is not set -CONFIG_SND_SOC_RK817=m -# CONFIG_SND_SOC_RT5616 is not set -# CONFIG_SND_SOC_RT5631 is not set -# CONFIG_SND_SOC_RT5640 is not set -# CONFIG_SND_SOC_RT5659 is not set -# CONFIG_SND_SOC_RT9120 is not set -# CONFIG_SND_SOC_RTQ9128 is not set -# CONFIG_SND_SOC_SGTL5000 is not set -CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m -# CONFIG_SND_SOC_SIMPLE_MUX is not set -# CONFIG_SND_SOC_SMA1303 is not set -# CONFIG_SND_SOC_SPDIF is not set -# CONFIG_SND_SOC_SRC4XXX_I2C is not set -# CONFIG_SND_SOC_SSM2305 is not set -# CONFIG_SND_SOC_SSM2518 is not set -# CONFIG_SND_SOC_SSM2602_SPI is not set -# CONFIG_SND_SOC_SSM2602_I2C is not set -# CONFIG_SND_SOC_SSM3515 is not set -# CONFIG_SND_SOC_SSM4567 is not set -# CONFIG_SND_SOC_STA32X is not set -# CONFIG_SND_SOC_STA350 is not set -# CONFIG_SND_SOC_STI_SAS is not set -# CONFIG_SND_SOC_TAS2552 is not set -# CONFIG_SND_SOC_TAS2562 is not set -# CONFIG_SND_SOC_TAS2764 is not set -# CONFIG_SND_SOC_TAS2770 is not set -# CONFIG_SND_SOC_TAS2780 is not set -# CONFIG_SND_SOC_TAS2781_I2C is not set -# CONFIG_SND_SOC_TAS5086 is not set -# CONFIG_SND_SOC_TAS571X is not set -# CONFIG_SND_SOC_TAS5720 is not set -# CONFIG_SND_SOC_TAS5805M is not set -# CONFIG_SND_SOC_TAS6424 is not set -# CONFIG_SND_SOC_TDA7419 is not set -# CONFIG_SND_SOC_TFA9879 is not set -# CONFIG_SND_SOC_TFA989X is not set -# CONFIG_SND_SOC_TLV320ADC3XXX is not set -# CONFIG_SND_SOC_TLV320AIC23_I2C is not set -# CONFIG_SND_SOC_TLV320AIC23_SPI is not set -# CONFIG_SND_SOC_TLV320AIC31XX is not set -# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set -# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set -# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set -# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set -# CONFIG_SND_SOC_TLV320ADCX140 is not set -# CONFIG_SND_SOC_TS3A227E is not set -# CONFIG_SND_SOC_TSCS42XX is not set -# CONFIG_SND_SOC_TSCS454 is not set -# CONFIG_SND_SOC_UDA1334 is not set -# CONFIG_SND_SOC_WM8510 is not set -# CONFIG_SND_SOC_WM8523 is not set -# CONFIG_SND_SOC_WM8524 is not set -# CONFIG_SND_SOC_WM8580 is not set -# CONFIG_SND_SOC_WM8711 is not set -# CONFIG_SND_SOC_WM8728 is not set -# CONFIG_SND_SOC_WM8731_I2C is not set -# CONFIG_SND_SOC_WM8731_SPI is not set -# CONFIG_SND_SOC_WM8737 is not set -# CONFIG_SND_SOC_WM8741 is not set -# CONFIG_SND_SOC_WM8750 is not set -# CONFIG_SND_SOC_WM8753 is not set -# CONFIG_SND_SOC_WM8770 is not set -# CONFIG_SND_SOC_WM8776 is not set -# CONFIG_SND_SOC_WM8782 is not set -# CONFIG_SND_SOC_WM8804_I2C is not set -# CONFIG_SND_SOC_WM8804_SPI is not set -# CONFIG_SND_SOC_WM8903 is not set -# CONFIG_SND_SOC_WM8904 is not set -# CONFIG_SND_SOC_WM8940 is not set -# CONFIG_SND_SOC_WM8960 is not set -# CONFIG_SND_SOC_WM8961 is not set -# CONFIG_SND_SOC_WM8962 is not set -# CONFIG_SND_SOC_WM8974 is not set -# CONFIG_SND_SOC_WM8978 is not set -# CONFIG_SND_SOC_WM8985 is not set -# CONFIG_SND_SOC_ZL38060 is not set -# CONFIG_SND_SOC_MAX9759 is not set -# CONFIG_SND_SOC_MT6351 is not set -# CONFIG_SND_SOC_MT6357 is not set -# CONFIG_SND_SOC_MT6358 is not set -# CONFIG_SND_SOC_MT6660 is not set -# CONFIG_SND_SOC_NAU8315 is not set -# CONFIG_SND_SOC_NAU8540 is not set -# CONFIG_SND_SOC_NAU8810 is not set -# CONFIG_SND_SOC_NAU8821 is not set -# CONFIG_SND_SOC_NAU8822 is not set -# CONFIG_SND_SOC_NAU8824 is not set -# CONFIG_SND_SOC_TPA6130A2 is not set -# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set -# CONFIG_SND_SOC_LPASS_VA_MACRO is not set -# CONFIG_SND_SOC_LPASS_RX_MACRO is not set -# CONFIG_SND_SOC_LPASS_TX_MACRO is not set -# end of CODEC drivers - -CONFIG_SND_SIMPLE_CARD_UTILS=m -CONFIG_SND_SIMPLE_CARD=m -# CONFIG_SND_AUDIO_GRAPH_CARD is not set -# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set -# CONFIG_SND_TEST_COMPONENT is not set -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -CONFIG_HID_BATTERY_STRENGTH=y -CONFIG_HIDRAW=y -CONFIG_UHID=m -CONFIG_HID_GENERIC=y - -# -# Special HID drivers -# -# CONFIG_HID_A4TECH is not set -# CONFIG_HID_ACCUTOUCH is not set -# CONFIG_HID_ACRUX is not set -# CONFIG_HID_APPLE is not set -# CONFIG_HID_APPLEIR is not set -# CONFIG_HID_ASUS is not set -# CONFIG_HID_AUREAL is not set -# CONFIG_HID_BELKIN is not set -# CONFIG_HID_BETOP_FF is not set -# CONFIG_HID_BIGBEN_FF is not set -# CONFIG_HID_CHERRY is not set -# CONFIG_HID_CHICONY is not set -# CONFIG_HID_CORSAIR is not set -# CONFIG_HID_COUGAR is not set -# CONFIG_HID_MACALLY is not set -# CONFIG_HID_PRODIKEYS is not set -# CONFIG_HID_CMEDIA is not set -# CONFIG_HID_CP2112 is not set -# CONFIG_HID_CREATIVE_SB0540 is not set -# CONFIG_HID_CYPRESS is not set -# CONFIG_HID_DRAGONRISE is not set -# CONFIG_HID_EMS_FF is not set -# CONFIG_HID_ELAN is not set -# CONFIG_HID_ELECOM is not set -# CONFIG_HID_ELO is not set -# CONFIG_HID_EVISION is not set -# CONFIG_HID_EZKEY is not set -# CONFIG_HID_FT260 is not set -# CONFIG_HID_GEMBIRD is not set -# CONFIG_HID_GFRM is not set -# CONFIG_HID_GLORIOUS is not set -# CONFIG_HID_HOLTEK is not set -# CONFIG_HID_GOODIX_SPI is not set -# CONFIG_HID_GOOGLE_STADIA_FF is not set -# CONFIG_HID_VIVALDI is not set -# CONFIG_HID_GT683R is not set -# CONFIG_HID_KEYTOUCH is not set -# CONFIG_HID_KYE is not set -# CONFIG_HID_UCLOGIC is not set -# CONFIG_HID_WALTOP is not set -# CONFIG_HID_VIEWSONIC is not set -# CONFIG_HID_VRC2 is not set -# CONFIG_HID_XIAOMI is not set -# CONFIG_HID_GYRATION is not set -# CONFIG_HID_ICADE is not set -# CONFIG_HID_ITE is not set -# CONFIG_HID_JABRA is not set -# CONFIG_HID_TWINHAN is not set -# CONFIG_HID_KENSINGTON is not set -# CONFIG_HID_LCPOWER is not set -# CONFIG_HID_LED is not set -# CONFIG_HID_LENOVO is not set -# CONFIG_HID_LETSKETCH is not set -# CONFIG_HID_LOGITECH is not set -# CONFIG_HID_MAGICMOUSE is not set -# CONFIG_HID_MALTRON is not set -# CONFIG_HID_MAYFLASH is not set -# CONFIG_HID_MEGAWORLD_FF is not set -# CONFIG_HID_REDRAGON is not set -CONFIG_HID_MICROSOFT=y -# CONFIG_HID_MONTEREY is not set -# CONFIG_HID_MULTITOUCH is not set -# CONFIG_HID_NINTENDO is not set -# CONFIG_HID_NTI is not set -# CONFIG_HID_NTRIG is not set -# CONFIG_HID_NVIDIA_SHIELD is not set -# CONFIG_HID_ORTEK is not set -# CONFIG_HID_PANTHERLORD is not set -# CONFIG_HID_PENMOUNT is not set -# CONFIG_HID_PETALYNX is not set -# CONFIG_HID_PICOLCD is not set -# CONFIG_HID_PLANTRONICS is not set -# CONFIG_HID_PLAYSTATION is not set -# CONFIG_HID_PXRC is not set -# CONFIG_HID_RAZER is not set -# CONFIG_HID_PRIMAX is not set -# CONFIG_HID_RETRODE is not set -# CONFIG_HID_ROCCAT is not set -# CONFIG_HID_SAITEK is not set -# CONFIG_HID_SAMSUNG is not set -# CONFIG_HID_SEMITEK is not set -# CONFIG_HID_SIGMAMICRO is not set -# CONFIG_HID_SONY is not set -# CONFIG_HID_SPEEDLINK is not set -# CONFIG_HID_STEAM is not set -# CONFIG_HID_STEELSERIES is not set -# CONFIG_HID_SUNPLUS is not set -# CONFIG_HID_RMI is not set -# CONFIG_HID_GREENASIA is not set -# CONFIG_HID_SMARTJOYPLUS is not set -# CONFIG_HID_TIVO is not set -# CONFIG_HID_TOPSEED is not set -# CONFIG_HID_TOPRE is not set -# CONFIG_HID_THINGM is not set -# CONFIG_HID_THRUSTMASTER is not set -# CONFIG_HID_UDRAW_PS3 is not set -# CONFIG_HID_WACOM is not set -# CONFIG_HID_WIIMOTE is not set -# CONFIG_HID_WINWING is not set -# CONFIG_HID_XINMO is not set -# CONFIG_HID_ZEROPLUS is not set -# CONFIG_HID_ZYDACRON is not set -# CONFIG_HID_SENSOR_HUB is not set -# CONFIG_HID_ALPS is not set -# CONFIG_HID_MCP2200 is not set -# CONFIG_HID_MCP2221 is not set -# end of Special HID drivers - -# -# HID-BPF support -# -# CONFIG_HID_BPF is not set -# end of HID-BPF support - -# -# USB HID support -# -CONFIG_USB_HID=y -# CONFIG_HID_PID is not set -CONFIG_USB_HIDDEV=y -# end of USB HID support - -CONFIG_I2C_HID=y -CONFIG_I2C_HID_OF=m -# CONFIG_I2C_HID_OF_ELAN is not set -CONFIG_I2C_HID_OF_GOODIX=m -CONFIG_I2C_HID_CORE=m -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_SUPPORT=y -CONFIG_USB_COMMON=y -CONFIG_USB_LED_TRIG=y -# CONFIG_USB_ULPI_BUS is not set -# CONFIG_USB_CONN_GPIO is not set -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB=y -CONFIG_USB_PCI=y -# CONFIG_USB_PCI_AMD is not set -CONFIG_USB_ANNOUNCE_NEW_DEVICES=y - -# -# Miscellaneous USB options -# -CONFIG_USB_DEFAULT_PERSIST=y -# CONFIG_USB_FEW_INIT_RETRIES is not set -CONFIG_USB_DYNAMIC_MINORS=y -CONFIG_USB_OTG=y -# CONFIG_USB_OTG_PRODUCTLIST is not set -# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set -CONFIG_USB_OTG_FSM=m -CONFIG_USB_LEDS_TRIGGER_USBPORT=y -CONFIG_USB_AUTOSUSPEND_DELAY=2 -CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1 -# CONFIG_USB_MON is not set - -# -# USB Host Controller Drivers -# -# CONFIG_USB_C67X00_HCD is not set -CONFIG_USB_XHCI_HCD=y -# CONFIG_USB_XHCI_DBGCAP is not set -CONFIG_USB_XHCI_PCI=y -# CONFIG_USB_XHCI_PCI_RENESAS is not set -CONFIG_USB_XHCI_PLATFORM=y -CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -CONFIG_USB_EHCI_TT_NEWSCHED=y -CONFIG_USB_EHCI_PCI=y -# CONFIG_USB_EHCI_FSL is not set -CONFIG_USB_EHCI_HCD_PLATFORM=y -# CONFIG_USB_OXU210HP_HCD is not set -# CONFIG_USB_ISP116X_HCD is not set -# CONFIG_USB_MAX3421_HCD is not set -CONFIG_USB_OHCI_HCD=y -CONFIG_USB_OHCI_HCD_PCI=y -CONFIG_USB_OHCI_HCD_PLATFORM=y -# CONFIG_USB_UHCI_HCD is not set -# CONFIG_USB_SL811_HCD is not set -# CONFIG_USB_R8A66597_HCD is not set -# CONFIG_USB_HCD_TEST_MODE is not set - -# -# USB Device Class drivers -# -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_WDM is not set -# CONFIG_USB_TMC is not set - -# -# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may -# - -# -# also be needed; see USB_STORAGE Help for more info -# -CONFIG_USB_STORAGE=m -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_REALTEK is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_USBAT is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_SDDR55 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_STORAGE_ALAUDA is not set -# CONFIG_USB_STORAGE_ONETOUCH is not set -# CONFIG_USB_STORAGE_KARMA is not set -# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set -# CONFIG_USB_STORAGE_ENE_UB6250 is not set -CONFIG_USB_UAS=m - -# -# USB Imaging devices -# -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USBIP_CORE is not set - -# -# USB dual-mode controller drivers -# -# CONFIG_USB_CDNS_SUPPORT is not set -# CONFIG_USB_MUSB_HDRC is not set -CONFIG_USB_DWC3=y -# CONFIG_USB_DWC3_HOST is not set -# CONFIG_USB_DWC3_GADGET is not set -CONFIG_USB_DWC3_DUAL_ROLE=y - -# -# Platform Glue Driver Support -# -CONFIG_USB_DWC3_HAPS=y -CONFIG_USB_DWC3_OF_SIMPLE=y -# CONFIG_USB_DWC2 is not set -# CONFIG_USB_CHIPIDEA is not set -# CONFIG_USB_ISP1760 is not set - -# -# USB port drivers -# -CONFIG_USB_SERIAL=y -# CONFIG_USB_SERIAL_CONSOLE is not set -CONFIG_USB_SERIAL_GENERIC=y -# CONFIG_USB_SERIAL_SIMPLE is not set -# CONFIG_USB_SERIAL_AIRCABLE is not set -# CONFIG_USB_SERIAL_ARK3116 is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_CH341 is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -CONFIG_USB_SERIAL_CP210X=m -# CONFIG_USB_SERIAL_CYPRESS_M8 is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IPAQ is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_EDGEPORT_TI is not set -# CONFIG_USB_SERIAL_F81232 is not set -# CONFIG_USB_SERIAL_F8153X is not set -# CONFIG_USB_SERIAL_GARMIN is not set -# CONFIG_USB_SERIAL_IPW is not set -# CONFIG_USB_SERIAL_IUU is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KLSI is not set -# CONFIG_USB_SERIAL_KOBIL_SCT is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_METRO is not set -# CONFIG_USB_SERIAL_MOS7720 is not set -# CONFIG_USB_SERIAL_MOS7840 is not set -# CONFIG_USB_SERIAL_MXUPORT is not set -# CONFIG_USB_SERIAL_NAVMAN is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_OTI6858 is not set -# CONFIG_USB_SERIAL_QCAUX is not set -# CONFIG_USB_SERIAL_QUALCOMM is not set -# CONFIG_USB_SERIAL_SPCP8X5 is not set -# CONFIG_USB_SERIAL_SAFE is not set -# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set -# CONFIG_USB_SERIAL_SYMBOL is not set -# CONFIG_USB_SERIAL_TI is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_OPTION is not set -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_WISHBONE is not set -# CONFIG_USB_SERIAL_SSU100 is not set -# CONFIG_USB_SERIAL_QT2 is not set -# CONFIG_USB_SERIAL_UPD78F0730 is not set -# CONFIG_USB_SERIAL_XR is not set -# CONFIG_USB_SERIAL_DEBUG is not set - -# -# USB Miscellaneous drivers -# -# CONFIG_USB_EMI62 is not set -# CONFIG_USB_EMI26 is not set -# CONFIG_USB_ADUTUX is not set -# CONFIG_USB_SEVSEG is not set -# CONFIG_USB_LEGOTOWER is not set -# CONFIG_USB_LCD is not set -# CONFIG_USB_CYPRESS_CY7C63 is not set -# CONFIG_USB_CYTHERM is not set -# CONFIG_USB_IDMOUSE is not set -# CONFIG_USB_APPLEDISPLAY is not set -# CONFIG_APPLE_MFI_FASTCHARGE is not set -# CONFIG_USB_SISUSBVGA is not set -# CONFIG_USB_LD is not set -# CONFIG_USB_TRANCEVIBRATOR is not set -# CONFIG_USB_IOWARRIOR is not set -# CONFIG_USB_TEST is not set -# CONFIG_USB_EHSET_TEST_FIXTURE is not set -# CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_YUREX is not set -# CONFIG_USB_EZUSB_FX2 is not set -# CONFIG_USB_HUB_USB251XB is not set -# CONFIG_USB_HSIC_USB3503 is not set -# CONFIG_USB_HSIC_USB4604 is not set -# CONFIG_USB_LINK_LAYER_TEST is not set -# CONFIG_USB_ONBOARD_DEV is not set - -# -# USB Physical Layer drivers -# -CONFIG_USB_PHY=y -# CONFIG_NOP_USB_XCEIV is not set -# CONFIG_USB_GPIO_VBUS is not set -# CONFIG_USB_ISP1301 is not set -# CONFIG_USB_ULPI is not set -# end of USB Physical Layer drivers - -CONFIG_USB_GADGET=y -# CONFIG_USB_GADGET_DEBUG is not set -# CONFIG_USB_GADGET_DEBUG_FILES is not set -# CONFIG_USB_GADGET_DEBUG_FS is not set -CONFIG_USB_GADGET_VBUS_DRAW=2 -CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 -# CONFIG_U_SERIAL_CONSOLE is not set - -# -# USB Peripheral Controller -# -# CONFIG_USB_GR_UDC is not set -# CONFIG_USB_R8A66597 is not set -# CONFIG_USB_PXA27X is not set -# CONFIG_USB_MV_UDC is not set -# CONFIG_USB_MV_U3D is not set -# CONFIG_USB_SNP_UDC_PLAT is not set -# CONFIG_USB_M66592 is not set -# CONFIG_USB_BDC_UDC is not set -# CONFIG_USB_AMD5536UDC is not set -# CONFIG_USB_NET2272 is not set -# CONFIG_USB_NET2280 is not set -# CONFIG_USB_GOKU is not set -# CONFIG_USB_EG20T is not set -# CONFIG_USB_GADGET_XILINX is not set -# CONFIG_USB_MAX3420_UDC is not set -# CONFIG_USB_DUMMY_HCD is not set -# end of USB Peripheral Controller - -CONFIG_USB_LIBCOMPOSITE=m -CONFIG_USB_F_ACM=m -CONFIG_USB_U_SERIAL=m -CONFIG_USB_U_ETHER=m -CONFIG_USB_U_AUDIO=m -CONFIG_USB_F_SERIAL=m -CONFIG_USB_F_OBEX=m -CONFIG_USB_F_NCM=m -CONFIG_USB_F_ECM=m -CONFIG_USB_F_EEM=m -CONFIG_USB_F_SUBSET=m -CONFIG_USB_F_MASS_STORAGE=m -CONFIG_USB_F_FS=m -CONFIG_USB_F_UAC1=m -CONFIG_USB_F_UAC2=m -CONFIG_USB_F_UVC=m -CONFIG_USB_F_MIDI=m -CONFIG_USB_F_MIDI2=m -CONFIG_USB_F_HID=m -CONFIG_USB_CONFIGFS=m -CONFIG_USB_CONFIGFS_SERIAL=y -CONFIG_USB_CONFIGFS_ACM=y -CONFIG_USB_CONFIGFS_OBEX=y -CONFIG_USB_CONFIGFS_NCM=y -CONFIG_USB_CONFIGFS_ECM=y -CONFIG_USB_CONFIGFS_ECM_SUBSET=y -# CONFIG_USB_CONFIGFS_RNDIS is not set -CONFIG_USB_CONFIGFS_EEM=y -CONFIG_USB_CONFIGFS_MASS_STORAGE=y -# CONFIG_USB_CONFIGFS_F_LB_SS is not set -CONFIG_USB_CONFIGFS_F_FS=y -CONFIG_USB_CONFIGFS_F_UAC1=y -# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set -CONFIG_USB_CONFIGFS_F_UAC2=y -CONFIG_USB_CONFIGFS_F_MIDI=y -CONFIG_USB_CONFIGFS_F_MIDI2=y -CONFIG_USB_CONFIGFS_F_HID=y -CONFIG_USB_CONFIGFS_F_UVC=y -# CONFIG_USB_CONFIGFS_F_PRINTER is not set - -# -# USB Gadget precomposed configurations -# -# CONFIG_USB_ZERO is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_ETH is not set -# CONFIG_USB_G_NCM is not set -CONFIG_USB_GADGETFS=y -CONFIG_USB_FUNCTIONFS=m -CONFIG_USB_FUNCTIONFS_ETH=y -# CONFIG_USB_FUNCTIONFS_RNDIS is not set -CONFIG_USB_FUNCTIONFS_GENERIC=y -# CONFIG_USB_MASS_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -# CONFIG_USB_G_PRINTER is not set -CONFIG_USB_CDC_COMPOSITE=m -# CONFIG_USB_G_ACM_MS is not set -CONFIG_USB_G_MULTI=m -# CONFIG_USB_G_MULTI_RNDIS is not set -CONFIG_USB_G_MULTI_CDC=y -# CONFIG_USB_G_HID is not set -# CONFIG_USB_G_DBGP is not set -# CONFIG_USB_G_WEBCAM is not set -# CONFIG_USB_RAW_GADGET is not set -# end of USB Gadget precomposed configurations - -CONFIG_TYPEC=y -# CONFIG_TYPEC_TCPM is not set -# CONFIG_TYPEC_UCSI is not set -# CONFIG_TYPEC_TPS6598X is not set -# CONFIG_TYPEC_ANX7411 is not set -# CONFIG_TYPEC_RT1719 is not set -# CONFIG_TYPEC_HD3SS3220 is not set -# CONFIG_TYPEC_STUSB160X is not set -CONFIG_TYPEC_WUSB3801=m - -# -# USB Type-C Multiplexer/DeMultiplexer Switch support -# -# CONFIG_TYPEC_MUX_FSA4480 is not set -# CONFIG_TYPEC_MUX_GPIO_SBU is not set -# CONFIG_TYPEC_MUX_PI3USB30532 is not set -# CONFIG_TYPEC_MUX_IT5205 is not set -# CONFIG_TYPEC_MUX_NB7VPQ904M is not set -# CONFIG_TYPEC_MUX_PTN36502 is not set -# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set -# end of USB Type-C Multiplexer/DeMultiplexer Switch support - -# -# USB Type-C Alternate Mode drivers -# -# CONFIG_TYPEC_DP_ALTMODE is not set -# end of USB Type-C Alternate Mode drivers - -CONFIG_USB_ROLE_SWITCH=y -CONFIG_MMC=y -CONFIG_PWRSEQ_EMMC=y -CONFIG_PWRSEQ_SIMPLE=y -CONFIG_MMC_BLOCK=y -CONFIG_MMC_BLOCK_MINORS=32 -# CONFIG_SDIO_UART is not set -# CONFIG_MMC_TEST is not set - -# -# MMC/SD/SDIO Host Controller Drivers -# -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_ARMMMCI is not set -CONFIG_MMC_SDHCI=y -# CONFIG_MMC_SDHCI_PCI is not set -CONFIG_MMC_SDHCI_PLTFM=y -# CONFIG_MMC_SDHCI_OF_ARASAN is not set -# CONFIG_MMC_SDHCI_OF_AT91 is not set -CONFIG_MMC_SDHCI_OF_DWCMSHC=y -# CONFIG_MMC_SDHCI_CADENCE is not set -# CONFIG_MMC_SDHCI_F_SDH30 is not set -# CONFIG_MMC_SDHCI_MILBEAUT is not set -# CONFIG_MMC_TIFM_SD is not set -# CONFIG_MMC_SPI is not set -# CONFIG_MMC_CB710 is not set -# CONFIG_MMC_VIA_SDMMC is not set -CONFIG_MMC_DW=y -CONFIG_MMC_DW_PLTFM=y -# CONFIG_MMC_DW_BLUEFIELD is not set -# CONFIG_MMC_DW_EXYNOS is not set -# CONFIG_MMC_DW_HI3798CV200 is not set -# CONFIG_MMC_DW_HI3798MV200 is not set -# CONFIG_MMC_DW_K3 is not set -# CONFIG_MMC_DW_PCI is not set -CONFIG_MMC_DW_ROCKCHIP=y -# CONFIG_MMC_VUB300 is not set -# CONFIG_MMC_USHC is not set -# CONFIG_MMC_USDHI6ROL0 is not set -CONFIG_MMC_CQHCI=y -# CONFIG_MMC_HSQ is not set -# CONFIG_MMC_TOSHIBA_PCI is not set -# CONFIG_MMC_MTK is not set -# CONFIG_MMC_SDHCI_XENON is not set -# CONFIG_SCSI_UFSHCD is not set -# CONFIG_MEMSTICK is not set -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=y -CONFIG_LEDS_CLASS_FLASH=y -CONFIG_LEDS_CLASS_MULTICOLOR=y -# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set - -# -# LED drivers -# -# CONFIG_LEDS_AN30259A is not set -# CONFIG_LEDS_AW200XX is not set -# CONFIG_LEDS_AW2013 is not set -# CONFIG_LEDS_BCM6328 is not set -# CONFIG_LEDS_BCM6358 is not set -# CONFIG_LEDS_CR0014114 is not set -# CONFIG_LEDS_EL15203000 is not set -# CONFIG_LEDS_LM3530 is not set -# CONFIG_LEDS_LM3532 is not set -# CONFIG_LEDS_LM3642 is not set -# CONFIG_LEDS_LM3692X is not set -# CONFIG_LEDS_PCA9532 is not set -CONFIG_LEDS_GPIO=y -# CONFIG_LEDS_LP3944 is not set -# CONFIG_LEDS_LP3952 is not set -# CONFIG_LEDS_LP50XX is not set -# CONFIG_LEDS_LP55XX_COMMON is not set -# CONFIG_LEDS_LP8860 is not set -# CONFIG_LEDS_PCA955X is not set -# CONFIG_LEDS_PCA963X is not set -# CONFIG_LEDS_PCA995X is not set -# CONFIG_LEDS_DAC124S085 is not set -# CONFIG_LEDS_PWM is not set -# CONFIG_LEDS_REGULATOR is not set -# CONFIG_LEDS_BD2606MVV is not set -# CONFIG_LEDS_BD2802 is not set -# CONFIG_LEDS_LT3593 is not set -# CONFIG_LEDS_TCA6507 is not set -# CONFIG_LEDS_TLC591XX is not set -# CONFIG_LEDS_LM355x is not set -# CONFIG_LEDS_IS31FL319X is not set -# CONFIG_LEDS_IS31FL32XX is not set - -# -# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) -# -# CONFIG_LEDS_BLINKM is not set -# CONFIG_LEDS_SYSCON is not set -# CONFIG_LEDS_MLXREG is not set -# CONFIG_LEDS_USER is not set -# CONFIG_LEDS_SPI_BYTE is not set -# CONFIG_LEDS_LM3697 is not set - -# -# Flash and Torch LED drivers -# -# CONFIG_LEDS_AAT1290 is not set -# CONFIG_LEDS_AS3645A is not set -# CONFIG_LEDS_KTD2692 is not set -# CONFIG_LEDS_LM3601X is not set -# CONFIG_LEDS_RT4505 is not set -# CONFIG_LEDS_RT8515 is not set -# CONFIG_LEDS_SGM3140 is not set -# CONFIG_LEDS_SY7802 is not set - -# -# RGB LED drivers -# -# CONFIG_LEDS_GROUP_MULTICOLOR is not set -# CONFIG_LEDS_KTD202X is not set -# CONFIG_LEDS_NCP5623 is not set -# CONFIG_LEDS_PWM_MULTICOLOR is not set - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=y -CONFIG_LEDS_TRIGGER_ONESHOT=y -# CONFIG_LEDS_TRIGGER_DISK is not set -CONFIG_LEDS_TRIGGER_HEARTBEAT=y -CONFIG_LEDS_TRIGGER_BACKLIGHT=y -CONFIG_LEDS_TRIGGER_CPU=y -CONFIG_LEDS_TRIGGER_ACTIVITY=y -CONFIG_LEDS_TRIGGER_GPIO=y -CONFIG_LEDS_TRIGGER_DEFAULT_ON=y - -# -# iptables trigger is under Netfilter config (LED target) -# -CONFIG_LEDS_TRIGGER_TRANSIENT=y -CONFIG_LEDS_TRIGGER_CAMERA=y -CONFIG_LEDS_TRIGGER_PANIC=y -CONFIG_LEDS_TRIGGER_NETDEV=y -CONFIG_LEDS_TRIGGER_PATTERN=y -CONFIG_LEDS_TRIGGER_TTY=y -# CONFIG_LEDS_TRIGGER_INPUT_EVENTS is not set - -# -# Simple LED drivers -# -# CONFIG_ACCESSIBILITY is not set -# CONFIG_INFINIBAND is not set -CONFIG_EDAC_SUPPORT=y -CONFIG_RTC_LIB=y -CONFIG_RTC_CLASS=y -CONFIG_RTC_HCTOSYS=y -CONFIG_RTC_HCTOSYS_DEVICE="rtc0" -CONFIG_RTC_SYSTOHC=y -CONFIG_RTC_SYSTOHC_DEVICE="rtc0" -# CONFIG_RTC_DEBUG is not set -CONFIG_RTC_NVMEM=y - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -# CONFIG_RTC_DRV_ABB5ZES3 is not set -# CONFIG_RTC_DRV_ABEOZ9 is not set -# CONFIG_RTC_DRV_ABX80X is not set -# CONFIG_RTC_DRV_DS1307 is not set -# CONFIG_RTC_DRV_DS1374 is not set -# CONFIG_RTC_DRV_DS1672 is not set -# CONFIG_RTC_DRV_HYM8563 is not set -# CONFIG_RTC_DRV_MAX6900 is not set -# CONFIG_RTC_DRV_MAX31335 is not set -# CONFIG_RTC_DRV_NCT3018Y is not set -CONFIG_RTC_DRV_RK808=y -# CONFIG_RTC_DRV_RS5C372 is not set -# CONFIG_RTC_DRV_ISL1208 is not set -# CONFIG_RTC_DRV_ISL12022 is not set -# CONFIG_RTC_DRV_ISL12026 is not set -# CONFIG_RTC_DRV_X1205 is not set -# CONFIG_RTC_DRV_PCF8523 is not set -# CONFIG_RTC_DRV_PCF85063 is not set -# CONFIG_RTC_DRV_PCF85363 is not set -# CONFIG_RTC_DRV_PCF8563 is not set -# CONFIG_RTC_DRV_PCF8583 is not set -# CONFIG_RTC_DRV_M41T80 is not set -# CONFIG_RTC_DRV_BQ32K is not set -# CONFIG_RTC_DRV_S35390A is not set -# CONFIG_RTC_DRV_FM3130 is not set -# CONFIG_RTC_DRV_RX8010 is not set -# CONFIG_RTC_DRV_RX8111 is not set -# CONFIG_RTC_DRV_RX8581 is not set -# CONFIG_RTC_DRV_RX8025 is not set -# CONFIG_RTC_DRV_EM3027 is not set -# CONFIG_RTC_DRV_RV3028 is not set -# CONFIG_RTC_DRV_RV3032 is not set -# CONFIG_RTC_DRV_RV8803 is not set -# CONFIG_RTC_DRV_SD2405AL is not set -# CONFIG_RTC_DRV_SD3078 is not set - -# -# SPI RTC drivers -# -# CONFIG_RTC_DRV_M41T93 is not set -# CONFIG_RTC_DRV_M41T94 is not set -# CONFIG_RTC_DRV_DS1302 is not set -# CONFIG_RTC_DRV_DS1305 is not set -# CONFIG_RTC_DRV_DS1343 is not set -# CONFIG_RTC_DRV_DS1347 is not set -# CONFIG_RTC_DRV_DS1390 is not set -# CONFIG_RTC_DRV_MAX6916 is not set -# CONFIG_RTC_DRV_R9701 is not set -# CONFIG_RTC_DRV_RX4581 is not set -# CONFIG_RTC_DRV_RS5C348 is not set -# CONFIG_RTC_DRV_MAX6902 is not set -# CONFIG_RTC_DRV_PCF2123 is not set -# CONFIG_RTC_DRV_MCP795 is not set -CONFIG_RTC_I2C_AND_SPI=y - -# -# SPI and I2C RTC drivers -# -# CONFIG_RTC_DRV_DS3232 is not set -# CONFIG_RTC_DRV_PCF2127 is not set -# CONFIG_RTC_DRV_RV3029C2 is not set -# CONFIG_RTC_DRV_RX6110 is not set - -# -# Platform RTC drivers -# -# CONFIG_RTC_DRV_DS1286 is not set -# CONFIG_RTC_DRV_DS1511 is not set -# CONFIG_RTC_DRV_DS1553 is not set -# CONFIG_RTC_DRV_DS1685_FAMILY is not set -# CONFIG_RTC_DRV_DS1742 is not set -# CONFIG_RTC_DRV_DS2404 is not set -# CONFIG_RTC_DRV_EFI is not set -# CONFIG_RTC_DRV_STK17TA8 is not set -# CONFIG_RTC_DRV_M48T86 is not set -# CONFIG_RTC_DRV_M48T35 is not set -# CONFIG_RTC_DRV_M48T59 is not set -# CONFIG_RTC_DRV_MSM6242 is not set -# CONFIG_RTC_DRV_RP5C01 is not set -# CONFIG_RTC_DRV_ZYNQMP is not set - -# -# on-CPU RTC drivers -# -# CONFIG_RTC_DRV_PL030 is not set -# CONFIG_RTC_DRV_PL031 is not set -# CONFIG_RTC_DRV_CADENCE is not set -# CONFIG_RTC_DRV_FTRTC010 is not set -# CONFIG_RTC_DRV_R7301 is not set - -# -# HID Sensor RTC drivers -# -# CONFIG_RTC_DRV_GOLDFISH is not set -CONFIG_DMADEVICES=y -# CONFIG_DMADEVICES_DEBUG is not set - -# -# DMA Devices -# -CONFIG_DMA_ENGINE=y -CONFIG_DMA_OF=y -# CONFIG_ALTERA_MSGDMA is not set -# CONFIG_AMBA_PL08X is not set -# CONFIG_BCM_SBA_RAID is not set -# CONFIG_DW_AXI_DMAC is not set -# CONFIG_FSL_EDMA is not set -# CONFIG_FSL_QDMA is not set -# CONFIG_INTEL_IDMA64 is not set -# CONFIG_MV_XOR_V2 is not set -CONFIG_PL330_DMA=y -# CONFIG_PLX_DMA is not set -# CONFIG_XILINX_DMA is not set -# CONFIG_XILINX_XDMA is not set -# CONFIG_XILINX_ZYNQMP_DMA is not set -# CONFIG_XILINX_ZYNQMP_DPDMA is not set -# CONFIG_AMD_QDMA is not set -# CONFIG_QCOM_HIDMA_MGMT is not set -# CONFIG_QCOM_HIDMA is not set -# CONFIG_DW_DMAC is not set -# CONFIG_DW_DMAC_PCI is not set -# CONFIG_DW_EDMA is not set -# CONFIG_SF_PDMA is not set - -# -# DMA Clients -# -# CONFIG_ASYNC_TX_DMA is not set -# CONFIG_DMATEST is not set - -# -# DMABUF options -# -CONFIG_SYNC_FILE=y -# CONFIG_SW_SYNC is not set -# CONFIG_UDMABUF is not set -# CONFIG_DMABUF_MOVE_NOTIFY is not set -# CONFIG_DMABUF_DEBUG is not set -# CONFIG_DMABUF_SELFTESTS is not set -# CONFIG_DMABUF_HEAPS is not set -# CONFIG_DMABUF_SYSFS_STATS is not set -# end of DMABUF options - -# CONFIG_UIO is not set -# CONFIG_VFIO is not set -# CONFIG_VIRT_DRIVERS is not set -# CONFIG_VIRTIO_MENU is not set -# CONFIG_VDPA is not set -# CONFIG_VHOST_MENU is not set - -# -# Microsoft Hyper-V guest support -# -# end of Microsoft Hyper-V guest support - -# CONFIG_GREYBUS is not set -# CONFIG_COMEDI is not set -CONFIG_STAGING=y -# CONFIG_RTLLIB is not set -# CONFIG_RTL8723BS is not set -# CONFIG_R8712U is not set -# CONFIG_RTS5208 is not set -# CONFIG_VT6655 is not set -# CONFIG_VT6656 is not set - -# -# IIO staging drivers -# - -# -# Accelerometers -# -# CONFIG_ADIS16203 is not set -# CONFIG_ADIS16240 is not set -# end of Accelerometers - -# -# Analog to digital converters -# -# CONFIG_AD7816 is not set -# end of Analog to digital converters - -# -# Analog digital bi-direction converters -# -# CONFIG_ADT7316 is not set -# end of Analog digital bi-direction converters - -# -# Direct Digital Synthesis -# -# CONFIG_AD9832 is not set -# CONFIG_AD9834 is not set -# end of Direct Digital Synthesis - -# -# Network Analyzer, Impedance Converters -# -# CONFIG_AD5933 is not set -# end of Network Analyzer, Impedance Converters -# end of IIO staging drivers - -# CONFIG_FB_SM750 is not set -CONFIG_STAGING_MEDIA=y -# CONFIG_DVB_AV7110 is not set -# CONFIG_VIDEO_MAX96712 is not set -CONFIG_VIDEO_ROCKCHIP_VDEC=m - -# -# StarFive media platform drivers -# -# CONFIG_STAGING_MEDIA_DEPRECATED is not set -# CONFIG_LTE_GDM724X is not set -# CONFIG_FB_TFT is not set -# CONFIG_XIL_AXIS_FIFO is not set -# CONFIG_FIELDBUS_DEV is not set -# CONFIG_VME_BUS is not set -# CONFIG_GOLDFISH is not set -# CONFIG_CHROME_PLATFORMS is not set -# CONFIG_CZNIC_PLATFORMS is not set -# CONFIG_MELLANOX_PLATFORM is not set -# CONFIG_SURFACE_PLATFORMS is not set -CONFIG_ARM64_PLATFORM_DEVICES=y -CONFIG_HAVE_CLK=y -CONFIG_HAVE_CLK_PREPARE=y -CONFIG_COMMON_CLK=y - -# -# Clock driver for ARM Reference designs -# -# CONFIG_CLK_ICST is not set -# CONFIG_CLK_SP810 is not set -# end of Clock driver for ARM Reference designs - -# CONFIG_LMK04832 is not set -# CONFIG_COMMON_CLK_MAX9485 is not set -CONFIG_COMMON_CLK_RK808=y -CONFIG_COMMON_CLK_SCMI=y -# CONFIG_COMMON_CLK_SI5341 is not set -# CONFIG_COMMON_CLK_SI5351 is not set -# CONFIG_COMMON_CLK_SI514 is not set -# CONFIG_COMMON_CLK_SI544 is not set -# CONFIG_COMMON_CLK_SI570 is not set -# CONFIG_COMMON_CLK_CDCE706 is not set -# CONFIG_COMMON_CLK_CDCE925 is not set -# CONFIG_COMMON_CLK_CS2000_CP is not set -# CONFIG_COMMON_CLK_AXI_CLKGEN is not set -# CONFIG_COMMON_CLK_XGENE is not set -# CONFIG_COMMON_CLK_PWM is not set -# CONFIG_COMMON_CLK_RS9_PCIE is not set -# CONFIG_COMMON_CLK_SI521XX is not set -# CONFIG_COMMON_CLK_VC3 is not set -# CONFIG_COMMON_CLK_VC5 is not set -# CONFIG_COMMON_CLK_VC7 is not set -# CONFIG_COMMON_CLK_FIXED_MMIO is not set -CONFIG_COMMON_CLK_ROCKCHIP=y -# CONFIG_CLK_PX30 is not set -# CONFIG_CLK_RK3308 is not set -# CONFIG_CLK_RK3328 is not set -# CONFIG_CLK_RK3368 is not set -# CONFIG_CLK_RK3399 is not set -CONFIG_CLK_RK3568=y -CONFIG_CLK_RK3576=y -CONFIG_CLK_RK3588=y -# CONFIG_XILINX_VCU is not set -# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set -# CONFIG_HWSPINLOCK is not set - -# -# Clock Source drivers -# -CONFIG_TIMER_OF=y -CONFIG_TIMER_PROBE=y -CONFIG_CLKSRC_MMIO=y -CONFIG_ROCKCHIP_TIMER=y -CONFIG_ARM_ARCH_TIMER=y -CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y -# CONFIG_FSL_ERRATUM_A008585 is not set -# CONFIG_HISILICON_ERRATUM_161010101 is not set -# CONFIG_ARM64_ERRATUM_858921 is not set -# end of Clock Source drivers - -CONFIG_MAILBOX=y -# CONFIG_ARM_MHU is not set -# CONFIG_ARM_MHU_V2 is not set -# CONFIG_ARM_MHU_V3 is not set -# CONFIG_PLATFORM_MHU is not set -# CONFIG_PL320_MBOX is not set -CONFIG_ROCKCHIP_MBOX=y -# CONFIG_ALTERA_MBOX is not set -# CONFIG_MAILBOX_TEST is not set -CONFIG_IOMMU_IOVA=y -CONFIG_IOMMU_API=y -CONFIG_IOMMU_SUPPORT=y - -# -# Generic IOMMU Pagetable Support -# -CONFIG_IOMMU_IO_PGTABLE=y -CONFIG_IOMMU_IO_PGTABLE_LPAE=y -# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set -# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set -# CONFIG_IOMMU_IO_PGTABLE_DART is not set -# end of Generic IOMMU Pagetable Support - -# CONFIG_IOMMU_DEBUGFS is not set -# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set -# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set -CONFIG_IOMMU_DEFAULT_PASSTHROUGH=y -CONFIG_OF_IOMMU=y -CONFIG_IOMMU_DMA=y -# CONFIG_IOMMUFD is not set -CONFIG_ROCKCHIP_IOMMU=y -# CONFIG_ARM_SMMU is not set -# CONFIG_ARM_SMMU_V3 is not set - -# -# Remoteproc drivers -# -# CONFIG_REMOTEPROC is not set -# end of Remoteproc drivers - -# -# Rpmsg drivers -# -# CONFIG_RPMSG_QCOM_GLINK_RPM is not set -# CONFIG_RPMSG_VIRTIO is not set -# end of Rpmsg drivers - -# CONFIG_SOUNDWIRE is not set - -# -# SOC (System On Chip) specific Drivers -# - -# -# Amlogic SoC drivers -# -# end of Amlogic SoC drivers - -# -# Broadcom SoC drivers -# -# end of Broadcom SoC drivers - -# -# NXP/Freescale QorIQ SoC drivers -# -# CONFIG_QUICC_ENGINE is not set -# CONFIG_FSL_RCPM is not set -# end of NXP/Freescale QorIQ SoC drivers - -# -# fujitsu SoC drivers -# -# end of fujitsu SoC drivers - -# -# i.MX SoC drivers -# -# end of i.MX SoC drivers - -# -# Enable LiteX SoC Builder specific drivers -# -# CONFIG_LITEX_SOC_CONTROLLER is not set -# end of Enable LiteX SoC Builder specific drivers - -# CONFIG_WPCM450_SOC is not set - -# -# Qualcomm SoC drivers -# -# end of Qualcomm SoC drivers - -CONFIG_ROCKCHIP_GRF=y -CONFIG_ROCKCHIP_IODOMAIN=y -CONFIG_ROCKCHIP_SUSPEND_MODE=y -# CONFIG_SOC_TI is not set - -# -# Xilinx SoC drivers -# -# end of Xilinx SoC drivers -# end of SOC (System On Chip) specific Drivers - -# -# PM Domains -# - -# -# Amlogic PM Domains -# -# end of Amlogic PM Domains - -CONFIG_ARM_SCMI_PERF_DOMAIN=y -CONFIG_ARM_SCMI_POWER_DOMAIN=y - -# -# Broadcom PM Domains -# -# end of Broadcom PM Domains - -# -# i.MX PM Domains -# -# end of i.MX PM Domains - -# -# Qualcomm PM Domains -# -# end of Qualcomm PM Domains - -CONFIG_ROCKCHIP_PM_DOMAINS=y -# end of PM Domains - -CONFIG_PM_DEVFREQ=y - -# -# DEVFREQ Governors -# -CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y -CONFIG_DEVFREQ_GOV_PERFORMANCE=y -CONFIG_DEVFREQ_GOV_POWERSAVE=y -CONFIG_DEVFREQ_GOV_USERSPACE=y -# CONFIG_DEVFREQ_GOV_PASSIVE is not set - -# -# DEVFREQ Drivers -# -CONFIG_ARM_RK3399_DMC_DEVFREQ=y -CONFIG_PM_DEVFREQ_EVENT=y -CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=y -CONFIG_EXTCON=y - -# -# Extcon Device Drivers -# -# CONFIG_EXTCON_ADC_JACK is not set -# CONFIG_EXTCON_FSA9480 is not set -# CONFIG_EXTCON_GPIO is not set -# CONFIG_EXTCON_LC824206XA is not set -# CONFIG_EXTCON_MAX3355 is not set -# CONFIG_EXTCON_PTN5150 is not set -# CONFIG_EXTCON_RT8973A is not set -# CONFIG_EXTCON_SM5502 is not set -# CONFIG_EXTCON_USB_GPIO is not set -# CONFIG_EXTCON_USBC_TUSB320 is not set -# CONFIG_MEMORY is not set -CONFIG_IIO=m -CONFIG_IIO_BUFFER=y -# CONFIG_IIO_BUFFER_CB is not set -# CONFIG_IIO_BUFFER_DMA is not set -# CONFIG_IIO_BUFFER_DMAENGINE is not set -# CONFIG_IIO_BUFFER_HW_CONSUMER is not set -CONFIG_IIO_KFIFO_BUF=m -CONFIG_IIO_TRIGGERED_BUFFER=m -CONFIG_IIO_CONFIGFS=m -CONFIG_IIO_TRIGGER=y -CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 -# CONFIG_IIO_SW_DEVICE is not set -CONFIG_IIO_SW_TRIGGER=m -CONFIG_IIO_TRIGGERED_EVENT=m - -# -# Accelerometers -# -# CONFIG_ADIS16201 is not set -# CONFIG_ADIS16209 is not set -# CONFIG_ADXL313_I2C is not set -# CONFIG_ADXL313_SPI is not set -# CONFIG_ADXL345_I2C is not set -# CONFIG_ADXL345_SPI is not set -# CONFIG_ADXL355_I2C is not set -# CONFIG_ADXL355_SPI is not set -# CONFIG_ADXL367_SPI is not set -# CONFIG_ADXL367_I2C is not set -# CONFIG_ADXL372_SPI is not set -# CONFIG_ADXL372_I2C is not set -# CONFIG_ADXL380_SPI is not set -# CONFIG_ADXL380_I2C is not set -# CONFIG_BMA180 is not set -# CONFIG_BMA220 is not set -# CONFIG_BMA400 is not set -# CONFIG_BMC150_ACCEL is not set -# CONFIG_BMI088_ACCEL is not set -# CONFIG_DA280 is not set -# CONFIG_DA311 is not set -# CONFIG_DMARD06 is not set -# CONFIG_DMARD09 is not set -# CONFIG_DMARD10 is not set -# CONFIG_FXLS8962AF_I2C is not set -# CONFIG_FXLS8962AF_SPI is not set -CONFIG_IIO_ST_ACCEL_3AXIS=m -CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m -CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m -# CONFIG_IIO_KX022A_SPI is not set -# CONFIG_IIO_KX022A_I2C is not set -# CONFIG_KXSD9 is not set -# CONFIG_KXCJK1013 is not set -# CONFIG_MC3230 is not set -# CONFIG_MMA7455_I2C is not set -# CONFIG_MMA7455_SPI is not set -# CONFIG_MMA7660 is not set -# CONFIG_MMA8452 is not set -# CONFIG_MMA9551 is not set -# CONFIG_MMA9553 is not set -# CONFIG_MSA311 is not set -# CONFIG_MXC4005 is not set -# CONFIG_MXC6255 is not set -# CONFIG_SCA3000 is not set -# CONFIG_SCA3300 is not set -# CONFIG_STK8312 is not set -# CONFIG_STK8BA50 is not set -# end of Accelerometers - -# -# Analog to digital converters -# -# CONFIG_AD4000 is not set -# CONFIG_AD4130 is not set -# CONFIG_AD4695 is not set -# CONFIG_AD7091R5 is not set -# CONFIG_AD7091R8 is not set -# CONFIG_AD7124 is not set -# CONFIG_AD7173 is not set -# CONFIG_AD7192 is not set -# CONFIG_AD7266 is not set -# CONFIG_AD7280 is not set -# CONFIG_AD7291 is not set -# CONFIG_AD7292 is not set -# CONFIG_AD7298 is not set -# CONFIG_AD7380 is not set -# CONFIG_AD7476 is not set -# CONFIG_AD7606_IFACE_PARALLEL is not set -# CONFIG_AD7606_IFACE_SPI is not set -# CONFIG_AD7766 is not set -# CONFIG_AD7768_1 is not set -# CONFIG_AD7780 is not set -# CONFIG_AD7791 is not set -# CONFIG_AD7793 is not set -# CONFIG_AD7887 is not set -# CONFIG_AD7923 is not set -# CONFIG_AD7944 is not set -# CONFIG_AD7949 is not set -# CONFIG_AD799X is not set -# CONFIG_AD9467 is not set -# CONFIG_CC10001_ADC is not set -# CONFIG_ENVELOPE_DETECTOR is not set -# CONFIG_HI8435 is not set -# CONFIG_HX711 is not set -# CONFIG_INA2XX_ADC is not set -# CONFIG_LTC2309 is not set -# CONFIG_LTC2471 is not set -# CONFIG_LTC2485 is not set -# CONFIG_LTC2496 is not set -# CONFIG_LTC2497 is not set -# CONFIG_MAX1027 is not set -# CONFIG_MAX11100 is not set -# CONFIG_MAX1118 is not set -# CONFIG_MAX11205 is not set -# CONFIG_MAX11410 is not set -# CONFIG_MAX1241 is not set -# CONFIG_MAX1363 is not set -# CONFIG_MAX34408 is not set -# CONFIG_MAX9611 is not set -# CONFIG_MCP320X is not set -# CONFIG_MCP3422 is not set -# CONFIG_MCP3564 is not set -# CONFIG_MCP3911 is not set -# CONFIG_NAU7802 is not set -# CONFIG_PAC1921 is not set -# CONFIG_PAC1934 is not set -CONFIG_ROCKCHIP_SARADC=m -# CONFIG_RICHTEK_RTQ6056 is not set -# CONFIG_SD_ADC_MODULATOR is not set -# CONFIG_TI_ADC081C is not set -# CONFIG_TI_ADC0832 is not set -# CONFIG_TI_ADC084S021 is not set -# CONFIG_TI_ADC12138 is not set -# CONFIG_TI_ADC108S102 is not set -# CONFIG_TI_ADC128S052 is not set -# CONFIG_TI_ADC161S626 is not set -# CONFIG_TI_ADS1015 is not set -# CONFIG_TI_ADS1119 is not set -# CONFIG_TI_ADS7924 is not set -# CONFIG_TI_ADS1100 is not set -# CONFIG_TI_ADS1298 is not set -# CONFIG_TI_ADS7950 is not set -# CONFIG_TI_ADS8344 is not set -# CONFIG_TI_ADS8688 is not set -# CONFIG_TI_ADS124S08 is not set -# CONFIG_TI_ADS131E08 is not set -# CONFIG_TI_LMP92064 is not set -# CONFIG_TI_TLC4541 is not set -# CONFIG_TI_TSC2046 is not set -# CONFIG_VF610_ADC is not set -# CONFIG_XILINX_XADC is not set -# end of Analog to digital converters - -# -# Analog to digital and digital to analog converters -# -# CONFIG_AD74115 is not set -# CONFIG_AD74413R is not set -# end of Analog to digital and digital to analog converters - -# -# Analog Front Ends -# -# CONFIG_IIO_RESCALE is not set -# end of Analog Front Ends - -# -# Amplifiers -# -# CONFIG_AD8366 is not set -# CONFIG_ADA4250 is not set -# CONFIG_HMC425 is not set -# end of Amplifiers - -# -# Capacitance to digital converters -# -# CONFIG_AD7150 is not set -# CONFIG_AD7746 is not set -# end of Capacitance to digital converters - -# -# Chemical Sensors -# -# CONFIG_AOSONG_AGS02MA is not set -# CONFIG_ATLAS_PH_SENSOR is not set -# CONFIG_ATLAS_EZO_SENSOR is not set -# CONFIG_BME680 is not set -# CONFIG_CCS811 is not set -# CONFIG_ENS160 is not set -# CONFIG_IAQCORE is not set -# CONFIG_PMS7003 is not set -# CONFIG_SCD30_CORE is not set -# CONFIG_SCD4X is not set -# CONFIG_SENSIRION_SGP30 is not set -# CONFIG_SENSIRION_SGP40 is not set -# CONFIG_SPS30_I2C is not set -# CONFIG_SPS30_SERIAL is not set -# CONFIG_SENSEAIR_SUNRISE_CO2 is not set -# CONFIG_VZ89X is not set -# end of Chemical Sensors - -# -# Hid Sensor IIO Common -# -# end of Hid Sensor IIO Common - -# -# IIO SCMI Sensors -# -# CONFIG_IIO_SCMI is not set -# end of IIO SCMI Sensors - -# -# SSP Sensor Common -# -# CONFIG_IIO_SSP_SENSORHUB is not set -# end of SSP Sensor Common - -CONFIG_IIO_ST_SENSORS_I2C=m -CONFIG_IIO_ST_SENSORS_SPI=m -CONFIG_IIO_ST_SENSORS_CORE=m - -# -# Digital to analog converters -# -# CONFIG_AD3552R is not set -# CONFIG_AD5064 is not set -# CONFIG_AD5360 is not set -# CONFIG_AD5380 is not set -# CONFIG_AD5421 is not set -# CONFIG_AD5446 is not set -# CONFIG_AD5449 is not set -# CONFIG_AD5592R is not set -# CONFIG_AD5593R is not set -# CONFIG_AD5504 is not set -# CONFIG_AD5624R_SPI is not set -# CONFIG_AD9739A is not set -# CONFIG_LTC2688 is not set -# CONFIG_AD5686_SPI is not set -# CONFIG_AD5696_I2C is not set -# CONFIG_AD5755 is not set -# CONFIG_AD5758 is not set -# CONFIG_AD5761 is not set -# CONFIG_AD5764 is not set -# CONFIG_AD5766 is not set -# CONFIG_AD5770R is not set -# CONFIG_AD5791 is not set -# CONFIG_AD7293 is not set -# CONFIG_AD7303 is not set -# CONFIG_AD8801 is not set -# CONFIG_DPOT_DAC is not set -# CONFIG_DS4424 is not set -# CONFIG_LTC1660 is not set -# CONFIG_LTC2632 is not set -# CONFIG_LTC2664 is not set -# CONFIG_M62332 is not set -# CONFIG_MAX517 is not set -# CONFIG_MAX5522 is not set -# CONFIG_MAX5821 is not set -# CONFIG_MCP4725 is not set -# CONFIG_MCP4728 is not set -# CONFIG_MCP4821 is not set -# CONFIG_MCP4922 is not set -# CONFIG_TI_DAC082S085 is not set -# CONFIG_TI_DAC5571 is not set -# CONFIG_TI_DAC7311 is not set -# CONFIG_TI_DAC7612 is not set -# CONFIG_VF610_DAC is not set -# end of Digital to analog converters - -# -# IIO dummy driver -# -# end of IIO dummy driver - -# -# Filters -# -# CONFIG_ADMV8818 is not set -# end of Filters - -# -# Frequency Synthesizers DDS/PLL -# - -# -# Clock Generator/Distribution -# -# CONFIG_AD9523 is not set -# end of Clock Generator/Distribution - -# -# Phase-Locked Loop (PLL) frequency synthesizers -# -# CONFIG_ADF4350 is not set -# CONFIG_ADF4371 is not set -# CONFIG_ADF4377 is not set -# CONFIG_ADMFM2000 is not set -# CONFIG_ADMV1013 is not set -# CONFIG_ADMV1014 is not set -# CONFIG_ADMV4420 is not set -# CONFIG_ADRF6780 is not set -# end of Phase-Locked Loop (PLL) frequency synthesizers -# end of Frequency Synthesizers DDS/PLL - -# -# Digital gyroscope sensors -# -# CONFIG_ADIS16080 is not set -# CONFIG_ADIS16130 is not set -# CONFIG_ADIS16136 is not set -# CONFIG_ADIS16260 is not set -# CONFIG_ADXRS290 is not set -# CONFIG_ADXRS450 is not set -# CONFIG_BMG160 is not set -# CONFIG_FXAS21002C is not set -# CONFIG_MPU3050_I2C is not set -# CONFIG_IIO_ST_GYRO_3AXIS is not set -# CONFIG_ITG3200 is not set -# end of Digital gyroscope sensors - -# -# Health Sensors -# - -# -# Heart Rate Monitors -# -# CONFIG_AFE4403 is not set -# CONFIG_AFE4404 is not set -# CONFIG_MAX30100 is not set -# CONFIG_MAX30102 is not set -# end of Heart Rate Monitors -# end of Health Sensors - -# -# Humidity sensors -# -# CONFIG_AM2315 is not set -# CONFIG_DHT11 is not set -# CONFIG_ENS210 is not set -# CONFIG_HDC100X is not set -# CONFIG_HDC2010 is not set -# CONFIG_HDC3020 is not set -# CONFIG_HTS221 is not set -# CONFIG_HTU21 is not set -# CONFIG_SI7005 is not set -# CONFIG_SI7020 is not set -# end of Humidity sensors - -# -# Inertial measurement units -# -# CONFIG_ADIS16400 is not set -# CONFIG_ADIS16460 is not set -# CONFIG_ADIS16475 is not set -# CONFIG_ADIS16480 is not set -# CONFIG_BMI160_I2C is not set -# CONFIG_BMI160_SPI is not set -# CONFIG_BMI323_I2C is not set -# CONFIG_BMI323_SPI is not set -# CONFIG_BOSCH_BNO055_SERIAL is not set -# CONFIG_BOSCH_BNO055_I2C is not set -# CONFIG_FXOS8700_I2C is not set -# CONFIG_FXOS8700_SPI is not set -# CONFIG_KMX61 is not set -# CONFIG_INV_ICM42600_I2C is not set -# CONFIG_INV_ICM42600_SPI is not set -# CONFIG_INV_MPU6050_I2C is not set -# CONFIG_INV_MPU6050_SPI is not set -# CONFIG_IIO_ST_LSM6DSX is not set -# CONFIG_IIO_ST_LSM9DS0 is not set -# end of Inertial measurement units - -# -# Light sensors -# -# CONFIG_ADJD_S311 is not set -# CONFIG_ADUX1020 is not set -# CONFIG_AL3010 is not set -# CONFIG_AL3320A is not set -# CONFIG_APDS9300 is not set -# CONFIG_APDS9306 is not set -# CONFIG_APDS9960 is not set -# CONFIG_AS73211 is not set -# CONFIG_BH1745 is not set -# CONFIG_BH1750 is not set -# CONFIG_BH1780 is not set -# CONFIG_CM32181 is not set -# CONFIG_CM3232 is not set -# CONFIG_CM3323 is not set -# CONFIG_CM3605 is not set -# CONFIG_CM36651 is not set -# CONFIG_GP2AP002 is not set -# CONFIG_GP2AP020A00F is not set -# CONFIG_SENSORS_ISL29018 is not set -# CONFIG_SENSORS_ISL29028 is not set -# CONFIG_ISL29125 is not set -# CONFIG_ISL76682 is not set -# CONFIG_JSA1212 is not set -# CONFIG_ROHM_BU27008 is not set -# CONFIG_ROHM_BU27034 is not set -# CONFIG_RPR0521 is not set -# CONFIG_LTR390 is not set -# CONFIG_LTR501 is not set -# CONFIG_LTRF216A is not set -# CONFIG_LV0104CS is not set -# CONFIG_MAX44000 is not set -# CONFIG_MAX44009 is not set -# CONFIG_NOA1305 is not set -# CONFIG_OPT3001 is not set -# CONFIG_OPT4001 is not set -# CONFIG_PA12203001 is not set -# CONFIG_SI1133 is not set -# CONFIG_SI1145 is not set -# CONFIG_STK3310 is not set -# CONFIG_ST_UVIS25 is not set -# CONFIG_TCS3414 is not set -# CONFIG_TCS3472 is not set -# CONFIG_SENSORS_TSL2563 is not set -# CONFIG_TSL2583 is not set -# CONFIG_TSL2591 is not set -# CONFIG_TSL2772 is not set -# CONFIG_TSL4531 is not set -# CONFIG_US5182D is not set -# CONFIG_VCNL4000 is not set -# CONFIG_VCNL4035 is not set -# CONFIG_VEML6030 is not set -# CONFIG_VEML6040 is not set -# CONFIG_VEML6070 is not set -# CONFIG_VEML6075 is not set -# CONFIG_VL6180 is not set -# CONFIG_ZOPT2201 is not set -# end of Light sensors - -# -# Magnetometer sensors -# -# CONFIG_AF8133J is not set -# CONFIG_AK8974 is not set -# CONFIG_AK8975 is not set -# CONFIG_AK09911 is not set -# CONFIG_BMC150_MAGN_I2C is not set -# CONFIG_BMC150_MAGN_SPI is not set -# CONFIG_MAG3110 is not set -# CONFIG_MMC35240 is not set -# CONFIG_IIO_ST_MAGN_3AXIS is not set -# CONFIG_SENSORS_HMC5843_I2C is not set -# CONFIG_SENSORS_HMC5843_SPI is not set -# CONFIG_SENSORS_RM3100_I2C is not set -# CONFIG_SENSORS_RM3100_SPI is not set -# CONFIG_TI_TMAG5273 is not set -# CONFIG_YAMAHA_YAS530 is not set -# end of Magnetometer sensors - -# -# Multiplexers -# -# CONFIG_IIO_MUX is not set -# end of Multiplexers - -# -# Inclinometer sensors -# -# end of Inclinometer sensors - -# -# Triggers - standalone -# -# CONFIG_IIO_HRTIMER_TRIGGER is not set -# CONFIG_IIO_INTERRUPT_TRIGGER is not set -# CONFIG_IIO_TIGHTLOOP_TRIGGER is not set -# CONFIG_IIO_SYSFS_TRIGGER is not set -# end of Triggers - standalone - -# -# Linear and angular position sensors -# -# end of Linear and angular position sensors - -# -# Digital potentiometers -# -# CONFIG_AD5110 is not set -# CONFIG_AD5272 is not set -# CONFIG_DS1803 is not set -# CONFIG_MAX5432 is not set -# CONFIG_MAX5481 is not set -# CONFIG_MAX5487 is not set -# CONFIG_MCP4018 is not set -# CONFIG_MCP4131 is not set -# CONFIG_MCP4531 is not set -# CONFIG_MCP41010 is not set -# CONFIG_TPL0102 is not set -# CONFIG_X9250 is not set -# end of Digital potentiometers - -# -# Digital potentiostats -# -# CONFIG_LMP91000 is not set -# end of Digital potentiostats - -# -# Pressure sensors -# -# CONFIG_ABP060MG is not set -# CONFIG_ROHM_BM1390 is not set -# CONFIG_BMP280 is not set -# CONFIG_DLHL60D is not set -# CONFIG_DPS310 is not set -# CONFIG_HP03 is not set -# CONFIG_HSC030PA is not set -# CONFIG_ICP10100 is not set -# CONFIG_MPL115_I2C is not set -# CONFIG_MPL115_SPI is not set -# CONFIG_MPL3115 is not set -# CONFIG_MPRLS0025PA is not set -# CONFIG_MS5611 is not set -# CONFIG_MS5637 is not set -# CONFIG_SDP500 is not set -# CONFIG_IIO_ST_PRESS is not set -# CONFIG_T5403 is not set -# CONFIG_HP206C is not set -# CONFIG_ZPA2326 is not set -# end of Pressure sensors - -# -# Lightning sensors -# -# CONFIG_AS3935 is not set -# end of Lightning sensors - -# -# Proximity and distance sensors -# -# CONFIG_HX9023S is not set -# CONFIG_IRSD200 is not set -# CONFIG_ISL29501 is not set -# CONFIG_LIDAR_LITE_V2 is not set -# CONFIG_MB1232 is not set -# CONFIG_PING is not set -# CONFIG_RFD77402 is not set -# CONFIG_SRF04 is not set -# CONFIG_SX9310 is not set -# CONFIG_SX9324 is not set -# CONFIG_SX9360 is not set -# CONFIG_SX9500 is not set -# CONFIG_SRF08 is not set -# CONFIG_VCNL3020 is not set -# CONFIG_VL53L0X_I2C is not set -# CONFIG_AW96103 is not set -# end of Proximity and distance sensors - -# -# Resolver to digital converters -# -# CONFIG_AD2S90 is not set -# CONFIG_AD2S1200 is not set -# CONFIG_AD2S1210 is not set -# end of Resolver to digital converters - -# -# Temperature sensors -# -# CONFIG_LTC2983 is not set -# CONFIG_MAXIM_THERMOCOUPLE is not set -# CONFIG_MLX90614 is not set -# CONFIG_MLX90632 is not set -# CONFIG_MLX90635 is not set -# CONFIG_TMP006 is not set -# CONFIG_TMP007 is not set -# CONFIG_TMP117 is not set -# CONFIG_TSYS01 is not set -# CONFIG_TSYS02D is not set -# CONFIG_MAX30208 is not set -# CONFIG_MAX31856 is not set -# CONFIG_MAX31865 is not set -# CONFIG_MCP9600 is not set -# end of Temperature sensors - -# CONFIG_NTB is not set -CONFIG_PWM=y -# CONFIG_PWM_DEBUG is not set -# CONFIG_PWM_ATMEL_TCB is not set -# CONFIG_PWM_CLK is not set -# CONFIG_PWM_DWC is not set -# CONFIG_PWM_FSL_FTM is not set -# CONFIG_PWM_GPIO is not set -# CONFIG_PWM_PCA9685 is not set -CONFIG_PWM_ROCKCHIP=y -# CONFIG_PWM_XILINX is not set - -# -# IRQ chip support -# -CONFIG_IRQCHIP=y -CONFIG_ARM_GIC=y -CONFIG_ARM_GIC_MAX_NR=1 -CONFIG_ARM_GIC_V2M=y -CONFIG_ARM_GIC_V3=y -CONFIG_ARM_GIC_V3_ITS=y -CONFIG_IRQ_MSI_LIB=y -# CONFIG_AL_FIC is not set -# CONFIG_LAN966X_OIC is not set -# CONFIG_XILINX_INTC is not set -CONFIG_PARTITION_PERCPU=y -# end of IRQ chip support - -# CONFIG_IPACK_BUS is not set -CONFIG_ARCH_HAS_RESET_CONTROLLER=y -CONFIG_RESET_CONTROLLER=y -# CONFIG_RESET_GPIO is not set -CONFIG_RESET_SCMI=y -# CONFIG_RESET_SIMPLE is not set -# CONFIG_RESET_TI_SYSCON is not set -# CONFIG_RESET_TI_TPS380X is not set - -# -# PHY Subsystem -# -CONFIG_GENERIC_PHY=y -CONFIG_GENERIC_PHY_MIPI_DPHY=y -# CONFIG_PHY_CAN_TRANSCEIVER is not set - -# -# PHY drivers for Broadcom platforms -# -# CONFIG_BCM_KONA_USB2_PHY is not set -# end of PHY drivers for Broadcom platforms - -# CONFIG_PHY_CADENCE_TORRENT is not set -# CONFIG_PHY_CADENCE_DPHY is not set -# CONFIG_PHY_CADENCE_DPHY_RX is not set -# CONFIG_PHY_CADENCE_SIERRA is not set -# CONFIG_PHY_CADENCE_SALVO is not set -# CONFIG_PHY_PXA_28NM_HSIC is not set -# CONFIG_PHY_PXA_28NM_USB2 is not set -# CONFIG_PHY_LAN966X_SERDES is not set -# CONFIG_PHY_CPCAP_USB is not set -# CONFIG_PHY_MAPPHONE_MDM6600 is not set -# CONFIG_PHY_OCELOT_SERDES is not set -# CONFIG_PHY_ROCKCHIP_DP is not set -# CONFIG_PHY_ROCKCHIP_DPHY_RX0 is not set -# CONFIG_PHY_ROCKCHIP_EMMC is not set -CONFIG_PHY_ROCKCHIP_INNO_HDMI=y -CONFIG_PHY_ROCKCHIP_INNO_USB2=y -CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y -CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y -CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y -CONFIG_PHY_ROCKCHIP_PCIE=y -# CONFIG_PHY_ROCKCHIP_SAMSUNG_HDPTX is not set -# CONFIG_PHY_ROCKCHIP_SNPS_PCIE3 is not set -# CONFIG_PHY_ROCKCHIP_TYPEC is not set -# CONFIG_PHY_ROCKCHIP_USB is not set -# CONFIG_PHY_ROCKCHIP_USBDP is not set -# end of PHY Subsystem - -# CONFIG_POWERCAP is not set -# CONFIG_MCB is not set - -# -# Performance monitor support -# -# CONFIG_ARM_CCI_PMU is not set -# CONFIG_ARM_CCN is not set -# CONFIG_ARM_CMN is not set -# CONFIG_ARM_NI is not set -CONFIG_ARM_PMU=y -# CONFIG_ARM_SMMU_V3_PMU is not set -CONFIG_ARM_PMUV3=y -# CONFIG_ARM_DSU_PMU is not set -# CONFIG_ARM_SPE_PMU is not set -# CONFIG_HISI_PCIE_PMU is not set -# CONFIG_HNS3_PMU is not set -# CONFIG_DWC_PCIE_PMU is not set -# CONFIG_ARM_CORESIGHT_PMU_ARCH_SYSTEM_PMU is not set -# end of Performance monitor support - -# CONFIG_RAS is not set -# CONFIG_USB4 is not set - -# -# Android -# -CONFIG_ANDROID_BINDER_IPC=y -CONFIG_ANDROID_BINDERFS=y -CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder" -# CONFIG_ANDROID_BINDER_IPC_SELFTEST is not set -# end of Android - -# CONFIG_LIBNVDIMM is not set -# CONFIG_DAX is not set -CONFIG_NVMEM=y -CONFIG_NVMEM_SYSFS=y -CONFIG_NVMEM_LAYOUTS=y - -# -# Layout Types -# -# CONFIG_NVMEM_LAYOUT_SL28_VPD is not set -# CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set -# CONFIG_NVMEM_LAYOUT_U_BOOT_ENV is not set -# end of Layout Types - -# CONFIG_NVMEM_RMEM is not set -# CONFIG_NVMEM_ROCKCHIP_EFUSE is not set -# CONFIG_NVMEM_ROCKCHIP_OTP is not set - -# -# HW tracing support -# -# CONFIG_STM is not set -# CONFIG_INTEL_TH is not set -# CONFIG_HISI_PTT is not set -# end of HW tracing support - -# CONFIG_FPGA is not set -# CONFIG_FSI is not set -# CONFIG_TEE is not set -CONFIG_PM_OPP=y -# CONFIG_SIOX is not set -# CONFIG_SLIMBUS is not set -# CONFIG_INTERCONNECT is not set -# CONFIG_COUNTER is not set -# CONFIG_MOST is not set -# CONFIG_PECI is not set -# CONFIG_HTE is not set -# CONFIG_CDX_BUS is not set -# end of Device Drivers - -# -# File systems -# -CONFIG_DCACHE_WORD_ACCESS=y -# CONFIG_VALIDATE_FS_PARSER is not set -CONFIG_FS_IOMAP=y -CONFIG_FS_STACK=y -CONFIG_BUFFER_HEAD=y -CONFIG_LEGACY_DIRECT_IO=y -# CONFIG_EXT2_FS is not set -# CONFIG_EXT3_FS is not set -CONFIG_EXT4_FS=y -CONFIG_EXT4_USE_FOR_EXT2=y -CONFIG_EXT4_FS_POSIX_ACL=y -CONFIG_EXT4_FS_SECURITY=y -# CONFIG_EXT4_DEBUG is not set -CONFIG_JBD2=y -# CONFIG_JBD2_DEBUG is not set -CONFIG_FS_MBCACHE=y -# CONFIG_REISERFS_FS is not set -# CONFIG_JFS_FS is not set -CONFIG_XFS_FS=y -# CONFIG_XFS_SUPPORT_V4 is not set -CONFIG_XFS_SUPPORT_ASCII_CI=y -# CONFIG_XFS_QUOTA is not set -CONFIG_XFS_POSIX_ACL=y -# CONFIG_XFS_RT is not set -# CONFIG_XFS_ONLINE_SCRUB is not set -# CONFIG_XFS_WARN is not set -# CONFIG_XFS_DEBUG is not set -# CONFIG_GFS2_FS is not set -# CONFIG_OCFS2_FS is not set -CONFIG_BTRFS_FS=m -CONFIG_BTRFS_FS_POSIX_ACL=y -# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set -# CONFIG_BTRFS_DEBUG is not set -# CONFIG_BTRFS_ASSERT is not set -# CONFIG_BTRFS_FS_REF_VERIFY is not set -# CONFIG_NILFS2_FS is not set -CONFIG_F2FS_FS=y -CONFIG_F2FS_STAT_FS=y -CONFIG_F2FS_FS_XATTR=y -CONFIG_F2FS_FS_POSIX_ACL=y -CONFIG_F2FS_FS_SECURITY=y -# CONFIG_F2FS_CHECK_FS is not set -# CONFIG_F2FS_FAULT_INJECTION is not set -# CONFIG_F2FS_FS_COMPRESSION is not set -CONFIG_F2FS_IOSTAT=y -# CONFIG_F2FS_UNFAIR_RWSEM is not set -# CONFIG_BCACHEFS_FS is not set -CONFIG_FS_POSIX_ACL=y -CONFIG_EXPORTFS=y -# CONFIG_EXPORTFS_BLOCK_OPS is not set -CONFIG_FILE_LOCKING=y -# CONFIG_FS_ENCRYPTION is not set -# CONFIG_FS_VERITY is not set -CONFIG_FSNOTIFY=y -# CONFIG_DNOTIFY is not set -CONFIG_INOTIFY_USER=y -# CONFIG_FANOTIFY is not set -CONFIG_QUOTA=y -# CONFIG_QUOTA_NETLINK_INTERFACE is not set -# CONFIG_QUOTA_DEBUG is not set -# CONFIG_QFMT_V1 is not set -# CONFIG_QFMT_V2 is not set -CONFIG_QUOTACTL=y -CONFIG_AUTOFS_FS=y -CONFIG_FUSE_FS=m -# CONFIG_CUSE is not set -# CONFIG_VIRTIO_FS is not set -CONFIG_FUSE_PASSTHROUGH=y -CONFIG_OVERLAY_FS=m -# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set -CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y -# CONFIG_OVERLAY_FS_INDEX is not set -# CONFIG_OVERLAY_FS_XINO_AUTO is not set -# CONFIG_OVERLAY_FS_METACOPY is not set -# CONFIG_OVERLAY_FS_DEBUG is not set - -# -# Caches -# -CONFIG_NETFS_SUPPORT=m -CONFIG_NETFS_STATS=y -# CONFIG_NETFS_DEBUG is not set -CONFIG_FSCACHE=y -CONFIG_FSCACHE_STATS=y -CONFIG_CACHEFILES=m -# CONFIG_CACHEFILES_DEBUG is not set -# CONFIG_CACHEFILES_ERROR_INJECTION is not set -# CONFIG_CACHEFILES_ONDEMAND is not set -# end of Caches - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=m -CONFIG_JOLIET=y -# CONFIG_ZISOFS is not set -CONFIG_UDF_FS=m -# end of CD-ROM/DVD Filesystems - -# -# DOS/FAT/EXFAT/NT Filesystems -# -CONFIG_FAT_FS=y -# CONFIG_MSDOS_FS is not set -CONFIG_VFAT_FS=y -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -CONFIG_FAT_DEFAULT_UTF8=y -CONFIG_EXFAT_FS=m -CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8" -CONFIG_NTFS3_FS=m -# CONFIG_NTFS3_64BIT_CLUSTER is not set -# CONFIG_NTFS3_LZX_XPRESS is not set -# CONFIG_NTFS3_FS_POSIX_ACL is not set -# CONFIG_NTFS_FS is not set -# end of DOS/FAT/EXFAT/NT Filesystems - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_PROC_VMCORE=y -# CONFIG_PROC_VMCORE_DEVICE_DUMP is not set -CONFIG_PROC_SYSCTL=y -CONFIG_PROC_PAGE_MONITOR=y -CONFIG_PROC_CHILDREN=y -CONFIG_KERNFS=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_TMPFS_XATTR=y -CONFIG_TMPFS_INODE64=y -# CONFIG_TMPFS_QUOTA is not set -CONFIG_ARCH_SUPPORTS_HUGETLBFS=y -CONFIG_HUGETLBFS=y -CONFIG_HUGETLB_PAGE=y -CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y -CONFIG_ARCH_HAS_GIGANTIC_PAGE=y -CONFIG_CONFIGFS_FS=y -CONFIG_EFIVAR_FS=y -# end of Pseudo filesystems - -# CONFIG_MISC_FILESYSTEMS is not set -CONFIG_NETWORK_FILESYSTEMS=y -CONFIG_NFS_FS=m -CONFIG_NFS_V2=m -CONFIG_NFS_V3=m -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=m -CONFIG_NFS_V4_1=y -CONFIG_NFS_V4_2=y -CONFIG_PNFS_FILE_LAYOUT=m -CONFIG_PNFS_BLOCK=m -CONFIG_PNFS_FLEXFILE_LAYOUT=m -CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" -# CONFIG_NFS_V4_1_MIGRATION is not set -CONFIG_NFS_FSCACHE=y -# CONFIG_NFS_USE_LEGACY_DNS is not set -CONFIG_NFS_USE_KERNEL_DNS=y -CONFIG_NFS_DISABLE_UDP_SUPPORT=y -CONFIG_NFS_V4_2_READ_PLUS=y -# CONFIG_NFSD is not set -CONFIG_GRACE_PERIOD=m -CONFIG_LOCKD=m -CONFIG_LOCKD_V4=y -CONFIG_NFS_ACL_SUPPORT=m -CONFIG_NFS_COMMON=y -CONFIG_NFS_V4_2_SSC_HELPER=y -CONFIG_SUNRPC=m -CONFIG_SUNRPC_GSS=m -CONFIG_SUNRPC_BACKCHANNEL=y -CONFIG_RPCSEC_GSS_KRB5=m -# CONFIG_SUNRPC_DEBUG is not set -# CONFIG_CEPH_FS is not set -CONFIG_CIFS=m -CONFIG_CIFS_STATS2=y -CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y -CONFIG_CIFS_UPCALL=y -CONFIG_CIFS_XATTR=y -# CONFIG_CIFS_POSIX is not set -CONFIG_CIFS_DEBUG=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set -# CONFIG_CIFS_DFS_UPCALL is not set -# CONFIG_CIFS_SWN_UPCALL is not set -CONFIG_CIFS_FSCACHE=y -# CONFIG_CIFS_COMPRESSION is not set -# CONFIG_SMB_SERVER is not set -CONFIG_SMBFS=m -# CONFIG_CODA_FS is not set -# CONFIG_AFS_FS is not set -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="iso8859-1" -CONFIG_NLS_CODEPAGE_437=y -# CONFIG_NLS_CODEPAGE_737 is not set -# CONFIG_NLS_CODEPAGE_775 is not set -# CONFIG_NLS_CODEPAGE_850 is not set -# CONFIG_NLS_CODEPAGE_852 is not set -# CONFIG_NLS_CODEPAGE_855 is not set -# CONFIG_NLS_CODEPAGE_857 is not set -# CONFIG_NLS_CODEPAGE_860 is not set -# CONFIG_NLS_CODEPAGE_861 is not set -# CONFIG_NLS_CODEPAGE_862 is not set -# CONFIG_NLS_CODEPAGE_863 is not set -# CONFIG_NLS_CODEPAGE_864 is not set -# CONFIG_NLS_CODEPAGE_865 is not set -# CONFIG_NLS_CODEPAGE_866 is not set -# CONFIG_NLS_CODEPAGE_869 is not set -# CONFIG_NLS_CODEPAGE_936 is not set -# CONFIG_NLS_CODEPAGE_950 is not set -# CONFIG_NLS_CODEPAGE_932 is not set -# CONFIG_NLS_CODEPAGE_949 is not set -# CONFIG_NLS_CODEPAGE_874 is not set -# CONFIG_NLS_ISO8859_8 is not set -# CONFIG_NLS_CODEPAGE_1250 is not set -# CONFIG_NLS_CODEPAGE_1251 is not set -# CONFIG_NLS_ASCII is not set -CONFIG_NLS_ISO8859_1=y -# CONFIG_NLS_ISO8859_2 is not set -# CONFIG_NLS_ISO8859_3 is not set -# CONFIG_NLS_ISO8859_4 is not set -# CONFIG_NLS_ISO8859_5 is not set -# CONFIG_NLS_ISO8859_6 is not set -# CONFIG_NLS_ISO8859_7 is not set -# CONFIG_NLS_ISO8859_9 is not set -# CONFIG_NLS_ISO8859_13 is not set -# CONFIG_NLS_ISO8859_14 is not set -# CONFIG_NLS_ISO8859_15 is not set -# CONFIG_NLS_KOI8_R is not set -# CONFIG_NLS_KOI8_U is not set -# CONFIG_NLS_MAC_ROMAN is not set -# CONFIG_NLS_MAC_CELTIC is not set -# CONFIG_NLS_MAC_CENTEURO is not set -# CONFIG_NLS_MAC_CROATIAN is not set -# CONFIG_NLS_MAC_CYRILLIC is not set -# CONFIG_NLS_MAC_GAELIC is not set -# CONFIG_NLS_MAC_GREEK is not set -# CONFIG_NLS_MAC_ICELAND is not set -# CONFIG_NLS_MAC_INUIT is not set -# CONFIG_NLS_MAC_ROMANIAN is not set -# CONFIG_NLS_MAC_TURKISH is not set -CONFIG_NLS_UTF8=y -CONFIG_NLS_UCS2_UTILS=m -# CONFIG_DLM is not set -CONFIG_UNICODE=y -# CONFIG_UNICODE_NORMALIZATION_SELFTEST is not set -CONFIG_IO_WQ=y -# end of File systems - -# -# Security options -# -CONFIG_KEYS=y -# CONFIG_KEYS_REQUEST_CACHE is not set -# CONFIG_PERSISTENT_KEYRINGS is not set -# CONFIG_TRUSTED_KEYS is not set -# CONFIG_ENCRYPTED_KEYS is not set -# CONFIG_KEY_DH_OPERATIONS is not set -# CONFIG_SECURITY_DMESG_RESTRICT is not set -CONFIG_PROC_MEM_ALWAYS_FORCE=y -# CONFIG_PROC_MEM_FORCE_PTRACE is not set -# CONFIG_PROC_MEM_NO_FORCE is not set -# CONFIG_SECURITY is not set -# CONFIG_SECURITYFS is not set -# CONFIG_HARDENED_USERCOPY is not set -# CONFIG_FORTIFY_SOURCE is not set -# CONFIG_STATIC_USERMODEHELPER is not set -# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set -CONFIG_DEFAULT_SECURITY_DAC=y -CONFIG_LSM="" - -# -# Kernel hardening options -# - -# -# Memory initialization -# -CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y -CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y -CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y -# CONFIG_INIT_STACK_NONE is not set -# CONFIG_INIT_STACK_ALL_PATTERN is not set -CONFIG_INIT_STACK_ALL_ZERO=y -# CONFIG_GCC_PLUGIN_STACKLEAK is not set -# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set -# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set -CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y -# CONFIG_ZERO_CALL_USED_REGS is not set -# end of Memory initialization - -# -# Hardening of kernel data structures -# -# CONFIG_LIST_HARDENED is not set -# CONFIG_BUG_ON_DATA_CORRUPTION is not set -# end of Hardening of kernel data structures - -CONFIG_RANDSTRUCT_NONE=y -# CONFIG_RANDSTRUCT_FULL is not set -# CONFIG_RANDSTRUCT_PERFORMANCE is not set -# end of Kernel hardening options -# end of Security options - -CONFIG_XOR_BLOCKS=m -CONFIG_CRYPTO=y - -# -# Crypto core or helper -# -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ALGAPI2=y -CONFIG_CRYPTO_AEAD=y -CONFIG_CRYPTO_AEAD2=y -CONFIG_CRYPTO_SIG2=y -CONFIG_CRYPTO_SKCIPHER=y -CONFIG_CRYPTO_SKCIPHER2=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_HASH2=y -CONFIG_CRYPTO_RNG=y -CONFIG_CRYPTO_RNG2=y -CONFIG_CRYPTO_RNG_DEFAULT=y -CONFIG_CRYPTO_AKCIPHER2=y -CONFIG_CRYPTO_KPP2=y -CONFIG_CRYPTO_KPP=y -CONFIG_CRYPTO_ACOMP2=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_MANAGER2=y -# CONFIG_CRYPTO_USER is not set -CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y -CONFIG_CRYPTO_NULL=y -CONFIG_CRYPTO_NULL2=y -# CONFIG_CRYPTO_PCRYPT is not set -# CONFIG_CRYPTO_CRYPTD is not set -CONFIG_CRYPTO_AUTHENC=m -# CONFIG_CRYPTO_TEST is not set -# end of Crypto core or helper - -# -# Public-key cryptography -# -# CONFIG_CRYPTO_RSA is not set -# CONFIG_CRYPTO_DH is not set -CONFIG_CRYPTO_ECC=y -CONFIG_CRYPTO_ECDH=y -# CONFIG_CRYPTO_ECDSA is not set -# CONFIG_CRYPTO_ECRDSA is not set -# CONFIG_CRYPTO_CURVE25519 is not set -# end of Public-key cryptography - -# -# Block ciphers -# -CONFIG_CRYPTO_AES=y -# CONFIG_CRYPTO_AES_TI is not set -# CONFIG_CRYPTO_ARIA is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -CONFIG_CRYPTO_DES=y -# CONFIG_CRYPTO_FCRYPT is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_SM4_GENERIC is not set -# CONFIG_CRYPTO_TWOFISH is not set -# end of Block ciphers - -# -# Length-preserving ciphers and modes -# -# CONFIG_CRYPTO_ADIANTUM is not set -# CONFIG_CRYPTO_CHACHA20 is not set -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_CTR=y -# CONFIG_CRYPTO_CTS is not set -CONFIG_CRYPTO_ECB=y -# CONFIG_CRYPTO_HCTR2 is not set -# CONFIG_CRYPTO_KEYWRAP is not set -# CONFIG_CRYPTO_LRW is not set -# CONFIG_CRYPTO_PCBC is not set -CONFIG_CRYPTO_XTS=y -# end of Length-preserving ciphers and modes - -# -# AEAD (authenticated encryption with associated data) ciphers -# -# CONFIG_CRYPTO_AEGIS128 is not set -# CONFIG_CRYPTO_CHACHA20POLY1305 is not set -CONFIG_CRYPTO_CCM=y -CONFIG_CRYPTO_GCM=y -CONFIG_CRYPTO_GENIV=y -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_ECHAINIV=m -CONFIG_CRYPTO_ESSIV=m -# end of AEAD (authenticated encryption with associated data) ciphers - -# -# Hashes, digests, and MACs -# -CONFIG_CRYPTO_BLAKE2B=m -CONFIG_CRYPTO_CMAC=y -CONFIG_CRYPTO_GHASH=y -CONFIG_CRYPTO_HMAC=y -# CONFIG_CRYPTO_MD4 is not set -CONFIG_CRYPTO_MD5=y -# CONFIG_CRYPTO_MICHAEL_MIC is not set -# CONFIG_CRYPTO_POLY1305 is not set -# CONFIG_CRYPTO_RMD160 is not set -CONFIG_CRYPTO_SHA1=y -CONFIG_CRYPTO_SHA256=y -CONFIG_CRYPTO_SHA512=y -CONFIG_CRYPTO_SHA3=y -# CONFIG_CRYPTO_SM3_GENERIC is not set -# CONFIG_CRYPTO_STREEBOG is not set -# CONFIG_CRYPTO_VMAC is not set -# CONFIG_CRYPTO_WP512 is not set -# CONFIG_CRYPTO_XCBC is not set -CONFIG_CRYPTO_XXHASH=m -# end of Hashes, digests, and MACs - -# -# CRCs (cyclic redundancy checks) -# -CONFIG_CRYPTO_CRC32C=y -CONFIG_CRYPTO_CRC32=y -# CONFIG_CRYPTO_CRCT10DIF is not set -# end of CRCs (cyclic redundancy checks) - -# -# Compression -# -# CONFIG_CRYPTO_DEFLATE is not set -# CONFIG_CRYPTO_LZO is not set -# CONFIG_CRYPTO_842 is not set -# CONFIG_CRYPTO_LZ4 is not set -# CONFIG_CRYPTO_LZ4HC is not set -# CONFIG_CRYPTO_ZSTD is not set -# end of Compression - -# -# Random number generation -# -# CONFIG_CRYPTO_ANSI_CPRNG is not set -CONFIG_CRYPTO_DRBG_MENU=y -CONFIG_CRYPTO_DRBG_HMAC=y -CONFIG_CRYPTO_DRBG_HASH=y -CONFIG_CRYPTO_DRBG_CTR=y -CONFIG_CRYPTO_DRBG=y -CONFIG_CRYPTO_JITTERENTROPY=y -CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64 -CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32 -CONFIG_CRYPTO_JITTERENTROPY_OSR=1 -# end of Random number generation - -# -# Userspace interface -# -CONFIG_CRYPTO_USER_API=y -CONFIG_CRYPTO_USER_API_HASH=y -CONFIG_CRYPTO_USER_API_SKCIPHER=y -# CONFIG_CRYPTO_USER_API_RNG is not set -# CONFIG_CRYPTO_USER_API_AEAD is not set -# CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set -# end of Userspace interface - -# CONFIG_CRYPTO_NHPOLY1305_NEON is not set -CONFIG_CRYPTO_CHACHA20_NEON=m - -# -# Accelerated Cryptographic Algorithms for CPU (arm64) -# -# CONFIG_CRYPTO_GHASH_ARM64_CE is not set -CONFIG_CRYPTO_POLY1305_NEON=m -CONFIG_CRYPTO_SHA1_ARM64_CE=y -CONFIG_CRYPTO_SHA256_ARM64=y -CONFIG_CRYPTO_SHA2_ARM64_CE=y -CONFIG_CRYPTO_SHA512_ARM64=y -CONFIG_CRYPTO_SHA512_ARM64_CE=y -# CONFIG_CRYPTO_SHA3_ARM64 is not set -# CONFIG_CRYPTO_SM3_NEON is not set -# CONFIG_CRYPTO_SM3_ARM64_CE is not set -# CONFIG_CRYPTO_POLYVAL_ARM64_CE is not set -# CONFIG_CRYPTO_AES_ARM64 is not set -CONFIG_CRYPTO_AES_ARM64_CE=y -CONFIG_CRYPTO_AES_ARM64_CE_BLK=y -# CONFIG_CRYPTO_AES_ARM64_NEON_BLK is not set -# CONFIG_CRYPTO_AES_ARM64_BS is not set -# CONFIG_CRYPTO_SM4_ARM64_CE is not set -# CONFIG_CRYPTO_SM4_ARM64_CE_BLK is not set -# CONFIG_CRYPTO_SM4_ARM64_NEON_BLK is not set -# CONFIG_CRYPTO_AES_ARM64_CE_CCM is not set -# CONFIG_CRYPTO_SM4_ARM64_CE_CCM is not set -# CONFIG_CRYPTO_SM4_ARM64_CE_GCM is not set -# end of Accelerated Cryptographic Algorithms for CPU (arm64) - -# CONFIG_CRYPTO_HW is not set -# CONFIG_ASYMMETRIC_KEY_TYPE is not set - -# -# Certificates for signature checking -# -# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set -# end of Certificates for signature checking - -CONFIG_BINARY_PRINTF=y - -# -# Library routines -# -CONFIG_RAID6_PQ=m -CONFIG_RAID6_PQ_BENCHMARK=y -CONFIG_LINEAR_RANGES=y -# CONFIG_PACKING is not set -CONFIG_BITREVERSE=y -CONFIG_HAVE_ARCH_BITREVERSE=y -CONFIG_GENERIC_STRNCPY_FROM_USER=y -CONFIG_GENERIC_STRNLEN_USER=y -CONFIG_GENERIC_NET_UTILS=y -# CONFIG_CORDIC is not set -# CONFIG_PRIME_NUMBERS is not set -CONFIG_RATIONAL=y -CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y -CONFIG_ARCH_HAS_FAST_MULTIPLIER=y -CONFIG_ARCH_USE_SYM_ANNOTATIONS=y -# CONFIG_INDIRECT_PIO is not set -# CONFIG_TRACE_MMIO_ACCESS is not set - -# -# Crypto library routines -# -CONFIG_CRYPTO_LIB_UTILS=y -CONFIG_CRYPTO_LIB_AES=y -CONFIG_CRYPTO_LIB_ARC4=m -CONFIG_CRYPTO_LIB_GF128MUL=y -CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y -CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=m -CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m -CONFIG_CRYPTO_LIB_CHACHA=m -CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m -CONFIG_CRYPTO_LIB_CURVE25519=m -CONFIG_CRYPTO_LIB_DES=y -CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9 -CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=m -CONFIG_CRYPTO_LIB_POLY1305=m -CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m -CONFIG_CRYPTO_LIB_SHA1=y -CONFIG_CRYPTO_LIB_SHA256=y -# end of Crypto library routines - -# CONFIG_CRC_CCITT is not set -CONFIG_CRC16=y -# CONFIG_CRC_T10DIF is not set -# CONFIG_CRC64_ROCKSOFT is not set -CONFIG_CRC_ITU_T=m -CONFIG_CRC32=y -# CONFIG_CRC32_SELFTEST is not set -CONFIG_CRC32_SLICEBY8=y -# CONFIG_CRC32_SLICEBY4 is not set -# CONFIG_CRC32_SARWATE is not set -# CONFIG_CRC32_BIT is not set -# CONFIG_CRC64 is not set -# CONFIG_CRC4 is not set -# CONFIG_CRC7 is not set -CONFIG_LIBCRC32C=y -# CONFIG_CRC8 is not set -CONFIG_XXHASH=y -CONFIG_AUDIT_ARCH_COMPAT_GENERIC=y -# CONFIG_RANDOM32_SELFTEST is not set -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m -CONFIG_LZO_COMPRESS=m -CONFIG_LZO_DECOMPRESS=m -CONFIG_ZSTD_COMMON=y -CONFIG_ZSTD_COMPRESS=m -CONFIG_ZSTD_DECOMPRESS=y -CONFIG_XZ_DEC=y -CONFIG_XZ_DEC_X86=y -CONFIG_XZ_DEC_POWERPC=y -CONFIG_XZ_DEC_ARM=y -CONFIG_XZ_DEC_ARMTHUMB=y -CONFIG_XZ_DEC_ARM64=y -CONFIG_XZ_DEC_SPARC=y -CONFIG_XZ_DEC_RISCV=y -# CONFIG_XZ_DEC_MICROLZMA is not set -CONFIG_XZ_DEC_BCJ=y -# CONFIG_XZ_DEC_TEST is not set -CONFIG_DECOMPRESS_GZIP=y -CONFIG_DECOMPRESS_ZSTD=y -CONFIG_GENERIC_ALLOCATOR=y -CONFIG_XARRAY_MULTI=y -CONFIG_ASSOCIATIVE_ARRAY=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_IOPORT_MAP=y -CONFIG_HAS_DMA=y -CONFIG_DMA_OPS_HELPERS=y -CONFIG_NEED_SG_DMA_FLAGS=y -CONFIG_NEED_SG_DMA_LENGTH=y -CONFIG_NEED_DMA_MAP_STATE=y -CONFIG_ARCH_DMA_ADDR_T_64BIT=y -CONFIG_DMA_DECLARE_COHERENT=y -CONFIG_ARCH_HAS_SETUP_DMA_OPS=y -CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y -CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y -CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y -CONFIG_SWIOTLB=y -# CONFIG_SWIOTLB_DYNAMIC is not set -CONFIG_DMA_BOUNCE_UNALIGNED_KMALLOC=y -CONFIG_DMA_NEED_SYNC=y -# CONFIG_DMA_RESTRICTED_POOL is not set -CONFIG_DMA_NONCOHERENT_MMAP=y -CONFIG_DMA_COHERENT_POOL=y -CONFIG_DMA_DIRECT_REMAP=y -CONFIG_DMA_CMA=y - -# -# Default contiguous memory area size: -# -CONFIG_CMA_SIZE_MBYTES=16 -CONFIG_CMA_SIZE_SEL_MBYTES=y -# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set -# CONFIG_CMA_SIZE_SEL_MIN is not set -# CONFIG_CMA_SIZE_SEL_MAX is not set -CONFIG_CMA_ALIGNMENT=8 -# CONFIG_DMA_API_DEBUG is not set -# CONFIG_DMA_MAP_BENCHMARK is not set -CONFIG_SGL_ALLOC=y -CONFIG_CPU_RMAP=y -CONFIG_DQL=y -CONFIG_GLOB=y -# CONFIG_GLOB_SELFTEST is not set -CONFIG_NLATTR=y -# CONFIG_IRQ_POLL is not set -CONFIG_LIBFDT=y -CONFIG_OID_REGISTRY=m -CONFIG_UCS2_STRING=y -CONFIG_HAVE_GENERIC_VDSO=y -CONFIG_GENERIC_GETTIMEOFDAY=y -CONFIG_GENERIC_VDSO_TIME_NS=y -CONFIG_VDSO_GETRANDOM=y -CONFIG_FONT_SUPPORT=y -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -CONFIG_SG_POOL=y -CONFIG_ARCH_STACKWALK=y -CONFIG_SBITMAP=y -# CONFIG_LWQ_TEST is not set -# end of Library routines - -CONFIG_GENERIC_IOREMAP=y -CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y - -# -# Kernel hacking -# - -# -# printk and dmesg options -# -CONFIG_PRINTK_TIME=y -# CONFIG_PRINTK_CALLER is not set -# CONFIG_STACKTRACE_BUILD_ID is not set -CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 -CONFIG_CONSOLE_LOGLEVEL_QUIET=4 -CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 -# CONFIG_BOOT_PRINTK_DELAY is not set -CONFIG_DYNAMIC_DEBUG=y -CONFIG_DYNAMIC_DEBUG_CORE=y -CONFIG_SYMBOLIC_ERRNAME=y -CONFIG_DEBUG_BUGVERBOSE=y -# end of printk and dmesg options - -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_MISC is not set - -# -# Compile-time checks and compiler options -# -CONFIG_DEBUG_INFO=y -CONFIG_AS_HAS_NON_CONST_ULEB128=y -# CONFIG_DEBUG_INFO_NONE is not set -# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set -# CONFIG_DEBUG_INFO_DWARF4 is not set -CONFIG_DEBUG_INFO_DWARF5=y -CONFIG_DEBUG_INFO_REDUCED=y -CONFIG_DEBUG_INFO_COMPRESSED_NONE=y -# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set -# CONFIG_DEBUG_INFO_COMPRESSED_ZSTD is not set -CONFIG_DEBUG_INFO_SPLIT=y -# CONFIG_GDB_SCRIPTS is not set -CONFIG_FRAME_WARN=2048 -# CONFIG_STRIP_ASM_SYMS is not set -# CONFIG_READABLE_ASM is not set -# CONFIG_HEADERS_INSTALL is not set -# CONFIG_DEBUG_SECTION_MISMATCH is not set -CONFIG_SECTION_MISMATCH_WARN_ONLY=y -# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set -CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y -# CONFIG_VMLINUX_MAP is not set -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set -# end of Compile-time checks and compiler options - -# -# Generic Kernel Debugging Instruments -# -CONFIG_MAGIC_SYSRQ=y -CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 -# CONFIG_MAGIC_SYSRQ_SERIAL is not set -CONFIG_DEBUG_FS=y -CONFIG_DEBUG_FS_ALLOW_ALL=y -# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set -# CONFIG_DEBUG_FS_ALLOW_NONE is not set -CONFIG_HAVE_ARCH_KGDB=y -# CONFIG_KGDB is not set -CONFIG_ARCH_HAS_UBSAN=y -# CONFIG_UBSAN is not set -CONFIG_HAVE_ARCH_KCSAN=y -CONFIG_HAVE_KCSAN_COMPILER=y -# CONFIG_KCSAN is not set -# end of Generic Kernel Debugging Instruments - -# -# Networking Debugging -# -# CONFIG_NET_DEV_REFCNT_TRACKER is not set -# CONFIG_NET_NS_REFCNT_TRACKER is not set -# CONFIG_DEBUG_NET is not set -# end of Networking Debugging - -# -# Memory Debugging -# -# CONFIG_PAGE_EXTENSION is not set -# CONFIG_DEBUG_PAGEALLOC is not set -# CONFIG_SLUB_DEBUG is not set -# CONFIG_PAGE_OWNER is not set -# CONFIG_PAGE_POISONING is not set -# CONFIG_DEBUG_PAGE_REF is not set -# CONFIG_DEBUG_RODATA_TEST is not set -CONFIG_ARCH_HAS_DEBUG_WX=y -# CONFIG_DEBUG_WX is not set -CONFIG_GENERIC_PTDUMP=y -# CONFIG_PTDUMP_DEBUGFS is not set -CONFIG_HAVE_DEBUG_KMEMLEAK=y -# CONFIG_DEBUG_KMEMLEAK is not set -# CONFIG_PER_VMA_LOCK_STATS is not set -# CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SHRINKER_DEBUG is not set -# CONFIG_DEBUG_STACK_USAGE is not set -# CONFIG_SCHED_STACK_END_CHECK is not set -CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_VM_PGTABLE is not set -CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y -# CONFIG_DEBUG_VIRTUAL is not set -# CONFIG_DEBUG_MEMORY_INIT is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set -# CONFIG_MEM_ALLOC_PROFILING is not set -CONFIG_HAVE_ARCH_KASAN=y -CONFIG_HAVE_ARCH_KASAN_SW_TAGS=y -CONFIG_HAVE_ARCH_KASAN_VMALLOC=y -CONFIG_CC_HAS_KASAN_GENERIC=y -CONFIG_CC_HAS_KASAN_SW_TAGS=y -CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y -# CONFIG_KASAN is not set -CONFIG_HAVE_ARCH_KFENCE=y -# CONFIG_KFENCE is not set -# end of Memory Debugging - -# CONFIG_DEBUG_SHIRQ is not set - -# -# Debug Oops, Lockups and Hangs -# -CONFIG_PANIC_ON_OOPS=y -CONFIG_PANIC_ON_OOPS_VALUE=1 -CONFIG_PANIC_TIMEOUT=1 -CONFIG_LOCKUP_DETECTOR=y -CONFIG_SOFTLOCKUP_DETECTOR=y -CONFIG_SOFTLOCKUP_DETECTOR_INTR_STORM=y -# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set -CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y -# CONFIG_HARDLOCKUP_DETECTOR is not set -# CONFIG_DETECT_HUNG_TASK is not set -CONFIG_WQ_WATCHDOG=y -# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set -# CONFIG_TEST_LOCKUP is not set -# end of Debug Oops, Lockups and Hangs - -# -# Scheduler Debugging -# -CONFIG_SCHED_DEBUG=y -CONFIG_SCHED_INFO=y -CONFIG_SCHEDSTATS=y -# end of Scheduler Debugging - -# CONFIG_DEBUG_TIMEKEEPING is not set - -# -# Lock Debugging (spinlocks, mutexes, etc...) -# -CONFIG_LOCK_DEBUGGING_SUPPORT=y -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set -# CONFIG_DEBUG_RWSEMS is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_DEBUG_ATOMIC_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_LOCK_TORTURE_TEST is not set -# CONFIG_WW_MUTEX_SELFTEST is not set -# CONFIG_SCF_TORTURE_TEST is not set -# CONFIG_CSD_LOCK_WAIT_DEBUG is not set -# end of Lock Debugging (spinlocks, mutexes, etc...) - -# CONFIG_DEBUG_IRQFLAGS is not set -CONFIG_STACKTRACE=y -# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set -# CONFIG_DEBUG_KOBJECT is not set - -# -# Debug kernel data structures -# -# CONFIG_DEBUG_LIST is not set -# CONFIG_DEBUG_PLIST is not set -# CONFIG_DEBUG_SG is not set -# CONFIG_DEBUG_NOTIFIERS is not set -# CONFIG_DEBUG_MAPLE_TREE is not set -# end of Debug kernel data structures - -# -# RCU Debugging -# -# CONFIG_RCU_SCALE_TEST is not set -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_RCU_REF_SCALE_TEST is not set -CONFIG_RCU_CPU_STALL_TIMEOUT=21 -CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 -# CONFIG_RCU_CPU_STALL_CPUTIME is not set -CONFIG_RCU_TRACE=y -# CONFIG_RCU_EQS_DEBUG is not set -# end of RCU Debugging - -# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set -CONFIG_CPU_HOTPLUG_STATE_CONTROL=y -# CONFIG_LATENCYTOP is not set -CONFIG_USER_STACKTRACE_SUPPORT=y -CONFIG_NOP_TRACER=y -CONFIG_HAVE_FUNCTION_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y -CONFIG_HAVE_DYNAMIC_FTRACE=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS=y -CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y -CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y -CONFIG_HAVE_SYSCALL_TRACEPOINTS=y -CONFIG_HAVE_C_RECORDMCOUNT=y -CONFIG_TRACE_CLOCK=y -CONFIG_RING_BUFFER=y -CONFIG_EVENT_TRACING=y -CONFIG_CONTEXT_SWITCH_TRACER=y -CONFIG_TRACING=y -CONFIG_GENERIC_TRACER=y -CONFIG_TRACING_SUPPORT=y -CONFIG_FTRACE=y -# CONFIG_BOOTTIME_TRACING is not set -CONFIG_FUNCTION_TRACER=y -CONFIG_FUNCTION_GRAPH_TRACER=y -CONFIG_FUNCTION_GRAPH_RETVAL=y -CONFIG_DYNAMIC_FTRACE=y -CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y -CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS=y -CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y -# CONFIG_FUNCTION_PROFILER is not set -# CONFIG_STACK_TRACER is not set -# CONFIG_IRQSOFF_TRACER is not set -# CONFIG_SCHED_TRACER is not set -# CONFIG_HWLAT_TRACER is not set -# CONFIG_OSNOISE_TRACER is not set -# CONFIG_TIMERLAT_TRACER is not set -# CONFIG_FTRACE_SYSCALLS is not set -# CONFIG_TRACER_SNAPSHOT is not set -CONFIG_BRANCH_PROFILE_NONE=y -# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set -# CONFIG_PROFILE_ALL_BRANCHES is not set -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_UPROBE_EVENTS is not set -CONFIG_FTRACE_MCOUNT_RECORD=y -CONFIG_FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY=y -# CONFIG_SYNTH_EVENTS is not set -# CONFIG_USER_EVENTS is not set -# CONFIG_HIST_TRIGGERS is not set -# CONFIG_TRACE_EVENT_INJECT is not set -# CONFIG_TRACEPOINT_BENCHMARK is not set -# CONFIG_RING_BUFFER_BENCHMARK is not set -# CONFIG_TRACE_EVAL_MAP_FILE is not set -# CONFIG_FTRACE_RECORD_RECURSION is not set -# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set -# CONFIG_FTRACE_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_STARTUP_TEST is not set -# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set -# CONFIG_PREEMPTIRQ_DELAY_TEST is not set -# CONFIG_RV is not set -# CONFIG_SAMPLES is not set -CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y -CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y -# CONFIG_STRICT_DEVMEM is not set - -# -# arm64 Debugging -# -# CONFIG_PID_IN_CONTEXTIDR is not set -# CONFIG_DEBUG_EFI is not set -# CONFIG_ARM64_RELOC_TEST is not set -# CONFIG_CORESIGHT is not set -# end of arm64 Debugging - -# -# Kernel Testing and Coverage -# -# CONFIG_KUNIT is not set -# CONFIG_NOTIFIER_ERROR_INJECTION is not set -# CONFIG_FAULT_INJECTION is not set -CONFIG_ARCH_HAS_KCOV=y -CONFIG_CC_HAS_SANCOV_TRACE_PC=y -# CONFIG_KCOV is not set -# CONFIG_RUNTIME_TESTING_MENU is not set -CONFIG_ARCH_USE_MEMTEST=y -# CONFIG_MEMTEST is not set -# end of Kernel Testing and Coverage - -# -# Rust hacking -# -# end of Rust hacking -# end of Kernel hacking diff --git a/pmos/pinenote-dbus-service/APKBUILD b/pmos/pinenote-dbus-service/APKBUILD deleted file mode 100644 index 0136557..0000000 --- a/pmos/pinenote-dbus-service/APKBUILD +++ /dev/null @@ -1,34 +0,0 @@ -# Maintainer: Petr Hodina -pkgname=pinenote-dbus-service -pkgver=0.2.2_pre5 -_gittag=0.2.2-dev5 -pkgrel=1 -pkgdesc="Dbus daemon for controlling driver aspects on Pine64 Pinenote" -url="https://github.com/m-weigand/pinenote_dbus_service" -arch="aarch64" -license="MIT" -makedepends="cargo" -depends="dbus-dev" -source=" - pinenote-dbus-service-$_gittag.tar.gz::https://github.com/m-weigand/pinenote_dbus_service/archive/refs/tags/v$_gittag.tar.gz - pinenote.initd -" - -builddir="$srcdir/pinenote_dbus_service-$_gittag" - -build() { - cargo build --release --locked -} - -package() { - cargo install --path . --root="$pkgdir/usr" - install -Dm644 dbus_security_configuration/pinenote.conf -t "$pkgdir"/usr/share/dbus-1/system.d/ - install -Dm755 "$srcdir"/pinenote.initd $pkgdir/etc/init.d/pinenote - rm "$pkgdir"/usr/.crates.toml - rm "$pkgdir"/usr/.crates2.json -} - -sha512sums=" -10cf05f9e1e8affec97b532611a9bffb86928cabe4eb9bd321b66e8dba340e6a7916fa0c8286f81300bfa655d5596bba09f0316abcafa6c55128823c78acb807 pinenote-dbus-service-0.2.2-dev5.tar.gz -362c20218610e7a5349eef40d54463a05906e258157e590ad1635591a548ddc60050142cfab41a0423797182e5ae392a7fe6476fc71b9c01cece384351e6f148 pinenote.initd -" diff --git a/pmos/pinenote-dbus-service/pinenote.initd b/pmos/pinenote-dbus-service/pinenote.initd deleted file mode 100644 index 0301c53..0000000 --- a/pmos/pinenote-dbus-service/pinenote.initd +++ /dev/null @@ -1,10 +0,0 @@ -#!/sbin/openrc-run - -description="Launch DBus service for driver aspects" -command="/usr/bin/pinenote_dbus_service" -command_background=yes -pidfile="/run/${RC_SVCNAME}.pid" - -depend() { - need dbus -} From 2eb1b0315c1df15042177deb7c99631b5a0e8a87 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Wed, 7 Jan 2026 22:32:35 -0500 Subject: [PATCH 738/738] ci: add fix_only / minor_only processing to u-boot-pine64-pinenote --- .forgejo/bin/check_ver.sh | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/.forgejo/bin/check_ver.sh b/.forgejo/bin/check_ver.sh index ee9ed3c..b647e57 100755 --- a/.forgejo/bin/check_ver.sh +++ b/.forgejo/bin/check_ver.sh @@ -72,7 +72,24 @@ for pkg in $owned_by_you; do case $pkg in # track u-boot-pine64-pinenote against mainline u-boot, and track upstream rockchip blobs u-boot-pine64-pinenote) - upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1)" + # reproduce catch-all option + if [[ "$minor_only" == *all* || "$minor_only" == *$pkg* ]] && [[ "$minor_only" != *-$pkg* ]]; then + # continues when package version scheme is not semantic, but minor_only or fix_only is set + if ! is_semantic $downstream_version; then + echo "$pkg is not semantic, and minor_only is set" + continue + fi + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*.*}.*\").string" | head -n1) + elif [[ "$fix_only" == *all* || "$fix_only" == *$pkg* ]] && [[ "$fix_only" != *-$pkg* ]]; then + # continues when package version scheme is not semantic, but minor_only or fix_only is set + if ! is_semantic $downstream_version; then + echo "$pkg is not semantic, and fix_only is set" + continue + fi + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r ".stable_versions.[] | match(\"${downstream_version%.*}.*\").string" | head -n1) + else + upstream_version=$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/u-boot" | jq -r '.stable_versions.[]' | head -n1) + fi # some reason the commit now not in APKINDEX, using master instead #commit=$(sed -n "/^P:$pkg$/,/^$/p" APKINDEX | awk -F ':' '{if($1=="c"){print $2}}') @@ -96,8 +113,7 @@ for pkg in $owned_by_you; do echo "$pkg new ddr blob $upstream_ddr version available" echo "$pkg(ddr) $downstream_ddr $upstream_ddr $repo $release" >> out_of_date fi - - ;; + ;; # release-monitoring omits the extra B, while we keep it but put it after the version no. looking-glass) upstream_version="$(curl --fail -X GET -s -H 'Content-Type: application/json' "https://release-monitoring.org/api/project/Alpine/$pkg" | jq -r '.stable_versions.[]' | head -n1)b";; # we want to track both Firefox security upgrades + Zotero upgrades